diff --git a/.agents/specs/vulkan-full-support.md b/.agents/specs/vulkan-full-support.md index d71d7dd32..6902d4520 100644 --- a/.agents/specs/vulkan-full-support.md +++ b/.agents/specs/vulkan-full-support.md @@ -327,6 +327,53 @@ the umbrella, not a substitute for them. | **VK-H** | **Attention variants + samplers** (16 ops) | B (samplers), G (attn variants) | **83/83 — closes the op surface** | | **VK-I** | **AMD/RDNA (or Arc) bring-up** | hardware acquisition | The staging path for non-host-visible memory, and the gate re-run where Vulkan actually matters | +### 6.0 `VK-G` partial: the two GATED-DELTA RECURRENCES landed — 2026-08-08 + +`row/BACKEND-VULKAN-GDN-CORE`. `kGdnPrefill` and `kGdnDecode` are native; the +Vulkan module count goes 22 -> 24 and the GDN family 6 -> 8. `kCausalConv1dFwd`, +`kRopeCosSinCache` and `kAttnQkNormRopeGate` stay on the reference tier. + +**What was ported, and from where.** Per-step arithmetic 1:1 from +`src/vt/cpu/cpu_ops.cpp:1280-1311` `GdnHeadTokenStep`; dispatch shape and state +handling from our own `src/vt/cuda/cuda_gdn.cu:2417-2503` `GdnDecodeFusedKernel` +— one workgroup per (sequence, value-head, BV-value-tile), the `[BV,Dk]` state +slice staged into shared memory by a coalesced load and written back once, `NW` +lanes per value row splitting the `Dk` contraction. `BV=16`, `NW=8` are what +Vulkan's GUARANTEED 16 KB of shared memory allows at `VT_TG=128`; `BV=32` would +need 18 KB. Both shaders share one step body, `vt_gdn_recurrence.glsl`. + +**THE ONE STRUCTURAL ADDITION over the CUDA kernel, and it is the prefill lever.** +CUDA's fused kernel is a DECODE kernel, so its coalesced load/store pair brackets +a single step. Prefill runs the SAME staged tile through the whole token range, +so a 512-token prompt touches the `[Dv,Dk]` state twice instead of ~2048 times. +That is legal because the VALUE ROW is an independent axis — row `vi` of `S` only +ever depends on itself, `k`, `q`, `decay`, `beta` and `v[vi]` — which CUDA already +exploits as its `grid.x` value tiling; only the sequence position is sequential, +and it stays sequential inside the workgroup. + +**Measured (llvmpipe, correctness only — no speed claim is made or owed here).** +NMSE vs the CPU oracle in the same binary: prefill out `1.47e-14`, prefill +carried state `6.43e-15`, bf16 arm `0`; decode (indexed cache) out `1.64e-14` and +cache `3.31e-15`, decode (compact state) out `1.75e-14`. `test_vulkan_backend` +25/25 cases, 1020/1020 assertions. `test_opt_paged_engine` with +`VLLM_CPP_DEVICE=vulkan` still 6/6 token-exact (96/96), 0 declines. + +**NOT measured: any speed number.** Local Vulkan is llvmpipe. The 27B +prefill/decode re-run on GB10, and the reference-tier count that goes with it, +are OWED and are the only thing that can turn the structure above into a result. + +**A LATENT SEAM DEFECT THIS ROW HAD TO FIX.** `GetOpFallback` threw for any +native kernel that declined per-call, because the portable reference tier +installs only on a GetOp MISS and an op with a native kernel never misses. The +pre-existing `vt_paged_attn` fp8-KV decline had the same hole and had simply +never been exercised. `src/vt/op_provider.cpp` now installs the tier on that path +and drains the backend before handing a HOST kernel device memory. + +**NOT taken, deliberately.** Rewriting the two passes as +`o = decay*(S·q) + v'*(k·q)` would read the state once instead of twice, but it +is an algebraic reassociation and would move the numbers off the CPU reference's +rounding for a saving that cannot be measured on llvmpipe. Recorded, not shipped. + ### 6.1 `VK-A1` landed — 2026-08-06 (`CLAIM-VULKAN-FULL-1`) **DECISION: keep the committed-SPIR-V route; make SPECIALIZATION CONSTANTS the diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 8d92412da..c1072cb12 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -348,7 +348,7 @@ built on it rather than keeping the flattering one. | Memory footprint vs declared workload (`ROAD-V1-MEM`, #83) | **Never measured, and not measurable today**: there is no auto-sizing to compare against, because the KV pool is a hand-typed `--num-blocks`, so "what the run actually needed" has no number | Once M1's `MemoryBudget` lands: predicted-vs-actual bytes per allocation class, then peak footprint ours-auto vs vLLM at its 0.9 default on the same model and config | | Startup latency (cold to first `/health`) | **36.51 s vs vLLM 0.25.0's 221.51 s = 6.07x** (medians of 3, 27B-NVFP4, GB10). PROVISIONAL: 3 of 6 legs contended, repeat killed by a host reboot. [Detail](../.agents/benchmark-record.md) | Uncontended 3-rep re-run on a quiet box | | Speculation depth (`ROAD-V1-D3-SPEC-K`, #81) | **Never measured, MTP is k=1** (our port covers vLLM's k=1 branch only), so no acceptance-vs-depth curve exists | k=2..4 three-way greedy gate, then the c1/c>1 A/B + the per-workload (prose vs code) acceptance-vs-depth curve any dynamic or adaptive depth policy needs | -| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 22 NATIVE kernels (+6 GDN glue, CPU-oracle gated, no speed); 65 host-tier. opt-125m e2e token-exact on llvmpipe. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-C` coopmat A/B on Thor (`VT_VULKAN_COOPMAT=0` A/Bs it): **11.1x-32.9x** vs our UNTILED scalar kernel, not vs a competent GEMM. `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, same GGUF, three columns | +| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | **NOT APPLICABLE: nothing measured, claimed or owed.** 24 NATIVE (+8 GDN, BOTH recurrences; oracle-gated, no speed); 63 host-tier. opt-125m e2e token-exact on llvmpipe. [Detail](../.agents/specs/vulkan-full-support.md) | `VK-C` coopmat A/B on Thor (`VT_VULKAN_COOPMAT=0` A/Bs it): **11.1x-32.9x** vs our UNTILED scalar kernel, not vs a competent GEMM. `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, same GGUF, three columns | | ROCm (`BACKEND-GATE-ROCM-VLLM` / `-SGLANG`) | **NOT APPLICABLE: no number measured, claimed or owed.** W0 ctest-green on 4 gfx archs (#41); gfx1201 hipBLAS + Gemma-4 MoE (#140, contributor) ran M0/M1 on 2× R9700, our side CPU-link-verified only. No AMD HW here | The approach-(b) fix (PENDING community) unblocks the first APU model run (M2); the gate becomes a same-box vLLM-ROCm oracle once a model runs ([#41](https://github.com/mudler/vllm.cpp/issues/41)); floor: vLLM | | SGLang floor arms | Never ran | Both arms of the SGLang comparison | | Embeddings on the ONE surface (ROW 6, `LlamaModel` + `vllm_embed` + `/v1/embeddings`) | **NO number measured, claimed or owed.** Correctness-gated only, CPU: the 2026-08-08 fold (engine path == direct registry path, f64 LAST+normalize reference on the committed fixture) is plumbing, no speed claim | A REAL embedding checkpoint (e5-mistral class) + a same-box `vllm.LLM(task="embed")` oracle; only then does an embed-throughput bar exist | diff --git a/docs/STATUS.md b/docs/STATUS.md index fd692cd52..0ddd89cd7 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -410,8 +410,8 @@ Parakeet ASR (2026-08-07): *CPU-correct, ON THE ONE SURFACE (ROW 1)*. Ids exact ## Not supported yet LoRA (W1 CPU runtime brick landed; not yet usable end-to-end), multi-GPU, -Vulkan (opt-125m exact, GEMV 1.8x; 22 native, +6 GDN glue gated, -recurrences host-tier; qwen3_5 #125 fixed, VERIFIED on 27B; CUDA build repaired +Vulkan (opt-125m exact, GEMV 1.8x; 24 native, +8 GDN incl. BOTH +recurrences, oracle-gated, no speed; qwen3_5 #125 VERIFIED on 27B; CUDA build repaired [campaign](../.agents/specs/vulkan-full-support.md)), ROCm (W0 community-green on 4 gfx archs (#41); the ratified (b) APU unified-memory fix is in — **blind-written, unverified** — M2 unblocks on verification; gfx1201 hipBLAS + diff --git a/src/vt/op_provider.cpp b/src/vt/op_provider.cpp index 15aa6bb6b..c52ca867d 100644 --- a/src/vt/op_provider.cpp +++ b/src/vt/op_provider.cpp @@ -374,11 +374,32 @@ void* GetOpFallback(OpId op, DeviceType device, const char* declining_provider) "' is not registered for this op/device"); const ProviderCaps caps = GetDeviceProviderCaps(device); const OpProvider* next = Choose(slot, caps, floor); + // NOTHING BELOW: install the portable reference tier and re-select. Resolve() + // installs it only on a GetOp MISS, so an op whose device HAS a native kernel + // never gets one — and a native kernel that declines per-call then had nothing + // to fall back to and threw. That is the wrong answer twice over: the tier is + // the whole reason a declining kernel is preferable to a throwing one + // (op_provider.h § DECLINE-AND-FALL-BACK), and before the native kernel existed + // this very shape resolved to the tier and worked. `floor` stays valid across + // the install because providers[] is a fixed array appended in place. + if (next == nullptr && MaybeInstallReferenceTier(op, device)) { + next = Choose(slot, caps, floor); + } slot.declines.fetch_add(1, std::memory_order_relaxed); VT_CHECK(next != nullptr, std::string("provider '") + declining_provider + "' declined op " + std::to_string(static_cast(op)) + " on device type " + std::to_string(static_cast(device)) + " and no provider is below it"); + // The reference tier is a HOST kernel about to read and write DEVICE memory, + // exactly as in GetOp above — and GetOp's drain is keyed on the SELECTED + // provider, which on this path is the declining NATIVE one, so it never fires. + // Without this a backend that defers submission (Vulkan batches command + // buffers) hands the host kernel bytes the device has not written yet, and it + // does so SILENTLY. + if (std::strcmp(next->name, kReferenceProviderName) == 0) { + Backend* b = TryGetBackend(device); + if (b != nullptr) b->FlushPending(); + } return next->fn; } diff --git a/src/vt/vulkan/shaders/vt_gdn_decode.comp b/src/vt/vulkan/shaders/vt_gdn_decode.comp new file mode 100644 index 000000000..ee3df3782 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_gdn_decode.comp @@ -0,0 +1,96 @@ +#version 450 +// vt::GdnDecode (kGdnDecode) — ONE gated-delta step per batch token. Ported 1:1 +// from src/vt/cpu/cpu_ops.cpp:1368-1396 GdnDecodeKernel for the semantics, and +// from src/vt/cuda/cuda_gdn.cu:2417-2503 GdnDecodeFusedKernel for the shape; the +// step body and the shared-memory state tiling live in vt_gdn_recurrence.glsl, +// which cites both. +// +// This is the SAME shader as vt_gdn_prefill with the token loop collapsed to one +// iteration, which is not a coincidence: the CPU kernels differ only in their +// parallel axis (batch here, (sequence, value-head) there) and in the state-row +// indirection below. The recurrence carries nothing across tokens at T==1, so the +// tile's coalesced load/store pair brackets a single step — exactly CUDA's fused +// decode kernel. +// +// state_idx (fla ssm_state_indices, cuda_gdn.cu:2432-2443): when present the +// block reads and writes persistent-cache row state_idx[i_n] rather than row +// i_n. A NEGATIVE index is fla's NULL block: zero the output row and skip. The +// UPPER bound is guarded here too, which CUDA does not do, for the reason +// vt_gdn_state_gather.comp states: the CPU's host-side range VT_CHECK would need +// a host read of device memory, which on this backend means draining the dispatch +// batch on every call, so the device analogue is a guard that writes nothing +// wild. i_n is fixed by the workgroup id, so the branch is UNIFORM and taking it +// before any barrier is safe. +// +// EXPECT NO LARGE DECODE WIN FROM THIS. Batch-1 decode of a 27B model is +// weight-bandwidth bound, not recurrence bound; this kernel exists so the op +// leaves the host reference tier and so the whole GDN block runs on one device, +// not because the recurrence was the decode cost. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +// IDENTICAL BINDINGS TO vt_gdn_prefill, and that is a requirement rather than a +// tidiness: GLSL functions cannot take buffer blocks as parameters, so the shared +// step in vt_gdn_recurrence.glsl names these instances directly. +layout(binding = 0) readonly buffer Qb32 { uint v[]; } Q32; // q [T,Hk,Dk] +layout(binding = 1) readonly buffer Qb16 { uint16_t v[]; } Q16; +layout(binding = 2) readonly buffer Kb32 { uint v[]; } K32; // k [T,Hk,Dk] +layout(binding = 3) readonly buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 4) readonly buffer Vb32 { uint v[]; } V32; // v [T,Hv,Dv] +layout(binding = 5) readonly buffer Vb16 { uint16_t v[]; } V16; +layout(binding = 6) buffer Ob32 { uint v[]; } O32; // out [T,Hv,Dv] +layout(binding = 7) buffer Ob16 { uint16_t v[]; } O16; +layout(binding = 8) readonly buffer Gb { uint v[]; } G; // g [T,Hv], f32 +layout(binding = 9) readonly buffer Eb { uint v[]; } BETA; // beta [T,Hv], f32 +layout(binding = 10) buffer Sb { uint v[]; } S; // state [N,Hv,Dv,Dk], f32 +// state_idx [T], i32. Aliases the state buffer when the caller passed none +// (p.has_idx == 0) — a descriptor a shader statically uses must be valid even on +// the path that never reads it, the same arrangement vt_gdn_state_gather uses for +// its optional has_initial_state. +layout(binding = 11) readonly buffer Mb { uint v[]; } IDX; + +layout(constant_id = 0) const uint VT_PC_QKV_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_PC_OUT_DT = VT_DT_F32; + +layout(push_constant) uniform Params { + uint hk, dk, hv, dv; + uint nv; // value tiles per (token, head): ceil(Dv / VT_GDN_BV) + uint ratio; // Hv / Hk, the GQA broadcast + uint has_idx; // 1 => the state row is IDX[i_n], else i_n + uint n_state_rows; // state.shape[0], for the bounds guard + uint q_off, k_off, v_off, out_off, g_off, beta_off, state_off, meta_off; + float scale; +} p; + +#include "vt_gdn_recurrence.glsl" + +void main() { + uint wg = gl_WorkGroupID.x; + uint i_v = wg % p.nv; + uint nh = wg / p.nv; + uint h_v = nh % p.hv; + uint i_n = nh / p.hv; // decode token == sequence + uint h_k = h_v / p.ratio; + uint vbase = i_v * VT_GDN_BV; + + vt_gdn_setup(vbase); + + uint srow = i_n; + if (p.has_idx != 0u) { + int si = int(IDX.v[(p.meta_off >> 2) + i_n]); + if (si < 0 || uint(si) >= p.n_state_rows) { // fla NULL block; see the header + if (vt_gdn_vrow < p.dv && vt_gdn_wk == 0u) { + VT_STORE(O32, O16, VT_PC_OUT_DT, p.out_off, + (i_n * p.hv + h_v) * p.dv + vt_gdn_vrow, 0.0); + } + return; + } + srow = uint(si); + } + + vt_gdn_load_tile(srow, h_v, vbase); + vt_gdn_step(i_n, h_v, h_k); + vt_gdn_store_tile(srow, h_v, vbase); +} diff --git a/src/vt/vulkan/shaders/vt_gdn_prefill.comp b/src/vt/vulkan/shaders/vt_gdn_prefill.comp new file mode 100644 index 000000000..76ab3f0b6 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_gdn_prefill.comp @@ -0,0 +1,78 @@ +#version 450 +// vt::GdnPrefill (kGdnPrefill) — the gated-delta-rule recurrence over a varlen +// prompt. Ported 1:1 from src/vt/cpu/cpu_ops.cpp:1331-1366 GdnPrefillKernel; the +// per-token arithmetic and the shared-memory state tiling both live in +// vt_gdn_recurrence.glsl, which cites its sources. +// +// THE GRID IS THE CPU KERNEL'S PARALLEL AXIS, ONE STEP FINER. cpu_ops.cpp:1342-1349 +// row-chunks over the (SEQUENCE, VALUE-HEAD) product, and records why: sequences +// alone left the whole recurrence single-threaded. This shader adds the VALUE-ROW +// tile that our CUDA kernel already uses as its grid.x (cuda_gdn.cu:2421), so the +// axis is (sequence, value-head, BV-value-tile) — flattened into +// gl_WorkGroupID.x as ((s * Hv + hv) * NV + i_v) because Vulkan's guaranteed +// workgroup-count limit is per dimension and one dimension is enough. +// +// THE SEQUENCE STAYS SEQUENTIAL, INSIDE THE WORKGROUP, and that is the point of +// the shape: the [BV,Dk] state tile is staged into shared memory ONCE, run +// through every token of this sequence, and written back ONCE. The CPU reference +// and our CUDA decode kernel both stream the state per token; a 512-token prompt +// touches it twice here instead of 2048 times. +// +// `s` is derived from gl_WorkGroupID, so the token range [qsl[s], qsl[s+1]) is +// UNIFORM across the workgroup — required, because every step below contains +// barriers and a barrier reached by only part of a workgroup is undefined. +#extension GL_GOOGLE_include_directive : require +#include "vt_common.glsl" + +layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; + +layout(binding = 0) readonly buffer Qb32 { uint v[]; } Q32; // q [T,Hk,Dk] +layout(binding = 1) readonly buffer Qb16 { uint16_t v[]; } Q16; +layout(binding = 2) readonly buffer Kb32 { uint v[]; } K32; // k [T,Hk,Dk] +layout(binding = 3) readonly buffer Kb16 { uint16_t v[]; } K16; +layout(binding = 4) readonly buffer Vb32 { uint v[]; } V32; // v [T,Hv,Dv] +layout(binding = 5) readonly buffer Vb16 { uint16_t v[]; } V16; +layout(binding = 6) buffer Ob32 { uint v[]; } O32; // out [T,Hv,Dv] +layout(binding = 7) buffer Ob16 { uint16_t v[]; } O16; +// FOUR OPERANDS ARE BOUND THROUGH THE 32-BIT VIEW ONLY. g, beta and the state are +// f32 BY CONTRACT on this device (src/vt/ops.cpp:1629-1643: g/beta always, and +// the fp16/bf16 state is a CUDA-only extension), and query_start_loc is i32, so a +// dtype-erased pair would be a branch that can never take its other side. +layout(binding = 8) readonly buffer Gb { uint v[]; } G; // g [T,Hv], f32 +layout(binding = 9) readonly buffer Eb { uint v[]; } BETA; // beta [T,Hv], f32 +layout(binding = 10) buffer Sb { uint v[]; } S; // state [N,Hv,Dv,Dk], f32 +layout(binding = 11) readonly buffer Mb { uint v[]; } QSL; // query_start_loc [N+1], i32 + +layout(constant_id = 0) const uint VT_PC_QKV_DT = VT_DT_F32; +layout(constant_id = 1) const uint VT_PC_OUT_DT = VT_DT_F32; + +layout(push_constant) uniform Params { + uint hk, dk, hv, dv; + uint nv; // value tiles per (sequence, head): ceil(Dv / VT_GDN_BV) + uint ratio; // Hv / Hk, the GQA broadcast + uint has_idx; // decode only; 0 here + uint n_state_rows; // decode only; state.shape[0] + uint q_off, k_off, v_off, out_off, g_off, beta_off, state_off, meta_off; + float scale; +} p; + +#include "vt_gdn_recurrence.glsl" + +void main() { + uint wg = gl_WorkGroupID.x; + uint i_v = wg % p.nv; + uint sh = wg / p.nv; + uint h_v = sh % p.hv; + uint s = sh / p.hv; + uint h_k = h_v / p.ratio; + uint vbase = i_v * VT_GDN_BV; + + vt_gdn_setup(vbase); + vt_gdn_load_tile(s, h_v, vbase); + // An EMPTY sequence (qsl[s+1] == qsl[s]) runs no steps and stores the tile back + // unchanged, which is what the CPU reference's `for (t = qslp[s]; ...)` does. + int t0 = int(QSL.v[(p.meta_off >> 2) + s]); + int t1 = int(QSL.v[(p.meta_off >> 2) + s + 1u]); + for (int t = t0; t < t1; ++t) { vt_gdn_step(uint(t), h_v, h_k); } + vt_gdn_store_tile(s, h_v, vbase); +} diff --git a/src/vt/vulkan/shaders/vt_gdn_recurrence.glsl b/src/vt/vulkan/shaders/vt_gdn_recurrence.glsl new file mode 100644 index 000000000..1ec594773 --- /dev/null +++ b/src/vt/vulkan/shaders/vt_gdn_recurrence.glsl @@ -0,0 +1,197 @@ +// vt::Gdn{Prefill,Decode} — the SHARED body of the two gated-delta recurrences. +// Included by vt_gdn_prefill.comp and vt_gdn_decode.comp AFTER they declare +// their bindings and push block, because GLSL functions cannot take buffer +// blocks as parameters: the step below names the buffer instances directly, so +// both shaders must declare the SAME instance names at the SAME bindings. That +// constraint is why this is an include and not a copy — the two ops differ only +// in how they pick the state row and how many tokens they run. +// +// PORT PROVENANCE. +// * PER-STEP ARITHMETIC, 1:1 from src/vt/cpu/cpu_ops.cpp:1280-1311 +// GdnHeadTokenStep (itself the vLLM-parity golden for +// fla fused_recurrent_gated_delta_rule_fwd_kernel): +// q' = q*scale; S *= exp(g); v' = (v - S@k)*beta; S += outer(v',k); +// out = S@q' (k is NOT scaled) +// Both contractions stay fused with the pass that produces them, in that +// order, exactly as the CPU reference writes them. +// * DISPATCH SHAPE AND STATE HANDLING, ported from our own CUDA kernel +// src/vt/cuda/cuda_gdn.cu:2417-2503 GdnDecodeFusedKernel: one block per +// (sequence, value-head, BV-value-tile); the [BV,Dk] state slice staged into +// shared memory ONCE by a COALESCED load, updated in place, written back +// ONCE; NW lanes per value row splitting the Dk contraction and reducing +// their partial sums. The CUDA header explains why: the alternative streams +// the [Dv,Dk] state from GLOBAL four times per token, strided by Dk, so +// uncoalesced. +// +// WHY (sequence, value-head, VALUE-ROW) IS A LEGAL PARALLEL AXIS. +// cpu_ops.cpp:1275-1279 states heads and sequences: distinct heads own disjoint +// [Dv,Dk] state blocks and disjoint output rows. The VALUE ROW is independent +// too and the CUDA kernel already exploits it as its grid.x (cuda_gdn.cu:2421, +// the fla NV value tiling): row vi of S is only ever touched as +// S[vi] <- S[vi]*decay + v'[vi]*k, out[vi] = S[vi]·q', +// v'[vi] = (v[vi] - S[vi]·k)*beta +// — every term is either row-local or a per-(token,head) broadcast. Only the +// SEQUENCE POSITION is sequential, and it stays sequential, in `tok`, inside the +// workgroup. +// +// WHY THE TILE IS LOADED ONCE PER *SEQUENCE* AND NOT PER TOKEN (the prefill +// lever). CUDA's fused kernel is a decode kernel: T==1, so its one coalesced +// load/store pair covers one step. Running the SAME tile through the whole +// token range amortises that pair over the sequence, which is the difference +// between streaming the [Dv,Dk] state through memory 4x per token and touching +// it twice per PROMPT. Nothing else changes; the recurrence is untouched. +// +// TILE GEOMETRY, and why these numbers. +// Vulkan only GUARANTEES 16384 bytes of maxComputeSharedMemorySize, and this +// backend probes no limits on purpose (vt_common.glsl § VT_TG). The workgroup is +// VT_TG == 128 lanes, split BV rows x NW lanes-per-row, so BV*NW == 128 and both +// are powers of two (the row reduction halves). The budget picks the largest such +// BV: +// BV=32 -> 32*(128+1) + 2*128 + 128 = 4512 floats = 18048 B > 16384 REJECT +// BV=16 -> 16*(128+1) + 2*128 + 128 = 2448 floats = 9792 B ok +// so BV=16, NW=8. MAX_DK bounds the tile's compile-time extent; the host DECLINES +// to the reference tier for a wider Dk rather than reading past the array +// (vulkan_ops.cpp GdnPrefillKernel). Qwen3.6-27B's linear_key_head_dim is 128. +// +// NUMERIC TIER: NMSE, not bit-exact. Two divergences from the CPU reference, both +// deliberate. (1) GLSL `exp` is a ~3-ULP builtin, not std::exp — and the decay it +// produces multiplies the carried state EVERY step, so the difference compounds +// along the sequence rather than staying local. (2) each Dk contraction is a sum +// of NW partial sums instead of one sequential accumulation, so the reduction +// order is a tree. Same tier as every other reducing kernel in this backend. +#ifndef VT_GDN_RECURRENCE_GLSL +#define VT_GDN_RECURRENCE_GLSL + +#define VT_GDN_BV 16u // value-state rows per workgroup tile (fla BV) +#define VT_GDN_NW 8u // lanes cooperating on one row: VT_TG / VT_GDN_BV +#define VT_GDN_MAX_DK 128u // compile-time bound on the tile's row width + +// The [BV,Dk] state slice, rows padded to Dk+1 to break the bank conflict a +// power-of-two stride would give every lane of a row (cuda_gdn.cu:2445 does the +// same, and for the same reason). +shared float vt_gdn_sbh[VT_GDN_BV * (VT_GDN_MAX_DK + 1u)]; +shared float vt_gdn_bq[VT_GDN_MAX_DK]; // q' = q*scale, broadcast to every lane +shared float vt_gdn_bk[VT_GDN_MAX_DK]; // k, likewise +shared float vt_gdn_red[VT_TG]; // per-row partial sums + +// Per-invocation geometry, filled by vt_gdn_setup(). Plain globals: in a compute +// shader these are private to the invocation. +uint vt_gdn_tid; // lane in the workgroup +uint vt_gdn_vi; // value-state row within the tile +uint vt_gdn_wk; // Dk-slice owner within this row's lane group +uint vt_gdn_vrow; // the tile row's absolute value-state row +uint vt_gdn_c0; // this lane's Dk column slice, [c0, c1) +uint vt_gdn_c1; +uint vt_gdn_sdk; // padded shared row stride, Dk+1 +uint vt_gdn_rbase; // vt_gdn_vi * vt_gdn_sdk + +void vt_gdn_setup(uint vbase) { + vt_gdn_tid = gl_LocalInvocationID.x; + vt_gdn_vi = vt_gdn_tid / VT_GDN_NW; + vt_gdn_wk = vt_gdn_tid % VT_GDN_NW; + vt_gdn_vrow = vbase + vt_gdn_vi; + vt_gdn_sdk = p.dk + 1u; + vt_gdn_rbase = vt_gdn_vi * vt_gdn_sdk; + // Partition [0, Dk) across the row's NW lanes (cuda_gdn.cu:2469-2471). When Dk + // is small enough that a lane's slice starts past the end, c1 < c0 and the + // lane's loops are simply empty — it still reaches every barrier. + uint ck = (p.dk + VT_GDN_NW - 1u) / VT_GDN_NW; + vt_gdn_c0 = vt_gdn_wk * ck; + vt_gdn_c1 = min(vt_gdn_c0 + ck, p.dk); +} + +// Sum one value row's NW partial sums and broadcast the total to its NW lanes. +// Shared-memory halving tree rather than a subgroup shuffle (cuda_gdn.cu:2485 +// uses __shfl_xor_sync): subgroup ARITHMETIC is an optional Vulkan 1.1 feature +// and this backend probes no optional features (vt_common.glsl § VT_TG). +// +// THE LEADING BARRIER IS LOAD-BEARING, for the reason vt_common.glsl's +// vt_tg_sum states: this is called twice per token, so without it a lane racing +// into the next call would overwrite a slot another lane had not yet read. +float vt_gdn_rowsum(float v) { + barrier(); + vt_gdn_red[vt_gdn_tid] = v; + barrier(); + for (uint s = VT_GDN_NW / 2u; s > 0u; s >>= 1) { + if (vt_gdn_wk < s) { vt_gdn_red[vt_gdn_tid] += vt_gdn_red[vt_gdn_tid + s]; } + barrier(); + } + return vt_gdn_red[vt_gdn_tid - vt_gdn_wk]; // lane 0 of this row's group +} + +// Stage state[state_row][h_v][vbase .. vbase+BV)[0 .. Dk) into shared. The read +// is flat over the tile so consecutive lanes read consecutive words — the +// coalesced load cuda_gdn.cu:2464-2465 exists for. Rows past Dv are ZEROED, not +// skipped: their lanes stay live through every barrier below and compute on the +// zeros, and the store-back leaves them out. +void vt_gdn_load_tile(uint state_row, uint h_v, uint vbase) { + uint base = (p.state_off >> 2) + ((state_row * p.hv + h_v) * p.dv + vbase) * p.dk; + uint valid = min(p.dv - vbase, VT_GDN_BV); + for (uint e = vt_gdn_tid; e < VT_GDN_BV * p.dk; e += VT_TG) { + uint r = e / p.dk; + uint c = e - r * p.dk; + float s = 0.0; + if (r < valid) { s = uintBitsToFloat(S.v[base + e]); } + vt_gdn_sbh[r * vt_gdn_sdk + c] = s; + } + barrier(); +} + +void vt_gdn_store_tile(uint state_row, uint h_v, uint vbase) { + barrier(); + uint base = (p.state_off >> 2) + ((state_row * p.hv + h_v) * p.dv + vbase) * p.dk; + uint valid = min(p.dv - vbase, VT_GDN_BV); + for (uint e = vt_gdn_tid; e < valid * p.dk; e += VT_TG) { + uint r = e / p.dk; + uint c = e - r * p.dk; + S.v[base + e] = floatBitsToUint(vt_gdn_sbh[r * vt_gdn_sdk + c]); + } +} + +// ONE token of the recurrence for this workgroup's (value-head, value-tile). +// cpu_ops.cpp:1285-1310, statement for statement; only the [0,Dk) loops are +// split across the row's NW lanes and closed with a reduction. +void vt_gdn_step(uint tok, uint h_v, uint h_k) { + // q' and k for this (token, key-head), broadcast to every lane. Both loops are + // over the FULL workgroup, so the barriers around them are uniformly reached. + barrier(); + uint qkbase = (tok * p.hk + h_k) * p.dk; + for (uint e = vt_gdn_tid; e < p.dk; e += VT_TG) { + vt_gdn_bk[e] = VT_LOAD(K32, K16, VT_PC_QKV_DT, p.k_off, qkbase + e); + vt_gdn_bq[e] = VT_LOAD(Q32, Q16, VT_PC_QKV_DT, p.q_off, qkbase + e) * p.scale; + } + barrier(); + + uint hidx = tok * p.hv + h_v; + float decay = exp(uintBitsToFloat(G.v[(p.g_off >> 2) + hidx])); + float beta_t = uintBitsToFloat(BETA.v[(p.beta_off >> 2) + hidx]); + + // (S * exp(g)) @ k, fused with the decay pass (cpu_ops.cpp:1292-1301). + float pdot = 0.0; + for (uint c = vt_gdn_c0; c < vt_gdn_c1; ++c) { + float s = vt_gdn_sbh[vt_gdn_rbase + c] * decay; + vt_gdn_sbh[vt_gdn_rbase + c] = s; + pdot += s * vt_gdn_bk[c]; + } + float dot = vt_gdn_rowsum(pdot); + + float vv = 0.0; + if (vt_gdn_vrow < p.dv) { + vv = VT_LOAD(V32, V16, VT_PC_QKV_DT, p.v_off, hidx * p.dv + vt_gdn_vrow); + } + float vp = (vv - dot) * beta_t; + + // (S + outer(v',k)) @ q', fused with the rank-1 update (cpu_ops.cpp:1302-1310). + float po = 0.0; + for (uint c = vt_gdn_c0; c < vt_gdn_c1; ++c) { + float s = vt_gdn_sbh[vt_gdn_rbase + c] + vp * vt_gdn_bk[c]; + vt_gdn_sbh[vt_gdn_rbase + c] = s; + po += s * vt_gdn_bq[c]; + } + float o = vt_gdn_rowsum(po); + if (vt_gdn_vrow < p.dv && vt_gdn_wk == 0u) { + VT_STORE(O32, O16, VT_PC_OUT_DT, p.out_off, hidx * p.dv + vt_gdn_vrow, o); + } +} + +#endif // VT_GDN_RECURRENCE_GLSL diff --git a/src/vt/vulkan/vulkan_ops.cpp b/src/vt/vulkan/vulkan_ops.cpp index f16b37c0d..cf003202e 100644 --- a/src/vt/vulkan/vulkan_ops.cpp +++ b/src/vt/vulkan/vulkan_ops.cpp @@ -207,6 +207,15 @@ struct GdnPostConvParams { uint32_t g_off, beta_off, alog_off, dtb_off; float eps; }; +// ONE block for BOTH recurrences: vt_gdn_prefill and vt_gdn_decode share their +// step body through an include, so they must also share their push layout. The +// prefill shader ignores has_idx / n_state_rows (they are the decode state-row +// indirection) rather than each op carrying a block that drifts from the other. +struct GdnRecurrenceParams { + uint32_t hk, dk, hv, dv, nv, ratio, has_idx, n_state_rows; + uint32_t q_off, k_off, v_off, out_off, g_off, beta_off, state_off, meta_off; + float scale; +}; // Vulkan only GUARANTEES 128 bytes of push-constant space (maxPushConstantsSize); // staying inside it is what keeps this backend portable without a probe. @@ -226,6 +235,8 @@ static_assert(sizeof(RmsNormGatedParams) <= 128, "push constants must fit the guaranteed 128 bytes"); static_assert(sizeof(GdnStateGatherParams) <= 128, "push constants must fit the guaranteed 128 bytes"); +static_assert(sizeof(GdnRecurrenceParams) <= 128, + "push constants must fit the guaranteed 128 bytes"); template void Go(const char* name, const Binder& b, const P& p, uint32_t groups, @@ -837,10 +848,10 @@ void QkvSplitKernel(Queue&, Tensor& q_out, Tensor& k_out, Tensor& v_out, const T // before this row every one of these ops fell to the PORTABLE CPU REFERENCE TIER // on Vulkan — correct, and running on the host against shared memory. // +// The two RECURRENCES themselves (kGdnPrefill / kGdnDecode) landed in the +// follow-up row BACKEND-VULKAN-GDN-CORE and are at the bottom of this section. +// // WHAT IS DELIBERATELY NOT HERE, so a later row does not have to re-derive it: -// * kGdnPrefill / kGdnDecode — the chunked gated-delta recurrences. They are -// not glue; they are the model's linear-attention core and a project of -// their own. They stay on the reference tier. // * kRopeCosSinCache — the rotary TABLE BUILD, which constructs its angles in // `double` (cpu_ops.cpp RopeCosSinCacheKernel). GLSL has no f64 here and // emulating it would be a numerics divergence in the one place vLLM itself @@ -1088,6 +1099,130 @@ void GdnPostConvKernel(Queue&, Tensor& q_out, Tensor& k_out, Tensor& v_out, Tens Go("vt_gdn_post_conv", bind, p, static_cast(t * (hk + hv)), spec, 3); } +// --------------------------------------------------------------------------- +// The two GATED-DELTA RECURRENCES (BACKEND-VULKAN-GDN-CORE). These are not glue: +// they ARE Qwen3.6's linear-attention core, and with the glue above already +// native they were the whole of what the model still ran on the host — a 512 +// token prompt spent ~280 s in kGdnPrefill on the reference tier. +// +// The shaders (src/vt/vulkan/shaders/vt_gdn_prefill.comp, vt_gdn_decode.comp and +// the shared vt_gdn_recurrence.glsl) carry the port provenance and the tile +// geometry. What the HOST has to get right is only the grid and the decline. +// --------------------------------------------------------------------------- + +// Must equal VT_GDN_BV / VT_GDN_MAX_DK in vt_gdn_recurrence.glsl. Duplicated +// rather than shared because the shader constants are in GLSL and the SPIR-V is +// committed, so nothing can compute one from the other — the gate in +// tests/vt/test_vulkan_backend.cpp exercises a Dv that is NOT a multiple of the +// tile so a drift shows up as wrong numbers there rather than in a model run. +constexpr int64_t kGdnTileRows = 16; +constexpr int64_t kGdnMaxDk = 128; + +// Shared grid + binding setup for the two recurrences. Returns false when this +// backend cannot serve the shape and the caller must decline to the next +// provider. +bool GdnRecurrenceCommon(const Tensor& out, const Tensor& q_in, const Tensor& k, + const Tensor& v, const Tensor& g, const Tensor& beta, + const Tensor& state, Binder& bind, GdnRecurrenceParams& p, + uint32_t spec[2], float scale) { + const int64_t hv = state.shape[1], dv = state.shape[2], dk = state.shape[3]; + const int64_t hk = q_in.shape[1]; + // PER-CALL REFUSAL rather than a throw, the same seam vt_paged_attn uses for an + // fp8 KV cache: declining forwards to the portable reference tier, which is + // correct for every shape, instead of REMOVING a capability the backend already + // had. Two reasons to decline. + // * Dk beyond the shared tile's compile-time extent. The tile has to be sized + // at compile time against Vulkan's GUARANTEED 16 KB of shared memory, and + // the real gate dim is 128. + // * q/k/v disagreeing on dtype. One specialization constant covers the three + // (they come out of one GdnPostConv dispatch and always agree), and CUDA + // asserts the same thing (cuda_gdn.cu:2577). + if (dk > kGdnMaxDk || dk <= 0) return false; + if (k.dtype != q_in.dtype || v.dtype != q_in.dtype) return false; + const uint32_t q_off = bind.Add(q_in, "gdn recurrence: q"); + const uint32_t k_off = bind.Add(k, "gdn recurrence: k"); + const uint32_t v_off = bind.Add(v, "gdn recurrence: v"); + const uint32_t out_off = bind.Add(out, "gdn recurrence: out"); + // g, beta and the state are f32 by the op contract on this device + // (src/vt/ops.cpp:1629-1643 — a compressed state is CUDA-only), so one binding + // each rather than a dtype-erased pair whose 16-bit half could never be taken. + const uint32_t g_off = bind.AddU32Only(g, "gdn recurrence: g"); + const uint32_t beta_off = bind.AddU32Only(beta, "gdn recurrence: beta"); + const uint32_t state_off = bind.AddU32Only(state, "gdn recurrence: state"); + spec[0] = DtypeCode(q_in.dtype); + spec[1] = DtypeCode(out.dtype); + p.hk = static_cast(hk); + p.dk = static_cast(dk); + p.hv = static_cast(hv); + p.dv = static_cast(dv); + p.nv = static_cast((dv + kGdnTileRows - 1) / kGdnTileRows); + p.ratio = static_cast(hv / hk); + p.has_idx = 0; + p.n_state_rows = static_cast(state.shape[0]); + p.q_off = q_off; + p.k_off = k_off; + p.v_off = v_off; + p.out_off = out_off; + p.g_off = g_off; + p.beta_off = beta_off; + p.state_off = state_off; + p.meta_off = 0; + p.scale = scale; + return true; +} + +// cpu_ops.cpp:1331-1366 GdnPrefillKernel. ONE WORKGROUP PER +// (sequence, value-head, value-tile) — the CPU kernel's own (SEQUENCE, +// VALUE-HEAD) chunking plus the value-row tile our CUDA kernel already uses as +// its grid.x (cuda_gdn.cu:2421). NOT FlatGroupCount: the whole workgroup +// cooperates on one tile, and the sequence stays sequential inside it. +void GdnPrefillKernel(Queue& q, Tensor& out, const Tensor& q_in, const Tensor& k, + const Tensor& v, const Tensor& g, const Tensor& beta, Tensor& state, + const Tensor& query_start_loc, const GdnArgs& args) { + const int64_t n = state.shape[0], hv = state.shape[1], dv = state.shape[2]; + if (n == 0 || hv == 0 || dv == 0) return; + Binder bind; + GdnRecurrenceParams p{}; + uint32_t spec[2] = {0, 0}; + if (!GdnRecurrenceCommon(out, q_in, k, v, g, beta, state, bind, p, spec, args.scale)) { + auto next = reinterpret_cast( + GetOpFallback(OpId::kGdnPrefill, DeviceType::kVULKAN, kNativeProviderName)); + next(q, out, q_in, k, v, g, beta, state, query_start_loc, args); + return; + } + p.meta_off = bind.AddU32Only(query_start_loc, "gdn_prefill: query_start_loc"); + Go("vt_gdn_prefill", bind, p, static_cast(n * hv * p.nv), spec, 2); +} + +// cpu_ops.cpp:1368-1396 GdnDecodeKernel, one step per batch token. Same grid with +// the sequence axis replaced by the batch — cuda_gdn.cu:2513's +// (NV, n*Hv) flattened. +void GdnDecodeKernel(Queue& q, Tensor& out, const Tensor& q_in, const Tensor& k, + const Tensor& v, const Tensor& g, const Tensor& beta, Tensor& state, + const Tensor* state_idx, const GdnArgs& args) { + const int64_t batch = q_in.shape[0], hv = state.shape[1], dv = state.shape[2]; + if (batch == 0 || hv == 0 || dv == 0) return; + Binder bind; + GdnRecurrenceParams p{}; + uint32_t spec[2] = {0, 0}; + if (!GdnRecurrenceCommon(out, q_in, k, v, g, beta, state, bind, p, spec, args.scale)) { + auto next = reinterpret_cast( + GetOpFallback(OpId::kGdnDecode, DeviceType::kVULKAN, kNativeProviderName)); + next(q, out, q_in, k, v, g, beta, state, state_idx, args); + return; + } + // Binding 11 is always written: a descriptor a shader statically uses must be + // valid even on the path that never reads it. With has_idx == 0 it aliases the + // state buffer and is dead. + if (state_idx != nullptr) { + p.has_idx = 1; + p.meta_off = bind.AddU32Only(*state_idx, "gdn_decode: state_idx"); + } else { + p.meta_off = bind.AddU32Only(state, "gdn_decode: state"); + } + Go("vt_gdn_decode", bind, p, static_cast(batch * hv * p.nv), spec, 2); +} + struct Registrar { Registrar() { // Same guard as the backend registrar: a Vulkan-enabled build on a host with @@ -1128,10 +1263,10 @@ struct Registrar { reinterpret_cast(static_cast(&RmsNormKernel))); RegisterOp(OpId::kFusedChain, DeviceType::kVULKAN, reinterpret_cast(static_cast(&FusedChainKernel))); - // BACKEND-VULKAN-GDN: the GDN glue family. kGdnPrefill/kGdnDecode (the - // recurrences), kCausalConv1dFwd (the prefill conv) and kRopeCosSinCache (the - // double-precision rotary table, deliberately host-side) stay on the portable - // reference tier; see the block comment above these kernels. + // BACKEND-VULKAN-GDN: the GDN glue family. kCausalConv1dFwd (the prefill + // conv) and kRopeCosSinCache (the double-precision rotary table, deliberately + // host-side) stay on the portable reference tier; see the block comment above + // these kernels. RegisterOp(OpId::kSigmoidGateBf16, DeviceType::kVULKAN, reinterpret_cast(static_cast(&SigmoidGateBf16Kernel))); RegisterOp(OpId::kRmsNormGated, DeviceType::kVULKAN, @@ -1145,6 +1280,11 @@ struct Registrar { reinterpret_cast(static_cast(&CausalConv1dUpdateKernel))); RegisterOp(OpId::kGdnPostConv, DeviceType::kVULKAN, reinterpret_cast(static_cast(&GdnPostConvKernel))); + // BACKEND-VULKAN-GDN-CORE: the two recurrences. + RegisterOp(OpId::kGdnPrefill, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&GdnPrefillKernel))); + RegisterOp(OpId::kGdnDecode, DeviceType::kVULKAN, + reinterpret_cast(static_cast(&GdnDecodeKernel))); } } registrar; diff --git a/src/vt/vulkan/vulkan_spirv.cpp b/src/vt/vulkan/vulkan_spirv.cpp index ea3e78903..e69f2cd5d 100644 --- a/src/vt/vulkan/vulkan_spirv.cpp +++ b/src/vt/vulkan/vulkan_spirv.cpp @@ -2658,6 +2658,720 @@ constexpr uint32_t kSpv_vt_fused_chain[] = { 0x00000182u, 0x00000181u, 0x000200feu, 0x00000182u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_gdn_decode[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000043du, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000169u, + 0x000003a6u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x00000169u, 0x0000000bu, 0x0000001bu, 0x00030047u, 0x00000179u, 0x00000002u, 0x00050048u, 0x00000179u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000179u, 0x00000001u, 0x00000023u, 0x00000004u, + 0x00050048u, 0x00000179u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000179u, 0x00000003u, + 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000179u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, + 0x00000179u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000179u, 0x00000006u, 0x00000023u, + 0x00000018u, 0x00050048u, 0x00000179u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000179u, + 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000179u, 0x00000009u, 0x00000023u, 0x00000024u, + 0x00050048u, 0x00000179u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000179u, 0x0000000bu, + 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000179u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, + 0x00000179u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000179u, 0x0000000eu, 0x00000023u, + 0x00000038u, 0x00050048u, 0x00000179u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000179u, + 0x00000010u, 0x00000023u, 0x00000040u, 0x00040047u, 0x000001fbu, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000001fcu, 0x00000002u, 0x00050048u, 0x000001fcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x000001feu, 0x00000021u, 0x0000000au, 0x00040047u, 0x000001feu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000026au, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000026fu, 0x00000006u, 0x00000004u, 0x00030047u, + 0x00000270u, 0x00000002u, 0x00040048u, 0x00000270u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000270u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000272u, 0x00000018u, 0x00040047u, 0x00000272u, + 0x00000021u, 0x00000002u, 0x00040047u, 0x00000272u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000280u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x00000281u, 0x00000002u, 0x00040048u, 0x00000281u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x00000281u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000283u, + 0x00000018u, 0x00040047u, 0x00000283u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000283u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x0000029au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000029bu, 0x00000002u, + 0x00040048u, 0x0000029bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000029bu, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x0000029du, 0x00000018u, 0x00040047u, 0x0000029du, 0x00000021u, 0x00000000u, + 0x00040047u, 0x0000029du, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002aau, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000002abu, 0x00000002u, 0x00040048u, 0x000002abu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000002abu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002adu, 0x00000018u, 0x00040047u, + 0x000002adu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000002adu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002cbu, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002ccu, 0x00000002u, 0x00040048u, 0x000002ccu, + 0x00000000u, 0x00000018u, 0x00050048u, 0x000002ccu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x000002ceu, 0x00000018u, 0x00040047u, 0x000002ceu, 0x00000021u, 0x00000008u, 0x00040047u, 0x000002ceu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x000002dau, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002dbu, + 0x00000002u, 0x00040048u, 0x000002dbu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002dbu, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x000002ddu, 0x00000018u, 0x00040047u, 0x000002ddu, 0x00000021u, + 0x00000009u, 0x00040047u, 0x000002ddu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000316u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x00000317u, 0x00000002u, 0x00040048u, 0x00000317u, 0x00000000u, 0x00000018u, + 0x00050048u, 0x00000317u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000319u, 0x00000018u, + 0x00040047u, 0x00000319u, 0x00000021u, 0x00000004u, 0x00040047u, 0x00000319u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x00000328u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000329u, 0x00000002u, 0x00040048u, + 0x00000329u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000329u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x0000032bu, 0x00000018u, 0x00040047u, 0x0000032bu, 0x00000021u, 0x00000005u, 0x00040047u, + 0x0000032bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000379u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x0000037du, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000037eu, 0x00000002u, 0x00050048u, 0x0000037eu, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000380u, 0x00000021u, 0x00000006u, 0x00040047u, + 0x00000380u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000390u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000391u, 0x00000002u, 0x00050048u, 0x00000391u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000393u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000393u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000003a6u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000003d3u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000003d4u, 0x00000002u, 0x00040048u, 0x000003d4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003d4u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003d6u, 0x00000018u, 0x00040047u, 0x000003d6u, + 0x00000021u, 0x0000000bu, 0x00040047u, 0x000003d6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000043cu, + 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, + 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, + 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, + 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, + 0x00040021u, 0x00000022u, 0x00000002u, 0x00000007u, 0x00040021u, 0x00000026u, 0x00000008u, 0x0000000du, + 0x00060021u, 0x0000002au, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00040015u, 0x0000003bu, + 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000003bu, 0x0000003cu, 0x00000010u, 0x00020014u, 0x00000044u, + 0x0004002bu, 0x00000006u, 0x00000046u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x0000004cu, 0x007fffffu, + 0x0004002bu, 0x00000006u, 0x0000004eu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000055u, 0x00000040u, + 0x0004002bu, 0x00000006u, 0x00000057u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x0000005bu, 0x00007fffu, + 0x0004002bu, 0x00000006u, 0x0000005eu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000006au, 0x00008000u, + 0x0004002bu, 0x0000003bu, 0x0000006fu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000071u, 0x0000001fu, + 0x0004002bu, 0x00000006u, 0x00000075u, 0x000003ffu, 0x0004002bu, 0x0000003bu, 0x0000007eu, 0x0000000du, + 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000400u, 0x0004002bu, 0x0000003bu, 0x00000098u, 0x00000001u, + 0x0004002bu, 0x00000006u, 0x000000a0u, 0x00000071u, 0x0004002bu, 0x0000003bu, 0x000000a3u, 0x00000017u, + 0x0004002bu, 0x00000006u, 0x000000adu, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000c1u, 0x000000ffu, + 0x00040020u, 0x000000c3u, 0x00000007u, 0x0000003bu, 0x0004002bu, 0x0000003bu, 0x000000c7u, 0x0000007fu, + 0x0004002bu, 0x0000003bu, 0x000000c9u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000d3u, 0x00007c00u, + 0x0004002bu, 0x00000006u, 0x000000dau, 0x00000200u, 0x0004002bu, 0x0000003bu, 0x000000e3u, 0x0000001fu, + 0x0004002bu, 0x0000003bu, 0x000000ebu, 0x00000000u, 0x0004002bu, 0x0000003bu, 0x000000f0u, 0xfffffff6u, + 0x0004002bu, 0x00000006u, 0x000000f6u, 0x00800000u, 0x0004002bu, 0x0000003bu, 0x000000fau, 0x0000000eu, + 0x0004002bu, 0x00000006u, 0x0000012du, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000130u, 0x00001000u, + 0x00040020u, 0x00000165u, 0x00000006u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000166u, 0x00000006u, + 0x00040017u, 0x00000167u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000168u, 0x00000001u, 0x00000167u, + 0x0004003bu, 0x00000168u, 0x00000169u, 0x00000001u, 0x00040020u, 0x0000016au, 0x00000001u, 0x00000006u, + 0x0004003bu, 0x00000165u, 0x0000016du, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000016fu, 0x00000008u, + 0x0004003bu, 0x00000165u, 0x00000171u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000174u, 0x00000006u, + 0x0004003bu, 0x00000165u, 0x00000178u, 0x00000006u, 0x0013001eu, 0x00000179u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, + 0x0000017au, 0x00000009u, 0x00000179u, 0x0004003bu, 0x0000017au, 0x0000017bu, 0x00000009u, 0x00040020u, + 0x0000017cu, 0x00000009u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000180u, 0x00000006u, 0x0004003bu, + 0x00000165u, 0x0000018au, 0x00000006u, 0x0004003bu, 0x00000165u, 0x0000018eu, 0x00000006u, 0x0004002bu, + 0x00000006u, 0x00000195u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000196u, 0x00000108u, 0x0004002bu, + 0x00000006u, 0x00000197u, 0x00000080u, 0x0004001cu, 0x00000198u, 0x00000008u, 0x00000197u, 0x00040020u, + 0x00000199u, 0x00000004u, 0x00000198u, 0x0004003bu, 0x00000199u, 0x0000019au, 0x00000004u, 0x00040020u, + 0x0000019du, 0x00000004u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000001a0u, 0x00000004u, 0x0004002bu, + 0x0000003bu, 0x000001c3u, 0x00000002u, 0x0004002bu, 0x0000003bu, 0x000001cbu, 0x00000003u, 0x0004002bu, + 0x00000006u, 0x000001dau, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000001f5u, 0x00000000u, 0x0003001du, + 0x000001fbu, 0x00000006u, 0x0003001eu, 0x000001fcu, 0x000001fbu, 0x00040020u, 0x000001fdu, 0x0000000cu, + 0x000001fcu, 0x0004003bu, 0x000001fdu, 0x000001feu, 0x0000000cu, 0x00040020u, 0x00000202u, 0x0000000cu, + 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000206u, 0x00000810u, 0x0004001cu, 0x00000207u, 0x00000008u, + 0x00000206u, 0x00040020u, 0x00000208u, 0x00000004u, 0x00000207u, 0x0004003bu, 0x00000208u, 0x00000209u, + 0x00000004u, 0x0004003bu, 0x00000199u, 0x00000268u, 0x00000004u, 0x00040032u, 0x00000006u, 0x0000026au, + 0x00000000u, 0x00060034u, 0x00000044u, 0x0000026bu, 0x000000aau, 0x0000026au, 0x0000004eu, 0x0003001du, + 0x0000026fu, 0x00000006u, 0x0003001eu, 0x00000270u, 0x0000026fu, 0x00040020u, 0x00000271u, 0x0000000cu, + 0x00000270u, 0x0004003bu, 0x00000271u, 0x00000272u, 0x0000000cu, 0x0004002bu, 0x0000003bu, 0x00000273u, + 0x00000009u, 0x00040015u, 0x0000027fu, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000280u, 0x0000027fu, + 0x0003001eu, 0x00000281u, 0x00000280u, 0x00040020u, 0x00000282u, 0x0000000cu, 0x00000281u, 0x0004003bu, + 0x00000282u, 0x00000283u, 0x0000000cu, 0x00040020u, 0x0000028bu, 0x0000000cu, 0x0000027fu, 0x0004003bu, + 0x00000199u, 0x00000294u, 0x00000004u, 0x00060034u, 0x00000044u, 0x00000296u, 0x000000aau, 0x0000026au, + 0x0000004eu, 0x0003001du, 0x0000029au, 0x00000006u, 0x0003001eu, 0x0000029bu, 0x0000029au, 0x00040020u, + 0x0000029cu, 0x0000000cu, 0x0000029bu, 0x0004003bu, 0x0000029cu, 0x0000029du, 0x0000000cu, 0x0004002bu, + 0x0000003bu, 0x0000029eu, 0x00000008u, 0x0003001du, 0x000002aau, 0x0000027fu, 0x0003001eu, 0x000002abu, + 0x000002aau, 0x00040020u, 0x000002acu, 0x0000000cu, 0x000002abu, 0x0004003bu, 0x000002acu, 0x000002adu, + 0x0000000cu, 0x00040020u, 0x000002bcu, 0x00000009u, 0x00000008u, 0x0003001du, 0x000002cbu, 0x00000006u, + 0x0003001eu, 0x000002ccu, 0x000002cbu, 0x00040020u, 0x000002cdu, 0x0000000cu, 0x000002ccu, 0x0004003bu, + 0x000002cdu, 0x000002ceu, 0x0000000cu, 0x0004002bu, 0x0000003bu, 0x000002cfu, 0x0000000cu, 0x0003001du, + 0x000002dau, 0x00000006u, 0x0003001eu, 0x000002dbu, 0x000002dau, 0x00040020u, 0x000002dcu, 0x0000000cu, + 0x000002dbu, 0x0004003bu, 0x000002dcu, 0x000002ddu, 0x0000000cu, 0x00060034u, 0x00000044u, 0x00000312u, + 0x000000aau, 0x0000026au, 0x0000004eu, 0x0003001du, 0x00000316u, 0x00000006u, 0x0003001eu, 0x00000317u, + 0x00000316u, 0x00040020u, 0x00000318u, 0x0000000cu, 0x00000317u, 0x0004003bu, 0x00000318u, 0x00000319u, + 0x0000000cu, 0x0003001du, 0x00000328u, 0x0000027fu, 0x0003001eu, 0x00000329u, 0x00000328u, 0x00040020u, + 0x0000032au, 0x0000000cu, 0x00000329u, 0x0004003bu, 0x0000032au, 0x0000032bu, 0x0000000cu, 0x00040032u, + 0x00000006u, 0x00000379u, 0x00000000u, 0x00060034u, 0x00000044u, 0x0000037au, 0x000000aau, 0x00000379u, + 0x0000004eu, 0x0003001du, 0x0000037du, 0x00000006u, 0x0003001eu, 0x0000037eu, 0x0000037du, 0x00040020u, + 0x0000037fu, 0x0000000cu, 0x0000037eu, 0x0004003bu, 0x0000037fu, 0x00000380u, 0x0000000cu, 0x0004002bu, + 0x0000003bu, 0x00000381u, 0x0000000bu, 0x0003001du, 0x00000390u, 0x0000027fu, 0x0003001eu, 0x00000391u, + 0x00000390u, 0x00040020u, 0x00000392u, 0x0000000cu, 0x00000391u, 0x0004003bu, 0x00000392u, 0x00000393u, + 0x0000000cu, 0x0003002au, 0x00000044u, 0x000003a4u, 0x0004003bu, 0x00000168u, 0x000003a6u, 0x00000001u, + 0x0004002bu, 0x0000003bu, 0x000003abu, 0x00000004u, 0x0004002bu, 0x0000003bu, 0x000003c0u, 0x00000005u, + 0x0004002bu, 0x0000003bu, 0x000003ccu, 0x00000006u, 0x0003001du, 0x000003d3u, 0x00000006u, 0x0003001eu, + 0x000003d4u, 0x000003d3u, 0x00040020u, 0x000003d5u, 0x0000000cu, 0x000003d4u, 0x0004003bu, 0x000003d5u, + 0x000003d6u, 0x0000000cu, 0x0004002bu, 0x0000003bu, 0x000003e6u, 0x00000007u, 0x00060034u, 0x00000044u, + 0x000003fau, 0x000000aau, 0x00000379u, 0x0000004eu, 0x0004003bu, 0x00000199u, 0x0000043bu, 0x00000004u, + 0x0006002cu, 0x00000167u, 0x0000043cu, 0x00000197u, 0x0000005eu, 0x0000005eu, 0x00050036u, 0x00000002u, + 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x000003a5u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003afu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003b9u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003c4u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003cau, + 0x00000007u, 0x0004003bu, 0x000000c3u, 0x000003d2u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000041eu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000041fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000426u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000428u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042au, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042fu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000431u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000434u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000436u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000438u, + 0x00000007u, 0x00050041u, 0x0000016au, 0x000003a7u, 0x000003a6u, 0x0000004eu, 0x0004003du, 0x00000006u, + 0x000003a8u, 0x000003a7u, 0x0003003eu, 0x000003a5u, 0x000003a8u, 0x0004003du, 0x00000006u, 0x000003aau, + 0x000003a5u, 0x00050041u, 0x0000017cu, 0x000003acu, 0x0000017bu, 0x000003abu, 0x0004003du, 0x00000006u, + 0x000003adu, 0x000003acu, 0x00050089u, 0x00000006u, 0x000003aeu, 0x000003aau, 0x000003adu, 0x0003003eu, + 0x000003a9u, 0x000003aeu, 0x0004003du, 0x00000006u, 0x000003b0u, 0x000003a5u, 0x00050041u, 0x0000017cu, + 0x000003b1u, 0x0000017bu, 0x000003abu, 0x0004003du, 0x00000006u, 0x000003b2u, 0x000003b1u, 0x00050086u, + 0x00000006u, 0x000003b3u, 0x000003b0u, 0x000003b2u, 0x0003003eu, 0x000003afu, 0x000003b3u, 0x0004003du, + 0x00000006u, 0x000003b5u, 0x000003afu, 0x00050041u, 0x0000017cu, 0x000003b6u, 0x0000017bu, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x000003b7u, 0x000003b6u, 0x00050089u, 0x00000006u, 0x000003b8u, 0x000003b5u, + 0x000003b7u, 0x0003003eu, 0x000003b4u, 0x000003b8u, 0x0004003du, 0x00000006u, 0x000003bau, 0x000003afu, + 0x00050041u, 0x0000017cu, 0x000003bbu, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000003bcu, + 0x000003bbu, 0x00050086u, 0x00000006u, 0x000003bdu, 0x000003bau, 0x000003bcu, 0x0003003eu, 0x000003b9u, + 0x000003bdu, 0x0004003du, 0x00000006u, 0x000003bfu, 0x000003b4u, 0x00050041u, 0x0000017cu, 0x000003c1u, + 0x0000017bu, 0x000003c0u, 0x0004003du, 0x00000006u, 0x000003c2u, 0x000003c1u, 0x00050086u, 0x00000006u, + 0x000003c3u, 0x000003bfu, 0x000003c2u, 0x0003003eu, 0x000003beu, 0x000003c3u, 0x0004003du, 0x00000006u, + 0x000003c5u, 0x000003a9u, 0x00050084u, 0x00000006u, 0x000003c6u, 0x000003c5u, 0x000001dau, 0x0003003eu, + 0x000003c4u, 0x000003c6u, 0x0004003du, 0x00000006u, 0x000003c8u, 0x000003c4u, 0x0003003eu, 0x000003c7u, + 0x000003c8u, 0x00050039u, 0x00000002u, 0x000003c9u, 0x00000024u, 0x000003c7u, 0x0004003du, 0x00000006u, + 0x000003cbu, 0x000003b9u, 0x0003003eu, 0x000003cau, 0x000003cbu, 0x00050041u, 0x0000017cu, 0x000003cdu, + 0x0000017bu, 0x000003ccu, 0x0004003du, 0x00000006u, 0x000003ceu, 0x000003cdu, 0x000500abu, 0x00000044u, + 0x000003cfu, 0x000003ceu, 0x0000004eu, 0x000300f7u, 0x000003d1u, 0x00000000u, 0x000400fau, 0x000003cfu, + 0x000003d0u, 0x000003d1u, 0x000200f8u, 0x000003d0u, 0x00050041u, 0x0000017cu, 0x000003d7u, 0x0000017bu, + 0x000000c9u, 0x0004003du, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x000500c2u, 0x00000006u, 0x000003d9u, + 0x000003d8u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000003dau, 0x000003b9u, 0x00050080u, 0x00000006u, + 0x000003dbu, 0x000003d9u, 0x000003dau, 0x00060041u, 0x00000202u, 0x000003dcu, 0x000003d6u, 0x000000ebu, + 0x000003dbu, 0x0004003du, 0x00000006u, 0x000003ddu, 0x000003dcu, 0x0004007cu, 0x0000003bu, 0x000003deu, + 0x000003ddu, 0x0003003eu, 0x000003d2u, 0x000003deu, 0x0004003du, 0x0000003bu, 0x000003dfu, 0x000003d2u, + 0x000500b1u, 0x00000044u, 0x000003e0u, 0x000003dfu, 0x000000ebu, 0x000400a8u, 0x00000044u, 0x000003e1u, + 0x000003e0u, 0x000300f7u, 0x000003e3u, 0x00000000u, 0x000400fau, 0x000003e1u, 0x000003e2u, 0x000003e3u, + 0x000200f8u, 0x000003e2u, 0x0004003du, 0x0000003bu, 0x000003e4u, 0x000003d2u, 0x0004007cu, 0x00000006u, + 0x000003e5u, 0x000003e4u, 0x00050041u, 0x0000017cu, 0x000003e7u, 0x0000017bu, 0x000003e6u, 0x0004003du, + 0x00000006u, 0x000003e8u, 0x000003e7u, 0x000500aeu, 0x00000044u, 0x000003e9u, 0x000003e5u, 0x000003e8u, + 0x000200f9u, 0x000003e3u, 0x000200f8u, 0x000003e3u, 0x000700f5u, 0x00000044u, 0x000003eau, 0x000003e0u, + 0x000003d0u, 0x000003e9u, 0x000003e2u, 0x000300f7u, 0x000003ecu, 0x00000000u, 0x000400fau, 0x000003eau, + 0x000003ebu, 0x000003ecu, 0x000200f8u, 0x000003ebu, 0x0004003du, 0x00000006u, 0x000003edu, 0x00000174u, + 0x00050041u, 0x0000017cu, 0x000003eeu, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x000003efu, + 0x000003eeu, 0x000500b0u, 0x00000044u, 0x000003f0u, 0x000003edu, 0x000003efu, 0x0004003du, 0x00000006u, + 0x000003f1u, 0x00000171u, 0x000500aau, 0x00000044u, 0x000003f2u, 0x000003f1u, 0x0000004eu, 0x000500a7u, + 0x00000044u, 0x000003f3u, 0x000003f0u, 0x000003f2u, 0x000300f7u, 0x000003f5u, 0x00000000u, 0x000400fau, + 0x000003f3u, 0x000003f4u, 0x000003f5u, 0x000200f8u, 0x000003f4u, 0x000200f9u, 0x000003f6u, 0x000200f8u, + 0x000003f6u, 0x000400f6u, 0x000003f8u, 0x000003f9u, 0x00000000u, 0x000200f9u, 0x000003f7u, 0x000200f8u, + 0x000003f7u, 0x000300f7u, 0x000003fcu, 0x00000000u, 0x000400fau, 0x000003fau, 0x000003fbu, 0x0000040eu, + 0x000200f8u, 0x000003fbu, 0x00050041u, 0x0000017cu, 0x000003fdu, 0x0000017bu, 0x00000381u, 0x0004003du, + 0x00000006u, 0x000003feu, 0x000003fdu, 0x000500c2u, 0x00000006u, 0x000003ffu, 0x000003feu, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x00000400u, 0x000003b9u, 0x00050041u, 0x0000017cu, 0x00000401u, 0x0000017bu, + 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000402u, 0x00000401u, 0x00050084u, 0x00000006u, 0x00000403u, + 0x00000400u, 0x00000402u, 0x0004003du, 0x00000006u, 0x00000404u, 0x000003b4u, 0x00050080u, 0x00000006u, + 0x00000405u, 0x00000403u, 0x00000404u, 0x00050041u, 0x0000017cu, 0x00000406u, 0x0000017bu, 0x000001cbu, + 0x0004003du, 0x00000006u, 0x00000407u, 0x00000406u, 0x00050084u, 0x00000006u, 0x00000408u, 0x00000405u, + 0x00000407u, 0x0004003du, 0x00000006u, 0x00000409u, 0x00000174u, 0x00050080u, 0x00000006u, 0x0000040au, + 0x00000408u, 0x00000409u, 0x00050080u, 0x00000006u, 0x0000040bu, 0x000003ffu, 0x0000040au, 0x0004007cu, + 0x00000006u, 0x0000040cu, 0x000001f5u, 0x00060041u, 0x00000202u, 0x0000040du, 0x00000380u, 0x000000ebu, + 0x0000040bu, 0x0003003eu, 0x0000040du, 0x0000040cu, 0x000200f9u, 0x000003fcu, 0x000200f8u, 0x0000040eu, + 0x00050041u, 0x0000017cu, 0x0000040fu, 0x0000017bu, 0x00000381u, 0x0004003du, 0x00000006u, 0x00000410u, + 0x0000040fu, 0x000500c2u, 0x00000006u, 0x00000411u, 0x00000410u, 0x00000098u, 0x0004003du, 0x00000006u, + 0x00000412u, 0x000003b9u, 0x00050041u, 0x0000017cu, 0x00000413u, 0x0000017bu, 0x000001c3u, 0x0004003du, + 0x00000006u, 0x00000414u, 0x00000413u, 0x00050084u, 0x00000006u, 0x00000415u, 0x00000412u, 0x00000414u, + 0x0004003du, 0x00000006u, 0x00000416u, 0x000003b4u, 0x00050080u, 0x00000006u, 0x00000417u, 0x00000415u, + 0x00000416u, 0x00050041u, 0x0000017cu, 0x00000418u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, + 0x00000419u, 0x00000418u, 0x00050084u, 0x00000006u, 0x0000041au, 0x00000417u, 0x00000419u, 0x0004003du, + 0x00000006u, 0x0000041bu, 0x00000174u, 0x00050080u, 0x00000006u, 0x0000041cu, 0x0000041au, 0x0000041bu, + 0x00050080u, 0x00000006u, 0x0000041du, 0x00000411u, 0x0000041cu, 0x0003003eu, 0x0000041eu, 0x000001f5u, + 0x0003003eu, 0x0000041fu, 0x00000379u, 0x00060039u, 0x00000006u, 0x00000420u, 0x00000020u, 0x0000041eu, + 0x0000041fu, 0x00040071u, 0x0000027fu, 0x00000421u, 0x00000420u, 0x00060041u, 0x0000028bu, 0x00000422u, + 0x00000393u, 0x000000ebu, 0x0000041du, 0x0003003eu, 0x00000422u, 0x00000421u, 0x000200f9u, 0x000003fcu, + 0x000200f8u, 0x000003fcu, 0x000200f9u, 0x000003f9u, 0x000200f8u, 0x000003f9u, 0x000400fau, 0x000003a4u, + 0x000003f6u, 0x000003f8u, 0x000200f8u, 0x000003f8u, 0x000200f9u, 0x000003f5u, 0x000200f8u, 0x000003f5u, + 0x000100fdu, 0x000200f8u, 0x000003ecu, 0x0004003du, 0x0000003bu, 0x00000424u, 0x000003d2u, 0x0004007cu, + 0x00000006u, 0x00000425u, 0x00000424u, 0x0003003eu, 0x000003cau, 0x00000425u, 0x000200f9u, 0x000003d1u, + 0x000200f8u, 0x000003d1u, 0x0004003du, 0x00000006u, 0x00000427u, 0x000003cau, 0x0003003eu, 0x00000426u, + 0x00000427u, 0x0004003du, 0x00000006u, 0x00000429u, 0x000003b4u, 0x0003003eu, 0x00000428u, 0x00000429u, + 0x0004003du, 0x00000006u, 0x0000042bu, 0x000003c4u, 0x0003003eu, 0x0000042au, 0x0000042bu, 0x00070039u, + 0x00000002u, 0x0000042cu, 0x0000002eu, 0x00000426u, 0x00000428u, 0x0000042au, 0x0004003du, 0x00000006u, + 0x0000042eu, 0x000003b9u, 0x0003003eu, 0x0000042du, 0x0000042eu, 0x0004003du, 0x00000006u, 0x00000430u, + 0x000003b4u, 0x0003003eu, 0x0000042fu, 0x00000430u, 0x0004003du, 0x00000006u, 0x00000432u, 0x000003beu, + 0x0003003eu, 0x00000431u, 0x00000432u, 0x00070039u, 0x00000002u, 0x00000433u, 0x00000038u, 0x0000042du, + 0x0000042fu, 0x00000431u, 0x0004003du, 0x00000006u, 0x00000435u, 0x000003cau, 0x0003003eu, 0x00000434u, + 0x00000435u, 0x0004003du, 0x00000006u, 0x00000437u, 0x000003b4u, 0x0003003eu, 0x00000436u, 0x00000437u, + 0x0004003du, 0x00000006u, 0x00000439u, 0x000003c4u, 0x0003003eu, 0x00000438u, 0x00000439u, 0x00070039u, + 0x00000002u, 0x0000043au, 0x00000033u, 0x00000434u, 0x00000436u, 0x00000438u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000008u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, + 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000006u, 0x0000003au, 0x0000000au, 0x000500c4u, 0x00000006u, + 0x0000003du, 0x0000003au, 0x0000003cu, 0x0004007cu, 0x00000008u, 0x0000003eu, 0x0000003du, 0x000200feu, + 0x0000003eu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, + 0x0000000du, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000041u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000005au, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000042u, 0x0000000fu, + 0x0004007cu, 0x00000006u, 0x00000043u, 0x00000042u, 0x0003003eu, 0x00000041u, 0x00000043u, 0x0004003du, + 0x00000006u, 0x00000045u, 0x00000041u, 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, + 0x000500aau, 0x00000044u, 0x00000048u, 0x00000047u, 0x00000046u, 0x000300f7u, 0x0000004au, 0x00000000u, + 0x000400fau, 0x00000048u, 0x00000049u, 0x0000004au, 0x000200f8u, 0x00000049u, 0x0004003du, 0x00000006u, + 0x0000004bu, 0x00000041u, 0x000500c7u, 0x00000006u, 0x0000004du, 0x0000004bu, 0x0000004cu, 0x000500abu, + 0x00000044u, 0x0000004fu, 0x0000004du, 0x0000004eu, 0x000200f9u, 0x0000004au, 0x000200f8u, 0x0000004au, + 0x000700f5u, 0x00000044u, 0x00000050u, 0x00000048u, 0x00000011u, 0x0000004fu, 0x00000049u, 0x000300f7u, + 0x00000052u, 0x00000000u, 0x000400fau, 0x00000050u, 0x00000051u, 0x00000052u, 0x000200f8u, 0x00000051u, + 0x0004003du, 0x00000006u, 0x00000053u, 0x00000041u, 0x000500c2u, 0x00000006u, 0x00000054u, 0x00000053u, + 0x0000003cu, 0x000500c5u, 0x00000006u, 0x00000056u, 0x00000054u, 0x00000055u, 0x000500c7u, 0x00000006u, + 0x00000058u, 0x00000056u, 0x00000057u, 0x000200feu, 0x00000058u, 0x000200f8u, 0x00000052u, 0x0004003du, + 0x00000006u, 0x0000005cu, 0x00000041u, 0x000500c2u, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0000003cu, + 0x000500c7u, 0x00000006u, 0x0000005fu, 0x0000005du, 0x0000005eu, 0x00050080u, 0x00000006u, 0x00000060u, + 0x0000005bu, 0x0000005fu, 0x0003003eu, 0x0000005au, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000061u, + 0x00000041u, 0x0004003du, 0x00000006u, 0x00000062u, 0x0000005au, 0x00050080u, 0x00000006u, 0x00000063u, + 0x00000061u, 0x00000062u, 0x000500c2u, 0x00000006u, 0x00000064u, 0x00000063u, 0x0000003cu, 0x000500c7u, + 0x00000006u, 0x00000065u, 0x00000064u, 0x00000057u, 0x000200feu, 0x00000065u, 0x00010038u, 0x00050036u, + 0x00000008u, 0x00000013u, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, + 0x00000014u, 0x0004003bu, 0x00000007u, 0x00000068u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000006du, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000073u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000008eu, + 0x00000007u, 0x0004003du, 0x00000006u, 0x00000069u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000006bu, + 0x00000069u, 0x0000006au, 0x000500c4u, 0x00000006u, 0x0000006cu, 0x0000006bu, 0x0000003cu, 0x0003003eu, + 0x00000068u, 0x0000006cu, 0x0004003du, 0x00000006u, 0x0000006eu, 0x00000012u, 0x000500c2u, 0x00000006u, + 0x00000070u, 0x0000006eu, 0x0000006fu, 0x000500c7u, 0x00000006u, 0x00000072u, 0x00000070u, 0x00000071u, + 0x0003003eu, 0x0000006du, 0x00000072u, 0x0004003du, 0x00000006u, 0x00000074u, 0x00000012u, 0x000500c7u, + 0x00000006u, 0x00000076u, 0x00000074u, 0x00000075u, 0x0003003eu, 0x00000073u, 0x00000076u, 0x0004003du, + 0x00000006u, 0x00000077u, 0x0000006du, 0x000500aau, 0x00000044u, 0x00000078u, 0x00000077u, 0x00000071u, + 0x000300f7u, 0x0000007au, 0x00000000u, 0x000400fau, 0x00000078u, 0x00000079u, 0x0000007au, 0x000200f8u, + 0x00000079u, 0x0004003du, 0x00000006u, 0x0000007bu, 0x00000068u, 0x000500c5u, 0x00000006u, 0x0000007cu, + 0x0000007bu, 0x00000046u, 0x0004003du, 0x00000006u, 0x0000007du, 0x00000073u, 0x000500c4u, 0x00000006u, + 0x0000007fu, 0x0000007du, 0x0000007eu, 0x000500c5u, 0x00000006u, 0x00000080u, 0x0000007cu, 0x0000007fu, + 0x0004007cu, 0x00000008u, 0x00000081u, 0x00000080u, 0x000200feu, 0x00000081u, 0x000200f8u, 0x0000007au, + 0x0004003du, 0x00000006u, 0x00000083u, 0x0000006du, 0x000500aau, 0x00000044u, 0x00000084u, 0x00000083u, + 0x0000004eu, 0x000300f7u, 0x00000086u, 0x00000000u, 0x000400fau, 0x00000084u, 0x00000085u, 0x00000086u, + 0x000200f8u, 0x00000085u, 0x0004003du, 0x00000006u, 0x00000087u, 0x00000073u, 0x000500aau, 0x00000044u, + 0x00000088u, 0x00000087u, 0x0000004eu, 0x000300f7u, 0x0000008au, 0x00000000u, 0x000400fau, 0x00000088u, + 0x00000089u, 0x0000008au, 0x000200f8u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000008bu, 0x00000068u, + 0x0004007cu, 0x00000008u, 0x0000008cu, 0x0000008bu, 0x000200feu, 0x0000008cu, 0x000200f8u, 0x0000008au, + 0x0003003eu, 0x0000008eu, 0x0000004eu, 0x000200f9u, 0x0000008fu, 0x000200f8u, 0x0000008fu, 0x000400f6u, + 0x00000091u, 0x00000092u, 0x00000000u, 0x000200f9u, 0x00000093u, 0x000200f8u, 0x00000093u, 0x0004003du, + 0x00000006u, 0x00000094u, 0x00000073u, 0x000500c7u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, + 0x000500aau, 0x00000044u, 0x00000097u, 0x00000096u, 0x0000004eu, 0x000400fau, 0x00000097u, 0x00000090u, + 0x00000091u, 0x000200f8u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000099u, 0x00000073u, 0x000500c4u, + 0x00000006u, 0x0000009au, 0x00000099u, 0x00000098u, 0x0003003eu, 0x00000073u, 0x0000009au, 0x0004003du, + 0x00000006u, 0x0000009bu, 0x0000008eu, 0x00050080u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x0000005eu, + 0x0003003eu, 0x0000008eu, 0x0000009cu, 0x000200f9u, 0x00000092u, 0x000200f8u, 0x00000092u, 0x000200f9u, + 0x0000008fu, 0x000200f8u, 0x00000091u, 0x0004003du, 0x00000006u, 0x0000009du, 0x00000073u, 0x000500c7u, + 0x00000006u, 0x0000009eu, 0x0000009du, 0x00000075u, 0x0003003eu, 0x00000073u, 0x0000009eu, 0x0004003du, + 0x00000006u, 0x0000009fu, 0x00000068u, 0x0004003du, 0x00000006u, 0x000000a1u, 0x0000008eu, 0x00050082u, + 0x00000006u, 0x000000a2u, 0x000000a0u, 0x000000a1u, 0x000500c4u, 0x00000006u, 0x000000a4u, 0x000000a2u, + 0x000000a3u, 0x000500c5u, 0x00000006u, 0x000000a5u, 0x0000009fu, 0x000000a4u, 0x0004003du, 0x00000006u, + 0x000000a6u, 0x00000073u, 0x000500c4u, 0x00000006u, 0x000000a7u, 0x000000a6u, 0x0000007eu, 0x000500c5u, + 0x00000006u, 0x000000a8u, 0x000000a5u, 0x000000a7u, 0x0004007cu, 0x00000008u, 0x000000a9u, 0x000000a8u, + 0x000200feu, 0x000000a9u, 0x000200f8u, 0x00000086u, 0x0004003du, 0x00000006u, 0x000000abu, 0x00000068u, + 0x0004003du, 0x00000006u, 0x000000acu, 0x0000006du, 0x00050080u, 0x00000006u, 0x000000aeu, 0x000000acu, + 0x000000adu, 0x000500c4u, 0x00000006u, 0x000000afu, 0x000000aeu, 0x000000a3u, 0x000500c5u, 0x00000006u, + 0x000000b0u, 0x000000abu, 0x000000afu, 0x0004003du, 0x00000006u, 0x000000b1u, 0x00000073u, 0x000500c4u, + 0x00000006u, 0x000000b2u, 0x000000b1u, 0x0000007eu, 0x000500c5u, 0x00000006u, 0x000000b3u, 0x000000b0u, + 0x000000b2u, 0x0004007cu, 0x00000008u, 0x000000b4u, 0x000000b3u, 0x000200feu, 0x000000b4u, 0x00010038u, + 0x00050036u, 0x00000006u, 0x00000016u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, + 0x000200f8u, 0x00000017u, 0x0004003bu, 0x00000007u, 0x000000b7u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000beu, 0x00000007u, 0x0004003bu, 0x000000c3u, + 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000cbu, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000f9u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000108u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000124u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000012bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000000b8u, 0x00000015u, 0x0004007cu, 0x00000006u, + 0x000000b9u, 0x000000b8u, 0x0003003eu, 0x000000b7u, 0x000000b9u, 0x0004003du, 0x00000006u, 0x000000bbu, + 0x000000b7u, 0x000500c2u, 0x00000006u, 0x000000bcu, 0x000000bbu, 0x0000003cu, 0x000500c7u, 0x00000006u, + 0x000000bdu, 0x000000bcu, 0x0000006au, 0x0003003eu, 0x000000bau, 0x000000bdu, 0x0004003du, 0x00000006u, + 0x000000bfu, 0x000000b7u, 0x000500c2u, 0x00000006u, 0x000000c0u, 0x000000bfu, 0x000000a3u, 0x000500c7u, + 0x00000006u, 0x000000c2u, 0x000000c0u, 0x000000c1u, 0x0003003eu, 0x000000beu, 0x000000c2u, 0x0004003du, + 0x00000006u, 0x000000c5u, 0x000000beu, 0x0004007cu, 0x0000003bu, 0x000000c6u, 0x000000c5u, 0x00050082u, + 0x0000003bu, 0x000000c8u, 0x000000c6u, 0x000000c7u, 0x00050080u, 0x0000003bu, 0x000000cau, 0x000000c8u, + 0x000000c9u, 0x0003003eu, 0x000000c4u, 0x000000cau, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000b7u, + 0x000500c7u, 0x00000006u, 0x000000cdu, 0x000000ccu, 0x0000004cu, 0x0003003eu, 0x000000cbu, 0x000000cdu, + 0x0004003du, 0x00000006u, 0x000000ceu, 0x000000beu, 0x000500aau, 0x00000044u, 0x000000cfu, 0x000000ceu, + 0x000000c1u, 0x000300f7u, 0x000000d1u, 0x00000000u, 0x000400fau, 0x000000cfu, 0x000000d0u, 0x000000d1u, + 0x000200f8u, 0x000000d0u, 0x0004003du, 0x00000006u, 0x000000d2u, 0x000000bau, 0x000500c5u, 0x00000006u, + 0x000000d4u, 0x000000d2u, 0x000000d3u, 0x0004003du, 0x00000006u, 0x000000d5u, 0x000000cbu, 0x000500abu, + 0x00000044u, 0x000000d6u, 0x000000d5u, 0x0000004eu, 0x000300f7u, 0x000000d9u, 0x00000000u, 0x000400fau, + 0x000000d6u, 0x000000d8u, 0x000000deu, 0x000200f8u, 0x000000d8u, 0x0004003du, 0x00000006u, 0x000000dbu, + 0x000000cbu, 0x000500c2u, 0x00000006u, 0x000000dcu, 0x000000dbu, 0x0000007eu, 0x000500c5u, 0x00000006u, + 0x000000ddu, 0x000000dau, 0x000000dcu, 0x0003003eu, 0x000000d7u, 0x000000ddu, 0x000200f9u, 0x000000d9u, + 0x000200f8u, 0x000000deu, 0x0003003eu, 0x000000d7u, 0x0000004eu, 0x000200f9u, 0x000000d9u, 0x000200f8u, + 0x000000d9u, 0x0004003du, 0x00000006u, 0x000000dfu, 0x000000d7u, 0x000500c5u, 0x00000006u, 0x000000e0u, + 0x000000d4u, 0x000000dfu, 0x000200feu, 0x000000e0u, 0x000200f8u, 0x000000d1u, 0x0004003du, 0x0000003bu, + 0x000000e2u, 0x000000c4u, 0x000500afu, 0x00000044u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x000300f7u, + 0x000000e6u, 0x00000000u, 0x000400fau, 0x000000e4u, 0x000000e5u, 0x000000e6u, 0x000200f8u, 0x000000e5u, + 0x0004003du, 0x00000006u, 0x000000e7u, 0x000000bau, 0x000500c5u, 0x00000006u, 0x000000e8u, 0x000000e7u, + 0x000000d3u, 0x000200feu, 0x000000e8u, 0x000200f8u, 0x000000e6u, 0x0004003du, 0x0000003bu, 0x000000eau, + 0x000000c4u, 0x000500b3u, 0x00000044u, 0x000000ecu, 0x000000eau, 0x000000ebu, 0x000300f7u, 0x000000eeu, + 0x00000000u, 0x000400fau, 0x000000ecu, 0x000000edu, 0x000000eeu, 0x000200f8u, 0x000000edu, 0x0004003du, + 0x0000003bu, 0x000000efu, 0x000000c4u, 0x000500b1u, 0x00000044u, 0x000000f1u, 0x000000efu, 0x000000f0u, + 0x000300f7u, 0x000000f3u, 0x00000000u, 0x000400fau, 0x000000f1u, 0x000000f2u, 0x000000f3u, 0x000200f8u, + 0x000000f2u, 0x0004003du, 0x00000006u, 0x000000f4u, 0x000000bau, 0x000200feu, 0x000000f4u, 0x000200f8u, + 0x000000f3u, 0x0004003du, 0x00000006u, 0x000000f7u, 0x000000cbu, 0x000500c5u, 0x00000006u, 0x000000f8u, + 0x000000f7u, 0x000000f6u, 0x0003003eu, 0x000000cbu, 0x000000f8u, 0x0004003du, 0x0000003bu, 0x000000fbu, + 0x000000c4u, 0x00050082u, 0x0000003bu, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x0004007cu, 0x00000006u, + 0x000000fdu, 0x000000fcu, 0x0003003eu, 0x000000f9u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, + 0x000000cbu, 0x0004003du, 0x00000006u, 0x00000100u, 0x000000f9u, 0x000500c2u, 0x00000006u, 0x00000101u, + 0x000000ffu, 0x00000100u, 0x0003003eu, 0x000000feu, 0x00000101u, 0x0004003du, 0x00000006u, 0x00000103u, + 0x000000cbu, 0x0004003du, 0x00000006u, 0x00000104u, 0x000000f9u, 0x000500c4u, 0x00000006u, 0x00000105u, + 0x0000005eu, 0x00000104u, 0x00050082u, 0x00000006u, 0x00000106u, 0x00000105u, 0x0000005eu, 0x000500c7u, + 0x00000006u, 0x00000107u, 0x00000103u, 0x00000106u, 0x0003003eu, 0x00000102u, 0x00000107u, 0x0004003du, + 0x00000006u, 0x00000109u, 0x000000f9u, 0x00050082u, 0x00000006u, 0x0000010au, 0x00000109u, 0x0000005eu, + 0x000500c4u, 0x00000006u, 0x0000010bu, 0x0000005eu, 0x0000010au, 0x0003003eu, 0x00000108u, 0x0000010bu, + 0x0004003du, 0x00000006u, 0x0000010cu, 0x00000102u, 0x0004003du, 0x00000006u, 0x0000010du, 0x00000108u, + 0x000500acu, 0x00000044u, 0x0000010eu, 0x0000010cu, 0x0000010du, 0x000400a8u, 0x00000044u, 0x0000010fu, + 0x0000010eu, 0x000300f7u, 0x00000111u, 0x00000000u, 0x000400fau, 0x0000010fu, 0x00000110u, 0x00000111u, + 0x000200f8u, 0x00000110u, 0x0004003du, 0x00000006u, 0x00000112u, 0x00000102u, 0x0004003du, 0x00000006u, + 0x00000113u, 0x00000108u, 0x000500aau, 0x00000044u, 0x00000114u, 0x00000112u, 0x00000113u, 0x000300f7u, + 0x00000116u, 0x00000000u, 0x000400fau, 0x00000114u, 0x00000115u, 0x00000116u, 0x000200f8u, 0x00000115u, + 0x0004003du, 0x00000006u, 0x00000117u, 0x000000feu, 0x000500c7u, 0x00000006u, 0x00000118u, 0x00000117u, + 0x0000005eu, 0x000500abu, 0x00000044u, 0x00000119u, 0x00000118u, 0x0000004eu, 0x000200f9u, 0x00000116u, + 0x000200f8u, 0x00000116u, 0x000700f5u, 0x00000044u, 0x0000011au, 0x00000114u, 0x00000110u, 0x00000119u, + 0x00000115u, 0x000200f9u, 0x00000111u, 0x000200f8u, 0x00000111u, 0x000700f5u, 0x00000044u, 0x0000011bu, + 0x0000010eu, 0x000000f3u, 0x0000011au, 0x00000116u, 0x000300f7u, 0x0000011du, 0x00000000u, 0x000400fau, + 0x0000011bu, 0x0000011cu, 0x0000011du, 0x000200f8u, 0x0000011cu, 0x0004003du, 0x00000006u, 0x0000011eu, + 0x000000feu, 0x00050080u, 0x00000006u, 0x0000011fu, 0x0000011eu, 0x0000005eu, 0x0003003eu, 0x000000feu, + 0x0000011fu, 0x000200f9u, 0x0000011du, 0x000200f8u, 0x0000011du, 0x0004003du, 0x00000006u, 0x00000120u, + 0x000000bau, 0x0004003du, 0x00000006u, 0x00000121u, 0x000000feu, 0x000500c5u, 0x00000006u, 0x00000122u, + 0x00000120u, 0x00000121u, 0x000200feu, 0x00000122u, 0x000200f8u, 0x000000eeu, 0x0004003du, 0x0000003bu, + 0x00000125u, 0x000000c4u, 0x0004007cu, 0x00000006u, 0x00000126u, 0x00000125u, 0x000500c4u, 0x00000006u, + 0x00000127u, 0x00000126u, 0x0000006fu, 0x0004003du, 0x00000006u, 0x00000128u, 0x000000cbu, 0x000500c2u, + 0x00000006u, 0x00000129u, 0x00000128u, 0x0000007eu, 0x000500c5u, 0x00000006u, 0x0000012au, 0x00000127u, + 0x00000129u, 0x0003003eu, 0x00000124u, 0x0000012au, 0x0004003du, 0x00000006u, 0x0000012cu, 0x000000cbu, + 0x000500c7u, 0x00000006u, 0x0000012eu, 0x0000012cu, 0x0000012du, 0x0003003eu, 0x0000012bu, 0x0000012eu, + 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000012bu, 0x000500acu, 0x00000044u, 0x00000131u, 0x0000012fu, + 0x00000130u, 0x000400a8u, 0x00000044u, 0x00000132u, 0x00000131u, 0x000300f7u, 0x00000134u, 0x00000000u, + 0x000400fau, 0x00000132u, 0x00000133u, 0x00000134u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000006u, + 0x00000135u, 0x0000012bu, 0x000500aau, 0x00000044u, 0x00000136u, 0x00000135u, 0x00000130u, 0x000300f7u, + 0x00000138u, 0x00000000u, 0x000400fau, 0x00000136u, 0x00000137u, 0x00000138u, 0x000200f8u, 0x00000137u, + 0x0004003du, 0x00000006u, 0x00000139u, 0x00000124u, 0x000500c7u, 0x00000006u, 0x0000013au, 0x00000139u, + 0x0000005eu, 0x000500abu, 0x00000044u, 0x0000013bu, 0x0000013au, 0x0000004eu, 0x000200f9u, 0x00000138u, + 0x000200f8u, 0x00000138u, 0x000700f5u, 0x00000044u, 0x0000013cu, 0x00000136u, 0x00000133u, 0x0000013bu, + 0x00000137u, 0x000200f9u, 0x00000134u, 0x000200f8u, 0x00000134u, 0x000700f5u, 0x00000044u, 0x0000013du, + 0x00000131u, 0x000000eeu, 0x0000013cu, 0x00000138u, 0x000300f7u, 0x0000013fu, 0x00000000u, 0x000400fau, + 0x0000013du, 0x0000013eu, 0x0000013fu, 0x000200f8u, 0x0000013eu, 0x0004003du, 0x00000006u, 0x00000140u, + 0x00000124u, 0x00050080u, 0x00000006u, 0x00000141u, 0x00000140u, 0x0000005eu, 0x0003003eu, 0x00000124u, + 0x00000141u, 0x000200f9u, 0x0000013fu, 0x000200f8u, 0x0000013fu, 0x0004003du, 0x00000006u, 0x00000142u, + 0x000000bau, 0x0004003du, 0x00000006u, 0x00000143u, 0x00000124u, 0x000500c5u, 0x00000006u, 0x00000144u, + 0x00000142u, 0x00000143u, 0x000200feu, 0x00000144u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, + 0x00000000u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, + 0x000200f8u, 0x0000001cu, 0x0004003bu, 0x0000000du, 0x00000149u, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x0000014cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000150u, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000147u, 0x0000001au, 0x000500aau, 0x00000044u, 0x00000148u, 0x00000147u, 0x0000005eu, 0x000300f7u, + 0x0000014bu, 0x00000000u, 0x000400fau, 0x00000148u, 0x0000014au, 0x0000014fu, 0x000200f8u, 0x0000014au, + 0x0004003du, 0x00000006u, 0x0000014du, 0x00000019u, 0x0003003eu, 0x0000014cu, 0x0000014du, 0x00050039u, + 0x00000008u, 0x0000014eu, 0x00000013u, 0x0000014cu, 0x0003003eu, 0x00000149u, 0x0000014eu, 0x000200f9u, + 0x0000014bu, 0x000200f8u, 0x0000014fu, 0x0004003du, 0x00000006u, 0x00000151u, 0x00000019u, 0x0003003eu, + 0x00000150u, 0x00000151u, 0x00050039u, 0x00000008u, 0x00000152u, 0x0000000bu, 0x00000150u, 0x0003003eu, + 0x00000149u, 0x00000152u, 0x000200f9u, 0x0000014bu, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, + 0x00000153u, 0x00000149u, 0x000200feu, 0x00000153u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, + 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, + 0x000200f8u, 0x00000021u, 0x0004003bu, 0x00000007u, 0x00000158u, 0x00000007u, 0x0004003bu, 0x0000000du, + 0x0000015bu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000015fu, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000156u, 0x0000001fu, 0x000500aau, 0x00000044u, 0x00000157u, 0x00000156u, 0x0000005eu, 0x000300f7u, + 0x0000015au, 0x00000000u, 0x000400fau, 0x00000157u, 0x00000159u, 0x0000015eu, 0x000200f8u, 0x00000159u, + 0x0004003du, 0x00000008u, 0x0000015cu, 0x0000001eu, 0x0003003eu, 0x0000015bu, 0x0000015cu, 0x00050039u, + 0x00000006u, 0x0000015du, 0x00000016u, 0x0000015bu, 0x0003003eu, 0x00000158u, 0x0000015du, 0x000200f9u, + 0x0000015au, 0x000200f8u, 0x0000015eu, 0x0004003du, 0x00000008u, 0x00000160u, 0x0000001eu, 0x0003003eu, + 0x0000015fu, 0x00000160u, 0x00050039u, 0x00000006u, 0x00000161u, 0x00000010u, 0x0000015fu, 0x0003003eu, + 0x00000158u, 0x00000161u, 0x000200f9u, 0x0000015au, 0x000200f8u, 0x0000015au, 0x0004003du, 0x00000006u, + 0x00000162u, 0x00000158u, 0x000200feu, 0x00000162u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000024u, + 0x00000000u, 0x00000022u, 0x00030037u, 0x00000007u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003bu, + 0x00000007u, 0x00000184u, 0x00000007u, 0x00050041u, 0x0000016au, 0x0000016bu, 0x00000169u, 0x0000004eu, + 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000016bu, 0x0003003eu, 0x00000166u, 0x0000016cu, 0x0004003du, + 0x00000006u, 0x0000016eu, 0x00000166u, 0x00050086u, 0x00000006u, 0x00000170u, 0x0000016eu, 0x0000016fu, + 0x0003003eu, 0x0000016du, 0x00000170u, 0x0004003du, 0x00000006u, 0x00000172u, 0x00000166u, 0x00050089u, + 0x00000006u, 0x00000173u, 0x00000172u, 0x0000016fu, 0x0003003eu, 0x00000171u, 0x00000173u, 0x0004003du, + 0x00000006u, 0x00000175u, 0x00000023u, 0x0004003du, 0x00000006u, 0x00000176u, 0x0000016du, 0x00050080u, + 0x00000006u, 0x00000177u, 0x00000175u, 0x00000176u, 0x0003003eu, 0x00000174u, 0x00000177u, 0x00050041u, + 0x0000017cu, 0x0000017du, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x0000017eu, 0x0000017du, + 0x00050080u, 0x00000006u, 0x0000017fu, 0x0000017eu, 0x0000005eu, 0x0003003eu, 0x00000178u, 0x0000017fu, + 0x0004003du, 0x00000006u, 0x00000181u, 0x0000016du, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000178u, + 0x00050084u, 0x00000006u, 0x00000183u, 0x00000181u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, + 0x00050041u, 0x0000017cu, 0x00000185u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000186u, + 0x00000185u, 0x00050080u, 0x00000006u, 0x00000187u, 0x00000186u, 0x0000016fu, 0x00050082u, 0x00000006u, + 0x00000188u, 0x00000187u, 0x0000005eu, 0x00050086u, 0x00000006u, 0x00000189u, 0x00000188u, 0x0000016fu, + 0x0003003eu, 0x00000184u, 0x00000189u, 0x0004003du, 0x00000006u, 0x0000018bu, 0x00000171u, 0x0004003du, + 0x00000006u, 0x0000018cu, 0x00000184u, 0x00050084u, 0x00000006u, 0x0000018du, 0x0000018bu, 0x0000018cu, + 0x0003003eu, 0x0000018au, 0x0000018du, 0x0004003du, 0x00000006u, 0x0000018fu, 0x0000018au, 0x0004003du, + 0x00000006u, 0x00000190u, 0x00000184u, 0x00050080u, 0x00000006u, 0x00000191u, 0x0000018fu, 0x00000190u, + 0x00050041u, 0x0000017cu, 0x00000192u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000193u, + 0x00000192u, 0x0007000cu, 0x00000006u, 0x00000194u, 0x00000001u, 0x00000026u, 0x00000191u, 0x00000193u, + 0x0003003eu, 0x0000018eu, 0x00000194u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000028u, + 0x00000000u, 0x00000026u, 0x00030037u, 0x0000000du, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, + 0x00000007u, 0x0000019fu, 0x00000007u, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x0004003du, + 0x00000006u, 0x0000019bu, 0x00000166u, 0x0004003du, 0x00000008u, 0x0000019cu, 0x00000027u, 0x00050041u, + 0x0000019du, 0x0000019eu, 0x0000019au, 0x0000019bu, 0x0003003eu, 0x0000019eu, 0x0000019cu, 0x000400e0u, + 0x00000195u, 0x00000195u, 0x00000196u, 0x0003003eu, 0x0000019fu, 0x000001a0u, 0x000200f9u, 0x000001a1u, + 0x000200f8u, 0x000001a1u, 0x000400f6u, 0x000001a3u, 0x000001a4u, 0x00000000u, 0x000200f9u, 0x000001a5u, + 0x000200f8u, 0x000001a5u, 0x0004003du, 0x00000006u, 0x000001a6u, 0x0000019fu, 0x000500acu, 0x00000044u, + 0x000001a7u, 0x000001a6u, 0x0000004eu, 0x000400fau, 0x000001a7u, 0x000001a2u, 0x000001a3u, 0x000200f8u, + 0x000001a2u, 0x0004003du, 0x00000006u, 0x000001a8u, 0x00000171u, 0x0004003du, 0x00000006u, 0x000001a9u, + 0x0000019fu, 0x000500b0u, 0x00000044u, 0x000001aau, 0x000001a8u, 0x000001a9u, 0x000300f7u, 0x000001acu, + 0x00000000u, 0x000400fau, 0x000001aau, 0x000001abu, 0x000001acu, 0x000200f8u, 0x000001abu, 0x0004003du, + 0x00000006u, 0x000001adu, 0x00000166u, 0x0004003du, 0x00000006u, 0x000001aeu, 0x00000166u, 0x0004003du, + 0x00000006u, 0x000001afu, 0x0000019fu, 0x00050080u, 0x00000006u, 0x000001b0u, 0x000001aeu, 0x000001afu, + 0x00050041u, 0x0000019du, 0x000001b1u, 0x0000019au, 0x000001b0u, 0x0004003du, 0x00000008u, 0x000001b2u, + 0x000001b1u, 0x00050041u, 0x0000019du, 0x000001b3u, 0x0000019au, 0x000001adu, 0x0004003du, 0x00000008u, + 0x000001b4u, 0x000001b3u, 0x00050081u, 0x00000008u, 0x000001b5u, 0x000001b4u, 0x000001b2u, 0x00050041u, + 0x0000019du, 0x000001b6u, 0x0000019au, 0x000001adu, 0x0003003eu, 0x000001b6u, 0x000001b5u, 0x000200f9u, + 0x000001acu, 0x000200f8u, 0x000001acu, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x000200f9u, + 0x000001a4u, 0x000200f8u, 0x000001a4u, 0x0004003du, 0x00000006u, 0x000001b7u, 0x0000019fu, 0x000500c2u, + 0x00000006u, 0x000001b8u, 0x000001b7u, 0x00000098u, 0x0003003eu, 0x0000019fu, 0x000001b8u, 0x000200f9u, + 0x000001a1u, 0x000200f8u, 0x000001a3u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x00000166u, 0x0004003du, + 0x00000006u, 0x000001bau, 0x00000171u, 0x00050082u, 0x00000006u, 0x000001bbu, 0x000001b9u, 0x000001bau, + 0x00050041u, 0x0000019du, 0x000001bcu, 0x0000019au, 0x000001bbu, 0x0004003du, 0x00000008u, 0x000001bdu, + 0x000001bcu, 0x000200feu, 0x000001bdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000002eu, 0x00000000u, + 0x0000002au, 0x00030037u, 0x00000007u, 0x0000002bu, 0x00030037u, 0x00000007u, 0x0000002cu, 0x00030037u, + 0x00000007u, 0x0000002du, 0x000200f8u, 0x0000002fu, 0x0004003bu, 0x00000007u, 0x000001c0u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000001d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001dcu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000001e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001edu, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x000001f4u, 0x00000007u, 0x00050041u, 0x0000017cu, 0x000001c1u, 0x0000017bu, + 0x000000fau, 0x0004003du, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x000500c2u, 0x00000006u, 0x000001c4u, + 0x000001c2u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000001c5u, 0x0000002bu, 0x00050041u, 0x0000017cu, + 0x000001c6u, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x00050084u, + 0x00000006u, 0x000001c8u, 0x000001c5u, 0x000001c7u, 0x0004003du, 0x00000006u, 0x000001c9u, 0x0000002cu, + 0x00050080u, 0x00000006u, 0x000001cau, 0x000001c8u, 0x000001c9u, 0x00050041u, 0x0000017cu, 0x000001ccu, + 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x000001cdu, 0x000001ccu, 0x00050084u, 0x00000006u, + 0x000001ceu, 0x000001cau, 0x000001cdu, 0x0004003du, 0x00000006u, 0x000001cfu, 0x0000002du, 0x00050080u, + 0x00000006u, 0x000001d0u, 0x000001ceu, 0x000001cfu, 0x00050041u, 0x0000017cu, 0x000001d1u, 0x0000017bu, + 0x00000098u, 0x0004003du, 0x00000006u, 0x000001d2u, 0x000001d1u, 0x00050084u, 0x00000006u, 0x000001d3u, + 0x000001d0u, 0x000001d2u, 0x00050080u, 0x00000006u, 0x000001d4u, 0x000001c4u, 0x000001d3u, 0x0003003eu, + 0x000001c0u, 0x000001d4u, 0x00050041u, 0x0000017cu, 0x000001d6u, 0x0000017bu, 0x000001cbu, 0x0004003du, + 0x00000006u, 0x000001d7u, 0x000001d6u, 0x0004003du, 0x00000006u, 0x000001d8u, 0x0000002du, 0x00050082u, + 0x00000006u, 0x000001d9u, 0x000001d7u, 0x000001d8u, 0x0007000cu, 0x00000006u, 0x000001dbu, 0x00000001u, + 0x00000026u, 0x000001d9u, 0x000001dau, 0x0003003eu, 0x000001d5u, 0x000001dbu, 0x0004003du, 0x00000006u, + 0x000001ddu, 0x00000166u, 0x0003003eu, 0x000001dcu, 0x000001ddu, 0x000200f9u, 0x000001deu, 0x000200f8u, + 0x000001deu, 0x000400f6u, 0x000001e0u, 0x000001e1u, 0x00000000u, 0x000200f9u, 0x000001e2u, 0x000200f8u, + 0x000001e2u, 0x0004003du, 0x00000006u, 0x000001e3u, 0x000001dcu, 0x00050041u, 0x0000017cu, 0x000001e4u, + 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x000001e5u, 0x000001e4u, 0x00050084u, 0x00000006u, + 0x000001e6u, 0x000001dau, 0x000001e5u, 0x000500b0u, 0x00000044u, 0x000001e7u, 0x000001e3u, 0x000001e6u, + 0x000400fau, 0x000001e7u, 0x000001dfu, 0x000001e0u, 0x000200f8u, 0x000001dfu, 0x0004003du, 0x00000006u, + 0x000001e9u, 0x000001dcu, 0x00050041u, 0x0000017cu, 0x000001eau, 0x0000017bu, 0x00000098u, 0x0004003du, + 0x00000006u, 0x000001ebu, 0x000001eau, 0x00050086u, 0x00000006u, 0x000001ecu, 0x000001e9u, 0x000001ebu, + 0x0003003eu, 0x000001e8u, 0x000001ecu, 0x0004003du, 0x00000006u, 0x000001eeu, 0x000001dcu, 0x0004003du, + 0x00000006u, 0x000001efu, 0x000001e8u, 0x00050041u, 0x0000017cu, 0x000001f0u, 0x0000017bu, 0x00000098u, + 0x0004003du, 0x00000006u, 0x000001f1u, 0x000001f0u, 0x00050084u, 0x00000006u, 0x000001f2u, 0x000001efu, + 0x000001f1u, 0x00050082u, 0x00000006u, 0x000001f3u, 0x000001eeu, 0x000001f2u, 0x0003003eu, 0x000001edu, + 0x000001f3u, 0x0003003eu, 0x000001f4u, 0x000001f5u, 0x0004003du, 0x00000006u, 0x000001f6u, 0x000001e8u, + 0x0004003du, 0x00000006u, 0x000001f7u, 0x000001d5u, 0x000500b0u, 0x00000044u, 0x000001f8u, 0x000001f6u, + 0x000001f7u, 0x000300f7u, 0x000001fau, 0x00000000u, 0x000400fau, 0x000001f8u, 0x000001f9u, 0x000001fau, + 0x000200f8u, 0x000001f9u, 0x0004003du, 0x00000006u, 0x000001ffu, 0x000001c0u, 0x0004003du, 0x00000006u, + 0x00000200u, 0x000001dcu, 0x00050080u, 0x00000006u, 0x00000201u, 0x000001ffu, 0x00000200u, 0x00060041u, + 0x00000202u, 0x00000203u, 0x000001feu, 0x000000ebu, 0x00000201u, 0x0004003du, 0x00000006u, 0x00000204u, + 0x00000203u, 0x0004007cu, 0x00000008u, 0x00000205u, 0x00000204u, 0x0003003eu, 0x000001f4u, 0x00000205u, + 0x000200f9u, 0x000001fau, 0x000200f8u, 0x000001fau, 0x0004003du, 0x00000006u, 0x0000020au, 0x000001e8u, + 0x0004003du, 0x00000006u, 0x0000020bu, 0x00000178u, 0x00050084u, 0x00000006u, 0x0000020cu, 0x0000020au, + 0x0000020bu, 0x0004003du, 0x00000006u, 0x0000020du, 0x000001edu, 0x00050080u, 0x00000006u, 0x0000020eu, + 0x0000020cu, 0x0000020du, 0x0004003du, 0x00000008u, 0x0000020fu, 0x000001f4u, 0x00050041u, 0x0000019du, + 0x00000210u, 0x00000209u, 0x0000020eu, 0x0003003eu, 0x00000210u, 0x0000020fu, 0x000200f9u, 0x000001e1u, + 0x000200f8u, 0x000001e1u, 0x0004003du, 0x00000006u, 0x00000211u, 0x000001dcu, 0x00050080u, 0x00000006u, + 0x00000212u, 0x00000211u, 0x00000197u, 0x0003003eu, 0x000001dcu, 0x00000212u, 0x000200f9u, 0x000001deu, + 0x000200f8u, 0x000001e0u, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000002u, 0x00000033u, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x00000030u, + 0x00030037u, 0x00000007u, 0x00000031u, 0x00030037u, 0x00000007u, 0x00000032u, 0x000200f8u, 0x00000034u, + 0x0004003bu, 0x00000007u, 0x00000213u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000226u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000022cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000239u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x0000023eu, 0x00000007u, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, + 0x00050041u, 0x0000017cu, 0x00000214u, 0x0000017bu, 0x000000fau, 0x0004003du, 0x00000006u, 0x00000215u, + 0x00000214u, 0x000500c2u, 0x00000006u, 0x00000216u, 0x00000215u, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x00000217u, 0x00000030u, 0x00050041u, 0x0000017cu, 0x00000218u, 0x0000017bu, 0x000001c3u, 0x0004003du, + 0x00000006u, 0x00000219u, 0x00000218u, 0x00050084u, 0x00000006u, 0x0000021au, 0x00000217u, 0x00000219u, + 0x0004003du, 0x00000006u, 0x0000021bu, 0x00000031u, 0x00050080u, 0x00000006u, 0x0000021cu, 0x0000021au, + 0x0000021bu, 0x00050041u, 0x0000017cu, 0x0000021du, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, + 0x0000021eu, 0x0000021du, 0x00050084u, 0x00000006u, 0x0000021fu, 0x0000021cu, 0x0000021eu, 0x0004003du, + 0x00000006u, 0x00000220u, 0x00000032u, 0x00050080u, 0x00000006u, 0x00000221u, 0x0000021fu, 0x00000220u, + 0x00050041u, 0x0000017cu, 0x00000222u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000223u, + 0x00000222u, 0x00050084u, 0x00000006u, 0x00000224u, 0x00000221u, 0x00000223u, 0x00050080u, 0x00000006u, + 0x00000225u, 0x00000216u, 0x00000224u, 0x0003003eu, 0x00000213u, 0x00000225u, 0x00050041u, 0x0000017cu, + 0x00000227u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000228u, 0x00000227u, 0x0004003du, + 0x00000006u, 0x00000229u, 0x00000032u, 0x00050082u, 0x00000006u, 0x0000022au, 0x00000228u, 0x00000229u, + 0x0007000cu, 0x00000006u, 0x0000022bu, 0x00000001u, 0x00000026u, 0x0000022au, 0x000001dau, 0x0003003eu, + 0x00000226u, 0x0000022bu, 0x0004003du, 0x00000006u, 0x0000022du, 0x00000166u, 0x0003003eu, 0x0000022cu, + 0x0000022du, 0x000200f9u, 0x0000022eu, 0x000200f8u, 0x0000022eu, 0x000400f6u, 0x00000230u, 0x00000231u, + 0x00000000u, 0x000200f9u, 0x00000232u, 0x000200f8u, 0x00000232u, 0x0004003du, 0x00000006u, 0x00000233u, + 0x0000022cu, 0x0004003du, 0x00000006u, 0x00000234u, 0x00000226u, 0x00050041u, 0x0000017cu, 0x00000235u, + 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000236u, 0x00000235u, 0x00050084u, 0x00000006u, + 0x00000237u, 0x00000234u, 0x00000236u, 0x000500b0u, 0x00000044u, 0x00000238u, 0x00000233u, 0x00000237u, + 0x000400fau, 0x00000238u, 0x0000022fu, 0x00000230u, 0x000200f8u, 0x0000022fu, 0x0004003du, 0x00000006u, + 0x0000023au, 0x0000022cu, 0x00050041u, 0x0000017cu, 0x0000023bu, 0x0000017bu, 0x00000098u, 0x0004003du, + 0x00000006u, 0x0000023cu, 0x0000023bu, 0x00050086u, 0x00000006u, 0x0000023du, 0x0000023au, 0x0000023cu, + 0x0003003eu, 0x00000239u, 0x0000023du, 0x0004003du, 0x00000006u, 0x0000023fu, 0x0000022cu, 0x0004003du, + 0x00000006u, 0x00000240u, 0x00000239u, 0x00050041u, 0x0000017cu, 0x00000241u, 0x0000017bu, 0x00000098u, + 0x0004003du, 0x00000006u, 0x00000242u, 0x00000241u, 0x00050084u, 0x00000006u, 0x00000243u, 0x00000240u, + 0x00000242u, 0x00050082u, 0x00000006u, 0x00000244u, 0x0000023fu, 0x00000243u, 0x0003003eu, 0x0000023eu, + 0x00000244u, 0x0004003du, 0x00000006u, 0x00000245u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000246u, + 0x0000022cu, 0x00050080u, 0x00000006u, 0x00000247u, 0x00000245u, 0x00000246u, 0x0004003du, 0x00000006u, + 0x00000248u, 0x00000239u, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000178u, 0x00050084u, 0x00000006u, + 0x0000024au, 0x00000248u, 0x00000249u, 0x0004003du, 0x00000006u, 0x0000024bu, 0x0000023eu, 0x00050080u, + 0x00000006u, 0x0000024cu, 0x0000024au, 0x0000024bu, 0x00050041u, 0x0000019du, 0x0000024du, 0x00000209u, + 0x0000024cu, 0x0004003du, 0x00000008u, 0x0000024eu, 0x0000024du, 0x0004007cu, 0x00000006u, 0x0000024fu, + 0x0000024eu, 0x00060041u, 0x00000202u, 0x00000250u, 0x000001feu, 0x000000ebu, 0x00000247u, 0x0003003eu, + 0x00000250u, 0x0000024fu, 0x000200f9u, 0x00000231u, 0x000200f8u, 0x00000231u, 0x0004003du, 0x00000006u, + 0x00000251u, 0x0000022cu, 0x00050080u, 0x00000006u, 0x00000252u, 0x00000251u, 0x00000197u, 0x0003003eu, + 0x0000022cu, 0x00000252u, 0x000200f9u, 0x0000022eu, 0x000200f8u, 0x00000230u, 0x000100fdu, 0x00010038u, + 0x00050036u, 0x00000002u, 0x00000038u, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x00000035u, + 0x00030037u, 0x00000007u, 0x00000036u, 0x00030037u, 0x00000007u, 0x00000037u, 0x000200f8u, 0x00000039u, + 0x0004003bu, 0x00000007u, 0x00000253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000025du, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x0000026cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000028fu, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000290u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000297u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000002b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b9u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000002c3u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002cau, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x000002d9u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002e6u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x000002e7u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002f1u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000307u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000308u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x0000030bu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000313u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000339u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000033au, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x0000033du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000343u, 0x00000007u, + 0x0004003bu, 0x00000007u, 0x00000344u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000034eu, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x00000368u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000369u, 0x00000007u, + 0x0004003bu, 0x0000000du, 0x0000039eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a0u, 0x00000007u, + 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x0004003du, 0x00000006u, 0x00000254u, 0x00000035u, + 0x00050041u, 0x0000017cu, 0x00000255u, 0x0000017bu, 0x000000ebu, 0x0004003du, 0x00000006u, 0x00000256u, + 0x00000255u, 0x00050084u, 0x00000006u, 0x00000257u, 0x00000254u, 0x00000256u, 0x0004003du, 0x00000006u, + 0x00000258u, 0x00000037u, 0x00050080u, 0x00000006u, 0x00000259u, 0x00000257u, 0x00000258u, 0x00050041u, + 0x0000017cu, 0x0000025au, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x0000025bu, 0x0000025au, + 0x00050084u, 0x00000006u, 0x0000025cu, 0x00000259u, 0x0000025bu, 0x0003003eu, 0x00000253u, 0x0000025cu, + 0x0004003du, 0x00000006u, 0x0000025eu, 0x00000166u, 0x0003003eu, 0x0000025du, 0x0000025eu, 0x000200f9u, + 0x0000025fu, 0x000200f8u, 0x0000025fu, 0x000400f6u, 0x00000261u, 0x00000262u, 0x00000000u, 0x000200f9u, + 0x00000263u, 0x000200f8u, 0x00000263u, 0x0004003du, 0x00000006u, 0x00000264u, 0x0000025du, 0x00050041u, + 0x0000017cu, 0x00000265u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000266u, 0x00000265u, + 0x000500b0u, 0x00000044u, 0x00000267u, 0x00000264u, 0x00000266u, 0x000400fau, 0x00000267u, 0x00000260u, + 0x00000261u, 0x000200f8u, 0x00000260u, 0x0004003du, 0x00000006u, 0x00000269u, 0x0000025du, 0x000300f7u, + 0x0000026eu, 0x00000000u, 0x000400fau, 0x0000026bu, 0x0000026du, 0x0000027eu, 0x000200f8u, 0x0000026du, + 0x00050041u, 0x0000017cu, 0x00000274u, 0x0000017bu, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000275u, + 0x00000274u, 0x000500c2u, 0x00000006u, 0x00000276u, 0x00000275u, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x00000277u, 0x00000253u, 0x0004003du, 0x00000006u, 0x00000278u, 0x0000025du, 0x00050080u, 0x00000006u, + 0x00000279u, 0x00000277u, 0x00000278u, 0x00050080u, 0x00000006u, 0x0000027au, 0x00000276u, 0x00000279u, + 0x00060041u, 0x00000202u, 0x0000027bu, 0x00000272u, 0x000000ebu, 0x0000027au, 0x0004003du, 0x00000006u, + 0x0000027cu, 0x0000027bu, 0x0004007cu, 0x00000008u, 0x0000027du, 0x0000027cu, 0x0003003eu, 0x0000026cu, + 0x0000027du, 0x000200f9u, 0x0000026eu, 0x000200f8u, 0x0000027eu, 0x00050041u, 0x0000017cu, 0x00000284u, + 0x0000017bu, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000285u, 0x00000284u, 0x000500c2u, 0x00000006u, + 0x00000286u, 0x00000285u, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000253u, 0x0004003du, + 0x00000006u, 0x00000288u, 0x0000025du, 0x00050080u, 0x00000006u, 0x00000289u, 0x00000287u, 0x00000288u, + 0x00050080u, 0x00000006u, 0x0000028au, 0x00000286u, 0x00000289u, 0x00060041u, 0x0000028bu, 0x0000028cu, + 0x00000283u, 0x000000ebu, 0x0000028au, 0x0004003du, 0x0000027fu, 0x0000028du, 0x0000028cu, 0x00040071u, + 0x00000006u, 0x0000028eu, 0x0000028du, 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x0003003eu, 0x00000290u, + 0x0000026au, 0x00060039u, 0x00000008u, 0x00000291u, 0x0000001bu, 0x0000028fu, 0x00000290u, 0x0003003eu, + 0x0000026cu, 0x00000291u, 0x000200f9u, 0x0000026eu, 0x000200f8u, 0x0000026eu, 0x0004003du, 0x00000008u, + 0x00000292u, 0x0000026cu, 0x00050041u, 0x0000019du, 0x00000293u, 0x00000268u, 0x00000269u, 0x0003003eu, + 0x00000293u, 0x00000292u, 0x0004003du, 0x00000006u, 0x00000295u, 0x0000025du, 0x000300f7u, 0x00000299u, + 0x00000000u, 0x000400fau, 0x00000296u, 0x00000298u, 0x000002a9u, 0x000200f8u, 0x00000298u, 0x00050041u, + 0x0000017cu, 0x0000029fu, 0x0000017bu, 0x0000029eu, 0x0004003du, 0x00000006u, 0x000002a0u, 0x0000029fu, + 0x000500c2u, 0x00000006u, 0x000002a1u, 0x000002a0u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000002a2u, + 0x00000253u, 0x0004003du, 0x00000006u, 0x000002a3u, 0x0000025du, 0x00050080u, 0x00000006u, 0x000002a4u, + 0x000002a2u, 0x000002a3u, 0x00050080u, 0x00000006u, 0x000002a5u, 0x000002a1u, 0x000002a4u, 0x00060041u, + 0x00000202u, 0x000002a6u, 0x0000029du, 0x000000ebu, 0x000002a5u, 0x0004003du, 0x00000006u, 0x000002a7u, + 0x000002a6u, 0x0004007cu, 0x00000008u, 0x000002a8u, 0x000002a7u, 0x0003003eu, 0x00000297u, 0x000002a8u, + 0x000200f9u, 0x00000299u, 0x000200f8u, 0x000002a9u, 0x00050041u, 0x0000017cu, 0x000002aeu, 0x0000017bu, + 0x0000029eu, 0x0004003du, 0x00000006u, 0x000002afu, 0x000002aeu, 0x000500c2u, 0x00000006u, 0x000002b0u, + 0x000002afu, 0x00000098u, 0x0004003du, 0x00000006u, 0x000002b1u, 0x00000253u, 0x0004003du, 0x00000006u, + 0x000002b2u, 0x0000025du, 0x00050080u, 0x00000006u, 0x000002b3u, 0x000002b1u, 0x000002b2u, 0x00050080u, + 0x00000006u, 0x000002b4u, 0x000002b0u, 0x000002b3u, 0x00060041u, 0x0000028bu, 0x000002b5u, 0x000002adu, + 0x000000ebu, 0x000002b4u, 0x0004003du, 0x0000027fu, 0x000002b6u, 0x000002b5u, 0x00040071u, 0x00000006u, + 0x000002b7u, 0x000002b6u, 0x0003003eu, 0x000002b8u, 0x000002b7u, 0x0003003eu, 0x000002b9u, 0x0000026au, + 0x00060039u, 0x00000008u, 0x000002bau, 0x0000001bu, 0x000002b8u, 0x000002b9u, 0x0003003eu, 0x00000297u, + 0x000002bau, 0x000200f9u, 0x00000299u, 0x000200f8u, 0x00000299u, 0x0004003du, 0x00000008u, 0x000002bbu, + 0x00000297u, 0x00050041u, 0x000002bcu, 0x000002bdu, 0x0000017bu, 0x0000003cu, 0x0004003du, 0x00000008u, + 0x000002beu, 0x000002bdu, 0x00050085u, 0x00000008u, 0x000002bfu, 0x000002bbu, 0x000002beu, 0x00050041u, + 0x0000019du, 0x000002c0u, 0x00000294u, 0x00000295u, 0x0003003eu, 0x000002c0u, 0x000002bfu, 0x000200f9u, + 0x00000262u, 0x000200f8u, 0x00000262u, 0x0004003du, 0x00000006u, 0x000002c1u, 0x0000025du, 0x00050080u, + 0x00000006u, 0x000002c2u, 0x000002c1u, 0x00000197u, 0x0003003eu, 0x0000025du, 0x000002c2u, 0x000200f9u, + 0x0000025fu, 0x000200f8u, 0x00000261u, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x0004003du, + 0x00000006u, 0x000002c4u, 0x00000035u, 0x00050041u, 0x0000017cu, 0x000002c5u, 0x0000017bu, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x000002c6u, 0x000002c5u, 0x00050084u, 0x00000006u, 0x000002c7u, 0x000002c4u, + 0x000002c6u, 0x0004003du, 0x00000006u, 0x000002c8u, 0x00000036u, 0x00050080u, 0x00000006u, 0x000002c9u, + 0x000002c7u, 0x000002c8u, 0x0003003eu, 0x000002c3u, 0x000002c9u, 0x00050041u, 0x0000017cu, 0x000002d0u, + 0x0000017bu, 0x000002cfu, 0x0004003du, 0x00000006u, 0x000002d1u, 0x000002d0u, 0x000500c2u, 0x00000006u, + 0x000002d2u, 0x000002d1u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000002d3u, 0x000002c3u, 0x00050080u, + 0x00000006u, 0x000002d4u, 0x000002d2u, 0x000002d3u, 0x00060041u, 0x00000202u, 0x000002d5u, 0x000002ceu, + 0x000000ebu, 0x000002d4u, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x0004007cu, 0x00000008u, + 0x000002d7u, 0x000002d6u, 0x0006000cu, 0x00000008u, 0x000002d8u, 0x00000001u, 0x0000001bu, 0x000002d7u, + 0x0003003eu, 0x000002cau, 0x000002d8u, 0x00050041u, 0x0000017cu, 0x000002deu, 0x0000017bu, 0x0000007eu, + 0x0004003du, 0x00000006u, 0x000002dfu, 0x000002deu, 0x000500c2u, 0x00000006u, 0x000002e0u, 0x000002dfu, + 0x000001c3u, 0x0004003du, 0x00000006u, 0x000002e1u, 0x000002c3u, 0x00050080u, 0x00000006u, 0x000002e2u, + 0x000002e0u, 0x000002e1u, 0x00060041u, 0x00000202u, 0x000002e3u, 0x000002ddu, 0x000000ebu, 0x000002e2u, + 0x0004003du, 0x00000006u, 0x000002e4u, 0x000002e3u, 0x0004007cu, 0x00000008u, 0x000002e5u, 0x000002e4u, + 0x0003003eu, 0x000002d9u, 0x000002e5u, 0x0003003eu, 0x000002e6u, 0x000001f5u, 0x0004003du, 0x00000006u, + 0x000002e8u, 0x0000018au, 0x0003003eu, 0x000002e7u, 0x000002e8u, 0x000200f9u, 0x000002e9u, 0x000200f8u, + 0x000002e9u, 0x000400f6u, 0x000002ebu, 0x000002ecu, 0x00000000u, 0x000200f9u, 0x000002edu, 0x000200f8u, + 0x000002edu, 0x0004003du, 0x00000006u, 0x000002eeu, 0x000002e7u, 0x0004003du, 0x00000006u, 0x000002efu, + 0x0000018eu, 0x000500b0u, 0x00000044u, 0x000002f0u, 0x000002eeu, 0x000002efu, 0x000400fau, 0x000002f0u, + 0x000002eau, 0x000002ebu, 0x000200f8u, 0x000002eau, 0x0004003du, 0x00000006u, 0x000002f2u, 0x00000180u, + 0x0004003du, 0x00000006u, 0x000002f3u, 0x000002e7u, 0x00050080u, 0x00000006u, 0x000002f4u, 0x000002f2u, + 0x000002f3u, 0x00050041u, 0x0000019du, 0x000002f5u, 0x00000209u, 0x000002f4u, 0x0004003du, 0x00000008u, + 0x000002f6u, 0x000002f5u, 0x0004003du, 0x00000008u, 0x000002f7u, 0x000002cau, 0x00050085u, 0x00000008u, + 0x000002f8u, 0x000002f6u, 0x000002f7u, 0x0003003eu, 0x000002f1u, 0x000002f8u, 0x0004003du, 0x00000006u, + 0x000002f9u, 0x00000180u, 0x0004003du, 0x00000006u, 0x000002fau, 0x000002e7u, 0x00050080u, 0x00000006u, + 0x000002fbu, 0x000002f9u, 0x000002fau, 0x0004003du, 0x00000008u, 0x000002fcu, 0x000002f1u, 0x00050041u, + 0x0000019du, 0x000002fdu, 0x00000209u, 0x000002fbu, 0x0003003eu, 0x000002fdu, 0x000002fcu, 0x0004003du, + 0x00000008u, 0x000002feu, 0x000002f1u, 0x0004003du, 0x00000006u, 0x000002ffu, 0x000002e7u, 0x00050041u, + 0x0000019du, 0x00000300u, 0x00000268u, 0x000002ffu, 0x0004003du, 0x00000008u, 0x00000301u, 0x00000300u, + 0x00050085u, 0x00000008u, 0x00000302u, 0x000002feu, 0x00000301u, 0x0004003du, 0x00000008u, 0x00000303u, + 0x000002e6u, 0x00050081u, 0x00000008u, 0x00000304u, 0x00000303u, 0x00000302u, 0x0003003eu, 0x000002e6u, + 0x00000304u, 0x000200f9u, 0x000002ecu, 0x000200f8u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x00000305u, + 0x000002e7u, 0x00050080u, 0x00000006u, 0x00000306u, 0x00000305u, 0x00000098u, 0x0003003eu, 0x000002e7u, + 0x00000306u, 0x000200f9u, 0x000002e9u, 0x000200f8u, 0x000002ebu, 0x0004003du, 0x00000008u, 0x00000309u, + 0x000002e6u, 0x0003003eu, 0x00000308u, 0x00000309u, 0x00050039u, 0x00000008u, 0x0000030au, 0x00000028u, + 0x00000308u, 0x0003003eu, 0x00000307u, 0x0000030au, 0x0003003eu, 0x0000030bu, 0x000001f5u, 0x0004003du, + 0x00000006u, 0x0000030cu, 0x00000174u, 0x00050041u, 0x0000017cu, 0x0000030du, 0x0000017bu, 0x000001cbu, + 0x0004003du, 0x00000006u, 0x0000030eu, 0x0000030du, 0x000500b0u, 0x00000044u, 0x0000030fu, 0x0000030cu, + 0x0000030eu, 0x000300f7u, 0x00000311u, 0x00000000u, 0x000400fau, 0x0000030fu, 0x00000310u, 0x00000311u, + 0x000200f8u, 0x00000310u, 0x000300f7u, 0x00000315u, 0x00000000u, 0x000400fau, 0x00000312u, 0x00000314u, + 0x00000327u, 0x000200f8u, 0x00000314u, 0x00050041u, 0x0000017cu, 0x0000031au, 0x0000017bu, 0x0000006fu, + 0x0004003du, 0x00000006u, 0x0000031bu, 0x0000031au, 0x000500c2u, 0x00000006u, 0x0000031cu, 0x0000031bu, + 0x000001c3u, 0x0004003du, 0x00000006u, 0x0000031du, 0x000002c3u, 0x00050041u, 0x0000017cu, 0x0000031eu, + 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x0000031fu, 0x0000031eu, 0x00050084u, 0x00000006u, + 0x00000320u, 0x0000031du, 0x0000031fu, 0x0004003du, 0x00000006u, 0x00000321u, 0x00000174u, 0x00050080u, + 0x00000006u, 0x00000322u, 0x00000320u, 0x00000321u, 0x00050080u, 0x00000006u, 0x00000323u, 0x0000031cu, + 0x00000322u, 0x00060041u, 0x00000202u, 0x00000324u, 0x00000319u, 0x000000ebu, 0x00000323u, 0x0004003du, + 0x00000006u, 0x00000325u, 0x00000324u, 0x0004007cu, 0x00000008u, 0x00000326u, 0x00000325u, 0x0003003eu, + 0x00000313u, 0x00000326u, 0x000200f9u, 0x00000315u, 0x000200f8u, 0x00000327u, 0x00050041u, 0x0000017cu, + 0x0000032cu, 0x0000017bu, 0x0000006fu, 0x0004003du, 0x00000006u, 0x0000032du, 0x0000032cu, 0x000500c2u, + 0x00000006u, 0x0000032eu, 0x0000032du, 0x00000098u, 0x0004003du, 0x00000006u, 0x0000032fu, 0x000002c3u, + 0x00050041u, 0x0000017cu, 0x00000330u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000331u, + 0x00000330u, 0x00050084u, 0x00000006u, 0x00000332u, 0x0000032fu, 0x00000331u, 0x0004003du, 0x00000006u, + 0x00000333u, 0x00000174u, 0x00050080u, 0x00000006u, 0x00000334u, 0x00000332u, 0x00000333u, 0x00050080u, + 0x00000006u, 0x00000335u, 0x0000032eu, 0x00000334u, 0x00060041u, 0x0000028bu, 0x00000336u, 0x0000032bu, + 0x000000ebu, 0x00000335u, 0x0004003du, 0x0000027fu, 0x00000337u, 0x00000336u, 0x00040071u, 0x00000006u, + 0x00000338u, 0x00000337u, 0x0003003eu, 0x00000339u, 0x00000338u, 0x0003003eu, 0x0000033au, 0x0000026au, + 0x00060039u, 0x00000008u, 0x0000033bu, 0x0000001bu, 0x00000339u, 0x0000033au, 0x0003003eu, 0x00000313u, + 0x0000033bu, 0x000200f9u, 0x00000315u, 0x000200f8u, 0x00000315u, 0x0004003du, 0x00000008u, 0x0000033cu, + 0x00000313u, 0x0003003eu, 0x0000030bu, 0x0000033cu, 0x000200f9u, 0x00000311u, 0x000200f8u, 0x00000311u, + 0x0004003du, 0x00000008u, 0x0000033eu, 0x0000030bu, 0x0004003du, 0x00000008u, 0x0000033fu, 0x00000307u, + 0x00050083u, 0x00000008u, 0x00000340u, 0x0000033eu, 0x0000033fu, 0x0004003du, 0x00000008u, 0x00000341u, + 0x000002d9u, 0x00050085u, 0x00000008u, 0x00000342u, 0x00000340u, 0x00000341u, 0x0003003eu, 0x0000033du, + 0x00000342u, 0x0003003eu, 0x00000343u, 0x000001f5u, 0x0004003du, 0x00000006u, 0x00000345u, 0x0000018au, + 0x0003003eu, 0x00000344u, 0x00000345u, 0x000200f9u, 0x00000346u, 0x000200f8u, 0x00000346u, 0x000400f6u, + 0x00000348u, 0x00000349u, 0x00000000u, 0x000200f9u, 0x0000034au, 0x000200f8u, 0x0000034au, 0x0004003du, + 0x00000006u, 0x0000034bu, 0x00000344u, 0x0004003du, 0x00000006u, 0x0000034cu, 0x0000018eu, 0x000500b0u, + 0x00000044u, 0x0000034du, 0x0000034bu, 0x0000034cu, 0x000400fau, 0x0000034du, 0x00000347u, 0x00000348u, + 0x000200f8u, 0x00000347u, 0x0004003du, 0x00000006u, 0x0000034fu, 0x00000180u, 0x0004003du, 0x00000006u, + 0x00000350u, 0x00000344u, 0x00050080u, 0x00000006u, 0x00000351u, 0x0000034fu, 0x00000350u, 0x00050041u, + 0x0000019du, 0x00000352u, 0x00000209u, 0x00000351u, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000352u, + 0x0004003du, 0x00000008u, 0x00000354u, 0x0000033du, 0x0004003du, 0x00000006u, 0x00000355u, 0x00000344u, + 0x00050041u, 0x0000019du, 0x00000356u, 0x00000268u, 0x00000355u, 0x0004003du, 0x00000008u, 0x00000357u, + 0x00000356u, 0x00050085u, 0x00000008u, 0x00000358u, 0x00000354u, 0x00000357u, 0x00050081u, 0x00000008u, + 0x00000359u, 0x00000353u, 0x00000358u, 0x0003003eu, 0x0000034eu, 0x00000359u, 0x0004003du, 0x00000006u, + 0x0000035au, 0x00000180u, 0x0004003du, 0x00000006u, 0x0000035bu, 0x00000344u, 0x00050080u, 0x00000006u, + 0x0000035cu, 0x0000035au, 0x0000035bu, 0x0004003du, 0x00000008u, 0x0000035du, 0x0000034eu, 0x00050041u, + 0x0000019du, 0x0000035eu, 0x00000209u, 0x0000035cu, 0x0003003eu, 0x0000035eu, 0x0000035du, 0x0004003du, + 0x00000008u, 0x0000035fu, 0x0000034eu, 0x0004003du, 0x00000006u, 0x00000360u, 0x00000344u, 0x00050041u, + 0x0000019du, 0x00000361u, 0x00000294u, 0x00000360u, 0x0004003du, 0x00000008u, 0x00000362u, 0x00000361u, + 0x00050085u, 0x00000008u, 0x00000363u, 0x0000035fu, 0x00000362u, 0x0004003du, 0x00000008u, 0x00000364u, + 0x00000343u, 0x00050081u, 0x00000008u, 0x00000365u, 0x00000364u, 0x00000363u, 0x0003003eu, 0x00000343u, + 0x00000365u, 0x000200f9u, 0x00000349u, 0x000200f8u, 0x00000349u, 0x0004003du, 0x00000006u, 0x00000366u, + 0x00000344u, 0x00050080u, 0x00000006u, 0x00000367u, 0x00000366u, 0x00000098u, 0x0003003eu, 0x00000344u, + 0x00000367u, 0x000200f9u, 0x00000346u, 0x000200f8u, 0x00000348u, 0x0004003du, 0x00000008u, 0x0000036au, + 0x00000343u, 0x0003003eu, 0x00000369u, 0x0000036au, 0x00050039u, 0x00000008u, 0x0000036bu, 0x00000028u, + 0x00000369u, 0x0003003eu, 0x00000368u, 0x0000036bu, 0x0004003du, 0x00000006u, 0x0000036cu, 0x00000174u, + 0x00050041u, 0x0000017cu, 0x0000036du, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x0000036eu, + 0x0000036du, 0x000500b0u, 0x00000044u, 0x0000036fu, 0x0000036cu, 0x0000036eu, 0x0004003du, 0x00000006u, + 0x00000370u, 0x00000171u, 0x000500aau, 0x00000044u, 0x00000371u, 0x00000370u, 0x0000004eu, 0x000500a7u, + 0x00000044u, 0x00000372u, 0x0000036fu, 0x00000371u, 0x000300f7u, 0x00000374u, 0x00000000u, 0x000400fau, + 0x00000372u, 0x00000373u, 0x00000374u, 0x000200f8u, 0x00000373u, 0x000200f9u, 0x00000375u, 0x000200f8u, + 0x00000375u, 0x000400f6u, 0x00000377u, 0x00000378u, 0x00000000u, 0x000200f9u, 0x00000376u, 0x000200f8u, + 0x00000376u, 0x000300f7u, 0x0000037cu, 0x00000000u, 0x000400fau, 0x0000037au, 0x0000037bu, 0x0000038fu, + 0x000200f8u, 0x0000037bu, 0x00050041u, 0x0000017cu, 0x00000382u, 0x0000017bu, 0x00000381u, 0x0004003du, + 0x00000006u, 0x00000383u, 0x00000382u, 0x000500c2u, 0x00000006u, 0x00000384u, 0x00000383u, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x00000385u, 0x000002c3u, 0x00050041u, 0x0000017cu, 0x00000386u, 0x0000017bu, + 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000387u, 0x00000386u, 0x00050084u, 0x00000006u, 0x00000388u, + 0x00000385u, 0x00000387u, 0x0004003du, 0x00000006u, 0x00000389u, 0x00000174u, 0x00050080u, 0x00000006u, + 0x0000038au, 0x00000388u, 0x00000389u, 0x00050080u, 0x00000006u, 0x0000038bu, 0x00000384u, 0x0000038au, + 0x0004003du, 0x00000008u, 0x0000038cu, 0x00000368u, 0x0004007cu, 0x00000006u, 0x0000038du, 0x0000038cu, + 0x00060041u, 0x00000202u, 0x0000038eu, 0x00000380u, 0x000000ebu, 0x0000038bu, 0x0003003eu, 0x0000038eu, + 0x0000038du, 0x000200f9u, 0x0000037cu, 0x000200f8u, 0x0000038fu, 0x00050041u, 0x0000017cu, 0x00000394u, + 0x0000017bu, 0x00000381u, 0x0004003du, 0x00000006u, 0x00000395u, 0x00000394u, 0x000500c2u, 0x00000006u, + 0x00000396u, 0x00000395u, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000397u, 0x000002c3u, 0x00050041u, + 0x0000017cu, 0x00000398u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000399u, 0x00000398u, + 0x00050084u, 0x00000006u, 0x0000039au, 0x00000397u, 0x00000399u, 0x0004003du, 0x00000006u, 0x0000039bu, + 0x00000174u, 0x00050080u, 0x00000006u, 0x0000039cu, 0x0000039au, 0x0000039bu, 0x00050080u, 0x00000006u, + 0x0000039du, 0x00000396u, 0x0000039cu, 0x0004003du, 0x00000008u, 0x0000039fu, 0x00000368u, 0x0003003eu, + 0x0000039eu, 0x0000039fu, 0x0003003eu, 0x000003a0u, 0x00000379u, 0x00060039u, 0x00000006u, 0x000003a1u, + 0x00000020u, 0x0000039eu, 0x000003a0u, 0x00040071u, 0x0000027fu, 0x000003a2u, 0x000003a1u, 0x00060041u, + 0x0000028bu, 0x000003a3u, 0x00000393u, 0x000000ebu, 0x0000039du, 0x0003003eu, 0x000003a3u, 0x000003a2u, + 0x000200f9u, 0x0000037cu, 0x000200f8u, 0x0000037cu, 0x000200f9u, 0x00000378u, 0x000200f8u, 0x00000378u, + 0x000400fau, 0x000003a4u, 0x00000375u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x000200f9u, 0x00000374u, + 0x000200f8u, 0x00000374u, 0x000100fdu, 0x00010038u, +}; + constexpr uint32_t kSpv_vt_gdn_post_conv[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x0000048bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -3432,6 +4146,685 @@ constexpr uint32_t kSpv_vt_gdn_post_conv[] = { 0x00000008u, 0x00000199u, 0x0000018du, 0x000200feu, 0x00000199u, 0x00010038u, }; +constexpr uint32_t kSpv_vt_gdn_prefill[] = { + 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000405u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, + 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, + 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000169u, + 0x000003a6u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000080u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x00000169u, 0x0000000bu, 0x0000001bu, 0x00030047u, 0x00000179u, 0x00000002u, 0x00050048u, 0x00000179u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000179u, 0x00000001u, 0x00000023u, 0x00000004u, + 0x00050048u, 0x00000179u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000179u, 0x00000003u, + 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000179u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, + 0x00000179u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000179u, 0x00000006u, 0x00000023u, + 0x00000018u, 0x00050048u, 0x00000179u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000179u, + 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000179u, 0x00000009u, 0x00000023u, 0x00000024u, + 0x00050048u, 0x00000179u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000179u, 0x0000000bu, + 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000179u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, + 0x00000179u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000179u, 0x0000000eu, 0x00000023u, + 0x00000038u, 0x00050048u, 0x00000179u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000179u, + 0x00000010u, 0x00000023u, 0x00000040u, 0x00040047u, 0x000001fbu, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000001fcu, 0x00000002u, 0x00050048u, 0x000001fcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x000001feu, 0x00000021u, 0x0000000au, 0x00040047u, 0x000001feu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x0000026au, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000026fu, 0x00000006u, 0x00000004u, 0x00030047u, + 0x00000270u, 0x00000002u, 0x00040048u, 0x00000270u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000270u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000272u, 0x00000018u, 0x00040047u, 0x00000272u, + 0x00000021u, 0x00000002u, 0x00040047u, 0x00000272u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000280u, + 0x00000006u, 0x00000002u, 0x00030047u, 0x00000281u, 0x00000002u, 0x00040048u, 0x00000281u, 0x00000000u, + 0x00000018u, 0x00050048u, 0x00000281u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000283u, + 0x00000018u, 0x00040047u, 0x00000283u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000283u, 0x00000022u, + 0x00000000u, 0x00040047u, 0x0000029au, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000029bu, 0x00000002u, + 0x00040048u, 0x0000029bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000029bu, 0x00000000u, 0x00000023u, + 0x00000000u, 0x00030047u, 0x0000029du, 0x00000018u, 0x00040047u, 0x0000029du, 0x00000021u, 0x00000000u, + 0x00040047u, 0x0000029du, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002aau, 0x00000006u, 0x00000002u, + 0x00030047u, 0x000002abu, 0x00000002u, 0x00040048u, 0x000002abu, 0x00000000u, 0x00000018u, 0x00050048u, + 0x000002abu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002adu, 0x00000018u, 0x00040047u, + 0x000002adu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000002adu, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000002cbu, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002ccu, 0x00000002u, 0x00040048u, 0x000002ccu, + 0x00000000u, 0x00000018u, 0x00050048u, 0x000002ccu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, + 0x000002ceu, 0x00000018u, 0x00040047u, 0x000002ceu, 0x00000021u, 0x00000008u, 0x00040047u, 0x000002ceu, + 0x00000022u, 0x00000000u, 0x00040047u, 0x000002dau, 0x00000006u, 0x00000004u, 0x00030047u, 0x000002dbu, + 0x00000002u, 0x00040048u, 0x000002dbu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002dbu, 0x00000000u, + 0x00000023u, 0x00000000u, 0x00030047u, 0x000002ddu, 0x00000018u, 0x00040047u, 0x000002ddu, 0x00000021u, + 0x00000009u, 0x00040047u, 0x000002ddu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000316u, 0x00000006u, + 0x00000004u, 0x00030047u, 0x00000317u, 0x00000002u, 0x00040048u, 0x00000317u, 0x00000000u, 0x00000018u, + 0x00050048u, 0x00000317u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000319u, 0x00000018u, + 0x00040047u, 0x00000319u, 0x00000021u, 0x00000004u, 0x00040047u, 0x00000319u, 0x00000022u, 0x00000000u, + 0x00040047u, 0x00000328u, 0x00000006u, 0x00000002u, 0x00030047u, 0x00000329u, 0x00000002u, 0x00040048u, + 0x00000329u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000329u, 0x00000000u, 0x00000023u, 0x00000000u, + 0x00030047u, 0x0000032bu, 0x00000018u, 0x00040047u, 0x0000032bu, 0x00000021u, 0x00000005u, 0x00040047u, + 0x0000032bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000379u, 0x00000001u, 0x00000001u, 0x00040047u, + 0x0000037du, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000037eu, 0x00000002u, 0x00050048u, 0x0000037eu, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000380u, 0x00000021u, 0x00000006u, 0x00040047u, + 0x00000380u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000390u, 0x00000006u, 0x00000002u, 0x00030047u, + 0x00000391u, 0x00000002u, 0x00050048u, 0x00000391u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, + 0x00000393u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000393u, 0x00000022u, 0x00000000u, 0x00040047u, + 0x000003a6u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000003d2u, 0x00000006u, 0x00000004u, 0x00030047u, + 0x000003d3u, 0x00000002u, 0x00040048u, 0x000003d3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003d3u, + 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003d5u, 0x00000018u, 0x00040047u, 0x000003d5u, + 0x00000021u, 0x0000000bu, 0x00040047u, 0x000003d5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000404u, + 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, + 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, + 0x00000008u, 0x00000020u, 0x00040021u, 0x00000009u, 0x00000008u, 0x00000007u, 0x00040020u, 0x0000000du, + 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000eu, 0x00000006u, 0x0000000du, 0x00050021u, 0x00000018u, + 0x00000008u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000001du, 0x00000006u, 0x0000000du, 0x00000007u, + 0x00040021u, 0x00000022u, 0x00000002u, 0x00000007u, 0x00040021u, 0x00000026u, 0x00000008u, 0x0000000du, + 0x00060021u, 0x0000002au, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00040015u, 0x0000003bu, + 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000003bu, 0x0000003cu, 0x00000010u, 0x00020014u, 0x00000044u, + 0x0004002bu, 0x00000006u, 0x00000046u, 0x7f800000u, 0x0004002bu, 0x00000006u, 0x0000004cu, 0x007fffffu, + 0x0004002bu, 0x00000006u, 0x0000004eu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000055u, 0x00000040u, + 0x0004002bu, 0x00000006u, 0x00000057u, 0x0000ffffu, 0x0004002bu, 0x00000006u, 0x0000005bu, 0x00007fffu, + 0x0004002bu, 0x00000006u, 0x0000005eu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000006au, 0x00008000u, + 0x0004002bu, 0x0000003bu, 0x0000006fu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000071u, 0x0000001fu, + 0x0004002bu, 0x00000006u, 0x00000075u, 0x000003ffu, 0x0004002bu, 0x0000003bu, 0x0000007eu, 0x0000000du, + 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000400u, 0x0004002bu, 0x0000003bu, 0x00000098u, 0x00000001u, + 0x0004002bu, 0x00000006u, 0x000000a0u, 0x00000071u, 0x0004002bu, 0x0000003bu, 0x000000a3u, 0x00000017u, + 0x0004002bu, 0x00000006u, 0x000000adu, 0x00000070u, 0x0004002bu, 0x00000006u, 0x000000c1u, 0x000000ffu, + 0x00040020u, 0x000000c3u, 0x00000007u, 0x0000003bu, 0x0004002bu, 0x0000003bu, 0x000000c7u, 0x0000007fu, + 0x0004002bu, 0x0000003bu, 0x000000c9u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000000d3u, 0x00007c00u, + 0x0004002bu, 0x00000006u, 0x000000dau, 0x00000200u, 0x0004002bu, 0x0000003bu, 0x000000e3u, 0x0000001fu, + 0x0004002bu, 0x0000003bu, 0x000000ebu, 0x00000000u, 0x0004002bu, 0x0000003bu, 0x000000f0u, 0xfffffff6u, + 0x0004002bu, 0x00000006u, 0x000000f6u, 0x00800000u, 0x0004002bu, 0x0000003bu, 0x000000fau, 0x0000000eu, + 0x0004002bu, 0x00000006u, 0x0000012du, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00000130u, 0x00001000u, + 0x00040020u, 0x00000165u, 0x00000006u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000166u, 0x00000006u, + 0x00040017u, 0x00000167u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000168u, 0x00000001u, 0x00000167u, + 0x0004003bu, 0x00000168u, 0x00000169u, 0x00000001u, 0x00040020u, 0x0000016au, 0x00000001u, 0x00000006u, + 0x0004003bu, 0x00000165u, 0x0000016du, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000016fu, 0x00000008u, + 0x0004003bu, 0x00000165u, 0x00000171u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000174u, 0x00000006u, + 0x0004003bu, 0x00000165u, 0x00000178u, 0x00000006u, 0x0013001eu, 0x00000179u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, + 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00040020u, + 0x0000017au, 0x00000009u, 0x00000179u, 0x0004003bu, 0x0000017au, 0x0000017bu, 0x00000009u, 0x00040020u, + 0x0000017cu, 0x00000009u, 0x00000006u, 0x0004003bu, 0x00000165u, 0x00000180u, 0x00000006u, 0x0004003bu, + 0x00000165u, 0x0000018au, 0x00000006u, 0x0004003bu, 0x00000165u, 0x0000018eu, 0x00000006u, 0x0004002bu, + 0x00000006u, 0x00000195u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000196u, 0x00000108u, 0x0004002bu, + 0x00000006u, 0x00000197u, 0x00000080u, 0x0004001cu, 0x00000198u, 0x00000008u, 0x00000197u, 0x00040020u, + 0x00000199u, 0x00000004u, 0x00000198u, 0x0004003bu, 0x00000199u, 0x0000019au, 0x00000004u, 0x00040020u, + 0x0000019du, 0x00000004u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000001a0u, 0x00000004u, 0x0004002bu, + 0x0000003bu, 0x000001c3u, 0x00000002u, 0x0004002bu, 0x0000003bu, 0x000001cbu, 0x00000003u, 0x0004002bu, + 0x00000006u, 0x000001dau, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000001f5u, 0x00000000u, 0x0003001du, + 0x000001fbu, 0x00000006u, 0x0003001eu, 0x000001fcu, 0x000001fbu, 0x00040020u, 0x000001fdu, 0x0000000cu, + 0x000001fcu, 0x0004003bu, 0x000001fdu, 0x000001feu, 0x0000000cu, 0x00040020u, 0x00000202u, 0x0000000cu, + 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000206u, 0x00000810u, 0x0004001cu, 0x00000207u, 0x00000008u, + 0x00000206u, 0x00040020u, 0x00000208u, 0x00000004u, 0x00000207u, 0x0004003bu, 0x00000208u, 0x00000209u, + 0x00000004u, 0x0004003bu, 0x00000199u, 0x00000268u, 0x00000004u, 0x00040032u, 0x00000006u, 0x0000026au, + 0x00000000u, 0x00060034u, 0x00000044u, 0x0000026bu, 0x000000aau, 0x0000026au, 0x0000004eu, 0x0003001du, + 0x0000026fu, 0x00000006u, 0x0003001eu, 0x00000270u, 0x0000026fu, 0x00040020u, 0x00000271u, 0x0000000cu, + 0x00000270u, 0x0004003bu, 0x00000271u, 0x00000272u, 0x0000000cu, 0x0004002bu, 0x0000003bu, 0x00000273u, + 0x00000009u, 0x00040015u, 0x0000027fu, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000280u, 0x0000027fu, + 0x0003001eu, 0x00000281u, 0x00000280u, 0x00040020u, 0x00000282u, 0x0000000cu, 0x00000281u, 0x0004003bu, + 0x00000282u, 0x00000283u, 0x0000000cu, 0x00040020u, 0x0000028bu, 0x0000000cu, 0x0000027fu, 0x0004003bu, + 0x00000199u, 0x00000294u, 0x00000004u, 0x00060034u, 0x00000044u, 0x00000296u, 0x000000aau, 0x0000026au, + 0x0000004eu, 0x0003001du, 0x0000029au, 0x00000006u, 0x0003001eu, 0x0000029bu, 0x0000029au, 0x00040020u, + 0x0000029cu, 0x0000000cu, 0x0000029bu, 0x0004003bu, 0x0000029cu, 0x0000029du, 0x0000000cu, 0x0004002bu, + 0x0000003bu, 0x0000029eu, 0x00000008u, 0x0003001du, 0x000002aau, 0x0000027fu, 0x0003001eu, 0x000002abu, + 0x000002aau, 0x00040020u, 0x000002acu, 0x0000000cu, 0x000002abu, 0x0004003bu, 0x000002acu, 0x000002adu, + 0x0000000cu, 0x00040020u, 0x000002bcu, 0x00000009u, 0x00000008u, 0x0003001du, 0x000002cbu, 0x00000006u, + 0x0003001eu, 0x000002ccu, 0x000002cbu, 0x00040020u, 0x000002cdu, 0x0000000cu, 0x000002ccu, 0x0004003bu, + 0x000002cdu, 0x000002ceu, 0x0000000cu, 0x0004002bu, 0x0000003bu, 0x000002cfu, 0x0000000cu, 0x0003001du, + 0x000002dau, 0x00000006u, 0x0003001eu, 0x000002dbu, 0x000002dau, 0x00040020u, 0x000002dcu, 0x0000000cu, + 0x000002dbu, 0x0004003bu, 0x000002dcu, 0x000002ddu, 0x0000000cu, 0x00060034u, 0x00000044u, 0x00000312u, + 0x000000aau, 0x0000026au, 0x0000004eu, 0x0003001du, 0x00000316u, 0x00000006u, 0x0003001eu, 0x00000317u, + 0x00000316u, 0x00040020u, 0x00000318u, 0x0000000cu, 0x00000317u, 0x0004003bu, 0x00000318u, 0x00000319u, + 0x0000000cu, 0x0003001du, 0x00000328u, 0x0000027fu, 0x0003001eu, 0x00000329u, 0x00000328u, 0x00040020u, + 0x0000032au, 0x0000000cu, 0x00000329u, 0x0004003bu, 0x0000032au, 0x0000032bu, 0x0000000cu, 0x00040032u, + 0x00000006u, 0x00000379u, 0x00000000u, 0x00060034u, 0x00000044u, 0x0000037au, 0x000000aau, 0x00000379u, + 0x0000004eu, 0x0003001du, 0x0000037du, 0x00000006u, 0x0003001eu, 0x0000037eu, 0x0000037du, 0x00040020u, + 0x0000037fu, 0x0000000cu, 0x0000037eu, 0x0004003bu, 0x0000037fu, 0x00000380u, 0x0000000cu, 0x0004002bu, + 0x0000003bu, 0x00000381u, 0x0000000bu, 0x0003001du, 0x00000390u, 0x0000027fu, 0x0003001eu, 0x00000391u, + 0x00000390u, 0x00040020u, 0x00000392u, 0x0000000cu, 0x00000391u, 0x0004003bu, 0x00000392u, 0x00000393u, + 0x0000000cu, 0x0003002au, 0x00000044u, 0x000003a4u, 0x0004003bu, 0x00000168u, 0x000003a6u, 0x00000001u, + 0x0004002bu, 0x0000003bu, 0x000003abu, 0x00000004u, 0x0004002bu, 0x0000003bu, 0x000003c0u, 0x00000005u, + 0x0003001du, 0x000003d2u, 0x00000006u, 0x0003001eu, 0x000003d3u, 0x000003d2u, 0x00040020u, 0x000003d4u, + 0x0000000cu, 0x000003d3u, 0x0004003bu, 0x000003d4u, 0x000003d5u, 0x0000000cu, 0x0004003bu, 0x00000199u, + 0x00000403u, 0x00000004u, 0x0006002cu, 0x00000167u, 0x00000404u, 0x00000197u, 0x0000005eu, 0x0000005eu, + 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, + 0x00000007u, 0x000003a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a9u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003b4u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003beu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003c7u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003ccu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003ceu, 0x00000007u, 0x0004003bu, 0x000000c3u, 0x000003d1u, 0x00000007u, 0x0004003bu, + 0x000000c3u, 0x000003deu, 0x00000007u, 0x0004003bu, 0x000000c3u, 0x000003e8u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003f5u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003fcu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000003feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000400u, 0x00000007u, 0x00050041u, + 0x0000016au, 0x000003a7u, 0x000003a6u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003a8u, 0x000003a7u, + 0x0003003eu, 0x000003a5u, 0x000003a8u, 0x0004003du, 0x00000006u, 0x000003aau, 0x000003a5u, 0x00050041u, + 0x0000017cu, 0x000003acu, 0x0000017bu, 0x000003abu, 0x0004003du, 0x00000006u, 0x000003adu, 0x000003acu, + 0x00050089u, 0x00000006u, 0x000003aeu, 0x000003aau, 0x000003adu, 0x0003003eu, 0x000003a9u, 0x000003aeu, + 0x0004003du, 0x00000006u, 0x000003b0u, 0x000003a5u, 0x00050041u, 0x0000017cu, 0x000003b1u, 0x0000017bu, + 0x000003abu, 0x0004003du, 0x00000006u, 0x000003b2u, 0x000003b1u, 0x00050086u, 0x00000006u, 0x000003b3u, + 0x000003b0u, 0x000003b2u, 0x0003003eu, 0x000003afu, 0x000003b3u, 0x0004003du, 0x00000006u, 0x000003b5u, + 0x000003afu, 0x00050041u, 0x0000017cu, 0x000003b6u, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x000003b7u, 0x000003b6u, 0x00050089u, 0x00000006u, 0x000003b8u, 0x000003b5u, 0x000003b7u, 0x0003003eu, + 0x000003b4u, 0x000003b8u, 0x0004003du, 0x00000006u, 0x000003bau, 0x000003afu, 0x00050041u, 0x0000017cu, + 0x000003bbu, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000003bcu, 0x000003bbu, 0x00050086u, + 0x00000006u, 0x000003bdu, 0x000003bau, 0x000003bcu, 0x0003003eu, 0x000003b9u, 0x000003bdu, 0x0004003du, + 0x00000006u, 0x000003bfu, 0x000003b4u, 0x00050041u, 0x0000017cu, 0x000003c1u, 0x0000017bu, 0x000003c0u, + 0x0004003du, 0x00000006u, 0x000003c2u, 0x000003c1u, 0x00050086u, 0x00000006u, 0x000003c3u, 0x000003bfu, + 0x000003c2u, 0x0003003eu, 0x000003beu, 0x000003c3u, 0x0004003du, 0x00000006u, 0x000003c5u, 0x000003a9u, + 0x00050084u, 0x00000006u, 0x000003c6u, 0x000003c5u, 0x000001dau, 0x0003003eu, 0x000003c4u, 0x000003c6u, + 0x0004003du, 0x00000006u, 0x000003c8u, 0x000003c4u, 0x0003003eu, 0x000003c7u, 0x000003c8u, 0x00050039u, + 0x00000002u, 0x000003c9u, 0x00000024u, 0x000003c7u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x000003b9u, + 0x0003003eu, 0x000003cau, 0x000003cbu, 0x0004003du, 0x00000006u, 0x000003cdu, 0x000003b4u, 0x0003003eu, + 0x000003ccu, 0x000003cdu, 0x0004003du, 0x00000006u, 0x000003cfu, 0x000003c4u, 0x0003003eu, 0x000003ceu, + 0x000003cfu, 0x00070039u, 0x00000002u, 0x000003d0u, 0x0000002eu, 0x000003cau, 0x000003ccu, 0x000003ceu, + 0x00050041u, 0x0000017cu, 0x000003d6u, 0x0000017bu, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000003d7u, + 0x000003d6u, 0x000500c2u, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x000003d9u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003dau, 0x000003d8u, 0x000003d9u, 0x00060041u, + 0x00000202u, 0x000003dbu, 0x000003d5u, 0x000000ebu, 0x000003dau, 0x0004003du, 0x00000006u, 0x000003dcu, + 0x000003dbu, 0x0004007cu, 0x0000003bu, 0x000003ddu, 0x000003dcu, 0x0003003eu, 0x000003d1u, 0x000003ddu, + 0x00050041u, 0x0000017cu, 0x000003dfu, 0x0000017bu, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000003e0u, + 0x000003dfu, 0x000500c2u, 0x00000006u, 0x000003e1u, 0x000003e0u, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x000003e2u, 0x000003b9u, 0x00050080u, 0x00000006u, 0x000003e3u, 0x000003e1u, 0x000003e2u, 0x00050080u, + 0x00000006u, 0x000003e4u, 0x000003e3u, 0x0000005eu, 0x00060041u, 0x00000202u, 0x000003e5u, 0x000003d5u, + 0x000000ebu, 0x000003e4u, 0x0004003du, 0x00000006u, 0x000003e6u, 0x000003e5u, 0x0004007cu, 0x0000003bu, + 0x000003e7u, 0x000003e6u, 0x0003003eu, 0x000003deu, 0x000003e7u, 0x0004003du, 0x0000003bu, 0x000003e9u, + 0x000003d1u, 0x0003003eu, 0x000003e8u, 0x000003e9u, 0x000200f9u, 0x000003eau, 0x000200f8u, 0x000003eau, + 0x000400f6u, 0x000003ecu, 0x000003edu, 0x00000000u, 0x000200f9u, 0x000003eeu, 0x000200f8u, 0x000003eeu, + 0x0004003du, 0x0000003bu, 0x000003efu, 0x000003e8u, 0x0004003du, 0x0000003bu, 0x000003f0u, 0x000003deu, + 0x000500b1u, 0x00000044u, 0x000003f1u, 0x000003efu, 0x000003f0u, 0x000400fau, 0x000003f1u, 0x000003ebu, + 0x000003ecu, 0x000200f8u, 0x000003ebu, 0x0004003du, 0x0000003bu, 0x000003f2u, 0x000003e8u, 0x0004007cu, + 0x00000006u, 0x000003f3u, 0x000003f2u, 0x0003003eu, 0x000003f4u, 0x000003f3u, 0x0004003du, 0x00000006u, + 0x000003f6u, 0x000003b4u, 0x0003003eu, 0x000003f5u, 0x000003f6u, 0x0004003du, 0x00000006u, 0x000003f8u, + 0x000003beu, 0x0003003eu, 0x000003f7u, 0x000003f8u, 0x00070039u, 0x00000002u, 0x000003f9u, 0x00000038u, + 0x000003f4u, 0x000003f5u, 0x000003f7u, 0x000200f9u, 0x000003edu, 0x000200f8u, 0x000003edu, 0x0004003du, + 0x0000003bu, 0x000003fau, 0x000003e8u, 0x00050080u, 0x0000003bu, 0x000003fbu, 0x000003fau, 0x00000098u, + 0x0003003eu, 0x000003e8u, 0x000003fbu, 0x000200f9u, 0x000003eau, 0x000200f8u, 0x000003ecu, 0x0004003du, + 0x00000006u, 0x000003fdu, 0x000003b9u, 0x0003003eu, 0x000003fcu, 0x000003fdu, 0x0004003du, 0x00000006u, + 0x000003ffu, 0x000003b4u, 0x0003003eu, 0x000003feu, 0x000003ffu, 0x0004003du, 0x00000006u, 0x00000401u, + 0x000003c4u, 0x0003003eu, 0x00000400u, 0x00000401u, 0x00070039u, 0x00000002u, 0x00000402u, 0x00000033u, + 0x000003fcu, 0x000003feu, 0x00000400u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000000bu, + 0x00000000u, 0x00000009u, 0x00030037u, 0x00000007u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, + 0x00000006u, 0x0000003au, 0x0000000au, 0x000500c4u, 0x00000006u, 0x0000003du, 0x0000003au, 0x0000003cu, + 0x0004007cu, 0x00000008u, 0x0000003eu, 0x0000003du, 0x000200feu, 0x0000003eu, 0x00010038u, 0x00050036u, + 0x00000006u, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x0000000fu, 0x000200f8u, + 0x00000011u, 0x0004003bu, 0x00000007u, 0x00000041u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005au, + 0x00000007u, 0x0004003du, 0x00000008u, 0x00000042u, 0x0000000fu, 0x0004007cu, 0x00000006u, 0x00000043u, + 0x00000042u, 0x0003003eu, 0x00000041u, 0x00000043u, 0x0004003du, 0x00000006u, 0x00000045u, 0x00000041u, + 0x000500c7u, 0x00000006u, 0x00000047u, 0x00000045u, 0x00000046u, 0x000500aau, 0x00000044u, 0x00000048u, + 0x00000047u, 0x00000046u, 0x000300f7u, 0x0000004au, 0x00000000u, 0x000400fau, 0x00000048u, 0x00000049u, + 0x0000004au, 0x000200f8u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000004bu, 0x00000041u, 0x000500c7u, + 0x00000006u, 0x0000004du, 0x0000004bu, 0x0000004cu, 0x000500abu, 0x00000044u, 0x0000004fu, 0x0000004du, + 0x0000004eu, 0x000200f9u, 0x0000004au, 0x000200f8u, 0x0000004au, 0x000700f5u, 0x00000044u, 0x00000050u, + 0x00000048u, 0x00000011u, 0x0000004fu, 0x00000049u, 0x000300f7u, 0x00000052u, 0x00000000u, 0x000400fau, + 0x00000050u, 0x00000051u, 0x00000052u, 0x000200f8u, 0x00000051u, 0x0004003du, 0x00000006u, 0x00000053u, + 0x00000041u, 0x000500c2u, 0x00000006u, 0x00000054u, 0x00000053u, 0x0000003cu, 0x000500c5u, 0x00000006u, + 0x00000056u, 0x00000054u, 0x00000055u, 0x000500c7u, 0x00000006u, 0x00000058u, 0x00000056u, 0x00000057u, + 0x000200feu, 0x00000058u, 0x000200f8u, 0x00000052u, 0x0004003du, 0x00000006u, 0x0000005cu, 0x00000041u, + 0x000500c2u, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0000003cu, 0x000500c7u, 0x00000006u, 0x0000005fu, + 0x0000005du, 0x0000005eu, 0x00050080u, 0x00000006u, 0x00000060u, 0x0000005bu, 0x0000005fu, 0x0003003eu, + 0x0000005au, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000041u, 0x0004003du, 0x00000006u, + 0x00000062u, 0x0000005au, 0x00050080u, 0x00000006u, 0x00000063u, 0x00000061u, 0x00000062u, 0x000500c2u, + 0x00000006u, 0x00000064u, 0x00000063u, 0x0000003cu, 0x000500c7u, 0x00000006u, 0x00000065u, 0x00000064u, + 0x00000057u, 0x000200feu, 0x00000065u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000013u, 0x00000000u, + 0x00000009u, 0x00030037u, 0x00000007u, 0x00000012u, 0x000200f8u, 0x00000014u, 0x0004003bu, 0x00000007u, + 0x00000068u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000006du, 0x00000007u, 0x0004003bu, 0x00000007u, + 0x00000073u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000008eu, 0x00000007u, 0x0004003du, 0x00000006u, + 0x00000069u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x0000006bu, 0x00000069u, 0x0000006au, 0x000500c4u, + 0x00000006u, 0x0000006cu, 0x0000006bu, 0x0000003cu, 0x0003003eu, 0x00000068u, 0x0000006cu, 0x0004003du, + 0x00000006u, 0x0000006eu, 0x00000012u, 0x000500c2u, 0x00000006u, 0x00000070u, 0x0000006eu, 0x0000006fu, + 0x000500c7u, 0x00000006u, 0x00000072u, 0x00000070u, 0x00000071u, 0x0003003eu, 0x0000006du, 0x00000072u, + 0x0004003du, 0x00000006u, 0x00000074u, 0x00000012u, 0x000500c7u, 0x00000006u, 0x00000076u, 0x00000074u, + 0x00000075u, 0x0003003eu, 0x00000073u, 0x00000076u, 0x0004003du, 0x00000006u, 0x00000077u, 0x0000006du, + 0x000500aau, 0x00000044u, 0x00000078u, 0x00000077u, 0x00000071u, 0x000300f7u, 0x0000007au, 0x00000000u, + 0x000400fau, 0x00000078u, 0x00000079u, 0x0000007au, 0x000200f8u, 0x00000079u, 0x0004003du, 0x00000006u, + 0x0000007bu, 0x00000068u, 0x000500c5u, 0x00000006u, 0x0000007cu, 0x0000007bu, 0x00000046u, 0x0004003du, + 0x00000006u, 0x0000007du, 0x00000073u, 0x000500c4u, 0x00000006u, 0x0000007fu, 0x0000007du, 0x0000007eu, + 0x000500c5u, 0x00000006u, 0x00000080u, 0x0000007cu, 0x0000007fu, 0x0004007cu, 0x00000008u, 0x00000081u, + 0x00000080u, 0x000200feu, 0x00000081u, 0x000200f8u, 0x0000007au, 0x0004003du, 0x00000006u, 0x00000083u, + 0x0000006du, 0x000500aau, 0x00000044u, 0x00000084u, 0x00000083u, 0x0000004eu, 0x000300f7u, 0x00000086u, + 0x00000000u, 0x000400fau, 0x00000084u, 0x00000085u, 0x00000086u, 0x000200f8u, 0x00000085u, 0x0004003du, + 0x00000006u, 0x00000087u, 0x00000073u, 0x000500aau, 0x00000044u, 0x00000088u, 0x00000087u, 0x0000004eu, + 0x000300f7u, 0x0000008au, 0x00000000u, 0x000400fau, 0x00000088u, 0x00000089u, 0x0000008au, 0x000200f8u, + 0x00000089u, 0x0004003du, 0x00000006u, 0x0000008bu, 0x00000068u, 0x0004007cu, 0x00000008u, 0x0000008cu, + 0x0000008bu, 0x000200feu, 0x0000008cu, 0x000200f8u, 0x0000008au, 0x0003003eu, 0x0000008eu, 0x0000004eu, + 0x000200f9u, 0x0000008fu, 0x000200f8u, 0x0000008fu, 0x000400f6u, 0x00000091u, 0x00000092u, 0x00000000u, + 0x000200f9u, 0x00000093u, 0x000200f8u, 0x00000093u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000073u, + 0x000500c7u, 0x00000006u, 0x00000096u, 0x00000094u, 0x00000095u, 0x000500aau, 0x00000044u, 0x00000097u, + 0x00000096u, 0x0000004eu, 0x000400fau, 0x00000097u, 0x00000090u, 0x00000091u, 0x000200f8u, 0x00000090u, + 0x0004003du, 0x00000006u, 0x00000099u, 0x00000073u, 0x000500c4u, 0x00000006u, 0x0000009au, 0x00000099u, + 0x00000098u, 0x0003003eu, 0x00000073u, 0x0000009au, 0x0004003du, 0x00000006u, 0x0000009bu, 0x0000008eu, + 0x00050080u, 0x00000006u, 0x0000009cu, 0x0000009bu, 0x0000005eu, 0x0003003eu, 0x0000008eu, 0x0000009cu, + 0x000200f9u, 0x00000092u, 0x000200f8u, 0x00000092u, 0x000200f9u, 0x0000008fu, 0x000200f8u, 0x00000091u, + 0x0004003du, 0x00000006u, 0x0000009du, 0x00000073u, 0x000500c7u, 0x00000006u, 0x0000009eu, 0x0000009du, + 0x00000075u, 0x0003003eu, 0x00000073u, 0x0000009eu, 0x0004003du, 0x00000006u, 0x0000009fu, 0x00000068u, + 0x0004003du, 0x00000006u, 0x000000a1u, 0x0000008eu, 0x00050082u, 0x00000006u, 0x000000a2u, 0x000000a0u, + 0x000000a1u, 0x000500c4u, 0x00000006u, 0x000000a4u, 0x000000a2u, 0x000000a3u, 0x000500c5u, 0x00000006u, + 0x000000a5u, 0x0000009fu, 0x000000a4u, 0x0004003du, 0x00000006u, 0x000000a6u, 0x00000073u, 0x000500c4u, + 0x00000006u, 0x000000a7u, 0x000000a6u, 0x0000007eu, 0x000500c5u, 0x00000006u, 0x000000a8u, 0x000000a5u, + 0x000000a7u, 0x0004007cu, 0x00000008u, 0x000000a9u, 0x000000a8u, 0x000200feu, 0x000000a9u, 0x000200f8u, + 0x00000086u, 0x0004003du, 0x00000006u, 0x000000abu, 0x00000068u, 0x0004003du, 0x00000006u, 0x000000acu, + 0x0000006du, 0x00050080u, 0x00000006u, 0x000000aeu, 0x000000acu, 0x000000adu, 0x000500c4u, 0x00000006u, + 0x000000afu, 0x000000aeu, 0x000000a3u, 0x000500c5u, 0x00000006u, 0x000000b0u, 0x000000abu, 0x000000afu, + 0x0004003du, 0x00000006u, 0x000000b1u, 0x00000073u, 0x000500c4u, 0x00000006u, 0x000000b2u, 0x000000b1u, + 0x0000007eu, 0x000500c5u, 0x00000006u, 0x000000b3u, 0x000000b0u, 0x000000b2u, 0x0004007cu, 0x00000008u, + 0x000000b4u, 0x000000b3u, 0x000200feu, 0x000000b4u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000016u, + 0x00000000u, 0x0000000eu, 0x00030037u, 0x0000000du, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, + 0x00000007u, 0x000000b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bau, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000beu, 0x00000007u, 0x0004003bu, 0x000000c3u, 0x000000c4u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000d7u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x000000f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000feu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000108u, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000124u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000012bu, 0x00000007u, 0x0004003du, + 0x00000008u, 0x000000b8u, 0x00000015u, 0x0004007cu, 0x00000006u, 0x000000b9u, 0x000000b8u, 0x0003003eu, + 0x000000b7u, 0x000000b9u, 0x0004003du, 0x00000006u, 0x000000bbu, 0x000000b7u, 0x000500c2u, 0x00000006u, + 0x000000bcu, 0x000000bbu, 0x0000003cu, 0x000500c7u, 0x00000006u, 0x000000bdu, 0x000000bcu, 0x0000006au, + 0x0003003eu, 0x000000bau, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x000000b7u, 0x000500c2u, + 0x00000006u, 0x000000c0u, 0x000000bfu, 0x000000a3u, 0x000500c7u, 0x00000006u, 0x000000c2u, 0x000000c0u, + 0x000000c1u, 0x0003003eu, 0x000000beu, 0x000000c2u, 0x0004003du, 0x00000006u, 0x000000c5u, 0x000000beu, + 0x0004007cu, 0x0000003bu, 0x000000c6u, 0x000000c5u, 0x00050082u, 0x0000003bu, 0x000000c8u, 0x000000c6u, + 0x000000c7u, 0x00050080u, 0x0000003bu, 0x000000cau, 0x000000c8u, 0x000000c9u, 0x0003003eu, 0x000000c4u, + 0x000000cau, 0x0004003du, 0x00000006u, 0x000000ccu, 0x000000b7u, 0x000500c7u, 0x00000006u, 0x000000cdu, + 0x000000ccu, 0x0000004cu, 0x0003003eu, 0x000000cbu, 0x000000cdu, 0x0004003du, 0x00000006u, 0x000000ceu, + 0x000000beu, 0x000500aau, 0x00000044u, 0x000000cfu, 0x000000ceu, 0x000000c1u, 0x000300f7u, 0x000000d1u, + 0x00000000u, 0x000400fau, 0x000000cfu, 0x000000d0u, 0x000000d1u, 0x000200f8u, 0x000000d0u, 0x0004003du, + 0x00000006u, 0x000000d2u, 0x000000bau, 0x000500c5u, 0x00000006u, 0x000000d4u, 0x000000d2u, 0x000000d3u, + 0x0004003du, 0x00000006u, 0x000000d5u, 0x000000cbu, 0x000500abu, 0x00000044u, 0x000000d6u, 0x000000d5u, + 0x0000004eu, 0x000300f7u, 0x000000d9u, 0x00000000u, 0x000400fau, 0x000000d6u, 0x000000d8u, 0x000000deu, + 0x000200f8u, 0x000000d8u, 0x0004003du, 0x00000006u, 0x000000dbu, 0x000000cbu, 0x000500c2u, 0x00000006u, + 0x000000dcu, 0x000000dbu, 0x0000007eu, 0x000500c5u, 0x00000006u, 0x000000ddu, 0x000000dau, 0x000000dcu, + 0x0003003eu, 0x000000d7u, 0x000000ddu, 0x000200f9u, 0x000000d9u, 0x000200f8u, 0x000000deu, 0x0003003eu, + 0x000000d7u, 0x0000004eu, 0x000200f9u, 0x000000d9u, 0x000200f8u, 0x000000d9u, 0x0004003du, 0x00000006u, + 0x000000dfu, 0x000000d7u, 0x000500c5u, 0x00000006u, 0x000000e0u, 0x000000d4u, 0x000000dfu, 0x000200feu, + 0x000000e0u, 0x000200f8u, 0x000000d1u, 0x0004003du, 0x0000003bu, 0x000000e2u, 0x000000c4u, 0x000500afu, + 0x00000044u, 0x000000e4u, 0x000000e2u, 0x000000e3u, 0x000300f7u, 0x000000e6u, 0x00000000u, 0x000400fau, + 0x000000e4u, 0x000000e5u, 0x000000e6u, 0x000200f8u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e7u, + 0x000000bau, 0x000500c5u, 0x00000006u, 0x000000e8u, 0x000000e7u, 0x000000d3u, 0x000200feu, 0x000000e8u, + 0x000200f8u, 0x000000e6u, 0x0004003du, 0x0000003bu, 0x000000eau, 0x000000c4u, 0x000500b3u, 0x00000044u, + 0x000000ecu, 0x000000eau, 0x000000ebu, 0x000300f7u, 0x000000eeu, 0x00000000u, 0x000400fau, 0x000000ecu, + 0x000000edu, 0x000000eeu, 0x000200f8u, 0x000000edu, 0x0004003du, 0x0000003bu, 0x000000efu, 0x000000c4u, + 0x000500b1u, 0x00000044u, 0x000000f1u, 0x000000efu, 0x000000f0u, 0x000300f7u, 0x000000f3u, 0x00000000u, + 0x000400fau, 0x000000f1u, 0x000000f2u, 0x000000f3u, 0x000200f8u, 0x000000f2u, 0x0004003du, 0x00000006u, + 0x000000f4u, 0x000000bau, 0x000200feu, 0x000000f4u, 0x000200f8u, 0x000000f3u, 0x0004003du, 0x00000006u, + 0x000000f7u, 0x000000cbu, 0x000500c5u, 0x00000006u, 0x000000f8u, 0x000000f7u, 0x000000f6u, 0x0003003eu, + 0x000000cbu, 0x000000f8u, 0x0004003du, 0x0000003bu, 0x000000fbu, 0x000000c4u, 0x00050082u, 0x0000003bu, + 0x000000fcu, 0x000000fau, 0x000000fbu, 0x0004007cu, 0x00000006u, 0x000000fdu, 0x000000fcu, 0x0003003eu, + 0x000000f9u, 0x000000fdu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x000000cbu, 0x0004003du, 0x00000006u, + 0x00000100u, 0x000000f9u, 0x000500c2u, 0x00000006u, 0x00000101u, 0x000000ffu, 0x00000100u, 0x0003003eu, + 0x000000feu, 0x00000101u, 0x0004003du, 0x00000006u, 0x00000103u, 0x000000cbu, 0x0004003du, 0x00000006u, + 0x00000104u, 0x000000f9u, 0x000500c4u, 0x00000006u, 0x00000105u, 0x0000005eu, 0x00000104u, 0x00050082u, + 0x00000006u, 0x00000106u, 0x00000105u, 0x0000005eu, 0x000500c7u, 0x00000006u, 0x00000107u, 0x00000103u, + 0x00000106u, 0x0003003eu, 0x00000102u, 0x00000107u, 0x0004003du, 0x00000006u, 0x00000109u, 0x000000f9u, + 0x00050082u, 0x00000006u, 0x0000010au, 0x00000109u, 0x0000005eu, 0x000500c4u, 0x00000006u, 0x0000010bu, + 0x0000005eu, 0x0000010au, 0x0003003eu, 0x00000108u, 0x0000010bu, 0x0004003du, 0x00000006u, 0x0000010cu, + 0x00000102u, 0x0004003du, 0x00000006u, 0x0000010du, 0x00000108u, 0x000500acu, 0x00000044u, 0x0000010eu, + 0x0000010cu, 0x0000010du, 0x000400a8u, 0x00000044u, 0x0000010fu, 0x0000010eu, 0x000300f7u, 0x00000111u, + 0x00000000u, 0x000400fau, 0x0000010fu, 0x00000110u, 0x00000111u, 0x000200f8u, 0x00000110u, 0x0004003du, + 0x00000006u, 0x00000112u, 0x00000102u, 0x0004003du, 0x00000006u, 0x00000113u, 0x00000108u, 0x000500aau, + 0x00000044u, 0x00000114u, 0x00000112u, 0x00000113u, 0x000300f7u, 0x00000116u, 0x00000000u, 0x000400fau, + 0x00000114u, 0x00000115u, 0x00000116u, 0x000200f8u, 0x00000115u, 0x0004003du, 0x00000006u, 0x00000117u, + 0x000000feu, 0x000500c7u, 0x00000006u, 0x00000118u, 0x00000117u, 0x0000005eu, 0x000500abu, 0x00000044u, + 0x00000119u, 0x00000118u, 0x0000004eu, 0x000200f9u, 0x00000116u, 0x000200f8u, 0x00000116u, 0x000700f5u, + 0x00000044u, 0x0000011au, 0x00000114u, 0x00000110u, 0x00000119u, 0x00000115u, 0x000200f9u, 0x00000111u, + 0x000200f8u, 0x00000111u, 0x000700f5u, 0x00000044u, 0x0000011bu, 0x0000010eu, 0x000000f3u, 0x0000011au, + 0x00000116u, 0x000300f7u, 0x0000011du, 0x00000000u, 0x000400fau, 0x0000011bu, 0x0000011cu, 0x0000011du, + 0x000200f8u, 0x0000011cu, 0x0004003du, 0x00000006u, 0x0000011eu, 0x000000feu, 0x00050080u, 0x00000006u, + 0x0000011fu, 0x0000011eu, 0x0000005eu, 0x0003003eu, 0x000000feu, 0x0000011fu, 0x000200f9u, 0x0000011du, + 0x000200f8u, 0x0000011du, 0x0004003du, 0x00000006u, 0x00000120u, 0x000000bau, 0x0004003du, 0x00000006u, + 0x00000121u, 0x000000feu, 0x000500c5u, 0x00000006u, 0x00000122u, 0x00000120u, 0x00000121u, 0x000200feu, + 0x00000122u, 0x000200f8u, 0x000000eeu, 0x0004003du, 0x0000003bu, 0x00000125u, 0x000000c4u, 0x0004007cu, + 0x00000006u, 0x00000126u, 0x00000125u, 0x000500c4u, 0x00000006u, 0x00000127u, 0x00000126u, 0x0000006fu, + 0x0004003du, 0x00000006u, 0x00000128u, 0x000000cbu, 0x000500c2u, 0x00000006u, 0x00000129u, 0x00000128u, + 0x0000007eu, 0x000500c5u, 0x00000006u, 0x0000012au, 0x00000127u, 0x00000129u, 0x0003003eu, 0x00000124u, + 0x0000012au, 0x0004003du, 0x00000006u, 0x0000012cu, 0x000000cbu, 0x000500c7u, 0x00000006u, 0x0000012eu, + 0x0000012cu, 0x0000012du, 0x0003003eu, 0x0000012bu, 0x0000012eu, 0x0004003du, 0x00000006u, 0x0000012fu, + 0x0000012bu, 0x000500acu, 0x00000044u, 0x00000131u, 0x0000012fu, 0x00000130u, 0x000400a8u, 0x00000044u, + 0x00000132u, 0x00000131u, 0x000300f7u, 0x00000134u, 0x00000000u, 0x000400fau, 0x00000132u, 0x00000133u, + 0x00000134u, 0x000200f8u, 0x00000133u, 0x0004003du, 0x00000006u, 0x00000135u, 0x0000012bu, 0x000500aau, + 0x00000044u, 0x00000136u, 0x00000135u, 0x00000130u, 0x000300f7u, 0x00000138u, 0x00000000u, 0x000400fau, + 0x00000136u, 0x00000137u, 0x00000138u, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, + 0x00000124u, 0x000500c7u, 0x00000006u, 0x0000013au, 0x00000139u, 0x0000005eu, 0x000500abu, 0x00000044u, + 0x0000013bu, 0x0000013au, 0x0000004eu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x000700f5u, + 0x00000044u, 0x0000013cu, 0x00000136u, 0x00000133u, 0x0000013bu, 0x00000137u, 0x000200f9u, 0x00000134u, + 0x000200f8u, 0x00000134u, 0x000700f5u, 0x00000044u, 0x0000013du, 0x00000131u, 0x000000eeu, 0x0000013cu, + 0x00000138u, 0x000300f7u, 0x0000013fu, 0x00000000u, 0x000400fau, 0x0000013du, 0x0000013eu, 0x0000013fu, + 0x000200f8u, 0x0000013eu, 0x0004003du, 0x00000006u, 0x00000140u, 0x00000124u, 0x00050080u, 0x00000006u, + 0x00000141u, 0x00000140u, 0x0000005eu, 0x0003003eu, 0x00000124u, 0x00000141u, 0x000200f9u, 0x0000013fu, + 0x000200f8u, 0x0000013fu, 0x0004003du, 0x00000006u, 0x00000142u, 0x000000bau, 0x0004003du, 0x00000006u, + 0x00000143u, 0x00000124u, 0x000500c5u, 0x00000006u, 0x00000144u, 0x00000142u, 0x00000143u, 0x000200feu, + 0x00000144u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001bu, 0x00000000u, 0x00000018u, 0x00030037u, + 0x00000007u, 0x00000019u, 0x00030037u, 0x00000007u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003bu, + 0x0000000du, 0x00000149u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000014cu, 0x00000007u, 0x0004003bu, + 0x00000007u, 0x00000150u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000147u, 0x0000001au, 0x000500aau, + 0x00000044u, 0x00000148u, 0x00000147u, 0x0000005eu, 0x000300f7u, 0x0000014bu, 0x00000000u, 0x000400fau, + 0x00000148u, 0x0000014au, 0x0000014fu, 0x000200f8u, 0x0000014au, 0x0004003du, 0x00000006u, 0x0000014du, + 0x00000019u, 0x0003003eu, 0x0000014cu, 0x0000014du, 0x00050039u, 0x00000008u, 0x0000014eu, 0x00000013u, + 0x0000014cu, 0x0003003eu, 0x00000149u, 0x0000014eu, 0x000200f9u, 0x0000014bu, 0x000200f8u, 0x0000014fu, + 0x0004003du, 0x00000006u, 0x00000151u, 0x00000019u, 0x0003003eu, 0x00000150u, 0x00000151u, 0x00050039u, + 0x00000008u, 0x00000152u, 0x0000000bu, 0x00000150u, 0x0003003eu, 0x00000149u, 0x00000152u, 0x000200f9u, + 0x0000014bu, 0x000200f8u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x00000153u, 0x00000149u, 0x000200feu, + 0x00000153u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0000001du, 0x00030037u, + 0x0000000du, 0x0000001eu, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003bu, + 0x00000007u, 0x00000158u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000015bu, 0x00000007u, 0x0004003bu, + 0x0000000du, 0x0000015fu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000156u, 0x0000001fu, 0x000500aau, + 0x00000044u, 0x00000157u, 0x00000156u, 0x0000005eu, 0x000300f7u, 0x0000015au, 0x00000000u, 0x000400fau, + 0x00000157u, 0x00000159u, 0x0000015eu, 0x000200f8u, 0x00000159u, 0x0004003du, 0x00000008u, 0x0000015cu, + 0x0000001eu, 0x0003003eu, 0x0000015bu, 0x0000015cu, 0x00050039u, 0x00000006u, 0x0000015du, 0x00000016u, + 0x0000015bu, 0x0003003eu, 0x00000158u, 0x0000015du, 0x000200f9u, 0x0000015au, 0x000200f8u, 0x0000015eu, + 0x0004003du, 0x00000008u, 0x00000160u, 0x0000001eu, 0x0003003eu, 0x0000015fu, 0x00000160u, 0x00050039u, + 0x00000006u, 0x00000161u, 0x00000010u, 0x0000015fu, 0x0003003eu, 0x00000158u, 0x00000161u, 0x000200f9u, + 0x0000015au, 0x000200f8u, 0x0000015au, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000158u, 0x000200feu, + 0x00000162u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000024u, 0x00000000u, 0x00000022u, 0x00030037u, + 0x00000007u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003bu, 0x00000007u, 0x00000184u, 0x00000007u, + 0x00050041u, 0x0000016au, 0x0000016bu, 0x00000169u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000016cu, + 0x0000016bu, 0x0003003eu, 0x00000166u, 0x0000016cu, 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000166u, + 0x00050086u, 0x00000006u, 0x00000170u, 0x0000016eu, 0x0000016fu, 0x0003003eu, 0x0000016du, 0x00000170u, + 0x0004003du, 0x00000006u, 0x00000172u, 0x00000166u, 0x00050089u, 0x00000006u, 0x00000173u, 0x00000172u, + 0x0000016fu, 0x0003003eu, 0x00000171u, 0x00000173u, 0x0004003du, 0x00000006u, 0x00000175u, 0x00000023u, + 0x0004003du, 0x00000006u, 0x00000176u, 0x0000016du, 0x00050080u, 0x00000006u, 0x00000177u, 0x00000175u, + 0x00000176u, 0x0003003eu, 0x00000174u, 0x00000177u, 0x00050041u, 0x0000017cu, 0x0000017du, 0x0000017bu, + 0x00000098u, 0x0004003du, 0x00000006u, 0x0000017eu, 0x0000017du, 0x00050080u, 0x00000006u, 0x0000017fu, + 0x0000017eu, 0x0000005eu, 0x0003003eu, 0x00000178u, 0x0000017fu, 0x0004003du, 0x00000006u, 0x00000181u, + 0x0000016du, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000178u, 0x00050084u, 0x00000006u, 0x00000183u, + 0x00000181u, 0x00000182u, 0x0003003eu, 0x00000180u, 0x00000183u, 0x00050041u, 0x0000017cu, 0x00000185u, + 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000186u, 0x00000185u, 0x00050080u, 0x00000006u, + 0x00000187u, 0x00000186u, 0x0000016fu, 0x00050082u, 0x00000006u, 0x00000188u, 0x00000187u, 0x0000005eu, + 0x00050086u, 0x00000006u, 0x00000189u, 0x00000188u, 0x0000016fu, 0x0003003eu, 0x00000184u, 0x00000189u, + 0x0004003du, 0x00000006u, 0x0000018bu, 0x00000171u, 0x0004003du, 0x00000006u, 0x0000018cu, 0x00000184u, + 0x00050084u, 0x00000006u, 0x0000018du, 0x0000018bu, 0x0000018cu, 0x0003003eu, 0x0000018au, 0x0000018du, + 0x0004003du, 0x00000006u, 0x0000018fu, 0x0000018au, 0x0004003du, 0x00000006u, 0x00000190u, 0x00000184u, + 0x00050080u, 0x00000006u, 0x00000191u, 0x0000018fu, 0x00000190u, 0x00050041u, 0x0000017cu, 0x00000192u, + 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000193u, 0x00000192u, 0x0007000cu, 0x00000006u, + 0x00000194u, 0x00000001u, 0x00000026u, 0x00000191u, 0x00000193u, 0x0003003eu, 0x0000018eu, 0x00000194u, + 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000028u, 0x00000000u, 0x00000026u, 0x00030037u, + 0x0000000du, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x00000007u, 0x0000019fu, 0x00000007u, + 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x0004003du, 0x00000006u, 0x0000019bu, 0x00000166u, + 0x0004003du, 0x00000008u, 0x0000019cu, 0x00000027u, 0x00050041u, 0x0000019du, 0x0000019eu, 0x0000019au, + 0x0000019bu, 0x0003003eu, 0x0000019eu, 0x0000019cu, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, + 0x0003003eu, 0x0000019fu, 0x000001a0u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a1u, 0x000400f6u, + 0x000001a3u, 0x000001a4u, 0x00000000u, 0x000200f9u, 0x000001a5u, 0x000200f8u, 0x000001a5u, 0x0004003du, + 0x00000006u, 0x000001a6u, 0x0000019fu, 0x000500acu, 0x00000044u, 0x000001a7u, 0x000001a6u, 0x0000004eu, + 0x000400fau, 0x000001a7u, 0x000001a2u, 0x000001a3u, 0x000200f8u, 0x000001a2u, 0x0004003du, 0x00000006u, + 0x000001a8u, 0x00000171u, 0x0004003du, 0x00000006u, 0x000001a9u, 0x0000019fu, 0x000500b0u, 0x00000044u, + 0x000001aau, 0x000001a8u, 0x000001a9u, 0x000300f7u, 0x000001acu, 0x00000000u, 0x000400fau, 0x000001aau, + 0x000001abu, 0x000001acu, 0x000200f8u, 0x000001abu, 0x0004003du, 0x00000006u, 0x000001adu, 0x00000166u, + 0x0004003du, 0x00000006u, 0x000001aeu, 0x00000166u, 0x0004003du, 0x00000006u, 0x000001afu, 0x0000019fu, + 0x00050080u, 0x00000006u, 0x000001b0u, 0x000001aeu, 0x000001afu, 0x00050041u, 0x0000019du, 0x000001b1u, + 0x0000019au, 0x000001b0u, 0x0004003du, 0x00000008u, 0x000001b2u, 0x000001b1u, 0x00050041u, 0x0000019du, + 0x000001b3u, 0x0000019au, 0x000001adu, 0x0004003du, 0x00000008u, 0x000001b4u, 0x000001b3u, 0x00050081u, + 0x00000008u, 0x000001b5u, 0x000001b4u, 0x000001b2u, 0x00050041u, 0x0000019du, 0x000001b6u, 0x0000019au, + 0x000001adu, 0x0003003eu, 0x000001b6u, 0x000001b5u, 0x000200f9u, 0x000001acu, 0x000200f8u, 0x000001acu, + 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x000200f9u, 0x000001a4u, 0x000200f8u, 0x000001a4u, + 0x0004003du, 0x00000006u, 0x000001b7u, 0x0000019fu, 0x000500c2u, 0x00000006u, 0x000001b8u, 0x000001b7u, + 0x00000098u, 0x0003003eu, 0x0000019fu, 0x000001b8u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a3u, + 0x0004003du, 0x00000006u, 0x000001b9u, 0x00000166u, 0x0004003du, 0x00000006u, 0x000001bau, 0x00000171u, + 0x00050082u, 0x00000006u, 0x000001bbu, 0x000001b9u, 0x000001bau, 0x00050041u, 0x0000019du, 0x000001bcu, + 0x0000019au, 0x000001bbu, 0x0004003du, 0x00000008u, 0x000001bdu, 0x000001bcu, 0x000200feu, 0x000001bdu, + 0x00010038u, 0x00050036u, 0x00000002u, 0x0000002eu, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, + 0x0000002bu, 0x00030037u, 0x00000007u, 0x0000002cu, 0x00030037u, 0x00000007u, 0x0000002du, 0x000200f8u, + 0x0000002fu, 0x0004003bu, 0x00000007u, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d5u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001e8u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001edu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000001f4u, + 0x00000007u, 0x00050041u, 0x0000017cu, 0x000001c1u, 0x0000017bu, 0x000000fau, 0x0004003du, 0x00000006u, + 0x000001c2u, 0x000001c1u, 0x000500c2u, 0x00000006u, 0x000001c4u, 0x000001c2u, 0x000001c3u, 0x0004003du, + 0x00000006u, 0x000001c5u, 0x0000002bu, 0x00050041u, 0x0000017cu, 0x000001c6u, 0x0000017bu, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x00050084u, 0x00000006u, 0x000001c8u, 0x000001c5u, + 0x000001c7u, 0x0004003du, 0x00000006u, 0x000001c9u, 0x0000002cu, 0x00050080u, 0x00000006u, 0x000001cau, + 0x000001c8u, 0x000001c9u, 0x00050041u, 0x0000017cu, 0x000001ccu, 0x0000017bu, 0x000001cbu, 0x0004003du, + 0x00000006u, 0x000001cdu, 0x000001ccu, 0x00050084u, 0x00000006u, 0x000001ceu, 0x000001cau, 0x000001cdu, + 0x0004003du, 0x00000006u, 0x000001cfu, 0x0000002du, 0x00050080u, 0x00000006u, 0x000001d0u, 0x000001ceu, + 0x000001cfu, 0x00050041u, 0x0000017cu, 0x000001d1u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, + 0x000001d2u, 0x000001d1u, 0x00050084u, 0x00000006u, 0x000001d3u, 0x000001d0u, 0x000001d2u, 0x00050080u, + 0x00000006u, 0x000001d4u, 0x000001c4u, 0x000001d3u, 0x0003003eu, 0x000001c0u, 0x000001d4u, 0x00050041u, + 0x0000017cu, 0x000001d6u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x000001d7u, 0x000001d6u, + 0x0004003du, 0x00000006u, 0x000001d8u, 0x0000002du, 0x00050082u, 0x00000006u, 0x000001d9u, 0x000001d7u, + 0x000001d8u, 0x0007000cu, 0x00000006u, 0x000001dbu, 0x00000001u, 0x00000026u, 0x000001d9u, 0x000001dau, + 0x0003003eu, 0x000001d5u, 0x000001dbu, 0x0004003du, 0x00000006u, 0x000001ddu, 0x00000166u, 0x0003003eu, + 0x000001dcu, 0x000001ddu, 0x000200f9u, 0x000001deu, 0x000200f8u, 0x000001deu, 0x000400f6u, 0x000001e0u, + 0x000001e1u, 0x00000000u, 0x000200f9u, 0x000001e2u, 0x000200f8u, 0x000001e2u, 0x0004003du, 0x00000006u, + 0x000001e3u, 0x000001dcu, 0x00050041u, 0x0000017cu, 0x000001e4u, 0x0000017bu, 0x00000098u, 0x0004003du, + 0x00000006u, 0x000001e5u, 0x000001e4u, 0x00050084u, 0x00000006u, 0x000001e6u, 0x000001dau, 0x000001e5u, + 0x000500b0u, 0x00000044u, 0x000001e7u, 0x000001e3u, 0x000001e6u, 0x000400fau, 0x000001e7u, 0x000001dfu, + 0x000001e0u, 0x000200f8u, 0x000001dfu, 0x0004003du, 0x00000006u, 0x000001e9u, 0x000001dcu, 0x00050041u, + 0x0000017cu, 0x000001eau, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x000001ebu, 0x000001eau, + 0x00050086u, 0x00000006u, 0x000001ecu, 0x000001e9u, 0x000001ebu, 0x0003003eu, 0x000001e8u, 0x000001ecu, + 0x0004003du, 0x00000006u, 0x000001eeu, 0x000001dcu, 0x0004003du, 0x00000006u, 0x000001efu, 0x000001e8u, + 0x00050041u, 0x0000017cu, 0x000001f0u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x000001f1u, + 0x000001f0u, 0x00050084u, 0x00000006u, 0x000001f2u, 0x000001efu, 0x000001f1u, 0x00050082u, 0x00000006u, + 0x000001f3u, 0x000001eeu, 0x000001f2u, 0x0003003eu, 0x000001edu, 0x000001f3u, 0x0003003eu, 0x000001f4u, + 0x000001f5u, 0x0004003du, 0x00000006u, 0x000001f6u, 0x000001e8u, 0x0004003du, 0x00000006u, 0x000001f7u, + 0x000001d5u, 0x000500b0u, 0x00000044u, 0x000001f8u, 0x000001f6u, 0x000001f7u, 0x000300f7u, 0x000001fau, + 0x00000000u, 0x000400fau, 0x000001f8u, 0x000001f9u, 0x000001fau, 0x000200f8u, 0x000001f9u, 0x0004003du, + 0x00000006u, 0x000001ffu, 0x000001c0u, 0x0004003du, 0x00000006u, 0x00000200u, 0x000001dcu, 0x00050080u, + 0x00000006u, 0x00000201u, 0x000001ffu, 0x00000200u, 0x00060041u, 0x00000202u, 0x00000203u, 0x000001feu, + 0x000000ebu, 0x00000201u, 0x0004003du, 0x00000006u, 0x00000204u, 0x00000203u, 0x0004007cu, 0x00000008u, + 0x00000205u, 0x00000204u, 0x0003003eu, 0x000001f4u, 0x00000205u, 0x000200f9u, 0x000001fau, 0x000200f8u, + 0x000001fau, 0x0004003du, 0x00000006u, 0x0000020au, 0x000001e8u, 0x0004003du, 0x00000006u, 0x0000020bu, + 0x00000178u, 0x00050084u, 0x00000006u, 0x0000020cu, 0x0000020au, 0x0000020bu, 0x0004003du, 0x00000006u, + 0x0000020du, 0x000001edu, 0x00050080u, 0x00000006u, 0x0000020eu, 0x0000020cu, 0x0000020du, 0x0004003du, + 0x00000008u, 0x0000020fu, 0x000001f4u, 0x00050041u, 0x0000019du, 0x00000210u, 0x00000209u, 0x0000020eu, + 0x0003003eu, 0x00000210u, 0x0000020fu, 0x000200f9u, 0x000001e1u, 0x000200f8u, 0x000001e1u, 0x0004003du, + 0x00000006u, 0x00000211u, 0x000001dcu, 0x00050080u, 0x00000006u, 0x00000212u, 0x00000211u, 0x00000197u, + 0x0003003eu, 0x000001dcu, 0x00000212u, 0x000200f9u, 0x000001deu, 0x000200f8u, 0x000001e0u, 0x000400e0u, + 0x00000195u, 0x00000195u, 0x00000196u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000033u, + 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x00000030u, 0x00030037u, 0x00000007u, 0x00000031u, + 0x00030037u, 0x00000007u, 0x00000032u, 0x000200f8u, 0x00000034u, 0x0004003bu, 0x00000007u, 0x00000213u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000226u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000022cu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000239u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000023eu, + 0x00000007u, 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x00050041u, 0x0000017cu, 0x00000214u, + 0x0000017bu, 0x000000fau, 0x0004003du, 0x00000006u, 0x00000215u, 0x00000214u, 0x000500c2u, 0x00000006u, + 0x00000216u, 0x00000215u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000217u, 0x00000030u, 0x00050041u, + 0x0000017cu, 0x00000218u, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000219u, 0x00000218u, + 0x00050084u, 0x00000006u, 0x0000021au, 0x00000217u, 0x00000219u, 0x0004003du, 0x00000006u, 0x0000021bu, + 0x00000031u, 0x00050080u, 0x00000006u, 0x0000021cu, 0x0000021au, 0x0000021bu, 0x00050041u, 0x0000017cu, + 0x0000021du, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x0000021eu, 0x0000021du, 0x00050084u, + 0x00000006u, 0x0000021fu, 0x0000021cu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000220u, 0x00000032u, + 0x00050080u, 0x00000006u, 0x00000221u, 0x0000021fu, 0x00000220u, 0x00050041u, 0x0000017cu, 0x00000222u, + 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000223u, 0x00000222u, 0x00050084u, 0x00000006u, + 0x00000224u, 0x00000221u, 0x00000223u, 0x00050080u, 0x00000006u, 0x00000225u, 0x00000216u, 0x00000224u, + 0x0003003eu, 0x00000213u, 0x00000225u, 0x00050041u, 0x0000017cu, 0x00000227u, 0x0000017bu, 0x000001cbu, + 0x0004003du, 0x00000006u, 0x00000228u, 0x00000227u, 0x0004003du, 0x00000006u, 0x00000229u, 0x00000032u, + 0x00050082u, 0x00000006u, 0x0000022au, 0x00000228u, 0x00000229u, 0x0007000cu, 0x00000006u, 0x0000022bu, + 0x00000001u, 0x00000026u, 0x0000022au, 0x000001dau, 0x0003003eu, 0x00000226u, 0x0000022bu, 0x0004003du, + 0x00000006u, 0x0000022du, 0x00000166u, 0x0003003eu, 0x0000022cu, 0x0000022du, 0x000200f9u, 0x0000022eu, + 0x000200f8u, 0x0000022eu, 0x000400f6u, 0x00000230u, 0x00000231u, 0x00000000u, 0x000200f9u, 0x00000232u, + 0x000200f8u, 0x00000232u, 0x0004003du, 0x00000006u, 0x00000233u, 0x0000022cu, 0x0004003du, 0x00000006u, + 0x00000234u, 0x00000226u, 0x00050041u, 0x0000017cu, 0x00000235u, 0x0000017bu, 0x00000098u, 0x0004003du, + 0x00000006u, 0x00000236u, 0x00000235u, 0x00050084u, 0x00000006u, 0x00000237u, 0x00000234u, 0x00000236u, + 0x000500b0u, 0x00000044u, 0x00000238u, 0x00000233u, 0x00000237u, 0x000400fau, 0x00000238u, 0x0000022fu, + 0x00000230u, 0x000200f8u, 0x0000022fu, 0x0004003du, 0x00000006u, 0x0000023au, 0x0000022cu, 0x00050041u, + 0x0000017cu, 0x0000023bu, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x0000023cu, 0x0000023bu, + 0x00050086u, 0x00000006u, 0x0000023du, 0x0000023au, 0x0000023cu, 0x0003003eu, 0x00000239u, 0x0000023du, + 0x0004003du, 0x00000006u, 0x0000023fu, 0x0000022cu, 0x0004003du, 0x00000006u, 0x00000240u, 0x00000239u, + 0x00050041u, 0x0000017cu, 0x00000241u, 0x0000017bu, 0x00000098u, 0x0004003du, 0x00000006u, 0x00000242u, + 0x00000241u, 0x00050084u, 0x00000006u, 0x00000243u, 0x00000240u, 0x00000242u, 0x00050082u, 0x00000006u, + 0x00000244u, 0x0000023fu, 0x00000243u, 0x0003003eu, 0x0000023eu, 0x00000244u, 0x0004003du, 0x00000006u, + 0x00000245u, 0x00000213u, 0x0004003du, 0x00000006u, 0x00000246u, 0x0000022cu, 0x00050080u, 0x00000006u, + 0x00000247u, 0x00000245u, 0x00000246u, 0x0004003du, 0x00000006u, 0x00000248u, 0x00000239u, 0x0004003du, + 0x00000006u, 0x00000249u, 0x00000178u, 0x00050084u, 0x00000006u, 0x0000024au, 0x00000248u, 0x00000249u, + 0x0004003du, 0x00000006u, 0x0000024bu, 0x0000023eu, 0x00050080u, 0x00000006u, 0x0000024cu, 0x0000024au, + 0x0000024bu, 0x00050041u, 0x0000019du, 0x0000024du, 0x00000209u, 0x0000024cu, 0x0004003du, 0x00000008u, + 0x0000024eu, 0x0000024du, 0x0004007cu, 0x00000006u, 0x0000024fu, 0x0000024eu, 0x00060041u, 0x00000202u, + 0x00000250u, 0x000001feu, 0x000000ebu, 0x00000247u, 0x0003003eu, 0x00000250u, 0x0000024fu, 0x000200f9u, + 0x00000231u, 0x000200f8u, 0x00000231u, 0x0004003du, 0x00000006u, 0x00000251u, 0x0000022cu, 0x00050080u, + 0x00000006u, 0x00000252u, 0x00000251u, 0x00000197u, 0x0003003eu, 0x0000022cu, 0x00000252u, 0x000200f9u, + 0x0000022eu, 0x000200f8u, 0x00000230u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000038u, + 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x00000035u, 0x00030037u, 0x00000007u, 0x00000036u, + 0x00030037u, 0x00000007u, 0x00000037u, 0x000200f8u, 0x00000039u, 0x0004003bu, 0x00000007u, 0x00000253u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000025du, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000026cu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000290u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000297u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b8u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002c3u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002cau, 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002d9u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002e7u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x000002f1u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000307u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000308u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000030bu, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000313u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000339u, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000033au, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000033du, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000343u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000344u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000034eu, 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000368u, + 0x00000007u, 0x0004003bu, 0x0000000du, 0x00000369u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000039eu, + 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a0u, 0x00000007u, 0x000400e0u, 0x00000195u, 0x00000195u, + 0x00000196u, 0x0004003du, 0x00000006u, 0x00000254u, 0x00000035u, 0x00050041u, 0x0000017cu, 0x00000255u, + 0x0000017bu, 0x000000ebu, 0x0004003du, 0x00000006u, 0x00000256u, 0x00000255u, 0x00050084u, 0x00000006u, + 0x00000257u, 0x00000254u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000037u, 0x00050080u, + 0x00000006u, 0x00000259u, 0x00000257u, 0x00000258u, 0x00050041u, 0x0000017cu, 0x0000025au, 0x0000017bu, + 0x00000098u, 0x0004003du, 0x00000006u, 0x0000025bu, 0x0000025au, 0x00050084u, 0x00000006u, 0x0000025cu, + 0x00000259u, 0x0000025bu, 0x0003003eu, 0x00000253u, 0x0000025cu, 0x0004003du, 0x00000006u, 0x0000025eu, + 0x00000166u, 0x0003003eu, 0x0000025du, 0x0000025eu, 0x000200f9u, 0x0000025fu, 0x000200f8u, 0x0000025fu, + 0x000400f6u, 0x00000261u, 0x00000262u, 0x00000000u, 0x000200f9u, 0x00000263u, 0x000200f8u, 0x00000263u, + 0x0004003du, 0x00000006u, 0x00000264u, 0x0000025du, 0x00050041u, 0x0000017cu, 0x00000265u, 0x0000017bu, + 0x00000098u, 0x0004003du, 0x00000006u, 0x00000266u, 0x00000265u, 0x000500b0u, 0x00000044u, 0x00000267u, + 0x00000264u, 0x00000266u, 0x000400fau, 0x00000267u, 0x00000260u, 0x00000261u, 0x000200f8u, 0x00000260u, + 0x0004003du, 0x00000006u, 0x00000269u, 0x0000025du, 0x000300f7u, 0x0000026eu, 0x00000000u, 0x000400fau, + 0x0000026bu, 0x0000026du, 0x0000027eu, 0x000200f8u, 0x0000026du, 0x00050041u, 0x0000017cu, 0x00000274u, + 0x0000017bu, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000274u, 0x000500c2u, 0x00000006u, + 0x00000276u, 0x00000275u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000277u, 0x00000253u, 0x0004003du, + 0x00000006u, 0x00000278u, 0x0000025du, 0x00050080u, 0x00000006u, 0x00000279u, 0x00000277u, 0x00000278u, + 0x00050080u, 0x00000006u, 0x0000027au, 0x00000276u, 0x00000279u, 0x00060041u, 0x00000202u, 0x0000027bu, + 0x00000272u, 0x000000ebu, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, 0x0000027bu, 0x0004007cu, + 0x00000008u, 0x0000027du, 0x0000027cu, 0x0003003eu, 0x0000026cu, 0x0000027du, 0x000200f9u, 0x0000026eu, + 0x000200f8u, 0x0000027eu, 0x00050041u, 0x0000017cu, 0x00000284u, 0x0000017bu, 0x00000273u, 0x0004003du, + 0x00000006u, 0x00000285u, 0x00000284u, 0x000500c2u, 0x00000006u, 0x00000286u, 0x00000285u, 0x00000098u, + 0x0004003du, 0x00000006u, 0x00000287u, 0x00000253u, 0x0004003du, 0x00000006u, 0x00000288u, 0x0000025du, + 0x00050080u, 0x00000006u, 0x00000289u, 0x00000287u, 0x00000288u, 0x00050080u, 0x00000006u, 0x0000028au, + 0x00000286u, 0x00000289u, 0x00060041u, 0x0000028bu, 0x0000028cu, 0x00000283u, 0x000000ebu, 0x0000028au, + 0x0004003du, 0x0000027fu, 0x0000028du, 0x0000028cu, 0x00040071u, 0x00000006u, 0x0000028eu, 0x0000028du, + 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x0003003eu, 0x00000290u, 0x0000026au, 0x00060039u, 0x00000008u, + 0x00000291u, 0x0000001bu, 0x0000028fu, 0x00000290u, 0x0003003eu, 0x0000026cu, 0x00000291u, 0x000200f9u, + 0x0000026eu, 0x000200f8u, 0x0000026eu, 0x0004003du, 0x00000008u, 0x00000292u, 0x0000026cu, 0x00050041u, + 0x0000019du, 0x00000293u, 0x00000268u, 0x00000269u, 0x0003003eu, 0x00000293u, 0x00000292u, 0x0004003du, + 0x00000006u, 0x00000295u, 0x0000025du, 0x000300f7u, 0x00000299u, 0x00000000u, 0x000400fau, 0x00000296u, + 0x00000298u, 0x000002a9u, 0x000200f8u, 0x00000298u, 0x00050041u, 0x0000017cu, 0x0000029fu, 0x0000017bu, + 0x0000029eu, 0x0004003du, 0x00000006u, 0x000002a0u, 0x0000029fu, 0x000500c2u, 0x00000006u, 0x000002a1u, + 0x000002a0u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000002a2u, 0x00000253u, 0x0004003du, 0x00000006u, + 0x000002a3u, 0x0000025du, 0x00050080u, 0x00000006u, 0x000002a4u, 0x000002a2u, 0x000002a3u, 0x00050080u, + 0x00000006u, 0x000002a5u, 0x000002a1u, 0x000002a4u, 0x00060041u, 0x00000202u, 0x000002a6u, 0x0000029du, + 0x000000ebu, 0x000002a5u, 0x0004003du, 0x00000006u, 0x000002a7u, 0x000002a6u, 0x0004007cu, 0x00000008u, + 0x000002a8u, 0x000002a7u, 0x0003003eu, 0x00000297u, 0x000002a8u, 0x000200f9u, 0x00000299u, 0x000200f8u, + 0x000002a9u, 0x00050041u, 0x0000017cu, 0x000002aeu, 0x0000017bu, 0x0000029eu, 0x0004003du, 0x00000006u, + 0x000002afu, 0x000002aeu, 0x000500c2u, 0x00000006u, 0x000002b0u, 0x000002afu, 0x00000098u, 0x0004003du, + 0x00000006u, 0x000002b1u, 0x00000253u, 0x0004003du, 0x00000006u, 0x000002b2u, 0x0000025du, 0x00050080u, + 0x00000006u, 0x000002b3u, 0x000002b1u, 0x000002b2u, 0x00050080u, 0x00000006u, 0x000002b4u, 0x000002b0u, + 0x000002b3u, 0x00060041u, 0x0000028bu, 0x000002b5u, 0x000002adu, 0x000000ebu, 0x000002b4u, 0x0004003du, + 0x0000027fu, 0x000002b6u, 0x000002b5u, 0x00040071u, 0x00000006u, 0x000002b7u, 0x000002b6u, 0x0003003eu, + 0x000002b8u, 0x000002b7u, 0x0003003eu, 0x000002b9u, 0x0000026au, 0x00060039u, 0x00000008u, 0x000002bau, + 0x0000001bu, 0x000002b8u, 0x000002b9u, 0x0003003eu, 0x00000297u, 0x000002bau, 0x000200f9u, 0x00000299u, + 0x000200f8u, 0x00000299u, 0x0004003du, 0x00000008u, 0x000002bbu, 0x00000297u, 0x00050041u, 0x000002bcu, + 0x000002bdu, 0x0000017bu, 0x0000003cu, 0x0004003du, 0x00000008u, 0x000002beu, 0x000002bdu, 0x00050085u, + 0x00000008u, 0x000002bfu, 0x000002bbu, 0x000002beu, 0x00050041u, 0x0000019du, 0x000002c0u, 0x00000294u, + 0x00000295u, 0x0003003eu, 0x000002c0u, 0x000002bfu, 0x000200f9u, 0x00000262u, 0x000200f8u, 0x00000262u, + 0x0004003du, 0x00000006u, 0x000002c1u, 0x0000025du, 0x00050080u, 0x00000006u, 0x000002c2u, 0x000002c1u, + 0x00000197u, 0x0003003eu, 0x0000025du, 0x000002c2u, 0x000200f9u, 0x0000025fu, 0x000200f8u, 0x00000261u, + 0x000400e0u, 0x00000195u, 0x00000195u, 0x00000196u, 0x0004003du, 0x00000006u, 0x000002c4u, 0x00000035u, + 0x00050041u, 0x0000017cu, 0x000002c5u, 0x0000017bu, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000002c6u, + 0x000002c5u, 0x00050084u, 0x00000006u, 0x000002c7u, 0x000002c4u, 0x000002c6u, 0x0004003du, 0x00000006u, + 0x000002c8u, 0x00000036u, 0x00050080u, 0x00000006u, 0x000002c9u, 0x000002c7u, 0x000002c8u, 0x0003003eu, + 0x000002c3u, 0x000002c9u, 0x00050041u, 0x0000017cu, 0x000002d0u, 0x0000017bu, 0x000002cfu, 0x0004003du, + 0x00000006u, 0x000002d1u, 0x000002d0u, 0x000500c2u, 0x00000006u, 0x000002d2u, 0x000002d1u, 0x000001c3u, + 0x0004003du, 0x00000006u, 0x000002d3u, 0x000002c3u, 0x00050080u, 0x00000006u, 0x000002d4u, 0x000002d2u, + 0x000002d3u, 0x00060041u, 0x00000202u, 0x000002d5u, 0x000002ceu, 0x000000ebu, 0x000002d4u, 0x0004003du, + 0x00000006u, 0x000002d6u, 0x000002d5u, 0x0004007cu, 0x00000008u, 0x000002d7u, 0x000002d6u, 0x0006000cu, + 0x00000008u, 0x000002d8u, 0x00000001u, 0x0000001bu, 0x000002d7u, 0x0003003eu, 0x000002cau, 0x000002d8u, + 0x00050041u, 0x0000017cu, 0x000002deu, 0x0000017bu, 0x0000007eu, 0x0004003du, 0x00000006u, 0x000002dfu, + 0x000002deu, 0x000500c2u, 0x00000006u, 0x000002e0u, 0x000002dfu, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x000002e1u, 0x000002c3u, 0x00050080u, 0x00000006u, 0x000002e2u, 0x000002e0u, 0x000002e1u, 0x00060041u, + 0x00000202u, 0x000002e3u, 0x000002ddu, 0x000000ebu, 0x000002e2u, 0x0004003du, 0x00000006u, 0x000002e4u, + 0x000002e3u, 0x0004007cu, 0x00000008u, 0x000002e5u, 0x000002e4u, 0x0003003eu, 0x000002d9u, 0x000002e5u, + 0x0003003eu, 0x000002e6u, 0x000001f5u, 0x0004003du, 0x00000006u, 0x000002e8u, 0x0000018au, 0x0003003eu, + 0x000002e7u, 0x000002e8u, 0x000200f9u, 0x000002e9u, 0x000200f8u, 0x000002e9u, 0x000400f6u, 0x000002ebu, + 0x000002ecu, 0x00000000u, 0x000200f9u, 0x000002edu, 0x000200f8u, 0x000002edu, 0x0004003du, 0x00000006u, + 0x000002eeu, 0x000002e7u, 0x0004003du, 0x00000006u, 0x000002efu, 0x0000018eu, 0x000500b0u, 0x00000044u, + 0x000002f0u, 0x000002eeu, 0x000002efu, 0x000400fau, 0x000002f0u, 0x000002eau, 0x000002ebu, 0x000200f8u, + 0x000002eau, 0x0004003du, 0x00000006u, 0x000002f2u, 0x00000180u, 0x0004003du, 0x00000006u, 0x000002f3u, + 0x000002e7u, 0x00050080u, 0x00000006u, 0x000002f4u, 0x000002f2u, 0x000002f3u, 0x00050041u, 0x0000019du, + 0x000002f5u, 0x00000209u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000002f6u, 0x000002f5u, 0x0004003du, + 0x00000008u, 0x000002f7u, 0x000002cau, 0x00050085u, 0x00000008u, 0x000002f8u, 0x000002f6u, 0x000002f7u, + 0x0003003eu, 0x000002f1u, 0x000002f8u, 0x0004003du, 0x00000006u, 0x000002f9u, 0x00000180u, 0x0004003du, + 0x00000006u, 0x000002fau, 0x000002e7u, 0x00050080u, 0x00000006u, 0x000002fbu, 0x000002f9u, 0x000002fau, + 0x0004003du, 0x00000008u, 0x000002fcu, 0x000002f1u, 0x00050041u, 0x0000019du, 0x000002fdu, 0x00000209u, + 0x000002fbu, 0x0003003eu, 0x000002fdu, 0x000002fcu, 0x0004003du, 0x00000008u, 0x000002feu, 0x000002f1u, + 0x0004003du, 0x00000006u, 0x000002ffu, 0x000002e7u, 0x00050041u, 0x0000019du, 0x00000300u, 0x00000268u, + 0x000002ffu, 0x0004003du, 0x00000008u, 0x00000301u, 0x00000300u, 0x00050085u, 0x00000008u, 0x00000302u, + 0x000002feu, 0x00000301u, 0x0004003du, 0x00000008u, 0x00000303u, 0x000002e6u, 0x00050081u, 0x00000008u, + 0x00000304u, 0x00000303u, 0x00000302u, 0x0003003eu, 0x000002e6u, 0x00000304u, 0x000200f9u, 0x000002ecu, + 0x000200f8u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x00000305u, 0x000002e7u, 0x00050080u, 0x00000006u, + 0x00000306u, 0x00000305u, 0x00000098u, 0x0003003eu, 0x000002e7u, 0x00000306u, 0x000200f9u, 0x000002e9u, + 0x000200f8u, 0x000002ebu, 0x0004003du, 0x00000008u, 0x00000309u, 0x000002e6u, 0x0003003eu, 0x00000308u, + 0x00000309u, 0x00050039u, 0x00000008u, 0x0000030au, 0x00000028u, 0x00000308u, 0x0003003eu, 0x00000307u, + 0x0000030au, 0x0003003eu, 0x0000030bu, 0x000001f5u, 0x0004003du, 0x00000006u, 0x0000030cu, 0x00000174u, + 0x00050041u, 0x0000017cu, 0x0000030du, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x0000030eu, + 0x0000030du, 0x000500b0u, 0x00000044u, 0x0000030fu, 0x0000030cu, 0x0000030eu, 0x000300f7u, 0x00000311u, + 0x00000000u, 0x000400fau, 0x0000030fu, 0x00000310u, 0x00000311u, 0x000200f8u, 0x00000310u, 0x000300f7u, + 0x00000315u, 0x00000000u, 0x000400fau, 0x00000312u, 0x00000314u, 0x00000327u, 0x000200f8u, 0x00000314u, + 0x00050041u, 0x0000017cu, 0x0000031au, 0x0000017bu, 0x0000006fu, 0x0004003du, 0x00000006u, 0x0000031bu, + 0x0000031au, 0x000500c2u, 0x00000006u, 0x0000031cu, 0x0000031bu, 0x000001c3u, 0x0004003du, 0x00000006u, + 0x0000031du, 0x000002c3u, 0x00050041u, 0x0000017cu, 0x0000031eu, 0x0000017bu, 0x000001cbu, 0x0004003du, + 0x00000006u, 0x0000031fu, 0x0000031eu, 0x00050084u, 0x00000006u, 0x00000320u, 0x0000031du, 0x0000031fu, + 0x0004003du, 0x00000006u, 0x00000321u, 0x00000174u, 0x00050080u, 0x00000006u, 0x00000322u, 0x00000320u, + 0x00000321u, 0x00050080u, 0x00000006u, 0x00000323u, 0x0000031cu, 0x00000322u, 0x00060041u, 0x00000202u, + 0x00000324u, 0x00000319u, 0x000000ebu, 0x00000323u, 0x0004003du, 0x00000006u, 0x00000325u, 0x00000324u, + 0x0004007cu, 0x00000008u, 0x00000326u, 0x00000325u, 0x0003003eu, 0x00000313u, 0x00000326u, 0x000200f9u, + 0x00000315u, 0x000200f8u, 0x00000327u, 0x00050041u, 0x0000017cu, 0x0000032cu, 0x0000017bu, 0x0000006fu, + 0x0004003du, 0x00000006u, 0x0000032du, 0x0000032cu, 0x000500c2u, 0x00000006u, 0x0000032eu, 0x0000032du, + 0x00000098u, 0x0004003du, 0x00000006u, 0x0000032fu, 0x000002c3u, 0x00050041u, 0x0000017cu, 0x00000330u, + 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000331u, 0x00000330u, 0x00050084u, 0x00000006u, + 0x00000332u, 0x0000032fu, 0x00000331u, 0x0004003du, 0x00000006u, 0x00000333u, 0x00000174u, 0x00050080u, + 0x00000006u, 0x00000334u, 0x00000332u, 0x00000333u, 0x00050080u, 0x00000006u, 0x00000335u, 0x0000032eu, + 0x00000334u, 0x00060041u, 0x0000028bu, 0x00000336u, 0x0000032bu, 0x000000ebu, 0x00000335u, 0x0004003du, + 0x0000027fu, 0x00000337u, 0x00000336u, 0x00040071u, 0x00000006u, 0x00000338u, 0x00000337u, 0x0003003eu, + 0x00000339u, 0x00000338u, 0x0003003eu, 0x0000033au, 0x0000026au, 0x00060039u, 0x00000008u, 0x0000033bu, + 0x0000001bu, 0x00000339u, 0x0000033au, 0x0003003eu, 0x00000313u, 0x0000033bu, 0x000200f9u, 0x00000315u, + 0x000200f8u, 0x00000315u, 0x0004003du, 0x00000008u, 0x0000033cu, 0x00000313u, 0x0003003eu, 0x0000030bu, + 0x0000033cu, 0x000200f9u, 0x00000311u, 0x000200f8u, 0x00000311u, 0x0004003du, 0x00000008u, 0x0000033eu, + 0x0000030bu, 0x0004003du, 0x00000008u, 0x0000033fu, 0x00000307u, 0x00050083u, 0x00000008u, 0x00000340u, + 0x0000033eu, 0x0000033fu, 0x0004003du, 0x00000008u, 0x00000341u, 0x000002d9u, 0x00050085u, 0x00000008u, + 0x00000342u, 0x00000340u, 0x00000341u, 0x0003003eu, 0x0000033du, 0x00000342u, 0x0003003eu, 0x00000343u, + 0x000001f5u, 0x0004003du, 0x00000006u, 0x00000345u, 0x0000018au, 0x0003003eu, 0x00000344u, 0x00000345u, + 0x000200f9u, 0x00000346u, 0x000200f8u, 0x00000346u, 0x000400f6u, 0x00000348u, 0x00000349u, 0x00000000u, + 0x000200f9u, 0x0000034au, 0x000200f8u, 0x0000034au, 0x0004003du, 0x00000006u, 0x0000034bu, 0x00000344u, + 0x0004003du, 0x00000006u, 0x0000034cu, 0x0000018eu, 0x000500b0u, 0x00000044u, 0x0000034du, 0x0000034bu, + 0x0000034cu, 0x000400fau, 0x0000034du, 0x00000347u, 0x00000348u, 0x000200f8u, 0x00000347u, 0x0004003du, + 0x00000006u, 0x0000034fu, 0x00000180u, 0x0004003du, 0x00000006u, 0x00000350u, 0x00000344u, 0x00050080u, + 0x00000006u, 0x00000351u, 0x0000034fu, 0x00000350u, 0x00050041u, 0x0000019du, 0x00000352u, 0x00000209u, + 0x00000351u, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000352u, 0x0004003du, 0x00000008u, 0x00000354u, + 0x0000033du, 0x0004003du, 0x00000006u, 0x00000355u, 0x00000344u, 0x00050041u, 0x0000019du, 0x00000356u, + 0x00000268u, 0x00000355u, 0x0004003du, 0x00000008u, 0x00000357u, 0x00000356u, 0x00050085u, 0x00000008u, + 0x00000358u, 0x00000354u, 0x00000357u, 0x00050081u, 0x00000008u, 0x00000359u, 0x00000353u, 0x00000358u, + 0x0003003eu, 0x0000034eu, 0x00000359u, 0x0004003du, 0x00000006u, 0x0000035au, 0x00000180u, 0x0004003du, + 0x00000006u, 0x0000035bu, 0x00000344u, 0x00050080u, 0x00000006u, 0x0000035cu, 0x0000035au, 0x0000035bu, + 0x0004003du, 0x00000008u, 0x0000035du, 0x0000034eu, 0x00050041u, 0x0000019du, 0x0000035eu, 0x00000209u, + 0x0000035cu, 0x0003003eu, 0x0000035eu, 0x0000035du, 0x0004003du, 0x00000008u, 0x0000035fu, 0x0000034eu, + 0x0004003du, 0x00000006u, 0x00000360u, 0x00000344u, 0x00050041u, 0x0000019du, 0x00000361u, 0x00000294u, + 0x00000360u, 0x0004003du, 0x00000008u, 0x00000362u, 0x00000361u, 0x00050085u, 0x00000008u, 0x00000363u, + 0x0000035fu, 0x00000362u, 0x0004003du, 0x00000008u, 0x00000364u, 0x00000343u, 0x00050081u, 0x00000008u, + 0x00000365u, 0x00000364u, 0x00000363u, 0x0003003eu, 0x00000343u, 0x00000365u, 0x000200f9u, 0x00000349u, + 0x000200f8u, 0x00000349u, 0x0004003du, 0x00000006u, 0x00000366u, 0x00000344u, 0x00050080u, 0x00000006u, + 0x00000367u, 0x00000366u, 0x00000098u, 0x0003003eu, 0x00000344u, 0x00000367u, 0x000200f9u, 0x00000346u, + 0x000200f8u, 0x00000348u, 0x0004003du, 0x00000008u, 0x0000036au, 0x00000343u, 0x0003003eu, 0x00000369u, + 0x0000036au, 0x00050039u, 0x00000008u, 0x0000036bu, 0x00000028u, 0x00000369u, 0x0003003eu, 0x00000368u, + 0x0000036bu, 0x0004003du, 0x00000006u, 0x0000036cu, 0x00000174u, 0x00050041u, 0x0000017cu, 0x0000036du, + 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, 0x0000036eu, 0x0000036du, 0x000500b0u, 0x00000044u, + 0x0000036fu, 0x0000036cu, 0x0000036eu, 0x0004003du, 0x00000006u, 0x00000370u, 0x00000171u, 0x000500aau, + 0x00000044u, 0x00000371u, 0x00000370u, 0x0000004eu, 0x000500a7u, 0x00000044u, 0x00000372u, 0x0000036fu, + 0x00000371u, 0x000300f7u, 0x00000374u, 0x00000000u, 0x000400fau, 0x00000372u, 0x00000373u, 0x00000374u, + 0x000200f8u, 0x00000373u, 0x000200f9u, 0x00000375u, 0x000200f8u, 0x00000375u, 0x000400f6u, 0x00000377u, + 0x00000378u, 0x00000000u, 0x000200f9u, 0x00000376u, 0x000200f8u, 0x00000376u, 0x000300f7u, 0x0000037cu, + 0x00000000u, 0x000400fau, 0x0000037au, 0x0000037bu, 0x0000038fu, 0x000200f8u, 0x0000037bu, 0x00050041u, + 0x0000017cu, 0x00000382u, 0x0000017bu, 0x00000381u, 0x0004003du, 0x00000006u, 0x00000383u, 0x00000382u, + 0x000500c2u, 0x00000006u, 0x00000384u, 0x00000383u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000385u, + 0x000002c3u, 0x00050041u, 0x0000017cu, 0x00000386u, 0x0000017bu, 0x000001cbu, 0x0004003du, 0x00000006u, + 0x00000387u, 0x00000386u, 0x00050084u, 0x00000006u, 0x00000388u, 0x00000385u, 0x00000387u, 0x0004003du, + 0x00000006u, 0x00000389u, 0x00000174u, 0x00050080u, 0x00000006u, 0x0000038au, 0x00000388u, 0x00000389u, + 0x00050080u, 0x00000006u, 0x0000038bu, 0x00000384u, 0x0000038au, 0x0004003du, 0x00000008u, 0x0000038cu, + 0x00000368u, 0x0004007cu, 0x00000006u, 0x0000038du, 0x0000038cu, 0x00060041u, 0x00000202u, 0x0000038eu, + 0x00000380u, 0x000000ebu, 0x0000038bu, 0x0003003eu, 0x0000038eu, 0x0000038du, 0x000200f9u, 0x0000037cu, + 0x000200f8u, 0x0000038fu, 0x00050041u, 0x0000017cu, 0x00000394u, 0x0000017bu, 0x00000381u, 0x0004003du, + 0x00000006u, 0x00000395u, 0x00000394u, 0x000500c2u, 0x00000006u, 0x00000396u, 0x00000395u, 0x00000098u, + 0x0004003du, 0x00000006u, 0x00000397u, 0x000002c3u, 0x00050041u, 0x0000017cu, 0x00000398u, 0x0000017bu, + 0x000001cbu, 0x0004003du, 0x00000006u, 0x00000399u, 0x00000398u, 0x00050084u, 0x00000006u, 0x0000039au, + 0x00000397u, 0x00000399u, 0x0004003du, 0x00000006u, 0x0000039bu, 0x00000174u, 0x00050080u, 0x00000006u, + 0x0000039cu, 0x0000039au, 0x0000039bu, 0x00050080u, 0x00000006u, 0x0000039du, 0x00000396u, 0x0000039cu, + 0x0004003du, 0x00000008u, 0x0000039fu, 0x00000368u, 0x0003003eu, 0x0000039eu, 0x0000039fu, 0x0003003eu, + 0x000003a0u, 0x00000379u, 0x00060039u, 0x00000006u, 0x000003a1u, 0x00000020u, 0x0000039eu, 0x000003a0u, + 0x00040071u, 0x0000027fu, 0x000003a2u, 0x000003a1u, 0x00060041u, 0x0000028bu, 0x000003a3u, 0x00000393u, + 0x000000ebu, 0x0000039du, 0x0003003eu, 0x000003a3u, 0x000003a2u, 0x000200f9u, 0x0000037cu, 0x000200f8u, + 0x0000037cu, 0x000200f9u, 0x00000378u, 0x000200f8u, 0x00000378u, 0x000400fau, 0x000003a4u, 0x00000375u, + 0x00000377u, 0x000200f8u, 0x00000377u, 0x000200f9u, 0x00000374u, 0x000200f8u, 0x00000374u, 0x000100fdu, + 0x00010038u, +}; + constexpr uint32_t kSpv_vt_gdn_state_gather[] = { 0x07230203u, 0x00010300u, 0x0008000bu, 0x00000258u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, @@ -9853,10 +11246,18 @@ constexpr uint32_t kSpecIds_vt_embedding[] = { 0u, 1u, 2u, }; +constexpr uint32_t kSpecIds_vt_gdn_decode[] = { + 0u, 1u, +}; + constexpr uint32_t kSpecIds_vt_gdn_post_conv[] = { 0u, 1u, 2u, }; +constexpr uint32_t kSpecIds_vt_gdn_prefill[] = { + 0u, 1u, +}; + constexpr uint32_t kSpecIds_vt_matmul[] = { 0u, 1u, 2u, 3u, }; @@ -9897,7 +11298,9 @@ const SpirvModule kSpirvModules[] = { {"vt_causal_conv1d_update", kSpv_vt_causal_conv1d_update, sizeof(kSpv_vt_causal_conv1d_update) / sizeof(uint32_t), nullptr, 0}, {"vt_embedding", kSpv_vt_embedding, sizeof(kSpv_vt_embedding) / sizeof(uint32_t), kSpecIds_vt_embedding, 3}, {"vt_fused_chain", kSpv_vt_fused_chain, sizeof(kSpv_vt_fused_chain) / sizeof(uint32_t), nullptr, 0}, + {"vt_gdn_decode", kSpv_vt_gdn_decode, sizeof(kSpv_vt_gdn_decode) / sizeof(uint32_t), kSpecIds_vt_gdn_decode, 2}, {"vt_gdn_post_conv", kSpv_vt_gdn_post_conv, sizeof(kSpv_vt_gdn_post_conv) / sizeof(uint32_t), kSpecIds_vt_gdn_post_conv, 3}, + {"vt_gdn_prefill", kSpv_vt_gdn_prefill, sizeof(kSpv_vt_gdn_prefill) / sizeof(uint32_t), kSpecIds_vt_gdn_prefill, 2}, {"vt_gdn_state_gather", kSpv_vt_gdn_state_gather, sizeof(kSpv_vt_gdn_state_gather) / sizeof(uint32_t), nullptr, 0}, {"vt_gdn_state_scatter", kSpv_vt_gdn_state_scatter, sizeof(kSpv_vt_gdn_state_scatter) / sizeof(uint32_t), nullptr, 0}, {"vt_greedy_argmax", kSpv_vt_greedy_argmax, sizeof(kSpv_vt_greedy_argmax) / sizeof(uint32_t), nullptr, 0}, diff --git a/tests/vt/test_vulkan_backend.cpp b/tests/vt/test_vulkan_backend.cpp index de116b107..24b1618c6 100644 --- a/tests/vt/test_vulkan_backend.cpp +++ b/tests/vt/test_vulkan_backend.cpp @@ -16,6 +16,7 @@ // cross-backend oracle in the project. #include +#include #include #include #include @@ -56,7 +57,7 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // point of the split: at the target shader surface the words must not be // re-parsed by every TU that merely needs the table. const size_t n = vt::vulkan::kSpirvModuleCount; - CHECK(n == 22); + CHECK(n == 24); for (size_t mi = 0; mi < n; ++mi) { const auto& m = vt::vulkan::kSpirvModules[mi]; CAPTURE(m.name); @@ -75,7 +76,9 @@ TEST_CASE("the committed SPIR-V table is present and well-formed") { // BACKEND-VULKAN-GDN: the GDN / conv1d glue family. "vt_causal_conv1d_update", "vt_gdn_post_conv", "vt_gdn_state_gather", "vt_gdn_state_scatter", - "vt_rms_norm_gated", "vt_sigmoid_gate_bf16"}) { + "vt_rms_norm_gated", "vt_sigmoid_gate_bf16", + // BACKEND-VULKAN-GDN-CORE: the two recurrences. + "vt_gdn_prefill", "vt_gdn_decode"}) { bool found = false; for (size_t mi = 0; mi < vt::vulkan::kSpirvModuleCount; ++mi) { if (std::strcmp(vt::vulkan::kSpirvModules[mi].name, want) == 0) found = true; @@ -166,6 +169,16 @@ TEST_CASE("the committed SPIR-V table records each module's specialization const // a_log and dt_bias are f32 by contract and are therefore NOT axes. REQUIRE(m.spec_id_count == 3); for (uint32_t want = 0; want < 3; ++want) CHECK(m.spec_ids[want] == want); + } else if (std::strcmp(m.name, "vt_gdn_prefill") == 0 || + std::strcmp(m.name, "vt_gdn_decode") == 0) { + // The shared q/k/v dtype and the out dtype. TWO, not four: g, beta and the + // state are f32 by contract (a compressed state is CUDA-only, + // src/vt/ops.cpp:1631-1638) and the host DECLINES a call whose q/k/v + // disagree, so a third dtype constant here would mean the shader had grown + // past what the op promises. Both modules assert the same list because they + // share one step body (vt_gdn_recurrence.glsl) and must stay in lockstep. + REQUIRE(m.spec_id_count == 2); + for (uint32_t want = 0; want < 2; ++want) CHECK(m.spec_ids[want] == want); } else { CHECK(m.spec_id_count == 0); } @@ -402,7 +415,11 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // GDN hybrid (Qwen3.6-27B) hits on every step. vt::OpId::kSigmoidGateBf16, vt::OpId::kRmsNormGated, vt::OpId::kGdnStateGather, vt::OpId::kGdnStateScatter, - vt::OpId::kCausalConv1dUpdate, vt::OpId::kGdnPostConv}) { + vt::OpId::kCausalConv1dUpdate, vt::OpId::kGdnPostConv, + // BACKEND-VULKAN-GDN-CORE: the two gated-delta recurrences + // themselves, which are where a GDN hybrid's prefill time + // actually was. + vt::OpId::kGdnPrefill, vt::OpId::kGdnDecode}) { CHECK(vt::OpRegistered(op, DeviceType::kVULKAN)); } // No NATIVE Vulkan kernel yet for the rotary TABLE BUILD (kRopeCosSinCache and @@ -410,15 +427,11 @@ TEST_CASE("Vulkan registers the W0 op set and NOT the unimplemented rest") { // portable tier, mirroring vLLM's own split), quant, MoE, or the sampler beyond // greedy argmax. // - // kGdnPrefill / kGdnDecode are ALSO deliberately absent and stay listed here: - // they are the chunked gated-delta recurrences, the model's linear-attention - // core rather than glue, and BACKEND-VULKAN-GDN scoped them out rather than - // ship them unverified. kCausalConv1dFwd (the prefill conv) is out for a - // narrower reason -- its state write-back needs a different dispatch shape than - // the decode update, see src/vt/vulkan/vulkan_ops.cpp. + // kCausalConv1dFwd (the prefill conv) is out for a narrower reason -- its state + // write-back needs a different dispatch shape than the decode update, see + // src/vt/vulkan/vulkan_ops.cpp. for (vt::OpId op : {vt::OpId::kRopeNeox, vt::OpId::kRopeCosSinCache, vt::OpId::kApplyTemperature, vt::OpId::kMoeRouterTopK, - vt::OpId::kGdnPrefill, vt::OpId::kGdnDecode, vt::OpId::kCausalConv1dFwd}) { CHECK_FALSE(vt::OpRegistered(op, DeviceType::kVULKAN)); } @@ -1542,3 +1555,423 @@ TEST_CASE("the fused GDN post-conv preamble runs NATIVELY on Vulkan, all five ou vk.DestroyQueue(vq); cpu.DestroyQueue(cq); } + +// =========================================================================== +// BACKEND-VULKAN-GDN-CORE — the two gated-delta RECURRENCES. +// +// Same contract as the glue gates above: the oracle is our own CPU backend in +// the same binary, and every case asserts the MECHANISM as well as the numbers, +// because on this unified-memory device an unregistered op resolves to the CPU +// reference tier and returns answers IDENTICAL to the oracle. +// +// THE SHAPES ARE CHOSEN AGAINST THE TILE GEOMETRY, not for roundness +// (src/vt/vulkan/shaders/vt_gdn_recurrence.glsl: BV=16 state rows per workgroup, +// NW=8 lanes cooperating on each): +// Dv = 19 -> ceil(19/16) = 2 value tiles and the second has only 3 valid rows, +// so the tile tail's zero-fill and the guarded store-back both run; +// Dk = 20 -> ceil(20/8) = 3 columns per lane, and lane 7's slice starts PAST +// the end (c1 < c0), so a lane contributing an EMPTY partial to the +// row reduction still has to reach every barrier; +// Hv/Hk = 6/2 -> a GQA broadcast ratio of 3, not 1. +// A shape that was a multiple of everything would pass with all three wrong. +// =========================================================================== +namespace { + +constexpr int64_t kGdnHk = 2, kGdnHv = 6, kGdnDk = 20, kGdnDv = 19; + +// g is a LOG decay and beta a gate in (0,1). Feeding the raw spread would make +// exp(g) > 1 and GROW the carried state instead of contracting it, which is the +// opposite of the regime the recurrence runs in — and would let a sign error in +// the decay hide inside a plausible-looking NMSE. +std::vector GdnDecays(size_t n, uint32_t seed) { + std::vector v = Spread(n, 2.0f, seed); + for (float& x : v) x = -std::fabs(x); + return v; +} +std::vector GdnBetas(size_t n, uint32_t seed) { + std::vector v = Spread(n, 3.0f, seed); + for (float& x : v) x = 1.0f / (1.0f + std::exp(-x)); + return v; +} + +std::vector ToBf16(const std::vector& v) { + std::vector o(v.size()); + for (size_t i = 0; i < v.size(); ++i) o[i] = vt::F32ToBF16(v[i]); + return o; +} + +} // namespace + +TEST_CASE("the GDN PREFILL recurrence runs NATIVELY on Vulkan and matches the CPU oracle") { + if (!VulkanPresent()) return; + auto& ctx = vt::vulkan::VulkanContext::Get(); + Backend& vk = vt::GetBackend(DeviceType::kVULKAN); + Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue vq = vk.CreateQueue(); + Queue cq = cpu.CreateQueue(); + const Device vd{DeviceType::kVULKAN, 0}; + const Device cd{DeviceType::kCPU, 0}; + + // Three sequences of lengths 5, 0 and 3. The EMPTY one is the interesting case: + // its workgroups must stage their state tile, run no steps, and write it back + // UNCHANGED — the CPU reference's `for (t = qslp[s]; t < qslp[s+1]; ...)`. + constexpr int64_t kN = 3, kT = 8; + const std::vector qsl = {0, 5, 5, 8}; + constexpr int64_t kQk = kT * kGdnHk * kGdnDk; + constexpr int64_t kVo = kT * kGdnHv * kGdnDv; + constexpr int64_t kGb = kT * kGdnHv; + constexpr int64_t kRowElems = kGdnHv * kGdnDv * kGdnDk; + constexpr int64_t kSt = kN * kRowElems; + + const std::vector qv = Spread(kQk, 1.0f, 101u); + const std::vector kv = Spread(kQk, 1.0f, 103u); + const std::vector vv = Spread(kVo, 2.0f, 107u); + const std::vector gv = GdnDecays(kGb, 109u); + const std::vector bv = GdnBetas(kGb, 113u); + const std::vector s0 = Spread(kSt, 0.5f, 127u); + + vt::GdnArgs args; + args.scale = 1.0f / std::sqrt(static_cast(kGdnDk)); + + Buf vqb(vk, kQk, 4), vkb(vk, kQk, 4), vvb(vk, kVo, 4), vob(vk, kVo, 4); + Buf vgb(vk, kGb, 4), vbb(vk, kGb, 4), vsb(vk, kSt, 4), vlb(vk, kN + 1, 4); + Buf cqb(cpu, kQk, 4), ckb(cpu, kQk, 4), cvb(cpu, kVo, 4), cob(cpu, kVo, 4); + Buf cgb(cpu, kGb, 4), cbb(cpu, kGb, 4), csb(cpu, kSt, 4), clb(cpu, kN + 1, 4); + + vk.Copy(vq, vqb.p(), qv.data(), kQk * 4); + vk.Copy(vq, vkb.p(), kv.data(), kQk * 4); + vk.Copy(vq, vvb.p(), vv.data(), kVo * 4); + vk.Copy(vq, vgb.p(), gv.data(), kGb * 4); + vk.Copy(vq, vbb.p(), bv.data(), kGb * 4); + vk.Copy(vq, vsb.p(), s0.data(), kSt * 4); + vk.Copy(vq, vlb.p(), qsl.data(), (kN + 1) * 4); + std::memcpy(cqb.p(), qv.data(), kQk * 4); + std::memcpy(ckb.p(), kv.data(), kQk * 4); + std::memcpy(cvb.p(), vv.data(), kVo * 4); + std::memcpy(cgb.p(), gv.data(), kGb * 4); + std::memcpy(cbb.p(), bv.data(), kGb * 4); + std::memcpy(csb.p(), s0.data(), kSt * 4); + std::memcpy(clb.p(), qsl.data(), (kN + 1) * 4); + vk.Synchronize(vq); + + auto qk_t = [](void* p, Device dev, vt::DType dt) { + return Tensor::Contiguous(p, dt, dev, {kT, kGdnHk, kGdnDk}); + }; + auto vo_t = [](void* p, Device dev, vt::DType dt) { + return Tensor::Contiguous(p, dt, dev, {kT, kGdnHv, kGdnDv}); + }; + auto gb_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kT, kGdnHv}); + }; + auto st_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kN, kGdnHv, kGdnDv, kGdnDk}); + }; + + Tensor vqt = qk_t(vqb.p(), vd, vt::DType::kF32), vkt = qk_t(vkb.p(), vd, vt::DType::kF32); + Tensor vvt = vo_t(vvb.p(), vd, vt::DType::kF32), vot = vo_t(vob.p(), vd, vt::DType::kF32); + Tensor vgt = gb_t(vgb.p(), vd), vbt = gb_t(vbb.p(), vd), vst = st_t(vsb.p(), vd); + Tensor vlt = Tensor::Contiguous(vlb.p(), vt::DType::kI32, vd, {kN + 1}); + Tensor cqt = qk_t(cqb.p(), cd, vt::DType::kF32), ckt = qk_t(ckb.p(), cd, vt::DType::kF32); + Tensor cvt = vo_t(cvb.p(), cd, vt::DType::kF32), cot = vo_t(cob.p(), cd, vt::DType::kF32); + Tensor cgt = gb_t(cgb.p(), cd), cbt = gb_t(cbb.p(), cd), cst = st_t(csb.p(), cd); + Tensor clt = Tensor::Contiguous(clb.p(), vt::DType::kI32, cd, {kN + 1}); + + vt::GdnPrefill(cq, cot, cqt, ckt, cvt, cgt, cbt, cst, clt, args); + vt::GdnPrefill(vq, vot, vqt, vkt, vvt, vgt, vbt, vst, vlt, args); + vk.Synchronize(vq); + + CHECK(ctx.PipelineExistsFor("vt_gdn_prefill")); + CHECK(RanNative(vt::OpId::kGdnPrefill)); + + std::vector got_out(kVo), got_state(kSt); + vk.Copy(vq, got_out.data(), vob.p(), kVo * 4); + vk.Copy(vq, got_state.data(), vsb.p(), kSt * 4); + vk.Synchronize(vq); + const std::vector ref_out(cob.as(), cob.as() + kVo); + const std::vector ref_state(csb.as(), csb.as() + kSt); + const double nmse_out = NmseOf(ref_out, got_out); + const double nmse_state = NmseOf(ref_state, got_state); + MESSAGE("gdn_prefill out NMSE vs the CPU oracle: " << nmse_out); + MESSAGE("gdn_prefill CARRIED STATE NMSE vs the CPU oracle: " << nmse_state); + CHECK(nmse_out <= kGdnNmseTol); + // The state is asserted SEPARATELY from the output because it is the part that + // carries: a kernel that decayed correctly but wrote its tile back to the wrong + // rows would still produce a plausible `out`. + CHECK(nmse_state <= kGdnNmseTol); + + // Sequence 1 is EMPTY, so its state block must come back BIT-IDENTICAL to what + // it went in as — not merely close. This catches a store-back that wrote a + // decayed or zeroed tile for a zero-length token range. + CHECK(std::memcmp(got_state.data() + kRowElems, s0.data() + kRowElems, + static_cast(kRowElems) * 4) == 0); + + // --- bf16 arm: proof the dtype specialization actually engaged -------------- + // The numbers alone would not prove it. The shader's DEFAULT specialization is + // f32/f32, so a silently-ignored VkSpecializationMapEntry would read bf16 bytes + // as f32 — the exact failure this backend's spec-id bookkeeping exists for — and + // a NEW pipeline appearing in the cache is what says the value was bound. + const size_t pipelines_before = ctx.PipelineCacheSize(); + const std::vector q16 = ToBf16(qv), k16 = ToBf16(kv), v16 = ToBf16(vv); + Buf vq16(vk, kQk, 2), vk16(vk, kQk, 2), vv16(vk, kVo, 2), vo16(vk, kVo, 2); + Buf cq16(cpu, kQk, 2), ck16(cpu, kQk, 2), cv16(cpu, kVo, 2), co16(cpu, kVo, 2); + vk.Copy(vq, vq16.p(), q16.data(), kQk * 2); + vk.Copy(vq, vk16.p(), k16.data(), kQk * 2); + vk.Copy(vq, vv16.p(), v16.data(), kVo * 2); + vk.Copy(vq, vsb.p(), s0.data(), kSt * 4); // reset the carried state + std::memcpy(cq16.p(), q16.data(), kQk * 2); + std::memcpy(ck16.p(), k16.data(), kQk * 2); + std::memcpy(cv16.p(), v16.data(), kVo * 2); + std::memcpy(csb.p(), s0.data(), kSt * 4); + vk.Synchronize(vq); + + Tensor vq16t = qk_t(vq16.p(), vd, vt::DType::kBF16); + Tensor vk16t = qk_t(vk16.p(), vd, vt::DType::kBF16); + Tensor vv16t = vo_t(vv16.p(), vd, vt::DType::kBF16); + Tensor vo16t = vo_t(vo16.p(), vd, vt::DType::kBF16); + Tensor cq16t = qk_t(cq16.p(), cd, vt::DType::kBF16); + Tensor ck16t = qk_t(ck16.p(), cd, vt::DType::kBF16); + Tensor cv16t = vo_t(cv16.p(), cd, vt::DType::kBF16); + Tensor co16t = vo_t(co16.p(), cd, vt::DType::kBF16); + + vt::GdnPrefill(cq, co16t, cq16t, ck16t, cv16t, cgt, cbt, cst, clt, args); + vt::GdnPrefill(vq, vo16t, vq16t, vk16t, vv16t, vgt, vbt, vst, vlt, args); + vk.Synchronize(vq); + CHECK(ctx.PipelineCacheSize() == pipelines_before + 1); + + std::vector got16(kVo); + vk.Copy(vq, got16.data(), vo16.p(), kVo * 2); + vk.Synchronize(vq); + std::vector got16_f(kVo), ref16_f(kVo); + for (int64_t i = 0; i < kVo; ++i) { + got16_f[i] = vt::BF16ToF32(got16[i]); + ref16_f[i] = vt::BF16ToF32(co16.as()[i]); + } + const double nmse16 = NmseOf(ref16_f, got16_f); + MESSAGE("gdn_prefill out NMSE (bf16 q/k/v and bf16 out): " << nmse16); + CHECK(nmse16 <= kGdnNmseTol); + + vk.DestroyQueue(vq); + cpu.DestroyQueue(cq); +} + +TEST_CASE("the GDN DECODE recurrence runs NATIVELY on Vulkan, indexed and compact") { + if (!VulkanPresent()) return; + auto& ctx = vt::vulkan::VulkanContext::Get(); + Backend& vk = vt::GetBackend(DeviceType::kVULKAN); + Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue vq = vk.CreateQueue(); + Queue cq = cpu.CreateQueue(); + const Device vd{DeviceType::kVULKAN, 0}; + const Device cd{DeviceType::kCPU, 0}; + + // The cache has MORE rows than the batch and the indices are scrambled, so a + // kernel that used the token index as its state row would pass a + // batch-rows-only test and corrupt this one. Index 1 is NEGATIVE — fla's NULL + // block — whose output row must come back ZEROED. + constexpr int64_t kBatch = 5, kSlots = 7; + const std::vector idx = {3, -1, 0, 6, 1}; + constexpr int64_t kQk = kBatch * kGdnHk * kGdnDk; + constexpr int64_t kVo = kBatch * kGdnHv * kGdnDv; + constexpr int64_t kGb = kBatch * kGdnHv; + constexpr int64_t kRowElems = kGdnHv * kGdnDv * kGdnDk; + constexpr int64_t kSt = kSlots * kRowElems; + + const std::vector qv = Spread(kQk, 1.0f, 211u); + const std::vector kv = Spread(kQk, 1.0f, 223u); + const std::vector vv = Spread(kVo, 2.0f, 227u); + const std::vector gv = GdnDecays(kGb, 229u); + const std::vector bv = GdnBetas(kGb, 233u); + const std::vector s0 = Spread(kSt, 0.5f, 239u); + + vt::GdnArgs args; + args.scale = 1.0f / std::sqrt(static_cast(kGdnDk)); + + Buf vqb(vk, kQk, 4), vkb(vk, kQk, 4), vvb(vk, kVo, 4), vob(vk, kVo, 4); + Buf vgb(vk, kGb, 4), vbb(vk, kGb, 4), vsb(vk, kSt, 4), vib(vk, kBatch, 4); + Buf cqb(cpu, kQk, 4), ckb(cpu, kQk, 4), cvb(cpu, kVo, 4), cob(cpu, kVo, 4); + Buf cgb(cpu, kGb, 4), cbb(cpu, kGb, 4), csb(cpu, kSt, 4), cib(cpu, kBatch, 4); + + vk.Copy(vq, vqb.p(), qv.data(), kQk * 4); + vk.Copy(vq, vkb.p(), kv.data(), kQk * 4); + vk.Copy(vq, vvb.p(), vv.data(), kVo * 4); + vk.Copy(vq, vgb.p(), gv.data(), kGb * 4); + vk.Copy(vq, vbb.p(), bv.data(), kGb * 4); + vk.Copy(vq, vsb.p(), s0.data(), kSt * 4); + vk.Copy(vq, vib.p(), idx.data(), kBatch * 4); + std::memcpy(cqb.p(), qv.data(), kQk * 4); + std::memcpy(ckb.p(), kv.data(), kQk * 4); + std::memcpy(cvb.p(), vv.data(), kVo * 4); + std::memcpy(cgb.p(), gv.data(), kGb * 4); + std::memcpy(cbb.p(), bv.data(), kGb * 4); + std::memcpy(csb.p(), s0.data(), kSt * 4); + std::memcpy(cib.p(), idx.data(), kBatch * 4); + vk.Synchronize(vq); + + auto qk_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kBatch, kGdnHk, kGdnDk}); + }; + auto vo_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kBatch, kGdnHv, kGdnDv}); + }; + auto gb_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kBatch, kGdnHv}); + }; + auto st_t = [](void* p, Device dev, int64_t rows) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {rows, kGdnHv, kGdnDv, kGdnDk}); + }; + + Tensor vqt = qk_t(vqb.p(), vd), vkt = qk_t(vkb.p(), vd); + Tensor vvt = vo_t(vvb.p(), vd), vot = vo_t(vob.p(), vd); + Tensor vgt = gb_t(vgb.p(), vd), vbt = gb_t(vbb.p(), vd); + Tensor vst = st_t(vsb.p(), vd, kSlots); + Tensor vit = Tensor::Contiguous(vib.p(), vt::DType::kI32, vd, {kBatch}); + Tensor cqt = qk_t(cqb.p(), cd), ckt = qk_t(ckb.p(), cd); + Tensor cvt = vo_t(cvb.p(), cd), cot = vo_t(cob.p(), cd); + Tensor cgt = gb_t(cgb.p(), cd), cbt = gb_t(cbb.p(), cd); + Tensor cst = st_t(csb.p(), cd, kSlots); + Tensor cit = Tensor::Contiguous(cib.p(), vt::DType::kI32, cd, {kBatch}); + + vt::GdnDecode(cq, cot, cqt, ckt, cvt, cgt, cbt, cst, args, &cit); + vt::GdnDecode(vq, vot, vqt, vkt, vvt, vgt, vbt, vst, args, &vit); + vk.Synchronize(vq); + + CHECK(ctx.PipelineExistsFor("vt_gdn_decode")); + CHECK(RanNative(vt::OpId::kGdnDecode)); + + std::vector got_out(kVo), got_state(kSt); + vk.Copy(vq, got_out.data(), vob.p(), kVo * 4); + vk.Copy(vq, got_state.data(), vsb.p(), kSt * 4); + vk.Synchronize(vq); + const std::vector ref_out(cob.as(), cob.as() + kVo); + const std::vector ref_state(csb.as(), csb.as() + kSt); + const double nmse_out = NmseOf(ref_out, got_out); + const double nmse_state = NmseOf(ref_state, got_state); + MESSAGE("gdn_decode (indexed cache) out NMSE vs the CPU oracle: " << nmse_out); + MESSAGE("gdn_decode (indexed cache) CACHE NMSE vs the CPU oracle: " << nmse_state); + CHECK(nmse_out <= kGdnNmseTol); + CHECK(nmse_state <= kGdnNmseTol); + + // The NULL block's output row is asserted DIRECTLY: if both kernels wrongly ran + // the recurrence for it, the comparison above would still be green. + bool null_row_zero = true; + for (int64_t e = 0; e < kGdnHv * kGdnDv; ++e) { + if (got_out[kGdnHv * kGdnDv + e] != 0.0f) null_row_zero = false; + } + CHECK(null_row_zero); + // Cache slots 2, 4 and 5 are named by no index and must still hold their + // ORIGINAL bytes — proof the indirection wrote only where it was told to. + for (int64_t slot : {2, 4, 5}) { + CAPTURE(slot); + CHECK(std::memcmp(got_state.data() + slot * kRowElems, s0.data() + slot * kRowElems, + static_cast(kRowElems) * 4) == 0); + } + + // --- the COMPACT path: no state_idx, one state row per token ---------------- + Buf vsc(vk, kBatch * kRowElems, 4), csc(cpu, kBatch * kRowElems, 4); + vk.Copy(vq, vsc.p(), s0.data(), kBatch * kRowElems * 4); + std::memcpy(csc.p(), s0.data(), kBatch * kRowElems * 4); + vk.Synchronize(vq); + Tensor vsct = st_t(vsc.p(), vd, kBatch), csct = st_t(csc.p(), cd, kBatch); + vt::GdnDecode(cq, cot, cqt, ckt, cvt, cgt, cbt, csct, args, nullptr); + vt::GdnDecode(vq, vot, vqt, vkt, vvt, vgt, vbt, vsct, args, nullptr); + vk.Synchronize(vq); + + std::vector got_c(kVo), got_sc(kBatch * kRowElems); + vk.Copy(vq, got_c.data(), vob.p(), kVo * 4); + vk.Copy(vq, got_sc.data(), vsc.p(), kBatch * kRowElems * 4); + vk.Synchronize(vq); + const std::vector ref_c(cob.as(), cob.as() + kVo); + const std::vector ref_sc(csc.as(), csc.as() + kBatch * kRowElems); + const double nmse_c = NmseOf(ref_c, got_c); + MESSAGE("gdn_decode (compact state) out NMSE vs the CPU oracle: " << nmse_c); + CHECK(nmse_c <= kGdnNmseTol); + CHECK(NmseOf(ref_sc, got_sc) <= kGdnNmseTol); + + vk.DestroyQueue(vq); + cpu.DestroyQueue(cq); +} + +TEST_CASE("a GDN recurrence wider than the shared tile DECLINES to the reference tier") { + if (!VulkanPresent()) return; + Backend& vk = vt::GetBackend(DeviceType::kVULKAN); + Backend& cpu = vt::GetBackend(DeviceType::kCPU); + Queue vq = vk.CreateQueue(); + Queue cq = cpu.CreateQueue(); + const Device vd{DeviceType::kVULKAN, 0}; + const Device cd{DeviceType::kCPU, 0}; + + // Dk = 132 is past VT_GDN_MAX_DK, so the [BV,Dk] tile would not fit Vulkan's + // GUARANTEED 16 KB of shared memory. The kernel must forward through the + // provider seam rather than throw or index past the array: declining preserves a + // capability the reference tier already had, which is what GetOpFallback is for. + // Asserted through the DECLINE COUNTER, because `last_selected` still names + // vt-native — the native provider WAS selected, and then forwarded. + constexpr int64_t kN = 1, kT = 2, kHk = 1, kHv = 1, kDk = 132, kDv = 4; + constexpr int64_t kQk = kT * kHk * kDk, kVo = kT * kHv * kDv, kGb = kT * kHv; + constexpr int64_t kSt = kN * kHv * kDv * kDk; + const std::vector qsl = {0, 2}; + const std::vector qv = Spread(kQk, 1.0f, 307u), kv = Spread(kQk, 1.0f, 311u); + const std::vector vv = Spread(kVo, 2.0f, 313u); + const std::vector gv = GdnDecays(kGb, 317u), bv = GdnBetas(kGb, 331u); + const std::vector s0 = Spread(kSt, 0.5f, 337u); + vt::GdnArgs args; + args.scale = 1.0f / std::sqrt(static_cast(kDk)); + + Buf vqb(vk, kQk, 4), vkb(vk, kQk, 4), vvb(vk, kVo, 4), vob(vk, kVo, 4); + Buf vgb(vk, kGb, 4), vbb(vk, kGb, 4), vsb(vk, kSt, 4), vlb(vk, kN + 1, 4); + Buf cqb(cpu, kQk, 4), ckb(cpu, kQk, 4), cvb(cpu, kVo, 4), cob(cpu, kVo, 4); + Buf cgb(cpu, kGb, 4), cbb(cpu, kGb, 4), csb(cpu, kSt, 4), clb(cpu, kN + 1, 4); + vk.Copy(vq, vqb.p(), qv.data(), kQk * 4); + vk.Copy(vq, vkb.p(), kv.data(), kQk * 4); + vk.Copy(vq, vvb.p(), vv.data(), kVo * 4); + vk.Copy(vq, vgb.p(), gv.data(), kGb * 4); + vk.Copy(vq, vbb.p(), bv.data(), kGb * 4); + vk.Copy(vq, vsb.p(), s0.data(), kSt * 4); + vk.Copy(vq, vlb.p(), qsl.data(), (kN + 1) * 4); + std::memcpy(cqb.p(), qv.data(), kQk * 4); + std::memcpy(ckb.p(), kv.data(), kQk * 4); + std::memcpy(cvb.p(), vv.data(), kVo * 4); + std::memcpy(cgb.p(), gv.data(), kGb * 4); + std::memcpy(cbb.p(), bv.data(), kGb * 4); + std::memcpy(csb.p(), s0.data(), kSt * 4); + std::memcpy(clb.p(), qsl.data(), (kN + 1) * 4); + vk.Synchronize(vq); + + auto qk_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kT, kHk, kDk}); + }; + auto vo_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kT, kHv, kDv}); + }; + auto gb_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kT, kHv}); + }; + auto st_t = [](void* p, Device dev) { + return Tensor::Contiguous(p, vt::DType::kF32, dev, {kN, kHv, kDv, kDk}); + }; + Tensor vqt = qk_t(vqb.p(), vd), vkt = qk_t(vkb.p(), vd); + Tensor vvt = vo_t(vvb.p(), vd), vot = vo_t(vob.p(), vd); + Tensor vgt = gb_t(vgb.p(), vd), vbt = gb_t(vbb.p(), vd), vst = st_t(vsb.p(), vd); + Tensor vlt = Tensor::Contiguous(vlb.p(), vt::DType::kI32, vd, {kN + 1}); + Tensor cqt = qk_t(cqb.p(), cd), ckt = qk_t(ckb.p(), cd); + Tensor cvt = vo_t(cvb.p(), cd), cot = vo_t(cob.p(), cd); + Tensor cgt = gb_t(cgb.p(), cd), cbt = gb_t(cbb.p(), cd), cst = st_t(csb.p(), cd); + Tensor clt = Tensor::Contiguous(clb.p(), vt::DType::kI32, cd, {kN + 1}); + + const auto before = vt::GetOpProviderStats(vt::OpId::kGdnPrefill, DeviceType::kVULKAN); + CHECK_NOTHROW(vt::GdnPrefill(vq, vot, vqt, vkt, vvt, vgt, vbt, vst, vlt, args)); + vk.Synchronize(vq); + const auto after = vt::GetOpProviderStats(vt::OpId::kGdnPrefill, DeviceType::kVULKAN); + CHECK(after.declines == before.declines + 1); + + // And it still computed the right answer on the tier it forwarded to — BIT-EXACT + // this time, because the same host code ran both sides. + vt::GdnPrefill(cq, cot, cqt, ckt, cvt, cgt, cbt, cst, clt, args); + std::vector got(kVo); + vk.Copy(vq, got.data(), vob.p(), kVo * 4); + vk.Synchronize(vq); + CHECK(std::memcmp(got.data(), cob.p(), static_cast(kVo) * 4) == 0); + + vk.DestroyQueue(vq); + cpu.DestroyQueue(cq); +}