From 8fca85fa5720cbe6d203e5f7b7e99f49a5caa35f Mon Sep 17 00:00:00 2001 From: David Garske Date: Thu, 13 Aug 2026 09:45:52 -0700 Subject: [PATCH 1/8] TI C2000 example: HWAES=1 AESA offload with HW-vs-SW cross-KATs --- .../ti-c2000-f28p55x/Header/user_settings.h | 30 +++ embedded/ti-c2000-f28p55x/Makefile | 49 +++-- embedded/ti-c2000-f28p55x/README.md | 30 ++- embedded/ti-c2000-f28p55x/Source/wolf_main.c | 173 ++++++++++++++++++ 4 files changed, 267 insertions(+), 15 deletions(-) diff --git a/embedded/ti-c2000-f28p55x/Header/user_settings.h b/embedded/ti-c2000-f28p55x/Header/user_settings.h index 9e692af77..13389c6b5 100644 --- a/embedded/ti-c2000-f28p55x/Header/user_settings.h +++ b/embedded/ti-c2000-f28p55x/Header/user_settings.h @@ -329,6 +329,36 @@ extern "C" { #define NO_AES #endif +#ifdef WOLF_HWAES +/* Offload AES-ECB/CBC/CTR to the on-chip AESA block through the crypto + * callback framework. Software AES stays compiled in: a context opts into + * hardware with wc_AesInit(&aes, NULL, WOLFSSL_C2000_DEVID), while one + * initialised with INVALID_DEVID stays pure software. That is what lets the + * KAT harness cross-check the two in a single image, so deliberately do NOT + * define WOLF_CRYPTO_CB_ONLY_AES. */ +#undef WOLF_CRYPTO_CB +#define WOLF_CRYPTO_CB +#undef WOLFSSL_C2000_AES +#define WOLFSSL_C2000_AES + +/* HAVE_AES_ECB is what compiles wc_AesEcbEncrypt/Decrypt and, with it, the ECB + * crypto-callback hook the hardware port needs; WOLFSSL_AES_DIRECT alone only + * creates the callback plumbing, not the entry points. Kept inside the HWAES + * block: it also switches the software CTR path to the bulk-ECB strategy and + * costs code size, so a software-only AES=1 build should not pay for it. */ +#undef HAVE_AES_ECB +#define HAVE_AES_ECB + +/* Single source of truth for the AESA device id. ti-c2000.h defaults this to + * 0x2000 behind #ifndef, so setting it here wins and lets WC_USE_DEVID be + * derived from it: wolfcrypt_test and benchmark then target the same device + * the KAT harness passes to wc_AesInit(), with no literal to keep in sync. */ +#undef WOLFSSL_C2000_DEVID +#define WOLFSSL_C2000_DEVID 0x2000 +#undef WC_USE_DEVID +#define WC_USE_DEVID WOLFSSL_C2000_DEVID +#endif + /* Curve25519 (X25519) + Ed25519. Enabled with EXTRA_CFLAGS=--define=WOLF_25519 * (X25519=1 build). No __uint128_t and no SP-25519 backend on C28x, so the * default fe[10] 32-bit-limb field arithmetic is used; Ed25519 reuses the diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index ce4f86b9c..ca2a1afbf 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -36,13 +36,16 @@ endif CL := $(CGT_ROOT)/bin/cl2000 +# Header/ must precede $(WOLFROOT): wolfSSL's documented user_settings.h +# workflow puts one at the wolfSSL tree root, which would otherwise shadow this +# example's and silently build a different configuration. INCS := \ -I$(CGT_ROOT)/include \ -I$(DRV) \ -I$(DEV)/common/include \ -I$(DEV)/headers/include \ - -I$(WOLFROOT) \ - -I$(CURDIR)/Header + -I$(CURDIR)/Header \ + -I$(WOLFROOT) # --float_support=fpu32 and --abi=eabi must match the prebuilt driverlib.lib. # Define WOLF_C2000_SCI_STDOUT to route printf to SCIA (XDS110 COM); omit it to @@ -108,13 +111,16 @@ ifeq ($(MLKEM),1) $(WOLFROOT)/wolfcrypt/src/wc_mlkem_poly.c endif +# aes.c + wc_encrypt.c are wanted by AES=1, AESEXTRA=1 and HWAES=1. Each sets +# NEED_AES_CORE and the pair is appended once below: the build is a single +# cl2000 invocation, so a source listed twice multiply-defines at link. +NEED_AES_CORE := 0 + # AES=1 adds AES-CBC/CTR/CFB/GCM (software, table-driven; GCM_SMALL GHASH). AES ?= 0 ifeq ($(AES),1) CFLAGS += --define=WOLF_AES - WC_SRCS += \ - $(WOLFROOT)/wolfcrypt/src/aes.c \ - $(WOLFROOT)/wolfcrypt/src/wc_encrypt.c + NEED_AES_CORE := 1 endif # X25519=1 adds Curve25519 (X25519) + Ed25519 (default fe[10] 32-bit backend). @@ -164,14 +170,24 @@ ifeq ($(AESEXTRA),1) CFLAGS += --define=WOLF_AES --define=WOLF_AESEXTRA WC_SRCS += \ $(WOLFROOT)/wolfcrypt/src/cmac.c - # aes.c and wc_encrypt.c are also pulled in by AES=1; add them here only when - # AES=1 did not, so they are not listed twice in the single cl2000 invocation - # (which would multiply-define their symbols at link). - ifneq ($(AES),1) - WC_SRCS += \ - $(WOLFROOT)/wolfcrypt/src/aes.c \ - $(WOLFROOT)/wolfcrypt/src/wc_encrypt.c - endif + NEED_AES_CORE := 1 +endif + +# HWAES=1 offloads AES-ECB/CBC/CTR to the on-chip AESA accelerator (TI EIP-120t +# at 0x42000) via crypto callbacks. Software AES stays compiled in so one image +# can compare both paths. Implies AES=1; driverlib.lib is already linked. +HWAES ?= 0 +ifeq ($(HWAES),1) + CFLAGS += --define=WOLF_AES --define=WOLF_HWAES + # WC_USE_DEVID points wolfcrypt_test and benchmark at the hardware device; + # without it they init every Aes context with INVALID_DEVID and silently + # measure/test software only. It is derived from WOLFSSL_C2000_DEVID in + # Header/user_settings.h rather than repeated as a literal here, so the two + # cannot drift apart. + WC_SRCS += \ + $(WOLFROOT)/wolfcrypt/src/cryptocb.c \ + $(WOLFROOT)/wolfcrypt/src/port/ti/ti-c2000-aes.c + NEED_AES_CORE := 1 endif # RSA=1 adds RSA verify (SP math backend, shared with the ECC P-256 build). @@ -261,6 +277,13 @@ ifeq ($(MEMPROF),1) CFLAGS += --define=WOLF_MEM_PROFILE endif +# Append the shared AES core once, after every toggle has had its say. +ifeq ($(NEED_AES_CORE),1) + WC_SRCS += \ + $(WOLFROOT)/wolfcrypt/src/aes.c \ + $(WOLFROOT)/wolfcrypt/src/wc_encrypt.c +endif + ALL_SRCS := $(WC_SRCS) $(HARNESS_SRCS) $(BSP_SRCS) $(ASM_SRCS) .PHONY: all clean diff --git a/embedded/ti-c2000-f28p55x/README.md b/embedded/ti-c2000-f28p55x/README.md index f642a38ad..cd623781e 100644 --- a/embedded/ti-c2000-f28p55x/README.md +++ b/embedded/ti-c2000-f28p55x/README.md @@ -10,7 +10,7 @@ The default build runs a KAT suite plus `wolfcrypt_test` and (optionally) `bench - SHA3-224/256/384/512, SHAKE128, SHAKE256 (split-64 Keccak permutation, ~53% faster than the generic C path on C28x) - ML-DSA-87 (Dilithium level 5) verify, and the full keygen+sign+verify round-trip (`SIGN=1`) - ML-KEM-768 (FIPS 203) keygen/encap/decap round-trip (`MLKEM=1`) -- AES-128/192/256 CBC/CTR/CFB/GCM (`AES=1`); AES-CMAC, AES-CCM, AES-GMAC (`AESEXTRA=1`) +- AES-128/192/256 CBC/CTR/CFB/GCM (`AES=1`); AES-CMAC, AES-CCM, AES-GMAC (`AESEXTRA=1`); hardware-accelerated AES-ECB/CBC/CTR on the on-chip AESA block (`HWAES=1`) - HMAC-SHA256 + HKDF (`HKDF=1`) - ChaCha20-Poly1305 AEAD + Poly1305 (`CHACHA=1`) - X25519 + Ed25519 (`X25519=1`) @@ -54,6 +54,7 @@ Each is `make =1` (default 0 unless noted), additive on top of the default | `MLKEM=1` | ML-KEM-768 (FIPS 203) | | `AES=1` | AES-CBC/CTR/CFB/GCM (table-driven, `GCM_SMALL`) | | `AESEXTRA=1` | AES-CMAC, AES-CCM, AES-GMAC (implies the AES core) | +| `HWAES=1` | Offload AES-ECB/CBC/CTR to the on-chip AESA accelerator via crypto callbacks (implies the AES core). See "Hardware AES" below | | `X25519=1` | Curve25519 (X25519) + Ed25519 | | `HKDF=1` | HMAC + HKDF (RFC 2104 / RFC 5869) | | `CHACHA=1` | ChaCha20-Poly1305 AEAD (RFC 8439) | @@ -100,6 +101,31 @@ ML-DSA-87 (asymmetric, @150 MHz): verify ~225 ms/op; keygen and signing also run - Big SP/`*_NO_MALLOC` structs (ecc_key, RsaKey, ChaChaPoly_Aead) belong in `.bss`/static, not on the stack: the SP point/modexp call tree plus a stack-allocated key can overflow the 16 KW stack. - `wc_RsaSSL_Verify` in the `RSA_VERIFY_ONLY` / `SP_NO_MALLOC` config runs the modexp in place in the caller's buffer, so the output buffer must be at least the key size (256 B for RSA-2048). +## Hardware AES (`HWAES=1`) + +The F28P550SJ has an on-chip AES accelerator ("AESA", a TI EIP-120t at `0x00042000`) that C2000Ware exposes through `driverlib/f28p55x/driverlib/aes.h`. `HWAES=1` offloads AES-ECB/CBC/CTR to it via the wolfCrypt crypto-callback framework (`wolfcrypt/src/port/ti/ti-c2000-aes.c` in the wolfSSL tree, gated on `WOLFSSL_C2000_AES`). `driverlib.lib` is already linked by this example, so no extra build plumbing is needed. + +Software AES stays compiled in. A context opts into hardware with `wc_AesInit(&aes, NULL, WOLFSSL_C2000_DEVID)`; one initialised with `INVALID_DEVID` runs pure software. `wolf_aes_hw_test()` uses both and compares them, which is the point: on a 16-bit-byte target the octet marshalling into the accelerator's 32-bit registers is the highest-risk part of the port, and a mismatch is exactly what you want to see. The harness prints 13 lines covering ECB/CBC/CTR at 128/192/256 bits, multi-block, split calls, in-place decrypt and a non-block-aligned CTR split, each checked against software and (for the first block of each mode) against the published NIST SP800-38A vector. + +`HWAES=1` also defines `WC_USE_DEVID=0x2000` so `wolfcrypt_test` and `benchmark` exercise the device too -- without it they init every context with `INVALID_DEVID` and silently measure software. + +Measured at 150 MHz (`make HWAES=1 BENCH=1`, which prints paired `SW`/`HW` rows): + +| Operation | Software | AESA | Speedup | +|---|---|---|---| +| AES-128-ECB encrypt | 471 KiB/s | 2.37 MiB/s | 5.2x | +| AES-256-ECB encrypt | 377 KiB/s | 2.32 MiB/s | 6.3x | +| AES-128-CBC encrypt | 405 KiB/s | 2.36 MiB/s | 6.0x | +| AES-128-CBC decrypt | 388 KiB/s | 2.34 MiB/s | 6.2x | +| AES-256-CBC encrypt | 333 KiB/s | 2.31 MiB/s | 7.1x | +| AES-256-CBC decrypt | 322 KiB/s | 2.29 MiB/s | 7.3x | +| AES-128-CTR | 408 KiB/s | 1.45 MiB/s | 3.6x | +| AES-256-CTR | 335 KiB/s | 1.44 MiB/s | 4.4x | + +AES-GCM barely moves (~32 to ~34 KiB/s): only its internal ECB calls reach the accelerator and the `GCM_SMALL` byte-wise GHASH dominates. Using the block's own GCM mode is future work. CFB, CCM, CMAC and everything else stay in software -- the callback returns `CRYPTOCB_UNAVAILABLE` and wolfCrypt falls through transparently. + +Two hardware quirks are documented in `IDE/C2000/README.md` in the wolfSSL tree and worth knowing before touching this code: driverlib expects little-endian octets within each 32-bit word (not a raw cast of a `byte*`), and the block's CTR counter increment does **not** match wolfCrypt's big-endian 128-bit `IncrementAesCounter()` once an increment carries across an octet boundary -- so the port drives the accelerator in ECB mode and keeps the counter in software. Both quirks produce a *correct first block*, which is why the multi-block cases in the harness matter. + ## RNG caveat -The F28P55x has **no hardware TRNG**. The example uses `WOLFSSL_GENSEED_FORTEST` (random.c's built-in incrementing test seed feeding the real SHA-256 Hash-DRBG): exercises the real DRBG path but is **development-only, not cryptographically secure**. For production, wire a real entropy source into `wc_GenerateSeed()`. +The F28P550SJ has **no hardware TRNG**. This build uses `WOLFSSL_GENSEED_FORTEST` (random.c's built-in incrementing test seed feeding the real SHA-256 Hash-DRBG): it exercises the real DRBG path but is **development-only, not cryptographically secure**. For production, wire a real entropy source into `wc_GenerateSeed()`. diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index 6c282de62..e1a893f61 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -55,6 +55,9 @@ #ifdef WOLF_AES #include #endif +#ifdef WOLF_HWAES +#include +#endif #ifdef WOLF_25519 #include #include @@ -1170,6 +1173,155 @@ static void wolf_aes_test(void) } #endif /* WOLF_AES */ +#ifdef WOLF_HWAES +/* Cross-check the AESA hardware against software AES. + * + * Two contexts deliberately: 'hw' carries WOLFSSL_C2000_DEVID so every aes.c + * hook routes to the callback, 'sw' carries INVALID_DEVID so every hook skips + * it. That separation matters -- with HAVE_AES_ECB on, a devId-bearing + * context would route even the software CTR path's internal wc_AesEcbEncrypt + * back to hardware. + * + * NIST SP800-38A vectors are asserted where we have them; multi-block, + * split-call and in-place cases are checked hardware-against-software, since + * software AES is already covered by wolfcrypt_test. */ +static void hw_report(const char* name, int r, const byte* a, const byte* b, + word32 len) +{ + printf("HW %s: %s\r\n", name, + (r == 0 && XMEMCMP(a, b, len) == 0) ? "PASS" : "FAIL"); +} + +static void wolf_aes_hw_test(void) +{ + /* NIST SP800-38A F.1/F.2/F.5 four-block plaintext. */ + static const byte pt[64] = { + 0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96, + 0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a, + 0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c, + 0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51, + 0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11, + 0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef, + 0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17, + 0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10}; + static const byte k128[16] = { + 0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6, + 0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c}; + static const byte k192[24] = { + 0x8e,0x73,0xb0,0xf7,0xda,0x0e,0x64,0x52, + 0xc8,0x10,0xf3,0x2b,0x80,0x90,0x79,0xe5, + 0x62,0xf8,0xea,0xd2,0x52,0x2c,0x6b,0x7b}; + static const byte k256[32] = { + 0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe, + 0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81, + 0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7, + 0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4}; + static const byte iv[16] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; + static const byte ctr_iv[16] = { + 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, + 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}; + /* First-block published answers (F.1.1, F.2.1, F.5.1). */ + static const byte ecb_ct1[16] = { + 0x3a,0xd7,0x7b,0xb4,0x0d,0x7a,0x36,0x60, + 0xa8,0x9e,0xca,0xf3,0x24,0x66,0xef,0x97}; + static const byte cbc_ct1[16] = { + 0x76,0x49,0xab,0xac,0x81,0x19,0xb2,0x46, + 0xce,0xe9,0x8e,0x9b,0x12,0xe9,0x19,0x7d}; + /* Full 64-octet CTR answer, not just block 1: this vector's counter starts + * at ...fe ff, so block 2 is the first needing a carry across an octet + * boundary, and checking only block 1 hides a broken increment. */ + static const byte ctr_ct[64] = { + 0x87,0x4d,0x61,0x91,0xb6,0x20,0xe3,0x26, + 0x1b,0xef,0x68,0x64,0x99,0x0d,0xb6,0xce, + 0x98,0x06,0xf6,0x6b,0x79,0x70,0xfd,0xff, + 0x86,0x17,0x18,0x7b,0xb9,0xff,0xfd,0xff, + 0x5a,0xe4,0xdf,0x3e,0xdb,0xd5,0xd3,0x5e, + 0x5b,0x4f,0x09,0x02,0x0d,0xb0,0x3e,0xab, + 0x1e,0x03,0x1d,0xda,0x2f,0xbe,0x03,0xd1, + 0x79,0x21,0x70,0xa0,0xf3,0x00,0x9c,0xee}; + + /* .bss, not stack: the C28x stack is 16 KW and an Aes is not small. */ + static Aes hw, sw; + static byte oh[64], os[64], dh[64]; + int rh, rs; + + if (wc_AesInit(&hw, NULL, WOLFSSL_C2000_DEVID) != 0 || + wc_AesInit(&sw, NULL, INVALID_DEVID) != 0) { + printf("HW AES init: FAIL\r\n"); + return; + } + + /* ---- ECB, 64 octets (exercises the multi-block loop) ---- */ + rh = wc_AesSetKey(&hw, k128, 16, NULL, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k128, 16, NULL, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesEcbEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesEcbEncrypt(&sw, os, pt, 64); + hw_report("AES-128-ECB encrypt vs NIST", rh, oh, ecb_ct1, 16); + hw_report("AES-128-ECB encrypt vs SW", (rh | rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k128, 16, NULL, AES_DECRYPTION); + if (rh == 0) rh = wc_AesEcbDecrypt(&hw, dh, oh, 64); + hw_report("AES-128-ECB decrypt round-trip", rh, dh, pt, 64); + + /* ---- CBC, 64 octets ---- */ + rh = wc_AesSetKey(&hw, k128, 16, iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k128, 16, iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); + hw_report("AES-128-CBC encrypt vs NIST", rh, oh, cbc_ct1, 16); + hw_report("AES-128-CBC encrypt vs SW", (rh | rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k128, 16, iv, AES_DECRYPTION); + if (rh == 0) rh = wc_AesCbcDecrypt(&hw, dh, oh, 64); + hw_report("AES-128-CBC decrypt round-trip", rh, dh, pt, 64); + + /* ---- CBC split across calls: proves aes->reg chaining ---- */ + rh = wc_AesSetKey(&hw, k128, 16, iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 16); + if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh + 16, pt + 16, 48); + hw_report("AES-128-CBC split-call chain", (rh | rs), oh, os, 64); + + /* ---- CBC in-place decrypt: proves the last-block save ---- */ + XMEMCPY(dh, os, 64); + rh = wc_AesSetKey(&hw, k128, 16, iv, AES_DECRYPTION); + if (rh == 0) rh = wc_AesCbcDecrypt(&hw, dh, dh, 64); + hw_report("AES-128-CBC in-place decrypt", rh, dh, pt, 64); + + /* ---- CTR, 64 octets ---- */ + rh = wc_AesSetKey(&hw, k128, 16, ctr_iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k128, 16, ctr_iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCtrEncrypt(&sw, os, pt, 64); + hw_report("AES-128-CTR vs NIST (64B)", rh, oh, ctr_ct, 64); + hw_report("AES-128-CTR SW vs NIST (64B)", rs, os, ctr_ct, 64); + hw_report("AES-128-CTR vs SW", (rh | rs), oh, os, 64); + + /* ---- CTR split at a non-block boundary: proves aes->left/aes->tmp ---- */ + rh = wc_AesSetKey(&hw, k128, 16, ctr_iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh, pt, 10); + if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh + 10, pt + 10, 54); + hw_report("AES-128-CTR partial split", (rh | rs), oh, os, 64); + + /* ---- 192- and 256-bit keys: the 6- and 8-word AES_setKey1 paths ---- */ + rh = wc_AesSetKey(&hw, k192, 24, iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k192, 24, iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); + hw_report("AES-192-CBC encrypt vs SW", (rh | rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k256, 32, iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k256, 32, iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); + hw_report("AES-256-CBC encrypt vs SW", (rh | rs), oh, os, 64); + + wc_AesFree(&hw); + wc_AesFree(&sw); +} +#endif /* WOLF_HWAES */ + #ifdef WOLF_25519 static void wolf_curve25519_test(void) { @@ -1747,11 +1899,27 @@ int main(void) printf("\r\n"); printf("=== wolfSSL wolfCrypt on TI C2000 LAUNCHXL-F28P55X ===\r\n"); + #ifdef WOLF_MEM_PROFILE /* Route XMALLOC/XFREE/XREALLOC through the heap high-water tracker. */ wolf_mem_install(); #endif +#ifdef WOLF_HWAES + /* wolfCrypt_Init() is mandatory first: it sets every device-table slot to + * INVALID_DEVID, and RegisterDevice only claims a slot marked that way. + * Without it the table is BSS-zero and registration fails with BUFFER_E. */ + if (wolfCrypt_Init() != 0) { + printf("wolfCrypt_Init: FAIL\r\n"); + } + else if (wc_C2000_Init(WOLFSSL_C2000_DEVID) != 0) { + printf("C2000 AESA init: FAIL\r\n"); + } + else { + printf("C2000 AESA init: PASS\r\n"); + } +#endif + wolf_sha3_256_test(); wolf_sha256_test(); wolf_shake256_test(); @@ -1796,6 +1964,11 @@ int main(void) wolf_aes_test(); #endif /* WOLF_AES */ +#ifdef WOLF_HWAES + printf("\r\n--- AES hardware (AESA) vs software ---\r\n"); + wolf_aes_hw_test(); +#endif /* WOLF_HWAES */ + #ifdef WOLF_25519 printf("\r\n--- Curve25519 (X25519) + Ed25519 ---\r\n"); wolf_curve25519_test(); From a4c09c7f40d4124e6fb9d90522a4bc0b955d1cac Mon Sep 17 00:00:00 2001 From: David Garske Date: Thu, 13 Aug 2026 09:45:52 -0700 Subject: [PATCH 2/8] TI C2000 example: real entropy source, probe image and validation KATs --- .../ti-c2000-f28p55x/Header/user_settings.h | 26 +- embedded/ti-c2000-f28p55x/Makefile | 21 +- embedded/ti-c2000-f28p55x/README.md | 44 ++- .../ti-c2000-f28p55x/Source/entropy_probe.c | 252 +++++++++++++++ embedded/ti-c2000-f28p55x/Source/wolf_main.c | 81 +++++ .../ti-c2000-f28p55x/tools/entropy_analyze.py | 305 ++++++++++++++++++ 6 files changed, 712 insertions(+), 17 deletions(-) create mode 100644 embedded/ti-c2000-f28p55x/Source/entropy_probe.c create mode 100755 embedded/ti-c2000-f28p55x/tools/entropy_analyze.py diff --git a/embedded/ti-c2000-f28p55x/Header/user_settings.h b/embedded/ti-c2000-f28p55x/Header/user_settings.h index 13389c6b5..b3ba57417 100644 --- a/embedded/ti-c2000-f28p55x/Header/user_settings.h +++ b/embedded/ti-c2000-f28p55x/Header/user_settings.h @@ -570,15 +570,27 @@ extern long my_time(long* t); /* ------------------------------------------------------------------------- */ /* RNG - real SHA-256 Hash-DRBG seeded by a DEV-ONLY test seed */ /* ------------------------------------------------------------------------- */ -/* The F28P550SJ has no hardware TRNG, so there is no real entropy source. - * WOLFSSL_GENSEED_FORTEST makes random.c supply a built-in wc_GenerateSeed - * (an incrementing test value) that feeds the standard SHA-256 Hash-DRBG. - * This exercises the real DRBG code path (what a production build with a TRNG - * would use) and lets random_test pass - but the seed is NOT random, so this - * is DEV/TEST ONLY and MUST NOT be shipped. Replace wc_GenerateSeed with a - * real TRNG before any production use. */ +#ifdef WOLF_ENTROPY +/* Real entropy: the on-chip oscillator-jitter source. The F28P550SJ has no + * TRNG, but it does have two independent RC oscillators and a crystal-derived + * PLL, and a Dual-Clock Comparator that can count one against another. The + * LSB of that count is the noise bit; it is oversampled well past its measured + * min-entropy, health-tested per SP800-90B 4.4, SHA-256 conditioned, and fed + * to the same SHA-256 Hash-DRBG. See IDE/C2000/README.md in the wolfSSL tree + * for the on-hardware characterization. */ +#undef WOLFSSL_C2000_ENTROPY +#define WOLFSSL_C2000_ENTROPY +#else +/* The F28P550SJ has no hardware TRNG, so without ENTROPY=1 there is no real + * entropy source. WOLFSSL_GENSEED_FORTEST makes random.c supply a built-in + * wc_GenerateSeed (an incrementing test value) that feeds the standard SHA-256 + * Hash-DRBG. This exercises the real DRBG code path (what a production build + * with a TRNG would use) and lets random_test pass - but the seed is NOT + * random, so this is DEV/TEST ONLY and MUST NOT be shipped. Build with + * ENTROPY=1 for the real source. */ #undef WOLFSSL_GENSEED_FORTEST #define WOLFSSL_GENSEED_FORTEST +#endif /* Run every self-test to completion and report each, so macro_test (a 16-bit * safe-math self-test that currently fails on C28x) does not abort the suite diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index ca2a1afbf..ac5289e69 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -277,6 +277,25 @@ ifeq ($(MEMPROF),1) CFLAGS += --define=WOLF_MEM_PROFILE endif +# ENTROPY=1 replaces the dev-only WOLFSSL_GENSEED_FORTEST counter with the real +# oscillator-jitter entropy source (DCC/INTOSC vs PLL, SHA-256 conditioned, +# SP800-90B health tests) feeding the SP800-90A Hash-DRBG. +ENTROPY ?= 0 +ifeq ($(ENTROPY),1) + CFLAGS += --define=WOLF_ENTROPY + WC_SRCS += $(WOLFROOT)/wolfcrypt/src/port/ti/ti-c2000-entropy.c +endif + +# ENTROPY_PROBE=1 builds the raw entropy-source characterization image: it +# dumps unconditioned DCC oscillator-jitter and ADC samples over SCI so a host +# can estimate min-entropy. Measurement only - no crypto runs. +ENTROPY_PROBE ?= 0 +ifeq ($(ENTROPY_PROBE),1) + CFLAGS += --define=WOLF_ENTROPY_PROBE --define=NO_CRYPT_TEST \ + --define=NO_CRYPT_BENCHMARK + HARNESS_EXTRA += $(CURDIR)/Source/entropy_probe.c +endif + # Append the shared AES core once, after every toggle has had its say. ifeq ($(NEED_AES_CORE),1) WC_SRCS += \ @@ -284,7 +303,7 @@ ifeq ($(NEED_AES_CORE),1) $(WOLFROOT)/wolfcrypt/src/wc_encrypt.c endif -ALL_SRCS := $(WC_SRCS) $(HARNESS_SRCS) $(BSP_SRCS) $(ASM_SRCS) +ALL_SRCS := $(WC_SRCS) $(HARNESS_SRCS) $(HARNESS_EXTRA) $(BSP_SRCS) $(ASM_SRCS) .PHONY: all clean diff --git a/embedded/ti-c2000-f28p55x/README.md b/embedded/ti-c2000-f28p55x/README.md index cd623781e..bdcfe8e0d 100644 --- a/embedded/ti-c2000-f28p55x/README.md +++ b/embedded/ti-c2000-f28p55x/README.md @@ -58,6 +58,8 @@ Each is `make =1` (default 0 unless noted), additive on top of the default | `X25519=1` | Curve25519 (X25519) + Ed25519 | | `HKDF=1` | HMAC + HKDF (RFC 2104 / RFC 5869) | | `CHACHA=1` | ChaCha20-Poly1305 AEAD (RFC 8439) | +| `ENTROPY=1` | Real oscillator-jitter entropy source (DCC/INTOSC vs PLL) in place of the dev-only test seed. See "RNG and entropy" below | +| `ENTROPY_PROBE=1` | Raw entropy characterization image: dumps unconditioned samples over SCI for host analysis, runs no crypto | | `RSA=1` | RSA-2048 verify (SP math, 2048-only, verify/public-only) | | `SIGN=1` | Full ML-DSA-87 keygen+sign+verify demo (dedicated linker script, 32 KW heap, no test/bench harness) | | `BENCH=1` | Run only `benchmark` instead of `wolfcrypt_test` (they need separate images on this RAM-limited part) | @@ -113,19 +115,43 @@ Measured at 150 MHz (`make HWAES=1 BENCH=1`, which prints paired `SW`/`HW` rows) | Operation | Software | AESA | Speedup | |---|---|---|---| -| AES-128-ECB encrypt | 471 KiB/s | 2.37 MiB/s | 5.2x | -| AES-256-ECB encrypt | 377 KiB/s | 2.32 MiB/s | 6.3x | -| AES-128-CBC encrypt | 405 KiB/s | 2.36 MiB/s | 6.0x | -| AES-128-CBC decrypt | 388 KiB/s | 2.34 MiB/s | 6.2x | -| AES-256-CBC encrypt | 333 KiB/s | 2.31 MiB/s | 7.1x | -| AES-256-CBC decrypt | 322 KiB/s | 2.29 MiB/s | 7.3x | +| AES-128-ECB encrypt | 471 KiB/s | 2.39 MiB/s | 5.2x | +| AES-256-ECB encrypt | 377 KiB/s | 2.34 MiB/s | 6.3x | +| AES-128-CBC encrypt | 405 KiB/s | 2.37 MiB/s | 6.0x | +| AES-128-CBC decrypt | 388 KiB/s | 2.36 MiB/s | 6.2x | +| AES-256-CBC encrypt | 333 KiB/s | 2.32 MiB/s | 7.1x | +| AES-256-CBC decrypt | 322 KiB/s | 2.31 MiB/s | 7.3x | | AES-128-CTR | 408 KiB/s | 1.45 MiB/s | 3.6x | -| AES-256-CTR | 335 KiB/s | 1.44 MiB/s | 4.4x | +| AES-256-CTR | 335 KiB/s | 1.45 MiB/s | 4.4x | AES-GCM barely moves (~32 to ~34 KiB/s): only its internal ECB calls reach the accelerator and the `GCM_SMALL` byte-wise GHASH dominates. Using the block's own GCM mode is future work. CFB, CCM, CMAC and everything else stay in software -- the callback returns `CRYPTOCB_UNAVAILABLE` and wolfCrypt falls through transparently. Two hardware quirks are documented in `IDE/C2000/README.md` in the wolfSSL tree and worth knowing before touching this code: driverlib expects little-endian octets within each 32-bit word (not a raw cast of a `byte*`), and the block's CTR counter increment does **not** match wolfCrypt's big-endian 128-bit `IncrementAesCounter()` once an increment carries across an octet boundary -- so the port drives the accelerator in ECB mode and keeps the counter in software. Both quirks produce a *correct first block*, which is why the multi-block cases in the harness matter. -## RNG caveat +## RNG and entropy -The F28P550SJ has **no hardware TRNG**. This build uses `WOLFSSL_GENSEED_FORTEST` (random.c's built-in incrementing test seed feeding the real SHA-256 Hash-DRBG): it exercises the real DRBG path but is **development-only, not cryptographically secure**. For production, wire a real entropy source into `wc_GenerateSeed()`. +The F28P550SJ has **no hardware TRNG**. It does have three independent oscillators -- INTOSC1 and INTOSC2 (on-chip ~10 MHz RC) and the external crystal behind SYSCLK/PLLRAWCLK -- and two Dual-Clock Comparators that can count one against another. `ENTROPY=1` uses that: a DCC counts PLLRAWCLK edges inside a window of INTOSC cycles, and the LSB of the count is one noise bit carrying the relative phase drift of two physically distinct oscillators. The raw stream is oversampled well past its measured min-entropy, health-tested per SP800-90B 4.4, SHA-256 conditioned, and fed to the SP800-90A Hash-DRBG. + +Measured on this board with `ENTROPY_PROBE=1` (262144 raw bits per source, LSB extraction, host analysis): + +| Source | Hmin/bit | bias | max \|acf\| | chi-square p | +|---|---|---|---|---| +| INTOSC1 window / PLL counted (DCC1) | **0.932** | -0.0000 | 0.005 | 0.623 | +| INTOSC2 window / PLL counted (DCC0) | 0.843 | -0.0027 | 0.005 | 0.000 | +| ADC LSB, floating input | 0.834 | -0.0086 | 0.073 | 0.000 | + +Only INTOSC1 is credited toward the entropy budget; INTOSC2 is hashed in as defence-in-depth but fails a chi-square uniformity check decisively, and the ADC source is off by default because it also fails chi-square and depends on a spare analog pin being left floating. The port assumes 0.5 bits per raw bit and oversamples 2x on top, about a 4x cushion. This is a most-common-value estimate with bias and correlation screening, **not** a full SP800-90B non-IID assessment. Read 0.932 against the estimator's ceiling rather than 1.0: at this sample count a synthetic uniform stream estimates to 0.930, so the credited source is statistically indistinguishable from uniform. These are single-run measurements of a physical source and move slightly between runs (an earlier capture gave 0.924 / 0.775 / 0.865), but the pass/fail conclusions have been identical in every run. + +Only the DCC measurement itself is C2000 code. The SP800-90B startup and continuous health tests, the entropy budget, the SHA-256 conditioner and the latched fail-closed state come from wolfSSL's generic `wc_NoiseSrc_*` layer in `wolfcrypt/src/random.c`, which `WOLFSSL_C2000_ENTROPY` configures. See `IDE/C2000/README.md` in the wolfSSL tree. + +`ENTROPY_PROBE=1` builds the measurement image itself: it dumps unconditioned samples over the SCI console for host analysis, and runs no crypto. `tools/entropy_analyze.py` (numpy only) consumes that capture and reproduces the table above: + +``` +make CGT_ROOT= ENTROPY_PROBE=1 +# flash, run, capture the console to probe.log, then: +python3 tools/entropy_analyze.py probe.log +``` + +Min-entropy is the SP800-90B 6.3.1 most-common-value estimate over the 8-bit octet alphabet at the 99% upper confidence bound, divided by 8 to express it per bit. The octet alphabet is used rather than the bit alphabet because it also catches structure across adjacent bits that a per-bit estimate cannot see. Run `python3 tools/entropy_analyze.py --selftest` to check the estimators against synthetic streams with known properties; that also calibrates the ceiling, since at this sample count a genuinely uniform stream estimates to about 0.93 rather than 1.0 -- so the credited source's 0.92 is at the estimator's practical maximum, not 8% short of ideal. + +Without `ENTROPY=1` the build falls back to `WOLFSSL_GENSEED_FORTEST` (random.c's incrementing test seed feeding the real Hash-DRBG) -- it exercises the DRBG path but is **development-only and not cryptographically secure**. diff --git a/embedded/ti-c2000-f28p55x/Source/entropy_probe.c b/embedded/ti-c2000-f28p55x/Source/entropy_probe.c new file mode 100644 index 000000000..2554f5389 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/Source/entropy_probe.c @@ -0,0 +1,252 @@ +/* entropy_probe.c + * + * Copyright (C) 2006-2026 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Raw entropy-source characterization for the TMS320F28P550SJ. + * + * `make ENTROPY_PROBE=1`. A MEASUREMENT tool, not part of the RNG: it dumps + * unconditioned samples over SCI so a host can estimate min-entropy before + * anything is wired into wc_GenerateSeed(). + * + * Candidates: DCC oscillator jitter (a DCC counts PLL edges inside a window of + * INTOSC cycles, leaving the drift between two independent oscillators in the + * low bits) and ADC LSB noise (floating high-Z input, short acquisition so the + * SAR never settles). + * + * Tagged hex output for the host analyzer: + * E0/E1 DCC1 INTOSC1 / DCC0 INTOSC2 window, PLL counted, N cycles + * E3 0 ADCC raw 12-bit results + * E4/E5/E6 packed LSB streams (8 samples per emitted octet) + * PROBE DONE + */ + +#include +#include + +#include "driverlib.h" +#include "device.h" + +#ifdef WOLF_ENTROPY_PROBE + +/* Counter1 counts down from 0xFFFFF, capping the window near 34,900 INTOSC + * cycles at 300 MHz PLL / 10 MHz INTOSC; keep well under that. */ +#define PROBE_CNT1_SEED 0xFFFFFUL +#define PROBE_SAMPLES 1024 +/* printf over SCI dominates; keep the ADC set smaller. */ +#define PROBE_ADC_SAMPLES 1024 +#define PROBE_PER_LINE 16 +/* Packed-LSB stream size. 32 KiB = 262144 bits per source, enough for the + * MCV confidence bound to stop being the limiting factor. */ +#define PROBE_PACKED_BYTES 32768UL + +/* Window sweep (slow-clock cycles). Entropy per sample grows with the window + * while the rate falls, so the useful entropy rate peaks in the middle. */ +static const uint32_t probeWindows[] = { 256UL, 1024UL, 4096UL }; +#define PROBE_NUM_WINDOWS (sizeof(probeWindows) / sizeof(probeWindows[0])) + + +/* One DCC measurement, at register level: DCC_measureClockFrequency() uses + * float32_t, which does not belong here. */ +static uint32_t probe_dccSample(uint32_t base, DCC_Count0ClockSource src0, + DCC_Count1ClockSource src1, uint32_t window) +{ + uint32_t guard; + + DCC_clearErrorFlag(base); + DCC_clearDoneFlag(base); + DCC_disableModule(base); + DCC_disableErrorSignal(base); + DCC_disableDoneSignal(base); + + DCC_setCounter0ClkSource(base, src0); + DCC_setCounter1ClkSource(base, src1); + DCC_setCounterSeeds(base, window, DCC_VALIDSEED_MIN, PROBE_CNT1_SEED); + DCC_enableSingleShotMode(base, DCC_MODE_COUNTER_ZERO); + + /* DONE only latches with the done/error signals enabled - driverlib's own + * DCC_measureClockFrequency() does this and it is easy to miss. */ + DCC_enableErrorSignal(base); + DCC_enableDoneSignal(base); + + DCC_enableModule(base); + + /* Bounded wait, scaled to the window, so a bad mux cannot hang. */ + for (guard = 0; guard < (window * 256UL) + 100000UL; guard++) { + if (DCC_getSingleShotStatus(base) || DCC_getErrorStatus(base)) { + break; + } + } + + return (PROBE_CNT1_SEED - (DCC_getCounter1Value(base) & PROBE_CNT1_SEED)); +} + + +static void probe_dccInit(void) +{ + SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC0); + SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC1); + SysCtl_delay(100); +} + + +static void probe_adcInit(void) +{ + SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCC); + SysCtl_delay(100); + + ASysCtl_setAnalogReferenceInternal(ASYSCTL_ANAREF_INTREF_ADCC); + + ADC_setPrescaler(ADCC_BASE, ADC_CLK_DIV_4_0); + ADC_setInterruptPulseMode(ADCC_BASE, ADC_PULSE_END_OF_CONV); + ADC_enableConverter(ADCC_BASE); + DEVICE_DELAY_US(1000); + + /* Short acquisition on a floating high-Z input: the SAR deliberately does + * not settle, which is where the noise comes from. */ + ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY, + ADC_CH_ADCIN0, 8U); + ADC_setInterruptSource(ADCC_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0); + ADC_enableInterrupt(ADCC_BASE, ADC_INT_NUMBER1); + ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1); +} + + +static uint16_t probe_adcSample(void) +{ + uint32_t guard; + + ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1); + ADC_forceSOC(ADCC_BASE, ADC_SOC_NUMBER0); + + for (guard = 0; guard < 1000000UL; guard++) { + if (ADC_getInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1)) { + break; + } + } + + return ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0); +} + + +static void probe_dumpDcc(const char* tag, uint32_t base, + DCC_Count0ClockSource src0, + DCC_Count1ClockSource src1, uint32_t window) +{ + uint32_t i; + + for (i = 0; i < PROBE_SAMPLES; i++) { + if ((i % PROBE_PER_LINE) == 0) { + printf("\r\n%s %lu ", tag, (unsigned long)window); + } + printf("%05lx ", + (unsigned long)probe_dccSample(base, src0, src1, window)); + } + printf("\r\n"); +} + + +/* Packed LSB stream. A useful min-entropy estimate needs far more samples + * than a 115200 UART can carry one hex count at a time, so the bit extraction + * happens on-target: 8 samples per emitted octet. This is also the stream a + * real entropy source consumes, so it is the right thing to assess. */ +static void probe_dumpPackedDcc(const char* tag, uint32_t base, + DCC_Count0ClockSource src0, + DCC_Count1ClockSource src1, uint32_t window, + uint32_t nbytes) +{ + uint32_t i; + int b; + uint16_t acc; + + for (i = 0; i < nbytes; i++) { + if ((i % 32U) == 0U) { + printf("\r\n%s %lu ", tag, (unsigned long)window); + } + acc = 0U; + for (b = 0; b < 8; b++) { + acc = (uint16_t)(acc | + (uint16_t)((probe_dccSample(base, src0, src1, window) & 1U) + << b)); + } + printf("%02x ", (unsigned int)(acc & 0xFFU)); + } + printf("\r\n"); +} + + +static void probe_dumpPackedAdc(uint32_t nbytes) +{ + uint32_t i; + int b; + uint16_t acc; + + for (i = 0; i < nbytes; i++) { + if ((i % 32U) == 0U) { + printf("\r\nE6 0 "); + } + acc = 0U; + for (b = 0; b < 8; b++) { + acc = (uint16_t)(acc | + (uint16_t)((probe_adcSample() & 1U) << b)); + } + printf("%02x ", (unsigned int)(acc & 0xFFU)); + } + printf("\r\n"); +} + + +void entropy_probe_run(void) +{ + uint32_t w; + uint32_t i; + + printf("\r\n=== ENTROPY PROBE ===\r\n"); + printf("SYSCLK %lu Hz, samples/config %d\r\n", + (unsigned long)DEVICE_SYSCLK_FREQ, (int)PROBE_SAMPLES); + + probe_dccInit(); + probe_adcInit(); + + for (w = 0; w < PROBE_NUM_WINDOWS; w++) { + probe_dumpDcc("E0", DCC1_BASE, DCC_COUNT0SRC_INTOSC1, + DCC_COUNT1SRC_PLL, probeWindows[w]); + probe_dumpDcc("E1", DCC0_BASE, DCC_COUNT0SRC_INTOSC2, + DCC_COUNT1SRC_PLL, probeWindows[w]); + } + + for (i = 0; i < PROBE_ADC_SAMPLES; i++) { + if ((i % PROBE_PER_LINE) == 0) { + printf("\r\nE3 0 "); + } + printf("%05lx ", (unsigned long)probe_adcSample()); + } + printf("\r\n"); + + /* Packed LSB streams for the real min-entropy assessment. */ + probe_dumpPackedDcc("E4", DCC1_BASE, DCC_COUNT0SRC_INTOSC1, + DCC_COUNT1SRC_PLL, 256UL, PROBE_PACKED_BYTES); + probe_dumpPackedDcc("E5", DCC0_BASE, DCC_COUNT0SRC_INTOSC2, + DCC_COUNT1SRC_PLL, 256UL, PROBE_PACKED_BYTES); + probe_dumpPackedAdc(PROBE_PACKED_BYTES); + + printf("\r\nPROBE DONE\r\n"); +} + +#endif /* WOLF_ENTROPY_PROBE */ diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index e1a893f61..51e383c26 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -58,6 +58,10 @@ #ifdef WOLF_HWAES #include #endif +#ifdef WOLF_ENTROPY +#include +#include +#endif #ifdef WOLF_25519 #include #include @@ -1093,6 +1097,69 @@ static void wolf_mlkem768_test(void) } #endif /* WOLF_MLKEM */ +#ifdef WOLF_ENTROPY +/* On-target validation of the entropy source. Beyond the port's SP800-90B + * health tests, this screens what a stuck or test-only source would fail: the + * raw noise is neither constant nor grossly biased, and the DRBG seeds. The + * bit-count check is coarse - the real min-entropy assessment is the host + * analysis of an ENTROPY_PROBE=1 capture (wolfSSL IDE/C2000/README.md). */ +static void wolf_entropy_test(void) +{ + static byte raw[256]; + static byte s1[32], s2[32]; + WC_RNG rng; + word32 ones; + word32 i; + int b; + int ret; + int src; + + ret = wc_c2000_Entropy_Init(); + printf("Entropy init + startup health test: %s (ret=%d)\r\n", + (ret == 0) ? "PASS" : "FAIL", ret); + if (ret != 0) { + return; + } + + ret = wc_c2000_Entropy_SelfTest(); + printf("Entropy liveness self-test (raw): %s (ret=%d)\r\n", + (ret == 0) ? "PASS" : "FAIL", ret); + + /* Raw noise sanity per source: population count should sit near half. */ + for (src = 0; src < 2; src++) { + ret = wc_c2000_Entropy_GetRaw(raw, (word32)sizeof(raw), src); + ones = 0; + for (i = 0; i < (word32)sizeof(raw); i++) { + for (b = 0; b < 8; b++) { + if ((raw[i] >> b) & 1) { + ones++; + } + } + } + /* 2048 bits; accept 40%..60% ones, i.e. counts 820..1228. */ + printf("Entropy raw src%d bit balance: %s (%lu/2048 ones)\r\n", + src, + (ret == 0 && ones > 819UL && ones < 1229UL) ? "PASS" : "FAIL", + (unsigned long)ones); + } + + /* End to end: the DRBG must seed and produce differing blocks. */ + ret = wc_InitRng(&rng); + printf("wc_InitRng with real entropy: %s (ret=%d)\r\n", + (ret == 0) ? "PASS" : "FAIL", ret); + if (ret == 0) { + ret = wc_RNG_GenerateBlock(&rng, s1, (word32)sizeof(s1)); + if (ret == 0) { + ret = wc_RNG_GenerateBlock(&rng, s2, (word32)sizeof(s2)); + } + printf("RNG blocks differ: %s\r\n", + (ret == 0 && XMEMCMP(s1, s2, sizeof(s1)) != 0) + ? "PASS" : "FAIL"); + wc_FreeRng(&rng); + } +} +#endif /* WOLF_ENTROPY */ + #ifdef WOLF_AES static void wolf_aes_test(void) { @@ -1899,6 +1966,15 @@ int main(void) printf("\r\n"); printf("=== wolfSSL wolfCrypt on TI C2000 LAUNCHXL-F28P55X ===\r\n"); +#ifdef WOLF_ENTROPY_PROBE + /* Measurement-only image: dump raw entropy samples and stop. */ + { + extern void entropy_probe_run(void); + entropy_probe_run(); + } + while (1) { + } +#endif #ifdef WOLF_MEM_PROFILE /* Route XMALLOC/XFREE/XREALLOC through the heap high-water tracker. */ @@ -1959,6 +2035,11 @@ int main(void) #endif #endif /* WOLF_MLKEM */ +#ifdef WOLF_ENTROPY + printf("\r\n--- Entropy (oscillator jitter) ---\r\n"); + wolf_entropy_test(); +#endif /* WOLF_ENTROPY */ + #ifdef WOLF_AES printf("\r\n--- AES (CBC/CTR/CFB/GCM) ---\r\n"); wolf_aes_test(); diff --git a/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py b/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py new file mode 100755 index 000000000..65493aa39 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 +"""Analyze the ENTROPY_PROBE=1 capture from the TI C2000 (C28x) entropy probe. + +Consumes the tagged lines that Source/entropy_probe.c emits over the SCI +console and reports, per noise source, the four figures published in the port +README: min-entropy per bit, per-bit bias, peak autocorrelation over lags +1..64, and a chi-square uniformity p-value. + +Tags produced by the probe: + E0 ... raw DCC1 count, INTOSC1 window / PLL counted + E1 ... raw DCC0 count, INTOSC2 window / PLL counted + E3 0 ... raw ADC result, floating input + E4 256 ... packed LSB stream, INTOSC1 (the credited source) + E5 256 ... packed LSB stream, INTOSC2 + E6 0 ... packed LSB stream, ADC + +The E4/E5/E6 streams are what the analysis uses: the bit extraction happens +on-target (8 samples per emitted octet) because a useful min-entropy estimate +needs far more samples than the UART can carry one hex count at a time, and +because that packed stream is exactly what the entropy source consumes. + +Method. Min-entropy is the SP800-90B 6.3.1 most-common-value estimate taken +over the 8-bit octet alphabet at the 99% upper confidence bound, divided by 8 +to express it per bit; the octet alphabet is used rather than the bit alphabet +because it also catches structure across adjacent bits, which a per-bit +estimate cannot see. This is an MCV estimate plus bias and correlation +screening, NOT a full SP800-90B non-IID assessment: MCV assumes IID, so it is +an upper bound, and low measured correlation is what makes it a reasonable one. + +Usage: + python3 tools/entropy_analyze.py capture.log + python3 tools/entropy_analyze.py --selftest + tail -f /tmp/uart-monitor/latest/ttyACMx.log | python3 tools/entropy_analyze.py - +""" + +import math +import re +import sys +from collections import OrderedDict + +try: + import numpy as np +except ImportError: + sys.exit("numpy is required: pip install numpy") + +# Packed-LSB streams, in report order, with the labels the README table uses. +PACKED = OrderedDict(( + ("E4", "INTOSC1 window / PLL counted (DCC1)"), + ("E5", "INTOSC2 window / PLL counted (DCC0)"), + ("E6", "ADC LSB, floating input"), +)) +RAW = OrderedDict(( + ("E0", "INTOSC1 raw DCC count"), + ("E1", "INTOSC2 raw DCC count"), + ("E3", "ADC raw result"), +)) + +BANNER = "=== ENTROPY PROBE ===" +DONE = "PROBE DONE" +MAX_LAG = 64 +Z_99 = 2.5758293035489004 # two-sided 99% normal quantile + + +def first_pass(text): + """The board loops main(), so the probe output repeats. Return just the + first complete pass, so a long capture does not silently concatenate + several runs into one sample set.""" + start = text.find(BANNER) + if start < 0: + return text + end = text.find(DONE, start) + if end < 0: + sys.stderr.write("warning: no '%s' marker - capture may be truncated\n" + % DONE) + return text[start:] + return text[start:end] + + +def parse(text): + """tag -> list of ints, in emission order.""" + out = {} + # A console line is " ...". Match per line, and + # never across a newline: the tags and window counts are themselves valid + # hex, so a multi-line match would swallow the next line's header as data. + # Tolerate any timestamp or prefix a log wrapper put ahead of the tag. + line_re = re.compile(r"\b(E[0-9])[^\S\n]+(\d+)[^\S\n]+" + r"((?:[0-9a-fA-F]+[^\S\n]*)+)$") + for line in text.splitlines(): + m = line_re.search(line.rstrip()) + if m is None: + continue + out.setdefault(m.group(1), []).extend( + int(t, 16) for t in m.group(3).split()) + return out + + +def unpack_bits(octets): + """Octets back to the LSB-first bit stream the probe packed.""" + a = np.asarray(octets, dtype=np.uint8) + return np.unpackbits(a[:, None], axis=1, bitorder="little").ravel() + + +def mcv_min_entropy(symbols, alphabet): + """SP800-90B 6.3.1 most-common-value estimate, 99% upper bound, in bits + per symbol.""" + n = len(symbols) + if n < 2: + return float("nan") + counts = np.bincount(np.asarray(symbols, dtype=np.int64), + minlength=alphabet) + p_hat = counts.max() / n + p_u = min(1.0, p_hat + Z_99 * math.sqrt(p_hat * (1.0 - p_hat) / (n - 1))) + return -math.log2(p_u) + + +def max_abs_acf(bits, max_lag=MAX_LAG): + """Peak |autocorrelation| over lags 1..max_lag of the bit stream.""" + x = np.asarray(bits, dtype=np.float64) + x = x - x.mean() + denom = float(np.dot(x, x)) + if denom == 0.0: + # Constant stream: no correlation is defined. Return the same + # (value, lag) shape callers unpack - a stuck source is exactly the + # case that must report cleanly rather than raise. + return float("nan"), 0 + peak, at = 0.0, 0 + for lag in range(1, min(max_lag, len(x) - 1) + 1): + r = abs(float(np.dot(x[:-lag], x[lag:])) / denom) + if r > peak: + peak, at = r, lag + return peak, at + + +def _gamma_q(s, x): + """Regularized upper incomplete gamma Q(s,x), by the series for P(s,x) + when x < s+1 and Lentz's continued fraction for Q(s,x) otherwise. Written + out because scipy is not assumed present and the Wilson-Hilferty + approximation, while fine in the tails, is off by ~0.01 near the median - + and a uniformity p-value in the middle of the range is exactly what gets + published.""" + if x < 0.0 or s <= 0.0: + return float("nan") + if x == 0.0: + return 1.0 + + if x < s + 1.0: # series for P(s,x), Q = 1 - P + term = 1.0 / s + total = term + n = s + for _ in range(1000): + n += 1.0 + term *= x / n + total += term + if abs(term) < abs(total) * 1e-16: + break + return 1.0 - total * math.exp(-x + s * math.log(x) - math.lgamma(s)) + + tiny = 1e-300 # continued fraction for Q(s,x) + b = x + 1.0 - s + c = 1.0 / tiny + d = 1.0 / b + h = d + for i in range(1, 1000): + an = -i * (i - s) + b += 2.0 + d = an * d + b + if abs(d) < tiny: + d = tiny + c = b + an / c + if abs(c) < tiny: + c = tiny + d = 1.0 / d + delta = d * c + h *= delta + if abs(delta - 1.0) < 1e-16: + break + return h * math.exp(-x + s * math.log(x) - math.lgamma(s)) + + +def chi2_sf(x, k): + """Upper tail of chi-square(k).""" + if k <= 0: + return float("nan") + return _gamma_q(k / 2.0, x / 2.0) + + +def chi2_uniform_octets(octets): + """Chi-square goodness of fit of the octet histogram against uniform.""" + n = len(octets) + counts = np.bincount(np.asarray(octets, dtype=np.int64), minlength=256) + expected = n / 256.0 + stat = float(((counts - expected) ** 2 / expected).sum()) + return stat, chi2_sf(stat, 255) + + +def report(tag, label, octets): + bits = unpack_bits(octets) + n_bits = len(bits) + ones = int(bits.sum()) + bias = ones / n_bits - 0.5 + + h_octet = mcv_min_entropy(octets, 256) + h_per_bit = h_octet / 8.0 + h_bitwise = mcv_min_entropy(bits, 2) + acf, acf_lag = max_abs_acf(bits) + chi_stat, chi_p = chi2_uniform_octets(octets) + + print("%s %s" % (tag, label)) + print(" samples %d octets (%d bits)" % (len(octets), n_bits)) + print(" Hmin/bit %.3f (octet MCV %.3f bits / 8)" + % (h_per_bit, h_octet)) + print(" Hmin/bit bitwise %.3f (bit-alphabet MCV, less conservative)" + % h_bitwise) + print(" bias %.4f (%d/%d ones)" % (bias, ones, n_bits)) + print(" max |acf| 1..%-3d %.3f (at lag %d)" % (MAX_LAG, acf, acf_lag)) + print(" chi-square p %.3f (stat %.1f, df 255)" + % (chi_p, chi_stat)) + print() + return dict(tag=tag, label=label, h=h_per_bit, bias=bias, acf=acf, + p=chi_p) + + +def selftest(): + """Synthetic streams with known properties, so the estimators can be + trusted before they are pointed at real silicon. Also calibrates the + ceiling: at this sample count the octet-MCV/8 estimate of a genuinely + uniform stream lands near 0.93, not 1.0, so a measured 0.92 is at the + estimator's practical maximum rather than 8% short of ideal.""" + # chi2_sf is hand-rolled (no scipy), so check it against known quantiles + # before anything relies on the p-values it produces. + known = [(1.0, 1, 0.317311), (10.0, 10, 0.440493), + (3.841459, 1, 0.05), (18.307038, 10, 0.05), + (293.2478, 255, 0.05), (310.4574, 255, 0.01), + (284.3359, 255, 0.10)] + worst = max(abs(chi2_sf(x, k) - want) for x, k, want in known) + print("chi2_sf worst error vs known quantiles: %.2e %s\n" + % (worst, "OK" if worst < 2e-4 else "FAIL")) + + rng = np.random.default_rng(1234) + n = 32768 + print("Estimator self-test (%d octets per case)\n" % n) + + uniform = rng.integers(0, 256, n) + report("--", "uniform (ceiling: Hmin ~0.93, p uniform, acf ~0)", uniform) + + bits = (rng.random(n * 8) < 0.55).astype(np.uint8) + report("--", "biased p(1)=0.55 (expect lower Hmin, bias ~0.05, p=0)", + np.packbits(bits.reshape(-1, 8), axis=1, bitorder="little").ravel()) + + x = np.zeros(n * 8, dtype=np.uint8) + for i in range(1, len(x)): + x[i] = x[i - 1] if rng.random() < 0.85 else 1 - x[i - 1] + report("--", "lag-1 correlated, unbiased marginal " + "(bitwise MCV is blind to this; octet MCV and acf are not)", + np.packbits(x.reshape(-1, 8), axis=1, bitorder="little").ravel()) + + +def main(): + path = sys.argv[1] if len(sys.argv) > 1 else "-" + if path == "--selftest": + selftest() + return + if path == "-": + text = sys.stdin.read() + else: + with open(path, errors="replace") as f: + text = f.read() + + data = parse(first_pass(text)) + if not data: + sys.exit("no probe tags found - is this an ENTROPY_PROBE=1 capture?") + + rows = [] + for tag, label in PACKED.items(): + octets = data.get(tag) + if not octets: + sys.stderr.write("warning: no %s samples (%s)\n" % (tag, label)) + continue + bad = [v for v in octets if v > 0xFF] + if bad: + sys.exit("%s: %d values exceed one octet - capture is corrupt" + % (tag, len(bad))) + rows.append(report(tag, label, octets)) + + for tag, label in RAW.items(): + vals = data.get(tag) + if vals: + a = np.asarray(vals, dtype=np.int64) + print("%s %s: %d samples, min %d max %d mean %.1f, " + "%d distinct" % (tag, label, len(a), a.min(), a.max(), + a.mean(), len(np.unique(a)))) + print() + + print("README table:") + print() + print("| Source | Hmin/bit | bias | max \\|acf\\| lag 1..%d | chi-square p |" + % MAX_LAG) + print("|---|---|---|---|---|") + for r in rows: + print("| %s | %.3f | %.4f | %.3f | %.3f |" + % (r["label"], r["h"], r["bias"], r["acf"], r["p"])) + + +if __name__ == "__main__": + main() From 104cab75a0d9b913ab1e57c0da7d30fddca25da2 Mon Sep 17 00:00:00 2001 From: David Garske Date: Fri, 28 Aug 2026 18:16:01 -0700 Subject: [PATCH 3/8] TI C2000 example: MLDSA=1 octet-boundary KATs for ML-DSA-44/65/87, pre-hash and packed input --- .../ti-c2000-f28p55x/Header/mldsa_octet_kat.h | 2970 +++++++++++++++++ .../ti-c2000-f28p55x/Header/user_settings.h | 10 + embedded/ti-c2000-f28p55x/Makefile | 19 + embedded/ti-c2000-f28p55x/README.md | 10 + embedded/ti-c2000-f28p55x/Source/wolf_main.c | 191 +- embedded/ti-c2000-f28p55x/tools/gen_kat.c | 211 ++ 6 files changed, 3407 insertions(+), 4 deletions(-) create mode 100644 embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h create mode 100644 embedded/ti-c2000-f28p55x/tools/gen_kat.c diff --git a/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h b/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h new file mode 100644 index 000000000..44914fd79 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h @@ -0,0 +1,2970 @@ +/* ML-DSA octet-boundary KAT vectors for the TI C2000 C28x example. + * + * GENERATED by tools/gen_kat.c - do not edit. Seed driven, so a + * regeneration reproduces this file exactly. Message is + * msg[i] = i & 0xFF, 512 octets. The _packed arrays hold the same + * octets two per 16-bit cell, low octet first - the layout an octet + * stream has off flash on a CHAR_BIT == 16 target. */ +#ifndef MLDSA_OCTET_KAT_H +#define MLDSA_OCTET_KAT_H + +#define KAT_MLDSA_CTX "wolfSSL-C28x" + +static const unsigned char kat_mldsa44_pub[] = { + 0xd7, 0xb2, 0xb4, 0x72, 0x54, 0xaa, 0xe0, 0xdb, 0x45, 0xe7, 0x93, 0x0d, + 0x4a, 0x98, 0xd2, 0xc9, 0x7d, 0x8f, 0x13, 0x97, 0xd1, 0x78, 0x9d, 0xaf, + 0xa1, 0x70, 0x24, 0xb3, 0x16, 0xe9, 0xbe, 0xc9, 0x4f, 0xc9, 0x94, 0x6d, + 0x42, 0xf1, 0x9b, 0x79, 0xa7, 0x41, 0x3b, 0xba, 0xa3, 0x3e, 0x71, 0x49, + 0xcb, 0x42, 0xed, 0x51, 0x15, 0x69, 0x3a, 0xc0, 0x41, 0xfa, 0xcb, 0x98, + 0x8a, 0xde, 0xb5, 0xfe, 0x0e, 0x1d, 0x86, 0x31, 0x18, 0x49, 0x95, 0xb5, + 0x92, 0xc3, 0x97, 0xd2, 0x29, 0x4e, 0x2e, 0x14, 0xf9, 0x0a, 0xa4, 0x14, + 0xba, 0x38, 0x26, 0x89, 0x9a, 0xc4, 0x3f, 0x4c, 0xcc, 0xac, 0xbc, 0x26, + 0xe9, 0xa8, 0x32, 0xb9, 0x51, 0x18, 0xd5, 0xcb, 0x43, 0x3c, 0xbe, 0xf9, + 0x66, 0x0b, 0x00, 0x13, 0x8e, 0x08, 0x17, 0xf6, 0x1e, 0x76, 0x2c, 0xa2, + 0x74, 0xc3, 0x6a, 0xd5, 0x54, 0xeb, 0x22, 0xaa, 0xc1, 0x16, 0x2e, 0x4a, + 0xb0, 0x1a, 0xcb, 0xa1, 0xe3, 0x8c, 0x4e, 0xfd, 0x8f, 0x80, 0xb6, 0x5b, + 0x33, 0x3d, 0x0f, 0x72, 0xe5, 0x5d, 0xfe, 0x71, 0xce, 0x9c, 0x1e, 0xbb, + 0x98, 0x89, 0xe7, 0xc5, 0x61, 0x06, 0xc0, 0xfd, 0x73, 0x80, 0x3a, 0x2a, + 0xec, 0xfe, 0xaf, 0xde, 0xd7, 0xaa, 0x3c, 0xb2, 0xce, 0xda, 0x54, 0xd1, + 0x2b, 0xd8, 0xcd, 0x36, 0xa7, 0x8c, 0xf9, 0x75, 0x94, 0x3b, 0x47, 0xab, + 0xd2, 0x5e, 0x88, 0x0a, 0xc4, 0x52, 0xe5, 0x74, 0x2e, 0xd1, 0xe8, 0xd1, + 0xa8, 0x2a, 0xfa, 0x86, 0xe5, 0x90, 0xc7, 0x58, 0xc1, 0x5a, 0xe4, 0xd2, + 0x84, 0x0d, 0x92, 0xbc, 0xa1, 0xa5, 0x09, 0x0f, 0x40, 0x49, 0x65, 0x97, + 0xfc, 0xa7, 0xd8, 0xb9, 0x51, 0x3f, 0x1a, 0x1b, 0xda, 0x6e, 0x95, 0x0a, + 0xaa, 0x98, 0xde, 0x46, 0x75, 0x07, 0xd4, 0xa4, 0xf5, 0xa4, 0xf0, 0x59, + 0x92, 0x16, 0x58, 0x2c, 0x35, 0x72, 0xf6, 0x2e, 0xda, 0x89, 0x05, 0xab, + 0x35, 0x81, 0x67, 0x0c, 0x4a, 0x02, 0x77, 0x7a, 0x33, 0xe0, 0xca, 0x72, + 0x95, 0xfd, 0x8f, 0x4f, 0xf6, 0xd1, 0xa0, 0xa3, 0xa7, 0x68, 0x3d, 0x65, + 0xf5, 0xf5, 0xf7, 0xfc, 0x60, 0xda, 0x02, 0x3e, 0x82, 0x6c, 0x5f, 0x92, + 0x14, 0x4c, 0x02, 0xf7, 0xd1, 0xba, 0x10, 0x75, 0x98, 0x75, 0x53, 0xea, + 0x93, 0x67, 0xfc, 0xd7, 0x6d, 0x99, 0x0b, 0x7f, 0xa9, 0x9c, 0xd4, 0x5a, + 0xfd, 0xb8, 0x83, 0x6d, 0x43, 0xe4, 0x59, 0xf5, 0x18, 0x7d, 0xf0, 0x58, + 0x47, 0x97, 0x09, 0xa0, 0x1e, 0xa6, 0x83, 0x59, 0x35, 0xfa, 0x70, 0x46, + 0x09, 0x90, 0xcd, 0x3d, 0xc1, 0xba, 0x40, 0x1b, 0xa9, 0x4b, 0xab, 0x1d, + 0xde, 0x41, 0xac, 0x67, 0xab, 0x33, 0x19, 0xdc, 0xac, 0xa0, 0x60, 0x48, + 0xd4, 0xc4, 0xee, 0xf2, 0x7e, 0xe1, 0x3a, 0x9c, 0x17, 0xd0, 0x53, 0x8f, + 0x43, 0x0f, 0x2d, 0x64, 0x2d, 0xc2, 0x41, 0x56, 0x60, 0xde, 0x78, 0x87, + 0x7d, 0x8d, 0x8a, 0xbc, 0x72, 0x52, 0x39, 0x78, 0xc0, 0x42, 0xe4, 0x28, + 0x5f, 0x43, 0x19, 0x84, 0x6c, 0x44, 0x12, 0x62, 0x42, 0x97, 0x68, 0x44, + 0xc1, 0x0e, 0x55, 0x6b, 0xa2, 0x15, 0xb5, 0xa7, 0x19, 0xe5, 0x9d, 0x0c, + 0x6b, 0x2a, 0x96, 0xd3, 0x98, 0x59, 0x07, 0x1f, 0xdc, 0xc2, 0xcd, 0xe7, + 0x52, 0x4a, 0x7b, 0xed, 0xae, 0x54, 0xe8, 0x5b, 0x31, 0x8e, 0x85, 0x4e, + 0x8f, 0xe2, 0xb2, 0xf3, 0xed, 0xfa, 0xc9, 0x71, 0x91, 0x28, 0x27, 0x0a, + 0xaf, 0xd1, 0xe5, 0x04, 0x4c, 0x3a, 0x4f, 0xda, 0xfd, 0x9f, 0xf3, 0x1f, + 0x90, 0x78, 0x4b, 0x8e, 0x8e, 0x45, 0x96, 0x14, 0x4a, 0x0d, 0xaf, 0x58, + 0x65, 0x11, 0xd3, 0xd9, 0x96, 0x2b, 0x9e, 0xa9, 0x5a, 0xf1, 0x97, 0xb4, + 0xe5, 0xfc, 0x60, 0xf2, 0xb1, 0xed, 0x15, 0xde, 0x3a, 0x5b, 0xef, 0x5f, + 0x89, 0xbd, 0xc7, 0x9d, 0x91, 0x05, 0x1d, 0x9b, 0x28, 0x16, 0xe7, 0x4f, + 0xa5, 0x45, 0x31, 0xef, 0xdc, 0x1c, 0xbe, 0x74, 0xd4, 0x48, 0x85, 0x7f, + 0x47, 0x6b, 0xcd, 0x58, 0xf2, 0x1c, 0x0b, 0x65, 0x3b, 0x3b, 0x76, 0xa4, + 0xe0, 0x76, 0xa6, 0x55, 0x9a, 0x30, 0x27, 0x18, 0x55, 0x5c, 0xc6, 0x3f, + 0x74, 0x85, 0x9a, 0xab, 0xab, 0x92, 0x5f, 0x02, 0x38, 0x61, 0xca, 0x8c, + 0xd0, 0xf7, 0xba, 0xdb, 0x28, 0x71, 0xf6, 0x7d, 0x55, 0x32, 0x6d, 0x74, + 0x51, 0x13, 0x5a, 0xd4, 0x5f, 0x4a, 0x1b, 0xa6, 0x91, 0x18, 0xfb, 0xb2, + 0xc8, 0xa3, 0x0e, 0xec, 0x93, 0x92, 0xef, 0x3f, 0x97, 0x70, 0x66, 0xc9, + 0xad, 0xd5, 0xc7, 0x10, 0xcc, 0x64, 0x7b, 0x15, 0x14, 0xd2, 0x17, 0xd9, + 0x58, 0xc7, 0x01, 0x7c, 0x3e, 0x90, 0xfd, 0x20, 0xc0, 0x4e, 0x67, 0x4b, + 0x90, 0x48, 0x6e, 0x93, 0x70, 0xa3, 0x1a, 0x00, 0x1d, 0x32, 0xf4, 0x73, + 0x97, 0x9e, 0x49, 0x06, 0x74, 0x9e, 0x7e, 0x47, 0x7f, 0xa0, 0xb7, 0x45, + 0x08, 0xf8, 0xa5, 0xf2, 0x37, 0x83, 0x12, 0xb8, 0x3c, 0x25, 0xbd, 0x38, + 0x8c, 0xa0, 0xb0, 0xff, 0xf7, 0x47, 0x8b, 0xaf, 0x42, 0xb7, 0x16, 0x67, + 0xed, 0xaa, 0xc9, 0x7c, 0x46, 0xb1, 0x29, 0x64, 0x3e, 0x58, 0x6e, 0x5b, + 0x05, 0x5a, 0x0c, 0x21, 0x19, 0x46, 0xd4, 0xf3, 0x6e, 0x67, 0x5b, 0xed, + 0x58, 0x60, 0xfa, 0x04, 0x2a, 0x31, 0x5d, 0x98, 0x26, 0x16, 0x4d, 0x6a, + 0x92, 0x37, 0xc3, 0x5a, 0x5f, 0xbf, 0x49, 0x54, 0x90, 0xa5, 0xbd, 0x4d, + 0xf2, 0x48, 0xb9, 0x5c, 0x4a, 0xae, 0x77, 0x84, 0xb6, 0x05, 0x67, 0x31, + 0x66, 0xac, 0x42, 0x45, 0xb5, 0xb4, 0xb0, 0x82, 0xa0, 0x9e, 0x93, 0x23, + 0xe6, 0x2f, 0x20, 0x78, 0xc5, 0xb7, 0x67, 0x83, 0x44, 0x6d, 0xef, 0xd7, + 0x36, 0xad, 0x3a, 0x37, 0x02, 0xd4, 0x9b, 0x08, 0x98, 0x44, 0x90, 0x0a, + 0x61, 0x83, 0x33, 0x97, 0xbc, 0x44, 0x19, 0xb3, 0x0d, 0x7a, 0x97, 0xa0, + 0xb3, 0x87, 0xc1, 0x91, 0x14, 0x74, 0xc4, 0xd4, 0x1b, 0x53, 0xe3, 0x2a, + 0x97, 0x7a, 0xcb, 0x6f, 0x0e, 0xa7, 0x5d, 0xb6, 0x5b, 0xb3, 0x9e, 0x59, + 0xe7, 0x01, 0xe7, 0x69, 0x57, 0xde, 0xf6, 0xf2, 0xd4, 0x45, 0x59, 0xc3, + 0x1a, 0x77, 0x12, 0x2b, 0x52, 0x04, 0xe3, 0xb5, 0xc2, 0x19, 0xf1, 0x68, + 0x8b, 0x14, 0xed, 0x0b, 0xc0, 0xb8, 0x01, 0xb3, 0xe6, 0xe8, 0x2d, 0xcd, + 0x43, 0xe9, 0xc0, 0xe9, 0xf4, 0x17, 0x44, 0xcd, 0x98, 0x15, 0xbd, 0x1b, + 0xc8, 0x82, 0x0d, 0x8b, 0xb1, 0x23, 0xf0, 0x4f, 0xac, 0xd1, 0xb1, 0xb6, + 0x85, 0xdd, 0x5a, 0x2b, 0x1b, 0x8d, 0xbb, 0xf3, 0xed, 0x93, 0x36, 0x70, + 0xf0, 0x95, 0xa1, 0x80, 0xb4, 0xf1, 0x92, 0xd0, 0x8b, 0x10, 0xb8, 0xfa, + 0xbb, 0xdf, 0xcc, 0x2b, 0x24, 0x51, 0x8e, 0x32, 0xee, 0xa0, 0xa5, 0xe0, + 0xc9, 0x04, 0xca, 0x84, 0x47, 0x80, 0x08, 0x3f, 0x3b, 0x0c, 0xd2, 0xd0, + 0xb8, 0xb6, 0xaf, 0x67, 0xbc, 0x35, 0x5b, 0x94, 0x94, 0x02, 0x5d, 0xc7, + 0xb0, 0xa7, 0x8f, 0xa8, 0x0e, 0x3a, 0x2d, 0xbf, 0xeb, 0x51, 0x32, 0x88, + 0x51, 0xd6, 0x07, 0x81, 0x98, 0xe9, 0x49, 0x36, 0x51, 0xae, 0x78, 0x7e, + 0xc0, 0x25, 0x1f, 0x92, 0x2b, 0xa3, 0x0e, 0x9f, 0x51, 0xdf, 0x62, 0xa6, + 0xd7, 0x27, 0x84, 0xcf, 0x3d, 0xd2, 0x05, 0x39, 0x31, 0x76, 0xdf, 0xa3, + 0x24, 0xa5, 0x12, 0xbd, 0x94, 0x97, 0x0a, 0x36, 0xdd, 0x34, 0xa5, 0x14, + 0xa8, 0x67, 0x91, 0xf0, 0xeb, 0x36, 0xf0, 0x14, 0x5b, 0x09, 0xab, 0x64, + 0x65, 0x1b, 0x4a, 0x03, 0x13, 0xb2, 0x99, 0x61, 0x1a, 0x2a, 0x1c, 0x48, + 0x89, 0x16, 0x27, 0x59, 0x87, 0x68, 0xa3, 0x11, 0x40, 0x60, 0xba, 0x44, + 0x43, 0x48, 0x6d, 0xf5, 0x15, 0x22, 0xa1, 0xce, 0x88, 0xb3, 0x09, 0x85, + 0xc2, 0x16, 0xf8, 0xe6, 0xed, 0x17, 0x8d, 0xd5, 0x67, 0xb3, 0x04, 0xa0, + 0xd4, 0xca, 0xfb, 0xa8, 0x82, 0xa2, 0x83, 0x42, 0xf1, 0x7a, 0x9a, 0xa2, + 0x6a, 0xe5, 0x8d, 0xb6, 0x30, 0x08, 0x3d, 0x2c, 0x35, 0x8f, 0xdf, 0x56, + 0x6c, 0x3f, 0x5d, 0x62, 0xa4, 0x28, 0x56, 0x7b, 0xc9, 0xea, 0x8c, 0xe9, + 0x5c, 0xaa, 0x0f, 0x35, 0x47, 0x4b, 0x0b, 0xfa, 0x8f, 0x33, 0x9a, 0x25, + 0x0a, 0xb4, 0xdf, 0xcf, 0x20, 0x83, 0xbe, 0x8e, 0xef, 0xbc, 0x10, 0x55, + 0xe1, 0x8f, 0xe1, 0x53, 0x70, 0xee, 0xcb, 0x26, 0x05, 0x66, 0xd8, 0x3f, + 0xf0, 0x6b, 0x21, 0x1a, 0xae, 0xc4, 0x3c, 0xa2, 0x9b, 0x54, 0xcc, 0xd0, + 0x0f, 0x88, 0x15, 0xa2, 0x46, 0x5e, 0xf0, 0xb4, 0x65, 0x15, 0xcc, 0x7e, + 0x41, 0xf3, 0x12, 0x4f, 0x09, 0xef, 0xff, 0x73, 0x93, 0x09, 0xab, 0x58, + 0xb2, 0x9a, 0x14, 0x59, 0xa0, 0x0b, 0xce, 0x50, 0x38, 0xe9, 0x38, 0xc9, + 0x67, 0x8f, 0x72, 0xeb, 0x0e, 0x4e, 0xe5, 0xfd, 0xaa, 0xe6, 0x6d, 0x9f, + 0x85, 0x73, 0xfc, 0x97, 0xfc, 0x42, 0xb4, 0x95, 0x9f, 0x4b, 0xf8, 0xb6, + 0x1d, 0x78, 0x43, 0x3e, 0x86, 0xb0, 0x33, 0x5d, 0x6e, 0x91, 0x91, 0xc4, + 0xd8, 0xbf, 0x48, 0x7b, 0x39, 0x05, 0xc1, 0x08, 0xcf, 0xd6, 0xac, 0x24, + 0xb0, 0xce, 0xb7, 0xdc, 0xb7, 0xcf, 0x51, 0xf8, 0x4d, 0x0e, 0xd6, 0x87, + 0xb9, 0x5e, 0xae, 0xb1, 0xc5, 0x33, 0xc0, 0x6f, 0x0d, 0x97, 0x02, 0x3d, + 0x92, 0xa7, 0x08, 0x25, 0x83, 0x7b, 0x59, 0xba, 0x6c, 0xb7, 0xd4, 0xe5, + 0x6b, 0x0a, 0x87, 0xc2, 0x03, 0x86, 0x2a, 0xe8, 0xf3, 0x15, 0xba, 0x59, + 0x25, 0xe8, 0xed, 0xef, 0xa6, 0x79, 0x36, 0x9a, 0x22, 0x02, 0x76, 0x61, + 0x51, 0xf1, 0x6a, 0x96, 0x5f, 0x9f, 0x81, 0xec, 0xe7, 0x6c, 0xc0, 0x70, + 0xb5, 0x58, 0x69, 0xe4, 0xdb, 0x97, 0x84, 0xcf, 0x05, 0xc8, 0x30, 0xb3, + 0x24, 0x2c, 0x83, 0x12, +}; +static const unsigned char kat_mldsa44_sig[] = { + 0xb5, 0xbf, 0x80, 0xfc, 0x92, 0x5a, 0x4f, 0x13, 0xcb, 0xb5, 0x2a, 0xf0, + 0x37, 0xe8, 0xbb, 0x70, 0xa6, 0x3f, 0x32, 0x81, 0x3b, 0x6b, 0x57, 0xd3, + 0x5f, 0xc4, 0x59, 0xbd, 0xc5, 0x1c, 0x81, 0x81, 0xec, 0xfc, 0x8e, 0xfd, + 0xce, 0x00, 0xb8, 0x5e, 0xdc, 0xae, 0x8c, 0x05, 0xc9, 0x6f, 0x22, 0xac, + 0x75, 0xf4, 0x3e, 0x8b, 0xf7, 0xbe, 0x0c, 0xf5, 0x7f, 0x3d, 0xd9, 0xbf, + 0x40, 0xdb, 0x86, 0xf8, 0x52, 0xf3, 0x4a, 0x6f, 0x7d, 0x9c, 0x00, 0xf5, + 0x83, 0x15, 0xeb, 0xaa, 0x2c, 0xad, 0x11, 0xb8, 0x23, 0xe4, 0x30, 0x2e, + 0xa3, 0x42, 0x8b, 0x1c, 0x2b, 0xdb, 0xbc, 0xdf, 0x40, 0xda, 0x3d, 0x6a, + 0x42, 0x92, 0xdb, 0x56, 0x52, 0x24, 0x29, 0x8a, 0x84, 0x0a, 0x39, 0x5d, + 0x14, 0x12, 0x52, 0x5c, 0x93, 0x50, 0xd6, 0x16, 0xa7, 0x48, 0x76, 0xf2, + 0x0b, 0xcf, 0x51, 0xad, 0x86, 0x83, 0x2f, 0xa9, 0xb9, 0x6c, 0x25, 0xe0, + 0x8f, 0xea, 0x96, 0x4e, 0xf6, 0x1f, 0x14, 0x18, 0x13, 0xad, 0x95, 0x0b, + 0x9e, 0xfa, 0x4b, 0x21, 0x18, 0x8d, 0xfc, 0xac, 0x54, 0x09, 0x78, 0x3b, + 0xcd, 0xea, 0x7a, 0xd1, 0x98, 0xaf, 0x54, 0x31, 0x75, 0x87, 0xa5, 0x92, + 0xda, 0x65, 0x1a, 0xf3, 0xe0, 0xc9, 0x1b, 0xc1, 0x89, 0x50, 0x0f, 0xd9, + 0x36, 0x31, 0xf5, 0xf5, 0xbd, 0x35, 0x65, 0x0f, 0xda, 0x91, 0x33, 0xf9, + 0xe3, 0xeb, 0x86, 0x5e, 0x9b, 0x1d, 0xc6, 0x31, 0x85, 0xad, 0xa1, 0xb6, + 0xd6, 0x2c, 0x2b, 0x50, 0x1b, 0x9c, 0x0d, 0x03, 0x7b, 0xd5, 0x9c, 0xf8, + 0x37, 0x56, 0xbd, 0xef, 0x05, 0x90, 0x65, 0x08, 0xf7, 0x9e, 0xe6, 0x51, + 0xe8, 0xc2, 0xd5, 0xcf, 0x6d, 0x16, 0x96, 0x9a, 0xf0, 0x1c, 0x1f, 0xaa, + 0x51, 0x97, 0xcd, 0xab, 0x3c, 0xc6, 0x3c, 0xd6, 0xd1, 0xbb, 0xb9, 0x09, + 0x21, 0x5c, 0xd1, 0x60, 0x62, 0x97, 0x32, 0x15, 0xe3, 0x11, 0x7a, 0x37, + 0x0a, 0xfa, 0xf3, 0xbb, 0x07, 0xdf, 0xec, 0x68, 0xbb, 0x89, 0x00, 0x53, + 0x35, 0xb2, 0x14, 0xaf, 0xe0, 0xf7, 0x7e, 0x48, 0x6d, 0x14, 0x82, 0x04, + 0x67, 0x4e, 0xcc, 0x0d, 0xb7, 0x0a, 0x67, 0x43, 0x74, 0x70, 0xb7, 0x6f, + 0xb2, 0x12, 0x35, 0xea, 0x7d, 0xc5, 0x32, 0xd4, 0xf8, 0xb1, 0x84, 0x70, + 0x46, 0x34, 0x04, 0x9d, 0xed, 0xe6, 0x7a, 0xe4, 0xe6, 0xc0, 0x5e, 0x3a, + 0xfa, 0x90, 0x6a, 0xa0, 0x58, 0x76, 0x79, 0x00, 0x07, 0xde, 0x3b, 0x26, + 0xb3, 0xcd, 0x10, 0x02, 0x14, 0x1b, 0x9c, 0x52, 0x4d, 0x3e, 0xf9, 0xdb, + 0xe5, 0x86, 0x6f, 0x63, 0xb6, 0x8c, 0x8f, 0x28, 0x99, 0x2d, 0x0b, 0xcd, + 0x00, 0xd8, 0x93, 0x2b, 0x8d, 0x14, 0x9c, 0x47, 0xf6, 0x2a, 0xfd, 0xca, + 0x16, 0x97, 0xc4, 0xd3, 0x97, 0x60, 0x88, 0x2c, 0x67, 0x9f, 0x1e, 0xa3, + 0x6c, 0x1b, 0xd0, 0xf3, 0xa7, 0xb5, 0x89, 0xe0, 0x0a, 0xbc, 0x2e, 0x14, + 0x28, 0x40, 0x29, 0x76, 0xac, 0x5a, 0x66, 0x5a, 0xaa, 0xe2, 0x62, 0x83, + 0x32, 0x6e, 0x10, 0x11, 0x70, 0x96, 0x7b, 0x7f, 0xb1, 0x0d, 0x52, 0x8d, + 0x31, 0x0e, 0x1e, 0xbd, 0x27, 0x2d, 0x07, 0x04, 0x34, 0xce, 0x28, 0xd4, + 0x69, 0x76, 0xed, 0xcc, 0x2a, 0x4d, 0x08, 0xd7, 0x99, 0x9a, 0x66, 0x97, + 0x1f, 0xdd, 0x76, 0xac, 0xfa, 0xb4, 0x9e, 0xdc, 0x37, 0xd9, 0x67, 0xc4, + 0x06, 0x01, 0x58, 0x25, 0xdf, 0x5a, 0xef, 0xb2, 0x1a, 0xa7, 0xbf, 0xfd, + 0xb1, 0x1a, 0x93, 0x4f, 0x35, 0x53, 0x18, 0x8f, 0xf8, 0x3f, 0x73, 0xac, + 0xc1, 0xe6, 0xdc, 0x6d, 0xc3, 0x7a, 0xe2, 0xe3, 0x1c, 0x0d, 0x13, 0x83, + 0x6a, 0x9e, 0xd0, 0xd2, 0xa0, 0x6b, 0x98, 0x4d, 0xea, 0x1d, 0xda, 0x00, + 0xf9, 0xb5, 0xd8, 0x62, 0xe3, 0xb1, 0x62, 0xc2, 0x30, 0x11, 0xaf, 0x2b, + 0xe5, 0xd4, 0x89, 0x06, 0x4a, 0xff, 0x0b, 0xe0, 0xf5, 0x79, 0x22, 0x33, + 0x58, 0xc7, 0xc8, 0x77, 0xaf, 0xc1, 0xcb, 0xa7, 0x64, 0xef, 0x1f, 0xa1, + 0xc0, 0x1e, 0x7b, 0x0b, 0x85, 0x18, 0x8e, 0x29, 0x14, 0x62, 0x7a, 0x6b, + 0x8a, 0x7a, 0x5f, 0xdc, 0xe8, 0x9c, 0x5c, 0x32, 0x76, 0x48, 0xe1, 0x2f, + 0x99, 0x37, 0x3b, 0xcb, 0x31, 0x5f, 0x3d, 0x8a, 0xe1, 0x4e, 0x78, 0x12, + 0x6e, 0x5a, 0x1e, 0x2e, 0x81, 0xe4, 0xe7, 0x93, 0x64, 0x99, 0x1b, 0xb5, + 0x00, 0xc8, 0xa2, 0xce, 0x0b, 0x8b, 0xe6, 0xda, 0x71, 0xfd, 0xf9, 0x92, + 0x8a, 0x13, 0x4b, 0x2c, 0xc2, 0xbf, 0x52, 0xf2, 0x64, 0x5a, 0xc7, 0xd1, + 0x63, 0x45, 0xb7, 0xdc, 0x38, 0x76, 0x99, 0x77, 0x95, 0xa7, 0x51, 0x47, + 0xbf, 0x1f, 0x94, 0x50, 0xa8, 0x87, 0x6d, 0x01, 0xa9, 0x73, 0x6b, 0x13, + 0x39, 0xf4, 0x15, 0x54, 0x27, 0x38, 0x9a, 0x2a, 0xdc, 0xb7, 0x6e, 0x1d, + 0xb4, 0xc4, 0xc1, 0x01, 0x89, 0xd9, 0x46, 0xa1, 0xe0, 0xf3, 0xe5, 0x91, + 0x0d, 0x1b, 0x13, 0x88, 0x12, 0x91, 0xd0, 0x10, 0xaa, 0xc0, 0x82, 0xae, + 0xef, 0xc2, 0xe9, 0x61, 0x2c, 0xe2, 0xe2, 0x3b, 0x48, 0xac, 0xf0, 0x31, + 0x0b, 0xa1, 0x34, 0x7a, 0x24, 0x99, 0x62, 0xec, 0xbd, 0xce, 0x93, 0x33, + 0x2b, 0xd0, 0x88, 0xae, 0x94, 0xc5, 0xf3, 0x1e, 0xc4, 0x63, 0x1e, 0x55, + 0xba, 0xae, 0x78, 0xdd, 0xc0, 0xa6, 0xfe, 0x2d, 0xa2, 0x5e, 0x93, 0x5b, + 0x29, 0x02, 0x1d, 0x97, 0xb0, 0x09, 0x75, 0x70, 0xec, 0x55, 0xe7, 0xa8, + 0xc4, 0x66, 0xd4, 0xbb, 0xc0, 0x88, 0xf8, 0xb8, 0x62, 0x6b, 0xda, 0xea, + 0x5e, 0x49, 0x11, 0x84, 0xe1, 0xa5, 0x13, 0x2c, 0x41, 0x3a, 0x3c, 0x12, + 0x6d, 0x3f, 0x78, 0xb4, 0xc7, 0xd2, 0x8a, 0x39, 0x06, 0xa7, 0x2f, 0x99, + 0x34, 0x97, 0xc5, 0x43, 0x9e, 0x46, 0xee, 0x6d, 0x0e, 0xf0, 0x41, 0x57, + 0xc0, 0xff, 0x5b, 0x4d, 0x33, 0x03, 0x82, 0x07, 0x0d, 0xe8, 0xd3, 0xe5, + 0x7b, 0xb9, 0xd3, 0xaa, 0x4c, 0x2e, 0x12, 0x45, 0xed, 0x0b, 0xa2, 0xa4, + 0xb7, 0x34, 0x62, 0xc1, 0x4a, 0x85, 0xd0, 0x8a, 0xb5, 0x7f, 0xd8, 0xbd, + 0x9e, 0x72, 0x01, 0xf8, 0x11, 0x7a, 0x27, 0xcf, 0x42, 0x67, 0xb1, 0xda, + 0xcf, 0x4c, 0x6c, 0x57, 0x9a, 0x0c, 0x03, 0x45, 0xe0, 0x94, 0x34, 0x74, + 0x33, 0x64, 0x57, 0x7a, 0x34, 0x1d, 0x30, 0x52, 0xd3, 0x50, 0x85, 0x34, + 0xa1, 0x1c, 0xcd, 0xba, 0xcd, 0xf1, 0x8a, 0xaa, 0xe6, 0x85, 0xf6, 0xd5, + 0x79, 0xf1, 0x79, 0x01, 0x76, 0x53, 0x58, 0x49, 0xbb, 0x9f, 0x96, 0x31, + 0xba, 0x6e, 0x9c, 0x74, 0xf8, 0x69, 0x93, 0x2b, 0xf0, 0x81, 0xf7, 0xbc, + 0x78, 0xc6, 0xca, 0x18, 0xeb, 0x04, 0xad, 0xe4, 0x47, 0x33, 0x28, 0x06, + 0xdb, 0xd3, 0xf5, 0x11, 0x2a, 0x5d, 0x52, 0x9b, 0xf3, 0xaf, 0xda, 0x25, + 0x29, 0xc5, 0x00, 0x1b, 0x3f, 0x13, 0xf4, 0x5f, 0x62, 0x4c, 0x7d, 0x5b, + 0x9e, 0x4b, 0xad, 0x5a, 0x44, 0x47, 0x39, 0x69, 0x63, 0xa8, 0xb7, 0xb1, + 0x40, 0xbc, 0xeb, 0xf9, 0xe4, 0x4d, 0x4e, 0x55, 0x6f, 0xeb, 0xe9, 0x1d, + 0xc2, 0x0b, 0x39, 0xdb, 0x4b, 0x70, 0x1f, 0x83, 0x8c, 0x47, 0x46, 0xfe, + 0x73, 0x17, 0x38, 0x58, 0x18, 0x89, 0x3e, 0xb8, 0x12, 0x6e, 0xb6, 0x49, + 0x32, 0x1d, 0x17, 0x3b, 0xc4, 0x38, 0x76, 0xb0, 0xa0, 0x15, 0xd0, 0x1b, + 0x67, 0xd9, 0xa6, 0xe0, 0x36, 0xd7, 0x66, 0x78, 0xd8, 0x44, 0x5e, 0xbf, + 0xde, 0xec, 0x22, 0xf5, 0x91, 0x8a, 0xd3, 0x81, 0xe0, 0x71, 0x6c, 0x93, + 0xec, 0x8e, 0x33, 0x98, 0x8c, 0x4c, 0x0c, 0xba, 0x78, 0x4c, 0xec, 0xc1, + 0xc2, 0x8a, 0xf1, 0x2c, 0x93, 0x92, 0xc5, 0x0c, 0x13, 0xcc, 0x73, 0x9e, + 0x3b, 0xd7, 0xa9, 0xb5, 0x6b, 0x22, 0xcc, 0x7c, 0xfd, 0xfc, 0xf2, 0x3d, + 0x45, 0x05, 0x6b, 0x83, 0xfc, 0xc6, 0x1f, 0x8c, 0xdf, 0x59, 0x4f, 0x51, + 0xf8, 0xfd, 0x20, 0x79, 0x4a, 0xc0, 0x8f, 0x05, 0x69, 0xbf, 0x04, 0x8a, + 0x70, 0xde, 0xaf, 0x98, 0xe8, 0x2e, 0xc3, 0xbb, 0x61, 0x2a, 0x69, 0x14, + 0xa0, 0xa2, 0x4d, 0xc6, 0xdf, 0x45, 0x2b, 0x52, 0xf9, 0xcc, 0xf3, 0x24, + 0xfc, 0xea, 0x3c, 0xaf, 0x26, 0xa6, 0xbf, 0x7c, 0x6b, 0x26, 0xb2, 0x1e, + 0x4b, 0x41, 0x56, 0x8c, 0x79, 0x74, 0x78, 0x0e, 0x38, 0x12, 0x4b, 0x98, + 0x66, 0x96, 0xdc, 0xc9, 0xe1, 0xed, 0x42, 0xf7, 0x03, 0x59, 0x1a, 0x4d, + 0x94, 0xbb, 0x33, 0x99, 0xe5, 0x2f, 0xbe, 0x55, 0x82, 0x1c, 0x21, 0x49, + 0xac, 0xb3, 0x84, 0xbb, 0xc0, 0x6a, 0x6d, 0x6a, 0xb7, 0x97, 0x1e, 0x39, + 0x80, 0xad, 0x06, 0xa4, 0x4b, 0xc6, 0x4c, 0x25, 0xc3, 0xa9, 0xb7, 0x25, + 0x90, 0xa5, 0xd3, 0x4f, 0xf4, 0x72, 0xfa, 0x30, 0xc8, 0x47, 0x11, 0x52, + 0x7e, 0xce, 0x56, 0xa8, 0x93, 0x96, 0x1a, 0x62, 0x12, 0xcd, 0x8d, 0xbb, + 0x93, 0xe1, 0x26, 0x42, 0x1e, 0xc2, 0xe7, 0x2c, 0x7d, 0xe8, 0xea, 0x20, + 0x58, 0x62, 0xc9, 0xa7, 0x28, 0xc2, 0x96, 0x22, 0xe3, 0xbc, 0x22, 0xe4, + 0xbd, 0xca, 0xde, 0xce, 0x0a, 0x1e, 0x89, 0x29, 0x24, 0xaf, 0x89, 0x94, + 0x7c, 0x02, 0x41, 0x2a, 0x07, 0xe7, 0xe7, 0x4b, 0x08, 0x77, 0x21, 0x56, + 0x89, 0x0d, 0xbf, 0x84, 0xc5, 0x53, 0xcf, 0xc8, 0x1e, 0xcc, 0xeb, 0x61, + 0x6c, 0x65, 0x2b, 0x04, 0xe1, 0x22, 0xe7, 0x96, 0xbd, 0x21, 0x26, 0x7b, + 0x18, 0x70, 0x83, 0x34, 0x31, 0xed, 0x43, 0x0c, 0x61, 0x33, 0xc7, 0x9e, + 0x9f, 0x18, 0x29, 0x74, 0xe7, 0x19, 0x99, 0x41, 0x7b, 0x8c, 0x46, 0x8b, + 0x84, 0xee, 0x1b, 0x0c, 0xe2, 0x13, 0x95, 0x5f, 0x05, 0xc8, 0xaa, 0x2a, + 0xc3, 0x7c, 0x7c, 0x24, 0xbe, 0xcb, 0x18, 0x07, 0x7b, 0x73, 0x82, 0x65, + 0x8c, 0x79, 0x60, 0x27, 0xec, 0xcd, 0x8f, 0x02, 0x9a, 0x05, 0x57, 0xc0, + 0x4c, 0xab, 0x9e, 0x15, 0x6a, 0x6e, 0x27, 0x4a, 0xe2, 0x03, 0x84, 0x28, + 0x1d, 0xc0, 0x99, 0xa5, 0x0a, 0xe8, 0xae, 0x84, 0x5a, 0x1e, 0xe3, 0xc8, + 0xe5, 0x9e, 0x0e, 0xa0, 0xcd, 0x44, 0xc1, 0xa8, 0xcc, 0x95, 0x35, 0x97, + 0xd0, 0x5e, 0xa6, 0x4e, 0x49, 0x98, 0x6c, 0x48, 0xaf, 0x9d, 0xd0, 0x0b, + 0x4a, 0x1a, 0x20, 0xc1, 0xac, 0xed, 0xec, 0xc1, 0x11, 0xf7, 0x55, 0x6a, + 0x1d, 0x82, 0x84, 0xd9, 0x66, 0x53, 0x30, 0x2b, 0xd5, 0x38, 0x6d, 0xd7, + 0xe0, 0xfa, 0x7a, 0xb7, 0xa4, 0xcd, 0x50, 0xf2, 0x1d, 0x61, 0x8f, 0x46, + 0xab, 0x4f, 0xe2, 0x2f, 0x8e, 0x2f, 0x10, 0x47, 0x58, 0xdf, 0x4d, 0x60, + 0x85, 0xfd, 0x62, 0x8c, 0x54, 0xc4, 0xdf, 0x20, 0x40, 0x00, 0x24, 0xd9, + 0x41, 0xf0, 0xa3, 0x03, 0xc5, 0xc1, 0xfd, 0xb6, 0x94, 0xab, 0xd3, 0x9a, + 0x34, 0x20, 0xa8, 0xd8, 0xa1, 0xae, 0x1b, 0xd4, 0x59, 0xc7, 0xf0, 0x9b, + 0x0d, 0xfa, 0x98, 0x8b, 0xa2, 0x55, 0x87, 0x63, 0x73, 0x04, 0x7f, 0xac, + 0x5c, 0xa0, 0xe0, 0x9b, 0xde, 0x5a, 0xdd, 0x44, 0x60, 0x49, 0x12, 0x1e, + 0x08, 0x8c, 0x18, 0xa5, 0x07, 0x3c, 0xa1, 0x3e, 0x39, 0x20, 0x85, 0x09, + 0xa7, 0x40, 0x08, 0x1d, 0x6f, 0x35, 0x4b, 0x83, 0x12, 0xd8, 0xf5, 0xa1, + 0x2a, 0x5a, 0x9f, 0xca, 0x7a, 0xf9, 0x14, 0xec, 0x66, 0x98, 0xa6, 0x3b, + 0x6f, 0x0a, 0x20, 0x9a, 0x99, 0xd4, 0xfa, 0x8c, 0x21, 0x50, 0xfc, 0x6c, + 0xd4, 0x86, 0xad, 0xa3, 0x30, 0xd5, 0x4c, 0x91, 0xa6, 0xd0, 0x64, 0xaa, + 0x83, 0xbb, 0xf8, 0xa1, 0x9f, 0x6a, 0x64, 0x06, 0x07, 0x88, 0x16, 0x3b, + 0x84, 0xde, 0x36, 0x5b, 0x2f, 0x45, 0x5c, 0xcf, 0xa5, 0x9c, 0x32, 0xae, + 0xb9, 0x53, 0x62, 0xa4, 0xd5, 0x46, 0xaf, 0x88, 0xd2, 0x9c, 0x4b, 0xb7, + 0xd8, 0x25, 0x66, 0xb9, 0x2f, 0x2e, 0x18, 0x17, 0xce, 0x07, 0x6b, 0x31, + 0x0b, 0x4b, 0x80, 0x24, 0x8d, 0xe4, 0x2a, 0x9f, 0xf5, 0x8c, 0x05, 0xa2, + 0x26, 0x7d, 0x9c, 0x75, 0x7b, 0x5e, 0xf1, 0x1c, 0x81, 0x8e, 0xce, 0x92, + 0x5d, 0x5b, 0xff, 0x3d, 0x0e, 0x4d, 0x02, 0x55, 0xf2, 0x8a, 0xac, 0x76, + 0xdf, 0x21, 0x72, 0x3a, 0xcc, 0xf7, 0x23, 0xe1, 0x51, 0xf7, 0x3c, 0x19, + 0xb7, 0xf0, 0x37, 0xea, 0x56, 0xf8, 0xf5, 0xfb, 0x7b, 0x90, 0xde, 0x8c, + 0x20, 0x7f, 0xaa, 0x0c, 0xd5, 0x0d, 0x97, 0xc6, 0xa3, 0xa2, 0xac, 0x63, + 0xf1, 0xde, 0x3e, 0xd9, 0xc3, 0x9c, 0xac, 0x79, 0xf4, 0xbc, 0x79, 0xa7, + 0xcb, 0x8a, 0xc7, 0x9c, 0x6b, 0x7a, 0xff, 0x4f, 0x96, 0x57, 0xc5, 0xfb, + 0xd3, 0xfc, 0x3c, 0xc1, 0xe0, 0x90, 0xcd, 0x17, 0x1e, 0x8c, 0x9c, 0x35, + 0xdd, 0xc7, 0x3d, 0x40, 0x72, 0x36, 0x3f, 0xe9, 0xfc, 0xb6, 0x0f, 0x37, + 0x5e, 0x39, 0x37, 0x1d, 0x27, 0x71, 0x97, 0x4a, 0xbf, 0x4b, 0x8e, 0x4c, + 0x20, 0x0c, 0x87, 0x2c, 0x9b, 0x38, 0x14, 0x59, 0x61, 0x21, 0x35, 0x67, + 0xf0, 0xf1, 0xb4, 0x99, 0x52, 0xfc, 0xb0, 0x9c, 0xc7, 0x5e, 0xee, 0xc7, + 0x83, 0x47, 0x38, 0x62, 0x37, 0x63, 0x20, 0x9f, 0x3c, 0xdb, 0x37, 0xbf, + 0xc1, 0xb5, 0x1e, 0x6e, 0x31, 0x48, 0xf5, 0x3b, 0xf8, 0xbb, 0x4a, 0x7b, + 0x0c, 0x2f, 0xff, 0x1b, 0x31, 0xa8, 0xa5, 0x67, 0x54, 0x83, 0x6d, 0x13, + 0xc3, 0x4d, 0xf9, 0x76, 0xf3, 0x9f, 0x77, 0x89, 0x16, 0x1e, 0xaa, 0xd8, + 0xec, 0x6b, 0x23, 0x44, 0xa3, 0x41, 0x85, 0x1b, 0x12, 0x01, 0x50, 0x62, + 0xb5, 0x60, 0xb7, 0xf4, 0x85, 0xd0, 0x2a, 0x4a, 0xce, 0xcc, 0xd4, 0x76, + 0x13, 0xbb, 0x9a, 0x69, 0x47, 0x43, 0x73, 0x1e, 0x0c, 0xa3, 0x27, 0xab, + 0x65, 0x11, 0x08, 0x2e, 0xc0, 0x32, 0xb2, 0x4e, 0x95, 0xc5, 0x35, 0xf2, + 0x00, 0x91, 0xa5, 0x98, 0x5e, 0x24, 0xd2, 0xe0, 0xce, 0x36, 0x3b, 0x29, + 0x20, 0x72, 0x16, 0x7e, 0xad, 0xe7, 0x52, 0x4b, 0x38, 0xaf, 0xba, 0x84, + 0xc3, 0x39, 0xc2, 0xa7, 0x19, 0x86, 0xbe, 0xb1, 0x43, 0x82, 0xcc, 0xe8, + 0x54, 0x97, 0xfb, 0xe8, 0x2c, 0xe0, 0xb0, 0x6b, 0x2e, 0xb0, 0xcd, 0xb6, + 0xd6, 0x76, 0xc4, 0xb2, 0x22, 0x8a, 0xc7, 0x5f, 0xc8, 0x99, 0x52, 0xa5, + 0x0d, 0x65, 0x0c, 0xf0, 0xf8, 0x5e, 0x81, 0xea, 0x87, 0x4d, 0x5a, 0x3e, + 0x36, 0x0a, 0x45, 0x55, 0xf3, 0xa1, 0x51, 0xb0, 0x07, 0x0a, 0x24, 0x39, + 0x18, 0xec, 0x4f, 0x50, 0x91, 0xf4, 0x4a, 0x18, 0x9f, 0x38, 0x42, 0x69, + 0xe5, 0x14, 0x86, 0x97, 0x1b, 0x07, 0x1e, 0x62, 0x7c, 0xae, 0x5e, 0xed, + 0xa3, 0x80, 0x51, 0xd1, 0xbe, 0xb8, 0xba, 0x7f, 0xca, 0x64, 0x4c, 0x29, + 0x6c, 0x74, 0xc3, 0xdc, 0x33, 0x09, 0x54, 0xb4, 0x7e, 0xc8, 0x06, 0x74, + 0x4d, 0xb2, 0x3d, 0x4c, 0x43, 0x2b, 0x15, 0xbb, 0x83, 0xba, 0x59, 0x7d, + 0x76, 0xd1, 0x9e, 0x36, 0x32, 0x01, 0xf0, 0xd1, 0x35, 0xda, 0x06, 0x03, + 0x67, 0xf3, 0x54, 0x5a, 0xd6, 0x92, 0xf9, 0x5d, 0x52, 0x41, 0xfd, 0xbb, + 0xd8, 0xe9, 0x21, 0xb6, 0x48, 0xff, 0x6f, 0x2d, 0x4d, 0x66, 0xe6, 0x23, + 0x9a, 0x41, 0x70, 0xf3, 0x0d, 0x37, 0x3a, 0x0a, 0x71, 0xf0, 0x47, 0x3b, + 0x2f, 0x80, 0x9c, 0x20, 0x93, 0x74, 0xc8, 0xca, 0x9b, 0x33, 0xba, 0x0c, + 0x70, 0x4d, 0x42, 0x19, 0xf0, 0xb6, 0x59, 0x07, 0xd0, 0x96, 0xd8, 0x0c, + 0x90, 0xd7, 0xe3, 0x58, 0xc9, 0x48, 0x47, 0x13, 0x9b, 0x73, 0xd3, 0x52, + 0x40, 0x39, 0xe8, 0xbc, 0x31, 0x2e, 0x80, 0x26, 0x3e, 0xf3, 0x46, 0xa0, + 0x83, 0x72, 0x1a, 0x41, 0x59, 0x39, 0x15, 0x2c, 0x28, 0x74, 0x10, 0x1e, + 0x37, 0xa9, 0x1f, 0x9e, 0xc6, 0xf7, 0xa7, 0x9a, 0x50, 0xc4, 0x6b, 0x7a, + 0x10, 0x8c, 0x67, 0xd2, 0xcb, 0xc5, 0x12, 0x0e, 0x2c, 0x6c, 0x09, 0xff, + 0x4a, 0x9f, 0x6d, 0xc9, 0xd0, 0x1a, 0x75, 0x18, 0x2b, 0xbb, 0x24, 0xb9, + 0xe5, 0x91, 0xab, 0x90, 0xe9, 0xab, 0xd3, 0x17, 0x8a, 0xae, 0xd6, 0x9d, + 0xdc, 0xff, 0xa1, 0x0b, 0x7a, 0x3f, 0x0f, 0x7e, 0x92, 0x5b, 0xab, 0x43, + 0xa2, 0xc4, 0x6e, 0x90, 0x01, 0xb7, 0x83, 0xfc, 0xaa, 0x33, 0x38, 0xc5, + 0x8c, 0x75, 0x75, 0xad, 0xba, 0x38, 0xb4, 0xe2, 0xbd, 0x11, 0x2e, 0x76, + 0x46, 0x80, 0x10, 0x20, 0xbf, 0xb7, 0x56, 0x44, 0x6c, 0x48, 0x53, 0xb1, + 0xbe, 0x1d, 0x0b, 0x7e, 0xd4, 0xce, 0xa0, 0x95, 0x47, 0xf3, 0xfe, 0x8e, + 0x78, 0xe3, 0x97, 0x29, 0xab, 0x0b, 0x07, 0xbf, 0x33, 0x69, 0x7f, 0x83, + 0x5c, 0x15, 0xf3, 0x1c, 0x47, 0x6a, 0x25, 0xe1, 0x3a, 0x4a, 0x02, 0xab, + 0xa6, 0x2b, 0xc0, 0x8c, 0x69, 0x21, 0xd4, 0x9c, 0x39, 0x41, 0x27, 0x09, + 0x2c, 0x52, 0x74, 0xac, 0xa1, 0x5f, 0xbd, 0x59, 0x56, 0xd3, 0x8d, 0x8c, + 0x2e, 0xb4, 0x45, 0x3b, 0xee, 0xa0, 0x40, 0x61, 0xe1, 0xff, 0x75, 0x55, + 0xa6, 0x30, 0x1f, 0x7c, 0x99, 0xed, 0xaa, 0x69, 0x79, 0x23, 0x5e, 0x73, + 0xf8, 0x68, 0x30, 0x57, 0xf2, 0x52, 0x26, 0xec, 0xf7, 0xd1, 0x33, 0xbf, + 0x59, 0x39, 0x6c, 0x9e, 0x53, 0xb7, 0xe9, 0x66, 0x09, 0x4f, 0x5b, 0x35, + 0xa5, 0xb4, 0x34, 0x46, 0xb7, 0xc9, 0xbe, 0x9f, 0xbc, 0x62, 0x82, 0x97, + 0x6b, 0x2d, 0xdd, 0x40, 0xfa, 0x94, 0xe7, 0x2d, 0xd1, 0x75, 0xf8, 0x62, + 0xd7, 0xbd, 0x92, 0xd7, 0xc8, 0x0a, 0x6b, 0x2e, 0x43, 0x14, 0x47, 0x97, + 0xc9, 0x63, 0x15, 0x4c, 0xa3, 0xbc, 0x9b, 0x54, 0x03, 0x12, 0x25, 0x36, + 0x42, 0x49, 0x4e, 0x5f, 0x73, 0x85, 0x8a, 0x8f, 0xa2, 0xa5, 0xa7, 0xab, + 0xac, 0xb2, 0xb8, 0xc7, 0xd2, 0xdb, 0xe7, 0xe9, 0x08, 0x0c, 0x12, 0x34, + 0x43, 0x4c, 0x53, 0x5e, 0x60, 0x79, 0x80, 0x86, 0xa8, 0xbd, 0xec, 0xef, + 0xf0, 0x01, 0x17, 0x1c, 0x24, 0x30, 0x4f, 0x70, 0x77, 0xa0, 0xb7, 0xbc, + 0xc4, 0xc7, 0xca, 0xd3, 0xe6, 0xff, 0x12, 0x15, 0x1e, 0x35, 0x74, 0x75, + 0x93, 0xa8, 0xbe, 0xbf, 0xc1, 0xdf, 0xe2, 0xed, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x29, 0x3a, 0x49, +}; +static const unsigned char kat_mldsa44_sig_ph256[] = { + 0xd4, 0x21, 0x01, 0x6e, 0x44, 0xcb, 0x73, 0x7b, 0x36, 0x38, 0x3a, 0x63, + 0x16, 0x2a, 0x15, 0xbf, 0x76, 0xc0, 0x19, 0xe3, 0xcc, 0x3f, 0x43, 0x5c, + 0x91, 0xc7, 0x01, 0x9e, 0xaf, 0x98, 0x71, 0x31, 0x02, 0x8c, 0x4e, 0xd3, + 0xeb, 0x06, 0x10, 0x9e, 0xc4, 0x93, 0xe2, 0x96, 0xa2, 0x09, 0x80, 0x96, + 0xee, 0x48, 0xa1, 0x4d, 0xdb, 0xeb, 0xbb, 0x86, 0x4e, 0xda, 0x72, 0xe0, + 0x98, 0x8e, 0x09, 0x48, 0xdc, 0x5d, 0x58, 0x26, 0xf5, 0x8b, 0x6d, 0x2b, + 0xa6, 0xc2, 0xa9, 0xc1, 0x82, 0x53, 0xa4, 0xae, 0xdb, 0xc6, 0x0a, 0x11, + 0x36, 0x43, 0x0a, 0x03, 0x51, 0x9c, 0x24, 0x05, 0xa3, 0x2a, 0x35, 0xf3, + 0xb1, 0x05, 0x30, 0x02, 0xf1, 0x1e, 0x3c, 0x32, 0x28, 0x9f, 0xb5, 0x1c, + 0x17, 0x35, 0x91, 0x4d, 0xe8, 0x23, 0x56, 0xfc, 0xbc, 0x66, 0x69, 0x71, + 0xc6, 0xc9, 0xab, 0x73, 0x8d, 0xd6, 0xbe, 0x1d, 0xde, 0x7c, 0x21, 0x0b, + 0xf3, 0xc3, 0xcd, 0x1e, 0xbf, 0xb5, 0xc2, 0x38, 0x5f, 0x3d, 0x61, 0x9c, + 0x7b, 0x6f, 0x01, 0x0b, 0x63, 0x4a, 0x67, 0x06, 0xf1, 0xb9, 0xd2, 0x27, + 0xa5, 0xdc, 0x65, 0x05, 0x12, 0x4f, 0x32, 0xef, 0x09, 0x42, 0xc6, 0x7b, + 0x18, 0x45, 0xad, 0xbe, 0x4b, 0x99, 0x46, 0x32, 0xcf, 0xbd, 0x0d, 0xc8, + 0x5f, 0x5b, 0xaf, 0xf3, 0x91, 0x0a, 0xe6, 0x6c, 0x24, 0x67, 0x87, 0x75, + 0x95, 0x7f, 0x36, 0x67, 0x20, 0x91, 0x06, 0x49, 0x85, 0x1a, 0x68, 0x83, + 0x65, 0x2c, 0x11, 0xc8, 0x8e, 0xa9, 0x4b, 0xe1, 0x77, 0x24, 0x09, 0xc6, + 0xcb, 0x33, 0xdc, 0x53, 0x52, 0xa0, 0x1a, 0x4d, 0x4d, 0x8c, 0x48, 0x8d, + 0xd8, 0x8f, 0x1e, 0x91, 0x1f, 0xd5, 0x61, 0xa0, 0x31, 0xea, 0x83, 0x1d, + 0x29, 0x21, 0x51, 0x4a, 0xc2, 0x83, 0xdb, 0x22, 0xd5, 0x8a, 0xf8, 0xb0, + 0xb7, 0x59, 0x52, 0xad, 0xc5, 0x1d, 0xef, 0x9e, 0x61, 0xfa, 0x1c, 0x11, + 0x40, 0x28, 0x8b, 0xad, 0x5b, 0x48, 0x11, 0x97, 0x4d, 0xbe, 0xbf, 0xc6, + 0x91, 0xe2, 0x51, 0xe2, 0x0d, 0xc6, 0xaa, 0x1e, 0xb0, 0x98, 0x38, 0x0f, + 0x95, 0x07, 0x57, 0x2c, 0x69, 0x1b, 0xcf, 0xd2, 0x3b, 0xd6, 0x79, 0xa7, + 0xf4, 0x1b, 0x8b, 0xb4, 0x50, 0xad, 0x38, 0x00, 0x38, 0xd1, 0x7d, 0xb5, + 0x9c, 0xa9, 0x35, 0xff, 0x17, 0x5b, 0x5d, 0xa8, 0x0a, 0x70, 0x6e, 0xf7, + 0x2c, 0x53, 0x29, 0x95, 0x39, 0x1b, 0x06, 0x28, 0x8a, 0xf9, 0xb2, 0x5e, + 0x08, 0x3d, 0x2c, 0xd4, 0xad, 0x21, 0x7e, 0x79, 0x96, 0x23, 0x3a, 0x03, + 0xfb, 0xb1, 0x6a, 0x70, 0x2c, 0x1e, 0x30, 0x36, 0xd1, 0x99, 0x0a, 0x71, + 0x08, 0x56, 0x8f, 0x2e, 0x86, 0xdf, 0x90, 0x45, 0x6c, 0xf0, 0x6c, 0x68, + 0xb4, 0x06, 0x0a, 0xcd, 0xec, 0x42, 0xbb, 0x0a, 0x35, 0x88, 0x40, 0x8e, + 0xcd, 0xd0, 0x5c, 0x34, 0xe1, 0x7d, 0x46, 0x27, 0x14, 0xa0, 0xd6, 0xff, + 0xe4, 0x8e, 0xee, 0x7f, 0x84, 0x40, 0x24, 0xf7, 0x60, 0xa1, 0xcb, 0xfc, + 0x28, 0x0d, 0x24, 0xdb, 0x42, 0x70, 0x57, 0x5c, 0xde, 0x22, 0x57, 0x39, + 0xce, 0xdc, 0xe1, 0xe6, 0x95, 0x8a, 0x83, 0x92, 0x64, 0x71, 0xea, 0xcf, + 0x8a, 0xe4, 0x1c, 0x66, 0x25, 0x05, 0x66, 0xb2, 0x3d, 0x3f, 0x1e, 0xe2, + 0x2b, 0x88, 0xaa, 0x86, 0x03, 0x2c, 0x9d, 0x52, 0x94, 0x0e, 0x33, 0xcb, + 0x5c, 0x3f, 0xd1, 0x03, 0x79, 0xf0, 0x84, 0x99, 0xef, 0xa1, 0x7f, 0xe4, + 0xd3, 0x56, 0xeb, 0x9d, 0x21, 0x44, 0x51, 0x2c, 0x12, 0x2e, 0x59, 0x23, + 0x8d, 0xf0, 0x4f, 0x86, 0x8e, 0x7b, 0xdc, 0x41, 0x6d, 0x84, 0xac, 0x04, + 0xb3, 0x6e, 0x8f, 0x85, 0xfc, 0x61, 0x24, 0x5d, 0xb6, 0xd7, 0x99, 0xc3, + 0x49, 0xda, 0x6d, 0x13, 0x3d, 0x8d, 0xfc, 0x9b, 0x84, 0xab, 0x34, 0x2b, + 0x0e, 0xa7, 0xf8, 0x81, 0x24, 0x92, 0x5c, 0x03, 0x7e, 0xb4, 0xcc, 0x2d, + 0xbb, 0x32, 0x2a, 0xcd, 0xf0, 0x0f, 0x91, 0x64, 0xad, 0x62, 0x18, 0xba, + 0x6b, 0x5a, 0x97, 0x07, 0x4e, 0xc8, 0x10, 0x0c, 0xe3, 0x2b, 0x15, 0x2d, + 0x0d, 0xc7, 0xb8, 0x8a, 0xde, 0xcd, 0x7b, 0xe2, 0x8d, 0xf7, 0x32, 0x08, + 0x99, 0x3f, 0x03, 0xb0, 0x2d, 0x11, 0x3d, 0x93, 0xd1, 0x93, 0x25, 0x84, + 0x21, 0xb9, 0x0f, 0x27, 0x6a, 0x61, 0x01, 0x2a, 0xd5, 0xdb, 0xdc, 0x7c, + 0xab, 0x26, 0x52, 0x27, 0x65, 0x01, 0x82, 0x25, 0x63, 0xd4, 0x68, 0x09, + 0xa5, 0x27, 0xcb, 0x92, 0x69, 0x84, 0x81, 0xcd, 0xd5, 0xc1, 0x7e, 0x11, + 0x6e, 0x37, 0xac, 0x4a, 0xbd, 0x8d, 0x1d, 0x5d, 0x40, 0xf6, 0x0a, 0x59, + 0x4e, 0x33, 0x2a, 0xdc, 0x63, 0xd2, 0xba, 0x4f, 0x06, 0xe0, 0x27, 0x86, + 0x16, 0xf3, 0xf6, 0xe5, 0xce, 0xcb, 0x2c, 0x4a, 0x50, 0x4c, 0x91, 0x02, + 0xeb, 0x88, 0x59, 0xd2, 0xe9, 0xff, 0x1d, 0xca, 0x2b, 0x52, 0x26, 0x09, + 0xba, 0xe1, 0x9f, 0xa9, 0xcf, 0x0b, 0xac, 0x59, 0x22, 0xea, 0x54, 0x6c, + 0x12, 0xb1, 0xcb, 0x74, 0x44, 0x08, 0xd5, 0x6c, 0xda, 0x1f, 0x2e, 0x3e, + 0x68, 0x20, 0x54, 0x0a, 0xf6, 0x87, 0xdd, 0xf0, 0x2b, 0x65, 0x26, 0xa1, + 0xbd, 0xa7, 0xbd, 0xca, 0x5b, 0x2c, 0xdf, 0xec, 0xff, 0x1d, 0x19, 0x2e, + 0x3b, 0x6c, 0xa3, 0x2a, 0x94, 0x39, 0x98, 0x45, 0x17, 0xcc, 0x15, 0xce, + 0x0a, 0x3a, 0x32, 0xbe, 0x0a, 0x03, 0xcf, 0xd4, 0xde, 0xfe, 0x78, 0x6c, + 0xb8, 0xf5, 0x09, 0x21, 0x5e, 0xbb, 0x91, 0xb8, 0xd5, 0x22, 0xec, 0xa8, + 0xf4, 0xd7, 0x0a, 0xcc, 0xdc, 0x06, 0x75, 0x48, 0xeb, 0xa0, 0x0f, 0xb7, + 0xcf, 0x20, 0xf5, 0x04, 0x9e, 0x74, 0x23, 0x05, 0xdc, 0x11, 0xa6, 0x35, + 0x38, 0x7f, 0xb3, 0x73, 0xd4, 0x46, 0x6f, 0x78, 0xd9, 0xf2, 0x49, 0x39, + 0x3b, 0xa2, 0x43, 0xfa, 0x6a, 0x7f, 0xdf, 0xdb, 0xc1, 0xbc, 0x2d, 0xe8, + 0x13, 0xc8, 0x7e, 0xe6, 0x97, 0x3a, 0xa1, 0x74, 0x09, 0xe8, 0x3e, 0x92, + 0xa0, 0xc7, 0xe4, 0x31, 0xd8, 0x03, 0xa9, 0xff, 0x9e, 0xd8, 0x86, 0x6a, + 0x8b, 0x2d, 0xf2, 0x70, 0x66, 0xf6, 0x3d, 0x97, 0xcd, 0x55, 0x6a, 0xf5, + 0x62, 0xb1, 0x2c, 0xbb, 0xbf, 0x94, 0x04, 0xe4, 0xf1, 0x7b, 0x3f, 0x4a, + 0x5d, 0x20, 0xac, 0x7c, 0xd2, 0x8e, 0x11, 0x11, 0x12, 0x62, 0x32, 0x71, + 0x72, 0x4c, 0xf1, 0x0e, 0xd8, 0x44, 0xdd, 0x19, 0xb0, 0x1a, 0xf3, 0xc8, + 0xd7, 0xae, 0x31, 0x4d, 0xf9, 0x38, 0x72, 0xfe, 0xe1, 0xde, 0x51, 0x65, + 0x1f, 0xc2, 0xf0, 0x5f, 0x79, 0x25, 0x78, 0x68, 0x04, 0x91, 0x10, 0xef, + 0x73, 0xb6, 0x3f, 0x4f, 0x94, 0x07, 0x1d, 0x55, 0xbb, 0x65, 0x88, 0xa6, + 0xc2, 0xac, 0xb3, 0x41, 0xc3, 0x66, 0xe8, 0x73, 0x4b, 0x32, 0x31, 0xa8, + 0x71, 0xe2, 0x49, 0x5f, 0x0e, 0x81, 0x44, 0x97, 0xf7, 0x79, 0xeb, 0x64, + 0x7d, 0x80, 0xe6, 0xa8, 0x89, 0xa7, 0x55, 0xc3, 0x95, 0x25, 0xdf, 0xd9, + 0x3e, 0xa2, 0x09, 0x3e, 0xf8, 0x5f, 0x50, 0xb2, 0x2d, 0x24, 0xf4, 0x95, + 0x36, 0x14, 0x65, 0x9d, 0x07, 0xa1, 0x47, 0x87, 0x43, 0x51, 0x59, 0x69, + 0xd2, 0x78, 0x33, 0x89, 0xe0, 0x7f, 0x15, 0x68, 0x9d, 0x46, 0xe9, 0x67, + 0x24, 0xdb, 0x20, 0x38, 0x40, 0xdb, 0x75, 0x8d, 0x79, 0x6e, 0x7d, 0xfe, + 0xbc, 0xab, 0x59, 0x3d, 0xdb, 0x3e, 0x7a, 0x1e, 0x28, 0x12, 0x80, 0xc3, + 0x1c, 0xdb, 0x34, 0x19, 0x6c, 0x39, 0xbd, 0x3c, 0x8e, 0x60, 0xb9, 0x2f, + 0xb9, 0xa3, 0xb3, 0x08, 0x91, 0x2d, 0xbc, 0xd1, 0xc4, 0x87, 0x73, 0xa4, + 0x73, 0x73, 0xd7, 0xdd, 0xc1, 0x69, 0xae, 0xb2, 0xc1, 0x2a, 0x16, 0xa1, + 0x69, 0x1d, 0xb6, 0x7a, 0x21, 0x17, 0x12, 0x2c, 0xb9, 0xe3, 0x34, 0x9a, + 0x6b, 0x73, 0x45, 0xb8, 0x91, 0x54, 0xac, 0x96, 0x28, 0x25, 0x04, 0xf4, + 0x92, 0x9d, 0xf4, 0x8a, 0xc7, 0x00, 0x73, 0xa9, 0xbf, 0xfc, 0xea, 0xc7, + 0x01, 0xf8, 0xea, 0xc6, 0xc5, 0xa4, 0x53, 0x0a, 0x79, 0x29, 0x3c, 0xb3, + 0x01, 0x7d, 0xad, 0x3e, 0x90, 0x30, 0x04, 0xce, 0x66, 0x39, 0x37, 0x5e, + 0x1b, 0x93, 0x8f, 0x9a, 0xe7, 0xc6, 0x97, 0xf9, 0xe7, 0xa1, 0xda, 0x4f, + 0x28, 0xe5, 0xed, 0x56, 0x24, 0x92, 0x9d, 0x9c, 0x08, 0xff, 0x76, 0x93, + 0xc6, 0x4a, 0x31, 0x6c, 0xe3, 0xe7, 0x78, 0xc8, 0x56, 0x00, 0x3b, 0x6d, + 0x47, 0x7a, 0x96, 0x0e, 0x60, 0x5f, 0x68, 0x2f, 0xa9, 0x09, 0xca, 0xee, + 0x26, 0x60, 0xe1, 0x07, 0x22, 0x5a, 0xb6, 0xd4, 0xb4, 0xe2, 0xf8, 0xb2, + 0x5f, 0x06, 0x3d, 0x8b, 0xb2, 0xfa, 0x16, 0xd0, 0xb1, 0x97, 0x4e, 0x97, + 0x67, 0x7b, 0x00, 0x0c, 0xe3, 0x40, 0xb8, 0x18, 0x20, 0xb8, 0xa2, 0xc4, + 0xb4, 0xcd, 0x5c, 0x5b, 0x66, 0x19, 0x54, 0xf7, 0xe4, 0x5c, 0xd4, 0xc8, + 0x2c, 0xed, 0xd2, 0x11, 0xce, 0xc3, 0xb7, 0xc8, 0xaf, 0x05, 0x48, 0xe8, + 0xd4, 0x9a, 0x35, 0x9c, 0xba, 0xd3, 0x25, 0xc1, 0x07, 0x78, 0xbc, 0x55, + 0xd8, 0x16, 0x3b, 0x6c, 0xc9, 0x2a, 0x4a, 0x00, 0x13, 0x7f, 0xf4, 0xb6, + 0x5d, 0xa2, 0x07, 0xd6, 0x82, 0x43, 0x50, 0xc5, 0xd3, 0x1f, 0x69, 0xfd, + 0xb1, 0x8e, 0x36, 0xb8, 0x88, 0xaf, 0xad, 0xee, 0xca, 0x9a, 0x3e, 0x9b, + 0xba, 0x6e, 0x98, 0x90, 0x5c, 0x81, 0x01, 0x18, 0xd7, 0xd7, 0xbc, 0x2d, + 0xc7, 0xf2, 0xfb, 0x5d, 0xc9, 0xc4, 0x6b, 0xf4, 0x0e, 0xe2, 0xfa, 0xba, + 0x31, 0x1d, 0x96, 0x3e, 0x8e, 0xa2, 0xae, 0xcf, 0xe2, 0xcc, 0x38, 0xdb, + 0xe8, 0xf4, 0x21, 0xee, 0xc0, 0x11, 0x2d, 0x14, 0xf3, 0x36, 0x60, 0xad, + 0x73, 0x98, 0xf1, 0xd4, 0xf6, 0x93, 0x82, 0x18, 0x7b, 0x40, 0x19, 0x68, + 0xc8, 0x1a, 0xfa, 0x73, 0xc6, 0xa9, 0xa7, 0xfa, 0x88, 0xde, 0xd5, 0x48, + 0x21, 0xe6, 0xc8, 0xfc, 0xe4, 0x1d, 0xee, 0x2d, 0xe1, 0xac, 0xda, 0xd6, + 0xf7, 0xc6, 0x1e, 0x1c, 0x2b, 0x1d, 0xb7, 0x39, 0x75, 0xcf, 0x7d, 0xa1, + 0xea, 0x15, 0x7d, 0x44, 0x4f, 0x0a, 0xd6, 0x36, 0x4d, 0xd0, 0xfa, 0xa7, + 0x99, 0xe8, 0xa6, 0xf1, 0xc6, 0xb6, 0x39, 0x69, 0x52, 0xc5, 0xc0, 0x86, + 0x7c, 0x89, 0x2e, 0x18, 0x46, 0xe9, 0x15, 0xcf, 0xe9, 0x4a, 0x01, 0xe6, + 0x85, 0x49, 0x03, 0xfc, 0x44, 0xda, 0x7a, 0x64, 0xa9, 0x86, 0x7b, 0x91, + 0x03, 0xeb, 0xf7, 0x59, 0x97, 0xbc, 0x3a, 0x5f, 0x87, 0xe5, 0x73, 0x64, + 0xcd, 0x40, 0xb9, 0x6d, 0x9e, 0x12, 0x49, 0x78, 0xd8, 0xe8, 0x6b, 0x5a, + 0x5f, 0xc1, 0x6f, 0xa3, 0xf2, 0x88, 0x01, 0x77, 0xb9, 0xa5, 0x92, 0xfe, + 0x17, 0x41, 0xa2, 0x1c, 0x03, 0x96, 0x71, 0x65, 0x04, 0x66, 0xe0, 0xba, + 0x41, 0x2f, 0x21, 0x7d, 0x0c, 0x09, 0xc1, 0x62, 0xa8, 0xcd, 0x63, 0x41, + 0xf9, 0x1d, 0x8a, 0xfe, 0x92, 0xce, 0xa2, 0x31, 0x30, 0x1b, 0x3d, 0x69, + 0xc4, 0x57, 0x07, 0xb0, 0x26, 0xa2, 0x74, 0x03, 0xfc, 0x91, 0x64, 0x9a, + 0xbc, 0xd0, 0xa3, 0xd2, 0x08, 0xd6, 0xc4, 0x34, 0xf2, 0x1a, 0x3b, 0xe0, + 0x2c, 0xf7, 0x2e, 0x18, 0x0e, 0x04, 0xb5, 0x45, 0xb7, 0xfd, 0x0a, 0x79, + 0x1b, 0xf7, 0xda, 0xf6, 0xaf, 0xef, 0xc9, 0xa3, 0x05, 0x62, 0xdc, 0x32, + 0x8a, 0xa5, 0xef, 0x2d, 0x0e, 0xba, 0xf1, 0x59, 0x62, 0x1a, 0x28, 0xee, + 0xc4, 0xc5, 0x04, 0x5e, 0x73, 0xdb, 0x6f, 0xa5, 0x09, 0xbe, 0x47, 0x1e, + 0xac, 0x38, 0x55, 0x1f, 0xf2, 0xc2, 0xac, 0x6f, 0x5f, 0x1e, 0x69, 0xdb, + 0x63, 0xe2, 0x06, 0xc4, 0x78, 0x9c, 0xc5, 0x28, 0x21, 0x9d, 0xf9, 0x91, + 0x55, 0xae, 0xa6, 0x1b, 0x84, 0xe0, 0x39, 0xc7, 0x0d, 0x82, 0x81, 0x3c, + 0x44, 0x72, 0x8f, 0x68, 0x9d, 0xb8, 0x53, 0xb5, 0x7c, 0xf8, 0x33, 0x60, + 0xdf, 0xec, 0x0d, 0x77, 0x42, 0xa9, 0x17, 0xfe, 0xd9, 0x47, 0xb3, 0xa6, + 0x1e, 0x17, 0x98, 0xd2, 0x63, 0xdf, 0x54, 0x0e, 0x3d, 0x3f, 0xd2, 0xe9, + 0x6b, 0xdd, 0x7e, 0x8f, 0x86, 0xf8, 0x5b, 0xe6, 0x93, 0x4e, 0xc9, 0x60, + 0xf8, 0xb1, 0xf9, 0x02, 0xbc, 0xdd, 0x07, 0x8f, 0xea, 0xdf, 0xa6, 0x05, + 0x4d, 0x6d, 0x0d, 0x3c, 0x0c, 0xda, 0x86, 0xcd, 0x56, 0xb8, 0x1c, 0x6c, + 0x93, 0x49, 0xa4, 0xd5, 0xfe, 0xa9, 0x21, 0x00, 0x30, 0x17, 0xd4, 0xd4, + 0x50, 0x44, 0x1d, 0xf2, 0x6a, 0xc8, 0x2b, 0xf5, 0x94, 0xa2, 0x68, 0x09, + 0x53, 0x29, 0xc2, 0x8a, 0x25, 0x13, 0xd7, 0x2f, 0xd9, 0x18, 0xca, 0xc1, + 0x61, 0x87, 0xd8, 0xb5, 0x8a, 0x27, 0x3e, 0x6a, 0x89, 0x8a, 0xb6, 0xd8, + 0x33, 0x86, 0x60, 0x66, 0x04, 0xf4, 0x2e, 0xe6, 0x24, 0x5d, 0x4c, 0xf0, + 0x89, 0xd5, 0x8b, 0xdb, 0xc6, 0x4a, 0x6f, 0x8b, 0x0b, 0x40, 0x1c, 0x77, + 0xce, 0x21, 0x4d, 0x03, 0xa5, 0xcb, 0x4f, 0x87, 0xb5, 0x16, 0x3b, 0x2a, + 0x2e, 0x65, 0x09, 0xc5, 0x16, 0xaa, 0x3b, 0x6e, 0x0f, 0x7d, 0x2e, 0xa6, + 0x44, 0xe0, 0x7f, 0xde, 0xa4, 0xd5, 0x33, 0x30, 0xdd, 0x64, 0xe6, 0x99, + 0xc8, 0x20, 0x0b, 0xfe, 0x8e, 0xf9, 0x6b, 0xdc, 0x71, 0xd0, 0x71, 0x58, + 0x0a, 0x57, 0xe7, 0xf2, 0x0b, 0x60, 0x54, 0x8b, 0x00, 0x26, 0x10, 0x05, + 0x91, 0x4d, 0x44, 0x72, 0x8e, 0x12, 0xe4, 0xea, 0x95, 0x1b, 0x34, 0x61, + 0xf4, 0x40, 0xbe, 0x84, 0x8c, 0x64, 0x39, 0x08, 0x0d, 0xb9, 0x87, 0x21, + 0xd7, 0x1b, 0xc4, 0x27, 0x91, 0x56, 0x44, 0x67, 0x16, 0x70, 0x28, 0x73, + 0x4b, 0x24, 0xb3, 0x40, 0x08, 0x67, 0x4f, 0xa6, 0x1a, 0xce, 0x7d, 0x48, + 0x13, 0xfc, 0x43, 0x6c, 0xae, 0x99, 0x35, 0x22, 0xe9, 0x3e, 0xa4, 0xa4, + 0x1e, 0xdc, 0xfc, 0xf5, 0x75, 0xac, 0x29, 0xca, 0x79, 0xac, 0xad, 0xbc, + 0xf6, 0x64, 0xe4, 0xfd, 0x15, 0xeb, 0x93, 0x99, 0xf5, 0x86, 0x70, 0xfb, + 0x5b, 0xd3, 0xc5, 0x78, 0xf0, 0xf6, 0x7d, 0xb7, 0x56, 0xe1, 0x03, 0xdb, + 0xb9, 0xca, 0x91, 0xea, 0xdb, 0xe8, 0x28, 0xdb, 0x18, 0xe1, 0x52, 0xc0, + 0x23, 0x7e, 0x81, 0xe7, 0x60, 0xb6, 0x5c, 0xb8, 0x42, 0x94, 0x14, 0xcf, + 0x21, 0x44, 0x58, 0xc7, 0x73, 0xae, 0xed, 0xa0, 0xde, 0x76, 0x26, 0x94, + 0xed, 0xf0, 0xb4, 0x4a, 0x05, 0xd8, 0xb3, 0x28, 0xc8, 0x61, 0x52, 0x3b, + 0x76, 0x8f, 0x95, 0xb3, 0x71, 0xb4, 0x49, 0xae, 0x00, 0x7d, 0x9f, 0x11, + 0x80, 0x3f, 0x74, 0x52, 0x70, 0x46, 0x6b, 0xcd, 0x21, 0xf7, 0x6b, 0x1d, + 0x2e, 0x75, 0x5f, 0x0d, 0xdd, 0xb7, 0x8f, 0xed, 0xf7, 0x43, 0x8b, 0x72, + 0x96, 0xeb, 0x69, 0x88, 0xf7, 0xf3, 0x13, 0x80, 0x1b, 0x3e, 0x19, 0x06, + 0xc8, 0x95, 0x25, 0x6e, 0x52, 0xb1, 0xe9, 0xbb, 0xc1, 0xd8, 0xcd, 0x92, + 0xb1, 0xab, 0x6b, 0xbf, 0xe3, 0x08, 0x6f, 0x61, 0x21, 0xe2, 0x90, 0x90, + 0x15, 0xdd, 0xec, 0x9d, 0x38, 0xcd, 0x28, 0xda, 0x18, 0xc5, 0x82, 0xda, + 0x3e, 0x26, 0x73, 0x80, 0x13, 0xf7, 0xfa, 0x72, 0x7b, 0x55, 0x39, 0x85, + 0x52, 0x4a, 0x64, 0xff, 0x56, 0x89, 0x0b, 0x04, 0x4f, 0xe2, 0x52, 0xe7, + 0x12, 0x58, 0x16, 0xf7, 0x6c, 0xe8, 0xf0, 0x60, 0xd3, 0xfd, 0x84, 0x0a, + 0xd3, 0xde, 0x40, 0x25, 0xb6, 0x23, 0xf8, 0x6c, 0xdc, 0x4d, 0xe7, 0x90, + 0x2b, 0x24, 0x41, 0xa0, 0xfa, 0x47, 0x2c, 0x5c, 0xc3, 0x6c, 0x54, 0x73, + 0xe2, 0xad, 0xc7, 0x05, 0x91, 0x23, 0xc1, 0x2a, 0x11, 0x0a, 0x42, 0x26, + 0x68, 0x36, 0x35, 0x91, 0x5d, 0xc0, 0x31, 0xa8, 0x50, 0xc9, 0xd5, 0xb8, + 0xf9, 0xd7, 0x3a, 0xa2, 0x03, 0x53, 0x13, 0xb1, 0x5c, 0x82, 0xc4, 0xde, + 0x7d, 0xac, 0x83, 0x85, 0x06, 0xc9, 0xd7, 0xba, 0x6a, 0x87, 0x4a, 0x8b, + 0x0f, 0xd0, 0x17, 0xf4, 0x87, 0x09, 0x16, 0xb5, 0xb8, 0x10, 0xbc, 0x7f, + 0x62, 0xa5, 0x3f, 0xcb, 0xa7, 0x51, 0x07, 0xde, 0xff, 0x3a, 0x7b, 0x5c, + 0x36, 0x39, 0x5d, 0xc1, 0x08, 0x02, 0x8d, 0x2e, 0xbe, 0x12, 0x82, 0x33, + 0x0f, 0xcd, 0xe1, 0x52, 0xd1, 0x57, 0x74, 0x9b, 0x37, 0xa4, 0x5b, 0xdc, + 0x4a, 0x24, 0x46, 0xb4, 0xbf, 0xc1, 0x6f, 0x7e, 0x42, 0x93, 0x63, 0x64, + 0xf1, 0x71, 0xff, 0x39, 0xbb, 0x80, 0x0a, 0xde, 0xd3, 0xd4, 0xe7, 0x4e, + 0x57, 0x97, 0x2c, 0x8f, 0x0a, 0x3a, 0x8c, 0xd5, 0x83, 0x66, 0xad, 0x0d, + 0xf6, 0xd9, 0xae, 0x0f, 0xb3, 0xc7, 0x59, 0xc5, 0x95, 0x8a, 0x3a, 0xb5, + 0x79, 0x9a, 0x5a, 0x5d, 0x38, 0x4f, 0x59, 0xa9, 0xa9, 0x30, 0x38, 0x98, + 0xbc, 0xfd, 0x87, 0x9b, 0x3c, 0x55, 0x24, 0x51, 0x32, 0x7e, 0xf6, 0xc1, + 0xd4, 0x68, 0x87, 0xd1, 0xeb, 0x32, 0x28, 0x47, 0xc2, 0x99, 0x58, 0xcd, + 0x6f, 0x3b, 0x88, 0x76, 0x04, 0x50, 0x34, 0x8a, 0xd0, 0x06, 0xc9, 0x91, + 0x11, 0xc5, 0x56, 0xe9, 0x20, 0x47, 0x95, 0xc5, 0x53, 0x4e, 0x16, 0xfb, + 0xcf, 0x37, 0x79, 0x9c, 0xbd, 0xbf, 0x7f, 0xf5, 0x8d, 0xd2, 0x28, 0xa5, + 0xdb, 0x96, 0x4f, 0x55, 0xbe, 0x85, 0x12, 0x2e, 0xc2, 0x2e, 0x12, 0xe7, + 0xc9, 0x1b, 0x31, 0xff, 0x4c, 0x34, 0xa4, 0x7b, 0xf8, 0xbb, 0x40, 0x6a, + 0xf5, 0xe0, 0x51, 0x68, 0x5e, 0x71, 0x1e, 0x73, 0xfd, 0xcf, 0xdc, 0x7a, + 0x45, 0x4e, 0x77, 0xc7, 0x1d, 0x33, 0xf4, 0x7d, 0x54, 0xfc, 0xb5, 0xa4, + 0x1f, 0x11, 0x7d, 0x22, 0xef, 0xdb, 0x8b, 0xd1, 0x2d, 0x2f, 0x30, 0x52, + 0x69, 0x74, 0x7b, 0x7c, 0x82, 0x9c, 0xa2, 0xb3, 0xb6, 0xcb, 0xeb, 0x0e, + 0x12, 0x14, 0x2d, 0x34, 0x46, 0x54, 0x76, 0x77, 0x84, 0x87, 0x9d, 0xc8, + 0x03, 0x16, 0x3c, 0x5c, 0x5f, 0x62, 0x69, 0x71, 0xc3, 0xd5, 0xf8, 0xf9, + 0xfd, 0x0a, 0x21, 0x23, 0x47, 0x4e, 0x7f, 0x90, 0x9e, 0xa7, 0xd3, 0xee, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1c, 0x29, 0x35, +}; +static const unsigned char kat_mldsa65_pub[] = { + 0x48, 0x68, 0x3d, 0x91, 0x97, 0x8e, 0x31, 0xeb, 0x3d, 0xdd, 0xb8, 0xb0, + 0x47, 0x34, 0x82, 0xd2, 0xb8, 0x8a, 0x5f, 0x62, 0x59, 0x49, 0xfd, 0x8f, + 0x58, 0xa5, 0x61, 0xe6, 0x96, 0xbd, 0x4c, 0x27, 0xd0, 0x5b, 0x38, 0xdb, + 0xb2, 0xed, 0xf0, 0x1e, 0x66, 0x4e, 0xfd, 0x81, 0xbe, 0x1e, 0xa8, 0x93, + 0x68, 0x8c, 0xe6, 0x8a, 0xa2, 0xd5, 0x1c, 0x59, 0x58, 0xf8, 0xbb, 0xc6, + 0xeb, 0x4e, 0x89, 0xee, 0x67, 0xd2, 0xc0, 0x32, 0x09, 0x54, 0xd5, 0x72, + 0x12, 0xca, 0xc7, 0x22, 0x9f, 0xf1, 0xd6, 0xea, 0xf0, 0x39, 0x28, 0xbd, + 0x51, 0x51, 0x1f, 0x8d, 0x88, 0xd8, 0x47, 0x73, 0x6c, 0x7d, 0xe2, 0x73, + 0x0d, 0x59, 0x78, 0xe5, 0x41, 0x07, 0x13, 0x16, 0x09, 0x78, 0x86, 0x77, + 0x11, 0xbf, 0x55, 0x39, 0xa0, 0xbf, 0xc4, 0xc3, 0x50, 0xc2, 0xbe, 0x57, + 0x2b, 0xaf, 0x0e, 0xe2, 0xe2, 0xfb, 0x16, 0xcc, 0xfe, 0xa0, 0x80, 0x28, + 0xd9, 0x9a, 0xc4, 0x9a, 0xeb, 0xb7, 0x59, 0x37, 0xdd, 0xce, 0x11, 0x1c, + 0xda, 0xb6, 0x2f, 0xff, 0x3c, 0xea, 0x8b, 0xa2, 0x23, 0x3d, 0x1e, 0x56, + 0xfb, 0xc5, 0xc5, 0xa1, 0xe7, 0x26, 0xde, 0x63, 0xfa, 0xdd, 0x2a, 0xf0, + 0x16, 0xb1, 0x19, 0x17, 0x7f, 0xa3, 0xd9, 0x71, 0xa2, 0xd9, 0x27, 0x71, + 0x73, 0xfc, 0xe5, 0x5b, 0x67, 0x74, 0x5a, 0xf0, 0xb7, 0xc2, 0x1d, 0x59, + 0x7d, 0xbe, 0xb9, 0x3e, 0x6a, 0x32, 0xf3, 0x41, 0xc4, 0x9a, 0x5a, 0x8b, + 0xe9, 0xe8, 0x25, 0x08, 0x8d, 0x1f, 0x2a, 0xa4, 0x51, 0x55, 0xd6, 0xc8, + 0xae, 0x15, 0x36, 0x7e, 0x4e, 0xb0, 0x03, 0xb8, 0xfd, 0xf7, 0x85, 0x10, + 0x71, 0x94, 0x97, 0x39, 0xf9, 0xff, 0xf0, 0x90, 0x23, 0xea, 0xf4, 0x51, + 0x04, 0xd2, 0xa8, 0x4a, 0x45, 0x90, 0x6e, 0xed, 0x46, 0x71, 0xa4, 0x4d, + 0xc2, 0x8d, 0x27, 0x98, 0x7b, 0xb5, 0x5d, 0xf6, 0x9e, 0x9e, 0x85, 0x61, + 0xf6, 0x1a, 0x80, 0xa7, 0x26, 0x99, 0x50, 0x38, 0x65, 0xfe, 0xd9, 0xb7, + 0xee, 0x72, 0xa8, 0xe1, 0x7a, 0x19, 0xc4, 0x08, 0x14, 0x4f, 0x4b, 0x29, + 0xaf, 0xef, 0x70, 0x31, 0xc3, 0xa6, 0xd8, 0x57, 0x16, 0x10, 0xb4, 0x2c, + 0x9f, 0x42, 0x12, 0x45, 0xa8, 0x8f, 0x19, 0x7e, 0x16, 0x81, 0x2b, 0x03, + 0x11, 0x59, 0xb6, 0x5b, 0x96, 0x87, 0xe5, 0xb3, 0xe9, 0x34, 0xc5, 0x22, + 0x5a, 0xe9, 0x8a, 0x79, 0xba, 0x73, 0xd2, 0xb3, 0x99, 0xd7, 0x35, 0x10, + 0xef, 0xfa, 0xd1, 0x9e, 0x53, 0xb8, 0x45, 0x0f, 0x0b, 0xa8, 0xfc, 0xe1, + 0x01, 0x2f, 0xd9, 0x8d, 0x26, 0x0a, 0x74, 0xaa, 0xaa, 0x13, 0xfa, 0xe2, + 0x49, 0xa0, 0x06, 0xb1, 0xc3, 0x4f, 0x5b, 0xa0, 0xb8, 0x82, 0xf2, 0x63, + 0x78, 0x22, 0x2f, 0xb3, 0x6f, 0x22, 0x83, 0xc2, 0x43, 0xf0, 0xff, 0xeb, + 0x5f, 0x1b, 0xb4, 0x14, 0xa0, 0xa7, 0x0d, 0x55, 0xe3, 0xd4, 0x0a, 0x56, + 0xb6, 0xcb, 0xc8, 0x8a, 0xe1, 0xf0, 0x3b, 0x7b, 0x28, 0x82, 0xd9, 0x8d, + 0xee, 0xa2, 0x8e, 0x14, 0x5c, 0x9d, 0xed, 0xfd, 0x8e, 0xaf, 0x1c, 0xef, + 0x2e, 0xd9, 0x4a, 0x8b, 0x05, 0x0f, 0x89, 0x64, 0xf4, 0x6d, 0x1e, 0xa0, + 0xd0, 0xc2, 0xa4, 0x3e, 0x0d, 0xda, 0x61, 0x82, 0xad, 0xbf, 0x4f, 0x6e, + 0xd1, 0x75, 0xb6, 0x74, 0x22, 0x57, 0x85, 0x9b, 0xf2, 0x2f, 0x3a, 0x41, + 0x7e, 0xcf, 0x1f, 0x9d, 0x89, 0x31, 0x7b, 0x5e, 0x53, 0x9d, 0x58, 0x7a, + 0xf1, 0x6b, 0x9e, 0x13, 0x13, 0xe0, 0x45, 0x14, 0xff, 0xa6, 0x4b, 0xa8, + 0xb3, 0xff, 0x2b, 0x83, 0x21, 0xf8, 0x81, 0x1c, 0xb3, 0xfb, 0x02, 0x2c, + 0x8f, 0x64, 0x4e, 0x70, 0xa4, 0xb8, 0x0a, 0x2f, 0xbf, 0xee, 0x60, 0x4a, + 0xbb, 0x73, 0x79, 0x09, 0x1e, 0xa8, 0xe6, 0xc5, 0xc7, 0x4d, 0xfc, 0x02, + 0x83, 0x66, 0x6b, 0x40, 0xc0, 0x79, 0x38, 0x70, 0x02, 0x82, 0x04, 0xa1, + 0x36, 0xbf, 0x5d, 0xa9, 0x56, 0x8e, 0xb7, 0x98, 0xd3, 0x49, 0x03, 0x8b, + 0xdb, 0x0c, 0x11, 0xe0, 0x34, 0x45, 0xe7, 0x84, 0x7c, 0xb5, 0x06, 0x9c, + 0x75, 0xcf, 0x28, 0xac, 0x60, 0x1c, 0x77, 0x99, 0xd9, 0x58, 0x21, 0x0d, + 0xdb, 0xcb, 0x22, 0x6e, 0x51, 0xaf, 0xef, 0x9f, 0x1d, 0xe4, 0x7b, 0x07, + 0x38, 0x73, 0xd6, 0xd3, 0xf9, 0x74, 0x56, 0xbe, 0xde, 0x08, 0x50, 0x82, + 0xe7, 0x4a, 0x29, 0x8b, 0x2c, 0xd4, 0x8f, 0x4b, 0x30, 0x93, 0x15, 0x5f, + 0x36, 0x6c, 0x8f, 0xa6, 0x01, 0xc6, 0xaf, 0x85, 0x8d, 0xfa, 0x32, 0xc0, + 0x84, 0x91, 0xb2, 0xa2, 0x98, 0x87, 0xf9, 0x03, 0x35, 0x94, 0x9a, 0x5d, + 0x6e, 0xda, 0xa6, 0x79, 0x88, 0x2a, 0x3a, 0x95, 0xd6, 0xbf, 0x6d, 0x97, + 0x0a, 0x22, 0x1f, 0x4b, 0x9d, 0x3d, 0x8c, 0xbf, 0x38, 0x4a, 0xf8, 0x1a, + 0xac, 0x95, 0xe2, 0xb3, 0x29, 0x4e, 0x04, 0x78, 0x9a, 0xc8, 0x37, 0x27, + 0xa5, 0xdc, 0x04, 0x55, 0x9f, 0x96, 0xaf, 0x41, 0xd8, 0xa0, 0x53, 0x51, + 0x6f, 0xee, 0xee, 0xbc, 0x52, 0x74, 0x6e, 0xb6, 0xab, 0x28, 0x19, 0xe0, + 0x91, 0x08, 0x71, 0x0d, 0x83, 0x5f, 0x01, 0x1f, 0xa6, 0x30, 0x65, 0x87, + 0x2a, 0xd3, 0x34, 0xd5, 0xcd, 0xff, 0xb2, 0xb2, 0x31, 0x05, 0x07, 0xe9, + 0x2f, 0xc9, 0x93, 0xae, 0x31, 0x7d, 0xa9, 0x7f, 0x4f, 0x30, 0x9c, 0xda, + 0xf0, 0xf6, 0x7e, 0xd9, 0x9d, 0x90, 0x21, 0x55, 0x76, 0x08, 0x38, 0x49, + 0xf9, 0x53, 0xb2, 0x46, 0xd7, 0xfe, 0xdb, 0x3f, 0xdb, 0x67, 0x67, 0x98, + 0x50, 0xa5, 0xad, 0x40, 0x4e, 0x64, 0x14, 0x7f, 0xb7, 0xcf, 0x4f, 0x6a, + 0xed, 0xdd, 0x05, 0xaf, 0xb4, 0xb8, 0x34, 0x96, 0x8d, 0x1f, 0xe8, 0x80, + 0x14, 0x96, 0x0d, 0xce, 0x5d, 0x94, 0x22, 0x36, 0x52, 0x6e, 0x12, 0xa4, + 0x78, 0xd6, 0x9e, 0x5f, 0xbe, 0x69, 0x70, 0x31, 0x0b, 0x30, 0x8c, 0x06, + 0x84, 0x50, 0x18, 0xcf, 0xc7, 0xb2, 0xab, 0x43, 0x0a, 0x13, 0xa6, 0xb1, + 0xac, 0x7b, 0xb0, 0x2c, 0xcc, 0xbb, 0x3d, 0x91, 0x1a, 0xc2, 0xf1, 0x10, + 0x68, 0x61, 0x3f, 0xbe, 0x02, 0x9b, 0xfd, 0xce, 0x02, 0xcf, 0x5c, 0xd3, + 0x89, 0x50, 0xed, 0x72, 0xc8, 0x39, 0x44, 0xed, 0xfb, 0xc7, 0x56, 0x15, + 0xaf, 0x87, 0xf8, 0x64, 0xc0, 0x51, 0xf3, 0xc5, 0x54, 0x56, 0xc5, 0x41, + 0x28, 0x63, 0xa4, 0x0c, 0x06, 0xd1, 0xda, 0xb5, 0x62, 0xbd, 0xff, 0x05, + 0x71, 0xb8, 0xd3, 0xc3, 0x91, 0x7b, 0xbd, 0x30, 0x08, 0x80, 0xbb, 0xa5, + 0xe9, 0x98, 0x23, 0x9b, 0x95, 0xfa, 0x91, 0xb7, 0xd6, 0x41, 0x6d, 0x4f, + 0x39, 0x8b, 0x3a, 0xdb, 0xcd, 0x30, 0x98, 0x3e, 0xd3, 0x59, 0x2b, 0x4d, + 0x9e, 0xf7, 0xd4, 0x23, 0x6f, 0xd0, 0x0f, 0x50, 0xd9, 0x8a, 0xa5, 0x3a, + 0x23, 0x5a, 0xc4, 0x17, 0x27, 0x20, 0xf7, 0x7d, 0x96, 0x17, 0x26, 0x72, + 0x98, 0x0c, 0xfe, 0x8f, 0xf7, 0xa5, 0xa7, 0x02, 0x78, 0x3e, 0xdc, 0x2b, + 0xa3, 0x1b, 0x22, 0x59, 0x01, 0x5a, 0x11, 0x2f, 0xc7, 0xf4, 0x68, 0xa9, + 0xc2, 0xf9, 0x46, 0x40, 0x39, 0x00, 0x2d, 0x30, 0xef, 0x67, 0x8b, 0x4c, + 0xb7, 0x98, 0xbc, 0x11, 0x62, 0x16, 0xbf, 0x7a, 0x9a, 0x7c, 0x18, 0xba, + 0x03, 0xb7, 0xb5, 0x8f, 0xd0, 0x75, 0x15, 0xd3, 0x11, 0x50, 0x49, 0xd3, + 0x61, 0x4b, 0xe7, 0xa0, 0x7e, 0x74, 0x43, 0x00, 0x75, 0x0d, 0xf1, 0xd2, + 0xc5, 0x87, 0x53, 0x38, 0x90, 0x59, 0xea, 0xfc, 0x3d, 0x78, 0x5c, 0xcd, + 0xd3, 0x1c, 0x07, 0x64, 0x8b, 0xed, 0xc0, 0x3a, 0x5c, 0x3b, 0x8a, 0xd4, + 0x6d, 0x06, 0x4d, 0x59, 0xc1, 0x3d, 0x57, 0x37, 0x47, 0x29, 0xfc, 0x4e, + 0x29, 0x53, 0x62, 0xe2, 0xa5, 0x19, 0x12, 0x04, 0x53, 0x04, 0x28, 0xbc, + 0x15, 0x22, 0xaf, 0xa2, 0x8f, 0xf5, 0xfe, 0x16, 0x55, 0xe3, 0x04, 0xca, + 0x5b, 0xc8, 0xc2, 0x7a, 0xd0, 0xe0, 0xc6, 0xa3, 0x9d, 0xd4, 0xdf, 0x28, + 0x95, 0x6c, 0x14, 0xb3, 0x8c, 0xc9, 0x36, 0x82, 0xce, 0xfe, 0x40, 0x2b, + 0xbd, 0x5e, 0x82, 0xd2, 0x9c, 0x46, 0x4e, 0x44, 0xeb, 0x5d, 0x37, 0xb4, + 0x8f, 0xc5, 0x68, 0xdf, 0xe0, 0xcc, 0x6e, 0x8e, 0x16, 0xba, 0xea, 0x05, + 0xe5, 0x13, 0x55, 0x90, 0xf1, 0x92, 0x94, 0xe7, 0x3e, 0x83, 0x67, 0xb0, + 0x21, 0x6d, 0xbb, 0x81, 0x50, 0x30, 0xb9, 0xde, 0x55, 0x91, 0x3f, 0x08, + 0x03, 0x9c, 0x42, 0x35, 0x1c, 0x59, 0xe5, 0x51, 0x5d, 0xd5, 0xaf, 0x8e, + 0x08, 0x9a, 0x15, 0xe6, 0x25, 0xe8, 0xf6, 0xde, 0xe6, 0x39, 0x38, 0x6c, + 0x46, 0x49, 0x7d, 0x7a, 0x26, 0x32, 0x88, 0x77, 0x4d, 0xe5, 0x81, 0xa7, + 0xde, 0x96, 0x29, 0xb4, 0x1b, 0x44, 0x24, 0x14, 0x1f, 0x97, 0x8f, 0xb8, + 0x33, 0x12, 0x08, 0xef, 0xde, 0xc3, 0xc6, 0xe0, 0xde, 0x39, 0xbc, 0x57, + 0x06, 0x3f, 0x3d, 0xcd, 0x6c, 0x47, 0x03, 0x73, 0xc0, 0x88, 0x91, 0xea, + 0x29, 0xcb, 0xc7, 0xcc, 0x6d, 0x64, 0x83, 0xb8, 0x88, 0x90, 0x83, 0xac, + 0xe8, 0x6a, 0xa7, 0xb5, 0x1b, 0x1c, 0x2c, 0xfe, 0x6e, 0x2a, 0xd1, 0x8d, + 0x97, 0xce, 0x36, 0xfb, 0xc5, 0x6e, 0xa4, 0x2f, 0xae, 0x97, 0xe6, 0xa7, + 0xac, 0x11, 0x48, 0x64, 0x47, 0x8c, 0x36, 0x6d, 0xf1, 0xeb, 0xb1, 0xe7, + 0xb1, 0x1a, 0x90, 0x98, 0x50, 0x4f, 0xd5, 0x97, 0x5b, 0xdf, 0x1f, 0x49, + 0xdc, 0x70, 0x00, 0x2b, 0x63, 0xc1, 0x73, 0x9a, 0x9d, 0x26, 0x3f, 0xba, + 0xd4, 0x07, 0x3f, 0x6a, 0x9f, 0x6c, 0x2b, 0x8a, 0xf4, 0xb4, 0xc3, 0x32, + 0xa1, 0x03, 0xa0, 0xcf, 0xfa, 0x5d, 0xee, 0xb2, 0xd0, 0x62, 0xca, 0x3c, + 0x21, 0x5f, 0xd3, 0x60, 0x02, 0x6b, 0xe7, 0xc5, 0x16, 0x4f, 0x4a, 0x44, + 0x24, 0xef, 0x74, 0x94, 0x88, 0x04, 0xd6, 0x6f, 0x46, 0x48, 0x77, 0x32, + 0xc8, 0x20, 0x2c, 0x79, 0x54, 0x78, 0x64, 0x7b, 0x4e, 0xa7, 0x1d, 0x62, + 0x7c, 0x08, 0x60, 0x24, 0xcc, 0xa3, 0x54, 0xa4, 0x1f, 0x08, 0x77, 0xb3, + 0x8f, 0x19, 0xb3, 0x77, 0x4a, 0xd2, 0x09, 0x5c, 0x8d, 0xa5, 0x3b, 0x06, + 0x9e, 0x21, 0xc7, 0x6a, 0xe2, 0xd2, 0x00, 0x7e, 0x16, 0x71, 0x9e, 0xd4, + 0x00, 0x80, 0xd3, 0x34, 0xf7, 0xda, 0x52, 0xe9, 0xf5, 0xa5, 0x99, 0x04, + 0x39, 0xca, 0xf0, 0x83, 0xa9, 0x5b, 0x83, 0x3f, 0x02, 0xad, 0x10, 0xa0, + 0x8c, 0x1a, 0x6d, 0x0f, 0x26, 0x0c, 0x00, 0x72, 0x85, 0xbd, 0x4a, 0x2f, + 0x47, 0x70, 0x3a, 0x5a, 0xef, 0x46, 0x52, 0x87, 0xd2, 0x53, 0xb1, 0x8a, + 0xc2, 0x25, 0x14, 0x31, 0x62, 0x10, 0xff, 0x56, 0x68, 0x14, 0xb1, 0x0f, + 0x87, 0xa2, 0x93, 0xd6, 0xf1, 0x99, 0xd3, 0xc3, 0x95, 0x99, 0x90, 0xd0, + 0xc1, 0x26, 0x8b, 0x4f, 0x50, 0xd5, 0xf9, 0xfc, 0xef, 0xbb, 0xf2, 0x37, + 0xbd, 0x0c, 0x28, 0xb8, 0x01, 0x82, 0xd6, 0x65, 0x97, 0x41, 0xf1, 0x4f, + 0x10, 0xbf, 0xbb, 0x21, 0xbb, 0xa1, 0x2a, 0xb6, 0x20, 0xaa, 0x23, 0x96, + 0xf5, 0x6c, 0x06, 0x86, 0xb4, 0xea, 0x90, 0x17, 0x99, 0x02, 0x24, 0x21, + 0x6b, 0x2f, 0xe8, 0xad, 0x76, 0xc4, 0xa9, 0x14, 0x8e, 0xef, 0x9a, 0x86, + 0xa3, 0x63, 0x5a, 0x6a, 0xa7, 0x7b, 0xc1, 0xdc, 0xfb, 0x6f, 0xba, 0x59, + 0xa7, 0x7d, 0xfd, 0xa9, 0xb7, 0x53, 0x0d, 0xc0, 0xca, 0x86, 0x48, 0xc8, + 0xd9, 0x73, 0x73, 0x8e, 0x01, 0xba, 0xb8, 0xf0, 0x8b, 0x49, 0x05, 0xe8, + 0x4a, 0xa4, 0x64, 0x1b, 0xd6, 0x02, 0x41, 0x0c, 0xd9, 0x75, 0x20, 0x26, + 0x5f, 0x2f, 0x23, 0x1f, 0x2b, 0x35, 0xe1, 0x5e, 0xb2, 0xfa, 0x04, 0xd2, + 0xbd, 0x94, 0xd5, 0xa7, 0x7a, 0xba, 0xf1, 0xe0, 0xe1, 0x61, 0x01, 0x0a, + 0x99, 0x00, 0x87, 0xf5, 0xb4, 0x6e, 0xa9, 0x88, 0xb2, 0xbc, 0x05, 0x12, + 0xfd, 0xa0, 0xfa, 0x92, 0x3d, 0xad, 0xd6, 0xc4, 0x5c, 0x53, 0x01, 0xd0, + 0x94, 0x83, 0x67, 0x32, 0x65, 0xb5, 0xab, 0x2e, 0x10, 0xf4, 0xba, 0x52, + 0x0f, 0x6b, 0xba, 0xd5, 0x64, 0xa5, 0xc3, 0xd5, 0xe2, 0x7b, 0xdb, 0x08, + 0x0f, 0x7d, 0x20, 0xe1, 0x32, 0x96, 0xa3, 0x18, 0x19, 0x54, 0xc3, 0x9c, + 0x64, 0x9c, 0x94, 0x3e, 0xbe, 0x17, 0xdf, 0x5c, 0x1f, 0x7a, 0xae, 0x0a, + 0x8f, 0xe1, 0x26, 0xc4, 0x77, 0x58, 0x5a, 0x5d, 0x4d, 0x64, 0x8a, 0x0d, + 0x00, 0x8b, 0x6a, 0xf5, 0xe8, 0xcd, 0x31, 0xbe, 0x69, 0xa9, 0x29, 0x6d, + 0x4f, 0x3f, 0xd2, 0x5e, 0xd8, 0x6f, 0x22, 0x1e, 0x4b, 0x93, 0xf6, 0x5f, + 0x59, 0x29, 0x96, 0x75, 0x33, 0x62, 0x4b, 0x92, 0x35, 0x75, 0x0c, 0x30, + 0x70, 0x75, 0x50, 0xb5, 0x85, 0x36, 0xd1, 0x09, 0xa7, 0x13, 0x1c, 0x5a, + 0x5b, 0xbe, 0x4a, 0x57, 0x15, 0x56, 0x7c, 0x12, 0x53, 0x4a, 0xec, 0x76, + 0x60, 0x76, 0x1e, 0xeb, 0xb9, 0xfa, 0xe2, 0x89, 0x1c, 0x77, 0x45, 0x89, + 0xb8, 0x0e, 0x56, 0x6a, 0xd5, 0x57, 0xdd, 0xef, 0x73, 0x67, 0x19, 0x6b, + 0x72, 0x27, 0xea, 0x98, 0x70, 0xef, 0x09, 0xdd, 0xfe, 0xc7, 0x9d, 0x6b, + 0x93, 0x19, 0xa6, 0x87, 0x9b, 0x52, 0x05, 0xd7, 0x6b, 0xf7, 0xab, 0xa5, + 0xac, 0xf3, 0x3a, 0xfb, 0x59, 0xd1, 0x7f, 0xc5, 0x4e, 0x68, 0x38, 0x3d, + 0x6b, 0xe5, 0xa0, 0x8e, 0x9b, 0x66, 0xda, 0x53, 0xdc, 0xde, 0x00, 0x8b, + 0xb2, 0x94, 0xb8, 0x58, 0x2b, 0xd1, 0x32, 0xcd, 0xcc, 0x49, 0x95, 0x9f, + 0xdb, 0xc2, 0x1e, 0x52, 0x72, 0x18, 0x80, 0xc8, 0xad, 0x03, 0x52, 0xc7, + 0x9f, 0x03, 0xa4, 0x3b, 0xbd, 0x84, 0xc4, 0xcd, 0xfd, 0xc6, 0xc5, 0x29, + 0x00, 0x5e, 0x1e, 0x7c, 0xd9, 0xa3, 0x49, 0xa7, 0x16, 0x8a, 0x35, 0x56, + 0x9b, 0xa5, 0xde, 0xa8, 0x18, 0x96, 0x8d, 0x5a, 0x91, 0x46, 0x6b, 0xd6, + 0xe6, 0x4e, 0x20, 0xbf, 0x62, 0x41, 0x71, 0x98, 0xaf, 0xc4, 0xe8, 0x1c, + 0x28, 0xdd, 0x77, 0xed, 0x40, 0x28, 0x23, 0x23, 0x98, 0xb5, 0x2f, 0xbd, + 0xe8, 0x6b, 0xc8, 0x4f, 0x47, 0x5b, 0x90, 0x16, 0x71, 0x0c, 0xe2, 0xaa, + 0xbc, 0x11, 0xa0, 0x6b, 0x4d, 0xba, 0xc9, 0x01, 0xec, 0x16, 0xcf, 0x36, + 0x5c, 0xa3, 0xf2, 0xd5, 0x38, 0x13, 0x94, 0x8a, 0x69, 0x3a, 0x0f, 0x93, + 0xe7, 0x9c, 0x46, 0xca, 0x5d, 0x5a, 0x6d, 0xca, 0x3d, 0x28, 0xca, 0x50, + 0xad, 0x18, 0xbd, 0x13, 0xfc, 0xa5, 0x50, 0x59, 0xdd, 0x9b, 0x18, 0x5f, + 0x79, 0xf9, 0xc4, 0x71, 0x96, 0xa4, 0xe8, 0x1b, 0x21, 0x04, 0xbc, 0x46, + 0x0a, 0x05, 0x1e, 0x02, 0xf2, 0xe8, 0x44, 0x4f, +}; +static const unsigned char kat_mldsa65_sig[] = { + 0x06, 0x5d, 0xe7, 0x49, 0x22, 0x4c, 0x3e, 0x97, 0x5d, 0x8f, 0xff, 0x87, + 0x20, 0x72, 0x92, 0x21, 0xf5, 0x7d, 0x4d, 0x86, 0xe5, 0x27, 0x94, 0xff, + 0x1d, 0x8d, 0x42, 0x35, 0xd8, 0x8a, 0xd5, 0x05, 0x1b, 0xd7, 0x09, 0xb9, + 0x02, 0xa1, 0xde, 0x44, 0xa2, 0xb2, 0x84, 0x3f, 0x19, 0x25, 0x0e, 0xd9, + 0xd6, 0x93, 0x40, 0x3f, 0x7a, 0x5e, 0xab, 0x29, 0x84, 0x7b, 0x46, 0x0e, + 0x8d, 0xf7, 0x2d, 0x0d, 0x8a, 0x96, 0xe1, 0xec, 0xac, 0x01, 0x7a, 0xf6, + 0x3c, 0x46, 0x8d, 0x83, 0x5f, 0x27, 0x8d, 0x6f, 0x94, 0x04, 0x04, 0x48, + 0xa3, 0xb0, 0x94, 0x5e, 0x95, 0x27, 0xe3, 0xcb, 0x7f, 0x2d, 0xfe, 0x97, + 0x5d, 0xf5, 0x08, 0xef, 0xeb, 0xf9, 0xbc, 0xc4, 0x3e, 0x5c, 0x7d, 0x4e, + 0x46, 0xfb, 0x4f, 0x84, 0x28, 0xb3, 0xa2, 0x23, 0x17, 0xf6, 0x1f, 0x7e, + 0x76, 0xe4, 0x0f, 0xcc, 0x44, 0x0e, 0x17, 0xd6, 0x13, 0x47, 0xda, 0xc3, + 0x42, 0x43, 0xa9, 0x66, 0xad, 0x3b, 0x55, 0x9d, 0xdc, 0x24, 0x90, 0x41, + 0x33, 0x9f, 0xe4, 0xd2, 0x3e, 0x8c, 0x69, 0x81, 0xa1, 0xef, 0xb2, 0x37, + 0xc7, 0x94, 0x3d, 0x80, 0x64, 0xa8, 0x2a, 0xb0, 0xaa, 0xe0, 0xfb, 0x18, + 0x32, 0x69, 0x4c, 0xdc, 0x36, 0xfd, 0x59, 0xf4, 0x1d, 0x03, 0x89, 0x1c, + 0xf4, 0xd9, 0xf0, 0xcc, 0x1f, 0xb3, 0x48, 0x96, 0xca, 0x84, 0xe6, 0x0a, + 0xf3, 0x38, 0x73, 0xec, 0xc4, 0xcd, 0xc7, 0x91, 0x84, 0xe2, 0x54, 0xfb, + 0x97, 0xab, 0xac, 0xc8, 0xdd, 0xe6, 0x78, 0xa5, 0x27, 0x5c, 0xa9, 0x9e, + 0x25, 0xc8, 0xda, 0x18, 0xa7, 0xf9, 0x0d, 0x7b, 0xa9, 0xad, 0xce, 0xc7, + 0x6b, 0xb8, 0xc4, 0x99, 0xd5, 0xbd, 0x63, 0x89, 0x6e, 0x67, 0x18, 0x80, + 0x05, 0xd0, 0x42, 0x4c, 0x94, 0x5d, 0x2a, 0x91, 0x10, 0x43, 0x6b, 0x32, + 0xdf, 0xa3, 0x14, 0xbd, 0xc3, 0x0c, 0xb6, 0xc0, 0x44, 0x75, 0xb1, 0xd3, + 0x20, 0x89, 0xb6, 0xa6, 0x70, 0xe5, 0xec, 0x45, 0xed, 0xf2, 0x54, 0x7f, + 0x7b, 0x0c, 0x82, 0x6a, 0x21, 0x3f, 0xc0, 0x23, 0xeb, 0xec, 0x19, 0x97, + 0xe1, 0x79, 0x0c, 0xcd, 0xa0, 0x2f, 0xcd, 0x00, 0xb1, 0xe9, 0xa3, 0xd6, + 0x00, 0x28, 0x86, 0x7d, 0x75, 0x8f, 0x80, 0x49, 0x14, 0x77, 0x64, 0xff, + 0x59, 0xfb, 0x13, 0xe2, 0x70, 0xb2, 0x41, 0x99, 0x82, 0x88, 0x3e, 0x86, + 0xc9, 0x94, 0xe0, 0x92, 0x72, 0x5e, 0xb5, 0x3b, 0xd5, 0xbd, 0xb8, 0x33, + 0xa5, 0x49, 0x11, 0x43, 0xc9, 0xd5, 0x12, 0xe8, 0x4e, 0x23, 0x20, 0x84, + 0x09, 0x69, 0xcb, 0x6a, 0xd1, 0x25, 0xc2, 0x4b, 0xd1, 0xe1, 0xbb, 0x65, + 0xdc, 0x50, 0x0c, 0xff, 0xf7, 0xda, 0xfd, 0x61, 0x76, 0x4d, 0xd6, 0x1a, + 0x07, 0x70, 0x65, 0x16, 0x04, 0x88, 0x66, 0x55, 0xef, 0x9c, 0x7f, 0x4d, + 0x0a, 0xd0, 0x08, 0xc6, 0x0f, 0xeb, 0xc9, 0xa7, 0xd4, 0x74, 0xf4, 0xb4, + 0x6c, 0x8c, 0xb7, 0xef, 0x4b, 0x13, 0x93, 0x43, 0x85, 0x15, 0x0e, 0x9d, + 0xca, 0x76, 0x7d, 0x0f, 0x24, 0x87, 0x62, 0x1c, 0x3f, 0xc1, 0xaf, 0x9d, + 0x7e, 0x75, 0xd8, 0xda, 0xa4, 0x9f, 0x52, 0xb6, 0x08, 0xbb, 0xf2, 0xaf, + 0xbd, 0x3a, 0xcd, 0xaa, 0xf3, 0xd7, 0x09, 0xa0, 0xbd, 0xf0, 0x78, 0x81, + 0x4f, 0x19, 0x64, 0x39, 0x9f, 0x08, 0x79, 0x75, 0x58, 0x91, 0xd8, 0x44, + 0xa3, 0xc0, 0xbd, 0xa4, 0x86, 0x8a, 0xb5, 0xba, 0xb7, 0xb9, 0x0b, 0x79, + 0xbb, 0x6a, 0xce, 0x6d, 0xa9, 0x82, 0x78, 0x3d, 0x3b, 0xff, 0x87, 0xa9, + 0xd7, 0x84, 0x0c, 0xbc, 0x07, 0x6e, 0x8a, 0x25, 0x56, 0xe9, 0xce, 0xb4, + 0x0d, 0x48, 0x56, 0xad, 0x86, 0x72, 0xc6, 0xa0, 0x19, 0x46, 0x38, 0x11, + 0x3e, 0x0b, 0xec, 0xeb, 0x1f, 0xed, 0x49, 0xe4, 0x55, 0xaf, 0xe3, 0x21, + 0x65, 0xf6, 0xa1, 0xd3, 0xe2, 0xf7, 0x40, 0xf9, 0xa4, 0x21, 0x2e, 0xd8, + 0x1c, 0x08, 0xa4, 0x76, 0x3c, 0x71, 0xe5, 0x11, 0x4d, 0x31, 0x28, 0x8c, + 0x80, 0xa9, 0x90, 0x6f, 0xe5, 0x36, 0x58, 0x7d, 0x59, 0x4e, 0xef, 0xb4, + 0x87, 0xa0, 0x1b, 0x79, 0x17, 0x07, 0xbe, 0xbc, 0x1a, 0x90, 0x1e, 0xe6, + 0x45, 0xba, 0x89, 0x93, 0x41, 0x99, 0xa3, 0x3b, 0x53, 0x48, 0x2d, 0xda, + 0xf6, 0xf1, 0x41, 0xc1, 0x76, 0x2c, 0xa8, 0xb9, 0x91, 0xf5, 0xe4, 0x43, + 0x7c, 0x19, 0x83, 0xd2, 0xbd, 0x4a, 0x68, 0x81, 0x5f, 0xb5, 0xfd, 0x67, + 0x75, 0x0d, 0x73, 0x06, 0x2d, 0x9f, 0xcb, 0x08, 0x5f, 0x1b, 0xc7, 0x72, + 0x81, 0x32, 0x4c, 0xc0, 0x4a, 0x49, 0x7a, 0xea, 0xbe, 0x7f, 0x88, 0x95, + 0x33, 0xc8, 0xc5, 0xe3, 0x21, 0x68, 0x45, 0xe6, 0xa8, 0xe8, 0xc2, 0xcb, + 0x96, 0x79, 0x50, 0xdb, 0xea, 0xd0, 0xe3, 0x5f, 0xc8, 0x58, 0xff, 0xa6, + 0x7b, 0x7e, 0x35, 0x79, 0x4f, 0x84, 0x47, 0xde, 0xc6, 0x1c, 0xb2, 0x9d, + 0xe0, 0xf9, 0xaf, 0xaa, 0x8b, 0x09, 0x10, 0xbb, 0x3a, 0xb6, 0x00, 0x8d, + 0xe6, 0x8c, 0x2c, 0x9c, 0x48, 0x66, 0x72, 0x38, 0x0e, 0x88, 0xae, 0x1a, + 0xf1, 0x40, 0x76, 0xc7, 0xa7, 0xaf, 0x07, 0xe3, 0x2c, 0x80, 0x3b, 0x26, + 0x82, 0x4b, 0x45, 0x8f, 0x79, 0xbb, 0x61, 0x4c, 0x24, 0xb3, 0xef, 0x19, + 0x1e, 0x0e, 0x29, 0xec, 0x4f, 0x44, 0x71, 0xd2, 0x89, 0xcc, 0x67, 0x86, + 0x83, 0x54, 0x20, 0xa7, 0xe6, 0xf5, 0xe8, 0x56, 0x2c, 0x0e, 0xa7, 0x2a, + 0xa1, 0xda, 0x6b, 0x9b, 0xa0, 0x33, 0x35, 0xa8, 0x81, 0xc1, 0x38, 0xa2, + 0x43, 0xe6, 0x5a, 0x85, 0xca, 0xfe, 0x8b, 0x65, 0x60, 0x2e, 0x1c, 0x56, + 0x83, 0x41, 0x23, 0xf5, 0x4d, 0x81, 0xb2, 0xab, 0xec, 0xb2, 0xd8, 0x90, + 0xa9, 0x6f, 0xbb, 0xd3, 0xd6, 0x7b, 0xe1, 0xc4, 0xfb, 0x0c, 0x1d, 0x99, + 0x3c, 0xf4, 0x05, 0xbc, 0xf5, 0xdf, 0xd9, 0x01, 0xfb, 0xb8, 0x08, 0x4e, + 0x3f, 0x8f, 0x29, 0xad, 0xdd, 0xdb, 0xd5, 0xcf, 0x9a, 0x3a, 0x93, 0xac, + 0x47, 0x9f, 0xd7, 0x8a, 0x35, 0x95, 0x5a, 0x97, 0x1d, 0x37, 0xfd, 0xc4, + 0xe5, 0xb8, 0x97, 0x8d, 0x5a, 0xc0, 0x33, 0xa0, 0xb9, 0xcb, 0x87, 0x45, + 0x2e, 0x64, 0x03, 0xc1, 0x60, 0xfb, 0xa8, 0x42, 0x00, 0x78, 0xa4, 0x57, + 0x0a, 0x32, 0x7f, 0x70, 0x1e, 0xc8, 0x73, 0x0c, 0xb5, 0xf3, 0x68, 0x3b, + 0xc2, 0x0a, 0xe3, 0x97, 0x23, 0xfd, 0xad, 0x9e, 0x8e, 0xa5, 0x80, 0x31, + 0xf2, 0xd1, 0xa5, 0xff, 0xe6, 0x41, 0x35, 0x05, 0xd2, 0x9d, 0x2c, 0x33, + 0x6b, 0x3f, 0xe3, 0xd1, 0x01, 0x0f, 0x65, 0xf8, 0xab, 0x56, 0x74, 0x0d, + 0xa4, 0xd4, 0x02, 0x36, 0x4e, 0x46, 0x7a, 0x9f, 0xf9, 0x40, 0x2c, 0x1b, + 0xd5, 0x1c, 0x9b, 0x6b, 0x57, 0xa6, 0xc5, 0x08, 0xab, 0x98, 0xc8, 0xe3, + 0x85, 0x1f, 0x27, 0x38, 0x19, 0x6f, 0xd4, 0x3b, 0xb7, 0xc5, 0x08, 0xb5, + 0xa2, 0xf6, 0xc6, 0x96, 0xe7, 0xfa, 0x38, 0xb5, 0x6d, 0xc6, 0xb5, 0x61, + 0xbe, 0x93, 0xa8, 0xe6, 0xd1, 0xa2, 0x23, 0x98, 0xf1, 0x3f, 0x7e, 0x57, + 0x4c, 0xbc, 0x18, 0x0f, 0xc1, 0x9e, 0x33, 0x36, 0x26, 0xa0, 0xca, 0x6e, + 0xec, 0x6f, 0x34, 0x41, 0x74, 0x07, 0x0b, 0xa8, 0xd8, 0x88, 0x26, 0x9f, + 0x84, 0x49, 0xe9, 0x71, 0x95, 0x1f, 0x55, 0x41, 0xaf, 0x59, 0x80, 0x71, + 0x73, 0xbd, 0x1b, 0x9c, 0xd0, 0xb4, 0xc9, 0x8c, 0x53, 0x6e, 0xb3, 0x35, + 0xe8, 0x6e, 0xfa, 0x82, 0x3e, 0x02, 0xa8, 0x55, 0xeb, 0x92, 0x59, 0xa3, + 0x3d, 0xa7, 0xa2, 0x44, 0x2a, 0x80, 0xbe, 0xa3, 0x85, 0x48, 0x42, 0x02, + 0x88, 0x25, 0xf5, 0x92, 0xa2, 0xb5, 0xc4, 0xf3, 0xbe, 0x2e, 0x87, 0x96, + 0x4d, 0xc7, 0x96, 0x80, 0x94, 0x00, 0xed, 0xf0, 0x1e, 0x55, 0x96, 0xb0, + 0x50, 0x1c, 0xd7, 0xc5, 0x4c, 0x8c, 0x2f, 0x2d, 0x47, 0x05, 0xaa, 0x53, + 0x50, 0xe5, 0xc3, 0xe6, 0x0a, 0xd1, 0xfc, 0x82, 0xfe, 0xf5, 0x92, 0xb8, + 0xf0, 0x3c, 0xab, 0x44, 0xc6, 0x47, 0x85, 0xd5, 0x8e, 0x41, 0x29, 0x2b, + 0x5e, 0x93, 0xef, 0x64, 0xf5, 0x46, 0xd4, 0x23, 0xe6, 0xd3, 0xcf, 0xe5, + 0x15, 0x84, 0x09, 0xbe, 0x1a, 0x09, 0xba, 0x89, 0xb2, 0x5d, 0xe7, 0xd6, + 0x06, 0xc9, 0xae, 0x87, 0x05, 0xf2, 0xb3, 0x81, 0x03, 0x7c, 0x80, 0xfc, + 0xdc, 0x02, 0x54, 0xff, 0x34, 0x54, 0x6f, 0x6d, 0x43, 0x02, 0x06, 0x28, + 0xec, 0x6a, 0xcf, 0x25, 0x02, 0x36, 0x7e, 0xd1, 0x2d, 0xb4, 0x16, 0xa8, + 0xef, 0xe8, 0xfe, 0x9d, 0x5a, 0x5d, 0xb1, 0x4e, 0xb2, 0xf0, 0x5b, 0x42, + 0xa0, 0x48, 0x06, 0xe5, 0x99, 0x19, 0xf1, 0xe9, 0xf6, 0x0c, 0xb5, 0xd2, + 0x80, 0xce, 0xad, 0x1c, 0xc7, 0x00, 0xfd, 0xb9, 0x91, 0x5d, 0x4a, 0x7e, + 0x69, 0x5c, 0x21, 0x37, 0x85, 0x3b, 0xaf, 0xe4, 0x04, 0x3a, 0xdf, 0xab, + 0x6d, 0x65, 0x00, 0x2d, 0x96, 0x8a, 0x71, 0x75, 0x17, 0x1b, 0x0c, 0x18, + 0x6e, 0xc3, 0xe5, 0xb0, 0xcd, 0xbb, 0x9e, 0x5e, 0xd1, 0xe9, 0xc6, 0xaa, + 0x94, 0xfd, 0xc0, 0x4f, 0xe3, 0xb2, 0xff, 0x83, 0xee, 0xd0, 0x22, 0xd9, + 0xa5, 0xb5, 0x85, 0x91, 0x24, 0xa0, 0xc2, 0xa2, 0xae, 0x41, 0x4c, 0x0a, + 0x8e, 0xfb, 0xfd, 0x50, 0x63, 0x0e, 0x43, 0xc0, 0x65, 0xa4, 0x3b, 0x55, + 0x0f, 0x7e, 0xc0, 0x33, 0x59, 0xbb, 0xa0, 0x74, 0xf3, 0xdf, 0x6c, 0x3c, + 0x1b, 0x85, 0x7d, 0xa1, 0xcd, 0x35, 0xad, 0x97, 0xf8, 0xa4, 0x93, 0xdd, + 0x06, 0xba, 0x3a, 0xea, 0x6b, 0xfe, 0xa3, 0x62, 0xe0, 0x9b, 0x21, 0xd0, + 0x92, 0x59, 0x5e, 0x6e, 0xe3, 0x25, 0x22, 0x0d, 0xac, 0x8e, 0x60, 0xed, + 0x5b, 0xa5, 0x07, 0xfd, 0x50, 0xac, 0x37, 0x9c, 0x93, 0x8d, 0xc1, 0xec, + 0xa1, 0xd5, 0x20, 0xd1, 0x03, 0x98, 0x63, 0xc3, 0x4a, 0xda, 0xe7, 0xb7, + 0xf8, 0xd9, 0x70, 0x23, 0xdf, 0xc2, 0xb8, 0x75, 0x7c, 0x83, 0xf8, 0x01, + 0xe4, 0x96, 0xaa, 0x2d, 0x53, 0xbb, 0xcd, 0x31, 0x1a, 0xe4, 0x14, 0x9f, + 0xbc, 0x5d, 0x68, 0xc1, 0x7a, 0xbd, 0x57, 0xe6, 0x7d, 0x06, 0x7a, 0x32, + 0xf9, 0xd5, 0xa7, 0x96, 0xb5, 0x81, 0x24, 0xb0, 0x77, 0x15, 0x23, 0x88, + 0x13, 0x35, 0xf1, 0x09, 0xf7, 0x82, 0xdf, 0xcc, 0xab, 0xf4, 0xbe, 0x5c, + 0x73, 0x5f, 0xce, 0xdb, 0x3f, 0xf5, 0x77, 0xa2, 0xfc, 0xb7, 0xf7, 0xa6, + 0xb2, 0x7b, 0xd9, 0x6a, 0x2d, 0xb0, 0xb7, 0xf7, 0xc7, 0x18, 0xa5, 0x9d, + 0xed, 0x5d, 0x4e, 0xb3, 0xbb, 0xcd, 0x8a, 0xcb, 0xf2, 0xbd, 0xd2, 0x51, + 0xa0, 0x21, 0xff, 0xe2, 0x68, 0xff, 0xdb, 0x22, 0xf6, 0x06, 0xfc, 0xd1, + 0x2a, 0x59, 0x59, 0xec, 0xb9, 0xf0, 0xb1, 0xd7, 0x61, 0x95, 0xb1, 0xae, + 0x95, 0xdf, 0xd7, 0xcb, 0xa8, 0x28, 0x76, 0x1b, 0x86, 0xf6, 0xe0, 0xfd, + 0x42, 0xa7, 0x83, 0x3f, 0xed, 0x0d, 0x5d, 0xe2, 0xe3, 0x12, 0x37, 0xf3, + 0xa9, 0xc2, 0xc1, 0x7e, 0x7a, 0x5e, 0xf4, 0x38, 0xa1, 0x12, 0xeb, 0x5a, + 0x96, 0x8e, 0xf1, 0x47, 0xa9, 0xf9, 0x8d, 0xa2, 0xe1, 0x26, 0x11, 0x2a, + 0x34, 0xca, 0x93, 0xe2, 0x7c, 0xec, 0x4f, 0xe1, 0xfd, 0x43, 0x09, 0xb6, + 0x57, 0x0f, 0x20, 0xd8, 0x41, 0x1e, 0x68, 0x7a, 0x0f, 0x27, 0x74, 0x0c, + 0x7a, 0xc7, 0x12, 0xf3, 0xff, 0xf2, 0xae, 0xdf, 0x5b, 0x2b, 0x26, 0x4f, + 0x6c, 0x51, 0xeb, 0xf6, 0x42, 0x4f, 0x80, 0x91, 0x93, 0x80, 0xce, 0x92, + 0x75, 0xbb, 0x7c, 0x20, 0xbd, 0xe9, 0x84, 0x7d, 0xf2, 0x40, 0x59, 0x77, + 0x9e, 0x22, 0xe9, 0xcc, 0xcb, 0xdc, 0x83, 0x59, 0xfa, 0x3d, 0x6f, 0xdb, + 0xab, 0xe9, 0x41, 0x07, 0xcb, 0x2e, 0x7a, 0x29, 0x80, 0x4f, 0x23, 0xbf, + 0x57, 0x6c, 0xf3, 0x9f, 0x16, 0x68, 0x80, 0x74, 0x0c, 0x4e, 0x10, 0xc2, + 0x04, 0x18, 0xac, 0xa6, 0x60, 0xc5, 0x13, 0x4c, 0x8e, 0x4c, 0x39, 0xb7, + 0xc9, 0xe9, 0x7a, 0xf0, 0x27, 0xc3, 0x76, 0x5b, 0x63, 0xe7, 0x53, 0x93, + 0x5a, 0x60, 0x1c, 0x97, 0x9e, 0xa3, 0x57, 0x19, 0x6d, 0xe9, 0xa2, 0x3e, + 0x06, 0xd4, 0x7f, 0x92, 0xd9, 0xba, 0x24, 0x96, 0xdc, 0x6e, 0xc9, 0x00, + 0x59, 0x63, 0xec, 0x74, 0x4d, 0x06, 0x01, 0x7d, 0x32, 0x52, 0xeb, 0x97, + 0x0f, 0xab, 0xb0, 0x41, 0xf8, 0x78, 0x96, 0x5d, 0xae, 0xa1, 0x5d, 0xfe, + 0x6b, 0xd5, 0xe4, 0x16, 0x63, 0xf6, 0x84, 0xce, 0x01, 0x05, 0xb1, 0x6f, + 0xe4, 0x4a, 0x9f, 0x20, 0x55, 0x07, 0x29, 0x15, 0x1a, 0x17, 0xfa, 0xca, + 0xcf, 0x90, 0x1f, 0xda, 0xa6, 0xcc, 0xa3, 0xc7, 0x8d, 0x14, 0x67, 0x3f, + 0xb1, 0x8e, 0xf7, 0x03, 0x21, 0xe8, 0xc0, 0xad, 0xbf, 0x9c, 0xbe, 0x20, + 0x2c, 0xe0, 0xd0, 0x99, 0xfb, 0xbd, 0x55, 0xec, 0x70, 0x36, 0x6c, 0x4d, + 0xb1, 0xb4, 0x13, 0xa0, 0x10, 0xbc, 0x39, 0x63, 0xec, 0x51, 0x28, 0xad, + 0xe1, 0xc0, 0xce, 0x0f, 0x79, 0xac, 0x3e, 0x00, 0xbd, 0xae, 0xf5, 0x84, + 0xa3, 0x6d, 0x09, 0x78, 0x1b, 0x46, 0xa1, 0x81, 0x37, 0x21, 0x8a, 0xc8, + 0xec, 0x21, 0xa1, 0x1e, 0xa4, 0x13, 0x2e, 0x8d, 0x3d, 0x80, 0xb4, 0xc6, + 0xb9, 0x9e, 0xd3, 0xa1, 0x17, 0x6e, 0xa4, 0x21, 0xea, 0xa3, 0x32, 0x13, + 0xb9, 0x53, 0xf1, 0x8c, 0x0f, 0x95, 0xba, 0x85, 0x8d, 0xa0, 0xd8, 0xde, + 0xb2, 0x54, 0xd0, 0x94, 0x9a, 0xdf, 0x50, 0x6b, 0x9e, 0xd4, 0xc7, 0x64, + 0x78, 0x2d, 0x3d, 0xfa, 0x99, 0x86, 0x0e, 0x5c, 0xb2, 0x21, 0xa8, 0xfb, + 0x99, 0x34, 0xea, 0x45, 0x0c, 0x9c, 0x1a, 0x01, 0xaf, 0xdc, 0x07, 0x9b, + 0x60, 0xb2, 0x79, 0x41, 0xc9, 0x72, 0x3c, 0xff, 0x80, 0x4f, 0x98, 0x9f, + 0x86, 0x16, 0x6d, 0xb2, 0x0f, 0x57, 0x0c, 0xb9, 0x85, 0x33, 0x21, 0xcc, + 0xff, 0x8a, 0xb2, 0x7f, 0xd0, 0x52, 0xa0, 0xc8, 0xbc, 0x1c, 0xc8, 0x48, + 0x0d, 0x5e, 0x49, 0x74, 0x80, 0x4a, 0x73, 0x08, 0xdd, 0x82, 0xa7, 0xe2, + 0xa1, 0x8b, 0x42, 0x77, 0xb7, 0xc1, 0xf6, 0xaa, 0x80, 0x7a, 0x5d, 0x34, + 0x02, 0x84, 0x8d, 0x50, 0x19, 0xd4, 0x69, 0xe7, 0x5d, 0x6f, 0x51, 0x94, + 0x51, 0x82, 0x33, 0xdb, 0xc0, 0x83, 0x5b, 0xf6, 0x15, 0x80, 0x00, 0x56, + 0x3e, 0x29, 0xc7, 0xc5, 0x4a, 0x91, 0xf3, 0x5f, 0xaf, 0xad, 0xd6, 0xe1, + 0xb3, 0x8b, 0x69, 0xbb, 0x7f, 0xfd, 0xa5, 0xef, 0xfa, 0xec, 0x1a, 0x6e, + 0x3c, 0x02, 0x7c, 0xfc, 0xb2, 0x03, 0x36, 0x69, 0x1a, 0x9d, 0xf7, 0xff, + 0xfc, 0x3b, 0xd8, 0x27, 0xad, 0x18, 0x6b, 0x22, 0xa7, 0x7d, 0xe5, 0x49, + 0xa9, 0x1d, 0xe3, 0xc0, 0x0c, 0xed, 0xdf, 0x9b, 0xb2, 0xf5, 0x2e, 0xea, + 0xc7, 0x77, 0xf0, 0x34, 0x5b, 0x51, 0xc2, 0x7d, 0x89, 0x31, 0x00, 0x85, + 0x15, 0x5f, 0x5a, 0x3c, 0x9b, 0xa1, 0xc7, 0xdd, 0xd5, 0xeb, 0x53, 0x35, + 0x9e, 0x8f, 0x9c, 0xd2, 0xd0, 0xac, 0x98, 0x63, 0x2c, 0xae, 0x96, 0xc7, + 0xbd, 0x7d, 0x07, 0x86, 0x51, 0x9b, 0xaf, 0x79, 0xe3, 0x50, 0x99, 0x94, + 0x0a, 0x2b, 0xed, 0xb4, 0xcd, 0x7c, 0x1a, 0xc5, 0xa2, 0x2a, 0xd7, 0x72, + 0xe7, 0x74, 0x84, 0x51, 0x3e, 0x8e, 0xaf, 0x50, 0xd5, 0xbf, 0x64, 0x60, + 0x88, 0x41, 0xca, 0x18, 0x96, 0x2f, 0xa7, 0xda, 0xc0, 0x02, 0x63, 0xcf, + 0xfe, 0x5e, 0x36, 0x4a, 0xa9, 0x20, 0x8d, 0x58, 0x25, 0x3a, 0x1c, 0x3e, + 0x1d, 0x5a, 0x58, 0x68, 0x18, 0x63, 0x32, 0x83, 0x40, 0xe3, 0x59, 0xc4, + 0xa9, 0xe0, 0xf5, 0xf8, 0x38, 0x4d, 0x2b, 0x9c, 0x44, 0x41, 0x5b, 0xbe, + 0x7e, 0xaa, 0xb7, 0x05, 0xe0, 0xa2, 0xab, 0xf7, 0x06, 0x1a, 0x1d, 0x37, + 0x21, 0x4e, 0x2b, 0xa3, 0xbd, 0xe0, 0x2d, 0x73, 0x63, 0x57, 0x26, 0x65, + 0x23, 0x81, 0x85, 0x42, 0xf3, 0x57, 0x77, 0xf5, 0x97, 0x17, 0xba, 0x57, + 0x4a, 0xf0, 0x95, 0xc4, 0x6f, 0x55, 0xd9, 0x28, 0x42, 0x20, 0x45, 0xba, + 0x84, 0x0a, 0x14, 0xd0, 0x9c, 0xd5, 0x29, 0x8f, 0x06, 0x2c, 0x3c, 0xf5, + 0x8b, 0xc4, 0x68, 0x8c, 0x42, 0xaa, 0x22, 0xae, 0x11, 0x41, 0xfd, 0x34, + 0x73, 0xb8, 0x5b, 0x3c, 0x19, 0x98, 0x65, 0xe0, 0xee, 0xef, 0x50, 0x78, + 0x42, 0xa4, 0x7d, 0xcf, 0x2b, 0xcd, 0x81, 0xa2, 0x5c, 0xd7, 0xbd, 0xd1, + 0x6b, 0xcd, 0x52, 0xac, 0xd5, 0xa1, 0x67, 0x79, 0xe9, 0x9d, 0x0a, 0x43, + 0xdf, 0x03, 0x93, 0x42, 0xb5, 0x05, 0x85, 0x4c, 0x44, 0x0d, 0xaa, 0xcc, + 0x79, 0xab, 0x67, 0x58, 0x54, 0x0c, 0x68, 0x6d, 0xaf, 0x89, 0xd0, 0xa7, + 0x14, 0xf1, 0xee, 0xbc, 0x69, 0xdd, 0xca, 0x0f, 0x2c, 0x72, 0xf9, 0x36, + 0x7a, 0xf9, 0x40, 0xaf, 0xc3, 0xeb, 0xb9, 0xdf, 0x77, 0x3c, 0x06, 0x0c, + 0xc3, 0x16, 0xaf, 0xee, 0x9d, 0x44, 0x0b, 0x57, 0xec, 0xc6, 0xd9, 0x8e, + 0xc4, 0x32, 0x39, 0x3b, 0xc9, 0x17, 0x87, 0xda, 0x5a, 0xe7, 0xcf, 0x35, + 0x5a, 0xe3, 0x71, 0xa0, 0x3c, 0x8a, 0xfb, 0x10, 0x46, 0x89, 0xef, 0x56, + 0xfb, 0x95, 0x4d, 0x4a, 0xe7, 0xb4, 0xe9, 0xb3, 0xed, 0x5c, 0x55, 0x41, + 0x3e, 0x2b, 0xae, 0x53, 0x4d, 0xe6, 0xf4, 0x17, 0xa1, 0xc7, 0x3e, 0x05, + 0xcb, 0x23, 0x44, 0xb2, 0xb8, 0x93, 0xcb, 0x92, 0x58, 0x10, 0x69, 0x93, + 0xd4, 0x4f, 0xf1, 0xc6, 0x05, 0x6e, 0xf1, 0xb4, 0x13, 0x5a, 0x2b, 0xdc, + 0x11, 0xb2, 0x8e, 0xc3, 0xc2, 0xaf, 0x07, 0xf5, 0x28, 0x9f, 0x1e, 0xc5, + 0xb4, 0x2b, 0x4d, 0x35, 0x20, 0x7d, 0xca, 0x9b, 0xb0, 0xb3, 0x78, 0x47, + 0x40, 0xa8, 0xee, 0x39, 0xb4, 0xb2, 0x2a, 0xc3, 0x70, 0x83, 0x89, 0x3f, + 0x0a, 0x9b, 0x1a, 0x0d, 0x54, 0x4c, 0xff, 0x80, 0x13, 0x25, 0x62, 0xd1, + 0x49, 0x1a, 0xc3, 0xe8, 0x0f, 0x11, 0x70, 0x49, 0xe6, 0x7a, 0x33, 0xd7, + 0xb6, 0x4d, 0x20, 0x7c, 0xaa, 0xe2, 0xe5, 0xc3, 0xa4, 0xe9, 0xc2, 0x61, + 0x73, 0x34, 0xe0, 0x54, 0xb9, 0xeb, 0xff, 0x72, 0x78, 0xcd, 0x09, 0x3f, + 0xcc, 0x77, 0xf0, 0x02, 0xcc, 0x3b, 0xed, 0x44, 0xcd, 0xef, 0xcc, 0x3c, + 0xd9, 0x72, 0xf4, 0xcb, 0x53, 0x8c, 0xdf, 0x01, 0x89, 0xd8, 0x69, 0x5b, + 0x09, 0xc4, 0x07, 0x3c, 0x04, 0xd7, 0x98, 0xd5, 0xcc, 0x8a, 0x48, 0xea, + 0x35, 0xd9, 0x00, 0x35, 0x88, 0xcb, 0x28, 0x80, 0x0d, 0xc0, 0x74, 0x44, + 0x26, 0xb8, 0xa1, 0xb2, 0xe8, 0xf8, 0xfa, 0xca, 0x39, 0x8b, 0x57, 0x50, + 0x4a, 0x02, 0x90, 0xec, 0x4a, 0x17, 0xc1, 0xde, 0x7d, 0x35, 0x12, 0x16, + 0x06, 0xdb, 0xdf, 0x38, 0xa9, 0xc6, 0x8c, 0x75, 0xea, 0x1b, 0xe9, 0x2d, + 0xee, 0x24, 0xc1, 0xe8, 0x8b, 0x1e, 0x4a, 0x0f, 0x7e, 0xcb, 0xa1, 0x48, + 0xaa, 0x20, 0xfc, 0x12, 0x42, 0x57, 0xd8, 0x0d, 0xc8, 0x42, 0xad, 0xc9, + 0xc3, 0xe0, 0x94, 0x90, 0xac, 0x04, 0x1a, 0xad, 0x29, 0x17, 0xcd, 0xbd, + 0x33, 0x55, 0x68, 0xcc, 0x86, 0xe2, 0x74, 0x55, 0x7e, 0x42, 0xec, 0x61, + 0xbe, 0x0e, 0x33, 0x0e, 0x0d, 0x20, 0xfc, 0xb6, 0xee, 0x73, 0x69, 0x41, + 0x59, 0xb5, 0xc4, 0x44, 0xb8, 0x50, 0xff, 0x5b, 0xd5, 0x55, 0x06, 0x88, + 0xb1, 0xb5, 0x81, 0xed, 0x0b, 0xd7, 0x23, 0xd9, 0xff, 0xf8, 0xb7, 0xee, + 0xc3, 0xa6, 0xbc, 0x7d, 0x2d, 0x56, 0x75, 0x41, 0xa1, 0x63, 0xbd, 0xbe, + 0x23, 0xcf, 0x32, 0x9c, 0xee, 0x48, 0x00, 0x49, 0x49, 0x79, 0xfc, 0x30, + 0x7d, 0xb4, 0xdd, 0x62, 0x0f, 0xe9, 0x4a, 0x5a, 0x9e, 0xd2, 0xd9, 0x55, + 0x94, 0x50, 0xa6, 0x27, 0xc2, 0xa0, 0xce, 0x77, 0x93, 0xb0, 0xfc, 0xfb, + 0x06, 0x36, 0xb8, 0x4e, 0x88, 0x21, 0x13, 0xb4, 0xce, 0x3d, 0x03, 0xd4, + 0x00, 0x3c, 0xf0, 0xa8, 0x0b, 0x78, 0x85, 0xb4, 0x3c, 0x03, 0x7e, 0x53, + 0x8d, 0x99, 0x5e, 0x1b, 0xb3, 0x4d, 0x2a, 0xff, 0x48, 0x6e, 0x1c, 0xa3, + 0xf1, 0x8c, 0x50, 0xda, 0x19, 0xa0, 0x19, 0x61, 0x9d, 0xe0, 0x1d, 0xbc, + 0x86, 0xba, 0x13, 0x2e, 0x60, 0x86, 0x7d, 0xe1, 0xae, 0x67, 0xb3, 0x4e, + 0x71, 0x34, 0x4b, 0xe4, 0xab, 0x75, 0x56, 0x09, 0x76, 0x6f, 0x34, 0xef, + 0xbd, 0x5b, 0xbc, 0xcd, 0x8c, 0xc6, 0x6f, 0xf6, 0x20, 0x5f, 0xd9, 0x3d, + 0x34, 0x89, 0x0b, 0xa8, 0x2b, 0x48, 0xc7, 0x2a, 0x80, 0x2b, 0xb2, 0x25, + 0x06, 0x6b, 0xb3, 0xb4, 0xf6, 0x78, 0x66, 0xfa, 0x26, 0x74, 0xf3, 0xe3, + 0xb5, 0x30, 0x5e, 0x91, 0xfc, 0x17, 0x47, 0x78, 0x4a, 0xe3, 0x99, 0x67, + 0x4d, 0x9c, 0x5c, 0xbf, 0x04, 0xf9, 0x60, 0x98, 0xcb, 0xa6, 0x0b, 0x62, + 0x43, 0x1f, 0xe7, 0x65, 0xae, 0x10, 0xf4, 0xb0, 0xf0, 0xbb, 0xae, 0xcf, + 0x6b, 0x0f, 0xf2, 0x12, 0x57, 0x0c, 0x69, 0xd9, 0x8f, 0x75, 0x88, 0x4f, + 0xa9, 0x40, 0x94, 0x01, 0xb5, 0xfb, 0x31, 0x1a, 0xc7, 0xf7, 0x8d, 0x75, + 0x8d, 0xab, 0x1b, 0x70, 0x14, 0x1f, 0xb7, 0x8a, 0x5b, 0x78, 0x22, 0x56, + 0xad, 0x5e, 0xb1, 0xc9, 0x5b, 0x8f, 0xec, 0x68, 0xf6, 0xf9, 0x54, 0xb2, + 0x96, 0x50, 0xe9, 0x1b, 0x90, 0x69, 0x21, 0xb0, 0x11, 0x85, 0x76, 0x07, + 0x88, 0xad, 0x0d, 0xa6, 0xe7, 0xa5, 0x91, 0xa8, 0x33, 0x41, 0x96, 0x97, + 0x3d, 0x89, 0xba, 0xac, 0x4f, 0x3f, 0xc9, 0x79, 0x62, 0x6d, 0x4b, 0x1d, + 0x3f, 0x66, 0x0b, 0xa4, 0xb5, 0xf2, 0xcd, 0x8c, 0xe5, 0xc2, 0xdd, 0x1a, + 0x06, 0xc2, 0xb2, 0xba, 0xbf, 0x23, 0x70, 0xed, 0xc8, 0xae, 0x96, 0xac, + 0x3b, 0x5c, 0xad, 0x7d, 0x08, 0xc6, 0x5c, 0xdd, 0x2c, 0x84, 0x73, 0xdc, + 0x5d, 0x7b, 0x7b, 0x56, 0x44, 0x97, 0xea, 0x4f, 0xa3, 0x57, 0x29, 0x43, + 0xf5, 0x30, 0x64, 0x0b, 0x71, 0xf7, 0xe2, 0xbb, 0xea, 0x08, 0xfe, 0xd0, + 0xda, 0xe6, 0x40, 0x14, 0x19, 0x2d, 0xec, 0xd4, 0x65, 0x74, 0xa1, 0xc3, + 0xeb, 0x70, 0x23, 0x99, 0x9c, 0xb9, 0xd5, 0x37, 0x02, 0xb9, 0x76, 0x5f, + 0x97, 0x13, 0xc3, 0x6a, 0xc5, 0xbb, 0x10, 0x64, 0x2b, 0xb9, 0xea, 0x55, + 0x7f, 0x3d, 0x39, 0x2f, 0xbd, 0xb7, 0x7c, 0x48, 0xa6, 0x4d, 0x68, 0x61, + 0xe6, 0x2a, 0x96, 0x3c, 0x24, 0xbe, 0x24, 0xd6, 0xd2, 0xac, 0x0c, 0x76, + 0x63, 0x08, 0xc6, 0x85, 0x97, 0x4b, 0xf9, 0x6c, 0xa4, 0xaa, 0x1f, 0xd8, + 0x72, 0xf7, 0xea, 0xce, 0x33, 0xb8, 0xd1, 0xb6, 0x18, 0x02, 0x86, 0x30, + 0xf7, 0x83, 0xd2, 0xca, 0x48, 0xe6, 0x8f, 0x13, 0xdd, 0x3b, 0xa8, 0x05, + 0x5a, 0x5c, 0x71, 0x58, 0x07, 0x94, 0x56, 0xb1, 0xc7, 0x35, 0x64, 0xf8, + 0xfe, 0xd1, 0xaf, 0x56, 0x82, 0xa0, 0x17, 0x24, 0xb3, 0x26, 0x8c, 0x21, + 0xc0, 0xd8, 0xbf, 0x53, 0x6f, 0x76, 0x52, 0xe6, 0x72, 0x5d, 0xf9, 0xae, + 0xa0, 0x6f, 0xe8, 0x70, 0xf8, 0x38, 0x10, 0xe2, 0x3d, 0x5a, 0x1b, 0xc4, + 0xe0, 0xf2, 0x68, 0x5c, 0x53, 0x02, 0x08, 0x6b, 0x4a, 0x32, 0xa8, 0xad, + 0xaa, 0x05, 0xe2, 0x03, 0xb2, 0x6b, 0x81, 0xbb, 0x1b, 0x0a, 0x8d, 0x03, + 0x65, 0x24, 0x46, 0xae, 0x14, 0x4c, 0x60, 0xf5, 0x83, 0xf2, 0x7a, 0x4f, + 0x9a, 0xab, 0x0a, 0x13, 0xf5, 0xaf, 0x85, 0x8a, 0x78, 0x77, 0x8c, 0x11, + 0x72, 0x25, 0xb2, 0xe1, 0xef, 0xa7, 0xdd, 0x5b, 0x9e, 0x3b, 0x54, 0xad, + 0x32, 0xf6, 0x5e, 0xc6, 0x01, 0x3f, 0xca, 0x47, 0x97, 0xdd, 0x76, 0xb4, + 0x31, 0x9a, 0x87, 0x21, 0x91, 0xf3, 0x41, 0x09, 0x6e, 0x53, 0x8a, 0x76, + 0xb9, 0xc7, 0x0f, 0x35, 0x13, 0xfb, 0xdd, 0x97, 0x04, 0x77, 0x98, 0xc1, + 0xbb, 0x9b, 0x26, 0x0b, 0xc2, 0x20, 0x42, 0x07, 0xd4, 0x09, 0x25, 0xcc, + 0x4e, 0x85, 0x9a, 0x6e, 0x39, 0x29, 0x60, 0xc0, 0xef, 0x7d, 0xc9, 0x28, + 0x38, 0x75, 0x1f, 0xfa, 0xfa, 0x73, 0x95, 0x7d, 0xea, 0x9c, 0x15, 0x19, + 0xb6, 0xc1, 0xff, 0xf8, 0x81, 0xb0, 0xcc, 0x3f, 0x70, 0x3b, 0x5a, 0xb0, + 0xc6, 0x72, 0x69, 0xda, 0x80, 0x1b, 0x90, 0xac, 0xab, 0x13, 0x39, 0x07, + 0x33, 0xe0, 0x46, 0x8f, 0x5f, 0x73, 0x58, 0x26, 0x7b, 0x2e, 0xaa, 0x60, + 0x9b, 0xa5, 0x6c, 0x18, 0xab, 0x19, 0x44, 0x5a, 0x31, 0xce, 0xa2, 0x54, + 0xdb, 0xf6, 0x9c, 0x18, 0x76, 0x88, 0x7c, 0xfb, 0x32, 0x35, 0x4d, 0x5b, + 0x6c, 0xae, 0xba, 0xe5, 0xf7, 0xf9, 0x13, 0x2c, 0x44, 0x70, 0x9d, 0xb1, + 0xea, 0xf1, 0x02, 0x5d, 0x74, 0x96, 0xe3, 0x13, 0x38, 0x3d, 0x4a, 0xcf, + 0xdb, 0xe5, 0x23, 0x6d, 0x85, 0x89, 0xea, 0xfa, 0x13, 0x39, 0x93, 0xb5, + 0xc7, 0xc9, 0xeb, 0xed, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x12, 0x17, 0x1e, 0x24, 0x2d, +}; +static const unsigned short kat_mldsa65_sig_packed[] = { + 0x5d06, 0x49e7, 0x4c22, 0x973e, 0x8f5d, 0x87ff, 0x7220, 0x2192, + 0x7df5, 0x864d, 0x27e5, 0xff94, 0x8d1d, 0x3542, 0x8ad8, 0x05d5, + 0xd71b, 0xb909, 0xa102, 0x44de, 0xb2a2, 0x3f84, 0x2519, 0xd90e, + 0x93d6, 0x3f40, 0x5e7a, 0x29ab, 0x7b84, 0x0e46, 0xf78d, 0x0d2d, + 0x968a, 0xece1, 0x01ac, 0xf67a, 0x463c, 0x838d, 0x275f, 0x6f8d, + 0x0494, 0x4804, 0xb0a3, 0x5e94, 0x2795, 0xcbe3, 0x2d7f, 0x97fe, + 0xf55d, 0xef08, 0xf9eb, 0xc4bc, 0x5c3e, 0x4e7d, 0xfb46, 0x844f, + 0xb328, 0x23a2, 0xf617, 0x7e1f, 0xe476, 0xcc0f, 0x0e44, 0xd617, + 0x4713, 0xc3da, 0x4342, 0x66a9, 0x3bad, 0x9d55, 0x24dc, 0x4190, + 0x9f33, 0xd2e4, 0x8c3e, 0x8169, 0xefa1, 0x37b2, 0x94c7, 0x803d, + 0xa864, 0xb02a, 0xe0aa, 0x18fb, 0x6932, 0xdc4c, 0xfd36, 0xf459, + 0x031d, 0x1c89, 0xd9f4, 0xccf0, 0xb31f, 0x9648, 0x84ca, 0x0ae6, + 0x38f3, 0xec73, 0xcdc4, 0x91c7, 0xe284, 0xfb54, 0xab97, 0xc8ac, + 0xe6dd, 0xa578, 0x5c27, 0x9ea9, 0xc825, 0x18da, 0xf9a7, 0x7b0d, + 0xada9, 0xc7ce, 0xb86b, 0x99c4, 0xbdd5, 0x8963, 0x676e, 0x8018, + 0xd005, 0x4c42, 0x5d94, 0x912a, 0x4310, 0x326b, 0xa3df, 0xbd14, + 0x0cc3, 0xc0b6, 0x7544, 0xd3b1, 0x8920, 0xa6b6, 0xe570, 0x45ec, + 0xf2ed, 0x7f54, 0x0c7b, 0x6a82, 0x3f21, 0x23c0, 0xeceb, 0x9719, + 0x79e1, 0xcd0c, 0x2fa0, 0x00cd, 0xe9b1, 0xd6a3, 0x2800, 0x7d86, + 0x8f75, 0x4980, 0x7714, 0xff64, 0xfb59, 0xe213, 0xb270, 0x9941, + 0x8882, 0x863e, 0x94c9, 0x92e0, 0x5e72, 0x3bb5, 0xbdd5, 0x33b8, + 0x49a5, 0x4311, 0xd5c9, 0xe812, 0x234e, 0x8420, 0x6909, 0x6acb, + 0x25d1, 0x4bc2, 0xe1d1, 0x65bb, 0x50dc, 0xff0c, 0xdaf7, 0x61fd, + 0x4d76, 0x1ad6, 0x7007, 0x1665, 0x8804, 0x5566, 0x9cef, 0x4d7f, + 0xd00a, 0xc608, 0xeb0f, 0xa7c9, 0x74d4, 0xb4f4, 0x8c6c, 0xefb7, + 0x134b, 0x4393, 0x1585, 0x9d0e, 0x76ca, 0x0f7d, 0x8724, 0x1c62, + 0xc13f, 0x9daf, 0x757e, 0xdad8, 0x9fa4, 0xb652, 0xbb08, 0xaff2, + 0x3abd, 0xaacd, 0xd7f3, 0xa009, 0xf0bd, 0x8178, 0x194f, 0x3964, + 0x089f, 0x7579, 0x9158, 0x44d8, 0xc0a3, 0xa4bd, 0x8a86, 0xbab5, + 0xb9b7, 0x790b, 0x6abb, 0x6dce, 0x82a9, 0x3d78, 0xff3b, 0xa987, + 0x84d7, 0xbc0c, 0x6e07, 0x258a, 0xe956, 0xb4ce, 0x480d, 0xad56, + 0x7286, 0xa0c6, 0x4619, 0x1138, 0x0b3e, 0xebec, 0xed1f, 0xe449, + 0xaf55, 0x21e3, 0xf665, 0xd3a1, 0xf7e2, 0xf940, 0x21a4, 0xd82e, + 0x081c, 0x76a4, 0x713c, 0x11e5, 0x314d, 0x8c28, 0xa980, 0x6f90, + 0x36e5, 0x7d58, 0x4e59, 0xb4ef, 0xa087, 0x791b, 0x0717, 0xbcbe, + 0x901a, 0xe61e, 0xba45, 0x9389, 0x9941, 0x3ba3, 0x4853, 0xda2d, + 0xf1f6, 0xc141, 0x2c76, 0xb9a8, 0xf591, 0x43e4, 0x197c, 0xd283, + 0x4abd, 0x8168, 0xb55f, 0x67fd, 0x0d75, 0x0673, 0x9f2d, 0x08cb, + 0x1b5f, 0x72c7, 0x3281, 0xc04c, 0x494a, 0xea7a, 0x7fbe, 0x9588, + 0xc833, 0xe3c5, 0x6821, 0xe645, 0xe8a8, 0xcbc2, 0x7996, 0xdb50, + 0xd0ea, 0x5fe3, 0x58c8, 0xa6ff, 0x7e7b, 0x7935, 0x844f, 0xde47, + 0x1cc6, 0x9db2, 0xf9e0, 0xaaaf, 0x098b, 0xbb10, 0xb63a, 0x8d00, + 0x8ce6, 0x9c2c, 0x6648, 0x3872, 0x880e, 0x1aae, 0x40f1, 0xc776, + 0xafa7, 0xe307, 0x802c, 0x263b, 0x4b82, 0x8f45, 0xbb79, 0x4c61, + 0xb324, 0x19ef, 0x0e1e, 0xec29, 0x444f, 0xd271, 0xcc89, 0x8667, + 0x5483, 0xa720, 0xf5e6, 0x56e8, 0x0e2c, 0x2aa7, 0xdaa1, 0x9b6b, + 0x33a0, 0xa835, 0xc181, 0xa238, 0xe643, 0x855a, 0xfeca, 0x658b, + 0x2e60, 0x561c, 0x4183, 0xf523, 0x814d, 0xabb2, 0xb2ec, 0x90d8, + 0x6fa9, 0xd3bb, 0x7bd6, 0xc4e1, 0x0cfb, 0x991d, 0xf43c, 0xbc05, + 0xdff5, 0x01d9, 0xb8fb, 0x4e08, 0x8f3f, 0xad29, 0xdbdd, 0xcfd5, + 0x3a9a, 0xac93, 0x9f47, 0x8ad7, 0x9535, 0x975a, 0x371d, 0xc4fd, + 0xb8e5, 0x8d97, 0xc05a, 0xa033, 0xcbb9, 0x4587, 0x642e, 0xc103, + 0xfb60, 0x42a8, 0x7800, 0x57a4, 0x320a, 0x707f, 0xc81e, 0x0c73, + 0xf3b5, 0x3b68, 0x0ac2, 0x97e3, 0xfd23, 0x9ead, 0xa58e, 0x3180, + 0xd1f2, 0xffa5, 0x41e6, 0x0535, 0x9dd2, 0x332c, 0x3f6b, 0xd1e3, + 0x0f01, 0xf865, 0x56ab, 0x0d74, 0xd4a4, 0x3602, 0x464e, 0x9f7a, + 0x40f9, 0x1b2c, 0x1cd5, 0x6b9b, 0xa657, 0x08c5, 0x98ab, 0xe3c8, + 0x1f85, 0x3827, 0x6f19, 0x3bd4, 0xc5b7, 0xb508, 0xf6a2, 0x96c6, + 0xfae7, 0xb538, 0xc66d, 0x61b5, 0x93be, 0xe6a8, 0xa2d1, 0x9823, + 0x3ff1, 0x577e, 0xbc4c, 0x0f18, 0x9ec1, 0x3633, 0xa026, 0x6eca, + 0x6fec, 0x4134, 0x0774, 0xa80b, 0x88d8, 0x9f26, 0x4984, 0x71e9, + 0x1f95, 0x4155, 0x59af, 0x7180, 0xbd73, 0x9c1b, 0xb4d0, 0x8cc9, + 0x6e53, 0x35b3, 0x6ee8, 0x82fa, 0x023e, 0x55a8, 0x92eb, 0xa359, + 0xa73d, 0x44a2, 0x802a, 0xa3be, 0x4885, 0x0242, 0x2588, 0x92f5, + 0xb5a2, 0xf3c4, 0x2ebe, 0x9687, 0xc74d, 0x8096, 0x0094, 0xf0ed, + 0x551e, 0xb096, 0x1c50, 0xc5d7, 0x8c4c, 0x2d2f, 0x0547, 0x53aa, + 0xe550, 0xe6c3, 0xd10a, 0x82fc, 0xf5fe, 0xb892, 0x3cf0, 0x44ab, + 0x47c6, 0xd585, 0x418e, 0x2b29, 0x935e, 0x64ef, 0x46f5, 0x23d4, + 0xd3e6, 0xe5cf, 0x8415, 0xbe09, 0x091a, 0x89ba, 0x5db2, 0xd6e7, + 0xc906, 0x87ae, 0xf205, 0x81b3, 0x7c03, 0xfc80, 0x02dc, 0xff54, + 0x5434, 0x6d6f, 0x0243, 0x2806, 0x6aec, 0x25cf, 0x3602, 0xd17e, + 0xb42d, 0xa816, 0xe8ef, 0x9dfe, 0x5d5a, 0x4eb1, 0xf0b2, 0x425b, + 0x48a0, 0xe506, 0x1999, 0xe9f1, 0x0cf6, 0xd2b5, 0xce80, 0x1cad, + 0x00c7, 0xb9fd, 0x5d91, 0x7e4a, 0x5c69, 0x3721, 0x3b85, 0xe4af, + 0x3a04, 0xabdf, 0x656d, 0x2d00, 0x8a96, 0x7571, 0x1b17, 0x180c, + 0xc36e, 0xb0e5, 0xbbcd, 0x5e9e, 0xe9d1, 0xaac6, 0xfd94, 0x4fc0, + 0xb2e3, 0x83ff, 0xd0ee, 0xd922, 0xb5a5, 0x9185, 0xa024, 0xa2c2, + 0x41ae, 0x0a4c, 0xfb8e, 0x50fd, 0x0e63, 0xc043, 0xa465, 0x553b, + 0x7e0f, 0x33c0, 0xbb59, 0x74a0, 0xdff3, 0x3c6c, 0x851b, 0xa17d, + 0x35cd, 0x97ad, 0xa4f8, 0xdd93, 0xba06, 0xea3a, 0xfe6b, 0x62a3, + 0x9be0, 0xd021, 0x5992, 0x6e5e, 0x25e3, 0x0d22, 0x8eac, 0xed60, + 0xa55b, 0xfd07, 0xac50, 0x9c37, 0x8d93, 0xecc1, 0xd5a1, 0xd120, + 0x9803, 0xc363, 0xda4a, 0xb7e7, 0xd9f8, 0x2370, 0xc2df, 0x75b8, + 0x837c, 0x01f8, 0x96e4, 0x2daa, 0xbb53, 0x31cd, 0xe41a, 0x9f14, + 0x5dbc, 0xc168, 0xbd7a, 0xe657, 0x067d, 0x327a, 0xd5f9, 0x96a7, + 0x81b5, 0xb024, 0x1577, 0x8823, 0x3513, 0x09f1, 0x82f7, 0xccdf, + 0xf4ab, 0x5cbe, 0x5f73, 0xdbce, 0xf53f, 0xa277, 0xb7fc, 0xa6f7, + 0x7bb2, 0x6ad9, 0xb02d, 0xf7b7, 0x18c7, 0x9da5, 0x5ded, 0xb34e, + 0xcdbb, 0xcb8a, 0xbdf2, 0x51d2, 0x21a0, 0xe2ff, 0xff68, 0x22db, + 0x06f6, 0xd1fc, 0x592a, 0xec59, 0xf0b9, 0xd7b1, 0x9561, 0xaeb1, + 0xdf95, 0xcbd7, 0x28a8, 0x1b76, 0xf686, 0xfde0, 0xa742, 0x3f83, + 0x0ded, 0xe25d, 0x12e3, 0xf337, 0xc2a9, 0x7ec1, 0x5e7a, 0x38f4, + 0x12a1, 0x5aeb, 0x8e96, 0x47f1, 0xf9a9, 0xa28d, 0x26e1, 0x2a11, + 0xca34, 0xe293, 0xec7c, 0xe14f, 0x43fd, 0xb609, 0x0f57, 0xd820, + 0x1e41, 0x7a68, 0x270f, 0x0c74, 0xc77a, 0xf312, 0xf2ff, 0xdfae, + 0x2b5b, 0x4f26, 0x516c, 0xf6eb, 0x4f42, 0x9180, 0x8093, 0x92ce, + 0xbb75, 0x207c, 0xe9bd, 0x7d84, 0x40f2, 0x7759, 0x229e, 0xcce9, + 0xdccb, 0x5983, 0x3dfa, 0xdb6f, 0xe9ab, 0x0741, 0x2ecb, 0x297a, + 0x4f80, 0xbf23, 0x6c57, 0x9ff3, 0x6816, 0x7480, 0x4e0c, 0xc210, + 0x1804, 0xa6ac, 0xc560, 0x4c13, 0x4c8e, 0xb739, 0xe9c9, 0xf07a, + 0xc327, 0x5b76, 0xe763, 0x9353, 0x605a, 0x971c, 0xa39e, 0x1957, + 0xe96d, 0x3ea2, 0xd406, 0x927f, 0xbad9, 0x9624, 0x6edc, 0x00c9, + 0x6359, 0x74ec, 0x064d, 0x7d01, 0x5232, 0x97eb, 0xab0f, 0x41b0, + 0x78f8, 0x5d96, 0xa1ae, 0xfe5d, 0xd56b, 0x16e4, 0xf663, 0xce84, + 0x0501, 0x6fb1, 0x4ae4, 0x209f, 0x0755, 0x1529, 0x171a, 0xcafa, + 0x90cf, 0xda1f, 0xcca6, 0xc7a3, 0x148d, 0x3f67, 0x8eb1, 0x03f7, + 0xe821, 0xadc0, 0x9cbf, 0x20be, 0xe02c, 0x99d0, 0xbdfb, 0xec55, + 0x3670, 0x4d6c, 0xb4b1, 0xa013, 0xbc10, 0x6339, 0x51ec, 0xad28, + 0xc0e1, 0x0fce, 0xac79, 0x003e, 0xaebd, 0x84f5, 0x6da3, 0x7809, + 0x461b, 0x81a1, 0x2137, 0xc88a, 0x21ec, 0x1ea1, 0x13a4, 0x8d2e, + 0x803d, 0xc6b4, 0x9eb9, 0xa1d3, 0x6e17, 0x21a4, 0xa3ea, 0x1332, + 0x53b9, 0x8cf1, 0x950f, 0x85ba, 0xa08d, 0xded8, 0x54b2, 0x94d0, + 0xdf9a, 0x6b50, 0xd49e, 0x64c7, 0x2d78, 0xfa3d, 0x8699, 0x5c0e, + 0x21b2, 0xfba8, 0x3499, 0x45ea, 0x9c0c, 0x011a, 0xdcaf, 0x9b07, + 0xb260, 0x4179, 0x72c9, 0xff3c, 0x4f80, 0x9f98, 0x1686, 0xb26d, + 0x570f, 0xb90c, 0x3385, 0xcc21, 0x8aff, 0x7fb2, 0x52d0, 0xc8a0, + 0x1cbc, 0x48c8, 0x5e0d, 0x7449, 0x4a80, 0x0873, 0x82dd, 0xe2a7, + 0x8ba1, 0x7742, 0xc1b7, 0xaaf6, 0x7a80, 0x345d, 0x8402, 0x508d, + 0xd419, 0xe769, 0x6f5d, 0x9451, 0x8251, 0xdb33, 0x83c0, 0xf65b, + 0x8015, 0x5600, 0x293e, 0xc5c7, 0x914a, 0x5ff3, 0xadaf, 0xe1d6, + 0x8bb3, 0xbb69, 0xfd7f, 0xefa5, 0xecfa, 0x6e1a, 0x023c, 0xfc7c, + 0x03b2, 0x6936, 0x9d1a, 0xfff7, 0x3bfc, 0x27d8, 0x18ad, 0x226b, + 0x7da7, 0x49e5, 0x1da9, 0xc0e3, 0xed0c, 0x9bdf, 0xf5b2, 0xea2e, + 0x77c7, 0x34f0, 0x515b, 0x7dc2, 0x3189, 0x8500, 0x5f15, 0x3c5a, + 0xa19b, 0xddc7, 0xebd5, 0x3553, 0x8f9e, 0xd29c, 0xacd0, 0x6398, + 0xae2c, 0xc796, 0x7dbd, 0x8607, 0x9b51, 0x79af, 0x50e3, 0x9499, + 0x2b0a, 0xb4ed, 0x7ccd, 0xc51a, 0x2aa2, 0x72d7, 0x74e7, 0x5184, + 0x8e3e, 0x50af, 0xbfd5, 0x6064, 0x4188, 0x18ca, 0x2f96, 0xdaa7, + 0x02c0, 0xcf63, 0x5efe, 0x4a36, 0x20a9, 0x588d, 0x3a25, 0x3e1c, + 0x5a1d, 0x6858, 0x6318, 0x8332, 0xe340, 0xc459, 0xe0a9, 0xf8f5, + 0x4d38, 0x9c2b, 0x4144, 0xbe5b, 0xaa7e, 0x05b7, 0xa2e0, 0xf7ab, + 0x1a06, 0x371d, 0x4e21, 0xa32b, 0xe0bd, 0x732d, 0x5763, 0x6526, + 0x8123, 0x4285, 0x57f3, 0xf577, 0x1797, 0x57ba, 0xf04a, 0xc495, + 0x556f, 0x28d9, 0x2042, 0xba45, 0x0a84, 0xd014, 0xd59c, 0x8f29, + 0x2c06, 0xf53c, 0xc48b, 0x8c68, 0xaa42, 0xae22, 0x4111, 0x34fd, + 0xb873, 0x3c5b, 0x9819, 0xe065, 0xefee, 0x7850, 0xa442, 0xcf7d, + 0xcd2b, 0xa281, 0xd75c, 0xd1bd, 0xcd6b, 0xac52, 0xa1d5, 0x7967, + 0x9de9, 0x430a, 0x03df, 0x4293, 0x05b5, 0x4c85, 0x0d44, 0xccaa, + 0xab79, 0x5867, 0x0c54, 0x6d68, 0x89af, 0xa7d0, 0xf114, 0xbcee, + 0xdd69, 0x0fca, 0x722c, 0x36f9, 0xf97a, 0xaf40, 0xebc3, 0xdfb9, + 0x3c77, 0x0c06, 0x16c3, 0xeeaf, 0x449d, 0x570b, 0xc6ec, 0x8ed9, + 0x32c4, 0x3b39, 0x17c9, 0xda87, 0xe75a, 0x35cf, 0xe35a, 0xa071, + 0x8a3c, 0x10fb, 0x8946, 0x56ef, 0x95fb, 0x4a4d, 0xb4e7, 0xb3e9, + 0x5ced, 0x4155, 0x2b3e, 0x53ae, 0xe64d, 0x17f4, 0xc7a1, 0x053e, + 0x23cb, 0xb244, 0x93b8, 0x92cb, 0x1058, 0x9369, 0x4fd4, 0xc6f1, + 0x6e05, 0xb4f1, 0x5a13, 0xdc2b, 0xb211, 0xc38e, 0xafc2, 0xf507, + 0x9f28, 0xc51e, 0x2bb4, 0x354d, 0x7d20, 0x9bca, 0xb3b0, 0x4778, + 0xa840, 0x39ee, 0xb2b4, 0xc32a, 0x8370, 0x3f89, 0x9b0a, 0x0d1a, + 0x4c54, 0x80ff, 0x2513, 0xd162, 0x1a49, 0xe8c3, 0x110f, 0x4970, + 0x7ae6, 0xd733, 0x4db6, 0x7c20, 0xe2aa, 0xc3e5, 0xe9a4, 0x61c2, + 0x3473, 0x54e0, 0xebb9, 0x72ff, 0xcd78, 0x3f09, 0x77cc, 0x02f0, + 0x3bcc, 0x44ed, 0xefcd, 0x3ccc, 0x72d9, 0xcbf4, 0x8c53, 0x01df, + 0xd889, 0x5b69, 0xc409, 0x3c07, 0xd704, 0xd598, 0x8acc, 0xea48, + 0xd935, 0x3500, 0xcb88, 0x8028, 0xc00d, 0x4474, 0xb826, 0xb2a1, + 0xf8e8, 0xcafa, 0x8b39, 0x5057, 0x024a, 0xec90, 0x174a, 0xdec1, + 0x357d, 0x1612, 0xdb06, 0x38df, 0xc6a9, 0x758c, 0x1bea, 0x2de9, + 0x24ee, 0xe8c1, 0x1e8b, 0x0f4a, 0xcb7e, 0x48a1, 0x20aa, 0x12fc, + 0x5742, 0x0dd8, 0x42c8, 0xc9ad, 0xe0c3, 0x9094, 0x04ac, 0xad1a, + 0x1729, 0xbdcd, 0x5533, 0xcc68, 0xe286, 0x5574, 0x427e, 0x61ec, + 0x0ebe, 0x0e33, 0x200d, 0xb6fc, 0x73ee, 0x4169, 0xb559, 0x44c4, + 0x50b8, 0x5bff, 0x55d5, 0x8806, 0xb5b1, 0xed81, 0xd70b, 0xd923, + 0xf8ff, 0xeeb7, 0xa6c3, 0x7dbc, 0x562d, 0x4175, 0x63a1, 0xbebd, + 0xcf23, 0x9c32, 0x48ee, 0x4900, 0x7949, 0x30fc, 0xb47d, 0x62dd, + 0xe90f, 0x5a4a, 0xd29e, 0x55d9, 0x5094, 0x27a6, 0xa0c2, 0x77ce, + 0xb093, 0xfbfc, 0x3606, 0x4eb8, 0x2188, 0xb413, 0x3dce, 0xd403, + 0x3c00, 0xa8f0, 0x780b, 0xb485, 0x033c, 0x537e, 0x998d, 0x1b5e, + 0x4db3, 0xff2a, 0x6e48, 0xa31c, 0x8cf1, 0xda50, 0xa019, 0x6119, + 0xe09d, 0xbc1d, 0xba86, 0x2e13, 0x8660, 0xe17d, 0x67ae, 0x4eb3, + 0x3471, 0xe44b, 0x75ab, 0x0956, 0x6f76, 0xef34, 0x5bbd, 0xcdbc, + 0xc68c, 0xf66f, 0x5f20, 0x3dd9, 0x8934, 0xa80b, 0x482b, 0x2ac7, + 0x2b80, 0x25b2, 0x6b06, 0xb4b3, 0x78f6, 0xfa66, 0x7426, 0xe3f3, + 0x30b5, 0x915e, 0x17fc, 0x7847, 0xe34a, 0x6799, 0x9c4d, 0xbf5c, + 0xf904, 0x9860, 0xa6cb, 0x620b, 0x1f43, 0x65e7, 0x10ae, 0xb0f4, + 0xbbf0, 0xcfae, 0x0f6b, 0x12f2, 0x0c57, 0xd969, 0x758f, 0x4f88, + 0x40a9, 0x0194, 0xfbb5, 0x1a31, 0xf7c7, 0x758d, 0xab8d, 0x701b, + 0x1f14, 0x8ab7, 0x785b, 0x5622, 0x5ead, 0xc9b1, 0x8f5b, 0x68ec, + 0xf9f6, 0xb254, 0x5096, 0x1be9, 0x6990, 0xb021, 0x8511, 0x0776, + 0xad88, 0xa60d, 0xa5e7, 0xa891, 0x4133, 0x9796, 0x893d, 0xacba, + 0x3f4f, 0x79c9, 0x6d62, 0x1d4b, 0x663f, 0xa40b, 0xf2b5, 0x8ccd, + 0xc2e5, 0x1add, 0xc206, 0xbab2, 0x23bf, 0xed70, 0xaec8, 0xac96, + 0x5c3b, 0x7dad, 0xc608, 0xdd5c, 0x842c, 0xdc73, 0x7b5d, 0x567b, + 0x9744, 0x4fea, 0x57a3, 0x4329, 0x30f5, 0x0b64, 0xf771, 0xbbe2, + 0x08ea, 0xd0fe, 0xe6da, 0x1440, 0x2d19, 0xd4ec, 0x7465, 0xc3a1, + 0x70eb, 0x9923, 0xb99c, 0x37d5, 0xb902, 0x5f76, 0x1397, 0x6ac3, + 0xbbc5, 0x6410, 0xb92b, 0x55ea, 0x3d7f, 0x2f39, 0xb7bd, 0x487c, + 0x4da6, 0x6168, 0x2ae6, 0x3c96, 0xbe24, 0xd624, 0xacd2, 0x760c, + 0x0863, 0x85c6, 0x4b97, 0x6cf9, 0xaaa4, 0xd81f, 0xf772, 0xceea, + 0xb833, 0xb6d1, 0x0218, 0x3086, 0x83f7, 0xcad2, 0xe648, 0x138f, + 0x3bdd, 0x05a8, 0x5c5a, 0x5871, 0x9407, 0xb156, 0x35c7, 0xf864, + 0xd1fe, 0x56af, 0xa082, 0x2417, 0x26b3, 0x218c, 0xd8c0, 0x53bf, + 0x766f, 0xe652, 0x5d72, 0xaef9, 0x6fa0, 0x70e8, 0x38f8, 0xe210, + 0x5a3d, 0xc41b, 0xf2e0, 0x5c68, 0x0253, 0x6b08, 0x324a, 0xada8, + 0x05aa, 0x03e2, 0x6bb2, 0xbb81, 0x0a1b, 0x038d, 0x2465, 0xae46, + 0x4c14, 0xf560, 0xf283, 0x4f7a, 0xab9a, 0x130a, 0xaff5, 0x8a85, + 0x7778, 0x118c, 0x2572, 0xe1b2, 0xa7ef, 0x5bdd, 0x3b9e, 0xad54, + 0xf632, 0xc65e, 0x3f01, 0x47ca, 0xdd97, 0xb476, 0x9a31, 0x2187, + 0xf391, 0x0941, 0x536e, 0x768a, 0xc7b9, 0x350f, 0xfb13, 0x97dd, + 0x7704, 0xc198, 0x9bbb, 0x0b26, 0x20c2, 0x0742, 0x09d4, 0xcc25, + 0x854e, 0x6e9a, 0x2939, 0xc060, 0x7def, 0x28c9, 0x7538, 0xfa1f, + 0x73fa, 0x7d95, 0x9cea, 0x1915, 0xc1b6, 0xf8ff, 0xb081, 0x3fcc, + 0x3b70, 0xb05a, 0x72c6, 0xda69, 0x1b80, 0xac90, 0x13ab, 0x0739, + 0xe033, 0x8f46, 0x735f, 0x2658, 0x2e7b, 0x60aa, 0xa59b, 0x186c, + 0x19ab, 0x5a44, 0xce31, 0x54a2, 0xf6db, 0x189c, 0x8876, 0xfb7c, + 0x3532, 0x5b4d, 0xae6c, 0xe5ba, 0xf9f7, 0x2c13, 0x7044, 0xb19d, + 0xf1ea, 0x5d02, 0x9674, 0x13e3, 0x3d38, 0xcf4a, 0xe5db, 0x6d23, + 0x8985, 0xfaea, 0x3913, 0xb593, 0xc9c7, 0xedeb, 0x00f8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0a00, 0x1712, 0x241e, 0x002d, +}; +static const unsigned short kat_mldsa65_pub_packed[] = { + 0x6848, 0x913d, 0x8e97, 0xeb31, 0xdd3d, 0xb0b8, 0x3447, 0xd282, + 0x8ab8, 0x625f, 0x4959, 0x8ffd, 0xa558, 0xe661, 0xbd96, 0x274c, + 0x5bd0, 0xdb38, 0xedb2, 0x1ef0, 0x4e66, 0x81fd, 0x1ebe, 0x93a8, + 0x8c68, 0x8ae6, 0xd5a2, 0x591c, 0xf858, 0xc6bb, 0x4eeb, 0xee89, + 0xd267, 0x32c0, 0x5409, 0x72d5, 0xca12, 0x22c7, 0xf19f, 0xead6, + 0x39f0, 0xbd28, 0x5151, 0x8d1f, 0xd888, 0x7347, 0x7d6c, 0x73e2, + 0x590d, 0xe578, 0x0741, 0x1613, 0x7809, 0x7786, 0xbf11, 0x3955, + 0xbfa0, 0xc3c4, 0xc250, 0x57be, 0xaf2b, 0xe20e, 0xfbe2, 0xcc16, + 0xa0fe, 0x2880, 0x9ad9, 0x9ac4, 0xb7eb, 0x3759, 0xcedd, 0x1c11, + 0xb6da, 0xff2f, 0xea3c, 0xa28b, 0x3d23, 0x561e, 0xc5fb, 0xa1c5, + 0x26e7, 0x63de, 0xddfa, 0xf02a, 0xb116, 0x1719, 0xa37f, 0x71d9, + 0xd9a2, 0x7127, 0xfc73, 0x5be5, 0x7467, 0xf05a, 0xc2b7, 0x591d, + 0xbe7d, 0x3eb9, 0x326a, 0x41f3, 0x9ac4, 0x8b5a, 0xe8e9, 0x0825, + 0x1f8d, 0xa42a, 0x5551, 0xc8d6, 0x15ae, 0x7e36, 0xb04e, 0xb803, + 0xf7fd, 0x1085, 0x9471, 0x3997, 0xfff9, 0x90f0, 0xea23, 0x51f4, + 0xd204, 0x4aa8, 0x9045, 0xed6e, 0x7146, 0x4da4, 0x8dc2, 0x9827, + 0xb57b, 0xf65d, 0x9e9e, 0x6185, 0x1af6, 0xa780, 0x9926, 0x3850, + 0xfe65, 0xb7d9, 0x72ee, 0xe1a8, 0x197a, 0x08c4, 0x4f14, 0x294b, + 0xefaf, 0x3170, 0xa6c3, 0x57d8, 0x1016, 0x2cb4, 0x429f, 0x4512, + 0x8fa8, 0x7e19, 0x8116, 0x032b, 0x5911, 0x5bb6, 0x8796, 0xb3e5, + 0x34e9, 0x22c5, 0xe95a, 0x798a, 0x73ba, 0xb3d2, 0xd799, 0x1035, + 0xfaef, 0x9ed1, 0xb853, 0x0f45, 0xa80b, 0xe1fc, 0x2f01, 0x8dd9, + 0x0a26, 0xaa74, 0x13aa, 0xe2fa, 0xa049, 0xb106, 0x4fc3, 0xa05b, + 0x82b8, 0x63f2, 0x2278, 0xb32f, 0x226f, 0xc283, 0xf043, 0xebff, + 0x1b5f, 0x14b4, 0xa7a0, 0x550d, 0xd4e3, 0x560a, 0xcbb6, 0x8ac8, + 0xf0e1, 0x7b3b, 0x8228, 0x8dd9, 0xa2ee, 0x148e, 0x9d5c, 0xfded, + 0xaf8e, 0xef1c, 0xd92e, 0x8b4a, 0x0f05, 0x6489, 0x6df4, 0xa01e, + 0xc2d0, 0x3ea4, 0xda0d, 0x8261, 0xbfad, 0x6e4f, 0x75d1, 0x74b6, + 0x5722, 0x9b85, 0x2ff2, 0x413a, 0xcf7e, 0x9d1f, 0x3189, 0x5e7b, + 0x9d53, 0x7a58, 0x6bf1, 0x139e, 0xe013, 0x1445, 0xa6ff, 0xa84b, + 0xffb3, 0x832b, 0xf821, 0x1c81, 0xfbb3, 0x2c02, 0x648f, 0x704e, + 0xb8a4, 0x2f0a, 0xeebf, 0x4a60, 0x73bb, 0x0979, 0xa81e, 0xc5e6, + 0x4dc7, 0x02fc, 0x6683, 0x406b, 0x79c0, 0x7038, 0x8202, 0xa104, + 0xbf36, 0xa95d, 0x8e56, 0x98b7, 0x49d3, 0x8b03, 0x0cdb, 0xe011, + 0x4534, 0x84e7, 0xb57c, 0x9c06, 0xcf75, 0xac28, 0x1c60, 0x9977, + 0x58d9, 0x0d21, 0xcbdb, 0x6e22, 0xaf51, 0x9fef, 0xe41d, 0x077b, + 0x7338, 0xd3d6, 0x74f9, 0xbe56, 0x08de, 0x8250, 0x4ae7, 0x8b29, + 0xd42c, 0x4b8f, 0x9330, 0x5f15, 0x6c36, 0xa68f, 0xc601, 0x85af, + 0xfa8d, 0xc032, 0x9184, 0xa2b2, 0x8798, 0x03f9, 0x9435, 0x5d9a, + 0xda6e, 0x79a6, 0x2a88, 0x953a, 0xbfd6, 0x976d, 0x220a, 0x4b1f, + 0x3d9d, 0xbf8c, 0x4a38, 0x1af8, 0x95ac, 0xb3e2, 0x4e29, 0x7804, + 0xc89a, 0x2737, 0xdca5, 0x5504, 0x969f, 0x41af, 0xa0d8, 0x5153, + 0xee6f, 0xbcee, 0x7452, 0xb66e, 0x28ab, 0xe019, 0x0891, 0x0d71, + 0x5f83, 0x1f01, 0x30a6, 0x8765, 0xd32a, 0xd534, 0xffcd, 0xb2b2, + 0x0531, 0xe907, 0xc92f, 0xae93, 0x7d31, 0x7fa9, 0x304f, 0xda9c, + 0xf6f0, 0xd97e, 0x909d, 0x5521, 0x0876, 0x4938, 0x53f9, 0x46b2, + 0xfed7, 0x3fdb, 0x67db, 0x9867, 0xa550, 0x40ad, 0x644e, 0x7f14, + 0xcfb7, 0x6a4f, 0xdded, 0xaf05, 0xb8b4, 0x9634, 0x1f8d, 0x80e8, + 0x9614, 0xce0d, 0x945d, 0x3622, 0x6e52, 0xa412, 0xd678, 0x5f9e, + 0x69be, 0x3170, 0x300b, 0x068c, 0x5084, 0xcf18, 0xb2c7, 0x43ab, + 0x130a, 0xb1a6, 0x7bac, 0x2cb0, 0xbbcc, 0x913d, 0xc21a, 0x10f1, + 0x6168, 0xbe3f, 0x9b02, 0xcefd, 0xcf02, 0xd35c, 0x5089, 0x72ed, + 0x39c8, 0xed44, 0xc7fb, 0x1556, 0x87af, 0x64f8, 0x51c0, 0xc5f3, + 0x5654, 0x41c5, 0x6328, 0x0ca4, 0xd106, 0xb5da, 0xbd62, 0x05ff, + 0xb871, 0xc3d3, 0x7b91, 0x30bd, 0x8008, 0xa5bb, 0x98e9, 0x9b23, + 0xfa95, 0xb791, 0x41d6, 0x4f6d, 0x8b39, 0xdb3a, 0x30cd, 0x3e98, + 0x59d3, 0x4d2b, 0xf79e, 0x23d4, 0xd06f, 0x500f, 0x8ad9, 0x3aa5, + 0x5a23, 0x17c4, 0x2027, 0x7df7, 0x1796, 0x7226, 0x0c98, 0x8ffe, + 0xa5f7, 0x02a7, 0x3e78, 0x2bdc, 0x1ba3, 0x5922, 0x5a01, 0x2f11, + 0xf4c7, 0xa968, 0xf9c2, 0x4046, 0x0039, 0x302d, 0x67ef, 0x4c8b, + 0x98b7, 0x11bc, 0x1662, 0x7abf, 0x7c9a, 0xba18, 0xb703, 0x8fb5, + 0x75d0, 0xd315, 0x5011, 0xd349, 0x4b61, 0xa0e7, 0x747e, 0x0043, + 0x0d75, 0xd2f1, 0x87c5, 0x3853, 0x5990, 0xfcea, 0x783d, 0xcd5c, + 0x1cd3, 0x6407, 0xed8b, 0x3ac0, 0x3b5c, 0xd48a, 0x066d, 0x594d, + 0x3dc1, 0x3757, 0x2947, 0x4efc, 0x5329, 0xe262, 0x19a5, 0x0412, + 0x0453, 0xbc28, 0x2215, 0xa2af, 0xf58f, 0x16fe, 0xe355, 0xca04, + 0xc85b, 0x7ac2, 0xe0d0, 0xa3c6, 0xd49d, 0x28df, 0x6c95, 0xb314, + 0xc98c, 0x8236, 0xfece, 0x2b40, 0x5ebd, 0xd282, 0x469c, 0x444e, + 0x5deb, 0xb437, 0xc58f, 0xdf68, 0xcce0, 0x8e6e, 0xba16, 0x05ea, + 0x13e5, 0x9055, 0x92f1, 0xe794, 0x833e, 0xb067, 0x6d21, 0x81bb, + 0x3050, 0xdeb9, 0x9155, 0x083f, 0x9c03, 0x3542, 0x591c, 0x51e5, + 0xd55d, 0x8eaf, 0x9a08, 0xe615, 0xe825, 0xdef6, 0x39e6, 0x6c38, + 0x4946, 0x7a7d, 0x3226, 0x7788, 0xe54d, 0xa781, 0x96de, 0xb429, + 0x441b, 0x1424, 0x971f, 0xb88f, 0x1233, 0xef08, 0xc3de, 0xe0c6, + 0x39de, 0x57bc, 0x3f06, 0xcd3d, 0x476c, 0x7303, 0x88c0, 0xea91, + 0xcb29, 0xccc7, 0x646d, 0xb883, 0x9088, 0xac83, 0x6ae8, 0xb5a7, + 0x1c1b, 0xfe2c, 0x2a6e, 0x8dd1, 0xce97, 0xfb36, 0x6ec5, 0x2fa4, + 0x97ae, 0xa7e6, 0x11ac, 0x6448, 0x8c47, 0x6d36, 0xebf1, 0xe7b1, + 0x1ab1, 0x9890, 0x4f50, 0x97d5, 0xdf5b, 0x491f, 0x70dc, 0x2b00, + 0xc163, 0x9a73, 0x269d, 0xba3f, 0x07d4, 0x6a3f, 0x6c9f, 0x8a2b, + 0xb4f4, 0x32c3, 0x03a1, 0xcfa0, 0x5dfa, 0xb2ee, 0x62d0, 0x3cca, + 0x5f21, 0x60d3, 0x6b02, 0xc5e7, 0x4f16, 0x444a, 0xef24, 0x9474, + 0x0488, 0x6fd6, 0x4846, 0x3277, 0x20c8, 0x792c, 0x7854, 0x7b64, + 0xa74e, 0x621d, 0x087c, 0x2460, 0xa3cc, 0xa454, 0x081f, 0xb377, + 0x198f, 0x77b3, 0xd24a, 0x5c09, 0xa58d, 0x063b, 0x219e, 0x6ac7, + 0xd2e2, 0x7e00, 0x7116, 0xd49e, 0x8000, 0x34d3, 0xdaf7, 0xe952, + 0xa5f5, 0x0499, 0xca39, 0x83f0, 0x5ba9, 0x3f83, 0xad02, 0xa010, + 0x1a8c, 0x0f6d, 0x0c26, 0x7200, 0xbd85, 0x2f4a, 0x7047, 0x5a3a, + 0x46ef, 0x8752, 0x53d2, 0x8ab1, 0x25c2, 0x3114, 0x1062, 0x56ff, + 0x1468, 0x0fb1, 0xa287, 0xd693, 0x99f1, 0xc3d3, 0x9995, 0xd090, + 0x26c1, 0x4f8b, 0xd550, 0xfcf9, 0xbbef, 0x37f2, 0x0cbd, 0xb828, + 0x8201, 0x65d6, 0x4197, 0x4ff1, 0xbf10, 0x21bb, 0xa1bb, 0xb62a, + 0xaa20, 0x9623, 0x6cf5, 0x8606, 0xeab4, 0x1790, 0x0299, 0x2124, + 0x2f6b, 0xade8, 0xc476, 0x14a9, 0xef8e, 0x869a, 0x63a3, 0x6a5a, + 0x7ba7, 0xdcc1, 0x6ffb, 0x59ba, 0x7da7, 0xa9fd, 0x53b7, 0xc00d, + 0x86ca, 0xc848, 0x73d9, 0x8e73, 0xba01, 0xf0b8, 0x498b, 0xe805, + 0xa44a, 0x1b64, 0x02d6, 0x0c41, 0x75d9, 0x2620, 0x2f5f, 0x1f23, + 0x352b, 0x5ee1, 0xfab2, 0xd204, 0x94bd, 0xa7d5, 0xba7a, 0xe0f1, + 0x61e1, 0x0a01, 0x0099, 0xf587, 0x6eb4, 0x88a9, 0xbcb2, 0x1205, + 0xa0fd, 0x92fa, 0xad3d, 0xc4d6, 0x535c, 0xd001, 0x8394, 0x3267, + 0xb565, 0x2eab, 0xf410, 0x52ba, 0x6b0f, 0xd5ba, 0xa564, 0xd5c3, + 0x7be2, 0x08db, 0x7d0f, 0xe120, 0x9632, 0x18a3, 0x5419, 0x9cc3, + 0x9c64, 0x3e94, 0x17be, 0x5cdf, 0x7a1f, 0x0aae, 0xe18f, 0xc426, + 0x5877, 0x5d5a, 0x644d, 0x0d8a, 0x8b00, 0xf56a, 0xcde8, 0xbe31, + 0xa969, 0x6d29, 0x3f4f, 0x5ed2, 0x6fd8, 0x1e22, 0x934b, 0x5ff6, + 0x2959, 0x7596, 0x6233, 0x924b, 0x7535, 0x300c, 0x7570, 0xb550, + 0x3685, 0x09d1, 0x13a7, 0x5a1c, 0xbe5b, 0x574a, 0x5615, 0x127c, + 0x4a53, 0x76ec, 0x7660, 0xeb1e, 0xfab9, 0x89e2, 0x771c, 0x8945, + 0x0eb8, 0x6a56, 0x57d5, 0xefdd, 0x6773, 0x6b19, 0x2772, 0x98ea, + 0xef70, 0xdd09, 0xc7fe, 0x6b9d, 0x1993, 0x87a6, 0x529b, 0xd705, + 0xf76b, 0xa5ab, 0xf3ac, 0xfb3a, 0xd159, 0xc57f, 0x684e, 0x3d38, + 0xe56b, 0x8ea0, 0x669b, 0x53da, 0xdedc, 0x8b00, 0x94b2, 0x58b8, + 0xd12b, 0xcd32, 0x49cc, 0x9f95, 0xc2db, 0x521e, 0x1872, 0xc880, + 0x03ad, 0xc752, 0x039f, 0x3ba4, 0x84bd, 0xcdc4, 0xc6fd, 0x29c5, + 0x5e00, 0x7c1e, 0xa3d9, 0xa749, 0x8a16, 0x5635, 0xa59b, 0xa8de, + 0x9618, 0x5a8d, 0x4691, 0xd66b, 0x4ee6, 0xbf20, 0x4162, 0x9871, + 0xc4af, 0x1ce8, 0xdd28, 0xed77, 0x2840, 0x2323, 0xb598, 0xbd2f, + 0x6be8, 0x4fc8, 0x5b47, 0x1690, 0x0c71, 0xaae2, 0x11bc, 0x6ba0, + 0xba4d, 0x01c9, 0x16ec, 0x36cf, 0xa35c, 0xd5f2, 0x1338, 0x8a94, + 0x3a69, 0x930f, 0x9ce7, 0xca46, 0x5a5d, 0xca6d, 0x283d, 0x50ca, + 0x18ad, 0x13bd, 0xa5fc, 0x5950, 0x9bdd, 0x5f18, 0xf979, 0x71c4, + 0xa496, 0x1be8, 0x0421, 0x46bc, 0x050a, 0x021e, 0xe8f2, 0x4f44, +}; +static const unsigned char kat_mldsa65_sig_ph256[] = { + 0x5f, 0x1b, 0xf9, 0x76, 0xda, 0x3c, 0xfa, 0xe8, 0x14, 0x23, 0x14, 0xd4, + 0xf4, 0x10, 0xc0, 0x8c, 0x1f, 0x35, 0x31, 0x9e, 0x64, 0xd5, 0x3c, 0x97, + 0xf3, 0x3c, 0x93, 0xad, 0x78, 0xfe, 0x99, 0x45, 0x9e, 0xdd, 0x88, 0x73, + 0x69, 0x49, 0x09, 0xd0, 0xd2, 0xfc, 0xf2, 0x94, 0xb2, 0x39, 0xb1, 0xf6, + 0x5b, 0x6e, 0xd7, 0x4a, 0x25, 0xb1, 0x45, 0x39, 0xe1, 0x5d, 0x81, 0xeb, + 0xd7, 0x7b, 0x8a, 0x66, 0x15, 0x8b, 0xe1, 0x29, 0x0b, 0x52, 0x96, 0x00, + 0x4b, 0x93, 0xbe, 0xe4, 0x33, 0x8f, 0x04, 0xb1, 0xc7, 0xaa, 0x88, 0x95, + 0x24, 0x36, 0x60, 0x1f, 0xda, 0xac, 0x71, 0x04, 0x34, 0xe0, 0x97, 0x72, + 0xa8, 0xc1, 0x8f, 0xc1, 0x00, 0x0d, 0x3a, 0x73, 0x17, 0xd2, 0xb3, 0xed, + 0xc3, 0x87, 0x19, 0x3a, 0xee, 0x1c, 0x81, 0x18, 0x3b, 0xe4, 0x16, 0xd2, + 0xaa, 0xa7, 0x20, 0x22, 0xce, 0xfd, 0xaa, 0xd6, 0x42, 0xd5, 0x23, 0x7b, + 0x79, 0xa3, 0x8d, 0xa4, 0x4c, 0x05, 0xc0, 0x20, 0xa1, 0xd0, 0xb3, 0x10, + 0x02, 0x28, 0xee, 0xc1, 0xeb, 0xe9, 0x24, 0x2e, 0xb7, 0xba, 0xc1, 0x3e, + 0xf3, 0x1f, 0x3c, 0x00, 0x38, 0x4e, 0xfc, 0x98, 0x32, 0x16, 0x2e, 0xd3, + 0x14, 0xd1, 0x42, 0x0e, 0x21, 0xec, 0x80, 0xff, 0xb1, 0xd3, 0x5a, 0x42, + 0xdb, 0xe2, 0xf0, 0x3e, 0x90, 0x5c, 0x51, 0x9a, 0xa2, 0xce, 0x5d, 0xdd, + 0x01, 0xea, 0x56, 0x38, 0xa6, 0x27, 0x71, 0x8e, 0xe8, 0x47, 0x7d, 0xa2, + 0x66, 0x5a, 0x5d, 0x43, 0x1d, 0x21, 0xfb, 0x01, 0xf6, 0xd2, 0xc1, 0xb9, + 0xfd, 0x03, 0x9c, 0xa3, 0xec, 0xc0, 0xf7, 0x5e, 0xf2, 0x6b, 0x24, 0xb8, + 0x5f, 0x19, 0x8c, 0x27, 0xae, 0x18, 0x5d, 0xbb, 0xfc, 0x24, 0x20, 0x24, + 0x18, 0xc0, 0xc6, 0x01, 0xc5, 0x4a, 0x8c, 0x2c, 0xac, 0xa1, 0x1e, 0xa6, + 0xc3, 0x5a, 0x9a, 0x94, 0x55, 0x14, 0x83, 0xb0, 0x35, 0x57, 0x28, 0x31, + 0x12, 0x30, 0xd3, 0xb9, 0x94, 0x0d, 0xad, 0xca, 0x71, 0x1c, 0x09, 0x5f, + 0x75, 0xfd, 0xcd, 0x66, 0x89, 0x15, 0xd4, 0x6e, 0x3e, 0x75, 0x51, 0xeb, + 0x48, 0x2f, 0x0d, 0x78, 0x8d, 0x80, 0x71, 0xf0, 0xfb, 0xd3, 0x45, 0x57, + 0x0e, 0x8e, 0x77, 0x76, 0x9c, 0x77, 0xcc, 0x34, 0xf2, 0x29, 0xbd, 0x4b, + 0xa9, 0x35, 0xa3, 0xd4, 0xc2, 0xf2, 0xb9, 0x40, 0x01, 0xf5, 0xbd, 0xc8, + 0x27, 0x04, 0x7b, 0xeb, 0x02, 0x8c, 0x4f, 0xc1, 0x17, 0xe3, 0x6d, 0x34, + 0x39, 0xfb, 0x04, 0xd1, 0x5f, 0x2d, 0x64, 0xe1, 0x6f, 0x0e, 0x0a, 0xcd, + 0xcd, 0xca, 0x89, 0xcc, 0xf2, 0x17, 0x6e, 0x7e, 0x48, 0xc0, 0x75, 0x5a, + 0x8d, 0x85, 0xaf, 0x01, 0x4e, 0x41, 0x25, 0x87, 0x24, 0x8a, 0x0e, 0xba, + 0x4c, 0xfc, 0x21, 0x6f, 0x7f, 0x7e, 0x02, 0x9d, 0x4c, 0x3c, 0x91, 0x5f, + 0x33, 0x06, 0x6d, 0x02, 0xf5, 0x87, 0xa6, 0x59, 0xa5, 0xb4, 0xe8, 0x79, + 0x92, 0x5a, 0xc0, 0x4b, 0x75, 0x58, 0xf1, 0x53, 0xf7, 0x6f, 0x91, 0x27, + 0x54, 0x34, 0x3a, 0xaf, 0x92, 0x17, 0x45, 0x24, 0x47, 0x79, 0x2b, 0xc3, + 0x0a, 0xab, 0xc2, 0xcd, 0xe7, 0x77, 0x71, 0x77, 0x87, 0x19, 0xde, 0x0e, + 0x3b, 0x1f, 0xac, 0xc3, 0xcb, 0x7b, 0xb8, 0x15, 0x00, 0x39, 0x3a, 0xcd, + 0x52, 0xe4, 0x02, 0xdd, 0x09, 0x0e, 0xd5, 0x41, 0x48, 0x4c, 0x08, 0x0f, + 0x94, 0xea, 0xdf, 0x35, 0xb5, 0x1d, 0x80, 0xf4, 0xa3, 0xdc, 0x5f, 0xbf, + 0x4c, 0x65, 0x27, 0x47, 0xef, 0x72, 0x13, 0x1f, 0xb9, 0x88, 0x85, 0xb2, + 0xef, 0xd2, 0xa0, 0xad, 0xae, 0xee, 0x13, 0x3c, 0xdb, 0x89, 0x5f, 0x78, + 0x45, 0xc7, 0xf3, 0x9d, 0x9e, 0xb4, 0x86, 0xbe, 0xd1, 0x56, 0xa2, 0x25, + 0x79, 0x82, 0x61, 0x29, 0x1d, 0x6e, 0xb8, 0x4c, 0xb6, 0xa8, 0xac, 0x34, + 0x14, 0x05, 0xb9, 0x58, 0xe2, 0x8a, 0x11, 0x44, 0xcc, 0xc8, 0x31, 0x8b, + 0xa4, 0xc0, 0x25, 0x54, 0x9f, 0x2d, 0x8b, 0x8e, 0x25, 0x9e, 0xd9, 0xcf, + 0xf2, 0xc0, 0x05, 0x11, 0xba, 0x90, 0x3b, 0x86, 0x35, 0xf9, 0x5d, 0x19, + 0x7e, 0x01, 0xdc, 0x40, 0x23, 0xe5, 0x2a, 0x5e, 0xc5, 0x01, 0x01, 0x46, + 0xdc, 0xbe, 0x9b, 0x01, 0xab, 0xd7, 0x6e, 0xb7, 0xc8, 0xd2, 0xe1, 0x39, + 0xe9, 0x8a, 0x50, 0x16, 0xc7, 0xef, 0x11, 0xff, 0xc4, 0xc3, 0xc5, 0x5c, + 0xfd, 0x41, 0xf6, 0xcd, 0xc3, 0x6a, 0x53, 0x27, 0xf6, 0x99, 0xcb, 0xb0, + 0x4a, 0x5b, 0x77, 0xbb, 0x71, 0x68, 0x20, 0x1e, 0xf2, 0x34, 0x6d, 0x1c, + 0xdd, 0xda, 0xef, 0x88, 0xb4, 0x06, 0x0f, 0x73, 0xcc, 0x54, 0x6a, 0x18, + 0x1b, 0xbc, 0x8d, 0xdb, 0xda, 0xc2, 0x56, 0xf2, 0x79, 0x3b, 0x93, 0xcb, + 0xe2, 0xcf, 0x3a, 0xad, 0x67, 0xb7, 0x72, 0x43, 0x4b, 0x90, 0x56, 0xed, + 0x14, 0x6c, 0x0d, 0x97, 0xe8, 0x5d, 0x09, 0x71, 0xf1, 0xfd, 0x65, 0x15, + 0x07, 0x74, 0x12, 0x2b, 0xd7, 0x12, 0x6f, 0x81, 0x37, 0x96, 0x6b, 0x33, + 0x3c, 0x95, 0x30, 0x41, 0x7e, 0xdf, 0x3b, 0xad, 0x67, 0x43, 0x69, 0x40, + 0xda, 0x9e, 0xf5, 0x8c, 0xe1, 0xd9, 0x2f, 0xda, 0x6c, 0xff, 0xe3, 0xbf, + 0xaf, 0xbc, 0x42, 0xc0, 0x9c, 0x38, 0xad, 0xd3, 0x4a, 0x25, 0xc0, 0xfe, + 0xe1, 0xb9, 0xa8, 0x19, 0xae, 0x65, 0x06, 0x52, 0xaa, 0xe8, 0x40, 0xab, + 0x43, 0xa7, 0xa9, 0xe1, 0xac, 0x07, 0x46, 0xd9, 0xfd, 0x53, 0x1b, 0xbe, + 0x6c, 0x30, 0x56, 0x14, 0x09, 0x8e, 0xda, 0x34, 0x0b, 0x9f, 0x7c, 0x97, + 0x67, 0x60, 0x99, 0x59, 0x6a, 0x8d, 0x92, 0x19, 0x7d, 0xd1, 0x09, 0x0d, + 0x15, 0x1e, 0x15, 0x9e, 0xc2, 0x3a, 0x0e, 0x01, 0x22, 0x13, 0x7b, 0x0e, + 0xf3, 0x55, 0xe7, 0x1d, 0x42, 0x2e, 0x85, 0x3e, 0xf2, 0x7b, 0xa2, 0x58, + 0xfa, 0xce, 0x77, 0xc0, 0xcc, 0x06, 0x89, 0x6d, 0x6f, 0x1b, 0x42, 0xe9, + 0xa8, 0x4f, 0x8c, 0x2f, 0x3b, 0x9b, 0x58, 0x73, 0x59, 0x3e, 0x58, 0x6d, + 0x47, 0x92, 0xed, 0xac, 0x0d, 0x43, 0x97, 0x40, 0xe9, 0x8c, 0x64, 0x87, + 0x74, 0x31, 0x40, 0x42, 0xbc, 0x69, 0x6f, 0x90, 0xc6, 0x58, 0x64, 0x53, + 0x38, 0xb8, 0xf3, 0xc6, 0xf2, 0xf0, 0xaf, 0x97, 0x7c, 0xe3, 0x7f, 0x5f, + 0x10, 0xf8, 0x07, 0xbf, 0xc1, 0x29, 0xe7, 0xa0, 0xb2, 0xbb, 0x59, 0x48, + 0xa4, 0x59, 0x3b, 0x8b, 0x37, 0x13, 0x22, 0x63, 0xa1, 0x9b, 0x77, 0xfa, + 0x6d, 0x0b, 0x3c, 0xfe, 0x0d, 0x8b, 0x4d, 0x9d, 0xe3, 0x48, 0x65, 0x06, + 0xd5, 0xf6, 0xba, 0xa7, 0xb8, 0x52, 0xa9, 0xab, 0xd0, 0x05, 0x0d, 0xa8, + 0x44, 0xd3, 0x69, 0xc9, 0xb2, 0xf4, 0x88, 0xd7, 0xe6, 0xcd, 0x1a, 0x3e, + 0x55, 0xd7, 0x6b, 0x5c, 0xfe, 0xfa, 0x78, 0x94, 0x9c, 0xc9, 0xaf, 0xc6, + 0x8b, 0x98, 0x32, 0x38, 0xef, 0xe6, 0xd1, 0xd1, 0x65, 0x36, 0xde, 0x78, + 0x4f, 0x64, 0x15, 0xaa, 0x3a, 0xc4, 0xed, 0x41, 0xc8, 0xfc, 0x5a, 0x26, + 0xb5, 0xbc, 0xfc, 0x1a, 0x31, 0x56, 0x04, 0x9f, 0xe6, 0x49, 0xb4, 0x2b, + 0xd1, 0xf6, 0x47, 0xde, 0xdc, 0x69, 0xa3, 0x40, 0x53, 0xbe, 0x20, 0xbf, + 0xd2, 0x18, 0xed, 0xf3, 0x0a, 0x72, 0xb9, 0xd4, 0x70, 0x81, 0x97, 0x9a, + 0xff, 0x98, 0x19, 0xb7, 0x5e, 0x96, 0x70, 0xbe, 0x54, 0x4c, 0x25, 0x88, + 0x0b, 0x02, 0x39, 0x49, 0x0e, 0x7f, 0x02, 0xa3, 0xac, 0xe7, 0x6d, 0x06, + 0x35, 0xd2, 0x26, 0xc2, 0xb0, 0xf8, 0x63, 0xd9, 0xde, 0xf4, 0xb6, 0xc2, + 0x9e, 0x56, 0x7c, 0x1f, 0xee, 0x91, 0x1f, 0x98, 0xf2, 0x32, 0xdd, 0x7a, + 0x66, 0x18, 0x0e, 0xbc, 0xbb, 0x80, 0x94, 0x13, 0x82, 0x98, 0xc0, 0x32, + 0x11, 0x13, 0x24, 0x65, 0x7a, 0x67, 0xd3, 0x3c, 0xc9, 0x4f, 0x50, 0xf0, + 0xa8, 0x42, 0xa1, 0xb6, 0x3d, 0xf4, 0x2c, 0xd8, 0x14, 0xc6, 0xb5, 0x76, + 0xa4, 0x79, 0x0c, 0xc1, 0x03, 0x91, 0x3f, 0x41, 0x37, 0x69, 0x90, 0x33, + 0x1c, 0xa5, 0x3e, 0x88, 0x89, 0x53, 0x9c, 0x29, 0x9e, 0xfc, 0x2f, 0xa1, + 0x0e, 0x57, 0x9d, 0x41, 0x7e, 0xbf, 0x0c, 0x67, 0x90, 0x2a, 0xc7, 0x2e, + 0xcb, 0x99, 0x9b, 0x01, 0xc4, 0x4e, 0xaf, 0x86, 0xce, 0xfb, 0x2e, 0x26, + 0x95, 0x71, 0xc4, 0xfa, 0xec, 0x42, 0x70, 0x9f, 0x96, 0x81, 0x3a, 0xa8, + 0x56, 0x7a, 0x4b, 0x73, 0x7d, 0xe1, 0xb5, 0x10, 0xdd, 0x50, 0x39, 0x4b, + 0x78, 0x74, 0xad, 0x2f, 0xc5, 0x2f, 0x75, 0xdf, 0x96, 0x9a, 0xd0, 0x50, + 0x0c, 0x9d, 0x5a, 0x0c, 0xed, 0xd6, 0xcc, 0x93, 0x83, 0x90, 0xe7, 0x9a, + 0x82, 0xb6, 0x9c, 0xba, 0xa2, 0xb4, 0xe0, 0x44, 0x3d, 0x97, 0x14, 0xf2, + 0x99, 0x41, 0x8e, 0x25, 0x31, 0x39, 0xe8, 0xf8, 0x00, 0xac, 0x2a, 0x06, + 0xb4, 0xb3, 0x36, 0x66, 0xd5, 0x06, 0x5e, 0x1b, 0x08, 0xa2, 0x09, 0x8e, + 0x7f, 0x98, 0xcd, 0x66, 0x0b, 0xcb, 0x82, 0x4d, 0xd5, 0x23, 0x40, 0x42, + 0xcb, 0x6a, 0x72, 0x60, 0x3c, 0xf6, 0xa9, 0xa0, 0xf4, 0xbd, 0xd4, 0xd6, + 0xb1, 0x7c, 0x2c, 0x5e, 0x2e, 0xf4, 0xa9, 0x22, 0x87, 0xf4, 0x58, 0x12, + 0xbc, 0x7c, 0x17, 0xec, 0x34, 0x75, 0xf4, 0x15, 0x2b, 0xc4, 0x9b, 0x2a, + 0x0c, 0x17, 0x49, 0x1d, 0x01, 0xd1, 0x7b, 0x76, 0x35, 0x5e, 0x56, 0x7a, + 0x5d, 0x34, 0x12, 0x6a, 0x3e, 0xcc, 0xad, 0xfb, 0x88, 0x75, 0x1c, 0x4f, + 0x5d, 0xc5, 0x53, 0x38, 0xb2, 0xe9, 0x31, 0x2d, 0x74, 0x35, 0xd0, 0x95, + 0xa3, 0xf8, 0xc4, 0xfd, 0x1d, 0xac, 0x15, 0x0a, 0xc1, 0x3e, 0xe2, 0x38, + 0x93, 0xfd, 0x0f, 0x88, 0x9f, 0xe5, 0x6c, 0x0f, 0x34, 0x07, 0x47, 0x9d, + 0x0d, 0x62, 0x50, 0x14, 0x6f, 0x24, 0xc3, 0x1e, 0xd9, 0x3f, 0x1b, 0x58, + 0x61, 0x91, 0xc4, 0x90, 0x16, 0x00, 0xb9, 0x98, 0x94, 0xe4, 0x40, 0x05, + 0x0b, 0x73, 0x7f, 0xb0, 0x4a, 0x19, 0x0e, 0x8c, 0x34, 0xab, 0x99, 0x86, + 0x4f, 0x6d, 0x3d, 0x91, 0xcd, 0xd1, 0x04, 0xf5, 0x23, 0x97, 0xd8, 0x54, + 0xba, 0xfe, 0x10, 0x82, 0x8e, 0x4e, 0xd8, 0xfc, 0x1b, 0xe9, 0x29, 0x6d, + 0x7c, 0x78, 0x39, 0xec, 0x63, 0x39, 0x67, 0x8c, 0x55, 0xdd, 0x28, 0xb9, + 0x93, 0x0d, 0x46, 0x71, 0xc3, 0x31, 0x62, 0x79, 0x66, 0x1b, 0xbd, 0x93, + 0x79, 0x10, 0xfd, 0xef, 0xae, 0xf8, 0xa5, 0x75, 0x90, 0xe3, 0x79, 0x54, + 0x30, 0x5c, 0x4d, 0x58, 0x22, 0xb3, 0xd1, 0x8f, 0xa7, 0xc6, 0xe7, 0xa6, + 0x29, 0x62, 0x1d, 0x30, 0x81, 0xb7, 0xa9, 0xfc, 0xaa, 0x64, 0x3d, 0xba, + 0x1c, 0x30, 0x3b, 0x03, 0x8e, 0x83, 0x87, 0xfe, 0x1e, 0xdc, 0x33, 0x07, + 0x42, 0x14, 0x74, 0xcf, 0x80, 0xab, 0x19, 0x92, 0x4f, 0x20, 0x74, 0xcf, + 0xc7, 0xbe, 0x92, 0xf2, 0x0b, 0xcc, 0xbe, 0xbf, 0x2f, 0x81, 0x01, 0x7a, + 0xba, 0x9b, 0x34, 0x38, 0x5a, 0x86, 0xb4, 0xa9, 0x6e, 0xaa, 0xd5, 0x5b, + 0xe3, 0x45, 0x4c, 0x54, 0x19, 0x28, 0x38, 0x28, 0x40, 0x42, 0xef, 0x07, + 0xa3, 0xfb, 0x96, 0x6f, 0x10, 0x63, 0x07, 0x46, 0xf5, 0x04, 0xb2, 0x05, + 0xe5, 0xe9, 0x28, 0xac, 0x12, 0xf0, 0x76, 0xa7, 0x0e, 0x70, 0x39, 0x1f, + 0x2d, 0xfe, 0x5f, 0x99, 0x67, 0x38, 0xd9, 0x2c, 0x66, 0x59, 0xef, 0x08, + 0x1f, 0x14, 0x55, 0xb9, 0x38, 0x32, 0xef, 0xc2, 0xdc, 0xbe, 0xad, 0xaa, + 0xf5, 0xa4, 0x5e, 0xa8, 0xa6, 0xc8, 0x11, 0xff, 0x14, 0x6e, 0xba, 0xe0, + 0xd6, 0x70, 0x2e, 0xb3, 0x6a, 0x01, 0x5a, 0x90, 0x1d, 0xfc, 0x32, 0x8d, + 0x86, 0x2c, 0x39, 0x42, 0xc8, 0x65, 0xa0, 0xcf, 0x5b, 0xc2, 0xd6, 0x12, + 0x9c, 0x31, 0x85, 0xff, 0x22, 0x8e, 0x0d, 0x21, 0x2a, 0xab, 0x30, 0xd8, + 0x91, 0x67, 0x13, 0x62, 0x16, 0xe3, 0x30, 0x35, 0x86, 0x17, 0x07, 0x11, + 0xee, 0x4a, 0x9c, 0xea, 0x2c, 0x60, 0x1a, 0x34, 0x22, 0x46, 0x7f, 0x4f, + 0x9b, 0xfd, 0x3f, 0xf7, 0x34, 0x88, 0x08, 0x8c, 0x89, 0xa2, 0xfa, 0x2d, + 0x3f, 0xa9, 0xd4, 0x26, 0x9a, 0x6e, 0xa1, 0x85, 0x64, 0xea, 0xe0, 0xe8, + 0x0d, 0x73, 0xb7, 0x66, 0x0a, 0xb4, 0x71, 0x4e, 0x1e, 0xb9, 0x8e, 0x32, + 0x90, 0x7e, 0x53, 0xd9, 0x0a, 0x46, 0xc7, 0x53, 0xd4, 0x38, 0xc5, 0xf6, + 0x93, 0xb4, 0xf4, 0xcb, 0xaf, 0x1c, 0xf5, 0xc3, 0xbe, 0x3e, 0x18, 0xc9, + 0x7b, 0x8a, 0x85, 0x8a, 0x04, 0x31, 0x00, 0xcd, 0x59, 0xf9, 0x0f, 0x11, + 0x5d, 0xc3, 0x8c, 0x2e, 0x06, 0xee, 0xb4, 0x9b, 0xc9, 0x42, 0x1b, 0xe0, + 0x8a, 0x27, 0x14, 0x13, 0x5c, 0x9c, 0x5a, 0x65, 0xee, 0x9d, 0x13, 0xe5, + 0x33, 0x5b, 0x5a, 0x3b, 0x39, 0x8c, 0x68, 0xb1, 0xd4, 0xac, 0x0c, 0xd6, + 0xf2, 0x5c, 0xa9, 0xe1, 0x0d, 0xce, 0xee, 0x5c, 0x86, 0xd8, 0x98, 0x25, + 0x18, 0x17, 0x52, 0xe6, 0x8c, 0x3f, 0x04, 0x55, 0x21, 0x0b, 0x7a, 0xa3, + 0xd8, 0x0d, 0x5c, 0x3e, 0x93, 0xc4, 0x9c, 0x55, 0x33, 0x67, 0xcb, 0x11, + 0x1e, 0x07, 0xc6, 0xc2, 0xd1, 0x02, 0xf5, 0xbb, 0x08, 0xbe, 0x3f, 0x12, + 0x4e, 0x92, 0x07, 0x11, 0xc6, 0xf0, 0x15, 0xf9, 0x95, 0x21, 0x93, 0x6e, + 0x7e, 0x81, 0x9b, 0x54, 0x5f, 0xae, 0x2e, 0x30, 0x4f, 0x50, 0x06, 0x79, + 0x1d, 0xcd, 0x86, 0x57, 0x16, 0x68, 0x0d, 0x02, 0x74, 0x19, 0xbd, 0x82, + 0xaf, 0x33, 0xe4, 0x19, 0x8d, 0x20, 0x4a, 0x81, 0xaf, 0x8c, 0xc9, 0xce, + 0x76, 0x45, 0xc2, 0x0f, 0x70, 0x95, 0x55, 0x8c, 0x8e, 0x22, 0x94, 0x1d, + 0x1f, 0x34, 0x69, 0xbc, 0xef, 0x50, 0xdb, 0x25, 0xb9, 0xc1, 0x56, 0x85, + 0x5d, 0x7c, 0x24, 0xf4, 0x93, 0x6c, 0xa5, 0xc9, 0xe3, 0x27, 0x7b, 0x8b, + 0xf3, 0x1e, 0x3c, 0xbc, 0xde, 0xd1, 0x97, 0x75, 0x40, 0x05, 0xc1, 0x27, + 0x95, 0xa5, 0x25, 0xbc, 0x00, 0xab, 0x3a, 0x73, 0x63, 0xbd, 0x22, 0x65, + 0x69, 0x03, 0x3a, 0x95, 0xc4, 0xc1, 0xdb, 0x0e, 0xd4, 0x62, 0x8b, 0xb3, + 0xe0, 0xa3, 0xce, 0x9f, 0x7a, 0x41, 0x03, 0x20, 0xf3, 0x00, 0x31, 0x07, + 0x2b, 0xdc, 0x41, 0x6a, 0xdd, 0xd3, 0xdf, 0xab, 0x64, 0x9f, 0x0e, 0x15, + 0x85, 0x89, 0x12, 0x61, 0x53, 0x55, 0xdd, 0xd8, 0xc3, 0x2e, 0xa0, 0xea, + 0x1d, 0xca, 0x47, 0x40, 0x70, 0xda, 0x1f, 0x2a, 0x47, 0x4c, 0x47, 0x14, + 0x27, 0x91, 0x86, 0x5c, 0x44, 0xd8, 0xd1, 0x86, 0x80, 0xce, 0x80, 0xd3, + 0x7b, 0x70, 0x77, 0x60, 0xb2, 0x13, 0xab, 0x1b, 0x6b, 0xb5, 0xfc, 0x92, + 0x82, 0x92, 0xfc, 0x01, 0xaf, 0xd4, 0x7e, 0xc7, 0xe1, 0x79, 0x1e, 0x47, + 0x76, 0x95, 0x2c, 0xea, 0x0c, 0xf0, 0x41, 0xbd, 0x94, 0xa0, 0xe1, 0xc6, + 0x0d, 0x78, 0xe3, 0x10, 0x98, 0xfd, 0xe8, 0xca, 0x7a, 0x00, 0x56, 0x5a, + 0x2c, 0xb9, 0x0b, 0x89, 0xd2, 0x49, 0x36, 0xfb, 0x8f, 0xa1, 0x10, 0xdd, + 0xbc, 0xb8, 0x9e, 0x24, 0xd1, 0x85, 0x1f, 0x09, 0x8c, 0xf0, 0x5e, 0xc2, + 0xcc, 0x40, 0xb2, 0xaa, 0x0b, 0x97, 0x75, 0x63, 0x86, 0x27, 0xf4, 0x78, + 0x1e, 0x65, 0x45, 0x01, 0x11, 0x36, 0x86, 0xe3, 0x4d, 0xd6, 0xef, 0x1a, + 0xe3, 0xd7, 0xc9, 0xda, 0x57, 0xe1, 0x5b, 0xef, 0x7c, 0xb8, 0xae, 0x30, + 0x25, 0x86, 0x44, 0x34, 0x80, 0x17, 0xc3, 0x4c, 0x97, 0x02, 0x14, 0x72, + 0xf3, 0xf2, 0xe9, 0x93, 0x06, 0xb0, 0x4e, 0x8a, 0x53, 0x9f, 0x0e, 0xae, + 0xc7, 0xf3, 0x11, 0xa0, 0x3c, 0xad, 0x26, 0x7b, 0x63, 0x61, 0x91, 0x99, + 0x9e, 0x93, 0x2e, 0xda, 0x7b, 0x3a, 0x1e, 0xfd, 0xcb, 0x10, 0xc6, 0x8b, + 0x13, 0x97, 0xf6, 0x00, 0x19, 0xd1, 0x03, 0x0d, 0x92, 0xc4, 0x64, 0xfb, + 0x5e, 0x8d, 0xda, 0x61, 0xe6, 0x95, 0xb8, 0x5b, 0xcb, 0x73, 0xc4, 0xe5, + 0x32, 0x4f, 0x50, 0x75, 0x96, 0xcd, 0xe7, 0x52, 0xa6, 0x2f, 0x37, 0x37, + 0x50, 0x90, 0x19, 0xcd, 0x47, 0x4e, 0x93, 0x34, 0x06, 0x42, 0x76, 0x7d, + 0x48, 0x1d, 0x10, 0xae, 0xb1, 0xfb, 0x0a, 0x60, 0x3d, 0xbc, 0x55, 0x92, + 0x47, 0x74, 0x75, 0x85, 0xa6, 0xc5, 0xb0, 0x36, 0xff, 0xe1, 0x7a, 0xbc, + 0x18, 0x9f, 0x0b, 0x61, 0x0d, 0xe8, 0x8a, 0x26, 0x2d, 0x6d, 0xf3, 0x58, + 0xba, 0xdd, 0x14, 0x18, 0x93, 0xf8, 0x0d, 0xd0, 0x10, 0x47, 0x65, 0x31, + 0xc4, 0x32, 0x73, 0x3e, 0x34, 0xc8, 0x1a, 0xaf, 0xc6, 0x09, 0xd5, 0xb7, + 0xd9, 0x31, 0x24, 0x22, 0xda, 0xc8, 0xde, 0x0b, 0xe2, 0x1a, 0x43, 0x86, + 0x82, 0xd1, 0xf6, 0x06, 0xdf, 0x26, 0x68, 0xa8, 0xc0, 0xbd, 0xa5, 0x1b, + 0xdc, 0x36, 0x33, 0x81, 0x2d, 0x61, 0x69, 0xb4, 0x3d, 0xfd, 0x60, 0xe4, + 0x63, 0x97, 0xa2, 0xef, 0x3c, 0x6b, 0x90, 0x47, 0xef, 0x05, 0xec, 0x14, + 0x08, 0x79, 0x90, 0xe1, 0xe6, 0x1a, 0x45, 0x95, 0xaf, 0x85, 0x49, 0xc4, + 0x14, 0xfc, 0xce, 0x4e, 0xb2, 0x75, 0x77, 0xec, 0x85, 0x19, 0x20, 0xd1, + 0xbd, 0x54, 0x71, 0xe7, 0x51, 0x28, 0xca, 0xb1, 0x56, 0x2d, 0x10, 0x59, + 0x71, 0xfa, 0xd3, 0xd3, 0xaa, 0x95, 0x4d, 0x44, 0x96, 0x6e, 0x5b, 0xcf, + 0xe0, 0x54, 0xb1, 0x46, 0x8d, 0xee, 0xd4, 0xd3, 0x7b, 0xa3, 0xff, 0x1b, + 0xdd, 0xed, 0x81, 0xed, 0x9a, 0xbe, 0x99, 0x3a, 0xdd, 0x82, 0xd2, 0x30, + 0x14, 0x73, 0xfe, 0x89, 0x22, 0xcb, 0x83, 0xe0, 0x6e, 0x24, 0x14, 0xa4, + 0xea, 0x1b, 0x2c, 0x87, 0x85, 0xa2, 0x2b, 0x7b, 0x93, 0x26, 0xf2, 0xc7, + 0xd7, 0xb3, 0x98, 0xe3, 0x97, 0x87, 0x2d, 0xe6, 0xdb, 0x6e, 0x99, 0x7b, + 0xc0, 0xf7, 0xcb, 0x98, 0x47, 0xe4, 0x03, 0x79, 0x9d, 0x61, 0x3a, 0xa6, + 0x39, 0xa3, 0x50, 0xa8, 0xf6, 0x3f, 0x69, 0x31, 0xb8, 0x83, 0x55, 0xf6, + 0xf6, 0xaf, 0x84, 0xd1, 0xbc, 0xc6, 0xc2, 0x82, 0xfd, 0xac, 0x80, 0x70, + 0x9e, 0xa4, 0xd7, 0xcc, 0xec, 0xd7, 0x4f, 0xb3, 0x89, 0x89, 0x7c, 0x16, + 0xdc, 0xd7, 0x31, 0xa5, 0x3d, 0x4a, 0xb2, 0x42, 0x2b, 0xbf, 0x26, 0xb6, + 0xe5, 0x56, 0x31, 0x10, 0x78, 0x8a, 0xc6, 0x0c, 0x79, 0xc6, 0x8f, 0xac, + 0x9d, 0x01, 0x9d, 0x52, 0xcf, 0xc4, 0x65, 0xe5, 0xa1, 0x67, 0xa7, 0x42, + 0xb1, 0x2b, 0xe2, 0x7d, 0xd4, 0x2b, 0x13, 0x9a, 0x82, 0x62, 0x67, 0x4f, + 0x2e, 0xd4, 0x20, 0x80, 0x68, 0x3b, 0xde, 0xce, 0x02, 0x25, 0xea, 0x81, + 0xfb, 0x1c, 0x26, 0x79, 0x48, 0x35, 0xd3, 0xd1, 0x8d, 0x2d, 0x4b, 0x0d, + 0xcf, 0x07, 0xc0, 0xb2, 0x7d, 0x44, 0x15, 0x23, 0x53, 0x3a, 0x00, 0xda, + 0x91, 0x2f, 0x69, 0x40, 0xb8, 0x28, 0x8e, 0xfb, 0x57, 0xc0, 0x10, 0x47, + 0xeb, 0x99, 0x76, 0xe5, 0x7c, 0x2a, 0xab, 0x57, 0x0a, 0xc7, 0x69, 0x13, + 0x0f, 0x1b, 0xc0, 0xa5, 0x78, 0x86, 0x87, 0x8a, 0x3f, 0x02, 0x41, 0x22, + 0x0c, 0xd9, 0x99, 0xb7, 0x12, 0x9b, 0xd2, 0x58, 0xba, 0x9b, 0xbc, 0x7d, + 0x54, 0x68, 0xab, 0x80, 0x0d, 0x41, 0x10, 0x85, 0x6e, 0xf8, 0x8a, 0x3b, + 0x42, 0x93, 0x44, 0x5b, 0x45, 0xdc, 0x21, 0xf6, 0x42, 0x07, 0xb5, 0x8a, + 0x14, 0x8b, 0x10, 0x0a, 0x75, 0x27, 0xa3, 0xcf, 0xf2, 0x79, 0x1c, 0x6d, + 0x26, 0xa8, 0x2b, 0x9c, 0xcf, 0xfb, 0xec, 0x80, 0x84, 0xb4, 0xc7, 0x21, + 0xbf, 0x26, 0xd5, 0xdf, 0x4c, 0xcf, 0x5d, 0x12, 0xbd, 0x42, 0xf0, 0xa0, + 0x2e, 0x63, 0x4f, 0xd9, 0xae, 0x1b, 0x16, 0xb1, 0x23, 0xc0, 0x54, 0xd4, + 0x40, 0x5b, 0x8f, 0xc7, 0xc9, 0x57, 0x4d, 0xd0, 0xf8, 0x2c, 0x8e, 0xaf, + 0x93, 0xc8, 0xd0, 0xd7, 0xc2, 0x01, 0xa9, 0xd0, 0xd1, 0xb1, 0xe5, 0x56, + 0x83, 0x69, 0x1b, 0x3e, 0x94, 0x7a, 0x14, 0x25, 0x88, 0xd5, 0xe3, 0xfa, + 0x50, 0x70, 0xb6, 0x4a, 0x3c, 0x3a, 0xe8, 0x9e, 0x9e, 0x4a, 0xef, 0xd6, + 0xfe, 0x07, 0xa5, 0x2c, 0x15, 0x7c, 0x31, 0xba, 0xd1, 0x6d, 0xc4, 0x67, + 0x17, 0x38, 0xa8, 0x92, 0x60, 0x9a, 0x7b, 0xe3, 0x56, 0xcf, 0x0f, 0x78, + 0x99, 0x90, 0xe7, 0x86, 0xe9, 0x71, 0x25, 0xbf, 0x0f, 0xa0, 0x81, 0x37, + 0x88, 0xc4, 0x6b, 0x24, 0x49, 0x80, 0x0b, 0x8d, 0x21, 0xb7, 0xe7, 0x3f, + 0x46, 0x1f, 0xe7, 0x40, 0x33, 0xa5, 0xad, 0xa3, 0xe9, 0x8f, 0x82, 0x55, + 0x7b, 0x76, 0xde, 0x75, 0x08, 0xdc, 0x2e, 0x96, 0x40, 0x45, 0xb9, 0xcc, + 0x4c, 0x56, 0x3e, 0x69, 0xd9, 0x73, 0xc9, 0x05, 0x96, 0xc1, 0x30, 0x2d, + 0x3a, 0x90, 0x17, 0xd1, 0x59, 0xcb, 0xc3, 0x4c, 0x69, 0xbc, 0x92, 0x7f, + 0xe8, 0xf5, 0xca, 0x7b, 0x9c, 0xef, 0x0a, 0x29, 0xa8, 0x20, 0x49, 0xbb, + 0x15, 0x5d, 0xcf, 0x17, 0xaa, 0x50, 0xbe, 0xcc, 0x27, 0x3e, 0x56, 0xfd, + 0x34, 0x3a, 0x72, 0xf9, 0x48, 0x54, 0xd3, 0x9a, 0x50, 0xb5, 0x61, 0x22, + 0xa3, 0xf7, 0x21, 0x2e, 0x9a, 0x15, 0xca, 0x64, 0x47, 0x91, 0x30, 0xa4, + 0x4c, 0xfc, 0x09, 0x2e, 0xb7, 0xfd, 0x53, 0xd1, 0x6c, 0xe9, 0xac, 0x60, + 0xb7, 0xe9, 0xc5, 0x54, 0xee, 0xdf, 0x40, 0x0e, 0xa2, 0x31, 0x1b, 0x48, + 0x62, 0x1b, 0xf1, 0xef, 0x17, 0x71, 0x2a, 0x37, 0x6a, 0x1d, 0x68, 0xa5, + 0xea, 0x61, 0x49, 0x1e, 0x22, 0x31, 0x5f, 0xd9, 0xe2, 0xd8, 0xdc, 0x68, + 0x80, 0x36, 0x15, 0xe7, 0x2f, 0xe4, 0x62, 0x25, 0xbe, 0xb9, 0xfe, 0xd6, + 0xb2, 0x8f, 0xa7, 0x3c, 0xb3, 0x24, 0xd2, 0xf1, 0xa9, 0x66, 0x8a, 0xe8, + 0xa0, 0x97, 0x31, 0xa3, 0x3f, 0x97, 0x33, 0x93, 0xc8, 0xef, 0x07, 0x13, + 0x9d, 0x5a, 0x4f, 0xb4, 0x40, 0xc4, 0x52, 0x3b, 0x7e, 0xac, 0xe6, 0x36, + 0xc5, 0xda, 0xa3, 0xf6, 0x4e, 0x83, 0x1e, 0xd1, 0xa4, 0x52, 0x44, 0x37, + 0x02, 0x7a, 0x7d, 0xbe, 0x8a, 0xbf, 0x33, 0xe5, 0x08, 0x4f, 0xe0, 0x72, + 0xfb, 0x60, 0x09, 0x57, 0xbe, 0x13, 0xab, 0xc0, 0x5e, 0xc3, 0xe0, 0xb3, + 0x1b, 0xd9, 0xed, 0x5f, 0x3f, 0x32, 0xd2, 0x19, 0x06, 0xa8, 0xf6, 0x2e, + 0x02, 0x1e, 0xcf, 0x35, 0x6c, 0xa9, 0xea, 0x26, 0xaf, 0xd3, 0x51, 0xcd, + 0x2c, 0x8a, 0x2c, 0x01, 0x46, 0x0b, 0x28, 0xe8, 0xcd, 0x78, 0x5c, 0x33, + 0xdb, 0x97, 0x99, 0xd3, 0xe1, 0x47, 0x8b, 0x61, 0xc2, 0x68, 0x8d, 0x9c, + 0x57, 0x2a, 0xd3, 0x59, 0xc1, 0x6d, 0x26, 0x04, 0x83, 0x2a, 0x9c, 0x47, + 0xc6, 0x2f, 0x96, 0x73, 0x27, 0xed, 0xb7, 0x07, 0xc0, 0x33, 0x69, 0x77, + 0xde, 0x76, 0x5b, 0x46, 0x47, 0xb4, 0x65, 0xbb, 0x62, 0x25, 0xf9, 0x81, + 0xa2, 0xa9, 0xe6, 0xa2, 0x3a, 0x97, 0xbb, 0xe6, 0xfe, 0x8e, 0x2a, 0x29, + 0x7f, 0x62, 0xec, 0xa8, 0x4c, 0xb6, 0x21, 0xf0, 0x58, 0x9b, 0xd9, 0x7f, + 0x4c, 0x6b, 0xf5, 0x49, 0xa7, 0x0d, 0x4e, 0x9a, 0x85, 0xa3, 0x26, 0x70, + 0x37, 0x46, 0x88, 0xbc, 0xd9, 0x63, 0x86, 0x39, 0xf6, 0x75, 0x61, 0x0f, + 0x23, 0x8f, 0x71, 0x2c, 0xea, 0x48, 0x01, 0x7a, 0xe9, 0xfc, 0x3e, 0x0d, + 0x00, 0x24, 0x2b, 0x2f, 0x3f, 0x53, 0x18, 0xa0, 0xbd, 0x99, 0x91, 0xdc, + 0xc4, 0x0c, 0x4e, 0xce, 0xe4, 0x85, 0x80, 0x76, 0x63, 0x48, 0xfb, 0xaa, + 0xa1, 0x91, 0x06, 0x4d, 0xd0, 0x31, 0x4c, 0xb8, 0x77, 0x1e, 0x29, 0x24, + 0x28, 0xfb, 0x77, 0xe5, 0xe5, 0xaa, 0x51, 0x07, 0x84, 0xb8, 0xc3, 0xe3, + 0xb3, 0x69, 0xa4, 0xcc, 0x96, 0x6c, 0xeb, 0x1a, 0xa1, 0xfe, 0xc6, 0xd4, + 0x2e, 0x93, 0x93, 0x7e, 0xbd, 0x17, 0xf1, 0xf6, 0xa5, 0xb8, 0xb7, 0x2a, + 0xa2, 0xa1, 0x93, 0x2d, 0x5a, 0xe7, 0x69, 0xe2, 0x15, 0xf8, 0xcc, 0xa0, + 0xa3, 0x52, 0x5e, 0x97, 0xb8, 0xbb, 0xdf, 0xe3, 0x9c, 0x34, 0x83, 0x08, + 0x12, 0x57, 0x78, 0xd7, 0xb4, 0x61, 0x22, 0x32, 0x2c, 0x64, 0xf8, 0xe4, + 0xb8, 0xc1, 0x17, 0x4d, 0x9b, 0x0e, 0xa9, 0x5e, 0xbf, 0x03, 0x90, 0xb1, + 0x1a, 0x8a, 0x45, 0xbf, 0xca, 0xce, 0x25, 0xf0, 0x7d, 0x49, 0x2b, 0x6d, + 0x84, 0xee, 0xc8, 0xcd, 0x65, 0x03, 0xa6, 0x5c, 0xdb, 0x05, 0xe8, 0xa9, + 0xb9, 0xc5, 0x38, 0x02, 0x87, 0x74, 0x82, 0x58, 0x7f, 0xae, 0x4d, 0x70, + 0x4b, 0xf2, 0xdf, 0xa7, 0x63, 0xe7, 0x01, 0xfd, 0xcf, 0xae, 0xca, 0x25, + 0x4c, 0x54, 0x5e, 0x4b, 0xcc, 0x8f, 0x9e, 0xa8, 0x28, 0x2d, 0x3d, 0x4b, + 0x5f, 0x6a, 0x81, 0x93, 0xbd, 0xf9, 0x33, 0x3f, 0x6b, 0x7e, 0xc7, 0xe1, + 0x6c, 0x9c, 0xd6, 0xdc, 0x03, 0x05, 0x56, 0x8a, 0xa4, 0xaa, 0xfd, 0x00, + 0x08, 0x85, 0xae, 0xb0, 0xc4, 0xd4, 0xd7, 0x0a, 0x20, 0x4d, 0x67, 0xea, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x10, 0x14, 0x1b, 0x23, 0x28, +}; +static const unsigned char kat_mldsa87_pub[] = { + 0x97, 0x92, 0xbc, 0xec, 0x2f, 0x24, 0x30, 0x68, 0x6a, 0x82, 0xfc, 0xcf, + 0x3c, 0x2f, 0x5f, 0xf6, 0x65, 0xe7, 0x71, 0xd7, 0xab, 0x41, 0xb9, 0x02, + 0x58, 0xcf, 0xa7, 0xe9, 0x0e, 0xc9, 0x71, 0x24, 0xa7, 0x3b, 0x32, 0x3b, + 0x9b, 0xa2, 0x1a, 0xb6, 0x4d, 0x76, 0x7c, 0x43, 0x3f, 0x5a, 0x52, 0x1e, + 0xff, 0xe1, 0x8f, 0x86, 0xe4, 0x6a, 0x18, 0x89, 0x52, 0xc4, 0x46, 0x7e, + 0x04, 0x8b, 0x72, 0x9e, 0x7f, 0xc4, 0xd1, 0x15, 0xe7, 0xe4, 0x8d, 0xa1, + 0x89, 0x6d, 0x5f, 0xe1, 0x19, 0xb1, 0x0d, 0xcd, 0xde, 0xf6, 0x2c, 0xb3, + 0x07, 0x95, 0x40, 0x74, 0xb4, 0x23, 0x36, 0xe5, 0x28, 0x36, 0xde, 0x61, + 0xda, 0x94, 0x1f, 0x8d, 0x37, 0xea, 0x68, 0xac, 0x81, 0x06, 0xfa, 0xbe, + 0x19, 0x07, 0x06, 0x79, 0xaf, 0x60, 0x08, 0x53, 0x71, 0x20, 0xf7, 0x07, + 0x93, 0xb8, 0xea, 0x9c, 0xc0, 0xe6, 0xe7, 0xb7, 0xb4, 0xc9, 0xa5, 0xc7, + 0x42, 0x1c, 0x60, 0xf2, 0x44, 0x51, 0xba, 0x1e, 0x93, 0x3d, 0xb1, 0xa2, + 0xee, 0x16, 0xc7, 0x95, 0x59, 0xf2, 0x1b, 0x3d, 0x1b, 0x83, 0x05, 0x85, + 0x0a, 0xa4, 0x2a, 0xfb, 0xb1, 0x3f, 0x1f, 0x4d, 0x5b, 0x9f, 0x48, 0x35, + 0xf9, 0xd8, 0x7d, 0xfc, 0xeb, 0x16, 0x2d, 0x0e, 0xf4, 0xa7, 0xfd, 0xc4, + 0xcb, 0xa1, 0x74, 0x3c, 0xd1, 0xc8, 0x7b, 0xb4, 0x96, 0x7d, 0xa1, 0x6c, + 0xc8, 0x76, 0x4b, 0x65, 0x69, 0xdf, 0x8e, 0xe5, 0xbd, 0xcb, 0xff, 0xe9, + 0xa4, 0xe0, 0x57, 0x48, 0xe6, 0xfd, 0xf2, 0x25, 0xaf, 0x9e, 0x4e, 0xeb, + 0x77, 0x73, 0xb6, 0x2e, 0x8f, 0x85, 0xf9, 0xb5, 0x6b, 0x54, 0x89, 0x45, + 0x55, 0x18, 0x44, 0xfb, 0xd8, 0x98, 0x06, 0xa4, 0xac, 0x36, 0x9b, 0xed, + 0x2d, 0x25, 0x61, 0x00, 0xf6, 0x88, 0xa6, 0xad, 0x5e, 0x0a, 0x70, 0x98, + 0x26, 0xdc, 0x44, 0x49, 0xe9, 0x1e, 0x23, 0xc5, 0x50, 0x6e, 0x64, 0x23, + 0x61, 0xef, 0x5a, 0x31, 0x37, 0x12, 0xf7, 0x9b, 0xc4, 0xb3, 0x18, 0x68, + 0x61, 0xca, 0x85, 0xa4, 0xba, 0xb1, 0x7e, 0x7f, 0x94, 0x3d, 0x1b, 0x8a, + 0x33, 0x3a, 0xa3, 0xae, 0x7c, 0xe1, 0x6b, 0x44, 0x0d, 0x60, 0x18, 0xf9, + 0xe0, 0x4d, 0xaf, 0x57, 0x25, 0xc7, 0xf1, 0xa9, 0x3f, 0xad, 0x1a, 0x5a, + 0x27, 0xb6, 0x78, 0x95, 0xbd, 0x24, 0x9a, 0xa9, 0x16, 0x85, 0xde, 0x20, + 0xaf, 0x32, 0xc8, 0xb7, 0xe2, 0x68, 0xc7, 0xf9, 0x68, 0x77, 0xd0, 0xc8, + 0x50, 0x01, 0x13, 0x5a, 0x4f, 0x0a, 0x8f, 0x1b, 0x82, 0x64, 0xfa, 0x6e, + 0xbe, 0x5a, 0x34, 0x9d, 0x8a, 0xec, 0xad, 0x1a, 0x16, 0x29, 0x9c, 0xcf, + 0x2f, 0xd9, 0xc7, 0xb8, 0x5b, 0xac, 0xe2, 0xce, 0xd3, 0xaa, 0x12, 0x76, + 0xba, 0x61, 0xee, 0x78, 0xed, 0x7e, 0x5c, 0xa5, 0xb6, 0x7c, 0xdd, 0x45, + 0x8a, 0x93, 0x54, 0x03, 0x0e, 0x6a, 0xbb, 0xba, 0xbf, 0x56, 0xa0, 0xa2, + 0x31, 0x6f, 0xec, 0x9d, 0xba, 0x83, 0xb5, 0x1d, 0x42, 0xfd, 0x31, 0x67, + 0xf1, 0xe0, 0xf9, 0x08, 0x55, 0xd5, 0xc6, 0x65, 0x09, 0xb2, 0x10, 0x26, + 0x5d, 0xc1, 0xe5, 0x4e, 0xc4, 0x4b, 0x43, 0xba, 0x7c, 0xf9, 0xae, 0xf1, + 0x18, 0xb4, 0x4d, 0x80, 0x91, 0x2c, 0xe7, 0x51, 0x66, 0xa6, 0x65, 0x1e, + 0x11, 0x6c, 0xeb, 0xe4, 0x92, 0x29, 0xa7, 0x06, 0x2c, 0x09, 0x93, 0x1f, + 0x71, 0xab, 0xd2, 0x29, 0x3f, 0x76, 0xf7, 0xef, 0xc3, 0x21, 0x5b, 0xa9, + 0x78, 0x00, 0x03, 0x7e, 0x58, 0xe4, 0x70, 0xbd, 0xbb, 0xb4, 0x3c, 0x1b, + 0x04, 0x39, 0xea, 0xf7, 0x9c, 0x54, 0xd9, 0x3b, 0x44, 0xaa, 0xc9, 0xef, + 0xe9, 0xfb, 0xe1, 0x51, 0x87, 0x4c, 0xfb, 0x2a, 0x64, 0xcb, 0xee, 0x28, + 0xcc, 0x4c, 0x0f, 0xe7, 0x77, 0x5e, 0x5d, 0x87, 0x0f, 0x1c, 0x02, 0xe5, + 0xb2, 0xe3, 0xc5, 0x00, 0x4c, 0x99, 0x5f, 0x24, 0xc9, 0xb7, 0x79, 0xcb, + 0x75, 0x3a, 0x27, 0x7d, 0x0e, 0x71, 0xfd, 0x42, 0x5e, 0xb6, 0xbc, 0x2c, + 0xa5, 0x6c, 0xe1, 0x29, 0xdb, 0x51, 0xf7, 0x07, 0x40, 0xf3, 0x1e, 0x63, + 0x97, 0x6b, 0x50, 0xc7, 0x31, 0x2e, 0x97, 0x97, 0xd7, 0x8c, 0x5b, 0x1a, + 0xc2, 0x4a, 0x5f, 0xa3, 0x47, 0xcc, 0x91, 0x6e, 0x0a, 0x83, 0xf5, 0xc3, + 0xb6, 0x75, 0xcd, 0x30, 0xb8, 0x1e, 0x3f, 0xa1, 0x0b, 0x93, 0x44, 0x4e, + 0x07, 0x39, 0x75, 0x71, 0xcc, 0xe9, 0x8b, 0x28, 0xda, 0x51, 0xdb, 0x90, + 0x56, 0xbc, 0x72, 0x8c, 0x5b, 0x0b, 0x11, 0x81, 0xe2, 0xfb, 0xd3, 0x87, + 0xb4, 0xc7, 0x9a, 0xb1, 0xa5, 0xfe, 0xfe, 0xce, 0x37, 0x16, 0x7a, 0xf7, + 0x72, 0xdd, 0xad, 0x14, 0xeb, 0x4c, 0x39, 0x82, 0xda, 0x5a, 0x59, 0xd0, + 0xe9, 0xeb, 0x17, 0x3e, 0xc6, 0x31, 0x50, 0x91, 0x17, 0x00, 0x27, 0xa3, + 0xab, 0x5e, 0xf6, 0xaa, 0x12, 0x9c, 0xb8, 0x58, 0x57, 0x27, 0xb9, 0x35, + 0x8a, 0x28, 0x50, 0x1d, 0x71, 0x3a, 0x72, 0xf3, 0xf1, 0xdb, 0x31, 0x71, + 0x42, 0x86, 0xf9, 0xb6, 0x40, 0x80, 0x13, 0xaf, 0x06, 0x04, 0x5d, 0x75, + 0x59, 0x2f, 0xc0, 0xb7, 0xdd, 0x47, 0xc7, 0x3e, 0xd9, 0xc7, 0x5b, 0x11, + 0xe9, 0xd7, 0xc6, 0x9f, 0x7c, 0xad, 0xfc, 0x32, 0x80, 0xa9, 0x06, 0x2c, + 0x52, 0x73, 0xc4, 0x3b, 0xe1, 0xc3, 0x4f, 0x87, 0x44, 0x88, 0x64, 0xce, + 0xa7, 0xb5, 0xc9, 0x7d, 0x6d, 0x32, 0xf5, 0x9b, 0xd5, 0xf2, 0x53, 0x84, + 0x65, 0x3b, 0xb5, 0xc4, 0xfa, 0xa4, 0x5b, 0xea, 0x8b, 0x89, 0x40, 0x28, + 0x43, 0xe6, 0x45, 0xb6, 0xb9, 0x26, 0x9e, 0x2b, 0xd9, 0x88, 0xdd, 0xac, + 0xb0, 0x33, 0x32, 0x8f, 0xfb, 0x06, 0x04, 0x50, 0xf7, 0xdf, 0x08, 0x00, + 0x53, 0xe6, 0x96, 0x9b, 0x25, 0x1e, 0x87, 0x5e, 0xce, 0xc3, 0x2c, 0xfc, + 0x59, 0x28, 0x40, 0xd6, 0x9a, 0xb6, 0x9a, 0x75, 0xe0, 0x6b, 0x37, 0x9c, + 0x53, 0x5d, 0x95, 0x26, 0x6b, 0x08, 0x2f, 0x4f, 0x09, 0xc9, 0x31, 0x62, + 0xb3, 0x3b, 0x0d, 0x9f, 0x73, 0x07, 0xa4, 0xea, 0xaa, 0x52, 0x10, 0x44, + 0x37, 0xfe, 0xd6, 0x6f, 0x8e, 0xe3, 0xea, 0xbb, 0xd4, 0x5d, 0x67, 0xb2, + 0x5a, 0x81, 0x33, 0xf4, 0x96, 0x46, 0x8b, 0x52, 0xba, 0xff, 0xdb, 0xfa, + 0xd9, 0x3e, 0xef, 0x1a, 0x98, 0x18, 0xb5, 0xe4, 0x2e, 0xc7, 0x22, 0x78, + 0x8a, 0x3d, 0x8d, 0x35, 0x29, 0xfc, 0x77, 0x7d, 0x2b, 0xa5, 0x70, 0x80, + 0x1d, 0xfa, 0xe0, 0x1e, 0xc8, 0x83, 0x02, 0x83, 0x7c, 0x1f, 0xb9, 0xe0, + 0x35, 0x57, 0x27, 0x64, 0x5e, 0xe1, 0x04, 0x6c, 0x3f, 0x91, 0x5f, 0x6a, + 0xe8, 0x2d, 0xad, 0x4f, 0xb6, 0xb0, 0x35, 0x6a, 0x46, 0x51, 0x8f, 0xfc, + 0x83, 0x41, 0x55, 0xc3, 0xb4, 0xfe, 0x6d, 0xaf, 0xa6, 0xcc, 0x8a, 0x5c, + 0xcf, 0x53, 0xc7, 0x3a, 0x08, 0x49, 0xd8, 0xd4, 0x4f, 0x7d, 0xcf, 0x72, + 0x75, 0x4e, 0x70, 0xe1, 0xb7, 0xdf, 0xb4, 0x47, 0xbb, 0x4e, 0xf4, 0x9d, + 0x1a, 0x71, 0x8f, 0x61, 0x71, 0xbb, 0xce, 0x20, 0x09, 0x50, 0xe0, 0xce, + 0x92, 0x61, 0x06, 0xb1, 0x51, 0xa3, 0xe8, 0x71, 0xd5, 0xce, 0x49, 0x73, + 0x1b, 0xd6, 0x65, 0x0a, 0x9b, 0x0c, 0xa9, 0x72, 0xda, 0x1c, 0x5f, 0x13, + 0x6d, 0x44, 0x82, 0x0e, 0xa6, 0x38, 0x3c, 0x08, 0xf3, 0xb3, 0x84, 0xcf, + 0x23, 0x38, 0xe7, 0x89, 0xc5, 0x13, 0xf6, 0x18, 0xcc, 0x56, 0x94, 0xa6, + 0xf0, 0xce, 0xe1, 0x04, 0x51, 0x1e, 0x1e, 0xd7, 0xc5, 0xf2, 0x3a, 0x1e, + 0xbf, 0xd8, 0xa0, 0xdb, 0x84, 0x24, 0x55, 0x32, 0x40, 0x15, 0x6d, 0xbf, + 0x62, 0x28, 0x31, 0xb0, 0xc6, 0x43, 0xd1, 0xc5, 0x51, 0xb6, 0xf3, 0xf7, + 0xa9, 0x8d, 0x29, 0xb8, 0x5c, 0x2d, 0xe0, 0x5a, 0x65, 0xfa, 0x61, 0x5e, + 0xee, 0x16, 0x49, 0x5b, 0xd9, 0x07, 0x37, 0x67, 0x21, 0x15, 0xb5, 0x3e, + 0x91, 0xc5, 0xd9, 0x00, 0x28, 0xcf, 0x3f, 0x1a, 0x93, 0x95, 0x3a, 0x15, + 0x3d, 0xe5, 0x3b, 0x44, 0x08, 0x4e, 0x9c, 0xcf, 0xf6, 0xb7, 0x36, 0x69, + 0x39, 0x26, 0xda, 0xef, 0xeb, 0xb2, 0xd7, 0x7a, 0xa5, 0xad, 0x68, 0x9b, + 0x92, 0xf3, 0x16, 0x86, 0x66, 0x9d, 0xf1, 0x6d, 0x17, 0x15, 0xcc, 0x58, + 0xf7, 0xa2, 0xcf, 0xb7, 0x2d, 0xd1, 0xa5, 0x1e, 0x92, 0xf8, 0x25, 0x99, + 0x3a, 0x74, 0x02, 0x2b, 0xe7, 0xe9, 0xeb, 0x60, 0x54, 0x65, 0x44, 0x57, + 0x09, 0x4d, 0x14, 0x92, 0x8f, 0x20, 0x21, 0x5e, 0x7b, 0x22, 0x2a, 0xc5, + 0x6b, 0x51, 0xad, 0xbe, 0xc8, 0xd8, 0xbd, 0xb6, 0x98, 0x39, 0x79, 0xa7, + 0xe3, 0xa2, 0x1b, 0x44, 0xb5, 0xd1, 0x51, 0x8c, 0xa9, 0x7d, 0x0b, 0x51, + 0x95, 0xf5, 0x1e, 0xd6, 0xa2, 0x43, 0x50, 0xc8, 0x97, 0x47, 0xe1, 0xed, + 0xea, 0x51, 0xb4, 0x48, 0xe3, 0xe9, 0x14, 0x70, 0x54, 0xce, 0x92, 0x78, + 0x73, 0xc9, 0x0d, 0xb3, 0x94, 0xd8, 0x68, 0x88, 0xe0, 0x7d, 0xff, 0x17, + 0x75, 0x93, 0xd6, 0xf7, 0x9e, 0x15, 0x23, 0x02, 0x20, 0x4a, 0xeb, 0x03, + 0xbe, 0x23, 0x86, 0xaf, 0x3e, 0x24, 0x07, 0x8b, 0xd0, 0x28, 0xb1, 0x68, + 0x9f, 0x5e, 0x14, 0x7c, 0x9f, 0x45, 0x2c, 0x8c, 0xeb, 0x02, 0xec, 0x59, + 0xcc, 0x9d, 0xb6, 0x3a, 0x03, 0x57, 0x6c, 0xee, 0xaf, 0xe9, 0x82, 0x39, + 0x02, 0x38, 0x97, 0xda, 0x02, 0x36, 0x63, 0x0a, 0x53, 0xc0, 0xde, 0x7f, + 0x43, 0x5a, 0x19, 0x86, 0x97, 0x92, 0xfa, 0xb3, 0x6e, 0x7b, 0x9e, 0x63, + 0x57, 0x60, 0xf0, 0x90, 0x69, 0xe6, 0x43, 0x2e, 0x70, 0x00, 0x35, 0xac, + 0x2a, 0x02, 0x87, 0x9f, 0xff, 0x0a, 0x1e, 0x1b, 0xec, 0x52, 0x20, 0x47, + 0x19, 0x3d, 0x94, 0xeb, 0x5d, 0xf1, 0xef, 0xd5, 0x3e, 0xea, 0x11, 0x44, + 0xca, 0x78, 0x94, 0x08, 0x52, 0xf5, 0xec, 0x97, 0x27, 0x90, 0x4b, 0x36, + 0x6e, 0xde, 0x4f, 0x5e, 0x2d, 0x33, 0x1f, 0xad, 0x5f, 0xc2, 0x82, 0xea, + 0x2c, 0x47, 0xe9, 0x23, 0x14, 0x27, 0x71, 0xc3, 0xdd, 0x75, 0xa8, 0x73, + 0x57, 0x48, 0x7d, 0xef, 0x99, 0xe5, 0xf1, 0x8e, 0x9d, 0x9e, 0xd6, 0x23, + 0xc1, 0x75, 0xd0, 0x28, 0x88, 0xc5, 0x1f, 0x82, 0xc0, 0x7a, 0x80, 0xd5, + 0x47, 0x16, 0xb3, 0xc3, 0xc2, 0xbd, 0xbe, 0x2e, 0x9f, 0x0a, 0x9b, 0xba, + 0xae, 0xbe, 0xb4, 0xd5, 0x29, 0x36, 0x87, 0x64, 0x06, 0xf5, 0xc0, 0x0e, + 0x8e, 0x4b, 0xbd, 0x0a, 0x5e, 0xc0, 0x57, 0x97, 0xe6, 0x20, 0x7c, 0x5a, + 0xb6, 0xc8, 0x8f, 0x1a, 0x68, 0x84, 0x21, 0xbd, 0x05, 0xa1, 0x14, 0xf4, + 0xd7, 0xde, 0x2a, 0xc2, 0x41, 0xfa, 0x0e, 0x8b, 0xed, 0xff, 0x47, 0xf7, + 0x62, 0xdd, 0xcb, 0xea, 0xa9, 0x10, 0x04, 0xf8, 0xd3, 0x1e, 0x85, 0x09, + 0x5c, 0x81, 0x05, 0x49, 0x94, 0xad, 0x38, 0x26, 0xe3, 0x44, 0xba, 0x96, + 0x04, 0x08, 0x10, 0xfc, 0x0b, 0x2a, 0xd1, 0xde, 0x48, 0xcf, 0xad, 0xe0, + 0x02, 0xc6, 0x2e, 0x5a, 0x49, 0xa0, 0x73, 0x1a, 0xb3, 0x83, 0x44, 0xbc, + 0x16, 0x36, 0xdf, 0x16, 0xbf, 0x60, 0x7d, 0x56, 0x85, 0x5e, 0x56, 0xd6, + 0x84, 0x00, 0x3c, 0x71, 0x8e, 0x4b, 0xad, 0x9e, 0x5a, 0x09, 0x99, 0x79, + 0xfc, 0xdd, 0xee, 0xb1, 0xc4, 0xa7, 0x77, 0x6c, 0xd3, 0x7a, 0x34, 0x17, + 0xcb, 0x0e, 0x18, 0x4e, 0x29, 0xef, 0x9b, 0xc0, 0xe8, 0x74, 0x75, 0xba, + 0x66, 0x3b, 0xe0, 0x9e, 0x00, 0xab, 0x56, 0x2e, 0xb7, 0xc0, 0xf7, 0x16, + 0x5f, 0x96, 0x9a, 0x9b, 0x42, 0x41, 0x41, 0x98, 0xcc, 0xf1, 0xbf, 0xf2, + 0xa2, 0xc8, 0xd6, 0x89, 0xa4, 0x14, 0xec, 0xe7, 0x66, 0x29, 0x27, 0x66, + 0x56, 0x89, 0xe9, 0x4d, 0xb9, 0x61, 0xeb, 0xae, 0xc5, 0x61, 0x5c, 0xbc, + 0x1a, 0x78, 0x95, 0xc6, 0x85, 0x1a, 0xc9, 0x61, 0x43, 0x2f, 0xf1, 0x11, + 0x8d, 0x46, 0x07, 0xd3, 0x2e, 0xf9, 0xdc, 0x73, 0x2d, 0x51, 0x33, 0x3b, + 0xe4, 0xb4, 0xd0, 0xe3, 0x0d, 0xde, 0xa7, 0x84, 0xec, 0xa8, 0xbe, 0x47, + 0xe7, 0x41, 0xbe, 0x9c, 0x19, 0x63, 0x1d, 0xc4, 0x70, 0xa5, 0x2e, 0xf4, + 0xdc, 0x13, 0xa4, 0xf3, 0x63, 0x3f, 0xd4, 0x34, 0xd7, 0x87, 0xc1, 0x70, + 0x97, 0x7b, 0x41, 0x7d, 0xf5, 0x98, 0xe1, 0xd0, 0xdd, 0xe5, 0x06, 0xbb, + 0x71, 0xd6, 0xf0, 0xbc, 0x17, 0xec, 0x70, 0xe3, 0xb0, 0x3c, 0xdc, 0x19, + 0x65, 0xcb, 0x36, 0x99, 0x3f, 0x63, 0x3b, 0x04, 0x72, 0xe5, 0x0d, 0x09, + 0x23, 0xac, 0x6c, 0x66, 0xfd, 0xf1, 0xd3, 0xe6, 0x45, 0x9c, 0xc1, 0x21, + 0xf0, 0xf5, 0xf9, 0x4d, 0x09, 0xe9, 0xdb, 0xcf, 0x5d, 0x69, 0x0e, 0x23, + 0x23, 0x38, 0x38, 0xa0, 0xba, 0xcb, 0x7c, 0x63, 0x8d, 0x1b, 0x26, 0x50, + 0xa4, 0x30, 0x8c, 0xd1, 0x71, 0xb6, 0x85, 0x51, 0x26, 0xd1, 0xda, 0x67, + 0x2a, 0x6e, 0xd8, 0x5a, 0x8d, 0x78, 0xc2, 0x86, 0xfb, 0x56, 0xf4, 0xab, + 0x3d, 0x21, 0x49, 0x75, 0x28, 0x04, 0x5c, 0x63, 0x26, 0x2c, 0x8a, 0x42, + 0xaf, 0x2f, 0x98, 0x02, 0xc5, 0x3b, 0x7b, 0xb8, 0xbe, 0x28, 0xe7, 0x8f, + 0xe0, 0xb5, 0xce, 0x45, 0xfb, 0xb7, 0xa1, 0xaf, 0x1a, 0x3b, 0x28, 0xa8, + 0xd9, 0x4b, 0x78, 0x90, 0xe3, 0xc8, 0x82, 0xe3, 0x9b, 0xc9, 0x8e, 0x9f, + 0x0a, 0xd7, 0x60, 0x25, 0xbf, 0x0d, 0xd2, 0xf0, 0x02, 0x98, 0xe7, 0x14, + 0x1a, 0x22, 0x6b, 0x3d, 0x7c, 0xee, 0x41, 0x4f, 0x60, 0x4d, 0x1e, 0x0b, + 0xa5, 0x4d, 0x11, 0xd5, 0xfe, 0x58, 0xbc, 0xce, 0xa6, 0xad, 0x77, 0xad, + 0x2e, 0x8c, 0x1c, 0xaa, 0xcf, 0x32, 0x45, 0x90, 0x14, 0xb7, 0xb9, 0x10, + 0x01, 0xb1, 0xef, 0xa8, 0xad, 0x17, 0x2a, 0x52, 0x3f, 0xb8, 0xe3, 0x65, + 0xb5, 0x77, 0x12, 0x1b, 0xf9, 0xfd, 0x88, 0xa2, 0xc6, 0x0c, 0x21, 0xe8, + 0x21, 0xd7, 0xb6, 0xac, 0xb4, 0x7a, 0x5a, 0x99, 0x5e, 0x40, 0xca, 0xce, + 0xd5, 0xc2, 0x23, 0xb8, 0xfe, 0x6d, 0xe5, 0xe1, 0x8e, 0x9d, 0x2e, 0x58, + 0x93, 0xae, 0xfe, 0xbb, 0x7a, 0xae, 0x7f, 0xf1, 0xa1, 0x46, 0x26, 0x0e, + 0x2f, 0x11, 0x0e, 0x93, 0x95, 0x28, 0x21, 0x3a, 0x00, 0x25, 0xa3, 0x8e, + 0xc7, 0x9a, 0xab, 0xc8, 0x61, 0xb2, 0x5e, 0xbc, 0x50, 0x9a, 0x46, 0x74, + 0xc1, 0x32, 0xaa, 0xac, 0xb7, 0xe0, 0x14, 0x6f, 0x14, 0xef, 0xd1, 0x1c, + 0xfc, 0xaf, 0x4c, 0xaa, 0x4f, 0x77, 0x5a, 0x71, 0x6c, 0xe3, 0x25, 0xe0, + 0xa4, 0x35, 0xa4, 0xd3, 0x49, 0xd7, 0x20, 0xbc, 0xf1, 0x37, 0x45, 0x0a, + 0xfc, 0x45, 0x04, 0x6f, 0xc1, 0xa1, 0xf8, 0x3a, 0x9d, 0x32, 0x97, 0x77, + 0xa7, 0x08, 0x4e, 0x4a, 0xad, 0xae, 0x71, 0x22, 0xce, 0x97, 0x00, 0x59, + 0x30, 0x52, 0x8e, 0xb3, 0xc7, 0xf7, 0xf1, 0x12, 0x9b, 0x37, 0x28, 0x87, + 0xa3, 0x71, 0x15, 0x5a, 0x3b, 0xa2, 0x01, 0xa2, 0x5c, 0xbf, 0x1d, 0xcb, + 0x64, 0xe7, 0xcd, 0xee, 0x09, 0x2c, 0x31, 0x41, 0xfb, 0x55, 0x50, 0xfe, + 0x3d, 0x0d, 0xd8, 0x2e, 0x87, 0x0e, 0x57, 0x8b, 0x2b, 0x46, 0x50, 0x08, + 0x18, 0x11, 0x3b, 0x8f, 0x65, 0x69, 0x77, 0x3c, 0x67, 0x73, 0x85, 0xb6, + 0x9a, 0x42, 0xb7, 0x7d, 0xcb, 0xa7, 0xac, 0xff, 0xd9, 0x5f, 0xd4, 0x45, + 0x2e, 0x23, 0xaa, 0xa1, 0xd3, 0x7e, 0x1d, 0xa2, 0x15, 0x1e, 0xa6, 0x58, + 0xd4, 0x0a, 0x35, 0x96, 0xb2, 0x7a, 0xc9, 0xf8, 0x12, 0x9d, 0xc6, 0xcf, + 0x06, 0x43, 0x77, 0x26, 0x24, 0xb5, 0x9f, 0x4f, 0x46, 0x12, 0x30, 0xdf, + 0x47, 0x1c, 0xa2, 0x60, 0x87, 0xc3, 0x94, 0x2d, 0x5c, 0x66, 0x87, 0xdf, + 0x60, 0x82, 0x83, 0x59, 0x35, 0xa3, 0xf8, 0x7c, 0xb7, 0x62, 0xb0, 0xc3, + 0xb1, 0xd0, 0xdd, 0xa4, 0xa6, 0x53, 0x39, 0x65, 0xbe, 0xf1, 0xb7, 0xb8, + 0x29, 0x2e, 0x25, 0x4c, 0x01, 0x4d, 0x09, 0x0f, 0xed, 0x85, 0x7c, 0x44, + 0xc1, 0x83, 0x9c, 0x69, 0x4c, 0x0a, 0x64, 0xe3, 0xfa, 0xd9, 0x0a, 0x11, + 0xf5, 0x34, 0x72, 0x2b, 0x6e, 0xe1, 0x57, 0x4f, 0x2e, 0x14, 0x9d, 0x55, + 0xd7, 0x44, 0xde, 0x48, 0x87, 0x02, 0x4e, 0x08, 0x51, 0x14, 0x31, 0xc0, + 0x62, 0x75, 0x0e, 0x16, 0xc7, 0x4a, 0xb9, 0xf3, 0x24, 0x2f, 0x2d, 0xb3, + 0xff, 0xb1, 0x2a, 0x8d, 0x61, 0x07, 0xfa, 0xa2, 0x29, 0xd6, 0xf6, 0x37, + 0x3b, 0x07, 0xf3, 0x6d, 0x39, 0x32, 0xb3, 0xbd, 0xb0, 0x4c, 0x19, 0xdd, + 0x64, 0xea, 0xdd, 0x7f, 0x93, 0xc3, 0xc5, 0x64, 0xc3, 0x58, 0xa1, 0xc8, + 0x1d, 0xcf, 0x1c, 0x9c, 0x31, 0xe5, 0xb0, 0x65, 0x68, 0xf9, 0x75, 0x44, + 0xc1, 0x7d, 0xc1, 0x56, 0x98, 0xc5, 0xcb, 0x38, 0x98, 0x3a, 0x9a, 0xfc, + 0x42, 0x78, 0x3f, 0xaa, 0x77, 0x3a, 0x52, 0xc9, 0xd8, 0x26, 0x06, 0x90, + 0xbe, 0x9e, 0x31, 0x56, 0xaa, 0x5b, 0xc1, 0x50, 0x9d, 0xea, 0x3f, 0x69, + 0x58, 0x76, 0x95, 0xcd, 0x6f, 0xf1, 0x72, 0xba, 0x83, 0xe6, 0xa6, 0xd8, + 0xa7, 0xd6, 0xbb, 0xeb, 0xbb, 0xcd, 0xa3, 0x67, 0x27, 0x31, 0x98, 0x3f, + 0x89, 0xbc, 0x58, 0x31, 0xdc, 0x37, 0xc3, 0xf3, 0xc5, 0xc5, 0x6f, 0xac, + 0xc6, 0x97, 0xf3, 0xcb, 0x20, 0xbd, 0x5d, 0xba, 0xdb, 0xd7, 0x02, 0xe5, + 0x48, 0x44, 0xac, 0x2f, 0x62, 0x69, 0x01, 0xfe, 0x15, 0x9d, 0xb9, 0x3d, + 0xfd, 0x47, 0x73, 0xd8, 0xfe, 0x73, 0x56, 0x2b, 0x84, 0x6c, 0x1f, 0xc8, + 0x56, 0xd1, 0x80, 0x27, 0x62, 0x84, 0x0e, 0xbc, 0x72, 0xd7, 0x98, 0x8b, + 0xde, 0x75, 0xcb, 0xca, 0x70, 0xd3, 0x19, 0xd3, 0x2c, 0xe0, 0xcc, 0x02, + 0x53, 0xbb, 0x2a, 0xd4, 0x55, 0x72, 0x3e, 0xe0, 0xc7, 0xf4, 0x73, 0x6c, + 0xe6, 0xe6, 0x66, 0x5c, 0x5a, 0xca, 0x32, 0xa4, 0x81, 0xc5, 0x38, 0x39, + 0xbc, 0x25, 0x91, 0x67, 0xb0, 0x13, 0xd0, 0x42, 0x33, 0x95, 0xee, 0xb9, + 0xaa, 0xae, 0xe3, 0x20, 0x61, 0x49, 0xa7, 0xd5, 0x50, 0xd6, 0x7f, 0xc5, + 0xfd, 0xfe, 0x4a, 0x8a, 0x5c, 0x35, 0xd2, 0x51, 0x0b, 0x66, 0x43, 0x79, + 0xab, 0x8f, 0x72, 0x85, 0x5a, 0x2a, 0xf4, 0x7a, 0xbc, 0xe2, 0xa6, 0x32, + 0x04, 0x8e, 0xaf, 0x89, 0xe5, 0xcb, 0x4a, 0x88, 0xde, 0xbc, 0x53, 0xa5, + 0x95, 0x10, 0x3a, 0xcc, 0xe4, 0xf1, 0xcf, 0xf1, 0x8a, 0xcf, 0xf0, 0x7a, + 0xfe, 0x1e, 0xb5, 0x71, 0x6a, 0xa1, 0xe4, 0x0b, 0x63, 0x13, 0x4c, 0x3a, + 0x3a, 0xe9, 0x57, 0x9f, 0xa8, 0x7f, 0x51, 0x5b, 0xe0, 0x93, 0xc2, 0xd2, + 0x9d, 0xb6, 0xd6, 0xb6, 0x5c, 0x93, 0x66, 0x1e, 0x00, 0x63, 0x6b, 0x59, + 0x27, 0x04, 0xd0, 0x93, 0xcc, 0x67, 0x16, 0xc2, 0x34, 0x2e, 0xb1, 0x85, + 0x3d, 0x48, 0xc8, 0x5c, 0x63, 0xac, 0x8a, 0x28, 0x54, 0x46, 0x2c, 0x7b, + 0x77, 0xe7, 0xe3, 0xbd, 0x1e, 0xac, 0x5b, 0xca, 0x28, 0xff, 0xaa, 0x00, + 0xb5, 0xd3, 0x49, 0xf8, 0xa5, 0x47, 0xad, 0x87, 0x5b, 0x96, 0xa8, 0xc2, + 0xb2, 0x91, 0x0c, 0x93, 0x01, 0x30, 0x9a, 0x3f, 0x91, 0x38, 0xa5, 0x69, + 0x31, 0x11, 0xf5, 0x5b, 0x3c, 0x00, 0x9c, 0xa9, 0x47, 0xc3, 0x9d, 0xfc, + 0x82, 0xd9, 0x8e, 0xb1, 0xca, 0xa4, 0xa9, 0xcb, 0xe8, 0x85, 0xf7, 0x86, + 0xfa, 0x86, 0xe5, 0x5b, 0xe0, 0x62, 0x22, 0x2f, 0x8b, 0xa9, 0x0a, 0x97, + 0x40, 0x73, 0x32, 0x6b, 0x31, 0x21, 0x2a, 0xec, 0xe0, 0xa3, 0x4a, 0x60, +}; +static const unsigned char kat_mldsa87_sig[] = { + 0x8a, 0x5a, 0xb6, 0x7a, 0x81, 0xae, 0xd3, 0x5c, 0xc1, 0x53, 0x58, 0x9a, + 0x7c, 0x0a, 0xdb, 0x4d, 0x99, 0xf1, 0x42, 0x86, 0x21, 0x36, 0x4a, 0xc0, + 0x18, 0x4a, 0x03, 0x00, 0x26, 0x0b, 0x1c, 0xa8, 0x60, 0x38, 0x0d, 0x68, + 0x31, 0x59, 0x9b, 0x02, 0xcd, 0x38, 0xd3, 0x7a, 0x6c, 0xfe, 0xa3, 0x08, + 0x71, 0x94, 0x37, 0x7a, 0x50, 0x4c, 0x8d, 0xff, 0x7e, 0x54, 0xe5, 0xbf, + 0x14, 0x47, 0x9f, 0xae, 0xab, 0x92, 0x7c, 0x6a, 0x2c, 0xec, 0x4c, 0xec, + 0x46, 0xdd, 0x0e, 0x83, 0x8a, 0x3c, 0xfa, 0xc7, 0x51, 0x0f, 0x9f, 0x42, + 0x96, 0xa9, 0xdf, 0x59, 0x1f, 0x9f, 0x61, 0xc3, 0xa2, 0x5b, 0xff, 0xb8, + 0xa7, 0x76, 0x62, 0xa7, 0x71, 0xd3, 0x66, 0x82, 0x6c, 0x8c, 0x78, 0xda, + 0x44, 0x6a, 0xfa, 0x1a, 0xdf, 0x7d, 0xe6, 0x53, 0x8f, 0x76, 0x8d, 0xca, + 0x86, 0x1b, 0x32, 0x52, 0xe4, 0x14, 0x59, 0x71, 0x20, 0x35, 0x68, 0x46, + 0xaf, 0xc4, 0x37, 0xc7, 0xb4, 0xae, 0x7a, 0xde, 0xcf, 0x62, 0xdf, 0x77, + 0x12, 0xab, 0xc1, 0x83, 0xa9, 0xb9, 0x8f, 0xab, 0xcb, 0x1e, 0x09, 0xba, + 0xff, 0x99, 0x3f, 0xa3, 0x74, 0xcb, 0x20, 0x7f, 0xe3, 0xa1, 0x8f, 0x7b, + 0x33, 0xaa, 0x26, 0x2f, 0x42, 0x43, 0xb7, 0x08, 0x49, 0x63, 0xf6, 0x94, + 0xa6, 0xe3, 0x09, 0xda, 0x89, 0x73, 0x7d, 0x7a, 0x45, 0xf2, 0xa7, 0xfc, + 0x95, 0xd2, 0x8f, 0xee, 0xd6, 0xff, 0x57, 0x1a, 0x75, 0xcf, 0xe0, 0x4c, + 0x35, 0x6e, 0x67, 0xe9, 0xb3, 0x8e, 0x9f, 0x10, 0xb8, 0x24, 0x25, 0x33, + 0x28, 0x87, 0x2b, 0x06, 0xbe, 0x96, 0xc5, 0x53, 0xf6, 0xeb, 0x0f, 0x6a, + 0xe0, 0x0c, 0xbd, 0x22, 0x24, 0x83, 0x7e, 0x9c, 0xc8, 0x51, 0xa9, 0x61, + 0xe7, 0xc0, 0x97, 0x66, 0x82, 0xbd, 0x9d, 0x54, 0x69, 0x0d, 0xde, 0xfe, + 0x8f, 0x42, 0x52, 0xb0, 0x80, 0x54, 0x17, 0x2d, 0xf5, 0x13, 0xdc, 0xe2, + 0xb0, 0x1e, 0x03, 0x1a, 0x44, 0x02, 0xaf, 0x9e, 0x8f, 0x90, 0x96, 0x35, + 0xed, 0xa7, 0xb2, 0x31, 0xd4, 0xfe, 0x79, 0x9c, 0x8b, 0xeb, 0xf6, 0xba, + 0x35, 0xab, 0x62, 0xb2, 0xa1, 0x56, 0x99, 0x67, 0x9b, 0x62, 0xc5, 0x03, + 0xe4, 0x9e, 0x56, 0x4f, 0xf9, 0x62, 0x81, 0x30, 0xa4, 0xb5, 0xee, 0x55, + 0xfc, 0xd7, 0x1c, 0xec, 0xb4, 0x5e, 0x10, 0x13, 0x59, 0xf2, 0x02, 0x63, + 0x64, 0xd8, 0xf2, 0x30, 0xe9, 0xe0, 0xb4, 0x55, 0xda, 0x44, 0x85, 0x9b, + 0x43, 0xad, 0xdf, 0xc6, 0x76, 0x00, 0x8c, 0x27, 0x51, 0x12, 0xe2, 0xb4, + 0x49, 0x64, 0xa7, 0x53, 0x68, 0x46, 0x28, 0x1e, 0xb0, 0x30, 0x5a, 0x31, + 0x6b, 0x58, 0xa1, 0x38, 0x3c, 0x00, 0x74, 0x4e, 0x69, 0x5d, 0x83, 0x45, + 0xd7, 0xea, 0x1a, 0x1a, 0x1c, 0x4b, 0xb2, 0x77, 0xc7, 0xb8, 0xca, 0x84, + 0x03, 0x2e, 0x4f, 0xe8, 0xc8, 0xab, 0xd1, 0x79, 0x84, 0x29, 0x3f, 0x00, + 0xab, 0x13, 0x0e, 0x62, 0x12, 0x87, 0xad, 0xa7, 0x76, 0x8f, 0xe2, 0xb4, + 0xa9, 0x3f, 0xd4, 0xa4, 0xa7, 0xb4, 0x27, 0xf8, 0x41, 0x8f, 0xf7, 0x22, + 0x8f, 0xfd, 0xcc, 0xe0, 0x89, 0x36, 0x96, 0x8a, 0x01, 0x66, 0xb9, 0x15, + 0xdf, 0xbb, 0x20, 0xc4, 0xb0, 0x4a, 0x87, 0xf5, 0x8b, 0x91, 0x23, 0x5b, + 0xd2, 0x3d, 0x6f, 0xec, 0x6c, 0xef, 0x90, 0x0f, 0x38, 0x78, 0x74, 0xfa, + 0x3f, 0xf7, 0xb4, 0xf1, 0x6a, 0xe2, 0x9f, 0xb6, 0xd2, 0x58, 0x55, 0x8c, + 0xce, 0x37, 0xb0, 0x3b, 0x1b, 0xec, 0x48, 0x8c, 0x1a, 0x78, 0xb3, 0x92, + 0x3b, 0x9b, 0xe5, 0x03, 0x61, 0x7f, 0xb5, 0xff, 0x55, 0x45, 0x1e, 0xa1, + 0x81, 0x6d, 0x89, 0x2e, 0x3c, 0xf6, 0xc9, 0xe0, 0x85, 0x4e, 0x4a, 0x5b, + 0x62, 0x83, 0x28, 0x00, 0x5d, 0x37, 0x50, 0xa6, 0x12, 0x03, 0x7b, 0x0a, + 0x33, 0xe8, 0x40, 0xf0, 0x89, 0xa9, 0x97, 0x76, 0xfe, 0x73, 0x8a, 0x2e, + 0x04, 0x8c, 0xaf, 0x68, 0xbf, 0x01, 0x8f, 0x98, 0xde, 0x87, 0x6b, 0xbe, + 0xa7, 0x2a, 0xf7, 0x6d, 0x24, 0x93, 0x4e, 0xb9, 0x25, 0x7a, 0xaa, 0x63, + 0x73, 0x03, 0xea, 0xa0, 0xcb, 0xdb, 0x56, 0xf7, 0x38, 0x19, 0x33, 0xc2, + 0x98, 0x39, 0x3a, 0x4b, 0x93, 0x88, 0x24, 0x31, 0xe5, 0x45, 0x99, 0x4c, + 0xbb, 0x51, 0xaa, 0x52, 0xb4, 0x05, 0x95, 0x52, 0x0d, 0x7c, 0x14, 0x44, + 0xac, 0xe9, 0xd5, 0xb6, 0xcf, 0xb8, 0x36, 0xf7, 0xc2, 0x18, 0x77, 0x17, + 0xba, 0x65, 0xbb, 0x16, 0xb7, 0x57, 0x2b, 0xf5, 0xe9, 0x3e, 0x95, 0x71, + 0x64, 0x7e, 0xe5, 0xf2, 0xc3, 0xdb, 0x4e, 0x64, 0x41, 0x7d, 0x27, 0x7d, + 0x34, 0x70, 0xbc, 0xef, 0x1e, 0x0c, 0x99, 0x26, 0x85, 0xb0, 0x16, 0x12, + 0x7e, 0x9b, 0x46, 0xa9, 0x08, 0x86, 0x6e, 0x16, 0xfd, 0x08, 0xac, 0xe7, + 0x95, 0xb9, 0x24, 0x2e, 0x28, 0x5f, 0x1b, 0x90, 0xa2, 0xfa, 0xa6, 0xbe, + 0x2f, 0x9f, 0x41, 0x6e, 0xc6, 0x76, 0x2b, 0x4c, 0x31, 0xb8, 0x0e, 0x7b, + 0x52, 0x46, 0x8c, 0x59, 0xaf, 0x8f, 0x9f, 0xeb, 0x5b, 0xaa, 0xb9, 0x0d, + 0x6f, 0xf2, 0x09, 0x6d, 0xfd, 0x10, 0x15, 0xc6, 0xdd, 0x17, 0x0c, 0xd0, + 0xc7, 0x6c, 0xdc, 0xe4, 0xce, 0x80, 0x11, 0x33, 0x86, 0x22, 0xce, 0xdc, + 0x62, 0xe9, 0x0c, 0x7a, 0xd0, 0xf8, 0xb3, 0x06, 0xbf, 0xc4, 0x99, 0x55, + 0xd0, 0xf7, 0xf2, 0x24, 0xf6, 0xa5, 0x6e, 0xf2, 0x5e, 0xe3, 0x07, 0x65, + 0xa5, 0x3a, 0x1b, 0xc2, 0x92, 0x5d, 0xf7, 0xbd, 0x72, 0x99, 0x02, 0x7e, + 0x50, 0x80, 0x16, 0xe1, 0x8a, 0x43, 0x64, 0xe7, 0x11, 0xee, 0xb7, 0xe8, + 0x37, 0x28, 0x62, 0x08, 0x0e, 0x62, 0x6e, 0xb9, 0x43, 0x97, 0x85, 0xe1, + 0x7e, 0xcd, 0x57, 0xa4, 0x57, 0x78, 0xba, 0x1c, 0x99, 0x56, 0x63, 0xb6, + 0x54, 0xd2, 0x4f, 0x82, 0xc6, 0xa3, 0xe1, 0xc7, 0x67, 0x53, 0xaf, 0xf3, + 0x2a, 0x29, 0x70, 0xcd, 0x44, 0xfb, 0x9e, 0x10, 0xc2, 0xea, 0x9d, 0x93, + 0xa0, 0x06, 0x0f, 0x23, 0x13, 0x16, 0x7e, 0xaa, 0xd0, 0x0c, 0x89, 0x05, + 0x6a, 0xe1, 0xe8, 0x89, 0x55, 0xd4, 0x76, 0xd8, 0xd4, 0xb6, 0x96, 0x54, + 0x15, 0xc5, 0xbd, 0x51, 0x41, 0x32, 0x60, 0xd7, 0x73, 0x6b, 0xfa, 0x97, + 0x2f, 0xab, 0x3d, 0x19, 0xe0, 0xd3, 0xe1, 0xcb, 0x2a, 0x85, 0xf5, 0x9a, + 0xc1, 0x21, 0x36, 0xbd, 0x1b, 0x63, 0x3e, 0x95, 0x06, 0x1e, 0x87, 0x89, + 0x0f, 0x6b, 0xf0, 0x0b, 0x24, 0xf3, 0x5b, 0x8a, 0x24, 0xe7, 0xf4, 0x9a, + 0x7e, 0xe0, 0x2b, 0x75, 0x63, 0x91, 0x51, 0x67, 0x97, 0xf1, 0x5b, 0xa2, + 0xac, 0x52, 0xa1, 0xd1, 0xde, 0xc1, 0x11, 0xab, 0x15, 0x7d, 0xf0, 0xcc, + 0xfa, 0xbf, 0x7c, 0x7a, 0x86, 0xbe, 0xa8, 0xd9, 0x5f, 0xb6, 0xa7, 0x14, + 0x8e, 0xba, 0x83, 0x84, 0xe9, 0xed, 0x3a, 0x9e, 0xd8, 0x1e, 0x14, 0xc3, + 0x63, 0x59, 0xd3, 0x17, 0xd1, 0x03, 0x90, 0x7c, 0xad, 0x48, 0xec, 0xfb, + 0x71, 0xe7, 0x16, 0xb4, 0x33, 0x0f, 0x2a, 0x34, 0x7f, 0x87, 0x88, 0xd9, + 0x06, 0xc8, 0xc4, 0xe5, 0x05, 0x09, 0xec, 0x7e, 0x8c, 0x0f, 0xe4, 0x5a, + 0x20, 0x80, 0x5f, 0xa1, 0x6a, 0x79, 0xf3, 0xee, 0xb1, 0xda, 0x27, 0x90, + 0xf6, 0x0e, 0x4a, 0x41, 0xf3, 0x56, 0x11, 0xe8, 0x8c, 0x4d, 0xca, 0xb2, + 0x75, 0x28, 0xf3, 0x89, 0x03, 0xaf, 0x46, 0x75, 0x8c, 0xd1, 0xd3, 0x22, + 0x10, 0x81, 0xbb, 0xed, 0x71, 0x9d, 0x1f, 0x49, 0x15, 0xf1, 0x6d, 0x37, + 0x77, 0x2a, 0x7f, 0xe4, 0x34, 0x82, 0x89, 0x5a, 0x88, 0x0c, 0x60, 0x3a, + 0x50, 0x28, 0x87, 0x7d, 0xfc, 0xc1, 0xe6, 0x0d, 0xa1, 0x74, 0x9e, 0x7a, + 0x89, 0x52, 0x6f, 0x89, 0x22, 0xb2, 0x74, 0x17, 0xf5, 0x14, 0x2b, 0xfe, + 0x8f, 0x4f, 0x20, 0xd7, 0x6a, 0xb5, 0xc5, 0x27, 0xc2, 0x91, 0x25, 0x4b, + 0xa7, 0x92, 0x22, 0x21, 0x33, 0x91, 0x8c, 0x73, 0x9d, 0xec, 0x27, 0x03, + 0x95, 0x18, 0x5d, 0xb2, 0x58, 0x45, 0x49, 0x19, 0x53, 0x9a, 0x77, 0xe1, + 0xcc, 0x91, 0xa0, 0xe7, 0xde, 0xb9, 0x03, 0x43, 0x60, 0x60, 0xad, 0x6e, + 0x1e, 0xee, 0x8e, 0xdd, 0x94, 0x7a, 0xea, 0xca, 0x76, 0xd1, 0xbd, 0xe1, + 0xd4, 0x7a, 0xd0, 0x4d, 0x64, 0xc7, 0xfb, 0x89, 0x56, 0x09, 0xaa, 0x99, + 0xf4, 0xf9, 0x5c, 0xb1, 0x5c, 0x8a, 0x95, 0x1d, 0xd2, 0xf3, 0x74, 0x51, + 0x7f, 0x20, 0x86, 0x1a, 0x91, 0x34, 0x84, 0x27, 0x64, 0xe6, 0xa4, 0xed, + 0x56, 0x65, 0x64, 0x66, 0x73, 0x14, 0x7f, 0xce, 0x58, 0x81, 0x3f, 0xfc, + 0x90, 0x1c, 0xe9, 0x54, 0xa7, 0x14, 0x09, 0xbe, 0xb7, 0x09, 0x29, 0xd9, + 0xa1, 0x1f, 0x52, 0xa1, 0xf8, 0x11, 0x63, 0x3d, 0xb3, 0x7b, 0xa1, 0x37, + 0xe2, 0xf8, 0x85, 0x3d, 0x69, 0xad, 0x94, 0x52, 0xcc, 0xf7, 0x05, 0x59, + 0x73, 0xea, 0x0f, 0x33, 0xb2, 0xf4, 0x74, 0xec, 0x36, 0x26, 0x1e, 0x19, + 0xf4, 0x47, 0xbf, 0xce, 0x37, 0xc4, 0xd1, 0x9a, 0x89, 0xaf, 0x8f, 0xb6, + 0xdf, 0x3f, 0x07, 0x09, 0xe7, 0x78, 0xbb, 0x62, 0xd1, 0xc8, 0xdc, 0xee, + 0x4d, 0xbc, 0x5e, 0xb9, 0x49, 0xff, 0x20, 0x48, 0x36, 0x30, 0x04, 0xe8, + 0xd5, 0x20, 0x84, 0xf4, 0x4a, 0xe5, 0xd3, 0x60, 0x55, 0x42, 0x5f, 0xcd, + 0xc3, 0xc8, 0x76, 0x09, 0x71, 0x4f, 0xfd, 0x2d, 0x39, 0xd4, 0x31, 0x2a, + 0xbe, 0xc9, 0xa7, 0x61, 0x5d, 0xb2, 0xfb, 0x42, 0xb0, 0x12, 0xaf, 0x7a, + 0xe6, 0x61, 0x81, 0x08, 0xfd, 0x78, 0x28, 0xc0, 0xe5, 0x58, 0xe7, 0xda, + 0xc4, 0xd6, 0x1e, 0x36, 0x15, 0x16, 0x9b, 0xd7, 0xd4, 0x53, 0x0e, 0x3c, + 0x64, 0x22, 0xea, 0x37, 0xb7, 0x87, 0xc9, 0x2f, 0x2d, 0x70, 0x57, 0x40, + 0x06, 0xba, 0x7e, 0x57, 0x01, 0xfc, 0x61, 0x10, 0x16, 0x34, 0x16, 0xd5, + 0xbf, 0x31, 0xa2, 0xab, 0xd6, 0x00, 0x46, 0x69, 0x0a, 0x15, 0xc2, 0x9e, + 0x96, 0x42, 0x0e, 0xa1, 0x2e, 0x23, 0xf2, 0x56, 0x19, 0x30, 0xb1, 0x14, + 0xe8, 0xd1, 0x63, 0xb1, 0x2d, 0x64, 0x6a, 0x0c, 0x79, 0xc1, 0xa9, 0x32, + 0x49, 0x79, 0x80, 0xc8, 0x8f, 0x95, 0x91, 0x66, 0xdb, 0x05, 0xa9, 0x98, + 0x65, 0x55, 0x01, 0x34, 0x46, 0x36, 0x74, 0xa7, 0x10, 0x47, 0xb8, 0x37, + 0xc7, 0x40, 0x8e, 0xc3, 0x2f, 0x8a, 0xfe, 0xac, 0xa5, 0x82, 0x1d, 0xdd, + 0x6c, 0x36, 0xdc, 0x6f, 0xb0, 0x29, 0xad, 0x36, 0x6a, 0x3b, 0x03, 0x05, + 0x8e, 0x7c, 0x7d, 0x56, 0x91, 0x65, 0x3d, 0xd2, 0xa6, 0x5f, 0xa7, 0xea, + 0x45, 0xdc, 0x28, 0x7c, 0xe5, 0x88, 0xc1, 0x8d, 0x12, 0x5c, 0xe9, 0xc7, + 0xcf, 0xf5, 0x66, 0x12, 0xe8, 0xcb, 0xe0, 0x11, 0x2e, 0xfe, 0x72, 0x86, + 0xab, 0x25, 0x80, 0x0e, 0x79, 0x77, 0xad, 0xff, 0x6c, 0xa3, 0x90, 0x25, + 0x98, 0x06, 0x53, 0x64, 0x99, 0x5f, 0xd6, 0x1f, 0x78, 0x84, 0x46, 0xac, + 0xe7, 0x54, 0x9b, 0x44, 0x5a, 0xeb, 0x02, 0x85, 0x3f, 0x81, 0xd6, 0xdb, + 0x22, 0x71, 0x7a, 0x9e, 0x02, 0xd7, 0x6a, 0x28, 0x72, 0x2d, 0x41, 0x1c, + 0xfe, 0x42, 0xdf, 0x9e, 0x79, 0xa8, 0x5b, 0x74, 0xa7, 0x27, 0xf5, 0xbc, + 0x72, 0x19, 0x47, 0xc2, 0xb8, 0x53, 0x6c, 0xa9, 0x24, 0xfb, 0xe4, 0x62, + 0x95, 0x17, 0x42, 0x3b, 0x7c, 0x42, 0xe1, 0x38, 0x2a, 0xd3, 0x65, 0x46, + 0xd2, 0xd6, 0x3c, 0x1f, 0xad, 0x59, 0xf7, 0x79, 0x7a, 0xa2, 0x16, 0xcf, + 0x44, 0x80, 0xed, 0xeb, 0x2c, 0x28, 0x19, 0xad, 0x9a, 0x22, 0x06, 0x65, + 0xcd, 0xff, 0xa3, 0x43, 0x0d, 0x49, 0x29, 0xdf, 0xd3, 0xae, 0x5a, 0x11, + 0x8c, 0x05, 0x78, 0xcc, 0xc9, 0xbc, 0xb0, 0xd5, 0x72, 0x66, 0xd5, 0xdb, + 0xe0, 0xa7, 0xb8, 0xfa, 0xec, 0x28, 0x89, 0xec, 0x51, 0x13, 0xa5, 0x18, + 0x5e, 0x77, 0x41, 0xa7, 0xaa, 0x2d, 0x58, 0xc9, 0xe9, 0xac, 0x28, 0x6f, + 0x3a, 0x08, 0x87, 0xe1, 0x49, 0xe0, 0xfd, 0x8d, 0x25, 0xb1, 0x13, 0xb3, + 0x4a, 0xe1, 0x96, 0xc9, 0x10, 0xe5, 0x19, 0x83, 0x09, 0xf6, 0x20, 0x48, + 0x6a, 0xa9, 0x5c, 0xba, 0x9a, 0xee, 0xfe, 0x11, 0x20, 0xca, 0x48, 0xda, + 0x65, 0xe4, 0xb5, 0x7d, 0x73, 0xbc, 0xdf, 0x8f, 0x8f, 0xe3, 0xb9, 0x42, + 0xd3, 0x51, 0xf1, 0x7d, 0x68, 0x07, 0xe4, 0x48, 0x7d, 0x8b, 0x82, 0xd7, + 0x03, 0x6c, 0xe3, 0xfe, 0xd4, 0x4e, 0xa2, 0x61, 0x82, 0x70, 0x62, 0x88, + 0xdf, 0xa6, 0xf3, 0x84, 0xdd, 0x1b, 0xc2, 0x96, 0xf4, 0x73, 0x5e, 0x15, + 0xfe, 0x31, 0x8f, 0xd4, 0x5c, 0x1b, 0xa1, 0xa1, 0x6b, 0xe5, 0x9b, 0xe1, + 0x16, 0x6e, 0xc5, 0x16, 0xd6, 0x20, 0x39, 0x7d, 0x71, 0x6b, 0xa3, 0xb2, + 0x5c, 0x69, 0xb2, 0xa9, 0xdb, 0xba, 0xba, 0x5e, 0xac, 0x10, 0x96, 0x90, + 0xaf, 0x93, 0x69, 0x48, 0xb7, 0xbc, 0xe5, 0x15, 0x88, 0xc5, 0xe5, 0xdf, + 0x51, 0x7f, 0xa3, 0x1d, 0x52, 0x03, 0x2c, 0x7c, 0x9e, 0x26, 0xf4, 0x92, + 0xe3, 0x01, 0x3b, 0xc2, 0x87, 0xb6, 0xa1, 0x43, 0xe4, 0x62, 0x7e, 0xbb, + 0x09, 0x3f, 0xa1, 0x10, 0xfc, 0x0f, 0x06, 0x41, 0xf2, 0xc2, 0x87, 0x10, + 0x1a, 0x14, 0x44, 0xd2, 0xbd, 0x62, 0x41, 0xd7, 0xdd, 0x71, 0xbc, 0xe6, + 0xfb, 0xe9, 0xb9, 0x50, 0xdf, 0x54, 0xb9, 0x83, 0x72, 0xaf, 0x93, 0x5d, + 0x93, 0xa2, 0xc1, 0x82, 0xe2, 0xbc, 0xcd, 0xbe, 0x01, 0x65, 0xb8, 0xc2, + 0x89, 0x8a, 0xe6, 0xb2, 0x16, 0x22, 0x1d, 0x3d, 0xc7, 0xc3, 0x2a, 0x05, + 0x25, 0x12, 0x86, 0x70, 0x98, 0x98, 0x1e, 0x2d, 0x93, 0x3b, 0x36, 0x2d, + 0x94, 0xdb, 0xe7, 0x6f, 0x51, 0xfb, 0x39, 0x55, 0x7e, 0x39, 0xad, 0xb4, + 0x20, 0xdb, 0x99, 0x0d, 0xf7, 0x09, 0x04, 0x8d, 0x9d, 0xb6, 0x3a, 0x11, + 0x98, 0x90, 0x07, 0x85, 0x4c, 0x34, 0x8c, 0x82, 0x1e, 0x0d, 0xa5, 0x84, + 0x1a, 0x41, 0xcc, 0x8d, 0xcb, 0x58, 0x6b, 0x3a, 0xad, 0x61, 0x19, 0x19, + 0x46, 0xbf, 0x72, 0x48, 0x39, 0x7a, 0x57, 0x5e, 0x65, 0x14, 0x4b, 0x72, + 0x38, 0x08, 0x10, 0x4f, 0x86, 0x06, 0x1b, 0xe3, 0x40, 0xe9, 0x81, 0xad, + 0xd5, 0x34, 0xa6, 0x9b, 0xb1, 0xad, 0x27, 0xff, 0xab, 0x1e, 0x61, 0x91, + 0x99, 0xae, 0x53, 0xd2, 0x73, 0xe8, 0xd9, 0x24, 0x72, 0x88, 0x65, 0xe2, + 0x0a, 0x02, 0xcd, 0xc7, 0x1d, 0xf6, 0x5a, 0xe8, 0xf1, 0x71, 0x85, 0xf2, + 0x9a, 0x82, 0x99, 0x0e, 0xbc, 0x2d, 0xe3, 0x8d, 0xf4, 0xa3, 0xc6, 0xa4, + 0x5b, 0x03, 0x62, 0xc0, 0xc5, 0x65, 0x86, 0xea, 0x40, 0x66, 0xfe, 0x7a, + 0x14, 0xb6, 0xbe, 0x53, 0xa8, 0xb8, 0xd7, 0xd5, 0x9a, 0xe0, 0x41, 0x98, + 0xbf, 0xea, 0xd3, 0x15, 0xa8, 0x53, 0xc7, 0x38, 0xd9, 0x1b, 0xd0, 0xdb, + 0x7c, 0xf0, 0x78, 0x8e, 0x71, 0x55, 0x57, 0x3b, 0x1d, 0xd0, 0x58, 0x89, + 0x01, 0xbc, 0x50, 0xca, 0xf8, 0xb7, 0x68, 0x45, 0xa7, 0xb2, 0x93, 0x17, + 0xb1, 0xcc, 0x94, 0x35, 0x3b, 0xbe, 0xe1, 0x93, 0x32, 0x2e, 0x67, 0x3e, + 0x3b, 0x40, 0x98, 0x38, 0xb8, 0xbf, 0x42, 0x1e, 0x4a, 0xdd, 0x2a, 0x11, + 0x34, 0x94, 0x8c, 0x23, 0x84, 0x8d, 0x58, 0x48, 0x1b, 0xc3, 0x91, 0x9f, + 0xdd, 0x5e, 0x0a, 0x99, 0x4c, 0x59, 0x2c, 0x47, 0xce, 0xe8, 0x0c, 0x65, + 0x33, 0x6e, 0x97, 0xf4, 0x39, 0x05, 0x42, 0x24, 0x7e, 0x55, 0x8d, 0x45, + 0xd6, 0xc8, 0x2b, 0xb5, 0x52, 0x1b, 0x43, 0x73, 0x0c, 0xaa, 0x39, 0xbc, + 0x17, 0x20, 0x26, 0x4e, 0x7e, 0xb5, 0xfa, 0x65, 0x07, 0x52, 0x26, 0x2e, + 0xc9, 0x90, 0x7b, 0x0e, 0x03, 0xb4, 0x6e, 0x76, 0xf6, 0xae, 0x69, 0x9e, + 0x31, 0x61, 0x7d, 0xad, 0x76, 0xd7, 0xe3, 0x50, 0x35, 0x2d, 0x9c, 0x93, + 0xc5, 0x7d, 0x6d, 0xde, 0xfa, 0x61, 0x7d, 0xb8, 0x01, 0x47, 0x40, 0xdf, + 0x60, 0xbd, 0x69, 0x99, 0x2e, 0x3d, 0x8a, 0x46, 0x12, 0xc4, 0x6f, 0xea, + 0x82, 0x8a, 0x51, 0xd1, 0xba, 0x86, 0x70, 0x86, 0x09, 0x89, 0x1a, 0xf9, + 0xfd, 0x2e, 0x46, 0x5b, 0x45, 0x7d, 0x7a, 0xad, 0x20, 0x9e, 0x83, 0x5b, + 0x5c, 0xce, 0xee, 0xdb, 0x0a, 0x1d, 0xf6, 0xdf, 0xd4, 0x9e, 0x9b, 0x67, + 0x4e, 0xef, 0xb9, 0x71, 0xfd, 0x6d, 0x5c, 0xf1, 0x95, 0xbf, 0x9a, 0x28, + 0x55, 0x92, 0x20, 0xac, 0x95, 0xe5, 0x5b, 0x27, 0x43, 0xd0, 0x4d, 0x4d, + 0xfa, 0x2d, 0xea, 0xbe, 0x46, 0x30, 0x40, 0x96, 0x76, 0x0d, 0xe9, 0x85, + 0x33, 0xb6, 0x21, 0x58, 0x46, 0x61, 0x26, 0xab, 0x99, 0xf7, 0x09, 0x7e, + 0xae, 0x34, 0x5a, 0x74, 0x8d, 0xd1, 0x76, 0x5d, 0xaf, 0xc1, 0xce, 0x56, + 0xdb, 0x77, 0xea, 0x23, 0x13, 0x6a, 0x4d, 0x85, 0xe1, 0xfe, 0x72, 0xfd, + 0x11, 0x12, 0x27, 0x5d, 0x0f, 0x1a, 0x72, 0x7c, 0x6d, 0x4e, 0x2a, 0x69, + 0x6f, 0x0e, 0xcb, 0x9b, 0xf5, 0xd3, 0xf7, 0xf3, 0x35, 0x7b, 0xf3, 0x23, + 0x58, 0x92, 0xf4, 0x33, 0x2c, 0x7d, 0xe5, 0x6c, 0xce, 0xa2, 0x91, 0x0a, + 0x78, 0x5c, 0x9e, 0x8e, 0x78, 0xac, 0x29, 0xad, 0x50, 0xff, 0xd5, 0x3b, + 0xac, 0x01, 0xb5, 0xc0, 0x95, 0x08, 0xcb, 0x0f, 0xed, 0x96, 0xb8, 0x2d, + 0x23, 0x7e, 0x76, 0x2b, 0xda, 0x9d, 0x40, 0x1b, 0x07, 0x61, 0x88, 0x3b, + 0x77, 0xd2, 0xcd, 0xa9, 0xfc, 0x42, 0x72, 0xa0, 0x43, 0x92, 0x13, 0xd5, + 0x99, 0xd0, 0xdb, 0xc5, 0x97, 0x01, 0x07, 0xcb, 0xaa, 0xb0, 0xce, 0xf7, + 0xf4, 0xdf, 0x7c, 0x4d, 0x2a, 0x01, 0xf9, 0x76, 0xa8, 0xe4, 0x32, 0x6c, + 0x6e, 0xd6, 0x14, 0x8d, 0xd5, 0x51, 0xdb, 0x20, 0x57, 0x27, 0xbc, 0x2d, + 0x3f, 0xd0, 0x39, 0xb0, 0x36, 0x2b, 0xa8, 0xa0, 0xec, 0x39, 0x4a, 0xb8, + 0x12, 0x13, 0xc2, 0xb5, 0x14, 0x48, 0xb3, 0xd0, 0x0f, 0x6b, 0xac, 0x6c, + 0x84, 0x62, 0xf2, 0xc1, 0x7c, 0x78, 0xd6, 0x00, 0x48, 0x02, 0xb8, 0x03, + 0x09, 0x53, 0x7b, 0x9b, 0x64, 0xc3, 0x68, 0xd2, 0xca, 0xc7, 0x0f, 0xeb, + 0x6a, 0x2c, 0x9e, 0x76, 0xe2, 0xe4, 0x1e, 0x9f, 0x40, 0x2c, 0x13, 0x72, + 0x9e, 0x52, 0x44, 0x50, 0xf9, 0x5c, 0x79, 0x61, 0x38, 0xcc, 0x8c, 0x84, + 0x81, 0xe2, 0x2a, 0xcc, 0xe6, 0xb3, 0x22, 0x5a, 0xb6, 0x38, 0x9c, 0x8d, + 0x4f, 0xef, 0x81, 0x77, 0x4c, 0x9c, 0xa4, 0x26, 0xbc, 0x01, 0xe3, 0x84, + 0x5e, 0xb8, 0xc4, 0x1d, 0x01, 0x55, 0xa6, 0x77, 0xd4, 0xe3, 0x25, 0x16, + 0x38, 0x3d, 0xe2, 0x5c, 0x8a, 0x87, 0x37, 0xd3, 0xab, 0x52, 0xdc, 0x34, + 0x2e, 0xc9, 0x5f, 0xdf, 0x32, 0x33, 0x60, 0x13, 0xe0, 0xf7, 0x41, 0x34, + 0x87, 0xd5, 0xbf, 0xbf, 0x7e, 0x93, 0xde, 0x50, 0x40, 0x18, 0x90, 0xb2, + 0x34, 0x0b, 0x43, 0x5e, 0xe8, 0xcf, 0xd7, 0xae, 0x9a, 0x1d, 0x82, 0x3e, + 0x9d, 0x2b, 0x9d, 0xc4, 0xb0, 0x64, 0xda, 0x6b, 0xe7, 0x1a, 0x8f, 0x4e, + 0x47, 0x89, 0xfe, 0x4a, 0x24, 0x23, 0x3d, 0xdb, 0xc6, 0x4c, 0x08, 0x3d, + 0x86, 0xa7, 0x92, 0xd6, 0x8b, 0xa4, 0x4c, 0x8e, 0x41, 0x30, 0x73, 0x86, + 0x38, 0x5a, 0x21, 0xea, 0x36, 0xde, 0x5e, 0xd1, 0x50, 0x2a, 0x54, 0x0d, + 0xfc, 0xe1, 0x75, 0xfa, 0x91, 0x65, 0x58, 0xe7, 0xf8, 0x38, 0x86, 0xcd, + 0x0c, 0xc9, 0xe0, 0xfe, 0xa2, 0x33, 0x0e, 0xa6, 0x1d, 0x4e, 0x7f, 0xc1, + 0x3f, 0x90, 0x1a, 0xd3, 0xc4, 0xe1, 0xeb, 0x8c, 0x5a, 0xaa, 0x08, 0x13, + 0xdb, 0xed, 0x24, 0xa6, 0x9b, 0x3f, 0x85, 0xd2, 0xbc, 0xaa, 0x9e, 0xd0, + 0xe6, 0xc8, 0x3e, 0x32, 0x86, 0xf7, 0x6d, 0x7e, 0x96, 0xb7, 0x5e, 0x48, + 0x4d, 0x62, 0x50, 0xbc, 0x01, 0x66, 0x80, 0x4e, 0x9c, 0x1a, 0xeb, 0x9d, + 0x14, 0x86, 0x8d, 0x7c, 0xcd, 0x8f, 0xaf, 0x37, 0xdf, 0xf0, 0xd2, 0x4a, + 0xb7, 0x16, 0x61, 0x82, 0xa6, 0x82, 0xe0, 0x86, 0xd8, 0xf1, 0xb9, 0x3f, + 0x14, 0x63, 0x57, 0x91, 0xfc, 0x7d, 0x00, 0x24, 0xd0, 0xd7, 0x99, 0x9a, + 0x98, 0x2f, 0x3d, 0xbd, 0x18, 0x3f, 0x96, 0x6c, 0xe6, 0xd1, 0xba, 0xb4, + 0x32, 0xfa, 0xf0, 0x7c, 0x27, 0x78, 0x3c, 0x03, 0x69, 0x88, 0xad, 0x12, + 0xd5, 0xe1, 0xa0, 0x32, 0x2e, 0x1c, 0xd9, 0x5d, 0x9f, 0xc0, 0x82, 0x06, + 0xa9, 0x8e, 0x22, 0x68, 0x56, 0x6a, 0x96, 0x90, 0xdb, 0x50, 0x10, 0x80, + 0xe2, 0xa9, 0x06, 0xd4, 0x50, 0x28, 0xe0, 0x73, 0x5b, 0x48, 0x4f, 0xa0, + 0xbc, 0x92, 0xea, 0x88, 0x53, 0xdb, 0x57, 0x01, 0x2d, 0x43, 0x4b, 0x56, + 0x06, 0x8e, 0x51, 0x68, 0x18, 0x61, 0x0e, 0xf4, 0x88, 0x23, 0x9b, 0xaf, + 0x13, 0xd7, 0x2e, 0xdd, 0x57, 0x07, 0x2a, 0x88, 0x1d, 0x2e, 0xb7, 0x24, + 0x85, 0x1e, 0x9f, 0x9e, 0xbc, 0x05, 0xc8, 0xa6, 0x1f, 0xe2, 0x43, 0x1e, + 0x63, 0x82, 0x57, 0x6e, 0x83, 0x0e, 0x28, 0x5c, 0xc7, 0x97, 0x41, 0x5a, + 0x70, 0x2d, 0x5f, 0x88, 0xfc, 0x98, 0xd3, 0x70, 0x32, 0x20, 0x58, 0x62, + 0xb6, 0xf5, 0x73, 0x88, 0xfa, 0x24, 0xf3, 0xa3, 0x32, 0x82, 0xa9, 0x9b, + 0xe5, 0x4a, 0xa3, 0x64, 0x9c, 0xea, 0xca, 0xb7, 0x79, 0x94, 0x04, 0xaf, + 0x98, 0x87, 0x5c, 0xa0, 0x73, 0x22, 0xdb, 0x03, 0x2f, 0xfc, 0x77, 0x6f, + 0x0e, 0xc5, 0x72, 0x76, 0x50, 0x0a, 0x59, 0x8a, 0x43, 0xca, 0xa2, 0x7b, + 0x61, 0x15, 0xd8, 0x88, 0x89, 0x9a, 0x70, 0xd0, 0x32, 0x87, 0xf0, 0x01, + 0xbd, 0x80, 0x39, 0xbd, 0xda, 0x54, 0x13, 0x99, 0xf8, 0xd7, 0x9c, 0x45, + 0xef, 0xb1, 0x5b, 0x3f, 0xee, 0x1d, 0xd8, 0xf9, 0x96, 0x8a, 0x50, 0xe7, + 0xe0, 0x65, 0x33, 0xda, 0x50, 0xec, 0xed, 0x3b, 0xda, 0x5e, 0xeb, 0x74, + 0x09, 0xcf, 0x4a, 0x28, 0xa0, 0x13, 0xdd, 0x8a, 0x67, 0x4f, 0xc2, 0xb3, + 0xfa, 0x84, 0xe3, 0x26, 0x13, 0x9b, 0xbf, 0x51, 0x39, 0x9a, 0xa8, 0x97, + 0xe5, 0xb4, 0xe1, 0xbc, 0x11, 0x98, 0x3f, 0x3a, 0xdf, 0xef, 0x4f, 0x56, + 0x02, 0x9b, 0xcd, 0xdb, 0x12, 0x44, 0x48, 0xac, 0xbd, 0xfb, 0xdf, 0x7e, + 0x49, 0x6d, 0xdc, 0x84, 0x07, 0xa5, 0x63, 0x0b, 0xaa, 0xb9, 0xa4, 0x51, + 0xc8, 0x7e, 0xce, 0x0b, 0x98, 0xc4, 0x30, 0xc6, 0xb9, 0xff, 0x53, 0x7d, + 0xd5, 0x67, 0x59, 0xf8, 0xdd, 0x58, 0x46, 0x6d, 0xa2, 0x6b, 0x0b, 0x14, + 0xae, 0xf7, 0x08, 0x41, 0xfc, 0x84, 0x3b, 0x68, 0x88, 0xfb, 0x67, 0x76, + 0xd0, 0x90, 0xeb, 0x29, 0x98, 0x61, 0xf1, 0xca, 0xf0, 0x0d, 0x0c, 0x51, + 0x1b, 0x69, 0x26, 0x07, 0xcc, 0xbe, 0xaf, 0xf5, 0x8d, 0xfe, 0xef, 0x4a, + 0x0e, 0x4f, 0xfe, 0x4c, 0xb7, 0xb7, 0xc1, 0xdb, 0xa2, 0x4b, 0x61, 0x70, + 0x7d, 0x78, 0x2c, 0x23, 0x0e, 0xdf, 0x97, 0x57, 0x6f, 0x18, 0x6d, 0xe1, + 0xab, 0x90, 0xae, 0xa6, 0xae, 0x67, 0x07, 0x37, 0xd3, 0x9c, 0xcd, 0xa6, + 0x28, 0x9f, 0x77, 0x98, 0x19, 0x78, 0x77, 0x45, 0x0a, 0x53, 0x79, 0x8b, + 0xa3, 0x90, 0x5b, 0xbf, 0x26, 0x16, 0x34, 0xef, 0x61, 0x74, 0xa6, 0xe0, + 0xad, 0x21, 0x55, 0xcf, 0xd4, 0xc4, 0xb5, 0xcc, 0x1b, 0x87, 0xff, 0x04, + 0xa8, 0x0c, 0x2f, 0xbe, 0x8f, 0x95, 0x74, 0x6a, 0xc6, 0xa6, 0x10, 0xa3, + 0xb4, 0xf3, 0x17, 0xc3, 0x35, 0xe5, 0x21, 0x12, 0x8f, 0x86, 0xbf, 0xdd, + 0x24, 0x22, 0xd8, 0x02, 0x42, 0xd2, 0x78, 0xfb, 0x2c, 0xc9, 0x94, 0x6f, + 0x45, 0x8a, 0x69, 0xb2, 0xb6, 0x3f, 0x8c, 0x11, 0x00, 0x9f, 0xb5, 0x64, + 0x8b, 0xc8, 0x91, 0x7a, 0xa9, 0x25, 0xa4, 0xf1, 0xdc, 0x12, 0x5e, 0x30, + 0x4e, 0x1f, 0x4e, 0x95, 0x66, 0xe9, 0x56, 0x82, 0x18, 0x4b, 0x87, 0x23, + 0xfc, 0x4d, 0xf5, 0x2d, 0x67, 0x5d, 0x96, 0x72, 0x4b, 0x03, 0xcb, 0x65, + 0x75, 0xbc, 0x1c, 0x51, 0xe9, 0x04, 0xfc, 0x6f, 0x01, 0x97, 0xeb, 0xf1, + 0x08, 0x6c, 0xc0, 0x5f, 0xfd, 0xbd, 0x87, 0x43, 0x0b, 0x8b, 0x4b, 0x7c, + 0xda, 0xbb, 0xad, 0xba, 0xd5, 0x7d, 0xf8, 0xa6, 0x57, 0x52, 0x06, 0x17, + 0x6a, 0x7c, 0xf6, 0x18, 0x17, 0x66, 0x42, 0x5a, 0xea, 0xef, 0x09, 0x32, + 0xe1, 0x92, 0xce, 0x9d, 0x85, 0x66, 0xab, 0xbf, 0x07, 0x20, 0x0a, 0xfe, + 0x1d, 0xb9, 0x7f, 0x42, 0x6e, 0xf9, 0x99, 0xd0, 0xdd, 0x9d, 0xd2, 0xa1, + 0x9b, 0x8f, 0x28, 0xd7, 0x31, 0xfb, 0x79, 0x30, 0x28, 0x00, 0x56, 0xd1, + 0x70, 0xc6, 0xff, 0x61, 0x42, 0x78, 0x09, 0x03, 0xdf, 0x49, 0xec, 0x5d, + 0xad, 0xfb, 0xf0, 0x64, 0xba, 0x98, 0x86, 0xaa, 0xa4, 0xe6, 0xc9, 0x29, + 0x72, 0xc7, 0xdd, 0xb1, 0x67, 0x71, 0x65, 0xf6, 0xd8, 0xa3, 0x5a, 0x6f, + 0x69, 0xe8, 0x0b, 0x6e, 0xe7, 0x48, 0xe6, 0x23, 0xee, 0x91, 0xf2, 0x6a, + 0x4c, 0x72, 0x3b, 0x0f, 0x37, 0x1d, 0x68, 0x31, 0xce, 0xde, 0x93, 0x56, + 0x57, 0x08, 0x43, 0xc8, 0xed, 0x2f, 0x6b, 0xb0, 0x8f, 0xc0, 0xbd, 0x09, + 0xfd, 0x0a, 0x7b, 0xba, 0xea, 0xfe, 0xf1, 0x0c, 0x9a, 0x88, 0x17, 0x6b, + 0x8d, 0x12, 0x7a, 0x9b, 0x39, 0xa5, 0x6f, 0xef, 0x55, 0x2e, 0x54, 0x52, + 0xaf, 0x7b, 0x35, 0xd6, 0x64, 0x1a, 0x09, 0xc6, 0x35, 0x3c, 0x50, 0x26, + 0x9a, 0x96, 0x00, 0x8e, 0xad, 0x18, 0x74, 0x56, 0x8b, 0x9d, 0xfe, 0x36, + 0x6c, 0x25, 0x8c, 0xc9, 0xc3, 0x5a, 0x2e, 0x3c, 0x4e, 0x1f, 0xb2, 0xb5, + 0xc1, 0x94, 0x14, 0xe7, 0x6d, 0xd7, 0x0b, 0x06, 0xe5, 0x16, 0x14, 0x16, + 0x87, 0x73, 0x24, 0x7c, 0x20, 0x1e, 0xa9, 0x48, 0xa3, 0x88, 0x7f, 0xce, + 0x93, 0x61, 0x88, 0x3c, 0xf3, 0x58, 0x4a, 0xd1, 0x83, 0xae, 0x07, 0x9b, + 0xb0, 0x96, 0xd9, 0xbb, 0x62, 0x66, 0xa6, 0xe5, 0xd5, 0x8b, 0x59, 0x31, + 0x86, 0x99, 0x07, 0x0b, 0x63, 0xa4, 0x00, 0xa9, 0x65, 0x71, 0xd8, 0xd6, + 0x9e, 0x7e, 0x71, 0xc8, 0x18, 0x91, 0x1e, 0x9b, 0x22, 0x29, 0x37, 0x28, + 0x0c, 0xaf, 0x30, 0xfb, 0x35, 0xeb, 0x4d, 0xa3, 0x2e, 0x31, 0xd4, 0x98, + 0xba, 0xae, 0x31, 0x42, 0xc0, 0x0e, 0x86, 0xca, 0xaf, 0x96, 0x46, 0x88, + 0x14, 0x58, 0x52, 0x71, 0x1d, 0x0e, 0xd8, 0x36, 0xba, 0xe9, 0x19, 0xe3, + 0xa1, 0x5c, 0xe4, 0xe6, 0xdd, 0xb2, 0x42, 0xc1, 0xcd, 0xe6, 0xa0, 0x63, + 0x9e, 0x49, 0x4c, 0x23, 0x7a, 0x43, 0x8a, 0x08, 0xa3, 0x25, 0x8c, 0xb4, + 0xfe, 0xb2, 0x2d, 0x5b, 0xe5, 0x70, 0xf7, 0x09, 0xeb, 0x69, 0x00, 0xe7, + 0xc0, 0x82, 0x5b, 0xfc, 0x99, 0xb5, 0x58, 0xb7, 0xc1, 0x79, 0x25, 0x1d, + 0xfe, 0xae, 0xec, 0x66, 0xec, 0x4f, 0x3a, 0xc8, 0xb1, 0x82, 0xf8, 0x0c, + 0x7a, 0x00, 0x1e, 0xe5, 0xbd, 0xec, 0x28, 0xe0, 0xf8, 0x47, 0x0d, 0x65, + 0x47, 0x5b, 0x1c, 0x28, 0x7a, 0xa6, 0x70, 0xba, 0x90, 0xf5, 0x6a, 0xc7, + 0xff, 0x2a, 0x78, 0x32, 0x55, 0x0f, 0xf0, 0xe3, 0xab, 0x91, 0x33, 0x4a, + 0xce, 0x25, 0x00, 0x84, 0x15, 0xb9, 0x16, 0xcd, 0x86, 0x5d, 0xf7, 0xa1, + 0xcf, 0xd1, 0x53, 0x76, 0xcf, 0x1e, 0x01, 0xbd, 0x39, 0xa1, 0x98, 0xb0, + 0xf1, 0xdf, 0xa3, 0x82, 0x00, 0x56, 0x06, 0xbb, 0x1a, 0x86, 0xa2, 0x90, + 0x95, 0x63, 0x9a, 0x01, 0x7c, 0x6c, 0x0a, 0xd2, 0x55, 0x88, 0xb8, 0x8d, + 0xdc, 0xdf, 0x5f, 0xd8, 0xc1, 0x48, 0x2b, 0x84, 0x21, 0x03, 0x9d, 0xfd, + 0xa8, 0xad, 0xc5, 0x8c, 0xf3, 0x63, 0x45, 0x21, 0x8d, 0x22, 0x39, 0xfc, + 0x29, 0x21, 0x98, 0xd0, 0xb4, 0x8c, 0x57, 0x2d, 0x1c, 0xec, 0x87, 0x7f, + 0x6b, 0xef, 0x7e, 0xf2, 0x6d, 0x94, 0x31, 0x2c, 0x72, 0xd4, 0xdf, 0xdb, + 0x55, 0xfc, 0xf3, 0x47, 0xf5, 0xf7, 0x3c, 0xba, 0x9c, 0x30, 0x03, 0x59, + 0xe4, 0x1c, 0xaa, 0x3e, 0x40, 0xec, 0xf1, 0x00, 0x22, 0xb3, 0xfd, 0x4b, + 0xc3, 0x5a, 0x97, 0x56, 0x5e, 0xfe, 0x76, 0x36, 0x0f, 0x04, 0x9f, 0x4d, + 0xf8, 0xc1, 0x69, 0x17, 0x8c, 0xc4, 0x9d, 0x11, 0x5e, 0x76, 0x15, 0xeb, + 0x93, 0x35, 0xa9, 0xf2, 0x36, 0xcd, 0xcd, 0x7a, 0xce, 0xb1, 0x4f, 0x58, + 0x05, 0x38, 0x47, 0x6d, 0xf6, 0x06, 0xf4, 0x8a, 0x18, 0x79, 0xf8, 0x58, + 0xbd, 0xe5, 0xd1, 0xe5, 0xdd, 0xd7, 0x5c, 0x19, 0xfd, 0x60, 0x6c, 0x32, + 0xa3, 0xcc, 0x52, 0x77, 0x62, 0x13, 0xe5, 0x34, 0x57, 0x82, 0xa4, 0x97, + 0xc7, 0x5e, 0x3d, 0x2c, 0xdb, 0xb1, 0x7a, 0x88, 0x06, 0x32, 0xdb, 0x17, + 0xc4, 0xfa, 0x02, 0xab, 0x29, 0xdf, 0x99, 0x9f, 0xac, 0x3d, 0x39, 0x19, + 0x74, 0x52, 0x03, 0x3c, 0x0f, 0x33, 0x9c, 0xd6, 0x3d, 0xe2, 0x24, 0x89, + 0x47, 0x7a, 0x91, 0xbe, 0x1e, 0x4c, 0xa3, 0x92, 0x52, 0xdf, 0xfd, 0x72, + 0x68, 0x96, 0xdd, 0xd6, 0xaf, 0xd9, 0xf3, 0x93, 0xfc, 0xb9, 0xa8, 0x02, + 0xf6, 0xa1, 0x39, 0xfa, 0x9d, 0xc9, 0xa3, 0xf0, 0x08, 0x34, 0x23, 0xc9, + 0xb1, 0xd2, 0x34, 0x5d, 0x89, 0xa0, 0xd0, 0x8e, 0x33, 0x74, 0x3a, 0xd9, + 0x95, 0xe0, 0x99, 0x51, 0x53, 0xc4, 0xa0, 0xfc, 0xbf, 0x5b, 0x3e, 0xb0, + 0x78, 0xba, 0x7b, 0x78, 0xef, 0x79, 0x0f, 0x48, 0x8c, 0x96, 0x66, 0x8e, + 0x34, 0xcf, 0xb4, 0x1a, 0x6f, 0xe3, 0x76, 0xbc, 0x6d, 0xdb, 0xa4, 0x3d, + 0x83, 0x3a, 0x0a, 0xee, 0xfd, 0x23, 0x40, 0xc6, 0x04, 0xff, 0xbe, 0xf6, + 0xe1, 0x41, 0x4b, 0x1a, 0xab, 0x21, 0x8f, 0x20, 0xab, 0x22, 0x9b, 0x2f, + 0x71, 0x62, 0x7e, 0x5d, 0x9a, 0xe3, 0x55, 0x95, 0xa9, 0x02, 0x04, 0x4b, + 0x48, 0x67, 0x84, 0xfc, 0x0e, 0x5f, 0xe4, 0xa5, 0x0e, 0x27, 0xa0, 0x2a, + 0x5e, 0xb9, 0x5f, 0x04, 0x7e, 0xe8, 0x34, 0x70, 0x28, 0xba, 0x17, 0x59, + 0x37, 0x98, 0x0a, 0xf2, 0x0e, 0x34, 0x1e, 0xfc, 0xd5, 0x97, 0xd6, 0x76, + 0x4c, 0x2b, 0xe3, 0x9b, 0x96, 0x86, 0x8d, 0x98, 0xd2, 0x44, 0xc4, 0xc9, + 0xf4, 0xac, 0x30, 0xec, 0xde, 0x1c, 0x9d, 0xb6, 0x85, 0xe7, 0x57, 0x48, + 0x18, 0x71, 0x99, 0x14, 0xb7, 0x68, 0x98, 0x2c, 0x4e, 0xd9, 0x69, 0xc0, + 0xb6, 0x30, 0x44, 0xe7, 0x75, 0x53, 0x11, 0x25, 0xa3, 0x60, 0x35, 0x0c, + 0xc0, 0x74, 0x8b, 0x84, 0x44, 0xe0, 0xf4, 0x0f, 0x2b, 0x84, 0xba, 0x1c, + 0xb2, 0x22, 0xc7, 0x2a, 0x3b, 0x2f, 0xa4, 0x54, 0x33, 0xf8, 0xe2, 0xfe, + 0x9b, 0x6d, 0xe9, 0x69, 0xf3, 0x1a, 0x3c, 0xa6, 0x62, 0x21, 0x0a, 0x41, + 0x6e, 0xd1, 0xec, 0xae, 0x81, 0x9d, 0x3e, 0x74, 0xc5, 0x0f, 0x1d, 0xaa, + 0x5c, 0x48, 0x27, 0x0f, 0x6b, 0x1e, 0x8e, 0x79, 0x86, 0xc4, 0x3b, 0x09, + 0x80, 0xbe, 0xb7, 0x7b, 0xe0, 0xd8, 0xdd, 0xbc, 0x69, 0x87, 0x96, 0x87, + 0x85, 0xb9, 0x87, 0x22, 0xf9, 0xbf, 0xa4, 0x0e, 0x82, 0x86, 0x58, 0x7e, + 0x57, 0xc3, 0x57, 0x5f, 0x31, 0x59, 0x61, 0x70, 0x5e, 0x62, 0xca, 0xc0, + 0x06, 0x95, 0x62, 0xef, 0x31, 0x12, 0xae, 0xb0, 0x22, 0xb6, 0x54, 0xdc, + 0x79, 0xc1, 0xe6, 0xc9, 0xa3, 0x9e, 0xa6, 0xcf, 0x34, 0x87, 0xaf, 0x90, + 0x22, 0x65, 0xee, 0x1c, 0xfa, 0xbc, 0x30, 0xd4, 0x5d, 0x1f, 0x54, 0x25, + 0x4b, 0x20, 0x87, 0x5d, 0x6e, 0x96, 0xa4, 0xef, 0x84, 0x34, 0x30, 0x07, + 0xf9, 0x58, 0x12, 0x28, 0xcb, 0xa3, 0x2c, 0x23, 0xb0, 0xd0, 0x94, 0x3b, + 0xf4, 0x38, 0x56, 0x4e, 0x37, 0x3d, 0xab, 0x89, 0x2c, 0xe0, 0x16, 0xce, + 0xd1, 0xce, 0x28, 0x79, 0xa9, 0x6d, 0x6d, 0xb1, 0x13, 0x10, 0x59, 0xaf, + 0x2a, 0x19, 0x3d, 0x5f, 0xa9, 0x3b, 0x56, 0x7c, 0x31, 0x11, 0x20, 0x34, + 0x3c, 0xfc, 0xd6, 0x86, 0x78, 0x97, 0x79, 0xbd, 0x89, 0xa0, 0x8a, 0x48, + 0x02, 0x66, 0xd1, 0x47, 0x3a, 0xe4, 0xb5, 0x27, 0xab, 0xbf, 0xf7, 0xe2, + 0x43, 0x5c, 0x76, 0xd7, 0x20, 0xab, 0x58, 0x51, 0x5c, 0xfc, 0xda, 0x3a, + 0x98, 0x0e, 0x89, 0x54, 0xc7, 0x5f, 0x32, 0x63, 0x9b, 0x7c, 0x40, 0x4c, + 0x4f, 0xfd, 0x76, 0xb3, 0x6f, 0xb4, 0xcc, 0x37, 0x44, 0x31, 0xf1, 0xb4, + 0x92, 0x11, 0xa3, 0xde, 0x37, 0x38, 0xe8, 0x72, 0x89, 0x24, 0x8a, 0x7a, + 0x5e, 0xf3, 0x42, 0xc5, 0x34, 0xf3, 0x25, 0x98, 0xf2, 0x16, 0x1e, 0x60, + 0x5c, 0xdf, 0x60, 0xfc, 0xdc, 0x56, 0x18, 0xe2, 0xbf, 0xbe, 0xfa, 0x99, + 0xbc, 0xdf, 0x18, 0x6d, 0x20, 0xcc, 0xf5, 0x1b, 0x5e, 0x61, 0x51, 0x06, + 0x1f, 0x93, 0xdb, 0x4a, 0x30, 0x7c, 0xfb, 0x71, 0x93, 0x30, 0xba, 0x57, + 0xe3, 0x78, 0xa8, 0x54, 0x49, 0x57, 0x29, 0xa5, 0xbe, 0xb7, 0x0d, 0x56, + 0xe1, 0xcf, 0x2f, 0xd6, 0x76, 0xbd, 0x3c, 0x98, 0x1f, 0x92, 0x18, 0x7f, + 0x43, 0x3b, 0x83, 0x4b, 0xa8, 0x3a, 0xbe, 0x06, 0xdd, 0xb3, 0x26, 0xc4, + 0x18, 0xa9, 0x86, 0x54, 0x72, 0xd0, 0x55, 0x85, 0x3a, 0x1d, 0xaf, 0x4b, + 0x76, 0xc4, 0xaf, 0x21, 0xf3, 0x40, 0x9c, 0x0c, 0x02, 0x61, 0xcd, 0x74, + 0x77, 0x1e, 0xea, 0x9b, 0x0e, 0x4c, 0x68, 0xfb, 0xe1, 0x8f, 0xb3, 0xbc, + 0x4f, 0x2e, 0x93, 0xb2, 0x01, 0x7a, 0xb7, 0x31, 0x86, 0x63, 0xbf, 0x6a, + 0x06, 0xbd, 0x96, 0x3c, 0x0a, 0x36, 0x43, 0x98, 0xb5, 0x26, 0x38, 0x83, + 0x3c, 0x6d, 0xa1, 0x79, 0x91, 0xd3, 0x61, 0x9f, 0x43, 0xab, 0x32, 0x61, + 0x30, 0x68, 0x73, 0x56, 0x99, 0xa4, 0x68, 0xdb, 0xf3, 0x62, 0x2e, 0x09, + 0x1b, 0xcd, 0xc4, 0xe9, 0x4f, 0xfc, 0x0f, 0x1e, 0x4e, 0x4c, 0x70, 0x2e, + 0xa7, 0x51, 0xb4, 0x13, 0x9b, 0xb7, 0x11, 0x4f, 0x00, 0x57, 0x7e, 0x36, + 0x81, 0xa6, 0x3f, 0x5a, 0xf4, 0x74, 0xa9, 0x5b, 0xd7, 0x9e, 0x0f, 0x18, + 0x53, 0x2b, 0xb5, 0x80, 0xed, 0xfc, 0x59, 0xa1, 0x36, 0x9b, 0x2a, 0xad, + 0x2e, 0xe8, 0x5b, 0x74, 0x19, 0xf8, 0x5e, 0x43, 0x6b, 0x45, 0x2e, 0xba, + 0xf7, 0x42, 0xf4, 0xb0, 0x33, 0x9b, 0xb7, 0x94, 0xb7, 0x1c, 0x1d, 0x54, + 0xdb, 0xd4, 0xfa, 0x08, 0x4e, 0xf2, 0x20, 0x12, 0x01, 0x08, 0x14, 0x1a, + 0x33, 0x35, 0x4e, 0x50, 0x96, 0x99, 0xa3, 0xb2, 0xbc, 0xc5, 0xe9, 0xf2, + 0xf3, 0xfb, 0x33, 0x47, 0x63, 0x6e, 0x82, 0x8d, 0xa7, 0xb5, 0xbf, 0xe0, + 0x62, 0x84, 0x9e, 0xa3, 0xbb, 0xd0, 0x35, 0x37, 0x4b, 0x4f, 0x51, 0x6b, + 0x74, 0x7a, 0xa0, 0xe4, 0x0b, 0x80, 0xa1, 0xdd, 0xe1, 0xf2, 0x3d, 0x7f, + 0xb4, 0xbf, 0xd6, 0xe9, 0x04, 0x1f, 0x34, 0x55, 0x56, 0x68, 0x6b, 0x75, + 0x90, 0xd7, 0x1c, 0x9c, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, + 0x1c, 0x22, 0x2c, 0x32, 0x38, 0x42, 0x45, +}; +static const unsigned char kat_mldsa87_sig_ph256[] = { + 0x9c, 0x1d, 0x1a, 0x91, 0xc0, 0x9a, 0x28, 0x27, 0xc1, 0x38, 0x79, 0xd0, + 0x9d, 0x2b, 0x00, 0x4f, 0x2a, 0xb0, 0x36, 0x7f, 0x38, 0x9d, 0x2b, 0x57, + 0xe2, 0x5a, 0x0c, 0xdb, 0xe8, 0x0e, 0xdb, 0x1e, 0x14, 0x98, 0x83, 0xda, + 0x32, 0x72, 0x5f, 0x61, 0x8d, 0x12, 0x58, 0x69, 0x7b, 0x69, 0x02, 0xb3, + 0x85, 0x3e, 0xe1, 0xbb, 0x8b, 0x59, 0xe5, 0x09, 0x00, 0x00, 0x82, 0xa5, + 0x18, 0xe8, 0x83, 0x95, 0xc6, 0xb6, 0x09, 0x20, 0x57, 0xed, 0x00, 0xf6, + 0xf7, 0x37, 0x12, 0xbc, 0x4e, 0x05, 0x78, 0xf9, 0x96, 0x7c, 0xa8, 0x77, + 0x58, 0xe7, 0xe5, 0x8e, 0xdf, 0x02, 0x3d, 0xd3, 0x18, 0xb2, 0x64, 0x8a, + 0x37, 0x44, 0x67, 0xd0, 0xcb, 0x4b, 0x6b, 0x71, 0x3c, 0xf0, 0x75, 0x1a, + 0x8d, 0x6d, 0x71, 0x75, 0xbe, 0xdb, 0x61, 0x25, 0xa9, 0x7a, 0x2f, 0x92, + 0xeb, 0x58, 0x87, 0x3e, 0x57, 0xc7, 0xd8, 0xa6, 0xeb, 0x15, 0xbe, 0x5a, + 0x1e, 0x07, 0xcb, 0xd3, 0x8d, 0xf1, 0xa8, 0x0b, 0x63, 0x0d, 0x71, 0x17, + 0xe5, 0x58, 0xc6, 0x13, 0xd3, 0x89, 0xa9, 0x3b, 0x37, 0x95, 0xe4, 0xbe, + 0x89, 0x21, 0xd0, 0x7a, 0xf2, 0x5f, 0x82, 0xe4, 0xb8, 0xaf, 0xef, 0x8f, + 0xd6, 0xb7, 0x0d, 0x72, 0x9d, 0x68, 0x10, 0x49, 0x77, 0x30, 0x36, 0x57, + 0x06, 0x81, 0xcf, 0xeb, 0x9a, 0xa6, 0x02, 0x62, 0x7a, 0x05, 0xe7, 0xaf, + 0xcb, 0x9f, 0x9c, 0x5a, 0x9c, 0x9e, 0x4b, 0x23, 0xba, 0xc7, 0x99, 0x4a, + 0xd5, 0xbc, 0xd9, 0xbf, 0x00, 0x06, 0x9a, 0x4d, 0x0b, 0x1f, 0xa0, 0x19, + 0xc3, 0xec, 0x33, 0x10, 0x8d, 0x04, 0x02, 0xb6, 0x90, 0xf0, 0xb1, 0xa0, + 0x22, 0xfd, 0xad, 0x52, 0x16, 0x6a, 0xe5, 0xb2, 0xe7, 0x72, 0xf0, 0x74, + 0xdd, 0x3d, 0xe3, 0x87, 0x48, 0xdd, 0x1f, 0xee, 0xff, 0x81, 0x1c, 0x3e, + 0xc0, 0xdb, 0xc2, 0x0c, 0x42, 0xd6, 0x63, 0xb2, 0xe0, 0x39, 0x3f, 0x95, + 0xde, 0xa3, 0xb8, 0xdf, 0x07, 0xa7, 0xb6, 0x91, 0x04, 0x04, 0x47, 0xac, + 0x8f, 0x1a, 0x96, 0x12, 0x50, 0xe9, 0x31, 0x5b, 0xf5, 0x3c, 0xcd, 0xa9, + 0xe4, 0xbe, 0x31, 0x4e, 0xab, 0x3f, 0x2d, 0x46, 0x63, 0xe2, 0x9b, 0x8e, + 0x9c, 0xc1, 0x18, 0x02, 0x64, 0x89, 0x2c, 0x80, 0x78, 0x23, 0x09, 0xd9, + 0x97, 0x8b, 0xe5, 0x15, 0x4b, 0xd9, 0xf8, 0xe3, 0x59, 0xec, 0x5a, 0x6e, + 0xd5, 0xe4, 0xbf, 0x75, 0x33, 0xb0, 0xa0, 0x87, 0x1b, 0x50, 0x00, 0x27, + 0xa2, 0x88, 0x5f, 0xfe, 0xe0, 0xc3, 0x30, 0x2d, 0x71, 0x9b, 0x9c, 0xa4, + 0xd6, 0x86, 0xe3, 0x47, 0xcd, 0x70, 0x71, 0xf4, 0x15, 0x6a, 0x62, 0x75, + 0x47, 0x71, 0x23, 0x71, 0x9d, 0xa2, 0xba, 0x17, 0xf7, 0xb8, 0x74, 0x77, + 0x38, 0x2d, 0xac, 0x5a, 0x6d, 0x82, 0xdb, 0x59, 0x6c, 0x3f, 0x75, 0xef, + 0xa4, 0xb7, 0x3a, 0xcc, 0xc6, 0xb3, 0xaa, 0x0b, 0x85, 0xa2, 0xc4, 0x31, + 0x37, 0xe8, 0xb7, 0x00, 0x41, 0x46, 0x6e, 0xab, 0x3a, 0x33, 0xb5, 0x22, + 0xf7, 0xd5, 0x49, 0xbe, 0x4c, 0xc0, 0x9b, 0x92, 0xa2, 0x8c, 0x74, 0x22, + 0x56, 0x7f, 0x8d, 0x21, 0xd2, 0x67, 0x93, 0x72, 0xfd, 0x89, 0x55, 0x68, + 0xab, 0x18, 0x36, 0xfa, 0x09, 0x6f, 0xe7, 0x61, 0x67, 0xb0, 0x4c, 0xc7, + 0x91, 0xea, 0x76, 0x89, 0xac, 0xd3, 0xe6, 0x69, 0xc8, 0x6f, 0x66, 0x53, + 0x4b, 0x82, 0x08, 0x20, 0x32, 0x82, 0x37, 0xe9, 0xad, 0x26, 0xe8, 0x41, + 0xe2, 0xcb, 0xb1, 0x31, 0xd0, 0xd0, 0x0c, 0xd4, 0x8f, 0x06, 0x1a, 0x65, + 0xb8, 0xc5, 0x4d, 0x55, 0xfc, 0x13, 0xcf, 0x14, 0x11, 0xd1, 0xd5, 0x95, + 0x12, 0xd5, 0xd5, 0x8d, 0xce, 0xb9, 0x26, 0x31, 0xe2, 0x7e, 0x34, 0x5e, + 0x7a, 0x73, 0xd7, 0x75, 0x06, 0x71, 0x29, 0xe9, 0x43, 0x9f, 0x4f, 0x42, + 0x97, 0xfa, 0x21, 0x0b, 0x3b, 0xf2, 0xd4, 0xf0, 0x91, 0x57, 0x57, 0x05, + 0x39, 0x12, 0x24, 0x72, 0x27, 0x30, 0xa5, 0x80, 0x84, 0xdb, 0xdd, 0x12, + 0xff, 0xb6, 0x1d, 0xd6, 0xb8, 0x06, 0xa7, 0x55, 0x1a, 0xd1, 0x58, 0xdf, + 0xdc, 0xae, 0x2e, 0xc0, 0x18, 0x44, 0xbe, 0xcd, 0xd2, 0xff, 0x40, 0x4a, + 0x3f, 0x7c, 0x56, 0xbf, 0xc2, 0xbe, 0xaa, 0xed, 0xe7, 0x72, 0xfa, 0xe5, + 0xc8, 0xfe, 0x47, 0x75, 0x16, 0x96, 0x91, 0x0c, 0xdf, 0xc0, 0x0b, 0x9c, + 0x0b, 0x64, 0x85, 0x51, 0xe5, 0x38, 0x15, 0xd8, 0x91, 0x04, 0x17, 0xb7, + 0x5a, 0x07, 0x47, 0x41, 0x16, 0x7b, 0x0f, 0x0f, 0x0e, 0x65, 0xec, 0xc3, + 0xc6, 0x0c, 0x61, 0xc7, 0x66, 0x70, 0x4e, 0x90, 0xf4, 0x5c, 0x82, 0x19, + 0x94, 0x8e, 0x37, 0xd6, 0x49, 0xaf, 0xce, 0x80, 0x0d, 0xf6, 0x86, 0x41, + 0x07, 0x97, 0xaf, 0x92, 0xf3, 0x4e, 0x4c, 0xe9, 0x94, 0x8c, 0xd4, 0x23, + 0xad, 0xee, 0x9c, 0x49, 0x35, 0x67, 0x2b, 0xa8, 0xdf, 0x42, 0xec, 0xd6, + 0x62, 0x2c, 0x72, 0xdb, 0x5d, 0xcf, 0x21, 0xa2, 0x83, 0xf1, 0x36, 0x93, + 0x7c, 0x52, 0x90, 0x72, 0xc3, 0x55, 0xbc, 0x43, 0x3c, 0xac, 0x8d, 0xc6, + 0xdc, 0xcc, 0x53, 0x31, 0x28, 0x0a, 0xf2, 0x2f, 0x14, 0x09, 0x37, 0x87, + 0x7b, 0xe8, 0xfe, 0xdd, 0xea, 0x4c, 0x2b, 0xe0, 0x83, 0x15, 0x57, 0xed, + 0x64, 0xba, 0xc6, 0xcf, 0xbc, 0xa8, 0xd7, 0x24, 0x78, 0xc4, 0x4a, 0xa2, + 0xe6, 0x36, 0x3c, 0xf5, 0x4f, 0x56, 0x0d, 0x79, 0x96, 0xc6, 0x4c, 0x18, + 0x68, 0x97, 0xea, 0x00, 0x97, 0x54, 0xe0, 0x6b, 0xf3, 0xca, 0x24, 0xff, + 0xae, 0x85, 0x4d, 0x67, 0xc1, 0xa1, 0x03, 0xb0, 0x68, 0x3c, 0x84, 0x2e, + 0x7d, 0x7d, 0x41, 0xa8, 0xa2, 0x24, 0xa3, 0x9f, 0x33, 0xa5, 0xc0, 0x75, + 0xf3, 0x9d, 0x1b, 0x3f, 0x59, 0x60, 0x51, 0xa6, 0x4b, 0x47, 0x55, 0x9d, + 0xe8, 0x20, 0x7b, 0xf6, 0x94, 0x47, 0x1c, 0xae, 0x7d, 0x83, 0x8e, 0x10, + 0x87, 0x60, 0x84, 0x94, 0x39, 0xd6, 0xa8, 0x83, 0x1c, 0x33, 0x99, 0x39, + 0x86, 0x3a, 0x94, 0x29, 0x09, 0x34, 0xb1, 0x50, 0x00, 0x56, 0xc8, 0x95, + 0x2c, 0xba, 0x78, 0x98, 0xa5, 0x1f, 0x1d, 0x6f, 0xec, 0x2b, 0x36, 0x92, + 0xd7, 0x84, 0x72, 0xb1, 0xd4, 0x9a, 0x2f, 0xa5, 0xb6, 0xc8, 0x9f, 0xc0, + 0x00, 0x3a, 0x83, 0x3a, 0x83, 0xaf, 0x53, 0x0f, 0xfd, 0x76, 0xd5, 0x05, + 0xa0, 0xc9, 0xab, 0xe3, 0x35, 0x64, 0xbf, 0x2c, 0xd9, 0x77, 0x96, 0xb5, + 0xff, 0x58, 0x3b, 0xed, 0x21, 0xc1, 0x1f, 0x46, 0x99, 0xef, 0x77, 0x3e, + 0xc3, 0x36, 0x41, 0xaf, 0x28, 0xfd, 0x9a, 0x00, 0x82, 0xea, 0x46, 0x92, + 0x36, 0xb7, 0x37, 0x78, 0x51, 0x9c, 0x0d, 0xa5, 0x6b, 0x99, 0x81, 0x4b, + 0x59, 0x5f, 0x87, 0x93, 0x02, 0xd3, 0x40, 0x1c, 0x75, 0x7b, 0x67, 0xfb, + 0xe7, 0x1b, 0x29, 0xa2, 0x0e, 0xa7, 0xa1, 0x33, 0x47, 0x9d, 0x01, 0xc7, + 0xac, 0xc2, 0x74, 0xb2, 0x9a, 0x8c, 0xd3, 0xfb, 0xa4, 0x66, 0x18, 0xc0, + 0xe7, 0xd2, 0xa7, 0xf2, 0x2b, 0x18, 0x97, 0x84, 0x70, 0x1f, 0x18, 0x1d, + 0x48, 0x02, 0xe1, 0x14, 0x65, 0xe9, 0x33, 0xab, 0x24, 0xa8, 0xe9, 0xd1, + 0x8f, 0x82, 0xb8, 0xd2, 0x7f, 0x28, 0xa3, 0xc0, 0xcf, 0x60, 0x79, 0x50, + 0x36, 0x82, 0xb7, 0x58, 0xdf, 0x44, 0x42, 0x6e, 0x66, 0xb0, 0x8c, 0x44, + 0x0c, 0x74, 0xa6, 0x30, 0xfb, 0x95, 0xfb, 0xf3, 0x1f, 0xba, 0x94, 0xd2, + 0xaa, 0xac, 0xb1, 0x4e, 0x46, 0xa0, 0x35, 0xac, 0xda, 0x19, 0x75, 0x94, + 0x23, 0x55, 0x2d, 0xa0, 0xd8, 0xf8, 0x4d, 0x27, 0x66, 0x60, 0xa0, 0xf8, + 0x50, 0xe1, 0xb8, 0x95, 0xa2, 0xd4, 0x08, 0x00, 0x67, 0x71, 0x09, 0xb1, + 0xde, 0xdf, 0xab, 0x47, 0x60, 0x1d, 0x1c, 0x39, 0xe0, 0xa7, 0x08, 0xfc, + 0x59, 0x1f, 0x04, 0x85, 0xfb, 0xeb, 0x0d, 0x0f, 0xb7, 0x28, 0x4e, 0x67, + 0x86, 0x6d, 0x35, 0x4e, 0x04, 0xbc, 0xea, 0x8d, 0x06, 0xaf, 0x25, 0x2c, + 0x95, 0x0f, 0x4d, 0x0b, 0xf7, 0x15, 0xa1, 0x38, 0xa7, 0x55, 0x4e, 0x06, + 0xe8, 0xd0, 0x0a, 0x72, 0x41, 0xe5, 0x2c, 0x25, 0x54, 0x28, 0x14, 0x35, + 0x43, 0x1e, 0xd1, 0x9c, 0x26, 0x62, 0x35, 0xe0, 0xd4, 0x60, 0x43, 0x93, + 0x46, 0xb0, 0x50, 0xa3, 0xee, 0x86, 0x75, 0xaa, 0x04, 0x88, 0xb4, 0x1e, + 0xda, 0x2b, 0xf8, 0x29, 0x3a, 0xa4, 0x2e, 0x78, 0xea, 0x1a, 0xf3, 0xe3, + 0x46, 0x20, 0xd0, 0x9c, 0xf7, 0x4b, 0x9e, 0xfb, 0xe6, 0xf7, 0xca, 0xf1, + 0x55, 0xcb, 0x9b, 0xc8, 0xd6, 0xd6, 0xc7, 0xe1, 0x15, 0x6e, 0x28, 0x57, + 0xbe, 0x98, 0x8b, 0xe0, 0x0b, 0x79, 0x5c, 0x5b, 0x3b, 0xad, 0x24, 0xec, + 0x70, 0x2e, 0xde, 0x6a, 0x3c, 0x07, 0x69, 0x2a, 0x06, 0xdc, 0x28, 0xc1, + 0x2d, 0xa7, 0x7f, 0xa7, 0x27, 0x88, 0x9b, 0x77, 0x50, 0x11, 0x9f, 0xc9, + 0x0e, 0xbe, 0xdc, 0x75, 0x6d, 0xee, 0x90, 0x7e, 0xc7, 0xcc, 0xf4, 0x14, + 0x0f, 0x64, 0x5f, 0xce, 0x3e, 0x2d, 0xa2, 0xa8, 0x2c, 0xff, 0xd6, 0xed, + 0x7d, 0xb8, 0xc5, 0xa4, 0xbd, 0x02, 0x95, 0xb9, 0xf1, 0xf7, 0xba, 0x87, + 0x45, 0x00, 0x5f, 0x3b, 0xc6, 0x25, 0x0c, 0xaf, 0x8f, 0x29, 0x9a, 0x97, + 0x02, 0x0e, 0x6f, 0xeb, 0x43, 0xbd, 0x67, 0x37, 0x5a, 0x96, 0x33, 0xa7, + 0x76, 0x4e, 0x19, 0x86, 0x36, 0x66, 0xa5, 0x3e, 0x2d, 0x0f, 0x6b, 0x92, + 0xe2, 0x94, 0xd2, 0xac, 0xfb, 0x2f, 0xa1, 0xb1, 0x27, 0x11, 0x94, 0x27, + 0x55, 0x5a, 0xe6, 0x42, 0xb0, 0xc4, 0xdd, 0x9d, 0x64, 0x54, 0x2f, 0xf1, + 0x95, 0x22, 0xb5, 0x63, 0xfc, 0xa0, 0xdc, 0x06, 0x57, 0xc4, 0xac, 0x27, + 0x8a, 0x50, 0x02, 0x4c, 0x03, 0x25, 0xb6, 0xe5, 0x69, 0x81, 0xe0, 0x63, + 0xff, 0x6b, 0x5f, 0x98, 0xad, 0x9f, 0xe2, 0x77, 0x1e, 0xaf, 0xf8, 0x21, + 0x77, 0x05, 0x9f, 0xc3, 0x49, 0x93, 0x78, 0x73, 0x5d, 0x43, 0xac, 0xc9, + 0x29, 0x65, 0x64, 0xe0, 0x31, 0xf1, 0xec, 0x9b, 0xcf, 0x65, 0x0c, 0x9d, + 0xe7, 0x10, 0xdc, 0x37, 0x05, 0x07, 0x65, 0x35, 0x51, 0x46, 0xd9, 0xe4, + 0x84, 0xb0, 0x37, 0xb2, 0x1f, 0xc3, 0xd4, 0x76, 0x3d, 0x2c, 0x2d, 0xe6, + 0x20, 0x7b, 0xa6, 0xe5, 0x4b, 0x58, 0x35, 0xbb, 0x4b, 0xd4, 0xc6, 0x06, + 0x99, 0xad, 0xd9, 0x8b, 0xd2, 0x3b, 0x12, 0xc3, 0xa6, 0xc4, 0x5f, 0x62, + 0x8a, 0x85, 0x1b, 0xb7, 0xe6, 0x02, 0xf7, 0x07, 0xbe, 0xc3, 0xa1, 0xa5, + 0x29, 0xaa, 0xcf, 0x04, 0xcc, 0xeb, 0x92, 0xf6, 0xe8, 0x83, 0x8f, 0x3a, + 0x18, 0x93, 0x2a, 0xda, 0x4c, 0xee, 0x2a, 0xfa, 0x3c, 0xc4, 0xf2, 0x6a, + 0x02, 0xee, 0x00, 0xe1, 0x68, 0xb7, 0xcb, 0xdc, 0xe4, 0x9a, 0x96, 0xed, + 0x70, 0xa7, 0xf2, 0x05, 0xa3, 0xdc, 0x06, 0x1b, 0x7e, 0xb2, 0xbd, 0x75, + 0x70, 0x95, 0xf6, 0x9d, 0x96, 0xee, 0xda, 0x3a, 0x07, 0x39, 0xb4, 0x24, + 0x19, 0x4e, 0x26, 0x4f, 0xa6, 0xab, 0x90, 0x17, 0x1e, 0xd2, 0x81, 0x7c, + 0xc8, 0x8f, 0xc0, 0x99, 0xbf, 0x32, 0xe3, 0x53, 0x42, 0x53, 0x63, 0xf8, + 0xa4, 0x0f, 0x73, 0x05, 0x6c, 0x08, 0x5e, 0xe2, 0x04, 0x3d, 0xa3, 0x27, + 0xc3, 0x1b, 0xdd, 0xff, 0x71, 0x2a, 0xf7, 0x24, 0xc7, 0x14, 0x20, 0xe5, + 0xec, 0xde, 0x89, 0x02, 0x4f, 0xd7, 0xe0, 0xe4, 0x1d, 0xd4, 0xc4, 0xf3, + 0xc0, 0x95, 0x78, 0xd7, 0xa8, 0x1d, 0x29, 0x87, 0x3e, 0x9b, 0x73, 0x26, + 0xcf, 0x3d, 0x29, 0xbc, 0x85, 0xce, 0xf8, 0x1d, 0xa5, 0xc5, 0x72, 0x85, + 0xdf, 0x4d, 0x95, 0x8c, 0xdc, 0x37, 0x3b, 0xa4, 0xc3, 0x8a, 0x4a, 0x9a, + 0xd4, 0xc1, 0x55, 0xe0, 0xa5, 0x3e, 0x20, 0xa1, 0xdc, 0x3b, 0x4f, 0x39, + 0xf5, 0xed, 0x7b, 0xdb, 0xb5, 0x22, 0xbb, 0x85, 0x42, 0x63, 0x52, 0xfe, + 0xc4, 0xb3, 0xef, 0x7c, 0xfb, 0xeb, 0x4f, 0x9a, 0x1e, 0x00, 0xbf, 0xd1, + 0x83, 0xf9, 0x51, 0xbf, 0x1f, 0x36, 0x3e, 0x34, 0x47, 0xfc, 0x7b, 0x84, + 0x16, 0x30, 0xbc, 0x53, 0x1c, 0x56, 0xfe, 0xab, 0x94, 0xe5, 0x98, 0x5c, + 0x09, 0x7b, 0x06, 0x57, 0xa3, 0x38, 0x0a, 0x36, 0xa7, 0x10, 0xc5, 0xc5, + 0xd4, 0xbb, 0x20, 0x0c, 0x7b, 0x45, 0xd0, 0x48, 0x39, 0x8e, 0x9b, 0xad, + 0x58, 0xc4, 0x19, 0x82, 0xa9, 0x41, 0xca, 0xde, 0x9f, 0x94, 0x7b, 0x4f, + 0x3c, 0x15, 0x74, 0xec, 0xb7, 0xa2, 0x42, 0xe2, 0xcd, 0x0d, 0xa0, 0x9f, + 0xf9, 0x08, 0xc8, 0x85, 0xe9, 0xaa, 0x27, 0x74, 0xe4, 0xd2, 0x96, 0x58, + 0x72, 0x0c, 0x97, 0x20, 0x1e, 0xc6, 0xf7, 0xcf, 0x9a, 0x22, 0x81, 0x68, + 0xcf, 0x2b, 0x03, 0x9f, 0xcc, 0xe1, 0xd3, 0x4f, 0x39, 0xba, 0xcb, 0x1b, + 0x06, 0xb3, 0xc1, 0xd6, 0x21, 0xf7, 0x29, 0xd8, 0x58, 0x5d, 0x40, 0xda, + 0x0e, 0x1d, 0x3a, 0xad, 0xf6, 0x23, 0x70, 0xe4, 0x6f, 0x07, 0x98, 0x8f, + 0x87, 0x4e, 0x63, 0x57, 0x41, 0xaf, 0x12, 0x9f, 0x8a, 0x11, 0x6b, 0xfd, + 0x18, 0x31, 0xdf, 0x49, 0x10, 0x97, 0x85, 0x80, 0xfd, 0xb8, 0x83, 0xad, + 0x40, 0x8d, 0x83, 0x3c, 0x7a, 0xab, 0x23, 0x6e, 0x8e, 0x3a, 0xab, 0xf7, + 0x22, 0x17, 0x6f, 0xa2, 0x12, 0xe8, 0xb5, 0x66, 0xc3, 0x8a, 0x04, 0xc8, + 0xd5, 0xe1, 0xc5, 0xf6, 0x71, 0xeb, 0x13, 0xca, 0x91, 0x1b, 0x85, 0xbb, + 0xb7, 0x3d, 0x85, 0x16, 0x2a, 0xb2, 0x7c, 0xf6, 0x60, 0xa0, 0xb0, 0x8c, + 0xc5, 0xf7, 0x8f, 0x4a, 0x21, 0x67, 0x9e, 0xde, 0x0f, 0x4a, 0x53, 0x36, + 0xf2, 0xf9, 0x73, 0xe1, 0xaf, 0xdf, 0x72, 0xcd, 0x8f, 0xc9, 0x19, 0xc4, + 0x48, 0x27, 0xe8, 0x26, 0x5f, 0xbe, 0x82, 0xc1, 0x0d, 0xf5, 0x75, 0x64, + 0x38, 0xd5, 0x7a, 0x2f, 0x25, 0xbd, 0xe4, 0x3d, 0x6d, 0x2e, 0x67, 0x14, + 0xd8, 0xf2, 0x73, 0x3f, 0x13, 0xa3, 0xb6, 0xae, 0xe7, 0xa3, 0xb3, 0xb8, + 0x31, 0xec, 0xdd, 0x52, 0x53, 0xc9, 0xea, 0x1d, 0x75, 0x3c, 0x1b, 0x11, + 0x1a, 0xc5, 0x47, 0x7d, 0x0b, 0x38, 0xdc, 0xad, 0xfe, 0x0f, 0x97, 0xd9, + 0x90, 0xbe, 0xb2, 0xd5, 0xb2, 0xd3, 0x29, 0x66, 0x0a, 0xad, 0x40, 0x6b, + 0x05, 0x71, 0x42, 0x2e, 0x5b, 0x54, 0xda, 0x1b, 0x91, 0xb7, 0xd2, 0xc3, + 0x7e, 0xfc, 0xcf, 0xb4, 0xe8, 0x19, 0x17, 0xcd, 0x2d, 0x01, 0x8d, 0x4d, + 0xe6, 0x2a, 0x2b, 0x40, 0x67, 0x92, 0x76, 0x6e, 0x4b, 0x38, 0x6f, 0x08, + 0xf0, 0x4e, 0x5f, 0xcd, 0x47, 0x17, 0x39, 0xb5, 0x6c, 0xa5, 0x25, 0x7b, + 0x80, 0x34, 0x5c, 0xb9, 0xef, 0x66, 0x8e, 0x59, 0x44, 0xf0, 0xe5, 0xdf, + 0x4e, 0x4b, 0x2c, 0xa2, 0x5a, 0x89, 0x5f, 0x84, 0x2b, 0x55, 0x05, 0xea, + 0x84, 0xf9, 0xa4, 0x5b, 0x67, 0xf4, 0x6c, 0x71, 0x11, 0x90, 0x19, 0x5a, + 0xfa, 0x10, 0xd3, 0x8f, 0x8b, 0x1d, 0x82, 0xdf, 0xd6, 0xbf, 0x90, 0x6c, + 0xa3, 0x25, 0x18, 0x28, 0x72, 0xb9, 0x31, 0xc0, 0x50, 0x8c, 0xcb, 0x75, + 0xb5, 0x95, 0x1f, 0xe3, 0xd6, 0x28, 0xe3, 0xb8, 0xda, 0x83, 0xff, 0x5b, + 0x09, 0x06, 0xb8, 0xb0, 0x4f, 0x8b, 0x29, 0xb1, 0x99, 0x4f, 0x19, 0x9b, + 0x7e, 0x64, 0x35, 0x4c, 0xad, 0x38, 0xbe, 0xf2, 0x1c, 0xe9, 0x60, 0x56, + 0x97, 0xd9, 0x66, 0x53, 0x14, 0x9c, 0xa2, 0x38, 0xf6, 0xe5, 0x1c, 0x2c, + 0xc9, 0xea, 0x35, 0xa6, 0xa6, 0x43, 0xf4, 0x05, 0x35, 0xef, 0x36, 0xc3, + 0x0e, 0x65, 0x18, 0x4f, 0x88, 0x52, 0x16, 0x2f, 0x59, 0xb6, 0x33, 0xe0, + 0x8f, 0x06, 0xb4, 0x62, 0x24, 0x6b, 0xdc, 0x44, 0x00, 0x6e, 0xdc, 0x7e, + 0xd6, 0x79, 0xff, 0xf5, 0xde, 0xf1, 0x60, 0xdb, 0x49, 0xd7, 0x40, 0x14, + 0xaa, 0x6d, 0xfa, 0x7d, 0x57, 0x54, 0xa0, 0xf3, 0x1e, 0x91, 0xc3, 0x74, + 0x1f, 0xb4, 0x20, 0xa8, 0xd2, 0x54, 0x6f, 0x6a, 0x1b, 0x30, 0x98, 0x36, + 0x9b, 0x9f, 0xee, 0x8f, 0x5b, 0xf7, 0x5f, 0x7e, 0x3f, 0x98, 0x29, 0x23, + 0xeb, 0xb4, 0x52, 0x70, 0xcb, 0x74, 0xfe, 0xc9, 0xe8, 0xc0, 0x84, 0x34, + 0x52, 0xa9, 0x4a, 0xcb, 0x88, 0x2e, 0x02, 0xb4, 0xaa, 0x30, 0x2b, 0x6e, + 0x9d, 0x2c, 0x5b, 0x33, 0xa0, 0xf0, 0xa7, 0x0d, 0x84, 0x00, 0x87, 0xa3, + 0xbe, 0x8b, 0x30, 0x34, 0xce, 0x0e, 0x3b, 0xb2, 0x1d, 0x37, 0xda, 0xcf, + 0xf1, 0xda, 0x63, 0x03, 0x8a, 0xab, 0x5b, 0x46, 0x93, 0x3b, 0x6f, 0x0b, + 0x0c, 0xb0, 0x05, 0x23, 0x22, 0x82, 0x96, 0xd8, 0x56, 0x72, 0xe2, 0x6d, + 0xc1, 0xcb, 0xac, 0x49, 0xa0, 0x15, 0xdf, 0x0e, 0x7d, 0x93, 0x8c, 0x80, + 0x64, 0x2a, 0x29, 0x80, 0x49, 0x2e, 0xfb, 0xe4, 0x9d, 0x31, 0x5f, 0xe1, + 0xe9, 0xd8, 0x8a, 0xf4, 0xcc, 0x94, 0xf7, 0xda, 0x0d, 0x4c, 0x13, 0x2f, + 0xd1, 0xec, 0xad, 0xfa, 0xfd, 0xd9, 0x76, 0xca, 0x4c, 0x6e, 0xfa, 0x25, + 0xc0, 0xa7, 0xd8, 0x98, 0x90, 0x99, 0x7f, 0x87, 0x81, 0x21, 0x64, 0xfc, + 0xe2, 0xca, 0x4f, 0x02, 0x50, 0x29, 0x95, 0x8b, 0x4d, 0x7c, 0x9a, 0x63, + 0xda, 0x79, 0x4c, 0x9a, 0xc9, 0xad, 0x90, 0xcb, 0x85, 0x7a, 0xad, 0x72, + 0x0a, 0x2a, 0xb2, 0x50, 0x2a, 0xe4, 0x19, 0xe3, 0xad, 0xe9, 0x40, 0xf0, + 0xd6, 0xb1, 0x0e, 0x8f, 0x10, 0x86, 0xe8, 0x52, 0x3b, 0x31, 0x7b, 0xe5, + 0x68, 0x64, 0x3f, 0x73, 0x05, 0x2b, 0x43, 0x00, 0xe2, 0x88, 0x5a, 0x22, + 0xa0, 0x34, 0xf8, 0x0a, 0xcc, 0x16, 0xde, 0x69, 0x6c, 0x6a, 0x9c, 0x15, + 0xb9, 0x1e, 0x98, 0xf9, 0xdd, 0x05, 0x64, 0xbc, 0xf8, 0xfe, 0xb0, 0xbe, + 0xeb, 0xf3, 0xd9, 0x92, 0x1e, 0xc6, 0xed, 0xb3, 0x7e, 0xdd, 0x6f, 0x37, + 0xa5, 0xea, 0x04, 0xe8, 0x94, 0xbd, 0x31, 0x3d, 0x20, 0x9e, 0xe1, 0x0a, + 0x6f, 0xfc, 0xb7, 0x3c, 0xac, 0x45, 0xbf, 0x8d, 0x68, 0x62, 0x97, 0x27, + 0x5c, 0xc3, 0x95, 0xef, 0xb9, 0x16, 0x96, 0x8a, 0x45, 0x01, 0x1c, 0x2f, + 0x41, 0x04, 0x92, 0xcd, 0xc3, 0x3f, 0x2e, 0xdb, 0xb9, 0xcc, 0x31, 0x30, + 0xf5, 0x33, 0x24, 0xc3, 0x7d, 0x44, 0xc6, 0xac, 0x57, 0x3a, 0x81, 0x23, + 0xf5, 0x72, 0x42, 0x69, 0xf3, 0x13, 0x83, 0x16, 0x16, 0xbe, 0x83, 0xf3, + 0xf2, 0x18, 0xb8, 0xa4, 0x2c, 0x11, 0x4d, 0x22, 0x17, 0x45, 0x9b, 0x9f, + 0x6e, 0x9d, 0x20, 0x21, 0xc6, 0xea, 0xbc, 0x96, 0xc3, 0x4c, 0xbc, 0x65, + 0xeb, 0x90, 0x41, 0x31, 0xff, 0x9f, 0x89, 0x7f, 0xc5, 0x31, 0xf6, 0xb1, + 0x40, 0xcf, 0xf2, 0xe1, 0x5c, 0xf6, 0xcc, 0xef, 0x81, 0x4d, 0x03, 0x4f, + 0xb5, 0x4d, 0x07, 0x34, 0xd9, 0x3b, 0x3b, 0x99, 0xca, 0x84, 0x84, 0x74, + 0x5a, 0xc0, 0x4d, 0xb8, 0x93, 0x1e, 0xd7, 0x4e, 0xf4, 0x9b, 0x64, 0x8e, + 0xc2, 0x15, 0x39, 0x40, 0x8b, 0xbb, 0xea, 0x68, 0x03, 0xac, 0x13, 0xf4, + 0x9a, 0x29, 0xba, 0x42, 0x86, 0x68, 0xf3, 0x9c, 0x7d, 0xc2, 0x10, 0xcb, + 0xd9, 0x4a, 0x21, 0xf4, 0x25, 0x0a, 0x60, 0x87, 0xfc, 0xdd, 0x6a, 0xde, + 0x54, 0xf2, 0x16, 0x61, 0x90, 0xeb, 0xbc, 0x3e, 0xdb, 0xb3, 0x81, 0xf9, + 0xc8, 0x7b, 0x98, 0x15, 0x83, 0x22, 0x50, 0x36, 0x56, 0x9d, 0x11, 0x24, + 0x9e, 0x59, 0xe4, 0xc1, 0xd3, 0x35, 0x91, 0xb8, 0x65, 0x93, 0xcb, 0xe3, + 0x92, 0xa9, 0x4a, 0xa8, 0x35, 0x72, 0xd1, 0x8f, 0xa8, 0x50, 0xba, 0x4e, + 0x29, 0x88, 0x80, 0x49, 0xa5, 0x5f, 0x15, 0x2f, 0x2d, 0x93, 0x4c, 0x0b, + 0xc3, 0x50, 0x66, 0x4c, 0xd9, 0x71, 0x28, 0x0b, 0x7a, 0xf5, 0x72, 0x58, + 0xba, 0xb4, 0x45, 0xb2, 0xb9, 0x91, 0xb2, 0x03, 0xcf, 0x7b, 0x7e, 0x95, + 0xff, 0x08, 0x74, 0x16, 0xfa, 0x44, 0x85, 0x9c, 0x96, 0x4c, 0xfe, 0x5f, + 0x76, 0x97, 0xc5, 0x35, 0x39, 0x33, 0xf0, 0xc0, 0x10, 0x83, 0x07, 0x8b, + 0xcf, 0x9a, 0x5d, 0xc4, 0xf2, 0x3a, 0x3c, 0x13, 0x28, 0x91, 0x49, 0x41, + 0xf5, 0x3b, 0xdb, 0x3e, 0xfe, 0x78, 0xdf, 0x1b, 0x91, 0x38, 0x15, 0xe5, + 0x3d, 0xfa, 0x95, 0xf1, 0x65, 0xd2, 0x9a, 0x76, 0x79, 0x6c, 0xb9, 0x5e, + 0x08, 0xfc, 0x91, 0x04, 0xff, 0x53, 0x4e, 0xd9, 0x91, 0x47, 0x18, 0xa6, + 0xa2, 0x08, 0xc0, 0xc8, 0x52, 0x0b, 0xdd, 0x0a, 0x82, 0xb0, 0xf9, 0x36, + 0x7a, 0xbf, 0xd7, 0xfa, 0x1b, 0x10, 0x75, 0x40, 0xeb, 0xd9, 0xbd, 0x94, + 0xdc, 0x3d, 0xb9, 0x04, 0x8f, 0xe9, 0x50, 0xf6, 0xc1, 0x1e, 0xc5, 0x76, + 0x19, 0x98, 0x2c, 0xe0, 0x7e, 0x78, 0x83, 0x07, 0x9c, 0xf1, 0x7d, 0x28, + 0x0f, 0x0f, 0x23, 0x40, 0xdf, 0xb9, 0xac, 0x1e, 0xf7, 0x2e, 0xcd, 0xe6, + 0xef, 0xe3, 0x89, 0x1f, 0xc5, 0xf5, 0x64, 0x04, 0x5e, 0xc2, 0x31, 0x38, + 0xa1, 0x80, 0x01, 0x31, 0x70, 0x52, 0x52, 0xeb, 0x94, 0x4c, 0x5c, 0xad, + 0x96, 0x2a, 0xb8, 0xd8, 0x08, 0x8d, 0x34, 0x07, 0x42, 0x59, 0x51, 0xf2, + 0x8e, 0xd3, 0x4e, 0x0a, 0x96, 0x9f, 0x89, 0x7f, 0x8d, 0x4a, 0xfa, 0x10, + 0x27, 0xb6, 0xba, 0xc7, 0x6b, 0xf4, 0x2d, 0x01, 0x49, 0xb7, 0xf8, 0xb7, + 0xd8, 0x30, 0x14, 0x83, 0x2a, 0x88, 0xa5, 0x31, 0x83, 0x57, 0xf5, 0xfd, + 0xfe, 0xca, 0xda, 0x69, 0x7b, 0x38, 0xf5, 0x5a, 0x9c, 0xea, 0xc9, 0x75, + 0xb0, 0x80, 0xb2, 0x91, 0xe7, 0x27, 0xf6, 0xf2, 0xfe, 0x42, 0x8e, 0x7e, + 0xac, 0x23, 0xc6, 0x60, 0x84, 0x74, 0xed, 0x3e, 0xec, 0x44, 0x9e, 0x07, + 0x6d, 0xcb, 0x0f, 0x49, 0xd1, 0x5d, 0xb9, 0x19, 0x86, 0x84, 0x33, 0x15, + 0x8e, 0xce, 0x70, 0x67, 0x1e, 0x49, 0x6c, 0x87, 0xd8, 0xd1, 0x1d, 0x83, + 0x77, 0xa5, 0xfc, 0x0c, 0xec, 0xa8, 0xcc, 0x40, 0x04, 0xca, 0x0d, 0xfd, + 0x85, 0xc3, 0x1c, 0x51, 0x37, 0x0a, 0xb5, 0xe6, 0x36, 0x74, 0x49, 0x32, + 0xd6, 0x99, 0x53, 0x53, 0x96, 0x41, 0x97, 0xf9, 0xac, 0x35, 0x6c, 0x3d, + 0xb9, 0x6e, 0x9b, 0x31, 0x97, 0xe2, 0x38, 0xf6, 0xd0, 0xb2, 0x61, 0xa1, + 0x67, 0x5b, 0xae, 0xb8, 0xfd, 0x87, 0x16, 0x33, 0x97, 0x9c, 0xce, 0x09, + 0xc6, 0x19, 0x0e, 0xf9, 0x28, 0x57, 0xd6, 0x84, 0x44, 0xd4, 0xf9, 0xb8, + 0xf5, 0x00, 0x24, 0x57, 0x2d, 0x31, 0xd0, 0x6c, 0xaf, 0x1d, 0x78, 0x30, + 0x08, 0x2c, 0x56, 0xae, 0xac, 0x8e, 0x64, 0x8f, 0xd8, 0x9a, 0xea, 0xd3, + 0x0b, 0x7d, 0x38, 0x1b, 0x78, 0x25, 0xcd, 0xb9, 0x92, 0xc1, 0x3d, 0x86, + 0xa9, 0xa5, 0xfb, 0x74, 0x00, 0x08, 0xbe, 0xc4, 0x39, 0x52, 0x52, 0x75, + 0xe1, 0x98, 0x02, 0x04, 0xc0, 0x7d, 0x8b, 0xb5, 0xb3, 0x22, 0x7b, 0x3e, + 0xb0, 0x8e, 0x17, 0x4e, 0x5d, 0xf4, 0x77, 0x50, 0x2b, 0x01, 0x4d, 0xdc, + 0x15, 0x15, 0x3c, 0x65, 0xed, 0x5f, 0x5d, 0x56, 0xe6, 0xb5, 0x7c, 0x71, + 0x44, 0x3b, 0xcc, 0xab, 0xdb, 0x91, 0xdd, 0x53, 0x58, 0xe1, 0x4f, 0x92, + 0x22, 0x48, 0xd1, 0x74, 0xb3, 0x92, 0xac, 0x38, 0x83, 0x27, 0x7d, 0x0c, + 0x92, 0x9e, 0xbc, 0xc6, 0xe5, 0xca, 0x0c, 0xe4, 0xca, 0x40, 0xfb, 0x61, + 0x49, 0xe8, 0xb6, 0x4e, 0xc0, 0xe2, 0x66, 0x8b, 0x9a, 0x13, 0xdc, 0x89, + 0x36, 0x2f, 0x08, 0xe4, 0xb3, 0x2a, 0x17, 0x47, 0x18, 0x04, 0xdf, 0x43, + 0xf5, 0xed, 0x69, 0xdd, 0x74, 0xcd, 0x94, 0x82, 0x7d, 0x92, 0x05, 0x4a, + 0x2d, 0x26, 0xd6, 0xa4, 0xca, 0x43, 0xc0, 0xdd, 0x60, 0x2c, 0xd5, 0x74, + 0x95, 0x3a, 0x27, 0xa2, 0xa4, 0x8d, 0xe7, 0xb7, 0x88, 0x46, 0x82, 0x79, + 0x65, 0x42, 0xd4, 0xe1, 0xbe, 0x9a, 0x99, 0x6e, 0x5d, 0x41, 0x84, 0xd4, + 0xb0, 0xcf, 0x66, 0x63, 0x3c, 0x53, 0x3a, 0x7c, 0xfc, 0x16, 0xc4, 0x77, + 0x7b, 0x6c, 0x45, 0x25, 0x54, 0x4b, 0x09, 0x0f, 0xb1, 0x5a, 0x8c, 0x82, + 0xc6, 0x8e, 0x0c, 0x8a, 0xbe, 0x92, 0x12, 0xc2, 0xa5, 0x09, 0xb6, 0x2c, + 0x0b, 0x1c, 0xf4, 0x65, 0x91, 0x85, 0x69, 0xac, 0x0d, 0x11, 0xa1, 0x9a, + 0x8c, 0xe8, 0x55, 0x45, 0x9e, 0xef, 0xd6, 0xfd, 0xbd, 0x43, 0xe3, 0x5b, + 0x51, 0x46, 0xa3, 0x3c, 0x64, 0x61, 0x68, 0xe2, 0xd7, 0xc6, 0xf4, 0x56, + 0xfc, 0x92, 0x27, 0x2f, 0x2a, 0x40, 0x40, 0x3a, 0x88, 0xa9, 0x53, 0xd3, + 0x72, 0xec, 0xe5, 0xe9, 0x79, 0x05, 0x5b, 0x9e, 0x3c, 0x5e, 0x20, 0x56, + 0x86, 0x96, 0x46, 0xba, 0x9d, 0x6c, 0x2e, 0x24, 0xa4, 0xd2, 0xfc, 0x0a, + 0x2e, 0x66, 0x32, 0x16, 0xcf, 0x57, 0x6c, 0xb5, 0xbb, 0x65, 0xb4, 0xbd, + 0xd8, 0x80, 0xa2, 0x0c, 0x53, 0x11, 0xd4, 0x43, 0x77, 0x60, 0x01, 0x38, + 0x6d, 0x2e, 0xae, 0xe9, 0x12, 0x95, 0xbc, 0xb4, 0x69, 0x9b, 0xfd, 0x69, + 0x44, 0x6a, 0x5a, 0x71, 0x4a, 0x2d, 0xf3, 0x7f, 0xd1, 0x70, 0x6e, 0x54, + 0x39, 0x03, 0x05, 0x71, 0x92, 0x3c, 0x52, 0x8c, 0x9d, 0xa4, 0x40, 0x34, + 0x2a, 0x97, 0x2d, 0x5d, 0xf7, 0x49, 0xb2, 0x99, 0x0b, 0x10, 0x92, 0x33, + 0x99, 0x87, 0xa9, 0xa5, 0xe5, 0xdf, 0xd4, 0x32, 0xb8, 0x51, 0x71, 0x42, + 0x7b, 0xab, 0x57, 0x23, 0x9d, 0xcc, 0x9b, 0x50, 0x9c, 0x9a, 0x69, 0x6b, + 0x23, 0x4a, 0x3c, 0x03, 0x84, 0x1a, 0xed, 0x65, 0x3c, 0x89, 0x09, 0xc4, + 0x70, 0xff, 0x8c, 0x43, 0x18, 0xce, 0xa7, 0xbf, 0x14, 0xc8, 0x79, 0xd8, + 0x56, 0x14, 0x7e, 0x03, 0xc8, 0x74, 0x2d, 0x48, 0xb8, 0xa3, 0x47, 0xc6, + 0x9d, 0xbf, 0x48, 0xe6, 0x49, 0x88, 0x08, 0x01, 0xb3, 0x16, 0x48, 0x32, + 0x33, 0xda, 0xc8, 0x62, 0x7e, 0x6b, 0xa8, 0x06, 0xc7, 0x24, 0x95, 0xb5, + 0xdf, 0x0a, 0xd3, 0x01, 0xbe, 0xdc, 0xa8, 0x56, 0x4f, 0xc1, 0x7b, 0xf6, + 0x8c, 0x46, 0x7a, 0x4d, 0x22, 0x0d, 0x96, 0x20, 0x9d, 0xe3, 0xcd, 0xb7, + 0x92, 0x71, 0x98, 0x98, 0x18, 0x45, 0xb9, 0x86, 0x78, 0x46, 0x92, 0xcb, + 0xa8, 0x34, 0x02, 0xbd, 0x09, 0xdf, 0x10, 0x1b, 0x61, 0x0b, 0x70, 0xb1, + 0x6e, 0xdd, 0xaa, 0xe2, 0x58, 0x4a, 0xcf, 0x1d, 0x15, 0xab, 0xeb, 0x2a, + 0xac, 0xdd, 0x1a, 0xae, 0x41, 0x73, 0xb1, 0x69, 0x36, 0x04, 0x63, 0x7c, + 0x2b, 0x3e, 0x59, 0x0c, 0x51, 0xd2, 0xfb, 0xb4, 0x0b, 0x4b, 0xdb, 0x02, + 0x4b, 0x0d, 0x42, 0xe9, 0x60, 0xdc, 0xb2, 0x41, 0x71, 0x77, 0xa6, 0x4a, + 0x24, 0x63, 0xa4, 0xbc, 0x2b, 0x88, 0x6c, 0xd2, 0xb2, 0x77, 0xb7, 0xe1, + 0x0e, 0xa4, 0x99, 0x1b, 0x91, 0x3d, 0x04, 0xee, 0xf8, 0x5f, 0x8b, 0xfb, + 0x27, 0x64, 0x8a, 0xca, 0x39, 0x53, 0x6e, 0xfe, 0x9a, 0x7c, 0x58, 0x02, + 0xc5, 0x00, 0xd2, 0xb1, 0x57, 0x59, 0x13, 0x0a, 0x9d, 0x22, 0x27, 0xde, + 0x6a, 0x60, 0x7a, 0x71, 0x68, 0xad, 0x5f, 0x02, 0x8b, 0xc8, 0x00, 0x63, + 0x12, 0x1a, 0x87, 0x34, 0x4f, 0x4d, 0xe5, 0xce, 0x3b, 0x2d, 0x08, 0x53, + 0xde, 0x77, 0xa8, 0x2e, 0x3b, 0xfd, 0x2c, 0xff, 0x0f, 0x08, 0x38, 0x35, + 0x8d, 0xc7, 0xf4, 0x27, 0x3a, 0xbc, 0xad, 0xa6, 0x35, 0x48, 0x2c, 0x9c, + 0x38, 0xdc, 0x2c, 0x63, 0xde, 0x3d, 0x18, 0x9e, 0x19, 0x02, 0x8b, 0x1b, + 0x93, 0x53, 0xce, 0xb7, 0x05, 0x7e, 0xed, 0x4c, 0xa6, 0x5f, 0x0e, 0x8e, + 0xe2, 0x13, 0x6b, 0xdd, 0xcf, 0xa3, 0x1b, 0xd9, 0xdf, 0xbf, 0x3e, 0xb1, + 0xe9, 0x63, 0x20, 0x5d, 0xdd, 0x69, 0xc4, 0x0c, 0x90, 0xad, 0x59, 0x2e, + 0x6a, 0x68, 0x48, 0x4e, 0x79, 0x38, 0xac, 0xb4, 0xd6, 0x9d, 0xde, 0xe8, + 0x17, 0xdb, 0xd0, 0x6f, 0x2b, 0x4f, 0x43, 0x36, 0x11, 0x4d, 0xe9, 0x86, + 0xb1, 0xac, 0xc0, 0xf5, 0xd9, 0x77, 0xf2, 0x7c, 0x11, 0x42, 0x1d, 0x24, + 0xae, 0x63, 0x92, 0x1f, 0xd4, 0xdb, 0xb7, 0xdd, 0x7d, 0x24, 0xb6, 0x23, + 0x9f, 0x25, 0xce, 0xa2, 0xb6, 0x82, 0x1d, 0x20, 0x56, 0x78, 0x85, 0x6a, + 0x2c, 0x24, 0x87, 0x23, 0xfe, 0x09, 0xbc, 0x2c, 0x28, 0xea, 0xcd, 0x2c, + 0x05, 0xd9, 0x7d, 0x74, 0xfb, 0x8b, 0x9e, 0x2c, 0xf9, 0x8e, 0xcb, 0xd9, + 0xf1, 0x62, 0x6a, 0x8a, 0xeb, 0x6c, 0x76, 0x74, 0xb6, 0x31, 0xbf, 0xae, + 0x36, 0x18, 0x9e, 0x8d, 0xe7, 0x18, 0x4a, 0x19, 0xe0, 0x95, 0x0d, 0x6e, + 0x9b, 0x85, 0xba, 0xe1, 0x46, 0x65, 0x4e, 0xe0, 0x91, 0x25, 0x56, 0xc8, + 0x02, 0x9f, 0xba, 0xa4, 0x6a, 0xab, 0xbb, 0xd2, 0x4b, 0x7a, 0xe1, 0x6b, + 0xa4, 0xc2, 0xbb, 0xb4, 0x6e, 0x7e, 0x0e, 0x9e, 0x6e, 0x2d, 0x93, 0x88, + 0x2c, 0x28, 0xb9, 0x0a, 0xc4, 0x1b, 0x69, 0x4d, 0xf6, 0xc9, 0x96, 0x24, + 0xc1, 0x52, 0x42, 0x6e, 0x1d, 0x2f, 0xff, 0xf9, 0xbc, 0x90, 0x2c, 0xc5, + 0xae, 0xe5, 0xa7, 0x7b, 0x4c, 0x6f, 0x4a, 0x62, 0xbb, 0xbb, 0x9a, 0x78, + 0x02, 0xc2, 0x5b, 0x40, 0x89, 0x50, 0x82, 0x8a, 0x9e, 0xf1, 0xa4, 0x44, + 0xa1, 0xf8, 0x3b, 0x02, 0x23, 0xd8, 0xe8, 0x63, 0xb3, 0xe2, 0x93, 0xc6, + 0x97, 0xfa, 0xd9, 0x28, 0xb0, 0xc5, 0x64, 0x3c, 0xe2, 0xc8, 0xf4, 0xbe, + 0x5e, 0x80, 0x3e, 0x50, 0xf7, 0x75, 0xeb, 0xc7, 0xe6, 0x36, 0xc2, 0x3c, + 0x1c, 0x4c, 0xe9, 0x1a, 0x27, 0x3f, 0xe0, 0xc0, 0xc5, 0x8a, 0x62, 0x9c, + 0x22, 0x85, 0x9a, 0x51, 0x0b, 0x61, 0x76, 0xa6, 0x49, 0x81, 0xc0, 0x29, + 0x12, 0xef, 0x4b, 0xb8, 0xb4, 0xa4, 0x9d, 0x09, 0x39, 0x95, 0x43, 0xfb, + 0x7f, 0x1a, 0x6d, 0x2f, 0xa7, 0x94, 0x8c, 0xf3, 0x90, 0x9c, 0xfe, 0x11, + 0x6f, 0x2c, 0xb9, 0x08, 0x66, 0x77, 0x48, 0xac, 0x95, 0x9e, 0xd7, 0x92, + 0xd9, 0x9a, 0x0a, 0xc1, 0x9a, 0x15, 0x4e, 0x11, 0xe7, 0x90, 0x9f, 0xfc, + 0x01, 0x12, 0xd4, 0x04, 0xb5, 0x9f, 0x0a, 0x79, 0xe6, 0xdf, 0x33, 0x0d, + 0x73, 0x74, 0xe4, 0x4c, 0x5d, 0xe9, 0xfb, 0x04, 0xb4, 0x1b, 0xea, 0xf4, + 0x05, 0x22, 0x61, 0x84, 0x2b, 0xbc, 0x20, 0xd0, 0x3e, 0x0a, 0x8b, 0x53, + 0x40, 0x81, 0x96, 0x73, 0x6b, 0xa7, 0xc1, 0xe0, 0x03, 0x30, 0xe2, 0x51, + 0x39, 0x94, 0x71, 0xa6, 0x52, 0x43, 0x42, 0xc7, 0x76, 0x43, 0x4a, 0xdb, + 0x5b, 0xeb, 0x78, 0x25, 0xf2, 0x66, 0x6b, 0x6d, 0x71, 0x35, 0x9b, 0xff, + 0xa8, 0xc0, 0x75, 0xc0, 0x60, 0x9a, 0xe6, 0xde, 0xb0, 0x45, 0x24, 0x6d, + 0x23, 0xd2, 0x13, 0x74, 0x98, 0xf3, 0x68, 0x96, 0x41, 0x6e, 0x77, 0xd5, + 0x06, 0x05, 0xa8, 0xde, 0xe3, 0xd3, 0x57, 0x71, 0x2c, 0x84, 0xef, 0x75, + 0x2b, 0x6c, 0x09, 0xa9, 0xf7, 0xeb, 0x2f, 0x8c, 0x92, 0x44, 0x32, 0xed, + 0xbf, 0x16, 0x1c, 0xdb, 0x5b, 0xd1, 0xd4, 0xec, 0x58, 0x22, 0x4f, 0xd4, + 0x18, 0x25, 0x76, 0x93, 0xa3, 0xa1, 0x4c, 0xf2, 0xa4, 0xa9, 0xe3, 0x38, + 0x8a, 0x8d, 0xb7, 0xca, 0xdf, 0x06, 0xa6, 0xd2, 0x7b, 0x86, 0x50, 0xc0, + 0xda, 0xb4, 0xc0, 0xa8, 0x3b, 0xf8, 0x22, 0x39, 0x7c, 0x15, 0x75, 0x6b, + 0x17, 0xef, 0xd2, 0xd6, 0x1a, 0xf3, 0x5a, 0x21, 0x81, 0xd5, 0x9a, 0x8d, + 0x8f, 0x6e, 0x29, 0x99, 0x97, 0x39, 0xb1, 0x1c, 0x42, 0x90, 0x61, 0x03, + 0xfb, 0xf1, 0x8b, 0xb4, 0x42, 0xd8, 0x86, 0x31, 0xc8, 0x1c, 0x36, 0xe6, + 0xa8, 0x9b, 0xa2, 0x40, 0xe4, 0x62, 0x10, 0xe8, 0xaa, 0xe9, 0x38, 0xed, + 0x37, 0x2e, 0xc4, 0x89, 0x0b, 0x6e, 0x95, 0x3e, 0xce, 0x6d, 0x7c, 0x60, + 0xef, 0x24, 0xe7, 0xf6, 0xb6, 0x28, 0xa9, 0x2c, 0x2b, 0x5f, 0xbc, 0xd7, + 0x6e, 0xe8, 0xef, 0x73, 0x2d, 0x1e, 0x85, 0xa4, 0xb9, 0x56, 0xfe, 0x29, + 0x43, 0x5a, 0x64, 0xa5, 0x08, 0x2e, 0x1d, 0x79, 0x45, 0x83, 0xf2, 0x47, + 0xee, 0x25, 0x01, 0xfc, 0xb9, 0x12, 0xe6, 0xa7, 0x19, 0x8d, 0x19, 0xcc, + 0xc1, 0x42, 0x73, 0xb4, 0xb6, 0xa7, 0x3b, 0xf6, 0x01, 0xa4, 0x0b, 0x5f, + 0xb4, 0xb1, 0xb2, 0x76, 0xcc, 0xe4, 0xef, 0xfe, 0x5e, 0xdf, 0x43, 0xfa, + 0xde, 0xbb, 0xc8, 0x7b, 0x5c, 0xae, 0x62, 0xd2, 0xff, 0x69, 0x93, 0x7e, + 0xc3, 0x55, 0x17, 0x83, 0xa1, 0xa5, 0xe8, 0xa7, 0xd3, 0x46, 0x76, 0xce, + 0xfc, 0xa2, 0x5d, 0x65, 0x52, 0x90, 0x17, 0x66, 0x64, 0x9f, 0x38, 0x92, + 0x6f, 0x01, 0x3a, 0xbb, 0x6f, 0xc5, 0x23, 0x86, 0x1b, 0x4a, 0x4b, 0xa8, + 0x0c, 0x50, 0x1f, 0x0f, 0x7c, 0x12, 0xd9, 0x61, 0x2f, 0xd7, 0x90, 0x24, + 0x1b, 0x0a, 0xb8, 0xa9, 0x55, 0x41, 0x9e, 0xb3, 0xb2, 0xb7, 0x08, 0x9e, + 0xfc, 0x4f, 0x6e, 0x0a, 0xae, 0x6c, 0x33, 0x75, 0x50, 0xdd, 0xe2, 0x81, + 0x1e, 0x12, 0xe3, 0xb3, 0x65, 0x30, 0x07, 0x56, 0xc6, 0x39, 0x14, 0x75, + 0x83, 0xb7, 0x86, 0xbf, 0x82, 0x5f, 0xc4, 0xf8, 0x4c, 0x39, 0x44, 0x90, + 0xad, 0x18, 0xee, 0x8a, 0x5c, 0x5f, 0x34, 0x6c, 0x4a, 0x0d, 0xdf, 0xf0, + 0x7c, 0xb4, 0x33, 0x3f, 0x95, 0x38, 0x62, 0x6d, 0xaa, 0x23, 0x13, 0x80, + 0x89, 0x23, 0x9c, 0x8e, 0x5b, 0xb7, 0x95, 0x92, 0x3d, 0x2a, 0xc7, 0x0b, + 0x30, 0xe7, 0x88, 0xdc, 0x82, 0xfa, 0x20, 0x2e, 0xf3, 0x54, 0xe9, 0x79, + 0x75, 0x36, 0x10, 0xf2, 0x74, 0xdb, 0x19, 0x6e, 0x81, 0xaf, 0x69, 0xbc, + 0x20, 0x52, 0xdd, 0x58, 0xaa, 0xed, 0x2e, 0xcd, 0x95, 0x00, 0x07, 0xe4, + 0x61, 0xf6, 0x7c, 0x85, 0x71, 0x18, 0xcf, 0xba, 0x0e, 0xe7, 0x4f, 0x92, + 0x24, 0x6c, 0xec, 0x67, 0x1a, 0x8c, 0xd5, 0x2f, 0x83, 0x44, 0x5e, 0xa5, + 0x56, 0x36, 0x89, 0x0c, 0x82, 0x98, 0xf4, 0x75, 0x5c, 0xd0, 0x11, 0x92, + 0xbe, 0xc5, 0xed, 0xa1, 0x9a, 0x55, 0x11, 0xd0, 0xfe, 0xbe, 0x97, 0x74, + 0x45, 0x61, 0x5d, 0x74, 0x08, 0xff, 0x87, 0xc2, 0xff, 0xd3, 0x1b, 0xa9, + 0x74, 0xb9, 0xd0, 0x11, 0xdd, 0xf1, 0x19, 0xc4, 0x16, 0x84, 0xdd, 0xa0, + 0x13, 0x2b, 0x4c, 0xdb, 0x24, 0xbd, 0x40, 0x10, 0xfd, 0xbc, 0x66, 0x62, + 0x8d, 0xc5, 0x26, 0x73, 0xa9, 0x74, 0xd6, 0x76, 0x74, 0x2c, 0x76, 0xb7, + 0x84, 0xb3, 0x47, 0x01, 0x22, 0x32, 0xf1, 0xc0, 0x47, 0x50, 0x56, 0x81, + 0xb9, 0xc2, 0xd2, 0xec, 0x09, 0x13, 0x35, 0x39, 0x5a, 0x77, 0x8f, 0xb9, + 0xc2, 0xd5, 0xff, 0x91, 0xa2, 0xa3, 0x09, 0x21, 0x29, 0x84, 0x95, 0xb7, + 0xe7, 0xf4, 0x85, 0x86, 0xfe, 0x10, 0x15, 0xbd, 0xde, 0x03, 0x4d, 0x52, + 0x6c, 0x7f, 0x8b, 0xba, 0xbb, 0xc7, 0xd8, 0xf9, 0xff, 0x1c, 0x1e, 0x30, + 0x38, 0x63, 0x6c, 0x6f, 0x70, 0xc3, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x13, 0x16, 0x1e, 0x21, 0x25, 0x31, 0x3b, +}; +static const unsigned char kat_mldsa87_sig_ph512[] = { + 0xa6, 0x9f, 0x4a, 0x18, 0xff, 0xa1, 0x89, 0x2c, 0x8c, 0x80, 0xf3, 0x17, + 0xa5, 0x20, 0xd3, 0x60, 0x4d, 0x31, 0x86, 0x41, 0xa0, 0x62, 0xd8, 0x40, + 0x43, 0xdf, 0x7f, 0xeb, 0xaf, 0x5c, 0x3e, 0xed, 0x82, 0x5a, 0x59, 0xaf, + 0x4d, 0xcf, 0x8d, 0x37, 0x6c, 0x67, 0x63, 0x34, 0x29, 0xb0, 0xdb, 0x40, + 0x12, 0xad, 0x54, 0xea, 0xd9, 0xa2, 0x13, 0xdd, 0x6d, 0xd4, 0xd5, 0x36, + 0xfe, 0x91, 0x6c, 0x91, 0x61, 0x8c, 0x70, 0x3a, 0xd7, 0x78, 0x66, 0x2e, + 0x72, 0x4f, 0x2e, 0x1b, 0xa0, 0xee, 0x69, 0x31, 0xc2, 0x4d, 0x1b, 0x2b, + 0xd0, 0x70, 0x0f, 0xe3, 0x64, 0x24, 0xbe, 0x66, 0x08, 0x5e, 0xe4, 0x77, + 0x2c, 0xb1, 0xa6, 0x45, 0xa7, 0x80, 0xee, 0x4a, 0x11, 0x7e, 0x98, 0xf0, + 0xd8, 0x6b, 0xd3, 0x0b, 0x80, 0x36, 0x68, 0x01, 0x83, 0x65, 0x66, 0xe6, + 0xd0, 0xba, 0x7c, 0xfd, 0x2c, 0x74, 0x03, 0x0c, 0x92, 0xee, 0xb3, 0x9f, + 0x10, 0xdb, 0x4c, 0x2a, 0xe6, 0xff, 0x01, 0xec, 0xd6, 0xa0, 0x6e, 0x9a, + 0x8f, 0xfe, 0xab, 0x99, 0x2d, 0x55, 0x68, 0x06, 0x4f, 0x76, 0xa0, 0xa7, + 0x48, 0xbe, 0x9e, 0x7f, 0x71, 0xac, 0xc9, 0xe9, 0xab, 0xbb, 0x43, 0xcc, + 0x62, 0x32, 0xa1, 0x22, 0x25, 0x74, 0x07, 0xe7, 0x78, 0x4f, 0x7f, 0xd9, + 0xb4, 0x64, 0x35, 0x8e, 0x98, 0xc6, 0xfe, 0x7f, 0xdf, 0x54, 0xc6, 0x2e, + 0xde, 0xe9, 0xb9, 0x6b, 0x5a, 0x13, 0xc6, 0xc0, 0xaa, 0x06, 0x5e, 0xa6, + 0x26, 0x50, 0x45, 0x0e, 0xfe, 0xcb, 0xee, 0x16, 0x91, 0xe6, 0xec, 0x5b, + 0x9c, 0xcb, 0x6e, 0x59, 0x76, 0xc1, 0x95, 0x72, 0x5e, 0x41, 0x57, 0xcf, + 0xa6, 0x51, 0x6a, 0x19, 0x25, 0x2d, 0xd8, 0x76, 0x7d, 0xc5, 0xda, 0xd9, + 0x95, 0xdc, 0x09, 0x8b, 0xe0, 0x60, 0x7a, 0x9e, 0x53, 0xb0, 0x88, 0x86, + 0xa3, 0x1d, 0x82, 0x4b, 0x7b, 0xda, 0xdb, 0x0c, 0x1b, 0xc0, 0x95, 0x80, + 0x7f, 0xcb, 0x8f, 0x05, 0xbe, 0xa9, 0x4c, 0x57, 0x67, 0x3e, 0x43, 0x05, + 0x5f, 0x1f, 0x50, 0xe1, 0x3e, 0x83, 0x5c, 0xc6, 0xe0, 0x5c, 0x9d, 0xa4, + 0x5a, 0xf3, 0xf0, 0x3e, 0x3c, 0x26, 0x74, 0x85, 0x2b, 0x2d, 0xb8, 0x82, + 0x5f, 0x61, 0x15, 0xf8, 0x50, 0xc5, 0xf6, 0xf3, 0x5f, 0x97, 0x25, 0x4f, + 0xbd, 0x3a, 0x10, 0xbe, 0xf9, 0xd3, 0x68, 0xee, 0xd0, 0x6f, 0x1b, 0xc2, + 0xfb, 0x35, 0xca, 0xca, 0x77, 0xbb, 0x91, 0x74, 0x39, 0xae, 0x6c, 0x1c, + 0x71, 0x02, 0x7b, 0x6a, 0xb8, 0xfb, 0x14, 0x42, 0x20, 0x48, 0x85, 0x90, + 0x03, 0x81, 0x8a, 0xa1, 0x3c, 0xbc, 0x00, 0x1e, 0x0b, 0xaa, 0x71, 0x59, + 0xb8, 0xcc, 0x03, 0xbd, 0xf3, 0xd1, 0xa1, 0x6f, 0x7e, 0xaa, 0x10, 0xfe, + 0x44, 0x48, 0x47, 0x39, 0xec, 0x0c, 0x7b, 0x4c, 0x8b, 0xdc, 0x0a, 0x51, + 0x75, 0x0b, 0x35, 0xaa, 0xae, 0x00, 0x7b, 0x9f, 0x32, 0x55, 0x97, 0x0e, + 0xb0, 0x23, 0xf2, 0xc0, 0xa3, 0x6a, 0xea, 0x7e, 0x42, 0x55, 0xe1, 0x8c, + 0x39, 0xc6, 0x56, 0xfa, 0x0d, 0x5f, 0xfe, 0x96, 0xb8, 0x7f, 0xce, 0xe3, + 0x79, 0xb4, 0x3c, 0xb0, 0x54, 0x09, 0x08, 0xf4, 0x0b, 0x44, 0xdb, 0xd8, + 0xee, 0xab, 0x06, 0x80, 0xb6, 0x33, 0x27, 0xa7, 0x32, 0x63, 0x25, 0x6b, + 0x07, 0xc6, 0x25, 0x2a, 0x25, 0x46, 0xfc, 0xa4, 0x36, 0xc9, 0x5b, 0xca, + 0xa6, 0x23, 0x82, 0xff, 0xfe, 0x85, 0xe3, 0x00, 0xe9, 0x4e, 0xde, 0xd6, + 0xc5, 0xa8, 0x80, 0x52, 0x4a, 0xd7, 0x53, 0xcd, 0x10, 0xa2, 0xb7, 0x1c, + 0x9b, 0x1b, 0x19, 0x16, 0x00, 0xc6, 0xee, 0xde, 0x30, 0x5e, 0x00, 0xc2, + 0xa7, 0x2a, 0x48, 0x33, 0xe2, 0x4d, 0xfb, 0x2e, 0x7d, 0xff, 0xa8, 0xd8, + 0x98, 0xca, 0xa7, 0xe0, 0x0d, 0xf4, 0x08, 0x4a, 0x36, 0xf2, 0x54, 0xe3, + 0xe8, 0xb3, 0xd5, 0xb4, 0xb6, 0x1e, 0xbc, 0x7d, 0x5c, 0x2e, 0x74, 0xcd, + 0x16, 0x67, 0x7d, 0xe1, 0xa7, 0xb4, 0x43, 0x5b, 0x51, 0xf1, 0xd2, 0xd8, + 0x4b, 0xe6, 0x42, 0x7a, 0x84, 0x2d, 0xa3, 0xae, 0x87, 0xd1, 0x13, 0x1a, + 0x8b, 0x71, 0x7d, 0x3b, 0xf9, 0x81, 0x51, 0x5c, 0x9f, 0x93, 0x0e, 0xcd, + 0x30, 0x6c, 0x4b, 0x1d, 0x50, 0x28, 0x53, 0x7e, 0xdf, 0x4f, 0xfd, 0xc1, + 0x7a, 0xc0, 0x95, 0xed, 0xf2, 0x59, 0xe2, 0x8b, 0x72, 0x4a, 0xc6, 0xff, + 0x56, 0xd4, 0xda, 0xd5, 0x1c, 0xdc, 0xe7, 0x76, 0x4d, 0xe5, 0xb2, 0x80, + 0xe8, 0xda, 0x5a, 0xd9, 0x29, 0x28, 0x9f, 0xec, 0x7b, 0x88, 0x54, 0x5d, + 0x44, 0x06, 0x6c, 0xf2, 0x51, 0x66, 0xa7, 0x23, 0x98, 0x22, 0x09, 0xff, + 0xdc, 0xf6, 0x91, 0x73, 0xa4, 0xe1, 0x5b, 0xb4, 0xe9, 0xb3, 0xec, 0xb8, + 0x61, 0x3a, 0x3c, 0xa7, 0xb8, 0xd3, 0x51, 0x90, 0x67, 0xbf, 0x56, 0xc1, + 0x7f, 0xef, 0x62, 0xb7, 0x99, 0x3b, 0x6f, 0xff, 0x17, 0xb8, 0x22, 0xb2, + 0x39, 0xfb, 0x70, 0x9e, 0x57, 0x76, 0xee, 0x7f, 0xb8, 0x16, 0xfb, 0x41, + 0x3f, 0x3e, 0x23, 0xc3, 0x8c, 0x93, 0xc7, 0x0f, 0x05, 0x22, 0xf7, 0x14, + 0x91, 0x16, 0xcb, 0xa4, 0x4e, 0xdd, 0xfc, 0xc2, 0x71, 0x71, 0x3a, 0x72, + 0x39, 0x56, 0x05, 0xa0, 0x05, 0xe8, 0xe6, 0xa8, 0xfe, 0xbc, 0x6a, 0xc7, + 0x8b, 0x7a, 0x39, 0x43, 0x85, 0xd9, 0x70, 0x4d, 0x6a, 0x41, 0x9b, 0xd8, + 0xcd, 0x04, 0x45, 0x6d, 0x00, 0xd0, 0xd0, 0x47, 0x9d, 0xcf, 0xfd, 0xeb, + 0xcd, 0xa4, 0x7e, 0x3a, 0x20, 0x72, 0x59, 0x9d, 0x00, 0x57, 0x1d, 0xff, + 0x37, 0x2f, 0x60, 0x70, 0x35, 0xdf, 0x84, 0x34, 0x86, 0x8e, 0x4b, 0x21, + 0xf0, 0x31, 0x4a, 0xbf, 0x80, 0x21, 0xa0, 0x58, 0x4b, 0x98, 0x4e, 0x77, + 0xbf, 0xf0, 0xc5, 0x58, 0xe3, 0xac, 0x43, 0x63, 0x02, 0x90, 0xa7, 0x6e, + 0x4b, 0x58, 0xa2, 0xfa, 0xba, 0x4d, 0xb7, 0xa5, 0x97, 0xce, 0xbc, 0xbe, + 0xd4, 0x2b, 0xd8, 0x13, 0x32, 0x5b, 0xd3, 0xce, 0xd8, 0xd9, 0xde, 0xd2, + 0xcf, 0x66, 0x91, 0x01, 0x83, 0x92, 0xd0, 0x36, 0xc7, 0x7d, 0x45, 0x81, + 0xf1, 0x9e, 0xb0, 0xff, 0x0f, 0x54, 0xb6, 0x78, 0x7b, 0x10, 0x76, 0x94, + 0xbe, 0x8c, 0xad, 0xba, 0x70, 0xe6, 0x9b, 0xf5, 0x9b, 0x52, 0xef, 0xb5, + 0xd9, 0x09, 0xf0, 0x88, 0xc1, 0xbe, 0x79, 0xc6, 0xaa, 0xd6, 0x37, 0x3f, + 0x04, 0x27, 0x76, 0x7f, 0x2f, 0xb1, 0x51, 0x07, 0x91, 0xe2, 0x66, 0xb8, + 0x11, 0x57, 0xfd, 0x6a, 0x53, 0x6a, 0x15, 0xf8, 0x30, 0x98, 0x05, 0x9f, + 0x33, 0x3f, 0xd5, 0x29, 0xc5, 0x6d, 0xf2, 0x20, 0xa5, 0xfe, 0xcd, 0x4d, + 0xbe, 0xee, 0x19, 0xc1, 0x38, 0x7f, 0x59, 0x9a, 0x71, 0x05, 0xac, 0x51, + 0x06, 0x22, 0xc6, 0xbe, 0x98, 0xc9, 0x83, 0x05, 0x7d, 0xf1, 0xe2, 0xc7, + 0xad, 0xa5, 0x8e, 0x60, 0xdb, 0x49, 0x1d, 0x34, 0x75, 0xf8, 0xdd, 0x58, + 0x0f, 0x51, 0x25, 0xf9, 0x8b, 0xc5, 0xf7, 0xcb, 0xb7, 0xd0, 0x80, 0xfd, + 0xc5, 0x5f, 0xa9, 0xcf, 0x1f, 0x14, 0xfd, 0x4f, 0xd1, 0xa2, 0x65, 0x32, + 0x89, 0x65, 0x5d, 0x0d, 0x54, 0x07, 0xf2, 0xd5, 0x21, 0x6c, 0x65, 0x91, + 0xf0, 0xac, 0xb5, 0xd7, 0xbb, 0xc1, 0x74, 0x5c, 0x6d, 0xdb, 0x83, 0x09, + 0x8a, 0x84, 0x9c, 0xc9, 0xa3, 0x20, 0xf1, 0xc0, 0x63, 0x0c, 0xfd, 0xf9, + 0x3e, 0x9c, 0xb1, 0xb7, 0x42, 0x19, 0x60, 0x05, 0x6b, 0xec, 0x85, 0x3b, + 0xf2, 0x9e, 0x7d, 0x44, 0xbf, 0x3a, 0x04, 0x38, 0x87, 0x64, 0xf7, 0x99, + 0xe6, 0xef, 0x7e, 0x7b, 0x5a, 0x17, 0x8d, 0x6a, 0x96, 0x62, 0xc0, 0x0a, + 0x45, 0x2a, 0x47, 0x62, 0xa9, 0x3b, 0x22, 0x7f, 0x85, 0x58, 0x4c, 0xbe, + 0x6a, 0x59, 0x31, 0xfd, 0x73, 0x7a, 0xdc, 0x47, 0x65, 0x91, 0x2a, 0x3d, + 0xc6, 0x78, 0x2b, 0x75, 0x08, 0xa3, 0x20, 0xb3, 0x7e, 0x8d, 0xec, 0x68, + 0x4e, 0x04, 0x18, 0xad, 0x5f, 0xba, 0x3f, 0x26, 0xdf, 0x0c, 0xdb, 0xab, + 0x77, 0x47, 0xdd, 0xd9, 0xa9, 0x0a, 0x88, 0x70, 0xa4, 0x50, 0xea, 0xd4, + 0x36, 0xe3, 0x91, 0x17, 0x81, 0x48, 0x6a, 0xc7, 0x02, 0x86, 0x31, 0xe8, + 0x40, 0x0b, 0xb0, 0x73, 0x3e, 0x68, 0x9c, 0x78, 0xf9, 0x5a, 0xd1, 0x22, + 0x59, 0x26, 0x47, 0x72, 0x1b, 0xef, 0x21, 0xb0, 0x69, 0xe4, 0x6b, 0xa8, + 0xb5, 0x5c, 0xf7, 0xf8, 0x13, 0x72, 0x93, 0xb2, 0xd7, 0x7f, 0xfe, 0xa4, + 0x3d, 0x43, 0x8c, 0x05, 0x88, 0x69, 0x98, 0x2f, 0xe1, 0xba, 0x1d, 0xf0, + 0x81, 0x2e, 0xf0, 0x0a, 0x21, 0x61, 0xc2, 0x98, 0x6b, 0x6e, 0x29, 0x4c, + 0xe1, 0x86, 0xa1, 0x87, 0x9e, 0x1e, 0x5e, 0x30, 0xdf, 0x47, 0x29, 0xf6, + 0xd5, 0x7d, 0x6a, 0x0e, 0x49, 0x11, 0x29, 0x2d, 0x88, 0xf3, 0x26, 0xaf, + 0x36, 0x30, 0x10, 0x2e, 0xf6, 0xf8, 0x4e, 0xe1, 0x9b, 0xe0, 0x68, 0xbb, + 0x70, 0x08, 0x38, 0xb9, 0x10, 0xa8, 0x6c, 0x09, 0x2b, 0xb5, 0x70, 0xbb, + 0xaf, 0x8b, 0xbe, 0x8b, 0xd5, 0xe3, 0x57, 0x1f, 0xc2, 0x5c, 0xfa, 0x2a, + 0x6e, 0x79, 0x92, 0x5e, 0xad, 0x98, 0x9d, 0x48, 0x60, 0xe1, 0xa0, 0xe0, + 0x70, 0xec, 0xa1, 0xc4, 0x0f, 0x62, 0xc5, 0x12, 0xde, 0xab, 0x3f, 0x09, + 0x75, 0xa4, 0xca, 0xb0, 0xf0, 0x48, 0xdc, 0x4b, 0xd3, 0x8b, 0x83, 0xc4, + 0x01, 0x30, 0xf5, 0x50, 0xa3, 0xc9, 0xef, 0xd9, 0x25, 0x9b, 0x1b, 0xfd, + 0xb0, 0x06, 0x74, 0x98, 0x2d, 0x0b, 0x33, 0xa7, 0x19, 0x40, 0xaa, 0x18, + 0xc7, 0x90, 0x11, 0x6e, 0x5a, 0xe9, 0xd4, 0x07, 0x6b, 0x26, 0xb4, 0xf6, + 0xfe, 0x4d, 0x86, 0x61, 0x3e, 0x3b, 0x4d, 0x89, 0x2e, 0x73, 0xdb, 0x98, + 0xa9, 0x4a, 0x40, 0x4e, 0x12, 0x06, 0xbd, 0xa3, 0x26, 0x47, 0x3a, 0x53, + 0x11, 0xd1, 0x86, 0x17, 0x34, 0x90, 0xd8, 0xdd, 0x65, 0x14, 0x1c, 0x00, + 0x8f, 0x72, 0x71, 0x97, 0x46, 0x98, 0x2b, 0x27, 0x6b, 0x90, 0xed, 0xc6, + 0xc7, 0x7b, 0x7a, 0x7d, 0x64, 0x96, 0xfa, 0xab, 0x53, 0xcf, 0x40, 0x24, + 0xc7, 0x7a, 0x3e, 0x53, 0xa5, 0x22, 0x5e, 0x62, 0xac, 0xe3, 0x77, 0xc3, + 0xef, 0xf0, 0x02, 0xd9, 0x82, 0x8c, 0x7f, 0x53, 0x53, 0xf7, 0x9d, 0xe8, + 0x9a, 0xd7, 0x26, 0x1e, 0x67, 0xbc, 0x68, 0xe0, 0x83, 0x76, 0xda, 0xea, + 0x41, 0x98, 0x63, 0x99, 0x06, 0x11, 0xc8, 0x6b, 0x0d, 0x6b, 0x68, 0xdf, + 0xed, 0xbb, 0x30, 0x46, 0xc0, 0x82, 0xf9, 0x1c, 0x94, 0x7c, 0x25, 0xbb, + 0x60, 0x02, 0x39, 0x46, 0xc7, 0x91, 0xae, 0xaa, 0xb5, 0x30, 0xb9, 0x5d, + 0xfc, 0xbd, 0xea, 0xdf, 0x53, 0x43, 0xe0, 0xae, 0xbb, 0xae, 0x0f, 0x93, + 0xda, 0x10, 0x01, 0xee, 0x4a, 0x70, 0x0f, 0x07, 0x36, 0x3e, 0x8f, 0x7d, + 0xd1, 0x5a, 0xd2, 0x3e, 0x5a, 0x0f, 0x29, 0xfd, 0xf9, 0x23, 0x90, 0x5a, + 0x9b, 0xa0, 0x16, 0x6c, 0xc0, 0xb7, 0x27, 0xe9, 0x6b, 0x6c, 0xb6, 0x75, + 0xb7, 0xe6, 0xdd, 0xd7, 0x8c, 0xb2, 0x9c, 0x50, 0x33, 0x9e, 0x5b, 0xa5, + 0x77, 0x4b, 0xff, 0xd5, 0x26, 0x78, 0xa2, 0xb0, 0xd0, 0xb8, 0x03, 0x25, + 0xd7, 0xa4, 0x78, 0x80, 0x9c, 0xf2, 0xee, 0xb2, 0xcd, 0x45, 0x15, 0x15, + 0xd8, 0x6c, 0xbf, 0x6b, 0xdf, 0x97, 0x97, 0x49, 0x10, 0x4b, 0xa3, 0x49, + 0xcf, 0xea, 0x41, 0x59, 0x99, 0x63, 0xb6, 0x99, 0xdf, 0x16, 0xe6, 0x22, + 0xb7, 0xaa, 0x3a, 0xc5, 0xf2, 0x11, 0xd4, 0xc3, 0x08, 0xb2, 0x57, 0xe0, + 0x0f, 0x89, 0x2c, 0x4e, 0x51, 0x64, 0xe6, 0x40, 0xb7, 0x26, 0x42, 0x06, + 0xc0, 0xd4, 0xc9, 0x1e, 0x5a, 0x5e, 0x5e, 0x54, 0x41, 0xdb, 0xe5, 0xa2, + 0x5a, 0x76, 0xce, 0xe9, 0xd8, 0xe2, 0x81, 0xb4, 0x78, 0x3d, 0x79, 0x55, + 0xa8, 0xd7, 0x74, 0x2d, 0xba, 0xc9, 0xed, 0xae, 0x10, 0x6e, 0x22, 0x46, + 0x4f, 0x91, 0xd8, 0x87, 0x15, 0x78, 0x56, 0xb5, 0x23, 0x6e, 0x3c, 0xc8, + 0x18, 0xf5, 0x92, 0xbf, 0x54, 0x0e, 0x17, 0x2d, 0x79, 0x49, 0x5c, 0x9d, + 0x67, 0x63, 0xab, 0x29, 0x5d, 0xe6, 0xc5, 0x84, 0x6d, 0x52, 0xe7, 0x28, + 0xa6, 0x36, 0xe1, 0xda, 0x6b, 0x45, 0xdb, 0xda, 0x0e, 0xf0, 0x9c, 0xc8, + 0xdc, 0xbe, 0x3b, 0x8f, 0x08, 0x87, 0x8e, 0xc9, 0xc4, 0xc0, 0xda, 0xc9, + 0xc2, 0x7f, 0xdf, 0x08, 0xd9, 0x85, 0x5c, 0xc2, 0x56, 0x26, 0x07, 0x4d, + 0x8a, 0x43, 0x31, 0xf4, 0x49, 0x53, 0x68, 0x3a, 0x9a, 0xd6, 0x4d, 0x2d, + 0xe9, 0x3e, 0xdc, 0x2f, 0x2e, 0x80, 0x33, 0xaf, 0xf4, 0x56, 0x97, 0x8e, + 0x39, 0x57, 0x78, 0x1f, 0x9e, 0x88, 0x6f, 0x86, 0xf5, 0x3d, 0x78, 0x19, + 0x04, 0xd8, 0xa1, 0x30, 0x94, 0x52, 0x49, 0x12, 0x7b, 0xbf, 0x6f, 0x34, + 0x01, 0x5a, 0xef, 0xca, 0x4e, 0x13, 0x8f, 0xb6, 0xec, 0xc0, 0xb3, 0x01, + 0x18, 0xdb, 0x84, 0x6e, 0x54, 0x37, 0x2f, 0x23, 0x58, 0x38, 0x2c, 0x93, + 0x1a, 0xdd, 0x13, 0xdd, 0x18, 0xf8, 0xbd, 0xda, 0xbd, 0xe4, 0x8d, 0x2c, + 0x5a, 0x7b, 0xde, 0xc8, 0x5a, 0x97, 0x6e, 0x1a, 0xf9, 0x62, 0x4c, 0x4e, + 0xe4, 0x7b, 0x69, 0x6c, 0xc1, 0xd1, 0x47, 0x00, 0x8c, 0x23, 0x3d, 0x89, + 0x9b, 0x1f, 0x18, 0x98, 0x8e, 0x13, 0xb6, 0xc8, 0xdc, 0xbd, 0x4e, 0x2e, + 0x1b, 0x9f, 0xbc, 0xba, 0x38, 0x4f, 0x55, 0x05, 0x64, 0x93, 0xb0, 0xed, + 0xfc, 0xb3, 0x60, 0x5c, 0xea, 0x2b, 0xd6, 0xeb, 0x4b, 0x5a, 0x65, 0x0e, + 0xe1, 0x35, 0x58, 0x68, 0x5f, 0x98, 0x17, 0x9c, 0x77, 0xe2, 0x36, 0xa0, + 0x5a, 0xdb, 0x3c, 0x08, 0x6c, 0x23, 0x70, 0x21, 0xf1, 0xbc, 0xb2, 0x4c, + 0xaf, 0x74, 0xaf, 0x0d, 0x0d, 0x11, 0xdb, 0x12, 0x4a, 0x72, 0xb1, 0x7e, + 0x32, 0xa6, 0xf9, 0x2a, 0x55, 0x76, 0x30, 0xb8, 0xf4, 0x43, 0x14, 0xf1, + 0xc3, 0x70, 0xcf, 0xd9, 0xc4, 0xc6, 0x90, 0xda, 0xf7, 0x00, 0xfa, 0xea, + 0x93, 0xdc, 0x19, 0xef, 0x11, 0x09, 0x86, 0x68, 0xd8, 0x52, 0xc6, 0xac, + 0x08, 0xca, 0x8f, 0xc8, 0x71, 0x15, 0x5c, 0x8a, 0x9f, 0x9b, 0x71, 0x3d, + 0x3e, 0x8f, 0x79, 0x93, 0xb7, 0xa4, 0x0a, 0x6f, 0xff, 0xa2, 0xfd, 0xec, + 0x4c, 0x4c, 0x14, 0xee, 0xe1, 0xcf, 0xc6, 0x5c, 0x8a, 0xee, 0x3a, 0x3e, + 0xaf, 0xee, 0x33, 0xea, 0x31, 0x85, 0x16, 0x63, 0x8f, 0x1a, 0x33, 0x9e, + 0xc8, 0xba, 0x5c, 0xe9, 0x30, 0x21, 0x5c, 0x96, 0xb7, 0x66, 0x14, 0xd6, + 0x13, 0x17, 0xbe, 0xe1, 0x6e, 0x1f, 0xb8, 0x03, 0xe8, 0x84, 0xb1, 0xe2, + 0x10, 0x70, 0x9f, 0x1a, 0x30, 0x41, 0xc7, 0xed, 0xf0, 0x93, 0xb3, 0x3f, + 0x74, 0x48, 0x6f, 0xce, 0x9b, 0x2c, 0x66, 0xb4, 0xd4, 0x56, 0x91, 0xba, + 0x38, 0x38, 0x9e, 0x7a, 0xb9, 0x95, 0xe5, 0x0b, 0xa9, 0xf5, 0x60, 0x02, + 0xa0, 0x30, 0xce, 0x60, 0x78, 0x6d, 0xbc, 0x22, 0x7e, 0xf1, 0x7b, 0x91, + 0x83, 0x9c, 0xb4, 0xe8, 0x91, 0x80, 0xcf, 0x8a, 0xa5, 0x4e, 0x17, 0x6a, + 0x43, 0x09, 0x92, 0x30, 0x64, 0xd8, 0x42, 0x21, 0xf7, 0xf0, 0x1c, 0x6f, + 0x19, 0x5f, 0xb8, 0x2c, 0x60, 0xc9, 0x9d, 0xc7, 0x65, 0x5b, 0xb5, 0x24, + 0x87, 0x66, 0x18, 0x3e, 0xc1, 0xdf, 0x48, 0xed, 0xe6, 0x90, 0x17, 0x8d, + 0x3f, 0xee, 0x70, 0x78, 0x6b, 0xaa, 0xdd, 0x2d, 0xca, 0x8c, 0x72, 0x0a, + 0xf2, 0x3f, 0x49, 0x1a, 0x0a, 0x7a, 0x01, 0x30, 0xcc, 0xd7, 0xee, 0x19, + 0x01, 0xca, 0x41, 0xb9, 0x02, 0x02, 0xe0, 0xe4, 0x07, 0x1a, 0xcf, 0x07, + 0x16, 0xe8, 0xbc, 0x54, 0x3f, 0x0f, 0x98, 0xc2, 0x1e, 0x94, 0xfd, 0x1f, + 0xc6, 0x31, 0x5d, 0x0f, 0x94, 0xe0, 0xe1, 0xb3, 0xb7, 0x40, 0x31, 0xcc, + 0xea, 0x5d, 0xf2, 0x49, 0x2b, 0x43, 0xe7, 0x82, 0x12, 0xf8, 0x10, 0x39, + 0xda, 0x31, 0x8f, 0x77, 0xfd, 0x23, 0x0b, 0xa6, 0x8c, 0xcb, 0x29, 0xd0, + 0x30, 0x57, 0xbf, 0x62, 0x9a, 0xe0, 0xd1, 0xe4, 0x3e, 0xc6, 0x3b, 0x44, + 0x62, 0xa9, 0x30, 0xcd, 0x13, 0x28, 0xc9, 0x7d, 0x01, 0xa9, 0xf7, 0x3d, + 0x0d, 0x83, 0x89, 0xac, 0x69, 0x7a, 0xe1, 0x70, 0x84, 0xc3, 0xfd, 0xa1, + 0x5e, 0xe8, 0x77, 0x18, 0x9b, 0xb3, 0x8a, 0x86, 0x36, 0x09, 0x7f, 0xe2, + 0x73, 0x3a, 0xc5, 0xf8, 0x41, 0x08, 0x65, 0xfd, 0x31, 0x99, 0x28, 0x83, + 0xae, 0x7e, 0xc6, 0xb5, 0xb7, 0x27, 0x39, 0xb7, 0x26, 0xe7, 0x49, 0xc9, + 0xc3, 0xaf, 0x86, 0xa3, 0x51, 0xc1, 0xa6, 0x42, 0xd6, 0x36, 0x4c, 0x72, + 0xed, 0xd7, 0x7f, 0x1b, 0x29, 0xe8, 0xdb, 0x59, 0x57, 0x16, 0xf2, 0x19, + 0x53, 0x9c, 0x6c, 0x28, 0x7c, 0x5b, 0x95, 0xe3, 0xf2, 0xda, 0xbc, 0x1d, + 0xbc, 0xbc, 0xce, 0x79, 0x17, 0x68, 0x4b, 0xe9, 0xc1, 0xc0, 0x7f, 0x53, + 0x52, 0x80, 0x51, 0x0a, 0x74, 0x11, 0x43, 0xd0, 0xee, 0xda, 0x12, 0xdd, + 0x0e, 0x8f, 0x39, 0xf4, 0x87, 0x59, 0x96, 0x2e, 0xc5, 0x83, 0x02, 0x21, + 0xf3, 0x1b, 0xe6, 0x45, 0x29, 0x62, 0xd4, 0x60, 0x92, 0x03, 0x45, 0x53, + 0xbc, 0x1b, 0xfa, 0x55, 0x12, 0x50, 0x6b, 0xeb, 0xb2, 0x88, 0xf2, 0xfb, + 0x8d, 0xed, 0xc6, 0x78, 0xbf, 0xea, 0x1b, 0xe2, 0x6f, 0x6f, 0x09, 0xed, + 0x29, 0x8b, 0xa8, 0x17, 0x9c, 0x61, 0x61, 0x9b, 0xc0, 0xbd, 0xc9, 0x8b, + 0x15, 0x16, 0x05, 0xfe, 0xa4, 0xbd, 0xac, 0x74, 0x6e, 0x1b, 0xfa, 0x0e, + 0xbd, 0xe5, 0xa8, 0x38, 0x0f, 0x91, 0x26, 0x69, 0x6c, 0x35, 0x49, 0xf3, + 0x7a, 0xb6, 0x5a, 0xc4, 0x62, 0xe0, 0x9b, 0x34, 0x88, 0x8d, 0xf3, 0x04, + 0x6c, 0x13, 0x3e, 0x72, 0x9b, 0xf5, 0xde, 0x7a, 0x97, 0x9b, 0x57, 0x62, + 0xb8, 0xa2, 0x7a, 0x2e, 0xf6, 0xbc, 0x51, 0x6d, 0xe6, 0xb0, 0xe3, 0x06, + 0x75, 0xed, 0x3c, 0xe1, 0x27, 0x46, 0x51, 0xdf, 0x23, 0x7f, 0x9a, 0x33, + 0xe4, 0x97, 0x87, 0x06, 0x1f, 0x4f, 0x16, 0x28, 0xc9, 0x1a, 0x32, 0x7c, + 0x7c, 0x04, 0x1f, 0xf4, 0x67, 0x21, 0xe7, 0x67, 0xfb, 0x92, 0xda, 0x36, + 0x60, 0x29, 0xfc, 0xdf, 0x80, 0x25, 0x46, 0x62, 0x61, 0xd2, 0xa7, 0xdb, + 0xa3, 0xe1, 0x1f, 0x8a, 0x5f, 0x09, 0xf5, 0x3c, 0x3c, 0x11, 0xb3, 0xd7, + 0x60, 0x9d, 0x39, 0x00, 0xad, 0xa7, 0xaf, 0x22, 0x1b, 0xb7, 0x2b, 0x3b, + 0x5b, 0xdc, 0x73, 0xbf, 0x0f, 0xe9, 0x10, 0x44, 0x63, 0x50, 0x11, 0xfc, + 0xaa, 0x37, 0x46, 0x68, 0xdc, 0x47, 0x86, 0x2a, 0x1e, 0x1a, 0x71, 0x3a, + 0x21, 0xbb, 0x57, 0x5a, 0xed, 0x98, 0xe8, 0xbf, 0x53, 0xf0, 0x37, 0x9d, + 0x18, 0x5b, 0x47, 0x5d, 0x1a, 0x77, 0xd5, 0xeb, 0x18, 0x32, 0x86, 0xe3, + 0x12, 0x98, 0xe9, 0xf0, 0x5a, 0x2f, 0xfb, 0x5b, 0xce, 0x38, 0xa2, 0x5d, + 0x72, 0x5b, 0x02, 0xd3, 0x61, 0x52, 0x59, 0x0b, 0x8a, 0x7a, 0x30, 0x3e, + 0x0f, 0xf2, 0x6b, 0x87, 0xe7, 0x44, 0x73, 0x00, 0xbd, 0x5a, 0x7f, 0xc4, + 0xf8, 0x02, 0x3f, 0xef, 0x32, 0x6a, 0x26, 0x3f, 0xb2, 0x63, 0x7c, 0x59, + 0x0d, 0x17, 0xe5, 0x3a, 0xe6, 0xe8, 0x2d, 0x1c, 0x75, 0x50, 0xf1, 0xd0, + 0x97, 0x17, 0xb3, 0x1f, 0x8e, 0x22, 0x27, 0xc5, 0xea, 0x2d, 0xf7, 0x33, + 0xfc, 0x50, 0x22, 0xc4, 0x34, 0xa6, 0x72, 0xa5, 0xd9, 0x75, 0xbf, 0x96, + 0xf3, 0x1c, 0x07, 0x63, 0x89, 0x3e, 0xde, 0x58, 0x9c, 0x42, 0x2c, 0xbc, + 0xf6, 0xb1, 0xf1, 0x67, 0x25, 0xd9, 0x87, 0x5d, 0x98, 0x42, 0xf6, 0xa5, + 0x9d, 0x3e, 0xc3, 0x46, 0x88, 0x72, 0xf1, 0x6e, 0xf2, 0x62, 0x8f, 0x58, + 0x1b, 0x70, 0xea, 0x7c, 0xde, 0x7b, 0x1e, 0x1d, 0x3c, 0x27, 0x40, 0x79, + 0xf4, 0x59, 0x6f, 0xde, 0x36, 0xf1, 0xdf, 0x8d, 0x8e, 0xff, 0x0c, 0x81, + 0x04, 0x94, 0x1e, 0xaa, 0x65, 0x6e, 0x4b, 0x0f, 0x00, 0xcd, 0xa4, 0x4c, + 0x30, 0x5b, 0xd4, 0xa4, 0x48, 0x6a, 0x06, 0x1d, 0x8c, 0xc6, 0xee, 0x5c, + 0xd9, 0x90, 0x31, 0xeb, 0x5d, 0x60, 0x03, 0xe3, 0x18, 0x2b, 0x92, 0xc1, + 0x6e, 0x6d, 0x53, 0xae, 0xa2, 0xf3, 0xc0, 0x33, 0x27, 0x58, 0xbe, 0xd9, + 0x1a, 0xaf, 0x5d, 0x1c, 0xfd, 0xab, 0x18, 0x8a, 0x11, 0x31, 0x11, 0x7a, + 0x8b, 0x72, 0x91, 0xfd, 0x60, 0xf7, 0xce, 0x0d, 0x13, 0xb8, 0xb6, 0xa2, + 0x9c, 0x0b, 0x32, 0x7a, 0x17, 0x93, 0x1a, 0x6b, 0xfc, 0x35, 0x1a, 0x0f, + 0x6e, 0x77, 0x10, 0x9c, 0x8c, 0x8c, 0x14, 0x0b, 0xe8, 0x1d, 0x88, 0xf9, + 0xbd, 0xff, 0xcc, 0xfd, 0x36, 0x49, 0x32, 0x45, 0x4a, 0xc3, 0x35, 0xf6, + 0x80, 0x1d, 0x72, 0x08, 0x8b, 0x9d, 0xfa, 0xaa, 0xae, 0x67, 0x6e, 0xd0, + 0x54, 0xe0, 0x90, 0x29, 0x9d, 0xcf, 0x3c, 0x00, 0xd7, 0x78, 0x7a, 0x47, + 0xa2, 0xbb, 0x49, 0xdd, 0x46, 0x0c, 0x1d, 0x97, 0x93, 0x80, 0xee, 0xc0, + 0x17, 0xb6, 0xff, 0x85, 0x36, 0x57, 0xd8, 0x5c, 0xaf, 0x87, 0x4a, 0x10, + 0xe6, 0xd5, 0xaa, 0x27, 0x62, 0x5c, 0x61, 0x8e, 0xd5, 0xa1, 0xd4, 0x61, + 0xe3, 0xf2, 0x5a, 0x20, 0x97, 0xe7, 0xa9, 0x85, 0xd7, 0xbf, 0x34, 0x29, + 0x02, 0x43, 0x8b, 0x00, 0x46, 0x9c, 0xe4, 0x12, 0xa4, 0xeb, 0xbc, 0x3a, + 0x27, 0x3d, 0x08, 0xfd, 0xa0, 0xa1, 0x82, 0x3c, 0x4b, 0x9d, 0x16, 0x2b, + 0x6c, 0x8f, 0x21, 0x73, 0x93, 0x30, 0x7c, 0x6b, 0x50, 0xd2, 0x30, 0x82, + 0x1e, 0x3a, 0xa0, 0xce, 0x84, 0xe5, 0xf2, 0x3c, 0xa9, 0x52, 0x14, 0x8c, + 0xc2, 0x3d, 0x21, 0xe0, 0xcb, 0x4e, 0x08, 0x69, 0x97, 0x22, 0x25, 0x7c, + 0xac, 0x08, 0xf4, 0xdd, 0x98, 0x27, 0x52, 0xb5, 0x24, 0x64, 0x92, 0x4a, + 0xae, 0x0b, 0xb2, 0xba, 0x87, 0x1a, 0x8e, 0x1c, 0x1a, 0x9a, 0x3b, 0x82, + 0x8a, 0xd6, 0xf3, 0x90, 0x01, 0x65, 0x8e, 0x9b, 0xd5, 0x62, 0x23, 0x03, + 0xa3, 0x93, 0x85, 0x35, 0x3d, 0x64, 0x74, 0xbf, 0x68, 0x77, 0x1b, 0xed, + 0x07, 0x61, 0xa1, 0xfd, 0xd6, 0x38, 0xc7, 0x68, 0x14, 0x73, 0x02, 0x01, + 0x34, 0x03, 0x5f, 0x27, 0x96, 0xf4, 0x5e, 0xf5, 0x66, 0x87, 0xf4, 0x75, + 0x0a, 0x46, 0x41, 0x0b, 0xd9, 0x7f, 0xad, 0x4c, 0x0b, 0x3f, 0xcd, 0x48, + 0x97, 0xd6, 0x04, 0x02, 0x5c, 0x59, 0x2d, 0xea, 0xf2, 0xc2, 0x83, 0xb3, + 0x25, 0x49, 0x39, 0xc5, 0xcd, 0x9d, 0x9d, 0x52, 0x77, 0x3c, 0x80, 0xdb, + 0x82, 0x75, 0xb4, 0xbe, 0x64, 0x8c, 0x97, 0xe8, 0xad, 0x27, 0x12, 0xb7, + 0x1b, 0x50, 0xf1, 0x79, 0xc6, 0xd3, 0x2b, 0xad, 0x2e, 0x2b, 0xd4, 0xf5, + 0x4d, 0xdf, 0xbc, 0xff, 0x0e, 0x15, 0x45, 0x8b, 0x7a, 0x7b, 0x7e, 0x31, + 0x11, 0x8c, 0x3d, 0x12, 0xa9, 0x48, 0x3b, 0xf0, 0xd0, 0xe5, 0xa0, 0x2d, + 0xe1, 0xd9, 0x45, 0xa0, 0x49, 0x8e, 0x71, 0x3c, 0xda, 0x6a, 0x80, 0xee, + 0x71, 0x8b, 0x00, 0xbb, 0x6c, 0x06, 0xad, 0xbb, 0xcc, 0xdb, 0xd4, 0x74, + 0x40, 0x5b, 0xbe, 0xa1, 0x4b, 0x8f, 0xc9, 0x32, 0x22, 0x76, 0x9d, 0x9d, + 0x8c, 0xd2, 0xa4, 0x42, 0x68, 0xb2, 0x04, 0xe9, 0x37, 0x83, 0x52, 0xd4, + 0xf1, 0x29, 0x4c, 0x07, 0x2b, 0x91, 0x75, 0xbf, 0xe8, 0x9b, 0xfb, 0xa3, + 0xd6, 0xe6, 0x65, 0xf7, 0xd9, 0x87, 0x50, 0xcb, 0xb0, 0x91, 0x67, 0x66, + 0x14, 0x9e, 0x56, 0x82, 0xeb, 0x41, 0xed, 0x64, 0x2a, 0xb1, 0xb4, 0xf2, + 0xd1, 0x84, 0x98, 0xa8, 0xc8, 0x9c, 0x73, 0xd9, 0x54, 0x38, 0x88, 0xb2, + 0x35, 0xa4, 0x1b, 0x6c, 0xde, 0x6a, 0x52, 0xfc, 0x2a, 0xe1, 0x6e, 0x22, + 0x0e, 0x07, 0x8e, 0x84, 0xc1, 0x38, 0x03, 0xbf, 0xe3, 0xbd, 0x47, 0xc2, + 0x56, 0xad, 0x00, 0xae, 0x89, 0xb0, 0x09, 0xf7, 0xd8, 0x1d, 0xbc, 0xc4, + 0x8b, 0x0e, 0xc8, 0x2e, 0x5c, 0x03, 0xc8, 0x22, 0x4b, 0xf7, 0x09, 0xc7, + 0x1a, 0xb2, 0x72, 0x50, 0x7a, 0xfd, 0x3b, 0xa5, 0xbd, 0x99, 0xa9, 0x63, + 0x46, 0x5f, 0xa7, 0x6b, 0xa6, 0xb2, 0xcb, 0x65, 0x33, 0xc6, 0x6f, 0x51, + 0xbd, 0x3e, 0x40, 0xd8, 0xb2, 0x15, 0x94, 0x67, 0x4c, 0x40, 0x5c, 0xee, + 0x20, 0xbb, 0x76, 0x24, 0xe1, 0x5d, 0x3d, 0xf0, 0x95, 0x52, 0xbb, 0x62, + 0xc5, 0xb7, 0xa9, 0xc6, 0x4e, 0xf5, 0xd2, 0x2e, 0xbd, 0x0f, 0xdd, 0x75, + 0x1a, 0x5f, 0x37, 0x99, 0x55, 0x7a, 0x3e, 0xee, 0x04, 0x2f, 0x7c, 0x22, + 0xd9, 0x52, 0xe4, 0xef, 0x78, 0xeb, 0xf3, 0x6b, 0x7a, 0x57, 0xca, 0x30, + 0x08, 0xb0, 0xde, 0xa0, 0x13, 0x24, 0xaa, 0x73, 0x54, 0x1a, 0xa9, 0x37, + 0x0b, 0x6a, 0x5f, 0x67, 0xfa, 0xf8, 0x24, 0x48, 0x88, 0x7b, 0xb9, 0xdb, + 0xe7, 0x88, 0x67, 0xb7, 0x3a, 0xe1, 0xe4, 0x98, 0x6b, 0xca, 0xee, 0x94, + 0xfe, 0xdb, 0xad, 0xb8, 0x27, 0xb2, 0x58, 0x49, 0x7e, 0x16, 0x76, 0xf9, + 0xc4, 0xdb, 0x6c, 0xa7, 0xaa, 0x15, 0xdb, 0x1c, 0x42, 0xac, 0xd0, 0x66, + 0xfa, 0xd7, 0x0b, 0xb8, 0xa0, 0x64, 0x35, 0x34, 0x9c, 0x95, 0x52, 0x3a, + 0xa1, 0xbf, 0xb3, 0x50, 0xf9, 0x2a, 0x1b, 0xb0, 0x8e, 0x19, 0x46, 0xc5, + 0x66, 0xcb, 0x61, 0xe4, 0x76, 0xa3, 0x74, 0xcb, 0x0f, 0x6a, 0x8b, 0x2e, + 0xad, 0xf4, 0x88, 0x00, 0x80, 0xe7, 0x31, 0xfa, 0x56, 0x7d, 0xb3, 0xee, + 0xfb, 0xb0, 0x59, 0xe1, 0xab, 0xc0, 0xa0, 0x8b, 0xcd, 0x77, 0x9d, 0x59, + 0x06, 0xf3, 0x16, 0x31, 0x20, 0x39, 0x90, 0xdc, 0x6e, 0xd6, 0x1d, 0x97, + 0x7b, 0x0a, 0x17, 0x8e, 0x01, 0x5b, 0x34, 0x4e, 0x3c, 0x5c, 0xc8, 0x26, + 0x0d, 0x4a, 0x53, 0xf8, 0x88, 0x87, 0xa7, 0xf2, 0x1a, 0xd5, 0x6a, 0x91, + 0x3d, 0x5f, 0x62, 0x81, 0x71, 0x03, 0xb2, 0xe8, 0xed, 0xeb, 0x0f, 0x8b, + 0x19, 0xf9, 0x0e, 0xf1, 0x12, 0x9c, 0xcf, 0x18, 0x02, 0x00, 0x81, 0x08, + 0x3e, 0x42, 0x9b, 0x1c, 0xd2, 0xa0, 0x64, 0xb6, 0xc0, 0xd4, 0xd6, 0x1e, + 0xd3, 0x65, 0x75, 0xb8, 0xcb, 0x25, 0xd2, 0xc1, 0x33, 0x68, 0xf0, 0xb8, + 0x25, 0x95, 0x43, 0x57, 0xf2, 0x0a, 0xab, 0x2d, 0x99, 0x08, 0x14, 0xab, + 0x2c, 0xd9, 0x99, 0x6e, 0x15, 0x0f, 0x9d, 0x82, 0xa5, 0x45, 0xf5, 0x38, + 0x78, 0x80, 0x8c, 0x17, 0xec, 0xfc, 0x25, 0x88, 0x1b, 0xe2, 0x3a, 0x6a, + 0x3d, 0x4d, 0x49, 0x9c, 0x59, 0x95, 0xe8, 0xb3, 0xdf, 0x66, 0xe2, 0x77, + 0x55, 0x1d, 0x3e, 0x22, 0xc0, 0xf8, 0x57, 0xe5, 0xac, 0x24, 0x8d, 0x2e, + 0x02, 0x0d, 0xb3, 0xd0, 0x85, 0x7b, 0x36, 0x4d, 0x1e, 0x41, 0x50, 0xcb, + 0x0c, 0x08, 0xe2, 0x36, 0x9b, 0x84, 0x00, 0xac, 0x7b, 0xd0, 0x21, 0xea, + 0x29, 0xa8, 0x18, 0x10, 0xa1, 0x34, 0x45, 0x37, 0xb3, 0xb5, 0x5a, 0x98, + 0xa7, 0xde, 0x61, 0x15, 0xc6, 0x1e, 0xd3, 0x8f, 0x6c, 0x36, 0x3e, 0x59, + 0xcb, 0x9a, 0x92, 0x7c, 0x48, 0xa5, 0x5f, 0x96, 0x3d, 0xde, 0xc8, 0x16, + 0x30, 0xe4, 0x97, 0xf2, 0x17, 0xa9, 0x20, 0x90, 0x6e, 0x11, 0xbd, 0x34, + 0x0f, 0x1d, 0xe9, 0xab, 0xac, 0xe9, 0xa5, 0x28, 0x85, 0x83, 0x6e, 0x1a, + 0xa1, 0x06, 0x77, 0x4f, 0x7c, 0xfe, 0x69, 0x0f, 0x06, 0x59, 0xd0, 0x23, + 0xd0, 0xce, 0xaa, 0x9d, 0x27, 0xb6, 0x3d, 0x36, 0x50, 0x75, 0x70, 0x5f, + 0xef, 0xe8, 0xe7, 0x5d, 0xd3, 0x2b, 0x95, 0xe1, 0x91, 0x39, 0x7a, 0x90, + 0x3d, 0x96, 0x16, 0xfa, 0xbf, 0x6e, 0x76, 0x07, 0x30, 0xea, 0xd7, 0x9d, + 0xc3, 0x39, 0x79, 0xa9, 0xca, 0x56, 0x67, 0x2e, 0xba, 0xe0, 0xfb, 0x9a, + 0x66, 0xa9, 0x36, 0x2f, 0x7e, 0xce, 0x03, 0x3a, 0xa0, 0x2f, 0x92, 0xeb, + 0xfd, 0x2a, 0x68, 0x93, 0x42, 0xde, 0x2d, 0x26, 0x56, 0xb2, 0x5a, 0x22, + 0x9f, 0x92, 0x5e, 0xb4, 0x5e, 0x14, 0x65, 0x6e, 0x89, 0x77, 0xfe, 0xde, + 0xb7, 0xba, 0x62, 0x9b, 0x0a, 0xab, 0x8e, 0xdb, 0x04, 0x4f, 0xc4, 0x38, + 0xa1, 0x4d, 0x1a, 0x5d, 0x17, 0x95, 0xa8, 0xcd, 0x8f, 0x82, 0x6f, 0xa5, + 0x6b, 0xf7, 0x43, 0x78, 0x9b, 0x32, 0xc7, 0x25, 0x16, 0x48, 0x61, 0x20, + 0x67, 0x2f, 0x0e, 0x1f, 0xbd, 0x6f, 0x73, 0x50, 0x10, 0x01, 0xc0, 0x3d, + 0xe7, 0xe2, 0xf2, 0x74, 0x99, 0x76, 0xe2, 0xd9, 0xce, 0x14, 0x96, 0x2d, + 0xc7, 0x50, 0x7e, 0xcc, 0x60, 0xa9, 0x52, 0x6e, 0x48, 0xf9, 0xb8, 0xa3, + 0x3a, 0x72, 0xe4, 0x24, 0x3c, 0x6d, 0xb1, 0xd3, 0x76, 0xed, 0xbf, 0xfb, + 0xde, 0xad, 0x4b, 0x1b, 0x7f, 0xdd, 0xc7, 0x74, 0xaf, 0x3c, 0x80, 0x38, + 0xdb, 0x47, 0x95, 0x75, 0xb7, 0x4b, 0x89, 0x20, 0x0a, 0xfe, 0xce, 0x0c, + 0x22, 0x78, 0xa4, 0xa6, 0xad, 0x5e, 0x26, 0x24, 0x6d, 0x4c, 0x82, 0x64, + 0x42, 0x11, 0xc0, 0x19, 0xb5, 0xaf, 0x9d, 0xf2, 0xef, 0xf1, 0xd4, 0x20, + 0x67, 0xb9, 0x43, 0xce, 0xeb, 0x48, 0x72, 0x36, 0xf2, 0x7d, 0xfa, 0x76, + 0x6f, 0xa3, 0x63, 0x03, 0x2f, 0x45, 0x86, 0x98, 0x71, 0xdb, 0x5b, 0x62, + 0x68, 0x54, 0x06, 0x6f, 0x6d, 0x56, 0x7b, 0x36, 0x38, 0x3d, 0x31, 0xb2, + 0x73, 0x09, 0x62, 0x82, 0x9f, 0xe8, 0x87, 0x93, 0xed, 0x1f, 0xfe, 0x44, + 0xc3, 0x5d, 0xa1, 0xdf, 0x42, 0x45, 0x31, 0x86, 0xa1, 0x72, 0x7e, 0x73, + 0x9c, 0x2c, 0x33, 0xa0, 0xe8, 0x07, 0xe2, 0x8e, 0x5c, 0xf9, 0xb2, 0x61, + 0xfe, 0x82, 0x63, 0xf7, 0xc6, 0x2a, 0x4d, 0xac, 0xea, 0x8a, 0xe0, 0x99, + 0xea, 0x02, 0x8b, 0xbd, 0x7f, 0x68, 0x3f, 0x38, 0x40, 0xc0, 0x75, 0x01, + 0xaf, 0xeb, 0x31, 0x62, 0x53, 0x4f, 0x34, 0x0b, 0x96, 0x20, 0x7d, 0x8c, + 0xde, 0xec, 0xf4, 0x17, 0xdd, 0xc8, 0x9b, 0x5f, 0x04, 0xfa, 0xe3, 0x33, + 0xbf, 0x96, 0xd0, 0xb3, 0xe0, 0x8a, 0x4d, 0xdf, 0xf9, 0xb4, 0x72, 0xf9, + 0x5a, 0xa6, 0xb6, 0xd2, 0x80, 0x6d, 0xcd, 0x38, 0x08, 0x11, 0xee, 0x48, + 0xa7, 0xd3, 0x8b, 0x42, 0x61, 0x5c, 0xfb, 0x81, 0xb0, 0x71, 0x0d, 0x8e, + 0x0c, 0x72, 0xf4, 0x8a, 0x3c, 0xf1, 0x69, 0x0a, 0x4e, 0x97, 0xbd, 0x96, + 0x26, 0x49, 0x4b, 0x45, 0x5c, 0x45, 0xf1, 0xdd, 0x27, 0x92, 0x03, 0xe4, + 0x16, 0xf8, 0x4a, 0x77, 0x37, 0xdc, 0xe5, 0x4a, 0x34, 0x08, 0x11, 0x5b, + 0xb9, 0x57, 0x3e, 0xc7, 0x6d, 0x34, 0x9d, 0x74, 0xae, 0xf7, 0x9d, 0xdd, + 0x10, 0xac, 0x52, 0x51, 0xc6, 0xce, 0xb3, 0x95, 0x01, 0xc7, 0x13, 0x4f, + 0x0c, 0x0b, 0x25, 0xb5, 0xca, 0x78, 0x86, 0xbb, 0xa4, 0xbd, 0x38, 0xcc, + 0xc3, 0xa1, 0x25, 0x94, 0xe0, 0x5c, 0xc2, 0x5e, 0xd4, 0xf1, 0x7b, 0x59, + 0xb0, 0x35, 0x72, 0x01, 0x65, 0x54, 0xb3, 0xf7, 0xc2, 0x59, 0x06, 0xc0, + 0xb6, 0xf0, 0x21, 0x7b, 0x18, 0xef, 0x68, 0x10, 0x0c, 0xaf, 0x7d, 0xcf, + 0x18, 0x32, 0x18, 0x4e, 0x0b, 0xdb, 0x18, 0x8d, 0xc1, 0x92, 0x8a, 0x7a, + 0xce, 0xfc, 0x99, 0xa3, 0x69, 0x95, 0xb1, 0xa5, 0x9b, 0xd4, 0x3f, 0x0d, + 0x1a, 0xbd, 0x83, 0xfa, 0xa5, 0x7f, 0x1b, 0x42, 0xec, 0x6f, 0xd7, 0xc0, + 0xe8, 0x48, 0x37, 0xcf, 0x70, 0xce, 0xcd, 0x54, 0x07, 0x43, 0x8c, 0xbc, + 0x6b, 0x09, 0x8d, 0x8b, 0xc3, 0xde, 0x50, 0x1b, 0x8c, 0x12, 0x14, 0x90, + 0xd6, 0x4c, 0xb7, 0xcf, 0x8a, 0x4b, 0xc7, 0x4b, 0x80, 0x20, 0xdb, 0xa8, + 0x46, 0x81, 0x7e, 0x58, 0x56, 0x38, 0xfc, 0xb2, 0x7b, 0xdc, 0xdb, 0x1b, + 0x99, 0x58, 0x07, 0xb6, 0x69, 0x58, 0x2c, 0xb5, 0xb4, 0xde, 0x67, 0x28, + 0x1b, 0xd6, 0xd6, 0xdd, 0xb7, 0x2a, 0x78, 0x15, 0x41, 0x2b, 0x41, 0xa2, + 0x3f, 0xd8, 0x3a, 0x7e, 0x31, 0x0c, 0x6d, 0x5a, 0x69, 0x14, 0x49, 0x08, + 0xa7, 0x9d, 0x30, 0x05, 0xf8, 0x64, 0x24, 0xcf, 0x71, 0xdd, 0x74, 0x4f, + 0x4c, 0xdb, 0x85, 0x9e, 0xf8, 0x4b, 0xc6, 0xa4, 0x4c, 0x22, 0x4c, 0x1a, + 0xeb, 0x12, 0x24, 0x6b, 0xe4, 0x8b, 0x43, 0x63, 0x33, 0xc3, 0x75, 0x5d, + 0xa1, 0xfe, 0x8e, 0xfe, 0x41, 0xdb, 0x38, 0x64, 0x47, 0xe4, 0x14, 0x1a, + 0x99, 0x87, 0x2a, 0xd3, 0xdd, 0x7d, 0x1b, 0xe6, 0x79, 0x8e, 0x74, 0x9e, + 0x9b, 0x64, 0x42, 0xe0, 0x13, 0xd8, 0x62, 0xff, 0x04, 0xaf, 0x49, 0xdc, + 0xce, 0x09, 0x14, 0x18, 0x11, 0x35, 0xd9, 0x91, 0x85, 0x08, 0x73, 0xae, + 0xc1, 0xff, 0xd7, 0x00, 0x1f, 0xdb, 0xa4, 0xaf, 0x58, 0x52, 0xb4, 0xc0, + 0xe5, 0xf8, 0x3e, 0x65, 0x94, 0x36, 0xfe, 0x8c, 0x41, 0xa2, 0x03, 0x8c, + 0xf8, 0xb3, 0x65, 0x0d, 0x8c, 0x4c, 0xde, 0x29, 0xe4, 0x08, 0x43, 0xf7, + 0x98, 0x02, 0x21, 0xb7, 0xce, 0xaf, 0x1d, 0x33, 0x5b, 0x91, 0x00, 0x33, + 0x67, 0x8b, 0x8a, 0xec, 0x95, 0x08, 0x1d, 0x53, 0x0d, 0x4e, 0x72, 0x7f, + 0xee, 0xa9, 0x10, 0xf8, 0x14, 0xb2, 0x03, 0x70, 0x90, 0x03, 0xc1, 0x53, + 0x26, 0x4f, 0xe8, 0xf1, 0xe5, 0xa8, 0xdf, 0x5d, 0x54, 0x6a, 0x3c, 0xb3, + 0xf4, 0x55, 0xcb, 0x62, 0x20, 0x8c, 0x95, 0x42, 0x56, 0x11, 0x03, 0x3d, + 0x44, 0x76, 0x1d, 0x5e, 0x6f, 0xb4, 0x29, 0x8a, 0xeb, 0x83, 0xa7, 0xdd, + 0x1a, 0x6b, 0x3e, 0xb5, 0xff, 0x2b, 0xdc, 0x55, 0x86, 0x52, 0x05, 0x66, + 0x7d, 0x00, 0x42, 0x42, 0x09, 0x25, 0x47, 0xdf, 0x90, 0xcb, 0x57, 0xd0, + 0x6b, 0x0f, 0x89, 0x79, 0xde, 0x07, 0x48, 0xa1, 0xa0, 0x11, 0x76, 0xd4, + 0x8e, 0x52, 0x00, 0x13, 0xdd, 0x3b, 0xda, 0x88, 0x0c, 0x19, 0x5c, 0x2c, + 0x81, 0x38, 0x9f, 0xc7, 0xf1, 0x25, 0x38, 0xc5, 0xca, 0x49, 0x12, 0x85, + 0x57, 0x66, 0xa9, 0x9f, 0x76, 0x06, 0x67, 0x57, 0xbe, 0x55, 0x5d, 0x82, + 0x65, 0xf7, 0xaa, 0x58, 0xc0, 0xb5, 0xde, 0x10, 0xcd, 0xce, 0x7f, 0x96, + 0x0e, 0xe5, 0x9f, 0xb2, 0x45, 0x64, 0xe7, 0xf3, 0x48, 0xc4, 0xd3, 0xea, + 0x18, 0xd7, 0x4d, 0xa5, 0x10, 0x1d, 0x2d, 0xec, 0x64, 0xf6, 0xc2, 0x13, + 0x5b, 0xba, 0x24, 0x94, 0xcf, 0x27, 0xce, 0x0f, 0xf1, 0xcf, 0x5d, 0x1f, + 0x56, 0xa0, 0xe6, 0x72, 0x17, 0x23, 0x55, 0x5f, 0x38, 0x3e, 0x62, 0x89, + 0x8e, 0xba, 0xf3, 0xf6, 0x03, 0x32, 0x36, 0x5c, 0x5e, 0x68, 0xc1, 0xc3, + 0xc9, 0xef, 0xfe, 0x01, 0x12, 0x48, 0x4e, 0x53, 0x6b, 0x83, 0xb0, 0x1c, + 0x3b, 0x62, 0x9a, 0xde, 0x7d, 0x90, 0xc1, 0xd1, 0xf0, 0x40, 0x5e, 0x72, + 0x8f, 0xb7, 0xd3, 0xdb, 0xe6, 0xe7, 0xf6, 0x1d, 0x2d, 0x70, 0x8b, 0x0c, + 0x24, 0x89, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x13, 0x1b, 0x20, 0x25, 0x2f, 0x33, 0x37, +}; + +#endif /* MLDSA_OCTET_KAT_H */ diff --git a/embedded/ti-c2000-f28p55x/Header/user_settings.h b/embedded/ti-c2000-f28p55x/Header/user_settings.h index b3ba57417..06aa65e12 100644 --- a/embedded/ti-c2000-f28p55x/Header/user_settings.h +++ b/embedded/ti-c2000-f28p55x/Header/user_settings.h @@ -153,6 +153,16 @@ extern "C" { #undef WOLFSSL_NO_ML_DSA_65 #define WOLFSSL_NO_ML_DSA_65 +#ifdef WOLF_MLDSA_ALL_LEVELS +/* The octet-boundary KAT image (make MLDSA=1) verifies at all three parameter + * sets. Level 44 matters disproportionately here: it is the only one whose w1 + * commitment encoder packs 6-bit values (mldsa_encode_w1_88_c), so it is the + * only one that exercises that packer's octet masking at CHAR_BIT == 16. + * Levels 65 and 87 pack 4-bit values, which cannot overflow an octet. */ +#undef WOLFSSL_NO_ML_DSA_44 +#undef WOLFSSL_NO_ML_DSA_65 +#endif + /* Raw key/sig import - no ASN.1 (both modes). */ #undef WOLFSSL_MLDSA_NO_ASN1 #define WOLFSSL_MLDSA_NO_ASN1 diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index ac5289e69..bae261611 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -111,6 +111,15 @@ ifeq ($(MLKEM),1) $(WOLFROOT)/wolfcrypt/src/wc_mlkem_poly.c endif +# MLDSA=1 builds the octet-boundary KAT image: ML-DSA-44/65/87 verify, +# wc_MlDsaKey_VerifyCtxHash() over SHA-256/SHA-512, and a verify from a PACKED +# key and signature via wc_UnpackOctets(). All three parameter sets are +# compiled in, so the test/benchmark harness is dropped to make room. +MLDSA ?= 0 +ifeq ($(MLDSA),1) + CFLAGS += --define=WOLF_MLDSA_ALL_LEVELS +endif + # aes.c + wc_encrypt.c are wanted by AES=1, AESEXTRA=1 and HWAES=1. Each sets # NEED_AES_CORE and the pair is appended once below: the build is a single # cl2000 invocation, so a source listed twice multiply-defines at link. @@ -235,6 +244,8 @@ ifeq ($(DH),1) $(WOLFROOT)/wolfcrypt/src/sp_c32.c endif +HARNESS_EXTRA := + HARNESS_SRCS := \ $(WOLFROOT)/wolfcrypt/test/test.c \ $(WOLFROOT)/wolfcrypt/benchmark/benchmark.c @@ -261,6 +272,14 @@ ifeq ($(SIGN),1) --define=NO_CRYPT_BENCHMARK LNKCMD := $(CURDIR)/28p55x_wolf_sign_lnk.cmd HARNESS_SRCS := +else ifeq ($(MLDSA),1) +ifeq ($(BENCH),1) +$(error MLDSA=1 and BENCH=1 are separate images - build them one at a time) +endif + CFLAGS += --define=WOLF_MLDSA_OCTETS --define=NO_CRYPT_TEST \ + --define=NO_CRYPT_BENCHMARK + LNKCMD := $(CURDIR)/28p55x_wolf_flash_lnk.cmd + HARNESS_SRCS := else LNKCMD := $(CURDIR)/28p55x_wolf_flash_lnk.cmd ifeq ($(BENCH),1) diff --git a/embedded/ti-c2000-f28p55x/README.md b/embedded/ti-c2000-f28p55x/README.md index bdcfe8e0d..d768dc485 100644 --- a/embedded/ti-c2000-f28p55x/README.md +++ b/embedded/ti-c2000-f28p55x/README.md @@ -9,6 +9,7 @@ The default build runs a KAT suite plus `wolfcrypt_test` and (optionally) `bench - SHA-224/256, SHA-384/512, SHA-512/224, SHA-512/256 - SHA3-224/256/384/512, SHAKE128, SHAKE256 (split-64 Keccak permutation, ~53% faster than the generic C path on C28x) - ML-DSA-87 (Dilithium level 5) verify, and the full keygen+sign+verify round-trip (`SIGN=1`) +- ML-DSA-44/65/87 verify, HashML-DSA (`wc_MlDsaKey_VerifyCtxHash`) over SHA-256/SHA-512, and a packed-octet-stream verify (`MLDSA=1`) - ML-KEM-768 (FIPS 203) keygen/encap/decap round-trip (`MLKEM=1`) - AES-128/192/256 CBC/CTR/CFB/GCM (`AES=1`); AES-CMAC, AES-CCM, AES-GMAC (`AESEXTRA=1`); hardware-accelerated AES-ECB/CBC/CTR on the on-chip AESA block (`HWAES=1`) - HMAC-SHA256 + HKDF (`HKDF=1`) @@ -17,6 +18,14 @@ The default build runs a KAT suite plus `wolfcrypt_test` and (optionally) `bench - ECDSA + ECDH over SECP256R1 via SP math (`ECC=1`) - RSA-2048 PKCS#1 v1.5 verify via SP math (`RSA=1`) +## Octet representation at the API boundary (`MLDSA=1`) + +Every wolfCrypt `byte*` buffer holds one octet per `byte` cell. On this part a cell is 16 bits, so a buffer costs twice the RAM and each cell reads as `0x00nn` -- an ML-DSA-65 signature is 3309 octets = 3309 cells = 6618 bytes of RAM. The octet values are exact, so this is a footprint property, not a signature-integrity one, and `sigLen` stays an octet count. + +Data arriving from flash, SCI, CAN or a host tool is **packed**, two octets per cell, low octet first. Convert it with `wc_UnpackOctets()` before calling wolfCrypt (and `wc_PackOctets()` on the way out). Both are declared only under `WOLFSSL_WIDE_BYTE` -- on an 8-bit-byte host the two layouts are the same buffer, so there is nothing to convert. + +`make MLDSA=1` proves this on hardware: ML-DSA-44/65/87 verify, `wc_MlDsaKey_VerifyCtxHash()` over SHA-256/SHA-512 with a non-empty context, and a verify from a packed key and signature. Vectors are in `Header/mldsa_octet_kat.h`, regenerated by `tools/gen_kat.c` (build it against a host wolfSSL, run it, and move the header into `Header/`). Full write-up: `IDE/C2000/README.md` in the wolfSSL tree. + ## The 16-bit-byte (CHAR_BIT == 16) story On the C28x a `char`/`unsigned char` (wolfSSL's `byte`) holds 16 bits, the minimum addressable unit is 16 bits, and `(byte)x` masks to 16 bits, not 8. wolfCrypt octet handling that assumed an 8-bit byte was made `CHAR_BIT`-agnostic behind the `WOLFSSL_WIDE_BYTE` gate (auto-enabled for `CHAR_BIT != 8` and known 16-bit-char TI toolchains), with zero change on 8-bit targets. The fixes fall into a few recurring classes: @@ -62,6 +71,7 @@ Each is `make =1` (default 0 unless noted), additive on top of the default | `ENTROPY_PROBE=1` | Raw entropy characterization image: dumps unconditioned samples over SCI for host analysis, runs no crypto | | `RSA=1` | RSA-2048 verify (SP math, 2048-only, verify/public-only) | | `SIGN=1` | Full ML-DSA-87 keygen+sign+verify demo (dedicated linker script, 32 KW heap, no test/bench harness) | +| `MLDSA=1` | ML-DSA octet-boundary KATs: verify at all three parameter sets, `wc_MlDsaKey_VerifyCtxHash()` over SHA-256/SHA-512, and a verify from a PACKED key/signature via `wc_UnpackOctets()`. No test/bench harness. See "Octet representation" below | | `BENCH=1` | Run only `benchmark` instead of `wolfcrypt_test` (they need separate images on this RAM-limited part) | Other knobs: `CGT_ROOT` (required), `C2000WARE`, `WOLFROOT`, and `CIO=1` (route `printf` to the CCS/JTAG console via CIO instead of the default SCI/UART). diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index 51e383c26..f6f22ed2d 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -101,7 +101,16 @@ #endif #include #include +#ifdef WOLF_MLDSA_OCTETS +/* The octet-boundary image carries its own seed-derived vectors for all three + * parameter sets (it needs the matching private key to produce the pre-hash + * signatures), and reuses the same kat_mldsa87_* names. The canonical FIPS 204 + * ML-DSA-87 vectors from wolfcrypt/test/test.c stay in the default image. */ +#include +#include "mldsa_octet_kat.h" +#else #include "mldsa87_kat.h" +#endif #ifdef WOLF_ECC #include "ecc_p256_kat.h" #endif @@ -870,7 +879,7 @@ static void wolf_sha1_test(void) } #endif /* WOLF_SHA1 */ -#ifndef WOLF_MLDSA_SIGN +#if !defined(WOLF_MLDSA_SIGN) && !defined(WOLF_MLDSA_OCTETS) /* ML-DSA-87 verify known-answer test (real pk/msg/sig from test.c). This * is the primary deliverable: a deterministic, RNG-free verify on HW. * Key struct is static (large; WOLFSSL_MLDSA_VERIFY_NO_MALLOC pins buffers @@ -956,7 +965,178 @@ static void wolf_mldsa87_verify_test(void) #endif wc_MlDsaKey_Free(&mldsa_key); } -#endif /* !WOLF_MLDSA_SIGN */ +#endif /* !WOLF_MLDSA_SIGN && !WOLF_MLDSA_OCTETS */ + +#ifdef WOLF_MLDSA_OCTETS +/* ------------------------------------------------------------------------- */ +/* ML-DSA octet-boundary tests (make MLDSA=1) */ +/* ------------------------------------------------------------------------- */ +/* Proves three things on 16-bit-byte silicon: verify is correct at all three + * parameter sets (level 44 matters most - its w1 encoder packs 6-bit values, so + * it is the only one that can push a cell above 255); the HashML-DSA path + * wc_MlDsaKey_VerifyCtxHash() works with a non-empty context; and a key and + * signature that arrive PACKED verify once wc_UnpackOctets() expands them. + * One key struct is shared - WOLFSSL_MLDSA_VERIFY_NO_MALLOC pins the verify + * workspace inside it, far too big for the 16 KW C28x stack. */ +/* Static: an ML-DSA-65 signature is 3309 cells = 6618 octets of C28x RAM. */ +static byte mo_pub[WC_MLDSA_65_PUB_KEY_SIZE]; +static byte mo_sig[WC_MLDSA_65_SIG_SIZE]; +static wc_MlDsaKey mo_key; +static byte mo_msg[512]; + +/* hashAlg < 0 selects plain verify over the message; otherwise pre-hash. */ +static void mo_verify(const char* what, int type, const byte* pub, + word32 pubLen, const byte* sig, word32 sigLen, int hashAlg, + const byte* hash, word32 hashLen) +{ + int res = 0; + int ret; + + ret = wc_MlDsaKey_Init(&mo_key, NULL, INVALID_DEVID); + if (ret == 0) { + ret = wc_MlDsaKey_SetParams(&mo_key, type); + } + if (ret == 0) { + ret = wc_MlDsaKey_ImportPubRaw(&mo_key, pub, pubLen); + } + if (ret == 0) { + if (hashAlg < 0) { + ret = wc_MlDsaKey_VerifyCtx(&mo_key, sig, sigLen, NULL, 0, mo_msg, + (word32)sizeof(mo_msg), &res); + } + else { + ret = wc_MlDsaKey_VerifyCtxHash(&mo_key, sig, sigLen, + (const byte*)KAT_MLDSA_CTX, + (byte)(sizeof(KAT_MLDSA_CTX) - 1), hash, hashLen, hashAlg, + &res); + } + } + printf("%s %s (ret=%d res=%d)\r\n", what, + ((ret == 0) && (res == 1)) ? "PASS" : "FAIL", ret, res); + wc_MlDsaKey_Free(&mo_key); +} + +/* Helpers on their own, odd length so the partial trailing cell is covered. */ +static void mo_pack_roundtrip(void) +{ + byte src[65]; + byte packed[65]; + byte back[65]; + int i; + int ret; + int ok; + + for (i = 0; i < (int)sizeof(src); i++) { + src[i] = (byte)((i * 7 + 1) & 0xFF); + } + ret = wc_PackOctets(packed, (word32)sizeof(packed), src, + (word32)sizeof(src)); + if (ret == 0) { + ret = wc_UnpackOctets(back, (word32)sizeof(back), packed, + (word32)sizeof(src)); + } + ok = (ret == 0) && (XMEMCMP(src, back, sizeof(src)) == 0); + printf("wc_Pack/UnpackOctets round-trip: %s (ret=%d)\r\n", + ok ? "PASS" : "FAIL", ret); +} + +/* Key and signature stored PACKED, expanded before use. */ +static void mo_packed_verify(void) +{ + int res = 0; + int ret; + + ret = wc_UnpackOctets(mo_pub, (word32)sizeof(mo_pub), + (const byte*)kat_mldsa65_pub_packed, (word32)sizeof(mo_pub)); + if (ret == 0) { + ret = wc_UnpackOctets(mo_sig, (word32)sizeof(mo_sig), + (const byte*)kat_mldsa65_sig_packed, (word32)sizeof(mo_sig)); + } + /* Expanded buffers must match the plain arrays octet for octet. */ + if (ret == 0) { + if ((XMEMCMP(mo_pub, kat_mldsa65_pub, sizeof(mo_pub)) != 0) || + (XMEMCMP(mo_sig, kat_mldsa65_sig, sizeof(mo_sig)) != 0)) { + ret = -1; + } + } + if (ret == 0) { + ret = wc_MlDsaKey_Init(&mo_key, NULL, INVALID_DEVID); + } + if (ret == 0) { + ret = wc_MlDsaKey_SetParams(&mo_key, WC_ML_DSA_65); + } + if (ret == 0) { + ret = wc_MlDsaKey_ImportPubRaw(&mo_key, mo_pub, (word32)sizeof(mo_pub)); + } + if (ret == 0) { + ret = wc_MlDsaKey_VerifyCtx(&mo_key, mo_sig, (word32)sizeof(mo_sig), + NULL, 0, mo_msg, (word32)sizeof(mo_msg), &res); + } + printf("ML-DSA-65 packed-signature verify: %s (ret=%d res=%d)\r\n", + ((ret == 0) && (res == 1)) ? "PASS" : "FAIL", ret, res); + wc_MlDsaKey_Free(&mo_key); +} + +static void wolf_mldsa_octet_test(void) +{ + byte sha256[WC_SHA256_DIGEST_SIZE]; + byte sha512[WC_SHA512_DIGEST_SIZE]; + int i; + int ret; + + /* msg[i] = i & 0xFF. The mask is not cosmetic here: a C28x cell would + * otherwise store 256..511 verbatim and corrupt the hash input. */ + for (i = 0; i < (int)sizeof(mo_msg); i++) { + mo_msg[i] = (byte)(i & 0xFF); + } + ret = wc_Sha256Hash(mo_msg, (word32)sizeof(mo_msg), sha256); + if (ret == 0) { + ret = wc_Sha512Hash(mo_msg, (word32)sizeof(mo_msg), sha512); + } + if (ret != 0) { + printf("ML-DSA octet tests: SKIP (digest failed ret=%d)\r\n", ret); + return; + } + + printf("octet model: CHAR_BIT=%d, %lu octet(s) per byte cell; " + "ML-DSA-65 sig = %lu octets = %lu cells = %lu bytes of RAM\r\n", + (int)CHAR_BIT, (unsigned long)WC_OCTETS_PER_BYTE, + (unsigned long)WC_MLDSA_65_SIG_SIZE, + (unsigned long)WC_MLDSA_65_SIG_SIZE, + (unsigned long)WC_MLDSA_65_SIG_SIZE * (CHAR_BIT / 8)); + + mo_pack_roundtrip(); + + mo_verify("ML-DSA-44 verify KAT:", WC_ML_DSA_44, kat_mldsa44_pub, + (word32)sizeof(kat_mldsa44_pub), kat_mldsa44_sig, + (word32)sizeof(kat_mldsa44_sig), -1, NULL, 0); + mo_verify("ML-DSA-65 verify KAT:", WC_ML_DSA_65, kat_mldsa65_pub, + (word32)sizeof(kat_mldsa65_pub), kat_mldsa65_sig, + (word32)sizeof(kat_mldsa65_sig), -1, NULL, 0); + mo_verify("ML-DSA-87 verify KAT:", WC_ML_DSA_87, kat_mldsa87_pub, + (word32)sizeof(kat_mldsa87_pub), kat_mldsa87_sig, + (word32)sizeof(kat_mldsa87_sig), -1, NULL, 0); + + mo_verify("ML-DSA-44 VerifyCtxHash SHA-256 KAT:", WC_ML_DSA_44, + kat_mldsa44_pub, (word32)sizeof(kat_mldsa44_pub), + kat_mldsa44_sig_ph256, (word32)sizeof(kat_mldsa44_sig_ph256), + WC_HASH_TYPE_SHA256, sha256, (word32)sizeof(sha256)); + mo_verify("ML-DSA-65 VerifyCtxHash SHA-256 KAT:", WC_ML_DSA_65, + kat_mldsa65_pub, (word32)sizeof(kat_mldsa65_pub), + kat_mldsa65_sig_ph256, (word32)sizeof(kat_mldsa65_sig_ph256), + WC_HASH_TYPE_SHA256, sha256, (word32)sizeof(sha256)); + mo_verify("ML-DSA-87 VerifyCtxHash SHA-256 KAT:", WC_ML_DSA_87, + kat_mldsa87_pub, (word32)sizeof(kat_mldsa87_pub), + kat_mldsa87_sig_ph256, (word32)sizeof(kat_mldsa87_sig_ph256), + WC_HASH_TYPE_SHA256, sha256, (word32)sizeof(sha256)); + mo_verify("ML-DSA-87 VerifyCtxHash SHA-512 KAT:", WC_ML_DSA_87, + kat_mldsa87_pub, (word32)sizeof(kat_mldsa87_pub), + kat_mldsa87_sig_ph512, (word32)sizeof(kat_mldsa87_sig_ph512), + WC_HASH_TYPE_SHA512, sha512, (word32)sizeof(sha512)); + + mo_packed_verify(); +} +#endif /* WOLF_MLDSA_OCTETS */ #ifdef WOLF_MLDSA_SIGN /* ML-DSA-87 sign+verify round-trip (keygen -> sign -> verify). Exercises @@ -2007,7 +2187,10 @@ int main(void) wolf_sha1_test(); #endif -#ifndef WOLF_MLDSA_SIGN +#if defined(WOLF_MLDSA_OCTETS) + printf("\r\n--- ML-DSA octet boundary (44/65/87, pre-hash, packed) ---\r\n"); + wolf_mldsa_octet_test(); +#elif !defined(WOLF_MLDSA_SIGN) wolf_mldsa87_verify_test(); #else wolf_mldsa87_sign_test(); @@ -2017,7 +2200,7 @@ int main(void) #ifndef WOLFSSL_NO_ML_DSA_65 mldsa_sign_roundtrip(WC_ML_DSA_65, "ML-DSA-65"); #endif -#endif /* !WOLF_MLDSA_SIGN */ +#endif /* ML-DSA test selection */ #ifdef WOLF_ECC printf("\r\n--- ECDSA/ECDH P-256 (SP) ---\r\n"); diff --git a/embedded/ti-c2000-f28p55x/tools/gen_kat.c b/embedded/ti-c2000-f28p55x/tools/gen_kat.c new file mode 100644 index 000000000..868a6a943 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/tools/gen_kat.c @@ -0,0 +1,211 @@ +/* gen_kat.c + * + * Copyright (C) 2006-2026 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + + +/* Generate the deterministic ML-DSA KAT vectors in Header/mldsa_octet_kat.h. + * + * gcc -o gen_kat gen_kat.c -lwolfssl && ./gen_kat && mv mldsa_octet_kat.h ../Header/ + * + * Everything is seed driven, so a regeneration reproduces the file exactly. */ +#include +#include +#include +#include +#include +#include +#include +#include + +#define MSG_SZ 512 +#define OUT_NAME "mldsa_octet_kat.h" + +static const byte kSeed[MLDSA_SEED_SZ] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f +}; +static const byte kRnd[MLDSA_RND_SZ] = { + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, + 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7, + 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf +}; +/* FIPS 204 application context string; deliberately non-empty so the + * 0x01 || ctxLen || ctx domain separator is actually exercised. */ +static const char kCtx[] = "wolfSSL-C28x"; + +static FILE* out; + +static void emit_bytes(const char* name, const byte* b, word32 len) +{ + word32 i; + fprintf(out, "static const unsigned char %s[] = {", name); + for (i = 0; i < len; i++) { + fprintf(out, "%s 0x%02x,", ((i % 12) == 0) ? "\n " : "", b[i]); + } + fprintf(out, "\n};\n"); +} + +/* Same octets packed two per 16-bit cell, low octet first. Identical storage + * on a little-endian 8-bit host, so the same test code runs on both. */ +static void emit_packed(const char* name, const byte* b, word32 len) +{ + word32 cells = (len + 1) / 2; + word32 i; + fprintf(out, "static const unsigned short %s[] = {", name); + for (i = 0; i < cells; i++) { + unsigned lo = b[i * 2]; + unsigned hi = ((i * 2 + 1) < len) ? b[i * 2 + 1] : 0; + fprintf(out, "%s 0x%04x,", ((i % 8) == 0) ? "\n " : "", + lo | (hi << 8)); + } + fprintf(out, "\n};\n"); +} + +static int do_level(int type, const char* tag, const byte* msg, + const byte* sha256, const byte* sha512, int wantPacked, int wantPh512) +{ + wc_MlDsaKey key; + byte pub[MLDSA_MAX_PUB_KEY_SIZE]; + byte sig[MLDSA_MAX_SIG_SIZE]; + word32 pubLen = (word32)sizeof(pub); + word32 sigLen; + char name[64]; + int ret; + + ret = wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID); + if (ret != 0) { + fprintf(stderr, "%s init failed: %d\n", tag, ret); + return ret; + } + + ret = wc_MlDsaKey_SetParams(&key, type); + if (ret == 0) + ret = wc_MlDsaKey_MakeKeyFromSeed(&key, kSeed); + if (ret == 0) + ret = wc_MlDsaKey_ExportPubRaw(&key, pub, &pubLen); + if (ret == 0) { + snprintf(name, sizeof(name), "kat_mldsa%s_pub", tag); + emit_bytes(name, pub, pubLen); + } + + /* Plain (non pre-hash) signature over the whole message. */ + if (ret == 0) { + sigLen = (word32)sizeof(sig); + ret = wc_MlDsaKey_SignCtxWithSeed(&key, NULL, 0, sig, &sigLen, + msg, MSG_SZ, kRnd); + } + if (ret == 0) { + snprintf(name, sizeof(name), "kat_mldsa%s_sig", tag); + emit_bytes(name, sig, sigLen); + if (wantPacked) { + snprintf(name, sizeof(name), "kat_mldsa%s_sig_packed", tag); + emit_packed(name, sig, sigLen); + snprintf(name, sizeof(name), "kat_mldsa%s_pub_packed", tag); + emit_packed(name, pub, pubLen); + } + } + + /* HashML-DSA over SHA-256(msg) with a non-empty context. */ + if (ret == 0) { + sigLen = (word32)sizeof(sig); + ret = wc_MlDsaKey_SignCtxHashWithSeed(&key, (const byte*)kCtx, + (byte)(sizeof(kCtx) - 1), sig, &sigLen, sha256, + WC_SHA256_DIGEST_SIZE, WC_HASH_TYPE_SHA256, kRnd); + } + if (ret == 0) { + snprintf(name, sizeof(name), "kat_mldsa%s_sig_ph256", tag); + emit_bytes(name, sig, sigLen); + } + + /* Same again over SHA-512, so the OID table is exercised at two lengths. */ + if ((ret == 0) && wantPh512) { + sigLen = (word32)sizeof(sig); + ret = wc_MlDsaKey_SignCtxHashWithSeed(&key, (const byte*)kCtx, + (byte)(sizeof(kCtx) - 1), sig, &sigLen, sha512, + WC_SHA512_DIGEST_SIZE, WC_HASH_TYPE_SHA512, kRnd); + if (ret == 0) { + snprintf(name, sizeof(name), "kat_mldsa%s_sig_ph512", tag); + emit_bytes(name, sig, sigLen); + } + } + + if (ret != 0) + fprintf(stderr, "%s vector generation failed: %d\n", tag, ret); + + wc_MlDsaKey_Free(&key); + return ret; +} + +int main(void) +{ + byte msg[MSG_SZ]; + byte sha256[WC_SHA256_DIGEST_SIZE]; + byte sha512[WC_SHA512_DIGEST_SIZE]; + int i; + int ret; + + for (i = 0; i < MSG_SZ; i++) + msg[i] = (byte)(i & 0xFF); + + ret = wc_Sha256Hash(msg, MSG_SZ, sha256); + if (ret == 0) + ret = wc_Sha512Hash(msg, MSG_SZ, sha512); + if (ret != 0) { + fprintf(stderr, "hash failed: %d\n", ret); + return 1; + } + + out = fopen(OUT_NAME, "w"); + if (out == NULL) { + fprintf(stderr, "cannot open output\n"); + return 1; + } + + fprintf(out, + "/* ML-DSA octet-boundary KAT vectors for the TI C2000 C28x example.\n" + " *\n" + " * GENERATED by tools/gen_kat.c - do not edit. Seed driven, so a\n" + " * regeneration reproduces this file exactly. Message is\n" + " * msg[i] = i & 0xFF, 512 octets. The _packed arrays hold the same\n" + " * octets two per 16-bit cell, low octet first - the layout an octet\n" + " * stream has off flash on a CHAR_BIT == 16 target. */\n" + "#ifndef MLDSA_OCTET_KAT_H\n" + "#define MLDSA_OCTET_KAT_H\n\n" + "#define KAT_MLDSA_CTX \"%s\"\n\n", kCtx); + + ret = do_level(WC_ML_DSA_44, "44", msg, sha256, sha512, 0, 0); + if (ret == 0) + ret = do_level(WC_ML_DSA_65, "65", msg, sha256, sha512, 1, 0); + if (ret == 0) + ret = do_level(WC_ML_DSA_87, "87", msg, sha256, sha512, 0, 1); + + if (ret == 0) + fprintf(out, "\n#endif /* MLDSA_OCTET_KAT_H */\n"); + fclose(out); + if (ret != 0) { + /* Do not leave a truncated header behind for the build to pick up. */ + remove(OUT_NAME); + return 1; + } + return 0; +} From def00ad02d728d76c6cdb00a3d725dbb31abc3bf Mon Sep 17 00:00:00 2001 From: David Garske Date: Tue, 1 Sep 2026 15:12:03 -0700 Subject: [PATCH 4/8] TI C2000 example: init the software AES context, honour ENTROPY_NUM_SRC, report per-window raw entropy --- .../ti-c2000-f28p55x/Header/entropy_probe.h | 30 +++ embedded/ti-c2000-f28p55x/Makefile | 7 + embedded/ti-c2000-f28p55x/README.md | 2 +- .../ti-c2000-f28p55x/Source/entropy_probe.c | 34 +++- embedded/ti-c2000-f28p55x/Source/wolf_main.c | 180 ++++++++++++++---- .../ti-c2000-f28p55x/tools/entropy_analyze.py | 73 +++++-- embedded/ti-c2000-f28p55x/tools/gen_kat.c | 11 +- 7 files changed, 282 insertions(+), 55 deletions(-) create mode 100644 embedded/ti-c2000-f28p55x/Header/entropy_probe.h diff --git a/embedded/ti-c2000-f28p55x/Header/entropy_probe.h b/embedded/ti-c2000-f28p55x/Header/entropy_probe.h new file mode 100644 index 000000000..7eae181b2 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/Header/entropy_probe.h @@ -0,0 +1,30 @@ +/* entropy_probe.h + * + * Copyright (C) 2006-2026 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + + +#ifndef ENTROPY_PROBE_H +#define ENTROPY_PROBE_H + +/* Raw entropy-source characterization image (make ENTROPY_PROBE=1). + * Dumps unconditioned samples over SCI; never returns. */ +void entropy_probe_run(void); + +#endif /* ENTROPY_PROBE_H */ diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index bae261611..e979c6b67 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -310,6 +310,13 @@ endif # can estimate min-entropy. Measurement only - no crypto runs. ENTROPY_PROBE ?= 0 ifeq ($(ENTROPY_PROBE),1) +ifneq ($(SIGN)$(MLDSA)$(BENCH),000) +$(error ENTROPY_PROBE=1 is a standalone measurement image - build it on its own) +endif + # Nothing after entropy_probe_run() executes, so linking wolfcrypt_test and + # benchmark would only bloat the image. + CFLAGS += --define=NO_CRYPT_TEST --define=NO_CRYPT_BENCHMARK + HARNESS_SRCS := CFLAGS += --define=WOLF_ENTROPY_PROBE --define=NO_CRYPT_TEST \ --define=NO_CRYPT_BENCHMARK HARNESS_EXTRA += $(CURDIR)/Source/entropy_probe.c diff --git a/embedded/ti-c2000-f28p55x/README.md b/embedded/ti-c2000-f28p55x/README.md index d768dc485..af6c61319 100644 --- a/embedded/ti-c2000-f28p55x/README.md +++ b/embedded/ti-c2000-f28p55x/README.md @@ -117,7 +117,7 @@ ML-DSA-87 (asymmetric, @150 MHz): verify ~225 ms/op; keygen and signing also run The F28P550SJ has an on-chip AES accelerator ("AESA", a TI EIP-120t at `0x00042000`) that C2000Ware exposes through `driverlib/f28p55x/driverlib/aes.h`. `HWAES=1` offloads AES-ECB/CBC/CTR to it via the wolfCrypt crypto-callback framework (`wolfcrypt/src/port/ti/ti-c2000-aes.c` in the wolfSSL tree, gated on `WOLFSSL_C2000_AES`). `driverlib.lib` is already linked by this example, so no extra build plumbing is needed. -Software AES stays compiled in. A context opts into hardware with `wc_AesInit(&aes, NULL, WOLFSSL_C2000_DEVID)`; one initialised with `INVALID_DEVID` runs pure software. `wolf_aes_hw_test()` uses both and compares them, which is the point: on a 16-bit-byte target the octet marshalling into the accelerator's 32-bit registers is the highest-risk part of the port, and a mismatch is exactly what you want to see. The harness prints 13 lines covering ECB/CBC/CTR at 128/192/256 bits, multi-block, split calls, in-place decrypt and a non-block-aligned CTR split, each checked against software and (for the first block of each mode) against the published NIST SP800-38A vector. +Software AES stays compiled in. A context opts into hardware with `wc_AesInit(&aes, NULL, WOLFSSL_C2000_DEVID)`; one initialised with `INVALID_DEVID` runs pure software. `wolf_aes_hw_test()` uses both and compares them, which is the point: on a 16-bit-byte target the octet marshalling into the accelerator's 32-bit registers is the highest-risk part of the port, and a mismatch is exactly what you want to see. The harness prints 18 lines covering ECB/CBC/CTR at 128/192/256 bits, multi-block, split calls, in-place decrypt and a non-block-aligned CTR split, each checked against software and (for the first block of each mode) against the published NIST SP800-38A vector. `HWAES=1` also defines `WC_USE_DEVID=0x2000` so `wolfcrypt_test` and `benchmark` exercise the device too -- without it they init every context with `INVALID_DEVID` and silently measure software. diff --git a/embedded/ti-c2000-f28p55x/Source/entropy_probe.c b/embedded/ti-c2000-f28p55x/Source/entropy_probe.c index 2554f5389..286ef5f80 100644 --- a/embedded/ti-c2000-f28p55x/Source/entropy_probe.c +++ b/embedded/ti-c2000-f28p55x/Source/entropy_probe.c @@ -48,6 +48,13 @@ /* Counter1 counts down from 0xFFFFF, capping the window near 34,900 INTOSC * cycles at 300 MHz PLL / 10 MHz INTOSC; keep well under that. */ #define PROBE_CNT1_SEED 0xFFFFFUL + +/* A sample taken after a DCC ERROR flag or a guard-loop timeout is not noise, + * it is a misconfigured clock mux or a stalled counter. Count both so a + * capture with any nonzero total can be rejected rather than analysed. */ +static uint32_t probeDccErrors; +static uint32_t probeDccTimeouts; +static uint32_t probeAdcTimeouts; #define PROBE_SAMPLES 1024 /* printf over SCI dominates; keep the ADC set smaller. */ #define PROBE_ADC_SAMPLES 1024 @@ -87,12 +94,19 @@ static uint32_t probe_dccSample(uint32_t base, DCC_Count0ClockSource src0, DCC_enableModule(base); - /* Bounded wait, scaled to the window, so a bad mux cannot hang. */ + /* Bounded wait, scaled to the window, so a bad mux cannot hang. Record + * why we stopped: only a clean done-signal yields a usable sample. */ for (guard = 0; guard < (window * 256UL) + 100000UL; guard++) { if (DCC_getSingleShotStatus(base) || DCC_getErrorStatus(base)) { break; } } + if (DCC_getErrorStatus(base)) { + probeDccErrors++; + } + else if (!DCC_getSingleShotStatus(base)) { + probeDccTimeouts++; + } return (PROBE_CNT1_SEED - (DCC_getCounter1Value(base) & PROBE_CNT1_SEED)); } @@ -140,6 +154,9 @@ static uint16_t probe_adcSample(void) break; } } + if (guard >= 1000000UL) { + probeAdcTimeouts++; + } return ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0); } @@ -191,7 +208,7 @@ static void probe_dumpPackedDcc(const char* tag, uint32_t base, } -static void probe_dumpPackedAdc(uint32_t nbytes) +static void probe_dumpPackedAdc(const char* tag, uint32_t nbytes) { uint32_t i; int b; @@ -199,7 +216,7 @@ static void probe_dumpPackedAdc(uint32_t nbytes) for (i = 0; i < nbytes; i++) { if ((i % 32U) == 0U) { - printf("\r\nE6 0 "); + printf("\r\n%s 0 ", tag); } acc = 0U; for (b = 0; b < 8; b++) { @@ -218,8 +235,10 @@ void entropy_probe_run(void) uint32_t i; printf("\r\n=== ENTROPY PROBE ===\r\n"); - printf("SYSCLK %lu Hz, samples/config %d\r\n", - (unsigned long)DEVICE_SYSCLK_FREQ, (int)PROBE_SAMPLES); + /* %lu, not %d: int is 16 bits here and PROBE_PACKED_BYTES is 32768. */ + printf("SYSCLK %lu Hz, samples/config %lu, packed stream %lu octets\r\n", + (unsigned long)DEVICE_SYSCLK_FREQ, (unsigned long)PROBE_SAMPLES, + (unsigned long)PROBE_PACKED_BYTES); probe_dccInit(); probe_adcInit(); @@ -244,8 +263,11 @@ void entropy_probe_run(void) DCC_COUNT1SRC_PLL, 256UL, PROBE_PACKED_BYTES); probe_dumpPackedDcc("E5", DCC0_BASE, DCC_COUNT0SRC_INTOSC2, DCC_COUNT1SRC_PLL, 256UL, PROBE_PACKED_BYTES); - probe_dumpPackedAdc(PROBE_PACKED_BYTES); + probe_dumpPackedAdc("E6", PROBE_PACKED_BYTES); + printf("\r\nDCC errors %lu, DCC timeouts %lu, ADC timeouts %lu\r\n", + (unsigned long)probeDccErrors, (unsigned long)probeDccTimeouts, + (unsigned long)probeAdcTimeouts); printf("\r\nPROBE DONE\r\n"); } diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index f6f22ed2d..de0b8c3a4 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -60,7 +60,9 @@ #endif #ifdef WOLF_ENTROPY #include -#include +#endif +#ifdef WOLF_ENTROPY_PROBE +#include "entropy_probe.h" #endif #ifdef WOLF_25519 #include @@ -978,7 +980,7 @@ static void wolf_mldsa87_verify_test(void) * signature that arrive PACKED verify once wc_UnpackOctets() expands them. * One key struct is shared - WOLFSSL_MLDSA_VERIFY_NO_MALLOC pins the verify * workspace inside it, far too big for the 16 KW C28x stack. */ -/* Static: an ML-DSA-65 signature is 3309 cells = 6618 octets of C28x RAM. */ +/* Static: an ML-DSA-65 signature is 3309 octets = 3309 cells = 6618 bytes. */ static byte mo_pub[WC_MLDSA_65_PUB_KEY_SIZE]; static byte mo_sig[WC_MLDSA_65_SIG_SIZE]; static wc_MlDsaKey mo_key; @@ -1030,12 +1032,23 @@ static void mo_pack_roundtrip(void) src[i] = (byte)((i * 7 + 1) & 0xFF); } ret = wc_PackOctets(packed, (word32)sizeof(packed), src, - (word32)sizeof(src)); + (word32)sizeof(src), (word32)sizeof(src)); if (ret == 0) { ret = wc_UnpackOctets(back, (word32)sizeof(back), packed, - (word32)sizeof(src)); + (word32)sizeof(packed), (word32)sizeof(src)); } + /* Round-trip alone would also pass for an identity implementation, so + * check the packed layout itself: cell 0 must carry the first + * WC_OCTETS_PER_BYTE octets, low octet first. */ ok = (ret == 0) && (XMEMCMP(src, back, sizeof(src)) == 0); + if (ok) { + word32 expect = 0; + word32 e; + for (e = 0; e < WC_OCTETS_PER_BYTE; e++) { + expect |= (word32)src[e] << (8 * e); + } + ok = ((word32)packed[0] == expect); + } printf("wc_Pack/UnpackOctets round-trip: %s (ret=%d)\r\n", ok ? "PASS" : "FAIL", ret); } @@ -1047,10 +1060,16 @@ static void mo_packed_verify(void) int ret; ret = wc_UnpackOctets(mo_pub, (word32)sizeof(mo_pub), - (const byte*)kat_mldsa65_pub_packed, (word32)sizeof(mo_pub)); + (const byte*)kat_mldsa65_pub_packed, + (word32)(sizeof(kat_mldsa65_pub_packed) / + sizeof(kat_mldsa65_pub_packed[0])), + (word32)sizeof(mo_pub)); if (ret == 0) { ret = wc_UnpackOctets(mo_sig, (word32)sizeof(mo_sig), - (const byte*)kat_mldsa65_sig_packed, (word32)sizeof(mo_sig)); + (const byte*)kat_mldsa65_sig_packed, + (word32)(sizeof(kat_mldsa65_sig_packed) / + sizeof(kat_mldsa65_sig_packed[0])), + (word32)sizeof(mo_sig)); } /* Expanded buffers must match the plain arrays octet for octet. */ if (ret == 0) { @@ -1098,8 +1117,9 @@ static void wolf_mldsa_octet_test(void) return; } - printf("octet model: CHAR_BIT=%d, %lu octet(s) per byte cell; " - "ML-DSA-65 sig = %lu octets = %lu cells = %lu bytes of RAM\r\n", + printf("octet model: CHAR_BIT=%d, one octet per byte cell, %lu octet(s) " + "per cell when packed; ML-DSA-65 sig = %lu octets = %lu cells = " + "%lu bytes of RAM\r\n", (int)CHAR_BIT, (unsigned long)WC_OCTETS_PER_BYTE, (unsigned long)WC_MLDSA_65_SIG_SIZE, (unsigned long)WC_MLDSA_65_SIG_SIZE, @@ -1134,6 +1154,36 @@ static void wolf_mldsa_octet_test(void) kat_mldsa87_sig_ph512, (word32)sizeof(kat_mldsa87_sig_ph512), WC_HASH_TYPE_SHA512, sha512, (word32)sizeof(sha512)); + /* Negative case: every check above is positive, so a verify that returned + * success unconditionally - or a w1 encoder that collapsed distinct + * commitments - would pass them all. Flip one octet of the level-44 + * signature and require a clean rejection. */ + { + static byte bad[WC_MLDSA_44_SIG_SIZE]; + int bres = 1; + int bret; + + XMEMCPY(bad, kat_mldsa44_sig, sizeof(bad)); + bad[sizeof(bad) / 2] ^= 0x01; + + bret = wc_MlDsaKey_Init(&mo_key, NULL, INVALID_DEVID); + if (bret == 0) { + bret = wc_MlDsaKey_SetParams(&mo_key, WC_ML_DSA_44); + } + if (bret == 0) { + bret = wc_MlDsaKey_ImportPubRaw(&mo_key, kat_mldsa44_pub, + (word32)sizeof(kat_mldsa44_pub)); + } + if (bret == 0) { + bret = wc_MlDsaKey_VerifyCtx(&mo_key, bad, (word32)sizeof(bad), + NULL, 0, mo_msg, (word32)sizeof(mo_msg), &bres); + } + /* A corrupt signature must be rejected, not error out. */ + printf("ML-DSA-44 corrupted-signature reject: %s (ret=%d res=%d)\r\n", + ((bret == 0) && (bres == 0)) ? "PASS" : "FAIL", bret, bres); + wc_MlDsaKey_Free(&mo_key); + } + mo_packed_verify(); } #endif /* WOLF_MLDSA_OCTETS */ @@ -1305,9 +1355,18 @@ static void wolf_entropy_test(void) printf("Entropy liveness self-test (raw): %s (ret=%d)\r\n", (ret == 0) ? "PASS" : "FAIL", ret); - /* Raw noise sanity per source: population count should sit near half. */ - for (src = 0; src < 2; src++) { + /* Raw noise sanity per source: population count should sit near half. + * Source 1 is optional - a build that needs DCC0 elsewhere sets + * WOLFSSL_C2000_ENTROPY_NUM_SRC to 1. */ + for (src = 0; src < WOLFSSL_C2000_ENTROPY_NUM_SRC; src++) { ret = wc_c2000_Entropy_GetRaw(raw, (word32)sizeof(raw), src); + if (ret != 0) { + /* raw[] holds stale data on failure, so counting it would report a + * meaningless balance. Report the read error instead. */ + printf("Entropy raw src%d bit balance: FAIL (read error %d)\r\n", + src, ret); + continue; + } ones = 0; for (i = 0; i < (word32)sizeof(raw); i++) { for (b = 0; b < 8; b++) { @@ -1319,7 +1378,7 @@ static void wolf_entropy_test(void) /* 2048 bits; accept 40%..60% ones, i.e. counts 820..1228. */ printf("Entropy raw src%d bit balance: %s (%lu/2048 ones)\r\n", src, - (ret == 0 && ones > 819UL && ones < 1229UL) ? "PASS" : "FAIL", + (ones > 819UL && ones < 1229UL) ? "PASS" : "FAIL", (unsigned long)ones); } @@ -1378,6 +1437,17 @@ static void wolf_aes_test(void) static byte o[16], o2[16], tag[16]; int r; + /* Must be initialised, and explicitly with INVALID_DEVID: a static Aes + * zero-fills devId to 0, which is a valid device id, so with WOLF_CRYPTO_CB + * built in (HWAES=1) every aes.c hook would attempt callback dispatch + * instead of skipping. This is the software reference for the HW-vs-SW + * cross-checks, so it must stay unambiguously software. */ + r = wc_AesInit(&aes, NULL, INVALID_DEVID); + if (r != 0) { + printf("AES software test: FAIL (init ret=%d)\r\n", r); + return; + } + /* CBC */ r = wc_AesSetKey(&aes, k, 16, iv, AES_ENCRYPTION); if (r == 0) r = wc_AesCbcEncrypt(&aes, o, pt, 16); @@ -1432,11 +1502,17 @@ static void wolf_aes_test(void) * NIST SP800-38A vectors are asserted where we have them; multi-block, * split-call and in-place cases are checked hardware-against-software, since * software AES is already covered by wolfcrypt_test. */ +/* Set only when the AESA device actually registered. Without it the 'hw' + * context silently falls back to software and every cross-check would compare + * software against software and report PASS. */ +static int g_aesaReady = 0; + static void hw_report(const char* name, int r, const byte* a, const byte* b, word32 len) { - printf("HW %s: %s\r\n", name, - (r == 0 && XMEMCMP(a, b, len) == 0) ? "PASS" : "FAIL"); + int cmp = XMEMCMP(a, b, len); + printf("HW %s: %s (ret=%d cmp=%d)\r\n", name, + (r == 0 && cmp == 0) ? "PASS" : "FAIL", r, cmp); } static void wolf_aes_hw_test(void) @@ -1494,9 +1570,20 @@ static void wolf_aes_hw_test(void) static byte oh[64], os[64], dh[64]; int rh, rs; - if (wc_AesInit(&hw, NULL, WOLFSSL_C2000_DEVID) != 0 || - wc_AesInit(&sw, NULL, INVALID_DEVID) != 0) { - printf("HW AES init: FAIL\r\n"); + if (!g_aesaReady) { + printf("HW AES cross-checks: SKIP (AESA not registered)\r\n"); + return; + } + + rh = wc_AesInit(&hw, NULL, WOLFSSL_C2000_DEVID); + if (rh != 0) { + printf("HW AES init (hw ctx): FAIL (ret=%d)\r\n", rh); + return; + } + rs = wc_AesInit(&sw, NULL, INVALID_DEVID); + if (rs != 0) { + printf("HW AES init (sw ctx): FAIL (ret=%d)\r\n", rs); + wc_AesFree(&hw); return; } @@ -1506,7 +1593,7 @@ static void wolf_aes_hw_test(void) if (rh == 0) rh = wc_AesEcbEncrypt(&hw, oh, pt, 64); if (rs == 0) rs = wc_AesEcbEncrypt(&sw, os, pt, 64); hw_report("AES-128-ECB encrypt vs NIST", rh, oh, ecb_ct1, 16); - hw_report("AES-128-ECB encrypt vs SW", (rh | rs), oh, os, 64); + hw_report("AES-128-ECB encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); rh = wc_AesSetKey(&hw, k128, 16, NULL, AES_DECRYPTION); if (rh == 0) rh = wc_AesEcbDecrypt(&hw, dh, oh, 64); @@ -1518,7 +1605,7 @@ static void wolf_aes_hw_test(void) if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); hw_report("AES-128-CBC encrypt vs NIST", rh, oh, cbc_ct1, 16); - hw_report("AES-128-CBC encrypt vs SW", (rh | rs), oh, os, 64); + hw_report("AES-128-CBC encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); rh = wc_AesSetKey(&hw, k128, 16, iv, AES_DECRYPTION); if (rh == 0) rh = wc_AesCbcDecrypt(&hw, dh, oh, 64); @@ -1528,7 +1615,7 @@ static void wolf_aes_hw_test(void) rh = wc_AesSetKey(&hw, k128, 16, iv, AES_ENCRYPTION); if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 16); if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh + 16, pt + 16, 48); - hw_report("AES-128-CBC split-call chain", (rh | rs), oh, os, 64); + hw_report("AES-128-CBC split-call chain", rh, oh, os, 64); /* ---- CBC in-place decrypt: proves the last-block save ---- */ XMEMCPY(dh, os, 64); @@ -1543,26 +1630,53 @@ static void wolf_aes_hw_test(void) if (rs == 0) rs = wc_AesCtrEncrypt(&sw, os, pt, 64); hw_report("AES-128-CTR vs NIST (64B)", rh, oh, ctr_ct, 64); hw_report("AES-128-CTR SW vs NIST (64B)", rs, os, ctr_ct, 64); - hw_report("AES-128-CTR vs SW", (rh | rs), oh, os, 64); + hw_report("AES-128-CTR vs SW", ((rh != 0) ? rh : rs), oh, os, 64); /* ---- CTR split at a non-block boundary: proves aes->left/aes->tmp ---- */ rh = wc_AesSetKey(&hw, k128, 16, ctr_iv, AES_ENCRYPTION); if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh, pt, 10); if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh + 10, pt + 10, 54); - hw_report("AES-128-CTR partial split", (rh | rs), oh, os, 64); + hw_report("AES-128-CTR partial split", rh, oh, os, 64); /* ---- 192- and 256-bit keys: the 6- and 8-word AES_setKey1 paths ---- */ rh = wc_AesSetKey(&hw, k192, 24, iv, AES_ENCRYPTION); rs = wc_AesSetKey(&sw, k192, 24, iv, AES_ENCRYPTION); if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); - hw_report("AES-192-CBC encrypt vs SW", (rh | rs), oh, os, 64); + hw_report("AES-192-CBC encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); rh = wc_AesSetKey(&hw, k256, 32, iv, AES_ENCRYPTION); rs = wc_AesSetKey(&sw, k256, 32, iv, AES_ENCRYPTION); if (rh == 0) rh = wc_AesCbcEncrypt(&hw, oh, pt, 64); if (rs == 0) rs = wc_AesCbcEncrypt(&sw, os, pt, 64); - hw_report("AES-256-CBC encrypt vs SW", (rh | rs), oh, os, 64); + hw_report("AES-256-CBC encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); + + /* ECB and CTR at 192/256 too: the accelerator's key schedule differs per + * key size, and marshalling the longer schedule into its 32-bit registers + * is exactly the octet handling this port is validating. */ + rh = wc_AesSetKey(&hw, k192, 24, NULL, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k192, 24, NULL, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesEcbEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesEcbEncrypt(&sw, os, pt, 64); + hw_report("AES-192-ECB encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k256, 32, NULL, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k256, 32, NULL, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesEcbEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesEcbEncrypt(&sw, os, pt, 64); + hw_report("AES-256-ECB encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k192, 24, ctr_iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k192, 24, ctr_iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCtrEncrypt(&sw, os, pt, 64); + hw_report("AES-192-CTR encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); + + rh = wc_AesSetKey(&hw, k256, 32, ctr_iv, AES_ENCRYPTION); + rs = wc_AesSetKey(&sw, k256, 32, ctr_iv, AES_ENCRYPTION); + if (rh == 0) rh = wc_AesCtrEncrypt(&hw, oh, pt, 64); + if (rs == 0) rs = wc_AesCtrEncrypt(&sw, os, pt, 64); + hw_report("AES-256-CTR encrypt vs SW", ((rh != 0) ? rh : rs), oh, os, 64); wc_AesFree(&hw); wc_AesFree(&sw); @@ -1964,12 +2078,13 @@ static void wolf_aes_modes_test(void) #ifdef WOLFSSL_AES_OFB { static Aes oaes; - r = wc_AesSetKey(&oaes, mk, 16, miv, AES_ENCRYPTION); + r = wc_AesInit(&oaes, NULL, INVALID_DEVID); + if (r == 0) r = wc_AesSetKey(&oaes, mk, 16, miv, AES_ENCRYPTION); if (r == 0) r = wc_AesOfbEncrypt(&oaes, mct, mpt, 32); if (r == 0) r = wc_AesSetKey(&oaes, mk, 16, miv, AES_ENCRYPTION); if (r == 0) r = wc_AesOfbDecrypt(&oaes, mdec, mct, 32); - printf("AES-128-OFB round-trip: %s\r\n", - (r == 0 && XMEMCMP(mdec, mpt, 32) == 0) ? "PASS":"FAIL"); + printf("AES-128-OFB round-trip: %s (ret=%d)\r\n", + (r == 0 && XMEMCMP(mdec, mpt, 32) == 0) ? "PASS":"FAIL", r); wc_AesFree(&oaes); } #endif @@ -2147,12 +2262,12 @@ int main(void) printf("=== wolfSSL wolfCrypt on TI C2000 LAUNCHXL-F28P55X ===\r\n"); #ifdef WOLF_ENTROPY_PROBE - /* Measurement-only image: dump raw entropy samples and stop. */ - { - extern void entropy_probe_run(void); - entropy_probe_run(); - } - while (1) { + /* Measurement-only image: dump raw entropy samples and stop. Nothing + * after this runs, which is why the Makefile rejects combining + * ENTROPY_PROBE=1 with the other image toggles. */ + entropy_probe_run(); + for (;;) { + /* spin */ } #endif @@ -2173,6 +2288,7 @@ int main(void) } else { printf("C2000 AESA init: PASS\r\n"); + g_aesaReady = 1; } #endif diff --git a/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py b/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py index 65493aa39..c113c13cb 100755 --- a/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py +++ b/embedded/ti-c2000-f28p55x/tools/entropy_analyze.py @@ -30,7 +30,6 @@ Usage: python3 tools/entropy_analyze.py capture.log python3 tools/entropy_analyze.py --selftest - tail -f /tmp/uart-monitor/latest/ttyACMx.log | python3 tools/entropy_analyze.py - """ import math @@ -56,15 +55,22 @@ )) BANNER = "=== ENTROPY PROBE ===" +# The probe reports how many samples were taken after a DCC ERROR flag or a +# guard-loop timeout. Any nonzero count means the capture is not pure noise. +HEALTH_RE = re.compile(r"DCC errors (\d+), DCC timeouts (\d+), " + r"ADC timeouts (\d+)") DONE = "PROBE DONE" MAX_LAG = 64 +# Below this the MCV bound is too wide to be worth reporting. +MIN_PACKED_OCTETS = 256 Z_99 = 2.5758293035489004 # two-sided 99% normal quantile def first_pass(text): - """The board loops main(), so the probe output repeats. Return just the - first complete pass, so a long capture does not silently concatenate - several runs into one sample set.""" + """Return just the first complete probe pass. The probe image runs once + and then spins, so a normal capture holds one pass - but a capture that + spans a reset or a re-flash would otherwise concatenate several runs into + one sample set.""" start = text.find(BANNER) if start < 0: return text @@ -77,21 +83,41 @@ def first_pass(text): def parse(text): - """tag -> list of ints, in emission order.""" + """Returns (out, per_window). + + out tag -> list of ints, in emission order (all windows merged). + per_window tag -> {window: [ints]}. + + The raw DCC tags are emitted once per sweep window (256/1024/4096), and a + count scales with the window, so merging them would mix populations of + different magnitude. The packed streams the min-entropy estimate uses are + emitted once, at a single window, so out[] is correct for those.""" out = {} + per_window = {} # A console line is " ...". Match per line, and # never across a newline: the tags and window counts are themselves valid # hex, so a multi-line match would swallow the next line's header as data. # Tolerate any timestamp or prefix a log wrapper put ahead of the tag. line_re = re.compile(r"\b(E[0-9])[^\S\n]+(\d+)[^\S\n]+" r"((?:[0-9a-fA-F]+[^\S\n]*)+)$") + skipped = 0 for line in text.splitlines(): - m = line_re.search(line.rstrip()) + line = line.rstrip() + m = line_re.search(line) if m is None: + # A line that starts with a probe tag but does not parse means a + # corrupted capture, not unrelated console output - say so. + if re.match(r"\s*E[0-9]\b", line): + skipped += 1 continue - out.setdefault(m.group(1), []).extend( - int(t, 16) for t in m.group(3).split()) - return out + vals = [int(t, 16) for t in m.group(3).split()] + out.setdefault(m.group(1), []).extend(vals) + per_window.setdefault(m.group(1), {}).setdefault( + int(m.group(2)), []).extend(vals) + if skipped: + sys.stderr.write("warning: %d probe line(s) did not parse - capture may " + "be corrupted or truncated\n" % skipped) + return out, per_window def unpack_bits(octets): @@ -266,7 +292,16 @@ def main(): with open(path, errors="replace") as f: text = f.read() - data = parse(first_pass(text)) + health = HEALTH_RE.search(text) + if health is None: + sys.stderr.write("warning: no probe health line - old probe image, or " + "the capture is truncated\n") + elif any(int(g) for g in health.groups()): + sys.exit("probe reported %s DCC errors, %s DCC timeouts, %s ADC " + "timeouts - these samples are not noise, reject the capture" + % health.groups()) + + data, per_window = parse(first_pass(text)) if not data: sys.exit("no probe tags found - is this an ENTROPY_PROBE=1 capture?") @@ -276,6 +311,10 @@ def main(): if not octets: sys.stderr.write("warning: no %s samples (%s)\n" % (tag, label)) continue + if len(octets) < MIN_PACKED_OCTETS: + sys.stderr.write("warning: %s has only %d octets (< %d) - the " + "min-entropy estimate will be unreliable\n" + % (tag, len(octets), MIN_PACKED_OCTETS)) bad = [v for v in octets if v > 0xFF] if bad: sys.exit("%s: %d values exceed one octet - capture is corrupt" @@ -283,11 +322,15 @@ def main(): rows.append(report(tag, label, octets)) for tag, label in RAW.items(): - vals = data.get(tag) - if vals: - a = np.asarray(vals, dtype=np.int64) - print("%s %s: %d samples, min %d max %d mean %.1f, " - "%d distinct" % (tag, label, len(a), a.min(), a.max(), + wins = per_window.get(tag) + if not wins: + continue + # Per window: a raw count scales with the window, so pooling them + # would report a spread that is an artifact of the sweep. + for win in sorted(wins): + a = np.asarray(wins[win], dtype=np.int64) + print("%s %s [window %d]: %d samples, min %d max %d mean %.1f, " + "%d distinct" % (tag, label, win, len(a), a.min(), a.max(), a.mean(), len(np.unique(a)))) print() diff --git a/embedded/ti-c2000-f28p55x/tools/gen_kat.c b/embedded/ti-c2000-f28p55x/tools/gen_kat.c index 868a6a943..993d80099 100644 --- a/embedded/ti-c2000-f28p55x/tools/gen_kat.c +++ b/embedded/ti-c2000-f28p55x/tools/gen_kat.c @@ -32,7 +32,6 @@ #include #include #include -#include #define MSG_SZ 512 #define OUT_NAME "mldsa_octet_kat.h" @@ -167,17 +166,25 @@ int main(void) for (i = 0; i < MSG_SZ; i++) msg[i] = (byte)(i & 0xFF); + ret = wolfCrypt_Init(); + if (ret != 0) { + fprintf(stderr, "wolfCrypt_Init failed: %d\n", ret); + return 1; + } + ret = wc_Sha256Hash(msg, MSG_SZ, sha256); if (ret == 0) ret = wc_Sha512Hash(msg, MSG_SZ, sha512); if (ret != 0) { fprintf(stderr, "hash failed: %d\n", ret); + wolfCrypt_Cleanup(); return 1; } out = fopen(OUT_NAME, "w"); if (out == NULL) { fprintf(stderr, "cannot open output\n"); + wolfCrypt_Cleanup(); return 1; } @@ -205,7 +212,9 @@ int main(void) if (ret != 0) { /* Do not leave a truncated header behind for the build to pick up. */ remove(OUT_NAME); + wolfCrypt_Cleanup(); return 1; } + wolfCrypt_Cleanup(); return 0; } From 1238312e9cdf11c3e293617d10bab0d73041fcb4 Mon Sep 17 00:00:00 2001 From: David Garske Date: Wed, 2 Sep 2026 08:53:17 -0700 Subject: [PATCH 5/8] TI C2000 example: add FASTVERIFY=1 to trade RAM for ML-DSA verify speed --- embedded/ti-c2000-f28p55x/Header/user_settings.h | 10 ++++++++++ embedded/ti-c2000-f28p55x/Makefile | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/embedded/ti-c2000-f28p55x/Header/user_settings.h b/embedded/ti-c2000-f28p55x/Header/user_settings.h index 06aa65e12..d762ab622 100644 --- a/embedded/ti-c2000-f28p55x/Header/user_settings.h +++ b/embedded/ti-c2000-f28p55x/Header/user_settings.h @@ -204,7 +204,17 @@ extern "C" { * time instead of pinning the whole l-vector (saves ~6 KB on ML-DSA-87). * Measured on F28P55x: sizeof(wc_MlDsaKey) 20,048 -> 13,904 bytes. */ #undef WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM +#ifndef WOLF_MLDSA_FAST_VERIFY +/* Smallest RAM: streams the signature's z vector one polynomial at a time, so + * each z is re-decoded and re-NTT'd k times instead of once. FASTVERIFY=1 + * trades that RAM back for speed. */ #define WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM +#else +/* Keep the whole z vector (+~6 KB RAM) and accumulate A.z in a 64-bit poly so + * one Montgomery reduction is done per coefficient instead of per (k,l) pair. */ +#undef WOLFSSL_MLDSA_SMALL_MEM_POLY64 +#define WOLFSSL_MLDSA_SMALL_MEM_POLY64 +#endif /* Optional on this part: also define WOLFSSL_MLDSA_ASSIGN_KEY to keep the * public key in flash (by reference) instead of copying it into the key * struct - that removes a further ~5 KB of RAM (the 2,592-octet public key is diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index e979c6b67..cfa22917c 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -115,6 +115,13 @@ endif # wc_MlDsaKey_VerifyCtxHash() over SHA-256/SHA-512, and a verify from a PACKED # key and signature via wc_UnpackOctets(). All three parameter sets are # compiled in, so the test/benchmark harness is dropped to make room. +# FASTVERIFY=1 trades RAM for ML-DSA verify speed: keeps the full z vector +# (drops WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM) and enables the 64-bit accumulator. +FASTVERIFY ?= 0 +ifeq ($(FASTVERIFY),1) + CFLAGS += --define=WOLF_MLDSA_FAST_VERIFY +endif + MLDSA ?= 0 ifeq ($(MLDSA),1) CFLAGS += --define=WOLF_MLDSA_ALL_LEVELS From fd1f21685912261c70dc91361af576bc3cf009fa Mon Sep 17 00:00:00 2001 From: David Garske Date: Wed, 2 Sep 2026 09:42:51 -0700 Subject: [PATCH 6/8] TI C2000 example: SECUREBOOT=1 pure-mode ML-DSA verify of a packed image streamed from flash --- .../ti-c2000-f28p55x/Header/mldsa_octet_kat.h | 1123 +++++++++++++++++ embedded/ti-c2000-f28p55x/Makefile | 12 + embedded/ti-c2000-f28p55x/README.md | 14 +- embedded/ti-c2000-f28p55x/Source/wolf_main.c | 121 +- embedded/ti-c2000-f28p55x/tools/gen_kat.c | 53 +- 5 files changed, 1319 insertions(+), 4 deletions(-) diff --git a/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h b/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h index 44914fd79..4a17b155a 100644 --- a/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h +++ b/embedded/ti-c2000-f28p55x/Header/mldsa_octet_kat.h @@ -10,6 +10,1129 @@ #define KAT_MLDSA_CTX "wolfSSL-C28x" + +#define SB_IMG_SZ 8192 + +static const unsigned char sb_mldsa87_pub[] = { + 0x97, 0x92, 0xbc, 0xec, 0x2f, 0x24, 0x30, 0x68, 0x6a, 0x82, 0xfc, 0xcf, + 0x3c, 0x2f, 0x5f, 0xf6, 0x65, 0xe7, 0x71, 0xd7, 0xab, 0x41, 0xb9, 0x02, + 0x58, 0xcf, 0xa7, 0xe9, 0x0e, 0xc9, 0x71, 0x24, 0xa7, 0x3b, 0x32, 0x3b, + 0x9b, 0xa2, 0x1a, 0xb6, 0x4d, 0x76, 0x7c, 0x43, 0x3f, 0x5a, 0x52, 0x1e, + 0xff, 0xe1, 0x8f, 0x86, 0xe4, 0x6a, 0x18, 0x89, 0x52, 0xc4, 0x46, 0x7e, + 0x04, 0x8b, 0x72, 0x9e, 0x7f, 0xc4, 0xd1, 0x15, 0xe7, 0xe4, 0x8d, 0xa1, + 0x89, 0x6d, 0x5f, 0xe1, 0x19, 0xb1, 0x0d, 0xcd, 0xde, 0xf6, 0x2c, 0xb3, + 0x07, 0x95, 0x40, 0x74, 0xb4, 0x23, 0x36, 0xe5, 0x28, 0x36, 0xde, 0x61, + 0xda, 0x94, 0x1f, 0x8d, 0x37, 0xea, 0x68, 0xac, 0x81, 0x06, 0xfa, 0xbe, + 0x19, 0x07, 0x06, 0x79, 0xaf, 0x60, 0x08, 0x53, 0x71, 0x20, 0xf7, 0x07, + 0x93, 0xb8, 0xea, 0x9c, 0xc0, 0xe6, 0xe7, 0xb7, 0xb4, 0xc9, 0xa5, 0xc7, + 0x42, 0x1c, 0x60, 0xf2, 0x44, 0x51, 0xba, 0x1e, 0x93, 0x3d, 0xb1, 0xa2, + 0xee, 0x16, 0xc7, 0x95, 0x59, 0xf2, 0x1b, 0x3d, 0x1b, 0x83, 0x05, 0x85, + 0x0a, 0xa4, 0x2a, 0xfb, 0xb1, 0x3f, 0x1f, 0x4d, 0x5b, 0x9f, 0x48, 0x35, + 0xf9, 0xd8, 0x7d, 0xfc, 0xeb, 0x16, 0x2d, 0x0e, 0xf4, 0xa7, 0xfd, 0xc4, + 0xcb, 0xa1, 0x74, 0x3c, 0xd1, 0xc8, 0x7b, 0xb4, 0x96, 0x7d, 0xa1, 0x6c, + 0xc8, 0x76, 0x4b, 0x65, 0x69, 0xdf, 0x8e, 0xe5, 0xbd, 0xcb, 0xff, 0xe9, + 0xa4, 0xe0, 0x57, 0x48, 0xe6, 0xfd, 0xf2, 0x25, 0xaf, 0x9e, 0x4e, 0xeb, + 0x77, 0x73, 0xb6, 0x2e, 0x8f, 0x85, 0xf9, 0xb5, 0x6b, 0x54, 0x89, 0x45, + 0x55, 0x18, 0x44, 0xfb, 0xd8, 0x98, 0x06, 0xa4, 0xac, 0x36, 0x9b, 0xed, + 0x2d, 0x25, 0x61, 0x00, 0xf6, 0x88, 0xa6, 0xad, 0x5e, 0x0a, 0x70, 0x98, + 0x26, 0xdc, 0x44, 0x49, 0xe9, 0x1e, 0x23, 0xc5, 0x50, 0x6e, 0x64, 0x23, + 0x61, 0xef, 0x5a, 0x31, 0x37, 0x12, 0xf7, 0x9b, 0xc4, 0xb3, 0x18, 0x68, + 0x61, 0xca, 0x85, 0xa4, 0xba, 0xb1, 0x7e, 0x7f, 0x94, 0x3d, 0x1b, 0x8a, + 0x33, 0x3a, 0xa3, 0xae, 0x7c, 0xe1, 0x6b, 0x44, 0x0d, 0x60, 0x18, 0xf9, + 0xe0, 0x4d, 0xaf, 0x57, 0x25, 0xc7, 0xf1, 0xa9, 0x3f, 0xad, 0x1a, 0x5a, + 0x27, 0xb6, 0x78, 0x95, 0xbd, 0x24, 0x9a, 0xa9, 0x16, 0x85, 0xde, 0x20, + 0xaf, 0x32, 0xc8, 0xb7, 0xe2, 0x68, 0xc7, 0xf9, 0x68, 0x77, 0xd0, 0xc8, + 0x50, 0x01, 0x13, 0x5a, 0x4f, 0x0a, 0x8f, 0x1b, 0x82, 0x64, 0xfa, 0x6e, + 0xbe, 0x5a, 0x34, 0x9d, 0x8a, 0xec, 0xad, 0x1a, 0x16, 0x29, 0x9c, 0xcf, + 0x2f, 0xd9, 0xc7, 0xb8, 0x5b, 0xac, 0xe2, 0xce, 0xd3, 0xaa, 0x12, 0x76, + 0xba, 0x61, 0xee, 0x78, 0xed, 0x7e, 0x5c, 0xa5, 0xb6, 0x7c, 0xdd, 0x45, + 0x8a, 0x93, 0x54, 0x03, 0x0e, 0x6a, 0xbb, 0xba, 0xbf, 0x56, 0xa0, 0xa2, + 0x31, 0x6f, 0xec, 0x9d, 0xba, 0x83, 0xb5, 0x1d, 0x42, 0xfd, 0x31, 0x67, + 0xf1, 0xe0, 0xf9, 0x08, 0x55, 0xd5, 0xc6, 0x65, 0x09, 0xb2, 0x10, 0x26, + 0x5d, 0xc1, 0xe5, 0x4e, 0xc4, 0x4b, 0x43, 0xba, 0x7c, 0xf9, 0xae, 0xf1, + 0x18, 0xb4, 0x4d, 0x80, 0x91, 0x2c, 0xe7, 0x51, 0x66, 0xa6, 0x65, 0x1e, + 0x11, 0x6c, 0xeb, 0xe4, 0x92, 0x29, 0xa7, 0x06, 0x2c, 0x09, 0x93, 0x1f, + 0x71, 0xab, 0xd2, 0x29, 0x3f, 0x76, 0xf7, 0xef, 0xc3, 0x21, 0x5b, 0xa9, + 0x78, 0x00, 0x03, 0x7e, 0x58, 0xe4, 0x70, 0xbd, 0xbb, 0xb4, 0x3c, 0x1b, + 0x04, 0x39, 0xea, 0xf7, 0x9c, 0x54, 0xd9, 0x3b, 0x44, 0xaa, 0xc9, 0xef, + 0xe9, 0xfb, 0xe1, 0x51, 0x87, 0x4c, 0xfb, 0x2a, 0x64, 0xcb, 0xee, 0x28, + 0xcc, 0x4c, 0x0f, 0xe7, 0x77, 0x5e, 0x5d, 0x87, 0x0f, 0x1c, 0x02, 0xe5, + 0xb2, 0xe3, 0xc5, 0x00, 0x4c, 0x99, 0x5f, 0x24, 0xc9, 0xb7, 0x79, 0xcb, + 0x75, 0x3a, 0x27, 0x7d, 0x0e, 0x71, 0xfd, 0x42, 0x5e, 0xb6, 0xbc, 0x2c, + 0xa5, 0x6c, 0xe1, 0x29, 0xdb, 0x51, 0xf7, 0x07, 0x40, 0xf3, 0x1e, 0x63, + 0x97, 0x6b, 0x50, 0xc7, 0x31, 0x2e, 0x97, 0x97, 0xd7, 0x8c, 0x5b, 0x1a, + 0xc2, 0x4a, 0x5f, 0xa3, 0x47, 0xcc, 0x91, 0x6e, 0x0a, 0x83, 0xf5, 0xc3, + 0xb6, 0x75, 0xcd, 0x30, 0xb8, 0x1e, 0x3f, 0xa1, 0x0b, 0x93, 0x44, 0x4e, + 0x07, 0x39, 0x75, 0x71, 0xcc, 0xe9, 0x8b, 0x28, 0xda, 0x51, 0xdb, 0x90, + 0x56, 0xbc, 0x72, 0x8c, 0x5b, 0x0b, 0x11, 0x81, 0xe2, 0xfb, 0xd3, 0x87, + 0xb4, 0xc7, 0x9a, 0xb1, 0xa5, 0xfe, 0xfe, 0xce, 0x37, 0x16, 0x7a, 0xf7, + 0x72, 0xdd, 0xad, 0x14, 0xeb, 0x4c, 0x39, 0x82, 0xda, 0x5a, 0x59, 0xd0, + 0xe9, 0xeb, 0x17, 0x3e, 0xc6, 0x31, 0x50, 0x91, 0x17, 0x00, 0x27, 0xa3, + 0xab, 0x5e, 0xf6, 0xaa, 0x12, 0x9c, 0xb8, 0x58, 0x57, 0x27, 0xb9, 0x35, + 0x8a, 0x28, 0x50, 0x1d, 0x71, 0x3a, 0x72, 0xf3, 0xf1, 0xdb, 0x31, 0x71, + 0x42, 0x86, 0xf9, 0xb6, 0x40, 0x80, 0x13, 0xaf, 0x06, 0x04, 0x5d, 0x75, + 0x59, 0x2f, 0xc0, 0xb7, 0xdd, 0x47, 0xc7, 0x3e, 0xd9, 0xc7, 0x5b, 0x11, + 0xe9, 0xd7, 0xc6, 0x9f, 0x7c, 0xad, 0xfc, 0x32, 0x80, 0xa9, 0x06, 0x2c, + 0x52, 0x73, 0xc4, 0x3b, 0xe1, 0xc3, 0x4f, 0x87, 0x44, 0x88, 0x64, 0xce, + 0xa7, 0xb5, 0xc9, 0x7d, 0x6d, 0x32, 0xf5, 0x9b, 0xd5, 0xf2, 0x53, 0x84, + 0x65, 0x3b, 0xb5, 0xc4, 0xfa, 0xa4, 0x5b, 0xea, 0x8b, 0x89, 0x40, 0x28, + 0x43, 0xe6, 0x45, 0xb6, 0xb9, 0x26, 0x9e, 0x2b, 0xd9, 0x88, 0xdd, 0xac, + 0xb0, 0x33, 0x32, 0x8f, 0xfb, 0x06, 0x04, 0x50, 0xf7, 0xdf, 0x08, 0x00, + 0x53, 0xe6, 0x96, 0x9b, 0x25, 0x1e, 0x87, 0x5e, 0xce, 0xc3, 0x2c, 0xfc, + 0x59, 0x28, 0x40, 0xd6, 0x9a, 0xb6, 0x9a, 0x75, 0xe0, 0x6b, 0x37, 0x9c, + 0x53, 0x5d, 0x95, 0x26, 0x6b, 0x08, 0x2f, 0x4f, 0x09, 0xc9, 0x31, 0x62, + 0xb3, 0x3b, 0x0d, 0x9f, 0x73, 0x07, 0xa4, 0xea, 0xaa, 0x52, 0x10, 0x44, + 0x37, 0xfe, 0xd6, 0x6f, 0x8e, 0xe3, 0xea, 0xbb, 0xd4, 0x5d, 0x67, 0xb2, + 0x5a, 0x81, 0x33, 0xf4, 0x96, 0x46, 0x8b, 0x52, 0xba, 0xff, 0xdb, 0xfa, + 0xd9, 0x3e, 0xef, 0x1a, 0x98, 0x18, 0xb5, 0xe4, 0x2e, 0xc7, 0x22, 0x78, + 0x8a, 0x3d, 0x8d, 0x35, 0x29, 0xfc, 0x77, 0x7d, 0x2b, 0xa5, 0x70, 0x80, + 0x1d, 0xfa, 0xe0, 0x1e, 0xc8, 0x83, 0x02, 0x83, 0x7c, 0x1f, 0xb9, 0xe0, + 0x35, 0x57, 0x27, 0x64, 0x5e, 0xe1, 0x04, 0x6c, 0x3f, 0x91, 0x5f, 0x6a, + 0xe8, 0x2d, 0xad, 0x4f, 0xb6, 0xb0, 0x35, 0x6a, 0x46, 0x51, 0x8f, 0xfc, + 0x83, 0x41, 0x55, 0xc3, 0xb4, 0xfe, 0x6d, 0xaf, 0xa6, 0xcc, 0x8a, 0x5c, + 0xcf, 0x53, 0xc7, 0x3a, 0x08, 0x49, 0xd8, 0xd4, 0x4f, 0x7d, 0xcf, 0x72, + 0x75, 0x4e, 0x70, 0xe1, 0xb7, 0xdf, 0xb4, 0x47, 0xbb, 0x4e, 0xf4, 0x9d, + 0x1a, 0x71, 0x8f, 0x61, 0x71, 0xbb, 0xce, 0x20, 0x09, 0x50, 0xe0, 0xce, + 0x92, 0x61, 0x06, 0xb1, 0x51, 0xa3, 0xe8, 0x71, 0xd5, 0xce, 0x49, 0x73, + 0x1b, 0xd6, 0x65, 0x0a, 0x9b, 0x0c, 0xa9, 0x72, 0xda, 0x1c, 0x5f, 0x13, + 0x6d, 0x44, 0x82, 0x0e, 0xa6, 0x38, 0x3c, 0x08, 0xf3, 0xb3, 0x84, 0xcf, + 0x23, 0x38, 0xe7, 0x89, 0xc5, 0x13, 0xf6, 0x18, 0xcc, 0x56, 0x94, 0xa6, + 0xf0, 0xce, 0xe1, 0x04, 0x51, 0x1e, 0x1e, 0xd7, 0xc5, 0xf2, 0x3a, 0x1e, + 0xbf, 0xd8, 0xa0, 0xdb, 0x84, 0x24, 0x55, 0x32, 0x40, 0x15, 0x6d, 0xbf, + 0x62, 0x28, 0x31, 0xb0, 0xc6, 0x43, 0xd1, 0xc5, 0x51, 0xb6, 0xf3, 0xf7, + 0xa9, 0x8d, 0x29, 0xb8, 0x5c, 0x2d, 0xe0, 0x5a, 0x65, 0xfa, 0x61, 0x5e, + 0xee, 0x16, 0x49, 0x5b, 0xd9, 0x07, 0x37, 0x67, 0x21, 0x15, 0xb5, 0x3e, + 0x91, 0xc5, 0xd9, 0x00, 0x28, 0xcf, 0x3f, 0x1a, 0x93, 0x95, 0x3a, 0x15, + 0x3d, 0xe5, 0x3b, 0x44, 0x08, 0x4e, 0x9c, 0xcf, 0xf6, 0xb7, 0x36, 0x69, + 0x39, 0x26, 0xda, 0xef, 0xeb, 0xb2, 0xd7, 0x7a, 0xa5, 0xad, 0x68, 0x9b, + 0x92, 0xf3, 0x16, 0x86, 0x66, 0x9d, 0xf1, 0x6d, 0x17, 0x15, 0xcc, 0x58, + 0xf7, 0xa2, 0xcf, 0xb7, 0x2d, 0xd1, 0xa5, 0x1e, 0x92, 0xf8, 0x25, 0x99, + 0x3a, 0x74, 0x02, 0x2b, 0xe7, 0xe9, 0xeb, 0x60, 0x54, 0x65, 0x44, 0x57, + 0x09, 0x4d, 0x14, 0x92, 0x8f, 0x20, 0x21, 0x5e, 0x7b, 0x22, 0x2a, 0xc5, + 0x6b, 0x51, 0xad, 0xbe, 0xc8, 0xd8, 0xbd, 0xb6, 0x98, 0x39, 0x79, 0xa7, + 0xe3, 0xa2, 0x1b, 0x44, 0xb5, 0xd1, 0x51, 0x8c, 0xa9, 0x7d, 0x0b, 0x51, + 0x95, 0xf5, 0x1e, 0xd6, 0xa2, 0x43, 0x50, 0xc8, 0x97, 0x47, 0xe1, 0xed, + 0xea, 0x51, 0xb4, 0x48, 0xe3, 0xe9, 0x14, 0x70, 0x54, 0xce, 0x92, 0x78, + 0x73, 0xc9, 0x0d, 0xb3, 0x94, 0xd8, 0x68, 0x88, 0xe0, 0x7d, 0xff, 0x17, + 0x75, 0x93, 0xd6, 0xf7, 0x9e, 0x15, 0x23, 0x02, 0x20, 0x4a, 0xeb, 0x03, + 0xbe, 0x23, 0x86, 0xaf, 0x3e, 0x24, 0x07, 0x8b, 0xd0, 0x28, 0xb1, 0x68, + 0x9f, 0x5e, 0x14, 0x7c, 0x9f, 0x45, 0x2c, 0x8c, 0xeb, 0x02, 0xec, 0x59, + 0xcc, 0x9d, 0xb6, 0x3a, 0x03, 0x57, 0x6c, 0xee, 0xaf, 0xe9, 0x82, 0x39, + 0x02, 0x38, 0x97, 0xda, 0x02, 0x36, 0x63, 0x0a, 0x53, 0xc0, 0xde, 0x7f, + 0x43, 0x5a, 0x19, 0x86, 0x97, 0x92, 0xfa, 0xb3, 0x6e, 0x7b, 0x9e, 0x63, + 0x57, 0x60, 0xf0, 0x90, 0x69, 0xe6, 0x43, 0x2e, 0x70, 0x00, 0x35, 0xac, + 0x2a, 0x02, 0x87, 0x9f, 0xff, 0x0a, 0x1e, 0x1b, 0xec, 0x52, 0x20, 0x47, + 0x19, 0x3d, 0x94, 0xeb, 0x5d, 0xf1, 0xef, 0xd5, 0x3e, 0xea, 0x11, 0x44, + 0xca, 0x78, 0x94, 0x08, 0x52, 0xf5, 0xec, 0x97, 0x27, 0x90, 0x4b, 0x36, + 0x6e, 0xde, 0x4f, 0x5e, 0x2d, 0x33, 0x1f, 0xad, 0x5f, 0xc2, 0x82, 0xea, + 0x2c, 0x47, 0xe9, 0x23, 0x14, 0x27, 0x71, 0xc3, 0xdd, 0x75, 0xa8, 0x73, + 0x57, 0x48, 0x7d, 0xef, 0x99, 0xe5, 0xf1, 0x8e, 0x9d, 0x9e, 0xd6, 0x23, + 0xc1, 0x75, 0xd0, 0x28, 0x88, 0xc5, 0x1f, 0x82, 0xc0, 0x7a, 0x80, 0xd5, + 0x47, 0x16, 0xb3, 0xc3, 0xc2, 0xbd, 0xbe, 0x2e, 0x9f, 0x0a, 0x9b, 0xba, + 0xae, 0xbe, 0xb4, 0xd5, 0x29, 0x36, 0x87, 0x64, 0x06, 0xf5, 0xc0, 0x0e, + 0x8e, 0x4b, 0xbd, 0x0a, 0x5e, 0xc0, 0x57, 0x97, 0xe6, 0x20, 0x7c, 0x5a, + 0xb6, 0xc8, 0x8f, 0x1a, 0x68, 0x84, 0x21, 0xbd, 0x05, 0xa1, 0x14, 0xf4, + 0xd7, 0xde, 0x2a, 0xc2, 0x41, 0xfa, 0x0e, 0x8b, 0xed, 0xff, 0x47, 0xf7, + 0x62, 0xdd, 0xcb, 0xea, 0xa9, 0x10, 0x04, 0xf8, 0xd3, 0x1e, 0x85, 0x09, + 0x5c, 0x81, 0x05, 0x49, 0x94, 0xad, 0x38, 0x26, 0xe3, 0x44, 0xba, 0x96, + 0x04, 0x08, 0x10, 0xfc, 0x0b, 0x2a, 0xd1, 0xde, 0x48, 0xcf, 0xad, 0xe0, + 0x02, 0xc6, 0x2e, 0x5a, 0x49, 0xa0, 0x73, 0x1a, 0xb3, 0x83, 0x44, 0xbc, + 0x16, 0x36, 0xdf, 0x16, 0xbf, 0x60, 0x7d, 0x56, 0x85, 0x5e, 0x56, 0xd6, + 0x84, 0x00, 0x3c, 0x71, 0x8e, 0x4b, 0xad, 0x9e, 0x5a, 0x09, 0x99, 0x79, + 0xfc, 0xdd, 0xee, 0xb1, 0xc4, 0xa7, 0x77, 0x6c, 0xd3, 0x7a, 0x34, 0x17, + 0xcb, 0x0e, 0x18, 0x4e, 0x29, 0xef, 0x9b, 0xc0, 0xe8, 0x74, 0x75, 0xba, + 0x66, 0x3b, 0xe0, 0x9e, 0x00, 0xab, 0x56, 0x2e, 0xb7, 0xc0, 0xf7, 0x16, + 0x5f, 0x96, 0x9a, 0x9b, 0x42, 0x41, 0x41, 0x98, 0xcc, 0xf1, 0xbf, 0xf2, + 0xa2, 0xc8, 0xd6, 0x89, 0xa4, 0x14, 0xec, 0xe7, 0x66, 0x29, 0x27, 0x66, + 0x56, 0x89, 0xe9, 0x4d, 0xb9, 0x61, 0xeb, 0xae, 0xc5, 0x61, 0x5c, 0xbc, + 0x1a, 0x78, 0x95, 0xc6, 0x85, 0x1a, 0xc9, 0x61, 0x43, 0x2f, 0xf1, 0x11, + 0x8d, 0x46, 0x07, 0xd3, 0x2e, 0xf9, 0xdc, 0x73, 0x2d, 0x51, 0x33, 0x3b, + 0xe4, 0xb4, 0xd0, 0xe3, 0x0d, 0xde, 0xa7, 0x84, 0xec, 0xa8, 0xbe, 0x47, + 0xe7, 0x41, 0xbe, 0x9c, 0x19, 0x63, 0x1d, 0xc4, 0x70, 0xa5, 0x2e, 0xf4, + 0xdc, 0x13, 0xa4, 0xf3, 0x63, 0x3f, 0xd4, 0x34, 0xd7, 0x87, 0xc1, 0x70, + 0x97, 0x7b, 0x41, 0x7d, 0xf5, 0x98, 0xe1, 0xd0, 0xdd, 0xe5, 0x06, 0xbb, + 0x71, 0xd6, 0xf0, 0xbc, 0x17, 0xec, 0x70, 0xe3, 0xb0, 0x3c, 0xdc, 0x19, + 0x65, 0xcb, 0x36, 0x99, 0x3f, 0x63, 0x3b, 0x04, 0x72, 0xe5, 0x0d, 0x09, + 0x23, 0xac, 0x6c, 0x66, 0xfd, 0xf1, 0xd3, 0xe6, 0x45, 0x9c, 0xc1, 0x21, + 0xf0, 0xf5, 0xf9, 0x4d, 0x09, 0xe9, 0xdb, 0xcf, 0x5d, 0x69, 0x0e, 0x23, + 0x23, 0x38, 0x38, 0xa0, 0xba, 0xcb, 0x7c, 0x63, 0x8d, 0x1b, 0x26, 0x50, + 0xa4, 0x30, 0x8c, 0xd1, 0x71, 0xb6, 0x85, 0x51, 0x26, 0xd1, 0xda, 0x67, + 0x2a, 0x6e, 0xd8, 0x5a, 0x8d, 0x78, 0xc2, 0x86, 0xfb, 0x56, 0xf4, 0xab, + 0x3d, 0x21, 0x49, 0x75, 0x28, 0x04, 0x5c, 0x63, 0x26, 0x2c, 0x8a, 0x42, + 0xaf, 0x2f, 0x98, 0x02, 0xc5, 0x3b, 0x7b, 0xb8, 0xbe, 0x28, 0xe7, 0x8f, + 0xe0, 0xb5, 0xce, 0x45, 0xfb, 0xb7, 0xa1, 0xaf, 0x1a, 0x3b, 0x28, 0xa8, + 0xd9, 0x4b, 0x78, 0x90, 0xe3, 0xc8, 0x82, 0xe3, 0x9b, 0xc9, 0x8e, 0x9f, + 0x0a, 0xd7, 0x60, 0x25, 0xbf, 0x0d, 0xd2, 0xf0, 0x02, 0x98, 0xe7, 0x14, + 0x1a, 0x22, 0x6b, 0x3d, 0x7c, 0xee, 0x41, 0x4f, 0x60, 0x4d, 0x1e, 0x0b, + 0xa5, 0x4d, 0x11, 0xd5, 0xfe, 0x58, 0xbc, 0xce, 0xa6, 0xad, 0x77, 0xad, + 0x2e, 0x8c, 0x1c, 0xaa, 0xcf, 0x32, 0x45, 0x90, 0x14, 0xb7, 0xb9, 0x10, + 0x01, 0xb1, 0xef, 0xa8, 0xad, 0x17, 0x2a, 0x52, 0x3f, 0xb8, 0xe3, 0x65, + 0xb5, 0x77, 0x12, 0x1b, 0xf9, 0xfd, 0x88, 0xa2, 0xc6, 0x0c, 0x21, 0xe8, + 0x21, 0xd7, 0xb6, 0xac, 0xb4, 0x7a, 0x5a, 0x99, 0x5e, 0x40, 0xca, 0xce, + 0xd5, 0xc2, 0x23, 0xb8, 0xfe, 0x6d, 0xe5, 0xe1, 0x8e, 0x9d, 0x2e, 0x58, + 0x93, 0xae, 0xfe, 0xbb, 0x7a, 0xae, 0x7f, 0xf1, 0xa1, 0x46, 0x26, 0x0e, + 0x2f, 0x11, 0x0e, 0x93, 0x95, 0x28, 0x21, 0x3a, 0x00, 0x25, 0xa3, 0x8e, + 0xc7, 0x9a, 0xab, 0xc8, 0x61, 0xb2, 0x5e, 0xbc, 0x50, 0x9a, 0x46, 0x74, + 0xc1, 0x32, 0xaa, 0xac, 0xb7, 0xe0, 0x14, 0x6f, 0x14, 0xef, 0xd1, 0x1c, + 0xfc, 0xaf, 0x4c, 0xaa, 0x4f, 0x77, 0x5a, 0x71, 0x6c, 0xe3, 0x25, 0xe0, + 0xa4, 0x35, 0xa4, 0xd3, 0x49, 0xd7, 0x20, 0xbc, 0xf1, 0x37, 0x45, 0x0a, + 0xfc, 0x45, 0x04, 0x6f, 0xc1, 0xa1, 0xf8, 0x3a, 0x9d, 0x32, 0x97, 0x77, + 0xa7, 0x08, 0x4e, 0x4a, 0xad, 0xae, 0x71, 0x22, 0xce, 0x97, 0x00, 0x59, + 0x30, 0x52, 0x8e, 0xb3, 0xc7, 0xf7, 0xf1, 0x12, 0x9b, 0x37, 0x28, 0x87, + 0xa3, 0x71, 0x15, 0x5a, 0x3b, 0xa2, 0x01, 0xa2, 0x5c, 0xbf, 0x1d, 0xcb, + 0x64, 0xe7, 0xcd, 0xee, 0x09, 0x2c, 0x31, 0x41, 0xfb, 0x55, 0x50, 0xfe, + 0x3d, 0x0d, 0xd8, 0x2e, 0x87, 0x0e, 0x57, 0x8b, 0x2b, 0x46, 0x50, 0x08, + 0x18, 0x11, 0x3b, 0x8f, 0x65, 0x69, 0x77, 0x3c, 0x67, 0x73, 0x85, 0xb6, + 0x9a, 0x42, 0xb7, 0x7d, 0xcb, 0xa7, 0xac, 0xff, 0xd9, 0x5f, 0xd4, 0x45, + 0x2e, 0x23, 0xaa, 0xa1, 0xd3, 0x7e, 0x1d, 0xa2, 0x15, 0x1e, 0xa6, 0x58, + 0xd4, 0x0a, 0x35, 0x96, 0xb2, 0x7a, 0xc9, 0xf8, 0x12, 0x9d, 0xc6, 0xcf, + 0x06, 0x43, 0x77, 0x26, 0x24, 0xb5, 0x9f, 0x4f, 0x46, 0x12, 0x30, 0xdf, + 0x47, 0x1c, 0xa2, 0x60, 0x87, 0xc3, 0x94, 0x2d, 0x5c, 0x66, 0x87, 0xdf, + 0x60, 0x82, 0x83, 0x59, 0x35, 0xa3, 0xf8, 0x7c, 0xb7, 0x62, 0xb0, 0xc3, + 0xb1, 0xd0, 0xdd, 0xa4, 0xa6, 0x53, 0x39, 0x65, 0xbe, 0xf1, 0xb7, 0xb8, + 0x29, 0x2e, 0x25, 0x4c, 0x01, 0x4d, 0x09, 0x0f, 0xed, 0x85, 0x7c, 0x44, + 0xc1, 0x83, 0x9c, 0x69, 0x4c, 0x0a, 0x64, 0xe3, 0xfa, 0xd9, 0x0a, 0x11, + 0xf5, 0x34, 0x72, 0x2b, 0x6e, 0xe1, 0x57, 0x4f, 0x2e, 0x14, 0x9d, 0x55, + 0xd7, 0x44, 0xde, 0x48, 0x87, 0x02, 0x4e, 0x08, 0x51, 0x14, 0x31, 0xc0, + 0x62, 0x75, 0x0e, 0x16, 0xc7, 0x4a, 0xb9, 0xf3, 0x24, 0x2f, 0x2d, 0xb3, + 0xff, 0xb1, 0x2a, 0x8d, 0x61, 0x07, 0xfa, 0xa2, 0x29, 0xd6, 0xf6, 0x37, + 0x3b, 0x07, 0xf3, 0x6d, 0x39, 0x32, 0xb3, 0xbd, 0xb0, 0x4c, 0x19, 0xdd, + 0x64, 0xea, 0xdd, 0x7f, 0x93, 0xc3, 0xc5, 0x64, 0xc3, 0x58, 0xa1, 0xc8, + 0x1d, 0xcf, 0x1c, 0x9c, 0x31, 0xe5, 0xb0, 0x65, 0x68, 0xf9, 0x75, 0x44, + 0xc1, 0x7d, 0xc1, 0x56, 0x98, 0xc5, 0xcb, 0x38, 0x98, 0x3a, 0x9a, 0xfc, + 0x42, 0x78, 0x3f, 0xaa, 0x77, 0x3a, 0x52, 0xc9, 0xd8, 0x26, 0x06, 0x90, + 0xbe, 0x9e, 0x31, 0x56, 0xaa, 0x5b, 0xc1, 0x50, 0x9d, 0xea, 0x3f, 0x69, + 0x58, 0x76, 0x95, 0xcd, 0x6f, 0xf1, 0x72, 0xba, 0x83, 0xe6, 0xa6, 0xd8, + 0xa7, 0xd6, 0xbb, 0xeb, 0xbb, 0xcd, 0xa3, 0x67, 0x27, 0x31, 0x98, 0x3f, + 0x89, 0xbc, 0x58, 0x31, 0xdc, 0x37, 0xc3, 0xf3, 0xc5, 0xc5, 0x6f, 0xac, + 0xc6, 0x97, 0xf3, 0xcb, 0x20, 0xbd, 0x5d, 0xba, 0xdb, 0xd7, 0x02, 0xe5, + 0x48, 0x44, 0xac, 0x2f, 0x62, 0x69, 0x01, 0xfe, 0x15, 0x9d, 0xb9, 0x3d, + 0xfd, 0x47, 0x73, 0xd8, 0xfe, 0x73, 0x56, 0x2b, 0x84, 0x6c, 0x1f, 0xc8, + 0x56, 0xd1, 0x80, 0x27, 0x62, 0x84, 0x0e, 0xbc, 0x72, 0xd7, 0x98, 0x8b, + 0xde, 0x75, 0xcb, 0xca, 0x70, 0xd3, 0x19, 0xd3, 0x2c, 0xe0, 0xcc, 0x02, + 0x53, 0xbb, 0x2a, 0xd4, 0x55, 0x72, 0x3e, 0xe0, 0xc7, 0xf4, 0x73, 0x6c, + 0xe6, 0xe6, 0x66, 0x5c, 0x5a, 0xca, 0x32, 0xa4, 0x81, 0xc5, 0x38, 0x39, + 0xbc, 0x25, 0x91, 0x67, 0xb0, 0x13, 0xd0, 0x42, 0x33, 0x95, 0xee, 0xb9, + 0xaa, 0xae, 0xe3, 0x20, 0x61, 0x49, 0xa7, 0xd5, 0x50, 0xd6, 0x7f, 0xc5, + 0xfd, 0xfe, 0x4a, 0x8a, 0x5c, 0x35, 0xd2, 0x51, 0x0b, 0x66, 0x43, 0x79, + 0xab, 0x8f, 0x72, 0x85, 0x5a, 0x2a, 0xf4, 0x7a, 0xbc, 0xe2, 0xa6, 0x32, + 0x04, 0x8e, 0xaf, 0x89, 0xe5, 0xcb, 0x4a, 0x88, 0xde, 0xbc, 0x53, 0xa5, + 0x95, 0x10, 0x3a, 0xcc, 0xe4, 0xf1, 0xcf, 0xf1, 0x8a, 0xcf, 0xf0, 0x7a, + 0xfe, 0x1e, 0xb5, 0x71, 0x6a, 0xa1, 0xe4, 0x0b, 0x63, 0x13, 0x4c, 0x3a, + 0x3a, 0xe9, 0x57, 0x9f, 0xa8, 0x7f, 0x51, 0x5b, 0xe0, 0x93, 0xc2, 0xd2, + 0x9d, 0xb6, 0xd6, 0xb6, 0x5c, 0x93, 0x66, 0x1e, 0x00, 0x63, 0x6b, 0x59, + 0x27, 0x04, 0xd0, 0x93, 0xcc, 0x67, 0x16, 0xc2, 0x34, 0x2e, 0xb1, 0x85, + 0x3d, 0x48, 0xc8, 0x5c, 0x63, 0xac, 0x8a, 0x28, 0x54, 0x46, 0x2c, 0x7b, + 0x77, 0xe7, 0xe3, 0xbd, 0x1e, 0xac, 0x5b, 0xca, 0x28, 0xff, 0xaa, 0x00, + 0xb5, 0xd3, 0x49, 0xf8, 0xa5, 0x47, 0xad, 0x87, 0x5b, 0x96, 0xa8, 0xc2, + 0xb2, 0x91, 0x0c, 0x93, 0x01, 0x30, 0x9a, 0x3f, 0x91, 0x38, 0xa5, 0x69, + 0x31, 0x11, 0xf5, 0x5b, 0x3c, 0x00, 0x9c, 0xa9, 0x47, 0xc3, 0x9d, 0xfc, + 0x82, 0xd9, 0x8e, 0xb1, 0xca, 0xa4, 0xa9, 0xcb, 0xe8, 0x85, 0xf7, 0x86, + 0xfa, 0x86, 0xe5, 0x5b, 0xe0, 0x62, 0x22, 0x2f, 0x8b, 0xa9, 0x0a, 0x97, + 0x40, 0x73, 0x32, 0x6b, 0x31, 0x21, 0x2a, 0xec, 0xe0, 0xa3, 0x4a, 0x60, +}; +static const unsigned short sb_image_packed[] = { + 0x1f00, 0x5d3e, 0x9b7c, 0xd9ba, 0x17f8, 0x5536, 0x9374, 0xd1b2, + 0x0ff0, 0x4d2e, 0x8b6c, 0xc9aa, 0x07e8, 0x4526, 0x8364, 0xc1a2, + 0xfee1, 0x3c1f, 0x7a5d, 0xb89b, 0xf6d9, 0x3417, 0x7255, 0xb093, + 0xeed1, 0x2c0f, 0x6a4d, 0xa88b, 0xe6c9, 0x2407, 0x6245, 0xa083, + 0xddc2, 0x1ffc, 0x593e, 0x9b78, 0xd5ba, 0x17f4, 0x5136, 0x9370, + 0xcdb2, 0x0fec, 0x492e, 0x8b68, 0xc5aa, 0x07e4, 0x4126, 0x8360, + 0xbca3, 0xfedd, 0x381f, 0x7a59, 0xb49b, 0xf6d5, 0x3017, 0x7251, + 0xac93, 0xeecd, 0x280f, 0x6a49, 0xa48b, 0xe6c5, 0x2007, 0x6241, + 0x9b84, 0xd9ba, 0x1ff8, 0x5d3e, 0x937c, 0xd1b2, 0x17f0, 0x5536, + 0x8b74, 0xc9aa, 0x0fe8, 0x4d2e, 0x836c, 0xc1a2, 0x07e0, 0x4526, + 0x7a65, 0xb89b, 0xfed9, 0x3c1f, 0x725d, 0xb093, 0xf6d1, 0x3417, + 0x6a55, 0xa88b, 0xeec9, 0x2c0f, 0x624d, 0xa083, 0xe6c1, 0x2407, + 0x5946, 0x9b78, 0xddba, 0x1ffc, 0x513e, 0x9370, 0xd5b2, 0x17f4, + 0x4936, 0x8b68, 0xcdaa, 0x0fec, 0x412e, 0x8360, 0xc5a2, 0x07e4, + 0x3827, 0x7a59, 0xbc9b, 0xfedd, 0x301f, 0x7251, 0xb493, 0xf6d5, + 0x2817, 0x6a49, 0xac8b, 0xeecd, 0x200f, 0x6241, 0xa483, 0xe6c5, + 0x1708, 0x5536, 0x9374, 0xd1b2, 0x1ff0, 0x5d3e, 0x9b7c, 0xd9ba, + 0x07f8, 0x4526, 0x8364, 0xc1a2, 0x0fe0, 0x4d2e, 0x8b6c, 0xc9aa, + 0xf6e9, 0x3417, 0x7255, 0xb093, 0xfed1, 0x3c1f, 0x7a5d, 0xb89b, + 0xe6d9, 0x2407, 0x6245, 0xa083, 0xeec1, 0x2c0f, 0x6a4d, 0xa88b, + 0xd5ca, 0x17f4, 0x5136, 0x9370, 0xddb2, 0x1ffc, 0x593e, 0x9b78, + 0xc5ba, 0x07e4, 0x4126, 0x8360, 0xcda2, 0x0fec, 0x492e, 0x8b68, + 0xb4ab, 0xf6d5, 0x3017, 0x7251, 0xbc93, 0xfedd, 0x381f, 0x7a59, + 0xa49b, 0xe6c5, 0x2007, 0x6241, 0xac83, 0xeecd, 0x280f, 0x6a49, + 0x938c, 0xd1b2, 0x17f0, 0x5536, 0x9b74, 0xd9ba, 0x1ff8, 0x5d3e, + 0x837c, 0xc1a2, 0x07e0, 0x4526, 0x8b64, 0xc9aa, 0x0fe8, 0x4d2e, + 0x726d, 0xb093, 0xf6d1, 0x3417, 0x7a55, 0xb89b, 0xfed9, 0x3c1f, + 0x625d, 0xa083, 0xe6c1, 0x2407, 0x6a45, 0xa88b, 0xeec9, 0x2c0f, + 0x514e, 0x9370, 0xd5b2, 0x17f4, 0x5936, 0x9b78, 0xddba, 0x1ffc, + 0x413e, 0x8360, 0xc5a2, 0x07e4, 0x4926, 0x8b68, 0xcdaa, 0x0fec, + 0x302f, 0x7251, 0xb493, 0xf6d5, 0x3817, 0x7a59, 0xbc9b, 0xfedd, + 0x201f, 0x6241, 0xa483, 0xe6c5, 0x2807, 0x6a49, 0xac8b, 0xeecd, + 0x0f10, 0x4d2e, 0x8b6c, 0xc9aa, 0x07e8, 0x4526, 0x8364, 0xc1a2, + 0x1fe0, 0x5d3e, 0x9b7c, 0xd9ba, 0x17f8, 0x5536, 0x9374, 0xd1b2, + 0xeef1, 0x2c0f, 0x6a4d, 0xa88b, 0xe6c9, 0x2407, 0x6245, 0xa083, + 0xfec1, 0x3c1f, 0x7a5d, 0xb89b, 0xf6d9, 0x3417, 0x7255, 0xb093, + 0xcdd2, 0x0fec, 0x492e, 0x8b68, 0xc5aa, 0x07e4, 0x4126, 0x8360, + 0xdda2, 0x1ffc, 0x593e, 0x9b78, 0xd5ba, 0x17f4, 0x5136, 0x9370, + 0xacb3, 0xeecd, 0x280f, 0x6a49, 0xa48b, 0xe6c5, 0x2007, 0x6241, + 0xbc83, 0xfedd, 0x381f, 0x7a59, 0xb49b, 0xf6d5, 0x3017, 0x7251, + 0x8b94, 0xc9aa, 0x0fe8, 0x4d2e, 0x836c, 0xc1a2, 0x07e0, 0x4526, + 0x9b64, 0xd9ba, 0x1ff8, 0x5d3e, 0x937c, 0xd1b2, 0x17f0, 0x5536, + 0x6a75, 0xa88b, 0xeec9, 0x2c0f, 0x624d, 0xa083, 0xe6c1, 0x2407, + 0x7a45, 0xb89b, 0xfed9, 0x3c1f, 0x725d, 0xb093, 0xf6d1, 0x3417, + 0x4956, 0x8b68, 0xcdaa, 0x0fec, 0x412e, 0x8360, 0xc5a2, 0x07e4, + 0x5926, 0x9b78, 0xddba, 0x1ffc, 0x513e, 0x9370, 0xd5b2, 0x17f4, + 0x2837, 0x6a49, 0xac8b, 0xeecd, 0x200f, 0x6241, 0xa483, 0xe6c5, + 0x3807, 0x7a59, 0xbc9b, 0xfedd, 0x301f, 0x7251, 0xb493, 0xf6d5, + 0x0718, 0x4526, 0x8364, 0xc1a2, 0x0fe0, 0x4d2e, 0x8b6c, 0xc9aa, + 0x17e8, 0x5536, 0x9374, 0xd1b2, 0x1ff0, 0x5d3e, 0x9b7c, 0xd9ba, + 0xe6f9, 0x2407, 0x6245, 0xa083, 0xeec1, 0x2c0f, 0x6a4d, 0xa88b, + 0xf6c9, 0x3417, 0x7255, 0xb093, 0xfed1, 0x3c1f, 0x7a5d, 0xb89b, + 0xc5da, 0x07e4, 0x4126, 0x8360, 0xcda2, 0x0fec, 0x492e, 0x8b68, + 0xd5aa, 0x17f4, 0x5136, 0x9370, 0xddb2, 0x1ffc, 0x593e, 0x9b78, + 0xa4bb, 0xe6c5, 0x2007, 0x6241, 0xac83, 0xeecd, 0x280f, 0x6a49, + 0xb48b, 0xf6d5, 0x3017, 0x7251, 0xbc93, 0xfedd, 0x381f, 0x7a59, + 0x839c, 0xc1a2, 0x07e0, 0x4526, 0x8b64, 0xc9aa, 0x0fe8, 0x4d2e, + 0x936c, 0xd1b2, 0x17f0, 0x5536, 0x9b74, 0xd9ba, 0x1ff8, 0x5d3e, + 0x627d, 0xa083, 0xe6c1, 0x2407, 0x6a45, 0xa88b, 0xeec9, 0x2c0f, + 0x724d, 0xb093, 0xf6d1, 0x3417, 0x7a55, 0xb89b, 0xfed9, 0x3c1f, + 0x415e, 0x8360, 0xc5a2, 0x07e4, 0x4926, 0x8b68, 0xcdaa, 0x0fec, + 0x512e, 0x9370, 0xd5b2, 0x17f4, 0x5936, 0x9b78, 0xddba, 0x1ffc, + 0x203f, 0x6241, 0xa483, 0xe6c5, 0x2807, 0x6a49, 0xac8b, 0xeecd, + 0x300f, 0x7251, 0xb493, 0xf6d5, 0x3817, 0x7a59, 0xbc9b, 0xfedd, + 0x3f20, 0x7d1e, 0xbb5c, 0xf99a, 0x37d8, 0x7516, 0xb354, 0xf192, + 0x2fd0, 0x6d0e, 0xab4c, 0xe98a, 0x27c8, 0x6506, 0xa344, 0xe182, + 0xdec1, 0x1c3f, 0x5a7d, 0x98bb, 0xd6f9, 0x1437, 0x5275, 0x90b3, + 0xcef1, 0x0c2f, 0x4a6d, 0x88ab, 0xc6e9, 0x0427, 0x4265, 0x80a3, + 0xfde2, 0x3fdc, 0x791e, 0xbb58, 0xf59a, 0x37d4, 0x7116, 0xb350, + 0xed92, 0x2fcc, 0x690e, 0xab48, 0xe58a, 0x27c4, 0x6106, 0xa340, + 0x9c83, 0xdefd, 0x183f, 0x5a79, 0x94bb, 0xd6f5, 0x1037, 0x5271, + 0x8cb3, 0xceed, 0x082f, 0x4a69, 0x84ab, 0xc6e5, 0x0027, 0x4261, + 0xbba4, 0xf99a, 0x3fd8, 0x7d1e, 0xb35c, 0xf192, 0x37d0, 0x7516, + 0xab54, 0xe98a, 0x2fc8, 0x6d0e, 0xa34c, 0xe182, 0x27c0, 0x6506, + 0x5a45, 0x98bb, 0xdef9, 0x1c3f, 0x527d, 0x90b3, 0xd6f1, 0x1437, + 0x4a75, 0x88ab, 0xcee9, 0x0c2f, 0x426d, 0x80a3, 0xc6e1, 0x0427, + 0x7966, 0xbb58, 0xfd9a, 0x3fdc, 0x711e, 0xb350, 0xf592, 0x37d4, + 0x6916, 0xab48, 0xed8a, 0x2fcc, 0x610e, 0xa340, 0xe582, 0x27c4, + 0x1807, 0x5a79, 0x9cbb, 0xdefd, 0x103f, 0x5271, 0x94b3, 0xd6f5, + 0x0837, 0x4a69, 0x8cab, 0xceed, 0x002f, 0x4261, 0x84a3, 0xc6e5, + 0x3728, 0x7516, 0xb354, 0xf192, 0x3fd0, 0x7d1e, 0xbb5c, 0xf99a, + 0x27d8, 0x6506, 0xa344, 0xe182, 0x2fc0, 0x6d0e, 0xab4c, 0xe98a, + 0xd6c9, 0x1437, 0x5275, 0x90b3, 0xdef1, 0x1c3f, 0x5a7d, 0x98bb, + 0xc6f9, 0x0427, 0x4265, 0x80a3, 0xcee1, 0x0c2f, 0x4a6d, 0x88ab, + 0xf5ea, 0x37d4, 0x7116, 0xb350, 0xfd92, 0x3fdc, 0x791e, 0xbb58, + 0xe59a, 0x27c4, 0x6106, 0xa340, 0xed82, 0x2fcc, 0x690e, 0xab48, + 0x948b, 0xd6f5, 0x1037, 0x5271, 0x9cb3, 0xdefd, 0x183f, 0x5a79, + 0x84bb, 0xc6e5, 0x0027, 0x4261, 0x8ca3, 0xceed, 0x082f, 0x4a69, + 0xb3ac, 0xf192, 0x37d0, 0x7516, 0xbb54, 0xf99a, 0x3fd8, 0x7d1e, + 0xa35c, 0xe182, 0x27c0, 0x6506, 0xab44, 0xe98a, 0x2fc8, 0x6d0e, + 0x524d, 0x90b3, 0xd6f1, 0x1437, 0x5a75, 0x98bb, 0xdef9, 0x1c3f, + 0x427d, 0x80a3, 0xc6e1, 0x0427, 0x4a65, 0x88ab, 0xcee9, 0x0c2f, + 0x716e, 0xb350, 0xf592, 0x37d4, 0x7916, 0xbb58, 0xfd9a, 0x3fdc, + 0x611e, 0xa340, 0xe582, 0x27c4, 0x6906, 0xab48, 0xed8a, 0x2fcc, + 0x100f, 0x5271, 0x94b3, 0xd6f5, 0x1837, 0x5a79, 0x9cbb, 0xdefd, + 0x003f, 0x4261, 0x84a3, 0xc6e5, 0x0827, 0x4a69, 0x8cab, 0xceed, + 0x2f30, 0x6d0e, 0xab4c, 0xe98a, 0x27c8, 0x6506, 0xa344, 0xe182, + 0x3fc0, 0x7d1e, 0xbb5c, 0xf99a, 0x37d8, 0x7516, 0xb354, 0xf192, + 0xced1, 0x0c2f, 0x4a6d, 0x88ab, 0xc6e9, 0x0427, 0x4265, 0x80a3, + 0xdee1, 0x1c3f, 0x5a7d, 0x98bb, 0xd6f9, 0x1437, 0x5275, 0x90b3, + 0xedf2, 0x2fcc, 0x690e, 0xab48, 0xe58a, 0x27c4, 0x6106, 0xa340, + 0xfd82, 0x3fdc, 0x791e, 0xbb58, 0xf59a, 0x37d4, 0x7116, 0xb350, + 0x8c93, 0xceed, 0x082f, 0x4a69, 0x84ab, 0xc6e5, 0x0027, 0x4261, + 0x9ca3, 0xdefd, 0x183f, 0x5a79, 0x94bb, 0xd6f5, 0x1037, 0x5271, + 0xabb4, 0xe98a, 0x2fc8, 0x6d0e, 0xa34c, 0xe182, 0x27c0, 0x6506, + 0xbb44, 0xf99a, 0x3fd8, 0x7d1e, 0xb35c, 0xf192, 0x37d0, 0x7516, + 0x4a55, 0x88ab, 0xcee9, 0x0c2f, 0x426d, 0x80a3, 0xc6e1, 0x0427, + 0x5a65, 0x98bb, 0xdef9, 0x1c3f, 0x527d, 0x90b3, 0xd6f1, 0x1437, + 0x6976, 0xab48, 0xed8a, 0x2fcc, 0x610e, 0xa340, 0xe582, 0x27c4, + 0x7906, 0xbb58, 0xfd9a, 0x3fdc, 0x711e, 0xb350, 0xf592, 0x37d4, + 0x0817, 0x4a69, 0x8cab, 0xceed, 0x002f, 0x4261, 0x84a3, 0xc6e5, + 0x1827, 0x5a79, 0x9cbb, 0xdefd, 0x103f, 0x5271, 0x94b3, 0xd6f5, + 0x2738, 0x6506, 0xa344, 0xe182, 0x2fc0, 0x6d0e, 0xab4c, 0xe98a, + 0x37c8, 0x7516, 0xb354, 0xf192, 0x3fd0, 0x7d1e, 0xbb5c, 0xf99a, + 0xc6d9, 0x0427, 0x4265, 0x80a3, 0xcee1, 0x0c2f, 0x4a6d, 0x88ab, + 0xd6e9, 0x1437, 0x5275, 0x90b3, 0xdef1, 0x1c3f, 0x5a7d, 0x98bb, + 0xe5fa, 0x27c4, 0x6106, 0xa340, 0xed82, 0x2fcc, 0x690e, 0xab48, + 0xf58a, 0x37d4, 0x7116, 0xb350, 0xfd92, 0x3fdc, 0x791e, 0xbb58, + 0x849b, 0xc6e5, 0x0027, 0x4261, 0x8ca3, 0xceed, 0x082f, 0x4a69, + 0x94ab, 0xd6f5, 0x1037, 0x5271, 0x9cb3, 0xdefd, 0x183f, 0x5a79, + 0xa3bc, 0xe182, 0x27c0, 0x6506, 0xab44, 0xe98a, 0x2fc8, 0x6d0e, + 0xb34c, 0xf192, 0x37d0, 0x7516, 0xbb54, 0xf99a, 0x3fd8, 0x7d1e, + 0x425d, 0x80a3, 0xc6e1, 0x0427, 0x4a65, 0x88ab, 0xcee9, 0x0c2f, + 0x526d, 0x90b3, 0xd6f1, 0x1437, 0x5a75, 0x98bb, 0xdef9, 0x1c3f, + 0x617e, 0xa340, 0xe582, 0x27c4, 0x6906, 0xab48, 0xed8a, 0x2fcc, + 0x710e, 0xb350, 0xf592, 0x37d4, 0x7916, 0xbb58, 0xfd9a, 0x3fdc, + 0x001f, 0x4261, 0x84a3, 0xc6e5, 0x0827, 0x4a69, 0x8cab, 0xceed, + 0x102f, 0x5271, 0x94b3, 0xd6f5, 0x1837, 0x5a79, 0x9cbb, 0xdefd, + 0x5f40, 0x1d7e, 0xdb3c, 0x99fa, 0x57b8, 0x1576, 0xd334, 0x91f2, + 0x4fb0, 0x0d6e, 0xcb2c, 0x89ea, 0x47a8, 0x0566, 0xc324, 0x81e2, + 0xbea1, 0x7c5f, 0x3a1d, 0xf8db, 0xb699, 0x7457, 0x3215, 0xf0d3, + 0xae91, 0x6c4f, 0x2a0d, 0xe8cb, 0xa689, 0x6447, 0x2205, 0xe0c3, + 0x9d82, 0x5fbc, 0x197e, 0xdb38, 0x95fa, 0x57b4, 0x1176, 0xd330, + 0x8df2, 0x4fac, 0x096e, 0xcb28, 0x85ea, 0x47a4, 0x0166, 0xc320, + 0xfce3, 0xbe9d, 0x785f, 0x3a19, 0xf4db, 0xb695, 0x7057, 0x3211, + 0xecd3, 0xae8d, 0x684f, 0x2a09, 0xe4cb, 0xa685, 0x6047, 0x2201, + 0xdbc4, 0x99fa, 0x5fb8, 0x1d7e, 0xd33c, 0x91f2, 0x57b0, 0x1576, + 0xcb34, 0x89ea, 0x4fa8, 0x0d6e, 0xc32c, 0x81e2, 0x47a0, 0x0566, + 0x3a25, 0xf8db, 0xbe99, 0x7c5f, 0x321d, 0xf0d3, 0xb691, 0x7457, + 0x2a15, 0xe8cb, 0xae89, 0x6c4f, 0x220d, 0xe0c3, 0xa681, 0x6447, + 0x1906, 0xdb38, 0x9dfa, 0x5fbc, 0x117e, 0xd330, 0x95f2, 0x57b4, + 0x0976, 0xcb28, 0x8dea, 0x4fac, 0x016e, 0xc320, 0x85e2, 0x47a4, + 0x7867, 0x3a19, 0xfcdb, 0xbe9d, 0x705f, 0x3211, 0xf4d3, 0xb695, + 0x6857, 0x2a09, 0xeccb, 0xae8d, 0x604f, 0x2201, 0xe4c3, 0xa685, + 0x5748, 0x1576, 0xd334, 0x91f2, 0x5fb0, 0x1d7e, 0xdb3c, 0x99fa, + 0x47b8, 0x0566, 0xc324, 0x81e2, 0x4fa0, 0x0d6e, 0xcb2c, 0x89ea, + 0xb6a9, 0x7457, 0x3215, 0xf0d3, 0xbe91, 0x7c5f, 0x3a1d, 0xf8db, + 0xa699, 0x6447, 0x2205, 0xe0c3, 0xae81, 0x6c4f, 0x2a0d, 0xe8cb, + 0x958a, 0x57b4, 0x1176, 0xd330, 0x9df2, 0x5fbc, 0x197e, 0xdb38, + 0x85fa, 0x47a4, 0x0166, 0xc320, 0x8de2, 0x4fac, 0x096e, 0xcb28, + 0xf4eb, 0xb695, 0x7057, 0x3211, 0xfcd3, 0xbe9d, 0x785f, 0x3a19, + 0xe4db, 0xa685, 0x6047, 0x2201, 0xecc3, 0xae8d, 0x684f, 0x2a09, + 0xd3cc, 0x91f2, 0x57b0, 0x1576, 0xdb34, 0x99fa, 0x5fb8, 0x1d7e, + 0xc33c, 0x81e2, 0x47a0, 0x0566, 0xcb24, 0x89ea, 0x4fa8, 0x0d6e, + 0x322d, 0xf0d3, 0xb691, 0x7457, 0x3a15, 0xf8db, 0xbe99, 0x7c5f, + 0x221d, 0xe0c3, 0xa681, 0x6447, 0x2a05, 0xe8cb, 0xae89, 0x6c4f, + 0x110e, 0xd330, 0x95f2, 0x57b4, 0x1976, 0xdb38, 0x9dfa, 0x5fbc, + 0x017e, 0xc320, 0x85e2, 0x47a4, 0x0966, 0xcb28, 0x8dea, 0x4fac, + 0x706f, 0x3211, 0xf4d3, 0xb695, 0x7857, 0x3a19, 0xfcdb, 0xbe9d, + 0x605f, 0x2201, 0xe4c3, 0xa685, 0x6847, 0x2a09, 0xeccb, 0xae8d, + 0x4f50, 0x0d6e, 0xcb2c, 0x89ea, 0x47a8, 0x0566, 0xc324, 0x81e2, + 0x5fa0, 0x1d7e, 0xdb3c, 0x99fa, 0x57b8, 0x1576, 0xd334, 0x91f2, + 0xaeb1, 0x6c4f, 0x2a0d, 0xe8cb, 0xa689, 0x6447, 0x2205, 0xe0c3, + 0xbe81, 0x7c5f, 0x3a1d, 0xf8db, 0xb699, 0x7457, 0x3215, 0xf0d3, + 0x8d92, 0x4fac, 0x096e, 0xcb28, 0x85ea, 0x47a4, 0x0166, 0xc320, + 0x9de2, 0x5fbc, 0x197e, 0xdb38, 0x95fa, 0x57b4, 0x1176, 0xd330, + 0xecf3, 0xae8d, 0x684f, 0x2a09, 0xe4cb, 0xa685, 0x6047, 0x2201, + 0xfcc3, 0xbe9d, 0x785f, 0x3a19, 0xf4db, 0xb695, 0x7057, 0x3211, + 0xcbd4, 0x89ea, 0x4fa8, 0x0d6e, 0xc32c, 0x81e2, 0x47a0, 0x0566, + 0xdb24, 0x99fa, 0x5fb8, 0x1d7e, 0xd33c, 0x91f2, 0x57b0, 0x1576, + 0x2a35, 0xe8cb, 0xae89, 0x6c4f, 0x220d, 0xe0c3, 0xa681, 0x6447, + 0x3a05, 0xf8db, 0xbe99, 0x7c5f, 0x321d, 0xf0d3, 0xb691, 0x7457, + 0x0916, 0xcb28, 0x8dea, 0x4fac, 0x016e, 0xc320, 0x85e2, 0x47a4, + 0x1966, 0xdb38, 0x9dfa, 0x5fbc, 0x117e, 0xd330, 0x95f2, 0x57b4, + 0x6877, 0x2a09, 0xeccb, 0xae8d, 0x604f, 0x2201, 0xe4c3, 0xa685, + 0x7847, 0x3a19, 0xfcdb, 0xbe9d, 0x705f, 0x3211, 0xf4d3, 0xb695, + 0x4758, 0x0566, 0xc324, 0x81e2, 0x4fa0, 0x0d6e, 0xcb2c, 0x89ea, + 0x57a8, 0x1576, 0xd334, 0x91f2, 0x5fb0, 0x1d7e, 0xdb3c, 0x99fa, + 0xa6b9, 0x6447, 0x2205, 0xe0c3, 0xae81, 0x6c4f, 0x2a0d, 0xe8cb, + 0xb689, 0x7457, 0x3215, 0xf0d3, 0xbe91, 0x7c5f, 0x3a1d, 0xf8db, + 0x859a, 0x47a4, 0x0166, 0xc320, 0x8de2, 0x4fac, 0x096e, 0xcb28, + 0x95ea, 0x57b4, 0x1176, 0xd330, 0x9df2, 0x5fbc, 0x197e, 0xdb38, + 0xe4fb, 0xa685, 0x6047, 0x2201, 0xecc3, 0xae8d, 0x684f, 0x2a09, + 0xf4cb, 0xb695, 0x7057, 0x3211, 0xfcd3, 0xbe9d, 0x785f, 0x3a19, + 0xc3dc, 0x81e2, 0x47a0, 0x0566, 0xcb24, 0x89ea, 0x4fa8, 0x0d6e, + 0xd32c, 0x91f2, 0x57b0, 0x1576, 0xdb34, 0x99fa, 0x5fb8, 0x1d7e, + 0x223d, 0xe0c3, 0xa681, 0x6447, 0x2a05, 0xe8cb, 0xae89, 0x6c4f, + 0x320d, 0xf0d3, 0xb691, 0x7457, 0x3a15, 0xf8db, 0xbe99, 0x7c5f, + 0x011e, 0xc320, 0x85e2, 0x47a4, 0x0966, 0xcb28, 0x8dea, 0x4fac, + 0x116e, 0xd330, 0x95f2, 0x57b4, 0x1976, 0xdb38, 0x9dfa, 0x5fbc, + 0x607f, 0x2201, 0xe4c3, 0xa685, 0x6847, 0x2a09, 0xeccb, 0xae8d, + 0x704f, 0x3211, 0xf4d3, 0xb695, 0x7857, 0x3a19, 0xfcdb, 0xbe9d, + 0x7f60, 0x3d5e, 0xfb1c, 0xb9da, 0x7798, 0x3556, 0xf314, 0xb1d2, + 0x6f90, 0x2d4e, 0xeb0c, 0xa9ca, 0x6788, 0x2546, 0xe304, 0xa1c2, + 0x9e81, 0x5c7f, 0x1a3d, 0xd8fb, 0x96b9, 0x5477, 0x1235, 0xd0f3, + 0x8eb1, 0x4c6f, 0x0a2d, 0xc8eb, 0x86a9, 0x4467, 0x0225, 0xc0e3, + 0xbda2, 0x7f9c, 0x395e, 0xfb18, 0xb5da, 0x7794, 0x3156, 0xf310, + 0xadd2, 0x6f8c, 0x294e, 0xeb08, 0xa5ca, 0x6784, 0x2146, 0xe300, + 0xdcc3, 0x9ebd, 0x587f, 0x1a39, 0xd4fb, 0x96b5, 0x5077, 0x1231, + 0xccf3, 0x8ead, 0x486f, 0x0a29, 0xc4eb, 0x86a5, 0x4067, 0x0221, + 0xfbe4, 0xb9da, 0x7f98, 0x3d5e, 0xf31c, 0xb1d2, 0x7790, 0x3556, + 0xeb14, 0xa9ca, 0x6f88, 0x2d4e, 0xe30c, 0xa1c2, 0x6780, 0x2546, + 0x1a05, 0xd8fb, 0x9eb9, 0x5c7f, 0x123d, 0xd0f3, 0x96b1, 0x5477, + 0x0a35, 0xc8eb, 0x8ea9, 0x4c6f, 0x022d, 0xc0e3, 0x86a1, 0x4467, + 0x3926, 0xfb18, 0xbdda, 0x7f9c, 0x315e, 0xf310, 0xb5d2, 0x7794, + 0x2956, 0xeb08, 0xadca, 0x6f8c, 0x214e, 0xe300, 0xa5c2, 0x6784, + 0x5847, 0x1a39, 0xdcfb, 0x9ebd, 0x507f, 0x1231, 0xd4f3, 0x96b5, + 0x4877, 0x0a29, 0xcceb, 0x8ead, 0x406f, 0x0221, 0xc4e3, 0x86a5, + 0x7768, 0x3556, 0xf314, 0xb1d2, 0x7f90, 0x3d5e, 0xfb1c, 0xb9da, + 0x6798, 0x2546, 0xe304, 0xa1c2, 0x6f80, 0x2d4e, 0xeb0c, 0xa9ca, + 0x9689, 0x5477, 0x1235, 0xd0f3, 0x9eb1, 0x5c7f, 0x1a3d, 0xd8fb, + 0x86b9, 0x4467, 0x0225, 0xc0e3, 0x8ea1, 0x4c6f, 0x0a2d, 0xc8eb, + 0xb5aa, 0x7794, 0x3156, 0xf310, 0xbdd2, 0x7f9c, 0x395e, 0xfb18, + 0xa5da, 0x6784, 0x2146, 0xe300, 0xadc2, 0x6f8c, 0x294e, 0xeb08, + 0xd4cb, 0x96b5, 0x5077, 0x1231, 0xdcf3, 0x9ebd, 0x587f, 0x1a39, + 0xc4fb, 0x86a5, 0x4067, 0x0221, 0xcce3, 0x8ead, 0x486f, 0x0a29, + 0xf3ec, 0xb1d2, 0x7790, 0x3556, 0xfb14, 0xb9da, 0x7f98, 0x3d5e, + 0xe31c, 0xa1c2, 0x6780, 0x2546, 0xeb04, 0xa9ca, 0x6f88, 0x2d4e, + 0x120d, 0xd0f3, 0x96b1, 0x5477, 0x1a35, 0xd8fb, 0x9eb9, 0x5c7f, + 0x023d, 0xc0e3, 0x86a1, 0x4467, 0x0a25, 0xc8eb, 0x8ea9, 0x4c6f, + 0x312e, 0xf310, 0xb5d2, 0x7794, 0x3956, 0xfb18, 0xbdda, 0x7f9c, + 0x215e, 0xe300, 0xa5c2, 0x6784, 0x2946, 0xeb08, 0xadca, 0x6f8c, + 0x504f, 0x1231, 0xd4f3, 0x96b5, 0x5877, 0x1a39, 0xdcfb, 0x9ebd, + 0x407f, 0x0221, 0xc4e3, 0x86a5, 0x4867, 0x0a29, 0xcceb, 0x8ead, + 0x6f70, 0x2d4e, 0xeb0c, 0xa9ca, 0x6788, 0x2546, 0xe304, 0xa1c2, + 0x7f80, 0x3d5e, 0xfb1c, 0xb9da, 0x7798, 0x3556, 0xf314, 0xb1d2, + 0x8e91, 0x4c6f, 0x0a2d, 0xc8eb, 0x86a9, 0x4467, 0x0225, 0xc0e3, + 0x9ea1, 0x5c7f, 0x1a3d, 0xd8fb, 0x96b9, 0x5477, 0x1235, 0xd0f3, + 0xadb2, 0x6f8c, 0x294e, 0xeb08, 0xa5ca, 0x6784, 0x2146, 0xe300, + 0xbdc2, 0x7f9c, 0x395e, 0xfb18, 0xb5da, 0x7794, 0x3156, 0xf310, + 0xccd3, 0x8ead, 0x486f, 0x0a29, 0xc4eb, 0x86a5, 0x4067, 0x0221, + 0xdce3, 0x9ebd, 0x587f, 0x1a39, 0xd4fb, 0x96b5, 0x5077, 0x1231, + 0xebf4, 0xa9ca, 0x6f88, 0x2d4e, 0xe30c, 0xa1c2, 0x6780, 0x2546, + 0xfb04, 0xb9da, 0x7f98, 0x3d5e, 0xf31c, 0xb1d2, 0x7790, 0x3556, + 0x0a15, 0xc8eb, 0x8ea9, 0x4c6f, 0x022d, 0xc0e3, 0x86a1, 0x4467, + 0x1a25, 0xd8fb, 0x9eb9, 0x5c7f, 0x123d, 0xd0f3, 0x96b1, 0x5477, + 0x2936, 0xeb08, 0xadca, 0x6f8c, 0x214e, 0xe300, 0xa5c2, 0x6784, + 0x3946, 0xfb18, 0xbdda, 0x7f9c, 0x315e, 0xf310, 0xb5d2, 0x7794, + 0x4857, 0x0a29, 0xcceb, 0x8ead, 0x406f, 0x0221, 0xc4e3, 0x86a5, + 0x5867, 0x1a39, 0xdcfb, 0x9ebd, 0x507f, 0x1231, 0xd4f3, 0x96b5, + 0x6778, 0x2546, 0xe304, 0xa1c2, 0x6f80, 0x2d4e, 0xeb0c, 0xa9ca, + 0x7788, 0x3556, 0xf314, 0xb1d2, 0x7f90, 0x3d5e, 0xfb1c, 0xb9da, + 0x8699, 0x4467, 0x0225, 0xc0e3, 0x8ea1, 0x4c6f, 0x0a2d, 0xc8eb, + 0x96a9, 0x5477, 0x1235, 0xd0f3, 0x9eb1, 0x5c7f, 0x1a3d, 0xd8fb, + 0xa5ba, 0x6784, 0x2146, 0xe300, 0xadc2, 0x6f8c, 0x294e, 0xeb08, + 0xb5ca, 0x7794, 0x3156, 0xf310, 0xbdd2, 0x7f9c, 0x395e, 0xfb18, + 0xc4db, 0x86a5, 0x4067, 0x0221, 0xcce3, 0x8ead, 0x486f, 0x0a29, + 0xd4eb, 0x96b5, 0x5077, 0x1231, 0xdcf3, 0x9ebd, 0x587f, 0x1a39, + 0xe3fc, 0xa1c2, 0x6780, 0x2546, 0xeb04, 0xa9ca, 0x6f88, 0x2d4e, + 0xf30c, 0xb1d2, 0x7790, 0x3556, 0xfb14, 0xb9da, 0x7f98, 0x3d5e, + 0x021d, 0xc0e3, 0x86a1, 0x4467, 0x0a25, 0xc8eb, 0x8ea9, 0x4c6f, + 0x122d, 0xd0f3, 0x96b1, 0x5477, 0x1a35, 0xd8fb, 0x9eb9, 0x5c7f, + 0x213e, 0xe300, 0xa5c2, 0x6784, 0x2946, 0xeb08, 0xadca, 0x6f8c, + 0x314e, 0xf310, 0xb5d2, 0x7794, 0x3956, 0xfb18, 0xbdda, 0x7f9c, + 0x405f, 0x0221, 0xc4e3, 0x86a5, 0x4867, 0x0a29, 0xcceb, 0x8ead, + 0x506f, 0x1231, 0xd4f3, 0x96b5, 0x5877, 0x1a39, 0xdcfb, 0x9ebd, + 0x9f80, 0xddbe, 0x1bfc, 0x593a, 0x9778, 0xd5b6, 0x13f4, 0x5132, + 0x8f70, 0xcdae, 0x0bec, 0x492a, 0x8768, 0xc5a6, 0x03e4, 0x4122, + 0x7e61, 0xbc9f, 0xfadd, 0x381b, 0x7659, 0xb497, 0xf2d5, 0x3013, + 0x6e51, 0xac8f, 0xeacd, 0x280b, 0x6649, 0xa487, 0xe2c5, 0x2003, + 0x5d42, 0x9f7c, 0xd9be, 0x1bf8, 0x553a, 0x9774, 0xd1b6, 0x13f0, + 0x4d32, 0x8f6c, 0xc9ae, 0x0be8, 0x452a, 0x8764, 0xc1a6, 0x03e0, + 0x3c23, 0x7e5d, 0xb89f, 0xfad9, 0x341b, 0x7655, 0xb097, 0xf2d1, + 0x2c13, 0x6e4d, 0xa88f, 0xeac9, 0x240b, 0x6645, 0xa087, 0xe2c1, + 0x1b04, 0x593a, 0x9f78, 0xddbe, 0x13fc, 0x5132, 0x9770, 0xd5b6, + 0x0bf4, 0x492a, 0x8f68, 0xcdae, 0x03ec, 0x4122, 0x8760, 0xc5a6, + 0xfae5, 0x381b, 0x7e59, 0xbc9f, 0xf2dd, 0x3013, 0x7651, 0xb497, + 0xead5, 0x280b, 0x6e49, 0xac8f, 0xe2cd, 0x2003, 0x6641, 0xa487, + 0xd9c6, 0x1bf8, 0x5d3a, 0x9f7c, 0xd1be, 0x13f0, 0x5532, 0x9774, + 0xc9b6, 0x0be8, 0x4d2a, 0x8f6c, 0xc1ae, 0x03e0, 0x4522, 0x8764, + 0xb8a7, 0xfad9, 0x3c1b, 0x7e5d, 0xb09f, 0xf2d1, 0x3413, 0x7655, + 0xa897, 0xeac9, 0x2c0b, 0x6e4d, 0xa08f, 0xe2c1, 0x2403, 0x6645, + 0x9788, 0xd5b6, 0x13f4, 0x5132, 0x9f70, 0xddbe, 0x1bfc, 0x593a, + 0x8778, 0xc5a6, 0x03e4, 0x4122, 0x8f60, 0xcdae, 0x0bec, 0x492a, + 0x7669, 0xb497, 0xf2d5, 0x3013, 0x7e51, 0xbc9f, 0xfadd, 0x381b, + 0x6659, 0xa487, 0xe2c5, 0x2003, 0x6e41, 0xac8f, 0xeacd, 0x280b, + 0x554a, 0x9774, 0xd1b6, 0x13f0, 0x5d32, 0x9f7c, 0xd9be, 0x1bf8, + 0x453a, 0x8764, 0xc1a6, 0x03e0, 0x4d22, 0x8f6c, 0xc9ae, 0x0be8, + 0x342b, 0x7655, 0xb097, 0xf2d1, 0x3c13, 0x7e5d, 0xb89f, 0xfad9, + 0x241b, 0x6645, 0xa087, 0xe2c1, 0x2c03, 0x6e4d, 0xa88f, 0xeac9, + 0x130c, 0x5132, 0x9770, 0xd5b6, 0x1bf4, 0x593a, 0x9f78, 0xddbe, + 0x03fc, 0x4122, 0x8760, 0xc5a6, 0x0be4, 0x492a, 0x8f68, 0xcdae, + 0xf2ed, 0x3013, 0x7651, 0xb497, 0xfad5, 0x381b, 0x7e59, 0xbc9f, + 0xe2dd, 0x2003, 0x6641, 0xa487, 0xeac5, 0x280b, 0x6e49, 0xac8f, + 0xd1ce, 0x13f0, 0x5532, 0x9774, 0xd9b6, 0x1bf8, 0x5d3a, 0x9f7c, + 0xc1be, 0x03e0, 0x4522, 0x8764, 0xc9a6, 0x0be8, 0x4d2a, 0x8f6c, + 0xb0af, 0xf2d1, 0x3413, 0x7655, 0xb897, 0xfad9, 0x3c1b, 0x7e5d, + 0xa09f, 0xe2c1, 0x2403, 0x6645, 0xa887, 0xeac9, 0x2c0b, 0x6e4d, + 0x8f90, 0xcdae, 0x0bec, 0x492a, 0x8768, 0xc5a6, 0x03e4, 0x4122, + 0x9f60, 0xddbe, 0x1bfc, 0x593a, 0x9778, 0xd5b6, 0x13f4, 0x5132, + 0x6e71, 0xac8f, 0xeacd, 0x280b, 0x6649, 0xa487, 0xe2c5, 0x2003, + 0x7e41, 0xbc9f, 0xfadd, 0x381b, 0x7659, 0xb497, 0xf2d5, 0x3013, + 0x4d52, 0x8f6c, 0xc9ae, 0x0be8, 0x452a, 0x8764, 0xc1a6, 0x03e0, + 0x5d22, 0x9f7c, 0xd9be, 0x1bf8, 0x553a, 0x9774, 0xd1b6, 0x13f0, + 0x2c33, 0x6e4d, 0xa88f, 0xeac9, 0x240b, 0x6645, 0xa087, 0xe2c1, + 0x3c03, 0x7e5d, 0xb89f, 0xfad9, 0x341b, 0x7655, 0xb097, 0xf2d1, + 0x0b14, 0x492a, 0x8f68, 0xcdae, 0x03ec, 0x4122, 0x8760, 0xc5a6, + 0x1be4, 0x593a, 0x9f78, 0xddbe, 0x13fc, 0x5132, 0x9770, 0xd5b6, + 0xeaf5, 0x280b, 0x6e49, 0xac8f, 0xe2cd, 0x2003, 0x6641, 0xa487, + 0xfac5, 0x381b, 0x7e59, 0xbc9f, 0xf2dd, 0x3013, 0x7651, 0xb497, + 0xc9d6, 0x0be8, 0x4d2a, 0x8f6c, 0xc1ae, 0x03e0, 0x4522, 0x8764, + 0xd9a6, 0x1bf8, 0x5d3a, 0x9f7c, 0xd1be, 0x13f0, 0x5532, 0x9774, + 0xa8b7, 0xeac9, 0x2c0b, 0x6e4d, 0xa08f, 0xe2c1, 0x2403, 0x6645, + 0xb887, 0xfad9, 0x3c1b, 0x7e5d, 0xb09f, 0xf2d1, 0x3413, 0x7655, + 0x8798, 0xc5a6, 0x03e4, 0x4122, 0x8f60, 0xcdae, 0x0bec, 0x492a, + 0x9768, 0xd5b6, 0x13f4, 0x5132, 0x9f70, 0xddbe, 0x1bfc, 0x593a, + 0x6679, 0xa487, 0xe2c5, 0x2003, 0x6e41, 0xac8f, 0xeacd, 0x280b, + 0x7649, 0xb497, 0xf2d5, 0x3013, 0x7e51, 0xbc9f, 0xfadd, 0x381b, + 0x455a, 0x8764, 0xc1a6, 0x03e0, 0x4d22, 0x8f6c, 0xc9ae, 0x0be8, + 0x552a, 0x9774, 0xd1b6, 0x13f0, 0x5d32, 0x9f7c, 0xd9be, 0x1bf8, + 0x243b, 0x6645, 0xa087, 0xe2c1, 0x2c03, 0x6e4d, 0xa88f, 0xeac9, + 0x340b, 0x7655, 0xb097, 0xf2d1, 0x3c13, 0x7e5d, 0xb89f, 0xfad9, + 0x031c, 0x4122, 0x8760, 0xc5a6, 0x0be4, 0x492a, 0x8f68, 0xcdae, + 0x13ec, 0x5132, 0x9770, 0xd5b6, 0x1bf4, 0x593a, 0x9f78, 0xddbe, + 0xe2fd, 0x2003, 0x6641, 0xa487, 0xeac5, 0x280b, 0x6e49, 0xac8f, + 0xf2cd, 0x3013, 0x7651, 0xb497, 0xfad5, 0x381b, 0x7e59, 0xbc9f, + 0xc1de, 0x03e0, 0x4522, 0x8764, 0xc9a6, 0x0be8, 0x4d2a, 0x8f6c, + 0xd1ae, 0x13f0, 0x5532, 0x9774, 0xd9b6, 0x1bf8, 0x5d3a, 0x9f7c, + 0xa0bf, 0xe2c1, 0x2403, 0x6645, 0xa887, 0xeac9, 0x2c0b, 0x6e4d, + 0xb08f, 0xf2d1, 0x3413, 0x7655, 0xb897, 0xfad9, 0x3c1b, 0x7e5d, + 0xbfa0, 0xfd9e, 0x3bdc, 0x791a, 0xb758, 0xf596, 0x33d4, 0x7112, + 0xaf50, 0xed8e, 0x2bcc, 0x690a, 0xa748, 0xe586, 0x23c4, 0x6102, + 0x5e41, 0x9cbf, 0xdafd, 0x183b, 0x5679, 0x94b7, 0xd2f5, 0x1033, + 0x4e71, 0x8caf, 0xcaed, 0x082b, 0x4669, 0x84a7, 0xc2e5, 0x0023, + 0x7d62, 0xbf5c, 0xf99e, 0x3bd8, 0x751a, 0xb754, 0xf196, 0x33d0, + 0x6d12, 0xaf4c, 0xe98e, 0x2bc8, 0x650a, 0xa744, 0xe186, 0x23c0, + 0x1c03, 0x5e7d, 0x98bf, 0xdaf9, 0x143b, 0x5675, 0x90b7, 0xd2f1, + 0x0c33, 0x4e6d, 0x88af, 0xcae9, 0x042b, 0x4665, 0x80a7, 0xc2e1, + 0x3b24, 0x791a, 0xbf58, 0xfd9e, 0x33dc, 0x7112, 0xb750, 0xf596, + 0x2bd4, 0x690a, 0xaf48, 0xed8e, 0x23cc, 0x6102, 0xa740, 0xe586, + 0xdac5, 0x183b, 0x5e79, 0x9cbf, 0xd2fd, 0x1033, 0x5671, 0x94b7, + 0xcaf5, 0x082b, 0x4e69, 0x8caf, 0xc2ed, 0x0023, 0x4661, 0x84a7, + 0xf9e6, 0x3bd8, 0x7d1a, 0xbf5c, 0xf19e, 0x33d0, 0x7512, 0xb754, + 0xe996, 0x2bc8, 0x6d0a, 0xaf4c, 0xe18e, 0x23c0, 0x6502, 0xa744, + 0x9887, 0xdaf9, 0x1c3b, 0x5e7d, 0x90bf, 0xd2f1, 0x1433, 0x5675, + 0x88b7, 0xcae9, 0x0c2b, 0x4e6d, 0x80af, 0xc2e1, 0x0423, 0x4665, + 0xb7a8, 0xf596, 0x33d4, 0x7112, 0xbf50, 0xfd9e, 0x3bdc, 0x791a, + 0xa758, 0xe586, 0x23c4, 0x6102, 0xaf40, 0xed8e, 0x2bcc, 0x690a, + 0x5649, 0x94b7, 0xd2f5, 0x1033, 0x5e71, 0x9cbf, 0xdafd, 0x183b, + 0x4679, 0x84a7, 0xc2e5, 0x0023, 0x4e61, 0x8caf, 0xcaed, 0x082b, + 0x756a, 0xb754, 0xf196, 0x33d0, 0x7d12, 0xbf5c, 0xf99e, 0x3bd8, + 0x651a, 0xa744, 0xe186, 0x23c0, 0x6d02, 0xaf4c, 0xe98e, 0x2bc8, + 0x140b, 0x5675, 0x90b7, 0xd2f1, 0x1c33, 0x5e7d, 0x98bf, 0xdaf9, + 0x043b, 0x4665, 0x80a7, 0xc2e1, 0x0c23, 0x4e6d, 0x88af, 0xcae9, + 0x332c, 0x7112, 0xb750, 0xf596, 0x3bd4, 0x791a, 0xbf58, 0xfd9e, + 0x23dc, 0x6102, 0xa740, 0xe586, 0x2bc4, 0x690a, 0xaf48, 0xed8e, + 0xd2cd, 0x1033, 0x5671, 0x94b7, 0xdaf5, 0x183b, 0x5e79, 0x9cbf, + 0xc2fd, 0x0023, 0x4661, 0x84a7, 0xcae5, 0x082b, 0x4e69, 0x8caf, + 0xf1ee, 0x33d0, 0x7512, 0xb754, 0xf996, 0x3bd8, 0x7d1a, 0xbf5c, + 0xe19e, 0x23c0, 0x6502, 0xa744, 0xe986, 0x2bc8, 0x6d0a, 0xaf4c, + 0x908f, 0xd2f1, 0x1433, 0x5675, 0x98b7, 0xdaf9, 0x1c3b, 0x5e7d, + 0x80bf, 0xc2e1, 0x0423, 0x4665, 0x88a7, 0xcae9, 0x0c2b, 0x4e6d, + 0xafb0, 0xed8e, 0x2bcc, 0x690a, 0xa748, 0xe586, 0x23c4, 0x6102, + 0xbf40, 0xfd9e, 0x3bdc, 0x791a, 0xb758, 0xf596, 0x33d4, 0x7112, + 0x4e51, 0x8caf, 0xcaed, 0x082b, 0x4669, 0x84a7, 0xc2e5, 0x0023, + 0x5e61, 0x9cbf, 0xdafd, 0x183b, 0x5679, 0x94b7, 0xd2f5, 0x1033, + 0x6d72, 0xaf4c, 0xe98e, 0x2bc8, 0x650a, 0xa744, 0xe186, 0x23c0, + 0x7d02, 0xbf5c, 0xf99e, 0x3bd8, 0x751a, 0xb754, 0xf196, 0x33d0, + 0x0c13, 0x4e6d, 0x88af, 0xcae9, 0x042b, 0x4665, 0x80a7, 0xc2e1, + 0x1c23, 0x5e7d, 0x98bf, 0xdaf9, 0x143b, 0x5675, 0x90b7, 0xd2f1, + 0x2b34, 0x690a, 0xaf48, 0xed8e, 0x23cc, 0x6102, 0xa740, 0xe586, + 0x3bc4, 0x791a, 0xbf58, 0xfd9e, 0x33dc, 0x7112, 0xb750, 0xf596, + 0xcad5, 0x082b, 0x4e69, 0x8caf, 0xc2ed, 0x0023, 0x4661, 0x84a7, + 0xdae5, 0x183b, 0x5e79, 0x9cbf, 0xd2fd, 0x1033, 0x5671, 0x94b7, + 0xe9f6, 0x2bc8, 0x6d0a, 0xaf4c, 0xe18e, 0x23c0, 0x6502, 0xa744, + 0xf986, 0x3bd8, 0x7d1a, 0xbf5c, 0xf19e, 0x33d0, 0x7512, 0xb754, + 0x8897, 0xcae9, 0x0c2b, 0x4e6d, 0x80af, 0xc2e1, 0x0423, 0x4665, + 0x98a7, 0xdaf9, 0x1c3b, 0x5e7d, 0x90bf, 0xd2f1, 0x1433, 0x5675, + 0xa7b8, 0xe586, 0x23c4, 0x6102, 0xaf40, 0xed8e, 0x2bcc, 0x690a, + 0xb748, 0xf596, 0x33d4, 0x7112, 0xbf50, 0xfd9e, 0x3bdc, 0x791a, + 0x4659, 0x84a7, 0xc2e5, 0x0023, 0x4e61, 0x8caf, 0xcaed, 0x082b, + 0x5669, 0x94b7, 0xd2f5, 0x1033, 0x5e71, 0x9cbf, 0xdafd, 0x183b, + 0x657a, 0xa744, 0xe186, 0x23c0, 0x6d02, 0xaf4c, 0xe98e, 0x2bc8, + 0x750a, 0xb754, 0xf196, 0x33d0, 0x7d12, 0xbf5c, 0xf99e, 0x3bd8, + 0x041b, 0x4665, 0x80a7, 0xc2e1, 0x0c23, 0x4e6d, 0x88af, 0xcae9, + 0x142b, 0x5675, 0x90b7, 0xd2f1, 0x1c33, 0x5e7d, 0x98bf, 0xdaf9, + 0x233c, 0x6102, 0xa740, 0xe586, 0x2bc4, 0x690a, 0xaf48, 0xed8e, + 0x33cc, 0x7112, 0xb750, 0xf596, 0x3bd4, 0x791a, 0xbf58, 0xfd9e, + 0xc2dd, 0x0023, 0x4661, 0x84a7, 0xcae5, 0x082b, 0x4e69, 0x8caf, + 0xd2ed, 0x1033, 0x5671, 0x94b7, 0xdaf5, 0x183b, 0x5e79, 0x9cbf, + 0xe1fe, 0x23c0, 0x6502, 0xa744, 0xe986, 0x2bc8, 0x6d0a, 0xaf4c, + 0xf18e, 0x33d0, 0x7512, 0xb754, 0xf996, 0x3bd8, 0x7d1a, 0xbf5c, + 0x809f, 0xc2e1, 0x0423, 0x4665, 0x88a7, 0xcae9, 0x0c2b, 0x4e6d, + 0x90af, 0xd2f1, 0x1433, 0x5675, 0x98b7, 0xdaf9, 0x1c3b, 0x5e7d, + 0xdfc0, 0x9dfe, 0x5bbc, 0x197a, 0xd738, 0x95f6, 0x53b4, 0x1172, + 0xcf30, 0x8dee, 0x4bac, 0x096a, 0xc728, 0x85e6, 0x43a4, 0x0162, + 0x3e21, 0xfcdf, 0xba9d, 0x785b, 0x3619, 0xf4d7, 0xb295, 0x7053, + 0x2e11, 0xeccf, 0xaa8d, 0x684b, 0x2609, 0xe4c7, 0xa285, 0x6043, + 0x1d02, 0xdf3c, 0x99fe, 0x5bb8, 0x157a, 0xd734, 0x91f6, 0x53b0, + 0x0d72, 0xcf2c, 0x89ee, 0x4ba8, 0x056a, 0xc724, 0x81e6, 0x43a0, + 0x7c63, 0x3e1d, 0xf8df, 0xba99, 0x745b, 0x3615, 0xf0d7, 0xb291, + 0x6c53, 0x2e0d, 0xe8cf, 0xaa89, 0x644b, 0x2605, 0xe0c7, 0xa281, + 0x5b44, 0x197a, 0xdf38, 0x9dfe, 0x53bc, 0x1172, 0xd730, 0x95f6, + 0x4bb4, 0x096a, 0xcf28, 0x8dee, 0x43ac, 0x0162, 0xc720, 0x85e6, + 0xbaa5, 0x785b, 0x3e19, 0xfcdf, 0xb29d, 0x7053, 0x3611, 0xf4d7, + 0xaa95, 0x684b, 0x2e09, 0xeccf, 0xa28d, 0x6043, 0x2601, 0xe4c7, + 0x9986, 0x5bb8, 0x1d7a, 0xdf3c, 0x91fe, 0x53b0, 0x1572, 0xd734, + 0x89f6, 0x4ba8, 0x0d6a, 0xcf2c, 0x81ee, 0x43a0, 0x0562, 0xc724, + 0xf8e7, 0xba99, 0x7c5b, 0x3e1d, 0xf0df, 0xb291, 0x7453, 0x3615, + 0xe8d7, 0xaa89, 0x6c4b, 0x2e0d, 0xe0cf, 0xa281, 0x6443, 0x2605, + 0xd7c8, 0x95f6, 0x53b4, 0x1172, 0xdf30, 0x9dfe, 0x5bbc, 0x197a, + 0xc738, 0x85e6, 0x43a4, 0x0162, 0xcf20, 0x8dee, 0x4bac, 0x096a, + 0x3629, 0xf4d7, 0xb295, 0x7053, 0x3e11, 0xfcdf, 0xba9d, 0x785b, + 0x2619, 0xe4c7, 0xa285, 0x6043, 0x2e01, 0xeccf, 0xaa8d, 0x684b, + 0x150a, 0xd734, 0x91f6, 0x53b0, 0x1d72, 0xdf3c, 0x99fe, 0x5bb8, + 0x057a, 0xc724, 0x81e6, 0x43a0, 0x0d62, 0xcf2c, 0x89ee, 0x4ba8, + 0x746b, 0x3615, 0xf0d7, 0xb291, 0x7c53, 0x3e1d, 0xf8df, 0xba99, + 0x645b, 0x2605, 0xe0c7, 0xa281, 0x6c43, 0x2e0d, 0xe8cf, 0xaa89, + 0x534c, 0x1172, 0xd730, 0x95f6, 0x5bb4, 0x197a, 0xdf38, 0x9dfe, + 0x43bc, 0x0162, 0xc720, 0x85e6, 0x4ba4, 0x096a, 0xcf28, 0x8dee, + 0xb2ad, 0x7053, 0x3611, 0xf4d7, 0xba95, 0x785b, 0x3e19, 0xfcdf, + 0xa29d, 0x6043, 0x2601, 0xe4c7, 0xaa85, 0x684b, 0x2e09, 0xeccf, + 0x918e, 0x53b0, 0x1572, 0xd734, 0x99f6, 0x5bb8, 0x1d7a, 0xdf3c, + 0x81fe, 0x43a0, 0x0562, 0xc724, 0x89e6, 0x4ba8, 0x0d6a, 0xcf2c, + 0xf0ef, 0xb291, 0x7453, 0x3615, 0xf8d7, 0xba99, 0x7c5b, 0x3e1d, + 0xe0df, 0xa281, 0x6443, 0x2605, 0xe8c7, 0xaa89, 0x6c4b, 0x2e0d, + 0xcfd0, 0x8dee, 0x4bac, 0x096a, 0xc728, 0x85e6, 0x43a4, 0x0162, + 0xdf20, 0x9dfe, 0x5bbc, 0x197a, 0xd738, 0x95f6, 0x53b4, 0x1172, + 0x2e31, 0xeccf, 0xaa8d, 0x684b, 0x2609, 0xe4c7, 0xa285, 0x6043, + 0x3e01, 0xfcdf, 0xba9d, 0x785b, 0x3619, 0xf4d7, 0xb295, 0x7053, + 0x0d12, 0xcf2c, 0x89ee, 0x4ba8, 0x056a, 0xc724, 0x81e6, 0x43a0, + 0x1d62, 0xdf3c, 0x99fe, 0x5bb8, 0x157a, 0xd734, 0x91f6, 0x53b0, + 0x6c73, 0x2e0d, 0xe8cf, 0xaa89, 0x644b, 0x2605, 0xe0c7, 0xa281, + 0x7c43, 0x3e1d, 0xf8df, 0xba99, 0x745b, 0x3615, 0xf0d7, 0xb291, + 0x4b54, 0x096a, 0xcf28, 0x8dee, 0x43ac, 0x0162, 0xc720, 0x85e6, + 0x5ba4, 0x197a, 0xdf38, 0x9dfe, 0x53bc, 0x1172, 0xd730, 0x95f6, + 0xaab5, 0x684b, 0x2e09, 0xeccf, 0xa28d, 0x6043, 0x2601, 0xe4c7, + 0xba85, 0x785b, 0x3e19, 0xfcdf, 0xb29d, 0x7053, 0x3611, 0xf4d7, + 0x8996, 0x4ba8, 0x0d6a, 0xcf2c, 0x81ee, 0x43a0, 0x0562, 0xc724, + 0x99e6, 0x5bb8, 0x1d7a, 0xdf3c, 0x91fe, 0x53b0, 0x1572, 0xd734, + 0xe8f7, 0xaa89, 0x6c4b, 0x2e0d, 0xe0cf, 0xa281, 0x6443, 0x2605, + 0xf8c7, 0xba99, 0x7c5b, 0x3e1d, 0xf0df, 0xb291, 0x7453, 0x3615, + 0xc7d8, 0x85e6, 0x43a4, 0x0162, 0xcf20, 0x8dee, 0x4bac, 0x096a, + 0xd728, 0x95f6, 0x53b4, 0x1172, 0xdf30, 0x9dfe, 0x5bbc, 0x197a, + 0x2639, 0xe4c7, 0xa285, 0x6043, 0x2e01, 0xeccf, 0xaa8d, 0x684b, + 0x3609, 0xf4d7, 0xb295, 0x7053, 0x3e11, 0xfcdf, 0xba9d, 0x785b, + 0x051a, 0xc724, 0x81e6, 0x43a0, 0x0d62, 0xcf2c, 0x89ee, 0x4ba8, + 0x156a, 0xd734, 0x91f6, 0x53b0, 0x1d72, 0xdf3c, 0x99fe, 0x5bb8, + 0x647b, 0x2605, 0xe0c7, 0xa281, 0x6c43, 0x2e0d, 0xe8cf, 0xaa89, + 0x744b, 0x3615, 0xf0d7, 0xb291, 0x7c53, 0x3e1d, 0xf8df, 0xba99, + 0x435c, 0x0162, 0xc720, 0x85e6, 0x4ba4, 0x096a, 0xcf28, 0x8dee, + 0x53ac, 0x1172, 0xd730, 0x95f6, 0x5bb4, 0x197a, 0xdf38, 0x9dfe, + 0xa2bd, 0x6043, 0x2601, 0xe4c7, 0xaa85, 0x684b, 0x2e09, 0xeccf, + 0xb28d, 0x7053, 0x3611, 0xf4d7, 0xba95, 0x785b, 0x3e19, 0xfcdf, + 0x819e, 0x43a0, 0x0562, 0xc724, 0x89e6, 0x4ba8, 0x0d6a, 0xcf2c, + 0x91ee, 0x53b0, 0x1572, 0xd734, 0x99f6, 0x5bb8, 0x1d7a, 0xdf3c, + 0xe0ff, 0xa281, 0x6443, 0x2605, 0xe8c7, 0xaa89, 0x6c4b, 0x2e0d, + 0xf0cf, 0xb291, 0x7453, 0x3615, 0xf8d7, 0xba99, 0x7c5b, 0x3e1d, + 0xffe0, 0xbdde, 0x7b9c, 0x395a, 0xf718, 0xb5d6, 0x7394, 0x3152, + 0xef10, 0xadce, 0x6b8c, 0x294a, 0xe708, 0xa5c6, 0x6384, 0x2142, + 0x1e01, 0xdcff, 0x9abd, 0x587b, 0x1639, 0xd4f7, 0x92b5, 0x5073, + 0x0e31, 0xccef, 0x8aad, 0x486b, 0x0629, 0xc4e7, 0x82a5, 0x4063, + 0x3d22, 0xff1c, 0xb9de, 0x7b98, 0x355a, 0xf714, 0xb1d6, 0x7390, + 0x2d52, 0xef0c, 0xa9ce, 0x6b88, 0x254a, 0xe704, 0xa1c6, 0x6380, + 0x5c43, 0x1e3d, 0xd8ff, 0x9ab9, 0x547b, 0x1635, 0xd0f7, 0x92b1, + 0x4c73, 0x0e2d, 0xc8ef, 0x8aa9, 0x446b, 0x0625, 0xc0e7, 0x82a1, + 0x7b64, 0x395a, 0xff18, 0xbdde, 0x739c, 0x3152, 0xf710, 0xb5d6, + 0x6b94, 0x294a, 0xef08, 0xadce, 0x638c, 0x2142, 0xe700, 0xa5c6, + 0x9a85, 0x587b, 0x1e39, 0xdcff, 0x92bd, 0x5073, 0x1631, 0xd4f7, + 0x8ab5, 0x486b, 0x0e29, 0xccef, 0x82ad, 0x4063, 0x0621, 0xc4e7, + 0xb9a6, 0x7b98, 0x3d5a, 0xff1c, 0xb1de, 0x7390, 0x3552, 0xf714, + 0xa9d6, 0x6b88, 0x2d4a, 0xef0c, 0xa1ce, 0x6380, 0x2542, 0xe704, + 0xd8c7, 0x9ab9, 0x5c7b, 0x1e3d, 0xd0ff, 0x92b1, 0x5473, 0x1635, + 0xc8f7, 0x8aa9, 0x4c6b, 0x0e2d, 0xc0ef, 0x82a1, 0x4463, 0x0625, + 0xf7e8, 0xb5d6, 0x7394, 0x3152, 0xff10, 0xbdde, 0x7b9c, 0x395a, + 0xe718, 0xa5c6, 0x6384, 0x2142, 0xef00, 0xadce, 0x6b8c, 0x294a, + 0x1609, 0xd4f7, 0x92b5, 0x5073, 0x1e31, 0xdcff, 0x9abd, 0x587b, + 0x0639, 0xc4e7, 0x82a5, 0x4063, 0x0e21, 0xccef, 0x8aad, 0x486b, + 0x352a, 0xf714, 0xb1d6, 0x7390, 0x3d52, 0xff1c, 0xb9de, 0x7b98, + 0x255a, 0xe704, 0xa1c6, 0x6380, 0x2d42, 0xef0c, 0xa9ce, 0x6b88, + 0x544b, 0x1635, 0xd0f7, 0x92b1, 0x5c73, 0x1e3d, 0xd8ff, 0x9ab9, + 0x447b, 0x0625, 0xc0e7, 0x82a1, 0x4c63, 0x0e2d, 0xc8ef, 0x8aa9, + 0x736c, 0x3152, 0xf710, 0xb5d6, 0x7b94, 0x395a, 0xff18, 0xbdde, + 0x639c, 0x2142, 0xe700, 0xa5c6, 0x6b84, 0x294a, 0xef08, 0xadce, + 0x928d, 0x5073, 0x1631, 0xd4f7, 0x9ab5, 0x587b, 0x1e39, 0xdcff, + 0x82bd, 0x4063, 0x0621, 0xc4e7, 0x8aa5, 0x486b, 0x0e29, 0xccef, + 0xb1ae, 0x7390, 0x3552, 0xf714, 0xb9d6, 0x7b98, 0x3d5a, 0xff1c, + 0xa1de, 0x6380, 0x2542, 0xe704, 0xa9c6, 0x6b88, 0x2d4a, 0xef0c, + 0xd0cf, 0x92b1, 0x5473, 0x1635, 0xd8f7, 0x9ab9, 0x5c7b, 0x1e3d, + 0xc0ff, 0x82a1, 0x4463, 0x0625, 0xc8e7, 0x8aa9, 0x4c6b, 0x0e2d, + 0xeff0, 0xadce, 0x6b8c, 0x294a, 0xe708, 0xa5c6, 0x6384, 0x2142, + 0xff00, 0xbdde, 0x7b9c, 0x395a, 0xf718, 0xb5d6, 0x7394, 0x3152, + 0x0e11, 0xccef, 0x8aad, 0x486b, 0x0629, 0xc4e7, 0x82a5, 0x4063, + 0x1e21, 0xdcff, 0x9abd, 0x587b, 0x1639, 0xd4f7, 0x92b5, 0x5073, + 0x2d32, 0xef0c, 0xa9ce, 0x6b88, 0x254a, 0xe704, 0xa1c6, 0x6380, + 0x3d42, 0xff1c, 0xb9de, 0x7b98, 0x355a, 0xf714, 0xb1d6, 0x7390, + 0x4c53, 0x0e2d, 0xc8ef, 0x8aa9, 0x446b, 0x0625, 0xc0e7, 0x82a1, + 0x5c63, 0x1e3d, 0xd8ff, 0x9ab9, 0x547b, 0x1635, 0xd0f7, 0x92b1, + 0x6b74, 0x294a, 0xef08, 0xadce, 0x638c, 0x2142, 0xe700, 0xa5c6, + 0x7b84, 0x395a, 0xff18, 0xbdde, 0x739c, 0x3152, 0xf710, 0xb5d6, + 0x8a95, 0x486b, 0x0e29, 0xccef, 0x82ad, 0x4063, 0x0621, 0xc4e7, + 0x9aa5, 0x587b, 0x1e39, 0xdcff, 0x92bd, 0x5073, 0x1631, 0xd4f7, + 0xa9b6, 0x6b88, 0x2d4a, 0xef0c, 0xa1ce, 0x6380, 0x2542, 0xe704, + 0xb9c6, 0x7b98, 0x3d5a, 0xff1c, 0xb1de, 0x7390, 0x3552, 0xf714, + 0xc8d7, 0x8aa9, 0x4c6b, 0x0e2d, 0xc0ef, 0x82a1, 0x4463, 0x0625, + 0xd8e7, 0x9ab9, 0x5c7b, 0x1e3d, 0xd0ff, 0x92b1, 0x5473, 0x1635, + 0xe7f8, 0xa5c6, 0x6384, 0x2142, 0xef00, 0xadce, 0x6b8c, 0x294a, + 0xf708, 0xb5d6, 0x7394, 0x3152, 0xff10, 0xbdde, 0x7b9c, 0x395a, + 0x0619, 0xc4e7, 0x82a5, 0x4063, 0x0e21, 0xccef, 0x8aad, 0x486b, + 0x1629, 0xd4f7, 0x92b5, 0x5073, 0x1e31, 0xdcff, 0x9abd, 0x587b, + 0x253a, 0xe704, 0xa1c6, 0x6380, 0x2d42, 0xef0c, 0xa9ce, 0x6b88, + 0x354a, 0xf714, 0xb1d6, 0x7390, 0x3d52, 0xff1c, 0xb9de, 0x7b98, + 0x445b, 0x0625, 0xc0e7, 0x82a1, 0x4c63, 0x0e2d, 0xc8ef, 0x8aa9, + 0x546b, 0x1635, 0xd0f7, 0x92b1, 0x5c73, 0x1e3d, 0xd8ff, 0x9ab9, + 0x637c, 0x2142, 0xe700, 0xa5c6, 0x6b84, 0x294a, 0xef08, 0xadce, + 0x738c, 0x3152, 0xf710, 0xb5d6, 0x7b94, 0x395a, 0xff18, 0xbdde, + 0x829d, 0x4063, 0x0621, 0xc4e7, 0x8aa5, 0x486b, 0x0e29, 0xccef, + 0x92ad, 0x5073, 0x1631, 0xd4f7, 0x9ab5, 0x587b, 0x1e39, 0xdcff, + 0xa1be, 0x6380, 0x2542, 0xe704, 0xa9c6, 0x6b88, 0x2d4a, 0xef0c, + 0xb1ce, 0x7390, 0x3552, 0xf714, 0xb9d6, 0x7b98, 0x3d5a, 0xff1c, + 0xc0df, 0x82a1, 0x4463, 0x0625, 0xc8e7, 0x8aa9, 0x4c6b, 0x0e2d, + 0xd0ef, 0x92b1, 0x5473, 0x1635, 0xd8f7, 0x9ab9, 0x5c7b, 0x1e3d, +}; +static const unsigned char sb_mldsa87_sig[] = { + 0x79, 0x03, 0xc2, 0x66, 0x0b, 0xfe, 0x7d, 0x81, 0x00, 0x61, 0x05, 0x27, + 0x1b, 0x47, 0x98, 0x26, 0x68, 0x5a, 0xf4, 0xdc, 0xd1, 0x0f, 0xd4, 0xf9, + 0x40, 0x77, 0xec, 0x04, 0x97, 0x81, 0xf2, 0x71, 0x33, 0x83, 0xbc, 0xea, + 0x28, 0xd9, 0x0d, 0xd2, 0x29, 0xda, 0xfd, 0x12, 0x36, 0xd2, 0x5a, 0x35, + 0xd3, 0x46, 0xcc, 0xb3, 0x84, 0x21, 0xbb, 0x73, 0x18, 0x76, 0x24, 0x0e, + 0x1e, 0x0d, 0x14, 0xf5, 0x1a, 0x2b, 0xf8, 0x2e, 0xb6, 0x7a, 0x48, 0xa4, + 0xa6, 0x22, 0x5a, 0xbd, 0x0c, 0xff, 0x3b, 0x5a, 0x47, 0x98, 0xf8, 0x1c, + 0x4e, 0xcb, 0xcd, 0xbb, 0x2c, 0x69, 0x27, 0xa1, 0xe1, 0x5b, 0xdb, 0x7c, + 0x77, 0x76, 0x65, 0xa0, 0xe2, 0xf8, 0x94, 0x20, 0xe2, 0x01, 0x92, 0x6e, + 0xfe, 0x04, 0x0f, 0x5f, 0x6b, 0x2a, 0xde, 0x77, 0xf5, 0xa7, 0x12, 0x8c, + 0xc6, 0xe3, 0x5e, 0xa7, 0xb4, 0xf8, 0x3f, 0x54, 0xd4, 0x14, 0x89, 0x28, + 0x79, 0xb4, 0xe8, 0x33, 0x8c, 0x99, 0x96, 0x28, 0x74, 0xc3, 0xe7, 0x75, + 0x92, 0xcb, 0x83, 0x9a, 0x49, 0x25, 0x5f, 0xa3, 0xf7, 0xe1, 0xe9, 0x27, + 0x30, 0xbd, 0xbb, 0x12, 0xbf, 0x16, 0xc5, 0x7b, 0x27, 0xb4, 0x36, 0xb4, + 0xc9, 0x5d, 0xc1, 0x7b, 0xf1, 0x2b, 0xc7, 0xc5, 0x66, 0x5c, 0xc8, 0x68, + 0x48, 0x45, 0xbf, 0x27, 0x3f, 0x05, 0x31, 0xfc, 0xa0, 0xb7, 0xdc, 0x02, + 0x97, 0x4b, 0xdc, 0xb9, 0xce, 0x71, 0xc6, 0x40, 0x77, 0x43, 0x17, 0xeb, + 0xcb, 0xa1, 0x2e, 0x1a, 0xa5, 0x4e, 0x84, 0x70, 0x25, 0xe6, 0x8c, 0xc4, + 0x91, 0x70, 0x27, 0x77, 0x5f, 0x1d, 0xee, 0x2e, 0x47, 0x8a, 0x60, 0x91, + 0x2c, 0xf8, 0x33, 0x64, 0xb0, 0xc4, 0xc2, 0x07, 0x88, 0x00, 0xfb, 0x67, + 0x67, 0xcf, 0x42, 0x1c, 0x7c, 0xed, 0x58, 0x1c, 0xa6, 0x8d, 0xa2, 0x53, + 0x9b, 0x7b, 0x4e, 0xd0, 0xbb, 0xb2, 0xd7, 0x89, 0x85, 0xdb, 0x4e, 0xf0, + 0xf3, 0xd5, 0x49, 0x5b, 0x92, 0xb4, 0xe7, 0x75, 0xfa, 0x0f, 0x50, 0xe2, + 0x95, 0x96, 0x6c, 0xc2, 0x9a, 0x0d, 0xe0, 0xa2, 0xd9, 0xdf, 0xf9, 0x90, + 0xee, 0xdd, 0x02, 0x1f, 0xf3, 0x5c, 0x2a, 0x5f, 0xf0, 0xd0, 0xfc, 0xf3, + 0xc8, 0x0b, 0x03, 0x86, 0x4a, 0x8c, 0xa5, 0x15, 0xd4, 0xa2, 0xf5, 0xdb, + 0xae, 0xab, 0x39, 0x06, 0x4b, 0x8e, 0x6b, 0xf0, 0x70, 0xc8, 0x58, 0x55, + 0xec, 0x9f, 0x46, 0x5f, 0xb5, 0x20, 0x91, 0x7b, 0x5b, 0x5e, 0x21, 0x3d, + 0xbe, 0xb1, 0x16, 0x47, 0x25, 0x4a, 0x70, 0x0c, 0x0e, 0xd8, 0xc0, 0x6a, + 0xdd, 0x20, 0xac, 0x42, 0xde, 0x57, 0xfc, 0xd7, 0xdd, 0xe4, 0x8a, 0xac, + 0x14, 0xbe, 0x98, 0x68, 0x18, 0x35, 0x0b, 0x93, 0x2f, 0xde, 0x9c, 0xc3, + 0x58, 0x41, 0x48, 0x98, 0xfc, 0x2a, 0x08, 0x6f, 0x49, 0xcc, 0x62, 0x93, + 0x09, 0x13, 0x32, 0x72, 0x00, 0x74, 0x3f, 0xbc, 0xa7, 0x85, 0xdd, 0x4f, + 0xbe, 0xca, 0xe9, 0xf7, 0x40, 0x81, 0x02, 0x3f, 0xb0, 0x5e, 0xd8, 0xac, + 0xce, 0x2c, 0x81, 0x09, 0xfc, 0xe0, 0xdf, 0xb4, 0xd7, 0x4b, 0x2a, 0xfe, + 0x93, 0x52, 0x69, 0x4a, 0xf9, 0xa0, 0x2e, 0x4f, 0x49, 0xea, 0xe9, 0x2d, + 0x8f, 0xd0, 0x5b, 0x87, 0x35, 0x9a, 0xdb, 0xed, 0xa7, 0xb0, 0xab, 0x2e, + 0x74, 0x97, 0x7e, 0xa8, 0x74, 0xfb, 0x34, 0xd8, 0xea, 0xb9, 0x9c, 0xd6, + 0x33, 0xf8, 0x61, 0x2e, 0x2a, 0x90, 0x68, 0xa5, 0x6e, 0x52, 0x05, 0x20, + 0x65, 0x9e, 0x6f, 0x01, 0x1f, 0xf2, 0x68, 0x0e, 0x26, 0x66, 0xaa, 0x54, + 0x96, 0xf0, 0xe5, 0x36, 0x47, 0x98, 0xb0, 0x87, 0x0c, 0x86, 0x24, 0x57, + 0x21, 0x6f, 0xa2, 0xc5, 0x57, 0x22, 0x7c, 0xd5, 0xdc, 0x51, 0xb6, 0x5d, + 0x0e, 0x88, 0x59, 0xad, 0x4e, 0xb6, 0xb0, 0xfb, 0xb9, 0x1d, 0xa9, 0x1c, + 0xf5, 0xc9, 0x00, 0xbe, 0x0e, 0x23, 0x55, 0xd2, 0x5e, 0x79, 0x9d, 0x41, + 0xc1, 0xd9, 0x59, 0x72, 0x3c, 0xce, 0x02, 0x6a, 0x25, 0x7b, 0x30, 0x35, + 0x57, 0x70, 0x1b, 0x52, 0x72, 0xe5, 0xdb, 0x41, 0xda, 0x19, 0xab, 0x09, + 0xac, 0x29, 0x37, 0x4e, 0x60, 0xc9, 0x8b, 0x6c, 0x53, 0x21, 0xc5, 0xc8, + 0x60, 0x24, 0x4f, 0x76, 0xee, 0x15, 0xa5, 0xb9, 0xdd, 0x72, 0xc6, 0x8b, + 0xf5, 0xd5, 0xd3, 0xfc, 0xa3, 0x61, 0xa3, 0xd8, 0xac, 0xfa, 0xd7, 0x6b, + 0x0a, 0xe8, 0x8d, 0x63, 0xd9, 0xb7, 0x2c, 0x62, 0xeb, 0xdc, 0xbd, 0x73, + 0x3f, 0xb9, 0x3b, 0x8c, 0xe7, 0xa6, 0xc0, 0x42, 0x20, 0x4a, 0x84, 0x6e, + 0x7f, 0xd1, 0x64, 0x67, 0x9f, 0x44, 0x24, 0x31, 0x13, 0x86, 0x6c, 0xf6, + 0x8a, 0x4d, 0x2b, 0x38, 0x98, 0x5c, 0x4a, 0xd7, 0x18, 0xae, 0xb5, 0x44, + 0x8c, 0x19, 0x38, 0xa9, 0xf9, 0xfd, 0x69, 0xd5, 0xe4, 0x4f, 0x20, 0x23, + 0x76, 0x8e, 0x90, 0x24, 0xb4, 0x20, 0x4a, 0xf5, 0x8f, 0x3f, 0xd3, 0x0a, + 0x7e, 0xed, 0x7d, 0x4c, 0x4b, 0xeb, 0x2e, 0x99, 0x2d, 0x88, 0xf9, 0x8e, + 0x69, 0x9b, 0x42, 0x06, 0x0d, 0xb5, 0x35, 0x18, 0x24, 0x51, 0xde, 0x88, + 0x4e, 0x2e, 0x81, 0xb8, 0x3c, 0xa7, 0xbf, 0xdb, 0x66, 0x5c, 0xfe, 0x32, + 0xd1, 0xce, 0x12, 0xc9, 0xc2, 0x47, 0x12, 0x74, 0x58, 0x3a, 0xc6, 0x7f, + 0x67, 0xd3, 0x80, 0xbe, 0x04, 0x1a, 0xc4, 0x66, 0x09, 0x2e, 0x31, 0x18, + 0x04, 0x74, 0xad, 0x0b, 0x03, 0x46, 0xd9, 0x02, 0xf9, 0x26, 0x57, 0x34, + 0xd5, 0x35, 0xe0, 0xe6, 0x0d, 0xb4, 0x25, 0x4f, 0x4a, 0xd3, 0x38, 0x6d, + 0xdf, 0xaa, 0xfc, 0xc1, 0xa8, 0x69, 0xf2, 0x8c, 0xc6, 0x58, 0xb3, 0x1c, + 0x17, 0x42, 0x4d, 0x25, 0xa4, 0x06, 0xfb, 0x20, 0x7f, 0xbc, 0x2f, 0xdc, + 0x60, 0x52, 0xf2, 0xbf, 0x3e, 0x51, 0x65, 0xfa, 0x56, 0xe9, 0xf1, 0x24, + 0x82, 0x4f, 0x14, 0x84, 0x55, 0x77, 0xcc, 0xc9, 0x31, 0x8b, 0x5f, 0x4e, + 0xd9, 0xed, 0x6f, 0xe9, 0xe2, 0x4b, 0xb9, 0x8b, 0x23, 0xa5, 0x1e, 0xa5, + 0x94, 0xc6, 0x2b, 0x95, 0x98, 0xc6, 0x52, 0x13, 0x07, 0xd7, 0xd5, 0x5a, + 0x1f, 0x6c, 0x8a, 0x49, 0x37, 0x34, 0xaf, 0x62, 0x4e, 0x19, 0xb5, 0xa8, + 0x02, 0xdc, 0x14, 0xfc, 0xe1, 0x53, 0xc9, 0x06, 0x73, 0xbc, 0xd4, 0xd7, + 0x39, 0x9a, 0x28, 0x9d, 0x87, 0x5e, 0x14, 0xab, 0xd3, 0x08, 0xfc, 0xd1, + 0x8d, 0x75, 0x9d, 0x8f, 0xa9, 0x40, 0x51, 0x2f, 0xe1, 0x90, 0xb4, 0x38, + 0x0c, 0x96, 0xd2, 0x1c, 0x58, 0xc8, 0xd2, 0x8d, 0xb3, 0xa0, 0xf8, 0x0e, + 0x18, 0x4d, 0x86, 0x58, 0x68, 0xcd, 0xc9, 0xab, 0x6e, 0x5b, 0xa7, 0xba, + 0x17, 0x8c, 0x84, 0xc8, 0x5e, 0x28, 0x9b, 0xd3, 0xa6, 0x1f, 0xe1, 0x00, + 0xbc, 0x18, 0x87, 0xa5, 0x9d, 0x28, 0x24, 0x23, 0xfd, 0x99, 0x40, 0x51, + 0xca, 0xc8, 0xe4, 0x89, 0xc1, 0xaa, 0x7e, 0xa1, 0x99, 0x4c, 0x32, 0xe0, + 0x73, 0x31, 0xbe, 0x5e, 0x0d, 0xff, 0x9d, 0x6f, 0x33, 0x30, 0x3e, 0xce, + 0x4c, 0xb3, 0x0b, 0xe7, 0x65, 0x27, 0x1e, 0xa8, 0x0a, 0x8a, 0xd4, 0x32, + 0x31, 0x0d, 0x81, 0xe0, 0x92, 0x35, 0xe0, 0x38, 0x49, 0x47, 0x2f, 0x5e, + 0xc5, 0x60, 0x01, 0x45, 0x8e, 0x41, 0xa5, 0xda, 0xca, 0x47, 0x1e, 0xe5, + 0x81, 0x24, 0xaa, 0x5b, 0x47, 0x22, 0xd4, 0x5c, 0x2c, 0xb5, 0x26, 0x37, + 0x28, 0xba, 0x7b, 0xe9, 0x81, 0x99, 0xc3, 0x73, 0x48, 0xde, 0x6f, 0x3d, + 0x48, 0x60, 0xa6, 0x5c, 0xa9, 0x7d, 0x11, 0xe2, 0xee, 0xe7, 0xb1, 0x8a, + 0x01, 0x73, 0xe5, 0x7b, 0x08, 0xf9, 0xf4, 0xf6, 0x0b, 0x5e, 0x71, 0xf7, + 0x04, 0xa8, 0xb4, 0x1a, 0x37, 0x60, 0xea, 0xbd, 0x89, 0x25, 0xde, 0x25, + 0x0e, 0x33, 0x8e, 0xac, 0x6b, 0x71, 0x41, 0xa7, 0x54, 0xbb, 0xe8, 0x7e, + 0x17, 0xa5, 0x41, 0xaa, 0xd0, 0xb7, 0xc9, 0xe5, 0xae, 0x6a, 0xf2, 0x43, + 0xdb, 0x5f, 0x09, 0x91, 0xf9, 0x47, 0x47, 0xc2, 0xd5, 0x30, 0x70, 0x24, + 0xc4, 0x76, 0x99, 0x6a, 0x79, 0xac, 0x87, 0xc4, 0xbc, 0x75, 0x58, 0xcd, + 0xfb, 0xe2, 0xb0, 0x1d, 0x61, 0x99, 0xc7, 0x8a, 0x32, 0x29, 0x42, 0xe1, + 0x83, 0x95, 0xe3, 0x68, 0x08, 0x55, 0x9d, 0x10, 0x61, 0x5a, 0x35, 0x64, + 0x9f, 0x47, 0x2d, 0x2b, 0x83, 0xa4, 0x93, 0xdc, 0xa9, 0x78, 0xc7, 0xf4, + 0xcc, 0xbe, 0x52, 0x85, 0xa6, 0xf8, 0x8e, 0x43, 0xe5, 0x9b, 0x9d, 0xa9, + 0x34, 0x5c, 0x85, 0xb7, 0x8a, 0xc4, 0x64, 0x82, 0x3d, 0xde, 0xb5, 0xd9, + 0x61, 0x21, 0x37, 0x5c, 0x9b, 0xbd, 0xb6, 0x27, 0x5a, 0x9e, 0xbd, 0x26, + 0x2c, 0x78, 0x48, 0x96, 0xe8, 0xfa, 0x2e, 0x18, 0x1b, 0xc4, 0xfe, 0x63, + 0x87, 0xf9, 0xf6, 0x94, 0x47, 0x59, 0x68, 0xee, 0xdb, 0x7a, 0x5f, 0x9c, + 0x6f, 0x92, 0x19, 0xba, 0x04, 0x31, 0x8c, 0xe0, 0x2b, 0xf9, 0x12, 0xe8, + 0xc9, 0x4b, 0x55, 0x7b, 0x9f, 0xee, 0x85, 0x4d, 0x04, 0x3e, 0x92, 0xcb, + 0xd6, 0xc2, 0x9b, 0x9a, 0x11, 0x10, 0x3f, 0xac, 0x74, 0xcf, 0x53, 0xc0, + 0x57, 0x08, 0x9e, 0xa5, 0x8e, 0xa5, 0x49, 0x21, 0x0a, 0xdd, 0x0d, 0xf3, + 0x2d, 0x6f, 0x5b, 0x49, 0xfd, 0xdb, 0xea, 0x5b, 0x6b, 0x0e, 0x61, 0x8d, + 0x77, 0xc2, 0x29, 0x30, 0x30, 0xfe, 0x93, 0xe2, 0x28, 0x4c, 0x71, 0x30, + 0x62, 0x11, 0x4b, 0xcb, 0xf4, 0x1d, 0x56, 0xf9, 0xdf, 0x27, 0x46, 0xc2, + 0x6a, 0x2b, 0xbc, 0x83, 0x1a, 0x49, 0x33, 0x8d, 0xd3, 0xb9, 0x5b, 0x4b, + 0x94, 0xb2, 0x10, 0xac, 0xf0, 0x18, 0x20, 0x75, 0x61, 0x55, 0xd9, 0xec, + 0x5c, 0x4c, 0xf4, 0x1e, 0xfc, 0x22, 0x9c, 0x4a, 0xd1, 0xbc, 0xfe, 0x3e, + 0x9c, 0x33, 0xf0, 0xaf, 0xf0, 0x75, 0xd2, 0x39, 0x2e, 0x20, 0xe1, 0x46, + 0xca, 0x7b, 0xf2, 0x7f, 0x7d, 0xa2, 0x37, 0x2a, 0x97, 0x93, 0x86, 0x3e, + 0xa8, 0xab, 0xa4, 0x67, 0x66, 0xed, 0xfe, 0x1d, 0x72, 0x58, 0x0b, 0x35, + 0x4d, 0xf9, 0x89, 0xd1, 0x14, 0xe2, 0x3a, 0xda, 0x4d, 0x75, 0x77, 0x44, + 0x83, 0x2d, 0x12, 0x78, 0x63, 0x7d, 0x71, 0x01, 0x1a, 0x84, 0xe0, 0xf0, + 0xe1, 0x4b, 0xfb, 0xa7, 0xaa, 0x32, 0xe8, 0x47, 0x38, 0x22, 0x27, 0xf3, + 0x90, 0xcf, 0x4b, 0x07, 0xd1, 0x47, 0x51, 0xa1, 0xd9, 0x07, 0x88, 0xcd, + 0x17, 0x65, 0xb9, 0xf6, 0x39, 0x24, 0x86, 0x9a, 0x1b, 0x19, 0xb4, 0x98, + 0x30, 0x0f, 0x40, 0x8c, 0x26, 0x19, 0xb8, 0x31, 0xc5, 0xab, 0xaf, 0xd7, + 0x43, 0xe9, 0xd7, 0x8c, 0x17, 0xc2, 0xcf, 0xed, 0x96, 0x7c, 0xb4, 0x42, + 0x68, 0x16, 0x27, 0x9b, 0x59, 0xa2, 0x4f, 0xf6, 0xc6, 0x5a, 0x29, 0x43, + 0xe4, 0x15, 0xe7, 0x13, 0x0b, 0x21, 0xf8, 0x90, 0x7c, 0xa3, 0x8a, 0x4b, + 0x0d, 0x53, 0x88, 0xb2, 0xf8, 0x4d, 0xbd, 0x9e, 0x62, 0x04, 0x3d, 0xc2, + 0x83, 0x9a, 0x78, 0xae, 0xed, 0x2a, 0x29, 0x17, 0x94, 0xcd, 0xfa, 0x4f, + 0x08, 0xa0, 0x0f, 0x75, 0xd3, 0x33, 0xb0, 0x73, 0x70, 0xaa, 0x6d, 0xce, + 0x26, 0x50, 0x45, 0xda, 0xd7, 0xdc, 0x7c, 0x62, 0xb3, 0x19, 0x05, 0xee, + 0x68, 0xbb, 0xd0, 0xd4, 0x7e, 0x49, 0x9f, 0xaa, 0x89, 0x61, 0x9b, 0x18, + 0xb0, 0x01, 0xb4, 0xde, 0x47, 0xbe, 0xbe, 0x45, 0xdd, 0xe8, 0xdf, 0xb9, + 0xcf, 0xd9, 0x23, 0x14, 0xdd, 0x5f, 0xd4, 0xde, 0x44, 0x98, 0xc2, 0x4c, + 0x63, 0x57, 0xad, 0xfa, 0x11, 0xdd, 0x12, 0x11, 0x3d, 0x5f, 0x98, 0xb6, + 0xe6, 0x84, 0x31, 0x12, 0xc1, 0xf4, 0x06, 0x45, 0x98, 0xde, 0xf5, 0x49, + 0x1b, 0xef, 0xc9, 0x16, 0x95, 0x63, 0x96, 0x93, 0xc9, 0x42, 0x7f, 0x08, + 0x70, 0x29, 0xce, 0xc4, 0x47, 0x2a, 0xc8, 0xac, 0xcd, 0xa9, 0x60, 0xbb, + 0xac, 0x78, 0xf2, 0x9b, 0xac, 0xb7, 0xb8, 0xbe, 0x0e, 0xbe, 0x26, 0xea, + 0xf0, 0x94, 0xbf, 0xf3, 0xa7, 0x0a, 0xd9, 0xe8, 0x02, 0x20, 0xce, 0xdd, + 0x0c, 0x52, 0xca, 0xe6, 0x00, 0xc8, 0x37, 0x67, 0x5c, 0x33, 0x82, 0x1b, + 0xc2, 0xb4, 0x4e, 0xe2, 0xe5, 0xa8, 0x4b, 0xd8, 0x91, 0xce, 0x10, 0xee, + 0xc3, 0xbb, 0xa4, 0x40, 0xf1, 0x09, 0x4f, 0xc8, 0x55, 0xd2, 0xaf, 0xf1, + 0x2c, 0x5f, 0x9b, 0x1c, 0xcd, 0xbe, 0xae, 0x33, 0xf3, 0xe0, 0x7b, 0x9e, + 0xcd, 0x3e, 0x99, 0x08, 0x67, 0xaa, 0xb4, 0xbb, 0xa8, 0x3b, 0x27, 0x61, + 0xb7, 0xf0, 0xca, 0x8c, 0xca, 0xa6, 0xc0, 0xe2, 0x30, 0x11, 0x1d, 0x38, + 0x78, 0x4f, 0xb4, 0x7a, 0xd2, 0x72, 0xa6, 0xbd, 0xdc, 0xb6, 0x6d, 0x16, + 0x1a, 0x55, 0x0f, 0x18, 0x2b, 0xec, 0xdf, 0x96, 0xd1, 0xf7, 0x4c, 0xc4, + 0x0f, 0x49, 0x1d, 0xc1, 0x60, 0x16, 0x5d, 0x09, 0x24, 0x68, 0xb6, 0x98, + 0xe2, 0x16, 0x39, 0x73, 0x81, 0x96, 0x53, 0xde, 0x67, 0x10, 0xd4, 0x3a, + 0x42, 0x80, 0xb8, 0x7c, 0x1f, 0x81, 0x04, 0xa6, 0xcc, 0xaf, 0x66, 0x30, + 0xf5, 0x4e, 0xf1, 0x99, 0xc4, 0x98, 0x2b, 0x02, 0x24, 0x02, 0x2c, 0xfc, + 0x38, 0x6b, 0xdd, 0x72, 0x3b, 0xb7, 0x8a, 0xd5, 0x55, 0x53, 0x28, 0xc9, + 0xa3, 0x47, 0x50, 0xf9, 0xd3, 0x73, 0x0c, 0xf0, 0xcf, 0xa4, 0x16, 0x65, + 0xae, 0x8f, 0xe8, 0xeb, 0x2e, 0x06, 0x8f, 0x13, 0xf6, 0x13, 0x7e, 0xfa, + 0x55, 0x58, 0x14, 0x3e, 0xed, 0x8b, 0x40, 0x0b, 0xce, 0xb2, 0x82, 0xbd, + 0x5d, 0x45, 0x20, 0xff, 0x61, 0x47, 0xac, 0x21, 0x59, 0xad, 0x8c, 0x61, + 0x20, 0x7d, 0x0f, 0x59, 0x72, 0x54, 0xc0, 0xd1, 0x52, 0xef, 0x76, 0x5b, + 0xad, 0xb2, 0x1f, 0x3e, 0xff, 0x57, 0x5f, 0x3b, 0xdb, 0x3b, 0x9e, 0xd5, + 0x8a, 0xd0, 0x8e, 0xba, 0xa4, 0x62, 0x06, 0x5a, 0x4f, 0xba, 0x37, 0x12, + 0xfe, 0xc8, 0x43, 0xf8, 0xf9, 0x93, 0x6f, 0x98, 0xa9, 0xd0, 0x6c, 0xcd, + 0xaa, 0x04, 0xf3, 0x0f, 0x9c, 0x6b, 0xb5, 0xe9, 0xef, 0x4d, 0x8f, 0x9a, + 0x7c, 0xaf, 0xcf, 0x48, 0xbf, 0xd1, 0xd6, 0x5d, 0x34, 0x78, 0xd8, 0xea, + 0x9e, 0x59, 0x76, 0x18, 0x8e, 0x41, 0x3f, 0xb3, 0x9a, 0x36, 0x55, 0x9c, + 0xb1, 0x1a, 0xb4, 0x6d, 0x78, 0xa7, 0xc6, 0xcc, 0x63, 0x8f, 0xb3, 0xe9, + 0xd8, 0x40, 0xd8, 0x85, 0x77, 0x03, 0x5e, 0x5e, 0xf1, 0x25, 0xa6, 0xa7, + 0xa9, 0xfb, 0x77, 0xb4, 0x46, 0x75, 0x46, 0x30, 0xd3, 0x4c, 0xd3, 0x14, + 0xe6, 0x82, 0xaf, 0xf4, 0x89, 0xd9, 0x19, 0x78, 0xbf, 0x7a, 0x4b, 0xe2, + 0x16, 0xea, 0xf8, 0xb8, 0xaa, 0xb5, 0x78, 0x8d, 0x1c, 0x26, 0x4d, 0xa5, + 0x38, 0xd7, 0x7a, 0x79, 0x0b, 0x02, 0x41, 0xc3, 0x03, 0xc3, 0x7c, 0x87, + 0x7f, 0x92, 0x59, 0x74, 0x3d, 0x52, 0xb5, 0xb6, 0xb4, 0x38, 0xe9, 0xa9, + 0x01, 0xae, 0x27, 0x2c, 0x74, 0x35, 0x30, 0x64, 0xc3, 0x53, 0x82, 0x47, + 0x12, 0x40, 0x08, 0x91, 0x0d, 0x3e, 0x25, 0xcb, 0x3b, 0x98, 0xf4, 0xcb, + 0x71, 0xe4, 0xb0, 0xf2, 0x92, 0xf9, 0xfc, 0x12, 0x54, 0xb9, 0xa7, 0xe6, + 0x39, 0xf4, 0x6b, 0x24, 0x49, 0x6c, 0xb0, 0xab, 0x29, 0xe5, 0x02, 0x6c, + 0xd0, 0xe6, 0x37, 0x6c, 0xb3, 0x1e, 0xb6, 0x74, 0xc4, 0x7c, 0x84, 0x98, + 0x5f, 0x10, 0x28, 0xd6, 0xc7, 0x15, 0x3f, 0x27, 0xa8, 0x46, 0x0e, 0x42, + 0xa4, 0xb4, 0x0b, 0x3e, 0x47, 0xa1, 0x30, 0x37, 0xe1, 0x05, 0xcc, 0x04, + 0x3b, 0x47, 0x0e, 0x95, 0xe0, 0x9b, 0x20, 0xbe, 0x9e, 0x64, 0x68, 0xea, + 0x46, 0xd9, 0x08, 0xa9, 0x2a, 0x29, 0x1d, 0x81, 0x5c, 0xef, 0xa2, 0xc9, + 0xd2, 0xd3, 0x94, 0x52, 0xdc, 0x07, 0xc8, 0x59, 0xd8, 0x2c, 0x53, 0x68, + 0x46, 0x83, 0x32, 0x05, 0xd5, 0x74, 0x4a, 0x6b, 0x65, 0x9a, 0xb0, 0xa2, + 0x43, 0x5d, 0x71, 0x07, 0x3c, 0x97, 0xd1, 0x40, 0x4a, 0xb1, 0x94, 0xca, + 0xef, 0x0f, 0xe3, 0x2d, 0xac, 0xe4, 0x71, 0xb7, 0x72, 0xa7, 0xf8, 0x11, + 0x5c, 0xcf, 0x9d, 0x9a, 0x5f, 0x08, 0xaa, 0x40, 0xa5, 0xa5, 0x93, 0x92, + 0xbd, 0xed, 0xc5, 0x0d, 0xe7, 0x67, 0xd0, 0xd5, 0x54, 0x40, 0x07, 0x89, + 0x54, 0x37, 0x9f, 0x33, 0x2f, 0x15, 0x26, 0x6b, 0x52, 0x60, 0x79, 0x65, + 0xcb, 0xad, 0x64, 0x66, 0x22, 0x20, 0x17, 0x4c, 0x84, 0x1b, 0xb8, 0x7e, + 0x01, 0xc0, 0xe9, 0x2d, 0xf1, 0xb1, 0xa3, 0x48, 0x96, 0x7d, 0x8a, 0x3b, + 0x2b, 0xbd, 0xe1, 0x17, 0x58, 0x37, 0xc6, 0xc1, 0xd1, 0x80, 0x6a, 0x8a, + 0x57, 0x8a, 0xab, 0xb7, 0x32, 0xd1, 0x64, 0x54, 0x3d, 0xef, 0xbe, 0xcc, + 0x91, 0xca, 0xfc, 0x3e, 0xd7, 0xd3, 0xa2, 0xaf, 0x8e, 0x3e, 0x4e, 0x7b, + 0x8e, 0x07, 0x10, 0x10, 0x73, 0xd1, 0xbe, 0x01, 0xdd, 0x0f, 0x8c, 0xd2, + 0x46, 0x85, 0x71, 0x5d, 0x5a, 0xec, 0xc9, 0xd6, 0x0a, 0x3d, 0xcd, 0xe7, + 0xba, 0xe1, 0x2a, 0x3b, 0x9e, 0x67, 0x42, 0xc1, 0xcd, 0x5e, 0x3e, 0x48, + 0x51, 0xa6, 0x4a, 0x21, 0x7f, 0x45, 0xfc, 0x1b, 0xc5, 0x0a, 0xa4, 0x5d, + 0xbb, 0x1e, 0xa9, 0xaf, 0x7e, 0x54, 0x64, 0xd1, 0x80, 0x4e, 0x1f, 0x5b, + 0x73, 0xa3, 0x10, 0x04, 0x38, 0x22, 0xd7, 0xf7, 0xf6, 0x06, 0xb7, 0x97, + 0x48, 0xa8, 0x82, 0x8f, 0xe9, 0x10, 0x0c, 0x18, 0xb3, 0xfd, 0x62, 0x41, + 0xe3, 0x2a, 0xe4, 0x63, 0xe1, 0xc8, 0xb9, 0x77, 0x0d, 0xec, 0xd8, 0x12, + 0x77, 0x92, 0x7b, 0xfe, 0x26, 0xc6, 0xec, 0x2e, 0xb8, 0x3d, 0x4b, 0x38, + 0x7d, 0xc2, 0xb0, 0x96, 0xea, 0x8c, 0xb0, 0x9c, 0x85, 0x0d, 0x88, 0x7a, + 0x18, 0xe2, 0x6b, 0xa5, 0xc6, 0xe7, 0x9d, 0x81, 0xb8, 0x83, 0xc4, 0xca, + 0x02, 0x51, 0x2c, 0xb1, 0x16, 0x32, 0x16, 0xae, 0xf1, 0x25, 0xaf, 0xb6, + 0x77, 0x28, 0x4e, 0x31, 0x14, 0x14, 0xda, 0xd9, 0xfc, 0x9e, 0x74, 0x21, + 0x28, 0x2d, 0xdf, 0x54, 0x0d, 0x8f, 0x42, 0xb0, 0x13, 0x21, 0xe3, 0xab, + 0xee, 0x8a, 0xd0, 0x48, 0x2c, 0x7c, 0x43, 0xbd, 0x5a, 0xec, 0x56, 0xe3, + 0xf1, 0xcc, 0x82, 0x5f, 0x35, 0x87, 0xde, 0x72, 0x69, 0x0c, 0xd2, 0xd3, + 0xd3, 0x9c, 0x4d, 0x22, 0xe5, 0x37, 0x6f, 0x1c, 0x57, 0xea, 0x85, 0xe2, + 0x79, 0x19, 0x1d, 0x09, 0xdb, 0x10, 0x28, 0x9a, 0x30, 0x2a, 0x49, 0x41, + 0x74, 0x0a, 0xc9, 0x68, 0x6d, 0xe6, 0x31, 0xed, 0xa1, 0x10, 0x46, 0x39, + 0xf4, 0xd3, 0x78, 0xc0, 0xbd, 0xdc, 0x1f, 0x82, 0x92, 0xe1, 0x81, 0xd9, + 0xbd, 0xd1, 0x34, 0xcd, 0x2d, 0x99, 0xbc, 0x4e, 0x58, 0xe3, 0xa1, 0x6c, + 0x72, 0x8f, 0x63, 0x8d, 0x0e, 0xb6, 0xc9, 0xad, 0x69, 0x16, 0x09, 0x92, + 0xed, 0xae, 0xe7, 0x1d, 0x88, 0xd3, 0x4e, 0x55, 0x30, 0x4f, 0xa2, 0x80, + 0x39, 0x24, 0x6e, 0xc7, 0x1c, 0x38, 0x6a, 0x72, 0x8f, 0xed, 0x60, 0x76, + 0xc4, 0xdb, 0x29, 0x82, 0x7c, 0xdf, 0xeb, 0x9c, 0x12, 0x08, 0x77, 0x3b, + 0x20, 0x87, 0x65, 0x2b, 0x5d, 0x31, 0xdd, 0x14, 0x09, 0x1b, 0x61, 0x5f, + 0x6c, 0xc5, 0x40, 0xac, 0xd1, 0x06, 0xfb, 0x22, 0xc9, 0xf9, 0x9e, 0xac, + 0x7e, 0x23, 0x06, 0xfc, 0xb5, 0x82, 0x2e, 0xc3, 0x01, 0xe3, 0xf2, 0x80, + 0x17, 0x75, 0xde, 0xef, 0xb0, 0x14, 0x8e, 0x14, 0xb8, 0x9b, 0x13, 0x6f, + 0x93, 0xb7, 0xd6, 0xd8, 0x32, 0xae, 0x73, 0xe7, 0x50, 0xb3, 0x76, 0x8f, + 0x7b, 0x53, 0x74, 0x8e, 0x45, 0x49, 0x53, 0xfa, 0x2c, 0x5d, 0xe2, 0x15, + 0xb7, 0xe2, 0xf5, 0xe4, 0x6e, 0x4a, 0x63, 0xc5, 0x92, 0x28, 0xec, 0x12, + 0x9b, 0x4a, 0x3c, 0xd7, 0x82, 0xf4, 0xdf, 0xee, 0xca, 0xb3, 0xde, 0xca, + 0xc0, 0xc1, 0x27, 0x73, 0xbd, 0x0d, 0xbb, 0xe8, 0x2e, 0xee, 0x33, 0x97, + 0x60, 0xd1, 0x3c, 0x57, 0x16, 0x6d, 0x36, 0xfe, 0xac, 0x05, 0xb8, 0x52, + 0x50, 0x7a, 0xcf, 0x0b, 0xe2, 0x35, 0x42, 0xad, 0x30, 0xc8, 0xde, 0xd5, + 0xf3, 0x01, 0x0d, 0x9e, 0x69, 0xd3, 0x9a, 0xd4, 0x16, 0xea, 0x41, 0x9d, + 0x8e, 0xb9, 0xf9, 0x32, 0x93, 0x03, 0x98, 0x2a, 0xc8, 0xa8, 0xd9, 0xd1, + 0x66, 0x40, 0x79, 0x37, 0x05, 0x47, 0x54, 0xc1, 0xa3, 0x7f, 0x5d, 0x9d, + 0x16, 0x7a, 0xc8, 0x9b, 0x89, 0x84, 0x7c, 0x7c, 0x21, 0x37, 0x17, 0xca, + 0x1e, 0xc8, 0x2f, 0x8a, 0xaf, 0x69, 0x61, 0x3b, 0x2c, 0x7a, 0x33, 0xb4, + 0x06, 0x92, 0x8d, 0xf2, 0xbe, 0xe3, 0x7b, 0x5e, 0x6b, 0xbf, 0xba, 0x2d, + 0x37, 0x11, 0x8f, 0x9f, 0x6e, 0x14, 0xca, 0xe7, 0xa1, 0x9f, 0x90, 0x10, + 0xf5, 0x38, 0x3e, 0xbc, 0x2e, 0x4f, 0xb8, 0xe1, 0x31, 0xd6, 0xda, 0xef, + 0x8f, 0xd0, 0xd2, 0x69, 0xc5, 0x29, 0x05, 0x52, 0x88, 0x98, 0x66, 0x4c, + 0xd6, 0x40, 0x5f, 0xf5, 0xc1, 0xf7, 0x43, 0x46, 0x0a, 0xd5, 0x2f, 0x25, + 0x99, 0x61, 0x9b, 0x25, 0x9a, 0x63, 0x5b, 0x67, 0xa7, 0x02, 0x7f, 0xe1, + 0xb5, 0xa2, 0x52, 0x98, 0x33, 0x05, 0x1d, 0xf5, 0xe5, 0x2b, 0x4b, 0xbc, + 0x47, 0xf9, 0x07, 0x66, 0x81, 0xa6, 0x89, 0xb1, 0xcf, 0x8f, 0xb5, 0xf6, + 0x5c, 0xfb, 0x13, 0x92, 0x9b, 0x6d, 0x83, 0x00, 0x62, 0xed, 0x46, 0xa5, + 0xd3, 0xd4, 0x18, 0xa8, 0x68, 0x7d, 0xeb, 0x75, 0x69, 0x2e, 0x07, 0xaa, + 0x91, 0xa7, 0xfa, 0xd5, 0x9b, 0x61, 0xd2, 0xfe, 0x48, 0x41, 0x70, 0x7d, + 0x6b, 0xae, 0x0b, 0x31, 0xa3, 0x64, 0xb0, 0xbc, 0xb9, 0xcb, 0x08, 0x1b, + 0x25, 0xb4, 0x3e, 0xa6, 0x0d, 0x36, 0x84, 0x1e, 0x20, 0x49, 0x10, 0x7f, + 0x24, 0x13, 0x5a, 0xd5, 0x5e, 0xab, 0x33, 0xaa, 0x73, 0xe0, 0x7c, 0x8d, + 0xf4, 0x91, 0x32, 0xcd, 0x47, 0xe6, 0x95, 0xc4, 0x39, 0xf4, 0x9b, 0xed, + 0x6d, 0x8d, 0x22, 0x73, 0xd9, 0xb0, 0x70, 0xb9, 0x9d, 0xd3, 0x97, 0x3f, + 0x5b, 0x73, 0xf1, 0x2d, 0x87, 0xf6, 0xd0, 0x41, 0xd5, 0x57, 0x1f, 0x89, + 0x41, 0x4c, 0xfa, 0x18, 0x17, 0x4c, 0x01, 0x8d, 0xab, 0xef, 0x0e, 0x5c, + 0xc9, 0x97, 0x5a, 0x1c, 0xc2, 0x7d, 0xe6, 0x7f, 0x70, 0x99, 0xe5, 0x43, + 0x05, 0x25, 0x74, 0xe1, 0x57, 0xeb, 0xf2, 0xc3, 0x81, 0x63, 0xc1, 0xd3, + 0xe8, 0x19, 0x70, 0xe0, 0x54, 0x74, 0x5f, 0x52, 0xb6, 0xaa, 0xde, 0x9a, + 0x5b, 0x12, 0x1a, 0x36, 0x0f, 0xe7, 0x87, 0x30, 0xcd, 0xa3, 0x2e, 0x97, + 0x98, 0x12, 0x1d, 0xe9, 0x9f, 0x62, 0x2b, 0x10, 0x3e, 0x87, 0xe1, 0x9f, + 0xc3, 0xa8, 0xfe, 0xc4, 0x75, 0xbd, 0x69, 0x6c, 0xb7, 0x6a, 0xbe, 0x6a, + 0x24, 0x43, 0x78, 0x30, 0x88, 0x34, 0x80, 0xc7, 0xc7, 0xef, 0xd2, 0xb3, + 0x45, 0x40, 0x18, 0x0d, 0x72, 0x76, 0x2f, 0x26, 0x86, 0x96, 0x41, 0x71, + 0x10, 0x19, 0x1b, 0xab, 0xb6, 0x94, 0xe6, 0xd8, 0xfa, 0x4c, 0x24, 0x2b, + 0xd9, 0xf3, 0x98, 0xb9, 0x7b, 0xc4, 0x6d, 0x45, 0x77, 0x9f, 0x66, 0x83, + 0x2e, 0x4f, 0x77, 0x1f, 0xc7, 0x5f, 0x15, 0x53, 0x6e, 0x28, 0x3f, 0x6f, + 0x08, 0x92, 0xa1, 0x9a, 0xa0, 0x5d, 0xbe, 0x35, 0xdd, 0x62, 0x93, 0xbf, + 0x30, 0x4f, 0x1e, 0x58, 0x41, 0x20, 0xd1, 0x29, 0xfa, 0x70, 0x32, 0x6a, + 0xfe, 0x25, 0x9f, 0x6b, 0xd1, 0x16, 0x93, 0x5b, 0x4c, 0xcb, 0x3c, 0xe4, + 0xe7, 0x8d, 0xf8, 0x48, 0x0b, 0xd3, 0x53, 0x6a, 0xc3, 0xa2, 0x35, 0x37, + 0xba, 0x98, 0x0c, 0x40, 0xdd, 0x30, 0xd4, 0x6f, 0x49, 0x45, 0xcd, 0xec, + 0xae, 0xb7, 0x72, 0x6d, 0x19, 0xf1, 0x5a, 0xfb, 0xfc, 0x4d, 0x45, 0x1a, + 0x06, 0x04, 0x41, 0x75, 0x3f, 0xb8, 0xea, 0x86, 0xc9, 0xc4, 0x91, 0x71, + 0x30, 0x31, 0xeb, 0x92, 0xd2, 0x79, 0xe5, 0xfa, 0xda, 0x4d, 0xfb, 0x56, + 0x12, 0xbe, 0x38, 0x81, 0xff, 0x8d, 0xdd, 0x9b, 0x3e, 0x42, 0xf4, 0x89, + 0x5d, 0xd3, 0xdb, 0xde, 0xd2, 0x26, 0xe8, 0x26, 0x4b, 0xa7, 0x5e, 0x4c, + 0xa4, 0x15, 0xaa, 0xa9, 0x17, 0x5f, 0x9b, 0x94, 0x7f, 0xe0, 0xc8, 0x88, + 0x01, 0x67, 0x19, 0x0f, 0x62, 0x62, 0xd4, 0xbb, 0x3e, 0x3b, 0x0e, 0x12, + 0x22, 0x67, 0x80, 0xbe, 0x6a, 0xe9, 0x9f, 0x66, 0x1d, 0x42, 0x3b, 0xa3, + 0xc9, 0x2c, 0x08, 0x92, 0x24, 0x9a, 0x12, 0x29, 0x68, 0x8d, 0xff, 0x43, + 0x03, 0xfb, 0xd0, 0x55, 0xa0, 0xff, 0xe1, 0x62, 0xa2, 0xb7, 0x41, 0x42, + 0xec, 0x66, 0x65, 0x2c, 0xb6, 0xc0, 0x66, 0xe6, 0x17, 0xd8, 0xca, 0x2d, + 0xa1, 0x21, 0x8d, 0xef, 0xae, 0xe6, 0x23, 0xfd, 0xdc, 0x3b, 0xee, 0xa4, + 0x4b, 0xfa, 0x56, 0xa2, 0xdb, 0x2b, 0xf9, 0x60, 0xdf, 0xf8, 0x23, 0x5a, + 0x1c, 0xd6, 0x9a, 0x2f, 0x98, 0xe0, 0x90, 0xd1, 0x46, 0xd5, 0x2f, 0xe6, + 0x76, 0xa1, 0x70, 0xdc, 0x7a, 0xe1, 0x04, 0x3b, 0xec, 0x98, 0x9d, 0xa9, + 0x59, 0xd5, 0xdb, 0xab, 0x32, 0x4b, 0x41, 0xb1, 0x6d, 0x22, 0x36, 0x0d, + 0x85, 0x93, 0xe6, 0x76, 0x29, 0xa5, 0x2e, 0x6c, 0xe2, 0xe5, 0xa8, 0x9a, + 0x41, 0x75, 0x13, 0xdd, 0xe4, 0x8c, 0x28, 0xf5, 0x4e, 0x40, 0x7b, 0x2b, + 0x4d, 0x1b, 0x7f, 0x39, 0xd5, 0xf9, 0x17, 0x3c, 0x96, 0x61, 0xdc, 0xbd, + 0xdb, 0x2c, 0x9f, 0xff, 0xba, 0x93, 0x7c, 0x82, 0xdb, 0x38, 0xbf, 0x6a, + 0x28, 0x0a, 0xbc, 0xdf, 0xec, 0xf7, 0x68, 0x46, 0x4a, 0x8f, 0x81, 0x44, + 0x6d, 0x35, 0x2a, 0x80, 0xe1, 0x4a, 0x6f, 0xc3, 0xc6, 0x2b, 0x3e, 0xd1, + 0x68, 0xc9, 0xb6, 0xcd, 0xa0, 0xf7, 0x18, 0xef, 0x22, 0x19, 0xab, 0x86, + 0xc2, 0xc0, 0x6d, 0x2f, 0x0b, 0x66, 0xbf, 0x3c, 0x57, 0x8a, 0x5e, 0xbc, + 0x10, 0x0b, 0xeb, 0x20, 0x37, 0xb2, 0xdb, 0x0a, 0x75, 0xa7, 0x9b, 0x26, + 0x71, 0x1d, 0x50, 0x8a, 0x87, 0xb7, 0x04, 0x4f, 0x0a, 0xd9, 0xc0, 0x1d, + 0x84, 0x1c, 0x35, 0x97, 0x38, 0x74, 0x7c, 0x32, 0x1f, 0xcf, 0xcd, 0xe8, + 0xcb, 0xb3, 0xf4, 0xae, 0xce, 0xd8, 0xb0, 0x8e, 0xd5, 0xaa, 0x67, 0xf8, + 0x03, 0xa6, 0x59, 0x81, 0x6d, 0xd6, 0x27, 0xe9, 0x50, 0xb7, 0xa7, 0x7a, + 0xa4, 0x29, 0xb1, 0xdc, 0x70, 0x3f, 0x20, 0x85, 0xf8, 0x8d, 0x1c, 0x8d, + 0x91, 0xfa, 0x5f, 0x36, 0x38, 0xc1, 0x2c, 0x43, 0x25, 0x4e, 0xe8, 0x85, + 0xb3, 0xe1, 0x60, 0xf6, 0x21, 0xe7, 0x4e, 0xb6, 0x93, 0x13, 0x40, 0xe9, + 0xdf, 0xe1, 0x75, 0xdb, 0xb3, 0x28, 0xb1, 0x4f, 0x95, 0x04, 0x8a, 0xfa, + 0x92, 0x78, 0xa0, 0x85, 0xbc, 0x65, 0x1d, 0x73, 0x17, 0xe3, 0x7b, 0x29, + 0x86, 0x3c, 0x09, 0xa6, 0x97, 0x4b, 0xf1, 0x09, 0x41, 0x0a, 0x04, 0xcb, + 0x71, 0xc4, 0xc4, 0xfe, 0x30, 0xe5, 0x5b, 0x1a, 0x62, 0xa9, 0x82, 0x6c, + 0xfb, 0x07, 0x42, 0x42, 0x2c, 0xd9, 0x59, 0x1d, 0x19, 0xb6, 0x83, 0x1f, + 0x06, 0x5f, 0x5d, 0x06, 0x59, 0xf7, 0x01, 0xe7, 0x7b, 0xf2, 0x60, 0x7d, + 0x64, 0x16, 0xa9, 0x47, 0x44, 0x34, 0x8b, 0xf6, 0xc3, 0x80, 0x38, 0xfa, + 0x78, 0x58, 0x6e, 0x59, 0xaf, 0x9d, 0x3a, 0xca, 0x71, 0x10, 0x1f, 0x94, + 0x1a, 0x83, 0xc4, 0x6a, 0xe8, 0xca, 0xa4, 0x8c, 0x92, 0x6a, 0x1e, 0x75, + 0x11, 0x84, 0x69, 0x2b, 0xdf, 0xeb, 0x21, 0xf3, 0x69, 0xca, 0x11, 0x00, + 0xb4, 0x82, 0x00, 0x43, 0x33, 0xcd, 0x59, 0x61, 0x0a, 0x40, 0xa7, 0xa5, + 0x6b, 0x44, 0x75, 0xf1, 0x2f, 0x56, 0xcb, 0x02, 0xd9, 0x3c, 0xec, 0x3b, + 0x1b, 0x45, 0x53, 0x3c, 0x77, 0x3c, 0xeb, 0x8b, 0x57, 0x0a, 0x14, 0x83, + 0x3f, 0x51, 0x04, 0x97, 0x0e, 0xae, 0x5a, 0xf7, 0x5a, 0x62, 0xf8, 0xdf, + 0x55, 0x07, 0x1f, 0xda, 0x3f, 0x9e, 0xc1, 0xfa, 0x10, 0x3d, 0xf7, 0x4a, + 0xbd, 0x06, 0x68, 0xf2, 0x9e, 0x22, 0xab, 0xe1, 0xbe, 0x91, 0xad, 0xaf, + 0x99, 0x04, 0x78, 0xf7, 0x10, 0xaf, 0xe5, 0x5f, 0x63, 0xdf, 0x98, 0xfd, + 0x12, 0xdc, 0xe4, 0xf0, 0x6b, 0x39, 0x49, 0x77, 0x08, 0x0e, 0xb3, 0x7d, + 0xb4, 0xfe, 0xd3, 0xe6, 0x02, 0x14, 0xd6, 0x6f, 0x37, 0x51, 0x81, 0x61, + 0x44, 0xdb, 0x85, 0x2b, 0x43, 0xa1, 0x77, 0x58, 0x58, 0xfe, 0x6d, 0x2d, + 0x7a, 0x0e, 0x6f, 0xcd, 0x0e, 0x81, 0xf3, 0x38, 0x8f, 0x86, 0xd5, 0x93, + 0x73, 0xed, 0x73, 0xa0, 0xb6, 0x73, 0xa7, 0xa1, 0xbd, 0xc0, 0x05, 0xf1, + 0x93, 0xbe, 0x3a, 0xbd, 0xa5, 0xef, 0xd4, 0x14, 0x7d, 0x7d, 0xf8, 0xc2, + 0x2a, 0x9d, 0x34, 0x61, 0xad, 0x02, 0xf1, 0x34, 0x5d, 0x6e, 0x18, 0x8a, + 0xf0, 0x4a, 0x29, 0x01, 0x7a, 0x39, 0x34, 0x7f, 0x26, 0x38, 0xaf, 0xb9, + 0x4c, 0x7f, 0xcd, 0xf3, 0xad, 0x5a, 0xef, 0x81, 0xab, 0xb8, 0x8d, 0x7e, + 0xbb, 0x84, 0xcb, 0x23, 0x4d, 0x2e, 0xac, 0x63, 0x4f, 0xb1, 0xe0, 0x44, + 0x08, 0x0b, 0x4f, 0x2d, 0x97, 0xd3, 0x5a, 0xbe, 0x31, 0xa1, 0x29, 0x02, + 0xc0, 0x3b, 0x08, 0x5e, 0xd5, 0xdc, 0xbb, 0xf0, 0x8b, 0x5a, 0xdb, 0x6a, + 0x87, 0xe9, 0xab, 0xf2, 0xc6, 0xf1, 0xde, 0x99, 0xae, 0x57, 0x51, 0x26, + 0x06, 0x90, 0x72, 0xf1, 0x5a, 0xac, 0x48, 0xe6, 0x4b, 0x58, 0x9b, 0x7d, + 0x8e, 0xb0, 0xe6, 0xf4, 0xde, 0x5c, 0x70, 0x97, 0x9e, 0x34, 0xde, 0x5d, + 0x77, 0x07, 0x24, 0x29, 0xfc, 0x57, 0x22, 0x3a, 0xac, 0x40, 0xf8, 0x0f, + 0xef, 0xee, 0xe9, 0xc7, 0x9e, 0xaf, 0x80, 0x3a, 0xcd, 0xe8, 0xc5, 0x1e, + 0x30, 0x1c, 0x03, 0x95, 0x40, 0xb5, 0xf7, 0xc2, 0x7c, 0x94, 0xf3, 0x8d, + 0x70, 0xb1, 0x9a, 0xc7, 0x55, 0x5e, 0x8b, 0x16, 0xea, 0xe1, 0xe9, 0x23, + 0x5b, 0x3c, 0xb1, 0xb3, 0xf8, 0x39, 0x66, 0xe3, 0xb2, 0xd6, 0x9a, 0x05, + 0x5f, 0x4b, 0x66, 0xc3, 0x33, 0xdb, 0x4d, 0x87, 0xd8, 0xf5, 0x74, 0x50, + 0x60, 0x2f, 0xd9, 0x5c, 0xf2, 0x27, 0x97, 0xed, 0x4c, 0x6c, 0xdb, 0x5a, + 0x34, 0x93, 0x4a, 0x2a, 0x66, 0xda, 0xd2, 0xfc, 0x96, 0x32, 0xb3, 0x0d, + 0xbd, 0x6d, 0x6a, 0xd3, 0x45, 0x4d, 0x97, 0x54, 0x41, 0x6f, 0x27, 0xec, + 0x03, 0x38, 0x4c, 0x72, 0x7f, 0x1d, 0xb3, 0x9d, 0xfa, 0xab, 0x83, 0xf1, + 0x75, 0x07, 0x45, 0x6f, 0x7e, 0xec, 0xa4, 0xc5, 0xbd, 0xfd, 0x76, 0x92, + 0x10, 0xea, 0x90, 0xf8, 0x1a, 0x97, 0xcf, 0xd8, 0xad, 0x66, 0xe9, 0xbe, + 0xd5, 0x76, 0xa0, 0xc6, 0xba, 0x2c, 0x3f, 0x6b, 0x79, 0xd2, 0xc6, 0x5c, + 0xcd, 0xdc, 0xcb, 0xe4, 0x2b, 0x5b, 0xd2, 0x2d, 0x1c, 0x33, 0x94, 0x9c, + 0x6b, 0xcd, 0x3e, 0x1e, 0x65, 0x34, 0x4f, 0xbd, 0x1c, 0x80, 0x4c, 0xee, + 0x19, 0x93, 0xde, 0x7e, 0xda, 0x0a, 0x19, 0xd6, 0x5a, 0x85, 0x17, 0x3b, + 0xa9, 0xf9, 0xa8, 0x08, 0xbb, 0x76, 0x71, 0x95, 0xfe, 0x64, 0x37, 0x2a, + 0xf6, 0x8c, 0x0a, 0xd9, 0x37, 0x29, 0x11, 0x5e, 0x01, 0x58, 0x6c, 0x2b, + 0x2a, 0xbb, 0xe2, 0x1f, 0x36, 0xac, 0x3c, 0x3e, 0x7f, 0xbd, 0x59, 0xe6, + 0x87, 0x35, 0xda, 0x1f, 0xc1, 0xb9, 0x55, 0x35, 0x62, 0xa3, 0x23, 0xc6, + 0xe8, 0xc9, 0xa1, 0xd2, 0x1e, 0xb1, 0x0f, 0xb2, 0xb8, 0x9b, 0x19, 0xaf, + 0xc4, 0x82, 0x51, 0x14, 0xee, 0x09, 0x7e, 0x9f, 0xab, 0xae, 0x11, 0x17, + 0x7b, 0xe6, 0x1a, 0xe1, 0x67, 0x9f, 0x63, 0x0f, 0x2e, 0xf9, 0x0f, 0xb4, + 0xf1, 0xf9, 0xd0, 0x12, 0x4d, 0xe2, 0xcc, 0x79, 0x44, 0x51, 0x1d, 0xb6, + 0x6a, 0x15, 0x7d, 0x84, 0x7c, 0xf5, 0x6d, 0x22, 0x11, 0x2a, 0x6d, 0x3f, + 0x58, 0x1d, 0xf5, 0xdd, 0x1c, 0x04, 0x07, 0x39, 0x47, 0xf8, 0xf4, 0xa3, + 0x09, 0xd2, 0x75, 0x12, 0x59, 0x41, 0x5f, 0xe7, 0x6f, 0x79, 0xcc, 0x0f, + 0x57, 0xfd, 0xad, 0xe7, 0x29, 0x60, 0x79, 0x8f, 0x28, 0x9f, 0x52, 0x17, + 0xc7, 0x53, 0x29, 0x86, 0x77, 0x00, 0xfd, 0x6b, 0x83, 0xf4, 0xbf, 0x53, + 0x89, 0x95, 0xda, 0xe6, 0x76, 0x53, 0x6d, 0x0d, 0xf3, 0x6d, 0x84, 0xdb, + 0x46, 0xa2, 0x51, 0xca, 0xbe, 0x8d, 0x84, 0x15, 0x34, 0xbc, 0xe4, 0xfe, + 0x9a, 0x1c, 0x87, 0xce, 0x23, 0x71, 0x45, 0x8d, 0x46, 0x64, 0x46, 0x1f, + 0x75, 0xea, 0x65, 0x13, 0xfa, 0xc4, 0xa9, 0xa2, 0xf6, 0x9f, 0xc1, 0x74, + 0x2a, 0xa9, 0x58, 0x99, 0x4b, 0x5b, 0x6a, 0xaa, 0xe2, 0xd4, 0x6f, 0x82, + 0xea, 0x1c, 0x81, 0x70, 0x22, 0xac, 0x51, 0x3a, 0xc7, 0xc1, 0x2d, 0x20, + 0x2f, 0xec, 0xf4, 0x1e, 0x43, 0x90, 0xed, 0xfe, 0xef, 0x17, 0xaf, 0xf9, + 0x0d, 0x08, 0x2b, 0x36, 0xf7, 0xa3, 0x87, 0x44, 0x90, 0xe6, 0xaa, 0x3b, + 0x9b, 0x0b, 0x33, 0x11, 0x95, 0xd5, 0xbd, 0x2e, 0x4f, 0x43, 0xa5, 0x95, + 0x96, 0xe0, 0x19, 0xce, 0xd6, 0x63, 0x87, 0x7e, 0x0a, 0xbb, 0xee, 0xd7, + 0x76, 0x9e, 0x6e, 0x14, 0x7a, 0xce, 0x55, 0xef, 0x06, 0x7f, 0xed, 0x0b, + 0x4f, 0xe8, 0x46, 0xc6, 0x27, 0x2c, 0xa1, 0x0b, 0x7e, 0x23, 0x2e, 0xf3, + 0x54, 0xfc, 0x06, 0x0a, 0x17, 0x50, 0xf4, 0xe1, 0x16, 0x50, 0xab, 0x41, + 0x1d, 0x2d, 0x33, 0xce, 0xe7, 0x71, 0x9b, 0x89, 0xa8, 0x97, 0xcd, 0x30, + 0xdc, 0x30, 0x64, 0x57, 0xf1, 0xf1, 0x93, 0x6c, 0x0f, 0x5d, 0x8f, 0x4c, + 0xbc, 0x10, 0xf3, 0xaf, 0x97, 0x18, 0x0b, 0x7d, 0x85, 0x1d, 0xb6, 0xa5, + 0xd6, 0x7f, 0x6f, 0x49, 0x27, 0x17, 0x9d, 0x45, 0x4d, 0xb7, 0x79, 0x08, + 0x1b, 0xbb, 0x6a, 0xcf, 0xa0, 0x1d, 0x15, 0x4f, 0x4e, 0x56, 0x64, 0xd0, + 0x4d, 0x9f, 0x54, 0xc8, 0xaa, 0x17, 0x30, 0x89, 0xb4, 0x5c, 0xf4, 0xcc, + 0x6b, 0x74, 0x8c, 0xf4, 0x44, 0x1a, 0xf2, 0xb2, 0x75, 0xc4, 0x02, 0xb3, + 0xf4, 0x4c, 0xb8, 0xcd, 0xfa, 0x05, 0x79, 0xaa, 0x05, 0xc3, 0x09, 0xfd, + 0x7c, 0x88, 0x8f, 0x99, 0x55, 0x78, 0xdb, 0x3d, 0x3f, 0x43, 0x2e, 0x71, + 0x4e, 0x6f, 0x53, 0xd3, 0x21, 0x41, 0x74, 0x84, 0xf6, 0x40, 0xc9, 0xdf, + 0x51, 0x6c, 0x67, 0xad, 0x23, 0xdb, 0xe1, 0xfa, 0xd1, 0x13, 0xec, 0x28, + 0x67, 0x53, 0x6e, 0xc9, 0x84, 0xd4, 0xac, 0x18, 0xa3, 0x21, 0x2c, 0xe3, + 0x45, 0x1a, 0x41, 0x4d, 0xf3, 0xad, 0xf2, 0x50, 0xab, 0x51, 0x75, 0x86, + 0x99, 0xc8, 0xd3, 0xec, 0x02, 0x12, 0x1e, 0x47, 0x4a, 0x72, 0xbc, 0xe1, + 0x0f, 0x97, 0xb4, 0xc6, 0xec, 0xf7, 0xfc, 0x28, 0x3f, 0xcb, 0xee, 0x50, + 0xdf, 0xfd, 0x12, 0x43, 0x4e, 0x64, 0x69, 0xad, 0xb7, 0x0f, 0x28, 0x31, + 0x4a, 0x6c, 0x9a, 0xb7, 0xbc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x08, 0x10, 0x17, 0x1b, 0x1e, 0x25, 0x2e, +}; static const unsigned char kat_mldsa44_pub[] = { 0xd7, 0xb2, 0xb4, 0x72, 0x54, 0xaa, 0xe0, 0xdb, 0x45, 0xe7, 0x93, 0x0d, 0x4a, 0x98, 0xd2, 0xc9, 0x7d, 0x8f, 0x13, 0x97, 0xd1, 0x78, 0x9d, 0xaf, diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index cfa22917c..8c9e6c5cf 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -122,6 +122,14 @@ ifeq ($(FASTVERIFY),1) CFLAGS += --define=WOLF_MLDSA_FAST_VERIFY endif +# SECUREBOOT=1 verifies a PACKED firmware image straight from flash in pure +# (non pre-hash) ML-DSA mode, streaming it through SHAKE-256 so the image is +# never resident. Standalone image, like MLDSA=1. +SECUREBOOT ?= 0 +ifeq ($(SECUREBOOT),1) + CFLAGS += --define=WOLF_SECUREBOOT --define=WOLF_MLDSA_ALL_LEVELS +endif + MLDSA ?= 0 ifeq ($(MLDSA),1) CFLAGS += --define=WOLF_MLDSA_ALL_LEVELS @@ -279,6 +287,10 @@ ifeq ($(SIGN),1) --define=NO_CRYPT_BENCHMARK LNKCMD := $(CURDIR)/28p55x_wolf_sign_lnk.cmd HARNESS_SRCS := +else ifeq ($(SECUREBOOT),1) + CFLAGS += --define=NO_CRYPT_TEST --define=NO_CRYPT_BENCHMARK + LNKCMD := $(CURDIR)/28p55x_wolf_flash_lnk.cmd + HARNESS_SRCS := else ifeq ($(MLDSA),1) ifeq ($(BENCH),1) $(error MLDSA=1 and BENCH=1 are separate images - build them one at a time) diff --git a/embedded/ti-c2000-f28p55x/README.md b/embedded/ti-c2000-f28p55x/README.md index af6c61319..f4534b750 100644 --- a/embedded/ti-c2000-f28p55x/README.md +++ b/embedded/ti-c2000-f28p55x/README.md @@ -26,6 +26,16 @@ Data arriving from flash, SCI, CAN or a host tool is **packed**, two octets per `make MLDSA=1` proves this on hardware: ML-DSA-44/65/87 verify, `wc_MlDsaKey_VerifyCtxHash()` over SHA-256/SHA-512 with a non-empty context, and a verify from a packed key and signature. Vectors are in `Header/mldsa_octet_kat.h`, regenerated by `tools/gen_kat.c` (build it against a host wolfSSL, run it, and move the header into `Header/`). Full write-up: `IDE/C2000/README.md` in the wolfSSL tree. +## Pure-mode secure boot (`SECUREBOOT=1`) + +CNSA 2.0 prefers pure ML-DSA (no pre-hash), but `wc_MlDsaKey_VerifyCtx()` takes the whole message as one buffer -- impossible for a firmware image on a part with 133 KB of RAM, doubled to 2 bytes per octet. + +It does not need to be buffered. The message reaches ML-DSA only through `mu = SHAKE256(tr || 0x00 || ctxLen || ctx || M)` where `tr = SHAKE256(publicKey)`, and a hash streams. `wc_MlDsaKey_VerifyMu()` takes `mu` directly -- this is ExternalMu-ML-DSA, the same mode ACVP tests -- so the bootloader reads the image a chunk at a time, expands each chunk with `wc_UnpackOctets()`, absorbs it, and verifies. RAM cost is the chunk buffer plus 128 octets, whatever the image size, and the result is bit-identical to `VerifyCtx()`. + +`make SECUREBOOT=1` proves it on hardware: an 8192-octet image stored packed in flash, streamed in 256-octet chunks, plus a corrupted-image rejection. The same loop scales to any image size. + +Three things that fail *silently* if they do not match your signer: the `0x00 || ctxLen` prefix must be present (the legacy no-context API omits it), `tr` is over the **raw** encoded key rather than a DER/SPKI wrapper, and the SHAKE context must be your own -- wolfSSL reuses the one inside the key during verification. + ## The 16-bit-byte (CHAR_BIT == 16) story On the C28x a `char`/`unsigned char` (wolfSSL's `byte`) holds 16 bits, the minimum addressable unit is 16 bits, and `(byte)x` masks to 16 bits, not 8. wolfCrypt octet handling that assumed an 8-bit byte was made `CHAR_BIT`-agnostic behind the `WOLFSSL_WIDE_BYTE` gate (auto-enabled for `CHAR_BIT != 8` and known 16-bit-char TI toolchains), with zero change on 8-bit targets. The fixes fall into a few recurring classes: @@ -71,7 +81,9 @@ Each is `make =1` (default 0 unless noted), additive on top of the default | `ENTROPY_PROBE=1` | Raw entropy characterization image: dumps unconditioned samples over SCI for host analysis, runs no crypto | | `RSA=1` | RSA-2048 verify (SP math, 2048-only, verify/public-only) | | `SIGN=1` | Full ML-DSA-87 keygen+sign+verify demo (dedicated linker script, 32 KW heap, no test/bench harness) | +| `SECUREBOOT=1` | Pure-mode (non pre-hash) ML-DSA-87 verify of a PACKED firmware image streamed straight from flash -- the image is never held in RAM. See "Pure-mode secure boot" below | | `MLDSA=1` | ML-DSA octet-boundary KATs: verify at all three parameter sets, `wc_MlDsaKey_VerifyCtxHash()` over SHA-256/SHA-512, and a verify from a PACKED key/signature via `wc_UnpackOctets()`. No test/bench harness. See "Octet representation" below | +| `FASTVERIFY=1` | Trade RAM for ML-DSA verify speed: keeps the full `z` vector and uses a 64-bit accumulator. Measured 244 -> 198 ms/op for ML-DSA-87 verify, RAM 10.7 -> 23.9 KB | | `BENCH=1` | Run only `benchmark` instead of `wolfcrypt_test` (they need separate images on this RAM-limited part) | Other knobs: `CGT_ROOT` (required), `C2000WARE`, `WOLFROOT`, and `CIO=1` (route `printf` to the CCS/JTAG console via CIO instead of the default SCI/UART). @@ -104,7 +116,7 @@ Measured at 150 MHz (SHA-256 Hash-DRBG via `WOLFSSL_GENSEED_FORTEST`; build with | SHAKE128 / SHAKE256 | ~319 / 264 KiB/s | | RNG (Hash-DRBG) | ~122 KiB/s | -ML-DSA-87 (asymmetric, @150 MHz): verify ~225 ms/op; keygen and signing also run (`SIGN=1`). ML-DSA-87 verify memory: ~10.7 KB total (key/workspace struct + ~2 KB stack, zero heap) with `WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM` + `WOLFSSL_MLDSA_ASSIGN_KEY`. +ML-DSA-87 (asymmetric, @150 MHz): verify 244 ms/op default, **189 ms/op** with `FASTVERIFY=1` and `--opt_level=3 --opt_for_speed=5` (23% faster, RAM 10.7 -> 23.9 KB, zero heap either way); keygen and signing also run (`SIGN=1`). ML-DSA-87 verify memory: ~10.7 KB total (key/workspace struct + ~2 KB stack, zero heap) with `WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM` + `WOLFSSL_MLDSA_ASSIGN_KEY`. ## Memory notes diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index de0b8c3a4..30780a603 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -103,7 +103,7 @@ #endif #include #include -#ifdef WOLF_MLDSA_OCTETS +#if defined(WOLF_MLDSA_OCTETS) || defined(WOLF_SECUREBOOT) /* The octet-boundary image carries its own seed-derived vectors for all three * parameter sets (it needs the matching private key to produce the pre-hash * signatures), and reuses the same kat_mldsa87_* names. The canonical FIPS 204 @@ -1188,6 +1188,120 @@ static void wolf_mldsa_octet_test(void) } #endif /* WOLF_MLDSA_OCTETS */ +#ifdef WOLF_SECUREBOOT +/* ------------------------------------------------------------------------- */ +/* Pure-mode ML-DSA secure boot (make SECUREBOOT=1) */ +/* ------------------------------------------------------------------------- */ +/* Verifies a firmware image that is stored PACKED in flash - two octets per + * 16-bit cell, the layout a host signing tool and the C28x programmer produce - + * without ever holding the image in RAM. + * + * ML-DSA has no streaming interface, but the message reaches the algorithm only + * through mu = SHAKE256(tr || 0x00 || ctxLen || ctx || M), and a hash streams. + * wc_MlDsaKey_VerifyMu() takes mu directly (ExternalMu-ML-DSA), so the image is + * read a chunk at a time, expanded with wc_UnpackOctets(), and absorbed. + * RAM cost is the chunk buffer plus 128 octets, whatever the image size. */ + +#define SB_CHUNK 256 /* octets per flash read */ + +static wc_MlDsaKey sb_key; /* .bss: too big for the 16 KW C28x stack */ + +/* Build mu over the packed image. flip < 0 leaves the image intact; otherwise + * one octet is corrupted, to prove a bad image is rejected. */ +static int sb_build_mu(byte* mu, long flip) +{ + wc_Shake sh; + byte tr[MLDSA_TR_SZ]; + byte buf[SB_CHUNK]; + byte prefix[2]; + word32 off; + int ret; + + /* tr = SHAKE256(raw public key). Constant for a fixed verification key, + * so a production bootloader would precompute this at build time. */ + ret = wc_InitShake256(&sh, NULL, INVALID_DEVID); + if (ret == 0) { + ret = wc_Shake256_Update(&sh, sb_mldsa87_pub, + (word32)sizeof(sb_mldsa87_pub)); + } + if (ret == 0) { + ret = wc_Shake256_Final(&sh, tr, (word32)sizeof(tr)); + } + wc_Shake256_Free(&sh); + if (ret != 0) { + return ret; + } + + /* mu = SHAKE256(tr || 0x00 || ctxLen || ctx || image). 0x00 selects pure + * (non pre-hash) mode; the context here is empty. */ + prefix[0] = 0x00; + prefix[1] = 0x00; + ret = wc_InitShake256(&sh, NULL, INVALID_DEVID); + if (ret == 0) { + ret = wc_Shake256_Update(&sh, tr, (word32)sizeof(tr)); + } + if (ret == 0) { + ret = wc_Shake256_Update(&sh, prefix, 2); + } + for (off = 0; (ret == 0) && (off < SB_IMG_SZ); off += SB_CHUNK) { + word32 n = SB_IMG_SZ - off; + if (n > SB_CHUNK) { + n = SB_CHUNK; + } + ret = wc_UnpackOctets(buf, (word32)sizeof(buf), + (const byte*)sb_image_packed + (off / WC_OCTETS_PER_BYTE), + WC_PACKED_CELLS(n), n); + if ((ret == 0) && (flip >= 0) && + ((word32)flip >= off) && ((word32)flip < off + n)) { + buf[(word32)flip - off] ^= 0x01; + } + if (ret == 0) { + ret = wc_Shake256_Update(&sh, buf, n); + } + } + if (ret == 0) { + ret = wc_Shake256_Final(&sh, mu, MLDSA_MU_SZ); + } + wc_Shake256_Free(&sh); + return ret; +} + +static void sb_verify(const char* what, long flip, int want) +{ + byte mu[MLDSA_MU_SZ]; + int res = -1; + int ret; + + ret = sb_build_mu(mu, flip); + if (ret == 0) { + ret = wc_MlDsaKey_Init(&sb_key, NULL, INVALID_DEVID); + } + if (ret == 0) { + ret = wc_MlDsaKey_SetParams(&sb_key, WC_ML_DSA_87); + } + if (ret == 0) { + ret = wc_MlDsaKey_ImportPubRaw(&sb_key, sb_mldsa87_pub, + (word32)sizeof(sb_mldsa87_pub)); + } + if (ret == 0) { + ret = wc_MlDsaKey_VerifyMu(&sb_key, sb_mldsa87_sig, + (word32)sizeof(sb_mldsa87_sig), mu, MLDSA_MU_SZ, &res); + } + printf("%s %s (ret=%d res=%d)\r\n", what, + ((ret == 0) && (res == want)) ? "PASS" : "FAIL", ret, res); + wc_MlDsaKey_Free(&sb_key); +} + +static void wolf_secureboot_test(void) +{ + printf("secure boot: %lu-octet packed image, %u-octet chunks, " + "image never resident\r\n", + (unsigned long)SB_IMG_SZ, (unsigned)SB_CHUNK); + sb_verify("ML-DSA-87 pure-mode packed-image verify:", -1, 1); + sb_verify("ML-DSA-87 corrupted-image reject:", SB_IMG_SZ / 2, 0); +} +#endif /* WOLF_SECUREBOOT */ + #ifdef WOLF_MLDSA_SIGN /* ML-DSA-87 sign+verify round-trip (keygen -> sign -> verify). Exercises * the full signer on the C28x. Uses the DEV RNG stub (NOT secure) - this @@ -2303,7 +2417,10 @@ int main(void) wolf_sha1_test(); #endif -#if defined(WOLF_MLDSA_OCTETS) +#ifdef WOLF_SECUREBOOT + printf("\r\n--- Pure-mode ML-DSA secure boot ---\r\n"); + wolf_secureboot_test(); +#elif defined(WOLF_MLDSA_OCTETS) printf("\r\n--- ML-DSA octet boundary (44/65/87, pre-hash, packed) ---\r\n"); wolf_mldsa_octet_test(); #elif !defined(WOLF_MLDSA_SIGN) diff --git a/embedded/ti-c2000-f28p55x/tools/gen_kat.c b/embedded/ti-c2000-f28p55x/tools/gen_kat.c index 993d80099..dbc2b0475 100644 --- a/embedded/ti-c2000-f28p55x/tools/gen_kat.c +++ b/embedded/ti-c2000-f28p55x/tools/gen_kat.c @@ -36,6 +36,11 @@ #define MSG_SZ 512 #define OUT_NAME "mldsa_octet_kat.h" +/* A stand-in firmware image for the secure-boot demo. Deliberately larger + * than anything a bootloader would buffer, to show the image is never + * resident: it is stored PACKED in flash and streamed through SHAKE-256. */ +#define IMG_SZ 8192 + static const byte kSeed[MLDSA_SEED_SZ] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, @@ -155,6 +160,43 @@ static int do_level(int type, const char* tag, const byte* msg, return ret; } +/* Secure-boot vectors: an ML-DSA-87 key, a packed "firmware image", and a + * PURE (non pre-hash) signature over that image. */ +static int do_secureboot(byte* img) +{ + wc_MlDsaKey key; + byte pub[MLDSA_MAX_PUB_KEY_SIZE]; + byte sig[MLDSA_MAX_SIG_SIZE]; + word32 pubLen = (word32)sizeof(pub); + word32 sigLen = (word32)sizeof(sig); + int ret; + + ret = wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID); + if (ret == 0) + ret = wc_MlDsaKey_SetParams(&key, WC_ML_DSA_87); + if (ret == 0) + ret = wc_MlDsaKey_MakeKeyFromSeed(&key, kSeed); + if (ret == 0) + ret = wc_MlDsaKey_ExportPubRaw(&key, pub, &pubLen); + if (ret == 0) { + /* Pure mode: sign the image itself, no pre-hash, empty context. */ + ret = wc_MlDsaKey_SignCtxWithSeed(&key, NULL, 0, sig, &sigLen, + img, IMG_SZ, kRnd); + } + if (ret == 0) { + fprintf(out, "\n#define SB_IMG_SZ %u\n\n", (unsigned)IMG_SZ); + emit_bytes("sb_mldsa87_pub", pub, pubLen); + emit_packed("sb_image_packed", img, IMG_SZ); + emit_bytes("sb_mldsa87_sig", sig, sigLen); + } + else { + fprintf(stderr, "secure-boot vector generation failed: %d\n", ret); + } + + wc_MlDsaKey_Free(&key); + return ret; +} + int main(void) { byte msg[MSG_SZ]; @@ -200,7 +242,16 @@ int main(void) "#define MLDSA_OCTET_KAT_H\n\n" "#define KAT_MLDSA_CTX \"%s\"\n\n", kCtx); - ret = do_level(WC_ML_DSA_44, "44", msg, sha256, sha512, 0, 0); + { /* deterministic stand-in image */ + static byte img[IMG_SZ]; + int j; + for (j = 0; j < IMG_SZ; j++) { + img[j] = (byte)(((j * 31) ^ (j >> 5)) & 0xFF); + } + ret = do_secureboot(img); + } + if (ret == 0) + ret = do_level(WC_ML_DSA_44, "44", msg, sha256, sha512, 0, 0); if (ret == 0) ret = do_level(WC_ML_DSA_65, "65", msg, sha256, sha512, 1, 0); if (ret == 0) From 9046a9548f64f7935837b969c35faf6b8ed71304 Mon Sep 17 00:00:00 2001 From: David Garske Date: Wed, 2 Sep 2026 10:33:13 -0700 Subject: [PATCH 7/8] TI C2000: add PRECOMPA build using a flash-resident ML-DSA-87 matrix A --- .../Header/mldsa87_precomp_a.h | 1458 +++++++++++++++++ embedded/ti-c2000-f28p55x/Makefile | 7 + embedded/ti-c2000-f28p55x/Source/wolf_main.c | 67 + embedded/ti-c2000-f28p55x/tools/gen_kat.c | 113 ++ 4 files changed, 1645 insertions(+) create mode 100644 embedded/ti-c2000-f28p55x/Header/mldsa87_precomp_a.h diff --git a/embedded/ti-c2000-f28p55x/Header/mldsa87_precomp_a.h b/embedded/ti-c2000-f28p55x/Header/mldsa87_precomp_a.h new file mode 100644 index 000000000..968879616 --- /dev/null +++ b/embedded/ti-c2000-f28p55x/Header/mldsa87_precomp_a.h @@ -0,0 +1,1458 @@ +/* Precomputed ML-DSA-87 matrix A for the secure-boot key. + * + * GENERATED by tools/gen_kat.c - do not edit. A = ExpandA(rho) + * and depends only on the public key, so a fixed verification + * key lets it be built once and stored in flash, removing the + * SHAKE128 rejection sampling from every verify. + * + * SECURITY: protect this exactly as you protect the public key. + * Substituting it can influence verification. */ +#ifndef MLDSA87_PRECOMP_A_H +#define MLDSA87_PRECOMP_A_H + +#define SB_A_LEN 14336L + +static const sword32 sb_mldsa87_A[SB_A_LEN] = { + 6954605L, 732787L, 284010L, 6348222L, 3737298L, 7502167L, 1454972L, 8118542L, 2029310L, 685220L, + 6294589L, 5807737L, 2570418L, 570474L, 4540748L, 20396L, 4088842L, 5035937L, 2036572L, 7296739L, + 5786582L, 3364769L, 5790637L, 6670809L, 2489947L, 7756926L, 5667565L, 6374575L, 1401511L, 2117340L, + 6239510L, 5106518L, 8281348L, 3199623L, 5700168L, 3648798L, 391382L, 2152487L, 1749895L, 6660849L, + 4251273L, 4663466L, 5434405L, 4182597L, 3711911L, 3959632L, 5898001L, 8260963L, 4763758L, 6210919L, + 3175549L, 3257917L, 1805961L, 5951801L, 1365612L, 4019534L, 426495L, 4012602L, 4047475L, 4391460L, + 2757561L, 996870L, 5040229L, 7657087L, 394415L, 546760L, 5354563L, 5893889L, 3046671L, 1120956L, + 6429325L, 1561233L, 7209378L, 3064038L, 8311791L, 86745L, 3550653L, 2654557L, 8216320L, 3552544L, + 5752954L, 4936647L, 5539189L, 4408639L, 1987622L, 1868813L, 2264001L, 1089201L, 4085574L, 262665L, + 4103817L, 4667366L, 1641049L, 6273L, 7388350L, 4157730L, 3249980L, 6000696L, 2467961L, 3445117L, + 2911211L, 733493L, 2786552L, 1673772L, 3294003L, 5955444L, 575802L, 5210415L, 8173606L, 5878611L, + 1435143L, 7683297L, 2567652L, 7133860L, 5660307L, 7172398L, 4594624L, 6102416L, 7668426L, 4324579L, + 2211329L, 4404515L, 1107189L, 6529011L, 2617038L, 2245272L, 383048L, 5103807L, 5353635L, 6624627L, + 5289271L, 1570597L, 6296627L, 1950897L, 1780007L, 1939660L, 4166058L, 1466109L, 1216907L, 3741748L, + 6589361L, 330146L, 6854809L, 7778657L, 1537234L, 3008251L, 5967545L, 6849104L, 1171334L, 834763L, + 5218755L, 1367453L, 5809578L, 1069075L, 5304364L, 6231410L, 1018315L, 5865475L, 3448389L, 994096L, + 4728108L, 7569214L, 1895091L, 2788829L, 5462196L, 8310034L, 8318102L, 6381437L, 7767547L, 1381642L, + 7600328L, 930306L, 4092452L, 6898529L, 5179102L, 6838652L, 2370118L, 775442L, 1524388L, 7915647L, + 5084855L, 6316628L, 4909469L, 1317088L, 6918101L, 1103411L, 3292701L, 2598041L, 46768L, 646634L, + 4703460L, 1298630L, 3274772L, 3971977L, 5955761L, 8139322L, 6657467L, 8269352L, 1445491L, 5116718L, + 1155138L, 4954191L, 4028094L, 3211047L, 127556L, 5236909L, 702036L, 6355600L, 6590765L, 6974026L, + 8093919L, 1829900L, 7968680L, 2051235L, 3600000L, 7950322L, 1991173L, 1038510L, 6987344L, 583126L, + 6445914L, 3332945L, 3902505L, 4974689L, 1367884L, 6295329L, 5720994L, 4436628L, 7513008L, 731321L, + 6214285L, 1999764L, 7946009L, 6741355L, 6341779L, 5240708L, 7028601L, 3449473L, 2582599L, 1975299L, + 7513328L, 903318L, 1006739L, 2315464L, 2325045L, 5823020L, 2186166L, 5674849L, 4084874L, 2123633L, + 5076106L, 1643311L, 3503159L, 1388315L, 2871320L, 6194782L, 5386869L, 466036L, 7627944L, 2523754L, + 4079338L, 3213143L, 4766307L, 3389957L, 2527800L, 7499196L, 3951505L, 2645647L, 4632729L, 5793158L, + 7172330L, 725381L, 1200547L, 7324738L, 2130409L, 515158L, 3741131L, 8100446L, 4122721L, 7687496L, + 5860670L, 8366985L, 5478516L, 5780379L, 2654432L, 6138411L, 1196349L, 3968203L, 4887666L, 3305303L, + 4866259L, 6607231L, 6438258L, 6656858L, 645372L, 3972064L, 6863459L, 4939599L, 814071L, 8120956L, + 3910024L, 6310850L, 2984341L, 1354969L, 7399927L, 945463L, 2920008L, 6842225L, 8250020L, 429412L, + 1395762L, 6848782L, 6840579L, 8060673L, 7088578L, 2564454L, 992313L, 7271838L, 7063655L, 3945870L, + 5159987L, 5428974L, 7773369L, 709741L, 4537614L, 6690261L, 5171072L, 736838L, 6029738L, 1738998L, + 3934749L, 5872622L, 3994147L, 7744753L, 6544215L, 488895L, 7639137L, 5600987L, 4374903L, 5995040L, + 3046716L, 306914L, 4286347L, 5291304L, 6606395L, 3019671L, 8029527L, 7178407L, 2617512L, 4045948L, + 5601571L, 8080681L, 5893477L, 888982L, 1070698L, 5782039L, 3763622L, 7405564L, 2193014L, 5323828L, + 5270483L, 8264650L, 8131910L, 7735811L, 2463604L, 3044069L, 4284563L, 1591118L, 85046L, 4362285L, + 7661365L, 2237720L, 5422510L, 3261047L, 2973671L, 3932884L, 7292865L, 6864827L, 7839020L, 5394635L, + 3464105L, 6262029L, 1591499L, 1431525L, 5854784L, 964286L, 4085010L, 1477989L, 5135513L, 364025L, + 4391417L, 7555178L, 5321929L, 6149387L, 1085580L, 259622L, 401735L, 1698475L, 1122717L, 1899955L, + 4731946L, 8072406L, 2459312L, 2302377L, 917145L, 219080L, 1121473L, 163451L, 4723794L, 3128710L, + 3352984L, 1948261L, 5058944L, 4977855L, 5395491L, 3178478L, 3223650L, 3336624L, 5611463L, 493367L, + 6664058L, 881729L, 3721204L, 4370786L, 7353109L, 5528496L, 7212749L, 123723L, 8227883L, 2084908L, + 6454994L, 5724256L, 8257151L, 6041712L, 5423581L, 2609448L, 3676631L, 5972309L, 5572347L, 4946948L, + 875484L, 5710907L, 922711L, 4136956L, 4427563L, 1740074L, 927132L, 2988692L, 4846229L, 1270864L, + 8072598L, 7337482L, 3870614L, 534566L, 7873153L, 7577307L, 355078L, 5197681L, 4664875L, 6163391L, + 1838732L, 6955845L, 5641275L, 7484142L, 6010432L, 5363473L, 988398L, 8225088L, 2430340L, 5747823L, + 8084907L, 2438308L, 3652169L, 2892389L, 1365637L, 1929571L, 6725267L, 1106314L, 7318803L, 7415429L, + 5797677L, 6854295L, 1481692L, 5096125L, 3701171L, 8122973L, 3569701L, 1268630L, 5446904L, 760461L, + 6880552L, 695278L, 4009663L, 1821334L, 3344905L, 1615423L, 982661L, 7604538L, 3939813L, 6349880L, + 2253351L, 4172400L, 2874138L, 3621286L, 7817772L, 4619161L, 4229979L, 7425673L, 1321888L, 1265442L, + 5560729L, 821862L, 4760726L, 2525121L, 842934L, 2587540L, 2350188L, 7488884L, 4670118L, 6207047L, + 6024270L, 7389321L, 6458694L, 7505443L, 1929533L, 171045L, 3538501L, 5068917L, 7728961L, 5417663L, + 2101406L, 5131297L, 4708941L, 6784316L, 2695003L, 1571166L, 2454115L, 1108754L, 1715446L, 5834903L, + 7524194L, 4144034L, 6170442L, 131346L, 2272595L, 4871250L, 6512879L, 26310L, 2907592L, 4695996L, + 6053293L, 2504674L, 4550930L, 6960134L, 5645403L, 8346041L, 7006392L, 3779210L, 379283L, 8021370L, + 3023467L, 3260329L, 7952549L, 3742354L, 2925086L, 1583478L, 2638150L, 1133049L, 4415742L, 1283718L, + 6530918L, 2986585L, 1019088L, 959194L, 8161471L, 1532859L, 2358238L, 6134875L, 746921L, 4991069L, + 6904557L, 6989232L, 6637622L, 4535971L, 1861568L, 3379849L, 6201770L, 763964L, 2922713L, 6951656L, + 6768741L, 1294180L, 3598179L, 3715949L, 1032672L, 4281743L, 7631377L, 2274498L, 6157526L, 8326399L, + 3069676L, 4467681L, 7318372L, 1464641L, 635459L, 1035768L, 5590201L, 4242872L, 5942169L, 5767277L, + 569016L, 2458294L, 3403775L, 1852255L, 721727L, 511767L, 5809784L, 5604478L, 5568020L, 523609L, + 2621072L, 2640571L, 7179269L, 3570781L, 7204215L, 58912L, 3730933L, 6980448L, 2088752L, 117406L, + 733139L, 2042345L, 5262234L, 38759L, 4483379L, 4263544L, 3528766L, 3291500L, 3290923L, 6229361L, + 276236L, 343202L, 7082999L, 330873L, 540608L, 8318779L, 8325089L, 6437028L, 7749373L, 114480L, + 1082729L, 1791962L, 3319786L, 2790100L, 2084300L, 2082221L, 3057065L, 3813296L, 8309204L, 5857142L, + 3392267L, 7255719L, 6554089L, 6828524L, 4734790L, 4882672L, 2744139L, 3819888L, 4649755L, 4646039L, + 5227480L, 5245496L, 5517030L, 1741075L, 1095191L, 1773108L, 8076427L, 7724937L, 4390606L, 4664967L, + 5526307L, 1698182L, 7391726L, 1227662L, 5717590L, 2019405L, 2668903L, 4278891L, 5207464L, 5820385L, + 1400832L, 3167213L, 5919564L, 7832278L, 1629165L, 6325281L, 3930419L, 2497198L, 1253222L, 4375199L, + 6040278L, 963242L, 198547L, 6839403L, 515868L, 1320041L, 4595905L, 5119054L, 6949490L, 655209L, + 5196615L, 6233056L, 6241024L, 4541119L, 6747863L, 2036655L, 7687792L, 3754284L, 995520L, 3445602L, + 1490341L, 5978709L, 434206L, 4913302L, 3700001L, 8229909L, 540207L, 3229275L, 728715L, 127918L, + 2094160L, 7796006L, 769208L, 4339942L, 2570395L, 3694458L, 4867983L, 2070623L, 1456623L, 7797086L, + 7940584L, 8306706L, 384566L, 1073754L, 2277998L, 240082L, 1782366L, 2946395L, 775851L, 2212321L, + 1403540L, 1853969L, 8202989L, 7727723L, 6808200L, 6354838L, 5575265L, 4110805L, 6664159L, 512891L, + 487912L, 3193508L, 1518600L, 5349228L, 61894L, 5422057L, 8260534L, 5371629L, 2694856L, 3749907L, + 8166738L, 7046619L, 6927409L, 6107663L, 4426083L, 3109074L, 4170441L, 5093872L, 871999L, 5858769L, + 1394732L, 5081112L, 3755384L, 7251484L, 3614316L, 1385665L, 4772206L, 2350290L, 6529863L, 5514776L, + 2355849L, 7357507L, 7050729L, 1651875L, 5680808L, 4343636L, 6183206L, 1873778L, 983653L, 7397700L, + 4153448L, 6468400L, 6672787L, 5985852L, 2296777L, 7906485L, 6202893L, 180192L, 5221663L, 2781269L, + 5815727L, 4095636L, 2345855L, 696016L, 7332326L, 5162921L, 6786558L, 1925944L, 1847892L, 4332369L, + 554034L, 6468564L, 5870813L, 7112812L, 7532335L, 1030957L, 5965889L, 5926328L, 4793230L, 8195976L, + 2799831L, 958123L, 2372128L, 4567868L, 4819424L, 6647283L, 1061030L, 7085387L, 1159896L, 7156993L, + 6762525L, 8208533L, 5716033L, 2303749L, 3272912L, 263510L, 8253741L, 5697580L, 7911584L, 6370080L, + 5186783L, 3594625L, 4755989L, 2884684L, 7085518L, 3766313L, 7431309L, 3166489L, 1524696L, 4978954L, + 2544386L, 4079227L, 2009897L, 367965L, 5656007L, 776419L, 6259318L, 5943397L, 1863920L, 593082L, + 5088106L, 4483583L, 388549L, 6039294L, 3712903L, 7949649L, 4175168L, 7188106L, 2591797L, 1706125L, + 2242778L, 1752103L, 1245130L, 3655653L, 5370659L, 3264242L, 8042867L, 456912L, 885500L, 5889051L, + 6792173L, 3160594L, 2175783L, 7702124L, 6653690L, 4976179L, 7646986L, 4509188L, 2677283L, 7949395L, + 109170L, 252044L, 8072447L, 6817407L, 1814403L, 6568962L, 2592761L, 5728692L, 5974215L, 6651638L, + 7910301L, 2118952L, 930944L, 3544473L, 7900226L, 1040657L, 89974L, 7789039L, 3267999L, 3607361L, + 4431299L, 6430065L, 5091224L, 1372901L, 4715535L, 3237369L, 3314382L, 5051328L, 2721095L, 7328599L, + 2088816L, 4723329L, 1388706L, 6336797L, 3519267L, 6669407L, 2907400L, 2707455L, 8265258L, 759292L, + 5076731L, 2090815L, 7699899L, 4445651L, 2371537L, 763433L, 164461L, 4975223L, 4560608L, 4501879L, + 1775346L, 91760L, 7837208L, 3626849L, 3933848L, 3277177L, 2307711L, 8037661L, 3676026L, 2178507L, + 3845803L, 4704010L, 3663371L, 3198124L, 6497524L, 284527L, 345318L, 959544L, 5926359L, 1947687L, + 4932922L, 3677028L, 3826125L, 1593613L, 4752782L, 1407913L, 6235056L, 1887438L, 7426710L, 4042596L, + 7833255L, 2926096L, 6008577L, 7277955L, 2685989L, 3115937L, 4254170L, 4870548L, 3534159L, 8096867L, + 1562548L, 5203963L, 318949L, 1877209L, 3319060L, 5985113L, 8143282L, 6486586L, 5704504L, 1546893L, + 5288711L, 1066285L, 7353828L, 253484L, 5098638L, 8307355L, 5322104L, 6553371L, 7323041L, 5031191L, + 2070534L, 6133374L, 4330891L, 6249641L, 225093L, 3567407L, 1410007L, 3928230L, 3749059L, 1459472L, + 3198081L, 329686L, 6369827L, 460266L, 4606735L, 7179252L, 4092549L, 3757138L, 3247306L, 6903866L, + 5103546L, 7831142L, 1740554L, 5545156L, 5704264L, 3317183L, 7670591L, 5448578L, 1780783L, 5545615L, + 7570471L, 4151310L, 2245990L, 895234L, 3232489L, 2129100L, 2002714L, 2750544L, 2765133L, 3720341L, + 4052133L, 2580284L, 2089048L, 4065504L, 5567685L, 5545364L, 6406608L, 6735220L, 396429L, 990423L, + 96272L, 4689138L, 2464375L, 4339955L, 1049452L, 3342243L, 641849L, 3995661L, 2942886L, 3285480L, + 1386484L, 6609685L, 942839L, 4142823L, 3960559L, 6321123L, 2014105L, 1894417L, 3950682L, 7902521L, + 3185763L, 1360843L, 3655589L, 8347264L, 1199439L, 4602154L, 385827L, 983014L, 6385777L, 4310160L, + 7230816L, 544947L, 477321L, 5809479L, 7391947L, 7999346L, 2408271L, 5159616L, 8278903L, 3118527L, + 6562781L, 5472404L, 34635L, 6008814L, 6636471L, 7049464L, 3570991L, 2568062L, 3490780L, 2549332L, + 28308L, 6961110L, 198154L, 1152113L, 6453105L, 1587129L, 5172948L, 7922155L, 2516043L, 6949179L, + 3322566L, 7584162L, 1506578L, 8159107L, 7225427L, 4250406L, 7340151L, 3818636L, 5030556L, 4437288L, + 6127018L, 7114696L, 499604L, 3643405L, 2835629L, 6622840L, 4329474L, 6954990L, 6299844L, 4676742L, + 5557636L, 14833L, 361351L, 6354083L, 4528430L, 5843131L, 4210581L, 5710493L, 6604602L, 1781374L, + 6113020L, 3006173L, 4845613L, 7596834L, 4148122L, 5913881L, 4049271L, 3044858L, 158367L, 8117375L, + 4649298L, 4588640L, 119404L, 4043969L, 1109651L, 6864472L, 6848183L, 5788135L, 693848L, 2583061L, + 8043909L, 2848067L, 6730452L, 5089965L, 3381098L, 1214639L, 8282865L, 5770917L, 6748311L, 6002694L, + 6717888L, 745159L, 369707L, 8327939L, 7400344L, 1141981L, 5096463L, 937430L, 6709940L, 1009516L, + 2288403L, 5624630L, 5039432L, 7467884L, 2077666L, 5573180L, 681891L, 5263693L, 5970051L, 4038548L, + 6630272L, 8243096L, 235864L, 459052L, 5858065L, 65500L, 8332502L, 3410148L, 7973679L, 4372057L, + 2000154L, 3406471L, 3031647L, 4946522L, 6857774L, 4553189L, 6839738L, 1426772L, 5776594L, 3533300L, + 1327211L, 3468804L, 1360843L, 2698065L, 367181L, 78032L, 2179556L, 2912045L, 7110605L, 5589157L, + 7775050L, 1867950L, 1540293L, 3573255L, 3527449L, 4925156L, 1300799L, 3401932L, 8176941L, 583051L, + 4129097L, 7795455L, 2385564L, 6835026L, 5846923L, 2312974L, 3224496L, 3355715L, 4932252L, 4832953L, + 5936281L, 7715264L, 6195924L, 5163789L, 2597642L, 3407831L, 1411699L, 5847988L, 1921806L, 7208664L, + 6061132L, 5443253L, 5099808L, 7916308L, 6276945L, 7058054L, 4262071L, 2360593L, 1072320L, 2512966L, + 8350549L, 4833671L, 3088891L, 2962324L, 6135673L, 8053426L, 3538528L, 4772830L, 8258700L, 1759849L, + 643165L, 5440523L, 2732974L, 4170756L, 2102628L, 5300833L, 5954321L, 5826786L, 6212114L, 4797560L, + 4287927L, 1308579L, 7650537L, 8032889L, 7824076L, 7262155L, 3450435L, 8170384L, 2104547L, 192210L, + 8258960L, 7131009L, 2409265L, 3494891L, 3425918L, 2351593L, 6666358L, 1134234L, 5569550L, 2039831L, + 4537685L, 38465L, 6472474L, 4109051L, 7880514L, 1689099L, 1038649L, 6665657L, 7482705L, 7175992L, + 1266387L, 2590428L, 54618L, 6176905L, 5422043L, 2311545L, 4931044L, 851923L, 1993509L, 7621173L, + 350082L, 664090L, 76704L, 7805517L, 5752938L, 2119646L, 4959213L, 1210611L, 7300282L, 4830108L, + 4919449L, 3744168L, 845331L, 8151334L, 2226959L, 4957616L, 3088297L, 2809189L, 4022191L, 2193598L, + 1780894L, 416908L, 6577465L, 3859511L, 1720724L, 4392243L, 1167499L, 3563291L, 2256468L, 1064635L, + 2991787L, 1234891L, 6671534L, 6007413L, 2463733L, 8238483L, 6126355L, 4969835L, 5565635L, 3615238L, + 8373400L, 2478538L, 5678427L, 883846L, 3457523L, 8229319L, 2324945L, 1258372L, 4498510L, 7402135L, + 6065789L, 1880690L, 5799126L, 1392561L, 469511L, 7938428L, 6945376L, 6314901L, 3733131L, 4518135L, + 1870103L, 785381L, 1617992L, 7623372L, 7975895L, 241836L, 3499044L, 7710508L, 3603754L, 35502L, + 5427617L, 1040161L, 6749533L, 8118326L, 5065976L, 5150882L, 1440530L, 6140351L, 4757825L, 6177534L, + 6108212L, 7977539L, 3859328L, 2237410L, 7793648L, 3819683L, 8039472L, 8348652L, 6574806L, 1359347L, + 7701341L, 1065491L, 8087742L, 503869L, 4391386L, 7835370L, 4834860L, 7512540L, 5524007L, 229247L, + 2108654L, 1924958L, 4582073L, 4256858L, 5619699L, 736833L, 4924855L, 5171167L, 7097482L, 7030583L, + 4191599L, 5511576L, 5294562L, 3594157L, 2681246L, 1792754L, 2352959L, 749521L, 3977998L, 5266431L, + 5187849L, 4833400L, 5506474L, 8360402L, 7981906L, 6985470L, 3148794L, 5656065L, 4185718L, 139473L, + 7468783L, 2155124L, 4655720L, 3959614L, 2208176L, 5752482L, 8098116L, 3990822L, 3676346L, 839559L, + 6589819L, 2520755L, 2868439L, 2991550L, 6173919L, 1917313L, 7602556L, 5129459L, 4164700L, 6072775L, + 12465L, 6604911L, 647249L, 8238016L, 2807163L, 6258153L, 702516L, 2050106L, 3267571L, 7301793L, + 6523850L, 1283400L, 6697207L, 5884281L, 7263258L, 7924499L, 6728693L, 2661682L, 5011827L, 5273267L, + 3367395L, 3542562L, 2238999L, 7123784L, 5345287L, 7619519L, 2549843L, 4526168L, 2347686L, 452560L, + 5795638L, 1534549L, 5363691L, 6874990L, 2288182L, 1780488L, 7591001L, 3323255L, 8050347L, 5082514L, + 8107735L, 6241580L, 5768366L, 3807396L, 1167829L, 578804L, 3164541L, 2143476L, 7621981L, 3448702L, + 6212792L, 7872277L, 7078522L, 2300424L, 8117386L, 7393878L, 5882385L, 3261853L, 5696735L, 3833558L, + 7964119L, 6950106L, 1430780L, 6900256L, 4285563L, 2454560L, 222818L, 4701300L, 4116138L, 1171093L, + 7802602L, 5049265L, 7025469L, 1717699L, 792438L, 7260319L, 5858087L, 963958L, 5575105L, 1424436L, + 734706L, 1243068L, 7123869L, 8297353L, 8292120L, 7304869L, 6768574L, 5129591L, 5176026L, 6642298L, + 4125444L, 1426929L, 1491842L, 381573L, 6270356L, 56720L, 7291399L, 345749L, 3500742L, 2899056L, + 789262L, 5916235L, 2159606L, 5960172L, 3639971L, 3154953L, 5853843L, 6925185L, 6532230L, 5642964L, + 3512765L, 1505609L, 2262665L, 1346353L, 535071L, 3498465L, 4612841L, 1762655L, 6654738L, 99918L, + 3371142L, 7620797L, 2585608L, 3591159L, 948727L, 3585104L, 3301659L, 2359531L, 5363099L, 3815388L, + 6813597L, 7899894L, 405983L, 8055947L, 4483186L, 7638056L, 5674830L, 7450014L, 5823944L, 5424674L, + 5221060L, 5491182L, 6933113L, 4741074L, 4868859L, 5321664L, 4138977L, 3575266L, 7458135L, 7447802L, + 3140928L, 2030511L, 1148131L, 434896L, 2213281L, 4349857L, 5032558L, 1174852L, 3471778L, 4957268L, + 1665237L, 3523429L, 5104665L, 5787585L, 5679250L, 5131519L, 6692652L, 1912605L, 4996549L, 4960850L, + 5312823L, 3403890L, 4664167L, 4074712L, 6538427L, 4248088L, 5889056L, 5849490L, 1915324L, 3014891L, + 1965935L, 4534322L, 7510909L, 2374364L, 441520L, 3321908L, 3193266L, 2881346L, 3874498L, 1725316L, + 3538109L, 3602358L, 8357408L, 7920458L, 3250639L, 8127582L, 4132576L, 3261112L, 4873301L, 7725918L, + 7111406L, 3366725L, 2913949L, 3459887L, 171282L, 3710373L, 3692983L, 5806939L, 1390927L, 7792546L, + 5537073L, 5679556L, 7549503L, 3500957L, 322906L, 84448L, 5432237L, 4592355L, 5620176L, 2975630L, + 1636100L, 86789L, 5261583L, 6455750L, 2522055L, 6795976L, 8159795L, 5433442L, 3582786L, 3597715L, + 5123493L, 3671028L, 2968568L, 5537559L, 4787165L, 4451550L, 5325681L, 1804093L, 4288313L, 3226176L, + 5989085L, 2768282L, 815438L, 1333419L, 3802856L, 3345045L, 4160471L, 6909163L, 4752669L, 1521619L, + 618218L, 46401L, 1632014L, 6754508L, 2182158L, 3363466L, 2097275L, 6009912L, 578820L, 4141857L, + 1996573L, 5372345L, 3651906L, 5140268L, 4133777L, 1660970L, 6629840L, 4672464L, 1858053L, 4765191L, + 6017517L, 1191158L, 5085539L, 6615128L, 3688604L, 1349888L, 6399335L, 1449483L, 4681931L, 2885596L, + 4677845L, 4856854L, 1066464L, 5683287L, 783856L, 1742452L, 5599076L, 2201008L, 5043206L, 1686566L, + 4929393L, 8081530L, 3551642L, 6910369L, 767387L, 623556L, 1376821L, 3846094L, 5921559L, 2514734L, + 5944566L, 7480576L, 8122711L, 1856679L, 5762355L, 7710515L, 7277222L, 8212314L, 7829379L, 925042L, + 8020114L, 1877350L, 8083828L, 731214L, 5071813L, 2132625L, 4611068L, 3472395L, 2696368L, 4052482L, + 1031851L, 4750452L, 6371169L, 4307959L, 3491767L, 8187258L, 3068419L, 6755015L, 4869607L, 7019306L, + 1176868L, 3149653L, 7063456L, 4696494L, 6560529L, 6697493L, 7640071L, 3575258L, 4897425L, 6631599L, + 5056715L, 2646234L, 1597285L, 4816782L, 2412667L, 3642041L, 1224580L, 5331892L, 886865L, 3431013L, + 5738516L, 7812680L, 4418306L, 6868907L, 3796985L, 4293292L, 1322572L, 6560179L, 8062543L, 8132964L, + 6495757L, 4639382L, 4248891L, 7006644L, 4170892L, 193823L, 4726220L, 7552388L, 1809598L, 8286327L, + 6350598L, 757698L, 2548592L, 1044904L, 5472031L, 1103539L, 2512714L, 6567909L, 3181569L, 8129231L, + 8071296L, 3465076L, 7783388L, 2382509L, 6299393L, 2610136L, 995354L, 2759635L, 3866629L, 6483219L, + 8061510L, 5393936L, 8061413L, 4360292L, 2096964L, 2854117L, 6469995L, 1159470L, 7463169L, 3258806L, + 6090474L, 919412L, 6356000L, 6933941L, 6697603L, 3269760L, 4178708L, 3682872L, 8068082L, 6849324L, + 6253195L, 2593080L, 4396912L, 5648044L, 1070606L, 6055511L, 4412954L, 2207402L, 2246668L, 5101137L, + 3658429L, 1286937L, 2810060L, 5281904L, 4467233L, 6239409L, 4108251L, 645744L, 7249542L, 1378507L, + 912955L, 7281309L, 817946L, 2512191L, 1945912L, 3199034L, 5160237L, 3840152L, 1768884L, 838690L, + 6155337L, 4324295L, 7246430L, 1078293L, 6171704L, 4542986L, 2636867L, 1382939L, 6348230L, 2466282L, + 32160L, 7416883L, 8182067L, 3799498L, 7739840L, 532993L, 2516395L, 1062236L, 5239005L, 3163340L, + 5309423L, 8100683L, 6787906L, 6477408L, 4996025L, 7902040L, 4879084L, 2892279L, 7570860L, 4756156L, + 6266262L, 5905838L, 5181625L, 7656885L, 4321142L, 4188884L, 3670554L, 2162743L, 5847860L, 6269554L, + 2700312L, 900877L, 6085901L, 2784913L, 6035165L, 7391073L, 5614672L, 491032L, 3287434L, 383754L, + 280204L, 2260165L, 1384789L, 8325568L, 287162L, 3038601L, 485320L, 2849969L, 4689461L, 4294874L, + 7825220L, 7337970L, 1350151L, 3872520L, 5706538L, 7702913L, 5748400L, 599251L, 7371280L, 3702012L, + 2989086L, 5139347L, 7550647L, 6638975L, 6356117L, 3717937L, 1382607L, 111332L, 4702365L, 7131122L, + 3715241L, 7611629L, 5337627L, 6238993L, 7845411L, 5062211L, 6868831L, 2218417L, 499380L, 4317751L, + 2359157L, 3621504L, 7111342L, 4587712L, 6032322L, 6162518L, 617480L, 4789282L, 4929651L, 2740638L, + 8181402L, 4181132L, 553475L, 2618949L, 656090L, 3813733L, 3609942L, 7924316L, 7192703L, 7880778L, + 7754552L, 4266557L, 7754147L, 3830881L, 8370379L, 4896814L, 8343462L, 5723951L, 7630064L, 404880L, + 6254350L, 6348925L, 536373L, 4071103L, 8071151L, 1765011L, 2045383L, 3028272L, 170745L, 4102298L, + 21787L, 4846090L, 3375115L, 320563L, 5936436L, 3615792L, 2144423L, 3257305L, 4305983L, 6555409L, + 5098751L, 5508137L, 2101527L, 4883640L, 3443688L, 3986597L, 5638271L, 3147812L, 5584018L, 6426349L, + 3281918L, 2257097L, 8155794L, 5871549L, 5776999L, 7777808L, 4707109L, 4935351L, 3667816L, 78930L, + 1489659L, 6285541L, 5974264L, 3944716L, 7629219L, 5847475L, 20559L, 6093945L, 1081104L, 4011658L, + 4361581L, 2436631L, 5348645L, 152178L, 3754221L, 204181L, 6411012L, 3332761L, 2969647L, 1691208L, + 8136719L, 5003535L, 5260987L, 265160L, 6466090L, 666760L, 14515L, 4419978L, 129028L, 7173971L, + 3238958L, 8127519L, 4797528L, 5186549L, 2885688L, 3158503L, 2587314L, 5840675L, 6726025L, 148242L, + 3361108L, 2561732L, 1753167L, 630026L, 7872567L, 8298936L, 5443708L, 4936001L, 1958244L, 8275203L, + 2596009L, 3764691L, 2177459L, 5386230L, 2880743L, 4684899L, 3693323L, 2086701L, 6000994L, 5104601L, + 1057125L, 2111094L, 7111179L, 5833049L, 1221946L, 8249022L, 1004339L, 5514834L, 8140249L, 2722618L, + 6555462L, 3877656L, 3760732L, 3568038L, 934303L, 6436212L, 2345037L, 2859273L, 6379766L, 1426602L, + 5110908L, 3285946L, 6735464L, 969052L, 7021252L, 7997537L, 75190L, 6431002L, 5135785L, 7478906L, + 6554198L, 5057431L, 2429203L, 1144400L, 7369748L, 7756317L, 1196613L, 6051231L, 7268352L, 2135621L, + 2611681L, 3881951L, 6413271L, 6238361L, 4364972L, 1264473L, 1673314L, 8263076L, 248398L, 345791L, + 567733L, 5268163L, 6802382L, 8098711L, 2677817L, 2900089L, 548804L, 3886014L, 3723161L, 2614481L, + 3544482L, 7080058L, 3249735L, 1891832L, 6034481L, 6274343L, 268315L, 5461620L, 3118834L, 994078L, + 5659402L, 6800822L, 4590553L, 2164281L, 4823292L, 4439513L, 3832414L, 109493L, 3092472L, 2953972L, + 2822701L, 2947956L, 3792672L, 1031974L, 7750225L, 241589L, 8193069L, 6691735L, 822206L, 4092103L, + 7560853L, 851543L, 852385L, 1013490L, 3123539L, 1968412L, 5228813L, 5143699L, 1753112L, 3195627L, + 6668515L, 3802151L, 4792384L, 1474327L, 7614344L, 3393053L, 5211537L, 7933389L, 3616823L, 7842942L, + 4701953L, 5944923L, 2941632L, 4727849L, 3493857L, 3747117L, 2865744L, 1667649L, 4711460L, 7392924L, + 6393458L, 7789378L, 1310288L, 4513772L, 3083629L, 2912915L, 2566565L, 5876085L, 8320043L, 7649757L, + 5168818L, 1665706L, 1695844L, 826750L, 428769L, 5280531L, 2861312L, 7994884L, 3714119L, 193577L, + 7759657L, 7986815L, 7804111L, 857869L, 2296047L, 6952100L, 4903218L, 6278079L, 1124012L, 5405145L, + 4439345L, 4336283L, 634330L, 7254974L, 1521370L, 5400833L, 8010199L, 572439L, 1651107L, 821194L, + 7504527L, 6977467L, 6832715L, 7605533L, 3282624L, 4504839L, 1106721L, 5716977L, 2158881L, 4488295L, + 1886442L, 2203859L, 129185L, 6089619L, 5836270L, 2087759L, 7817529L, 1637494L, 1426821L, 4467403L, + 6607791L, 2760307L, 4469997L, 4677160L, 482629L, 1758296L, 8085566L, 5500663L, 5238681L, 3882574L, + 496169L, 7332434L, 3737644L, 3073325L, 7181461L, 2888145L, 573000L, 6322891L, 5097321L, 2183317L, + 5850087L, 8030736L, 6383326L, 6641242L, 5061884L, 5295844L, 2208240L, 4811388L, 3972401L, 928701L, + 1484392L, 1799620L, 6361901L, 7628734L, 4532108L, 67469L, 6376416L, 6672171L, 8026830L, 5294389L, + 5706157L, 2107072L, 4237264L, 4954855L, 8308782L, 157730L, 1655901L, 2050571L, 3241306L, 6913223L, + 570573L, 351131L, 3154610L, 6654522L, 5810440L, 132408L, 1893270L, 1808456L, 2897566L, 8141949L, + 7920193L, 1977107L, 6112267L, 1282550L, 7830091L, 1753789L, 3702414L, 2269275L, 1035131L, 4235143L, + 1812492L, 8237490L, 2679941L, 6378717L, 930615L, 5234521L, 5620723L, 7758239L, 662708L, 6018432L, + 38404L, 7945144L, 2567713L, 4371436L, 2826408L, 1150653L, 5295005L, 6592484L, 2200161L, 6687678L, + 5527723L, 3558144L, 7220069L, 2887229L, 4797951L, 3895642L, 6247507L, 6451834L, 6420750L, 1711959L, + 3010696L, 6746684L, 6059028L, 3235981L, 950668L, 3908071L, 4809701L, 2647292L, 3753604L, 852406L, + 6907055L, 4965692L, 6779860L, 7233752L, 6546300L, 3316406L, 5101063L, 634953L, 5940057L, 4760306L, + 2271997L, 5534621L, 1453596L, 2964420L, 3956072L, 4684216L, 2290918L, 463471L, 5765970L, 8248129L, + 5024846L, 1365657L, 6558778L, 153933L, 5935787L, 724296L, 4785480L, 6342942L, 6656200L, 6554066L, + 2832513L, 5229516L, 2613844L, 7946614L, 7010878L, 3561074L, 4134646L, 8063305L, 7563393L, 2094942L, + 3542746L, 7479416L, 1806975L, 1268361L, 4164356L, 5675463L, 8316956L, 6613941L, 7960685L, 5587979L, + 8045626L, 5054230L, 3837768L, 7221844L, 7225389L, 4924530L, 6038941L, 2959090L, 3321181L, 3830790L, + 6346525L, 2888880L, 356636L, 501304L, 5284058L, 2282890L, 5071042L, 4462950L, 49275L, 1755169L, + 7608745L, 8292458L, 6470472L, 838797L, 3760612L, 5482526L, 7673058L, 4250917L, 5647000L, 428122L, + 4273463L, 7583598L, 8341320L, 1077452L, 3062747L, 2916348L, 5283515L, 215764L, 1956069L, 4666965L, + 3433507L, 5492859L, 7873443L, 3414176L, 2121888L, 6052958L, 810626L, 7866177L, 3918490L, 6268193L, + 5568335L, 5679553L, 5695260L, 566376L, 5372882L, 7506347L, 3531679L, 1581845L, 5915654L, 2261099L, + 5384120L, 8050747L, 7971896L, 3533392L, 3112810L, 7247610L, 4751123L, 3560553L, 4378961L, 5776956L, + 6718944L, 4203784L, 4821600L, 1767799L, 5285269L, 3810760L, 950904L, 3183988L, 7665818L, 1621665L, + 3205807L, 6735180L, 4339765L, 4731877L, 290067L, 464477L, 7135561L, 6955535L, 4915837L, 1497935L, + 4591698L, 2311659L, 495488L, 1842435L, 181490L, 5270672L, 3314717L, 181965L, 1429094L, 4433894L, + 2983634L, 230363L, 5364191L, 4590118L, 2237135L, 4417824L, 2279083L, 935627L, 7731976L, 2356730L, + 7090954L, 4245715L, 3068152L, 7836876L, 975072L, 5111022L, 7208594L, 1258472L, 7908182L, 7593503L, + 4417538L, 5831859L, 5618711L, 2272282L, 4368747L, 1267717L, 2868633L, 5638452L, 7846653L, 7595434L, + 3842910L, 4813057L, 4135001L, 5881543L, 5381455L, 3274589L, 2849054L, 2260038L, 2446772L, 1575734L, + 4960925L, 7973428L, 2314921L, 5804041L, 1860965L, 2175828L, 2271872L, 5465165L, 319628L, 590144L, + 3187821L, 5771298L, 662991L, 2466613L, 7710159L, 3258820L, 1075706L, 5170914L, 7030690L, 4804427L, + 2928067L, 3034043L, 1737303L, 2290798L, 6042040L, 6415914L, 4289021L, 1386157L, 4069843L, 1338124L, + 6328531L, 5493588L, 1403405L, 864276L, 5556232L, 6277770L, 2308268L, 3566124L, 6188415L, 1878298L, + 7504588L, 3753285L, 3351593L, 1534448L, 5121529L, 809038L, 6519074L, 3054540L, 3096553L, 465198L, + 5688985L, 6712527L, 694374L, 1246738L, 5180969L, 7573811L, 3111626L, 6649798L, 2009083L, 7548880L, + 3370742L, 3181772L, 5948108L, 2435002L, 1124423L, 1427886L, 4974281L, 6308528L, 5448279L, 7456371L, + 2563345L, 376397L, 1795722L, 2090303L, 7057615L, 7908338L, 4194605L, 8033786L, 3804488L, 4317666L, + 3556843L, 5034362L, 7338073L, 1496236L, 2395828L, 5440045L, 5435688L, 6393804L, 5541596L, 167778L, + 2351350L, 2026702L, 303205L, 2444997L, 4891857L, 7309243L, 1955907L, 2225796L, 7216569L, 4843351L, + 5557649L, 8377824L, 3284401L, 5495202L, 905184L, 1416513L, 6085546L, 5847595L, 2790070L, 4410340L, + 2405657L, 792993L, 6803582L, 6039506L, 7179974L, 7963928L, 3716360L, 7594928L, 6057161L, 1567613L, + 4246858L, 8328932L, 5344890L, 523275L, 2350093L, 108958L, 7293386L, 498255L, 4508439L, 3416404L, + 2691937L, 310640L, 5530127L, 4339034L, 2914385L, 6907860L, 4305762L, 7163139L, 7580077L, 7439822L, + 3308064L, 2474982L, 7492325L, 5990929L, 4897604L, 561967L, 1149118L, 4713259L, 5166933L, 1645204L, + 7617420L, 249282L, 4167767L, 2187697L, 7279752L, 1522017L, 7557487L, 6987201L, 3192590L, 1512375L, + 3351524L, 4009240L, 4091165L, 2857242L, 3128628L, 2910050L, 4526374L, 3727700L, 3298759L, 2772016L, + 7984853L, 282607L, 102544L, 8095930L, 6884819L, 4941400L, 1390531L, 316654L, 7879359L, 7557991L, + 2850463L, 7214589L, 4244847L, 6442861L, 6830035L, 5722992L, 4164236L, 5159828L, 474884L, 1282731L, + 7462891L, 509997L, 6232665L, 8065269L, 7702945L, 3102475L, 3731390L, 154819L, 7900084L, 3179543L, + 6044321L, 7407284L, 2105151L, 305087L, 2114530L, 3858180L, 6153226L, 4080361L, 1561548L, 6341160L, + 309583L, 6949176L, 4501535L, 4433408L, 4040518L, 7875967L, 6338621L, 7994600L, 4670386L, 3053643L, + 4335510L, 5805384L, 2125333L, 778579L, 1880228L, 6999575L, 5570216L, 1665777L, 1056072L, 8090938L, + 4285594L, 7913521L, 1995780L, 5931125L, 5644458L, 6610223L, 22616L, 4959541L, 2875139L, 5189406L, + 1365754L, 3732182L, 7569558L, 6737392L, 3503855L, 8337048L, 3555023L, 72380L, 942531L, 5548304L, + 5578055L, 6127088L, 7385410L, 2674645L, 1523439L, 7688663L, 4349845L, 823605L, 8066425L, 5252916L, + 2240494L, 4736716L, 780153L, 6837719L, 1195528L, 1513799L, 6843955L, 4827436L, 7847480L, 8268078L, + 4658584L, 5714813L, 7900496L, 4280304L, 3940620L, 7576309L, 6654539L, 2625956L, 276450L, 5001161L, + 6474209L, 6820818L, 8196541L, 5590351L, 548952L, 3541896L, 5605863L, 5740731L, 645714L, 7611192L, + 3621947L, 3502346L, 5210237L, 2578213L, 5397396L, 1102488L, 7202488L, 2271899L, 4455389L, 1109517L, + 574813L, 6757453L, 2260104L, 6393222L, 3288337L, 4949708L, 4447800L, 5907101L, 7219334L, 4099314L, + 289233L, 197933L, 8203337L, 5738173L, 6117515L, 7379185L, 5372630L, 5025194L, 1085577L, 6247086L, + 2109927L, 6628398L, 6777243L, 703664L, 1839533L, 2703080L, 3363115L, 1898523L, 394150L, 875487L, + 7108242L, 4514908L, 153778L, 51678L, 78325L, 6460870L, 2001000L, 5450089L, 2184610L, 5636048L, + 2660163L, 6416811L, 3072588L, 5306855L, 8044896L, 1765876L, 5060626L, 2700257L, 6320896L, 7476947L, + 7343332L, 2126216L, 1080168L, 1621353L, 3189610L, 7415253L, 3737344L, 3111299L, 8174690L, 1949532L, + 88413L, 1072793L, 5521484L, 3049369L, 7465226L, 3392453L, 2977828L, 7118378L, 2305103L, 5516669L, + 5127748L, 6878632L, 469873L, 3762948L, 1485523L, 4468441L, 7001245L, 4178717L, 657460L, 3244050L, + 8014916L, 4790889L, 6432203L, 2822432L, 5832372L, 7591543L, 1602842L, 6321309L, 5165059L, 899980L, + 4263094L, 7822793L, 1486005L, 4885193L, 594769L, 3832525L, 6076988L, 262422L, 3058143L, 5833713L, + 4759093L, 5207351L, 6259387L, 5578587L, 3092849L, 4943197L, 6888744L, 7493642L, 1584506L, 1159711L, + 6930148L, 7150136L, 3866436L, 1792844L, 1078664L, 1115559L, 346472L, 3677795L, 4467805L, 4903847L, + 6909213L, 1152061L, 7065193L, 8157558L, 6261408L, 223883L, 8110360L, 7348615L, 7806494L, 5770186L, + 2841067L, 4455596L, 5392221L, 2582457L, 6782802L, 5453405L, 657841L, 848945L, 3265673L, 1911413L, + 4165388L, 7150417L, 1185344L, 4460109L, 7703632L, 2222680L, 54112L, 7730387L, 1429877L, 2383057L, + 5451052L, 5221221L, 5711540L, 7004830L, 831972L, 5264758L, 4959427L, 3792809L, 2803632L, 5278649L, + 887121L, 7968863L, 1784156L, 7359915L, 3269848L, 4376110L, 1197445L, 5662369L, 466895L, 281077L, + 2222549L, 1568482L, 5733011L, 4588538L, 2950592L, 544033L, 291121L, 7793890L, 5729486L, 5283313L, + 1318603L, 7008248L, 7635640L, 4993790L, 4859858L, 4554338L, 8026322L, 5438493L, 1907548L, 5579037L, + 6404387L, 7978997L, 8267033L, 2223539L, 2793851L, 2230985L, 7246120L, 3679532L, 2206473L, 4343621L, + 343396L, 5292971L, 4377195L, 2758182L, 1212897L, 2935907L, 1521944L, 7898444L, 5873591L, 4352856L, + 5680557L, 6626111L, 7510293L, 8291053L, 2437840L, 4015675L, 1035325L, 5246539L, 2517630L, 995246L, + 3015401L, 4990321L, 4462976L, 2937726L, 1374309L, 4483066L, 3562695L, 1783036L, 52226L, 6547004L, + 7019695L, 7992275L, 4696062L, 3638489L, 5273252L, 6676914L, 4423040L, 587641L, 8012318L, 7109942L, + 5678748L, 7338913L, 1321685L, 425691L, 6844665L, 5490060L, 6125001L, 6482128L, 3984920L, 576647L, + 5698970L, 5462000L, 20931L, 3813597L, 151029L, 3646961L, 7328508L, 945738L, 95752L, 4885981L, + 8122087L, 4430886L, 8172909L, 879128L, 6599437L, 2277400L, 5250516L, 7626206L, 932381L, 1182555L, + 4848970L, 3362590L, 8067538L, 2374095L, 215962L, 1714938L, 7898677L, 1760475L, 1506410L, 5403645L, + 4977952L, 4243532L, 2033310L, 2969326L, 7535721L, 2751109L, 610705L, 1388285L, 3069530L, 2431246L, + 8460L, 771653L, 708572L, 4927493L, 5624726L, 3237862L, 5316467L, 5947902L, 6576754L, 7956567L, + 6594106L, 8143907L, 39551L, 6976119L, 832850L, 7306499L, 8353037L, 8321472L, 2139383L, 4989250L, + 5963820L, 7305083L, 3523539L, 1634471L, 6208107L, 3923174L, 428645L, 6435859L, 2722055L, 1990192L, + 2619369L, 5915911L, 536140L, 3442471L, 154725L, 6176543L, 2607033L, 4745220L, 8004198L, 7580070L, + 1789312L, 5760088L, 7726704L, 3835706L, 1458379L, 1031370L, 5493171L, 1985186L, 2244309L, 428834L, + 765175L, 8159497L, 3122952L, 4404358L, 1324623L, 2596503L, 7325116L, 5092931L, 2070747L, 5775367L, + 4871713L, 3408460L, 894135L, 2478100L, 3221586L, 4560987L, 7411224L, 1561172L, 2244186L, 7789525L, + 5019246L, 2380481L, 6668687L, 793255L, 3449142L, 3630468L, 4422221L, 4951651L, 83044L, 1249450L, + 8057638L, 3436702L, 7380793L, 7273893L, 8282818L, 3552086L, 4989517L, 1371404L, 2674479L, 1521747L, + 5049374L, 4778237L, 979863L, 3556396L, 2034310L, 5616078L, 849485L, 7150238L, 582061L, 3644621L, + 5177333L, 2904923L, 228897L, 5585999L, 7173343L, 4847491L, 7673032L, 2979552L, 6718550L, 4240384L, + 7634651L, 5390741L, 6114576L, 5344968L, 455358L, 1863691L, 6902075L, 7127802L, 6654940L, 656109L, + 4684263L, 1151617L, 3152844L, 1473897L, 7723701L, 5713714L, 5834218L, 5060281L, 3187365L, 5702149L, + 2452371L, 4257977L, 2040750L, 7227829L, 3718870L, 5383474L, 1461044L, 7910818L, 6889084L, 2899584L, + 1939881L, 7668557L, 8372206L, 5814672L, 3490262L, 2732358L, 379945L, 113333L, 3188380L, 3097128L, + 1423358L, 3870387L, 4962673L, 6479974L, 4236379L, 8265104L, 7331128L, 6879096L, 667169L, 8258939L, + 2949220L, 217102L, 5081089L, 630556L, 6634527L, 8250767L, 3930847L, 1183170L, 6161162L, 1257990L, + 2936621L, 4266914L, 7055014L, 7588633L, 1896989L, 4873588L, 1365446L, 1206918L, 5166166L, 4437221L, + 6871427L, 8329856L, 7275764L, 4044449L, 3041659L, 5215888L, 5580364L, 6087714L, 2305615L, 5781754L, + 2001571L, 5386137L, 1700986L, 6782460L, 2885909L, 4822650L, 7038954L, 7442846L, 1846073L, 4057442L, + 145825L, 4196781L, 2660453L, 3338126L, 4622595L, 1429834L, 358083L, 6516723L, 3987796L, 3372746L, + 4301443L, 2155193L, 6290005L, 3211955L, 7398386L, 1284576L, 3099665L, 8301445L, 4633446L, 6110888L, + 284828L, 2359757L, 5327725L, 1524726L, 1188923L, 7704929L, 3279837L, 6026743L, 4767936L, 6069366L, + 2025289L, 2718525L, 3831044L, 5034537L, 4020079L, 8365195L, 637948L, 6206995L, 4534743L, 6576046L, + 5869348L, 3545067L, 992832L, 8350731L, 6809494L, 2794569L, 7154802L, 2266144L, 2378102L, 5631679L, + 2616238L, 8190621L, 8130297L, 5540409L, 5436654L, 6385849L, 939882L, 5877416L, 4941970L, 5142867L, + 7792923L, 192993L, 1389167L, 4595071L, 4832544L, 2973065L, 2697314L, 2481193L, 6076622L, 4166036L, + 8079076L, 5866665L, 1146965L, 4314604L, 2896214L, 7533494L, 2328089L, 3342388L, 205277L, 7295221L, + 3726265L, 2004763L, 6527313L, 6489055L, 431687L, 3754699L, 8085101L, 3738710L, 2305301L, 2171240L, + 4174016L, 8116145L, 3282690L, 4165320L, 6502524L, 632470L, 4325337L, 5085556L, 4025557L, 1275213L, + 2212574L, 7028037L, 5545632L, 7039502L, 2352263L, 5600863L, 6803788L, 1638541L, 2072411L, 2489915L, + 3971702L, 4589812L, 1909432L, 52494L, 3949700L, 1564062L, 4801520L, 8165778L, 2520221L, 5808008L, + 2897108L, 3271828L, 6137045L, 2858474L, 5127885L, 2516988L, 1789767L, 5097053L, 7935502L, 3483977L, + 5206292L, 8117221L, 676132L, 3474027L, 2537118L, 462224L, 3927886L, 5106848L, 6784522L, 7656858L, + 7211366L, 5315931L, 4860989L, 6399205L, 6404840L, 1111316L, 2880720L, 3893694L, 6052289L, 347276L, + 3600770L, 1745805L, 6969009L, 773501L, 6015829L, 7131125L, 4934800L, 1000665L, 3926842L, 6783833L, + 3917778L, 3648643L, 1686347L, 7933462L, 3305039L, 7954054L, 5935734L, 1535888L, 4913329L, 3401126L, + 3285934L, 7153999L, 6576575L, 8374030L, 609794L, 1155361L, 7399194L, 7229927L, 3389361L, 5459657L, + 5070171L, 6202611L, 5543915L, 7964287L, 6724636L, 1923088L, 858852L, 2449801L, 3719233L, 4934816L, + 1253574L, 3428563L, 5671759L, 1355917L, 3102043L, 4278520L, 6013533L, 1069320L, 6080003L, 5232350L, + 6114943L, 3586158L, 5513684L, 1372686L, 1023644L, 5195031L, 2821343L, 3024192L, 7486079L, 7514322L, + 2521731L, 2790601L, 4933550L, 5187795L, 6009508L, 7160270L, 6041834L, 1705544L, 7190589L, 7514230L, + 6734497L, 528653L, 1854065L, 4851947L, 3950126L, 5687586L, 4363014L, 946481L, 3477716L, 7380721L, + 694288L, 5220699L, 6339541L, 2815024L, 4350418L, 2806906L, 7260846L, 338568L, 4021557L, 5795618L, + 6596497L, 5871788L, 6392335L, 2818419L, 6614575L, 1090353L, 7688853L, 1758684L, 5019684L, 1438900L, + 1260907L, 3416550L, 4696916L, 3884131L, 5762963L, 3236226L, 6216769L, 4550777L, 7341854L, 806138L, + 5393158L, 5232208L, 8347360L, 5944177L, 1568341L, 1010103L, 4310704L, 5453100L, 2075842L, 5141775L, + 4736611L, 4332534L, 6686232L, 939796L, 4418259L, 931426L, 44716L, 7196105L, 6520587L, 2473918L, + 6164047L, 4824359L, 5825575L, 3078494L, 5587003L, 7221632L, 954174L, 7767789L, 6809689L, 1324331L, + 3492511L, 987767L, 7732931L, 3378275L, 4487449L, 4656456L, 6186607L, 8334814L, 6575081L, 5281116L, + 7173276L, 7136151L, 544670L, 3430624L, 2511686L, 6981507L, 1644650L, 893601L, 826556L, 3310022L, + 7822470L, 518845L, 1276L, 7274372L, 5657142L, 3236111L, 312606L, 7880458L, 7837662L, 8261311L, + 8271849L, 580616L, 7771682L, 438491L, 3262242L, 7617396L, 5504437L, 3928466L, 4839359L, 8229844L, + 641028L, 2882124L, 4780148L, 4234187L, 7631818L, 4131193L, 3217894L, 4854713L, 1984893L, 3555041L, + 2326402L, 4904834L, 5000356L, 3009283L, 3985305L, 4947162L, 4042263L, 7631756L, 72601L, 5535505L, + 2123412L, 8268132L, 2184374L, 1954504L, 1229066L, 4835521L, 3802287L, 3435019L, 4228142L, 129532L, + 2740255L, 2901330L, 4446903L, 5081142L, 910300L, 1892346L, 2647375L, 3377754L, 3628683L, 5363714L, + 1211498L, 3487819L, 4898966L, 5724268L, 3689160L, 3368258L, 5638193L, 3578426L, 2046196L, 7564993L, + 3956404L, 1141576L, 6278720L, 1614364L, 1870542L, 5132152L, 6493239L, 631355L, 4616641L, 4425720L, + 2050775L, 6407566L, 991620L, 787573L, 3070444L, 4379491L, 4849710L, 6261629L, 2290948L, 2658202L, + 6436157L, 8162595L, 773737L, 6131363L, 795062L, 6950124L, 4509913L, 8323107L, 5876443L, 4539076L, + 2930303L, 399116L, 2145106L, 4493505L, 4471465L, 8291640L, 5433155L, 1925612L, 8300532L, 2674841L, + 1781130L, 1678635L, 7966457L, 666438L, 361723L, 6422316L, 3070130L, 924044L, 5467277L, 8092680L, + 7210766L, 4792831L, 4063828L, 8035510L, 504384L, 2882269L, 3448051L, 6249305L, 7618710L, 2310029L, + 760753L, 7855304L, 6082423L, 3448342L, 586298L, 695569L, 1755920L, 2443744L, 6742328L, 5546808L, + 7682843L, 5416430L, 5267932L, 7284528L, 2065098L, 8031012L, 6780701L, 2332061L, 2492264L, 5605384L, + 779037L, 5313548L, 5114809L, 2368478L, 4849372L, 1113600L, 3570347L, 2867263L, 312466L, 2824853L, + 2458102L, 7515103L, 4094615L, 4917119L, 7888961L, 283346L, 6167564L, 3608257L, 1393534L, 3466813L, + 840171L, 7768673L, 3111205L, 1514392L, 3759055L, 1221179L, 5757875L, 5053711L, 2317492L, 5553855L, + 2206157L, 7892363L, 1972683L, 1814753L, 576813L, 4299559L, 7676140L, 6118821L, 7584448L, 2424969L, + 2423208L, 7279622L, 2372089L, 7429455L, 3462883L, 8138652L, 5591683L, 7590381L, 901446L, 8141488L, + 3821093L, 123747L, 2670795L, 4826252L, 465155L, 2728039L, 2058320L, 614645L, 503305L, 7482182L, + 7698963L, 7840860L, 4614376L, 6698390L, 496561L, 5383006L, 6243566L, 2650191L, 1500174L, 1930481L, + 3920743L, 7090748L, 2656207L, 6727744L, 8314583L, 4689378L, 2687010L, 4423198L, 3753154L, 3451553L, + 178727L, 2006364L, 2095633L, 5387484L, 792412L, 5158954L, 7471321L, 5852731L, 5351931L, 4122445L, + 8133597L, 7099399L, 2415382L, 5550500L, 4786266L, 1091948L, 486698L, 218843L, 401040L, 8273866L, + 3918107L, 980029L, 4061996L, 1346553L, 1594128L, 4640750L, 3446973L, 7298255L, 3545448L, 4250188L, + 6682502L, 1384823L, 7412808L, 1740483L, 4314389L, 1211091L, 5177760L, 7786044L, 5183899L, 1214301L, + 8014482L, 8105640L, 7889290L, 3337087L, 4023934L, 1665837L, 800771L, 6622463L, 4624153L, 2364616L, + 54029L, 5970506L, 5723272L, 1476920L, 2430756L, 5851128L, 3252147L, 1001698L, 113936L, 3996726L, + 2561157L, 2957393L, 4155510L, 3231317L, 6838781L, 874052L, 7664763L, 7193997L, 5981440L, 5779188L, + 7856006L, 4517299L, 501812L, 5019248L, 8074060L, 58775L, 7088703L, 1292486L, 6428854L, 3912212L, + 2003497L, 7119376L, 58977L, 3378181L, 6635293L, 7448075L, 5418525L, 650132L, 1083040L, 8337745L, + 2821758L, 3393746L, 7357548L, 3927086L, 2554674L, 3008870L, 806679L, 6025135L, 4065298L, 4914406L, + 8260246L, 581000L, 3864698L, 3167649L, 1080373L, 260268L, 6030556L, 4854297L, 7320151L, 3385982L, + 6445522L, 7528479L, 1271293L, 3312151L, 258119L, 805664L, 3243120L, 842791L, 938615L, 1251550L, + 1199080L, 5239900L, 2653472L, 2025795L, 6135601L, 8032243L, 1699777L, 5411738L, 1447559L, 2813284L, + 7610690L, 889399L, 6794638L, 7702239L, 3820503L, 2617877L, 7276915L, 5509260L, 5586419L, 3041791L, + 3411806L, 1948351L, 2928287L, 5949697L, 7246451L, 857917L, 1655049L, 879147L, 875572L, 5964620L, + 6106839L, 7039181L, 120713L, 6894014L, 1988564L, 682982L, 3901741L, 954939L, 2359400L, 4223076L, + 7675175L, 7842463L, 3029806L, 4396190L, 8278059L, 5373035L, 3726474L, 5729807L, 7008660L, 5923227L, + 1146075L, 8172854L, 7672492L, 3517114L, 375096L, 6510531L, 7757764L, 3058665L, 3068464L, 7315266L, + 3943593L, 4774357L, 3966038L, 3625354L, 2718457L, 4357419L, 5611624L, 7921929L, 5992997L, 3025112L, + 4701124L, 3318807L, 222650L, 1655293L, 1053068L, 3674869L, 4250561L, 8303485L, 5364681L, 7184456L, + 727479L, 7092045L, 3675719L, 4166603L, 1787809L, 2823289L, 812633L, 623780L, 2922973L, 854418L, + 3081662L, 6157994L, 7032724L, 6954429L, 749211L, 437521L, 6848079L, 4412572L, 7578304L, 1544771L, + 1306666L, 1501647L, 5135469L, 894432L, 4967327L, 7731551L, 3526619L, 5029553L, 2809315L, 3252835L, + 8248543L, 1396656L, 684238L, 637465L, 6189157L, 3764294L, 6961171L, 2321107L, 306050L, 1954548L, + 276506L, 5688655L, 4638387L, 592014L, 8212704L, 6642473L, 3211461L, 7267257L, 1456955L, 8201499L, + 2468450L, 2533472L, 6824490L, 3146975L, 5154641L, 1907076L, 6397123L, 3384166L, 339096L, 6086220L, + 2987585L, 4607012L, 2899167L, 2868354L, 2311138L, 7124550L, 3311641L, 5170671L, 8111727L, 5030022L, + 5924815L, 3917349L, 5983266L, 6826997L, 3390608L, 1115071L, 6719988L, 1827328L, 1458014L, 2728361L, + 5105758L, 5959419L, 5150527L, 7992540L, 4996358L, 518276L, 2362120L, 4940289L, 3378865L, 5989584L, + 1549773L, 36254L, 3948418L, 4617632L, 5535484L, 2559479L, 5668943L, 4250277L, 8254147L, 8141319L, + 3315236L, 1151274L, 5354698L, 4693054L, 6925077L, 1554593L, 1205461L, 7343057L, 864582L, 5884330L, + 7279047L, 5416782L, 4891265L, 2634032L, 531373L, 4607582L, 2780642L, 5393924L, 6410675L, 3339164L, + 2676677L, 1770285L, 6735544L, 6021519L, 1609601L, 7177475L, 4111826L, 7586128L, 2369061L, 3594205L, + 8282247L, 7547556L, 3522552L, 4319749L, 1565736L, 5558077L, 6442696L, 3822222L, 223887L, 1517042L, + 2774435L, 8043288L, 1639604L, 576686L, 1940207L, 8319096L, 8058738L, 5623060L, 3301672L, 2884180L, + 4447012L, 6271395L, 2130397L, 782557L, 3310825L, 3614458L, 1894369L, 3212988L, 2848277L, 5895068L, + 4738080L, 1863598L, 5465731L, 3748871L, 8177683L, 8343836L, 1039238L, 4250243L, 7210286L, 1580160L, + 7230316L, 7211267L, 4186984L, 2853915L, 5898078L, 1947732L, 6371916L, 8010378L, 1787418L, 7634588L, + 7745970L, 4559615L, 550208L, 831078L, 1403630L, 4579341L, 6683978L, 8151812L, 4740226L, 5272197L, + 8054953L, 6937223L, 6958617L, 2261125L, 7986409L, 1700821L, 6958857L, 1063556L, 2663855L, 273152L, + 4935523L, 1077133L, 8059523L, 7696289L, 4544042L, 8343554L, 5613980L, 3503036L, 344602L, 3258257L, + 6271643L, 1020237L, 1471953L, 8048002L, 5034307L, 1272447L, 4923010L, 2384415L, 2857212L, 5073242L, + 3851137L, 8230071L, 2766536L, 6085072L, 1926038L, 6467108L, 2019416L, 154593L, 2520601L, 2460243L, + 222420L, 341757L, 6535998L, 2347630L, 5663711L, 5736288L, 2307142L, 4766694L, 7412154L, 1897053L, + 1755330L, 5299747L, 4905241L, 1304673L, 4806820L, 4176294L, 5514793L, 6566764L, 4717820L, 4702765L, + 3935687L, 2892185L, 8151464L, 4314157L, 219224L, 6198195L, 785500L, 7856513L, 3640146L, 2401030L, + 8068551L, 6623665L, 8361740L, 414625L, 1556287L, 1366797L, 1218968L, 116305L, 2901849L, 1724475L, + 1967367L, 1169967L, 256493L, 7970958L, 850751L, 7500820L, 4018658L, 1835912L, 6155538L, 6178236L, + 7637077L, 6881477L, 7113809L, 7711449L, 4588172L, 6205807L, 147731L, 7177767L, 3848720L, 7015454L, + 6152303L, 3064413L, 8225585L, 7828028L, 1005461L, 5153652L, 7619107L, 1931811L, 8006564L, 2332334L, + 7040015L, 3579830L, 8081297L, 1394413L, 826235L, 461434L, 4880698L, 2691912L, 7357129L, 4144182L, + 4941486L, 7958598L, 403442L, 3408587L, 150378L, 5710522L, 4770696L, 3869273L, 6082069L, 5201745L, + 7487049L, 2060886L, 2188757L, 7126189L, 7306326L, 6517990L, 3240679L, 5192135L, 4151163L, 4291863L, + 5985679L, 4553436L, 6594754L, 2400327L, 516821L, 1793838L, 1665697L, 2271761L, 7411640L, 5059888L, + 1967432L, 1917472L, 8056009L, 7027936L, 5581250L, 6684559L, 7877182L, 7617246L, 1115643L, 4314889L, + 6181851L, 624994L, 3745952L, 7992685L, 5408501L, 278953L, 2328064L, 6704118L, 2498320L, 6652057L, + 5844426L, 632347L, 3840668L, 138028L, 4353330L, 208554L, 1553084L, 5381114L, 8101801L, 5980431L, + 2873058L, 5306140L, 6782514L, 2893951L, 74945L, 7658571L, 2525539L, 3398029L, 8180298L, 996221L, + 6672116L, 2258290L, 4444210L, 6337747L, 3725771L, 1586340L, 5222786L, 3717233L, 340210L, 3257204L, + 7114299L, 1211402L, 4639388L, 8297684L, 45054L, 3212608L, 3556150L, 5910521L, 4003648L, 6450810L, + 6218144L, 3831086L, 4846217L, 6410113L, 2681926L, 8233628L, 3113956L, 8161548L, 6419941L, 3879056L, + 6855998L, 3556310L, 7978692L, 162662L, 174125L, 1323016L, 7633508L, 2152722L, 1218481L, 2728608L, + 2884014L, 7666674L, 3728976L, 8262708L, 930711L, 4087886L, 7339679L, 8304393L, 6418126L, 2955299L, + 3079320L, 5355029L, 4015965L, 7272443L, 2722442L, 2557403L, 4530424L, 985643L, 4771590L, 8197271L, + 1052890L, 4502746L, 2098610L, 2977516L, 8148330L, 8266959L, 4846487L, 4882782L, 4353374L, 4170695L, + 7689864L, 963623L, 5850216L, 6667897L, 5730118L, 6441848L, 7699419L, 7439091L, 8052575L, 7355066L, + 2147067L, 5199801L, 6028201L, 213436L, 7636300L, 4243745L, 3488127L, 2358757L, 2308319L, 2030188L, + 7962479L, 3245269L, 6737418L, 2495771L, 5140864L, 1966769L, 4807175L, 7660103L, 1376322L, 4818894L, + 48497L, 4123650L, 2394311L, 660645L, 3958354L, 673553L, 7092116L, 64990L, 2925978L, 714403L, + 1076568L, 5961508L, 409175L, 4574764L, 2755905L, 2179568L, 7264904L, 3582696L, 1602820L, 4355602L, + 4373459L, 6247394L, 1596119L, 860122L, 1989606L, 1232026L, 1455935L, 3340382L, 1212096L, 2103158L, + 730713L, 3934021L, 3662283L, 4779189L, 6795585L, 3983692L, 7813829L, 2042839L, 609488L, 168346L, + 7620570L, 4779908L, 1972292L, 1376512L, 48176L, 3733181L, 443004L, 6302285L, 5079644L, 4889192L, + 6992606L, 203403L, 3553579L, 3180623L, 803801L, 6910984L, 6097365L, 6066795L, 1688774L, 1877155L, + 7208542L, 1257029L, 5650159L, 251319L, 794533L, 4062689L, 3932562L, 5721514L, 7614308L, 7217755L, + 7076792L, 3567942L, 965118L, 1800195L, 4377498L, 4971096L, 4298068L, 6175860L, 6141611L, 4652877L, + 2046806L, 4449087L, 1648265L, 72935L, 5727198L, 6194518L, 7147138L, 5519671L, 1550443L, 3124391L, + 2704352L, 6804203L, 5008051L, 6723589L, 8267418L, 1185111L, 3463616L, 7200005L, 3234151L, 3775613L, + 3803506L, 5143401L, 99992L, 3658451L, 7627148L, 2458070L, 7455856L, 3840236L, 7991321L, 6711622L, + 1863193L, 5433912L, 7858689L, 186738L, 8322908L, 1427100L, 1677025L, 7890203L, 7380636L, 7779904L, + 5508563L, 6529830L, 7766189L, 6144806L, 8359105L, 6865275L, 8182188L, 3400534L, 8074803L, 4254745L, + 163190L, 920176L, 5597675L, 7647181L, 7773381L, 4181424L, 6506736L, 5438714L, 7098160L, 5378619L, + 5208492L, 3338923L, 6014905L, 7383761L, 1569507L, 799331L, 8054288L, 5669475L, 1599502L, 6954065L, + 189824L, 3173895L, 8090865L, 8075380L, 893183L, 2494451L, 7154698L, 8166316L, 6842818L, 3438851L, + 2213046L, 7748487L, 4883822L, 7372723L, 3044945L, 2697058L, 5541666L, 1417455L, 7704420L, 7459274L, + 194914L, 5897597L, 1274796L, 7832620L, 687702L, 2753467L, 554751L, 4674435L, 1270838L, 5912205L, + 5480279L, 8317981L, 8348103L, 5501470L, 1331737L, 1975970L, 4961420L, 5122194L, 5549575L, 5790547L, + 8015593L, 8256181L, 3368333L, 7901064L, 5565693L, 5898883L, 4166345L, 3463062L, 6175904L, 4042280L, + 3939932L, 1091023L, 2526393L, 5977787L, 2050897L, 7691469L, 6867440L, 6996575L, 2035143L, 2929404L, + 3111837L, 6471915L, 6109134L, 8327957L, 3315969L, 6479825L, 1107018L, 6266773L, 6360181L, 7298321L, + 4313989L, 6277002L, 1101741L, 7903561L, 4262991L, 7649173L, 1813236L, 8119697L, 6002477L, 2155347L, + 1144701L, 890279L, 4584603L, 1391226L, 1462612L, 3936276L, 1469870L, 2175226L, 37081L, 5759067L, + 8316402L, 3395836L, 2304090L, 6513589L, 602807L, 2442220L, 7546381L, 7316458L, 7870048L, 2017717L, + 3655858L, 8115909L, 5749137L, 170131L, 6461512L, 2216346L, 246710L, 6553096L, 207262L, 3354739L, + 1344326L, 4366540L, 3103114L, 1791338L, 127201L, 8278696L, 6114141L, 3439008L, 4776007L, 8082545L, + 3712892L, 3830762L, 4397809L, 6792450L, 8259747L, 564257L, 6715518L, 1950043L, 1582877L, 1866792L, + 6327452L, 2241172L, 7389633L, 6943975L, 6899775L, 5210243L, 1215869L, 2356129L, 476058L, 5542602L, + 3091049L, 5432314L, 7173419L, 2976444L, 2817481L, 3924544L, 631739L, 2078158L, 6282902L, 3192815L, + 2982543L, 4956250L, 4253978L, 4146930L, 4438925L, 5387606L, 313806L, 5169330L, 7206448L, 7130014L, + 2561420L, 6279118L, 339476L, 8188391L, 7529313L, 1705009L, 6774307L, 2183982L, 6449611L, 2872102L, + 5888026L, 3084577L, 5285806L, 1738523L, 6282595L, 7763395L, 2863379L, 4120737L, 5086402L, 7477195L, + 8342808L, 7549497L, 5663320L, 4208552L, 3594240L, 2450379L, 3096895L, 2840561L, 181527L, 5280518L, + 7593940L, 1916521L, 6713941L, 2445157L, 6680263L, 8367935L, 2230488L, 4752988L, 2101005L, 7520016L, + 7922169L, 1646633L, 183215L, 8041058L, 1656358L, 2732430L, 2198907L, 6870986L, 6992852L, 624978L, + 3539963L, 2439119L, 8139540L, 7223103L, 3894448L, 7167564L, 6622931L, 7337696L, 7388290L, 5113463L, + 978485L, 6559497L, 7655491L, 4404065L, 662691L, 7251945L, 4625434L, 2436241L, 774241L, 5629046L, + 1288719L, 116881L, 3191987L, 836623L, 4963641L, 3528739L, 6026619L, 2797449L, 4664942L, 1655361L, + 5581568L, 5666493L, 6993957L, 3956611L, 5107433L, 4179340L, 166194L, 7106378L, 1765714L, 297328L, + 3890374L, 1452098L, 2589823L, 7596866L, 2974900L, 6399712L, 8091146L, 4297548L, 8177889L, 7443721L, + 5294838L, 839943L, 3049098L, 1229482L, 6955409L, 5356378L, 3809164L, 4048404L, 3518907L, 865378L, + 5938535L, 4677410L, 4239932L, 145507L, 3478044L, 2216900L, 7394778L, 6591854L, 8282709L, 4422823L, + 4412087L, 2988695L, 6608317L, 13174L, 4163438L, 1024283L, 1219193L, 5605294L, 5757903L, 1132888L, + 6143622L, 6366526L, 7847629L, 1581628L, 4849977L, 1895430L, 8129961L, 4417187L, 3731928L, 7458830L, + 5810769L, 6502642L, 3505959L, 4576799L, 8361252L, 606143L, 1968997L, 8337336L, 1750497L, 5954784L, + 8036601L, 295229L, 5455174L, 2976592L, 388276L, 4001441L, 4997790L, 3064163L, 4443750L, 5400727L, + 1766389L, 2446019L, 3595243L, 1330806L, 4045889L, 7268473L, 438397L, 2281001L, 5376319L, 4850069L, + 4408183L, 1345206L, 600711L, 2136742L, 1610333L, 5084458L, 2070517L, 5165906L, 5100152L, 4959151L, + 7609316L, 3970385L, 2947752L, 1842771L, 4615629L, 910426L, 2569030L, 7151596L, 5939953L, 7793489L, + 4075212L, 5428324L, 8176624L, 1943253L, 6404144L, 6774104L, 3020841L, 3876652L, 6055174L, 2944395L, + 1151944L, 4391392L, 77277L, 1992461L, 3800589L, 3812316L, 830417L, 7317578L, 6614343L, 4019457L, + 1621394L, 6168472L, 7035976L, 2076234L, 7004031L, 8187966L, 7684521L, 6698684L, 6477827L, 6863080L, + 5396829L, 7444200L, 7640717L, 6823347L, 190535L, 7801195L, 3874250L, 2002582L, 1899168L, 3963751L, + 1513441L, 6051298L, 2590475L, 6277789L, 746994L, 7870058L, 2769964L, 8335805L, 4439999L, 869277L, + 7376269L, 923556L, 3556915L, 878429L, 66871L, 4394735L, 7984577L, 14549L, 2927675L, 2033328L, + 3835498L, 2264859L, 7601997L, 1836102L, 1361623L, 2635382L, 1252226L, 4722874L, 2302829L, 655803L, + 2603387L, 6150649L, 5800560L, 8067013L, 3766026L, 3693011L, 2586387L, 4691018L, 7078128L, 1655697L, + 5124440L, 2845602L, 3471734L, 3803533L, 5312615L, 6947201L, 2248521L, 2962153L, 3024133L, 6348186L, + 2415969L, 5577405L, 6637341L, 7318530L, 712051L, 6931201L, 5325704L, 3403974L, 8152876L, 2224022L, + 5389297L, 2634574L, 2461152L, 4006633L, 5926316L, 704234L, 5293963L, 8238331L, 7848225L, 2177654L, + 6259299L, 5213017L, 3168570L, 5306204L, 3415089L, 4778302L, 1134494L, 7006053L, 6514340L, 4907438L, + 1468871L, 746808L, 3594986L, 20236L, 8169887L, 6375004L, 1542130L, 145730L, 4795421L, 1145124L, + 1756962L, 3183997L, 3753411L, 7343848L, 8211649L, 2157562L, 2334092L, 4768167L, 7843718L, 2222313L, + 974034L, 5274846L, 2949961L, 2378095L, 5612266L, 7308623L, 4232937L, 280953L, 592878L, 62033L, + 3544838L, 5007780L, 3418484L, 7085938L, 3577640L, 4570652L, 820752L, 1493360L, 1872631L, 1271198L, + 5288559L, 3262446L, 1044223L, 8055863L, 348837L, 8133192L, 8262759L, 2846392L, 7874592L, 574914L, + 2928991L, 7902683L, 7291518L, 5574162L, 7041876L, 3064284L, 6460305L, 6912586L, 7625041L, 3982414L, + 5216786L, 2513409L, 1600032L, 2727189L, 4280498L, 7208700L, 6802159L, 5443012L, 1200449L, 3116616L, + 2048453L, 7557002L, 2396717L, 6395933L, 3560935L, 297482L, 4297306L, 8310832L, 1881337L, 8143601L, + 3271896L, 570440L, 5014824L, 2808523L, 3518135L, 1566483L, 6973229L, 7674787L, 4369094L, 3696700L, + 6733806L, 7622078L, 2839778L, 3208347L, 5453414L, 3320712L, 7720183L, 2608337L, 6929176L, 7878705L, + 7263092L, 1747641L, 6715808L, 995713L, 4100002L, 1857736L, 6529834L, 3578397L, 4811337L, 868496L, + 6763939L, 7395148L, 6706942L, 8262706L, 6599422L, 7635077L, 8220155L, 5731164L, 1536736L, 7312774L, + 7366679L, 47178L, 3206035L, 2210040L, 5413355L, 2154217L, 4637855L, 4191914L, 4418107L, 4282702L, + 5513753L, 3158410L, 7117609L, 7973630L, 3863246L, 5789012L, 7893535L, 1302557L, 6409976L, 5155698L, + 50977L, 4190613L, 6181543L, 6268887L, 2635143L, 1909166L, 3679280L, 5899805L, 872036L, 2781855L, + 5214073L, 6833052L, 977580L, 5020759L, 778832L, 6884166L, 3383242L, 4992261L, 6518836L, 2283128L, + 3470427L, 509137L, 1303442L, 3467818L, 7233958L, 5810122L, 5745538L, 3236671L, 7839854L, 3143361L, + 3152473L, 7150253L, 6965570L, 6897512L, 5092597L, 3115530L, 4524671L, 4550054L, 2495269L, 1305383L, + 2436053L, 6374786L, 7171274L, 444699L, 6413799L, 2348204L, 322206L, 2429404L, 8345889L, 4912736L, + 4893455L, 5145227L, 930527L, 2724202L, 3979080L, 7857232L, 2807519L, 1904811L, 580808L, 5388805L, + 7835497L, 7614660L, 1719886L, 7802473L, 1170937L, 653447L, 2545125L, 5196982L, 5497672L, 1569111L, + 6337845L, 6033586L, 3388356L, 110730L, 4119888L, 4034253L, 7692539L, 2756055L, 4851183L, 7072961L, + 1833679L, 7154018L, 74200L, 3714174L, 8183812L, 7336782L, 259980L, 7965452L, 2354880L, 649862L, + 2253250L, 6111757L, 107455L, 3749651L, 1750257L, 1516943L, 4874229L, 3913175L, 7544922L, 6745584L, + 346385L, 3799670L, 3124314L, 1600490L, 624447L, 5599235L, 5829841L, 2161344L, 1821141L, 4389422L, + 1394860L, 1095030L, 3237905L, 3834713L, 2438009L, 84882L, 3814123L, 5929747L, 6860713L, 5127656L, + 6868036L, 6954731L, 1942369L, 6729836L, 1496705L, 4955685L, 975576L, 801649L, 3397994L, 4034870L, + 764242L, 7667383L, 3882105L, 870969L, 7493216L, 7973994L, 3031494L, 6811716L, 6470207L, 2130669L, + 2828636L, 6753058L, 2176083L, 1341322L, 1419042L, 1160923L, 1242598L, 1227223L, 6145278L, 3837060L, + 1637265L, 2067742L, 884776L, 304413L, 5447691L, 6912352L, 4400493L, 6454843L, 8297798L, 3302437L, + 1600441L, 4140040L, 8131124L, 6456979L, 3066555L, 2110523L, 2712129L, 8070940L, 7248080L, 4596793L, + 164587L, 3225784L, 1832163L, 3451321L, 4934790L, 1954753L, 3963168L, 6861665L, 2391556L, 7815076L, + 2242530L, 1927632L, 6520616L, 2862197L, 2769304L, 2349074L, 6956820L, 4277592L, 7992809L, 8117673L, + 4887228L, 7471334L, 1862809L, 3162399L, 1825846L, 7489573L, 1526370L, 8156042L, 7896973L, 5015638L, + 2175743L, 6392725L, 8132923L, 766404L, 5541334L, 981757L, 6954415L, 3430384L, 7477094L, 6156365L, + 2894913L, 2631288L, 2949128L, 98388L, 3074393L, 6427107L, 2723827L, 3728839L, 410088L, 2837104L, + 2629699L, 6180342L, 2714951L, 4431679L, 6543L, 1674680L, 3964491L, 6518625L, 7763466L, 3672748L, + 4579345L, 8089502L, 3604302L, 6694853L, 2431171L, 4273444L, 5633574L, 2317243L, 7795339L, 6782370L, + 6683711L, 7251344L, 2747913L, 5705998L, 5115423L, 4452955L, 7355916L, 7117890L, 2228080L, 6618565L, + 3100531L, 3956718L, 4649890L, 3770803L, 3174524L, 4076175L, 7606528L, 8171062L, 752094L, 4114596L, + 5026080L, 301850L, 6320892L, 189004L, 7995898L, 3482628L, 2619397L, 3648500L, 4478511L, 7636848L, + 6676050L, 2213093L, 153589L, 5088702L, 3282511L, 7733619L, 260149L, 4638079L, 2251323L, 7410782L, + 7339415L, 5514830L, 1462800L, 7444898L, 7052533L, 7261523L, 984444L, 886340L, 3176768L, 5467132L, + 2866619L, 5216093L, 3340172L, 2961320L, 3739821L, 1268269L, 6248318L, 2968611L, 208913L, 6742609L, + 7180710L, 39943L, 3836562L, 7280300L, 3033903L, 2772331L, 2063634L, 586935L, 1611540L, 159304L, + 1279133L, 899093L, 2314433L, 4641944L, 2296029L, 1940496L, 7973782L, 1472454L, 3481995L, 3754788L, + 4702292L, 4808128L, 7163572L, 602385L, 5491999L, 7941250L, 5207049L, 4562953L, 6113756L, 5700576L, + 6487889L, 3562394L, 7729430L, 3410633L, 3748715L, 4648726L, 8273217L, 1185954L, 1628060L, 6000895L, + 6101896L, 4355007L, 1029518L, 3592884L, 4894530L, 7528531L, 6012158L, 6444709L, 2276967L, 5894592L, + 1192245L, 7021466L, 6362586L, 4596129L, 56628L, 2536882L, 7554032L, 6983073L, 3616620L, 1706964L, + 3041245L, 6961773L, 8193762L, 7506691L, 1667049L, 2244683L, 6324923L, 7107068L, 5084303L, 4541563L, + 1763382L, 1844602L, 1752008L, 7204045L, 7168220L, 3758537L, 2962701L, 2412712L, 7770460L, 1644601L, + 7794974L, 204542L, 2698680L, 4223087L, 2140009L, 4267733L, 7967619L, 3593628L, 2674698L, 6472042L, + 3024582L, 296160L, 418823L, 6873351L, 149317L, 1646263L, 8355736L, 1631815L, 6570307L, 3591850L, + 4847620L, 7297515L, 5867210L, 3048145L, 7098770L, 6078145L, 491066L, 3794379L, 1997922L, 7785252L, + 2503859L, 8347575L, 7097952L, 547385L, 4296767L, 6279856L, 7186511L, 4828612L, 5964125L, 4888085L, + 3363793L, 5968271L, 5469982L, 6540260L, 3038957L, 4357968L, 746831L, 1385388L, 1794010L, 2931768L, + 3980132L, 4847408L, 4721794L, 316310L, 1829383L, 7273382L, 7659925L, 6408655L, 8043879L, 1639114L, + 2704945L, 4617711L, 1526476L, 1740520L, 1843212L, 7551212L, 361491L, 7045319L, 613812L, 6087865L, + 4531017L, 2580214L, 7400590L, 3996380L, 5619417L, 6947940L, 427031L, 6535215L, 1339318L, 2300410L, + 3407179L, 5709377L, 1928274L, 4368003L, 4453168L, 3435124L, 670227L, 2759002L, 1166645L, 4899990L, + 7151958L, 3957040L, 4319087L, 6452517L, 2611052L, 4856176L, 6138759L, 2013526L, 7274068L, 7151914L, + 7545114L, 4430067L, 3698L, 4870722L, 7567279L, 1481467L, 6456483L, 1243840L, 3059647L, 7374602L, + 2095454L, 2982147L, 3604253L, 847099L, 3432797L, 2149160L, 1364476L, 3470845L, 1316155L, 2930943L, + 2425485L, 2237996L, 7778668L, 4283902L, 2663344L, 903566L, 5394073L, 3417319L, 7445211L, 8275581L, + 6291357L, 5929249L, 6284858L, 5483913L, 6791513L, 704778L, 2496506L, 4880796L, 6878385L, 6931244L, + 5830367L, 5232207L, 6954305L, 1589153L, 5337220L, 7637499L, 8164050L, 604221L, 6571664L, 1310263L, + 7682588L, 1306718L, 6776919L, 124729L, 4418598L, 2615215L, 5328001L, 6392284L, 6474935L, 6890059L, + 2546380L, 7187081L, 2168334L, 5343621L, 890999L, 849974L, 7258346L, 5179840L, 7423515L, 1598614L, + 3449624L, 6941022L, 2033662L, 2853818L, 4654411L, 5474342L, 7482491L, 6957764L, 1513160L, 4490087L, + 5710449L, 1570582L, 4843068L, 3997683L, 5566357L, 1791933L, 3019317L, 1814786L, 3957095L, 6954800L, + 6650662L, 1917205L, 5059502L, 5602938L, 3235119L, 907144L, 4067327L, 7517498L, 5660510L, 718620L, + 5307634L, 670278L, 8370582L, 1808354L, 5104497L, 5455972L, 6104464L, 5394293L, 2435538L, 5076347L, + 7999353L, 2317165L, 928159L, 4577455L, 6334622L, 6085155L, 6695116L, 2641950L, 5469475L, 5446864L, + 3697097L, 2617060L, 6381732L, 3227241L, 5002725L, 7430830L, 4036241L, 3899173L, 1727465L, 1994688L, + 6017266L, 4773127L, 5000468L, 2534116L, 383314L, 6255556L, 6710856L, 888928L, 1582696L, 5830962L, + 8175857L, 3300899L, 6481131L, 7763460L, 613105L, 6558384L, 3212896L, 7811247L, 3599891L, 3216964L, + 1606235L, 1052319L, 4003316L, 1164326L, 2436742L, 6154103L, 5820874L, 7358110L, 1702721L, 1073760L, + 1581507L, 2949408L, 3423819L, 3249781L, 449956L, 1996616L, 641271L, 1535121L, 6033631L, 7133274L, + 1621125L, 5385029L, 6921790L, 2216493L, 2242165L, 302911L, 2366441L, 423566L, 126274L, 4590012L, + 6818074L, 6627044L, 6008056L, 7225587L, 988186L, 3096745L, 755914L, 7587777L, 7800434L, 2758029L, + 602761L, 7738385L, 6950233L, 5464380L, 4977062L, 6601364L, 7833520L, 7328059L, 5183991L, 8121735L, + 3734243L, 3647444L, 321365L, 2859709L, 1480242L, 6021289L, 6117115L, 1830020L, 1063717L, 2065927L, + 1706350L, 4895887L, 3589610L, 1864783L, 5315919L, 5653102L, 1134836L, 4890915L, 6752408L, 2080418L, + 2950104L, 2134132L, 8077953L, 6329974L, 7927667L, 2128411L, 4317632L, 726514L, 6571302L, 2820095L, + 3941122L, 5346596L, 1469660L, 5519367L, 3160530L, 6440266L, 6384054L, 1765101L, 7969861L, 1246074L, + 4268361L, 4307130L, 4200195L, 5638291L, 7704610L, 5793382L, 5023092L, 5337545L, 316626L, 6268038L, + 6832611L, 731909L, 7555234L, 5089933L, 6470288L, 2829321L, 4092405L, 8197694L, 6245156L, 2177408L, + 6600549L, 75089L, 3401520L, 1932210L, 5412035L, 3125991L, 8377021L, 7541584L, 4654468L, 660778L, + 4011640L, 2184034L, 6002856L, 2920204L, 633971L, 1951698L, 5829463L, 2031703L, 1901472L, 6358364L, + 5872602L, 7874237L, 6560636L, 2603890L, 3830550L, 2972636L, 2462614L, 3273937L, 7567060L, 7828776L, + 8025768L, 2396927L, 3795016L, 5497032L, 7594692L, 2769466L, 4201316L, 8162473L, 5905496L, 4715187L, + 1956711L, 5891940L, 1007868L, 3622087L, 5589510L, 2727589L, 4109418L, 6852571L, 8284360L, 5227470L, + 8372994L, 2931454L, 3460435L, 1654513L, 560116L, 7815611L, 1528120L, 3045136L, 1969348L, 4469180L, + 8038551L, 6809022L, 411659L, 3777892L, 7728335L, 6412791L, 5742118L, 8062163L, 5222697L, 4523942L, + 7049161L, 4745481L, 2289389L, 5803009L, 3379643L, 3959048L, 78134L, 5909394L, 3399536L, 4198611L, + 1471925L, 5798592L, 1322328L, 4627825L, 5007985L, 6627282L, 5566507L, 29221L, 2230637L, 3701959L, + 3096875L, 5391501L, 7269224L, 2842450L, 6286002L, 4166641L, 6595798L, 3111383L, 2544854L, 4362408L, + 5319204L, 7383707L, 1255172L, 6576342L, 4940351L, 3247376L, 113274L, 6686303L, 4930139L, 7801908L, + 3216175L, 2501713L, 4315314L, 791585L, 3827730L, 173427L, 7723235L, 1258207L, 1116335L, 2686980L, + 5327507L, 5867003L, 3358634L, 7522680L, 4588999L, 4881407L, 8039067L, 3090619L, 4504960L, 3475510L, + 3488783L, 863749L, 5034427L, 353923L, 7229980L, 1441188L, 5844639L, 551697L, 772998L, 7257707L, + 7049013L, 6236863L, 12244L, 4298087L, 2471543L, 3660587L, 221065L, 2979853L, 5053041L, 921065L, + 6070535L, 1536156L, 7313537L, 2919844L, 2844031L, 172495L, 2550965L, 2822317L, 7135323L, 2622950L, + 5971151L, 1857513L, 1423551L, 2084831L, 8259811L, 7867864L, 5147674L, 6859712L, 7230740L, 2140798L, + 617893L, 5486173L, 4038365L, 2785121L, 2951677L, 7708185L, 4958330L, 4549974L, 7108335L, 1836547L, + 5870194L, 3937611L, 6977278L, 1995229L, 5096948L, 2038025L, 3794814L, 6108979L, 6931169L, 4566525L, + 3055413L, 3470624L, 5535698L, 6039055L, 2781041L, 7959860L, 1872805L, 709710L, 2475280L, 5814759L, + 101345L, 2998805L, 6760415L, 7834158L, 3085257L, 5630024L, 3068203L, 37680L, 277656L, 312782L, + 7141164L, 7151320L, 7949834L, 4463121L, 2497178L, 5661680L, 8358310L, 1178382L, 916443L, 7695556L, + 654603L, 318141L, 2133308L, 1693386L, 5071946L, 3040631L, 3918131L, 5062181L, 3371607L, 7882137L, + 6046707L, 5702814L, 7806196L, 2141213L, 7495785L, 3204372L, 4211392L, 2732217L, 2043061L, 743660L, + 1522469L, 1914165L, 6113276L, 2567657L, 2497565L, 3213115L, 2756943L, 115498L, 5377538L, 2073467L, + 4275311L, 5425102L, 7685450L, 1799554L, 1828514L, 2382938L, 2318715L, 2992856L, 7720809L, 6465388L, + 3797606L, 4567735L, 3538008L, 4726712L, 1433869L, 1364805L, 2587482L, 119958L, 5047036L, 3836666L, + 5440745L, 1064060L, 1382664L, 5649621L, 5442398L, 7562178L, 7720391L, 7916622L, 6160338L, 128675L, + 4839807L, 781591L, 2139427L, 29419L, 4810207L, 1871532L, 2003971L, 3282920L, 595316L, 3231237L, + 8031600L, 5744188L, 3710633L, 6172347L, 6884827L, 1569971L, 6139980L, 3806461L, 788145L, 7529739L, + 8053595L, 6884327L, 4490507L, 4804036L, 438284L, 3121639L, 3511282L, 7045219L, 2579098L, 6455074L, + 3905371L, 296591L, 2045825L, 5890682L, 793779L, 2219832L, 7831908L, 6466491L, 5579008L, 2504515L, + 373942L, 6028409L, 430569L, 3604932L, 7441260L, 7688553L, 7411150L, 7077516L, 401239L, 338783L, + 6134635L, 1732125L, 1962060L, 182992L, 1412448L, 5969908L, 7350368L, 1519867L, 5017556L, 2822272L, + 5370371L, 3922649L, 4976524L, 1085311L, 1877688L, 5249056L, 1375363L, 7225598L, 5326338L, 8088357L, + 7883277L, 439973L, 3042845L, 3330231L, 7734117L, 375502L, 4189241L, 5333502L, 723523L, 7749588L, + 326055L, 3489158L, 2131836L, 706060L, 1190093L, 1992634L, 946205L, 1555277L, 7093889L, 2306175L, + 2397331L, 2250066L, 512396L, 3320653L, 4588879L, 5665107L, 7149402L, 1923958L, 5157486L, 3435292L, + 2760012L, 636883L, 1876798L, 577421L, 3053216L, 7405990L, 1337645L, 124723L, 2057951L, 4499991L, + 1354425L, 7635101L, 8055268L, 5731843L, 4564851L, 6722430L, 7945797L, 1441405L, 2445912L, 4232820L, + 7818262L, 2272738L, 2972279L, 393047L, 2895838L, 8300426L, 4327823L, 2507187L, 5872698L, 4850548L, + 4236962L, 3732816L, 78710L, 7582718L, 4540577L, 1504734L, 2823337L, 5807483L, 7621550L, 6672845L, + 3871661L, 2070573L, 6013052L, 2487396L, 5555964L, 3976757L, 5823321L, 1092923L, 444313L, 2816652L, + 4839909L, 4079448L, 8078319L, 4087884L, 1826390L, 2437321L, 1125182L, 2885356L, 6763319L, 8240732L, + 4336699L, 3596099L, 4323607L, 440708L, 7135360L, 236897L, 5426017L, 7205777L, 3929432L, 510300L, + 2401890L, 7922168L, 4148579L, 3730796L, 2009503L, 2029071L, 988809L, 5982920L, 3771601L, 4218378L, + 4669985L, 2927157L, 4126286L, 6592756L, 7436429L, 3388955L, 2962748L, 8004768L, 845800L, 6524506L, + 4407190L, 6646015L, 6613116L, 642087L, 6827370L, 2537865L, 5080541L, 6266054L, 1347779L, 4171840L, + 6709831L, 3851916L, 8356899L, 2738470L, 7324765L, 3782138L, 7580146L, 5981673L, 69953L, 881796L, + 4105589L, 7775278L, 6471142L, 8375238L, 3952474L, 7828062L, 4152294L, 7518560L, 6545261L, 5952701L, + 5285673L, 3450126L, 719925L, 8284776L, 7426214L, 7135159L, 2726325L, 6777410L, 175503L, 5205609L, + 547426L, 6527058L, 233805L, 4262238L, 2639330L, 3605682L, 4844243L, 821888L, 6288809L, 3110918L, + 8187917L, 7146329L, 3924945L, 6423821L, 4874824L, 3989727L, 4185564L, 2676587L, 7797742L, 3838505L, + 4086899L, 3820833L, 3387620L, 1568140L, 2452539L, 1888745L, 2475316L, 7336817L, 5100269L, 6161593L, + 885000L, 5190705L, 8327019L, 4257262L, 2383471L, 3173671L, 5401712L, 2175850L, 3849394L, 1962358L, + 483022L, 4526180L, 3291111L, 6175953L, 2299376L, 709083L, 7310256L, 6042350L, 4146040L, 2506917L, + 4151889L, 4065914L, 1016834L, 5978142L, 1980444L, 4150426L, 6361615L, 2777351L, 4138951L, 6385193L, + 7150790L, 7435768L, 3938341L, 3827263L, 1823331L, 2509966L, 3842741L, 7572967L, 6042367L, 2817110L, + 5155549L, 7694583L, 6436334L, 562321L, 1372990L, 7010750L, 8371788L, 766674L, 5757416L, 1416890L, + 5491550L, 8256751L, 7186339L, 398081L, 6732847L, 2385536L, 5732902L, 2599104L, 4380698L, 2750855L, + 2859293L, 2388089L, 6042576L, 5793104L, 3115169L, 5505216L, 4248285L, 8246844L, 5369066L, 3953719L, + 5537394L, 5328078L, 817306L, 2408241L, 3988175L, 166094L, 5894166L, 2936493L, 2272387L, 4361585L, + 5470841L, 2315560L, 2816614L, 2463810L, 7516645L, 2209887L, 679402L, 6823084L, 168995L, 5171201L, + 2596074L, 1530131L, 2266455L, 4196819L, 8205882L, 4446058L, 7906000L, 6567599L, 6541340L, 996435L, + 7009121L, 6765845L, 2205124L, 3823035L, 4379467L, 137460L, 80810L, 2354132L, 6154332L, 2307371L, + 7690126L, 5269812L, 8098981L, 3748944L, 6750729L, 7633574L, 7721976L, 7147138L, 3178254L, 7646866L, + 7707674L, 2686541L, 1452278L, 6129423L, 8139053L, 5704557L, 5324013L, 86006L, 292850L, 3840573L, + 7612743L, 322035L, 48051L, 7555608L, 7923572L, 3140097L, 4750315L, 6570830L, 4415016L, 8088083L, + 3525493L, 1469289L, 5565552L, 583387L, 3789778L, 6997001L, 2505145L, 4090453L, 1011250L, 5095852L, + 4001227L, 1684913L, 1930482L, 425094L, 5548078L, 5138013L, 2350605L, 4586469L, 3870335L, 1416243L, + 7974669L, 6285333L, 5863632L, 2087857L, 4609809L, 7830907L, 2768321L, 6493617L, 6680332L, 2430798L, + 1377469L, 7550359L, 5879234L, 8103615L, 4360315L, 3092780L, 258975L, 2557566L, 6682843L, 3491498L, + 1589545L, 6473088L, 6854762L, 2214256L, 926139L, 336668L, 1281070L, 536150L, 6031863L, 2718679L, + 1426323L, 1453854L, 3097237L, 2874601L, 5634543L, 2535448L, 2756740L, 279874L, 6947085L, 2826733L, + 4512370L, 6764248L, 7967768L, 4502975L, 6153063L, 3728230L, 4892161L, 5657483L, 3229233L, 6814848L, + 1343074L, 7917533L, 692936L, 4403586L, 6175201L, 438150L, 3232624L, 5824222L, 6171708L, 1983328L, + 6104432L, 1124916L, 1131041L, 3919001L, 3999353L, 6756647L, 488450L, 7296479L, 6619930L, 7507129L, + 2044882L, 6935378L, 332788L, 5690333L, 7996708L, 3172562L, 4375347L, 520190L, 350628L, 5116261L, + 6496387L, 6030436L, 3809053L, 2468881L, 5067028L, 6247796L, 2711969L, 151331L, 2348588L, 4059109L, + 7057896L, 951457L, 6855024L, 5607557L, 1583533L, 6443207L, 7271563L, 5439456L, 3786914L, 6056166L, + 5919039L, 4027321L, 1147450L, 2362440L, 7416465L, 2444446L, 679630L, 8149012L, 2384282L, 7162593L, + 2269100L, 2429682L, 2422363L, 8098052L, 1156083L, 5083690L, 5588109L, 5627157L, 6699485L, 8051819L, + 6577757L, 6411518L, 6277640L, 7705229L, 3156805L, 3260172L, 2634796L, 7984117L, 8173892L, 1260273L, + 5733233L, 312981L, 1810692L, 7043760L, 5767074L, 3242696L, 1587143L, 2255222L, 4571636L, 1515963L, + 527224L, 4287297L, 3990420L, 6994668L, 3052795L, 3101432L, 7462238L, 1381436L, 6590563L, 20247L, + 5298642L, 8102754L, 5619461L, 5084667L, 6177129L, 5886686L, 1812911L, 8206562L, 7734941L, 1308576L, + 7686402L, 2712571L, 6230630L, 7541565L, 5354379L, 690136L, 4710435L, 1965967L, 6357244L, 2533763L, + 482956L, 2462136L, 928338L, 3352559L, 6406402L, 7211987L, 6393405L, 8249078L, 5702454L, 4791249L, + 1343031L, 7838809L, 2548133L, 5097737L, 3355094L, 6480202L, 311354L, 8169000L, 2875868L, 7926236L, + 4963693L, 2965717L, 7680616L, 3945056L, 7140258L, 1091197L, 4833508L, 3208700L, 4279519L, 5467208L, + 4170390L, 736542L, 1546691L, 1878119L, 1907134L, 1433508L, 7858094L, 2282634L, 1734640L, 5759527L, + 5809192L, 6086939L, 7351492L, 1699069L, 450535L, 7796957L, 5030776L, 3742516L, 1058338L, 7131273L, + 6199704L, 2108493L, 5706395L, 3531636L, 4821863L, 792647L, 6812979L, 421260L, 1104563L, 3897678L, + 3911274L, 200540L, 2428502L, 1957497L, 2978011L, 7766507L, 7826881L, 5851650L, 907655L, 113293L, + 3491472L, 1284399L, 3432572L, 4126270L, 3159064L, 2688301L, 5050121L, 2018301L, 1646875L, 661176L, + 772841L, 3091136L, 7649891L, 62507L, 3226235L, 4771974L, 6698866L, 3787350L, 4071144L, 1534740L, + 1861383L, 2355501L, 6717937L, 1088765L, 7527121L, 2479370L, 940492L, 2369168L, 7434286L, 2521390L, + 7378295L, 7863776L, 3312347L, 482065L, 247099L, 6882556L, 1648824L, 922044L, 5713786L, 4568988L, + 5736949L, 7145606L, 6667862L, 7408721L, 103054L, 692583L, 7862369L, 3005648L, 440833L, 4392318L, + 2137328L, 5626372L, 2091853L, 346200L, 8100834L, 3506534L, 6654673L, 3989237L, 453265L, 8051436L, + 5294095L, 932834L, 1976808L, 612980L, 1155976L, 944611L, 5343702L, 8037475L, 2519587L, 5292341L, + 5778772L, 875789L, 5986641L, 1889243L, 3882339L, 1332908L, 4105010L, 4909710L, 7726792L, 99276L, + 512531L, 847230L, 7553237L, 3462521L, 1047592L, 2474780L, 2535437L, 7480299L, 7435136L, 3293539L, + 3402970L, 2103329L, 7352195L, 3037044L, 3721476L, 7106378L, 6614910L, 911441L, 5011420L, 4824394L, + 2399412L, 2952198L, 2033582L, 2074289L, 3278045L, 2599645L, 5064773L, 5172652L, 2959852L, 6649839L, + 269405L, 7911001L, 7737016L, 3495543L, 4415002L, 6248372L, 3933972L, 774419L, 3983063L, 3833956L, + 5526043L, 4200983L, 3039203L, 3675666L, 8185851L, 7639927L, 248200L, 8035734L, 4907871L, 1216570L, + 7370596L, 8193838L, 2692437L, 5018357L, 7901596L, 7219922L, 486127L, 2618108L, 4326319L, 764640L, + 370451L, 5779913L, 7895219L, 533902L, 126118L, 4799947L, 7718187L, 3534654L, 3087012L, 7752965L, + 899002L, 4121528L, 4775786L, 993535L, 6339353L, 2599978L, 4631168L, 5198721L, 4593297L, 4282520L, + 8164402L, 1906489L, 2948098L, 5277593L, 5865027L, 7693136L, 1261757L, 7311037L, 5644819L, 1806672L, + 7793604L, 2996658L, 384172L, 7116979L, 4052554L, 8071392L, 207375L, 8266619L, 3150769L, 5225779L, + 6112178L, 3181982L, 4040814L, 6579265L, 5003737L, 5483762L, 2422424L, 1032111L, 2467653L, 3157680L, + 2243059L, 2357193L, 6709672L, 1416429L, 7183662L, 6180296L, 754386L, 5679810L, 6914326L, 6285884L, + 2031715L, 3591035L, 2107926L, 6266694L, 6945195L, 956269L, 7738308L, 5177336L, 782053L, 2220574L, + 584200L, 1116288L, 2267603L, 6813458L, 2016603L, 4237441L, 3221836L, 8189281L, 5449363L, 1940601L, + 2388726L, 5082638L, 3838106L, 5368805L, 5220569L, 3763909L, 6055743L, 4568139L, 6025047L, 2084074L, + 1347980L, 6074386L, 7801112L, 3110663L, 6534409L, 6647392L, 2167627L, 1507534L, 812089L, 5317040L, + 1174157L, 3334495L, 2866641L, 5075876L, 2362754L, 2804195L, 3602634L, 786743L, 1295325L, 1970483L, + 7402051L, 6519247L, 965913L, 5715645L, 3890950L, 4099387L, 8136045L, 6539510L, 225089L, 318406L, + 7244783L, 6931378L, 6867185L, 5493275L, 6733966L, 6382657L, 2484286L, 4636557L, 656904L, 2310233L, + 6051742L, 4509721L, 4029861L, 4611729L, 5625027L, 3389319L, 1302921L, 6957329L, 2221544L, 5497729L, + 3623761L, 6923569L, 5994334L, 95957L, 1306514L, 6813518L, 5149540L, 972362L, 822162L, 5604980L, + 1182349L, 3015488L, 7847618L, 4117397L, 8171521L, 4746279L, 5059182L, 5129014L, 6768983L, 411479L, + 6731782L, 3252051L, 2272662L, 1080729L, 4664824L, 472874L, 7746031L, 656045L, 318093L, 7807253L, + 2397537L, 3413743L, 6785162L, 6995808L, 2017357L, 3704187L, 5620746L, 2521707L, 1819636L, 6225235L, + 2248835L, 3658902L, 8152643L, 4967843L, 7667233L, 6155359L, 2530828L, 6039846L, 5712527L, 258258L, + 4799046L, 5088843L, 614106L, 5727094L, 3827364L, 731515L, 8173626L, 5826984L, 1691100L, 881847L, + 7084257L, 5593335L, 7540015L, 5207987L, 1167812L, 4381668L, 5274852L, 2256906L, 8112451L, 1769174L, + 4361218L, 4976106L, 6339107L, 1551783L, 7013865L, 3334773L, 1203258L, 3240925L, 1792677L, 2658752L, + 3215500L, 6771943L, 1442300L, 6645133L, 8314519L, 7035052L, 5822689L, 2093742L, 1144721L, 3231113L, + 6077249L, 2803860L, 7437102L, 5901545L, 8326735L, 143815L, 5866277L, 591761L, 870367L, 554083L, + 7814197L, 6619445L, 975138L, 5364933L, 51264L, 7606151L, 2290216L, 5596908L, 5289153L, 5608900L, + 5799536L, 8161310L, 4132569L, 5466760L, 6906567L, 1279576L, 5118371L, 1694633L, 4336060L, 5961808L, + 3544929L, 5815336L, 2319655L, 3803941L, 547702L, 7770036L, 475217L, 8304867L, 5396298L, 3444222L, + 7061763L, 2773233L, 2053296L, 6429337L, 8179734L, 1048389L, 908450L, 3873577L, 5041182L, 2888743L, + 3925958L, 3470763L, 6667940L, 3923729L, 7670431L, 2952381L, 3153280L, 448997L, 5883208L, 4052033L, + 7828051L, 3977555L, 3235505L, 6969311L, 5813184L, 7016504L, 1157232L, 892407L, 8172377L, 1031478L, + 3771867L, 990906L, 5495359L, 6662414L, 7810758L, 5232836L, 7940864L, 8169418L, 483917L, 6721819L, + 6074723L, 6885421L, 243335L, 6225436L, 3918656L, 3779460L, 5639427L, 218540L, 4397467L, 3560166L, + 987297L, 380454L, 4259702L, 848111L, 2007275L, 4989504L, 3443388L, 5256454L, 1831925L, 6650323L, + 343420L, 1462908L, 893098L, 1386005L, 221595L, 4453708L, 2708611L, 8021217L, 3884498L, 6853499L, + 3048142L, 8247642L, 3802191L, 638149L, 7821680L, 5347691L, 7243275L, 1480940L, 3927582L, 1213923L, + 1771902L, 4173508L, 251110L, 7667929L, 6882242L, 3243706L, 3410883L, 4388617L, 4966820L, 1416418L, + 4559692L, 3063012L, 2034620L, 2713318L, 5356843L, 1778339L, 5915127L, 794067L, 5433028L, 7401457L, + 456988L, 3408325L, 1481418L, 628803L, 4486527L, 6913919L, 6018943L, 5731571L, 7687369L, 5959485L, + 4034032L, 6048287L, 5159814L, 4768361L, 4115809L, 7543469L, 925681L, 617628L, 1745301L, 1625659L, + 6993358L, 998785L, 3368459L, 7404328L, 2513975L, 7171625L, 4216525L, 5224300L, 2711865L, 5948516L, + 6720135L, 2509556L, 2428081L, 5782572L, 4653591L, 5135036L, 437887L, 7220183L, 5432993L, 5448072L, + 5020681L, 5478691L, 121409L, 2829529L, 7159379L, 6840166L, 5548920L, 6535980L, 8198523L, 82120L, + 8095747L, 530092L, 1368601L, 3498415L, 6626825L, 4408839L, 297579L, 3937452L, 3527211L, 114603L, + 1908373L, 3061087L, 7830452L, 8198781L, 4160498L, 3619184L, 1051201L, 4602903L, 7211513L, 7511477L, + 3685837L, 8164386L, 7907650L, 612672L, 5350360L, 6136987L, 2748079L, 4145098L, 7318666L, 4410041L, + 8369355L, 6138104L, 8176997L, 828882L, 8219829L, 4571365L, 6687801L, 6677395L, 7959453L, 5927690L, + 5879212L, 7298301L, 2198539L, 5028621L, 3479169L, 4362155L, 4038649L, 6504020L, 4331405L, 1674368L, + 5937765L, 8369568L, 357719L, 7659900L, 6732087L, 2771461L, 160393L, 7715458L, 1959138L, 7718227L, + 2774117L, 8216679L, 4276083L, 4222718L, 5958288L, 5948761L, 2506448L, 8133811L, 5152623L, 2552614L, + 4563066L, 207498L, 2784164L, 6909446L, 6229807L, 6230154L, 5750096L, 6458713L, 5189126L, 5942424L, + 2004200L, 3043479L, 7319773L, 4479599L, 3140785L, 2654778L, 7009807L, 6946757L, 2700018L, 6945894L, + 2049999L, 1921370L, 2917914L, 2092524L, 6043264L, 4278106L, 2230128L, 4039964L, 8068728L, 1518699L, + 2978080L, 7329956L, 6695328L, 4560732L, 5321437L, 2288991L, 7414550L, 4970931L, 519376L, 7319731L, + 6166145L, 5232344L, 6229550L, 3083482L, 4158640L, 3237030L, 7541935L, 4140710L, 2002790L, 306869L, + 3474955L, 1996861L, 1700254L, 4044872L, 1955537L, 3503089L, 6426500L, 8192375L, 6597735L, 2803380L, + 1555341L, 8115998L, 2268632L, 5261701L, 5571976L, 1423585L, 6429182L, 1570744L, 974302L, 7145191L, + 7074930L, 672172L, 3719779L, 1383948L, 6426925L, 1731240L, 2315733L, 6476053L, 1132950L, 1752783L, + 5285085L, 158778L, 7260109L, 7836533L, 5997879L, 5952894L, 7301150L, 7313776L, 168877L, 2581132L, + 1645986L, 5039366L, 5979768L, 3127693L, 2412887L, 3363633L, 5400794L, 6882807L, 3234013L, 5233935L, + 5053183L, 2376970L, 6999688L, 7109829L, 8271850L, 4164282L, 7845904L, 1432317L, 4263858L, 7026475L, + 3451234L, 942738L, 5494730L, 1436674L, 7277148L, 1798455L, 341300L, 4796418L, 937300L, 4991294L, + 172437L, 4778314L, 1528340L, 990527L, 7263667L, 749156L, 6253741L, 1915856L, 2302685L, 1188931L, + 611935L, 3725926L, 8272832L, 5543344L, 2040038L, 5451140L, 3544629L, 5655956L, 4209932L, 1216443L, + 4766334L, 5963108L, 6564432L, 6642457L, 4225353L, 1668244L, 3778807L, 2159567L, 6285671L, 4288978L, + 5763807L, 1681236L, 7617456L, 1392364L, 7032423L, 720404L, 5256531L, 6808202L, 2964L, 7050820L, + 2458646L, 6144824L, 7696256L, 4341837L, 8167761L, 7011991L, 6712497L, 8026051L, 3987513L, 4436754L, + 3199177L, 5575237L, 1939615L, 3095048L, 6520711L, 4343185L, 656589L, 1486920L, 6291991L, 6411932L, + 6367944L, 376007L, 1274581L, 5185178L, 5201248L, 4643286L, 997240L, 5342872L, 5686966L, 1693423L, + 5351889L, 7295551L, 8034264L, 7137763L, 4440252L, 5074502L, 4421357L, 3223037L, 799059L, 689576L, + 7257142L, 6636156L, 1906727L, 7222007L, 4126678L, 5601416L, 7217001L, 2271589L, 991415L, 7911920L, + 1940917L, 4579617L, 5640722L, 1446467L, 7005825L, 2613312L, 4840719L, 8245458L, 448893L, 3512147L, + 2582087L, 1272065L, 4287754L, 2743395L, 2140399L, 5422143L, 1861965L, 2571030L, 5168217L, 7813269L, + 1322769L, 5067142L, 6610605L, 286519L, 4263143L, 3096956L, 1918012L, 7111615L, 7316411L, 7301679L, + 4439495L, 4839665L, 3873712L, 4904461L, 3194781L, 8314305L, 3913808L, 929832L, 6836972L, 2758058L, + 398750L, 854111L, 846045L, 2395582L, 3163092L, 4330430L, 1053969L, 575458L, 3859660L, 7743322L, + 1771458L, 6710942L, 5527459L, 4416948L, 2138763L, 1597240L, 3659284L, 1555678L, 3560029L, 8211447L, + 3917513L, 2301069L, 5209977L, 666096L, 6399618L, 7587265L, 5028418L, 425272L, 7401511L, 8125254L, + 5164330L, 5816356L, 7030477L, 2488775L, 5008191L, 4918368L, 4369804L, 8309719L, 7853468L, 2418871L, + 2333254L, 5880608L, 346692L, 2826048L, 6526602L, 2538999L, 332215L, 4698440L, 1819308L, 1340918L, + 442042L, 6088400L, 7075131L, 1397530L, 3624228L, 1544307L, 6162933L, 2065030L, 1299974L, 5689733L, + 6185415L, 2461460L, 4914880L, 3039284L, 7493887L, 2199530L, 6564650L, 4995811L, 8099042L, 1722625L, + 641964L, 647339L, 6124309L, 3758156L, 3438254L, 2916176L, 5539683L, 5329260L, 5301991L, 7127087L, + 146402L, 54831L, 3982794L, 3475143L, 4388818L, 1139676L, 3656985L, 6999854L, 7697944L, 2451264L, + 3849000L, 2334518L, 3788065L, 1168069L, 48688L, 558027L, 6586583L, 3540833L, 7766062L, 372664L, + 6469535L, 202533L, 3333184L, 6754040L, 5151049L, 436772L, 5511466L, 7060853L, 3391308L, 473877L, + 5791760L, 2599779L, 2516355L, 4515188L, 3417037L, 7944048L, 6750672L, 5729343L, 2517577L, 3389188L, + 2780710L, 5877294L, 8257545L, 709415L, 1049389L, 461775L, 6392580L, 2424831L, 3277131L, 6498563L, + 3222951L, 5803700L, 3333318L, 6512311L, 7397006L, 6124552L, 5029520L, 5335259L, 1408324L, 588396L, + 4741261L, 1927384L, 1942221L, 7845100L, 7314499L, 1034197L, 1162382L, 3573877L, 3959694L, 7561149L, + 2124320L, 1566203L, 3156558L, 6597393L, 1140433L, 8176119L, 1337121L, 5860946L, 3122007L, 2484591L, + 2325708L, 841456L, 7033906L, 179841L, 5402494L, 7746673L, 7833375L, 2574984L, 5948930L, 1592654L, + 5881426L, 6738941L, 8236304L, 4497062L, 1950522L, 3082707L, 1372801L, 393669L, 4953377L, 4903547L, + 1935468L, 4927880L, 6946211L, 7763317L, 1712893L, 3018771L, 3376599L, 6841380L, 5886765L, 1382934L, + 2625869L, 4436899L, 2555974L, 7630438L, 2288036L, 2497374L, 512122L, 8006828L, 7665648L, 3373514L, + 6158895L, 6303010L, 3818871L, 3528668L, 6297319L, 6050470L, 4274194L, 5178987L, 1978199L, 1391744L, + 1972037L, 5743051L, 7583766L, 6917590L, 297214L, 2712113L, 2643468L, 1924706L, 7028027L, 1443735L, + 5660263L, 7134286L, 943354L, 5959820L, 3404155L, 3986603L, 2276173L, 1025312L, 6237612L, 781182L, + 5184194L, 4457174L, 7715765L, 896165L, 5685027L, 7343939L, 5266532L, 909120L, 549367L, 6873791L, + 8133908L, 60143L, 1459016L, 5937048L, 6741190L, 2087458L, 2155435L, 2988795L, 2954663L, 656709L, + 3479623L, 7129236L, 7415034L, 5011030L, 1657273L, 4583538L, 2331700L, 7124712L, 8379145L, 348160L, + 4043615L, 1489087L, 3746144L, 6138149L, 3442021L, 6923471L, 5944863L, 746771L, 213440L, 4289378L, + 5902650L, 4888515L, 7613896L, 4480552L, 1221838L, 2020756L, 6669912L, 3159208L, 957216L, 504127L, + 150117L, 444360L, 2712353L, 2773712L, 6949433L, 7390923L, 4576173L, 7676621L, 6961290L, 4066182L, + 1281857L, 2718122L, 7645775L, 3143379L, 6055377L, 572938L, 7258154L, 7314198L, 3002556L, 2089673L, + 5205568L, 5175911L, 891028L, 1212291L, 5880482L, 2834709L, 5715166L, 7098151L, 6244382L, 8332533L, + 7047924L, 7587006L, 164192L, 7938249L, 7318455L, 2580655L, 3106617L, 3509248L, 121882L, 4621033L, + 6742430L, 3049787L, 7099645L, 8089407L, 7650738L, 4845203L, 4375007L, 8375864L, 1193206L, 933852L, + 652401L, 5334194L, 4359399L, 2780537L, 36214L, 6081878L, 2457728L, 4283702L, 256476L, 7247800L, + 4425896L, 6684131L, 4018116L, 4046753L, 647815L, 1516096L, 4442905L, 8312372L, 4286139L, 5032519L, + 1911542L, 3563216L, 4733597L, 128258L, 3980051L, 2781168L, 6925568L, 2343256L, 6921655L, 6978495L, + 7729798L, 3769637L, 3182724L, 6781342L, 8324796L, 5459236L, 3837445L, 587895L, 1799936L, 5022610L, + 1626480L, 6678904L, 561203L, 8376068L, 6650553L, 7774241L, 6121069L, 6368226L, 5125915L, 3555963L, + 7052511L, 1647964L, 5582569L, 1318987L, 4646627L, 2219065L, 7715560L, 6030036L, 3637226L, 8088517L, + 7962443L, 6035306L, 2761902L, 6021487L, 1053007L, 4029269L, 2825531L, 4251329L, 1385637L, 4338404L, + 1861838L, 5302416L, 8141006L, 4264622L, 1227353L, 4037942L, 5993232L, 5401633L, 5986153L, 516800L, + 3542716L, 6009953L, 5262858L, 6743966L, 2891674L, 7730625L, 5971308L, 6148152L, 8347318L, 1356514L, + 1419473L, 7459103L, 7919585L, 3762867L, 1619799L, 3285544L, 1399350L, 3758745L, 4562041L, 3739636L, + 7826079L, 4587736L, 4407777L, 5746515L, 4528927L, 328674L, 5337974L, 5231975L, 74458L, 5886084L, + 5241273L, 6878224L, 651168L, 330987L, 4979621L, 7764759L, 1907575L, 2814884L, 730679L, 3710089L, + 3847095L, 799782L, 6775346L, 1158440L, 8181805L, 4762854L, 4029521L, 3319126L, 1393438L, 7856733L, + 6738640L, 5935512L, 557745L, 7176280L, 7396863L, 2318384L, 4318856L, 5780969L, 7468698L, 2948977L, + 3421524L, 4909821L, 1098667L, 3596125L, 696243L, 3979236L, 7467765L, 3071608L, 4991006L, 7180430L, + 1782140L, 6598450L, 7095725L, 6468086L, 8106915L, 6255880L, 7131463L, 4685871L, 3725855L, 798538L, + 3736983L, 543804L, 5089506L, 6791992L, 3900563L, 7873688L, 5264649L, 5136407L, 7505020L, 3874951L, + 7538401L, 4354582L, 362857L, 2835764L, 3873983L, 5556997L, 7923488L, 7262798L, 4148985L, 3010296L, + 1883258L, 4514463L, 8033176L, 2471959L, 4339867L, 1303370L, 4484162L, 6087593L, 1373851L, 6474437L, + 2093806L, 4155008L, 8031619L, 3171722L, 5060925L, 1459832L, 3742743L, 420561L, 1903444L, 58060L, + 5132473L, 7095658L, 327002L, 7527302L, 5048574L, 1750770L, 1304395L, 2930924L, 5663646L, 479298L, + 2019265L, 973862L, 2409029L, 6583027L, 16658L, 7528316L, 7737984L, 2585685L, 813228L, 1882374L, + 1436493L, 5333038L, 3553418L, 2254649L, 525672L, 844994L, 7824314L, 4997080L, 1026710L, 3535458L, + 646827L, 4402383L, 2250046L, 2785678L, 1873557L, 1609798L, 5720380L, 668330L, 2038526L, 3466291L, + 3395898L, 1819696L, 6413684L, 5057803L, 8012417L, 7331700L, 994876L, 7339496L, 1610555L, 5437469L, + 7381770L, 117009L, 6347339L, 1170255L, 7050955L, 5773731L, 3411580L, 6389272L, 311519L, 1787707L, + 2093089L, 5548656L, 4478265L, 1325679L, 7678854L, 1425785L, 7438823L, 6686440L, 1659936L, 7341321L, + 3612732L, 583236L, 8109541L, 8223462L, 7078562L, 776658L, 6027183L, 6786544L, 7372573L, 7594525L, + 6943177L, 3420127L, 1620334L, 7096143L, 7830752L, 7752058L, 3240600L, 7761382L, 8125842L, 8151215L, + 3286238L, 6835119L, 2189755L, 7955213L, 1246091L, 1805780L, 26007L, 7792843L, 5118697L, 7572267L, + 1303439L, 5665147L, 4901048L, 1942508L, 999980L, 6583117L, 4707603L, 2451020L, 5968361L, 2446916L, + 5781328L, 3834591L, 7192208L, 6197738L, 3755552L, 8111492L, 1782641L, 207939L, 653976L, 161970L, + 240344L, 5957026L, 2403424L, 235138L, 166112L, 3789826L, 6735929L, 1102130L, 1197254L, 6361391L, + 6234694L, 8061644L, 4412169L, 1389017L, 7397186L, 810517L, 7201249L, 1105402L, 6228269L, 6360552L, + 7432244L, 3448845L, 2713815L, 1654789L, 3004390L, 7335470L, 4210149L, 6796334L, 6913168L, 5817956L, + 6799879L, 7296037L, 6372002L, 1646878L, 8306427L, 7381577L, 6847044L, 6221367L, 7441396L, 1394230L, + 6249840L, 5720721L, 1548983L, 3168466L, 3790852L, 4579798L, 347342L, 3456384L, 3792338L, 6316615L, + 2698843L, 1508059L, 4203328L, 5836226L, 5973443L, 1813622L, 1046536L, 4849648L, 5959148L, 1759404L, + 3235265L, 5016019L, 4196719L, 1066210L, 1482692L, 6066444L, 5754713L, 2187825L, 4249759L, 7936733L, + 6170021L, 881800L, 2468776L, 8270375L, 3729621L, 2951880L, 6691498L, 7835793L, 4141L, 5700028L, + 1403564L, 3158473L, 3403780L, 2914046L, 3272252L, 2173975L, 8217501L, 2514250L, 5157953L, 3151578L, + 1526153L, 1119172L, 3439188L, 7655948L, 2473244L, 1117436L, 2509151L, 4147508L, 897897L, 6087150L, + 2120335L, 692444L, 1945624L, 5424292L, 1183917L, 524508L, 6847082L, 6625788L, 2111054L, 549006L, + 6467999L, 1537640L, 6414951L, 5746657L, 1889424L, 7345038L, 732460L, 1747989L, 7468439L, 4117656L, + 4726012L, 5776233L, 164507L, 3640066L, 1758914L, 4312631L, 233150L, 7491419L, 2749322L, 637795L, + 7988796L, 7374147L, 4806650L, 4786109L, 4362732L, 3917191L, 5350448L, 1374155L, 6806874L, 5499068L, + 5776832L, 7943875L, 7984271L, 2560298L, 1832693L, 1845639L, 8000568L, 8054362L, 3497942L, 4555856L, + 876217L, 850922L, 1802307L, 295194L, 1108938L, 4969310L, 7937061L, 3660699L, 1133397L, 4899792L, + 323024L, 6011642L, 2962358L, 6086340L, 4636611L, 78545L, 2588511L, 5682699L, 1778319L, 4498271L, + 5139440L, 1399587L, 1235158L, 6937854L, 1069936L, 3649585L, 516631L, 1364183L, 4784295L, 8047771L, + 1172556L, 7797933L, 7890007L, 3879284L, 6027091L, 1642795L, 3381572L, 651208L, 4573232L, 2640216L, + 1456804L, 2413748L, 6566655L, 3430727L, 5470343L, 3987928L, 7961143L, 1865194L, 4112763L, 4783103L, + 653658L, 7324594L, 4358137L, 1583573L, 6122238L, 6629913L, 7774055L, 7762443L, 4783269L, 1575707L, + 4054461L, 7964010L, 6319308L, 1748354L, 1653318L, 7361697L, 6632332L, 2420092L, 1828071L, 2246029L, + 7209039L, 8030758L, 4879745L, 6505557L, 2070065L, 4181622L, 4982525L, 799441L, 4443346L, 3350261L, + 5777414L, 7579160L, 6479694L, 1906492L, 1222509L, 7492553L, 3606009L, 4456319L, 6833708L, 6542829L, + 5735891L, 7863482L, 1343386L, 8253345L, 3415052L, 6808595L, 8327248L, 2262466L, 788437L, 4793753L, + 5765049L, 5884437L, 2488155L, 8306784L, 485791L, 627408L, 1875333L, 7084097L, 3817289L, 452160L, + 4378763L, 6497770L, 1562742L, 6335186L, 6204096L, 5838223L, 6803492L, 4614377L, 7098160L, 7696385L, + 8298850L, 4401647L, 3147257L, 523037L, 682014L, 5558166L, 2905728L, 6894150L, 6131238L, 3705423L, + 380123L, 4982662L, 4301915L, 973897L, 4145627L, 3226598L, 5462931L, 2904835L, 5690408L, 3857775L, + 1390588L, 6060012L, 5160213L, 1405698L, 1120796L, 6248410L, 1068098L, 5098246L, 4736066L, 5878051L, + 671121L, 4296991L, 6448821L, 4440327L, 3600368L, 5262445L, 5252948L, 5873346L, 648331L, 3956177L, + 2002106L, 3736502L, 1080953L, 98687L, 756002L, 5820537L, 969774L, 5533446L, 2283353L, 904229L, + 3597440L, 2763801L, 4521618L, 3201352L, 737468L, 1025021L, 3537753L, 6214944L, 8262977L, 6619831L, + 1324629L, 3757802L, 5135513L, 1286628L, 2411711L, 2789958L, 8305270L, 5726156L, 5462175L, 6598662L, + 8278408L, 641902L, 6859749L, 6294748L, 4941168L, 7636132L, 6368150L, 3727023L, 5402195L, 1279282L, + 803431L, 330985L, 6587152L, 5558761L, 2507913L, 5492839L, 5556573L, 5701635L, 3190078L, 5707437L, + 1093851L, 6213725L, 2847941L, 3447747L, 7030073L, 42883L, 5600580L, 499505L, 3699986L, 6883189L, + 3190587L, 3576688L, 8314693L, 1221662L, 6085986L, 2455093L, 145859L, 3620565L, 563440L, 1961196L, + 7167062L, 5890757L, 338089L, 7566638L, 6758086L, 7974375L, 7788345L, 5630278L, 8302458L, 1589874L, + 7586350L, 4325652L, 6481535L, 6627852L, 1770840L, 6235727L, 5587378L, 1841852L, 5574574L, 1743033L, + 4334870L, 7556687L, 4006356L, 1031196L, 5121089L, 1602168L, 3041942L, 6390934L, 2869029L, 7310912L, + 2632003L, 1690151L, 6180690L, 4849907L, 2405333L, 8293472L, 5883145L, 7959782L, 2798574L, 4341582L, + 5097485L, 4350302L, 47211L, 6487596L, 3177230L, 7727132L, 5682536L, 7290617L, 1261922L, 80254L, + 7633903L, 656290L, 986562L, 409891L, 7567183L, 5885861L, 2557689L, 3164465L, 7929344L, 1344697L, + 5433685L, 6434141L, 8053410L, 5060671L, 1445130L, 7878947L, 6708528L, 5693930L, 1656403L, 156653L, + 8373067L, 5338384L, 702447L, 3957860L, 415484L, 5347809L, 2883544L, 3500823L, 1913824L, 2676599L, + 278332L, 1337596L, 1997187L, 1221935L, 7430035L, 4038924L, 729379L, 2508576L, 6807148L, 2670402L, + 6710028L, 1534817L, 4352813L, 8007854L, 859739L, 5178118L, 2317433L, 514288L, 2321341L, 5881126L, + 6132139L, 5305899L, 4421452L, 7945073L, 3282227L, 6544914L, 1916314L, 1436025L, 2525007L, 705712L, + 85943L, 6864588L, 244163L, 1184544L, 1695067L, 2535292L, 2980173L, 6537847L, 4555821L, 4755353L, + 7444347L, 2449205L, 2479564L, 5828607L, 7392245L, 785158L, 4730781L, 5827578L, 770104L, 575639L, + 1393595L, 3906709L, 4656718L, 2092481L, 7499607L, 5847702L, 6991752L, 4921796L, 2320630L, 7401762L, + 6725953L, 572493L, 4167541L, 1456170L, 3426035L, 5165115L, 5302634L, 8127059L, 5436445L, 3169232L, + 3839701L, 1669341L, 1989611L, 4635159L, 5145646L, 8299234L, 5908808L, 7473471L, 50536L, 2671185L, + 7418365L, 552394L, 4997944L, 5610976L, 371670L, 6740618L, 2582866L, 4360519L, 3469906L, 344328L, + 3399170L, 709442L, 2654576L, 5954692L, 2480300L, 8352730L, 7297341L, 2682108L, 7904043L, 1946317L, + 4729073L, 1202824L, 2771595L, 5373479L, 1112343L, 4811538L, 5369744L, 7633159L, 8164765L, 781740L, + 5354326L, 3767103L, 5705210L, 6845474L, 5883094L, 2906227L, 5843418L, 4122136L, 7396080L, 2712720L, + 5782347L, 1744432L, 2463659L, 5075386L, 7014137L, 2754870L, 1853902L, 3862692L, 2408948L, 2657378L, + 2849067L, 8191319L, 3971260L, 1412161L, 543746L, 3273018L, 7727475L, 7288674L, 5405115L, 8035894L, + 5493316L, 7639241L, 2682864L, 2605143L, 6883317L, 621586L, 4102760L, 1585822L, 751356L, 4011228L, + 5193466L, 2601118L, 1833472L, 277070L, 7344181L, 5586695L, 6809299L, 125294L, 2613980L, 2424559L, + 1864538L, 6078671L, 3127848L, 5883117L, 554737L, 7558186L, 8063445L, 4728200L, 3112466L, 1425277L, + 6846485L, 2830077L, 2322650L, 1109881L, 989841L, 6552978L, 4337002L, 2130925L, 6902382L, 5172011L, + 5963760L, 903138L, 3507787L, 7203209L, 7637293L, 4250101L, 1820552L, 1025282L, 5838216L, 97105L, + 4029593L, 5998525L, 5088117L, 7291528L, 7187047L, 4953438L, 2205913L, 4423957L, 3339585L, 320525L, + 3187484L, 6612069L, 1488540L, 6646085L, 2956113L, 4233053L, 4900850L, 7620018L, 6419151L, 7634674L, + 6339112L, 3551027L, 2473903L, 3538180L, 5489399L, 8178060L, 4764428L, 2691096L, 2104515L, 2607259L, + 2738108L, 6178621L, 6140787L, 103319L, 5907328L, 2616082L, 3797583L, 1610161L, 6491217L, 6068554L, + 6482141L, 7934315L, 4729348L, 1527203L, 6802722L, 5463645L, 7336597L, 3634540L, 2102524L, 7022148L, + 3670273L, 8306829L, 5652814L, 7617230L, 7797184L, 4845191L, 1963411L, 5719072L, 2263305L, 7519306L, + 1759092L, 8069599L, 7280302L, 3632848L, 7613912L, 7325988L, 4020024L, 7595855L, 794597L, 3638238L, + 231640L, 4230662L, 8267987L, 3825879L, 7871417L, 6205147L, 2214363L, 4991873L, 562530L, 1802578L, + 7958354L, 3906877L, 7108654L, 4619561L, 6706285L, 3351087L, 6203891L, 4264678L, 4278505L, 3908545L, + 599795L, 7489706L, 657271L, 2554746L, 3575805L, 820942L, 7319304L, 6020692L, 119780L, 849878L, + 724637L, 7491661L, 2093576L, 5737707L, 4931035L, 4420507L, 5981323L, 1350740L, 7908224L, 6864991L, + 8348370L, 6904709L, 4888669L, 3058893L, 1784188L, 6250175L, 4294057L, 4659759L, 2662365L, 5390342L, + 463252L, 3903319L, 2323480L, 5331632L, 5264243L, 1013829L, 2126234L, 1850354L, 2182667L, 6525985L, + 5230654L, 409978L, 1720279L, 955211L, 7233297L, 4016667L, 450409L, 564307L, 8067513L, 6476720L, + 4219890L, 1561170L, 7394314L, 6941332L, 2479452L, 280947L, 5820377L, 2454314L, 5434520L, 2959109L, + 4800041L, 4839498L, 1725002L, 4649942L, 5103290L, 8055115L, 2993063L, 5998786L, 274043L, 107429L, + 4234792L, 7634742L, 323366L, 272237L, 1731886L, 137194L, 4337674L, 3109648L, 2900029L, 7643289L, + 369444L, 363086L, 4860927L, 7116362L, 452545L, 4718555L, 6656142L, 5124676L, 1517747L, 1394078L, + 1399320L, 799918L, 3316161L, 6694825L, 6796658L, 7680207L, 2289371L, 4120100L, 1171150L, 246158L, + 3295000L, 1069257L, 873427L, 8002722L, 6416599L, 6704757L, 7145976L, 7434304L, 4076205L, 797658L, + 6999193L, 6062947L, 551516L, 4623224L, 4447056L, 7836328L, 997500L, 3205845L, 731365L, 6482851L, + 3196346L, 5894330L, 2377844L, 7193042L, 861365L, 3367215L, 565069L, 3802103L, 5475290L, 873L, + 4685627L, 8074292L, 1648318L, 1877121L, 1369130L, 1596739L, 2654535L, 6348098L, 2513501L, 3079792L, + 7259563L, 403075L, 4916636L, 3258521L, 3129647L, 6319289L, 4531465L, 4551522L, 1223823L, 3206656L, + 7417966L, 7788576L, 7580599L, 6787267L, 4456486L, 4971778L, 8321543L, 2880519L, 4728812L, 6700888L, + 3898912L, 5906771L, 5499624L, 1602332L, 8260949L, 2170834L, 7480912L, 3511663L, 601591L, 4119809L, + 2433448L, 8338374L, 7078929L, 2464823L, 5416962L, 2333297L, 3473076L, 837329L, 6514572L, 2072446L, + 4075169L, 294229L, 8363537L, 3899263L, 5632490L, 2704912L, 5183645L, 687627L, 2460312L, 1493735L, + 7635643L, 7590538L, 7583839L, 3055733L, 6356479L, 8267183L, 4876041L, 5675455L, 1883000L, 5386911L, + 989999L, 2630572L, 465745L, 4942790L, 7062132L, 2718067L, 5167819L, 5823253L, 6689251L, 7124955L, + 3427254L, 5333279L, 2689052L, 3283685L, 1057520L, 6359896L, 2005516L, 3593405L, 7612272L, 243289L, + 7034461L, 70332L, 6122993L, 680729L, 6808710L, 6199457L, 8169535L, 4381070L, 843822L, 146927L, + 6620944L, 4225632L, 12507L, 7997603L, 8311087L, 90467L, 8256779L, 7428718L, 6225873L, 4151550L, + 6453215L, 3822506L, 7100486L, 1829439L, 1986165L, 1029924L, 3729409L, 6187837L, 460959L, 6547613L, + 7598019L, 8373703L, 1596829L, 6359893L, 255986L, 1248435L, 1963628L, 2773263L, 6258075L, 6857230L, + 2334348L, 1740797L, 1480665L, 3316704L, 6693014L, 4899451L, 2998967L, 5528851L, 2630667L, 2670926L, + 6343357L, 4602911L, 3936552L, 7314279L, 703681L, 2779421L, 7082804L, 4319115L, 3765618L, 3888991L, + 2579353L, 5619761L, 1887242L, 7970099L, 6612855L, 4324685L, 2848998L, 5515250L, 5530973L, 7354889L, + 3729567L, 4881180L, 3557340L, 7147480L, 8292098L, 5175781L, 7275041L, 7369489L, 8354258L, 2998658L, + 2087016L, 1527145L, 449160L, 1560873L, 4128735L, 7412210L, 349338L, 4457616L, 925010L, 4047166L, + 434725L, 7758795L, 4569862L, 3222401L, 6404154L, 434254L, 1316209L, 407764L, 6592422L, 7219082L, + 352366L, 4296501L, 5655500L, 1700775L, 7661993L, 1264846L, 2438657L, 6845527L, 2014443L, 4882273L, + 6260144L, 3536673L, 5476968L, 4027842L, 1193569L, 7627178L, 2648113L, 1987452L, 3794085L, 6631886L, + 3335260L, 5852712L, 7956864L, 5849485L, 6601486L, 6495436L, 1481002L, 4862426L, 6945596L, 4952452L, + 5081728L, 6868412L, 5880446L, 7321741L, 1615217L, 4006995L, 1351220L, 221961L, 4656466L, 332369L, + 967190L, 4620245L, 1760652L, 8376056L, 2136619L, 4109334L, 7051277L, 2608234L, 7350214L, 1156109L, + 5279420L, 3499180L, 2808118L, 5011432L, 6781564L, 1056621L, 6367210L, 4569606L, 5348038L, 2720971L, + 5189853L, 7417195L, 7604321L, 5677471L, 4949506L, 210904L, 4266248L, 5670687L, 21526L, 3204471L, + 2052546L, 1867575L, 3533959L, 2573211L, 7179780L, 1784872L, 5717136L, 857110L, 6479009L, 4320493L, + 421701L, 3526593L, 6485993L, 389731L, 3805668L, 2203249L, 137809L, 5637428L, 4794729L, 7418983L, + 8090379L, 6837023L, 5331674L, 3329841L, 6430810L, 2886884L, 4783466L, 2034990L, 4826165L, 544750L, + 5685010L, 63007L, 8029158L, 3210931L, 1958855L, 7705422L, 5787673L, 213440L, 4100918L, 2107741L, + 7041058L, 6196762L, 3382405L, 7609648L, 2287288L, 161705L, 4455293L, 7931796L, 6458856L, 3884072L, + 2400606L, 3945645L, 107485L, 8196213L, 2992028L, 6675940L, 3728422L, 7614918L, 7025333L, 1156742L, + 3331475L, 7302738L, 5244528L, 4923739L, 6993699L, 4489879L, 5413719L, 4552070L, 1593268L, 4346480L, + 5546416L, 496866L, 3942880L, 1081474L, 6712813L, 8024470L, 4076497L, 6029592L, 6299241L, 6428601L, + 1057973L, 7685596L, 3417915L, 1227363L, 6855062L, 5921540L, 5776975L, 5257320L, 6913627L, 1705307L, + 1125856L, 3295210L, 1334624L, 2347979L, 3957985L, 2210513L, 1366490L, 77305L, 5753560L, 3660500L, + 6491441L, 1270659L, 8138372L, 1656314L, 8242591L, 4327037L, 6120707L, 7681961L, 1725162L, 1711477L, + 5606067L, 3973798L, 3354905L, 450656L, 7595515L, 4782598L, 4880556L, 3875974L, 2329222L, 500983L, + 5692602L, 7787616L, 4410562L, 2564052L, 4177316L, 1776284L, 6263584L, 6271714L, 6002446L, 7516219L, + 2231837L, 3446012L, 734405L, 6469836L, 4341293L, 3731223L, 265809L, 4153371L, 1363571L, 6590472L, + 7301290L, 7692855L, 4703928L, 8148195L, 5584681L, 7669309L, 5853894L, 1778037L, 1932722L, 5979794L, + 8068487L, 1042527L, 2083796L, 2457872L, 744686L, 1619431L, 2969385L, 7523023L, 2504043L, 7723511L, + 2838105L, 1167499L, 894106L, 7945336L, 6304921L, 518148L, 6345628L, 1683538L, 1047297L, 3519556L, + 3935618L, 5089085L, 1425343L, 5463183L, 1535993L, 3281002L, 6949880L, 2755071L, 47556L, 5168141L, + 924598L, 4673383L, 6329115L, 3243818L, 237947L, 2595869L, 7491607L, 4727475L, 113365L, 1862108L, + 1293738L, 5273813L, 6300309L, 3866495L, 6949625L, 7969864L, 7360185L, 7707671L, 6986200L, 5268137L, + 4219698L, 8092583L, 6864422L, 6549807L, 6731784L, 1268251L, 7489552L, 2806390L, 5735054L, 3797076L, + 6054888L, 6926594L, 3208219L, 4351441L, 2606196L, 1172976L, 1854594L, 5785855L, 5660782L, 5175926L, + 1548862L, 168375L, 2894499L, 4819849L, 4440582L, 3528521L, 1305835L, 7789962L, 7117899L, 3043021L, + 4932585L, 6191660L, 7948502L, 5391434L, 5980541L, 3465425L, 1359051L, 7728061L, 5042611L, 826233L, + 2779051L, 7087928L, 1269013L, 3715755L, 557035L, 6171676L, 4639468L, 2945567L, 3369848L, 5912334L, + 6067972L, 5934703L, 7784237L, 1296158L, 4010688L, 8047412L, 4636697L, 1656226L, 4068660L, 1941041L, + 6864686L, 3012280L, 2908341L, 5623025L, 633621L, 7101930L, 5546543L, 7210049L, 8301543L, 6525025L, + 2550583L, 6080341L, 7199251L, 5131620L, 782784L, 1075337L, 7740219L, 483619L, 907188L, 6312655L, + 6557786L, 7781188L, 6172487L, 178699L, 7603994L, 3534792L, 3326123L, 234931L, 7221220L, 6062054L, + 8090119L, 567546L, 6142856L, 1576547L, 1612655L, 5617245L, 6667800L, 2308707L, 1115857L, 3274833L, + 2073528L, 132901L, 2324005L, 4804064L, 5105464L, 4974129L, 5077999L, 861759L, 1716733L, 2952719L, + 7801339L, 4154498L, 4254898L, 8230623L, 4546195L, 5845310L, 2580498L, 74842L, 3355360L, 8244733L, + 1405651L, 6474217L, 6035633L, 8053969L, 2715494L, 288243L, 2501264L, 3576453L, 4842059L, 6983353L, + 2595038L, 6389833L, 2975149L, 2236380L, 955920L, 3256128L, 3692341L, 5883480L, 7922346L, 3524753L, + 5736654L, 2363858L, 2575545L, 6945727L, 2087104L, 7582785L, 5790048L, 285740L, 4289009L, 5410748L, + 6574650L, 6401683L, 7301529L, 3502611L, 1784808L, 2248808L, 6201279L, 5384505L, 721065L, 622000L, + 4805955L, 1887415L, 6239993L, 8060411L, 4432865L, 5770691L, 4742772L, 3007374L, 5192324L, 202696L, + 7618678L, 5601719L, 5365556L, 80887L, 932857L, 2947364L, 7042903L, 5795535L, 5776728L, 2567391L, + 3621180L, 1455229L, 4936218L, 2032546L, 4106653L, 4515936L, 3618398L, 1381569L, 3959875L, 6883796L, + 378733L, 901208L, 6233935L, 4527604L, 7060963L, 3106831L, 4861034L, 6256173L, 2653352L, 3293302L, + 5722349L, 4703133L, 7723870L, 7755924L, 2045534L, 1121172L, 5084644L, 1862442L, 2259584L, 3226389L, + 7752819L, 3973082L, 7862454L, 5844686L, 1779795L, 1989961L, 1430246L, 5849393L, 3938011L, 5890917L, + 4986014L, 1945416L, 5544564L, 1401568L, 4203207L, 1588204L, 1251719L, 4609818L, 6067752L, 2834984L, + 160607L, 2278729L, 581992L, 2759731L, 6930783L, 1628139L, 7547958L, 2774123L, 5209436L, 8256963L, + 2193649L, 5386308L, 7228069L, 4371025L, 519566L, 2570203L, 2457792L, 4951682L, 3218127L, 4133071L, + 3618680L, 6466821L, 3716121L, 6264833L, 5130798L, 2578712L, 2375237L, 3345702L, 6402416L, 4120875L, + 5602621L, 3417232L, 5488199L, 463282L, 3354738L, 1318510L, 587583L, 6575689L, 3978222L, 7610611L, + 7025326L, 4358702L, 1482013L, 6216186L, 3368508L, 2901994L, 2903563L, 450292L, 6179821L, 2820519L, + 6413742L, 2082076L, 2518613L, 665147L, 7545857L, 1296205L, 7224156L, 6935510L, 3651445L, 4843282L, + 3221631L, 6060833L, 7996575L, 4987722L, 2215909L, 6961544L, 6380563L, 7778533L, 4667102L, 7492245L, + 6063763L, 1364321L, 4247970L, 5521441L, 4088159L, 5628625L, 8145119L, 7843550L, 3910190L, 2871969L, + 4233992L, 64942L, 2989156L, 1562005L, 5212530L, 7313797L, 264649L, 7936953L, 2759735L, 2017844L, + 3614500L, 2377018L, 6176609L, 2140418L, 7057282L, 674325L, 7245239L, 2938254L, 5844164L, 2570279L, + 7395856L, 6019256L, 4928004L, 5785498L, 4547180L, 199379L, 260279L, 304486L, 724457L, 5627862L, + 7124492L, 3273005L, 4118327L, 6448429L, 368368L, 4759484L, 3521829L, 6315868L, 6711191L, 5652935L, + 8027069L, 2184664L, 5518609L, 2020849L, 1255984L, 1912606L, 888975L, 3333200L, 4947461L, 2931647L, + 105904L, 3002403L, 2778615L, 4308448L, 5416517L, 2483862L, 4758363L, 3329301L, 6279025L, 1442698L, + 5166376L, 7850270L, 8184799L, 6775434L, 5909670L, 4090516L, 996427L, 1797329L, 2163110L, 1501823L, + 968008L, 1494000L, 3514208L, 8321082L, 7745885L, 4853233L, 3526417L, 3061999L, 5192983L, 1992451L, + 1592427L, 4195926L, 1692155L, 2430673L, 1260211L, 3936958L, 4264686L, 2102960L, 4044844L, 7508870L, + 584547L, 1988331L, 5445585L, 5114562L, 8296642L, 7903896L, 6768698L, 8053634L, 1924195L, 227233L, + 3435031L, 6830393L, 7442738L, 5727769L, 3263218L, 7440149L, 2821058L, 8149089L, 8091672L, 5427684L, + 5559433L, 3765262L, 4612276L, 1319991L, 1132994L, 5298429L, 3231355L, 2087841L, 7450658L, 4476696L, + 4330497L, 3296981L, 6146834L, 2650908L, 5593883L, 7874795L, 4305367L, 33276L, 5761776L, 6747866L, + 1923954L, 5846156L, 5796723L, 1658563L, 351153L, 2851431L, 5395216L, 2826303L, 1681537L, 5633749L, + 1226108L, 3049743L, 7092907L, 2708267L, 2692617L, 4314757L, 868816L, 3244168L, 6632098L, 6240142L, + 6882445L, 6066744L, 7104268L, 1270969L, 456363L, 7781696L, 5130241L, 5968687L, 3359843L, 451119L, + 4572358L, 1965671L, 5525681L, 3594833L, 2845503L, 2985240L, 804678L, 1583121L, 902776L, 7346978L, + 8112915L, 7973683L, 576251L, 6462770L, 778900L, 579472L, 6456184L, 6343873L, 4624687L, 5017671L, + 4795437L, 8341103L, 3317268L, 2046093L, 2585639L, 6218192L, 6016904L, 341615L, 215338L, 4550692L, + 6842561L, 6565884L, 6153998L, 433749L, 3286539L, 3745750L, 7127148L, 5054019L, 100428L, 5700630L, + 1891232L, 6996017L, 3737194L, 1157325L, 2973077L, 8001412L, 4495824L, 867452L, 2025423L, 8138192L, + 4013640L, 3474849L, 4759653L, 5680014L, 5355751L, 5529206L, 3814810L, 7778593L, 7351189L, 4977707L, + 828464L, 7069854L, 5140078L, 79877L, 6929151L, 4751805L, 6897121L, 5935935L, 7241619L, 6523942L, + 3554843L, 4859780L, 66968L, 4136638L, 1627824L, 2083837L, 1143792L, 5600703L, 558894L, 1481085L, + 2387169L, 5130668L, 7960967L, 685894L, 3909416L, 5083992L, 2127334L, 4372092L, 631670L, 5419138L, + 1083517L, 4758620L, 5352142L, 6823895L, 5799477L, 2817895L, 2098944L, 2402309L, 2913952L, 7016937L, + 7625513L, 6072745L, 4679024L, 304775L, 7402840L, 823667L, 3930376L, 4517283L, 2062667L, 1308412L, + 7146970L, 692411L, 4347287L, 6885765L, 8362550L, 7277723L, 20620L, 6370714L, 6021009L, 5865967L, + 7670622L, 2330183L, 8206566L, 7452892L, 7743159L, 8279146L, 473275L, 5274937L, 6832048L, 5953462L, + 1449169L, 7494555L, 2719399L, 6623481L, 6066105L, 5584172L, 2162009L, 533394L, 7680772L, 5444209L, + 796665L, 1044475L, 6820293L, 3680771L, 2357468L, 701568L, 8049427L, 6820059L, 2543892L, 6216184L, + 5541579L, 4684724L, 752985L, 7869667L, 7242829L, 3286755L, 6387743L, 5794470L, 934372L, 730289L, + 404072L, 4537987L, 5217478L, 252322L, 5257553L, 2794786L, 5087755L, 7857676L, 6615413L, 5353879L, + 7264543L, 333830L, 1022780L, 6736094L, 227552L, 7892021L, 3287473L, 3974056L, 3147249L, 308415L, + 154412L, 306522L, 3071729L, 6428681L, 6632533L, 8010144L, 1001597L, 2102973L, 6264971L, 6366182L, + 8306420L, 7481522L, 4172833L, 304180L, 7120298L, 1184784L, 6784104L, 4395804L, 5910487L, 2134619L, + 6980145L, 739781L, 5571404L, 794831L, 4711569L, 142086L, 7049102L, 1376628L, 6213423L, 5845048L, + 4334154L, 3795847L, 2737286L, 8304317L, 5550117L, 6661262L, 2321832L, 2393733L, 2824806L, 3528786L, + 3373115L, 1641518L, 7063948L, 6463790L, 1230687L, 128920L, 1764315L, 7435959L, 4159820L, 4572598L, + 8114168L, 2645348L, 275406L, 2693475L, 4920127L, 6532360L, 1885746L, 295065L, 7226092L, 996465L, + 2770199L, 6566403L, 4860059L, 4141889L, 2428688L, 7086510L, 6963528L, 8189542L, 3202054L, 5419797L, + 5948956L, 5519011L, 7745598L, 1061375L, 2122038L, 22517L, 6974048L, 5574965L, 2080165L, 7443893L, + 6849037L, 906687L, 6049399L, 7654745L, 1566113L, 8317785L, 5888871L, 1835672L, 3402752L, 6570112L, + 4128080L, 4018170L, 380860L, 6635298L, 3822672L, 4797165L, 7843031L, 2678936L, 3860831L, 6008500L, + 1774056L, 2627328L, 4626675L, 4809959L, 2310636L, 7572460L, 629231L, 4384116L, 6873891L, 5892474L, + 7513473L, 1133184L, 2461422L, 6557767L, 5291370L, 948699L, 1461168L, 5285530L, 6622443L, 3203076L, + 6609680L, 7993293L, 3961004L, 3280513L, 7998598L, 182252L, 271522L, 1774552L, 4311837L, 5974199L, + 7664525L, 2905780L, 5706243L, 1305036L, 7131100L, 5629702L, 7484581L, 6819522L, 3379830L, 629037L, + 1707459L, 715153L, 8129170L, 896454L, 4500442L, 4254891L, 8175701L, 4958198L, 6767653L, 2124841L, + 5141993L, 5410745L, 5064874L, 4062593L, 6211321L, 6685783L, 6682536L, 5192259L, 6124503L, 3117943L, + 5886069L, 6322851L, 1313947L, 5933062L, 7848139L, 3753808L, 507108L, 2004752L, 4646653L, 342535L, + 416776L, 43685L, 515097L, 1539332L, 6124506L, 4354560L, 972555L, 3572449L, 1898516L, 7175395L, + 1430883L, 3476990L, 6050698L, 4661949L, 7724977L, 8247183L, 5155706L, 5625838L, 5616863L, 5256355L, + 1110468L, 3755690L, 7470692L, 8118573L, 6780808L, 6514005L, 6357307L, 7999657L, 6956048L, 6815024L, + 745515L, 1888028L, 2064976L, 3978943L, 2296540L, 7075760L, 3690053L, 5435802L, 5150419L, 4527705L, + 5812622L, 151998L, 299658L, 4768076L, 5770210L, 252462L, 5792511L, 4541652L, 5183522L, 2716337L, + 7986518L, 6918256L, 4660408L, 6306242L, 4364027L, 8365963L, 4608657L, 1460675L, 5859293L, 3568439L, + 2203304L, 1273219L, 7846150L, 3913992L, 5712229L, 6337772L, 4654706L, 2048181L, 4824649L, 4681956L, + 2425290L, 7952631L, 148159L, 3071908L, 4946891L, 3275122L, 1684844L, 7106776L, 388881L, 3767459L, + 6418130L, 6656505L, 5991045L, 4843340L, 6396099L, 5949111L, 3144796L, 3122805L, 5601492L, 6293814L, + 1722881L, 4686971L, 4613625L, 3808086L, 1063594L, 8242103L, 2579648L, 1960912L, 4975366L, 3849533L, + 3323411L, 6757686L, 6839591L, 7436892L, 2035856L, 7785651L, 7925435L, 5646154L, 1629424L, 503460L, + 121737L, 3459067L, 3137072L, 596967L, 4595314L, 7809495L, 7390715L, 7763369L, 7490873L, 5028176L, + 7282185L, 3887572L, 1604308L, 158101L, 164812L, 1265614L, 4867244L, 2401952L, 4422501L, 6685855L, + 3950856L, 5677501L, 7641769L, 4754674L, 6691662L, 1575593L, 1655851L, 2313055L, 7034595L, 1586479L, + 5600138L, 5521034L, 2168304L, 3665483L, 6292474L, 6272988L, 1991439L, 5867270L, 5425569L, 4336597L, + 2808203L, 6706921L, 4659525L, 1017697L, 2471642L, 268960L, 92578L, 590316L, 3993229L, 3767732L, + 8374208L, 3186251L, 1459942L, 4891813L, 6302533L, 2434007L, 4419113L, 425812L, 702776L, 5427585L, + 1916138L, 8264459L, 5538736L, 6643872L, 7992054L, 2969591L, 7598429L, 6210056L, 4116750L, 2866822L, + 4770914L, 823881L, 2143625L, 7493818L, 8338291L, 3798900L, 5706202L, 7395178L, 611644L, 1354946L, + 2813718L, 4277797L, 1881173L, 8346208L, 7960525L, 5406902L, 2299911L, 8373628L, 1153187L, 3844401L, + 653767L, 3125005L, 2213846L, 5766086L, 6947888L, 4859822L, 3186647L, 7169373L, 2104009L, 368114L, + 5128913L, 6217495L, 68027L, 2722406L, 5001237L, 6827816L, 7992672L, 5961266L, 8135242L, 2499902L, + 1555033L, 2858078L, 3209046L, 1972023L, 3636086L, 4584048L, 7261371L, 2942743L, 6873859L, 2744824L, + 2649383L, 3893841L, 2286191L, 3634901L, 4181892L, 5135905L, 6764194L, 1997024L, 6354640L, 3818329L, + 2290676L, 1546240L, 6070287L, 3339031L, 8034366L, 4158298L, 5513115L, 7789637L, 6151253L, 1225987L, + 6097737L, 1381304L, 3612407L, 3799415L, 7882753L, 4789390L, 23532L, 1535896L, 485369L, 6562970L, + 2402480L, 4966917L, 7578210L, 1407381L, 1912047L, 7711581L, 1415265L, 5680856L, 5772660L, 3721005L, + 6345496L, 1420698L, 4537158L, 6704219L, 737919L, 3203438L, 2474042L, 5273032L, 1768687L, 2589112L, + 8116152L, 4363281L, 5364339L, 1856038L, 4306366L, 3025332L, 4275044L, 4143580L, 8151417L, 3271424L, + 985000L, 7629559L, 1537266L, 964605L, 218172L, 2140961L, 5909831L, 8334736L, 1841442L, 449545L, + 4605190L, 942359L, 844883L, 3866961L, 395703L, 1492855L, 4988341L, 8235259L, 3041620L, 2905409L, + 6027564L, 7362012L, 5415769L, 6857158L, 1613230L, 7697168L, 5819262L, 6103326L, 1440121L, 1198717L, + 2272367L, 2042737L, 3714364L, 7095081L, 1428973L, 10414L, 3424537L, 4796308L, 5308727L, 927278L, + 5370920L, 6522261L, 742878L, 4247871L, 2957213L, 1436666L, 556161L, 7047364L, 1070595L, 5504647L, + 4807595L, 6190459L, 710009L, 7280899L, 4431988L, 11439L, 5531703L, 8139416L, 2288035L, 3091587L, + 2862079L, 8352355L, 5353900L, 3506585L, 1872295L, 5964283L, 5292678L, 6849429L, 5877886L, 6510664L, + 2257718L, 1193126L, 7940861L, 2350292L, 4635125L, 3148376L, 7196907L, 4458458L, 7806844L, 3867804L, + 5158123L, 4849793L, 3399418L, 5730133L, 6360033L, 2154218L, 3804500L, 1678058L, 3815490L, 453727L, + 2004723L, 3711397L, 5321448L, 4611150L, 3346908L, 2716315L, 193577L, 6901764L, 2717027L, 2027653L, + 6185369L, 5701485L, 5249704L, 8213803L, 1724749L, 6366568L, 3542606L, 2929158L, 1647165L, 3278736L, + 494834L, 7483150L, 8196749L, 5610156L, 4696788L, 1165962L, 5712001L, 696599L, 5936770L, 1989113L, + 4658300L, 4914845L, 3937382L, 2981440L, 7264567L, 4310152L, 7399428L, 6481935L, 7330916L, 7618570L, + 3441319L, 7427665L, 8130296L, 8185916L, 2511248L, 6222730L, 2529509L, 8170797L, 1568404L, 6861934L, + 5850568L, 4711704L, 6710130L, 3240973L, 5669773L, 7343205L, 8380090L, 3675340L, 7981124L, 7862666L, + 1913995L, 4105334L, 2246347L, 729439L, 4331367L, 7278556L, 1727669L, 2864516L, 5217155L, 5889355L, + 1548756L, 722801L, 3862717L, 4909894L, 3969093L, 4160118L, 59346L, 5379745L, 646226L, 4739047L, + 4107886L, 2877024L, 4283060L, 1756068L, 6913125L, 7572365L, 1063726L, 4615792L, 6617767L, 7743293L, + 7271702L, 7919705L, 4359901L, 3469053L, 2345704L, 3609642L, 7749770L, 2166009L, 2280013L, 7343085L, + 4115490L, 7299068L, 2740989L, 6059693L, 3872922L, 4681347L, 7856372L, 1320000L, 5704439L, 4395902L, + 1032129L, 4759050L, 3733772L, 7971235L, 2666371L, 1774621L, 5694589L, 1796887L, 3333881L, 304123L, + 5009801L, 5971820L, 5630929L, 240256L, 5823743L, 4886816L, 4565997L, 6235030L, 4865393L, 8071067L, + 3855803L, 2563467L, 1156577L, 8366767L, 1075808L, 2416718L, 6204685L, 7024843L, 7391941L, 6551054L, + 4386882L, 1572173L, 6173171L, 5865054L, 6980282L, 8107601L, 5447842L, 454429L, 4831403L, 5058676L, + 4096693L, 7930033L, 2554877L, 3801877L, 5209953L, 3109877L, 5429180L, 7138888L, 1135000L, 2247071L, + 6368429L, 8164058L, 3987231L, 2351773L, 2448718L, 2234728L, 6751812L, 3374345L, 4718444L, 7979415L, + 1996567L, 6869415L, 3730999L, 4203844L, 4339275L, 4881245L, 2480144L, 5199039L, 5229959L, 3502600L, + 6486995L, 8045419L, 6970101L, 6183011L, 6259316L, 3622307L, 624857L, 6349587L, 2657935L, 5660925L, + 2661454L, 1796957L, 6119840L, 5148347L, 5873096L, 3101269L, 4457447L, 5909114L, 1757063L, 2803137L, + 1665828L, 2713414L, 5892097L, 97941L, 1726136L, 5016177L, 7558873L, 6998084L, 4009103L, 6210740L, + 2745853L, 2036016L, 5240151L, 3401108L, 5529952L, 5883352L, 5495870L, 6471261L, 3253927L, 7281904L, + 3254711L, 273125L, 4955941L, 1296051L, 1934984L, 3084202L, 6339729L, 3311037L, 7350538L, 2508895L, + 3345639L, 1647530L, 2577135L, 2103515L, 4423453L, 6703955L, 7881181L, 2854683L, 1172626L, 718316L, + 7592000L, 6232361L, 2914720L, 2620595L, 3590941L, 4073221L, 5381083L, 4756868L, 74109L, 7680428L, + 8076651L, 4832057L, 5410762L, 3525183L, 1817521L, 534232L, 672703L, 5475618L, 379244L, 3837693L, + 6434078L, 326661L, 7442174L, 2665963L, 7028344L, 2125831L, 5767888L, 1286450L, 3155184L, 2437228L, + 4088108L, 107794L, 5242895L, 2653067L, 3180149L, 1559567L, 6485591L, 4635404L, 4361482L, 5380158L, + 5711757L, 4172150L, 4288335L, 7474974L, 940268L, 4124787L, 6520711L, 2389136L, 5198585L, 2832492L, + 2895598L, 5565622L, 289293L, 6294382L, 5866393L, 824307L, 8227379L, 4304100L, 1884436L, 4336055L, + 1908720L, 1450700L, 7025251L, 6706247L, 601086L, 3561703L, 6047052L, 5435441L, 2248942L, 3658344L, + 4612883L, 744519L, 5999440L, 7622104L, 5576890L, 3478974L, 6685753L, 5717847L, 2430670L, 7708148L, + 2398024L, 7553615L, 4518345L, 3093622L, 8277769L, 4944657L, 873965L, 1834917L, 134742L, 7718601L, + 4480056L, 2393343L, 1684491L, 7752977L, 2511255L, 3983609L, 5177075L, 6607L, 4604761L, 3139454L, + 5680957L, 7033355L, 5826758L, 522432L, 2989677L, 5365371L, 2646939L, 7207575L, 3158288L, 8103021L, + 2343750L, 3595085L, 4813446L, 2901558L, 7892973L, 1042314L, 7889048L, 6928554L, 7417963L, 1301711L, + 2884604L, 3234288L, 1252971L, 6303951L, 3574238L, 2353365L, 226180L, 4270933L, 6482011L, 925497L, + 6250655L, 5475108L, 2752063L, 3684397L, 6186936L, 1742367L, 4415901L, 4237219L, 4200256L, 961098L, + 3462464L, 6235105L, 1076880L, 1012888L, 1296055L, 2257605L, 7534438L, 3232620L, 1644390L, 6478393L, + 6389951L, 3906086L, 2731865L, 1165522L, 4890281L, 3098956L, 3494762L, 5737200L, 4134240L, 6055619L, + 7136718L, 7353062L, 4155492L, 3408811L, 7283227L, 105746L, 3810000L, 2076537L, 1691574L, 1450400L, + 1287270L, 7997699L, 6955655L, 3992477L, 4123289L, 6071380L, 8034130L, 798051L, 4028313L, 5867617L, + 8038760L, 1916532L, 2857167L, 373072L, 5508771L, 784463L, 46999L, 7957114L, 7304424L, 6928119L, + 2634165L, 6202042L, 6481452L, 3741283L, 8177836L, 1826628L, 6489794L, 7600555L, 7249719L, 4782687L, + 767131L, 881934L, 5716438L, 7132604L, 5696533L, 3717853L, 7153868L, 6456368L, 3378591L, 1592921L, + 2467210L, 5559996L, 5751455L, 6143742L, 1806836L, 4507422L, 4736014L, 7229673L, 7282416L, 8159296L, + 7028365L, 803132L, 7498286L, 6608861L, 6778225L, 1146447L, 2029226L, 802240L, 3646164L, 1113957L, + 5958875L, 505390L, 684362L, 2697260L, 2087641L, 7268987L, 4796342L, 4336786L, 3463831L, 1272207L, + 4361581L, 2648276L, 4263304L, 6828212L, 4921601L, 3207530L, 810610L, 3235814L, 3050494L, 371729L, + 8221707L, 3456805L, 5998791L, 5236245L, 6127930L, 7459532L, 5227453L, 8290622L, 2416014L, 5809589L, + 6832977L, 2813697L, 5579721L, 7816589L, 4456442L, 3799936L, 1052851L, 7950168L, 5203523L, 2187046L, + 6479874L, 1152916L, 713652L, 7481916L, 5249544L, 6679453L, 6826844L, 8015019L, 6144499L, 7822100L, + 3126776L, 3540558L, 4288713L, 1246238L, 5003799L, 3965550L, 7202196L, 3587945L, 4605683L, 521783L, + 1665308L, 669472L, 5156792L, 2627149L, 2629945L, 884014L, 6834699L, 1286959L, 553018L, 2358502L, + 4797099L, 1772391L, 5796663L, 6809145L, 7733777L, 4578000L, 5290312L, 5295682L, 1416288L, 2455229L, + 3753523L, 7822790L, 5926069L, 2178206L, 2410639L, 4470903L, 5930625L, 4004737L, 5896383L, 6907025L, + 6923733L, 7700582L, 2236514L, 1502075L, 5351996L, 8066896L, 5955576L, 4929395L, 2070727L, 2528191L, + 5272782L, 3385414L, 2740443L, 6489438L, 7825776L, 6501704L, 361964L, 7112609L, 2754712L, 5415022L, + 1314406L, 5511136L, 7475329L, 8134899L, 355427L, 4960456L, 2833527L, 5683761L, 6473395L, 3220106L, + 8062901L, 4979410L, 1668712L, 4332278L, 3549783L, 6188211L, 7136251L, 182655L, 1137743L, 3949646L, + 2415458L, 4161647L, 4679954L, 139118L, 6457497L, 4248890L, 5233656L, 8208620L, 4793313L, 3398514L, + 8118691L, 4780753L, 2812911L, 7796383L, 2834555L, 7445318L, 1672734L, 6306364L, 6325681L, 4650310L, + 5051013L, 5391937L, 5371513L, 703520L, 6696703L, 3053175L, 8022489L, 4289477L, 5534753L, 4236232L, + 7015972L, 6198296L, 397063L, 378546L, 5309607L, 2729694L, 4198088L, 1163325L, 1134149L, 3900088L, + 4470871L, 7792106L, 1288614L, 2516763L, 731409L, 8199677L, 2537592L, 6823651L, 6848982L, 8359573L, + 6907364L, 4560105L, 4172490L, 4748279L, 8217580L, 6552198L, 4805499L, 7750297L, 7613498L, 5382310L, + 457418L, 1169670L, 5560555L, 120699L, 884663L, 4663195L, 1653860L, 6533140L, 2841000L, 411873L, + 326664L, 852057L, 7996100L, 8113173L, 4539665L, 5770429L, 1511584L, 3599431L, 1892030L, 1334885L, + 3517980L, 4308703L, 3936067L, 7318765L, 6786904L, 7129356L, 1132787L, 7490061L, 2993035L, 3738551L, + 7220606L, 334756L, 2688922L, 3436241L, 7292217L, 217278L, 6585229L, 2821154L, 2958334L, 6396383L, + 8064956L, 2857361L, 1344997L, 401841L, 3284172L, 340195L, 5037274L, 5544L, 6457382L, 1954662L, + 770824L, 34682L, 7552089L, 4912272L, 7801096L, 2629310L, 8242172L, 15677L, 875085L, 4583993L, + 4602281L, 3329376L, 1715089L, 4939303L, 7804151L, 6688760L, 2048511L, 2112088L, 603721L, 6805307L, + 6560804L, 3163345L, 3546888L, 7967426L, 7277919L, 5701500L, 6081294L, 269214L, 726192L, 2947800L, + 66101L, 3361073L, 1740088L, 1342461L, 3353647L, 1153417L, 3916185L, 4864231L, 3223093L, 696949L, + 7138564L, 7173897L, 5610918L, 1562460L, 2336564L, 5696604L, 831624L, 4356948L, 1144464L, 2523148L, + 4124589L, 2226878L, 2181396L, 6364960L, 8124917L, 4485769L, 5426017L, 560289L, 7270184L, 5167602L, + 5492323L, 2025461L, 1323968L, 6106956L, 4121427L, 5578034L, 5429080L, 7858164L, 700019L, 4858943L, + 7034806L, 8014596L, 2194630L, 4954714L, 6155991L, 5165211L, 7251315L, 5058401L, 2752809L, 8238221L, + 4059808L, 5101217L, 3650588L, 6297626L, 2396335L, 3924666L, 308724L, 1489828L, 5061936L, 716007L, + 8025055L, 7591020L, 3390477L, 5263286L, 2098018L, 3464348L, 2149010L, 1348727L, 1509966L, 927852L, + 6439826L, 7365276L, 798880L, 1028634L, 2368293L, 1474016L, 6945363L, 1486159L, 5134749L, 1531007L, + 2769595L, 76500L, 6093993L, 2288993L, 1246214L, 6707716L, 6847798L, 1193914L, 7831960L, 2535232L, + 2652057L, 2109830L, 3844655L, 3959445L, 5932541L, 8346818L, 8271654L, 7460377L, 3413119L, 5187031L, + 4395981L, 5248081L, 5696952L, 112068L, 5708110L, 7105150L, 8094827L, 1003486L, 7237997L, 7213562L, + 2795532L, 7737017L, 5374221L, 7625524L, 1200524L, 5117527L, 8013712L, 2209505L, 1883564L, 6988117L, + 3025038L, 7299982L, 363483L, 1730004L, 6144046L, 7930166L, 1692826L, 612875L, 4177386L, 1583646L, + 7082548L, 1580656L, 1059396L, 4692690L, 4900017L, 4990974L, 1544998L, 6332772L, 1921946L, 3028988L, + 1593386L, 4780305L, 3003634L, 6519513L, 1423166L, 427794L, 2033718L, 7772505L, 6032168L, 7285965L, + 2096174L, 4687636L, 7606929L, 3624146L, 6425420L, 6425858L, 7772672L, 3820719L, 7060097L, 6220815L, + 7455078L, 4830367L, 63999L, 985193L, 3333737L, 3780168L, 3403007L, 1268565L, 5085714L, 6067522L, + 4631908L, 1124853L, 6348760L, 7309547L, 3160464L, 1988488L, 7748317L, 1546326L, 4860132L, 6644318L, + 7837051L, 78982L, 5316040L, 7778228L, 2219805L, 4835133L, 4284780L, 7858163L, 2277991L, 7982004L, + 2702243L, 3682599L, 3613030L, 7825377L, 1225870L, 6042700L, 4891756L, 5324392L, 6384101L, 5407109L, + 5930007L, 4070382L, 7464415L, 1452807L, 3880718L, 814059L, 327198L, 536719L, 4591875L, 5889853L, + 40807L, 7427131L, 1779605L, 67848L, 6553133L, 6009629L, 913206L, 607925L, 4152968L, 2213162L, + 7466117L, 6762748L, 5470017L, 7439302L, 8303874L, 2673682L, 3981747L, 1795893L, 7738477L, 6624689L, + 6800958L, 989407L, 4243326L, 4967756L, 5814918L, 1003219L, 4897906L, 1824429L, 5435898L, 987481L, + 3616575L, 4418648L, 7239221L, 7535816L, 6453596L, 1391971L, 4038830L, 2594290L, 5511693L, 4555674L, + 3899597L, 2950245L, 1989493L, 6613559L, 6142183L, 2267891L, 523804L, 1801184L, 7425528L, 4184888L, + 509248L, 7651711L, 2146077L, 8242809L, 1019182L, 3218556L, 1114214L, 3363041L, 3726762L, 152429L, + 6465154L, 4434866L, 2117868L, 207910L, 5774906L, 1882267L, 7105982L, 7485566L, 2222906L, 1430613L, + 4875728L, 8332046L, 6183062L, 4310655L, 3871094L, 3507682L, 5779875L, 1201690L, 5459724L, 7829969L, + 3147957L, 8373145L, 7920930L, 2702116L, 6897761L, 579421L, 2456161L, 2749554L, 7477155L, 3996329L, + 3301938L, 4442051L, 4590649L, 8035417L, 996071L, 5084697L, 6604278L, 1758681L, 2447266L, 7930816L, + 4298509L, 3215764L, 4035279L, 3925818L, 2001817L, 43848L, 1124709L, 7371835L, 5063940L, 6488164L, + 4702200L, 5088222L, 2336386L, 7514957L, 5233296L, 6047747L, 7912155L, 3609139L, 4117929L, 2333635L, + 7913838L, 7877668L, 5061249L, 5571379L, 4523761L, 506604L, 2725984L, 361863L, 2634409L, 1067598L, + 4468414L, 4823035L, 1247730L, 7073054L, 6842079L, 6125325L, 1475726L, 434484L, 3939432L, 6166156L, + 932064L, 15397L, 2330459L, 1896741L, 4302116L, 3310613L, 1293417L, 5076324L, 759709L, 1150390L, + 4375130L, 4979182L, 3496372L, 315235L, 6656940L, 155771L, 7306624L, 536147L, 805571L, 759149L, + 7534650L, 3631212L, 585621L, 737378L, 5933325L, 4507966L, 6527318L, 2751265L, 3265369L, 7876072L, + 686463L, 4471841L, 7773953L, 8363150L, 650914L, 61765L, 7238800L, 4024433L, 5957304L, 1199758L, + 166310L, 5181839L, 5379697L, 3127976L, 8013572L, 683368L, 7654235L, 925723L, 1129503L, 7188581L, + 7370623L, 9733L, 7595520L, 1528485L, 4376L, 4711720L, 6472177L, 937353L, 1411863L, 7491065L, + 5366520L, 6028857L, 7030239L, 667644L, 3853452L, 2490533L, 6479888L, 5403905L, 8109684L, 5707696L, + 1882929L, 3125407L, 480552L, 1086018L, 534620L, 4037848L, 6652425L, 5644896L, 459269L, 7206793L, + 4261353L, 8120184L, 3637733L, 4892562L, 1467082L, 3536211L, 5661972L, 6609241L, 5479259L, 6202003L, + 5472135L, 7117689L, 4498178L, 5591863L, 7387030L, 2992L, 1239396L, 2731450L, 3244621L, 6302158L, + 3076673L, 6192159L, 1359208L, 2824364L, 3563637L, 148534L, 8335671L, 4067656L, 1732411L, 7850781L, + 35256L, 5317880L, 1698887L, 5567380L, 7508463L, 5881991L, 2857202L, 4537731L, 7689606L, 1904755L, + 508997L, 5670544L, 6530298L, 4347992L, 5648143L, 4790582L, 4274917L, 864975L, 7275339L, 4335155L, + 3264917L, 247251L, 6437814L, 438484L, 2754985L, 4716865L, 7191494L, 368794L, 2796150L, 3521481L, + 438443L, 562869L, 5693082L, 3868861L, 5637062L, 623085L, 1073690L, 959305L, 1911120L, 666686L, + 3699098L, 2741249L, 4048880L, 5796420L, 1759952L, 1076911L, 2399559L, 2387809L, 137260L, 5331603L, + 968318L, 432740L, 1974925L, 8191629L, 6841116L, 4750445L, 7942914L, 7090126L, 4096633L, 5495993L, + 3773771L, 1873426L, 2020069L, 4541014L, 5206686L, 7394593L, 3157901L, 5668218L, 6810931L, 3308863L, + 3636560L, 761601L, 2976480L, 6377078L, 1208346L, 7631355L, 4536904L, 870757L, 3887309L, 3016035L, + 39264L, 3341129L, 3033086L, 8260819L, 6905518L, 1254879L, 4161021L, 6569771L, 2230374L, 5012834L, + 4305601L, 633452L, 5574924L, 5858729L, 2375656L, 6750483L, 8286929L, 1427446L, 5982334L, 6610642L, + 2726170L, 878566L, 8271426L, 2930878L, 1685914L, 3708306L, 5441413L, 1151562L, 5184395L, 4868461L, + 147724L, 6345066L, 4368900L, 4895681L, 7384626L, 4792360L, 2518767L, 5034304L, 142563L, 2811205L, + 2677132L, 4731468L, 5167767L, 42912L, 1199419L, 7121781L, 7634829L, 7168392L, 7047500L, 1560283L, + 7743081L, 5181165L, 3245469L, 2614619L, 779481L, 6290454L, 513076L, 801845L, 6726161L, 5372522L, + 3544261L, 579523L, 7112931L, 7222900L, 1460199L, 1765840L, 6185367L, 4011843L, 3693481L, 4696664L, + 2991842L, 6451041L, 6555373L, 7761203L, 4233773L, 1815071L, 7212148L, 7198314L, 7630583L, 274047L, + 5452659L, 6844164L, 6618564L, 3218206L, 3165881L, 701427L, 2767036L, 4079059L, 2262202L, 1310489L, + 7620954L, 3964742L, 1800622L, 4570708L, 3997797L, 7412047L, 2767618L, 3140447L, 4795203L, 12887L, + 5241820L, 6192010L, 431750L, 7890275L, 5350058L, 698299L, 2649345L, 563822L, 7540127L, 2480411L, + 7978239L, 7462075L, 752372L, 2027665L, 2697081L, 3724935L, 7801501L, 5212092L, 7040101L, 3867529L, + 1438761L, 3146907L, 6746581L, 2672525L, 991124L, 3242675L, 5066086L, 8306137L, 3567895L, 4881137L, + 6690750L, 5271451L, 3977272L, 7849379L, 2411650L, 5405653L, 2816941L, 3869153L, 8121903L, 5992779L, + 1417491L, 3922389L, 882501L, 4698363L, 5215047L, 1401539L, 5471984L, 4584434L, 4902238L, 3253911L, + 3485905L, 4013234L, 977577L, 4127749L, 6921326L, 4255366L, 2175572L, 1666474L, 2118682L, 3053886L, + 7151132L, 3378134L, 4263268L, 1030244L, 5313087L, 5593757L, 2853157L, 6027058L, 7805496L, 2756995L, + 7759149L, 6262362L, 2859078L, 5792389L, 3896123L, 1596938L, 6943606L, 1805103L, 6531219L, 3120792L, + 2481276L, 5484199L, 1464120L, 5542741L, 5513298L, 797136L, 5755522L, 149271L, 795283L, 3555621L, + 3682625L, 7996042L, 3505251L, 3294128L, 515102L, 1422947L, 7627012L, 8100226L, 1308044L, 1111389L, + 843508L, 4436848L, 3572288L, 5820548L, 3140621L, 3177199L, 1792627L, 7193491L, 80675L, 2582638L, + 6907213L, 4610404L, 4307697L, 3189875L, 3128763L, 1752499L, 3246713L, 802243L, 2510910L, 7648191L, + 5395111L, 4433322L, 3854759L, 1058015L, 7182534L, 2207706L, 3713629L, 8142967L, 3310665L, 4075134L, + 2579157L, 273291L, 4463210L, 4464003L, 3867998L, 3170633L, 8327010L, 5872341L, 4539558L, 5874786L, + 7043026L, 7517854L, 1754967L, 5837586L, 3119389L, 8225363L, 6168127L, 7879327L, 3686715L, 1825127L, + 893832L, 2437413L, 893342L, 1831206L, 1624624L, 4851589L, 3189579L, 6373849L, 3312007L, 2423837L, + 5073255L, 4087158L, 403286L, 7602959L, 4378932L, 1600510L, 3000519L, 4429468L, 566804L, 7107627L, + 872619L, 2397060L, 6212610L, 7194852L, 4972823L, 2431003L, 6742555L, 7701084L, 684392L, 3982809L, + 6796314L, 5455435L, 6235187L, 5156251L, 971339L, 2063604L, 3053525L, 4369412L, 201460L, 1895206L, + 7367289L, 2853245L, 7054507L, 7699716L, 5917713L, 7967787L, 7395666L, 5617800L, 5092404L, 7885198L, + 4684100L, 6745454L, 2320908L, 1126223L, 1026957L, 5548091L, 7080285L, 6962842L, 658710L, 3580954L, + 2589818L, 5063979L, 3948358L, 7103437L, 4430121L, 1610064L, 7123452L, 2498108L, 4803376L, 1022711L, + 8378516L, 5928435L, 1968006L, 2836987L, 7723905L, 5889584L, 7385910L, 6095232L, 3199619L, 3693314L, + 2466087L, 1191512L, 987922L, 8189341L, 3014099L, 5186477L, 6699254L, 1641655L, 6411706L, 7661736L, + 2509121L, 4683559L, 1526705L, 7788905L, 500452L, 5077023L, 8093713L, 6732327L, 4897472L, 7496555L, + 4362577L, 4997349L, 5772098L, 1756732L, 904681L, 6146235L, 7244076L, 3813153L, 2202962L, 4451596L, + 3183782L, 4634653L, 575617L, 4472653L, 8221542L, 4855063L, 5870674L, 5281265L, 5324450L, 323677L, + 7754802L, 1115070L, 948978L, 4467314L, 4691103L, 5723575L, 7623510L, 1125891L, 8208682L, 1903909L, + 867464L, 3361001L, 2466979L, 622839L, 7615865L, 6157991L, 4742380L, 22065L, 5520574L, 1833602L, + 5452999L, 798795L, 4966537L, 569250L, 5379322L, 5860312L, 1071099L, 398450L, 845836L, 7455737L, + 1762899L, 2643606L, 7194866L, 3739399L, 730864L, 1963409L, 5305447L, 7662861L, 4746096L, 7710898L, + 4455385L, 550117L, 5016064L, 1110893L, 5226460L, 888191L, 760781L, 5877047L, 5178115L, 1756641L, + 628473L, 4316023L, 5620362L, 419584L, 4009689L, 6103523L, 3476070L, 2505829L, 2597218L, 6122157L, + 1436853L, 1899771L, 859855L, 5111368L, 254752L, 4398154L, 1136354L, 3407315L, 4819255L, 3010179L, + 6405836L, 7768949L, 875784L, 531334L, 2949085L, 4853060L, 7343552L, 1104861L, 256919L, 414511L, + 759701L, 6170117L, 4695286L, 6483501L, 3517950L, 3443961L, 7131921L, 794266L, 3749850L, 5872433L, + 5034476L, 856483L, 277612L, 999547L, 990902L, 5073762L, 2253085L, 2850192L, 1033815L, 5140067L, + 4408047L, 4185578L, 6631704L, 5925207L, 7259597L, 8029946L, 3592729L, 694268L, 683264L, 181864L, + 2124097L, 767705L, 5806391L, 1429992L, 7838939L, 1858939L, 5145279L, 1645309L, 3862129L, 7943596L, + 3890841L, 3869820L, 4660637L, 4880588L, 6412238L, 2390558L, 1918217L, 7360356L, 5965975L, 8254595L, + 7183822L, 5201990L, 4018930L, 6668666L, 936779L, 6107859L, 1847875L, 1425672L, 1256362L, 1355513L, + 639363L, 4423640L, 1712962L, 5240643L, 751406L, 149621L, 4961759L, 1153064L, 1440407L, 4457114L, + 4660339L, 7343677L, 1622406L, 2859287L, 4942625L, 5021824L, 894489L, 1784813L, 4616296L, 5180447L, + 2328029L, 3910536L, 7984474L, 6048069L, 4078194L, 2687691L, 4579090L, 4540489L, 5061553L, 8276214L, + 5610234L, 261033L, 7187604L, 1885511L, 5008813L, 402264L, 4257050L, 6137744L, 2776712L, 1751877L, + 2587698L, 3600820L, 2606455L, 169035L, 827537L, 3854850L, 2166374L, 2347148L, 4731159L, 8108735L, + 7167122L, 7248075L, 5560646L, 7845480L, 6035179L, 2721689L, 2420379L, 972257L, 1182777L, 4175153L, + 4616781L, 3464236L, 1509363L, 6883177L, 4484387L, 6298453L, 7630505L, 3215804L, 7913294L, 3602316L, + 7387967L, 1928398L, 5766675L, 3452708L, 7470230L, 1967203L, 360205L, 3565566L, 8229727L, 5160699L, + 2403622L, 3302840L, 5888676L, 2217279L, 1642952L, 2167918L, 279526L, 4971659L, 2241820L, 3202370L, + 2484188L, 5718450L, 628883L, 8140249L, 4870223L, 3355313L, 7885107L, 3481260L, 4179090L, 4251605L, + 6635639L, 6847626L, 5516169L, 3326837L, 3445870L, 2467900L, 3922717L, 2063343L, 6123068L, 3294369L, + 8192352L, 6456777L, 8320496L, 8307940L, 3156740L, 3095599L, 4598076L, 7927414L, 1074801L, 3401394L, + 950466L, 6649810L, 3964947L, 3739620L, 2113371L, 642026L, 1297565L, 4295583L, 4299011L, 7559726L, + 2594847L, 7791006L, 2558778L, 5729837L, 189665L, 1643591L, 1453677L, 4891457L, 6835877L, 5858219L, + 3249934L, 5952386L, 206674L, 2846181L, 35363L, 34945L, 4928948L, 7115323L, 5651701L, 2875133L, + 1007354L, 6072217L, 3878014L, 402273L, 2531344L, 6505233L, 2722947L, 4453460L, 617833L, 7964065L, + 1044534L, 7919555L, 2966485L, 3623901L, 4171867L, 6371999L, 2306162L, 6885994L, 6640322L, 2930869L, + 8331486L, 364350L, 8338902L, 4420L, 7262931L, 6807009L, 5636647L, 7346996L, 6207170L, 3458753L, + 8250095L, 2145342L, 754997L, 5139909L, 1204171L, 142415L, 7141620L, 5628741L, 5415862L, 7600349L, + 6452046L, 7920865L, 1715146L, 2007563L, 4469600L, 2098771L, 1546839L, 690565L, 2011061L, 5258298L, + 7407517L, 41346L, 2936525L, 1971922L, 2494794L, 2089069L, 5338234L, 8183140L, 690453L, 20015L, + 7354975L, 5578397L, 1763445L, 998468L, 15502L, 887031L, 4582322L, 3196187L, 4649190L, 3027109L, + 7585996L, 3988768L, 2262777L, 7962752L, 2615410L, 5044150L, 6241708L, 161230L, 1964389L, 4051563L, + 7526826L, 1641088L, 6466946L, 3906096L, 1984563L, 4098208L, 530670L, 6439382L, 1833018L, 3752780L, + 4906105L, 5737546L, 6817203L, 3366574L, 1877634L, 646267L, 2332952L, 7620838L, 8136382L, 4860622L, + 2511572L, 3138105L, 3255365L, 7105091L, 424606L, 2325270L, 8035058L, 7784392L, 5205400L, 4060818L, + 5611852L, 7557287L, 7364196L, 2374271L, 4590265L, 3769312L, 7123661L, 5498131L, 2796218L, 6575604L, + 8286519L, 1183258L, 6489288L, 1653902L, 7081302L, 3695198L, 8122182L, 3561397L, 1705987L, 4662087L, + 4727516L, 2639423L, 5123154L, 6888788L, 1049173L, 1527332L, 6529418L, 4926348L, 5163216L, 3898257L, + 6676287L, 270324L, 5607286L, 6527505L, 4925976L, 8281140L, 2543946L, 5124924L, 2396320L, 2679647L, + 4295805L, 3622496L, 8042312L, 8158482L, 4080848L, 753830L, 4609539L, 4227672L, 2479949L, 7067942L, + 570176L, 2411393L, 7109378L, 1564374L, 4736074L, 2057993L, 1120021L, 1238559L, 6554715L, 6308655L, + 1411919L, 1206773L, 517411L, 4609763L, 8205617L, 7636212L, 7345240L, 8187427L, 3986218L, 2741943L, + 4395097L, 6785281L, 403421L, 781725L, 2980543L, 5261294L, 6849156L, 2814447L, 6748885L, 1161528L, + 8143920L, 7728201L, 5644953L, 1895771L, 1247956L, 1590783L, 1534090L, 1017194L, 5336908L, 2948517L, + 3630297L, 6471797L, 3951874L, 2913754L, 1736563L, 1559559L, 7016010L, 5382789L, 34351L, 8235057L, + 625716L, 7190878L, 811620L, 4419668L, 1870155L, 3641117L, 4976571L, 7266897L, 1868363L, 7101273L, + 5938718L, 2548056L, 1504149L, 6964026L, 8185332L, 6549661L, 691353L, 937678L, 5578426L, 4962332L, + 2909800L, 6863086L, 1836095L, 7891327L, 3818567L, 7124152L, 7511614L, 3594327L, 3589923L, 4243532L, + 3131962L, 5350398L, 4923893L, 807930L, 7382322L, 508386L, 7599225L, 1703412L, 739577L, 5075873L, + 7778277L, 3257999L, 7997566L, 7515485L, 1766487L, 73088L, 4734311L, 4023311L, 7151142L, 4807060L, + 1323522L, 4395987L, 6823425L, 5286858L, 3877046L, 8269399L, 7237869L, 2668696L, 5470452L, 1213373L, + 3832964L, 3310388L, 3615375L, 3363588L, 2139249L, 3697861L, 2557606L, 2111096L, 2603657L, 3407921L, + 1751017L, 3326173L, 1590650L, 8235633L, 4523577L, 3654913L, 1308925L, 2883452L, 304936L, 1284851L, + 5529099L, 6821666L, 959884L, 580121L, 47253L, 4602223L, 6283515L, 2162194L, 4764819L, 2143318L, + 683321L, 5867405L, 6017997L, 6587905L, 7005888L, 4091848L, 4194102L, 6259215L, 7730126L, 3190726L, + 4733670L, 5540876L, 898163L, 775951L, 2818516L, 691620L, 6456451L, 7421071L, 6500929L, 214001L, + 4588498L, 2013829L, 543585L, 762453L, 1102405L, 2843680L, 1241997L, 6683742L, 7507893L, 6659305L, + 6747014L, 4032021L, 7168808L, 3160040L, 906793L, 1950981L, 1328363L, 5406908L, 1727697L, 6813032L, + 1253555L, 6021955L, 5483776L, 7749782L, 1058398L, 7984295L, 4891672L, 591789L, 2224311L, 5916961L, + 369748L, 5995941L, 1889808L, 5084438L, 1667322L, 1664004L, 7384574L, 213331L, 7638576L, 5593564L, + 5734931L, 490929L, 1089916L, 1861613L, 6634196L, 873027L, 4536030L, 7572328L, 1523669L, 245102L, + 4271092L, 7169027L, 5955345L, 5156882L, 7322972L, 1371543L, 3551701L, 1016978L, 2242338L, 8017202L, + 349880L, 5859449L, 2726005L, 7229682L, 4332492L, 7772891L, 752636L, 4150450L, 3521651L, 246775L, + 4543721L, 1208118L, 648718L, 7672422L, 8356836L, 6250057L, 36049L, 1603858L, 8142892L, 7276136L, + 4883192L, 1879787L, 308002L, 6875003L, 1428078L, 5832402L, 6472784L, 2443148L, 2801235L, 6696544L, + 4919438L, 375982L, 4552723L, 7343956L, 6069043L, 6413286L, 3070145L, 3644258L, 8183398L, 2485035L, + 6811563L, 7334102L, 3383551L, 7880715L, 4566967L, 7044112L, 787100L, 2604045L, 5423733L, 4831850L, + 7216085L, 8250260L, 2672848L, 6877911L, 8125405L, 3580896L, 7378403L, 6414688L, 52114L, 7562351L, + 8148612L, 7004268L, 1049606L, 1764423L, 4496501L, 7166638L, 7618781L, 2109652L, 4127369L, 4556341L, + 4354464L, 335870L, 7548332L, 5187552L, 522102L, 2772505L, 7242923L, 1856557L, 6792164L, 535985L, + 3150230L, 1147165L, 6763197L, 2208361L, 3500297L, 7244252L, 588704L, 5487016L, 2408765L, 2839724L, + 3046168L, 7723028L, 2255373L, 2260382L, 3005432L, 984809L, 5072913L, 772942L, 6319610L, 827479L, + 440272L, 913286L, 952876L, 120984L, 3377935L, 1689508L, 7621627L, 8229425L, 6537063L, 1023103L, + 3233908L, 1436906L, 3744249L, 5863834L, 4430546L, 7653158L, 4123360L, 1283094L, 3197043L, 7177920L, + 7605896L, 3894487L, 8355598L, 679153L, 2304822L, 7487365L, 1269344L, 7858852L, 6738316L, 6060065L, + 4743985L, 2643063L, 7077352L, 4404891L, 2916675L, 7054050L, 216298L, 489953L, 3633149L, 5043796L, + 4049788L, 706922L, 412945L, 4585402L, 5347144L, 467604L, 451418L, 5814065L, 2659707L, 5321486L, + 675531L, 6147649L, 3404445L, 5162295L, 2878517L, 7158511L, 3753160L, 1213103L, 3663494L, 4701276L, + 6002157L, 420679L, 2456766L, 4652650L, 6443057L, 961602L, 3239098L, 1817780L, 6472730L, 1458214L, + 2688410L, 1567268L, 1705496L, 7852766L, 7630692L, 411428L, 4183189L, 2444204L, 2969111L, 6396334L, + 2862106L, 8117689L, 4985629L, 7827650L, 4188442L, 3552007L, 7583011L, 4362779L, 2675025L, 3597512L, + 118588L, 4622032L, 783877L, 6471055L, 2983647L, 2689360L, 2079265L, 4141820L, 1603224L, 6825484L, + 6976170L, 4491871L, 3957865L, 5266751L, 7150595L, 5681870L, 3652608L, 7790949L, 3263493L, 4646930L, + 7729012L, 525410L, 4210526L, 439666L, 7256200L, 5765759L, 81358L, 3479288L, 8322769L, 4133409L, + 6839474L, 3041043L, 6692710L, 7024213L, 6950076L, 2011984L, 3965313L, 4736102L, 3277159L, 1801020L, + 6895905L, 3838275L, 4336690L, 7747502L, 7095216L, 7434024L, 265353L, 4068634L, 3291087L, 979156L, + 2125716L, 6021121L, 7129719L, 3640807L, 1534891L, 2792022L, 4677803L, 8011966L, 3661171L, 4179363L, + 5744784L, 4139627L, 61381L, 3132278L, 2816326L, 7162965L, 5459101L, 3749475L, 71541L, 4157435L, + 389199L, 188647L, 6916665L, 5065116L, 6871229L, 566198L, 3302755L, 5827447L, 7298845L, 109757L, + 7840921L, 7742423L, 3078537L, 5717462L, 2643601L, 9066L, 2259871L, 1650594L, 3983018L, 1075685L, + 7299617L, 1269193L, 8353641L, 5771483L, 1162209L, 4477180L, 669327L, 2173881L, 4110175L, 2999676L, + 6621458L, 8368069L, 8007312L, 4263760L, 3136938L, 4467619L, 4611388L, 7344681L, 8009315L, 3812319L, + 712715L, 6901487L, 4801020L, 2749740L, 5189984L, 2728974L, 2299523L, 3888464L, 5938785L, 1665193L, + 2323308L, 2018488L, 8162535L, 2860079L, 1149384L, 3900928L, 7936433L, 6106976L, 5511565L, 4372659L, + 6238214L, 2854903L, 4359050L, 878937L, 5793317L, 7887501L, 917312L, 2077357L, 5815648L, 1464119L, + 5254860L, 7968790L, 6164466L, 1256712L, 8300519L, 6444838L, 5436285L, 2044194L, 1490754L, 6446527L, + 2446853L, 7434438L, 6060121L, 6108097L, 8249456L, 4017385L, 553356L, 5283290L, 5689022L, 195076L, + 3092033L, 4111141L, 446646L, 375720L, 7994089L, 4502017L, 4184201L, 5349604L, 830270L, 1209013L, + 689836L, 6792728L, 4034151L, 2419719L, 4030805L, 3994098L, 6489337L, 2648664L, 6346091L, 511620L, + 5063919L, 4935552L, 7358009L, 3800732L, 7510994L, 2133302L, 677246L, 1982158L, 6175558L, 3927320L, + 3587929L, 5989482L, 4559078L, 2318620L, 4719249L, 3147603L, 6379260L, 2929850L, 5604368L, 135952L, + 1207396L, 6383440L, 7813856L, 5353921L, 1775370L, 2502611L, 5229959L, 543498L, 642453L, 2462222L, + 2615288L, 5542736L, 6410206L, 5831600L, 1262935L, 3198089L, 1217489L, 82855L, 857172L, 4507695L, + 7057706L, 7299645L, 6823238L, 6654008L, 6878493L, 853017L, 5673646L, 4908670L, 5910019L, 7396955L, + 5518334L, 6201864L, 4757725L, 6221827L, 639389L, 4046123L, 7496896L, 5775900L, 2255130L, 7038664L, + 7306472L, 3412605L, 1221333L, 919517L, 4814178L, 3124004L, 3631918L, 7105390L, 443684L, 1204384L, + 491352L, 6017736L, 2986263L, 5958025L, 915468L, 6991348L, 536345L, 1575248L, 4006140L, 4090620L, + 4822555L, 321570L, 4084474L, 1327762L, 664436L, 7355719L, 7862469L, 813519L, 363048L, 4769249L, + 4404872L, 3633924L, 1687175L, 5477690L, 7954087L, 5643729L, 4564771L, 4782606L, 5226380L, 2071794L, + 2511157L, 6465871L, 2937501L, 7114249L, 4787748L, 1791889L, 6022717L, 2488776L, 6675916L, 276839L, + 669523L, 710672L, 8172593L, 247942L, 6997536L, 712563L, 1293012L, 7720455L, 175044L, 1104018L, + 2832921L, 44852L, 2803784L, 1044987L, 6543913L, 2991358L, 7345655L, 3464606L, 532970L, 410960L, + 7418614L, 3814286L, 3591472L, 2040005L, 4558776L, 7403855L, 3136800L, 1652890L, 1469062L, 300927L, + 5277649L, 7265227L, 5646065L, 6491661L, 5864196L, 1183166L, 6284377L, 8369888L, 3703137L, 1771466L, + 7569096L, 979096L, 5028000L, 2853478L, 5709300L, 7597716L, 2039497L, 214133L, 173072L, 7012551L, + 7974088L, 3877549L, 2466778L, 2229099L, 808362L, 883499L, 6321673L, 1759921L, 5224863L, 7674207L, + 4737027L, 7289839L, 1405633L, 2587638L, 3833356L, 4076200L, 604450L, 4945490L, 6307796L, 5647473L, + 5021504L, 3605907L, 5715271L, 6332164L, 7126996L, 4195885L, 4565921L, 435029L, 812347L, 2717849L, + 2352173L, 3367283L, 599258L, 3306591L, 7599492L, 7157066L, 5470096L, 4509025L, 3327017L, 3250676L, + 1620634L, 2512452L, 7778193L, 4365904L, 853029L, 7859166L, 3850091L, 2830951L, 7511373L, 5544277L, + 3202022L, 1430042L, 5952473L, 5584684L, 7514830L, 273276L, 7332483L, 3321809L, 646130L, 8269478L, + 7424435L, 4824204L, 4621353L, 6690726L, 3068006L, 7244434L, 1120114L, 2226873L, 1110195L, 454572L, + 3120250L, 2436328L, 5259572L, 4173480L, 4560318L, 1482285L, 3469942L, 825889L, 5393997L, 7613583L, + 1329568L, 1168796L, 3165548L, 4989929L, 4864301L, 1128276L, 1617122L, 1732111L, 5899982L, 7819841L, + 7935208L, 5142781L, 4054553L, 3565120L, 1111634L, 8219235L, 6689023L, 3043635L, 6213724L, 2956304L, + 2614406L, 1312492L, 2338281L, 349998L, 5368895L, 7780024L, 2596564L, 4337615L, 2837417L, 7046486L, + 5809977L, 3946148L, 8300235L, 3386893L, 4082442L, 4185142L, 7047767L, 4568723L, 4194736L, 3052968L, + 3973310L, 5839875L, 7426906L, 332970L, 772241L, 6122136L, 5628708L, 1401752L, 7847868L, 5416606L, + 2305323L, 5659593L, 2590996L, 6265281L, 3765704L, 1842092L, 5248359L, 6592008L, 2865427L, 5612968L, + 2882050L, 1705856L, 5782444L, 4506751L, 7985563L, 2977051L, 5812674L, 6166962L, 3948383L, 1952190L, + 1492249L, 5014456L, 6378404L, 2986686L, 3461719L, 2859073L, 6780679L, 6576652L, 4135448L, 5936818L, + 3622902L, 298366L, 5609775L, 1713494L, 5986032L, 7501L, 3836544L, 1418971L, 7989381L, 7871102L, + 2458331L, 2865708L, 2343056L, 6326296L, 4164424L, 1661785L, 6364689L, 2240363L, 190305L, 1158616L, + 4359537L, 3164730L, 5354491L, 5259025L, 4742895L, 31693L, 653973L, 3289963L, 5156891L, 6662895L, + 5740329L, 4025346L, 6718963L, 7382799L, 3872274L, 1167273L, 4719978L, 5879052L, 1555404L, 3021089L, + 1675850L, 28028L, 103817L, 2626734L, 6547877L, 7793116L, 4475191L, 4886049L, 2012032L, 7305544L, + 6525262L, 4960810L, 5951535L, 1325527L, 8306856L, 3099307L, 4234127L, 2971524L, 8006992L, 5042257L, + 3216864L, 2542110L, 3204102L, 4698205L, 6687153L, 7824221L, 6956199L, 4209167L, 3339415L, 5536888L, + 5600573L, 8303363L, 783932L, 1817655L, 344191L, 1621753L, 416091L, 2739532L, 1659552L, 1084238L, + 3620327L, 2433784L, 7817355L, 2896200L, 2359197L, 6382080L, 6722348L, 5713975L, 3114501L, 4450577L, + 7023733L, 5393942L, 4754139L, 4956880L, 7359329L, 2504685L, 2872392L, 6558127L, 6793L, 479033L, + 846002L, 3753865L, 6117434L, 5819900L, 4323708L, 1397919L, 413910L, 1140043L, 7257728L, 1683676L, + 5631865L, 7253995L, 5209042L, 7269444L, 5608098L, 7637780L, 2331356L, 4482123L, 478527L, 3985839L, + 5464460L, 2191931L, 5524584L, 5743983L, 6276970L, 5099765L, 2371491L, 225342L, 5541908L, 531671L, + 2085325L, 2502651L, 2707137L, 933307L, 2249288L, 6417378L, 2807879L, 1263235L, 8350890L, 2932809L, + 6959220L, 2655541L, 1930485L, 666184L, 7766262L, 3038206L, 2254003L, 8055358L, 8373895L, 1605083L, + 307185L, 5889166L, 5710496L, 6291990L, 7607342L, 6890466L, 5731071L, 7956203L, 2707126L, 7191301L, + 6872399L, 7988521L, 5893490L, 3231281L, 2460701L, 7819172L, 494292L, 1691417L, 7809456L, 6211833L, + 3249256L, 4604314L, 3643137L, 3770636L, 179280L, 6944735L, 6517883L, 8073317L, 3400365L, 544258L, + 4600921L, 5765964L, 2593082L, 621998L, 8015308L, 6690762L, 3007196L, 8321645L, 185336L, 1200241L, + 1651167L, 1016069L, 4553372L, 5604782L, 1182396L, 6365159L, +}; + +static const unsigned char sb_rho[32] = { + 0x97, 0x92, 0xbc, 0xec, 0x2f, 0x24, 0x30, 0x68, 0x6a, 0x82, 0xfc, 0xcf, + 0x3c, 0x2f, 0x5f, 0xf6, 0x65, 0xe7, 0x71, 0xd7, 0xab, 0x41, 0xb9, 0x02, + 0x58, 0xcf, 0xa7, 0xe9, 0x0e, 0xc9, 0x71, 0x24, +}; + +#endif /* MLDSA87_PRECOMP_A_H */ diff --git a/embedded/ti-c2000-f28p55x/Makefile b/embedded/ti-c2000-f28p55x/Makefile index 8c9e6c5cf..4bc8b76d0 100644 --- a/embedded/ti-c2000-f28p55x/Makefile +++ b/embedded/ti-c2000-f28p55x/Makefile @@ -130,6 +130,13 @@ ifeq ($(SECUREBOOT),1) CFLAGS += --define=WOLF_SECUREBOOT --define=WOLF_MLDSA_ALL_LEVELS endif +# PRECOMPA=1 stores matrix A (expanded at build time from the fixed +# verification key) in flash, so verify skips the SHAKE128 rejection sampling. +PRECOMPA ?= 0 +ifeq ($(PRECOMPA),1) + CFLAGS += --define=WOLFSSL_MLDSA_VERIFY_PRECOMP_A +endif + MLDSA ?= 0 ifeq ($(MLDSA),1) CFLAGS += --define=WOLF_MLDSA_ALL_LEVELS diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index 30780a603..1d134cb9d 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -110,6 +110,9 @@ * ML-DSA-87 vectors from wolfcrypt/test/test.c stay in the default image. */ #include #include "mldsa_octet_kat.h" +#ifdef WOLFSSL_MLDSA_VERIFY_PRECOMP_A +#include "mldsa87_precomp_a.h" +#endif #else #include "mldsa87_kat.h" #endif @@ -1283,6 +1286,14 @@ static void sb_verify(const char* what, long flip, int want) ret = wc_MlDsaKey_ImportPubRaw(&sb_key, sb_mldsa87_pub, (word32)sizeof(sb_mldsa87_pub)); } +#ifdef WOLFSSL_MLDSA_VERIFY_PRECOMP_A + if (ret == 0) { + /* A was expanded at build time and lives in flash: verify skips the + * SHAKE128 rejection sampling entirely. */ + ret = wc_MlDsaKey_SetPrecompA(&sb_key, sb_mldsa87_A, SB_A_LEN, + sb_rho, (word32)sizeof(sb_rho)); + } +#endif if (ret == 0) { ret = wc_MlDsaKey_VerifyMu(&sb_key, sb_mldsa87_sig, (word32)sizeof(sb_mldsa87_sig), mu, MLDSA_MU_SZ, &res); @@ -1297,8 +1308,64 @@ static void wolf_secureboot_test(void) printf("secure boot: %lu-octet packed image, %u-octet chunks, " "image never resident\r\n", (unsigned long)SB_IMG_SZ, (unsigned)SB_CHUNK); +#ifdef WOLFSSL_MLDSA_VERIFY_PRECOMP_A + printf("matrix A: precomputed in flash (%ld coefficients)\r\n", + (long)SB_A_LEN); +#else + printf("matrix A: expanded at run time (SHAKE128 rejection sampling)\r\n"); +#endif sb_verify("ML-DSA-87 pure-mode packed-image verify:", -1, 1); sb_verify("ML-DSA-87 corrupted-image reject:", SB_IMG_SZ / 2, 0); + +#ifdef WOLF_MLDSA_VERIFY_BENCH + /* Time the ML-DSA verify alone (mu is already built), which is the figure + * a bootloader budget cares about. */ + { + byte mu[MLDSA_MU_SZ]; + int res = 0; + int bret; + int bi; + double t; + + /* Time mu construction too: for a real firmware image the streamed + * SHAKE-256 hashing, not the ML-DSA verify, sets the boot budget. */ + (void)current_time(1); + bret = sb_build_mu(mu, -1); + t = current_time(0); + if (bret == 0) { + printf("mu build (%lu octets streamed): %.2f ms = %.1f KiB/s\r\n", + (unsigned long)SB_IMG_SZ, t * 1000.0, + ((double)SB_IMG_SZ / 1024.0) / t); + } + if (bret == 0) { + bret = wc_MlDsaKey_Init(&sb_key, NULL, INVALID_DEVID); + } + if (bret == 0) { + bret = wc_MlDsaKey_SetParams(&sb_key, WC_ML_DSA_87); + } + if (bret == 0) { + bret = wc_MlDsaKey_ImportPubRaw(&sb_key, sb_mldsa87_pub, + (word32)sizeof(sb_mldsa87_pub)); + } +#ifdef WOLFSSL_MLDSA_VERIFY_PRECOMP_A + if (bret == 0) { + bret = wc_MlDsaKey_SetPrecompA(&sb_key, sb_mldsa87_A, SB_A_LEN, + sb_rho, (word32)sizeof(sb_rho)); + } +#endif + if (bret == 0) { + (void)current_time(1); + for (bi = 0; bi < 10; bi++) { + (void)wc_MlDsaKey_VerifyMu(&sb_key, sb_mldsa87_sig, + (word32)sizeof(sb_mldsa87_sig), mu, MLDSA_MU_SZ, &res); + } + t = current_time(0); + printf("ML-DSA-87 VerifyMu bench: 10 ops in %.3f s = %.2f ms/op\r\n", + t, (t * 1000.0) / 10.0); + } + wc_MlDsaKey_Free(&sb_key); + } +#endif } #endif /* WOLF_SECUREBOOT */ diff --git a/embedded/ti-c2000-f28p55x/tools/gen_kat.c b/embedded/ti-c2000-f28p55x/tools/gen_kat.c index dbc2b0475..53f39b5f3 100644 --- a/embedded/ti-c2000-f28p55x/tools/gen_kat.c +++ b/embedded/ti-c2000-f28p55x/tools/gen_kat.c @@ -31,10 +31,15 @@ #include #include #include +#include #include #define MSG_SZ 512 #define OUT_NAME "mldsa_octet_kat.h" +/* Second output: matrix A for the secure-boot key, expanded off target. */ +#define PRECOMP_OUT_NAME "mldsa87_precomp_a.h" +/* SHAKE-128 rate, and the 3-byte triplets RejNTTPoly consumes from it. */ +#define SHAKE128_BLOCK_SZ 168 /* A stand-in firmware image for the secure-boot demo. Deliberately larger * than anything a bootloader would buffer, to show the image is never @@ -160,6 +165,113 @@ static int do_level(int type, const char* tag, const byte* msg, return ret; } +/* Expand matrix A for the secure-boot public key and write it as a flash + * resident C array, so verify on target can skip the SHAKE128 rejection + * sampling that otherwise dominates it. + * + * FIPS 204 Algorithm 32 ExpandA / Algorithm 30 RejNTTPoly, over the public + * SHAKE-128 API only. A is a function of rho alone, so a fixed verification + * key makes it a build-time constant. Coefficients come out in the NTT + * domain and in the same row-major (r, s) order wc_mldsa.c indexes. */ +static int do_precomp_a(const byte* pub) +{ + FILE* pf; + wc_Shake shake; + byte seed[MLDSA_PUB_SEED_SZ + 2]; + byte h[SHAKE128_BLOCK_SZ]; + long total = (long)PARAMS_ML_DSA_87_K * PARAMS_ML_DSA_87_L * MLDSA_N; + long n = 0; + int r; + int s; + int c; + int j; + int ret = 0; + + pf = fopen(PRECOMP_OUT_NAME, "w"); + if (pf == NULL) { + fprintf(stderr, "cannot open %s\n", PRECOMP_OUT_NAME); + return -1; + } + + fprintf(pf, + "/* Precomputed ML-DSA-87 matrix A for the secure-boot key.\n" + " *\n" + " * GENERATED by tools/gen_kat.c - do not edit. A = ExpandA(rho)\n" + " * and depends only on the public key, so a fixed verification\n" + " * key lets it be built once and stored in flash, removing the\n" + " * SHAKE128 rejection sampling from every verify.\n" + " *\n" + " * SECURITY: protect this exactly as you protect the public key.\n" + " * Substituting it can influence verification. */\n" + "#ifndef MLDSA87_PRECOMP_A_H\n" + "#define MLDSA87_PRECOMP_A_H\n\n" + "#define SB_A_LEN %ldL\n\n" + "static const sword32 sb_mldsa87_A[SB_A_LEN] = {\n", total); + + /* rho is the leading MLDSA_PUB_SEED_SZ octets of the raw public key. */ + XMEMCPY(seed, pub, MLDSA_PUB_SEED_SZ); + + for (r = 0; (ret == 0) && (r < PARAMS_ML_DSA_87_K); r++) { + /* Seed layout is rho || s || r, matching mldsa_verify_with_mu(). */ + seed[MLDSA_PUB_SEED_SZ + 1] = (byte)r; + for (s = 0; (ret == 0) && (s < PARAMS_ML_DSA_87_L); s++) { + seed[MLDSA_PUB_SEED_SZ + 0] = (byte)s; + + ret = wc_InitShake128(&shake, NULL, INVALID_DEVID); + if (ret == 0) { + ret = wc_Shake128_Absorb(&shake, seed, (word32)sizeof(seed)); + } + /* Rejection sample 256 coefficients from squeezed blocks. */ + for (j = 0; (ret == 0) && (j < MLDSA_N); ) { + ret = wc_Shake128_SqueezeBlocks(&shake, h, 1); + for (c = 0; (ret == 0) && (c < SHAKE128_BLOCK_SZ) && + (j < MLDSA_N); c += 3) { + /* CoeffFromThreeBytes: 23-bit little-endian, drop >= q. */ + sword32 t = (sword32)h[c] + ((sword32)h[c + 1] << 8) + + ((sword32)h[c + 2] << 16); + t &= 0x7fffff; + if (t < MLDSA_Q) { + fprintf(pf, "%s%ldL,", ((n % 10) == 0) ? " " : " ", + (long)t); + n++; + if ((n % 10) == 0) { + fprintf(pf, "\n"); + } + j++; + } + } + } + wc_Shake128_Free(&shake); + } + } + + if ((ret == 0) && ((n % 10) != 0)) { + fprintf(pf, "\n"); + } + if (ret == 0) { + fprintf(pf, "};\n\nstatic const unsigned char sb_rho[%d] = {\n", + MLDSA_PUB_SEED_SZ); + for (j = 0; j < MLDSA_PUB_SEED_SZ; j++) { + fprintf(pf, "%s0x%02x,", ((j % 12) == 0) ? " " : " ", pub[j]); + if (((j + 1) % 12) == 0) { + fprintf(pf, "\n"); + } + } + if ((MLDSA_PUB_SEED_SZ % 12) != 0) { + fprintf(pf, "\n"); + } + fprintf(pf, "};\n\n#endif /* MLDSA87_PRECOMP_A_H */\n"); + } + + fclose(pf); + if (ret != 0) { + fprintf(stderr, "matrix A generation failed: %d\n", ret); + /* Never leave a truncated header for the build to pick up. */ + remove(PRECOMP_OUT_NAME); + } + return ret; +} + /* Secure-boot vectors: an ML-DSA-87 key, a packed "firmware image", and a * PURE (non pre-hash) signature over that image. */ static int do_secureboot(byte* img) @@ -188,6 +300,7 @@ static int do_secureboot(byte* img) emit_bytes("sb_mldsa87_pub", pub, pubLen); emit_packed("sb_image_packed", img, IMG_SZ); emit_bytes("sb_mldsa87_sig", sig, sigLen); + ret = do_precomp_a(pub); } else { fprintf(stderr, "secure-boot vector generation failed: %d\n", ret); From 7acd6b5c53dc4fe682bd7488ab748a4648c27057 Mon Sep 17 00:00:00 2001 From: David Garske Date: Fri, 4 Sep 2026 08:34:32 -0700 Subject: [PATCH 8/8] TI C2000 example: do not compile the ML-DSA-87 verify KAT into SECUREBOOT builds --- embedded/ti-c2000-f28p55x/Source/wolf_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/embedded/ti-c2000-f28p55x/Source/wolf_main.c b/embedded/ti-c2000-f28p55x/Source/wolf_main.c index 1d134cb9d..e0f716725 100644 --- a/embedded/ti-c2000-f28p55x/Source/wolf_main.c +++ b/embedded/ti-c2000-f28p55x/Source/wolf_main.c @@ -884,14 +884,17 @@ static void wolf_sha1_test(void) } #endif /* WOLF_SHA1 */ -#if !defined(WOLF_MLDSA_SIGN) && !defined(WOLF_MLDSA_OCTETS) +#if !defined(WOLF_MLDSA_SIGN) && !defined(WOLF_MLDSA_OCTETS) && \ + !defined(WOLF_SECUREBOOT) /* ML-DSA-87 verify known-answer test (real pk/msg/sig from test.c). This * is the primary deliverable: a deterministic, RNG-free verify on HW. * Key struct is static (large; WOLFSSL_MLDSA_VERIFY_NO_MALLOC pins buffers * into it). msg matches test.c's mldsa_param_vfy_test: msg[i] = (byte)i. * Skipped in the SIGN build: its static verify key would not fit alongside * the sign key + 32 KW heap, and the sign round-trip below also exercises - * verify (of a freshly produced signature). */ + * verify (of a freshly produced signature). Skipped in the SECUREBOOT build + * too: that image calls wolf_secureboot_test() instead, so the guard here has + * to match the call site or this is compiled and never used. */ static void wolf_mldsa87_verify_test(void) { /* mldsa_key is static (.bss): WOLFSSL_MLDSA_VERIFY_NO_MALLOC pins the