diff --git a/docs/analysis/chip-model-v3.md b/docs/analysis/chip-model-v3.md index 43a86472..9eb536b1 100644 --- a/docs/analysis/chip-model-v3.md +++ b/docs/analysis/chip-model-v3.md @@ -332,3 +332,46 @@ measurements land. check that they are the right order. - The ALU budgets of the M5 Max and the 9070 XT, their power at the hash, and the verifier's cost at N = 100,000 program ops are estimates; the program-length lever is a design item with its own measurements, not a result. + +## 6. The per-day derivation (item 2) + +6 October 2026, Counter ASIC 3.0 item 2, worker `derive` (`docs/plans/counter-asic-3-derivation.md`; everything +PROPOSED, a prototype behind load class `dr736`). The fixed-shape mixer of section 2's rows is replaced by nine +straight-line programs of 736 instructions per item drawn from the day key stream (twelve two-register forms, +the chain rule, an acceptance test with the x8 mixer's counts as floors). The chip's cost per hash is still item +derivations; what changes is the fixed-function factor, because the chip must now execute an arbitrary program +of the day from a 12-form set over 16 registers (a sequencer: instruction store, register file, operand muxes, a +32-bit ALU with a multiplier and a rotator) instead of a wired pipeline of 72 mixer stages with the day's +constants in the wires. The counts are from the code (`memhard::mixer`: 144 ops per application as written, 128 +with the round constants hoisted, 16 multiplies; the x8 item is 10,368 / 9,216 / 1,152), not the 130 of section 1; +the day program's floor is those counts, so the bare row cannot fall below x8's. + +| Row | Derivation | Chip ops per hash | Chip rate at 50 T op/s | SRAM the chip holds | mm^2 / $ (N5 headline) | Bare gain against 136.1 MH/s | Allowance 1.2x (ProgPoW's claimed range, history 2.4 [S67] [S70]) | Allowance 1.5x (cautious upper bound, approximate) | The old 3x (the fixed shape's; does not apply) | Equal silicon, SRAM deducted, at 1.2x / 1.5x | +|---|---|---|---|---|---|---|---|---|---|---| +| x8 as shipped (section 2's v3 row, re-counted from the code with constants hoisted) | fixed mixer, 72 x 128 | 1,179,648 | 42.4 MH/s | 256 MiB | 128 / $46 | 0.31x | 0.37x | 0.47x | 0.93x | 0.31x / 0.39x | +| **dr736, the genesis day's draw** (9,992 chip ops, 1,461 multiplies per item; the floor is x8's 9,216) | the day program, 9 x 736 instructions | 1,278,976 | 39.1 MH/s | 256 MiB | 128 / $46 | 0.29x | 0.34x | 0.43x | 0.86x | 0.29x / 0.36x | +| dr736 at the floor (a day whose draw sits exactly on the acceptance floor) | the day program | 1,179,648 | 42.4 | 256 MiB | 128 / $46 | 0.31x | 0.37x | 0.47x | 0.93x | 0.31x / 0.39x | +| dr368, the fallback (the x4-equivalent count: 5,004 chip ops per item on the genesis day) | the day program, 9 x 368 | 640,512 | 78.1 | 256 MiB | 128 / $46 | 0.57x | 0.69x | 0.86x | 1.72x | 0.57x / 0.71x | +| dr736 at year 4 (cache 512 MiB) | the day program | 1,278,976 | 39.1 | 512 MiB | 255 / $111 | 0.29x | 0.34x | 0.43x | 0.86x | 0.23x / 0.28x | + +Arithmetic, row dr736: 9,992 x 128 = 1,278,976; 50 x 10^12 / 1,278,976 = 39.1 x 10^6; 39.1 / 136.1 = 0.287; x 1.2 += 0.345; x 1.5 = 0.431; x 3 = 0.862; equal silicon (750 - 128) / 750 = 0.829, x 0.345 = 0.286, x 0.431 = 0.357. +The allowance argument, plainly: the 3x of section 1 was the credit for "a pipeline with no scheduling or +divergence", which a fixed dataflow earns because the chip wires the 72 applications and bakes the constants in; +with a program that changes daily the chip keeps no divergence (the GPU has none here either: the item function +is straight-line), the constants folded into an instruction store, and no warp scheduler or operand collector, +and it loses the wiring. That residual is what ProgPoW's audits priced at 1.1x to 1.2x for a conventional +compute chip (Rao: "conventional compute chips gain little on ProgPoW", history section 2.4); 1.5x is a cautious +upper bound of mine (approximate) for a chip that also drops the GPU's float and graphics area. The chain rule +(every instruction reads the register the previous one wrote) adds a cost the row does not credit: with no +intra-item parallelism a single engine completes one dependent instruction per cycle at best and must interleave +items to keep its multiplier busy, which is a register file per item in flight (RandomX's light-mode argument, +history 2.4). The measured costs that buy this: the verifier 4.88 ms per unit on one M5 Max core against x8's +2.06 (the derivation document's section 5.1), the Mac's daily build 29 ms against 22, the hash rate unchanged; +the 5090's build and compile are the PC 2 job, the 9070 XT's OWED. + +What this does not settle: the rows are the same 50 T op/s budget and the same denominator as section 2 (their +margins apply); no chip has been priced for its instruction store or its register files per item in flight; the +random ARX programs have had no cryptanalysis (the item 3 brief should name them beside `M_r`); the 2019-class +core measurement (O-1.14) decides whether 736 or 368 is the length, and the derivation document's section 0 +carries that verdict. diff --git a/docs/bench-log.md b/docs/bench-log.md index 85997dca..53a6b8e3 100644 --- a/docs/bench-log.md +++ b/docs/bench-log.md @@ -1961,3 +1961,84 @@ Ten distinct programs (seed strings `igneum-devnet-v4-epoch0`, `/epoch1` .. `/ep Cache fill 1.95 ms GPU (192.4 ms one core), dataset build 20.8 ms GPU for 1 GiB. The devnet pack three times through `packbench --pack ../proto-cuda/packs/igneum-devnet-v4-epoch0 --batches 1 --batch-log2 20 --group 256` (the pack's two libraries, `memhard.metal` and `program.metal`): compile 79 ms, 1 ms, 1 ms (the system shader cache answers the identical source from the second run); cache fill 0.6 to 0.7 ms GPU, dataset build 20.7 to 20.8 ms GPU. Reading: a fresh program compiles in about 18 ms on this card with the Metal compiler service warm, 79 ms for a pack with its dataset kernels, up to 1.8 s cold (the variant-racing entry's first seed), 0 to 444 ms at the fleet's live boundaries (M11). The hot table fill of layer 5 is 0.07 to 0.22 ms (ca2-cache). So the Mac's per-epoch compile-ahead is under 2 s without the race and about 38 s with it (M11: 34.0 / 34.9 / 37.8 s), and the race is the only item visible against the 600-s window in which the program is known (lead 1,200 s minus the 600-s VDF, fixed at every epoch length). PC cards, cited in the plan: RTX 5090 NVRTC 151 to 180 ms, prepare 0.5 to 1.0 s without the dataset (M11), race one round about 37 s; RX 9070 XT OpenCL compile NOT MEASURED at the current worker (owed: `host.c` times `clBuildProgram` only in the `prepare` path and no `prepared` line from gfx1201 is in any upload); Intel UHD build 3.0 to 6.4 s (M11). Floor by the rule (slowest compile-ahead under 10% of the epoch and inside the window, dataset excluded): 600 DAA s, carried by the race at 6.3% of 600 s; with the race off (M11 found base wins on both the 5090 and the Mac) the slowest measured row is the Intel iGPU at 1.1%. Consequences per tier and the difficulty-settle constraint (24% of a 600-s epoch in settle at the measured 144 s) are in the plan. + +## 6 October 2026, Counter ASIC 3.0 item 2: the per-day derivation + +Branch `ca3-derive` (worker "derive", from ca3-coord 50df751; commits acb96ee and after), design, spec text and +the chip row in `docs/plans/counter-asic-3-derivation.md` and `docs/analysis/chip-model-v3.md` section 6. +Question (the plan's item 2): replace the fixed-shape mixer (the chip model's 3x fixed-function allowance, 0.31x +to 0.92x) with a random item-derivation program drawn per day from the day key stream (RandomX's SuperscalarHash +idea, `superscalar.cpp` read at upstream 7607fb2), keep the 8 dependent cache reads per item exactly, keep the op +count per item at or above x8's, and measure the verifier against the 10 ms gate, bit-exactness, the daily build +and the hash rate. Machine: Apple M5 Max, 64 GiB, Darwin 25.6.0; every timing row names its lock and load average. + +The construction (class `dr736`, `igneum-pow/src/derive.rs`): nine straight-line programs of 736 instructions per +item (one before each cache read, one after the last), four draws per instruction from the mixer's own SplitMix64 +stream after its 40 draws, twelve two-register forms (add, sub, xor, mul-lo by `c|1`, rotate-add, xor-rotate, +add-constant, xor-constant, the `M_r` form `(d ^ c) * odd`, `d * odd + c`, `d ^= c & b`, `d += c | b`), every +instruction reading the register the previous one wrote (the chain, `s[0]` first) and writing another, every form +a bijection on the state; the acceptance test rejects a register never written, fewer than 8 distinct rotations, +or a draw under the x8 mixer's counts from the code (72 x 128 = 9,216 chip ops, 72 x 144 = 10,368 as written, +1,152 multiplies; the coordinator's correction of the 130-per-application figure). The genesis day draws 6,624 +instructions, 10,659 GPU ops, 9,992 chip ops, 1,461 multiplies per item; the verifier runs it with a word-major +interpreter over the 32 items of a load, dispatching on instruction pairs, no JIT. + +**Verifier per 32-lane unit, one core (`with-lock.sh measure`, one session 07:42:20 to 07:42:33 UTC, load +average 4.91 / 4.53 / 5.34 at the start, 4.46 / 4.44 / 5.30 at the end; `igneum-pow bench --seed igneum-genesis +--day 2026-10-03 --class --warps 50`, two rounds, then the devnet seeds once):** + +| Class | ms per unit, avg of 50 (round 1 / 2) | Worst cold of three | Against x8 | Ops per item (GPU / chip / mul) | +|---|---|---|---|---| +| v2 | 0.598 / 0.594 | 0.697 | | 1,296 / 1,152 / 144 | +| x8 (mx8, class v3) | 2.061 / 2.063 | 2.179 | 1 | 10,368 / 9,216 / 1,152 | +| dr736 | 4.875 / 4.944 | 5.241 | 2.37x | 10,659 / 9,992 / 1,461 | +| x8, devnet seeds | 2.078 | 2.155 | | | +| dr736, devnet seeds | 4.872 | 5.241 | 2.34x | 10,701 / 10,083 / 1,362 | +| dr368 (half length, the x4-equivalent fallback) | 2.692 | 2.898 | 1.31x | 5,350 / 5,004 / 752 | + +The v2 row reads the quiet nights' 0.60 (readwidth 0.604 to 0.626; 6.4a 0.607 to 0.611), so these are quiet-core +figures. The interpreter's cost split (`examples/derive_perf.rs`, a functional run under the run lock, load 3.9 to +4.9): 10.7 ns per instruction per 32-item batch cold, 7.18 with one dispatch per instruction, 4.98 with pair +dispatch; a uniform program (predictable dispatch) 3.4 to 4.3 ns, so about 1.5 ns is dispatch and 3.5 ns the +vector body (NEON, 1,180 `.4s` instructions in the binary). + +**Bit-exactness (`with-lock.sh run`):** dr736-genesis on Metal (`packbench --batches 1 --batch-log2 24`) cache +FNV 48c4f5bf24166b2e PASS, dataset head and word [MASK] PASS, vectors 3/3 standalone and 3/3 in batch, fingerprint +2^24 50e3eaa779da4f1e, compile 784 ms cold; on Apple OpenCL (`igneum-bench-cl-dr736-genesis --bench-pack`) the +self-test PASS with the 64 samples and 96 of 96 lanes, fingerprint 50e3eaa779da4f1e (equal); dr736-devnet-epoch0 +on Metal PASS, fingerprint 9553f6d5c667205a. Two compilers agree with the Rust interpreter on the derived dataset +and on 2^24 outputs. + +**Daily 1 GiB build and hash rate, Metal (`with-lock.sh measure`, the same session, `packbench --batches 2 +--batch-log2 22 --group 256`, three rounds):** + +| Pack | Compile (1 / 2 / 3) | Build, GPU ms (1 / 2 / 3) | MH/s GPU (1 / 2 / 3) | +|---|---|---|---| +| mx8-genesis (x8, the control) | 80 / 1 / 1 ms | 31.3 / 22.1 / 22.1 | 27.155 / 27.076 / 27.123 | +| dr736-genesis | 751 / 1 / 1 ms | 28.9 / 29.0 / 29.1 | 27.125 / 27.129 / 27.063 | + +**Chip model (chip-model-v3.md section 6):** 1,278,976 chip ops per hash on the genesis day, 39.1 MH/s at +50 T op/s, 0.29x bare (0.31x at the floor, x8's figure); the fixed-function allowance of the wired mixer (3x) no +longer applies to a chip that must run the day's program: at ProgPoW's claimed 1.2x the row reads 0.34x, at a +cautious 1.5x 0.43x, at the old 3x 0.86x; equal silicon 0.29x / 0.36x. dr368: 0.57x bare, 0.69x / 0.86x. + +**Consequences per tier.** The verifier: no miner tier runs it; a node on any 2026 core verifies a block in 5 ms +(x8: 2.1), a pool core serves 205 shares per second (x8: 485; a 22,000-member pool at one share per 10 s needs +11 cores against 4.5), IBD over 108,000 headers is 8.8 min on one core (x8: 3.7); on a 2019-class laptop core +(2.5x, approximate, O-1.14 unmeasured) 736 reads about 12 ms, over the gate, and 368 about 6.7 ms, under it. The +build: the Mac pays 7 ms more per day (29 against 22 ms), nothing to any tier; the 5090 is the PC 2 job below; +the 9070 XT is OWED (PC 1 is the project lead's desk today; its x8 build was 72 to 77 ms); the integrated gfx1036 tier +already misses the per-prepare rule at x8 (epoch-length.md 6.1: 6.9 / 9.4 / 11.7 s prepares at x1, about 55 to +94 s at x8, approximate) and the day program leaves that need (per-day dataset reuse in the workers, 0.3.12) the +same in kind. The compile: the Metal item library is 0.75 to 0.8 s cold once a day and 1 ms from the shader cache; +the CUDA worker compiles memhard.h into every per-epoch kernel and every race variant, so the 5090's nvrtc line +is the number to read. The hash rate: unchanged within 0.3% on the Mac, as the hash kernel only loads. Packs grow +by about 550 KB (memhard.h 196 KB, program.json 156 KB): nothing to any tier. + +**Go / no-go:** GO as reserve entry R0 (the PROPOSED text in the derivation document's section 6, not in +docs/spec); NO-GO for genesis-live at 736 instructions until the 2019-class core measurement lands under 10 ms; +the number that decides it is 4.88 ms per unit on one M5 Max core (pass) against about 12 ms on the approximate +laptop row (fail); dr368 passes both rows at 2.69 ms with the chip at 0.57x bare. + +**RTX 5090 (PC 2, one job `relay/playbooks/ca3-derive-pc2.ps1`):** PENDING the proving agent's clear and the PC 2 +lock; the rows are appended below when the closing report is read. **RX 9070 XT:** OWED. diff --git a/docs/plans/counter-asic-3-derivation.md b/docs/plans/counter-asic-3-derivation.md new file mode 100644 index 00000000..902043af --- /dev/null +++ b/docs/plans/counter-asic-3-derivation.md @@ -0,0 +1,415 @@ +# Counter ASIC 3.0 item 2: a random item-derivation program per day + +6 October 2026. Worker `derive` (branch `ca3-derive`), under the brief of `docs/plans/counter-asic-3.md` item 2 and +the history audit's addition 2 (`docs/analysis/asic-resistance-history.md` section 4.3). Everything here is +PROPOSED: a prototype behind a load class (`dr736`), measured on the Mac and on PC 2, written as a reserve entry for +spec 1.13.2 (section 6) that lives in this file until the project lead's word. Nothing is published and no vector of class v2 +or v3 moves (section 3.4). + +What it does, in one line: the fixed-shape mixer `M_r` of spec 1.8.4, applied 72 times per item under class v3, +is replaced by nine straight-line programs of 736 instructions drawn once a day from the day key stream, so the chip +that holds the cache on die must run an arbitrary program instead of a wired pipeline; the 8 dependent cache reads +per item, the cache, the loads and the hash kernel are untouched. + +## 0. The verdict first + +| Gate | Number | Bar | Result | +|---|---|---|---| +| Verifier per 32-lane unit, one M5 Max core, `with-lock.sh measure`, load average 4.9 / 4.5 / 5.3 | 4.875 / 4.944 ms (two rounds of 50), worst cold unit 5.241; the devnet seeds 4.872 | 10 ms | passes, 5.1 ms of margin (x8 reads 2.061 / 2.063 in the same session: 2.37x) | +| The same on a 2019-class laptop core (2.5x, approximate, the design document's ratio; O-1.14 unmeasured) | about 12.2 ms steady, 13.1 worst cold | 10 ms | FAILS on the approximate row; the half-length class `dr368` (the x4-equivalent op count) reads 2.692 ms here, about 6.7 ms on that row, and passes | +| Bit-exact: Metal and Apple OpenCL against the Rust CPU interpreter, two packs | cache FNV, dataset head and word [MASK], 64 samples (OpenCL), 96 vector lanes, 2^24 fingerprint 50e3eaa779da4f1e (dr736-genesis, both compilers) and 9553f6d5c667205a (dr736-devnet-epoch0, Metal) | equal | passes on two compilers; CUDA (PC 2) section 5.4 | +| Daily 1 GiB build, M5 Max, Metal, measure lock | 29.0 / 29.1 / 28.9 ms GPU against mx8's 22.1 / 22.1 ms in the same session (+32%) | under 1 s on every discrete card | passes on the Mac; the 5090 section 5.4; the 9070 XT OWED (PC 1 is the project lead's desk today) | +| Hash rate, M5 Max, Metal, measure lock | dr736-genesis 27.06 to 27.13 MH/s GPU, mx8-genesis 27.08 to 27.16 | equal within noise | equal (0.3%): the hash kernel does not change | +| Chip model (section 7) | 1,278,976 chip ops per hash, 39.1 MH/s at 50 T op/s, 0.29x bare; 0.34x at a 1.2x allowance, 0.43x at 1.5x, 0.86x at the old 3x | under 1x | the allowance is the result: the 3x of the fixed shape no longer applies | + +Go / no-go: GO as reserve entry R0 (section 6), NO-GO for genesis-live at 736 instructions until the 2019-class +core measurement (O-1.14) lands under 10 ms; the number that decides it is 4.88 ms per unit on one M5 Max core +(pass) against about 12 ms on the approximate laptop row (fail). The class that passes both rows today is `dr368` +(2.69 ms), at the x4-equivalent op count, with the chip row at 0.58x bare. The way to the 736 figure under the gate +on a laptop is the JIT (section 4.3), which is out of scope and named with its risk. + +## 1. Why: what the chip model says the fixed shape is worth + +`docs/analysis/chip-model-v3.md` section 2 prices the on-die-cache recompute chip at 50 T op/s: class v3 (x8) costs +it 1,198,080 integer ops per hash (72 mixer applications x 128 items x about 130 ops), 41.7 MH/s, 0.31x the 5090's +136.1 MH/s bare, and 0.92x with "the 3x fixed-function factor (approximate, from memory: 2x to 5x is the usual +credit for a pipeline with no scheduling or divergence)". That credit is the mixer's fixed shape: the chip unrolls +the 72 applications into a wired pipeline with the day's constants baked in, no instruction fetch, no register +file, no operand muxes. RandomX's answer (`vendor/RandomX/src/superscalar.cpp` is not in this tree; read on +6 October 2026 from the upstream repository at commit 7607fb2 into the session scratchpad; the design argument is +`doc/design.md`, history section 2.4) is SuperscalarHash: the dataset item derivation is itself a random program +drawn from the cache key, 8 programs of about 450 instructions per item, so a light-mode chip "becomes a CPU". +RandomX's generator (`generateSuperscalar`, lines 653 to 850) schedules for a superscalar x86 core: it picks a +decode-buffer configuration per cycle, selects a source register that is ready at the cycle and a destination +that is not the source and was not last written by the same op group (`selectDestination`, line 495: no +"xor r,r2; xor r,r2", no "ror r,C1; ror r,C2", no two multiplies in a row on one register), and then computes the +program's ASIC latency as the longest dependency chain (lines 810 to 824) and sets the address register to the +register with the highest one. The item init is `rl[0] = (itemNumber + 1) * superscalarMul0`, the other seven +registers `rl[0] ^ superscalarAdd_i`, then per cache access: run the program, XOR the mix block in, next address +from the address register (`dataset.cpp` `initDatasetItem`, lines 164 to 190). + +What carries over here and what does not: the per-day program, the acceptance by construction, the dependency +chain and the address register idea carry over; the x86 port scheduling does not (our verifier interprets the +program for 32 items at once and our miners compile it for a GPU, so the schedule that matters is the GPU's), and +the latency bound RandomX relies on (the program's critical path against DRAM) is replaced by ours: the 8 +dependent cache reads per item, which are untouched. + +## 2. The design + +### 2.1 The draw + +One SplitMix64 stream seeded with `K[0] | (K[1] << 32)` (the day key, spec 1.8.1), the 40 draws of 1.8.4 +(`ROT`, `MUL`, `RC`) first, exactly as today (the item init `s[8 + i] = t * MUL[i] + RC[i]` still uses them), then +the program: `DERIVE_PROGRAMS = 9` round programs (one before each of the 8 cache reads, one after the last) of +`derive_len` instructions each, four draws per instruction in a fixed order: + +| Draw | Range | Sets | +|---|---|---| +| `below(100)` | op roll | the form, by the weight table of 2.2 (cumulative) | +| `below(15)` | destination roll | `d`: the 15 registers other than the chain `c`, in ascending order (roll >= c adds one) | +| `below(14)` | third-register roll | `b`: the 14 registers other than `d` and `c`, ascending (two skips); used by `andx` and `orx`, consumed by every form | +| `next()` | the immediate | `k = 1 + (low32 mod 31)` for the rotate forms; `imm = low32` for `addc`, `xorc`; `imm = low32 OR 1` for `mulc`, `mulc2`; consumed by every form | + +The chain register `c` is `s[0]` (the address word) at the start of each round program and the destination of the +previous instruction after it. Every instruction reads `c` and writes `d != c`; the next instruction's chain is +`d`. So no two instructions of a program can run in parallel (the "every instruction consumes the newest result" +rule of the brief, SuperscalarHash's chain made strict), and no two consecutive instructions write one register, +which is what removes the mergeable pairs SuperscalarHash's `selectDestination` guards against. Four draws per +instruction whether the form uses them or not, so the stream position of every draw is fixed by its index and a +future change to one form's draw changes no other draw (the rule 1.13.1 follows for `epoch_len`). A rejected +candidate (2.4) is followed by the next: the stream continues, `attempt + 1`, as the program generator of 1.4.6. + +Source: `igneum-pow/src/derive.rs` (`DeriveProgram::draw_candidate`, `draw`), `memhard.rs` (`MixParams::with_shape`). + +### 2.2 The instruction set: twelve two-register forms, fixed at genesis + +`c` the chain, `d` the destination, `b` the third register, `k` in 1..31, `i` a 32-bit constant (odd for the +multiplies). All arithmetic modulo 2^32, no division, no float, no data-dependent branch. Every form is a bijection +on the 16-word state (the old `d` enters through `+=`, `-=`, `^=`, an odd multiply, or a rotation of itself; `c` +and `b` are not written), so a program loses no entropy, the property `M_r` has. + +| Form | Semantics | Weight (percent) | GPU ops | Chip ops | Multiply | +|---|---|---|---|---|---| +| `add` | `d += c` | 14 | 1 | 1 | | +| `sub` | `d -= c` | 10 | 1 | 1 | | +| `xor` | `d ^= c` | 14 | 1 | 1 | | +| `mul` | `d *= (c OR 1)` | 10 | 2 | 1 (the OR is a wire) | yes | +| `rot` | `d = rotl(d, k) + c` | 10 | 2 | 2 | | +| `xrot` | `d = rotl(d ^ c, k)` | 10 | 2 | 2 | | +| `addc` | `d += c + i` | 6 | 2 | 2 | | +| `xorc` | `d ^= c ^ i` | 6 | 2 | 2 | | +| `mulc` | `d = (d ^ c) * i` (the per-word form of `M_r`, the chain in place of the round constant) | 8 | 2 | 2 | yes | +| `mulc2` | `d = d * i + c` | 4 | 2 | 2 | yes | +| `andx` | `d ^= (c AND b)` | 4 | 2 | 2 | | +| `orx` | `d += (c OR b)` | 4 | 2 | 2 | | + +Mean 1.62 GPU ops and 1.52 chip ops per instruction, 22% multiplies. `and` and `or` enter only as `andx` and +`orx` (a destructive `d &= c` would lose bits; the XOR and add of a conjunction keep `d` invertible). The forms are +the brief's set (add, sub, mul-lo, xor, rotate by 1..31, and, or, the ARX-multiply forms of `M_r`); `mulhi` is in +the lottery hash's families and bit-exact on the three vendors, and is left out of the derivation on purpose so +every form is one that the three compilers lower to a single integer instruction (section 3.3). + +### 2.3 Length and the floors: the x8-equivalent op count + +The coordinator's rule for item 2: the total op count per item equals or exceeds today's x8 count, so the chip's +budget row does not fall. The x8 mixer counted from the code (`memhard::mixer`): 16 x (xor, add, mul) + 8 quarter +rounds x 12 = 144 ops as written, 128 with the `RC[i] + rk` adds hoisted as constants (the chip and every compiler +do that), 16 multiplies; 72 applications per item = 10,368 ops as written, 9,216 hoisted, 1,152 multiplies +(`chip-model-v3.md` section 1 prices 130 per application from the spec text; the item 3 worker counted the same +144 / 128, coordinator's note of 6 October). The floors are those three. `derive_len = 736` gives 6,624 +instructions per item, expected 10,731 GPU ops, 10,068 chip ops and 1,457 multiplies (the genesis day draws +10,659 / 9,992 / 1,461; the devnet day 10,701 / 10,083 / 1,362), 7 to 22 standard deviations above the floors, so a +rejection on a floor is a rare event and the test exists for the degenerate class. The class name is `dr736`; the +half-length `dr368` (the x4-equivalent) is measured beside it as the fallback with its floors scaled. + +### 2.4 The acceptance test + +`DeriveProgram::check`, on every candidate; a rejection draws the next attempt from the stream: + +| Test | Rejects | Expected rate at 736 | +|---|---|---| +| every register written in every round program | a register no instruction of a round program writes (its init word would never enter the chain within that round) | 16 x 9 x (14/15)^736 = under 10^-20 | +| at least 8 distinct rotation amounts across the item's programs | all rotations equal (the brief's degenerate draw; the mixer's "ROT draw of eight equal values is possible and untested", spec 1.8.4) | about 1,300 rotate forms over 31 values: never | +| chip ops >= 9,216, GPU ops >= 10,368, multiplies >= 1,152 per item (scaled to the length) | an op draw under the x8 count | 22, 9 and 9 standard deviations below the mean: never | +| structural (asserted, hold by construction): `d != c`, `b` distinct from both, `k` in 1..31, odd multiplier constants | a generator bug | n/a | + +The generator panics after 64 rejected candidates in a row (`MAX_ATTEMPTS`), which the rates above put beyond +any day the chain will see; the panic is the right failure (a node that cannot derive the day's program cannot +verify, and must say so rather than guess). The weights are fixed at genesis; only the order, the registers and +the constants are drawn, so the family mix of a program cannot be steered by the draw. + +### 2.5 The item, with the program in place + +Spec 1.8.5 under the derivation class (`derive_len` nonzero, `mixer_mult` unused): + +``` +s[i] = K[i] for i in 0..7 +s[8 + i] = t * MUL[i] + RC[i] for i in 0..7 +for r in 0..7: + s = P_r(s) round program r, the chain starting at s[0] + a = s[0] AND (2^(C - 4) - 1) cache line index, as today + s[i] = s[i] XOR cache[line a][i] for i in 0..15 +s = P_8(s) +item(t) = s +``` + +The 8 dependent cache reads per item are exactly today's: the address of read `r` is `s[0]` after program `r`, and +`s[0]` depends on every earlier read through the chain (every round program writes every register, 2.4, and the +XOR of the line into all 16 words feeds the next program). The verifier's latency part (8 dependent misses per +item, overlapped across the up to 32 items of a load, spec 1.11) is unchanged, which the measurement shows: the +difference against x8 is the ALU part only (section 5.1). + +## 3. The prototype + +### 3.1 Where it lives + +| Item | Where | +|---|---| +| `DOp`, `DInstr`, `DeriveProgram` (draw, check, counts, fingerprint), the SoA interpreter `run_round` (pair dispatch), the scalar reference `run_round_scalar`, the text forms `instr_text` and `instr_line` | `igneum-pow/src/derive.rs` | +| `Shape::derive_len`, `Shape::is_derived`, `MixParams::derive` (drawn after the 40 mixer draws), `derive_items` dispatching to `derive_items_program` | `igneum-pow/src/memhard.rs` | +| `LoadClass::derive_len`, `LoadClass::DR736`, `with_derive`, parse and name `dr`, the program id (`derive/` + the length) | `igneum-pow/src/generator.rs` | +| `mh_round_0..8` and the program-driven `mh_item` in memhard.h, memhard.metal and kernel.cl; `IGNEUM_DERIVE_*` in program.h; `derive_len`, the op mix, the floors' counts and the nine programs (one line per instruction) in program.json | `igneum-pow/src/emit.rs` | +| `--class dr736` (or any `dr`) on every command; the bench prints the program's counts | `igneum-pow/src/main.rs` | +| `examples/derive_perf.rs`: the interpreter's cost per instruction per batch, drawn program against uniform programs | `igneum-pow/examples/` | +| Packs `dr736-genesis` (seed igneum-genesis, day 2026-10-03, program id 72c1d8048aef9542, program fingerprint 463535d01511350d) and `dr736-devnet-epoch0` (the devnet epoch 0 and day seeds, 7f4a5ca0a3637820, 771868df4e64d6ab); generator 2 with the class in the id, the x4-record shape, not a class v3 pack | `proto-cuda/packs-ca3-derive/` | +| Tests: `src/derive.rs` (5), `tests/derive.rs` (7: by hand on a small cache, batches, v2 and v3 untouched, the stream and the class, determinism and the pack text, stats beside x8, the text forms against the scalar reference, the word path) | `igneum-pow` | +| The PC 2 job | `relay/playbooks/ca3-derive-pc2.ps1` (section 5.4) | + +### 3.2 The verifier without a JIT: the word-major interpreter + +The verifier derives up to 32 distinct items per load (one per lane of the unit, `MemhardCpu::fetch`). The +interpreter keeps the 32 item states word-major (`st[reg][lane]`, 2 KiB) and runs each instruction across the +whole batch in one straight loop the compiler vectorises (NEON `add.4s`, `mul.4s`, `ushl.4s` and so on: 1,180 +such instructions in the example binary), so the dispatch is paid once per instruction per batch, not per item; +the cache reads of the batch are issued together after each round program, as the fixed-mixer loop does, so the 8 +dependent misses of independent items overlap. The dispatch is on PAIRS of instructions (144 arms, one indirect +branch per two instructions): a drawn op sequence is random, the predictor misses most dispatches, and pairing +halves the misses per instruction. Measured with `examples/derive_perf.rs` (a functional run, load average 3.9 to +4.9): 10.7 ns per instruction per batch cold, 7.18 warm with single dispatch, 4.98 with pair dispatch; a uniform +program of one form (predictable dispatch) 3.4 to 4.3 ns, so the body is about 3.5 ns and the remaining dispatch +cost about 1.5 ns. 6,624 x 4.98 ns x 128 batches = 4.2 ms per unit of interpreter time; the measured 4.88 ms +includes the latency part and the transposes. + +### 3.3 Bit-exactness on three vendors, by construction + +Each form is one C statement on `uint` with `+`, `-`, `^`, `*`, `|`, `&` and the memhard core's `mh_rotl` (a +shift pair, `n` in 1..31 at every call site), the same text in Metal, CUDA C and OpenCL C, every operand a 32-bit +unsigned integer: the same argument as spec 1.14 for the lottery hash's families, which have run bit-exact on the +three vendors since 4 October. The program is emitted as nine functions of straight-line statements (196 KB of +memhard.h per day); NVRTC, the Metal compiler and the OpenCL compilers see no loop, no branch and no call inside a +round program. Measured: section 5.2 (Metal and Apple OpenCL), 5.4 (CUDA). + +### 3.4 The v2 and v3 paths are untouched + +`Shape::derive_len` is 0 and `LoadClass::derive_len` is 0 on `V2`, `MX4`, `MX8` and `V3_CLASS`; `MixParams::derive` +is `None`; `derive_items` takes the fixed-mixer loop as before; the emitter's text for a shape without a program is +unchanged. `cargo test -p igneum-pow` (commit acb96ee): 58 lib, 7 derive, 4 mixer, 19 packs (every pinned pack of +v2 and v3 regenerated and compared byte for byte), 7 scratch, all green. + +## 4. What the chip keeps, and the fallbacks + +### 4.1 The fixed-function allowance after the change + +The chip of `chip-model-v3.md` now has to execute, per item, 6,624 instructions from a 12-form set over a +16-entry register file, with three operand fields and a constant per instruction, in an order and with operands +that change every day. That is a sequencer: an instruction store (6,624 x 9 bytes = 60 KB per day program, in +SRAM beside the cache mirror), a register file with three read ports and one write port, a 32-bit ALU with a +multiplier and a barrel rotator, operand muxes, and a program counter. A GPU streaming multiprocessor is the same +machine with a wider register file and a warp scheduler. What the chip keeps over the GPU: no warp scheduler, no +operand collector, no instruction cache hierarchy for a 1 MB kernel (the GPU's day program is about 60,000 SASS +instructions per thread; whether the 5090's instruction cache holds it is in the build time of 5.4), no graphics +or float units idle on the die, and the day's constants folded into the instruction store. What it loses: the +wired pipeline (the mixer's 72 applications as 72 stages with the constants in the wires, no fetch, no register +file, no crossbar), which is the thing the 3x credit paid for. The chain rule adds a second loss: with no +intra-item parallelism a single engine finishes one instruction per cycle at best and its multiplies serialise +unless it interleaves items, which costs a register file per item in flight (RandomX's light-mode argument, +history 2.4: a chip paying "760 cycles and 1,240 multiplies per item"). ProgPoW claimed 1.1x to 1.2x for exactly +this kind of chip ("conventional compute chips gain little on ProgPoW", Bob Rao's hardware audit, history 2.4, +[S70]; EIP-1057's own claim 1.1x to 1.2x, [S67]). So the allowance this document carries is 1.2x (ProgPoW's +claimed range, cited) with 1.5x as the cautious upper bound (approximate, mine), against the 3x of the fixed shape +(approximate, from memory, M16). Section 7 prices all of 1.0x, 1.2x, 1.5x, 2x and 3x. + +### 4.2 What it does not change + +The partial-store chip (item 1): a chip that stores the dataset and never derives items pays nothing for the +program; item 1's rows stand on their own. The cryptanalysis question (item 3) changes shape: instead of one +fixed `M_r` to attack, the attacker gets a fresh random ARX program every day, which is RandomX's bet and is +untested here; the day's programs can be audited by the same tools as random ARX ciphers, and the acceptance test +is the place to add a structural rule if one is found. The era draws and the cache growth are untouched. + +### 4.3 The JIT, named as the fallback with its risk + +A per-day JIT for the verifier (emit NEON or AVX2 code for the 32-lane batch, the chain row kept in registers +across instructions since `c` is always the row just written) would remove the 1.5 ns dispatch and about a third +of the 3.5 ns body (the chain row's loads), about 2.5 ms per unit on this core, the x8 figure. Its risk: a code +generator in the consensus path on two architectures (arm64, x86-64) whose output must equal the interpreter's +bit for bit, writable-executable memory in a node and in every pool verifier, a new attack surface the history's +lesson 9 says to audit before launch, and a second implementation per platform to keep in lockstep. Out of scope +for this item; it is the route to 736 under the gate on a laptop core if the measurement of O-1.14 confirms the +approximate row, and `dr368` is the route that needs no JIT. + +## 5. Measurements + +All under the locks of the brief; every row says its lock and the load average. Machine: Apple M5 Max, 64 GiB, +Darwin 25.6.0. Commit acb96ee (the code and the packs), packbench built from this worktree. + +### 5.1 The verifier per unit, one M5 Max core (`with-lock.sh measure`, one session, 07:42:20 to 07:42:33 UTC, load average 4.91 / 4.53 / 5.34 at the start, 4.46 / 4.44 / 5.30 at the end) + +Script `measure-ca3-derive.sh` (session scratchpad): `igneum-pow bench --seed igneum-genesis --day 2026-10-03 +--class --warps 50`, two rounds, then the devnet seeds (`--epoch-hex edc4fa84...fb07 --day-hex +69676e65756d2d6461792ffa50000000000000`) and `dr368` once. + +| Class | Verifier, ms per unit, avg of 50 (round 1 / round 2) | Worst cold unit of three | Against v2 | Against x8 | Items per unit | Ops per item (GPU / chip / multiplies) | +|---|---|---|---|---|---|---| +| v2 (igneum-genesis) | 0.598 / 0.594 | 0.697 | 1 | | 4,096 | 1,296 / 1,152 / 144 (9 x 144, hoisted 9 x 128) | +| x8, mx8 (class v3) | 2.061 / 2.063 | 2.179 | 3.46x | 1 | 4,096 | 10,368 / 9,216 / 1,152 | +| **dr736** | **4.875 / 4.944** | **5.241** | 8.2x | 2.37x | 4,096 | 10,659 / 9,992 / 1,461 | +| x8, the devnet seeds | 2.078 | 2.155 | | | 4,095 to 4,096 | | +| dr736, the devnet seeds | 4.872 | 5.241 | | 2.34x | 4,096 | 10,701 / 10,083 / 1,362 | +| dr368 (the x4-equivalent fallback) | 2.692 | 2.898 | 4.5x | 1.31x | 4,096 | 5,350 / 5,004 / 752 | + +Reading: the v2 row reads 0.59 to 0.60, the quiet readwidth night's 0.604 to 0.626 and 6.4a's 0.607 to 0.611, so +this session is a quiet-core figure and no scaling applies. At the same chip-op count as x8 (plus 8%), the +interpreter costs 2.4x what the compiled mixer costs: 4.98 ns per instruction per batch (3.2), of which about +1.5 ns is dispatch and 3.5 ns the vector body, against the mixer's compiled straight-line loop over the same +batch. The latency part is the same in every row (the 8 dependent misses per item; the dr368 row at half the +instructions saves 2.2 ms of the 4.9, which puts the latency-and-transpose share at about 0.5 ms). The 10 ms gate +keeps 5.1 ms (worst cold 4.76 ms) at 736 on this core and 7.3 ms at 368. + +### 5.1a Verification throughput per tier (the form of mixer-x4.md 6.5) + +| Figure | x8 (this session) | dr736 | dr368 | Note | +|---|---|---|---|---| +| ms per unit, quiet M5 Max core (measured, this session) | 2.06 | 4.88 | 2.69 | | +| ms per unit, 2019-class laptop core (2.5x, approximate, O-1.14 unmeasured) | 5.2 | 12.2 | 6.7 | the figure that fixes the gate is a measurement, not this row | +| Shares per second per core (quiet M5 Max) | 485 | 205 | 372 | | +| Cores for a 22,000-member pool at one share per member per 10 s (2,200 shares per second) | 4.5 | 10.7 | 5.9 | a pool verifying two units at once would halve the dispatch share (3.2); a 64-lane interpreter is a follow-up, unmeasured | +| Node: worst cold single unit (per block) | 2.2 ms | 5.2 ms | 2.9 ms | a block's verification stays under the 1 s block time by 190x | +| IBD over 108,000 headers on one core | 3.7 min | 8.8 min | 4.8 min | laptop (approximate): 9.4 / 22 / 12 min | +| Margin left under the 10 ms gate (worst cold, this core) | 7.8 ms | 4.8 ms | 7.1 ms | on the laptop row (approximate): 4.8 / none (over by 2.2) / 3.3 ms | + +Consequences per tier: every miner tier is untouched by the verifier (the miner never runs it); a pool operator +pays 2.4x the cores at 736 (11 cores for a 22,000-member pool against 4.5) or 1.3x at 368; a node on any 2026 core +verifies a block in 5 ms; a node on a 2019-class laptop core is the open question (O-1.14), and at 736 the +approximate row says it misses the gate, so 736 does not go genesis-live on an approximation, and 368 passes it. + +### 5.2 Bit-exactness on the Mac (`with-lock.sh run`, 08:38 to 08:41 local) + +`packbench --pack --batches 1 --batch-log2 24 --group 256` (Metal, built from this worktree) and +`igneum-bench-cl-dr736-genesis --bench-pack --pack --batches 1 --batch-log2 24` (Apple OpenCL, `proto-opencl/ +build.sh` on the pack through a temporary link). Vectors are the Rust interpreter's. + +| Pack | Harness | Cache FNV-1a 64 | Dataset head, word [MASK], 64 samples | Vectors | Fingerprint 2^24 | Compile | 1 GiB build, GPU ms (run lock, indicative) | +|---|---|---|---|---|---|---|---| +| dr736-genesis | Metal | 48c4f5bf24166b2e PASS | head and last PASS (packbench checks no samples) | 3/3 standalone, 3/3 in batch | 50e3eaa779da4f1e | 784 ms (276 on the second process, 1 ms once the shader cache has it) | 38.2 / 38.3 | +| dr736-genesis | Apple OpenCL | PASS (head, last line, FNV) | head, word [268435455], 64 samples PASS | 96 of 96 lanes | 50e3eaa779da4f1e | (in the 385 ms prepare) | 57 ms wall | +| dr736-devnet-epoch0 | Metal | 448274a57f508cbc PASS | PASS | 3/3, 3/3 | 9553f6d5c667205a | 763 ms | 37.4 | + +Reading: the Rust interpreter, Metal and Apple OpenCL agree on the derived dataset (head, word [MASK], the 64 +samples through OpenCL), on every vector lane and on the 2^24-output fingerprint of dr736-genesis across both +compilers; the devnet-seed pack agrees on Metal. The Apple OpenCL compile of a 6,624-statement item function +is inside a 385 ms prepare; the Metal compile is 0.75 to 0.8 s cold per day (the memhard library is the day's, +compiled once a day, not per epoch) and 1 ms from the shader cache. + +### 5.3 The daily build and the hash rate on the M5 Max (`with-lock.sh measure`, the session of 5.1, three rounds) + +`packbench --pack --batches 2 --batch-log2 22 --group 256`, mx8-genesis then dr736-genesis, three rounds. + +| Pack | Compile (round 1 / 2 / 3) | 1 GiB build, GPU ms (round 1 / 2 / 3) | MH/s GPU (round 1 / 2 / 3) | Vectors, self-tests | +|---|---|---|---|---| +| mx8-genesis (class v3, the control) | 80 / 1 / 1 ms | 31.3 / 22.1 / 22.1 | 27.155 / 27.076 / 27.123 | 3/3 + 3/3, PASS | +| dr736-genesis | 751 / 1 / 1 ms | 28.9 / 29.0 / 29.1 | 27.125 / 27.129 / 27.063 | 3/3 + 3/3, PASS | + +Reading: the build is 29 ms against 22 (+32%, +7 ms): the Mac's build was latency-bound at x1, x4 and x8 (21 to +22 ms at every multiplier, mixer-x4.md 6.4) and the serial chain per thread now shows (no intra-item ILP for the +compiler to schedule), still 34x under the 1 s bar. The hash rate is the x8 rate within 0.3% (27.06 to 27.13 +against 27.08 to 27.16), as it must be: the hash kernel only loads. Consequences per tier: a daily build of 29 ms +on Apple silicon costs nothing to any tier; the 5090's figure is section 5.4, the 9070 XT's is OWED (PC 1 not +released today; its x8 build was 72 to 77 ms and arithmetic-bound at none of x1, x4, x8, so the chain's cost there +is the open number); the integrated tier is the one to watch (5.5). + +### 5.4 RTX 5090, PC 2 (one job, `relay/playbooks/ca3-derive-pc2.ps1`) + +PENDING at the time of writing: the job waits for `/tmp/igneum-devnet/pc2-ca3.clear` (the proving agent's +30-minute measurement) and the `pc2-ca3.lock`. The job downloads the packs zip itself (sha256 +aadce58ca54f136d8c41dc15154b3ae107624808e7f061c266df228b200bc676: dr736-genesis, dr736-devnet-epoch0, mx8-genesis, +v2-genesis-mh), runs the installed app's igneum-worker-cuda.exe (NVRTC compiles each pack's own text) with the +NVIDIA card off in the app only under test (its key from settings.json), `--check` for the `nvrtc .. cache .. +dataset .. ms` line and the self-test, `--bench` at 2^24 for the fingerprint and the rate, block-warps 1 and 8. +The rows land in the bench-log entry when the closing report is read. + +### 5.5 The build per tier, with the integrated tier + +| Card | Build at x8 | Build with the day program | Source | +|---|---|---|---| +| M5 Max, Metal | 22.1 ms | 29.0 ms (+32%) | 5.3, measure lock | +| RTX 5090, CUDA | 23 ms | section 5.4 | the PC 2 job | +| RX 9070 XT, OpenCL | 72 to 77 ms | OWED (PC 1) | | +| Radeon integrated gfx1036 (PC 2), OpenCL, per prepare | about 55 to 94 s (approximate, mixer-x4.md 6.5: the iGPU's build is arithmetic-bound at x1 already, scaled x8 from 6.9 / 9.4 / 11.7 s) | about the same count of ops at a lower ILP: 55 to 120 s (approximate, unmeasured) | `docs/plans/epoch-length.md` 6.1 iGPU rows | +| gfx1036 beside WSL build jobs (PC 1) | about 7 to 17 min (approximate) | the same or worse (approximate) | epoch-length.md 6.1 | +| 8 GB-class discrete card (not owned, about a tenth of the 5090, approximate) | about 1 s | about 1 to 1.3 s (approximate) | scaled | + +Consequences: nothing changes for a discrete card of any size on any vendor (the build is under a second), the +Mac row measured; the integrated tier already misses the per-prepare rule at x8 and needs the per-day dataset +reuse in the workers (0.3.12) or a restart per epoch, and the day program makes that need the same, not larger in +kind; the per-day compile of the item function (0.75 s Metal; NVRTC on the 5090 in 5.4) lands once a day in the +worker's day-cache build, not per epoch, unless the hash kernel's compile includes memhard.h, which on the CUDA +worker it does (kernel_bound.cu includes it, and the variant race compiles 17 variants): the 5.4 job's nvrtc line +is the number for that, and if it is large the fix is to compile the item function once per day into its own +module. + +## 6. PROPOSED spec text for 1.13.2: reserve entry R0, `derive` (the per-day item-derivation program) + +Not written into `docs/spec`; it lives here until the project lead's word. Named R0, ahead of R1 (mm8), because the reserve +is to be ordered by chip-unfriendliness (counter-asic-3.md item 6; mm8 last) and a derivation program is the most +chip-unfriendly entry the reserve can hold: it removes the fixed-function allowance of the recompute chip rather +than adding a family that chip can license. + +> Reserve entry R0, `derive` (the per-day item-derivation program). Semantics: section 1.8.5 under +> `derive_len = 736`: the nine mixer slots of the item derivation (one before each of the 8 cache reads, one after +> the last) each run a straight-line program of 736 instructions drawn from the day key stream of 1.8.4 after its +> 40 draws, four draws per instruction (`below(100)` the form, `below(15)` the destination among the registers +> other than the chain, `below(14)` the third register among those other than the destination and the chain, +> `next()` the immediate: `1 + low32 mod 31` for the rotate forms, `low32` for `addc` and `xorc`, `low32 OR 1` for +> `mulc` and `mulc2`); the chain is `s[0]` at the start of each program and the previous destination after; the +> twelve forms and weights of `docs/plans/counter-asic-3-derivation.md` section 2.2, fixed; every form a +> bijection on the state; the 8 dependent cache reads, the mixer constants of the item init, the cache and the +> dataset mapping of 1.8.5 unchanged; `mixer_mult` unused under R0. Acceptance test, per candidate, the next +> attempt on rejection (the stream continues): every register written in every round program; at least 8 distinct +> rotation amounts; per item at least 9,216 operations with constants folded, 10,368 as written and 1,152 +> multiplies (the x8 mixer's counts from `memhard::mixer`: 72 x 128, 72 x 144, 72 x 16; the floors scale with the +> length). Edge vectors, each a hand-built item run on every vendor: item 0, item 1, item 2^28 - 1 and item 2^32 - 1 +> of the genesis day on a 2^16-word cache; a program whose first instruction is each of the twelve forms with +> `d = 15`, `c = 0`, `b = 14`, `k = 31`, `i = 0xffffffff` (odd for the multiplies) on the all-ones state and on the +> all-zero state (the wrap of every form); the day of the pinned pack `dr736-genesis` (program fingerprint +> 463535d01511350d, dataset head `vectors.json`, 2^24 fingerprint 50e3eaa779da4f1e) and of `dr736-devnet-epoch0` +> (771868df4e64d6ab, 9553f6d5c667205a). Unlock: at the start of era n = 2 (DAA 31,104,000), or earlier by the 90% +> signalling path of section 5.7, or at genesis if the verifier on a 2019-class core (O-1.14) reads under 10 ms per +> unit at 736, else at the length that does (368 measured at 2.69 ms on an M5 Max core); never by a release. The +> verifier procedure: the word-major interpreter of `igneum-pow/src/derive.rs` (32 item states per batch, pair +> dispatch), 4.88 ms per unit on one M5 Max core (section 5.1), no JIT; a JIT is the named fallback (4.3). Vendor +> paths: none needed; every form is a single 32-bit integer statement on all three compilers (3.3). + +## 7. The chip model row + +Written into `docs/analysis/chip-model-v3.md` section 6 in the form of its section 2. Ops per hash: 128 items x +9,992 chip ops (the genesis day's draw; the floor 9,216) = 1,278,976 (floor 1,179,648); chip rate at 50 T op/s = +39.1 MH/s (floor 42.4); bare against 136.1 MH/s = 0.287x (floor 0.31x, the x8 row's figure, as the floor is x8's +count). The allowance rows: 1.0x 0.29x; 1.2x (ProgPoW's claim) 0.34x; 1.5x (cautious upper bound, approximate) +0.43x; 2x 0.57x; 3x (the fixed shape's, which no longer applies) 0.86x. Equal silicon (x 0.829): 0.24 / 0.29 / +0.36 / 0.48 / 0.71. The x8 row read 0.92x at 3x and 0.76x at equal silicon; at the same 0.31x bare the day program +takes the chip from 0.92x to 0.34x to 0.43x, which is the margin the item was for. dr368 (the fallback): 639,488 +chip ops per hash, 78.2 MH/s, 0.57x bare, 0.69x at 1.2x, 0.86x at 1.5x: under 1x, with less margin than x8 had at +3x and more than x4 had (1.84x). + +## 8. What is unverified or owed + +| Item | State | +|---|---| +| RTX 5090: the daily build, NVRTC compile per pack, the self-test and 2^24 fingerprints, the rate | PENDING the PC 2 job (section 5.4); the playbook and the zip are ready; the clear file is polled every 60 s | +| RX 9070 XT (PC 1) | OWED: PC 1 is the project lead's desk today; the same job shape runs there with `igneum-worker-opencl.exe --bench-pack` when released | +| The 2019-class laptop core (O-1.14) | unmeasured; the approximate row decides against 736 at genesis and for 368, and a measurement replaces it | +| Cryptanalysis of random ARX programs | none; item 3's brief should name the day program as a target beside `M_r` | +| The integrated tier's build with the day program | approximate (5.5); the gfx1036 measurement is a PC 2 OpenCL job, not run today (the one PC 2 job carries the 5090) | +| A 64-lane interpreter for pools (two units per batch) | unimplemented; it would cut the dispatch share for pool verifiers only | +| The NVRTC cost of memhard.h inside the per-epoch hash kernel compile and the variant race | the PC 2 job's nvrtc line; the fix, if large, is one module per day for the item function | diff --git a/igneum-pow/examples/derive_perf.rs b/igneum-pow/examples/derive_perf.rs new file mode 100644 index 00000000..77561a7c --- /dev/null +++ b/igneum-pow/examples/derive_perf.rs @@ -0,0 +1,51 @@ +//! The derivation interpreter's cost per instruction per batch (Counter ASIC 3.0 item 2): the day's program against +//! a uniform program of the same length (every instruction one form, so the dispatch is predictable), which splits +//! the per-instruction cost into the dispatch and the vector body. A functional tool, not a bench-log number on its +//! own: run it under the measure lock and state the load average when a figure is recorded. +//! cargo run --release --example derive_perf [len] [reps] +use igneum_pow::derive::{run_round, DInstr, DOp, DeriveProgram, SoaState, DERIVE_LEN_X8, DERIVE_REGS, SOA_LANES}; +use igneum_pow::seed::SplitMix64; +use std::time::Instant; + +fn time(prog: &DeriveProgram, reps: usize) -> (f64, u64) { + let mut st: SoaState = [[0u32; SOA_LANES]; DERIVE_REGS]; + let mut x = SplitMix64::new(5); + for r in 0..DERIVE_REGS { + for k in 0..SOA_LANES { + st[r][k] = x.next() as u32; + } + } + let t = Instant::now(); + for _ in 0..reps { + for p in &prog.rounds { + run_round(p, &mut st); + } + } + let ns = t.elapsed().as_nanos() as f64 / (reps as f64 * prog.instr_count() as f64); + (ns, st[0][0] as u64 ^ st[15][31] as u64) +} + +fn uniform(len: u32, op: DOp) -> DeriveProgram { + let mut p = DeriveProgram::draw_candidate(&mut SplitMix64::new(1), len, 0); + for ins in p.rounds.iter_mut().flatten() { + *ins = DInstr { op, rot: if op.has_rot() { 13 } else { 0 }, imm: if op.has_imm() { 0x9e37_79b9 } else { 0 }, ..*ins }; + } + p +} + +fn main() { + let a: Vec = std::env::args().collect(); + let len: u32 = a.get(1).and_then(|s| s.parse().ok()).unwrap_or(DERIVE_LEN_X8); + let reps: usize = a.get(2).and_then(|s| s.parse().ok()).unwrap_or(400); + let real = DeriveProgram::draw(&mut SplitMix64::new(0x3067619f3c269176), len); + let per_item = real.instr_count(); + println!("len {len}: {per_item} instructions per item, {} GPU ops, {} chip ops, {} multiplies; batch of {SOA_LANES} lanes, {reps} reps", real.gpu_ops(), real.chip_ops(), real.muls()); + for round in 0..2 { + let (ns, sink) = time(&real, reps); + println!("round {round}: drawn program {ns:.2} ns per instruction per batch ({:.1} us per batch, {:.2} ms per 128 batches) sink {sink:x}", ns * per_item as f64 / 1e3, ns * per_item as f64 * 128.0 / 1e6); + for op in [DOp::Add, DOp::Mul, DOp::XRot, DOp::MulC, DOp::AndX] { + let (ns, sink) = time(&uniform(len, op), reps); + println!("round {round}: uniform {:5} {ns:.2} ns per instruction per batch sink {sink:x}", op.name()); + } + } +} diff --git a/igneum-pow/src/derive.rs b/igneum-pow/src/derive.rs new file mode 100644 index 00000000..7e8c5021 --- /dev/null +++ b/igneum-pow/src/derive.rs @@ -0,0 +1,978 @@ +//! The per-day item-derivation program (Counter ASIC 3.0 item 2, `docs/plans/counter-asic-3-derivation.md`): +//! RandomX's SuperscalarHash idea (`vendor/RandomX/src/superscalar.cpp`, read 6 October 2026 at commit 7607fb2) +//! rebuilt for a 16-word item on a GPU. In place of the fixed-shape mixer `M_r` of spec 01 section 1.8.4, each of +//! the nine mixer slots of an item (one before each of the 8 dependent cache reads, one after the last) runs a +//! straight-line program of [`DERIVE_LEN`] instructions drawn once a day from the day key stream, from a fixed +//! set of twelve two-register forms. The 8 dependent cache reads per item are untouched. +//! +//! Rules of the draw (the dependency chain of SuperscalarHash, made strict): +//! * every instruction reads the chain register `c`, the register the previous instruction wrote (`s[0]`, the +//! address word, at the start of each round program), and writes a register `d != c`, which becomes the chain; +//! so no two instructions of a program can run in parallel, and no two consecutive instructions write one +//! register (the "ror r,C1; ror r,C2" and "xor r,r2; xor r,r2" merges of SuperscalarHash's `selectDestination` +//! cannot arise); +//! * every form is a bijection on the 16-word state (the old `d` enters through `+=`, `-=`, `^=`, an odd multiply, +//! or a rotation of itself), so a program loses no entropy, the property `M_r` has; +//! * the forms are integer only, modulo 2^32, with rotations by 1..31: bit-exact on Metal, CUDA and OpenCL by the +//! same argument as the lottery hash's families (spec 01 section 1.14); no division, no float, no branch; +//! * four draws per instruction in a fixed order, so the stream position of every draw is fixed by the index. +//! +//! The acceptance test ([`DeriveProgram::check`]) rejects a degenerate draw and the next attempt is drawn from the +//! continuation of the stream, the rule the program generator uses (spec 01 section 1.4.6). + +use crate::memhard::ITEM_ROUNDS; +use crate::seed::SplitMix64; + +/// Registers of the item state (the item is 16 words). +pub const DERIVE_REGS: usize = 16; +/// Round programs per item: one before each cache read and one after the last (`ITEM_ROUNDS + 1`). +pub const DERIVE_PROGRAMS: usize = ITEM_ROUNDS + 1; +/// Instructions per round program for the x8-equivalent operation count (the candidate, class "dr736"): 9 x 736 +/// = 6,624 instructions per item at a mean of 1.62 GPU operations (1.52 chip operations) each, about 10,730 GPU +/// operations, 10,070 chip operations and 1,460 multiplies per item. The x8 mixer, counted from the code +/// (`memhard::mixer`, 16 x (xor, add, mul) + 8 quarter rounds x 12 = 144 operations as written, 128 with the +/// `RC + rk` adds hoisted as constants, 16 multiplies; `chip-model-v3.md` section 1 prices 130 from the spec text): +/// 72 applications = 10,368 as written, 9,216 hoisted, 1,152 multiplies. The floors below are those three. +pub const DERIVE_LEN_X8: u32 = 736; +/// Draws per instruction: the op roll, the destination roll, the second-source roll and the immediate. +pub const DRAWS_PER_INSTR: u64 = 4; +/// The floor of chip operations per item (the x8 mixer with its constants hoisted: 72 x 128). +pub const OPS_FLOOR_X8: u64 = 9_216; +/// The floor of GPU operations per item (the x8 mixer as written: 72 x 144). +pub const GPU_OPS_FLOOR_X8: u64 = 10_368; +/// The floor of multiplies per item (the x8 mixer's 72 x 16). +pub const MULS_FLOOR_X8: u64 = 1_152; +/// Distinct rotation amounts an item's programs must use, at least. +pub const DISTINCT_ROTS_FLOOR: usize = 8; +/// Attempts before the generator gives up (never reached: see [`DeriveProgram::draw`]). +pub const MAX_ATTEMPTS: u32 = 64; + +/// The twelve forms. `c` is the chain register (the previous destination), `d` the destination (`d != c`), `b` a +/// third register (`b != d`, `b != c`), `k` a rotation in 1..31, `i` a 32-bit constant (odd for `MulC`). +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(u8)] +pub enum DOp { + /// `d += c` + Add = 0, + /// `d -= c` + Sub = 1, + /// `d ^= c` + Xor = 2, + /// `d *= (c OR 1)`: the multiply-lo form, odd so it is a bijection on `d` + Mul = 3, + /// `d = rotl(d, k) + c` + Rot = 4, + /// `d = rotl(d ^ c, k)` + XRot = 5, + /// `d += c + i` + AddC = 6, + /// `d ^= c ^ i` + XorC = 7, + /// `d = (d ^ c) * i`, `i` odd: the per-word form of `M_r` with the chain in place of the round constant + MulC = 8, + /// `d = d * i + c`, `i` odd + MulC2 = 9, + /// `d ^= (c AND b)` + AndX = 10, + /// `d += (c OR b)` + OrX = 11, +} + +/// The op weights in percent, in draw order (sum 100). Fixed at genesis; only the order, the registers and the +/// constants are drawn. +pub const DOP_WEIGHTS: [(DOp, u64); 12] = [ + (DOp::Add, 14), + (DOp::Sub, 10), + (DOp::Xor, 14), + (DOp::Mul, 10), + (DOp::Rot, 10), + (DOp::XRot, 10), + (DOp::AddC, 6), + (DOp::XorC, 6), + (DOp::MulC, 8), + (DOp::MulC2, 4), + (DOp::AndX, 4), + (DOp::OrX, 4), +]; + +impl DOp { + pub fn from_u8(v: u8) -> Option { + DOP_WEIGHTS.iter().map(|(o, _)| *o).find(|o| *o as u8 == v) + } + pub fn name(self) -> &'static str { + match self { + DOp::Add => "add", + DOp::Sub => "sub", + DOp::Xor => "xor", + DOp::Mul => "mul", + DOp::Rot => "rot", + DOp::XRot => "xrot", + DOp::AddC => "addc", + DOp::XorC => "xorc", + DOp::MulC => "mulc", + DOp::MulC2 => "mulc2", + DOp::AndX => "andx", + DOp::OrX => "orx", + } + } + /// Integer operations as a GPU executes the form (every `|`, `&`, `+`, `^`, `*`, rotate counts one). + pub fn gpu_ops(self) -> u64 { + match self { + DOp::Add | DOp::Sub | DOp::Xor => 1, + _ => 2, + } + } + /// Integer operations as the chip model counts them (`c OR 1` is a wire on a chip, so `Mul` is one multiply; + /// a constant folded into a chain value is still an add or an xor, so every other two-op form stays two). + pub fn chip_ops(self) -> u64 { + match self { + DOp::Add | DOp::Sub | DOp::Xor | DOp::Mul => 1, + _ => 2, + } + } + pub fn is_mul(self) -> bool { + matches!(self, DOp::Mul | DOp::MulC | DOp::MulC2) + } + pub fn has_rot(self) -> bool { + matches!(self, DOp::Rot | DOp::XRot) + } + pub fn has_third(self) -> bool { + matches!(self, DOp::AndX | DOp::OrX) + } + pub fn has_imm(self) -> bool { + matches!(self, DOp::AddC | DOp::XorC | DOp::MulC | DOp::MulC2) + } + /// The op of a roll in 0..99. + pub fn for_roll(roll: u64) -> DOp { + let mut acc = 0u64; + for (op, w) in DOP_WEIGHTS { + acc += w; + if roll < acc { + return op; + } + } + DOp::OrX + } +} + +/// One instruction. `src` is the chain register (carried so the interpreter and the emitter need no state). +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct DInstr { + pub op: DOp, + pub dst: u8, + pub src: u8, + /// The third register of `AndX` and `OrX`; 0 on every other form (drawn and unused). + pub src2: u8, + /// The rotation 1..31 of `Rot` and `XRot`, else 0. + pub rot: u8, + /// The constant of `AddC`, `XorC` (any), `MulC` and `MulC2` (odd); 0 on every other form. + pub imm: u32, +} + +/// The nine round programs of an item for one day, with the attempt that passed the acceptance test. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DeriveProgram { + pub len: u32, + pub attempt: u32, + pub rounds: Vec>, +} + +/// Why a candidate was rejected. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum DeriveReject { + /// A register no instruction of round program `round` writes. + RegisterNeverWritten { round: usize, reg: u8 }, + /// Fewer than [`DISTINCT_ROTS_FLOOR`] distinct rotation amounts over the item's programs. + RotationsDegenerate { distinct: usize }, + /// Chip operations per item under [`OPS_FLOOR_X8`] scaled to the length. + OpsUnderFloor { ops: u64, floor: u64 }, + /// GPU operations per item under [`GPU_OPS_FLOOR_X8`] scaled to the length. + GpuOpsUnderFloor { ops: u64, floor: u64 }, + /// Multiplies per item under [`MULS_FLOOR_X8`] scaled to the length. + MulsUnderFloor { muls: u64, floor: u64 }, +} + +impl std::fmt::Display for DeriveReject { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + DeriveReject::RegisterNeverWritten { round, reg } => write!(f, "register {reg} never written in round program {round}"), + DeriveReject::RotationsDegenerate { distinct } => write!(f, "only {distinct} distinct rotation amounts"), + DeriveReject::OpsUnderFloor { ops, floor } => write!(f, "{ops} chip operations per item, floor {floor}"), + DeriveReject::GpuOpsUnderFloor { ops, floor } => write!(f, "{ops} GPU operations per item, floor {floor}"), + DeriveReject::MulsUnderFloor { muls, floor } => write!(f, "{muls} multiplies per item, floor {floor}"), + } + } +} + +impl DeriveProgram { + /// Draw one candidate of `len` instructions per round program from `rng` (four draws per instruction). + pub fn draw_candidate(rng: &mut SplitMix64, len: u32, attempt: u32) -> DeriveProgram { + let mut rounds = Vec::with_capacity(DERIVE_PROGRAMS); + for _ in 0..DERIVE_PROGRAMS { + let mut prog = Vec::with_capacity(len as usize); + let mut chain = 0u8; + for _ in 0..len { + let op = DOp::for_roll(rng.below(100)); + // the destination: the 15 registers other than the chain, in ascending order + let d_roll = rng.below((DERIVE_REGS - 1) as u64) as u8; + let dst = if d_roll >= chain { d_roll + 1 } else { d_roll }; + // the third register: the 14 registers other than dst and the chain, in ascending order + let b_roll = rng.below((DERIVE_REGS - 2) as u64) as u8; + let (lo, hi) = if dst < chain { (dst, chain) } else { (chain, dst) }; + let mut b = b_roll; + if b >= lo { + b += 1; + } + if b >= hi { + b += 1; + } + let x = rng.next() as u32; + let mut ins = DInstr { op, dst, src: chain, src2: 0, rot: 0, imm: 0 }; + if op.has_third() { + ins.src2 = b; + } + if op.has_rot() { + ins.rot = 1 + (x % 31) as u8; + } + if op.has_imm() { + ins.imm = if matches!(op, DOp::MulC | DOp::MulC2) { x | 1 } else { x }; + } + prog.push(ins); + chain = dst; + } + rounds.push(prog); + } + DeriveProgram { len, attempt, rounds } + } + + /// Draw the program of a day: candidates from `rng` in turn until one passes [`DeriveProgram::check`]. + /// Panics after [`MAX_ATTEMPTS`] (the floors sit more than 7 standard deviations under the expected counts, so + /// a rejection is a rare event and 64 in a row is not one that happens). + pub fn draw(rng: &mut SplitMix64, len: u32) -> DeriveProgram { + for attempt in 0..MAX_ATTEMPTS { + let p = Self::draw_candidate(rng, len, attempt); + if p.check().is_ok() { + return p; + } + } + panic!("derivation program: {MAX_ATTEMPTS} candidates rejected in a row"); + } + + /// The floors for this length (chip operations, GPU operations, multiplies): the x8 floors scaled by + /// `len / DERIVE_LEN_X8`, so a shorter class, measured as a fallback, has its own proportional floors. + pub fn floors(len: u32) -> (u64, u64, u64) { + let scale = |f: u64| f * len as u64 / DERIVE_LEN_X8 as u64; + (scale(OPS_FLOOR_X8), scale(GPU_OPS_FLOOR_X8), scale(MULS_FLOOR_X8)) + } + + /// The acceptance test: every register written in every round program; at least [`DISTINCT_ROTS_FLOOR`] + /// distinct rotation amounts; chip operations, GPU operations and multiplies per item at or above the floors + /// (the x8 mixer's counts from the code). The structural + /// rules (`dst != src`, the third register distinct, rotations in 1..31, odd multiplier constants) hold by + /// construction and are asserted. + pub fn check(&self) -> Result<(), DeriveReject> { + let mut rots = [false; 32]; + for (r, prog) in self.rounds.iter().enumerate() { + let mut written = [false; DERIVE_REGS]; + let mut chain = 0u8; + for ins in prog { + assert!(ins.src == chain && ins.dst != ins.src && (ins.dst as usize) < DERIVE_REGS, "chain rule"); + if ins.op.has_third() { + assert!(ins.src2 != ins.dst && ins.src2 != ins.src && (ins.src2 as usize) < DERIVE_REGS, "third register"); + } + if ins.op.has_rot() { + assert!((1..=31).contains(&ins.rot), "rotation"); + rots[ins.rot as usize] = true; + } + if matches!(ins.op, DOp::MulC | DOp::MulC2) { + assert!(ins.imm & 1 == 1, "odd multiplier"); + } + written[ins.dst as usize] = true; + chain = ins.dst; + } + if let Some(reg) = written.iter().position(|w| !w) { + return Err(DeriveReject::RegisterNeverWritten { round: r, reg: reg as u8 }); + } + } + let distinct = rots.iter().filter(|r| **r).count(); + if distinct < DISTINCT_ROTS_FLOOR { + return Err(DeriveReject::RotationsDegenerate { distinct }); + } + let (ops_floor, gpu_floor, muls_floor) = Self::floors(self.len); + let ops = self.chip_ops(); + if ops < ops_floor { + return Err(DeriveReject::OpsUnderFloor { ops, floor: ops_floor }); + } + let gpu = self.gpu_ops(); + if gpu < gpu_floor { + return Err(DeriveReject::GpuOpsUnderFloor { ops: gpu, floor: gpu_floor }); + } + let muls = self.muls(); + if muls < muls_floor { + return Err(DeriveReject::MulsUnderFloor { muls, floor: muls_floor }); + } + Ok(()) + } + + pub fn instr_count(&self) -> u64 { + self.rounds.iter().map(|p| p.len() as u64).sum() + } + pub fn gpu_ops(&self) -> u64 { + self.rounds.iter().flatten().map(|i| i.op.gpu_ops()).sum() + } + pub fn chip_ops(&self) -> u64 { + self.rounds.iter().flatten().map(|i| i.op.chip_ops()).sum() + } + pub fn muls(&self) -> u64 { + self.rounds.iter().flatten().filter(|i| i.op.is_mul()).count() as u64 + } + /// Count per op, in [`DOP_WEIGHTS`] order. + pub fn op_counts(&self) -> [u64; 12] { + let mut c = [0u64; 12]; + for i in self.rounds.iter().flatten() { + c[i.op as usize] += 1; + } + c + } + /// "add=887 sub=..." in weight order. + pub fn op_mix(&self) -> String { + let c = self.op_counts(); + DOP_WEIGHTS.iter().map(|(o, _)| format!("{}={}", o.name(), c[*o as usize])).collect::>().join(" ") + } + /// FNV-1a 64 over the instruction stream (op, dst, src, src2, rot, imm as bytes): the program's fingerprint + /// for packs and logs. + pub fn fingerprint(&self) -> u64 { + let mut b = Vec::with_capacity(self.instr_count() as usize * 9); + for i in self.rounds.iter().flatten() { + b.push(i.op as u8); + b.push(i.dst); + b.push(i.src); + b.push(i.src2); + b.push(i.rot); + b.extend_from_slice(&i.imm.to_le_bytes()); + } + crate::seed::fnv1a64(&b) + } +} + +/// Lanes of the SoA interpreter: the verifier derives up to 32 distinct items per load (one per lane of the +/// unit), so each instruction runs across 32 item states at once and the dispatch is paid once per 32 items. +pub const SOA_LANES: usize = 32; + +/// The item states of a batch, word-major: `st[reg][lane]`. +pub type SoaState = [[u32; SOA_LANES]; DERIVE_REGS]; + +#[inline(always)] +fn rotl(x: u32, n: u32) -> u32 { + x.rotate_left(n) +} + +/// The twelve forms over a batch, one function each, every one a straight loop over the lanes the compiler +/// vectorises. The destination row and the source rows are distinct by the chain rule (`dst != src`, and the third +/// register distinct from both: asserted by [`DeriveProgram::check`] and checked here in debug builds), so the +/// rows are addressed through raw pointers rather than copied out of the state. +mod forms { + use super::{rotl, DInstr, SoaState, SOA_LANES}; + #[inline(always)] + pub fn add(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = d.wrapping_add(*c); + } + } + } + #[inline(always)] + pub fn sub(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = d.wrapping_sub(*c); + } + } + } + #[inline(always)] + pub fn xor(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d ^= *c; + } + } + } + #[inline(always)] + pub fn mul(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = d.wrapping_mul(*c | 1); + } + } + } + #[inline(always)] + pub fn rot(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let r = ins.rot as u32; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = rotl(*d, r).wrapping_add(*c); + } + } + } + #[inline(always)] + pub fn xrot(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let r = ins.rot as u32; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = rotl(*d ^ *c, r); + } + } + } + #[inline(always)] + pub fn addc(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let i = ins.imm; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = d.wrapping_add(c.wrapping_add(i)); + } + } + } + #[inline(always)] + pub fn xorc(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let i = ins.imm; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d ^= *c ^ i; + } + } + } + #[inline(always)] + pub fn mulc(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let i = ins.imm; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = (*d ^ *c).wrapping_mul(i); + } + } + } + #[inline(always)] + pub fn mulc2(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src); + let i = ins.imm; + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + + *d = d.wrapping_mul(i).wrapping_add(*c); + } + } + } + #[inline(always)] + pub fn andx(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src && ins.src2 != ins.dst && ins.src2 != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + let bp = st.as_ptr().add(ins.src2 as usize) as *const u32; + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + let b = &*bp.add(k); + *d ^= *c & *b; + } + } + } + #[inline(always)] + pub fn orx(ins: &DInstr, st: &mut SoaState) { + debug_assert!(ins.dst != ins.src && ins.src2 != ins.dst && ins.src2 != ins.src); + + // SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the + // pointers stay inside `st`. + unsafe { + let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32; + let cp = st.as_ptr().add(ins.src as usize) as *const u32; + let bp = st.as_ptr().add(ins.src2 as usize) as *const u32; + for k in 0..SOA_LANES { + let d = &mut *dp.add(k); + let c = &*cp.add(k); + let b = &*bp.add(k); + *d = d.wrapping_add(*c | *b); + } + } + } +} + +/// One instruction over the batch (the single dispatch; [`run_round`] dispatches on pairs). +#[inline(always)] +pub fn run_instr(ins: &DInstr, st: &mut SoaState) { + match ins.op { + DOp::Add => forms::add(ins, st), + DOp::Sub => forms::sub(ins, st), + DOp::Xor => forms::xor(ins, st), + DOp::Mul => forms::mul(ins, st), + DOp::Rot => forms::rot(ins, st), + DOp::XRot => forms::xrot(ins, st), + DOp::AddC => forms::addc(ins, st), + DOp::XorC => forms::xorc(ins, st), + DOp::MulC => forms::mulc(ins, st), + DOp::MulC2 => forms::mulc2(ins, st), + DOp::AndX => forms::andx(ins, st), + DOp::OrX => forms::orx(ins, st), + } +} + +/// Run one round program over the batch. The dispatch is on PAIRS of instructions (144 arms, one indirect branch +/// per two instructions): the op sequence of a drawn program is random, so the branch predictor misses most +/// dispatches, and the miss (about 3.7 ns of the 7.2 ns an instruction cost per batch on one M5 Max core, measured +/// with `examples/derive_perf.rs` on 6 October 2026, a functional run) is paid once per pair instead of once per +/// instruction. The result is bit for bit that of [`run_instr`] in sequence. +#[inline(never)] +pub fn run_round(prog: &[DInstr], st: &mut SoaState) { + let mut it = prog.chunks_exact(2); + for pair in &mut it { + let (a, b) = (&pair[0], &pair[1]); + match (a.op as u8) * 12 + b.op as u8 { + 0 => { forms::add(a, st); forms::add(b, st); } + 1 => { forms::add(a, st); forms::sub(b, st); } + 2 => { forms::add(a, st); forms::xor(b, st); } + 3 => { forms::add(a, st); forms::mul(b, st); } + 4 => { forms::add(a, st); forms::rot(b, st); } + 5 => { forms::add(a, st); forms::xrot(b, st); } + 6 => { forms::add(a, st); forms::addc(b, st); } + 7 => { forms::add(a, st); forms::xorc(b, st); } + 8 => { forms::add(a, st); forms::mulc(b, st); } + 9 => { forms::add(a, st); forms::mulc2(b, st); } + 10 => { forms::add(a, st); forms::andx(b, st); } + 11 => { forms::add(a, st); forms::orx(b, st); } + 12 => { forms::sub(a, st); forms::add(b, st); } + 13 => { forms::sub(a, st); forms::sub(b, st); } + 14 => { forms::sub(a, st); forms::xor(b, st); } + 15 => { forms::sub(a, st); forms::mul(b, st); } + 16 => { forms::sub(a, st); forms::rot(b, st); } + 17 => { forms::sub(a, st); forms::xrot(b, st); } + 18 => { forms::sub(a, st); forms::addc(b, st); } + 19 => { forms::sub(a, st); forms::xorc(b, st); } + 20 => { forms::sub(a, st); forms::mulc(b, st); } + 21 => { forms::sub(a, st); forms::mulc2(b, st); } + 22 => { forms::sub(a, st); forms::andx(b, st); } + 23 => { forms::sub(a, st); forms::orx(b, st); } + 24 => { forms::xor(a, st); forms::add(b, st); } + 25 => { forms::xor(a, st); forms::sub(b, st); } + 26 => { forms::xor(a, st); forms::xor(b, st); } + 27 => { forms::xor(a, st); forms::mul(b, st); } + 28 => { forms::xor(a, st); forms::rot(b, st); } + 29 => { forms::xor(a, st); forms::xrot(b, st); } + 30 => { forms::xor(a, st); forms::addc(b, st); } + 31 => { forms::xor(a, st); forms::xorc(b, st); } + 32 => { forms::xor(a, st); forms::mulc(b, st); } + 33 => { forms::xor(a, st); forms::mulc2(b, st); } + 34 => { forms::xor(a, st); forms::andx(b, st); } + 35 => { forms::xor(a, st); forms::orx(b, st); } + 36 => { forms::mul(a, st); forms::add(b, st); } + 37 => { forms::mul(a, st); forms::sub(b, st); } + 38 => { forms::mul(a, st); forms::xor(b, st); } + 39 => { forms::mul(a, st); forms::mul(b, st); } + 40 => { forms::mul(a, st); forms::rot(b, st); } + 41 => { forms::mul(a, st); forms::xrot(b, st); } + 42 => { forms::mul(a, st); forms::addc(b, st); } + 43 => { forms::mul(a, st); forms::xorc(b, st); } + 44 => { forms::mul(a, st); forms::mulc(b, st); } + 45 => { forms::mul(a, st); forms::mulc2(b, st); } + 46 => { forms::mul(a, st); forms::andx(b, st); } + 47 => { forms::mul(a, st); forms::orx(b, st); } + 48 => { forms::rot(a, st); forms::add(b, st); } + 49 => { forms::rot(a, st); forms::sub(b, st); } + 50 => { forms::rot(a, st); forms::xor(b, st); } + 51 => { forms::rot(a, st); forms::mul(b, st); } + 52 => { forms::rot(a, st); forms::rot(b, st); } + 53 => { forms::rot(a, st); forms::xrot(b, st); } + 54 => { forms::rot(a, st); forms::addc(b, st); } + 55 => { forms::rot(a, st); forms::xorc(b, st); } + 56 => { forms::rot(a, st); forms::mulc(b, st); } + 57 => { forms::rot(a, st); forms::mulc2(b, st); } + 58 => { forms::rot(a, st); forms::andx(b, st); } + 59 => { forms::rot(a, st); forms::orx(b, st); } + 60 => { forms::xrot(a, st); forms::add(b, st); } + 61 => { forms::xrot(a, st); forms::sub(b, st); } + 62 => { forms::xrot(a, st); forms::xor(b, st); } + 63 => { forms::xrot(a, st); forms::mul(b, st); } + 64 => { forms::xrot(a, st); forms::rot(b, st); } + 65 => { forms::xrot(a, st); forms::xrot(b, st); } + 66 => { forms::xrot(a, st); forms::addc(b, st); } + 67 => { forms::xrot(a, st); forms::xorc(b, st); } + 68 => { forms::xrot(a, st); forms::mulc(b, st); } + 69 => { forms::xrot(a, st); forms::mulc2(b, st); } + 70 => { forms::xrot(a, st); forms::andx(b, st); } + 71 => { forms::xrot(a, st); forms::orx(b, st); } + 72 => { forms::addc(a, st); forms::add(b, st); } + 73 => { forms::addc(a, st); forms::sub(b, st); } + 74 => { forms::addc(a, st); forms::xor(b, st); } + 75 => { forms::addc(a, st); forms::mul(b, st); } + 76 => { forms::addc(a, st); forms::rot(b, st); } + 77 => { forms::addc(a, st); forms::xrot(b, st); } + 78 => { forms::addc(a, st); forms::addc(b, st); } + 79 => { forms::addc(a, st); forms::xorc(b, st); } + 80 => { forms::addc(a, st); forms::mulc(b, st); } + 81 => { forms::addc(a, st); forms::mulc2(b, st); } + 82 => { forms::addc(a, st); forms::andx(b, st); } + 83 => { forms::addc(a, st); forms::orx(b, st); } + 84 => { forms::xorc(a, st); forms::add(b, st); } + 85 => { forms::xorc(a, st); forms::sub(b, st); } + 86 => { forms::xorc(a, st); forms::xor(b, st); } + 87 => { forms::xorc(a, st); forms::mul(b, st); } + 88 => { forms::xorc(a, st); forms::rot(b, st); } + 89 => { forms::xorc(a, st); forms::xrot(b, st); } + 90 => { forms::xorc(a, st); forms::addc(b, st); } + 91 => { forms::xorc(a, st); forms::xorc(b, st); } + 92 => { forms::xorc(a, st); forms::mulc(b, st); } + 93 => { forms::xorc(a, st); forms::mulc2(b, st); } + 94 => { forms::xorc(a, st); forms::andx(b, st); } + 95 => { forms::xorc(a, st); forms::orx(b, st); } + 96 => { forms::mulc(a, st); forms::add(b, st); } + 97 => { forms::mulc(a, st); forms::sub(b, st); } + 98 => { forms::mulc(a, st); forms::xor(b, st); } + 99 => { forms::mulc(a, st); forms::mul(b, st); } + 100 => { forms::mulc(a, st); forms::rot(b, st); } + 101 => { forms::mulc(a, st); forms::xrot(b, st); } + 102 => { forms::mulc(a, st); forms::addc(b, st); } + 103 => { forms::mulc(a, st); forms::xorc(b, st); } + 104 => { forms::mulc(a, st); forms::mulc(b, st); } + 105 => { forms::mulc(a, st); forms::mulc2(b, st); } + 106 => { forms::mulc(a, st); forms::andx(b, st); } + 107 => { forms::mulc(a, st); forms::orx(b, st); } + 108 => { forms::mulc2(a, st); forms::add(b, st); } + 109 => { forms::mulc2(a, st); forms::sub(b, st); } + 110 => { forms::mulc2(a, st); forms::xor(b, st); } + 111 => { forms::mulc2(a, st); forms::mul(b, st); } + 112 => { forms::mulc2(a, st); forms::rot(b, st); } + 113 => { forms::mulc2(a, st); forms::xrot(b, st); } + 114 => { forms::mulc2(a, st); forms::addc(b, st); } + 115 => { forms::mulc2(a, st); forms::xorc(b, st); } + 116 => { forms::mulc2(a, st); forms::mulc(b, st); } + 117 => { forms::mulc2(a, st); forms::mulc2(b, st); } + 118 => { forms::mulc2(a, st); forms::andx(b, st); } + 119 => { forms::mulc2(a, st); forms::orx(b, st); } + 120 => { forms::andx(a, st); forms::add(b, st); } + 121 => { forms::andx(a, st); forms::sub(b, st); } + 122 => { forms::andx(a, st); forms::xor(b, st); } + 123 => { forms::andx(a, st); forms::mul(b, st); } + 124 => { forms::andx(a, st); forms::rot(b, st); } + 125 => { forms::andx(a, st); forms::xrot(b, st); } + 126 => { forms::andx(a, st); forms::addc(b, st); } + 127 => { forms::andx(a, st); forms::xorc(b, st); } + 128 => { forms::andx(a, st); forms::mulc(b, st); } + 129 => { forms::andx(a, st); forms::mulc2(b, st); } + 130 => { forms::andx(a, st); forms::andx(b, st); } + 131 => { forms::andx(a, st); forms::orx(b, st); } + 132 => { forms::orx(a, st); forms::add(b, st); } + 133 => { forms::orx(a, st); forms::sub(b, st); } + 134 => { forms::orx(a, st); forms::xor(b, st); } + 135 => { forms::orx(a, st); forms::mul(b, st); } + 136 => { forms::orx(a, st); forms::rot(b, st); } + 137 => { forms::orx(a, st); forms::xrot(b, st); } + 138 => { forms::orx(a, st); forms::addc(b, st); } + 139 => { forms::orx(a, st); forms::xorc(b, st); } + 140 => { forms::orx(a, st); forms::mulc(b, st); } + 141 => { forms::orx(a, st); forms::mulc2(b, st); } + 142 => { forms::orx(a, st); forms::andx(b, st); } + 143 => { forms::orx(a, st); forms::orx(b, st); } + _ => unreachable!(), + } + } + for ins in it.remainder() { + run_instr(ins, st); + } +} + +/// The scalar reference: one instruction on one 16-word state, the text the kernels carry (`emit.rs`, +/// `derive_instr_text`) restated in Rust. The tests pin the SoA interpreter against it. +pub fn run_round_scalar(prog: &[DInstr], s: &mut [u32; DERIVE_REGS]) { + for ins in prog { + let d = ins.dst as usize; + let c = s[ins.src as usize]; + match ins.op { + DOp::Add => s[d] = s[d].wrapping_add(c), + DOp::Sub => s[d] = s[d].wrapping_sub(c), + DOp::Xor => s[d] ^= c, + DOp::Mul => s[d] = s[d].wrapping_mul(c | 1), + DOp::Rot => s[d] = rotl(s[d], ins.rot as u32).wrapping_add(c), + DOp::XRot => s[d] = rotl(s[d] ^ c, ins.rot as u32), + DOp::AddC => s[d] = s[d].wrapping_add(c.wrapping_add(ins.imm)), + DOp::XorC => s[d] ^= c ^ ins.imm, + DOp::MulC => s[d] = (s[d] ^ c).wrapping_mul(ins.imm), + DOp::MulC2 => s[d] = s[d].wrapping_mul(ins.imm).wrapping_add(c), + DOp::AndX => s[d] ^= c & s[ins.src2 as usize], + DOp::OrX => s[d] = s[d].wrapping_add(c | s[ins.src2 as usize]), + } + } +} + +/// The source text of one instruction in the C-family dialects (the same text in Metal, CUDA C and OpenCL C: +/// `s` is the 16-word state, `mh_rotl` the rotate of the memhard core). +pub fn instr_text(ins: &DInstr) -> String { + let (d, c, b) = (ins.dst, ins.src, ins.src2); + match ins.op { + DOp::Add => format!("s[{d}] += s[{c}];"), + DOp::Sub => format!("s[{d}] -= s[{c}];"), + DOp::Xor => format!("s[{d}] ^= s[{c}];"), + DOp::Mul => format!("s[{d}] *= (s[{c}] | 1u);"), + DOp::Rot => format!("s[{d}] = mh_rotl(s[{d}], {}u) + s[{c}];", ins.rot), + DOp::XRot => format!("s[{d}] = mh_rotl(s[{d}] ^ s[{c}], {}u);", ins.rot), + DOp::AddC => format!("s[{d}] += s[{c}] + {:#010x}u;", ins.imm), + DOp::XorC => format!("s[{d}] ^= s[{c}] ^ {:#010x}u;", ins.imm), + DOp::MulC => format!("s[{d}] = (s[{d}] ^ s[{c}]) * {:#010x}u;", ins.imm), + DOp::MulC2 => format!("s[{d}] = s[{d}] * {:#010x}u + s[{c}];", ins.imm), + DOp::AndX => format!("s[{d}] ^= (s[{c}] & s[{b}]);"), + DOp::OrX => format!("s[{d}] += (s[{c}] | s[{b}]);"), + } +} + +/// One instruction as a line of program.json: `"add d=3 c=0"`, `"mulc d=5 c=3 imm=0x..."`. +pub fn instr_line(ins: &DInstr) -> String { + let mut s = format!("{} d={} c={}", ins.op.name(), ins.dst, ins.src); + if ins.op.has_third() { + s.push_str(&format!(" b={}", ins.src2)); + } + if ins.op.has_rot() { + s.push_str(&format!(" k={}", ins.rot)); + } + if ins.op.has_imm() { + s.push_str(&format!(" imm={:#010x}", ins.imm)); + } + s +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn weights_sum_and_ops() { + assert_eq!(DOP_WEIGHTS.iter().map(|(_, w)| w).sum::(), 100); + for (i, (op, _)) in DOP_WEIGHTS.iter().enumerate() { + assert_eq!(*op as usize, i); + assert_eq!(DOp::from_u8(i as u8), Some(*op)); + } + assert_eq!(DOp::for_roll(0), DOp::Add); + assert_eq!(DOp::for_roll(13), DOp::Add); + assert_eq!(DOp::for_roll(14), DOp::Sub); + assert_eq!(DOp::for_roll(99), DOp::OrX); + // the expected chip operations per instruction, 1.52 (1.62 on a GPU), put 736 x 9 over the x8 floors + let mean: f64 = DOP_WEIGHTS.iter().map(|(o, w)| o.chip_ops() as f64 * *w as f64 / 100.0).sum(); + assert!((mean - 1.52).abs() < 1e-9, "{mean}"); + let gpu_mean: f64 = DOP_WEIGHTS.iter().map(|(o, w)| o.gpu_ops() as f64 * *w as f64 / 100.0).sum(); + assert!((gpu_mean - 1.62).abs() < 1e-9, "{gpu_mean}"); + assert!(9.0 * DERIVE_LEN_X8 as f64 * mean > OPS_FLOOR_X8 as f64); + assert!(9.0 * DERIVE_LEN_X8 as f64 * gpu_mean > GPU_OPS_FLOOR_X8 as f64); + assert_eq!(DeriveProgram::floors(DERIVE_LEN_X8), (9_216, 10_368, 1_152)); + assert_eq!(DeriveProgram::floors(368), (4_608, 5_184, 576)); + let mul_share: f64 = DOP_WEIGHTS.iter().filter(|(o, _)| o.is_mul()).map(|(_, w)| *w as f64 / 100.0).sum(); + assert!(9.0 * DERIVE_LEN_X8 as f64 * mul_share > MULS_FLOOR_X8 as f64); + } + + #[test] + fn draw_is_structural_and_accepted() { + let mut rng = SplitMix64::new(0x1234_5678_9abc_def0); + let p = DeriveProgram::draw(&mut rng, DERIVE_LEN_X8); + assert_eq!(p.attempt, 0, "the first candidate of this seed passes"); + assert_eq!(p.rounds.len(), DERIVE_PROGRAMS); + assert_eq!(p.instr_count(), 9 * DERIVE_LEN_X8 as u64); + assert!(p.check().is_ok()); + assert!(p.chip_ops() >= OPS_FLOOR_X8 && p.gpu_ops() >= GPU_OPS_FLOOR_X8 && p.muls() >= MULS_FLOOR_X8); + assert!(p.gpu_ops() > p.chip_ops()); + // every instruction consumes the newest result + for prog in &p.rounds { + let mut chain = 0u8; + for ins in prog { + assert_eq!(ins.src, chain); + assert_ne!(ins.dst, chain); + chain = ins.dst; + } + } + // four draws per instruction: the same program again from the same seed, and a different one one draw on + let mut rng2 = SplitMix64::new(0x1234_5678_9abc_def0); + assert_eq!(DeriveProgram::draw(&mut rng2, DERIVE_LEN_X8), p); + let mut rng3 = SplitMix64::new(0x1234_5678_9abc_def0); + rng3.next(); + assert_ne!(DeriveProgram::draw(&mut rng3, DERIVE_LEN_X8), p); + } + + #[test] + fn soa_matches_scalar_and_is_a_bijection() { + let mut rng = SplitMix64::new(7); + let p = DeriveProgram::draw(&mut rng, 64); + let mut st: SoaState = [[0u32; SOA_LANES]; DERIVE_REGS]; + let mut scalars = [[0u32; DERIVE_REGS]; SOA_LANES]; + let mut x = SplitMix64::new(99); + for k in 0..SOA_LANES { + for r in 0..DERIVE_REGS { + let v = x.next() as u32; + st[r][k] = v; + scalars[k][r] = v; + } + } + let before = scalars; + for prog in &p.rounds { + run_round(prog, &mut st); + for k in 0..SOA_LANES { + run_round_scalar(prog, &mut scalars[k]); + } + } + for k in 0..SOA_LANES { + for r in 0..DERIVE_REGS { + assert_eq!(st[r][k], scalars[k][r], "lane {k} reg {r}"); + } + } + // distinct inputs stay distinct (a bijection on the state, spot-checked: 32 lanes, no collision) + for a in 0..SOA_LANES { + for b in a + 1..SOA_LANES { + assert_ne!(scalars[a], scalars[b]); + assert_ne!(before[a], before[b]); + } + } + } + + #[test] + fn acceptance_rejects_degenerate_draws() { + let mut rng = SplitMix64::new(3); + let mut p = DeriveProgram::draw(&mut rng, 64); + // a register never written: make every write of round 2 go to the chain's neighbour + let mut q = p.clone(); + for ins in q.rounds[2].iter_mut() { + ins.dst = if ins.src == 1 { 2 } else { 1 }; + } + let mut chain = 0u8; + for ins in q.rounds[2].iter_mut() { + ins.src = chain; + ins.dst = if chain == 1 { 2 } else { 1 }; + chain = ins.dst; + } + assert!(matches!(q.check(), Err(DeriveReject::RegisterNeverWritten { round: 2, .. }))); + // all rotations equal + let mut q = p.clone(); + for ins in q.rounds.iter_mut().flatten() { + if ins.op.has_rot() { + ins.rot = 5; + } + } + assert!(matches!(q.check(), Err(DeriveReject::RotationsDegenerate { distinct: 1 }))); + // every op an add apart from the xor-rotates (so the rotations stay distinct): under the ops floor + for ins in p.rounds.iter_mut().flatten() { + if ins.op != DOp::XRot { + ins.op = DOp::Add; + ins.rot = 0; + ins.imm = 0; + ins.src2 = 0; + } + } + assert!(matches!(p.check(), Err(DeriveReject::OpsUnderFloor { .. })), "{:?}", p.check()); + // no multiplies at all but the ops floor met: under the multiply floor + let mut q = DeriveProgram::draw(&mut SplitMix64::new(11), 64); + for ins in q.rounds.iter_mut().flatten() { + if ins.op.is_mul() { + ins.op = DOp::AddC; + } + } + assert!(matches!(q.check(), Err(DeriveReject::MulsUnderFloor { .. })), "{:?}", q.check()); + } + + #[test] + fn text_forms() { + let i = DInstr { op: DOp::MulC, dst: 5, src: 3, src2: 0, rot: 0, imm: 0x9e37_79b9 }; + assert_eq!(instr_text(&i), "s[5] = (s[5] ^ s[3]) * 0x9e3779b9u;"); + assert_eq!(instr_line(&i), "mulc d=5 c=3 imm=0x9e3779b9"); + let i = DInstr { op: DOp::XRot, dst: 0, src: 15, src2: 0, rot: 17, imm: 0 }; + assert_eq!(instr_text(&i), "s[0] = mh_rotl(s[0] ^ s[15], 17u);"); + let i = DInstr { op: DOp::AndX, dst: 2, src: 9, src2: 14, rot: 0, imm: 0 }; + assert_eq!(instr_text(&i), "s[2] ^= (s[9] & s[14]);"); + } +} diff --git a/igneum-pow/src/emit.rs b/igneum-pow/src/emit.rs index 7cb1ceed..6d9dc2a7 100644 --- a/igneum-pow/src/emit.rs +++ b/igneum-pow/src/emit.rs @@ -10,6 +10,7 @@ //! as a bare `0x003fffff`. The Swift writes it quoted (`jhex`), which is not valid JSON. use crate::generator::{EraParams, Instr, Op, Program, ProgramClass, GENERATOR_VERSION, INSTR_COUNT, ITERATIONS, LOAD_SLOTS}; +use crate::derive::{instr_line as derive_instr_line, instr_text as derive_instr_text, DERIVE_PROGRAMS}; use crate::memhard::{ hot_key, hot_segments, hot_words, Layout, MixParams, Shape, CACHE_LINES_PER_SEGMENT, CACHE_SEGMENT_LOG2_LINES, CACHE_TAG, CHACHA_ROUNDS, CHACHA_SIGMA, HOT_TAG, ITEM_ROUNDS, @@ -195,6 +196,14 @@ fn class_header_lines(p: &Program) -> String { ", p.class.mixer_mult)); s.push_str(&format!("#define IGNEUM_CACHE_GROWTH {} // 1: cache words = 2^(26 + doublings(day)), doublings = floor(log2(1 + day / 1460)) ", p.class.growth as u8)); + } + if p.class.derive_len != 0 { + s.push_str("// Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md, a prototype, NOT class v3): the item +"); + s.push_str("// derivation runs the day's drawn program (memhard.h: mh_round_0..8, IGNEUM_DERIVE_LEN instructions each) in place of the mixer. +"); + s.push_str(&format!("#define IGNEUM_CLASS_DERIVE_LEN {} +", p.class.derive_len)); } s.push_str(&format!("#define IGNEUM_LOAD_SLOTS {} ", p.class.load_slots)); @@ -474,12 +483,18 @@ pub fn emit_memhard_core_layout(mp: &MixParams, dialect: CoreDialect, layout: La CACHE_LINES_PER_SEGMENT, CHACHA_ROUNDS )); - if m == 1 { + if mp.derive.is_some() { + s.push_str("// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals.\n"); + } else if m == 1 { s.push_str("// Item: 8 rounds of seed-parameterised mixer + one 64-byte cache read, then a final mixer. All parameters are literals.\n"); } else { s.push_str(&format!("// Item: 8 rounds of {m} x seed-parameterised mixer + one 64-byte cache read, then {m} x final mixer (class v3, mixer multiplier {m},\n")); s.push_str("// docs/plans/mixer-x4.md: the round key of application j of round r is 0x9E3779B9 * (r * m + j + 1)). All parameters are literals.\n"); } + if let Some(dp) = &mp.derive { + s.push_str(&format!("// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, {} instructions per round\n", dp.len)); + s.push_str(&format!("// program (mh_round_0..{}), {} per item, drawn from the day key stream after the mixer constants (attempt {}, fingerprint {:016x}).\n", DERIVE_PROGRAMS - 1, dp.instr_count(), dp.attempt, dp.fingerprint())); + } s.push_str(&format!("#define MH_CACHE_LINE_MASK {}\n", hex(cache_line_mask))); s.push_str(&format!("#define MH_SEGMENT_LINES {}u\n", CACHE_LINES_PER_SEGMENT)); s.push_str("#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); }\n"); @@ -559,6 +574,34 @@ pub fn emit_memhard_core_layout(mp: &MixParams, dialect: CoreDialect, layout: La "// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); {ITEM_ROUNDS} rounds of {m} x mixer + cache line s[0] & mask; {m} x final mixer.\n" )); } + if let Some(dp) = &mp.derive { + // the nine round programs as straight-line functions over the 16-word state (the same text in every dialect) + for (r, prog) in dp.rounds.iter().enumerate() { + s.push_str(&format!("// Round program {r}: {} instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first).\n", prog.len())); + s.push_str(&format!("{fn_} void mh_round_{r}({lptr} s) {{\n")); + for ins in prog { + s.push_str(" "); + s.push_str(&derive_instr_text(ins)); + s.push('\n'); + } + s.push_str("}\n"); + } + s.push_str(&format!("// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); {ITEM_ROUNDS} rounds of (round program r, cache line s[0] & mask); round program {ITEM_ROUNDS}.\n")); + s.push_str(&format!("{fn_} void mh_item({cptr} cache, {u} t, {lptr} s) {{\n")); + for i in 0..8 { + s.push_str(&format!(" s[{i}] = {};\n", hex(k[i]))); + } + for i in 0..8 { + s.push_str(&format!(" s[{}] = t * {} + {};\n", 8 + i, hex(mul[i]), hex(c[i]))); + } + for r in 0..ITEM_ROUNDS { + s.push_str(&format!(" mh_round_{r}(s);\n")); + s.push_str(&format!(" {{ {cptr} line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for ({u} i = 0u; i < 16u; ++i) s[i] ^= line[i]; }}\n")); + } + s.push_str(&format!(" mh_round_{ITEM_ROUNDS}(s);\n")); + s.push_str("}\n"); + return finish_memhard_core(s, layout, u, fn_, cptr); + } s.push_str(&format!("{fn_} void mh_item({cptr} cache, {u} t, {lptr} s) {{\n")); for i in 0..8 { s.push_str(&format!(" s[{i}] = {};\n", hex(k[i]))); @@ -584,6 +627,11 @@ pub fn emit_memhard_core_layout(mp: &MixParams, dialect: CoreDialect, layout: La )); } s.push_str("}\n"); + finish_memhard_core(s, layout, u, fn_, cptr) +} + +/// The tail of the memhard core: `mh_word` (and the era layout helpers) after `mh_item`. +fn finish_memhard_core(mut s: String, layout: Layout, u: &str, fn_: &str, cptr: &str) -> String { if layout.is_linear() { s.push_str("// dataset[w] without the dataset: derive item w >> 4 and take word w & 15.\n"); s.push_str(&format!( @@ -1486,6 +1534,15 @@ pub fn program_header(p: &Program, day: &str, ds: &DatasetSource) -> String { if mp.shape.mixer_mult != 1 { s.push_str(&format!("#define IGNEUM_MIXER_MULT {} // mixer applications per round and after the last read (class v3, docs/plans/mixer-x4.md)\n", mp.shape.mixer_mult)); } + if let Some(dp) = &mp.derive { + s.push_str(&format!("#define IGNEUM_DERIVE_LEN {} // instructions per round program of the day's item-derivation program (Counter ASIC 3.0 item 2; memhard.h mh_round_0..8)\n", dp.len)); + s.push_str(&format!("#define IGNEUM_DERIVE_ATTEMPT {}\n", dp.attempt)); + s.push_str(&format!("#define IGNEUM_DERIVE_FINGERPRINT {}\n", hex64(dp.fingerprint()))); + s.push_str(&format!("#define IGNEUM_DERIVE_INSTRS_PER_ITEM {}\n", dp.instr_count())); + s.push_str(&format!("#define IGNEUM_DERIVE_GPU_OPS_PER_ITEM {}\n", dp.gpu_ops())); + s.push_str(&format!("#define IGNEUM_DERIVE_CHIP_OPS_PER_ITEM {}\n", dp.chip_ops())); + s.push_str(&format!("#define IGNEUM_DERIVE_MULS_PER_ITEM {}\n", dp.muls())); + } s.push_str(&format!( "#define IGNEUM_MIX_ROT_INIT {{ {} }}\n", mp.rot.iter().map(|r| format!("{r}u")).collect::>().join(", ") @@ -1694,6 +1751,10 @@ pub fn program_json(p: &Program, day: &str, ds: &DatasetSource) -> String { if !p.class.is_v2() { let c = p.width_counts(); s.push_str(&format!(" \"load_class\": {},\n", jstr(&p.class.name()))); + if p.class.derive_len != 0 { + s.push_str(&format!(" \"derive_len\": {},\n", p.class.derive_len)); + s.push_str(" \"derive\": \"Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md; a prototype, not class v3): the nine mixer slots of the item derivation each run a straight-line program of derive_len instructions drawn from the day key stream after the 40 mixer draws, four draws per instruction (op roll below(100), destination roll below(15), third-register roll below(14), the immediate next()); every instruction reads the register the previous one wrote (s[0] first) and writes another; twelve forms, each a bijection on the state; the 8 dependent cache reads per item unchanged; the acceptance test of derive.rs (every register written per round program, 8 distinct rotations, the x8 mixer's operation and multiply counts as floors) rejects a draw and the next attempt continues the stream\",\n"); + } if p.class.mixer_mult != 1 || p.class.growth { s.push_str(&format!(" \"mixer_mult\": {},\n", p.class.mixer_mult)); s.push_str(&format!(" \"cache_growth\": {},\n", p.class.growth)); @@ -1801,7 +1862,24 @@ pub fn program_json(p: &Program, day: &str, ds: &DatasetSource) -> String { join_jhex(&mp.rc) )); // The Swift writes jhex(cacheLineMask) here, which breaks the JSON. We write the bare literal. - if shape.mixer_mult == 1 { + if let Some(dp) = &mp.derive { + s.push_str(&format!( + " \"derive_len\": {},\n \"derive_attempt\": {},\n \"derive_fingerprint\": {},\n \"derive_op_mix\": {},\n \"derive_instrs_per_item\": {},\n \"derive_gpu_ops_per_item\": {},\n \"derive_chip_ops_per_item\": {},\n \"derive_muls_per_item\": {},\n", + dp.len, dp.attempt, jhex64(dp.fingerprint()), jstr(&dp.op_mix()), dp.instr_count(), dp.gpu_ops(), dp.chip_ops(), dp.muls() + )); + s.push_str(&format!( + " \"item\": \"s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..{}: s = P_r(s); line = s[0] & 0x{:08x}; s[i] ^= cache[line * 16 + i]; then s = P_{ITEM_ROUNDS}(s); item(t) = s; P_r is round program r below (c = the register the previous instruction wrote, s[0] first): add d += c; sub d -= c; xor d ^= c; mul d *= (c | 1); rot d = rotl(d, k) + c; xrot d = rotl(d ^ c, k); addc d += c + imm; xorc d ^= c ^ imm; mulc d = (d ^ c) * imm; mulc2 d = d * imm + c; andx d ^= (c & b); orx d += (c | b)\",\n", + ITEM_ROUNDS - 1, + shape.cache_line_mask() + )); + s.push_str(" \"programs\": [\n"); + for (r, prog) in dp.rounds.iter().enumerate() { + s.push_str(" ["); + s.push_str(&prog.iter().map(|i| jstr(&derive_instr_line(i))).collect::>().join(", ")); + s.push_str(if r + 1 < dp.rounds.len() { "],\n" } else { "]\n" }); + } + s.push_str(" ],\n"); + } else if shape.mixer_mult == 1 { s.push_str(&format!( " \"item\": \"s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..{}: s = M_r(s); line = s[0] & 0x{:08x}; s[i] ^= cache[line * 16 + i]; then s = M_{ITEM_ROUNDS}(s); item(t) = s\",\n", ITEM_ROUNDS - 1, diff --git a/igneum-pow/src/generator.rs b/igneum-pow/src/generator.rs index 5201d950..eb3e9863 100644 --- a/igneum-pow/src/generator.rs +++ b/igneum-pow/src/generator.rs @@ -216,6 +216,10 @@ pub struct LoadClass { /// Hot table (`docs/plans/hot-table.md`, measured 5 October 2026 and not adopted): `Some(HotClass { mb, k, added })` /// turns `k` load slots into reads of an `mb` MiB epoch table. `None` for every other class, class v3 included. pub hot: Option, + /// Counter ASIC 3.0 item 2 (`crate::derive`, `docs/plans/counter-asic-3-derivation.md`, 6 October 2026, a + /// prototype behind the class): instructions per round program of the per-day item-derivation program that + /// replaces the fixed mixer when non-zero (the mixer multiplier is then unused and 1). 0 for every other class. + pub derive_len: u16, } /// The parameters one era draws from its seed `E_n` (`docs/plans/era-layout.md` section 1.1, the proposed text of @@ -365,13 +369,13 @@ impl LoadClass { impl LoadClass { /// Generator version 2 as adopted on 4 October 2026: 16 loads of one word. The lottery hash. pub const V2: LoadClass = - LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 1, growth: false, era: None, hot: None }; + LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 1, growth: false, era: None, hot: None, derive_len: 0 }; /// The construction decided for program class v3 on 5 October 2026 (Counter ASIC 2.0, `docs/plans/mixer-x4.md`): /// version 2 loads (16 slots of one word, no scratch, no width roll, so the program stream is version 2's), the /// mixer applied 4 times per round, and the cache growth rule. Name "mx4". pub const MX4: LoadClass = - LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 4, growth: true, era: None, hot: None }; + LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 4, growth: true, era: None, hot: None, derive_len: 0 }; /// The era class over `base` (`docs/plans/era-layout.md`): the parameters drawn by [`era_draw`]; when `allowed` /// has more than one width the drawn width becomes the class mix (every load that width), otherwise the base @@ -406,6 +410,24 @@ impl LoadClass { pub const MX8: LoadClass = LoadClass { mixer_mult: 8, ..LoadClass::MX4 }; + /// Counter ASIC 3.0 item 2 (6 October 2026, `docs/plans/counter-asic-3-derivation.md`): version 2 loads and the + /// growth rule of class v3, with the per-day derivation program of `crate::derive` (736 instructions per round + /// program, the x8-equivalent operation count) in place of the mixer. Name "dr736". A prototype class; not v3. + pub const DR736: LoadClass = + LoadClass { mixer_mult: 1, derive_len: crate::derive::DERIVE_LEN_X8 as u16, ..LoadClass::MX4 }; + + /// This class with a derivation program of `len` instructions per round program (0: the fixed mixer); the + /// mixer multiplier is set to 1 under a program, since no mixer is applied. + pub fn with_derive(self, len: u16) -> LoadClass { + assert!(len == 0 || (32..=4096).contains(&len), "derivation program length must be 0 or 32..=4096"); + LoadClass { derive_len: len, mixer_mult: if len != 0 { 1 } else { self.mixer_mult }, ..self } + } + + /// Whether the item derivation is the per-day program (Counter ASIC 3.0 item 2). + pub fn is_derived(&self) -> bool { + self.derive_len != 0 + } + /// A fixed width (1, 4 or 16 words) with `load_slots` loads per program. pub fn fixed(width_words: u8, load_slots: u8) -> LoadClass { let mut mix = [0u8; 3]; @@ -505,6 +527,16 @@ impl LoadClass { if s == "mx8" { return Some(LoadClass::MX8); } + // Counter ASIC 3.0 item 2: "dr" is the derivation class on the v3 loads and growth rule + if let Some(digits) = s.strip_prefix("dr") { + if !digits.is_empty() && digits.bytes().all(|b| b.is_ascii_digit()) { + let len: u16 = digits.parse().ok()?; + if len == 0 || !(32..=4096).contains(&len) { + return None; + } + return Some(LoadClass::MX4.with_derive(len)); + } + } // the mixer suffix: "...m" then an optional "g" let (s, growth) = match s.strip_suffix('g') { Some(base) if base.rsplit_once('m').map(|(_, d)| !d.is_empty() && d.bytes().all(|b| b.is_ascii_digit())).unwrap_or(false) => (base, true), @@ -627,6 +659,11 @@ impl LoadClass { if *self == LoadClass::MX8 { return "mx8".to_string(); } + if self.derive_len != 0 { + // the derivation class: "dr" on the v3 loads; any other base keeps its name with the suffix + let base = LoadClass { derive_len: 0, mixer_mult: 1, ..*self }.base_name(); + return if base == "v2m1g" || base == "v2" { format!("dr{}", self.derive_len) } else { format!("{base}dr{}", self.derive_len) }; + } let loads = LoadClass { mixer_mult: 1, growth: false, ..*self }; let base = if loads.is_v2() { "v2".to_string() @@ -892,6 +929,11 @@ pub fn program_id_class(generator: u32, seed: &[u32; 8], attempt: u32, class: &L b.push(class.mixer_mult); b.push(class.growth as u8); } + if class.derive_len != 0 { + // Counter ASIC 3.0 item 2: the derivation program's length is part of the construction + b.extend_from_slice(b"derive/"); + b.extend_from_slice(&class.derive_len.to_le_bytes()); + } if let Some(e) = class.era { b.extend_from_slice(b"era/"); b.extend_from_slice(&e.id_bytes()); diff --git a/igneum-pow/src/lib.rs b/igneum-pow/src/lib.rs index 7cb094d4..8e66f7a3 100644 --- a/igneum-pow/src/lib.rs +++ b/igneum-pow/src/lib.rs @@ -7,6 +7,7 @@ //! * [`accept`]: the acceptance rule every candidate program must pass; a rejected candidate is replaced by the //! next attempt of the same seed. //! * [`memhard`]: the 256 MiB ChaCha12 cache and the 8-round dataset item derivation (`proto-metal/MEMHARD.md`). +//! * [`derive`]: the per-day item-derivation program of Counter ASIC 3.0 item 2 (a prototype behind a load class). //! * [`verify`]: the 32-lane warp interpreter that computes the 64-bit hash on the CPU, deriving dataset //! words on demand from the cache (or from the closed form, for the old packs). //! * [`emit`]: the Metal, CUDA and OpenCL kernel text for a program, byte-identical to the Swift exporter. @@ -23,6 +24,7 @@ pub mod accept; pub mod bind; +pub mod derive; pub mod emit; pub mod generator; pub mod memhard; diff --git a/igneum-pow/src/main.rs b/igneum-pow/src/main.rs index cf82ab76..4a33f183 100644 --- a/igneum-pow/src/main.rs +++ b/igneum-pow/src/main.rs @@ -93,7 +93,7 @@ fn usage() -> ! { \x20 hash-bound --prehash <64 hex> --nonce print the header-bound hash (bind.rs) of one 64-bit nonce\n\ \x20 accept every candidate of the seed (or --epoch-hex) with its acceptance verdict\n\ \x20 show the accepted program, one instruction per line\n\ - \x20 --class C load class: v2 (default), mx4 (class v3: mixer x4, cache growth), w4, w16, w64, w64x4, p4,p16,p64[xN], m[g]\n\ + \x20 --class C load class: v2 (default), mx4, mx8 (class v3: mixer x8, cache growth), dr (Counter ASIC 3.0 item 2: the per-day derivation program, dr736 = the x8-equivalent), w4, w16, w64, w64x4, p4,p16,p64[xN], m[g]\n\ \x20 --days N days since genesis for the cache growth rule of a class with it (default 0: the 2^26-word cache)\n\ \x20 --program-class v2|v3 the program class of the seam (v3 = generator 3 on V3_CLASS, the chain's own derivation; --era-hex records the era seed)\n\ \x20 --era E era layout over --class: igneum-era-test/ or :<64 hex> (the 32-byte era seed E_n)\n\ @@ -274,6 +274,20 @@ fn bench(a: &Args, mode: DatasetMode) { shape.cache_log2_words, e.program.op_mix() ); + if let Some(dp) = e.dataset.memhard().and_then(|m| m.params.derive.as_ref()) { + // Counter ASIC 3.0 item 2: the day's derivation program + println!( + "derivation program: {} instructions per round program, {} per item ({} GPU ops, {} chip ops, {} multiplies per item), attempt {}, fingerprint {:016x}, op mix {}", + dp.len, + dp.instr_count(), + dp.gpu_ops(), + dp.chip_ops(), + dp.muls(), + dp.attempt, + dp.fingerprint(), + dp.op_mix() + ); + } let bases = [0u32, 4096, 1_000_000]; for &b in &bases { let t = Instant::now(); diff --git a/igneum-pow/src/memhard.rs b/igneum-pow/src/memhard.rs index 4458ab86..ad42470b 100644 --- a/igneum-pow/src/memhard.rs +++ b/igneum-pow/src/memhard.rs @@ -9,6 +9,7 @@ //! `m` applications with distinct round keys, the 8 dependent cache reads unchanged; the cache doubles when the //! dataset doubles ([`growth_doublings`]). [`Shape::V2`] (`m = 1`, 2^26 words) is version 2 bit for bit. +use crate::derive::{run_round, DeriveProgram, SoaState, DERIVE_REGS, SOA_LANES}; use crate::generator::LoadClass; use crate::seed::{day_key, fnv1a64_words, SplitMix64}; @@ -45,11 +46,15 @@ pub struct Shape { pub mixer_mult: u32, /// The cache is 2^cache_log2_words words (26 at genesis; 27 and 28 after the dataset doublings of 1.13.3). pub cache_log2_words: u32, + /// Counter ASIC 3.0 item 2 (`crate::derive`): instructions per round program of the per-day derivation + /// program, which replaces the `mixer_mult` applications of `M_r` in every mixer slot when non-zero. 0 for + /// version 2 and class v3 (the fixed mixer). + pub derive_len: u32, } impl Shape { /// Version 2: one mixer application per round, a 2^26-word cache. - pub const V2: Shape = Shape { mixer_mult: 1, cache_log2_words: CACHE_LOG2_WORDS as u32 }; + pub const V2: Shape = Shape { mixer_mult: 1, cache_log2_words: CACHE_LOG2_WORDS as u32, derive_len: 0 }; /// The shape of a load class on day 0 of the chain (and on every day for a class without the growth rule). pub fn for_class(class: &LoadClass) -> Shape { @@ -62,6 +67,7 @@ impl Shape { Shape { mixer_mult: class.mixer_mult(), cache_log2_words: if class.growth { cache_log2_words(days_since_genesis) } else { CACHE_LOG2_WORDS as u32 }, + derive_len: class.derive_len as u32, } } @@ -83,9 +89,21 @@ impl Shape { pub fn log2_segments(&self) -> u32 { self.cache_log2_words - 4 - CACHE_SEGMENT_LOG2_LINES as u32 } - /// Mixer applications per item: `(ITEM_ROUNDS + 1) x m`. + /// Mixer applications per item: `(ITEM_ROUNDS + 1) x m` (0 under a derivation program, which has no mixer). pub fn mixers_per_item(&self) -> u32 { - (ITEM_ROUNDS as u32 + 1) * self.mixer_mult + if self.is_derived() { + 0 + } else { + (ITEM_ROUNDS as u32 + 1) * self.mixer_mult + } + } + /// Whether the item derivation is the per-day program of `crate::derive` (Counter ASIC 3.0 item 2). + pub fn is_derived(&self) -> bool { + self.derive_len != 0 + } + /// Instructions per item under a derivation program: `(ITEM_ROUNDS + 1) x derive_len`. + pub fn derive_instrs_per_item(&self) -> u32 { + (ITEM_ROUNDS as u32 + 1) * self.derive_len } } @@ -169,7 +187,10 @@ pub fn chacha_block(x: &[u32; 16]) -> [u32; 16] { } /// Mixer parameters drawn from the day key, plus the [`Shape`] the mixer is applied under. Draw order: -/// ROT[0..7] (1..31), MUL[0..15] (odd), RC[0..15]. The shape is not drawn: it is the class's. +/// ROT[0..7] (1..31), MUL[0..15] (odd), RC[0..15]. The shape is not drawn: it is the class's. Under a shape with +/// a derivation program (Counter ASIC 3.0 item 2) the same stream continues after the 40 draws with the program's +/// draws (`DeriveProgram::draw`); the mixer constants are still drawn (the item init uses MUL and RC) and the +/// mixer itself is not applied. #[derive(Clone, Debug, PartialEq, Eq)] pub struct MixParams { pub key: [u32; 8], @@ -177,6 +198,8 @@ pub struct MixParams { pub mul: [u32; 16], pub rc: [u32; 16], pub shape: Shape, + /// The per-day derivation program when `shape.derive_len != 0`, else `None`. + pub derive: Option, } impl MixParams { @@ -198,7 +221,8 @@ impl MixParams { for c in rc.iter_mut() { *c = rng.next() as u32; } - Self { key, rot, mul, rc, shape } + let derive = if shape.is_derived() { Some(DeriveProgram::draw(&mut rng, shape.derive_len)) } else { None }; + Self { key, rot, mul, rc, shape, derive } } /// Parameters for a day string: the key is `seed_words("day/" + day)`. pub fn for_day(day: &str) -> Self { @@ -350,7 +374,7 @@ impl Cache { /// are the smaller cache's segments word for word. pub fn fill_log2(key: [u32; 8], log2_words: u32) -> Cache { assert!((10..=30).contains(&log2_words), "cache log2 words must be in 10..=30"); - let shape = Shape { mixer_mult: 1, cache_log2_words: log2_words }; + let shape = Shape { mixer_mult: 1, cache_log2_words: log2_words, derive_len: 0 }; let mut words = vec![0u32; shape.cache_words()]; for seg in 0..shape.cache_segments() { Self::fill_segment(&mut words, seg, &key); @@ -481,6 +505,9 @@ impl HotTable { /// (`mp.shape.mixer_mult`) round `r` applies `M` with keys `round_key(r m + j)` for `j = 0 .. m - 1` before its /// one cache read; the final mixer applies `M` with keys `round_key(8 m + j)`. `m = 1` is version 2. pub fn derive_items(ts: &[u32], mp: &MixParams, cache: &Cache, out: &mut [[u32; 16]]) { + if let Some(prog) = &mp.derive { + return derive_items_program(ts, mp, prog, cache, out); + } // The item loop lives in its own function, one instance per cache size the growth rule can reach with the line // mask a constant, never inlined into the callers. Inlined into `MemhardCpu::fetch` it ran at 1.33 ms per unit // against 0.61 out of line (the version 2 verifier, bisected on one core under the measure lock, 5 October 2026, @@ -535,6 +562,44 @@ fn derive_items_mask(ts: &[u32], mp: &MixParams, cache: &C } } +/// [`derive_items`] under a per-day derivation program (Counter ASIC 3.0 item 2, `crate::derive`): the same +/// init and the same 8 dependent cache reads, with round program `r` in place of the `m` mixer applications of +/// round `r` and program 8 in place of the final applications. The states are kept word-major +/// (`st[reg][lane]`) so every instruction runs across the batch's items in one vectorised loop and the +/// interpreter's dispatch is paid once per instruction per batch of up to 32 items, not once per item. The +/// cache reads of the batch are issued together, as in the fixed-mixer loop, so the 8 dependent misses of +/// independent items overlap in the memory system. +#[inline(never)] +pub fn derive_items_program(ts: &[u32], mp: &MixParams, prog: &DeriveProgram, cache: &Cache, out: &mut [[u32; 16]]) { + let n = ts.len(); + debug_assert!(out.len() >= n && n <= SOA_LANES); + assert_eq!(prog.rounds.len(), ITEM_ROUNDS + 1); + let mut st: SoaState = [[0u32; SOA_LANES]; DERIVE_REGS]; + for k in 0..n { + let t = ts[k]; + for i in 0..8 { + st[i][k] = mp.key[i]; + st[8 + i][k] = t.wrapping_mul(mp.mul[i]).wrapping_add(mp.rc[i]); + } + } + let mask = cache.line_mask(); + for r in 0..ITEM_ROUNDS { + run_round(&prog.rounds[r], &mut st); + for k in 0..n { + let line = cache.line(st[0][k] & mask); + for i in 0..16 { + st[i][k] ^= line[i]; + } + } + } + run_round(&prog.rounds[ITEM_ROUNDS], &mut st); + for k in 0..n { + for i in 0..16 { + out[k][i] = st[i][k]; + } + } +} + /// One dataset item, 16 words. pub fn derive_item(t: u32, mp: &MixParams, cache: &Cache) -> [u32; 16] { let mut out = [[0u32; 16]; 1]; @@ -786,7 +851,7 @@ mod tests { let v2 = Shape::for_class_day(&LoadClass::V2, 100_000); assert_eq!(v2, Shape::V2); let v3 = Shape::for_class_day(&LoadClass::MX4, 0); - assert_eq!(v3, Shape { mixer_mult: 4, cache_log2_words: 26 }); + assert_eq!(v3, Shape { mixer_mult: 4, cache_log2_words: 26, derive_len: 0 }); assert_eq!(Shape::for_class_day(&LoadClass::MX4, 1_460).cache_log2_words, 27); assert_eq!(v3.mixers_per_item(), 36); assert_eq!(Shape::V2.mixers_per_item(), 9); @@ -807,7 +872,7 @@ mod tests { assert_eq!(small.segments(), 64); assert_eq!(small.line_mask(), 4095); for m in [1u32, 2, 4] { - let mp = MixParams::with_shape(key, Shape { mixer_mult: m, cache_log2_words: 16 }); + let mp = MixParams::with_shape(key, Shape { mixer_mult: m, cache_log2_words: 16, derive_len: 0 }); for t in [0u32, 1, 12_345, u32::MAX] { let got = derive_item(t, &mp, &small); let mut s = [0u32; 16]; @@ -830,8 +895,8 @@ mod tests { assert_eq!(got, s, "m {m} t {t}"); } } - let v2 = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16 }); - let v3 = MixParams::with_shape(key, Shape { mixer_mult: 4, cache_log2_words: 16 }); + let v2 = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: 0 }); + let v3 = MixParams::with_shape(key, Shape { mixer_mult: 4, cache_log2_words: 16, derive_len: 0 }); assert_ne!(derive_item(0, &v2, &small), derive_item(0, &v3, &small)); assert_eq!(round_key_mult(0, 0, 1), round_key(0)); assert_eq!(round_key_mult(8, 0, 1), round_key(8)); diff --git a/igneum-pow/tests/derive.rs b/igneum-pow/tests/derive.rs new file mode 100644 index 00000000..66b58df7 --- /dev/null +++ b/igneum-pow/tests/derive.rs @@ -0,0 +1,275 @@ +//! The per-day item-derivation program (Counter ASIC 3.0 item 2, `docs/plans/counter-asic-3-derivation.md`): the +//! soundness runs on the CPU. +//! +//! 1. By hand: the derived item of class dr736 restated with the scalar reference on a small cache equals the +//! verifier's batched (SoA) derivation, at the item boundary and the index wrap. +//! 2. The v2 and v3 paths are untouched: the derivation field is 0 on both, their items are the fixed-mixer items. +//! 3. Determinism and the stream: two epochs agree on every vector and file; the program is the continuation of the +//! mixer's stream (the first draw of the program follows the 40 mixer draws); a different day draws a different +//! program; the class is in the program id and the name. +//! 4. Stats beside x8: bit balance and single-bit avalanche of the derived items and of the hash, on the same seeds. +//! 5. A program whose text is the kernels': every instruction's C text evaluated by hand on one state matches the +//! scalar reference (the text forms are what Metal, CUDA and OpenCL compile). + +use igneum_pow::derive::{instr_text, run_round_scalar, DOp, DeriveProgram, DERIVE_LEN_X8, DERIVE_PROGRAMS}; +use igneum_pow::emit::export_pack; +use igneum_pow::generator::{generate_from_seed_bytes_class, LoadClass, V3_CLASS}; +use igneum_pow::memhard::{derive_item, derive_items, mixer, round_key, Cache, MixParams, Shape, ITEM_ROUNDS}; +use igneum_pow::seed::{day_key, SplitMix64}; +use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch}; + +const DAY: &str = "2026-10-03"; + +/// The item of a derivation class restated by hand with the scalar reference. +fn item_by_hand(t: u32, mp: &MixParams, cache: &Cache) -> [u32; 16] { + let prog = mp.derive.as_ref().expect("a derivation class"); + let mut s = [0u32; 16]; + s[..8].copy_from_slice(&mp.key); + for i in 0..8 { + s[8 + i] = t.wrapping_mul(mp.mul[i]).wrapping_add(mp.rc[i]); + } + for r in 0..ITEM_ROUNDS { + run_round_scalar(&prog.rounds[r], &mut s); + let line = cache.line(s[0]); + for i in 0..16 { + s[i] ^= line[i]; + } + } + run_round_scalar(&prog.rounds[ITEM_ROUNDS], &mut s); + s +} + +#[test] +fn derived_item_by_hand_and_in_batches() { + let key = day_key(DAY); + let cache = Cache::fill_log2(key, 16); + let shape = Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8 }; + let mp = MixParams::with_shape(key, shape); + let prog = mp.derive.as_ref().unwrap(); + assert_eq!(prog.rounds.len(), DERIVE_PROGRAMS); + assert!(prog.check().is_ok()); + assert_eq!(shape.derive_instrs_per_item(), 9 * DERIVE_LEN_X8); + assert_eq!(shape.mixers_per_item(), 0); + for t in [0u32, 1, 2, 15, 16, 17, 12_345, (1 << 28) - 1, u32::MAX - 1, u32::MAX] { + assert_eq!(derive_item(t, &mp, &cache), item_by_hand(t, &mp, &cache), "t {t}"); + } + // a batch of 32 distinct items against one at a time, and a short batch + let ts: Vec = (0..32).map(|k| k * 7_919 + 3).collect(); + let mut out = [[0u32; 16]; 32]; + derive_items(&ts, &mp, &cache, &mut out); + for (k, &t) in ts.iter().enumerate() { + assert_eq!(out[k], item_by_hand(t, &mp, &cache), "batch slot {k}"); + } + let mut out5 = [[0u32; 16]; 5]; + derive_items(&ts[..5], &mp, &cache, &mut out5); + assert_eq!(&out5[..], &out[..5]); + // the fixed mixer of the same key gives other items + let v3 = MixParams::with_shape(key, Shape { mixer_mult: 8, cache_log2_words: 16, derive_len: 0 }); + assert!(v3.derive.is_none()); + assert_ne!(derive_item(0, &v3, &cache), derive_item(0, &mp, &cache)); +} + +#[test] +fn v2_and_v3_are_untouched() { + assert_eq!(LoadClass::V2.derive_len, 0); + assert_eq!(V3_CLASS.derive_len, 0); + assert_eq!(LoadClass::MX8.derive_len, 0); + assert_eq!(Shape::V2.derive_len, 0); + assert!(!Shape::for_class(&V3_CLASS).is_derived()); + let key = day_key(DAY); + let cache = Cache::fill_log2(key, 16); + // the version 2 item restated by hand (the mixer_mult_by_hand test of memhard.rs, m = 1) + let v2 = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: 0 }); + let t = 12_345u32; + let mut s = [0u32; 16]; + s[..8].copy_from_slice(&key); + for i in 0..8 { + s[8 + i] = t.wrapping_mul(v2.mul[i]).wrapping_add(v2.rc[i]); + } + for r in 0..8usize { + mixer(&mut s, round_key(r), &v2); + let line = cache.line(s[0]); + for i in 0..16 { + s[i] ^= line[i]; + } + } + mixer(&mut s, round_key(8), &v2); + assert_eq!(derive_item(t, &v2, &cache), s); + // the mixer constants of the derivation class are the v2 draws (the stream continues after them) + let dr = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8 }); + assert_eq!((dr.rot, dr.mul, dr.rc), (v2.rot, v2.mul, v2.rc)); +} + +#[test] +fn stream_class_name_and_id() { + let key = day_key(DAY); + // the program is the continuation of the mixer stream: 40 draws, then the program + let mut rng = SplitMix64::new(key[0] as u64 | ((key[1] as u64) << 32)); + for _ in 0..40 { + rng.next(); + } + let expect = DeriveProgram::draw(&mut rng, DERIVE_LEN_X8); + let mp = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: DERIVE_LEN_X8 }); + assert_eq!(mp.derive.as_ref().unwrap(), &expect); + // another day, another program; another length, another program + let other = MixParams::with_shape(day_key("2026-10-04"), Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: DERIVE_LEN_X8 }); + assert_ne!(other.derive.as_ref().unwrap().fingerprint(), expect.fingerprint()); + let short = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: 368 }); + assert_eq!(short.derive.as_ref().unwrap().instr_count(), 9 * 368); + // the class: name, parse, id, and the v2 program stream (v2 loads, no width roll) + let c = LoadClass::DR736; + assert_eq!(c.name(), "dr736"); + assert_eq!(LoadClass::parse("dr736"), Some(c)); + assert_eq!(LoadClass::parse("dr368"), Some(LoadClass::MX4.with_derive(368))); + assert_eq!(LoadClass::parse("dr0"), None); + assert_eq!(LoadClass::parse("dr5000"), None); + assert!(c.v2_loads() && !c.takes_width_roll() && c.growth && c.mixer_mult == 1 && c.is_derived()); + let p = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", c); + let v2 = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::V2); + let mx8 = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::MX8); + assert_eq!(p.instrs, v2.instrs, "the v2 program of the seed"); + assert_ne!(p.program_id(), v2.program_id()); + assert_ne!(p.program_id(), mx8.program_id()); + assert_ne!( + generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::MX4.with_derive(368)).program_id(), + p.program_id() + ); +} + +#[test] +fn determinism_and_pack_text() { + let a = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736); + let b = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736); + let pa = export_pack(&a, DAY, "test"); + let pb = export_pack(&b, DAY, "test"); + assert_eq!(pa.outs, pb.outs); + assert_eq!(pa.files, pb.files); + let names: Vec<&str> = pa.files.iter().map(|(n, _)| n.as_str()).collect(); + assert!(names.contains(&"memhard.h") && names.contains(&"memhard.metal")); + for (name, text) in &pa.files { + if name == "memhard.h" || name == "memhard.metal" || name == "kernel.cl" { + for r in 0..DERIVE_PROGRAMS { + assert!(text.contains(&format!("mh_round_{r}(")), "{name} carries round program {r}"); + } + assert!(!text.contains("mh_mixer(s,"), "{name}: no mixer application under a derivation program"); + let dp = a.dataset.memhard().unwrap().params.derive.as_ref().unwrap(); + // every instruction's text appears, in order, inside the round functions + let first = instr_text(&dp.rounds[0][0]); + assert!(text.contains(&first), "{name} carries the first instruction {first}"); + } + if name == "program.h" { + assert!(text.contains("#define IGNEUM_LOAD_CLASS \"dr736\"")); + assert!(text.contains("#define IGNEUM_DERIVE_LEN 736")); + assert!(text.contains("#define IGNEUM_CLASS_DERIVE_LEN 736")); + assert!(!text.contains("#define IGNEUM_MIXER_MULT")); + assert!(text.contains("#define IGNEUM_GENERATOR 2")); + } + if name == "program.json" { + assert!(text.contains("\"derive_len\": 736")); + assert!(text.contains("\"programs\": [")); + serde_json::from_str::(text).expect("valid JSON"); + } + } + // the vectors are the interpreter's + assert_eq!(pa.outs[0], a.hash_warp(0)); +} + +/// Bit balance and single-bit avalanche of the derived items (t flipped one bit) and of the hash, beside x8. +#[test] +fn stats_beside_x8() { + let key = day_key(DAY); + let cache = Cache::fill_log2(key, 18); + let dr = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 18, derive_len: DERIVE_LEN_X8 }); + let x8 = MixParams::with_shape(key, Shape { mixer_mult: 8, cache_log2_words: 18, derive_len: 0 }); + for (label, mp) in [("dr736", &dr), ("x8", &x8)] { + let n = 2048u32; + let mut ones = [0u32; 512]; + let mut flips = 0u64; + let mut flip_n = 0u64; + let mut seen = std::collections::HashSet::new(); + for t in 0..n { + let a = derive_item(t * 2_654_435_761, mp, &cache); + assert!(seen.insert(a), "{label}: duplicate item"); + for i in 0..16 { + for b in 0..32 { + ones[i * 32 + b] += (a[i] >> b) & 1; + } + } + let bit = t % 32; + let c = derive_item((t * 2_654_435_761) ^ (1 << bit), mp, &cache); + for i in 0..16 { + flips += (a[i] ^ c[i]).count_ones() as u64; + } + flip_n += 512; + } + let avalanche = flips as f64 / flip_n as f64 * 100.0; + let worst_z = ones.iter().map(|&o| ((o as f64 - n as f64 / 2.0) / (n as f64 / 4.0).sqrt()).abs()).fold(0.0, f64::max); + println!("{label}: avalanche {avalanche:.2} percent, worst bit z {worst_z:.2}"); + assert!((48.5..=51.5).contains(&avalanche), "{label}: avalanche {avalanche}"); + assert!(worst_z < 4.5, "{label}: worst bit z {worst_z}"); + } + // the hash on the same seeds: avalanche across a nonce flip within the unit + let e = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736); + let w0 = e.hash_warp(0); + let w1 = e.hash_warp(32); + let mut d = 0u64; + for l in 0..32 { + d += (w0[l] ^ w1[l]).count_ones() as u64; + } + let av = d as f64 / (32.0 * 64.0) * 100.0; + println!("hash unit 0 against unit 1: {av:.2} percent of bits differ"); + assert!((44.0..=56.0).contains(&av)); +} + +/// The kernels' text forms: every form's C text, read back into the scalar reference's arithmetic by hand. +#[test] +fn text_forms_match_scalar_reference() { + let mut rng = SplitMix64::new(42); + let p = DeriveProgram::draw_candidate(&mut rng, 64, 0); + let mut s = [0u32; 16]; + for (i, v) in s.iter_mut().enumerate() { + *v = 0x9e37_79b9u32.wrapping_mul(i as u32 + 1); + } + let mut seen = [false; 12]; + for ins in p.rounds.iter().flatten() { + seen[ins.op as usize] = true; + let before = s; + run_round_scalar(std::slice::from_ref(ins), &mut s); + let (d, c, b) = (ins.dst as usize, ins.src as usize, ins.src2 as usize); + let (dv, cv, bv) = (before[d], before[c], before[b]); + let want = match ins.op { + DOp::Add => dv.wrapping_add(cv), + DOp::Sub => dv.wrapping_sub(cv), + DOp::Xor => dv ^ cv, + DOp::Mul => dv.wrapping_mul(cv | 1), + DOp::Rot => dv.rotate_left(ins.rot as u32).wrapping_add(cv), + DOp::XRot => (dv ^ cv).rotate_left(ins.rot as u32), + DOp::AddC => dv.wrapping_add(cv.wrapping_add(ins.imm)), + DOp::XorC => dv ^ cv ^ ins.imm, + DOp::MulC => (dv ^ cv).wrapping_mul(ins.imm), + DOp::MulC2 => dv.wrapping_mul(ins.imm).wrapping_add(cv), + DOp::AndX => dv ^ (cv & bv), + DOp::OrX => dv.wrapping_add(cv | bv), + }; + assert_eq!(s[d], want, "{}", instr_text(ins)); + for i in 0..16 { + if i != d { + assert_eq!(s[i], before[i], "only the destination changes: {}", instr_text(ins)); + } + } + assert!(instr_text(ins).starts_with(&format!("s[{d}]"))); + } + assert!(seen.iter().all(|s| *s), "64 x 9 draws cover every form"); +} + +/// The dataset source of the class on a day: the verifier's `word` path derives through the program. +#[test] +fn dataset_source_word_path() { + let ds = DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, 20, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8 }); + let m = ds.memhard().unwrap(); + let item = derive_item(3, &m.params, &m.cache); + for j in 0..16u32 { + assert_eq!(ds.word(3 * 16 + j), item[j as usize]); + } + assert_eq!(ds.word((1 << 20) + 5), ds.word(5), "the mask"); +} diff --git a/igneum-pow/tests/mixer.rs b/igneum-pow/tests/mixer.rs index e3f090b8..46dc1a5c 100644 --- a/igneum-pow/tests/mixer.rs +++ b/igneum-pow/tests/mixer.rs @@ -181,7 +181,7 @@ fn edge_items_every_multiplier() { let key = day_key(DAY); let cache = Cache::fill_log2(key, 14); for m in [1u32, 2, 4, 8] { - let mp = MixParams::with_shape(key, Shape { mixer_mult: m, cache_log2_words: 14 }); + let mp = MixParams::with_shape(key, Shape { mixer_mult: m, cache_log2_words: 14, derive_len: 0 }); let by_hand = |t: u32| -> [u32; 16] { let mut s = [0u32; 16]; s[..8].copy_from_slice(&key); diff --git a/igneum-pow/tests/packs.rs b/igneum-pow/tests/packs.rs index d461bae4..98446833 100644 --- a/igneum-pow/tests/packs.rs +++ b/igneum-pow/tests/packs.rs @@ -369,7 +369,7 @@ fn v3_packs_are_the_v2_seeds_under_mixer_x8() { assert_eq!(e3.program.program_id(), igneum_pow::generator::program_id(GENERATOR_VERSION_V3, &e3.program.seed, e3.program.attempt)); let m3 = e3.dataset.memhard().unwrap(); let m2 = e2.dataset.memhard().unwrap(); - assert_eq!(m3.shape(), Shape { mixer_mult: 8, cache_log2_words: 26 }); + assert_eq!(m3.shape(), Shape { mixer_mult: 8, cache_log2_words: 26, derive_len: 0 }); assert_eq!(m3.cache.fnv1a64(), m2.cache.fnv1a64(), "{v3}: the same cache as v2 on day 0"); assert_eq!(m3.params.rot, m2.params.rot); assert_eq!(e3.dataset.log2_words, 28); @@ -405,7 +405,7 @@ fn v3_packs_are_the_v2_seeds_under_mixer_x8() { assert_eq!(j["load_class"].as_str().unwrap(), "mx4"); assert_eq!(e4.program.class, LoadClass::MX4); assert_eq!(e4.program.instrs, epoch(v2).program.instrs); - assert_eq!(e4.dataset.memhard().unwrap().shape(), Shape { mixer_mult: 4, cache_log2_words: 26 }); + assert_eq!(e4.dataset.memhard().unwrap().shape(), Shape { mixer_mult: 4, cache_log2_words: 26, derive_len: 0 }); assert!(read(x4, "memhard.h").contains("j < 4u; ++j) mh_mixer(s, 0x9E3779B9u * (r * 4u + j + 1u))")); } } diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cl b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cl new file mode 100644 index 00000000..713d323a --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cl @@ -0,0 +1,6943 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// OpenCL C twin of the Metal kernel for the same seed (see proto-opencl/README.md, WAVEFRONT.md and program.metal). +// Built from source at runtime by proto-opencl/host.c, which passes these defines: +// IGNEUM_GROUP work-group size of igneum_hash, a multiple of 32 (default 32: one work-group = one 32-lane unit) +// IGNEUM_EXCHANGE 0 = local-memory exchange with a barrier (any device, any wave width; the default) +// 1 = sub_group_shuffle_xor (cl_khr_subgroup_shuffle), only with IGNEUM_GROUP 32 and a sub-group size of exactly 32 +// 2 = intel_sub_group_shuffle_xor (cl_intel_subgroups), same condition +// The verification unit is always 32 lanes. A 64-wide hardware wave (AMD GCN/CDNA, RDNA in wave64) runs two units; +// the exchange masks are 1, 2, 4, 8, 16, so every partner lane lies inside the lane's own aligned run of 32. +#ifndef IGNEUM_GROUP +#define IGNEUM_GROUP 32 +#endif +#ifndef IGNEUM_EXCHANGE +#define IGNEUM_EXCHANGE 0 +#endif +#ifdef __OPENCL_VERSION__ +#define IGNEUM_KERNEL_HASH __kernel __attribute__((reqd_work_group_size(IGNEUM_GROUP, 1, 1))) +#define IGNEUM_LOCAL_WORDS(name, n) __local uint name[n] +#if IGNEUM_EXCHANGE == 1 +#ifdef cl_khr_subgroups +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif +#ifdef cl_khr_subgroup_shuffle +#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable +#endif +#elif IGNEUM_EXCHANGE == 2 +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#endif +#else +// Not an OpenCL compiler: proto-opencl/emu compiles this file as C++ and supplies the built-ins and these two macros. +#include "emu_opencl.h" +#endif + +#if IGNEUM_EXCHANGE == 1 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#elif IGNEUM_EXCHANGE == 2 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = intel_sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#else +// Local-memory exchange. Two buffers of IGNEUM_GROUP words alternate (xk counts exchanges), so one barrier per +// exchange is enough: a lane can only overwrite buffer b at exchange k+2 after passing barrier k+1, and every lane +// reaches barrier k+1 only after its read of buffer b at exchange k. The partner lid ^ m stays inside the lane's +// aligned run of 32 because m < 32. Control flow is uniform, so every work-item reaches every barrier. +#define IGNEUM_SHFL_XOR(dst, a, m) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid ^ (uint)(m))]; xk += 1u; } +#define IGNEUM_BCAST0(dst, a) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid & ~31u)]; xk += 1u; } +#endif + +static inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site. OpenCL rotate() rotates left by n modulo 32. +static inline uint rotl_imm(uint x, uint n) { return rotate(x, n); } +// Right rotation by n modulo 32 as a left rotation by (32 - n) modulo 32; n == 0 gives x. +static inline uint rotr_var(uint x, uint n) { return rotate(x, (0u - n) & 31u); } +static inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 771868df4e64d6ab). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +static inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +static inline void mh_chacha_block(const uint* x, uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +static inline void mh_cache_segment(__global uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0xceed56d7u ^ prev[4]; + x[5] = 0x9ba270d2u ^ prev[5]; + x[6] = 0x82caab2du ^ prev[6]; + x[7] = 0x81ebce0eu ^ prev[7]; + x[8] = 0x12b6ecf1u ^ prev[8]; + x[9] = 0xd0f3fd7cu ^ prev[9]; + x[10] = 0xd872eefeu ^ prev[10]; + x[11] = 0xc158c7bdu ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + __global uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +static inline void mh_mixer(uint* s, uint rk) { + s[0] = (s[0] ^ (0xc6892460u + rk)) * 0xf351d601u; + s[1] = (s[1] ^ (0x25b7228au + rk)) * 0xa3bb398fu; + s[2] = (s[2] ^ (0xcd515004u + rk)) * 0xb5a09e35u; + s[3] = (s[3] ^ (0x2846527au + rk)) * 0x7509c9c1u; + s[4] = (s[4] ^ (0xa6324241u + rk)) * 0x6bbf31e9u; + s[5] = (s[5] ^ (0x36e3ec53u + rk)) * 0xfc849a79u; + s[6] = (s[6] ^ (0x82961bacu + rk)) * 0xded91851u; + s[7] = (s[7] ^ (0x0f97ba7du + rk)) * 0x8d9113d1u; + s[8] = (s[8] ^ (0xb6f921a9u + rk)) * 0x0ff15225u; + s[9] = (s[9] ^ (0x3ada24e5u + rk)) * 0x3a5bdd41u; + s[10] = (s[10] ^ (0xde20ab91u + rk)) * 0xab533435u; + s[11] = (s[11] ^ (0x5378eeb2u + rk)) * 0xe1c55ad5u; + s[12] = (s[12] ^ (0x7d161662u + rk)) * 0xe6d3bd0du; + s[13] = (s[13] ^ (0x89353cc1u + rk)) * 0x9d9ffbbdu; + s[14] = (s[14] ^ (0xb1aa03a2u + rk)) * 0xbb2a3cf3u; + s[15] = (s[15] ^ (0x788acae6u + rk)) * 0x50a7c08du; + MH_QR(s[0], s[4], s[8], s[12], 17u, 12u, 20u, 23u) MH_QR(s[1], s[5], s[9], s[13], 17u, 12u, 20u, 23u) + MH_QR(s[2], s[6], s[10], s[14], 17u, 12u, 20u, 23u) MH_QR(s[3], s[7], s[11], s[15], 17u, 12u, 20u, 23u) + MH_QR(s[0], s[5], s[10], s[15], 7u, 3u, 27u, 16u) MH_QR(s[1], s[6], s[11], s[12], 7u, 3u, 27u, 16u) + MH_QR(s[2], s[7], s[8], s[13], 7u, 3u, 27u, 16u) MH_QR(s[3], s[4], s[9], s[14], 7u, 3u, 27u, 16u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_0(uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 13u); + s[1] = mh_rotl(s[1], 23u) + s[3]; + s[15] *= (s[1] | 1u); + s[7] ^= s[15]; + s[12] -= s[7]; + s[9] *= (s[12] | 1u); + s[6] = (s[6] ^ s[9]) * 0x2735a435u; + s[14] = mh_rotl(s[14], 17u) + s[6]; + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x14ddb139u; + s[1] += s[8] + 0xca6e0e1cu; + s[6] *= (s[1] | 1u); + s[15] ^= s[6]; + s[12] ^= s[15]; + s[11] = s[11] * 0x722d4b13u + s[12]; + s[4] = mh_rotl(s[4], 18u) + s[11]; + s[2] += s[4]; + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[9] -= s[1]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x0ffea53bu; + s[8] = mh_rotl(s[8], 5u) + s[14]; + s[3] += s[8] + 0x9ed7985eu; + s[6] += s[3]; + s[4] ^= s[6] ^ 0x1dd74ad9u; + s[13] += s[4]; + s[0] -= s[13]; + s[15] *= (s[0] | 1u); + s[12] ^= s[15]; + s[11] -= s[12]; + s[14] = mh_rotl(s[14], 27u) + s[11]; + s[6] += s[14]; + s[10] += s[6] + 0x2b37904eu; + s[8] = mh_rotl(s[8], 4u) + s[10]; + s[5] *= (s[8] | 1u); + s[0] = mh_rotl(s[0] ^ s[5], 14u); + s[13] ^= s[0]; + s[12] = s[12] * 0x77e0a5d3u + s[13]; + s[1] += s[12]; + s[13] = s[13] * 0x65318e55u + s[1]; + s[15] = mh_rotl(s[15], 29u) + s[13]; + s[13] -= s[15]; + s[12] = s[12] * 0xc4a25397u + s[13]; + s[0] ^= s[12]; + s[11] += s[0]; + s[5] = (s[5] ^ s[11]) * 0xeeadd5a3u; + s[15] = (s[15] ^ s[5]) * 0x731c68a3u; + s[0] += (s[15] | s[8]); + s[4] = s[4] * 0x51fb9437u + s[0]; + s[10] *= (s[4] | 1u); + s[12] *= (s[10] | 1u); + s[0] ^= (s[12] & s[8]); + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0x5eeca4fbu; + s[14] = mh_rotl(s[14] ^ s[0], 16u); + s[1] *= (s[14] | 1u); + s[3] *= (s[1] | 1u); + s[12] ^= s[3] ^ 0x705ffae7u; + s[11] ^= s[12] ^ 0x55f159afu; + s[10] = (s[10] ^ s[11]) * 0x631a1b7fu; + s[11] = mh_rotl(s[11], 17u) + s[10]; + s[7] += s[11]; + s[9] = mh_rotl(s[9], 27u) + s[7]; + s[12] ^= (s[9] & s[15]); + s[8] = mh_rotl(s[8], 22u) + s[12]; + s[9] ^= s[8]; + s[12] ^= (s[9] & s[5]); + s[7] += s[12]; + s[10] = mh_rotl(s[10], 14u) + s[7]; + s[15] += (s[10] | s[0]); + s[4] ^= s[15]; + s[5] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] ^= s[11]; + s[1] = mh_rotl(s[1], 3u) + s[14]; + s[11] *= (s[1] | 1u); + s[9] *= (s[11] | 1u); + s[3] = mh_rotl(s[3] ^ s[9], 2u); + s[12] = mh_rotl(s[12], 11u) + s[3]; + s[4] ^= s[12]; + s[12] *= (s[4] | 1u); + s[14] += s[12]; + s[8] = mh_rotl(s[8], 14u) + s[14]; + s[9] = mh_rotl(s[9] ^ s[8], 14u); + s[12] += s[9]; + s[13] = mh_rotl(s[13], 6u) + s[12]; + s[10] ^= s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 11u); + s[13] ^= s[12]; + s[2] += s[13]; + s[10] ^= s[2]; + s[15] += s[10] + 0x1634a71eu; + s[6] ^= s[15] ^ 0xd749a601u; + s[15] = (s[15] ^ s[6]) * 0x600e3ecbu; + s[12] += s[15]; + s[7] = s[7] * 0x0149e3ebu + s[12]; + s[15] += s[7]; + s[10] += s[15]; + s[13] = (s[13] ^ s[10]) * 0xa7c503e7u; + s[3] = mh_rotl(s[3] ^ s[13], 5u); + s[13] += s[3]; + s[14] ^= (s[13] & s[11]); + s[13] *= (s[14] | 1u); + s[8] ^= s[13]; + s[9] += (s[8] | s[5]); + s[12] = mh_rotl(s[12] ^ s[9], 29u); + s[15] ^= s[12] ^ 0x990f53b6u; + s[5] = mh_rotl(s[5], 30u) + s[15]; + s[3] -= s[5]; + s[11] += s[3]; + s[0] += s[11]; + s[10] *= (s[0] | 1u); + s[2] *= (s[10] | 1u); + s[12] ^= s[2]; + s[13] *= (s[12] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[1] ^= s[4] ^ 0xcd3069e4u; + s[0] = mh_rotl(s[0] ^ s[1], 3u); + s[15] ^= s[0] ^ 0x8c69c78du; + s[10] = mh_rotl(s[10], 21u) + s[15]; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 31u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[5] += s[11]; + s[13] ^= (s[5] & s[8]); + s[12] = (s[12] ^ s[13]) * 0x831edbe1u; + s[0] = mh_rotl(s[0], 24u) + s[12]; + s[11] ^= s[0]; + s[9] -= s[11]; + s[7] ^= s[9]; + s[8] = (s[8] ^ s[7]) * 0xc7e1cfddu; + s[12] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[12], 28u); + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[2] += s[3]; + s[9] += s[2]; + s[10] = mh_rotl(s[10], 21u) + s[9]; + s[13] = mh_rotl(s[13], 14u) + s[10]; + s[15] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 1u); + s[11] *= (s[7] | 1u); + s[9] += (s[11] | s[5]); + s[15] += s[9]; + s[10] += s[15] + 0xba60c9ecu; + s[9] = (s[9] ^ s[10]) * 0xd025f22du; + s[6] *= (s[9] | 1u); + s[0] *= (s[6] | 1u); + s[15] -= s[0]; + s[10] += s[15]; + s[0] += s[10] + 0xfb2e7c45u; + s[6] += s[0]; + s[10] = s[10] * 0xa719d3b5u + s[6]; + s[3] -= s[10]; + s[10] = s[10] * 0x4567f515u + s[3]; + s[6] = mh_rotl(s[6] ^ s[10], 3u); + s[15] ^= s[6]; + s[5] *= (s[15] | 1u); + s[9] += s[5] + 0x7add03edu; + s[8] += s[9] + 0x200dba17u; + s[15] += s[8]; + s[10] += s[15]; + s[0] -= s[10]; + s[8] ^= (s[0] & s[14]); + s[14] *= (s[8] | 1u); + s[7] += (s[14] | s[4]); + s[10] ^= s[7] ^ 0xfd92bbdeu; + s[6] += s[10] + 0xdfa6bf99u; + s[15] += s[6]; + s[0] -= s[15]; + s[13] *= (s[0] | 1u); + s[10] += s[13]; + s[14] = mh_rotl(s[14], 30u) + s[10]; + s[7] = mh_rotl(s[7] ^ s[14], 26u); + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[1] = mh_rotl(s[1] ^ s[4], 5u); + s[4] ^= s[1]; + s[8] ^= s[4] ^ 0x246709cfu; + s[4] += s[8]; + s[1] += s[4]; + s[0] += (s[1] | s[3]); + s[13] *= (s[0] | 1u); + s[3] -= s[13]; + s[6] += (s[3] | s[8]); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] += s[10]; + s[10] -= s[14]; + s[11] ^= (s[10] & s[2]); + s[13] ^= s[11]; + s[9] += (s[13] | s[15]); + s[4] += s[9]; + s[3] += s[4]; + s[14] -= s[3]; + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[8] += s[7]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[7] ^= s[3] ^ 0x139d83e8u; + s[6] += s[7]; + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[14] = mh_rotl(s[14] ^ s[4], 17u); + s[13] = mh_rotl(s[13], 22u) + s[14]; + s[8] += s[13]; + s[0] ^= s[8]; + s[8] ^= s[0]; + s[7] = (s[7] ^ s[8]) * 0x7d8b96a1u; + s[11] -= s[7]; + s[7] *= (s[11] | 1u); + s[13] += s[7] + 0x3dfedaadu; + s[6] = (s[6] ^ s[13]) * 0x02bf39b1u; + s[15] ^= s[6]; + s[10] += s[15]; + s[4] = mh_rotl(s[4], 24u) + s[10]; + s[6] = s[6] * 0xa211b535u + s[4]; + s[9] += s[6] + 0x6d1c8ec2u; + s[14] ^= s[9]; + s[1] ^= (s[14] & s[8]); + s[9] *= (s[1] | 1u); + s[11] *= (s[9] | 1u); + s[6] = mh_rotl(s[6] ^ s[11], 9u); + s[14] *= (s[6] | 1u); + s[5] -= s[14]; + s[3] *= (s[5] | 1u); + s[8] += s[3]; + s[15] += s[8]; + s[13] += s[15] + 0x4f61883fu; + s[15] = mh_rotl(s[15] ^ s[13], 17u); + s[0] += (s[15] | s[11]); + s[15] += s[0]; + s[2] -= s[15]; + s[8] -= s[2]; + s[5] *= (s[8] | 1u); + s[1] = (s[1] ^ s[5]) * 0x65420b47u; + s[12] = s[12] * 0x42ad8bf1u + s[1]; + s[15] += (s[12] | s[2]); + s[11] += s[15]; + s[7] = (s[7] ^ s[11]) * 0x24e3746bu; + s[1] ^= s[7]; + s[7] = mh_rotl(s[7], 31u) + s[1]; + s[0] ^= (s[7] & s[1]); + s[15] ^= s[0] ^ 0x47313c44u; + s[1] += s[15]; + s[11] ^= s[1]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[9] += s[12]; + s[2] -= s[9]; + s[1] = (s[1] ^ s[2]) * 0x9c164e0du; + s[10] += s[1]; + s[0] ^= s[10]; + s[6] ^= s[0]; + s[1] += s[6]; + s[15] = mh_rotl(s[15] ^ s[1], 4u); + s[14] -= s[15]; + s[7] ^= s[14]; + s[8] ^= s[7] ^ 0x2b5aacd6u; + s[13] += s[8]; + s[6] *= (s[13] | 1u); + s[1] = mh_rotl(s[1], 9u) + s[6]; + s[12] += (s[1] | s[7]); + s[8] ^= s[12]; + s[9] += (s[8] | s[11]); + s[14] += s[9] + 0x93a636aau; + s[13] -= s[14]; + s[0] = (s[0] ^ s[13]) * 0x0185d1f9u; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[9] ^= s[3]; + s[12] *= (s[9] | 1u); + s[4] += s[12]; + s[14] = mh_rotl(s[14] ^ s[4], 12u); + s[15] += s[14]; + s[0] = mh_rotl(s[0] ^ s[15], 11u); + s[5] -= s[0]; + s[9] -= s[5]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[13] -= s[5]; + s[2] += (s[13] | s[6]); + s[12] *= (s[2] | 1u); + s[5] = mh_rotl(s[5], 14u) + s[12]; + s[14] = s[14] * 0x37190e5fu + s[5]; + s[2] -= s[14]; + s[1] = mh_rotl(s[1], 25u) + s[2]; + s[15] += s[1]; + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[7] = mh_rotl(s[7], 15u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 13u); + s[5] *= (s[9] | 1u); + s[6] -= s[5]; + s[14] ^= s[6] ^ 0xf476d15fu; + s[13] ^= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[13] = mh_rotl(s[13] ^ s[10], 29u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[7] ^= s[4]; + s[10] = (s[10] ^ s[7]) * 0xa943fa7fu; + s[12] ^= s[10]; + s[3] = mh_rotl(s[3], 8u) + s[12]; + s[14] = (s[14] ^ s[3]) * 0x09fb17fdu; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] ^= s[7]; + s[7] ^= s[14]; + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[11] += s[8]; + s[2] += (s[11] | s[14]); + s[15] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 26u) + s[15]; + s[2] *= (s[3] | 1u); + s[4] -= s[2]; + s[3] += (s[4] | s[14]); + s[10] ^= s[3]; + s[0] -= s[10]; + s[13] ^= (s[0] & s[6]); + s[0] *= (s[13] | 1u); + s[5] *= (s[0] | 1u); + s[9] = mh_rotl(s[9], 12u) + s[5]; + s[3] ^= s[9]; + s[15] ^= (s[3] & s[1]); + s[8] = s[8] * 0x98abbf3du + s[15]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0x50468cebu; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[11] ^= s[1]; + s[15] = mh_rotl(s[15] ^ s[11], 9u); + s[13] = mh_rotl(s[13], 28u) + s[15]; + s[7] += s[13]; + s[14] = mh_rotl(s[14], 20u) + s[7]; + s[11] = (s[11] ^ s[14]) * 0x5091caadu; + s[7] ^= s[11] ^ 0x269d33e2u; + s[14] ^= s[7]; + s[5] = s[5] * 0x30d291edu + s[14]; + s[9] ^= s[5]; + s[10] += s[9]; + s[0] ^= s[10]; + s[7] *= (s[0] | 1u); + s[14] ^= s[7]; + s[2] -= s[14]; + s[13] += s[2]; + s[8] += s[13]; + s[12] ^= (s[8] & s[0]); + s[7] = mh_rotl(s[7], 8u) + s[12]; + s[0] = (s[0] ^ s[7]) * 0x1cae2a31u; + s[6] = mh_rotl(s[6], 29u) + s[0]; + s[10] ^= s[6] ^ 0xb9ccdbfdu; + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[1] *= (s[10] | 1u); + s[8] ^= (s[1] & s[4]); + s[4] ^= s[8] ^ 0x53da0b8au; + s[15] *= (s[4] | 1u); + s[13] -= s[15]; + s[1] += (s[13] | s[0]); + s[6] += (s[1] | s[4]); + s[4] ^= s[6]; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[6] -= s[1]; + s[5] += (s[6] | s[12]); + s[12] ^= s[5]; + s[15] = (s[15] ^ s[12]) * 0x458c7163u; + s[13] -= s[15]; + s[6] = mh_rotl(s[6] ^ s[13], 20u); + s[2] = (s[2] ^ s[6]) * 0x9c39a383u; + s[0] += s[2]; + s[12] ^= s[0] ^ 0x7cc2033au; + s[13] = mh_rotl(s[13] ^ s[12], 12u); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[15] = (s[15] ^ s[6]) * 0x0c9eb2cfu; + s[8] *= (s[15] | 1u); + s[2] += s[8]; + s[5] = mh_rotl(s[5], 19u) + s[2]; + s[8] *= (s[5] | 1u); + s[0] += s[8]; + s[6] = s[6] * 0x79f7c2dfu + s[0]; + s[14] += s[6]; + s[11] = s[11] * 0x5e817e5bu + s[14]; + s[14] ^= s[11]; + s[4] ^= s[14]; + s[9] += s[4] + 0xd46a416fu; + s[14] = s[14] * 0xa4a2923fu + s[9]; + s[7] *= (s[14] | 1u); + s[4] = (s[4] ^ s[7]) * 0x90bc8fcdu; + s[14] += s[4]; + s[7] = (s[7] ^ s[14]) * 0xf112f8f5u; + s[0] *= (s[7] | 1u); + s[12] -= s[0]; + s[3] ^= s[12]; + s[9] ^= s[3]; + s[5] = (s[5] ^ s[9]) * 0x24022a1du; + s[13] = mh_rotl(s[13], 25u) + s[5]; + s[1] *= (s[13] | 1u); + s[10] += s[1]; + s[12] = (s[12] ^ s[10]) * 0xa16c00d1u; + s[6] -= s[12]; + s[7] ^= s[6]; + s[10] ^= s[7] ^ 0x58615cc4u; + s[4] += s[10]; + s[3] *= (s[4] | 1u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[0] += s[4]; + s[3] ^= s[0]; + s[1] = mh_rotl(s[1], 20u) + s[3]; + s[13] ^= s[1] ^ 0x244eb2e2u; + s[0] ^= s[13] ^ 0x2273d5c0u; + s[15] ^= s[0]; + s[13] -= s[15]; + s[2] ^= s[13] ^ 0x7c995a78u; + s[4] -= s[2]; + s[14] ^= s[4]; + s[0] = mh_rotl(s[0], 29u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[0], 1u); + s[2] += (s[14] | s[1]); + s[10] += (s[2] | s[12]); + s[12] ^= s[10]; + s[6] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 30u) + s[6]; + s[12] ^= s[9]; + s[14] -= s[12]; + s[11] += s[14]; + s[10] += (s[11] | s[6]); + s[2] += (s[10] | s[5]); + s[1] = mh_rotl(s[1] ^ s[2], 29u); + s[6] = s[6] * 0xd99bd00bu + s[1]; + s[1] = (s[1] ^ s[6]) * 0xe0d965a7u; + s[7] += s[1] + 0x51b2428bu; + s[15] ^= s[7] ^ 0x50b8787bu; + s[0] += s[15] + 0xfe2752f1u; + s[4] += s[0] + 0x0e368287u; + s[1] += s[4]; + s[6] ^= s[1] ^ 0xe35b392eu; + s[2] = mh_rotl(s[2], 23u) + s[6]; + s[9] ^= s[2]; + s[15] = s[15] * 0xd6a40fabu + s[9]; + s[5] -= s[15]; + s[2] += s[5]; + s[6] = mh_rotl(s[6] ^ s[2], 8u); + s[5] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[4] += s[13] + 0x53640c05u; + s[0] = mh_rotl(s[0] ^ s[4], 7u); + s[13] ^= s[0]; + s[9] *= (s[13] | 1u); + s[0] ^= s[9]; + s[10] = s[10] * 0x843679c9u + s[0]; + s[6] = mh_rotl(s[6] ^ s[10], 29u); + s[14] = mh_rotl(s[14] ^ s[6], 12u); + s[1] += s[14]; + s[13] = s[13] * 0xa749a1b5u + s[1]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[2] = (s[2] ^ s[12]) * 0x5b1ce1c1u; + s[15] *= (s[2] | 1u); + s[12] ^= (s[15] & s[9]); + s[0] = mh_rotl(s[0] ^ s[12], 25u); + s[14] ^= s[0]; + s[3] *= (s[14] | 1u); + s[8] ^= s[3] ^ 0x6ca032cbu; + s[4] -= s[8]; + s[12] ^= s[4] ^ 0x7728b3cbu; + s[7] += (s[12] | s[8]); + s[5] = s[5] * 0x0ae2c6cdu + s[7]; + s[0] += s[5]; + s[9] = mh_rotl(s[9], 24u) + s[0]; + s[1] -= s[9]; + s[11] ^= s[1] ^ 0xf5da2550u; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[3] += s[8] + 0xa4fe9e4bu; + s[14] *= (s[3] | 1u); + s[6] = (s[6] ^ s[14]) * 0xbd9356a9u; + s[12] = mh_rotl(s[12] ^ s[6], 7u); + s[7] = (s[7] ^ s[12]) * 0x875f73bfu; + s[1] -= s[7]; + s[14] = (s[14] ^ s[1]) * 0x1e7b97f7u; + s[6] = s[6] * 0x577deaddu + s[14]; + s[13] ^= s[6]; + s[4] *= (s[13] | 1u); + s[3] ^= s[4]; + s[15] ^= s[3] ^ 0x28e94074u; + s[0] = (s[0] ^ s[15]) * 0x6b8272cdu; + s[8] *= (s[0] | 1u); + s[3] ^= s[8]; + s[0] = s[0] * 0x0b665f15u + s[3]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 3u) + s[7]; + s[4] += s[14]; + s[12] = mh_rotl(s[12], 23u) + s[4]; + s[15] = mh_rotl(s[15], 31u) + s[12]; + s[8] += s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[1] += (s[4] | s[8]); + s[5] += s[1]; + s[9] += s[5]; + s[12] += s[9]; + s[1] = mh_rotl(s[1], 13u) + s[12]; + s[2] *= (s[1] | 1u); + s[4] -= s[2]; + s[11] = mh_rotl(s[11], 31u) + s[4]; + s[2] = mh_rotl(s[2], 2u) + s[11]; + s[7] += s[2] + 0x9a35b39au; + s[6] += (s[7] | s[13]); + s[0] *= (s[6] | 1u); + s[9] += (s[0] | s[8]); + s[14] = mh_rotl(s[14], 25u) + s[9]; + s[15] = mh_rotl(s[15], 4u) + s[14]; + s[6] ^= s[15]; + s[12] ^= s[6]; + s[10] += s[12] + 0x5cb2267au; + s[1] += s[10]; + s[15] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[15], 28u); + s[6] = mh_rotl(s[6], 19u) + s[13]; + s[3] += s[6] + 0xd7c31b8du; + s[14] = s[14] * 0x3b0ab799u + s[3]; + s[4] += s[14] + 0x3536b1f6u; + s[2] -= s[4]; + s[12] += (s[2] | s[11]); + s[11] ^= s[12] ^ 0xbf42c333u; + s[3] = (s[3] ^ s[11]) * 0xde9b7ca9u; + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[3] = mh_rotl(s[3] ^ s[5], 29u); + s[15] = mh_rotl(s[15] ^ s[3], 4u); + s[5] ^= s[15]; + s[14] ^= (s[5] & s[6]); + s[8] += (s[14] | s[0]); + s[12] = mh_rotl(s[12], 17u) + s[8]; + s[1] ^= s[12]; + s[10] = mh_rotl(s[10] ^ s[1], 26u); + s[13] = mh_rotl(s[13], 15u) + s[10]; + s[10] += s[13]; + s[12] -= s[10]; + s[4] ^= s[12] ^ 0xc9739849u; + s[2] ^= s[4] ^ 0x31699b20u; + s[12] += s[2]; + s[15] += s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[11] -= s[9]; + s[0] = mh_rotl(s[0] ^ s[11], 6u); + s[12] ^= (s[0] & s[7]); + s[14] ^= s[12] ^ 0x9419731fu; + s[7] = (s[7] ^ s[14]) * 0x394edfa7u; + s[11] = mh_rotl(s[11] ^ s[7], 8u); + s[13] += s[11]; + s[14] = (s[14] ^ s[13]) * 0xd8bdcc5bu; + s[8] += s[14]; + s[1] ^= s[8] ^ 0x7c3166e1u; + s[9] ^= s[1]; + s[2] *= (s[9] | 1u); + s[3] = mh_rotl(s[3], 25u) + s[2]; + s[5] += s[3]; + s[8] = (s[8] ^ s[5]) * 0x40545eedu; + s[7] ^= s[8]; + s[4] = (s[4] ^ s[7]) * 0x968dc0c3u; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[10] = mh_rotl(s[10], 20u) + s[1]; + s[1] ^= (s[10] & s[5]); + s[5] -= s[1]; + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[12] -= s[9]; + s[5] = s[5] * 0x2fa421c3u + s[12]; + s[0] += s[5] + 0xd84eb599u; + s[14] ^= s[0]; + s[12] += s[14] + 0x9fa50493u; + s[3] = (s[3] ^ s[12]) * 0x4d23b04du; + s[10] = s[10] * 0x78de01f5u + s[3]; + s[0] *= (s[10] | 1u); + s[3] += s[0]; + s[1] ^= s[3] ^ 0x3cb60603u; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[10] ^= (s[12] & s[1]); + s[2] *= (s[10] | 1u); + s[8] += s[2]; + s[13] -= s[8]; + s[2] *= (s[13] | 1u); + s[4] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 7u) + s[4]; + s[15] -= s[7]; + s[12] *= (s[15] | 1u); + s[1] ^= s[12]; + s[5] -= s[1]; + s[14] += s[5] + 0x36981c70u; + s[4] ^= s[14] ^ 0x71a79181u; + s[6] += s[4]; + s[8] ^= s[6]; + s[7] ^= s[8]; + s[14] ^= s[7]; + s[7] = (s[7] ^ s[14]) * 0x097a3803u; + s[4] *= (s[7] | 1u); + s[11] ^= (s[4] & s[10]); + s[4] += s[11]; + s[7] = (s[7] ^ s[4]) * 0x85738709u; + s[3] = mh_rotl(s[3] ^ s[7], 11u); + s[10] = mh_rotl(s[10], 10u) + s[3]; + s[2] += (s[10] | s[9]); + s[10] = (s[10] ^ s[2]) * 0x94c5048bu; + s[15] += s[10]; + s[8] += s[15] + 0x0b5cc6efu; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[14] = mh_rotl(s[14] ^ s[5], 25u); + s[3] ^= s[14] ^ 0x111815f3u; + s[8] += s[3]; + s[7] ^= s[8]; + s[11] ^= s[7] ^ 0x4e2582d7u; + s[9] += (s[11] | s[8]); + s[14] ^= s[9]; + s[7] -= s[14]; + s[8] = mh_rotl(s[8], 9u) + s[7]; + s[4] = (s[4] ^ s[8]) * 0xaac84b51u; + s[15] ^= s[4]; + s[1] = mh_rotl(s[1] ^ s[15], 3u); + s[7] = mh_rotl(s[7], 7u) + s[1]; + s[0] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[11] += s[2] + 0x98edfcf5u; + s[6] += s[11]; + s[2] = (s[2] ^ s[6]) * 0xa136e64du; + s[12] *= (s[2] | 1u); + s[8] = (s[8] ^ s[12]) * 0xce39a005u; + s[3] += s[8]; + s[7] ^= s[3]; + s[2] = mh_rotl(s[2] ^ s[7], 6u); + s[10] = mh_rotl(s[10] ^ s[2], 19u); + s[7] -= s[10]; + s[0] += s[7]; + s[7] = (s[7] ^ s[0]) * 0xcb29f5cbu; + s[4] *= (s[7] | 1u); + s[12] += s[4] + 0x4a2ccb18u; + s[8] = mh_rotl(s[8] ^ s[12], 28u); + s[2] *= (s[8] | 1u); + s[13] *= (s[2] | 1u); + s[3] = (s[3] ^ s[13]) * 0x8e193255u; + s[10] += s[3]; + s[8] += s[10]; + s[14] ^= (s[8] & s[6]); + s[12] ^= s[14]; + s[9] = (s[9] ^ s[12]) * 0x5b862b41u; + s[1] += s[9]; + s[10] ^= s[1] ^ 0xa652e937u; + s[0] = mh_rotl(s[0], 21u) + s[10]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[14] = (s[14] ^ s[12]) * 0x301b4ff9u; + s[13] = s[13] * 0x12fb71b3u + s[14]; + s[6] = mh_rotl(s[6] ^ s[13], 2u); + s[12] -= s[6]; + s[0] ^= s[12]; + s[11] = mh_rotl(s[11], 9u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[11], 17u); + s[12] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[12], 9u); + s[2] += s[14]; + s[4] ^= s[2]; + s[15] -= s[4]; + s[11] -= s[15]; + s[0] = s[0] * 0x9ae119bfu + s[11]; + s[14] ^= s[0]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[7] *= (s[8] | 1u); + s[10] -= s[7]; + s[5] -= s[10]; + s[2] += s[5] + 0xbb07e4b1u; + s[8] ^= s[2]; + s[9] += s[8]; + s[5] ^= s[9]; + s[1] = (s[1] ^ s[5]) * 0x350b4999u; + s[4] += s[1]; + s[9] = mh_rotl(s[9] ^ s[4], 27u); + s[6] = (s[6] ^ s[9]) * 0x367cc161u; + s[9] -= s[6]; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[8] ^= s[0] ^ 0x75d9afc5u; + s[14] = mh_rotl(s[14] ^ s[8], 10u); + s[7] += s[14] + 0x1912ec89u; + s[10] += (s[7] | s[4]); + s[0] -= s[10]; + s[3] += s[0]; + s[6] -= s[3]; + s[12] = (s[12] ^ s[6]) * 0x4c6c192du; + s[13] += (s[12] | s[5]); + s[3] = mh_rotl(s[3] ^ s[13], 25u); + s[13] = mh_rotl(s[13], 22u) + s[3]; + s[0] += s[13]; + s[12] -= s[0]; + s[10] ^= (s[12] & s[3]); + s[6] += s[10]; + s[2] = mh_rotl(s[2] ^ s[6], 19u); + s[6] -= s[2]; + s[9] += s[6]; + s[10] = s[10] * 0x6d659893u + s[9]; + s[11] ^= s[10]; + s[9] = (s[9] ^ s[11]) * 0x63085b93u; + s[4] ^= s[9] ^ 0xfa7139dbu; + s[11] = mh_rotl(s[11] ^ s[4], 31u); + s[4] -= s[11]; + s[10] += s[4]; + s[14] += s[10]; + s[9] = s[9] * 0x3564c517u + s[14]; + s[13] ^= s[9]; + s[4] += s[13]; + s[7] += s[4]; + s[13] = mh_rotl(s[13] ^ s[7], 5u); + s[6] ^= s[13]; + s[7] ^= s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 25u); + s[4] -= s[8]; + s[0] *= (s[4] | 1u); + s[4] *= (s[0] | 1u); + s[8] += s[4]; + s[2] *= (s[8] | 1u); + s[6] += s[2] + 0xbfdaf7b1u; + s[9] ^= s[6]; + s[1] = (s[1] ^ s[9]) * 0x3c5c1b5bu; + s[6] -= s[1]; + s[4] = mh_rotl(s[4], 11u) + s[6]; + s[3] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[3]; + s[8] = mh_rotl(s[8], 19u) + s[0]; + s[12] = (s[12] ^ s[8]) * 0x25e88231u; + s[0] -= s[12]; + s[4] ^= (s[0] & s[2]); + s[9] ^= (s[4] & s[6]); + s[5] = (s[5] ^ s[9]) * 0x3c0d5df5u; + s[6] += s[5]; + s[2] -= s[6]; + s[12] ^= s[2]; + s[1] += s[12] + 0x4dc4b094u; + s[10] ^= s[1]; + s[6] += s[10]; + s[7] += s[6] + 0x43a99a33u; + s[6] = s[6] * 0xdee0e37fu + s[7]; + s[12] = (s[12] ^ s[6]) * 0xc8a25e85u; + s[1] += (s[12] | s[3]); + s[12] ^= s[1]; + s[15] += s[12]; + s[4] = mh_rotl(s[4] ^ s[15], 17u); +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_1(uint* s) { + s[1] += s[0]; + s[3] += s[1] + 0xad481039u; + s[11] += (s[3] | s[2]); + s[1] ^= (s[11] & s[12]); + s[14] -= s[1]; + s[10] += s[14] + 0x55885317u; + s[4] -= s[10]; + s[15] = mh_rotl(s[15] ^ s[4], 4u); + s[6] += s[15]; + s[13] = mh_rotl(s[13] ^ s[6], 20u); + s[11] = (s[11] ^ s[13]) * 0xff0504adu; + s[1] = (s[1] ^ s[11]) * 0x250dc94bu; + s[15] += s[1]; + s[12] *= (s[15] | 1u); + s[7] += s[12]; + s[8] ^= s[7]; + s[11] ^= (s[8] & s[7]); + s[4] = (s[4] ^ s[11]) * 0xcdf53d85u; + s[10] = (s[10] ^ s[4]) * 0xee957d9fu; + s[9] = (s[9] ^ s[10]) * 0x306403a5u; + s[7] -= s[9]; + s[12] ^= s[7]; + s[15] *= (s[12] | 1u); + s[2] -= s[15]; + s[11] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 29u); + s[11] += s[8] + 0x053c715du; + s[0] = (s[0] ^ s[11]) * 0x6e7f6f63u; + s[5] = mh_rotl(s[5] ^ s[0], 4u); + s[8] = (s[8] ^ s[5]) * 0xec01af93u; + s[13] = s[13] * 0x0c236ed3u + s[8]; + s[3] *= (s[13] | 1u); + s[9] ^= (s[3] & s[7]); + s[5] ^= s[9]; + s[12] += s[5]; + s[6] += s[12]; + s[3] -= s[6]; + s[13] *= (s[3] | 1u); + s[12] ^= (s[13] & s[15]); + s[3] = mh_rotl(s[3] ^ s[12], 11u); + s[0] = mh_rotl(s[0] ^ s[3], 22u); + s[9] += s[0] + 0x6379358cu; + s[8] ^= s[9]; + s[2] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 1u) + s[2]; + s[4] += s[9] + 0xc0eff105u; + s[10] ^= s[4]; + s[3] *= (s[10] | 1u); + s[11] += s[3]; + s[9] -= s[11]; + s[7] += s[9]; + s[9] -= s[7]; + s[8] = (s[8] ^ s[9]) * 0x820df9e3u; + s[2] = (s[2] ^ s[8]) * 0xe294988du; + s[7] = mh_rotl(s[7] ^ s[2], 20u); + s[6] += s[7]; + s[15] ^= s[6]; + s[9] *= (s[15] | 1u); + s[14] = mh_rotl(s[14] ^ s[9], 27u); + s[4] -= s[14]; + s[10] ^= s[4] ^ 0xea83d71fu; + s[3] = mh_rotl(s[3] ^ s[10], 23u); + s[10] += s[3]; + s[8] *= (s[10] | 1u); + s[1] ^= (s[8] & s[4]); + s[2] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[10] ^= s[14]; + s[14] += s[10]; + s[9] -= s[14]; + s[11] = (s[11] ^ s[9]) * 0xa98b9719u; + s[3] ^= s[11]; + s[5] = mh_rotl(s[5], 11u) + s[3]; + s[8] = (s[8] ^ s[5]) * 0x390f56e7u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[15] *= (s[10] | 1u); + s[1] = mh_rotl(s[1], 26u) + s[15]; + s[13] += (s[1] | s[15]); + s[10] = mh_rotl(s[10] ^ s[13], 17u); + s[1] -= s[10]; + s[15] -= s[1]; + s[4] += (s[15] | s[7]); + s[2] ^= s[4]; + s[0] ^= s[2] ^ 0x6f973e2fu; + s[3] = mh_rotl(s[3] ^ s[0], 29u); + s[4] = (s[4] ^ s[3]) * 0x0b66808fu; + s[3] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 12u) + s[3]; + s[10] *= (s[15] | 1u); + s[7] = (s[7] ^ s[10]) * 0x748e238bu; + s[14] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 21u); + s[15] *= (s[5] | 1u); + s[8] ^= s[15]; + s[7] ^= s[8] ^ 0x905950c7u; + s[8] ^= s[7]; + s[2] += s[8] + 0x28a71f71u; + s[9] += (s[2] | s[6]); + s[14] ^= (s[9] & s[10]); + s[13] ^= s[14] ^ 0x4778ae11u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[15] += s[0]; + s[14] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[14], 5u); + s[2] -= s[5]; + s[13] = mh_rotl(s[13], 18u) + s[2]; + s[10] -= s[13]; + s[9] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[9], 2u); + s[6] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[3] ^= s[2] ^ 0x3ded9adbu; + s[10] = s[10] * 0x4a716aafu + s[3]; + s[3] ^= s[10]; + s[12] = mh_rotl(s[12] ^ s[3], 16u); + s[3] += s[12]; + s[4] ^= s[3]; + s[13] ^= s[4]; + s[3] ^= s[13] ^ 0x244807b5u; + s[6] = s[6] * 0x3b67fdabu + s[3]; + s[14] = mh_rotl(s[14], 19u) + s[6]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] += s[8] + 0x283e5272u; + s[6] = mh_rotl(s[6], 17u) + s[4]; + s[4] ^= (s[6] & s[15]); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[9] = s[9] * 0x24d40dcbu + s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 22u); + s[3] += s[15]; + s[12] += s[3]; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 18u); + s[10] ^= s[15]; + s[14] += (s[10] | s[2]); + s[10] += s[14]; + s[2] = (s[2] ^ s[10]) * 0xbfbdab53u; + s[4] += s[2]; + s[8] += s[4] + 0x229e9450u; + s[2] ^= s[8]; + s[13] ^= s[2] ^ 0xd069b71au; + s[1] ^= s[13]; + s[14] = mh_rotl(s[14], 5u) + s[1]; + s[11] = mh_rotl(s[11], 11u) + s[14]; + s[2] ^= s[11]; + s[1] ^= s[2] ^ 0x87a0df98u; + s[3] ^= s[1] ^ 0x4012f8c8u; + s[10] ^= s[3]; + s[8] *= (s[10] | 1u); + s[3] += (s[8] | s[1]); + s[0] = mh_rotl(s[0], 24u) + s[3]; + s[10] += s[0] + 0x838435e8u; + s[3] = (s[3] ^ s[10]) * 0xd8ccc2b9u; + s[7] ^= s[3] ^ 0xa58f06ddu; + s[2] ^= s[7]; + s[0] += s[2]; + s[12] ^= s[0]; + s[6] ^= s[12]; + s[7] += s[6]; + s[12] = mh_rotl(s[12] ^ s[7], 25u); + s[4] ^= s[12]; + s[0] += (s[4] | s[5]); + s[11] *= (s[0] | 1u); + s[13] += s[11]; + s[15] = (s[15] ^ s[13]) * 0x49c15b43u; + s[10] = mh_rotl(s[10], 25u) + s[15]; + s[14] = mh_rotl(s[14] ^ s[10], 11u); + s[6] = mh_rotl(s[6], 28u) + s[14]; + s[5] *= (s[6] | 1u); + s[12] *= (s[5] | 1u); + s[3] *= (s[12] | 1u); + s[10] ^= s[3]; + s[15] ^= s[10]; + s[12] ^= s[15]; + s[6] ^= (s[12] & s[7]); + s[14] *= (s[6] | 1u); + s[12] ^= s[14] ^ 0xf5bafba8u; + s[15] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[15]; + s[9] ^= s[5]; + s[12] = mh_rotl(s[12], 6u) + s[9]; + s[10] ^= s[12]; + s[3] = (s[3] ^ s[10]) * 0x38f1a685u; + s[4] = s[4] * 0xcb7e5d23u + s[3]; + s[5] += s[4]; + s[10] = mh_rotl(s[10], 15u) + s[5]; + s[2] *= (s[10] | 1u); + s[12] -= s[2]; + s[7] ^= s[12]; + s[11] *= (s[7] | 1u); + s[6] = (s[6] ^ s[11]) * 0x72fff2bfu; + s[9] = mh_rotl(s[9], 9u) + s[6]; + s[11] *= (s[9] | 1u); + s[4] = mh_rotl(s[4] ^ s[11], 5u); + s[15] *= (s[4] | 1u); + s[13] = (s[13] ^ s[15]) * 0x137c61d9u; + s[9] += s[13]; + s[12] += (s[9] | s[8]); + s[7] = (s[7] ^ s[12]) * 0x60952fddu; + s[10] = mh_rotl(s[10] ^ s[7], 20u); + s[4] ^= s[10]; + s[2] ^= s[4]; + s[10] ^= s[2] ^ 0x1de54f3au; + s[14] ^= s[10]; + s[0] += s[14]; + s[12] ^= s[0] ^ 0x62facf82u; + s[15] ^= s[12]; + s[12] = mh_rotl(s[12], 13u) + s[15]; + s[14] = s[14] * 0xc82501bdu + s[12]; + s[0] -= s[14]; + s[11] = s[11] * 0x11744345u + s[0]; + s[3] = (s[3] ^ s[11]) * 0x9270eedfu; + s[9] += s[3] + 0x36b61dc9u; + s[15] += s[9] + 0x9d5947e1u; + s[8] = s[8] * 0x6f00fe17u + s[15]; + s[1] -= s[8]; + s[12] = (s[12] ^ s[1]) * 0x51e09723u; + s[4] += s[12]; + s[6] = mh_rotl(s[6], 23u) + s[4]; + s[11] += s[6] + 0x8b5f9427u; + s[7] *= (s[11] | 1u); + s[1] -= s[7]; + s[0] = s[0] * 0xab66ab6fu + s[1]; + s[13] *= (s[0] | 1u); + s[6] *= (s[13] | 1u); + s[9] += (s[6] | s[4]); + s[10] = (s[10] ^ s[9]) * 0x79592bfdu; + s[4] += s[10]; + s[5] = (s[5] ^ s[4]) * 0x8ba30269u; + s[3] = mh_rotl(s[3] ^ s[5], 17u); + s[9] += s[3] + 0x044adf30u; + s[0] = mh_rotl(s[0] ^ s[9], 5u); + s[14] ^= (s[0] & s[13]); + s[8] -= s[14]; + s[3] = (s[3] ^ s[8]) * 0xb32093b1u; + s[1] = mh_rotl(s[1] ^ s[3], 18u); + s[7] -= s[1]; + s[2] *= (s[7] | 1u); + s[14] = mh_rotl(s[14], 28u) + s[2]; + s[3] ^= s[14]; + s[14] += s[3]; + s[4] ^= s[14]; + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[15] = (s[15] ^ s[12]) * 0x35a4d8cbu; + s[14] += (s[15] | s[5]); + s[10] = mh_rotl(s[10] ^ s[14], 4u); + s[2] -= s[10]; + s[3] ^= s[2]; + s[11] = (s[11] ^ s[3]) * 0x1006ee2fu; + s[12] = mh_rotl(s[12], 20u) + s[11]; + s[4] = (s[4] ^ s[12]) * 0xca4aa4c3u; + s[15] *= (s[4] | 1u); + s[4] ^= (s[15] & s[3]); + s[13] -= s[4]; + s[10] += s[13] + 0xe5c86cb9u; + s[14] ^= s[10] ^ 0x5604f25du; + s[13] += s[14] + 0xe43d82cbu; + s[14] = mh_rotl(s[14] ^ s[13], 23u); + s[4] -= s[14]; + s[9] -= s[4]; + s[10] += s[9]; + s[9] += s[10]; + s[1] = (s[1] ^ s[9]) * 0x1bd8783du; + s[2] -= s[1]; + s[0] = (s[0] ^ s[2]) * 0x50dc547bu; + s[3] ^= s[0]; + s[6] -= s[3]; + s[2] += s[6]; + s[14] *= (s[2] | 1u); + s[10] ^= s[14]; + s[3] -= s[10]; + s[9] *= (s[3] | 1u); + s[4] = mh_rotl(s[4] ^ s[9], 1u); + s[9] += s[4]; + s[11] ^= s[9] ^ 0xcca1df60u; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0xfed45f11u; + s[6] = mh_rotl(s[6], 6u) + s[12]; + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[12] += s[13]; + s[5] -= s[12]; + s[10] = s[10] * 0xe661ba67u + s[5]; + s[6] = (s[6] ^ s[10]) * 0x38950a4fu; + s[9] = (s[9] ^ s[6]) * 0xd8e5439du; + s[11] = (s[11] ^ s[9]) * 0x5eb0f1a5u; + s[15] += s[11] + 0x4b16aaa7u; + s[7] += s[15]; + s[9] ^= s[7]; + s[8] ^= s[9] ^ 0x4e4132c7u; + s[6] += s[8]; + s[2] ^= s[6]; + s[13] -= s[2]; + s[9] += s[13] + 0x45441a4fu; + s[10] = mh_rotl(s[10] ^ s[9], 26u); + s[15] = mh_rotl(s[15], 23u) + s[10]; + s[14] ^= s[15]; + s[15] ^= s[14]; + s[11] = s[11] * 0x530c5d95u + s[15]; + s[12] += (s[11] | s[10]); + s[15] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[15], 28u); + s[9] = s[9] * 0x9d85d8abu + s[12]; + s[1] = mh_rotl(s[1], 23u) + s[9]; + s[5] = (s[5] ^ s[1]) * 0xab9db7cdu; + s[4] = (s[4] ^ s[5]) * 0xac76806du; + s[7] ^= s[4] ^ 0xb250e43cu; + s[10] += s[7]; + s[3] = mh_rotl(s[3], 15u) + s[10]; + s[2] += s[3] + 0x56ffdd08u; + s[10] ^= (s[2] & s[15]); + s[13] = mh_rotl(s[13] ^ s[10], 10u); + s[1] = mh_rotl(s[1], 11u) + s[13]; + s[3] -= s[1]; + s[13] = (s[13] ^ s[3]) * 0x7f82e3cbu; + s[11] = mh_rotl(s[11], 16u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[11], 8u); + s[15] = mh_rotl(s[15] ^ s[10], 8u); + s[14] -= s[15]; + s[5] ^= s[14]; + s[2] ^= s[5] ^ 0x8be07a00u; + s[4] = (s[4] ^ s[2]) * 0xf8afeb21u; + s[14] ^= s[4]; + s[2] = mh_rotl(s[2] ^ s[14], 1u); + s[9] -= s[2]; + s[11] = mh_rotl(s[11], 23u) + s[9]; + s[2] += s[11]; + s[11] = mh_rotl(s[11], 23u) + s[2]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[2] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 17u) + s[2]; + s[5] = s[5] * 0x02194355u + s[3]; + s[11] *= (s[5] | 1u); + s[1] *= (s[11] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 8u); + s[8] ^= s[10]; + s[9] += s[8]; + s[0] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[0]; + s[11] ^= (s[1] & s[2]); + s[13] = (s[13] ^ s[11]) * 0x6c9dbd19u; + s[11] += s[13]; + s[9] ^= s[11]; + s[3] = mh_rotl(s[3] ^ s[9], 6u); + s[15] *= (s[3] | 1u); + s[13] -= s[15]; + s[6] += s[13]; + s[9] ^= s[6] ^ 0x792555d6u; + s[3] = mh_rotl(s[3], 3u) + s[9]; + s[10] *= (s[3] | 1u); + s[2] = s[2] * 0x903bff0du + s[10]; + s[5] -= s[2]; + s[11] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[11], 31u); + s[11] -= s[9]; + s[2] = mh_rotl(s[2] ^ s[11], 24u); + s[5] = mh_rotl(s[5] ^ s[2], 24u); + s[7] += s[5]; + s[13] ^= s[7]; + s[12] -= s[13]; + s[5] += (s[12] | s[0]); + s[8] += s[5] + 0xaab979aau; + s[1] ^= s[8]; + s[13] += s[1] + 0xe5e6fc71u; + s[6] = mh_rotl(s[6] ^ s[13], 15u); + s[1] += s[6]; + s[2] += s[1]; + s[9] += (s[2] | s[11]); + s[10] ^= s[9]; + s[7] = s[7] * 0x2f536f71u + s[10]; + s[5] += s[7]; + s[0] = mh_rotl(s[0] ^ s[5], 5u); + s[13] -= s[0]; + s[9] += s[13]; + s[10] = mh_rotl(s[10] ^ s[9], 22u); + s[12] ^= (s[10] & s[13]); + s[6] += s[12] + 0x70c39328u; + s[2] += s[6] + 0x90a3925du; + s[10] += s[2]; + s[12] *= (s[10] | 1u); + s[9] -= s[12]; + s[10] = mh_rotl(s[10], 16u) + s[9]; + s[9] -= s[10]; + s[8] ^= (s[9] & s[15]); + s[4] ^= s[8]; + s[1] ^= s[4]; + s[3] = (s[3] ^ s[1]) * 0xc8cf6af9u; + s[12] ^= s[3]; + s[15] *= (s[12] | 1u); + s[1] = (s[1] ^ s[15]) * 0x19cdfb9du; + s[6] = s[6] * 0x199cfd21u + s[1]; + s[9] ^= s[6]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x2e1b9e84u; + s[11] = mh_rotl(s[11], 4u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 22u); + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] ^= s[8]; + s[5] ^= s[4]; + s[11] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[11], 13u); + s[10] += s[8] + 0x50912ebdu; + s[14] = (s[14] ^ s[10]) * 0x0ba09b01u; + s[6] ^= s[14]; + s[7] ^= s[6]; + s[13] += (s[7] | s[14]); + s[14] -= s[13]; + s[1] ^= s[14] ^ 0x4ada39c6u; + s[10] ^= s[1]; + s[2] ^= (s[10] & s[9]); + s[12] += s[2] + 0x909c30c1u; + s[9] += s[12]; + s[0] ^= s[9]; + s[4] -= s[0]; + s[7] ^= s[4]; + s[4] = (s[4] ^ s[7]) * 0xf96f3573u; + s[3] += s[4] + 0x9c417efdu; + s[13] += (s[3] | s[5]); + s[4] += s[13]; + s[6] ^= s[4]; + s[14] += s[6] + 0xb0989acbu; + s[15] -= s[14]; + s[2] += s[15]; + s[6] += s[2]; + s[2] ^= s[6]; + s[15] = s[15] * 0x1e3b63f3u + s[2]; + s[7] ^= s[15]; + s[3] += s[7] + 0xbaedebabu; + s[9] += (s[3] | s[5]); + s[10] *= (s[9] | 1u); + s[9] += s[10]; + s[11] ^= s[9]; + s[2] *= (s[11] | 1u); + s[7] ^= s[2]; + s[1] += s[7]; + s[2] = (s[2] ^ s[1]) * 0x358e9d21u; + s[7] += s[2] + 0xa87c4bbfu; + s[5] = mh_rotl(s[5] ^ s[7], 9u); + s[7] += s[5] + 0x32cba03cu; + s[12] += s[7]; + s[3] ^= s[12] ^ 0x8eca1054u; + s[8] = (s[8] ^ s[3]) * 0xb2f6c0e3u; + s[4] = (s[4] ^ s[8]) * 0x13f1ccd5u; + s[3] = (s[3] ^ s[4]) * 0x73023badu; + s[15] -= s[3]; + s[3] *= (s[15] | 1u); + s[15] -= s[3]; + s[12] ^= s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 19u); + s[4] += s[10]; + s[11] ^= s[4]; + s[15] += s[11] + 0x1b7c0167u; + s[13] ^= (s[15] & s[12]); + s[10] = mh_rotl(s[10] ^ s[13], 27u); + s[11] -= s[10]; + s[6] += s[11] + 0xf9ac3792u; + s[4] = (s[4] ^ s[6]) * 0x52e3447bu; + s[1] = s[1] * 0xbe66f197u + s[4]; + s[9] = mh_rotl(s[9], 3u) + s[1]; + s[1] = mh_rotl(s[1] ^ s[9], 21u); + s[11] += s[1]; + s[14] ^= s[11]; + s[6] -= s[14]; + s[1] -= s[6]; + s[7] ^= s[1]; + s[3] ^= s[7] ^ 0xf278acc2u; + s[1] ^= s[3]; + s[0] = mh_rotl(s[0] ^ s[1], 6u); + s[3] += s[0]; + s[2] += s[3] + 0xe2de919du; + s[12] ^= s[2] ^ 0x988db119u; + s[9] += s[12]; + s[13] = mh_rotl(s[13] ^ s[9], 5u); + s[4] = (s[4] ^ s[13]) * 0x5d32587fu; + s[7] += s[4]; + s[15] ^= s[7]; + s[0] += s[15]; + s[9] = (s[9] ^ s[0]) * 0x2861edb3u; + s[5] = s[5] * 0x4f38626du + s[9]; + s[8] = mh_rotl(s[8] ^ s[5], 11u); + s[0] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[0], 6u); + s[9] += s[2]; + s[2] = mh_rotl(s[2], 8u) + s[9]; + s[12] -= s[2]; + s[2] -= s[12]; + s[15] ^= s[2]; + s[12] = mh_rotl(s[12], 16u) + s[15]; + s[5] = (s[5] ^ s[12]) * 0xeca1d1fdu; + s[3] -= s[5]; + s[13] = s[13] * 0x95ffad7fu + s[3]; + s[14] *= (s[13] | 1u); + s[9] ^= s[14]; + s[1] = (s[1] ^ s[9]) * 0xb641fe73u; + s[15] = (s[15] ^ s[1]) * 0x75882ff1u; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[15] = mh_rotl(s[15], 28u) + s[9]; + s[11] *= (s[15] | 1u); + s[13] = (s[13] ^ s[11]) * 0xaedd87b7u; + s[5] *= (s[13] | 1u); + s[11] = s[11] * 0xde5d8dddu + s[5]; + s[10] += s[11]; + s[5] ^= (s[10] & s[12]); + s[9] = mh_rotl(s[9], 2u) + s[5]; + s[13] ^= s[9]; + s[5] ^= s[13]; + s[13] = mh_rotl(s[13], 22u) + s[5]; + s[11] ^= s[13] ^ 0x9f10934au; + s[5] += s[11] + 0xc4f2566bu; + s[14] -= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 30u); + s[4] += s[1]; + s[5] ^= (s[4] & s[14]); + s[9] ^= s[5]; + s[2] = mh_rotl(s[2] ^ s[9], 21u); + s[3] -= s[2]; + s[15] += s[3] + 0xd8e0689au; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[12] = (s[12] ^ s[8]) * 0x9f3839e7u; + s[11] = s[11] * 0x78af3d3fu + s[12]; + s[12] += s[11] + 0xf79cdc6cu; + s[14] += s[12]; + s[13] ^= s[14] ^ 0x2f851ec9u; + s[3] *= (s[13] | 1u); + s[4] ^= (s[3] & s[0]); + s[7] ^= s[4]; + s[0] ^= s[7]; + s[4] ^= s[0] ^ 0x74cd9833u; + s[10] = mh_rotl(s[10], 16u) + s[4]; + s[6] += s[10]; + s[5] += s[6]; + s[7] *= (s[5] | 1u); + s[8] ^= s[7] ^ 0xee20e634u; + s[10] = s[10] * 0x3e130e7du + s[8]; + s[8] += s[10] + 0x6f087e5bu; + s[14] ^= s[8]; + s[4] -= s[14]; + s[9] ^= (s[4] & s[6]); + s[12] = s[12] * 0xb460872fu + s[9]; + s[5] = mh_rotl(s[5] ^ s[12], 4u); + s[4] = mh_rotl(s[4] ^ s[5], 28u); + s[1] ^= s[4] ^ 0xf4365901u; + s[0] = mh_rotl(s[0], 18u) + s[1]; + s[5] -= s[0]; + s[6] = mh_rotl(s[6] ^ s[5], 28u); + s[13] ^= s[6] ^ 0xdf09c351u; + s[2] ^= s[13]; + s[4] -= s[2]; + s[11] -= s[4]; + s[9] += (s[11] | s[8]); + s[3] += (s[9] | s[14]); + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[11] ^= s[6]; + s[5] ^= s[11] ^ 0xb26a12d6u; + s[13] = mh_rotl(s[13], 27u) + s[5]; + s[7] += s[13]; + s[1] *= (s[7] | 1u); + s[14] -= s[1]; + s[5] += s[14]; + s[6] += s[5]; + s[7] += s[6]; + s[3] ^= s[7]; + s[2] ^= s[3] ^ 0x41710416u; + s[13] += s[2]; + s[15] = (s[15] ^ s[13]) * 0x936ce74fu; + s[13] += s[15] + 0xa69098ebu; + s[8] -= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[6] = (s[6] ^ s[4]) * 0x96ed276fu; + s[14] += s[6]; + s[5] += s[14] + 0x3dd7b109u; + s[9] ^= (s[5] & s[7]); + s[15] += s[9]; + s[12] += s[15]; + s[11] -= s[12]; + s[1] += s[11]; + s[2] ^= s[1]; + s[5] *= (s[2] | 1u); + s[14] += s[5] + 0xe10aa4d3u; + s[5] = (s[5] ^ s[14]) * 0x91132d1fu; + s[10] += s[5]; + s[13] ^= s[10]; + s[5] = (s[5] ^ s[13]) * 0xec9ae3adu; + s[11] += s[5]; + s[7] += s[11]; + s[14] += s[7] + 0xf32ce180u; + s[0] ^= s[14]; + s[11] += s[0]; + s[12] *= (s[11] | 1u); + s[11] ^= s[12] ^ 0xb1b1fa56u; + s[5] ^= s[11]; + s[11] = (s[11] ^ s[5]) * 0x7afecfd5u; + s[10] -= s[11]; + s[12] += s[10]; + s[15] *= (s[12] | 1u); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[5] += s[11]; + s[7] = mh_rotl(s[7] ^ s[5], 13u); + s[5] = mh_rotl(s[5], 10u) + s[7]; + s[14] += s[5]; + s[3] += (s[14] | s[15]); + s[6] = s[6] * 0xfd4cbce5u + s[3]; + s[13] += s[6]; + s[12] += s[13]; + s[2] = s[2] * 0x1567d149u + s[12]; + s[9] += (s[2] | s[14]); + s[11] = (s[11] ^ s[9]) * 0xcd1282cfu; + s[10] = s[10] * 0xec337bd7u + s[11]; + s[4] += s[10]; + s[15] ^= s[4]; + s[2] += (s[15] | s[14]); + s[3] ^= s[2]; + s[5] *= (s[3] | 1u); + s[14] += (s[5] | s[4]); + s[7] += s[14] + 0x15993573u; + s[11] -= s[7]; + s[4] += (s[11] | s[13]); + s[8] += s[4]; + s[2] = s[2] * 0x97007c67u + s[8]; + s[11] = s[11] * 0x918bfbb7u + s[2]; + s[10] ^= s[11]; + s[6] += s[10]; + s[13] -= s[6]; + s[6] *= (s[13] | 1u); + s[2] += s[6] + 0x029f336cu; + s[1] = (s[1] ^ s[2]) * 0x773956e7u; + s[8] = (s[8] ^ s[1]) * 0x5b779023u; + s[4] = mh_rotl(s[4] ^ s[8], 6u); + s[12] = mh_rotl(s[12] ^ s[4], 29u); + s[14] -= s[12]; + s[2] *= (s[14] | 1u); + s[15] -= s[2]; + s[11] += s[15]; + s[9] = mh_rotl(s[9] ^ s[11], 13u); + s[7] += s[9] + 0xf4431694u; + s[13] ^= s[7]; + s[15] ^= s[13]; + s[12] ^= s[15] ^ 0xd1599731u; + s[7] = (s[7] ^ s[12]) * 0x8ced34cbu; + s[6] = s[6] * 0xd04c1dd5u + s[7]; + s[1] = mh_rotl(s[1] ^ s[6], 25u); + s[2] = mh_rotl(s[2], 26u) + s[1]; + s[10] = mh_rotl(s[10] ^ s[2], 21u); + s[12] ^= s[10] ^ 0x551385afu; + s[13] = mh_rotl(s[13] ^ s[12], 17u); + s[2] ^= s[13]; + s[5] ^= s[2] ^ 0x836874e8u; + s[10] += s[5] + 0xd9ec8d60u; + s[7] = mh_rotl(s[7] ^ s[10], 14u); + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[5] ^= s[8] ^ 0x076cb7e0u; + s[12] += s[5]; + s[13] ^= s[12]; + s[9] -= s[13]; + s[12] ^= s[9] ^ 0xffb78f00u; + s[0] += s[12]; + s[8] += s[0]; + s[4] = s[4] * 0x09be199fu + s[8]; + s[15] ^= (s[4] & s[11]); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[0] += s[11]; + s[14] ^= (s[0] & s[11]); + s[6] = s[6] * 0x062bb8b9u + s[14]; + s[13] += s[6]; + s[7] ^= s[13]; + s[2] ^= s[7]; + s[4] ^= s[2]; + s[12] = mh_rotl(s[12] ^ s[4], 16u); + s[1] ^= s[12]; + s[10] = s[10] * 0xaf1b9323u + s[1]; + s[2] *= (s[10] | 1u); + s[7] = s[7] * 0xc1c09eb5u + s[2]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[9] *= (s[1] | 1u); + s[7] *= (s[9] | 1u); + s[3] += (s[7] | s[15]); + s[6] += s[3]; + s[13] *= (s[6] | 1u); + s[10] += s[13]; + s[9] *= (s[10] | 1u); + s[2] ^= s[9]; + s[1] = mh_rotl(s[1], 24u) + s[2]; + s[8] += s[1]; + s[15] += s[8]; + s[11] ^= s[15]; + s[9] ^= (s[11] & s[14]); + s[4] ^= s[9] ^ 0x9fb9924fu; + s[9] ^= (s[4] & s[11]); + s[4] = mh_rotl(s[4], 18u) + s[9]; + s[2] -= s[4]; + s[10] ^= s[2]; + s[9] += s[10] + 0x47548619u; + s[5] += (s[9] | s[0]); + s[13] = mh_rotl(s[13], 4u) + s[5]; + s[0] *= (s[13] | 1u); + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] -= s[6]; + s[6] = (s[6] ^ s[2]) * 0x19ae11d5u; + s[15] ^= s[6]; + s[14] = mh_rotl(s[14] ^ s[15], 8u); + s[5] *= (s[14] | 1u); + s[12] ^= s[5]; + s[9] *= (s[12] | 1u); + s[0] += s[9] + 0xf019817bu; + s[13] += (s[0] | s[15]); + s[11] ^= s[13]; + s[12] -= s[11]; + s[7] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[7]; + s[13] -= s[9]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 1u) + s[2]; + s[10] += s[0] + 0xa639dd25u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[7] ^= s[4] ^ 0x4d7e8a6du; + s[8] ^= s[7]; + s[11] += s[8]; + s[10] = mh_rotl(s[10], 8u) + s[11]; + s[0] += s[10]; + s[11] ^= s[0] ^ 0x721aef7cu; + s[4] = mh_rotl(s[4], 1u) + s[11]; + s[5] *= (s[4] | 1u); + s[11] *= (s[5] | 1u); + s[8] ^= s[11] ^ 0xcc314719u; + s[6] = (s[6] ^ s[8]) * 0x6487d2b7u; + s[0] = mh_rotl(s[0] ^ s[6], 14u); + s[9] = mh_rotl(s[9], 18u) + s[0]; + s[5] = mh_rotl(s[5], 1u) + s[9]; + s[9] += s[5] + 0xa383dfd9u; + s[10] ^= s[9]; + s[1] += s[10]; + s[15] += s[1]; + s[7] += s[15]; + s[5] += (s[7] | s[1]); + s[7] += (s[5] | s[3]); + s[6] = (s[6] ^ s[7]) * 0x184ce043u; + s[4] ^= s[6]; + s[2] = mh_rotl(s[2], 3u) + s[4]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_2(uint* s) { + s[14] += s[0]; + s[5] = mh_rotl(s[5], 7u) + s[14]; + s[3] += s[5]; + s[6] ^= s[3]; + s[3] += s[6]; + s[8] += (s[3] | s[10]); + s[15] += s[8]; + s[5] -= s[15]; + s[8] -= s[5]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[8] = mh_rotl(s[8] ^ s[3], 17u); + s[1] += s[8]; + s[7] = s[7] * 0xf236f555u + s[1]; + s[15] *= (s[7] | 1u); + s[4] = (s[4] ^ s[15]) * 0x367da263u; + s[14] ^= (s[4] & s[10]); + s[3] += s[14]; + s[9] = s[9] * 0xa86cb8a5u + s[3]; + s[1] += s[9] + 0x729e8820u; + s[14] *= (s[1] | 1u); + s[13] += s[14]; + s[0] += (s[13] | s[15]); + s[8] ^= s[0] ^ 0x36ce8d99u; + s[15] ^= s[8]; + s[5] *= (s[15] | 1u); + s[10] ^= s[5] ^ 0xc281b62bu; + s[5] = s[5] * 0x4c18c9c1u + s[10]; + s[9] = s[9] * 0x683b0045u + s[5]; + s[2] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[2], 17u); + s[11] ^= s[9]; + s[6] ^= s[11]; + s[1] = (s[1] ^ s[6]) * 0xf967d211u; + s[9] += s[1]; + s[14] += s[9]; + s[11] = mh_rotl(s[11] ^ s[14], 7u); + s[5] += (s[11] | s[7]); + s[8] ^= (s[5] & s[0]); + s[11] ^= s[8]; + s[4] = (s[4] ^ s[11]) * 0xd7e0bb7fu; + s[12] -= s[4]; + s[7] = mh_rotl(s[7], 11u) + s[12]; + s[1] += (s[7] | s[12]); + s[9] += s[1]; + s[8] ^= (s[9] & s[2]); + s[15] = mh_rotl(s[15], 8u) + s[8]; + s[0] = mh_rotl(s[0], 6u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[0], 7u); + s[5] = mh_rotl(s[5], 18u) + s[13]; + s[6] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[11] = s[11] * 0xf05cf87fu + s[1]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[9] += s[0]; + s[12] ^= s[9]; + s[15] = (s[15] ^ s[12]) * 0x4b3b7b5fu; + s[14] += s[15]; + s[3] = (s[3] ^ s[14]) * 0xc25fd2f5u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[12] = (s[12] ^ s[14]) * 0x2ccccc23u; + s[3] ^= s[12] ^ 0xe0a8d819u; + s[14] ^= s[3]; + s[15] ^= s[14]; + s[11] += s[15]; + s[2] ^= s[11]; + s[11] ^= s[2]; + s[4] = mh_rotl(s[4] ^ s[11], 2u); + s[15] = mh_rotl(s[15], 5u) + s[4]; + s[5] = (s[5] ^ s[15]) * 0x8678e679u; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[13] += s[15] + 0xe037af3du; + s[14] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[14], 5u); + s[14] = (s[14] ^ s[3]) * 0xf94dfba9u; + s[11] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 8u); + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7], 17u) + s[15]; + s[2] = mh_rotl(s[2], 17u) + s[7]; + s[12] = (s[12] ^ s[2]) * 0xd427d34fu; + s[2] ^= s[12]; + s[3] += s[2]; + s[13] ^= s[3]; + s[6] *= (s[13] | 1u); + s[7] -= s[6]; + s[15] += s[7]; + s[0] = s[0] * 0x6811cec1u + s[15]; + s[12] *= (s[0] | 1u); + s[4] += (s[12] | s[11]); + s[3] = mh_rotl(s[3] ^ s[4], 15u); + s[7] = mh_rotl(s[7], 21u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[7], 17u); + s[6] = s[6] * 0xe5adc811u + s[15]; + s[12] = (s[12] ^ s[6]) * 0x5156a379u; + s[3] += s[12]; + s[9] ^= s[3] ^ 0x25367eecu; + s[11] += s[9]; + s[4] ^= s[11] ^ 0xb721ecfeu; + s[6] = mh_rotl(s[6], 15u) + s[4]; + s[4] ^= s[6]; + s[13] = (s[13] ^ s[4]) * 0x567d866du; + s[7] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 30u) + s[7]; + s[13] = mh_rotl(s[13] ^ s[0], 8u); + s[11] ^= s[13] ^ 0xf7bdb888u; + s[1] = (s[1] ^ s[11]) * 0x5a32e7abu; + s[0] = mh_rotl(s[0], 24u) + s[1]; + s[4] = s[4] * 0x20f1b36bu + s[0]; + s[11] = (s[11] ^ s[4]) * 0x65a77da9u; + s[2] += s[11]; + s[3] += s[2] + 0x99328ba9u; + s[13] -= s[3]; + s[6] ^= (s[13] & s[3]); + s[2] += s[6]; + s[6] = mh_rotl(s[6] ^ s[2], 30u); + s[9] ^= s[6] ^ 0x6a4c2898u; + s[15] -= s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 26u); + s[2] ^= (s[12] & s[9]); + s[5] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 14u); + s[8] ^= (s[13] & s[6]); + s[5] += s[8] + 0xe7f53827u; + s[14] *= (s[5] | 1u); + s[8] ^= s[14] ^ 0xceef5db4u; + s[14] ^= s[8]; + s[7] ^= s[14] ^ 0xeb56858cu; + s[2] = (s[2] ^ s[7]) * 0x4dd73993u; + s[12] -= s[2]; + s[2] -= s[12]; + s[11] += s[2]; + s[9] *= (s[11] | 1u); + s[3] ^= s[9]; + s[4] = (s[4] ^ s[3]) * 0x8ed152e9u; + s[12] -= s[4]; + s[6] ^= s[12]; + s[7] -= s[6]; + s[3] ^= (s[7] & s[0]); + s[5] = mh_rotl(s[5] ^ s[3], 30u); + s[2] = mh_rotl(s[2], 12u) + s[5]; + s[9] = s[9] * 0x606d8c4fu + s[2]; + s[11] += s[9]; + s[9] -= s[11]; + s[14] ^= s[9]; + s[2] = s[2] * 0xa408d01du + s[14]; + s[12] ^= (s[2] & s[11]); + s[7] *= (s[12] | 1u); + s[10] -= s[7]; + s[11] ^= (s[10] & s[4]); + s[6] += s[11]; + s[1] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[1], 8u); + s[0] = mh_rotl(s[0], 28u) + s[5]; + s[11] -= s[0]; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[6] -= s[8]; + s[12] -= s[6]; + s[6] = (s[6] ^ s[12]) * 0x77a5979du; + s[5] = mh_rotl(s[5], 7u) + s[6]; + s[11] = (s[11] ^ s[5]) * 0xbb2a5277u; + s[10] -= s[11]; + s[13] += (s[10] | s[4]); + s[5] += s[13]; + s[7] += s[5]; + s[3] += s[7] + 0x679f3a15u; + s[9] = (s[9] ^ s[3]) * 0x3b759ea1u; + s[5] += (s[9] | s[6]); + s[14] *= (s[5] | 1u); + s[4] -= s[14]; + s[10] = (s[10] ^ s[4]) * 0x7438b4f1u; + s[12] = mh_rotl(s[12], 31u) + s[10]; + s[1] ^= (s[12] & s[3]); + s[14] ^= s[1]; + s[11] ^= s[14]; + s[0] -= s[11]; + s[15] = mh_rotl(s[15], 29u) + s[0]; + s[14] ^= s[15] ^ 0xdb4b51feu; + s[3] ^= s[14]; + s[2] += s[3]; + s[3] ^= s[2]; + s[1] *= (s[3] | 1u); + s[14] -= s[1]; + s[2] = s[2] * 0xa602880du + s[14]; + s[9] *= (s[2] | 1u); + s[10] += (s[9] | s[0]); + s[0] = s[0] * 0x1da05fddu + s[10]; + s[14] = s[14] * 0x5524fa43u + s[0]; + s[7] += s[14]; + s[3] = mh_rotl(s[3] ^ s[7], 12u); + s[8] = (s[8] ^ s[3]) * 0x93b798bbu; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[2] -= s[11]; + s[9] += s[2] + 0x7e63761fu; + s[13] += s[9] + 0x6a2b3abcu; + s[15] = mh_rotl(s[15], 31u) + s[13]; + s[14] *= (s[15] | 1u); + s[1] ^= (s[14] & s[15]); + s[6] ^= s[1]; + s[15] += (s[6] | s[9]); + s[0] ^= s[15]; + s[8] -= s[0]; + s[13] = mh_rotl(s[13] ^ s[8], 29u); + s[10] = s[10] * 0x81dc8267u + s[13]; + s[12] = mh_rotl(s[12], 6u) + s[10]; + s[14] ^= s[12]; + s[10] -= s[14]; + s[0] = (s[0] ^ s[10]) * 0xc6809ffdu; + s[12] = (s[12] ^ s[0]) * 0x90188547u; + s[8] = mh_rotl(s[8], 23u) + s[12]; + s[2] ^= s[8]; + s[5] = mh_rotl(s[5], 21u) + s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 6u); + s[11] = (s[11] ^ s[13]) * 0x23339351u; + s[6] = mh_rotl(s[6] ^ s[11], 24u); + s[2] ^= (s[6] & s[7]); + s[11] *= (s[2] | 1u); + s[8] += s[11] + 0x64aea95au; + s[3] ^= s[8]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[6] ^= s[0]; + s[3] = s[3] * 0x6da4a1e5u + s[6]; + s[13] = s[13] * 0x16181847u + s[3]; + s[0] -= s[13]; + s[12] += s[0]; + s[14] = mh_rotl(s[14] ^ s[12], 22u); + s[6] += s[14]; + s[1] = mh_rotl(s[1] ^ s[6], 26u); + s[14] -= s[1]; + s[8] += s[14] + 0x57302d8du; + s[5] = s[5] * 0xfae0a1ebu + s[8]; + s[10] *= (s[5] | 1u); + s[1] *= (s[10] | 1u); + s[0] *= (s[1] | 1u); + s[7] = mh_rotl(s[7], 11u) + s[0]; + s[3] *= (s[7] | 1u); + s[4] += s[3]; + s[1] ^= s[4]; + s[4] ^= s[1]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[0] *= (s[1] | 1u); + s[6] += s[0]; + s[0] += s[6] + 0xa48f59d6u; + s[2] += s[0] + 0xd890ff08u; + s[10] -= s[2]; + s[6] ^= s[10]; + s[11] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 25u); + s[5] *= (s[13] | 1u); + s[3] += s[5] + 0xf143105eu; + s[2] = s[2] * 0x9c957b8fu + s[3]; + s[12] = (s[12] ^ s[2]) * 0x5542792du; + s[13] = mh_rotl(s[13], 27u) + s[12]; + s[1] -= s[13]; + s[3] += s[1]; + s[11] ^= s[3]; + s[10] = (s[10] ^ s[11]) * 0xbd220965u; + s[1] *= (s[10] | 1u); + s[7] -= s[1]; + s[15] = mh_rotl(s[15], 28u) + s[7]; + s[1] = mh_rotl(s[1], 12u) + s[15]; + s[8] -= s[1]; + s[9] = (s[9] ^ s[8]) * 0x35be18f5u; + s[4] += (s[9] | s[1]); + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[0] ^= s[14]; + s[12] *= (s[0] | 1u); + s[3] -= s[12]; + s[15] = mh_rotl(s[15], 14u) + s[3]; + s[0] += s[15]; + s[11] = mh_rotl(s[11], 26u) + s[0]; + s[15] += s[11] + 0xc1c2e89fu; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[11] ^= s[4]; + s[0] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[0], 1u); + s[12] += s[13] + 0xd57fd3ddu; + s[9] ^= s[12] ^ 0xe5c431c8u; + s[6] ^= s[9] ^ 0xcc67fed2u; + s[13] ^= s[6]; + s[4] ^= s[13] ^ 0xfe05a3a3u; + s[2] = s[2] * 0x8c03bf67u + s[4]; + s[0] += s[2]; + s[11] += s[0]; + s[7] ^= s[11]; + s[13] = s[13] * 0xfb6d3733u + s[7]; + s[6] ^= s[13]; + s[2] ^= s[6] ^ 0x4efcdfbfu; + s[13] *= (s[2] | 1u); + s[12] ^= s[13]; + s[11] -= s[12]; + s[9] ^= s[11]; + s[4] = mh_rotl(s[4], 10u) + s[9]; + s[12] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[12], 22u); + s[15] += s[9]; + s[3] -= s[15]; + s[7] ^= (s[3] & s[9]); + s[9] += s[7]; + s[8] = (s[8] ^ s[9]) * 0x410e2049u; + s[3] ^= s[8]; + s[12] += s[3]; + s[8] ^= (s[12] & s[6]); + s[0] ^= s[8]; + s[13] += (s[0] | s[3]); + s[7] ^= s[13] ^ 0x0eb1588eu; + s[15] *= (s[7] | 1u); + s[5] += s[15]; + s[1] ^= s[5]; + s[4] = mh_rotl(s[4], 16u) + s[1]; + s[10] += s[4]; + s[0] += s[10]; + s[9] = (s[9] ^ s[0]) * 0x346b3e53u; + s[0] *= (s[9] | 1u); + s[2] -= s[0]; + s[12] = s[12] * 0xa1f90d81u + s[2]; + s[1] += s[12]; + s[0] = s[0] * 0xef4fd54fu + s[1]; + s[1] ^= s[0]; + s[7] ^= s[1]; + s[3] = mh_rotl(s[3] ^ s[7], 21u); + s[13] += (s[3] | s[8]); + s[11] ^= s[13]; + s[13] ^= s[11]; + s[3] += s[13]; + s[0] -= s[3]; + s[15] *= (s[0] | 1u); + s[10] += s[15] + 0x4d178b4du; + s[15] = mh_rotl(s[15], 25u) + s[10]; + s[8] *= (s[15] | 1u); + s[12] *= (s[8] | 1u); + s[13] = mh_rotl(s[13] ^ s[12], 30u); + s[15] ^= s[13]; + s[6] += s[15]; + s[5] *= (s[6] | 1u); + s[12] -= s[5]; + s[0] -= s[12]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[14] += s[3] + 0x83e089e4u; + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 26u); + s[13] += (s[7] | s[3]); + s[7] -= s[13]; + s[11] ^= s[7]; + s[9] ^= s[11]; + s[5] += s[9]; + s[14] += s[5]; + s[4] ^= (s[14] & s[0]); + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[13] ^= s[0] ^ 0x3d84c4aeu; + s[10] *= (s[13] | 1u); + s[13] += s[10] + 0x754c3314u; + s[9] += s[13]; + s[3] ^= s[9]; + s[0] += s[3]; + s[7] = (s[7] ^ s[0]) * 0x92f74007u; + s[13] += s[7]; + s[6] ^= s[13]; + s[7] = (s[7] ^ s[6]) * 0x63936a19u; + s[10] += s[7] + 0xadf24f99u; + s[5] = s[5] * 0xd55fb891u + s[10]; + s[8] = mh_rotl(s[8] ^ s[5], 13u); + s[13] = mh_rotl(s[13] ^ s[8], 28u); + s[15] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[15], 31u); + s[0] += s[3]; + s[12] += s[0]; + s[6] ^= s[12]; + s[1] -= s[6]; + s[0] = mh_rotl(s[0], 8u) + s[1]; + s[3] = mh_rotl(s[3], 11u) + s[0]; + s[13] ^= s[3]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 28u) + s[2]; + s[1] += s[0]; + s[15] ^= s[1] ^ 0x0710d7aau; + s[4] ^= s[15] ^ 0x0c102325u; + s[0] ^= (s[4] & s[6]); + s[2] = mh_rotl(s[2] ^ s[0], 20u); + s[8] += s[2]; + s[7] -= s[8]; + s[11] *= (s[7] | 1u); + s[3] = (s[3] ^ s[11]) * 0x2992aef3u; + s[10] = mh_rotl(s[10] ^ s[3], 6u); + s[5] ^= s[10]; + s[7] -= s[5]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[7] = (s[7] ^ s[1]) * 0x30802407u; + s[8] += s[7] + 0x4da006c2u; + s[2] = mh_rotl(s[2] ^ s[8], 31u); + s[6] *= (s[2] | 1u); + s[7] += s[6]; + s[2] -= s[7]; + s[1] -= s[2]; + s[13] -= s[1]; + s[9] += s[13]; + s[5] = (s[5] ^ s[9]) * 0xb8aec3c9u; + s[9] ^= (s[5] & s[3]); + s[2] ^= s[9]; + s[14] ^= s[2]; + s[9] ^= s[14] ^ 0xbffbdbeeu; + s[3] = mh_rotl(s[3] ^ s[9], 20u); + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[13] = mh_rotl(s[13], 15u) + s[5]; + s[6] ^= s[13]; + s[4] += s[6]; + s[6] += s[4]; + s[8] += s[6]; + s[10] -= s[8]; + s[7] += s[10] + 0x607c17d6u; + s[12] = (s[12] ^ s[7]) * 0x5f96043du; + s[14] += s[12]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[2] += s[5]; + s[0] -= s[2]; + s[14] ^= s[0]; + s[15] ^= s[14] ^ 0xc5076b2cu; + s[1] = (s[1] ^ s[15]) * 0x35f61ca7u; + s[12] = mh_rotl(s[12] ^ s[1], 29u); + s[4] = mh_rotl(s[4], 24u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0x3e4c118bu; + s[4] = (s[4] ^ s[7]) * 0x124571a3u; + s[6] += s[4]; + s[12] -= s[6]; + s[4] -= s[12]; + s[13] -= s[4]; + s[9] += s[13] + 0x66802483u; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[8] -= s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 30u); + s[7] *= (s[4] | 1u); + s[11] ^= s[7]; + s[0] = mh_rotl(s[0], 21u) + s[11]; + s[11] ^= s[0]; + s[2] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[2], 3u); + s[9] += (s[1] | s[7]); + s[0] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[0], 12u); + s[14] += s[3]; + s[6] += s[14] + 0xb50b59d6u; + s[4] = (s[4] ^ s[6]) * 0x1eecbc9fu; + s[6] = mh_rotl(s[6], 24u) + s[4]; + s[12] ^= s[6]; + s[2] += s[12]; + s[7] = s[7] * 0xffe0b5bbu + s[2]; + s[5] = mh_rotl(s[5], 4u) + s[7]; + s[14] ^= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 1u); + s[10] ^= s[1]; + s[1] = s[1] * 0xb57f1b41u + s[10]; + s[15] = (s[15] ^ s[1]) * 0xb49d4c67u; + s[7] *= (s[15] | 1u); + s[1] ^= s[7] ^ 0x835c5c94u; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[3] = mh_rotl(s[3] ^ s[8], 18u); + s[5] ^= s[3]; + s[8] = mh_rotl(s[8], 12u) + s[5]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[8] = s[8] * 0xa6e14777u + s[15]; + s[13] ^= s[8] ^ 0xda9c793bu; + s[3] ^= s[13]; + s[4] ^= s[3]; + s[0] = (s[0] ^ s[4]) * 0x41a7651bu; + s[15] = s[15] * 0xa762cc89u + s[0]; + s[12] = (s[12] ^ s[15]) * 0x401d997fu; + s[7] = mh_rotl(s[7] ^ s[12], 13u); + s[11] += s[7]; + s[4] ^= s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6]; + s[11] *= (s[9] | 1u); + s[3] = (s[3] ^ s[11]) * 0xe248840du; + s[12] += s[3]; + s[4] = s[4] * 0x6d65a44bu + s[12]; + s[14] -= s[4]; + s[5] += s[14]; + s[14] += (s[5] | s[7]); + s[9] = mh_rotl(s[9], 9u) + s[14]; + s[4] += s[9]; + s[13] ^= s[4]; + s[11] += (s[13] | s[5]); + s[1] = s[1] * 0x51f48ab1u + s[11]; + s[11] *= (s[1] | 1u); + s[14] -= s[11]; + s[2] = s[2] * 0x149a38f3u + s[14]; + s[0] = (s[0] ^ s[2]) * 0xe80fd119u; + s[11] *= (s[0] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 4u); + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[6] = (s[6] ^ s[4]) * 0x383cb6c5u; + s[11] ^= s[6]; + s[7] += s[11]; + s[12] = mh_rotl(s[12] ^ s[7], 19u); + s[6] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 23u); + s[1] ^= s[15] ^ 0xb1dc5f0au; + s[13] -= s[1]; + s[4] -= s[13]; + s[1] = mh_rotl(s[1], 8u) + s[4]; + s[2] -= s[1]; + s[1] += s[2]; + s[10] ^= s[1] ^ 0x28905198u; + s[2] ^= s[10]; + s[3] *= (s[2] | 1u); + s[10] -= s[3]; + s[13] ^= s[10]; + s[6] *= (s[13] | 1u); + s[0] += (s[6] | s[5]); + s[7] ^= s[0]; + s[2] = (s[2] ^ s[7]) * 0xcd1889adu; + s[1] += s[2]; + s[11] += s[1]; + s[6] ^= s[11]; + s[13] *= (s[6] | 1u); + s[9] = (s[9] ^ s[13]) * 0x759b3279u; + s[2] -= s[9]; + s[8] = s[8] * 0xab1fffc9u + s[2]; + s[7] *= (s[8] | 1u); + s[11] ^= s[7]; + s[7] *= (s[11] | 1u); + s[9] += s[7]; + s[0] = mh_rotl(s[0], 22u) + s[9]; + s[13] += (s[0] | s[14]); + s[4] ^= s[13]; + s[9] -= s[4]; + s[6] ^= s[9]; + s[8] *= (s[6] | 1u); + s[10] = mh_rotl(s[10], 14u) + s[8]; + s[13] *= (s[10] | 1u); + s[7] ^= (s[13] & s[14]); + s[8] -= s[7]; + s[9] ^= s[8]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[9] = (s[9] ^ s[0]) * 0x94665a0fu; + s[3] += (s[9] | s[5]); + s[13] += s[3] + 0x76335011u; + s[5] *= (s[13] | 1u); + s[10] = mh_rotl(s[10] ^ s[5], 4u); + s[2] += s[10]; + s[0] += s[2] + 0xe5c5c4eeu; + s[10] ^= s[0]; + s[8] -= s[10]; + s[5] += s[8]; + s[12] += s[5]; + s[8] = mh_rotl(s[8] ^ s[12], 17u); + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[0] = mh_rotl(s[0] ^ s[7], 15u); + s[1] ^= s[0] ^ 0x269a357bu; + s[9] += s[1]; + s[11] += s[9]; + s[10] = mh_rotl(s[10] ^ s[11], 7u); + s[0] ^= s[10]; + s[4] += s[0]; + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[15] += s[14]; + s[12] = s[12] * 0xa38e176du + s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 10u); + s[0] ^= s[2]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[3] += s[12] + 0x3a7b8b35u; + s[10] += s[3]; + s[8] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[8], 25u); + s[13] += s[1] + 0xa6fef564u; + s[12] += s[13]; + s[7] ^= s[12]; + s[3] = mh_rotl(s[3] ^ s[7], 13u); + s[1] ^= s[3]; + s[13] = mh_rotl(s[13] ^ s[1], 31u); + s[0] = mh_rotl(s[0] ^ s[13], 25u); + s[7] += s[0]; + s[10] -= s[7]; + s[6] = mh_rotl(s[6], 5u) + s[10]; + s[10] -= s[6]; + s[9] -= s[10]; + s[11] -= s[9]; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[9] = s[9] * 0x524dda45u + s[4]; + s[1] -= s[9]; + s[14] = (s[14] ^ s[1]) * 0x726e8ac3u; + s[7] = mh_rotl(s[7], 23u) + s[14]; + s[11] = mh_rotl(s[11], 24u) + s[7]; + s[14] ^= s[11]; + s[9] -= s[14]; + s[4] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[4], 30u); + s[13] ^= s[9]; + s[5] -= s[13]; + s[10] = mh_rotl(s[10], 2u) + s[5]; + s[15] ^= s[10]; + s[5] += s[15]; + s[11] = (s[11] ^ s[5]) * 0xc4aae5c1u; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[4], 2u); + s[1] ^= s[13] ^ 0x9400d36bu; + s[8] *= (s[1] | 1u); + s[4] = mh_rotl(s[4], 24u) + s[8]; + s[14] = s[14] * 0xc442e3d7u + s[4]; + s[11] = mh_rotl(s[11], 19u) + s[14]; + s[2] = (s[2] ^ s[11]) * 0xebbc49b9u; + s[14] = mh_rotl(s[14] ^ s[2], 19u); + s[13] += s[14]; + s[14] ^= s[13]; + s[9] *= (s[14] | 1u); + s[2] ^= (s[9] & s[13]); + s[8] -= s[2]; + s[3] = mh_rotl(s[3] ^ s[8], 3u); + s[7] = s[7] * 0x576da3b7u + s[3]; + s[0] += (s[7] | s[8]); + s[1] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[11] += s[15]; + s[9] ^= s[11]; + s[14] ^= s[9]; + s[9] += s[14]; + s[5] += s[9]; + s[1] *= (s[5] | 1u); + s[0] += s[1]; + s[7] ^= s[0]; + s[2] += s[7]; + s[14] = (s[14] ^ s[2]) * 0x58412f09u; + s[11] = mh_rotl(s[11] ^ s[14], 12u); + s[3] = mh_rotl(s[3], 6u) + s[11]; + s[14] = (s[14] ^ s[3]) * 0x00dd684fu; + s[4] -= s[14]; + s[9] += s[4] + 0x550edca7u; + s[11] = (s[11] ^ s[9]) * 0xbbfbfe77u; + s[13] += s[11]; + s[11] += s[13]; + s[8] += s[11]; + s[5] += s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 29u); + s[12] += s[15]; + s[1] ^= s[12]; + s[6] -= s[1]; + s[7] += s[6]; + s[4] = mh_rotl(s[4], 17u) + s[7]; + s[11] ^= s[4]; + s[4] += s[11]; + s[11] += s[4] + 0x46d20979u; + s[14] ^= s[11]; + s[10] ^= s[14]; + s[2] *= (s[10] | 1u); + s[12] = mh_rotl(s[12], 22u) + s[2]; + s[15] -= s[12]; + s[12] = (s[12] ^ s[15]) * 0xf44d7efbu; + s[10] = (s[10] ^ s[12]) * 0x3fa99f4fu; + s[2] ^= s[10] ^ 0xac7d5c8bu; + s[7] += s[2]; + s[14] += s[7] + 0xd1ad9327u; + s[3] += s[14]; + s[10] = mh_rotl(s[10] ^ s[3], 9u); + s[5] = mh_rotl(s[5], 11u) + s[10]; + s[2] *= (s[5] | 1u); + s[15] += s[2]; + s[14] *= (s[15] | 1u); + s[10] = s[10] * 0xedb63e45u + s[14]; + s[14] += s[10]; + s[9] += s[14]; + s[3] += s[9] + 0xce5dd87eu; + s[15] = mh_rotl(s[15] ^ s[3], 16u); + s[1] -= s[15]; + s[2] += s[1]; + s[13] ^= (s[2] & s[7]); + s[2] = mh_rotl(s[2] ^ s[13], 11u); + s[15] ^= s[2]; + s[6] += s[15] + 0x97390455u; + s[2] = mh_rotl(s[2], 14u) + s[6]; + s[0] = s[0] * 0xd9932c57u + s[2]; + s[15] ^= s[0]; + s[0] += s[15] + 0xd642df33u; + s[10] -= s[0]; + s[9] = (s[9] ^ s[10]) * 0x96d65173u; + s[3] = (s[3] ^ s[9]) * 0x5ef32be3u; + s[0] = mh_rotl(s[0], 4u) + s[3]; + s[14] += s[0] + 0xa2e88e9cu; + s[4] -= s[14]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1] ^ s[13], 29u); + s[2] += s[1] + 0x9f32e607u; + s[8] = s[8] * 0x2e14f3b3u + s[2]; + s[14] ^= s[8]; + s[10] ^= s[14]; + s[7] = (s[7] ^ s[10]) * 0xb35882a9u; + s[11] ^= s[7] ^ 0xdb62d1c6u; + s[5] *= (s[11] | 1u); + s[10] += (s[5] | s[1]); + s[3] -= s[10]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[13] ^= (s[10] & s[15]); + s[11] -= s[13]; + s[5] ^= s[11]; + s[11] += s[5]; + s[15] ^= s[11] ^ 0xef110718u; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[12], 12u); + s[12] ^= s[1] ^ 0x4e9029b6u; + s[14] -= s[12]; + s[15] *= (s[14] | 1u); + s[4] *= (s[15] | 1u); + s[15] = mh_rotl(s[15] ^ s[4], 9u); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3] ^ s[13], 7u); + s[5] += s[3] + 0xf38664b0u; + s[2] -= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[1] = mh_rotl(s[1], 7u) + s[5]; + s[10] -= s[1]; + s[5] = mh_rotl(s[5] ^ s[10], 27u); + s[10] ^= s[5]; + s[2] += s[10]; + s[6] += s[2]; + s[3] = (s[3] ^ s[6]) * 0x33b893c5u; + s[8] -= s[3]; + s[5] ^= s[8] ^ 0x58095457u; + s[0] += s[5]; + s[9] += s[0]; + s[13] ^= s[9]; + s[6] ^= s[13]; + s[3] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[13] ^= s[5] ^ 0xf1c1aac7u; + s[4] = s[4] * 0x8ea1eea7u + s[13]; + s[12] ^= s[4]; + s[10] ^= s[12] ^ 0xdf051453u; + s[5] ^= s[10]; + s[13] ^= s[5]; + s[15] ^= s[13]; + s[3] ^= s[15]; + s[9] += s[3]; + s[4] ^= s[9] ^ 0x218a1035u; +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_3(uint* s) { + s[9] = (s[9] ^ s[0]) * 0x797e4457u; + s[4] ^= s[9]; + s[10] -= s[4]; + s[11] += s[10] + 0xa102a63du; + s[1] += s[11]; + s[7] ^= s[1]; + s[8] += s[7]; + s[6] += s[8]; + s[1] = mh_rotl(s[1] ^ s[6], 17u); + s[6] ^= s[1]; + s[14] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[2] -= s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 25u); + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[10] ^= s[7]; + s[15] += s[10] + 0x0abd8749u; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[15] = s[15] * 0x66393445u + s[2]; + s[14] *= (s[15] | 1u); + s[3] ^= s[14]; + s[2] = mh_rotl(s[2], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[2], 20u); + s[5] ^= s[0] ^ 0xcab80c1eu; + s[10] = mh_rotl(s[10] ^ s[5], 16u); + s[14] = mh_rotl(s[14] ^ s[10], 6u); + s[10] ^= (s[14] & s[4]); + s[6] ^= (s[10] & s[5]); + s[4] += s[6]; + s[0] += s[4] + 0x95ce3e2au; + s[2] *= (s[0] | 1u); + s[6] += s[2]; + s[2] = mh_rotl(s[2] ^ s[6], 17u); + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[7] ^= s[15]; + s[12] ^= s[7]; + s[1] += s[12]; + s[3] ^= s[1]; + s[0] = (s[0] ^ s[3]) * 0x53869057u; + s[12] += s[0]; + s[10] ^= s[12] ^ 0x3c38b79fu; + s[0] ^= s[10]; + s[1] ^= s[0] ^ 0x26a5cf2au; + s[8] ^= s[1] ^ 0xec7f7c75u; + s[11] = mh_rotl(s[11], 25u) + s[8]; + s[15] ^= s[11]; + s[8] ^= (s[15] & s[6]); + s[3] ^= s[8]; + s[1] = mh_rotl(s[1], 17u) + s[3]; + s[11] ^= s[1]; + s[0] ^= s[11]; + s[7] += s[0]; + s[2] -= s[7]; + s[5] = mh_rotl(s[5], 24u) + s[2]; + s[4] = mh_rotl(s[4], 13u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[4] ^= s[1] ^ 0x7b85746bu; + s[14] += s[4]; + s[9] = mh_rotl(s[9], 24u) + s[14]; + s[1] ^= s[9]; + s[14] += s[1]; + s[6] ^= s[14]; + s[7] = (s[7] ^ s[6]) * 0xd304fa11u; + s[3] += s[7] + 0x916253c4u; + s[13] += (s[3] | s[12]); + s[3] ^= s[13]; + s[1] = (s[1] ^ s[3]) * 0x668aacedu; + s[11] = mh_rotl(s[11] ^ s[1], 12u); + s[4] += s[11] + 0xfa452a6cu; + s[7] ^= s[4]; + s[15] += s[7]; + s[7] ^= s[15]; + s[13] *= (s[7] | 1u); + s[5] *= (s[13] | 1u); + s[9] += s[5]; + s[5] = mh_rotl(s[5], 19u) + s[9]; + s[15] += (s[5] | s[1]); + s[10] += (s[15] | s[12]); + s[11] = mh_rotl(s[11], 7u) + s[10]; + s[10] = mh_rotl(s[10], 11u) + s[11]; + s[0] += (s[10] | s[14]); + s[5] *= (s[0] | 1u); + s[4] -= s[5]; + s[6] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[6], 3u); + s[13] += s[9]; + s[3] -= s[13]; + s[15] ^= s[3] ^ 0x3ab76643u; + s[4] *= (s[15] | 1u); + s[7] -= s[4]; + s[1] += s[7]; + s[9] = mh_rotl(s[9], 31u) + s[1]; + s[3] *= (s[9] | 1u); + s[10] -= s[3]; + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xd1b0c195u; + s[10] -= s[7]; + s[5] -= s[10]; + s[0] -= s[5]; + s[15] += (s[0] | s[13]); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[8] -= s[3]; + s[15] = mh_rotl(s[15], 20u) + s[8]; + s[14] = s[14] * 0x42023659u + s[15]; + s[0] += s[14] + 0x59245cc5u; + s[10] += s[0]; + s[3] += s[10]; + s[4] = (s[4] ^ s[3]) * 0x513757e1u; + s[7] ^= s[4]; + s[14] += s[7] + 0x7d876976u; + s[1] += s[14]; + s[15] += s[1] + 0x538535d0u; + s[13] ^= (s[15] & s[4]); + s[4] = (s[4] ^ s[13]) * 0x102bd2d9u; + s[2] += s[4]; + s[8] *= (s[2] | 1u); + s[11] -= s[8]; + s[8] *= (s[11] | 1u); + s[9] = mh_rotl(s[9] ^ s[8], 21u); + s[12] -= s[9]; + s[0] ^= s[12] ^ 0x756f1367u; + s[8] = (s[8] ^ s[0]) * 0xeb1d6203u; + s[2] += s[8]; + s[3] = mh_rotl(s[3], 27u) + s[2]; + s[14] = s[14] * 0xbe8a18f5u + s[3]; + s[11] ^= s[14]; + s[14] ^= s[11]; + s[7] += s[14]; + s[2] ^= s[7] ^ 0xa93ccf9du; + s[13] = mh_rotl(s[13] ^ s[2], 30u); + s[6] ^= s[13] ^ 0x0b96528au; + s[12] ^= s[6] ^ 0x7400dce8u; + s[7] ^= (s[12] & s[14]); + s[4] ^= s[7] ^ 0x38e67c0fu; + s[12] ^= s[4]; + s[13] ^= s[12] ^ 0xdb69d44fu; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[5] *= (s[14] | 1u); + s[2] ^= s[5]; + s[0] -= s[2]; + s[14] *= (s[0] | 1u); + s[0] += s[14]; + s[3] += s[0] + 0x412d0838u; + s[11] = mh_rotl(s[11], 6u) + s[3]; + s[3] *= (s[11] | 1u); + s[0] = mh_rotl(s[0], 12u) + s[3]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] = s[0] * 0x514e6f4bu + s[4]; + s[13] ^= s[0] ^ 0xb917c4f4u; + s[5] += s[13] + 0xe81626f3u; + s[1] += s[5]; + s[12] *= (s[1] | 1u); + s[13] -= s[12]; + s[14] = mh_rotl(s[14] ^ s[13], 20u); + s[13] ^= s[14]; + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[14] *= (s[10] | 1u); + s[15] ^= s[14]; + s[13] ^= s[15] ^ 0xdcaf64c9u; + s[11] ^= s[13]; + s[5] -= s[11]; + s[4] = mh_rotl(s[4] ^ s[5], 16u); + s[14] ^= s[4]; + s[15] -= s[14]; + s[5] = mh_rotl(s[5] ^ s[15], 21u); + s[0] -= s[5]; + s[13] = mh_rotl(s[13], 27u) + s[0]; + s[11] = mh_rotl(s[11] ^ s[13], 14u); + s[4] = s[4] * 0x7b1d09a9u + s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6] + 0x62232acfu; + s[15] += s[9]; + s[9] += (s[15] | s[14]); + s[8] += (s[9] | s[6]); + s[2] ^= s[8]; + s[3] = (s[3] ^ s[2]) * 0xb3059c21u; + s[11] = mh_rotl(s[11], 19u) + s[3]; + s[1] ^= s[11]; + s[15] ^= s[1] ^ 0x2171991du; + s[12] += s[15]; + s[0] = mh_rotl(s[0] ^ s[12], 11u); + s[12] = s[12] * 0xcfafa68bu + s[0]; + s[13] += s[12]; + s[8] += s[13]; + s[0] = (s[0] ^ s[8]) * 0x1259bf39u; + s[9] ^= s[0] ^ 0x7b24b75fu; + s[11] *= (s[9] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 26u); + s[13] += (s[8] | s[10]); + s[14] += s[13]; + s[2] = mh_rotl(s[2], 16u) + s[14]; + s[0] *= (s[2] | 1u); + s[7] += s[0]; + s[9] -= s[7]; + s[14] += s[9]; + s[2] ^= s[14] ^ 0xc10a9cc2u; + s[9] *= (s[2] | 1u); + s[12] ^= (s[9] & s[11]); + s[9] = (s[9] ^ s[12]) * 0xa6446659u; + s[7] += s[9]; + s[12] *= (s[7] | 1u); + s[1] -= s[12]; + s[4] = mh_rotl(s[4], 25u) + s[1]; + s[8] ^= s[4]; + s[14] += (s[8] | s[0]); + s[1] += s[14]; + s[6] = mh_rotl(s[6] ^ s[1], 15u); + s[9] -= s[6]; + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[10] -= s[0]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x5006a017u; + s[9] -= s[0]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[12] ^= s[6]; + s[9] -= s[12]; + s[7] += s[9]; + s[1] ^= s[7]; + s[15] = (s[15] ^ s[1]) * 0x0341d025u; + s[6] *= (s[15] | 1u); + s[2] = (s[2] ^ s[6]) * 0xbf30d677u; + s[1] ^= s[2] ^ 0x5a31f2fau; + s[15] += s[1]; + s[9] -= s[15]; + s[10] ^= s[9]; + s[7] ^= s[10]; + s[8] *= (s[7] | 1u); + s[9] -= s[8]; + s[1] += s[9]; + s[6] = s[6] * 0xc029c901u + s[1]; + s[9] = s[9] * 0x0a8b81a9u + s[6]; + s[13] *= (s[9] | 1u); + s[2] ^= (s[13] & s[1]); + s[13] = mh_rotl(s[13], 19u) + s[2]; + s[7] = (s[7] ^ s[13]) * 0x6775be81u; + s[13] = mh_rotl(s[13] ^ s[7], 16u); + s[14] ^= s[13]; + s[11] ^= s[14] ^ 0xeb720242u; + s[13] = mh_rotl(s[13], 14u) + s[11]; + s[5] = mh_rotl(s[5], 20u) + s[13]; + s[11] ^= (s[5] & s[7]); + s[7] = mh_rotl(s[7], 25u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[15] = mh_rotl(s[15] ^ s[3], 20u); + s[9] -= s[15]; + s[4] = mh_rotl(s[4], 2u) + s[9]; + s[2] ^= (s[4] & s[14]); + s[7] += s[2]; + s[9] = mh_rotl(s[9] ^ s[7], 3u); + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[5] *= (s[9] | 1u); + s[9] *= (s[5] | 1u); + s[7] -= s[9]; + s[0] ^= s[7] ^ 0xae9620d3u; + s[6] ^= s[0]; + s[1] ^= s[6]; + s[10] -= s[1]; + s[12] ^= s[10]; + s[4] ^= s[12] ^ 0x3893c42au; + s[15] += s[4]; + s[8] += s[15]; + s[0] += s[8]; + s[12] = (s[12] ^ s[0]) * 0xce1c066bu; + s[15] += s[12]; + s[14] = mh_rotl(s[14] ^ s[15], 17u); + s[12] += s[14]; + s[0] = (s[0] ^ s[12]) * 0xbfe6f35fu; + s[7] = mh_rotl(s[7], 14u) + s[0]; + s[10] ^= s[7]; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[9] -= s[12]; + s[8] ^= s[9]; + s[5] = (s[5] ^ s[8]) * 0xc1d852abu; + s[4] ^= s[5]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 18u); + s[15] = mh_rotl(s[15], 13u) + s[8]; + s[4] = (s[4] ^ s[15]) * 0xb18cd0d9u; + s[6] += s[4]; + s[11] = mh_rotl(s[11] ^ s[6], 14u); + s[3] += s[11] + 0x10533cf0u; + s[14] ^= s[3]; + s[10] ^= s[14] ^ 0x708a914au; + s[13] += s[10]; + s[2] *= (s[13] | 1u); + s[5] -= s[2]; + s[4] = mh_rotl(s[4], 3u) + s[5]; + s[9] ^= s[4] ^ 0xdbe59900u; + s[6] = (s[6] ^ s[9]) * 0x3c084e57u; + s[12] -= s[6]; + s[10] ^= s[12] ^ 0xf4c46888u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[9] = (s[9] ^ s[4]) * 0x6a1a0c53u; + s[4] ^= s[9] ^ 0x595122ddu; + s[11] += s[4] + 0x7a7d85c9u; + s[12] = (s[12] ^ s[11]) * 0x44aad133u; + s[5] += s[12]; + s[2] -= s[5]; + s[12] ^= s[2] ^ 0xd4528978u; + s[3] ^= s[12] ^ 0xe2d6b9c3u; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[9] -= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 10u); + s[7] += s[14]; + s[4] += s[7]; + s[5] ^= s[4]; + s[15] ^= s[5]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] = mh_rotl(s[5], 30u) + s[13]; + s[0] ^= s[5]; + s[10] = (s[10] ^ s[0]) * 0x6e5fb2ebu; + s[7] ^= s[10]; + s[3] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[3], 11u); + s[0] ^= s[11]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[4] ^= s[11]; + s[11] ^= s[4]; + s[2] = (s[2] ^ s[11]) * 0xb5b4f471u; + s[3] += s[2]; + s[1] += s[3]; + s[15] *= (s[1] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[15]; + s[15] ^= s[10]; + s[6] = mh_rotl(s[6], 8u) + s[15]; + s[13] = s[13] * 0x0b61283fu + s[6]; + s[11] ^= s[13]; + s[6] += s[11] + 0xd7cda70fu; + s[2] *= (s[6] | 1u); + s[3] += s[2]; + s[0] += (s[3] | s[11]); + s[10] = s[10] * 0x68301209u + s[0]; + s[13] -= s[10]; + s[5] += s[13] + 0x25d68939u; + s[14] ^= s[5] ^ 0x9315e17cu; + s[8] = mh_rotl(s[8] ^ s[14], 31u); + s[4] *= (s[8] | 1u); + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = s[9] * 0xb3978cd7u + s[1]; + s[0] = (s[0] ^ s[9]) * 0x8f1b658fu; + s[3] = mh_rotl(s[3], 31u) + s[0]; + s[1] += s[3]; + s[14] += s[1] + 0xce275c64u; + s[7] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[7], 23u); + s[3] *= (s[14] | 1u); + s[2] = (s[2] ^ s[3]) * 0xf33fdd1bu; + s[10] ^= s[2]; + s[11] ^= s[10]; + s[10] += s[11] + 0x9a470fc4u; + s[4] = mh_rotl(s[4] ^ s[10], 2u); + s[7] *= (s[4] | 1u); + s[8] ^= (s[7] & s[15]); + s[13] ^= s[8]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[9] += s[5]; + s[6] = mh_rotl(s[6], 22u) + s[9]; + s[2] = (s[2] ^ s[6]) * 0x3b1c9049u; + s[4] = s[4] * 0x5964f96fu + s[2]; + s[13] = mh_rotl(s[13] ^ s[4], 31u); + s[6] -= s[13]; + s[13] ^= s[6]; + s[0] = (s[0] ^ s[13]) * 0x9806df37u; + s[12] = s[12] * 0xfcc0e3e5u + s[0]; + s[8] += s[12]; + s[6] += s[8]; + s[1] += s[6]; + s[9] ^= s[1] ^ 0x6dbea2d7u; + s[2] = s[2] * 0x856b34bdu + s[9]; + s[13] += s[2]; + s[2] ^= s[13]; + s[0] += s[2]; + s[11] += s[0]; + s[2] += s[11]; + s[12] ^= (s[2] & s[4]); + s[0] ^= s[12] ^ 0x50a4b36au; + s[12] += s[0]; + s[8] += s[12]; + s[13] ^= s[8]; + s[4] ^= s[13]; + s[15] += s[4]; + s[13] ^= (s[15] & s[7]); + s[7] = mh_rotl(s[7], 26u) + s[13]; + s[4] ^= s[7]; + s[9] *= (s[4] | 1u); + s[7] += s[9]; + s[14] ^= s[7] ^ 0x65c7cdaau; + s[15] = s[15] * 0xf2b2c56fu + s[14]; + s[12] ^= s[15]; + s[8] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 5u); + s[0] -= s[11]; + s[9] += s[0]; + s[4] *= (s[9] | 1u); + s[13] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[13]; + s[8] = mh_rotl(s[8], 24u) + s[0]; + s[0] ^= s[8]; + s[13] += (s[0] | s[6]); + s[15] ^= s[13]; + s[0] ^= s[15] ^ 0x263b836bu; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[14] = (s[14] ^ s[10]) * 0xd6a0e7c7u; + s[15] = (s[15] ^ s[14]) * 0x4017ec97u; + s[8] ^= s[15]; + s[14] ^= s[8] ^ 0x1ebe6b44u; + s[7] = (s[7] ^ s[14]) * 0x8b99dbe1u; + s[10] += s[7]; + s[2] ^= s[10]; + s[12] *= (s[2] | 1u); + s[8] += (s[12] | s[4]); + s[5] = mh_rotl(s[5] ^ s[8], 26u); + s[8] = mh_rotl(s[8] ^ s[5], 31u); + s[13] ^= s[8]; + s[1] ^= s[13] ^ 0xf9ab26dbu; + s[3] += s[1] + 0x27337e87u; + s[14] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[14], 25u); + s[2] -= s[15]; + s[9] ^= (s[2] & s[4]); + s[11] += s[9]; + s[8] -= s[11]; + s[4] += s[8]; + s[8] -= s[4]; + s[11] += s[8]; + s[1] ^= s[11]; + s[11] ^= s[1]; + s[7] = mh_rotl(s[7] ^ s[11], 19u); + s[0] = (s[0] ^ s[7]) * 0xff057d15u; + s[12] = mh_rotl(s[12], 7u) + s[0]; + s[15] += (s[12] | s[10]); + s[9] = mh_rotl(s[9] ^ s[15], 17u); + s[0] ^= s[9] ^ 0x87439202u; + s[12] -= s[0]; + s[13] ^= s[12] ^ 0x201ac58au; + s[2] = mh_rotl(s[2], 7u) + s[13]; + s[11] = mh_rotl(s[11] ^ s[2], 27u); + s[9] = s[9] * 0x55d080fdu + s[11]; + s[6] ^= s[9]; + s[13] = (s[13] ^ s[6]) * 0x5efcd7afu; + s[8] = mh_rotl(s[8], 7u) + s[13]; + s[2] = mh_rotl(s[2], 26u) + s[8]; + s[5] ^= s[2]; + s[0] *= (s[5] | 1u); + s[6] += s[0] + 0x5c1d235du; + s[1] = s[1] * 0x52eb2ecfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xc0730f2du; + s[10] += s[8]; + s[13] ^= s[10]; + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[12], 16u); + s[15] = mh_rotl(s[15] ^ s[10], 21u); + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[4] = s[4] * 0x7a636847u + s[5]; + s[6] += s[4]; + s[15] = mh_rotl(s[15], 15u) + s[6]; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[10] *= (s[8] | 1u); + s[1] += s[10]; + s[13] -= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 2u); + s[13] += s[12]; + s[14] -= s[13]; + s[5] ^= s[14] ^ 0x4b128721u; + s[9] ^= s[5]; + s[1] ^= s[9] ^ 0xdb597223u; + s[5] = mh_rotl(s[5], 29u) + s[1]; + s[1] = mh_rotl(s[1], 15u) + s[5]; + s[9] = s[9] * 0xdad6bd3fu + s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[9] *= (s[7] | 1u); + s[7] ^= s[9]; + s[2] ^= s[7]; + s[13] -= s[2]; + s[11] += (s[13] | s[6]); + s[4] = mh_rotl(s[4], 12u) + s[11]; + s[14] ^= s[4]; + s[15] = (s[15] ^ s[14]) * 0xde79981du; + s[7] = (s[7] ^ s[15]) * 0x285c589bu; + s[8] *= (s[7] | 1u); + s[15] += s[8]; + s[5] += s[15]; + s[9] ^= s[5]; + s[3] ^= s[9] ^ 0x44325084u; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[12] = mh_rotl(s[12], 10u) + s[2]; + s[1] = mh_rotl(s[1], 8u) + s[12]; + s[14] += s[1]; + s[5] ^= s[14] ^ 0x194b2a3cu; + s[12] ^= s[5]; + s[10] = mh_rotl(s[10], 6u) + s[12]; + s[11] = s[11] * 0xe1fe8c79u + s[10]; + s[0] ^= (s[11] & s[15]); + s[7] = mh_rotl(s[7], 17u) + s[0]; + s[2] ^= s[7]; + s[8] = mh_rotl(s[8], 10u) + s[2]; + s[15] = mh_rotl(s[15], 2u) + s[8]; + s[10] += s[15] + 0xbf36d9bbu; + s[12] += s[10]; + s[7] = mh_rotl(s[7], 12u) + s[12]; + s[3] ^= s[7] ^ 0x60dc6edeu; + s[7] = s[7] * 0x154bbc1fu + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[7] ^= (s[9] & s[8]); + s[1] = mh_rotl(s[1], 14u) + s[7]; + s[14] += s[1]; + s[7] = mh_rotl(s[7] ^ s[14], 15u); + s[12] = mh_rotl(s[12] ^ s[7], 7u); + s[8] += s[12] + 0x4ce700ffu; + s[5] ^= s[8]; + s[1] += s[5]; + s[15] ^= s[1] ^ 0x4cfd0e8bu; + s[14] += s[15]; + s[11] += s[14]; + s[13] ^= s[11]; + s[3] = (s[3] ^ s[13]) * 0xea89cab7u; + s[7] ^= s[3]; + s[8] = mh_rotl(s[8], 30u) + s[7]; + s[3] ^= s[8]; + s[10] -= s[3]; + s[7] = s[7] * 0x32632399u + s[10]; + s[2] = mh_rotl(s[2], 26u) + s[7]; + s[6] ^= s[2]; + s[2] -= s[6]; + s[13] *= (s[2] | 1u); + s[7] ^= s[13]; + s[10] ^= (s[7] & s[5]); + s[0] += (s[10] | s[2]); + s[10] *= (s[0] | 1u); + s[6] += s[10] + 0xca92c16du; + s[0] += s[6] + 0x24751e21u; + s[13] ^= s[0] ^ 0x06baa3b2u; + s[3] *= (s[13] | 1u); + s[5] -= s[3]; + s[14] = s[14] * 0x1cff685fu + s[5]; + s[8] += s[14]; + s[10] = mh_rotl(s[10] ^ s[8], 24u); + s[12] ^= s[10]; + s[0] += s[12]; + s[4] = (s[4] ^ s[0]) * 0x8430392bu; + s[9] = mh_rotl(s[9] ^ s[4], 24u); + s[2] = mh_rotl(s[2] ^ s[9], 12u); + s[1] += (s[2] | s[12]); + s[7] ^= s[1] ^ 0x54490fa2u; + s[9] *= (s[7] | 1u); + s[0] = mh_rotl(s[0], 20u) + s[9]; + s[8] += (s[0] | s[7]); + s[11] *= (s[8] | 1u); + s[15] += s[11]; + s[13] += s[15] + 0xa29fa06cu; + s[4] += s[13] + 0x6856416au; + s[3] ^= s[4]; + s[8] = mh_rotl(s[8] ^ s[3], 13u); + s[12] ^= s[8]; + s[3] *= (s[12] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] = mh_rotl(s[13] ^ s[1], 4u); + s[9] += s[13] + 0x212b6434u; + s[12] -= s[9]; + s[8] = (s[8] ^ s[12]) * 0xb91c4009u; + s[7] ^= s[8] ^ 0xbcb896bdu; + s[12] *= (s[7] | 1u); + s[15] = mh_rotl(s[15], 20u) + s[12]; + s[5] ^= (s[15] & s[3]); + s[3] ^= s[5]; + s[6] ^= s[3]; + s[2] = s[2] * 0x9e1aba47u + s[6]; + s[0] += s[2]; + s[3] = mh_rotl(s[3] ^ s[0], 17u); + s[10] ^= s[3]; + s[4] = (s[4] ^ s[10]) * 0xd432bf1du; + s[15] ^= s[4] ^ 0xc8d68ea4u; + s[6] = mh_rotl(s[6], 25u) + s[15]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[1] += (s[2] | s[9]); + s[4] = mh_rotl(s[4] ^ s[1], 25u); + s[12] = (s[12] ^ s[4]) * 0x0320a6b1u; + s[3] ^= s[12]; + s[13] = (s[13] ^ s[3]) * 0xf03bba6du; + s[15] *= (s[13] | 1u); + s[12] += s[15]; + s[1] -= s[12]; + s[9] += s[1]; + s[12] = mh_rotl(s[12] ^ s[9], 23u); + s[10] += s[12] + 0x83f986e6u; + s[0] = (s[0] ^ s[10]) * 0xa4cb0d1du; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[1] ^= s[7] ^ 0x9014b7bbu; + s[4] = (s[4] ^ s[1]) * 0x272bd217u; + s[0] += s[4]; + s[2] = mh_rotl(s[2], 18u) + s[0]; + s[12] = mh_rotl(s[12] ^ s[2], 2u); + s[14] ^= s[12]; + s[9] ^= s[14] ^ 0x16ac9a1eu; + s[2] = mh_rotl(s[2], 15u) + s[9]; + s[1] = mh_rotl(s[1], 10u) + s[2]; + s[4] = s[4] * 0xe0b6e0c3u + s[1]; + s[0] = mh_rotl(s[0], 25u) + s[4]; + s[15] += s[0]; + s[4] = s[4] * 0x1b6cbd07u + s[15]; + s[5] ^= s[4] ^ 0x567146e8u; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[10] += s[4]; + s[0] = s[0] * 0xe8a3abd1u + s[10]; + s[10] += s[0] + 0x5eb953e5u; + s[6] += s[10]; + s[4] = mh_rotl(s[4] ^ s[6], 10u); + s[5] += (s[4] | s[0]); + s[1] = (s[1] ^ s[5]) * 0x9a8851e3u; + s[15] += s[1]; + s[3] -= s[15]; + s[6] -= s[3]; + s[0] ^= s[6]; + s[6] ^= s[0] ^ 0x8522b09fu; + s[2] -= s[6]; + s[7] ^= s[2] ^ 0x4a7c01ddu; + s[6] += s[7] + 0x1790f84fu; + s[14] = (s[14] ^ s[6]) * 0xe3e9ed8bu; + s[1] ^= s[14]; + s[10] -= s[1]; + s[11] += s[10]; + s[4] = s[4] * 0x6371fb67u + s[11]; + s[2] -= s[4]; + s[14] += s[2]; + s[2] *= (s[14] | 1u); + s[1] ^= (s[2] & s[9]); + s[13] = mh_rotl(s[13], 12u) + s[1]; + s[15] = mh_rotl(s[15], 26u) + s[13]; + s[5] = (s[5] ^ s[15]) * 0xbc5643e1u; + s[14] += s[5]; + s[7] ^= s[14]; + s[10] = (s[10] ^ s[7]) * 0x79039a69u; + s[3] -= s[10]; + s[8] -= s[3]; + s[14] ^= s[8]; + s[13] = (s[13] ^ s[14]) * 0x1b4013ffu; + s[3] *= (s[13] | 1u); + s[12] = s[12] * 0x309d80d3u + s[3]; + s[6] *= (s[12] | 1u); + s[5] ^= s[6]; + s[2] += s[5]; + s[14] = mh_rotl(s[14], 6u) + s[2]; + s[15] = mh_rotl(s[15] ^ s[14], 6u); + s[14] ^= (s[15] & s[0]); + s[3] = mh_rotl(s[3] ^ s[14], 29u); + s[5] ^= s[3] ^ 0xa5a0aeffu; + s[10] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[10], 23u); + s[1] *= (s[9] | 1u); + s[4] += s[1]; + s[0] += (s[4] | s[1]); + s[14] ^= s[0]; + s[3] += s[14]; + s[15] ^= s[3]; + s[6] += (s[15] | s[12]); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[0] = s[0] * 0xf76673f3u + s[7]; + s[15] ^= (s[0] & s[4]); + s[12] ^= s[15]; + s[6] = s[6] * 0x36c04137u + s[12]; + s[9] ^= s[6] ^ 0xaf963084u; + s[13] *= (s[9] | 1u); + s[11] *= (s[13] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 7u); + s[13] = s[13] * 0x69f233a3u + s[8]; + s[3] += s[13]; + s[1] = mh_rotl(s[1] ^ s[3], 19u); + s[6] = (s[6] ^ s[1]) * 0x0416e137u; + s[12] ^= s[6]; + s[1] = (s[1] ^ s[12]) * 0xca07bafdu; + s[14] ^= s[1]; + s[7] += (s[14] | s[2]); + s[3] *= (s[7] | 1u); + s[11] = mh_rotl(s[11], 15u) + s[3]; + s[8] = mh_rotl(s[8], 6u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[8], 15u); + s[2] = mh_rotl(s[2], 28u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[2], 28u); + s[11] ^= s[9]; + s[9] ^= s[11]; + s[12] = (s[12] ^ s[9]) * 0xbefcfdbbu; + s[6] += s[12]; + s[2] ^= s[6] ^ 0x899a552eu; + s[0] += s[2]; + s[6] ^= s[0]; + s[5] -= s[6]; + s[7] -= s[5]; + s[14] += (s[7] | s[10]); + s[8] += s[14] + 0x0de3dc6bu; + s[10] += s[8]; + s[2] += s[10]; + s[12] = mh_rotl(s[12] ^ s[2], 31u); + s[9] = (s[9] ^ s[12]) * 0x6052a829u; + s[7] = (s[7] ^ s[9]) * 0x97670939u; + s[14] = mh_rotl(s[14], 15u) + s[7]; + s[12] += s[14] + 0x010cd5e8u; + s[9] = mh_rotl(s[9], 2u) + s[12]; + s[0] ^= s[9]; + s[5] += s[0]; + s[3] *= (s[5] | 1u); + s[15] += s[3] + 0x77f4510du; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[13], 4u); + s[5] += s[11]; + s[9] ^= (s[5] & s[7]); + s[1] = mh_rotl(s[1], 6u) + s[9]; + s[6] *= (s[1] | 1u); + s[9] ^= s[6]; + s[3] ^= s[9] ^ 0xcc2ee068u; + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[11] = mh_rotl(s[11], 31u) + s[14]; + s[0] += s[11] + 0x3191cb8fu; + s[12] ^= (s[0] & s[1]); + s[14] += (s[12] | s[13]); + s[11] = (s[11] ^ s[14]) * 0x29e0c4c3u; + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[3] *= (s[6] | 1u); + s[6] += s[3]; + s[13] ^= s[6] ^ 0x0e54f612u; + s[4] ^= s[13]; + s[5] += s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] = s[14] * 0x37c87275u + s[11]; +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_4(uint* s) { + s[15] ^= s[0] ^ 0xb6c1e90cu; + s[2] = mh_rotl(s[2], 19u) + s[15]; + s[8] = s[8] * 0x28bc533du + s[2]; + s[5] ^= s[8]; + s[6] = (s[6] ^ s[5]) * 0x86d067fbu; + s[10] ^= s[6] ^ 0x75a5b862u; + s[14] ^= s[10] ^ 0xd8b962f7u; + s[8] -= s[14]; + s[1] ^= s[8]; + s[11] ^= s[1]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[4] += (s[6] | s[8]); + s[5] ^= (s[4] & s[10]); + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 10u); + s[0] ^= s[5] ^ 0x3da9ef7eu; + s[12] ^= s[0]; + s[3] ^= s[12] ^ 0xfe29da15u; + s[0] += s[3]; + s[5] ^= (s[0] & s[4]); + s[7] += (s[5] | s[12]); + s[9] += (s[7] | s[2]); + s[14] ^= s[9]; + s[15] += s[14] + 0xecc0e6cfu; + s[4] += s[15]; + s[10] = (s[10] ^ s[4]) * 0x71d36d0bu; + s[15] ^= s[10] ^ 0x3834ef56u; + s[11] = (s[11] ^ s[15]) * 0xf3f2126du; + s[4] -= s[11]; + s[5] += s[4]; + s[12] = mh_rotl(s[12], 23u) + s[5]; + s[14] += s[12] + 0xee23cc86u; + s[0] += s[14]; + s[3] ^= s[0] ^ 0x9ff2f793u; + s[8] += s[3]; + s[7] += s[8]; + s[11] ^= s[7] ^ 0x9ca003edu; + s[15] += (s[11] | s[9]); + s[12] = mh_rotl(s[12] ^ s[15], 17u); + s[7] = mh_rotl(s[7] ^ s[12], 7u); + s[5] ^= s[7] ^ 0xf6d26d41u; + s[15] ^= s[5] ^ 0xad445899u; + s[11] += s[15] + 0x94157a95u; + s[2] *= (s[11] | 1u); + s[10] += s[2]; + s[4] ^= s[10] ^ 0xfb1e1d1eu; + s[7] = (s[7] ^ s[4]) * 0xd7d5e433u; + s[12] += s[7] + 0x4329bd0du; + s[15] -= s[12]; + s[0] = (s[0] ^ s[15]) * 0x802ba143u; + s[2] = mh_rotl(s[2], 29u) + s[0]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[3] = mh_rotl(s[3], 25u) + s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 10u); + s[6] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 21u) + s[6]; + s[14] *= (s[13] | 1u); + s[12] = (s[12] ^ s[14]) * 0x5445cbf5u; + s[15] += s[12]; + s[1] += s[15] + 0xdf315f06u; + s[5] ^= s[1] ^ 0x9aea526cu; + s[15] += s[5]; + s[1] = (s[1] ^ s[15]) * 0xa5708ab3u; + s[8] += s[1] + 0x41e6f337u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 14u) + s[5]; + s[6] += s[3]; + s[9] = mh_rotl(s[9] ^ s[6], 12u); + s[4] += s[9]; + s[8] += s[4]; + s[1] += s[8] + 0xc618b3f4u; + s[2] = s[2] * 0x6195bb5fu + s[1]; + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[6] *= (s[14] | 1u); + s[14] *= (s[6] | 1u); + s[6] ^= s[14] ^ 0x00ed6668u; + s[14] = mh_rotl(s[14] ^ s[6], 9u); + s[10] += s[14] + 0x9e4bdfd0u; + s[9] = mh_rotl(s[9] ^ s[10], 2u); + s[6] ^= (s[9] & s[4]); + s[15] ^= s[6]; + s[12] += s[15]; + s[5] += s[12] + 0x88d2c32au; + s[6] *= (s[5] | 1u); + s[10] += s[6]; + s[15] += s[10] + 0xf6c730abu; + s[6] += (s[15] | s[9]); + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[14] = (s[14] ^ s[1]) * 0xc68fd8b7u; + s[13] ^= s[14]; + s[2] += s[13]; + s[5] ^= s[2]; + s[6] += s[5]; + s[7] ^= (s[6] & s[0]); + s[14] = (s[14] ^ s[7]) * 0x014b019fu; + s[10] -= s[14]; + s[5] = mh_rotl(s[5], 24u) + s[10]; + s[14] ^= s[5]; + s[10] += s[14] + 0x0431e88cu; + s[15] -= s[10]; + s[9] *= (s[15] | 1u); + s[2] = (s[2] ^ s[9]) * 0x237066cfu; + s[5] *= (s[2] | 1u); + s[2] ^= s[5] ^ 0x4510e4bcu; + s[5] = mh_rotl(s[5], 16u) + s[2]; + s[10] ^= s[5]; + s[5] += s[10] + 0xb102c58bu; + s[12] *= (s[5] | 1u); + s[0] = (s[0] ^ s[12]) * 0x535043a5u; + s[3] = (s[3] ^ s[0]) * 0x1f7a2dffu; + s[14] = (s[14] ^ s[3]) * 0xdae8e3c7u; + s[12] ^= s[14] ^ 0xbc9e9bd9u; + s[8] += (s[12] | s[14]); + s[6] = mh_rotl(s[6], 6u) + s[8]; + s[2] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[6] += s[3]; + s[9] -= s[6]; + s[8] = (s[8] ^ s[9]) * 0x7256fab5u; + s[3] ^= s[8]; + s[2] ^= s[3] ^ 0x1506dae2u; + s[11] ^= s[2]; + s[9] ^= s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 9u); + s[10] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[12] -= s[3]; + s[2] = (s[2] ^ s[12]) * 0x91fe8e99u; + s[6] ^= s[2]; + s[15] += s[6]; + s[1] -= s[15]; + s[9] *= (s[1] | 1u); + s[0] += s[9] + 0xb9d5c4abu; + s[15] = s[15] * 0xbf261023u + s[0]; + s[11] += s[15]; + s[3] ^= (s[11] & s[9]); + s[0] = mh_rotl(s[0], 28u) + s[3]; + s[14] ^= s[0]; + s[10] += (s[14] | s[3]); + s[14] = mh_rotl(s[14] ^ s[10], 1u); + s[10] ^= s[14]; + s[0] *= (s[10] | 1u); + s[5] = (s[5] ^ s[0]) * 0x94c8cd23u; + s[1] = mh_rotl(s[1] ^ s[5], 1u); + s[4] = mh_rotl(s[4], 14u) + s[1]; + s[6] += s[4]; + s[7] = s[7] * 0x3498a9b3u + s[6]; + s[0] -= s[7]; + s[4] += s[0]; + s[14] += s[4]; + s[15] = mh_rotl(s[15], 8u) + s[14]; + s[11] += s[15] + 0x4a892dacu; + s[0] = mh_rotl(s[0] ^ s[11], 13u); + s[15] = mh_rotl(s[15] ^ s[0], 12u); + s[7] ^= s[15] ^ 0xd668f578u; + s[3] -= s[7]; + s[8] *= (s[3] | 1u); + s[10] += s[8]; + s[8] = mh_rotl(s[8], 14u) + s[10]; + s[13] = mh_rotl(s[13] ^ s[8], 8u); + s[9] ^= s[13]; + s[15] ^= s[9]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[8] *= (s[4] | 1u); + s[7] *= (s[8] | 1u); + s[12] *= (s[7] | 1u); + s[1] ^= s[12]; + s[0] = mh_rotl(s[0] ^ s[1], 12u); + s[4] = (s[4] ^ s[0]) * 0x9e6913c7u; + s[3] = (s[3] ^ s[4]) * 0xff70743fu; + s[13] ^= s[3]; + s[4] = mh_rotl(s[4], 5u) + s[13]; + s[15] += (s[4] | s[2]); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[6] += s[7]; + s[8] = mh_rotl(s[8] ^ s[6], 26u); + s[5] = (s[5] ^ s[8]) * 0x71b981efu; + s[15] ^= (s[5] & s[0]); + s[13] += s[15] + 0x211b525au; + s[0] += s[13] + 0x235124dcu; + s[4] = (s[4] ^ s[0]) * 0x96db8fb9u; + s[15] = mh_rotl(s[15], 10u) + s[4]; + s[13] += s[15]; + s[4] = (s[4] ^ s[13]) * 0x00f4145fu; + s[9] ^= (s[4] & s[1]); + s[2] = mh_rotl(s[2] ^ s[9], 30u); + s[10] += (s[2] | s[3]); + s[1] = mh_rotl(s[1], 25u) + s[10]; + s[12] *= (s[1] | 1u); + s[4] *= (s[12] | 1u); + s[14] ^= s[4] ^ 0x23e8ae4fu; + s[10] -= s[14]; + s[7] += s[10]; + s[11] = s[11] * 0x28fe7415u + s[7]; + s[9] = mh_rotl(s[9] ^ s[11], 1u); + s[8] = (s[8] ^ s[9]) * 0xf9445edfu; + s[5] ^= (s[8] & s[7]); + s[13] = mh_rotl(s[13], 13u) + s[5]; + s[15] *= (s[13] | 1u); + s[13] ^= s[15]; + s[1] -= s[13]; + s[11] = mh_rotl(s[11], 31u) + s[1]; + s[14] += s[11] + 0xf84dc8acu; + s[2] ^= s[14]; + s[9] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 5u); + s[11] ^= s[14]; + s[9] ^= s[11] ^ 0xec241426u; + s[15] += (s[9] | s[6]); + s[1] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[12] ^= s[5]; + s[7] = mh_rotl(s[7] ^ s[12], 8u); + s[15] -= s[7]; + s[7] = s[7] * 0x0fbb88d1u + s[15]; + s[8] = mh_rotl(s[8] ^ s[7], 11u); + s[9] = (s[9] ^ s[8]) * 0x61f086f3u; + s[14] *= (s[9] | 1u); + s[11] += s[14]; + s[5] = mh_rotl(s[5] ^ s[11], 6u); + s[4] += s[5]; + s[8] ^= s[4]; + s[3] -= s[8]; + s[15] -= s[3]; + s[11] += (s[15] | s[1]); + s[10] ^= s[11]; + s[14] += s[10]; + s[11] += (s[14] | s[4]); + s[14] -= s[11]; + s[0] -= s[14]; + s[6] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 1u) + s[6]; + s[14] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[14], 29u); + s[14] ^= s[9] ^ 0x99f79e3cu; + s[2] ^= s[14]; + s[8] *= (s[2] | 1u); + s[12] ^= (s[8] & s[10]); + s[10] *= (s[12] | 1u); + s[14] += (s[10] | s[9]); + s[11] = s[11] * 0x451cdab1u + s[14]; + s[1] = s[1] * 0x7103d94du + s[11]; + s[6] ^= s[1]; + s[9] += s[6]; + s[3] ^= (s[9] & s[15]); + s[0] -= s[3]; + s[14] ^= s[0]; + s[9] += s[14] + 0x89535c2fu; + s[10] += s[9]; + s[9] += s[10]; + s[13] += s[9]; + s[7] += s[13]; + s[12] += s[7]; + s[8] += s[12] + 0xa6e4da0cu; + s[14] *= (s[8] | 1u); + s[4] += (s[14] | s[0]); + s[6] *= (s[4] | 1u); + s[13] += s[6]; + s[2] ^= s[13]; + s[8] ^= s[2]; + s[4] = (s[4] ^ s[8]) * 0x6209b3c5u; + s[15] += s[4]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15], 27u) + s[5]; + s[2] = mh_rotl(s[2], 29u) + s[15]; + s[10] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[4] -= s[2]; + s[0] += s[4]; + s[4] *= (s[0] | 1u); + s[1] *= (s[4] | 1u); + s[11] ^= s[1]; + s[8] = mh_rotl(s[8] ^ s[11], 3u); + s[6] += s[8] + 0xc67c23a1u; + s[1] = s[1] * 0x033df6bfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xb5308d7du; + s[6] -= s[8]; + s[9] *= (s[6] | 1u); + s[12] -= s[9]; + s[1] += (s[12] | s[4]); + s[2] += (s[1] | s[7]); + s[7] += (s[2] | s[0]); + s[3] *= (s[7] | 1u); + s[5] += s[3]; + s[10] = mh_rotl(s[10] ^ s[5], 20u); + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[14] *= (s[5] | 1u); + s[6] ^= s[14]; + s[14] += s[6]; + s[7] ^= s[14] ^ 0x47ba5e42u; + s[4] ^= s[7] ^ 0xc5c5e46fu; + s[10] = mh_rotl(s[10] ^ s[4], 23u); + s[3] -= s[10]; + s[8] = mh_rotl(s[8] ^ s[3], 12u); + s[15] ^= s[8] ^ 0xf988e79du; + s[1] += s[15]; + s[8] += (s[1] | s[15]); + s[13] = mh_rotl(s[13], 10u) + s[8]; + s[4] += s[13]; + s[8] = mh_rotl(s[8], 24u) + s[4]; + s[6] += s[8]; + s[12] *= (s[6] | 1u); + s[14] ^= s[12]; + s[15] += (s[14] | s[4]); + s[10] += s[15] + 0xad0c3a1cu; + s[8] ^= s[10]; + s[10] ^= s[8] ^ 0x0985d0ffu; + s[3] = (s[3] ^ s[10]) * 0xd3d14647u; + s[12] ^= s[3]; + s[0] = s[0] * 0xba477023u + s[12]; + s[8] ^= s[0]; + s[14] ^= s[8]; + s[12] = mh_rotl(s[12] ^ s[14], 30u); + s[8] ^= s[12] ^ 0x749d3378u; + s[10] -= s[8]; + s[2] += s[10]; + s[11] = s[11] * 0xb9714083u + s[2]; + s[5] *= (s[11] | 1u); + s[15] ^= (s[5] & s[14]); + s[6] += s[15]; + s[5] = (s[5] ^ s[6]) * 0x5673a9bfu; + s[1] ^= (s[5] & s[0]); + s[12] ^= s[1] ^ 0x10153309u; + s[4] += s[12]; + s[10] = (s[10] ^ s[4]) * 0xd28d9ef9u; + s[14] = s[14] * 0xc16dc36du + s[10]; + s[15] ^= s[14] ^ 0x0609a343u; + s[10] += s[15] + 0xccc127adu; + s[6] ^= (s[10] & s[7]); + s[11] = mh_rotl(s[11] ^ s[6], 29u); + s[7] ^= s[11]; + s[0] = mh_rotl(s[0], 21u) + s[7]; + s[15] += s[0]; + s[14] += s[15]; + s[8] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[8], 7u); + s[10] ^= s[15]; + s[13] += s[10]; + s[5] += (s[13] | s[0]); + s[0] ^= (s[5] & s[9]); + s[2] += s[0]; + s[0] *= (s[2] | 1u); + s[2] = (s[2] ^ s[0]) * 0xadbfbcf9u; + s[8] = mh_rotl(s[8], 7u) + s[2]; + s[5] ^= s[8]; + s[7] ^= s[5] ^ 0x11a571cfu; + s[10] ^= s[7]; + s[0] = (s[0] ^ s[10]) * 0x012ab04fu; + s[10] += s[0] + 0xe41f365bu; + s[9] ^= s[10] ^ 0x914568adu; + s[15] *= (s[9] | 1u); + s[14] ^= s[15] ^ 0x535f623du; + s[11] += (s[14] | s[3]); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10], 3u) + s[14]; + s[9] -= s[10]; + s[4] = (s[4] ^ s[9]) * 0xb4b4f5c7u; + s[1] += s[4]; + s[14] -= s[1]; + s[7] ^= (s[14] & s[4]); + s[15] ^= (s[7] & s[13]); + s[9] = mh_rotl(s[9], 23u) + s[15]; + s[1] -= s[9]; + s[8] = (s[8] ^ s[1]) * 0x17a6461du; + s[3] ^= s[8]; + s[9] ^= s[3]; + s[2] = s[2] * 0x7c061aadu + s[9]; + s[14] += s[2]; + s[9] += s[14] + 0x8c896e71u; + s[15] = mh_rotl(s[15] ^ s[9], 17u); + s[0] ^= s[15]; + s[6] = s[6] * 0x0884864du + s[0]; + s[7] += (s[6] | s[10]); + s[9] ^= s[7] ^ 0xe1a426feu; + s[11] = mh_rotl(s[11], 1u) + s[9]; + s[14] *= (s[11] | 1u); + s[12] ^= s[14] ^ 0x9b63a170u; + s[1] -= s[12]; + s[3] ^= (s[1] & s[14]); + s[9] = s[9] * 0xe67ddf4du + s[3]; + s[1] = mh_rotl(s[1] ^ s[9], 13u); + s[7] ^= s[1]; + s[13] = (s[13] ^ s[7]) * 0x55b6aa85u; + s[3] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 8u) + s[3]; + s[2] *= (s[4] | 1u); + s[15] ^= s[2]; + s[1] ^= s[15]; + s[12] ^= s[1]; + s[4] *= (s[12] | 1u); + s[13] ^= (s[4] & s[5]); + s[6] ^= s[13]; + s[15] -= s[6]; + s[2] *= (s[15] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] = mh_rotl(s[10], 12u) + s[14]; + s[8] = (s[8] ^ s[10]) * 0x820a80d3u; + s[11] *= (s[8] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 4u); + s[1] ^= (s[12] & s[10]); + s[12] += s[1] + 0x179d4563u; + s[2] ^= s[12] ^ 0xf1c8d57cu; + s[11] = s[11] * 0x27fd820fu + s[2]; + s[7] = (s[7] ^ s[11]) * 0x9b5d3177u; + s[8] += (s[7] | s[10]); + s[9] = mh_rotl(s[9], 28u) + s[8]; + s[2] = mh_rotl(s[2], 9u) + s[9]; + s[10] = mh_rotl(s[10], 17u) + s[2]; + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[2] ^= s[8] ^ 0xdf4a6b10u; + s[15] ^= s[2] ^ 0xce02ff19u; + s[7] += s[15]; + s[5] += s[7] + 0x43b32c96u; + s[14] ^= s[5]; + s[2] = s[2] * 0xdcd59df9u + s[14]; + s[13] = s[13] * 0x2da5f733u + s[2]; + s[4] = mh_rotl(s[4] ^ s[13], 1u); + s[10] = mh_rotl(s[10], 3u) + s[4]; + s[15] ^= (s[10] & s[8]); + s[5] -= s[15]; + s[8] += s[5]; + s[14] = mh_rotl(s[14] ^ s[8], 24u); + s[7] = mh_rotl(s[7], 10u) + s[14]; + s[12] += (s[7] | s[9]); + s[14] = mh_rotl(s[14] ^ s[12], 25u); + s[11] += s[14]; + s[13] ^= s[11] ^ 0x292b93c0u; + s[12] += (s[13] | s[3]); + s[7] = mh_rotl(s[7] ^ s[12], 19u); + s[15] = mh_rotl(s[15], 15u) + s[7]; + s[5] += s[15]; + s[4] += s[5] + 0xf240675bu; + s[2] += s[4]; + s[11] = mh_rotl(s[11] ^ s[2], 26u); + s[4] += s[11] + 0x58805483u; + s[7] *= (s[4] | 1u); + s[0] += s[7]; + s[5] ^= s[0]; + s[4] += s[5]; + s[12] = mh_rotl(s[12], 27u) + s[4]; + s[2] += s[12] + 0x9c60169eu; + s[3] += s[2]; + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[11] = mh_rotl(s[11] ^ s[15], 28u); + s[2] += s[11]; + s[9] -= s[2]; + s[12] ^= s[9]; + s[7] += s[12] + 0x70e6e273u; + s[3] = mh_rotl(s[3] ^ s[7], 29u); + s[10] -= s[3]; + s[11] ^= (s[10] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 5u); + s[13] += s[1]; + s[6] -= s[13]; + s[4] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[4], 15u); + s[11] = mh_rotl(s[11], 9u) + s[6]; + s[0] ^= s[11]; + s[1] = mh_rotl(s[1], 17u) + s[0]; + s[2] += s[1] + 0xc83d763au; + s[13] += s[2] + 0xc18aa580u; + s[6] = mh_rotl(s[6] ^ s[13], 12u); + s[4] *= (s[6] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[1] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[1], 21u); + s[6] += s[3]; + s[15] = (s[15] ^ s[6]) * 0x228e4019u; + s[13] *= (s[15] | 1u); + s[7] ^= s[13]; + s[4] += s[7] + 0x59e10c11u; + s[15] = mh_rotl(s[15], 25u) + s[4]; + s[2] += (s[15] | s[3]); + s[15] += s[2] + 0xa95ffd72u; + s[5] ^= s[15]; + s[6] *= (s[5] | 1u); + s[15] += s[6] + 0x95d25be9u; + s[5] -= s[15]; + s[1] ^= s[5] ^ 0x709c86b4u; + s[9] = mh_rotl(s[9] ^ s[1], 27u); + s[15] += s[9] + 0xac8ad479u; + s[4] ^= s[15]; + s[6] = s[6] * 0x0571185bu + s[4]; + s[9] = mh_rotl(s[9], 13u) + s[6]; + s[14] ^= s[9]; + s[9] += s[14]; + s[2] += (s[9] | s[5]); + s[15] += (s[2] | s[14]); + s[3] = mh_rotl(s[3] ^ s[15], 13u); + s[5] -= s[3]; + s[15] += (s[5] | s[6]); + s[11] *= (s[15] | 1u); + s[8] -= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 27u); + s[3] += s[12] + 0xdc6b4196u; + s[8] ^= s[3] ^ 0x274048d2u; + s[2] *= (s[8] | 1u); + s[9] += s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 2u); + s[2] ^= s[14] ^ 0xb343b907u; + s[6] = mh_rotl(s[6] ^ s[2], 9u); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] ^= s[10]; + s[3] += s[14] + 0xa61ab1cbu; + s[8] ^= s[3]; + s[6] ^= s[8]; + s[8] ^= (s[6] & s[13]); + s[5] += s[8]; + s[0] ^= s[5]; + s[5] ^= s[0] ^ 0x70e371acu; + s[12] += s[5] + 0x0375455eu; + s[9] *= (s[12] | 1u); + s[12] -= s[9]; + s[13] ^= s[12]; + s[11] *= (s[13] | 1u); + s[0] = (s[0] ^ s[11]) * 0xc8207715u; + s[8] += s[0] + 0x30e154a7u; + s[11] ^= (s[8] & s[14]); + s[2] = mh_rotl(s[2], 28u) + s[11]; + s[7] = mh_rotl(s[7], 4u) + s[2]; + s[6] ^= s[7]; + s[8] += (s[6] | s[3]); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xa50fe152u; + s[4] += s[13]; + s[6] += s[4] + 0x5efa53b9u; + s[7] -= s[6]; + s[9] *= (s[7] | 1u); + s[0] ^= s[9] ^ 0xc117bdb1u; + s[1] ^= s[0] ^ 0xfb4c4c7fu; + s[9] += s[1] + 0x40542f12u; + s[14] ^= (s[9] & s[4]); + s[8] -= s[14]; + s[0] += (s[8] | s[5]); + s[14] += s[0]; + s[3] = (s[3] ^ s[14]) * 0x03c3c7b3u; + s[1] += s[3]; + s[5] ^= s[1] ^ 0x1db7ba5du; + s[15] -= s[5]; + s[13] += s[15] + 0x31cd0b01u; + s[4] ^= s[13] ^ 0xfe8d5080u; + s[7] ^= (s[4] & s[10]); + s[15] -= s[7]; + s[11] = (s[11] ^ s[15]) * 0x7a957f49u; + s[9] ^= s[11]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[11] *= (s[9] | 1u); + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[14] ^= s[5]; + s[10] += s[14]; + s[3] = mh_rotl(s[3], 9u) + s[10]; + s[15] *= (s[3] | 1u); + s[3] += s[15]; + s[14] += s[3]; + s[12] = (s[12] ^ s[14]) * 0x74df9dafu; + s[13] ^= s[12] ^ 0x6234d2f0u; + s[7] *= (s[13] | 1u); + s[0] ^= (s[7] & s[8]); + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] += s[6]; + s[2] += s[12] + 0x7878283cu; + s[3] = (s[3] ^ s[2]) * 0xc395c285u; + s[2] += s[3] + 0x0da9f095u; + s[15] = (s[15] ^ s[2]) * 0x0a11adabu; + s[3] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[3], 29u); + s[10] ^= s[0]; + s[8] *= (s[10] | 1u); + s[15] += s[8] + 0x9a71469fu; + s[14] += s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 22u); + s[8] *= (s[2] | 1u); + s[2] *= (s[8] | 1u); + s[14] = s[14] * 0xf8f0a631u + s[2]; + s[11] += s[14]; + s[0] += s[11]; + s[6] = s[6] * 0xaa299f0fu + s[0]; + s[0] ^= s[6] ^ 0xd0857982u; + s[10] = mh_rotl(s[10] ^ s[0], 27u); + s[12] *= (s[10] | 1u); + s[2] ^= s[12]; + s[0] += s[2]; + s[3] ^= s[0]; + s[2] = (s[2] ^ s[3]) * 0xfd0d9051u; + s[9] = mh_rotl(s[9] ^ s[2], 18u); + s[7] = mh_rotl(s[7] ^ s[9], 17u); + s[5] ^= s[7]; + s[10] = (s[10] ^ s[5]) * 0xde9ff341u; + s[9] ^= s[10] ^ 0xb2e1d8d8u; + s[12] += s[9]; + s[6] ^= s[12]; + s[9] += s[6]; + s[4] = (s[4] ^ s[9]) * 0x3420a8a9u; + s[14] -= s[4]; + s[15] ^= s[14] ^ 0x995ab330u; + s[4] = mh_rotl(s[4] ^ s[15], 17u); + s[6] ^= s[4]; + s[8] = (s[8] ^ s[6]) * 0xa3e9c281u; + s[2] = (s[2] ^ s[8]) * 0xb3f79451u; + s[4] += s[2]; + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = (s[9] ^ s[1]) * 0x4a9cfe2bu; + s[4] ^= s[9]; + s[12] -= s[4]; + s[2] += s[12]; + s[5] = mh_rotl(s[5] ^ s[2], 25u); + s[7] -= s[5]; + s[2] -= s[7]; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[7] ^= (s[9] & s[12]); + s[8] += s[7]; + s[5] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[6] = mh_rotl(s[6] ^ s[7], 13u); + s[14] += s[6]; + s[1] = mh_rotl(s[1] ^ s[14], 27u); + s[13] = mh_rotl(s[13], 21u) + s[1]; + s[15] ^= s[13]; + s[13] ^= s[15] ^ 0x40932bd0u; + s[8] += (s[13] | s[6]); + s[6] += s[8]; + s[7] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 16u) + s[7]; + s[14] -= s[3]; + s[11] += s[14] + 0x2ba58291u; + s[10] += s[11] + 0x25cc7cbau; + s[3] = mh_rotl(s[3], 25u) + s[10]; + s[5] = mh_rotl(s[5] ^ s[3], 8u); + s[12] ^= (s[5] & s[7]); + s[14] *= (s[12] | 1u); + s[6] *= (s[14] | 1u); + s[0] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[0], 8u); + s[10] += s[7]; + s[8] *= (s[10] | 1u); + s[9] = (s[9] ^ s[8]) * 0x1669b1c1u; + s[12] ^= (s[9] & s[13]); + s[14] += s[12] + 0xda1c472du; + s[5] += s[14]; + s[1] = mh_rotl(s[1] ^ s[5], 14u); + s[15] = (s[15] ^ s[1]) * 0x8d0bb03bu; + s[10] += s[15] + 0x3c561da4u; + s[2] -= s[10]; + s[14] ^= s[2] ^ 0xea52ad39u; + s[12] += s[14] + 0x16903f58u; + s[1] -= s[12]; + s[6] = mh_rotl(s[6] ^ s[1], 25u); + s[7] = (s[7] ^ s[6]) * 0xb4a42f9bu; + s[1] ^= s[7]; + s[8] ^= (s[1] & s[4]); + s[13] ^= s[8] ^ 0xb1ef97a0u; + s[4] = mh_rotl(s[4] ^ s[13], 19u); + s[6] ^= (s[4] & s[10]); + s[3] -= s[6]; + s[4] += s[3]; + s[12] *= (s[4] | 1u); + s[8] = mh_rotl(s[8], 18u) + s[12]; + s[2] -= s[8]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] ^= s[0]; + s[9] = mh_rotl(s[9], 28u) + s[6]; + s[12] = (s[12] ^ s[9]) * 0x8a328161u; + s[7] ^= s[12]; + s[11] = (s[11] ^ s[7]) * 0x59795b43u; + s[15] = mh_rotl(s[15], 9u) + s[11]; + s[8] += s[15] + 0x7c995d60u; + s[3] += s[8]; + s[4] = s[4] * 0xfa1378abu + s[3]; + s[3] *= (s[4] | 1u); + s[5] -= s[3]; + s[1] += (s[5] | s[11]); + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[2] = s[2] * 0x9acc1327u + s[7]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 6u); + s[8] ^= s[13]; + s[15] -= s[8]; + s[0] *= (s[15] | 1u); + s[4] *= (s[0] | 1u); + s[14] -= s[4]; + s[15] ^= s[14]; + s[14] *= (s[15] | 1u); + s[3] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[3], 30u); + s[9] += s[14]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[14] ^= s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 23u); + s[5] = mh_rotl(s[5] ^ s[2], 19u); + s[4] *= (s[5] | 1u); + s[7] *= (s[4] | 1u); + s[9] = mh_rotl(s[9] ^ s[7], 15u); + s[13] += s[9]; + s[11] *= (s[13] | 1u); + s[5] = (s[5] ^ s[11]) * 0xde859b27u; + s[11] = s[11] * 0xb564c36bu + s[5]; + s[10] ^= s[11]; + s[9] *= (s[10] | 1u); + s[14] = (s[14] ^ s[9]) * 0x8d89e53du; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = (s[8] ^ s[15]) * 0xe37283afu; + s[14] ^= s[8]; + s[12] ^= s[14]; + s[5] += (s[12] | s[6]); + s[13] += s[5]; + s[9] *= (s[13] | 1u); + s[14] *= (s[9] | 1u); + s[10] = s[10] * 0x5c918de7u + s[14]; + s[3] ^= s[10] ^ 0x6d738cdau; + s[12] += s[3]; + s[9] = (s[9] ^ s[12]) * 0xc4d29b63u; + s[2] *= (s[9] | 1u); + s[6] = (s[6] ^ s[2]) * 0x32887aa7u; + s[11] ^= s[6]; + s[9] += s[11] + 0x1e9643ebu; + s[12] = mh_rotl(s[12], 2u) + s[9]; + s[11] -= s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 18u); + s[2] ^= s[1]; + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[15], 18u); + s[13] ^= s[12]; + s[1] ^= s[13]; + s[5] ^= (s[1] & s[3]); + s[12] += s[5]; + s[11] ^= s[12] ^ 0xf49f879eu; + s[15] ^= s[11]; + s[12] += s[15]; + s[4] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 18u); +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_5(uint* s) { + s[3] += s[0]; + s[6] = (s[6] ^ s[3]) * 0xeb8c24a9u; + s[5] = (s[5] ^ s[6]) * 0xec704d07u; + s[10] += (s[5] | s[14]); + s[14] ^= s[10] ^ 0x62c5c9a6u; + s[8] += (s[14] | s[1]); + s[9] -= s[8]; + s[11] += (s[9] | s[13]); + s[14] ^= (s[11] & s[13]); + s[15] = mh_rotl(s[15], 21u) + s[14]; + s[13] *= (s[15] | 1u); + s[11] ^= (s[13] & s[7]); + s[0] = mh_rotl(s[0] ^ s[11], 24u); + s[9] *= (s[0] | 1u); + s[14] = s[14] * 0xab36a85du + s[9]; + s[0] = s[0] * 0xa839c927u + s[14]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4] ^ 0x83d1d8a6u; + s[3] = (s[3] ^ s[0]) * 0x54110efdu; + s[13] += s[3]; + s[12] = mh_rotl(s[12] ^ s[13], 19u); + s[5] = (s[5] ^ s[12]) * 0xbcdfd83fu; + s[3] = s[3] * 0xb0a88cb1u + s[5]; + s[9] = mh_rotl(s[9], 21u) + s[3]; + s[7] = (s[7] ^ s[9]) * 0x643041d5u; + s[0] += s[7] + 0x014758c4u; + s[5] = (s[5] ^ s[0]) * 0x582df671u; + s[15] = s[15] * 0x31ec0f8du + s[5]; + s[11] = mh_rotl(s[11], 26u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[11], 6u); + s[4] ^= s[13] ^ 0xb0a4a410u; + s[5] *= (s[4] | 1u); + s[9] += s[5]; + s[1] ^= s[9]; + s[9] ^= s[1] ^ 0xc0bebcdfu; + s[2] ^= s[9]; + s[1] += s[2]; + s[13] = (s[13] ^ s[1]) * 0x71bad59du; + s[10] -= s[13]; + s[6] += s[10]; + s[9] = s[9] * 0x79718b5fu + s[6]; + s[2] = (s[2] ^ s[9]) * 0x12ef487du; + s[10] ^= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[11] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 16u); + s[2] = (s[2] ^ s[9]) * 0x56756b3fu; + s[10] = mh_rotl(s[10] ^ s[2], 2u); + s[6] += s[10]; + s[7] = s[7] * 0x0b4e6385u + s[6]; + s[10] += s[7]; + s[13] ^= s[10]; + s[5] -= s[13]; + s[14] ^= s[5]; + s[11] ^= (s[14] & s[0]); + s[6] = s[6] * 0x4fd7e53du + s[11]; + s[1] *= (s[6] | 1u); + s[15] += s[1]; + s[12] ^= s[15]; + s[10] += s[12]; + s[0] = mh_rotl(s[0] ^ s[10], 2u); + s[7] ^= s[0]; + s[14] ^= s[7] ^ 0x2a2f99f7u; + s[0] *= (s[14] | 1u); + s[7] ^= (s[0] & s[1]); + s[4] ^= s[7]; + s[13] += s[4]; + s[0] = (s[0] ^ s[13]) * 0x36833905u; + s[5] -= s[0]; + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[9] = mh_rotl(s[9], 12u) + s[3]; + s[14] ^= s[9]; + s[13] += s[14] + 0xe3bd2b0fu; + s[12] += s[13] + 0x4413899eu; + s[10] ^= s[12]; + s[1] ^= s[10]; + s[10] = mh_rotl(s[10], 31u) + s[1]; + s[8] = s[8] * 0xf8854e6du + s[10]; + s[2] ^= s[8] ^ 0x1391c2f2u; + s[4] = mh_rotl(s[4], 26u) + s[2]; + s[7] ^= s[4] ^ 0xb7b8bc86u; + s[3] *= (s[7] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] ^= s[1]; + s[1] -= s[13]; + s[10] += s[1]; + s[2] = mh_rotl(s[2] ^ s[10], 5u); + s[6] += s[2] + 0x4e72cc89u; + s[12] ^= (s[6] & s[1]); + s[0] -= s[12]; + s[6] = (s[6] ^ s[0]) * 0xfdbe52d7u; + s[1] -= s[6]; + s[8] = mh_rotl(s[8], 30u) + s[1]; + s[5] += s[8]; + s[8] ^= (s[5] & s[13]); + s[15] += (s[8] | s[1]); + s[12] *= (s[15] | 1u); + s[15] *= (s[12] | 1u); + s[2] += s[15]; + s[5] += (s[2] | s[6]); + s[6] += (s[5] | s[4]); + s[14] = mh_rotl(s[14] ^ s[6], 8u); + s[0] *= (s[14] | 1u); + s[5] += s[0] + 0x09c67ebeu; + s[15] ^= s[5] ^ 0x156bc1ccu; + s[4] = mh_rotl(s[4], 28u) + s[15]; + s[7] += s[4]; + s[8] ^= s[7]; + s[6] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[6], 27u); + s[8] ^= s[4]; + s[15] = (s[15] ^ s[8]) * 0xa06ef0edu; + s[13] = mh_rotl(s[13] ^ s[15], 21u); + s[7] = mh_rotl(s[7] ^ s[13], 7u); + s[9] = (s[9] ^ s[7]) * 0x6d635cb5u; + s[15] += s[9]; + s[14] -= s[15]; + s[7] = mh_rotl(s[7] ^ s[14], 28u); + s[0] = mh_rotl(s[0], 9u) + s[7]; + s[8] ^= s[0]; + s[4] -= s[8]; + s[15] = mh_rotl(s[15], 6u) + s[4]; + s[11] = mh_rotl(s[11] ^ s[15], 15u); + s[7] -= s[11]; + s[12] = (s[12] ^ s[7]) * 0x01fed389u; + s[8] += s[12]; + s[14] -= s[8]; + s[1] = mh_rotl(s[1] ^ s[14], 28u); + s[5] *= (s[1] | 1u); + s[12] += s[5]; + s[14] += s[12]; + s[10] = mh_rotl(s[10] ^ s[14], 3u); + s[5] = (s[5] ^ s[10]) * 0xad88f2d5u; + s[1] += s[5]; + s[11] ^= s[1] ^ 0x77926639u; + s[9] ^= s[11]; + s[12] -= s[9]; + s[8] = s[8] * 0xfa22d721u + s[12]; + s[0] ^= s[8] ^ 0xe9e4f8edu; + s[5] = mh_rotl(s[5], 17u) + s[0]; + s[11] += s[5]; + s[1] ^= s[11]; + s[13] ^= s[1] ^ 0xfaae7919u; + s[1] += (s[13] | s[0]); + s[9] = mh_rotl(s[9] ^ s[1], 22u); + s[3] *= (s[9] | 1u); + s[10] ^= s[3]; + s[5] -= s[10]; + s[2] += s[5]; + s[14] = mh_rotl(s[14] ^ s[2], 5u); + s[4] ^= s[14]; + s[5] *= (s[4] | 1u); + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[15] = (s[15] ^ s[5]) * 0x34c09009u; + s[8] *= (s[15] | 1u); + s[12] ^= (s[8] & s[13]); + s[4] += s[12]; + s[12] += s[4] + 0xe0c44ae5u; + s[8] = mh_rotl(s[8], 12u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[8], 11u); + s[2] ^= s[12]; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[13] += s[0] + 0x7a0818e1u; + s[12] = mh_rotl(s[12], 2u) + s[13]; + s[8] ^= (s[12] & s[1]); + s[6] ^= s[8]; + s[8] *= (s[6] | 1u); + s[14] += s[8]; + s[9] = mh_rotl(s[9] ^ s[14], 7u); + s[14] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[14], 2u); + s[12] ^= s[9]; + s[3] ^= s[12] ^ 0xfaa7ba68u; + s[10] = mh_rotl(s[10], 26u) + s[3]; + s[4] ^= s[10] ^ 0x69fb8372u; + s[8] ^= s[4]; + s[14] = (s[14] ^ s[8]) * 0xd0560d4fu; + s[5] ^= s[14]; + s[0] *= (s[5] | 1u); + s[10] ^= (s[0] & s[13]); + s[7] += s[10]; + s[8] = s[8] * 0xf397c40du + s[7]; + s[4] ^= s[8] ^ 0x8bf8d86au; + s[13] ^= s[4] ^ 0x8bc1b817u; + s[0] = mh_rotl(s[0], 28u) + s[13]; + s[4] += s[0]; + s[10] ^= s[4]; + s[12] += s[10]; + s[0] = mh_rotl(s[0] ^ s[12], 18u); + s[1] = (s[1] ^ s[0]) * 0x587d6993u; + s[10] = mh_rotl(s[10], 14u) + s[1]; + s[3] ^= s[10] ^ 0xe428141au; + s[13] *= (s[3] | 1u); + s[12] = mh_rotl(s[12] ^ s[13], 22u); + s[14] -= s[12]; + s[1] -= s[14]; + s[6] = mh_rotl(s[6], 31u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[6], 16u); + s[6] = s[6] * 0xd2da54cdu + s[11]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[4] += s[12] + 0x6e5c8780u; + s[15] ^= s[4] ^ 0x437bad36u; + s[9] = mh_rotl(s[9], 7u) + s[15]; + s[11] = s[11] * 0x68e0eacbu + s[9]; + s[6] += s[11]; + s[5] -= s[6]; + s[12] ^= (s[5] & s[10]); + s[13] = (s[13] ^ s[12]) * 0x613ad747u; + s[2] += s[13] + 0x16b1a53du; + s[3] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[15] += s[14] + 0x33619f2eu; + s[6] ^= s[15]; + s[15] = mh_rotl(s[15], 24u) + s[6]; + s[12] += s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[9] += s[10]; + s[4] *= (s[9] | 1u); + s[6] ^= s[4]; + s[13] -= s[6]; + s[1] *= (s[13] | 1u); + s[11] *= (s[1] | 1u); + s[7] *= (s[11] | 1u); + s[13] -= s[7]; + s[0] = (s[0] ^ s[13]) * 0xfeca92ddu; + s[9] = mh_rotl(s[9] ^ s[0], 24u); + s[14] ^= (s[9] & s[10]); + s[0] -= s[14]; + s[5] ^= s[0]; + s[9] ^= s[5]; + s[5] = (s[5] ^ s[9]) * 0xe0456a5du; + s[11] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[11], 29u); + s[11] = mh_rotl(s[11] ^ s[10], 24u); + s[0] += (s[11] | s[15]); + s[2] ^= s[0] ^ 0x4625da37u; + s[6] = mh_rotl(s[6] ^ s[2], 26u); + s[3] -= s[6]; + s[9] += s[3]; + s[4] ^= (s[9] & s[12]); + s[7] *= (s[4] | 1u); + s[1] -= s[7]; + s[3] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 23u); + s[6] = (s[6] ^ s[2]) * 0x3bbae9d3u; + s[1] = mh_rotl(s[1] ^ s[6], 10u); + s[8] ^= s[1]; + s[15] = (s[15] ^ s[8]) * 0xb5172567u; + s[3] += s[15]; + s[0] ^= (s[3] & s[5]); + s[2] = (s[2] ^ s[0]) * 0xbfe80ff1u; + s[14] -= s[2]; + s[6] -= s[14]; + s[0] = mh_rotl(s[0] ^ s[6], 24u); + s[10] = s[10] * 0x965ee7ebu + s[0]; + s[15] -= s[10]; + s[0] += s[15]; + s[4] += s[0]; + s[3] = mh_rotl(s[3], 14u) + s[4]; + s[12] += (s[3] | s[9]); + s[5] = mh_rotl(s[5] ^ s[12], 3u); + s[9] *= (s[5] | 1u); + s[5] += s[9]; + s[14] = (s[14] ^ s[5]) * 0xb64f271du; + s[9] -= s[14]; + s[8] *= (s[9] | 1u); + s[3] = (s[3] ^ s[8]) * 0x69f51253u; + s[13] -= s[3]; + s[12] ^= s[13] ^ 0x8ee490b4u; + s[13] = mh_rotl(s[13] ^ s[12], 27u); + s[14] ^= s[13] ^ 0xbcfac44eu; + s[15] += s[14]; + s[1] = mh_rotl(s[1], 6u) + s[15]; + s[14] += s[1]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[10] += (s[6] | s[4]); + s[6] *= (s[10] | 1u); + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[8] = mh_rotl(s[8], 21u) + s[13]; + s[3] -= s[8]; + s[12] = mh_rotl(s[12] ^ s[3], 9u); + s[10] += s[12] + 0x346fb7eeu; + s[3] -= s[10]; + s[12] += s[3] + 0xc936ca56u; + s[3] -= s[12]; + s[5] = mh_rotl(s[5], 2u) + s[3]; + s[11] ^= s[5]; + s[12] ^= s[11] ^ 0x46abb8ffu; + s[10] += s[12]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[11] = mh_rotl(s[11], 31u) + s[2]; + s[7] += (s[11] | s[4]); + s[3] ^= s[7] ^ 0x8c92b860u; + s[6] += s[3]; + s[11] *= (s[6] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 1u); + s[9] = mh_rotl(s[9], 22u) + s[8]; + s[5] ^= s[9]; + s[9] ^= s[5] ^ 0x6d49ae98u; + s[12] *= (s[9] | 1u); + s[0] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[0]; + s[10] = s[10] * 0xfceded15u + s[5]; + s[6] ^= s[10]; + s[7] += s[6]; + s[10] = mh_rotl(s[10], 26u) + s[7]; + s[13] += s[10]; + s[15] ^= (s[13] & s[10]); + s[10] ^= s[15] ^ 0x10494cd6u; + s[13] = s[13] * 0x043625d1u + s[10]; + s[5] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[5], 5u); + s[2] = (s[2] ^ s[7]) * 0x1276600bu; + s[8] = (s[8] ^ s[2]) * 0xac53054bu; + s[10] ^= s[8] ^ 0xd5306663u; + s[15] += s[10]; + s[8] *= (s[15] | 1u); + s[0] = (s[0] ^ s[8]) * 0x12dd02dbu; + s[1] = mh_rotl(s[1] ^ s[0], 29u); + s[4] = mh_rotl(s[4] ^ s[1], 12u); + s[13] = mh_rotl(s[13], 21u) + s[4]; + s[4] = (s[4] ^ s[13]) * 0xd9d84eddu; + s[2] += s[4]; + s[12] -= s[2]; + s[6] ^= s[12] ^ 0xa6690db7u; + s[14] += s[6]; + s[5] += s[14] + 0x3d839e2bu; + s[12] = mh_rotl(s[12] ^ s[5], 18u); + s[10] ^= (s[12] & s[9]); + s[14] = (s[14] ^ s[10]) * 0x8735918du; + s[0] = mh_rotl(s[0] ^ s[14], 25u); + s[14] += s[0] + 0x4032aa8du; + s[6] = mh_rotl(s[6], 6u) + s[14]; + s[1] ^= s[6] ^ 0x2c453b82u; + s[0] = (s[0] ^ s[1]) * 0x2a9abf35u; + s[2] -= s[0]; + s[4] ^= (s[2] & s[11]); + s[2] *= (s[4] | 1u); + s[5] ^= s[2]; + s[6] = mh_rotl(s[6] ^ s[5], 17u); + s[14] ^= s[6] ^ 0xb98cf2eeu; + s[0] ^= s[14]; + s[12] += s[0] + 0x37fc2a78u; + s[10] += s[12]; + s[12] = (s[12] ^ s[10]) * 0xb13a0e53u; + s[9] = (s[9] ^ s[12]) * 0x59d4dc61u; + s[10] += s[9] + 0xed0d9cecu; + s[6] = mh_rotl(s[6], 27u) + s[10]; + s[10] ^= s[6]; + s[1] += s[10] + 0x38911ae4u; + s[2] = mh_rotl(s[2], 4u) + s[1]; + s[3] += (s[2] | s[6]); + s[15] = s[15] * 0xa10c5147u + s[3]; + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[3] -= s[9]; + s[4] ^= s[3] ^ 0x09b8cee2u; + s[13] += (s[4] | s[8]); + s[14] -= s[13]; + s[10] ^= s[14] ^ 0xde5b028du; + s[14] *= (s[10] | 1u); + s[4] += s[14] + 0xbebd25ffu; + s[11] ^= s[4]; + s[15] += s[11]; + s[3] ^= s[15] ^ 0x0157f354u; + s[2] = (s[2] ^ s[3]) * 0x2e6b681du; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[11] += (s[0] | s[7]); + s[9] = mh_rotl(s[9] ^ s[11], 28u); + s[1] ^= (s[9] & s[5]); + s[2] = (s[2] ^ s[1]) * 0x8c67acb5u; + s[9] = mh_rotl(s[9] ^ s[2], 15u); + s[5] += (s[9] | s[14]); + s[7] += s[5]; + s[10] += (s[7] | s[15]); + s[12] = mh_rotl(s[12] ^ s[10], 12u); + s[10] = (s[10] ^ s[12]) * 0x8321a9edu; + s[15] ^= s[10] ^ 0x2bb47d41u; + s[1] += s[15] + 0xf55a878du; + s[3] ^= s[1] ^ 0x5f495580u; + s[12] += s[3]; + s[15] -= s[12]; + s[10] += s[15]; + s[14] ^= s[10]; + s[12] = (s[12] ^ s[14]) * 0x6982d931u; + s[6] ^= s[12] ^ 0x5a0647a9u; + s[3] ^= s[6]; + s[11] = mh_rotl(s[11] ^ s[3], 28u); + s[6] = mh_rotl(s[6], 9u) + s[11]; + s[9] = mh_rotl(s[9], 17u) + s[6]; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[13] ^= s[15]; + s[2] += s[13] + 0x161113b3u; + s[5] ^= s[2] ^ 0x51604bb3u; + s[13] = mh_rotl(s[13], 20u) + s[5]; + s[7] += s[13] + 0x485a1932u; + s[14] -= s[7]; + s[12] ^= (s[14] & s[3]); + s[14] = mh_rotl(s[14], 29u) + s[12]; + s[7] -= s[14]; + s[9] ^= s[7]; + s[14] ^= (s[9] & s[12]); + s[8] = (s[8] ^ s[14]) * 0xa3da88b9u; + s[6] = (s[6] ^ s[8]) * 0xdd3e9ca3u; + s[12] ^= s[6]; + s[4] += (s[12] | s[13]); + s[13] = (s[13] ^ s[4]) * 0x0658106fu; + s[10] = (s[10] ^ s[13]) * 0x49f6cb31u; + s[3] ^= s[10] ^ 0x3342d583u; + s[13] = mh_rotl(s[13], 20u) + s[3]; + s[14] ^= s[13] ^ 0xc5f67216u; + s[4] = (s[4] ^ s[14]) * 0xc7b5f0fdu; + s[2] = (s[2] ^ s[4]) * 0xfec902c3u; + s[10] += s[2]; + s[5] ^= (s[10] & s[8]); + s[2] ^= s[5]; + s[11] ^= s[2]; + s[0] ^= s[11] ^ 0x8646d6d8u; + s[13] += s[0] + 0x4fc0a99fu; + s[10] = (s[10] ^ s[13]) * 0x34655acfu; + s[12] = mh_rotl(s[12], 15u) + s[10]; + s[3] = mh_rotl(s[3], 31u) + s[12]; + s[11] ^= s[3] ^ 0xece30db7u; + s[13] += s[11] + 0x723a0b0eu; + s[14] -= s[13]; + s[1] += s[14]; + s[10] ^= s[1]; + s[12] *= (s[10] | 1u); + s[4] ^= s[12]; + s[13] ^= s[4]; + s[0] += s[13]; + s[4] -= s[0]; + s[5] *= (s[4] | 1u); + s[14] += s[5]; + s[15] = (s[15] ^ s[14]) * 0xca24c253u; + s[0] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[0], 3u); + s[13] = (s[13] ^ s[8]) * 0x4c689903u; + s[3] ^= s[13]; + s[5] ^= s[3]; + s[4] += s[5] + 0xd0e100c0u; + s[9] ^= (s[4] & s[6]); + s[10] = mh_rotl(s[10] ^ s[9], 27u); + s[0] = s[0] * 0xec7a3889u + s[10]; + s[3] -= s[0]; + s[1] ^= s[3] ^ 0x61331fd7u; + s[9] = mh_rotl(s[9] ^ s[1], 15u); + s[0] ^= s[9]; + s[7] += s[0] + 0xa7848bacu; + s[11] += s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 6u); + s[11] -= s[2]; + s[3] -= s[11]; + s[13] ^= s[3]; + s[7] = (s[7] ^ s[13]) * 0xd454fc59u; + s[13] ^= (s[7] & s[1]); + s[9] += s[13] + 0xdaba595au; + s[11] ^= s[9] ^ 0x0dbe4c62u; + s[6] -= s[11]; + s[7] = s[7] * 0x64236413u + s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 19u); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[1] += s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[10] = mh_rotl(s[10] ^ s[14], 24u); + s[8] = (s[8] ^ s[10]) * 0x11582fa5u; + s[0] -= s[8]; + s[3] ^= s[0] ^ 0xe88102d4u; + s[5] = mh_rotl(s[5], 16u) + s[3]; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[3] = mh_rotl(s[3], 1u) + s[2]; + s[4] -= s[3]; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[0], 10u); + s[12] += s[3]; + s[8] = mh_rotl(s[8] ^ s[12], 24u); + s[9] = mh_rotl(s[9], 31u) + s[8]; + s[7] -= s[9]; + s[10] ^= s[7]; + s[4] += (s[10] | s[2]); + s[5] ^= s[4]; + s[1] += s[5] + 0xa17d3697u; + s[4] = mh_rotl(s[4] ^ s[1], 13u); + s[12] ^= s[4]; + s[7] ^= s[12]; + s[14] = mh_rotl(s[14] ^ s[7], 25u); + s[4] = mh_rotl(s[4], 28u) + s[14]; + s[14] -= s[4]; + s[12] ^= s[14]; + s[6] -= s[12]; + s[5] = mh_rotl(s[5] ^ s[6], 5u); + s[2] += s[5] + 0x6f8f3046u; + s[9] += s[2]; + s[8] = (s[8] ^ s[9]) * 0xbcb4183du; + s[11] += s[8]; + s[13] *= (s[11] | 1u); + s[15] += s[13]; + s[8] = (s[8] ^ s[15]) * 0x4f5a0a23u; + s[13] += s[8] + 0x26061a70u; + s[3] ^= s[13] ^ 0x9351deb0u; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[5] += s[13]; + s[3] -= s[5]; + s[13] += s[3]; + s[7] = (s[7] ^ s[13]) * 0xc9cd8fcdu; + s[10] *= (s[7] | 1u); + s[7] -= s[10]; + s[5] += s[7]; + s[1] += s[5]; + s[15] ^= (s[1] & s[8]); + s[9] -= s[15]; + s[10] = mh_rotl(s[10], 24u) + s[9]; + s[6] = mh_rotl(s[6], 1u) + s[10]; + s[3] ^= s[6]; + s[0] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[0], 20u); + s[5] += s[12]; + s[0] = s[0] * 0x2418a23du + s[5]; + s[11] = (s[11] ^ s[0]) * 0x6c58993bu; + s[14] ^= s[11] ^ 0x4a8ca854u; + s[15] *= (s[14] | 1u); + s[0] += s[15]; + s[11] = mh_rotl(s[11] ^ s[0], 17u); + s[5] -= s[11]; + s[6] *= (s[5] | 1u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[4] ^= s[10]; + s[14] = mh_rotl(s[14], 28u) + s[4]; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x54779a6fu; + s[4] += s[9]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 22u); + s[12] += (s[8] | s[7]); + s[8] = mh_rotl(s[8], 7u) + s[12]; + s[14] -= s[8]; + s[3] ^= s[14] ^ 0x5bc9132cu; + s[1] ^= s[3] ^ 0xa3e75626u; + s[8] = (s[8] ^ s[1]) * 0x4a1396f7u; + s[5] = mh_rotl(s[5] ^ s[8], 27u); + s[11] += s[5]; + s[4] = mh_rotl(s[4] ^ s[11], 8u); + s[7] = (s[7] ^ s[4]) * 0x88273613u; + s[15] += s[7]; + s[1] -= s[15]; + s[12] ^= (s[1] & s[9]); + s[14] += s[12]; + s[7] = s[7] * 0x5081a79du + s[14]; + s[6] = mh_rotl(s[6], 14u) + s[7]; + s[3] ^= s[6]; + s[10] = s[10] * 0x1b283fddu + s[3]; + s[6] = (s[6] ^ s[10]) * 0x73e5e60fu; + s[3] = (s[3] ^ s[6]) * 0xc9863803u; + s[1] ^= s[3]; + s[15] -= s[1]; + s[5] ^= (s[15] & s[7]); + s[14] += s[5]; + s[8] += s[14] + 0x185096cdu; + s[11] ^= s[8] ^ 0x9ef04aa3u; + s[5] -= s[11]; + s[2] = mh_rotl(s[2] ^ s[5], 18u); + s[9] += s[2]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[15], 27u); + s[10] -= s[0]; + s[2] = mh_rotl(s[2] ^ s[10], 7u); + s[15] += s[2] + 0x442bb076u; + s[8] ^= (s[15] & s[13]); + s[14] = mh_rotl(s[14], 31u) + s[8]; + s[15] ^= s[14]; + s[4] -= s[15]; + s[15] *= (s[4] | 1u); + s[11] = mh_rotl(s[11], 3u) + s[15]; + s[1] *= (s[11] | 1u); + s[11] = mh_rotl(s[11] ^ s[1], 19u); + s[3] = mh_rotl(s[3] ^ s[11], 21u); + s[1] = (s[1] ^ s[3]) * 0x6cbc5bb9u; + s[6] += s[1]; + s[3] = s[3] * 0xe2cb6cebu + s[6]; + s[1] += s[3]; + s[13] = mh_rotl(s[13], 19u) + s[1]; + s[3] ^= s[13]; + s[11] -= s[3]; + s[0] += s[11]; + s[8] *= (s[0] | 1u); + s[11] += s[8] + 0x6853a703u; + s[9] ^= s[11]; + s[10] += s[9]; + s[12] = (s[12] ^ s[10]) * 0x9a3ac6dbu; + s[10] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 8u); + s[2] ^= s[13]; + s[10] -= s[2]; + s[12] = (s[12] ^ s[10]) * 0x833838d1u; + s[9] = mh_rotl(s[9], 3u) + s[12]; + s[2] ^= s[9]; + s[12] ^= s[2]; + s[11] = (s[11] ^ s[12]) * 0x2370b681u; + s[9] = (s[9] ^ s[11]) * 0x7f4b0295u; + s[11] ^= s[9]; + s[9] = s[9] * 0x06b0dc0du + s[11]; + s[5] ^= s[9]; + s[12] = mh_rotl(s[12] ^ s[5], 19u); + s[4] *= (s[12] | 1u); + s[3] ^= (s[4] & s[8]); + s[6] += s[3]; + s[1] += s[6] + 0xc6e02045u; + s[9] += s[1] + 0xf8f493d8u; + s[12] -= s[9]; + s[2] += s[12]; + s[14] += s[2]; + s[10] = mh_rotl(s[10], 29u) + s[14]; + s[7] += s[10]; + s[12] += s[7]; + s[7] += s[12]; + s[12] -= s[7]; + s[3] ^= s[12]; + s[11] ^= s[3] ^ 0xd6f7214fu; + s[3] ^= s[11]; + s[15] = (s[15] ^ s[3]) * 0x0f25c855u; + s[5] -= s[15]; + s[1] ^= s[5]; + s[0] += s[1]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[10] = (s[10] ^ s[15]) * 0x286496e5u; + s[12] += s[10] + 0x3e03a265u; + s[1] -= s[12]; + s[3] -= s[1]; + s[14] ^= s[3] ^ 0xdf78ab91u; + s[10] = s[10] * 0x64a3bcb1u + s[14]; + s[11] += s[10]; + s[1] += s[11]; + s[11] ^= s[1] ^ 0x163d1a0fu; + s[15] = s[15] * 0xfcc7a02bu + s[11]; + s[8] -= s[15]; + s[3] += s[8] + 0x2fc585d7u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[4] = (s[4] ^ s[9]) * 0xf91a42afu; + s[13] += s[4]; + s[15] = s[15] * 0xb3102455u + s[13]; + s[11] -= s[15]; + s[12] ^= s[11]; + s[14] = (s[14] ^ s[12]) * 0xd7e9b5afu; + s[5] = mh_rotl(s[5], 1u) + s[14]; + s[2] += s[5]; + s[0] ^= s[2]; + s[6] = (s[6] ^ s[0]) * 0xf95b573du; + s[8] = (s[8] ^ s[6]) * 0x115cc1f5u; + s[3] = s[3] * 0x7bb26c65u + s[8]; + s[1] ^= s[3]; + s[9] = s[9] * 0xcdee5da3u + s[1]; + s[4] *= (s[9] | 1u); + s[11] += s[4] + 0xb5fccc2bu; + s[2] += s[11] + 0x5e38801fu; + s[11] = (s[11] ^ s[2]) * 0x397014ebu; + s[14] = mh_rotl(s[14] ^ s[11], 4u); + s[3] = (s[3] ^ s[14]) * 0xbbf780efu; + s[10] ^= s[3]; + s[4] ^= s[10] ^ 0x4abb5f0au; + s[10] ^= (s[4] & s[6]); + s[15] += s[10]; + s[9] ^= (s[15] & s[4]); + s[11] = mh_rotl(s[11], 20u) + s[9]; + s[13] ^= s[11]; + s[5] += s[13] + 0x104bed55u; + s[6] = s[6] * 0x2b9b1395u + s[5]; + s[7] = (s[7] ^ s[6]) * 0xdd08fdebu; + s[9] = (s[9] ^ s[7]) * 0x46d23ed5u; + s[3] = s[3] * 0xcd451ba9u + s[9]; + s[11] ^= s[3]; + s[10] += s[11] + 0xeb7a45b8u; + s[0] ^= s[10]; + s[7] += s[0]; + s[15] = mh_rotl(s[15], 2u) + s[7]; + s[12] -= s[15]; + s[8] ^= s[12]; + s[1] += s[8]; + s[5] = (s[5] ^ s[1]) * 0xc6f4ee59u; + s[14] *= (s[5] | 1u); + s[7] = mh_rotl(s[7] ^ s[14], 31u); + s[12] -= s[7]; + s[13] += s[12]; + s[1] = mh_rotl(s[1] ^ s[13], 30u); + s[14] -= s[1]; + s[1] ^= s[14]; + s[6] *= (s[1] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[8] = mh_rotl(s[8], 15u) + s[15]; + s[15] += s[8] + 0x8e6a0f17u; + s[9] += (s[15] | s[12]); + s[11] ^= s[9]; + s[6] *= (s[11] | 1u); + s[7] += s[6] + 0xe553414fu; + s[8] = (s[8] ^ s[7]) * 0xab271281u; + s[12] += s[8]; + s[14] *= (s[12] | 1u); + s[9] ^= s[14]; + s[5] ^= s[9]; + s[7] += (s[5] | s[2]); + s[3] += s[7]; + s[11] -= s[3]; + s[0] = (s[0] ^ s[11]) * 0x2f8b8657u; + s[1] += s[0]; + s[15] = mh_rotl(s[15], 15u) + s[1]; + s[0] = s[0] * 0xf98801d1u + s[15]; + s[10] = s[10] * 0xc3d74db5u + s[0]; + s[15] -= s[10]; + s[13] -= s[15]; + s[4] = mh_rotl(s[4], 11u) + s[13]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[14]; + s[5] += s[11] + 0x14945643u; + s[13] = (s[13] ^ s[5]) * 0xade16d23u; + s[8] ^= s[13] ^ 0x7234c3c3u; + s[15] = mh_rotl(s[15], 30u) + s[8]; + s[2] = (s[2] ^ s[15]) * 0x79ec043du; + s[7] ^= s[2]; + s[15] *= (s[7] | 1u); + s[9] = mh_rotl(s[9], 24u) + s[15]; + s[7] *= (s[9] | 1u); + s[1] ^= s[7]; + s[9] = (s[9] ^ s[1]) * 0x89ea4addu; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[1] -= s[0]; + s[9] += s[1] + 0x0690537cu; + s[1] += s[9] + 0xe5486bebu; + s[6] = mh_rotl(s[6] ^ s[1], 19u); + s[15] -= s[6]; +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_6(uint* s) { + s[11] += s[0]; + s[13] += (s[11] | s[0]); + s[14] ^= s[13]; + s[15] += (s[14] | s[8]); + s[0] = mh_rotl(s[0], 1u) + s[15]; + s[15] *= (s[0] | 1u); + s[7] += (s[15] | s[14]); + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[15] = mh_rotl(s[15], 24u) + s[1]; + s[6] = mh_rotl(s[6], 28u) + s[15]; + s[12] ^= (s[6] & s[7]); + s[6] = mh_rotl(s[6], 15u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 30u); + s[7] ^= s[15]; + s[5] ^= s[7] ^ 0x1874ccb9u; + s[13] = (s[13] ^ s[5]) * 0xead971f1u; + s[2] += s[13]; + s[8] *= (s[2] | 1u); + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[2] += (s[15] | s[4]); + s[13] ^= (s[2] & s[6]); + s[15] += s[13]; + s[3] += s[15] + 0xeea76305u; + s[15] = mh_rotl(s[15], 9u) + s[3]; + s[1] += s[15]; + s[9] *= (s[1] | 1u); + s[5] += s[9]; + s[1] = mh_rotl(s[1] ^ s[5], 17u); + s[11] += s[1]; + s[2] += s[11]; + s[6] += s[2]; + s[1] = (s[1] ^ s[6]) * 0x4f9b8f91u; + s[8] = mh_rotl(s[8] ^ s[1], 31u); + s[7] = (s[7] ^ s[8]) * 0xf1d427b1u; + s[6] += s[7]; + s[15] = mh_rotl(s[15] ^ s[6], 7u); + s[10] = mh_rotl(s[10], 20u) + s[15]; + s[6] -= s[10]; + s[10] = (s[10] ^ s[6]) * 0x286194bfu; + s[0] *= (s[10] | 1u); + s[4] = (s[4] ^ s[0]) * 0xc953f135u; + s[9] += s[4] + 0x6ba4448eu; + s[4] = (s[4] ^ s[9]) * 0xb1856abdu; + s[5] ^= s[4] ^ 0xf42a5bdcu; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[3] += s[4]; + s[10] += s[3]; + s[6] += (s[10] | s[5]); + s[12] += s[6]; + s[5] ^= s[12] ^ 0xc802dfebu; + s[4] = (s[4] ^ s[5]) * 0x412d8fbfu; + s[14] ^= s[4] ^ 0x9e40e380u; + s[11] = (s[11] ^ s[14]) * 0xed0a749fu; + s[15] *= (s[11] | 1u); + s[14] = (s[14] ^ s[15]) * 0x23a1ec6du; + s[3] += s[14]; + s[12] ^= s[3] ^ 0xc9907e2bu; + s[1] = s[1] * 0x5bbedaf5u + s[12]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[8] = (s[8] ^ s[6]) * 0x600cfb09u; + s[14] += s[8]; + s[12] += s[14] + 0x78988768u; + s[4] = s[4] * 0xa626cf43u + s[12]; + s[13] = (s[13] ^ s[4]) * 0x54dc81e3u; + s[0] *= (s[13] | 1u); + s[13] -= s[0]; + s[8] += (s[13] | s[9]); + s[1] ^= s[8]; + s[6] = (s[6] ^ s[1]) * 0xd367f779u; + s[7] -= s[6]; + s[13] += s[7]; + s[6] = s[6] * 0xe7cffbcdu + s[13]; + s[3] = (s[3] ^ s[6]) * 0xfa1b7e5du; + s[13] = mh_rotl(s[13], 31u) + s[3]; + s[2] ^= s[13]; + s[4] *= (s[2] | 1u); + s[3] ^= s[4]; + s[4] -= s[3]; + s[15] += s[4]; + s[8] = (s[8] ^ s[15]) * 0x9a841483u; + s[5] ^= s[8]; + s[15] ^= (s[5] & s[0]); + s[4] += s[15]; + s[9] = mh_rotl(s[9] ^ s[4], 14u); + s[12] *= (s[9] | 1u); + s[10] += (s[12] | s[3]); + s[2] = mh_rotl(s[2] ^ s[10], 19u); + s[5] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 17u); + s[7] ^= s[14]; + s[12] += s[7]; + s[8] = s[8] * 0x563fd2c3u + s[12]; + s[13] = mh_rotl(s[13], 6u) + s[8]; + s[11] += s[13] + 0xfe09487du; + s[14] -= s[11]; + s[2] -= s[14]; + s[0] += s[2] + 0x134d34fbu; + s[7] -= s[0]; + s[13] = mh_rotl(s[13], 20u) + s[7]; + s[15] = mh_rotl(s[15] ^ s[13], 12u); + s[9] += s[15]; + s[0] -= s[9]; + s[15] ^= s[0] ^ 0xd26cf159u; + s[12] += s[15] + 0x0c050d95u; + s[3] = s[3] * 0x3f90fd07u + s[12]; + s[7] -= s[3]; + s[13] = (s[13] ^ s[7]) * 0xbb3ea981u; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[6] ^= (s[8] & s[4]); + s[7] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[7], 23u); + s[4] *= (s[6] | 1u); + s[6] -= s[4]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[11] -= s[12]; + s[5] -= s[11]; + s[4] = (s[4] ^ s[5]) * 0xb0a03621u; + s[15] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[15]; + s[15] ^= s[0]; + s[8] += s[15] + 0x15f21a1au; + s[2] ^= s[8]; + s[13] = mh_rotl(s[13], 22u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[13], 4u); + s[4] += s[2]; + s[11] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 16u) + s[11]; + s[14] *= (s[15] | 1u); + s[1] += s[14]; + s[5] += s[1]; + s[13] ^= s[5] ^ 0x4d858e87u; + s[12] *= (s[13] | 1u); + s[10] = mh_rotl(s[10], 19u) + s[12]; + s[5] += s[10]; + s[15] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[15], 30u); + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[10] -= s[3]; + s[11] = mh_rotl(s[11], 5u) + s[10]; + s[12] ^= s[11]; + s[7] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[7], 2u); + s[6] ^= s[12]; + s[11] -= s[6]; + s[3] += s[11] + 0x15d75f72u; + s[6] += s[3]; + s[4] *= (s[6] | 1u); + s[3] -= s[4]; + s[12] += s[3] + 0x02d9ef35u; + s[0] -= s[12]; + s[15] ^= s[0] ^ 0xa34641eeu; + s[7] *= (s[15] | 1u); + s[8] ^= s[7] ^ 0x5c0473a2u; + s[10] *= (s[8] | 1u); + s[4] *= (s[10] | 1u); + s[12] ^= s[4]; + s[5] += s[12]; + s[15] = mh_rotl(s[15], 29u) + s[5]; + s[0] = mh_rotl(s[0], 7u) + s[15]; + s[15] += s[0]; + s[11] ^= s[15]; + s[4] += (s[11] | s[13]); + s[9] = mh_rotl(s[9] ^ s[4], 5u); + s[11] -= s[9]; + s[7] += s[11]; + s[5] *= (s[7] | 1u); + s[12] += s[5]; + s[3] *= (s[12] | 1u); + s[0] += s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[13] = (s[13] ^ s[10]) * 0x3a550111u; + s[15] += s[13]; + s[1] *= (s[15] | 1u); + s[2] = s[2] * 0x95352fdfu + s[1]; + s[8] = (s[8] ^ s[2]) * 0x269301a1u; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[5] -= s[4]; + s[10] *= (s[5] | 1u); + s[7] += s[10] + 0x1d87f038u; + s[5] = (s[5] ^ s[7]) * 0xecbf1c27u; + s[11] -= s[5]; + s[2] -= s[11]; + s[8] ^= s[2]; + s[6] ^= s[8]; + s[7] -= s[6]; + s[13] -= s[7]; + s[2] -= s[13]; + s[3] ^= s[2]; + s[5] = (s[5] ^ s[3]) * 0x8ef62aebu; + s[7] = (s[7] ^ s[5]) * 0x594b5f33u; + s[12] += s[7]; + s[13] = (s[13] ^ s[12]) * 0xdaa86fd9u; + s[6] += s[13]; + s[13] ^= s[6]; + s[7] += s[13]; + s[5] = mh_rotl(s[5], 17u) + s[7]; + s[4] = (s[4] ^ s[5]) * 0x19723005u; + s[8] -= s[4]; + s[12] ^= s[8]; + s[11] ^= s[12]; + s[8] ^= s[11] ^ 0x0739c480u; + s[2] ^= s[8]; + s[15] = (s[15] ^ s[2]) * 0xc15f8403u; + s[14] -= s[15]; + s[9] += s[14] + 0x2b0ab64au; + s[1] ^= s[9]; + s[9] += (s[1] | s[6]); + s[15] += s[9]; + s[13] += s[15]; + s[6] ^= s[13]; + s[9] ^= s[6] ^ 0xfaf52102u; + s[11] += s[9]; + s[6] += s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 15u); + s[9] -= s[8]; + s[4] ^= s[9]; + s[0] -= s[4]; + s[5] = mh_rotl(s[5], 12u) + s[0]; + s[15] = mh_rotl(s[15], 10u) + s[5]; + s[8] += s[15]; + s[10] ^= s[8] ^ 0x92ea0c55u; + s[13] += s[10]; + s[3] += s[13]; + s[12] = (s[12] ^ s[3]) * 0xd069e52du; + s[9] += s[12]; + s[4] ^= s[9]; + s[12] ^= s[4] ^ 0xeb853951u; + s[0] += s[12] + 0xed41d9fdu; + s[8] = s[8] * 0xc5250bfdu + s[0]; + s[7] *= (s[8] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 2u); + s[10] -= s[2]; + s[11] *= (s[10] | 1u); + s[8] += s[11]; + s[13] = (s[13] ^ s[8]) * 0xd390a1fbu; + s[7] = s[7] * 0x5acff41bu + s[13]; + s[0] ^= s[7]; + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[4] ^= (s[12] & s[7]); + s[7] ^= s[4] ^ 0xc65745d6u; + s[3] ^= s[7]; + s[9] = mh_rotl(s[9], 9u) + s[3]; + s[0] += s[9] + 0xa03ce5a6u; + s[2] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[2], 29u); + s[10] = mh_rotl(s[10] ^ s[15], 13u); + s[9] = mh_rotl(s[9], 30u) + s[10]; + s[10] += (s[9] | s[12]); + s[6] ^= s[10] ^ 0xd72a67b8u; + s[7] *= (s[6] | 1u); + s[15] += s[7]; + s[2] *= (s[15] | 1u); + s[12] += s[2]; + s[8] *= (s[12] | 1u); + s[11] ^= (s[8] & s[9]); + s[12] = mh_rotl(s[12], 27u) + s[11]; + s[0] ^= s[12]; + s[11] += s[0] + 0x01d509c0u; + s[1] -= s[11]; + s[11] -= s[1]; + s[2] += s[11] + 0x2ad9035du; + s[11] ^= (s[2] & s[7]); + s[5] += s[11] + 0x756fff22u; + s[9] *= (s[5] | 1u); + s[13] ^= s[9]; + s[4] ^= s[13]; + s[3] = mh_rotl(s[3], 2u) + s[4]; + s[14] ^= s[3] ^ 0xc1fb5cb3u; + s[3] = mh_rotl(s[3], 19u) + s[14]; + s[14] += s[3]; + s[6] += s[14] + 0x5f1c4569u; + s[3] = mh_rotl(s[3] ^ s[6], 22u); + s[2] += s[3]; + s[9] += s[2]; + s[1] ^= (s[9] & s[10]); + s[5] ^= s[1]; + s[15] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[15], 23u); + s[1] *= (s[2] | 1u); + s[6] ^= s[1]; + s[4] = mh_rotl(s[4], 7u) + s[6]; + s[14] += (s[4] | s[6]); + s[15] = (s[15] ^ s[14]) * 0x83c9a7ebu; + s[14] += s[15]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[3] ^= s[15]; + s[0] ^= s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 31u); + s[4] += s[10]; + s[7] = mh_rotl(s[7], 23u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 3u); + s[1] *= (s[15] | 1u); + s[7] ^= s[1]; + s[14] = (s[14] ^ s[7]) * 0x2ad2ff49u; + s[7] = mh_rotl(s[7], 4u) + s[14]; + s[13] *= (s[7] | 1u); + s[11] -= s[13]; + s[14] = mh_rotl(s[14], 30u) + s[11]; + s[3] += (s[14] | s[4]); + s[13] += (s[3] | s[10]); + s[7] = s[7] * 0x6920c90bu + s[13]; + s[12] += s[7]; + s[3] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[3], 25u); + s[7] = (s[7] ^ s[6]) * 0x04333a85u; + s[8] -= s[7]; + s[2] = (s[2] ^ s[8]) * 0x843335e9u; + s[10] += s[2]; + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[6] = mh_rotl(s[6], 4u) + s[9]; + s[13] = mh_rotl(s[13], 19u) + s[6]; + s[10] = (s[10] ^ s[13]) * 0xbaaa3189u; + s[0] ^= s[10]; + s[10] -= s[0]; + s[13] ^= s[10] ^ 0xee9d489eu; + s[3] *= (s[13] | 1u); + s[12] -= s[3]; + s[4] += (s[12] | s[2]); + s[3] = (s[3] ^ s[4]) * 0x109178f7u; + s[4] += s[3] + 0x9c068c09u; + s[9] = mh_rotl(s[9] ^ s[4], 23u); + s[1] += (s[9] | s[6]); + s[8] ^= s[1]; + s[11] ^= (s[8] & s[7]); + s[9] ^= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[3] = s[3] * 0x3575e169u + s[14]; + s[1] += s[3] + 0x42a43de1u; + s[7] += s[1]; + s[6] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[6], 21u); + s[14] = (s[14] ^ s[0]) * 0xd50f0637u; + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[4] -= s[0]; + s[10] = mh_rotl(s[10], 1u) + s[4]; + s[4] = (s[4] ^ s[10]) * 0xf009aafbu; + s[7] *= (s[4] | 1u); + s[6] ^= s[7] ^ 0xd8b7b555u; + s[2] = mh_rotl(s[2] ^ s[6], 14u); + s[9] += s[2] + 0x85a75e4fu; + s[14] += s[9]; + s[7] = mh_rotl(s[7], 5u) + s[14]; + s[10] ^= s[7]; + s[0] = mh_rotl(s[0] ^ s[10], 10u); + s[3] = (s[3] ^ s[0]) * 0xe1a45df3u; + s[1] += s[3]; + s[14] ^= (s[1] & s[11]); + s[8] -= s[14]; + s[13] = (s[13] ^ s[8]) * 0x9fce6b81u; + s[9] = mh_rotl(s[9], 28u) + s[13]; + s[14] += s[9]; + s[11] -= s[14]; + s[0] *= (s[11] | 1u); + s[10] *= (s[0] | 1u); + s[14] ^= s[10] ^ 0x130dbd8eu; + s[5] = (s[5] ^ s[14]) * 0x488f6399u; + s[7] = mh_rotl(s[7] ^ s[5], 8u); + s[9] *= (s[7] | 1u); + s[15] -= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 14u); + s[1] += s[5]; + s[13] = mh_rotl(s[13], 10u) + s[1]; + s[15] -= s[13]; + s[7] += (s[15] | s[13]); + s[12] ^= s[7]; + s[1] *= (s[12] | 1u); + s[11] = (s[11] ^ s[1]) * 0x04105327u; + s[5] *= (s[11] | 1u); + s[1] ^= s[5]; + s[13] *= (s[1] | 1u); + s[11] = s[11] * 0xd3a38ac5u + s[13]; + s[12] ^= s[11]; + s[3] ^= s[12] ^ 0xcda4d195u; + s[9] += s[3]; + s[13] += s[9]; + s[4] += (s[13] | s[14]); + s[7] = mh_rotl(s[7] ^ s[4], 6u); + s[4] = s[4] * 0xd402bb6du + s[7]; + s[3] ^= (s[4] & s[9]); + s[0] += (s[3] | s[2]); + s[2] += s[0]; + s[6] ^= s[2]; + s[3] += s[6]; + s[7] *= (s[3] | 1u); + s[6] -= s[7]; + s[11] -= s[6]; + s[9] -= s[11]; + s[14] += s[9]; + s[8] = mh_rotl(s[8] ^ s[14], 18u); + s[10] = mh_rotl(s[10] ^ s[8], 20u); + s[12] ^= s[10]; + s[7] ^= s[12]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[14] ^= s[1]; + s[9] = (s[9] ^ s[14]) * 0x6c1e8cd1u; + s[1] -= s[9]; + s[4] += (s[1] | s[5]); + s[7] -= s[4]; + s[13] -= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[13]; + s[15] -= s[6]; + s[2] = s[2] * 0x0d5713c3u + s[15]; + s[3] = mh_rotl(s[3] ^ s[2], 16u); + s[4] = mh_rotl(s[4] ^ s[3], 10u); + s[9] = (s[9] ^ s[4]) * 0x3d5be749u; + s[14] ^= s[9]; + s[15] ^= s[14]; + s[6] *= (s[15] | 1u); + s[7] = (s[7] ^ s[6]) * 0x17df006bu; + s[1] += s[7]; + s[8] -= s[1]; + s[7] = (s[7] ^ s[8]) * 0xe93f9287u; + s[0] ^= s[7] ^ 0x9294d6b2u; + s[14] += s[0]; + s[11] += s[14]; + s[0] += s[11]; + s[7] += s[0]; + s[12] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[12], 9u); + s[3] = mh_rotl(s[3] ^ s[0], 30u); + s[8] = mh_rotl(s[8], 11u) + s[3]; + s[6] ^= s[8]; + s[15] += s[6]; + s[0] += s[15]; + s[10] += s[0]; + s[1] = mh_rotl(s[1], 26u) + s[10]; + s[9] ^= s[1]; + s[13] *= (s[9] | 1u); + s[4] = s[4] * 0xcdb45257u + s[13]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[0] = (s[0] ^ s[2]) * 0x68b3d713u; + s[1] += s[0]; + s[4] = s[4] * 0xf69d4a5fu + s[1]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[8], 7u); + s[2] += s[4] + 0x51bb82ceu; + s[7] += s[2]; + s[1] += s[7]; + s[2] += s[1] + 0x3680e8bbu; + s[5] += s[2] + 0x9e44e256u; + s[1] += s[5]; + s[12] += s[1]; + s[9] ^= s[12]; + s[13] -= s[9]; + s[2] *= (s[13] | 1u); + s[12] += s[2]; + s[13] += s[12]; + s[0] ^= s[13] ^ 0xd70a731du; + s[6] += s[0]; + s[7] = mh_rotl(s[7], 22u) + s[6]; + s[15] = (s[15] ^ s[7]) * 0xdf75ad53u; + s[11] ^= (s[15] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 11u); + s[2] += s[1]; + s[15] = mh_rotl(s[15] ^ s[2], 21u); + s[2] = (s[2] ^ s[15]) * 0x7c349239u; + s[12] = mh_rotl(s[12], 6u) + s[2]; + s[13] ^= s[12] ^ 0xb219f590u; + s[15] *= (s[13] | 1u); + s[2] ^= s[15] ^ 0xa28894b2u; + s[7] += s[2]; + s[3] = mh_rotl(s[3], 19u) + s[7]; + s[12] = (s[12] ^ s[3]) * 0xd73e4265u; + s[15] += s[12]; + s[7] = s[7] * 0x2d1fd471u + s[15]; + s[11] = (s[11] ^ s[7]) * 0x7ce4f3e3u; + s[3] = mh_rotl(s[3] ^ s[11], 27u); + s[8] += s[3]; + s[9] += (s[8] | s[1]); + s[11] *= (s[9] | 1u); + s[3] -= s[11]; + s[14] = mh_rotl(s[14], 13u) + s[3]; + s[0] ^= (s[14] & s[7]); + s[12] = mh_rotl(s[12], 8u) + s[0]; + s[3] ^= s[12]; + s[15] ^= s[3]; + s[4] ^= s[15]; + s[15] += (s[4] | s[11]); + s[13] = mh_rotl(s[13] ^ s[15], 24u); + s[2] *= (s[13] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] += s[14]; + s[12] += s[10]; + s[2] += s[12] + 0x1b504561u; + s[4] = mh_rotl(s[4] ^ s[2], 2u); + s[8] = (s[8] ^ s[4]) * 0x03df7a65u; + s[15] = mh_rotl(s[15], 14u) + s[8]; + s[0] = mh_rotl(s[0], 18u) + s[15]; + s[1] += s[0] + 0x5740a39eu; + s[8] -= s[1]; + s[5] = (s[5] ^ s[8]) * 0x0b606a43u; + s[9] = s[9] * 0x39176987u + s[5]; + s[0] = mh_rotl(s[0], 4u) + s[9]; + s[14] ^= s[0]; + s[11] -= s[14]; + s[3] += s[11] + 0x34787b81u; + s[15] += s[3] + 0xe41a04ecu; + s[13] = mh_rotl(s[13] ^ s[15], 15u); + s[7] ^= s[13]; + s[9] -= s[7]; + s[10] -= s[9]; + s[13] += s[10]; + s[4] += (s[13] | s[6]); + s[2] ^= s[4]; + s[1] ^= s[2]; + s[0] -= s[1]; + s[15] = (s[15] ^ s[0]) * 0x3fb47953u; + s[12] *= (s[15] | 1u); + s[15] ^= s[12]; + s[13] = mh_rotl(s[13], 31u) + s[15]; + s[12] = s[12] * 0xd1b75439u + s[13]; + s[4] -= s[12]; + s[7] += s[4]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[14] = mh_rotl(s[14] ^ s[1], 15u); + s[3] -= s[14]; + s[15] += s[3]; + s[5] = s[5] * 0xfa5689f1u + s[15]; + s[12] *= (s[5] | 1u); + s[2] = mh_rotl(s[2] ^ s[12], 16u); + s[0] = (s[0] ^ s[2]) * 0x2a1a8c35u; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x2a04efebu; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[9] -= s[15]; + s[13] ^= s[9] ^ 0xbd001784u; + s[9] += s[13] + 0xf302a942u; + s[14] += s[9] + 0x07f9571cu; + s[2] ^= s[14]; + s[11] ^= s[2]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[0] += s[7] + 0xb6e41d24u; + s[12] ^= s[0]; + s[0] ^= s[12]; + s[11] ^= s[0] ^ 0x24f0b3f7u; + s[0] ^= (s[11] & s[7]); + s[6] += s[0]; + s[13] -= s[6]; + s[12] ^= s[13]; + s[4] += s[12]; + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[14] = (s[14] ^ s[3]) * 0x21829883u; + s[2] -= s[14]; + s[3] ^= (s[2] & s[7]); + s[1] -= s[3]; + s[11] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[0] = (s[0] ^ s[13]) * 0xa91d4129u; + s[3] += s[0] + 0x5eb9b9e0u; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[7] = (s[7] ^ s[10]) * 0x52bae843u; + s[15] ^= s[7]; + s[3] ^= (s[15] & s[2]); + s[14] += s[3]; + s[9] -= s[14]; + s[7] += s[9]; + s[2] += s[7]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] *= (s[0] | 1u); + s[3] ^= s[6] ^ 0x1426b612u; + s[6] *= (s[3] | 1u); + s[1] -= s[6]; + s[15] += s[1]; + s[0] -= s[15]; + s[12] += s[0] + 0xf7b931c7u; + s[13] *= (s[12] | 1u); + s[12] = s[12] * 0xe57254dbu + s[13]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[8] += s[5] + 0x517e08fau; + s[15] = mh_rotl(s[15] ^ s[8], 24u); + s[4] -= s[15]; + s[7] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[5] = mh_rotl(s[5] ^ s[9], 31u); + s[15] = mh_rotl(s[15], 20u) + s[5]; + s[10] = (s[10] ^ s[15]) * 0x472cce51u; + s[0] = (s[0] ^ s[10]) * 0xc6aa4b0fu; + s[9] ^= s[0]; + s[5] ^= (s[9] & s[11]); + s[9] += s[5]; + s[15] = mh_rotl(s[15], 26u) + s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 15u); + s[7] += s[12]; + s[8] ^= s[7]; + s[4] = (s[4] ^ s[8]) * 0x1de62593u; + s[12] ^= s[4] ^ 0x4c29c7efu; + s[14] = s[14] * 0xe96a8dbdu + s[12]; + s[7] += s[14]; + s[4] = (s[4] ^ s[7]) * 0x2ceadb71u; + s[13] += s[4]; + s[10] += s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 5u); + s[0] = (s[0] ^ s[12]) * 0xb3050b81u; + s[7] += s[0]; + s[12] = mh_rotl(s[12] ^ s[7], 15u); + s[11] = (s[11] ^ s[12]) * 0xd1f5971bu; + s[13] += s[11]; + s[11] *= (s[13] | 1u); + s[10] += s[11] + 0x1c05c66fu; + s[15] ^= s[10]; + s[13] ^= s[15] ^ 0x8af80ca8u; + s[15] = mh_rotl(s[15] ^ s[13], 14u); + s[13] = (s[13] ^ s[15]) * 0x8b914137u; + s[11] -= s[13]; + s[13] ^= s[11]; + s[6] = (s[6] ^ s[13]) * 0x3c6fe121u; + s[12] = mh_rotl(s[12] ^ s[6], 13u); + s[14] = mh_rotl(s[14], 31u) + s[12]; + s[11] -= s[14]; + s[12] -= s[11]; + s[8] = (s[8] ^ s[12]) * 0x196763bdu; + s[10] *= (s[8] | 1u); + s[11] = mh_rotl(s[11] ^ s[10], 14u); + s[14] *= (s[11] | 1u); + s[11] *= (s[14] | 1u); + s[6] += s[11]; + s[8] = (s[8] ^ s[6]) * 0xbbef2ec7u; + s[11] = mh_rotl(s[11] ^ s[8], 14u); + s[14] += s[11]; + s[1] ^= s[14] ^ 0x3517261cu; + s[10] += s[1]; + s[11] -= s[10]; + s[1] = mh_rotl(s[1] ^ s[11], 23u); + s[4] *= (s[1] | 1u); + s[3] ^= s[4]; + s[14] -= s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 7u); + s[11] -= s[12]; + s[12] = (s[12] ^ s[11]) * 0x61ef90ddu; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[4] -= s[2]; + s[3] ^= s[4] ^ 0x38b5a46au; + s[14] = mh_rotl(s[14] ^ s[3], 8u); + s[8] += s[14]; + s[10] = mh_rotl(s[10], 12u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[2] ^= s[6] ^ 0x04a55416u; + s[7] ^= s[2] ^ 0xc6089802u; + s[14] += s[7] + 0x232acd3au; + s[6] += s[14]; + s[3] ^= s[6] ^ 0x0bdec934u; + s[13] *= (s[3] | 1u); + s[12] = s[12] * 0x082d66bdu + s[13]; + s[10] = (s[10] ^ s[12]) * 0xa5611c97u; + s[5] = mh_rotl(s[5] ^ s[10], 1u); + s[0] += s[5]; + s[10] = mh_rotl(s[10] ^ s[0], 25u); + s[9] = mh_rotl(s[9] ^ s[10], 1u); + s[11] += s[9]; + s[15] = (s[15] ^ s[11]) * 0x0c06e2b5u; + s[12] ^= s[15] ^ 0x7d7c42ceu; + s[15] += s[12]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[9] ^= (s[6] & s[4]); + s[7] -= s[9]; + s[15] = mh_rotl(s[15] ^ s[7], 31u); + s[4] += s[15]; + s[11] = (s[11] ^ s[4]) * 0xd7fef7d9u; + s[10] ^= s[11]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[7] -= s[9]; + s[3] = (s[3] ^ s[7]) * 0x0eafdd57u; + s[5] ^= s[3]; + s[8] -= s[5]; + s[5] ^= s[8]; + s[3] -= s[5]; + s[13] = mh_rotl(s[13], 16u) + s[3]; + s[14] += s[13]; + s[11] += s[14]; + s[0] += s[11] + 0xf2a1dc99u; + s[3] ^= (s[0] & s[10]); + s[10] = mh_rotl(s[10], 7u) + s[3]; + s[5] += s[10] + 0x6527734fu; + s[8] -= s[5]; + s[5] *= (s[8] | 1u); + s[2] += s[5]; + s[1] = mh_rotl(s[1], 31u) + s[2]; + s[11] = mh_rotl(s[11] ^ s[1], 1u); + s[15] ^= s[11]; + s[6] = (s[6] ^ s[15]) * 0x89e4da81u; + s[8] = mh_rotl(s[8], 7u) + s[6]; + s[1] = (s[1] ^ s[8]) * 0x27cd5aabu; + s[4] = (s[4] ^ s[1]) * 0xc9e84adbu; + s[3] = mh_rotl(s[3], 13u) + s[4]; + s[11] += s[3]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 21u); + s[14] += s[12]; + s[0] -= s[14]; + s[2] += s[0]; + s[3] -= s[2]; + s[10] -= s[3]; + s[11] *= (s[10] | 1u); + s[14] += s[11]; + s[6] += s[14]; + s[3] ^= s[6]; + s[13] = s[13] * 0xf5b82e19u + s[3]; + s[7] += s[13]; + s[3] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[3], 14u); + s[13] += s[10]; + s[9] ^= s[13] ^ 0x50029d51u; + s[8] ^= s[9]; + s[5] = s[5] * 0x84a8bab7u + s[8]; + s[14] = mh_rotl(s[14], 21u) + s[5]; + s[12] = mh_rotl(s[12] ^ s[14], 21u); + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 19u); + s[13] += s[9] + 0xf7535ff7u; + s[4] *= (s[13] | 1u); + s[12] *= (s[4] | 1u); + s[4] += s[12] + 0x56f3ba9au; + s[6] += s[4]; + s[0] ^= s[6] ^ 0x52b3d568u; + s[12] += (s[0] | s[11]); + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[4] = mh_rotl(s[4] ^ s[11], 7u); + s[3] += s[4] + 0xe0a370deu; + s[10] = mh_rotl(s[10] ^ s[3], 18u); + s[2] -= s[10]; + s[1] *= (s[2] | 1u); + s[11] += s[1] + 0x351f5bb2u; + s[0] += s[11]; + s[9] += s[0]; + s[8] = mh_rotl(s[8], 15u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[8], 18u); + s[11] = mh_rotl(s[11] ^ s[0], 8u); + s[3] += s[11]; + s[4] = mh_rotl(s[4], 1u) + s[3]; + s[13] -= s[4]; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_7(uint* s) { + s[10] ^= s[0] ^ 0x91f55cc2u; + s[12] += s[10]; + s[9] ^= s[12]; + s[8] = mh_rotl(s[8] ^ s[9], 11u); + s[11] ^= s[8]; + s[13] = (s[13] ^ s[11]) * 0x8937936du; + s[12] = mh_rotl(s[12], 6u) + s[13]; + s[6] += s[12]; + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[10] += s[1]; + s[9] = mh_rotl(s[9], 5u) + s[10]; + s[12] -= s[9]; + s[10] = s[10] * 0xfb1e6803u + s[12]; + s[0] += (s[10] | s[11]); + s[15] += s[0]; + s[0] ^= s[15]; + s[13] *= (s[0] | 1u); + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[2] = s[2] * 0xc6ee6461u + s[7]; + s[3] += s[2]; + s[7] ^= s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 15u); + s[6] ^= s[4]; + s[10] += s[6]; + s[11] = mh_rotl(s[11], 4u) + s[10]; + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 30u) + s[2]; + s[7] -= s[5]; + s[4] ^= s[7]; + s[6] ^= s[4]; + s[5] -= s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 19u) + s[10]; + s[11] = mh_rotl(s[11], 13u) + s[8]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[8] ^= s[5]; + s[10] = mh_rotl(s[10], 31u) + s[8]; + s[2] += s[10] + 0x2533aeebu; + s[12] += s[2] + 0x8c44064eu; + s[6] = s[6] * 0x396ed079u + s[12]; + s[3] ^= s[6]; + s[7] += s[3] + 0x78c5d841u; + s[2] = mh_rotl(s[2], 19u) + s[7]; + s[5] ^= s[2] ^ 0xb10843eau; + s[3] *= (s[5] | 1u); + s[2] ^= s[3] ^ 0x978c6fe6u; + s[9] += s[2]; + s[3] = (s[3] ^ s[9]) * 0xbd141e6du; + s[5] ^= s[3] ^ 0xd07a1a68u; + s[11] ^= s[5]; + s[12] += (s[11] | s[0]); + s[3] += (s[12] | s[0]); + s[13] += (s[3] | s[4]); + s[3] ^= s[13]; + s[7] -= s[3]; + s[6] *= (s[7] | 1u); + s[7] = mh_rotl(s[7] ^ s[6], 1u); + s[9] = (s[9] ^ s[7]) * 0xbed8dbf7u; + s[3] ^= s[9]; + s[1] = (s[1] ^ s[3]) * 0xf57e26d7u; + s[2] = (s[2] ^ s[1]) * 0xdf9916ebu; + s[6] -= s[2]; + s[2] *= (s[6] | 1u); + s[13] += s[2] + 0x4b576832u; + s[7] ^= s[13]; + s[14] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[14] = (s[14] ^ s[0]) * 0xde82d2d3u; + s[7] += s[14]; + s[14] = s[14] * 0x1a9d2c23u + s[7]; + s[13] ^= s[14]; + s[14] *= (s[13] | 1u); + s[13] ^= (s[14] & s[10]); + s[6] = mh_rotl(s[6], 3u) + s[13]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[1] ^= s[0]; + s[13] -= s[1]; + s[1] ^= s[13]; + s[3] -= s[1]; + s[2] += s[3]; + s[11] = (s[11] ^ s[2]) * 0xd14f4873u; + s[0] += s[11] + 0xc62283fbu; + s[14] = mh_rotl(s[14], 31u) + s[0]; + s[0] *= (s[14] | 1u); + s[13] -= s[0]; + s[7] *= (s[13] | 1u); + s[15] ^= s[7]; + s[6] ^= s[15]; + s[8] = mh_rotl(s[8], 21u) + s[6]; + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[11] += (s[10] | s[13]); + s[14] += s[11]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[3] = s[3] * 0xabf8963bu + s[8]; + s[1] += s[3]; + s[6] = mh_rotl(s[6] ^ s[1], 8u); + s[7] = s[7] * 0x5391ec81u + s[6]; + s[3] *= (s[7] | 1u); + s[1] ^= s[3] ^ 0xb1e8a02eu; + s[4] += s[1] + 0xf73ade37u; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[4] ^= s[0]; + s[2] ^= s[4]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[10] -= s[9]; + s[4] ^= s[10]; + s[3] *= (s[4] | 1u); + s[0] -= s[3]; + s[8] ^= (s[0] & s[14]); + s[11] *= (s[8] | 1u); + s[10] ^= s[11]; + s[4] = mh_rotl(s[4] ^ s[10], 11u); + s[13] = mh_rotl(s[13], 2u) + s[4]; + s[0] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 21u) + s[0]; + s[13] ^= s[5]; + s[0] *= (s[13] | 1u); + s[14] ^= s[0]; + s[7] -= s[14]; + s[9] *= (s[7] | 1u); + s[14] ^= s[9]; + s[13] ^= s[14] ^ 0xcdfc1ed8u; + s[1] = mh_rotl(s[1] ^ s[13], 20u); + s[3] = mh_rotl(s[3] ^ s[1], 3u); + s[1] ^= s[3]; + s[0] *= (s[1] | 1u); + s[13] += (s[0] | s[9]); + s[14] = (s[14] ^ s[13]) * 0x788d03efu; + s[0] ^= s[14] ^ 0x996f3b0du; + s[13] -= s[0]; + s[10] = mh_rotl(s[10], 15u) + s[13]; + s[5] = mh_rotl(s[5] ^ s[10], 3u); + s[3] = mh_rotl(s[3] ^ s[5], 10u); + s[12] ^= s[3] ^ 0xd5618db8u; + s[14] -= s[12]; + s[1] += (s[14] | s[15]); + s[2] ^= s[1] ^ 0xbf5e3cd4u; + s[4] += s[2]; + s[14] ^= s[4] ^ 0xf8523123u; + s[12] = mh_rotl(s[12], 29u) + s[14]; + s[7] *= (s[12] | 1u); + s[12] *= (s[7] | 1u); + s[10] += s[12]; + s[14] = mh_rotl(s[14] ^ s[10], 20u); + s[7] ^= s[14] ^ 0x383fa4a6u; + s[12] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 1u) + s[12]; + s[1] *= (s[2] | 1u); + s[4] += s[1]; + s[11] = s[11] * 0xc6e2f7f7u + s[4]; + s[6] ^= (s[11] & s[15]); + s[3] = (s[3] ^ s[6]) * 0xa5f20621u; + s[14] += s[3]; + s[15] = s[15] * 0xff86c04du + s[14]; + s[14] += s[15]; + s[3] = mh_rotl(s[3], 27u) + s[14]; + s[13] ^= (s[3] & s[8]); + s[10] ^= s[13]; + s[6] = s[6] * 0xedced661u + s[10]; + s[12] = mh_rotl(s[12] ^ s[6], 22u); + s[4] ^= s[12] ^ 0x50fbdfefu; + s[9] += s[4] + 0xe37ea6aeu; + s[1] = mh_rotl(s[1] ^ s[9], 17u); + s[4] += s[1]; + s[3] += s[4] + 0xc95ad941u; + s[0] ^= s[3]; + s[6] = mh_rotl(s[6], 26u) + s[0]; + s[12] -= s[6]; + s[14] *= (s[12] | 1u); + s[12] += s[14]; + s[13] = s[13] * 0xdf0c5af7u + s[12]; + s[1] = mh_rotl(s[1], 4u) + s[13]; + s[15] = mh_rotl(s[15], 23u) + s[1]; + s[14] ^= s[15]; + s[0] *= (s[14] | 1u); + s[5] = mh_rotl(s[5] ^ s[0], 14u); + s[15] = mh_rotl(s[15] ^ s[5], 12u); + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[1] = s[1] * 0x1357e1d5u + s[9]; + s[2] += s[1]; + s[8] *= (s[2] | 1u); + s[0] ^= s[8]; + s[7] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[7], 10u); + s[13] = (s[13] ^ s[11]) * 0x9cd6fa4du; + s[11] += (s[13] | s[10]); + s[3] ^= s[11] ^ 0xf37724ddu; + s[5] += s[3]; + s[6] *= (s[5] | 1u); + s[14] += s[6]; + s[13] *= (s[14] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 1u); + s[13] ^= (s[4] & s[0]); + s[14] ^= (s[13] & s[0]); + s[0] += s[14]; + s[6] = mh_rotl(s[6] ^ s[0], 21u); + s[13] += s[6]; + s[6] += s[13]; + s[0] += s[6] + 0x1720d570u; + s[3] ^= s[0]; + s[13] += s[3] + 0xd71bcd1bu; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[9] += s[3]; + s[4] = mh_rotl(s[4] ^ s[9], 3u); + s[10] += s[4]; + s[15] -= s[10]; + s[11] *= (s[15] | 1u); + s[12] *= (s[11] | 1u); + s[8] += s[12]; + s[0] += s[8] + 0xa5d99dc7u; + s[14] ^= s[0]; + s[2] += (s[14] | s[10]); + s[8] = mh_rotl(s[8] ^ s[2], 8u); + s[15] += s[8] + 0xda39c6e1u; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[1], 8u); + s[4] ^= (s[7] & s[9]); + s[0] = mh_rotl(s[0], 13u) + s[4]; + s[10] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 20u) + s[10]; + s[11] ^= s[3]; + s[15] ^= s[11] ^ 0x0d7fc3f2u; + s[5] ^= (s[15] & s[3]); + s[8] += s[5]; + s[3] ^= s[8]; + s[9] += s[3]; + s[12] = mh_rotl(s[12] ^ s[9], 7u); + s[7] -= s[12]; + s[14] = (s[14] ^ s[7]) * 0xee2eaf6bu; + s[5] ^= s[14]; + s[6] = mh_rotl(s[6], 17u) + s[5]; + s[0] -= s[6]; + s[13] ^= s[0] ^ 0xc7600c18u; + s[8] ^= s[13]; + s[7] = (s[7] ^ s[8]) * 0x291da8cfu; + s[3] = (s[3] ^ s[7]) * 0x4c89c6a3u; + s[11] = mh_rotl(s[11], 18u) + s[3]; + s[10] += s[11]; + s[5] ^= s[10] ^ 0xc5dba408u; + s[3] ^= s[5]; + s[2] += s[3]; + s[14] ^= s[2]; + s[4] ^= s[14]; + s[9] += s[4]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[10] ^= s[15]; + s[7] += s[10]; + s[0] = mh_rotl(s[0], 23u) + s[7]; + s[2] += s[0]; + s[5] += s[2]; + s[11] = mh_rotl(s[11], 13u) + s[5]; + s[10] ^= (s[11] & s[9]); + s[5] += s[10] + 0xbbb408f7u; + s[14] ^= s[5]; + s[15] += s[14]; + s[5] = mh_rotl(s[5], 5u) + s[15]; + s[11] = s[11] * 0x112a6951u + s[5]; + s[7] = mh_rotl(s[7] ^ s[11], 31u); + s[5] += s[7]; + s[7] *= (s[5] | 1u); + s[12] = (s[12] ^ s[7]) * 0x0c54418fu; + s[5] += s[12]; + s[13] += s[5]; + s[7] = mh_rotl(s[7], 13u) + s[13]; + s[9] = mh_rotl(s[9], 22u) + s[7]; + s[8] = s[8] * 0x1b5f8089u + s[9]; + s[6] = s[6] * 0x8a305f3du + s[8]; + s[5] = (s[5] ^ s[6]) * 0x9e934355u; + s[13] ^= s[5] ^ 0x3262a24fu; + s[7] ^= (s[13] & s[5]); + s[2] ^= s[7]; + s[14] += (s[2] | s[7]); + s[11] += s[14]; + s[6] -= s[11]; + s[5] ^= s[6]; + s[6] = mh_rotl(s[6] ^ s[5], 24u); + s[8] ^= s[6] ^ 0x2110db43u; + s[4] += s[8] + 0x91e5ef8bu; + s[15] += s[4] + 0x039dc8acu; + s[2] *= (s[15] | 1u); + s[10] ^= s[2]; + s[4] += s[10] + 0x38936459u; + s[13] ^= s[4] ^ 0x8a7a8a06u; + s[0] = mh_rotl(s[0] ^ s[13], 24u); + s[13] = s[13] * 0xa7c0dc87u + s[0]; + s[2] += s[13]; + s[11] = mh_rotl(s[11], 25u) + s[2]; + s[6] -= s[11]; + s[1] *= (s[6] | 1u); + s[0] = mh_rotl(s[0], 21u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[0], 23u); + s[7] ^= s[11]; + s[2] += s[7]; + s[9] *= (s[2] | 1u); + s[11] = mh_rotl(s[11], 24u) + s[9]; + s[1] ^= (s[11] & s[3]); + s[0] = mh_rotl(s[0] ^ s[1], 13u); + s[12] -= s[0]; + s[6] ^= (s[12] & s[5]); + s[4] += s[6]; + s[13] ^= s[4]; + s[1] = mh_rotl(s[1], 26u) + s[13]; + s[11] = mh_rotl(s[11], 27u) + s[1]; + s[1] += s[11]; + s[14] ^= (s[1] & s[11]); + s[4] -= s[14]; + s[5] -= s[4]; + s[8] ^= s[5]; + s[2] ^= s[8]; + s[4] += s[2]; + s[14] = mh_rotl(s[14], 24u) + s[4]; + s[0] += s[14] + 0x6b4adcadu; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[10] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[10], 27u); + s[0] -= s[6]; + s[6] += s[0] + 0x5ac44880u; + s[8] ^= s[6]; + s[1] ^= s[8]; + s[0] *= (s[1] | 1u); + s[5] -= s[0]; + s[3] -= s[5]; + s[7] += s[3]; + s[0] *= (s[7] | 1u); + s[1] = (s[1] ^ s[0]) * 0xc26b3d23u; + s[13] += s[1]; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[7], 2u); + s[12] = (s[12] ^ s[3]) * 0x36078279u; + s[9] -= s[12]; + s[12] ^= s[9] ^ 0x6a60fb43u; + s[2] = mh_rotl(s[2], 15u) + s[12]; + s[7] ^= s[2]; + s[0] += s[7] + 0xe00e86a2u; + s[9] = mh_rotl(s[9] ^ s[0], 8u); + s[3] = mh_rotl(s[3], 28u) + s[9]; + s[8] += (s[3] | s[15]); + s[5] ^= s[8] ^ 0xe55fb8aeu; + s[4] ^= s[5]; + s[8] ^= s[4]; + s[6] *= (s[8] | 1u); + s[15] += s[6]; + s[1] = (s[1] ^ s[15]) * 0x21de53d1u; + s[13] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 14u); + s[4] ^= s[12] ^ 0xc98f0a34u; + s[6] *= (s[4] | 1u); + s[2] -= s[6]; + s[7] += s[2]; + s[3] ^= s[7]; + s[5] += s[3] + 0xa927519fu; + s[10] += s[5]; + s[13] ^= s[10] ^ 0xcb96c77bu; + s[4] *= (s[13] | 1u); + s[1] -= s[4]; + s[5] += s[1]; + s[15] = mh_rotl(s[15], 2u) + s[5]; + s[8] ^= s[15]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 24u); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[0] = (s[0] ^ s[15]) * 0x043e38c5u; + s[15] *= (s[0] | 1u); + s[11] ^= s[15]; + s[14] += s[11] + 0x53bbe6c0u; + s[0] *= (s[14] | 1u); + s[9] ^= s[0]; + s[6] *= (s[9] | 1u); + s[2] += (s[6] | s[1]); + s[13] += s[2]; + s[10] = mh_rotl(s[10] ^ s[13], 10u); + s[1] += s[10]; + s[15] = s[15] * 0x583e8481u + s[1]; + s[13] ^= s[15] ^ 0x2cc63257u; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3], 28u) + s[7]; + s[2] -= s[3]; + s[14] = mh_rotl(s[14], 11u) + s[2]; + s[1] += (s[14] | s[7]); + s[8] ^= s[1]; + s[11] = (s[11] ^ s[8]) * 0x0e28ad8fu; + s[3] = (s[3] ^ s[11]) * 0x298e4869u; + s[11] -= s[3]; + s[3] = (s[3] ^ s[11]) * 0x7d313b6bu; + s[11] = (s[11] ^ s[3]) * 0xeca4dbcbu; + s[2] -= s[11]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[11] += s[10] + 0xfceb9d18u; + s[12] += (s[11] | s[1]); + s[4] *= (s[12] | 1u); + s[5] ^= s[4]; + s[0] ^= (s[5] & s[6]); + s[12] ^= s[0]; + s[9] += s[12] + 0xb01e0678u; + s[2] -= s[9]; + s[15] += s[2]; + s[11] ^= s[15] ^ 0x53447cc1u; + s[14] += s[11] + 0xaf64abb5u; + s[9] ^= s[14] ^ 0xc2548a26u; + s[2] *= (s[9] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 5u); + s[13] *= (s[7] | 1u); + s[5] = (s[5] ^ s[13]) * 0x10dbc9ddu; + s[12] -= s[5]; + s[2] += s[12]; + s[15] -= s[2]; + s[4] = (s[4] ^ s[15]) * 0x3582fe41u; + s[7] = mh_rotl(s[7] ^ s[4], 28u); + s[13] = s[13] * 0x7fe12955u + s[7]; + s[12] = (s[12] ^ s[13]) * 0xd86d1b4bu; + s[10] += s[12] + 0xb0f59a52u; + s[0] *= (s[10] | 1u); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[8] ^= s[10]; + s[10] *= (s[8] | 1u); + s[5] += (s[10] | s[7]); + s[13] = mh_rotl(s[13] ^ s[5], 11u); + s[0] ^= (s[13] & s[11]); + s[6] += s[0]; + s[3] = mh_rotl(s[3], 8u) + s[6]; + s[13] ^= s[3] ^ 0x97eba12fu; + s[10] *= (s[13] | 1u); + s[1] += s[10]; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[11] ^= s[12]; + s[7] ^= s[11]; + s[1] *= (s[7] | 1u); + s[4] += s[1] + 0x3e58791au; + s[0] += (s[4] | s[1]); + s[10] ^= s[0]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[13] ^= s[15]; + s[7] ^= s[13] ^ 0x2741705du; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[15] += s[4] + 0xe6934fbbu; + s[3] -= s[15]; + s[11] = (s[11] ^ s[3]) * 0x1f6fe0a9u; + s[15] ^= s[11]; + s[0] = (s[0] ^ s[15]) * 0x1ef7dac7u; + s[14] += s[0] + 0x85ea7167u; + s[8] += s[14]; + s[2] = (s[2] ^ s[8]) * 0xbd1c80ddu; + s[7] += s[2]; + s[4] ^= s[7]; + s[11] = mh_rotl(s[11], 28u) + s[4]; + s[9] = (s[9] ^ s[11]) * 0xf99784f9u; + s[5] = mh_rotl(s[5] ^ s[9], 28u); + s[6] += s[5]; + s[10] = mh_rotl(s[10] ^ s[6], 30u); + s[15] *= (s[10] | 1u); + s[11] ^= s[15]; + s[10] ^= s[11] ^ 0xe63d1f0fu; + s[0] ^= (s[10] & s[15]); + s[14] = (s[14] ^ s[0]) * 0xdd771591u; + s[6] = mh_rotl(s[6] ^ s[14], 25u); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0x1aef487du; + s[2] += s[6] + 0x4803fbdfu; + s[9] ^= s[2]; + s[12] ^= (s[9] & s[13]); + s[15] ^= (s[12] & s[10]); + s[12] *= (s[15] | 1u); + s[14] ^= s[12]; + s[11] = (s[11] ^ s[14]) * 0xcdae3347u; + s[2] = mh_rotl(s[2] ^ s[11], 25u); + s[9] ^= s[2] ^ 0xd54df97bu; + s[0] *= (s[9] | 1u); + s[9] ^= s[0] ^ 0x36482476u; + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[11] = mh_rotl(s[11] ^ s[9], 19u); + s[15] ^= (s[11] & s[4]); + s[14] ^= s[15]; + s[1] += s[14]; + s[11] = mh_rotl(s[11], 20u) + s[1]; + s[9] += s[11] + 0x08509d57u; + s[15] *= (s[9] | 1u); + s[9] -= s[15]; + s[14] = (s[14] ^ s[9]) * 0x9757fd53u; + s[13] ^= (s[14] & s[5]); + s[6] += s[13]; + s[15] = (s[15] ^ s[6]) * 0x3e6be04bu; + s[12] *= (s[15] | 1u); + s[2] = mh_rotl(s[2], 25u) + s[12]; + s[13] -= s[2]; + s[8] ^= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 31u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[1] = mh_rotl(s[1], 20u) + s[10]; + s[7] += s[1] + 0x9218a857u; + s[0] += s[7]; + s[11] ^= s[0]; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[10] = mh_rotl(s[10] ^ s[15], 1u); + s[3] ^= s[10] ^ 0x60be6fe9u; + s[4] = (s[4] ^ s[3]) * 0x4177a7a7u; + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[11] += s[7] + 0x85521284u; + s[4] = (s[4] ^ s[11]) * 0x95e55935u; + s[3] += s[4]; + s[15] += s[3]; + s[5] += s[15] + 0x7518eed4u; + s[9] ^= s[5] ^ 0x087e9a42u; + s[10] *= (s[9] | 1u); + s[8] -= s[10]; + s[5] ^= s[8] ^ 0xf3fb3909u; + s[14] ^= (s[5] & s[8]); + s[10] += s[14] + 0x7a9e6e04u; + s[0] += (s[10] | s[2]); + s[6] = (s[6] ^ s[0]) * 0xe355b5f1u; + s[5] = s[5] * 0xe711e2fdu + s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 3u) + s[10]; + s[13] ^= s[8]; + s[11] ^= s[13]; + s[9] -= s[11]; + s[12] ^= s[9] ^ 0xc8862d11u; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15], 23u) + s[4]; + s[9] ^= s[15] ^ 0x413dfad3u; + s[11] *= (s[9] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 31u); + s[5] ^= s[1] ^ 0xe7b946b4u; + s[15] -= s[5]; + s[2] *= (s[15] | 1u); + s[5] *= (s[2] | 1u); + s[4] -= s[5]; + s[9] += (s[4] | s[13]); + s[0] ^= s[9] ^ 0x7854824fu; + s[3] = (s[3] ^ s[0]) * 0x442b482du; + s[11] = mh_rotl(s[11], 2u) + s[3]; + s[6] += (s[11] | s[13]); + s[7] += (s[6] | s[9]); + s[0] *= (s[7] | 1u); + s[4] += s[0]; + s[14] ^= (s[4] & s[7]); + s[10] += (s[14] | s[3]); + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[4] *= (s[10] | 1u); + s[14] += s[4]; + s[6] -= s[14]; + s[15] ^= s[6]; + s[6] *= (s[15] | 1u); + s[10] ^= s[6]; + s[6] ^= s[10]; + s[8] ^= (s[6] & s[0]); + s[5] ^= s[8]; + s[10] ^= s[5]; + s[7] = mh_rotl(s[7], 28u) + s[10]; + s[1] += s[7] + 0xe4c19693u; + s[0] = mh_rotl(s[0], 15u) + s[1]; + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[1] = mh_rotl(s[1], 19u) + s[2]; + s[6] += s[1] + 0x87218495u; + s[7] = mh_rotl(s[7], 15u) + s[6]; + s[6] += (s[7] | s[5]); + s[10] = mh_rotl(s[10], 7u) + s[6]; + s[2] *= (s[10] | 1u); + s[0] = mh_rotl(s[0], 27u) + s[2]; + s[10] ^= s[0]; + s[15] = (s[15] ^ s[10]) * 0x5787be43u; + s[2] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[2], 14u); + s[6] += s[0]; + s[5] += s[6]; + s[15] += s[5]; + s[1] = mh_rotl(s[1], 4u) + s[15]; + s[10] += s[1]; + s[7] = (s[7] ^ s[10]) * 0x5b66a27du; + s[11] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[10] *= (s[7] | 1u); + s[2] = mh_rotl(s[2] ^ s[10], 12u); + s[14] ^= s[2]; + s[7] *= (s[14] | 1u); + s[10] += s[7] + 0x51e1605bu; + s[11] += s[10] + 0x07a5770bu; + s[12] = mh_rotl(s[12], 25u) + s[11]; + s[13] += s[12] + 0x173cbaedu; + s[14] -= s[13]; + s[8] *= (s[14] | 1u); + s[6] = (s[6] ^ s[8]) * 0x198bf8abu; + s[13] += s[6]; + s[4] = (s[4] ^ s[13]) * 0x4a858065u; + s[8] += s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[12] += s[15] + 0x41cd5528u; + s[15] = mh_rotl(s[15], 1u) + s[12]; + s[12] = (s[12] ^ s[15]) * 0xf11bd25du; + s[1] = mh_rotl(s[1], 23u) + s[12]; + s[9] = mh_rotl(s[9] ^ s[1], 12u); + s[13] = (s[13] ^ s[9]) * 0x63f2bd71u; + s[4] += s[13] + 0x941778a1u; + s[11] = s[11] * 0x8d0fa58du + s[4]; + s[6] = mh_rotl(s[6] ^ s[11], 2u); + s[12] += s[6] + 0x1548d255u; + s[1] += s[12] + 0x2e20325eu; + s[7] ^= s[1] ^ 0x352c2791u; + s[12] ^= s[7]; + s[0] = (s[0] ^ s[12]) * 0xc3e7b99bu; + s[7] ^= s[0]; + s[1] ^= s[7]; + s[15] = mh_rotl(s[15] ^ s[1], 23u); + s[14] ^= s[15]; + s[11] = mh_rotl(s[11] ^ s[14], 31u); + s[10] += s[11]; + s[7] = (s[7] ^ s[10]) * 0x7c1fbac9u; + s[6] = (s[6] ^ s[7]) * 0x0b46f65bu; + s[10] ^= s[6]; + s[6] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[14], 21u); + s[7] -= s[10]; + s[2] += s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 29u); + s[15] = mh_rotl(s[15] ^ s[4], 29u); + s[1] *= (s[15] | 1u); + s[8] = mh_rotl(s[8], 3u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[8], 12u); + s[14] = s[14] * 0x945fd715u + s[15]; + s[6] = (s[6] ^ s[14]) * 0xf9a3efb3u; + s[8] ^= s[6]; + s[11] -= s[8]; + s[9] *= (s[11] | 1u); + s[8] ^= s[9]; + s[11] += s[8]; + s[7] += s[11] + 0xe0e87381u; + s[9] ^= s[7]; + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] = mh_rotl(s[11] ^ s[5], 26u); + s[12] *= (s[11] | 1u); + s[4] -= s[12]; + s[10] -= s[4]; + s[0] -= s[10]; + s[6] ^= s[0]; + s[8] = s[8] * 0x92e1e5f7u + s[6]; + s[1] += (s[8] | s[3]); + s[10] = (s[10] ^ s[1]) * 0x1eb329d3u; + s[0] = mh_rotl(s[0], 29u) + s[10]; + s[9] = mh_rotl(s[9], 6u) + s[0]; + s[3] += s[9] + 0x1bcf547cu; + s[9] -= s[3]; + s[14] += s[9]; + s[5] = mh_rotl(s[5] ^ s[14], 22u); + s[15] = s[15] * 0x3675a9adu + s[5]; + s[7] *= (s[15] | 1u); + s[4] += s[7] + 0x641005b4u; + s[1] += s[4] + 0x6a3b3afbu; + s[11] += s[1]; + s[9] ^= s[11] ^ 0x30def5feu; + s[6] ^= (s[9] & s[8]); + s[11] = mh_rotl(s[11], 28u) + s[6]; + s[6] += s[11]; + s[12] = (s[12] ^ s[6]) * 0x4d6dc8b3u; + s[7] -= s[12]; + s[9] ^= s[7]; + s[0] *= (s[9] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xb420685cu; + s[1] ^= (s[7] & s[12]); + s[12] += (s[1] | s[9]); + s[14] ^= s[12] ^ 0x076d63f7u; + s[1] *= (s[14] | 1u); + s[5] = s[5] * 0x2026ae47u + s[1]; + s[15] = mh_rotl(s[15], 23u) + s[5]; + s[9] += s[15]; + s[1] ^= s[9]; + s[4] = (s[4] ^ s[1]) * 0x8e6cffbfu; + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[14] ^= s[3]; + s[6] -= s[14]; + s[15] = (s[15] ^ s[6]) * 0xf52e633du; + s[14] *= (s[15] | 1u); + s[4] -= s[14]; + s[0] ^= s[4]; + s[1] = (s[1] ^ s[0]) * 0xd9650db9u; + s[13] = mh_rotl(s[13], 27u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[13], 22u); + s[12] += s[15]; + s[1] -= s[12]; + s[2] = s[2] * 0xd1740ecbu + s[1]; + s[11] *= (s[2] | 1u); + s[0] *= (s[11] | 1u); + s[4] -= s[0]; + s[11] ^= s[4] ^ 0x6823955fu; + s[3] ^= s[11]; + s[13] *= (s[3] | 1u); + s[3] = mh_rotl(s[3] ^ s[13], 8u); + s[8] = (s[8] ^ s[3]) * 0x615f5e9du; + s[0] -= s[8]; + s[3] ^= s[0]; + s[1] ^= s[3] ^ 0xb1dc5436u; + s[9] *= (s[1] | 1u); + s[13] += s[9]; + s[3] = s[3] * 0xfe0cf937u + s[13]; + s[8] *= (s[3] | 1u); + s[4] += s[8]; + s[3] += s[4] + 0x4f38c2ccu; + s[12] += s[3] + 0x3b3cb536u; + s[1] -= s[12]; + s[6] *= (s[1] | 1u); + s[8] = (s[8] ^ s[6]) * 0x89b78741u; + s[5] += s[8]; + s[1] += s[5] + 0x37d58859u; + s[7] = (s[7] ^ s[1]) * 0x4d7d11c3u; + s[4] ^= (s[7] & s[11]); + s[6] ^= s[4] ^ 0xe3a88b56u; + s[13] = mh_rotl(s[13], 20u) + s[6]; + s[10] *= (s[13] | 1u); + s[14] += s[10]; + s[8] += (s[14] | s[6]); + s[11] += s[8] + 0xca45662du; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[5] *= (s[14] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[8] -= s[14]; + s[13] ^= s[8]; + s[6] -= s[13]; + s[14] += (s[6] | s[4]); + s[0] -= s[14]; + s[6] += s[0] + 0x19712582u; + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[3] *= (s[15] | 1u); + s[5] -= s[3]; + s[8] = mh_rotl(s[8] ^ s[5], 17u); +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_8(uint* s) { + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[12] = mh_rotl(s[12], 17u) + s[2]; + s[13] *= (s[12] | 1u); + s[11] *= (s[13] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 17u); + s[10] -= s[1]; + s[2] += s[10]; + s[11] = (s[11] ^ s[2]) * 0xea1e243du; + s[10] ^= s[11] ^ 0x2e9ac4cbu; + s[5] -= s[10]; + s[1] = mh_rotl(s[1], 20u) + s[5]; + s[6] ^= (s[1] & s[9]); + s[11] += s[6]; + s[13] *= (s[11] | 1u); + s[15] *= (s[13] | 1u); + s[3] ^= (s[15] & s[2]); + s[8] -= s[3]; + s[5] += s[8] + 0x40407046u; + s[3] *= (s[5] | 1u); + s[12] *= (s[3] | 1u); + s[14] ^= s[12] ^ 0x972141aeu; + s[4] -= s[14]; + s[1] *= (s[4] | 1u); + s[15] -= s[1]; + s[0] = s[0] * 0x6b61ba2bu + s[15]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[0] = s[0] * 0xbebc2e0du + s[13]; + s[11] += s[0] + 0x2c68ac9eu; + s[3] += (s[11] | s[10]); + s[15] = s[15] * 0xd6e907b5u + s[3]; + s[1] += s[15]; + s[12] += s[1]; + s[10] += s[12]; + s[2] += s[10]; + s[1] ^= s[2]; + s[0] *= (s[1] | 1u); + s[13] ^= s[0]; + s[6] *= (s[13] | 1u); + s[0] = (s[0] ^ s[6]) * 0xa1b16ef7u; + s[8] += (s[0] | s[11]); + s[0] = mh_rotl(s[0] ^ s[8], 24u); + s[9] -= s[0]; + s[13] = (s[13] ^ s[9]) * 0x8cb2b469u; + s[10] = mh_rotl(s[10] ^ s[13], 20u); + s[13] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[13], 23u); + s[1] = (s[1] ^ s[11]) * 0x0cac0de1u; + s[7] = mh_rotl(s[7], 17u) + s[1]; + s[10] = (s[10] ^ s[7]) * 0xb33ec0ebu; + s[12] += s[10]; + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[8] ^= s[11]; + s[4] = s[4] * 0x0fdcff95u + s[8]; + s[13] ^= (s[4] & s[12]); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[12] = (s[12] ^ s[6]) * 0x526264efu; + s[4] -= s[12]; + s[7] = (s[7] ^ s[4]) * 0x4afe3457u; + s[12] = s[12] * 0x4728f4cbu + s[7]; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[8] += s[15]; + s[5] -= s[8]; + s[3] += (s[5] | s[12]); + s[15] += s[3]; + s[13] = mh_rotl(s[13] ^ s[15], 13u); + s[0] ^= (s[13] & s[11]); + s[4] ^= s[0]; + s[14] += s[4]; + s[8] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[8], 17u); + s[1] += s[0]; + s[8] = (s[8] ^ s[1]) * 0xff70caf9u; + s[2] ^= s[8] ^ 0x0ff2bb06u; + s[1] *= (s[2] | 1u); + s[12] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[12], 12u); + s[13] += s[14]; + s[11] = mh_rotl(s[11], 15u) + s[13]; + s[3] = (s[3] ^ s[11]) * 0xa18acb9fu; + s[1] ^= s[3] ^ 0x4af36d07u; + s[2] += s[1] + 0x2ee01525u; + s[5] ^= s[2]; + s[3] += s[5] + 0x96db46ecu; + s[12] ^= (s[3] & s[14]); + s[13] ^= s[12] ^ 0x8a4b65c5u; + s[7] ^= s[13]; + s[5] += s[7]; + s[0] += s[5]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[7] = (s[7] ^ s[3]) * 0x0daf64efu; + s[9] = (s[9] ^ s[7]) * 0x2f262a6du; + s[1] ^= s[9]; + s[12] -= s[1]; + s[2] += s[12]; + s[12] ^= (s[2] & s[15]); + s[10] ^= (s[12] & s[15]); + s[14] ^= s[10]; + s[1] = mh_rotl(s[1], 26u) + s[14]; + s[9] += s[1]; + s[8] ^= s[9]; + s[15] ^= s[8] ^ 0x69952578u; + s[0] ^= s[15] ^ 0x45e70bd6u; + s[8] -= s[0]; + s[14] = s[14] * 0x39098d3bu + s[8]; + s[6] *= (s[14] | 1u); + s[12] ^= s[6] ^ 0xd07ef179u; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 2u); + s[6] += s[15]; + s[9] ^= (s[6] & s[1]); + s[5] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[5], 22u); + s[9] *= (s[11] | 1u); + s[6] = s[6] * 0x36ed5b21u + s[9]; + s[9] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[9], 4u); + s[1] -= s[13]; + s[4] *= (s[1] | 1u); + s[3] ^= (s[4] & s[5]); + s[2] = s[2] * 0x38309bf7u + s[3]; + s[1] += (s[2] | s[11]); + s[9] = (s[9] ^ s[1]) * 0xc0be3739u; + s[15] ^= s[9] ^ 0x07de5788u; + s[11] = s[11] * 0xd8c6366du + s[15]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[15] = mh_rotl(s[15] ^ s[0], 5u); + s[3] += s[15]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[15] *= (s[11] | 1u); + s[1] = s[1] * 0x0246d699u + s[15]; + s[10] *= (s[1] | 1u); + s[12] += s[10]; + s[10] += s[12]; + s[7] += (s[10] | s[9]); + s[9] ^= s[7]; + s[3] ^= s[9]; + s[14] += (s[3] | s[0]); + s[1] = mh_rotl(s[1] ^ s[14], 17u); + s[11] ^= s[1]; + s[3] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[3] *= (s[10] | 1u); + s[2] ^= s[3]; + s[9] = (s[9] ^ s[2]) * 0xefdd0db1u; + s[12] += (s[9] | s[5]); + s[5] = mh_rotl(s[5] ^ s[12], 6u); + s[11] = (s[11] ^ s[5]) * 0xc9b9d1dfu; + s[1] ^= s[11]; + s[5] ^= s[1]; + s[7] ^= s[5]; + s[10] ^= (s[7] & s[11]); + s[7] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[7], 25u); + s[10] ^= s[15]; + s[9] += s[10] + 0xf87f58f8u; + s[0] = mh_rotl(s[0], 15u) + s[9]; + s[9] += s[0]; + s[1] += (s[9] | s[7]); + s[14] += s[1] + 0x676d23d7u; + s[0] += (s[14] | s[6]); + s[8] = mh_rotl(s[8], 15u) + s[0]; + s[14] *= (s[8] | 1u); + s[8] ^= (s[14] & s[6]); + s[4] += s[8]; + s[2] = (s[2] ^ s[4]) * 0xe1a03111u; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[15] ^= s[0]; + s[8] ^= s[15] ^ 0xad7880f9u; + s[4] = mh_rotl(s[4], 11u) + s[8]; + s[11] -= s[4]; + s[6] += s[11]; + s[9] *= (s[6] | 1u); + s[0] ^= s[9]; + s[15] = mh_rotl(s[15] ^ s[0], 11u); + s[2] = (s[2] ^ s[15]) * 0x03f5accbu; + s[12] = mh_rotl(s[12], 11u) + s[2]; + s[9] ^= s[12]; + s[14] *= (s[9] | 1u); + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x9cf27933u; + s[15] = mh_rotl(s[15], 27u) + s[8]; + s[7] ^= (s[15] & s[8]); + s[5] += s[7]; + s[9] = (s[9] ^ s[5]) * 0xe294856fu; + s[1] ^= s[9]; + s[11] ^= s[1]; + s[15] = (s[15] ^ s[11]) * 0x4555f2d5u; + s[7] = mh_rotl(s[7] ^ s[15], 31u); + s[13] += s[7]; + s[10] ^= s[13]; + s[2] = (s[2] ^ s[10]) * 0x75193e43u; + s[9] -= s[2]; + s[3] = s[3] * 0x8c57e72du + s[9]; + s[2] = mh_rotl(s[2], 21u) + s[3]; + s[4] = (s[4] ^ s[2]) * 0x55a02867u; + s[1] -= s[4]; + s[9] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[9], 8u); + s[14] ^= s[2]; + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[14] *= (s[0] | 1u); + s[6] = mh_rotl(s[6], 18u) + s[14]; + s[10] -= s[6]; + s[8] ^= s[10]; + s[9] += s[8]; + s[4] ^= s[9]; + s[7] = (s[7] ^ s[4]) * 0x49afec39u; + s[14] += (s[7] | s[1]); + s[6] = mh_rotl(s[6] ^ s[14], 20u); + s[3] = mh_rotl(s[3] ^ s[6], 28u); + s[10] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 16u) + s[10]; + s[8] += s[7]; + s[11] = s[11] * 0x47f9228bu + s[8]; + s[6] ^= (s[11] & s[14]); + s[14] ^= (s[6] & s[13]); + s[15] = mh_rotl(s[15] ^ s[14], 30u); + s[13] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[13], 19u); + s[7] += s[8]; + s[6] -= s[7]; + s[1] = s[1] * 0x89a3aa17u + s[6]; + s[10] -= s[1]; + s[13] ^= s[10]; + s[14] *= (s[13] | 1u); + s[15] += s[14]; + s[4] ^= s[15]; + s[1] = mh_rotl(s[1], 27u) + s[4]; + s[0] += s[1]; + s[7] = mh_rotl(s[7], 30u) + s[0]; + s[10] ^= s[7]; + s[14] += s[10]; + s[3] += s[14]; + s[12] ^= s[3] ^ 0x3d91f806u; + s[0] -= s[12]; + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 7u) + s[12]; + s[14] ^= s[4]; + s[6] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 23u) + s[6]; + s[15] -= s[10]; + s[6] -= s[15]; + s[8] = mh_rotl(s[8] ^ s[6], 2u); + s[3] = mh_rotl(s[3], 2u) + s[8]; + s[4] += (s[3] | s[10]); + s[1] = (s[1] ^ s[4]) * 0x5b3cd913u; + s[11] = mh_rotl(s[11] ^ s[1], 2u); + s[0] = (s[0] ^ s[11]) * 0x3c693ccbu; + s[15] += s[0]; + s[10] ^= s[15] ^ 0x5a83618eu; + s[3] *= (s[10] | 1u); + s[11] = s[11] * 0x8cff3953u + s[3]; + s[15] -= s[11]; + s[10] = mh_rotl(s[10], 29u) + s[15]; + s[11] += s[10] + 0xef64efa3u; + s[0] = mh_rotl(s[0], 24u) + s[11]; + s[11] = mh_rotl(s[11] ^ s[0], 20u); + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[6] ^= s[0]; + s[4] -= s[6]; + s[15] += s[4]; + s[5] = mh_rotl(s[5], 20u) + s[15]; + s[9] ^= s[5]; + s[0] += s[9]; + s[7] += s[0]; + s[1] = s[1] * 0x0b7f59b3u + s[7]; + s[4] += s[1] + 0x145ca745u; + s[3] = (s[3] ^ s[4]) * 0x45e8e60bu; + s[0] += s[3]; + s[14] = (s[14] ^ s[0]) * 0x89fefe0bu; + s[5] ^= s[14]; + s[0] ^= s[5]; + s[10] *= (s[0] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 26u); + s[4] = mh_rotl(s[4], 29u) + s[13]; + s[15] = mh_rotl(s[15], 13u) + s[4]; + s[3] = mh_rotl(s[3], 16u) + s[15]; + s[9] -= s[3]; + s[12] ^= s[9] ^ 0x95781226u; + s[13] ^= s[12]; + s[10] = mh_rotl(s[10], 28u) + s[13]; + s[5] += s[10]; + s[12] *= (s[5] | 1u); + s[14] += s[12] + 0x01116f8fu; + s[13] = mh_rotl(s[13] ^ s[14], 26u); + s[10] += s[13] + 0x23aea8a9u; + s[8] += (s[10] | s[12]); + s[13] ^= (s[8] & s[0]); + s[1] += s[13]; + s[6] ^= s[1]; + s[4] ^= (s[6] & s[7]); + s[11] += s[4]; + s[4] *= (s[11] | 1u); + s[7] ^= (s[4] & s[3]); + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[0] -= s[6]; + s[12] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 19u) + s[12]; + s[2] = mh_rotl(s[2] ^ s[4], 8u); + s[10] += s[2]; + s[11] = mh_rotl(s[11], 25u) + s[10]; + s[1] ^= s[11]; + s[12] = (s[12] ^ s[1]) * 0x6229cc97u; + s[14] *= (s[12] | 1u); + s[4] -= s[14]; + s[13] ^= (s[4] & s[1]); + s[1] -= s[13]; + s[12] += s[1]; + s[7] += s[12] + 0x88900fdcu; + s[6] *= (s[7] | 1u); + s[15] = s[15] * 0x84135b45u + s[6]; + s[8] ^= s[15]; + s[15] += s[8]; + s[5] ^= s[15]; + s[8] ^= s[5]; + s[11] -= s[8]; + s[3] = s[3] * 0x2e47fa49u + s[11]; + s[12] = mh_rotl(s[12] ^ s[3], 10u); + s[8] -= s[12]; + s[13] = mh_rotl(s[13], 15u) + s[8]; + s[9] = mh_rotl(s[9], 23u) + s[13]; + s[0] += (s[9] | s[11]); + s[12] = (s[12] ^ s[0]) * 0x733a341du; + s[13] -= s[12]; + s[4] *= (s[13] | 1u); + s[7] += s[4]; + s[1] += s[7]; + s[15] = mh_rotl(s[15], 2u) + s[1]; + s[3] ^= s[15]; + s[15] -= s[3]; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[12] ^= (s[1] & s[0]); + s[11] ^= (s[12] & s[13]); + s[14] -= s[11]; + s[11] = (s[11] ^ s[14]) * 0xedf296edu; + s[12] ^= (s[11] & s[14]); + s[11] = mh_rotl(s[11], 1u) + s[12]; + s[5] *= (s[11] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[7] ^= s[14] ^ 0x4af9834bu; + s[10] ^= s[7]; + s[9] ^= (s[10] & s[2]); + s[13] ^= s[9]; + s[14] ^= (s[13] & s[7]); + s[10] += s[14]; + s[12] ^= s[10]; + s[13] -= s[12]; + s[1] ^= (s[13] & s[14]); + s[12] = (s[12] ^ s[1]) * 0xf8f0e297u; + s[5] *= (s[12] | 1u); + s[15] ^= (s[5] & s[7]); + s[11] = mh_rotl(s[11], 27u) + s[15]; + s[9] = (s[9] ^ s[11]) * 0xbefccb87u; + s[15] += s[9] + 0x17cb62ddu; + s[0] ^= s[15]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[7] += s[3]; + s[10] ^= s[7]; + s[9] *= (s[10] | 1u); + s[12] += (s[9] | s[14]); + s[3] = mh_rotl(s[3] ^ s[12], 25u); + s[10] += s[3]; + s[9] = mh_rotl(s[9], 3u) + s[10]; + s[6] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[6], 21u); + s[3] = s[3] * 0x65a97173u + s[14]; + s[5] = mh_rotl(s[5] ^ s[3], 6u); + s[7] = mh_rotl(s[7], 24u) + s[5]; + s[15] += s[7]; + s[13] += s[15]; + s[0] *= (s[13] | 1u); + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[15] *= (s[3] | 1u); + s[6] ^= (s[15] & s[12]); + s[2] ^= s[6]; + s[8] ^= s[2]; + s[1] = s[1] * 0x6e553265u + s[8]; + s[12] += s[1] + 0x0da30db5u; + s[7] ^= s[12]; + s[1] ^= s[7]; + s[3] ^= s[1]; + s[4] += s[3]; + s[15] ^= s[4]; + s[3] += s[15]; + s[2] *= (s[3] | 1u); + s[7] += s[2]; + s[0] = (s[0] ^ s[7]) * 0x97f0fd93u; + s[14] = mh_rotl(s[14] ^ s[0], 27u); + s[13] = (s[13] ^ s[14]) * 0xb04f1b3fu; + s[9] -= s[13]; + s[3] += s[9]; + s[4] -= s[3]; + s[8] ^= s[4]; + s[9] ^= s[8]; + s[4] += s[9]; + s[9] = s[9] * 0x5b96b23bu + s[4]; + s[1] += s[9]; + s[8] += s[1]; + s[14] += s[8]; + s[5] = mh_rotl(s[5] ^ s[14], 12u); + s[8] = (s[8] ^ s[5]) * 0x6395a44fu; + s[12] ^= s[8] ^ 0x1623eb44u; + s[14] = (s[14] ^ s[12]) * 0xed649ca9u; + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[12] *= (s[11] | 1u); + s[15] = mh_rotl(s[15] ^ s[12], 23u); + s[3] += s[15]; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x29ccc511u; + s[4] += s[8]; + s[14] = (s[14] ^ s[4]) * 0xa94e09cbu; + s[7] = (s[7] ^ s[14]) * 0x2353916bu; + s[1] ^= (s[7] & s[9]); + s[8] = (s[8] ^ s[1]) * 0x3189b2c5u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[7] = (s[7] ^ s[10]) * 0x8fbc5699u; + s[12] ^= s[7] ^ 0x02fcc6f5u; + s[6] += s[12]; + s[4] += s[6]; + s[15] ^= s[4] ^ 0x37cf53dcu; + s[9] *= (s[15] | 1u); + s[14] -= s[9]; + s[7] -= s[14]; + s[3] = mh_rotl(s[3], 15u) + s[7]; + s[0] ^= s[3]; + s[7] = mh_rotl(s[7], 7u) + s[0]; + s[14] = mh_rotl(s[14], 14u) + s[7]; + s[12] += s[14]; + s[10] = (s[10] ^ s[12]) * 0xb35348fbu; + s[5] = mh_rotl(s[5] ^ s[10], 17u); + s[14] ^= s[5] ^ 0x43820636u; + s[13] += s[14]; + s[3] = (s[3] ^ s[13]) * 0xaeaf3829u; + s[1] *= (s[3] | 1u); + s[2] += s[1]; + s[13] = mh_rotl(s[13], 9u) + s[2]; + s[3] = mh_rotl(s[3] ^ s[13], 26u); + s[2] = mh_rotl(s[2], 17u) + s[3]; + s[5] = mh_rotl(s[5] ^ s[2], 26u); + s[9] += s[5]; + s[3] = (s[3] ^ s[9]) * 0xc027efe3u; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x33c90921u; + s[2] -= s[8]; + s[4] ^= (s[2] & s[15]); + s[9] *= (s[4] | 1u); + s[2] += s[9]; + s[13] += (s[2] | s[6]); + s[4] = (s[4] ^ s[13]) * 0xde5f056fu; + s[3] ^= s[4]; + s[0] *= (s[3] | 1u); + s[14] *= (s[0] | 1u); + s[11] += s[14]; + s[2] ^= (s[11] & s[6]); + s[1] *= (s[2] | 1u); + s[12] += s[1] + 0x027965c8u; + s[14] *= (s[12] | 1u); + s[15] -= s[14]; + s[6] += s[15] + 0x3f2ed460u; + s[14] ^= s[6]; + s[9] ^= s[14]; + s[14] ^= s[9]; + s[8] -= s[14]; + s[9] = s[9] * 0x37363dc7u + s[8]; + s[2] ^= s[9]; + s[9] += s[2] + 0x36d721cdu; + s[2] ^= s[9] ^ 0x6a3aa7cbu; + s[13] = mh_rotl(s[13] ^ s[2], 4u); + s[1] ^= s[13]; + s[11] ^= s[1]; + s[10] ^= (s[11] & s[3]); + s[1] += s[10]; + s[13] ^= (s[1] & s[0]); + s[5] += s[13]; + s[0] += s[5]; + s[1] += s[0] + 0x29e429d0u; + s[7] *= (s[1] | 1u); + s[1] += s[7]; + s[13] = (s[13] ^ s[1]) * 0xebce972fu; + s[14] ^= s[13] ^ 0x1155a47fu; + s[2] += s[14]; + s[5] += (s[2] | s[3]); + s[1] += s[5] + 0x6ee2efc2u; + s[6] *= (s[1] | 1u); + s[12] = s[12] * 0xf94d29abu + s[6]; + s[1] ^= s[12] ^ 0x83a5d198u; + s[8] ^= (s[1] & s[2]); + s[15] = s[15] * 0xf23f5c07u + s[8]; + s[12] *= (s[15] | 1u); + s[4] ^= s[12]; + s[6] = mh_rotl(s[6], 27u) + s[4]; + s[14] = mh_rotl(s[14], 24u) + s[6]; + s[5] += s[14]; + s[13] ^= s[5] ^ 0x3acfc3e3u; + s[12] ^= s[13]; + s[4] ^= (s[12] & s[7]); + s[2] ^= (s[4] & s[10]); + s[15] = mh_rotl(s[15] ^ s[2], 18u); + s[0] += s[15]; + s[8] *= (s[0] | 1u); + s[13] ^= s[8]; + s[12] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[12], 4u); + s[15] += s[3] + 0x92e6fcceu; + s[10] = mh_rotl(s[10], 6u) + s[15]; + s[4] = mh_rotl(s[4] ^ s[10], 13u); + s[0] ^= s[4] ^ 0x4eb97c7fu; + s[5] -= s[0]; + s[2] = (s[2] ^ s[5]) * 0x02dedd01u; + s[7] ^= s[2]; + s[13] += (s[7] | s[1]); + s[10] += s[13]; + s[2] *= (s[10] | 1u); + s[6] *= (s[2] | 1u); + s[9] ^= s[6]; + s[14] += s[9]; + s[12] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[12], 29u); + s[7] += s[14] + 0x69164b49u; + s[4] = s[4] * 0x00950233u + s[7]; + s[9] ^= (s[4] & s[11]); + s[1] = (s[1] ^ s[9]) * 0x4e1cc661u; + s[2] -= s[1]; + s[8] = (s[8] ^ s[2]) * 0x8b929a3bu; + s[2] += s[8]; + s[15] += (s[2] | s[9]); + s[3] += s[15] + 0x4a9cd552u; + s[0] = (s[0] ^ s[3]) * 0x32dafb91u; + s[9] = mh_rotl(s[9], 17u) + s[0]; + s[11] *= (s[9] | 1u); + s[9] -= s[11]; + s[6] += s[9]; + s[9] += s[6] + 0xf58412b3u; + s[7] += s[9] + 0x664fa0c3u; + s[12] = s[12] * 0x0f8329a3u + s[7]; + s[11] += s[12] + 0x5b5d3b76u; + s[5] -= s[11]; + s[10] = (s[10] ^ s[5]) * 0x206437adu; + s[12] = s[12] * 0xbaaafbc9u + s[10]; + s[8] *= (s[12] | 1u); + s[0] += s[8]; + s[1] += s[0] + 0x17331c4fu; + s[3] ^= (s[1] & s[2]); + s[2] = mh_rotl(s[2] ^ s[3], 24u); + s[0] += (s[2] | s[1]); + s[1] = mh_rotl(s[1] ^ s[0], 11u); + s[0] *= (s[1] | 1u); + s[2] = s[2] * 0xfa17cdb7u + s[0]; + s[14] += s[2]; + s[3] ^= s[14]; + s[13] += s[3]; + s[2] += s[13]; + s[8] = mh_rotl(s[8] ^ s[2], 28u); + s[1] *= (s[8] | 1u); + s[14] -= s[1]; + s[11] = mh_rotl(s[11], 9u) + s[14]; + s[10] ^= s[11]; + s[9] += s[10]; + s[0] += s[9] + 0x3437b9adu; + s[4] = (s[4] ^ s[0]) * 0x6074d9edu; + s[12] += s[4] + 0xf268adfeu; + s[14] += s[12] + 0x05784ee6u; + s[13] = s[13] * 0x92ea562fu + s[14]; + s[11] = mh_rotl(s[11] ^ s[13], 18u); + s[2] = mh_rotl(s[2], 4u) + s[11]; + s[13] = (s[13] ^ s[2]) * 0x49aaf125u; + s[3] -= s[13]; + s[7] += s[3] + 0x1d4d2968u; + s[5] ^= (s[7] & s[12]); + s[15] -= s[5]; + s[0] ^= s[15] ^ 0xa66653d0u; + s[2] += s[0]; + s[11] -= s[2]; + s[0] = mh_rotl(s[0] ^ s[11], 16u); + s[3] = mh_rotl(s[3], 4u) + s[0]; + s[8] *= (s[3] | 1u); + s[6] ^= s[8] ^ 0x228a8e2bu; + s[2] ^= s[6]; + s[15] += s[2]; + s[8] += s[15]; + s[2] = mh_rotl(s[2] ^ s[8], 29u); + s[10] ^= s[2]; + s[13] = mh_rotl(s[13], 7u) + s[10]; + s[2] += s[13]; + s[10] = s[10] * 0x373045b7u + s[2]; + s[8] ^= s[10]; + s[13] -= s[8]; + s[15] = (s[15] ^ s[13]) * 0x9c79f3bfu; + s[0] = mh_rotl(s[0], 31u) + s[15]; + s[12] = mh_rotl(s[12], 25u) + s[0]; + s[9] -= s[12]; + s[0] = mh_rotl(s[0], 18u) + s[9]; + s[13] = mh_rotl(s[13] ^ s[0], 11u); + s[14] = mh_rotl(s[14], 9u) + s[13]; + s[7] -= s[14]; + s[3] ^= s[7] ^ 0x380dac7fu; + s[1] ^= s[3]; + s[8] += s[1] + 0x2ae5a9dau; + s[10] = mh_rotl(s[10], 3u) + s[8]; + s[7] = mh_rotl(s[7], 2u) + s[10]; + s[8] *= (s[7] | 1u); + s[10] = (s[10] ^ s[8]) * 0xc6c624a1u; + s[7] = mh_rotl(s[7], 6u) + s[10]; + s[5] += s[7] + 0x3b2e05abu; + s[15] ^= s[5]; + s[12] -= s[15]; + s[14] += s[12]; + s[11] += (s[14] | s[4]); + s[8] += s[11]; + s[15] -= s[8]; + s[10] += s[15]; + s[6] += s[10] + 0x41c42bb0u; + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[15] += (s[4] | s[6]); + s[4] = (s[4] ^ s[15]) * 0x4256a3b1u; + s[0] ^= s[4]; + s[8] = mh_rotl(s[8], 4u) + s[0]; + s[5] -= s[8]; + s[4] += s[5] + 0x566b8b0fu; + s[8] = (s[8] ^ s[4]) * 0xf604d0e7u; + s[10] += s[8]; + s[2] *= (s[10] | 1u); + s[5] ^= s[2]; + s[14] -= s[5]; + s[13] += s[14]; + s[2] -= s[13]; + s[0] += s[2]; + s[2] ^= s[0]; + s[0] ^= s[2] ^ 0x51509095u; + s[4] *= (s[0] | 1u); + s[12] *= (s[4] | 1u); + s[8] += (s[12] | s[9]); + s[10] = mh_rotl(s[10], 11u) + s[8]; + s[9] ^= s[10]; + s[15] += s[9]; + s[11] ^= s[15] ^ 0xa0d4f940u; + s[5] ^= s[11]; + s[6] ^= (s[5] & s[11]); + s[5] ^= s[6]; + s[0] *= (s[5] | 1u); + s[4] -= s[0]; + s[6] += (s[4] | s[3]); + s[4] = mh_rotl(s[4] ^ s[6], 9u); + s[12] ^= (s[4] & s[5]); + s[1] *= (s[12] | 1u); + s[11] ^= s[1]; + s[15] ^= s[11]; + s[4] ^= s[15] ^ 0x0a7a3a1bu; + s[7] += s[4]; + s[8] = mh_rotl(s[8] ^ s[7], 18u); + s[12] ^= s[8]; + s[1] ^= (s[12] & s[3]); + s[0] = mh_rotl(s[0], 7u) + s[1]; + s[2] ^= s[0]; + s[13] ^= s[2]; + s[0] = (s[0] ^ s[13]) * 0x24a5f39du; + s[15] -= s[0]; + s[0] ^= s[15]; + s[1] += s[0]; + s[13] = mh_rotl(s[13], 20u) + s[1]; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 13u) + s[4]; + s[4] ^= s[1]; + s[5] = mh_rotl(s[5], 31u) + s[4]; + s[0] -= s[5]; + s[7] = mh_rotl(s[7] ^ s[0], 28u); + s[5] += s[7]; + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 16u); + s[0] ^= s[5] ^ 0xfb5e8938u; + s[8] += s[0]; + s[12] *= (s[8] | 1u); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[12] += s[11] + 0x9786f7f9u; + s[14] += s[12] + 0x47ed1785u; + s[7] ^= s[14] ^ 0x6483ca53u; + s[5] ^= s[7] ^ 0x7fcbaaf8u; + s[12] += s[5]; + s[1] += (s[12] | s[10]); + s[6] -= s[1]; + s[2] = mh_rotl(s[2], 12u) + s[6]; + s[8] += s[2] + 0x41a11731u; + s[11] = mh_rotl(s[11], 12u) + s[8]; + s[2] += s[11] + 0xdaf8e7dau; + s[7] *= (s[2] | 1u); + s[11] ^= s[7] ^ 0x0af2771du; + s[8] += s[11]; + s[4] += s[8]; + s[13] ^= s[4]; + s[14] = mh_rotl(s[14] ^ s[13], 27u); + s[12] ^= s[14]; + s[9] = s[9] * 0x232d6601u + s[12]; + s[4] *= (s[9] | 1u); + s[1] += s[4]; + s[0] += s[1]; + s[13] *= (s[0] | 1u); + s[1] *= (s[13] | 1u); + s[9] = mh_rotl(s[9] ^ s[1], 19u); + s[0] = mh_rotl(s[0] ^ s[9], 8u); + s[12] += s[0]; + s[15] = mh_rotl(s[15] ^ s[12], 2u); + s[1] -= s[15]; + s[15] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[8] ^= s[12]; + s[0] *= (s[8] | 1u); + s[14] ^= (s[0] & s[6]); + s[11] += s[14]; + s[13] ^= s[11]; + s[4] ^= (s[13] & s[5]); + s[12] -= s[4]; + s[15] -= s[12]; + s[12] = mh_rotl(s[12], 8u) + s[15]; + s[0] = s[0] * 0x28ee8749u + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 13u); + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[5] = (s[5] ^ s[10]) * 0xc5b4f577u; + s[3] = mh_rotl(s[3] ^ s[5], 8u); + s[7] = mh_rotl(s[7] ^ s[3], 30u); + s[1] -= s[7]; + s[5] = (s[5] ^ s[1]) * 0x2d76383du; + s[11] += s[5]; + s[4] = mh_rotl(s[4], 4u) + s[11]; + s[2] ^= s[4]; + s[9] = (s[9] ^ s[2]) * 0x4b24be99u; + s[10] = mh_rotl(s[10], 31u) + s[9]; + s[9] -= s[10]; + s[8] -= s[9]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +static inline void mh_item(__global const uint* cache, uint t, uint* s) { + s[0] = 0xceed56d7u; + s[1] = 0x9ba270d2u; + s[2] = 0x82caab2du; + s[3] = 0x81ebce0eu; + s[4] = 0x12b6ecf1u; + s[5] = 0xd0f3fd7cu; + s[6] = 0xd872eefeu; + s[7] = 0xc158c7bdu; + s[8] = t * 0xf351d601u + 0xc6892460u; + s[9] = t * 0xa3bb398fu + 0x25b7228au; + s[10] = t * 0xb5a09e35u + 0xcd515004u; + s[11] = t * 0x7509c9c1u + 0x2846527au; + s[12] = t * 0x6bbf31e9u + 0xa6324241u; + s[13] = t * 0xfc849a79u + 0x36e3ec53u; + s[14] = t * 0xded91851u + 0x82961bacu; + s[15] = t * 0x8d9113d1u + 0x0f97ba7du; + mh_round_0(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +static inline uint mh_word(__global const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// Memory-hard dataset (MEMHARD.md). One work-item per cache segment; one work-item per 64-byte dataset item. +// The same constants as memhard.h in this pack (one emitter, three dialects). +__kernel void igneum_cache_fill(__global uint* cache, uint nSegments) { + uint seg = (uint)get_global_id(0); + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__kernel void igneum_build(__global uint* ds, __global const uint* cache, uint nItems) { + uint t = (uint)get_global_id(0); + if (t < nItems) { + uint s[16]; + mh_item(cache, t, s); + __global uint* d = ds + ((ulong)t * 16u); + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per work-item. IGNEUM_GROUP is a multiple of 32; lane = lid & 31 and every exchange stays inside the +// lane's own aligned run of 32 work-items, exactly like simd_shuffle_xor inside a 32-wide Metal SIMD group and +// __shfl_xor_sync inside a CUDA warp. Control flow is uniform (no branches at all). +IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r2 = r2 ^ t_; } // 1 shfl + r3 = r3 + r2 + ((((sel >> 10u) & 1u) != 0u) ? 0x642e66dbu : 0x2cccb6cau); // 2 add + r0 = rotl_imm(r0, 19u); // 3 rotl + r7 = rotr_var(r7, r6); // 4 rotr + r7 = r7 + r4 + ((((sel >> 21u) & 1u) != 0u) ? 0xc1535555u : 0xee02465fu); // 5 add + r1 = mul_hi(r1, r7); // 6 mulhi + r4 = r4 ^ ds[r2 & mask]; // 7 load + r7 = r7 ^ ds[r4 & mask]; // 8 load + r0 = r0 ^ ds[r3 & mask]; // 9 load + r5 = r5 ^ ds[r1 & mask]; // 10 load + r1 = r1 ^ ds[r5 & mask]; // 11 load + r3 = mul_hi(r3, r5); // 12 mulhi + r1 = r1 ^ ds[r3 & mask]; // 13 load + r0 = r0 - r3; // 14 sub + r5 = r1 * r3 + r5; // 15 mad + r6 = mul_hi(r6, r1); // 16 mulhi + r5 = r5 + r2 + ((((sel >> 28u) & 1u) != 0u) ? 0x8b965b57u : 0x697b3d00u); // 17 add + r0 = mul_hi(r0, r6); // 18 mulhi + r5 = rotr_var(r5, r3); // 19 rotr + r5 = mul_hi(r5, r2); // 20 mulhi + r1 = r1 + r0 + ((((sel >> 1u) & 1u) != 0u) ? 0x6d7e8d05u : 0xebcf247au); // 21 add + r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 22 add + r1 = mul_hi(r1, r5); // 23 mulhi + r2 = r2 - r5; // 24 sub + r7 = r7 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x699ef1bbu : 0x08ffa6c7u); // 25 add + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 26 shfl + r7 = r7 + r1 + ((((sel >> 14u) & 1u) != 0u) ? 0xb4ead2fbu : 0xe60fea84u); // 27 add + r3 = r3 + r1 + ((((sel >> 6u) & 1u) != 0u) ? 0x8f30d21du : 0x65c76dabu); // 28 add + r2 = r2 ^ ds[r1 & mask]; // 29 load + r5 = r5 ^ ds[r7 & mask]; // 30 load + r2 = r2 ^ ds[r5 & mask]; // 31 load + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r1 = r1 ^ t_; } // 32 shfl + r4 = r5 * r7 + r4; // 33 mad + r4 = r4 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0xc7ce690cu : 0x0480debeu); // 34 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // 35 shfl + r7 = r7 + r1 + ((((sel >> 2u) & 1u) != 0u) ? 0xe10c2c95u : 0xc53b542eu); // 36 add + r5 = r5 ^ r7; // 37 xor + r2 = r2 | r1; // 38 or + r1 = mul_hi(r1, r0); // 39 mulhi + r6 = rotl_imm(r6, 19u); // 40 rotl + r4 = mul_hi(r4, r6); // 41 mulhi + r6 = r6 - r0; // 42 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r6 = r6 ^ t_; } // 43 shfl + r4 = r4 ^ ds[r2 & mask]; // 44 load + r1 = r1 ^ r3; // 45 xor + r7 = r7 ^ ds[r0 & mask]; // 46 load + r3 = r3 ^ ds[r1 & mask]; // 47 load + r5 = r5 * r3; // 48 mul + r1 = r1 - r5; // 49 sub + r2 = rotl_imm(r2, 8u); // 50 rotl + r1 = r1 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0x77b9bd43u : 0xa900fec4u); // 51 add + r4 = r4 ^ ds[r7 & mask]; // 52 load + r2 = r2 - r7; // 53 sub + r4 = r4 ^ r0; // 54 xor + r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 55 add + r2 = r2 ^ ds[r4 & mask]; // 56 load + r0 = r1 * r4 + r0; // 57 mad + r3 = r3 ^ ds[r5 & mask]; // 58 load + r5 = r5 | r6; // 59 or + r6 = r5 * r7 + r6; // 60 mad + r4 = rotl_imm(r4, 28u); // 61 rotl + r5 = mul_hi(r5, r0); // 62 mulhi + r3 = r3 ^ ds[r6 & mask]; // 63 load + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} + +#if IGNEUM_EXCHANGE != 0 +// Reports the sub-group size this device uses for a work-group of IGNEUM_GROUP items. host.c runs it only when the +// per-kernel query (clGetKernelSubGroupInfoKHR on igneum_hash) is unavailable; that query is preferred because a +// compiler may pick a different wave width per kernel (RDNA: wave32 or wave64). See WAVEFRONT.md. +IGNEUM_KERNEL_HASH void igneum_probe_subgroup(__global uint* out) { + if (get_local_id(0) == 0u) { out[0] = get_sub_group_size(); out[1] = get_num_sub_groups(); } +} +#endif diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cu b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cu new file mode 100644 index 00000000..c129edee --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel.cu @@ -0,0 +1,164 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// Bit-exact twin of the Metal kernel for the same seed (see proto-cuda/CHECKLIST.md and program.metal). +// Compiled ahead of time by nvcc together with proto-cuda/host.cu. No NVRTC. +#include +#include +#include "program.h" +#include "memhard.h" + +__device__ __forceinline__ uint32_t splitmix32(uint32_t x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site, so both shift amounts are in 1..31. +__device__ __forceinline__ uint32_t rotl_imm(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } +// n is masked to 0..31; the second shift amount is masked too, so n == 0 gives x. +__device__ __forceinline__ uint32_t rotr_var(uint32_t x, uint32_t n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +__device__ __forceinline__ uint32_t ds_elem(uint32_t i, uint32_t d0, uint32_t d1) { + uint32_t x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset (MEMHARD.md). One thread per cache segment; one thread per 64-byte dataset item. +// The core functions (mh_cache_segment, mh_item) are in memhard.h and are also compiled for the host. +__global__ void igneum_cache_fill(uint32_t* cache, uint32_t nSegments) { + uint32_t seg = blockIdx.x * blockDim.x + threadIdx.x; + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__global__ void igneum_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems) { + uint32_t t = blockIdx.x * blockDim.x + threadIdx.x; + if (t < nItems) { + uint32_t s[16]; + mh_item(cache, t, s); + uint32_t* d = ds + (size_t)t * 16u; + for (uint32_t i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per thread. blockDim.x is a multiple of 32; lane = threadIdx.x & 31 and every +// __shfl_xor_sync stays inside the lane's own warp, exactly like simd_shuffle_xor inside a +// 32-wide Metal SIMD group. Control flow is uniform, so the full 0xffffffff member mask is valid. +__global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask) { + uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; + uint32_t nonce = baseNonce + gid; + uint32_t r0, r1, r2, r3, r4, r5, r6, r7; + { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint32_t it = 0u; it < 8u; ++it) { + uint32_t sel = r0; + r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // 1 shfl + r3 = r3 + r2 + ((((sel >> 10u) & 1u) != 0u) ? 0x642e66dbu : 0x2cccb6cau); // 2 add + r0 = rotl_imm(r0, 19u); // 3 rotl + r7 = rotr_var(r7, r6); // 4 rotr + r7 = r7 + r4 + ((((sel >> 21u) & 1u) != 0u) ? 0xc1535555u : 0xee02465fu); // 5 add + r1 = __umulhi(r1, r7); // 6 mulhi + r4 = r4 ^ ds[r2 & mask]; // 7 load + r7 = r7 ^ ds[r4 & mask]; // 8 load + r0 = r0 ^ ds[r3 & mask]; // 9 load + r5 = r5 ^ ds[r1 & mask]; // 10 load + r1 = r1 ^ ds[r5 & mask]; // 11 load + r3 = __umulhi(r3, r5); // 12 mulhi + r1 = r1 ^ ds[r3 & mask]; // 13 load + r0 = r0 - r3; // 14 sub + r5 = r1 * r3 + r5; // 15 mad + r6 = __umulhi(r6, r1); // 16 mulhi + r5 = r5 + r2 + ((((sel >> 28u) & 1u) != 0u) ? 0x8b965b57u : 0x697b3d00u); // 17 add + r0 = __umulhi(r0, r6); // 18 mulhi + r5 = rotr_var(r5, r3); // 19 rotr + r5 = __umulhi(r5, r2); // 20 mulhi + r1 = r1 + r0 + ((((sel >> 1u) & 1u) != 0u) ? 0x6d7e8d05u : 0xebcf247au); // 21 add + r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 22 add + r1 = __umulhi(r1, r5); // 23 mulhi + r2 = r2 - r5; // 24 sub + r7 = r7 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x699ef1bbu : 0x08ffa6c7u); // 25 add + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 26 shfl + r7 = r7 + r1 + ((((sel >> 14u) & 1u) != 0u) ? 0xb4ead2fbu : 0xe60fea84u); // 27 add + r3 = r3 + r1 + ((((sel >> 6u) & 1u) != 0u) ? 0x8f30d21du : 0x65c76dabu); // 28 add + r2 = r2 ^ ds[r1 & mask]; // 29 load + r5 = r5 ^ ds[r7 & mask]; // 30 load + r2 = r2 ^ ds[r5 & mask]; // 31 load + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 32 shfl + r4 = r5 * r7 + r4; // 33 mad + r4 = r4 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0xc7ce690cu : 0x0480debeu); // 34 add + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // 35 shfl + r7 = r7 + r1 + ((((sel >> 2u) & 1u) != 0u) ? 0xe10c2c95u : 0xc53b542eu); // 36 add + r5 = r5 ^ r7; // 37 xor + r2 = r2 | r1; // 38 or + r1 = __umulhi(r1, r0); // 39 mulhi + r6 = rotl_imm(r6, 19u); // 40 rotl + r4 = __umulhi(r4, r6); // 41 mulhi + r6 = r6 - r0; // 42 sub + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl + r4 = r4 ^ ds[r2 & mask]; // 44 load + r1 = r1 ^ r3; // 45 xor + r7 = r7 ^ ds[r0 & mask]; // 46 load + r3 = r3 ^ ds[r1 & mask]; // 47 load + r5 = r5 * r3; // 48 mul + r1 = r1 - r5; // 49 sub + r2 = rotl_imm(r2, 8u); // 50 rotl + r1 = r1 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0x77b9bd43u : 0xa900fec4u); // 51 add + r4 = r4 ^ ds[r7 & mask]; // 52 load + r2 = r2 - r7; // 53 sub + r4 = r4 ^ r0; // 54 xor + r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 55 add + r2 = r2 ^ ds[r4 & mask]; // 56 load + r0 = r1 * r4 + r0; // 57 mad + r3 = r3 ^ ds[r5 & mask]; // 58 load + r5 = r5 | r6; // 59 or + r6 = r5 * r7 + r6; // 60 mad + r4 = rotl_imm(r4, 28u); // 61 rotl + r5 = __umulhi(r5, r0); // 62 mulhi + r3 = r3 ^ ds[r6 & mask]; // 63 load + } + uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint32_t hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((uint64_t)hi << 32) | (uint64_t)lo; +} + +// Host-side launch wrappers. Declared in program.h, called from host.cu. +cudaError_t igneum_launch_cache_fill(uint32_t* cache, uint32_t nSegments) { + if (nSegments == 0u) return cudaErrorInvalidValue; + uint32_t block = 256u; + uint32_t grid = (nSegments + block - 1u) / block; + igneum_cache_fill<<>>(cache, nSegments); + return cudaGetLastError(); +} + +cudaError_t igneum_launch_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems) { + if (nItems == 0u) return cudaErrorInvalidValue; + uint32_t block = 256u; + uint32_t grid = (nItems + block - 1u) / block; + igneum_build<<>>(ds, cache, nItems); + return cudaGetLastError(); +} + +cudaError_t igneum_launch_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + uint32_t nonces, uint32_t blockWarps) { + if (blockWarps == 0u || blockWarps > 32u) return cudaErrorInvalidValue; + uint32_t block = 32u * blockWarps; + if (nonces == 0u || (nonces % block) != 0u) return cudaErrorInvalidValue; + igneum_hash<<>>(ds, out, baseNonce, mask); + return cudaGetLastError(); +} + +cudaError_t igneum_hash_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps) { + cudaFuncAttributes attr; + cudaError_t e = cudaFuncGetAttributes(&attr, igneum_hash); + if (e != cudaSuccess) return e; + *numRegs = attr.numRegs; + return cudaOccupancyMaxActiveBlocksPerMultiprocessor(blocksPerSM, igneum_hash, (int)(32u * blockWarps), 0); +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cl b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cl new file mode 100644 index 00000000..73600909 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cl @@ -0,0 +1,7037 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// OpenCL C twin of the Metal kernel for the same seed (see proto-opencl/README.md, WAVEFRONT.md and program.metal). +// Built from source at runtime by proto-opencl/host.c, which passes these defines: +// IGNEUM_GROUP work-group size of igneum_hash, a multiple of 32 (default 32: one work-group = one 32-lane unit) +// IGNEUM_EXCHANGE 0 = local-memory exchange with a barrier (any device, any wave width; the default) +// 1 = sub_group_shuffle_xor (cl_khr_subgroup_shuffle), only with IGNEUM_GROUP 32 and a sub-group size of exactly 32 +// 2 = intel_sub_group_shuffle_xor (cl_intel_subgroups), same condition +// The verification unit is always 32 lanes. A 64-wide hardware wave (AMD GCN/CDNA, RDNA in wave64) runs two units; +// the exchange masks are 1, 2, 4, 8, 16, so every partner lane lies inside the lane's own aligned run of 32. +#ifndef IGNEUM_GROUP +#define IGNEUM_GROUP 32 +#endif +#ifndef IGNEUM_EXCHANGE +#define IGNEUM_EXCHANGE 0 +#endif +#ifdef __OPENCL_VERSION__ +#define IGNEUM_KERNEL_HASH __kernel __attribute__((reqd_work_group_size(IGNEUM_GROUP, 1, 1))) +#define IGNEUM_LOCAL_WORDS(name, n) __local uint name[n] +#if IGNEUM_EXCHANGE == 1 +#ifdef cl_khr_subgroups +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif +#ifdef cl_khr_subgroup_shuffle +#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable +#endif +#elif IGNEUM_EXCHANGE == 2 +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#endif +#else +// Not an OpenCL compiler: proto-opencl/emu compiles this file as C++ and supplies the built-ins and these two macros. +#include "emu_opencl.h" +#endif + +#if IGNEUM_EXCHANGE == 1 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#elif IGNEUM_EXCHANGE == 2 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = intel_sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#else +// Local-memory exchange. Two buffers of IGNEUM_GROUP words alternate (xk counts exchanges), so one barrier per +// exchange is enough: a lane can only overwrite buffer b at exchange k+2 after passing barrier k+1, and every lane +// reaches barrier k+1 only after its read of buffer b at exchange k. The partner lid ^ m stays inside the lane's +// aligned run of 32 because m < 32. Control flow is uniform, so every work-item reaches every barrier. +#define IGNEUM_SHFL_XOR(dst, a, m) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid ^ (uint)(m))]; xk += 1u; } +#define IGNEUM_BCAST0(dst, a) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid & ~31u)]; xk += 1u; } +#endif + +static inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site. OpenCL rotate() rotates left by n modulo 32. +static inline uint rotl_imm(uint x, uint n) { return rotate(x, n); } +// Right rotation by n modulo 32 as a left rotation by (32 - n) modulo 32; n == 0 gives x. +static inline uint rotr_var(uint x, uint n) { return rotate(x, (0u - n) & 31u); } +static inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 771868df4e64d6ab). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +static inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +static inline void mh_chacha_block(const uint* x, uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +static inline void mh_cache_segment(__global uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0xceed56d7u ^ prev[4]; + x[5] = 0x9ba270d2u ^ prev[5]; + x[6] = 0x82caab2du ^ prev[6]; + x[7] = 0x81ebce0eu ^ prev[7]; + x[8] = 0x12b6ecf1u ^ prev[8]; + x[9] = 0xd0f3fd7cu ^ prev[9]; + x[10] = 0xd872eefeu ^ prev[10]; + x[11] = 0xc158c7bdu ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + __global uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +static inline void mh_mixer(uint* s, uint rk) { + s[0] = (s[0] ^ (0xc6892460u + rk)) * 0xf351d601u; + s[1] = (s[1] ^ (0x25b7228au + rk)) * 0xa3bb398fu; + s[2] = (s[2] ^ (0xcd515004u + rk)) * 0xb5a09e35u; + s[3] = (s[3] ^ (0x2846527au + rk)) * 0x7509c9c1u; + s[4] = (s[4] ^ (0xa6324241u + rk)) * 0x6bbf31e9u; + s[5] = (s[5] ^ (0x36e3ec53u + rk)) * 0xfc849a79u; + s[6] = (s[6] ^ (0x82961bacu + rk)) * 0xded91851u; + s[7] = (s[7] ^ (0x0f97ba7du + rk)) * 0x8d9113d1u; + s[8] = (s[8] ^ (0xb6f921a9u + rk)) * 0x0ff15225u; + s[9] = (s[9] ^ (0x3ada24e5u + rk)) * 0x3a5bdd41u; + s[10] = (s[10] ^ (0xde20ab91u + rk)) * 0xab533435u; + s[11] = (s[11] ^ (0x5378eeb2u + rk)) * 0xe1c55ad5u; + s[12] = (s[12] ^ (0x7d161662u + rk)) * 0xe6d3bd0du; + s[13] = (s[13] ^ (0x89353cc1u + rk)) * 0x9d9ffbbdu; + s[14] = (s[14] ^ (0xb1aa03a2u + rk)) * 0xbb2a3cf3u; + s[15] = (s[15] ^ (0x788acae6u + rk)) * 0x50a7c08du; + MH_QR(s[0], s[4], s[8], s[12], 17u, 12u, 20u, 23u) MH_QR(s[1], s[5], s[9], s[13], 17u, 12u, 20u, 23u) + MH_QR(s[2], s[6], s[10], s[14], 17u, 12u, 20u, 23u) MH_QR(s[3], s[7], s[11], s[15], 17u, 12u, 20u, 23u) + MH_QR(s[0], s[5], s[10], s[15], 7u, 3u, 27u, 16u) MH_QR(s[1], s[6], s[11], s[12], 7u, 3u, 27u, 16u) + MH_QR(s[2], s[7], s[8], s[13], 7u, 3u, 27u, 16u) MH_QR(s[3], s[4], s[9], s[14], 7u, 3u, 27u, 16u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_0(uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 13u); + s[1] = mh_rotl(s[1], 23u) + s[3]; + s[15] *= (s[1] | 1u); + s[7] ^= s[15]; + s[12] -= s[7]; + s[9] *= (s[12] | 1u); + s[6] = (s[6] ^ s[9]) * 0x2735a435u; + s[14] = mh_rotl(s[14], 17u) + s[6]; + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x14ddb139u; + s[1] += s[8] + 0xca6e0e1cu; + s[6] *= (s[1] | 1u); + s[15] ^= s[6]; + s[12] ^= s[15]; + s[11] = s[11] * 0x722d4b13u + s[12]; + s[4] = mh_rotl(s[4], 18u) + s[11]; + s[2] += s[4]; + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[9] -= s[1]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x0ffea53bu; + s[8] = mh_rotl(s[8], 5u) + s[14]; + s[3] += s[8] + 0x9ed7985eu; + s[6] += s[3]; + s[4] ^= s[6] ^ 0x1dd74ad9u; + s[13] += s[4]; + s[0] -= s[13]; + s[15] *= (s[0] | 1u); + s[12] ^= s[15]; + s[11] -= s[12]; + s[14] = mh_rotl(s[14], 27u) + s[11]; + s[6] += s[14]; + s[10] += s[6] + 0x2b37904eu; + s[8] = mh_rotl(s[8], 4u) + s[10]; + s[5] *= (s[8] | 1u); + s[0] = mh_rotl(s[0] ^ s[5], 14u); + s[13] ^= s[0]; + s[12] = s[12] * 0x77e0a5d3u + s[13]; + s[1] += s[12]; + s[13] = s[13] * 0x65318e55u + s[1]; + s[15] = mh_rotl(s[15], 29u) + s[13]; + s[13] -= s[15]; + s[12] = s[12] * 0xc4a25397u + s[13]; + s[0] ^= s[12]; + s[11] += s[0]; + s[5] = (s[5] ^ s[11]) * 0xeeadd5a3u; + s[15] = (s[15] ^ s[5]) * 0x731c68a3u; + s[0] += (s[15] | s[8]); + s[4] = s[4] * 0x51fb9437u + s[0]; + s[10] *= (s[4] | 1u); + s[12] *= (s[10] | 1u); + s[0] ^= (s[12] & s[8]); + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0x5eeca4fbu; + s[14] = mh_rotl(s[14] ^ s[0], 16u); + s[1] *= (s[14] | 1u); + s[3] *= (s[1] | 1u); + s[12] ^= s[3] ^ 0x705ffae7u; + s[11] ^= s[12] ^ 0x55f159afu; + s[10] = (s[10] ^ s[11]) * 0x631a1b7fu; + s[11] = mh_rotl(s[11], 17u) + s[10]; + s[7] += s[11]; + s[9] = mh_rotl(s[9], 27u) + s[7]; + s[12] ^= (s[9] & s[15]); + s[8] = mh_rotl(s[8], 22u) + s[12]; + s[9] ^= s[8]; + s[12] ^= (s[9] & s[5]); + s[7] += s[12]; + s[10] = mh_rotl(s[10], 14u) + s[7]; + s[15] += (s[10] | s[0]); + s[4] ^= s[15]; + s[5] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] ^= s[11]; + s[1] = mh_rotl(s[1], 3u) + s[14]; + s[11] *= (s[1] | 1u); + s[9] *= (s[11] | 1u); + s[3] = mh_rotl(s[3] ^ s[9], 2u); + s[12] = mh_rotl(s[12], 11u) + s[3]; + s[4] ^= s[12]; + s[12] *= (s[4] | 1u); + s[14] += s[12]; + s[8] = mh_rotl(s[8], 14u) + s[14]; + s[9] = mh_rotl(s[9] ^ s[8], 14u); + s[12] += s[9]; + s[13] = mh_rotl(s[13], 6u) + s[12]; + s[10] ^= s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 11u); + s[13] ^= s[12]; + s[2] += s[13]; + s[10] ^= s[2]; + s[15] += s[10] + 0x1634a71eu; + s[6] ^= s[15] ^ 0xd749a601u; + s[15] = (s[15] ^ s[6]) * 0x600e3ecbu; + s[12] += s[15]; + s[7] = s[7] * 0x0149e3ebu + s[12]; + s[15] += s[7]; + s[10] += s[15]; + s[13] = (s[13] ^ s[10]) * 0xa7c503e7u; + s[3] = mh_rotl(s[3] ^ s[13], 5u); + s[13] += s[3]; + s[14] ^= (s[13] & s[11]); + s[13] *= (s[14] | 1u); + s[8] ^= s[13]; + s[9] += (s[8] | s[5]); + s[12] = mh_rotl(s[12] ^ s[9], 29u); + s[15] ^= s[12] ^ 0x990f53b6u; + s[5] = mh_rotl(s[5], 30u) + s[15]; + s[3] -= s[5]; + s[11] += s[3]; + s[0] += s[11]; + s[10] *= (s[0] | 1u); + s[2] *= (s[10] | 1u); + s[12] ^= s[2]; + s[13] *= (s[12] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[1] ^= s[4] ^ 0xcd3069e4u; + s[0] = mh_rotl(s[0] ^ s[1], 3u); + s[15] ^= s[0] ^ 0x8c69c78du; + s[10] = mh_rotl(s[10], 21u) + s[15]; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 31u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[5] += s[11]; + s[13] ^= (s[5] & s[8]); + s[12] = (s[12] ^ s[13]) * 0x831edbe1u; + s[0] = mh_rotl(s[0], 24u) + s[12]; + s[11] ^= s[0]; + s[9] -= s[11]; + s[7] ^= s[9]; + s[8] = (s[8] ^ s[7]) * 0xc7e1cfddu; + s[12] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[12], 28u); + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[2] += s[3]; + s[9] += s[2]; + s[10] = mh_rotl(s[10], 21u) + s[9]; + s[13] = mh_rotl(s[13], 14u) + s[10]; + s[15] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 1u); + s[11] *= (s[7] | 1u); + s[9] += (s[11] | s[5]); + s[15] += s[9]; + s[10] += s[15] + 0xba60c9ecu; + s[9] = (s[9] ^ s[10]) * 0xd025f22du; + s[6] *= (s[9] | 1u); + s[0] *= (s[6] | 1u); + s[15] -= s[0]; + s[10] += s[15]; + s[0] += s[10] + 0xfb2e7c45u; + s[6] += s[0]; + s[10] = s[10] * 0xa719d3b5u + s[6]; + s[3] -= s[10]; + s[10] = s[10] * 0x4567f515u + s[3]; + s[6] = mh_rotl(s[6] ^ s[10], 3u); + s[15] ^= s[6]; + s[5] *= (s[15] | 1u); + s[9] += s[5] + 0x7add03edu; + s[8] += s[9] + 0x200dba17u; + s[15] += s[8]; + s[10] += s[15]; + s[0] -= s[10]; + s[8] ^= (s[0] & s[14]); + s[14] *= (s[8] | 1u); + s[7] += (s[14] | s[4]); + s[10] ^= s[7] ^ 0xfd92bbdeu; + s[6] += s[10] + 0xdfa6bf99u; + s[15] += s[6]; + s[0] -= s[15]; + s[13] *= (s[0] | 1u); + s[10] += s[13]; + s[14] = mh_rotl(s[14], 30u) + s[10]; + s[7] = mh_rotl(s[7] ^ s[14], 26u); + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[1] = mh_rotl(s[1] ^ s[4], 5u); + s[4] ^= s[1]; + s[8] ^= s[4] ^ 0x246709cfu; + s[4] += s[8]; + s[1] += s[4]; + s[0] += (s[1] | s[3]); + s[13] *= (s[0] | 1u); + s[3] -= s[13]; + s[6] += (s[3] | s[8]); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] += s[10]; + s[10] -= s[14]; + s[11] ^= (s[10] & s[2]); + s[13] ^= s[11]; + s[9] += (s[13] | s[15]); + s[4] += s[9]; + s[3] += s[4]; + s[14] -= s[3]; + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[8] += s[7]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[7] ^= s[3] ^ 0x139d83e8u; + s[6] += s[7]; + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[14] = mh_rotl(s[14] ^ s[4], 17u); + s[13] = mh_rotl(s[13], 22u) + s[14]; + s[8] += s[13]; + s[0] ^= s[8]; + s[8] ^= s[0]; + s[7] = (s[7] ^ s[8]) * 0x7d8b96a1u; + s[11] -= s[7]; + s[7] *= (s[11] | 1u); + s[13] += s[7] + 0x3dfedaadu; + s[6] = (s[6] ^ s[13]) * 0x02bf39b1u; + s[15] ^= s[6]; + s[10] += s[15]; + s[4] = mh_rotl(s[4], 24u) + s[10]; + s[6] = s[6] * 0xa211b535u + s[4]; + s[9] += s[6] + 0x6d1c8ec2u; + s[14] ^= s[9]; + s[1] ^= (s[14] & s[8]); + s[9] *= (s[1] | 1u); + s[11] *= (s[9] | 1u); + s[6] = mh_rotl(s[6] ^ s[11], 9u); + s[14] *= (s[6] | 1u); + s[5] -= s[14]; + s[3] *= (s[5] | 1u); + s[8] += s[3]; + s[15] += s[8]; + s[13] += s[15] + 0x4f61883fu; + s[15] = mh_rotl(s[15] ^ s[13], 17u); + s[0] += (s[15] | s[11]); + s[15] += s[0]; + s[2] -= s[15]; + s[8] -= s[2]; + s[5] *= (s[8] | 1u); + s[1] = (s[1] ^ s[5]) * 0x65420b47u; + s[12] = s[12] * 0x42ad8bf1u + s[1]; + s[15] += (s[12] | s[2]); + s[11] += s[15]; + s[7] = (s[7] ^ s[11]) * 0x24e3746bu; + s[1] ^= s[7]; + s[7] = mh_rotl(s[7], 31u) + s[1]; + s[0] ^= (s[7] & s[1]); + s[15] ^= s[0] ^ 0x47313c44u; + s[1] += s[15]; + s[11] ^= s[1]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[9] += s[12]; + s[2] -= s[9]; + s[1] = (s[1] ^ s[2]) * 0x9c164e0du; + s[10] += s[1]; + s[0] ^= s[10]; + s[6] ^= s[0]; + s[1] += s[6]; + s[15] = mh_rotl(s[15] ^ s[1], 4u); + s[14] -= s[15]; + s[7] ^= s[14]; + s[8] ^= s[7] ^ 0x2b5aacd6u; + s[13] += s[8]; + s[6] *= (s[13] | 1u); + s[1] = mh_rotl(s[1], 9u) + s[6]; + s[12] += (s[1] | s[7]); + s[8] ^= s[12]; + s[9] += (s[8] | s[11]); + s[14] += s[9] + 0x93a636aau; + s[13] -= s[14]; + s[0] = (s[0] ^ s[13]) * 0x0185d1f9u; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[9] ^= s[3]; + s[12] *= (s[9] | 1u); + s[4] += s[12]; + s[14] = mh_rotl(s[14] ^ s[4], 12u); + s[15] += s[14]; + s[0] = mh_rotl(s[0] ^ s[15], 11u); + s[5] -= s[0]; + s[9] -= s[5]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[13] -= s[5]; + s[2] += (s[13] | s[6]); + s[12] *= (s[2] | 1u); + s[5] = mh_rotl(s[5], 14u) + s[12]; + s[14] = s[14] * 0x37190e5fu + s[5]; + s[2] -= s[14]; + s[1] = mh_rotl(s[1], 25u) + s[2]; + s[15] += s[1]; + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[7] = mh_rotl(s[7], 15u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 13u); + s[5] *= (s[9] | 1u); + s[6] -= s[5]; + s[14] ^= s[6] ^ 0xf476d15fu; + s[13] ^= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[13] = mh_rotl(s[13] ^ s[10], 29u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[7] ^= s[4]; + s[10] = (s[10] ^ s[7]) * 0xa943fa7fu; + s[12] ^= s[10]; + s[3] = mh_rotl(s[3], 8u) + s[12]; + s[14] = (s[14] ^ s[3]) * 0x09fb17fdu; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] ^= s[7]; + s[7] ^= s[14]; + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[11] += s[8]; + s[2] += (s[11] | s[14]); + s[15] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 26u) + s[15]; + s[2] *= (s[3] | 1u); + s[4] -= s[2]; + s[3] += (s[4] | s[14]); + s[10] ^= s[3]; + s[0] -= s[10]; + s[13] ^= (s[0] & s[6]); + s[0] *= (s[13] | 1u); + s[5] *= (s[0] | 1u); + s[9] = mh_rotl(s[9], 12u) + s[5]; + s[3] ^= s[9]; + s[15] ^= (s[3] & s[1]); + s[8] = s[8] * 0x98abbf3du + s[15]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0x50468cebu; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[11] ^= s[1]; + s[15] = mh_rotl(s[15] ^ s[11], 9u); + s[13] = mh_rotl(s[13], 28u) + s[15]; + s[7] += s[13]; + s[14] = mh_rotl(s[14], 20u) + s[7]; + s[11] = (s[11] ^ s[14]) * 0x5091caadu; + s[7] ^= s[11] ^ 0x269d33e2u; + s[14] ^= s[7]; + s[5] = s[5] * 0x30d291edu + s[14]; + s[9] ^= s[5]; + s[10] += s[9]; + s[0] ^= s[10]; + s[7] *= (s[0] | 1u); + s[14] ^= s[7]; + s[2] -= s[14]; + s[13] += s[2]; + s[8] += s[13]; + s[12] ^= (s[8] & s[0]); + s[7] = mh_rotl(s[7], 8u) + s[12]; + s[0] = (s[0] ^ s[7]) * 0x1cae2a31u; + s[6] = mh_rotl(s[6], 29u) + s[0]; + s[10] ^= s[6] ^ 0xb9ccdbfdu; + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[1] *= (s[10] | 1u); + s[8] ^= (s[1] & s[4]); + s[4] ^= s[8] ^ 0x53da0b8au; + s[15] *= (s[4] | 1u); + s[13] -= s[15]; + s[1] += (s[13] | s[0]); + s[6] += (s[1] | s[4]); + s[4] ^= s[6]; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[6] -= s[1]; + s[5] += (s[6] | s[12]); + s[12] ^= s[5]; + s[15] = (s[15] ^ s[12]) * 0x458c7163u; + s[13] -= s[15]; + s[6] = mh_rotl(s[6] ^ s[13], 20u); + s[2] = (s[2] ^ s[6]) * 0x9c39a383u; + s[0] += s[2]; + s[12] ^= s[0] ^ 0x7cc2033au; + s[13] = mh_rotl(s[13] ^ s[12], 12u); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[15] = (s[15] ^ s[6]) * 0x0c9eb2cfu; + s[8] *= (s[15] | 1u); + s[2] += s[8]; + s[5] = mh_rotl(s[5], 19u) + s[2]; + s[8] *= (s[5] | 1u); + s[0] += s[8]; + s[6] = s[6] * 0x79f7c2dfu + s[0]; + s[14] += s[6]; + s[11] = s[11] * 0x5e817e5bu + s[14]; + s[14] ^= s[11]; + s[4] ^= s[14]; + s[9] += s[4] + 0xd46a416fu; + s[14] = s[14] * 0xa4a2923fu + s[9]; + s[7] *= (s[14] | 1u); + s[4] = (s[4] ^ s[7]) * 0x90bc8fcdu; + s[14] += s[4]; + s[7] = (s[7] ^ s[14]) * 0xf112f8f5u; + s[0] *= (s[7] | 1u); + s[12] -= s[0]; + s[3] ^= s[12]; + s[9] ^= s[3]; + s[5] = (s[5] ^ s[9]) * 0x24022a1du; + s[13] = mh_rotl(s[13], 25u) + s[5]; + s[1] *= (s[13] | 1u); + s[10] += s[1]; + s[12] = (s[12] ^ s[10]) * 0xa16c00d1u; + s[6] -= s[12]; + s[7] ^= s[6]; + s[10] ^= s[7] ^ 0x58615cc4u; + s[4] += s[10]; + s[3] *= (s[4] | 1u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[0] += s[4]; + s[3] ^= s[0]; + s[1] = mh_rotl(s[1], 20u) + s[3]; + s[13] ^= s[1] ^ 0x244eb2e2u; + s[0] ^= s[13] ^ 0x2273d5c0u; + s[15] ^= s[0]; + s[13] -= s[15]; + s[2] ^= s[13] ^ 0x7c995a78u; + s[4] -= s[2]; + s[14] ^= s[4]; + s[0] = mh_rotl(s[0], 29u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[0], 1u); + s[2] += (s[14] | s[1]); + s[10] += (s[2] | s[12]); + s[12] ^= s[10]; + s[6] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 30u) + s[6]; + s[12] ^= s[9]; + s[14] -= s[12]; + s[11] += s[14]; + s[10] += (s[11] | s[6]); + s[2] += (s[10] | s[5]); + s[1] = mh_rotl(s[1] ^ s[2], 29u); + s[6] = s[6] * 0xd99bd00bu + s[1]; + s[1] = (s[1] ^ s[6]) * 0xe0d965a7u; + s[7] += s[1] + 0x51b2428bu; + s[15] ^= s[7] ^ 0x50b8787bu; + s[0] += s[15] + 0xfe2752f1u; + s[4] += s[0] + 0x0e368287u; + s[1] += s[4]; + s[6] ^= s[1] ^ 0xe35b392eu; + s[2] = mh_rotl(s[2], 23u) + s[6]; + s[9] ^= s[2]; + s[15] = s[15] * 0xd6a40fabu + s[9]; + s[5] -= s[15]; + s[2] += s[5]; + s[6] = mh_rotl(s[6] ^ s[2], 8u); + s[5] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[4] += s[13] + 0x53640c05u; + s[0] = mh_rotl(s[0] ^ s[4], 7u); + s[13] ^= s[0]; + s[9] *= (s[13] | 1u); + s[0] ^= s[9]; + s[10] = s[10] * 0x843679c9u + s[0]; + s[6] = mh_rotl(s[6] ^ s[10], 29u); + s[14] = mh_rotl(s[14] ^ s[6], 12u); + s[1] += s[14]; + s[13] = s[13] * 0xa749a1b5u + s[1]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[2] = (s[2] ^ s[12]) * 0x5b1ce1c1u; + s[15] *= (s[2] | 1u); + s[12] ^= (s[15] & s[9]); + s[0] = mh_rotl(s[0] ^ s[12], 25u); + s[14] ^= s[0]; + s[3] *= (s[14] | 1u); + s[8] ^= s[3] ^ 0x6ca032cbu; + s[4] -= s[8]; + s[12] ^= s[4] ^ 0x7728b3cbu; + s[7] += (s[12] | s[8]); + s[5] = s[5] * 0x0ae2c6cdu + s[7]; + s[0] += s[5]; + s[9] = mh_rotl(s[9], 24u) + s[0]; + s[1] -= s[9]; + s[11] ^= s[1] ^ 0xf5da2550u; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[3] += s[8] + 0xa4fe9e4bu; + s[14] *= (s[3] | 1u); + s[6] = (s[6] ^ s[14]) * 0xbd9356a9u; + s[12] = mh_rotl(s[12] ^ s[6], 7u); + s[7] = (s[7] ^ s[12]) * 0x875f73bfu; + s[1] -= s[7]; + s[14] = (s[14] ^ s[1]) * 0x1e7b97f7u; + s[6] = s[6] * 0x577deaddu + s[14]; + s[13] ^= s[6]; + s[4] *= (s[13] | 1u); + s[3] ^= s[4]; + s[15] ^= s[3] ^ 0x28e94074u; + s[0] = (s[0] ^ s[15]) * 0x6b8272cdu; + s[8] *= (s[0] | 1u); + s[3] ^= s[8]; + s[0] = s[0] * 0x0b665f15u + s[3]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 3u) + s[7]; + s[4] += s[14]; + s[12] = mh_rotl(s[12], 23u) + s[4]; + s[15] = mh_rotl(s[15], 31u) + s[12]; + s[8] += s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[1] += (s[4] | s[8]); + s[5] += s[1]; + s[9] += s[5]; + s[12] += s[9]; + s[1] = mh_rotl(s[1], 13u) + s[12]; + s[2] *= (s[1] | 1u); + s[4] -= s[2]; + s[11] = mh_rotl(s[11], 31u) + s[4]; + s[2] = mh_rotl(s[2], 2u) + s[11]; + s[7] += s[2] + 0x9a35b39au; + s[6] += (s[7] | s[13]); + s[0] *= (s[6] | 1u); + s[9] += (s[0] | s[8]); + s[14] = mh_rotl(s[14], 25u) + s[9]; + s[15] = mh_rotl(s[15], 4u) + s[14]; + s[6] ^= s[15]; + s[12] ^= s[6]; + s[10] += s[12] + 0x5cb2267au; + s[1] += s[10]; + s[15] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[15], 28u); + s[6] = mh_rotl(s[6], 19u) + s[13]; + s[3] += s[6] + 0xd7c31b8du; + s[14] = s[14] * 0x3b0ab799u + s[3]; + s[4] += s[14] + 0x3536b1f6u; + s[2] -= s[4]; + s[12] += (s[2] | s[11]); + s[11] ^= s[12] ^ 0xbf42c333u; + s[3] = (s[3] ^ s[11]) * 0xde9b7ca9u; + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[3] = mh_rotl(s[3] ^ s[5], 29u); + s[15] = mh_rotl(s[15] ^ s[3], 4u); + s[5] ^= s[15]; + s[14] ^= (s[5] & s[6]); + s[8] += (s[14] | s[0]); + s[12] = mh_rotl(s[12], 17u) + s[8]; + s[1] ^= s[12]; + s[10] = mh_rotl(s[10] ^ s[1], 26u); + s[13] = mh_rotl(s[13], 15u) + s[10]; + s[10] += s[13]; + s[12] -= s[10]; + s[4] ^= s[12] ^ 0xc9739849u; + s[2] ^= s[4] ^ 0x31699b20u; + s[12] += s[2]; + s[15] += s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[11] -= s[9]; + s[0] = mh_rotl(s[0] ^ s[11], 6u); + s[12] ^= (s[0] & s[7]); + s[14] ^= s[12] ^ 0x9419731fu; + s[7] = (s[7] ^ s[14]) * 0x394edfa7u; + s[11] = mh_rotl(s[11] ^ s[7], 8u); + s[13] += s[11]; + s[14] = (s[14] ^ s[13]) * 0xd8bdcc5bu; + s[8] += s[14]; + s[1] ^= s[8] ^ 0x7c3166e1u; + s[9] ^= s[1]; + s[2] *= (s[9] | 1u); + s[3] = mh_rotl(s[3], 25u) + s[2]; + s[5] += s[3]; + s[8] = (s[8] ^ s[5]) * 0x40545eedu; + s[7] ^= s[8]; + s[4] = (s[4] ^ s[7]) * 0x968dc0c3u; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[10] = mh_rotl(s[10], 20u) + s[1]; + s[1] ^= (s[10] & s[5]); + s[5] -= s[1]; + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[12] -= s[9]; + s[5] = s[5] * 0x2fa421c3u + s[12]; + s[0] += s[5] + 0xd84eb599u; + s[14] ^= s[0]; + s[12] += s[14] + 0x9fa50493u; + s[3] = (s[3] ^ s[12]) * 0x4d23b04du; + s[10] = s[10] * 0x78de01f5u + s[3]; + s[0] *= (s[10] | 1u); + s[3] += s[0]; + s[1] ^= s[3] ^ 0x3cb60603u; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[10] ^= (s[12] & s[1]); + s[2] *= (s[10] | 1u); + s[8] += s[2]; + s[13] -= s[8]; + s[2] *= (s[13] | 1u); + s[4] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 7u) + s[4]; + s[15] -= s[7]; + s[12] *= (s[15] | 1u); + s[1] ^= s[12]; + s[5] -= s[1]; + s[14] += s[5] + 0x36981c70u; + s[4] ^= s[14] ^ 0x71a79181u; + s[6] += s[4]; + s[8] ^= s[6]; + s[7] ^= s[8]; + s[14] ^= s[7]; + s[7] = (s[7] ^ s[14]) * 0x097a3803u; + s[4] *= (s[7] | 1u); + s[11] ^= (s[4] & s[10]); + s[4] += s[11]; + s[7] = (s[7] ^ s[4]) * 0x85738709u; + s[3] = mh_rotl(s[3] ^ s[7], 11u); + s[10] = mh_rotl(s[10], 10u) + s[3]; + s[2] += (s[10] | s[9]); + s[10] = (s[10] ^ s[2]) * 0x94c5048bu; + s[15] += s[10]; + s[8] += s[15] + 0x0b5cc6efu; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[14] = mh_rotl(s[14] ^ s[5], 25u); + s[3] ^= s[14] ^ 0x111815f3u; + s[8] += s[3]; + s[7] ^= s[8]; + s[11] ^= s[7] ^ 0x4e2582d7u; + s[9] += (s[11] | s[8]); + s[14] ^= s[9]; + s[7] -= s[14]; + s[8] = mh_rotl(s[8], 9u) + s[7]; + s[4] = (s[4] ^ s[8]) * 0xaac84b51u; + s[15] ^= s[4]; + s[1] = mh_rotl(s[1] ^ s[15], 3u); + s[7] = mh_rotl(s[7], 7u) + s[1]; + s[0] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[11] += s[2] + 0x98edfcf5u; + s[6] += s[11]; + s[2] = (s[2] ^ s[6]) * 0xa136e64du; + s[12] *= (s[2] | 1u); + s[8] = (s[8] ^ s[12]) * 0xce39a005u; + s[3] += s[8]; + s[7] ^= s[3]; + s[2] = mh_rotl(s[2] ^ s[7], 6u); + s[10] = mh_rotl(s[10] ^ s[2], 19u); + s[7] -= s[10]; + s[0] += s[7]; + s[7] = (s[7] ^ s[0]) * 0xcb29f5cbu; + s[4] *= (s[7] | 1u); + s[12] += s[4] + 0x4a2ccb18u; + s[8] = mh_rotl(s[8] ^ s[12], 28u); + s[2] *= (s[8] | 1u); + s[13] *= (s[2] | 1u); + s[3] = (s[3] ^ s[13]) * 0x8e193255u; + s[10] += s[3]; + s[8] += s[10]; + s[14] ^= (s[8] & s[6]); + s[12] ^= s[14]; + s[9] = (s[9] ^ s[12]) * 0x5b862b41u; + s[1] += s[9]; + s[10] ^= s[1] ^ 0xa652e937u; + s[0] = mh_rotl(s[0], 21u) + s[10]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[14] = (s[14] ^ s[12]) * 0x301b4ff9u; + s[13] = s[13] * 0x12fb71b3u + s[14]; + s[6] = mh_rotl(s[6] ^ s[13], 2u); + s[12] -= s[6]; + s[0] ^= s[12]; + s[11] = mh_rotl(s[11], 9u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[11], 17u); + s[12] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[12], 9u); + s[2] += s[14]; + s[4] ^= s[2]; + s[15] -= s[4]; + s[11] -= s[15]; + s[0] = s[0] * 0x9ae119bfu + s[11]; + s[14] ^= s[0]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[7] *= (s[8] | 1u); + s[10] -= s[7]; + s[5] -= s[10]; + s[2] += s[5] + 0xbb07e4b1u; + s[8] ^= s[2]; + s[9] += s[8]; + s[5] ^= s[9]; + s[1] = (s[1] ^ s[5]) * 0x350b4999u; + s[4] += s[1]; + s[9] = mh_rotl(s[9] ^ s[4], 27u); + s[6] = (s[6] ^ s[9]) * 0x367cc161u; + s[9] -= s[6]; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[8] ^= s[0] ^ 0x75d9afc5u; + s[14] = mh_rotl(s[14] ^ s[8], 10u); + s[7] += s[14] + 0x1912ec89u; + s[10] += (s[7] | s[4]); + s[0] -= s[10]; + s[3] += s[0]; + s[6] -= s[3]; + s[12] = (s[12] ^ s[6]) * 0x4c6c192du; + s[13] += (s[12] | s[5]); + s[3] = mh_rotl(s[3] ^ s[13], 25u); + s[13] = mh_rotl(s[13], 22u) + s[3]; + s[0] += s[13]; + s[12] -= s[0]; + s[10] ^= (s[12] & s[3]); + s[6] += s[10]; + s[2] = mh_rotl(s[2] ^ s[6], 19u); + s[6] -= s[2]; + s[9] += s[6]; + s[10] = s[10] * 0x6d659893u + s[9]; + s[11] ^= s[10]; + s[9] = (s[9] ^ s[11]) * 0x63085b93u; + s[4] ^= s[9] ^ 0xfa7139dbu; + s[11] = mh_rotl(s[11] ^ s[4], 31u); + s[4] -= s[11]; + s[10] += s[4]; + s[14] += s[10]; + s[9] = s[9] * 0x3564c517u + s[14]; + s[13] ^= s[9]; + s[4] += s[13]; + s[7] += s[4]; + s[13] = mh_rotl(s[13] ^ s[7], 5u); + s[6] ^= s[13]; + s[7] ^= s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 25u); + s[4] -= s[8]; + s[0] *= (s[4] | 1u); + s[4] *= (s[0] | 1u); + s[8] += s[4]; + s[2] *= (s[8] | 1u); + s[6] += s[2] + 0xbfdaf7b1u; + s[9] ^= s[6]; + s[1] = (s[1] ^ s[9]) * 0x3c5c1b5bu; + s[6] -= s[1]; + s[4] = mh_rotl(s[4], 11u) + s[6]; + s[3] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[3]; + s[8] = mh_rotl(s[8], 19u) + s[0]; + s[12] = (s[12] ^ s[8]) * 0x25e88231u; + s[0] -= s[12]; + s[4] ^= (s[0] & s[2]); + s[9] ^= (s[4] & s[6]); + s[5] = (s[5] ^ s[9]) * 0x3c0d5df5u; + s[6] += s[5]; + s[2] -= s[6]; + s[12] ^= s[2]; + s[1] += s[12] + 0x4dc4b094u; + s[10] ^= s[1]; + s[6] += s[10]; + s[7] += s[6] + 0x43a99a33u; + s[6] = s[6] * 0xdee0e37fu + s[7]; + s[12] = (s[12] ^ s[6]) * 0xc8a25e85u; + s[1] += (s[12] | s[3]); + s[12] ^= s[1]; + s[15] += s[12]; + s[4] = mh_rotl(s[4] ^ s[15], 17u); +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_1(uint* s) { + s[1] += s[0]; + s[3] += s[1] + 0xad481039u; + s[11] += (s[3] | s[2]); + s[1] ^= (s[11] & s[12]); + s[14] -= s[1]; + s[10] += s[14] + 0x55885317u; + s[4] -= s[10]; + s[15] = mh_rotl(s[15] ^ s[4], 4u); + s[6] += s[15]; + s[13] = mh_rotl(s[13] ^ s[6], 20u); + s[11] = (s[11] ^ s[13]) * 0xff0504adu; + s[1] = (s[1] ^ s[11]) * 0x250dc94bu; + s[15] += s[1]; + s[12] *= (s[15] | 1u); + s[7] += s[12]; + s[8] ^= s[7]; + s[11] ^= (s[8] & s[7]); + s[4] = (s[4] ^ s[11]) * 0xcdf53d85u; + s[10] = (s[10] ^ s[4]) * 0xee957d9fu; + s[9] = (s[9] ^ s[10]) * 0x306403a5u; + s[7] -= s[9]; + s[12] ^= s[7]; + s[15] *= (s[12] | 1u); + s[2] -= s[15]; + s[11] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 29u); + s[11] += s[8] + 0x053c715du; + s[0] = (s[0] ^ s[11]) * 0x6e7f6f63u; + s[5] = mh_rotl(s[5] ^ s[0], 4u); + s[8] = (s[8] ^ s[5]) * 0xec01af93u; + s[13] = s[13] * 0x0c236ed3u + s[8]; + s[3] *= (s[13] | 1u); + s[9] ^= (s[3] & s[7]); + s[5] ^= s[9]; + s[12] += s[5]; + s[6] += s[12]; + s[3] -= s[6]; + s[13] *= (s[3] | 1u); + s[12] ^= (s[13] & s[15]); + s[3] = mh_rotl(s[3] ^ s[12], 11u); + s[0] = mh_rotl(s[0] ^ s[3], 22u); + s[9] += s[0] + 0x6379358cu; + s[8] ^= s[9]; + s[2] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 1u) + s[2]; + s[4] += s[9] + 0xc0eff105u; + s[10] ^= s[4]; + s[3] *= (s[10] | 1u); + s[11] += s[3]; + s[9] -= s[11]; + s[7] += s[9]; + s[9] -= s[7]; + s[8] = (s[8] ^ s[9]) * 0x820df9e3u; + s[2] = (s[2] ^ s[8]) * 0xe294988du; + s[7] = mh_rotl(s[7] ^ s[2], 20u); + s[6] += s[7]; + s[15] ^= s[6]; + s[9] *= (s[15] | 1u); + s[14] = mh_rotl(s[14] ^ s[9], 27u); + s[4] -= s[14]; + s[10] ^= s[4] ^ 0xea83d71fu; + s[3] = mh_rotl(s[3] ^ s[10], 23u); + s[10] += s[3]; + s[8] *= (s[10] | 1u); + s[1] ^= (s[8] & s[4]); + s[2] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[10] ^= s[14]; + s[14] += s[10]; + s[9] -= s[14]; + s[11] = (s[11] ^ s[9]) * 0xa98b9719u; + s[3] ^= s[11]; + s[5] = mh_rotl(s[5], 11u) + s[3]; + s[8] = (s[8] ^ s[5]) * 0x390f56e7u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[15] *= (s[10] | 1u); + s[1] = mh_rotl(s[1], 26u) + s[15]; + s[13] += (s[1] | s[15]); + s[10] = mh_rotl(s[10] ^ s[13], 17u); + s[1] -= s[10]; + s[15] -= s[1]; + s[4] += (s[15] | s[7]); + s[2] ^= s[4]; + s[0] ^= s[2] ^ 0x6f973e2fu; + s[3] = mh_rotl(s[3] ^ s[0], 29u); + s[4] = (s[4] ^ s[3]) * 0x0b66808fu; + s[3] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 12u) + s[3]; + s[10] *= (s[15] | 1u); + s[7] = (s[7] ^ s[10]) * 0x748e238bu; + s[14] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 21u); + s[15] *= (s[5] | 1u); + s[8] ^= s[15]; + s[7] ^= s[8] ^ 0x905950c7u; + s[8] ^= s[7]; + s[2] += s[8] + 0x28a71f71u; + s[9] += (s[2] | s[6]); + s[14] ^= (s[9] & s[10]); + s[13] ^= s[14] ^ 0x4778ae11u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[15] += s[0]; + s[14] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[14], 5u); + s[2] -= s[5]; + s[13] = mh_rotl(s[13], 18u) + s[2]; + s[10] -= s[13]; + s[9] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[9], 2u); + s[6] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[3] ^= s[2] ^ 0x3ded9adbu; + s[10] = s[10] * 0x4a716aafu + s[3]; + s[3] ^= s[10]; + s[12] = mh_rotl(s[12] ^ s[3], 16u); + s[3] += s[12]; + s[4] ^= s[3]; + s[13] ^= s[4]; + s[3] ^= s[13] ^ 0x244807b5u; + s[6] = s[6] * 0x3b67fdabu + s[3]; + s[14] = mh_rotl(s[14], 19u) + s[6]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] += s[8] + 0x283e5272u; + s[6] = mh_rotl(s[6], 17u) + s[4]; + s[4] ^= (s[6] & s[15]); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[9] = s[9] * 0x24d40dcbu + s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 22u); + s[3] += s[15]; + s[12] += s[3]; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 18u); + s[10] ^= s[15]; + s[14] += (s[10] | s[2]); + s[10] += s[14]; + s[2] = (s[2] ^ s[10]) * 0xbfbdab53u; + s[4] += s[2]; + s[8] += s[4] + 0x229e9450u; + s[2] ^= s[8]; + s[13] ^= s[2] ^ 0xd069b71au; + s[1] ^= s[13]; + s[14] = mh_rotl(s[14], 5u) + s[1]; + s[11] = mh_rotl(s[11], 11u) + s[14]; + s[2] ^= s[11]; + s[1] ^= s[2] ^ 0x87a0df98u; + s[3] ^= s[1] ^ 0x4012f8c8u; + s[10] ^= s[3]; + s[8] *= (s[10] | 1u); + s[3] += (s[8] | s[1]); + s[0] = mh_rotl(s[0], 24u) + s[3]; + s[10] += s[0] + 0x838435e8u; + s[3] = (s[3] ^ s[10]) * 0xd8ccc2b9u; + s[7] ^= s[3] ^ 0xa58f06ddu; + s[2] ^= s[7]; + s[0] += s[2]; + s[12] ^= s[0]; + s[6] ^= s[12]; + s[7] += s[6]; + s[12] = mh_rotl(s[12] ^ s[7], 25u); + s[4] ^= s[12]; + s[0] += (s[4] | s[5]); + s[11] *= (s[0] | 1u); + s[13] += s[11]; + s[15] = (s[15] ^ s[13]) * 0x49c15b43u; + s[10] = mh_rotl(s[10], 25u) + s[15]; + s[14] = mh_rotl(s[14] ^ s[10], 11u); + s[6] = mh_rotl(s[6], 28u) + s[14]; + s[5] *= (s[6] | 1u); + s[12] *= (s[5] | 1u); + s[3] *= (s[12] | 1u); + s[10] ^= s[3]; + s[15] ^= s[10]; + s[12] ^= s[15]; + s[6] ^= (s[12] & s[7]); + s[14] *= (s[6] | 1u); + s[12] ^= s[14] ^ 0xf5bafba8u; + s[15] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[15]; + s[9] ^= s[5]; + s[12] = mh_rotl(s[12], 6u) + s[9]; + s[10] ^= s[12]; + s[3] = (s[3] ^ s[10]) * 0x38f1a685u; + s[4] = s[4] * 0xcb7e5d23u + s[3]; + s[5] += s[4]; + s[10] = mh_rotl(s[10], 15u) + s[5]; + s[2] *= (s[10] | 1u); + s[12] -= s[2]; + s[7] ^= s[12]; + s[11] *= (s[7] | 1u); + s[6] = (s[6] ^ s[11]) * 0x72fff2bfu; + s[9] = mh_rotl(s[9], 9u) + s[6]; + s[11] *= (s[9] | 1u); + s[4] = mh_rotl(s[4] ^ s[11], 5u); + s[15] *= (s[4] | 1u); + s[13] = (s[13] ^ s[15]) * 0x137c61d9u; + s[9] += s[13]; + s[12] += (s[9] | s[8]); + s[7] = (s[7] ^ s[12]) * 0x60952fddu; + s[10] = mh_rotl(s[10] ^ s[7], 20u); + s[4] ^= s[10]; + s[2] ^= s[4]; + s[10] ^= s[2] ^ 0x1de54f3au; + s[14] ^= s[10]; + s[0] += s[14]; + s[12] ^= s[0] ^ 0x62facf82u; + s[15] ^= s[12]; + s[12] = mh_rotl(s[12], 13u) + s[15]; + s[14] = s[14] * 0xc82501bdu + s[12]; + s[0] -= s[14]; + s[11] = s[11] * 0x11744345u + s[0]; + s[3] = (s[3] ^ s[11]) * 0x9270eedfu; + s[9] += s[3] + 0x36b61dc9u; + s[15] += s[9] + 0x9d5947e1u; + s[8] = s[8] * 0x6f00fe17u + s[15]; + s[1] -= s[8]; + s[12] = (s[12] ^ s[1]) * 0x51e09723u; + s[4] += s[12]; + s[6] = mh_rotl(s[6], 23u) + s[4]; + s[11] += s[6] + 0x8b5f9427u; + s[7] *= (s[11] | 1u); + s[1] -= s[7]; + s[0] = s[0] * 0xab66ab6fu + s[1]; + s[13] *= (s[0] | 1u); + s[6] *= (s[13] | 1u); + s[9] += (s[6] | s[4]); + s[10] = (s[10] ^ s[9]) * 0x79592bfdu; + s[4] += s[10]; + s[5] = (s[5] ^ s[4]) * 0x8ba30269u; + s[3] = mh_rotl(s[3] ^ s[5], 17u); + s[9] += s[3] + 0x044adf30u; + s[0] = mh_rotl(s[0] ^ s[9], 5u); + s[14] ^= (s[0] & s[13]); + s[8] -= s[14]; + s[3] = (s[3] ^ s[8]) * 0xb32093b1u; + s[1] = mh_rotl(s[1] ^ s[3], 18u); + s[7] -= s[1]; + s[2] *= (s[7] | 1u); + s[14] = mh_rotl(s[14], 28u) + s[2]; + s[3] ^= s[14]; + s[14] += s[3]; + s[4] ^= s[14]; + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[15] = (s[15] ^ s[12]) * 0x35a4d8cbu; + s[14] += (s[15] | s[5]); + s[10] = mh_rotl(s[10] ^ s[14], 4u); + s[2] -= s[10]; + s[3] ^= s[2]; + s[11] = (s[11] ^ s[3]) * 0x1006ee2fu; + s[12] = mh_rotl(s[12], 20u) + s[11]; + s[4] = (s[4] ^ s[12]) * 0xca4aa4c3u; + s[15] *= (s[4] | 1u); + s[4] ^= (s[15] & s[3]); + s[13] -= s[4]; + s[10] += s[13] + 0xe5c86cb9u; + s[14] ^= s[10] ^ 0x5604f25du; + s[13] += s[14] + 0xe43d82cbu; + s[14] = mh_rotl(s[14] ^ s[13], 23u); + s[4] -= s[14]; + s[9] -= s[4]; + s[10] += s[9]; + s[9] += s[10]; + s[1] = (s[1] ^ s[9]) * 0x1bd8783du; + s[2] -= s[1]; + s[0] = (s[0] ^ s[2]) * 0x50dc547bu; + s[3] ^= s[0]; + s[6] -= s[3]; + s[2] += s[6]; + s[14] *= (s[2] | 1u); + s[10] ^= s[14]; + s[3] -= s[10]; + s[9] *= (s[3] | 1u); + s[4] = mh_rotl(s[4] ^ s[9], 1u); + s[9] += s[4]; + s[11] ^= s[9] ^ 0xcca1df60u; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0xfed45f11u; + s[6] = mh_rotl(s[6], 6u) + s[12]; + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[12] += s[13]; + s[5] -= s[12]; + s[10] = s[10] * 0xe661ba67u + s[5]; + s[6] = (s[6] ^ s[10]) * 0x38950a4fu; + s[9] = (s[9] ^ s[6]) * 0xd8e5439du; + s[11] = (s[11] ^ s[9]) * 0x5eb0f1a5u; + s[15] += s[11] + 0x4b16aaa7u; + s[7] += s[15]; + s[9] ^= s[7]; + s[8] ^= s[9] ^ 0x4e4132c7u; + s[6] += s[8]; + s[2] ^= s[6]; + s[13] -= s[2]; + s[9] += s[13] + 0x45441a4fu; + s[10] = mh_rotl(s[10] ^ s[9], 26u); + s[15] = mh_rotl(s[15], 23u) + s[10]; + s[14] ^= s[15]; + s[15] ^= s[14]; + s[11] = s[11] * 0x530c5d95u + s[15]; + s[12] += (s[11] | s[10]); + s[15] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[15], 28u); + s[9] = s[9] * 0x9d85d8abu + s[12]; + s[1] = mh_rotl(s[1], 23u) + s[9]; + s[5] = (s[5] ^ s[1]) * 0xab9db7cdu; + s[4] = (s[4] ^ s[5]) * 0xac76806du; + s[7] ^= s[4] ^ 0xb250e43cu; + s[10] += s[7]; + s[3] = mh_rotl(s[3], 15u) + s[10]; + s[2] += s[3] + 0x56ffdd08u; + s[10] ^= (s[2] & s[15]); + s[13] = mh_rotl(s[13] ^ s[10], 10u); + s[1] = mh_rotl(s[1], 11u) + s[13]; + s[3] -= s[1]; + s[13] = (s[13] ^ s[3]) * 0x7f82e3cbu; + s[11] = mh_rotl(s[11], 16u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[11], 8u); + s[15] = mh_rotl(s[15] ^ s[10], 8u); + s[14] -= s[15]; + s[5] ^= s[14]; + s[2] ^= s[5] ^ 0x8be07a00u; + s[4] = (s[4] ^ s[2]) * 0xf8afeb21u; + s[14] ^= s[4]; + s[2] = mh_rotl(s[2] ^ s[14], 1u); + s[9] -= s[2]; + s[11] = mh_rotl(s[11], 23u) + s[9]; + s[2] += s[11]; + s[11] = mh_rotl(s[11], 23u) + s[2]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[2] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 17u) + s[2]; + s[5] = s[5] * 0x02194355u + s[3]; + s[11] *= (s[5] | 1u); + s[1] *= (s[11] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 8u); + s[8] ^= s[10]; + s[9] += s[8]; + s[0] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[0]; + s[11] ^= (s[1] & s[2]); + s[13] = (s[13] ^ s[11]) * 0x6c9dbd19u; + s[11] += s[13]; + s[9] ^= s[11]; + s[3] = mh_rotl(s[3] ^ s[9], 6u); + s[15] *= (s[3] | 1u); + s[13] -= s[15]; + s[6] += s[13]; + s[9] ^= s[6] ^ 0x792555d6u; + s[3] = mh_rotl(s[3], 3u) + s[9]; + s[10] *= (s[3] | 1u); + s[2] = s[2] * 0x903bff0du + s[10]; + s[5] -= s[2]; + s[11] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[11], 31u); + s[11] -= s[9]; + s[2] = mh_rotl(s[2] ^ s[11], 24u); + s[5] = mh_rotl(s[5] ^ s[2], 24u); + s[7] += s[5]; + s[13] ^= s[7]; + s[12] -= s[13]; + s[5] += (s[12] | s[0]); + s[8] += s[5] + 0xaab979aau; + s[1] ^= s[8]; + s[13] += s[1] + 0xe5e6fc71u; + s[6] = mh_rotl(s[6] ^ s[13], 15u); + s[1] += s[6]; + s[2] += s[1]; + s[9] += (s[2] | s[11]); + s[10] ^= s[9]; + s[7] = s[7] * 0x2f536f71u + s[10]; + s[5] += s[7]; + s[0] = mh_rotl(s[0] ^ s[5], 5u); + s[13] -= s[0]; + s[9] += s[13]; + s[10] = mh_rotl(s[10] ^ s[9], 22u); + s[12] ^= (s[10] & s[13]); + s[6] += s[12] + 0x70c39328u; + s[2] += s[6] + 0x90a3925du; + s[10] += s[2]; + s[12] *= (s[10] | 1u); + s[9] -= s[12]; + s[10] = mh_rotl(s[10], 16u) + s[9]; + s[9] -= s[10]; + s[8] ^= (s[9] & s[15]); + s[4] ^= s[8]; + s[1] ^= s[4]; + s[3] = (s[3] ^ s[1]) * 0xc8cf6af9u; + s[12] ^= s[3]; + s[15] *= (s[12] | 1u); + s[1] = (s[1] ^ s[15]) * 0x19cdfb9du; + s[6] = s[6] * 0x199cfd21u + s[1]; + s[9] ^= s[6]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x2e1b9e84u; + s[11] = mh_rotl(s[11], 4u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 22u); + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] ^= s[8]; + s[5] ^= s[4]; + s[11] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[11], 13u); + s[10] += s[8] + 0x50912ebdu; + s[14] = (s[14] ^ s[10]) * 0x0ba09b01u; + s[6] ^= s[14]; + s[7] ^= s[6]; + s[13] += (s[7] | s[14]); + s[14] -= s[13]; + s[1] ^= s[14] ^ 0x4ada39c6u; + s[10] ^= s[1]; + s[2] ^= (s[10] & s[9]); + s[12] += s[2] + 0x909c30c1u; + s[9] += s[12]; + s[0] ^= s[9]; + s[4] -= s[0]; + s[7] ^= s[4]; + s[4] = (s[4] ^ s[7]) * 0xf96f3573u; + s[3] += s[4] + 0x9c417efdu; + s[13] += (s[3] | s[5]); + s[4] += s[13]; + s[6] ^= s[4]; + s[14] += s[6] + 0xb0989acbu; + s[15] -= s[14]; + s[2] += s[15]; + s[6] += s[2]; + s[2] ^= s[6]; + s[15] = s[15] * 0x1e3b63f3u + s[2]; + s[7] ^= s[15]; + s[3] += s[7] + 0xbaedebabu; + s[9] += (s[3] | s[5]); + s[10] *= (s[9] | 1u); + s[9] += s[10]; + s[11] ^= s[9]; + s[2] *= (s[11] | 1u); + s[7] ^= s[2]; + s[1] += s[7]; + s[2] = (s[2] ^ s[1]) * 0x358e9d21u; + s[7] += s[2] + 0xa87c4bbfu; + s[5] = mh_rotl(s[5] ^ s[7], 9u); + s[7] += s[5] + 0x32cba03cu; + s[12] += s[7]; + s[3] ^= s[12] ^ 0x8eca1054u; + s[8] = (s[8] ^ s[3]) * 0xb2f6c0e3u; + s[4] = (s[4] ^ s[8]) * 0x13f1ccd5u; + s[3] = (s[3] ^ s[4]) * 0x73023badu; + s[15] -= s[3]; + s[3] *= (s[15] | 1u); + s[15] -= s[3]; + s[12] ^= s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 19u); + s[4] += s[10]; + s[11] ^= s[4]; + s[15] += s[11] + 0x1b7c0167u; + s[13] ^= (s[15] & s[12]); + s[10] = mh_rotl(s[10] ^ s[13], 27u); + s[11] -= s[10]; + s[6] += s[11] + 0xf9ac3792u; + s[4] = (s[4] ^ s[6]) * 0x52e3447bu; + s[1] = s[1] * 0xbe66f197u + s[4]; + s[9] = mh_rotl(s[9], 3u) + s[1]; + s[1] = mh_rotl(s[1] ^ s[9], 21u); + s[11] += s[1]; + s[14] ^= s[11]; + s[6] -= s[14]; + s[1] -= s[6]; + s[7] ^= s[1]; + s[3] ^= s[7] ^ 0xf278acc2u; + s[1] ^= s[3]; + s[0] = mh_rotl(s[0] ^ s[1], 6u); + s[3] += s[0]; + s[2] += s[3] + 0xe2de919du; + s[12] ^= s[2] ^ 0x988db119u; + s[9] += s[12]; + s[13] = mh_rotl(s[13] ^ s[9], 5u); + s[4] = (s[4] ^ s[13]) * 0x5d32587fu; + s[7] += s[4]; + s[15] ^= s[7]; + s[0] += s[15]; + s[9] = (s[9] ^ s[0]) * 0x2861edb3u; + s[5] = s[5] * 0x4f38626du + s[9]; + s[8] = mh_rotl(s[8] ^ s[5], 11u); + s[0] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[0], 6u); + s[9] += s[2]; + s[2] = mh_rotl(s[2], 8u) + s[9]; + s[12] -= s[2]; + s[2] -= s[12]; + s[15] ^= s[2]; + s[12] = mh_rotl(s[12], 16u) + s[15]; + s[5] = (s[5] ^ s[12]) * 0xeca1d1fdu; + s[3] -= s[5]; + s[13] = s[13] * 0x95ffad7fu + s[3]; + s[14] *= (s[13] | 1u); + s[9] ^= s[14]; + s[1] = (s[1] ^ s[9]) * 0xb641fe73u; + s[15] = (s[15] ^ s[1]) * 0x75882ff1u; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[15] = mh_rotl(s[15], 28u) + s[9]; + s[11] *= (s[15] | 1u); + s[13] = (s[13] ^ s[11]) * 0xaedd87b7u; + s[5] *= (s[13] | 1u); + s[11] = s[11] * 0xde5d8dddu + s[5]; + s[10] += s[11]; + s[5] ^= (s[10] & s[12]); + s[9] = mh_rotl(s[9], 2u) + s[5]; + s[13] ^= s[9]; + s[5] ^= s[13]; + s[13] = mh_rotl(s[13], 22u) + s[5]; + s[11] ^= s[13] ^ 0x9f10934au; + s[5] += s[11] + 0xc4f2566bu; + s[14] -= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 30u); + s[4] += s[1]; + s[5] ^= (s[4] & s[14]); + s[9] ^= s[5]; + s[2] = mh_rotl(s[2] ^ s[9], 21u); + s[3] -= s[2]; + s[15] += s[3] + 0xd8e0689au; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[12] = (s[12] ^ s[8]) * 0x9f3839e7u; + s[11] = s[11] * 0x78af3d3fu + s[12]; + s[12] += s[11] + 0xf79cdc6cu; + s[14] += s[12]; + s[13] ^= s[14] ^ 0x2f851ec9u; + s[3] *= (s[13] | 1u); + s[4] ^= (s[3] & s[0]); + s[7] ^= s[4]; + s[0] ^= s[7]; + s[4] ^= s[0] ^ 0x74cd9833u; + s[10] = mh_rotl(s[10], 16u) + s[4]; + s[6] += s[10]; + s[5] += s[6]; + s[7] *= (s[5] | 1u); + s[8] ^= s[7] ^ 0xee20e634u; + s[10] = s[10] * 0x3e130e7du + s[8]; + s[8] += s[10] + 0x6f087e5bu; + s[14] ^= s[8]; + s[4] -= s[14]; + s[9] ^= (s[4] & s[6]); + s[12] = s[12] * 0xb460872fu + s[9]; + s[5] = mh_rotl(s[5] ^ s[12], 4u); + s[4] = mh_rotl(s[4] ^ s[5], 28u); + s[1] ^= s[4] ^ 0xf4365901u; + s[0] = mh_rotl(s[0], 18u) + s[1]; + s[5] -= s[0]; + s[6] = mh_rotl(s[6] ^ s[5], 28u); + s[13] ^= s[6] ^ 0xdf09c351u; + s[2] ^= s[13]; + s[4] -= s[2]; + s[11] -= s[4]; + s[9] += (s[11] | s[8]); + s[3] += (s[9] | s[14]); + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[11] ^= s[6]; + s[5] ^= s[11] ^ 0xb26a12d6u; + s[13] = mh_rotl(s[13], 27u) + s[5]; + s[7] += s[13]; + s[1] *= (s[7] | 1u); + s[14] -= s[1]; + s[5] += s[14]; + s[6] += s[5]; + s[7] += s[6]; + s[3] ^= s[7]; + s[2] ^= s[3] ^ 0x41710416u; + s[13] += s[2]; + s[15] = (s[15] ^ s[13]) * 0x936ce74fu; + s[13] += s[15] + 0xa69098ebu; + s[8] -= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[6] = (s[6] ^ s[4]) * 0x96ed276fu; + s[14] += s[6]; + s[5] += s[14] + 0x3dd7b109u; + s[9] ^= (s[5] & s[7]); + s[15] += s[9]; + s[12] += s[15]; + s[11] -= s[12]; + s[1] += s[11]; + s[2] ^= s[1]; + s[5] *= (s[2] | 1u); + s[14] += s[5] + 0xe10aa4d3u; + s[5] = (s[5] ^ s[14]) * 0x91132d1fu; + s[10] += s[5]; + s[13] ^= s[10]; + s[5] = (s[5] ^ s[13]) * 0xec9ae3adu; + s[11] += s[5]; + s[7] += s[11]; + s[14] += s[7] + 0xf32ce180u; + s[0] ^= s[14]; + s[11] += s[0]; + s[12] *= (s[11] | 1u); + s[11] ^= s[12] ^ 0xb1b1fa56u; + s[5] ^= s[11]; + s[11] = (s[11] ^ s[5]) * 0x7afecfd5u; + s[10] -= s[11]; + s[12] += s[10]; + s[15] *= (s[12] | 1u); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[5] += s[11]; + s[7] = mh_rotl(s[7] ^ s[5], 13u); + s[5] = mh_rotl(s[5], 10u) + s[7]; + s[14] += s[5]; + s[3] += (s[14] | s[15]); + s[6] = s[6] * 0xfd4cbce5u + s[3]; + s[13] += s[6]; + s[12] += s[13]; + s[2] = s[2] * 0x1567d149u + s[12]; + s[9] += (s[2] | s[14]); + s[11] = (s[11] ^ s[9]) * 0xcd1282cfu; + s[10] = s[10] * 0xec337bd7u + s[11]; + s[4] += s[10]; + s[15] ^= s[4]; + s[2] += (s[15] | s[14]); + s[3] ^= s[2]; + s[5] *= (s[3] | 1u); + s[14] += (s[5] | s[4]); + s[7] += s[14] + 0x15993573u; + s[11] -= s[7]; + s[4] += (s[11] | s[13]); + s[8] += s[4]; + s[2] = s[2] * 0x97007c67u + s[8]; + s[11] = s[11] * 0x918bfbb7u + s[2]; + s[10] ^= s[11]; + s[6] += s[10]; + s[13] -= s[6]; + s[6] *= (s[13] | 1u); + s[2] += s[6] + 0x029f336cu; + s[1] = (s[1] ^ s[2]) * 0x773956e7u; + s[8] = (s[8] ^ s[1]) * 0x5b779023u; + s[4] = mh_rotl(s[4] ^ s[8], 6u); + s[12] = mh_rotl(s[12] ^ s[4], 29u); + s[14] -= s[12]; + s[2] *= (s[14] | 1u); + s[15] -= s[2]; + s[11] += s[15]; + s[9] = mh_rotl(s[9] ^ s[11], 13u); + s[7] += s[9] + 0xf4431694u; + s[13] ^= s[7]; + s[15] ^= s[13]; + s[12] ^= s[15] ^ 0xd1599731u; + s[7] = (s[7] ^ s[12]) * 0x8ced34cbu; + s[6] = s[6] * 0xd04c1dd5u + s[7]; + s[1] = mh_rotl(s[1] ^ s[6], 25u); + s[2] = mh_rotl(s[2], 26u) + s[1]; + s[10] = mh_rotl(s[10] ^ s[2], 21u); + s[12] ^= s[10] ^ 0x551385afu; + s[13] = mh_rotl(s[13] ^ s[12], 17u); + s[2] ^= s[13]; + s[5] ^= s[2] ^ 0x836874e8u; + s[10] += s[5] + 0xd9ec8d60u; + s[7] = mh_rotl(s[7] ^ s[10], 14u); + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[5] ^= s[8] ^ 0x076cb7e0u; + s[12] += s[5]; + s[13] ^= s[12]; + s[9] -= s[13]; + s[12] ^= s[9] ^ 0xffb78f00u; + s[0] += s[12]; + s[8] += s[0]; + s[4] = s[4] * 0x09be199fu + s[8]; + s[15] ^= (s[4] & s[11]); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[0] += s[11]; + s[14] ^= (s[0] & s[11]); + s[6] = s[6] * 0x062bb8b9u + s[14]; + s[13] += s[6]; + s[7] ^= s[13]; + s[2] ^= s[7]; + s[4] ^= s[2]; + s[12] = mh_rotl(s[12] ^ s[4], 16u); + s[1] ^= s[12]; + s[10] = s[10] * 0xaf1b9323u + s[1]; + s[2] *= (s[10] | 1u); + s[7] = s[7] * 0xc1c09eb5u + s[2]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[9] *= (s[1] | 1u); + s[7] *= (s[9] | 1u); + s[3] += (s[7] | s[15]); + s[6] += s[3]; + s[13] *= (s[6] | 1u); + s[10] += s[13]; + s[9] *= (s[10] | 1u); + s[2] ^= s[9]; + s[1] = mh_rotl(s[1], 24u) + s[2]; + s[8] += s[1]; + s[15] += s[8]; + s[11] ^= s[15]; + s[9] ^= (s[11] & s[14]); + s[4] ^= s[9] ^ 0x9fb9924fu; + s[9] ^= (s[4] & s[11]); + s[4] = mh_rotl(s[4], 18u) + s[9]; + s[2] -= s[4]; + s[10] ^= s[2]; + s[9] += s[10] + 0x47548619u; + s[5] += (s[9] | s[0]); + s[13] = mh_rotl(s[13], 4u) + s[5]; + s[0] *= (s[13] | 1u); + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] -= s[6]; + s[6] = (s[6] ^ s[2]) * 0x19ae11d5u; + s[15] ^= s[6]; + s[14] = mh_rotl(s[14] ^ s[15], 8u); + s[5] *= (s[14] | 1u); + s[12] ^= s[5]; + s[9] *= (s[12] | 1u); + s[0] += s[9] + 0xf019817bu; + s[13] += (s[0] | s[15]); + s[11] ^= s[13]; + s[12] -= s[11]; + s[7] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[7]; + s[13] -= s[9]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 1u) + s[2]; + s[10] += s[0] + 0xa639dd25u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[7] ^= s[4] ^ 0x4d7e8a6du; + s[8] ^= s[7]; + s[11] += s[8]; + s[10] = mh_rotl(s[10], 8u) + s[11]; + s[0] += s[10]; + s[11] ^= s[0] ^ 0x721aef7cu; + s[4] = mh_rotl(s[4], 1u) + s[11]; + s[5] *= (s[4] | 1u); + s[11] *= (s[5] | 1u); + s[8] ^= s[11] ^ 0xcc314719u; + s[6] = (s[6] ^ s[8]) * 0x6487d2b7u; + s[0] = mh_rotl(s[0] ^ s[6], 14u); + s[9] = mh_rotl(s[9], 18u) + s[0]; + s[5] = mh_rotl(s[5], 1u) + s[9]; + s[9] += s[5] + 0xa383dfd9u; + s[10] ^= s[9]; + s[1] += s[10]; + s[15] += s[1]; + s[7] += s[15]; + s[5] += (s[7] | s[1]); + s[7] += (s[5] | s[3]); + s[6] = (s[6] ^ s[7]) * 0x184ce043u; + s[4] ^= s[6]; + s[2] = mh_rotl(s[2], 3u) + s[4]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_2(uint* s) { + s[14] += s[0]; + s[5] = mh_rotl(s[5], 7u) + s[14]; + s[3] += s[5]; + s[6] ^= s[3]; + s[3] += s[6]; + s[8] += (s[3] | s[10]); + s[15] += s[8]; + s[5] -= s[15]; + s[8] -= s[5]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[8] = mh_rotl(s[8] ^ s[3], 17u); + s[1] += s[8]; + s[7] = s[7] * 0xf236f555u + s[1]; + s[15] *= (s[7] | 1u); + s[4] = (s[4] ^ s[15]) * 0x367da263u; + s[14] ^= (s[4] & s[10]); + s[3] += s[14]; + s[9] = s[9] * 0xa86cb8a5u + s[3]; + s[1] += s[9] + 0x729e8820u; + s[14] *= (s[1] | 1u); + s[13] += s[14]; + s[0] += (s[13] | s[15]); + s[8] ^= s[0] ^ 0x36ce8d99u; + s[15] ^= s[8]; + s[5] *= (s[15] | 1u); + s[10] ^= s[5] ^ 0xc281b62bu; + s[5] = s[5] * 0x4c18c9c1u + s[10]; + s[9] = s[9] * 0x683b0045u + s[5]; + s[2] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[2], 17u); + s[11] ^= s[9]; + s[6] ^= s[11]; + s[1] = (s[1] ^ s[6]) * 0xf967d211u; + s[9] += s[1]; + s[14] += s[9]; + s[11] = mh_rotl(s[11] ^ s[14], 7u); + s[5] += (s[11] | s[7]); + s[8] ^= (s[5] & s[0]); + s[11] ^= s[8]; + s[4] = (s[4] ^ s[11]) * 0xd7e0bb7fu; + s[12] -= s[4]; + s[7] = mh_rotl(s[7], 11u) + s[12]; + s[1] += (s[7] | s[12]); + s[9] += s[1]; + s[8] ^= (s[9] & s[2]); + s[15] = mh_rotl(s[15], 8u) + s[8]; + s[0] = mh_rotl(s[0], 6u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[0], 7u); + s[5] = mh_rotl(s[5], 18u) + s[13]; + s[6] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[11] = s[11] * 0xf05cf87fu + s[1]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[9] += s[0]; + s[12] ^= s[9]; + s[15] = (s[15] ^ s[12]) * 0x4b3b7b5fu; + s[14] += s[15]; + s[3] = (s[3] ^ s[14]) * 0xc25fd2f5u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[12] = (s[12] ^ s[14]) * 0x2ccccc23u; + s[3] ^= s[12] ^ 0xe0a8d819u; + s[14] ^= s[3]; + s[15] ^= s[14]; + s[11] += s[15]; + s[2] ^= s[11]; + s[11] ^= s[2]; + s[4] = mh_rotl(s[4] ^ s[11], 2u); + s[15] = mh_rotl(s[15], 5u) + s[4]; + s[5] = (s[5] ^ s[15]) * 0x8678e679u; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[13] += s[15] + 0xe037af3du; + s[14] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[14], 5u); + s[14] = (s[14] ^ s[3]) * 0xf94dfba9u; + s[11] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 8u); + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7], 17u) + s[15]; + s[2] = mh_rotl(s[2], 17u) + s[7]; + s[12] = (s[12] ^ s[2]) * 0xd427d34fu; + s[2] ^= s[12]; + s[3] += s[2]; + s[13] ^= s[3]; + s[6] *= (s[13] | 1u); + s[7] -= s[6]; + s[15] += s[7]; + s[0] = s[0] * 0x6811cec1u + s[15]; + s[12] *= (s[0] | 1u); + s[4] += (s[12] | s[11]); + s[3] = mh_rotl(s[3] ^ s[4], 15u); + s[7] = mh_rotl(s[7], 21u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[7], 17u); + s[6] = s[6] * 0xe5adc811u + s[15]; + s[12] = (s[12] ^ s[6]) * 0x5156a379u; + s[3] += s[12]; + s[9] ^= s[3] ^ 0x25367eecu; + s[11] += s[9]; + s[4] ^= s[11] ^ 0xb721ecfeu; + s[6] = mh_rotl(s[6], 15u) + s[4]; + s[4] ^= s[6]; + s[13] = (s[13] ^ s[4]) * 0x567d866du; + s[7] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 30u) + s[7]; + s[13] = mh_rotl(s[13] ^ s[0], 8u); + s[11] ^= s[13] ^ 0xf7bdb888u; + s[1] = (s[1] ^ s[11]) * 0x5a32e7abu; + s[0] = mh_rotl(s[0], 24u) + s[1]; + s[4] = s[4] * 0x20f1b36bu + s[0]; + s[11] = (s[11] ^ s[4]) * 0x65a77da9u; + s[2] += s[11]; + s[3] += s[2] + 0x99328ba9u; + s[13] -= s[3]; + s[6] ^= (s[13] & s[3]); + s[2] += s[6]; + s[6] = mh_rotl(s[6] ^ s[2], 30u); + s[9] ^= s[6] ^ 0x6a4c2898u; + s[15] -= s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 26u); + s[2] ^= (s[12] & s[9]); + s[5] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 14u); + s[8] ^= (s[13] & s[6]); + s[5] += s[8] + 0xe7f53827u; + s[14] *= (s[5] | 1u); + s[8] ^= s[14] ^ 0xceef5db4u; + s[14] ^= s[8]; + s[7] ^= s[14] ^ 0xeb56858cu; + s[2] = (s[2] ^ s[7]) * 0x4dd73993u; + s[12] -= s[2]; + s[2] -= s[12]; + s[11] += s[2]; + s[9] *= (s[11] | 1u); + s[3] ^= s[9]; + s[4] = (s[4] ^ s[3]) * 0x8ed152e9u; + s[12] -= s[4]; + s[6] ^= s[12]; + s[7] -= s[6]; + s[3] ^= (s[7] & s[0]); + s[5] = mh_rotl(s[5] ^ s[3], 30u); + s[2] = mh_rotl(s[2], 12u) + s[5]; + s[9] = s[9] * 0x606d8c4fu + s[2]; + s[11] += s[9]; + s[9] -= s[11]; + s[14] ^= s[9]; + s[2] = s[2] * 0xa408d01du + s[14]; + s[12] ^= (s[2] & s[11]); + s[7] *= (s[12] | 1u); + s[10] -= s[7]; + s[11] ^= (s[10] & s[4]); + s[6] += s[11]; + s[1] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[1], 8u); + s[0] = mh_rotl(s[0], 28u) + s[5]; + s[11] -= s[0]; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[6] -= s[8]; + s[12] -= s[6]; + s[6] = (s[6] ^ s[12]) * 0x77a5979du; + s[5] = mh_rotl(s[5], 7u) + s[6]; + s[11] = (s[11] ^ s[5]) * 0xbb2a5277u; + s[10] -= s[11]; + s[13] += (s[10] | s[4]); + s[5] += s[13]; + s[7] += s[5]; + s[3] += s[7] + 0x679f3a15u; + s[9] = (s[9] ^ s[3]) * 0x3b759ea1u; + s[5] += (s[9] | s[6]); + s[14] *= (s[5] | 1u); + s[4] -= s[14]; + s[10] = (s[10] ^ s[4]) * 0x7438b4f1u; + s[12] = mh_rotl(s[12], 31u) + s[10]; + s[1] ^= (s[12] & s[3]); + s[14] ^= s[1]; + s[11] ^= s[14]; + s[0] -= s[11]; + s[15] = mh_rotl(s[15], 29u) + s[0]; + s[14] ^= s[15] ^ 0xdb4b51feu; + s[3] ^= s[14]; + s[2] += s[3]; + s[3] ^= s[2]; + s[1] *= (s[3] | 1u); + s[14] -= s[1]; + s[2] = s[2] * 0xa602880du + s[14]; + s[9] *= (s[2] | 1u); + s[10] += (s[9] | s[0]); + s[0] = s[0] * 0x1da05fddu + s[10]; + s[14] = s[14] * 0x5524fa43u + s[0]; + s[7] += s[14]; + s[3] = mh_rotl(s[3] ^ s[7], 12u); + s[8] = (s[8] ^ s[3]) * 0x93b798bbu; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[2] -= s[11]; + s[9] += s[2] + 0x7e63761fu; + s[13] += s[9] + 0x6a2b3abcu; + s[15] = mh_rotl(s[15], 31u) + s[13]; + s[14] *= (s[15] | 1u); + s[1] ^= (s[14] & s[15]); + s[6] ^= s[1]; + s[15] += (s[6] | s[9]); + s[0] ^= s[15]; + s[8] -= s[0]; + s[13] = mh_rotl(s[13] ^ s[8], 29u); + s[10] = s[10] * 0x81dc8267u + s[13]; + s[12] = mh_rotl(s[12], 6u) + s[10]; + s[14] ^= s[12]; + s[10] -= s[14]; + s[0] = (s[0] ^ s[10]) * 0xc6809ffdu; + s[12] = (s[12] ^ s[0]) * 0x90188547u; + s[8] = mh_rotl(s[8], 23u) + s[12]; + s[2] ^= s[8]; + s[5] = mh_rotl(s[5], 21u) + s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 6u); + s[11] = (s[11] ^ s[13]) * 0x23339351u; + s[6] = mh_rotl(s[6] ^ s[11], 24u); + s[2] ^= (s[6] & s[7]); + s[11] *= (s[2] | 1u); + s[8] += s[11] + 0x64aea95au; + s[3] ^= s[8]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[6] ^= s[0]; + s[3] = s[3] * 0x6da4a1e5u + s[6]; + s[13] = s[13] * 0x16181847u + s[3]; + s[0] -= s[13]; + s[12] += s[0]; + s[14] = mh_rotl(s[14] ^ s[12], 22u); + s[6] += s[14]; + s[1] = mh_rotl(s[1] ^ s[6], 26u); + s[14] -= s[1]; + s[8] += s[14] + 0x57302d8du; + s[5] = s[5] * 0xfae0a1ebu + s[8]; + s[10] *= (s[5] | 1u); + s[1] *= (s[10] | 1u); + s[0] *= (s[1] | 1u); + s[7] = mh_rotl(s[7], 11u) + s[0]; + s[3] *= (s[7] | 1u); + s[4] += s[3]; + s[1] ^= s[4]; + s[4] ^= s[1]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[0] *= (s[1] | 1u); + s[6] += s[0]; + s[0] += s[6] + 0xa48f59d6u; + s[2] += s[0] + 0xd890ff08u; + s[10] -= s[2]; + s[6] ^= s[10]; + s[11] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 25u); + s[5] *= (s[13] | 1u); + s[3] += s[5] + 0xf143105eu; + s[2] = s[2] * 0x9c957b8fu + s[3]; + s[12] = (s[12] ^ s[2]) * 0x5542792du; + s[13] = mh_rotl(s[13], 27u) + s[12]; + s[1] -= s[13]; + s[3] += s[1]; + s[11] ^= s[3]; + s[10] = (s[10] ^ s[11]) * 0xbd220965u; + s[1] *= (s[10] | 1u); + s[7] -= s[1]; + s[15] = mh_rotl(s[15], 28u) + s[7]; + s[1] = mh_rotl(s[1], 12u) + s[15]; + s[8] -= s[1]; + s[9] = (s[9] ^ s[8]) * 0x35be18f5u; + s[4] += (s[9] | s[1]); + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[0] ^= s[14]; + s[12] *= (s[0] | 1u); + s[3] -= s[12]; + s[15] = mh_rotl(s[15], 14u) + s[3]; + s[0] += s[15]; + s[11] = mh_rotl(s[11], 26u) + s[0]; + s[15] += s[11] + 0xc1c2e89fu; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[11] ^= s[4]; + s[0] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[0], 1u); + s[12] += s[13] + 0xd57fd3ddu; + s[9] ^= s[12] ^ 0xe5c431c8u; + s[6] ^= s[9] ^ 0xcc67fed2u; + s[13] ^= s[6]; + s[4] ^= s[13] ^ 0xfe05a3a3u; + s[2] = s[2] * 0x8c03bf67u + s[4]; + s[0] += s[2]; + s[11] += s[0]; + s[7] ^= s[11]; + s[13] = s[13] * 0xfb6d3733u + s[7]; + s[6] ^= s[13]; + s[2] ^= s[6] ^ 0x4efcdfbfu; + s[13] *= (s[2] | 1u); + s[12] ^= s[13]; + s[11] -= s[12]; + s[9] ^= s[11]; + s[4] = mh_rotl(s[4], 10u) + s[9]; + s[12] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[12], 22u); + s[15] += s[9]; + s[3] -= s[15]; + s[7] ^= (s[3] & s[9]); + s[9] += s[7]; + s[8] = (s[8] ^ s[9]) * 0x410e2049u; + s[3] ^= s[8]; + s[12] += s[3]; + s[8] ^= (s[12] & s[6]); + s[0] ^= s[8]; + s[13] += (s[0] | s[3]); + s[7] ^= s[13] ^ 0x0eb1588eu; + s[15] *= (s[7] | 1u); + s[5] += s[15]; + s[1] ^= s[5]; + s[4] = mh_rotl(s[4], 16u) + s[1]; + s[10] += s[4]; + s[0] += s[10]; + s[9] = (s[9] ^ s[0]) * 0x346b3e53u; + s[0] *= (s[9] | 1u); + s[2] -= s[0]; + s[12] = s[12] * 0xa1f90d81u + s[2]; + s[1] += s[12]; + s[0] = s[0] * 0xef4fd54fu + s[1]; + s[1] ^= s[0]; + s[7] ^= s[1]; + s[3] = mh_rotl(s[3] ^ s[7], 21u); + s[13] += (s[3] | s[8]); + s[11] ^= s[13]; + s[13] ^= s[11]; + s[3] += s[13]; + s[0] -= s[3]; + s[15] *= (s[0] | 1u); + s[10] += s[15] + 0x4d178b4du; + s[15] = mh_rotl(s[15], 25u) + s[10]; + s[8] *= (s[15] | 1u); + s[12] *= (s[8] | 1u); + s[13] = mh_rotl(s[13] ^ s[12], 30u); + s[15] ^= s[13]; + s[6] += s[15]; + s[5] *= (s[6] | 1u); + s[12] -= s[5]; + s[0] -= s[12]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[14] += s[3] + 0x83e089e4u; + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 26u); + s[13] += (s[7] | s[3]); + s[7] -= s[13]; + s[11] ^= s[7]; + s[9] ^= s[11]; + s[5] += s[9]; + s[14] += s[5]; + s[4] ^= (s[14] & s[0]); + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[13] ^= s[0] ^ 0x3d84c4aeu; + s[10] *= (s[13] | 1u); + s[13] += s[10] + 0x754c3314u; + s[9] += s[13]; + s[3] ^= s[9]; + s[0] += s[3]; + s[7] = (s[7] ^ s[0]) * 0x92f74007u; + s[13] += s[7]; + s[6] ^= s[13]; + s[7] = (s[7] ^ s[6]) * 0x63936a19u; + s[10] += s[7] + 0xadf24f99u; + s[5] = s[5] * 0xd55fb891u + s[10]; + s[8] = mh_rotl(s[8] ^ s[5], 13u); + s[13] = mh_rotl(s[13] ^ s[8], 28u); + s[15] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[15], 31u); + s[0] += s[3]; + s[12] += s[0]; + s[6] ^= s[12]; + s[1] -= s[6]; + s[0] = mh_rotl(s[0], 8u) + s[1]; + s[3] = mh_rotl(s[3], 11u) + s[0]; + s[13] ^= s[3]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 28u) + s[2]; + s[1] += s[0]; + s[15] ^= s[1] ^ 0x0710d7aau; + s[4] ^= s[15] ^ 0x0c102325u; + s[0] ^= (s[4] & s[6]); + s[2] = mh_rotl(s[2] ^ s[0], 20u); + s[8] += s[2]; + s[7] -= s[8]; + s[11] *= (s[7] | 1u); + s[3] = (s[3] ^ s[11]) * 0x2992aef3u; + s[10] = mh_rotl(s[10] ^ s[3], 6u); + s[5] ^= s[10]; + s[7] -= s[5]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[7] = (s[7] ^ s[1]) * 0x30802407u; + s[8] += s[7] + 0x4da006c2u; + s[2] = mh_rotl(s[2] ^ s[8], 31u); + s[6] *= (s[2] | 1u); + s[7] += s[6]; + s[2] -= s[7]; + s[1] -= s[2]; + s[13] -= s[1]; + s[9] += s[13]; + s[5] = (s[5] ^ s[9]) * 0xb8aec3c9u; + s[9] ^= (s[5] & s[3]); + s[2] ^= s[9]; + s[14] ^= s[2]; + s[9] ^= s[14] ^ 0xbffbdbeeu; + s[3] = mh_rotl(s[3] ^ s[9], 20u); + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[13] = mh_rotl(s[13], 15u) + s[5]; + s[6] ^= s[13]; + s[4] += s[6]; + s[6] += s[4]; + s[8] += s[6]; + s[10] -= s[8]; + s[7] += s[10] + 0x607c17d6u; + s[12] = (s[12] ^ s[7]) * 0x5f96043du; + s[14] += s[12]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[2] += s[5]; + s[0] -= s[2]; + s[14] ^= s[0]; + s[15] ^= s[14] ^ 0xc5076b2cu; + s[1] = (s[1] ^ s[15]) * 0x35f61ca7u; + s[12] = mh_rotl(s[12] ^ s[1], 29u); + s[4] = mh_rotl(s[4], 24u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0x3e4c118bu; + s[4] = (s[4] ^ s[7]) * 0x124571a3u; + s[6] += s[4]; + s[12] -= s[6]; + s[4] -= s[12]; + s[13] -= s[4]; + s[9] += s[13] + 0x66802483u; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[8] -= s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 30u); + s[7] *= (s[4] | 1u); + s[11] ^= s[7]; + s[0] = mh_rotl(s[0], 21u) + s[11]; + s[11] ^= s[0]; + s[2] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[2], 3u); + s[9] += (s[1] | s[7]); + s[0] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[0], 12u); + s[14] += s[3]; + s[6] += s[14] + 0xb50b59d6u; + s[4] = (s[4] ^ s[6]) * 0x1eecbc9fu; + s[6] = mh_rotl(s[6], 24u) + s[4]; + s[12] ^= s[6]; + s[2] += s[12]; + s[7] = s[7] * 0xffe0b5bbu + s[2]; + s[5] = mh_rotl(s[5], 4u) + s[7]; + s[14] ^= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 1u); + s[10] ^= s[1]; + s[1] = s[1] * 0xb57f1b41u + s[10]; + s[15] = (s[15] ^ s[1]) * 0xb49d4c67u; + s[7] *= (s[15] | 1u); + s[1] ^= s[7] ^ 0x835c5c94u; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[3] = mh_rotl(s[3] ^ s[8], 18u); + s[5] ^= s[3]; + s[8] = mh_rotl(s[8], 12u) + s[5]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[8] = s[8] * 0xa6e14777u + s[15]; + s[13] ^= s[8] ^ 0xda9c793bu; + s[3] ^= s[13]; + s[4] ^= s[3]; + s[0] = (s[0] ^ s[4]) * 0x41a7651bu; + s[15] = s[15] * 0xa762cc89u + s[0]; + s[12] = (s[12] ^ s[15]) * 0x401d997fu; + s[7] = mh_rotl(s[7] ^ s[12], 13u); + s[11] += s[7]; + s[4] ^= s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6]; + s[11] *= (s[9] | 1u); + s[3] = (s[3] ^ s[11]) * 0xe248840du; + s[12] += s[3]; + s[4] = s[4] * 0x6d65a44bu + s[12]; + s[14] -= s[4]; + s[5] += s[14]; + s[14] += (s[5] | s[7]); + s[9] = mh_rotl(s[9], 9u) + s[14]; + s[4] += s[9]; + s[13] ^= s[4]; + s[11] += (s[13] | s[5]); + s[1] = s[1] * 0x51f48ab1u + s[11]; + s[11] *= (s[1] | 1u); + s[14] -= s[11]; + s[2] = s[2] * 0x149a38f3u + s[14]; + s[0] = (s[0] ^ s[2]) * 0xe80fd119u; + s[11] *= (s[0] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 4u); + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[6] = (s[6] ^ s[4]) * 0x383cb6c5u; + s[11] ^= s[6]; + s[7] += s[11]; + s[12] = mh_rotl(s[12] ^ s[7], 19u); + s[6] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 23u); + s[1] ^= s[15] ^ 0xb1dc5f0au; + s[13] -= s[1]; + s[4] -= s[13]; + s[1] = mh_rotl(s[1], 8u) + s[4]; + s[2] -= s[1]; + s[1] += s[2]; + s[10] ^= s[1] ^ 0x28905198u; + s[2] ^= s[10]; + s[3] *= (s[2] | 1u); + s[10] -= s[3]; + s[13] ^= s[10]; + s[6] *= (s[13] | 1u); + s[0] += (s[6] | s[5]); + s[7] ^= s[0]; + s[2] = (s[2] ^ s[7]) * 0xcd1889adu; + s[1] += s[2]; + s[11] += s[1]; + s[6] ^= s[11]; + s[13] *= (s[6] | 1u); + s[9] = (s[9] ^ s[13]) * 0x759b3279u; + s[2] -= s[9]; + s[8] = s[8] * 0xab1fffc9u + s[2]; + s[7] *= (s[8] | 1u); + s[11] ^= s[7]; + s[7] *= (s[11] | 1u); + s[9] += s[7]; + s[0] = mh_rotl(s[0], 22u) + s[9]; + s[13] += (s[0] | s[14]); + s[4] ^= s[13]; + s[9] -= s[4]; + s[6] ^= s[9]; + s[8] *= (s[6] | 1u); + s[10] = mh_rotl(s[10], 14u) + s[8]; + s[13] *= (s[10] | 1u); + s[7] ^= (s[13] & s[14]); + s[8] -= s[7]; + s[9] ^= s[8]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[9] = (s[9] ^ s[0]) * 0x94665a0fu; + s[3] += (s[9] | s[5]); + s[13] += s[3] + 0x76335011u; + s[5] *= (s[13] | 1u); + s[10] = mh_rotl(s[10] ^ s[5], 4u); + s[2] += s[10]; + s[0] += s[2] + 0xe5c5c4eeu; + s[10] ^= s[0]; + s[8] -= s[10]; + s[5] += s[8]; + s[12] += s[5]; + s[8] = mh_rotl(s[8] ^ s[12], 17u); + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[0] = mh_rotl(s[0] ^ s[7], 15u); + s[1] ^= s[0] ^ 0x269a357bu; + s[9] += s[1]; + s[11] += s[9]; + s[10] = mh_rotl(s[10] ^ s[11], 7u); + s[0] ^= s[10]; + s[4] += s[0]; + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[15] += s[14]; + s[12] = s[12] * 0xa38e176du + s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 10u); + s[0] ^= s[2]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[3] += s[12] + 0x3a7b8b35u; + s[10] += s[3]; + s[8] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[8], 25u); + s[13] += s[1] + 0xa6fef564u; + s[12] += s[13]; + s[7] ^= s[12]; + s[3] = mh_rotl(s[3] ^ s[7], 13u); + s[1] ^= s[3]; + s[13] = mh_rotl(s[13] ^ s[1], 31u); + s[0] = mh_rotl(s[0] ^ s[13], 25u); + s[7] += s[0]; + s[10] -= s[7]; + s[6] = mh_rotl(s[6], 5u) + s[10]; + s[10] -= s[6]; + s[9] -= s[10]; + s[11] -= s[9]; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[9] = s[9] * 0x524dda45u + s[4]; + s[1] -= s[9]; + s[14] = (s[14] ^ s[1]) * 0x726e8ac3u; + s[7] = mh_rotl(s[7], 23u) + s[14]; + s[11] = mh_rotl(s[11], 24u) + s[7]; + s[14] ^= s[11]; + s[9] -= s[14]; + s[4] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[4], 30u); + s[13] ^= s[9]; + s[5] -= s[13]; + s[10] = mh_rotl(s[10], 2u) + s[5]; + s[15] ^= s[10]; + s[5] += s[15]; + s[11] = (s[11] ^ s[5]) * 0xc4aae5c1u; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[4], 2u); + s[1] ^= s[13] ^ 0x9400d36bu; + s[8] *= (s[1] | 1u); + s[4] = mh_rotl(s[4], 24u) + s[8]; + s[14] = s[14] * 0xc442e3d7u + s[4]; + s[11] = mh_rotl(s[11], 19u) + s[14]; + s[2] = (s[2] ^ s[11]) * 0xebbc49b9u; + s[14] = mh_rotl(s[14] ^ s[2], 19u); + s[13] += s[14]; + s[14] ^= s[13]; + s[9] *= (s[14] | 1u); + s[2] ^= (s[9] & s[13]); + s[8] -= s[2]; + s[3] = mh_rotl(s[3] ^ s[8], 3u); + s[7] = s[7] * 0x576da3b7u + s[3]; + s[0] += (s[7] | s[8]); + s[1] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[11] += s[15]; + s[9] ^= s[11]; + s[14] ^= s[9]; + s[9] += s[14]; + s[5] += s[9]; + s[1] *= (s[5] | 1u); + s[0] += s[1]; + s[7] ^= s[0]; + s[2] += s[7]; + s[14] = (s[14] ^ s[2]) * 0x58412f09u; + s[11] = mh_rotl(s[11] ^ s[14], 12u); + s[3] = mh_rotl(s[3], 6u) + s[11]; + s[14] = (s[14] ^ s[3]) * 0x00dd684fu; + s[4] -= s[14]; + s[9] += s[4] + 0x550edca7u; + s[11] = (s[11] ^ s[9]) * 0xbbfbfe77u; + s[13] += s[11]; + s[11] += s[13]; + s[8] += s[11]; + s[5] += s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 29u); + s[12] += s[15]; + s[1] ^= s[12]; + s[6] -= s[1]; + s[7] += s[6]; + s[4] = mh_rotl(s[4], 17u) + s[7]; + s[11] ^= s[4]; + s[4] += s[11]; + s[11] += s[4] + 0x46d20979u; + s[14] ^= s[11]; + s[10] ^= s[14]; + s[2] *= (s[10] | 1u); + s[12] = mh_rotl(s[12], 22u) + s[2]; + s[15] -= s[12]; + s[12] = (s[12] ^ s[15]) * 0xf44d7efbu; + s[10] = (s[10] ^ s[12]) * 0x3fa99f4fu; + s[2] ^= s[10] ^ 0xac7d5c8bu; + s[7] += s[2]; + s[14] += s[7] + 0xd1ad9327u; + s[3] += s[14]; + s[10] = mh_rotl(s[10] ^ s[3], 9u); + s[5] = mh_rotl(s[5], 11u) + s[10]; + s[2] *= (s[5] | 1u); + s[15] += s[2]; + s[14] *= (s[15] | 1u); + s[10] = s[10] * 0xedb63e45u + s[14]; + s[14] += s[10]; + s[9] += s[14]; + s[3] += s[9] + 0xce5dd87eu; + s[15] = mh_rotl(s[15] ^ s[3], 16u); + s[1] -= s[15]; + s[2] += s[1]; + s[13] ^= (s[2] & s[7]); + s[2] = mh_rotl(s[2] ^ s[13], 11u); + s[15] ^= s[2]; + s[6] += s[15] + 0x97390455u; + s[2] = mh_rotl(s[2], 14u) + s[6]; + s[0] = s[0] * 0xd9932c57u + s[2]; + s[15] ^= s[0]; + s[0] += s[15] + 0xd642df33u; + s[10] -= s[0]; + s[9] = (s[9] ^ s[10]) * 0x96d65173u; + s[3] = (s[3] ^ s[9]) * 0x5ef32be3u; + s[0] = mh_rotl(s[0], 4u) + s[3]; + s[14] += s[0] + 0xa2e88e9cu; + s[4] -= s[14]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1] ^ s[13], 29u); + s[2] += s[1] + 0x9f32e607u; + s[8] = s[8] * 0x2e14f3b3u + s[2]; + s[14] ^= s[8]; + s[10] ^= s[14]; + s[7] = (s[7] ^ s[10]) * 0xb35882a9u; + s[11] ^= s[7] ^ 0xdb62d1c6u; + s[5] *= (s[11] | 1u); + s[10] += (s[5] | s[1]); + s[3] -= s[10]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[13] ^= (s[10] & s[15]); + s[11] -= s[13]; + s[5] ^= s[11]; + s[11] += s[5]; + s[15] ^= s[11] ^ 0xef110718u; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[12], 12u); + s[12] ^= s[1] ^ 0x4e9029b6u; + s[14] -= s[12]; + s[15] *= (s[14] | 1u); + s[4] *= (s[15] | 1u); + s[15] = mh_rotl(s[15] ^ s[4], 9u); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3] ^ s[13], 7u); + s[5] += s[3] + 0xf38664b0u; + s[2] -= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[1] = mh_rotl(s[1], 7u) + s[5]; + s[10] -= s[1]; + s[5] = mh_rotl(s[5] ^ s[10], 27u); + s[10] ^= s[5]; + s[2] += s[10]; + s[6] += s[2]; + s[3] = (s[3] ^ s[6]) * 0x33b893c5u; + s[8] -= s[3]; + s[5] ^= s[8] ^ 0x58095457u; + s[0] += s[5]; + s[9] += s[0]; + s[13] ^= s[9]; + s[6] ^= s[13]; + s[3] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[13] ^= s[5] ^ 0xf1c1aac7u; + s[4] = s[4] * 0x8ea1eea7u + s[13]; + s[12] ^= s[4]; + s[10] ^= s[12] ^ 0xdf051453u; + s[5] ^= s[10]; + s[13] ^= s[5]; + s[15] ^= s[13]; + s[3] ^= s[15]; + s[9] += s[3]; + s[4] ^= s[9] ^ 0x218a1035u; +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_3(uint* s) { + s[9] = (s[9] ^ s[0]) * 0x797e4457u; + s[4] ^= s[9]; + s[10] -= s[4]; + s[11] += s[10] + 0xa102a63du; + s[1] += s[11]; + s[7] ^= s[1]; + s[8] += s[7]; + s[6] += s[8]; + s[1] = mh_rotl(s[1] ^ s[6], 17u); + s[6] ^= s[1]; + s[14] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[2] -= s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 25u); + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[10] ^= s[7]; + s[15] += s[10] + 0x0abd8749u; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[15] = s[15] * 0x66393445u + s[2]; + s[14] *= (s[15] | 1u); + s[3] ^= s[14]; + s[2] = mh_rotl(s[2], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[2], 20u); + s[5] ^= s[0] ^ 0xcab80c1eu; + s[10] = mh_rotl(s[10] ^ s[5], 16u); + s[14] = mh_rotl(s[14] ^ s[10], 6u); + s[10] ^= (s[14] & s[4]); + s[6] ^= (s[10] & s[5]); + s[4] += s[6]; + s[0] += s[4] + 0x95ce3e2au; + s[2] *= (s[0] | 1u); + s[6] += s[2]; + s[2] = mh_rotl(s[2] ^ s[6], 17u); + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[7] ^= s[15]; + s[12] ^= s[7]; + s[1] += s[12]; + s[3] ^= s[1]; + s[0] = (s[0] ^ s[3]) * 0x53869057u; + s[12] += s[0]; + s[10] ^= s[12] ^ 0x3c38b79fu; + s[0] ^= s[10]; + s[1] ^= s[0] ^ 0x26a5cf2au; + s[8] ^= s[1] ^ 0xec7f7c75u; + s[11] = mh_rotl(s[11], 25u) + s[8]; + s[15] ^= s[11]; + s[8] ^= (s[15] & s[6]); + s[3] ^= s[8]; + s[1] = mh_rotl(s[1], 17u) + s[3]; + s[11] ^= s[1]; + s[0] ^= s[11]; + s[7] += s[0]; + s[2] -= s[7]; + s[5] = mh_rotl(s[5], 24u) + s[2]; + s[4] = mh_rotl(s[4], 13u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[4] ^= s[1] ^ 0x7b85746bu; + s[14] += s[4]; + s[9] = mh_rotl(s[9], 24u) + s[14]; + s[1] ^= s[9]; + s[14] += s[1]; + s[6] ^= s[14]; + s[7] = (s[7] ^ s[6]) * 0xd304fa11u; + s[3] += s[7] + 0x916253c4u; + s[13] += (s[3] | s[12]); + s[3] ^= s[13]; + s[1] = (s[1] ^ s[3]) * 0x668aacedu; + s[11] = mh_rotl(s[11] ^ s[1], 12u); + s[4] += s[11] + 0xfa452a6cu; + s[7] ^= s[4]; + s[15] += s[7]; + s[7] ^= s[15]; + s[13] *= (s[7] | 1u); + s[5] *= (s[13] | 1u); + s[9] += s[5]; + s[5] = mh_rotl(s[5], 19u) + s[9]; + s[15] += (s[5] | s[1]); + s[10] += (s[15] | s[12]); + s[11] = mh_rotl(s[11], 7u) + s[10]; + s[10] = mh_rotl(s[10], 11u) + s[11]; + s[0] += (s[10] | s[14]); + s[5] *= (s[0] | 1u); + s[4] -= s[5]; + s[6] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[6], 3u); + s[13] += s[9]; + s[3] -= s[13]; + s[15] ^= s[3] ^ 0x3ab76643u; + s[4] *= (s[15] | 1u); + s[7] -= s[4]; + s[1] += s[7]; + s[9] = mh_rotl(s[9], 31u) + s[1]; + s[3] *= (s[9] | 1u); + s[10] -= s[3]; + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xd1b0c195u; + s[10] -= s[7]; + s[5] -= s[10]; + s[0] -= s[5]; + s[15] += (s[0] | s[13]); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[8] -= s[3]; + s[15] = mh_rotl(s[15], 20u) + s[8]; + s[14] = s[14] * 0x42023659u + s[15]; + s[0] += s[14] + 0x59245cc5u; + s[10] += s[0]; + s[3] += s[10]; + s[4] = (s[4] ^ s[3]) * 0x513757e1u; + s[7] ^= s[4]; + s[14] += s[7] + 0x7d876976u; + s[1] += s[14]; + s[15] += s[1] + 0x538535d0u; + s[13] ^= (s[15] & s[4]); + s[4] = (s[4] ^ s[13]) * 0x102bd2d9u; + s[2] += s[4]; + s[8] *= (s[2] | 1u); + s[11] -= s[8]; + s[8] *= (s[11] | 1u); + s[9] = mh_rotl(s[9] ^ s[8], 21u); + s[12] -= s[9]; + s[0] ^= s[12] ^ 0x756f1367u; + s[8] = (s[8] ^ s[0]) * 0xeb1d6203u; + s[2] += s[8]; + s[3] = mh_rotl(s[3], 27u) + s[2]; + s[14] = s[14] * 0xbe8a18f5u + s[3]; + s[11] ^= s[14]; + s[14] ^= s[11]; + s[7] += s[14]; + s[2] ^= s[7] ^ 0xa93ccf9du; + s[13] = mh_rotl(s[13] ^ s[2], 30u); + s[6] ^= s[13] ^ 0x0b96528au; + s[12] ^= s[6] ^ 0x7400dce8u; + s[7] ^= (s[12] & s[14]); + s[4] ^= s[7] ^ 0x38e67c0fu; + s[12] ^= s[4]; + s[13] ^= s[12] ^ 0xdb69d44fu; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[5] *= (s[14] | 1u); + s[2] ^= s[5]; + s[0] -= s[2]; + s[14] *= (s[0] | 1u); + s[0] += s[14]; + s[3] += s[0] + 0x412d0838u; + s[11] = mh_rotl(s[11], 6u) + s[3]; + s[3] *= (s[11] | 1u); + s[0] = mh_rotl(s[0], 12u) + s[3]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] = s[0] * 0x514e6f4bu + s[4]; + s[13] ^= s[0] ^ 0xb917c4f4u; + s[5] += s[13] + 0xe81626f3u; + s[1] += s[5]; + s[12] *= (s[1] | 1u); + s[13] -= s[12]; + s[14] = mh_rotl(s[14] ^ s[13], 20u); + s[13] ^= s[14]; + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[14] *= (s[10] | 1u); + s[15] ^= s[14]; + s[13] ^= s[15] ^ 0xdcaf64c9u; + s[11] ^= s[13]; + s[5] -= s[11]; + s[4] = mh_rotl(s[4] ^ s[5], 16u); + s[14] ^= s[4]; + s[15] -= s[14]; + s[5] = mh_rotl(s[5] ^ s[15], 21u); + s[0] -= s[5]; + s[13] = mh_rotl(s[13], 27u) + s[0]; + s[11] = mh_rotl(s[11] ^ s[13], 14u); + s[4] = s[4] * 0x7b1d09a9u + s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6] + 0x62232acfu; + s[15] += s[9]; + s[9] += (s[15] | s[14]); + s[8] += (s[9] | s[6]); + s[2] ^= s[8]; + s[3] = (s[3] ^ s[2]) * 0xb3059c21u; + s[11] = mh_rotl(s[11], 19u) + s[3]; + s[1] ^= s[11]; + s[15] ^= s[1] ^ 0x2171991du; + s[12] += s[15]; + s[0] = mh_rotl(s[0] ^ s[12], 11u); + s[12] = s[12] * 0xcfafa68bu + s[0]; + s[13] += s[12]; + s[8] += s[13]; + s[0] = (s[0] ^ s[8]) * 0x1259bf39u; + s[9] ^= s[0] ^ 0x7b24b75fu; + s[11] *= (s[9] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 26u); + s[13] += (s[8] | s[10]); + s[14] += s[13]; + s[2] = mh_rotl(s[2], 16u) + s[14]; + s[0] *= (s[2] | 1u); + s[7] += s[0]; + s[9] -= s[7]; + s[14] += s[9]; + s[2] ^= s[14] ^ 0xc10a9cc2u; + s[9] *= (s[2] | 1u); + s[12] ^= (s[9] & s[11]); + s[9] = (s[9] ^ s[12]) * 0xa6446659u; + s[7] += s[9]; + s[12] *= (s[7] | 1u); + s[1] -= s[12]; + s[4] = mh_rotl(s[4], 25u) + s[1]; + s[8] ^= s[4]; + s[14] += (s[8] | s[0]); + s[1] += s[14]; + s[6] = mh_rotl(s[6] ^ s[1], 15u); + s[9] -= s[6]; + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[10] -= s[0]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x5006a017u; + s[9] -= s[0]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[12] ^= s[6]; + s[9] -= s[12]; + s[7] += s[9]; + s[1] ^= s[7]; + s[15] = (s[15] ^ s[1]) * 0x0341d025u; + s[6] *= (s[15] | 1u); + s[2] = (s[2] ^ s[6]) * 0xbf30d677u; + s[1] ^= s[2] ^ 0x5a31f2fau; + s[15] += s[1]; + s[9] -= s[15]; + s[10] ^= s[9]; + s[7] ^= s[10]; + s[8] *= (s[7] | 1u); + s[9] -= s[8]; + s[1] += s[9]; + s[6] = s[6] * 0xc029c901u + s[1]; + s[9] = s[9] * 0x0a8b81a9u + s[6]; + s[13] *= (s[9] | 1u); + s[2] ^= (s[13] & s[1]); + s[13] = mh_rotl(s[13], 19u) + s[2]; + s[7] = (s[7] ^ s[13]) * 0x6775be81u; + s[13] = mh_rotl(s[13] ^ s[7], 16u); + s[14] ^= s[13]; + s[11] ^= s[14] ^ 0xeb720242u; + s[13] = mh_rotl(s[13], 14u) + s[11]; + s[5] = mh_rotl(s[5], 20u) + s[13]; + s[11] ^= (s[5] & s[7]); + s[7] = mh_rotl(s[7], 25u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[15] = mh_rotl(s[15] ^ s[3], 20u); + s[9] -= s[15]; + s[4] = mh_rotl(s[4], 2u) + s[9]; + s[2] ^= (s[4] & s[14]); + s[7] += s[2]; + s[9] = mh_rotl(s[9] ^ s[7], 3u); + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[5] *= (s[9] | 1u); + s[9] *= (s[5] | 1u); + s[7] -= s[9]; + s[0] ^= s[7] ^ 0xae9620d3u; + s[6] ^= s[0]; + s[1] ^= s[6]; + s[10] -= s[1]; + s[12] ^= s[10]; + s[4] ^= s[12] ^ 0x3893c42au; + s[15] += s[4]; + s[8] += s[15]; + s[0] += s[8]; + s[12] = (s[12] ^ s[0]) * 0xce1c066bu; + s[15] += s[12]; + s[14] = mh_rotl(s[14] ^ s[15], 17u); + s[12] += s[14]; + s[0] = (s[0] ^ s[12]) * 0xbfe6f35fu; + s[7] = mh_rotl(s[7], 14u) + s[0]; + s[10] ^= s[7]; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[9] -= s[12]; + s[8] ^= s[9]; + s[5] = (s[5] ^ s[8]) * 0xc1d852abu; + s[4] ^= s[5]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 18u); + s[15] = mh_rotl(s[15], 13u) + s[8]; + s[4] = (s[4] ^ s[15]) * 0xb18cd0d9u; + s[6] += s[4]; + s[11] = mh_rotl(s[11] ^ s[6], 14u); + s[3] += s[11] + 0x10533cf0u; + s[14] ^= s[3]; + s[10] ^= s[14] ^ 0x708a914au; + s[13] += s[10]; + s[2] *= (s[13] | 1u); + s[5] -= s[2]; + s[4] = mh_rotl(s[4], 3u) + s[5]; + s[9] ^= s[4] ^ 0xdbe59900u; + s[6] = (s[6] ^ s[9]) * 0x3c084e57u; + s[12] -= s[6]; + s[10] ^= s[12] ^ 0xf4c46888u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[9] = (s[9] ^ s[4]) * 0x6a1a0c53u; + s[4] ^= s[9] ^ 0x595122ddu; + s[11] += s[4] + 0x7a7d85c9u; + s[12] = (s[12] ^ s[11]) * 0x44aad133u; + s[5] += s[12]; + s[2] -= s[5]; + s[12] ^= s[2] ^ 0xd4528978u; + s[3] ^= s[12] ^ 0xe2d6b9c3u; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[9] -= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 10u); + s[7] += s[14]; + s[4] += s[7]; + s[5] ^= s[4]; + s[15] ^= s[5]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] = mh_rotl(s[5], 30u) + s[13]; + s[0] ^= s[5]; + s[10] = (s[10] ^ s[0]) * 0x6e5fb2ebu; + s[7] ^= s[10]; + s[3] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[3], 11u); + s[0] ^= s[11]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[4] ^= s[11]; + s[11] ^= s[4]; + s[2] = (s[2] ^ s[11]) * 0xb5b4f471u; + s[3] += s[2]; + s[1] += s[3]; + s[15] *= (s[1] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[15]; + s[15] ^= s[10]; + s[6] = mh_rotl(s[6], 8u) + s[15]; + s[13] = s[13] * 0x0b61283fu + s[6]; + s[11] ^= s[13]; + s[6] += s[11] + 0xd7cda70fu; + s[2] *= (s[6] | 1u); + s[3] += s[2]; + s[0] += (s[3] | s[11]); + s[10] = s[10] * 0x68301209u + s[0]; + s[13] -= s[10]; + s[5] += s[13] + 0x25d68939u; + s[14] ^= s[5] ^ 0x9315e17cu; + s[8] = mh_rotl(s[8] ^ s[14], 31u); + s[4] *= (s[8] | 1u); + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = s[9] * 0xb3978cd7u + s[1]; + s[0] = (s[0] ^ s[9]) * 0x8f1b658fu; + s[3] = mh_rotl(s[3], 31u) + s[0]; + s[1] += s[3]; + s[14] += s[1] + 0xce275c64u; + s[7] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[7], 23u); + s[3] *= (s[14] | 1u); + s[2] = (s[2] ^ s[3]) * 0xf33fdd1bu; + s[10] ^= s[2]; + s[11] ^= s[10]; + s[10] += s[11] + 0x9a470fc4u; + s[4] = mh_rotl(s[4] ^ s[10], 2u); + s[7] *= (s[4] | 1u); + s[8] ^= (s[7] & s[15]); + s[13] ^= s[8]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[9] += s[5]; + s[6] = mh_rotl(s[6], 22u) + s[9]; + s[2] = (s[2] ^ s[6]) * 0x3b1c9049u; + s[4] = s[4] * 0x5964f96fu + s[2]; + s[13] = mh_rotl(s[13] ^ s[4], 31u); + s[6] -= s[13]; + s[13] ^= s[6]; + s[0] = (s[0] ^ s[13]) * 0x9806df37u; + s[12] = s[12] * 0xfcc0e3e5u + s[0]; + s[8] += s[12]; + s[6] += s[8]; + s[1] += s[6]; + s[9] ^= s[1] ^ 0x6dbea2d7u; + s[2] = s[2] * 0x856b34bdu + s[9]; + s[13] += s[2]; + s[2] ^= s[13]; + s[0] += s[2]; + s[11] += s[0]; + s[2] += s[11]; + s[12] ^= (s[2] & s[4]); + s[0] ^= s[12] ^ 0x50a4b36au; + s[12] += s[0]; + s[8] += s[12]; + s[13] ^= s[8]; + s[4] ^= s[13]; + s[15] += s[4]; + s[13] ^= (s[15] & s[7]); + s[7] = mh_rotl(s[7], 26u) + s[13]; + s[4] ^= s[7]; + s[9] *= (s[4] | 1u); + s[7] += s[9]; + s[14] ^= s[7] ^ 0x65c7cdaau; + s[15] = s[15] * 0xf2b2c56fu + s[14]; + s[12] ^= s[15]; + s[8] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 5u); + s[0] -= s[11]; + s[9] += s[0]; + s[4] *= (s[9] | 1u); + s[13] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[13]; + s[8] = mh_rotl(s[8], 24u) + s[0]; + s[0] ^= s[8]; + s[13] += (s[0] | s[6]); + s[15] ^= s[13]; + s[0] ^= s[15] ^ 0x263b836bu; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[14] = (s[14] ^ s[10]) * 0xd6a0e7c7u; + s[15] = (s[15] ^ s[14]) * 0x4017ec97u; + s[8] ^= s[15]; + s[14] ^= s[8] ^ 0x1ebe6b44u; + s[7] = (s[7] ^ s[14]) * 0x8b99dbe1u; + s[10] += s[7]; + s[2] ^= s[10]; + s[12] *= (s[2] | 1u); + s[8] += (s[12] | s[4]); + s[5] = mh_rotl(s[5] ^ s[8], 26u); + s[8] = mh_rotl(s[8] ^ s[5], 31u); + s[13] ^= s[8]; + s[1] ^= s[13] ^ 0xf9ab26dbu; + s[3] += s[1] + 0x27337e87u; + s[14] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[14], 25u); + s[2] -= s[15]; + s[9] ^= (s[2] & s[4]); + s[11] += s[9]; + s[8] -= s[11]; + s[4] += s[8]; + s[8] -= s[4]; + s[11] += s[8]; + s[1] ^= s[11]; + s[11] ^= s[1]; + s[7] = mh_rotl(s[7] ^ s[11], 19u); + s[0] = (s[0] ^ s[7]) * 0xff057d15u; + s[12] = mh_rotl(s[12], 7u) + s[0]; + s[15] += (s[12] | s[10]); + s[9] = mh_rotl(s[9] ^ s[15], 17u); + s[0] ^= s[9] ^ 0x87439202u; + s[12] -= s[0]; + s[13] ^= s[12] ^ 0x201ac58au; + s[2] = mh_rotl(s[2], 7u) + s[13]; + s[11] = mh_rotl(s[11] ^ s[2], 27u); + s[9] = s[9] * 0x55d080fdu + s[11]; + s[6] ^= s[9]; + s[13] = (s[13] ^ s[6]) * 0x5efcd7afu; + s[8] = mh_rotl(s[8], 7u) + s[13]; + s[2] = mh_rotl(s[2], 26u) + s[8]; + s[5] ^= s[2]; + s[0] *= (s[5] | 1u); + s[6] += s[0] + 0x5c1d235du; + s[1] = s[1] * 0x52eb2ecfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xc0730f2du; + s[10] += s[8]; + s[13] ^= s[10]; + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[12], 16u); + s[15] = mh_rotl(s[15] ^ s[10], 21u); + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[4] = s[4] * 0x7a636847u + s[5]; + s[6] += s[4]; + s[15] = mh_rotl(s[15], 15u) + s[6]; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[10] *= (s[8] | 1u); + s[1] += s[10]; + s[13] -= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 2u); + s[13] += s[12]; + s[14] -= s[13]; + s[5] ^= s[14] ^ 0x4b128721u; + s[9] ^= s[5]; + s[1] ^= s[9] ^ 0xdb597223u; + s[5] = mh_rotl(s[5], 29u) + s[1]; + s[1] = mh_rotl(s[1], 15u) + s[5]; + s[9] = s[9] * 0xdad6bd3fu + s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[9] *= (s[7] | 1u); + s[7] ^= s[9]; + s[2] ^= s[7]; + s[13] -= s[2]; + s[11] += (s[13] | s[6]); + s[4] = mh_rotl(s[4], 12u) + s[11]; + s[14] ^= s[4]; + s[15] = (s[15] ^ s[14]) * 0xde79981du; + s[7] = (s[7] ^ s[15]) * 0x285c589bu; + s[8] *= (s[7] | 1u); + s[15] += s[8]; + s[5] += s[15]; + s[9] ^= s[5]; + s[3] ^= s[9] ^ 0x44325084u; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[12] = mh_rotl(s[12], 10u) + s[2]; + s[1] = mh_rotl(s[1], 8u) + s[12]; + s[14] += s[1]; + s[5] ^= s[14] ^ 0x194b2a3cu; + s[12] ^= s[5]; + s[10] = mh_rotl(s[10], 6u) + s[12]; + s[11] = s[11] * 0xe1fe8c79u + s[10]; + s[0] ^= (s[11] & s[15]); + s[7] = mh_rotl(s[7], 17u) + s[0]; + s[2] ^= s[7]; + s[8] = mh_rotl(s[8], 10u) + s[2]; + s[15] = mh_rotl(s[15], 2u) + s[8]; + s[10] += s[15] + 0xbf36d9bbu; + s[12] += s[10]; + s[7] = mh_rotl(s[7], 12u) + s[12]; + s[3] ^= s[7] ^ 0x60dc6edeu; + s[7] = s[7] * 0x154bbc1fu + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[7] ^= (s[9] & s[8]); + s[1] = mh_rotl(s[1], 14u) + s[7]; + s[14] += s[1]; + s[7] = mh_rotl(s[7] ^ s[14], 15u); + s[12] = mh_rotl(s[12] ^ s[7], 7u); + s[8] += s[12] + 0x4ce700ffu; + s[5] ^= s[8]; + s[1] += s[5]; + s[15] ^= s[1] ^ 0x4cfd0e8bu; + s[14] += s[15]; + s[11] += s[14]; + s[13] ^= s[11]; + s[3] = (s[3] ^ s[13]) * 0xea89cab7u; + s[7] ^= s[3]; + s[8] = mh_rotl(s[8], 30u) + s[7]; + s[3] ^= s[8]; + s[10] -= s[3]; + s[7] = s[7] * 0x32632399u + s[10]; + s[2] = mh_rotl(s[2], 26u) + s[7]; + s[6] ^= s[2]; + s[2] -= s[6]; + s[13] *= (s[2] | 1u); + s[7] ^= s[13]; + s[10] ^= (s[7] & s[5]); + s[0] += (s[10] | s[2]); + s[10] *= (s[0] | 1u); + s[6] += s[10] + 0xca92c16du; + s[0] += s[6] + 0x24751e21u; + s[13] ^= s[0] ^ 0x06baa3b2u; + s[3] *= (s[13] | 1u); + s[5] -= s[3]; + s[14] = s[14] * 0x1cff685fu + s[5]; + s[8] += s[14]; + s[10] = mh_rotl(s[10] ^ s[8], 24u); + s[12] ^= s[10]; + s[0] += s[12]; + s[4] = (s[4] ^ s[0]) * 0x8430392bu; + s[9] = mh_rotl(s[9] ^ s[4], 24u); + s[2] = mh_rotl(s[2] ^ s[9], 12u); + s[1] += (s[2] | s[12]); + s[7] ^= s[1] ^ 0x54490fa2u; + s[9] *= (s[7] | 1u); + s[0] = mh_rotl(s[0], 20u) + s[9]; + s[8] += (s[0] | s[7]); + s[11] *= (s[8] | 1u); + s[15] += s[11]; + s[13] += s[15] + 0xa29fa06cu; + s[4] += s[13] + 0x6856416au; + s[3] ^= s[4]; + s[8] = mh_rotl(s[8] ^ s[3], 13u); + s[12] ^= s[8]; + s[3] *= (s[12] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] = mh_rotl(s[13] ^ s[1], 4u); + s[9] += s[13] + 0x212b6434u; + s[12] -= s[9]; + s[8] = (s[8] ^ s[12]) * 0xb91c4009u; + s[7] ^= s[8] ^ 0xbcb896bdu; + s[12] *= (s[7] | 1u); + s[15] = mh_rotl(s[15], 20u) + s[12]; + s[5] ^= (s[15] & s[3]); + s[3] ^= s[5]; + s[6] ^= s[3]; + s[2] = s[2] * 0x9e1aba47u + s[6]; + s[0] += s[2]; + s[3] = mh_rotl(s[3] ^ s[0], 17u); + s[10] ^= s[3]; + s[4] = (s[4] ^ s[10]) * 0xd432bf1du; + s[15] ^= s[4] ^ 0xc8d68ea4u; + s[6] = mh_rotl(s[6], 25u) + s[15]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[1] += (s[2] | s[9]); + s[4] = mh_rotl(s[4] ^ s[1], 25u); + s[12] = (s[12] ^ s[4]) * 0x0320a6b1u; + s[3] ^= s[12]; + s[13] = (s[13] ^ s[3]) * 0xf03bba6du; + s[15] *= (s[13] | 1u); + s[12] += s[15]; + s[1] -= s[12]; + s[9] += s[1]; + s[12] = mh_rotl(s[12] ^ s[9], 23u); + s[10] += s[12] + 0x83f986e6u; + s[0] = (s[0] ^ s[10]) * 0xa4cb0d1du; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[1] ^= s[7] ^ 0x9014b7bbu; + s[4] = (s[4] ^ s[1]) * 0x272bd217u; + s[0] += s[4]; + s[2] = mh_rotl(s[2], 18u) + s[0]; + s[12] = mh_rotl(s[12] ^ s[2], 2u); + s[14] ^= s[12]; + s[9] ^= s[14] ^ 0x16ac9a1eu; + s[2] = mh_rotl(s[2], 15u) + s[9]; + s[1] = mh_rotl(s[1], 10u) + s[2]; + s[4] = s[4] * 0xe0b6e0c3u + s[1]; + s[0] = mh_rotl(s[0], 25u) + s[4]; + s[15] += s[0]; + s[4] = s[4] * 0x1b6cbd07u + s[15]; + s[5] ^= s[4] ^ 0x567146e8u; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[10] += s[4]; + s[0] = s[0] * 0xe8a3abd1u + s[10]; + s[10] += s[0] + 0x5eb953e5u; + s[6] += s[10]; + s[4] = mh_rotl(s[4] ^ s[6], 10u); + s[5] += (s[4] | s[0]); + s[1] = (s[1] ^ s[5]) * 0x9a8851e3u; + s[15] += s[1]; + s[3] -= s[15]; + s[6] -= s[3]; + s[0] ^= s[6]; + s[6] ^= s[0] ^ 0x8522b09fu; + s[2] -= s[6]; + s[7] ^= s[2] ^ 0x4a7c01ddu; + s[6] += s[7] + 0x1790f84fu; + s[14] = (s[14] ^ s[6]) * 0xe3e9ed8bu; + s[1] ^= s[14]; + s[10] -= s[1]; + s[11] += s[10]; + s[4] = s[4] * 0x6371fb67u + s[11]; + s[2] -= s[4]; + s[14] += s[2]; + s[2] *= (s[14] | 1u); + s[1] ^= (s[2] & s[9]); + s[13] = mh_rotl(s[13], 12u) + s[1]; + s[15] = mh_rotl(s[15], 26u) + s[13]; + s[5] = (s[5] ^ s[15]) * 0xbc5643e1u; + s[14] += s[5]; + s[7] ^= s[14]; + s[10] = (s[10] ^ s[7]) * 0x79039a69u; + s[3] -= s[10]; + s[8] -= s[3]; + s[14] ^= s[8]; + s[13] = (s[13] ^ s[14]) * 0x1b4013ffu; + s[3] *= (s[13] | 1u); + s[12] = s[12] * 0x309d80d3u + s[3]; + s[6] *= (s[12] | 1u); + s[5] ^= s[6]; + s[2] += s[5]; + s[14] = mh_rotl(s[14], 6u) + s[2]; + s[15] = mh_rotl(s[15] ^ s[14], 6u); + s[14] ^= (s[15] & s[0]); + s[3] = mh_rotl(s[3] ^ s[14], 29u); + s[5] ^= s[3] ^ 0xa5a0aeffu; + s[10] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[10], 23u); + s[1] *= (s[9] | 1u); + s[4] += s[1]; + s[0] += (s[4] | s[1]); + s[14] ^= s[0]; + s[3] += s[14]; + s[15] ^= s[3]; + s[6] += (s[15] | s[12]); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[0] = s[0] * 0xf76673f3u + s[7]; + s[15] ^= (s[0] & s[4]); + s[12] ^= s[15]; + s[6] = s[6] * 0x36c04137u + s[12]; + s[9] ^= s[6] ^ 0xaf963084u; + s[13] *= (s[9] | 1u); + s[11] *= (s[13] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 7u); + s[13] = s[13] * 0x69f233a3u + s[8]; + s[3] += s[13]; + s[1] = mh_rotl(s[1] ^ s[3], 19u); + s[6] = (s[6] ^ s[1]) * 0x0416e137u; + s[12] ^= s[6]; + s[1] = (s[1] ^ s[12]) * 0xca07bafdu; + s[14] ^= s[1]; + s[7] += (s[14] | s[2]); + s[3] *= (s[7] | 1u); + s[11] = mh_rotl(s[11], 15u) + s[3]; + s[8] = mh_rotl(s[8], 6u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[8], 15u); + s[2] = mh_rotl(s[2], 28u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[2], 28u); + s[11] ^= s[9]; + s[9] ^= s[11]; + s[12] = (s[12] ^ s[9]) * 0xbefcfdbbu; + s[6] += s[12]; + s[2] ^= s[6] ^ 0x899a552eu; + s[0] += s[2]; + s[6] ^= s[0]; + s[5] -= s[6]; + s[7] -= s[5]; + s[14] += (s[7] | s[10]); + s[8] += s[14] + 0x0de3dc6bu; + s[10] += s[8]; + s[2] += s[10]; + s[12] = mh_rotl(s[12] ^ s[2], 31u); + s[9] = (s[9] ^ s[12]) * 0x6052a829u; + s[7] = (s[7] ^ s[9]) * 0x97670939u; + s[14] = mh_rotl(s[14], 15u) + s[7]; + s[12] += s[14] + 0x010cd5e8u; + s[9] = mh_rotl(s[9], 2u) + s[12]; + s[0] ^= s[9]; + s[5] += s[0]; + s[3] *= (s[5] | 1u); + s[15] += s[3] + 0x77f4510du; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[13], 4u); + s[5] += s[11]; + s[9] ^= (s[5] & s[7]); + s[1] = mh_rotl(s[1], 6u) + s[9]; + s[6] *= (s[1] | 1u); + s[9] ^= s[6]; + s[3] ^= s[9] ^ 0xcc2ee068u; + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[11] = mh_rotl(s[11], 31u) + s[14]; + s[0] += s[11] + 0x3191cb8fu; + s[12] ^= (s[0] & s[1]); + s[14] += (s[12] | s[13]); + s[11] = (s[11] ^ s[14]) * 0x29e0c4c3u; + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[3] *= (s[6] | 1u); + s[6] += s[3]; + s[13] ^= s[6] ^ 0x0e54f612u; + s[4] ^= s[13]; + s[5] += s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] = s[14] * 0x37c87275u + s[11]; +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_4(uint* s) { + s[15] ^= s[0] ^ 0xb6c1e90cu; + s[2] = mh_rotl(s[2], 19u) + s[15]; + s[8] = s[8] * 0x28bc533du + s[2]; + s[5] ^= s[8]; + s[6] = (s[6] ^ s[5]) * 0x86d067fbu; + s[10] ^= s[6] ^ 0x75a5b862u; + s[14] ^= s[10] ^ 0xd8b962f7u; + s[8] -= s[14]; + s[1] ^= s[8]; + s[11] ^= s[1]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[4] += (s[6] | s[8]); + s[5] ^= (s[4] & s[10]); + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 10u); + s[0] ^= s[5] ^ 0x3da9ef7eu; + s[12] ^= s[0]; + s[3] ^= s[12] ^ 0xfe29da15u; + s[0] += s[3]; + s[5] ^= (s[0] & s[4]); + s[7] += (s[5] | s[12]); + s[9] += (s[7] | s[2]); + s[14] ^= s[9]; + s[15] += s[14] + 0xecc0e6cfu; + s[4] += s[15]; + s[10] = (s[10] ^ s[4]) * 0x71d36d0bu; + s[15] ^= s[10] ^ 0x3834ef56u; + s[11] = (s[11] ^ s[15]) * 0xf3f2126du; + s[4] -= s[11]; + s[5] += s[4]; + s[12] = mh_rotl(s[12], 23u) + s[5]; + s[14] += s[12] + 0xee23cc86u; + s[0] += s[14]; + s[3] ^= s[0] ^ 0x9ff2f793u; + s[8] += s[3]; + s[7] += s[8]; + s[11] ^= s[7] ^ 0x9ca003edu; + s[15] += (s[11] | s[9]); + s[12] = mh_rotl(s[12] ^ s[15], 17u); + s[7] = mh_rotl(s[7] ^ s[12], 7u); + s[5] ^= s[7] ^ 0xf6d26d41u; + s[15] ^= s[5] ^ 0xad445899u; + s[11] += s[15] + 0x94157a95u; + s[2] *= (s[11] | 1u); + s[10] += s[2]; + s[4] ^= s[10] ^ 0xfb1e1d1eu; + s[7] = (s[7] ^ s[4]) * 0xd7d5e433u; + s[12] += s[7] + 0x4329bd0du; + s[15] -= s[12]; + s[0] = (s[0] ^ s[15]) * 0x802ba143u; + s[2] = mh_rotl(s[2], 29u) + s[0]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[3] = mh_rotl(s[3], 25u) + s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 10u); + s[6] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 21u) + s[6]; + s[14] *= (s[13] | 1u); + s[12] = (s[12] ^ s[14]) * 0x5445cbf5u; + s[15] += s[12]; + s[1] += s[15] + 0xdf315f06u; + s[5] ^= s[1] ^ 0x9aea526cu; + s[15] += s[5]; + s[1] = (s[1] ^ s[15]) * 0xa5708ab3u; + s[8] += s[1] + 0x41e6f337u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 14u) + s[5]; + s[6] += s[3]; + s[9] = mh_rotl(s[9] ^ s[6], 12u); + s[4] += s[9]; + s[8] += s[4]; + s[1] += s[8] + 0xc618b3f4u; + s[2] = s[2] * 0x6195bb5fu + s[1]; + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[6] *= (s[14] | 1u); + s[14] *= (s[6] | 1u); + s[6] ^= s[14] ^ 0x00ed6668u; + s[14] = mh_rotl(s[14] ^ s[6], 9u); + s[10] += s[14] + 0x9e4bdfd0u; + s[9] = mh_rotl(s[9] ^ s[10], 2u); + s[6] ^= (s[9] & s[4]); + s[15] ^= s[6]; + s[12] += s[15]; + s[5] += s[12] + 0x88d2c32au; + s[6] *= (s[5] | 1u); + s[10] += s[6]; + s[15] += s[10] + 0xf6c730abu; + s[6] += (s[15] | s[9]); + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[14] = (s[14] ^ s[1]) * 0xc68fd8b7u; + s[13] ^= s[14]; + s[2] += s[13]; + s[5] ^= s[2]; + s[6] += s[5]; + s[7] ^= (s[6] & s[0]); + s[14] = (s[14] ^ s[7]) * 0x014b019fu; + s[10] -= s[14]; + s[5] = mh_rotl(s[5], 24u) + s[10]; + s[14] ^= s[5]; + s[10] += s[14] + 0x0431e88cu; + s[15] -= s[10]; + s[9] *= (s[15] | 1u); + s[2] = (s[2] ^ s[9]) * 0x237066cfu; + s[5] *= (s[2] | 1u); + s[2] ^= s[5] ^ 0x4510e4bcu; + s[5] = mh_rotl(s[5], 16u) + s[2]; + s[10] ^= s[5]; + s[5] += s[10] + 0xb102c58bu; + s[12] *= (s[5] | 1u); + s[0] = (s[0] ^ s[12]) * 0x535043a5u; + s[3] = (s[3] ^ s[0]) * 0x1f7a2dffu; + s[14] = (s[14] ^ s[3]) * 0xdae8e3c7u; + s[12] ^= s[14] ^ 0xbc9e9bd9u; + s[8] += (s[12] | s[14]); + s[6] = mh_rotl(s[6], 6u) + s[8]; + s[2] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[6] += s[3]; + s[9] -= s[6]; + s[8] = (s[8] ^ s[9]) * 0x7256fab5u; + s[3] ^= s[8]; + s[2] ^= s[3] ^ 0x1506dae2u; + s[11] ^= s[2]; + s[9] ^= s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 9u); + s[10] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[12] -= s[3]; + s[2] = (s[2] ^ s[12]) * 0x91fe8e99u; + s[6] ^= s[2]; + s[15] += s[6]; + s[1] -= s[15]; + s[9] *= (s[1] | 1u); + s[0] += s[9] + 0xb9d5c4abu; + s[15] = s[15] * 0xbf261023u + s[0]; + s[11] += s[15]; + s[3] ^= (s[11] & s[9]); + s[0] = mh_rotl(s[0], 28u) + s[3]; + s[14] ^= s[0]; + s[10] += (s[14] | s[3]); + s[14] = mh_rotl(s[14] ^ s[10], 1u); + s[10] ^= s[14]; + s[0] *= (s[10] | 1u); + s[5] = (s[5] ^ s[0]) * 0x94c8cd23u; + s[1] = mh_rotl(s[1] ^ s[5], 1u); + s[4] = mh_rotl(s[4], 14u) + s[1]; + s[6] += s[4]; + s[7] = s[7] * 0x3498a9b3u + s[6]; + s[0] -= s[7]; + s[4] += s[0]; + s[14] += s[4]; + s[15] = mh_rotl(s[15], 8u) + s[14]; + s[11] += s[15] + 0x4a892dacu; + s[0] = mh_rotl(s[0] ^ s[11], 13u); + s[15] = mh_rotl(s[15] ^ s[0], 12u); + s[7] ^= s[15] ^ 0xd668f578u; + s[3] -= s[7]; + s[8] *= (s[3] | 1u); + s[10] += s[8]; + s[8] = mh_rotl(s[8], 14u) + s[10]; + s[13] = mh_rotl(s[13] ^ s[8], 8u); + s[9] ^= s[13]; + s[15] ^= s[9]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[8] *= (s[4] | 1u); + s[7] *= (s[8] | 1u); + s[12] *= (s[7] | 1u); + s[1] ^= s[12]; + s[0] = mh_rotl(s[0] ^ s[1], 12u); + s[4] = (s[4] ^ s[0]) * 0x9e6913c7u; + s[3] = (s[3] ^ s[4]) * 0xff70743fu; + s[13] ^= s[3]; + s[4] = mh_rotl(s[4], 5u) + s[13]; + s[15] += (s[4] | s[2]); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[6] += s[7]; + s[8] = mh_rotl(s[8] ^ s[6], 26u); + s[5] = (s[5] ^ s[8]) * 0x71b981efu; + s[15] ^= (s[5] & s[0]); + s[13] += s[15] + 0x211b525au; + s[0] += s[13] + 0x235124dcu; + s[4] = (s[4] ^ s[0]) * 0x96db8fb9u; + s[15] = mh_rotl(s[15], 10u) + s[4]; + s[13] += s[15]; + s[4] = (s[4] ^ s[13]) * 0x00f4145fu; + s[9] ^= (s[4] & s[1]); + s[2] = mh_rotl(s[2] ^ s[9], 30u); + s[10] += (s[2] | s[3]); + s[1] = mh_rotl(s[1], 25u) + s[10]; + s[12] *= (s[1] | 1u); + s[4] *= (s[12] | 1u); + s[14] ^= s[4] ^ 0x23e8ae4fu; + s[10] -= s[14]; + s[7] += s[10]; + s[11] = s[11] * 0x28fe7415u + s[7]; + s[9] = mh_rotl(s[9] ^ s[11], 1u); + s[8] = (s[8] ^ s[9]) * 0xf9445edfu; + s[5] ^= (s[8] & s[7]); + s[13] = mh_rotl(s[13], 13u) + s[5]; + s[15] *= (s[13] | 1u); + s[13] ^= s[15]; + s[1] -= s[13]; + s[11] = mh_rotl(s[11], 31u) + s[1]; + s[14] += s[11] + 0xf84dc8acu; + s[2] ^= s[14]; + s[9] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 5u); + s[11] ^= s[14]; + s[9] ^= s[11] ^ 0xec241426u; + s[15] += (s[9] | s[6]); + s[1] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[12] ^= s[5]; + s[7] = mh_rotl(s[7] ^ s[12], 8u); + s[15] -= s[7]; + s[7] = s[7] * 0x0fbb88d1u + s[15]; + s[8] = mh_rotl(s[8] ^ s[7], 11u); + s[9] = (s[9] ^ s[8]) * 0x61f086f3u; + s[14] *= (s[9] | 1u); + s[11] += s[14]; + s[5] = mh_rotl(s[5] ^ s[11], 6u); + s[4] += s[5]; + s[8] ^= s[4]; + s[3] -= s[8]; + s[15] -= s[3]; + s[11] += (s[15] | s[1]); + s[10] ^= s[11]; + s[14] += s[10]; + s[11] += (s[14] | s[4]); + s[14] -= s[11]; + s[0] -= s[14]; + s[6] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 1u) + s[6]; + s[14] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[14], 29u); + s[14] ^= s[9] ^ 0x99f79e3cu; + s[2] ^= s[14]; + s[8] *= (s[2] | 1u); + s[12] ^= (s[8] & s[10]); + s[10] *= (s[12] | 1u); + s[14] += (s[10] | s[9]); + s[11] = s[11] * 0x451cdab1u + s[14]; + s[1] = s[1] * 0x7103d94du + s[11]; + s[6] ^= s[1]; + s[9] += s[6]; + s[3] ^= (s[9] & s[15]); + s[0] -= s[3]; + s[14] ^= s[0]; + s[9] += s[14] + 0x89535c2fu; + s[10] += s[9]; + s[9] += s[10]; + s[13] += s[9]; + s[7] += s[13]; + s[12] += s[7]; + s[8] += s[12] + 0xa6e4da0cu; + s[14] *= (s[8] | 1u); + s[4] += (s[14] | s[0]); + s[6] *= (s[4] | 1u); + s[13] += s[6]; + s[2] ^= s[13]; + s[8] ^= s[2]; + s[4] = (s[4] ^ s[8]) * 0x6209b3c5u; + s[15] += s[4]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15], 27u) + s[5]; + s[2] = mh_rotl(s[2], 29u) + s[15]; + s[10] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[4] -= s[2]; + s[0] += s[4]; + s[4] *= (s[0] | 1u); + s[1] *= (s[4] | 1u); + s[11] ^= s[1]; + s[8] = mh_rotl(s[8] ^ s[11], 3u); + s[6] += s[8] + 0xc67c23a1u; + s[1] = s[1] * 0x033df6bfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xb5308d7du; + s[6] -= s[8]; + s[9] *= (s[6] | 1u); + s[12] -= s[9]; + s[1] += (s[12] | s[4]); + s[2] += (s[1] | s[7]); + s[7] += (s[2] | s[0]); + s[3] *= (s[7] | 1u); + s[5] += s[3]; + s[10] = mh_rotl(s[10] ^ s[5], 20u); + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[14] *= (s[5] | 1u); + s[6] ^= s[14]; + s[14] += s[6]; + s[7] ^= s[14] ^ 0x47ba5e42u; + s[4] ^= s[7] ^ 0xc5c5e46fu; + s[10] = mh_rotl(s[10] ^ s[4], 23u); + s[3] -= s[10]; + s[8] = mh_rotl(s[8] ^ s[3], 12u); + s[15] ^= s[8] ^ 0xf988e79du; + s[1] += s[15]; + s[8] += (s[1] | s[15]); + s[13] = mh_rotl(s[13], 10u) + s[8]; + s[4] += s[13]; + s[8] = mh_rotl(s[8], 24u) + s[4]; + s[6] += s[8]; + s[12] *= (s[6] | 1u); + s[14] ^= s[12]; + s[15] += (s[14] | s[4]); + s[10] += s[15] + 0xad0c3a1cu; + s[8] ^= s[10]; + s[10] ^= s[8] ^ 0x0985d0ffu; + s[3] = (s[3] ^ s[10]) * 0xd3d14647u; + s[12] ^= s[3]; + s[0] = s[0] * 0xba477023u + s[12]; + s[8] ^= s[0]; + s[14] ^= s[8]; + s[12] = mh_rotl(s[12] ^ s[14], 30u); + s[8] ^= s[12] ^ 0x749d3378u; + s[10] -= s[8]; + s[2] += s[10]; + s[11] = s[11] * 0xb9714083u + s[2]; + s[5] *= (s[11] | 1u); + s[15] ^= (s[5] & s[14]); + s[6] += s[15]; + s[5] = (s[5] ^ s[6]) * 0x5673a9bfu; + s[1] ^= (s[5] & s[0]); + s[12] ^= s[1] ^ 0x10153309u; + s[4] += s[12]; + s[10] = (s[10] ^ s[4]) * 0xd28d9ef9u; + s[14] = s[14] * 0xc16dc36du + s[10]; + s[15] ^= s[14] ^ 0x0609a343u; + s[10] += s[15] + 0xccc127adu; + s[6] ^= (s[10] & s[7]); + s[11] = mh_rotl(s[11] ^ s[6], 29u); + s[7] ^= s[11]; + s[0] = mh_rotl(s[0], 21u) + s[7]; + s[15] += s[0]; + s[14] += s[15]; + s[8] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[8], 7u); + s[10] ^= s[15]; + s[13] += s[10]; + s[5] += (s[13] | s[0]); + s[0] ^= (s[5] & s[9]); + s[2] += s[0]; + s[0] *= (s[2] | 1u); + s[2] = (s[2] ^ s[0]) * 0xadbfbcf9u; + s[8] = mh_rotl(s[8], 7u) + s[2]; + s[5] ^= s[8]; + s[7] ^= s[5] ^ 0x11a571cfu; + s[10] ^= s[7]; + s[0] = (s[0] ^ s[10]) * 0x012ab04fu; + s[10] += s[0] + 0xe41f365bu; + s[9] ^= s[10] ^ 0x914568adu; + s[15] *= (s[9] | 1u); + s[14] ^= s[15] ^ 0x535f623du; + s[11] += (s[14] | s[3]); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10], 3u) + s[14]; + s[9] -= s[10]; + s[4] = (s[4] ^ s[9]) * 0xb4b4f5c7u; + s[1] += s[4]; + s[14] -= s[1]; + s[7] ^= (s[14] & s[4]); + s[15] ^= (s[7] & s[13]); + s[9] = mh_rotl(s[9], 23u) + s[15]; + s[1] -= s[9]; + s[8] = (s[8] ^ s[1]) * 0x17a6461du; + s[3] ^= s[8]; + s[9] ^= s[3]; + s[2] = s[2] * 0x7c061aadu + s[9]; + s[14] += s[2]; + s[9] += s[14] + 0x8c896e71u; + s[15] = mh_rotl(s[15] ^ s[9], 17u); + s[0] ^= s[15]; + s[6] = s[6] * 0x0884864du + s[0]; + s[7] += (s[6] | s[10]); + s[9] ^= s[7] ^ 0xe1a426feu; + s[11] = mh_rotl(s[11], 1u) + s[9]; + s[14] *= (s[11] | 1u); + s[12] ^= s[14] ^ 0x9b63a170u; + s[1] -= s[12]; + s[3] ^= (s[1] & s[14]); + s[9] = s[9] * 0xe67ddf4du + s[3]; + s[1] = mh_rotl(s[1] ^ s[9], 13u); + s[7] ^= s[1]; + s[13] = (s[13] ^ s[7]) * 0x55b6aa85u; + s[3] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 8u) + s[3]; + s[2] *= (s[4] | 1u); + s[15] ^= s[2]; + s[1] ^= s[15]; + s[12] ^= s[1]; + s[4] *= (s[12] | 1u); + s[13] ^= (s[4] & s[5]); + s[6] ^= s[13]; + s[15] -= s[6]; + s[2] *= (s[15] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] = mh_rotl(s[10], 12u) + s[14]; + s[8] = (s[8] ^ s[10]) * 0x820a80d3u; + s[11] *= (s[8] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 4u); + s[1] ^= (s[12] & s[10]); + s[12] += s[1] + 0x179d4563u; + s[2] ^= s[12] ^ 0xf1c8d57cu; + s[11] = s[11] * 0x27fd820fu + s[2]; + s[7] = (s[7] ^ s[11]) * 0x9b5d3177u; + s[8] += (s[7] | s[10]); + s[9] = mh_rotl(s[9], 28u) + s[8]; + s[2] = mh_rotl(s[2], 9u) + s[9]; + s[10] = mh_rotl(s[10], 17u) + s[2]; + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[2] ^= s[8] ^ 0xdf4a6b10u; + s[15] ^= s[2] ^ 0xce02ff19u; + s[7] += s[15]; + s[5] += s[7] + 0x43b32c96u; + s[14] ^= s[5]; + s[2] = s[2] * 0xdcd59df9u + s[14]; + s[13] = s[13] * 0x2da5f733u + s[2]; + s[4] = mh_rotl(s[4] ^ s[13], 1u); + s[10] = mh_rotl(s[10], 3u) + s[4]; + s[15] ^= (s[10] & s[8]); + s[5] -= s[15]; + s[8] += s[5]; + s[14] = mh_rotl(s[14] ^ s[8], 24u); + s[7] = mh_rotl(s[7], 10u) + s[14]; + s[12] += (s[7] | s[9]); + s[14] = mh_rotl(s[14] ^ s[12], 25u); + s[11] += s[14]; + s[13] ^= s[11] ^ 0x292b93c0u; + s[12] += (s[13] | s[3]); + s[7] = mh_rotl(s[7] ^ s[12], 19u); + s[15] = mh_rotl(s[15], 15u) + s[7]; + s[5] += s[15]; + s[4] += s[5] + 0xf240675bu; + s[2] += s[4]; + s[11] = mh_rotl(s[11] ^ s[2], 26u); + s[4] += s[11] + 0x58805483u; + s[7] *= (s[4] | 1u); + s[0] += s[7]; + s[5] ^= s[0]; + s[4] += s[5]; + s[12] = mh_rotl(s[12], 27u) + s[4]; + s[2] += s[12] + 0x9c60169eu; + s[3] += s[2]; + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[11] = mh_rotl(s[11] ^ s[15], 28u); + s[2] += s[11]; + s[9] -= s[2]; + s[12] ^= s[9]; + s[7] += s[12] + 0x70e6e273u; + s[3] = mh_rotl(s[3] ^ s[7], 29u); + s[10] -= s[3]; + s[11] ^= (s[10] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 5u); + s[13] += s[1]; + s[6] -= s[13]; + s[4] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[4], 15u); + s[11] = mh_rotl(s[11], 9u) + s[6]; + s[0] ^= s[11]; + s[1] = mh_rotl(s[1], 17u) + s[0]; + s[2] += s[1] + 0xc83d763au; + s[13] += s[2] + 0xc18aa580u; + s[6] = mh_rotl(s[6] ^ s[13], 12u); + s[4] *= (s[6] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[1] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[1], 21u); + s[6] += s[3]; + s[15] = (s[15] ^ s[6]) * 0x228e4019u; + s[13] *= (s[15] | 1u); + s[7] ^= s[13]; + s[4] += s[7] + 0x59e10c11u; + s[15] = mh_rotl(s[15], 25u) + s[4]; + s[2] += (s[15] | s[3]); + s[15] += s[2] + 0xa95ffd72u; + s[5] ^= s[15]; + s[6] *= (s[5] | 1u); + s[15] += s[6] + 0x95d25be9u; + s[5] -= s[15]; + s[1] ^= s[5] ^ 0x709c86b4u; + s[9] = mh_rotl(s[9] ^ s[1], 27u); + s[15] += s[9] + 0xac8ad479u; + s[4] ^= s[15]; + s[6] = s[6] * 0x0571185bu + s[4]; + s[9] = mh_rotl(s[9], 13u) + s[6]; + s[14] ^= s[9]; + s[9] += s[14]; + s[2] += (s[9] | s[5]); + s[15] += (s[2] | s[14]); + s[3] = mh_rotl(s[3] ^ s[15], 13u); + s[5] -= s[3]; + s[15] += (s[5] | s[6]); + s[11] *= (s[15] | 1u); + s[8] -= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 27u); + s[3] += s[12] + 0xdc6b4196u; + s[8] ^= s[3] ^ 0x274048d2u; + s[2] *= (s[8] | 1u); + s[9] += s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 2u); + s[2] ^= s[14] ^ 0xb343b907u; + s[6] = mh_rotl(s[6] ^ s[2], 9u); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] ^= s[10]; + s[3] += s[14] + 0xa61ab1cbu; + s[8] ^= s[3]; + s[6] ^= s[8]; + s[8] ^= (s[6] & s[13]); + s[5] += s[8]; + s[0] ^= s[5]; + s[5] ^= s[0] ^ 0x70e371acu; + s[12] += s[5] + 0x0375455eu; + s[9] *= (s[12] | 1u); + s[12] -= s[9]; + s[13] ^= s[12]; + s[11] *= (s[13] | 1u); + s[0] = (s[0] ^ s[11]) * 0xc8207715u; + s[8] += s[0] + 0x30e154a7u; + s[11] ^= (s[8] & s[14]); + s[2] = mh_rotl(s[2], 28u) + s[11]; + s[7] = mh_rotl(s[7], 4u) + s[2]; + s[6] ^= s[7]; + s[8] += (s[6] | s[3]); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xa50fe152u; + s[4] += s[13]; + s[6] += s[4] + 0x5efa53b9u; + s[7] -= s[6]; + s[9] *= (s[7] | 1u); + s[0] ^= s[9] ^ 0xc117bdb1u; + s[1] ^= s[0] ^ 0xfb4c4c7fu; + s[9] += s[1] + 0x40542f12u; + s[14] ^= (s[9] & s[4]); + s[8] -= s[14]; + s[0] += (s[8] | s[5]); + s[14] += s[0]; + s[3] = (s[3] ^ s[14]) * 0x03c3c7b3u; + s[1] += s[3]; + s[5] ^= s[1] ^ 0x1db7ba5du; + s[15] -= s[5]; + s[13] += s[15] + 0x31cd0b01u; + s[4] ^= s[13] ^ 0xfe8d5080u; + s[7] ^= (s[4] & s[10]); + s[15] -= s[7]; + s[11] = (s[11] ^ s[15]) * 0x7a957f49u; + s[9] ^= s[11]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[11] *= (s[9] | 1u); + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[14] ^= s[5]; + s[10] += s[14]; + s[3] = mh_rotl(s[3], 9u) + s[10]; + s[15] *= (s[3] | 1u); + s[3] += s[15]; + s[14] += s[3]; + s[12] = (s[12] ^ s[14]) * 0x74df9dafu; + s[13] ^= s[12] ^ 0x6234d2f0u; + s[7] *= (s[13] | 1u); + s[0] ^= (s[7] & s[8]); + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] += s[6]; + s[2] += s[12] + 0x7878283cu; + s[3] = (s[3] ^ s[2]) * 0xc395c285u; + s[2] += s[3] + 0x0da9f095u; + s[15] = (s[15] ^ s[2]) * 0x0a11adabu; + s[3] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[3], 29u); + s[10] ^= s[0]; + s[8] *= (s[10] | 1u); + s[15] += s[8] + 0x9a71469fu; + s[14] += s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 22u); + s[8] *= (s[2] | 1u); + s[2] *= (s[8] | 1u); + s[14] = s[14] * 0xf8f0a631u + s[2]; + s[11] += s[14]; + s[0] += s[11]; + s[6] = s[6] * 0xaa299f0fu + s[0]; + s[0] ^= s[6] ^ 0xd0857982u; + s[10] = mh_rotl(s[10] ^ s[0], 27u); + s[12] *= (s[10] | 1u); + s[2] ^= s[12]; + s[0] += s[2]; + s[3] ^= s[0]; + s[2] = (s[2] ^ s[3]) * 0xfd0d9051u; + s[9] = mh_rotl(s[9] ^ s[2], 18u); + s[7] = mh_rotl(s[7] ^ s[9], 17u); + s[5] ^= s[7]; + s[10] = (s[10] ^ s[5]) * 0xde9ff341u; + s[9] ^= s[10] ^ 0xb2e1d8d8u; + s[12] += s[9]; + s[6] ^= s[12]; + s[9] += s[6]; + s[4] = (s[4] ^ s[9]) * 0x3420a8a9u; + s[14] -= s[4]; + s[15] ^= s[14] ^ 0x995ab330u; + s[4] = mh_rotl(s[4] ^ s[15], 17u); + s[6] ^= s[4]; + s[8] = (s[8] ^ s[6]) * 0xa3e9c281u; + s[2] = (s[2] ^ s[8]) * 0xb3f79451u; + s[4] += s[2]; + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = (s[9] ^ s[1]) * 0x4a9cfe2bu; + s[4] ^= s[9]; + s[12] -= s[4]; + s[2] += s[12]; + s[5] = mh_rotl(s[5] ^ s[2], 25u); + s[7] -= s[5]; + s[2] -= s[7]; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[7] ^= (s[9] & s[12]); + s[8] += s[7]; + s[5] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[6] = mh_rotl(s[6] ^ s[7], 13u); + s[14] += s[6]; + s[1] = mh_rotl(s[1] ^ s[14], 27u); + s[13] = mh_rotl(s[13], 21u) + s[1]; + s[15] ^= s[13]; + s[13] ^= s[15] ^ 0x40932bd0u; + s[8] += (s[13] | s[6]); + s[6] += s[8]; + s[7] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 16u) + s[7]; + s[14] -= s[3]; + s[11] += s[14] + 0x2ba58291u; + s[10] += s[11] + 0x25cc7cbau; + s[3] = mh_rotl(s[3], 25u) + s[10]; + s[5] = mh_rotl(s[5] ^ s[3], 8u); + s[12] ^= (s[5] & s[7]); + s[14] *= (s[12] | 1u); + s[6] *= (s[14] | 1u); + s[0] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[0], 8u); + s[10] += s[7]; + s[8] *= (s[10] | 1u); + s[9] = (s[9] ^ s[8]) * 0x1669b1c1u; + s[12] ^= (s[9] & s[13]); + s[14] += s[12] + 0xda1c472du; + s[5] += s[14]; + s[1] = mh_rotl(s[1] ^ s[5], 14u); + s[15] = (s[15] ^ s[1]) * 0x8d0bb03bu; + s[10] += s[15] + 0x3c561da4u; + s[2] -= s[10]; + s[14] ^= s[2] ^ 0xea52ad39u; + s[12] += s[14] + 0x16903f58u; + s[1] -= s[12]; + s[6] = mh_rotl(s[6] ^ s[1], 25u); + s[7] = (s[7] ^ s[6]) * 0xb4a42f9bu; + s[1] ^= s[7]; + s[8] ^= (s[1] & s[4]); + s[13] ^= s[8] ^ 0xb1ef97a0u; + s[4] = mh_rotl(s[4] ^ s[13], 19u); + s[6] ^= (s[4] & s[10]); + s[3] -= s[6]; + s[4] += s[3]; + s[12] *= (s[4] | 1u); + s[8] = mh_rotl(s[8], 18u) + s[12]; + s[2] -= s[8]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] ^= s[0]; + s[9] = mh_rotl(s[9], 28u) + s[6]; + s[12] = (s[12] ^ s[9]) * 0x8a328161u; + s[7] ^= s[12]; + s[11] = (s[11] ^ s[7]) * 0x59795b43u; + s[15] = mh_rotl(s[15], 9u) + s[11]; + s[8] += s[15] + 0x7c995d60u; + s[3] += s[8]; + s[4] = s[4] * 0xfa1378abu + s[3]; + s[3] *= (s[4] | 1u); + s[5] -= s[3]; + s[1] += (s[5] | s[11]); + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[2] = s[2] * 0x9acc1327u + s[7]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 6u); + s[8] ^= s[13]; + s[15] -= s[8]; + s[0] *= (s[15] | 1u); + s[4] *= (s[0] | 1u); + s[14] -= s[4]; + s[15] ^= s[14]; + s[14] *= (s[15] | 1u); + s[3] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[3], 30u); + s[9] += s[14]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[14] ^= s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 23u); + s[5] = mh_rotl(s[5] ^ s[2], 19u); + s[4] *= (s[5] | 1u); + s[7] *= (s[4] | 1u); + s[9] = mh_rotl(s[9] ^ s[7], 15u); + s[13] += s[9]; + s[11] *= (s[13] | 1u); + s[5] = (s[5] ^ s[11]) * 0xde859b27u; + s[11] = s[11] * 0xb564c36bu + s[5]; + s[10] ^= s[11]; + s[9] *= (s[10] | 1u); + s[14] = (s[14] ^ s[9]) * 0x8d89e53du; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = (s[8] ^ s[15]) * 0xe37283afu; + s[14] ^= s[8]; + s[12] ^= s[14]; + s[5] += (s[12] | s[6]); + s[13] += s[5]; + s[9] *= (s[13] | 1u); + s[14] *= (s[9] | 1u); + s[10] = s[10] * 0x5c918de7u + s[14]; + s[3] ^= s[10] ^ 0x6d738cdau; + s[12] += s[3]; + s[9] = (s[9] ^ s[12]) * 0xc4d29b63u; + s[2] *= (s[9] | 1u); + s[6] = (s[6] ^ s[2]) * 0x32887aa7u; + s[11] ^= s[6]; + s[9] += s[11] + 0x1e9643ebu; + s[12] = mh_rotl(s[12], 2u) + s[9]; + s[11] -= s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 18u); + s[2] ^= s[1]; + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[15], 18u); + s[13] ^= s[12]; + s[1] ^= s[13]; + s[5] ^= (s[1] & s[3]); + s[12] += s[5]; + s[11] ^= s[12] ^ 0xf49f879eu; + s[15] ^= s[11]; + s[12] += s[15]; + s[4] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 18u); +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_5(uint* s) { + s[3] += s[0]; + s[6] = (s[6] ^ s[3]) * 0xeb8c24a9u; + s[5] = (s[5] ^ s[6]) * 0xec704d07u; + s[10] += (s[5] | s[14]); + s[14] ^= s[10] ^ 0x62c5c9a6u; + s[8] += (s[14] | s[1]); + s[9] -= s[8]; + s[11] += (s[9] | s[13]); + s[14] ^= (s[11] & s[13]); + s[15] = mh_rotl(s[15], 21u) + s[14]; + s[13] *= (s[15] | 1u); + s[11] ^= (s[13] & s[7]); + s[0] = mh_rotl(s[0] ^ s[11], 24u); + s[9] *= (s[0] | 1u); + s[14] = s[14] * 0xab36a85du + s[9]; + s[0] = s[0] * 0xa839c927u + s[14]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4] ^ 0x83d1d8a6u; + s[3] = (s[3] ^ s[0]) * 0x54110efdu; + s[13] += s[3]; + s[12] = mh_rotl(s[12] ^ s[13], 19u); + s[5] = (s[5] ^ s[12]) * 0xbcdfd83fu; + s[3] = s[3] * 0xb0a88cb1u + s[5]; + s[9] = mh_rotl(s[9], 21u) + s[3]; + s[7] = (s[7] ^ s[9]) * 0x643041d5u; + s[0] += s[7] + 0x014758c4u; + s[5] = (s[5] ^ s[0]) * 0x582df671u; + s[15] = s[15] * 0x31ec0f8du + s[5]; + s[11] = mh_rotl(s[11], 26u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[11], 6u); + s[4] ^= s[13] ^ 0xb0a4a410u; + s[5] *= (s[4] | 1u); + s[9] += s[5]; + s[1] ^= s[9]; + s[9] ^= s[1] ^ 0xc0bebcdfu; + s[2] ^= s[9]; + s[1] += s[2]; + s[13] = (s[13] ^ s[1]) * 0x71bad59du; + s[10] -= s[13]; + s[6] += s[10]; + s[9] = s[9] * 0x79718b5fu + s[6]; + s[2] = (s[2] ^ s[9]) * 0x12ef487du; + s[10] ^= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[11] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 16u); + s[2] = (s[2] ^ s[9]) * 0x56756b3fu; + s[10] = mh_rotl(s[10] ^ s[2], 2u); + s[6] += s[10]; + s[7] = s[7] * 0x0b4e6385u + s[6]; + s[10] += s[7]; + s[13] ^= s[10]; + s[5] -= s[13]; + s[14] ^= s[5]; + s[11] ^= (s[14] & s[0]); + s[6] = s[6] * 0x4fd7e53du + s[11]; + s[1] *= (s[6] | 1u); + s[15] += s[1]; + s[12] ^= s[15]; + s[10] += s[12]; + s[0] = mh_rotl(s[0] ^ s[10], 2u); + s[7] ^= s[0]; + s[14] ^= s[7] ^ 0x2a2f99f7u; + s[0] *= (s[14] | 1u); + s[7] ^= (s[0] & s[1]); + s[4] ^= s[7]; + s[13] += s[4]; + s[0] = (s[0] ^ s[13]) * 0x36833905u; + s[5] -= s[0]; + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[9] = mh_rotl(s[9], 12u) + s[3]; + s[14] ^= s[9]; + s[13] += s[14] + 0xe3bd2b0fu; + s[12] += s[13] + 0x4413899eu; + s[10] ^= s[12]; + s[1] ^= s[10]; + s[10] = mh_rotl(s[10], 31u) + s[1]; + s[8] = s[8] * 0xf8854e6du + s[10]; + s[2] ^= s[8] ^ 0x1391c2f2u; + s[4] = mh_rotl(s[4], 26u) + s[2]; + s[7] ^= s[4] ^ 0xb7b8bc86u; + s[3] *= (s[7] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] ^= s[1]; + s[1] -= s[13]; + s[10] += s[1]; + s[2] = mh_rotl(s[2] ^ s[10], 5u); + s[6] += s[2] + 0x4e72cc89u; + s[12] ^= (s[6] & s[1]); + s[0] -= s[12]; + s[6] = (s[6] ^ s[0]) * 0xfdbe52d7u; + s[1] -= s[6]; + s[8] = mh_rotl(s[8], 30u) + s[1]; + s[5] += s[8]; + s[8] ^= (s[5] & s[13]); + s[15] += (s[8] | s[1]); + s[12] *= (s[15] | 1u); + s[15] *= (s[12] | 1u); + s[2] += s[15]; + s[5] += (s[2] | s[6]); + s[6] += (s[5] | s[4]); + s[14] = mh_rotl(s[14] ^ s[6], 8u); + s[0] *= (s[14] | 1u); + s[5] += s[0] + 0x09c67ebeu; + s[15] ^= s[5] ^ 0x156bc1ccu; + s[4] = mh_rotl(s[4], 28u) + s[15]; + s[7] += s[4]; + s[8] ^= s[7]; + s[6] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[6], 27u); + s[8] ^= s[4]; + s[15] = (s[15] ^ s[8]) * 0xa06ef0edu; + s[13] = mh_rotl(s[13] ^ s[15], 21u); + s[7] = mh_rotl(s[7] ^ s[13], 7u); + s[9] = (s[9] ^ s[7]) * 0x6d635cb5u; + s[15] += s[9]; + s[14] -= s[15]; + s[7] = mh_rotl(s[7] ^ s[14], 28u); + s[0] = mh_rotl(s[0], 9u) + s[7]; + s[8] ^= s[0]; + s[4] -= s[8]; + s[15] = mh_rotl(s[15], 6u) + s[4]; + s[11] = mh_rotl(s[11] ^ s[15], 15u); + s[7] -= s[11]; + s[12] = (s[12] ^ s[7]) * 0x01fed389u; + s[8] += s[12]; + s[14] -= s[8]; + s[1] = mh_rotl(s[1] ^ s[14], 28u); + s[5] *= (s[1] | 1u); + s[12] += s[5]; + s[14] += s[12]; + s[10] = mh_rotl(s[10] ^ s[14], 3u); + s[5] = (s[5] ^ s[10]) * 0xad88f2d5u; + s[1] += s[5]; + s[11] ^= s[1] ^ 0x77926639u; + s[9] ^= s[11]; + s[12] -= s[9]; + s[8] = s[8] * 0xfa22d721u + s[12]; + s[0] ^= s[8] ^ 0xe9e4f8edu; + s[5] = mh_rotl(s[5], 17u) + s[0]; + s[11] += s[5]; + s[1] ^= s[11]; + s[13] ^= s[1] ^ 0xfaae7919u; + s[1] += (s[13] | s[0]); + s[9] = mh_rotl(s[9] ^ s[1], 22u); + s[3] *= (s[9] | 1u); + s[10] ^= s[3]; + s[5] -= s[10]; + s[2] += s[5]; + s[14] = mh_rotl(s[14] ^ s[2], 5u); + s[4] ^= s[14]; + s[5] *= (s[4] | 1u); + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[15] = (s[15] ^ s[5]) * 0x34c09009u; + s[8] *= (s[15] | 1u); + s[12] ^= (s[8] & s[13]); + s[4] += s[12]; + s[12] += s[4] + 0xe0c44ae5u; + s[8] = mh_rotl(s[8], 12u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[8], 11u); + s[2] ^= s[12]; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[13] += s[0] + 0x7a0818e1u; + s[12] = mh_rotl(s[12], 2u) + s[13]; + s[8] ^= (s[12] & s[1]); + s[6] ^= s[8]; + s[8] *= (s[6] | 1u); + s[14] += s[8]; + s[9] = mh_rotl(s[9] ^ s[14], 7u); + s[14] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[14], 2u); + s[12] ^= s[9]; + s[3] ^= s[12] ^ 0xfaa7ba68u; + s[10] = mh_rotl(s[10], 26u) + s[3]; + s[4] ^= s[10] ^ 0x69fb8372u; + s[8] ^= s[4]; + s[14] = (s[14] ^ s[8]) * 0xd0560d4fu; + s[5] ^= s[14]; + s[0] *= (s[5] | 1u); + s[10] ^= (s[0] & s[13]); + s[7] += s[10]; + s[8] = s[8] * 0xf397c40du + s[7]; + s[4] ^= s[8] ^ 0x8bf8d86au; + s[13] ^= s[4] ^ 0x8bc1b817u; + s[0] = mh_rotl(s[0], 28u) + s[13]; + s[4] += s[0]; + s[10] ^= s[4]; + s[12] += s[10]; + s[0] = mh_rotl(s[0] ^ s[12], 18u); + s[1] = (s[1] ^ s[0]) * 0x587d6993u; + s[10] = mh_rotl(s[10], 14u) + s[1]; + s[3] ^= s[10] ^ 0xe428141au; + s[13] *= (s[3] | 1u); + s[12] = mh_rotl(s[12] ^ s[13], 22u); + s[14] -= s[12]; + s[1] -= s[14]; + s[6] = mh_rotl(s[6], 31u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[6], 16u); + s[6] = s[6] * 0xd2da54cdu + s[11]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[4] += s[12] + 0x6e5c8780u; + s[15] ^= s[4] ^ 0x437bad36u; + s[9] = mh_rotl(s[9], 7u) + s[15]; + s[11] = s[11] * 0x68e0eacbu + s[9]; + s[6] += s[11]; + s[5] -= s[6]; + s[12] ^= (s[5] & s[10]); + s[13] = (s[13] ^ s[12]) * 0x613ad747u; + s[2] += s[13] + 0x16b1a53du; + s[3] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[15] += s[14] + 0x33619f2eu; + s[6] ^= s[15]; + s[15] = mh_rotl(s[15], 24u) + s[6]; + s[12] += s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[9] += s[10]; + s[4] *= (s[9] | 1u); + s[6] ^= s[4]; + s[13] -= s[6]; + s[1] *= (s[13] | 1u); + s[11] *= (s[1] | 1u); + s[7] *= (s[11] | 1u); + s[13] -= s[7]; + s[0] = (s[0] ^ s[13]) * 0xfeca92ddu; + s[9] = mh_rotl(s[9] ^ s[0], 24u); + s[14] ^= (s[9] & s[10]); + s[0] -= s[14]; + s[5] ^= s[0]; + s[9] ^= s[5]; + s[5] = (s[5] ^ s[9]) * 0xe0456a5du; + s[11] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[11], 29u); + s[11] = mh_rotl(s[11] ^ s[10], 24u); + s[0] += (s[11] | s[15]); + s[2] ^= s[0] ^ 0x4625da37u; + s[6] = mh_rotl(s[6] ^ s[2], 26u); + s[3] -= s[6]; + s[9] += s[3]; + s[4] ^= (s[9] & s[12]); + s[7] *= (s[4] | 1u); + s[1] -= s[7]; + s[3] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 23u); + s[6] = (s[6] ^ s[2]) * 0x3bbae9d3u; + s[1] = mh_rotl(s[1] ^ s[6], 10u); + s[8] ^= s[1]; + s[15] = (s[15] ^ s[8]) * 0xb5172567u; + s[3] += s[15]; + s[0] ^= (s[3] & s[5]); + s[2] = (s[2] ^ s[0]) * 0xbfe80ff1u; + s[14] -= s[2]; + s[6] -= s[14]; + s[0] = mh_rotl(s[0] ^ s[6], 24u); + s[10] = s[10] * 0x965ee7ebu + s[0]; + s[15] -= s[10]; + s[0] += s[15]; + s[4] += s[0]; + s[3] = mh_rotl(s[3], 14u) + s[4]; + s[12] += (s[3] | s[9]); + s[5] = mh_rotl(s[5] ^ s[12], 3u); + s[9] *= (s[5] | 1u); + s[5] += s[9]; + s[14] = (s[14] ^ s[5]) * 0xb64f271du; + s[9] -= s[14]; + s[8] *= (s[9] | 1u); + s[3] = (s[3] ^ s[8]) * 0x69f51253u; + s[13] -= s[3]; + s[12] ^= s[13] ^ 0x8ee490b4u; + s[13] = mh_rotl(s[13] ^ s[12], 27u); + s[14] ^= s[13] ^ 0xbcfac44eu; + s[15] += s[14]; + s[1] = mh_rotl(s[1], 6u) + s[15]; + s[14] += s[1]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[10] += (s[6] | s[4]); + s[6] *= (s[10] | 1u); + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[8] = mh_rotl(s[8], 21u) + s[13]; + s[3] -= s[8]; + s[12] = mh_rotl(s[12] ^ s[3], 9u); + s[10] += s[12] + 0x346fb7eeu; + s[3] -= s[10]; + s[12] += s[3] + 0xc936ca56u; + s[3] -= s[12]; + s[5] = mh_rotl(s[5], 2u) + s[3]; + s[11] ^= s[5]; + s[12] ^= s[11] ^ 0x46abb8ffu; + s[10] += s[12]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[11] = mh_rotl(s[11], 31u) + s[2]; + s[7] += (s[11] | s[4]); + s[3] ^= s[7] ^ 0x8c92b860u; + s[6] += s[3]; + s[11] *= (s[6] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 1u); + s[9] = mh_rotl(s[9], 22u) + s[8]; + s[5] ^= s[9]; + s[9] ^= s[5] ^ 0x6d49ae98u; + s[12] *= (s[9] | 1u); + s[0] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[0]; + s[10] = s[10] * 0xfceded15u + s[5]; + s[6] ^= s[10]; + s[7] += s[6]; + s[10] = mh_rotl(s[10], 26u) + s[7]; + s[13] += s[10]; + s[15] ^= (s[13] & s[10]); + s[10] ^= s[15] ^ 0x10494cd6u; + s[13] = s[13] * 0x043625d1u + s[10]; + s[5] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[5], 5u); + s[2] = (s[2] ^ s[7]) * 0x1276600bu; + s[8] = (s[8] ^ s[2]) * 0xac53054bu; + s[10] ^= s[8] ^ 0xd5306663u; + s[15] += s[10]; + s[8] *= (s[15] | 1u); + s[0] = (s[0] ^ s[8]) * 0x12dd02dbu; + s[1] = mh_rotl(s[1] ^ s[0], 29u); + s[4] = mh_rotl(s[4] ^ s[1], 12u); + s[13] = mh_rotl(s[13], 21u) + s[4]; + s[4] = (s[4] ^ s[13]) * 0xd9d84eddu; + s[2] += s[4]; + s[12] -= s[2]; + s[6] ^= s[12] ^ 0xa6690db7u; + s[14] += s[6]; + s[5] += s[14] + 0x3d839e2bu; + s[12] = mh_rotl(s[12] ^ s[5], 18u); + s[10] ^= (s[12] & s[9]); + s[14] = (s[14] ^ s[10]) * 0x8735918du; + s[0] = mh_rotl(s[0] ^ s[14], 25u); + s[14] += s[0] + 0x4032aa8du; + s[6] = mh_rotl(s[6], 6u) + s[14]; + s[1] ^= s[6] ^ 0x2c453b82u; + s[0] = (s[0] ^ s[1]) * 0x2a9abf35u; + s[2] -= s[0]; + s[4] ^= (s[2] & s[11]); + s[2] *= (s[4] | 1u); + s[5] ^= s[2]; + s[6] = mh_rotl(s[6] ^ s[5], 17u); + s[14] ^= s[6] ^ 0xb98cf2eeu; + s[0] ^= s[14]; + s[12] += s[0] + 0x37fc2a78u; + s[10] += s[12]; + s[12] = (s[12] ^ s[10]) * 0xb13a0e53u; + s[9] = (s[9] ^ s[12]) * 0x59d4dc61u; + s[10] += s[9] + 0xed0d9cecu; + s[6] = mh_rotl(s[6], 27u) + s[10]; + s[10] ^= s[6]; + s[1] += s[10] + 0x38911ae4u; + s[2] = mh_rotl(s[2], 4u) + s[1]; + s[3] += (s[2] | s[6]); + s[15] = s[15] * 0xa10c5147u + s[3]; + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[3] -= s[9]; + s[4] ^= s[3] ^ 0x09b8cee2u; + s[13] += (s[4] | s[8]); + s[14] -= s[13]; + s[10] ^= s[14] ^ 0xde5b028du; + s[14] *= (s[10] | 1u); + s[4] += s[14] + 0xbebd25ffu; + s[11] ^= s[4]; + s[15] += s[11]; + s[3] ^= s[15] ^ 0x0157f354u; + s[2] = (s[2] ^ s[3]) * 0x2e6b681du; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[11] += (s[0] | s[7]); + s[9] = mh_rotl(s[9] ^ s[11], 28u); + s[1] ^= (s[9] & s[5]); + s[2] = (s[2] ^ s[1]) * 0x8c67acb5u; + s[9] = mh_rotl(s[9] ^ s[2], 15u); + s[5] += (s[9] | s[14]); + s[7] += s[5]; + s[10] += (s[7] | s[15]); + s[12] = mh_rotl(s[12] ^ s[10], 12u); + s[10] = (s[10] ^ s[12]) * 0x8321a9edu; + s[15] ^= s[10] ^ 0x2bb47d41u; + s[1] += s[15] + 0xf55a878du; + s[3] ^= s[1] ^ 0x5f495580u; + s[12] += s[3]; + s[15] -= s[12]; + s[10] += s[15]; + s[14] ^= s[10]; + s[12] = (s[12] ^ s[14]) * 0x6982d931u; + s[6] ^= s[12] ^ 0x5a0647a9u; + s[3] ^= s[6]; + s[11] = mh_rotl(s[11] ^ s[3], 28u); + s[6] = mh_rotl(s[6], 9u) + s[11]; + s[9] = mh_rotl(s[9], 17u) + s[6]; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[13] ^= s[15]; + s[2] += s[13] + 0x161113b3u; + s[5] ^= s[2] ^ 0x51604bb3u; + s[13] = mh_rotl(s[13], 20u) + s[5]; + s[7] += s[13] + 0x485a1932u; + s[14] -= s[7]; + s[12] ^= (s[14] & s[3]); + s[14] = mh_rotl(s[14], 29u) + s[12]; + s[7] -= s[14]; + s[9] ^= s[7]; + s[14] ^= (s[9] & s[12]); + s[8] = (s[8] ^ s[14]) * 0xa3da88b9u; + s[6] = (s[6] ^ s[8]) * 0xdd3e9ca3u; + s[12] ^= s[6]; + s[4] += (s[12] | s[13]); + s[13] = (s[13] ^ s[4]) * 0x0658106fu; + s[10] = (s[10] ^ s[13]) * 0x49f6cb31u; + s[3] ^= s[10] ^ 0x3342d583u; + s[13] = mh_rotl(s[13], 20u) + s[3]; + s[14] ^= s[13] ^ 0xc5f67216u; + s[4] = (s[4] ^ s[14]) * 0xc7b5f0fdu; + s[2] = (s[2] ^ s[4]) * 0xfec902c3u; + s[10] += s[2]; + s[5] ^= (s[10] & s[8]); + s[2] ^= s[5]; + s[11] ^= s[2]; + s[0] ^= s[11] ^ 0x8646d6d8u; + s[13] += s[0] + 0x4fc0a99fu; + s[10] = (s[10] ^ s[13]) * 0x34655acfu; + s[12] = mh_rotl(s[12], 15u) + s[10]; + s[3] = mh_rotl(s[3], 31u) + s[12]; + s[11] ^= s[3] ^ 0xece30db7u; + s[13] += s[11] + 0x723a0b0eu; + s[14] -= s[13]; + s[1] += s[14]; + s[10] ^= s[1]; + s[12] *= (s[10] | 1u); + s[4] ^= s[12]; + s[13] ^= s[4]; + s[0] += s[13]; + s[4] -= s[0]; + s[5] *= (s[4] | 1u); + s[14] += s[5]; + s[15] = (s[15] ^ s[14]) * 0xca24c253u; + s[0] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[0], 3u); + s[13] = (s[13] ^ s[8]) * 0x4c689903u; + s[3] ^= s[13]; + s[5] ^= s[3]; + s[4] += s[5] + 0xd0e100c0u; + s[9] ^= (s[4] & s[6]); + s[10] = mh_rotl(s[10] ^ s[9], 27u); + s[0] = s[0] * 0xec7a3889u + s[10]; + s[3] -= s[0]; + s[1] ^= s[3] ^ 0x61331fd7u; + s[9] = mh_rotl(s[9] ^ s[1], 15u); + s[0] ^= s[9]; + s[7] += s[0] + 0xa7848bacu; + s[11] += s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 6u); + s[11] -= s[2]; + s[3] -= s[11]; + s[13] ^= s[3]; + s[7] = (s[7] ^ s[13]) * 0xd454fc59u; + s[13] ^= (s[7] & s[1]); + s[9] += s[13] + 0xdaba595au; + s[11] ^= s[9] ^ 0x0dbe4c62u; + s[6] -= s[11]; + s[7] = s[7] * 0x64236413u + s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 19u); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[1] += s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[10] = mh_rotl(s[10] ^ s[14], 24u); + s[8] = (s[8] ^ s[10]) * 0x11582fa5u; + s[0] -= s[8]; + s[3] ^= s[0] ^ 0xe88102d4u; + s[5] = mh_rotl(s[5], 16u) + s[3]; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[3] = mh_rotl(s[3], 1u) + s[2]; + s[4] -= s[3]; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[0], 10u); + s[12] += s[3]; + s[8] = mh_rotl(s[8] ^ s[12], 24u); + s[9] = mh_rotl(s[9], 31u) + s[8]; + s[7] -= s[9]; + s[10] ^= s[7]; + s[4] += (s[10] | s[2]); + s[5] ^= s[4]; + s[1] += s[5] + 0xa17d3697u; + s[4] = mh_rotl(s[4] ^ s[1], 13u); + s[12] ^= s[4]; + s[7] ^= s[12]; + s[14] = mh_rotl(s[14] ^ s[7], 25u); + s[4] = mh_rotl(s[4], 28u) + s[14]; + s[14] -= s[4]; + s[12] ^= s[14]; + s[6] -= s[12]; + s[5] = mh_rotl(s[5] ^ s[6], 5u); + s[2] += s[5] + 0x6f8f3046u; + s[9] += s[2]; + s[8] = (s[8] ^ s[9]) * 0xbcb4183du; + s[11] += s[8]; + s[13] *= (s[11] | 1u); + s[15] += s[13]; + s[8] = (s[8] ^ s[15]) * 0x4f5a0a23u; + s[13] += s[8] + 0x26061a70u; + s[3] ^= s[13] ^ 0x9351deb0u; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[5] += s[13]; + s[3] -= s[5]; + s[13] += s[3]; + s[7] = (s[7] ^ s[13]) * 0xc9cd8fcdu; + s[10] *= (s[7] | 1u); + s[7] -= s[10]; + s[5] += s[7]; + s[1] += s[5]; + s[15] ^= (s[1] & s[8]); + s[9] -= s[15]; + s[10] = mh_rotl(s[10], 24u) + s[9]; + s[6] = mh_rotl(s[6], 1u) + s[10]; + s[3] ^= s[6]; + s[0] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[0], 20u); + s[5] += s[12]; + s[0] = s[0] * 0x2418a23du + s[5]; + s[11] = (s[11] ^ s[0]) * 0x6c58993bu; + s[14] ^= s[11] ^ 0x4a8ca854u; + s[15] *= (s[14] | 1u); + s[0] += s[15]; + s[11] = mh_rotl(s[11] ^ s[0], 17u); + s[5] -= s[11]; + s[6] *= (s[5] | 1u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[4] ^= s[10]; + s[14] = mh_rotl(s[14], 28u) + s[4]; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x54779a6fu; + s[4] += s[9]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 22u); + s[12] += (s[8] | s[7]); + s[8] = mh_rotl(s[8], 7u) + s[12]; + s[14] -= s[8]; + s[3] ^= s[14] ^ 0x5bc9132cu; + s[1] ^= s[3] ^ 0xa3e75626u; + s[8] = (s[8] ^ s[1]) * 0x4a1396f7u; + s[5] = mh_rotl(s[5] ^ s[8], 27u); + s[11] += s[5]; + s[4] = mh_rotl(s[4] ^ s[11], 8u); + s[7] = (s[7] ^ s[4]) * 0x88273613u; + s[15] += s[7]; + s[1] -= s[15]; + s[12] ^= (s[1] & s[9]); + s[14] += s[12]; + s[7] = s[7] * 0x5081a79du + s[14]; + s[6] = mh_rotl(s[6], 14u) + s[7]; + s[3] ^= s[6]; + s[10] = s[10] * 0x1b283fddu + s[3]; + s[6] = (s[6] ^ s[10]) * 0x73e5e60fu; + s[3] = (s[3] ^ s[6]) * 0xc9863803u; + s[1] ^= s[3]; + s[15] -= s[1]; + s[5] ^= (s[15] & s[7]); + s[14] += s[5]; + s[8] += s[14] + 0x185096cdu; + s[11] ^= s[8] ^ 0x9ef04aa3u; + s[5] -= s[11]; + s[2] = mh_rotl(s[2] ^ s[5], 18u); + s[9] += s[2]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[15], 27u); + s[10] -= s[0]; + s[2] = mh_rotl(s[2] ^ s[10], 7u); + s[15] += s[2] + 0x442bb076u; + s[8] ^= (s[15] & s[13]); + s[14] = mh_rotl(s[14], 31u) + s[8]; + s[15] ^= s[14]; + s[4] -= s[15]; + s[15] *= (s[4] | 1u); + s[11] = mh_rotl(s[11], 3u) + s[15]; + s[1] *= (s[11] | 1u); + s[11] = mh_rotl(s[11] ^ s[1], 19u); + s[3] = mh_rotl(s[3] ^ s[11], 21u); + s[1] = (s[1] ^ s[3]) * 0x6cbc5bb9u; + s[6] += s[1]; + s[3] = s[3] * 0xe2cb6cebu + s[6]; + s[1] += s[3]; + s[13] = mh_rotl(s[13], 19u) + s[1]; + s[3] ^= s[13]; + s[11] -= s[3]; + s[0] += s[11]; + s[8] *= (s[0] | 1u); + s[11] += s[8] + 0x6853a703u; + s[9] ^= s[11]; + s[10] += s[9]; + s[12] = (s[12] ^ s[10]) * 0x9a3ac6dbu; + s[10] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 8u); + s[2] ^= s[13]; + s[10] -= s[2]; + s[12] = (s[12] ^ s[10]) * 0x833838d1u; + s[9] = mh_rotl(s[9], 3u) + s[12]; + s[2] ^= s[9]; + s[12] ^= s[2]; + s[11] = (s[11] ^ s[12]) * 0x2370b681u; + s[9] = (s[9] ^ s[11]) * 0x7f4b0295u; + s[11] ^= s[9]; + s[9] = s[9] * 0x06b0dc0du + s[11]; + s[5] ^= s[9]; + s[12] = mh_rotl(s[12] ^ s[5], 19u); + s[4] *= (s[12] | 1u); + s[3] ^= (s[4] & s[8]); + s[6] += s[3]; + s[1] += s[6] + 0xc6e02045u; + s[9] += s[1] + 0xf8f493d8u; + s[12] -= s[9]; + s[2] += s[12]; + s[14] += s[2]; + s[10] = mh_rotl(s[10], 29u) + s[14]; + s[7] += s[10]; + s[12] += s[7]; + s[7] += s[12]; + s[12] -= s[7]; + s[3] ^= s[12]; + s[11] ^= s[3] ^ 0xd6f7214fu; + s[3] ^= s[11]; + s[15] = (s[15] ^ s[3]) * 0x0f25c855u; + s[5] -= s[15]; + s[1] ^= s[5]; + s[0] += s[1]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[10] = (s[10] ^ s[15]) * 0x286496e5u; + s[12] += s[10] + 0x3e03a265u; + s[1] -= s[12]; + s[3] -= s[1]; + s[14] ^= s[3] ^ 0xdf78ab91u; + s[10] = s[10] * 0x64a3bcb1u + s[14]; + s[11] += s[10]; + s[1] += s[11]; + s[11] ^= s[1] ^ 0x163d1a0fu; + s[15] = s[15] * 0xfcc7a02bu + s[11]; + s[8] -= s[15]; + s[3] += s[8] + 0x2fc585d7u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[4] = (s[4] ^ s[9]) * 0xf91a42afu; + s[13] += s[4]; + s[15] = s[15] * 0xb3102455u + s[13]; + s[11] -= s[15]; + s[12] ^= s[11]; + s[14] = (s[14] ^ s[12]) * 0xd7e9b5afu; + s[5] = mh_rotl(s[5], 1u) + s[14]; + s[2] += s[5]; + s[0] ^= s[2]; + s[6] = (s[6] ^ s[0]) * 0xf95b573du; + s[8] = (s[8] ^ s[6]) * 0x115cc1f5u; + s[3] = s[3] * 0x7bb26c65u + s[8]; + s[1] ^= s[3]; + s[9] = s[9] * 0xcdee5da3u + s[1]; + s[4] *= (s[9] | 1u); + s[11] += s[4] + 0xb5fccc2bu; + s[2] += s[11] + 0x5e38801fu; + s[11] = (s[11] ^ s[2]) * 0x397014ebu; + s[14] = mh_rotl(s[14] ^ s[11], 4u); + s[3] = (s[3] ^ s[14]) * 0xbbf780efu; + s[10] ^= s[3]; + s[4] ^= s[10] ^ 0x4abb5f0au; + s[10] ^= (s[4] & s[6]); + s[15] += s[10]; + s[9] ^= (s[15] & s[4]); + s[11] = mh_rotl(s[11], 20u) + s[9]; + s[13] ^= s[11]; + s[5] += s[13] + 0x104bed55u; + s[6] = s[6] * 0x2b9b1395u + s[5]; + s[7] = (s[7] ^ s[6]) * 0xdd08fdebu; + s[9] = (s[9] ^ s[7]) * 0x46d23ed5u; + s[3] = s[3] * 0xcd451ba9u + s[9]; + s[11] ^= s[3]; + s[10] += s[11] + 0xeb7a45b8u; + s[0] ^= s[10]; + s[7] += s[0]; + s[15] = mh_rotl(s[15], 2u) + s[7]; + s[12] -= s[15]; + s[8] ^= s[12]; + s[1] += s[8]; + s[5] = (s[5] ^ s[1]) * 0xc6f4ee59u; + s[14] *= (s[5] | 1u); + s[7] = mh_rotl(s[7] ^ s[14], 31u); + s[12] -= s[7]; + s[13] += s[12]; + s[1] = mh_rotl(s[1] ^ s[13], 30u); + s[14] -= s[1]; + s[1] ^= s[14]; + s[6] *= (s[1] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[8] = mh_rotl(s[8], 15u) + s[15]; + s[15] += s[8] + 0x8e6a0f17u; + s[9] += (s[15] | s[12]); + s[11] ^= s[9]; + s[6] *= (s[11] | 1u); + s[7] += s[6] + 0xe553414fu; + s[8] = (s[8] ^ s[7]) * 0xab271281u; + s[12] += s[8]; + s[14] *= (s[12] | 1u); + s[9] ^= s[14]; + s[5] ^= s[9]; + s[7] += (s[5] | s[2]); + s[3] += s[7]; + s[11] -= s[3]; + s[0] = (s[0] ^ s[11]) * 0x2f8b8657u; + s[1] += s[0]; + s[15] = mh_rotl(s[15], 15u) + s[1]; + s[0] = s[0] * 0xf98801d1u + s[15]; + s[10] = s[10] * 0xc3d74db5u + s[0]; + s[15] -= s[10]; + s[13] -= s[15]; + s[4] = mh_rotl(s[4], 11u) + s[13]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[14]; + s[5] += s[11] + 0x14945643u; + s[13] = (s[13] ^ s[5]) * 0xade16d23u; + s[8] ^= s[13] ^ 0x7234c3c3u; + s[15] = mh_rotl(s[15], 30u) + s[8]; + s[2] = (s[2] ^ s[15]) * 0x79ec043du; + s[7] ^= s[2]; + s[15] *= (s[7] | 1u); + s[9] = mh_rotl(s[9], 24u) + s[15]; + s[7] *= (s[9] | 1u); + s[1] ^= s[7]; + s[9] = (s[9] ^ s[1]) * 0x89ea4addu; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[1] -= s[0]; + s[9] += s[1] + 0x0690537cu; + s[1] += s[9] + 0xe5486bebu; + s[6] = mh_rotl(s[6] ^ s[1], 19u); + s[15] -= s[6]; +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_6(uint* s) { + s[11] += s[0]; + s[13] += (s[11] | s[0]); + s[14] ^= s[13]; + s[15] += (s[14] | s[8]); + s[0] = mh_rotl(s[0], 1u) + s[15]; + s[15] *= (s[0] | 1u); + s[7] += (s[15] | s[14]); + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[15] = mh_rotl(s[15], 24u) + s[1]; + s[6] = mh_rotl(s[6], 28u) + s[15]; + s[12] ^= (s[6] & s[7]); + s[6] = mh_rotl(s[6], 15u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 30u); + s[7] ^= s[15]; + s[5] ^= s[7] ^ 0x1874ccb9u; + s[13] = (s[13] ^ s[5]) * 0xead971f1u; + s[2] += s[13]; + s[8] *= (s[2] | 1u); + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[2] += (s[15] | s[4]); + s[13] ^= (s[2] & s[6]); + s[15] += s[13]; + s[3] += s[15] + 0xeea76305u; + s[15] = mh_rotl(s[15], 9u) + s[3]; + s[1] += s[15]; + s[9] *= (s[1] | 1u); + s[5] += s[9]; + s[1] = mh_rotl(s[1] ^ s[5], 17u); + s[11] += s[1]; + s[2] += s[11]; + s[6] += s[2]; + s[1] = (s[1] ^ s[6]) * 0x4f9b8f91u; + s[8] = mh_rotl(s[8] ^ s[1], 31u); + s[7] = (s[7] ^ s[8]) * 0xf1d427b1u; + s[6] += s[7]; + s[15] = mh_rotl(s[15] ^ s[6], 7u); + s[10] = mh_rotl(s[10], 20u) + s[15]; + s[6] -= s[10]; + s[10] = (s[10] ^ s[6]) * 0x286194bfu; + s[0] *= (s[10] | 1u); + s[4] = (s[4] ^ s[0]) * 0xc953f135u; + s[9] += s[4] + 0x6ba4448eu; + s[4] = (s[4] ^ s[9]) * 0xb1856abdu; + s[5] ^= s[4] ^ 0xf42a5bdcu; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[3] += s[4]; + s[10] += s[3]; + s[6] += (s[10] | s[5]); + s[12] += s[6]; + s[5] ^= s[12] ^ 0xc802dfebu; + s[4] = (s[4] ^ s[5]) * 0x412d8fbfu; + s[14] ^= s[4] ^ 0x9e40e380u; + s[11] = (s[11] ^ s[14]) * 0xed0a749fu; + s[15] *= (s[11] | 1u); + s[14] = (s[14] ^ s[15]) * 0x23a1ec6du; + s[3] += s[14]; + s[12] ^= s[3] ^ 0xc9907e2bu; + s[1] = s[1] * 0x5bbedaf5u + s[12]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[8] = (s[8] ^ s[6]) * 0x600cfb09u; + s[14] += s[8]; + s[12] += s[14] + 0x78988768u; + s[4] = s[4] * 0xa626cf43u + s[12]; + s[13] = (s[13] ^ s[4]) * 0x54dc81e3u; + s[0] *= (s[13] | 1u); + s[13] -= s[0]; + s[8] += (s[13] | s[9]); + s[1] ^= s[8]; + s[6] = (s[6] ^ s[1]) * 0xd367f779u; + s[7] -= s[6]; + s[13] += s[7]; + s[6] = s[6] * 0xe7cffbcdu + s[13]; + s[3] = (s[3] ^ s[6]) * 0xfa1b7e5du; + s[13] = mh_rotl(s[13], 31u) + s[3]; + s[2] ^= s[13]; + s[4] *= (s[2] | 1u); + s[3] ^= s[4]; + s[4] -= s[3]; + s[15] += s[4]; + s[8] = (s[8] ^ s[15]) * 0x9a841483u; + s[5] ^= s[8]; + s[15] ^= (s[5] & s[0]); + s[4] += s[15]; + s[9] = mh_rotl(s[9] ^ s[4], 14u); + s[12] *= (s[9] | 1u); + s[10] += (s[12] | s[3]); + s[2] = mh_rotl(s[2] ^ s[10], 19u); + s[5] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 17u); + s[7] ^= s[14]; + s[12] += s[7]; + s[8] = s[8] * 0x563fd2c3u + s[12]; + s[13] = mh_rotl(s[13], 6u) + s[8]; + s[11] += s[13] + 0xfe09487du; + s[14] -= s[11]; + s[2] -= s[14]; + s[0] += s[2] + 0x134d34fbu; + s[7] -= s[0]; + s[13] = mh_rotl(s[13], 20u) + s[7]; + s[15] = mh_rotl(s[15] ^ s[13], 12u); + s[9] += s[15]; + s[0] -= s[9]; + s[15] ^= s[0] ^ 0xd26cf159u; + s[12] += s[15] + 0x0c050d95u; + s[3] = s[3] * 0x3f90fd07u + s[12]; + s[7] -= s[3]; + s[13] = (s[13] ^ s[7]) * 0xbb3ea981u; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[6] ^= (s[8] & s[4]); + s[7] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[7], 23u); + s[4] *= (s[6] | 1u); + s[6] -= s[4]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[11] -= s[12]; + s[5] -= s[11]; + s[4] = (s[4] ^ s[5]) * 0xb0a03621u; + s[15] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[15]; + s[15] ^= s[0]; + s[8] += s[15] + 0x15f21a1au; + s[2] ^= s[8]; + s[13] = mh_rotl(s[13], 22u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[13], 4u); + s[4] += s[2]; + s[11] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 16u) + s[11]; + s[14] *= (s[15] | 1u); + s[1] += s[14]; + s[5] += s[1]; + s[13] ^= s[5] ^ 0x4d858e87u; + s[12] *= (s[13] | 1u); + s[10] = mh_rotl(s[10], 19u) + s[12]; + s[5] += s[10]; + s[15] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[15], 30u); + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[10] -= s[3]; + s[11] = mh_rotl(s[11], 5u) + s[10]; + s[12] ^= s[11]; + s[7] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[7], 2u); + s[6] ^= s[12]; + s[11] -= s[6]; + s[3] += s[11] + 0x15d75f72u; + s[6] += s[3]; + s[4] *= (s[6] | 1u); + s[3] -= s[4]; + s[12] += s[3] + 0x02d9ef35u; + s[0] -= s[12]; + s[15] ^= s[0] ^ 0xa34641eeu; + s[7] *= (s[15] | 1u); + s[8] ^= s[7] ^ 0x5c0473a2u; + s[10] *= (s[8] | 1u); + s[4] *= (s[10] | 1u); + s[12] ^= s[4]; + s[5] += s[12]; + s[15] = mh_rotl(s[15], 29u) + s[5]; + s[0] = mh_rotl(s[0], 7u) + s[15]; + s[15] += s[0]; + s[11] ^= s[15]; + s[4] += (s[11] | s[13]); + s[9] = mh_rotl(s[9] ^ s[4], 5u); + s[11] -= s[9]; + s[7] += s[11]; + s[5] *= (s[7] | 1u); + s[12] += s[5]; + s[3] *= (s[12] | 1u); + s[0] += s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[13] = (s[13] ^ s[10]) * 0x3a550111u; + s[15] += s[13]; + s[1] *= (s[15] | 1u); + s[2] = s[2] * 0x95352fdfu + s[1]; + s[8] = (s[8] ^ s[2]) * 0x269301a1u; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[5] -= s[4]; + s[10] *= (s[5] | 1u); + s[7] += s[10] + 0x1d87f038u; + s[5] = (s[5] ^ s[7]) * 0xecbf1c27u; + s[11] -= s[5]; + s[2] -= s[11]; + s[8] ^= s[2]; + s[6] ^= s[8]; + s[7] -= s[6]; + s[13] -= s[7]; + s[2] -= s[13]; + s[3] ^= s[2]; + s[5] = (s[5] ^ s[3]) * 0x8ef62aebu; + s[7] = (s[7] ^ s[5]) * 0x594b5f33u; + s[12] += s[7]; + s[13] = (s[13] ^ s[12]) * 0xdaa86fd9u; + s[6] += s[13]; + s[13] ^= s[6]; + s[7] += s[13]; + s[5] = mh_rotl(s[5], 17u) + s[7]; + s[4] = (s[4] ^ s[5]) * 0x19723005u; + s[8] -= s[4]; + s[12] ^= s[8]; + s[11] ^= s[12]; + s[8] ^= s[11] ^ 0x0739c480u; + s[2] ^= s[8]; + s[15] = (s[15] ^ s[2]) * 0xc15f8403u; + s[14] -= s[15]; + s[9] += s[14] + 0x2b0ab64au; + s[1] ^= s[9]; + s[9] += (s[1] | s[6]); + s[15] += s[9]; + s[13] += s[15]; + s[6] ^= s[13]; + s[9] ^= s[6] ^ 0xfaf52102u; + s[11] += s[9]; + s[6] += s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 15u); + s[9] -= s[8]; + s[4] ^= s[9]; + s[0] -= s[4]; + s[5] = mh_rotl(s[5], 12u) + s[0]; + s[15] = mh_rotl(s[15], 10u) + s[5]; + s[8] += s[15]; + s[10] ^= s[8] ^ 0x92ea0c55u; + s[13] += s[10]; + s[3] += s[13]; + s[12] = (s[12] ^ s[3]) * 0xd069e52du; + s[9] += s[12]; + s[4] ^= s[9]; + s[12] ^= s[4] ^ 0xeb853951u; + s[0] += s[12] + 0xed41d9fdu; + s[8] = s[8] * 0xc5250bfdu + s[0]; + s[7] *= (s[8] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 2u); + s[10] -= s[2]; + s[11] *= (s[10] | 1u); + s[8] += s[11]; + s[13] = (s[13] ^ s[8]) * 0xd390a1fbu; + s[7] = s[7] * 0x5acff41bu + s[13]; + s[0] ^= s[7]; + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[4] ^= (s[12] & s[7]); + s[7] ^= s[4] ^ 0xc65745d6u; + s[3] ^= s[7]; + s[9] = mh_rotl(s[9], 9u) + s[3]; + s[0] += s[9] + 0xa03ce5a6u; + s[2] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[2], 29u); + s[10] = mh_rotl(s[10] ^ s[15], 13u); + s[9] = mh_rotl(s[9], 30u) + s[10]; + s[10] += (s[9] | s[12]); + s[6] ^= s[10] ^ 0xd72a67b8u; + s[7] *= (s[6] | 1u); + s[15] += s[7]; + s[2] *= (s[15] | 1u); + s[12] += s[2]; + s[8] *= (s[12] | 1u); + s[11] ^= (s[8] & s[9]); + s[12] = mh_rotl(s[12], 27u) + s[11]; + s[0] ^= s[12]; + s[11] += s[0] + 0x01d509c0u; + s[1] -= s[11]; + s[11] -= s[1]; + s[2] += s[11] + 0x2ad9035du; + s[11] ^= (s[2] & s[7]); + s[5] += s[11] + 0x756fff22u; + s[9] *= (s[5] | 1u); + s[13] ^= s[9]; + s[4] ^= s[13]; + s[3] = mh_rotl(s[3], 2u) + s[4]; + s[14] ^= s[3] ^ 0xc1fb5cb3u; + s[3] = mh_rotl(s[3], 19u) + s[14]; + s[14] += s[3]; + s[6] += s[14] + 0x5f1c4569u; + s[3] = mh_rotl(s[3] ^ s[6], 22u); + s[2] += s[3]; + s[9] += s[2]; + s[1] ^= (s[9] & s[10]); + s[5] ^= s[1]; + s[15] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[15], 23u); + s[1] *= (s[2] | 1u); + s[6] ^= s[1]; + s[4] = mh_rotl(s[4], 7u) + s[6]; + s[14] += (s[4] | s[6]); + s[15] = (s[15] ^ s[14]) * 0x83c9a7ebu; + s[14] += s[15]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[3] ^= s[15]; + s[0] ^= s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 31u); + s[4] += s[10]; + s[7] = mh_rotl(s[7], 23u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 3u); + s[1] *= (s[15] | 1u); + s[7] ^= s[1]; + s[14] = (s[14] ^ s[7]) * 0x2ad2ff49u; + s[7] = mh_rotl(s[7], 4u) + s[14]; + s[13] *= (s[7] | 1u); + s[11] -= s[13]; + s[14] = mh_rotl(s[14], 30u) + s[11]; + s[3] += (s[14] | s[4]); + s[13] += (s[3] | s[10]); + s[7] = s[7] * 0x6920c90bu + s[13]; + s[12] += s[7]; + s[3] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[3], 25u); + s[7] = (s[7] ^ s[6]) * 0x04333a85u; + s[8] -= s[7]; + s[2] = (s[2] ^ s[8]) * 0x843335e9u; + s[10] += s[2]; + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[6] = mh_rotl(s[6], 4u) + s[9]; + s[13] = mh_rotl(s[13], 19u) + s[6]; + s[10] = (s[10] ^ s[13]) * 0xbaaa3189u; + s[0] ^= s[10]; + s[10] -= s[0]; + s[13] ^= s[10] ^ 0xee9d489eu; + s[3] *= (s[13] | 1u); + s[12] -= s[3]; + s[4] += (s[12] | s[2]); + s[3] = (s[3] ^ s[4]) * 0x109178f7u; + s[4] += s[3] + 0x9c068c09u; + s[9] = mh_rotl(s[9] ^ s[4], 23u); + s[1] += (s[9] | s[6]); + s[8] ^= s[1]; + s[11] ^= (s[8] & s[7]); + s[9] ^= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[3] = s[3] * 0x3575e169u + s[14]; + s[1] += s[3] + 0x42a43de1u; + s[7] += s[1]; + s[6] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[6], 21u); + s[14] = (s[14] ^ s[0]) * 0xd50f0637u; + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[4] -= s[0]; + s[10] = mh_rotl(s[10], 1u) + s[4]; + s[4] = (s[4] ^ s[10]) * 0xf009aafbu; + s[7] *= (s[4] | 1u); + s[6] ^= s[7] ^ 0xd8b7b555u; + s[2] = mh_rotl(s[2] ^ s[6], 14u); + s[9] += s[2] + 0x85a75e4fu; + s[14] += s[9]; + s[7] = mh_rotl(s[7], 5u) + s[14]; + s[10] ^= s[7]; + s[0] = mh_rotl(s[0] ^ s[10], 10u); + s[3] = (s[3] ^ s[0]) * 0xe1a45df3u; + s[1] += s[3]; + s[14] ^= (s[1] & s[11]); + s[8] -= s[14]; + s[13] = (s[13] ^ s[8]) * 0x9fce6b81u; + s[9] = mh_rotl(s[9], 28u) + s[13]; + s[14] += s[9]; + s[11] -= s[14]; + s[0] *= (s[11] | 1u); + s[10] *= (s[0] | 1u); + s[14] ^= s[10] ^ 0x130dbd8eu; + s[5] = (s[5] ^ s[14]) * 0x488f6399u; + s[7] = mh_rotl(s[7] ^ s[5], 8u); + s[9] *= (s[7] | 1u); + s[15] -= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 14u); + s[1] += s[5]; + s[13] = mh_rotl(s[13], 10u) + s[1]; + s[15] -= s[13]; + s[7] += (s[15] | s[13]); + s[12] ^= s[7]; + s[1] *= (s[12] | 1u); + s[11] = (s[11] ^ s[1]) * 0x04105327u; + s[5] *= (s[11] | 1u); + s[1] ^= s[5]; + s[13] *= (s[1] | 1u); + s[11] = s[11] * 0xd3a38ac5u + s[13]; + s[12] ^= s[11]; + s[3] ^= s[12] ^ 0xcda4d195u; + s[9] += s[3]; + s[13] += s[9]; + s[4] += (s[13] | s[14]); + s[7] = mh_rotl(s[7] ^ s[4], 6u); + s[4] = s[4] * 0xd402bb6du + s[7]; + s[3] ^= (s[4] & s[9]); + s[0] += (s[3] | s[2]); + s[2] += s[0]; + s[6] ^= s[2]; + s[3] += s[6]; + s[7] *= (s[3] | 1u); + s[6] -= s[7]; + s[11] -= s[6]; + s[9] -= s[11]; + s[14] += s[9]; + s[8] = mh_rotl(s[8] ^ s[14], 18u); + s[10] = mh_rotl(s[10] ^ s[8], 20u); + s[12] ^= s[10]; + s[7] ^= s[12]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[14] ^= s[1]; + s[9] = (s[9] ^ s[14]) * 0x6c1e8cd1u; + s[1] -= s[9]; + s[4] += (s[1] | s[5]); + s[7] -= s[4]; + s[13] -= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[13]; + s[15] -= s[6]; + s[2] = s[2] * 0x0d5713c3u + s[15]; + s[3] = mh_rotl(s[3] ^ s[2], 16u); + s[4] = mh_rotl(s[4] ^ s[3], 10u); + s[9] = (s[9] ^ s[4]) * 0x3d5be749u; + s[14] ^= s[9]; + s[15] ^= s[14]; + s[6] *= (s[15] | 1u); + s[7] = (s[7] ^ s[6]) * 0x17df006bu; + s[1] += s[7]; + s[8] -= s[1]; + s[7] = (s[7] ^ s[8]) * 0xe93f9287u; + s[0] ^= s[7] ^ 0x9294d6b2u; + s[14] += s[0]; + s[11] += s[14]; + s[0] += s[11]; + s[7] += s[0]; + s[12] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[12], 9u); + s[3] = mh_rotl(s[3] ^ s[0], 30u); + s[8] = mh_rotl(s[8], 11u) + s[3]; + s[6] ^= s[8]; + s[15] += s[6]; + s[0] += s[15]; + s[10] += s[0]; + s[1] = mh_rotl(s[1], 26u) + s[10]; + s[9] ^= s[1]; + s[13] *= (s[9] | 1u); + s[4] = s[4] * 0xcdb45257u + s[13]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[0] = (s[0] ^ s[2]) * 0x68b3d713u; + s[1] += s[0]; + s[4] = s[4] * 0xf69d4a5fu + s[1]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[8], 7u); + s[2] += s[4] + 0x51bb82ceu; + s[7] += s[2]; + s[1] += s[7]; + s[2] += s[1] + 0x3680e8bbu; + s[5] += s[2] + 0x9e44e256u; + s[1] += s[5]; + s[12] += s[1]; + s[9] ^= s[12]; + s[13] -= s[9]; + s[2] *= (s[13] | 1u); + s[12] += s[2]; + s[13] += s[12]; + s[0] ^= s[13] ^ 0xd70a731du; + s[6] += s[0]; + s[7] = mh_rotl(s[7], 22u) + s[6]; + s[15] = (s[15] ^ s[7]) * 0xdf75ad53u; + s[11] ^= (s[15] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 11u); + s[2] += s[1]; + s[15] = mh_rotl(s[15] ^ s[2], 21u); + s[2] = (s[2] ^ s[15]) * 0x7c349239u; + s[12] = mh_rotl(s[12], 6u) + s[2]; + s[13] ^= s[12] ^ 0xb219f590u; + s[15] *= (s[13] | 1u); + s[2] ^= s[15] ^ 0xa28894b2u; + s[7] += s[2]; + s[3] = mh_rotl(s[3], 19u) + s[7]; + s[12] = (s[12] ^ s[3]) * 0xd73e4265u; + s[15] += s[12]; + s[7] = s[7] * 0x2d1fd471u + s[15]; + s[11] = (s[11] ^ s[7]) * 0x7ce4f3e3u; + s[3] = mh_rotl(s[3] ^ s[11], 27u); + s[8] += s[3]; + s[9] += (s[8] | s[1]); + s[11] *= (s[9] | 1u); + s[3] -= s[11]; + s[14] = mh_rotl(s[14], 13u) + s[3]; + s[0] ^= (s[14] & s[7]); + s[12] = mh_rotl(s[12], 8u) + s[0]; + s[3] ^= s[12]; + s[15] ^= s[3]; + s[4] ^= s[15]; + s[15] += (s[4] | s[11]); + s[13] = mh_rotl(s[13] ^ s[15], 24u); + s[2] *= (s[13] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] += s[14]; + s[12] += s[10]; + s[2] += s[12] + 0x1b504561u; + s[4] = mh_rotl(s[4] ^ s[2], 2u); + s[8] = (s[8] ^ s[4]) * 0x03df7a65u; + s[15] = mh_rotl(s[15], 14u) + s[8]; + s[0] = mh_rotl(s[0], 18u) + s[15]; + s[1] += s[0] + 0x5740a39eu; + s[8] -= s[1]; + s[5] = (s[5] ^ s[8]) * 0x0b606a43u; + s[9] = s[9] * 0x39176987u + s[5]; + s[0] = mh_rotl(s[0], 4u) + s[9]; + s[14] ^= s[0]; + s[11] -= s[14]; + s[3] += s[11] + 0x34787b81u; + s[15] += s[3] + 0xe41a04ecu; + s[13] = mh_rotl(s[13] ^ s[15], 15u); + s[7] ^= s[13]; + s[9] -= s[7]; + s[10] -= s[9]; + s[13] += s[10]; + s[4] += (s[13] | s[6]); + s[2] ^= s[4]; + s[1] ^= s[2]; + s[0] -= s[1]; + s[15] = (s[15] ^ s[0]) * 0x3fb47953u; + s[12] *= (s[15] | 1u); + s[15] ^= s[12]; + s[13] = mh_rotl(s[13], 31u) + s[15]; + s[12] = s[12] * 0xd1b75439u + s[13]; + s[4] -= s[12]; + s[7] += s[4]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[14] = mh_rotl(s[14] ^ s[1], 15u); + s[3] -= s[14]; + s[15] += s[3]; + s[5] = s[5] * 0xfa5689f1u + s[15]; + s[12] *= (s[5] | 1u); + s[2] = mh_rotl(s[2] ^ s[12], 16u); + s[0] = (s[0] ^ s[2]) * 0x2a1a8c35u; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x2a04efebu; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[9] -= s[15]; + s[13] ^= s[9] ^ 0xbd001784u; + s[9] += s[13] + 0xf302a942u; + s[14] += s[9] + 0x07f9571cu; + s[2] ^= s[14]; + s[11] ^= s[2]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[0] += s[7] + 0xb6e41d24u; + s[12] ^= s[0]; + s[0] ^= s[12]; + s[11] ^= s[0] ^ 0x24f0b3f7u; + s[0] ^= (s[11] & s[7]); + s[6] += s[0]; + s[13] -= s[6]; + s[12] ^= s[13]; + s[4] += s[12]; + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[14] = (s[14] ^ s[3]) * 0x21829883u; + s[2] -= s[14]; + s[3] ^= (s[2] & s[7]); + s[1] -= s[3]; + s[11] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[0] = (s[0] ^ s[13]) * 0xa91d4129u; + s[3] += s[0] + 0x5eb9b9e0u; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[7] = (s[7] ^ s[10]) * 0x52bae843u; + s[15] ^= s[7]; + s[3] ^= (s[15] & s[2]); + s[14] += s[3]; + s[9] -= s[14]; + s[7] += s[9]; + s[2] += s[7]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] *= (s[0] | 1u); + s[3] ^= s[6] ^ 0x1426b612u; + s[6] *= (s[3] | 1u); + s[1] -= s[6]; + s[15] += s[1]; + s[0] -= s[15]; + s[12] += s[0] + 0xf7b931c7u; + s[13] *= (s[12] | 1u); + s[12] = s[12] * 0xe57254dbu + s[13]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[8] += s[5] + 0x517e08fau; + s[15] = mh_rotl(s[15] ^ s[8], 24u); + s[4] -= s[15]; + s[7] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[5] = mh_rotl(s[5] ^ s[9], 31u); + s[15] = mh_rotl(s[15], 20u) + s[5]; + s[10] = (s[10] ^ s[15]) * 0x472cce51u; + s[0] = (s[0] ^ s[10]) * 0xc6aa4b0fu; + s[9] ^= s[0]; + s[5] ^= (s[9] & s[11]); + s[9] += s[5]; + s[15] = mh_rotl(s[15], 26u) + s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 15u); + s[7] += s[12]; + s[8] ^= s[7]; + s[4] = (s[4] ^ s[8]) * 0x1de62593u; + s[12] ^= s[4] ^ 0x4c29c7efu; + s[14] = s[14] * 0xe96a8dbdu + s[12]; + s[7] += s[14]; + s[4] = (s[4] ^ s[7]) * 0x2ceadb71u; + s[13] += s[4]; + s[10] += s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 5u); + s[0] = (s[0] ^ s[12]) * 0xb3050b81u; + s[7] += s[0]; + s[12] = mh_rotl(s[12] ^ s[7], 15u); + s[11] = (s[11] ^ s[12]) * 0xd1f5971bu; + s[13] += s[11]; + s[11] *= (s[13] | 1u); + s[10] += s[11] + 0x1c05c66fu; + s[15] ^= s[10]; + s[13] ^= s[15] ^ 0x8af80ca8u; + s[15] = mh_rotl(s[15] ^ s[13], 14u); + s[13] = (s[13] ^ s[15]) * 0x8b914137u; + s[11] -= s[13]; + s[13] ^= s[11]; + s[6] = (s[6] ^ s[13]) * 0x3c6fe121u; + s[12] = mh_rotl(s[12] ^ s[6], 13u); + s[14] = mh_rotl(s[14], 31u) + s[12]; + s[11] -= s[14]; + s[12] -= s[11]; + s[8] = (s[8] ^ s[12]) * 0x196763bdu; + s[10] *= (s[8] | 1u); + s[11] = mh_rotl(s[11] ^ s[10], 14u); + s[14] *= (s[11] | 1u); + s[11] *= (s[14] | 1u); + s[6] += s[11]; + s[8] = (s[8] ^ s[6]) * 0xbbef2ec7u; + s[11] = mh_rotl(s[11] ^ s[8], 14u); + s[14] += s[11]; + s[1] ^= s[14] ^ 0x3517261cu; + s[10] += s[1]; + s[11] -= s[10]; + s[1] = mh_rotl(s[1] ^ s[11], 23u); + s[4] *= (s[1] | 1u); + s[3] ^= s[4]; + s[14] -= s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 7u); + s[11] -= s[12]; + s[12] = (s[12] ^ s[11]) * 0x61ef90ddu; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[4] -= s[2]; + s[3] ^= s[4] ^ 0x38b5a46au; + s[14] = mh_rotl(s[14] ^ s[3], 8u); + s[8] += s[14]; + s[10] = mh_rotl(s[10], 12u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[2] ^= s[6] ^ 0x04a55416u; + s[7] ^= s[2] ^ 0xc6089802u; + s[14] += s[7] + 0x232acd3au; + s[6] += s[14]; + s[3] ^= s[6] ^ 0x0bdec934u; + s[13] *= (s[3] | 1u); + s[12] = s[12] * 0x082d66bdu + s[13]; + s[10] = (s[10] ^ s[12]) * 0xa5611c97u; + s[5] = mh_rotl(s[5] ^ s[10], 1u); + s[0] += s[5]; + s[10] = mh_rotl(s[10] ^ s[0], 25u); + s[9] = mh_rotl(s[9] ^ s[10], 1u); + s[11] += s[9]; + s[15] = (s[15] ^ s[11]) * 0x0c06e2b5u; + s[12] ^= s[15] ^ 0x7d7c42ceu; + s[15] += s[12]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[9] ^= (s[6] & s[4]); + s[7] -= s[9]; + s[15] = mh_rotl(s[15] ^ s[7], 31u); + s[4] += s[15]; + s[11] = (s[11] ^ s[4]) * 0xd7fef7d9u; + s[10] ^= s[11]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[7] -= s[9]; + s[3] = (s[3] ^ s[7]) * 0x0eafdd57u; + s[5] ^= s[3]; + s[8] -= s[5]; + s[5] ^= s[8]; + s[3] -= s[5]; + s[13] = mh_rotl(s[13], 16u) + s[3]; + s[14] += s[13]; + s[11] += s[14]; + s[0] += s[11] + 0xf2a1dc99u; + s[3] ^= (s[0] & s[10]); + s[10] = mh_rotl(s[10], 7u) + s[3]; + s[5] += s[10] + 0x6527734fu; + s[8] -= s[5]; + s[5] *= (s[8] | 1u); + s[2] += s[5]; + s[1] = mh_rotl(s[1], 31u) + s[2]; + s[11] = mh_rotl(s[11] ^ s[1], 1u); + s[15] ^= s[11]; + s[6] = (s[6] ^ s[15]) * 0x89e4da81u; + s[8] = mh_rotl(s[8], 7u) + s[6]; + s[1] = (s[1] ^ s[8]) * 0x27cd5aabu; + s[4] = (s[4] ^ s[1]) * 0xc9e84adbu; + s[3] = mh_rotl(s[3], 13u) + s[4]; + s[11] += s[3]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 21u); + s[14] += s[12]; + s[0] -= s[14]; + s[2] += s[0]; + s[3] -= s[2]; + s[10] -= s[3]; + s[11] *= (s[10] | 1u); + s[14] += s[11]; + s[6] += s[14]; + s[3] ^= s[6]; + s[13] = s[13] * 0xf5b82e19u + s[3]; + s[7] += s[13]; + s[3] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[3], 14u); + s[13] += s[10]; + s[9] ^= s[13] ^ 0x50029d51u; + s[8] ^= s[9]; + s[5] = s[5] * 0x84a8bab7u + s[8]; + s[14] = mh_rotl(s[14], 21u) + s[5]; + s[12] = mh_rotl(s[12] ^ s[14], 21u); + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 19u); + s[13] += s[9] + 0xf7535ff7u; + s[4] *= (s[13] | 1u); + s[12] *= (s[4] | 1u); + s[4] += s[12] + 0x56f3ba9au; + s[6] += s[4]; + s[0] ^= s[6] ^ 0x52b3d568u; + s[12] += (s[0] | s[11]); + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[4] = mh_rotl(s[4] ^ s[11], 7u); + s[3] += s[4] + 0xe0a370deu; + s[10] = mh_rotl(s[10] ^ s[3], 18u); + s[2] -= s[10]; + s[1] *= (s[2] | 1u); + s[11] += s[1] + 0x351f5bb2u; + s[0] += s[11]; + s[9] += s[0]; + s[8] = mh_rotl(s[8], 15u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[8], 18u); + s[11] = mh_rotl(s[11] ^ s[0], 8u); + s[3] += s[11]; + s[4] = mh_rotl(s[4], 1u) + s[3]; + s[13] -= s[4]; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_7(uint* s) { + s[10] ^= s[0] ^ 0x91f55cc2u; + s[12] += s[10]; + s[9] ^= s[12]; + s[8] = mh_rotl(s[8] ^ s[9], 11u); + s[11] ^= s[8]; + s[13] = (s[13] ^ s[11]) * 0x8937936du; + s[12] = mh_rotl(s[12], 6u) + s[13]; + s[6] += s[12]; + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[10] += s[1]; + s[9] = mh_rotl(s[9], 5u) + s[10]; + s[12] -= s[9]; + s[10] = s[10] * 0xfb1e6803u + s[12]; + s[0] += (s[10] | s[11]); + s[15] += s[0]; + s[0] ^= s[15]; + s[13] *= (s[0] | 1u); + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[2] = s[2] * 0xc6ee6461u + s[7]; + s[3] += s[2]; + s[7] ^= s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 15u); + s[6] ^= s[4]; + s[10] += s[6]; + s[11] = mh_rotl(s[11], 4u) + s[10]; + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 30u) + s[2]; + s[7] -= s[5]; + s[4] ^= s[7]; + s[6] ^= s[4]; + s[5] -= s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 19u) + s[10]; + s[11] = mh_rotl(s[11], 13u) + s[8]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[8] ^= s[5]; + s[10] = mh_rotl(s[10], 31u) + s[8]; + s[2] += s[10] + 0x2533aeebu; + s[12] += s[2] + 0x8c44064eu; + s[6] = s[6] * 0x396ed079u + s[12]; + s[3] ^= s[6]; + s[7] += s[3] + 0x78c5d841u; + s[2] = mh_rotl(s[2], 19u) + s[7]; + s[5] ^= s[2] ^ 0xb10843eau; + s[3] *= (s[5] | 1u); + s[2] ^= s[3] ^ 0x978c6fe6u; + s[9] += s[2]; + s[3] = (s[3] ^ s[9]) * 0xbd141e6du; + s[5] ^= s[3] ^ 0xd07a1a68u; + s[11] ^= s[5]; + s[12] += (s[11] | s[0]); + s[3] += (s[12] | s[0]); + s[13] += (s[3] | s[4]); + s[3] ^= s[13]; + s[7] -= s[3]; + s[6] *= (s[7] | 1u); + s[7] = mh_rotl(s[7] ^ s[6], 1u); + s[9] = (s[9] ^ s[7]) * 0xbed8dbf7u; + s[3] ^= s[9]; + s[1] = (s[1] ^ s[3]) * 0xf57e26d7u; + s[2] = (s[2] ^ s[1]) * 0xdf9916ebu; + s[6] -= s[2]; + s[2] *= (s[6] | 1u); + s[13] += s[2] + 0x4b576832u; + s[7] ^= s[13]; + s[14] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[14] = (s[14] ^ s[0]) * 0xde82d2d3u; + s[7] += s[14]; + s[14] = s[14] * 0x1a9d2c23u + s[7]; + s[13] ^= s[14]; + s[14] *= (s[13] | 1u); + s[13] ^= (s[14] & s[10]); + s[6] = mh_rotl(s[6], 3u) + s[13]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[1] ^= s[0]; + s[13] -= s[1]; + s[1] ^= s[13]; + s[3] -= s[1]; + s[2] += s[3]; + s[11] = (s[11] ^ s[2]) * 0xd14f4873u; + s[0] += s[11] + 0xc62283fbu; + s[14] = mh_rotl(s[14], 31u) + s[0]; + s[0] *= (s[14] | 1u); + s[13] -= s[0]; + s[7] *= (s[13] | 1u); + s[15] ^= s[7]; + s[6] ^= s[15]; + s[8] = mh_rotl(s[8], 21u) + s[6]; + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[11] += (s[10] | s[13]); + s[14] += s[11]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[3] = s[3] * 0xabf8963bu + s[8]; + s[1] += s[3]; + s[6] = mh_rotl(s[6] ^ s[1], 8u); + s[7] = s[7] * 0x5391ec81u + s[6]; + s[3] *= (s[7] | 1u); + s[1] ^= s[3] ^ 0xb1e8a02eu; + s[4] += s[1] + 0xf73ade37u; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[4] ^= s[0]; + s[2] ^= s[4]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[10] -= s[9]; + s[4] ^= s[10]; + s[3] *= (s[4] | 1u); + s[0] -= s[3]; + s[8] ^= (s[0] & s[14]); + s[11] *= (s[8] | 1u); + s[10] ^= s[11]; + s[4] = mh_rotl(s[4] ^ s[10], 11u); + s[13] = mh_rotl(s[13], 2u) + s[4]; + s[0] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 21u) + s[0]; + s[13] ^= s[5]; + s[0] *= (s[13] | 1u); + s[14] ^= s[0]; + s[7] -= s[14]; + s[9] *= (s[7] | 1u); + s[14] ^= s[9]; + s[13] ^= s[14] ^ 0xcdfc1ed8u; + s[1] = mh_rotl(s[1] ^ s[13], 20u); + s[3] = mh_rotl(s[3] ^ s[1], 3u); + s[1] ^= s[3]; + s[0] *= (s[1] | 1u); + s[13] += (s[0] | s[9]); + s[14] = (s[14] ^ s[13]) * 0x788d03efu; + s[0] ^= s[14] ^ 0x996f3b0du; + s[13] -= s[0]; + s[10] = mh_rotl(s[10], 15u) + s[13]; + s[5] = mh_rotl(s[5] ^ s[10], 3u); + s[3] = mh_rotl(s[3] ^ s[5], 10u); + s[12] ^= s[3] ^ 0xd5618db8u; + s[14] -= s[12]; + s[1] += (s[14] | s[15]); + s[2] ^= s[1] ^ 0xbf5e3cd4u; + s[4] += s[2]; + s[14] ^= s[4] ^ 0xf8523123u; + s[12] = mh_rotl(s[12], 29u) + s[14]; + s[7] *= (s[12] | 1u); + s[12] *= (s[7] | 1u); + s[10] += s[12]; + s[14] = mh_rotl(s[14] ^ s[10], 20u); + s[7] ^= s[14] ^ 0x383fa4a6u; + s[12] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 1u) + s[12]; + s[1] *= (s[2] | 1u); + s[4] += s[1]; + s[11] = s[11] * 0xc6e2f7f7u + s[4]; + s[6] ^= (s[11] & s[15]); + s[3] = (s[3] ^ s[6]) * 0xa5f20621u; + s[14] += s[3]; + s[15] = s[15] * 0xff86c04du + s[14]; + s[14] += s[15]; + s[3] = mh_rotl(s[3], 27u) + s[14]; + s[13] ^= (s[3] & s[8]); + s[10] ^= s[13]; + s[6] = s[6] * 0xedced661u + s[10]; + s[12] = mh_rotl(s[12] ^ s[6], 22u); + s[4] ^= s[12] ^ 0x50fbdfefu; + s[9] += s[4] + 0xe37ea6aeu; + s[1] = mh_rotl(s[1] ^ s[9], 17u); + s[4] += s[1]; + s[3] += s[4] + 0xc95ad941u; + s[0] ^= s[3]; + s[6] = mh_rotl(s[6], 26u) + s[0]; + s[12] -= s[6]; + s[14] *= (s[12] | 1u); + s[12] += s[14]; + s[13] = s[13] * 0xdf0c5af7u + s[12]; + s[1] = mh_rotl(s[1], 4u) + s[13]; + s[15] = mh_rotl(s[15], 23u) + s[1]; + s[14] ^= s[15]; + s[0] *= (s[14] | 1u); + s[5] = mh_rotl(s[5] ^ s[0], 14u); + s[15] = mh_rotl(s[15] ^ s[5], 12u); + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[1] = s[1] * 0x1357e1d5u + s[9]; + s[2] += s[1]; + s[8] *= (s[2] | 1u); + s[0] ^= s[8]; + s[7] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[7], 10u); + s[13] = (s[13] ^ s[11]) * 0x9cd6fa4du; + s[11] += (s[13] | s[10]); + s[3] ^= s[11] ^ 0xf37724ddu; + s[5] += s[3]; + s[6] *= (s[5] | 1u); + s[14] += s[6]; + s[13] *= (s[14] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 1u); + s[13] ^= (s[4] & s[0]); + s[14] ^= (s[13] & s[0]); + s[0] += s[14]; + s[6] = mh_rotl(s[6] ^ s[0], 21u); + s[13] += s[6]; + s[6] += s[13]; + s[0] += s[6] + 0x1720d570u; + s[3] ^= s[0]; + s[13] += s[3] + 0xd71bcd1bu; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[9] += s[3]; + s[4] = mh_rotl(s[4] ^ s[9], 3u); + s[10] += s[4]; + s[15] -= s[10]; + s[11] *= (s[15] | 1u); + s[12] *= (s[11] | 1u); + s[8] += s[12]; + s[0] += s[8] + 0xa5d99dc7u; + s[14] ^= s[0]; + s[2] += (s[14] | s[10]); + s[8] = mh_rotl(s[8] ^ s[2], 8u); + s[15] += s[8] + 0xda39c6e1u; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[1], 8u); + s[4] ^= (s[7] & s[9]); + s[0] = mh_rotl(s[0], 13u) + s[4]; + s[10] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 20u) + s[10]; + s[11] ^= s[3]; + s[15] ^= s[11] ^ 0x0d7fc3f2u; + s[5] ^= (s[15] & s[3]); + s[8] += s[5]; + s[3] ^= s[8]; + s[9] += s[3]; + s[12] = mh_rotl(s[12] ^ s[9], 7u); + s[7] -= s[12]; + s[14] = (s[14] ^ s[7]) * 0xee2eaf6bu; + s[5] ^= s[14]; + s[6] = mh_rotl(s[6], 17u) + s[5]; + s[0] -= s[6]; + s[13] ^= s[0] ^ 0xc7600c18u; + s[8] ^= s[13]; + s[7] = (s[7] ^ s[8]) * 0x291da8cfu; + s[3] = (s[3] ^ s[7]) * 0x4c89c6a3u; + s[11] = mh_rotl(s[11], 18u) + s[3]; + s[10] += s[11]; + s[5] ^= s[10] ^ 0xc5dba408u; + s[3] ^= s[5]; + s[2] += s[3]; + s[14] ^= s[2]; + s[4] ^= s[14]; + s[9] += s[4]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[10] ^= s[15]; + s[7] += s[10]; + s[0] = mh_rotl(s[0], 23u) + s[7]; + s[2] += s[0]; + s[5] += s[2]; + s[11] = mh_rotl(s[11], 13u) + s[5]; + s[10] ^= (s[11] & s[9]); + s[5] += s[10] + 0xbbb408f7u; + s[14] ^= s[5]; + s[15] += s[14]; + s[5] = mh_rotl(s[5], 5u) + s[15]; + s[11] = s[11] * 0x112a6951u + s[5]; + s[7] = mh_rotl(s[7] ^ s[11], 31u); + s[5] += s[7]; + s[7] *= (s[5] | 1u); + s[12] = (s[12] ^ s[7]) * 0x0c54418fu; + s[5] += s[12]; + s[13] += s[5]; + s[7] = mh_rotl(s[7], 13u) + s[13]; + s[9] = mh_rotl(s[9], 22u) + s[7]; + s[8] = s[8] * 0x1b5f8089u + s[9]; + s[6] = s[6] * 0x8a305f3du + s[8]; + s[5] = (s[5] ^ s[6]) * 0x9e934355u; + s[13] ^= s[5] ^ 0x3262a24fu; + s[7] ^= (s[13] & s[5]); + s[2] ^= s[7]; + s[14] += (s[2] | s[7]); + s[11] += s[14]; + s[6] -= s[11]; + s[5] ^= s[6]; + s[6] = mh_rotl(s[6] ^ s[5], 24u); + s[8] ^= s[6] ^ 0x2110db43u; + s[4] += s[8] + 0x91e5ef8bu; + s[15] += s[4] + 0x039dc8acu; + s[2] *= (s[15] | 1u); + s[10] ^= s[2]; + s[4] += s[10] + 0x38936459u; + s[13] ^= s[4] ^ 0x8a7a8a06u; + s[0] = mh_rotl(s[0] ^ s[13], 24u); + s[13] = s[13] * 0xa7c0dc87u + s[0]; + s[2] += s[13]; + s[11] = mh_rotl(s[11], 25u) + s[2]; + s[6] -= s[11]; + s[1] *= (s[6] | 1u); + s[0] = mh_rotl(s[0], 21u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[0], 23u); + s[7] ^= s[11]; + s[2] += s[7]; + s[9] *= (s[2] | 1u); + s[11] = mh_rotl(s[11], 24u) + s[9]; + s[1] ^= (s[11] & s[3]); + s[0] = mh_rotl(s[0] ^ s[1], 13u); + s[12] -= s[0]; + s[6] ^= (s[12] & s[5]); + s[4] += s[6]; + s[13] ^= s[4]; + s[1] = mh_rotl(s[1], 26u) + s[13]; + s[11] = mh_rotl(s[11], 27u) + s[1]; + s[1] += s[11]; + s[14] ^= (s[1] & s[11]); + s[4] -= s[14]; + s[5] -= s[4]; + s[8] ^= s[5]; + s[2] ^= s[8]; + s[4] += s[2]; + s[14] = mh_rotl(s[14], 24u) + s[4]; + s[0] += s[14] + 0x6b4adcadu; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[10] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[10], 27u); + s[0] -= s[6]; + s[6] += s[0] + 0x5ac44880u; + s[8] ^= s[6]; + s[1] ^= s[8]; + s[0] *= (s[1] | 1u); + s[5] -= s[0]; + s[3] -= s[5]; + s[7] += s[3]; + s[0] *= (s[7] | 1u); + s[1] = (s[1] ^ s[0]) * 0xc26b3d23u; + s[13] += s[1]; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[7], 2u); + s[12] = (s[12] ^ s[3]) * 0x36078279u; + s[9] -= s[12]; + s[12] ^= s[9] ^ 0x6a60fb43u; + s[2] = mh_rotl(s[2], 15u) + s[12]; + s[7] ^= s[2]; + s[0] += s[7] + 0xe00e86a2u; + s[9] = mh_rotl(s[9] ^ s[0], 8u); + s[3] = mh_rotl(s[3], 28u) + s[9]; + s[8] += (s[3] | s[15]); + s[5] ^= s[8] ^ 0xe55fb8aeu; + s[4] ^= s[5]; + s[8] ^= s[4]; + s[6] *= (s[8] | 1u); + s[15] += s[6]; + s[1] = (s[1] ^ s[15]) * 0x21de53d1u; + s[13] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 14u); + s[4] ^= s[12] ^ 0xc98f0a34u; + s[6] *= (s[4] | 1u); + s[2] -= s[6]; + s[7] += s[2]; + s[3] ^= s[7]; + s[5] += s[3] + 0xa927519fu; + s[10] += s[5]; + s[13] ^= s[10] ^ 0xcb96c77bu; + s[4] *= (s[13] | 1u); + s[1] -= s[4]; + s[5] += s[1]; + s[15] = mh_rotl(s[15], 2u) + s[5]; + s[8] ^= s[15]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 24u); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[0] = (s[0] ^ s[15]) * 0x043e38c5u; + s[15] *= (s[0] | 1u); + s[11] ^= s[15]; + s[14] += s[11] + 0x53bbe6c0u; + s[0] *= (s[14] | 1u); + s[9] ^= s[0]; + s[6] *= (s[9] | 1u); + s[2] += (s[6] | s[1]); + s[13] += s[2]; + s[10] = mh_rotl(s[10] ^ s[13], 10u); + s[1] += s[10]; + s[15] = s[15] * 0x583e8481u + s[1]; + s[13] ^= s[15] ^ 0x2cc63257u; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3], 28u) + s[7]; + s[2] -= s[3]; + s[14] = mh_rotl(s[14], 11u) + s[2]; + s[1] += (s[14] | s[7]); + s[8] ^= s[1]; + s[11] = (s[11] ^ s[8]) * 0x0e28ad8fu; + s[3] = (s[3] ^ s[11]) * 0x298e4869u; + s[11] -= s[3]; + s[3] = (s[3] ^ s[11]) * 0x7d313b6bu; + s[11] = (s[11] ^ s[3]) * 0xeca4dbcbu; + s[2] -= s[11]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[11] += s[10] + 0xfceb9d18u; + s[12] += (s[11] | s[1]); + s[4] *= (s[12] | 1u); + s[5] ^= s[4]; + s[0] ^= (s[5] & s[6]); + s[12] ^= s[0]; + s[9] += s[12] + 0xb01e0678u; + s[2] -= s[9]; + s[15] += s[2]; + s[11] ^= s[15] ^ 0x53447cc1u; + s[14] += s[11] + 0xaf64abb5u; + s[9] ^= s[14] ^ 0xc2548a26u; + s[2] *= (s[9] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 5u); + s[13] *= (s[7] | 1u); + s[5] = (s[5] ^ s[13]) * 0x10dbc9ddu; + s[12] -= s[5]; + s[2] += s[12]; + s[15] -= s[2]; + s[4] = (s[4] ^ s[15]) * 0x3582fe41u; + s[7] = mh_rotl(s[7] ^ s[4], 28u); + s[13] = s[13] * 0x7fe12955u + s[7]; + s[12] = (s[12] ^ s[13]) * 0xd86d1b4bu; + s[10] += s[12] + 0xb0f59a52u; + s[0] *= (s[10] | 1u); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[8] ^= s[10]; + s[10] *= (s[8] | 1u); + s[5] += (s[10] | s[7]); + s[13] = mh_rotl(s[13] ^ s[5], 11u); + s[0] ^= (s[13] & s[11]); + s[6] += s[0]; + s[3] = mh_rotl(s[3], 8u) + s[6]; + s[13] ^= s[3] ^ 0x97eba12fu; + s[10] *= (s[13] | 1u); + s[1] += s[10]; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[11] ^= s[12]; + s[7] ^= s[11]; + s[1] *= (s[7] | 1u); + s[4] += s[1] + 0x3e58791au; + s[0] += (s[4] | s[1]); + s[10] ^= s[0]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[13] ^= s[15]; + s[7] ^= s[13] ^ 0x2741705du; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[15] += s[4] + 0xe6934fbbu; + s[3] -= s[15]; + s[11] = (s[11] ^ s[3]) * 0x1f6fe0a9u; + s[15] ^= s[11]; + s[0] = (s[0] ^ s[15]) * 0x1ef7dac7u; + s[14] += s[0] + 0x85ea7167u; + s[8] += s[14]; + s[2] = (s[2] ^ s[8]) * 0xbd1c80ddu; + s[7] += s[2]; + s[4] ^= s[7]; + s[11] = mh_rotl(s[11], 28u) + s[4]; + s[9] = (s[9] ^ s[11]) * 0xf99784f9u; + s[5] = mh_rotl(s[5] ^ s[9], 28u); + s[6] += s[5]; + s[10] = mh_rotl(s[10] ^ s[6], 30u); + s[15] *= (s[10] | 1u); + s[11] ^= s[15]; + s[10] ^= s[11] ^ 0xe63d1f0fu; + s[0] ^= (s[10] & s[15]); + s[14] = (s[14] ^ s[0]) * 0xdd771591u; + s[6] = mh_rotl(s[6] ^ s[14], 25u); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0x1aef487du; + s[2] += s[6] + 0x4803fbdfu; + s[9] ^= s[2]; + s[12] ^= (s[9] & s[13]); + s[15] ^= (s[12] & s[10]); + s[12] *= (s[15] | 1u); + s[14] ^= s[12]; + s[11] = (s[11] ^ s[14]) * 0xcdae3347u; + s[2] = mh_rotl(s[2] ^ s[11], 25u); + s[9] ^= s[2] ^ 0xd54df97bu; + s[0] *= (s[9] | 1u); + s[9] ^= s[0] ^ 0x36482476u; + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[11] = mh_rotl(s[11] ^ s[9], 19u); + s[15] ^= (s[11] & s[4]); + s[14] ^= s[15]; + s[1] += s[14]; + s[11] = mh_rotl(s[11], 20u) + s[1]; + s[9] += s[11] + 0x08509d57u; + s[15] *= (s[9] | 1u); + s[9] -= s[15]; + s[14] = (s[14] ^ s[9]) * 0x9757fd53u; + s[13] ^= (s[14] & s[5]); + s[6] += s[13]; + s[15] = (s[15] ^ s[6]) * 0x3e6be04bu; + s[12] *= (s[15] | 1u); + s[2] = mh_rotl(s[2], 25u) + s[12]; + s[13] -= s[2]; + s[8] ^= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 31u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[1] = mh_rotl(s[1], 20u) + s[10]; + s[7] += s[1] + 0x9218a857u; + s[0] += s[7]; + s[11] ^= s[0]; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[10] = mh_rotl(s[10] ^ s[15], 1u); + s[3] ^= s[10] ^ 0x60be6fe9u; + s[4] = (s[4] ^ s[3]) * 0x4177a7a7u; + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[11] += s[7] + 0x85521284u; + s[4] = (s[4] ^ s[11]) * 0x95e55935u; + s[3] += s[4]; + s[15] += s[3]; + s[5] += s[15] + 0x7518eed4u; + s[9] ^= s[5] ^ 0x087e9a42u; + s[10] *= (s[9] | 1u); + s[8] -= s[10]; + s[5] ^= s[8] ^ 0xf3fb3909u; + s[14] ^= (s[5] & s[8]); + s[10] += s[14] + 0x7a9e6e04u; + s[0] += (s[10] | s[2]); + s[6] = (s[6] ^ s[0]) * 0xe355b5f1u; + s[5] = s[5] * 0xe711e2fdu + s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 3u) + s[10]; + s[13] ^= s[8]; + s[11] ^= s[13]; + s[9] -= s[11]; + s[12] ^= s[9] ^ 0xc8862d11u; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15], 23u) + s[4]; + s[9] ^= s[15] ^ 0x413dfad3u; + s[11] *= (s[9] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 31u); + s[5] ^= s[1] ^ 0xe7b946b4u; + s[15] -= s[5]; + s[2] *= (s[15] | 1u); + s[5] *= (s[2] | 1u); + s[4] -= s[5]; + s[9] += (s[4] | s[13]); + s[0] ^= s[9] ^ 0x7854824fu; + s[3] = (s[3] ^ s[0]) * 0x442b482du; + s[11] = mh_rotl(s[11], 2u) + s[3]; + s[6] += (s[11] | s[13]); + s[7] += (s[6] | s[9]); + s[0] *= (s[7] | 1u); + s[4] += s[0]; + s[14] ^= (s[4] & s[7]); + s[10] += (s[14] | s[3]); + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[4] *= (s[10] | 1u); + s[14] += s[4]; + s[6] -= s[14]; + s[15] ^= s[6]; + s[6] *= (s[15] | 1u); + s[10] ^= s[6]; + s[6] ^= s[10]; + s[8] ^= (s[6] & s[0]); + s[5] ^= s[8]; + s[10] ^= s[5]; + s[7] = mh_rotl(s[7], 28u) + s[10]; + s[1] += s[7] + 0xe4c19693u; + s[0] = mh_rotl(s[0], 15u) + s[1]; + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[1] = mh_rotl(s[1], 19u) + s[2]; + s[6] += s[1] + 0x87218495u; + s[7] = mh_rotl(s[7], 15u) + s[6]; + s[6] += (s[7] | s[5]); + s[10] = mh_rotl(s[10], 7u) + s[6]; + s[2] *= (s[10] | 1u); + s[0] = mh_rotl(s[0], 27u) + s[2]; + s[10] ^= s[0]; + s[15] = (s[15] ^ s[10]) * 0x5787be43u; + s[2] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[2], 14u); + s[6] += s[0]; + s[5] += s[6]; + s[15] += s[5]; + s[1] = mh_rotl(s[1], 4u) + s[15]; + s[10] += s[1]; + s[7] = (s[7] ^ s[10]) * 0x5b66a27du; + s[11] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[10] *= (s[7] | 1u); + s[2] = mh_rotl(s[2] ^ s[10], 12u); + s[14] ^= s[2]; + s[7] *= (s[14] | 1u); + s[10] += s[7] + 0x51e1605bu; + s[11] += s[10] + 0x07a5770bu; + s[12] = mh_rotl(s[12], 25u) + s[11]; + s[13] += s[12] + 0x173cbaedu; + s[14] -= s[13]; + s[8] *= (s[14] | 1u); + s[6] = (s[6] ^ s[8]) * 0x198bf8abu; + s[13] += s[6]; + s[4] = (s[4] ^ s[13]) * 0x4a858065u; + s[8] += s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[12] += s[15] + 0x41cd5528u; + s[15] = mh_rotl(s[15], 1u) + s[12]; + s[12] = (s[12] ^ s[15]) * 0xf11bd25du; + s[1] = mh_rotl(s[1], 23u) + s[12]; + s[9] = mh_rotl(s[9] ^ s[1], 12u); + s[13] = (s[13] ^ s[9]) * 0x63f2bd71u; + s[4] += s[13] + 0x941778a1u; + s[11] = s[11] * 0x8d0fa58du + s[4]; + s[6] = mh_rotl(s[6] ^ s[11], 2u); + s[12] += s[6] + 0x1548d255u; + s[1] += s[12] + 0x2e20325eu; + s[7] ^= s[1] ^ 0x352c2791u; + s[12] ^= s[7]; + s[0] = (s[0] ^ s[12]) * 0xc3e7b99bu; + s[7] ^= s[0]; + s[1] ^= s[7]; + s[15] = mh_rotl(s[15] ^ s[1], 23u); + s[14] ^= s[15]; + s[11] = mh_rotl(s[11] ^ s[14], 31u); + s[10] += s[11]; + s[7] = (s[7] ^ s[10]) * 0x7c1fbac9u; + s[6] = (s[6] ^ s[7]) * 0x0b46f65bu; + s[10] ^= s[6]; + s[6] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[14], 21u); + s[7] -= s[10]; + s[2] += s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 29u); + s[15] = mh_rotl(s[15] ^ s[4], 29u); + s[1] *= (s[15] | 1u); + s[8] = mh_rotl(s[8], 3u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[8], 12u); + s[14] = s[14] * 0x945fd715u + s[15]; + s[6] = (s[6] ^ s[14]) * 0xf9a3efb3u; + s[8] ^= s[6]; + s[11] -= s[8]; + s[9] *= (s[11] | 1u); + s[8] ^= s[9]; + s[11] += s[8]; + s[7] += s[11] + 0xe0e87381u; + s[9] ^= s[7]; + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] = mh_rotl(s[11] ^ s[5], 26u); + s[12] *= (s[11] | 1u); + s[4] -= s[12]; + s[10] -= s[4]; + s[0] -= s[10]; + s[6] ^= s[0]; + s[8] = s[8] * 0x92e1e5f7u + s[6]; + s[1] += (s[8] | s[3]); + s[10] = (s[10] ^ s[1]) * 0x1eb329d3u; + s[0] = mh_rotl(s[0], 29u) + s[10]; + s[9] = mh_rotl(s[9], 6u) + s[0]; + s[3] += s[9] + 0x1bcf547cu; + s[9] -= s[3]; + s[14] += s[9]; + s[5] = mh_rotl(s[5] ^ s[14], 22u); + s[15] = s[15] * 0x3675a9adu + s[5]; + s[7] *= (s[15] | 1u); + s[4] += s[7] + 0x641005b4u; + s[1] += s[4] + 0x6a3b3afbu; + s[11] += s[1]; + s[9] ^= s[11] ^ 0x30def5feu; + s[6] ^= (s[9] & s[8]); + s[11] = mh_rotl(s[11], 28u) + s[6]; + s[6] += s[11]; + s[12] = (s[12] ^ s[6]) * 0x4d6dc8b3u; + s[7] -= s[12]; + s[9] ^= s[7]; + s[0] *= (s[9] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xb420685cu; + s[1] ^= (s[7] & s[12]); + s[12] += (s[1] | s[9]); + s[14] ^= s[12] ^ 0x076d63f7u; + s[1] *= (s[14] | 1u); + s[5] = s[5] * 0x2026ae47u + s[1]; + s[15] = mh_rotl(s[15], 23u) + s[5]; + s[9] += s[15]; + s[1] ^= s[9]; + s[4] = (s[4] ^ s[1]) * 0x8e6cffbfu; + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[14] ^= s[3]; + s[6] -= s[14]; + s[15] = (s[15] ^ s[6]) * 0xf52e633du; + s[14] *= (s[15] | 1u); + s[4] -= s[14]; + s[0] ^= s[4]; + s[1] = (s[1] ^ s[0]) * 0xd9650db9u; + s[13] = mh_rotl(s[13], 27u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[13], 22u); + s[12] += s[15]; + s[1] -= s[12]; + s[2] = s[2] * 0xd1740ecbu + s[1]; + s[11] *= (s[2] | 1u); + s[0] *= (s[11] | 1u); + s[4] -= s[0]; + s[11] ^= s[4] ^ 0x6823955fu; + s[3] ^= s[11]; + s[13] *= (s[3] | 1u); + s[3] = mh_rotl(s[3] ^ s[13], 8u); + s[8] = (s[8] ^ s[3]) * 0x615f5e9du; + s[0] -= s[8]; + s[3] ^= s[0]; + s[1] ^= s[3] ^ 0xb1dc5436u; + s[9] *= (s[1] | 1u); + s[13] += s[9]; + s[3] = s[3] * 0xfe0cf937u + s[13]; + s[8] *= (s[3] | 1u); + s[4] += s[8]; + s[3] += s[4] + 0x4f38c2ccu; + s[12] += s[3] + 0x3b3cb536u; + s[1] -= s[12]; + s[6] *= (s[1] | 1u); + s[8] = (s[8] ^ s[6]) * 0x89b78741u; + s[5] += s[8]; + s[1] += s[5] + 0x37d58859u; + s[7] = (s[7] ^ s[1]) * 0x4d7d11c3u; + s[4] ^= (s[7] & s[11]); + s[6] ^= s[4] ^ 0xe3a88b56u; + s[13] = mh_rotl(s[13], 20u) + s[6]; + s[10] *= (s[13] | 1u); + s[14] += s[10]; + s[8] += (s[14] | s[6]); + s[11] += s[8] + 0xca45662du; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[5] *= (s[14] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[8] -= s[14]; + s[13] ^= s[8]; + s[6] -= s[13]; + s[14] += (s[6] | s[4]); + s[0] -= s[14]; + s[6] += s[0] + 0x19712582u; + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[3] *= (s[15] | 1u); + s[5] -= s[3]; + s[8] = mh_rotl(s[8] ^ s[5], 17u); +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_8(uint* s) { + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[12] = mh_rotl(s[12], 17u) + s[2]; + s[13] *= (s[12] | 1u); + s[11] *= (s[13] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 17u); + s[10] -= s[1]; + s[2] += s[10]; + s[11] = (s[11] ^ s[2]) * 0xea1e243du; + s[10] ^= s[11] ^ 0x2e9ac4cbu; + s[5] -= s[10]; + s[1] = mh_rotl(s[1], 20u) + s[5]; + s[6] ^= (s[1] & s[9]); + s[11] += s[6]; + s[13] *= (s[11] | 1u); + s[15] *= (s[13] | 1u); + s[3] ^= (s[15] & s[2]); + s[8] -= s[3]; + s[5] += s[8] + 0x40407046u; + s[3] *= (s[5] | 1u); + s[12] *= (s[3] | 1u); + s[14] ^= s[12] ^ 0x972141aeu; + s[4] -= s[14]; + s[1] *= (s[4] | 1u); + s[15] -= s[1]; + s[0] = s[0] * 0x6b61ba2bu + s[15]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[0] = s[0] * 0xbebc2e0du + s[13]; + s[11] += s[0] + 0x2c68ac9eu; + s[3] += (s[11] | s[10]); + s[15] = s[15] * 0xd6e907b5u + s[3]; + s[1] += s[15]; + s[12] += s[1]; + s[10] += s[12]; + s[2] += s[10]; + s[1] ^= s[2]; + s[0] *= (s[1] | 1u); + s[13] ^= s[0]; + s[6] *= (s[13] | 1u); + s[0] = (s[0] ^ s[6]) * 0xa1b16ef7u; + s[8] += (s[0] | s[11]); + s[0] = mh_rotl(s[0] ^ s[8], 24u); + s[9] -= s[0]; + s[13] = (s[13] ^ s[9]) * 0x8cb2b469u; + s[10] = mh_rotl(s[10] ^ s[13], 20u); + s[13] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[13], 23u); + s[1] = (s[1] ^ s[11]) * 0x0cac0de1u; + s[7] = mh_rotl(s[7], 17u) + s[1]; + s[10] = (s[10] ^ s[7]) * 0xb33ec0ebu; + s[12] += s[10]; + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[8] ^= s[11]; + s[4] = s[4] * 0x0fdcff95u + s[8]; + s[13] ^= (s[4] & s[12]); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[12] = (s[12] ^ s[6]) * 0x526264efu; + s[4] -= s[12]; + s[7] = (s[7] ^ s[4]) * 0x4afe3457u; + s[12] = s[12] * 0x4728f4cbu + s[7]; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[8] += s[15]; + s[5] -= s[8]; + s[3] += (s[5] | s[12]); + s[15] += s[3]; + s[13] = mh_rotl(s[13] ^ s[15], 13u); + s[0] ^= (s[13] & s[11]); + s[4] ^= s[0]; + s[14] += s[4]; + s[8] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[8], 17u); + s[1] += s[0]; + s[8] = (s[8] ^ s[1]) * 0xff70caf9u; + s[2] ^= s[8] ^ 0x0ff2bb06u; + s[1] *= (s[2] | 1u); + s[12] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[12], 12u); + s[13] += s[14]; + s[11] = mh_rotl(s[11], 15u) + s[13]; + s[3] = (s[3] ^ s[11]) * 0xa18acb9fu; + s[1] ^= s[3] ^ 0x4af36d07u; + s[2] += s[1] + 0x2ee01525u; + s[5] ^= s[2]; + s[3] += s[5] + 0x96db46ecu; + s[12] ^= (s[3] & s[14]); + s[13] ^= s[12] ^ 0x8a4b65c5u; + s[7] ^= s[13]; + s[5] += s[7]; + s[0] += s[5]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[7] = (s[7] ^ s[3]) * 0x0daf64efu; + s[9] = (s[9] ^ s[7]) * 0x2f262a6du; + s[1] ^= s[9]; + s[12] -= s[1]; + s[2] += s[12]; + s[12] ^= (s[2] & s[15]); + s[10] ^= (s[12] & s[15]); + s[14] ^= s[10]; + s[1] = mh_rotl(s[1], 26u) + s[14]; + s[9] += s[1]; + s[8] ^= s[9]; + s[15] ^= s[8] ^ 0x69952578u; + s[0] ^= s[15] ^ 0x45e70bd6u; + s[8] -= s[0]; + s[14] = s[14] * 0x39098d3bu + s[8]; + s[6] *= (s[14] | 1u); + s[12] ^= s[6] ^ 0xd07ef179u; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 2u); + s[6] += s[15]; + s[9] ^= (s[6] & s[1]); + s[5] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[5], 22u); + s[9] *= (s[11] | 1u); + s[6] = s[6] * 0x36ed5b21u + s[9]; + s[9] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[9], 4u); + s[1] -= s[13]; + s[4] *= (s[1] | 1u); + s[3] ^= (s[4] & s[5]); + s[2] = s[2] * 0x38309bf7u + s[3]; + s[1] += (s[2] | s[11]); + s[9] = (s[9] ^ s[1]) * 0xc0be3739u; + s[15] ^= s[9] ^ 0x07de5788u; + s[11] = s[11] * 0xd8c6366du + s[15]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[15] = mh_rotl(s[15] ^ s[0], 5u); + s[3] += s[15]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[15] *= (s[11] | 1u); + s[1] = s[1] * 0x0246d699u + s[15]; + s[10] *= (s[1] | 1u); + s[12] += s[10]; + s[10] += s[12]; + s[7] += (s[10] | s[9]); + s[9] ^= s[7]; + s[3] ^= s[9]; + s[14] += (s[3] | s[0]); + s[1] = mh_rotl(s[1] ^ s[14], 17u); + s[11] ^= s[1]; + s[3] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[3] *= (s[10] | 1u); + s[2] ^= s[3]; + s[9] = (s[9] ^ s[2]) * 0xefdd0db1u; + s[12] += (s[9] | s[5]); + s[5] = mh_rotl(s[5] ^ s[12], 6u); + s[11] = (s[11] ^ s[5]) * 0xc9b9d1dfu; + s[1] ^= s[11]; + s[5] ^= s[1]; + s[7] ^= s[5]; + s[10] ^= (s[7] & s[11]); + s[7] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[7], 25u); + s[10] ^= s[15]; + s[9] += s[10] + 0xf87f58f8u; + s[0] = mh_rotl(s[0], 15u) + s[9]; + s[9] += s[0]; + s[1] += (s[9] | s[7]); + s[14] += s[1] + 0x676d23d7u; + s[0] += (s[14] | s[6]); + s[8] = mh_rotl(s[8], 15u) + s[0]; + s[14] *= (s[8] | 1u); + s[8] ^= (s[14] & s[6]); + s[4] += s[8]; + s[2] = (s[2] ^ s[4]) * 0xe1a03111u; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[15] ^= s[0]; + s[8] ^= s[15] ^ 0xad7880f9u; + s[4] = mh_rotl(s[4], 11u) + s[8]; + s[11] -= s[4]; + s[6] += s[11]; + s[9] *= (s[6] | 1u); + s[0] ^= s[9]; + s[15] = mh_rotl(s[15] ^ s[0], 11u); + s[2] = (s[2] ^ s[15]) * 0x03f5accbu; + s[12] = mh_rotl(s[12], 11u) + s[2]; + s[9] ^= s[12]; + s[14] *= (s[9] | 1u); + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x9cf27933u; + s[15] = mh_rotl(s[15], 27u) + s[8]; + s[7] ^= (s[15] & s[8]); + s[5] += s[7]; + s[9] = (s[9] ^ s[5]) * 0xe294856fu; + s[1] ^= s[9]; + s[11] ^= s[1]; + s[15] = (s[15] ^ s[11]) * 0x4555f2d5u; + s[7] = mh_rotl(s[7] ^ s[15], 31u); + s[13] += s[7]; + s[10] ^= s[13]; + s[2] = (s[2] ^ s[10]) * 0x75193e43u; + s[9] -= s[2]; + s[3] = s[3] * 0x8c57e72du + s[9]; + s[2] = mh_rotl(s[2], 21u) + s[3]; + s[4] = (s[4] ^ s[2]) * 0x55a02867u; + s[1] -= s[4]; + s[9] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[9], 8u); + s[14] ^= s[2]; + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[14] *= (s[0] | 1u); + s[6] = mh_rotl(s[6], 18u) + s[14]; + s[10] -= s[6]; + s[8] ^= s[10]; + s[9] += s[8]; + s[4] ^= s[9]; + s[7] = (s[7] ^ s[4]) * 0x49afec39u; + s[14] += (s[7] | s[1]); + s[6] = mh_rotl(s[6] ^ s[14], 20u); + s[3] = mh_rotl(s[3] ^ s[6], 28u); + s[10] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 16u) + s[10]; + s[8] += s[7]; + s[11] = s[11] * 0x47f9228bu + s[8]; + s[6] ^= (s[11] & s[14]); + s[14] ^= (s[6] & s[13]); + s[15] = mh_rotl(s[15] ^ s[14], 30u); + s[13] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[13], 19u); + s[7] += s[8]; + s[6] -= s[7]; + s[1] = s[1] * 0x89a3aa17u + s[6]; + s[10] -= s[1]; + s[13] ^= s[10]; + s[14] *= (s[13] | 1u); + s[15] += s[14]; + s[4] ^= s[15]; + s[1] = mh_rotl(s[1], 27u) + s[4]; + s[0] += s[1]; + s[7] = mh_rotl(s[7], 30u) + s[0]; + s[10] ^= s[7]; + s[14] += s[10]; + s[3] += s[14]; + s[12] ^= s[3] ^ 0x3d91f806u; + s[0] -= s[12]; + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 7u) + s[12]; + s[14] ^= s[4]; + s[6] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 23u) + s[6]; + s[15] -= s[10]; + s[6] -= s[15]; + s[8] = mh_rotl(s[8] ^ s[6], 2u); + s[3] = mh_rotl(s[3], 2u) + s[8]; + s[4] += (s[3] | s[10]); + s[1] = (s[1] ^ s[4]) * 0x5b3cd913u; + s[11] = mh_rotl(s[11] ^ s[1], 2u); + s[0] = (s[0] ^ s[11]) * 0x3c693ccbu; + s[15] += s[0]; + s[10] ^= s[15] ^ 0x5a83618eu; + s[3] *= (s[10] | 1u); + s[11] = s[11] * 0x8cff3953u + s[3]; + s[15] -= s[11]; + s[10] = mh_rotl(s[10], 29u) + s[15]; + s[11] += s[10] + 0xef64efa3u; + s[0] = mh_rotl(s[0], 24u) + s[11]; + s[11] = mh_rotl(s[11] ^ s[0], 20u); + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[6] ^= s[0]; + s[4] -= s[6]; + s[15] += s[4]; + s[5] = mh_rotl(s[5], 20u) + s[15]; + s[9] ^= s[5]; + s[0] += s[9]; + s[7] += s[0]; + s[1] = s[1] * 0x0b7f59b3u + s[7]; + s[4] += s[1] + 0x145ca745u; + s[3] = (s[3] ^ s[4]) * 0x45e8e60bu; + s[0] += s[3]; + s[14] = (s[14] ^ s[0]) * 0x89fefe0bu; + s[5] ^= s[14]; + s[0] ^= s[5]; + s[10] *= (s[0] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 26u); + s[4] = mh_rotl(s[4], 29u) + s[13]; + s[15] = mh_rotl(s[15], 13u) + s[4]; + s[3] = mh_rotl(s[3], 16u) + s[15]; + s[9] -= s[3]; + s[12] ^= s[9] ^ 0x95781226u; + s[13] ^= s[12]; + s[10] = mh_rotl(s[10], 28u) + s[13]; + s[5] += s[10]; + s[12] *= (s[5] | 1u); + s[14] += s[12] + 0x01116f8fu; + s[13] = mh_rotl(s[13] ^ s[14], 26u); + s[10] += s[13] + 0x23aea8a9u; + s[8] += (s[10] | s[12]); + s[13] ^= (s[8] & s[0]); + s[1] += s[13]; + s[6] ^= s[1]; + s[4] ^= (s[6] & s[7]); + s[11] += s[4]; + s[4] *= (s[11] | 1u); + s[7] ^= (s[4] & s[3]); + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[0] -= s[6]; + s[12] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 19u) + s[12]; + s[2] = mh_rotl(s[2] ^ s[4], 8u); + s[10] += s[2]; + s[11] = mh_rotl(s[11], 25u) + s[10]; + s[1] ^= s[11]; + s[12] = (s[12] ^ s[1]) * 0x6229cc97u; + s[14] *= (s[12] | 1u); + s[4] -= s[14]; + s[13] ^= (s[4] & s[1]); + s[1] -= s[13]; + s[12] += s[1]; + s[7] += s[12] + 0x88900fdcu; + s[6] *= (s[7] | 1u); + s[15] = s[15] * 0x84135b45u + s[6]; + s[8] ^= s[15]; + s[15] += s[8]; + s[5] ^= s[15]; + s[8] ^= s[5]; + s[11] -= s[8]; + s[3] = s[3] * 0x2e47fa49u + s[11]; + s[12] = mh_rotl(s[12] ^ s[3], 10u); + s[8] -= s[12]; + s[13] = mh_rotl(s[13], 15u) + s[8]; + s[9] = mh_rotl(s[9], 23u) + s[13]; + s[0] += (s[9] | s[11]); + s[12] = (s[12] ^ s[0]) * 0x733a341du; + s[13] -= s[12]; + s[4] *= (s[13] | 1u); + s[7] += s[4]; + s[1] += s[7]; + s[15] = mh_rotl(s[15], 2u) + s[1]; + s[3] ^= s[15]; + s[15] -= s[3]; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[12] ^= (s[1] & s[0]); + s[11] ^= (s[12] & s[13]); + s[14] -= s[11]; + s[11] = (s[11] ^ s[14]) * 0xedf296edu; + s[12] ^= (s[11] & s[14]); + s[11] = mh_rotl(s[11], 1u) + s[12]; + s[5] *= (s[11] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[7] ^= s[14] ^ 0x4af9834bu; + s[10] ^= s[7]; + s[9] ^= (s[10] & s[2]); + s[13] ^= s[9]; + s[14] ^= (s[13] & s[7]); + s[10] += s[14]; + s[12] ^= s[10]; + s[13] -= s[12]; + s[1] ^= (s[13] & s[14]); + s[12] = (s[12] ^ s[1]) * 0xf8f0e297u; + s[5] *= (s[12] | 1u); + s[15] ^= (s[5] & s[7]); + s[11] = mh_rotl(s[11], 27u) + s[15]; + s[9] = (s[9] ^ s[11]) * 0xbefccb87u; + s[15] += s[9] + 0x17cb62ddu; + s[0] ^= s[15]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[7] += s[3]; + s[10] ^= s[7]; + s[9] *= (s[10] | 1u); + s[12] += (s[9] | s[14]); + s[3] = mh_rotl(s[3] ^ s[12], 25u); + s[10] += s[3]; + s[9] = mh_rotl(s[9], 3u) + s[10]; + s[6] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[6], 21u); + s[3] = s[3] * 0x65a97173u + s[14]; + s[5] = mh_rotl(s[5] ^ s[3], 6u); + s[7] = mh_rotl(s[7], 24u) + s[5]; + s[15] += s[7]; + s[13] += s[15]; + s[0] *= (s[13] | 1u); + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[15] *= (s[3] | 1u); + s[6] ^= (s[15] & s[12]); + s[2] ^= s[6]; + s[8] ^= s[2]; + s[1] = s[1] * 0x6e553265u + s[8]; + s[12] += s[1] + 0x0da30db5u; + s[7] ^= s[12]; + s[1] ^= s[7]; + s[3] ^= s[1]; + s[4] += s[3]; + s[15] ^= s[4]; + s[3] += s[15]; + s[2] *= (s[3] | 1u); + s[7] += s[2]; + s[0] = (s[0] ^ s[7]) * 0x97f0fd93u; + s[14] = mh_rotl(s[14] ^ s[0], 27u); + s[13] = (s[13] ^ s[14]) * 0xb04f1b3fu; + s[9] -= s[13]; + s[3] += s[9]; + s[4] -= s[3]; + s[8] ^= s[4]; + s[9] ^= s[8]; + s[4] += s[9]; + s[9] = s[9] * 0x5b96b23bu + s[4]; + s[1] += s[9]; + s[8] += s[1]; + s[14] += s[8]; + s[5] = mh_rotl(s[5] ^ s[14], 12u); + s[8] = (s[8] ^ s[5]) * 0x6395a44fu; + s[12] ^= s[8] ^ 0x1623eb44u; + s[14] = (s[14] ^ s[12]) * 0xed649ca9u; + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[12] *= (s[11] | 1u); + s[15] = mh_rotl(s[15] ^ s[12], 23u); + s[3] += s[15]; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x29ccc511u; + s[4] += s[8]; + s[14] = (s[14] ^ s[4]) * 0xa94e09cbu; + s[7] = (s[7] ^ s[14]) * 0x2353916bu; + s[1] ^= (s[7] & s[9]); + s[8] = (s[8] ^ s[1]) * 0x3189b2c5u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[7] = (s[7] ^ s[10]) * 0x8fbc5699u; + s[12] ^= s[7] ^ 0x02fcc6f5u; + s[6] += s[12]; + s[4] += s[6]; + s[15] ^= s[4] ^ 0x37cf53dcu; + s[9] *= (s[15] | 1u); + s[14] -= s[9]; + s[7] -= s[14]; + s[3] = mh_rotl(s[3], 15u) + s[7]; + s[0] ^= s[3]; + s[7] = mh_rotl(s[7], 7u) + s[0]; + s[14] = mh_rotl(s[14], 14u) + s[7]; + s[12] += s[14]; + s[10] = (s[10] ^ s[12]) * 0xb35348fbu; + s[5] = mh_rotl(s[5] ^ s[10], 17u); + s[14] ^= s[5] ^ 0x43820636u; + s[13] += s[14]; + s[3] = (s[3] ^ s[13]) * 0xaeaf3829u; + s[1] *= (s[3] | 1u); + s[2] += s[1]; + s[13] = mh_rotl(s[13], 9u) + s[2]; + s[3] = mh_rotl(s[3] ^ s[13], 26u); + s[2] = mh_rotl(s[2], 17u) + s[3]; + s[5] = mh_rotl(s[5] ^ s[2], 26u); + s[9] += s[5]; + s[3] = (s[3] ^ s[9]) * 0xc027efe3u; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x33c90921u; + s[2] -= s[8]; + s[4] ^= (s[2] & s[15]); + s[9] *= (s[4] | 1u); + s[2] += s[9]; + s[13] += (s[2] | s[6]); + s[4] = (s[4] ^ s[13]) * 0xde5f056fu; + s[3] ^= s[4]; + s[0] *= (s[3] | 1u); + s[14] *= (s[0] | 1u); + s[11] += s[14]; + s[2] ^= (s[11] & s[6]); + s[1] *= (s[2] | 1u); + s[12] += s[1] + 0x027965c8u; + s[14] *= (s[12] | 1u); + s[15] -= s[14]; + s[6] += s[15] + 0x3f2ed460u; + s[14] ^= s[6]; + s[9] ^= s[14]; + s[14] ^= s[9]; + s[8] -= s[14]; + s[9] = s[9] * 0x37363dc7u + s[8]; + s[2] ^= s[9]; + s[9] += s[2] + 0x36d721cdu; + s[2] ^= s[9] ^ 0x6a3aa7cbu; + s[13] = mh_rotl(s[13] ^ s[2], 4u); + s[1] ^= s[13]; + s[11] ^= s[1]; + s[10] ^= (s[11] & s[3]); + s[1] += s[10]; + s[13] ^= (s[1] & s[0]); + s[5] += s[13]; + s[0] += s[5]; + s[1] += s[0] + 0x29e429d0u; + s[7] *= (s[1] | 1u); + s[1] += s[7]; + s[13] = (s[13] ^ s[1]) * 0xebce972fu; + s[14] ^= s[13] ^ 0x1155a47fu; + s[2] += s[14]; + s[5] += (s[2] | s[3]); + s[1] += s[5] + 0x6ee2efc2u; + s[6] *= (s[1] | 1u); + s[12] = s[12] * 0xf94d29abu + s[6]; + s[1] ^= s[12] ^ 0x83a5d198u; + s[8] ^= (s[1] & s[2]); + s[15] = s[15] * 0xf23f5c07u + s[8]; + s[12] *= (s[15] | 1u); + s[4] ^= s[12]; + s[6] = mh_rotl(s[6], 27u) + s[4]; + s[14] = mh_rotl(s[14], 24u) + s[6]; + s[5] += s[14]; + s[13] ^= s[5] ^ 0x3acfc3e3u; + s[12] ^= s[13]; + s[4] ^= (s[12] & s[7]); + s[2] ^= (s[4] & s[10]); + s[15] = mh_rotl(s[15] ^ s[2], 18u); + s[0] += s[15]; + s[8] *= (s[0] | 1u); + s[13] ^= s[8]; + s[12] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[12], 4u); + s[15] += s[3] + 0x92e6fcceu; + s[10] = mh_rotl(s[10], 6u) + s[15]; + s[4] = mh_rotl(s[4] ^ s[10], 13u); + s[0] ^= s[4] ^ 0x4eb97c7fu; + s[5] -= s[0]; + s[2] = (s[2] ^ s[5]) * 0x02dedd01u; + s[7] ^= s[2]; + s[13] += (s[7] | s[1]); + s[10] += s[13]; + s[2] *= (s[10] | 1u); + s[6] *= (s[2] | 1u); + s[9] ^= s[6]; + s[14] += s[9]; + s[12] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[12], 29u); + s[7] += s[14] + 0x69164b49u; + s[4] = s[4] * 0x00950233u + s[7]; + s[9] ^= (s[4] & s[11]); + s[1] = (s[1] ^ s[9]) * 0x4e1cc661u; + s[2] -= s[1]; + s[8] = (s[8] ^ s[2]) * 0x8b929a3bu; + s[2] += s[8]; + s[15] += (s[2] | s[9]); + s[3] += s[15] + 0x4a9cd552u; + s[0] = (s[0] ^ s[3]) * 0x32dafb91u; + s[9] = mh_rotl(s[9], 17u) + s[0]; + s[11] *= (s[9] | 1u); + s[9] -= s[11]; + s[6] += s[9]; + s[9] += s[6] + 0xf58412b3u; + s[7] += s[9] + 0x664fa0c3u; + s[12] = s[12] * 0x0f8329a3u + s[7]; + s[11] += s[12] + 0x5b5d3b76u; + s[5] -= s[11]; + s[10] = (s[10] ^ s[5]) * 0x206437adu; + s[12] = s[12] * 0xbaaafbc9u + s[10]; + s[8] *= (s[12] | 1u); + s[0] += s[8]; + s[1] += s[0] + 0x17331c4fu; + s[3] ^= (s[1] & s[2]); + s[2] = mh_rotl(s[2] ^ s[3], 24u); + s[0] += (s[2] | s[1]); + s[1] = mh_rotl(s[1] ^ s[0], 11u); + s[0] *= (s[1] | 1u); + s[2] = s[2] * 0xfa17cdb7u + s[0]; + s[14] += s[2]; + s[3] ^= s[14]; + s[13] += s[3]; + s[2] += s[13]; + s[8] = mh_rotl(s[8] ^ s[2], 28u); + s[1] *= (s[8] | 1u); + s[14] -= s[1]; + s[11] = mh_rotl(s[11], 9u) + s[14]; + s[10] ^= s[11]; + s[9] += s[10]; + s[0] += s[9] + 0x3437b9adu; + s[4] = (s[4] ^ s[0]) * 0x6074d9edu; + s[12] += s[4] + 0xf268adfeu; + s[14] += s[12] + 0x05784ee6u; + s[13] = s[13] * 0x92ea562fu + s[14]; + s[11] = mh_rotl(s[11] ^ s[13], 18u); + s[2] = mh_rotl(s[2], 4u) + s[11]; + s[13] = (s[13] ^ s[2]) * 0x49aaf125u; + s[3] -= s[13]; + s[7] += s[3] + 0x1d4d2968u; + s[5] ^= (s[7] & s[12]); + s[15] -= s[5]; + s[0] ^= s[15] ^ 0xa66653d0u; + s[2] += s[0]; + s[11] -= s[2]; + s[0] = mh_rotl(s[0] ^ s[11], 16u); + s[3] = mh_rotl(s[3], 4u) + s[0]; + s[8] *= (s[3] | 1u); + s[6] ^= s[8] ^ 0x228a8e2bu; + s[2] ^= s[6]; + s[15] += s[2]; + s[8] += s[15]; + s[2] = mh_rotl(s[2] ^ s[8], 29u); + s[10] ^= s[2]; + s[13] = mh_rotl(s[13], 7u) + s[10]; + s[2] += s[13]; + s[10] = s[10] * 0x373045b7u + s[2]; + s[8] ^= s[10]; + s[13] -= s[8]; + s[15] = (s[15] ^ s[13]) * 0x9c79f3bfu; + s[0] = mh_rotl(s[0], 31u) + s[15]; + s[12] = mh_rotl(s[12], 25u) + s[0]; + s[9] -= s[12]; + s[0] = mh_rotl(s[0], 18u) + s[9]; + s[13] = mh_rotl(s[13] ^ s[0], 11u); + s[14] = mh_rotl(s[14], 9u) + s[13]; + s[7] -= s[14]; + s[3] ^= s[7] ^ 0x380dac7fu; + s[1] ^= s[3]; + s[8] += s[1] + 0x2ae5a9dau; + s[10] = mh_rotl(s[10], 3u) + s[8]; + s[7] = mh_rotl(s[7], 2u) + s[10]; + s[8] *= (s[7] | 1u); + s[10] = (s[10] ^ s[8]) * 0xc6c624a1u; + s[7] = mh_rotl(s[7], 6u) + s[10]; + s[5] += s[7] + 0x3b2e05abu; + s[15] ^= s[5]; + s[12] -= s[15]; + s[14] += s[12]; + s[11] += (s[14] | s[4]); + s[8] += s[11]; + s[15] -= s[8]; + s[10] += s[15]; + s[6] += s[10] + 0x41c42bb0u; + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[15] += (s[4] | s[6]); + s[4] = (s[4] ^ s[15]) * 0x4256a3b1u; + s[0] ^= s[4]; + s[8] = mh_rotl(s[8], 4u) + s[0]; + s[5] -= s[8]; + s[4] += s[5] + 0x566b8b0fu; + s[8] = (s[8] ^ s[4]) * 0xf604d0e7u; + s[10] += s[8]; + s[2] *= (s[10] | 1u); + s[5] ^= s[2]; + s[14] -= s[5]; + s[13] += s[14]; + s[2] -= s[13]; + s[0] += s[2]; + s[2] ^= s[0]; + s[0] ^= s[2] ^ 0x51509095u; + s[4] *= (s[0] | 1u); + s[12] *= (s[4] | 1u); + s[8] += (s[12] | s[9]); + s[10] = mh_rotl(s[10], 11u) + s[8]; + s[9] ^= s[10]; + s[15] += s[9]; + s[11] ^= s[15] ^ 0xa0d4f940u; + s[5] ^= s[11]; + s[6] ^= (s[5] & s[11]); + s[5] ^= s[6]; + s[0] *= (s[5] | 1u); + s[4] -= s[0]; + s[6] += (s[4] | s[3]); + s[4] = mh_rotl(s[4] ^ s[6], 9u); + s[12] ^= (s[4] & s[5]); + s[1] *= (s[12] | 1u); + s[11] ^= s[1]; + s[15] ^= s[11]; + s[4] ^= s[15] ^ 0x0a7a3a1bu; + s[7] += s[4]; + s[8] = mh_rotl(s[8] ^ s[7], 18u); + s[12] ^= s[8]; + s[1] ^= (s[12] & s[3]); + s[0] = mh_rotl(s[0], 7u) + s[1]; + s[2] ^= s[0]; + s[13] ^= s[2]; + s[0] = (s[0] ^ s[13]) * 0x24a5f39du; + s[15] -= s[0]; + s[0] ^= s[15]; + s[1] += s[0]; + s[13] = mh_rotl(s[13], 20u) + s[1]; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 13u) + s[4]; + s[4] ^= s[1]; + s[5] = mh_rotl(s[5], 31u) + s[4]; + s[0] -= s[5]; + s[7] = mh_rotl(s[7] ^ s[0], 28u); + s[5] += s[7]; + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 16u); + s[0] ^= s[5] ^ 0xfb5e8938u; + s[8] += s[0]; + s[12] *= (s[8] | 1u); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[12] += s[11] + 0x9786f7f9u; + s[14] += s[12] + 0x47ed1785u; + s[7] ^= s[14] ^ 0x6483ca53u; + s[5] ^= s[7] ^ 0x7fcbaaf8u; + s[12] += s[5]; + s[1] += (s[12] | s[10]); + s[6] -= s[1]; + s[2] = mh_rotl(s[2], 12u) + s[6]; + s[8] += s[2] + 0x41a11731u; + s[11] = mh_rotl(s[11], 12u) + s[8]; + s[2] += s[11] + 0xdaf8e7dau; + s[7] *= (s[2] | 1u); + s[11] ^= s[7] ^ 0x0af2771du; + s[8] += s[11]; + s[4] += s[8]; + s[13] ^= s[4]; + s[14] = mh_rotl(s[14] ^ s[13], 27u); + s[12] ^= s[14]; + s[9] = s[9] * 0x232d6601u + s[12]; + s[4] *= (s[9] | 1u); + s[1] += s[4]; + s[0] += s[1]; + s[13] *= (s[0] | 1u); + s[1] *= (s[13] | 1u); + s[9] = mh_rotl(s[9] ^ s[1], 19u); + s[0] = mh_rotl(s[0] ^ s[9], 8u); + s[12] += s[0]; + s[15] = mh_rotl(s[15] ^ s[12], 2u); + s[1] -= s[15]; + s[15] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[8] ^= s[12]; + s[0] *= (s[8] | 1u); + s[14] ^= (s[0] & s[6]); + s[11] += s[14]; + s[13] ^= s[11]; + s[4] ^= (s[13] & s[5]); + s[12] -= s[4]; + s[15] -= s[12]; + s[12] = mh_rotl(s[12], 8u) + s[15]; + s[0] = s[0] * 0x28ee8749u + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 13u); + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[5] = (s[5] ^ s[10]) * 0xc5b4f577u; + s[3] = mh_rotl(s[3] ^ s[5], 8u); + s[7] = mh_rotl(s[7] ^ s[3], 30u); + s[1] -= s[7]; + s[5] = (s[5] ^ s[1]) * 0x2d76383du; + s[11] += s[5]; + s[4] = mh_rotl(s[4], 4u) + s[11]; + s[2] ^= s[4]; + s[9] = (s[9] ^ s[2]) * 0x4b24be99u; + s[10] = mh_rotl(s[10], 31u) + s[9]; + s[9] -= s[10]; + s[8] -= s[9]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +static inline void mh_item(__global const uint* cache, uint t, uint* s) { + s[0] = 0xceed56d7u; + s[1] = 0x9ba270d2u; + s[2] = 0x82caab2du; + s[3] = 0x81ebce0eu; + s[4] = 0x12b6ecf1u; + s[5] = 0xd0f3fd7cu; + s[6] = 0xd872eefeu; + s[7] = 0xc158c7bdu; + s[8] = t * 0xf351d601u + 0xc6892460u; + s[9] = t * 0xa3bb398fu + 0x25b7228au; + s[10] = t * 0xb5a09e35u + 0xcd515004u; + s[11] = t * 0x7509c9c1u + 0x2846527au; + s[12] = t * 0x6bbf31e9u + 0xa6324241u; + s[13] = t * 0xfc849a79u + 0x36e3ec53u; + s[14] = t * 0xded91851u + 0x82961bacu; + s[15] = t * 0x8d9113d1u + 0x0f97ba7du; + mh_round_0(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +static inline uint mh_word(__global const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// Memory-hard dataset (MEMHARD.md). One work-item per cache segment; one work-item per 64-byte dataset item. +// The same constants as memhard.h in this pack (one emitter, three dialects). +__kernel void igneum_cache_fill(__global uint* cache, uint nSegments) { + uint seg = (uint)get_global_id(0); + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__kernel void igneum_build(__global uint* ds, __global const uint* cache, uint nItems) { + uint t = (uint)get_global_id(0); + if (t < nItems) { + uint s[16]; + mh_item(cache, t, s); + __global uint* d = ds + ((ulong)t * 16u); + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per work-item. IGNEUM_GROUP is a multiple of 32; lane = lid & 31 and every exchange stays inside the +// lane's own aligned run of 32 work-items, exactly like simd_shuffle_xor inside a 32-wide Metal SIMD group and +// __shfl_xor_sync inside a CUDA warp. Control flow is uniform (no branches at all). +IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r2 = r2 ^ t_; } // 1 shfl + r3 = r3 + r2 + ((((sel >> 10u) & 1u) != 0u) ? 0x642e66dbu : 0x2cccb6cau); // 2 add + r0 = rotl_imm(r0, 19u); // 3 rotl + r7 = rotr_var(r7, r6); // 4 rotr + r7 = r7 + r4 + ((((sel >> 21u) & 1u) != 0u) ? 0xc1535555u : 0xee02465fu); // 5 add + r1 = mul_hi(r1, r7); // 6 mulhi + r4 = r4 ^ ds[r2 & mask]; // 7 load + r7 = r7 ^ ds[r4 & mask]; // 8 load + r0 = r0 ^ ds[r3 & mask]; // 9 load + r5 = r5 ^ ds[r1 & mask]; // 10 load + r1 = r1 ^ ds[r5 & mask]; // 11 load + r3 = mul_hi(r3, r5); // 12 mulhi + r1 = r1 ^ ds[r3 & mask]; // 13 load + r0 = r0 - r3; // 14 sub + r5 = r1 * r3 + r5; // 15 mad + r6 = mul_hi(r6, r1); // 16 mulhi + r5 = r5 + r2 + ((((sel >> 28u) & 1u) != 0u) ? 0x8b965b57u : 0x697b3d00u); // 17 add + r0 = mul_hi(r0, r6); // 18 mulhi + r5 = rotr_var(r5, r3); // 19 rotr + r5 = mul_hi(r5, r2); // 20 mulhi + r1 = r1 + r0 + ((((sel >> 1u) & 1u) != 0u) ? 0x6d7e8d05u : 0xebcf247au); // 21 add + r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 22 add + r1 = mul_hi(r1, r5); // 23 mulhi + r2 = r2 - r5; // 24 sub + r7 = r7 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x699ef1bbu : 0x08ffa6c7u); // 25 add + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 26 shfl + r7 = r7 + r1 + ((((sel >> 14u) & 1u) != 0u) ? 0xb4ead2fbu : 0xe60fea84u); // 27 add + r3 = r3 + r1 + ((((sel >> 6u) & 1u) != 0u) ? 0x8f30d21du : 0x65c76dabu); // 28 add + r2 = r2 ^ ds[r1 & mask]; // 29 load + r5 = r5 ^ ds[r7 & mask]; // 30 load + r2 = r2 ^ ds[r5 & mask]; // 31 load + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r1 = r1 ^ t_; } // 32 shfl + r4 = r5 * r7 + r4; // 33 mad + r4 = r4 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0xc7ce690cu : 0x0480debeu); // 34 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // 35 shfl + r7 = r7 + r1 + ((((sel >> 2u) & 1u) != 0u) ? 0xe10c2c95u : 0xc53b542eu); // 36 add + r5 = r5 ^ r7; // 37 xor + r2 = r2 | r1; // 38 or + r1 = mul_hi(r1, r0); // 39 mulhi + r6 = rotl_imm(r6, 19u); // 40 rotl + r4 = mul_hi(r4, r6); // 41 mulhi + r6 = r6 - r0; // 42 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r6 = r6 ^ t_; } // 43 shfl + r4 = r4 ^ ds[r2 & mask]; // 44 load + r1 = r1 ^ r3; // 45 xor + r7 = r7 ^ ds[r0 & mask]; // 46 load + r3 = r3 ^ ds[r1 & mask]; // 47 load + r5 = r5 * r3; // 48 mul + r1 = r1 - r5; // 49 sub + r2 = rotl_imm(r2, 8u); // 50 rotl + r1 = r1 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0x77b9bd43u : 0xa900fec4u); // 51 add + r4 = r4 ^ ds[r7 & mask]; // 52 load + r2 = r2 - r7; // 53 sub + r4 = r4 ^ r0; // 54 xor + r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 55 add + r2 = r2 ^ ds[r4 & mask]; // 56 load + r0 = r1 * r4 + r0; // 57 mad + r3 = r3 ^ ds[r5 & mask]; // 58 load + r5 = r5 | r6; // 59 or + r6 = r5 * r7 + r6; // 60 mad + r4 = rotl_imm(r4, 28u); // 61 rotl + r5 = mul_hi(r5, r0); // 62 mulhi + r3 = r3 ^ ds[r6 & mask]; // 63 load + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} + +#if IGNEUM_EXCHANGE != 0 +// Reports the sub-group size this device uses for a work-group of IGNEUM_GROUP items. host.c runs it only when the +// per-kernel query (clGetKernelSubGroupInfoKHR on igneum_hash) is unavailable; that query is preferred because a +// compiler may pick a different wave width per kernel (RDNA: wave32 or wave64). See WAVEFRONT.md. +IGNEUM_KERNEL_HASH void igneum_probe_subgroup(__global uint* out) { + if (get_local_id(0) == 0u) { out[0] = get_sub_group_size(); out[1] = get_num_sub_groups(); } +} +#endif + +// Header-bound variant (bind.rs): the init words come from initw, not SEEDW. Same body as igneum_hash. +IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask, __global const uint* initw) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + uint iw0 = initw[0], iw1 = initw[1], iw2 = initw[2], iw3 = initw[3], iw4 = initw[4], iw5 = initw[5], iw6 = initw[6], iw7 = initw[7]; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ iw0; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ iw1; } + { uint x = nonce ^ iw1; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ iw2; } + { uint x = nonce ^ iw2; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ iw3; } + { uint x = nonce ^ iw3; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ iw4; } + { uint x = nonce ^ iw4; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ iw5; } + { uint x = nonce ^ iw5; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ iw6; } + { uint x = nonce ^ iw6; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ iw7; } + { uint x = nonce ^ iw7; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ iw0; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r2 = r2 ^ t_; } // 1 shfl + r3 = r3 + r2 + ((((sel >> 10u) & 1u) != 0u) ? 0x642e66dbu : 0x2cccb6cau); // 2 add + r0 = rotl_imm(r0, 19u); // 3 rotl + r7 = rotr_var(r7, r6); // 4 rotr + r7 = r7 + r4 + ((((sel >> 21u) & 1u) != 0u) ? 0xc1535555u : 0xee02465fu); // 5 add + r1 = mul_hi(r1, r7); // 6 mulhi + r4 = r4 ^ ds[r2 & mask]; // 7 load + r7 = r7 ^ ds[r4 & mask]; // 8 load + r0 = r0 ^ ds[r3 & mask]; // 9 load + r5 = r5 ^ ds[r1 & mask]; // 10 load + r1 = r1 ^ ds[r5 & mask]; // 11 load + r3 = mul_hi(r3, r5); // 12 mulhi + r1 = r1 ^ ds[r3 & mask]; // 13 load + r0 = r0 - r3; // 14 sub + r5 = r1 * r3 + r5; // 15 mad + r6 = mul_hi(r6, r1); // 16 mulhi + r5 = r5 + r2 + ((((sel >> 28u) & 1u) != 0u) ? 0x8b965b57u : 0x697b3d00u); // 17 add + r0 = mul_hi(r0, r6); // 18 mulhi + r5 = rotr_var(r5, r3); // 19 rotr + r5 = mul_hi(r5, r2); // 20 mulhi + r1 = r1 + r0 + ((((sel >> 1u) & 1u) != 0u) ? 0x6d7e8d05u : 0xebcf247au); // 21 add + r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 22 add + r1 = mul_hi(r1, r5); // 23 mulhi + r2 = r2 - r5; // 24 sub + r7 = r7 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x699ef1bbu : 0x08ffa6c7u); // 25 add + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 26 shfl + r7 = r7 + r1 + ((((sel >> 14u) & 1u) != 0u) ? 0xb4ead2fbu : 0xe60fea84u); // 27 add + r3 = r3 + r1 + ((((sel >> 6u) & 1u) != 0u) ? 0x8f30d21du : 0x65c76dabu); // 28 add + r2 = r2 ^ ds[r1 & mask]; // 29 load + r5 = r5 ^ ds[r7 & mask]; // 30 load + r2 = r2 ^ ds[r5 & mask]; // 31 load + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r1 = r1 ^ t_; } // 32 shfl + r4 = r5 * r7 + r4; // 33 mad + r4 = r4 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0xc7ce690cu : 0x0480debeu); // 34 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // 35 shfl + r7 = r7 + r1 + ((((sel >> 2u) & 1u) != 0u) ? 0xe10c2c95u : 0xc53b542eu); // 36 add + r5 = r5 ^ r7; // 37 xor + r2 = r2 | r1; // 38 or + r1 = mul_hi(r1, r0); // 39 mulhi + r6 = rotl_imm(r6, 19u); // 40 rotl + r4 = mul_hi(r4, r6); // 41 mulhi + r6 = r6 - r0; // 42 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r6 = r6 ^ t_; } // 43 shfl + r4 = r4 ^ ds[r2 & mask]; // 44 load + r1 = r1 ^ r3; // 45 xor + r7 = r7 ^ ds[r0 & mask]; // 46 load + r3 = r3 ^ ds[r1 & mask]; // 47 load + r5 = r5 * r3; // 48 mul + r1 = r1 - r5; // 49 sub + r2 = rotl_imm(r2, 8u); // 50 rotl + r1 = r1 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0x77b9bd43u : 0xa900fec4u); // 51 add + r4 = r4 ^ ds[r7 & mask]; // 52 load + r2 = r2 - r7; // 53 sub + r4 = r4 ^ r0; // 54 xor + r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 55 add + r2 = r2 ^ ds[r4 & mask]; // 56 load + r0 = r1 * r4 + r0; // 57 mad + r3 = r3 ^ ds[r5 & mask]; // 58 load + r5 = r5 | r6; // 59 or + r6 = r5 * r7 + r6; // 60 mad + r4 = rotl_imm(r4, 28u); // 61 rotl + r5 = mul_hi(r5, r0); // 62 mulhi + r3 = r3 ^ ds[r6 & mask]; // 63 load + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cu b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cu new file mode 100644 index 00000000..9a46b748 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/kernel_bound.cu @@ -0,0 +1,123 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// Header-bound twin of igneum_hash in kernel.cu: the init words come from a kernel argument, not SEEDW. +// Host declarations (also in program_bound.h if present): +// struct IgneumInitWords { uint32_t w[8]; }; +// cudaError_t igneum_launch_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, +// IgneumInitWords iw, uint32_t nonces, uint32_t blockWarps); +// cudaError_t igneum_hash_bound_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps); +#include +#include +#include "program.h" + +struct IgneumInitWords { uint32_t w[8]; }; + +__device__ __forceinline__ uint32_t splitmix32(uint32_t x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +__device__ __forceinline__ uint32_t rotl_imm(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } +__device__ __forceinline__ uint32_t rotr_var(uint32_t x, uint32_t n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } + +__global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, IgneumInitWords iw) { + uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; + uint32_t nonce = baseNonce + gid; + uint32_t r0, r1, r2, r3, r4, r5, r6, r7; + { uint32_t x = nonce ^ iw.w[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ iw.w[1]; } + { uint32_t x = nonce ^ iw.w[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ iw.w[2]; } + { uint32_t x = nonce ^ iw.w[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ iw.w[3]; } + { uint32_t x = nonce ^ iw.w[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ iw.w[4]; } + { uint32_t x = nonce ^ iw.w[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ iw.w[5]; } + { uint32_t x = nonce ^ iw.w[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ iw.w[6]; } + { uint32_t x = nonce ^ iw.w[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ iw.w[7]; } + { uint32_t x = nonce ^ iw.w[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ iw.w[0]; } + + for (uint32_t it = 0u; it < 8u; ++it) { + uint32_t sel = r0; + r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // 1 shfl + r3 = r3 + r2 + ((((sel >> 10u) & 1u) != 0u) ? 0x642e66dbu : 0x2cccb6cau); // 2 add + r0 = rotl_imm(r0, 19u); // 3 rotl + r7 = rotr_var(r7, r6); // 4 rotr + r7 = r7 + r4 + ((((sel >> 21u) & 1u) != 0u) ? 0xc1535555u : 0xee02465fu); // 5 add + r1 = __umulhi(r1, r7); // 6 mulhi + r4 = r4 ^ ds[r2 & mask]; // 7 load + r7 = r7 ^ ds[r4 & mask]; // 8 load + r0 = r0 ^ ds[r3 & mask]; // 9 load + r5 = r5 ^ ds[r1 & mask]; // 10 load + r1 = r1 ^ ds[r5 & mask]; // 11 load + r3 = __umulhi(r3, r5); // 12 mulhi + r1 = r1 ^ ds[r3 & mask]; // 13 load + r0 = r0 - r3; // 14 sub + r5 = r1 * r3 + r5; // 15 mad + r6 = __umulhi(r6, r1); // 16 mulhi + r5 = r5 + r2 + ((((sel >> 28u) & 1u) != 0u) ? 0x8b965b57u : 0x697b3d00u); // 17 add + r0 = __umulhi(r0, r6); // 18 mulhi + r5 = rotr_var(r5, r3); // 19 rotr + r5 = __umulhi(r5, r2); // 20 mulhi + r1 = r1 + r0 + ((((sel >> 1u) & 1u) != 0u) ? 0x6d7e8d05u : 0xebcf247au); // 21 add + r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 22 add + r1 = __umulhi(r1, r5); // 23 mulhi + r2 = r2 - r5; // 24 sub + r7 = r7 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x699ef1bbu : 0x08ffa6c7u); // 25 add + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 26 shfl + r7 = r7 + r1 + ((((sel >> 14u) & 1u) != 0u) ? 0xb4ead2fbu : 0xe60fea84u); // 27 add + r3 = r3 + r1 + ((((sel >> 6u) & 1u) != 0u) ? 0x8f30d21du : 0x65c76dabu); // 28 add + r2 = r2 ^ ds[r1 & mask]; // 29 load + r5 = r5 ^ ds[r7 & mask]; // 30 load + r2 = r2 ^ ds[r5 & mask]; // 31 load + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 32 shfl + r4 = r5 * r7 + r4; // 33 mad + r4 = r4 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0xc7ce690cu : 0x0480debeu); // 34 add + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // 35 shfl + r7 = r7 + r1 + ((((sel >> 2u) & 1u) != 0u) ? 0xe10c2c95u : 0xc53b542eu); // 36 add + r5 = r5 ^ r7; // 37 xor + r2 = r2 | r1; // 38 or + r1 = __umulhi(r1, r0); // 39 mulhi + r6 = rotl_imm(r6, 19u); // 40 rotl + r4 = __umulhi(r4, r6); // 41 mulhi + r6 = r6 - r0; // 42 sub + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl + r4 = r4 ^ ds[r2 & mask]; // 44 load + r1 = r1 ^ r3; // 45 xor + r7 = r7 ^ ds[r0 & mask]; // 46 load + r3 = r3 ^ ds[r1 & mask]; // 47 load + r5 = r5 * r3; // 48 mul + r1 = r1 - r5; // 49 sub + r2 = rotl_imm(r2, 8u); // 50 rotl + r1 = r1 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0x77b9bd43u : 0xa900fec4u); // 51 add + r4 = r4 ^ ds[r7 & mask]; // 52 load + r2 = r2 - r7; // 53 sub + r4 = r4 ^ r0; // 54 xor + r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 55 add + r2 = r2 ^ ds[r4 & mask]; // 56 load + r0 = r1 * r4 + r0; // 57 mad + r3 = r3 ^ ds[r5 & mask]; // 58 load + r5 = r5 | r6; // 59 or + r6 = r5 * r7 + r6; // 60 mad + r4 = rotl_imm(r4, 28u); // 61 rotl + r5 = __umulhi(r5, r0); // 62 mulhi + r3 = r3 ^ ds[r6 & mask]; // 63 load + } + uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint32_t hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((uint64_t)hi << 32) | (uint64_t)lo; +} + +cudaError_t igneum_launch_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + IgneumInitWords iw, uint32_t nonces, uint32_t blockWarps) { + if (blockWarps == 0u || blockWarps > 32u) return cudaErrorInvalidValue; + uint32_t block = 32u * blockWarps; + if (nonces == 0u || (nonces % block) != 0u) return cudaErrorInvalidValue; + igneum_hash_bound<<>>(ds, out, baseNonce, mask, iw); + return cudaGetLastError(); +} + +cudaError_t igneum_hash_bound_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps) { + cudaFuncAttributes attr; + cudaError_t e = cudaFuncGetAttributes(&attr, igneum_hash_bound); + if (e != cudaSuccess) return e; + *numRegs = attr.numRegs; + return cudaOccupancyMaxActiveBlocksPerMultiprocessor(blocksPerSM, igneum_hash_bound, (int)(32u * blockWarps), 0); +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.h b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.h new file mode 100644 index 00000000..632a48e5 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.h @@ -0,0 +1,6773 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// Memory-hard dataset core, the same text that the Mac's Metal kernels and CPU verifier were checked against. +// Included by kernel.cu (device), host.cu (host reference) and proto-opencl/host.c (C99 host reference). +// See proto-metal/MEMHARD.md for the construction. kernel.cl carries the same text in OpenCL C. +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif +#if defined(__CUDACC__) +#define IGNEUM_HD __host__ __device__ __forceinline__ +#elif defined(_MSC_VER) && !defined(__cplusplus) +#define IGNEUM_HD static __inline +#else +#define IGNEUM_HD static inline +#endif +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 771868df4e64d6ab). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +IGNEUM_HD uint32_t mh_rotl(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +IGNEUM_HD void mh_chacha_block(const uint32_t* x, uint32_t* y) { + for (uint32_t i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint32_t r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint32_t i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +IGNEUM_HD void mh_cache_segment(uint32_t* cache, uint32_t seg) { + uint32_t prev[16]; uint32_t x[16]; uint32_t y[16]; + for (uint32_t i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint32_t j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0xceed56d7u ^ prev[4]; + x[5] = 0x9ba270d2u ^ prev[5]; + x[6] = 0x82caab2du ^ prev[6]; + x[7] = 0x81ebce0eu ^ prev[7]; + x[8] = 0x12b6ecf1u ^ prev[8]; + x[9] = 0xd0f3fd7cu ^ prev[9]; + x[10] = 0xd872eefeu ^ prev[10]; + x[11] = 0xc158c7bdu ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + uint32_t* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint32_t i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +IGNEUM_HD void mh_mixer(uint32_t* s, uint32_t rk) { + s[0] = (s[0] ^ (0xc6892460u + rk)) * 0xf351d601u; + s[1] = (s[1] ^ (0x25b7228au + rk)) * 0xa3bb398fu; + s[2] = (s[2] ^ (0xcd515004u + rk)) * 0xb5a09e35u; + s[3] = (s[3] ^ (0x2846527au + rk)) * 0x7509c9c1u; + s[4] = (s[4] ^ (0xa6324241u + rk)) * 0x6bbf31e9u; + s[5] = (s[5] ^ (0x36e3ec53u + rk)) * 0xfc849a79u; + s[6] = (s[6] ^ (0x82961bacu + rk)) * 0xded91851u; + s[7] = (s[7] ^ (0x0f97ba7du + rk)) * 0x8d9113d1u; + s[8] = (s[8] ^ (0xb6f921a9u + rk)) * 0x0ff15225u; + s[9] = (s[9] ^ (0x3ada24e5u + rk)) * 0x3a5bdd41u; + s[10] = (s[10] ^ (0xde20ab91u + rk)) * 0xab533435u; + s[11] = (s[11] ^ (0x5378eeb2u + rk)) * 0xe1c55ad5u; + s[12] = (s[12] ^ (0x7d161662u + rk)) * 0xe6d3bd0du; + s[13] = (s[13] ^ (0x89353cc1u + rk)) * 0x9d9ffbbdu; + s[14] = (s[14] ^ (0xb1aa03a2u + rk)) * 0xbb2a3cf3u; + s[15] = (s[15] ^ (0x788acae6u + rk)) * 0x50a7c08du; + MH_QR(s[0], s[4], s[8], s[12], 17u, 12u, 20u, 23u) MH_QR(s[1], s[5], s[9], s[13], 17u, 12u, 20u, 23u) + MH_QR(s[2], s[6], s[10], s[14], 17u, 12u, 20u, 23u) MH_QR(s[3], s[7], s[11], s[15], 17u, 12u, 20u, 23u) + MH_QR(s[0], s[5], s[10], s[15], 7u, 3u, 27u, 16u) MH_QR(s[1], s[6], s[11], s[12], 7u, 3u, 27u, 16u) + MH_QR(s[2], s[7], s[8], s[13], 7u, 3u, 27u, 16u) MH_QR(s[3], s[4], s[9], s[14], 7u, 3u, 27u, 16u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_0(uint32_t* s) { + s[3] = mh_rotl(s[3] ^ s[0], 13u); + s[1] = mh_rotl(s[1], 23u) + s[3]; + s[15] *= (s[1] | 1u); + s[7] ^= s[15]; + s[12] -= s[7]; + s[9] *= (s[12] | 1u); + s[6] = (s[6] ^ s[9]) * 0x2735a435u; + s[14] = mh_rotl(s[14], 17u) + s[6]; + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x14ddb139u; + s[1] += s[8] + 0xca6e0e1cu; + s[6] *= (s[1] | 1u); + s[15] ^= s[6]; + s[12] ^= s[15]; + s[11] = s[11] * 0x722d4b13u + s[12]; + s[4] = mh_rotl(s[4], 18u) + s[11]; + s[2] += s[4]; + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[9] -= s[1]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x0ffea53bu; + s[8] = mh_rotl(s[8], 5u) + s[14]; + s[3] += s[8] + 0x9ed7985eu; + s[6] += s[3]; + s[4] ^= s[6] ^ 0x1dd74ad9u; + s[13] += s[4]; + s[0] -= s[13]; + s[15] *= (s[0] | 1u); + s[12] ^= s[15]; + s[11] -= s[12]; + s[14] = mh_rotl(s[14], 27u) + s[11]; + s[6] += s[14]; + s[10] += s[6] + 0x2b37904eu; + s[8] = mh_rotl(s[8], 4u) + s[10]; + s[5] *= (s[8] | 1u); + s[0] = mh_rotl(s[0] ^ s[5], 14u); + s[13] ^= s[0]; + s[12] = s[12] * 0x77e0a5d3u + s[13]; + s[1] += s[12]; + s[13] = s[13] * 0x65318e55u + s[1]; + s[15] = mh_rotl(s[15], 29u) + s[13]; + s[13] -= s[15]; + s[12] = s[12] * 0xc4a25397u + s[13]; + s[0] ^= s[12]; + s[11] += s[0]; + s[5] = (s[5] ^ s[11]) * 0xeeadd5a3u; + s[15] = (s[15] ^ s[5]) * 0x731c68a3u; + s[0] += (s[15] | s[8]); + s[4] = s[4] * 0x51fb9437u + s[0]; + s[10] *= (s[4] | 1u); + s[12] *= (s[10] | 1u); + s[0] ^= (s[12] & s[8]); + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0x5eeca4fbu; + s[14] = mh_rotl(s[14] ^ s[0], 16u); + s[1] *= (s[14] | 1u); + s[3] *= (s[1] | 1u); + s[12] ^= s[3] ^ 0x705ffae7u; + s[11] ^= s[12] ^ 0x55f159afu; + s[10] = (s[10] ^ s[11]) * 0x631a1b7fu; + s[11] = mh_rotl(s[11], 17u) + s[10]; + s[7] += s[11]; + s[9] = mh_rotl(s[9], 27u) + s[7]; + s[12] ^= (s[9] & s[15]); + s[8] = mh_rotl(s[8], 22u) + s[12]; + s[9] ^= s[8]; + s[12] ^= (s[9] & s[5]); + s[7] += s[12]; + s[10] = mh_rotl(s[10], 14u) + s[7]; + s[15] += (s[10] | s[0]); + s[4] ^= s[15]; + s[5] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] ^= s[11]; + s[1] = mh_rotl(s[1], 3u) + s[14]; + s[11] *= (s[1] | 1u); + s[9] *= (s[11] | 1u); + s[3] = mh_rotl(s[3] ^ s[9], 2u); + s[12] = mh_rotl(s[12], 11u) + s[3]; + s[4] ^= s[12]; + s[12] *= (s[4] | 1u); + s[14] += s[12]; + s[8] = mh_rotl(s[8], 14u) + s[14]; + s[9] = mh_rotl(s[9] ^ s[8], 14u); + s[12] += s[9]; + s[13] = mh_rotl(s[13], 6u) + s[12]; + s[10] ^= s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 11u); + s[13] ^= s[12]; + s[2] += s[13]; + s[10] ^= s[2]; + s[15] += s[10] + 0x1634a71eu; + s[6] ^= s[15] ^ 0xd749a601u; + s[15] = (s[15] ^ s[6]) * 0x600e3ecbu; + s[12] += s[15]; + s[7] = s[7] * 0x0149e3ebu + s[12]; + s[15] += s[7]; + s[10] += s[15]; + s[13] = (s[13] ^ s[10]) * 0xa7c503e7u; + s[3] = mh_rotl(s[3] ^ s[13], 5u); + s[13] += s[3]; + s[14] ^= (s[13] & s[11]); + s[13] *= (s[14] | 1u); + s[8] ^= s[13]; + s[9] += (s[8] | s[5]); + s[12] = mh_rotl(s[12] ^ s[9], 29u); + s[15] ^= s[12] ^ 0x990f53b6u; + s[5] = mh_rotl(s[5], 30u) + s[15]; + s[3] -= s[5]; + s[11] += s[3]; + s[0] += s[11]; + s[10] *= (s[0] | 1u); + s[2] *= (s[10] | 1u); + s[12] ^= s[2]; + s[13] *= (s[12] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[1] ^= s[4] ^ 0xcd3069e4u; + s[0] = mh_rotl(s[0] ^ s[1], 3u); + s[15] ^= s[0] ^ 0x8c69c78du; + s[10] = mh_rotl(s[10], 21u) + s[15]; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 31u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[5] += s[11]; + s[13] ^= (s[5] & s[8]); + s[12] = (s[12] ^ s[13]) * 0x831edbe1u; + s[0] = mh_rotl(s[0], 24u) + s[12]; + s[11] ^= s[0]; + s[9] -= s[11]; + s[7] ^= s[9]; + s[8] = (s[8] ^ s[7]) * 0xc7e1cfddu; + s[12] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[12], 28u); + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[2] += s[3]; + s[9] += s[2]; + s[10] = mh_rotl(s[10], 21u) + s[9]; + s[13] = mh_rotl(s[13], 14u) + s[10]; + s[15] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 1u); + s[11] *= (s[7] | 1u); + s[9] += (s[11] | s[5]); + s[15] += s[9]; + s[10] += s[15] + 0xba60c9ecu; + s[9] = (s[9] ^ s[10]) * 0xd025f22du; + s[6] *= (s[9] | 1u); + s[0] *= (s[6] | 1u); + s[15] -= s[0]; + s[10] += s[15]; + s[0] += s[10] + 0xfb2e7c45u; + s[6] += s[0]; + s[10] = s[10] * 0xa719d3b5u + s[6]; + s[3] -= s[10]; + s[10] = s[10] * 0x4567f515u + s[3]; + s[6] = mh_rotl(s[6] ^ s[10], 3u); + s[15] ^= s[6]; + s[5] *= (s[15] | 1u); + s[9] += s[5] + 0x7add03edu; + s[8] += s[9] + 0x200dba17u; + s[15] += s[8]; + s[10] += s[15]; + s[0] -= s[10]; + s[8] ^= (s[0] & s[14]); + s[14] *= (s[8] | 1u); + s[7] += (s[14] | s[4]); + s[10] ^= s[7] ^ 0xfd92bbdeu; + s[6] += s[10] + 0xdfa6bf99u; + s[15] += s[6]; + s[0] -= s[15]; + s[13] *= (s[0] | 1u); + s[10] += s[13]; + s[14] = mh_rotl(s[14], 30u) + s[10]; + s[7] = mh_rotl(s[7] ^ s[14], 26u); + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[1] = mh_rotl(s[1] ^ s[4], 5u); + s[4] ^= s[1]; + s[8] ^= s[4] ^ 0x246709cfu; + s[4] += s[8]; + s[1] += s[4]; + s[0] += (s[1] | s[3]); + s[13] *= (s[0] | 1u); + s[3] -= s[13]; + s[6] += (s[3] | s[8]); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] += s[10]; + s[10] -= s[14]; + s[11] ^= (s[10] & s[2]); + s[13] ^= s[11]; + s[9] += (s[13] | s[15]); + s[4] += s[9]; + s[3] += s[4]; + s[14] -= s[3]; + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[8] += s[7]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[7] ^= s[3] ^ 0x139d83e8u; + s[6] += s[7]; + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[14] = mh_rotl(s[14] ^ s[4], 17u); + s[13] = mh_rotl(s[13], 22u) + s[14]; + s[8] += s[13]; + s[0] ^= s[8]; + s[8] ^= s[0]; + s[7] = (s[7] ^ s[8]) * 0x7d8b96a1u; + s[11] -= s[7]; + s[7] *= (s[11] | 1u); + s[13] += s[7] + 0x3dfedaadu; + s[6] = (s[6] ^ s[13]) * 0x02bf39b1u; + s[15] ^= s[6]; + s[10] += s[15]; + s[4] = mh_rotl(s[4], 24u) + s[10]; + s[6] = s[6] * 0xa211b535u + s[4]; + s[9] += s[6] + 0x6d1c8ec2u; + s[14] ^= s[9]; + s[1] ^= (s[14] & s[8]); + s[9] *= (s[1] | 1u); + s[11] *= (s[9] | 1u); + s[6] = mh_rotl(s[6] ^ s[11], 9u); + s[14] *= (s[6] | 1u); + s[5] -= s[14]; + s[3] *= (s[5] | 1u); + s[8] += s[3]; + s[15] += s[8]; + s[13] += s[15] + 0x4f61883fu; + s[15] = mh_rotl(s[15] ^ s[13], 17u); + s[0] += (s[15] | s[11]); + s[15] += s[0]; + s[2] -= s[15]; + s[8] -= s[2]; + s[5] *= (s[8] | 1u); + s[1] = (s[1] ^ s[5]) * 0x65420b47u; + s[12] = s[12] * 0x42ad8bf1u + s[1]; + s[15] += (s[12] | s[2]); + s[11] += s[15]; + s[7] = (s[7] ^ s[11]) * 0x24e3746bu; + s[1] ^= s[7]; + s[7] = mh_rotl(s[7], 31u) + s[1]; + s[0] ^= (s[7] & s[1]); + s[15] ^= s[0] ^ 0x47313c44u; + s[1] += s[15]; + s[11] ^= s[1]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[9] += s[12]; + s[2] -= s[9]; + s[1] = (s[1] ^ s[2]) * 0x9c164e0du; + s[10] += s[1]; + s[0] ^= s[10]; + s[6] ^= s[0]; + s[1] += s[6]; + s[15] = mh_rotl(s[15] ^ s[1], 4u); + s[14] -= s[15]; + s[7] ^= s[14]; + s[8] ^= s[7] ^ 0x2b5aacd6u; + s[13] += s[8]; + s[6] *= (s[13] | 1u); + s[1] = mh_rotl(s[1], 9u) + s[6]; + s[12] += (s[1] | s[7]); + s[8] ^= s[12]; + s[9] += (s[8] | s[11]); + s[14] += s[9] + 0x93a636aau; + s[13] -= s[14]; + s[0] = (s[0] ^ s[13]) * 0x0185d1f9u; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[9] ^= s[3]; + s[12] *= (s[9] | 1u); + s[4] += s[12]; + s[14] = mh_rotl(s[14] ^ s[4], 12u); + s[15] += s[14]; + s[0] = mh_rotl(s[0] ^ s[15], 11u); + s[5] -= s[0]; + s[9] -= s[5]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[13] -= s[5]; + s[2] += (s[13] | s[6]); + s[12] *= (s[2] | 1u); + s[5] = mh_rotl(s[5], 14u) + s[12]; + s[14] = s[14] * 0x37190e5fu + s[5]; + s[2] -= s[14]; + s[1] = mh_rotl(s[1], 25u) + s[2]; + s[15] += s[1]; + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[7] = mh_rotl(s[7], 15u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 13u); + s[5] *= (s[9] | 1u); + s[6] -= s[5]; + s[14] ^= s[6] ^ 0xf476d15fu; + s[13] ^= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[13] = mh_rotl(s[13] ^ s[10], 29u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[7] ^= s[4]; + s[10] = (s[10] ^ s[7]) * 0xa943fa7fu; + s[12] ^= s[10]; + s[3] = mh_rotl(s[3], 8u) + s[12]; + s[14] = (s[14] ^ s[3]) * 0x09fb17fdu; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] ^= s[7]; + s[7] ^= s[14]; + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[11] += s[8]; + s[2] += (s[11] | s[14]); + s[15] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 26u) + s[15]; + s[2] *= (s[3] | 1u); + s[4] -= s[2]; + s[3] += (s[4] | s[14]); + s[10] ^= s[3]; + s[0] -= s[10]; + s[13] ^= (s[0] & s[6]); + s[0] *= (s[13] | 1u); + s[5] *= (s[0] | 1u); + s[9] = mh_rotl(s[9], 12u) + s[5]; + s[3] ^= s[9]; + s[15] ^= (s[3] & s[1]); + s[8] = s[8] * 0x98abbf3du + s[15]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0x50468cebu; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[11] ^= s[1]; + s[15] = mh_rotl(s[15] ^ s[11], 9u); + s[13] = mh_rotl(s[13], 28u) + s[15]; + s[7] += s[13]; + s[14] = mh_rotl(s[14], 20u) + s[7]; + s[11] = (s[11] ^ s[14]) * 0x5091caadu; + s[7] ^= s[11] ^ 0x269d33e2u; + s[14] ^= s[7]; + s[5] = s[5] * 0x30d291edu + s[14]; + s[9] ^= s[5]; + s[10] += s[9]; + s[0] ^= s[10]; + s[7] *= (s[0] | 1u); + s[14] ^= s[7]; + s[2] -= s[14]; + s[13] += s[2]; + s[8] += s[13]; + s[12] ^= (s[8] & s[0]); + s[7] = mh_rotl(s[7], 8u) + s[12]; + s[0] = (s[0] ^ s[7]) * 0x1cae2a31u; + s[6] = mh_rotl(s[6], 29u) + s[0]; + s[10] ^= s[6] ^ 0xb9ccdbfdu; + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[1] *= (s[10] | 1u); + s[8] ^= (s[1] & s[4]); + s[4] ^= s[8] ^ 0x53da0b8au; + s[15] *= (s[4] | 1u); + s[13] -= s[15]; + s[1] += (s[13] | s[0]); + s[6] += (s[1] | s[4]); + s[4] ^= s[6]; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[6] -= s[1]; + s[5] += (s[6] | s[12]); + s[12] ^= s[5]; + s[15] = (s[15] ^ s[12]) * 0x458c7163u; + s[13] -= s[15]; + s[6] = mh_rotl(s[6] ^ s[13], 20u); + s[2] = (s[2] ^ s[6]) * 0x9c39a383u; + s[0] += s[2]; + s[12] ^= s[0] ^ 0x7cc2033au; + s[13] = mh_rotl(s[13] ^ s[12], 12u); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[15] = (s[15] ^ s[6]) * 0x0c9eb2cfu; + s[8] *= (s[15] | 1u); + s[2] += s[8]; + s[5] = mh_rotl(s[5], 19u) + s[2]; + s[8] *= (s[5] | 1u); + s[0] += s[8]; + s[6] = s[6] * 0x79f7c2dfu + s[0]; + s[14] += s[6]; + s[11] = s[11] * 0x5e817e5bu + s[14]; + s[14] ^= s[11]; + s[4] ^= s[14]; + s[9] += s[4] + 0xd46a416fu; + s[14] = s[14] * 0xa4a2923fu + s[9]; + s[7] *= (s[14] | 1u); + s[4] = (s[4] ^ s[7]) * 0x90bc8fcdu; + s[14] += s[4]; + s[7] = (s[7] ^ s[14]) * 0xf112f8f5u; + s[0] *= (s[7] | 1u); + s[12] -= s[0]; + s[3] ^= s[12]; + s[9] ^= s[3]; + s[5] = (s[5] ^ s[9]) * 0x24022a1du; + s[13] = mh_rotl(s[13], 25u) + s[5]; + s[1] *= (s[13] | 1u); + s[10] += s[1]; + s[12] = (s[12] ^ s[10]) * 0xa16c00d1u; + s[6] -= s[12]; + s[7] ^= s[6]; + s[10] ^= s[7] ^ 0x58615cc4u; + s[4] += s[10]; + s[3] *= (s[4] | 1u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[0] += s[4]; + s[3] ^= s[0]; + s[1] = mh_rotl(s[1], 20u) + s[3]; + s[13] ^= s[1] ^ 0x244eb2e2u; + s[0] ^= s[13] ^ 0x2273d5c0u; + s[15] ^= s[0]; + s[13] -= s[15]; + s[2] ^= s[13] ^ 0x7c995a78u; + s[4] -= s[2]; + s[14] ^= s[4]; + s[0] = mh_rotl(s[0], 29u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[0], 1u); + s[2] += (s[14] | s[1]); + s[10] += (s[2] | s[12]); + s[12] ^= s[10]; + s[6] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 30u) + s[6]; + s[12] ^= s[9]; + s[14] -= s[12]; + s[11] += s[14]; + s[10] += (s[11] | s[6]); + s[2] += (s[10] | s[5]); + s[1] = mh_rotl(s[1] ^ s[2], 29u); + s[6] = s[6] * 0xd99bd00bu + s[1]; + s[1] = (s[1] ^ s[6]) * 0xe0d965a7u; + s[7] += s[1] + 0x51b2428bu; + s[15] ^= s[7] ^ 0x50b8787bu; + s[0] += s[15] + 0xfe2752f1u; + s[4] += s[0] + 0x0e368287u; + s[1] += s[4]; + s[6] ^= s[1] ^ 0xe35b392eu; + s[2] = mh_rotl(s[2], 23u) + s[6]; + s[9] ^= s[2]; + s[15] = s[15] * 0xd6a40fabu + s[9]; + s[5] -= s[15]; + s[2] += s[5]; + s[6] = mh_rotl(s[6] ^ s[2], 8u); + s[5] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[4] += s[13] + 0x53640c05u; + s[0] = mh_rotl(s[0] ^ s[4], 7u); + s[13] ^= s[0]; + s[9] *= (s[13] | 1u); + s[0] ^= s[9]; + s[10] = s[10] * 0x843679c9u + s[0]; + s[6] = mh_rotl(s[6] ^ s[10], 29u); + s[14] = mh_rotl(s[14] ^ s[6], 12u); + s[1] += s[14]; + s[13] = s[13] * 0xa749a1b5u + s[1]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[2] = (s[2] ^ s[12]) * 0x5b1ce1c1u; + s[15] *= (s[2] | 1u); + s[12] ^= (s[15] & s[9]); + s[0] = mh_rotl(s[0] ^ s[12], 25u); + s[14] ^= s[0]; + s[3] *= (s[14] | 1u); + s[8] ^= s[3] ^ 0x6ca032cbu; + s[4] -= s[8]; + s[12] ^= s[4] ^ 0x7728b3cbu; + s[7] += (s[12] | s[8]); + s[5] = s[5] * 0x0ae2c6cdu + s[7]; + s[0] += s[5]; + s[9] = mh_rotl(s[9], 24u) + s[0]; + s[1] -= s[9]; + s[11] ^= s[1] ^ 0xf5da2550u; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[3] += s[8] + 0xa4fe9e4bu; + s[14] *= (s[3] | 1u); + s[6] = (s[6] ^ s[14]) * 0xbd9356a9u; + s[12] = mh_rotl(s[12] ^ s[6], 7u); + s[7] = (s[7] ^ s[12]) * 0x875f73bfu; + s[1] -= s[7]; + s[14] = (s[14] ^ s[1]) * 0x1e7b97f7u; + s[6] = s[6] * 0x577deaddu + s[14]; + s[13] ^= s[6]; + s[4] *= (s[13] | 1u); + s[3] ^= s[4]; + s[15] ^= s[3] ^ 0x28e94074u; + s[0] = (s[0] ^ s[15]) * 0x6b8272cdu; + s[8] *= (s[0] | 1u); + s[3] ^= s[8]; + s[0] = s[0] * 0x0b665f15u + s[3]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 3u) + s[7]; + s[4] += s[14]; + s[12] = mh_rotl(s[12], 23u) + s[4]; + s[15] = mh_rotl(s[15], 31u) + s[12]; + s[8] += s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[1] += (s[4] | s[8]); + s[5] += s[1]; + s[9] += s[5]; + s[12] += s[9]; + s[1] = mh_rotl(s[1], 13u) + s[12]; + s[2] *= (s[1] | 1u); + s[4] -= s[2]; + s[11] = mh_rotl(s[11], 31u) + s[4]; + s[2] = mh_rotl(s[2], 2u) + s[11]; + s[7] += s[2] + 0x9a35b39au; + s[6] += (s[7] | s[13]); + s[0] *= (s[6] | 1u); + s[9] += (s[0] | s[8]); + s[14] = mh_rotl(s[14], 25u) + s[9]; + s[15] = mh_rotl(s[15], 4u) + s[14]; + s[6] ^= s[15]; + s[12] ^= s[6]; + s[10] += s[12] + 0x5cb2267au; + s[1] += s[10]; + s[15] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[15], 28u); + s[6] = mh_rotl(s[6], 19u) + s[13]; + s[3] += s[6] + 0xd7c31b8du; + s[14] = s[14] * 0x3b0ab799u + s[3]; + s[4] += s[14] + 0x3536b1f6u; + s[2] -= s[4]; + s[12] += (s[2] | s[11]); + s[11] ^= s[12] ^ 0xbf42c333u; + s[3] = (s[3] ^ s[11]) * 0xde9b7ca9u; + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[3] = mh_rotl(s[3] ^ s[5], 29u); + s[15] = mh_rotl(s[15] ^ s[3], 4u); + s[5] ^= s[15]; + s[14] ^= (s[5] & s[6]); + s[8] += (s[14] | s[0]); + s[12] = mh_rotl(s[12], 17u) + s[8]; + s[1] ^= s[12]; + s[10] = mh_rotl(s[10] ^ s[1], 26u); + s[13] = mh_rotl(s[13], 15u) + s[10]; + s[10] += s[13]; + s[12] -= s[10]; + s[4] ^= s[12] ^ 0xc9739849u; + s[2] ^= s[4] ^ 0x31699b20u; + s[12] += s[2]; + s[15] += s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[11] -= s[9]; + s[0] = mh_rotl(s[0] ^ s[11], 6u); + s[12] ^= (s[0] & s[7]); + s[14] ^= s[12] ^ 0x9419731fu; + s[7] = (s[7] ^ s[14]) * 0x394edfa7u; + s[11] = mh_rotl(s[11] ^ s[7], 8u); + s[13] += s[11]; + s[14] = (s[14] ^ s[13]) * 0xd8bdcc5bu; + s[8] += s[14]; + s[1] ^= s[8] ^ 0x7c3166e1u; + s[9] ^= s[1]; + s[2] *= (s[9] | 1u); + s[3] = mh_rotl(s[3], 25u) + s[2]; + s[5] += s[3]; + s[8] = (s[8] ^ s[5]) * 0x40545eedu; + s[7] ^= s[8]; + s[4] = (s[4] ^ s[7]) * 0x968dc0c3u; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[10] = mh_rotl(s[10], 20u) + s[1]; + s[1] ^= (s[10] & s[5]); + s[5] -= s[1]; + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[12] -= s[9]; + s[5] = s[5] * 0x2fa421c3u + s[12]; + s[0] += s[5] + 0xd84eb599u; + s[14] ^= s[0]; + s[12] += s[14] + 0x9fa50493u; + s[3] = (s[3] ^ s[12]) * 0x4d23b04du; + s[10] = s[10] * 0x78de01f5u + s[3]; + s[0] *= (s[10] | 1u); + s[3] += s[0]; + s[1] ^= s[3] ^ 0x3cb60603u; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[10] ^= (s[12] & s[1]); + s[2] *= (s[10] | 1u); + s[8] += s[2]; + s[13] -= s[8]; + s[2] *= (s[13] | 1u); + s[4] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 7u) + s[4]; + s[15] -= s[7]; + s[12] *= (s[15] | 1u); + s[1] ^= s[12]; + s[5] -= s[1]; + s[14] += s[5] + 0x36981c70u; + s[4] ^= s[14] ^ 0x71a79181u; + s[6] += s[4]; + s[8] ^= s[6]; + s[7] ^= s[8]; + s[14] ^= s[7]; + s[7] = (s[7] ^ s[14]) * 0x097a3803u; + s[4] *= (s[7] | 1u); + s[11] ^= (s[4] & s[10]); + s[4] += s[11]; + s[7] = (s[7] ^ s[4]) * 0x85738709u; + s[3] = mh_rotl(s[3] ^ s[7], 11u); + s[10] = mh_rotl(s[10], 10u) + s[3]; + s[2] += (s[10] | s[9]); + s[10] = (s[10] ^ s[2]) * 0x94c5048bu; + s[15] += s[10]; + s[8] += s[15] + 0x0b5cc6efu; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[14] = mh_rotl(s[14] ^ s[5], 25u); + s[3] ^= s[14] ^ 0x111815f3u; + s[8] += s[3]; + s[7] ^= s[8]; + s[11] ^= s[7] ^ 0x4e2582d7u; + s[9] += (s[11] | s[8]); + s[14] ^= s[9]; + s[7] -= s[14]; + s[8] = mh_rotl(s[8], 9u) + s[7]; + s[4] = (s[4] ^ s[8]) * 0xaac84b51u; + s[15] ^= s[4]; + s[1] = mh_rotl(s[1] ^ s[15], 3u); + s[7] = mh_rotl(s[7], 7u) + s[1]; + s[0] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[11] += s[2] + 0x98edfcf5u; + s[6] += s[11]; + s[2] = (s[2] ^ s[6]) * 0xa136e64du; + s[12] *= (s[2] | 1u); + s[8] = (s[8] ^ s[12]) * 0xce39a005u; + s[3] += s[8]; + s[7] ^= s[3]; + s[2] = mh_rotl(s[2] ^ s[7], 6u); + s[10] = mh_rotl(s[10] ^ s[2], 19u); + s[7] -= s[10]; + s[0] += s[7]; + s[7] = (s[7] ^ s[0]) * 0xcb29f5cbu; + s[4] *= (s[7] | 1u); + s[12] += s[4] + 0x4a2ccb18u; + s[8] = mh_rotl(s[8] ^ s[12], 28u); + s[2] *= (s[8] | 1u); + s[13] *= (s[2] | 1u); + s[3] = (s[3] ^ s[13]) * 0x8e193255u; + s[10] += s[3]; + s[8] += s[10]; + s[14] ^= (s[8] & s[6]); + s[12] ^= s[14]; + s[9] = (s[9] ^ s[12]) * 0x5b862b41u; + s[1] += s[9]; + s[10] ^= s[1] ^ 0xa652e937u; + s[0] = mh_rotl(s[0], 21u) + s[10]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[14] = (s[14] ^ s[12]) * 0x301b4ff9u; + s[13] = s[13] * 0x12fb71b3u + s[14]; + s[6] = mh_rotl(s[6] ^ s[13], 2u); + s[12] -= s[6]; + s[0] ^= s[12]; + s[11] = mh_rotl(s[11], 9u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[11], 17u); + s[12] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[12], 9u); + s[2] += s[14]; + s[4] ^= s[2]; + s[15] -= s[4]; + s[11] -= s[15]; + s[0] = s[0] * 0x9ae119bfu + s[11]; + s[14] ^= s[0]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[7] *= (s[8] | 1u); + s[10] -= s[7]; + s[5] -= s[10]; + s[2] += s[5] + 0xbb07e4b1u; + s[8] ^= s[2]; + s[9] += s[8]; + s[5] ^= s[9]; + s[1] = (s[1] ^ s[5]) * 0x350b4999u; + s[4] += s[1]; + s[9] = mh_rotl(s[9] ^ s[4], 27u); + s[6] = (s[6] ^ s[9]) * 0x367cc161u; + s[9] -= s[6]; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[8] ^= s[0] ^ 0x75d9afc5u; + s[14] = mh_rotl(s[14] ^ s[8], 10u); + s[7] += s[14] + 0x1912ec89u; + s[10] += (s[7] | s[4]); + s[0] -= s[10]; + s[3] += s[0]; + s[6] -= s[3]; + s[12] = (s[12] ^ s[6]) * 0x4c6c192du; + s[13] += (s[12] | s[5]); + s[3] = mh_rotl(s[3] ^ s[13], 25u); + s[13] = mh_rotl(s[13], 22u) + s[3]; + s[0] += s[13]; + s[12] -= s[0]; + s[10] ^= (s[12] & s[3]); + s[6] += s[10]; + s[2] = mh_rotl(s[2] ^ s[6], 19u); + s[6] -= s[2]; + s[9] += s[6]; + s[10] = s[10] * 0x6d659893u + s[9]; + s[11] ^= s[10]; + s[9] = (s[9] ^ s[11]) * 0x63085b93u; + s[4] ^= s[9] ^ 0xfa7139dbu; + s[11] = mh_rotl(s[11] ^ s[4], 31u); + s[4] -= s[11]; + s[10] += s[4]; + s[14] += s[10]; + s[9] = s[9] * 0x3564c517u + s[14]; + s[13] ^= s[9]; + s[4] += s[13]; + s[7] += s[4]; + s[13] = mh_rotl(s[13] ^ s[7], 5u); + s[6] ^= s[13]; + s[7] ^= s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 25u); + s[4] -= s[8]; + s[0] *= (s[4] | 1u); + s[4] *= (s[0] | 1u); + s[8] += s[4]; + s[2] *= (s[8] | 1u); + s[6] += s[2] + 0xbfdaf7b1u; + s[9] ^= s[6]; + s[1] = (s[1] ^ s[9]) * 0x3c5c1b5bu; + s[6] -= s[1]; + s[4] = mh_rotl(s[4], 11u) + s[6]; + s[3] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[3]; + s[8] = mh_rotl(s[8], 19u) + s[0]; + s[12] = (s[12] ^ s[8]) * 0x25e88231u; + s[0] -= s[12]; + s[4] ^= (s[0] & s[2]); + s[9] ^= (s[4] & s[6]); + s[5] = (s[5] ^ s[9]) * 0x3c0d5df5u; + s[6] += s[5]; + s[2] -= s[6]; + s[12] ^= s[2]; + s[1] += s[12] + 0x4dc4b094u; + s[10] ^= s[1]; + s[6] += s[10]; + s[7] += s[6] + 0x43a99a33u; + s[6] = s[6] * 0xdee0e37fu + s[7]; + s[12] = (s[12] ^ s[6]) * 0xc8a25e85u; + s[1] += (s[12] | s[3]); + s[12] ^= s[1]; + s[15] += s[12]; + s[4] = mh_rotl(s[4] ^ s[15], 17u); +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_1(uint32_t* s) { + s[1] += s[0]; + s[3] += s[1] + 0xad481039u; + s[11] += (s[3] | s[2]); + s[1] ^= (s[11] & s[12]); + s[14] -= s[1]; + s[10] += s[14] + 0x55885317u; + s[4] -= s[10]; + s[15] = mh_rotl(s[15] ^ s[4], 4u); + s[6] += s[15]; + s[13] = mh_rotl(s[13] ^ s[6], 20u); + s[11] = (s[11] ^ s[13]) * 0xff0504adu; + s[1] = (s[1] ^ s[11]) * 0x250dc94bu; + s[15] += s[1]; + s[12] *= (s[15] | 1u); + s[7] += s[12]; + s[8] ^= s[7]; + s[11] ^= (s[8] & s[7]); + s[4] = (s[4] ^ s[11]) * 0xcdf53d85u; + s[10] = (s[10] ^ s[4]) * 0xee957d9fu; + s[9] = (s[9] ^ s[10]) * 0x306403a5u; + s[7] -= s[9]; + s[12] ^= s[7]; + s[15] *= (s[12] | 1u); + s[2] -= s[15]; + s[11] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 29u); + s[11] += s[8] + 0x053c715du; + s[0] = (s[0] ^ s[11]) * 0x6e7f6f63u; + s[5] = mh_rotl(s[5] ^ s[0], 4u); + s[8] = (s[8] ^ s[5]) * 0xec01af93u; + s[13] = s[13] * 0x0c236ed3u + s[8]; + s[3] *= (s[13] | 1u); + s[9] ^= (s[3] & s[7]); + s[5] ^= s[9]; + s[12] += s[5]; + s[6] += s[12]; + s[3] -= s[6]; + s[13] *= (s[3] | 1u); + s[12] ^= (s[13] & s[15]); + s[3] = mh_rotl(s[3] ^ s[12], 11u); + s[0] = mh_rotl(s[0] ^ s[3], 22u); + s[9] += s[0] + 0x6379358cu; + s[8] ^= s[9]; + s[2] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 1u) + s[2]; + s[4] += s[9] + 0xc0eff105u; + s[10] ^= s[4]; + s[3] *= (s[10] | 1u); + s[11] += s[3]; + s[9] -= s[11]; + s[7] += s[9]; + s[9] -= s[7]; + s[8] = (s[8] ^ s[9]) * 0x820df9e3u; + s[2] = (s[2] ^ s[8]) * 0xe294988du; + s[7] = mh_rotl(s[7] ^ s[2], 20u); + s[6] += s[7]; + s[15] ^= s[6]; + s[9] *= (s[15] | 1u); + s[14] = mh_rotl(s[14] ^ s[9], 27u); + s[4] -= s[14]; + s[10] ^= s[4] ^ 0xea83d71fu; + s[3] = mh_rotl(s[3] ^ s[10], 23u); + s[10] += s[3]; + s[8] *= (s[10] | 1u); + s[1] ^= (s[8] & s[4]); + s[2] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[10] ^= s[14]; + s[14] += s[10]; + s[9] -= s[14]; + s[11] = (s[11] ^ s[9]) * 0xa98b9719u; + s[3] ^= s[11]; + s[5] = mh_rotl(s[5], 11u) + s[3]; + s[8] = (s[8] ^ s[5]) * 0x390f56e7u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[15] *= (s[10] | 1u); + s[1] = mh_rotl(s[1], 26u) + s[15]; + s[13] += (s[1] | s[15]); + s[10] = mh_rotl(s[10] ^ s[13], 17u); + s[1] -= s[10]; + s[15] -= s[1]; + s[4] += (s[15] | s[7]); + s[2] ^= s[4]; + s[0] ^= s[2] ^ 0x6f973e2fu; + s[3] = mh_rotl(s[3] ^ s[0], 29u); + s[4] = (s[4] ^ s[3]) * 0x0b66808fu; + s[3] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 12u) + s[3]; + s[10] *= (s[15] | 1u); + s[7] = (s[7] ^ s[10]) * 0x748e238bu; + s[14] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 21u); + s[15] *= (s[5] | 1u); + s[8] ^= s[15]; + s[7] ^= s[8] ^ 0x905950c7u; + s[8] ^= s[7]; + s[2] += s[8] + 0x28a71f71u; + s[9] += (s[2] | s[6]); + s[14] ^= (s[9] & s[10]); + s[13] ^= s[14] ^ 0x4778ae11u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[15] += s[0]; + s[14] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[14], 5u); + s[2] -= s[5]; + s[13] = mh_rotl(s[13], 18u) + s[2]; + s[10] -= s[13]; + s[9] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[9], 2u); + s[6] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[3] ^= s[2] ^ 0x3ded9adbu; + s[10] = s[10] * 0x4a716aafu + s[3]; + s[3] ^= s[10]; + s[12] = mh_rotl(s[12] ^ s[3], 16u); + s[3] += s[12]; + s[4] ^= s[3]; + s[13] ^= s[4]; + s[3] ^= s[13] ^ 0x244807b5u; + s[6] = s[6] * 0x3b67fdabu + s[3]; + s[14] = mh_rotl(s[14], 19u) + s[6]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] += s[8] + 0x283e5272u; + s[6] = mh_rotl(s[6], 17u) + s[4]; + s[4] ^= (s[6] & s[15]); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[9] = s[9] * 0x24d40dcbu + s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 22u); + s[3] += s[15]; + s[12] += s[3]; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 18u); + s[10] ^= s[15]; + s[14] += (s[10] | s[2]); + s[10] += s[14]; + s[2] = (s[2] ^ s[10]) * 0xbfbdab53u; + s[4] += s[2]; + s[8] += s[4] + 0x229e9450u; + s[2] ^= s[8]; + s[13] ^= s[2] ^ 0xd069b71au; + s[1] ^= s[13]; + s[14] = mh_rotl(s[14], 5u) + s[1]; + s[11] = mh_rotl(s[11], 11u) + s[14]; + s[2] ^= s[11]; + s[1] ^= s[2] ^ 0x87a0df98u; + s[3] ^= s[1] ^ 0x4012f8c8u; + s[10] ^= s[3]; + s[8] *= (s[10] | 1u); + s[3] += (s[8] | s[1]); + s[0] = mh_rotl(s[0], 24u) + s[3]; + s[10] += s[0] + 0x838435e8u; + s[3] = (s[3] ^ s[10]) * 0xd8ccc2b9u; + s[7] ^= s[3] ^ 0xa58f06ddu; + s[2] ^= s[7]; + s[0] += s[2]; + s[12] ^= s[0]; + s[6] ^= s[12]; + s[7] += s[6]; + s[12] = mh_rotl(s[12] ^ s[7], 25u); + s[4] ^= s[12]; + s[0] += (s[4] | s[5]); + s[11] *= (s[0] | 1u); + s[13] += s[11]; + s[15] = (s[15] ^ s[13]) * 0x49c15b43u; + s[10] = mh_rotl(s[10], 25u) + s[15]; + s[14] = mh_rotl(s[14] ^ s[10], 11u); + s[6] = mh_rotl(s[6], 28u) + s[14]; + s[5] *= (s[6] | 1u); + s[12] *= (s[5] | 1u); + s[3] *= (s[12] | 1u); + s[10] ^= s[3]; + s[15] ^= s[10]; + s[12] ^= s[15]; + s[6] ^= (s[12] & s[7]); + s[14] *= (s[6] | 1u); + s[12] ^= s[14] ^ 0xf5bafba8u; + s[15] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[15]; + s[9] ^= s[5]; + s[12] = mh_rotl(s[12], 6u) + s[9]; + s[10] ^= s[12]; + s[3] = (s[3] ^ s[10]) * 0x38f1a685u; + s[4] = s[4] * 0xcb7e5d23u + s[3]; + s[5] += s[4]; + s[10] = mh_rotl(s[10], 15u) + s[5]; + s[2] *= (s[10] | 1u); + s[12] -= s[2]; + s[7] ^= s[12]; + s[11] *= (s[7] | 1u); + s[6] = (s[6] ^ s[11]) * 0x72fff2bfu; + s[9] = mh_rotl(s[9], 9u) + s[6]; + s[11] *= (s[9] | 1u); + s[4] = mh_rotl(s[4] ^ s[11], 5u); + s[15] *= (s[4] | 1u); + s[13] = (s[13] ^ s[15]) * 0x137c61d9u; + s[9] += s[13]; + s[12] += (s[9] | s[8]); + s[7] = (s[7] ^ s[12]) * 0x60952fddu; + s[10] = mh_rotl(s[10] ^ s[7], 20u); + s[4] ^= s[10]; + s[2] ^= s[4]; + s[10] ^= s[2] ^ 0x1de54f3au; + s[14] ^= s[10]; + s[0] += s[14]; + s[12] ^= s[0] ^ 0x62facf82u; + s[15] ^= s[12]; + s[12] = mh_rotl(s[12], 13u) + s[15]; + s[14] = s[14] * 0xc82501bdu + s[12]; + s[0] -= s[14]; + s[11] = s[11] * 0x11744345u + s[0]; + s[3] = (s[3] ^ s[11]) * 0x9270eedfu; + s[9] += s[3] + 0x36b61dc9u; + s[15] += s[9] + 0x9d5947e1u; + s[8] = s[8] * 0x6f00fe17u + s[15]; + s[1] -= s[8]; + s[12] = (s[12] ^ s[1]) * 0x51e09723u; + s[4] += s[12]; + s[6] = mh_rotl(s[6], 23u) + s[4]; + s[11] += s[6] + 0x8b5f9427u; + s[7] *= (s[11] | 1u); + s[1] -= s[7]; + s[0] = s[0] * 0xab66ab6fu + s[1]; + s[13] *= (s[0] | 1u); + s[6] *= (s[13] | 1u); + s[9] += (s[6] | s[4]); + s[10] = (s[10] ^ s[9]) * 0x79592bfdu; + s[4] += s[10]; + s[5] = (s[5] ^ s[4]) * 0x8ba30269u; + s[3] = mh_rotl(s[3] ^ s[5], 17u); + s[9] += s[3] + 0x044adf30u; + s[0] = mh_rotl(s[0] ^ s[9], 5u); + s[14] ^= (s[0] & s[13]); + s[8] -= s[14]; + s[3] = (s[3] ^ s[8]) * 0xb32093b1u; + s[1] = mh_rotl(s[1] ^ s[3], 18u); + s[7] -= s[1]; + s[2] *= (s[7] | 1u); + s[14] = mh_rotl(s[14], 28u) + s[2]; + s[3] ^= s[14]; + s[14] += s[3]; + s[4] ^= s[14]; + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[15] = (s[15] ^ s[12]) * 0x35a4d8cbu; + s[14] += (s[15] | s[5]); + s[10] = mh_rotl(s[10] ^ s[14], 4u); + s[2] -= s[10]; + s[3] ^= s[2]; + s[11] = (s[11] ^ s[3]) * 0x1006ee2fu; + s[12] = mh_rotl(s[12], 20u) + s[11]; + s[4] = (s[4] ^ s[12]) * 0xca4aa4c3u; + s[15] *= (s[4] | 1u); + s[4] ^= (s[15] & s[3]); + s[13] -= s[4]; + s[10] += s[13] + 0xe5c86cb9u; + s[14] ^= s[10] ^ 0x5604f25du; + s[13] += s[14] + 0xe43d82cbu; + s[14] = mh_rotl(s[14] ^ s[13], 23u); + s[4] -= s[14]; + s[9] -= s[4]; + s[10] += s[9]; + s[9] += s[10]; + s[1] = (s[1] ^ s[9]) * 0x1bd8783du; + s[2] -= s[1]; + s[0] = (s[0] ^ s[2]) * 0x50dc547bu; + s[3] ^= s[0]; + s[6] -= s[3]; + s[2] += s[6]; + s[14] *= (s[2] | 1u); + s[10] ^= s[14]; + s[3] -= s[10]; + s[9] *= (s[3] | 1u); + s[4] = mh_rotl(s[4] ^ s[9], 1u); + s[9] += s[4]; + s[11] ^= s[9] ^ 0xcca1df60u; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0xfed45f11u; + s[6] = mh_rotl(s[6], 6u) + s[12]; + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[12] += s[13]; + s[5] -= s[12]; + s[10] = s[10] * 0xe661ba67u + s[5]; + s[6] = (s[6] ^ s[10]) * 0x38950a4fu; + s[9] = (s[9] ^ s[6]) * 0xd8e5439du; + s[11] = (s[11] ^ s[9]) * 0x5eb0f1a5u; + s[15] += s[11] + 0x4b16aaa7u; + s[7] += s[15]; + s[9] ^= s[7]; + s[8] ^= s[9] ^ 0x4e4132c7u; + s[6] += s[8]; + s[2] ^= s[6]; + s[13] -= s[2]; + s[9] += s[13] + 0x45441a4fu; + s[10] = mh_rotl(s[10] ^ s[9], 26u); + s[15] = mh_rotl(s[15], 23u) + s[10]; + s[14] ^= s[15]; + s[15] ^= s[14]; + s[11] = s[11] * 0x530c5d95u + s[15]; + s[12] += (s[11] | s[10]); + s[15] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[15], 28u); + s[9] = s[9] * 0x9d85d8abu + s[12]; + s[1] = mh_rotl(s[1], 23u) + s[9]; + s[5] = (s[5] ^ s[1]) * 0xab9db7cdu; + s[4] = (s[4] ^ s[5]) * 0xac76806du; + s[7] ^= s[4] ^ 0xb250e43cu; + s[10] += s[7]; + s[3] = mh_rotl(s[3], 15u) + s[10]; + s[2] += s[3] + 0x56ffdd08u; + s[10] ^= (s[2] & s[15]); + s[13] = mh_rotl(s[13] ^ s[10], 10u); + s[1] = mh_rotl(s[1], 11u) + s[13]; + s[3] -= s[1]; + s[13] = (s[13] ^ s[3]) * 0x7f82e3cbu; + s[11] = mh_rotl(s[11], 16u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[11], 8u); + s[15] = mh_rotl(s[15] ^ s[10], 8u); + s[14] -= s[15]; + s[5] ^= s[14]; + s[2] ^= s[5] ^ 0x8be07a00u; + s[4] = (s[4] ^ s[2]) * 0xf8afeb21u; + s[14] ^= s[4]; + s[2] = mh_rotl(s[2] ^ s[14], 1u); + s[9] -= s[2]; + s[11] = mh_rotl(s[11], 23u) + s[9]; + s[2] += s[11]; + s[11] = mh_rotl(s[11], 23u) + s[2]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[2] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 17u) + s[2]; + s[5] = s[5] * 0x02194355u + s[3]; + s[11] *= (s[5] | 1u); + s[1] *= (s[11] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 8u); + s[8] ^= s[10]; + s[9] += s[8]; + s[0] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[0]; + s[11] ^= (s[1] & s[2]); + s[13] = (s[13] ^ s[11]) * 0x6c9dbd19u; + s[11] += s[13]; + s[9] ^= s[11]; + s[3] = mh_rotl(s[3] ^ s[9], 6u); + s[15] *= (s[3] | 1u); + s[13] -= s[15]; + s[6] += s[13]; + s[9] ^= s[6] ^ 0x792555d6u; + s[3] = mh_rotl(s[3], 3u) + s[9]; + s[10] *= (s[3] | 1u); + s[2] = s[2] * 0x903bff0du + s[10]; + s[5] -= s[2]; + s[11] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[11], 31u); + s[11] -= s[9]; + s[2] = mh_rotl(s[2] ^ s[11], 24u); + s[5] = mh_rotl(s[5] ^ s[2], 24u); + s[7] += s[5]; + s[13] ^= s[7]; + s[12] -= s[13]; + s[5] += (s[12] | s[0]); + s[8] += s[5] + 0xaab979aau; + s[1] ^= s[8]; + s[13] += s[1] + 0xe5e6fc71u; + s[6] = mh_rotl(s[6] ^ s[13], 15u); + s[1] += s[6]; + s[2] += s[1]; + s[9] += (s[2] | s[11]); + s[10] ^= s[9]; + s[7] = s[7] * 0x2f536f71u + s[10]; + s[5] += s[7]; + s[0] = mh_rotl(s[0] ^ s[5], 5u); + s[13] -= s[0]; + s[9] += s[13]; + s[10] = mh_rotl(s[10] ^ s[9], 22u); + s[12] ^= (s[10] & s[13]); + s[6] += s[12] + 0x70c39328u; + s[2] += s[6] + 0x90a3925du; + s[10] += s[2]; + s[12] *= (s[10] | 1u); + s[9] -= s[12]; + s[10] = mh_rotl(s[10], 16u) + s[9]; + s[9] -= s[10]; + s[8] ^= (s[9] & s[15]); + s[4] ^= s[8]; + s[1] ^= s[4]; + s[3] = (s[3] ^ s[1]) * 0xc8cf6af9u; + s[12] ^= s[3]; + s[15] *= (s[12] | 1u); + s[1] = (s[1] ^ s[15]) * 0x19cdfb9du; + s[6] = s[6] * 0x199cfd21u + s[1]; + s[9] ^= s[6]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x2e1b9e84u; + s[11] = mh_rotl(s[11], 4u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 22u); + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] ^= s[8]; + s[5] ^= s[4]; + s[11] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[11], 13u); + s[10] += s[8] + 0x50912ebdu; + s[14] = (s[14] ^ s[10]) * 0x0ba09b01u; + s[6] ^= s[14]; + s[7] ^= s[6]; + s[13] += (s[7] | s[14]); + s[14] -= s[13]; + s[1] ^= s[14] ^ 0x4ada39c6u; + s[10] ^= s[1]; + s[2] ^= (s[10] & s[9]); + s[12] += s[2] + 0x909c30c1u; + s[9] += s[12]; + s[0] ^= s[9]; + s[4] -= s[0]; + s[7] ^= s[4]; + s[4] = (s[4] ^ s[7]) * 0xf96f3573u; + s[3] += s[4] + 0x9c417efdu; + s[13] += (s[3] | s[5]); + s[4] += s[13]; + s[6] ^= s[4]; + s[14] += s[6] + 0xb0989acbu; + s[15] -= s[14]; + s[2] += s[15]; + s[6] += s[2]; + s[2] ^= s[6]; + s[15] = s[15] * 0x1e3b63f3u + s[2]; + s[7] ^= s[15]; + s[3] += s[7] + 0xbaedebabu; + s[9] += (s[3] | s[5]); + s[10] *= (s[9] | 1u); + s[9] += s[10]; + s[11] ^= s[9]; + s[2] *= (s[11] | 1u); + s[7] ^= s[2]; + s[1] += s[7]; + s[2] = (s[2] ^ s[1]) * 0x358e9d21u; + s[7] += s[2] + 0xa87c4bbfu; + s[5] = mh_rotl(s[5] ^ s[7], 9u); + s[7] += s[5] + 0x32cba03cu; + s[12] += s[7]; + s[3] ^= s[12] ^ 0x8eca1054u; + s[8] = (s[8] ^ s[3]) * 0xb2f6c0e3u; + s[4] = (s[4] ^ s[8]) * 0x13f1ccd5u; + s[3] = (s[3] ^ s[4]) * 0x73023badu; + s[15] -= s[3]; + s[3] *= (s[15] | 1u); + s[15] -= s[3]; + s[12] ^= s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 19u); + s[4] += s[10]; + s[11] ^= s[4]; + s[15] += s[11] + 0x1b7c0167u; + s[13] ^= (s[15] & s[12]); + s[10] = mh_rotl(s[10] ^ s[13], 27u); + s[11] -= s[10]; + s[6] += s[11] + 0xf9ac3792u; + s[4] = (s[4] ^ s[6]) * 0x52e3447bu; + s[1] = s[1] * 0xbe66f197u + s[4]; + s[9] = mh_rotl(s[9], 3u) + s[1]; + s[1] = mh_rotl(s[1] ^ s[9], 21u); + s[11] += s[1]; + s[14] ^= s[11]; + s[6] -= s[14]; + s[1] -= s[6]; + s[7] ^= s[1]; + s[3] ^= s[7] ^ 0xf278acc2u; + s[1] ^= s[3]; + s[0] = mh_rotl(s[0] ^ s[1], 6u); + s[3] += s[0]; + s[2] += s[3] + 0xe2de919du; + s[12] ^= s[2] ^ 0x988db119u; + s[9] += s[12]; + s[13] = mh_rotl(s[13] ^ s[9], 5u); + s[4] = (s[4] ^ s[13]) * 0x5d32587fu; + s[7] += s[4]; + s[15] ^= s[7]; + s[0] += s[15]; + s[9] = (s[9] ^ s[0]) * 0x2861edb3u; + s[5] = s[5] * 0x4f38626du + s[9]; + s[8] = mh_rotl(s[8] ^ s[5], 11u); + s[0] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[0], 6u); + s[9] += s[2]; + s[2] = mh_rotl(s[2], 8u) + s[9]; + s[12] -= s[2]; + s[2] -= s[12]; + s[15] ^= s[2]; + s[12] = mh_rotl(s[12], 16u) + s[15]; + s[5] = (s[5] ^ s[12]) * 0xeca1d1fdu; + s[3] -= s[5]; + s[13] = s[13] * 0x95ffad7fu + s[3]; + s[14] *= (s[13] | 1u); + s[9] ^= s[14]; + s[1] = (s[1] ^ s[9]) * 0xb641fe73u; + s[15] = (s[15] ^ s[1]) * 0x75882ff1u; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[15] = mh_rotl(s[15], 28u) + s[9]; + s[11] *= (s[15] | 1u); + s[13] = (s[13] ^ s[11]) * 0xaedd87b7u; + s[5] *= (s[13] | 1u); + s[11] = s[11] * 0xde5d8dddu + s[5]; + s[10] += s[11]; + s[5] ^= (s[10] & s[12]); + s[9] = mh_rotl(s[9], 2u) + s[5]; + s[13] ^= s[9]; + s[5] ^= s[13]; + s[13] = mh_rotl(s[13], 22u) + s[5]; + s[11] ^= s[13] ^ 0x9f10934au; + s[5] += s[11] + 0xc4f2566bu; + s[14] -= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 30u); + s[4] += s[1]; + s[5] ^= (s[4] & s[14]); + s[9] ^= s[5]; + s[2] = mh_rotl(s[2] ^ s[9], 21u); + s[3] -= s[2]; + s[15] += s[3] + 0xd8e0689au; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[12] = (s[12] ^ s[8]) * 0x9f3839e7u; + s[11] = s[11] * 0x78af3d3fu + s[12]; + s[12] += s[11] + 0xf79cdc6cu; + s[14] += s[12]; + s[13] ^= s[14] ^ 0x2f851ec9u; + s[3] *= (s[13] | 1u); + s[4] ^= (s[3] & s[0]); + s[7] ^= s[4]; + s[0] ^= s[7]; + s[4] ^= s[0] ^ 0x74cd9833u; + s[10] = mh_rotl(s[10], 16u) + s[4]; + s[6] += s[10]; + s[5] += s[6]; + s[7] *= (s[5] | 1u); + s[8] ^= s[7] ^ 0xee20e634u; + s[10] = s[10] * 0x3e130e7du + s[8]; + s[8] += s[10] + 0x6f087e5bu; + s[14] ^= s[8]; + s[4] -= s[14]; + s[9] ^= (s[4] & s[6]); + s[12] = s[12] * 0xb460872fu + s[9]; + s[5] = mh_rotl(s[5] ^ s[12], 4u); + s[4] = mh_rotl(s[4] ^ s[5], 28u); + s[1] ^= s[4] ^ 0xf4365901u; + s[0] = mh_rotl(s[0], 18u) + s[1]; + s[5] -= s[0]; + s[6] = mh_rotl(s[6] ^ s[5], 28u); + s[13] ^= s[6] ^ 0xdf09c351u; + s[2] ^= s[13]; + s[4] -= s[2]; + s[11] -= s[4]; + s[9] += (s[11] | s[8]); + s[3] += (s[9] | s[14]); + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[11] ^= s[6]; + s[5] ^= s[11] ^ 0xb26a12d6u; + s[13] = mh_rotl(s[13], 27u) + s[5]; + s[7] += s[13]; + s[1] *= (s[7] | 1u); + s[14] -= s[1]; + s[5] += s[14]; + s[6] += s[5]; + s[7] += s[6]; + s[3] ^= s[7]; + s[2] ^= s[3] ^ 0x41710416u; + s[13] += s[2]; + s[15] = (s[15] ^ s[13]) * 0x936ce74fu; + s[13] += s[15] + 0xa69098ebu; + s[8] -= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[6] = (s[6] ^ s[4]) * 0x96ed276fu; + s[14] += s[6]; + s[5] += s[14] + 0x3dd7b109u; + s[9] ^= (s[5] & s[7]); + s[15] += s[9]; + s[12] += s[15]; + s[11] -= s[12]; + s[1] += s[11]; + s[2] ^= s[1]; + s[5] *= (s[2] | 1u); + s[14] += s[5] + 0xe10aa4d3u; + s[5] = (s[5] ^ s[14]) * 0x91132d1fu; + s[10] += s[5]; + s[13] ^= s[10]; + s[5] = (s[5] ^ s[13]) * 0xec9ae3adu; + s[11] += s[5]; + s[7] += s[11]; + s[14] += s[7] + 0xf32ce180u; + s[0] ^= s[14]; + s[11] += s[0]; + s[12] *= (s[11] | 1u); + s[11] ^= s[12] ^ 0xb1b1fa56u; + s[5] ^= s[11]; + s[11] = (s[11] ^ s[5]) * 0x7afecfd5u; + s[10] -= s[11]; + s[12] += s[10]; + s[15] *= (s[12] | 1u); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[5] += s[11]; + s[7] = mh_rotl(s[7] ^ s[5], 13u); + s[5] = mh_rotl(s[5], 10u) + s[7]; + s[14] += s[5]; + s[3] += (s[14] | s[15]); + s[6] = s[6] * 0xfd4cbce5u + s[3]; + s[13] += s[6]; + s[12] += s[13]; + s[2] = s[2] * 0x1567d149u + s[12]; + s[9] += (s[2] | s[14]); + s[11] = (s[11] ^ s[9]) * 0xcd1282cfu; + s[10] = s[10] * 0xec337bd7u + s[11]; + s[4] += s[10]; + s[15] ^= s[4]; + s[2] += (s[15] | s[14]); + s[3] ^= s[2]; + s[5] *= (s[3] | 1u); + s[14] += (s[5] | s[4]); + s[7] += s[14] + 0x15993573u; + s[11] -= s[7]; + s[4] += (s[11] | s[13]); + s[8] += s[4]; + s[2] = s[2] * 0x97007c67u + s[8]; + s[11] = s[11] * 0x918bfbb7u + s[2]; + s[10] ^= s[11]; + s[6] += s[10]; + s[13] -= s[6]; + s[6] *= (s[13] | 1u); + s[2] += s[6] + 0x029f336cu; + s[1] = (s[1] ^ s[2]) * 0x773956e7u; + s[8] = (s[8] ^ s[1]) * 0x5b779023u; + s[4] = mh_rotl(s[4] ^ s[8], 6u); + s[12] = mh_rotl(s[12] ^ s[4], 29u); + s[14] -= s[12]; + s[2] *= (s[14] | 1u); + s[15] -= s[2]; + s[11] += s[15]; + s[9] = mh_rotl(s[9] ^ s[11], 13u); + s[7] += s[9] + 0xf4431694u; + s[13] ^= s[7]; + s[15] ^= s[13]; + s[12] ^= s[15] ^ 0xd1599731u; + s[7] = (s[7] ^ s[12]) * 0x8ced34cbu; + s[6] = s[6] * 0xd04c1dd5u + s[7]; + s[1] = mh_rotl(s[1] ^ s[6], 25u); + s[2] = mh_rotl(s[2], 26u) + s[1]; + s[10] = mh_rotl(s[10] ^ s[2], 21u); + s[12] ^= s[10] ^ 0x551385afu; + s[13] = mh_rotl(s[13] ^ s[12], 17u); + s[2] ^= s[13]; + s[5] ^= s[2] ^ 0x836874e8u; + s[10] += s[5] + 0xd9ec8d60u; + s[7] = mh_rotl(s[7] ^ s[10], 14u); + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[5] ^= s[8] ^ 0x076cb7e0u; + s[12] += s[5]; + s[13] ^= s[12]; + s[9] -= s[13]; + s[12] ^= s[9] ^ 0xffb78f00u; + s[0] += s[12]; + s[8] += s[0]; + s[4] = s[4] * 0x09be199fu + s[8]; + s[15] ^= (s[4] & s[11]); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[0] += s[11]; + s[14] ^= (s[0] & s[11]); + s[6] = s[6] * 0x062bb8b9u + s[14]; + s[13] += s[6]; + s[7] ^= s[13]; + s[2] ^= s[7]; + s[4] ^= s[2]; + s[12] = mh_rotl(s[12] ^ s[4], 16u); + s[1] ^= s[12]; + s[10] = s[10] * 0xaf1b9323u + s[1]; + s[2] *= (s[10] | 1u); + s[7] = s[7] * 0xc1c09eb5u + s[2]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[9] *= (s[1] | 1u); + s[7] *= (s[9] | 1u); + s[3] += (s[7] | s[15]); + s[6] += s[3]; + s[13] *= (s[6] | 1u); + s[10] += s[13]; + s[9] *= (s[10] | 1u); + s[2] ^= s[9]; + s[1] = mh_rotl(s[1], 24u) + s[2]; + s[8] += s[1]; + s[15] += s[8]; + s[11] ^= s[15]; + s[9] ^= (s[11] & s[14]); + s[4] ^= s[9] ^ 0x9fb9924fu; + s[9] ^= (s[4] & s[11]); + s[4] = mh_rotl(s[4], 18u) + s[9]; + s[2] -= s[4]; + s[10] ^= s[2]; + s[9] += s[10] + 0x47548619u; + s[5] += (s[9] | s[0]); + s[13] = mh_rotl(s[13], 4u) + s[5]; + s[0] *= (s[13] | 1u); + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] -= s[6]; + s[6] = (s[6] ^ s[2]) * 0x19ae11d5u; + s[15] ^= s[6]; + s[14] = mh_rotl(s[14] ^ s[15], 8u); + s[5] *= (s[14] | 1u); + s[12] ^= s[5]; + s[9] *= (s[12] | 1u); + s[0] += s[9] + 0xf019817bu; + s[13] += (s[0] | s[15]); + s[11] ^= s[13]; + s[12] -= s[11]; + s[7] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[7]; + s[13] -= s[9]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 1u) + s[2]; + s[10] += s[0] + 0xa639dd25u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[7] ^= s[4] ^ 0x4d7e8a6du; + s[8] ^= s[7]; + s[11] += s[8]; + s[10] = mh_rotl(s[10], 8u) + s[11]; + s[0] += s[10]; + s[11] ^= s[0] ^ 0x721aef7cu; + s[4] = mh_rotl(s[4], 1u) + s[11]; + s[5] *= (s[4] | 1u); + s[11] *= (s[5] | 1u); + s[8] ^= s[11] ^ 0xcc314719u; + s[6] = (s[6] ^ s[8]) * 0x6487d2b7u; + s[0] = mh_rotl(s[0] ^ s[6], 14u); + s[9] = mh_rotl(s[9], 18u) + s[0]; + s[5] = mh_rotl(s[5], 1u) + s[9]; + s[9] += s[5] + 0xa383dfd9u; + s[10] ^= s[9]; + s[1] += s[10]; + s[15] += s[1]; + s[7] += s[15]; + s[5] += (s[7] | s[1]); + s[7] += (s[5] | s[3]); + s[6] = (s[6] ^ s[7]) * 0x184ce043u; + s[4] ^= s[6]; + s[2] = mh_rotl(s[2], 3u) + s[4]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_2(uint32_t* s) { + s[14] += s[0]; + s[5] = mh_rotl(s[5], 7u) + s[14]; + s[3] += s[5]; + s[6] ^= s[3]; + s[3] += s[6]; + s[8] += (s[3] | s[10]); + s[15] += s[8]; + s[5] -= s[15]; + s[8] -= s[5]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[8] = mh_rotl(s[8] ^ s[3], 17u); + s[1] += s[8]; + s[7] = s[7] * 0xf236f555u + s[1]; + s[15] *= (s[7] | 1u); + s[4] = (s[4] ^ s[15]) * 0x367da263u; + s[14] ^= (s[4] & s[10]); + s[3] += s[14]; + s[9] = s[9] * 0xa86cb8a5u + s[3]; + s[1] += s[9] + 0x729e8820u; + s[14] *= (s[1] | 1u); + s[13] += s[14]; + s[0] += (s[13] | s[15]); + s[8] ^= s[0] ^ 0x36ce8d99u; + s[15] ^= s[8]; + s[5] *= (s[15] | 1u); + s[10] ^= s[5] ^ 0xc281b62bu; + s[5] = s[5] * 0x4c18c9c1u + s[10]; + s[9] = s[9] * 0x683b0045u + s[5]; + s[2] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[2], 17u); + s[11] ^= s[9]; + s[6] ^= s[11]; + s[1] = (s[1] ^ s[6]) * 0xf967d211u; + s[9] += s[1]; + s[14] += s[9]; + s[11] = mh_rotl(s[11] ^ s[14], 7u); + s[5] += (s[11] | s[7]); + s[8] ^= (s[5] & s[0]); + s[11] ^= s[8]; + s[4] = (s[4] ^ s[11]) * 0xd7e0bb7fu; + s[12] -= s[4]; + s[7] = mh_rotl(s[7], 11u) + s[12]; + s[1] += (s[7] | s[12]); + s[9] += s[1]; + s[8] ^= (s[9] & s[2]); + s[15] = mh_rotl(s[15], 8u) + s[8]; + s[0] = mh_rotl(s[0], 6u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[0], 7u); + s[5] = mh_rotl(s[5], 18u) + s[13]; + s[6] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[11] = s[11] * 0xf05cf87fu + s[1]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[9] += s[0]; + s[12] ^= s[9]; + s[15] = (s[15] ^ s[12]) * 0x4b3b7b5fu; + s[14] += s[15]; + s[3] = (s[3] ^ s[14]) * 0xc25fd2f5u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[12] = (s[12] ^ s[14]) * 0x2ccccc23u; + s[3] ^= s[12] ^ 0xe0a8d819u; + s[14] ^= s[3]; + s[15] ^= s[14]; + s[11] += s[15]; + s[2] ^= s[11]; + s[11] ^= s[2]; + s[4] = mh_rotl(s[4] ^ s[11], 2u); + s[15] = mh_rotl(s[15], 5u) + s[4]; + s[5] = (s[5] ^ s[15]) * 0x8678e679u; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[13] += s[15] + 0xe037af3du; + s[14] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[14], 5u); + s[14] = (s[14] ^ s[3]) * 0xf94dfba9u; + s[11] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 8u); + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7], 17u) + s[15]; + s[2] = mh_rotl(s[2], 17u) + s[7]; + s[12] = (s[12] ^ s[2]) * 0xd427d34fu; + s[2] ^= s[12]; + s[3] += s[2]; + s[13] ^= s[3]; + s[6] *= (s[13] | 1u); + s[7] -= s[6]; + s[15] += s[7]; + s[0] = s[0] * 0x6811cec1u + s[15]; + s[12] *= (s[0] | 1u); + s[4] += (s[12] | s[11]); + s[3] = mh_rotl(s[3] ^ s[4], 15u); + s[7] = mh_rotl(s[7], 21u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[7], 17u); + s[6] = s[6] * 0xe5adc811u + s[15]; + s[12] = (s[12] ^ s[6]) * 0x5156a379u; + s[3] += s[12]; + s[9] ^= s[3] ^ 0x25367eecu; + s[11] += s[9]; + s[4] ^= s[11] ^ 0xb721ecfeu; + s[6] = mh_rotl(s[6], 15u) + s[4]; + s[4] ^= s[6]; + s[13] = (s[13] ^ s[4]) * 0x567d866du; + s[7] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 30u) + s[7]; + s[13] = mh_rotl(s[13] ^ s[0], 8u); + s[11] ^= s[13] ^ 0xf7bdb888u; + s[1] = (s[1] ^ s[11]) * 0x5a32e7abu; + s[0] = mh_rotl(s[0], 24u) + s[1]; + s[4] = s[4] * 0x20f1b36bu + s[0]; + s[11] = (s[11] ^ s[4]) * 0x65a77da9u; + s[2] += s[11]; + s[3] += s[2] + 0x99328ba9u; + s[13] -= s[3]; + s[6] ^= (s[13] & s[3]); + s[2] += s[6]; + s[6] = mh_rotl(s[6] ^ s[2], 30u); + s[9] ^= s[6] ^ 0x6a4c2898u; + s[15] -= s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 26u); + s[2] ^= (s[12] & s[9]); + s[5] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 14u); + s[8] ^= (s[13] & s[6]); + s[5] += s[8] + 0xe7f53827u; + s[14] *= (s[5] | 1u); + s[8] ^= s[14] ^ 0xceef5db4u; + s[14] ^= s[8]; + s[7] ^= s[14] ^ 0xeb56858cu; + s[2] = (s[2] ^ s[7]) * 0x4dd73993u; + s[12] -= s[2]; + s[2] -= s[12]; + s[11] += s[2]; + s[9] *= (s[11] | 1u); + s[3] ^= s[9]; + s[4] = (s[4] ^ s[3]) * 0x8ed152e9u; + s[12] -= s[4]; + s[6] ^= s[12]; + s[7] -= s[6]; + s[3] ^= (s[7] & s[0]); + s[5] = mh_rotl(s[5] ^ s[3], 30u); + s[2] = mh_rotl(s[2], 12u) + s[5]; + s[9] = s[9] * 0x606d8c4fu + s[2]; + s[11] += s[9]; + s[9] -= s[11]; + s[14] ^= s[9]; + s[2] = s[2] * 0xa408d01du + s[14]; + s[12] ^= (s[2] & s[11]); + s[7] *= (s[12] | 1u); + s[10] -= s[7]; + s[11] ^= (s[10] & s[4]); + s[6] += s[11]; + s[1] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[1], 8u); + s[0] = mh_rotl(s[0], 28u) + s[5]; + s[11] -= s[0]; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[6] -= s[8]; + s[12] -= s[6]; + s[6] = (s[6] ^ s[12]) * 0x77a5979du; + s[5] = mh_rotl(s[5], 7u) + s[6]; + s[11] = (s[11] ^ s[5]) * 0xbb2a5277u; + s[10] -= s[11]; + s[13] += (s[10] | s[4]); + s[5] += s[13]; + s[7] += s[5]; + s[3] += s[7] + 0x679f3a15u; + s[9] = (s[9] ^ s[3]) * 0x3b759ea1u; + s[5] += (s[9] | s[6]); + s[14] *= (s[5] | 1u); + s[4] -= s[14]; + s[10] = (s[10] ^ s[4]) * 0x7438b4f1u; + s[12] = mh_rotl(s[12], 31u) + s[10]; + s[1] ^= (s[12] & s[3]); + s[14] ^= s[1]; + s[11] ^= s[14]; + s[0] -= s[11]; + s[15] = mh_rotl(s[15], 29u) + s[0]; + s[14] ^= s[15] ^ 0xdb4b51feu; + s[3] ^= s[14]; + s[2] += s[3]; + s[3] ^= s[2]; + s[1] *= (s[3] | 1u); + s[14] -= s[1]; + s[2] = s[2] * 0xa602880du + s[14]; + s[9] *= (s[2] | 1u); + s[10] += (s[9] | s[0]); + s[0] = s[0] * 0x1da05fddu + s[10]; + s[14] = s[14] * 0x5524fa43u + s[0]; + s[7] += s[14]; + s[3] = mh_rotl(s[3] ^ s[7], 12u); + s[8] = (s[8] ^ s[3]) * 0x93b798bbu; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[2] -= s[11]; + s[9] += s[2] + 0x7e63761fu; + s[13] += s[9] + 0x6a2b3abcu; + s[15] = mh_rotl(s[15], 31u) + s[13]; + s[14] *= (s[15] | 1u); + s[1] ^= (s[14] & s[15]); + s[6] ^= s[1]; + s[15] += (s[6] | s[9]); + s[0] ^= s[15]; + s[8] -= s[0]; + s[13] = mh_rotl(s[13] ^ s[8], 29u); + s[10] = s[10] * 0x81dc8267u + s[13]; + s[12] = mh_rotl(s[12], 6u) + s[10]; + s[14] ^= s[12]; + s[10] -= s[14]; + s[0] = (s[0] ^ s[10]) * 0xc6809ffdu; + s[12] = (s[12] ^ s[0]) * 0x90188547u; + s[8] = mh_rotl(s[8], 23u) + s[12]; + s[2] ^= s[8]; + s[5] = mh_rotl(s[5], 21u) + s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 6u); + s[11] = (s[11] ^ s[13]) * 0x23339351u; + s[6] = mh_rotl(s[6] ^ s[11], 24u); + s[2] ^= (s[6] & s[7]); + s[11] *= (s[2] | 1u); + s[8] += s[11] + 0x64aea95au; + s[3] ^= s[8]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[6] ^= s[0]; + s[3] = s[3] * 0x6da4a1e5u + s[6]; + s[13] = s[13] * 0x16181847u + s[3]; + s[0] -= s[13]; + s[12] += s[0]; + s[14] = mh_rotl(s[14] ^ s[12], 22u); + s[6] += s[14]; + s[1] = mh_rotl(s[1] ^ s[6], 26u); + s[14] -= s[1]; + s[8] += s[14] + 0x57302d8du; + s[5] = s[5] * 0xfae0a1ebu + s[8]; + s[10] *= (s[5] | 1u); + s[1] *= (s[10] | 1u); + s[0] *= (s[1] | 1u); + s[7] = mh_rotl(s[7], 11u) + s[0]; + s[3] *= (s[7] | 1u); + s[4] += s[3]; + s[1] ^= s[4]; + s[4] ^= s[1]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[0] *= (s[1] | 1u); + s[6] += s[0]; + s[0] += s[6] + 0xa48f59d6u; + s[2] += s[0] + 0xd890ff08u; + s[10] -= s[2]; + s[6] ^= s[10]; + s[11] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 25u); + s[5] *= (s[13] | 1u); + s[3] += s[5] + 0xf143105eu; + s[2] = s[2] * 0x9c957b8fu + s[3]; + s[12] = (s[12] ^ s[2]) * 0x5542792du; + s[13] = mh_rotl(s[13], 27u) + s[12]; + s[1] -= s[13]; + s[3] += s[1]; + s[11] ^= s[3]; + s[10] = (s[10] ^ s[11]) * 0xbd220965u; + s[1] *= (s[10] | 1u); + s[7] -= s[1]; + s[15] = mh_rotl(s[15], 28u) + s[7]; + s[1] = mh_rotl(s[1], 12u) + s[15]; + s[8] -= s[1]; + s[9] = (s[9] ^ s[8]) * 0x35be18f5u; + s[4] += (s[9] | s[1]); + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[0] ^= s[14]; + s[12] *= (s[0] | 1u); + s[3] -= s[12]; + s[15] = mh_rotl(s[15], 14u) + s[3]; + s[0] += s[15]; + s[11] = mh_rotl(s[11], 26u) + s[0]; + s[15] += s[11] + 0xc1c2e89fu; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[11] ^= s[4]; + s[0] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[0], 1u); + s[12] += s[13] + 0xd57fd3ddu; + s[9] ^= s[12] ^ 0xe5c431c8u; + s[6] ^= s[9] ^ 0xcc67fed2u; + s[13] ^= s[6]; + s[4] ^= s[13] ^ 0xfe05a3a3u; + s[2] = s[2] * 0x8c03bf67u + s[4]; + s[0] += s[2]; + s[11] += s[0]; + s[7] ^= s[11]; + s[13] = s[13] * 0xfb6d3733u + s[7]; + s[6] ^= s[13]; + s[2] ^= s[6] ^ 0x4efcdfbfu; + s[13] *= (s[2] | 1u); + s[12] ^= s[13]; + s[11] -= s[12]; + s[9] ^= s[11]; + s[4] = mh_rotl(s[4], 10u) + s[9]; + s[12] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[12], 22u); + s[15] += s[9]; + s[3] -= s[15]; + s[7] ^= (s[3] & s[9]); + s[9] += s[7]; + s[8] = (s[8] ^ s[9]) * 0x410e2049u; + s[3] ^= s[8]; + s[12] += s[3]; + s[8] ^= (s[12] & s[6]); + s[0] ^= s[8]; + s[13] += (s[0] | s[3]); + s[7] ^= s[13] ^ 0x0eb1588eu; + s[15] *= (s[7] | 1u); + s[5] += s[15]; + s[1] ^= s[5]; + s[4] = mh_rotl(s[4], 16u) + s[1]; + s[10] += s[4]; + s[0] += s[10]; + s[9] = (s[9] ^ s[0]) * 0x346b3e53u; + s[0] *= (s[9] | 1u); + s[2] -= s[0]; + s[12] = s[12] * 0xa1f90d81u + s[2]; + s[1] += s[12]; + s[0] = s[0] * 0xef4fd54fu + s[1]; + s[1] ^= s[0]; + s[7] ^= s[1]; + s[3] = mh_rotl(s[3] ^ s[7], 21u); + s[13] += (s[3] | s[8]); + s[11] ^= s[13]; + s[13] ^= s[11]; + s[3] += s[13]; + s[0] -= s[3]; + s[15] *= (s[0] | 1u); + s[10] += s[15] + 0x4d178b4du; + s[15] = mh_rotl(s[15], 25u) + s[10]; + s[8] *= (s[15] | 1u); + s[12] *= (s[8] | 1u); + s[13] = mh_rotl(s[13] ^ s[12], 30u); + s[15] ^= s[13]; + s[6] += s[15]; + s[5] *= (s[6] | 1u); + s[12] -= s[5]; + s[0] -= s[12]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[14] += s[3] + 0x83e089e4u; + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 26u); + s[13] += (s[7] | s[3]); + s[7] -= s[13]; + s[11] ^= s[7]; + s[9] ^= s[11]; + s[5] += s[9]; + s[14] += s[5]; + s[4] ^= (s[14] & s[0]); + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[13] ^= s[0] ^ 0x3d84c4aeu; + s[10] *= (s[13] | 1u); + s[13] += s[10] + 0x754c3314u; + s[9] += s[13]; + s[3] ^= s[9]; + s[0] += s[3]; + s[7] = (s[7] ^ s[0]) * 0x92f74007u; + s[13] += s[7]; + s[6] ^= s[13]; + s[7] = (s[7] ^ s[6]) * 0x63936a19u; + s[10] += s[7] + 0xadf24f99u; + s[5] = s[5] * 0xd55fb891u + s[10]; + s[8] = mh_rotl(s[8] ^ s[5], 13u); + s[13] = mh_rotl(s[13] ^ s[8], 28u); + s[15] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[15], 31u); + s[0] += s[3]; + s[12] += s[0]; + s[6] ^= s[12]; + s[1] -= s[6]; + s[0] = mh_rotl(s[0], 8u) + s[1]; + s[3] = mh_rotl(s[3], 11u) + s[0]; + s[13] ^= s[3]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 28u) + s[2]; + s[1] += s[0]; + s[15] ^= s[1] ^ 0x0710d7aau; + s[4] ^= s[15] ^ 0x0c102325u; + s[0] ^= (s[4] & s[6]); + s[2] = mh_rotl(s[2] ^ s[0], 20u); + s[8] += s[2]; + s[7] -= s[8]; + s[11] *= (s[7] | 1u); + s[3] = (s[3] ^ s[11]) * 0x2992aef3u; + s[10] = mh_rotl(s[10] ^ s[3], 6u); + s[5] ^= s[10]; + s[7] -= s[5]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[7] = (s[7] ^ s[1]) * 0x30802407u; + s[8] += s[7] + 0x4da006c2u; + s[2] = mh_rotl(s[2] ^ s[8], 31u); + s[6] *= (s[2] | 1u); + s[7] += s[6]; + s[2] -= s[7]; + s[1] -= s[2]; + s[13] -= s[1]; + s[9] += s[13]; + s[5] = (s[5] ^ s[9]) * 0xb8aec3c9u; + s[9] ^= (s[5] & s[3]); + s[2] ^= s[9]; + s[14] ^= s[2]; + s[9] ^= s[14] ^ 0xbffbdbeeu; + s[3] = mh_rotl(s[3] ^ s[9], 20u); + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[13] = mh_rotl(s[13], 15u) + s[5]; + s[6] ^= s[13]; + s[4] += s[6]; + s[6] += s[4]; + s[8] += s[6]; + s[10] -= s[8]; + s[7] += s[10] + 0x607c17d6u; + s[12] = (s[12] ^ s[7]) * 0x5f96043du; + s[14] += s[12]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[2] += s[5]; + s[0] -= s[2]; + s[14] ^= s[0]; + s[15] ^= s[14] ^ 0xc5076b2cu; + s[1] = (s[1] ^ s[15]) * 0x35f61ca7u; + s[12] = mh_rotl(s[12] ^ s[1], 29u); + s[4] = mh_rotl(s[4], 24u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0x3e4c118bu; + s[4] = (s[4] ^ s[7]) * 0x124571a3u; + s[6] += s[4]; + s[12] -= s[6]; + s[4] -= s[12]; + s[13] -= s[4]; + s[9] += s[13] + 0x66802483u; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[8] -= s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 30u); + s[7] *= (s[4] | 1u); + s[11] ^= s[7]; + s[0] = mh_rotl(s[0], 21u) + s[11]; + s[11] ^= s[0]; + s[2] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[2], 3u); + s[9] += (s[1] | s[7]); + s[0] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[0], 12u); + s[14] += s[3]; + s[6] += s[14] + 0xb50b59d6u; + s[4] = (s[4] ^ s[6]) * 0x1eecbc9fu; + s[6] = mh_rotl(s[6], 24u) + s[4]; + s[12] ^= s[6]; + s[2] += s[12]; + s[7] = s[7] * 0xffe0b5bbu + s[2]; + s[5] = mh_rotl(s[5], 4u) + s[7]; + s[14] ^= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 1u); + s[10] ^= s[1]; + s[1] = s[1] * 0xb57f1b41u + s[10]; + s[15] = (s[15] ^ s[1]) * 0xb49d4c67u; + s[7] *= (s[15] | 1u); + s[1] ^= s[7] ^ 0x835c5c94u; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[3] = mh_rotl(s[3] ^ s[8], 18u); + s[5] ^= s[3]; + s[8] = mh_rotl(s[8], 12u) + s[5]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[8] = s[8] * 0xa6e14777u + s[15]; + s[13] ^= s[8] ^ 0xda9c793bu; + s[3] ^= s[13]; + s[4] ^= s[3]; + s[0] = (s[0] ^ s[4]) * 0x41a7651bu; + s[15] = s[15] * 0xa762cc89u + s[0]; + s[12] = (s[12] ^ s[15]) * 0x401d997fu; + s[7] = mh_rotl(s[7] ^ s[12], 13u); + s[11] += s[7]; + s[4] ^= s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6]; + s[11] *= (s[9] | 1u); + s[3] = (s[3] ^ s[11]) * 0xe248840du; + s[12] += s[3]; + s[4] = s[4] * 0x6d65a44bu + s[12]; + s[14] -= s[4]; + s[5] += s[14]; + s[14] += (s[5] | s[7]); + s[9] = mh_rotl(s[9], 9u) + s[14]; + s[4] += s[9]; + s[13] ^= s[4]; + s[11] += (s[13] | s[5]); + s[1] = s[1] * 0x51f48ab1u + s[11]; + s[11] *= (s[1] | 1u); + s[14] -= s[11]; + s[2] = s[2] * 0x149a38f3u + s[14]; + s[0] = (s[0] ^ s[2]) * 0xe80fd119u; + s[11] *= (s[0] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 4u); + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[6] = (s[6] ^ s[4]) * 0x383cb6c5u; + s[11] ^= s[6]; + s[7] += s[11]; + s[12] = mh_rotl(s[12] ^ s[7], 19u); + s[6] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 23u); + s[1] ^= s[15] ^ 0xb1dc5f0au; + s[13] -= s[1]; + s[4] -= s[13]; + s[1] = mh_rotl(s[1], 8u) + s[4]; + s[2] -= s[1]; + s[1] += s[2]; + s[10] ^= s[1] ^ 0x28905198u; + s[2] ^= s[10]; + s[3] *= (s[2] | 1u); + s[10] -= s[3]; + s[13] ^= s[10]; + s[6] *= (s[13] | 1u); + s[0] += (s[6] | s[5]); + s[7] ^= s[0]; + s[2] = (s[2] ^ s[7]) * 0xcd1889adu; + s[1] += s[2]; + s[11] += s[1]; + s[6] ^= s[11]; + s[13] *= (s[6] | 1u); + s[9] = (s[9] ^ s[13]) * 0x759b3279u; + s[2] -= s[9]; + s[8] = s[8] * 0xab1fffc9u + s[2]; + s[7] *= (s[8] | 1u); + s[11] ^= s[7]; + s[7] *= (s[11] | 1u); + s[9] += s[7]; + s[0] = mh_rotl(s[0], 22u) + s[9]; + s[13] += (s[0] | s[14]); + s[4] ^= s[13]; + s[9] -= s[4]; + s[6] ^= s[9]; + s[8] *= (s[6] | 1u); + s[10] = mh_rotl(s[10], 14u) + s[8]; + s[13] *= (s[10] | 1u); + s[7] ^= (s[13] & s[14]); + s[8] -= s[7]; + s[9] ^= s[8]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[9] = (s[9] ^ s[0]) * 0x94665a0fu; + s[3] += (s[9] | s[5]); + s[13] += s[3] + 0x76335011u; + s[5] *= (s[13] | 1u); + s[10] = mh_rotl(s[10] ^ s[5], 4u); + s[2] += s[10]; + s[0] += s[2] + 0xe5c5c4eeu; + s[10] ^= s[0]; + s[8] -= s[10]; + s[5] += s[8]; + s[12] += s[5]; + s[8] = mh_rotl(s[8] ^ s[12], 17u); + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[0] = mh_rotl(s[0] ^ s[7], 15u); + s[1] ^= s[0] ^ 0x269a357bu; + s[9] += s[1]; + s[11] += s[9]; + s[10] = mh_rotl(s[10] ^ s[11], 7u); + s[0] ^= s[10]; + s[4] += s[0]; + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[15] += s[14]; + s[12] = s[12] * 0xa38e176du + s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 10u); + s[0] ^= s[2]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[3] += s[12] + 0x3a7b8b35u; + s[10] += s[3]; + s[8] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[8], 25u); + s[13] += s[1] + 0xa6fef564u; + s[12] += s[13]; + s[7] ^= s[12]; + s[3] = mh_rotl(s[3] ^ s[7], 13u); + s[1] ^= s[3]; + s[13] = mh_rotl(s[13] ^ s[1], 31u); + s[0] = mh_rotl(s[0] ^ s[13], 25u); + s[7] += s[0]; + s[10] -= s[7]; + s[6] = mh_rotl(s[6], 5u) + s[10]; + s[10] -= s[6]; + s[9] -= s[10]; + s[11] -= s[9]; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[9] = s[9] * 0x524dda45u + s[4]; + s[1] -= s[9]; + s[14] = (s[14] ^ s[1]) * 0x726e8ac3u; + s[7] = mh_rotl(s[7], 23u) + s[14]; + s[11] = mh_rotl(s[11], 24u) + s[7]; + s[14] ^= s[11]; + s[9] -= s[14]; + s[4] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[4], 30u); + s[13] ^= s[9]; + s[5] -= s[13]; + s[10] = mh_rotl(s[10], 2u) + s[5]; + s[15] ^= s[10]; + s[5] += s[15]; + s[11] = (s[11] ^ s[5]) * 0xc4aae5c1u; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[4], 2u); + s[1] ^= s[13] ^ 0x9400d36bu; + s[8] *= (s[1] | 1u); + s[4] = mh_rotl(s[4], 24u) + s[8]; + s[14] = s[14] * 0xc442e3d7u + s[4]; + s[11] = mh_rotl(s[11], 19u) + s[14]; + s[2] = (s[2] ^ s[11]) * 0xebbc49b9u; + s[14] = mh_rotl(s[14] ^ s[2], 19u); + s[13] += s[14]; + s[14] ^= s[13]; + s[9] *= (s[14] | 1u); + s[2] ^= (s[9] & s[13]); + s[8] -= s[2]; + s[3] = mh_rotl(s[3] ^ s[8], 3u); + s[7] = s[7] * 0x576da3b7u + s[3]; + s[0] += (s[7] | s[8]); + s[1] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[11] += s[15]; + s[9] ^= s[11]; + s[14] ^= s[9]; + s[9] += s[14]; + s[5] += s[9]; + s[1] *= (s[5] | 1u); + s[0] += s[1]; + s[7] ^= s[0]; + s[2] += s[7]; + s[14] = (s[14] ^ s[2]) * 0x58412f09u; + s[11] = mh_rotl(s[11] ^ s[14], 12u); + s[3] = mh_rotl(s[3], 6u) + s[11]; + s[14] = (s[14] ^ s[3]) * 0x00dd684fu; + s[4] -= s[14]; + s[9] += s[4] + 0x550edca7u; + s[11] = (s[11] ^ s[9]) * 0xbbfbfe77u; + s[13] += s[11]; + s[11] += s[13]; + s[8] += s[11]; + s[5] += s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 29u); + s[12] += s[15]; + s[1] ^= s[12]; + s[6] -= s[1]; + s[7] += s[6]; + s[4] = mh_rotl(s[4], 17u) + s[7]; + s[11] ^= s[4]; + s[4] += s[11]; + s[11] += s[4] + 0x46d20979u; + s[14] ^= s[11]; + s[10] ^= s[14]; + s[2] *= (s[10] | 1u); + s[12] = mh_rotl(s[12], 22u) + s[2]; + s[15] -= s[12]; + s[12] = (s[12] ^ s[15]) * 0xf44d7efbu; + s[10] = (s[10] ^ s[12]) * 0x3fa99f4fu; + s[2] ^= s[10] ^ 0xac7d5c8bu; + s[7] += s[2]; + s[14] += s[7] + 0xd1ad9327u; + s[3] += s[14]; + s[10] = mh_rotl(s[10] ^ s[3], 9u); + s[5] = mh_rotl(s[5], 11u) + s[10]; + s[2] *= (s[5] | 1u); + s[15] += s[2]; + s[14] *= (s[15] | 1u); + s[10] = s[10] * 0xedb63e45u + s[14]; + s[14] += s[10]; + s[9] += s[14]; + s[3] += s[9] + 0xce5dd87eu; + s[15] = mh_rotl(s[15] ^ s[3], 16u); + s[1] -= s[15]; + s[2] += s[1]; + s[13] ^= (s[2] & s[7]); + s[2] = mh_rotl(s[2] ^ s[13], 11u); + s[15] ^= s[2]; + s[6] += s[15] + 0x97390455u; + s[2] = mh_rotl(s[2], 14u) + s[6]; + s[0] = s[0] * 0xd9932c57u + s[2]; + s[15] ^= s[0]; + s[0] += s[15] + 0xd642df33u; + s[10] -= s[0]; + s[9] = (s[9] ^ s[10]) * 0x96d65173u; + s[3] = (s[3] ^ s[9]) * 0x5ef32be3u; + s[0] = mh_rotl(s[0], 4u) + s[3]; + s[14] += s[0] + 0xa2e88e9cu; + s[4] -= s[14]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1] ^ s[13], 29u); + s[2] += s[1] + 0x9f32e607u; + s[8] = s[8] * 0x2e14f3b3u + s[2]; + s[14] ^= s[8]; + s[10] ^= s[14]; + s[7] = (s[7] ^ s[10]) * 0xb35882a9u; + s[11] ^= s[7] ^ 0xdb62d1c6u; + s[5] *= (s[11] | 1u); + s[10] += (s[5] | s[1]); + s[3] -= s[10]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[13] ^= (s[10] & s[15]); + s[11] -= s[13]; + s[5] ^= s[11]; + s[11] += s[5]; + s[15] ^= s[11] ^ 0xef110718u; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[12], 12u); + s[12] ^= s[1] ^ 0x4e9029b6u; + s[14] -= s[12]; + s[15] *= (s[14] | 1u); + s[4] *= (s[15] | 1u); + s[15] = mh_rotl(s[15] ^ s[4], 9u); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3] ^ s[13], 7u); + s[5] += s[3] + 0xf38664b0u; + s[2] -= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[1] = mh_rotl(s[1], 7u) + s[5]; + s[10] -= s[1]; + s[5] = mh_rotl(s[5] ^ s[10], 27u); + s[10] ^= s[5]; + s[2] += s[10]; + s[6] += s[2]; + s[3] = (s[3] ^ s[6]) * 0x33b893c5u; + s[8] -= s[3]; + s[5] ^= s[8] ^ 0x58095457u; + s[0] += s[5]; + s[9] += s[0]; + s[13] ^= s[9]; + s[6] ^= s[13]; + s[3] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[13] ^= s[5] ^ 0xf1c1aac7u; + s[4] = s[4] * 0x8ea1eea7u + s[13]; + s[12] ^= s[4]; + s[10] ^= s[12] ^ 0xdf051453u; + s[5] ^= s[10]; + s[13] ^= s[5]; + s[15] ^= s[13]; + s[3] ^= s[15]; + s[9] += s[3]; + s[4] ^= s[9] ^ 0x218a1035u; +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_3(uint32_t* s) { + s[9] = (s[9] ^ s[0]) * 0x797e4457u; + s[4] ^= s[9]; + s[10] -= s[4]; + s[11] += s[10] + 0xa102a63du; + s[1] += s[11]; + s[7] ^= s[1]; + s[8] += s[7]; + s[6] += s[8]; + s[1] = mh_rotl(s[1] ^ s[6], 17u); + s[6] ^= s[1]; + s[14] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[2] -= s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 25u); + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[10] ^= s[7]; + s[15] += s[10] + 0x0abd8749u; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[15] = s[15] * 0x66393445u + s[2]; + s[14] *= (s[15] | 1u); + s[3] ^= s[14]; + s[2] = mh_rotl(s[2], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[2], 20u); + s[5] ^= s[0] ^ 0xcab80c1eu; + s[10] = mh_rotl(s[10] ^ s[5], 16u); + s[14] = mh_rotl(s[14] ^ s[10], 6u); + s[10] ^= (s[14] & s[4]); + s[6] ^= (s[10] & s[5]); + s[4] += s[6]; + s[0] += s[4] + 0x95ce3e2au; + s[2] *= (s[0] | 1u); + s[6] += s[2]; + s[2] = mh_rotl(s[2] ^ s[6], 17u); + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[7] ^= s[15]; + s[12] ^= s[7]; + s[1] += s[12]; + s[3] ^= s[1]; + s[0] = (s[0] ^ s[3]) * 0x53869057u; + s[12] += s[0]; + s[10] ^= s[12] ^ 0x3c38b79fu; + s[0] ^= s[10]; + s[1] ^= s[0] ^ 0x26a5cf2au; + s[8] ^= s[1] ^ 0xec7f7c75u; + s[11] = mh_rotl(s[11], 25u) + s[8]; + s[15] ^= s[11]; + s[8] ^= (s[15] & s[6]); + s[3] ^= s[8]; + s[1] = mh_rotl(s[1], 17u) + s[3]; + s[11] ^= s[1]; + s[0] ^= s[11]; + s[7] += s[0]; + s[2] -= s[7]; + s[5] = mh_rotl(s[5], 24u) + s[2]; + s[4] = mh_rotl(s[4], 13u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[4] ^= s[1] ^ 0x7b85746bu; + s[14] += s[4]; + s[9] = mh_rotl(s[9], 24u) + s[14]; + s[1] ^= s[9]; + s[14] += s[1]; + s[6] ^= s[14]; + s[7] = (s[7] ^ s[6]) * 0xd304fa11u; + s[3] += s[7] + 0x916253c4u; + s[13] += (s[3] | s[12]); + s[3] ^= s[13]; + s[1] = (s[1] ^ s[3]) * 0x668aacedu; + s[11] = mh_rotl(s[11] ^ s[1], 12u); + s[4] += s[11] + 0xfa452a6cu; + s[7] ^= s[4]; + s[15] += s[7]; + s[7] ^= s[15]; + s[13] *= (s[7] | 1u); + s[5] *= (s[13] | 1u); + s[9] += s[5]; + s[5] = mh_rotl(s[5], 19u) + s[9]; + s[15] += (s[5] | s[1]); + s[10] += (s[15] | s[12]); + s[11] = mh_rotl(s[11], 7u) + s[10]; + s[10] = mh_rotl(s[10], 11u) + s[11]; + s[0] += (s[10] | s[14]); + s[5] *= (s[0] | 1u); + s[4] -= s[5]; + s[6] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[6], 3u); + s[13] += s[9]; + s[3] -= s[13]; + s[15] ^= s[3] ^ 0x3ab76643u; + s[4] *= (s[15] | 1u); + s[7] -= s[4]; + s[1] += s[7]; + s[9] = mh_rotl(s[9], 31u) + s[1]; + s[3] *= (s[9] | 1u); + s[10] -= s[3]; + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xd1b0c195u; + s[10] -= s[7]; + s[5] -= s[10]; + s[0] -= s[5]; + s[15] += (s[0] | s[13]); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[8] -= s[3]; + s[15] = mh_rotl(s[15], 20u) + s[8]; + s[14] = s[14] * 0x42023659u + s[15]; + s[0] += s[14] + 0x59245cc5u; + s[10] += s[0]; + s[3] += s[10]; + s[4] = (s[4] ^ s[3]) * 0x513757e1u; + s[7] ^= s[4]; + s[14] += s[7] + 0x7d876976u; + s[1] += s[14]; + s[15] += s[1] + 0x538535d0u; + s[13] ^= (s[15] & s[4]); + s[4] = (s[4] ^ s[13]) * 0x102bd2d9u; + s[2] += s[4]; + s[8] *= (s[2] | 1u); + s[11] -= s[8]; + s[8] *= (s[11] | 1u); + s[9] = mh_rotl(s[9] ^ s[8], 21u); + s[12] -= s[9]; + s[0] ^= s[12] ^ 0x756f1367u; + s[8] = (s[8] ^ s[0]) * 0xeb1d6203u; + s[2] += s[8]; + s[3] = mh_rotl(s[3], 27u) + s[2]; + s[14] = s[14] * 0xbe8a18f5u + s[3]; + s[11] ^= s[14]; + s[14] ^= s[11]; + s[7] += s[14]; + s[2] ^= s[7] ^ 0xa93ccf9du; + s[13] = mh_rotl(s[13] ^ s[2], 30u); + s[6] ^= s[13] ^ 0x0b96528au; + s[12] ^= s[6] ^ 0x7400dce8u; + s[7] ^= (s[12] & s[14]); + s[4] ^= s[7] ^ 0x38e67c0fu; + s[12] ^= s[4]; + s[13] ^= s[12] ^ 0xdb69d44fu; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[5] *= (s[14] | 1u); + s[2] ^= s[5]; + s[0] -= s[2]; + s[14] *= (s[0] | 1u); + s[0] += s[14]; + s[3] += s[0] + 0x412d0838u; + s[11] = mh_rotl(s[11], 6u) + s[3]; + s[3] *= (s[11] | 1u); + s[0] = mh_rotl(s[0], 12u) + s[3]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] = s[0] * 0x514e6f4bu + s[4]; + s[13] ^= s[0] ^ 0xb917c4f4u; + s[5] += s[13] + 0xe81626f3u; + s[1] += s[5]; + s[12] *= (s[1] | 1u); + s[13] -= s[12]; + s[14] = mh_rotl(s[14] ^ s[13], 20u); + s[13] ^= s[14]; + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[14] *= (s[10] | 1u); + s[15] ^= s[14]; + s[13] ^= s[15] ^ 0xdcaf64c9u; + s[11] ^= s[13]; + s[5] -= s[11]; + s[4] = mh_rotl(s[4] ^ s[5], 16u); + s[14] ^= s[4]; + s[15] -= s[14]; + s[5] = mh_rotl(s[5] ^ s[15], 21u); + s[0] -= s[5]; + s[13] = mh_rotl(s[13], 27u) + s[0]; + s[11] = mh_rotl(s[11] ^ s[13], 14u); + s[4] = s[4] * 0x7b1d09a9u + s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6] + 0x62232acfu; + s[15] += s[9]; + s[9] += (s[15] | s[14]); + s[8] += (s[9] | s[6]); + s[2] ^= s[8]; + s[3] = (s[3] ^ s[2]) * 0xb3059c21u; + s[11] = mh_rotl(s[11], 19u) + s[3]; + s[1] ^= s[11]; + s[15] ^= s[1] ^ 0x2171991du; + s[12] += s[15]; + s[0] = mh_rotl(s[0] ^ s[12], 11u); + s[12] = s[12] * 0xcfafa68bu + s[0]; + s[13] += s[12]; + s[8] += s[13]; + s[0] = (s[0] ^ s[8]) * 0x1259bf39u; + s[9] ^= s[0] ^ 0x7b24b75fu; + s[11] *= (s[9] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 26u); + s[13] += (s[8] | s[10]); + s[14] += s[13]; + s[2] = mh_rotl(s[2], 16u) + s[14]; + s[0] *= (s[2] | 1u); + s[7] += s[0]; + s[9] -= s[7]; + s[14] += s[9]; + s[2] ^= s[14] ^ 0xc10a9cc2u; + s[9] *= (s[2] | 1u); + s[12] ^= (s[9] & s[11]); + s[9] = (s[9] ^ s[12]) * 0xa6446659u; + s[7] += s[9]; + s[12] *= (s[7] | 1u); + s[1] -= s[12]; + s[4] = mh_rotl(s[4], 25u) + s[1]; + s[8] ^= s[4]; + s[14] += (s[8] | s[0]); + s[1] += s[14]; + s[6] = mh_rotl(s[6] ^ s[1], 15u); + s[9] -= s[6]; + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[10] -= s[0]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x5006a017u; + s[9] -= s[0]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[12] ^= s[6]; + s[9] -= s[12]; + s[7] += s[9]; + s[1] ^= s[7]; + s[15] = (s[15] ^ s[1]) * 0x0341d025u; + s[6] *= (s[15] | 1u); + s[2] = (s[2] ^ s[6]) * 0xbf30d677u; + s[1] ^= s[2] ^ 0x5a31f2fau; + s[15] += s[1]; + s[9] -= s[15]; + s[10] ^= s[9]; + s[7] ^= s[10]; + s[8] *= (s[7] | 1u); + s[9] -= s[8]; + s[1] += s[9]; + s[6] = s[6] * 0xc029c901u + s[1]; + s[9] = s[9] * 0x0a8b81a9u + s[6]; + s[13] *= (s[9] | 1u); + s[2] ^= (s[13] & s[1]); + s[13] = mh_rotl(s[13], 19u) + s[2]; + s[7] = (s[7] ^ s[13]) * 0x6775be81u; + s[13] = mh_rotl(s[13] ^ s[7], 16u); + s[14] ^= s[13]; + s[11] ^= s[14] ^ 0xeb720242u; + s[13] = mh_rotl(s[13], 14u) + s[11]; + s[5] = mh_rotl(s[5], 20u) + s[13]; + s[11] ^= (s[5] & s[7]); + s[7] = mh_rotl(s[7], 25u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[15] = mh_rotl(s[15] ^ s[3], 20u); + s[9] -= s[15]; + s[4] = mh_rotl(s[4], 2u) + s[9]; + s[2] ^= (s[4] & s[14]); + s[7] += s[2]; + s[9] = mh_rotl(s[9] ^ s[7], 3u); + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[5] *= (s[9] | 1u); + s[9] *= (s[5] | 1u); + s[7] -= s[9]; + s[0] ^= s[7] ^ 0xae9620d3u; + s[6] ^= s[0]; + s[1] ^= s[6]; + s[10] -= s[1]; + s[12] ^= s[10]; + s[4] ^= s[12] ^ 0x3893c42au; + s[15] += s[4]; + s[8] += s[15]; + s[0] += s[8]; + s[12] = (s[12] ^ s[0]) * 0xce1c066bu; + s[15] += s[12]; + s[14] = mh_rotl(s[14] ^ s[15], 17u); + s[12] += s[14]; + s[0] = (s[0] ^ s[12]) * 0xbfe6f35fu; + s[7] = mh_rotl(s[7], 14u) + s[0]; + s[10] ^= s[7]; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[9] -= s[12]; + s[8] ^= s[9]; + s[5] = (s[5] ^ s[8]) * 0xc1d852abu; + s[4] ^= s[5]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 18u); + s[15] = mh_rotl(s[15], 13u) + s[8]; + s[4] = (s[4] ^ s[15]) * 0xb18cd0d9u; + s[6] += s[4]; + s[11] = mh_rotl(s[11] ^ s[6], 14u); + s[3] += s[11] + 0x10533cf0u; + s[14] ^= s[3]; + s[10] ^= s[14] ^ 0x708a914au; + s[13] += s[10]; + s[2] *= (s[13] | 1u); + s[5] -= s[2]; + s[4] = mh_rotl(s[4], 3u) + s[5]; + s[9] ^= s[4] ^ 0xdbe59900u; + s[6] = (s[6] ^ s[9]) * 0x3c084e57u; + s[12] -= s[6]; + s[10] ^= s[12] ^ 0xf4c46888u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[9] = (s[9] ^ s[4]) * 0x6a1a0c53u; + s[4] ^= s[9] ^ 0x595122ddu; + s[11] += s[4] + 0x7a7d85c9u; + s[12] = (s[12] ^ s[11]) * 0x44aad133u; + s[5] += s[12]; + s[2] -= s[5]; + s[12] ^= s[2] ^ 0xd4528978u; + s[3] ^= s[12] ^ 0xe2d6b9c3u; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[9] -= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 10u); + s[7] += s[14]; + s[4] += s[7]; + s[5] ^= s[4]; + s[15] ^= s[5]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] = mh_rotl(s[5], 30u) + s[13]; + s[0] ^= s[5]; + s[10] = (s[10] ^ s[0]) * 0x6e5fb2ebu; + s[7] ^= s[10]; + s[3] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[3], 11u); + s[0] ^= s[11]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[4] ^= s[11]; + s[11] ^= s[4]; + s[2] = (s[2] ^ s[11]) * 0xb5b4f471u; + s[3] += s[2]; + s[1] += s[3]; + s[15] *= (s[1] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[15]; + s[15] ^= s[10]; + s[6] = mh_rotl(s[6], 8u) + s[15]; + s[13] = s[13] * 0x0b61283fu + s[6]; + s[11] ^= s[13]; + s[6] += s[11] + 0xd7cda70fu; + s[2] *= (s[6] | 1u); + s[3] += s[2]; + s[0] += (s[3] | s[11]); + s[10] = s[10] * 0x68301209u + s[0]; + s[13] -= s[10]; + s[5] += s[13] + 0x25d68939u; + s[14] ^= s[5] ^ 0x9315e17cu; + s[8] = mh_rotl(s[8] ^ s[14], 31u); + s[4] *= (s[8] | 1u); + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = s[9] * 0xb3978cd7u + s[1]; + s[0] = (s[0] ^ s[9]) * 0x8f1b658fu; + s[3] = mh_rotl(s[3], 31u) + s[0]; + s[1] += s[3]; + s[14] += s[1] + 0xce275c64u; + s[7] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[7], 23u); + s[3] *= (s[14] | 1u); + s[2] = (s[2] ^ s[3]) * 0xf33fdd1bu; + s[10] ^= s[2]; + s[11] ^= s[10]; + s[10] += s[11] + 0x9a470fc4u; + s[4] = mh_rotl(s[4] ^ s[10], 2u); + s[7] *= (s[4] | 1u); + s[8] ^= (s[7] & s[15]); + s[13] ^= s[8]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[9] += s[5]; + s[6] = mh_rotl(s[6], 22u) + s[9]; + s[2] = (s[2] ^ s[6]) * 0x3b1c9049u; + s[4] = s[4] * 0x5964f96fu + s[2]; + s[13] = mh_rotl(s[13] ^ s[4], 31u); + s[6] -= s[13]; + s[13] ^= s[6]; + s[0] = (s[0] ^ s[13]) * 0x9806df37u; + s[12] = s[12] * 0xfcc0e3e5u + s[0]; + s[8] += s[12]; + s[6] += s[8]; + s[1] += s[6]; + s[9] ^= s[1] ^ 0x6dbea2d7u; + s[2] = s[2] * 0x856b34bdu + s[9]; + s[13] += s[2]; + s[2] ^= s[13]; + s[0] += s[2]; + s[11] += s[0]; + s[2] += s[11]; + s[12] ^= (s[2] & s[4]); + s[0] ^= s[12] ^ 0x50a4b36au; + s[12] += s[0]; + s[8] += s[12]; + s[13] ^= s[8]; + s[4] ^= s[13]; + s[15] += s[4]; + s[13] ^= (s[15] & s[7]); + s[7] = mh_rotl(s[7], 26u) + s[13]; + s[4] ^= s[7]; + s[9] *= (s[4] | 1u); + s[7] += s[9]; + s[14] ^= s[7] ^ 0x65c7cdaau; + s[15] = s[15] * 0xf2b2c56fu + s[14]; + s[12] ^= s[15]; + s[8] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 5u); + s[0] -= s[11]; + s[9] += s[0]; + s[4] *= (s[9] | 1u); + s[13] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[13]; + s[8] = mh_rotl(s[8], 24u) + s[0]; + s[0] ^= s[8]; + s[13] += (s[0] | s[6]); + s[15] ^= s[13]; + s[0] ^= s[15] ^ 0x263b836bu; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[14] = (s[14] ^ s[10]) * 0xd6a0e7c7u; + s[15] = (s[15] ^ s[14]) * 0x4017ec97u; + s[8] ^= s[15]; + s[14] ^= s[8] ^ 0x1ebe6b44u; + s[7] = (s[7] ^ s[14]) * 0x8b99dbe1u; + s[10] += s[7]; + s[2] ^= s[10]; + s[12] *= (s[2] | 1u); + s[8] += (s[12] | s[4]); + s[5] = mh_rotl(s[5] ^ s[8], 26u); + s[8] = mh_rotl(s[8] ^ s[5], 31u); + s[13] ^= s[8]; + s[1] ^= s[13] ^ 0xf9ab26dbu; + s[3] += s[1] + 0x27337e87u; + s[14] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[14], 25u); + s[2] -= s[15]; + s[9] ^= (s[2] & s[4]); + s[11] += s[9]; + s[8] -= s[11]; + s[4] += s[8]; + s[8] -= s[4]; + s[11] += s[8]; + s[1] ^= s[11]; + s[11] ^= s[1]; + s[7] = mh_rotl(s[7] ^ s[11], 19u); + s[0] = (s[0] ^ s[7]) * 0xff057d15u; + s[12] = mh_rotl(s[12], 7u) + s[0]; + s[15] += (s[12] | s[10]); + s[9] = mh_rotl(s[9] ^ s[15], 17u); + s[0] ^= s[9] ^ 0x87439202u; + s[12] -= s[0]; + s[13] ^= s[12] ^ 0x201ac58au; + s[2] = mh_rotl(s[2], 7u) + s[13]; + s[11] = mh_rotl(s[11] ^ s[2], 27u); + s[9] = s[9] * 0x55d080fdu + s[11]; + s[6] ^= s[9]; + s[13] = (s[13] ^ s[6]) * 0x5efcd7afu; + s[8] = mh_rotl(s[8], 7u) + s[13]; + s[2] = mh_rotl(s[2], 26u) + s[8]; + s[5] ^= s[2]; + s[0] *= (s[5] | 1u); + s[6] += s[0] + 0x5c1d235du; + s[1] = s[1] * 0x52eb2ecfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xc0730f2du; + s[10] += s[8]; + s[13] ^= s[10]; + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[12], 16u); + s[15] = mh_rotl(s[15] ^ s[10], 21u); + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[4] = s[4] * 0x7a636847u + s[5]; + s[6] += s[4]; + s[15] = mh_rotl(s[15], 15u) + s[6]; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[10] *= (s[8] | 1u); + s[1] += s[10]; + s[13] -= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 2u); + s[13] += s[12]; + s[14] -= s[13]; + s[5] ^= s[14] ^ 0x4b128721u; + s[9] ^= s[5]; + s[1] ^= s[9] ^ 0xdb597223u; + s[5] = mh_rotl(s[5], 29u) + s[1]; + s[1] = mh_rotl(s[1], 15u) + s[5]; + s[9] = s[9] * 0xdad6bd3fu + s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[9] *= (s[7] | 1u); + s[7] ^= s[9]; + s[2] ^= s[7]; + s[13] -= s[2]; + s[11] += (s[13] | s[6]); + s[4] = mh_rotl(s[4], 12u) + s[11]; + s[14] ^= s[4]; + s[15] = (s[15] ^ s[14]) * 0xde79981du; + s[7] = (s[7] ^ s[15]) * 0x285c589bu; + s[8] *= (s[7] | 1u); + s[15] += s[8]; + s[5] += s[15]; + s[9] ^= s[5]; + s[3] ^= s[9] ^ 0x44325084u; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[12] = mh_rotl(s[12], 10u) + s[2]; + s[1] = mh_rotl(s[1], 8u) + s[12]; + s[14] += s[1]; + s[5] ^= s[14] ^ 0x194b2a3cu; + s[12] ^= s[5]; + s[10] = mh_rotl(s[10], 6u) + s[12]; + s[11] = s[11] * 0xe1fe8c79u + s[10]; + s[0] ^= (s[11] & s[15]); + s[7] = mh_rotl(s[7], 17u) + s[0]; + s[2] ^= s[7]; + s[8] = mh_rotl(s[8], 10u) + s[2]; + s[15] = mh_rotl(s[15], 2u) + s[8]; + s[10] += s[15] + 0xbf36d9bbu; + s[12] += s[10]; + s[7] = mh_rotl(s[7], 12u) + s[12]; + s[3] ^= s[7] ^ 0x60dc6edeu; + s[7] = s[7] * 0x154bbc1fu + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[7] ^= (s[9] & s[8]); + s[1] = mh_rotl(s[1], 14u) + s[7]; + s[14] += s[1]; + s[7] = mh_rotl(s[7] ^ s[14], 15u); + s[12] = mh_rotl(s[12] ^ s[7], 7u); + s[8] += s[12] + 0x4ce700ffu; + s[5] ^= s[8]; + s[1] += s[5]; + s[15] ^= s[1] ^ 0x4cfd0e8bu; + s[14] += s[15]; + s[11] += s[14]; + s[13] ^= s[11]; + s[3] = (s[3] ^ s[13]) * 0xea89cab7u; + s[7] ^= s[3]; + s[8] = mh_rotl(s[8], 30u) + s[7]; + s[3] ^= s[8]; + s[10] -= s[3]; + s[7] = s[7] * 0x32632399u + s[10]; + s[2] = mh_rotl(s[2], 26u) + s[7]; + s[6] ^= s[2]; + s[2] -= s[6]; + s[13] *= (s[2] | 1u); + s[7] ^= s[13]; + s[10] ^= (s[7] & s[5]); + s[0] += (s[10] | s[2]); + s[10] *= (s[0] | 1u); + s[6] += s[10] + 0xca92c16du; + s[0] += s[6] + 0x24751e21u; + s[13] ^= s[0] ^ 0x06baa3b2u; + s[3] *= (s[13] | 1u); + s[5] -= s[3]; + s[14] = s[14] * 0x1cff685fu + s[5]; + s[8] += s[14]; + s[10] = mh_rotl(s[10] ^ s[8], 24u); + s[12] ^= s[10]; + s[0] += s[12]; + s[4] = (s[4] ^ s[0]) * 0x8430392bu; + s[9] = mh_rotl(s[9] ^ s[4], 24u); + s[2] = mh_rotl(s[2] ^ s[9], 12u); + s[1] += (s[2] | s[12]); + s[7] ^= s[1] ^ 0x54490fa2u; + s[9] *= (s[7] | 1u); + s[0] = mh_rotl(s[0], 20u) + s[9]; + s[8] += (s[0] | s[7]); + s[11] *= (s[8] | 1u); + s[15] += s[11]; + s[13] += s[15] + 0xa29fa06cu; + s[4] += s[13] + 0x6856416au; + s[3] ^= s[4]; + s[8] = mh_rotl(s[8] ^ s[3], 13u); + s[12] ^= s[8]; + s[3] *= (s[12] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] = mh_rotl(s[13] ^ s[1], 4u); + s[9] += s[13] + 0x212b6434u; + s[12] -= s[9]; + s[8] = (s[8] ^ s[12]) * 0xb91c4009u; + s[7] ^= s[8] ^ 0xbcb896bdu; + s[12] *= (s[7] | 1u); + s[15] = mh_rotl(s[15], 20u) + s[12]; + s[5] ^= (s[15] & s[3]); + s[3] ^= s[5]; + s[6] ^= s[3]; + s[2] = s[2] * 0x9e1aba47u + s[6]; + s[0] += s[2]; + s[3] = mh_rotl(s[3] ^ s[0], 17u); + s[10] ^= s[3]; + s[4] = (s[4] ^ s[10]) * 0xd432bf1du; + s[15] ^= s[4] ^ 0xc8d68ea4u; + s[6] = mh_rotl(s[6], 25u) + s[15]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[1] += (s[2] | s[9]); + s[4] = mh_rotl(s[4] ^ s[1], 25u); + s[12] = (s[12] ^ s[4]) * 0x0320a6b1u; + s[3] ^= s[12]; + s[13] = (s[13] ^ s[3]) * 0xf03bba6du; + s[15] *= (s[13] | 1u); + s[12] += s[15]; + s[1] -= s[12]; + s[9] += s[1]; + s[12] = mh_rotl(s[12] ^ s[9], 23u); + s[10] += s[12] + 0x83f986e6u; + s[0] = (s[0] ^ s[10]) * 0xa4cb0d1du; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[1] ^= s[7] ^ 0x9014b7bbu; + s[4] = (s[4] ^ s[1]) * 0x272bd217u; + s[0] += s[4]; + s[2] = mh_rotl(s[2], 18u) + s[0]; + s[12] = mh_rotl(s[12] ^ s[2], 2u); + s[14] ^= s[12]; + s[9] ^= s[14] ^ 0x16ac9a1eu; + s[2] = mh_rotl(s[2], 15u) + s[9]; + s[1] = mh_rotl(s[1], 10u) + s[2]; + s[4] = s[4] * 0xe0b6e0c3u + s[1]; + s[0] = mh_rotl(s[0], 25u) + s[4]; + s[15] += s[0]; + s[4] = s[4] * 0x1b6cbd07u + s[15]; + s[5] ^= s[4] ^ 0x567146e8u; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[10] += s[4]; + s[0] = s[0] * 0xe8a3abd1u + s[10]; + s[10] += s[0] + 0x5eb953e5u; + s[6] += s[10]; + s[4] = mh_rotl(s[4] ^ s[6], 10u); + s[5] += (s[4] | s[0]); + s[1] = (s[1] ^ s[5]) * 0x9a8851e3u; + s[15] += s[1]; + s[3] -= s[15]; + s[6] -= s[3]; + s[0] ^= s[6]; + s[6] ^= s[0] ^ 0x8522b09fu; + s[2] -= s[6]; + s[7] ^= s[2] ^ 0x4a7c01ddu; + s[6] += s[7] + 0x1790f84fu; + s[14] = (s[14] ^ s[6]) * 0xe3e9ed8bu; + s[1] ^= s[14]; + s[10] -= s[1]; + s[11] += s[10]; + s[4] = s[4] * 0x6371fb67u + s[11]; + s[2] -= s[4]; + s[14] += s[2]; + s[2] *= (s[14] | 1u); + s[1] ^= (s[2] & s[9]); + s[13] = mh_rotl(s[13], 12u) + s[1]; + s[15] = mh_rotl(s[15], 26u) + s[13]; + s[5] = (s[5] ^ s[15]) * 0xbc5643e1u; + s[14] += s[5]; + s[7] ^= s[14]; + s[10] = (s[10] ^ s[7]) * 0x79039a69u; + s[3] -= s[10]; + s[8] -= s[3]; + s[14] ^= s[8]; + s[13] = (s[13] ^ s[14]) * 0x1b4013ffu; + s[3] *= (s[13] | 1u); + s[12] = s[12] * 0x309d80d3u + s[3]; + s[6] *= (s[12] | 1u); + s[5] ^= s[6]; + s[2] += s[5]; + s[14] = mh_rotl(s[14], 6u) + s[2]; + s[15] = mh_rotl(s[15] ^ s[14], 6u); + s[14] ^= (s[15] & s[0]); + s[3] = mh_rotl(s[3] ^ s[14], 29u); + s[5] ^= s[3] ^ 0xa5a0aeffu; + s[10] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[10], 23u); + s[1] *= (s[9] | 1u); + s[4] += s[1]; + s[0] += (s[4] | s[1]); + s[14] ^= s[0]; + s[3] += s[14]; + s[15] ^= s[3]; + s[6] += (s[15] | s[12]); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[0] = s[0] * 0xf76673f3u + s[7]; + s[15] ^= (s[0] & s[4]); + s[12] ^= s[15]; + s[6] = s[6] * 0x36c04137u + s[12]; + s[9] ^= s[6] ^ 0xaf963084u; + s[13] *= (s[9] | 1u); + s[11] *= (s[13] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 7u); + s[13] = s[13] * 0x69f233a3u + s[8]; + s[3] += s[13]; + s[1] = mh_rotl(s[1] ^ s[3], 19u); + s[6] = (s[6] ^ s[1]) * 0x0416e137u; + s[12] ^= s[6]; + s[1] = (s[1] ^ s[12]) * 0xca07bafdu; + s[14] ^= s[1]; + s[7] += (s[14] | s[2]); + s[3] *= (s[7] | 1u); + s[11] = mh_rotl(s[11], 15u) + s[3]; + s[8] = mh_rotl(s[8], 6u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[8], 15u); + s[2] = mh_rotl(s[2], 28u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[2], 28u); + s[11] ^= s[9]; + s[9] ^= s[11]; + s[12] = (s[12] ^ s[9]) * 0xbefcfdbbu; + s[6] += s[12]; + s[2] ^= s[6] ^ 0x899a552eu; + s[0] += s[2]; + s[6] ^= s[0]; + s[5] -= s[6]; + s[7] -= s[5]; + s[14] += (s[7] | s[10]); + s[8] += s[14] + 0x0de3dc6bu; + s[10] += s[8]; + s[2] += s[10]; + s[12] = mh_rotl(s[12] ^ s[2], 31u); + s[9] = (s[9] ^ s[12]) * 0x6052a829u; + s[7] = (s[7] ^ s[9]) * 0x97670939u; + s[14] = mh_rotl(s[14], 15u) + s[7]; + s[12] += s[14] + 0x010cd5e8u; + s[9] = mh_rotl(s[9], 2u) + s[12]; + s[0] ^= s[9]; + s[5] += s[0]; + s[3] *= (s[5] | 1u); + s[15] += s[3] + 0x77f4510du; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[13], 4u); + s[5] += s[11]; + s[9] ^= (s[5] & s[7]); + s[1] = mh_rotl(s[1], 6u) + s[9]; + s[6] *= (s[1] | 1u); + s[9] ^= s[6]; + s[3] ^= s[9] ^ 0xcc2ee068u; + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[11] = mh_rotl(s[11], 31u) + s[14]; + s[0] += s[11] + 0x3191cb8fu; + s[12] ^= (s[0] & s[1]); + s[14] += (s[12] | s[13]); + s[11] = (s[11] ^ s[14]) * 0x29e0c4c3u; + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[3] *= (s[6] | 1u); + s[6] += s[3]; + s[13] ^= s[6] ^ 0x0e54f612u; + s[4] ^= s[13]; + s[5] += s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] = s[14] * 0x37c87275u + s[11]; +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_4(uint32_t* s) { + s[15] ^= s[0] ^ 0xb6c1e90cu; + s[2] = mh_rotl(s[2], 19u) + s[15]; + s[8] = s[8] * 0x28bc533du + s[2]; + s[5] ^= s[8]; + s[6] = (s[6] ^ s[5]) * 0x86d067fbu; + s[10] ^= s[6] ^ 0x75a5b862u; + s[14] ^= s[10] ^ 0xd8b962f7u; + s[8] -= s[14]; + s[1] ^= s[8]; + s[11] ^= s[1]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[4] += (s[6] | s[8]); + s[5] ^= (s[4] & s[10]); + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 10u); + s[0] ^= s[5] ^ 0x3da9ef7eu; + s[12] ^= s[0]; + s[3] ^= s[12] ^ 0xfe29da15u; + s[0] += s[3]; + s[5] ^= (s[0] & s[4]); + s[7] += (s[5] | s[12]); + s[9] += (s[7] | s[2]); + s[14] ^= s[9]; + s[15] += s[14] + 0xecc0e6cfu; + s[4] += s[15]; + s[10] = (s[10] ^ s[4]) * 0x71d36d0bu; + s[15] ^= s[10] ^ 0x3834ef56u; + s[11] = (s[11] ^ s[15]) * 0xf3f2126du; + s[4] -= s[11]; + s[5] += s[4]; + s[12] = mh_rotl(s[12], 23u) + s[5]; + s[14] += s[12] + 0xee23cc86u; + s[0] += s[14]; + s[3] ^= s[0] ^ 0x9ff2f793u; + s[8] += s[3]; + s[7] += s[8]; + s[11] ^= s[7] ^ 0x9ca003edu; + s[15] += (s[11] | s[9]); + s[12] = mh_rotl(s[12] ^ s[15], 17u); + s[7] = mh_rotl(s[7] ^ s[12], 7u); + s[5] ^= s[7] ^ 0xf6d26d41u; + s[15] ^= s[5] ^ 0xad445899u; + s[11] += s[15] + 0x94157a95u; + s[2] *= (s[11] | 1u); + s[10] += s[2]; + s[4] ^= s[10] ^ 0xfb1e1d1eu; + s[7] = (s[7] ^ s[4]) * 0xd7d5e433u; + s[12] += s[7] + 0x4329bd0du; + s[15] -= s[12]; + s[0] = (s[0] ^ s[15]) * 0x802ba143u; + s[2] = mh_rotl(s[2], 29u) + s[0]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[3] = mh_rotl(s[3], 25u) + s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 10u); + s[6] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 21u) + s[6]; + s[14] *= (s[13] | 1u); + s[12] = (s[12] ^ s[14]) * 0x5445cbf5u; + s[15] += s[12]; + s[1] += s[15] + 0xdf315f06u; + s[5] ^= s[1] ^ 0x9aea526cu; + s[15] += s[5]; + s[1] = (s[1] ^ s[15]) * 0xa5708ab3u; + s[8] += s[1] + 0x41e6f337u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 14u) + s[5]; + s[6] += s[3]; + s[9] = mh_rotl(s[9] ^ s[6], 12u); + s[4] += s[9]; + s[8] += s[4]; + s[1] += s[8] + 0xc618b3f4u; + s[2] = s[2] * 0x6195bb5fu + s[1]; + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[6] *= (s[14] | 1u); + s[14] *= (s[6] | 1u); + s[6] ^= s[14] ^ 0x00ed6668u; + s[14] = mh_rotl(s[14] ^ s[6], 9u); + s[10] += s[14] + 0x9e4bdfd0u; + s[9] = mh_rotl(s[9] ^ s[10], 2u); + s[6] ^= (s[9] & s[4]); + s[15] ^= s[6]; + s[12] += s[15]; + s[5] += s[12] + 0x88d2c32au; + s[6] *= (s[5] | 1u); + s[10] += s[6]; + s[15] += s[10] + 0xf6c730abu; + s[6] += (s[15] | s[9]); + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[14] = (s[14] ^ s[1]) * 0xc68fd8b7u; + s[13] ^= s[14]; + s[2] += s[13]; + s[5] ^= s[2]; + s[6] += s[5]; + s[7] ^= (s[6] & s[0]); + s[14] = (s[14] ^ s[7]) * 0x014b019fu; + s[10] -= s[14]; + s[5] = mh_rotl(s[5], 24u) + s[10]; + s[14] ^= s[5]; + s[10] += s[14] + 0x0431e88cu; + s[15] -= s[10]; + s[9] *= (s[15] | 1u); + s[2] = (s[2] ^ s[9]) * 0x237066cfu; + s[5] *= (s[2] | 1u); + s[2] ^= s[5] ^ 0x4510e4bcu; + s[5] = mh_rotl(s[5], 16u) + s[2]; + s[10] ^= s[5]; + s[5] += s[10] + 0xb102c58bu; + s[12] *= (s[5] | 1u); + s[0] = (s[0] ^ s[12]) * 0x535043a5u; + s[3] = (s[3] ^ s[0]) * 0x1f7a2dffu; + s[14] = (s[14] ^ s[3]) * 0xdae8e3c7u; + s[12] ^= s[14] ^ 0xbc9e9bd9u; + s[8] += (s[12] | s[14]); + s[6] = mh_rotl(s[6], 6u) + s[8]; + s[2] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[6] += s[3]; + s[9] -= s[6]; + s[8] = (s[8] ^ s[9]) * 0x7256fab5u; + s[3] ^= s[8]; + s[2] ^= s[3] ^ 0x1506dae2u; + s[11] ^= s[2]; + s[9] ^= s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 9u); + s[10] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[12] -= s[3]; + s[2] = (s[2] ^ s[12]) * 0x91fe8e99u; + s[6] ^= s[2]; + s[15] += s[6]; + s[1] -= s[15]; + s[9] *= (s[1] | 1u); + s[0] += s[9] + 0xb9d5c4abu; + s[15] = s[15] * 0xbf261023u + s[0]; + s[11] += s[15]; + s[3] ^= (s[11] & s[9]); + s[0] = mh_rotl(s[0], 28u) + s[3]; + s[14] ^= s[0]; + s[10] += (s[14] | s[3]); + s[14] = mh_rotl(s[14] ^ s[10], 1u); + s[10] ^= s[14]; + s[0] *= (s[10] | 1u); + s[5] = (s[5] ^ s[0]) * 0x94c8cd23u; + s[1] = mh_rotl(s[1] ^ s[5], 1u); + s[4] = mh_rotl(s[4], 14u) + s[1]; + s[6] += s[4]; + s[7] = s[7] * 0x3498a9b3u + s[6]; + s[0] -= s[7]; + s[4] += s[0]; + s[14] += s[4]; + s[15] = mh_rotl(s[15], 8u) + s[14]; + s[11] += s[15] + 0x4a892dacu; + s[0] = mh_rotl(s[0] ^ s[11], 13u); + s[15] = mh_rotl(s[15] ^ s[0], 12u); + s[7] ^= s[15] ^ 0xd668f578u; + s[3] -= s[7]; + s[8] *= (s[3] | 1u); + s[10] += s[8]; + s[8] = mh_rotl(s[8], 14u) + s[10]; + s[13] = mh_rotl(s[13] ^ s[8], 8u); + s[9] ^= s[13]; + s[15] ^= s[9]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[8] *= (s[4] | 1u); + s[7] *= (s[8] | 1u); + s[12] *= (s[7] | 1u); + s[1] ^= s[12]; + s[0] = mh_rotl(s[0] ^ s[1], 12u); + s[4] = (s[4] ^ s[0]) * 0x9e6913c7u; + s[3] = (s[3] ^ s[4]) * 0xff70743fu; + s[13] ^= s[3]; + s[4] = mh_rotl(s[4], 5u) + s[13]; + s[15] += (s[4] | s[2]); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[6] += s[7]; + s[8] = mh_rotl(s[8] ^ s[6], 26u); + s[5] = (s[5] ^ s[8]) * 0x71b981efu; + s[15] ^= (s[5] & s[0]); + s[13] += s[15] + 0x211b525au; + s[0] += s[13] + 0x235124dcu; + s[4] = (s[4] ^ s[0]) * 0x96db8fb9u; + s[15] = mh_rotl(s[15], 10u) + s[4]; + s[13] += s[15]; + s[4] = (s[4] ^ s[13]) * 0x00f4145fu; + s[9] ^= (s[4] & s[1]); + s[2] = mh_rotl(s[2] ^ s[9], 30u); + s[10] += (s[2] | s[3]); + s[1] = mh_rotl(s[1], 25u) + s[10]; + s[12] *= (s[1] | 1u); + s[4] *= (s[12] | 1u); + s[14] ^= s[4] ^ 0x23e8ae4fu; + s[10] -= s[14]; + s[7] += s[10]; + s[11] = s[11] * 0x28fe7415u + s[7]; + s[9] = mh_rotl(s[9] ^ s[11], 1u); + s[8] = (s[8] ^ s[9]) * 0xf9445edfu; + s[5] ^= (s[8] & s[7]); + s[13] = mh_rotl(s[13], 13u) + s[5]; + s[15] *= (s[13] | 1u); + s[13] ^= s[15]; + s[1] -= s[13]; + s[11] = mh_rotl(s[11], 31u) + s[1]; + s[14] += s[11] + 0xf84dc8acu; + s[2] ^= s[14]; + s[9] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 5u); + s[11] ^= s[14]; + s[9] ^= s[11] ^ 0xec241426u; + s[15] += (s[9] | s[6]); + s[1] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[12] ^= s[5]; + s[7] = mh_rotl(s[7] ^ s[12], 8u); + s[15] -= s[7]; + s[7] = s[7] * 0x0fbb88d1u + s[15]; + s[8] = mh_rotl(s[8] ^ s[7], 11u); + s[9] = (s[9] ^ s[8]) * 0x61f086f3u; + s[14] *= (s[9] | 1u); + s[11] += s[14]; + s[5] = mh_rotl(s[5] ^ s[11], 6u); + s[4] += s[5]; + s[8] ^= s[4]; + s[3] -= s[8]; + s[15] -= s[3]; + s[11] += (s[15] | s[1]); + s[10] ^= s[11]; + s[14] += s[10]; + s[11] += (s[14] | s[4]); + s[14] -= s[11]; + s[0] -= s[14]; + s[6] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 1u) + s[6]; + s[14] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[14], 29u); + s[14] ^= s[9] ^ 0x99f79e3cu; + s[2] ^= s[14]; + s[8] *= (s[2] | 1u); + s[12] ^= (s[8] & s[10]); + s[10] *= (s[12] | 1u); + s[14] += (s[10] | s[9]); + s[11] = s[11] * 0x451cdab1u + s[14]; + s[1] = s[1] * 0x7103d94du + s[11]; + s[6] ^= s[1]; + s[9] += s[6]; + s[3] ^= (s[9] & s[15]); + s[0] -= s[3]; + s[14] ^= s[0]; + s[9] += s[14] + 0x89535c2fu; + s[10] += s[9]; + s[9] += s[10]; + s[13] += s[9]; + s[7] += s[13]; + s[12] += s[7]; + s[8] += s[12] + 0xa6e4da0cu; + s[14] *= (s[8] | 1u); + s[4] += (s[14] | s[0]); + s[6] *= (s[4] | 1u); + s[13] += s[6]; + s[2] ^= s[13]; + s[8] ^= s[2]; + s[4] = (s[4] ^ s[8]) * 0x6209b3c5u; + s[15] += s[4]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15], 27u) + s[5]; + s[2] = mh_rotl(s[2], 29u) + s[15]; + s[10] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[4] -= s[2]; + s[0] += s[4]; + s[4] *= (s[0] | 1u); + s[1] *= (s[4] | 1u); + s[11] ^= s[1]; + s[8] = mh_rotl(s[8] ^ s[11], 3u); + s[6] += s[8] + 0xc67c23a1u; + s[1] = s[1] * 0x033df6bfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xb5308d7du; + s[6] -= s[8]; + s[9] *= (s[6] | 1u); + s[12] -= s[9]; + s[1] += (s[12] | s[4]); + s[2] += (s[1] | s[7]); + s[7] += (s[2] | s[0]); + s[3] *= (s[7] | 1u); + s[5] += s[3]; + s[10] = mh_rotl(s[10] ^ s[5], 20u); + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[14] *= (s[5] | 1u); + s[6] ^= s[14]; + s[14] += s[6]; + s[7] ^= s[14] ^ 0x47ba5e42u; + s[4] ^= s[7] ^ 0xc5c5e46fu; + s[10] = mh_rotl(s[10] ^ s[4], 23u); + s[3] -= s[10]; + s[8] = mh_rotl(s[8] ^ s[3], 12u); + s[15] ^= s[8] ^ 0xf988e79du; + s[1] += s[15]; + s[8] += (s[1] | s[15]); + s[13] = mh_rotl(s[13], 10u) + s[8]; + s[4] += s[13]; + s[8] = mh_rotl(s[8], 24u) + s[4]; + s[6] += s[8]; + s[12] *= (s[6] | 1u); + s[14] ^= s[12]; + s[15] += (s[14] | s[4]); + s[10] += s[15] + 0xad0c3a1cu; + s[8] ^= s[10]; + s[10] ^= s[8] ^ 0x0985d0ffu; + s[3] = (s[3] ^ s[10]) * 0xd3d14647u; + s[12] ^= s[3]; + s[0] = s[0] * 0xba477023u + s[12]; + s[8] ^= s[0]; + s[14] ^= s[8]; + s[12] = mh_rotl(s[12] ^ s[14], 30u); + s[8] ^= s[12] ^ 0x749d3378u; + s[10] -= s[8]; + s[2] += s[10]; + s[11] = s[11] * 0xb9714083u + s[2]; + s[5] *= (s[11] | 1u); + s[15] ^= (s[5] & s[14]); + s[6] += s[15]; + s[5] = (s[5] ^ s[6]) * 0x5673a9bfu; + s[1] ^= (s[5] & s[0]); + s[12] ^= s[1] ^ 0x10153309u; + s[4] += s[12]; + s[10] = (s[10] ^ s[4]) * 0xd28d9ef9u; + s[14] = s[14] * 0xc16dc36du + s[10]; + s[15] ^= s[14] ^ 0x0609a343u; + s[10] += s[15] + 0xccc127adu; + s[6] ^= (s[10] & s[7]); + s[11] = mh_rotl(s[11] ^ s[6], 29u); + s[7] ^= s[11]; + s[0] = mh_rotl(s[0], 21u) + s[7]; + s[15] += s[0]; + s[14] += s[15]; + s[8] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[8], 7u); + s[10] ^= s[15]; + s[13] += s[10]; + s[5] += (s[13] | s[0]); + s[0] ^= (s[5] & s[9]); + s[2] += s[0]; + s[0] *= (s[2] | 1u); + s[2] = (s[2] ^ s[0]) * 0xadbfbcf9u; + s[8] = mh_rotl(s[8], 7u) + s[2]; + s[5] ^= s[8]; + s[7] ^= s[5] ^ 0x11a571cfu; + s[10] ^= s[7]; + s[0] = (s[0] ^ s[10]) * 0x012ab04fu; + s[10] += s[0] + 0xe41f365bu; + s[9] ^= s[10] ^ 0x914568adu; + s[15] *= (s[9] | 1u); + s[14] ^= s[15] ^ 0x535f623du; + s[11] += (s[14] | s[3]); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10], 3u) + s[14]; + s[9] -= s[10]; + s[4] = (s[4] ^ s[9]) * 0xb4b4f5c7u; + s[1] += s[4]; + s[14] -= s[1]; + s[7] ^= (s[14] & s[4]); + s[15] ^= (s[7] & s[13]); + s[9] = mh_rotl(s[9], 23u) + s[15]; + s[1] -= s[9]; + s[8] = (s[8] ^ s[1]) * 0x17a6461du; + s[3] ^= s[8]; + s[9] ^= s[3]; + s[2] = s[2] * 0x7c061aadu + s[9]; + s[14] += s[2]; + s[9] += s[14] + 0x8c896e71u; + s[15] = mh_rotl(s[15] ^ s[9], 17u); + s[0] ^= s[15]; + s[6] = s[6] * 0x0884864du + s[0]; + s[7] += (s[6] | s[10]); + s[9] ^= s[7] ^ 0xe1a426feu; + s[11] = mh_rotl(s[11], 1u) + s[9]; + s[14] *= (s[11] | 1u); + s[12] ^= s[14] ^ 0x9b63a170u; + s[1] -= s[12]; + s[3] ^= (s[1] & s[14]); + s[9] = s[9] * 0xe67ddf4du + s[3]; + s[1] = mh_rotl(s[1] ^ s[9], 13u); + s[7] ^= s[1]; + s[13] = (s[13] ^ s[7]) * 0x55b6aa85u; + s[3] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 8u) + s[3]; + s[2] *= (s[4] | 1u); + s[15] ^= s[2]; + s[1] ^= s[15]; + s[12] ^= s[1]; + s[4] *= (s[12] | 1u); + s[13] ^= (s[4] & s[5]); + s[6] ^= s[13]; + s[15] -= s[6]; + s[2] *= (s[15] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] = mh_rotl(s[10], 12u) + s[14]; + s[8] = (s[8] ^ s[10]) * 0x820a80d3u; + s[11] *= (s[8] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 4u); + s[1] ^= (s[12] & s[10]); + s[12] += s[1] + 0x179d4563u; + s[2] ^= s[12] ^ 0xf1c8d57cu; + s[11] = s[11] * 0x27fd820fu + s[2]; + s[7] = (s[7] ^ s[11]) * 0x9b5d3177u; + s[8] += (s[7] | s[10]); + s[9] = mh_rotl(s[9], 28u) + s[8]; + s[2] = mh_rotl(s[2], 9u) + s[9]; + s[10] = mh_rotl(s[10], 17u) + s[2]; + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[2] ^= s[8] ^ 0xdf4a6b10u; + s[15] ^= s[2] ^ 0xce02ff19u; + s[7] += s[15]; + s[5] += s[7] + 0x43b32c96u; + s[14] ^= s[5]; + s[2] = s[2] * 0xdcd59df9u + s[14]; + s[13] = s[13] * 0x2da5f733u + s[2]; + s[4] = mh_rotl(s[4] ^ s[13], 1u); + s[10] = mh_rotl(s[10], 3u) + s[4]; + s[15] ^= (s[10] & s[8]); + s[5] -= s[15]; + s[8] += s[5]; + s[14] = mh_rotl(s[14] ^ s[8], 24u); + s[7] = mh_rotl(s[7], 10u) + s[14]; + s[12] += (s[7] | s[9]); + s[14] = mh_rotl(s[14] ^ s[12], 25u); + s[11] += s[14]; + s[13] ^= s[11] ^ 0x292b93c0u; + s[12] += (s[13] | s[3]); + s[7] = mh_rotl(s[7] ^ s[12], 19u); + s[15] = mh_rotl(s[15], 15u) + s[7]; + s[5] += s[15]; + s[4] += s[5] + 0xf240675bu; + s[2] += s[4]; + s[11] = mh_rotl(s[11] ^ s[2], 26u); + s[4] += s[11] + 0x58805483u; + s[7] *= (s[4] | 1u); + s[0] += s[7]; + s[5] ^= s[0]; + s[4] += s[5]; + s[12] = mh_rotl(s[12], 27u) + s[4]; + s[2] += s[12] + 0x9c60169eu; + s[3] += s[2]; + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[11] = mh_rotl(s[11] ^ s[15], 28u); + s[2] += s[11]; + s[9] -= s[2]; + s[12] ^= s[9]; + s[7] += s[12] + 0x70e6e273u; + s[3] = mh_rotl(s[3] ^ s[7], 29u); + s[10] -= s[3]; + s[11] ^= (s[10] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 5u); + s[13] += s[1]; + s[6] -= s[13]; + s[4] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[4], 15u); + s[11] = mh_rotl(s[11], 9u) + s[6]; + s[0] ^= s[11]; + s[1] = mh_rotl(s[1], 17u) + s[0]; + s[2] += s[1] + 0xc83d763au; + s[13] += s[2] + 0xc18aa580u; + s[6] = mh_rotl(s[6] ^ s[13], 12u); + s[4] *= (s[6] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[1] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[1], 21u); + s[6] += s[3]; + s[15] = (s[15] ^ s[6]) * 0x228e4019u; + s[13] *= (s[15] | 1u); + s[7] ^= s[13]; + s[4] += s[7] + 0x59e10c11u; + s[15] = mh_rotl(s[15], 25u) + s[4]; + s[2] += (s[15] | s[3]); + s[15] += s[2] + 0xa95ffd72u; + s[5] ^= s[15]; + s[6] *= (s[5] | 1u); + s[15] += s[6] + 0x95d25be9u; + s[5] -= s[15]; + s[1] ^= s[5] ^ 0x709c86b4u; + s[9] = mh_rotl(s[9] ^ s[1], 27u); + s[15] += s[9] + 0xac8ad479u; + s[4] ^= s[15]; + s[6] = s[6] * 0x0571185bu + s[4]; + s[9] = mh_rotl(s[9], 13u) + s[6]; + s[14] ^= s[9]; + s[9] += s[14]; + s[2] += (s[9] | s[5]); + s[15] += (s[2] | s[14]); + s[3] = mh_rotl(s[3] ^ s[15], 13u); + s[5] -= s[3]; + s[15] += (s[5] | s[6]); + s[11] *= (s[15] | 1u); + s[8] -= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 27u); + s[3] += s[12] + 0xdc6b4196u; + s[8] ^= s[3] ^ 0x274048d2u; + s[2] *= (s[8] | 1u); + s[9] += s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 2u); + s[2] ^= s[14] ^ 0xb343b907u; + s[6] = mh_rotl(s[6] ^ s[2], 9u); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] ^= s[10]; + s[3] += s[14] + 0xa61ab1cbu; + s[8] ^= s[3]; + s[6] ^= s[8]; + s[8] ^= (s[6] & s[13]); + s[5] += s[8]; + s[0] ^= s[5]; + s[5] ^= s[0] ^ 0x70e371acu; + s[12] += s[5] + 0x0375455eu; + s[9] *= (s[12] | 1u); + s[12] -= s[9]; + s[13] ^= s[12]; + s[11] *= (s[13] | 1u); + s[0] = (s[0] ^ s[11]) * 0xc8207715u; + s[8] += s[0] + 0x30e154a7u; + s[11] ^= (s[8] & s[14]); + s[2] = mh_rotl(s[2], 28u) + s[11]; + s[7] = mh_rotl(s[7], 4u) + s[2]; + s[6] ^= s[7]; + s[8] += (s[6] | s[3]); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xa50fe152u; + s[4] += s[13]; + s[6] += s[4] + 0x5efa53b9u; + s[7] -= s[6]; + s[9] *= (s[7] | 1u); + s[0] ^= s[9] ^ 0xc117bdb1u; + s[1] ^= s[0] ^ 0xfb4c4c7fu; + s[9] += s[1] + 0x40542f12u; + s[14] ^= (s[9] & s[4]); + s[8] -= s[14]; + s[0] += (s[8] | s[5]); + s[14] += s[0]; + s[3] = (s[3] ^ s[14]) * 0x03c3c7b3u; + s[1] += s[3]; + s[5] ^= s[1] ^ 0x1db7ba5du; + s[15] -= s[5]; + s[13] += s[15] + 0x31cd0b01u; + s[4] ^= s[13] ^ 0xfe8d5080u; + s[7] ^= (s[4] & s[10]); + s[15] -= s[7]; + s[11] = (s[11] ^ s[15]) * 0x7a957f49u; + s[9] ^= s[11]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[11] *= (s[9] | 1u); + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[14] ^= s[5]; + s[10] += s[14]; + s[3] = mh_rotl(s[3], 9u) + s[10]; + s[15] *= (s[3] | 1u); + s[3] += s[15]; + s[14] += s[3]; + s[12] = (s[12] ^ s[14]) * 0x74df9dafu; + s[13] ^= s[12] ^ 0x6234d2f0u; + s[7] *= (s[13] | 1u); + s[0] ^= (s[7] & s[8]); + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] += s[6]; + s[2] += s[12] + 0x7878283cu; + s[3] = (s[3] ^ s[2]) * 0xc395c285u; + s[2] += s[3] + 0x0da9f095u; + s[15] = (s[15] ^ s[2]) * 0x0a11adabu; + s[3] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[3], 29u); + s[10] ^= s[0]; + s[8] *= (s[10] | 1u); + s[15] += s[8] + 0x9a71469fu; + s[14] += s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 22u); + s[8] *= (s[2] | 1u); + s[2] *= (s[8] | 1u); + s[14] = s[14] * 0xf8f0a631u + s[2]; + s[11] += s[14]; + s[0] += s[11]; + s[6] = s[6] * 0xaa299f0fu + s[0]; + s[0] ^= s[6] ^ 0xd0857982u; + s[10] = mh_rotl(s[10] ^ s[0], 27u); + s[12] *= (s[10] | 1u); + s[2] ^= s[12]; + s[0] += s[2]; + s[3] ^= s[0]; + s[2] = (s[2] ^ s[3]) * 0xfd0d9051u; + s[9] = mh_rotl(s[9] ^ s[2], 18u); + s[7] = mh_rotl(s[7] ^ s[9], 17u); + s[5] ^= s[7]; + s[10] = (s[10] ^ s[5]) * 0xde9ff341u; + s[9] ^= s[10] ^ 0xb2e1d8d8u; + s[12] += s[9]; + s[6] ^= s[12]; + s[9] += s[6]; + s[4] = (s[4] ^ s[9]) * 0x3420a8a9u; + s[14] -= s[4]; + s[15] ^= s[14] ^ 0x995ab330u; + s[4] = mh_rotl(s[4] ^ s[15], 17u); + s[6] ^= s[4]; + s[8] = (s[8] ^ s[6]) * 0xa3e9c281u; + s[2] = (s[2] ^ s[8]) * 0xb3f79451u; + s[4] += s[2]; + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = (s[9] ^ s[1]) * 0x4a9cfe2bu; + s[4] ^= s[9]; + s[12] -= s[4]; + s[2] += s[12]; + s[5] = mh_rotl(s[5] ^ s[2], 25u); + s[7] -= s[5]; + s[2] -= s[7]; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[7] ^= (s[9] & s[12]); + s[8] += s[7]; + s[5] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[6] = mh_rotl(s[6] ^ s[7], 13u); + s[14] += s[6]; + s[1] = mh_rotl(s[1] ^ s[14], 27u); + s[13] = mh_rotl(s[13], 21u) + s[1]; + s[15] ^= s[13]; + s[13] ^= s[15] ^ 0x40932bd0u; + s[8] += (s[13] | s[6]); + s[6] += s[8]; + s[7] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 16u) + s[7]; + s[14] -= s[3]; + s[11] += s[14] + 0x2ba58291u; + s[10] += s[11] + 0x25cc7cbau; + s[3] = mh_rotl(s[3], 25u) + s[10]; + s[5] = mh_rotl(s[5] ^ s[3], 8u); + s[12] ^= (s[5] & s[7]); + s[14] *= (s[12] | 1u); + s[6] *= (s[14] | 1u); + s[0] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[0], 8u); + s[10] += s[7]; + s[8] *= (s[10] | 1u); + s[9] = (s[9] ^ s[8]) * 0x1669b1c1u; + s[12] ^= (s[9] & s[13]); + s[14] += s[12] + 0xda1c472du; + s[5] += s[14]; + s[1] = mh_rotl(s[1] ^ s[5], 14u); + s[15] = (s[15] ^ s[1]) * 0x8d0bb03bu; + s[10] += s[15] + 0x3c561da4u; + s[2] -= s[10]; + s[14] ^= s[2] ^ 0xea52ad39u; + s[12] += s[14] + 0x16903f58u; + s[1] -= s[12]; + s[6] = mh_rotl(s[6] ^ s[1], 25u); + s[7] = (s[7] ^ s[6]) * 0xb4a42f9bu; + s[1] ^= s[7]; + s[8] ^= (s[1] & s[4]); + s[13] ^= s[8] ^ 0xb1ef97a0u; + s[4] = mh_rotl(s[4] ^ s[13], 19u); + s[6] ^= (s[4] & s[10]); + s[3] -= s[6]; + s[4] += s[3]; + s[12] *= (s[4] | 1u); + s[8] = mh_rotl(s[8], 18u) + s[12]; + s[2] -= s[8]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] ^= s[0]; + s[9] = mh_rotl(s[9], 28u) + s[6]; + s[12] = (s[12] ^ s[9]) * 0x8a328161u; + s[7] ^= s[12]; + s[11] = (s[11] ^ s[7]) * 0x59795b43u; + s[15] = mh_rotl(s[15], 9u) + s[11]; + s[8] += s[15] + 0x7c995d60u; + s[3] += s[8]; + s[4] = s[4] * 0xfa1378abu + s[3]; + s[3] *= (s[4] | 1u); + s[5] -= s[3]; + s[1] += (s[5] | s[11]); + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[2] = s[2] * 0x9acc1327u + s[7]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 6u); + s[8] ^= s[13]; + s[15] -= s[8]; + s[0] *= (s[15] | 1u); + s[4] *= (s[0] | 1u); + s[14] -= s[4]; + s[15] ^= s[14]; + s[14] *= (s[15] | 1u); + s[3] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[3], 30u); + s[9] += s[14]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[14] ^= s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 23u); + s[5] = mh_rotl(s[5] ^ s[2], 19u); + s[4] *= (s[5] | 1u); + s[7] *= (s[4] | 1u); + s[9] = mh_rotl(s[9] ^ s[7], 15u); + s[13] += s[9]; + s[11] *= (s[13] | 1u); + s[5] = (s[5] ^ s[11]) * 0xde859b27u; + s[11] = s[11] * 0xb564c36bu + s[5]; + s[10] ^= s[11]; + s[9] *= (s[10] | 1u); + s[14] = (s[14] ^ s[9]) * 0x8d89e53du; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = (s[8] ^ s[15]) * 0xe37283afu; + s[14] ^= s[8]; + s[12] ^= s[14]; + s[5] += (s[12] | s[6]); + s[13] += s[5]; + s[9] *= (s[13] | 1u); + s[14] *= (s[9] | 1u); + s[10] = s[10] * 0x5c918de7u + s[14]; + s[3] ^= s[10] ^ 0x6d738cdau; + s[12] += s[3]; + s[9] = (s[9] ^ s[12]) * 0xc4d29b63u; + s[2] *= (s[9] | 1u); + s[6] = (s[6] ^ s[2]) * 0x32887aa7u; + s[11] ^= s[6]; + s[9] += s[11] + 0x1e9643ebu; + s[12] = mh_rotl(s[12], 2u) + s[9]; + s[11] -= s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 18u); + s[2] ^= s[1]; + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[15], 18u); + s[13] ^= s[12]; + s[1] ^= s[13]; + s[5] ^= (s[1] & s[3]); + s[12] += s[5]; + s[11] ^= s[12] ^ 0xf49f879eu; + s[15] ^= s[11]; + s[12] += s[15]; + s[4] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 18u); +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_5(uint32_t* s) { + s[3] += s[0]; + s[6] = (s[6] ^ s[3]) * 0xeb8c24a9u; + s[5] = (s[5] ^ s[6]) * 0xec704d07u; + s[10] += (s[5] | s[14]); + s[14] ^= s[10] ^ 0x62c5c9a6u; + s[8] += (s[14] | s[1]); + s[9] -= s[8]; + s[11] += (s[9] | s[13]); + s[14] ^= (s[11] & s[13]); + s[15] = mh_rotl(s[15], 21u) + s[14]; + s[13] *= (s[15] | 1u); + s[11] ^= (s[13] & s[7]); + s[0] = mh_rotl(s[0] ^ s[11], 24u); + s[9] *= (s[0] | 1u); + s[14] = s[14] * 0xab36a85du + s[9]; + s[0] = s[0] * 0xa839c927u + s[14]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4] ^ 0x83d1d8a6u; + s[3] = (s[3] ^ s[0]) * 0x54110efdu; + s[13] += s[3]; + s[12] = mh_rotl(s[12] ^ s[13], 19u); + s[5] = (s[5] ^ s[12]) * 0xbcdfd83fu; + s[3] = s[3] * 0xb0a88cb1u + s[5]; + s[9] = mh_rotl(s[9], 21u) + s[3]; + s[7] = (s[7] ^ s[9]) * 0x643041d5u; + s[0] += s[7] + 0x014758c4u; + s[5] = (s[5] ^ s[0]) * 0x582df671u; + s[15] = s[15] * 0x31ec0f8du + s[5]; + s[11] = mh_rotl(s[11], 26u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[11], 6u); + s[4] ^= s[13] ^ 0xb0a4a410u; + s[5] *= (s[4] | 1u); + s[9] += s[5]; + s[1] ^= s[9]; + s[9] ^= s[1] ^ 0xc0bebcdfu; + s[2] ^= s[9]; + s[1] += s[2]; + s[13] = (s[13] ^ s[1]) * 0x71bad59du; + s[10] -= s[13]; + s[6] += s[10]; + s[9] = s[9] * 0x79718b5fu + s[6]; + s[2] = (s[2] ^ s[9]) * 0x12ef487du; + s[10] ^= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[11] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 16u); + s[2] = (s[2] ^ s[9]) * 0x56756b3fu; + s[10] = mh_rotl(s[10] ^ s[2], 2u); + s[6] += s[10]; + s[7] = s[7] * 0x0b4e6385u + s[6]; + s[10] += s[7]; + s[13] ^= s[10]; + s[5] -= s[13]; + s[14] ^= s[5]; + s[11] ^= (s[14] & s[0]); + s[6] = s[6] * 0x4fd7e53du + s[11]; + s[1] *= (s[6] | 1u); + s[15] += s[1]; + s[12] ^= s[15]; + s[10] += s[12]; + s[0] = mh_rotl(s[0] ^ s[10], 2u); + s[7] ^= s[0]; + s[14] ^= s[7] ^ 0x2a2f99f7u; + s[0] *= (s[14] | 1u); + s[7] ^= (s[0] & s[1]); + s[4] ^= s[7]; + s[13] += s[4]; + s[0] = (s[0] ^ s[13]) * 0x36833905u; + s[5] -= s[0]; + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[9] = mh_rotl(s[9], 12u) + s[3]; + s[14] ^= s[9]; + s[13] += s[14] + 0xe3bd2b0fu; + s[12] += s[13] + 0x4413899eu; + s[10] ^= s[12]; + s[1] ^= s[10]; + s[10] = mh_rotl(s[10], 31u) + s[1]; + s[8] = s[8] * 0xf8854e6du + s[10]; + s[2] ^= s[8] ^ 0x1391c2f2u; + s[4] = mh_rotl(s[4], 26u) + s[2]; + s[7] ^= s[4] ^ 0xb7b8bc86u; + s[3] *= (s[7] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] ^= s[1]; + s[1] -= s[13]; + s[10] += s[1]; + s[2] = mh_rotl(s[2] ^ s[10], 5u); + s[6] += s[2] + 0x4e72cc89u; + s[12] ^= (s[6] & s[1]); + s[0] -= s[12]; + s[6] = (s[6] ^ s[0]) * 0xfdbe52d7u; + s[1] -= s[6]; + s[8] = mh_rotl(s[8], 30u) + s[1]; + s[5] += s[8]; + s[8] ^= (s[5] & s[13]); + s[15] += (s[8] | s[1]); + s[12] *= (s[15] | 1u); + s[15] *= (s[12] | 1u); + s[2] += s[15]; + s[5] += (s[2] | s[6]); + s[6] += (s[5] | s[4]); + s[14] = mh_rotl(s[14] ^ s[6], 8u); + s[0] *= (s[14] | 1u); + s[5] += s[0] + 0x09c67ebeu; + s[15] ^= s[5] ^ 0x156bc1ccu; + s[4] = mh_rotl(s[4], 28u) + s[15]; + s[7] += s[4]; + s[8] ^= s[7]; + s[6] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[6], 27u); + s[8] ^= s[4]; + s[15] = (s[15] ^ s[8]) * 0xa06ef0edu; + s[13] = mh_rotl(s[13] ^ s[15], 21u); + s[7] = mh_rotl(s[7] ^ s[13], 7u); + s[9] = (s[9] ^ s[7]) * 0x6d635cb5u; + s[15] += s[9]; + s[14] -= s[15]; + s[7] = mh_rotl(s[7] ^ s[14], 28u); + s[0] = mh_rotl(s[0], 9u) + s[7]; + s[8] ^= s[0]; + s[4] -= s[8]; + s[15] = mh_rotl(s[15], 6u) + s[4]; + s[11] = mh_rotl(s[11] ^ s[15], 15u); + s[7] -= s[11]; + s[12] = (s[12] ^ s[7]) * 0x01fed389u; + s[8] += s[12]; + s[14] -= s[8]; + s[1] = mh_rotl(s[1] ^ s[14], 28u); + s[5] *= (s[1] | 1u); + s[12] += s[5]; + s[14] += s[12]; + s[10] = mh_rotl(s[10] ^ s[14], 3u); + s[5] = (s[5] ^ s[10]) * 0xad88f2d5u; + s[1] += s[5]; + s[11] ^= s[1] ^ 0x77926639u; + s[9] ^= s[11]; + s[12] -= s[9]; + s[8] = s[8] * 0xfa22d721u + s[12]; + s[0] ^= s[8] ^ 0xe9e4f8edu; + s[5] = mh_rotl(s[5], 17u) + s[0]; + s[11] += s[5]; + s[1] ^= s[11]; + s[13] ^= s[1] ^ 0xfaae7919u; + s[1] += (s[13] | s[0]); + s[9] = mh_rotl(s[9] ^ s[1], 22u); + s[3] *= (s[9] | 1u); + s[10] ^= s[3]; + s[5] -= s[10]; + s[2] += s[5]; + s[14] = mh_rotl(s[14] ^ s[2], 5u); + s[4] ^= s[14]; + s[5] *= (s[4] | 1u); + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[15] = (s[15] ^ s[5]) * 0x34c09009u; + s[8] *= (s[15] | 1u); + s[12] ^= (s[8] & s[13]); + s[4] += s[12]; + s[12] += s[4] + 0xe0c44ae5u; + s[8] = mh_rotl(s[8], 12u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[8], 11u); + s[2] ^= s[12]; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[13] += s[0] + 0x7a0818e1u; + s[12] = mh_rotl(s[12], 2u) + s[13]; + s[8] ^= (s[12] & s[1]); + s[6] ^= s[8]; + s[8] *= (s[6] | 1u); + s[14] += s[8]; + s[9] = mh_rotl(s[9] ^ s[14], 7u); + s[14] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[14], 2u); + s[12] ^= s[9]; + s[3] ^= s[12] ^ 0xfaa7ba68u; + s[10] = mh_rotl(s[10], 26u) + s[3]; + s[4] ^= s[10] ^ 0x69fb8372u; + s[8] ^= s[4]; + s[14] = (s[14] ^ s[8]) * 0xd0560d4fu; + s[5] ^= s[14]; + s[0] *= (s[5] | 1u); + s[10] ^= (s[0] & s[13]); + s[7] += s[10]; + s[8] = s[8] * 0xf397c40du + s[7]; + s[4] ^= s[8] ^ 0x8bf8d86au; + s[13] ^= s[4] ^ 0x8bc1b817u; + s[0] = mh_rotl(s[0], 28u) + s[13]; + s[4] += s[0]; + s[10] ^= s[4]; + s[12] += s[10]; + s[0] = mh_rotl(s[0] ^ s[12], 18u); + s[1] = (s[1] ^ s[0]) * 0x587d6993u; + s[10] = mh_rotl(s[10], 14u) + s[1]; + s[3] ^= s[10] ^ 0xe428141au; + s[13] *= (s[3] | 1u); + s[12] = mh_rotl(s[12] ^ s[13], 22u); + s[14] -= s[12]; + s[1] -= s[14]; + s[6] = mh_rotl(s[6], 31u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[6], 16u); + s[6] = s[6] * 0xd2da54cdu + s[11]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[4] += s[12] + 0x6e5c8780u; + s[15] ^= s[4] ^ 0x437bad36u; + s[9] = mh_rotl(s[9], 7u) + s[15]; + s[11] = s[11] * 0x68e0eacbu + s[9]; + s[6] += s[11]; + s[5] -= s[6]; + s[12] ^= (s[5] & s[10]); + s[13] = (s[13] ^ s[12]) * 0x613ad747u; + s[2] += s[13] + 0x16b1a53du; + s[3] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[15] += s[14] + 0x33619f2eu; + s[6] ^= s[15]; + s[15] = mh_rotl(s[15], 24u) + s[6]; + s[12] += s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[9] += s[10]; + s[4] *= (s[9] | 1u); + s[6] ^= s[4]; + s[13] -= s[6]; + s[1] *= (s[13] | 1u); + s[11] *= (s[1] | 1u); + s[7] *= (s[11] | 1u); + s[13] -= s[7]; + s[0] = (s[0] ^ s[13]) * 0xfeca92ddu; + s[9] = mh_rotl(s[9] ^ s[0], 24u); + s[14] ^= (s[9] & s[10]); + s[0] -= s[14]; + s[5] ^= s[0]; + s[9] ^= s[5]; + s[5] = (s[5] ^ s[9]) * 0xe0456a5du; + s[11] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[11], 29u); + s[11] = mh_rotl(s[11] ^ s[10], 24u); + s[0] += (s[11] | s[15]); + s[2] ^= s[0] ^ 0x4625da37u; + s[6] = mh_rotl(s[6] ^ s[2], 26u); + s[3] -= s[6]; + s[9] += s[3]; + s[4] ^= (s[9] & s[12]); + s[7] *= (s[4] | 1u); + s[1] -= s[7]; + s[3] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 23u); + s[6] = (s[6] ^ s[2]) * 0x3bbae9d3u; + s[1] = mh_rotl(s[1] ^ s[6], 10u); + s[8] ^= s[1]; + s[15] = (s[15] ^ s[8]) * 0xb5172567u; + s[3] += s[15]; + s[0] ^= (s[3] & s[5]); + s[2] = (s[2] ^ s[0]) * 0xbfe80ff1u; + s[14] -= s[2]; + s[6] -= s[14]; + s[0] = mh_rotl(s[0] ^ s[6], 24u); + s[10] = s[10] * 0x965ee7ebu + s[0]; + s[15] -= s[10]; + s[0] += s[15]; + s[4] += s[0]; + s[3] = mh_rotl(s[3], 14u) + s[4]; + s[12] += (s[3] | s[9]); + s[5] = mh_rotl(s[5] ^ s[12], 3u); + s[9] *= (s[5] | 1u); + s[5] += s[9]; + s[14] = (s[14] ^ s[5]) * 0xb64f271du; + s[9] -= s[14]; + s[8] *= (s[9] | 1u); + s[3] = (s[3] ^ s[8]) * 0x69f51253u; + s[13] -= s[3]; + s[12] ^= s[13] ^ 0x8ee490b4u; + s[13] = mh_rotl(s[13] ^ s[12], 27u); + s[14] ^= s[13] ^ 0xbcfac44eu; + s[15] += s[14]; + s[1] = mh_rotl(s[1], 6u) + s[15]; + s[14] += s[1]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[10] += (s[6] | s[4]); + s[6] *= (s[10] | 1u); + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[8] = mh_rotl(s[8], 21u) + s[13]; + s[3] -= s[8]; + s[12] = mh_rotl(s[12] ^ s[3], 9u); + s[10] += s[12] + 0x346fb7eeu; + s[3] -= s[10]; + s[12] += s[3] + 0xc936ca56u; + s[3] -= s[12]; + s[5] = mh_rotl(s[5], 2u) + s[3]; + s[11] ^= s[5]; + s[12] ^= s[11] ^ 0x46abb8ffu; + s[10] += s[12]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[11] = mh_rotl(s[11], 31u) + s[2]; + s[7] += (s[11] | s[4]); + s[3] ^= s[7] ^ 0x8c92b860u; + s[6] += s[3]; + s[11] *= (s[6] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 1u); + s[9] = mh_rotl(s[9], 22u) + s[8]; + s[5] ^= s[9]; + s[9] ^= s[5] ^ 0x6d49ae98u; + s[12] *= (s[9] | 1u); + s[0] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[0]; + s[10] = s[10] * 0xfceded15u + s[5]; + s[6] ^= s[10]; + s[7] += s[6]; + s[10] = mh_rotl(s[10], 26u) + s[7]; + s[13] += s[10]; + s[15] ^= (s[13] & s[10]); + s[10] ^= s[15] ^ 0x10494cd6u; + s[13] = s[13] * 0x043625d1u + s[10]; + s[5] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[5], 5u); + s[2] = (s[2] ^ s[7]) * 0x1276600bu; + s[8] = (s[8] ^ s[2]) * 0xac53054bu; + s[10] ^= s[8] ^ 0xd5306663u; + s[15] += s[10]; + s[8] *= (s[15] | 1u); + s[0] = (s[0] ^ s[8]) * 0x12dd02dbu; + s[1] = mh_rotl(s[1] ^ s[0], 29u); + s[4] = mh_rotl(s[4] ^ s[1], 12u); + s[13] = mh_rotl(s[13], 21u) + s[4]; + s[4] = (s[4] ^ s[13]) * 0xd9d84eddu; + s[2] += s[4]; + s[12] -= s[2]; + s[6] ^= s[12] ^ 0xa6690db7u; + s[14] += s[6]; + s[5] += s[14] + 0x3d839e2bu; + s[12] = mh_rotl(s[12] ^ s[5], 18u); + s[10] ^= (s[12] & s[9]); + s[14] = (s[14] ^ s[10]) * 0x8735918du; + s[0] = mh_rotl(s[0] ^ s[14], 25u); + s[14] += s[0] + 0x4032aa8du; + s[6] = mh_rotl(s[6], 6u) + s[14]; + s[1] ^= s[6] ^ 0x2c453b82u; + s[0] = (s[0] ^ s[1]) * 0x2a9abf35u; + s[2] -= s[0]; + s[4] ^= (s[2] & s[11]); + s[2] *= (s[4] | 1u); + s[5] ^= s[2]; + s[6] = mh_rotl(s[6] ^ s[5], 17u); + s[14] ^= s[6] ^ 0xb98cf2eeu; + s[0] ^= s[14]; + s[12] += s[0] + 0x37fc2a78u; + s[10] += s[12]; + s[12] = (s[12] ^ s[10]) * 0xb13a0e53u; + s[9] = (s[9] ^ s[12]) * 0x59d4dc61u; + s[10] += s[9] + 0xed0d9cecu; + s[6] = mh_rotl(s[6], 27u) + s[10]; + s[10] ^= s[6]; + s[1] += s[10] + 0x38911ae4u; + s[2] = mh_rotl(s[2], 4u) + s[1]; + s[3] += (s[2] | s[6]); + s[15] = s[15] * 0xa10c5147u + s[3]; + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[3] -= s[9]; + s[4] ^= s[3] ^ 0x09b8cee2u; + s[13] += (s[4] | s[8]); + s[14] -= s[13]; + s[10] ^= s[14] ^ 0xde5b028du; + s[14] *= (s[10] | 1u); + s[4] += s[14] + 0xbebd25ffu; + s[11] ^= s[4]; + s[15] += s[11]; + s[3] ^= s[15] ^ 0x0157f354u; + s[2] = (s[2] ^ s[3]) * 0x2e6b681du; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[11] += (s[0] | s[7]); + s[9] = mh_rotl(s[9] ^ s[11], 28u); + s[1] ^= (s[9] & s[5]); + s[2] = (s[2] ^ s[1]) * 0x8c67acb5u; + s[9] = mh_rotl(s[9] ^ s[2], 15u); + s[5] += (s[9] | s[14]); + s[7] += s[5]; + s[10] += (s[7] | s[15]); + s[12] = mh_rotl(s[12] ^ s[10], 12u); + s[10] = (s[10] ^ s[12]) * 0x8321a9edu; + s[15] ^= s[10] ^ 0x2bb47d41u; + s[1] += s[15] + 0xf55a878du; + s[3] ^= s[1] ^ 0x5f495580u; + s[12] += s[3]; + s[15] -= s[12]; + s[10] += s[15]; + s[14] ^= s[10]; + s[12] = (s[12] ^ s[14]) * 0x6982d931u; + s[6] ^= s[12] ^ 0x5a0647a9u; + s[3] ^= s[6]; + s[11] = mh_rotl(s[11] ^ s[3], 28u); + s[6] = mh_rotl(s[6], 9u) + s[11]; + s[9] = mh_rotl(s[9], 17u) + s[6]; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[13] ^= s[15]; + s[2] += s[13] + 0x161113b3u; + s[5] ^= s[2] ^ 0x51604bb3u; + s[13] = mh_rotl(s[13], 20u) + s[5]; + s[7] += s[13] + 0x485a1932u; + s[14] -= s[7]; + s[12] ^= (s[14] & s[3]); + s[14] = mh_rotl(s[14], 29u) + s[12]; + s[7] -= s[14]; + s[9] ^= s[7]; + s[14] ^= (s[9] & s[12]); + s[8] = (s[8] ^ s[14]) * 0xa3da88b9u; + s[6] = (s[6] ^ s[8]) * 0xdd3e9ca3u; + s[12] ^= s[6]; + s[4] += (s[12] | s[13]); + s[13] = (s[13] ^ s[4]) * 0x0658106fu; + s[10] = (s[10] ^ s[13]) * 0x49f6cb31u; + s[3] ^= s[10] ^ 0x3342d583u; + s[13] = mh_rotl(s[13], 20u) + s[3]; + s[14] ^= s[13] ^ 0xc5f67216u; + s[4] = (s[4] ^ s[14]) * 0xc7b5f0fdu; + s[2] = (s[2] ^ s[4]) * 0xfec902c3u; + s[10] += s[2]; + s[5] ^= (s[10] & s[8]); + s[2] ^= s[5]; + s[11] ^= s[2]; + s[0] ^= s[11] ^ 0x8646d6d8u; + s[13] += s[0] + 0x4fc0a99fu; + s[10] = (s[10] ^ s[13]) * 0x34655acfu; + s[12] = mh_rotl(s[12], 15u) + s[10]; + s[3] = mh_rotl(s[3], 31u) + s[12]; + s[11] ^= s[3] ^ 0xece30db7u; + s[13] += s[11] + 0x723a0b0eu; + s[14] -= s[13]; + s[1] += s[14]; + s[10] ^= s[1]; + s[12] *= (s[10] | 1u); + s[4] ^= s[12]; + s[13] ^= s[4]; + s[0] += s[13]; + s[4] -= s[0]; + s[5] *= (s[4] | 1u); + s[14] += s[5]; + s[15] = (s[15] ^ s[14]) * 0xca24c253u; + s[0] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[0], 3u); + s[13] = (s[13] ^ s[8]) * 0x4c689903u; + s[3] ^= s[13]; + s[5] ^= s[3]; + s[4] += s[5] + 0xd0e100c0u; + s[9] ^= (s[4] & s[6]); + s[10] = mh_rotl(s[10] ^ s[9], 27u); + s[0] = s[0] * 0xec7a3889u + s[10]; + s[3] -= s[0]; + s[1] ^= s[3] ^ 0x61331fd7u; + s[9] = mh_rotl(s[9] ^ s[1], 15u); + s[0] ^= s[9]; + s[7] += s[0] + 0xa7848bacu; + s[11] += s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 6u); + s[11] -= s[2]; + s[3] -= s[11]; + s[13] ^= s[3]; + s[7] = (s[7] ^ s[13]) * 0xd454fc59u; + s[13] ^= (s[7] & s[1]); + s[9] += s[13] + 0xdaba595au; + s[11] ^= s[9] ^ 0x0dbe4c62u; + s[6] -= s[11]; + s[7] = s[7] * 0x64236413u + s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 19u); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[1] += s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[10] = mh_rotl(s[10] ^ s[14], 24u); + s[8] = (s[8] ^ s[10]) * 0x11582fa5u; + s[0] -= s[8]; + s[3] ^= s[0] ^ 0xe88102d4u; + s[5] = mh_rotl(s[5], 16u) + s[3]; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[3] = mh_rotl(s[3], 1u) + s[2]; + s[4] -= s[3]; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[0], 10u); + s[12] += s[3]; + s[8] = mh_rotl(s[8] ^ s[12], 24u); + s[9] = mh_rotl(s[9], 31u) + s[8]; + s[7] -= s[9]; + s[10] ^= s[7]; + s[4] += (s[10] | s[2]); + s[5] ^= s[4]; + s[1] += s[5] + 0xa17d3697u; + s[4] = mh_rotl(s[4] ^ s[1], 13u); + s[12] ^= s[4]; + s[7] ^= s[12]; + s[14] = mh_rotl(s[14] ^ s[7], 25u); + s[4] = mh_rotl(s[4], 28u) + s[14]; + s[14] -= s[4]; + s[12] ^= s[14]; + s[6] -= s[12]; + s[5] = mh_rotl(s[5] ^ s[6], 5u); + s[2] += s[5] + 0x6f8f3046u; + s[9] += s[2]; + s[8] = (s[8] ^ s[9]) * 0xbcb4183du; + s[11] += s[8]; + s[13] *= (s[11] | 1u); + s[15] += s[13]; + s[8] = (s[8] ^ s[15]) * 0x4f5a0a23u; + s[13] += s[8] + 0x26061a70u; + s[3] ^= s[13] ^ 0x9351deb0u; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[5] += s[13]; + s[3] -= s[5]; + s[13] += s[3]; + s[7] = (s[7] ^ s[13]) * 0xc9cd8fcdu; + s[10] *= (s[7] | 1u); + s[7] -= s[10]; + s[5] += s[7]; + s[1] += s[5]; + s[15] ^= (s[1] & s[8]); + s[9] -= s[15]; + s[10] = mh_rotl(s[10], 24u) + s[9]; + s[6] = mh_rotl(s[6], 1u) + s[10]; + s[3] ^= s[6]; + s[0] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[0], 20u); + s[5] += s[12]; + s[0] = s[0] * 0x2418a23du + s[5]; + s[11] = (s[11] ^ s[0]) * 0x6c58993bu; + s[14] ^= s[11] ^ 0x4a8ca854u; + s[15] *= (s[14] | 1u); + s[0] += s[15]; + s[11] = mh_rotl(s[11] ^ s[0], 17u); + s[5] -= s[11]; + s[6] *= (s[5] | 1u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[4] ^= s[10]; + s[14] = mh_rotl(s[14], 28u) + s[4]; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x54779a6fu; + s[4] += s[9]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 22u); + s[12] += (s[8] | s[7]); + s[8] = mh_rotl(s[8], 7u) + s[12]; + s[14] -= s[8]; + s[3] ^= s[14] ^ 0x5bc9132cu; + s[1] ^= s[3] ^ 0xa3e75626u; + s[8] = (s[8] ^ s[1]) * 0x4a1396f7u; + s[5] = mh_rotl(s[5] ^ s[8], 27u); + s[11] += s[5]; + s[4] = mh_rotl(s[4] ^ s[11], 8u); + s[7] = (s[7] ^ s[4]) * 0x88273613u; + s[15] += s[7]; + s[1] -= s[15]; + s[12] ^= (s[1] & s[9]); + s[14] += s[12]; + s[7] = s[7] * 0x5081a79du + s[14]; + s[6] = mh_rotl(s[6], 14u) + s[7]; + s[3] ^= s[6]; + s[10] = s[10] * 0x1b283fddu + s[3]; + s[6] = (s[6] ^ s[10]) * 0x73e5e60fu; + s[3] = (s[3] ^ s[6]) * 0xc9863803u; + s[1] ^= s[3]; + s[15] -= s[1]; + s[5] ^= (s[15] & s[7]); + s[14] += s[5]; + s[8] += s[14] + 0x185096cdu; + s[11] ^= s[8] ^ 0x9ef04aa3u; + s[5] -= s[11]; + s[2] = mh_rotl(s[2] ^ s[5], 18u); + s[9] += s[2]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[15], 27u); + s[10] -= s[0]; + s[2] = mh_rotl(s[2] ^ s[10], 7u); + s[15] += s[2] + 0x442bb076u; + s[8] ^= (s[15] & s[13]); + s[14] = mh_rotl(s[14], 31u) + s[8]; + s[15] ^= s[14]; + s[4] -= s[15]; + s[15] *= (s[4] | 1u); + s[11] = mh_rotl(s[11], 3u) + s[15]; + s[1] *= (s[11] | 1u); + s[11] = mh_rotl(s[11] ^ s[1], 19u); + s[3] = mh_rotl(s[3] ^ s[11], 21u); + s[1] = (s[1] ^ s[3]) * 0x6cbc5bb9u; + s[6] += s[1]; + s[3] = s[3] * 0xe2cb6cebu + s[6]; + s[1] += s[3]; + s[13] = mh_rotl(s[13], 19u) + s[1]; + s[3] ^= s[13]; + s[11] -= s[3]; + s[0] += s[11]; + s[8] *= (s[0] | 1u); + s[11] += s[8] + 0x6853a703u; + s[9] ^= s[11]; + s[10] += s[9]; + s[12] = (s[12] ^ s[10]) * 0x9a3ac6dbu; + s[10] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 8u); + s[2] ^= s[13]; + s[10] -= s[2]; + s[12] = (s[12] ^ s[10]) * 0x833838d1u; + s[9] = mh_rotl(s[9], 3u) + s[12]; + s[2] ^= s[9]; + s[12] ^= s[2]; + s[11] = (s[11] ^ s[12]) * 0x2370b681u; + s[9] = (s[9] ^ s[11]) * 0x7f4b0295u; + s[11] ^= s[9]; + s[9] = s[9] * 0x06b0dc0du + s[11]; + s[5] ^= s[9]; + s[12] = mh_rotl(s[12] ^ s[5], 19u); + s[4] *= (s[12] | 1u); + s[3] ^= (s[4] & s[8]); + s[6] += s[3]; + s[1] += s[6] + 0xc6e02045u; + s[9] += s[1] + 0xf8f493d8u; + s[12] -= s[9]; + s[2] += s[12]; + s[14] += s[2]; + s[10] = mh_rotl(s[10], 29u) + s[14]; + s[7] += s[10]; + s[12] += s[7]; + s[7] += s[12]; + s[12] -= s[7]; + s[3] ^= s[12]; + s[11] ^= s[3] ^ 0xd6f7214fu; + s[3] ^= s[11]; + s[15] = (s[15] ^ s[3]) * 0x0f25c855u; + s[5] -= s[15]; + s[1] ^= s[5]; + s[0] += s[1]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[10] = (s[10] ^ s[15]) * 0x286496e5u; + s[12] += s[10] + 0x3e03a265u; + s[1] -= s[12]; + s[3] -= s[1]; + s[14] ^= s[3] ^ 0xdf78ab91u; + s[10] = s[10] * 0x64a3bcb1u + s[14]; + s[11] += s[10]; + s[1] += s[11]; + s[11] ^= s[1] ^ 0x163d1a0fu; + s[15] = s[15] * 0xfcc7a02bu + s[11]; + s[8] -= s[15]; + s[3] += s[8] + 0x2fc585d7u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[4] = (s[4] ^ s[9]) * 0xf91a42afu; + s[13] += s[4]; + s[15] = s[15] * 0xb3102455u + s[13]; + s[11] -= s[15]; + s[12] ^= s[11]; + s[14] = (s[14] ^ s[12]) * 0xd7e9b5afu; + s[5] = mh_rotl(s[5], 1u) + s[14]; + s[2] += s[5]; + s[0] ^= s[2]; + s[6] = (s[6] ^ s[0]) * 0xf95b573du; + s[8] = (s[8] ^ s[6]) * 0x115cc1f5u; + s[3] = s[3] * 0x7bb26c65u + s[8]; + s[1] ^= s[3]; + s[9] = s[9] * 0xcdee5da3u + s[1]; + s[4] *= (s[9] | 1u); + s[11] += s[4] + 0xb5fccc2bu; + s[2] += s[11] + 0x5e38801fu; + s[11] = (s[11] ^ s[2]) * 0x397014ebu; + s[14] = mh_rotl(s[14] ^ s[11], 4u); + s[3] = (s[3] ^ s[14]) * 0xbbf780efu; + s[10] ^= s[3]; + s[4] ^= s[10] ^ 0x4abb5f0au; + s[10] ^= (s[4] & s[6]); + s[15] += s[10]; + s[9] ^= (s[15] & s[4]); + s[11] = mh_rotl(s[11], 20u) + s[9]; + s[13] ^= s[11]; + s[5] += s[13] + 0x104bed55u; + s[6] = s[6] * 0x2b9b1395u + s[5]; + s[7] = (s[7] ^ s[6]) * 0xdd08fdebu; + s[9] = (s[9] ^ s[7]) * 0x46d23ed5u; + s[3] = s[3] * 0xcd451ba9u + s[9]; + s[11] ^= s[3]; + s[10] += s[11] + 0xeb7a45b8u; + s[0] ^= s[10]; + s[7] += s[0]; + s[15] = mh_rotl(s[15], 2u) + s[7]; + s[12] -= s[15]; + s[8] ^= s[12]; + s[1] += s[8]; + s[5] = (s[5] ^ s[1]) * 0xc6f4ee59u; + s[14] *= (s[5] | 1u); + s[7] = mh_rotl(s[7] ^ s[14], 31u); + s[12] -= s[7]; + s[13] += s[12]; + s[1] = mh_rotl(s[1] ^ s[13], 30u); + s[14] -= s[1]; + s[1] ^= s[14]; + s[6] *= (s[1] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[8] = mh_rotl(s[8], 15u) + s[15]; + s[15] += s[8] + 0x8e6a0f17u; + s[9] += (s[15] | s[12]); + s[11] ^= s[9]; + s[6] *= (s[11] | 1u); + s[7] += s[6] + 0xe553414fu; + s[8] = (s[8] ^ s[7]) * 0xab271281u; + s[12] += s[8]; + s[14] *= (s[12] | 1u); + s[9] ^= s[14]; + s[5] ^= s[9]; + s[7] += (s[5] | s[2]); + s[3] += s[7]; + s[11] -= s[3]; + s[0] = (s[0] ^ s[11]) * 0x2f8b8657u; + s[1] += s[0]; + s[15] = mh_rotl(s[15], 15u) + s[1]; + s[0] = s[0] * 0xf98801d1u + s[15]; + s[10] = s[10] * 0xc3d74db5u + s[0]; + s[15] -= s[10]; + s[13] -= s[15]; + s[4] = mh_rotl(s[4], 11u) + s[13]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[14]; + s[5] += s[11] + 0x14945643u; + s[13] = (s[13] ^ s[5]) * 0xade16d23u; + s[8] ^= s[13] ^ 0x7234c3c3u; + s[15] = mh_rotl(s[15], 30u) + s[8]; + s[2] = (s[2] ^ s[15]) * 0x79ec043du; + s[7] ^= s[2]; + s[15] *= (s[7] | 1u); + s[9] = mh_rotl(s[9], 24u) + s[15]; + s[7] *= (s[9] | 1u); + s[1] ^= s[7]; + s[9] = (s[9] ^ s[1]) * 0x89ea4addu; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[1] -= s[0]; + s[9] += s[1] + 0x0690537cu; + s[1] += s[9] + 0xe5486bebu; + s[6] = mh_rotl(s[6] ^ s[1], 19u); + s[15] -= s[6]; +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_6(uint32_t* s) { + s[11] += s[0]; + s[13] += (s[11] | s[0]); + s[14] ^= s[13]; + s[15] += (s[14] | s[8]); + s[0] = mh_rotl(s[0], 1u) + s[15]; + s[15] *= (s[0] | 1u); + s[7] += (s[15] | s[14]); + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[15] = mh_rotl(s[15], 24u) + s[1]; + s[6] = mh_rotl(s[6], 28u) + s[15]; + s[12] ^= (s[6] & s[7]); + s[6] = mh_rotl(s[6], 15u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 30u); + s[7] ^= s[15]; + s[5] ^= s[7] ^ 0x1874ccb9u; + s[13] = (s[13] ^ s[5]) * 0xead971f1u; + s[2] += s[13]; + s[8] *= (s[2] | 1u); + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[2] += (s[15] | s[4]); + s[13] ^= (s[2] & s[6]); + s[15] += s[13]; + s[3] += s[15] + 0xeea76305u; + s[15] = mh_rotl(s[15], 9u) + s[3]; + s[1] += s[15]; + s[9] *= (s[1] | 1u); + s[5] += s[9]; + s[1] = mh_rotl(s[1] ^ s[5], 17u); + s[11] += s[1]; + s[2] += s[11]; + s[6] += s[2]; + s[1] = (s[1] ^ s[6]) * 0x4f9b8f91u; + s[8] = mh_rotl(s[8] ^ s[1], 31u); + s[7] = (s[7] ^ s[8]) * 0xf1d427b1u; + s[6] += s[7]; + s[15] = mh_rotl(s[15] ^ s[6], 7u); + s[10] = mh_rotl(s[10], 20u) + s[15]; + s[6] -= s[10]; + s[10] = (s[10] ^ s[6]) * 0x286194bfu; + s[0] *= (s[10] | 1u); + s[4] = (s[4] ^ s[0]) * 0xc953f135u; + s[9] += s[4] + 0x6ba4448eu; + s[4] = (s[4] ^ s[9]) * 0xb1856abdu; + s[5] ^= s[4] ^ 0xf42a5bdcu; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[3] += s[4]; + s[10] += s[3]; + s[6] += (s[10] | s[5]); + s[12] += s[6]; + s[5] ^= s[12] ^ 0xc802dfebu; + s[4] = (s[4] ^ s[5]) * 0x412d8fbfu; + s[14] ^= s[4] ^ 0x9e40e380u; + s[11] = (s[11] ^ s[14]) * 0xed0a749fu; + s[15] *= (s[11] | 1u); + s[14] = (s[14] ^ s[15]) * 0x23a1ec6du; + s[3] += s[14]; + s[12] ^= s[3] ^ 0xc9907e2bu; + s[1] = s[1] * 0x5bbedaf5u + s[12]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[8] = (s[8] ^ s[6]) * 0x600cfb09u; + s[14] += s[8]; + s[12] += s[14] + 0x78988768u; + s[4] = s[4] * 0xa626cf43u + s[12]; + s[13] = (s[13] ^ s[4]) * 0x54dc81e3u; + s[0] *= (s[13] | 1u); + s[13] -= s[0]; + s[8] += (s[13] | s[9]); + s[1] ^= s[8]; + s[6] = (s[6] ^ s[1]) * 0xd367f779u; + s[7] -= s[6]; + s[13] += s[7]; + s[6] = s[6] * 0xe7cffbcdu + s[13]; + s[3] = (s[3] ^ s[6]) * 0xfa1b7e5du; + s[13] = mh_rotl(s[13], 31u) + s[3]; + s[2] ^= s[13]; + s[4] *= (s[2] | 1u); + s[3] ^= s[4]; + s[4] -= s[3]; + s[15] += s[4]; + s[8] = (s[8] ^ s[15]) * 0x9a841483u; + s[5] ^= s[8]; + s[15] ^= (s[5] & s[0]); + s[4] += s[15]; + s[9] = mh_rotl(s[9] ^ s[4], 14u); + s[12] *= (s[9] | 1u); + s[10] += (s[12] | s[3]); + s[2] = mh_rotl(s[2] ^ s[10], 19u); + s[5] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 17u); + s[7] ^= s[14]; + s[12] += s[7]; + s[8] = s[8] * 0x563fd2c3u + s[12]; + s[13] = mh_rotl(s[13], 6u) + s[8]; + s[11] += s[13] + 0xfe09487du; + s[14] -= s[11]; + s[2] -= s[14]; + s[0] += s[2] + 0x134d34fbu; + s[7] -= s[0]; + s[13] = mh_rotl(s[13], 20u) + s[7]; + s[15] = mh_rotl(s[15] ^ s[13], 12u); + s[9] += s[15]; + s[0] -= s[9]; + s[15] ^= s[0] ^ 0xd26cf159u; + s[12] += s[15] + 0x0c050d95u; + s[3] = s[3] * 0x3f90fd07u + s[12]; + s[7] -= s[3]; + s[13] = (s[13] ^ s[7]) * 0xbb3ea981u; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[6] ^= (s[8] & s[4]); + s[7] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[7], 23u); + s[4] *= (s[6] | 1u); + s[6] -= s[4]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[11] -= s[12]; + s[5] -= s[11]; + s[4] = (s[4] ^ s[5]) * 0xb0a03621u; + s[15] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[15]; + s[15] ^= s[0]; + s[8] += s[15] + 0x15f21a1au; + s[2] ^= s[8]; + s[13] = mh_rotl(s[13], 22u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[13], 4u); + s[4] += s[2]; + s[11] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 16u) + s[11]; + s[14] *= (s[15] | 1u); + s[1] += s[14]; + s[5] += s[1]; + s[13] ^= s[5] ^ 0x4d858e87u; + s[12] *= (s[13] | 1u); + s[10] = mh_rotl(s[10], 19u) + s[12]; + s[5] += s[10]; + s[15] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[15], 30u); + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[10] -= s[3]; + s[11] = mh_rotl(s[11], 5u) + s[10]; + s[12] ^= s[11]; + s[7] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[7], 2u); + s[6] ^= s[12]; + s[11] -= s[6]; + s[3] += s[11] + 0x15d75f72u; + s[6] += s[3]; + s[4] *= (s[6] | 1u); + s[3] -= s[4]; + s[12] += s[3] + 0x02d9ef35u; + s[0] -= s[12]; + s[15] ^= s[0] ^ 0xa34641eeu; + s[7] *= (s[15] | 1u); + s[8] ^= s[7] ^ 0x5c0473a2u; + s[10] *= (s[8] | 1u); + s[4] *= (s[10] | 1u); + s[12] ^= s[4]; + s[5] += s[12]; + s[15] = mh_rotl(s[15], 29u) + s[5]; + s[0] = mh_rotl(s[0], 7u) + s[15]; + s[15] += s[0]; + s[11] ^= s[15]; + s[4] += (s[11] | s[13]); + s[9] = mh_rotl(s[9] ^ s[4], 5u); + s[11] -= s[9]; + s[7] += s[11]; + s[5] *= (s[7] | 1u); + s[12] += s[5]; + s[3] *= (s[12] | 1u); + s[0] += s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[13] = (s[13] ^ s[10]) * 0x3a550111u; + s[15] += s[13]; + s[1] *= (s[15] | 1u); + s[2] = s[2] * 0x95352fdfu + s[1]; + s[8] = (s[8] ^ s[2]) * 0x269301a1u; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[5] -= s[4]; + s[10] *= (s[5] | 1u); + s[7] += s[10] + 0x1d87f038u; + s[5] = (s[5] ^ s[7]) * 0xecbf1c27u; + s[11] -= s[5]; + s[2] -= s[11]; + s[8] ^= s[2]; + s[6] ^= s[8]; + s[7] -= s[6]; + s[13] -= s[7]; + s[2] -= s[13]; + s[3] ^= s[2]; + s[5] = (s[5] ^ s[3]) * 0x8ef62aebu; + s[7] = (s[7] ^ s[5]) * 0x594b5f33u; + s[12] += s[7]; + s[13] = (s[13] ^ s[12]) * 0xdaa86fd9u; + s[6] += s[13]; + s[13] ^= s[6]; + s[7] += s[13]; + s[5] = mh_rotl(s[5], 17u) + s[7]; + s[4] = (s[4] ^ s[5]) * 0x19723005u; + s[8] -= s[4]; + s[12] ^= s[8]; + s[11] ^= s[12]; + s[8] ^= s[11] ^ 0x0739c480u; + s[2] ^= s[8]; + s[15] = (s[15] ^ s[2]) * 0xc15f8403u; + s[14] -= s[15]; + s[9] += s[14] + 0x2b0ab64au; + s[1] ^= s[9]; + s[9] += (s[1] | s[6]); + s[15] += s[9]; + s[13] += s[15]; + s[6] ^= s[13]; + s[9] ^= s[6] ^ 0xfaf52102u; + s[11] += s[9]; + s[6] += s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 15u); + s[9] -= s[8]; + s[4] ^= s[9]; + s[0] -= s[4]; + s[5] = mh_rotl(s[5], 12u) + s[0]; + s[15] = mh_rotl(s[15], 10u) + s[5]; + s[8] += s[15]; + s[10] ^= s[8] ^ 0x92ea0c55u; + s[13] += s[10]; + s[3] += s[13]; + s[12] = (s[12] ^ s[3]) * 0xd069e52du; + s[9] += s[12]; + s[4] ^= s[9]; + s[12] ^= s[4] ^ 0xeb853951u; + s[0] += s[12] + 0xed41d9fdu; + s[8] = s[8] * 0xc5250bfdu + s[0]; + s[7] *= (s[8] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 2u); + s[10] -= s[2]; + s[11] *= (s[10] | 1u); + s[8] += s[11]; + s[13] = (s[13] ^ s[8]) * 0xd390a1fbu; + s[7] = s[7] * 0x5acff41bu + s[13]; + s[0] ^= s[7]; + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[4] ^= (s[12] & s[7]); + s[7] ^= s[4] ^ 0xc65745d6u; + s[3] ^= s[7]; + s[9] = mh_rotl(s[9], 9u) + s[3]; + s[0] += s[9] + 0xa03ce5a6u; + s[2] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[2], 29u); + s[10] = mh_rotl(s[10] ^ s[15], 13u); + s[9] = mh_rotl(s[9], 30u) + s[10]; + s[10] += (s[9] | s[12]); + s[6] ^= s[10] ^ 0xd72a67b8u; + s[7] *= (s[6] | 1u); + s[15] += s[7]; + s[2] *= (s[15] | 1u); + s[12] += s[2]; + s[8] *= (s[12] | 1u); + s[11] ^= (s[8] & s[9]); + s[12] = mh_rotl(s[12], 27u) + s[11]; + s[0] ^= s[12]; + s[11] += s[0] + 0x01d509c0u; + s[1] -= s[11]; + s[11] -= s[1]; + s[2] += s[11] + 0x2ad9035du; + s[11] ^= (s[2] & s[7]); + s[5] += s[11] + 0x756fff22u; + s[9] *= (s[5] | 1u); + s[13] ^= s[9]; + s[4] ^= s[13]; + s[3] = mh_rotl(s[3], 2u) + s[4]; + s[14] ^= s[3] ^ 0xc1fb5cb3u; + s[3] = mh_rotl(s[3], 19u) + s[14]; + s[14] += s[3]; + s[6] += s[14] + 0x5f1c4569u; + s[3] = mh_rotl(s[3] ^ s[6], 22u); + s[2] += s[3]; + s[9] += s[2]; + s[1] ^= (s[9] & s[10]); + s[5] ^= s[1]; + s[15] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[15], 23u); + s[1] *= (s[2] | 1u); + s[6] ^= s[1]; + s[4] = mh_rotl(s[4], 7u) + s[6]; + s[14] += (s[4] | s[6]); + s[15] = (s[15] ^ s[14]) * 0x83c9a7ebu; + s[14] += s[15]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[3] ^= s[15]; + s[0] ^= s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 31u); + s[4] += s[10]; + s[7] = mh_rotl(s[7], 23u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 3u); + s[1] *= (s[15] | 1u); + s[7] ^= s[1]; + s[14] = (s[14] ^ s[7]) * 0x2ad2ff49u; + s[7] = mh_rotl(s[7], 4u) + s[14]; + s[13] *= (s[7] | 1u); + s[11] -= s[13]; + s[14] = mh_rotl(s[14], 30u) + s[11]; + s[3] += (s[14] | s[4]); + s[13] += (s[3] | s[10]); + s[7] = s[7] * 0x6920c90bu + s[13]; + s[12] += s[7]; + s[3] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[3], 25u); + s[7] = (s[7] ^ s[6]) * 0x04333a85u; + s[8] -= s[7]; + s[2] = (s[2] ^ s[8]) * 0x843335e9u; + s[10] += s[2]; + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[6] = mh_rotl(s[6], 4u) + s[9]; + s[13] = mh_rotl(s[13], 19u) + s[6]; + s[10] = (s[10] ^ s[13]) * 0xbaaa3189u; + s[0] ^= s[10]; + s[10] -= s[0]; + s[13] ^= s[10] ^ 0xee9d489eu; + s[3] *= (s[13] | 1u); + s[12] -= s[3]; + s[4] += (s[12] | s[2]); + s[3] = (s[3] ^ s[4]) * 0x109178f7u; + s[4] += s[3] + 0x9c068c09u; + s[9] = mh_rotl(s[9] ^ s[4], 23u); + s[1] += (s[9] | s[6]); + s[8] ^= s[1]; + s[11] ^= (s[8] & s[7]); + s[9] ^= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[3] = s[3] * 0x3575e169u + s[14]; + s[1] += s[3] + 0x42a43de1u; + s[7] += s[1]; + s[6] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[6], 21u); + s[14] = (s[14] ^ s[0]) * 0xd50f0637u; + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[4] -= s[0]; + s[10] = mh_rotl(s[10], 1u) + s[4]; + s[4] = (s[4] ^ s[10]) * 0xf009aafbu; + s[7] *= (s[4] | 1u); + s[6] ^= s[7] ^ 0xd8b7b555u; + s[2] = mh_rotl(s[2] ^ s[6], 14u); + s[9] += s[2] + 0x85a75e4fu; + s[14] += s[9]; + s[7] = mh_rotl(s[7], 5u) + s[14]; + s[10] ^= s[7]; + s[0] = mh_rotl(s[0] ^ s[10], 10u); + s[3] = (s[3] ^ s[0]) * 0xe1a45df3u; + s[1] += s[3]; + s[14] ^= (s[1] & s[11]); + s[8] -= s[14]; + s[13] = (s[13] ^ s[8]) * 0x9fce6b81u; + s[9] = mh_rotl(s[9], 28u) + s[13]; + s[14] += s[9]; + s[11] -= s[14]; + s[0] *= (s[11] | 1u); + s[10] *= (s[0] | 1u); + s[14] ^= s[10] ^ 0x130dbd8eu; + s[5] = (s[5] ^ s[14]) * 0x488f6399u; + s[7] = mh_rotl(s[7] ^ s[5], 8u); + s[9] *= (s[7] | 1u); + s[15] -= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 14u); + s[1] += s[5]; + s[13] = mh_rotl(s[13], 10u) + s[1]; + s[15] -= s[13]; + s[7] += (s[15] | s[13]); + s[12] ^= s[7]; + s[1] *= (s[12] | 1u); + s[11] = (s[11] ^ s[1]) * 0x04105327u; + s[5] *= (s[11] | 1u); + s[1] ^= s[5]; + s[13] *= (s[1] | 1u); + s[11] = s[11] * 0xd3a38ac5u + s[13]; + s[12] ^= s[11]; + s[3] ^= s[12] ^ 0xcda4d195u; + s[9] += s[3]; + s[13] += s[9]; + s[4] += (s[13] | s[14]); + s[7] = mh_rotl(s[7] ^ s[4], 6u); + s[4] = s[4] * 0xd402bb6du + s[7]; + s[3] ^= (s[4] & s[9]); + s[0] += (s[3] | s[2]); + s[2] += s[0]; + s[6] ^= s[2]; + s[3] += s[6]; + s[7] *= (s[3] | 1u); + s[6] -= s[7]; + s[11] -= s[6]; + s[9] -= s[11]; + s[14] += s[9]; + s[8] = mh_rotl(s[8] ^ s[14], 18u); + s[10] = mh_rotl(s[10] ^ s[8], 20u); + s[12] ^= s[10]; + s[7] ^= s[12]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[14] ^= s[1]; + s[9] = (s[9] ^ s[14]) * 0x6c1e8cd1u; + s[1] -= s[9]; + s[4] += (s[1] | s[5]); + s[7] -= s[4]; + s[13] -= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[13]; + s[15] -= s[6]; + s[2] = s[2] * 0x0d5713c3u + s[15]; + s[3] = mh_rotl(s[3] ^ s[2], 16u); + s[4] = mh_rotl(s[4] ^ s[3], 10u); + s[9] = (s[9] ^ s[4]) * 0x3d5be749u; + s[14] ^= s[9]; + s[15] ^= s[14]; + s[6] *= (s[15] | 1u); + s[7] = (s[7] ^ s[6]) * 0x17df006bu; + s[1] += s[7]; + s[8] -= s[1]; + s[7] = (s[7] ^ s[8]) * 0xe93f9287u; + s[0] ^= s[7] ^ 0x9294d6b2u; + s[14] += s[0]; + s[11] += s[14]; + s[0] += s[11]; + s[7] += s[0]; + s[12] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[12], 9u); + s[3] = mh_rotl(s[3] ^ s[0], 30u); + s[8] = mh_rotl(s[8], 11u) + s[3]; + s[6] ^= s[8]; + s[15] += s[6]; + s[0] += s[15]; + s[10] += s[0]; + s[1] = mh_rotl(s[1], 26u) + s[10]; + s[9] ^= s[1]; + s[13] *= (s[9] | 1u); + s[4] = s[4] * 0xcdb45257u + s[13]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[0] = (s[0] ^ s[2]) * 0x68b3d713u; + s[1] += s[0]; + s[4] = s[4] * 0xf69d4a5fu + s[1]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[8], 7u); + s[2] += s[4] + 0x51bb82ceu; + s[7] += s[2]; + s[1] += s[7]; + s[2] += s[1] + 0x3680e8bbu; + s[5] += s[2] + 0x9e44e256u; + s[1] += s[5]; + s[12] += s[1]; + s[9] ^= s[12]; + s[13] -= s[9]; + s[2] *= (s[13] | 1u); + s[12] += s[2]; + s[13] += s[12]; + s[0] ^= s[13] ^ 0xd70a731du; + s[6] += s[0]; + s[7] = mh_rotl(s[7], 22u) + s[6]; + s[15] = (s[15] ^ s[7]) * 0xdf75ad53u; + s[11] ^= (s[15] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 11u); + s[2] += s[1]; + s[15] = mh_rotl(s[15] ^ s[2], 21u); + s[2] = (s[2] ^ s[15]) * 0x7c349239u; + s[12] = mh_rotl(s[12], 6u) + s[2]; + s[13] ^= s[12] ^ 0xb219f590u; + s[15] *= (s[13] | 1u); + s[2] ^= s[15] ^ 0xa28894b2u; + s[7] += s[2]; + s[3] = mh_rotl(s[3], 19u) + s[7]; + s[12] = (s[12] ^ s[3]) * 0xd73e4265u; + s[15] += s[12]; + s[7] = s[7] * 0x2d1fd471u + s[15]; + s[11] = (s[11] ^ s[7]) * 0x7ce4f3e3u; + s[3] = mh_rotl(s[3] ^ s[11], 27u); + s[8] += s[3]; + s[9] += (s[8] | s[1]); + s[11] *= (s[9] | 1u); + s[3] -= s[11]; + s[14] = mh_rotl(s[14], 13u) + s[3]; + s[0] ^= (s[14] & s[7]); + s[12] = mh_rotl(s[12], 8u) + s[0]; + s[3] ^= s[12]; + s[15] ^= s[3]; + s[4] ^= s[15]; + s[15] += (s[4] | s[11]); + s[13] = mh_rotl(s[13] ^ s[15], 24u); + s[2] *= (s[13] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] += s[14]; + s[12] += s[10]; + s[2] += s[12] + 0x1b504561u; + s[4] = mh_rotl(s[4] ^ s[2], 2u); + s[8] = (s[8] ^ s[4]) * 0x03df7a65u; + s[15] = mh_rotl(s[15], 14u) + s[8]; + s[0] = mh_rotl(s[0], 18u) + s[15]; + s[1] += s[0] + 0x5740a39eu; + s[8] -= s[1]; + s[5] = (s[5] ^ s[8]) * 0x0b606a43u; + s[9] = s[9] * 0x39176987u + s[5]; + s[0] = mh_rotl(s[0], 4u) + s[9]; + s[14] ^= s[0]; + s[11] -= s[14]; + s[3] += s[11] + 0x34787b81u; + s[15] += s[3] + 0xe41a04ecu; + s[13] = mh_rotl(s[13] ^ s[15], 15u); + s[7] ^= s[13]; + s[9] -= s[7]; + s[10] -= s[9]; + s[13] += s[10]; + s[4] += (s[13] | s[6]); + s[2] ^= s[4]; + s[1] ^= s[2]; + s[0] -= s[1]; + s[15] = (s[15] ^ s[0]) * 0x3fb47953u; + s[12] *= (s[15] | 1u); + s[15] ^= s[12]; + s[13] = mh_rotl(s[13], 31u) + s[15]; + s[12] = s[12] * 0xd1b75439u + s[13]; + s[4] -= s[12]; + s[7] += s[4]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[14] = mh_rotl(s[14] ^ s[1], 15u); + s[3] -= s[14]; + s[15] += s[3]; + s[5] = s[5] * 0xfa5689f1u + s[15]; + s[12] *= (s[5] | 1u); + s[2] = mh_rotl(s[2] ^ s[12], 16u); + s[0] = (s[0] ^ s[2]) * 0x2a1a8c35u; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x2a04efebu; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[9] -= s[15]; + s[13] ^= s[9] ^ 0xbd001784u; + s[9] += s[13] + 0xf302a942u; + s[14] += s[9] + 0x07f9571cu; + s[2] ^= s[14]; + s[11] ^= s[2]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[0] += s[7] + 0xb6e41d24u; + s[12] ^= s[0]; + s[0] ^= s[12]; + s[11] ^= s[0] ^ 0x24f0b3f7u; + s[0] ^= (s[11] & s[7]); + s[6] += s[0]; + s[13] -= s[6]; + s[12] ^= s[13]; + s[4] += s[12]; + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[14] = (s[14] ^ s[3]) * 0x21829883u; + s[2] -= s[14]; + s[3] ^= (s[2] & s[7]); + s[1] -= s[3]; + s[11] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[0] = (s[0] ^ s[13]) * 0xa91d4129u; + s[3] += s[0] + 0x5eb9b9e0u; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[7] = (s[7] ^ s[10]) * 0x52bae843u; + s[15] ^= s[7]; + s[3] ^= (s[15] & s[2]); + s[14] += s[3]; + s[9] -= s[14]; + s[7] += s[9]; + s[2] += s[7]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] *= (s[0] | 1u); + s[3] ^= s[6] ^ 0x1426b612u; + s[6] *= (s[3] | 1u); + s[1] -= s[6]; + s[15] += s[1]; + s[0] -= s[15]; + s[12] += s[0] + 0xf7b931c7u; + s[13] *= (s[12] | 1u); + s[12] = s[12] * 0xe57254dbu + s[13]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[8] += s[5] + 0x517e08fau; + s[15] = mh_rotl(s[15] ^ s[8], 24u); + s[4] -= s[15]; + s[7] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[5] = mh_rotl(s[5] ^ s[9], 31u); + s[15] = mh_rotl(s[15], 20u) + s[5]; + s[10] = (s[10] ^ s[15]) * 0x472cce51u; + s[0] = (s[0] ^ s[10]) * 0xc6aa4b0fu; + s[9] ^= s[0]; + s[5] ^= (s[9] & s[11]); + s[9] += s[5]; + s[15] = mh_rotl(s[15], 26u) + s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 15u); + s[7] += s[12]; + s[8] ^= s[7]; + s[4] = (s[4] ^ s[8]) * 0x1de62593u; + s[12] ^= s[4] ^ 0x4c29c7efu; + s[14] = s[14] * 0xe96a8dbdu + s[12]; + s[7] += s[14]; + s[4] = (s[4] ^ s[7]) * 0x2ceadb71u; + s[13] += s[4]; + s[10] += s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 5u); + s[0] = (s[0] ^ s[12]) * 0xb3050b81u; + s[7] += s[0]; + s[12] = mh_rotl(s[12] ^ s[7], 15u); + s[11] = (s[11] ^ s[12]) * 0xd1f5971bu; + s[13] += s[11]; + s[11] *= (s[13] | 1u); + s[10] += s[11] + 0x1c05c66fu; + s[15] ^= s[10]; + s[13] ^= s[15] ^ 0x8af80ca8u; + s[15] = mh_rotl(s[15] ^ s[13], 14u); + s[13] = (s[13] ^ s[15]) * 0x8b914137u; + s[11] -= s[13]; + s[13] ^= s[11]; + s[6] = (s[6] ^ s[13]) * 0x3c6fe121u; + s[12] = mh_rotl(s[12] ^ s[6], 13u); + s[14] = mh_rotl(s[14], 31u) + s[12]; + s[11] -= s[14]; + s[12] -= s[11]; + s[8] = (s[8] ^ s[12]) * 0x196763bdu; + s[10] *= (s[8] | 1u); + s[11] = mh_rotl(s[11] ^ s[10], 14u); + s[14] *= (s[11] | 1u); + s[11] *= (s[14] | 1u); + s[6] += s[11]; + s[8] = (s[8] ^ s[6]) * 0xbbef2ec7u; + s[11] = mh_rotl(s[11] ^ s[8], 14u); + s[14] += s[11]; + s[1] ^= s[14] ^ 0x3517261cu; + s[10] += s[1]; + s[11] -= s[10]; + s[1] = mh_rotl(s[1] ^ s[11], 23u); + s[4] *= (s[1] | 1u); + s[3] ^= s[4]; + s[14] -= s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 7u); + s[11] -= s[12]; + s[12] = (s[12] ^ s[11]) * 0x61ef90ddu; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[4] -= s[2]; + s[3] ^= s[4] ^ 0x38b5a46au; + s[14] = mh_rotl(s[14] ^ s[3], 8u); + s[8] += s[14]; + s[10] = mh_rotl(s[10], 12u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[2] ^= s[6] ^ 0x04a55416u; + s[7] ^= s[2] ^ 0xc6089802u; + s[14] += s[7] + 0x232acd3au; + s[6] += s[14]; + s[3] ^= s[6] ^ 0x0bdec934u; + s[13] *= (s[3] | 1u); + s[12] = s[12] * 0x082d66bdu + s[13]; + s[10] = (s[10] ^ s[12]) * 0xa5611c97u; + s[5] = mh_rotl(s[5] ^ s[10], 1u); + s[0] += s[5]; + s[10] = mh_rotl(s[10] ^ s[0], 25u); + s[9] = mh_rotl(s[9] ^ s[10], 1u); + s[11] += s[9]; + s[15] = (s[15] ^ s[11]) * 0x0c06e2b5u; + s[12] ^= s[15] ^ 0x7d7c42ceu; + s[15] += s[12]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[9] ^= (s[6] & s[4]); + s[7] -= s[9]; + s[15] = mh_rotl(s[15] ^ s[7], 31u); + s[4] += s[15]; + s[11] = (s[11] ^ s[4]) * 0xd7fef7d9u; + s[10] ^= s[11]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[7] -= s[9]; + s[3] = (s[3] ^ s[7]) * 0x0eafdd57u; + s[5] ^= s[3]; + s[8] -= s[5]; + s[5] ^= s[8]; + s[3] -= s[5]; + s[13] = mh_rotl(s[13], 16u) + s[3]; + s[14] += s[13]; + s[11] += s[14]; + s[0] += s[11] + 0xf2a1dc99u; + s[3] ^= (s[0] & s[10]); + s[10] = mh_rotl(s[10], 7u) + s[3]; + s[5] += s[10] + 0x6527734fu; + s[8] -= s[5]; + s[5] *= (s[8] | 1u); + s[2] += s[5]; + s[1] = mh_rotl(s[1], 31u) + s[2]; + s[11] = mh_rotl(s[11] ^ s[1], 1u); + s[15] ^= s[11]; + s[6] = (s[6] ^ s[15]) * 0x89e4da81u; + s[8] = mh_rotl(s[8], 7u) + s[6]; + s[1] = (s[1] ^ s[8]) * 0x27cd5aabu; + s[4] = (s[4] ^ s[1]) * 0xc9e84adbu; + s[3] = mh_rotl(s[3], 13u) + s[4]; + s[11] += s[3]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 21u); + s[14] += s[12]; + s[0] -= s[14]; + s[2] += s[0]; + s[3] -= s[2]; + s[10] -= s[3]; + s[11] *= (s[10] | 1u); + s[14] += s[11]; + s[6] += s[14]; + s[3] ^= s[6]; + s[13] = s[13] * 0xf5b82e19u + s[3]; + s[7] += s[13]; + s[3] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[3], 14u); + s[13] += s[10]; + s[9] ^= s[13] ^ 0x50029d51u; + s[8] ^= s[9]; + s[5] = s[5] * 0x84a8bab7u + s[8]; + s[14] = mh_rotl(s[14], 21u) + s[5]; + s[12] = mh_rotl(s[12] ^ s[14], 21u); + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 19u); + s[13] += s[9] + 0xf7535ff7u; + s[4] *= (s[13] | 1u); + s[12] *= (s[4] | 1u); + s[4] += s[12] + 0x56f3ba9au; + s[6] += s[4]; + s[0] ^= s[6] ^ 0x52b3d568u; + s[12] += (s[0] | s[11]); + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[4] = mh_rotl(s[4] ^ s[11], 7u); + s[3] += s[4] + 0xe0a370deu; + s[10] = mh_rotl(s[10] ^ s[3], 18u); + s[2] -= s[10]; + s[1] *= (s[2] | 1u); + s[11] += s[1] + 0x351f5bb2u; + s[0] += s[11]; + s[9] += s[0]; + s[8] = mh_rotl(s[8], 15u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[8], 18u); + s[11] = mh_rotl(s[11] ^ s[0], 8u); + s[3] += s[11]; + s[4] = mh_rotl(s[4], 1u) + s[3]; + s[13] -= s[4]; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_7(uint32_t* s) { + s[10] ^= s[0] ^ 0x91f55cc2u; + s[12] += s[10]; + s[9] ^= s[12]; + s[8] = mh_rotl(s[8] ^ s[9], 11u); + s[11] ^= s[8]; + s[13] = (s[13] ^ s[11]) * 0x8937936du; + s[12] = mh_rotl(s[12], 6u) + s[13]; + s[6] += s[12]; + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[10] += s[1]; + s[9] = mh_rotl(s[9], 5u) + s[10]; + s[12] -= s[9]; + s[10] = s[10] * 0xfb1e6803u + s[12]; + s[0] += (s[10] | s[11]); + s[15] += s[0]; + s[0] ^= s[15]; + s[13] *= (s[0] | 1u); + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[2] = s[2] * 0xc6ee6461u + s[7]; + s[3] += s[2]; + s[7] ^= s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 15u); + s[6] ^= s[4]; + s[10] += s[6]; + s[11] = mh_rotl(s[11], 4u) + s[10]; + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 30u) + s[2]; + s[7] -= s[5]; + s[4] ^= s[7]; + s[6] ^= s[4]; + s[5] -= s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 19u) + s[10]; + s[11] = mh_rotl(s[11], 13u) + s[8]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[8] ^= s[5]; + s[10] = mh_rotl(s[10], 31u) + s[8]; + s[2] += s[10] + 0x2533aeebu; + s[12] += s[2] + 0x8c44064eu; + s[6] = s[6] * 0x396ed079u + s[12]; + s[3] ^= s[6]; + s[7] += s[3] + 0x78c5d841u; + s[2] = mh_rotl(s[2], 19u) + s[7]; + s[5] ^= s[2] ^ 0xb10843eau; + s[3] *= (s[5] | 1u); + s[2] ^= s[3] ^ 0x978c6fe6u; + s[9] += s[2]; + s[3] = (s[3] ^ s[9]) * 0xbd141e6du; + s[5] ^= s[3] ^ 0xd07a1a68u; + s[11] ^= s[5]; + s[12] += (s[11] | s[0]); + s[3] += (s[12] | s[0]); + s[13] += (s[3] | s[4]); + s[3] ^= s[13]; + s[7] -= s[3]; + s[6] *= (s[7] | 1u); + s[7] = mh_rotl(s[7] ^ s[6], 1u); + s[9] = (s[9] ^ s[7]) * 0xbed8dbf7u; + s[3] ^= s[9]; + s[1] = (s[1] ^ s[3]) * 0xf57e26d7u; + s[2] = (s[2] ^ s[1]) * 0xdf9916ebu; + s[6] -= s[2]; + s[2] *= (s[6] | 1u); + s[13] += s[2] + 0x4b576832u; + s[7] ^= s[13]; + s[14] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[14] = (s[14] ^ s[0]) * 0xde82d2d3u; + s[7] += s[14]; + s[14] = s[14] * 0x1a9d2c23u + s[7]; + s[13] ^= s[14]; + s[14] *= (s[13] | 1u); + s[13] ^= (s[14] & s[10]); + s[6] = mh_rotl(s[6], 3u) + s[13]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[1] ^= s[0]; + s[13] -= s[1]; + s[1] ^= s[13]; + s[3] -= s[1]; + s[2] += s[3]; + s[11] = (s[11] ^ s[2]) * 0xd14f4873u; + s[0] += s[11] + 0xc62283fbu; + s[14] = mh_rotl(s[14], 31u) + s[0]; + s[0] *= (s[14] | 1u); + s[13] -= s[0]; + s[7] *= (s[13] | 1u); + s[15] ^= s[7]; + s[6] ^= s[15]; + s[8] = mh_rotl(s[8], 21u) + s[6]; + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[11] += (s[10] | s[13]); + s[14] += s[11]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[3] = s[3] * 0xabf8963bu + s[8]; + s[1] += s[3]; + s[6] = mh_rotl(s[6] ^ s[1], 8u); + s[7] = s[7] * 0x5391ec81u + s[6]; + s[3] *= (s[7] | 1u); + s[1] ^= s[3] ^ 0xb1e8a02eu; + s[4] += s[1] + 0xf73ade37u; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[4] ^= s[0]; + s[2] ^= s[4]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[10] -= s[9]; + s[4] ^= s[10]; + s[3] *= (s[4] | 1u); + s[0] -= s[3]; + s[8] ^= (s[0] & s[14]); + s[11] *= (s[8] | 1u); + s[10] ^= s[11]; + s[4] = mh_rotl(s[4] ^ s[10], 11u); + s[13] = mh_rotl(s[13], 2u) + s[4]; + s[0] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 21u) + s[0]; + s[13] ^= s[5]; + s[0] *= (s[13] | 1u); + s[14] ^= s[0]; + s[7] -= s[14]; + s[9] *= (s[7] | 1u); + s[14] ^= s[9]; + s[13] ^= s[14] ^ 0xcdfc1ed8u; + s[1] = mh_rotl(s[1] ^ s[13], 20u); + s[3] = mh_rotl(s[3] ^ s[1], 3u); + s[1] ^= s[3]; + s[0] *= (s[1] | 1u); + s[13] += (s[0] | s[9]); + s[14] = (s[14] ^ s[13]) * 0x788d03efu; + s[0] ^= s[14] ^ 0x996f3b0du; + s[13] -= s[0]; + s[10] = mh_rotl(s[10], 15u) + s[13]; + s[5] = mh_rotl(s[5] ^ s[10], 3u); + s[3] = mh_rotl(s[3] ^ s[5], 10u); + s[12] ^= s[3] ^ 0xd5618db8u; + s[14] -= s[12]; + s[1] += (s[14] | s[15]); + s[2] ^= s[1] ^ 0xbf5e3cd4u; + s[4] += s[2]; + s[14] ^= s[4] ^ 0xf8523123u; + s[12] = mh_rotl(s[12], 29u) + s[14]; + s[7] *= (s[12] | 1u); + s[12] *= (s[7] | 1u); + s[10] += s[12]; + s[14] = mh_rotl(s[14] ^ s[10], 20u); + s[7] ^= s[14] ^ 0x383fa4a6u; + s[12] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 1u) + s[12]; + s[1] *= (s[2] | 1u); + s[4] += s[1]; + s[11] = s[11] * 0xc6e2f7f7u + s[4]; + s[6] ^= (s[11] & s[15]); + s[3] = (s[3] ^ s[6]) * 0xa5f20621u; + s[14] += s[3]; + s[15] = s[15] * 0xff86c04du + s[14]; + s[14] += s[15]; + s[3] = mh_rotl(s[3], 27u) + s[14]; + s[13] ^= (s[3] & s[8]); + s[10] ^= s[13]; + s[6] = s[6] * 0xedced661u + s[10]; + s[12] = mh_rotl(s[12] ^ s[6], 22u); + s[4] ^= s[12] ^ 0x50fbdfefu; + s[9] += s[4] + 0xe37ea6aeu; + s[1] = mh_rotl(s[1] ^ s[9], 17u); + s[4] += s[1]; + s[3] += s[4] + 0xc95ad941u; + s[0] ^= s[3]; + s[6] = mh_rotl(s[6], 26u) + s[0]; + s[12] -= s[6]; + s[14] *= (s[12] | 1u); + s[12] += s[14]; + s[13] = s[13] * 0xdf0c5af7u + s[12]; + s[1] = mh_rotl(s[1], 4u) + s[13]; + s[15] = mh_rotl(s[15], 23u) + s[1]; + s[14] ^= s[15]; + s[0] *= (s[14] | 1u); + s[5] = mh_rotl(s[5] ^ s[0], 14u); + s[15] = mh_rotl(s[15] ^ s[5], 12u); + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[1] = s[1] * 0x1357e1d5u + s[9]; + s[2] += s[1]; + s[8] *= (s[2] | 1u); + s[0] ^= s[8]; + s[7] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[7], 10u); + s[13] = (s[13] ^ s[11]) * 0x9cd6fa4du; + s[11] += (s[13] | s[10]); + s[3] ^= s[11] ^ 0xf37724ddu; + s[5] += s[3]; + s[6] *= (s[5] | 1u); + s[14] += s[6]; + s[13] *= (s[14] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 1u); + s[13] ^= (s[4] & s[0]); + s[14] ^= (s[13] & s[0]); + s[0] += s[14]; + s[6] = mh_rotl(s[6] ^ s[0], 21u); + s[13] += s[6]; + s[6] += s[13]; + s[0] += s[6] + 0x1720d570u; + s[3] ^= s[0]; + s[13] += s[3] + 0xd71bcd1bu; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[9] += s[3]; + s[4] = mh_rotl(s[4] ^ s[9], 3u); + s[10] += s[4]; + s[15] -= s[10]; + s[11] *= (s[15] | 1u); + s[12] *= (s[11] | 1u); + s[8] += s[12]; + s[0] += s[8] + 0xa5d99dc7u; + s[14] ^= s[0]; + s[2] += (s[14] | s[10]); + s[8] = mh_rotl(s[8] ^ s[2], 8u); + s[15] += s[8] + 0xda39c6e1u; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[1], 8u); + s[4] ^= (s[7] & s[9]); + s[0] = mh_rotl(s[0], 13u) + s[4]; + s[10] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 20u) + s[10]; + s[11] ^= s[3]; + s[15] ^= s[11] ^ 0x0d7fc3f2u; + s[5] ^= (s[15] & s[3]); + s[8] += s[5]; + s[3] ^= s[8]; + s[9] += s[3]; + s[12] = mh_rotl(s[12] ^ s[9], 7u); + s[7] -= s[12]; + s[14] = (s[14] ^ s[7]) * 0xee2eaf6bu; + s[5] ^= s[14]; + s[6] = mh_rotl(s[6], 17u) + s[5]; + s[0] -= s[6]; + s[13] ^= s[0] ^ 0xc7600c18u; + s[8] ^= s[13]; + s[7] = (s[7] ^ s[8]) * 0x291da8cfu; + s[3] = (s[3] ^ s[7]) * 0x4c89c6a3u; + s[11] = mh_rotl(s[11], 18u) + s[3]; + s[10] += s[11]; + s[5] ^= s[10] ^ 0xc5dba408u; + s[3] ^= s[5]; + s[2] += s[3]; + s[14] ^= s[2]; + s[4] ^= s[14]; + s[9] += s[4]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[10] ^= s[15]; + s[7] += s[10]; + s[0] = mh_rotl(s[0], 23u) + s[7]; + s[2] += s[0]; + s[5] += s[2]; + s[11] = mh_rotl(s[11], 13u) + s[5]; + s[10] ^= (s[11] & s[9]); + s[5] += s[10] + 0xbbb408f7u; + s[14] ^= s[5]; + s[15] += s[14]; + s[5] = mh_rotl(s[5], 5u) + s[15]; + s[11] = s[11] * 0x112a6951u + s[5]; + s[7] = mh_rotl(s[7] ^ s[11], 31u); + s[5] += s[7]; + s[7] *= (s[5] | 1u); + s[12] = (s[12] ^ s[7]) * 0x0c54418fu; + s[5] += s[12]; + s[13] += s[5]; + s[7] = mh_rotl(s[7], 13u) + s[13]; + s[9] = mh_rotl(s[9], 22u) + s[7]; + s[8] = s[8] * 0x1b5f8089u + s[9]; + s[6] = s[6] * 0x8a305f3du + s[8]; + s[5] = (s[5] ^ s[6]) * 0x9e934355u; + s[13] ^= s[5] ^ 0x3262a24fu; + s[7] ^= (s[13] & s[5]); + s[2] ^= s[7]; + s[14] += (s[2] | s[7]); + s[11] += s[14]; + s[6] -= s[11]; + s[5] ^= s[6]; + s[6] = mh_rotl(s[6] ^ s[5], 24u); + s[8] ^= s[6] ^ 0x2110db43u; + s[4] += s[8] + 0x91e5ef8bu; + s[15] += s[4] + 0x039dc8acu; + s[2] *= (s[15] | 1u); + s[10] ^= s[2]; + s[4] += s[10] + 0x38936459u; + s[13] ^= s[4] ^ 0x8a7a8a06u; + s[0] = mh_rotl(s[0] ^ s[13], 24u); + s[13] = s[13] * 0xa7c0dc87u + s[0]; + s[2] += s[13]; + s[11] = mh_rotl(s[11], 25u) + s[2]; + s[6] -= s[11]; + s[1] *= (s[6] | 1u); + s[0] = mh_rotl(s[0], 21u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[0], 23u); + s[7] ^= s[11]; + s[2] += s[7]; + s[9] *= (s[2] | 1u); + s[11] = mh_rotl(s[11], 24u) + s[9]; + s[1] ^= (s[11] & s[3]); + s[0] = mh_rotl(s[0] ^ s[1], 13u); + s[12] -= s[0]; + s[6] ^= (s[12] & s[5]); + s[4] += s[6]; + s[13] ^= s[4]; + s[1] = mh_rotl(s[1], 26u) + s[13]; + s[11] = mh_rotl(s[11], 27u) + s[1]; + s[1] += s[11]; + s[14] ^= (s[1] & s[11]); + s[4] -= s[14]; + s[5] -= s[4]; + s[8] ^= s[5]; + s[2] ^= s[8]; + s[4] += s[2]; + s[14] = mh_rotl(s[14], 24u) + s[4]; + s[0] += s[14] + 0x6b4adcadu; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[10] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[10], 27u); + s[0] -= s[6]; + s[6] += s[0] + 0x5ac44880u; + s[8] ^= s[6]; + s[1] ^= s[8]; + s[0] *= (s[1] | 1u); + s[5] -= s[0]; + s[3] -= s[5]; + s[7] += s[3]; + s[0] *= (s[7] | 1u); + s[1] = (s[1] ^ s[0]) * 0xc26b3d23u; + s[13] += s[1]; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[7], 2u); + s[12] = (s[12] ^ s[3]) * 0x36078279u; + s[9] -= s[12]; + s[12] ^= s[9] ^ 0x6a60fb43u; + s[2] = mh_rotl(s[2], 15u) + s[12]; + s[7] ^= s[2]; + s[0] += s[7] + 0xe00e86a2u; + s[9] = mh_rotl(s[9] ^ s[0], 8u); + s[3] = mh_rotl(s[3], 28u) + s[9]; + s[8] += (s[3] | s[15]); + s[5] ^= s[8] ^ 0xe55fb8aeu; + s[4] ^= s[5]; + s[8] ^= s[4]; + s[6] *= (s[8] | 1u); + s[15] += s[6]; + s[1] = (s[1] ^ s[15]) * 0x21de53d1u; + s[13] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 14u); + s[4] ^= s[12] ^ 0xc98f0a34u; + s[6] *= (s[4] | 1u); + s[2] -= s[6]; + s[7] += s[2]; + s[3] ^= s[7]; + s[5] += s[3] + 0xa927519fu; + s[10] += s[5]; + s[13] ^= s[10] ^ 0xcb96c77bu; + s[4] *= (s[13] | 1u); + s[1] -= s[4]; + s[5] += s[1]; + s[15] = mh_rotl(s[15], 2u) + s[5]; + s[8] ^= s[15]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 24u); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[0] = (s[0] ^ s[15]) * 0x043e38c5u; + s[15] *= (s[0] | 1u); + s[11] ^= s[15]; + s[14] += s[11] + 0x53bbe6c0u; + s[0] *= (s[14] | 1u); + s[9] ^= s[0]; + s[6] *= (s[9] | 1u); + s[2] += (s[6] | s[1]); + s[13] += s[2]; + s[10] = mh_rotl(s[10] ^ s[13], 10u); + s[1] += s[10]; + s[15] = s[15] * 0x583e8481u + s[1]; + s[13] ^= s[15] ^ 0x2cc63257u; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3], 28u) + s[7]; + s[2] -= s[3]; + s[14] = mh_rotl(s[14], 11u) + s[2]; + s[1] += (s[14] | s[7]); + s[8] ^= s[1]; + s[11] = (s[11] ^ s[8]) * 0x0e28ad8fu; + s[3] = (s[3] ^ s[11]) * 0x298e4869u; + s[11] -= s[3]; + s[3] = (s[3] ^ s[11]) * 0x7d313b6bu; + s[11] = (s[11] ^ s[3]) * 0xeca4dbcbu; + s[2] -= s[11]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[11] += s[10] + 0xfceb9d18u; + s[12] += (s[11] | s[1]); + s[4] *= (s[12] | 1u); + s[5] ^= s[4]; + s[0] ^= (s[5] & s[6]); + s[12] ^= s[0]; + s[9] += s[12] + 0xb01e0678u; + s[2] -= s[9]; + s[15] += s[2]; + s[11] ^= s[15] ^ 0x53447cc1u; + s[14] += s[11] + 0xaf64abb5u; + s[9] ^= s[14] ^ 0xc2548a26u; + s[2] *= (s[9] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 5u); + s[13] *= (s[7] | 1u); + s[5] = (s[5] ^ s[13]) * 0x10dbc9ddu; + s[12] -= s[5]; + s[2] += s[12]; + s[15] -= s[2]; + s[4] = (s[4] ^ s[15]) * 0x3582fe41u; + s[7] = mh_rotl(s[7] ^ s[4], 28u); + s[13] = s[13] * 0x7fe12955u + s[7]; + s[12] = (s[12] ^ s[13]) * 0xd86d1b4bu; + s[10] += s[12] + 0xb0f59a52u; + s[0] *= (s[10] | 1u); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[8] ^= s[10]; + s[10] *= (s[8] | 1u); + s[5] += (s[10] | s[7]); + s[13] = mh_rotl(s[13] ^ s[5], 11u); + s[0] ^= (s[13] & s[11]); + s[6] += s[0]; + s[3] = mh_rotl(s[3], 8u) + s[6]; + s[13] ^= s[3] ^ 0x97eba12fu; + s[10] *= (s[13] | 1u); + s[1] += s[10]; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[11] ^= s[12]; + s[7] ^= s[11]; + s[1] *= (s[7] | 1u); + s[4] += s[1] + 0x3e58791au; + s[0] += (s[4] | s[1]); + s[10] ^= s[0]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[13] ^= s[15]; + s[7] ^= s[13] ^ 0x2741705du; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[15] += s[4] + 0xe6934fbbu; + s[3] -= s[15]; + s[11] = (s[11] ^ s[3]) * 0x1f6fe0a9u; + s[15] ^= s[11]; + s[0] = (s[0] ^ s[15]) * 0x1ef7dac7u; + s[14] += s[0] + 0x85ea7167u; + s[8] += s[14]; + s[2] = (s[2] ^ s[8]) * 0xbd1c80ddu; + s[7] += s[2]; + s[4] ^= s[7]; + s[11] = mh_rotl(s[11], 28u) + s[4]; + s[9] = (s[9] ^ s[11]) * 0xf99784f9u; + s[5] = mh_rotl(s[5] ^ s[9], 28u); + s[6] += s[5]; + s[10] = mh_rotl(s[10] ^ s[6], 30u); + s[15] *= (s[10] | 1u); + s[11] ^= s[15]; + s[10] ^= s[11] ^ 0xe63d1f0fu; + s[0] ^= (s[10] & s[15]); + s[14] = (s[14] ^ s[0]) * 0xdd771591u; + s[6] = mh_rotl(s[6] ^ s[14], 25u); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0x1aef487du; + s[2] += s[6] + 0x4803fbdfu; + s[9] ^= s[2]; + s[12] ^= (s[9] & s[13]); + s[15] ^= (s[12] & s[10]); + s[12] *= (s[15] | 1u); + s[14] ^= s[12]; + s[11] = (s[11] ^ s[14]) * 0xcdae3347u; + s[2] = mh_rotl(s[2] ^ s[11], 25u); + s[9] ^= s[2] ^ 0xd54df97bu; + s[0] *= (s[9] | 1u); + s[9] ^= s[0] ^ 0x36482476u; + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[11] = mh_rotl(s[11] ^ s[9], 19u); + s[15] ^= (s[11] & s[4]); + s[14] ^= s[15]; + s[1] += s[14]; + s[11] = mh_rotl(s[11], 20u) + s[1]; + s[9] += s[11] + 0x08509d57u; + s[15] *= (s[9] | 1u); + s[9] -= s[15]; + s[14] = (s[14] ^ s[9]) * 0x9757fd53u; + s[13] ^= (s[14] & s[5]); + s[6] += s[13]; + s[15] = (s[15] ^ s[6]) * 0x3e6be04bu; + s[12] *= (s[15] | 1u); + s[2] = mh_rotl(s[2], 25u) + s[12]; + s[13] -= s[2]; + s[8] ^= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 31u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[1] = mh_rotl(s[1], 20u) + s[10]; + s[7] += s[1] + 0x9218a857u; + s[0] += s[7]; + s[11] ^= s[0]; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[10] = mh_rotl(s[10] ^ s[15], 1u); + s[3] ^= s[10] ^ 0x60be6fe9u; + s[4] = (s[4] ^ s[3]) * 0x4177a7a7u; + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[11] += s[7] + 0x85521284u; + s[4] = (s[4] ^ s[11]) * 0x95e55935u; + s[3] += s[4]; + s[15] += s[3]; + s[5] += s[15] + 0x7518eed4u; + s[9] ^= s[5] ^ 0x087e9a42u; + s[10] *= (s[9] | 1u); + s[8] -= s[10]; + s[5] ^= s[8] ^ 0xf3fb3909u; + s[14] ^= (s[5] & s[8]); + s[10] += s[14] + 0x7a9e6e04u; + s[0] += (s[10] | s[2]); + s[6] = (s[6] ^ s[0]) * 0xe355b5f1u; + s[5] = s[5] * 0xe711e2fdu + s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 3u) + s[10]; + s[13] ^= s[8]; + s[11] ^= s[13]; + s[9] -= s[11]; + s[12] ^= s[9] ^ 0xc8862d11u; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15], 23u) + s[4]; + s[9] ^= s[15] ^ 0x413dfad3u; + s[11] *= (s[9] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 31u); + s[5] ^= s[1] ^ 0xe7b946b4u; + s[15] -= s[5]; + s[2] *= (s[15] | 1u); + s[5] *= (s[2] | 1u); + s[4] -= s[5]; + s[9] += (s[4] | s[13]); + s[0] ^= s[9] ^ 0x7854824fu; + s[3] = (s[3] ^ s[0]) * 0x442b482du; + s[11] = mh_rotl(s[11], 2u) + s[3]; + s[6] += (s[11] | s[13]); + s[7] += (s[6] | s[9]); + s[0] *= (s[7] | 1u); + s[4] += s[0]; + s[14] ^= (s[4] & s[7]); + s[10] += (s[14] | s[3]); + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[4] *= (s[10] | 1u); + s[14] += s[4]; + s[6] -= s[14]; + s[15] ^= s[6]; + s[6] *= (s[15] | 1u); + s[10] ^= s[6]; + s[6] ^= s[10]; + s[8] ^= (s[6] & s[0]); + s[5] ^= s[8]; + s[10] ^= s[5]; + s[7] = mh_rotl(s[7], 28u) + s[10]; + s[1] += s[7] + 0xe4c19693u; + s[0] = mh_rotl(s[0], 15u) + s[1]; + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[1] = mh_rotl(s[1], 19u) + s[2]; + s[6] += s[1] + 0x87218495u; + s[7] = mh_rotl(s[7], 15u) + s[6]; + s[6] += (s[7] | s[5]); + s[10] = mh_rotl(s[10], 7u) + s[6]; + s[2] *= (s[10] | 1u); + s[0] = mh_rotl(s[0], 27u) + s[2]; + s[10] ^= s[0]; + s[15] = (s[15] ^ s[10]) * 0x5787be43u; + s[2] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[2], 14u); + s[6] += s[0]; + s[5] += s[6]; + s[15] += s[5]; + s[1] = mh_rotl(s[1], 4u) + s[15]; + s[10] += s[1]; + s[7] = (s[7] ^ s[10]) * 0x5b66a27du; + s[11] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[10] *= (s[7] | 1u); + s[2] = mh_rotl(s[2] ^ s[10], 12u); + s[14] ^= s[2]; + s[7] *= (s[14] | 1u); + s[10] += s[7] + 0x51e1605bu; + s[11] += s[10] + 0x07a5770bu; + s[12] = mh_rotl(s[12], 25u) + s[11]; + s[13] += s[12] + 0x173cbaedu; + s[14] -= s[13]; + s[8] *= (s[14] | 1u); + s[6] = (s[6] ^ s[8]) * 0x198bf8abu; + s[13] += s[6]; + s[4] = (s[4] ^ s[13]) * 0x4a858065u; + s[8] += s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[12] += s[15] + 0x41cd5528u; + s[15] = mh_rotl(s[15], 1u) + s[12]; + s[12] = (s[12] ^ s[15]) * 0xf11bd25du; + s[1] = mh_rotl(s[1], 23u) + s[12]; + s[9] = mh_rotl(s[9] ^ s[1], 12u); + s[13] = (s[13] ^ s[9]) * 0x63f2bd71u; + s[4] += s[13] + 0x941778a1u; + s[11] = s[11] * 0x8d0fa58du + s[4]; + s[6] = mh_rotl(s[6] ^ s[11], 2u); + s[12] += s[6] + 0x1548d255u; + s[1] += s[12] + 0x2e20325eu; + s[7] ^= s[1] ^ 0x352c2791u; + s[12] ^= s[7]; + s[0] = (s[0] ^ s[12]) * 0xc3e7b99bu; + s[7] ^= s[0]; + s[1] ^= s[7]; + s[15] = mh_rotl(s[15] ^ s[1], 23u); + s[14] ^= s[15]; + s[11] = mh_rotl(s[11] ^ s[14], 31u); + s[10] += s[11]; + s[7] = (s[7] ^ s[10]) * 0x7c1fbac9u; + s[6] = (s[6] ^ s[7]) * 0x0b46f65bu; + s[10] ^= s[6]; + s[6] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[14], 21u); + s[7] -= s[10]; + s[2] += s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 29u); + s[15] = mh_rotl(s[15] ^ s[4], 29u); + s[1] *= (s[15] | 1u); + s[8] = mh_rotl(s[8], 3u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[8], 12u); + s[14] = s[14] * 0x945fd715u + s[15]; + s[6] = (s[6] ^ s[14]) * 0xf9a3efb3u; + s[8] ^= s[6]; + s[11] -= s[8]; + s[9] *= (s[11] | 1u); + s[8] ^= s[9]; + s[11] += s[8]; + s[7] += s[11] + 0xe0e87381u; + s[9] ^= s[7]; + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] = mh_rotl(s[11] ^ s[5], 26u); + s[12] *= (s[11] | 1u); + s[4] -= s[12]; + s[10] -= s[4]; + s[0] -= s[10]; + s[6] ^= s[0]; + s[8] = s[8] * 0x92e1e5f7u + s[6]; + s[1] += (s[8] | s[3]); + s[10] = (s[10] ^ s[1]) * 0x1eb329d3u; + s[0] = mh_rotl(s[0], 29u) + s[10]; + s[9] = mh_rotl(s[9], 6u) + s[0]; + s[3] += s[9] + 0x1bcf547cu; + s[9] -= s[3]; + s[14] += s[9]; + s[5] = mh_rotl(s[5] ^ s[14], 22u); + s[15] = s[15] * 0x3675a9adu + s[5]; + s[7] *= (s[15] | 1u); + s[4] += s[7] + 0x641005b4u; + s[1] += s[4] + 0x6a3b3afbu; + s[11] += s[1]; + s[9] ^= s[11] ^ 0x30def5feu; + s[6] ^= (s[9] & s[8]); + s[11] = mh_rotl(s[11], 28u) + s[6]; + s[6] += s[11]; + s[12] = (s[12] ^ s[6]) * 0x4d6dc8b3u; + s[7] -= s[12]; + s[9] ^= s[7]; + s[0] *= (s[9] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xb420685cu; + s[1] ^= (s[7] & s[12]); + s[12] += (s[1] | s[9]); + s[14] ^= s[12] ^ 0x076d63f7u; + s[1] *= (s[14] | 1u); + s[5] = s[5] * 0x2026ae47u + s[1]; + s[15] = mh_rotl(s[15], 23u) + s[5]; + s[9] += s[15]; + s[1] ^= s[9]; + s[4] = (s[4] ^ s[1]) * 0x8e6cffbfu; + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[14] ^= s[3]; + s[6] -= s[14]; + s[15] = (s[15] ^ s[6]) * 0xf52e633du; + s[14] *= (s[15] | 1u); + s[4] -= s[14]; + s[0] ^= s[4]; + s[1] = (s[1] ^ s[0]) * 0xd9650db9u; + s[13] = mh_rotl(s[13], 27u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[13], 22u); + s[12] += s[15]; + s[1] -= s[12]; + s[2] = s[2] * 0xd1740ecbu + s[1]; + s[11] *= (s[2] | 1u); + s[0] *= (s[11] | 1u); + s[4] -= s[0]; + s[11] ^= s[4] ^ 0x6823955fu; + s[3] ^= s[11]; + s[13] *= (s[3] | 1u); + s[3] = mh_rotl(s[3] ^ s[13], 8u); + s[8] = (s[8] ^ s[3]) * 0x615f5e9du; + s[0] -= s[8]; + s[3] ^= s[0]; + s[1] ^= s[3] ^ 0xb1dc5436u; + s[9] *= (s[1] | 1u); + s[13] += s[9]; + s[3] = s[3] * 0xfe0cf937u + s[13]; + s[8] *= (s[3] | 1u); + s[4] += s[8]; + s[3] += s[4] + 0x4f38c2ccu; + s[12] += s[3] + 0x3b3cb536u; + s[1] -= s[12]; + s[6] *= (s[1] | 1u); + s[8] = (s[8] ^ s[6]) * 0x89b78741u; + s[5] += s[8]; + s[1] += s[5] + 0x37d58859u; + s[7] = (s[7] ^ s[1]) * 0x4d7d11c3u; + s[4] ^= (s[7] & s[11]); + s[6] ^= s[4] ^ 0xe3a88b56u; + s[13] = mh_rotl(s[13], 20u) + s[6]; + s[10] *= (s[13] | 1u); + s[14] += s[10]; + s[8] += (s[14] | s[6]); + s[11] += s[8] + 0xca45662du; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[5] *= (s[14] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[8] -= s[14]; + s[13] ^= s[8]; + s[6] -= s[13]; + s[14] += (s[6] | s[4]); + s[0] -= s[14]; + s[6] += s[0] + 0x19712582u; + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[3] *= (s[15] | 1u); + s[5] -= s[3]; + s[8] = mh_rotl(s[8] ^ s[5], 17u); +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_8(uint32_t* s) { + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[12] = mh_rotl(s[12], 17u) + s[2]; + s[13] *= (s[12] | 1u); + s[11] *= (s[13] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 17u); + s[10] -= s[1]; + s[2] += s[10]; + s[11] = (s[11] ^ s[2]) * 0xea1e243du; + s[10] ^= s[11] ^ 0x2e9ac4cbu; + s[5] -= s[10]; + s[1] = mh_rotl(s[1], 20u) + s[5]; + s[6] ^= (s[1] & s[9]); + s[11] += s[6]; + s[13] *= (s[11] | 1u); + s[15] *= (s[13] | 1u); + s[3] ^= (s[15] & s[2]); + s[8] -= s[3]; + s[5] += s[8] + 0x40407046u; + s[3] *= (s[5] | 1u); + s[12] *= (s[3] | 1u); + s[14] ^= s[12] ^ 0x972141aeu; + s[4] -= s[14]; + s[1] *= (s[4] | 1u); + s[15] -= s[1]; + s[0] = s[0] * 0x6b61ba2bu + s[15]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[0] = s[0] * 0xbebc2e0du + s[13]; + s[11] += s[0] + 0x2c68ac9eu; + s[3] += (s[11] | s[10]); + s[15] = s[15] * 0xd6e907b5u + s[3]; + s[1] += s[15]; + s[12] += s[1]; + s[10] += s[12]; + s[2] += s[10]; + s[1] ^= s[2]; + s[0] *= (s[1] | 1u); + s[13] ^= s[0]; + s[6] *= (s[13] | 1u); + s[0] = (s[0] ^ s[6]) * 0xa1b16ef7u; + s[8] += (s[0] | s[11]); + s[0] = mh_rotl(s[0] ^ s[8], 24u); + s[9] -= s[0]; + s[13] = (s[13] ^ s[9]) * 0x8cb2b469u; + s[10] = mh_rotl(s[10] ^ s[13], 20u); + s[13] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[13], 23u); + s[1] = (s[1] ^ s[11]) * 0x0cac0de1u; + s[7] = mh_rotl(s[7], 17u) + s[1]; + s[10] = (s[10] ^ s[7]) * 0xb33ec0ebu; + s[12] += s[10]; + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[8] ^= s[11]; + s[4] = s[4] * 0x0fdcff95u + s[8]; + s[13] ^= (s[4] & s[12]); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[12] = (s[12] ^ s[6]) * 0x526264efu; + s[4] -= s[12]; + s[7] = (s[7] ^ s[4]) * 0x4afe3457u; + s[12] = s[12] * 0x4728f4cbu + s[7]; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[8] += s[15]; + s[5] -= s[8]; + s[3] += (s[5] | s[12]); + s[15] += s[3]; + s[13] = mh_rotl(s[13] ^ s[15], 13u); + s[0] ^= (s[13] & s[11]); + s[4] ^= s[0]; + s[14] += s[4]; + s[8] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[8], 17u); + s[1] += s[0]; + s[8] = (s[8] ^ s[1]) * 0xff70caf9u; + s[2] ^= s[8] ^ 0x0ff2bb06u; + s[1] *= (s[2] | 1u); + s[12] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[12], 12u); + s[13] += s[14]; + s[11] = mh_rotl(s[11], 15u) + s[13]; + s[3] = (s[3] ^ s[11]) * 0xa18acb9fu; + s[1] ^= s[3] ^ 0x4af36d07u; + s[2] += s[1] + 0x2ee01525u; + s[5] ^= s[2]; + s[3] += s[5] + 0x96db46ecu; + s[12] ^= (s[3] & s[14]); + s[13] ^= s[12] ^ 0x8a4b65c5u; + s[7] ^= s[13]; + s[5] += s[7]; + s[0] += s[5]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[7] = (s[7] ^ s[3]) * 0x0daf64efu; + s[9] = (s[9] ^ s[7]) * 0x2f262a6du; + s[1] ^= s[9]; + s[12] -= s[1]; + s[2] += s[12]; + s[12] ^= (s[2] & s[15]); + s[10] ^= (s[12] & s[15]); + s[14] ^= s[10]; + s[1] = mh_rotl(s[1], 26u) + s[14]; + s[9] += s[1]; + s[8] ^= s[9]; + s[15] ^= s[8] ^ 0x69952578u; + s[0] ^= s[15] ^ 0x45e70bd6u; + s[8] -= s[0]; + s[14] = s[14] * 0x39098d3bu + s[8]; + s[6] *= (s[14] | 1u); + s[12] ^= s[6] ^ 0xd07ef179u; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 2u); + s[6] += s[15]; + s[9] ^= (s[6] & s[1]); + s[5] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[5], 22u); + s[9] *= (s[11] | 1u); + s[6] = s[6] * 0x36ed5b21u + s[9]; + s[9] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[9], 4u); + s[1] -= s[13]; + s[4] *= (s[1] | 1u); + s[3] ^= (s[4] & s[5]); + s[2] = s[2] * 0x38309bf7u + s[3]; + s[1] += (s[2] | s[11]); + s[9] = (s[9] ^ s[1]) * 0xc0be3739u; + s[15] ^= s[9] ^ 0x07de5788u; + s[11] = s[11] * 0xd8c6366du + s[15]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[15] = mh_rotl(s[15] ^ s[0], 5u); + s[3] += s[15]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[15] *= (s[11] | 1u); + s[1] = s[1] * 0x0246d699u + s[15]; + s[10] *= (s[1] | 1u); + s[12] += s[10]; + s[10] += s[12]; + s[7] += (s[10] | s[9]); + s[9] ^= s[7]; + s[3] ^= s[9]; + s[14] += (s[3] | s[0]); + s[1] = mh_rotl(s[1] ^ s[14], 17u); + s[11] ^= s[1]; + s[3] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[3] *= (s[10] | 1u); + s[2] ^= s[3]; + s[9] = (s[9] ^ s[2]) * 0xefdd0db1u; + s[12] += (s[9] | s[5]); + s[5] = mh_rotl(s[5] ^ s[12], 6u); + s[11] = (s[11] ^ s[5]) * 0xc9b9d1dfu; + s[1] ^= s[11]; + s[5] ^= s[1]; + s[7] ^= s[5]; + s[10] ^= (s[7] & s[11]); + s[7] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[7], 25u); + s[10] ^= s[15]; + s[9] += s[10] + 0xf87f58f8u; + s[0] = mh_rotl(s[0], 15u) + s[9]; + s[9] += s[0]; + s[1] += (s[9] | s[7]); + s[14] += s[1] + 0x676d23d7u; + s[0] += (s[14] | s[6]); + s[8] = mh_rotl(s[8], 15u) + s[0]; + s[14] *= (s[8] | 1u); + s[8] ^= (s[14] & s[6]); + s[4] += s[8]; + s[2] = (s[2] ^ s[4]) * 0xe1a03111u; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[15] ^= s[0]; + s[8] ^= s[15] ^ 0xad7880f9u; + s[4] = mh_rotl(s[4], 11u) + s[8]; + s[11] -= s[4]; + s[6] += s[11]; + s[9] *= (s[6] | 1u); + s[0] ^= s[9]; + s[15] = mh_rotl(s[15] ^ s[0], 11u); + s[2] = (s[2] ^ s[15]) * 0x03f5accbu; + s[12] = mh_rotl(s[12], 11u) + s[2]; + s[9] ^= s[12]; + s[14] *= (s[9] | 1u); + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x9cf27933u; + s[15] = mh_rotl(s[15], 27u) + s[8]; + s[7] ^= (s[15] & s[8]); + s[5] += s[7]; + s[9] = (s[9] ^ s[5]) * 0xe294856fu; + s[1] ^= s[9]; + s[11] ^= s[1]; + s[15] = (s[15] ^ s[11]) * 0x4555f2d5u; + s[7] = mh_rotl(s[7] ^ s[15], 31u); + s[13] += s[7]; + s[10] ^= s[13]; + s[2] = (s[2] ^ s[10]) * 0x75193e43u; + s[9] -= s[2]; + s[3] = s[3] * 0x8c57e72du + s[9]; + s[2] = mh_rotl(s[2], 21u) + s[3]; + s[4] = (s[4] ^ s[2]) * 0x55a02867u; + s[1] -= s[4]; + s[9] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[9], 8u); + s[14] ^= s[2]; + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[14] *= (s[0] | 1u); + s[6] = mh_rotl(s[6], 18u) + s[14]; + s[10] -= s[6]; + s[8] ^= s[10]; + s[9] += s[8]; + s[4] ^= s[9]; + s[7] = (s[7] ^ s[4]) * 0x49afec39u; + s[14] += (s[7] | s[1]); + s[6] = mh_rotl(s[6] ^ s[14], 20u); + s[3] = mh_rotl(s[3] ^ s[6], 28u); + s[10] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 16u) + s[10]; + s[8] += s[7]; + s[11] = s[11] * 0x47f9228bu + s[8]; + s[6] ^= (s[11] & s[14]); + s[14] ^= (s[6] & s[13]); + s[15] = mh_rotl(s[15] ^ s[14], 30u); + s[13] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[13], 19u); + s[7] += s[8]; + s[6] -= s[7]; + s[1] = s[1] * 0x89a3aa17u + s[6]; + s[10] -= s[1]; + s[13] ^= s[10]; + s[14] *= (s[13] | 1u); + s[15] += s[14]; + s[4] ^= s[15]; + s[1] = mh_rotl(s[1], 27u) + s[4]; + s[0] += s[1]; + s[7] = mh_rotl(s[7], 30u) + s[0]; + s[10] ^= s[7]; + s[14] += s[10]; + s[3] += s[14]; + s[12] ^= s[3] ^ 0x3d91f806u; + s[0] -= s[12]; + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 7u) + s[12]; + s[14] ^= s[4]; + s[6] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 23u) + s[6]; + s[15] -= s[10]; + s[6] -= s[15]; + s[8] = mh_rotl(s[8] ^ s[6], 2u); + s[3] = mh_rotl(s[3], 2u) + s[8]; + s[4] += (s[3] | s[10]); + s[1] = (s[1] ^ s[4]) * 0x5b3cd913u; + s[11] = mh_rotl(s[11] ^ s[1], 2u); + s[0] = (s[0] ^ s[11]) * 0x3c693ccbu; + s[15] += s[0]; + s[10] ^= s[15] ^ 0x5a83618eu; + s[3] *= (s[10] | 1u); + s[11] = s[11] * 0x8cff3953u + s[3]; + s[15] -= s[11]; + s[10] = mh_rotl(s[10], 29u) + s[15]; + s[11] += s[10] + 0xef64efa3u; + s[0] = mh_rotl(s[0], 24u) + s[11]; + s[11] = mh_rotl(s[11] ^ s[0], 20u); + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[6] ^= s[0]; + s[4] -= s[6]; + s[15] += s[4]; + s[5] = mh_rotl(s[5], 20u) + s[15]; + s[9] ^= s[5]; + s[0] += s[9]; + s[7] += s[0]; + s[1] = s[1] * 0x0b7f59b3u + s[7]; + s[4] += s[1] + 0x145ca745u; + s[3] = (s[3] ^ s[4]) * 0x45e8e60bu; + s[0] += s[3]; + s[14] = (s[14] ^ s[0]) * 0x89fefe0bu; + s[5] ^= s[14]; + s[0] ^= s[5]; + s[10] *= (s[0] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 26u); + s[4] = mh_rotl(s[4], 29u) + s[13]; + s[15] = mh_rotl(s[15], 13u) + s[4]; + s[3] = mh_rotl(s[3], 16u) + s[15]; + s[9] -= s[3]; + s[12] ^= s[9] ^ 0x95781226u; + s[13] ^= s[12]; + s[10] = mh_rotl(s[10], 28u) + s[13]; + s[5] += s[10]; + s[12] *= (s[5] | 1u); + s[14] += s[12] + 0x01116f8fu; + s[13] = mh_rotl(s[13] ^ s[14], 26u); + s[10] += s[13] + 0x23aea8a9u; + s[8] += (s[10] | s[12]); + s[13] ^= (s[8] & s[0]); + s[1] += s[13]; + s[6] ^= s[1]; + s[4] ^= (s[6] & s[7]); + s[11] += s[4]; + s[4] *= (s[11] | 1u); + s[7] ^= (s[4] & s[3]); + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[0] -= s[6]; + s[12] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 19u) + s[12]; + s[2] = mh_rotl(s[2] ^ s[4], 8u); + s[10] += s[2]; + s[11] = mh_rotl(s[11], 25u) + s[10]; + s[1] ^= s[11]; + s[12] = (s[12] ^ s[1]) * 0x6229cc97u; + s[14] *= (s[12] | 1u); + s[4] -= s[14]; + s[13] ^= (s[4] & s[1]); + s[1] -= s[13]; + s[12] += s[1]; + s[7] += s[12] + 0x88900fdcu; + s[6] *= (s[7] | 1u); + s[15] = s[15] * 0x84135b45u + s[6]; + s[8] ^= s[15]; + s[15] += s[8]; + s[5] ^= s[15]; + s[8] ^= s[5]; + s[11] -= s[8]; + s[3] = s[3] * 0x2e47fa49u + s[11]; + s[12] = mh_rotl(s[12] ^ s[3], 10u); + s[8] -= s[12]; + s[13] = mh_rotl(s[13], 15u) + s[8]; + s[9] = mh_rotl(s[9], 23u) + s[13]; + s[0] += (s[9] | s[11]); + s[12] = (s[12] ^ s[0]) * 0x733a341du; + s[13] -= s[12]; + s[4] *= (s[13] | 1u); + s[7] += s[4]; + s[1] += s[7]; + s[15] = mh_rotl(s[15], 2u) + s[1]; + s[3] ^= s[15]; + s[15] -= s[3]; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[12] ^= (s[1] & s[0]); + s[11] ^= (s[12] & s[13]); + s[14] -= s[11]; + s[11] = (s[11] ^ s[14]) * 0xedf296edu; + s[12] ^= (s[11] & s[14]); + s[11] = mh_rotl(s[11], 1u) + s[12]; + s[5] *= (s[11] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[7] ^= s[14] ^ 0x4af9834bu; + s[10] ^= s[7]; + s[9] ^= (s[10] & s[2]); + s[13] ^= s[9]; + s[14] ^= (s[13] & s[7]); + s[10] += s[14]; + s[12] ^= s[10]; + s[13] -= s[12]; + s[1] ^= (s[13] & s[14]); + s[12] = (s[12] ^ s[1]) * 0xf8f0e297u; + s[5] *= (s[12] | 1u); + s[15] ^= (s[5] & s[7]); + s[11] = mh_rotl(s[11], 27u) + s[15]; + s[9] = (s[9] ^ s[11]) * 0xbefccb87u; + s[15] += s[9] + 0x17cb62ddu; + s[0] ^= s[15]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[7] += s[3]; + s[10] ^= s[7]; + s[9] *= (s[10] | 1u); + s[12] += (s[9] | s[14]); + s[3] = mh_rotl(s[3] ^ s[12], 25u); + s[10] += s[3]; + s[9] = mh_rotl(s[9], 3u) + s[10]; + s[6] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[6], 21u); + s[3] = s[3] * 0x65a97173u + s[14]; + s[5] = mh_rotl(s[5] ^ s[3], 6u); + s[7] = mh_rotl(s[7], 24u) + s[5]; + s[15] += s[7]; + s[13] += s[15]; + s[0] *= (s[13] | 1u); + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[15] *= (s[3] | 1u); + s[6] ^= (s[15] & s[12]); + s[2] ^= s[6]; + s[8] ^= s[2]; + s[1] = s[1] * 0x6e553265u + s[8]; + s[12] += s[1] + 0x0da30db5u; + s[7] ^= s[12]; + s[1] ^= s[7]; + s[3] ^= s[1]; + s[4] += s[3]; + s[15] ^= s[4]; + s[3] += s[15]; + s[2] *= (s[3] | 1u); + s[7] += s[2]; + s[0] = (s[0] ^ s[7]) * 0x97f0fd93u; + s[14] = mh_rotl(s[14] ^ s[0], 27u); + s[13] = (s[13] ^ s[14]) * 0xb04f1b3fu; + s[9] -= s[13]; + s[3] += s[9]; + s[4] -= s[3]; + s[8] ^= s[4]; + s[9] ^= s[8]; + s[4] += s[9]; + s[9] = s[9] * 0x5b96b23bu + s[4]; + s[1] += s[9]; + s[8] += s[1]; + s[14] += s[8]; + s[5] = mh_rotl(s[5] ^ s[14], 12u); + s[8] = (s[8] ^ s[5]) * 0x6395a44fu; + s[12] ^= s[8] ^ 0x1623eb44u; + s[14] = (s[14] ^ s[12]) * 0xed649ca9u; + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[12] *= (s[11] | 1u); + s[15] = mh_rotl(s[15] ^ s[12], 23u); + s[3] += s[15]; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x29ccc511u; + s[4] += s[8]; + s[14] = (s[14] ^ s[4]) * 0xa94e09cbu; + s[7] = (s[7] ^ s[14]) * 0x2353916bu; + s[1] ^= (s[7] & s[9]); + s[8] = (s[8] ^ s[1]) * 0x3189b2c5u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[7] = (s[7] ^ s[10]) * 0x8fbc5699u; + s[12] ^= s[7] ^ 0x02fcc6f5u; + s[6] += s[12]; + s[4] += s[6]; + s[15] ^= s[4] ^ 0x37cf53dcu; + s[9] *= (s[15] | 1u); + s[14] -= s[9]; + s[7] -= s[14]; + s[3] = mh_rotl(s[3], 15u) + s[7]; + s[0] ^= s[3]; + s[7] = mh_rotl(s[7], 7u) + s[0]; + s[14] = mh_rotl(s[14], 14u) + s[7]; + s[12] += s[14]; + s[10] = (s[10] ^ s[12]) * 0xb35348fbu; + s[5] = mh_rotl(s[5] ^ s[10], 17u); + s[14] ^= s[5] ^ 0x43820636u; + s[13] += s[14]; + s[3] = (s[3] ^ s[13]) * 0xaeaf3829u; + s[1] *= (s[3] | 1u); + s[2] += s[1]; + s[13] = mh_rotl(s[13], 9u) + s[2]; + s[3] = mh_rotl(s[3] ^ s[13], 26u); + s[2] = mh_rotl(s[2], 17u) + s[3]; + s[5] = mh_rotl(s[5] ^ s[2], 26u); + s[9] += s[5]; + s[3] = (s[3] ^ s[9]) * 0xc027efe3u; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x33c90921u; + s[2] -= s[8]; + s[4] ^= (s[2] & s[15]); + s[9] *= (s[4] | 1u); + s[2] += s[9]; + s[13] += (s[2] | s[6]); + s[4] = (s[4] ^ s[13]) * 0xde5f056fu; + s[3] ^= s[4]; + s[0] *= (s[3] | 1u); + s[14] *= (s[0] | 1u); + s[11] += s[14]; + s[2] ^= (s[11] & s[6]); + s[1] *= (s[2] | 1u); + s[12] += s[1] + 0x027965c8u; + s[14] *= (s[12] | 1u); + s[15] -= s[14]; + s[6] += s[15] + 0x3f2ed460u; + s[14] ^= s[6]; + s[9] ^= s[14]; + s[14] ^= s[9]; + s[8] -= s[14]; + s[9] = s[9] * 0x37363dc7u + s[8]; + s[2] ^= s[9]; + s[9] += s[2] + 0x36d721cdu; + s[2] ^= s[9] ^ 0x6a3aa7cbu; + s[13] = mh_rotl(s[13] ^ s[2], 4u); + s[1] ^= s[13]; + s[11] ^= s[1]; + s[10] ^= (s[11] & s[3]); + s[1] += s[10]; + s[13] ^= (s[1] & s[0]); + s[5] += s[13]; + s[0] += s[5]; + s[1] += s[0] + 0x29e429d0u; + s[7] *= (s[1] | 1u); + s[1] += s[7]; + s[13] = (s[13] ^ s[1]) * 0xebce972fu; + s[14] ^= s[13] ^ 0x1155a47fu; + s[2] += s[14]; + s[5] += (s[2] | s[3]); + s[1] += s[5] + 0x6ee2efc2u; + s[6] *= (s[1] | 1u); + s[12] = s[12] * 0xf94d29abu + s[6]; + s[1] ^= s[12] ^ 0x83a5d198u; + s[8] ^= (s[1] & s[2]); + s[15] = s[15] * 0xf23f5c07u + s[8]; + s[12] *= (s[15] | 1u); + s[4] ^= s[12]; + s[6] = mh_rotl(s[6], 27u) + s[4]; + s[14] = mh_rotl(s[14], 24u) + s[6]; + s[5] += s[14]; + s[13] ^= s[5] ^ 0x3acfc3e3u; + s[12] ^= s[13]; + s[4] ^= (s[12] & s[7]); + s[2] ^= (s[4] & s[10]); + s[15] = mh_rotl(s[15] ^ s[2], 18u); + s[0] += s[15]; + s[8] *= (s[0] | 1u); + s[13] ^= s[8]; + s[12] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[12], 4u); + s[15] += s[3] + 0x92e6fcceu; + s[10] = mh_rotl(s[10], 6u) + s[15]; + s[4] = mh_rotl(s[4] ^ s[10], 13u); + s[0] ^= s[4] ^ 0x4eb97c7fu; + s[5] -= s[0]; + s[2] = (s[2] ^ s[5]) * 0x02dedd01u; + s[7] ^= s[2]; + s[13] += (s[7] | s[1]); + s[10] += s[13]; + s[2] *= (s[10] | 1u); + s[6] *= (s[2] | 1u); + s[9] ^= s[6]; + s[14] += s[9]; + s[12] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[12], 29u); + s[7] += s[14] + 0x69164b49u; + s[4] = s[4] * 0x00950233u + s[7]; + s[9] ^= (s[4] & s[11]); + s[1] = (s[1] ^ s[9]) * 0x4e1cc661u; + s[2] -= s[1]; + s[8] = (s[8] ^ s[2]) * 0x8b929a3bu; + s[2] += s[8]; + s[15] += (s[2] | s[9]); + s[3] += s[15] + 0x4a9cd552u; + s[0] = (s[0] ^ s[3]) * 0x32dafb91u; + s[9] = mh_rotl(s[9], 17u) + s[0]; + s[11] *= (s[9] | 1u); + s[9] -= s[11]; + s[6] += s[9]; + s[9] += s[6] + 0xf58412b3u; + s[7] += s[9] + 0x664fa0c3u; + s[12] = s[12] * 0x0f8329a3u + s[7]; + s[11] += s[12] + 0x5b5d3b76u; + s[5] -= s[11]; + s[10] = (s[10] ^ s[5]) * 0x206437adu; + s[12] = s[12] * 0xbaaafbc9u + s[10]; + s[8] *= (s[12] | 1u); + s[0] += s[8]; + s[1] += s[0] + 0x17331c4fu; + s[3] ^= (s[1] & s[2]); + s[2] = mh_rotl(s[2] ^ s[3], 24u); + s[0] += (s[2] | s[1]); + s[1] = mh_rotl(s[1] ^ s[0], 11u); + s[0] *= (s[1] | 1u); + s[2] = s[2] * 0xfa17cdb7u + s[0]; + s[14] += s[2]; + s[3] ^= s[14]; + s[13] += s[3]; + s[2] += s[13]; + s[8] = mh_rotl(s[8] ^ s[2], 28u); + s[1] *= (s[8] | 1u); + s[14] -= s[1]; + s[11] = mh_rotl(s[11], 9u) + s[14]; + s[10] ^= s[11]; + s[9] += s[10]; + s[0] += s[9] + 0x3437b9adu; + s[4] = (s[4] ^ s[0]) * 0x6074d9edu; + s[12] += s[4] + 0xf268adfeu; + s[14] += s[12] + 0x05784ee6u; + s[13] = s[13] * 0x92ea562fu + s[14]; + s[11] = mh_rotl(s[11] ^ s[13], 18u); + s[2] = mh_rotl(s[2], 4u) + s[11]; + s[13] = (s[13] ^ s[2]) * 0x49aaf125u; + s[3] -= s[13]; + s[7] += s[3] + 0x1d4d2968u; + s[5] ^= (s[7] & s[12]); + s[15] -= s[5]; + s[0] ^= s[15] ^ 0xa66653d0u; + s[2] += s[0]; + s[11] -= s[2]; + s[0] = mh_rotl(s[0] ^ s[11], 16u); + s[3] = mh_rotl(s[3], 4u) + s[0]; + s[8] *= (s[3] | 1u); + s[6] ^= s[8] ^ 0x228a8e2bu; + s[2] ^= s[6]; + s[15] += s[2]; + s[8] += s[15]; + s[2] = mh_rotl(s[2] ^ s[8], 29u); + s[10] ^= s[2]; + s[13] = mh_rotl(s[13], 7u) + s[10]; + s[2] += s[13]; + s[10] = s[10] * 0x373045b7u + s[2]; + s[8] ^= s[10]; + s[13] -= s[8]; + s[15] = (s[15] ^ s[13]) * 0x9c79f3bfu; + s[0] = mh_rotl(s[0], 31u) + s[15]; + s[12] = mh_rotl(s[12], 25u) + s[0]; + s[9] -= s[12]; + s[0] = mh_rotl(s[0], 18u) + s[9]; + s[13] = mh_rotl(s[13] ^ s[0], 11u); + s[14] = mh_rotl(s[14], 9u) + s[13]; + s[7] -= s[14]; + s[3] ^= s[7] ^ 0x380dac7fu; + s[1] ^= s[3]; + s[8] += s[1] + 0x2ae5a9dau; + s[10] = mh_rotl(s[10], 3u) + s[8]; + s[7] = mh_rotl(s[7], 2u) + s[10]; + s[8] *= (s[7] | 1u); + s[10] = (s[10] ^ s[8]) * 0xc6c624a1u; + s[7] = mh_rotl(s[7], 6u) + s[10]; + s[5] += s[7] + 0x3b2e05abu; + s[15] ^= s[5]; + s[12] -= s[15]; + s[14] += s[12]; + s[11] += (s[14] | s[4]); + s[8] += s[11]; + s[15] -= s[8]; + s[10] += s[15]; + s[6] += s[10] + 0x41c42bb0u; + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[15] += (s[4] | s[6]); + s[4] = (s[4] ^ s[15]) * 0x4256a3b1u; + s[0] ^= s[4]; + s[8] = mh_rotl(s[8], 4u) + s[0]; + s[5] -= s[8]; + s[4] += s[5] + 0x566b8b0fu; + s[8] = (s[8] ^ s[4]) * 0xf604d0e7u; + s[10] += s[8]; + s[2] *= (s[10] | 1u); + s[5] ^= s[2]; + s[14] -= s[5]; + s[13] += s[14]; + s[2] -= s[13]; + s[0] += s[2]; + s[2] ^= s[0]; + s[0] ^= s[2] ^ 0x51509095u; + s[4] *= (s[0] | 1u); + s[12] *= (s[4] | 1u); + s[8] += (s[12] | s[9]); + s[10] = mh_rotl(s[10], 11u) + s[8]; + s[9] ^= s[10]; + s[15] += s[9]; + s[11] ^= s[15] ^ 0xa0d4f940u; + s[5] ^= s[11]; + s[6] ^= (s[5] & s[11]); + s[5] ^= s[6]; + s[0] *= (s[5] | 1u); + s[4] -= s[0]; + s[6] += (s[4] | s[3]); + s[4] = mh_rotl(s[4] ^ s[6], 9u); + s[12] ^= (s[4] & s[5]); + s[1] *= (s[12] | 1u); + s[11] ^= s[1]; + s[15] ^= s[11]; + s[4] ^= s[15] ^ 0x0a7a3a1bu; + s[7] += s[4]; + s[8] = mh_rotl(s[8] ^ s[7], 18u); + s[12] ^= s[8]; + s[1] ^= (s[12] & s[3]); + s[0] = mh_rotl(s[0], 7u) + s[1]; + s[2] ^= s[0]; + s[13] ^= s[2]; + s[0] = (s[0] ^ s[13]) * 0x24a5f39du; + s[15] -= s[0]; + s[0] ^= s[15]; + s[1] += s[0]; + s[13] = mh_rotl(s[13], 20u) + s[1]; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 13u) + s[4]; + s[4] ^= s[1]; + s[5] = mh_rotl(s[5], 31u) + s[4]; + s[0] -= s[5]; + s[7] = mh_rotl(s[7] ^ s[0], 28u); + s[5] += s[7]; + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 16u); + s[0] ^= s[5] ^ 0xfb5e8938u; + s[8] += s[0]; + s[12] *= (s[8] | 1u); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[12] += s[11] + 0x9786f7f9u; + s[14] += s[12] + 0x47ed1785u; + s[7] ^= s[14] ^ 0x6483ca53u; + s[5] ^= s[7] ^ 0x7fcbaaf8u; + s[12] += s[5]; + s[1] += (s[12] | s[10]); + s[6] -= s[1]; + s[2] = mh_rotl(s[2], 12u) + s[6]; + s[8] += s[2] + 0x41a11731u; + s[11] = mh_rotl(s[11], 12u) + s[8]; + s[2] += s[11] + 0xdaf8e7dau; + s[7] *= (s[2] | 1u); + s[11] ^= s[7] ^ 0x0af2771du; + s[8] += s[11]; + s[4] += s[8]; + s[13] ^= s[4]; + s[14] = mh_rotl(s[14] ^ s[13], 27u); + s[12] ^= s[14]; + s[9] = s[9] * 0x232d6601u + s[12]; + s[4] *= (s[9] | 1u); + s[1] += s[4]; + s[0] += s[1]; + s[13] *= (s[0] | 1u); + s[1] *= (s[13] | 1u); + s[9] = mh_rotl(s[9] ^ s[1], 19u); + s[0] = mh_rotl(s[0] ^ s[9], 8u); + s[12] += s[0]; + s[15] = mh_rotl(s[15] ^ s[12], 2u); + s[1] -= s[15]; + s[15] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[8] ^= s[12]; + s[0] *= (s[8] | 1u); + s[14] ^= (s[0] & s[6]); + s[11] += s[14]; + s[13] ^= s[11]; + s[4] ^= (s[13] & s[5]); + s[12] -= s[4]; + s[15] -= s[12]; + s[12] = mh_rotl(s[12], 8u) + s[15]; + s[0] = s[0] * 0x28ee8749u + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 13u); + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[5] = (s[5] ^ s[10]) * 0xc5b4f577u; + s[3] = mh_rotl(s[3] ^ s[5], 8u); + s[7] = mh_rotl(s[7] ^ s[3], 30u); + s[1] -= s[7]; + s[5] = (s[5] ^ s[1]) * 0x2d76383du; + s[11] += s[5]; + s[4] = mh_rotl(s[4], 4u) + s[11]; + s[2] ^= s[4]; + s[9] = (s[9] ^ s[2]) * 0x4b24be99u; + s[10] = mh_rotl(s[10], 31u) + s[9]; + s[9] -= s[10]; + s[8] -= s[9]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +IGNEUM_HD void mh_item(const uint32_t* cache, uint32_t t, uint32_t* s) { + s[0] = 0xceed56d7u; + s[1] = 0x9ba270d2u; + s[2] = 0x82caab2du; + s[3] = 0x81ebce0eu; + s[4] = 0x12b6ecf1u; + s[5] = 0xd0f3fd7cu; + s[6] = 0xd872eefeu; + s[7] = 0xc158c7bdu; + s[8] = t * 0xf351d601u + 0xc6892460u; + s[9] = t * 0xa3bb398fu + 0x25b7228au; + s[10] = t * 0xb5a09e35u + 0xcd515004u; + s[11] = t * 0x7509c9c1u + 0x2846527au; + s[12] = t * 0x6bbf31e9u + 0xa6324241u; + s[13] = t * 0xfc849a79u + 0x36e3ec53u; + s[14] = t * 0xded91851u + 0x82961bacu; + s[15] = t * 0x8d9113d1u + 0x0f97ba7du; + mh_round_0(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +IGNEUM_HD uint32_t mh_word(const uint32_t* cache, uint32_t w) { uint32_t s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.metal b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.metal new file mode 100644 index 00000000..5dedbeec --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/memhard.metal @@ -0,0 +1,6771 @@ +#include +using namespace metal; +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 771868df4e64d6ab). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +inline void mh_chacha_block(const thread uint* x, thread uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +inline void mh_cache_segment(device uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0xceed56d7u ^ prev[4]; + x[5] = 0x9ba270d2u ^ prev[5]; + x[6] = 0x82caab2du ^ prev[6]; + x[7] = 0x81ebce0eu ^ prev[7]; + x[8] = 0x12b6ecf1u ^ prev[8]; + x[9] = 0xd0f3fd7cu ^ prev[9]; + x[10] = 0xd872eefeu ^ prev[10]; + x[11] = 0xc158c7bdu ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + device uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +inline void mh_mixer(thread uint* s, uint rk) { + s[0] = (s[0] ^ (0xc6892460u + rk)) * 0xf351d601u; + s[1] = (s[1] ^ (0x25b7228au + rk)) * 0xa3bb398fu; + s[2] = (s[2] ^ (0xcd515004u + rk)) * 0xb5a09e35u; + s[3] = (s[3] ^ (0x2846527au + rk)) * 0x7509c9c1u; + s[4] = (s[4] ^ (0xa6324241u + rk)) * 0x6bbf31e9u; + s[5] = (s[5] ^ (0x36e3ec53u + rk)) * 0xfc849a79u; + s[6] = (s[6] ^ (0x82961bacu + rk)) * 0xded91851u; + s[7] = (s[7] ^ (0x0f97ba7du + rk)) * 0x8d9113d1u; + s[8] = (s[8] ^ (0xb6f921a9u + rk)) * 0x0ff15225u; + s[9] = (s[9] ^ (0x3ada24e5u + rk)) * 0x3a5bdd41u; + s[10] = (s[10] ^ (0xde20ab91u + rk)) * 0xab533435u; + s[11] = (s[11] ^ (0x5378eeb2u + rk)) * 0xe1c55ad5u; + s[12] = (s[12] ^ (0x7d161662u + rk)) * 0xe6d3bd0du; + s[13] = (s[13] ^ (0x89353cc1u + rk)) * 0x9d9ffbbdu; + s[14] = (s[14] ^ (0xb1aa03a2u + rk)) * 0xbb2a3cf3u; + s[15] = (s[15] ^ (0x788acae6u + rk)) * 0x50a7c08du; + MH_QR(s[0], s[4], s[8], s[12], 17u, 12u, 20u, 23u) MH_QR(s[1], s[5], s[9], s[13], 17u, 12u, 20u, 23u) + MH_QR(s[2], s[6], s[10], s[14], 17u, 12u, 20u, 23u) MH_QR(s[3], s[7], s[11], s[15], 17u, 12u, 20u, 23u) + MH_QR(s[0], s[5], s[10], s[15], 7u, 3u, 27u, 16u) MH_QR(s[1], s[6], s[11], s[12], 7u, 3u, 27u, 16u) + MH_QR(s[2], s[7], s[8], s[13], 7u, 3u, 27u, 16u) MH_QR(s[3], s[4], s[9], s[14], 7u, 3u, 27u, 16u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_0(thread uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 13u); + s[1] = mh_rotl(s[1], 23u) + s[3]; + s[15] *= (s[1] | 1u); + s[7] ^= s[15]; + s[12] -= s[7]; + s[9] *= (s[12] | 1u); + s[6] = (s[6] ^ s[9]) * 0x2735a435u; + s[14] = mh_rotl(s[14], 17u) + s[6]; + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x14ddb139u; + s[1] += s[8] + 0xca6e0e1cu; + s[6] *= (s[1] | 1u); + s[15] ^= s[6]; + s[12] ^= s[15]; + s[11] = s[11] * 0x722d4b13u + s[12]; + s[4] = mh_rotl(s[4], 18u) + s[11]; + s[2] += s[4]; + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[9] -= s[1]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x0ffea53bu; + s[8] = mh_rotl(s[8], 5u) + s[14]; + s[3] += s[8] + 0x9ed7985eu; + s[6] += s[3]; + s[4] ^= s[6] ^ 0x1dd74ad9u; + s[13] += s[4]; + s[0] -= s[13]; + s[15] *= (s[0] | 1u); + s[12] ^= s[15]; + s[11] -= s[12]; + s[14] = mh_rotl(s[14], 27u) + s[11]; + s[6] += s[14]; + s[10] += s[6] + 0x2b37904eu; + s[8] = mh_rotl(s[8], 4u) + s[10]; + s[5] *= (s[8] | 1u); + s[0] = mh_rotl(s[0] ^ s[5], 14u); + s[13] ^= s[0]; + s[12] = s[12] * 0x77e0a5d3u + s[13]; + s[1] += s[12]; + s[13] = s[13] * 0x65318e55u + s[1]; + s[15] = mh_rotl(s[15], 29u) + s[13]; + s[13] -= s[15]; + s[12] = s[12] * 0xc4a25397u + s[13]; + s[0] ^= s[12]; + s[11] += s[0]; + s[5] = (s[5] ^ s[11]) * 0xeeadd5a3u; + s[15] = (s[15] ^ s[5]) * 0x731c68a3u; + s[0] += (s[15] | s[8]); + s[4] = s[4] * 0x51fb9437u + s[0]; + s[10] *= (s[4] | 1u); + s[12] *= (s[10] | 1u); + s[0] ^= (s[12] & s[8]); + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0x5eeca4fbu; + s[14] = mh_rotl(s[14] ^ s[0], 16u); + s[1] *= (s[14] | 1u); + s[3] *= (s[1] | 1u); + s[12] ^= s[3] ^ 0x705ffae7u; + s[11] ^= s[12] ^ 0x55f159afu; + s[10] = (s[10] ^ s[11]) * 0x631a1b7fu; + s[11] = mh_rotl(s[11], 17u) + s[10]; + s[7] += s[11]; + s[9] = mh_rotl(s[9], 27u) + s[7]; + s[12] ^= (s[9] & s[15]); + s[8] = mh_rotl(s[8], 22u) + s[12]; + s[9] ^= s[8]; + s[12] ^= (s[9] & s[5]); + s[7] += s[12]; + s[10] = mh_rotl(s[10], 14u) + s[7]; + s[15] += (s[10] | s[0]); + s[4] ^= s[15]; + s[5] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] ^= s[11]; + s[1] = mh_rotl(s[1], 3u) + s[14]; + s[11] *= (s[1] | 1u); + s[9] *= (s[11] | 1u); + s[3] = mh_rotl(s[3] ^ s[9], 2u); + s[12] = mh_rotl(s[12], 11u) + s[3]; + s[4] ^= s[12]; + s[12] *= (s[4] | 1u); + s[14] += s[12]; + s[8] = mh_rotl(s[8], 14u) + s[14]; + s[9] = mh_rotl(s[9] ^ s[8], 14u); + s[12] += s[9]; + s[13] = mh_rotl(s[13], 6u) + s[12]; + s[10] ^= s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 11u); + s[13] ^= s[12]; + s[2] += s[13]; + s[10] ^= s[2]; + s[15] += s[10] + 0x1634a71eu; + s[6] ^= s[15] ^ 0xd749a601u; + s[15] = (s[15] ^ s[6]) * 0x600e3ecbu; + s[12] += s[15]; + s[7] = s[7] * 0x0149e3ebu + s[12]; + s[15] += s[7]; + s[10] += s[15]; + s[13] = (s[13] ^ s[10]) * 0xa7c503e7u; + s[3] = mh_rotl(s[3] ^ s[13], 5u); + s[13] += s[3]; + s[14] ^= (s[13] & s[11]); + s[13] *= (s[14] | 1u); + s[8] ^= s[13]; + s[9] += (s[8] | s[5]); + s[12] = mh_rotl(s[12] ^ s[9], 29u); + s[15] ^= s[12] ^ 0x990f53b6u; + s[5] = mh_rotl(s[5], 30u) + s[15]; + s[3] -= s[5]; + s[11] += s[3]; + s[0] += s[11]; + s[10] *= (s[0] | 1u); + s[2] *= (s[10] | 1u); + s[12] ^= s[2]; + s[13] *= (s[12] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[1] ^= s[4] ^ 0xcd3069e4u; + s[0] = mh_rotl(s[0] ^ s[1], 3u); + s[15] ^= s[0] ^ 0x8c69c78du; + s[10] = mh_rotl(s[10], 21u) + s[15]; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 31u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[5] += s[11]; + s[13] ^= (s[5] & s[8]); + s[12] = (s[12] ^ s[13]) * 0x831edbe1u; + s[0] = mh_rotl(s[0], 24u) + s[12]; + s[11] ^= s[0]; + s[9] -= s[11]; + s[7] ^= s[9]; + s[8] = (s[8] ^ s[7]) * 0xc7e1cfddu; + s[12] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[12], 28u); + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[2] += s[3]; + s[9] += s[2]; + s[10] = mh_rotl(s[10], 21u) + s[9]; + s[13] = mh_rotl(s[13], 14u) + s[10]; + s[15] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 1u); + s[11] *= (s[7] | 1u); + s[9] += (s[11] | s[5]); + s[15] += s[9]; + s[10] += s[15] + 0xba60c9ecu; + s[9] = (s[9] ^ s[10]) * 0xd025f22du; + s[6] *= (s[9] | 1u); + s[0] *= (s[6] | 1u); + s[15] -= s[0]; + s[10] += s[15]; + s[0] += s[10] + 0xfb2e7c45u; + s[6] += s[0]; + s[10] = s[10] * 0xa719d3b5u + s[6]; + s[3] -= s[10]; + s[10] = s[10] * 0x4567f515u + s[3]; + s[6] = mh_rotl(s[6] ^ s[10], 3u); + s[15] ^= s[6]; + s[5] *= (s[15] | 1u); + s[9] += s[5] + 0x7add03edu; + s[8] += s[9] + 0x200dba17u; + s[15] += s[8]; + s[10] += s[15]; + s[0] -= s[10]; + s[8] ^= (s[0] & s[14]); + s[14] *= (s[8] | 1u); + s[7] += (s[14] | s[4]); + s[10] ^= s[7] ^ 0xfd92bbdeu; + s[6] += s[10] + 0xdfa6bf99u; + s[15] += s[6]; + s[0] -= s[15]; + s[13] *= (s[0] | 1u); + s[10] += s[13]; + s[14] = mh_rotl(s[14], 30u) + s[10]; + s[7] = mh_rotl(s[7] ^ s[14], 26u); + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[1] = mh_rotl(s[1] ^ s[4], 5u); + s[4] ^= s[1]; + s[8] ^= s[4] ^ 0x246709cfu; + s[4] += s[8]; + s[1] += s[4]; + s[0] += (s[1] | s[3]); + s[13] *= (s[0] | 1u); + s[3] -= s[13]; + s[6] += (s[3] | s[8]); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] += s[10]; + s[10] -= s[14]; + s[11] ^= (s[10] & s[2]); + s[13] ^= s[11]; + s[9] += (s[13] | s[15]); + s[4] += s[9]; + s[3] += s[4]; + s[14] -= s[3]; + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[8] += s[7]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[7] ^= s[3] ^ 0x139d83e8u; + s[6] += s[7]; + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[14] = mh_rotl(s[14] ^ s[4], 17u); + s[13] = mh_rotl(s[13], 22u) + s[14]; + s[8] += s[13]; + s[0] ^= s[8]; + s[8] ^= s[0]; + s[7] = (s[7] ^ s[8]) * 0x7d8b96a1u; + s[11] -= s[7]; + s[7] *= (s[11] | 1u); + s[13] += s[7] + 0x3dfedaadu; + s[6] = (s[6] ^ s[13]) * 0x02bf39b1u; + s[15] ^= s[6]; + s[10] += s[15]; + s[4] = mh_rotl(s[4], 24u) + s[10]; + s[6] = s[6] * 0xa211b535u + s[4]; + s[9] += s[6] + 0x6d1c8ec2u; + s[14] ^= s[9]; + s[1] ^= (s[14] & s[8]); + s[9] *= (s[1] | 1u); + s[11] *= (s[9] | 1u); + s[6] = mh_rotl(s[6] ^ s[11], 9u); + s[14] *= (s[6] | 1u); + s[5] -= s[14]; + s[3] *= (s[5] | 1u); + s[8] += s[3]; + s[15] += s[8]; + s[13] += s[15] + 0x4f61883fu; + s[15] = mh_rotl(s[15] ^ s[13], 17u); + s[0] += (s[15] | s[11]); + s[15] += s[0]; + s[2] -= s[15]; + s[8] -= s[2]; + s[5] *= (s[8] | 1u); + s[1] = (s[1] ^ s[5]) * 0x65420b47u; + s[12] = s[12] * 0x42ad8bf1u + s[1]; + s[15] += (s[12] | s[2]); + s[11] += s[15]; + s[7] = (s[7] ^ s[11]) * 0x24e3746bu; + s[1] ^= s[7]; + s[7] = mh_rotl(s[7], 31u) + s[1]; + s[0] ^= (s[7] & s[1]); + s[15] ^= s[0] ^ 0x47313c44u; + s[1] += s[15]; + s[11] ^= s[1]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[9] += s[12]; + s[2] -= s[9]; + s[1] = (s[1] ^ s[2]) * 0x9c164e0du; + s[10] += s[1]; + s[0] ^= s[10]; + s[6] ^= s[0]; + s[1] += s[6]; + s[15] = mh_rotl(s[15] ^ s[1], 4u); + s[14] -= s[15]; + s[7] ^= s[14]; + s[8] ^= s[7] ^ 0x2b5aacd6u; + s[13] += s[8]; + s[6] *= (s[13] | 1u); + s[1] = mh_rotl(s[1], 9u) + s[6]; + s[12] += (s[1] | s[7]); + s[8] ^= s[12]; + s[9] += (s[8] | s[11]); + s[14] += s[9] + 0x93a636aau; + s[13] -= s[14]; + s[0] = (s[0] ^ s[13]) * 0x0185d1f9u; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[9] ^= s[3]; + s[12] *= (s[9] | 1u); + s[4] += s[12]; + s[14] = mh_rotl(s[14] ^ s[4], 12u); + s[15] += s[14]; + s[0] = mh_rotl(s[0] ^ s[15], 11u); + s[5] -= s[0]; + s[9] -= s[5]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[13] -= s[5]; + s[2] += (s[13] | s[6]); + s[12] *= (s[2] | 1u); + s[5] = mh_rotl(s[5], 14u) + s[12]; + s[14] = s[14] * 0x37190e5fu + s[5]; + s[2] -= s[14]; + s[1] = mh_rotl(s[1], 25u) + s[2]; + s[15] += s[1]; + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[7] = mh_rotl(s[7], 15u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 13u); + s[5] *= (s[9] | 1u); + s[6] -= s[5]; + s[14] ^= s[6] ^ 0xf476d15fu; + s[13] ^= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[13] = mh_rotl(s[13] ^ s[10], 29u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[7] ^= s[4]; + s[10] = (s[10] ^ s[7]) * 0xa943fa7fu; + s[12] ^= s[10]; + s[3] = mh_rotl(s[3], 8u) + s[12]; + s[14] = (s[14] ^ s[3]) * 0x09fb17fdu; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] ^= s[7]; + s[7] ^= s[14]; + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[11] += s[8]; + s[2] += (s[11] | s[14]); + s[15] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 26u) + s[15]; + s[2] *= (s[3] | 1u); + s[4] -= s[2]; + s[3] += (s[4] | s[14]); + s[10] ^= s[3]; + s[0] -= s[10]; + s[13] ^= (s[0] & s[6]); + s[0] *= (s[13] | 1u); + s[5] *= (s[0] | 1u); + s[9] = mh_rotl(s[9], 12u) + s[5]; + s[3] ^= s[9]; + s[15] ^= (s[3] & s[1]); + s[8] = s[8] * 0x98abbf3du + s[15]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0x50468cebu; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[11] ^= s[1]; + s[15] = mh_rotl(s[15] ^ s[11], 9u); + s[13] = mh_rotl(s[13], 28u) + s[15]; + s[7] += s[13]; + s[14] = mh_rotl(s[14], 20u) + s[7]; + s[11] = (s[11] ^ s[14]) * 0x5091caadu; + s[7] ^= s[11] ^ 0x269d33e2u; + s[14] ^= s[7]; + s[5] = s[5] * 0x30d291edu + s[14]; + s[9] ^= s[5]; + s[10] += s[9]; + s[0] ^= s[10]; + s[7] *= (s[0] | 1u); + s[14] ^= s[7]; + s[2] -= s[14]; + s[13] += s[2]; + s[8] += s[13]; + s[12] ^= (s[8] & s[0]); + s[7] = mh_rotl(s[7], 8u) + s[12]; + s[0] = (s[0] ^ s[7]) * 0x1cae2a31u; + s[6] = mh_rotl(s[6], 29u) + s[0]; + s[10] ^= s[6] ^ 0xb9ccdbfdu; + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[1] *= (s[10] | 1u); + s[8] ^= (s[1] & s[4]); + s[4] ^= s[8] ^ 0x53da0b8au; + s[15] *= (s[4] | 1u); + s[13] -= s[15]; + s[1] += (s[13] | s[0]); + s[6] += (s[1] | s[4]); + s[4] ^= s[6]; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[6] -= s[1]; + s[5] += (s[6] | s[12]); + s[12] ^= s[5]; + s[15] = (s[15] ^ s[12]) * 0x458c7163u; + s[13] -= s[15]; + s[6] = mh_rotl(s[6] ^ s[13], 20u); + s[2] = (s[2] ^ s[6]) * 0x9c39a383u; + s[0] += s[2]; + s[12] ^= s[0] ^ 0x7cc2033au; + s[13] = mh_rotl(s[13] ^ s[12], 12u); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[15] = (s[15] ^ s[6]) * 0x0c9eb2cfu; + s[8] *= (s[15] | 1u); + s[2] += s[8]; + s[5] = mh_rotl(s[5], 19u) + s[2]; + s[8] *= (s[5] | 1u); + s[0] += s[8]; + s[6] = s[6] * 0x79f7c2dfu + s[0]; + s[14] += s[6]; + s[11] = s[11] * 0x5e817e5bu + s[14]; + s[14] ^= s[11]; + s[4] ^= s[14]; + s[9] += s[4] + 0xd46a416fu; + s[14] = s[14] * 0xa4a2923fu + s[9]; + s[7] *= (s[14] | 1u); + s[4] = (s[4] ^ s[7]) * 0x90bc8fcdu; + s[14] += s[4]; + s[7] = (s[7] ^ s[14]) * 0xf112f8f5u; + s[0] *= (s[7] | 1u); + s[12] -= s[0]; + s[3] ^= s[12]; + s[9] ^= s[3]; + s[5] = (s[5] ^ s[9]) * 0x24022a1du; + s[13] = mh_rotl(s[13], 25u) + s[5]; + s[1] *= (s[13] | 1u); + s[10] += s[1]; + s[12] = (s[12] ^ s[10]) * 0xa16c00d1u; + s[6] -= s[12]; + s[7] ^= s[6]; + s[10] ^= s[7] ^ 0x58615cc4u; + s[4] += s[10]; + s[3] *= (s[4] | 1u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[0] += s[4]; + s[3] ^= s[0]; + s[1] = mh_rotl(s[1], 20u) + s[3]; + s[13] ^= s[1] ^ 0x244eb2e2u; + s[0] ^= s[13] ^ 0x2273d5c0u; + s[15] ^= s[0]; + s[13] -= s[15]; + s[2] ^= s[13] ^ 0x7c995a78u; + s[4] -= s[2]; + s[14] ^= s[4]; + s[0] = mh_rotl(s[0], 29u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[0], 1u); + s[2] += (s[14] | s[1]); + s[10] += (s[2] | s[12]); + s[12] ^= s[10]; + s[6] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 30u) + s[6]; + s[12] ^= s[9]; + s[14] -= s[12]; + s[11] += s[14]; + s[10] += (s[11] | s[6]); + s[2] += (s[10] | s[5]); + s[1] = mh_rotl(s[1] ^ s[2], 29u); + s[6] = s[6] * 0xd99bd00bu + s[1]; + s[1] = (s[1] ^ s[6]) * 0xe0d965a7u; + s[7] += s[1] + 0x51b2428bu; + s[15] ^= s[7] ^ 0x50b8787bu; + s[0] += s[15] + 0xfe2752f1u; + s[4] += s[0] + 0x0e368287u; + s[1] += s[4]; + s[6] ^= s[1] ^ 0xe35b392eu; + s[2] = mh_rotl(s[2], 23u) + s[6]; + s[9] ^= s[2]; + s[15] = s[15] * 0xd6a40fabu + s[9]; + s[5] -= s[15]; + s[2] += s[5]; + s[6] = mh_rotl(s[6] ^ s[2], 8u); + s[5] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[4] += s[13] + 0x53640c05u; + s[0] = mh_rotl(s[0] ^ s[4], 7u); + s[13] ^= s[0]; + s[9] *= (s[13] | 1u); + s[0] ^= s[9]; + s[10] = s[10] * 0x843679c9u + s[0]; + s[6] = mh_rotl(s[6] ^ s[10], 29u); + s[14] = mh_rotl(s[14] ^ s[6], 12u); + s[1] += s[14]; + s[13] = s[13] * 0xa749a1b5u + s[1]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[2] = (s[2] ^ s[12]) * 0x5b1ce1c1u; + s[15] *= (s[2] | 1u); + s[12] ^= (s[15] & s[9]); + s[0] = mh_rotl(s[0] ^ s[12], 25u); + s[14] ^= s[0]; + s[3] *= (s[14] | 1u); + s[8] ^= s[3] ^ 0x6ca032cbu; + s[4] -= s[8]; + s[12] ^= s[4] ^ 0x7728b3cbu; + s[7] += (s[12] | s[8]); + s[5] = s[5] * 0x0ae2c6cdu + s[7]; + s[0] += s[5]; + s[9] = mh_rotl(s[9], 24u) + s[0]; + s[1] -= s[9]; + s[11] ^= s[1] ^ 0xf5da2550u; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[3] += s[8] + 0xa4fe9e4bu; + s[14] *= (s[3] | 1u); + s[6] = (s[6] ^ s[14]) * 0xbd9356a9u; + s[12] = mh_rotl(s[12] ^ s[6], 7u); + s[7] = (s[7] ^ s[12]) * 0x875f73bfu; + s[1] -= s[7]; + s[14] = (s[14] ^ s[1]) * 0x1e7b97f7u; + s[6] = s[6] * 0x577deaddu + s[14]; + s[13] ^= s[6]; + s[4] *= (s[13] | 1u); + s[3] ^= s[4]; + s[15] ^= s[3] ^ 0x28e94074u; + s[0] = (s[0] ^ s[15]) * 0x6b8272cdu; + s[8] *= (s[0] | 1u); + s[3] ^= s[8]; + s[0] = s[0] * 0x0b665f15u + s[3]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 3u) + s[7]; + s[4] += s[14]; + s[12] = mh_rotl(s[12], 23u) + s[4]; + s[15] = mh_rotl(s[15], 31u) + s[12]; + s[8] += s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[1] += (s[4] | s[8]); + s[5] += s[1]; + s[9] += s[5]; + s[12] += s[9]; + s[1] = mh_rotl(s[1], 13u) + s[12]; + s[2] *= (s[1] | 1u); + s[4] -= s[2]; + s[11] = mh_rotl(s[11], 31u) + s[4]; + s[2] = mh_rotl(s[2], 2u) + s[11]; + s[7] += s[2] + 0x9a35b39au; + s[6] += (s[7] | s[13]); + s[0] *= (s[6] | 1u); + s[9] += (s[0] | s[8]); + s[14] = mh_rotl(s[14], 25u) + s[9]; + s[15] = mh_rotl(s[15], 4u) + s[14]; + s[6] ^= s[15]; + s[12] ^= s[6]; + s[10] += s[12] + 0x5cb2267au; + s[1] += s[10]; + s[15] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[15], 28u); + s[6] = mh_rotl(s[6], 19u) + s[13]; + s[3] += s[6] + 0xd7c31b8du; + s[14] = s[14] * 0x3b0ab799u + s[3]; + s[4] += s[14] + 0x3536b1f6u; + s[2] -= s[4]; + s[12] += (s[2] | s[11]); + s[11] ^= s[12] ^ 0xbf42c333u; + s[3] = (s[3] ^ s[11]) * 0xde9b7ca9u; + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[3] = mh_rotl(s[3] ^ s[5], 29u); + s[15] = mh_rotl(s[15] ^ s[3], 4u); + s[5] ^= s[15]; + s[14] ^= (s[5] & s[6]); + s[8] += (s[14] | s[0]); + s[12] = mh_rotl(s[12], 17u) + s[8]; + s[1] ^= s[12]; + s[10] = mh_rotl(s[10] ^ s[1], 26u); + s[13] = mh_rotl(s[13], 15u) + s[10]; + s[10] += s[13]; + s[12] -= s[10]; + s[4] ^= s[12] ^ 0xc9739849u; + s[2] ^= s[4] ^ 0x31699b20u; + s[12] += s[2]; + s[15] += s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[11] -= s[9]; + s[0] = mh_rotl(s[0] ^ s[11], 6u); + s[12] ^= (s[0] & s[7]); + s[14] ^= s[12] ^ 0x9419731fu; + s[7] = (s[7] ^ s[14]) * 0x394edfa7u; + s[11] = mh_rotl(s[11] ^ s[7], 8u); + s[13] += s[11]; + s[14] = (s[14] ^ s[13]) * 0xd8bdcc5bu; + s[8] += s[14]; + s[1] ^= s[8] ^ 0x7c3166e1u; + s[9] ^= s[1]; + s[2] *= (s[9] | 1u); + s[3] = mh_rotl(s[3], 25u) + s[2]; + s[5] += s[3]; + s[8] = (s[8] ^ s[5]) * 0x40545eedu; + s[7] ^= s[8]; + s[4] = (s[4] ^ s[7]) * 0x968dc0c3u; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[10] = mh_rotl(s[10], 20u) + s[1]; + s[1] ^= (s[10] & s[5]); + s[5] -= s[1]; + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[12] -= s[9]; + s[5] = s[5] * 0x2fa421c3u + s[12]; + s[0] += s[5] + 0xd84eb599u; + s[14] ^= s[0]; + s[12] += s[14] + 0x9fa50493u; + s[3] = (s[3] ^ s[12]) * 0x4d23b04du; + s[10] = s[10] * 0x78de01f5u + s[3]; + s[0] *= (s[10] | 1u); + s[3] += s[0]; + s[1] ^= s[3] ^ 0x3cb60603u; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[10] ^= (s[12] & s[1]); + s[2] *= (s[10] | 1u); + s[8] += s[2]; + s[13] -= s[8]; + s[2] *= (s[13] | 1u); + s[4] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 7u) + s[4]; + s[15] -= s[7]; + s[12] *= (s[15] | 1u); + s[1] ^= s[12]; + s[5] -= s[1]; + s[14] += s[5] + 0x36981c70u; + s[4] ^= s[14] ^ 0x71a79181u; + s[6] += s[4]; + s[8] ^= s[6]; + s[7] ^= s[8]; + s[14] ^= s[7]; + s[7] = (s[7] ^ s[14]) * 0x097a3803u; + s[4] *= (s[7] | 1u); + s[11] ^= (s[4] & s[10]); + s[4] += s[11]; + s[7] = (s[7] ^ s[4]) * 0x85738709u; + s[3] = mh_rotl(s[3] ^ s[7], 11u); + s[10] = mh_rotl(s[10], 10u) + s[3]; + s[2] += (s[10] | s[9]); + s[10] = (s[10] ^ s[2]) * 0x94c5048bu; + s[15] += s[10]; + s[8] += s[15] + 0x0b5cc6efu; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[14] = mh_rotl(s[14] ^ s[5], 25u); + s[3] ^= s[14] ^ 0x111815f3u; + s[8] += s[3]; + s[7] ^= s[8]; + s[11] ^= s[7] ^ 0x4e2582d7u; + s[9] += (s[11] | s[8]); + s[14] ^= s[9]; + s[7] -= s[14]; + s[8] = mh_rotl(s[8], 9u) + s[7]; + s[4] = (s[4] ^ s[8]) * 0xaac84b51u; + s[15] ^= s[4]; + s[1] = mh_rotl(s[1] ^ s[15], 3u); + s[7] = mh_rotl(s[7], 7u) + s[1]; + s[0] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[11] += s[2] + 0x98edfcf5u; + s[6] += s[11]; + s[2] = (s[2] ^ s[6]) * 0xa136e64du; + s[12] *= (s[2] | 1u); + s[8] = (s[8] ^ s[12]) * 0xce39a005u; + s[3] += s[8]; + s[7] ^= s[3]; + s[2] = mh_rotl(s[2] ^ s[7], 6u); + s[10] = mh_rotl(s[10] ^ s[2], 19u); + s[7] -= s[10]; + s[0] += s[7]; + s[7] = (s[7] ^ s[0]) * 0xcb29f5cbu; + s[4] *= (s[7] | 1u); + s[12] += s[4] + 0x4a2ccb18u; + s[8] = mh_rotl(s[8] ^ s[12], 28u); + s[2] *= (s[8] | 1u); + s[13] *= (s[2] | 1u); + s[3] = (s[3] ^ s[13]) * 0x8e193255u; + s[10] += s[3]; + s[8] += s[10]; + s[14] ^= (s[8] & s[6]); + s[12] ^= s[14]; + s[9] = (s[9] ^ s[12]) * 0x5b862b41u; + s[1] += s[9]; + s[10] ^= s[1] ^ 0xa652e937u; + s[0] = mh_rotl(s[0], 21u) + s[10]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[14] = (s[14] ^ s[12]) * 0x301b4ff9u; + s[13] = s[13] * 0x12fb71b3u + s[14]; + s[6] = mh_rotl(s[6] ^ s[13], 2u); + s[12] -= s[6]; + s[0] ^= s[12]; + s[11] = mh_rotl(s[11], 9u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[11], 17u); + s[12] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[12], 9u); + s[2] += s[14]; + s[4] ^= s[2]; + s[15] -= s[4]; + s[11] -= s[15]; + s[0] = s[0] * 0x9ae119bfu + s[11]; + s[14] ^= s[0]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[7] *= (s[8] | 1u); + s[10] -= s[7]; + s[5] -= s[10]; + s[2] += s[5] + 0xbb07e4b1u; + s[8] ^= s[2]; + s[9] += s[8]; + s[5] ^= s[9]; + s[1] = (s[1] ^ s[5]) * 0x350b4999u; + s[4] += s[1]; + s[9] = mh_rotl(s[9] ^ s[4], 27u); + s[6] = (s[6] ^ s[9]) * 0x367cc161u; + s[9] -= s[6]; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[8] ^= s[0] ^ 0x75d9afc5u; + s[14] = mh_rotl(s[14] ^ s[8], 10u); + s[7] += s[14] + 0x1912ec89u; + s[10] += (s[7] | s[4]); + s[0] -= s[10]; + s[3] += s[0]; + s[6] -= s[3]; + s[12] = (s[12] ^ s[6]) * 0x4c6c192du; + s[13] += (s[12] | s[5]); + s[3] = mh_rotl(s[3] ^ s[13], 25u); + s[13] = mh_rotl(s[13], 22u) + s[3]; + s[0] += s[13]; + s[12] -= s[0]; + s[10] ^= (s[12] & s[3]); + s[6] += s[10]; + s[2] = mh_rotl(s[2] ^ s[6], 19u); + s[6] -= s[2]; + s[9] += s[6]; + s[10] = s[10] * 0x6d659893u + s[9]; + s[11] ^= s[10]; + s[9] = (s[9] ^ s[11]) * 0x63085b93u; + s[4] ^= s[9] ^ 0xfa7139dbu; + s[11] = mh_rotl(s[11] ^ s[4], 31u); + s[4] -= s[11]; + s[10] += s[4]; + s[14] += s[10]; + s[9] = s[9] * 0x3564c517u + s[14]; + s[13] ^= s[9]; + s[4] += s[13]; + s[7] += s[4]; + s[13] = mh_rotl(s[13] ^ s[7], 5u); + s[6] ^= s[13]; + s[7] ^= s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 25u); + s[4] -= s[8]; + s[0] *= (s[4] | 1u); + s[4] *= (s[0] | 1u); + s[8] += s[4]; + s[2] *= (s[8] | 1u); + s[6] += s[2] + 0xbfdaf7b1u; + s[9] ^= s[6]; + s[1] = (s[1] ^ s[9]) * 0x3c5c1b5bu; + s[6] -= s[1]; + s[4] = mh_rotl(s[4], 11u) + s[6]; + s[3] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[3]; + s[8] = mh_rotl(s[8], 19u) + s[0]; + s[12] = (s[12] ^ s[8]) * 0x25e88231u; + s[0] -= s[12]; + s[4] ^= (s[0] & s[2]); + s[9] ^= (s[4] & s[6]); + s[5] = (s[5] ^ s[9]) * 0x3c0d5df5u; + s[6] += s[5]; + s[2] -= s[6]; + s[12] ^= s[2]; + s[1] += s[12] + 0x4dc4b094u; + s[10] ^= s[1]; + s[6] += s[10]; + s[7] += s[6] + 0x43a99a33u; + s[6] = s[6] * 0xdee0e37fu + s[7]; + s[12] = (s[12] ^ s[6]) * 0xc8a25e85u; + s[1] += (s[12] | s[3]); + s[12] ^= s[1]; + s[15] += s[12]; + s[4] = mh_rotl(s[4] ^ s[15], 17u); +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_1(thread uint* s) { + s[1] += s[0]; + s[3] += s[1] + 0xad481039u; + s[11] += (s[3] | s[2]); + s[1] ^= (s[11] & s[12]); + s[14] -= s[1]; + s[10] += s[14] + 0x55885317u; + s[4] -= s[10]; + s[15] = mh_rotl(s[15] ^ s[4], 4u); + s[6] += s[15]; + s[13] = mh_rotl(s[13] ^ s[6], 20u); + s[11] = (s[11] ^ s[13]) * 0xff0504adu; + s[1] = (s[1] ^ s[11]) * 0x250dc94bu; + s[15] += s[1]; + s[12] *= (s[15] | 1u); + s[7] += s[12]; + s[8] ^= s[7]; + s[11] ^= (s[8] & s[7]); + s[4] = (s[4] ^ s[11]) * 0xcdf53d85u; + s[10] = (s[10] ^ s[4]) * 0xee957d9fu; + s[9] = (s[9] ^ s[10]) * 0x306403a5u; + s[7] -= s[9]; + s[12] ^= s[7]; + s[15] *= (s[12] | 1u); + s[2] -= s[15]; + s[11] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 29u); + s[11] += s[8] + 0x053c715du; + s[0] = (s[0] ^ s[11]) * 0x6e7f6f63u; + s[5] = mh_rotl(s[5] ^ s[0], 4u); + s[8] = (s[8] ^ s[5]) * 0xec01af93u; + s[13] = s[13] * 0x0c236ed3u + s[8]; + s[3] *= (s[13] | 1u); + s[9] ^= (s[3] & s[7]); + s[5] ^= s[9]; + s[12] += s[5]; + s[6] += s[12]; + s[3] -= s[6]; + s[13] *= (s[3] | 1u); + s[12] ^= (s[13] & s[15]); + s[3] = mh_rotl(s[3] ^ s[12], 11u); + s[0] = mh_rotl(s[0] ^ s[3], 22u); + s[9] += s[0] + 0x6379358cu; + s[8] ^= s[9]; + s[2] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 1u) + s[2]; + s[4] += s[9] + 0xc0eff105u; + s[10] ^= s[4]; + s[3] *= (s[10] | 1u); + s[11] += s[3]; + s[9] -= s[11]; + s[7] += s[9]; + s[9] -= s[7]; + s[8] = (s[8] ^ s[9]) * 0x820df9e3u; + s[2] = (s[2] ^ s[8]) * 0xe294988du; + s[7] = mh_rotl(s[7] ^ s[2], 20u); + s[6] += s[7]; + s[15] ^= s[6]; + s[9] *= (s[15] | 1u); + s[14] = mh_rotl(s[14] ^ s[9], 27u); + s[4] -= s[14]; + s[10] ^= s[4] ^ 0xea83d71fu; + s[3] = mh_rotl(s[3] ^ s[10], 23u); + s[10] += s[3]; + s[8] *= (s[10] | 1u); + s[1] ^= (s[8] & s[4]); + s[2] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[10] ^= s[14]; + s[14] += s[10]; + s[9] -= s[14]; + s[11] = (s[11] ^ s[9]) * 0xa98b9719u; + s[3] ^= s[11]; + s[5] = mh_rotl(s[5], 11u) + s[3]; + s[8] = (s[8] ^ s[5]) * 0x390f56e7u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[15] *= (s[10] | 1u); + s[1] = mh_rotl(s[1], 26u) + s[15]; + s[13] += (s[1] | s[15]); + s[10] = mh_rotl(s[10] ^ s[13], 17u); + s[1] -= s[10]; + s[15] -= s[1]; + s[4] += (s[15] | s[7]); + s[2] ^= s[4]; + s[0] ^= s[2] ^ 0x6f973e2fu; + s[3] = mh_rotl(s[3] ^ s[0], 29u); + s[4] = (s[4] ^ s[3]) * 0x0b66808fu; + s[3] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 12u) + s[3]; + s[10] *= (s[15] | 1u); + s[7] = (s[7] ^ s[10]) * 0x748e238bu; + s[14] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 21u); + s[15] *= (s[5] | 1u); + s[8] ^= s[15]; + s[7] ^= s[8] ^ 0x905950c7u; + s[8] ^= s[7]; + s[2] += s[8] + 0x28a71f71u; + s[9] += (s[2] | s[6]); + s[14] ^= (s[9] & s[10]); + s[13] ^= s[14] ^ 0x4778ae11u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[15] += s[0]; + s[14] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[14], 5u); + s[2] -= s[5]; + s[13] = mh_rotl(s[13], 18u) + s[2]; + s[10] -= s[13]; + s[9] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[9], 2u); + s[6] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[3] ^= s[2] ^ 0x3ded9adbu; + s[10] = s[10] * 0x4a716aafu + s[3]; + s[3] ^= s[10]; + s[12] = mh_rotl(s[12] ^ s[3], 16u); + s[3] += s[12]; + s[4] ^= s[3]; + s[13] ^= s[4]; + s[3] ^= s[13] ^ 0x244807b5u; + s[6] = s[6] * 0x3b67fdabu + s[3]; + s[14] = mh_rotl(s[14], 19u) + s[6]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] += s[8] + 0x283e5272u; + s[6] = mh_rotl(s[6], 17u) + s[4]; + s[4] ^= (s[6] & s[15]); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[9] = s[9] * 0x24d40dcbu + s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 22u); + s[3] += s[15]; + s[12] += s[3]; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 18u); + s[10] ^= s[15]; + s[14] += (s[10] | s[2]); + s[10] += s[14]; + s[2] = (s[2] ^ s[10]) * 0xbfbdab53u; + s[4] += s[2]; + s[8] += s[4] + 0x229e9450u; + s[2] ^= s[8]; + s[13] ^= s[2] ^ 0xd069b71au; + s[1] ^= s[13]; + s[14] = mh_rotl(s[14], 5u) + s[1]; + s[11] = mh_rotl(s[11], 11u) + s[14]; + s[2] ^= s[11]; + s[1] ^= s[2] ^ 0x87a0df98u; + s[3] ^= s[1] ^ 0x4012f8c8u; + s[10] ^= s[3]; + s[8] *= (s[10] | 1u); + s[3] += (s[8] | s[1]); + s[0] = mh_rotl(s[0], 24u) + s[3]; + s[10] += s[0] + 0x838435e8u; + s[3] = (s[3] ^ s[10]) * 0xd8ccc2b9u; + s[7] ^= s[3] ^ 0xa58f06ddu; + s[2] ^= s[7]; + s[0] += s[2]; + s[12] ^= s[0]; + s[6] ^= s[12]; + s[7] += s[6]; + s[12] = mh_rotl(s[12] ^ s[7], 25u); + s[4] ^= s[12]; + s[0] += (s[4] | s[5]); + s[11] *= (s[0] | 1u); + s[13] += s[11]; + s[15] = (s[15] ^ s[13]) * 0x49c15b43u; + s[10] = mh_rotl(s[10], 25u) + s[15]; + s[14] = mh_rotl(s[14] ^ s[10], 11u); + s[6] = mh_rotl(s[6], 28u) + s[14]; + s[5] *= (s[6] | 1u); + s[12] *= (s[5] | 1u); + s[3] *= (s[12] | 1u); + s[10] ^= s[3]; + s[15] ^= s[10]; + s[12] ^= s[15]; + s[6] ^= (s[12] & s[7]); + s[14] *= (s[6] | 1u); + s[12] ^= s[14] ^ 0xf5bafba8u; + s[15] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[15]; + s[9] ^= s[5]; + s[12] = mh_rotl(s[12], 6u) + s[9]; + s[10] ^= s[12]; + s[3] = (s[3] ^ s[10]) * 0x38f1a685u; + s[4] = s[4] * 0xcb7e5d23u + s[3]; + s[5] += s[4]; + s[10] = mh_rotl(s[10], 15u) + s[5]; + s[2] *= (s[10] | 1u); + s[12] -= s[2]; + s[7] ^= s[12]; + s[11] *= (s[7] | 1u); + s[6] = (s[6] ^ s[11]) * 0x72fff2bfu; + s[9] = mh_rotl(s[9], 9u) + s[6]; + s[11] *= (s[9] | 1u); + s[4] = mh_rotl(s[4] ^ s[11], 5u); + s[15] *= (s[4] | 1u); + s[13] = (s[13] ^ s[15]) * 0x137c61d9u; + s[9] += s[13]; + s[12] += (s[9] | s[8]); + s[7] = (s[7] ^ s[12]) * 0x60952fddu; + s[10] = mh_rotl(s[10] ^ s[7], 20u); + s[4] ^= s[10]; + s[2] ^= s[4]; + s[10] ^= s[2] ^ 0x1de54f3au; + s[14] ^= s[10]; + s[0] += s[14]; + s[12] ^= s[0] ^ 0x62facf82u; + s[15] ^= s[12]; + s[12] = mh_rotl(s[12], 13u) + s[15]; + s[14] = s[14] * 0xc82501bdu + s[12]; + s[0] -= s[14]; + s[11] = s[11] * 0x11744345u + s[0]; + s[3] = (s[3] ^ s[11]) * 0x9270eedfu; + s[9] += s[3] + 0x36b61dc9u; + s[15] += s[9] + 0x9d5947e1u; + s[8] = s[8] * 0x6f00fe17u + s[15]; + s[1] -= s[8]; + s[12] = (s[12] ^ s[1]) * 0x51e09723u; + s[4] += s[12]; + s[6] = mh_rotl(s[6], 23u) + s[4]; + s[11] += s[6] + 0x8b5f9427u; + s[7] *= (s[11] | 1u); + s[1] -= s[7]; + s[0] = s[0] * 0xab66ab6fu + s[1]; + s[13] *= (s[0] | 1u); + s[6] *= (s[13] | 1u); + s[9] += (s[6] | s[4]); + s[10] = (s[10] ^ s[9]) * 0x79592bfdu; + s[4] += s[10]; + s[5] = (s[5] ^ s[4]) * 0x8ba30269u; + s[3] = mh_rotl(s[3] ^ s[5], 17u); + s[9] += s[3] + 0x044adf30u; + s[0] = mh_rotl(s[0] ^ s[9], 5u); + s[14] ^= (s[0] & s[13]); + s[8] -= s[14]; + s[3] = (s[3] ^ s[8]) * 0xb32093b1u; + s[1] = mh_rotl(s[1] ^ s[3], 18u); + s[7] -= s[1]; + s[2] *= (s[7] | 1u); + s[14] = mh_rotl(s[14], 28u) + s[2]; + s[3] ^= s[14]; + s[14] += s[3]; + s[4] ^= s[14]; + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[15] = (s[15] ^ s[12]) * 0x35a4d8cbu; + s[14] += (s[15] | s[5]); + s[10] = mh_rotl(s[10] ^ s[14], 4u); + s[2] -= s[10]; + s[3] ^= s[2]; + s[11] = (s[11] ^ s[3]) * 0x1006ee2fu; + s[12] = mh_rotl(s[12], 20u) + s[11]; + s[4] = (s[4] ^ s[12]) * 0xca4aa4c3u; + s[15] *= (s[4] | 1u); + s[4] ^= (s[15] & s[3]); + s[13] -= s[4]; + s[10] += s[13] + 0xe5c86cb9u; + s[14] ^= s[10] ^ 0x5604f25du; + s[13] += s[14] + 0xe43d82cbu; + s[14] = mh_rotl(s[14] ^ s[13], 23u); + s[4] -= s[14]; + s[9] -= s[4]; + s[10] += s[9]; + s[9] += s[10]; + s[1] = (s[1] ^ s[9]) * 0x1bd8783du; + s[2] -= s[1]; + s[0] = (s[0] ^ s[2]) * 0x50dc547bu; + s[3] ^= s[0]; + s[6] -= s[3]; + s[2] += s[6]; + s[14] *= (s[2] | 1u); + s[10] ^= s[14]; + s[3] -= s[10]; + s[9] *= (s[3] | 1u); + s[4] = mh_rotl(s[4] ^ s[9], 1u); + s[9] += s[4]; + s[11] ^= s[9] ^ 0xcca1df60u; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0xfed45f11u; + s[6] = mh_rotl(s[6], 6u) + s[12]; + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[12] += s[13]; + s[5] -= s[12]; + s[10] = s[10] * 0xe661ba67u + s[5]; + s[6] = (s[6] ^ s[10]) * 0x38950a4fu; + s[9] = (s[9] ^ s[6]) * 0xd8e5439du; + s[11] = (s[11] ^ s[9]) * 0x5eb0f1a5u; + s[15] += s[11] + 0x4b16aaa7u; + s[7] += s[15]; + s[9] ^= s[7]; + s[8] ^= s[9] ^ 0x4e4132c7u; + s[6] += s[8]; + s[2] ^= s[6]; + s[13] -= s[2]; + s[9] += s[13] + 0x45441a4fu; + s[10] = mh_rotl(s[10] ^ s[9], 26u); + s[15] = mh_rotl(s[15], 23u) + s[10]; + s[14] ^= s[15]; + s[15] ^= s[14]; + s[11] = s[11] * 0x530c5d95u + s[15]; + s[12] += (s[11] | s[10]); + s[15] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[15], 28u); + s[9] = s[9] * 0x9d85d8abu + s[12]; + s[1] = mh_rotl(s[1], 23u) + s[9]; + s[5] = (s[5] ^ s[1]) * 0xab9db7cdu; + s[4] = (s[4] ^ s[5]) * 0xac76806du; + s[7] ^= s[4] ^ 0xb250e43cu; + s[10] += s[7]; + s[3] = mh_rotl(s[3], 15u) + s[10]; + s[2] += s[3] + 0x56ffdd08u; + s[10] ^= (s[2] & s[15]); + s[13] = mh_rotl(s[13] ^ s[10], 10u); + s[1] = mh_rotl(s[1], 11u) + s[13]; + s[3] -= s[1]; + s[13] = (s[13] ^ s[3]) * 0x7f82e3cbu; + s[11] = mh_rotl(s[11], 16u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[11], 8u); + s[15] = mh_rotl(s[15] ^ s[10], 8u); + s[14] -= s[15]; + s[5] ^= s[14]; + s[2] ^= s[5] ^ 0x8be07a00u; + s[4] = (s[4] ^ s[2]) * 0xf8afeb21u; + s[14] ^= s[4]; + s[2] = mh_rotl(s[2] ^ s[14], 1u); + s[9] -= s[2]; + s[11] = mh_rotl(s[11], 23u) + s[9]; + s[2] += s[11]; + s[11] = mh_rotl(s[11], 23u) + s[2]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[2] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 17u) + s[2]; + s[5] = s[5] * 0x02194355u + s[3]; + s[11] *= (s[5] | 1u); + s[1] *= (s[11] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 8u); + s[8] ^= s[10]; + s[9] += s[8]; + s[0] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[0]; + s[11] ^= (s[1] & s[2]); + s[13] = (s[13] ^ s[11]) * 0x6c9dbd19u; + s[11] += s[13]; + s[9] ^= s[11]; + s[3] = mh_rotl(s[3] ^ s[9], 6u); + s[15] *= (s[3] | 1u); + s[13] -= s[15]; + s[6] += s[13]; + s[9] ^= s[6] ^ 0x792555d6u; + s[3] = mh_rotl(s[3], 3u) + s[9]; + s[10] *= (s[3] | 1u); + s[2] = s[2] * 0x903bff0du + s[10]; + s[5] -= s[2]; + s[11] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[11], 31u); + s[11] -= s[9]; + s[2] = mh_rotl(s[2] ^ s[11], 24u); + s[5] = mh_rotl(s[5] ^ s[2], 24u); + s[7] += s[5]; + s[13] ^= s[7]; + s[12] -= s[13]; + s[5] += (s[12] | s[0]); + s[8] += s[5] + 0xaab979aau; + s[1] ^= s[8]; + s[13] += s[1] + 0xe5e6fc71u; + s[6] = mh_rotl(s[6] ^ s[13], 15u); + s[1] += s[6]; + s[2] += s[1]; + s[9] += (s[2] | s[11]); + s[10] ^= s[9]; + s[7] = s[7] * 0x2f536f71u + s[10]; + s[5] += s[7]; + s[0] = mh_rotl(s[0] ^ s[5], 5u); + s[13] -= s[0]; + s[9] += s[13]; + s[10] = mh_rotl(s[10] ^ s[9], 22u); + s[12] ^= (s[10] & s[13]); + s[6] += s[12] + 0x70c39328u; + s[2] += s[6] + 0x90a3925du; + s[10] += s[2]; + s[12] *= (s[10] | 1u); + s[9] -= s[12]; + s[10] = mh_rotl(s[10], 16u) + s[9]; + s[9] -= s[10]; + s[8] ^= (s[9] & s[15]); + s[4] ^= s[8]; + s[1] ^= s[4]; + s[3] = (s[3] ^ s[1]) * 0xc8cf6af9u; + s[12] ^= s[3]; + s[15] *= (s[12] | 1u); + s[1] = (s[1] ^ s[15]) * 0x19cdfb9du; + s[6] = s[6] * 0x199cfd21u + s[1]; + s[9] ^= s[6]; + s[12] *= (s[9] | 1u); + s[14] += s[12] + 0x2e1b9e84u; + s[11] = mh_rotl(s[11], 4u) + s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 22u); + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[4] ^= s[8]; + s[5] ^= s[4]; + s[11] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[11], 13u); + s[10] += s[8] + 0x50912ebdu; + s[14] = (s[14] ^ s[10]) * 0x0ba09b01u; + s[6] ^= s[14]; + s[7] ^= s[6]; + s[13] += (s[7] | s[14]); + s[14] -= s[13]; + s[1] ^= s[14] ^ 0x4ada39c6u; + s[10] ^= s[1]; + s[2] ^= (s[10] & s[9]); + s[12] += s[2] + 0x909c30c1u; + s[9] += s[12]; + s[0] ^= s[9]; + s[4] -= s[0]; + s[7] ^= s[4]; + s[4] = (s[4] ^ s[7]) * 0xf96f3573u; + s[3] += s[4] + 0x9c417efdu; + s[13] += (s[3] | s[5]); + s[4] += s[13]; + s[6] ^= s[4]; + s[14] += s[6] + 0xb0989acbu; + s[15] -= s[14]; + s[2] += s[15]; + s[6] += s[2]; + s[2] ^= s[6]; + s[15] = s[15] * 0x1e3b63f3u + s[2]; + s[7] ^= s[15]; + s[3] += s[7] + 0xbaedebabu; + s[9] += (s[3] | s[5]); + s[10] *= (s[9] | 1u); + s[9] += s[10]; + s[11] ^= s[9]; + s[2] *= (s[11] | 1u); + s[7] ^= s[2]; + s[1] += s[7]; + s[2] = (s[2] ^ s[1]) * 0x358e9d21u; + s[7] += s[2] + 0xa87c4bbfu; + s[5] = mh_rotl(s[5] ^ s[7], 9u); + s[7] += s[5] + 0x32cba03cu; + s[12] += s[7]; + s[3] ^= s[12] ^ 0x8eca1054u; + s[8] = (s[8] ^ s[3]) * 0xb2f6c0e3u; + s[4] = (s[4] ^ s[8]) * 0x13f1ccd5u; + s[3] = (s[3] ^ s[4]) * 0x73023badu; + s[15] -= s[3]; + s[3] *= (s[15] | 1u); + s[15] -= s[3]; + s[12] ^= s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 19u); + s[4] += s[10]; + s[11] ^= s[4]; + s[15] += s[11] + 0x1b7c0167u; + s[13] ^= (s[15] & s[12]); + s[10] = mh_rotl(s[10] ^ s[13], 27u); + s[11] -= s[10]; + s[6] += s[11] + 0xf9ac3792u; + s[4] = (s[4] ^ s[6]) * 0x52e3447bu; + s[1] = s[1] * 0xbe66f197u + s[4]; + s[9] = mh_rotl(s[9], 3u) + s[1]; + s[1] = mh_rotl(s[1] ^ s[9], 21u); + s[11] += s[1]; + s[14] ^= s[11]; + s[6] -= s[14]; + s[1] -= s[6]; + s[7] ^= s[1]; + s[3] ^= s[7] ^ 0xf278acc2u; + s[1] ^= s[3]; + s[0] = mh_rotl(s[0] ^ s[1], 6u); + s[3] += s[0]; + s[2] += s[3] + 0xe2de919du; + s[12] ^= s[2] ^ 0x988db119u; + s[9] += s[12]; + s[13] = mh_rotl(s[13] ^ s[9], 5u); + s[4] = (s[4] ^ s[13]) * 0x5d32587fu; + s[7] += s[4]; + s[15] ^= s[7]; + s[0] += s[15]; + s[9] = (s[9] ^ s[0]) * 0x2861edb3u; + s[5] = s[5] * 0x4f38626du + s[9]; + s[8] = mh_rotl(s[8] ^ s[5], 11u); + s[0] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[0], 6u); + s[9] += s[2]; + s[2] = mh_rotl(s[2], 8u) + s[9]; + s[12] -= s[2]; + s[2] -= s[12]; + s[15] ^= s[2]; + s[12] = mh_rotl(s[12], 16u) + s[15]; + s[5] = (s[5] ^ s[12]) * 0xeca1d1fdu; + s[3] -= s[5]; + s[13] = s[13] * 0x95ffad7fu + s[3]; + s[14] *= (s[13] | 1u); + s[9] ^= s[14]; + s[1] = (s[1] ^ s[9]) * 0xb641fe73u; + s[15] = (s[15] ^ s[1]) * 0x75882ff1u; + s[9] = mh_rotl(s[9] ^ s[15], 3u); + s[15] = mh_rotl(s[15], 28u) + s[9]; + s[11] *= (s[15] | 1u); + s[13] = (s[13] ^ s[11]) * 0xaedd87b7u; + s[5] *= (s[13] | 1u); + s[11] = s[11] * 0xde5d8dddu + s[5]; + s[10] += s[11]; + s[5] ^= (s[10] & s[12]); + s[9] = mh_rotl(s[9], 2u) + s[5]; + s[13] ^= s[9]; + s[5] ^= s[13]; + s[13] = mh_rotl(s[13], 22u) + s[5]; + s[11] ^= s[13] ^ 0x9f10934au; + s[5] += s[11] + 0xc4f2566bu; + s[14] -= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 30u); + s[4] += s[1]; + s[5] ^= (s[4] & s[14]); + s[9] ^= s[5]; + s[2] = mh_rotl(s[2] ^ s[9], 21u); + s[3] -= s[2]; + s[15] += s[3] + 0xd8e0689au; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[12] = (s[12] ^ s[8]) * 0x9f3839e7u; + s[11] = s[11] * 0x78af3d3fu + s[12]; + s[12] += s[11] + 0xf79cdc6cu; + s[14] += s[12]; + s[13] ^= s[14] ^ 0x2f851ec9u; + s[3] *= (s[13] | 1u); + s[4] ^= (s[3] & s[0]); + s[7] ^= s[4]; + s[0] ^= s[7]; + s[4] ^= s[0] ^ 0x74cd9833u; + s[10] = mh_rotl(s[10], 16u) + s[4]; + s[6] += s[10]; + s[5] += s[6]; + s[7] *= (s[5] | 1u); + s[8] ^= s[7] ^ 0xee20e634u; + s[10] = s[10] * 0x3e130e7du + s[8]; + s[8] += s[10] + 0x6f087e5bu; + s[14] ^= s[8]; + s[4] -= s[14]; + s[9] ^= (s[4] & s[6]); + s[12] = s[12] * 0xb460872fu + s[9]; + s[5] = mh_rotl(s[5] ^ s[12], 4u); + s[4] = mh_rotl(s[4] ^ s[5], 28u); + s[1] ^= s[4] ^ 0xf4365901u; + s[0] = mh_rotl(s[0], 18u) + s[1]; + s[5] -= s[0]; + s[6] = mh_rotl(s[6] ^ s[5], 28u); + s[13] ^= s[6] ^ 0xdf09c351u; + s[2] ^= s[13]; + s[4] -= s[2]; + s[11] -= s[4]; + s[9] += (s[11] | s[8]); + s[3] += (s[9] | s[14]); + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[11] ^= s[6]; + s[5] ^= s[11] ^ 0xb26a12d6u; + s[13] = mh_rotl(s[13], 27u) + s[5]; + s[7] += s[13]; + s[1] *= (s[7] | 1u); + s[14] -= s[1]; + s[5] += s[14]; + s[6] += s[5]; + s[7] += s[6]; + s[3] ^= s[7]; + s[2] ^= s[3] ^ 0x41710416u; + s[13] += s[2]; + s[15] = (s[15] ^ s[13]) * 0x936ce74fu; + s[13] += s[15] + 0xa69098ebu; + s[8] -= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[6] = (s[6] ^ s[4]) * 0x96ed276fu; + s[14] += s[6]; + s[5] += s[14] + 0x3dd7b109u; + s[9] ^= (s[5] & s[7]); + s[15] += s[9]; + s[12] += s[15]; + s[11] -= s[12]; + s[1] += s[11]; + s[2] ^= s[1]; + s[5] *= (s[2] | 1u); + s[14] += s[5] + 0xe10aa4d3u; + s[5] = (s[5] ^ s[14]) * 0x91132d1fu; + s[10] += s[5]; + s[13] ^= s[10]; + s[5] = (s[5] ^ s[13]) * 0xec9ae3adu; + s[11] += s[5]; + s[7] += s[11]; + s[14] += s[7] + 0xf32ce180u; + s[0] ^= s[14]; + s[11] += s[0]; + s[12] *= (s[11] | 1u); + s[11] ^= s[12] ^ 0xb1b1fa56u; + s[5] ^= s[11]; + s[11] = (s[11] ^ s[5]) * 0x7afecfd5u; + s[10] -= s[11]; + s[12] += s[10]; + s[15] *= (s[12] | 1u); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[5] += s[11]; + s[7] = mh_rotl(s[7] ^ s[5], 13u); + s[5] = mh_rotl(s[5], 10u) + s[7]; + s[14] += s[5]; + s[3] += (s[14] | s[15]); + s[6] = s[6] * 0xfd4cbce5u + s[3]; + s[13] += s[6]; + s[12] += s[13]; + s[2] = s[2] * 0x1567d149u + s[12]; + s[9] += (s[2] | s[14]); + s[11] = (s[11] ^ s[9]) * 0xcd1282cfu; + s[10] = s[10] * 0xec337bd7u + s[11]; + s[4] += s[10]; + s[15] ^= s[4]; + s[2] += (s[15] | s[14]); + s[3] ^= s[2]; + s[5] *= (s[3] | 1u); + s[14] += (s[5] | s[4]); + s[7] += s[14] + 0x15993573u; + s[11] -= s[7]; + s[4] += (s[11] | s[13]); + s[8] += s[4]; + s[2] = s[2] * 0x97007c67u + s[8]; + s[11] = s[11] * 0x918bfbb7u + s[2]; + s[10] ^= s[11]; + s[6] += s[10]; + s[13] -= s[6]; + s[6] *= (s[13] | 1u); + s[2] += s[6] + 0x029f336cu; + s[1] = (s[1] ^ s[2]) * 0x773956e7u; + s[8] = (s[8] ^ s[1]) * 0x5b779023u; + s[4] = mh_rotl(s[4] ^ s[8], 6u); + s[12] = mh_rotl(s[12] ^ s[4], 29u); + s[14] -= s[12]; + s[2] *= (s[14] | 1u); + s[15] -= s[2]; + s[11] += s[15]; + s[9] = mh_rotl(s[9] ^ s[11], 13u); + s[7] += s[9] + 0xf4431694u; + s[13] ^= s[7]; + s[15] ^= s[13]; + s[12] ^= s[15] ^ 0xd1599731u; + s[7] = (s[7] ^ s[12]) * 0x8ced34cbu; + s[6] = s[6] * 0xd04c1dd5u + s[7]; + s[1] = mh_rotl(s[1] ^ s[6], 25u); + s[2] = mh_rotl(s[2], 26u) + s[1]; + s[10] = mh_rotl(s[10] ^ s[2], 21u); + s[12] ^= s[10] ^ 0x551385afu; + s[13] = mh_rotl(s[13] ^ s[12], 17u); + s[2] ^= s[13]; + s[5] ^= s[2] ^ 0x836874e8u; + s[10] += s[5] + 0xd9ec8d60u; + s[7] = mh_rotl(s[7] ^ s[10], 14u); + s[8] = mh_rotl(s[8] ^ s[7], 14u); + s[5] ^= s[8] ^ 0x076cb7e0u; + s[12] += s[5]; + s[13] ^= s[12]; + s[9] -= s[13]; + s[12] ^= s[9] ^ 0xffb78f00u; + s[0] += s[12]; + s[8] += s[0]; + s[4] = s[4] * 0x09be199fu + s[8]; + s[15] ^= (s[4] & s[11]); + s[11] = mh_rotl(s[11], 17u) + s[15]; + s[0] += s[11]; + s[14] ^= (s[0] & s[11]); + s[6] = s[6] * 0x062bb8b9u + s[14]; + s[13] += s[6]; + s[7] ^= s[13]; + s[2] ^= s[7]; + s[4] ^= s[2]; + s[12] = mh_rotl(s[12] ^ s[4], 16u); + s[1] ^= s[12]; + s[10] = s[10] * 0xaf1b9323u + s[1]; + s[2] *= (s[10] | 1u); + s[7] = s[7] * 0xc1c09eb5u + s[2]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[9] *= (s[1] | 1u); + s[7] *= (s[9] | 1u); + s[3] += (s[7] | s[15]); + s[6] += s[3]; + s[13] *= (s[6] | 1u); + s[10] += s[13]; + s[9] *= (s[10] | 1u); + s[2] ^= s[9]; + s[1] = mh_rotl(s[1], 24u) + s[2]; + s[8] += s[1]; + s[15] += s[8]; + s[11] ^= s[15]; + s[9] ^= (s[11] & s[14]); + s[4] ^= s[9] ^ 0x9fb9924fu; + s[9] ^= (s[4] & s[11]); + s[4] = mh_rotl(s[4], 18u) + s[9]; + s[2] -= s[4]; + s[10] ^= s[2]; + s[9] += s[10] + 0x47548619u; + s[5] += (s[9] | s[0]); + s[13] = mh_rotl(s[13], 4u) + s[5]; + s[0] *= (s[13] | 1u); + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] -= s[6]; + s[6] = (s[6] ^ s[2]) * 0x19ae11d5u; + s[15] ^= s[6]; + s[14] = mh_rotl(s[14] ^ s[15], 8u); + s[5] *= (s[14] | 1u); + s[12] ^= s[5]; + s[9] *= (s[12] | 1u); + s[0] += s[9] + 0xf019817bu; + s[13] += (s[0] | s[15]); + s[11] ^= s[13]; + s[12] -= s[11]; + s[7] *= (s[12] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[7]; + s[13] -= s[9]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 1u) + s[2]; + s[10] += s[0] + 0xa639dd25u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[7] ^= s[4] ^ 0x4d7e8a6du; + s[8] ^= s[7]; + s[11] += s[8]; + s[10] = mh_rotl(s[10], 8u) + s[11]; + s[0] += s[10]; + s[11] ^= s[0] ^ 0x721aef7cu; + s[4] = mh_rotl(s[4], 1u) + s[11]; + s[5] *= (s[4] | 1u); + s[11] *= (s[5] | 1u); + s[8] ^= s[11] ^ 0xcc314719u; + s[6] = (s[6] ^ s[8]) * 0x6487d2b7u; + s[0] = mh_rotl(s[0] ^ s[6], 14u); + s[9] = mh_rotl(s[9], 18u) + s[0]; + s[5] = mh_rotl(s[5], 1u) + s[9]; + s[9] += s[5] + 0xa383dfd9u; + s[10] ^= s[9]; + s[1] += s[10]; + s[15] += s[1]; + s[7] += s[15]; + s[5] += (s[7] | s[1]); + s[7] += (s[5] | s[3]); + s[6] = (s[6] ^ s[7]) * 0x184ce043u; + s[4] ^= s[6]; + s[2] = mh_rotl(s[2], 3u) + s[4]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_2(thread uint* s) { + s[14] += s[0]; + s[5] = mh_rotl(s[5], 7u) + s[14]; + s[3] += s[5]; + s[6] ^= s[3]; + s[3] += s[6]; + s[8] += (s[3] | s[10]); + s[15] += s[8]; + s[5] -= s[15]; + s[8] -= s[5]; + s[3] = mh_rotl(s[3], 24u) + s[8]; + s[8] = mh_rotl(s[8] ^ s[3], 17u); + s[1] += s[8]; + s[7] = s[7] * 0xf236f555u + s[1]; + s[15] *= (s[7] | 1u); + s[4] = (s[4] ^ s[15]) * 0x367da263u; + s[14] ^= (s[4] & s[10]); + s[3] += s[14]; + s[9] = s[9] * 0xa86cb8a5u + s[3]; + s[1] += s[9] + 0x729e8820u; + s[14] *= (s[1] | 1u); + s[13] += s[14]; + s[0] += (s[13] | s[15]); + s[8] ^= s[0] ^ 0x36ce8d99u; + s[15] ^= s[8]; + s[5] *= (s[15] | 1u); + s[10] ^= s[5] ^ 0xc281b62bu; + s[5] = s[5] * 0x4c18c9c1u + s[10]; + s[9] = s[9] * 0x683b0045u + s[5]; + s[2] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[2], 17u); + s[11] ^= s[9]; + s[6] ^= s[11]; + s[1] = (s[1] ^ s[6]) * 0xf967d211u; + s[9] += s[1]; + s[14] += s[9]; + s[11] = mh_rotl(s[11] ^ s[14], 7u); + s[5] += (s[11] | s[7]); + s[8] ^= (s[5] & s[0]); + s[11] ^= s[8]; + s[4] = (s[4] ^ s[11]) * 0xd7e0bb7fu; + s[12] -= s[4]; + s[7] = mh_rotl(s[7], 11u) + s[12]; + s[1] += (s[7] | s[12]); + s[9] += s[1]; + s[8] ^= (s[9] & s[2]); + s[15] = mh_rotl(s[15], 8u) + s[8]; + s[0] = mh_rotl(s[0], 6u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[0], 7u); + s[5] = mh_rotl(s[5], 18u) + s[13]; + s[6] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[11] = s[11] * 0xf05cf87fu + s[1]; + s[0] = mh_rotl(s[0], 5u) + s[11]; + s[9] += s[0]; + s[12] ^= s[9]; + s[15] = (s[15] ^ s[12]) * 0x4b3b7b5fu; + s[14] += s[15]; + s[3] = (s[3] ^ s[14]) * 0xc25fd2f5u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[12] = (s[12] ^ s[14]) * 0x2ccccc23u; + s[3] ^= s[12] ^ 0xe0a8d819u; + s[14] ^= s[3]; + s[15] ^= s[14]; + s[11] += s[15]; + s[2] ^= s[11]; + s[11] ^= s[2]; + s[4] = mh_rotl(s[4] ^ s[11], 2u); + s[15] = mh_rotl(s[15], 5u) + s[4]; + s[5] = (s[5] ^ s[15]) * 0x8678e679u; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[13] += s[15] + 0xe037af3du; + s[14] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[14], 5u); + s[14] = (s[14] ^ s[3]) * 0xf94dfba9u; + s[11] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[11], 8u); + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7], 17u) + s[15]; + s[2] = mh_rotl(s[2], 17u) + s[7]; + s[12] = (s[12] ^ s[2]) * 0xd427d34fu; + s[2] ^= s[12]; + s[3] += s[2]; + s[13] ^= s[3]; + s[6] *= (s[13] | 1u); + s[7] -= s[6]; + s[15] += s[7]; + s[0] = s[0] * 0x6811cec1u + s[15]; + s[12] *= (s[0] | 1u); + s[4] += (s[12] | s[11]); + s[3] = mh_rotl(s[3] ^ s[4], 15u); + s[7] = mh_rotl(s[7], 21u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[7], 17u); + s[6] = s[6] * 0xe5adc811u + s[15]; + s[12] = (s[12] ^ s[6]) * 0x5156a379u; + s[3] += s[12]; + s[9] ^= s[3] ^ 0x25367eecu; + s[11] += s[9]; + s[4] ^= s[11] ^ 0xb721ecfeu; + s[6] = mh_rotl(s[6], 15u) + s[4]; + s[4] ^= s[6]; + s[13] = (s[13] ^ s[4]) * 0x567d866du; + s[7] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 30u) + s[7]; + s[13] = mh_rotl(s[13] ^ s[0], 8u); + s[11] ^= s[13] ^ 0xf7bdb888u; + s[1] = (s[1] ^ s[11]) * 0x5a32e7abu; + s[0] = mh_rotl(s[0], 24u) + s[1]; + s[4] = s[4] * 0x20f1b36bu + s[0]; + s[11] = (s[11] ^ s[4]) * 0x65a77da9u; + s[2] += s[11]; + s[3] += s[2] + 0x99328ba9u; + s[13] -= s[3]; + s[6] ^= (s[13] & s[3]); + s[2] += s[6]; + s[6] = mh_rotl(s[6] ^ s[2], 30u); + s[9] ^= s[6] ^ 0x6a4c2898u; + s[15] -= s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 26u); + s[2] ^= (s[12] & s[9]); + s[5] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 14u); + s[8] ^= (s[13] & s[6]); + s[5] += s[8] + 0xe7f53827u; + s[14] *= (s[5] | 1u); + s[8] ^= s[14] ^ 0xceef5db4u; + s[14] ^= s[8]; + s[7] ^= s[14] ^ 0xeb56858cu; + s[2] = (s[2] ^ s[7]) * 0x4dd73993u; + s[12] -= s[2]; + s[2] -= s[12]; + s[11] += s[2]; + s[9] *= (s[11] | 1u); + s[3] ^= s[9]; + s[4] = (s[4] ^ s[3]) * 0x8ed152e9u; + s[12] -= s[4]; + s[6] ^= s[12]; + s[7] -= s[6]; + s[3] ^= (s[7] & s[0]); + s[5] = mh_rotl(s[5] ^ s[3], 30u); + s[2] = mh_rotl(s[2], 12u) + s[5]; + s[9] = s[9] * 0x606d8c4fu + s[2]; + s[11] += s[9]; + s[9] -= s[11]; + s[14] ^= s[9]; + s[2] = s[2] * 0xa408d01du + s[14]; + s[12] ^= (s[2] & s[11]); + s[7] *= (s[12] | 1u); + s[10] -= s[7]; + s[11] ^= (s[10] & s[4]); + s[6] += s[11]; + s[1] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[1], 8u); + s[0] = mh_rotl(s[0], 28u) + s[5]; + s[11] -= s[0]; + s[3] *= (s[11] | 1u); + s[8] -= s[3]; + s[6] -= s[8]; + s[12] -= s[6]; + s[6] = (s[6] ^ s[12]) * 0x77a5979du; + s[5] = mh_rotl(s[5], 7u) + s[6]; + s[11] = (s[11] ^ s[5]) * 0xbb2a5277u; + s[10] -= s[11]; + s[13] += (s[10] | s[4]); + s[5] += s[13]; + s[7] += s[5]; + s[3] += s[7] + 0x679f3a15u; + s[9] = (s[9] ^ s[3]) * 0x3b759ea1u; + s[5] += (s[9] | s[6]); + s[14] *= (s[5] | 1u); + s[4] -= s[14]; + s[10] = (s[10] ^ s[4]) * 0x7438b4f1u; + s[12] = mh_rotl(s[12], 31u) + s[10]; + s[1] ^= (s[12] & s[3]); + s[14] ^= s[1]; + s[11] ^= s[14]; + s[0] -= s[11]; + s[15] = mh_rotl(s[15], 29u) + s[0]; + s[14] ^= s[15] ^ 0xdb4b51feu; + s[3] ^= s[14]; + s[2] += s[3]; + s[3] ^= s[2]; + s[1] *= (s[3] | 1u); + s[14] -= s[1]; + s[2] = s[2] * 0xa602880du + s[14]; + s[9] *= (s[2] | 1u); + s[10] += (s[9] | s[0]); + s[0] = s[0] * 0x1da05fddu + s[10]; + s[14] = s[14] * 0x5524fa43u + s[0]; + s[7] += s[14]; + s[3] = mh_rotl(s[3] ^ s[7], 12u); + s[8] = (s[8] ^ s[3]) * 0x93b798bbu; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[2] -= s[11]; + s[9] += s[2] + 0x7e63761fu; + s[13] += s[9] + 0x6a2b3abcu; + s[15] = mh_rotl(s[15], 31u) + s[13]; + s[14] *= (s[15] | 1u); + s[1] ^= (s[14] & s[15]); + s[6] ^= s[1]; + s[15] += (s[6] | s[9]); + s[0] ^= s[15]; + s[8] -= s[0]; + s[13] = mh_rotl(s[13] ^ s[8], 29u); + s[10] = s[10] * 0x81dc8267u + s[13]; + s[12] = mh_rotl(s[12], 6u) + s[10]; + s[14] ^= s[12]; + s[10] -= s[14]; + s[0] = (s[0] ^ s[10]) * 0xc6809ffdu; + s[12] = (s[12] ^ s[0]) * 0x90188547u; + s[8] = mh_rotl(s[8], 23u) + s[12]; + s[2] ^= s[8]; + s[5] = mh_rotl(s[5], 21u) + s[2]; + s[13] = mh_rotl(s[13] ^ s[5], 6u); + s[11] = (s[11] ^ s[13]) * 0x23339351u; + s[6] = mh_rotl(s[6] ^ s[11], 24u); + s[2] ^= (s[6] & s[7]); + s[11] *= (s[2] | 1u); + s[8] += s[11] + 0x64aea95au; + s[3] ^= s[8]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[6] ^= s[0]; + s[3] = s[3] * 0x6da4a1e5u + s[6]; + s[13] = s[13] * 0x16181847u + s[3]; + s[0] -= s[13]; + s[12] += s[0]; + s[14] = mh_rotl(s[14] ^ s[12], 22u); + s[6] += s[14]; + s[1] = mh_rotl(s[1] ^ s[6], 26u); + s[14] -= s[1]; + s[8] += s[14] + 0x57302d8du; + s[5] = s[5] * 0xfae0a1ebu + s[8]; + s[10] *= (s[5] | 1u); + s[1] *= (s[10] | 1u); + s[0] *= (s[1] | 1u); + s[7] = mh_rotl(s[7], 11u) + s[0]; + s[3] *= (s[7] | 1u); + s[4] += s[3]; + s[1] ^= s[4]; + s[4] ^= s[1]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[0] *= (s[1] | 1u); + s[6] += s[0]; + s[0] += s[6] + 0xa48f59d6u; + s[2] += s[0] + 0xd890ff08u; + s[10] -= s[2]; + s[6] ^= s[10]; + s[11] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 25u); + s[5] *= (s[13] | 1u); + s[3] += s[5] + 0xf143105eu; + s[2] = s[2] * 0x9c957b8fu + s[3]; + s[12] = (s[12] ^ s[2]) * 0x5542792du; + s[13] = mh_rotl(s[13], 27u) + s[12]; + s[1] -= s[13]; + s[3] += s[1]; + s[11] ^= s[3]; + s[10] = (s[10] ^ s[11]) * 0xbd220965u; + s[1] *= (s[10] | 1u); + s[7] -= s[1]; + s[15] = mh_rotl(s[15], 28u) + s[7]; + s[1] = mh_rotl(s[1], 12u) + s[15]; + s[8] -= s[1]; + s[9] = (s[9] ^ s[8]) * 0x35be18f5u; + s[4] += (s[9] | s[1]); + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[0] ^= s[14]; + s[12] *= (s[0] | 1u); + s[3] -= s[12]; + s[15] = mh_rotl(s[15], 14u) + s[3]; + s[0] += s[15]; + s[11] = mh_rotl(s[11], 26u) + s[0]; + s[15] += s[11] + 0xc1c2e89fu; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[11] ^= s[4]; + s[0] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[0], 1u); + s[12] += s[13] + 0xd57fd3ddu; + s[9] ^= s[12] ^ 0xe5c431c8u; + s[6] ^= s[9] ^ 0xcc67fed2u; + s[13] ^= s[6]; + s[4] ^= s[13] ^ 0xfe05a3a3u; + s[2] = s[2] * 0x8c03bf67u + s[4]; + s[0] += s[2]; + s[11] += s[0]; + s[7] ^= s[11]; + s[13] = s[13] * 0xfb6d3733u + s[7]; + s[6] ^= s[13]; + s[2] ^= s[6] ^ 0x4efcdfbfu; + s[13] *= (s[2] | 1u); + s[12] ^= s[13]; + s[11] -= s[12]; + s[9] ^= s[11]; + s[4] = mh_rotl(s[4], 10u) + s[9]; + s[12] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[12], 22u); + s[15] += s[9]; + s[3] -= s[15]; + s[7] ^= (s[3] & s[9]); + s[9] += s[7]; + s[8] = (s[8] ^ s[9]) * 0x410e2049u; + s[3] ^= s[8]; + s[12] += s[3]; + s[8] ^= (s[12] & s[6]); + s[0] ^= s[8]; + s[13] += (s[0] | s[3]); + s[7] ^= s[13] ^ 0x0eb1588eu; + s[15] *= (s[7] | 1u); + s[5] += s[15]; + s[1] ^= s[5]; + s[4] = mh_rotl(s[4], 16u) + s[1]; + s[10] += s[4]; + s[0] += s[10]; + s[9] = (s[9] ^ s[0]) * 0x346b3e53u; + s[0] *= (s[9] | 1u); + s[2] -= s[0]; + s[12] = s[12] * 0xa1f90d81u + s[2]; + s[1] += s[12]; + s[0] = s[0] * 0xef4fd54fu + s[1]; + s[1] ^= s[0]; + s[7] ^= s[1]; + s[3] = mh_rotl(s[3] ^ s[7], 21u); + s[13] += (s[3] | s[8]); + s[11] ^= s[13]; + s[13] ^= s[11]; + s[3] += s[13]; + s[0] -= s[3]; + s[15] *= (s[0] | 1u); + s[10] += s[15] + 0x4d178b4du; + s[15] = mh_rotl(s[15], 25u) + s[10]; + s[8] *= (s[15] | 1u); + s[12] *= (s[8] | 1u); + s[13] = mh_rotl(s[13] ^ s[12], 30u); + s[15] ^= s[13]; + s[6] += s[15]; + s[5] *= (s[6] | 1u); + s[12] -= s[5]; + s[0] -= s[12]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[14] += s[3] + 0x83e089e4u; + s[15] *= (s[14] | 1u); + s[7] = mh_rotl(s[7] ^ s[15], 26u); + s[13] += (s[7] | s[3]); + s[7] -= s[13]; + s[11] ^= s[7]; + s[9] ^= s[11]; + s[5] += s[9]; + s[14] += s[5]; + s[4] ^= (s[14] & s[0]); + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[13] ^= s[0] ^ 0x3d84c4aeu; + s[10] *= (s[13] | 1u); + s[13] += s[10] + 0x754c3314u; + s[9] += s[13]; + s[3] ^= s[9]; + s[0] += s[3]; + s[7] = (s[7] ^ s[0]) * 0x92f74007u; + s[13] += s[7]; + s[6] ^= s[13]; + s[7] = (s[7] ^ s[6]) * 0x63936a19u; + s[10] += s[7] + 0xadf24f99u; + s[5] = s[5] * 0xd55fb891u + s[10]; + s[8] = mh_rotl(s[8] ^ s[5], 13u); + s[13] = mh_rotl(s[13] ^ s[8], 28u); + s[15] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[15], 31u); + s[0] += s[3]; + s[12] += s[0]; + s[6] ^= s[12]; + s[1] -= s[6]; + s[0] = mh_rotl(s[0], 8u) + s[1]; + s[3] = mh_rotl(s[3], 11u) + s[0]; + s[13] ^= s[3]; + s[2] += s[13]; + s[0] = mh_rotl(s[0], 28u) + s[2]; + s[1] += s[0]; + s[15] ^= s[1] ^ 0x0710d7aau; + s[4] ^= s[15] ^ 0x0c102325u; + s[0] ^= (s[4] & s[6]); + s[2] = mh_rotl(s[2] ^ s[0], 20u); + s[8] += s[2]; + s[7] -= s[8]; + s[11] *= (s[7] | 1u); + s[3] = (s[3] ^ s[11]) * 0x2992aef3u; + s[10] = mh_rotl(s[10] ^ s[3], 6u); + s[5] ^= s[10]; + s[7] -= s[5]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[7] = (s[7] ^ s[1]) * 0x30802407u; + s[8] += s[7] + 0x4da006c2u; + s[2] = mh_rotl(s[2] ^ s[8], 31u); + s[6] *= (s[2] | 1u); + s[7] += s[6]; + s[2] -= s[7]; + s[1] -= s[2]; + s[13] -= s[1]; + s[9] += s[13]; + s[5] = (s[5] ^ s[9]) * 0xb8aec3c9u; + s[9] ^= (s[5] & s[3]); + s[2] ^= s[9]; + s[14] ^= s[2]; + s[9] ^= s[14] ^ 0xbffbdbeeu; + s[3] = mh_rotl(s[3] ^ s[9], 20u); + s[5] = mh_rotl(s[5], 24u) + s[3]; + s[13] = mh_rotl(s[13], 15u) + s[5]; + s[6] ^= s[13]; + s[4] += s[6]; + s[6] += s[4]; + s[8] += s[6]; + s[10] -= s[8]; + s[7] += s[10] + 0x607c17d6u; + s[12] = (s[12] ^ s[7]) * 0x5f96043du; + s[14] += s[12]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[2] += s[5]; + s[0] -= s[2]; + s[14] ^= s[0]; + s[15] ^= s[14] ^ 0xc5076b2cu; + s[1] = (s[1] ^ s[15]) * 0x35f61ca7u; + s[12] = mh_rotl(s[12] ^ s[1], 29u); + s[4] = mh_rotl(s[4], 24u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0x3e4c118bu; + s[4] = (s[4] ^ s[7]) * 0x124571a3u; + s[6] += s[4]; + s[12] -= s[6]; + s[4] -= s[12]; + s[13] -= s[4]; + s[9] += s[13] + 0x66802483u; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[8] -= s[15]; + s[4] = mh_rotl(s[4] ^ s[8], 30u); + s[7] *= (s[4] | 1u); + s[11] ^= s[7]; + s[0] = mh_rotl(s[0], 21u) + s[11]; + s[11] ^= s[0]; + s[2] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[2], 3u); + s[9] += (s[1] | s[7]); + s[0] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[0], 12u); + s[14] += s[3]; + s[6] += s[14] + 0xb50b59d6u; + s[4] = (s[4] ^ s[6]) * 0x1eecbc9fu; + s[6] = mh_rotl(s[6], 24u) + s[4]; + s[12] ^= s[6]; + s[2] += s[12]; + s[7] = s[7] * 0xffe0b5bbu + s[2]; + s[5] = mh_rotl(s[5], 4u) + s[7]; + s[14] ^= s[5]; + s[1] = mh_rotl(s[1] ^ s[14], 1u); + s[10] ^= s[1]; + s[1] = s[1] * 0xb57f1b41u + s[10]; + s[15] = (s[15] ^ s[1]) * 0xb49d4c67u; + s[7] *= (s[15] | 1u); + s[1] ^= s[7] ^ 0x835c5c94u; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[3] = mh_rotl(s[3] ^ s[8], 18u); + s[5] ^= s[3]; + s[8] = mh_rotl(s[8], 12u) + s[5]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[8] = s[8] * 0xa6e14777u + s[15]; + s[13] ^= s[8] ^ 0xda9c793bu; + s[3] ^= s[13]; + s[4] ^= s[3]; + s[0] = (s[0] ^ s[4]) * 0x41a7651bu; + s[15] = s[15] * 0xa762cc89u + s[0]; + s[12] = (s[12] ^ s[15]) * 0x401d997fu; + s[7] = mh_rotl(s[7] ^ s[12], 13u); + s[11] += s[7]; + s[4] ^= s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6]; + s[11] *= (s[9] | 1u); + s[3] = (s[3] ^ s[11]) * 0xe248840du; + s[12] += s[3]; + s[4] = s[4] * 0x6d65a44bu + s[12]; + s[14] -= s[4]; + s[5] += s[14]; + s[14] += (s[5] | s[7]); + s[9] = mh_rotl(s[9], 9u) + s[14]; + s[4] += s[9]; + s[13] ^= s[4]; + s[11] += (s[13] | s[5]); + s[1] = s[1] * 0x51f48ab1u + s[11]; + s[11] *= (s[1] | 1u); + s[14] -= s[11]; + s[2] = s[2] * 0x149a38f3u + s[14]; + s[0] = (s[0] ^ s[2]) * 0xe80fd119u; + s[11] *= (s[0] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 4u); + s[4] = mh_rotl(s[4] ^ s[8], 17u); + s[6] = (s[6] ^ s[4]) * 0x383cb6c5u; + s[11] ^= s[6]; + s[7] += s[11]; + s[12] = mh_rotl(s[12] ^ s[7], 19u); + s[6] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 23u); + s[1] ^= s[15] ^ 0xb1dc5f0au; + s[13] -= s[1]; + s[4] -= s[13]; + s[1] = mh_rotl(s[1], 8u) + s[4]; + s[2] -= s[1]; + s[1] += s[2]; + s[10] ^= s[1] ^ 0x28905198u; + s[2] ^= s[10]; + s[3] *= (s[2] | 1u); + s[10] -= s[3]; + s[13] ^= s[10]; + s[6] *= (s[13] | 1u); + s[0] += (s[6] | s[5]); + s[7] ^= s[0]; + s[2] = (s[2] ^ s[7]) * 0xcd1889adu; + s[1] += s[2]; + s[11] += s[1]; + s[6] ^= s[11]; + s[13] *= (s[6] | 1u); + s[9] = (s[9] ^ s[13]) * 0x759b3279u; + s[2] -= s[9]; + s[8] = s[8] * 0xab1fffc9u + s[2]; + s[7] *= (s[8] | 1u); + s[11] ^= s[7]; + s[7] *= (s[11] | 1u); + s[9] += s[7]; + s[0] = mh_rotl(s[0], 22u) + s[9]; + s[13] += (s[0] | s[14]); + s[4] ^= s[13]; + s[9] -= s[4]; + s[6] ^= s[9]; + s[8] *= (s[6] | 1u); + s[10] = mh_rotl(s[10], 14u) + s[8]; + s[13] *= (s[10] | 1u); + s[7] ^= (s[13] & s[14]); + s[8] -= s[7]; + s[9] ^= s[8]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[9] = (s[9] ^ s[0]) * 0x94665a0fu; + s[3] += (s[9] | s[5]); + s[13] += s[3] + 0x76335011u; + s[5] *= (s[13] | 1u); + s[10] = mh_rotl(s[10] ^ s[5], 4u); + s[2] += s[10]; + s[0] += s[2] + 0xe5c5c4eeu; + s[10] ^= s[0]; + s[8] -= s[10]; + s[5] += s[8]; + s[12] += s[5]; + s[8] = mh_rotl(s[8] ^ s[12], 17u); + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[0] = mh_rotl(s[0] ^ s[7], 15u); + s[1] ^= s[0] ^ 0x269a357bu; + s[9] += s[1]; + s[11] += s[9]; + s[10] = mh_rotl(s[10] ^ s[11], 7u); + s[0] ^= s[10]; + s[4] += s[0]; + s[14] = mh_rotl(s[14] ^ s[4], 27u); + s[15] += s[14]; + s[12] = s[12] * 0xa38e176du + s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 10u); + s[0] ^= s[2]; + s[12] = mh_rotl(s[12], 10u) + s[0]; + s[3] += s[12] + 0x3a7b8b35u; + s[10] += s[3]; + s[8] ^= s[10]; + s[1] = mh_rotl(s[1] ^ s[8], 25u); + s[13] += s[1] + 0xa6fef564u; + s[12] += s[13]; + s[7] ^= s[12]; + s[3] = mh_rotl(s[3] ^ s[7], 13u); + s[1] ^= s[3]; + s[13] = mh_rotl(s[13] ^ s[1], 31u); + s[0] = mh_rotl(s[0] ^ s[13], 25u); + s[7] += s[0]; + s[10] -= s[7]; + s[6] = mh_rotl(s[6], 5u) + s[10]; + s[10] -= s[6]; + s[9] -= s[10]; + s[11] -= s[9]; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[9] = s[9] * 0x524dda45u + s[4]; + s[1] -= s[9]; + s[14] = (s[14] ^ s[1]) * 0x726e8ac3u; + s[7] = mh_rotl(s[7], 23u) + s[14]; + s[11] = mh_rotl(s[11], 24u) + s[7]; + s[14] ^= s[11]; + s[9] -= s[14]; + s[4] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[4], 30u); + s[13] ^= s[9]; + s[5] -= s[13]; + s[10] = mh_rotl(s[10], 2u) + s[5]; + s[15] ^= s[10]; + s[5] += s[15]; + s[11] = (s[11] ^ s[5]) * 0xc4aae5c1u; + s[4] = mh_rotl(s[4], 22u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[4], 2u); + s[1] ^= s[13] ^ 0x9400d36bu; + s[8] *= (s[1] | 1u); + s[4] = mh_rotl(s[4], 24u) + s[8]; + s[14] = s[14] * 0xc442e3d7u + s[4]; + s[11] = mh_rotl(s[11], 19u) + s[14]; + s[2] = (s[2] ^ s[11]) * 0xebbc49b9u; + s[14] = mh_rotl(s[14] ^ s[2], 19u); + s[13] += s[14]; + s[14] ^= s[13]; + s[9] *= (s[14] | 1u); + s[2] ^= (s[9] & s[13]); + s[8] -= s[2]; + s[3] = mh_rotl(s[3] ^ s[8], 3u); + s[7] = s[7] * 0x576da3b7u + s[3]; + s[0] += (s[7] | s[8]); + s[1] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[11] += s[15]; + s[9] ^= s[11]; + s[14] ^= s[9]; + s[9] += s[14]; + s[5] += s[9]; + s[1] *= (s[5] | 1u); + s[0] += s[1]; + s[7] ^= s[0]; + s[2] += s[7]; + s[14] = (s[14] ^ s[2]) * 0x58412f09u; + s[11] = mh_rotl(s[11] ^ s[14], 12u); + s[3] = mh_rotl(s[3], 6u) + s[11]; + s[14] = (s[14] ^ s[3]) * 0x00dd684fu; + s[4] -= s[14]; + s[9] += s[4] + 0x550edca7u; + s[11] = (s[11] ^ s[9]) * 0xbbfbfe77u; + s[13] += s[11]; + s[11] += s[13]; + s[8] += s[11]; + s[5] += s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 29u); + s[12] += s[15]; + s[1] ^= s[12]; + s[6] -= s[1]; + s[7] += s[6]; + s[4] = mh_rotl(s[4], 17u) + s[7]; + s[11] ^= s[4]; + s[4] += s[11]; + s[11] += s[4] + 0x46d20979u; + s[14] ^= s[11]; + s[10] ^= s[14]; + s[2] *= (s[10] | 1u); + s[12] = mh_rotl(s[12], 22u) + s[2]; + s[15] -= s[12]; + s[12] = (s[12] ^ s[15]) * 0xf44d7efbu; + s[10] = (s[10] ^ s[12]) * 0x3fa99f4fu; + s[2] ^= s[10] ^ 0xac7d5c8bu; + s[7] += s[2]; + s[14] += s[7] + 0xd1ad9327u; + s[3] += s[14]; + s[10] = mh_rotl(s[10] ^ s[3], 9u); + s[5] = mh_rotl(s[5], 11u) + s[10]; + s[2] *= (s[5] | 1u); + s[15] += s[2]; + s[14] *= (s[15] | 1u); + s[10] = s[10] * 0xedb63e45u + s[14]; + s[14] += s[10]; + s[9] += s[14]; + s[3] += s[9] + 0xce5dd87eu; + s[15] = mh_rotl(s[15] ^ s[3], 16u); + s[1] -= s[15]; + s[2] += s[1]; + s[13] ^= (s[2] & s[7]); + s[2] = mh_rotl(s[2] ^ s[13], 11u); + s[15] ^= s[2]; + s[6] += s[15] + 0x97390455u; + s[2] = mh_rotl(s[2], 14u) + s[6]; + s[0] = s[0] * 0xd9932c57u + s[2]; + s[15] ^= s[0]; + s[0] += s[15] + 0xd642df33u; + s[10] -= s[0]; + s[9] = (s[9] ^ s[10]) * 0x96d65173u; + s[3] = (s[3] ^ s[9]) * 0x5ef32be3u; + s[0] = mh_rotl(s[0], 4u) + s[3]; + s[14] += s[0] + 0xa2e88e9cu; + s[4] -= s[14]; + s[13] -= s[4]; + s[1] = mh_rotl(s[1] ^ s[13], 29u); + s[2] += s[1] + 0x9f32e607u; + s[8] = s[8] * 0x2e14f3b3u + s[2]; + s[14] ^= s[8]; + s[10] ^= s[14]; + s[7] = (s[7] ^ s[10]) * 0xb35882a9u; + s[11] ^= s[7] ^ 0xdb62d1c6u; + s[5] *= (s[11] | 1u); + s[10] += (s[5] | s[1]); + s[3] -= s[10]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[13] ^= (s[10] & s[15]); + s[11] -= s[13]; + s[5] ^= s[11]; + s[11] += s[5]; + s[15] ^= s[11] ^ 0xef110718u; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[12], 12u); + s[12] ^= s[1] ^ 0x4e9029b6u; + s[14] -= s[12]; + s[15] *= (s[14] | 1u); + s[4] *= (s[15] | 1u); + s[15] = mh_rotl(s[15] ^ s[4], 9u); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3] ^ s[13], 7u); + s[5] += s[3] + 0xf38664b0u; + s[2] -= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[1] = mh_rotl(s[1], 7u) + s[5]; + s[10] -= s[1]; + s[5] = mh_rotl(s[5] ^ s[10], 27u); + s[10] ^= s[5]; + s[2] += s[10]; + s[6] += s[2]; + s[3] = (s[3] ^ s[6]) * 0x33b893c5u; + s[8] -= s[3]; + s[5] ^= s[8] ^ 0x58095457u; + s[0] += s[5]; + s[9] += s[0]; + s[13] ^= s[9]; + s[6] ^= s[13]; + s[3] ^= s[6]; + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[13] ^= s[5] ^ 0xf1c1aac7u; + s[4] = s[4] * 0x8ea1eea7u + s[13]; + s[12] ^= s[4]; + s[10] ^= s[12] ^ 0xdf051453u; + s[5] ^= s[10]; + s[13] ^= s[5]; + s[15] ^= s[13]; + s[3] ^= s[15]; + s[9] += s[3]; + s[4] ^= s[9] ^ 0x218a1035u; +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_3(thread uint* s) { + s[9] = (s[9] ^ s[0]) * 0x797e4457u; + s[4] ^= s[9]; + s[10] -= s[4]; + s[11] += s[10] + 0xa102a63du; + s[1] += s[11]; + s[7] ^= s[1]; + s[8] += s[7]; + s[6] += s[8]; + s[1] = mh_rotl(s[1] ^ s[6], 17u); + s[6] ^= s[1]; + s[14] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[2] -= s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 25u); + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[10] ^= s[7]; + s[15] += s[10] + 0x0abd8749u; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[15] = s[15] * 0x66393445u + s[2]; + s[14] *= (s[15] | 1u); + s[3] ^= s[14]; + s[2] = mh_rotl(s[2], 5u) + s[3]; + s[0] = mh_rotl(s[0] ^ s[2], 20u); + s[5] ^= s[0] ^ 0xcab80c1eu; + s[10] = mh_rotl(s[10] ^ s[5], 16u); + s[14] = mh_rotl(s[14] ^ s[10], 6u); + s[10] ^= (s[14] & s[4]); + s[6] ^= (s[10] & s[5]); + s[4] += s[6]; + s[0] += s[4] + 0x95ce3e2au; + s[2] *= (s[0] | 1u); + s[6] += s[2]; + s[2] = mh_rotl(s[2] ^ s[6], 17u); + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[7] ^= s[15]; + s[12] ^= s[7]; + s[1] += s[12]; + s[3] ^= s[1]; + s[0] = (s[0] ^ s[3]) * 0x53869057u; + s[12] += s[0]; + s[10] ^= s[12] ^ 0x3c38b79fu; + s[0] ^= s[10]; + s[1] ^= s[0] ^ 0x26a5cf2au; + s[8] ^= s[1] ^ 0xec7f7c75u; + s[11] = mh_rotl(s[11], 25u) + s[8]; + s[15] ^= s[11]; + s[8] ^= (s[15] & s[6]); + s[3] ^= s[8]; + s[1] = mh_rotl(s[1], 17u) + s[3]; + s[11] ^= s[1]; + s[0] ^= s[11]; + s[7] += s[0]; + s[2] -= s[7]; + s[5] = mh_rotl(s[5], 24u) + s[2]; + s[4] = mh_rotl(s[4], 13u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[4], 1u); + s[4] ^= s[1] ^ 0x7b85746bu; + s[14] += s[4]; + s[9] = mh_rotl(s[9], 24u) + s[14]; + s[1] ^= s[9]; + s[14] += s[1]; + s[6] ^= s[14]; + s[7] = (s[7] ^ s[6]) * 0xd304fa11u; + s[3] += s[7] + 0x916253c4u; + s[13] += (s[3] | s[12]); + s[3] ^= s[13]; + s[1] = (s[1] ^ s[3]) * 0x668aacedu; + s[11] = mh_rotl(s[11] ^ s[1], 12u); + s[4] += s[11] + 0xfa452a6cu; + s[7] ^= s[4]; + s[15] += s[7]; + s[7] ^= s[15]; + s[13] *= (s[7] | 1u); + s[5] *= (s[13] | 1u); + s[9] += s[5]; + s[5] = mh_rotl(s[5], 19u) + s[9]; + s[15] += (s[5] | s[1]); + s[10] += (s[15] | s[12]); + s[11] = mh_rotl(s[11], 7u) + s[10]; + s[10] = mh_rotl(s[10], 11u) + s[11]; + s[0] += (s[10] | s[14]); + s[5] *= (s[0] | 1u); + s[4] -= s[5]; + s[6] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[6], 3u); + s[13] += s[9]; + s[3] -= s[13]; + s[15] ^= s[3] ^ 0x3ab76643u; + s[4] *= (s[15] | 1u); + s[7] -= s[4]; + s[1] += s[7]; + s[9] = mh_rotl(s[9], 31u) + s[1]; + s[3] *= (s[9] | 1u); + s[10] -= s[3]; + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xd1b0c195u; + s[10] -= s[7]; + s[5] -= s[10]; + s[0] -= s[5]; + s[15] += (s[0] | s[13]); + s[13] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[8] -= s[3]; + s[15] = mh_rotl(s[15], 20u) + s[8]; + s[14] = s[14] * 0x42023659u + s[15]; + s[0] += s[14] + 0x59245cc5u; + s[10] += s[0]; + s[3] += s[10]; + s[4] = (s[4] ^ s[3]) * 0x513757e1u; + s[7] ^= s[4]; + s[14] += s[7] + 0x7d876976u; + s[1] += s[14]; + s[15] += s[1] + 0x538535d0u; + s[13] ^= (s[15] & s[4]); + s[4] = (s[4] ^ s[13]) * 0x102bd2d9u; + s[2] += s[4]; + s[8] *= (s[2] | 1u); + s[11] -= s[8]; + s[8] *= (s[11] | 1u); + s[9] = mh_rotl(s[9] ^ s[8], 21u); + s[12] -= s[9]; + s[0] ^= s[12] ^ 0x756f1367u; + s[8] = (s[8] ^ s[0]) * 0xeb1d6203u; + s[2] += s[8]; + s[3] = mh_rotl(s[3], 27u) + s[2]; + s[14] = s[14] * 0xbe8a18f5u + s[3]; + s[11] ^= s[14]; + s[14] ^= s[11]; + s[7] += s[14]; + s[2] ^= s[7] ^ 0xa93ccf9du; + s[13] = mh_rotl(s[13] ^ s[2], 30u); + s[6] ^= s[13] ^ 0x0b96528au; + s[12] ^= s[6] ^ 0x7400dce8u; + s[7] ^= (s[12] & s[14]); + s[4] ^= s[7] ^ 0x38e67c0fu; + s[12] ^= s[4]; + s[13] ^= s[12] ^ 0xdb69d44fu; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[5] *= (s[14] | 1u); + s[2] ^= s[5]; + s[0] -= s[2]; + s[14] *= (s[0] | 1u); + s[0] += s[14]; + s[3] += s[0] + 0x412d0838u; + s[11] = mh_rotl(s[11], 6u) + s[3]; + s[3] *= (s[11] | 1u); + s[0] = mh_rotl(s[0], 12u) + s[3]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] = s[0] * 0x514e6f4bu + s[4]; + s[13] ^= s[0] ^ 0xb917c4f4u; + s[5] += s[13] + 0xe81626f3u; + s[1] += s[5]; + s[12] *= (s[1] | 1u); + s[13] -= s[12]; + s[14] = mh_rotl(s[14] ^ s[13], 20u); + s[13] ^= s[14]; + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[14] *= (s[10] | 1u); + s[15] ^= s[14]; + s[13] ^= s[15] ^ 0xdcaf64c9u; + s[11] ^= s[13]; + s[5] -= s[11]; + s[4] = mh_rotl(s[4] ^ s[5], 16u); + s[14] ^= s[4]; + s[15] -= s[14]; + s[5] = mh_rotl(s[5] ^ s[15], 21u); + s[0] -= s[5]; + s[13] = mh_rotl(s[13], 27u) + s[0]; + s[11] = mh_rotl(s[11] ^ s[13], 14u); + s[4] = s[4] * 0x7b1d09a9u + s[11]; + s[6] *= (s[4] | 1u); + s[9] += s[6] + 0x62232acfu; + s[15] += s[9]; + s[9] += (s[15] | s[14]); + s[8] += (s[9] | s[6]); + s[2] ^= s[8]; + s[3] = (s[3] ^ s[2]) * 0xb3059c21u; + s[11] = mh_rotl(s[11], 19u) + s[3]; + s[1] ^= s[11]; + s[15] ^= s[1] ^ 0x2171991du; + s[12] += s[15]; + s[0] = mh_rotl(s[0] ^ s[12], 11u); + s[12] = s[12] * 0xcfafa68bu + s[0]; + s[13] += s[12]; + s[8] += s[13]; + s[0] = (s[0] ^ s[8]) * 0x1259bf39u; + s[9] ^= s[0] ^ 0x7b24b75fu; + s[11] *= (s[9] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 26u); + s[13] += (s[8] | s[10]); + s[14] += s[13]; + s[2] = mh_rotl(s[2], 16u) + s[14]; + s[0] *= (s[2] | 1u); + s[7] += s[0]; + s[9] -= s[7]; + s[14] += s[9]; + s[2] ^= s[14] ^ 0xc10a9cc2u; + s[9] *= (s[2] | 1u); + s[12] ^= (s[9] & s[11]); + s[9] = (s[9] ^ s[12]) * 0xa6446659u; + s[7] += s[9]; + s[12] *= (s[7] | 1u); + s[1] -= s[12]; + s[4] = mh_rotl(s[4], 25u) + s[1]; + s[8] ^= s[4]; + s[14] += (s[8] | s[0]); + s[1] += s[14]; + s[6] = mh_rotl(s[6] ^ s[1], 15u); + s[9] -= s[6]; + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[10] -= s[0]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x5006a017u; + s[9] -= s[0]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[12] ^= s[6]; + s[9] -= s[12]; + s[7] += s[9]; + s[1] ^= s[7]; + s[15] = (s[15] ^ s[1]) * 0x0341d025u; + s[6] *= (s[15] | 1u); + s[2] = (s[2] ^ s[6]) * 0xbf30d677u; + s[1] ^= s[2] ^ 0x5a31f2fau; + s[15] += s[1]; + s[9] -= s[15]; + s[10] ^= s[9]; + s[7] ^= s[10]; + s[8] *= (s[7] | 1u); + s[9] -= s[8]; + s[1] += s[9]; + s[6] = s[6] * 0xc029c901u + s[1]; + s[9] = s[9] * 0x0a8b81a9u + s[6]; + s[13] *= (s[9] | 1u); + s[2] ^= (s[13] & s[1]); + s[13] = mh_rotl(s[13], 19u) + s[2]; + s[7] = (s[7] ^ s[13]) * 0x6775be81u; + s[13] = mh_rotl(s[13] ^ s[7], 16u); + s[14] ^= s[13]; + s[11] ^= s[14] ^ 0xeb720242u; + s[13] = mh_rotl(s[13], 14u) + s[11]; + s[5] = mh_rotl(s[5], 20u) + s[13]; + s[11] ^= (s[5] & s[7]); + s[7] = mh_rotl(s[7], 25u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[7], 3u); + s[15] = mh_rotl(s[15] ^ s[3], 20u); + s[9] -= s[15]; + s[4] = mh_rotl(s[4], 2u) + s[9]; + s[2] ^= (s[4] & s[14]); + s[7] += s[2]; + s[9] = mh_rotl(s[9] ^ s[7], 3u); + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[5] *= (s[9] | 1u); + s[9] *= (s[5] | 1u); + s[7] -= s[9]; + s[0] ^= s[7] ^ 0xae9620d3u; + s[6] ^= s[0]; + s[1] ^= s[6]; + s[10] -= s[1]; + s[12] ^= s[10]; + s[4] ^= s[12] ^ 0x3893c42au; + s[15] += s[4]; + s[8] += s[15]; + s[0] += s[8]; + s[12] = (s[12] ^ s[0]) * 0xce1c066bu; + s[15] += s[12]; + s[14] = mh_rotl(s[14] ^ s[15], 17u); + s[12] += s[14]; + s[0] = (s[0] ^ s[12]) * 0xbfe6f35fu; + s[7] = mh_rotl(s[7], 14u) + s[0]; + s[10] ^= s[7]; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[9] -= s[12]; + s[8] ^= s[9]; + s[5] = (s[5] ^ s[8]) * 0xc1d852abu; + s[4] ^= s[5]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 18u); + s[15] = mh_rotl(s[15], 13u) + s[8]; + s[4] = (s[4] ^ s[15]) * 0xb18cd0d9u; + s[6] += s[4]; + s[11] = mh_rotl(s[11] ^ s[6], 14u); + s[3] += s[11] + 0x10533cf0u; + s[14] ^= s[3]; + s[10] ^= s[14] ^ 0x708a914au; + s[13] += s[10]; + s[2] *= (s[13] | 1u); + s[5] -= s[2]; + s[4] = mh_rotl(s[4], 3u) + s[5]; + s[9] ^= s[4] ^ 0xdbe59900u; + s[6] = (s[6] ^ s[9]) * 0x3c084e57u; + s[12] -= s[6]; + s[10] ^= s[12] ^ 0xf4c46888u; + s[4] = mh_rotl(s[4], 14u) + s[10]; + s[9] = (s[9] ^ s[4]) * 0x6a1a0c53u; + s[4] ^= s[9] ^ 0x595122ddu; + s[11] += s[4] + 0x7a7d85c9u; + s[12] = (s[12] ^ s[11]) * 0x44aad133u; + s[5] += s[12]; + s[2] -= s[5]; + s[12] ^= s[2] ^ 0xd4528978u; + s[3] ^= s[12] ^ 0xe2d6b9c3u; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[9] -= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 10u); + s[7] += s[14]; + s[4] += s[7]; + s[5] ^= s[4]; + s[15] ^= s[5]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] = mh_rotl(s[5], 30u) + s[13]; + s[0] ^= s[5]; + s[10] = (s[10] ^ s[0]) * 0x6e5fb2ebu; + s[7] ^= s[10]; + s[3] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[3], 11u); + s[0] ^= s[11]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[4] ^= s[11]; + s[11] ^= s[4]; + s[2] = (s[2] ^ s[11]) * 0xb5b4f471u; + s[3] += s[2]; + s[1] += s[3]; + s[15] *= (s[1] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[15]; + s[15] ^= s[10]; + s[6] = mh_rotl(s[6], 8u) + s[15]; + s[13] = s[13] * 0x0b61283fu + s[6]; + s[11] ^= s[13]; + s[6] += s[11] + 0xd7cda70fu; + s[2] *= (s[6] | 1u); + s[3] += s[2]; + s[0] += (s[3] | s[11]); + s[10] = s[10] * 0x68301209u + s[0]; + s[13] -= s[10]; + s[5] += s[13] + 0x25d68939u; + s[14] ^= s[5] ^ 0x9315e17cu; + s[8] = mh_rotl(s[8] ^ s[14], 31u); + s[4] *= (s[8] | 1u); + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = s[9] * 0xb3978cd7u + s[1]; + s[0] = (s[0] ^ s[9]) * 0x8f1b658fu; + s[3] = mh_rotl(s[3], 31u) + s[0]; + s[1] += s[3]; + s[14] += s[1] + 0xce275c64u; + s[7] ^= s[14]; + s[14] = mh_rotl(s[14] ^ s[7], 23u); + s[3] *= (s[14] | 1u); + s[2] = (s[2] ^ s[3]) * 0xf33fdd1bu; + s[10] ^= s[2]; + s[11] ^= s[10]; + s[10] += s[11] + 0x9a470fc4u; + s[4] = mh_rotl(s[4] ^ s[10], 2u); + s[7] *= (s[4] | 1u); + s[8] ^= (s[7] & s[15]); + s[13] ^= s[8]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[9] += s[5]; + s[6] = mh_rotl(s[6], 22u) + s[9]; + s[2] = (s[2] ^ s[6]) * 0x3b1c9049u; + s[4] = s[4] * 0x5964f96fu + s[2]; + s[13] = mh_rotl(s[13] ^ s[4], 31u); + s[6] -= s[13]; + s[13] ^= s[6]; + s[0] = (s[0] ^ s[13]) * 0x9806df37u; + s[12] = s[12] * 0xfcc0e3e5u + s[0]; + s[8] += s[12]; + s[6] += s[8]; + s[1] += s[6]; + s[9] ^= s[1] ^ 0x6dbea2d7u; + s[2] = s[2] * 0x856b34bdu + s[9]; + s[13] += s[2]; + s[2] ^= s[13]; + s[0] += s[2]; + s[11] += s[0]; + s[2] += s[11]; + s[12] ^= (s[2] & s[4]); + s[0] ^= s[12] ^ 0x50a4b36au; + s[12] += s[0]; + s[8] += s[12]; + s[13] ^= s[8]; + s[4] ^= s[13]; + s[15] += s[4]; + s[13] ^= (s[15] & s[7]); + s[7] = mh_rotl(s[7], 26u) + s[13]; + s[4] ^= s[7]; + s[9] *= (s[4] | 1u); + s[7] += s[9]; + s[14] ^= s[7] ^ 0x65c7cdaau; + s[15] = s[15] * 0xf2b2c56fu + s[14]; + s[12] ^= s[15]; + s[8] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 5u); + s[0] -= s[11]; + s[9] += s[0]; + s[4] *= (s[9] | 1u); + s[13] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[13]; + s[8] = mh_rotl(s[8], 24u) + s[0]; + s[0] ^= s[8]; + s[13] += (s[0] | s[6]); + s[15] ^= s[13]; + s[0] ^= s[15] ^ 0x263b836bu; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[14] = (s[14] ^ s[10]) * 0xd6a0e7c7u; + s[15] = (s[15] ^ s[14]) * 0x4017ec97u; + s[8] ^= s[15]; + s[14] ^= s[8] ^ 0x1ebe6b44u; + s[7] = (s[7] ^ s[14]) * 0x8b99dbe1u; + s[10] += s[7]; + s[2] ^= s[10]; + s[12] *= (s[2] | 1u); + s[8] += (s[12] | s[4]); + s[5] = mh_rotl(s[5] ^ s[8], 26u); + s[8] = mh_rotl(s[8] ^ s[5], 31u); + s[13] ^= s[8]; + s[1] ^= s[13] ^ 0xf9ab26dbu; + s[3] += s[1] + 0x27337e87u; + s[14] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[14], 25u); + s[2] -= s[15]; + s[9] ^= (s[2] & s[4]); + s[11] += s[9]; + s[8] -= s[11]; + s[4] += s[8]; + s[8] -= s[4]; + s[11] += s[8]; + s[1] ^= s[11]; + s[11] ^= s[1]; + s[7] = mh_rotl(s[7] ^ s[11], 19u); + s[0] = (s[0] ^ s[7]) * 0xff057d15u; + s[12] = mh_rotl(s[12], 7u) + s[0]; + s[15] += (s[12] | s[10]); + s[9] = mh_rotl(s[9] ^ s[15], 17u); + s[0] ^= s[9] ^ 0x87439202u; + s[12] -= s[0]; + s[13] ^= s[12] ^ 0x201ac58au; + s[2] = mh_rotl(s[2], 7u) + s[13]; + s[11] = mh_rotl(s[11] ^ s[2], 27u); + s[9] = s[9] * 0x55d080fdu + s[11]; + s[6] ^= s[9]; + s[13] = (s[13] ^ s[6]) * 0x5efcd7afu; + s[8] = mh_rotl(s[8], 7u) + s[13]; + s[2] = mh_rotl(s[2], 26u) + s[8]; + s[5] ^= s[2]; + s[0] *= (s[5] | 1u); + s[6] += s[0] + 0x5c1d235du; + s[1] = s[1] * 0x52eb2ecfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xc0730f2du; + s[10] += s[8]; + s[13] ^= s[10]; + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[12], 16u); + s[15] = mh_rotl(s[15] ^ s[10], 21u); + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[4] = s[4] * 0x7a636847u + s[5]; + s[6] += s[4]; + s[15] = mh_rotl(s[15], 15u) + s[6]; + s[8] = mh_rotl(s[8], 18u) + s[15]; + s[10] *= (s[8] | 1u); + s[1] += s[10]; + s[13] -= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 2u); + s[13] += s[12]; + s[14] -= s[13]; + s[5] ^= s[14] ^ 0x4b128721u; + s[9] ^= s[5]; + s[1] ^= s[9] ^ 0xdb597223u; + s[5] = mh_rotl(s[5], 29u) + s[1]; + s[1] = mh_rotl(s[1], 15u) + s[5]; + s[9] = s[9] * 0xdad6bd3fu + s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[9] *= (s[7] | 1u); + s[7] ^= s[9]; + s[2] ^= s[7]; + s[13] -= s[2]; + s[11] += (s[13] | s[6]); + s[4] = mh_rotl(s[4], 12u) + s[11]; + s[14] ^= s[4]; + s[15] = (s[15] ^ s[14]) * 0xde79981du; + s[7] = (s[7] ^ s[15]) * 0x285c589bu; + s[8] *= (s[7] | 1u); + s[15] += s[8]; + s[5] += s[15]; + s[9] ^= s[5]; + s[3] ^= s[9] ^ 0x44325084u; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[12] = mh_rotl(s[12], 10u) + s[2]; + s[1] = mh_rotl(s[1], 8u) + s[12]; + s[14] += s[1]; + s[5] ^= s[14] ^ 0x194b2a3cu; + s[12] ^= s[5]; + s[10] = mh_rotl(s[10], 6u) + s[12]; + s[11] = s[11] * 0xe1fe8c79u + s[10]; + s[0] ^= (s[11] & s[15]); + s[7] = mh_rotl(s[7], 17u) + s[0]; + s[2] ^= s[7]; + s[8] = mh_rotl(s[8], 10u) + s[2]; + s[15] = mh_rotl(s[15], 2u) + s[8]; + s[10] += s[15] + 0xbf36d9bbu; + s[12] += s[10]; + s[7] = mh_rotl(s[7], 12u) + s[12]; + s[3] ^= s[7] ^ 0x60dc6edeu; + s[7] = s[7] * 0x154bbc1fu + s[3]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[7] ^= (s[9] & s[8]); + s[1] = mh_rotl(s[1], 14u) + s[7]; + s[14] += s[1]; + s[7] = mh_rotl(s[7] ^ s[14], 15u); + s[12] = mh_rotl(s[12] ^ s[7], 7u); + s[8] += s[12] + 0x4ce700ffu; + s[5] ^= s[8]; + s[1] += s[5]; + s[15] ^= s[1] ^ 0x4cfd0e8bu; + s[14] += s[15]; + s[11] += s[14]; + s[13] ^= s[11]; + s[3] = (s[3] ^ s[13]) * 0xea89cab7u; + s[7] ^= s[3]; + s[8] = mh_rotl(s[8], 30u) + s[7]; + s[3] ^= s[8]; + s[10] -= s[3]; + s[7] = s[7] * 0x32632399u + s[10]; + s[2] = mh_rotl(s[2], 26u) + s[7]; + s[6] ^= s[2]; + s[2] -= s[6]; + s[13] *= (s[2] | 1u); + s[7] ^= s[13]; + s[10] ^= (s[7] & s[5]); + s[0] += (s[10] | s[2]); + s[10] *= (s[0] | 1u); + s[6] += s[10] + 0xca92c16du; + s[0] += s[6] + 0x24751e21u; + s[13] ^= s[0] ^ 0x06baa3b2u; + s[3] *= (s[13] | 1u); + s[5] -= s[3]; + s[14] = s[14] * 0x1cff685fu + s[5]; + s[8] += s[14]; + s[10] = mh_rotl(s[10] ^ s[8], 24u); + s[12] ^= s[10]; + s[0] += s[12]; + s[4] = (s[4] ^ s[0]) * 0x8430392bu; + s[9] = mh_rotl(s[9] ^ s[4], 24u); + s[2] = mh_rotl(s[2] ^ s[9], 12u); + s[1] += (s[2] | s[12]); + s[7] ^= s[1] ^ 0x54490fa2u; + s[9] *= (s[7] | 1u); + s[0] = mh_rotl(s[0], 20u) + s[9]; + s[8] += (s[0] | s[7]); + s[11] *= (s[8] | 1u); + s[15] += s[11]; + s[13] += s[15] + 0xa29fa06cu; + s[4] += s[13] + 0x6856416au; + s[3] ^= s[4]; + s[8] = mh_rotl(s[8] ^ s[3], 13u); + s[12] ^= s[8]; + s[3] *= (s[12] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] = mh_rotl(s[13] ^ s[1], 4u); + s[9] += s[13] + 0x212b6434u; + s[12] -= s[9]; + s[8] = (s[8] ^ s[12]) * 0xb91c4009u; + s[7] ^= s[8] ^ 0xbcb896bdu; + s[12] *= (s[7] | 1u); + s[15] = mh_rotl(s[15], 20u) + s[12]; + s[5] ^= (s[15] & s[3]); + s[3] ^= s[5]; + s[6] ^= s[3]; + s[2] = s[2] * 0x9e1aba47u + s[6]; + s[0] += s[2]; + s[3] = mh_rotl(s[3] ^ s[0], 17u); + s[10] ^= s[3]; + s[4] = (s[4] ^ s[10]) * 0xd432bf1du; + s[15] ^= s[4] ^ 0xc8d68ea4u; + s[6] = mh_rotl(s[6], 25u) + s[15]; + s[2] = mh_rotl(s[2] ^ s[6], 30u); + s[1] += (s[2] | s[9]); + s[4] = mh_rotl(s[4] ^ s[1], 25u); + s[12] = (s[12] ^ s[4]) * 0x0320a6b1u; + s[3] ^= s[12]; + s[13] = (s[13] ^ s[3]) * 0xf03bba6du; + s[15] *= (s[13] | 1u); + s[12] += s[15]; + s[1] -= s[12]; + s[9] += s[1]; + s[12] = mh_rotl(s[12] ^ s[9], 23u); + s[10] += s[12] + 0x83f986e6u; + s[0] = (s[0] ^ s[10]) * 0xa4cb0d1du; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[1] ^= s[7] ^ 0x9014b7bbu; + s[4] = (s[4] ^ s[1]) * 0x272bd217u; + s[0] += s[4]; + s[2] = mh_rotl(s[2], 18u) + s[0]; + s[12] = mh_rotl(s[12] ^ s[2], 2u); + s[14] ^= s[12]; + s[9] ^= s[14] ^ 0x16ac9a1eu; + s[2] = mh_rotl(s[2], 15u) + s[9]; + s[1] = mh_rotl(s[1], 10u) + s[2]; + s[4] = s[4] * 0xe0b6e0c3u + s[1]; + s[0] = mh_rotl(s[0], 25u) + s[4]; + s[15] += s[0]; + s[4] = s[4] * 0x1b6cbd07u + s[15]; + s[5] ^= s[4] ^ 0x567146e8u; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[10] += s[4]; + s[0] = s[0] * 0xe8a3abd1u + s[10]; + s[10] += s[0] + 0x5eb953e5u; + s[6] += s[10]; + s[4] = mh_rotl(s[4] ^ s[6], 10u); + s[5] += (s[4] | s[0]); + s[1] = (s[1] ^ s[5]) * 0x9a8851e3u; + s[15] += s[1]; + s[3] -= s[15]; + s[6] -= s[3]; + s[0] ^= s[6]; + s[6] ^= s[0] ^ 0x8522b09fu; + s[2] -= s[6]; + s[7] ^= s[2] ^ 0x4a7c01ddu; + s[6] += s[7] + 0x1790f84fu; + s[14] = (s[14] ^ s[6]) * 0xe3e9ed8bu; + s[1] ^= s[14]; + s[10] -= s[1]; + s[11] += s[10]; + s[4] = s[4] * 0x6371fb67u + s[11]; + s[2] -= s[4]; + s[14] += s[2]; + s[2] *= (s[14] | 1u); + s[1] ^= (s[2] & s[9]); + s[13] = mh_rotl(s[13], 12u) + s[1]; + s[15] = mh_rotl(s[15], 26u) + s[13]; + s[5] = (s[5] ^ s[15]) * 0xbc5643e1u; + s[14] += s[5]; + s[7] ^= s[14]; + s[10] = (s[10] ^ s[7]) * 0x79039a69u; + s[3] -= s[10]; + s[8] -= s[3]; + s[14] ^= s[8]; + s[13] = (s[13] ^ s[14]) * 0x1b4013ffu; + s[3] *= (s[13] | 1u); + s[12] = s[12] * 0x309d80d3u + s[3]; + s[6] *= (s[12] | 1u); + s[5] ^= s[6]; + s[2] += s[5]; + s[14] = mh_rotl(s[14], 6u) + s[2]; + s[15] = mh_rotl(s[15] ^ s[14], 6u); + s[14] ^= (s[15] & s[0]); + s[3] = mh_rotl(s[3] ^ s[14], 29u); + s[5] ^= s[3] ^ 0xa5a0aeffu; + s[10] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[10], 23u); + s[1] *= (s[9] | 1u); + s[4] += s[1]; + s[0] += (s[4] | s[1]); + s[14] ^= s[0]; + s[3] += s[14]; + s[15] ^= s[3]; + s[6] += (s[15] | s[12]); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[0] = s[0] * 0xf76673f3u + s[7]; + s[15] ^= (s[0] & s[4]); + s[12] ^= s[15]; + s[6] = s[6] * 0x36c04137u + s[12]; + s[9] ^= s[6] ^ 0xaf963084u; + s[13] *= (s[9] | 1u); + s[11] *= (s[13] | 1u); + s[8] = mh_rotl(s[8] ^ s[11], 7u); + s[13] = s[13] * 0x69f233a3u + s[8]; + s[3] += s[13]; + s[1] = mh_rotl(s[1] ^ s[3], 19u); + s[6] = (s[6] ^ s[1]) * 0x0416e137u; + s[12] ^= s[6]; + s[1] = (s[1] ^ s[12]) * 0xca07bafdu; + s[14] ^= s[1]; + s[7] += (s[14] | s[2]); + s[3] *= (s[7] | 1u); + s[11] = mh_rotl(s[11], 15u) + s[3]; + s[8] = mh_rotl(s[8], 6u) + s[11]; + s[3] = mh_rotl(s[3] ^ s[8], 15u); + s[2] = mh_rotl(s[2], 28u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[2], 28u); + s[11] ^= s[9]; + s[9] ^= s[11]; + s[12] = (s[12] ^ s[9]) * 0xbefcfdbbu; + s[6] += s[12]; + s[2] ^= s[6] ^ 0x899a552eu; + s[0] += s[2]; + s[6] ^= s[0]; + s[5] -= s[6]; + s[7] -= s[5]; + s[14] += (s[7] | s[10]); + s[8] += s[14] + 0x0de3dc6bu; + s[10] += s[8]; + s[2] += s[10]; + s[12] = mh_rotl(s[12] ^ s[2], 31u); + s[9] = (s[9] ^ s[12]) * 0x6052a829u; + s[7] = (s[7] ^ s[9]) * 0x97670939u; + s[14] = mh_rotl(s[14], 15u) + s[7]; + s[12] += s[14] + 0x010cd5e8u; + s[9] = mh_rotl(s[9], 2u) + s[12]; + s[0] ^= s[9]; + s[5] += s[0]; + s[3] *= (s[5] | 1u); + s[15] += s[3] + 0x77f4510du; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[13], 4u); + s[5] += s[11]; + s[9] ^= (s[5] & s[7]); + s[1] = mh_rotl(s[1], 6u) + s[9]; + s[6] *= (s[1] | 1u); + s[9] ^= s[6]; + s[3] ^= s[9] ^ 0xcc2ee068u; + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[11] = mh_rotl(s[11], 31u) + s[14]; + s[0] += s[11] + 0x3191cb8fu; + s[12] ^= (s[0] & s[1]); + s[14] += (s[12] | s[13]); + s[11] = (s[11] ^ s[14]) * 0x29e0c4c3u; + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[3] *= (s[6] | 1u); + s[6] += s[3]; + s[13] ^= s[6] ^ 0x0e54f612u; + s[4] ^= s[13]; + s[5] += s[4]; + s[11] = mh_rotl(s[11], 16u) + s[5]; + s[14] = s[14] * 0x37c87275u + s[11]; +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_4(thread uint* s) { + s[15] ^= s[0] ^ 0xb6c1e90cu; + s[2] = mh_rotl(s[2], 19u) + s[15]; + s[8] = s[8] * 0x28bc533du + s[2]; + s[5] ^= s[8]; + s[6] = (s[6] ^ s[5]) * 0x86d067fbu; + s[10] ^= s[6] ^ 0x75a5b862u; + s[14] ^= s[10] ^ 0xd8b962f7u; + s[8] -= s[14]; + s[1] ^= s[8]; + s[11] ^= s[1]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[4] += (s[6] | s[8]); + s[5] ^= (s[4] & s[10]); + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 10u); + s[0] ^= s[5] ^ 0x3da9ef7eu; + s[12] ^= s[0]; + s[3] ^= s[12] ^ 0xfe29da15u; + s[0] += s[3]; + s[5] ^= (s[0] & s[4]); + s[7] += (s[5] | s[12]); + s[9] += (s[7] | s[2]); + s[14] ^= s[9]; + s[15] += s[14] + 0xecc0e6cfu; + s[4] += s[15]; + s[10] = (s[10] ^ s[4]) * 0x71d36d0bu; + s[15] ^= s[10] ^ 0x3834ef56u; + s[11] = (s[11] ^ s[15]) * 0xf3f2126du; + s[4] -= s[11]; + s[5] += s[4]; + s[12] = mh_rotl(s[12], 23u) + s[5]; + s[14] += s[12] + 0xee23cc86u; + s[0] += s[14]; + s[3] ^= s[0] ^ 0x9ff2f793u; + s[8] += s[3]; + s[7] += s[8]; + s[11] ^= s[7] ^ 0x9ca003edu; + s[15] += (s[11] | s[9]); + s[12] = mh_rotl(s[12] ^ s[15], 17u); + s[7] = mh_rotl(s[7] ^ s[12], 7u); + s[5] ^= s[7] ^ 0xf6d26d41u; + s[15] ^= s[5] ^ 0xad445899u; + s[11] += s[15] + 0x94157a95u; + s[2] *= (s[11] | 1u); + s[10] += s[2]; + s[4] ^= s[10] ^ 0xfb1e1d1eu; + s[7] = (s[7] ^ s[4]) * 0xd7d5e433u; + s[12] += s[7] + 0x4329bd0du; + s[15] -= s[12]; + s[0] = (s[0] ^ s[15]) * 0x802ba143u; + s[2] = mh_rotl(s[2], 29u) + s[0]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[3] = mh_rotl(s[3], 25u) + s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 10u); + s[6] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 21u) + s[6]; + s[14] *= (s[13] | 1u); + s[12] = (s[12] ^ s[14]) * 0x5445cbf5u; + s[15] += s[12]; + s[1] += s[15] + 0xdf315f06u; + s[5] ^= s[1] ^ 0x9aea526cu; + s[15] += s[5]; + s[1] = (s[1] ^ s[15]) * 0xa5708ab3u; + s[8] += s[1] + 0x41e6f337u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 14u) + s[5]; + s[6] += s[3]; + s[9] = mh_rotl(s[9] ^ s[6], 12u); + s[4] += s[9]; + s[8] += s[4]; + s[1] += s[8] + 0xc618b3f4u; + s[2] = s[2] * 0x6195bb5fu + s[1]; + s[14] = mh_rotl(s[14] ^ s[2], 13u); + s[6] *= (s[14] | 1u); + s[14] *= (s[6] | 1u); + s[6] ^= s[14] ^ 0x00ed6668u; + s[14] = mh_rotl(s[14] ^ s[6], 9u); + s[10] += s[14] + 0x9e4bdfd0u; + s[9] = mh_rotl(s[9] ^ s[10], 2u); + s[6] ^= (s[9] & s[4]); + s[15] ^= s[6]; + s[12] += s[15]; + s[5] += s[12] + 0x88d2c32au; + s[6] *= (s[5] | 1u); + s[10] += s[6]; + s[15] += s[10] + 0xf6c730abu; + s[6] += (s[15] | s[9]); + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[14] = (s[14] ^ s[1]) * 0xc68fd8b7u; + s[13] ^= s[14]; + s[2] += s[13]; + s[5] ^= s[2]; + s[6] += s[5]; + s[7] ^= (s[6] & s[0]); + s[14] = (s[14] ^ s[7]) * 0x014b019fu; + s[10] -= s[14]; + s[5] = mh_rotl(s[5], 24u) + s[10]; + s[14] ^= s[5]; + s[10] += s[14] + 0x0431e88cu; + s[15] -= s[10]; + s[9] *= (s[15] | 1u); + s[2] = (s[2] ^ s[9]) * 0x237066cfu; + s[5] *= (s[2] | 1u); + s[2] ^= s[5] ^ 0x4510e4bcu; + s[5] = mh_rotl(s[5], 16u) + s[2]; + s[10] ^= s[5]; + s[5] += s[10] + 0xb102c58bu; + s[12] *= (s[5] | 1u); + s[0] = (s[0] ^ s[12]) * 0x535043a5u; + s[3] = (s[3] ^ s[0]) * 0x1f7a2dffu; + s[14] = (s[14] ^ s[3]) * 0xdae8e3c7u; + s[12] ^= s[14] ^ 0xbc9e9bd9u; + s[8] += (s[12] | s[14]); + s[6] = mh_rotl(s[6], 6u) + s[8]; + s[2] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[6] += s[3]; + s[9] -= s[6]; + s[8] = (s[8] ^ s[9]) * 0x7256fab5u; + s[3] ^= s[8]; + s[2] ^= s[3] ^ 0x1506dae2u; + s[11] ^= s[2]; + s[9] ^= s[11]; + s[15] = mh_rotl(s[15] ^ s[9], 9u); + s[10] ^= s[15]; + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[12] -= s[3]; + s[2] = (s[2] ^ s[12]) * 0x91fe8e99u; + s[6] ^= s[2]; + s[15] += s[6]; + s[1] -= s[15]; + s[9] *= (s[1] | 1u); + s[0] += s[9] + 0xb9d5c4abu; + s[15] = s[15] * 0xbf261023u + s[0]; + s[11] += s[15]; + s[3] ^= (s[11] & s[9]); + s[0] = mh_rotl(s[0], 28u) + s[3]; + s[14] ^= s[0]; + s[10] += (s[14] | s[3]); + s[14] = mh_rotl(s[14] ^ s[10], 1u); + s[10] ^= s[14]; + s[0] *= (s[10] | 1u); + s[5] = (s[5] ^ s[0]) * 0x94c8cd23u; + s[1] = mh_rotl(s[1] ^ s[5], 1u); + s[4] = mh_rotl(s[4], 14u) + s[1]; + s[6] += s[4]; + s[7] = s[7] * 0x3498a9b3u + s[6]; + s[0] -= s[7]; + s[4] += s[0]; + s[14] += s[4]; + s[15] = mh_rotl(s[15], 8u) + s[14]; + s[11] += s[15] + 0x4a892dacu; + s[0] = mh_rotl(s[0] ^ s[11], 13u); + s[15] = mh_rotl(s[15] ^ s[0], 12u); + s[7] ^= s[15] ^ 0xd668f578u; + s[3] -= s[7]; + s[8] *= (s[3] | 1u); + s[10] += s[8]; + s[8] = mh_rotl(s[8], 14u) + s[10]; + s[13] = mh_rotl(s[13] ^ s[8], 8u); + s[9] ^= s[13]; + s[15] ^= s[9]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[8] *= (s[4] | 1u); + s[7] *= (s[8] | 1u); + s[12] *= (s[7] | 1u); + s[1] ^= s[12]; + s[0] = mh_rotl(s[0] ^ s[1], 12u); + s[4] = (s[4] ^ s[0]) * 0x9e6913c7u; + s[3] = (s[3] ^ s[4]) * 0xff70743fu; + s[13] ^= s[3]; + s[4] = mh_rotl(s[4], 5u) + s[13]; + s[15] += (s[4] | s[2]); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[6] += s[7]; + s[8] = mh_rotl(s[8] ^ s[6], 26u); + s[5] = (s[5] ^ s[8]) * 0x71b981efu; + s[15] ^= (s[5] & s[0]); + s[13] += s[15] + 0x211b525au; + s[0] += s[13] + 0x235124dcu; + s[4] = (s[4] ^ s[0]) * 0x96db8fb9u; + s[15] = mh_rotl(s[15], 10u) + s[4]; + s[13] += s[15]; + s[4] = (s[4] ^ s[13]) * 0x00f4145fu; + s[9] ^= (s[4] & s[1]); + s[2] = mh_rotl(s[2] ^ s[9], 30u); + s[10] += (s[2] | s[3]); + s[1] = mh_rotl(s[1], 25u) + s[10]; + s[12] *= (s[1] | 1u); + s[4] *= (s[12] | 1u); + s[14] ^= s[4] ^ 0x23e8ae4fu; + s[10] -= s[14]; + s[7] += s[10]; + s[11] = s[11] * 0x28fe7415u + s[7]; + s[9] = mh_rotl(s[9] ^ s[11], 1u); + s[8] = (s[8] ^ s[9]) * 0xf9445edfu; + s[5] ^= (s[8] & s[7]); + s[13] = mh_rotl(s[13], 13u) + s[5]; + s[15] *= (s[13] | 1u); + s[13] ^= s[15]; + s[1] -= s[13]; + s[11] = mh_rotl(s[11], 31u) + s[1]; + s[14] += s[11] + 0xf84dc8acu; + s[2] ^= s[14]; + s[9] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 5u); + s[11] ^= s[14]; + s[9] ^= s[11] ^ 0xec241426u; + s[15] += (s[9] | s[6]); + s[1] ^= s[15]; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[12] ^= s[5]; + s[7] = mh_rotl(s[7] ^ s[12], 8u); + s[15] -= s[7]; + s[7] = s[7] * 0x0fbb88d1u + s[15]; + s[8] = mh_rotl(s[8] ^ s[7], 11u); + s[9] = (s[9] ^ s[8]) * 0x61f086f3u; + s[14] *= (s[9] | 1u); + s[11] += s[14]; + s[5] = mh_rotl(s[5] ^ s[11], 6u); + s[4] += s[5]; + s[8] ^= s[4]; + s[3] -= s[8]; + s[15] -= s[3]; + s[11] += (s[15] | s[1]); + s[10] ^= s[11]; + s[14] += s[10]; + s[11] += (s[14] | s[4]); + s[14] -= s[11]; + s[0] -= s[14]; + s[6] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 1u) + s[6]; + s[14] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[14], 29u); + s[14] ^= s[9] ^ 0x99f79e3cu; + s[2] ^= s[14]; + s[8] *= (s[2] | 1u); + s[12] ^= (s[8] & s[10]); + s[10] *= (s[12] | 1u); + s[14] += (s[10] | s[9]); + s[11] = s[11] * 0x451cdab1u + s[14]; + s[1] = s[1] * 0x7103d94du + s[11]; + s[6] ^= s[1]; + s[9] += s[6]; + s[3] ^= (s[9] & s[15]); + s[0] -= s[3]; + s[14] ^= s[0]; + s[9] += s[14] + 0x89535c2fu; + s[10] += s[9]; + s[9] += s[10]; + s[13] += s[9]; + s[7] += s[13]; + s[12] += s[7]; + s[8] += s[12] + 0xa6e4da0cu; + s[14] *= (s[8] | 1u); + s[4] += (s[14] | s[0]); + s[6] *= (s[4] | 1u); + s[13] += s[6]; + s[2] ^= s[13]; + s[8] ^= s[2]; + s[4] = (s[4] ^ s[8]) * 0x6209b3c5u; + s[15] += s[4]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15], 27u) + s[5]; + s[2] = mh_rotl(s[2], 29u) + s[15]; + s[10] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[4] -= s[2]; + s[0] += s[4]; + s[4] *= (s[0] | 1u); + s[1] *= (s[4] | 1u); + s[11] ^= s[1]; + s[8] = mh_rotl(s[8] ^ s[11], 3u); + s[6] += s[8] + 0xc67c23a1u; + s[1] = s[1] * 0x033df6bfu + s[6]; + s[8] = (s[8] ^ s[1]) * 0xb5308d7du; + s[6] -= s[8]; + s[9] *= (s[6] | 1u); + s[12] -= s[9]; + s[1] += (s[12] | s[4]); + s[2] += (s[1] | s[7]); + s[7] += (s[2] | s[0]); + s[3] *= (s[7] | 1u); + s[5] += s[3]; + s[10] = mh_rotl(s[10] ^ s[5], 20u); + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[14] *= (s[5] | 1u); + s[6] ^= s[14]; + s[14] += s[6]; + s[7] ^= s[14] ^ 0x47ba5e42u; + s[4] ^= s[7] ^ 0xc5c5e46fu; + s[10] = mh_rotl(s[10] ^ s[4], 23u); + s[3] -= s[10]; + s[8] = mh_rotl(s[8] ^ s[3], 12u); + s[15] ^= s[8] ^ 0xf988e79du; + s[1] += s[15]; + s[8] += (s[1] | s[15]); + s[13] = mh_rotl(s[13], 10u) + s[8]; + s[4] += s[13]; + s[8] = mh_rotl(s[8], 24u) + s[4]; + s[6] += s[8]; + s[12] *= (s[6] | 1u); + s[14] ^= s[12]; + s[15] += (s[14] | s[4]); + s[10] += s[15] + 0xad0c3a1cu; + s[8] ^= s[10]; + s[10] ^= s[8] ^ 0x0985d0ffu; + s[3] = (s[3] ^ s[10]) * 0xd3d14647u; + s[12] ^= s[3]; + s[0] = s[0] * 0xba477023u + s[12]; + s[8] ^= s[0]; + s[14] ^= s[8]; + s[12] = mh_rotl(s[12] ^ s[14], 30u); + s[8] ^= s[12] ^ 0x749d3378u; + s[10] -= s[8]; + s[2] += s[10]; + s[11] = s[11] * 0xb9714083u + s[2]; + s[5] *= (s[11] | 1u); + s[15] ^= (s[5] & s[14]); + s[6] += s[15]; + s[5] = (s[5] ^ s[6]) * 0x5673a9bfu; + s[1] ^= (s[5] & s[0]); + s[12] ^= s[1] ^ 0x10153309u; + s[4] += s[12]; + s[10] = (s[10] ^ s[4]) * 0xd28d9ef9u; + s[14] = s[14] * 0xc16dc36du + s[10]; + s[15] ^= s[14] ^ 0x0609a343u; + s[10] += s[15] + 0xccc127adu; + s[6] ^= (s[10] & s[7]); + s[11] = mh_rotl(s[11] ^ s[6], 29u); + s[7] ^= s[11]; + s[0] = mh_rotl(s[0], 21u) + s[7]; + s[15] += s[0]; + s[14] += s[15]; + s[8] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[8], 7u); + s[10] ^= s[15]; + s[13] += s[10]; + s[5] += (s[13] | s[0]); + s[0] ^= (s[5] & s[9]); + s[2] += s[0]; + s[0] *= (s[2] | 1u); + s[2] = (s[2] ^ s[0]) * 0xadbfbcf9u; + s[8] = mh_rotl(s[8], 7u) + s[2]; + s[5] ^= s[8]; + s[7] ^= s[5] ^ 0x11a571cfu; + s[10] ^= s[7]; + s[0] = (s[0] ^ s[10]) * 0x012ab04fu; + s[10] += s[0] + 0xe41f365bu; + s[9] ^= s[10] ^ 0x914568adu; + s[15] *= (s[9] | 1u); + s[14] ^= s[15] ^ 0x535f623du; + s[11] += (s[14] | s[3]); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10], 3u) + s[14]; + s[9] -= s[10]; + s[4] = (s[4] ^ s[9]) * 0xb4b4f5c7u; + s[1] += s[4]; + s[14] -= s[1]; + s[7] ^= (s[14] & s[4]); + s[15] ^= (s[7] & s[13]); + s[9] = mh_rotl(s[9], 23u) + s[15]; + s[1] -= s[9]; + s[8] = (s[8] ^ s[1]) * 0x17a6461du; + s[3] ^= s[8]; + s[9] ^= s[3]; + s[2] = s[2] * 0x7c061aadu + s[9]; + s[14] += s[2]; + s[9] += s[14] + 0x8c896e71u; + s[15] = mh_rotl(s[15] ^ s[9], 17u); + s[0] ^= s[15]; + s[6] = s[6] * 0x0884864du + s[0]; + s[7] += (s[6] | s[10]); + s[9] ^= s[7] ^ 0xe1a426feu; + s[11] = mh_rotl(s[11], 1u) + s[9]; + s[14] *= (s[11] | 1u); + s[12] ^= s[14] ^ 0x9b63a170u; + s[1] -= s[12]; + s[3] ^= (s[1] & s[14]); + s[9] = s[9] * 0xe67ddf4du + s[3]; + s[1] = mh_rotl(s[1] ^ s[9], 13u); + s[7] ^= s[1]; + s[13] = (s[13] ^ s[7]) * 0x55b6aa85u; + s[3] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 8u) + s[3]; + s[2] *= (s[4] | 1u); + s[15] ^= s[2]; + s[1] ^= s[15]; + s[12] ^= s[1]; + s[4] *= (s[12] | 1u); + s[13] ^= (s[4] & s[5]); + s[6] ^= s[13]; + s[15] -= s[6]; + s[2] *= (s[15] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] = mh_rotl(s[10], 12u) + s[14]; + s[8] = (s[8] ^ s[10]) * 0x820a80d3u; + s[11] *= (s[8] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 4u); + s[1] ^= (s[12] & s[10]); + s[12] += s[1] + 0x179d4563u; + s[2] ^= s[12] ^ 0xf1c8d57cu; + s[11] = s[11] * 0x27fd820fu + s[2]; + s[7] = (s[7] ^ s[11]) * 0x9b5d3177u; + s[8] += (s[7] | s[10]); + s[9] = mh_rotl(s[9], 28u) + s[8]; + s[2] = mh_rotl(s[2], 9u) + s[9]; + s[10] = mh_rotl(s[10], 17u) + s[2]; + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[2] ^= s[8] ^ 0xdf4a6b10u; + s[15] ^= s[2] ^ 0xce02ff19u; + s[7] += s[15]; + s[5] += s[7] + 0x43b32c96u; + s[14] ^= s[5]; + s[2] = s[2] * 0xdcd59df9u + s[14]; + s[13] = s[13] * 0x2da5f733u + s[2]; + s[4] = mh_rotl(s[4] ^ s[13], 1u); + s[10] = mh_rotl(s[10], 3u) + s[4]; + s[15] ^= (s[10] & s[8]); + s[5] -= s[15]; + s[8] += s[5]; + s[14] = mh_rotl(s[14] ^ s[8], 24u); + s[7] = mh_rotl(s[7], 10u) + s[14]; + s[12] += (s[7] | s[9]); + s[14] = mh_rotl(s[14] ^ s[12], 25u); + s[11] += s[14]; + s[13] ^= s[11] ^ 0x292b93c0u; + s[12] += (s[13] | s[3]); + s[7] = mh_rotl(s[7] ^ s[12], 19u); + s[15] = mh_rotl(s[15], 15u) + s[7]; + s[5] += s[15]; + s[4] += s[5] + 0xf240675bu; + s[2] += s[4]; + s[11] = mh_rotl(s[11] ^ s[2], 26u); + s[4] += s[11] + 0x58805483u; + s[7] *= (s[4] | 1u); + s[0] += s[7]; + s[5] ^= s[0]; + s[4] += s[5]; + s[12] = mh_rotl(s[12], 27u) + s[4]; + s[2] += s[12] + 0x9c60169eu; + s[3] += s[2]; + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[11] = mh_rotl(s[11] ^ s[15], 28u); + s[2] += s[11]; + s[9] -= s[2]; + s[12] ^= s[9]; + s[7] += s[12] + 0x70e6e273u; + s[3] = mh_rotl(s[3] ^ s[7], 29u); + s[10] -= s[3]; + s[11] ^= (s[10] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 5u); + s[13] += s[1]; + s[6] -= s[13]; + s[4] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[4], 15u); + s[11] = mh_rotl(s[11], 9u) + s[6]; + s[0] ^= s[11]; + s[1] = mh_rotl(s[1], 17u) + s[0]; + s[2] += s[1] + 0xc83d763au; + s[13] += s[2] + 0xc18aa580u; + s[6] = mh_rotl(s[6] ^ s[13], 12u); + s[4] *= (s[6] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[1] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[1], 21u); + s[6] += s[3]; + s[15] = (s[15] ^ s[6]) * 0x228e4019u; + s[13] *= (s[15] | 1u); + s[7] ^= s[13]; + s[4] += s[7] + 0x59e10c11u; + s[15] = mh_rotl(s[15], 25u) + s[4]; + s[2] += (s[15] | s[3]); + s[15] += s[2] + 0xa95ffd72u; + s[5] ^= s[15]; + s[6] *= (s[5] | 1u); + s[15] += s[6] + 0x95d25be9u; + s[5] -= s[15]; + s[1] ^= s[5] ^ 0x709c86b4u; + s[9] = mh_rotl(s[9] ^ s[1], 27u); + s[15] += s[9] + 0xac8ad479u; + s[4] ^= s[15]; + s[6] = s[6] * 0x0571185bu + s[4]; + s[9] = mh_rotl(s[9], 13u) + s[6]; + s[14] ^= s[9]; + s[9] += s[14]; + s[2] += (s[9] | s[5]); + s[15] += (s[2] | s[14]); + s[3] = mh_rotl(s[3] ^ s[15], 13u); + s[5] -= s[3]; + s[15] += (s[5] | s[6]); + s[11] *= (s[15] | 1u); + s[8] -= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 27u); + s[3] += s[12] + 0xdc6b4196u; + s[8] ^= s[3] ^ 0x274048d2u; + s[2] *= (s[8] | 1u); + s[9] += s[2]; + s[14] = mh_rotl(s[14] ^ s[9], 2u); + s[2] ^= s[14] ^ 0xb343b907u; + s[6] = mh_rotl(s[6] ^ s[2], 9u); + s[10] = mh_rotl(s[10], 30u) + s[6]; + s[14] ^= s[10]; + s[3] += s[14] + 0xa61ab1cbu; + s[8] ^= s[3]; + s[6] ^= s[8]; + s[8] ^= (s[6] & s[13]); + s[5] += s[8]; + s[0] ^= s[5]; + s[5] ^= s[0] ^ 0x70e371acu; + s[12] += s[5] + 0x0375455eu; + s[9] *= (s[12] | 1u); + s[12] -= s[9]; + s[13] ^= s[12]; + s[11] *= (s[13] | 1u); + s[0] = (s[0] ^ s[11]) * 0xc8207715u; + s[8] += s[0] + 0x30e154a7u; + s[11] ^= (s[8] & s[14]); + s[2] = mh_rotl(s[2], 28u) + s[11]; + s[7] = mh_rotl(s[7], 4u) + s[2]; + s[6] ^= s[7]; + s[8] += (s[6] | s[3]); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xa50fe152u; + s[4] += s[13]; + s[6] += s[4] + 0x5efa53b9u; + s[7] -= s[6]; + s[9] *= (s[7] | 1u); + s[0] ^= s[9] ^ 0xc117bdb1u; + s[1] ^= s[0] ^ 0xfb4c4c7fu; + s[9] += s[1] + 0x40542f12u; + s[14] ^= (s[9] & s[4]); + s[8] -= s[14]; + s[0] += (s[8] | s[5]); + s[14] += s[0]; + s[3] = (s[3] ^ s[14]) * 0x03c3c7b3u; + s[1] += s[3]; + s[5] ^= s[1] ^ 0x1db7ba5du; + s[15] -= s[5]; + s[13] += s[15] + 0x31cd0b01u; + s[4] ^= s[13] ^ 0xfe8d5080u; + s[7] ^= (s[4] & s[10]); + s[15] -= s[7]; + s[11] = (s[11] ^ s[15]) * 0x7a957f49u; + s[9] ^= s[11]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[11] *= (s[9] | 1u); + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[14] ^= s[5]; + s[10] += s[14]; + s[3] = mh_rotl(s[3], 9u) + s[10]; + s[15] *= (s[3] | 1u); + s[3] += s[15]; + s[14] += s[3]; + s[12] = (s[12] ^ s[14]) * 0x74df9dafu; + s[13] ^= s[12] ^ 0x6234d2f0u; + s[7] *= (s[13] | 1u); + s[0] ^= (s[7] & s[8]); + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] += s[6]; + s[2] += s[12] + 0x7878283cu; + s[3] = (s[3] ^ s[2]) * 0xc395c285u; + s[2] += s[3] + 0x0da9f095u; + s[15] = (s[15] ^ s[2]) * 0x0a11adabu; + s[3] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[3], 29u); + s[10] ^= s[0]; + s[8] *= (s[10] | 1u); + s[15] += s[8] + 0x9a71469fu; + s[14] += s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 22u); + s[8] *= (s[2] | 1u); + s[2] *= (s[8] | 1u); + s[14] = s[14] * 0xf8f0a631u + s[2]; + s[11] += s[14]; + s[0] += s[11]; + s[6] = s[6] * 0xaa299f0fu + s[0]; + s[0] ^= s[6] ^ 0xd0857982u; + s[10] = mh_rotl(s[10] ^ s[0], 27u); + s[12] *= (s[10] | 1u); + s[2] ^= s[12]; + s[0] += s[2]; + s[3] ^= s[0]; + s[2] = (s[2] ^ s[3]) * 0xfd0d9051u; + s[9] = mh_rotl(s[9] ^ s[2], 18u); + s[7] = mh_rotl(s[7] ^ s[9], 17u); + s[5] ^= s[7]; + s[10] = (s[10] ^ s[5]) * 0xde9ff341u; + s[9] ^= s[10] ^ 0xb2e1d8d8u; + s[12] += s[9]; + s[6] ^= s[12]; + s[9] += s[6]; + s[4] = (s[4] ^ s[9]) * 0x3420a8a9u; + s[14] -= s[4]; + s[15] ^= s[14] ^ 0x995ab330u; + s[4] = mh_rotl(s[4] ^ s[15], 17u); + s[6] ^= s[4]; + s[8] = (s[8] ^ s[6]) * 0xa3e9c281u; + s[2] = (s[2] ^ s[8]) * 0xb3f79451u; + s[4] += s[2]; + s[8] *= (s[4] | 1u); + s[1] ^= s[8]; + s[9] = (s[9] ^ s[1]) * 0x4a9cfe2bu; + s[4] ^= s[9]; + s[12] -= s[4]; + s[2] += s[12]; + s[5] = mh_rotl(s[5] ^ s[2], 25u); + s[7] -= s[5]; + s[2] -= s[7]; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[7] ^= (s[9] & s[12]); + s[8] += s[7]; + s[5] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[6] = mh_rotl(s[6] ^ s[7], 13u); + s[14] += s[6]; + s[1] = mh_rotl(s[1] ^ s[14], 27u); + s[13] = mh_rotl(s[13], 21u) + s[1]; + s[15] ^= s[13]; + s[13] ^= s[15] ^ 0x40932bd0u; + s[8] += (s[13] | s[6]); + s[6] += s[8]; + s[7] *= (s[6] | 1u); + s[3] = mh_rotl(s[3], 16u) + s[7]; + s[14] -= s[3]; + s[11] += s[14] + 0x2ba58291u; + s[10] += s[11] + 0x25cc7cbau; + s[3] = mh_rotl(s[3], 25u) + s[10]; + s[5] = mh_rotl(s[5] ^ s[3], 8u); + s[12] ^= (s[5] & s[7]); + s[14] *= (s[12] | 1u); + s[6] *= (s[14] | 1u); + s[0] ^= s[6]; + s[7] = mh_rotl(s[7] ^ s[0], 8u); + s[10] += s[7]; + s[8] *= (s[10] | 1u); + s[9] = (s[9] ^ s[8]) * 0x1669b1c1u; + s[12] ^= (s[9] & s[13]); + s[14] += s[12] + 0xda1c472du; + s[5] += s[14]; + s[1] = mh_rotl(s[1] ^ s[5], 14u); + s[15] = (s[15] ^ s[1]) * 0x8d0bb03bu; + s[10] += s[15] + 0x3c561da4u; + s[2] -= s[10]; + s[14] ^= s[2] ^ 0xea52ad39u; + s[12] += s[14] + 0x16903f58u; + s[1] -= s[12]; + s[6] = mh_rotl(s[6] ^ s[1], 25u); + s[7] = (s[7] ^ s[6]) * 0xb4a42f9bu; + s[1] ^= s[7]; + s[8] ^= (s[1] & s[4]); + s[13] ^= s[8] ^ 0xb1ef97a0u; + s[4] = mh_rotl(s[4] ^ s[13], 19u); + s[6] ^= (s[4] & s[10]); + s[3] -= s[6]; + s[4] += s[3]; + s[12] *= (s[4] | 1u); + s[8] = mh_rotl(s[8], 18u) + s[12]; + s[2] -= s[8]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] ^= s[0]; + s[9] = mh_rotl(s[9], 28u) + s[6]; + s[12] = (s[12] ^ s[9]) * 0x8a328161u; + s[7] ^= s[12]; + s[11] = (s[11] ^ s[7]) * 0x59795b43u; + s[15] = mh_rotl(s[15], 9u) + s[11]; + s[8] += s[15] + 0x7c995d60u; + s[3] += s[8]; + s[4] = s[4] * 0xfa1378abu + s[3]; + s[3] *= (s[4] | 1u); + s[5] -= s[3]; + s[1] += (s[5] | s[11]); + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[2] = s[2] * 0x9acc1327u + s[7]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 6u); + s[8] ^= s[13]; + s[15] -= s[8]; + s[0] *= (s[15] | 1u); + s[4] *= (s[0] | 1u); + s[14] -= s[4]; + s[15] ^= s[14]; + s[14] *= (s[15] | 1u); + s[3] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[3], 30u); + s[9] += s[14]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[14] ^= s[15]; + s[2] = mh_rotl(s[2] ^ s[14], 23u); + s[5] = mh_rotl(s[5] ^ s[2], 19u); + s[4] *= (s[5] | 1u); + s[7] *= (s[4] | 1u); + s[9] = mh_rotl(s[9] ^ s[7], 15u); + s[13] += s[9]; + s[11] *= (s[13] | 1u); + s[5] = (s[5] ^ s[11]) * 0xde859b27u; + s[11] = s[11] * 0xb564c36bu + s[5]; + s[10] ^= s[11]; + s[9] *= (s[10] | 1u); + s[14] = (s[14] ^ s[9]) * 0x8d89e53du; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = (s[8] ^ s[15]) * 0xe37283afu; + s[14] ^= s[8]; + s[12] ^= s[14]; + s[5] += (s[12] | s[6]); + s[13] += s[5]; + s[9] *= (s[13] | 1u); + s[14] *= (s[9] | 1u); + s[10] = s[10] * 0x5c918de7u + s[14]; + s[3] ^= s[10] ^ 0x6d738cdau; + s[12] += s[3]; + s[9] = (s[9] ^ s[12]) * 0xc4d29b63u; + s[2] *= (s[9] | 1u); + s[6] = (s[6] ^ s[2]) * 0x32887aa7u; + s[11] ^= s[6]; + s[9] += s[11] + 0x1e9643ebu; + s[12] = mh_rotl(s[12], 2u) + s[9]; + s[11] -= s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 18u); + s[2] ^= s[1]; + s[15] = mh_rotl(s[15], 14u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[15], 18u); + s[13] ^= s[12]; + s[1] ^= s[13]; + s[5] ^= (s[1] & s[3]); + s[12] += s[5]; + s[11] ^= s[12] ^ 0xf49f879eu; + s[15] ^= s[11]; + s[12] += s[15]; + s[4] *= (s[12] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 18u); +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_5(thread uint* s) { + s[3] += s[0]; + s[6] = (s[6] ^ s[3]) * 0xeb8c24a9u; + s[5] = (s[5] ^ s[6]) * 0xec704d07u; + s[10] += (s[5] | s[14]); + s[14] ^= s[10] ^ 0x62c5c9a6u; + s[8] += (s[14] | s[1]); + s[9] -= s[8]; + s[11] += (s[9] | s[13]); + s[14] ^= (s[11] & s[13]); + s[15] = mh_rotl(s[15], 21u) + s[14]; + s[13] *= (s[15] | 1u); + s[11] ^= (s[13] & s[7]); + s[0] = mh_rotl(s[0] ^ s[11], 24u); + s[9] *= (s[0] | 1u); + s[14] = s[14] * 0xab36a85du + s[9]; + s[0] = s[0] * 0xa839c927u + s[14]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4] ^ 0x83d1d8a6u; + s[3] = (s[3] ^ s[0]) * 0x54110efdu; + s[13] += s[3]; + s[12] = mh_rotl(s[12] ^ s[13], 19u); + s[5] = (s[5] ^ s[12]) * 0xbcdfd83fu; + s[3] = s[3] * 0xb0a88cb1u + s[5]; + s[9] = mh_rotl(s[9], 21u) + s[3]; + s[7] = (s[7] ^ s[9]) * 0x643041d5u; + s[0] += s[7] + 0x014758c4u; + s[5] = (s[5] ^ s[0]) * 0x582df671u; + s[15] = s[15] * 0x31ec0f8du + s[5]; + s[11] = mh_rotl(s[11], 26u) + s[15]; + s[13] = mh_rotl(s[13] ^ s[11], 6u); + s[4] ^= s[13] ^ 0xb0a4a410u; + s[5] *= (s[4] | 1u); + s[9] += s[5]; + s[1] ^= s[9]; + s[9] ^= s[1] ^ 0xc0bebcdfu; + s[2] ^= s[9]; + s[1] += s[2]; + s[13] = (s[13] ^ s[1]) * 0x71bad59du; + s[10] -= s[13]; + s[6] += s[10]; + s[9] = s[9] * 0x79718b5fu + s[6]; + s[2] = (s[2] ^ s[9]) * 0x12ef487du; + s[10] ^= s[2]; + s[2] = mh_rotl(s[2] ^ s[10], 21u); + s[11] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 16u); + s[2] = (s[2] ^ s[9]) * 0x56756b3fu; + s[10] = mh_rotl(s[10] ^ s[2], 2u); + s[6] += s[10]; + s[7] = s[7] * 0x0b4e6385u + s[6]; + s[10] += s[7]; + s[13] ^= s[10]; + s[5] -= s[13]; + s[14] ^= s[5]; + s[11] ^= (s[14] & s[0]); + s[6] = s[6] * 0x4fd7e53du + s[11]; + s[1] *= (s[6] | 1u); + s[15] += s[1]; + s[12] ^= s[15]; + s[10] += s[12]; + s[0] = mh_rotl(s[0] ^ s[10], 2u); + s[7] ^= s[0]; + s[14] ^= s[7] ^ 0x2a2f99f7u; + s[0] *= (s[14] | 1u); + s[7] ^= (s[0] & s[1]); + s[4] ^= s[7]; + s[13] += s[4]; + s[0] = (s[0] ^ s[13]) * 0x36833905u; + s[5] -= s[0]; + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[9] = mh_rotl(s[9], 12u) + s[3]; + s[14] ^= s[9]; + s[13] += s[14] + 0xe3bd2b0fu; + s[12] += s[13] + 0x4413899eu; + s[10] ^= s[12]; + s[1] ^= s[10]; + s[10] = mh_rotl(s[10], 31u) + s[1]; + s[8] = s[8] * 0xf8854e6du + s[10]; + s[2] ^= s[8] ^ 0x1391c2f2u; + s[4] = mh_rotl(s[4], 26u) + s[2]; + s[7] ^= s[4] ^ 0xb7b8bc86u; + s[3] *= (s[7] | 1u); + s[1] ^= (s[3] & s[4]); + s[13] ^= s[1]; + s[1] -= s[13]; + s[10] += s[1]; + s[2] = mh_rotl(s[2] ^ s[10], 5u); + s[6] += s[2] + 0x4e72cc89u; + s[12] ^= (s[6] & s[1]); + s[0] -= s[12]; + s[6] = (s[6] ^ s[0]) * 0xfdbe52d7u; + s[1] -= s[6]; + s[8] = mh_rotl(s[8], 30u) + s[1]; + s[5] += s[8]; + s[8] ^= (s[5] & s[13]); + s[15] += (s[8] | s[1]); + s[12] *= (s[15] | 1u); + s[15] *= (s[12] | 1u); + s[2] += s[15]; + s[5] += (s[2] | s[6]); + s[6] += (s[5] | s[4]); + s[14] = mh_rotl(s[14] ^ s[6], 8u); + s[0] *= (s[14] | 1u); + s[5] += s[0] + 0x09c67ebeu; + s[15] ^= s[5] ^ 0x156bc1ccu; + s[4] = mh_rotl(s[4], 28u) + s[15]; + s[7] += s[4]; + s[8] ^= s[7]; + s[6] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[6], 27u); + s[8] ^= s[4]; + s[15] = (s[15] ^ s[8]) * 0xa06ef0edu; + s[13] = mh_rotl(s[13] ^ s[15], 21u); + s[7] = mh_rotl(s[7] ^ s[13], 7u); + s[9] = (s[9] ^ s[7]) * 0x6d635cb5u; + s[15] += s[9]; + s[14] -= s[15]; + s[7] = mh_rotl(s[7] ^ s[14], 28u); + s[0] = mh_rotl(s[0], 9u) + s[7]; + s[8] ^= s[0]; + s[4] -= s[8]; + s[15] = mh_rotl(s[15], 6u) + s[4]; + s[11] = mh_rotl(s[11] ^ s[15], 15u); + s[7] -= s[11]; + s[12] = (s[12] ^ s[7]) * 0x01fed389u; + s[8] += s[12]; + s[14] -= s[8]; + s[1] = mh_rotl(s[1] ^ s[14], 28u); + s[5] *= (s[1] | 1u); + s[12] += s[5]; + s[14] += s[12]; + s[10] = mh_rotl(s[10] ^ s[14], 3u); + s[5] = (s[5] ^ s[10]) * 0xad88f2d5u; + s[1] += s[5]; + s[11] ^= s[1] ^ 0x77926639u; + s[9] ^= s[11]; + s[12] -= s[9]; + s[8] = s[8] * 0xfa22d721u + s[12]; + s[0] ^= s[8] ^ 0xe9e4f8edu; + s[5] = mh_rotl(s[5], 17u) + s[0]; + s[11] += s[5]; + s[1] ^= s[11]; + s[13] ^= s[1] ^ 0xfaae7919u; + s[1] += (s[13] | s[0]); + s[9] = mh_rotl(s[9] ^ s[1], 22u); + s[3] *= (s[9] | 1u); + s[10] ^= s[3]; + s[5] -= s[10]; + s[2] += s[5]; + s[14] = mh_rotl(s[14] ^ s[2], 5u); + s[4] ^= s[14]; + s[5] *= (s[4] | 1u); + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[15] = (s[15] ^ s[5]) * 0x34c09009u; + s[8] *= (s[15] | 1u); + s[12] ^= (s[8] & s[13]); + s[4] += s[12]; + s[12] += s[4] + 0xe0c44ae5u; + s[8] = mh_rotl(s[8], 12u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[8], 11u); + s[2] ^= s[12]; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[13] += s[0] + 0x7a0818e1u; + s[12] = mh_rotl(s[12], 2u) + s[13]; + s[8] ^= (s[12] & s[1]); + s[6] ^= s[8]; + s[8] *= (s[6] | 1u); + s[14] += s[8]; + s[9] = mh_rotl(s[9] ^ s[14], 7u); + s[14] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[14], 2u); + s[12] ^= s[9]; + s[3] ^= s[12] ^ 0xfaa7ba68u; + s[10] = mh_rotl(s[10], 26u) + s[3]; + s[4] ^= s[10] ^ 0x69fb8372u; + s[8] ^= s[4]; + s[14] = (s[14] ^ s[8]) * 0xd0560d4fu; + s[5] ^= s[14]; + s[0] *= (s[5] | 1u); + s[10] ^= (s[0] & s[13]); + s[7] += s[10]; + s[8] = s[8] * 0xf397c40du + s[7]; + s[4] ^= s[8] ^ 0x8bf8d86au; + s[13] ^= s[4] ^ 0x8bc1b817u; + s[0] = mh_rotl(s[0], 28u) + s[13]; + s[4] += s[0]; + s[10] ^= s[4]; + s[12] += s[10]; + s[0] = mh_rotl(s[0] ^ s[12], 18u); + s[1] = (s[1] ^ s[0]) * 0x587d6993u; + s[10] = mh_rotl(s[10], 14u) + s[1]; + s[3] ^= s[10] ^ 0xe428141au; + s[13] *= (s[3] | 1u); + s[12] = mh_rotl(s[12] ^ s[13], 22u); + s[14] -= s[12]; + s[1] -= s[14]; + s[6] = mh_rotl(s[6], 31u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[6], 16u); + s[6] = s[6] * 0xd2da54cdu + s[11]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[4] += s[12] + 0x6e5c8780u; + s[15] ^= s[4] ^ 0x437bad36u; + s[9] = mh_rotl(s[9], 7u) + s[15]; + s[11] = s[11] * 0x68e0eacbu + s[9]; + s[6] += s[11]; + s[5] -= s[6]; + s[12] ^= (s[5] & s[10]); + s[13] = (s[13] ^ s[12]) * 0x613ad747u; + s[2] += s[13] + 0x16b1a53du; + s[3] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[3], 13u); + s[15] += s[14] + 0x33619f2eu; + s[6] ^= s[15]; + s[15] = mh_rotl(s[15], 24u) + s[6]; + s[12] += s[15]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[9] += s[10]; + s[4] *= (s[9] | 1u); + s[6] ^= s[4]; + s[13] -= s[6]; + s[1] *= (s[13] | 1u); + s[11] *= (s[1] | 1u); + s[7] *= (s[11] | 1u); + s[13] -= s[7]; + s[0] = (s[0] ^ s[13]) * 0xfeca92ddu; + s[9] = mh_rotl(s[9] ^ s[0], 24u); + s[14] ^= (s[9] & s[10]); + s[0] -= s[14]; + s[5] ^= s[0]; + s[9] ^= s[5]; + s[5] = (s[5] ^ s[9]) * 0xe0456a5du; + s[11] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[11], 29u); + s[11] = mh_rotl(s[11] ^ s[10], 24u); + s[0] += (s[11] | s[15]); + s[2] ^= s[0] ^ 0x4625da37u; + s[6] = mh_rotl(s[6] ^ s[2], 26u); + s[3] -= s[6]; + s[9] += s[3]; + s[4] ^= (s[9] & s[12]); + s[7] *= (s[4] | 1u); + s[1] -= s[7]; + s[3] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 23u); + s[6] = (s[6] ^ s[2]) * 0x3bbae9d3u; + s[1] = mh_rotl(s[1] ^ s[6], 10u); + s[8] ^= s[1]; + s[15] = (s[15] ^ s[8]) * 0xb5172567u; + s[3] += s[15]; + s[0] ^= (s[3] & s[5]); + s[2] = (s[2] ^ s[0]) * 0xbfe80ff1u; + s[14] -= s[2]; + s[6] -= s[14]; + s[0] = mh_rotl(s[0] ^ s[6], 24u); + s[10] = s[10] * 0x965ee7ebu + s[0]; + s[15] -= s[10]; + s[0] += s[15]; + s[4] += s[0]; + s[3] = mh_rotl(s[3], 14u) + s[4]; + s[12] += (s[3] | s[9]); + s[5] = mh_rotl(s[5] ^ s[12], 3u); + s[9] *= (s[5] | 1u); + s[5] += s[9]; + s[14] = (s[14] ^ s[5]) * 0xb64f271du; + s[9] -= s[14]; + s[8] *= (s[9] | 1u); + s[3] = (s[3] ^ s[8]) * 0x69f51253u; + s[13] -= s[3]; + s[12] ^= s[13] ^ 0x8ee490b4u; + s[13] = mh_rotl(s[13] ^ s[12], 27u); + s[14] ^= s[13] ^ 0xbcfac44eu; + s[15] += s[14]; + s[1] = mh_rotl(s[1], 6u) + s[15]; + s[14] += s[1]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[10] += (s[6] | s[4]); + s[6] *= (s[10] | 1u); + s[13] = mh_rotl(s[13], 15u) + s[6]; + s[8] = mh_rotl(s[8], 21u) + s[13]; + s[3] -= s[8]; + s[12] = mh_rotl(s[12] ^ s[3], 9u); + s[10] += s[12] + 0x346fb7eeu; + s[3] -= s[10]; + s[12] += s[3] + 0xc936ca56u; + s[3] -= s[12]; + s[5] = mh_rotl(s[5], 2u) + s[3]; + s[11] ^= s[5]; + s[12] ^= s[11] ^ 0x46abb8ffu; + s[10] += s[12]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[11] = mh_rotl(s[11], 31u) + s[2]; + s[7] += (s[11] | s[4]); + s[3] ^= s[7] ^ 0x8c92b860u; + s[6] += s[3]; + s[11] *= (s[6] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 1u); + s[9] = mh_rotl(s[9], 22u) + s[8]; + s[5] ^= s[9]; + s[9] ^= s[5] ^ 0x6d49ae98u; + s[12] *= (s[9] | 1u); + s[0] ^= s[12]; + s[5] = mh_rotl(s[5], 1u) + s[0]; + s[10] = s[10] * 0xfceded15u + s[5]; + s[6] ^= s[10]; + s[7] += s[6]; + s[10] = mh_rotl(s[10], 26u) + s[7]; + s[13] += s[10]; + s[15] ^= (s[13] & s[10]); + s[10] ^= s[15] ^ 0x10494cd6u; + s[13] = s[13] * 0x043625d1u + s[10]; + s[5] *= (s[13] | 1u); + s[7] = mh_rotl(s[7] ^ s[5], 5u); + s[2] = (s[2] ^ s[7]) * 0x1276600bu; + s[8] = (s[8] ^ s[2]) * 0xac53054bu; + s[10] ^= s[8] ^ 0xd5306663u; + s[15] += s[10]; + s[8] *= (s[15] | 1u); + s[0] = (s[0] ^ s[8]) * 0x12dd02dbu; + s[1] = mh_rotl(s[1] ^ s[0], 29u); + s[4] = mh_rotl(s[4] ^ s[1], 12u); + s[13] = mh_rotl(s[13], 21u) + s[4]; + s[4] = (s[4] ^ s[13]) * 0xd9d84eddu; + s[2] += s[4]; + s[12] -= s[2]; + s[6] ^= s[12] ^ 0xa6690db7u; + s[14] += s[6]; + s[5] += s[14] + 0x3d839e2bu; + s[12] = mh_rotl(s[12] ^ s[5], 18u); + s[10] ^= (s[12] & s[9]); + s[14] = (s[14] ^ s[10]) * 0x8735918du; + s[0] = mh_rotl(s[0] ^ s[14], 25u); + s[14] += s[0] + 0x4032aa8du; + s[6] = mh_rotl(s[6], 6u) + s[14]; + s[1] ^= s[6] ^ 0x2c453b82u; + s[0] = (s[0] ^ s[1]) * 0x2a9abf35u; + s[2] -= s[0]; + s[4] ^= (s[2] & s[11]); + s[2] *= (s[4] | 1u); + s[5] ^= s[2]; + s[6] = mh_rotl(s[6] ^ s[5], 17u); + s[14] ^= s[6] ^ 0xb98cf2eeu; + s[0] ^= s[14]; + s[12] += s[0] + 0x37fc2a78u; + s[10] += s[12]; + s[12] = (s[12] ^ s[10]) * 0xb13a0e53u; + s[9] = (s[9] ^ s[12]) * 0x59d4dc61u; + s[10] += s[9] + 0xed0d9cecu; + s[6] = mh_rotl(s[6], 27u) + s[10]; + s[10] ^= s[6]; + s[1] += s[10] + 0x38911ae4u; + s[2] = mh_rotl(s[2], 4u) + s[1]; + s[3] += (s[2] | s[6]); + s[15] = s[15] * 0xa10c5147u + s[3]; + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[3] -= s[9]; + s[4] ^= s[3] ^ 0x09b8cee2u; + s[13] += (s[4] | s[8]); + s[14] -= s[13]; + s[10] ^= s[14] ^ 0xde5b028du; + s[14] *= (s[10] | 1u); + s[4] += s[14] + 0xbebd25ffu; + s[11] ^= s[4]; + s[15] += s[11]; + s[3] ^= s[15] ^ 0x0157f354u; + s[2] = (s[2] ^ s[3]) * 0x2e6b681du; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[11] += (s[0] | s[7]); + s[9] = mh_rotl(s[9] ^ s[11], 28u); + s[1] ^= (s[9] & s[5]); + s[2] = (s[2] ^ s[1]) * 0x8c67acb5u; + s[9] = mh_rotl(s[9] ^ s[2], 15u); + s[5] += (s[9] | s[14]); + s[7] += s[5]; + s[10] += (s[7] | s[15]); + s[12] = mh_rotl(s[12] ^ s[10], 12u); + s[10] = (s[10] ^ s[12]) * 0x8321a9edu; + s[15] ^= s[10] ^ 0x2bb47d41u; + s[1] += s[15] + 0xf55a878du; + s[3] ^= s[1] ^ 0x5f495580u; + s[12] += s[3]; + s[15] -= s[12]; + s[10] += s[15]; + s[14] ^= s[10]; + s[12] = (s[12] ^ s[14]) * 0x6982d931u; + s[6] ^= s[12] ^ 0x5a0647a9u; + s[3] ^= s[6]; + s[11] = mh_rotl(s[11] ^ s[3], 28u); + s[6] = mh_rotl(s[6], 9u) + s[11]; + s[9] = mh_rotl(s[9], 17u) + s[6]; + s[15] = mh_rotl(s[15] ^ s[9], 28u); + s[13] ^= s[15]; + s[2] += s[13] + 0x161113b3u; + s[5] ^= s[2] ^ 0x51604bb3u; + s[13] = mh_rotl(s[13], 20u) + s[5]; + s[7] += s[13] + 0x485a1932u; + s[14] -= s[7]; + s[12] ^= (s[14] & s[3]); + s[14] = mh_rotl(s[14], 29u) + s[12]; + s[7] -= s[14]; + s[9] ^= s[7]; + s[14] ^= (s[9] & s[12]); + s[8] = (s[8] ^ s[14]) * 0xa3da88b9u; + s[6] = (s[6] ^ s[8]) * 0xdd3e9ca3u; + s[12] ^= s[6]; + s[4] += (s[12] | s[13]); + s[13] = (s[13] ^ s[4]) * 0x0658106fu; + s[10] = (s[10] ^ s[13]) * 0x49f6cb31u; + s[3] ^= s[10] ^ 0x3342d583u; + s[13] = mh_rotl(s[13], 20u) + s[3]; + s[14] ^= s[13] ^ 0xc5f67216u; + s[4] = (s[4] ^ s[14]) * 0xc7b5f0fdu; + s[2] = (s[2] ^ s[4]) * 0xfec902c3u; + s[10] += s[2]; + s[5] ^= (s[10] & s[8]); + s[2] ^= s[5]; + s[11] ^= s[2]; + s[0] ^= s[11] ^ 0x8646d6d8u; + s[13] += s[0] + 0x4fc0a99fu; + s[10] = (s[10] ^ s[13]) * 0x34655acfu; + s[12] = mh_rotl(s[12], 15u) + s[10]; + s[3] = mh_rotl(s[3], 31u) + s[12]; + s[11] ^= s[3] ^ 0xece30db7u; + s[13] += s[11] + 0x723a0b0eu; + s[14] -= s[13]; + s[1] += s[14]; + s[10] ^= s[1]; + s[12] *= (s[10] | 1u); + s[4] ^= s[12]; + s[13] ^= s[4]; + s[0] += s[13]; + s[4] -= s[0]; + s[5] *= (s[4] | 1u); + s[14] += s[5]; + s[15] = (s[15] ^ s[14]) * 0xca24c253u; + s[0] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[0], 3u); + s[13] = (s[13] ^ s[8]) * 0x4c689903u; + s[3] ^= s[13]; + s[5] ^= s[3]; + s[4] += s[5] + 0xd0e100c0u; + s[9] ^= (s[4] & s[6]); + s[10] = mh_rotl(s[10] ^ s[9], 27u); + s[0] = s[0] * 0xec7a3889u + s[10]; + s[3] -= s[0]; + s[1] ^= s[3] ^ 0x61331fd7u; + s[9] = mh_rotl(s[9] ^ s[1], 15u); + s[0] ^= s[9]; + s[7] += s[0] + 0xa7848bacu; + s[11] += s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 6u); + s[11] -= s[2]; + s[3] -= s[11]; + s[13] ^= s[3]; + s[7] = (s[7] ^ s[13]) * 0xd454fc59u; + s[13] ^= (s[7] & s[1]); + s[9] += s[13] + 0xdaba595au; + s[11] ^= s[9] ^ 0x0dbe4c62u; + s[6] -= s[11]; + s[7] = s[7] * 0x64236413u + s[6]; + s[8] = mh_rotl(s[8] ^ s[7], 19u); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[1] += s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[10] = mh_rotl(s[10] ^ s[14], 24u); + s[8] = (s[8] ^ s[10]) * 0x11582fa5u; + s[0] -= s[8]; + s[3] ^= s[0] ^ 0xe88102d4u; + s[5] = mh_rotl(s[5], 16u) + s[3]; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[3] = mh_rotl(s[3], 1u) + s[2]; + s[4] -= s[3]; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[0], 10u); + s[12] += s[3]; + s[8] = mh_rotl(s[8] ^ s[12], 24u); + s[9] = mh_rotl(s[9], 31u) + s[8]; + s[7] -= s[9]; + s[10] ^= s[7]; + s[4] += (s[10] | s[2]); + s[5] ^= s[4]; + s[1] += s[5] + 0xa17d3697u; + s[4] = mh_rotl(s[4] ^ s[1], 13u); + s[12] ^= s[4]; + s[7] ^= s[12]; + s[14] = mh_rotl(s[14] ^ s[7], 25u); + s[4] = mh_rotl(s[4], 28u) + s[14]; + s[14] -= s[4]; + s[12] ^= s[14]; + s[6] -= s[12]; + s[5] = mh_rotl(s[5] ^ s[6], 5u); + s[2] += s[5] + 0x6f8f3046u; + s[9] += s[2]; + s[8] = (s[8] ^ s[9]) * 0xbcb4183du; + s[11] += s[8]; + s[13] *= (s[11] | 1u); + s[15] += s[13]; + s[8] = (s[8] ^ s[15]) * 0x4f5a0a23u; + s[13] += s[8] + 0x26061a70u; + s[3] ^= s[13] ^ 0x9351deb0u; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[5] += s[13]; + s[3] -= s[5]; + s[13] += s[3]; + s[7] = (s[7] ^ s[13]) * 0xc9cd8fcdu; + s[10] *= (s[7] | 1u); + s[7] -= s[10]; + s[5] += s[7]; + s[1] += s[5]; + s[15] ^= (s[1] & s[8]); + s[9] -= s[15]; + s[10] = mh_rotl(s[10], 24u) + s[9]; + s[6] = mh_rotl(s[6], 1u) + s[10]; + s[3] ^= s[6]; + s[0] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[0], 20u); + s[5] += s[12]; + s[0] = s[0] * 0x2418a23du + s[5]; + s[11] = (s[11] ^ s[0]) * 0x6c58993bu; + s[14] ^= s[11] ^ 0x4a8ca854u; + s[15] *= (s[14] | 1u); + s[0] += s[15]; + s[11] = mh_rotl(s[11] ^ s[0], 17u); + s[5] -= s[11]; + s[6] *= (s[5] | 1u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[4] ^= s[10]; + s[14] = mh_rotl(s[14], 28u) + s[4]; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x54779a6fu; + s[4] += s[9]; + s[12] += s[4]; + s[8] = mh_rotl(s[8] ^ s[12], 22u); + s[12] += (s[8] | s[7]); + s[8] = mh_rotl(s[8], 7u) + s[12]; + s[14] -= s[8]; + s[3] ^= s[14] ^ 0x5bc9132cu; + s[1] ^= s[3] ^ 0xa3e75626u; + s[8] = (s[8] ^ s[1]) * 0x4a1396f7u; + s[5] = mh_rotl(s[5] ^ s[8], 27u); + s[11] += s[5]; + s[4] = mh_rotl(s[4] ^ s[11], 8u); + s[7] = (s[7] ^ s[4]) * 0x88273613u; + s[15] += s[7]; + s[1] -= s[15]; + s[12] ^= (s[1] & s[9]); + s[14] += s[12]; + s[7] = s[7] * 0x5081a79du + s[14]; + s[6] = mh_rotl(s[6], 14u) + s[7]; + s[3] ^= s[6]; + s[10] = s[10] * 0x1b283fddu + s[3]; + s[6] = (s[6] ^ s[10]) * 0x73e5e60fu; + s[3] = (s[3] ^ s[6]) * 0xc9863803u; + s[1] ^= s[3]; + s[15] -= s[1]; + s[5] ^= (s[15] & s[7]); + s[14] += s[5]; + s[8] += s[14] + 0x185096cdu; + s[11] ^= s[8] ^ 0x9ef04aa3u; + s[5] -= s[11]; + s[2] = mh_rotl(s[2] ^ s[5], 18u); + s[9] += s[2]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[15], 27u); + s[10] -= s[0]; + s[2] = mh_rotl(s[2] ^ s[10], 7u); + s[15] += s[2] + 0x442bb076u; + s[8] ^= (s[15] & s[13]); + s[14] = mh_rotl(s[14], 31u) + s[8]; + s[15] ^= s[14]; + s[4] -= s[15]; + s[15] *= (s[4] | 1u); + s[11] = mh_rotl(s[11], 3u) + s[15]; + s[1] *= (s[11] | 1u); + s[11] = mh_rotl(s[11] ^ s[1], 19u); + s[3] = mh_rotl(s[3] ^ s[11], 21u); + s[1] = (s[1] ^ s[3]) * 0x6cbc5bb9u; + s[6] += s[1]; + s[3] = s[3] * 0xe2cb6cebu + s[6]; + s[1] += s[3]; + s[13] = mh_rotl(s[13], 19u) + s[1]; + s[3] ^= s[13]; + s[11] -= s[3]; + s[0] += s[11]; + s[8] *= (s[0] | 1u); + s[11] += s[8] + 0x6853a703u; + s[9] ^= s[11]; + s[10] += s[9]; + s[12] = (s[12] ^ s[10]) * 0x9a3ac6dbu; + s[10] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 8u); + s[2] ^= s[13]; + s[10] -= s[2]; + s[12] = (s[12] ^ s[10]) * 0x833838d1u; + s[9] = mh_rotl(s[9], 3u) + s[12]; + s[2] ^= s[9]; + s[12] ^= s[2]; + s[11] = (s[11] ^ s[12]) * 0x2370b681u; + s[9] = (s[9] ^ s[11]) * 0x7f4b0295u; + s[11] ^= s[9]; + s[9] = s[9] * 0x06b0dc0du + s[11]; + s[5] ^= s[9]; + s[12] = mh_rotl(s[12] ^ s[5], 19u); + s[4] *= (s[12] | 1u); + s[3] ^= (s[4] & s[8]); + s[6] += s[3]; + s[1] += s[6] + 0xc6e02045u; + s[9] += s[1] + 0xf8f493d8u; + s[12] -= s[9]; + s[2] += s[12]; + s[14] += s[2]; + s[10] = mh_rotl(s[10], 29u) + s[14]; + s[7] += s[10]; + s[12] += s[7]; + s[7] += s[12]; + s[12] -= s[7]; + s[3] ^= s[12]; + s[11] ^= s[3] ^ 0xd6f7214fu; + s[3] ^= s[11]; + s[15] = (s[15] ^ s[3]) * 0x0f25c855u; + s[5] -= s[15]; + s[1] ^= s[5]; + s[0] += s[1]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[10] = (s[10] ^ s[15]) * 0x286496e5u; + s[12] += s[10] + 0x3e03a265u; + s[1] -= s[12]; + s[3] -= s[1]; + s[14] ^= s[3] ^ 0xdf78ab91u; + s[10] = s[10] * 0x64a3bcb1u + s[14]; + s[11] += s[10]; + s[1] += s[11]; + s[11] ^= s[1] ^ 0x163d1a0fu; + s[15] = s[15] * 0xfcc7a02bu + s[11]; + s[8] -= s[15]; + s[3] += s[8] + 0x2fc585d7u; + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[4] = (s[4] ^ s[9]) * 0xf91a42afu; + s[13] += s[4]; + s[15] = s[15] * 0xb3102455u + s[13]; + s[11] -= s[15]; + s[12] ^= s[11]; + s[14] = (s[14] ^ s[12]) * 0xd7e9b5afu; + s[5] = mh_rotl(s[5], 1u) + s[14]; + s[2] += s[5]; + s[0] ^= s[2]; + s[6] = (s[6] ^ s[0]) * 0xf95b573du; + s[8] = (s[8] ^ s[6]) * 0x115cc1f5u; + s[3] = s[3] * 0x7bb26c65u + s[8]; + s[1] ^= s[3]; + s[9] = s[9] * 0xcdee5da3u + s[1]; + s[4] *= (s[9] | 1u); + s[11] += s[4] + 0xb5fccc2bu; + s[2] += s[11] + 0x5e38801fu; + s[11] = (s[11] ^ s[2]) * 0x397014ebu; + s[14] = mh_rotl(s[14] ^ s[11], 4u); + s[3] = (s[3] ^ s[14]) * 0xbbf780efu; + s[10] ^= s[3]; + s[4] ^= s[10] ^ 0x4abb5f0au; + s[10] ^= (s[4] & s[6]); + s[15] += s[10]; + s[9] ^= (s[15] & s[4]); + s[11] = mh_rotl(s[11], 20u) + s[9]; + s[13] ^= s[11]; + s[5] += s[13] + 0x104bed55u; + s[6] = s[6] * 0x2b9b1395u + s[5]; + s[7] = (s[7] ^ s[6]) * 0xdd08fdebu; + s[9] = (s[9] ^ s[7]) * 0x46d23ed5u; + s[3] = s[3] * 0xcd451ba9u + s[9]; + s[11] ^= s[3]; + s[10] += s[11] + 0xeb7a45b8u; + s[0] ^= s[10]; + s[7] += s[0]; + s[15] = mh_rotl(s[15], 2u) + s[7]; + s[12] -= s[15]; + s[8] ^= s[12]; + s[1] += s[8]; + s[5] = (s[5] ^ s[1]) * 0xc6f4ee59u; + s[14] *= (s[5] | 1u); + s[7] = mh_rotl(s[7] ^ s[14], 31u); + s[12] -= s[7]; + s[13] += s[12]; + s[1] = mh_rotl(s[1] ^ s[13], 30u); + s[14] -= s[1]; + s[1] ^= s[14]; + s[6] *= (s[1] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[8] = mh_rotl(s[8], 15u) + s[15]; + s[15] += s[8] + 0x8e6a0f17u; + s[9] += (s[15] | s[12]); + s[11] ^= s[9]; + s[6] *= (s[11] | 1u); + s[7] += s[6] + 0xe553414fu; + s[8] = (s[8] ^ s[7]) * 0xab271281u; + s[12] += s[8]; + s[14] *= (s[12] | 1u); + s[9] ^= s[14]; + s[5] ^= s[9]; + s[7] += (s[5] | s[2]); + s[3] += s[7]; + s[11] -= s[3]; + s[0] = (s[0] ^ s[11]) * 0x2f8b8657u; + s[1] += s[0]; + s[15] = mh_rotl(s[15], 15u) + s[1]; + s[0] = s[0] * 0xf98801d1u + s[15]; + s[10] = s[10] * 0xc3d74db5u + s[0]; + s[15] -= s[10]; + s[13] -= s[15]; + s[4] = mh_rotl(s[4], 11u) + s[13]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 16u) + s[14]; + s[5] += s[11] + 0x14945643u; + s[13] = (s[13] ^ s[5]) * 0xade16d23u; + s[8] ^= s[13] ^ 0x7234c3c3u; + s[15] = mh_rotl(s[15], 30u) + s[8]; + s[2] = (s[2] ^ s[15]) * 0x79ec043du; + s[7] ^= s[2]; + s[15] *= (s[7] | 1u); + s[9] = mh_rotl(s[9], 24u) + s[15]; + s[7] *= (s[9] | 1u); + s[1] ^= s[7]; + s[9] = (s[9] ^ s[1]) * 0x89ea4addu; + s[4] ^= s[9]; + s[0] ^= s[4]; + s[1] -= s[0]; + s[9] += s[1] + 0x0690537cu; + s[1] += s[9] + 0xe5486bebu; + s[6] = mh_rotl(s[6] ^ s[1], 19u); + s[15] -= s[6]; +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_6(thread uint* s) { + s[11] += s[0]; + s[13] += (s[11] | s[0]); + s[14] ^= s[13]; + s[15] += (s[14] | s[8]); + s[0] = mh_rotl(s[0], 1u) + s[15]; + s[15] *= (s[0] | 1u); + s[7] += (s[15] | s[14]); + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[15] = mh_rotl(s[15], 24u) + s[1]; + s[6] = mh_rotl(s[6], 28u) + s[15]; + s[12] ^= (s[6] & s[7]); + s[6] = mh_rotl(s[6], 15u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 30u); + s[7] ^= s[15]; + s[5] ^= s[7] ^ 0x1874ccb9u; + s[13] = (s[13] ^ s[5]) * 0xead971f1u; + s[2] += s[13]; + s[8] *= (s[2] | 1u); + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[2] += (s[15] | s[4]); + s[13] ^= (s[2] & s[6]); + s[15] += s[13]; + s[3] += s[15] + 0xeea76305u; + s[15] = mh_rotl(s[15], 9u) + s[3]; + s[1] += s[15]; + s[9] *= (s[1] | 1u); + s[5] += s[9]; + s[1] = mh_rotl(s[1] ^ s[5], 17u); + s[11] += s[1]; + s[2] += s[11]; + s[6] += s[2]; + s[1] = (s[1] ^ s[6]) * 0x4f9b8f91u; + s[8] = mh_rotl(s[8] ^ s[1], 31u); + s[7] = (s[7] ^ s[8]) * 0xf1d427b1u; + s[6] += s[7]; + s[15] = mh_rotl(s[15] ^ s[6], 7u); + s[10] = mh_rotl(s[10], 20u) + s[15]; + s[6] -= s[10]; + s[10] = (s[10] ^ s[6]) * 0x286194bfu; + s[0] *= (s[10] | 1u); + s[4] = (s[4] ^ s[0]) * 0xc953f135u; + s[9] += s[4] + 0x6ba4448eu; + s[4] = (s[4] ^ s[9]) * 0xb1856abdu; + s[5] ^= s[4] ^ 0xf42a5bdcu; + s[4] = mh_rotl(s[4], 24u) + s[5]; + s[3] += s[4]; + s[10] += s[3]; + s[6] += (s[10] | s[5]); + s[12] += s[6]; + s[5] ^= s[12] ^ 0xc802dfebu; + s[4] = (s[4] ^ s[5]) * 0x412d8fbfu; + s[14] ^= s[4] ^ 0x9e40e380u; + s[11] = (s[11] ^ s[14]) * 0xed0a749fu; + s[15] *= (s[11] | 1u); + s[14] = (s[14] ^ s[15]) * 0x23a1ec6du; + s[3] += s[14]; + s[12] ^= s[3] ^ 0xc9907e2bu; + s[1] = s[1] * 0x5bbedaf5u + s[12]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[8] = (s[8] ^ s[6]) * 0x600cfb09u; + s[14] += s[8]; + s[12] += s[14] + 0x78988768u; + s[4] = s[4] * 0xa626cf43u + s[12]; + s[13] = (s[13] ^ s[4]) * 0x54dc81e3u; + s[0] *= (s[13] | 1u); + s[13] -= s[0]; + s[8] += (s[13] | s[9]); + s[1] ^= s[8]; + s[6] = (s[6] ^ s[1]) * 0xd367f779u; + s[7] -= s[6]; + s[13] += s[7]; + s[6] = s[6] * 0xe7cffbcdu + s[13]; + s[3] = (s[3] ^ s[6]) * 0xfa1b7e5du; + s[13] = mh_rotl(s[13], 31u) + s[3]; + s[2] ^= s[13]; + s[4] *= (s[2] | 1u); + s[3] ^= s[4]; + s[4] -= s[3]; + s[15] += s[4]; + s[8] = (s[8] ^ s[15]) * 0x9a841483u; + s[5] ^= s[8]; + s[15] ^= (s[5] & s[0]); + s[4] += s[15]; + s[9] = mh_rotl(s[9] ^ s[4], 14u); + s[12] *= (s[9] | 1u); + s[10] += (s[12] | s[3]); + s[2] = mh_rotl(s[2] ^ s[10], 19u); + s[5] *= (s[2] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 17u); + s[7] ^= s[14]; + s[12] += s[7]; + s[8] = s[8] * 0x563fd2c3u + s[12]; + s[13] = mh_rotl(s[13], 6u) + s[8]; + s[11] += s[13] + 0xfe09487du; + s[14] -= s[11]; + s[2] -= s[14]; + s[0] += s[2] + 0x134d34fbu; + s[7] -= s[0]; + s[13] = mh_rotl(s[13], 20u) + s[7]; + s[15] = mh_rotl(s[15] ^ s[13], 12u); + s[9] += s[15]; + s[0] -= s[9]; + s[15] ^= s[0] ^ 0xd26cf159u; + s[12] += s[15] + 0x0c050d95u; + s[3] = s[3] * 0x3f90fd07u + s[12]; + s[7] -= s[3]; + s[13] = (s[13] ^ s[7]) * 0xbb3ea981u; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[6] ^= (s[8] & s[4]); + s[7] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[7], 23u); + s[4] *= (s[6] | 1u); + s[6] -= s[4]; + s[12] = mh_rotl(s[12] ^ s[6], 8u); + s[11] -= s[12]; + s[5] -= s[11]; + s[4] = (s[4] ^ s[5]) * 0xb0a03621u; + s[15] *= (s[4] | 1u); + s[0] = mh_rotl(s[0], 8u) + s[15]; + s[15] ^= s[0]; + s[8] += s[15] + 0x15f21a1au; + s[2] ^= s[8]; + s[13] = mh_rotl(s[13], 22u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[13], 4u); + s[4] += s[2]; + s[11] *= (s[4] | 1u); + s[15] = mh_rotl(s[15], 16u) + s[11]; + s[14] *= (s[15] | 1u); + s[1] += s[14]; + s[5] += s[1]; + s[13] ^= s[5] ^ 0x4d858e87u; + s[12] *= (s[13] | 1u); + s[10] = mh_rotl(s[10], 19u) + s[12]; + s[5] += s[10]; + s[15] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[15], 30u); + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[10] -= s[3]; + s[11] = mh_rotl(s[11], 5u) + s[10]; + s[12] ^= s[11]; + s[7] *= (s[12] | 1u); + s[12] = mh_rotl(s[12] ^ s[7], 2u); + s[6] ^= s[12]; + s[11] -= s[6]; + s[3] += s[11] + 0x15d75f72u; + s[6] += s[3]; + s[4] *= (s[6] | 1u); + s[3] -= s[4]; + s[12] += s[3] + 0x02d9ef35u; + s[0] -= s[12]; + s[15] ^= s[0] ^ 0xa34641eeu; + s[7] *= (s[15] | 1u); + s[8] ^= s[7] ^ 0x5c0473a2u; + s[10] *= (s[8] | 1u); + s[4] *= (s[10] | 1u); + s[12] ^= s[4]; + s[5] += s[12]; + s[15] = mh_rotl(s[15], 29u) + s[5]; + s[0] = mh_rotl(s[0], 7u) + s[15]; + s[15] += s[0]; + s[11] ^= s[15]; + s[4] += (s[11] | s[13]); + s[9] = mh_rotl(s[9] ^ s[4], 5u); + s[11] -= s[9]; + s[7] += s[11]; + s[5] *= (s[7] | 1u); + s[12] += s[5]; + s[3] *= (s[12] | 1u); + s[0] += s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 8u); + s[13] = (s[13] ^ s[10]) * 0x3a550111u; + s[15] += s[13]; + s[1] *= (s[15] | 1u); + s[2] = s[2] * 0x95352fdfu + s[1]; + s[8] = (s[8] ^ s[2]) * 0x269301a1u; + s[4] = mh_rotl(s[4] ^ s[8], 5u); + s[5] -= s[4]; + s[10] *= (s[5] | 1u); + s[7] += s[10] + 0x1d87f038u; + s[5] = (s[5] ^ s[7]) * 0xecbf1c27u; + s[11] -= s[5]; + s[2] -= s[11]; + s[8] ^= s[2]; + s[6] ^= s[8]; + s[7] -= s[6]; + s[13] -= s[7]; + s[2] -= s[13]; + s[3] ^= s[2]; + s[5] = (s[5] ^ s[3]) * 0x8ef62aebu; + s[7] = (s[7] ^ s[5]) * 0x594b5f33u; + s[12] += s[7]; + s[13] = (s[13] ^ s[12]) * 0xdaa86fd9u; + s[6] += s[13]; + s[13] ^= s[6]; + s[7] += s[13]; + s[5] = mh_rotl(s[5], 17u) + s[7]; + s[4] = (s[4] ^ s[5]) * 0x19723005u; + s[8] -= s[4]; + s[12] ^= s[8]; + s[11] ^= s[12]; + s[8] ^= s[11] ^ 0x0739c480u; + s[2] ^= s[8]; + s[15] = (s[15] ^ s[2]) * 0xc15f8403u; + s[14] -= s[15]; + s[9] += s[14] + 0x2b0ab64au; + s[1] ^= s[9]; + s[9] += (s[1] | s[6]); + s[15] += s[9]; + s[13] += s[15]; + s[6] ^= s[13]; + s[9] ^= s[6] ^ 0xfaf52102u; + s[11] += s[9]; + s[6] += s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 15u); + s[9] -= s[8]; + s[4] ^= s[9]; + s[0] -= s[4]; + s[5] = mh_rotl(s[5], 12u) + s[0]; + s[15] = mh_rotl(s[15], 10u) + s[5]; + s[8] += s[15]; + s[10] ^= s[8] ^ 0x92ea0c55u; + s[13] += s[10]; + s[3] += s[13]; + s[12] = (s[12] ^ s[3]) * 0xd069e52du; + s[9] += s[12]; + s[4] ^= s[9]; + s[12] ^= s[4] ^ 0xeb853951u; + s[0] += s[12] + 0xed41d9fdu; + s[8] = s[8] * 0xc5250bfdu + s[0]; + s[7] *= (s[8] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 2u); + s[10] -= s[2]; + s[11] *= (s[10] | 1u); + s[8] += s[11]; + s[13] = (s[13] ^ s[8]) * 0xd390a1fbu; + s[7] = s[7] * 0x5acff41bu + s[13]; + s[0] ^= s[7]; + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[12] = mh_rotl(s[12], 17u) + s[15]; + s[4] ^= (s[12] & s[7]); + s[7] ^= s[4] ^ 0xc65745d6u; + s[3] ^= s[7]; + s[9] = mh_rotl(s[9], 9u) + s[3]; + s[0] += s[9] + 0xa03ce5a6u; + s[2] -= s[0]; + s[15] = mh_rotl(s[15] ^ s[2], 29u); + s[10] = mh_rotl(s[10] ^ s[15], 13u); + s[9] = mh_rotl(s[9], 30u) + s[10]; + s[10] += (s[9] | s[12]); + s[6] ^= s[10] ^ 0xd72a67b8u; + s[7] *= (s[6] | 1u); + s[15] += s[7]; + s[2] *= (s[15] | 1u); + s[12] += s[2]; + s[8] *= (s[12] | 1u); + s[11] ^= (s[8] & s[9]); + s[12] = mh_rotl(s[12], 27u) + s[11]; + s[0] ^= s[12]; + s[11] += s[0] + 0x01d509c0u; + s[1] -= s[11]; + s[11] -= s[1]; + s[2] += s[11] + 0x2ad9035du; + s[11] ^= (s[2] & s[7]); + s[5] += s[11] + 0x756fff22u; + s[9] *= (s[5] | 1u); + s[13] ^= s[9]; + s[4] ^= s[13]; + s[3] = mh_rotl(s[3], 2u) + s[4]; + s[14] ^= s[3] ^ 0xc1fb5cb3u; + s[3] = mh_rotl(s[3], 19u) + s[14]; + s[14] += s[3]; + s[6] += s[14] + 0x5f1c4569u; + s[3] = mh_rotl(s[3] ^ s[6], 22u); + s[2] += s[3]; + s[9] += s[2]; + s[1] ^= (s[9] & s[10]); + s[5] ^= s[1]; + s[15] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[15], 23u); + s[1] *= (s[2] | 1u); + s[6] ^= s[1]; + s[4] = mh_rotl(s[4], 7u) + s[6]; + s[14] += (s[4] | s[6]); + s[15] = (s[15] ^ s[14]) * 0x83c9a7ebu; + s[14] += s[15]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[3] ^= s[15]; + s[0] ^= s[3]; + s[10] = mh_rotl(s[10] ^ s[0], 31u); + s[4] += s[10]; + s[7] = mh_rotl(s[7], 23u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 3u); + s[1] *= (s[15] | 1u); + s[7] ^= s[1]; + s[14] = (s[14] ^ s[7]) * 0x2ad2ff49u; + s[7] = mh_rotl(s[7], 4u) + s[14]; + s[13] *= (s[7] | 1u); + s[11] -= s[13]; + s[14] = mh_rotl(s[14], 30u) + s[11]; + s[3] += (s[14] | s[4]); + s[13] += (s[3] | s[10]); + s[7] = s[7] * 0x6920c90bu + s[13]; + s[12] += s[7]; + s[3] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[3], 25u); + s[7] = (s[7] ^ s[6]) * 0x04333a85u; + s[8] -= s[7]; + s[2] = (s[2] ^ s[8]) * 0x843335e9u; + s[10] += s[2]; + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[6] = mh_rotl(s[6], 4u) + s[9]; + s[13] = mh_rotl(s[13], 19u) + s[6]; + s[10] = (s[10] ^ s[13]) * 0xbaaa3189u; + s[0] ^= s[10]; + s[10] -= s[0]; + s[13] ^= s[10] ^ 0xee9d489eu; + s[3] *= (s[13] | 1u); + s[12] -= s[3]; + s[4] += (s[12] | s[2]); + s[3] = (s[3] ^ s[4]) * 0x109178f7u; + s[4] += s[3] + 0x9c068c09u; + s[9] = mh_rotl(s[9] ^ s[4], 23u); + s[1] += (s[9] | s[6]); + s[8] ^= s[1]; + s[11] ^= (s[8] & s[7]); + s[9] ^= s[11]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[3] = s[3] * 0x3575e169u + s[14]; + s[1] += s[3] + 0x42a43de1u; + s[7] += s[1]; + s[6] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[6], 21u); + s[14] = (s[14] ^ s[0]) * 0xd50f0637u; + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[4] -= s[0]; + s[10] = mh_rotl(s[10], 1u) + s[4]; + s[4] = (s[4] ^ s[10]) * 0xf009aafbu; + s[7] *= (s[4] | 1u); + s[6] ^= s[7] ^ 0xd8b7b555u; + s[2] = mh_rotl(s[2] ^ s[6], 14u); + s[9] += s[2] + 0x85a75e4fu; + s[14] += s[9]; + s[7] = mh_rotl(s[7], 5u) + s[14]; + s[10] ^= s[7]; + s[0] = mh_rotl(s[0] ^ s[10], 10u); + s[3] = (s[3] ^ s[0]) * 0xe1a45df3u; + s[1] += s[3]; + s[14] ^= (s[1] & s[11]); + s[8] -= s[14]; + s[13] = (s[13] ^ s[8]) * 0x9fce6b81u; + s[9] = mh_rotl(s[9], 28u) + s[13]; + s[14] += s[9]; + s[11] -= s[14]; + s[0] *= (s[11] | 1u); + s[10] *= (s[0] | 1u); + s[14] ^= s[10] ^ 0x130dbd8eu; + s[5] = (s[5] ^ s[14]) * 0x488f6399u; + s[7] = mh_rotl(s[7] ^ s[5], 8u); + s[9] *= (s[7] | 1u); + s[15] -= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 14u); + s[1] += s[5]; + s[13] = mh_rotl(s[13], 10u) + s[1]; + s[15] -= s[13]; + s[7] += (s[15] | s[13]); + s[12] ^= s[7]; + s[1] *= (s[12] | 1u); + s[11] = (s[11] ^ s[1]) * 0x04105327u; + s[5] *= (s[11] | 1u); + s[1] ^= s[5]; + s[13] *= (s[1] | 1u); + s[11] = s[11] * 0xd3a38ac5u + s[13]; + s[12] ^= s[11]; + s[3] ^= s[12] ^ 0xcda4d195u; + s[9] += s[3]; + s[13] += s[9]; + s[4] += (s[13] | s[14]); + s[7] = mh_rotl(s[7] ^ s[4], 6u); + s[4] = s[4] * 0xd402bb6du + s[7]; + s[3] ^= (s[4] & s[9]); + s[0] += (s[3] | s[2]); + s[2] += s[0]; + s[6] ^= s[2]; + s[3] += s[6]; + s[7] *= (s[3] | 1u); + s[6] -= s[7]; + s[11] -= s[6]; + s[9] -= s[11]; + s[14] += s[9]; + s[8] = mh_rotl(s[8] ^ s[14], 18u); + s[10] = mh_rotl(s[10] ^ s[8], 20u); + s[12] ^= s[10]; + s[7] ^= s[12]; + s[1] = mh_rotl(s[1] ^ s[7], 11u); + s[14] ^= s[1]; + s[9] = (s[9] ^ s[14]) * 0x6c1e8cd1u; + s[1] -= s[9]; + s[4] += (s[1] | s[5]); + s[7] -= s[4]; + s[13] -= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[13]; + s[15] -= s[6]; + s[2] = s[2] * 0x0d5713c3u + s[15]; + s[3] = mh_rotl(s[3] ^ s[2], 16u); + s[4] = mh_rotl(s[4] ^ s[3], 10u); + s[9] = (s[9] ^ s[4]) * 0x3d5be749u; + s[14] ^= s[9]; + s[15] ^= s[14]; + s[6] *= (s[15] | 1u); + s[7] = (s[7] ^ s[6]) * 0x17df006bu; + s[1] += s[7]; + s[8] -= s[1]; + s[7] = (s[7] ^ s[8]) * 0xe93f9287u; + s[0] ^= s[7] ^ 0x9294d6b2u; + s[14] += s[0]; + s[11] += s[14]; + s[0] += s[11]; + s[7] += s[0]; + s[12] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[12], 9u); + s[3] = mh_rotl(s[3] ^ s[0], 30u); + s[8] = mh_rotl(s[8], 11u) + s[3]; + s[6] ^= s[8]; + s[15] += s[6]; + s[0] += s[15]; + s[10] += s[0]; + s[1] = mh_rotl(s[1], 26u) + s[10]; + s[9] ^= s[1]; + s[13] *= (s[9] | 1u); + s[4] = s[4] * 0xcdb45257u + s[13]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[0] = (s[0] ^ s[2]) * 0x68b3d713u; + s[1] += s[0]; + s[4] = s[4] * 0xf69d4a5fu + s[1]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[8], 7u); + s[2] += s[4] + 0x51bb82ceu; + s[7] += s[2]; + s[1] += s[7]; + s[2] += s[1] + 0x3680e8bbu; + s[5] += s[2] + 0x9e44e256u; + s[1] += s[5]; + s[12] += s[1]; + s[9] ^= s[12]; + s[13] -= s[9]; + s[2] *= (s[13] | 1u); + s[12] += s[2]; + s[13] += s[12]; + s[0] ^= s[13] ^ 0xd70a731du; + s[6] += s[0]; + s[7] = mh_rotl(s[7], 22u) + s[6]; + s[15] = (s[15] ^ s[7]) * 0xdf75ad53u; + s[11] ^= (s[15] & s[1]); + s[1] = mh_rotl(s[1] ^ s[11], 11u); + s[2] += s[1]; + s[15] = mh_rotl(s[15] ^ s[2], 21u); + s[2] = (s[2] ^ s[15]) * 0x7c349239u; + s[12] = mh_rotl(s[12], 6u) + s[2]; + s[13] ^= s[12] ^ 0xb219f590u; + s[15] *= (s[13] | 1u); + s[2] ^= s[15] ^ 0xa28894b2u; + s[7] += s[2]; + s[3] = mh_rotl(s[3], 19u) + s[7]; + s[12] = (s[12] ^ s[3]) * 0xd73e4265u; + s[15] += s[12]; + s[7] = s[7] * 0x2d1fd471u + s[15]; + s[11] = (s[11] ^ s[7]) * 0x7ce4f3e3u; + s[3] = mh_rotl(s[3] ^ s[11], 27u); + s[8] += s[3]; + s[9] += (s[8] | s[1]); + s[11] *= (s[9] | 1u); + s[3] -= s[11]; + s[14] = mh_rotl(s[14], 13u) + s[3]; + s[0] ^= (s[14] & s[7]); + s[12] = mh_rotl(s[12], 8u) + s[0]; + s[3] ^= s[12]; + s[15] ^= s[3]; + s[4] ^= s[15]; + s[15] += (s[4] | s[11]); + s[13] = mh_rotl(s[13] ^ s[15], 24u); + s[2] *= (s[13] | 1u); + s[14] = mh_rotl(s[14], 2u) + s[2]; + s[10] += s[14]; + s[12] += s[10]; + s[2] += s[12] + 0x1b504561u; + s[4] = mh_rotl(s[4] ^ s[2], 2u); + s[8] = (s[8] ^ s[4]) * 0x03df7a65u; + s[15] = mh_rotl(s[15], 14u) + s[8]; + s[0] = mh_rotl(s[0], 18u) + s[15]; + s[1] += s[0] + 0x5740a39eu; + s[8] -= s[1]; + s[5] = (s[5] ^ s[8]) * 0x0b606a43u; + s[9] = s[9] * 0x39176987u + s[5]; + s[0] = mh_rotl(s[0], 4u) + s[9]; + s[14] ^= s[0]; + s[11] -= s[14]; + s[3] += s[11] + 0x34787b81u; + s[15] += s[3] + 0xe41a04ecu; + s[13] = mh_rotl(s[13] ^ s[15], 15u); + s[7] ^= s[13]; + s[9] -= s[7]; + s[10] -= s[9]; + s[13] += s[10]; + s[4] += (s[13] | s[6]); + s[2] ^= s[4]; + s[1] ^= s[2]; + s[0] -= s[1]; + s[15] = (s[15] ^ s[0]) * 0x3fb47953u; + s[12] *= (s[15] | 1u); + s[15] ^= s[12]; + s[13] = mh_rotl(s[13], 31u) + s[15]; + s[12] = s[12] * 0xd1b75439u + s[13]; + s[4] -= s[12]; + s[7] += s[4]; + s[1] = mh_rotl(s[1], 3u) + s[7]; + s[14] = mh_rotl(s[14] ^ s[1], 15u); + s[3] -= s[14]; + s[15] += s[3]; + s[5] = s[5] * 0xfa5689f1u + s[15]; + s[12] *= (s[5] | 1u); + s[2] = mh_rotl(s[2] ^ s[12], 16u); + s[0] = (s[0] ^ s[2]) * 0x2a1a8c35u; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x2a04efebu; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[9] -= s[15]; + s[13] ^= s[9] ^ 0xbd001784u; + s[9] += s[13] + 0xf302a942u; + s[14] += s[9] + 0x07f9571cu; + s[2] ^= s[14]; + s[11] ^= s[2]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[0] += s[7] + 0xb6e41d24u; + s[12] ^= s[0]; + s[0] ^= s[12]; + s[11] ^= s[0] ^ 0x24f0b3f7u; + s[0] ^= (s[11] & s[7]); + s[6] += s[0]; + s[13] -= s[6]; + s[12] ^= s[13]; + s[4] += s[12]; + s[3] = mh_rotl(s[3] ^ s[4], 16u); + s[14] = (s[14] ^ s[3]) * 0x21829883u; + s[2] -= s[14]; + s[3] ^= (s[2] & s[7]); + s[1] -= s[3]; + s[11] ^= s[1]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[0] = (s[0] ^ s[13]) * 0xa91d4129u; + s[3] += s[0] + 0x5eb9b9e0u; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[7] = (s[7] ^ s[10]) * 0x52bae843u; + s[15] ^= s[7]; + s[3] ^= (s[15] & s[2]); + s[14] += s[3]; + s[9] -= s[14]; + s[7] += s[9]; + s[2] += s[7]; + s[3] *= (s[2] | 1u); + s[0] *= (s[3] | 1u); + s[6] *= (s[0] | 1u); + s[3] ^= s[6] ^ 0x1426b612u; + s[6] *= (s[3] | 1u); + s[1] -= s[6]; + s[15] += s[1]; + s[0] -= s[15]; + s[12] += s[0] + 0xf7b931c7u; + s[13] *= (s[12] | 1u); + s[12] = s[12] * 0xe57254dbu + s[13]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[2], 29u); + s[8] += s[5] + 0x517e08fau; + s[15] = mh_rotl(s[15] ^ s[8], 24u); + s[4] -= s[15]; + s[7] ^= s[4]; + s[9] = mh_rotl(s[9] ^ s[7], 12u); + s[5] = mh_rotl(s[5] ^ s[9], 31u); + s[15] = mh_rotl(s[15], 20u) + s[5]; + s[10] = (s[10] ^ s[15]) * 0x472cce51u; + s[0] = (s[0] ^ s[10]) * 0xc6aa4b0fu; + s[9] ^= s[0]; + s[5] ^= (s[9] & s[11]); + s[9] += s[5]; + s[15] = mh_rotl(s[15], 26u) + s[9]; + s[12] = mh_rotl(s[12] ^ s[15], 15u); + s[7] += s[12]; + s[8] ^= s[7]; + s[4] = (s[4] ^ s[8]) * 0x1de62593u; + s[12] ^= s[4] ^ 0x4c29c7efu; + s[14] = s[14] * 0xe96a8dbdu + s[12]; + s[7] += s[14]; + s[4] = (s[4] ^ s[7]) * 0x2ceadb71u; + s[13] += s[4]; + s[10] += s[13]; + s[12] = mh_rotl(s[12] ^ s[10], 5u); + s[0] = (s[0] ^ s[12]) * 0xb3050b81u; + s[7] += s[0]; + s[12] = mh_rotl(s[12] ^ s[7], 15u); + s[11] = (s[11] ^ s[12]) * 0xd1f5971bu; + s[13] += s[11]; + s[11] *= (s[13] | 1u); + s[10] += s[11] + 0x1c05c66fu; + s[15] ^= s[10]; + s[13] ^= s[15] ^ 0x8af80ca8u; + s[15] = mh_rotl(s[15] ^ s[13], 14u); + s[13] = (s[13] ^ s[15]) * 0x8b914137u; + s[11] -= s[13]; + s[13] ^= s[11]; + s[6] = (s[6] ^ s[13]) * 0x3c6fe121u; + s[12] = mh_rotl(s[12] ^ s[6], 13u); + s[14] = mh_rotl(s[14], 31u) + s[12]; + s[11] -= s[14]; + s[12] -= s[11]; + s[8] = (s[8] ^ s[12]) * 0x196763bdu; + s[10] *= (s[8] | 1u); + s[11] = mh_rotl(s[11] ^ s[10], 14u); + s[14] *= (s[11] | 1u); + s[11] *= (s[14] | 1u); + s[6] += s[11]; + s[8] = (s[8] ^ s[6]) * 0xbbef2ec7u; + s[11] = mh_rotl(s[11] ^ s[8], 14u); + s[14] += s[11]; + s[1] ^= s[14] ^ 0x3517261cu; + s[10] += s[1]; + s[11] -= s[10]; + s[1] = mh_rotl(s[1] ^ s[11], 23u); + s[4] *= (s[1] | 1u); + s[3] ^= s[4]; + s[14] -= s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 7u); + s[11] -= s[12]; + s[12] = (s[12] ^ s[11]) * 0x61ef90ddu; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[4] -= s[2]; + s[3] ^= s[4] ^ 0x38b5a46au; + s[14] = mh_rotl(s[14] ^ s[3], 8u); + s[8] += s[14]; + s[10] = mh_rotl(s[10], 12u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[2] ^= s[6] ^ 0x04a55416u; + s[7] ^= s[2] ^ 0xc6089802u; + s[14] += s[7] + 0x232acd3au; + s[6] += s[14]; + s[3] ^= s[6] ^ 0x0bdec934u; + s[13] *= (s[3] | 1u); + s[12] = s[12] * 0x082d66bdu + s[13]; + s[10] = (s[10] ^ s[12]) * 0xa5611c97u; + s[5] = mh_rotl(s[5] ^ s[10], 1u); + s[0] += s[5]; + s[10] = mh_rotl(s[10] ^ s[0], 25u); + s[9] = mh_rotl(s[9] ^ s[10], 1u); + s[11] += s[9]; + s[15] = (s[15] ^ s[11]) * 0x0c06e2b5u; + s[12] ^= s[15] ^ 0x7d7c42ceu; + s[15] += s[12]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[9] ^= (s[6] & s[4]); + s[7] -= s[9]; + s[15] = mh_rotl(s[15] ^ s[7], 31u); + s[4] += s[15]; + s[11] = (s[11] ^ s[4]) * 0xd7fef7d9u; + s[10] ^= s[11]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[7] -= s[9]; + s[3] = (s[3] ^ s[7]) * 0x0eafdd57u; + s[5] ^= s[3]; + s[8] -= s[5]; + s[5] ^= s[8]; + s[3] -= s[5]; + s[13] = mh_rotl(s[13], 16u) + s[3]; + s[14] += s[13]; + s[11] += s[14]; + s[0] += s[11] + 0xf2a1dc99u; + s[3] ^= (s[0] & s[10]); + s[10] = mh_rotl(s[10], 7u) + s[3]; + s[5] += s[10] + 0x6527734fu; + s[8] -= s[5]; + s[5] *= (s[8] | 1u); + s[2] += s[5]; + s[1] = mh_rotl(s[1], 31u) + s[2]; + s[11] = mh_rotl(s[11] ^ s[1], 1u); + s[15] ^= s[11]; + s[6] = (s[6] ^ s[15]) * 0x89e4da81u; + s[8] = mh_rotl(s[8], 7u) + s[6]; + s[1] = (s[1] ^ s[8]) * 0x27cd5aabu; + s[4] = (s[4] ^ s[1]) * 0xc9e84adbu; + s[3] = mh_rotl(s[3], 13u) + s[4]; + s[11] += s[3]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 21u); + s[14] += s[12]; + s[0] -= s[14]; + s[2] += s[0]; + s[3] -= s[2]; + s[10] -= s[3]; + s[11] *= (s[10] | 1u); + s[14] += s[11]; + s[6] += s[14]; + s[3] ^= s[6]; + s[13] = s[13] * 0xf5b82e19u + s[3]; + s[7] += s[13]; + s[3] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[3], 14u); + s[13] += s[10]; + s[9] ^= s[13] ^ 0x50029d51u; + s[8] ^= s[9]; + s[5] = s[5] * 0x84a8bab7u + s[8]; + s[14] = mh_rotl(s[14], 21u) + s[5]; + s[12] = mh_rotl(s[12] ^ s[14], 21u); + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 19u); + s[13] += s[9] + 0xf7535ff7u; + s[4] *= (s[13] | 1u); + s[12] *= (s[4] | 1u); + s[4] += s[12] + 0x56f3ba9au; + s[6] += s[4]; + s[0] ^= s[6] ^ 0x52b3d568u; + s[12] += (s[0] | s[11]); + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[4] = mh_rotl(s[4] ^ s[11], 7u); + s[3] += s[4] + 0xe0a370deu; + s[10] = mh_rotl(s[10] ^ s[3], 18u); + s[2] -= s[10]; + s[1] *= (s[2] | 1u); + s[11] += s[1] + 0x351f5bb2u; + s[0] += s[11]; + s[9] += s[0]; + s[8] = mh_rotl(s[8], 15u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[8], 18u); + s[11] = mh_rotl(s[11] ^ s[0], 8u); + s[3] += s[11]; + s[4] = mh_rotl(s[4], 1u) + s[3]; + s[13] -= s[4]; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_7(thread uint* s) { + s[10] ^= s[0] ^ 0x91f55cc2u; + s[12] += s[10]; + s[9] ^= s[12]; + s[8] = mh_rotl(s[8] ^ s[9], 11u); + s[11] ^= s[8]; + s[13] = (s[13] ^ s[11]) * 0x8937936du; + s[12] = mh_rotl(s[12], 6u) + s[13]; + s[6] += s[12]; + s[1] = mh_rotl(s[1] ^ s[6], 8u); + s[10] += s[1]; + s[9] = mh_rotl(s[9], 5u) + s[10]; + s[12] -= s[9]; + s[10] = s[10] * 0xfb1e6803u + s[12]; + s[0] += (s[10] | s[11]); + s[15] += s[0]; + s[0] ^= s[15]; + s[13] *= (s[0] | 1u); + s[1] = mh_rotl(s[1], 22u) + s[13]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[2] = s[2] * 0xc6ee6461u + s[7]; + s[3] += s[2]; + s[7] ^= s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 15u); + s[6] ^= s[4]; + s[10] += s[6]; + s[11] = mh_rotl(s[11], 4u) + s[10]; + s[2] ^= s[11]; + s[5] = mh_rotl(s[5], 30u) + s[2]; + s[7] -= s[5]; + s[4] ^= s[7]; + s[6] ^= s[4]; + s[5] -= s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 19u) + s[10]; + s[11] = mh_rotl(s[11], 13u) + s[8]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[8] ^= s[5]; + s[10] = mh_rotl(s[10], 31u) + s[8]; + s[2] += s[10] + 0x2533aeebu; + s[12] += s[2] + 0x8c44064eu; + s[6] = s[6] * 0x396ed079u + s[12]; + s[3] ^= s[6]; + s[7] += s[3] + 0x78c5d841u; + s[2] = mh_rotl(s[2], 19u) + s[7]; + s[5] ^= s[2] ^ 0xb10843eau; + s[3] *= (s[5] | 1u); + s[2] ^= s[3] ^ 0x978c6fe6u; + s[9] += s[2]; + s[3] = (s[3] ^ s[9]) * 0xbd141e6du; + s[5] ^= s[3] ^ 0xd07a1a68u; + s[11] ^= s[5]; + s[12] += (s[11] | s[0]); + s[3] += (s[12] | s[0]); + s[13] += (s[3] | s[4]); + s[3] ^= s[13]; + s[7] -= s[3]; + s[6] *= (s[7] | 1u); + s[7] = mh_rotl(s[7] ^ s[6], 1u); + s[9] = (s[9] ^ s[7]) * 0xbed8dbf7u; + s[3] ^= s[9]; + s[1] = (s[1] ^ s[3]) * 0xf57e26d7u; + s[2] = (s[2] ^ s[1]) * 0xdf9916ebu; + s[6] -= s[2]; + s[2] *= (s[6] | 1u); + s[13] += s[2] + 0x4b576832u; + s[7] ^= s[13]; + s[14] *= (s[7] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 6u); + s[14] = (s[14] ^ s[0]) * 0xde82d2d3u; + s[7] += s[14]; + s[14] = s[14] * 0x1a9d2c23u + s[7]; + s[13] ^= s[14]; + s[14] *= (s[13] | 1u); + s[13] ^= (s[14] & s[10]); + s[6] = mh_rotl(s[6], 3u) + s[13]; + s[0] = mh_rotl(s[0] ^ s[6], 1u); + s[1] ^= s[0]; + s[13] -= s[1]; + s[1] ^= s[13]; + s[3] -= s[1]; + s[2] += s[3]; + s[11] = (s[11] ^ s[2]) * 0xd14f4873u; + s[0] += s[11] + 0xc62283fbu; + s[14] = mh_rotl(s[14], 31u) + s[0]; + s[0] *= (s[14] | 1u); + s[13] -= s[0]; + s[7] *= (s[13] | 1u); + s[15] ^= s[7]; + s[6] ^= s[15]; + s[8] = mh_rotl(s[8], 21u) + s[6]; + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[11] += (s[10] | s[13]); + s[14] += s[11]; + s[8] = mh_rotl(s[8], 30u) + s[14]; + s[3] = s[3] * 0xabf8963bu + s[8]; + s[1] += s[3]; + s[6] = mh_rotl(s[6] ^ s[1], 8u); + s[7] = s[7] * 0x5391ec81u + s[6]; + s[3] *= (s[7] | 1u); + s[1] ^= s[3] ^ 0xb1e8a02eu; + s[4] += s[1] + 0xf73ade37u; + s[0] = mh_rotl(s[0], 24u) + s[4]; + s[4] ^= s[0]; + s[2] ^= s[4]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[10] -= s[9]; + s[4] ^= s[10]; + s[3] *= (s[4] | 1u); + s[0] -= s[3]; + s[8] ^= (s[0] & s[14]); + s[11] *= (s[8] | 1u); + s[10] ^= s[11]; + s[4] = mh_rotl(s[4] ^ s[10], 11u); + s[13] = mh_rotl(s[13], 2u) + s[4]; + s[0] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 21u) + s[0]; + s[13] ^= s[5]; + s[0] *= (s[13] | 1u); + s[14] ^= s[0]; + s[7] -= s[14]; + s[9] *= (s[7] | 1u); + s[14] ^= s[9]; + s[13] ^= s[14] ^ 0xcdfc1ed8u; + s[1] = mh_rotl(s[1] ^ s[13], 20u); + s[3] = mh_rotl(s[3] ^ s[1], 3u); + s[1] ^= s[3]; + s[0] *= (s[1] | 1u); + s[13] += (s[0] | s[9]); + s[14] = (s[14] ^ s[13]) * 0x788d03efu; + s[0] ^= s[14] ^ 0x996f3b0du; + s[13] -= s[0]; + s[10] = mh_rotl(s[10], 15u) + s[13]; + s[5] = mh_rotl(s[5] ^ s[10], 3u); + s[3] = mh_rotl(s[3] ^ s[5], 10u); + s[12] ^= s[3] ^ 0xd5618db8u; + s[14] -= s[12]; + s[1] += (s[14] | s[15]); + s[2] ^= s[1] ^ 0xbf5e3cd4u; + s[4] += s[2]; + s[14] ^= s[4] ^ 0xf8523123u; + s[12] = mh_rotl(s[12], 29u) + s[14]; + s[7] *= (s[12] | 1u); + s[12] *= (s[7] | 1u); + s[10] += s[12]; + s[14] = mh_rotl(s[14] ^ s[10], 20u); + s[7] ^= s[14] ^ 0x383fa4a6u; + s[12] *= (s[7] | 1u); + s[2] = mh_rotl(s[2], 1u) + s[12]; + s[1] *= (s[2] | 1u); + s[4] += s[1]; + s[11] = s[11] * 0xc6e2f7f7u + s[4]; + s[6] ^= (s[11] & s[15]); + s[3] = (s[3] ^ s[6]) * 0xa5f20621u; + s[14] += s[3]; + s[15] = s[15] * 0xff86c04du + s[14]; + s[14] += s[15]; + s[3] = mh_rotl(s[3], 27u) + s[14]; + s[13] ^= (s[3] & s[8]); + s[10] ^= s[13]; + s[6] = s[6] * 0xedced661u + s[10]; + s[12] = mh_rotl(s[12] ^ s[6], 22u); + s[4] ^= s[12] ^ 0x50fbdfefu; + s[9] += s[4] + 0xe37ea6aeu; + s[1] = mh_rotl(s[1] ^ s[9], 17u); + s[4] += s[1]; + s[3] += s[4] + 0xc95ad941u; + s[0] ^= s[3]; + s[6] = mh_rotl(s[6], 26u) + s[0]; + s[12] -= s[6]; + s[14] *= (s[12] | 1u); + s[12] += s[14]; + s[13] = s[13] * 0xdf0c5af7u + s[12]; + s[1] = mh_rotl(s[1], 4u) + s[13]; + s[15] = mh_rotl(s[15], 23u) + s[1]; + s[14] ^= s[15]; + s[0] *= (s[14] | 1u); + s[5] = mh_rotl(s[5] ^ s[0], 14u); + s[15] = mh_rotl(s[15] ^ s[5], 12u); + s[9] = mh_rotl(s[9], 22u) + s[15]; + s[1] = s[1] * 0x1357e1d5u + s[9]; + s[2] += s[1]; + s[8] *= (s[2] | 1u); + s[0] ^= s[8]; + s[7] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[7], 10u); + s[13] = (s[13] ^ s[11]) * 0x9cd6fa4du; + s[11] += (s[13] | s[10]); + s[3] ^= s[11] ^ 0xf37724ddu; + s[5] += s[3]; + s[6] *= (s[5] | 1u); + s[14] += s[6]; + s[13] *= (s[14] | 1u); + s[2] += s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 1u); + s[13] ^= (s[4] & s[0]); + s[14] ^= (s[13] & s[0]); + s[0] += s[14]; + s[6] = mh_rotl(s[6] ^ s[0], 21u); + s[13] += s[6]; + s[6] += s[13]; + s[0] += s[6] + 0x1720d570u; + s[3] ^= s[0]; + s[13] += s[3] + 0xd71bcd1bu; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[9] += s[3]; + s[4] = mh_rotl(s[4] ^ s[9], 3u); + s[10] += s[4]; + s[15] -= s[10]; + s[11] *= (s[15] | 1u); + s[12] *= (s[11] | 1u); + s[8] += s[12]; + s[0] += s[8] + 0xa5d99dc7u; + s[14] ^= s[0]; + s[2] += (s[14] | s[10]); + s[8] = mh_rotl(s[8] ^ s[2], 8u); + s[15] += s[8] + 0xda39c6e1u; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[1], 8u); + s[4] ^= (s[7] & s[9]); + s[0] = mh_rotl(s[0], 13u) + s[4]; + s[10] *= (s[0] | 1u); + s[3] = mh_rotl(s[3], 20u) + s[10]; + s[11] ^= s[3]; + s[15] ^= s[11] ^ 0x0d7fc3f2u; + s[5] ^= (s[15] & s[3]); + s[8] += s[5]; + s[3] ^= s[8]; + s[9] += s[3]; + s[12] = mh_rotl(s[12] ^ s[9], 7u); + s[7] -= s[12]; + s[14] = (s[14] ^ s[7]) * 0xee2eaf6bu; + s[5] ^= s[14]; + s[6] = mh_rotl(s[6], 17u) + s[5]; + s[0] -= s[6]; + s[13] ^= s[0] ^ 0xc7600c18u; + s[8] ^= s[13]; + s[7] = (s[7] ^ s[8]) * 0x291da8cfu; + s[3] = (s[3] ^ s[7]) * 0x4c89c6a3u; + s[11] = mh_rotl(s[11], 18u) + s[3]; + s[10] += s[11]; + s[5] ^= s[10] ^ 0xc5dba408u; + s[3] ^= s[5]; + s[2] += s[3]; + s[14] ^= s[2]; + s[4] ^= s[14]; + s[9] += s[4]; + s[15] = mh_rotl(s[15], 22u) + s[9]; + s[10] ^= s[15]; + s[7] += s[10]; + s[0] = mh_rotl(s[0], 23u) + s[7]; + s[2] += s[0]; + s[5] += s[2]; + s[11] = mh_rotl(s[11], 13u) + s[5]; + s[10] ^= (s[11] & s[9]); + s[5] += s[10] + 0xbbb408f7u; + s[14] ^= s[5]; + s[15] += s[14]; + s[5] = mh_rotl(s[5], 5u) + s[15]; + s[11] = s[11] * 0x112a6951u + s[5]; + s[7] = mh_rotl(s[7] ^ s[11], 31u); + s[5] += s[7]; + s[7] *= (s[5] | 1u); + s[12] = (s[12] ^ s[7]) * 0x0c54418fu; + s[5] += s[12]; + s[13] += s[5]; + s[7] = mh_rotl(s[7], 13u) + s[13]; + s[9] = mh_rotl(s[9], 22u) + s[7]; + s[8] = s[8] * 0x1b5f8089u + s[9]; + s[6] = s[6] * 0x8a305f3du + s[8]; + s[5] = (s[5] ^ s[6]) * 0x9e934355u; + s[13] ^= s[5] ^ 0x3262a24fu; + s[7] ^= (s[13] & s[5]); + s[2] ^= s[7]; + s[14] += (s[2] | s[7]); + s[11] += s[14]; + s[6] -= s[11]; + s[5] ^= s[6]; + s[6] = mh_rotl(s[6] ^ s[5], 24u); + s[8] ^= s[6] ^ 0x2110db43u; + s[4] += s[8] + 0x91e5ef8bu; + s[15] += s[4] + 0x039dc8acu; + s[2] *= (s[15] | 1u); + s[10] ^= s[2]; + s[4] += s[10] + 0x38936459u; + s[13] ^= s[4] ^ 0x8a7a8a06u; + s[0] = mh_rotl(s[0] ^ s[13], 24u); + s[13] = s[13] * 0xa7c0dc87u + s[0]; + s[2] += s[13]; + s[11] = mh_rotl(s[11], 25u) + s[2]; + s[6] -= s[11]; + s[1] *= (s[6] | 1u); + s[0] = mh_rotl(s[0], 21u) + s[1]; + s[11] = mh_rotl(s[11] ^ s[0], 23u); + s[7] ^= s[11]; + s[2] += s[7]; + s[9] *= (s[2] | 1u); + s[11] = mh_rotl(s[11], 24u) + s[9]; + s[1] ^= (s[11] & s[3]); + s[0] = mh_rotl(s[0] ^ s[1], 13u); + s[12] -= s[0]; + s[6] ^= (s[12] & s[5]); + s[4] += s[6]; + s[13] ^= s[4]; + s[1] = mh_rotl(s[1], 26u) + s[13]; + s[11] = mh_rotl(s[11], 27u) + s[1]; + s[1] += s[11]; + s[14] ^= (s[1] & s[11]); + s[4] -= s[14]; + s[5] -= s[4]; + s[8] ^= s[5]; + s[2] ^= s[8]; + s[4] += s[2]; + s[14] = mh_rotl(s[14], 24u) + s[4]; + s[0] += s[14] + 0x6b4adcadu; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[10] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[10], 27u); + s[0] -= s[6]; + s[6] += s[0] + 0x5ac44880u; + s[8] ^= s[6]; + s[1] ^= s[8]; + s[0] *= (s[1] | 1u); + s[5] -= s[0]; + s[3] -= s[5]; + s[7] += s[3]; + s[0] *= (s[7] | 1u); + s[1] = (s[1] ^ s[0]) * 0xc26b3d23u; + s[13] += s[1]; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[7], 2u); + s[12] = (s[12] ^ s[3]) * 0x36078279u; + s[9] -= s[12]; + s[12] ^= s[9] ^ 0x6a60fb43u; + s[2] = mh_rotl(s[2], 15u) + s[12]; + s[7] ^= s[2]; + s[0] += s[7] + 0xe00e86a2u; + s[9] = mh_rotl(s[9] ^ s[0], 8u); + s[3] = mh_rotl(s[3], 28u) + s[9]; + s[8] += (s[3] | s[15]); + s[5] ^= s[8] ^ 0xe55fb8aeu; + s[4] ^= s[5]; + s[8] ^= s[4]; + s[6] *= (s[8] | 1u); + s[15] += s[6]; + s[1] = (s[1] ^ s[15]) * 0x21de53d1u; + s[13] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[13], 14u); + s[4] ^= s[12] ^ 0xc98f0a34u; + s[6] *= (s[4] | 1u); + s[2] -= s[6]; + s[7] += s[2]; + s[3] ^= s[7]; + s[5] += s[3] + 0xa927519fu; + s[10] += s[5]; + s[13] ^= s[10] ^ 0xcb96c77bu; + s[4] *= (s[13] | 1u); + s[1] -= s[4]; + s[5] += s[1]; + s[15] = mh_rotl(s[15], 2u) + s[5]; + s[8] ^= s[15]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 24u); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[0] = (s[0] ^ s[15]) * 0x043e38c5u; + s[15] *= (s[0] | 1u); + s[11] ^= s[15]; + s[14] += s[11] + 0x53bbe6c0u; + s[0] *= (s[14] | 1u); + s[9] ^= s[0]; + s[6] *= (s[9] | 1u); + s[2] += (s[6] | s[1]); + s[13] += s[2]; + s[10] = mh_rotl(s[10] ^ s[13], 10u); + s[1] += s[10]; + s[15] = s[15] * 0x583e8481u + s[1]; + s[13] ^= s[15] ^ 0x2cc63257u; + s[7] ^= s[13]; + s[3] = mh_rotl(s[3], 28u) + s[7]; + s[2] -= s[3]; + s[14] = mh_rotl(s[14], 11u) + s[2]; + s[1] += (s[14] | s[7]); + s[8] ^= s[1]; + s[11] = (s[11] ^ s[8]) * 0x0e28ad8fu; + s[3] = (s[3] ^ s[11]) * 0x298e4869u; + s[11] -= s[3]; + s[3] = (s[3] ^ s[11]) * 0x7d313b6bu; + s[11] = (s[11] ^ s[3]) * 0xeca4dbcbu; + s[2] -= s[11]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[11] += s[10] + 0xfceb9d18u; + s[12] += (s[11] | s[1]); + s[4] *= (s[12] | 1u); + s[5] ^= s[4]; + s[0] ^= (s[5] & s[6]); + s[12] ^= s[0]; + s[9] += s[12] + 0xb01e0678u; + s[2] -= s[9]; + s[15] += s[2]; + s[11] ^= s[15] ^ 0x53447cc1u; + s[14] += s[11] + 0xaf64abb5u; + s[9] ^= s[14] ^ 0xc2548a26u; + s[2] *= (s[9] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 5u); + s[13] *= (s[7] | 1u); + s[5] = (s[5] ^ s[13]) * 0x10dbc9ddu; + s[12] -= s[5]; + s[2] += s[12]; + s[15] -= s[2]; + s[4] = (s[4] ^ s[15]) * 0x3582fe41u; + s[7] = mh_rotl(s[7] ^ s[4], 28u); + s[13] = s[13] * 0x7fe12955u + s[7]; + s[12] = (s[12] ^ s[13]) * 0xd86d1b4bu; + s[10] += s[12] + 0xb0f59a52u; + s[0] *= (s[10] | 1u); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[8] ^= s[10]; + s[10] *= (s[8] | 1u); + s[5] += (s[10] | s[7]); + s[13] = mh_rotl(s[13] ^ s[5], 11u); + s[0] ^= (s[13] & s[11]); + s[6] += s[0]; + s[3] = mh_rotl(s[3], 8u) + s[6]; + s[13] ^= s[3] ^ 0x97eba12fu; + s[10] *= (s[13] | 1u); + s[1] += s[10]; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[11] ^= s[12]; + s[7] ^= s[11]; + s[1] *= (s[7] | 1u); + s[4] += s[1] + 0x3e58791au; + s[0] += (s[4] | s[1]); + s[10] ^= s[0]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[13] ^= s[15]; + s[7] ^= s[13] ^ 0x2741705du; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[15] += s[4] + 0xe6934fbbu; + s[3] -= s[15]; + s[11] = (s[11] ^ s[3]) * 0x1f6fe0a9u; + s[15] ^= s[11]; + s[0] = (s[0] ^ s[15]) * 0x1ef7dac7u; + s[14] += s[0] + 0x85ea7167u; + s[8] += s[14]; + s[2] = (s[2] ^ s[8]) * 0xbd1c80ddu; + s[7] += s[2]; + s[4] ^= s[7]; + s[11] = mh_rotl(s[11], 28u) + s[4]; + s[9] = (s[9] ^ s[11]) * 0xf99784f9u; + s[5] = mh_rotl(s[5] ^ s[9], 28u); + s[6] += s[5]; + s[10] = mh_rotl(s[10] ^ s[6], 30u); + s[15] *= (s[10] | 1u); + s[11] ^= s[15]; + s[10] ^= s[11] ^ 0xe63d1f0fu; + s[0] ^= (s[10] & s[15]); + s[14] = (s[14] ^ s[0]) * 0xdd771591u; + s[6] = mh_rotl(s[6] ^ s[14], 25u); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0x1aef487du; + s[2] += s[6] + 0x4803fbdfu; + s[9] ^= s[2]; + s[12] ^= (s[9] & s[13]); + s[15] ^= (s[12] & s[10]); + s[12] *= (s[15] | 1u); + s[14] ^= s[12]; + s[11] = (s[11] ^ s[14]) * 0xcdae3347u; + s[2] = mh_rotl(s[2] ^ s[11], 25u); + s[9] ^= s[2] ^ 0xd54df97bu; + s[0] *= (s[9] | 1u); + s[9] ^= s[0] ^ 0x36482476u; + s[5] *= (s[9] | 1u); + s[9] += s[5]; + s[11] = mh_rotl(s[11] ^ s[9], 19u); + s[15] ^= (s[11] & s[4]); + s[14] ^= s[15]; + s[1] += s[14]; + s[11] = mh_rotl(s[11], 20u) + s[1]; + s[9] += s[11] + 0x08509d57u; + s[15] *= (s[9] | 1u); + s[9] -= s[15]; + s[14] = (s[14] ^ s[9]) * 0x9757fd53u; + s[13] ^= (s[14] & s[5]); + s[6] += s[13]; + s[15] = (s[15] ^ s[6]) * 0x3e6be04bu; + s[12] *= (s[15] | 1u); + s[2] = mh_rotl(s[2], 25u) + s[12]; + s[13] -= s[2]; + s[8] ^= s[13]; + s[4] = mh_rotl(s[4] ^ s[8], 31u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[1] = mh_rotl(s[1], 20u) + s[10]; + s[7] += s[1] + 0x9218a857u; + s[0] += s[7]; + s[11] ^= s[0]; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[10] = mh_rotl(s[10] ^ s[15], 1u); + s[3] ^= s[10] ^ 0x60be6fe9u; + s[4] = (s[4] ^ s[3]) * 0x4177a7a7u; + s[7] = mh_rotl(s[7] ^ s[4], 25u); + s[11] += s[7] + 0x85521284u; + s[4] = (s[4] ^ s[11]) * 0x95e55935u; + s[3] += s[4]; + s[15] += s[3]; + s[5] += s[15] + 0x7518eed4u; + s[9] ^= s[5] ^ 0x087e9a42u; + s[10] *= (s[9] | 1u); + s[8] -= s[10]; + s[5] ^= s[8] ^ 0xf3fb3909u; + s[14] ^= (s[5] & s[8]); + s[10] += s[14] + 0x7a9e6e04u; + s[0] += (s[10] | s[2]); + s[6] = (s[6] ^ s[0]) * 0xe355b5f1u; + s[5] = s[5] * 0xe711e2fdu + s[6]; + s[10] = mh_rotl(s[10], 13u) + s[5]; + s[8] = mh_rotl(s[8], 3u) + s[10]; + s[13] ^= s[8]; + s[11] ^= s[13]; + s[9] -= s[11]; + s[12] ^= s[9] ^ 0xc8862d11u; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15], 23u) + s[4]; + s[9] ^= s[15] ^ 0x413dfad3u; + s[11] *= (s[9] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 31u); + s[5] ^= s[1] ^ 0xe7b946b4u; + s[15] -= s[5]; + s[2] *= (s[15] | 1u); + s[5] *= (s[2] | 1u); + s[4] -= s[5]; + s[9] += (s[4] | s[13]); + s[0] ^= s[9] ^ 0x7854824fu; + s[3] = (s[3] ^ s[0]) * 0x442b482du; + s[11] = mh_rotl(s[11], 2u) + s[3]; + s[6] += (s[11] | s[13]); + s[7] += (s[6] | s[9]); + s[0] *= (s[7] | 1u); + s[4] += s[0]; + s[14] ^= (s[4] & s[7]); + s[10] += (s[14] | s[3]); + s[9] ^= s[10]; + s[10] *= (s[9] | 1u); + s[4] *= (s[10] | 1u); + s[14] += s[4]; + s[6] -= s[14]; + s[15] ^= s[6]; + s[6] *= (s[15] | 1u); + s[10] ^= s[6]; + s[6] ^= s[10]; + s[8] ^= (s[6] & s[0]); + s[5] ^= s[8]; + s[10] ^= s[5]; + s[7] = mh_rotl(s[7], 28u) + s[10]; + s[1] += s[7] + 0xe4c19693u; + s[0] = mh_rotl(s[0], 15u) + s[1]; + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[1] = mh_rotl(s[1], 19u) + s[2]; + s[6] += s[1] + 0x87218495u; + s[7] = mh_rotl(s[7], 15u) + s[6]; + s[6] += (s[7] | s[5]); + s[10] = mh_rotl(s[10], 7u) + s[6]; + s[2] *= (s[10] | 1u); + s[0] = mh_rotl(s[0], 27u) + s[2]; + s[10] ^= s[0]; + s[15] = (s[15] ^ s[10]) * 0x5787be43u; + s[2] -= s[15]; + s[0] = mh_rotl(s[0] ^ s[2], 14u); + s[6] += s[0]; + s[5] += s[6]; + s[15] += s[5]; + s[1] = mh_rotl(s[1], 4u) + s[15]; + s[10] += s[1]; + s[7] = (s[7] ^ s[10]) * 0x5b66a27du; + s[11] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[11], 10u); + s[10] *= (s[7] | 1u); + s[2] = mh_rotl(s[2] ^ s[10], 12u); + s[14] ^= s[2]; + s[7] *= (s[14] | 1u); + s[10] += s[7] + 0x51e1605bu; + s[11] += s[10] + 0x07a5770bu; + s[12] = mh_rotl(s[12], 25u) + s[11]; + s[13] += s[12] + 0x173cbaedu; + s[14] -= s[13]; + s[8] *= (s[14] | 1u); + s[6] = (s[6] ^ s[8]) * 0x198bf8abu; + s[13] += s[6]; + s[4] = (s[4] ^ s[13]) * 0x4a858065u; + s[8] += s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 30u); + s[12] += s[15] + 0x41cd5528u; + s[15] = mh_rotl(s[15], 1u) + s[12]; + s[12] = (s[12] ^ s[15]) * 0xf11bd25du; + s[1] = mh_rotl(s[1], 23u) + s[12]; + s[9] = mh_rotl(s[9] ^ s[1], 12u); + s[13] = (s[13] ^ s[9]) * 0x63f2bd71u; + s[4] += s[13] + 0x941778a1u; + s[11] = s[11] * 0x8d0fa58du + s[4]; + s[6] = mh_rotl(s[6] ^ s[11], 2u); + s[12] += s[6] + 0x1548d255u; + s[1] += s[12] + 0x2e20325eu; + s[7] ^= s[1] ^ 0x352c2791u; + s[12] ^= s[7]; + s[0] = (s[0] ^ s[12]) * 0xc3e7b99bu; + s[7] ^= s[0]; + s[1] ^= s[7]; + s[15] = mh_rotl(s[15] ^ s[1], 23u); + s[14] ^= s[15]; + s[11] = mh_rotl(s[11] ^ s[14], 31u); + s[10] += s[11]; + s[7] = (s[7] ^ s[10]) * 0x7c1fbac9u; + s[6] = (s[6] ^ s[7]) * 0x0b46f65bu; + s[10] ^= s[6]; + s[6] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[14] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[14], 21u); + s[7] -= s[10]; + s[2] += s[7]; + s[4] = mh_rotl(s[4] ^ s[2], 29u); + s[15] = mh_rotl(s[15] ^ s[4], 29u); + s[1] *= (s[15] | 1u); + s[8] = mh_rotl(s[8], 3u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[8], 12u); + s[14] = s[14] * 0x945fd715u + s[15]; + s[6] = (s[6] ^ s[14]) * 0xf9a3efb3u; + s[8] ^= s[6]; + s[11] -= s[8]; + s[9] *= (s[11] | 1u); + s[8] ^= s[9]; + s[11] += s[8]; + s[7] += s[11] + 0xe0e87381u; + s[9] ^= s[7]; + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] = mh_rotl(s[11] ^ s[5], 26u); + s[12] *= (s[11] | 1u); + s[4] -= s[12]; + s[10] -= s[4]; + s[0] -= s[10]; + s[6] ^= s[0]; + s[8] = s[8] * 0x92e1e5f7u + s[6]; + s[1] += (s[8] | s[3]); + s[10] = (s[10] ^ s[1]) * 0x1eb329d3u; + s[0] = mh_rotl(s[0], 29u) + s[10]; + s[9] = mh_rotl(s[9], 6u) + s[0]; + s[3] += s[9] + 0x1bcf547cu; + s[9] -= s[3]; + s[14] += s[9]; + s[5] = mh_rotl(s[5] ^ s[14], 22u); + s[15] = s[15] * 0x3675a9adu + s[5]; + s[7] *= (s[15] | 1u); + s[4] += s[7] + 0x641005b4u; + s[1] += s[4] + 0x6a3b3afbu; + s[11] += s[1]; + s[9] ^= s[11] ^ 0x30def5feu; + s[6] ^= (s[9] & s[8]); + s[11] = mh_rotl(s[11], 28u) + s[6]; + s[6] += s[11]; + s[12] = (s[12] ^ s[6]) * 0x4d6dc8b3u; + s[7] -= s[12]; + s[9] ^= s[7]; + s[0] *= (s[9] | 1u); + s[1] += s[0]; + s[7] ^= s[1] ^ 0xb420685cu; + s[1] ^= (s[7] & s[12]); + s[12] += (s[1] | s[9]); + s[14] ^= s[12] ^ 0x076d63f7u; + s[1] *= (s[14] | 1u); + s[5] = s[5] * 0x2026ae47u + s[1]; + s[15] = mh_rotl(s[15], 23u) + s[5]; + s[9] += s[15]; + s[1] ^= s[9]; + s[4] = (s[4] ^ s[1]) * 0x8e6cffbfu; + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[14] ^= s[3]; + s[6] -= s[14]; + s[15] = (s[15] ^ s[6]) * 0xf52e633du; + s[14] *= (s[15] | 1u); + s[4] -= s[14]; + s[0] ^= s[4]; + s[1] = (s[1] ^ s[0]) * 0xd9650db9u; + s[13] = mh_rotl(s[13], 27u) + s[1]; + s[15] = mh_rotl(s[15] ^ s[13], 22u); + s[12] += s[15]; + s[1] -= s[12]; + s[2] = s[2] * 0xd1740ecbu + s[1]; + s[11] *= (s[2] | 1u); + s[0] *= (s[11] | 1u); + s[4] -= s[0]; + s[11] ^= s[4] ^ 0x6823955fu; + s[3] ^= s[11]; + s[13] *= (s[3] | 1u); + s[3] = mh_rotl(s[3] ^ s[13], 8u); + s[8] = (s[8] ^ s[3]) * 0x615f5e9du; + s[0] -= s[8]; + s[3] ^= s[0]; + s[1] ^= s[3] ^ 0xb1dc5436u; + s[9] *= (s[1] | 1u); + s[13] += s[9]; + s[3] = s[3] * 0xfe0cf937u + s[13]; + s[8] *= (s[3] | 1u); + s[4] += s[8]; + s[3] += s[4] + 0x4f38c2ccu; + s[12] += s[3] + 0x3b3cb536u; + s[1] -= s[12]; + s[6] *= (s[1] | 1u); + s[8] = (s[8] ^ s[6]) * 0x89b78741u; + s[5] += s[8]; + s[1] += s[5] + 0x37d58859u; + s[7] = (s[7] ^ s[1]) * 0x4d7d11c3u; + s[4] ^= (s[7] & s[11]); + s[6] ^= s[4] ^ 0xe3a88b56u; + s[13] = mh_rotl(s[13], 20u) + s[6]; + s[10] *= (s[13] | 1u); + s[14] += s[10]; + s[8] += (s[14] | s[6]); + s[11] += s[8] + 0xca45662du; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[5] *= (s[14] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[8] -= s[14]; + s[13] ^= s[8]; + s[6] -= s[13]; + s[14] += (s[6] | s[4]); + s[0] -= s[14]; + s[6] += s[0] + 0x19712582u; + s[15] = mh_rotl(s[15] ^ s[6], 27u); + s[3] *= (s[15] | 1u); + s[5] -= s[3]; + s[8] = mh_rotl(s[8] ^ s[5], 17u); +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_8(thread uint* s) { + s[2] = mh_rotl(s[2] ^ s[0], 30u); + s[12] = mh_rotl(s[12], 17u) + s[2]; + s[13] *= (s[12] | 1u); + s[11] *= (s[13] | 1u); + s[1] = mh_rotl(s[1] ^ s[11], 17u); + s[10] -= s[1]; + s[2] += s[10]; + s[11] = (s[11] ^ s[2]) * 0xea1e243du; + s[10] ^= s[11] ^ 0x2e9ac4cbu; + s[5] -= s[10]; + s[1] = mh_rotl(s[1], 20u) + s[5]; + s[6] ^= (s[1] & s[9]); + s[11] += s[6]; + s[13] *= (s[11] | 1u); + s[15] *= (s[13] | 1u); + s[3] ^= (s[15] & s[2]); + s[8] -= s[3]; + s[5] += s[8] + 0x40407046u; + s[3] *= (s[5] | 1u); + s[12] *= (s[3] | 1u); + s[14] ^= s[12] ^ 0x972141aeu; + s[4] -= s[14]; + s[1] *= (s[4] | 1u); + s[15] -= s[1]; + s[0] = s[0] * 0x6b61ba2bu + s[15]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[0] = s[0] * 0xbebc2e0du + s[13]; + s[11] += s[0] + 0x2c68ac9eu; + s[3] += (s[11] | s[10]); + s[15] = s[15] * 0xd6e907b5u + s[3]; + s[1] += s[15]; + s[12] += s[1]; + s[10] += s[12]; + s[2] += s[10]; + s[1] ^= s[2]; + s[0] *= (s[1] | 1u); + s[13] ^= s[0]; + s[6] *= (s[13] | 1u); + s[0] = (s[0] ^ s[6]) * 0xa1b16ef7u; + s[8] += (s[0] | s[11]); + s[0] = mh_rotl(s[0] ^ s[8], 24u); + s[9] -= s[0]; + s[13] = (s[13] ^ s[9]) * 0x8cb2b469u; + s[10] = mh_rotl(s[10] ^ s[13], 20u); + s[13] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[13], 23u); + s[1] = (s[1] ^ s[11]) * 0x0cac0de1u; + s[7] = mh_rotl(s[7], 17u) + s[1]; + s[10] = (s[10] ^ s[7]) * 0xb33ec0ebu; + s[12] += s[10]; + s[11] = mh_rotl(s[11] ^ s[12], 31u); + s[8] ^= s[11]; + s[4] = s[4] * 0x0fdcff95u + s[8]; + s[13] ^= (s[4] & s[12]); + s[6] = mh_rotl(s[6], 4u) + s[13]; + s[12] = (s[12] ^ s[6]) * 0x526264efu; + s[4] -= s[12]; + s[7] = (s[7] ^ s[4]) * 0x4afe3457u; + s[12] = s[12] * 0x4728f4cbu + s[7]; + s[4] ^= s[12]; + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[8] += s[15]; + s[5] -= s[8]; + s[3] += (s[5] | s[12]); + s[15] += s[3]; + s[13] = mh_rotl(s[13] ^ s[15], 13u); + s[0] ^= (s[13] & s[11]); + s[4] ^= s[0]; + s[14] += s[4]; + s[8] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[8], 17u); + s[1] += s[0]; + s[8] = (s[8] ^ s[1]) * 0xff70caf9u; + s[2] ^= s[8] ^ 0x0ff2bb06u; + s[1] *= (s[2] | 1u); + s[12] *= (s[1] | 1u); + s[14] = mh_rotl(s[14] ^ s[12], 12u); + s[13] += s[14]; + s[11] = mh_rotl(s[11], 15u) + s[13]; + s[3] = (s[3] ^ s[11]) * 0xa18acb9fu; + s[1] ^= s[3] ^ 0x4af36d07u; + s[2] += s[1] + 0x2ee01525u; + s[5] ^= s[2]; + s[3] += s[5] + 0x96db46ecu; + s[12] ^= (s[3] & s[14]); + s[13] ^= s[12] ^ 0x8a4b65c5u; + s[7] ^= s[13]; + s[5] += s[7]; + s[0] += s[5]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[7] = (s[7] ^ s[3]) * 0x0daf64efu; + s[9] = (s[9] ^ s[7]) * 0x2f262a6du; + s[1] ^= s[9]; + s[12] -= s[1]; + s[2] += s[12]; + s[12] ^= (s[2] & s[15]); + s[10] ^= (s[12] & s[15]); + s[14] ^= s[10]; + s[1] = mh_rotl(s[1], 26u) + s[14]; + s[9] += s[1]; + s[8] ^= s[9]; + s[15] ^= s[8] ^ 0x69952578u; + s[0] ^= s[15] ^ 0x45e70bd6u; + s[8] -= s[0]; + s[14] = s[14] * 0x39098d3bu + s[8]; + s[6] *= (s[14] | 1u); + s[12] ^= s[6] ^ 0xd07ef179u; + s[6] -= s[12]; + s[15] = mh_rotl(s[15] ^ s[6], 2u); + s[6] += s[15]; + s[9] ^= (s[6] & s[1]); + s[5] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[5], 22u); + s[9] *= (s[11] | 1u); + s[6] = s[6] * 0x36ed5b21u + s[9]; + s[9] *= (s[6] | 1u); + s[13] = mh_rotl(s[13] ^ s[9], 4u); + s[1] -= s[13]; + s[4] *= (s[1] | 1u); + s[3] ^= (s[4] & s[5]); + s[2] = s[2] * 0x38309bf7u + s[3]; + s[1] += (s[2] | s[11]); + s[9] = (s[9] ^ s[1]) * 0xc0be3739u; + s[15] ^= s[9] ^ 0x07de5788u; + s[11] = s[11] * 0xd8c6366du + s[15]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[15] = mh_rotl(s[15] ^ s[0], 5u); + s[3] += s[15]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[15] *= (s[11] | 1u); + s[1] = s[1] * 0x0246d699u + s[15]; + s[10] *= (s[1] | 1u); + s[12] += s[10]; + s[10] += s[12]; + s[7] += (s[10] | s[9]); + s[9] ^= s[7]; + s[3] ^= s[9]; + s[14] += (s[3] | s[0]); + s[1] = mh_rotl(s[1] ^ s[14], 17u); + s[11] ^= s[1]; + s[3] ^= s[11]; + s[10] = mh_rotl(s[10] ^ s[3], 8u); + s[3] *= (s[10] | 1u); + s[2] ^= s[3]; + s[9] = (s[9] ^ s[2]) * 0xefdd0db1u; + s[12] += (s[9] | s[5]); + s[5] = mh_rotl(s[5] ^ s[12], 6u); + s[11] = (s[11] ^ s[5]) * 0xc9b9d1dfu; + s[1] ^= s[11]; + s[5] ^= s[1]; + s[7] ^= s[5]; + s[10] ^= (s[7] & s[11]); + s[7] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[7], 25u); + s[10] ^= s[15]; + s[9] += s[10] + 0xf87f58f8u; + s[0] = mh_rotl(s[0], 15u) + s[9]; + s[9] += s[0]; + s[1] += (s[9] | s[7]); + s[14] += s[1] + 0x676d23d7u; + s[0] += (s[14] | s[6]); + s[8] = mh_rotl(s[8], 15u) + s[0]; + s[14] *= (s[8] | 1u); + s[8] ^= (s[14] & s[6]); + s[4] += s[8]; + s[2] = (s[2] ^ s[4]) * 0xe1a03111u; + s[15] -= s[2]; + s[0] ^= (s[15] & s[4]); + s[15] ^= s[0]; + s[8] ^= s[15] ^ 0xad7880f9u; + s[4] = mh_rotl(s[4], 11u) + s[8]; + s[11] -= s[4]; + s[6] += s[11]; + s[9] *= (s[6] | 1u); + s[0] ^= s[9]; + s[15] = mh_rotl(s[15] ^ s[0], 11u); + s[2] = (s[2] ^ s[15]) * 0x03f5accbu; + s[12] = mh_rotl(s[12], 11u) + s[2]; + s[9] ^= s[12]; + s[14] *= (s[9] | 1u); + s[1] ^= s[14]; + s[8] = (s[8] ^ s[1]) * 0x9cf27933u; + s[15] = mh_rotl(s[15], 27u) + s[8]; + s[7] ^= (s[15] & s[8]); + s[5] += s[7]; + s[9] = (s[9] ^ s[5]) * 0xe294856fu; + s[1] ^= s[9]; + s[11] ^= s[1]; + s[15] = (s[15] ^ s[11]) * 0x4555f2d5u; + s[7] = mh_rotl(s[7] ^ s[15], 31u); + s[13] += s[7]; + s[10] ^= s[13]; + s[2] = (s[2] ^ s[10]) * 0x75193e43u; + s[9] -= s[2]; + s[3] = s[3] * 0x8c57e72du + s[9]; + s[2] = mh_rotl(s[2], 21u) + s[3]; + s[4] = (s[4] ^ s[2]) * 0x55a02867u; + s[1] -= s[4]; + s[9] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[9], 8u); + s[14] ^= s[2]; + s[0] = mh_rotl(s[0], 18u) + s[14]; + s[14] *= (s[0] | 1u); + s[6] = mh_rotl(s[6], 18u) + s[14]; + s[10] -= s[6]; + s[8] ^= s[10]; + s[9] += s[8]; + s[4] ^= s[9]; + s[7] = (s[7] ^ s[4]) * 0x49afec39u; + s[14] += (s[7] | s[1]); + s[6] = mh_rotl(s[6] ^ s[14], 20u); + s[3] = mh_rotl(s[3] ^ s[6], 28u); + s[10] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 16u) + s[10]; + s[8] += s[7]; + s[11] = s[11] * 0x47f9228bu + s[8]; + s[6] ^= (s[11] & s[14]); + s[14] ^= (s[6] & s[13]); + s[15] = mh_rotl(s[15] ^ s[14], 30u); + s[13] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[13], 19u); + s[7] += s[8]; + s[6] -= s[7]; + s[1] = s[1] * 0x89a3aa17u + s[6]; + s[10] -= s[1]; + s[13] ^= s[10]; + s[14] *= (s[13] | 1u); + s[15] += s[14]; + s[4] ^= s[15]; + s[1] = mh_rotl(s[1], 27u) + s[4]; + s[0] += s[1]; + s[7] = mh_rotl(s[7], 30u) + s[0]; + s[10] ^= s[7]; + s[14] += s[10]; + s[3] += s[14]; + s[12] ^= s[3] ^ 0x3d91f806u; + s[0] -= s[12]; + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 7u) + s[12]; + s[14] ^= s[4]; + s[6] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 23u) + s[6]; + s[15] -= s[10]; + s[6] -= s[15]; + s[8] = mh_rotl(s[8] ^ s[6], 2u); + s[3] = mh_rotl(s[3], 2u) + s[8]; + s[4] += (s[3] | s[10]); + s[1] = (s[1] ^ s[4]) * 0x5b3cd913u; + s[11] = mh_rotl(s[11] ^ s[1], 2u); + s[0] = (s[0] ^ s[11]) * 0x3c693ccbu; + s[15] += s[0]; + s[10] ^= s[15] ^ 0x5a83618eu; + s[3] *= (s[10] | 1u); + s[11] = s[11] * 0x8cff3953u + s[3]; + s[15] -= s[11]; + s[10] = mh_rotl(s[10], 29u) + s[15]; + s[11] += s[10] + 0xef64efa3u; + s[0] = mh_rotl(s[0], 24u) + s[11]; + s[11] = mh_rotl(s[11] ^ s[0], 20u); + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[6] ^= s[0]; + s[4] -= s[6]; + s[15] += s[4]; + s[5] = mh_rotl(s[5], 20u) + s[15]; + s[9] ^= s[5]; + s[0] += s[9]; + s[7] += s[0]; + s[1] = s[1] * 0x0b7f59b3u + s[7]; + s[4] += s[1] + 0x145ca745u; + s[3] = (s[3] ^ s[4]) * 0x45e8e60bu; + s[0] += s[3]; + s[14] = (s[14] ^ s[0]) * 0x89fefe0bu; + s[5] ^= s[14]; + s[0] ^= s[5]; + s[10] *= (s[0] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 26u); + s[4] = mh_rotl(s[4], 29u) + s[13]; + s[15] = mh_rotl(s[15], 13u) + s[4]; + s[3] = mh_rotl(s[3], 16u) + s[15]; + s[9] -= s[3]; + s[12] ^= s[9] ^ 0x95781226u; + s[13] ^= s[12]; + s[10] = mh_rotl(s[10], 28u) + s[13]; + s[5] += s[10]; + s[12] *= (s[5] | 1u); + s[14] += s[12] + 0x01116f8fu; + s[13] = mh_rotl(s[13] ^ s[14], 26u); + s[10] += s[13] + 0x23aea8a9u; + s[8] += (s[10] | s[12]); + s[13] ^= (s[8] & s[0]); + s[1] += s[13]; + s[6] ^= s[1]; + s[4] ^= (s[6] & s[7]); + s[11] += s[4]; + s[4] *= (s[11] | 1u); + s[7] ^= (s[4] & s[3]); + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[6] = mh_rotl(s[6], 11u) + s[11]; + s[0] -= s[6]; + s[12] *= (s[0] | 1u); + s[4] = mh_rotl(s[4], 19u) + s[12]; + s[2] = mh_rotl(s[2] ^ s[4], 8u); + s[10] += s[2]; + s[11] = mh_rotl(s[11], 25u) + s[10]; + s[1] ^= s[11]; + s[12] = (s[12] ^ s[1]) * 0x6229cc97u; + s[14] *= (s[12] | 1u); + s[4] -= s[14]; + s[13] ^= (s[4] & s[1]); + s[1] -= s[13]; + s[12] += s[1]; + s[7] += s[12] + 0x88900fdcu; + s[6] *= (s[7] | 1u); + s[15] = s[15] * 0x84135b45u + s[6]; + s[8] ^= s[15]; + s[15] += s[8]; + s[5] ^= s[15]; + s[8] ^= s[5]; + s[11] -= s[8]; + s[3] = s[3] * 0x2e47fa49u + s[11]; + s[12] = mh_rotl(s[12] ^ s[3], 10u); + s[8] -= s[12]; + s[13] = mh_rotl(s[13], 15u) + s[8]; + s[9] = mh_rotl(s[9], 23u) + s[13]; + s[0] += (s[9] | s[11]); + s[12] = (s[12] ^ s[0]) * 0x733a341du; + s[13] -= s[12]; + s[4] *= (s[13] | 1u); + s[7] += s[4]; + s[1] += s[7]; + s[15] = mh_rotl(s[15], 2u) + s[1]; + s[3] ^= s[15]; + s[15] -= s[3]; + s[1] = mh_rotl(s[1], 9u) + s[15]; + s[12] ^= (s[1] & s[0]); + s[11] ^= (s[12] & s[13]); + s[14] -= s[11]; + s[11] = (s[11] ^ s[14]) * 0xedf296edu; + s[12] ^= (s[11] & s[14]); + s[11] = mh_rotl(s[11], 1u) + s[12]; + s[5] *= (s[11] | 1u); + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[7] ^= s[14] ^ 0x4af9834bu; + s[10] ^= s[7]; + s[9] ^= (s[10] & s[2]); + s[13] ^= s[9]; + s[14] ^= (s[13] & s[7]); + s[10] += s[14]; + s[12] ^= s[10]; + s[13] -= s[12]; + s[1] ^= (s[13] & s[14]); + s[12] = (s[12] ^ s[1]) * 0xf8f0e297u; + s[5] *= (s[12] | 1u); + s[15] ^= (s[5] & s[7]); + s[11] = mh_rotl(s[11], 27u) + s[15]; + s[9] = (s[9] ^ s[11]) * 0xbefccb87u; + s[15] += s[9] + 0x17cb62ddu; + s[0] ^= s[15]; + s[7] ^= s[0]; + s[3] ^= s[7]; + s[7] += s[3]; + s[10] ^= s[7]; + s[9] *= (s[10] | 1u); + s[12] += (s[9] | s[14]); + s[3] = mh_rotl(s[3] ^ s[12], 25u); + s[10] += s[3]; + s[9] = mh_rotl(s[9], 3u) + s[10]; + s[6] ^= s[9]; + s[14] = mh_rotl(s[14] ^ s[6], 21u); + s[3] = s[3] * 0x65a97173u + s[14]; + s[5] = mh_rotl(s[5] ^ s[3], 6u); + s[7] = mh_rotl(s[7], 24u) + s[5]; + s[15] += s[7]; + s[13] += s[15]; + s[0] *= (s[13] | 1u); + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[15] *= (s[3] | 1u); + s[6] ^= (s[15] & s[12]); + s[2] ^= s[6]; + s[8] ^= s[2]; + s[1] = s[1] * 0x6e553265u + s[8]; + s[12] += s[1] + 0x0da30db5u; + s[7] ^= s[12]; + s[1] ^= s[7]; + s[3] ^= s[1]; + s[4] += s[3]; + s[15] ^= s[4]; + s[3] += s[15]; + s[2] *= (s[3] | 1u); + s[7] += s[2]; + s[0] = (s[0] ^ s[7]) * 0x97f0fd93u; + s[14] = mh_rotl(s[14] ^ s[0], 27u); + s[13] = (s[13] ^ s[14]) * 0xb04f1b3fu; + s[9] -= s[13]; + s[3] += s[9]; + s[4] -= s[3]; + s[8] ^= s[4]; + s[9] ^= s[8]; + s[4] += s[9]; + s[9] = s[9] * 0x5b96b23bu + s[4]; + s[1] += s[9]; + s[8] += s[1]; + s[14] += s[8]; + s[5] = mh_rotl(s[5] ^ s[14], 12u); + s[8] = (s[8] ^ s[5]) * 0x6395a44fu; + s[12] ^= s[8] ^ 0x1623eb44u; + s[14] = (s[14] ^ s[12]) * 0xed649ca9u; + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[12] *= (s[11] | 1u); + s[15] = mh_rotl(s[15] ^ s[12], 23u); + s[3] += s[15]; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x29ccc511u; + s[4] += s[8]; + s[14] = (s[14] ^ s[4]) * 0xa94e09cbu; + s[7] = (s[7] ^ s[14]) * 0x2353916bu; + s[1] ^= (s[7] & s[9]); + s[8] = (s[8] ^ s[1]) * 0x3189b2c5u; + s[10] = mh_rotl(s[10] ^ s[8], 7u); + s[7] = (s[7] ^ s[10]) * 0x8fbc5699u; + s[12] ^= s[7] ^ 0x02fcc6f5u; + s[6] += s[12]; + s[4] += s[6]; + s[15] ^= s[4] ^ 0x37cf53dcu; + s[9] *= (s[15] | 1u); + s[14] -= s[9]; + s[7] -= s[14]; + s[3] = mh_rotl(s[3], 15u) + s[7]; + s[0] ^= s[3]; + s[7] = mh_rotl(s[7], 7u) + s[0]; + s[14] = mh_rotl(s[14], 14u) + s[7]; + s[12] += s[14]; + s[10] = (s[10] ^ s[12]) * 0xb35348fbu; + s[5] = mh_rotl(s[5] ^ s[10], 17u); + s[14] ^= s[5] ^ 0x43820636u; + s[13] += s[14]; + s[3] = (s[3] ^ s[13]) * 0xaeaf3829u; + s[1] *= (s[3] | 1u); + s[2] += s[1]; + s[13] = mh_rotl(s[13], 9u) + s[2]; + s[3] = mh_rotl(s[3] ^ s[13], 26u); + s[2] = mh_rotl(s[2], 17u) + s[3]; + s[5] = mh_rotl(s[5] ^ s[2], 26u); + s[9] += s[5]; + s[3] = (s[3] ^ s[9]) * 0xc027efe3u; + s[6] *= (s[3] | 1u); + s[8] = (s[8] ^ s[6]) * 0x33c90921u; + s[2] -= s[8]; + s[4] ^= (s[2] & s[15]); + s[9] *= (s[4] | 1u); + s[2] += s[9]; + s[13] += (s[2] | s[6]); + s[4] = (s[4] ^ s[13]) * 0xde5f056fu; + s[3] ^= s[4]; + s[0] *= (s[3] | 1u); + s[14] *= (s[0] | 1u); + s[11] += s[14]; + s[2] ^= (s[11] & s[6]); + s[1] *= (s[2] | 1u); + s[12] += s[1] + 0x027965c8u; + s[14] *= (s[12] | 1u); + s[15] -= s[14]; + s[6] += s[15] + 0x3f2ed460u; + s[14] ^= s[6]; + s[9] ^= s[14]; + s[14] ^= s[9]; + s[8] -= s[14]; + s[9] = s[9] * 0x37363dc7u + s[8]; + s[2] ^= s[9]; + s[9] += s[2] + 0x36d721cdu; + s[2] ^= s[9] ^ 0x6a3aa7cbu; + s[13] = mh_rotl(s[13] ^ s[2], 4u); + s[1] ^= s[13]; + s[11] ^= s[1]; + s[10] ^= (s[11] & s[3]); + s[1] += s[10]; + s[13] ^= (s[1] & s[0]); + s[5] += s[13]; + s[0] += s[5]; + s[1] += s[0] + 0x29e429d0u; + s[7] *= (s[1] | 1u); + s[1] += s[7]; + s[13] = (s[13] ^ s[1]) * 0xebce972fu; + s[14] ^= s[13] ^ 0x1155a47fu; + s[2] += s[14]; + s[5] += (s[2] | s[3]); + s[1] += s[5] + 0x6ee2efc2u; + s[6] *= (s[1] | 1u); + s[12] = s[12] * 0xf94d29abu + s[6]; + s[1] ^= s[12] ^ 0x83a5d198u; + s[8] ^= (s[1] & s[2]); + s[15] = s[15] * 0xf23f5c07u + s[8]; + s[12] *= (s[15] | 1u); + s[4] ^= s[12]; + s[6] = mh_rotl(s[6], 27u) + s[4]; + s[14] = mh_rotl(s[14], 24u) + s[6]; + s[5] += s[14]; + s[13] ^= s[5] ^ 0x3acfc3e3u; + s[12] ^= s[13]; + s[4] ^= (s[12] & s[7]); + s[2] ^= (s[4] & s[10]); + s[15] = mh_rotl(s[15] ^ s[2], 18u); + s[0] += s[15]; + s[8] *= (s[0] | 1u); + s[13] ^= s[8]; + s[12] -= s[13]; + s[3] = mh_rotl(s[3] ^ s[12], 4u); + s[15] += s[3] + 0x92e6fcceu; + s[10] = mh_rotl(s[10], 6u) + s[15]; + s[4] = mh_rotl(s[4] ^ s[10], 13u); + s[0] ^= s[4] ^ 0x4eb97c7fu; + s[5] -= s[0]; + s[2] = (s[2] ^ s[5]) * 0x02dedd01u; + s[7] ^= s[2]; + s[13] += (s[7] | s[1]); + s[10] += s[13]; + s[2] *= (s[10] | 1u); + s[6] *= (s[2] | 1u); + s[9] ^= s[6]; + s[14] += s[9]; + s[12] -= s[14]; + s[14] = mh_rotl(s[14] ^ s[12], 29u); + s[7] += s[14] + 0x69164b49u; + s[4] = s[4] * 0x00950233u + s[7]; + s[9] ^= (s[4] & s[11]); + s[1] = (s[1] ^ s[9]) * 0x4e1cc661u; + s[2] -= s[1]; + s[8] = (s[8] ^ s[2]) * 0x8b929a3bu; + s[2] += s[8]; + s[15] += (s[2] | s[9]); + s[3] += s[15] + 0x4a9cd552u; + s[0] = (s[0] ^ s[3]) * 0x32dafb91u; + s[9] = mh_rotl(s[9], 17u) + s[0]; + s[11] *= (s[9] | 1u); + s[9] -= s[11]; + s[6] += s[9]; + s[9] += s[6] + 0xf58412b3u; + s[7] += s[9] + 0x664fa0c3u; + s[12] = s[12] * 0x0f8329a3u + s[7]; + s[11] += s[12] + 0x5b5d3b76u; + s[5] -= s[11]; + s[10] = (s[10] ^ s[5]) * 0x206437adu; + s[12] = s[12] * 0xbaaafbc9u + s[10]; + s[8] *= (s[12] | 1u); + s[0] += s[8]; + s[1] += s[0] + 0x17331c4fu; + s[3] ^= (s[1] & s[2]); + s[2] = mh_rotl(s[2] ^ s[3], 24u); + s[0] += (s[2] | s[1]); + s[1] = mh_rotl(s[1] ^ s[0], 11u); + s[0] *= (s[1] | 1u); + s[2] = s[2] * 0xfa17cdb7u + s[0]; + s[14] += s[2]; + s[3] ^= s[14]; + s[13] += s[3]; + s[2] += s[13]; + s[8] = mh_rotl(s[8] ^ s[2], 28u); + s[1] *= (s[8] | 1u); + s[14] -= s[1]; + s[11] = mh_rotl(s[11], 9u) + s[14]; + s[10] ^= s[11]; + s[9] += s[10]; + s[0] += s[9] + 0x3437b9adu; + s[4] = (s[4] ^ s[0]) * 0x6074d9edu; + s[12] += s[4] + 0xf268adfeu; + s[14] += s[12] + 0x05784ee6u; + s[13] = s[13] * 0x92ea562fu + s[14]; + s[11] = mh_rotl(s[11] ^ s[13], 18u); + s[2] = mh_rotl(s[2], 4u) + s[11]; + s[13] = (s[13] ^ s[2]) * 0x49aaf125u; + s[3] -= s[13]; + s[7] += s[3] + 0x1d4d2968u; + s[5] ^= (s[7] & s[12]); + s[15] -= s[5]; + s[0] ^= s[15] ^ 0xa66653d0u; + s[2] += s[0]; + s[11] -= s[2]; + s[0] = mh_rotl(s[0] ^ s[11], 16u); + s[3] = mh_rotl(s[3], 4u) + s[0]; + s[8] *= (s[3] | 1u); + s[6] ^= s[8] ^ 0x228a8e2bu; + s[2] ^= s[6]; + s[15] += s[2]; + s[8] += s[15]; + s[2] = mh_rotl(s[2] ^ s[8], 29u); + s[10] ^= s[2]; + s[13] = mh_rotl(s[13], 7u) + s[10]; + s[2] += s[13]; + s[10] = s[10] * 0x373045b7u + s[2]; + s[8] ^= s[10]; + s[13] -= s[8]; + s[15] = (s[15] ^ s[13]) * 0x9c79f3bfu; + s[0] = mh_rotl(s[0], 31u) + s[15]; + s[12] = mh_rotl(s[12], 25u) + s[0]; + s[9] -= s[12]; + s[0] = mh_rotl(s[0], 18u) + s[9]; + s[13] = mh_rotl(s[13] ^ s[0], 11u); + s[14] = mh_rotl(s[14], 9u) + s[13]; + s[7] -= s[14]; + s[3] ^= s[7] ^ 0x380dac7fu; + s[1] ^= s[3]; + s[8] += s[1] + 0x2ae5a9dau; + s[10] = mh_rotl(s[10], 3u) + s[8]; + s[7] = mh_rotl(s[7], 2u) + s[10]; + s[8] *= (s[7] | 1u); + s[10] = (s[10] ^ s[8]) * 0xc6c624a1u; + s[7] = mh_rotl(s[7], 6u) + s[10]; + s[5] += s[7] + 0x3b2e05abu; + s[15] ^= s[5]; + s[12] -= s[15]; + s[14] += s[12]; + s[11] += (s[14] | s[4]); + s[8] += s[11]; + s[15] -= s[8]; + s[10] += s[15]; + s[6] += s[10] + 0x41c42bb0u; + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[15] += (s[4] | s[6]); + s[4] = (s[4] ^ s[15]) * 0x4256a3b1u; + s[0] ^= s[4]; + s[8] = mh_rotl(s[8], 4u) + s[0]; + s[5] -= s[8]; + s[4] += s[5] + 0x566b8b0fu; + s[8] = (s[8] ^ s[4]) * 0xf604d0e7u; + s[10] += s[8]; + s[2] *= (s[10] | 1u); + s[5] ^= s[2]; + s[14] -= s[5]; + s[13] += s[14]; + s[2] -= s[13]; + s[0] += s[2]; + s[2] ^= s[0]; + s[0] ^= s[2] ^ 0x51509095u; + s[4] *= (s[0] | 1u); + s[12] *= (s[4] | 1u); + s[8] += (s[12] | s[9]); + s[10] = mh_rotl(s[10], 11u) + s[8]; + s[9] ^= s[10]; + s[15] += s[9]; + s[11] ^= s[15] ^ 0xa0d4f940u; + s[5] ^= s[11]; + s[6] ^= (s[5] & s[11]); + s[5] ^= s[6]; + s[0] *= (s[5] | 1u); + s[4] -= s[0]; + s[6] += (s[4] | s[3]); + s[4] = mh_rotl(s[4] ^ s[6], 9u); + s[12] ^= (s[4] & s[5]); + s[1] *= (s[12] | 1u); + s[11] ^= s[1]; + s[15] ^= s[11]; + s[4] ^= s[15] ^ 0x0a7a3a1bu; + s[7] += s[4]; + s[8] = mh_rotl(s[8] ^ s[7], 18u); + s[12] ^= s[8]; + s[1] ^= (s[12] & s[3]); + s[0] = mh_rotl(s[0], 7u) + s[1]; + s[2] ^= s[0]; + s[13] ^= s[2]; + s[0] = (s[0] ^ s[13]) * 0x24a5f39du; + s[15] -= s[0]; + s[0] ^= s[15]; + s[1] += s[0]; + s[13] = mh_rotl(s[13], 20u) + s[1]; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 13u) + s[4]; + s[4] ^= s[1]; + s[5] = mh_rotl(s[5], 31u) + s[4]; + s[0] -= s[5]; + s[7] = mh_rotl(s[7] ^ s[0], 28u); + s[5] += s[7]; + s[2] ^= s[5]; + s[5] = mh_rotl(s[5] ^ s[2], 16u); + s[0] ^= s[5] ^ 0xfb5e8938u; + s[8] += s[0]; + s[12] *= (s[8] | 1u); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[12] += s[11] + 0x9786f7f9u; + s[14] += s[12] + 0x47ed1785u; + s[7] ^= s[14] ^ 0x6483ca53u; + s[5] ^= s[7] ^ 0x7fcbaaf8u; + s[12] += s[5]; + s[1] += (s[12] | s[10]); + s[6] -= s[1]; + s[2] = mh_rotl(s[2], 12u) + s[6]; + s[8] += s[2] + 0x41a11731u; + s[11] = mh_rotl(s[11], 12u) + s[8]; + s[2] += s[11] + 0xdaf8e7dau; + s[7] *= (s[2] | 1u); + s[11] ^= s[7] ^ 0x0af2771du; + s[8] += s[11]; + s[4] += s[8]; + s[13] ^= s[4]; + s[14] = mh_rotl(s[14] ^ s[13], 27u); + s[12] ^= s[14]; + s[9] = s[9] * 0x232d6601u + s[12]; + s[4] *= (s[9] | 1u); + s[1] += s[4]; + s[0] += s[1]; + s[13] *= (s[0] | 1u); + s[1] *= (s[13] | 1u); + s[9] = mh_rotl(s[9] ^ s[1], 19u); + s[0] = mh_rotl(s[0] ^ s[9], 8u); + s[12] += s[0]; + s[15] = mh_rotl(s[15] ^ s[12], 2u); + s[1] -= s[15]; + s[15] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[8] ^= s[12]; + s[0] *= (s[8] | 1u); + s[14] ^= (s[0] & s[6]); + s[11] += s[14]; + s[13] ^= s[11]; + s[4] ^= (s[13] & s[5]); + s[12] -= s[4]; + s[15] -= s[12]; + s[12] = mh_rotl(s[12], 8u) + s[15]; + s[0] = s[0] * 0x28ee8749u + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 13u); + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[5] = (s[5] ^ s[10]) * 0xc5b4f577u; + s[3] = mh_rotl(s[3] ^ s[5], 8u); + s[7] = mh_rotl(s[7] ^ s[3], 30u); + s[1] -= s[7]; + s[5] = (s[5] ^ s[1]) * 0x2d76383du; + s[11] += s[5]; + s[4] = mh_rotl(s[4], 4u) + s[11]; + s[2] ^= s[4]; + s[9] = (s[9] ^ s[2]) * 0x4b24be99u; + s[10] = mh_rotl(s[10], 31u) + s[9]; + s[9] -= s[10]; + s[8] -= s[9]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +inline void mh_item(device const uint* cache, uint t, thread uint* s) { + s[0] = 0xceed56d7u; + s[1] = 0x9ba270d2u; + s[2] = 0x82caab2du; + s[3] = 0x81ebce0eu; + s[4] = 0x12b6ecf1u; + s[5] = 0xd0f3fd7cu; + s[6] = 0xd872eefeu; + s[7] = 0xc158c7bdu; + s[8] = t * 0xf351d601u + 0xc6892460u; + s[9] = t * 0xa3bb398fu + 0x25b7228au; + s[10] = t * 0xb5a09e35u + 0xcd515004u; + s[11] = t * 0x7509c9c1u + 0x2846527au; + s[12] = t * 0x6bbf31e9u + 0xa6324241u; + s[13] = t * 0xfc849a79u + 0x36e3ec53u; + s[14] = t * 0xded91851u + 0x82961bacu; + s[15] = t * 0x8d9113d1u + 0x0f97ba7du; + mh_round_0(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +inline uint mh_word(device const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// One thread per segment (2^16 threads). +kernel void igneum_cache_fill(device uint* cache [[buffer(0)]], uint gid [[thread_position_in_grid]]) { + mh_cache_segment(cache, gid); +} +// One thread per 64-byte item (dataset words / 16 threads). +kernel void igneum_build(device const uint* cache [[buffer(0)]], device uint* dataset [[buffer(1)]], + uint gid [[thread_position_in_grid]]) { + uint s[16]; + mh_item(cache, gid, s); + device uint* d = dataset + gid * 16u; + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.h b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.h new file mode 100644 index 00000000..98988cab --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.h @@ -0,0 +1,72 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// Program metadata for host.cu plus the launch wrappers defined in kernel.cu. +// Also included by proto-opencl/host.c (C99), which defines IGNEUM_NO_CUDA first and reads only the macros. +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif +#ifndef IGNEUM_NO_CUDA +#include +#endif + +#define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" +#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" +#define IGNEUM_GENERATOR 2 +#define IGNEUM_PROGRAM_ATTEMPT 0 +#define IGNEUM_PROGRAM_ID 0x7f4a5ca0a3637820ull +#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" +#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" +#define IGNEUM_DAY0 0xceed56d7u +#define IGNEUM_DAY1 0x9ba270d2u +#define IGNEUM_DATASET_LOG2 28 +#define IGNEUM_MASK 0x0fffffffu +#define IGNEUM_LANES 32 +#define IGNEUM_ITERATIONS 8 +#define IGNEUM_INSTR_COUNT 64 +#define IGNEUM_LOADS_PER_HASH 128 +#define IGNEUM_WIDE_LOADS_PER_HASH 0 +#define IGNEUM_OP_MIX "load=16 add=13 mulhi=9 shfl=5 sub=5 mad=4 rotl=4 xor=3 or=2 rotr=2 mul=1" +// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item +// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. +#define IGNEUM_LOAD_CLASS "dr736" +#define IGNEUM_CLASS_MIXER_MULT 1 +#define IGNEUM_CACHE_GROWTH 1 // 1: cache words = 2^(26 + doublings(day)), doublings = floor(log2(1 + day / 1460)) +// Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md, a prototype, NOT class v3): the item +// derivation runs the day's drawn program (memhard.h: mh_round_0..8, IGNEUM_DERIVE_LEN instructions each) in place of the mixer. +#define IGNEUM_CLASS_DERIVE_LEN 736 +#define IGNEUM_LOAD_SLOTS 16 +#define IGNEUM_LOAD_MIX { 100, 0, 0 } +#define IGNEUM_LOAD_WIDTH_COUNTS { 16, 0, 0 } // loads of 4, 16, 64 bytes per program +#define IGNEUM_BYTES_PER_HASH 512 +#define IGNEUM_FOLD_ROT 11 +#define IGNEUM_FOLD_MUL 0x9e3779b1u +// 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) +#define IGNEUM_DATASET_MODE 1 + +#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } +#define IGNEUM_CACHE_LOG2_WORDS 26 +#define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 +#define IGNEUM_CACHE_SEGMENTS 65536u +#define IGNEUM_ITEM_ROUNDS 8 +#define IGNEUM_DERIVE_LEN 736 // instructions per round program of the day's item-derivation program (Counter ASIC 3.0 item 2; memhard.h mh_round_0..8) +#define IGNEUM_DERIVE_ATTEMPT 0 +#define IGNEUM_DERIVE_FINGERPRINT 0x771868df4e64d6abull +#define IGNEUM_DERIVE_INSTRS_PER_ITEM 6624 +#define IGNEUM_DERIVE_GPU_OPS_PER_ITEM 10708 +#define IGNEUM_DERIVE_CHIP_OPS_PER_ITEM 10072 +#define IGNEUM_DERIVE_MULS_PER_ITEM 1475 +#define IGNEUM_MIX_ROT_INIT { 17u, 12u, 20u, 23u, 7u, 3u, 27u, 16u } +#define IGNEUM_MIX_MUL_INIT { 0xf351d601u, 0xa3bb398fu, 0xb5a09e35u, 0x7509c9c1u, 0x6bbf31e9u, 0xfc849a79u, 0xded91851u, 0x8d9113d1u, 0x0ff15225u, 0x3a5bdd41u, 0xab533435u, 0xe1c55ad5u, 0xe6d3bd0du, 0x9d9ffbbdu, 0xbb2a3cf3u, 0x50a7c08du } +#define IGNEUM_MIX_RC_INIT { 0xc6892460u, 0x25b7228au, 0xcd515004u, 0x2846527au, 0xa6324241u, 0x36e3ec53u, 0x82961bacu, 0x0f97ba7du, 0xb6f921a9u, 0x3ada24e5u, 0xde20ab91u, 0x5378eeb2u, 0x7d161662u, 0x89353cc1u, 0xb1aa03a2u, 0x788acae6u } + +#ifndef IGNEUM_NO_CUDA +// Defined in kernel.cu. All launch on the default stream and return cudaGetLastError(). +cudaError_t igneum_launch_cache_fill(uint32_t* cache, uint32_t nSegments); +cudaError_t igneum_launch_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems); +cudaError_t igneum_launch_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + uint32_t nonces, uint32_t blockWarps); +cudaError_t igneum_hash_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps); +#endif diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.json b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.json new file mode 100644 index 00000000..c4633cff --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.json @@ -0,0 +1,151 @@ +{ + "format": "igneum-program-pack-3", + "generator": 2, + "attempt": 0, + "program_id": "0x7f4a5ca0a3637820", + "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", + "dataset_mode": "memory-hard", + "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", + "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", + "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", + "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", + "lanes": 32, + "registers": 8, + "iterations": 8, + "instruction_count": 64, + "loads_per_hash": 128, + "load_class": "dr736", + "derive_len": 736, + "derive": "Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md; a prototype, not class v3): the nine mixer slots of the item derivation each run a straight-line program of derive_len instructions drawn from the day key stream after the 40 mixer draws, four draws per instruction (op roll below(100), destination roll below(15), third-register roll below(14), the immediate next()); every instruction reads the register the previous one wrote (s[0] first) and writes another; twelve forms, each a bijection on the state; the 8 dependent cache reads per item unchanged; the acceptance test of derive.rs (every register written per round program, 8 distinct rotations, the x8 mixer's operation and multiply counts as floors) rejects a draw and the next attempt continues the stream", + "mixer_mult": 1, + "cache_growth": true, + "mixer": "class v3 (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): every mixer application of the item derivation is 1 applications with round keys (r * 1 + j + 1) * 0x9E3779B9, the 8 dependent cache reads per item unchanged; cache growth rule option C: cache words = 2^(26 + doublings(day)), dataset words = 2^(genesis_log2 + doublings(day)), doublings(day) = floor(log2(1 + day / 1460)) for day = days since genesis", + "load_slots": 16, + "load_mix_percent_4_16_64": [100, 0, 0], + "load_width_counts_4_16_64": [16, 0, 0], + "bytes_per_hash": 512, + "wide_load": "read-width experiment (5 October 2026, docs/plans/read-width.md), NOT the lottery hash: a load of W words (width field, 4 or 16) reads dataset[b .. b + W) with b = (src & mask) & ~(W - 1) and folds every word into dst: x = dst ^ w[0]; for j in 1..W: x = (rotl(x, 11) * 0x9e3779b1) ^ w[j]; dst = x; width 1 is the plain load; the width is drawn per instruction from the class mix with one extra below(100) draw after the nine of version 2, and the program id is FNV-1a 64 over 'igneum-program-rw/' || generator_le32 || seed words || attempt_le32 || mix[3] || load_slots", + "op_mix": {"load": 16, "add": 13, "mulhi": 9, "shfl": 5, "sub": 5, "mad": 4, "rotl": 4, "xor": 3, "or": 2, "rotr": 2, "mul": 1}, + "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", + "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", + "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", + "output": "lo = r0 ^ rotl(r1,7) ^ rotl(r2,14) ^ rotl(r3,21); hi = r4 ^ rotl(r5,9) ^ rotl(r6,18) ^ rotl(r7,27); out = (hi << 32) | lo", + "op_semantics": { + "add": "dst = dst + src + (bit `bit` of sel ? imm2 : imm)", + "sub": "dst = dst - src", + "mul": "dst = dst * src (low 32)", + "mulhi": "dst = high 32 bits of dst * src", + "xor": "dst = dst ^ src", + "or": "dst = dst | src", + "rotl": "dst = rotl(dst, rot), rot in 1..31", + "rotr": "dst = rotr(dst, src & 31)", + "mad": "dst = src * src2 + dst", + "shfl": "dst = dst ^ (src of lane (lane ^ mask)), mask in {1,2,4,8,16}, within the 32-lane warp", + "load": "dst = dst ^ dataset[src & dataset.mask]", + "wload": "base = (src of lane 0 & dataset.mask) & ~31; dst = dst ^ dataset[base + lane] (warp-coalesced 128-byte load, lever b, only when --wide-frac > 0)" + }, + "dataset": { + "log2_words": 28, + "bytes": 1073741824, + "mask": "0x0fffffff", + "day": "bytes:69676e65756d2d6461792ffa50000000000000", + "day_bytes": "69676e65756d2d6461792ffa50000000000000", + "day_words_from": "seed_words_from_bytes(day_bytes)", + "d0": "0xceed56d7", + "d1": "0x9ba270d2", + "mode": "memory-hard", + "spec": "proto-metal/MEMHARD.md", + "key": ["0xceed56d7", "0x9ba270d2", "0x82caab2d", "0x81ebce0e", "0x12b6ecf1", "0xd0f3fd7c", "0xd872eefe", "0xc158c7bd"], + "key_derivation": "the 8 words of seed_words_from_bytes(day_bytes); d0, d1 are key[0], key[1]", + "cache": {"log2_words": 26, "bytes": 268435456, "line_words": 16, "segment_lines": 64, "segments": 65536, "block": "ChaCha12 core + feed-forward, rotations 16 12 8 7", "sigma": ["0x61707865", "0x3320646e", "0x79622d32", "0x6b206574"], "tag": ["0x49676e65", "0x756d4d48"], "chain": "in_j = prev_line ^ (sigma[0..3] || key[0..7] || seg || j || tag[0..1]); line_j = block(in_j); prev_0 = 0"}, + "mixer": {"draw": "SplitMix64 seeded with key[0] | key[1] << 32: rot[0..7] = 1 + next() % 31, mul[0..15] = low32(next()) | 1, rc[0..15] = low32(next())", "rot": [17, 12, 20, 23, 7, 3, 27, 16], "mul": ["0xf351d601", "0xa3bb398f", "0xb5a09e35", "0x7509c9c1", "0x6bbf31e9", "0xfc849a79", "0xded91851", "0x8d9113d1", "0x0ff15225", "0x3a5bdd41", "0xab533435", "0xe1c55ad5", "0xe6d3bd0d", "0x9d9ffbbd", "0xbb2a3cf3", "0x50a7c08d"], "rc": ["0xc6892460", "0x25b7228a", "0xcd515004", "0x2846527a", "0xa6324241", "0x36e3ec53", "0x82961bac", "0x0f97ba7d", "0xb6f921a9", "0x3ada24e5", "0xde20ab91", "0x5378eeb2", "0x7d161662", "0x89353cc1", "0xb1aa03a2", "0x788acae6"], "round": "for i in 0..15: s[i] = (s[i] ^ (rc[i] + (r+1) * 0x9E3779B9)) * mul[i]; then quarter rounds on columns (0,4,8,12) (1,5,9,13) (2,6,10,14) (3,7,11,15) with rot[0..3] and diagonals (0,5,10,15) (1,6,11,12) (2,7,8,13) (3,4,9,14) with rot[4..7]", "quarter_round": "a += b; d ^= a; d = rotl(d, r1); c += d; b ^= c; b = rotl(b, r2); a += b; d ^= a; d = rotl(d, r3); c += d; b ^= c; b = rotl(b, r4)"}, + "derive_len": 736, + "derive_attempt": 0, + "derive_fingerprint": "0x771868df4e64d6ab", + "derive_op_mix": "add=944 sub=641 xor=955 mul=636 rot=666 xrot=690 addc=381 xorc=393 mulc=565 mulc2=274 andx=243 orx=236", + "derive_instrs_per_item": 6624, + "derive_gpu_ops_per_item": 10708, + "derive_chip_ops_per_item": 10072, + "derive_muls_per_item": 1475, + "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: s = P_r(s); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then s = P_8(s); item(t) = s; P_r is round program r below (c = the register the previous instruction wrote, s[0] first): add d += c; sub d -= c; xor d ^= c; mul d *= (c | 1); rot d = rotl(d, k) + c; xrot d = rotl(d ^ c, k); addc d += c + imm; xorc d ^= c ^ imm; mulc d = (d ^ c) * imm; mulc2 d = d * imm + c; andx d ^= (c & b); orx d += (c | b)", + "programs": [ + ["xrot d=3 c=0 k=13", "rot d=1 c=3 k=23", "mul d=15 c=1", "xor d=7 c=15", "sub d=12 c=7", "mul d=9 c=12", "mulc d=6 c=9 imm=0x2735a435", "rot d=14 c=6 k=17", "xor d=1 c=14", "mulc d=8 c=1 imm=0x14ddb139", "addc d=1 c=8 imm=0xca6e0e1c", "mul d=6 c=1", "xor d=15 c=6", "xor d=12 c=15", "mulc2 d=11 c=12 imm=0x722d4b13", "rot d=4 c=11 k=18", "add d=2 c=4", "mul d=5 c=2", "add d=1 c=5", "sub d=9 c=1", "mul d=12 c=9", "addc d=14 c=12 imm=0x0ffea53b", "rot d=8 c=14 k=5", "addc d=3 c=8 imm=0x9ed7985e", "add d=6 c=3", "xorc d=4 c=6 imm=0x1dd74ad9", "add d=13 c=4", "sub d=0 c=13", "mul d=15 c=0", "xor d=12 c=15", "sub d=11 c=12", "rot d=14 c=11 k=27", "add d=6 c=14", "addc d=10 c=6 imm=0x2b37904e", "rot d=8 c=10 k=4", "mul d=5 c=8", "xrot d=0 c=5 k=14", "xor d=13 c=0", "mulc2 d=12 c=13 imm=0x77e0a5d3", "add d=1 c=12", "mulc2 d=13 c=1 imm=0x65318e55", "rot d=15 c=13 k=29", "sub d=13 c=15", "mulc2 d=12 c=13 imm=0xc4a25397", "xor d=0 c=12", "add d=11 c=0", "mulc d=5 c=11 imm=0xeeadd5a3", "mulc d=15 c=5 imm=0x731c68a3", "orx d=0 c=15 b=8", "mulc2 d=4 c=0 imm=0x51fb9437", "mul d=10 c=4", "mul d=12 c=10", "andx d=0 c=12 b=8", "xor d=4 c=0", "xorc d=0 c=4 imm=0x5eeca4fb", "xrot d=14 c=0 k=16", "mul d=1 c=14", "mul d=3 c=1", "xorc d=12 c=3 imm=0x705ffae7", "xorc d=11 c=12 imm=0x55f159af", "mulc d=10 c=11 imm=0x631a1b7f", "rot d=11 c=10 k=17", "add d=7 c=11", "rot d=9 c=7 k=27", "andx d=12 c=9 b=15", "rot d=8 c=12 k=22", "xor d=9 c=8", "andx d=12 c=9 b=5", "add d=7 c=12", "rot d=10 c=7 k=14", "orx d=15 c=10 b=0", "xor d=4 c=15", "xor d=5 c=4", "rot d=11 c=5 k=16", "xor d=14 c=11", "rot d=1 c=14 k=3", "mul d=11 c=1", "mul d=9 c=11", "xrot d=3 c=9 k=2", "rot d=12 c=3 k=11", "xor d=4 c=12", "mul d=12 c=4", "add d=14 c=12", "rot d=8 c=14 k=14", "xrot d=9 c=8 k=14", "add d=12 c=9", "rot d=13 c=12 k=6", "xor d=10 c=13", "xrot d=12 c=10 k=11", "xor d=13 c=12", "add d=2 c=13", "xor d=10 c=2", "addc d=15 c=10 imm=0x1634a71e", "xorc d=6 c=15 imm=0xd749a601", "mulc d=15 c=6 imm=0x600e3ecb", "add d=12 c=15", "mulc2 d=7 c=12 imm=0x0149e3eb", "add d=15 c=7", "add d=10 c=15", "mulc d=13 c=10 imm=0xa7c503e7", "xrot d=3 c=13 k=5", "add d=13 c=3", "andx d=14 c=13 b=11", "mul d=13 c=14", "xor d=8 c=13", "orx d=9 c=8 b=5", "xrot d=12 c=9 k=29", "xorc d=15 c=12 imm=0x990f53b6", "rot d=5 c=15 k=30", "sub d=3 c=5", "add d=11 c=3", "add d=0 c=11", "mul d=10 c=0", "mul d=2 c=10", "xor d=12 c=2", "mul d=13 c=12", "add d=2 c=13", "xrot d=4 c=2 k=19", "xorc d=1 c=4 imm=0xcd3069e4", "xrot d=0 c=1 k=3", "xorc d=15 c=0 imm=0x8c69c78d", "rot d=10 c=15 k=21", "add d=2 c=10", "xrot d=4 c=2 k=31", "rot d=11 c=4 k=22", "add d=5 c=11", "andx d=13 c=5 b=8", "mulc d=12 c=13 imm=0x831edbe1", "rot d=0 c=12 k=24", "xor d=11 c=0", "sub d=9 c=11", "xor d=7 c=9", "mulc d=8 c=7 imm=0xc7e1cfdd", "xor d=12 c=8", "xrot d=7 c=12 k=28", "xrot d=3 c=7 k=3", "add d=2 c=3", "add d=9 c=2", "rot d=10 c=9 k=21", "rot d=13 c=10 k=14", "mul d=15 c=13", "xrot d=7 c=15 k=1", "mul d=11 c=7", "orx d=9 c=11 b=5", "add d=15 c=9", "addc d=10 c=15 imm=0xba60c9ec", "mulc d=9 c=10 imm=0xd025f22d", "mul d=6 c=9", "mul d=0 c=6", "sub d=15 c=0", "add d=10 c=15", "addc d=0 c=10 imm=0xfb2e7c45", "add d=6 c=0", "mulc2 d=10 c=6 imm=0xa719d3b5", "sub d=3 c=10", "mulc2 d=10 c=3 imm=0x4567f515", "xrot d=6 c=10 k=3", "xor d=15 c=6", "mul d=5 c=15", "addc d=9 c=5 imm=0x7add03ed", "addc d=8 c=9 imm=0x200dba17", "add d=15 c=8", "add d=10 c=15", "sub d=0 c=10", "andx d=8 c=0 b=14", "mul d=14 c=8", "orx d=7 c=14 b=4", "xorc d=10 c=7 imm=0xfd92bbde", "addc d=6 c=10 imm=0xdfa6bf99", "add d=15 c=6", "sub d=0 c=15", "mul d=13 c=0", "add d=10 c=13", "rot d=14 c=10 k=30", "xrot d=7 c=14 k=26", "xrot d=4 c=7 k=28", "xrot d=1 c=4 k=5", "xor d=4 c=1", "xorc d=8 c=4 imm=0x246709cf", "add d=4 c=8", "add d=1 c=4", "orx d=0 c=1 b=3", "mul d=13 c=0", "sub d=3 c=13", "orx d=6 c=3 b=8", "rot d=10 c=6 k=30", "add d=14 c=10", "sub d=10 c=14", "andx d=11 c=10 b=2", "xor d=13 c=11", "orx d=9 c=13 b=15", "add d=4 c=9", "add d=3 c=4", "sub d=14 c=3", "add d=4 c=14", "rot d=7 c=4 k=17", "add d=8 c=7", "rot d=3 c=8 k=24", "xorc d=7 c=3 imm=0x139d83e8", "add d=6 c=7", "xrot d=4 c=6 k=28", "xrot d=14 c=4 k=17", "rot d=13 c=14 k=22", "add d=8 c=13", "xor d=0 c=8", "xor d=8 c=0", "mulc d=7 c=8 imm=0x7d8b96a1", "sub d=11 c=7", "mul d=7 c=11", "addc d=13 c=7 imm=0x3dfedaad", "mulc d=6 c=13 imm=0x02bf39b1", "xor d=15 c=6", "add d=10 c=15", "rot d=4 c=10 k=24", "mulc2 d=6 c=4 imm=0xa211b535", "addc d=9 c=6 imm=0x6d1c8ec2", "xor d=14 c=9", "andx d=1 c=14 b=8", "mul d=9 c=1", "mul d=11 c=9", "xrot d=6 c=11 k=9", "mul d=14 c=6", "sub d=5 c=14", "mul d=3 c=5", "add d=8 c=3", "add d=15 c=8", "addc d=13 c=15 imm=0x4f61883f", "xrot d=15 c=13 k=17", "orx d=0 c=15 b=11", "add d=15 c=0", "sub d=2 c=15", "sub d=8 c=2", "mul d=5 c=8", "mulc d=1 c=5 imm=0x65420b47", "mulc2 d=12 c=1 imm=0x42ad8bf1", "orx d=15 c=12 b=2", "add d=11 c=15", "mulc d=7 c=11 imm=0x24e3746b", "xor d=1 c=7", "rot d=7 c=1 k=31", "andx d=0 c=7 b=1", "xorc d=15 c=0 imm=0x47313c44", "add d=1 c=15", "xor d=11 c=1", "rot d=12 c=11 k=18", "add d=9 c=12", "sub d=2 c=9", "mulc d=1 c=2 imm=0x9c164e0d", "add d=10 c=1", "xor d=0 c=10", "xor d=6 c=0", "add d=1 c=6", "xrot d=15 c=1 k=4", "sub d=14 c=15", "xor d=7 c=14", "xorc d=8 c=7 imm=0x2b5aacd6", "add d=13 c=8", "mul d=6 c=13", "rot d=1 c=6 k=9", "orx d=12 c=1 b=7", "xor d=8 c=12", "orx d=9 c=8 b=11", "addc d=14 c=9 imm=0x93a636aa", "sub d=13 c=14", "mulc d=0 c=13 imm=0x0185d1f9", "xor d=11 c=0", "xor d=3 c=11", "xor d=9 c=3", "mul d=12 c=9", "add d=4 c=12", "xrot d=14 c=4 k=12", "add d=15 c=14", "xrot d=0 c=15 k=11", "sub d=5 c=0", "sub d=9 c=5", "rot d=5 c=9 k=17", "sub d=13 c=5", "orx d=2 c=13 b=6", "mul d=12 c=2", "rot d=5 c=12 k=14", "mulc2 d=14 c=5 imm=0x37190e5f", "sub d=2 c=14", "rot d=1 c=2 k=25", "add d=15 c=1", "xrot d=3 c=15 k=7", "rot d=7 c=3 k=15", "xrot d=9 c=7 k=13", "mul d=5 c=9", "sub d=6 c=5", "xorc d=14 c=6 imm=0xf476d15f", "xor d=13 c=14", "mul d=11 c=13", "add d=10 c=11", "xrot d=13 c=10 k=29", "rot d=4 c=13 k=1", "xor d=7 c=4", "mulc d=10 c=7 imm=0xa943fa7f", "xor d=12 c=10", "rot d=3 c=12 k=8", "mulc d=14 c=3 imm=0x09fb17fd", "rot d=7 c=14 k=16", "xor d=14 c=7", "xor d=7 c=14", "xrot d=8 c=7 k=14", "add d=11 c=8", "orx d=2 c=11 b=14", "mul d=15 c=2", "rot d=3 c=15 k=26", "mul d=2 c=3", "sub d=4 c=2", "orx d=3 c=4 b=14", "xor d=10 c=3", "sub d=0 c=10", "andx d=13 c=0 b=6", "mul d=0 c=13", "mul d=5 c=0", "rot d=9 c=5 k=12", "xor d=3 c=9", "andx d=15 c=3 b=1", "mulc2 d=8 c=15 imm=0x98abbf3d", "mul d=12 c=8", "mulc d=4 c=12 imm=0x50468ceb", "xrot d=1 c=4 k=1", "xor d=11 c=1", "xrot d=15 c=11 k=9", "rot d=13 c=15 k=28", "add d=7 c=13", "rot d=14 c=7 k=20", "mulc d=11 c=14 imm=0x5091caad", "xorc d=7 c=11 imm=0x269d33e2", "xor d=14 c=7", "mulc2 d=5 c=14 imm=0x30d291ed", "xor d=9 c=5", "add d=10 c=9", "xor d=0 c=10", "mul d=7 c=0", "xor d=14 c=7", "sub d=2 c=14", "add d=13 c=2", "add d=8 c=13", "andx d=12 c=8 b=0", "rot d=7 c=12 k=8", "mulc d=0 c=7 imm=0x1cae2a31", "rot d=6 c=0 k=29", "xorc d=10 c=6 imm=0xb9ccdbfd", "xor d=9 c=10", "mul d=10 c=9", "mul d=1 c=10", "andx d=8 c=1 b=4", "xorc d=4 c=8 imm=0x53da0b8a", "mul d=15 c=4", "sub d=13 c=15", "orx d=1 c=13 b=0", "orx d=6 c=1 b=4", "xor d=4 c=6", "xrot d=1 c=4 k=26", "sub d=6 c=1", "orx d=5 c=6 b=12", "xor d=12 c=5", "mulc d=15 c=12 imm=0x458c7163", "sub d=13 c=15", "xrot d=6 c=13 k=20", "mulc d=2 c=6 imm=0x9c39a383", "add d=0 c=2", "xorc d=12 c=0 imm=0x7cc2033a", "xrot d=13 c=12 k=12", "rot d=6 c=13 k=4", "mulc d=15 c=6 imm=0x0c9eb2cf", "mul d=8 c=15", "add d=2 c=8", "rot d=5 c=2 k=19", "mul d=8 c=5", "add d=0 c=8", "mulc2 d=6 c=0 imm=0x79f7c2df", "add d=14 c=6", "mulc2 d=11 c=14 imm=0x5e817e5b", "xor d=14 c=11", "xor d=4 c=14", "addc d=9 c=4 imm=0xd46a416f", "mulc2 d=14 c=9 imm=0xa4a2923f", "mul d=7 c=14", "mulc d=4 c=7 imm=0x90bc8fcd", "add d=14 c=4", "mulc d=7 c=14 imm=0xf112f8f5", "mul d=0 c=7", "sub d=12 c=0", "xor d=3 c=12", "xor d=9 c=3", "mulc d=5 c=9 imm=0x24022a1d", "rot d=13 c=5 k=25", "mul d=1 c=13", "add d=10 c=1", "mulc d=12 c=10 imm=0xa16c00d1", "sub d=6 c=12", "xor d=7 c=6", "xorc d=10 c=7 imm=0x58615cc4", "add d=4 c=10", "mul d=3 c=4", "xor d=6 c=3", "xor d=4 c=6", "add d=0 c=4", "xor d=3 c=0", "rot d=1 c=3 k=20", "xorc d=13 c=1 imm=0x244eb2e2", "xorc d=0 c=13 imm=0x2273d5c0", "xor d=15 c=0", "sub d=13 c=15", "xorc d=2 c=13 imm=0x7c995a78", "sub d=4 c=2", "xor d=14 c=4", "rot d=0 c=14 k=29", "xrot d=14 c=0 k=1", "orx d=2 c=14 b=1", "orx d=10 c=2 b=12", "xor d=12 c=10", "mul d=6 c=12", "rot d=9 c=6 k=30", "xor d=12 c=9", "sub d=14 c=12", "add d=11 c=14", "orx d=10 c=11 b=6", "orx d=2 c=10 b=5", "xrot d=1 c=2 k=29", "mulc2 d=6 c=1 imm=0xd99bd00b", "mulc d=1 c=6 imm=0xe0d965a7", "addc d=7 c=1 imm=0x51b2428b", "xorc d=15 c=7 imm=0x50b8787b", "addc d=0 c=15 imm=0xfe2752f1", "addc d=4 c=0 imm=0x0e368287", "add d=1 c=4", "xorc d=6 c=1 imm=0xe35b392e", "rot d=2 c=6 k=23", "xor d=9 c=2", "mulc2 d=15 c=9 imm=0xd6a40fab", "sub d=5 c=15", "add d=2 c=5", "xrot d=6 c=2 k=8", "mul d=5 c=6", "xrot d=13 c=5 k=20", "addc d=4 c=13 imm=0x53640c05", "xrot d=0 c=4 k=7", "xor d=13 c=0", "mul d=9 c=13", "xor d=0 c=9", "mulc2 d=10 c=0 imm=0x843679c9", "xrot d=6 c=10 k=29", "xrot d=14 c=6 k=12", "add d=1 c=14", "mulc2 d=13 c=1 imm=0xa749a1b5", "rot d=12 c=13 k=19", "mulc d=2 c=12 imm=0x5b1ce1c1", "mul d=15 c=2", "andx d=12 c=15 b=9", "xrot d=0 c=12 k=25", "xor d=14 c=0", "mul d=3 c=14", "xorc d=8 c=3 imm=0x6ca032cb", "sub d=4 c=8", "xorc d=12 c=4 imm=0x7728b3cb", "orx d=7 c=12 b=8", "mulc2 d=5 c=7 imm=0x0ae2c6cd", "add d=0 c=5", "rot d=9 c=0 k=24", "sub d=1 c=9", "xorc d=11 c=1 imm=0xf5da2550", "mul d=3 c=11", "sub d=8 c=3", "addc d=3 c=8 imm=0xa4fe9e4b", "mul d=14 c=3", "mulc d=6 c=14 imm=0xbd9356a9", "xrot d=12 c=6 k=7", "mulc d=7 c=12 imm=0x875f73bf", "sub d=1 c=7", "mulc d=14 c=1 imm=0x1e7b97f7", "mulc2 d=6 c=14 imm=0x577deadd", "xor d=13 c=6", "mul d=4 c=13", "xor d=3 c=4", "xorc d=15 c=3 imm=0x28e94074", "mulc d=0 c=15 imm=0x6b8272cd", "mul d=8 c=0", "xor d=3 c=8", "mulc2 d=0 c=3 imm=0x0b665f15", "sub d=7 c=0", "rot d=14 c=7 k=3", "add d=4 c=14", "rot d=12 c=4 k=23", "rot d=15 c=12 k=31", "add d=8 c=15", "xrot d=4 c=8 k=17", "orx d=1 c=4 b=8", "add d=5 c=1", "add d=9 c=5", "add d=12 c=9", "rot d=1 c=12 k=13", "mul d=2 c=1", "sub d=4 c=2", "rot d=11 c=4 k=31", "rot d=2 c=11 k=2", "addc d=7 c=2 imm=0x9a35b39a", "orx d=6 c=7 b=13", "mul d=0 c=6", "orx d=9 c=0 b=8", "rot d=14 c=9 k=25", "rot d=15 c=14 k=4", "xor d=6 c=15", "xor d=12 c=6", "addc d=10 c=12 imm=0x5cb2267a", "add d=1 c=10", "xor d=15 c=1", "xrot d=13 c=15 k=28", "rot d=6 c=13 k=19", "addc d=3 c=6 imm=0xd7c31b8d", "mulc2 d=14 c=3 imm=0x3b0ab799", "addc d=4 c=14 imm=0x3536b1f6", "sub d=2 c=4", "orx d=12 c=2 b=11", "xorc d=11 c=12 imm=0xbf42c333", "mulc d=3 c=11 imm=0xde9b7ca9", "rot d=5 c=3 k=24", "xrot d=3 c=5 k=29", "xrot d=15 c=3 k=4", "xor d=5 c=15", "andx d=14 c=5 b=6", "orx d=8 c=14 b=0", "rot d=12 c=8 k=17", "xor d=1 c=12", "xrot d=10 c=1 k=26", "rot d=13 c=10 k=15", "add d=10 c=13", "sub d=12 c=10", "xorc d=4 c=12 imm=0xc9739849", "xorc d=2 c=4 imm=0x31699b20", "add d=12 c=2", "add d=15 c=12", "xrot d=9 c=15 k=3", "sub d=11 c=9", "xrot d=0 c=11 k=6", "andx d=12 c=0 b=7", "xorc d=14 c=12 imm=0x9419731f", "mulc d=7 c=14 imm=0x394edfa7", "xrot d=11 c=7 k=8", "add d=13 c=11", "mulc d=14 c=13 imm=0xd8bdcc5b", "add d=8 c=14", "xorc d=1 c=8 imm=0x7c3166e1", "xor d=9 c=1", "mul d=2 c=9", "rot d=3 c=2 k=25", "add d=5 c=3", "mulc d=8 c=5 imm=0x40545eed", "xor d=7 c=8", "mulc d=4 c=7 imm=0x968dc0c3", "mul d=15 c=4", "add d=1 c=15", "rot d=10 c=1 k=20", "andx d=1 c=10 b=5", "sub d=5 c=1", "rot d=9 c=5 k=22", "sub d=12 c=9", "mulc2 d=5 c=12 imm=0x2fa421c3", "addc d=0 c=5 imm=0xd84eb599", "xor d=14 c=0", "addc d=12 c=14 imm=0x9fa50493", "mulc d=3 c=12 imm=0x4d23b04d", "mulc2 d=10 c=3 imm=0x78de01f5", "mul d=0 c=10", "add d=3 c=0", "xorc d=1 c=3 imm=0x3cb60603", "xrot d=12 c=1 k=19", "andx d=10 c=12 b=1", "mul d=2 c=10", "add d=8 c=2", "sub d=13 c=8", "mul d=2 c=13", "mul d=4 c=2", "rot d=7 c=4 k=7", "sub d=15 c=7", "mul d=12 c=15", "xor d=1 c=12", "sub d=5 c=1", "addc d=14 c=5 imm=0x36981c70", "xorc d=4 c=14 imm=0x71a79181", "add d=6 c=4", "xor d=8 c=6", "xor d=7 c=8", "xor d=14 c=7", "mulc d=7 c=14 imm=0x097a3803", "mul d=4 c=7", "andx d=11 c=4 b=10", "add d=4 c=11", "mulc d=7 c=4 imm=0x85738709", "xrot d=3 c=7 k=11", "rot d=10 c=3 k=10", "orx d=2 c=10 b=9", "mulc d=10 c=2 imm=0x94c5048b", "add d=15 c=10", "addc d=8 c=15 imm=0x0b5cc6ef", "rot d=5 c=8 k=20", "xrot d=14 c=5 k=25", "xorc d=3 c=14 imm=0x111815f3", "add d=8 c=3", "xor d=7 c=8", "xorc d=11 c=7 imm=0x4e2582d7", "orx d=9 c=11 b=8", "xor d=14 c=9", "sub d=7 c=14", "rot d=8 c=7 k=9", "mulc d=4 c=8 imm=0xaac84b51", "xor d=15 c=4", "xrot d=1 c=15 k=3", "rot d=7 c=1 k=7", "mul d=0 c=7", "rot d=2 c=0 k=23", "addc d=11 c=2 imm=0x98edfcf5", "add d=6 c=11", "mulc d=2 c=6 imm=0xa136e64d", "mul d=12 c=2", "mulc d=8 c=12 imm=0xce39a005", "add d=3 c=8", "xor d=7 c=3", "xrot d=2 c=7 k=6", "xrot d=10 c=2 k=19", "sub d=7 c=10", "add d=0 c=7", "mulc d=7 c=0 imm=0xcb29f5cb", "mul d=4 c=7", "addc d=12 c=4 imm=0x4a2ccb18", "xrot d=8 c=12 k=28", "mul d=2 c=8", "mul d=13 c=2", "mulc d=3 c=13 imm=0x8e193255", "add d=10 c=3", "add d=8 c=10", "andx d=14 c=8 b=6", "xor d=12 c=14", "mulc d=9 c=12 imm=0x5b862b41", "add d=1 c=9", "xorc d=10 c=1 imm=0xa652e937", "rot d=0 c=10 k=21", "rot d=12 c=0 k=10", "mulc d=14 c=12 imm=0x301b4ff9", "mulc2 d=13 c=14 imm=0x12fb71b3", "xrot d=6 c=13 k=2", "sub d=12 c=6", "xor d=0 c=12", "rot d=11 c=0 k=9", "xrot d=9 c=11 k=17", "xor d=12 c=9", "xrot d=14 c=12 k=9", "add d=2 c=14", "xor d=4 c=2", "sub d=15 c=4", "sub d=11 c=15", "mulc2 d=0 c=11 imm=0x9ae119bf", "xor d=14 c=0", "xrot d=8 c=14 k=15", "mul d=7 c=8", "sub d=10 c=7", "sub d=5 c=10", "addc d=2 c=5 imm=0xbb07e4b1", "xor d=8 c=2", "add d=9 c=8", "xor d=5 c=9", "mulc d=1 c=5 imm=0x350b4999", "add d=4 c=1", "xrot d=9 c=4 k=27", "mulc d=6 c=9 imm=0x367cc161", "sub d=9 c=6", "xor d=4 c=9", "xor d=0 c=4", "xorc d=8 c=0 imm=0x75d9afc5", "xrot d=14 c=8 k=10", "addc d=7 c=14 imm=0x1912ec89", "orx d=10 c=7 b=4", "sub d=0 c=10", "add d=3 c=0", "sub d=6 c=3", "mulc d=12 c=6 imm=0x4c6c192d", "orx d=13 c=12 b=5", "xrot d=3 c=13 k=25", "rot d=13 c=3 k=22", "add d=0 c=13", "sub d=12 c=0", "andx d=10 c=12 b=3", "add d=6 c=10", "xrot d=2 c=6 k=19", "sub d=6 c=2", "add d=9 c=6", "mulc2 d=10 c=9 imm=0x6d659893", "xor d=11 c=10", "mulc d=9 c=11 imm=0x63085b93", "xorc d=4 c=9 imm=0xfa7139db", "xrot d=11 c=4 k=31", "sub d=4 c=11", "add d=10 c=4", "add d=14 c=10", "mulc2 d=9 c=14 imm=0x3564c517", "xor d=13 c=9", "add d=4 c=13", "add d=7 c=4", "xrot d=13 c=7 k=5", "xor d=6 c=13", "xor d=7 c=6", "xrot d=8 c=7 k=25", "sub d=4 c=8", "mul d=0 c=4", "mul d=4 c=0", "add d=8 c=4", "mul d=2 c=8", "addc d=6 c=2 imm=0xbfdaf7b1", "xor d=9 c=6", "mulc d=1 c=9 imm=0x3c5c1b5b", "sub d=6 c=1", "rot d=4 c=6 k=11", "mul d=3 c=4", "rot d=0 c=3 k=18", "rot d=8 c=0 k=19", "mulc d=12 c=8 imm=0x25e88231", "sub d=0 c=12", "andx d=4 c=0 b=2", "andx d=9 c=4 b=6", "mulc d=5 c=9 imm=0x3c0d5df5", "add d=6 c=5", "sub d=2 c=6", "xor d=12 c=2", "addc d=1 c=12 imm=0x4dc4b094", "xor d=10 c=1", "add d=6 c=10", "addc d=7 c=6 imm=0x43a99a33", "mulc2 d=6 c=7 imm=0xdee0e37f", "mulc d=12 c=6 imm=0xc8a25e85", "orx d=1 c=12 b=3", "xor d=12 c=1", "add d=15 c=12", "xrot d=4 c=15 k=17"], + ["add d=1 c=0", "addc d=3 c=1 imm=0xad481039", "orx d=11 c=3 b=2", "andx d=1 c=11 b=12", "sub d=14 c=1", "addc d=10 c=14 imm=0x55885317", "sub d=4 c=10", "xrot d=15 c=4 k=4", "add d=6 c=15", "xrot d=13 c=6 k=20", "mulc d=11 c=13 imm=0xff0504ad", "mulc d=1 c=11 imm=0x250dc94b", "add d=15 c=1", "mul d=12 c=15", "add d=7 c=12", "xor d=8 c=7", "andx d=11 c=8 b=7", "mulc d=4 c=11 imm=0xcdf53d85", "mulc d=10 c=4 imm=0xee957d9f", "mulc d=9 c=10 imm=0x306403a5", "sub d=7 c=9", "xor d=12 c=7", "mul d=15 c=12", "sub d=2 c=15", "mul d=11 c=2", "xrot d=8 c=11 k=29", "addc d=11 c=8 imm=0x053c715d", "mulc d=0 c=11 imm=0x6e7f6f63", "xrot d=5 c=0 k=4", "mulc d=8 c=5 imm=0xec01af93", "mulc2 d=13 c=8 imm=0x0c236ed3", "mul d=3 c=13", "andx d=9 c=3 b=7", "xor d=5 c=9", "add d=12 c=5", "add d=6 c=12", "sub d=3 c=6", "mul d=13 c=3", "andx d=12 c=13 b=15", "xrot d=3 c=12 k=11", "xrot d=0 c=3 k=22", "addc d=9 c=0 imm=0x6379358c", "xor d=8 c=9", "mul d=2 c=8", "rot d=9 c=2 k=1", "addc d=4 c=9 imm=0xc0eff105", "xor d=10 c=4", "mul d=3 c=10", "add d=11 c=3", "sub d=9 c=11", "add d=7 c=9", "sub d=9 c=7", "mulc d=8 c=9 imm=0x820df9e3", "mulc d=2 c=8 imm=0xe294988d", "xrot d=7 c=2 k=20", "add d=6 c=7", "xor d=15 c=6", "mul d=9 c=15", "xrot d=14 c=9 k=27", "sub d=4 c=14", "xorc d=10 c=4 imm=0xea83d71f", "xrot d=3 c=10 k=23", "add d=10 c=3", "mul d=8 c=10", "andx d=1 c=8 b=4", "mul d=2 c=1", "xrot d=14 c=2 k=13", "xor d=10 c=14", "add d=14 c=10", "sub d=9 c=14", "mulc d=11 c=9 imm=0xa98b9719", "xor d=3 c=11", "rot d=5 c=3 k=11", "mulc d=8 c=5 imm=0x390f56e7", "xrot d=10 c=8 k=7", "mul d=15 c=10", "rot d=1 c=15 k=26", "orx d=13 c=1 b=15", "xrot d=10 c=13 k=17", "sub d=1 c=10", "sub d=15 c=1", "orx d=4 c=15 b=7", "xor d=2 c=4", "xorc d=0 c=2 imm=0x6f973e2f", "xrot d=3 c=0 k=29", "mulc d=4 c=3 imm=0x0b66808f", "mul d=3 c=4", "rot d=15 c=3 k=12", "mul d=10 c=15", "mulc d=7 c=10 imm=0x748e238b", "xor d=14 c=7", "xrot d=5 c=14 k=21", "mul d=15 c=5", "xor d=8 c=15", "xorc d=7 c=8 imm=0x905950c7", "xor d=8 c=7", "addc d=2 c=8 imm=0x28a71f71", "orx d=9 c=2 b=6", "andx d=14 c=9 b=10", "xorc d=13 c=14 imm=0x4778ae11", "xrot d=0 c=13 k=30", "add d=15 c=0", "xor d=14 c=15", "xrot d=5 c=14 k=5", "sub d=2 c=5", "rot d=13 c=2 k=18", "sub d=10 c=13", "xor d=9 c=10", "xrot d=1 c=9 k=2", "xor d=6 c=1", "xrot d=2 c=6 k=30", "xorc d=3 c=2 imm=0x3ded9adb", "mulc2 d=10 c=3 imm=0x4a716aaf", "xor d=3 c=10", "xrot d=12 c=3 k=16", "add d=3 c=12", "xor d=4 c=3", "xor d=13 c=4", "xorc d=3 c=13 imm=0x244807b5", "mulc2 d=6 c=3 imm=0x3b67fdab", "rot d=14 c=6 k=19", "rot d=8 c=14 k=30", "addc d=4 c=8 imm=0x283e5272", "rot d=6 c=4 k=17", "andx d=4 c=6 b=15", "xrot d=11 c=4 k=10", "mulc2 d=9 c=11 imm=0x24d40dcb", "xrot d=15 c=9 k=22", "add d=3 c=15", "add d=12 c=3", "sub d=6 c=12", "xrot d=15 c=6 k=18", "xor d=10 c=15", "orx d=14 c=10 b=2", "add d=10 c=14", "mulc d=2 c=10 imm=0xbfbdab53", "add d=4 c=2", "addc d=8 c=4 imm=0x229e9450", "xor d=2 c=8", "xorc d=13 c=2 imm=0xd069b71a", "xor d=1 c=13", "rot d=14 c=1 k=5", "rot d=11 c=14 k=11", "xor d=2 c=11", "xorc d=1 c=2 imm=0x87a0df98", "xorc d=3 c=1 imm=0x4012f8c8", "xor d=10 c=3", "mul d=8 c=10", "orx d=3 c=8 b=1", "rot d=0 c=3 k=24", "addc d=10 c=0 imm=0x838435e8", "mulc d=3 c=10 imm=0xd8ccc2b9", "xorc d=7 c=3 imm=0xa58f06dd", "xor d=2 c=7", "add d=0 c=2", "xor d=12 c=0", "xor d=6 c=12", "add d=7 c=6", "xrot d=12 c=7 k=25", "xor d=4 c=12", "orx d=0 c=4 b=5", "mul d=11 c=0", "add d=13 c=11", "mulc d=15 c=13 imm=0x49c15b43", "rot d=10 c=15 k=25", "xrot d=14 c=10 k=11", "rot d=6 c=14 k=28", "mul d=5 c=6", "mul d=12 c=5", "mul d=3 c=12", "xor d=10 c=3", "xor d=15 c=10", "xor d=12 c=15", "andx d=6 c=12 b=7", "mul d=14 c=6", "xorc d=12 c=14 imm=0xf5bafba8", "xor d=15 c=12", "rot d=5 c=15 k=1", "xor d=9 c=5", "rot d=12 c=9 k=6", "xor d=10 c=12", "mulc d=3 c=10 imm=0x38f1a685", "mulc2 d=4 c=3 imm=0xcb7e5d23", "add d=5 c=4", "rot d=10 c=5 k=15", "mul d=2 c=10", "sub d=12 c=2", "xor d=7 c=12", "mul d=11 c=7", "mulc d=6 c=11 imm=0x72fff2bf", "rot d=9 c=6 k=9", "mul d=11 c=9", "xrot d=4 c=11 k=5", "mul d=15 c=4", "mulc d=13 c=15 imm=0x137c61d9", "add d=9 c=13", "orx d=12 c=9 b=8", "mulc d=7 c=12 imm=0x60952fdd", "xrot d=10 c=7 k=20", "xor d=4 c=10", "xor d=2 c=4", "xorc d=10 c=2 imm=0x1de54f3a", "xor d=14 c=10", "add d=0 c=14", "xorc d=12 c=0 imm=0x62facf82", "xor d=15 c=12", "rot d=12 c=15 k=13", "mulc2 d=14 c=12 imm=0xc82501bd", "sub d=0 c=14", "mulc2 d=11 c=0 imm=0x11744345", "mulc d=3 c=11 imm=0x9270eedf", "addc d=9 c=3 imm=0x36b61dc9", "addc d=15 c=9 imm=0x9d5947e1", "mulc2 d=8 c=15 imm=0x6f00fe17", "sub d=1 c=8", "mulc d=12 c=1 imm=0x51e09723", "add d=4 c=12", "rot d=6 c=4 k=23", "addc d=11 c=6 imm=0x8b5f9427", "mul d=7 c=11", "sub d=1 c=7", "mulc2 d=0 c=1 imm=0xab66ab6f", "mul d=13 c=0", "mul d=6 c=13", "orx d=9 c=6 b=4", "mulc d=10 c=9 imm=0x79592bfd", "add d=4 c=10", "mulc d=5 c=4 imm=0x8ba30269", "xrot d=3 c=5 k=17", "addc d=9 c=3 imm=0x044adf30", "xrot d=0 c=9 k=5", "andx d=14 c=0 b=13", "sub d=8 c=14", "mulc d=3 c=8 imm=0xb32093b1", "xrot d=1 c=3 k=18", "sub d=7 c=1", "mul d=2 c=7", "rot d=14 c=2 k=28", "xor d=3 c=14", "add d=14 c=3", "xor d=4 c=14", "rot d=12 c=4 k=16", "mulc d=15 c=12 imm=0x35a4d8cb", "orx d=14 c=15 b=5", "xrot d=10 c=14 k=4", "sub d=2 c=10", "xor d=3 c=2", "mulc d=11 c=3 imm=0x1006ee2f", "rot d=12 c=11 k=20", "mulc d=4 c=12 imm=0xca4aa4c3", "mul d=15 c=4", "andx d=4 c=15 b=3", "sub d=13 c=4", "addc d=10 c=13 imm=0xe5c86cb9", "xorc d=14 c=10 imm=0x5604f25d", "addc d=13 c=14 imm=0xe43d82cb", "xrot d=14 c=13 k=23", "sub d=4 c=14", "sub d=9 c=4", "add d=10 c=9", "add d=9 c=10", "mulc d=1 c=9 imm=0x1bd8783d", "sub d=2 c=1", "mulc d=0 c=2 imm=0x50dc547b", "xor d=3 c=0", "sub d=6 c=3", "add d=2 c=6", "mul d=14 c=2", "xor d=10 c=14", "sub d=3 c=10", "mul d=9 c=3", "xrot d=4 c=9 k=1", "add d=9 c=4", "xorc d=11 c=9 imm=0xcca1df60", "xor d=0 c=11", "xorc d=12 c=0 imm=0xfed45f11", "rot d=6 c=12 k=6", "rot d=13 c=6 k=15", "add d=12 c=13", "sub d=5 c=12", "mulc2 d=10 c=5 imm=0xe661ba67", "mulc d=6 c=10 imm=0x38950a4f", "mulc d=9 c=6 imm=0xd8e5439d", "mulc d=11 c=9 imm=0x5eb0f1a5", "addc d=15 c=11 imm=0x4b16aaa7", "add d=7 c=15", "xor d=9 c=7", "xorc d=8 c=9 imm=0x4e4132c7", "add d=6 c=8", "xor d=2 c=6", "sub d=13 c=2", "addc d=9 c=13 imm=0x45441a4f", "xrot d=10 c=9 k=26", "rot d=15 c=10 k=23", "xor d=14 c=15", "xor d=15 c=14", "mulc2 d=11 c=15 imm=0x530c5d95", "orx d=12 c=11 b=10", "mul d=15 c=12", "xrot d=12 c=15 k=28", "mulc2 d=9 c=12 imm=0x9d85d8ab", "rot d=1 c=9 k=23", "mulc d=5 c=1 imm=0xab9db7cd", "mulc d=4 c=5 imm=0xac76806d", "xorc d=7 c=4 imm=0xb250e43c", "add d=10 c=7", "rot d=3 c=10 k=15", "addc d=2 c=3 imm=0x56ffdd08", "andx d=10 c=2 b=15", "xrot d=13 c=10 k=10", "rot d=1 c=13 k=11", "sub d=3 c=1", "mulc d=13 c=3 imm=0x7f82e3cb", "rot d=11 c=13 k=16", "xrot d=10 c=11 k=8", "xrot d=15 c=10 k=8", "sub d=14 c=15", "xor d=5 c=14", "xorc d=2 c=5 imm=0x8be07a00", "mulc d=4 c=2 imm=0xf8afeb21", "xor d=14 c=4", "xrot d=2 c=14 k=1", "sub d=9 c=2", "rot d=11 c=9 k=23", "add d=2 c=11", "rot d=11 c=2 k=23", "rot d=0 c=11 k=5", "mul d=2 c=0", "rot d=3 c=2 k=17", "mulc2 d=5 c=3 imm=0x02194355", "mul d=11 c=5", "mul d=1 c=11", "xrot d=10 c=1 k=8", "xor d=8 c=10", "add d=9 c=8", "mul d=0 c=9", "rot d=1 c=0 k=19", "andx d=11 c=1 b=2", "mulc d=13 c=11 imm=0x6c9dbd19", "add d=11 c=13", "xor d=9 c=11", "xrot d=3 c=9 k=6", "mul d=15 c=3", "sub d=13 c=15", "add d=6 c=13", "xorc d=9 c=6 imm=0x792555d6", "rot d=3 c=9 k=3", "mul d=10 c=3", "mulc2 d=2 c=10 imm=0x903bff0d", "sub d=5 c=2", "xor d=11 c=5", "xrot d=9 c=11 k=31", "sub d=11 c=9", "xrot d=2 c=11 k=24", "xrot d=5 c=2 k=24", "add d=7 c=5", "xor d=13 c=7", "sub d=12 c=13", "orx d=5 c=12 b=0", "addc d=8 c=5 imm=0xaab979aa", "xor d=1 c=8", "addc d=13 c=1 imm=0xe5e6fc71", "xrot d=6 c=13 k=15", "add d=1 c=6", "add d=2 c=1", "orx d=9 c=2 b=11", "xor d=10 c=9", "mulc2 d=7 c=10 imm=0x2f536f71", "add d=5 c=7", "xrot d=0 c=5 k=5", "sub d=13 c=0", "add d=9 c=13", "xrot d=10 c=9 k=22", "andx d=12 c=10 b=13", "addc d=6 c=12 imm=0x70c39328", "addc d=2 c=6 imm=0x90a3925d", "add d=10 c=2", "mul d=12 c=10", "sub d=9 c=12", "rot d=10 c=9 k=16", "sub d=9 c=10", "andx d=8 c=9 b=15", "xor d=4 c=8", "xor d=1 c=4", "mulc d=3 c=1 imm=0xc8cf6af9", "xor d=12 c=3", "mul d=15 c=12", "mulc d=1 c=15 imm=0x19cdfb9d", "mulc2 d=6 c=1 imm=0x199cfd21", "xor d=9 c=6", "mul d=12 c=9", "addc d=14 c=12 imm=0x2e1b9e84", "rot d=11 c=14 k=4", "xrot d=14 c=11 k=22", "rot d=8 c=14 k=30", "xor d=4 c=8", "xor d=5 c=4", "xor d=11 c=5", "xrot d=8 c=11 k=13", "addc d=10 c=8 imm=0x50912ebd", "mulc d=14 c=10 imm=0x0ba09b01", "xor d=6 c=14", "xor d=7 c=6", "orx d=13 c=7 b=14", "sub d=14 c=13", "xorc d=1 c=14 imm=0x4ada39c6", "xor d=10 c=1", "andx d=2 c=10 b=9", "addc d=12 c=2 imm=0x909c30c1", "add d=9 c=12", "xor d=0 c=9", "sub d=4 c=0", "xor d=7 c=4", "mulc d=4 c=7 imm=0xf96f3573", "addc d=3 c=4 imm=0x9c417efd", "orx d=13 c=3 b=5", "add d=4 c=13", "xor d=6 c=4", "addc d=14 c=6 imm=0xb0989acb", "sub d=15 c=14", "add d=2 c=15", "add d=6 c=2", "xor d=2 c=6", "mulc2 d=15 c=2 imm=0x1e3b63f3", "xor d=7 c=15", "addc d=3 c=7 imm=0xbaedebab", "orx d=9 c=3 b=5", "mul d=10 c=9", "add d=9 c=10", "xor d=11 c=9", "mul d=2 c=11", "xor d=7 c=2", "add d=1 c=7", "mulc d=2 c=1 imm=0x358e9d21", "addc d=7 c=2 imm=0xa87c4bbf", "xrot d=5 c=7 k=9", "addc d=7 c=5 imm=0x32cba03c", "add d=12 c=7", "xorc d=3 c=12 imm=0x8eca1054", "mulc d=8 c=3 imm=0xb2f6c0e3", "mulc d=4 c=8 imm=0x13f1ccd5", "mulc d=3 c=4 imm=0x73023bad", "sub d=15 c=3", "mul d=3 c=15", "sub d=15 c=3", "xor d=12 c=15", "xrot d=10 c=12 k=19", "add d=4 c=10", "xor d=11 c=4", "addc d=15 c=11 imm=0x1b7c0167", "andx d=13 c=15 b=12", "xrot d=10 c=13 k=27", "sub d=11 c=10", "addc d=6 c=11 imm=0xf9ac3792", "mulc d=4 c=6 imm=0x52e3447b", "mulc2 d=1 c=4 imm=0xbe66f197", "rot d=9 c=1 k=3", "xrot d=1 c=9 k=21", "add d=11 c=1", "xor d=14 c=11", "sub d=6 c=14", "sub d=1 c=6", "xor d=7 c=1", "xorc d=3 c=7 imm=0xf278acc2", "xor d=1 c=3", "xrot d=0 c=1 k=6", "add d=3 c=0", "addc d=2 c=3 imm=0xe2de919d", "xorc d=12 c=2 imm=0x988db119", "add d=9 c=12", "xrot d=13 c=9 k=5", "mulc d=4 c=13 imm=0x5d32587f", "add d=7 c=4", "xor d=15 c=7", "add d=0 c=15", "mulc d=9 c=0 imm=0x2861edb3", "mulc2 d=5 c=9 imm=0x4f38626d", "xrot d=8 c=5 k=11", "xor d=0 c=8", "xrot d=2 c=0 k=6", "add d=9 c=2", "rot d=2 c=9 k=8", "sub d=12 c=2", "sub d=2 c=12", "xor d=15 c=2", "rot d=12 c=15 k=16", "mulc d=5 c=12 imm=0xeca1d1fd", "sub d=3 c=5", "mulc2 d=13 c=3 imm=0x95ffad7f", "mul d=14 c=13", "xor d=9 c=14", "mulc d=1 c=9 imm=0xb641fe73", "mulc d=15 c=1 imm=0x75882ff1", "xrot d=9 c=15 k=3", "rot d=15 c=9 k=28", "mul d=11 c=15", "mulc d=13 c=11 imm=0xaedd87b7", "mul d=5 c=13", "mulc2 d=11 c=5 imm=0xde5d8ddd", "add d=10 c=11", "andx d=5 c=10 b=12", "rot d=9 c=5 k=2", "xor d=13 c=9", "xor d=5 c=13", "rot d=13 c=5 k=22", "xorc d=11 c=13 imm=0x9f10934a", "addc d=5 c=11 imm=0xc4f2566b", "sub d=14 c=5", "xrot d=1 c=14 k=30", "add d=4 c=1", "andx d=5 c=4 b=14", "xor d=9 c=5", "xrot d=2 c=9 k=21", "sub d=3 c=2", "addc d=15 c=3 imm=0xd8e0689a", "rot d=8 c=15 k=18", "mulc d=12 c=8 imm=0x9f3839e7", "mulc2 d=11 c=12 imm=0x78af3d3f", "addc d=12 c=11 imm=0xf79cdc6c", "add d=14 c=12", "xorc d=13 c=14 imm=0x2f851ec9", "mul d=3 c=13", "andx d=4 c=3 b=0", "xor d=7 c=4", "xor d=0 c=7", "xorc d=4 c=0 imm=0x74cd9833", "rot d=10 c=4 k=16", "add d=6 c=10", "add d=5 c=6", "mul d=7 c=5", "xorc d=8 c=7 imm=0xee20e634", "mulc2 d=10 c=8 imm=0x3e130e7d", "addc d=8 c=10 imm=0x6f087e5b", "xor d=14 c=8", "sub d=4 c=14", "andx d=9 c=4 b=6", "mulc2 d=12 c=9 imm=0xb460872f", "xrot d=5 c=12 k=4", "xrot d=4 c=5 k=28", "xorc d=1 c=4 imm=0xf4365901", "rot d=0 c=1 k=18", "sub d=5 c=0", "xrot d=6 c=5 k=28", "xorc d=13 c=6 imm=0xdf09c351", "xor d=2 c=13", "sub d=4 c=2", "sub d=11 c=4", "orx d=9 c=11 b=8", "orx d=3 c=9 b=14", "xrot d=6 c=3 k=4", "xor d=11 c=6", "xorc d=5 c=11 imm=0xb26a12d6", "rot d=13 c=5 k=27", "add d=7 c=13", "mul d=1 c=7", "sub d=14 c=1", "add d=5 c=14", "add d=6 c=5", "add d=7 c=6", "xor d=3 c=7", "xorc d=2 c=3 imm=0x41710416", "add d=13 c=2", "mulc d=15 c=13 imm=0x936ce74f", "addc d=13 c=15 imm=0xa69098eb", "sub d=8 c=13", "xrot d=4 c=8 k=5", "mulc d=6 c=4 imm=0x96ed276f", "add d=14 c=6", "addc d=5 c=14 imm=0x3dd7b109", "andx d=9 c=5 b=7", "add d=15 c=9", "add d=12 c=15", "sub d=11 c=12", "add d=1 c=11", "xor d=2 c=1", "mul d=5 c=2", "addc d=14 c=5 imm=0xe10aa4d3", "mulc d=5 c=14 imm=0x91132d1f", "add d=10 c=5", "xor d=13 c=10", "mulc d=5 c=13 imm=0xec9ae3ad", "add d=11 c=5", "add d=7 c=11", "addc d=14 c=7 imm=0xf32ce180", "xor d=0 c=14", "add d=11 c=0", "mul d=12 c=11", "xorc d=11 c=12 imm=0xb1b1fa56", "xor d=5 c=11", "mulc d=11 c=5 imm=0x7afecfd5", "sub d=10 c=11", "add d=12 c=10", "mul d=15 c=12", "rot d=11 c=15 k=17", "add d=5 c=11", "xrot d=7 c=5 k=13", "rot d=5 c=7 k=10", "add d=14 c=5", "orx d=3 c=14 b=15", "mulc2 d=6 c=3 imm=0xfd4cbce5", "add d=13 c=6", "add d=12 c=13", "mulc2 d=2 c=12 imm=0x1567d149", "orx d=9 c=2 b=14", "mulc d=11 c=9 imm=0xcd1282cf", "mulc2 d=10 c=11 imm=0xec337bd7", "add d=4 c=10", "xor d=15 c=4", "orx d=2 c=15 b=14", "xor d=3 c=2", "mul d=5 c=3", "orx d=14 c=5 b=4", "addc d=7 c=14 imm=0x15993573", "sub d=11 c=7", "orx d=4 c=11 b=13", "add d=8 c=4", "mulc2 d=2 c=8 imm=0x97007c67", "mulc2 d=11 c=2 imm=0x918bfbb7", "xor d=10 c=11", "add d=6 c=10", "sub d=13 c=6", "mul d=6 c=13", "addc d=2 c=6 imm=0x029f336c", "mulc d=1 c=2 imm=0x773956e7", "mulc d=8 c=1 imm=0x5b779023", "xrot d=4 c=8 k=6", "xrot d=12 c=4 k=29", "sub d=14 c=12", "mul d=2 c=14", "sub d=15 c=2", "add d=11 c=15", "xrot d=9 c=11 k=13", "addc d=7 c=9 imm=0xf4431694", "xor d=13 c=7", "xor d=15 c=13", "xorc d=12 c=15 imm=0xd1599731", "mulc d=7 c=12 imm=0x8ced34cb", "mulc2 d=6 c=7 imm=0xd04c1dd5", "xrot d=1 c=6 k=25", "rot d=2 c=1 k=26", "xrot d=10 c=2 k=21", "xorc d=12 c=10 imm=0x551385af", "xrot d=13 c=12 k=17", "xor d=2 c=13", "xorc d=5 c=2 imm=0x836874e8", "addc d=10 c=5 imm=0xd9ec8d60", "xrot d=7 c=10 k=14", "xrot d=8 c=7 k=14", "xorc d=5 c=8 imm=0x076cb7e0", "add d=12 c=5", "xor d=13 c=12", "sub d=9 c=13", "xorc d=12 c=9 imm=0xffb78f00", "add d=0 c=12", "add d=8 c=0", "mulc2 d=4 c=8 imm=0x09be199f", "andx d=15 c=4 b=11", "rot d=11 c=15 k=17", "add d=0 c=11", "andx d=14 c=0 b=11", "mulc2 d=6 c=14 imm=0x062bb8b9", "add d=13 c=6", "xor d=7 c=13", "xor d=2 c=7", "xor d=4 c=2", "xrot d=12 c=4 k=16", "xor d=1 c=12", "mulc2 d=10 c=1 imm=0xaf1b9323", "mul d=2 c=10", "mulc2 d=7 c=2 imm=0xc1c09eb5", "xrot d=1 c=7 k=11", "mul d=9 c=1", "mul d=7 c=9", "orx d=3 c=7 b=15", "add d=6 c=3", "mul d=13 c=6", "add d=10 c=13", "mul d=9 c=10", "xor d=2 c=9", "rot d=1 c=2 k=24", "add d=8 c=1", "add d=15 c=8", "xor d=11 c=15", "andx d=9 c=11 b=14", "xorc d=4 c=9 imm=0x9fb9924f", "andx d=9 c=4 b=11", "rot d=4 c=9 k=18", "sub d=2 c=4", "xor d=10 c=2", "addc d=9 c=10 imm=0x47548619", "orx d=5 c=9 b=0", "rot d=13 c=5 k=4", "mul d=0 c=13", "rot d=6 c=0 k=17", "sub d=2 c=6", "mulc d=6 c=2 imm=0x19ae11d5", "xor d=15 c=6", "xrot d=14 c=15 k=8", "mul d=5 c=14", "xor d=12 c=5", "mul d=9 c=12", "addc d=0 c=9 imm=0xf019817b", "orx d=13 c=0 b=15", "xor d=11 c=13", "sub d=12 c=11", "mul d=7 c=12", "rot d=9 c=7 k=28", "sub d=13 c=9", "add d=2 c=13", "rot d=0 c=2 k=1", "addc d=10 c=0 imm=0xa639dd25", "rot d=4 c=10 k=14", "xorc d=7 c=4 imm=0x4d7e8a6d", "xor d=8 c=7", "add d=11 c=8", "rot d=10 c=11 k=8", "add d=0 c=10", "xorc d=11 c=0 imm=0x721aef7c", "rot d=4 c=11 k=1", "mul d=5 c=4", "mul d=11 c=5", "xorc d=8 c=11 imm=0xcc314719", "mulc d=6 c=8 imm=0x6487d2b7", "xrot d=0 c=6 k=14", "rot d=9 c=0 k=18", "rot d=5 c=9 k=1", "addc d=9 c=5 imm=0xa383dfd9", "xor d=10 c=9", "add d=1 c=10", "add d=15 c=1", "add d=7 c=15", "orx d=5 c=7 b=1", "orx d=7 c=5 b=3", "mulc d=6 c=7 imm=0x184ce043", "xor d=4 c=6", "rot d=2 c=4 k=3"], + ["add d=14 c=0", "rot d=5 c=14 k=7", "add d=3 c=5", "xor d=6 c=3", "add d=3 c=6", "orx d=8 c=3 b=10", "add d=15 c=8", "sub d=5 c=15", "sub d=8 c=5", "rot d=3 c=8 k=24", "xrot d=8 c=3 k=17", "add d=1 c=8", "mulc2 d=7 c=1 imm=0xf236f555", "mul d=15 c=7", "mulc d=4 c=15 imm=0x367da263", "andx d=14 c=4 b=10", "add d=3 c=14", "mulc2 d=9 c=3 imm=0xa86cb8a5", "addc d=1 c=9 imm=0x729e8820", "mul d=14 c=1", "add d=13 c=14", "orx d=0 c=13 b=15", "xorc d=8 c=0 imm=0x36ce8d99", "xor d=15 c=8", "mul d=5 c=15", "xorc d=10 c=5 imm=0xc281b62b", "mulc2 d=5 c=10 imm=0x4c18c9c1", "mulc2 d=9 c=5 imm=0x683b0045", "xor d=2 c=9", "xrot d=9 c=2 k=17", "xor d=11 c=9", "xor d=6 c=11", "mulc d=1 c=6 imm=0xf967d211", "add d=9 c=1", "add d=14 c=9", "xrot d=11 c=14 k=7", "orx d=5 c=11 b=7", "andx d=8 c=5 b=0", "xor d=11 c=8", "mulc d=4 c=11 imm=0xd7e0bb7f", "sub d=12 c=4", "rot d=7 c=12 k=11", "orx d=1 c=7 b=12", "add d=9 c=1", "andx d=8 c=9 b=2", "rot d=15 c=8 k=8", "rot d=0 c=15 k=6", "xrot d=13 c=0 k=7", "rot d=5 c=13 k=18", "orx d=6 c=5 b=12", "rot d=1 c=6 k=22", "mulc2 d=11 c=1 imm=0xf05cf87f", "rot d=0 c=11 k=5", "add d=9 c=0", "xor d=12 c=9", "mulc d=15 c=12 imm=0x4b3b7b5f", "add d=14 c=15", "mulc d=3 c=14 imm=0xc25fd2f5", "rot d=14 c=3 k=3", "mulc d=12 c=14 imm=0x2ccccc23", "xorc d=3 c=12 imm=0xe0a8d819", "xor d=14 c=3", "xor d=15 c=14", "add d=11 c=15", "xor d=2 c=11", "xor d=11 c=2", "xrot d=4 c=11 k=2", "rot d=15 c=4 k=5", "mulc d=5 c=15 imm=0x8678e679", "rot d=15 c=5 k=24", "addc d=13 c=15 imm=0xe037af3d", "sub d=14 c=13", "xrot d=3 c=14 k=5", "mulc d=14 c=3 imm=0xf94dfba9", "xor d=11 c=14", "xrot d=14 c=11 k=8", "mul d=15 c=14", "rot d=7 c=15 k=17", "rot d=2 c=7 k=17", "mulc d=12 c=2 imm=0xd427d34f", "xor d=2 c=12", "add d=3 c=2", "xor d=13 c=3", "mul d=6 c=13", "sub d=7 c=6", "add d=15 c=7", "mulc2 d=0 c=15 imm=0x6811cec1", "mul d=12 c=0", "orx d=4 c=12 b=11", "xrot d=3 c=4 k=15", "rot d=7 c=3 k=21", "xrot d=15 c=7 k=17", "mulc2 d=6 c=15 imm=0xe5adc811", "mulc d=12 c=6 imm=0x5156a379", "add d=3 c=12", "xorc d=9 c=3 imm=0x25367eec", "add d=11 c=9", "xorc d=4 c=11 imm=0xb721ecfe", "rot d=6 c=4 k=15", "xor d=4 c=6", "mulc d=13 c=4 imm=0x567d866d", "mul d=7 c=13", "rot d=0 c=7 k=30", "xrot d=13 c=0 k=8", "xorc d=11 c=13 imm=0xf7bdb888", "mulc d=1 c=11 imm=0x5a32e7ab", "rot d=0 c=1 k=24", "mulc2 d=4 c=0 imm=0x20f1b36b", "mulc d=11 c=4 imm=0x65a77da9", "add d=2 c=11", "addc d=3 c=2 imm=0x99328ba9", "sub d=13 c=3", "andx d=6 c=13 b=3", "add d=2 c=6", "xrot d=6 c=2 k=30", "xorc d=9 c=6 imm=0x6a4c2898", "sub d=15 c=9", "xrot d=12 c=15 k=26", "andx d=2 c=12 b=9", "xor d=5 c=2", "xrot d=13 c=5 k=14", "andx d=8 c=13 b=6", "addc d=5 c=8 imm=0xe7f53827", "mul d=14 c=5", "xorc d=8 c=14 imm=0xceef5db4", "xor d=14 c=8", "xorc d=7 c=14 imm=0xeb56858c", "mulc d=2 c=7 imm=0x4dd73993", "sub d=12 c=2", "sub d=2 c=12", "add d=11 c=2", "mul d=9 c=11", "xor d=3 c=9", "mulc d=4 c=3 imm=0x8ed152e9", "sub d=12 c=4", "xor d=6 c=12", "sub d=7 c=6", "andx d=3 c=7 b=0", "xrot d=5 c=3 k=30", "rot d=2 c=5 k=12", "mulc2 d=9 c=2 imm=0x606d8c4f", "add d=11 c=9", "sub d=9 c=11", "xor d=14 c=9", "mulc2 d=2 c=14 imm=0xa408d01d", "andx d=12 c=2 b=11", "mul d=7 c=12", "sub d=10 c=7", "andx d=11 c=10 b=4", "add d=6 c=11", "xor d=1 c=6", "xrot d=5 c=1 k=8", "rot d=0 c=5 k=28", "sub d=11 c=0", "mul d=3 c=11", "sub d=8 c=3", "sub d=6 c=8", "sub d=12 c=6", "mulc d=6 c=12 imm=0x77a5979d", "rot d=5 c=6 k=7", "mulc d=11 c=5 imm=0xbb2a5277", "sub d=10 c=11", "orx d=13 c=10 b=4", "add d=5 c=13", "add d=7 c=5", "addc d=3 c=7 imm=0x679f3a15", "mulc d=9 c=3 imm=0x3b759ea1", "orx d=5 c=9 b=6", "mul d=14 c=5", "sub d=4 c=14", "mulc d=10 c=4 imm=0x7438b4f1", "rot d=12 c=10 k=31", "andx d=1 c=12 b=3", "xor d=14 c=1", "xor d=11 c=14", "sub d=0 c=11", "rot d=15 c=0 k=29", "xorc d=14 c=15 imm=0xdb4b51fe", "xor d=3 c=14", "add d=2 c=3", "xor d=3 c=2", "mul d=1 c=3", "sub d=14 c=1", "mulc2 d=2 c=14 imm=0xa602880d", "mul d=9 c=2", "orx d=10 c=9 b=0", "mulc2 d=0 c=10 imm=0x1da05fdd", "mulc2 d=14 c=0 imm=0x5524fa43", "add d=7 c=14", "xrot d=3 c=7 k=12", "mulc d=8 c=3 imm=0x93b798bb", "rot d=11 c=8 k=8", "sub d=2 c=11", "addc d=9 c=2 imm=0x7e63761f", "addc d=13 c=9 imm=0x6a2b3abc", "rot d=15 c=13 k=31", "mul d=14 c=15", "andx d=1 c=14 b=15", "xor d=6 c=1", "orx d=15 c=6 b=9", "xor d=0 c=15", "sub d=8 c=0", "xrot d=13 c=8 k=29", "mulc2 d=10 c=13 imm=0x81dc8267", "rot d=12 c=10 k=6", "xor d=14 c=12", "sub d=10 c=14", "mulc d=0 c=10 imm=0xc6809ffd", "mulc d=12 c=0 imm=0x90188547", "rot d=8 c=12 k=23", "xor d=2 c=8", "rot d=5 c=2 k=21", "xrot d=13 c=5 k=6", "mulc d=11 c=13 imm=0x23339351", "xrot d=6 c=11 k=24", "andx d=2 c=6 b=7", "mul d=11 c=2", "addc d=8 c=11 imm=0x64aea95a", "xor d=3 c=8", "rot d=6 c=3 k=5", "xrot d=0 c=6 k=1", "xor d=6 c=0", "mulc2 d=3 c=6 imm=0x6da4a1e5", "mulc2 d=13 c=3 imm=0x16181847", "sub d=0 c=13", "add d=12 c=0", "xrot d=14 c=12 k=22", "add d=6 c=14", "xrot d=1 c=6 k=26", "sub d=14 c=1", "addc d=8 c=14 imm=0x57302d8d", "mulc2 d=5 c=8 imm=0xfae0a1eb", "mul d=10 c=5", "mul d=1 c=10", "mul d=0 c=1", "rot d=7 c=0 k=11", "mul d=3 c=7", "add d=4 c=3", "xor d=1 c=4", "xor d=4 c=1", "sub d=13 c=4", "rot d=1 c=13 k=22", "mul d=0 c=1", "add d=6 c=0", "addc d=0 c=6 imm=0xa48f59d6", "addc d=2 c=0 imm=0xd890ff08", "sub d=10 c=2", "xor d=6 c=10", "mul d=11 c=6", "xrot d=13 c=11 k=25", "mul d=5 c=13", "addc d=3 c=5 imm=0xf143105e", "mulc2 d=2 c=3 imm=0x9c957b8f", "mulc d=12 c=2 imm=0x5542792d", "rot d=13 c=12 k=27", "sub d=1 c=13", "add d=3 c=1", "xor d=11 c=3", "mulc d=10 c=11 imm=0xbd220965", "mul d=1 c=10", "sub d=7 c=1", "rot d=15 c=7 k=28", "rot d=1 c=15 k=12", "sub d=8 c=1", "mulc d=9 c=8 imm=0x35be18f5", "orx d=4 c=9 b=1", "xrot d=14 c=4 k=27", "xor d=0 c=14", "mul d=12 c=0", "sub d=3 c=12", "rot d=15 c=3 k=14", "add d=0 c=15", "rot d=11 c=0 k=26", "addc d=15 c=11 imm=0xc1c2e89f", "rot d=4 c=15 k=23", "xor d=11 c=4", "xor d=0 c=11", "xrot d=13 c=0 k=1", "addc d=12 c=13 imm=0xd57fd3dd", "xorc d=9 c=12 imm=0xe5c431c8", "xorc d=6 c=9 imm=0xcc67fed2", "xor d=13 c=6", "xorc d=4 c=13 imm=0xfe05a3a3", "mulc2 d=2 c=4 imm=0x8c03bf67", "add d=0 c=2", "add d=11 c=0", "xor d=7 c=11", "mulc2 d=13 c=7 imm=0xfb6d3733", "xor d=6 c=13", "xorc d=2 c=6 imm=0x4efcdfbf", "mul d=13 c=2", "xor d=12 c=13", "sub d=11 c=12", "xor d=9 c=11", "rot d=4 c=9 k=10", "sub d=12 c=4", "xrot d=9 c=12 k=22", "add d=15 c=9", "sub d=3 c=15", "andx d=7 c=3 b=9", "add d=9 c=7", "mulc d=8 c=9 imm=0x410e2049", "xor d=3 c=8", "add d=12 c=3", "andx d=8 c=12 b=6", "xor d=0 c=8", "orx d=13 c=0 b=3", "xorc d=7 c=13 imm=0x0eb1588e", "mul d=15 c=7", "add d=5 c=15", "xor d=1 c=5", "rot d=4 c=1 k=16", "add d=10 c=4", "add d=0 c=10", "mulc d=9 c=0 imm=0x346b3e53", "mul d=0 c=9", "sub d=2 c=0", "mulc2 d=12 c=2 imm=0xa1f90d81", "add d=1 c=12", "mulc2 d=0 c=1 imm=0xef4fd54f", "xor d=1 c=0", "xor d=7 c=1", "xrot d=3 c=7 k=21", "orx d=13 c=3 b=8", "xor d=11 c=13", "xor d=13 c=11", "add d=3 c=13", "sub d=0 c=3", "mul d=15 c=0", "addc d=10 c=15 imm=0x4d178b4d", "rot d=15 c=10 k=25", "mul d=8 c=15", "mul d=12 c=8", "xrot d=13 c=12 k=30", "xor d=15 c=13", "add d=6 c=15", "mul d=5 c=6", "sub d=12 c=5", "sub d=0 c=12", "xor d=7 c=0", "xor d=3 c=7", "addc d=14 c=3 imm=0x83e089e4", "mul d=15 c=14", "xrot d=7 c=15 k=26", "orx d=13 c=7 b=3", "sub d=7 c=13", "xor d=11 c=7", "xor d=9 c=11", "add d=5 c=9", "add d=14 c=5", "andx d=4 c=14 b=0", "xrot d=3 c=4 k=16", "xrot d=0 c=3 k=17", "xorc d=13 c=0 imm=0x3d84c4ae", "mul d=10 c=13", "addc d=13 c=10 imm=0x754c3314", "add d=9 c=13", "xor d=3 c=9", "add d=0 c=3", "mulc d=7 c=0 imm=0x92f74007", "add d=13 c=7", "xor d=6 c=13", "mulc d=7 c=6 imm=0x63936a19", "addc d=10 c=7 imm=0xadf24f99", "mulc2 d=5 c=10 imm=0xd55fb891", "xrot d=8 c=5 k=13", "xrot d=13 c=8 k=28", "xor d=15 c=13", "xrot d=3 c=15 k=31", "add d=0 c=3", "add d=12 c=0", "xor d=6 c=12", "sub d=1 c=6", "rot d=0 c=1 k=8", "rot d=3 c=0 k=11", "xor d=13 c=3", "add d=2 c=13", "rot d=0 c=2 k=28", "add d=1 c=0", "xorc d=15 c=1 imm=0x0710d7aa", "xorc d=4 c=15 imm=0x0c102325", "andx d=0 c=4 b=6", "xrot d=2 c=0 k=20", "add d=8 c=2", "sub d=7 c=8", "mul d=11 c=7", "mulc d=3 c=11 imm=0x2992aef3", "xrot d=10 c=3 k=6", "xor d=5 c=10", "sub d=7 c=5", "rot d=1 c=7 k=3", "mulc d=7 c=1 imm=0x30802407", "addc d=8 c=7 imm=0x4da006c2", "xrot d=2 c=8 k=31", "mul d=6 c=2", "add d=7 c=6", "sub d=2 c=7", "sub d=1 c=2", "sub d=13 c=1", "add d=9 c=13", "mulc d=5 c=9 imm=0xb8aec3c9", "andx d=9 c=5 b=3", "xor d=2 c=9", "xor d=14 c=2", "xorc d=9 c=14 imm=0xbffbdbee", "xrot d=3 c=9 k=20", "rot d=5 c=3 k=24", "rot d=13 c=5 k=15", "xor d=6 c=13", "add d=4 c=6", "add d=6 c=4", "add d=8 c=6", "sub d=10 c=8", "addc d=7 c=10 imm=0x607c17d6", "mulc d=12 c=7 imm=0x5f96043d", "add d=14 c=12", "xrot d=5 c=14 k=8", "add d=2 c=5", "sub d=0 c=2", "xor d=14 c=0", "xorc d=15 c=14 imm=0xc5076b2c", "mulc d=1 c=15 imm=0x35f61ca7", "xrot d=12 c=1 k=29", "rot d=4 c=12 k=24", "mulc d=7 c=4 imm=0x3e4c118b", "mulc d=4 c=7 imm=0x124571a3", "add d=6 c=4", "sub d=12 c=6", "sub d=4 c=12", "sub d=13 c=4", "addc d=9 c=13 imm=0x66802483", "xrot d=15 c=9 k=28", "sub d=8 c=15", "xrot d=4 c=8 k=30", "mul d=7 c=4", "xor d=11 c=7", "rot d=0 c=11 k=21", "xor d=11 c=0", "sub d=2 c=11", "xrot d=1 c=2 k=3", "orx d=9 c=1 b=7", "xor d=0 c=9", "xrot d=3 c=0 k=12", "add d=14 c=3", "addc d=6 c=14 imm=0xb50b59d6", "mulc d=4 c=6 imm=0x1eecbc9f", "rot d=6 c=4 k=24", "xor d=12 c=6", "add d=2 c=12", "mulc2 d=7 c=2 imm=0xffe0b5bb", "rot d=5 c=7 k=4", "xor d=14 c=5", "xrot d=1 c=14 k=1", "xor d=10 c=1", "mulc2 d=1 c=10 imm=0xb57f1b41", "mulc d=15 c=1 imm=0xb49d4c67", "mul d=7 c=15", "xorc d=1 c=7 imm=0x835c5c94", "xrot d=8 c=1 k=14", "xrot d=3 c=8 k=18", "xor d=5 c=3", "rot d=8 c=5 k=12", "xrot d=15 c=8 k=30", "mulc2 d=8 c=15 imm=0xa6e14777", "xorc d=13 c=8 imm=0xda9c793b", "xor d=3 c=13", "xor d=4 c=3", "mulc d=0 c=4 imm=0x41a7651b", "mulc2 d=15 c=0 imm=0xa762cc89", "mulc d=12 c=15 imm=0x401d997f", "xrot d=7 c=12 k=13", "add d=11 c=7", "xor d=4 c=11", "mul d=6 c=4", "add d=9 c=6", "mul d=11 c=9", "mulc d=3 c=11 imm=0xe248840d", "add d=12 c=3", "mulc2 d=4 c=12 imm=0x6d65a44b", "sub d=14 c=4", "add d=5 c=14", "orx d=14 c=5 b=7", "rot d=9 c=14 k=9", "add d=4 c=9", "xor d=13 c=4", "orx d=11 c=13 b=5", "mulc2 d=1 c=11 imm=0x51f48ab1", "mul d=11 c=1", "sub d=14 c=11", "mulc2 d=2 c=14 imm=0x149a38f3", "mulc d=0 c=2 imm=0xe80fd119", "mul d=11 c=0", "xrot d=8 c=11 k=4", "xrot d=4 c=8 k=17", "mulc d=6 c=4 imm=0x383cb6c5", "xor d=11 c=6", "add d=7 c=11", "xrot d=12 c=7 k=19", "xor d=6 c=12", "xrot d=15 c=6 k=23", "xorc d=1 c=15 imm=0xb1dc5f0a", "sub d=13 c=1", "sub d=4 c=13", "rot d=1 c=4 k=8", "sub d=2 c=1", "add d=1 c=2", "xorc d=10 c=1 imm=0x28905198", "xor d=2 c=10", "mul d=3 c=2", "sub d=10 c=3", "xor d=13 c=10", "mul d=6 c=13", "orx d=0 c=6 b=5", "xor d=7 c=0", "mulc d=2 c=7 imm=0xcd1889ad", "add d=1 c=2", "add d=11 c=1", "xor d=6 c=11", "mul d=13 c=6", "mulc d=9 c=13 imm=0x759b3279", "sub d=2 c=9", "mulc2 d=8 c=2 imm=0xab1fffc9", "mul d=7 c=8", "xor d=11 c=7", "mul d=7 c=11", "add d=9 c=7", "rot d=0 c=9 k=22", "orx d=13 c=0 b=14", "xor d=4 c=13", "sub d=9 c=4", "xor d=6 c=9", "mul d=8 c=6", "rot d=10 c=8 k=14", "mul d=13 c=10", "andx d=7 c=13 b=14", "sub d=8 c=7", "xor d=9 c=8", "rot d=0 c=9 k=12", "mulc d=9 c=0 imm=0x94665a0f", "orx d=3 c=9 b=5", "addc d=13 c=3 imm=0x76335011", "mul d=5 c=13", "xrot d=10 c=5 k=4", "add d=2 c=10", "addc d=0 c=2 imm=0xe5c5c4ee", "xor d=10 c=0", "sub d=8 c=10", "add d=5 c=8", "add d=12 c=5", "xrot d=8 c=12 k=17", "xrot d=7 c=8 k=18", "xrot d=0 c=7 k=15", "xorc d=1 c=0 imm=0x269a357b", "add d=9 c=1", "add d=11 c=9", "xrot d=10 c=11 k=7", "xor d=0 c=10", "add d=4 c=0", "xrot d=14 c=4 k=27", "add d=15 c=14", "mulc2 d=12 c=15 imm=0xa38e176d", "xrot d=2 c=12 k=10", "xor d=0 c=2", "rot d=12 c=0 k=10", "addc d=3 c=12 imm=0x3a7b8b35", "add d=10 c=3", "xor d=8 c=10", "xrot d=1 c=8 k=25", "addc d=13 c=1 imm=0xa6fef564", "add d=12 c=13", "xor d=7 c=12", "xrot d=3 c=7 k=13", "xor d=1 c=3", "xrot d=13 c=1 k=31", "xrot d=0 c=13 k=25", "add d=7 c=0", "sub d=10 c=7", "rot d=6 c=10 k=5", "sub d=10 c=6", "sub d=9 c=10", "sub d=11 c=9", "rot d=4 c=11 k=22", "mulc2 d=9 c=4 imm=0x524dda45", "sub d=1 c=9", "mulc d=14 c=1 imm=0x726e8ac3", "rot d=7 c=14 k=23", "rot d=11 c=7 k=24", "xor d=14 c=11", "sub d=9 c=14", "xor d=4 c=9", "xrot d=9 c=4 k=30", "xor d=13 c=9", "sub d=5 c=13", "rot d=10 c=5 k=2", "xor d=15 c=10", "add d=5 c=15", "mulc d=11 c=5 imm=0xc4aae5c1", "rot d=4 c=11 k=22", "xrot d=13 c=4 k=2", "xorc d=1 c=13 imm=0x9400d36b", "mul d=8 c=1", "rot d=4 c=8 k=24", "mulc2 d=14 c=4 imm=0xc442e3d7", "rot d=11 c=14 k=19", "mulc d=2 c=11 imm=0xebbc49b9", "xrot d=14 c=2 k=19", "add d=13 c=14", "xor d=14 c=13", "mul d=9 c=14", "andx d=2 c=9 b=13", "sub d=8 c=2", "xrot d=3 c=8 k=3", "mulc2 d=7 c=3 imm=0x576da3b7", "orx d=0 c=7 b=8", "sub d=1 c=0", "xrot d=15 c=1 k=16", "add d=11 c=15", "xor d=9 c=11", "xor d=14 c=9", "add d=9 c=14", "add d=5 c=9", "mul d=1 c=5", "add d=0 c=1", "xor d=7 c=0", "add d=2 c=7", "mulc d=14 c=2 imm=0x58412f09", "xrot d=11 c=14 k=12", "rot d=3 c=11 k=6", "mulc d=14 c=3 imm=0x00dd684f", "sub d=4 c=14", "addc d=9 c=4 imm=0x550edca7", "mulc d=11 c=9 imm=0xbbfbfe77", "add d=13 c=11", "add d=11 c=13", "add d=8 c=11", "add d=5 c=8", "xrot d=15 c=5 k=29", "add d=12 c=15", "xor d=1 c=12", "sub d=6 c=1", "add d=7 c=6", "rot d=4 c=7 k=17", "xor d=11 c=4", "add d=4 c=11", "addc d=11 c=4 imm=0x46d20979", "xor d=14 c=11", "xor d=10 c=14", "mul d=2 c=10", "rot d=12 c=2 k=22", "sub d=15 c=12", "mulc d=12 c=15 imm=0xf44d7efb", "mulc d=10 c=12 imm=0x3fa99f4f", "xorc d=2 c=10 imm=0xac7d5c8b", "add d=7 c=2", "addc d=14 c=7 imm=0xd1ad9327", "add d=3 c=14", "xrot d=10 c=3 k=9", "rot d=5 c=10 k=11", "mul d=2 c=5", "add d=15 c=2", "mul d=14 c=15", "mulc2 d=10 c=14 imm=0xedb63e45", "add d=14 c=10", "add d=9 c=14", "addc d=3 c=9 imm=0xce5dd87e", "xrot d=15 c=3 k=16", "sub d=1 c=15", "add d=2 c=1", "andx d=13 c=2 b=7", "xrot d=2 c=13 k=11", "xor d=15 c=2", "addc d=6 c=15 imm=0x97390455", "rot d=2 c=6 k=14", "mulc2 d=0 c=2 imm=0xd9932c57", "xor d=15 c=0", "addc d=0 c=15 imm=0xd642df33", "sub d=10 c=0", "mulc d=9 c=10 imm=0x96d65173", "mulc d=3 c=9 imm=0x5ef32be3", "rot d=0 c=3 k=4", "addc d=14 c=0 imm=0xa2e88e9c", "sub d=4 c=14", "sub d=13 c=4", "xrot d=1 c=13 k=29", "addc d=2 c=1 imm=0x9f32e607", "mulc2 d=8 c=2 imm=0x2e14f3b3", "xor d=14 c=8", "xor d=10 c=14", "mulc d=7 c=10 imm=0xb35882a9", "xorc d=11 c=7 imm=0xdb62d1c6", "mul d=5 c=11", "orx d=10 c=5 b=1", "sub d=3 c=10", "xrot d=10 c=3 k=8", "andx d=13 c=10 b=15", "sub d=11 c=13", "xor d=5 c=11", "add d=11 c=5", "xorc d=15 c=11 imm=0xef110718", "rot d=12 c=15 k=17", "xrot d=1 c=12 k=12", "xorc d=12 c=1 imm=0x4e9029b6", "sub d=14 c=12", "mul d=15 c=14", "mul d=4 c=15", "xrot d=15 c=4 k=9", "xor d=13 c=15", "xrot d=3 c=13 k=7", "addc d=5 c=3 imm=0xf38664b0", "sub d=2 c=5", "xrot d=5 c=2 k=29", "rot d=1 c=5 k=7", "sub d=10 c=1", "xrot d=5 c=10 k=27", "xor d=10 c=5", "add d=2 c=10", "add d=6 c=2", "mulc d=3 c=6 imm=0x33b893c5", "sub d=8 c=3", "xorc d=5 c=8 imm=0x58095457", "add d=0 c=5", "add d=9 c=0", "xor d=13 c=9", "xor d=6 c=13", "xor d=3 c=6", "xrot d=5 c=3 k=14", "xorc d=13 c=5 imm=0xf1c1aac7", "mulc2 d=4 c=13 imm=0x8ea1eea7", "xor d=12 c=4", "xorc d=10 c=12 imm=0xdf051453", "xor d=5 c=10", "xor d=13 c=5", "xor d=15 c=13", "xor d=3 c=15", "add d=9 c=3", "xorc d=4 c=9 imm=0x218a1035"], + ["mulc d=9 c=0 imm=0x797e4457", "xor d=4 c=9", "sub d=10 c=4", "addc d=11 c=10 imm=0xa102a63d", "add d=1 c=11", "xor d=7 c=1", "add d=8 c=7", "add d=6 c=8", "xrot d=1 c=6 k=17", "xor d=6 c=1", "xor d=14 c=6", "xrot d=7 c=14 k=25", "sub d=2 c=7", "xrot d=4 c=2 k=25", "xrot d=7 c=4 k=25", "xor d=10 c=7", "addc d=15 c=10 imm=0x0abd8749", "xrot d=2 c=15 k=3", "mulc2 d=15 c=2 imm=0x66393445", "mul d=14 c=15", "xor d=3 c=14", "rot d=2 c=3 k=5", "xrot d=0 c=2 k=20", "xorc d=5 c=0 imm=0xcab80c1e", "xrot d=10 c=5 k=16", "xrot d=14 c=10 k=6", "andx d=10 c=14 b=4", "andx d=6 c=10 b=5", "add d=4 c=6", "addc d=0 c=4 imm=0x95ce3e2a", "mul d=2 c=0", "add d=6 c=2", "xrot d=2 c=6 k=17", "rot d=15 c=2 k=14", "xor d=7 c=15", "xor d=12 c=7", "add d=1 c=12", "xor d=3 c=1", "mulc d=0 c=3 imm=0x53869057", "add d=12 c=0", "xorc d=10 c=12 imm=0x3c38b79f", "xor d=0 c=10", "xorc d=1 c=0 imm=0x26a5cf2a", "xorc d=8 c=1 imm=0xec7f7c75", "rot d=11 c=8 k=25", "xor d=15 c=11", "andx d=8 c=15 b=6", "xor d=3 c=8", "rot d=1 c=3 k=17", "xor d=11 c=1", "xor d=0 c=11", "add d=7 c=0", "sub d=2 c=7", "rot d=5 c=2 k=24", "rot d=4 c=5 k=13", "xrot d=1 c=4 k=1", "xorc d=4 c=1 imm=0x7b85746b", "add d=14 c=4", "rot d=9 c=14 k=24", "xor d=1 c=9", "add d=14 c=1", "xor d=6 c=14", "mulc d=7 c=6 imm=0xd304fa11", "addc d=3 c=7 imm=0x916253c4", "orx d=13 c=3 b=12", "xor d=3 c=13", "mulc d=1 c=3 imm=0x668aaced", "xrot d=11 c=1 k=12", "addc d=4 c=11 imm=0xfa452a6c", "xor d=7 c=4", "add d=15 c=7", "xor d=7 c=15", "mul d=13 c=7", "mul d=5 c=13", "add d=9 c=5", "rot d=5 c=9 k=19", "orx d=15 c=5 b=1", "orx d=10 c=15 b=12", "rot d=11 c=10 k=7", "rot d=10 c=11 k=11", "orx d=0 c=10 b=14", "mul d=5 c=0", "sub d=4 c=5", "xor d=6 c=4", "xrot d=9 c=6 k=3", "add d=13 c=9", "sub d=3 c=13", "xorc d=15 c=3 imm=0x3ab76643", "mul d=4 c=15", "sub d=7 c=4", "add d=1 c=7", "rot d=9 c=1 k=31", "mul d=3 c=9", "sub d=10 c=3", "xor d=4 c=10", "mul d=0 c=4", "add d=1 c=0", "xorc d=7 c=1 imm=0xd1b0c195", "sub d=10 c=7", "sub d=5 c=10", "sub d=0 c=5", "orx d=15 c=0 b=13", "xor d=13 c=15", "rot d=3 c=13 k=3", "sub d=8 c=3", "rot d=15 c=8 k=20", "mulc2 d=14 c=15 imm=0x42023659", "addc d=0 c=14 imm=0x59245cc5", "add d=10 c=0", "add d=3 c=10", "mulc d=4 c=3 imm=0x513757e1", "xor d=7 c=4", "addc d=14 c=7 imm=0x7d876976", "add d=1 c=14", "addc d=15 c=1 imm=0x538535d0", "andx d=13 c=15 b=4", "mulc d=4 c=13 imm=0x102bd2d9", "add d=2 c=4", "mul d=8 c=2", "sub d=11 c=8", "mul d=8 c=11", "xrot d=9 c=8 k=21", "sub d=12 c=9", "xorc d=0 c=12 imm=0x756f1367", "mulc d=8 c=0 imm=0xeb1d6203", "add d=2 c=8", "rot d=3 c=2 k=27", "mulc2 d=14 c=3 imm=0xbe8a18f5", "xor d=11 c=14", "xor d=14 c=11", "add d=7 c=14", "xorc d=2 c=7 imm=0xa93ccf9d", "xrot d=13 c=2 k=30", "xorc d=6 c=13 imm=0x0b96528a", "xorc d=12 c=6 imm=0x7400dce8", "andx d=7 c=12 b=14", "xorc d=4 c=7 imm=0x38e67c0f", "xor d=12 c=4", "xorc d=13 c=12 imm=0xdb69d44f", "xrot d=14 c=13 k=1", "mul d=5 c=14", "xor d=2 c=5", "sub d=0 c=2", "mul d=14 c=0", "add d=0 c=14", "addc d=3 c=0 imm=0x412d0838", "rot d=11 c=3 k=6", "mul d=3 c=11", "rot d=0 c=3 k=12", "rot d=4 c=0 k=15", "mulc2 d=0 c=4 imm=0x514e6f4b", "xorc d=13 c=0 imm=0xb917c4f4", "addc d=5 c=13 imm=0xe81626f3", "add d=1 c=5", "mul d=12 c=1", "sub d=13 c=12", "xrot d=14 c=13 k=20", "xor d=13 c=14", "xor d=6 c=13", "mul d=10 c=6", "mul d=14 c=10", "xor d=15 c=14", "xorc d=13 c=15 imm=0xdcaf64c9", "xor d=11 c=13", "sub d=5 c=11", "xrot d=4 c=5 k=16", "xor d=14 c=4", "sub d=15 c=14", "xrot d=5 c=15 k=21", "sub d=0 c=5", "rot d=13 c=0 k=27", "xrot d=11 c=13 k=14", "mulc2 d=4 c=11 imm=0x7b1d09a9", "mul d=6 c=4", "addc d=9 c=6 imm=0x62232acf", "add d=15 c=9", "orx d=9 c=15 b=14", "orx d=8 c=9 b=6", "xor d=2 c=8", "mulc d=3 c=2 imm=0xb3059c21", "rot d=11 c=3 k=19", "xor d=1 c=11", "xorc d=15 c=1 imm=0x2171991d", "add d=12 c=15", "xrot d=0 c=12 k=11", "mulc2 d=12 c=0 imm=0xcfafa68b", "add d=13 c=12", "add d=8 c=13", "mulc d=0 c=8 imm=0x1259bf39", "xorc d=9 c=0 imm=0x7b24b75f", "mul d=11 c=9", "xrot d=8 c=11 k=26", "orx d=13 c=8 b=10", "add d=14 c=13", "rot d=2 c=14 k=16", "mul d=0 c=2", "add d=7 c=0", "sub d=9 c=7", "add d=14 c=9", "xorc d=2 c=14 imm=0xc10a9cc2", "mul d=9 c=2", "andx d=12 c=9 b=11", "mulc d=9 c=12 imm=0xa6446659", "add d=7 c=9", "mul d=12 c=7", "sub d=1 c=12", "rot d=4 c=1 k=25", "xor d=8 c=4", "orx d=14 c=8 b=0", "add d=1 c=14", "xrot d=6 c=1 k=15", "sub d=9 c=6", "rot d=0 c=9 k=9", "sub d=10 c=0", "add d=11 c=10", "mulc d=0 c=11 imm=0x5006a017", "sub d=9 c=0", "xor d=1 c=9", "xor d=3 c=1", "xrot d=6 c=3 k=20", "xor d=12 c=6", "sub d=9 c=12", "add d=7 c=9", "xor d=1 c=7", "mulc d=15 c=1 imm=0x0341d025", "mul d=6 c=15", "mulc d=2 c=6 imm=0xbf30d677", "xorc d=1 c=2 imm=0x5a31f2fa", "add d=15 c=1", "sub d=9 c=15", "xor d=10 c=9", "xor d=7 c=10", "mul d=8 c=7", "sub d=9 c=8", "add d=1 c=9", "mulc2 d=6 c=1 imm=0xc029c901", "mulc2 d=9 c=6 imm=0x0a8b81a9", "mul d=13 c=9", "andx d=2 c=13 b=1", "rot d=13 c=2 k=19", "mulc d=7 c=13 imm=0x6775be81", "xrot d=13 c=7 k=16", "xor d=14 c=13", "xorc d=11 c=14 imm=0xeb720242", "rot d=13 c=11 k=14", "rot d=5 c=13 k=20", "andx d=11 c=5 b=7", "rot d=7 c=11 k=25", "xrot d=3 c=7 k=3", "xrot d=15 c=3 k=20", "sub d=9 c=15", "rot d=4 c=9 k=2", "andx d=2 c=4 b=14", "add d=7 c=2", "xrot d=9 c=7 k=3", "mul d=5 c=9", "add d=9 c=5", "mul d=5 c=9", "mul d=9 c=5", "sub d=7 c=9", "xorc d=0 c=7 imm=0xae9620d3", "xor d=6 c=0", "xor d=1 c=6", "sub d=10 c=1", "xor d=12 c=10", "xorc d=4 c=12 imm=0x3893c42a", "add d=15 c=4", "add d=8 c=15", "add d=0 c=8", "mulc d=12 c=0 imm=0xce1c066b", "add d=15 c=12", "xrot d=14 c=15 k=17", "add d=12 c=14", "mulc d=0 c=12 imm=0xbfe6f35f", "rot d=7 c=0 k=14", "xor d=10 c=7", "mul d=11 c=10", "add d=12 c=11", "sub d=9 c=12", "xor d=8 c=9", "mulc d=5 c=8 imm=0xc1d852ab", "xor d=4 c=5", "add d=12 c=4", "xrot d=8 c=12 k=18", "rot d=15 c=8 k=13", "mulc d=4 c=15 imm=0xb18cd0d9", "add d=6 c=4", "xrot d=11 c=6 k=14", "addc d=3 c=11 imm=0x10533cf0", "xor d=14 c=3", "xorc d=10 c=14 imm=0x708a914a", "add d=13 c=10", "mul d=2 c=13", "sub d=5 c=2", "rot d=4 c=5 k=3", "xorc d=9 c=4 imm=0xdbe59900", "mulc d=6 c=9 imm=0x3c084e57", "sub d=12 c=6", "xorc d=10 c=12 imm=0xf4c46888", "rot d=4 c=10 k=14", "mulc d=9 c=4 imm=0x6a1a0c53", "xorc d=4 c=9 imm=0x595122dd", "addc d=11 c=4 imm=0x7a7d85c9", "mulc d=12 c=11 imm=0x44aad133", "add d=5 c=12", "sub d=2 c=5", "xorc d=12 c=2 imm=0xd4528978", "xorc d=3 c=12 imm=0xe2d6b9c3", "add d=7 c=3", "rot d=11 c=7 k=9", "sub d=9 c=11", "xrot d=14 c=9 k=10", "add d=7 c=14", "add d=4 c=7", "xor d=5 c=4", "xor d=15 c=5", "rot d=13 c=15 k=5", "rot d=5 c=13 k=30", "xor d=0 c=5", "mulc d=10 c=0 imm=0x6e5fb2eb", "xor d=7 c=10", "xor d=3 c=7", "xrot d=11 c=3 k=11", "xor d=0 c=11", "sub d=12 c=0", "mul d=11 c=12", "xor d=4 c=11", "xor d=11 c=4", "mulc d=2 c=11 imm=0xb5b4f471", "add d=3 c=2", "add d=1 c=3", "mul d=15 c=1", "rot d=10 c=15 k=31", "xor d=15 c=10", "rot d=6 c=15 k=8", "mulc2 d=13 c=6 imm=0x0b61283f", "xor d=11 c=13", "addc d=6 c=11 imm=0xd7cda70f", "mul d=2 c=6", "add d=3 c=2", "orx d=0 c=3 b=11", "mulc2 d=10 c=0 imm=0x68301209", "sub d=13 c=10", "addc d=5 c=13 imm=0x25d68939", "xorc d=14 c=5 imm=0x9315e17c", "xrot d=8 c=14 k=31", "mul d=4 c=8", "mul d=8 c=4", "xor d=1 c=8", "mulc2 d=9 c=1 imm=0xb3978cd7", "mulc d=0 c=9 imm=0x8f1b658f", "rot d=3 c=0 k=31", "add d=1 c=3", "addc d=14 c=1 imm=0xce275c64", "xor d=7 c=14", "xrot d=14 c=7 k=23", "mul d=3 c=14", "mulc d=2 c=3 imm=0xf33fdd1b", "xor d=10 c=2", "xor d=11 c=10", "addc d=10 c=11 imm=0x9a470fc4", "xrot d=4 c=10 k=2", "mul d=7 c=4", "andx d=8 c=7 b=15", "xor d=13 c=8", "xrot d=5 c=13 k=21", "add d=9 c=5", "rot d=6 c=9 k=22", "mulc d=2 c=6 imm=0x3b1c9049", "mulc2 d=4 c=2 imm=0x5964f96f", "xrot d=13 c=4 k=31", "sub d=6 c=13", "xor d=13 c=6", "mulc d=0 c=13 imm=0x9806df37", "mulc2 d=12 c=0 imm=0xfcc0e3e5", "add d=8 c=12", "add d=6 c=8", "add d=1 c=6", "xorc d=9 c=1 imm=0x6dbea2d7", "mulc2 d=2 c=9 imm=0x856b34bd", "add d=13 c=2", "xor d=2 c=13", "add d=0 c=2", "add d=11 c=0", "add d=2 c=11", "andx d=12 c=2 b=4", "xorc d=0 c=12 imm=0x50a4b36a", "add d=12 c=0", "add d=8 c=12", "xor d=13 c=8", "xor d=4 c=13", "add d=15 c=4", "andx d=13 c=15 b=7", "rot d=7 c=13 k=26", "xor d=4 c=7", "mul d=9 c=4", "add d=7 c=9", "xorc d=14 c=7 imm=0x65c7cdaa", "mulc2 d=15 c=14 imm=0xf2b2c56f", "xor d=12 c=15", "mul d=8 c=12", "xrot d=11 c=8 k=5", "sub d=0 c=11", "add d=9 c=0", "mul d=4 c=9", "mul d=13 c=4", "rot d=0 c=13 k=8", "rot d=8 c=0 k=24", "xor d=0 c=8", "orx d=13 c=0 b=6", "xor d=15 c=13", "xorc d=0 c=15 imm=0x263b836b", "xrot d=10 c=0 k=8", "mulc d=14 c=10 imm=0xd6a0e7c7", "mulc d=15 c=14 imm=0x4017ec97", "xor d=8 c=15", "xorc d=14 c=8 imm=0x1ebe6b44", "mulc d=7 c=14 imm=0x8b99dbe1", "add d=10 c=7", "xor d=2 c=10", "mul d=12 c=2", "orx d=8 c=12 b=4", "xrot d=5 c=8 k=26", "xrot d=8 c=5 k=31", "xor d=13 c=8", "xorc d=1 c=13 imm=0xf9ab26db", "addc d=3 c=1 imm=0x27337e87", "sub d=14 c=3", "xrot d=15 c=14 k=25", "sub d=2 c=15", "andx d=9 c=2 b=4", "add d=11 c=9", "sub d=8 c=11", "add d=4 c=8", "sub d=8 c=4", "add d=11 c=8", "xor d=1 c=11", "xor d=11 c=1", "xrot d=7 c=11 k=19", "mulc d=0 c=7 imm=0xff057d15", "rot d=12 c=0 k=7", "orx d=15 c=12 b=10", "xrot d=9 c=15 k=17", "xorc d=0 c=9 imm=0x87439202", "sub d=12 c=0", "xorc d=13 c=12 imm=0x201ac58a", "rot d=2 c=13 k=7", "xrot d=11 c=2 k=27", "mulc2 d=9 c=11 imm=0x55d080fd", "xor d=6 c=9", "mulc d=13 c=6 imm=0x5efcd7af", "rot d=8 c=13 k=7", "rot d=2 c=8 k=26", "xor d=5 c=2", "mul d=0 c=5", "addc d=6 c=0 imm=0x5c1d235d", "mulc2 d=1 c=6 imm=0x52eb2ecf", "mulc d=8 c=1 imm=0xc0730f2d", "add d=10 c=8", "xor d=13 c=10", "add d=3 c=13", "mul d=12 c=3", "xrot d=10 c=12 k=16", "xrot d=15 c=10 k=21", "rot d=5 c=15 k=14", "mulc2 d=4 c=5 imm=0x7a636847", "add d=6 c=4", "rot d=15 c=6 k=15", "rot d=8 c=15 k=18", "mul d=10 c=8", "add d=1 c=10", "sub d=13 c=1", "xrot d=12 c=13 k=2", "add d=13 c=12", "sub d=14 c=13", "xorc d=5 c=14 imm=0x4b128721", "xor d=9 c=5", "xorc d=1 c=9 imm=0xdb597223", "rot d=5 c=1 k=29", "rot d=1 c=5 k=15", "mulc2 d=9 c=1 imm=0xdad6bd3f", "mul d=8 c=9", "add d=7 c=8", "mul d=9 c=7", "xor d=7 c=9", "xor d=2 c=7", "sub d=13 c=2", "orx d=11 c=13 b=6", "rot d=4 c=11 k=12", "xor d=14 c=4", "mulc d=15 c=14 imm=0xde79981d", "mulc d=7 c=15 imm=0x285c589b", "mul d=8 c=7", "add d=15 c=8", "add d=5 c=15", "xor d=9 c=5", "xorc d=3 c=9 imm=0x44325084", "rot d=2 c=3 k=12", "rot d=12 c=2 k=10", "rot d=1 c=12 k=8", "add d=14 c=1", "xorc d=5 c=14 imm=0x194b2a3c", "xor d=12 c=5", "rot d=10 c=12 k=6", "mulc2 d=11 c=10 imm=0xe1fe8c79", "andx d=0 c=11 b=15", "rot d=7 c=0 k=17", "xor d=2 c=7", "rot d=8 c=2 k=10", "rot d=15 c=8 k=2", "addc d=10 c=15 imm=0xbf36d9bb", "add d=12 c=10", "rot d=7 c=12 k=12", "xorc d=3 c=7 imm=0x60dc6ede", "mulc2 d=7 c=3 imm=0x154bbc1f", "xrot d=9 c=7 k=12", "andx d=7 c=9 b=8", "rot d=1 c=7 k=14", "add d=14 c=1", "xrot d=7 c=14 k=15", "xrot d=12 c=7 k=7", "addc d=8 c=12 imm=0x4ce700ff", "xor d=5 c=8", "add d=1 c=5", "xorc d=15 c=1 imm=0x4cfd0e8b", "add d=14 c=15", "add d=11 c=14", "xor d=13 c=11", "mulc d=3 c=13 imm=0xea89cab7", "xor d=7 c=3", "rot d=8 c=7 k=30", "xor d=3 c=8", "sub d=10 c=3", "mulc2 d=7 c=10 imm=0x32632399", "rot d=2 c=7 k=26", "xor d=6 c=2", "sub d=2 c=6", "mul d=13 c=2", "xor d=7 c=13", "andx d=10 c=7 b=5", "orx d=0 c=10 b=2", "mul d=10 c=0", "addc d=6 c=10 imm=0xca92c16d", "addc d=0 c=6 imm=0x24751e21", "xorc d=13 c=0 imm=0x06baa3b2", "mul d=3 c=13", "sub d=5 c=3", "mulc2 d=14 c=5 imm=0x1cff685f", "add d=8 c=14", "xrot d=10 c=8 k=24", "xor d=12 c=10", "add d=0 c=12", "mulc d=4 c=0 imm=0x8430392b", "xrot d=9 c=4 k=24", "xrot d=2 c=9 k=12", "orx d=1 c=2 b=12", "xorc d=7 c=1 imm=0x54490fa2", "mul d=9 c=7", "rot d=0 c=9 k=20", "orx d=8 c=0 b=7", "mul d=11 c=8", "add d=15 c=11", "addc d=13 c=15 imm=0xa29fa06c", "addc d=4 c=13 imm=0x6856416a", "xor d=3 c=4", "xrot d=8 c=3 k=13", "xor d=12 c=8", "mul d=3 c=12", "andx d=1 c=3 b=4", "xrot d=13 c=1 k=4", "addc d=9 c=13 imm=0x212b6434", "sub d=12 c=9", "mulc d=8 c=12 imm=0xb91c4009", "xorc d=7 c=8 imm=0xbcb896bd", "mul d=12 c=7", "rot d=15 c=12 k=20", "andx d=5 c=15 b=3", "xor d=3 c=5", "xor d=6 c=3", "mulc2 d=2 c=6 imm=0x9e1aba47", "add d=0 c=2", "xrot d=3 c=0 k=17", "xor d=10 c=3", "mulc d=4 c=10 imm=0xd432bf1d", "xorc d=15 c=4 imm=0xc8d68ea4", "rot d=6 c=15 k=25", "xrot d=2 c=6 k=30", "orx d=1 c=2 b=9", "xrot d=4 c=1 k=25", "mulc d=12 c=4 imm=0x0320a6b1", "xor d=3 c=12", "mulc d=13 c=3 imm=0xf03bba6d", "mul d=15 c=13", "add d=12 c=15", "sub d=1 c=12", "add d=9 c=1", "xrot d=12 c=9 k=23", "addc d=10 c=12 imm=0x83f986e6", "mulc d=0 c=10 imm=0xa4cb0d1d", "rot d=7 c=0 k=28", "xorc d=1 c=7 imm=0x9014b7bb", "mulc d=4 c=1 imm=0x272bd217", "add d=0 c=4", "rot d=2 c=0 k=18", "xrot d=12 c=2 k=2", "xor d=14 c=12", "xorc d=9 c=14 imm=0x16ac9a1e", "rot d=2 c=9 k=15", "rot d=1 c=2 k=10", "mulc2 d=4 c=1 imm=0xe0b6e0c3", "rot d=0 c=4 k=25", "add d=15 c=0", "mulc2 d=4 c=15 imm=0x1b6cbd07", "xorc d=5 c=4 imm=0x567146e8", "rot d=4 c=5 k=24", "add d=10 c=4", "mulc2 d=0 c=10 imm=0xe8a3abd1", "addc d=10 c=0 imm=0x5eb953e5", "add d=6 c=10", "xrot d=4 c=6 k=10", "orx d=5 c=4 b=0", "mulc d=1 c=5 imm=0x9a8851e3", "add d=15 c=1", "sub d=3 c=15", "sub d=6 c=3", "xor d=0 c=6", "xorc d=6 c=0 imm=0x8522b09f", "sub d=2 c=6", "xorc d=7 c=2 imm=0x4a7c01dd", "addc d=6 c=7 imm=0x1790f84f", "mulc d=14 c=6 imm=0xe3e9ed8b", "xor d=1 c=14", "sub d=10 c=1", "add d=11 c=10", "mulc2 d=4 c=11 imm=0x6371fb67", "sub d=2 c=4", "add d=14 c=2", "mul d=2 c=14", "andx d=1 c=2 b=9", "rot d=13 c=1 k=12", "rot d=15 c=13 k=26", "mulc d=5 c=15 imm=0xbc5643e1", "add d=14 c=5", "xor d=7 c=14", "mulc d=10 c=7 imm=0x79039a69", "sub d=3 c=10", "sub d=8 c=3", "xor d=14 c=8", "mulc d=13 c=14 imm=0x1b4013ff", "mul d=3 c=13", "mulc2 d=12 c=3 imm=0x309d80d3", "mul d=6 c=12", "xor d=5 c=6", "add d=2 c=5", "rot d=14 c=2 k=6", "xrot d=15 c=14 k=6", "andx d=14 c=15 b=0", "xrot d=3 c=14 k=29", "xorc d=5 c=3 imm=0xa5a0aeff", "sub d=10 c=5", "xrot d=9 c=10 k=23", "mul d=1 c=9", "add d=4 c=1", "orx d=0 c=4 b=1", "xor d=14 c=0", "add d=3 c=14", "xor d=15 c=3", "orx d=6 c=15 b=12", "rot d=7 c=6 k=9", "mulc2 d=0 c=7 imm=0xf76673f3", "andx d=15 c=0 b=4", "xor d=12 c=15", "mulc2 d=6 c=12 imm=0x36c04137", "xorc d=9 c=6 imm=0xaf963084", "mul d=13 c=9", "mul d=11 c=13", "xrot d=8 c=11 k=7", "mulc2 d=13 c=8 imm=0x69f233a3", "add d=3 c=13", "xrot d=1 c=3 k=19", "mulc d=6 c=1 imm=0x0416e137", "xor d=12 c=6", "mulc d=1 c=12 imm=0xca07bafd", "xor d=14 c=1", "orx d=7 c=14 b=2", "mul d=3 c=7", "rot d=11 c=3 k=15", "rot d=8 c=11 k=6", "xrot d=3 c=8 k=15", "rot d=2 c=3 k=28", "xrot d=9 c=2 k=28", "xor d=11 c=9", "xor d=9 c=11", "mulc d=12 c=9 imm=0xbefcfdbb", "add d=6 c=12", "xorc d=2 c=6 imm=0x899a552e", "add d=0 c=2", "xor d=6 c=0", "sub d=5 c=6", "sub d=7 c=5", "orx d=14 c=7 b=10", "addc d=8 c=14 imm=0x0de3dc6b", "add d=10 c=8", "add d=2 c=10", "xrot d=12 c=2 k=31", "mulc d=9 c=12 imm=0x6052a829", "mulc d=7 c=9 imm=0x97670939", "rot d=14 c=7 k=15", "addc d=12 c=14 imm=0x010cd5e8", "rot d=9 c=12 k=2", "xor d=0 c=9", "add d=5 c=0", "mul d=3 c=5", "addc d=15 c=3 imm=0x77f4510d", "rot d=13 c=15 k=6", "xrot d=11 c=13 k=4", "add d=5 c=11", "andx d=9 c=5 b=7", "rot d=1 c=9 k=6", "mul d=6 c=1", "xor d=9 c=6", "xorc d=3 c=9 imm=0xcc2ee068", "xrot d=14 c=3 k=13", "rot d=11 c=14 k=31", "addc d=0 c=11 imm=0x3191cb8f", "andx d=12 c=0 b=1", "orx d=14 c=12 b=13", "mulc d=11 c=14 imm=0x29e0c4c3", "rot d=6 c=11 k=11", "mul d=3 c=6", "add d=6 c=3", "xorc d=13 c=6 imm=0x0e54f612", "xor d=4 c=13", "add d=5 c=4", "rot d=11 c=5 k=16", "mulc2 d=14 c=11 imm=0x37c87275"], + ["xorc d=15 c=0 imm=0xb6c1e90c", "rot d=2 c=15 k=19", "mulc2 d=8 c=2 imm=0x28bc533d", "xor d=5 c=8", "mulc d=6 c=5 imm=0x86d067fb", "xorc d=10 c=6 imm=0x75a5b862", "xorc d=14 c=10 imm=0xd8b962f7", "sub d=8 c=14", "xor d=1 c=8", "xor d=11 c=1", "rot d=6 c=11 k=23", "orx d=4 c=6 b=8", "andx d=5 c=4 b=10", "xor d=2 c=5", "xrot d=5 c=2 k=10", "xorc d=0 c=5 imm=0x3da9ef7e", "xor d=12 c=0", "xorc d=3 c=12 imm=0xfe29da15", "add d=0 c=3", "andx d=5 c=0 b=4", "orx d=7 c=5 b=12", "orx d=9 c=7 b=2", "xor d=14 c=9", "addc d=15 c=14 imm=0xecc0e6cf", "add d=4 c=15", "mulc d=10 c=4 imm=0x71d36d0b", "xorc d=15 c=10 imm=0x3834ef56", "mulc d=11 c=15 imm=0xf3f2126d", "sub d=4 c=11", "add d=5 c=4", "rot d=12 c=5 k=23", "addc d=14 c=12 imm=0xee23cc86", "add d=0 c=14", "xorc d=3 c=0 imm=0x9ff2f793", "add d=8 c=3", "add d=7 c=8", "xorc d=11 c=7 imm=0x9ca003ed", "orx d=15 c=11 b=9", "xrot d=12 c=15 k=17", "xrot d=7 c=12 k=7", "xorc d=5 c=7 imm=0xf6d26d41", "xorc d=15 c=5 imm=0xad445899", "addc d=11 c=15 imm=0x94157a95", "mul d=2 c=11", "add d=10 c=2", "xorc d=4 c=10 imm=0xfb1e1d1e", "mulc d=7 c=4 imm=0xd7d5e433", "addc d=12 c=7 imm=0x4329bd0d", "sub d=15 c=12", "mulc d=0 c=15 imm=0x802ba143", "rot d=2 c=0 k=29", "xrot d=6 c=2 k=17", "rot d=3 c=6 k=25", "xrot d=2 c=3 k=10", "mul d=6 c=2", "rot d=13 c=6 k=21", "mul d=14 c=13", "mulc d=12 c=14 imm=0x5445cbf5", "add d=15 c=12", "addc d=1 c=15 imm=0xdf315f06", "xorc d=5 c=1 imm=0x9aea526c", "add d=15 c=5", "mulc d=1 c=15 imm=0xa5708ab3", "addc d=8 c=1 imm=0x41e6f337", "xor d=5 c=8", "rot d=3 c=5 k=14", "add d=6 c=3", "xrot d=9 c=6 k=12", "add d=4 c=9", "add d=8 c=4", "addc d=1 c=8 imm=0xc618b3f4", "mulc2 d=2 c=1 imm=0x6195bb5f", "xrot d=14 c=2 k=13", "mul d=6 c=14", "mul d=14 c=6", "xorc d=6 c=14 imm=0x00ed6668", "xrot d=14 c=6 k=9", "addc d=10 c=14 imm=0x9e4bdfd0", "xrot d=9 c=10 k=2", "andx d=6 c=9 b=4", "xor d=15 c=6", "add d=12 c=15", "addc d=5 c=12 imm=0x88d2c32a", "mul d=6 c=5", "add d=10 c=6", "addc d=15 c=10 imm=0xf6c730ab", "orx d=6 c=15 b=9", "xrot d=1 c=6 k=8", "mulc d=14 c=1 imm=0xc68fd8b7", "xor d=13 c=14", "add d=2 c=13", "xor d=5 c=2", "add d=6 c=5", "andx d=7 c=6 b=0", "mulc d=14 c=7 imm=0x014b019f", "sub d=10 c=14", "rot d=5 c=10 k=24", "xor d=14 c=5", "addc d=10 c=14 imm=0x0431e88c", "sub d=15 c=10", "mul d=9 c=15", "mulc d=2 c=9 imm=0x237066cf", "mul d=5 c=2", "xorc d=2 c=5 imm=0x4510e4bc", "rot d=5 c=2 k=16", "xor d=10 c=5", "addc d=5 c=10 imm=0xb102c58b", "mul d=12 c=5", "mulc d=0 c=12 imm=0x535043a5", "mulc d=3 c=0 imm=0x1f7a2dff", "mulc d=14 c=3 imm=0xdae8e3c7", "xorc d=12 c=14 imm=0xbc9e9bd9", "orx d=8 c=12 b=14", "rot d=6 c=8 k=6", "mul d=2 c=6", "rot d=3 c=2 k=3", "add d=6 c=3", "sub d=9 c=6", "mulc d=8 c=9 imm=0x7256fab5", "xor d=3 c=8", "xorc d=2 c=3 imm=0x1506dae2", "xor d=11 c=2", "xor d=9 c=11", "xrot d=15 c=9 k=9", "xor d=10 c=15", "rot d=3 c=10 k=3", "sub d=12 c=3", "mulc d=2 c=12 imm=0x91fe8e99", "xor d=6 c=2", "add d=15 c=6", "sub d=1 c=15", "mul d=9 c=1", "addc d=0 c=9 imm=0xb9d5c4ab", "mulc2 d=15 c=0 imm=0xbf261023", "add d=11 c=15", "andx d=3 c=11 b=9", "rot d=0 c=3 k=28", "xor d=14 c=0", "orx d=10 c=14 b=3", "xrot d=14 c=10 k=1", "xor d=10 c=14", "mul d=0 c=10", "mulc d=5 c=0 imm=0x94c8cd23", "xrot d=1 c=5 k=1", "rot d=4 c=1 k=14", "add d=6 c=4", "mulc2 d=7 c=6 imm=0x3498a9b3", "sub d=0 c=7", "add d=4 c=0", "add d=14 c=4", "rot d=15 c=14 k=8", "addc d=11 c=15 imm=0x4a892dac", "xrot d=0 c=11 k=13", "xrot d=15 c=0 k=12", "xorc d=7 c=15 imm=0xd668f578", "sub d=3 c=7", "mul d=8 c=3", "add d=10 c=8", "rot d=8 c=10 k=14", "xrot d=13 c=8 k=8", "xor d=9 c=13", "xor d=15 c=9", "xrot d=4 c=15 k=26", "mul d=8 c=4", "mul d=7 c=8", "mul d=12 c=7", "xor d=1 c=12", "xrot d=0 c=1 k=12", "mulc d=4 c=0 imm=0x9e6913c7", "mulc d=3 c=4 imm=0xff70743f", "xor d=13 c=3", "rot d=4 c=13 k=5", "orx d=15 c=4 b=2", "rot d=7 c=15 k=20", "add d=6 c=7", "xrot d=8 c=6 k=26", "mulc d=5 c=8 imm=0x71b981ef", "andx d=15 c=5 b=0", "addc d=13 c=15 imm=0x211b525a", "addc d=0 c=13 imm=0x235124dc", "mulc d=4 c=0 imm=0x96db8fb9", "rot d=15 c=4 k=10", "add d=13 c=15", "mulc d=4 c=13 imm=0x00f4145f", "andx d=9 c=4 b=1", "xrot d=2 c=9 k=30", "orx d=10 c=2 b=3", "rot d=1 c=10 k=25", "mul d=12 c=1", "mul d=4 c=12", "xorc d=14 c=4 imm=0x23e8ae4f", "sub d=10 c=14", "add d=7 c=10", "mulc2 d=11 c=7 imm=0x28fe7415", "xrot d=9 c=11 k=1", "mulc d=8 c=9 imm=0xf9445edf", "andx d=5 c=8 b=7", "rot d=13 c=5 k=13", "mul d=15 c=13", "xor d=13 c=15", "sub d=1 c=13", "rot d=11 c=1 k=31", "addc d=14 c=11 imm=0xf84dc8ac", "xor d=2 c=14", "sub d=9 c=2", "xrot d=14 c=9 k=5", "xor d=11 c=14", "xorc d=9 c=11 imm=0xec241426", "orx d=15 c=9 b=6", "xor d=1 c=15", "xrot d=5 c=1 k=23", "xor d=12 c=5", "xrot d=7 c=12 k=8", "sub d=15 c=7", "mulc2 d=7 c=15 imm=0x0fbb88d1", "xrot d=8 c=7 k=11", "mulc d=9 c=8 imm=0x61f086f3", "mul d=14 c=9", "add d=11 c=14", "xrot d=5 c=11 k=6", "add d=4 c=5", "xor d=8 c=4", "sub d=3 c=8", "sub d=15 c=3", "orx d=11 c=15 b=1", "xor d=10 c=11", "add d=14 c=10", "orx d=11 c=14 b=4", "sub d=14 c=11", "sub d=0 c=14", "mul d=6 c=0", "rot d=4 c=6 k=1", "xor d=14 c=4", "xrot d=9 c=14 k=29", "xorc d=14 c=9 imm=0x99f79e3c", "xor d=2 c=14", "mul d=8 c=2", "andx d=12 c=8 b=10", "mul d=10 c=12", "orx d=14 c=10 b=9", "mulc2 d=11 c=14 imm=0x451cdab1", "mulc2 d=1 c=11 imm=0x7103d94d", "xor d=6 c=1", "add d=9 c=6", "andx d=3 c=9 b=15", "sub d=0 c=3", "xor d=14 c=0", "addc d=9 c=14 imm=0x89535c2f", "add d=10 c=9", "add d=9 c=10", "add d=13 c=9", "add d=7 c=13", "add d=12 c=7", "addc d=8 c=12 imm=0xa6e4da0c", "mul d=14 c=8", "orx d=4 c=14 b=0", "mul d=6 c=4", "add d=13 c=6", "xor d=2 c=13", "xor d=8 c=2", "mulc d=4 c=8 imm=0x6209b3c5", "add d=15 c=4", "sub d=5 c=15", "rot d=15 c=5 k=27", "rot d=2 c=15 k=29", "sub d=10 c=2", "xrot d=2 c=10 k=21", "sub d=4 c=2", "add d=0 c=4", "mul d=4 c=0", "mul d=1 c=4", "xor d=11 c=1", "xrot d=8 c=11 k=3", "addc d=6 c=8 imm=0xc67c23a1", "mulc2 d=1 c=6 imm=0x033df6bf", "mulc d=8 c=1 imm=0xb5308d7d", "sub d=6 c=8", "mul d=9 c=6", "sub d=12 c=9", "orx d=1 c=12 b=4", "orx d=2 c=1 b=7", "orx d=7 c=2 b=0", "mul d=3 c=7", "add d=5 c=3", "xrot d=10 c=5 k=20", "rot d=5 c=10 k=21", "mul d=14 c=5", "xor d=6 c=14", "add d=14 c=6", "xorc d=7 c=14 imm=0x47ba5e42", "xorc d=4 c=7 imm=0xc5c5e46f", "xrot d=10 c=4 k=23", "sub d=3 c=10", "xrot d=8 c=3 k=12", "xorc d=15 c=8 imm=0xf988e79d", "add d=1 c=15", "orx d=8 c=1 b=15", "rot d=13 c=8 k=10", "add d=4 c=13", "rot d=8 c=4 k=24", "add d=6 c=8", "mul d=12 c=6", "xor d=14 c=12", "orx d=15 c=14 b=4", "addc d=10 c=15 imm=0xad0c3a1c", "xor d=8 c=10", "xorc d=10 c=8 imm=0x0985d0ff", "mulc d=3 c=10 imm=0xd3d14647", "xor d=12 c=3", "mulc2 d=0 c=12 imm=0xba477023", "xor d=8 c=0", "xor d=14 c=8", "xrot d=12 c=14 k=30", "xorc d=8 c=12 imm=0x749d3378", "sub d=10 c=8", "add d=2 c=10", "mulc2 d=11 c=2 imm=0xb9714083", "mul d=5 c=11", "andx d=15 c=5 b=14", "add d=6 c=15", "mulc d=5 c=6 imm=0x5673a9bf", "andx d=1 c=5 b=0", "xorc d=12 c=1 imm=0x10153309", "add d=4 c=12", "mulc d=10 c=4 imm=0xd28d9ef9", "mulc2 d=14 c=10 imm=0xc16dc36d", "xorc d=15 c=14 imm=0x0609a343", "addc d=10 c=15 imm=0xccc127ad", "andx d=6 c=10 b=7", "xrot d=11 c=6 k=29", "xor d=7 c=11", "rot d=0 c=7 k=21", "add d=15 c=0", "add d=14 c=15", "xor d=8 c=14", "xrot d=15 c=8 k=7", "xor d=10 c=15", "add d=13 c=10", "orx d=5 c=13 b=0", "andx d=0 c=5 b=9", "add d=2 c=0", "mul d=0 c=2", "mulc d=2 c=0 imm=0xadbfbcf9", "rot d=8 c=2 k=7", "xor d=5 c=8", "xorc d=7 c=5 imm=0x11a571cf", "xor d=10 c=7", "mulc d=0 c=10 imm=0x012ab04f", "addc d=10 c=0 imm=0xe41f365b", "xorc d=9 c=10 imm=0x914568ad", "mul d=15 c=9", "xorc d=14 c=15 imm=0x535f623d", "orx d=11 c=14 b=3", "xor d=14 c=11", "rot d=10 c=14 k=3", "sub d=9 c=10", "mulc d=4 c=9 imm=0xb4b4f5c7", "add d=1 c=4", "sub d=14 c=1", "andx d=7 c=14 b=4", "andx d=15 c=7 b=13", "rot d=9 c=15 k=23", "sub d=1 c=9", "mulc d=8 c=1 imm=0x17a6461d", "xor d=3 c=8", "xor d=9 c=3", "mulc2 d=2 c=9 imm=0x7c061aad", "add d=14 c=2", "addc d=9 c=14 imm=0x8c896e71", "xrot d=15 c=9 k=17", "xor d=0 c=15", "mulc2 d=6 c=0 imm=0x0884864d", "orx d=7 c=6 b=10", "xorc d=9 c=7 imm=0xe1a426fe", "rot d=11 c=9 k=1", "mul d=14 c=11", "xorc d=12 c=14 imm=0x9b63a170", "sub d=1 c=12", "andx d=3 c=1 b=14", "mulc2 d=9 c=3 imm=0xe67ddf4d", "xrot d=1 c=9 k=13", "xor d=7 c=1", "mulc d=13 c=7 imm=0x55b6aa85", "mul d=3 c=13", "rot d=4 c=3 k=8", "mul d=2 c=4", "xor d=15 c=2", "xor d=1 c=15", "xor d=12 c=1", "mul d=4 c=12", "andx d=13 c=4 b=5", "xor d=6 c=13", "sub d=15 c=6", "mul d=2 c=15", "rot d=14 c=2 k=2", "rot d=10 c=14 k=12", "mulc d=8 c=10 imm=0x820a80d3", "mul d=11 c=8", "xrot d=12 c=11 k=4", "andx d=1 c=12 b=10", "addc d=12 c=1 imm=0x179d4563", "xorc d=2 c=12 imm=0xf1c8d57c", "mulc2 d=11 c=2 imm=0x27fd820f", "mulc d=7 c=11 imm=0x9b5d3177", "orx d=8 c=7 b=10", "rot d=9 c=8 k=28", "rot d=2 c=9 k=9", "rot d=10 c=2 k=17", "xrot d=8 c=10 k=19", "xorc d=2 c=8 imm=0xdf4a6b10", "xorc d=15 c=2 imm=0xce02ff19", "add d=7 c=15", "addc d=5 c=7 imm=0x43b32c96", "xor d=14 c=5", "mulc2 d=2 c=14 imm=0xdcd59df9", "mulc2 d=13 c=2 imm=0x2da5f733", "xrot d=4 c=13 k=1", "rot d=10 c=4 k=3", "andx d=15 c=10 b=8", "sub d=5 c=15", "add d=8 c=5", "xrot d=14 c=8 k=24", "rot d=7 c=14 k=10", "orx d=12 c=7 b=9", "xrot d=14 c=12 k=25", "add d=11 c=14", "xorc d=13 c=11 imm=0x292b93c0", "orx d=12 c=13 b=3", "xrot d=7 c=12 k=19", "rot d=15 c=7 k=15", "add d=5 c=15", "addc d=4 c=5 imm=0xf240675b", "add d=2 c=4", "xrot d=11 c=2 k=26", "addc d=4 c=11 imm=0x58805483", "mul d=7 c=4", "add d=0 c=7", "xor d=5 c=0", "add d=4 c=5", "rot d=12 c=4 k=27", "addc d=2 c=12 imm=0x9c60169e", "add d=3 c=2", "mul d=12 c=3", "xor d=15 c=12", "xrot d=11 c=15 k=28", "add d=2 c=11", "sub d=9 c=2", "xor d=12 c=9", "addc d=7 c=12 imm=0x70e6e273", "xrot d=3 c=7 k=29", "sub d=10 c=3", "andx d=11 c=10 b=1", "xrot d=1 c=11 k=5", "add d=13 c=1", "sub d=6 c=13", "sub d=4 c=6", "xrot d=6 c=4 k=15", "rot d=11 c=6 k=9", "xor d=0 c=11", "rot d=1 c=0 k=17", "addc d=2 c=1 imm=0xc83d763a", "addc d=13 c=2 imm=0xc18aa580", "xrot d=6 c=13 k=12", "mul d=4 c=6", "rot d=2 c=4 k=13", "xor d=1 c=2", "xrot d=3 c=1 k=21", "add d=6 c=3", "mulc d=15 c=6 imm=0x228e4019", "mul d=13 c=15", "xor d=7 c=13", "addc d=4 c=7 imm=0x59e10c11", "rot d=15 c=4 k=25", "orx d=2 c=15 b=3", "addc d=15 c=2 imm=0xa95ffd72", "xor d=5 c=15", "mul d=6 c=5", "addc d=15 c=6 imm=0x95d25be9", "sub d=5 c=15", "xorc d=1 c=5 imm=0x709c86b4", "xrot d=9 c=1 k=27", "addc d=15 c=9 imm=0xac8ad479", "xor d=4 c=15", "mulc2 d=6 c=4 imm=0x0571185b", "rot d=9 c=6 k=13", "xor d=14 c=9", "add d=9 c=14", "orx d=2 c=9 b=5", "orx d=15 c=2 b=14", "xrot d=3 c=15 k=13", "sub d=5 c=3", "orx d=15 c=5 b=6", "mul d=11 c=15", "sub d=8 c=11", "xrot d=12 c=8 k=27", "addc d=3 c=12 imm=0xdc6b4196", "xorc d=8 c=3 imm=0x274048d2", "mul d=2 c=8", "add d=9 c=2", "xrot d=14 c=9 k=2", "xorc d=2 c=14 imm=0xb343b907", "xrot d=6 c=2 k=9", "rot d=10 c=6 k=30", "xor d=14 c=10", "addc d=3 c=14 imm=0xa61ab1cb", "xor d=8 c=3", "xor d=6 c=8", "andx d=8 c=6 b=13", "add d=5 c=8", "xor d=0 c=5", "xorc d=5 c=0 imm=0x70e371ac", "addc d=12 c=5 imm=0x0375455e", "mul d=9 c=12", "sub d=12 c=9", "xor d=13 c=12", "mul d=11 c=13", "mulc d=0 c=11 imm=0xc8207715", "addc d=8 c=0 imm=0x30e154a7", "andx d=11 c=8 b=14", "rot d=2 c=11 k=28", "rot d=7 c=2 k=4", "xor d=6 c=7", "orx d=8 c=6 b=3", "mul d=10 c=8", "addc d=13 c=10 imm=0xa50fe152", "add d=4 c=13", "addc d=6 c=4 imm=0x5efa53b9", "sub d=7 c=6", "mul d=9 c=7", "xorc d=0 c=9 imm=0xc117bdb1", "xorc d=1 c=0 imm=0xfb4c4c7f", "addc d=9 c=1 imm=0x40542f12", "andx d=14 c=9 b=4", "sub d=8 c=14", "orx d=0 c=8 b=5", "add d=14 c=0", "mulc d=3 c=14 imm=0x03c3c7b3", "add d=1 c=3", "xorc d=5 c=1 imm=0x1db7ba5d", "sub d=15 c=5", "addc d=13 c=15 imm=0x31cd0b01", "xorc d=4 c=13 imm=0xfe8d5080", "andx d=7 c=4 b=10", "sub d=15 c=7", "mulc d=11 c=15 imm=0x7a957f49", "xor d=9 c=11", "mul d=3 c=9", "add d=9 c=3", "mul d=11 c=9", "xor d=2 c=11", "rot d=5 c=2 k=5", "xor d=14 c=5", "add d=10 c=14", "rot d=3 c=10 k=9", "mul d=15 c=3", "add d=3 c=15", "add d=14 c=3", "mulc d=12 c=14 imm=0x74df9daf", "xorc d=13 c=12 imm=0x6234d2f0", "mul d=7 c=13", "andx d=0 c=7 b=8", "xrot d=6 c=0 k=30", "add d=12 c=6", "addc d=2 c=12 imm=0x7878283c", "mulc d=3 c=2 imm=0xc395c285", "addc d=2 c=3 imm=0x0da9f095", "mulc d=15 c=2 imm=0x0a11adab", "sub d=3 c=15", "xrot d=0 c=3 k=29", "xor d=10 c=0", "mul d=8 c=10", "addc d=15 c=8 imm=0x9a71469f", "add d=14 c=15", "xrot d=2 c=14 k=22", "mul d=8 c=2", "mul d=2 c=8", "mulc2 d=14 c=2 imm=0xf8f0a631", "add d=11 c=14", "add d=0 c=11", "mulc2 d=6 c=0 imm=0xaa299f0f", "xorc d=0 c=6 imm=0xd0857982", "xrot d=10 c=0 k=27", "mul d=12 c=10", "xor d=2 c=12", "add d=0 c=2", "xor d=3 c=0", "mulc d=2 c=3 imm=0xfd0d9051", "xrot d=9 c=2 k=18", "xrot d=7 c=9 k=17", "xor d=5 c=7", "mulc d=10 c=5 imm=0xde9ff341", "xorc d=9 c=10 imm=0xb2e1d8d8", "add d=12 c=9", "xor d=6 c=12", "add d=9 c=6", "mulc d=4 c=9 imm=0x3420a8a9", "sub d=14 c=4", "xorc d=15 c=14 imm=0x995ab330", "xrot d=4 c=15 k=17", "xor d=6 c=4", "mulc d=8 c=6 imm=0xa3e9c281", "mulc d=2 c=8 imm=0xb3f79451", "add d=4 c=2", "mul d=8 c=4", "xor d=1 c=8", "mulc d=9 c=1 imm=0x4a9cfe2b", "xor d=4 c=9", "sub d=12 c=4", "add d=2 c=12", "xrot d=5 c=2 k=25", "sub d=7 c=5", "sub d=2 c=7", "rot d=9 c=2 k=7", "andx d=7 c=9 b=12", "add d=8 c=7", "xor d=5 c=8", "xrot d=7 c=5 k=3", "xrot d=6 c=7 k=13", "add d=14 c=6", "xrot d=1 c=14 k=27", "rot d=13 c=1 k=21", "xor d=15 c=13", "xorc d=13 c=15 imm=0x40932bd0", "orx d=8 c=13 b=6", "add d=6 c=8", "mul d=7 c=6", "rot d=3 c=7 k=16", "sub d=14 c=3", "addc d=11 c=14 imm=0x2ba58291", "addc d=10 c=11 imm=0x25cc7cba", "rot d=3 c=10 k=25", "xrot d=5 c=3 k=8", "andx d=12 c=5 b=7", "mul d=14 c=12", "mul d=6 c=14", "xor d=0 c=6", "xrot d=7 c=0 k=8", "add d=10 c=7", "mul d=8 c=10", "mulc d=9 c=8 imm=0x1669b1c1", "andx d=12 c=9 b=13", "addc d=14 c=12 imm=0xda1c472d", "add d=5 c=14", "xrot d=1 c=5 k=14", "mulc d=15 c=1 imm=0x8d0bb03b", "addc d=10 c=15 imm=0x3c561da4", "sub d=2 c=10", "xorc d=14 c=2 imm=0xea52ad39", "addc d=12 c=14 imm=0x16903f58", "sub d=1 c=12", "xrot d=6 c=1 k=25", "mulc d=7 c=6 imm=0xb4a42f9b", "xor d=1 c=7", "andx d=8 c=1 b=4", "xorc d=13 c=8 imm=0xb1ef97a0", "xrot d=4 c=13 k=19", "andx d=6 c=4 b=10", "sub d=3 c=6", "add d=4 c=3", "mul d=12 c=4", "rot d=8 c=12 k=18", "sub d=2 c=8", "mul d=3 c=2", "mul d=0 c=3", "xor d=6 c=0", "rot d=9 c=6 k=28", "mulc d=12 c=9 imm=0x8a328161", "xor d=7 c=12", "mulc d=11 c=7 imm=0x59795b43", "rot d=15 c=11 k=9", "addc d=8 c=15 imm=0x7c995d60", "add d=3 c=8", "mulc2 d=4 c=3 imm=0xfa1378ab", "mul d=3 c=4", "sub d=5 c=3", "orx d=1 c=5 b=11", "rot d=7 c=1 k=24", "mulc2 d=2 c=7 imm=0x9acc1327", "sub d=12 c=2", "xrot d=13 c=12 k=6", "xor d=8 c=13", "sub d=15 c=8", "mul d=0 c=15", "mul d=4 c=0", "sub d=14 c=4", "xor d=15 c=14", "mul d=14 c=15", "sub d=3 c=14", "xrot d=14 c=3 k=30", "add d=9 c=14", "mul d=7 c=9", "sub d=15 c=7", "xor d=14 c=15", "xrot d=2 c=14 k=23", "xrot d=5 c=2 k=19", "mul d=4 c=5", "mul d=7 c=4", "xrot d=9 c=7 k=15", "add d=13 c=9", "mul d=11 c=13", "mulc d=5 c=11 imm=0xde859b27", "mulc2 d=11 c=5 imm=0xb564c36b", "xor d=10 c=11", "mul d=9 c=10", "mulc d=14 c=9 imm=0x8d89e53d", "xrot d=15 c=14 k=13", "mulc d=8 c=15 imm=0xe37283af", "xor d=14 c=8", "xor d=12 c=14", "orx d=5 c=12 b=6", "add d=13 c=5", "mul d=9 c=13", "mul d=14 c=9", "mulc2 d=10 c=14 imm=0x5c918de7", "xorc d=3 c=10 imm=0x6d738cda", "add d=12 c=3", "mulc d=9 c=12 imm=0xc4d29b63", "mul d=2 c=9", "mulc d=6 c=2 imm=0x32887aa7", "xor d=11 c=6", "addc d=9 c=11 imm=0x1e9643eb", "rot d=12 c=9 k=2", "sub d=11 c=12", "xrot d=1 c=11 k=18", "xor d=2 c=1", "rot d=15 c=2 k=14", "xrot d=12 c=15 k=18", "xor d=13 c=12", "xor d=1 c=13", "andx d=5 c=1 b=3", "add d=12 c=5", "xorc d=11 c=12 imm=0xf49f879e", "xor d=15 c=11", "add d=12 c=15", "mul d=4 c=12", "xrot d=11 c=4 k=18"], + ["add d=3 c=0", "mulc d=6 c=3 imm=0xeb8c24a9", "mulc d=5 c=6 imm=0xec704d07", "orx d=10 c=5 b=14", "xorc d=14 c=10 imm=0x62c5c9a6", "orx d=8 c=14 b=1", "sub d=9 c=8", "orx d=11 c=9 b=13", "andx d=14 c=11 b=13", "rot d=15 c=14 k=21", "mul d=13 c=15", "andx d=11 c=13 b=7", "xrot d=0 c=11 k=24", "mul d=9 c=0", "mulc2 d=14 c=9 imm=0xab36a85d", "mulc2 d=0 c=14 imm=0xa839c927", "mul d=4 c=0", "xorc d=0 c=4 imm=0x83d1d8a6", "mulc d=3 c=0 imm=0x54110efd", "add d=13 c=3", "xrot d=12 c=13 k=19", "mulc d=5 c=12 imm=0xbcdfd83f", "mulc2 d=3 c=5 imm=0xb0a88cb1", "rot d=9 c=3 k=21", "mulc d=7 c=9 imm=0x643041d5", "addc d=0 c=7 imm=0x014758c4", "mulc d=5 c=0 imm=0x582df671", "mulc2 d=15 c=5 imm=0x31ec0f8d", "rot d=11 c=15 k=26", "xrot d=13 c=11 k=6", "xorc d=4 c=13 imm=0xb0a4a410", "mul d=5 c=4", "add d=9 c=5", "xor d=1 c=9", "xorc d=9 c=1 imm=0xc0bebcdf", "xor d=2 c=9", "add d=1 c=2", "mulc d=13 c=1 imm=0x71bad59d", "sub d=10 c=13", "add d=6 c=10", "mulc2 d=9 c=6 imm=0x79718b5f", "mulc d=2 c=9 imm=0x12ef487d", "xor d=10 c=2", "xrot d=2 c=10 k=21", "mul d=11 c=2", "xrot d=9 c=11 k=16", "mulc d=2 c=9 imm=0x56756b3f", "xrot d=10 c=2 k=2", "add d=6 c=10", "mulc2 d=7 c=6 imm=0x0b4e6385", "add d=10 c=7", "xor d=13 c=10", "sub d=5 c=13", "xor d=14 c=5", "andx d=11 c=14 b=0", "mulc2 d=6 c=11 imm=0x4fd7e53d", "mul d=1 c=6", "add d=15 c=1", "xor d=12 c=15", "add d=10 c=12", "xrot d=0 c=10 k=2", "xor d=7 c=0", "xorc d=14 c=7 imm=0x2a2f99f7", "mul d=0 c=14", "andx d=7 c=0 b=1", "xor d=4 c=7", "add d=13 c=4", "mulc d=0 c=13 imm=0x36833905", "sub d=5 c=0", "xrot d=3 c=5 k=22", "rot d=9 c=3 k=12", "xor d=14 c=9", "addc d=13 c=14 imm=0xe3bd2b0f", "addc d=12 c=13 imm=0x4413899e", "xor d=10 c=12", "xor d=1 c=10", "rot d=10 c=1 k=31", "mulc2 d=8 c=10 imm=0xf8854e6d", "xorc d=2 c=8 imm=0x1391c2f2", "rot d=4 c=2 k=26", "xorc d=7 c=4 imm=0xb7b8bc86", "mul d=3 c=7", "andx d=1 c=3 b=4", "xor d=13 c=1", "sub d=1 c=13", "add d=10 c=1", "xrot d=2 c=10 k=5", "addc d=6 c=2 imm=0x4e72cc89", "andx d=12 c=6 b=1", "sub d=0 c=12", "mulc d=6 c=0 imm=0xfdbe52d7", "sub d=1 c=6", "rot d=8 c=1 k=30", "add d=5 c=8", "andx d=8 c=5 b=13", "orx d=15 c=8 b=1", "mul d=12 c=15", "mul d=15 c=12", "add d=2 c=15", "orx d=5 c=2 b=6", "orx d=6 c=5 b=4", "xrot d=14 c=6 k=8", "mul d=0 c=14", "addc d=5 c=0 imm=0x09c67ebe", "xorc d=15 c=5 imm=0x156bc1cc", "rot d=4 c=15 k=28", "add d=7 c=4", "xor d=8 c=7", "mul d=6 c=8", "xrot d=4 c=6 k=27", "xor d=8 c=4", "mulc d=15 c=8 imm=0xa06ef0ed", "xrot d=13 c=15 k=21", "xrot d=7 c=13 k=7", "mulc d=9 c=7 imm=0x6d635cb5", "add d=15 c=9", "sub d=14 c=15", "xrot d=7 c=14 k=28", "rot d=0 c=7 k=9", "xor d=8 c=0", "sub d=4 c=8", "rot d=15 c=4 k=6", "xrot d=11 c=15 k=15", "sub d=7 c=11", "mulc d=12 c=7 imm=0x01fed389", "add d=8 c=12", "sub d=14 c=8", "xrot d=1 c=14 k=28", "mul d=5 c=1", "add d=12 c=5", "add d=14 c=12", "xrot d=10 c=14 k=3", "mulc d=5 c=10 imm=0xad88f2d5", "add d=1 c=5", "xorc d=11 c=1 imm=0x77926639", "xor d=9 c=11", "sub d=12 c=9", "mulc2 d=8 c=12 imm=0xfa22d721", "xorc d=0 c=8 imm=0xe9e4f8ed", "rot d=5 c=0 k=17", "add d=11 c=5", "xor d=1 c=11", "xorc d=13 c=1 imm=0xfaae7919", "orx d=1 c=13 b=0", "xrot d=9 c=1 k=22", "mul d=3 c=9", "xor d=10 c=3", "sub d=5 c=10", "add d=2 c=5", "xrot d=14 c=2 k=5", "xor d=4 c=14", "mul d=5 c=4", "mul d=4 c=5", "xrot d=5 c=4 k=21", "mulc d=15 c=5 imm=0x34c09009", "mul d=8 c=15", "andx d=12 c=8 b=13", "add d=4 c=12", "addc d=12 c=4 imm=0xe0c44ae5", "rot d=8 c=12 k=12", "xrot d=12 c=8 k=11", "xor d=2 c=12", "mul d=14 c=2", "rot d=0 c=14 k=18", "addc d=13 c=0 imm=0x7a0818e1", "rot d=12 c=13 k=2", "andx d=8 c=12 b=1", "xor d=6 c=8", "mul d=8 c=6", "add d=14 c=8", "xrot d=9 c=14 k=7", "xor d=14 c=9", "xrot d=9 c=14 k=2", "xor d=12 c=9", "xorc d=3 c=12 imm=0xfaa7ba68", "rot d=10 c=3 k=26", "xorc d=4 c=10 imm=0x69fb8372", "xor d=8 c=4", "mulc d=14 c=8 imm=0xd0560d4f", "xor d=5 c=14", "mul d=0 c=5", "andx d=10 c=0 b=13", "add d=7 c=10", "mulc2 d=8 c=7 imm=0xf397c40d", "xorc d=4 c=8 imm=0x8bf8d86a", "xorc d=13 c=4 imm=0x8bc1b817", "rot d=0 c=13 k=28", "add d=4 c=0", "xor d=10 c=4", "add d=12 c=10", "xrot d=0 c=12 k=18", "mulc d=1 c=0 imm=0x587d6993", "rot d=10 c=1 k=14", "xorc d=3 c=10 imm=0xe428141a", "mul d=13 c=3", "xrot d=12 c=13 k=22", "sub d=14 c=12", "sub d=1 c=14", "rot d=6 c=1 k=31", "xrot d=11 c=6 k=16", "mulc2 d=6 c=11 imm=0xd2da54cd", "xrot d=12 c=6 k=8", "addc d=4 c=12 imm=0x6e5c8780", "xorc d=15 c=4 imm=0x437bad36", "rot d=9 c=15 k=7", "mulc2 d=11 c=9 imm=0x68e0eacb", "add d=6 c=11", "sub d=5 c=6", "andx d=12 c=5 b=10", "mulc d=13 c=12 imm=0x613ad747", "addc d=2 c=13 imm=0x16b1a53d", "mul d=3 c=2", "xrot d=14 c=3 k=13", "addc d=15 c=14 imm=0x33619f2e", "xor d=6 c=15", "rot d=15 c=6 k=24", "add d=12 c=15", "xrot d=10 c=12 k=5", "add d=9 c=10", "mul d=4 c=9", "xor d=6 c=4", "sub d=13 c=6", "mul d=1 c=13", "mul d=11 c=1", "mul d=7 c=11", "sub d=13 c=7", "mulc d=0 c=13 imm=0xfeca92dd", "xrot d=9 c=0 k=24", "andx d=14 c=9 b=10", "sub d=0 c=14", "xor d=5 c=0", "xor d=9 c=5", "mulc d=5 c=9 imm=0xe0456a5d", "mul d=11 c=5", "xrot d=10 c=11 k=29", "xrot d=11 c=10 k=24", "orx d=0 c=11 b=15", "xorc d=2 c=0 imm=0x4625da37", "xrot d=6 c=2 k=26", "sub d=3 c=6", "add d=9 c=3", "andx d=4 c=9 b=12", "mul d=7 c=4", "sub d=1 c=7", "sub d=3 c=1", "xrot d=2 c=3 k=23", "mulc d=6 c=2 imm=0x3bbae9d3", "xrot d=1 c=6 k=10", "xor d=8 c=1", "mulc d=15 c=8 imm=0xb5172567", "add d=3 c=15", "andx d=0 c=3 b=5", "mulc d=2 c=0 imm=0xbfe80ff1", "sub d=14 c=2", "sub d=6 c=14", "xrot d=0 c=6 k=24", "mulc2 d=10 c=0 imm=0x965ee7eb", "sub d=15 c=10", "add d=0 c=15", "add d=4 c=0", "rot d=3 c=4 k=14", "orx d=12 c=3 b=9", "xrot d=5 c=12 k=3", "mul d=9 c=5", "add d=5 c=9", "mulc d=14 c=5 imm=0xb64f271d", "sub d=9 c=14", "mul d=8 c=9", "mulc d=3 c=8 imm=0x69f51253", "sub d=13 c=3", "xorc d=12 c=13 imm=0x8ee490b4", "xrot d=13 c=12 k=27", "xorc d=14 c=13 imm=0xbcfac44e", "add d=15 c=14", "rot d=1 c=15 k=6", "add d=14 c=1", "xrot d=6 c=14 k=9", "orx d=10 c=6 b=4", "mul d=6 c=10", "rot d=13 c=6 k=15", "rot d=8 c=13 k=21", "sub d=3 c=8", "xrot d=12 c=3 k=9", "addc d=10 c=12 imm=0x346fb7ee", "sub d=3 c=10", "addc d=12 c=3 imm=0xc936ca56", "sub d=3 c=12", "rot d=5 c=3 k=2", "xor d=11 c=5", "xorc d=12 c=11 imm=0x46abb8ff", "add d=10 c=12", "rot d=2 c=10 k=11", "rot d=11 c=2 k=31", "orx d=7 c=11 b=4", "xorc d=3 c=7 imm=0x8c92b860", "add d=6 c=3", "mul d=11 c=6", "rot d=6 c=11 k=14", "xrot d=8 c=6 k=1", "rot d=9 c=8 k=22", "xor d=5 c=9", "xorc d=9 c=5 imm=0x6d49ae98", "mul d=12 c=9", "xor d=0 c=12", "rot d=5 c=0 k=1", "mulc2 d=10 c=5 imm=0xfceded15", "xor d=6 c=10", "add d=7 c=6", "rot d=10 c=7 k=26", "add d=13 c=10", "andx d=15 c=13 b=10", "xorc d=10 c=15 imm=0x10494cd6", "mulc2 d=13 c=10 imm=0x043625d1", "mul d=5 c=13", "xrot d=7 c=5 k=5", "mulc d=2 c=7 imm=0x1276600b", "mulc d=8 c=2 imm=0xac53054b", "xorc d=10 c=8 imm=0xd5306663", "add d=15 c=10", "mul d=8 c=15", "mulc d=0 c=8 imm=0x12dd02db", "xrot d=1 c=0 k=29", "xrot d=4 c=1 k=12", "rot d=13 c=4 k=21", "mulc d=4 c=13 imm=0xd9d84edd", "add d=2 c=4", "sub d=12 c=2", "xorc d=6 c=12 imm=0xa6690db7", "add d=14 c=6", "addc d=5 c=14 imm=0x3d839e2b", "xrot d=12 c=5 k=18", "andx d=10 c=12 b=9", "mulc d=14 c=10 imm=0x8735918d", "xrot d=0 c=14 k=25", "addc d=14 c=0 imm=0x4032aa8d", "rot d=6 c=14 k=6", "xorc d=1 c=6 imm=0x2c453b82", "mulc d=0 c=1 imm=0x2a9abf35", "sub d=2 c=0", "andx d=4 c=2 b=11", "mul d=2 c=4", "xor d=5 c=2", "xrot d=6 c=5 k=17", "xorc d=14 c=6 imm=0xb98cf2ee", "xor d=0 c=14", "addc d=12 c=0 imm=0x37fc2a78", "add d=10 c=12", "mulc d=12 c=10 imm=0xb13a0e53", "mulc d=9 c=12 imm=0x59d4dc61", "addc d=10 c=9 imm=0xed0d9cec", "rot d=6 c=10 k=27", "xor d=10 c=6", "addc d=1 c=10 imm=0x38911ae4", "rot d=2 c=1 k=4", "orx d=3 c=2 b=6", "mulc2 d=15 c=3 imm=0xa10c5147", "rot d=9 c=15 k=22", "sub d=3 c=9", "xorc d=4 c=3 imm=0x09b8cee2", "orx d=13 c=4 b=8", "sub d=14 c=13", "xorc d=10 c=14 imm=0xde5b028d", "mul d=14 c=10", "addc d=4 c=14 imm=0xbebd25ff", "xor d=11 c=4", "add d=15 c=11", "xorc d=3 c=15 imm=0x0157f354", "mulc d=2 c=3 imm=0x2e6b681d", "sub d=15 c=2", "andx d=0 c=15 b=4", "orx d=11 c=0 b=7", "xrot d=9 c=11 k=28", "andx d=1 c=9 b=5", "mulc d=2 c=1 imm=0x8c67acb5", "xrot d=9 c=2 k=15", "orx d=5 c=9 b=14", "add d=7 c=5", "orx d=10 c=7 b=15", "xrot d=12 c=10 k=12", "mulc d=10 c=12 imm=0x8321a9ed", "xorc d=15 c=10 imm=0x2bb47d41", "addc d=1 c=15 imm=0xf55a878d", "xorc d=3 c=1 imm=0x5f495580", "add d=12 c=3", "sub d=15 c=12", "add d=10 c=15", "xor d=14 c=10", "mulc d=12 c=14 imm=0x6982d931", "xorc d=6 c=12 imm=0x5a0647a9", "xor d=3 c=6", "xrot d=11 c=3 k=28", "rot d=6 c=11 k=9", "rot d=9 c=6 k=17", "xrot d=15 c=9 k=28", "xor d=13 c=15", "addc d=2 c=13 imm=0x161113b3", "xorc d=5 c=2 imm=0x51604bb3", "rot d=13 c=5 k=20", "addc d=7 c=13 imm=0x485a1932", "sub d=14 c=7", "andx d=12 c=14 b=3", "rot d=14 c=12 k=29", "sub d=7 c=14", "xor d=9 c=7", "andx d=14 c=9 b=12", "mulc d=8 c=14 imm=0xa3da88b9", "mulc d=6 c=8 imm=0xdd3e9ca3", "xor d=12 c=6", "orx d=4 c=12 b=13", "mulc d=13 c=4 imm=0x0658106f", "mulc d=10 c=13 imm=0x49f6cb31", "xorc d=3 c=10 imm=0x3342d583", "rot d=13 c=3 k=20", "xorc d=14 c=13 imm=0xc5f67216", "mulc d=4 c=14 imm=0xc7b5f0fd", "mulc d=2 c=4 imm=0xfec902c3", "add d=10 c=2", "andx d=5 c=10 b=8", "xor d=2 c=5", "xor d=11 c=2", "xorc d=0 c=11 imm=0x8646d6d8", "addc d=13 c=0 imm=0x4fc0a99f", "mulc d=10 c=13 imm=0x34655acf", "rot d=12 c=10 k=15", "rot d=3 c=12 k=31", "xorc d=11 c=3 imm=0xece30db7", "addc d=13 c=11 imm=0x723a0b0e", "sub d=14 c=13", "add d=1 c=14", "xor d=10 c=1", "mul d=12 c=10", "xor d=4 c=12", "xor d=13 c=4", "add d=0 c=13", "sub d=4 c=0", "mul d=5 c=4", "add d=14 c=5", "mulc d=15 c=14 imm=0xca24c253", "xor d=0 c=15", "xrot d=8 c=0 k=3", "mulc d=13 c=8 imm=0x4c689903", "xor d=3 c=13", "xor d=5 c=3", "addc d=4 c=5 imm=0xd0e100c0", "andx d=9 c=4 b=6", "xrot d=10 c=9 k=27", "mulc2 d=0 c=10 imm=0xec7a3889", "sub d=3 c=0", "xorc d=1 c=3 imm=0x61331fd7", "xrot d=9 c=1 k=15", "xor d=0 c=9", "addc d=7 c=0 imm=0xa7848bac", "add d=11 c=7", "xrot d=2 c=11 k=6", "sub d=11 c=2", "sub d=3 c=11", "xor d=13 c=3", "mulc d=7 c=13 imm=0xd454fc59", "andx d=13 c=7 b=1", "addc d=9 c=13 imm=0xdaba595a", "xorc d=11 c=9 imm=0x0dbe4c62", "sub d=6 c=11", "mulc2 d=7 c=6 imm=0x64236413", "xrot d=8 c=7 k=19", "mul d=10 c=8", "add d=7 c=10", "add d=1 c=7", "mul d=5 c=1", "xor d=14 c=5", "xrot d=10 c=14 k=24", "mulc d=8 c=10 imm=0x11582fa5", "sub d=0 c=8", "xorc d=3 c=0 imm=0xe88102d4", "rot d=5 c=3 k=16", "xrot d=2 c=5 k=27", "rot d=3 c=2 k=1", "sub d=4 c=3", "rot d=0 c=4 k=24", "xrot d=3 c=0 k=10", "add d=12 c=3", "xrot d=8 c=12 k=24", "rot d=9 c=8 k=31", "sub d=7 c=9", "xor d=10 c=7", "orx d=4 c=10 b=2", "xor d=5 c=4", "addc d=1 c=5 imm=0xa17d3697", "xrot d=4 c=1 k=13", "xor d=12 c=4", "xor d=7 c=12", "xrot d=14 c=7 k=25", "rot d=4 c=14 k=28", "sub d=14 c=4", "xor d=12 c=14", "sub d=6 c=12", "xrot d=5 c=6 k=5", "addc d=2 c=5 imm=0x6f8f3046", "add d=9 c=2", "mulc d=8 c=9 imm=0xbcb4183d", "add d=11 c=8", "mul d=13 c=11", "add d=15 c=13", "mulc d=8 c=15 imm=0x4f5a0a23", "addc d=13 c=8 imm=0x26061a70", "xorc d=3 c=13 imm=0x9351deb0", "rot d=13 c=3 k=26", "add d=5 c=13", "sub d=3 c=5", "add d=13 c=3", "mulc d=7 c=13 imm=0xc9cd8fcd", "mul d=10 c=7", "sub d=7 c=10", "add d=5 c=7", "add d=1 c=5", "andx d=15 c=1 b=8", "sub d=9 c=15", "rot d=10 c=9 k=24", "rot d=6 c=10 k=1", "xor d=3 c=6", "xor d=0 c=3", "xrot d=12 c=0 k=20", "add d=5 c=12", "mulc2 d=0 c=5 imm=0x2418a23d", "mulc d=11 c=0 imm=0x6c58993b", "xorc d=14 c=11 imm=0x4a8ca854", "mul d=15 c=14", "add d=0 c=15", "xrot d=11 c=0 k=17", "sub d=5 c=11", "mul d=6 c=5", "rot d=1 c=6 k=10", "xrot d=10 c=1 k=6", "xor d=4 c=10", "rot d=14 c=4 k=28", "sub d=7 c=14", "mulc d=9 c=7 imm=0x54779a6f", "add d=4 c=9", "add d=12 c=4", "xrot d=8 c=12 k=22", "orx d=12 c=8 b=7", "rot d=8 c=12 k=7", "sub d=14 c=8", "xorc d=3 c=14 imm=0x5bc9132c", "xorc d=1 c=3 imm=0xa3e75626", "mulc d=8 c=1 imm=0x4a1396f7", "xrot d=5 c=8 k=27", "add d=11 c=5", "xrot d=4 c=11 k=8", "mulc d=7 c=4 imm=0x88273613", "add d=15 c=7", "sub d=1 c=15", "andx d=12 c=1 b=9", "add d=14 c=12", "mulc2 d=7 c=14 imm=0x5081a79d", "rot d=6 c=7 k=14", "xor d=3 c=6", "mulc2 d=10 c=3 imm=0x1b283fdd", "mulc d=6 c=10 imm=0x73e5e60f", "mulc d=3 c=6 imm=0xc9863803", "xor d=1 c=3", "sub d=15 c=1", "andx d=5 c=15 b=7", "add d=14 c=5", "addc d=8 c=14 imm=0x185096cd", "xorc d=11 c=8 imm=0x9ef04aa3", "sub d=5 c=11", "xrot d=2 c=5 k=18", "add d=9 c=2", "rot d=15 c=9 k=22", "xrot d=0 c=15 k=27", "sub d=10 c=0", "xrot d=2 c=10 k=7", "addc d=15 c=2 imm=0x442bb076", "andx d=8 c=15 b=13", "rot d=14 c=8 k=31", "xor d=15 c=14", "sub d=4 c=15", "mul d=15 c=4", "rot d=11 c=15 k=3", "mul d=1 c=11", "xrot d=11 c=1 k=19", "xrot d=3 c=11 k=21", "mulc d=1 c=3 imm=0x6cbc5bb9", "add d=6 c=1", "mulc2 d=3 c=6 imm=0xe2cb6ceb", "add d=1 c=3", "rot d=13 c=1 k=19", "xor d=3 c=13", "sub d=11 c=3", "add d=0 c=11", "mul d=8 c=0", "addc d=11 c=8 imm=0x6853a703", "xor d=9 c=11", "add d=10 c=9", "mulc d=12 c=10 imm=0x9a3ac6db", "xor d=10 c=12", "xrot d=13 c=10 k=8", "xor d=2 c=13", "sub d=10 c=2", "mulc d=12 c=10 imm=0x833838d1", "rot d=9 c=12 k=3", "xor d=2 c=9", "xor d=12 c=2", "mulc d=11 c=12 imm=0x2370b681", "mulc d=9 c=11 imm=0x7f4b0295", "xor d=11 c=9", "mulc2 d=9 c=11 imm=0x06b0dc0d", "xor d=5 c=9", "xrot d=12 c=5 k=19", "mul d=4 c=12", "andx d=3 c=4 b=8", "add d=6 c=3", "addc d=1 c=6 imm=0xc6e02045", "addc d=9 c=1 imm=0xf8f493d8", "sub d=12 c=9", "add d=2 c=12", "add d=14 c=2", "rot d=10 c=14 k=29", "add d=7 c=10", "add d=12 c=7", "add d=7 c=12", "sub d=12 c=7", "xor d=3 c=12", "xorc d=11 c=3 imm=0xd6f7214f", "xor d=3 c=11", "mulc d=15 c=3 imm=0x0f25c855", "sub d=5 c=15", "xor d=1 c=5", "add d=0 c=1", "rot d=15 c=0 k=20", "mulc d=10 c=15 imm=0x286496e5", "addc d=12 c=10 imm=0x3e03a265", "sub d=1 c=12", "sub d=3 c=1", "xorc d=14 c=3 imm=0xdf78ab91", "mulc2 d=10 c=14 imm=0x64a3bcb1", "add d=11 c=10", "add d=1 c=11", "xorc d=11 c=1 imm=0x163d1a0f", "mulc2 d=15 c=11 imm=0xfcc7a02b", "sub d=8 c=15", "addc d=3 c=8 imm=0x2fc585d7", "rot d=14 c=3 k=3", "add d=9 c=14", "mulc d=4 c=9 imm=0xf91a42af", "add d=13 c=4", "mulc2 d=15 c=13 imm=0xb3102455", "sub d=11 c=15", "xor d=12 c=11", "mulc d=14 c=12 imm=0xd7e9b5af", "rot d=5 c=14 k=1", "add d=2 c=5", "xor d=0 c=2", "mulc d=6 c=0 imm=0xf95b573d", "mulc d=8 c=6 imm=0x115cc1f5", "mulc2 d=3 c=8 imm=0x7bb26c65", "xor d=1 c=3", "mulc2 d=9 c=1 imm=0xcdee5da3", "mul d=4 c=9", "addc d=11 c=4 imm=0xb5fccc2b", "addc d=2 c=11 imm=0x5e38801f", "mulc d=11 c=2 imm=0x397014eb", "xrot d=14 c=11 k=4", "mulc d=3 c=14 imm=0xbbf780ef", "xor d=10 c=3", "xorc d=4 c=10 imm=0x4abb5f0a", "andx d=10 c=4 b=6", "add d=15 c=10", "andx d=9 c=15 b=4", "rot d=11 c=9 k=20", "xor d=13 c=11", "addc d=5 c=13 imm=0x104bed55", "mulc2 d=6 c=5 imm=0x2b9b1395", "mulc d=7 c=6 imm=0xdd08fdeb", "mulc d=9 c=7 imm=0x46d23ed5", "mulc2 d=3 c=9 imm=0xcd451ba9", "xor d=11 c=3", "addc d=10 c=11 imm=0xeb7a45b8", "xor d=0 c=10", "add d=7 c=0", "rot d=15 c=7 k=2", "sub d=12 c=15", "xor d=8 c=12", "add d=1 c=8", "mulc d=5 c=1 imm=0xc6f4ee59", "mul d=14 c=5", "xrot d=7 c=14 k=31", "sub d=12 c=7", "add d=13 c=12", "xrot d=1 c=13 k=30", "sub d=14 c=1", "xor d=1 c=14", "mul d=6 c=1", "xrot d=15 c=6 k=27", "rot d=8 c=15 k=15", "addc d=15 c=8 imm=0x8e6a0f17", "orx d=9 c=15 b=12", "xor d=11 c=9", "mul d=6 c=11", "addc d=7 c=6 imm=0xe553414f", "mulc d=8 c=7 imm=0xab271281", "add d=12 c=8", "mul d=14 c=12", "xor d=9 c=14", "xor d=5 c=9", "orx d=7 c=5 b=2", "add d=3 c=7", "sub d=11 c=3", "mulc d=0 c=11 imm=0x2f8b8657", "add d=1 c=0", "rot d=15 c=1 k=15", "mulc2 d=0 c=15 imm=0xf98801d1", "mulc2 d=10 c=0 imm=0xc3d74db5", "sub d=15 c=10", "sub d=13 c=15", "rot d=4 c=13 k=11", "xor d=14 c=4", "rot d=11 c=14 k=16", "addc d=5 c=11 imm=0x14945643", "mulc d=13 c=5 imm=0xade16d23", "xorc d=8 c=13 imm=0x7234c3c3", "rot d=15 c=8 k=30", "mulc d=2 c=15 imm=0x79ec043d", "xor d=7 c=2", "mul d=15 c=7", "rot d=9 c=15 k=24", "mul d=7 c=9", "xor d=1 c=7", "mulc d=9 c=1 imm=0x89ea4add", "xor d=4 c=9", "xor d=0 c=4", "sub d=1 c=0", "addc d=9 c=1 imm=0x0690537c", "addc d=1 c=9 imm=0xe5486beb", "xrot d=6 c=1 k=19", "sub d=15 c=6"], + ["add d=11 c=0", "orx d=13 c=11 b=0", "xor d=14 c=13", "orx d=15 c=14 b=8", "rot d=0 c=15 k=1", "mul d=15 c=0", "orx d=7 c=15 b=14", "rot d=1 c=7 k=19", "rot d=15 c=1 k=24", "rot d=6 c=15 k=28", "andx d=12 c=6 b=7", "rot d=6 c=12 k=15", "xrot d=15 c=6 k=30", "xor d=7 c=15", "xorc d=5 c=7 imm=0x1874ccb9", "mulc d=13 c=5 imm=0xead971f1", "add d=2 c=13", "mul d=8 c=2", "xrot d=15 c=8 k=29", "orx d=2 c=15 b=4", "andx d=13 c=2 b=6", "add d=15 c=13", "addc d=3 c=15 imm=0xeea76305", "rot d=15 c=3 k=9", "add d=1 c=15", "mul d=9 c=1", "add d=5 c=9", "xrot d=1 c=5 k=17", "add d=11 c=1", "add d=2 c=11", "add d=6 c=2", "mulc d=1 c=6 imm=0x4f9b8f91", "xrot d=8 c=1 k=31", "mulc d=7 c=8 imm=0xf1d427b1", "add d=6 c=7", "xrot d=15 c=6 k=7", "rot d=10 c=15 k=20", "sub d=6 c=10", "mulc d=10 c=6 imm=0x286194bf", "mul d=0 c=10", "mulc d=4 c=0 imm=0xc953f135", "addc d=9 c=4 imm=0x6ba4448e", "mulc d=4 c=9 imm=0xb1856abd", "xorc d=5 c=4 imm=0xf42a5bdc", "rot d=4 c=5 k=24", "add d=3 c=4", "add d=10 c=3", "orx d=6 c=10 b=5", "add d=12 c=6", "xorc d=5 c=12 imm=0xc802dfeb", "mulc d=4 c=5 imm=0x412d8fbf", "xorc d=14 c=4 imm=0x9e40e380", "mulc d=11 c=14 imm=0xed0a749f", "mul d=15 c=11", "mulc d=14 c=15 imm=0x23a1ec6d", "add d=3 c=14", "xorc d=12 c=3 imm=0xc9907e2b", "mulc2 d=1 c=12 imm=0x5bbedaf5", "rot d=6 c=1 k=6", "mulc d=8 c=6 imm=0x600cfb09", "add d=14 c=8", "addc d=12 c=14 imm=0x78988768", "mulc2 d=4 c=12 imm=0xa626cf43", "mulc d=13 c=4 imm=0x54dc81e3", "mul d=0 c=13", "sub d=13 c=0", "orx d=8 c=13 b=9", "xor d=1 c=8", "mulc d=6 c=1 imm=0xd367f779", "sub d=7 c=6", "add d=13 c=7", "mulc2 d=6 c=13 imm=0xe7cffbcd", "mulc d=3 c=6 imm=0xfa1b7e5d", "rot d=13 c=3 k=31", "xor d=2 c=13", "mul d=4 c=2", "xor d=3 c=4", "sub d=4 c=3", "add d=15 c=4", "mulc d=8 c=15 imm=0x9a841483", "xor d=5 c=8", "andx d=15 c=5 b=0", "add d=4 c=15", "xrot d=9 c=4 k=14", "mul d=12 c=9", "orx d=10 c=12 b=3", "xrot d=2 c=10 k=19", "mul d=5 c=2", "xrot d=14 c=5 k=17", "xor d=7 c=14", "add d=12 c=7", "mulc2 d=8 c=12 imm=0x563fd2c3", "rot d=13 c=8 k=6", "addc d=11 c=13 imm=0xfe09487d", "sub d=14 c=11", "sub d=2 c=14", "addc d=0 c=2 imm=0x134d34fb", "sub d=7 c=0", "rot d=13 c=7 k=20", "xrot d=15 c=13 k=12", "add d=9 c=15", "sub d=0 c=9", "xorc d=15 c=0 imm=0xd26cf159", "addc d=12 c=15 imm=0x0c050d95", "mulc2 d=3 c=12 imm=0x3f90fd07", "sub d=7 c=3", "mulc d=13 c=7 imm=0xbb3ea981", "rot d=8 c=13 k=9", "andx d=6 c=8 b=4", "mul d=7 c=6", "xrot d=6 c=7 k=23", "mul d=4 c=6", "sub d=6 c=4", "xrot d=12 c=6 k=8", "sub d=11 c=12", "sub d=5 c=11", "mulc d=4 c=5 imm=0xb0a03621", "mul d=15 c=4", "rot d=0 c=15 k=8", "xor d=15 c=0", "addc d=8 c=15 imm=0x15f21a1a", "xor d=2 c=8", "rot d=13 c=2 k=22", "xrot d=2 c=13 k=4", "add d=4 c=2", "mul d=11 c=4", "rot d=15 c=11 k=16", "mul d=14 c=15", "add d=1 c=14", "add d=5 c=1", "xorc d=13 c=5 imm=0x4d858e87", "mul d=12 c=13", "rot d=10 c=12 k=19", "add d=5 c=10", "xor d=15 c=5", "xrot d=4 c=15 k=30", "mul d=0 c=4", "add d=3 c=0", "sub d=10 c=3", "rot d=11 c=10 k=5", "xor d=12 c=11", "mul d=7 c=12", "xrot d=12 c=7 k=2", "xor d=6 c=12", "sub d=11 c=6", "addc d=3 c=11 imm=0x15d75f72", "add d=6 c=3", "mul d=4 c=6", "sub d=3 c=4", "addc d=12 c=3 imm=0x02d9ef35", "sub d=0 c=12", "xorc d=15 c=0 imm=0xa34641ee", "mul d=7 c=15", "xorc d=8 c=7 imm=0x5c0473a2", "mul d=10 c=8", "mul d=4 c=10", "xor d=12 c=4", "add d=5 c=12", "rot d=15 c=5 k=29", "rot d=0 c=15 k=7", "add d=15 c=0", "xor d=11 c=15", "orx d=4 c=11 b=13", "xrot d=9 c=4 k=5", "sub d=11 c=9", "add d=7 c=11", "mul d=5 c=7", "add d=12 c=5", "mul d=3 c=12", "add d=0 c=3", "xrot d=10 c=0 k=8", "mulc d=13 c=10 imm=0x3a550111", "add d=15 c=13", "mul d=1 c=15", "mulc2 d=2 c=1 imm=0x95352fdf", "mulc d=8 c=2 imm=0x269301a1", "xrot d=4 c=8 k=5", "sub d=5 c=4", "mul d=10 c=5", "addc d=7 c=10 imm=0x1d87f038", "mulc d=5 c=7 imm=0xecbf1c27", "sub d=11 c=5", "sub d=2 c=11", "xor d=8 c=2", "xor d=6 c=8", "sub d=7 c=6", "sub d=13 c=7", "sub d=2 c=13", "xor d=3 c=2", "mulc d=5 c=3 imm=0x8ef62aeb", "mulc d=7 c=5 imm=0x594b5f33", "add d=12 c=7", "mulc d=13 c=12 imm=0xdaa86fd9", "add d=6 c=13", "xor d=13 c=6", "add d=7 c=13", "rot d=5 c=7 k=17", "mulc d=4 c=5 imm=0x19723005", "sub d=8 c=4", "xor d=12 c=8", "xor d=11 c=12", "xorc d=8 c=11 imm=0x0739c480", "xor d=2 c=8", "mulc d=15 c=2 imm=0xc15f8403", "sub d=14 c=15", "addc d=9 c=14 imm=0x2b0ab64a", "xor d=1 c=9", "orx d=9 c=1 b=6", "add d=15 c=9", "add d=13 c=15", "xor d=6 c=13", "xorc d=9 c=6 imm=0xfaf52102", "add d=11 c=9", "add d=6 c=11", "xrot d=8 c=6 k=15", "sub d=9 c=8", "xor d=4 c=9", "sub d=0 c=4", "rot d=5 c=0 k=12", "rot d=15 c=5 k=10", "add d=8 c=15", "xorc d=10 c=8 imm=0x92ea0c55", "add d=13 c=10", "add d=3 c=13", "mulc d=12 c=3 imm=0xd069e52d", "add d=9 c=12", "xor d=4 c=9", "xorc d=12 c=4 imm=0xeb853951", "addc d=0 c=12 imm=0xed41d9fd", "mulc2 d=8 c=0 imm=0xc5250bfd", "mul d=7 c=8", "xrot d=2 c=7 k=2", "sub d=10 c=2", "mul d=11 c=10", "add d=8 c=11", "mulc d=13 c=8 imm=0xd390a1fb", "mulc2 d=7 c=13 imm=0x5acff41b", "xor d=0 c=7", "rot d=15 c=0 k=17", "rot d=12 c=15 k=17", "andx d=4 c=12 b=7", "xorc d=7 c=4 imm=0xc65745d6", "xor d=3 c=7", "rot d=9 c=3 k=9", "addc d=0 c=9 imm=0xa03ce5a6", "sub d=2 c=0", "xrot d=15 c=2 k=29", "xrot d=10 c=15 k=13", "rot d=9 c=10 k=30", "orx d=10 c=9 b=12", "xorc d=6 c=10 imm=0xd72a67b8", "mul d=7 c=6", "add d=15 c=7", "mul d=2 c=15", "add d=12 c=2", "mul d=8 c=12", "andx d=11 c=8 b=9", "rot d=12 c=11 k=27", "xor d=0 c=12", "addc d=11 c=0 imm=0x01d509c0", "sub d=1 c=11", "sub d=11 c=1", "addc d=2 c=11 imm=0x2ad9035d", "andx d=11 c=2 b=7", "addc d=5 c=11 imm=0x756fff22", "mul d=9 c=5", "xor d=13 c=9", "xor d=4 c=13", "rot d=3 c=4 k=2", "xorc d=14 c=3 imm=0xc1fb5cb3", "rot d=3 c=14 k=19", "add d=14 c=3", "addc d=6 c=14 imm=0x5f1c4569", "xrot d=3 c=6 k=22", "add d=2 c=3", "add d=9 c=2", "andx d=1 c=9 b=10", "xor d=5 c=1", "sub d=15 c=5", "xrot d=2 c=15 k=23", "mul d=1 c=2", "xor d=6 c=1", "rot d=4 c=6 k=7", "orx d=14 c=4 b=6", "mulc d=15 c=14 imm=0x83c9a7eb", "add d=14 c=15", "xrot d=15 c=14 k=21", "xor d=3 c=15", "xor d=0 c=3", "xrot d=10 c=0 k=31", "add d=4 c=10", "rot d=7 c=4 k=23", "xrot d=15 c=7 k=3", "mul d=1 c=15", "xor d=7 c=1", "mulc d=14 c=7 imm=0x2ad2ff49", "rot d=7 c=14 k=4", "mul d=13 c=7", "sub d=11 c=13", "rot d=14 c=11 k=30", "orx d=3 c=14 b=4", "orx d=13 c=3 b=10", "mulc2 d=7 c=13 imm=0x6920c90b", "add d=12 c=7", "xor d=3 c=12", "xrot d=6 c=3 k=25", "mulc d=7 c=6 imm=0x04333a85", "sub d=8 c=7", "mulc d=2 c=8 imm=0x843335e9", "add d=10 c=2", "rot d=9 c=10 k=21", "rot d=6 c=9 k=4", "rot d=13 c=6 k=19", "mulc d=10 c=13 imm=0xbaaa3189", "xor d=0 c=10", "sub d=10 c=0", "xorc d=13 c=10 imm=0xee9d489e", "mul d=3 c=13", "sub d=12 c=3", "orx d=4 c=12 b=2", "mulc d=3 c=4 imm=0x109178f7", "addc d=4 c=3 imm=0x9c068c09", "xrot d=9 c=4 k=23", "orx d=1 c=9 b=6", "xor d=8 c=1", "andx d=11 c=8 b=7", "xor d=9 c=11", "xrot d=14 c=9 k=13", "mulc2 d=3 c=14 imm=0x3575e169", "addc d=1 c=3 imm=0x42a43de1", "add d=7 c=1", "mul d=6 c=7", "xrot d=0 c=6 k=21", "mulc d=14 c=0 imm=0xd50f0637", "xrot d=0 c=14 k=6", "sub d=4 c=0", "rot d=10 c=4 k=1", "mulc d=4 c=10 imm=0xf009aafb", "mul d=7 c=4", "xorc d=6 c=7 imm=0xd8b7b555", "xrot d=2 c=6 k=14", "addc d=9 c=2 imm=0x85a75e4f", "add d=14 c=9", "rot d=7 c=14 k=5", "xor d=10 c=7", "xrot d=0 c=10 k=10", "mulc d=3 c=0 imm=0xe1a45df3", "add d=1 c=3", "andx d=14 c=1 b=11", "sub d=8 c=14", "mulc d=13 c=8 imm=0x9fce6b81", "rot d=9 c=13 k=28", "add d=14 c=9", "sub d=11 c=14", "mul d=0 c=11", "mul d=10 c=0", "xorc d=14 c=10 imm=0x130dbd8e", "mulc d=5 c=14 imm=0x488f6399", "xrot d=7 c=5 k=8", "mul d=9 c=7", "sub d=15 c=9", "xrot d=5 c=15 k=14", "add d=1 c=5", "rot d=13 c=1 k=10", "sub d=15 c=13", "orx d=7 c=15 b=13", "xor d=12 c=7", "mul d=1 c=12", "mulc d=11 c=1 imm=0x04105327", "mul d=5 c=11", "xor d=1 c=5", "mul d=13 c=1", "mulc2 d=11 c=13 imm=0xd3a38ac5", "xor d=12 c=11", "xorc d=3 c=12 imm=0xcda4d195", "add d=9 c=3", "add d=13 c=9", "orx d=4 c=13 b=14", "xrot d=7 c=4 k=6", "mulc2 d=4 c=7 imm=0xd402bb6d", "andx d=3 c=4 b=9", "orx d=0 c=3 b=2", "add d=2 c=0", "xor d=6 c=2", "add d=3 c=6", "mul d=7 c=3", "sub d=6 c=7", "sub d=11 c=6", "sub d=9 c=11", "add d=14 c=9", "xrot d=8 c=14 k=18", "xrot d=10 c=8 k=20", "xor d=12 c=10", "xor d=7 c=12", "xrot d=1 c=7 k=11", "xor d=14 c=1", "mulc d=9 c=14 imm=0x6c1e8cd1", "sub d=1 c=9", "orx d=4 c=1 b=5", "sub d=7 c=4", "sub d=13 c=7", "rot d=6 c=13 k=13", "sub d=15 c=6", "mulc2 d=2 c=15 imm=0x0d5713c3", "xrot d=3 c=2 k=16", "xrot d=4 c=3 k=10", "mulc d=9 c=4 imm=0x3d5be749", "xor d=14 c=9", "xor d=15 c=14", "mul d=6 c=15", "mulc d=7 c=6 imm=0x17df006b", "add d=1 c=7", "sub d=8 c=1", "mulc d=7 c=8 imm=0xe93f9287", "xorc d=0 c=7 imm=0x9294d6b2", "add d=14 c=0", "add d=11 c=14", "add d=0 c=11", "add d=7 c=0", "sub d=12 c=7", "xrot d=0 c=12 k=9", "xrot d=3 c=0 k=30", "rot d=8 c=3 k=11", "xor d=6 c=8", "add d=15 c=6", "add d=0 c=15", "add d=10 c=0", "rot d=1 c=10 k=26", "xor d=9 c=1", "mul d=13 c=9", "mulc2 d=4 c=13 imm=0xcdb45257", "rot d=2 c=4 k=1", "mulc d=0 c=2 imm=0x68b3d713", "add d=1 c=0", "mulc2 d=4 c=1 imm=0xf69d4a5f", "xrot d=8 c=4 k=2", "xrot d=4 c=8 k=7", "addc d=2 c=4 imm=0x51bb82ce", "add d=7 c=2", "add d=1 c=7", "addc d=2 c=1 imm=0x3680e8bb", "addc d=5 c=2 imm=0x9e44e256", "add d=1 c=5", "add d=12 c=1", "xor d=9 c=12", "sub d=13 c=9", "mul d=2 c=13", "add d=12 c=2", "add d=13 c=12", "xorc d=0 c=13 imm=0xd70a731d", "add d=6 c=0", "rot d=7 c=6 k=22", "mulc d=15 c=7 imm=0xdf75ad53", "andx d=11 c=15 b=1", "xrot d=1 c=11 k=11", "add d=2 c=1", "xrot d=15 c=2 k=21", "mulc d=2 c=15 imm=0x7c349239", "rot d=12 c=2 k=6", "xorc d=13 c=12 imm=0xb219f590", "mul d=15 c=13", "xorc d=2 c=15 imm=0xa28894b2", "add d=7 c=2", "rot d=3 c=7 k=19", "mulc d=12 c=3 imm=0xd73e4265", "add d=15 c=12", "mulc2 d=7 c=15 imm=0x2d1fd471", "mulc d=11 c=7 imm=0x7ce4f3e3", "xrot d=3 c=11 k=27", "add d=8 c=3", "orx d=9 c=8 b=1", "mul d=11 c=9", "sub d=3 c=11", "rot d=14 c=3 k=13", "andx d=0 c=14 b=7", "rot d=12 c=0 k=8", "xor d=3 c=12", "xor d=15 c=3", "xor d=4 c=15", "orx d=15 c=4 b=11", "xrot d=13 c=15 k=24", "mul d=2 c=13", "rot d=14 c=2 k=2", "add d=10 c=14", "add d=12 c=10", "addc d=2 c=12 imm=0x1b504561", "xrot d=4 c=2 k=2", "mulc d=8 c=4 imm=0x03df7a65", "rot d=15 c=8 k=14", "rot d=0 c=15 k=18", "addc d=1 c=0 imm=0x5740a39e", "sub d=8 c=1", "mulc d=5 c=8 imm=0x0b606a43", "mulc2 d=9 c=5 imm=0x39176987", "rot d=0 c=9 k=4", "xor d=14 c=0", "sub d=11 c=14", "addc d=3 c=11 imm=0x34787b81", "addc d=15 c=3 imm=0xe41a04ec", "xrot d=13 c=15 k=15", "xor d=7 c=13", "sub d=9 c=7", "sub d=10 c=9", "add d=13 c=10", "orx d=4 c=13 b=6", "xor d=2 c=4", "xor d=1 c=2", "sub d=0 c=1", "mulc d=15 c=0 imm=0x3fb47953", "mul d=12 c=15", "xor d=15 c=12", "rot d=13 c=15 k=31", "mulc2 d=12 c=13 imm=0xd1b75439", "sub d=4 c=12", "add d=7 c=4", "rot d=1 c=7 k=3", "xrot d=14 c=1 k=15", "sub d=3 c=14", "add d=15 c=3", "mulc2 d=5 c=15 imm=0xfa5689f1", "mul d=12 c=5", "xrot d=2 c=12 k=16", "mulc d=0 c=2 imm=0x2a1a8c35", "add d=4 c=0", "mulc d=12 c=4 imm=0x2a04efeb", "rot d=15 c=12 k=28", "sub d=9 c=15", "xorc d=13 c=9 imm=0xbd001784", "addc d=9 c=13 imm=0xf302a942", "addc d=14 c=9 imm=0x07f9571c", "xor d=2 c=14", "xor d=11 c=2", "xrot d=7 c=11 k=10", "addc d=0 c=7 imm=0xb6e41d24", "xor d=12 c=0", "xor d=0 c=12", "xorc d=11 c=0 imm=0x24f0b3f7", "andx d=0 c=11 b=7", "add d=6 c=0", "sub d=13 c=6", "xor d=12 c=13", "add d=4 c=12", "xrot d=3 c=4 k=16", "mulc d=14 c=3 imm=0x21829883", "sub d=2 c=14", "andx d=3 c=2 b=7", "sub d=1 c=3", "xor d=11 c=1", "xrot d=13 c=11 k=20", "mulc d=0 c=13 imm=0xa91d4129", "addc d=3 c=0 imm=0x5eb9b9e0", "rot d=10 c=3 k=11", "mulc d=7 c=10 imm=0x52bae843", "xor d=15 c=7", "andx d=3 c=15 b=2", "add d=14 c=3", "sub d=9 c=14", "add d=7 c=9", "add d=2 c=7", "mul d=3 c=2", "mul d=0 c=3", "mul d=6 c=0", "xorc d=3 c=6 imm=0x1426b612", "mul d=6 c=3", "sub d=1 c=6", "add d=15 c=1", "sub d=0 c=15", "addc d=12 c=0 imm=0xf7b931c7", "mul d=13 c=12", "mulc2 d=12 c=13 imm=0xe57254db", "add d=11 c=12", "mul d=2 c=11", "xrot d=5 c=2 k=29", "addc d=8 c=5 imm=0x517e08fa", "xrot d=15 c=8 k=24", "sub d=4 c=15", "xor d=7 c=4", "xrot d=9 c=7 k=12", "xrot d=5 c=9 k=31", "rot d=15 c=5 k=20", "mulc d=10 c=15 imm=0x472cce51", "mulc d=0 c=10 imm=0xc6aa4b0f", "xor d=9 c=0", "andx d=5 c=9 b=11", "add d=9 c=5", "rot d=15 c=9 k=26", "xrot d=12 c=15 k=15", "add d=7 c=12", "xor d=8 c=7", "mulc d=4 c=8 imm=0x1de62593", "xorc d=12 c=4 imm=0x4c29c7ef", "mulc2 d=14 c=12 imm=0xe96a8dbd", "add d=7 c=14", "mulc d=4 c=7 imm=0x2ceadb71", "add d=13 c=4", "add d=10 c=13", "xrot d=12 c=10 k=5", "mulc d=0 c=12 imm=0xb3050b81", "add d=7 c=0", "xrot d=12 c=7 k=15", "mulc d=11 c=12 imm=0xd1f5971b", "add d=13 c=11", "mul d=11 c=13", "addc d=10 c=11 imm=0x1c05c66f", "xor d=15 c=10", "xorc d=13 c=15 imm=0x8af80ca8", "xrot d=15 c=13 k=14", "mulc d=13 c=15 imm=0x8b914137", "sub d=11 c=13", "xor d=13 c=11", "mulc d=6 c=13 imm=0x3c6fe121", "xrot d=12 c=6 k=13", "rot d=14 c=12 k=31", "sub d=11 c=14", "sub d=12 c=11", "mulc d=8 c=12 imm=0x196763bd", "mul d=10 c=8", "xrot d=11 c=10 k=14", "mul d=14 c=11", "mul d=11 c=14", "add d=6 c=11", "mulc d=8 c=6 imm=0xbbef2ec7", "xrot d=11 c=8 k=14", "add d=14 c=11", "xorc d=1 c=14 imm=0x3517261c", "add d=10 c=1", "sub d=11 c=10", "xrot d=1 c=11 k=23", "mul d=4 c=1", "xor d=3 c=4", "sub d=14 c=3", "xrot d=12 c=14 k=7", "sub d=11 c=12", "mulc d=12 c=11 imm=0x61ef90dd", "add d=11 c=12", "mul d=2 c=11", "sub d=4 c=2", "xorc d=3 c=4 imm=0x38b5a46a", "xrot d=14 c=3 k=8", "add d=8 c=14", "rot d=10 c=8 k=12", "xrot d=6 c=10 k=31", "xorc d=2 c=6 imm=0x04a55416", "xorc d=7 c=2 imm=0xc6089802", "addc d=14 c=7 imm=0x232acd3a", "add d=6 c=14", "xorc d=3 c=6 imm=0x0bdec934", "mul d=13 c=3", "mulc2 d=12 c=13 imm=0x082d66bd", "mulc d=10 c=12 imm=0xa5611c97", "xrot d=5 c=10 k=1", "add d=0 c=5", "xrot d=10 c=0 k=25", "xrot d=9 c=10 k=1", "add d=11 c=9", "mulc d=15 c=11 imm=0x0c06e2b5", "xorc d=12 c=15 imm=0x7d7c42ce", "add d=15 c=12", "rot d=6 c=15 k=26", "andx d=9 c=6 b=4", "sub d=7 c=9", "xrot d=15 c=7 k=31", "add d=4 c=15", "mulc d=11 c=4 imm=0xd7fef7d9", "xor d=10 c=11", "rot d=9 c=10 k=22", "sub d=7 c=9", "mulc d=3 c=7 imm=0x0eafdd57", "xor d=5 c=3", "sub d=8 c=5", "xor d=5 c=8", "sub d=3 c=5", "rot d=13 c=3 k=16", "add d=14 c=13", "add d=11 c=14", "addc d=0 c=11 imm=0xf2a1dc99", "andx d=3 c=0 b=10", "rot d=10 c=3 k=7", "addc d=5 c=10 imm=0x6527734f", "sub d=8 c=5", "mul d=5 c=8", "add d=2 c=5", "rot d=1 c=2 k=31", "xrot d=11 c=1 k=1", "xor d=15 c=11", "mulc d=6 c=15 imm=0x89e4da81", "rot d=8 c=6 k=7", "mulc d=1 c=8 imm=0x27cd5aab", "mulc d=4 c=1 imm=0xc9e84adb", "rot d=3 c=4 k=13", "add d=11 c=3", "xor d=8 c=11", "xrot d=12 c=8 k=21", "add d=14 c=12", "sub d=0 c=14", "add d=2 c=0", "sub d=3 c=2", "sub d=10 c=3", "mul d=11 c=10", "add d=14 c=11", "add d=6 c=14", "xor d=3 c=6", "mulc2 d=13 c=3 imm=0xf5b82e19", "add d=7 c=13", "xor d=3 c=7", "xrot d=10 c=3 k=14", "add d=13 c=10", "xorc d=9 c=13 imm=0x50029d51", "xor d=8 c=9", "mulc2 d=5 c=8 imm=0x84a8bab7", "rot d=14 c=5 k=21", "xrot d=12 c=14 k=21", "xor d=5 c=12", "xrot d=9 c=5 k=19", "addc d=13 c=9 imm=0xf7535ff7", "mul d=4 c=13", "mul d=12 c=4", "addc d=4 c=12 imm=0x56f3ba9a", "add d=6 c=4", "xorc d=0 c=6 imm=0x52b3d568", "orx d=12 c=0 b=11", "xrot d=11 c=12 k=31", "xrot d=4 c=11 k=7", "addc d=3 c=4 imm=0xe0a370de", "xrot d=10 c=3 k=18", "sub d=2 c=10", "mul d=1 c=2", "addc d=11 c=1 imm=0x351f5bb2", "add d=0 c=11", "add d=9 c=0", "rot d=8 c=9 k=15", "xrot d=0 c=8 k=18", "xrot d=11 c=0 k=8", "add d=3 c=11", "rot d=4 c=3 k=1", "sub d=13 c=4"], + ["xorc d=10 c=0 imm=0x91f55cc2", "add d=12 c=10", "xor d=9 c=12", "xrot d=8 c=9 k=11", "xor d=11 c=8", "mulc d=13 c=11 imm=0x8937936d", "rot d=12 c=13 k=6", "add d=6 c=12", "xrot d=1 c=6 k=8", "add d=10 c=1", "rot d=9 c=10 k=5", "sub d=12 c=9", "mulc2 d=10 c=12 imm=0xfb1e6803", "orx d=0 c=10 b=11", "add d=15 c=0", "xor d=0 c=15", "mul d=13 c=0", "rot d=1 c=13 k=22", "rot d=7 c=1 k=2", "mulc2 d=2 c=7 imm=0xc6ee6461", "add d=3 c=2", "xor d=7 c=3", "xrot d=4 c=7 k=15", "xor d=6 c=4", "add d=10 c=6", "rot d=11 c=10 k=4", "xor d=2 c=11", "rot d=5 c=2 k=30", "sub d=7 c=5", "xor d=4 c=7", "xor d=6 c=4", "sub d=5 c=6", "rot d=10 c=5 k=13", "rot d=8 c=10 k=19", "rot d=11 c=8 k=13", "xrot d=5 c=11 k=2", "xor d=8 c=5", "rot d=10 c=8 k=31", "addc d=2 c=10 imm=0x2533aeeb", "addc d=12 c=2 imm=0x8c44064e", "mulc2 d=6 c=12 imm=0x396ed079", "xor d=3 c=6", "addc d=7 c=3 imm=0x78c5d841", "rot d=2 c=7 k=19", "xorc d=5 c=2 imm=0xb10843ea", "mul d=3 c=5", "xorc d=2 c=3 imm=0x978c6fe6", "add d=9 c=2", "mulc d=3 c=9 imm=0xbd141e6d", "xorc d=5 c=3 imm=0xd07a1a68", "xor d=11 c=5", "orx d=12 c=11 b=0", "orx d=3 c=12 b=0", "orx d=13 c=3 b=4", "xor d=3 c=13", "sub d=7 c=3", "mul d=6 c=7", "xrot d=7 c=6 k=1", "mulc d=9 c=7 imm=0xbed8dbf7", "xor d=3 c=9", "mulc d=1 c=3 imm=0xf57e26d7", "mulc d=2 c=1 imm=0xdf9916eb", "sub d=6 c=2", "mul d=2 c=6", "addc d=13 c=2 imm=0x4b576832", "xor d=7 c=13", "mul d=14 c=7", "xrot d=0 c=14 k=6", "mulc d=14 c=0 imm=0xde82d2d3", "add d=7 c=14", "mulc2 d=14 c=7 imm=0x1a9d2c23", "xor d=13 c=14", "mul d=14 c=13", "andx d=13 c=14 b=10", "rot d=6 c=13 k=3", "xrot d=0 c=6 k=1", "xor d=1 c=0", "sub d=13 c=1", "xor d=1 c=13", "sub d=3 c=1", "add d=2 c=3", "mulc d=11 c=2 imm=0xd14f4873", "addc d=0 c=11 imm=0xc62283fb", "rot d=14 c=0 k=31", "mul d=0 c=14", "sub d=13 c=0", "mul d=7 c=13", "xor d=15 c=7", "xor d=6 c=15", "rot d=8 c=6 k=21", "rot d=10 c=8 k=26", "orx d=11 c=10 b=13", "add d=14 c=11", "rot d=8 c=14 k=30", "mulc2 d=3 c=8 imm=0xabf8963b", "add d=1 c=3", "xrot d=6 c=1 k=8", "mulc2 d=7 c=6 imm=0x5391ec81", "mul d=3 c=7", "xorc d=1 c=3 imm=0xb1e8a02e", "addc d=4 c=1 imm=0xf73ade37", "rot d=0 c=4 k=24", "xor d=4 c=0", "xor d=2 c=4", "rot d=9 c=2 k=12", "sub d=10 c=9", "xor d=4 c=10", "mul d=3 c=4", "sub d=0 c=3", "andx d=8 c=0 b=14", "mul d=11 c=8", "xor d=10 c=11", "xrot d=4 c=10 k=11", "rot d=13 c=4 k=2", "mul d=0 c=13", "rot d=5 c=0 k=21", "xor d=13 c=5", "mul d=0 c=13", "xor d=14 c=0", "sub d=7 c=14", "mul d=9 c=7", "xor d=14 c=9", "xorc d=13 c=14 imm=0xcdfc1ed8", "xrot d=1 c=13 k=20", "xrot d=3 c=1 k=3", "xor d=1 c=3", "mul d=0 c=1", "orx d=13 c=0 b=9", "mulc d=14 c=13 imm=0x788d03ef", "xorc d=0 c=14 imm=0x996f3b0d", "sub d=13 c=0", "rot d=10 c=13 k=15", "xrot d=5 c=10 k=3", "xrot d=3 c=5 k=10", "xorc d=12 c=3 imm=0xd5618db8", "sub d=14 c=12", "orx d=1 c=14 b=15", "xorc d=2 c=1 imm=0xbf5e3cd4", "add d=4 c=2", "xorc d=14 c=4 imm=0xf8523123", "rot d=12 c=14 k=29", "mul d=7 c=12", "mul d=12 c=7", "add d=10 c=12", "xrot d=14 c=10 k=20", "xorc d=7 c=14 imm=0x383fa4a6", "mul d=12 c=7", "rot d=2 c=12 k=1", "mul d=1 c=2", "add d=4 c=1", "mulc2 d=11 c=4 imm=0xc6e2f7f7", "andx d=6 c=11 b=15", "mulc d=3 c=6 imm=0xa5f20621", "add d=14 c=3", "mulc2 d=15 c=14 imm=0xff86c04d", "add d=14 c=15", "rot d=3 c=14 k=27", "andx d=13 c=3 b=8", "xor d=10 c=13", "mulc2 d=6 c=10 imm=0xedced661", "xrot d=12 c=6 k=22", "xorc d=4 c=12 imm=0x50fbdfef", "addc d=9 c=4 imm=0xe37ea6ae", "xrot d=1 c=9 k=17", "add d=4 c=1", "addc d=3 c=4 imm=0xc95ad941", "xor d=0 c=3", "rot d=6 c=0 k=26", "sub d=12 c=6", "mul d=14 c=12", "add d=12 c=14", "mulc2 d=13 c=12 imm=0xdf0c5af7", "rot d=1 c=13 k=4", "rot d=15 c=1 k=23", "xor d=14 c=15", "mul d=0 c=14", "xrot d=5 c=0 k=14", "xrot d=15 c=5 k=12", "rot d=9 c=15 k=22", "mulc2 d=1 c=9 imm=0x1357e1d5", "add d=2 c=1", "mul d=8 c=2", "xor d=0 c=8", "xor d=7 c=0", "xrot d=11 c=7 k=10", "mulc d=13 c=11 imm=0x9cd6fa4d", "orx d=11 c=13 b=10", "xorc d=3 c=11 imm=0xf37724dd", "add d=5 c=3", "mul d=6 c=5", "add d=14 c=6", "mul d=13 c=14", "add d=2 c=13", "xrot d=4 c=2 k=1", "andx d=13 c=4 b=0", "andx d=14 c=13 b=0", "add d=0 c=14", "xrot d=6 c=0 k=21", "add d=13 c=6", "add d=6 c=13", "addc d=0 c=6 imm=0x1720d570", "xor d=3 c=0", "addc d=13 c=3 imm=0xd71bcd1b", "xor d=1 c=13", "xor d=3 c=1", "add d=9 c=3", "xrot d=4 c=9 k=3", "add d=10 c=4", "sub d=15 c=10", "mul d=11 c=15", "mul d=12 c=11", "add d=8 c=12", "addc d=0 c=8 imm=0xa5d99dc7", "xor d=14 c=0", "orx d=2 c=14 b=10", "xrot d=8 c=2 k=8", "addc d=15 c=8 imm=0xda39c6e1", "rot d=1 c=15 k=9", "xrot d=7 c=1 k=8", "andx d=4 c=7 b=9", "rot d=0 c=4 k=13", "mul d=10 c=0", "rot d=3 c=10 k=20", "xor d=11 c=3", "xorc d=15 c=11 imm=0x0d7fc3f2", "andx d=5 c=15 b=3", "add d=8 c=5", "xor d=3 c=8", "add d=9 c=3", "xrot d=12 c=9 k=7", "sub d=7 c=12", "mulc d=14 c=7 imm=0xee2eaf6b", "xor d=5 c=14", "rot d=6 c=5 k=17", "sub d=0 c=6", "xorc d=13 c=0 imm=0xc7600c18", "xor d=8 c=13", "mulc d=7 c=8 imm=0x291da8cf", "mulc d=3 c=7 imm=0x4c89c6a3", "rot d=11 c=3 k=18", "add d=10 c=11", "xorc d=5 c=10 imm=0xc5dba408", "xor d=3 c=5", "add d=2 c=3", "xor d=14 c=2", "xor d=4 c=14", "add d=9 c=4", "rot d=15 c=9 k=22", "xor d=10 c=15", "add d=7 c=10", "rot d=0 c=7 k=23", "add d=2 c=0", "add d=5 c=2", "rot d=11 c=5 k=13", "andx d=10 c=11 b=9", "addc d=5 c=10 imm=0xbbb408f7", "xor d=14 c=5", "add d=15 c=14", "rot d=5 c=15 k=5", "mulc2 d=11 c=5 imm=0x112a6951", "xrot d=7 c=11 k=31", "add d=5 c=7", "mul d=7 c=5", "mulc d=12 c=7 imm=0x0c54418f", "add d=5 c=12", "add d=13 c=5", "rot d=7 c=13 k=13", "rot d=9 c=7 k=22", "mulc2 d=8 c=9 imm=0x1b5f8089", "mulc2 d=6 c=8 imm=0x8a305f3d", "mulc d=5 c=6 imm=0x9e934355", "xorc d=13 c=5 imm=0x3262a24f", "andx d=7 c=13 b=5", "xor d=2 c=7", "orx d=14 c=2 b=7", "add d=11 c=14", "sub d=6 c=11", "xor d=5 c=6", "xrot d=6 c=5 k=24", "xorc d=8 c=6 imm=0x2110db43", "addc d=4 c=8 imm=0x91e5ef8b", "addc d=15 c=4 imm=0x039dc8ac", "mul d=2 c=15", "xor d=10 c=2", "addc d=4 c=10 imm=0x38936459", "xorc d=13 c=4 imm=0x8a7a8a06", "xrot d=0 c=13 k=24", "mulc2 d=13 c=0 imm=0xa7c0dc87", "add d=2 c=13", "rot d=11 c=2 k=25", "sub d=6 c=11", "mul d=1 c=6", "rot d=0 c=1 k=21", "xrot d=11 c=0 k=23", "xor d=7 c=11", "add d=2 c=7", "mul d=9 c=2", "rot d=11 c=9 k=24", "andx d=1 c=11 b=3", "xrot d=0 c=1 k=13", "sub d=12 c=0", "andx d=6 c=12 b=5", "add d=4 c=6", "xor d=13 c=4", "rot d=1 c=13 k=26", "rot d=11 c=1 k=27", "add d=1 c=11", "andx d=14 c=1 b=11", "sub d=4 c=14", "sub d=5 c=4", "xor d=8 c=5", "xor d=2 c=8", "add d=4 c=2", "rot d=14 c=4 k=24", "addc d=0 c=14 imm=0x6b4adcad", "xor d=1 c=0", "rot d=9 c=1 k=7", "xor d=10 c=9", "xrot d=6 c=10 k=27", "sub d=0 c=6", "addc d=6 c=0 imm=0x5ac44880", "xor d=8 c=6", "xor d=1 c=8", "mul d=0 c=1", "sub d=5 c=0", "sub d=3 c=5", "add d=7 c=3", "mul d=0 c=7", "mulc d=1 c=0 imm=0xc26b3d23", "add d=13 c=1", "xor d=7 c=13", "xrot d=3 c=7 k=2", "mulc d=12 c=3 imm=0x36078279", "sub d=9 c=12", "xorc d=12 c=9 imm=0x6a60fb43", "rot d=2 c=12 k=15", "xor d=7 c=2", "addc d=0 c=7 imm=0xe00e86a2", "xrot d=9 c=0 k=8", "rot d=3 c=9 k=28", "orx d=8 c=3 b=15", "xorc d=5 c=8 imm=0xe55fb8ae", "xor d=4 c=5", "xor d=8 c=4", "mul d=6 c=8", "add d=15 c=6", "mulc d=1 c=15 imm=0x21de53d1", "xor d=13 c=1", "xrot d=12 c=13 k=14", "xorc d=4 c=12 imm=0xc98f0a34", "mul d=6 c=4", "sub d=2 c=6", "add d=7 c=2", "xor d=3 c=7", "addc d=5 c=3 imm=0xa927519f", "add d=10 c=5", "xorc d=13 c=10 imm=0xcb96c77b", "mul d=4 c=13", "sub d=1 c=4", "add d=5 c=1", "rot d=15 c=5 k=2", "xor d=8 c=15", "mul d=5 c=8", "sub d=12 c=5", "xrot d=4 c=12 k=24", "rot d=15 c=4 k=18", "mulc d=0 c=15 imm=0x043e38c5", "mul d=15 c=0", "xor d=11 c=15", "addc d=14 c=11 imm=0x53bbe6c0", "mul d=0 c=14", "xor d=9 c=0", "mul d=6 c=9", "orx d=2 c=6 b=1", "add d=13 c=2", "xrot d=10 c=13 k=10", "add d=1 c=10", "mulc2 d=15 c=1 imm=0x583e8481", "xorc d=13 c=15 imm=0x2cc63257", "xor d=7 c=13", "rot d=3 c=7 k=28", "sub d=2 c=3", "rot d=14 c=2 k=11", "orx d=1 c=14 b=7", "xor d=8 c=1", "mulc d=11 c=8 imm=0x0e28ad8f", "mulc d=3 c=11 imm=0x298e4869", "sub d=11 c=3", "mulc d=3 c=11 imm=0x7d313b6b", "mulc d=11 c=3 imm=0xeca4dbcb", "sub d=2 c=11", "rot d=10 c=2 k=18", "addc d=11 c=10 imm=0xfceb9d18", "orx d=12 c=11 b=1", "mul d=4 c=12", "xor d=5 c=4", "andx d=0 c=5 b=6", "xor d=12 c=0", "addc d=9 c=12 imm=0xb01e0678", "sub d=2 c=9", "add d=15 c=2", "xorc d=11 c=15 imm=0x53447cc1", "addc d=14 c=11 imm=0xaf64abb5", "xorc d=9 c=14 imm=0xc2548a26", "mul d=2 c=9", "xrot d=7 c=2 k=5", "mul d=13 c=7", "mulc d=5 c=13 imm=0x10dbc9dd", "sub d=12 c=5", "add d=2 c=12", "sub d=15 c=2", "mulc d=4 c=15 imm=0x3582fe41", "xrot d=7 c=4 k=28", "mulc2 d=13 c=7 imm=0x7fe12955", "mulc d=12 c=13 imm=0xd86d1b4b", "addc d=10 c=12 imm=0xb0f59a52", "mul d=0 c=10", "xor d=7 c=0", "xor d=10 c=7", "xor d=8 c=10", "mul d=10 c=8", "orx d=5 c=10 b=7", "xrot d=13 c=5 k=11", "andx d=0 c=13 b=11", "add d=6 c=0", "rot d=3 c=6 k=8", "xorc d=13 c=3 imm=0x97eba12f", "mul d=10 c=13", "add d=1 c=10", "xrot d=12 c=1 k=8", "xor d=11 c=12", "xor d=7 c=11", "mul d=1 c=7", "addc d=4 c=1 imm=0x3e58791a", "orx d=0 c=4 b=1", "xor d=10 c=0", "rot d=15 c=10 k=19", "xor d=13 c=15", "xorc d=7 c=13 imm=0x2741705d", "xrot d=4 c=7 k=18", "addc d=15 c=4 imm=0xe6934fbb", "sub d=3 c=15", "mulc d=11 c=3 imm=0x1f6fe0a9", "xor d=15 c=11", "mulc d=0 c=15 imm=0x1ef7dac7", "addc d=14 c=0 imm=0x85ea7167", "add d=8 c=14", "mulc d=2 c=8 imm=0xbd1c80dd", "add d=7 c=2", "xor d=4 c=7", "rot d=11 c=4 k=28", "mulc d=9 c=11 imm=0xf99784f9", "xrot d=5 c=9 k=28", "add d=6 c=5", "xrot d=10 c=6 k=30", "mul d=15 c=10", "xor d=11 c=15", "xorc d=10 c=11 imm=0xe63d1f0f", "andx d=0 c=10 b=15", "mulc d=14 c=0 imm=0xdd771591", "xrot d=6 c=14 k=25", "orx d=12 c=6 b=3", "mulc d=6 c=12 imm=0x1aef487d", "addc d=2 c=6 imm=0x4803fbdf", "xor d=9 c=2", "andx d=12 c=9 b=13", "andx d=15 c=12 b=10", "mul d=12 c=15", "xor d=14 c=12", "mulc d=11 c=14 imm=0xcdae3347", "xrot d=2 c=11 k=25", "xorc d=9 c=2 imm=0xd54df97b", "mul d=0 c=9", "xorc d=9 c=0 imm=0x36482476", "mul d=5 c=9", "add d=9 c=5", "xrot d=11 c=9 k=19", "andx d=15 c=11 b=4", "xor d=14 c=15", "add d=1 c=14", "rot d=11 c=1 k=20", "addc d=9 c=11 imm=0x08509d57", "mul d=15 c=9", "sub d=9 c=15", "mulc d=14 c=9 imm=0x9757fd53", "andx d=13 c=14 b=5", "add d=6 c=13", "mulc d=15 c=6 imm=0x3e6be04b", "mul d=12 c=15", "rot d=2 c=12 k=25", "sub d=13 c=2", "xor d=8 c=13", "xrot d=4 c=8 k=31", "xor d=8 c=4", "xor d=10 c=8", "rot d=1 c=10 k=20", "addc d=7 c=1 imm=0x9218a857", "add d=0 c=7", "xor d=11 c=0", "rot d=15 c=11 k=1", "xrot d=10 c=15 k=1", "xorc d=3 c=10 imm=0x60be6fe9", "mulc d=4 c=3 imm=0x4177a7a7", "xrot d=7 c=4 k=25", "addc d=11 c=7 imm=0x85521284", "mulc d=4 c=11 imm=0x95e55935", "add d=3 c=4", "add d=15 c=3", "addc d=5 c=15 imm=0x7518eed4", "xorc d=9 c=5 imm=0x087e9a42", "mul d=10 c=9", "sub d=8 c=10", "xorc d=5 c=8 imm=0xf3fb3909", "andx d=14 c=5 b=8", "addc d=10 c=14 imm=0x7a9e6e04", "orx d=0 c=10 b=2", "mulc d=6 c=0 imm=0xe355b5f1", "mulc2 d=5 c=6 imm=0xe711e2fd", "rot d=10 c=5 k=13", "rot d=8 c=10 k=3", "xor d=13 c=8", "xor d=11 c=13", "sub d=9 c=11", "xorc d=12 c=9 imm=0xc8862d11", "xor d=4 c=12", "rot d=15 c=4 k=23", "xorc d=9 c=15 imm=0x413dfad3", "mul d=11 c=9", "xrot d=1 c=11 k=31", "xorc d=5 c=1 imm=0xe7b946b4", "sub d=15 c=5", "mul d=2 c=15", "mul d=5 c=2", "sub d=4 c=5", "orx d=9 c=4 b=13", "xorc d=0 c=9 imm=0x7854824f", "mulc d=3 c=0 imm=0x442b482d", "rot d=11 c=3 k=2", "orx d=6 c=11 b=13", "orx d=7 c=6 b=9", "mul d=0 c=7", "add d=4 c=0", "andx d=14 c=4 b=7", "orx d=10 c=14 b=3", "xor d=9 c=10", "mul d=10 c=9", "mul d=4 c=10", "add d=14 c=4", "sub d=6 c=14", "xor d=15 c=6", "mul d=6 c=15", "xor d=10 c=6", "xor d=6 c=10", "andx d=8 c=6 b=0", "xor d=5 c=8", "xor d=10 c=5", "rot d=7 c=10 k=28", "addc d=1 c=7 imm=0xe4c19693", "rot d=0 c=1 k=15", "xrot d=2 c=0 k=30", "rot d=1 c=2 k=19", "addc d=6 c=1 imm=0x87218495", "rot d=7 c=6 k=15", "orx d=6 c=7 b=5", "rot d=10 c=6 k=7", "mul d=2 c=10", "rot d=0 c=2 k=27", "xor d=10 c=0", "mulc d=15 c=10 imm=0x5787be43", "sub d=2 c=15", "xrot d=0 c=2 k=14", "add d=6 c=0", "add d=5 c=6", "add d=15 c=5", "rot d=1 c=15 k=4", "add d=10 c=1", "mulc d=7 c=10 imm=0x5b66a27d", "sub d=11 c=7", "xrot d=7 c=11 k=10", "mul d=10 c=7", "xrot d=2 c=10 k=12", "xor d=14 c=2", "mul d=7 c=14", "addc d=10 c=7 imm=0x51e1605b", "addc d=11 c=10 imm=0x07a5770b", "rot d=12 c=11 k=25", "addc d=13 c=12 imm=0x173cbaed", "sub d=14 c=13", "mul d=8 c=14", "mulc d=6 c=8 imm=0x198bf8ab", "add d=13 c=6", "mulc d=4 c=13 imm=0x4a858065", "add d=8 c=4", "xrot d=15 c=8 k=30", "addc d=12 c=15 imm=0x41cd5528", "rot d=15 c=12 k=1", "mulc d=12 c=15 imm=0xf11bd25d", "rot d=1 c=12 k=23", "xrot d=9 c=1 k=12", "mulc d=13 c=9 imm=0x63f2bd71", "addc d=4 c=13 imm=0x941778a1", "mulc2 d=11 c=4 imm=0x8d0fa58d", "xrot d=6 c=11 k=2", "addc d=12 c=6 imm=0x1548d255", "addc d=1 c=12 imm=0x2e20325e", "xorc d=7 c=1 imm=0x352c2791", "xor d=12 c=7", "mulc d=0 c=12 imm=0xc3e7b99b", "xor d=7 c=0", "xor d=1 c=7", "xrot d=15 c=1 k=23", "xor d=14 c=15", "xrot d=11 c=14 k=31", "add d=10 c=11", "mulc d=7 c=10 imm=0x7c1fbac9", "mulc d=6 c=7 imm=0x0b46f65b", "xor d=10 c=6", "xor d=6 c=10", "xrot d=11 c=6 k=15", "xor d=14 c=11", "xrot d=10 c=14 k=21", "sub d=7 c=10", "add d=2 c=7", "xrot d=4 c=2 k=29", "xrot d=15 c=4 k=29", "mul d=1 c=15", "rot d=8 c=1 k=3", "xrot d=15 c=8 k=12", "mulc2 d=14 c=15 imm=0x945fd715", "mulc d=6 c=14 imm=0xf9a3efb3", "xor d=8 c=6", "sub d=11 c=8", "mul d=9 c=11", "xor d=8 c=9", "add d=11 c=8", "addc d=7 c=11 imm=0xe0e87381", "xor d=9 c=7", "mul d=1 c=9", "xor d=5 c=1", "xrot d=11 c=5 k=26", "mul d=12 c=11", "sub d=4 c=12", "sub d=10 c=4", "sub d=0 c=10", "xor d=6 c=0", "mulc2 d=8 c=6 imm=0x92e1e5f7", "orx d=1 c=8 b=3", "mulc d=10 c=1 imm=0x1eb329d3", "rot d=0 c=10 k=29", "rot d=9 c=0 k=6", "addc d=3 c=9 imm=0x1bcf547c", "sub d=9 c=3", "add d=14 c=9", "xrot d=5 c=14 k=22", "mulc2 d=15 c=5 imm=0x3675a9ad", "mul d=7 c=15", "addc d=4 c=7 imm=0x641005b4", "addc d=1 c=4 imm=0x6a3b3afb", "add d=11 c=1", "xorc d=9 c=11 imm=0x30def5fe", "andx d=6 c=9 b=8", "rot d=11 c=6 k=28", "add d=6 c=11", "mulc d=12 c=6 imm=0x4d6dc8b3", "sub d=7 c=12", "xor d=9 c=7", "mul d=0 c=9", "add d=1 c=0", "xorc d=7 c=1 imm=0xb420685c", "andx d=1 c=7 b=12", "orx d=12 c=1 b=9", "xorc d=14 c=12 imm=0x076d63f7", "mul d=1 c=14", "mulc2 d=5 c=1 imm=0x2026ae47", "rot d=15 c=5 k=23", "add d=9 c=15", "xor d=1 c=9", "mulc d=4 c=1 imm=0x8e6cffbf", "xor d=0 c=4", "mul d=3 c=0", "xor d=14 c=3", "sub d=6 c=14", "mulc d=15 c=6 imm=0xf52e633d", "mul d=14 c=15", "sub d=4 c=14", "xor d=0 c=4", "mulc d=1 c=0 imm=0xd9650db9", "rot d=13 c=1 k=27", "xrot d=15 c=13 k=22", "add d=12 c=15", "sub d=1 c=12", "mulc2 d=2 c=1 imm=0xd1740ecb", "mul d=11 c=2", "mul d=0 c=11", "sub d=4 c=0", "xorc d=11 c=4 imm=0x6823955f", "xor d=3 c=11", "mul d=13 c=3", "xrot d=3 c=13 k=8", "mulc d=8 c=3 imm=0x615f5e9d", "sub d=0 c=8", "xor d=3 c=0", "xorc d=1 c=3 imm=0xb1dc5436", "mul d=9 c=1", "add d=13 c=9", "mulc2 d=3 c=13 imm=0xfe0cf937", "mul d=8 c=3", "add d=4 c=8", "addc d=3 c=4 imm=0x4f38c2cc", "addc d=12 c=3 imm=0x3b3cb536", "sub d=1 c=12", "mul d=6 c=1", "mulc d=8 c=6 imm=0x89b78741", "add d=5 c=8", "addc d=1 c=5 imm=0x37d58859", "mulc d=7 c=1 imm=0x4d7d11c3", "andx d=4 c=7 b=11", "xorc d=6 c=4 imm=0xe3a88b56", "rot d=13 c=6 k=20", "mul d=10 c=13", "add d=14 c=10", "orx d=8 c=14 b=6", "addc d=11 c=8 imm=0xca45662d", "rot d=14 c=11 k=13", "mul d=5 c=14", "xrot d=14 c=5 k=4", "sub d=8 c=14", "xor d=13 c=8", "sub d=6 c=13", "orx d=14 c=6 b=4", "sub d=0 c=14", "addc d=6 c=0 imm=0x19712582", "xrot d=15 c=6 k=27", "mul d=3 c=15", "sub d=5 c=3", "xrot d=8 c=5 k=17"], + ["xrot d=2 c=0 k=30", "rot d=12 c=2 k=17", "mul d=13 c=12", "mul d=11 c=13", "xrot d=1 c=11 k=17", "sub d=10 c=1", "add d=2 c=10", "mulc d=11 c=2 imm=0xea1e243d", "xorc d=10 c=11 imm=0x2e9ac4cb", "sub d=5 c=10", "rot d=1 c=5 k=20", "andx d=6 c=1 b=9", "add d=11 c=6", "mul d=13 c=11", "mul d=15 c=13", "andx d=3 c=15 b=2", "sub d=8 c=3", "addc d=5 c=8 imm=0x40407046", "mul d=3 c=5", "mul d=12 c=3", "xorc d=14 c=12 imm=0x972141ae", "sub d=4 c=14", "mul d=1 c=4", "sub d=15 c=1", "mulc2 d=0 c=15 imm=0x6b61ba2b", "rot d=13 c=0 k=24", "mulc2 d=0 c=13 imm=0xbebc2e0d", "addc d=11 c=0 imm=0x2c68ac9e", "orx d=3 c=11 b=10", "mulc2 d=15 c=3 imm=0xd6e907b5", "add d=1 c=15", "add d=12 c=1", "add d=10 c=12", "add d=2 c=10", "xor d=1 c=2", "mul d=0 c=1", "xor d=13 c=0", "mul d=6 c=13", "mulc d=0 c=6 imm=0xa1b16ef7", "orx d=8 c=0 b=11", "xrot d=0 c=8 k=24", "sub d=9 c=0", "mulc d=13 c=9 imm=0x8cb2b469", "xrot d=10 c=13 k=20", "sub d=13 c=10", "xrot d=11 c=13 k=23", "mulc d=1 c=11 imm=0x0cac0de1", "rot d=7 c=1 k=17", "mulc d=10 c=7 imm=0xb33ec0eb", "add d=12 c=10", "xrot d=11 c=12 k=31", "xor d=8 c=11", "mulc2 d=4 c=8 imm=0x0fdcff95", "andx d=13 c=4 b=12", "rot d=6 c=13 k=4", "mulc d=12 c=6 imm=0x526264ef", "sub d=4 c=12", "mulc d=7 c=4 imm=0x4afe3457", "mulc2 d=12 c=7 imm=0x4728f4cb", "xor d=4 c=12", "xrot d=15 c=4 k=21", "add d=8 c=15", "sub d=5 c=8", "orx d=3 c=5 b=12", "add d=15 c=3", "xrot d=13 c=15 k=13", "andx d=0 c=13 b=11", "xor d=4 c=0", "add d=14 c=4", "xor d=8 c=14", "xrot d=0 c=8 k=17", "add d=1 c=0", "mulc d=8 c=1 imm=0xff70caf9", "xorc d=2 c=8 imm=0x0ff2bb06", "mul d=1 c=2", "mul d=12 c=1", "xrot d=14 c=12 k=12", "add d=13 c=14", "rot d=11 c=13 k=15", "mulc d=3 c=11 imm=0xa18acb9f", "xorc d=1 c=3 imm=0x4af36d07", "addc d=2 c=1 imm=0x2ee01525", "xor d=5 c=2", "addc d=3 c=5 imm=0x96db46ec", "andx d=12 c=3 b=14", "xorc d=13 c=12 imm=0x8a4b65c5", "xor d=7 c=13", "add d=5 c=7", "add d=0 c=5", "add d=7 c=0", "mul d=3 c=7", "mulc d=7 c=3 imm=0x0daf64ef", "mulc d=9 c=7 imm=0x2f262a6d", "xor d=1 c=9", "sub d=12 c=1", "add d=2 c=12", "andx d=12 c=2 b=15", "andx d=10 c=12 b=15", "xor d=14 c=10", "rot d=1 c=14 k=26", "add d=9 c=1", "xor d=8 c=9", "xorc d=15 c=8 imm=0x69952578", "xorc d=0 c=15 imm=0x45e70bd6", "sub d=8 c=0", "mulc2 d=14 c=8 imm=0x39098d3b", "mul d=6 c=14", "xorc d=12 c=6 imm=0xd07ef179", "sub d=6 c=12", "xrot d=15 c=6 k=2", "add d=6 c=15", "andx d=9 c=6 b=1", "mul d=5 c=9", "xrot d=11 c=5 k=22", "mul d=9 c=11", "mulc2 d=6 c=9 imm=0x36ed5b21", "mul d=9 c=6", "xrot d=13 c=9 k=4", "sub d=1 c=13", "mul d=4 c=1", "andx d=3 c=4 b=5", "mulc2 d=2 c=3 imm=0x38309bf7", "orx d=1 c=2 b=11", "mulc d=9 c=1 imm=0xc0be3739", "xorc d=15 c=9 imm=0x07de5788", "mulc2 d=11 c=15 imm=0xd8c6366d", "rot d=0 c=11 k=18", "xrot d=15 c=0 k=5", "add d=3 c=15", "sub d=9 c=3", "xor d=11 c=9", "mul d=15 c=11", "mulc2 d=1 c=15 imm=0x0246d699", "mul d=10 c=1", "add d=12 c=10", "add d=10 c=12", "orx d=7 c=10 b=9", "xor d=9 c=7", "xor d=3 c=9", "orx d=14 c=3 b=0", "xrot d=1 c=14 k=17", "xor d=11 c=1", "xor d=3 c=11", "xrot d=10 c=3 k=8", "mul d=3 c=10", "xor d=2 c=3", "mulc d=9 c=2 imm=0xefdd0db1", "orx d=12 c=9 b=5", "xrot d=5 c=12 k=6", "mulc d=11 c=5 imm=0xc9b9d1df", "xor d=1 c=11", "xor d=5 c=1", "xor d=7 c=5", "andx d=10 c=7 b=11", "xor d=7 c=10", "xrot d=15 c=7 k=25", "xor d=10 c=15", "addc d=9 c=10 imm=0xf87f58f8", "rot d=0 c=9 k=15", "add d=9 c=0", "orx d=1 c=9 b=7", "addc d=14 c=1 imm=0x676d23d7", "orx d=0 c=14 b=6", "rot d=8 c=0 k=15", "mul d=14 c=8", "andx d=8 c=14 b=6", "add d=4 c=8", "mulc d=2 c=4 imm=0xe1a03111", "sub d=15 c=2", "andx d=0 c=15 b=4", "xor d=15 c=0", "xorc d=8 c=15 imm=0xad7880f9", "rot d=4 c=8 k=11", "sub d=11 c=4", "add d=6 c=11", "mul d=9 c=6", "xor d=0 c=9", "xrot d=15 c=0 k=11", "mulc d=2 c=15 imm=0x03f5accb", "rot d=12 c=2 k=11", "xor d=9 c=12", "mul d=14 c=9", "xor d=1 c=14", "mulc d=8 c=1 imm=0x9cf27933", "rot d=15 c=8 k=27", "andx d=7 c=15 b=8", "add d=5 c=7", "mulc d=9 c=5 imm=0xe294856f", "xor d=1 c=9", "xor d=11 c=1", "mulc d=15 c=11 imm=0x4555f2d5", "xrot d=7 c=15 k=31", "add d=13 c=7", "xor d=10 c=13", "mulc d=2 c=10 imm=0x75193e43", "sub d=9 c=2", "mulc2 d=3 c=9 imm=0x8c57e72d", "rot d=2 c=3 k=21", "mulc d=4 c=2 imm=0x55a02867", "sub d=1 c=4", "sub d=9 c=1", "xrot d=2 c=9 k=8", "xor d=14 c=2", "rot d=0 c=14 k=18", "mul d=14 c=0", "rot d=6 c=14 k=18", "sub d=10 c=6", "xor d=8 c=10", "add d=9 c=8", "xor d=4 c=9", "mulc d=7 c=4 imm=0x49afec39", "orx d=14 c=7 b=1", "xrot d=6 c=14 k=20", "xrot d=3 c=6 k=28", "mul d=10 c=3", "rot d=7 c=10 k=16", "add d=8 c=7", "mulc2 d=11 c=8 imm=0x47f9228b", "andx d=6 c=11 b=14", "andx d=14 c=6 b=13", "xrot d=15 c=14 k=30", "xor d=13 c=15", "xrot d=8 c=13 k=19", "add d=7 c=8", "sub d=6 c=7", "mulc2 d=1 c=6 imm=0x89a3aa17", "sub d=10 c=1", "xor d=13 c=10", "mul d=14 c=13", "add d=15 c=14", "xor d=4 c=15", "rot d=1 c=4 k=27", "add d=0 c=1", "rot d=7 c=0 k=30", "xor d=10 c=7", "add d=14 c=10", "add d=3 c=14", "xorc d=12 c=3 imm=0x3d91f806", "sub d=0 c=12", "mul d=3 c=0", "xor d=12 c=3", "rot d=4 c=12 k=7", "xor d=14 c=4", "mul d=6 c=14", "rot d=10 c=6 k=23", "sub d=15 c=10", "sub d=6 c=15", "xrot d=8 c=6 k=2", "rot d=3 c=8 k=2", "orx d=4 c=3 b=10", "mulc d=1 c=4 imm=0x5b3cd913", "xrot d=11 c=1 k=2", "mulc d=0 c=11 imm=0x3c693ccb", "add d=15 c=0", "xorc d=10 c=15 imm=0x5a83618e", "mul d=3 c=10", "mulc2 d=11 c=3 imm=0x8cff3953", "sub d=15 c=11", "rot d=10 c=15 k=29", "addc d=11 c=10 imm=0xef64efa3", "rot d=0 c=11 k=24", "xrot d=11 c=0 k=20", "rot d=0 c=11 k=18", "xor d=6 c=0", "sub d=4 c=6", "add d=15 c=4", "rot d=5 c=15 k=20", "xor d=9 c=5", "add d=0 c=9", "add d=7 c=0", "mulc2 d=1 c=7 imm=0x0b7f59b3", "addc d=4 c=1 imm=0x145ca745", "mulc d=3 c=4 imm=0x45e8e60b", "add d=0 c=3", "mulc d=14 c=0 imm=0x89fefe0b", "xor d=5 c=14", "xor d=0 c=5", "mul d=10 c=0", "xrot d=13 c=10 k=26", "rot d=4 c=13 k=29", "rot d=15 c=4 k=13", "rot d=3 c=15 k=16", "sub d=9 c=3", "xorc d=12 c=9 imm=0x95781226", "xor d=13 c=12", "rot d=10 c=13 k=28", "add d=5 c=10", "mul d=12 c=5", "addc d=14 c=12 imm=0x01116f8f", "xrot d=13 c=14 k=26", "addc d=10 c=13 imm=0x23aea8a9", "orx d=8 c=10 b=12", "andx d=13 c=8 b=0", "add d=1 c=13", "xor d=6 c=1", "andx d=4 c=6 b=7", "add d=11 c=4", "mul d=4 c=11", "andx d=7 c=4 b=3", "xrot d=11 c=7 k=24", "rot d=6 c=11 k=11", "sub d=0 c=6", "mul d=12 c=0", "rot d=4 c=12 k=19", "xrot d=2 c=4 k=8", "add d=10 c=2", "rot d=11 c=10 k=25", "xor d=1 c=11", "mulc d=12 c=1 imm=0x6229cc97", "mul d=14 c=12", "sub d=4 c=14", "andx d=13 c=4 b=1", "sub d=1 c=13", "add d=12 c=1", "addc d=7 c=12 imm=0x88900fdc", "mul d=6 c=7", "mulc2 d=15 c=6 imm=0x84135b45", "xor d=8 c=15", "add d=15 c=8", "xor d=5 c=15", "xor d=8 c=5", "sub d=11 c=8", "mulc2 d=3 c=11 imm=0x2e47fa49", "xrot d=12 c=3 k=10", "sub d=8 c=12", "rot d=13 c=8 k=15", "rot d=9 c=13 k=23", "orx d=0 c=9 b=11", "mulc d=12 c=0 imm=0x733a341d", "sub d=13 c=12", "mul d=4 c=13", "add d=7 c=4", "add d=1 c=7", "rot d=15 c=1 k=2", "xor d=3 c=15", "sub d=15 c=3", "rot d=1 c=15 k=9", "andx d=12 c=1 b=0", "andx d=11 c=12 b=13", "sub d=14 c=11", "mulc d=11 c=14 imm=0xedf296ed", "andx d=12 c=11 b=14", "rot d=11 c=12 k=1", "mul d=5 c=11", "xrot d=14 c=5 k=7", "xorc d=7 c=14 imm=0x4af9834b", "xor d=10 c=7", "andx d=9 c=10 b=2", "xor d=13 c=9", "andx d=14 c=13 b=7", "add d=10 c=14", "xor d=12 c=10", "sub d=13 c=12", "andx d=1 c=13 b=14", "mulc d=12 c=1 imm=0xf8f0e297", "mul d=5 c=12", "andx d=15 c=5 b=7", "rot d=11 c=15 k=27", "mulc d=9 c=11 imm=0xbefccb87", "addc d=15 c=9 imm=0x17cb62dd", "xor d=0 c=15", "xor d=7 c=0", "xor d=3 c=7", "add d=7 c=3", "xor d=10 c=7", "mul d=9 c=10", "orx d=12 c=9 b=14", "xrot d=3 c=12 k=25", "add d=10 c=3", "rot d=9 c=10 k=3", "xor d=6 c=9", "xrot d=14 c=6 k=21", "mulc2 d=3 c=14 imm=0x65a97173", "xrot d=5 c=3 k=6", "rot d=7 c=5 k=24", "add d=15 c=7", "add d=13 c=15", "mul d=0 c=13", "xrot d=3 c=0 k=5", "mul d=15 c=3", "andx d=6 c=15 b=12", "xor d=2 c=6", "xor d=8 c=2", "mulc2 d=1 c=8 imm=0x6e553265", "addc d=12 c=1 imm=0x0da30db5", "xor d=7 c=12", "xor d=1 c=7", "xor d=3 c=1", "add d=4 c=3", "xor d=15 c=4", "add d=3 c=15", "mul d=2 c=3", "add d=7 c=2", "mulc d=0 c=7 imm=0x97f0fd93", "xrot d=14 c=0 k=27", "mulc d=13 c=14 imm=0xb04f1b3f", "sub d=9 c=13", "add d=3 c=9", "sub d=4 c=3", "xor d=8 c=4", "xor d=9 c=8", "add d=4 c=9", "mulc2 d=9 c=4 imm=0x5b96b23b", "add d=1 c=9", "add d=8 c=1", "add d=14 c=8", "xrot d=5 c=14 k=12", "mulc d=8 c=5 imm=0x6395a44f", "xorc d=12 c=8 imm=0x1623eb44", "mulc d=14 c=12 imm=0xed649ca9", "xrot d=11 c=14 k=2", "mul d=12 c=11", "xrot d=15 c=12 k=23", "add d=3 c=15", "mul d=6 c=3", "mulc d=8 c=6 imm=0x29ccc511", "add d=4 c=8", "mulc d=14 c=4 imm=0xa94e09cb", "mulc d=7 c=14 imm=0x2353916b", "andx d=1 c=7 b=9", "mulc d=8 c=1 imm=0x3189b2c5", "xrot d=10 c=8 k=7", "mulc d=7 c=10 imm=0x8fbc5699", "xorc d=12 c=7 imm=0x02fcc6f5", "add d=6 c=12", "add d=4 c=6", "xorc d=15 c=4 imm=0x37cf53dc", "mul d=9 c=15", "sub d=14 c=9", "sub d=7 c=14", "rot d=3 c=7 k=15", "xor d=0 c=3", "rot d=7 c=0 k=7", "rot d=14 c=7 k=14", "add d=12 c=14", "mulc d=10 c=12 imm=0xb35348fb", "xrot d=5 c=10 k=17", "xorc d=14 c=5 imm=0x43820636", "add d=13 c=14", "mulc d=3 c=13 imm=0xaeaf3829", "mul d=1 c=3", "add d=2 c=1", "rot d=13 c=2 k=9", "xrot d=3 c=13 k=26", "rot d=2 c=3 k=17", "xrot d=5 c=2 k=26", "add d=9 c=5", "mulc d=3 c=9 imm=0xc027efe3", "mul d=6 c=3", "mulc d=8 c=6 imm=0x33c90921", "sub d=2 c=8", "andx d=4 c=2 b=15", "mul d=9 c=4", "add d=2 c=9", "orx d=13 c=2 b=6", "mulc d=4 c=13 imm=0xde5f056f", "xor d=3 c=4", "mul d=0 c=3", "mul d=14 c=0", "add d=11 c=14", "andx d=2 c=11 b=6", "mul d=1 c=2", "addc d=12 c=1 imm=0x027965c8", "mul d=14 c=12", "sub d=15 c=14", "addc d=6 c=15 imm=0x3f2ed460", "xor d=14 c=6", "xor d=9 c=14", "xor d=14 c=9", "sub d=8 c=14", "mulc2 d=9 c=8 imm=0x37363dc7", "xor d=2 c=9", "addc d=9 c=2 imm=0x36d721cd", "xorc d=2 c=9 imm=0x6a3aa7cb", "xrot d=13 c=2 k=4", "xor d=1 c=13", "xor d=11 c=1", "andx d=10 c=11 b=3", "add d=1 c=10", "andx d=13 c=1 b=0", "add d=5 c=13", "add d=0 c=5", "addc d=1 c=0 imm=0x29e429d0", "mul d=7 c=1", "add d=1 c=7", "mulc d=13 c=1 imm=0xebce972f", "xorc d=14 c=13 imm=0x1155a47f", "add d=2 c=14", "orx d=5 c=2 b=3", "addc d=1 c=5 imm=0x6ee2efc2", "mul d=6 c=1", "mulc2 d=12 c=6 imm=0xf94d29ab", "xorc d=1 c=12 imm=0x83a5d198", "andx d=8 c=1 b=2", "mulc2 d=15 c=8 imm=0xf23f5c07", "mul d=12 c=15", "xor d=4 c=12", "rot d=6 c=4 k=27", "rot d=14 c=6 k=24", "add d=5 c=14", "xorc d=13 c=5 imm=0x3acfc3e3", "xor d=12 c=13", "andx d=4 c=12 b=7", "andx d=2 c=4 b=10", "xrot d=15 c=2 k=18", "add d=0 c=15", "mul d=8 c=0", "xor d=13 c=8", "sub d=12 c=13", "xrot d=3 c=12 k=4", "addc d=15 c=3 imm=0x92e6fcce", "rot d=10 c=15 k=6", "xrot d=4 c=10 k=13", "xorc d=0 c=4 imm=0x4eb97c7f", "sub d=5 c=0", "mulc d=2 c=5 imm=0x02dedd01", "xor d=7 c=2", "orx d=13 c=7 b=1", "add d=10 c=13", "mul d=2 c=10", "mul d=6 c=2", "xor d=9 c=6", "add d=14 c=9", "sub d=12 c=14", "xrot d=14 c=12 k=29", "addc d=7 c=14 imm=0x69164b49", "mulc2 d=4 c=7 imm=0x00950233", "andx d=9 c=4 b=11", "mulc d=1 c=9 imm=0x4e1cc661", "sub d=2 c=1", "mulc d=8 c=2 imm=0x8b929a3b", "add d=2 c=8", "orx d=15 c=2 b=9", "addc d=3 c=15 imm=0x4a9cd552", "mulc d=0 c=3 imm=0x32dafb91", "rot d=9 c=0 k=17", "mul d=11 c=9", "sub d=9 c=11", "add d=6 c=9", "addc d=9 c=6 imm=0xf58412b3", "addc d=7 c=9 imm=0x664fa0c3", "mulc2 d=12 c=7 imm=0x0f8329a3", "addc d=11 c=12 imm=0x5b5d3b76", "sub d=5 c=11", "mulc d=10 c=5 imm=0x206437ad", "mulc2 d=12 c=10 imm=0xbaaafbc9", "mul d=8 c=12", "add d=0 c=8", "addc d=1 c=0 imm=0x17331c4f", "andx d=3 c=1 b=2", "xrot d=2 c=3 k=24", "orx d=0 c=2 b=1", "xrot d=1 c=0 k=11", "mul d=0 c=1", "mulc2 d=2 c=0 imm=0xfa17cdb7", "add d=14 c=2", "xor d=3 c=14", "add d=13 c=3", "add d=2 c=13", "xrot d=8 c=2 k=28", "mul d=1 c=8", "sub d=14 c=1", "rot d=11 c=14 k=9", "xor d=10 c=11", "add d=9 c=10", "addc d=0 c=9 imm=0x3437b9ad", "mulc d=4 c=0 imm=0x6074d9ed", "addc d=12 c=4 imm=0xf268adfe", "addc d=14 c=12 imm=0x05784ee6", "mulc2 d=13 c=14 imm=0x92ea562f", "xrot d=11 c=13 k=18", "rot d=2 c=11 k=4", "mulc d=13 c=2 imm=0x49aaf125", "sub d=3 c=13", "addc d=7 c=3 imm=0x1d4d2968", "andx d=5 c=7 b=12", "sub d=15 c=5", "xorc d=0 c=15 imm=0xa66653d0", "add d=2 c=0", "sub d=11 c=2", "xrot d=0 c=11 k=16", "rot d=3 c=0 k=4", "mul d=8 c=3", "xorc d=6 c=8 imm=0x228a8e2b", "xor d=2 c=6", "add d=15 c=2", "add d=8 c=15", "xrot d=2 c=8 k=29", "xor d=10 c=2", "rot d=13 c=10 k=7", "add d=2 c=13", "mulc2 d=10 c=2 imm=0x373045b7", "xor d=8 c=10", "sub d=13 c=8", "mulc d=15 c=13 imm=0x9c79f3bf", "rot d=0 c=15 k=31", "rot d=12 c=0 k=25", "sub d=9 c=12", "rot d=0 c=9 k=18", "xrot d=13 c=0 k=11", "rot d=14 c=13 k=9", "sub d=7 c=14", "xorc d=3 c=7 imm=0x380dac7f", "xor d=1 c=3", "addc d=8 c=1 imm=0x2ae5a9da", "rot d=10 c=8 k=3", "rot d=7 c=10 k=2", "mul d=8 c=7", "mulc d=10 c=8 imm=0xc6c624a1", "rot d=7 c=10 k=6", "addc d=5 c=7 imm=0x3b2e05ab", "xor d=15 c=5", "sub d=12 c=15", "add d=14 c=12", "orx d=11 c=14 b=4", "add d=8 c=11", "sub d=15 c=8", "add d=10 c=15", "addc d=6 c=10 imm=0x41c42bb0", "xrot d=15 c=6 k=31", "rot d=4 c=15 k=5", "orx d=15 c=4 b=6", "mulc d=4 c=15 imm=0x4256a3b1", "xor d=0 c=4", "rot d=8 c=0 k=4", "sub d=5 c=8", "addc d=4 c=5 imm=0x566b8b0f", "mulc d=8 c=4 imm=0xf604d0e7", "add d=10 c=8", "mul d=2 c=10", "xor d=5 c=2", "sub d=14 c=5", "add d=13 c=14", "sub d=2 c=13", "add d=0 c=2", "xor d=2 c=0", "xorc d=0 c=2 imm=0x51509095", "mul d=4 c=0", "mul d=12 c=4", "orx d=8 c=12 b=9", "rot d=10 c=8 k=11", "xor d=9 c=10", "add d=15 c=9", "xorc d=11 c=15 imm=0xa0d4f940", "xor d=5 c=11", "andx d=6 c=5 b=11", "xor d=5 c=6", "mul d=0 c=5", "sub d=4 c=0", "orx d=6 c=4 b=3", "xrot d=4 c=6 k=9", "andx d=12 c=4 b=5", "mul d=1 c=12", "xor d=11 c=1", "xor d=15 c=11", "xorc d=4 c=15 imm=0x0a7a3a1b", "add d=7 c=4", "xrot d=8 c=7 k=18", "xor d=12 c=8", "andx d=1 c=12 b=3", "rot d=0 c=1 k=7", "xor d=2 c=0", "xor d=13 c=2", "mulc d=0 c=13 imm=0x24a5f39d", "sub d=15 c=0", "xor d=0 c=15", "add d=1 c=0", "rot d=13 c=1 k=20", "xor d=4 c=13", "rot d=1 c=4 k=13", "xor d=4 c=1", "rot d=5 c=4 k=31", "sub d=0 c=5", "xrot d=7 c=0 k=28", "add d=5 c=7", "xor d=2 c=5", "xrot d=5 c=2 k=16", "xorc d=0 c=5 imm=0xfb5e8938", "add d=8 c=0", "mul d=12 c=8", "rot d=11 c=12 k=31", "addc d=12 c=11 imm=0x9786f7f9", "addc d=14 c=12 imm=0x47ed1785", "xorc d=7 c=14 imm=0x6483ca53", "xorc d=5 c=7 imm=0x7fcbaaf8", "add d=12 c=5", "orx d=1 c=12 b=10", "sub d=6 c=1", "rot d=2 c=6 k=12", "addc d=8 c=2 imm=0x41a11731", "rot d=11 c=8 k=12", "addc d=2 c=11 imm=0xdaf8e7da", "mul d=7 c=2", "xorc d=11 c=7 imm=0x0af2771d", "add d=8 c=11", "add d=4 c=8", "xor d=13 c=4", "xrot d=14 c=13 k=27", "xor d=12 c=14", "mulc2 d=9 c=12 imm=0x232d6601", "mul d=4 c=9", "add d=1 c=4", "add d=0 c=1", "mul d=13 c=0", "mul d=1 c=13", "xrot d=9 c=1 k=19", "xrot d=0 c=9 k=8", "add d=12 c=0", "xrot d=15 c=12 k=2", "sub d=1 c=15", "xor d=15 c=1", "xrot d=12 c=15 k=7", "xor d=8 c=12", "mul d=0 c=8", "andx d=14 c=0 b=6", "add d=11 c=14", "xor d=13 c=11", "andx d=4 c=13 b=5", "sub d=12 c=4", "sub d=15 c=12", "rot d=12 c=15 k=8", "mulc2 d=0 c=12 imm=0x28ee8749", "xrot d=4 c=0 k=13", "rot d=10 c=4 k=6", "mulc d=5 c=10 imm=0xc5b4f577", "xrot d=3 c=5 k=8", "xrot d=7 c=3 k=30", "sub d=1 c=7", "mulc d=5 c=1 imm=0x2d76383d", "add d=11 c=5", "rot d=4 c=11 k=4", "xor d=2 c=4", "mulc d=9 c=2 imm=0x4b24be99", "rot d=10 c=9 k=31", "sub d=9 c=10", "sub d=8 c=9"] + ], + "word": "dataset[w] = item(w >> 4)[w & 15]" + }, + "instructions": [ + {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1}, + {"i": 1, "op": "shfl", "dst": 2, "src": 0, "src2": 7, "imm": "0xe3c2f9cb", "imm2": "0xde0bea4e", "rot": 6, "bit": 9, "mask": 4, "width": 1}, + {"i": 2, "op": "add", "dst": 3, "src": 2, "src2": 0, "imm": "0x2cccb6ca", "imm2": "0x642e66db", "rot": 27, "bit": 10, "mask": 2, "width": 1}, + {"i": 3, "op": "rotl", "dst": 0, "src": 2, "src2": 1, "imm": "0xb59e83b2", "imm2": "0x19c26fb9", "rot": 19, "bit": 20, "mask": 4, "width": 1}, + {"i": 4, "op": "rotr", "dst": 7, "src": 6, "src2": 5, "imm": "0x6f055f55", "imm2": "0x550e4ea1", "rot": 31, "bit": 20, "mask": 4, "width": 1}, + {"i": 5, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0xee02465f", "imm2": "0xc1535555", "rot": 31, "bit": 21, "mask": 4, "width": 1}, + {"i": 6, "op": "mulhi", "dst": 1, "src": 7, "src2": 5, "imm": "0x7826a6a7", "imm2": "0x946f7818", "rot": 18, "bit": 21, "mask": 8, "width": 1}, + {"i": 7, "op": "load", "dst": 4, "src": 2, "src2": 0, "imm": "0x5d080878", "imm2": "0xdf885578", "rot": 5, "bit": 18, "mask": 4, "width": 1}, + {"i": 8, "op": "load", "dst": 7, "src": 4, "src2": 1, "imm": "0x875bbb36", "imm2": "0x594a838f", "rot": 24, "bit": 4, "mask": 2, "width": 1}, + {"i": 9, "op": "load", "dst": 0, "src": 3, "src2": 1, "imm": "0xe5e607c2", "imm2": "0xa5cd9f75", "rot": 26, "bit": 28, "mask": 4, "width": 1}, + {"i": 10, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0xea3f7b43", "imm2": "0x10c8d4e7", "rot": 5, "bit": 29, "mask": 8, "width": 1}, + {"i": 11, "op": "load", "dst": 1, "src": 5, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1}, + {"i": 12, "op": "mulhi", "dst": 3, "src": 5, "src2": 7, "imm": "0xbfd5615c", "imm2": "0xd8224ae2", "rot": 21, "bit": 12, "mask": 2, "width": 1}, + {"i": 13, "op": "load", "dst": 1, "src": 3, "src2": 5, "imm": "0x35c07cc5", "imm2": "0xe82db54f", "rot": 7, "bit": 6, "mask": 8, "width": 1}, + {"i": 14, "op": "sub", "dst": 0, "src": 3, "src2": 0, "imm": "0x587ee0f1", "imm2": "0xfd23eefd", "rot": 16, "bit": 21, "mask": 16, "width": 1}, + {"i": 15, "op": "mad", "dst": 5, "src": 1, "src2": 3, "imm": "0x6974dd29", "imm2": "0xc8148960", "rot": 3, "bit": 11, "mask": 2, "width": 1}, + {"i": 16, "op": "mulhi", "dst": 6, "src": 1, "src2": 7, "imm": "0x3072c3c6", "imm2": "0x55ee21f8", "rot": 26, "bit": 1, "mask": 1, "width": 1}, + {"i": 17, "op": "add", "dst": 5, "src": 2, "src2": 2, "imm": "0x697b3d00", "imm2": "0x8b965b57", "rot": 9, "bit": 28, "mask": 1, "width": 1}, + {"i": 18, "op": "mulhi", "dst": 0, "src": 6, "src2": 3, "imm": "0x2910cacb", "imm2": "0x6ac79431", "rot": 7, "bit": 6, "mask": 4, "width": 1}, + {"i": 19, "op": "rotr", "dst": 5, "src": 3, "src2": 0, "imm": "0xed96a94a", "imm2": "0x4c988c10", "rot": 24, "bit": 21, "mask": 8, "width": 1}, + {"i": 20, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x40d2fc76", "imm2": "0x2f7c7eca", "rot": 13, "bit": 8, "mask": 4, "width": 1}, + {"i": 21, "op": "add", "dst": 1, "src": 0, "src2": 5, "imm": "0xebcf247a", "imm2": "0x6d7e8d05", "rot": 31, "bit": 1, "mask": 16, "width": 1}, + {"i": 22, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1}, + {"i": 23, "op": "mulhi", "dst": 1, "src": 5, "src2": 7, "imm": "0xfdfe72fd", "imm2": "0x735eeb8d", "rot": 30, "bit": 25, "mask": 8, "width": 1}, + {"i": 24, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x32cf1258", "imm2": "0xd813deb6", "rot": 30, "bit": 6, "mask": 16, "width": 1}, + {"i": 25, "op": "add", "dst": 7, "src": 4, "src2": 2, "imm": "0x08ffa6c7", "imm2": "0x699ef1bb", "rot": 7, "bit": 2, "mask": 16, "width": 1}, + {"i": 26, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x6f53c70d", "imm2": "0x3357513f", "rot": 3, "bit": 26, "mask": 2, "width": 1}, + {"i": 27, "op": "add", "dst": 7, "src": 1, "src2": 4, "imm": "0xe60fea84", "imm2": "0xb4ead2fb", "rot": 14, "bit": 14, "mask": 1, "width": 1}, + {"i": 28, "op": "add", "dst": 3, "src": 1, "src2": 0, "imm": "0x65c76dab", "imm2": "0x8f30d21d", "rot": 24, "bit": 6, "mask": 1, "width": 1}, + {"i": 29, "op": "load", "dst": 2, "src": 1, "src2": 2, "imm": "0x82fad9a6", "imm2": "0x8c6358db", "rot": 7, "bit": 31, "mask": 2, "width": 1}, + {"i": 30, "op": "load", "dst": 5, "src": 7, "src2": 3, "imm": "0x6e947ee0", "imm2": "0xaf9a2dda", "rot": 2, "bit": 30, "mask": 4, "width": 1}, + {"i": 31, "op": "load", "dst": 2, "src": 5, "src2": 1, "imm": "0x608bb7ce", "imm2": "0x4be663db", "rot": 19, "bit": 1, "mask": 16, "width": 1}, + {"i": 32, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x88e52e20", "imm2": "0x77647269", "rot": 20, "bit": 25, "mask": 4, "width": 1}, + {"i": 33, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1}, + {"i": 34, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0x0480debe", "imm2": "0xc7ce690c", "rot": 12, "bit": 21, "mask": 16, "width": 1}, + {"i": 35, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0xa73f59de", "imm2": "0x84b9e329", "rot": 21, "bit": 27, "mask": 8, "width": 1}, + {"i": 36, "op": "add", "dst": 7, "src": 1, "src2": 7, "imm": "0xc53b542e", "imm2": "0xe10c2c95", "rot": 21, "bit": 2, "mask": 4, "width": 1}, + {"i": 37, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x81cd7b0e", "imm2": "0x21a51823", "rot": 12, "bit": 10, "mask": 2, "width": 1}, + {"i": 38, "op": "or", "dst": 2, "src": 1, "src2": 3, "imm": "0x7894e657", "imm2": "0xf8e4b972", "rot": 18, "bit": 9, "mask": 4, "width": 1}, + {"i": 39, "op": "mulhi", "dst": 1, "src": 0, "src2": 4, "imm": "0xbee8421f", "imm2": "0x070888a8", "rot": 20, "bit": 28, "mask": 4, "width": 1}, + {"i": 40, "op": "rotl", "dst": 6, "src": 1, "src2": 4, "imm": "0x4609857a", "imm2": "0xaeecb156", "rot": 19, "bit": 21, "mask": 1, "width": 1}, + {"i": 41, "op": "mulhi", "dst": 4, "src": 6, "src2": 0, "imm": "0x1a84e1e9", "imm2": "0x9b26bb72", "rot": 28, "bit": 19, "mask": 1, "width": 1}, + {"i": 42, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0xbf62908e", "imm2": "0xdf03ea88", "rot": 11, "bit": 27, "mask": 16, "width": 1}, + {"i": 43, "op": "shfl", "dst": 6, "src": 3, "src2": 4, "imm": "0xa966241c", "imm2": "0x9c639efa", "rot": 12, "bit": 4, "mask": 4, "width": 1}, + {"i": 44, "op": "load", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1}, + {"i": 45, "op": "xor", "dst": 1, "src": 3, "src2": 6, "imm": "0x006193d0", "imm2": "0xfc2acc3f", "rot": 25, "bit": 1, "mask": 1, "width": 1}, + {"i": 46, "op": "load", "dst": 7, "src": 0, "src2": 6, "imm": "0x4777c4f8", "imm2": "0x3cf0a02f", "rot": 11, "bit": 14, "mask": 4, "width": 1}, + {"i": 47, "op": "load", "dst": 3, "src": 1, "src2": 3, "imm": "0x10692532", "imm2": "0x1a292ea5", "rot": 20, "bit": 23, "mask": 1, "width": 1}, + {"i": 48, "op": "mul", "dst": 5, "src": 3, "src2": 7, "imm": "0xadf5bd13", "imm2": "0xb999de2e", "rot": 23, "bit": 10, "mask": 4, "width": 1}, + {"i": 49, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x68ff101e", "imm2": "0xbdaaf46a", "rot": 25, "bit": 23, "mask": 16, "width": 1}, + {"i": 50, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x92d9a412", "imm2": "0x0daf96ea", "rot": 8, "bit": 4, "mask": 4, "width": 1}, + {"i": 51, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xa900fec4", "imm2": "0x77b9bd43", "rot": 6, "bit": 23, "mask": 2, "width": 1}, + {"i": 52, "op": "load", "dst": 4, "src": 7, "src2": 1, "imm": "0x51392a72", "imm2": "0x99e8bb36", "rot": 11, "bit": 9, "mask": 1, "width": 1}, + {"i": 53, "op": "sub", "dst": 2, "src": 7, "src2": 2, "imm": "0x0ffe2ac7", "imm2": "0x030743df", "rot": 9, "bit": 30, "mask": 16, "width": 1}, + {"i": 54, "op": "xor", "dst": 4, "src": 0, "src2": 4, "imm": "0x9123ff15", "imm2": "0x10c329a7", "rot": 28, "bit": 15, "mask": 2, "width": 1}, + {"i": 55, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1}, + {"i": 56, "op": "load", "dst": 2, "src": 4, "src2": 3, "imm": "0x239de52c", "imm2": "0xf80bae18", "rot": 15, "bit": 24, "mask": 1, "width": 1}, + {"i": 57, "op": "mad", "dst": 0, "src": 1, "src2": 4, "imm": "0x31dede8e", "imm2": "0xd3f619e6", "rot": 29, "bit": 7, "mask": 2, "width": 1}, + {"i": 58, "op": "load", "dst": 3, "src": 5, "src2": 3, "imm": "0x206437d6", "imm2": "0x28d1c290", "rot": 17, "bit": 28, "mask": 4, "width": 1}, + {"i": 59, "op": "or", "dst": 5, "src": 6, "src2": 3, "imm": "0x8fffd674", "imm2": "0x0507903a", "rot": 26, "bit": 27, "mask": 2, "width": 1}, + {"i": 60, "op": "mad", "dst": 6, "src": 5, "src2": 7, "imm": "0xf572bdb9", "imm2": "0xeda2af31", "rot": 21, "bit": 8, "mask": 2, "width": 1}, + {"i": 61, "op": "rotl", "dst": 4, "src": 2, "src2": 7, "imm": "0x84f12ddf", "imm2": "0x81ef22e1", "rot": 28, "bit": 30, "mask": 1, "width": 1}, + {"i": 62, "op": "mulhi", "dst": 5, "src": 0, "src2": 6, "imm": "0xf6bb45ee", "imm2": "0x6bfb632d", "rot": 22, "bit": 0, "mask": 4, "width": 1}, + {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0x50ec702a", "imm2": "0xae6ee96e", "rot": 20, "bit": 25, "mask": 2, "width": 1} + ] +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.metal b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.metal new file mode 100644 index 00000000..b899adec --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program.metal @@ -0,0 +1,109 @@ +#include +using namespace metal; + +#define MASK 0x0fffffffu +constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; + +inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +inline uint rotl_imm(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 +inline uint rotr_var(uint x, uint n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +kernel void igneum_hash(device const uint* dataset [[buffer(0)]], + device ulong* out [[buffer(1)]], + constant uint& baseNonce [[buffer(2)]], + uint gid [[thread_position_in_grid]]) { + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + { uint x = nonce ^ SEEDW[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ SEEDW[1]; } + { uint x = nonce ^ SEEDW[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ SEEDW[2]; } + { uint x = nonce ^ SEEDW[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ SEEDW[3]; } + { uint x = nonce ^ SEEDW[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ SEEDW[4]; } + { uint x = nonce ^ SEEDW[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ SEEDW[5]; } + { uint x = nonce ^ SEEDW[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ SEEDW[6]; } + { uint x = nonce ^ SEEDW[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ SEEDW[7]; } + { uint x = nonce ^ SEEDW[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ SEEDW[0]; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 + r2 = r2 ^ simd_shuffle_xor(r0, (ushort)4); // 1 + r3 = r3 + r2 + select(0x2cccb6cau, 0x642e66dbu, ((sel >> 10u) & 1u) != 0u); // 2 + r0 = rotl_imm(r0, 19u); // 3 + r7 = rotr_var(r7, r6); // 4 + r7 = r7 + r4 + select(0xee02465fu, 0xc1535555u, ((sel >> 21u) & 1u) != 0u); // 5 + r1 = mulhi(r1, r7); // 6 + r4 = r4 ^ dataset[r2 & MASK]; // 7 + r7 = r7 ^ dataset[r4 & MASK]; // 8 + r0 = r0 ^ dataset[r3 & MASK]; // 9 + r5 = r5 ^ dataset[r1 & MASK]; // 10 + r1 = r1 ^ dataset[r5 & MASK]; // 11 + r3 = mulhi(r3, r5); // 12 + r1 = r1 ^ dataset[r3 & MASK]; // 13 + r0 = r0 - r3; // 14 + r5 = r1 * r3 + r5; // 15 + r6 = mulhi(r6, r1); // 16 + r5 = r5 + r2 + select(0x697b3d00u, 0x8b965b57u, ((sel >> 28u) & 1u) != 0u); // 17 + r0 = mulhi(r0, r6); // 18 + r5 = rotr_var(r5, r3); // 19 + r5 = mulhi(r5, r2); // 20 + r1 = r1 + r0 + select(0xebcf247au, 0x6d7e8d05u, ((sel >> 1u) & 1u) != 0u); // 21 + r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 22 + r1 = mulhi(r1, r5); // 23 + r2 = r2 - r5; // 24 + r7 = r7 + r4 + select(0x08ffa6c7u, 0x699ef1bbu, ((sel >> 2u) & 1u) != 0u); // 25 + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 26 + r7 = r7 + r1 + select(0xe60fea84u, 0xb4ead2fbu, ((sel >> 14u) & 1u) != 0u); // 27 + r3 = r3 + r1 + select(0x65c76dabu, 0x8f30d21du, ((sel >> 6u) & 1u) != 0u); // 28 + r2 = r2 ^ dataset[r1 & MASK]; // 29 + r5 = r5 ^ dataset[r7 & MASK]; // 30 + r2 = r2 ^ dataset[r5 & MASK]; // 31 + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)4); // 32 + r4 = r5 * r7 + r4; // 33 + r4 = r4 + r2 + select(0x0480debeu, 0xc7ce690cu, ((sel >> 21u) & 1u) != 0u); // 34 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // 35 + r7 = r7 + r1 + select(0xc53b542eu, 0xe10c2c95u, ((sel >> 2u) & 1u) != 0u); // 36 + r5 = r5 ^ r7; // 37 + r2 = r2 | r1; // 38 + r1 = mulhi(r1, r0); // 39 + r6 = rotl_imm(r6, 19u); // 40 + r4 = mulhi(r4, r6); // 41 + r6 = r6 - r0; // 42 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)4); // 43 + r4 = r4 ^ dataset[r2 & MASK]; // 44 + r1 = r1 ^ r3; // 45 + r7 = r7 ^ dataset[r0 & MASK]; // 46 + r3 = r3 ^ dataset[r1 & MASK]; // 47 + r5 = r5 * r3; // 48 + r1 = r1 - r5; // 49 + r2 = rotl_imm(r2, 8u); // 50 + r1 = r1 + r5 + select(0xa900fec4u, 0x77b9bd43u, ((sel >> 23u) & 1u) != 0u); // 51 + r4 = r4 ^ dataset[r7 & MASK]; // 52 + r2 = r2 - r7; // 53 + r4 = r4 ^ r0; // 54 + r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 55 + r2 = r2 ^ dataset[r4 & MASK]; // 56 + r0 = r1 * r4 + r0; // 57 + r3 = r3 ^ dataset[r5 & MASK]; // 58 + r5 = r5 | r6; // 59 + r6 = r5 * r7 + r6; // 60 + r4 = rotl_imm(r4, 28u); // 61 + r5 = mulhi(r5, r0); // 62 + r3 = r3 ^ dataset[r6 & MASK]; // 63 + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program_bound.metal b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program_bound.metal new file mode 100644 index 00000000..2f021814 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/program_bound.metal @@ -0,0 +1,111 @@ +#include +using namespace metal; + +#define MASK 0x0fffffffu +constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; + +inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +inline uint rotl_imm(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 +inline uint rotr_var(uint x, uint n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Header-bound variant: the init words come from buffer 3 (bind.rs), not from SEEDW. +kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], + device ulong* out [[buffer(1)]], + constant uint& baseNonce [[buffer(2)]], + constant uint* initw [[buffer(3)]], + uint gid [[thread_position_in_grid]]) { + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + { uint x = nonce ^ initw[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ initw[1]; } + { uint x = nonce ^ initw[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ initw[2]; } + { uint x = nonce ^ initw[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ initw[3]; } + { uint x = nonce ^ initw[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ initw[4]; } + { uint x = nonce ^ initw[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ initw[5]; } + { uint x = nonce ^ initw[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ initw[6]; } + { uint x = nonce ^ initw[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ initw[7]; } + { uint x = nonce ^ initw[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ initw[0]; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 + r2 = r2 ^ simd_shuffle_xor(r0, (ushort)4); // 1 + r3 = r3 + r2 + select(0x2cccb6cau, 0x642e66dbu, ((sel >> 10u) & 1u) != 0u); // 2 + r0 = rotl_imm(r0, 19u); // 3 + r7 = rotr_var(r7, r6); // 4 + r7 = r7 + r4 + select(0xee02465fu, 0xc1535555u, ((sel >> 21u) & 1u) != 0u); // 5 + r1 = mulhi(r1, r7); // 6 + r4 = r4 ^ dataset[r2 & MASK]; // 7 + r7 = r7 ^ dataset[r4 & MASK]; // 8 + r0 = r0 ^ dataset[r3 & MASK]; // 9 + r5 = r5 ^ dataset[r1 & MASK]; // 10 + r1 = r1 ^ dataset[r5 & MASK]; // 11 + r3 = mulhi(r3, r5); // 12 + r1 = r1 ^ dataset[r3 & MASK]; // 13 + r0 = r0 - r3; // 14 + r5 = r1 * r3 + r5; // 15 + r6 = mulhi(r6, r1); // 16 + r5 = r5 + r2 + select(0x697b3d00u, 0x8b965b57u, ((sel >> 28u) & 1u) != 0u); // 17 + r0 = mulhi(r0, r6); // 18 + r5 = rotr_var(r5, r3); // 19 + r5 = mulhi(r5, r2); // 20 + r1 = r1 + r0 + select(0xebcf247au, 0x6d7e8d05u, ((sel >> 1u) & 1u) != 0u); // 21 + r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 22 + r1 = mulhi(r1, r5); // 23 + r2 = r2 - r5; // 24 + r7 = r7 + r4 + select(0x08ffa6c7u, 0x699ef1bbu, ((sel >> 2u) & 1u) != 0u); // 25 + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 26 + r7 = r7 + r1 + select(0xe60fea84u, 0xb4ead2fbu, ((sel >> 14u) & 1u) != 0u); // 27 + r3 = r3 + r1 + select(0x65c76dabu, 0x8f30d21du, ((sel >> 6u) & 1u) != 0u); // 28 + r2 = r2 ^ dataset[r1 & MASK]; // 29 + r5 = r5 ^ dataset[r7 & MASK]; // 30 + r2 = r2 ^ dataset[r5 & MASK]; // 31 + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)4); // 32 + r4 = r5 * r7 + r4; // 33 + r4 = r4 + r2 + select(0x0480debeu, 0xc7ce690cu, ((sel >> 21u) & 1u) != 0u); // 34 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // 35 + r7 = r7 + r1 + select(0xc53b542eu, 0xe10c2c95u, ((sel >> 2u) & 1u) != 0u); // 36 + r5 = r5 ^ r7; // 37 + r2 = r2 | r1; // 38 + r1 = mulhi(r1, r0); // 39 + r6 = rotl_imm(r6, 19u); // 40 + r4 = mulhi(r4, r6); // 41 + r6 = r6 - r0; // 42 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)4); // 43 + r4 = r4 ^ dataset[r2 & MASK]; // 44 + r1 = r1 ^ r3; // 45 + r7 = r7 ^ dataset[r0 & MASK]; // 46 + r3 = r3 ^ dataset[r1 & MASK]; // 47 + r5 = r5 * r3; // 48 + r1 = r1 - r5; // 49 + r2 = rotl_imm(r2, 8u); // 50 + r1 = r1 + r5 + select(0xa900fec4u, 0x77b9bd43u, ((sel >> 23u) & 1u) != 0u); // 51 + r4 = r4 ^ dataset[r7 & MASK]; // 52 + r2 = r2 - r7; // 53 + r4 = r4 ^ r0; // 54 + r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 55 + r2 = r2 ^ dataset[r4 & MASK]; // 56 + r0 = r1 * r4 + r0; // 57 + r3 = r3 ^ dataset[r5 & MASK]; // 58 + r5 = r5 | r6; // 59 + r6 = r5 * r7 + r6; // 60 + r4 = rotl_imm(r4, 28u); // 61 + r5 = mulhi(r5, r0); // 62 + r3 = r3 ^ dataset[r6 & MASK]; // 63 + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.h b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.h new file mode 100644 index 00000000..880b6ef0 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.h @@ -0,0 +1,57 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000". Do not edit by hand. +// Expected outputs: igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif + +#define IGNEUM_VEC_WARPS 3 +static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; +static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { + { // base nonce 0 + 0x435cd45db22fc83bull, 0xeb08b0eec4635b92ull, 0x5dac8870aed5c678ull, 0x2779f39382882c13ull, 0x465e11a6d64c87f4ull, 0x1a379f4f699ca9aeull, 0x03c6a8eb7ff849ebull, 0xbc1b878d6c277748ull, + 0x69adeb1f2d29c0ebull, 0x375894dbc9868b50ull, 0x79d2d8527b76b932ull, 0x4dcefb4f0a2ec3fcull, 0xe5ad9fb702dd5966ull, 0xa296d3e34edcfbc6ull, 0xc5c839c600924f03ull, 0xdc7228f16532bfbeull, + 0x81f595f907c9cb04ull, 0x1152850f76d4e90aull, 0x25446f27b34b11a9ull, 0xee986312f9e4e522ull, 0x3c5baa9645d0c99full, 0x144aff659162feb9ull, 0x497c9200b23e8e07ull, 0xc92501e7f6157dfeull, + 0x8caf96daa4ca385aull, 0x00062ab96f31e514ull, 0x9508e98517444c91ull, 0x8a3f948cd7fb9797ull, 0xab156a88a1b77e41ull, 0x2408a16a50352fa9ull, 0x2237f2014a735ac3ull, 0x7da1a30d3b416f06ull + }, + { // base nonce 4096 + 0xb868dcaeacd8e012ull, 0xe88143fdca4bfab2ull, 0x9ee48b8d044a1dbeull, 0xc62e9314832773f3ull, 0x998beb89868141d7ull, 0xb730b261ff57cc38ull, 0xb886beb356bc26edull, 0x7472e83c4b9f208cull, + 0x3c436e168b67d002ull, 0xb3c4c537b341c70full, 0xeea62a85a5c4d571ull, 0x31fb743150950537ull, 0x23d68caf4fb30f60ull, 0x7fa71a956c2cdab0ull, 0x2aaac765ae72764full, 0x5f109809ed36b7fbull, + 0xebde9ca62f1a205cull, 0xa684f0ab53357506ull, 0x5b68d0c5246705a2ull, 0x923549e6f6aad924ull, 0x056ad95d6c1b0cffull, 0x96879d74b28d43ddull, 0xc7cb03983950f903ull, 0x09391d92779b4915ull, + 0x92c061ed4bf9de47ull, 0xee84d54a38b36d07ull, 0x78da496aa8c9afd7ull, 0x0afe22f66ce1fc6eull, 0xf9576b3c7dc747c2ull, 0x16bfb648d41c69a2ull, 0xbf8f0934f1b1c327ull, 0x3781f5d303ba67f8ull + }, + { // base nonce 1000000 + 0xcd1ed6c453bf0f8cull, 0x19a6d570facc3c28ull, 0x99a0491a592d2705ull, 0x84fe73aa729eeaebull, 0x05d6496a724a48bcull, 0x427d4a53e3cd224bull, 0x566c3ffcc3dcfd37ull, 0x8a7edbb1da3510c0ull, + 0x845f1b6d3c02f911ull, 0x9dc5b77664c6fb53ull, 0x7dc5df7872141de5ull, 0x281dd1300d03f493ull, 0xe56337a62077fb83ull, 0xbf3f0ceccb20a1e3ull, 0x61dd42e89af96505ull, 0x012b28dac792c2ffull, + 0x703e2d57a7228db9ull, 0x93617feef48f6fa0ull, 0xa9b76a0cc401f839ull, 0xdb06176d832ccce9ull, 0xf1c45184eef7624bull, 0x2b6dc1cd2eae9856ull, 0xebb01b8100e4b19cull, 0x7f9305e00616dfe9ull, + 0xdccda8f0b817fc71ull, 0x3a927aa1fd8d9bc8ull, 0xa4d82662a5fc6d5bull, 0x126c846254679b8bull, 0x8d792378f29a8a2bull, 0xa79da48e070f183full, 0xdfc380765068d276ull, 0x84aee1d7f9c8b2a6ull + } +}; + +// Dataset self-test: dataset[0..15] and dataset[IGNEUM_MASK] (268435455). +static const uint32_t IGNEUM_DS_HEAD[16] = { + 0x0da55599u, 0x16ebf912u, 0x26ebba50u, 0x644a8670u, 0xb86da339u, 0xfdea8ce8u, 0xd8d38a59u, 0x5f930123u, + 0xc99284a8u, 0xfa9fa963u, 0xfd990357u, 0x8d1aad8cu, 0xc5c03c95u, 0x82af7120u, 0x9fbf6800u, 0x913cc5e8u +}; +static const uint32_t IGNEUM_DS_LAST_INDEX = 268435455u; +static const uint32_t IGNEUM_DS_LAST = 0x7c357826u; +// 64 sampled dataset words (index, value) computed on the Mac. +#define IGNEUM_DS_SAMPLES 64 +static const uint32_t IGNEUM_DS_SAMPLE_INDEX[IGNEUM_DS_SAMPLES] = { + 59471966u, 217795994u, 208353206u, 42483309u, 172547758u, 148076330u, 183853158u, 214389424u, 267488061u, 169781097u, 184093494u, 153880993u, 84977930u, 46426879u, 3093825u, 225364072u, 44593546u, 260713159u, 168250303u, 52384140u, 223401610u, 45554030u, 95410555u, 175039924u, 79171087u, 267580473u, 24168642u, 37981670u, 171551130u, 195559979u, 204611762u, 140997658u, 138925853u, 86637313u, 20736778u, 219665210u, 160430336u, 264654675u, 8013395u, 228945585u, 213884386u, 104419827u, 44185464u, 142737231u, 99284897u, 132475900u, 61861762u, 132056166u, 262388043u, 91878046u, 117353561u, 124768597u, 71352993u, 190698941u, 46055428u, 55281366u, 165145231u, 106810753u, 171985651u, 232085256u, 159510492u, 40072060u, 209107596u, 39023794u +}; +static const uint32_t IGNEUM_DS_SAMPLE_VALUE[IGNEUM_DS_SAMPLES] = { + 0xf4b0010au, 0xc82a3ca4u, 0xfc72371bu, 0x4c31b63cu, 0x0f0d86b4u, 0x0860e638u, 0x6016ffc1u, 0xf1cac2c4u, 0xb520efedu, 0x9eac76d6u, 0xca4ccfe1u, 0xa07e7108u, 0xc1c60eacu, 0xfdd31f2du, 0x2225e701u, 0x71f7fde6u, 0xb52aed34u, 0x75a3dc19u, 0xfe023726u, 0x308b9e1du, 0x6003222cu, 0xa5cc70a2u, 0x22c2940fu, 0xdbcd5db2u, 0xeed44d67u, 0xfca48f4cu, 0x2744926eu, 0x24f03506u, 0xa90cad7du, 0x47db755eu, 0x2051b7a9u, 0x18365d2du, 0x69c0d7e2u, 0x0f1f31c6u, 0x912e45bfu, 0x03e4035eu, 0xa30eb890u, 0xf65796a0u, 0x0b97d1e6u, 0xb0014ea8u, 0xa02bb1dfu, 0x87476bf2u, 0xc2f22b36u, 0x2f0452a5u, 0xb6d0c4c3u, 0xc6a765e2u, 0xf2b8cbd5u, 0x928e50adu, 0x85dbe732u, 0x2b9ee10cu, 0x2a1c9124u, 0x7f9a88e2u, 0x92da37eau, 0x519214cbu, 0x7869844eu, 0x19062ee1u, 0x045f0735u, 0x09f5e114u, 0x6082c8d4u, 0x6bc68181u, 0x700987d5u, 0x3bca401du, 0x7829f7aau, 0xe325295cu +}; +// Cache self-test (memory-hard mode): cache[0..15], the last 16 words, and FNV-1a 64 over all 2^26 words. +static const uint32_t IGNEUM_CACHE_HEAD[16] = { + 0xebd9055cu, 0x7eaf6b21u, 0x9b610855u, 0x134a8562u, 0xb10059bau, 0x7f459e58u, 0x8f3c7873u, 0x3523e609u, + 0x75b8f4cau, 0x750d31b4u, 0x0dae0782u, 0x26f10015u, 0x7ba87a41u, 0x0efd8543u, 0x691d6368u, 0x8929d967u +}; +static const uint32_t IGNEUM_CACHE_LAST[16] = { + 0x51474edfu, 0xc3cfba93u, 0xf21454cfu, 0x9b79baacu, 0x4d4fce23u, 0xd701dfd5u, 0x37357ab3u, 0x1be693fau, + 0xa701cb3bu, 0x7467c620u, 0x428184e8u, 0xf4010df0u, 0xe33aa88fu, 0xc78d6d62u, 0xae9ba9c0u, 0xf4bba97eu +}; +static const uint64_t IGNEUM_CACHE_FNV64 = 0x448274a57f508cbcull; diff --git a/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.json b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.json new file mode 100644 index 00000000..dd379305 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-devnet-epoch0/vectors.json @@ -0,0 +1,36 @@ +{ + "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", + "day": "bytes:69676e65756d2d6461792ffa50000000000000", + "dataset_mode": "memory-hard", + "dataset_log2_words": 28, + "mask": "0x0fffffff", + "lanes": 32, + "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", + "warps": [ + {"base_nonce": 0, "expected": [ + "0x435cd45db22fc83b", "0xeb08b0eec4635b92", "0x5dac8870aed5c678", "0x2779f39382882c13", "0x465e11a6d64c87f4", "0x1a379f4f699ca9ae", "0x03c6a8eb7ff849eb", "0xbc1b878d6c277748", + "0x69adeb1f2d29c0eb", "0x375894dbc9868b50", "0x79d2d8527b76b932", "0x4dcefb4f0a2ec3fc", "0xe5ad9fb702dd5966", "0xa296d3e34edcfbc6", "0xc5c839c600924f03", "0xdc7228f16532bfbe", + "0x81f595f907c9cb04", "0x1152850f76d4e90a", "0x25446f27b34b11a9", "0xee986312f9e4e522", "0x3c5baa9645d0c99f", "0x144aff659162feb9", "0x497c9200b23e8e07", "0xc92501e7f6157dfe", + "0x8caf96daa4ca385a", "0x00062ab96f31e514", "0x9508e98517444c91", "0x8a3f948cd7fb9797", "0xab156a88a1b77e41", "0x2408a16a50352fa9", "0x2237f2014a735ac3", "0x7da1a30d3b416f06" + ]}, + {"base_nonce": 4096, "expected": [ + "0xb868dcaeacd8e012", "0xe88143fdca4bfab2", "0x9ee48b8d044a1dbe", "0xc62e9314832773f3", "0x998beb89868141d7", "0xb730b261ff57cc38", "0xb886beb356bc26ed", "0x7472e83c4b9f208c", + "0x3c436e168b67d002", "0xb3c4c537b341c70f", "0xeea62a85a5c4d571", "0x31fb743150950537", "0x23d68caf4fb30f60", "0x7fa71a956c2cdab0", "0x2aaac765ae72764f", "0x5f109809ed36b7fb", + "0xebde9ca62f1a205c", "0xa684f0ab53357506", "0x5b68d0c5246705a2", "0x923549e6f6aad924", "0x056ad95d6c1b0cff", "0x96879d74b28d43dd", "0xc7cb03983950f903", "0x09391d92779b4915", + "0x92c061ed4bf9de47", "0xee84d54a38b36d07", "0x78da496aa8c9afd7", "0x0afe22f66ce1fc6e", "0xf9576b3c7dc747c2", "0x16bfb648d41c69a2", "0xbf8f0934f1b1c327", "0x3781f5d303ba67f8" + ]}, + {"base_nonce": 1000000, "expected": [ + "0xcd1ed6c453bf0f8c", "0x19a6d570facc3c28", "0x99a0491a592d2705", "0x84fe73aa729eeaeb", "0x05d6496a724a48bc", "0x427d4a53e3cd224b", "0x566c3ffcc3dcfd37", "0x8a7edbb1da3510c0", + "0x845f1b6d3c02f911", "0x9dc5b77664c6fb53", "0x7dc5df7872141de5", "0x281dd1300d03f493", "0xe56337a62077fb83", "0xbf3f0ceccb20a1e3", "0x61dd42e89af96505", "0x012b28dac792c2ff", + "0x703e2d57a7228db9", "0x93617feef48f6fa0", "0xa9b76a0cc401f839", "0xdb06176d832ccce9", "0xf1c45184eef7624b", "0x2b6dc1cd2eae9856", "0xebb01b8100e4b19c", "0x7f9305e00616dfe9", + "0xdccda8f0b817fc71", "0x3a927aa1fd8d9bc8", "0xa4d82662a5fc6d5b", "0x126c846254679b8b", "0x8d792378f29a8a2b", "0xa79da48e070f183f", "0xdfc380765068d276", "0x84aee1d7f9c8b2a6" + ]} + ], + "dataset_head": ["0x0da55599", "0x16ebf912", "0x26ebba50", "0x644a8670", "0xb86da339", "0xfdea8ce8", "0xd8d38a59", "0x5f930123", "0xc99284a8", "0xfa9fa963", "0xfd990357", "0x8d1aad8c", "0xc5c03c95", "0x82af7120", "0x9fbf6800", "0x913cc5e8"], + "dataset_last_index": 268435455, + "dataset_last": "0x7c357826", + "dataset_samples": [{"index": 59471966, "value": "0xf4b0010a"}, {"index": 217795994, "value": "0xc82a3ca4"}, {"index": 208353206, "value": "0xfc72371b"}, {"index": 42483309, "value": "0x4c31b63c"}, {"index": 172547758, "value": "0x0f0d86b4"}, {"index": 148076330, "value": "0x0860e638"}, {"index": 183853158, "value": "0x6016ffc1"}, {"index": 214389424, "value": "0xf1cac2c4"}, {"index": 267488061, "value": "0xb520efed"}, {"index": 169781097, "value": "0x9eac76d6"}, {"index": 184093494, "value": "0xca4ccfe1"}, {"index": 153880993, "value": "0xa07e7108"}, {"index": 84977930, "value": "0xc1c60eac"}, {"index": 46426879, "value": "0xfdd31f2d"}, {"index": 3093825, "value": "0x2225e701"}, {"index": 225364072, "value": "0x71f7fde6"}, {"index": 44593546, "value": "0xb52aed34"}, {"index": 260713159, "value": "0x75a3dc19"}, {"index": 168250303, "value": "0xfe023726"}, {"index": 52384140, "value": "0x308b9e1d"}, {"index": 223401610, "value": "0x6003222c"}, {"index": 45554030, "value": "0xa5cc70a2"}, {"index": 95410555, "value": "0x22c2940f"}, {"index": 175039924, "value": "0xdbcd5db2"}, {"index": 79171087, "value": "0xeed44d67"}, {"index": 267580473, "value": "0xfca48f4c"}, {"index": 24168642, "value": "0x2744926e"}, {"index": 37981670, "value": "0x24f03506"}, {"index": 171551130, "value": "0xa90cad7d"}, {"index": 195559979, "value": "0x47db755e"}, {"index": 204611762, "value": "0x2051b7a9"}, {"index": 140997658, "value": "0x18365d2d"}, {"index": 138925853, "value": "0x69c0d7e2"}, {"index": 86637313, "value": "0x0f1f31c6"}, {"index": 20736778, "value": "0x912e45bf"}, {"index": 219665210, "value": "0x03e4035e"}, {"index": 160430336, "value": "0xa30eb890"}, {"index": 264654675, "value": "0xf65796a0"}, {"index": 8013395, "value": "0x0b97d1e6"}, {"index": 228945585, "value": "0xb0014ea8"}, {"index": 213884386, "value": "0xa02bb1df"}, {"index": 104419827, "value": "0x87476bf2"}, {"index": 44185464, "value": "0xc2f22b36"}, {"index": 142737231, "value": "0x2f0452a5"}, {"index": 99284897, "value": "0xb6d0c4c3"}, {"index": 132475900, "value": "0xc6a765e2"}, {"index": 61861762, "value": "0xf2b8cbd5"}, {"index": 132056166, "value": "0x928e50ad"}, {"index": 262388043, "value": "0x85dbe732"}, {"index": 91878046, "value": "0x2b9ee10c"}, {"index": 117353561, "value": "0x2a1c9124"}, {"index": 124768597, "value": "0x7f9a88e2"}, {"index": 71352993, "value": "0x92da37ea"}, {"index": 190698941, "value": "0x519214cb"}, {"index": 46055428, "value": "0x7869844e"}, {"index": 55281366, "value": "0x19062ee1"}, {"index": 165145231, "value": "0x045f0735"}, {"index": 106810753, "value": "0x09f5e114"}, {"index": 171985651, "value": "0x6082c8d4"}, {"index": 232085256, "value": "0x6bc68181"}, {"index": 159510492, "value": "0x700987d5"}, {"index": 40072060, "value": "0x3bca401d"}, {"index": 209107596, "value": "0x7829f7aa"}, {"index": 39023794, "value": "0xe325295c"}], + "cache_head": ["0xebd9055c", "0x7eaf6b21", "0x9b610855", "0x134a8562", "0xb10059ba", "0x7f459e58", "0x8f3c7873", "0x3523e609", "0x75b8f4ca", "0x750d31b4", "0x0dae0782", "0x26f10015", "0x7ba87a41", "0x0efd8543", "0x691d6368", "0x8929d967"], + "cache_last_line": ["0x51474edf", "0xc3cfba93", "0xf21454cf", "0x9b79baac", "0x4d4fce23", "0xd701dfd5", "0x37357ab3", "0x1be693fa", "0xa701cb3b", "0x7467c620", "0x428184e8", "0xf4010df0", "0xe33aa88f", "0xc78d6d62", "0xae9ba9c0", "0xf4bba97e"], + "cache_fnv1a64": "0x448274a57f508cbc" +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cl b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cl new file mode 100644 index 00000000..dd032725 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cl @@ -0,0 +1,6943 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// OpenCL C twin of the Metal kernel for the same seed (see proto-opencl/README.md, WAVEFRONT.md and program.metal). +// Built from source at runtime by proto-opencl/host.c, which passes these defines: +// IGNEUM_GROUP work-group size of igneum_hash, a multiple of 32 (default 32: one work-group = one 32-lane unit) +// IGNEUM_EXCHANGE 0 = local-memory exchange with a barrier (any device, any wave width; the default) +// 1 = sub_group_shuffle_xor (cl_khr_subgroup_shuffle), only with IGNEUM_GROUP 32 and a sub-group size of exactly 32 +// 2 = intel_sub_group_shuffle_xor (cl_intel_subgroups), same condition +// The verification unit is always 32 lanes. A 64-wide hardware wave (AMD GCN/CDNA, RDNA in wave64) runs two units; +// the exchange masks are 1, 2, 4, 8, 16, so every partner lane lies inside the lane's own aligned run of 32. +#ifndef IGNEUM_GROUP +#define IGNEUM_GROUP 32 +#endif +#ifndef IGNEUM_EXCHANGE +#define IGNEUM_EXCHANGE 0 +#endif +#ifdef __OPENCL_VERSION__ +#define IGNEUM_KERNEL_HASH __kernel __attribute__((reqd_work_group_size(IGNEUM_GROUP, 1, 1))) +#define IGNEUM_LOCAL_WORDS(name, n) __local uint name[n] +#if IGNEUM_EXCHANGE == 1 +#ifdef cl_khr_subgroups +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif +#ifdef cl_khr_subgroup_shuffle +#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable +#endif +#elif IGNEUM_EXCHANGE == 2 +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#endif +#else +// Not an OpenCL compiler: proto-opencl/emu compiles this file as C++ and supplies the built-ins and these two macros. +#include "emu_opencl.h" +#endif + +#if IGNEUM_EXCHANGE == 1 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#elif IGNEUM_EXCHANGE == 2 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = intel_sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#else +// Local-memory exchange. Two buffers of IGNEUM_GROUP words alternate (xk counts exchanges), so one barrier per +// exchange is enough: a lane can only overwrite buffer b at exchange k+2 after passing barrier k+1, and every lane +// reaches barrier k+1 only after its read of buffer b at exchange k. The partner lid ^ m stays inside the lane's +// aligned run of 32 because m < 32. Control flow is uniform, so every work-item reaches every barrier. +#define IGNEUM_SHFL_XOR(dst, a, m) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid ^ (uint)(m))]; xk += 1u; } +#define IGNEUM_BCAST0(dst, a) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid & ~31u)]; xk += 1u; } +#endif + +static inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site. OpenCL rotate() rotates left by n modulo 32. +static inline uint rotl_imm(uint x, uint n) { return rotate(x, n); } +// Right rotation by n modulo 32 as a left rotation by (32 - n) modulo 32; n == 0 gives x. +static inline uint rotr_var(uint x, uint n) { return rotate(x, (0u - n) & 31u); } +static inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 463535d01511350d). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +static inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +static inline void mh_chacha_block(const uint* x, uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +static inline void mh_cache_segment(__global uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0x3067619fu ^ prev[4]; + x[5] = 0x3c269176u ^ prev[5]; + x[6] = 0x84a03b03u ^ prev[6]; + x[7] = 0xf8c63294u ^ prev[7]; + x[8] = 0xff977c5bu ^ prev[8]; + x[9] = 0xe60def3eu ^ prev[9]; + x[10] = 0x63630141u ^ prev[10]; + x[11] = 0xb8fbcb58u ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + __global uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +static inline void mh_mixer(uint* s, uint rk) { + s[0] = (s[0] ^ (0xbab68293u + rk)) * 0x42146205u; + s[1] = (s[1] ^ (0xcc162340u + rk)) * 0x52cbe0fbu; + s[2] = (s[2] ^ (0x6ce151ccu + rk)) * 0x7ecf4a03u; + s[3] = (s[3] ^ (0xe62b8997u + rk)) * 0x6728907fu; + s[4] = (s[4] ^ (0xc9c80297u + rk)) * 0xd81d9751u; + s[5] = (s[5] ^ (0xf74a1654u + rk)) * 0x132952c3u; + s[6] = (s[6] ^ (0x3d704af5u + rk)) * 0xf60de277u; + s[7] = (s[7] ^ (0x3cf522b7u + rk)) * 0x05358035u; + s[8] = (s[8] ^ (0x2b9cac04u + rk)) * 0xbaf6499du; + s[9] = (s[9] ^ (0xa880ac10u + rk)) * 0xe4db9667u; + s[10] = (s[10] ^ (0x13e5dd1du + rk)) * 0x3e98f45du; + s[11] = (s[11] ^ (0x6fc3e233u + rk)) * 0xd0004eddu; + s[12] = (s[12] ^ (0x2d83eeacu + rk)) * 0x2691630du; + s[13] = (s[13] ^ (0x9006e8bfu + rk)) * 0x9beb3bcfu; + s[14] = (s[14] ^ (0x2c4b5362u + rk)) * 0xab310379u; + s[15] = (s[15] ^ (0x31b49ee2u + rk)) * 0x99cfb423u; + MH_QR(s[0], s[4], s[8], s[12], 20u, 20u, 19u, 4u) MH_QR(s[1], s[5], s[9], s[13], 20u, 20u, 19u, 4u) + MH_QR(s[2], s[6], s[10], s[14], 20u, 20u, 19u, 4u) MH_QR(s[3], s[7], s[11], s[15], 20u, 20u, 19u, 4u) + MH_QR(s[0], s[5], s[10], s[15], 26u, 3u, 3u, 27u) MH_QR(s[1], s[6], s[11], s[12], 26u, 3u, 3u, 27u) + MH_QR(s[2], s[7], s[8], s[13], 26u, 3u, 3u, 27u) MH_QR(s[3], s[4], s[9], s[14], 26u, 3u, 3u, 27u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_0(uint* s) { + s[14] = mh_rotl(s[14], 30u) + s[0]; + s[15] *= (s[14] | 1u); + s[6] += s[15] + 0xd9ac4ac1u; + s[3] ^= s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[7] ^= s[2]; + s[10] -= s[7]; + s[11] += s[10]; + s[12] *= (s[11] | 1u); + s[4] ^= s[12]; + s[5] = (s[5] ^ s[4]) * 0xbce67fc5u; + s[1] = (s[1] ^ s[5]) * 0xe0fb71bbu; + s[5] -= s[1]; + s[3] += s[5]; + s[10] += s[3]; + s[7] = mh_rotl(s[7] ^ s[10], 5u); + s[0] ^= s[7]; + s[10] ^= s[0]; + s[8] -= s[10]; + s[12] += s[8]; + s[9] += s[12]; + s[12] ^= s[9] ^ 0x891d0a72u; + s[1] -= s[12]; + s[10] ^= s[1] ^ 0x12a9780cu; + s[2] = mh_rotl(s[2] ^ s[10], 27u); + s[11] *= (s[2] | 1u); + s[4] += s[11]; + s[7] ^= (s[4] & s[5]); + s[0] -= s[7]; + s[11] += s[0]; + s[8] -= s[11]; + s[15] += s[8] + 0x8186dd7cu; + s[9] ^= s[15]; + s[12] += s[9]; + s[5] ^= s[12] ^ 0x4a9b0a35u; + s[4] *= (s[5] | 1u); + s[9] += s[4]; + s[12] += s[9]; + s[10] = (s[10] ^ s[12]) * 0xe3385ffdu; + s[11] -= s[10]; + s[9] -= s[11]; + s[13] += s[9] + 0xb72698dbu; + s[1] ^= (s[13] & s[2]); + s[10] = (s[10] ^ s[1]) * 0xcf3e22d7u; + s[12] = (s[12] ^ s[10]) * 0xb28b0e19u; + s[9] += s[12]; + s[1] ^= s[9]; + s[2] *= (s[1] | 1u); + s[7] ^= s[2]; + s[8] ^= (s[7] & s[12]); + s[6] += s[8]; + s[15] = (s[15] ^ s[6]) * 0xee66c1cfu; + s[4] -= s[15]; + s[3] += s[4]; + s[12] = s[12] * 0xd3452a43u + s[3]; + s[0] ^= s[12]; + s[1] *= (s[0] | 1u); + s[12] += s[1] + 0xce692008u; + s[6] ^= (s[12] & s[5]); + s[13] ^= (s[6] & s[15]); + s[7] ^= s[13]; + s[9] += s[7]; + s[12] *= (s[9] | 1u); + s[2] -= s[12]; + s[15] = mh_rotl(s[15], 25u) + s[2]; + s[6] ^= s[15]; + s[13] -= s[6]; + s[7] += (s[13] | s[15]); + s[15] = s[15] * 0x3bb17cedu + s[7]; + s[1] *= (s[15] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[1]; + s[0] = (s[0] ^ s[6]) * 0xbb828911u; + s[3] += s[0] + 0x6593f64cu; + s[5] ^= s[3] ^ 0xff45cfddu; + s[4] ^= s[5]; + s[7] *= (s[4] | 1u); + s[9] ^= s[7]; + s[11] += s[9] + 0x1618a409u; + s[2] *= (s[11] | 1u); + s[15] = (s[15] ^ s[2]) * 0x60c6efedu; + s[11] = mh_rotl(s[11] ^ s[15], 20u); + s[3] ^= s[11] ^ 0x6961fd5au; + s[6] ^= s[3]; + s[2] += s[6]; + s[0] = mh_rotl(s[0] ^ s[2], 19u); + s[5] *= (s[0] | 1u); + s[8] += s[5]; + s[9] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[9], 7u); + s[0] ^= s[2]; + s[10] ^= s[0]; + s[1] += s[10]; + s[11] += s[1]; + s[9] += s[11]; + s[10] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 3u) + s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[2] = mh_rotl(s[2] ^ s[0], 25u); + s[0] = mh_rotl(s[0], 18u) + s[2]; + s[1] = mh_rotl(s[1], 15u) + s[0]; + s[8] *= (s[1] | 1u); + s[2] -= s[8]; + s[5] = mh_rotl(s[5] ^ s[2], 7u); + s[11] ^= s[5]; + s[8] ^= s[11]; + s[3] ^= s[8] ^ 0xe6be7c09u; + s[4] += (s[3] | s[13]); + s[2] = mh_rotl(s[2] ^ s[4], 13u); + s[15] = mh_rotl(s[15] ^ s[2], 9u); + s[4] = mh_rotl(s[4], 19u) + s[15]; + s[10] = mh_rotl(s[10], 25u) + s[4]; + s[11] *= (s[10] | 1u); + s[7] -= s[11]; + s[2] ^= (s[7] & s[4]); + s[1] = mh_rotl(s[1], 14u) + s[2]; + s[3] *= (s[1] | 1u); + s[0] = s[0] * 0xd9de6c6du + s[3]; + s[12] = (s[12] ^ s[0]) * 0xe3e5b763u; + s[2] = (s[2] ^ s[12]) * 0xa90198efu; + s[6] = mh_rotl(s[6] ^ s[2], 23u); + s[1] *= (s[6] | 1u); + s[2] ^= (s[1] & s[5]); + s[12] -= s[2]; + s[14] += s[12]; + s[8] += (s[14] | s[12]); + s[5] -= s[8]; + s[12] -= s[5]; + s[5] ^= s[12]; + s[2] *= (s[5] | 1u); + s[0] += s[2]; + s[9] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[9]; + s[0] = (s[0] ^ s[5]) * 0x1881452du; + s[10] += s[0] + 0x0da78a3eu; + s[7] -= s[10]; + s[13] = (s[13] ^ s[7]) * 0x97232879u; + s[11] = (s[11] ^ s[13]) * 0xb8dae9a5u; + s[13] = mh_rotl(s[13] ^ s[11], 8u); + s[6] += s[13]; + s[3] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[3], 31u); + s[4] ^= s[6]; + s[9] ^= s[4] ^ 0x6b4c4741u; + s[15] = mh_rotl(s[15], 19u) + s[9]; + s[8] ^= s[15] ^ 0x756f820du; + s[1] = mh_rotl(s[1] ^ s[8], 10u); + s[6] -= s[1]; + s[15] = mh_rotl(s[15], 29u) + s[6]; + s[9] = mh_rotl(s[9] ^ s[15], 31u); + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] *= (s[5] | 1u); + s[12] += s[11] + 0xee00292du; + s[1] += s[12]; + s[12] ^= s[1] ^ 0x9c50a8acu; + s[13] *= (s[12] | 1u); + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[0] = (s[0] ^ s[8]) * 0xc53caea3u; + s[12] *= (s[0] | 1u); + s[9] -= s[12]; + s[11] -= s[9]; + s[5] = mh_rotl(s[5], 15u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[5], 21u); + s[2] ^= s[13] ^ 0x84b1978fu; + s[14] += s[2]; + s[3] ^= s[14] ^ 0x05a8c594u; + s[13] += s[3] + 0x54e905a7u; + s[11] ^= s[13]; + s[8] -= s[11]; + s[7] ^= s[8] ^ 0x2244941fu; + s[1] = s[1] * 0xed0aecc5u + s[7]; + s[7] *= (s[1] | 1u); + s[10] = (s[10] ^ s[7]) * 0x4b837a0bu; + s[12] -= s[10]; + s[2] -= s[12]; + s[3] *= (s[2] | 1u); + s[7] *= (s[3] | 1u); + s[12] ^= s[7] ^ 0x5ffe7c51u; + s[15] ^= (s[12] & s[6]); + s[0] = mh_rotl(s[0], 4u) + s[15]; + s[2] = mh_rotl(s[2], 12u) + s[0]; + s[4] -= s[2]; + s[9] -= s[4]; + s[15] ^= s[9]; + s[14] = mh_rotl(s[14], 15u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[14], 4u); + s[8] = mh_rotl(s[8], 12u) + s[1]; + s[2] *= (s[8] | 1u); + s[0] ^= s[2] ^ 0x24e25306u; + s[13] ^= s[0]; + s[7] = mh_rotl(s[7], 14u) + s[13]; + s[12] += s[7]; + s[2] ^= (s[12] & s[7]); + s[9] = mh_rotl(s[9], 4u) + s[2]; + s[8] *= (s[9] | 1u); + s[3] ^= (s[8] & s[5]); + s[8] = (s[8] ^ s[3]) * 0x6cea4323u; + s[13] += s[8]; + s[9] *= (s[13] | 1u); + s[15] *= (s[9] | 1u); + s[1] ^= s[15]; + s[7] -= s[1]; + s[2] += s[7] + 0x188c833fu; + s[14] += s[2] + 0xc33e117au; + s[1] ^= s[14] ^ 0x97c1cf13u; + s[15] = mh_rotl(s[15] ^ s[1], 10u); + s[13] = mh_rotl(s[13] ^ s[15], 25u); + s[9] += s[13]; + s[3] = mh_rotl(s[3], 19u) + s[9]; + s[7] ^= (s[3] & s[15]); + s[13] += s[7]; + s[0] = mh_rotl(s[0], 24u) + s[13]; + s[15] ^= s[0]; + s[11] ^= s[15] ^ 0x8046a7c8u; + s[7] *= (s[11] | 1u); + s[1] ^= s[7]; + s[3] ^= s[1]; + s[6] += s[3]; + s[11] ^= s[6]; + s[9] += (s[11] | s[14]); + s[10] ^= s[9]; + s[7] -= s[10]; + s[4] += s[7]; + s[13] += s[4] + 0x0d609a06u; + s[3] += (s[13] | s[11]); + s[8] += (s[3] | s[6]); + s[13] *= (s[8] | 1u); + s[7] ^= (s[13] & s[6]); + s[14] += s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 17u); + s[14] ^= (s[5] & s[3]); + s[11] += (s[14] | s[0]); + s[4] ^= s[11]; + s[3] ^= s[4] ^ 0x518deaefu; + s[8] *= (s[3] | 1u); + s[13] = mh_rotl(s[13] ^ s[8], 25u); + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[15] = (s[15] ^ s[3]) * 0xf612eda3u; + s[7] = mh_rotl(s[7] ^ s[15], 8u); + s[5] = s[5] * 0x2836c587u + s[7]; + s[14] = s[14] * 0x97e56ca5u + s[5]; + s[9] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[9], 23u); + s[0] -= s[15]; + s[6] ^= s[0]; + s[4] ^= (s[6] & s[15]); + s[7] ^= s[4]; + s[1] -= s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[15] = (s[15] ^ s[14]) * 0x8744e455u; + s[9] += s[15]; + s[3] = mh_rotl(s[3], 1u) + s[9]; + s[8] = s[8] * 0x973da983u + s[3]; + s[11] ^= s[8]; + s[9] ^= s[11]; + s[8] *= (s[9] | 1u); + s[13] += s[8] + 0x57db65d6u; + s[15] *= (s[13] | 1u); + s[14] -= s[15]; + s[1] = (s[1] ^ s[14]) * 0xb9f9718fu; + s[7] = mh_rotl(s[7] ^ s[1], 31u); + s[9] = (s[9] ^ s[7]) * 0x640547efu; + s[11] += s[9]; + s[3] = mh_rotl(s[3], 10u) + s[11]; + s[0] = (s[0] ^ s[3]) * 0xb284d74fu; + s[4] += s[0]; + s[15] += (s[4] | s[11]); + s[9] += s[15] + 0xf4848271u; + s[14] *= (s[9] | 1u); + s[7] += s[14] + 0x9cc79f25u; + s[3] += s[7]; + s[15] = (s[15] ^ s[3]) * 0x89e86eafu; + s[5] += s[15] + 0xd1058324u; + s[6] = (s[6] ^ s[5]) * 0x3a95ce61u; + s[14] -= s[6]; + s[5] ^= s[14]; + s[14] = mh_rotl(s[14], 29u) + s[5]; + s[12] = mh_rotl(s[12], 15u) + s[14]; + s[11] += s[12]; + s[8] *= (s[11] | 1u); + s[15] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[15], 23u); + s[13] ^= s[4]; + s[2] ^= s[13]; + s[4] = (s[4] ^ s[2]) * 0x55b5ed41u; + s[9] ^= s[4]; + s[14] += s[9] + 0x4577e106u; + s[12] *= (s[14] | 1u); + s[7] ^= (s[12] & s[8]); + s[0] = mh_rotl(s[0], 24u) + s[7]; + s[5] += s[0] + 0xe4b59af5u; + s[6] ^= s[5] ^ 0xc95684a6u; + s[2] = mh_rotl(s[2], 15u) + s[6]; + s[3] *= (s[2] | 1u); + s[9] *= (s[3] | 1u); + s[2] ^= (s[9] & s[15]); + s[1] += s[2]; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[10] = (s[10] ^ s[8]) * 0xfc3cdd57u; + s[2] -= s[10]; + s[6] += (s[2] | s[1]); + s[7] ^= s[6]; + s[12] ^= s[7]; + s[9] ^= s[12]; + s[13] ^= s[9] ^ 0x7556231du; + s[3] ^= s[13]; + s[0] += (s[3] | s[6]); + s[12] ^= s[0] ^ 0x58f380adu; + s[15] ^= s[12] ^ 0xcf2c5207u; + s[14] = mh_rotl(s[14], 8u) + s[15]; + s[15] *= (s[14] | 1u); + s[6] ^= s[15]; + s[1] *= (s[6] | 1u); + s[13] ^= (s[1] & s[7]); + s[6] ^= s[13]; + s[9] *= (s[6] | 1u); + s[10] += s[9]; + s[15] ^= (s[10] & s[9]); + s[8] *= (s[15] | 1u); + s[3] -= s[8]; + s[6] *= (s[3] | 1u); + s[12] += s[6]; + s[8] += s[12]; + s[14] ^= s[8]; + s[13] += s[14]; + s[1] += s[13] + 0xc57bd1c4u; + s[3] = mh_rotl(s[3], 22u) + s[1]; + s[13] += s[3]; + s[3] ^= s[13] ^ 0x53c4357du; + s[1] = mh_rotl(s[1], 19u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[14] = s[14] * 0xb9e6c0b1u + s[12]; + s[8] -= s[14]; + s[5] -= s[8]; + s[0] ^= s[5]; + s[11] = (s[11] ^ s[0]) * 0xf434e1efu; + s[5] = (s[5] ^ s[11]) * 0x9121d805u; + s[1] += s[5]; + s[11] += (s[1] | s[7]); + s[8] ^= s[11]; + s[7] *= (s[8] | 1u); + s[12] ^= s[7] ^ 0x367f3a0fu; + s[10] ^= s[12] ^ 0x988ad558u; + s[6] ^= s[10] ^ 0xc31a2c66u; + s[11] += s[6] + 0xf44c1a7du; + s[15] ^= (s[11] & s[1]); + s[2] = mh_rotl(s[2] ^ s[15], 14u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[9] ^= s[3]; + s[1] *= (s[9] | 1u); + s[5] = (s[5] ^ s[1]) * 0x05e8dea9u; + s[12] += (s[5] | s[11]); + s[13] += s[12]; + s[5] -= s[13]; + s[10] ^= s[5]; + s[4] = (s[4] ^ s[10]) * 0xa49163afu; + s[12] += s[4] + 0xa8c7865du; + s[1] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[1], 28u); + s[3] -= s[14]; + s[15] = (s[15] ^ s[3]) * 0x4481a6a5u; + s[12] = mh_rotl(s[12] ^ s[15], 8u); + s[3] -= s[12]; + s[9] = (s[9] ^ s[3]) * 0x0a8015a5u; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[14] -= s[9]; + s[9] *= (s[14] | 1u); + s[7] *= (s[9] | 1u); + s[1] = s[1] * 0x102d9b67u + s[7]; + s[12] += s[1]; + s[14] *= (s[12] | 1u); + s[6] ^= s[14]; + s[0] += s[6] + 0x633908b4u; + s[6] -= s[0]; + s[0] = mh_rotl(s[0] ^ s[6], 26u); + s[11] = s[11] * 0xa3cfd0bfu + s[0]; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[3] ^= s[14]; + s[6] = mh_rotl(s[6], 15u) + s[3]; + s[8] ^= s[6] ^ 0xd47945b7u; + s[11] ^= s[8]; + s[14] += s[11]; + s[5] += s[14]; + s[12] = mh_rotl(s[12], 2u) + s[5]; + s[10] *= (s[12] | 1u); + s[1] *= (s[10] | 1u); + s[3] += s[1]; + s[9] = mh_rotl(s[9] ^ s[3], 2u); + s[2] += s[9]; + s[4] ^= s[2]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[11] -= s[13]; + s[8] += s[11]; + s[7] += s[8] + 0xf15c3fd7u; + s[9] ^= s[7]; + s[8] = mh_rotl(s[8] ^ s[9], 29u); + s[7] = (s[7] ^ s[8]) * 0xea581ad3u; + s[14] = mh_rotl(s[14] ^ s[7], 31u); + s[4] = (s[4] ^ s[14]) * 0x7cfc0ccfu; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[4] -= s[1]; + s[2] ^= s[4] ^ 0x63b7d83fu; + s[10] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[10], 13u); + s[15] ^= s[13] ^ 0x5e3fbc23u; + s[7] = mh_rotl(s[7] ^ s[15], 27u); + s[4] = s[4] * 0x0ab4b509u + s[7]; + s[7] = s[7] * 0xcd845e5du + s[4]; + s[3] = mh_rotl(s[3], 11u) + s[7]; + s[15] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[15], 31u); + s[12] = mh_rotl(s[12] ^ s[6], 19u); + s[6] += s[12] + 0xc5e9e33eu; + s[13] ^= s[6] ^ 0x0ee62cbbu; + s[8] = mh_rotl(s[8] ^ s[13], 9u); + s[0] *= (s[8] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[13] += s[10]; + s[7] += s[13] + 0xb255fa09u; + s[14] += s[7]; + s[6] = mh_rotl(s[6], 24u) + s[14]; + s[3] *= (s[6] | 1u); + s[9] *= (s[3] | 1u); + s[3] = (s[3] ^ s[9]) * 0x833bda21u; + s[12] -= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 10u); + s[9] = mh_rotl(s[9], 25u) + s[6]; + s[12] -= s[9]; + s[11] += s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 24u); + s[14] ^= s[1]; + s[2] += (s[14] | s[9]); + s[13] = (s[13] ^ s[2]) * 0x1bbb3967u; + s[0] ^= s[13]; + s[13] ^= s[0] ^ 0x2109f216u; + s[8] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 23u) + s[8]; + s[9] = s[9] * 0xcdf20df5u + s[4]; + s[0] = s[0] * 0x97687fa1u + s[9]; + s[10] ^= s[0]; + s[2] += s[10]; + s[11] ^= s[2]; + s[12] *= (s[11] | 1u); + s[4] = mh_rotl(s[4] ^ s[12], 25u); + s[10] = mh_rotl(s[10], 28u) + s[4]; + s[0] ^= s[10]; + s[13] -= s[0]; + s[2] = mh_rotl(s[2], 12u) + s[13]; + s[12] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[8] ^= s[7] ^ 0x250900e2u; + s[3] = mh_rotl(s[3] ^ s[8], 27u); + s[10] += s[3] + 0xa18e04b0u; + s[12] = (s[12] ^ s[10]) * 0x7963ce7bu; + s[1] ^= (s[12] & s[6]); + s[13] = mh_rotl(s[13], 3u) + s[1]; + s[3] = mh_rotl(s[3], 1u) + s[13]; + s[14] -= s[3]; + s[10] ^= s[14]; + s[1] ^= s[10]; + s[5] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[5], 12u); + s[6] *= (s[2] | 1u); + s[11] -= s[6]; + s[9] ^= s[11] ^ 0x69d4cac1u; + s[3] = mh_rotl(s[3], 15u) + s[9]; + s[9] += s[3]; + s[14] = (s[14] ^ s[9]) * 0x00adfa7fu; + s[9] = (s[9] ^ s[14]) * 0x698e49f7u; + s[14] ^= (s[9] & s[6]); + s[4] -= s[14]; + s[5] ^= s[4] ^ 0x558a07eeu; + s[8] += s[5]; + s[9] = s[9] * 0xa25a44b5u + s[8]; + s[13] = mh_rotl(s[13], 12u) + s[9]; + s[1] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[1], 2u); + s[9] ^= s[5]; + s[15] += s[9] + 0x75af4931u; + s[9] += s[15]; + s[6] ^= s[9]; + s[9] *= (s[6] | 1u); + s[7] = (s[7] ^ s[9]) * 0x14d500bbu; + s[4] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 1u) + s[4]; + s[9] *= (s[7] | 1u); + s[10] ^= s[9]; + s[12] += s[10]; + s[2] = s[2] * 0x114aee2du + s[12]; + s[0] ^= s[2]; + s[10] += s[0]; + s[8] *= (s[10] | 1u); + s[14] = (s[14] ^ s[8]) * 0x9aaa1821u; + s[3] ^= s[14]; + s[1] = mh_rotl(s[1] ^ s[3], 14u); + s[0] += s[1]; + s[14] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[1] ^= s[11]; + s[3] += s[1]; + s[5] = mh_rotl(s[5] ^ s[3], 28u); + s[12] ^= s[5]; + s[10] ^= s[12] ^ 0xcf112b3eu; + s[12] = mh_rotl(s[12], 17u) + s[10]; + s[8] += s[12] + 0xa0423d55u; + s[12] -= s[8]; + s[4] -= s[12]; + s[14] -= s[4]; + s[0] += s[14]; + s[2] *= (s[0] | 1u); + s[8] ^= s[2]; + s[10] ^= s[8]; + s[4] += s[10] + 0x0e0a85c9u; + s[2] += s[4] + 0x5aa11787u; + s[9] += s[2] + 0xbc33a8acu; + s[1] = mh_rotl(s[1], 2u) + s[9]; + s[11] = (s[11] ^ s[1]) * 0x5ab0da6du; + s[10] = (s[10] ^ s[11]) * 0xfa4adf2du; + s[2] -= s[10]; + s[10] -= s[2]; + s[2] ^= s[10]; + s[1] += s[2]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[3] += s[6]; + s[9] ^= s[3] ^ 0xc19b7470u; + s[12] *= (s[9] | 1u); + s[14] += (s[12] | s[15]); + s[5] = (s[5] ^ s[14]) * 0x6790286fu; + s[15] ^= s[5]; + s[10] -= s[15]; + s[13] += (s[10] | s[3]); + s[2] *= (s[13] | 1u); + s[7] += (s[2] | s[13]); + s[2] += s[7]; + s[11] += s[2]; + s[1] *= (s[11] | 1u); + s[13] += s[1] + 0x9c1bdb18u; + s[5] ^= (s[13] & s[1]); + s[13] += s[5]; + s[14] ^= s[13]; + s[0] += (s[14] | s[13]); + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[7] += s[6]; + s[9] ^= (s[7] & s[0]); + s[15] = (s[15] ^ s[9]) * 0x63348941u; + s[13] ^= s[15]; + s[10] += s[13]; + s[14] = (s[14] ^ s[10]) * 0x04d19b2fu; + s[2] *= (s[14] | 1u); + s[13] -= s[2]; + s[15] -= s[13]; + s[6] += (s[15] | s[12]); + s[14] += s[6] + 0x331d9e99u; + s[1] = mh_rotl(s[1], 24u) + s[14]; + s[2] = s[2] * 0xf02184e1u + s[1]; + s[12] += s[2]; + s[4] = (s[4] ^ s[12]) * 0xa250e449u; + s[2] *= (s[4] | 1u); + s[11] ^= s[2] ^ 0x6c4530fdu; + s[2] = mh_rotl(s[2], 10u) + s[11]; + s[6] *= (s[2] | 1u); + s[0] += (s[6] | s[7]); + s[6] = (s[6] ^ s[0]) * 0x678da095u; + s[14] = mh_rotl(s[14] ^ s[6], 30u); + s[3] = (s[3] ^ s[14]) * 0x3b065e11u; + s[8] += (s[3] | s[13]); + s[0] += s[8] + 0xd1214021u; + s[12] -= s[0]; + s[4] ^= s[12] ^ 0x2ae728adu; + s[0] = mh_rotl(s[0] ^ s[4], 11u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[15] *= (s[4] | 1u); + s[8] = mh_rotl(s[8] ^ s[15], 4u); + s[12] = (s[12] ^ s[8]) * 0x32cf5655u; + s[7] = (s[7] ^ s[12]) * 0xc97ab55fu; + s[15] *= (s[7] | 1u); + s[13] = s[13] * 0xc3424c27u + s[15]; + s[3] *= (s[13] | 1u); + s[13] = s[13] * 0x8b172941u + s[3]; + s[5] = mh_rotl(s[5], 5u) + s[13]; + s[6] ^= s[5]; + s[4] = (s[4] ^ s[6]) * 0xd1833353u; + s[5] = mh_rotl(s[5] ^ s[4], 10u); + s[11] = mh_rotl(s[11], 4u) + s[5]; + s[7] = (s[7] ^ s[11]) * 0x81b253dbu; + s[11] += s[7]; + s[8] = mh_rotl(s[8], 30u) + s[11]; + s[6] ^= s[8]; + s[5] = mh_rotl(s[5], 30u) + s[6]; + s[1] += s[5]; + s[10] += s[1] + 0xc388fc9cu; + s[9] ^= s[10]; + s[7] += (s[9] | s[10]); + s[11] += s[7]; + s[14] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[11] -= s[15]; + s[8] ^= s[11]; + s[6] ^= s[8]; + s[13] ^= s[6]; + s[7] += (s[13] | s[4]); + s[9] ^= s[7]; + s[0] += s[9]; + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 3u); + s[8] = s[8] * 0x229aeb39u + s[5]; + s[1] -= s[8]; + s[0] += s[1]; + s[13] += (s[0] | s[7]); + s[15] = (s[15] ^ s[13]) * 0x878a1a07u; + s[12] += s[15]; + s[14] ^= s[12]; + s[13] -= s[14]; + s[10] ^= s[13] ^ 0x3937b9cbu; + s[3] = mh_rotl(s[3], 29u) + s[10]; + s[1] += s[3] + 0x1698a660u; + s[2] = (s[2] ^ s[1]) * 0x20fad729u; + s[5] ^= s[2] ^ 0xe9e6778au; + s[10] += s[5] + 0xdaa6b74du; + s[3] *= (s[10] | 1u); + s[1] += (s[3] | s[6]); + s[15] = s[15] * 0xc0ee8651u + s[1]; + s[2] += s[15] + 0xbf9a18d6u; + s[6] += s[2] + 0xe0a7457eu; + s[10] ^= s[6]; + s[5] ^= s[10]; + s[4] ^= s[5] ^ 0x2b72d900u; + s[5] = mh_rotl(s[5] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[5], 7u); + s[10] = mh_rotl(s[10], 13u) + s[4]; + s[3] += (s[10] | s[4]); + s[9] += (s[3] | s[2]); + s[10] ^= s[9]; + s[13] ^= (s[10] & s[8]); + s[8] = mh_rotl(s[8], 11u) + s[13]; + s[4] += (s[8] | s[3]); + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[4] ^= s[15]; + s[1] ^= s[4]; + s[11] += s[1] + 0x0fb942e8u; + s[9] += (s[11] | s[0]); + s[10] = (s[10] ^ s[9]) * 0xf4ac3c9bu; + s[8] = mh_rotl(s[8] ^ s[10], 21u); + s[15] = mh_rotl(s[15] ^ s[8], 25u); + s[12] = mh_rotl(s[12] ^ s[15], 31u); + s[1] *= (s[12] | 1u); + s[15] += s[1] + 0xad836925u; + s[4] = mh_rotl(s[4], 29u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[4], 2u); + s[5] ^= s[1]; + s[6] -= s[5]; + s[10] -= s[6]; + s[9] *= (s[10] | 1u); + s[5] = mh_rotl(s[5], 13u) + s[9]; + s[7] ^= s[5] ^ 0xa8c7112du; + s[15] += (s[7] | s[2]); + s[11] = mh_rotl(s[11], 5u) + s[15]; + s[6] += (s[11] | s[5]); + s[12] = mh_rotl(s[12] ^ s[6], 25u); + s[6] ^= s[12] ^ 0xa8a8a54fu; + s[13] += s[6]; + s[1] *= (s[13] | 1u); + s[8] *= (s[1] | 1u); + s[12] += s[8]; + s[6] = (s[6] ^ s[12]) * 0x138d287fu; + s[5] = mh_rotl(s[5] ^ s[6], 4u); + s[13] = mh_rotl(s[13], 19u) + s[5]; + s[4] = mh_rotl(s[4], 18u) + s[13]; + s[13] += s[4] + 0x47783811u; + s[3] = s[3] * 0x3cb23963u + s[13]; + s[14] -= s[3]; + s[10] += s[14]; + s[2] ^= s[10]; + s[12] ^= s[2] ^ 0x70bcebd6u; + s[3] += s[12]; + s[8] = mh_rotl(s[8], 25u) + s[3]; + s[9] -= s[8]; + s[12] ^= s[9]; + s[0] = mh_rotl(s[0] ^ s[12], 7u); + s[6] = mh_rotl(s[6] ^ s[0], 19u); + s[2] ^= s[6]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[7] = (s[7] ^ s[11]) * 0x991f0089u; + s[3] -= s[7]; + s[10] = mh_rotl(s[10], 12u) + s[3]; + s[6] ^= s[10]; + s[12] += s[6]; + s[0] -= s[12]; + s[5] ^= s[0]; + s[2] = mh_rotl(s[2], 5u) + s[5]; + s[3] -= s[2]; + s[0] += s[3] + 0x84500e17u; + s[1] ^= s[0]; + s[15] *= (s[1] | 1u); + s[6] += s[15]; + s[5] = mh_rotl(s[5], 1u) + s[6]; + s[13] ^= s[5] ^ 0x32e6a4b0u; + s[1] -= s[13]; + s[0] += s[1]; + s[7] += s[0]; + s[15] = (s[15] ^ s[7]) * 0xde51d36bu; + s[12] += s[15]; + s[11] ^= s[12] ^ 0x085d7e04u; + s[7] = mh_rotl(s[7] ^ s[11], 29u); + s[9] = mh_rotl(s[9], 10u) + s[7]; + s[3] ^= s[9]; + s[1] ^= s[3] ^ 0xe20c8a44u; + s[6] += s[1]; + s[0] ^= s[6]; + s[11] = mh_rotl(s[11], 29u) + s[0]; + s[13] = mh_rotl(s[13] ^ s[11], 3u); + s[4] = s[4] * 0x53fa87a7u + s[13]; + s[15] = mh_rotl(s[15] ^ s[4], 13u); + s[13] ^= s[15] ^ 0xbaf52e15u; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[11] ^= s[1] ^ 0x16b5024au; + s[6] += s[11] + 0x712948feu; + s[15] += s[6]; + s[10] *= (s[15] | 1u); + s[0] -= s[10]; + s[11] ^= s[0]; + s[12] += (s[11] | s[1]); + s[14] -= s[12]; + s[0] -= s[14]; + s[9] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[9], 1u); + s[14] = (s[14] ^ s[15]) * 0x97b15c85u; + s[8] -= s[14]; +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_1(uint* s) { + s[14] = mh_rotl(s[14] ^ s[0], 17u); + s[12] = (s[12] ^ s[14]) * 0xa6ee330du; + s[2] += s[12]; + s[1] = s[1] * 0x0ce4bf05u + s[2]; + s[5] = mh_rotl(s[5], 20u) + s[1]; + s[15] = mh_rotl(s[15], 15u) + s[5]; + s[7] ^= s[15]; + s[2] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[2], 17u); + s[3] += s[0]; + s[9] = mh_rotl(s[9], 23u) + s[3]; + s[5] -= s[9]; + s[4] -= s[5]; + s[13] += s[4] + 0x1663e8c2u; + s[11] ^= s[13] ^ 0x6188ab5cu; + s[1] *= (s[11] | 1u); + s[13] -= s[1]; + s[10] += s[13]; + s[7] -= s[10]; + s[11] = s[11] * 0x0909c327u + s[7]; + s[8] ^= s[11]; + s[7] ^= s[8] ^ 0x82d87f23u; + s[13] = (s[13] ^ s[7]) * 0x5c48c9c7u; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 8u); + s[8] = mh_rotl(s[8], 1u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[8], 22u); + s[7] = (s[7] ^ s[2]) * 0x8d7cb2a9u; + s[6] -= s[7]; + s[8] = (s[8] ^ s[6]) * 0xac42e56du; + s[15] ^= s[8]; + s[2] ^= (s[15] & s[8]); + s[14] += s[2]; + s[5] += s[14]; + s[10] *= (s[5] | 1u); + s[13] += s[10] + 0xded20149u; + s[4] ^= s[13]; + s[14] ^= (s[4] & s[10]); + s[9] += s[14] + 0xe78db039u; + s[10] *= (s[9] | 1u); + s[8] ^= s[10] ^ 0x042fcfe9u; + s[2] += s[8]; + s[7] -= s[2]; + s[9] ^= s[7]; + s[8] ^= s[9]; + s[0] -= s[8]; + s[13] = mh_rotl(s[13] ^ s[0], 2u); + s[4] = mh_rotl(s[4] ^ s[13], 23u); + s[3] -= s[4]; + s[11] ^= s[3]; + s[1] *= (s[11] | 1u); + s[14] -= s[1]; + s[3] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[3]; + s[11] += s[10]; + s[7] -= s[11]; + s[15] += (s[7] | s[2]); + s[12] ^= s[15] ^ 0x57a179c1u; + s[8] -= s[12]; + s[1] ^= s[8] ^ 0xcb23a9b1u; + s[2] = mh_rotl(s[2], 7u) + s[1]; + s[4] -= s[2]; + s[14] ^= s[4] ^ 0x076e00fdu; + s[5] = mh_rotl(s[5] ^ s[14], 3u); + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[6] += s[9]; + s[13] = mh_rotl(s[13] ^ s[6], 2u); + s[10] += s[13]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[11] ^= s[9]; + s[15] ^= s[11]; + s[2] += s[15]; + s[14] = (s[14] ^ s[2]) * 0x7017bcdfu; + s[9] -= s[14]; + s[12] = mh_rotl(s[12] ^ s[9], 11u); + s[3] ^= s[12]; + s[8] += (s[3] | s[0]); + s[13] ^= s[8] ^ 0xb6656cfeu; + s[11] ^= s[13] ^ 0x118ac00bu; + s[8] = (s[8] ^ s[11]) * 0x3da3f311u; + s[4] = (s[4] ^ s[8]) * 0x1d6af721u; + s[12] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[11] *= (s[10] | 1u); + s[0] *= (s[11] | 1u); + s[11] *= (s[0] | 1u); + s[4] ^= s[11]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 27u) + s[14]; + s[2] ^= (s[11] & s[5]); + s[11] -= s[2]; + s[10] *= (s[11] | 1u); + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[7] ^= s[9]; + s[2] += s[7] + 0x72228b15u; + s[13] ^= (s[2] & s[1]); + s[7] = mh_rotl(s[7], 25u) + s[13]; + s[4] = (s[4] ^ s[7]) * 0x12e611dbu; + s[15] ^= (s[4] & s[2]); + s[1] += (s[15] | s[10]); + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0x4b034585u; + s[1] += s[2]; + s[13] ^= s[1] ^ 0x03c7fc79u; + s[9] ^= (s[13] & s[7]); + s[11] += s[9] + 0xf9b5cff0u; + s[10] = mh_rotl(s[10] ^ s[11], 4u); + s[11] = s[11] * 0x5aaa11f7u + s[10]; + s[2] -= s[11]; + s[1] ^= s[2]; + s[5] = mh_rotl(s[5] ^ s[1], 30u); + s[12] ^= s[5]; + s[8] ^= (s[12] & s[15]); + s[4] = s[4] * 0x32c2f11bu + s[8]; + s[8] = (s[8] ^ s[4]) * 0x8c725c57u; + s[3] += s[8] + 0x16517d85u; + s[2] ^= s[3]; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[2] = mh_rotl(s[2], 9u) + s[0]; + s[8] -= s[2]; + s[14] += s[8] + 0x3d1690b9u; + s[8] ^= s[14] ^ 0xfd404591u; + s[5] = mh_rotl(s[5], 14u) + s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 28u); + s[7] ^= s[15]; + s[13] ^= s[7] ^ 0x1c120483u; + s[2] ^= (s[13] & s[14]); + s[6] ^= s[2]; + s[10] = (s[10] ^ s[6]) * 0x4fd29dfdu; + s[3] += s[10]; + s[10] ^= s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 25u); + s[2] = s[2] * 0x8eebc38du + s[14]; + s[5] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[9] -= s[14]; + s[14] = s[14] * 0xea014a2fu + s[9]; + s[9] ^= (s[14] & s[12]); + s[8] ^= s[9]; + s[10] = s[10] * 0xdffcece9u + s[8]; + s[11] -= s[10]; + s[9] ^= s[11]; + s[5] = (s[5] ^ s[9]) * 0xb0f7c285u; + s[2] ^= s[5]; + s[7] ^= s[2]; + s[11] ^= s[7]; + s[3] *= (s[11] | 1u); + s[8] += (s[3] | s[6]); + s[0] ^= s[8] ^ 0x0be40c24u; + s[1] = mh_rotl(s[1], 14u) + s[0]; + s[9] -= s[1]; + s[4] += s[9]; + s[12] -= s[4]; + s[8] += s[12]; + s[13] ^= s[8]; + s[8] -= s[13]; + s[15] += s[8]; + s[10] = mh_rotl(s[10] ^ s[15], 11u); + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[12] += s[3]; + s[10] ^= s[12] ^ 0x7646e0a4u; + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[7] = mh_rotl(s[7], 13u) + s[8]; + s[6] ^= (s[7] & s[15]); + s[1] += (s[6] | s[0]); + s[3] = mh_rotl(s[3], 27u) + s[1]; + s[12] ^= s[3]; + s[1] = s[1] * 0xe296889du + s[12]; + s[7] = mh_rotl(s[7], 6u) + s[1]; + s[5] += s[7]; + s[2] = (s[2] ^ s[5]) * 0xe5c22b4fu; + s[15] += s[2] + 0x31507e5eu; + s[3] += s[15]; + s[1] += s[3] + 0xa943282bu; + s[4] ^= (s[1] & s[11]); + s[10] += s[4]; + s[4] ^= (s[10] & s[5]); + s[1] += s[4]; + s[6] += s[1]; + s[13] ^= s[6]; + s[8] ^= s[13]; + s[2] = (s[2] ^ s[8]) * 0x6ff7b6c9u; + s[13] += (s[2] | s[5]); + s[12] ^= s[13] ^ 0xd6ce983fu; + s[4] ^= s[12]; + s[3] *= (s[4] | 1u); + s[10] += (s[3] | s[7]); + s[2] += s[10]; + s[14] ^= (s[2] & s[7]); + s[5] = s[5] * 0xa23d13c7u + s[14]; + s[8] += s[5] + 0xeba888dcu; + s[15] ^= s[8]; + s[2] ^= s[15] ^ 0x40a0fb0au; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[0] ^= s[9]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[5] += s[11] + 0x56f2d848u; + s[14] ^= (s[5] & s[15]); + s[7] = (s[7] ^ s[14]) * 0x1897fa79u; + s[14] = (s[14] ^ s[7]) * 0x0baf4813u; + s[15] *= (s[14] | 1u); + s[3] ^= (s[15] & s[7]); + s[10] -= s[3]; + s[4] ^= s[10]; + s[11] = (s[11] ^ s[4]) * 0x7df27859u; + s[7] *= (s[11] | 1u); + s[4] += s[7] + 0x3fc46fd8u; + s[6] = mh_rotl(s[6], 11u) + s[4]; + s[2] ^= s[6]; + s[13] += s[2]; + s[12] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[12], 18u); + s[15] ^= (s[5] & s[12]); + s[11] *= (s[15] | 1u); + s[8] += s[11]; + s[14] *= (s[8] | 1u); + s[8] += s[14]; + s[1] -= s[8]; + s[10] = mh_rotl(s[10], 18u) + s[1]; + s[4] ^= s[10]; + s[2] += s[4]; + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[13] += s[1]; + s[4] -= s[13]; + s[9] *= (s[4] | 1u); + s[6] -= s[9]; + s[3] = (s[3] ^ s[6]) * 0x6d6488c7u; + s[7] += (s[3] | s[10]); + s[12] ^= s[7]; + s[14] -= s[12]; + s[4] ^= s[14]; + s[10] += s[4]; + s[7] += s[10]; + s[15] += (s[7] | s[2]); + s[1] = mh_rotl(s[1], 8u) + s[15]; + s[5] += s[1]; + s[12] = mh_rotl(s[12], 1u) + s[5]; + s[3] *= (s[12] | 1u); + s[6] ^= s[3] ^ 0xada02894u; + s[3] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[3], 16u); + s[5] ^= s[6] ^ 0xeafee980u; + s[8] ^= s[5] ^ 0x00dbe804u; + s[10] = mh_rotl(s[10] ^ s[8], 5u); + s[2] *= (s[10] | 1u); + s[6] = mh_rotl(s[6] ^ s[2], 31u); + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[7] = s[7] * 0x16a2fd0bu + s[4]; + s[11] -= s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 20u); + s[1] ^= (s[2] & s[12]); + s[3] *= (s[1] | 1u); + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[12] += s[15]; + s[10] -= s[12]; + s[3] += s[10]; + s[13] += s[3]; + s[4] = mh_rotl(s[4], 14u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 2u); + s[8] += s[10]; + s[9] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[9], 11u); + s[9] -= s[7]; + s[11] -= s[9]; + s[5] -= s[11]; + s[3] = s[3] * 0x7d5e197du + s[5]; + s[9] *= (s[3] | 1u); + s[14] = mh_rotl(s[14], 8u) + s[9]; + s[11] += s[14] + 0xa3dd86d5u; + s[8] ^= s[11]; + s[2] -= s[8]; + s[5] *= (s[2] | 1u); + s[1] ^= s[5]; + s[12] ^= s[1]; + s[4] = mh_rotl(s[4] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 14u) + s[4]; + s[4] += (s[8] | s[15]); + s[3] = mh_rotl(s[3] ^ s[4], 2u); + s[2] ^= s[3]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[12] ^= s[9] ^ 0x33fd48ccu; + s[13] *= (s[12] | 1u); + s[3] += s[13]; + s[8] -= s[3]; + s[10] ^= (s[8] & s[7]); + s[15] ^= s[10] ^ 0xd3ffcb52u; + s[3] += s[15] + 0xd8cfcd30u; + s[0] = (s[0] ^ s[3]) * 0x013282f1u; + s[8] += s[0]; + s[4] ^= (s[8] & s[7]); + s[15] ^= s[4] ^ 0xd8b2262cu; + s[4] ^= s[15]; + s[0] ^= s[4]; + s[14] += s[0]; + s[1] += s[14]; + s[0] ^= s[1]; + s[14] += s[0]; + s[4] ^= s[14]; + s[11] *= (s[4] | 1u); + s[7] += s[11]; + s[2] = (s[2] ^ s[7]) * 0xb04d6739u; + s[12] ^= s[2]; + s[15] -= s[12]; + s[9] -= s[15]; + s[15] = (s[15] ^ s[9]) * 0x806e4757u; + s[2] = mh_rotl(s[2] ^ s[15], 26u); + s[4] ^= s[2] ^ 0x5da3ddfau; + s[14] *= (s[4] | 1u); + s[1] ^= s[14]; + s[14] = mh_rotl(s[14], 4u) + s[1]; + s[15] *= (s[14] | 1u); + s[4] = (s[4] ^ s[15]) * 0x8339a46bu; + s[13] -= s[4]; + s[1] += s[13] + 0x89cedf01u; + s[15] ^= (s[1] & s[2]); + s[5] -= s[15]; + s[4] ^= s[5]; + s[0] ^= s[4] ^ 0x659daf23u; + s[9] = mh_rotl(s[9] ^ s[0], 31u); + s[4] *= (s[9] | 1u); + s[3] ^= s[4]; + s[2] = mh_rotl(s[2], 25u) + s[3]; + s[1] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[1] *= (s[2] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 18u); + s[2] = mh_rotl(s[2] ^ s[10], 22u); + s[12] = mh_rotl(s[12], 2u) + s[2]; + s[6] ^= s[12] ^ 0xf3967aefu; + s[5] ^= s[6]; + s[11] += (s[5] | s[3]); + s[13] -= s[11]; + s[2] += (s[13] | s[12]); + s[10] ^= s[2]; + s[7] -= s[10]; + s[2] = mh_rotl(s[2] ^ s[7], 1u); + s[1] += s[2]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[10] ^= s[7]; + s[11] ^= (s[10] & s[12]); + s[3] = mh_rotl(s[3] ^ s[11], 22u); + s[12] += s[3]; + s[8] ^= s[12] ^ 0xd1018d15u; + s[6] ^= s[8]; + s[13] = s[13] * 0xad1ff569u + s[6]; + s[9] = s[9] * 0xa7473da7u + s[13]; + s[4] ^= s[9]; + s[2] *= (s[4] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 7u); + s[9] = mh_rotl(s[9] ^ s[7], 2u); + s[14] *= (s[9] | 1u); + s[11] ^= s[14]; + s[6] += s[11] + 0x02da7647u; + s[13] ^= s[6]; + s[12] += s[13]; + s[6] = mh_rotl(s[6], 4u) + s[12]; + s[0] = mh_rotl(s[0], 17u) + s[6]; + s[6] = mh_rotl(s[6] ^ s[0], 16u); + s[5] *= (s[6] | 1u); + s[14] = (s[14] ^ s[5]) * 0x631860bdu; + s[7] ^= s[14] ^ 0xfd80e869u; + s[6] *= (s[7] | 1u); + s[14] = mh_rotl(s[14] ^ s[6], 28u); + s[1] += s[14]; + s[12] -= s[1]; + s[10] = mh_rotl(s[10], 24u) + s[12]; + s[12] ^= s[10] ^ 0x923e2dd8u; + s[6] = (s[6] ^ s[12]) * 0xd1c8662bu; + s[11] = (s[11] ^ s[6]) * 0x7f1579abu; + s[1] *= (s[11] | 1u); + s[12] *= (s[1] | 1u); + s[0] += (s[12] | s[15]); + s[12] ^= (s[0] & s[5]); + s[13] = mh_rotl(s[13], 3u) + s[12]; + s[12] *= (s[13] | 1u); + s[0] += s[12]; + s[8] += s[0] + 0x20b00217u; + s[14] = (s[14] ^ s[8]) * 0xf9d426ffu; + s[2] *= (s[14] | 1u); + s[10] += s[2]; + s[2] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 29u); + s[0] = mh_rotl(s[0] ^ s[14], 8u); + s[8] = (s[8] ^ s[0]) * 0x1108ba07u; + s[14] += s[8]; + s[5] += s[14]; + s[15] += s[5]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x135192c5u; + s[14] += s[5] + 0x4e9e6ad1u; + s[5] += s[14]; + s[7] += s[5]; + s[1] = (s[1] ^ s[7]) * 0x6babe5ddu; + s[10] ^= s[1]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[1] ^= s[2]; + s[6] = mh_rotl(s[6], 15u) + s[1]; + s[12] ^= s[6]; + s[7] *= (s[12] | 1u); + s[8] = mh_rotl(s[8], 16u) + s[7]; + s[3] ^= s[8]; + s[13] += (s[3] | s[0]); + s[10] ^= s[13]; + s[2] ^= s[10]; + s[1] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[1], 1u); + s[15] = (s[15] ^ s[8]) * 0xfa9fbf2du; + s[3] ^= s[15]; + s[11] ^= s[3] ^ 0x545738b5u; + s[12] = mh_rotl(s[12], 26u) + s[11]; + s[1] = mh_rotl(s[1], 7u) + s[12]; + s[11] = mh_rotl(s[11] ^ s[1], 4u); + s[0] = mh_rotl(s[0], 8u) + s[11]; + s[2] ^= s[0] ^ 0xaacb0afeu; + s[9] += s[2]; + s[6] += s[9]; + s[13] ^= s[6] ^ 0x443ac86au; + s[3] += s[13]; + s[6] = mh_rotl(s[6], 12u) + s[3]; + s[9] ^= s[6] ^ 0x8fa27e45u; + s[14] = mh_rotl(s[14] ^ s[9], 15u); + s[4] = mh_rotl(s[4] ^ s[14], 20u); + s[5] += s[4]; + s[6] = mh_rotl(s[6], 12u) + s[5]; + s[15] = (s[15] ^ s[6]) * 0x6fbcddebu; + s[8] -= s[15]; + s[15] += s[8]; + s[4] += s[15]; + s[12] -= s[4]; + s[8] += s[12]; + s[2] += (s[8] | s[6]); + s[6] = (s[6] ^ s[2]) * 0xb3985295u; + s[0] = mh_rotl(s[0] ^ s[6], 27u); + s[4] += s[0] + 0x56dea41du; + s[13] *= (s[4] | 1u); + s[15] -= s[13]; + s[0] += s[15] + 0x3a8c7806u; + s[12] ^= s[0] ^ 0xa154fcc4u; + s[4] = (s[4] ^ s[12]) * 0xef91a6cbu; + s[10] = (s[10] ^ s[4]) * 0xfb043751u; + s[12] += s[10]; + s[9] *= (s[12] | 1u); + s[15] += (s[9] | s[1]); + s[11] = mh_rotl(s[11], 1u) + s[15]; + s[4] = (s[4] ^ s[11]) * 0x1647a845u; + s[2] -= s[4]; + s[14] ^= s[2] ^ 0x6cf9afaeu; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x0b925217u; + s[2] = mh_rotl(s[2] ^ s[9], 6u); + s[12] = (s[12] ^ s[2]) * 0x063f86d7u; + s[1] ^= s[12]; + s[11] += s[1]; + s[4] ^= s[11]; + s[0] ^= (s[4] & s[11]); + s[9] += s[0]; + s[14] = mh_rotl(s[14], 1u) + s[9]; + s[9] ^= s[14]; + s[12] += s[9]; + s[9] = mh_rotl(s[9] ^ s[12], 5u); + s[15] += (s[9] | s[7]); + s[14] += s[15] + 0x720a9418u; + s[0] -= s[14]; + s[3] = (s[3] ^ s[0]) * 0x3b661535u; + s[0] -= s[3]; + s[2] += s[0]; + s[11] = mh_rotl(s[11] ^ s[2], 28u); + s[7] -= s[11]; + s[1] ^= s[7]; + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[14] -= s[2]; + s[0] -= s[14]; + s[10] += s[0]; + s[3] = mh_rotl(s[3] ^ s[10], 5u); + s[1] = mh_rotl(s[1], 15u) + s[3]; + s[13] ^= (s[1] & s[3]); + s[5] += s[13]; + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[11] = s[11] * 0xb072cb67u + s[10]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[0] = mh_rotl(s[0] ^ s[6], 30u); + s[7] = mh_rotl(s[7], 2u) + s[0]; + s[5] = mh_rotl(s[5], 13u) + s[7]; + s[11] = mh_rotl(s[11] ^ s[5], 29u); + s[7] *= (s[11] | 1u); + s[8] ^= (s[7] & s[15]); + s[5] += s[8]; + s[14] = (s[14] ^ s[5]) * 0xadb08c77u; + s[7] = (s[7] ^ s[14]) * 0x9b7a1549u; + s[5] ^= (s[7] & s[9]); + s[9] += s[5]; + s[7] += s[9] + 0x31c29969u; + s[9] ^= s[7]; + s[12] = (s[12] ^ s[9]) * 0x1b53dc25u; + s[14] += s[12]; + s[13] -= s[14]; + s[5] = s[5] * 0x1411b229u + s[13]; + s[12] += (s[5] | s[1]); + s[8] ^= s[12]; + s[6] -= s[8]; + s[5] -= s[6]; + s[15] -= s[5]; + s[9] += s[15]; + s[8] ^= s[9]; + s[5] += s[8]; + s[4] += s[5]; + s[0] = (s[0] ^ s[4]) * 0x54b6241fu; + s[5] ^= s[0]; + s[4] = mh_rotl(s[4], 1u) + s[5]; + s[15] += s[4]; + s[7] = (s[7] ^ s[15]) * 0x65b59741u; + s[11] += s[7]; + s[2] += s[11]; + s[9] += s[2]; + s[0] -= s[9]; + s[5] -= s[0]; + s[9] ^= s[5]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[10] = s[10] * 0xf978f191u + s[14]; + s[12] += s[10]; + s[4] += s[12]; + s[7] ^= s[4]; + s[12] ^= s[7]; + s[10] += (s[12] | s[13]); + s[1] ^= s[10] ^ 0x79536ee2u; + s[15] -= s[1]; + s[13] = (s[13] ^ s[15]) * 0xaaf42111u; + s[11] += s[13] + 0xd935a555u; + s[1] = mh_rotl(s[1], 19u) + s[11]; + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[9] ^= s[13] ^ 0x6c0ea54au; + s[11] ^= s[9]; + s[9] += s[11] + 0x609cd9eau; + s[14] = (s[14] ^ s[9]) * 0xf76d6ffbu; + s[7] = mh_rotl(s[7], 14u) + s[14]; + s[3] = mh_rotl(s[3], 18u) + s[7]; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 1u) + s[7]; + s[9] = (s[9] ^ s[11]) * 0xf3497ec7u; + s[0] -= s[9]; + s[12] += s[0] + 0xfc1c2a19u; + s[14] += s[12]; + s[12] += s[14]; + s[0] = mh_rotl(s[0], 19u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[0], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 12u); + s[7] = mh_rotl(s[7], 15u) + s[9]; + s[6] += s[7]; + s[0] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[0], 25u); + s[5] += s[7]; + s[13] = (s[13] ^ s[5]) * 0x103550c1u; + s[10] += s[13]; + s[12] -= s[10]; + s[10] += (s[12] | s[0]); + s[12] += (s[10] | s[1]); + s[5] ^= s[12]; + s[2] ^= s[5]; + s[3] ^= s[2] ^ 0x2e047eb3u; + s[5] += s[3] + 0xe97cb0afu; + s[10] ^= s[5] ^ 0x4455829bu; + s[8] ^= s[10]; + s[9] = s[9] * 0xe48b6cf7u + s[8]; + s[10] = mh_rotl(s[10], 11u) + s[9]; + s[14] -= s[10]; + s[4] += s[14]; + s[1] += (s[4] | s[2]); + s[12] *= (s[1] | 1u); + s[15] -= s[12]; + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[13] = mh_rotl(s[13], 30u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[13], 3u); + s[10] += s[1] + 0x2b88f231u; + s[3] ^= s[10]; + s[14] = mh_rotl(s[14], 16u) + s[3]; + s[2] ^= s[14]; + s[0] = mh_rotl(s[0], 24u) + s[2]; + s[6] ^= s[0]; + s[7] = s[7] * 0xc8b02c1fu + s[6]; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[1] ^= s[15]; + s[2] ^= s[1]; + s[13] += (s[2] | s[4]); + s[4] = mh_rotl(s[4], 25u) + s[13]; + s[1] *= (s[4] | 1u); + s[8] += s[1] + 0x170391fdu; + s[7] -= s[8]; + s[6] += s[7] + 0x428e4c84u; + s[15] += s[6]; + s[10] += (s[15] | s[13]); + s[7] = mh_rotl(s[7], 17u) + s[10]; + s[0] *= (s[7] | 1u); + s[13] *= (s[0] | 1u); + s[6] ^= s[13]; + s[14] *= (s[6] | 1u); + s[0] += s[14] + 0x10c22a2du; + s[9] = (s[9] ^ s[0]) * 0xaeee5b5fu; + s[5] ^= (s[9] & s[6]); + s[12] += s[5] + 0xaa190509u; + s[15] = mh_rotl(s[15], 23u) + s[12]; + s[6] = mh_rotl(s[6], 29u) + s[15]; + s[4] -= s[6]; + s[1] ^= s[4]; + s[10] += s[1]; + s[3] += s[10] + 0xcb02e2f1u; + s[11] += s[3]; + s[4] ^= s[11]; + s[8] ^= s[4]; + s[10] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[10]; + s[10] = s[10] * 0x385128c9u + s[9]; + s[13] += (s[10] | s[1]); + s[15] = mh_rotl(s[15] ^ s[13], 4u); + s[1] = mh_rotl(s[1], 20u) + s[15]; + s[14] ^= (s[1] & s[6]); + s[8] ^= s[14]; + s[0] = (s[0] ^ s[8]) * 0x5e3978c9u; + s[2] ^= s[0]; + s[11] = mh_rotl(s[11], 18u) + s[2]; + s[8] = (s[8] ^ s[11]) * 0xfc3d1753u; + s[10] += s[8]; + s[2] ^= s[10]; + s[0] += s[2]; + s[1] *= (s[0] | 1u); + s[4] += s[1]; + s[1] ^= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 8u); + s[6] = (s[6] ^ s[3]) * 0xb74b7bbbu; + s[8] *= (s[6] | 1u); + s[11] -= s[8]; + s[7] ^= (s[11] & s[9]); + s[11] ^= s[7]; + s[5] += (s[11] | s[15]); + s[1] = s[1] * 0x6f397ee5u + s[5]; + s[2] ^= s[1]; + s[6] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[6], 10u); + s[5] = (s[5] ^ s[3]) * 0xf3e5cfadu; + s[8] += s[5]; + s[7] -= s[8]; + s[2] += s[7]; + s[14] = mh_rotl(s[14], 25u) + s[2]; + s[1] *= (s[14] | 1u); + s[3] = s[3] * 0x02b399cbu + s[1]; + s[2] ^= (s[3] & s[10]); + s[12] = mh_rotl(s[12] ^ s[2], 3u); + s[14] *= (s[12] | 1u); + s[0] = (s[0] ^ s[14]) * 0xdce3e741u; + s[1] = mh_rotl(s[1], 7u) + s[0]; + s[7] ^= s[1]; + s[10] *= (s[7] | 1u); + s[5] = mh_rotl(s[5], 9u) + s[10]; + s[1] *= (s[5] | 1u); + s[4] ^= s[1] ^ 0x385d5cd4u; + s[7] += s[4]; + s[15] ^= s[7]; + s[13] = mh_rotl(s[13], 22u) + s[15]; + s[12] = (s[12] ^ s[13]) * 0x817a9347u; + s[7] ^= (s[12] & s[5]); + s[9] ^= s[7]; + s[12] = mh_rotl(s[12], 8u) + s[9]; + s[5] += s[12]; + s[9] *= (s[5] | 1u); + s[15] -= s[9]; + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[8] = s[8] * 0x97d936ebu + s[13]; + s[10] += s[8]; + s[14] += s[10]; + s[6] += s[14]; + s[0] ^= s[6]; + s[11] -= s[0]; + s[1] ^= (s[11] & s[14]); + s[2] ^= s[1]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[5] ^= s[11]; + s[9] = (s[9] ^ s[5]) * 0x684dd78fu; + s[14] = s[14] * 0xcce53009u + s[9]; + s[8] = mh_rotl(s[8], 4u) + s[14]; + s[3] -= s[8]; + s[12] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[12], 22u); + s[12] += s[15] + 0x25d2e612u; + s[8] = mh_rotl(s[8] ^ s[12], 10u); + s[4] += s[8]; + s[10] = mh_rotl(s[10] ^ s[4], 9u); + s[0] += (s[10] | s[9]); + s[2] ^= s[0]; + s[10] = mh_rotl(s[10], 3u) + s[2]; + s[14] += s[10]; + s[5] ^= s[14]; + s[9] *= (s[5] | 1u); + s[13] ^= s[9] ^ 0xd2f78081u; + s[14] ^= s[13]; + s[8] += s[14]; + s[5] += s[8]; + s[15] = (s[15] ^ s[5]) * 0xb4af8bb9u; + s[5] += s[15] + 0xd497de31u; + s[13] ^= s[5]; + s[14] += (s[13] | s[4]); + s[12] = mh_rotl(s[12], 19u) + s[14]; + s[1] = (s[1] ^ s[12]) * 0x80736b3fu; + s[0] += s[1]; + s[6] -= s[0]; + s[5] *= (s[6] | 1u); + s[13] -= s[5]; + s[7] = s[7] * 0x4b586d65u + s[13]; + s[9] = mh_rotl(s[9] ^ s[7], 9u); + s[1] ^= s[9]; + s[15] *= (s[1] | 1u); + s[13] -= s[15]; + s[4] = (s[4] ^ s[13]) * 0x0bf0c72bu; + s[15] += s[4]; + s[9] ^= s[15] ^ 0x1f3d3b6fu; + s[11] += s[9]; + s[6] += (s[11] | s[5]); + s[15] += (s[6] | s[9]); + s[7] = (s[7] ^ s[15]) * 0x2d1b2827u; + s[1] = mh_rotl(s[1], 4u) + s[7]; + s[10] += s[1] + 0x19394fe5u; + s[7] += s[10] + 0x0df93d70u; + s[9] -= s[7]; + s[1] = mh_rotl(s[1], 13u) + s[9]; + s[5] += s[1]; + s[3] += s[5] + 0x528c96f9u; + s[9] *= (s[3] | 1u); + s[11] += s[9]; + s[1] += s[11]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_2(uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 11u); + s[9] = (s[9] ^ s[3]) * 0x926a6d6du; + s[10] *= (s[9] | 1u); + s[6] = (s[6] ^ s[10]) * 0x16fa529bu; + s[14] += s[6] + 0x8bf7717du; + s[15] = s[15] * 0x838a9b83u + s[14]; + s[13] += (s[15] | s[1]); + s[7] ^= s[13] ^ 0x1c4ee851u; + s[12] += s[7] + 0x2de89a80u; + s[9] = (s[9] ^ s[12]) * 0xc6ccd52bu; + s[12] -= s[9]; + s[8] ^= s[12]; + s[6] += s[8]; + s[12] -= s[6]; + s[15] = mh_rotl(s[15], 6u) + s[12]; + s[3] += s[15]; + s[14] += s[3]; + s[3] = s[3] * 0x86602d0du + s[14]; + s[12] = mh_rotl(s[12] ^ s[3], 31u); + s[0] ^= s[12]; + s[8] ^= s[0]; + s[12] -= s[8]; + s[11] += s[12]; + s[15] = (s[15] ^ s[11]) * 0xcd53cb6bu; + s[0] = (s[0] ^ s[15]) * 0x2e7b800du; + s[3] *= (s[0] | 1u); + s[4] += s[3]; + s[7] = s[7] * 0xf492cc8du + s[4]; + s[13] = mh_rotl(s[13], 6u) + s[7]; + s[8] -= s[13]; + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[6] -= s[15]; + s[1] += s[6]; + s[15] -= s[1]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x6d79f9b3u; + s[10] = mh_rotl(s[10] ^ s[5], 29u); + s[8] ^= s[10] ^ 0xd22b10f3u; + s[9] = (s[9] ^ s[8]) * 0xc87cfcd7u; + s[2] = mh_rotl(s[2], 5u) + s[9]; + s[11] *= (s[2] | 1u); + s[5] ^= s[11]; + s[7] += s[5]; + s[14] += s[7] + 0xac6f941eu; + s[5] += s[14]; + s[14] += s[5]; + s[13] ^= s[14]; + s[6] += s[13]; + s[14] -= s[6]; + s[10] = mh_rotl(s[10], 15u) + s[14]; + s[1] ^= s[10]; + s[5] = (s[5] ^ s[1]) * 0x7a531a39u; + s[15] = s[15] * 0xe6bff90bu + s[5]; + s[7] ^= s[15]; + s[4] += s[7]; + s[8] -= s[4]; + s[14] = (s[14] ^ s[8]) * 0xcb91e92bu; + s[2] -= s[14]; + s[14] = mh_rotl(s[14], 26u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[10] += s[4]; + s[1] = (s[1] ^ s[10]) * 0x2f2e1573u; + s[5] += s[1]; + s[7] += s[5]; + s[1] = mh_rotl(s[1] ^ s[7], 31u); + s[14] = mh_rotl(s[14] ^ s[1], 9u); + s[6] -= s[14]; + s[14] ^= s[6]; + s[1] += s[14]; + s[15] = (s[15] ^ s[1]) * 0xf122f41du; + s[1] -= s[15]; + s[5] += (s[1] | s[8]); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[1] = s[1] * 0x24839c9du + s[13]; + s[10] += s[1] + 0x6e377732u; + s[9] ^= s[10]; + s[10] += s[9] + 0x9c8be86fu; + s[4] = mh_rotl(s[4] ^ s[10], 18u); + s[15] = s[15] * 0x57f74b09u + s[4]; + s[0] = s[0] * 0x4777892du + s[15]; + s[15] *= (s[0] | 1u); + s[8] -= s[15]; + s[14] -= s[8]; + s[6] ^= s[14]; + s[11] += s[6]; + s[9] ^= s[11]; + s[4] += s[9] + 0x4e322e4bu; + s[7] = mh_rotl(s[7] ^ s[4], 5u); + s[15] += (s[7] | s[0]); + s[10] -= s[15]; + s[9] = mh_rotl(s[9] ^ s[10], 8u); + s[12] = mh_rotl(s[12] ^ s[9], 26u); + s[10] += s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[12] ^= s[13]; + s[1] ^= s[12] ^ 0x32411651u; + s[9] += s[1]; + s[1] *= (s[9] | 1u); + s[11] += s[1]; + s[12] = mh_rotl(s[12] ^ s[11], 11u); + s[15] = mh_rotl(s[15] ^ s[12], 16u); + s[11] ^= s[15]; + s[9] += s[11]; + s[13] += (s[9] | s[3]); + s[7] ^= (s[13] & s[1]); + s[0] ^= (s[7] & s[11]); + s[6] = mh_rotl(s[6], 25u) + s[0]; + s[7] = mh_rotl(s[7] ^ s[6], 18u); + s[2] -= s[7]; + s[14] ^= s[2] ^ 0xd6cffa6eu; + s[10] += s[14] + 0xdb62a314u; + s[2] += s[10]; + s[14] = s[14] * 0x2f015667u + s[2]; + s[3] *= (s[14] | 1u); + s[0] ^= s[3]; + s[8] *= (s[0] | 1u); + s[12] ^= s[8]; + s[9] = mh_rotl(s[9], 11u) + s[12]; + s[4] ^= s[9]; + s[15] ^= s[4]; + s[3] = mh_rotl(s[3], 5u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[14] = (s[14] ^ s[6]) * 0x3392ff1fu; + s[9] -= s[14]; + s[14] *= (s[9] | 1u); + s[9] -= s[14]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[10] = (s[10] ^ s[0]) * 0x86b32d1du; + s[7] *= (s[10] | 1u); + s[3] = s[3] * 0xcf4d9bb3u + s[7]; + s[8] *= (s[3] | 1u); + s[7] -= s[8]; + s[2] = mh_rotl(s[2], 31u) + s[7]; + s[6] ^= s[2]; + s[7] = s[7] * 0xf9e43535u + s[6]; + s[5] ^= s[7]; + s[4] = mh_rotl(s[4], 10u) + s[5]; + s[2] *= (s[4] | 1u); + s[14] = (s[14] ^ s[2]) * 0xd801e903u; + s[11] = s[11] * 0x1140fbe1u + s[14]; + s[12] = mh_rotl(s[12], 6u) + s[11]; + s[5] = s[5] * 0x974088edu + s[12]; + s[0] -= s[5]; + s[14] -= s[0]; + s[0] += (s[14] | s[4]); + s[6] -= s[0]; + s[1] *= (s[6] | 1u); + s[10] = s[10] * 0x78b0e1a7u + s[1]; + s[13] ^= s[10]; + s[0] -= s[13]; + s[7] += s[0]; + s[0] ^= s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 23u); + s[9] -= s[12]; + s[5] += (s[9] | s[6]); + s[2] += s[5]; + s[8] = s[8] * 0x7b42b5f1u + s[2]; + s[4] ^= s[8]; + s[15] = (s[15] ^ s[4]) * 0x2e28033bu; + s[12] += s[15]; + s[9] = mh_rotl(s[9] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 22u) + s[9]; + s[0] ^= s[8]; + s[10] *= (s[0] | 1u); + s[1] *= (s[10] | 1u); + s[2] ^= s[1]; + s[3] ^= (s[2] & s[12]); + s[4] *= (s[3] | 1u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[0] += s[11]; + s[15] += (s[0] | s[7]); + s[13] += s[15]; + s[0] ^= s[13]; + s[12] += s[0]; + s[10] += s[12] + 0x9646135eu; + s[0] += s[10]; + s[10] ^= (s[0] & s[2]); + s[4] += s[10] + 0x82a90265u; + s[15] ^= s[4]; + s[5] = (s[5] ^ s[15]) * 0x0ab18765u; + s[1] ^= s[5]; + s[3] = (s[3] ^ s[1]) * 0x58bdae6fu; + s[14] += (s[3] | s[2]); + s[13] += s[14] + 0xe01e7581u; + s[0] = (s[0] ^ s[13]) * 0x49941f01u; + s[10] = s[10] * 0xb246126bu + s[0]; + s[3] ^= s[10] ^ 0xe938f5d3u; + s[8] += s[3]; + s[14] += (s[8] | s[0]); + s[9] += s[14]; + s[15] ^= s[9] ^ 0xd652447bu; + s[10] ^= s[15] ^ 0xbfa14965u; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[11] ^= s[6] ^ 0x37d98687u; + s[6] = (s[6] ^ s[11]) * 0x4e553b0bu; + s[12] = mh_rotl(s[12], 17u) + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[10] ^= s[4]; + s[0] *= (s[10] | 1u); + s[12] ^= s[0]; + s[6] += (s[12] | s[14]); + s[12] = mh_rotl(s[12] ^ s[6], 16u); + s[10] ^= s[12]; + s[11] += s[10] + 0x936f0354u; + s[10] += s[11] + 0x1771251du; + s[1] = mh_rotl(s[1] ^ s[10], 13u); + s[4] = mh_rotl(s[4] ^ s[1], 18u); + s[14] = (s[14] ^ s[4]) * 0xd997b3a1u; + s[4] *= (s[14] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[4] += s[11]; + s[11] += s[4]; + s[10] = mh_rotl(s[10], 2u) + s[11]; + s[3] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[3], 1u); + s[15] ^= s[11] ^ 0x31d420ebu; + s[12] += s[15]; + s[6] = s[6] * 0xef7ed339u + s[12]; + s[5] += s[6]; + s[6] ^= s[5]; + s[7] += s[6]; + s[1] *= (s[7] | 1u); + s[13] ^= s[1]; + s[8] += s[13]; + s[0] ^= s[8]; + s[10] = s[10] * 0x2dc4f3ffu + s[0]; + s[4] ^= s[10]; + s[15] -= s[4]; + s[4] -= s[15]; + s[12] += s[4]; + s[0] ^= s[12] ^ 0xc68cf398u; + s[10] = s[10] * 0x8d7270d1u + s[0]; + s[1] ^= s[10] ^ 0x792d21d6u; + s[15] ^= s[1]; + s[3] = mh_rotl(s[3], 31u) + s[15]; + s[12] *= (s[3] | 1u); + s[0] ^= s[12] ^ 0x44570ae7u; + s[8] += s[0]; + s[5] ^= (s[8] & s[10]); + s[14] -= s[5]; + s[6] += s[14]; + s[8] += s[6] + 0xa3eeb141u; + s[11] += s[8]; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[14] -= s[13]; + s[7] += (s[14] | s[0]); + s[8] += (s[7] | s[0]); + s[3] *= (s[8] | 1u); + s[4] = s[4] * 0xb0e65813u + s[3]; + s[14] += s[4]; + s[4] -= s[14]; + s[1] += (s[4] | s[6]); + s[15] ^= s[1]; + s[3] = (s[3] ^ s[15]) * 0x74f161a1u; + s[10] += s[3] + 0xa6f7f269u; + s[0] += (s[10] | s[13]); + s[2] = mh_rotl(s[2], 21u) + s[0]; + s[9] ^= (s[2] & s[12]); + s[11] ^= s[9]; + s[9] += s[11]; + s[8] *= (s[9] | 1u); + s[5] += (s[8] | s[1]); + s[7] += s[5]; + s[11] += s[7] + 0xe1fb4104u; + s[14] ^= (s[11] & s[6]); + s[15] ^= s[14]; + s[11] ^= (s[15] & s[6]); + s[7] += s[11]; + s[9] = mh_rotl(s[9], 12u) + s[7]; + s[0] *= (s[9] | 1u); + s[4] += s[0]; + s[0] = (s[0] ^ s[4]) * 0x3458b4b9u; + s[15] *= (s[0] | 1u); + s[12] = mh_rotl(s[12], 5u) + s[15]; + s[11] -= s[12]; + s[7] = s[7] * 0xdf6299e7u + s[11]; + s[15] = mh_rotl(s[15], 17u) + s[7]; + s[8] = mh_rotl(s[8] ^ s[15], 25u); + s[1] += (s[8] | s[7]); + s[7] = s[7] * 0xcde4ccd9u + s[1]; + s[4] ^= (s[7] & s[3]); + s[11] ^= s[4]; + s[15] += s[11] + 0x93b32499u; + s[8] = s[8] * 0x2c187aebu + s[15]; + s[12] += s[8]; + s[15] += s[12] + 0x8975fca8u; + s[8] ^= s[15] ^ 0xa690273au; + s[7] += s[8]; + s[2] *= (s[7] | 1u); + s[15] += s[2]; + s[12] ^= (s[15] & s[0]); + s[13] *= (s[12] | 1u); + s[9] ^= (s[13] & s[15]); + s[7] = mh_rotl(s[7] ^ s[9], 19u); + s[9] += s[7] + 0x68201cc4u; + s[11] ^= s[9] ^ 0x8ce52309u; + s[8] ^= s[11]; + s[2] = s[2] * 0xcd1aa62fu + s[8]; + s[4] ^= s[2]; + s[11] = mh_rotl(s[11], 14u) + s[4]; + s[12] = (s[12] ^ s[11]) * 0x5225e677u; + s[7] ^= s[12] ^ 0x249730c1u; + s[8] += s[7] + 0x648c79c7u; + s[9] = mh_rotl(s[9], 23u) + s[8]; + s[6] ^= s[9] ^ 0x63921b24u; + s[8] = (s[8] ^ s[6]) * 0xbaff00d3u; + s[2] ^= s[8]; + s[4] *= (s[2] | 1u); + s[8] = (s[8] ^ s[4]) * 0xcaf43cebu; + s[6] += s[8]; + s[8] = (s[8] ^ s[6]) * 0x4fa73429u; + s[0] = (s[0] ^ s[8]) * 0xd09399a5u; + s[8] += s[0]; + s[14] = (s[14] ^ s[8]) * 0xffb37081u; + s[13] ^= s[14]; + s[4] += s[13]; + s[8] ^= s[4]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] = (s[14] ^ s[7]) * 0x412aee4du; + s[10] -= s[14]; + s[1] ^= s[10]; + s[4] ^= s[1] ^ 0x8d36a1b0u; + s[14] = (s[14] ^ s[4]) * 0xb17290dfu; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[2] += s[15]; + s[11] = mh_rotl(s[11], 10u) + s[2]; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0x2be56ccfu; + s[2] = s[2] * 0x5290c25du + s[12]; + s[1] += s[2]; + s[2] += (s[1] | s[8]); + s[6] -= s[2]; + s[10] += s[6]; + s[13] += s[10] + 0x6bcc329cu; + s[2] *= (s[13] | 1u); + s[1] = (s[1] ^ s[2]) * 0xd95e0a65u; + s[12] = (s[12] ^ s[1]) * 0x5598f745u; + s[9] += s[12]; + s[15] = mh_rotl(s[15] ^ s[9], 19u); + s[13] += s[15]; + s[6] += s[13] + 0xe9004eeau; + s[15] ^= s[6]; + s[4] -= s[15]; + s[3] += s[4]; + s[8] ^= s[3] ^ 0x118412a8u; + s[2] = s[2] * 0x7ace7595u + s[8]; + s[3] *= (s[2] | 1u); + s[7] = (s[7] ^ s[3]) * 0xefdf99afu; + s[1] ^= s[7]; + s[11] *= (s[1] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 9u); + s[0] += s[13]; + s[7] *= (s[0] | 1u); + s[1] ^= s[7]; + s[10] ^= (s[1] & s[6]); + s[1] ^= s[10] ^ 0x93602932u; + s[2] -= s[1]; + s[12] ^= s[2]; + s[3] = mh_rotl(s[3], 1u) + s[12]; + s[7] ^= s[3]; + s[14] ^= s[7] ^ 0x237f8e1au; + s[0] = mh_rotl(s[0] ^ s[14], 2u); + s[1] *= (s[0] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 2u); + s[9] = mh_rotl(s[9] ^ s[4], 16u); + s[7] = s[7] * 0xf073bd6du + s[9]; + s[10] = s[10] * 0x3a609689u + s[7]; + s[12] ^= s[10]; + s[3] ^= s[12] ^ 0x9db3a4beu; + s[14] = mh_rotl(s[14], 1u) + s[3]; + s[6] += (s[14] | s[5]); + s[1] += s[6] + 0x1aae9d69u; + s[5] = mh_rotl(s[5] ^ s[1], 29u); + s[14] ^= s[5]; + s[8] += s[14]; + s[2] ^= (s[8] & s[0]); + s[11] = (s[11] ^ s[2]) * 0xf0879cf7u; + s[1] = mh_rotl(s[1] ^ s[11], 2u); + s[6] ^= s[1]; + s[15] -= s[6]; + s[7] -= s[15]; + s[3] += s[7]; + s[2] -= s[3]; + s[10] -= s[2]; + s[11] = mh_rotl(s[11], 3u) + s[10]; + s[3] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= (s[5] & s[14]); + s[3] ^= s[0]; + s[0] = s[0] * 0xd6807e45u + s[3]; + s[10] += s[0]; + s[4] *= (s[10] | 1u); + s[2] ^= (s[4] & s[5]); + s[9] = mh_rotl(s[9], 3u) + s[2]; + s[15] = s[15] * 0x946b5521u + s[9]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] ^= s[13]; + s[4] += (s[5] | s[15]); + s[2] += s[4]; + s[12] += s[2]; + s[3] *= (s[12] | 1u); + s[6] += s[3]; + s[12] = s[12] * 0xb6b83b35u + s[6]; + s[6] -= s[12]; + s[1] ^= s[6]; + s[4] = s[4] * 0x6b8de9c3u + s[1]; + s[15] += s[4]; + s[6] -= s[15]; + s[5] ^= (s[6] & s[7]); + s[14] += s[5]; + s[7] = (s[7] ^ s[14]) * 0x5fe38793u; + s[1] += s[7]; + s[15] = (s[15] ^ s[1]) * 0x0c3d59fbu; + s[2] ^= s[15] ^ 0xa6e76c52u; + s[8] ^= s[2]; + s[15] += s[8]; + s[2] = mh_rotl(s[2], 18u) + s[15]; + s[7] ^= s[2]; + s[9] += (s[7] | s[5]); + s[0] ^= (s[9] & s[6]); + s[14] *= (s[0] | 1u); + s[7] += (s[14] | s[1]); + s[8] ^= s[7]; + s[1] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 21u); + s[1] = (s[1] ^ s[4]) * 0xaa342e53u; + s[11] -= s[1]; + s[13] ^= s[11] ^ 0xcbbd4eceu; + s[5] -= s[13]; + s[11] += s[5]; + s[14] ^= s[11] ^ 0xb5db59d3u; + s[5] ^= s[14]; + s[10] = mh_rotl(s[10] ^ s[5], 23u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[6] *= (s[8] | 1u); + s[3] ^= s[6]; + s[7] += s[3] + 0x00658f95u; + s[0] ^= s[7] ^ 0x2e56fa3eu; + s[2] ^= s[0] ^ 0xec5293e3u; + s[7] = mh_rotl(s[7] ^ s[2], 21u); + s[14] *= (s[7] | 1u); + s[11] *= (s[14] | 1u); + s[0] *= (s[11] | 1u); + s[4] = (s[4] ^ s[0]) * 0x2fb41f81u; + s[2] += s[4]; + s[0] += s[2]; + s[6] += s[0]; + s[8] = mh_rotl(s[8], 10u) + s[6]; + s[2] += s[8]; + s[5] ^= s[2] ^ 0xa8ea4a52u; + s[10] ^= (s[5] & s[1]); + s[0] += s[10] + 0xadbdf4b0u; + s[8] ^= s[0]; + s[5] ^= s[8]; + s[10] = s[10] * 0x4142cee3u + s[5]; + s[12] += s[10] + 0xf3bf2694u; + s[10] *= (s[12] | 1u); + s[9] += s[10] + 0x087246d1u; + s[4] = mh_rotl(s[4], 24u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[4], 12u); + s[3] += s[0] + 0xac907341u; + s[12] = mh_rotl(s[12] ^ s[3], 8u); + s[14] -= s[12]; + s[15] -= s[14]; + s[5] += s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 20u); + s[7] = s[7] * 0xcb052cc1u + s[9]; + s[4] += s[7]; + s[0] = mh_rotl(s[0], 21u) + s[4]; + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] += s[6]; + s[15] -= s[2]; + s[9] = mh_rotl(s[9] ^ s[15], 22u); + s[8] ^= s[9]; + s[6] += s[8] + 0xae67ff98u; + s[0] -= s[6]; + s[2] *= (s[0] | 1u); + s[12] += s[2]; + s[15] ^= s[12]; + s[0] += s[15]; + s[6] ^= s[0]; + s[3] = mh_rotl(s[3] ^ s[6], 5u); + s[1] += s[3]; + s[6] ^= s[1]; + s[12] += (s[6] | s[8]); + s[3] ^= s[12]; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[8] ^= s[2]; + s[1] += s[8]; + s[6] += (s[1] | s[15]); + s[1] += s[6] + 0x2aa7ff78u; + s[11] += s[1]; + s[14] -= s[11]; + s[3] -= s[14]; + s[9] -= s[3]; + s[6] += s[9]; + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[8] += s[12]; + s[0] = mh_rotl(s[0] ^ s[8], 22u); + s[4] ^= s[0]; + s[8] = s[8] * 0x1e56eb41u + s[4]; + s[11] += s[8]; + s[6] += s[11]; + s[13] *= (s[6] | 1u); + s[2] *= (s[13] | 1u); + s[0] += s[2] + 0x43af110cu; + s[5] = s[5] * 0xa3d7a065u + s[0]; + s[14] *= (s[5] | 1u); + s[4] += s[14]; + s[11] *= (s[4] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[11]; + s[1] += (s[5] | s[9]); + s[5] += s[1]; + s[1] ^= s[5]; + s[9] += s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[10] += s[7]; + s[13] += s[10]; + s[8] = (s[8] ^ s[13]) * 0xfc8aade7u; + s[12] ^= s[8] ^ 0x47e9555au; + s[3] -= s[12]; + s[6] ^= s[3]; + s[11] ^= s[6]; + s[9] -= s[11]; + s[3] = mh_rotl(s[3], 29u) + s[9]; + s[8] += (s[3] | s[11]); + s[12] = mh_rotl(s[12], 13u) + s[8]; + s[4] = mh_rotl(s[4], 8u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0xe569b7fdu; + s[14] ^= (s[7] & s[11]); + s[8] -= s[14]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 3u) + s[14]; + s[3] += s[7]; + s[10] *= (s[3] | 1u); + s[8] = (s[8] ^ s[10]) * 0xc72f74bdu; + s[13] ^= s[8]; + s[4] = mh_rotl(s[4], 8u) + s[13]; + s[10] ^= s[4]; + s[11] = mh_rotl(s[11] ^ s[10], 10u); + s[2] ^= s[11] ^ 0x89747ffeu; + s[7] ^= s[2]; + s[5] -= s[7]; + s[13] -= s[5]; + s[0] = (s[0] ^ s[13]) * 0xf48e8c1du; + s[14] = mh_rotl(s[14] ^ s[0], 15u); + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[13] += s[7]; + s[0] = s[0] * 0x44c6b0f1u + s[13]; + s[3] ^= s[0]; + s[15] += s[3] + 0xb264b481u; + s[12] ^= s[15]; + s[7] += (s[12] | s[13]); + s[0] += s[7]; + s[9] -= s[0]; + s[13] = s[13] * 0x720cd467u + s[9]; + s[11] ^= s[13] ^ 0xa96dd9a0u; + s[5] -= s[11]; + s[15] += (s[5] | s[11]); + s[6] += s[15]; + s[7] += s[6]; + s[8] = s[8] * 0xbeaaa467u + s[7]; + s[7] ^= s[8]; + s[11] = (s[11] ^ s[7]) * 0x30405013u; + s[1] ^= s[11]; + s[0] ^= s[1] ^ 0xe46c8953u; + s[4] = (s[4] ^ s[0]) * 0x3beff773u; + s[3] = mh_rotl(s[3], 20u) + s[4]; + s[4] ^= s[3]; + s[11] = mh_rotl(s[11], 30u) + s[4]; + s[7] += (s[11] | s[3]); + s[11] ^= s[7]; + s[13] ^= s[11]; + s[1] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 17u) + s[1]; + s[15] ^= s[0] ^ 0xbb0e1b77u; + s[9] = mh_rotl(s[9] ^ s[15], 30u); + s[0] *= (s[9] | 1u); + s[3] += s[0]; + s[0] = (s[0] ^ s[3]) * 0x28a1e7fbu; + s[11] += s[0] + 0x3f20929bu; + s[14] += s[11] + 0x9721b746u; + s[3] = (s[3] ^ s[14]) * 0xc929f765u; + s[14] *= (s[3] | 1u); + s[10] -= s[14]; + s[3] = (s[3] ^ s[10]) * 0x83ea7953u; + s[14] ^= s[3]; + s[4] += s[14]; + s[11] ^= s[4] ^ 0x9f1876eeu; + s[5] += s[11]; + s[6] = (s[6] ^ s[5]) * 0x3e059b67u; + s[0] *= (s[6] | 1u); + s[9] ^= s[0]; + s[3] *= (s[9] | 1u); + s[4] += s[3]; + s[6] += s[4]; + s[14] = (s[14] ^ s[6]) * 0xe8ebef0fu; + s[12] = mh_rotl(s[12], 31u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[0] = mh_rotl(s[0], 25u) + s[3]; + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0xdd9f45b0u; + s[1] *= (s[0] | 1u); + s[7] = (s[7] ^ s[1]) * 0xd7937423u; + s[9] += s[7]; + s[14] ^= s[9]; + s[9] += (s[14] | s[4]); + s[14] ^= s[9]; + s[12] *= (s[14] | 1u); + s[11] = (s[11] ^ s[12]) * 0x6f00822du; + s[15] += s[11] + 0x90a645c9u; + s[11] = s[11] * 0xd4e49bc3u + s[15]; + s[9] += s[11]; + s[2] = (s[2] ^ s[9]) * 0xcd756085u; + s[5] -= s[2]; + s[1] ^= s[5]; + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[13] ^= s[7] ^ 0x259d1187u; + s[9] *= (s[13] | 1u); + s[7] ^= s[9]; + s[9] -= s[7]; + s[4] ^= s[9]; + s[14] *= (s[4] | 1u); + s[8] ^= s[14]; + s[15] = s[15] * 0x975ddaebu + s[8]; + s[9] += (s[15] | s[13]); + s[6] ^= s[9] ^ 0x318e194eu; + s[2] = (s[2] ^ s[6]) * 0xb0a2842fu; + s[5] = (s[5] ^ s[2]) * 0xa9a8585du; + s[7] = (s[7] ^ s[5]) * 0x3e818aa9u; + s[3] += s[7] + 0x60f54e95u; + s[7] += s[3] + 0xb6fd49a0u; + s[5] += s[7]; + s[12] = mh_rotl(s[12] ^ s[5], 1u); + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 2u) + s[3]; + s[2] ^= s[7]; + s[7] ^= s[2] ^ 0xa06175a5u; + s[15] -= s[7]; + s[2] += s[15] + 0x32c7f73fu; + s[10] -= s[2]; + s[6] -= s[10]; + s[11] += s[6] + 0x847befcdu; + s[8] *= (s[11] | 1u); + s[10] ^= s[8] ^ 0x80bc6c43u; + s[4] = (s[4] ^ s[10]) * 0xeec1e72fu; + s[14] = mh_rotl(s[14], 15u) + s[4]; + s[2] *= (s[14] | 1u); + s[7] += s[2] + 0x4f95cda0u; + s[12] *= (s[7] | 1u); + s[15] = s[15] * 0xc0c37a91u + s[12]; + s[12] *= (s[15] | 1u); + s[1] += s[12] + 0x574e25f1u; + s[9] += s[1]; + s[12] ^= s[9] ^ 0xbee6ae4cu; + s[2] = mh_rotl(s[2], 2u) + s[12]; + s[7] ^= s[2] ^ 0x2d8d95fcu; + s[1] = mh_rotl(s[1], 12u) + s[7]; + s[12] = s[12] * 0x459875c5u + s[1]; + s[7] += s[12]; + s[2] = mh_rotl(s[2] ^ s[7], 13u); + s[4] += s[2]; + s[14] ^= (s[4] & s[11]); + s[8] ^= s[14] ^ 0xd2d101c3u; + s[7] += s[8] + 0xf7c60fa6u; + s[0] = mh_rotl(s[0] ^ s[7], 20u); + s[9] ^= s[0]; + s[5] += s[9]; + s[1] ^= s[5] ^ 0x09ae80bdu; + s[9] ^= (s[1] & s[8]); + s[6] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[6]; + s[10] += s[1]; + s[14] += s[10]; + s[12] ^= s[14]; + s[10] -= s[12]; + s[6] += s[10]; + s[7] += s[6]; + s[5] += (s[7] | s[15]); + s[14] -= s[5]; + s[13] += (s[14] | s[12]); + s[2] ^= s[13]; + s[10] = mh_rotl(s[10] ^ s[2], 25u); + s[0] = mh_rotl(s[0] ^ s[10], 9u); + s[14] = (s[14] ^ s[0]) * 0xf271e2f9u; + s[0] = mh_rotl(s[0], 30u) + s[14]; + s[7] = (s[7] ^ s[0]) * 0xbcb788a1u; + s[11] = s[11] * 0xc98f1127u + s[7]; + s[15] ^= s[11]; + s[11] = (s[11] ^ s[15]) * 0x224f625fu; + s[14] = mh_rotl(s[14] ^ s[11], 13u); + s[11] += s[14]; + s[2] = mh_rotl(s[2] ^ s[11], 22u); + s[9] ^= s[2] ^ 0x82adb28eu; + s[8] += s[9]; + s[6] += s[8]; + s[15] += s[6]; + s[14] = s[14] * 0xfca2b387u + s[15]; + s[12] += s[14]; + s[6] += (s[12] | s[8]); + s[5] *= (s[6] | 1u); + s[1] ^= s[5]; + s[3] += s[1] + 0x1f147bc4u; + s[10] = mh_rotl(s[10], 24u) + s[3]; + s[6] += s[10] + 0x7186bc62u; + s[11] = mh_rotl(s[11], 2u) + s[6]; + s[10] ^= (s[11] & s[6]); + s[2] += (s[10] | s[15]); + s[9] = mh_rotl(s[9] ^ s[2], 16u); + s[6] ^= s[9]; + s[13] ^= (s[6] & s[2]); + s[4] -= s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 7u); + s[6] += s[10] + 0x76798031u; + s[2] ^= s[6] ^ 0x81f2cae5u; + s[15] -= s[2]; + s[7] = mh_rotl(s[7] ^ s[15], 11u); + s[0] -= s[7]; + s[15] ^= s[0] ^ 0x84b0f58cu; + s[4] ^= s[15]; + s[11] += s[4] + 0x37470ecau; + s[7] = mh_rotl(s[7] ^ s[11], 25u); + s[0] ^= s[7]; + s[7] ^= s[0]; + s[15] = (s[15] ^ s[7]) * 0x8bed0165u; + s[13] = (s[13] ^ s[15]) * 0xf0b2282fu; + s[10] ^= s[13]; + s[15] *= (s[10] | 1u); +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_3(uint* s) { + s[9] -= s[0]; + s[12] *= (s[9] | 1u); + s[13] -= s[12]; + s[2] = (s[2] ^ s[13]) * 0xcaec7bb5u; + s[8] = (s[8] ^ s[2]) * 0xbfa2f813u; + s[9] = (s[9] ^ s[8]) * 0xd8816ab5u; + s[11] ^= s[9]; + s[4] = (s[4] ^ s[11]) * 0xb5a60ae1u; + s[2] += s[4]; + s[14] += s[2] + 0x3b8ef46bu; + s[5] -= s[14]; + s[12] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 5u); + s[8] = (s[8] ^ s[4]) * 0x064e4143u; + s[5] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 30u) + s[5]; + s[13] += s[10]; + s[14] += s[13] + 0xb57a206du; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[4] = mh_rotl(s[4], 8u) + s[7]; + s[2] = mh_rotl(s[2], 26u) + s[4]; + s[6] = mh_rotl(s[6], 23u) + s[2]; + s[0] = mh_rotl(s[0] ^ s[6], 10u); + s[4] = mh_rotl(s[4] ^ s[0], 16u); + s[8] = (s[8] ^ s[4]) * 0xc9a07b1du; + s[6] = (s[6] ^ s[8]) * 0xf7907103u; + s[1] = mh_rotl(s[1] ^ s[6], 2u); + s[8] = (s[8] ^ s[1]) * 0x63cfdc25u; + s[13] += (s[8] | s[3]); + s[11] -= s[13]; + s[10] += s[11] + 0xbe40fad3u; + s[14] *= (s[10] | 1u); + s[8] += s[14]; + s[14] += s[8] + 0xe91df793u; + s[5] -= s[14]; + s[2] = mh_rotl(s[2], 17u) + s[5]; + s[7] ^= s[2]; + s[9] += s[7] + 0x80c9212au; + s[1] = (s[1] ^ s[9]) * 0xa7d74fefu; + s[0] ^= s[1] ^ 0x08f82691u; + s[3] ^= (s[0] & s[12]); + s[5] = mh_rotl(s[5] ^ s[3], 10u); + s[11] *= (s[5] | 1u); + s[12] -= s[11]; + s[0] += s[12]; + s[7] = mh_rotl(s[7], 10u) + s[0]; + s[2] = mh_rotl(s[2], 25u) + s[7]; + s[15] += s[2] + 0xe54d98a2u; + s[3] ^= s[15]; + s[2] += (s[3] | s[12]); + s[11] -= s[2]; + s[14] ^= (s[11] & s[3]); + s[3] += s[14]; + s[13] += s[3]; + s[9] *= (s[13] | 1u); + s[8] ^= s[9]; + s[4] += s[8]; + s[1] += s[4]; + s[14] *= (s[1] | 1u); + s[10] = (s[10] ^ s[14]) * 0x80d81c29u; + s[14] = mh_rotl(s[14], 28u) + s[10]; + s[15] *= (s[14] | 1u); + s[9] ^= s[15] ^ 0xb96f0f72u; + s[0] += s[9] + 0x58af0b09u; + s[7] += (s[0] | s[8]); + s[4] = (s[4] ^ s[7]) * 0x3cb02481u; + s[6] += s[4] + 0x7c9ebf59u; + s[4] = mh_rotl(s[4], 31u) + s[6]; + s[11] += s[4]; + s[9] += s[11]; + s[0] ^= s[9]; + s[6] ^= s[0] ^ 0x87a4c25eu; + s[10] += s[6] + 0x63a850d3u; + s[3] *= (s[10] | 1u); + s[15] += s[3]; + s[2] *= (s[15] | 1u); + s[0] ^= s[2]; + s[10] ^= (s[0] & s[12]); + s[0] = mh_rotl(s[0] ^ s[10], 13u); + s[10] ^= s[0]; + s[1] = s[1] * 0x68b25a3du + s[10]; + s[14] ^= (s[1] & s[4]); + s[15] *= (s[14] | 1u); + s[0] = mh_rotl(s[0] ^ s[15], 21u); + s[1] ^= (s[0] & s[14]); + s[13] *= (s[1] | 1u); + s[15] *= (s[13] | 1u); + s[7] *= (s[15] | 1u); + s[3] ^= s[7] ^ 0x1eb335a8u; + s[15] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 23u) + s[15]; + s[5] ^= s[7]; + s[8] += s[5] + 0x50a316f9u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 19u) + s[5]; + s[8] = mh_rotl(s[8], 28u) + s[3]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[2] += (s[14] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 16u); + s[11] += s[13]; + s[4] ^= s[11]; + s[15] += s[4]; + s[2] += s[15]; + s[13] = mh_rotl(s[13] ^ s[2], 7u); + s[1] += s[13]; + s[0] *= (s[1] | 1u); + s[6] -= s[0]; + s[13] += s[6]; + s[2] = mh_rotl(s[2], 24u) + s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 17u); + s[10] += s[4] + 0xd112ffcfu; + s[15] ^= s[10] ^ 0x9030e81eu; + s[4] ^= s[15]; + s[9] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[9], 7u); + s[2] = mh_rotl(s[2], 24u) + s[10]; + s[14] = (s[14] ^ s[2]) * 0x93c10f1du; + s[10] *= (s[14] | 1u); + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[4] *= (s[10] | 1u); + s[10] += s[4]; + s[6] += (s[10] | s[15]); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[13] = mh_rotl(s[13] ^ s[5], 9u); + s[4] ^= s[13]; + s[10] ^= s[4]; + s[2] -= s[10]; + s[13] += (s[2] | s[9]); + s[8] -= s[13]; + s[4] -= s[8]; + s[3] ^= s[4] ^ 0x9fcb6ee8u; + s[4] ^= s[3] ^ 0xb9fbeaf9u; + s[12] = mh_rotl(s[12], 8u) + s[4]; + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 31u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 9u); + s[0] *= (s[4] | 1u); + s[6] ^= s[0]; + s[4] = mh_rotl(s[4], 13u) + s[6]; + s[13] -= s[4]; + s[7] ^= s[13]; + s[12] = mh_rotl(s[12], 10u) + s[7]; + s[14] = mh_rotl(s[14], 27u) + s[12]; + s[7] ^= s[14]; + s[0] += (s[7] | s[2]); + s[12] ^= s[0]; + s[5] = (s[5] ^ s[12]) * 0x392525a1u; + s[8] += s[5] + 0x4138a8f1u; + s[5] += s[8]; + s[11] += s[5]; + s[7] ^= s[11]; + s[14] ^= s[7]; + s[0] += s[14]; + s[12] ^= s[0]; + s[2] *= (s[12] | 1u); + s[6] -= s[2]; + s[4] += s[6] + 0xdcaac0adu; + s[10] ^= s[4]; + s[5] += s[10]; + s[10] += s[5] + 0x0cfa5affu; + s[15] ^= s[10] ^ 0x68194eefu; + s[8] *= (s[15] | 1u); + s[9] += s[8] + 0x15042ceau; + s[0] += (s[9] | s[6]); + s[14] *= (s[0] | 1u); + s[13] = s[13] * 0x5a114c5fu + s[14]; + s[1] += s[13]; + s[3] += s[1]; + s[4] ^= s[3] ^ 0x9b2578dcu; + s[3] = (s[3] ^ s[4]) * 0xf0215559u; + s[9] = mh_rotl(s[9] ^ s[3], 30u); + s[3] *= (s[9] | 1u); + s[10] *= (s[3] | 1u); + s[5] = (s[5] ^ s[10]) * 0xd48cc381u; + s[3] ^= s[5]; + s[5] -= s[3]; + s[0] = (s[0] ^ s[5]) * 0x5dc8d8cfu; + s[2] += (s[0] | s[1]); + s[4] = mh_rotl(s[4] ^ s[2], 26u); + s[11] *= (s[4] | 1u); + s[2] *= (s[11] | 1u); + s[10] -= s[2]; + s[14] = s[14] * 0x8334873fu + s[10]; + s[7] += s[14]; + s[15] += s[7] + 0xa09fcd48u; + s[10] ^= s[15]; + s[15] += s[10]; + s[12] = mh_rotl(s[12], 20u) + s[15]; + s[3] = (s[3] ^ s[12]) * 0xb7d989dfu; + s[4] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 4u); + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[8] = mh_rotl(s[8] ^ s[7], 13u); + s[1] = (s[1] ^ s[8]) * 0xfd9c4977u; + s[2] ^= s[1]; + s[13] = mh_rotl(s[13], 25u) + s[2]; + s[11] += s[13]; + s[2] = s[2] * 0x9e62997du + s[11]; + s[1] ^= s[2] ^ 0x5bed272fu; + s[7] = mh_rotl(s[7] ^ s[1], 14u); + s[12] += s[7]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[9] *= (s[1] | 1u); + s[13] ^= (s[9] & s[15]); + s[1] += (s[13] | s[14]); + s[6] -= s[1]; + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[10] -= s[1]; + s[4] = s[4] * 0x1026f5f7u + s[10]; + s[7] = (s[7] ^ s[4]) * 0x91c6caf3u; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[11] += s[4] + 0x39f61640u; + s[10] -= s[11]; + s[15] ^= s[10]; + s[13] += s[15] + 0xa8a05a01u; + s[3] = mh_rotl(s[3], 27u) + s[13]; + s[4] -= s[3]; + s[13] = mh_rotl(s[13], 8u) + s[4]; + s[8] ^= s[13]; + s[3] += s[8] + 0x4dc574e2u; + s[15] += (s[3] | s[5]); + s[9] = s[9] * 0x7c710593u + s[15]; + s[2] += s[9] + 0xe91d6df9u; + s[9] ^= s[2] ^ 0xba09d0c1u; + s[7] = mh_rotl(s[7] ^ s[9], 5u); + s[2] += s[7] + 0xf1cb3677u; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[5] = mh_rotl(s[5], 10u) + s[0]; + s[9] += s[5]; + s[12] ^= (s[9] & s[3]); + s[5] = (s[5] ^ s[12]) * 0x8e5ae08du; + s[11] -= s[5]; + s[12] ^= s[11]; + s[0] ^= s[12] ^ 0x038449c7u; + s[6] += s[0] + 0x2b0bf2e9u; + s[9] += s[6]; + s[1] += s[9]; + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[9] *= (s[3] | 1u); + s[13] = s[13] * 0xabfb518du + s[9]; + s[11] += (s[13] | s[14]); + s[6] ^= s[11]; + s[3] += s[6] + 0xbf050303u; + s[9] += s[3]; + s[8] *= (s[9] | 1u); + s[11] += s[8]; + s[7] = mh_rotl(s[7] ^ s[11], 12u); + s[1] = mh_rotl(s[1], 18u) + s[7]; + s[12] *= (s[1] | 1u); + s[5] -= s[12]; + s[11] *= (s[5] | 1u); + s[0] = s[0] * 0x1258c98fu + s[11]; + s[2] -= s[0]; + s[13] = mh_rotl(s[13], 5u) + s[2]; + s[15] = (s[15] ^ s[13]) * 0xa9ea982fu; + s[0] ^= (s[15] & s[5]); + s[14] = (s[14] ^ s[0]) * 0x8e658f2du; + s[7] = mh_rotl(s[7], 28u) + s[14]; + s[4] = (s[4] ^ s[7]) * 0xdffb5283u; + s[9] = mh_rotl(s[9], 18u) + s[4]; + s[5] = mh_rotl(s[5], 30u) + s[9]; + s[11] += s[5] + 0x67a75c51u; + s[3] = mh_rotl(s[3], 13u) + s[11]; + s[9] += s[3]; + s[1] ^= s[9] ^ 0xc25226c4u; + s[7] *= (s[1] | 1u); + s[12] ^= s[7]; + s[3] = mh_rotl(s[3] ^ s[12], 8u); + s[0] = mh_rotl(s[0], 13u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[0], 9u); + s[14] ^= s[9]; + s[0] -= s[14]; + s[12] = mh_rotl(s[12], 4u) + s[0]; + s[6] += s[12] + 0x8a7a83b1u; + s[12] += s[6] + 0xce44f768u; + s[13] ^= s[12] ^ 0xa265fddcu; + s[3] = mh_rotl(s[3] ^ s[13], 28u); + s[2] += s[3]; + s[4] = (s[4] ^ s[2]) * 0xfaf1f025u; + s[5] *= (s[4] | 1u); + s[13] = (s[13] ^ s[5]) * 0x1bde9b5du; + s[2] += (s[13] | s[0]); + s[12] ^= s[2]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] = mh_rotl(s[11], 20u) + s[2]; + s[1] *= (s[11] | 1u); + s[5] = mh_rotl(s[5], 17u) + s[1]; + s[0] = mh_rotl(s[0], 7u) + s[5]; + s[11] ^= s[0]; + s[5] -= s[11]; + s[8] *= (s[5] | 1u); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xc1818321u; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 12u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[1], 20u); + s[11] *= (s[15] | 1u); + s[13] *= (s[11] | 1u); + s[8] ^= s[13]; + s[5] = (s[5] ^ s[8]) * 0xcb34052bu; + s[12] = mh_rotl(s[12] ^ s[5], 24u); + s[5] = mh_rotl(s[5] ^ s[12], 12u); + s[9] = mh_rotl(s[9], 4u) + s[5]; + s[12] = s[12] * 0x44487769u + s[9]; + s[3] += s[12]; + s[7] = s[7] * 0x3d0dc719u + s[3]; + s[12] = mh_rotl(s[12], 25u) + s[7]; + s[14] = (s[14] ^ s[12]) * 0x0a26f463u; + s[5] ^= s[14] ^ 0x7e263a26u; + s[11] = mh_rotl(s[11], 29u) + s[5]; + s[14] -= s[11]; + s[12] = (s[12] ^ s[14]) * 0x05fc47afu; + s[11] ^= s[12]; + s[7] += s[11]; + s[8] -= s[7]; + s[4] ^= s[8]; + s[7] ^= s[4]; + s[11] ^= s[7]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[7] += (s[12] | s[9]); + s[12] ^= s[7]; + s[1] += s[12] + 0x47217177u; + s[12] = (s[12] ^ s[1]) * 0x60a7a2a1u; + s[11] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[11] ^= s[13]; + s[6] ^= s[11]; + s[0] *= (s[6] | 1u); + s[15] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[15], 4u); + s[9] = mh_rotl(s[9] ^ s[11], 20u); + s[0] = (s[0] ^ s[9]) * 0xe7aae81fu; + s[6] *= (s[0] | 1u); + s[15] += s[6]; + s[3] += s[15] + 0x6bbe960au; + s[12] -= s[3]; + s[8] *= (s[12] | 1u); + s[11] = s[11] * 0xcc54856fu + s[8]; + s[3] = (s[3] ^ s[11]) * 0x65049d67u; + s[1] -= s[3]; + s[3] *= (s[1] | 1u); + s[0] *= (s[3] | 1u); + s[12] *= (s[0] | 1u); + s[2] *= (s[12] | 1u); + s[12] -= s[2]; + s[6] ^= s[12]; + s[13] = s[13] * 0xfd8e78e7u + s[6]; + s[4] ^= s[13] ^ 0x36001de6u; + s[3] += s[4]; + s[6] -= s[3]; + s[4] *= (s[6] | 1u); + s[10] *= (s[4] | 1u); + s[7] ^= s[10]; + s[13] ^= s[7] ^ 0x3cc162e5u; + s[2] = (s[2] ^ s[13]) * 0xc6b38d29u; + s[8] ^= s[2] ^ 0x43ac5ec1u; + s[0] += (s[8] | s[14]); + s[3] += s[0] + 0xc94402c6u; + s[8] = (s[8] ^ s[3]) * 0x40a11c6du; + s[1] = mh_rotl(s[1] ^ s[8], 9u); + s[2] = (s[2] ^ s[1]) * 0x10ebfae9u; + s[8] += s[2] + 0x2e5cffd4u; + s[0] = mh_rotl(s[0], 4u) + s[8]; + s[2] *= (s[0] | 1u); + s[9] ^= s[2] ^ 0xea63f112u; + s[4] = mh_rotl(s[4] ^ s[9], 20u); + s[12] += (s[4] | s[0]); + s[6] = mh_rotl(s[6], 28u) + s[12]; + s[11] ^= s[6]; + s[2] = (s[2] ^ s[11]) * 0xb92e6187u; + s[6] += s[2]; + s[10] += (s[6] | s[2]); + s[8] ^= s[10]; + s[11] ^= s[8]; + s[12] = mh_rotl(s[12], 12u) + s[11]; + s[8] = s[8] * 0xcf6e39cbu + s[12]; + s[7] += s[8] + 0x07e25ae6u; + s[1] = (s[1] ^ s[7]) * 0x6550efddu; + s[15] += s[1] + 0xcd15560fu; + s[13] ^= s[15]; + s[4] = mh_rotl(s[4], 16u) + s[13]; + s[12] = (s[12] ^ s[4]) * 0x7129239fu; + s[9] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[9], 25u); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[2] ^= s[7]; + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[1] -= s[5]; + s[8] = s[8] * 0x1c6b90b7u + s[1]; + s[14] += s[8]; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[5] = s[5] * 0x1b17414fu + s[15]; + s[11] ^= s[5] ^ 0xd6b8f316u; + s[9] = mh_rotl(s[9], 25u) + s[11]; + s[0] = (s[0] ^ s[9]) * 0x36fce4cdu; + s[11] = (s[11] ^ s[0]) * 0x3ffedbedu; + s[6] = mh_rotl(s[6] ^ s[11], 28u); + s[0] = mh_rotl(s[0], 26u) + s[6]; + s[1] ^= s[0]; + s[7] = (s[7] ^ s[1]) * 0x4dfcedebu; + s[15] = mh_rotl(s[15], 26u) + s[7]; + s[14] = (s[14] ^ s[15]) * 0x6c9326edu; + s[4] = mh_rotl(s[4] ^ s[14], 23u); + s[9] += s[4]; + s[10] += s[9]; + s[1] += s[10]; + s[4] = mh_rotl(s[4] ^ s[1], 19u); + s[9] += s[4]; + s[13] += s[9]; + s[15] = mh_rotl(s[15], 6u) + s[13]; + s[6] = mh_rotl(s[6], 13u) + s[15]; + s[1] *= (s[6] | 1u); + s[11] = s[11] * 0x0aa13acfu + s[1]; + s[7] = (s[7] ^ s[11]) * 0xf0f30943u; + s[11] = mh_rotl(s[11], 5u) + s[7]; + s[12] ^= s[11]; + s[6] ^= s[12]; + s[3] ^= s[6]; + s[14] = mh_rotl(s[14], 11u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 8u); + s[13] *= (s[12] | 1u); + s[15] -= s[13]; + s[9] = s[9] * 0x111b0ab9u + s[15]; + s[0] = mh_rotl(s[0] ^ s[9], 2u); + s[13] ^= s[0] ^ 0x208f1223u; + s[1] = (s[1] ^ s[13]) * 0x8697b4f3u; + s[4] = s[4] * 0xf7e4eb9bu + s[1]; + s[12] = mh_rotl(s[12] ^ s[4], 20u); + s[6] = mh_rotl(s[6] ^ s[12], 16u); + s[7] += s[6] + 0xb04cedccu; + s[9] ^= (s[7] & s[12]); + s[15] = mh_rotl(s[15] ^ s[9], 8u); + s[14] = s[14] * 0xba13bfd9u + s[15]; + s[6] = mh_rotl(s[6], 30u) + s[14]; + s[2] ^= s[6] ^ 0xe3a68481u; + s[3] ^= s[2] ^ 0xdb295442u; + s[6] -= s[3]; + s[3] *= (s[6] | 1u); + s[14] ^= s[3]; + s[6] += s[14]; + s[0] += s[6]; + s[13] ^= s[0] ^ 0x2ce62ec8u; + s[9] -= s[13]; + s[6] = (s[6] ^ s[9]) * 0xb3667f91u; + s[12] ^= s[6] ^ 0xa40ba390u; + s[0] += s[12]; + s[13] = (s[13] ^ s[0]) * 0xcf132dbdu; + s[8] ^= s[13] ^ 0xc01a2e22u; + s[15] = mh_rotl(s[15], 29u) + s[8]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[12] += s[4] + 0xa106f25fu; + s[10] = mh_rotl(s[10], 2u) + s[12]; + s[1] ^= s[10]; + s[4] = s[4] * 0xd693bf07u + s[1]; + s[8] ^= s[4]; + s[15] += s[8]; + s[2] = (s[2] ^ s[15]) * 0x451147c5u; + s[6] += s[2]; + s[4] ^= s[6] ^ 0x95c3d40au; + s[8] ^= s[4]; + s[6] = mh_rotl(s[6] ^ s[8], 24u); + s[8] = s[8] * 0xfacd20cdu + s[6]; + s[3] *= (s[8] | 1u); + s[0] = s[0] * 0xf8f86c91u + s[3]; + s[9] *= (s[0] | 1u); + s[1] ^= s[9]; + s[13] ^= s[1]; + s[14] *= (s[13] | 1u); + s[0] += s[14] + 0x29396640u; + s[6] *= (s[0] | 1u); + s[13] -= s[6]; + s[4] ^= s[13]; + s[10] = mh_rotl(s[10], 29u) + s[4]; + s[11] = mh_rotl(s[11], 14u) + s[10]; + s[8] = mh_rotl(s[8], 14u) + s[11]; + s[12] = (s[12] ^ s[8]) * 0x7c958209u; + s[14] ^= s[12] ^ 0x6e81c671u; + s[6] ^= s[14]; + s[5] += s[6] + 0xe6b449c9u; + s[7] ^= (s[5] & s[12]); + s[8] = mh_rotl(s[8], 8u) + s[7]; + s[7] = s[7] * 0x3076e64fu + s[8]; + s[15] = s[15] * 0x4f3224dfu + s[7]; + s[9] = mh_rotl(s[9] ^ s[15], 24u); + s[5] = s[5] * 0x71865ddbu + s[9]; + s[2] += s[5] + 0xbd3e3e01u; + s[4] = mh_rotl(s[4] ^ s[2], 14u); + s[0] = (s[0] ^ s[4]) * 0x6b745769u; + s[9] -= s[0]; + s[4] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[4], 2u); + s[8] += (s[6] | s[10]); + s[1] *= (s[8] | 1u); + s[14] += (s[1] | s[6]); + s[6] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[6], 19u); + s[4] *= (s[13] | 1u); + s[10] ^= s[4] ^ 0xd06e492du; + s[9] ^= s[10] ^ 0x6d1c0c53u; + s[14] ^= s[9]; + s[13] ^= (s[14] & s[10]); + s[1] += (s[13] | s[4]); + s[11] = mh_rotl(s[11] ^ s[1], 30u); + s[0] += s[11]; + s[2] ^= (s[0] & s[13]); + s[0] -= s[2]; + s[12] = s[12] * 0x615420d7u + s[0]; + s[11] ^= (s[12] & s[3]); + s[1] = mh_rotl(s[1], 31u) + s[11]; + s[2] = mh_rotl(s[2] ^ s[1], 12u); + s[12] ^= s[2]; + s[8] ^= s[12]; + s[6] -= s[8]; + s[10] ^= s[6]; + s[14] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[14], 22u); + s[6] *= (s[15] | 1u); + s[1] ^= s[6]; + s[12] = s[12] * 0x513c5869u + s[1]; + s[6] = mh_rotl(s[6] ^ s[12], 21u); + s[9] ^= s[6]; + s[0] += s[9]; + s[12] ^= s[0]; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 4u); + s[1] ^= s[6]; + s[4] *= (s[1] | 1u); + s[6] = s[6] * 0xb444bcc1u + s[4]; + s[8] ^= s[6]; + s[7] ^= s[8] ^ 0x1a883d74u; + s[10] = mh_rotl(s[10] ^ s[7], 8u); + s[9] = mh_rotl(s[9], 16u) + s[10]; + s[6] += s[9]; + s[2] ^= s[6]; + s[14] = mh_rotl(s[14], 8u) + s[2]; + s[9] += (s[14] | s[11]); + s[15] *= (s[9] | 1u); + s[9] = mh_rotl(s[9], 9u) + s[15]; + s[8] = mh_rotl(s[8], 9u) + s[9]; + s[7] ^= s[8]; + s[5] ^= s[7]; + s[11] ^= s[5]; + s[4] *= (s[11] | 1u); + s[8] *= (s[4] | 1u); + s[12] += (s[8] | s[2]); + s[13] = s[13] * 0xed36b1e7u + s[12]; + s[1] ^= s[13]; + s[2] *= (s[1] | 1u); + s[5] = s[5] * 0x20dd61c9u + s[2]; + s[9] += s[5] + 0x4221406cu; + s[2] = (s[2] ^ s[9]) * 0xbd437fb1u; + s[10] ^= s[2]; + s[8] += (s[10] | s[4]); + s[1] += s[8]; + s[15] *= (s[1] | 1u); + s[10] *= (s[15] | 1u); + s[4] -= s[10]; + s[12] += s[4] + 0x2cc4a200u; + s[6] ^= s[12]; + s[11] += s[6] + 0x24df7960u; + s[13] -= s[11]; + s[4] ^= s[13]; + s[1] -= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 7u); + s[1] += s[3]; + s[9] += s[1]; + s[3] ^= s[9]; + s[6] ^= (s[3] & s[0]); + s[13] -= s[6]; + s[2] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[1] *= (s[5] | 1u); + s[3] = (s[3] ^ s[1]) * 0x290a4cddu; + s[7] = (s[7] ^ s[3]) * 0x05557b07u; + s[3] = mh_rotl(s[3] ^ s[7], 7u); + s[9] += s[3]; + s[14] ^= s[9]; + s[0] = (s[0] ^ s[14]) * 0x84c021f1u; + s[14] ^= s[0]; + s[3] -= s[14]; + s[1] = s[1] * 0x6d78fdd7u + s[3]; + s[5] = (s[5] ^ s[1]) * 0x5e5c9e7bu; + s[12] += s[5]; + s[8] += (s[12] | s[3]); + s[13] += s[8] + 0x4759e773u; + s[15] += s[13]; + s[3] = (s[3] ^ s[15]) * 0x6664f1fdu; + s[6] *= (s[3] | 1u); + s[11] = (s[11] ^ s[6]) * 0x4e530d13u; + s[5] *= (s[11] | 1u); + s[1] += s[5] + 0x3dd89a81u; + s[14] = mh_rotl(s[14], 6u) + s[1]; + s[9] = mh_rotl(s[9], 2u) + s[14]; + s[14] += s[9]; + s[10] = mh_rotl(s[10] ^ s[14], 31u); + s[12] += s[10]; + s[7] ^= (s[12] & s[11]); + s[13] += s[7]; + s[4] = mh_rotl(s[4], 4u) + s[13]; + s[3] ^= (s[4] & s[10]); + s[5] ^= (s[3] & s[11]); + s[4] = mh_rotl(s[4], 22u) + s[5]; + s[3] -= s[4]; + s[5] ^= (s[3] & s[12]); + s[2] -= s[5]; + s[9] = (s[9] ^ s[2]) * 0x009bbf5bu; + s[4] += s[9]; + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[7] = mh_rotl(s[7] ^ s[15], 20u); + s[10] += s[7]; + s[4] = s[4] * 0x4bdd1ef7u + s[10]; + s[14] ^= (s[4] & s[2]); + s[9] = (s[9] ^ s[14]) * 0x52fb945du; + s[12] += s[9]; + s[9] ^= s[12]; + s[2] = mh_rotl(s[2] ^ s[9], 11u); + s[11] += s[2] + 0x98f50a09u; + s[15] += s[11] + 0xd43ed388u; + s[10] += s[15] + 0x2f9a932bu; + s[12] ^= (s[10] & s[15]); + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0xd453117du; + s[1] += (s[12] | s[2]); + s[5] += s[1]; + s[1] += s[5]; + s[14] -= s[1]; + s[8] -= s[14]; + s[10] -= s[8]; + s[13] ^= (s[10] & s[5]); + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[13] = (s[13] ^ s[5]) * 0x664791dfu; + s[15] -= s[13]; + s[3] += s[15]; + s[5] *= (s[3] | 1u); + s[2] = (s[2] ^ s[5]) * 0x93635545u; + s[8] ^= s[2] ^ 0xfd3c4040u; + s[12] ^= s[8] ^ 0x16edb512u; + s[1] ^= s[12] ^ 0x16c54637u; + s[4] += (s[1] | s[10]); + s[1] += s[4]; + s[13] ^= (s[1] & s[6]); + s[7] += s[13] + 0x3d8c4dc2u; + s[15] += s[7]; + s[14] = (s[14] ^ s[15]) * 0xa280205du; + s[8] += s[14] + 0xea00510eu; + s[15] += s[8] + 0x22e3c715u; + s[8] ^= s[15]; + s[4] ^= s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 20u); + s[0] += s[11]; + s[13] = mh_rotl(s[13], 15u) + s[0]; + s[14] ^= s[13]; + s[0] ^= s[14]; + s[10] -= s[0]; + s[14] = s[14] * 0x93e04059u + s[10]; + s[0] += s[14] + 0x5e852243u; + s[9] += s[0]; + s[11] ^= s[9] ^ 0x6a38274eu; + s[6] ^= s[11]; + s[9] ^= s[6] ^ 0x45fe04e0u; + s[15] ^= s[9]; + s[2] = mh_rotl(s[2] ^ s[15], 2u); + s[7] ^= s[2]; + s[3] = mh_rotl(s[3], 25u) + s[7]; + s[4] += s[3]; + s[0] = mh_rotl(s[0] ^ s[4], 30u); + s[14] ^= s[0]; + s[9] += s[14]; + s[1] = s[1] * 0x3f7558f3u + s[9]; + s[4] = s[4] * 0xe3e44fb9u + s[1]; + s[11] *= (s[4] | 1u); + s[1] += s[11]; + s[9] ^= s[1]; + s[12] *= (s[9] | 1u); + s[13] ^= s[12] ^ 0xde1987e8u; + s[11] ^= (s[13] & s[12]); + s[8] *= (s[11] | 1u); + s[4] += s[8] + 0x607d6073u; + s[0] = mh_rotl(s[0], 10u) + s[4]; + s[7] = (s[7] ^ s[0]) * 0x7b248651u; + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[6] += s[1]; + s[9] += s[6]; + s[5] -= s[9]; + s[0] += s[5]; + s[6] = mh_rotl(s[6] ^ s[0], 28u); + s[1] -= s[6]; + s[12] += s[1] + 0x2a786432u; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[13] += s[15] + 0xcbe2f823u; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[12] *= (s[14] | 1u); + s[2] += s[12]; + s[0] -= s[2]; + s[6] += s[0]; + s[5] = mh_rotl(s[5], 22u) + s[6]; + s[0] -= s[5]; + s[5] ^= s[0] ^ 0x2970012du; + s[10] ^= s[5] ^ 0xed24a370u; + s[0] ^= s[10]; + s[12] = s[12] * 0x41ce9517u + s[0]; + s[4] += s[12]; + s[13] = (s[13] ^ s[4]) * 0x2d1ce425u; + s[10] = (s[10] ^ s[13]) * 0x97e04693u; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[8] += s[6]; + s[2] += s[8]; + s[4] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[4], 5u); + s[4] ^= s[2]; + s[2] += s[4]; + s[14] = (s[14] ^ s[2]) * 0x1b32c769u; + s[13] ^= s[14]; + s[5] = mh_rotl(s[5] ^ s[13], 22u); + s[6] += (s[5] | s[8]); + s[9] = mh_rotl(s[9] ^ s[6], 29u); + s[10] += s[9]; + s[7] ^= s[10]; + s[14] = mh_rotl(s[14] ^ s[7], 18u); + s[10] = mh_rotl(s[10] ^ s[14], 10u); + s[2] = mh_rotl(s[2], 5u) + s[10]; + s[5] = mh_rotl(s[5], 13u) + s[2]; + s[12] += s[5]; + s[13] = (s[13] ^ s[12]) * 0x17c1f363u; + s[9] += (s[13] | s[7]); + s[13] *= (s[9] | 1u); + s[15] = mh_rotl(s[15], 19u) + s[13]; + s[12] = mh_rotl(s[12], 19u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[12], 8u); +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_4(uint* s) { + s[8] = s[8] * 0xaecd4a17u + s[0]; + s[7] = mh_rotl(s[7], 30u) + s[8]; + s[13] ^= s[7]; + s[3] ^= s[13] ^ 0x4f2a7676u; + s[4] = mh_rotl(s[4] ^ s[3], 3u); + s[8] += s[4]; + s[0] ^= s[8]; + s[8] = (s[8] ^ s[0]) * 0x13ad02a5u; + s[3] ^= s[8]; + s[8] += s[3]; + s[12] ^= s[8] ^ 0xee807166u; + s[5] = mh_rotl(s[5] ^ s[12], 25u); + s[1] ^= s[5]; + s[7] = (s[7] ^ s[1]) * 0x7f918ce5u; + s[8] += s[7]; + s[12] ^= s[8] ^ 0x0fe3941du; + s[6] *= (s[12] | 1u); + s[15] = mh_rotl(s[15], 30u) + s[6]; + s[8] += s[15]; + s[4] ^= s[8]; + s[3] -= s[4]; + s[0] += s[3]; + s[2] ^= (s[0] & s[5]); + s[10] += s[2]; + s[2] ^= s[10]; + s[6] -= s[2]; + s[5] += s[6]; + s[14] += (s[5] | s[3]); + s[11] += (s[14] | s[3]); + s[13] += s[11]; + s[8] = mh_rotl(s[8], 26u) + s[13]; + s[1] = mh_rotl(s[1] ^ s[8], 12u); + s[11] ^= (s[1] & s[8]); + s[14] = mh_rotl(s[14] ^ s[11], 10u); + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[5] = (s[5] ^ s[7]) * 0x3ef9db3bu; + s[8] += s[5]; + s[12] += s[8]; + s[10] *= (s[12] | 1u); + s[5] ^= s[10] ^ 0x3ac44be6u; + s[14] = s[14] * 0xdd348ca1u + s[5]; + s[3] ^= s[14] ^ 0xfd694e31u; + s[7] ^= s[3]; + s[6] ^= s[7] ^ 0x1c8fa07eu; + s[4] ^= s[6]; + s[2] ^= s[4]; + s[9] -= s[2]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[13] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[13], 11u); + s[1] = (s[1] ^ s[5]) * 0x41737ac3u; + s[10] ^= (s[1] & s[13]); + s[13] -= s[10]; + s[5] += s[13] + 0xef8b331eu; + s[14] += s[5]; + s[2] += s[14]; + s[3] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[11] ^= s[2]; + s[3] = (s[3] ^ s[11]) * 0xe116294bu; + s[2] *= (s[3] | 1u); + s[6] ^= s[2]; + s[2] *= (s[6] | 1u); + s[12] ^= s[2] ^ 0x53bea191u; + s[14] *= (s[12] | 1u); + s[10] ^= s[14]; + s[4] *= (s[10] | 1u); + s[2] ^= s[4] ^ 0xced418d2u; + s[5] = s[5] * 0xe51463cbu + s[2]; + s[2] ^= s[5]; + s[6] += (s[2] | s[3]); + s[9] ^= (s[6] & s[15]); + s[0] = (s[0] ^ s[9]) * 0x52fd974du; + s[15] = mh_rotl(s[15] ^ s[0], 8u); + s[14] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[12] ^= s[8]; + s[7] = mh_rotl(s[7], 9u) + s[12]; + s[3] ^= s[7] ^ 0x86710ff9u; + s[13] -= s[3]; + s[3] ^= s[13]; + s[5] = mh_rotl(s[5], 29u) + s[3]; + s[7] += (s[5] | s[8]); + s[6] += s[7]; + s[13] ^= s[6]; + s[5] ^= s[13]; + s[13] -= s[5]; + s[4] ^= s[13]; + s[0] = mh_rotl(s[0], 28u) + s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[0] = (s[0] ^ s[10]) * 0x4bce676du; + s[9] += s[0]; + s[15] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 29u); + s[1] ^= s[5]; + s[10] ^= s[1]; + s[3] -= s[10]; + s[4] -= s[3]; + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[8] ^= s[5]; + s[4] += s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 22u); + s[7] ^= s[11]; + s[11] ^= s[7] ^ 0x678e4d82u; + s[7] = (s[7] ^ s[11]) * 0x3b4b50bfu; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[0] = mh_rotl(s[0], 11u) + s[3]; + s[4] -= s[0]; + s[3] ^= s[4]; + s[11] ^= s[3]; + s[4] *= (s[11] | 1u); + s[2] -= s[4]; + s[1] -= s[2]; + s[9] ^= s[1]; + s[11] -= s[9]; + s[9] ^= s[11]; + s[10] = (s[10] ^ s[9]) * 0x5a972befu; + s[7] ^= (s[10] & s[4]); + s[15] = (s[15] ^ s[7]) * 0xac20e017u; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[10] -= s[3]; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[15] = mh_rotl(s[15] ^ s[6], 3u); + s[4] = (s[4] ^ s[15]) * 0xbeaf0ba9u; + s[9] *= (s[4] | 1u); + s[12] ^= s[9]; + s[8] ^= s[12]; + s[14] *= (s[8] | 1u); + s[6] = mh_rotl(s[6] ^ s[14], 16u); + s[10] += s[6]; + s[1] += s[10]; + s[3] ^= s[1]; + s[9] -= s[3]; + s[6] += s[9]; + s[15] = mh_rotl(s[15], 13u) + s[6]; + s[10] ^= (s[15] & s[1]); + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[9] = mh_rotl(s[9], 11u) + s[3]; + s[2] ^= s[9] ^ 0x8f89660fu; + s[0] = mh_rotl(s[0] ^ s[2], 21u); + s[13] = (s[13] ^ s[0]) * 0x486a43b3u; + s[10] += s[13]; + s[4] ^= s[10]; + s[14] ^= s[4]; + s[2] ^= s[14]; + s[7] += s[2] + 0xd5248764u; + s[1] ^= s[7]; + s[5] ^= (s[1] & s[14]); + s[8] *= (s[5] | 1u); + s[14] += s[8]; + s[4] -= s[14]; + s[6] = mh_rotl(s[6], 1u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[6], 25u); + s[9] = mh_rotl(s[9], 10u) + s[3]; + s[7] += s[9]; + s[4] += s[7]; + s[2] = (s[2] ^ s[4]) * 0xf5d8c485u; + s[13] *= (s[2] | 1u); + s[8] ^= s[13]; + s[12] ^= s[8]; + s[0] += s[12] + 0xcbe96ecfu; + s[10] += s[0]; + s[4] += s[10]; + s[15] ^= s[4]; + s[11] *= (s[15] | 1u); + s[4] = s[4] * 0x8a37f349u + s[11]; + s[2] += s[4]; + s[10] = mh_rotl(s[10] ^ s[2], 14u); + s[12] += s[10]; + s[7] ^= s[12]; + s[6] = (s[6] ^ s[7]) * 0x5d00c42du; + s[0] ^= s[6]; + s[11] ^= s[0]; + s[15] += s[11]; + s[8] += s[15]; + s[11] ^= s[8]; + s[8] ^= (s[11] & s[7]); + s[15] -= s[8]; + s[2] -= s[15]; + s[14] += s[2]; + s[5] += s[14]; + s[11] ^= (s[5] & s[8]); + s[3] ^= s[11] ^ 0xe126a36du; + s[10] += s[3]; + s[14] += s[10]; + s[8] ^= s[14] ^ 0x52400d07u; + s[12] *= (s[8] | 1u); + s[15] ^= (s[12] & s[11]); + s[3] = mh_rotl(s[3] ^ s[15], 1u); + s[12] += s[3] + 0xd372258fu; + s[4] ^= s[12] ^ 0xf284d169u; + s[11] -= s[4]; + s[13] = mh_rotl(s[13], 1u) + s[11]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[0] *= (s[13] | 1u); + s[9] ^= s[0]; + s[1] = s[1] * 0xb05d4c01u + s[9]; + s[8] -= s[1]; + s[1] += s[8]; + s[4] = mh_rotl(s[4], 31u) + s[1]; + s[6] ^= s[4]; + s[7] ^= (s[6] & s[4]); + s[10] += s[7] + 0xc4e27d81u; + s[5] += s[10]; + s[3] *= (s[5] | 1u); + s[12] += s[3] + 0xeb606a4au; + s[11] ^= s[12] ^ 0x25bef1a4u; + s[15] *= (s[11] | 1u); + s[13] += s[15] + 0x2f08e9bbu; + s[14] += s[13]; + s[1] ^= s[14]; + s[9] *= (s[1] | 1u); + s[12] += s[9]; + s[6] *= (s[12] | 1u); + s[7] += (s[6] | s[1]); + s[13] += s[7]; + s[7] = mh_rotl(s[7], 1u) + s[13]; + s[5] = mh_rotl(s[5], 5u) + s[7]; + s[1] *= (s[5] | 1u); + s[14] = (s[14] ^ s[1]) * 0x050194b7u; + s[15] += s[14]; + s[9] = mh_rotl(s[9] ^ s[15], 18u); + s[13] = s[13] * 0xb23e5f33u + s[9]; + s[11] = mh_rotl(s[11], 3u) + s[13]; + s[10] += s[11]; + s[11] *= (s[10] | 1u); + s[3] ^= s[11]; + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[0] ^= (s[6] & s[1]); + s[10] += s[0]; + s[12] = mh_rotl(s[12], 20u) + s[10]; + s[1] *= (s[12] | 1u); + s[6] *= (s[1] | 1u); + s[7] += s[6]; + s[5] ^= s[7]; + s[13] ^= s[5]; + s[7] ^= s[13]; + s[6] ^= s[7]; + s[11] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[11], 9u); + s[8] ^= s[7] ^ 0x619be41bu; + s[4] = (s[4] ^ s[8]) * 0xa41b1063u; + s[8] = (s[8] ^ s[4]) * 0x39fd4b17u; + s[12] += s[8]; + s[0] = mh_rotl(s[0] ^ s[12], 17u); + s[1] += (s[0] | s[12]); + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[15] += s[3]; + s[2] ^= s[15] ^ 0xac74167cu; + s[4] += s[2]; + s[7] += s[4]; + s[3] ^= (s[7] & s[5]); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[15] -= s[4]; + s[3] += (s[15] | s[11]); + s[4] += s[3]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[14] += (s[8] | s[3]); + s[6] = s[6] * 0x88bcb913u + s[14]; + s[2] = mh_rotl(s[2], 26u) + s[6]; + s[9] *= (s[2] | 1u); + s[4] += s[9] + 0xf68758d3u; + s[11] ^= s[4] ^ 0xe7cb0a2du; + s[15] ^= s[11]; + s[0] = mh_rotl(s[0] ^ s[15], 10u); + s[1] ^= s[0] ^ 0x01a1a184u; + s[2] += s[1]; + s[6] = mh_rotl(s[6], 6u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[6], 18u); + s[14] ^= (s[12] & s[13]); + s[15] += s[14]; + s[4] = s[4] * 0x45d3b6d1u + s[15]; + s[15] += s[4] + 0x287abc40u; + s[12] *= (s[15] | 1u); + s[7] *= (s[12] | 1u); + s[8] += s[7]; + s[15] = mh_rotl(s[15] ^ s[8], 31u); + s[14] = (s[14] ^ s[15]) * 0x4d24e02fu; + s[0] += s[14] + 0x2e93de43u; + s[9] ^= s[0]; + s[1] -= s[9]; + s[4] += s[1] + 0x7018f3c1u; + s[5] = mh_rotl(s[5] ^ s[4], 22u); + s[4] = (s[4] ^ s[5]) * 0x5d42c6b7u; + s[1] = mh_rotl(s[1], 19u) + s[4]; + s[10] *= (s[1] | 1u); + s[6] = (s[6] ^ s[10]) * 0xb3b283ddu; + s[0] += (s[6] | s[4]); + s[4] = mh_rotl(s[4] ^ s[0], 10u); + s[2] = mh_rotl(s[2], 18u) + s[4]; + s[3] += s[2] + 0xf72224c1u; + s[2] ^= s[3]; + s[6] ^= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[6]; + s[13] -= s[11]; + s[8] += s[13]; + s[6] += s[8]; + s[2] = mh_rotl(s[2] ^ s[6], 2u); + s[3] = (s[3] ^ s[2]) * 0xe72cd1e5u; + s[10] ^= s[3]; + s[9] = (s[9] ^ s[10]) * 0xdaae888fu; + s[12] = mh_rotl(s[12] ^ s[9], 13u); + s[13] += s[12]; + s[12] += s[13] + 0x1bf086c5u; + s[10] += s[12]; + s[5] = mh_rotl(s[5], 20u) + s[10]; + s[13] = (s[13] ^ s[5]) * 0x332136d3u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[2] += (s[0] | s[7]); + s[1] ^= s[2] ^ 0x906c1640u; + s[8] += (s[1] | s[13]); + s[13] = mh_rotl(s[13] ^ s[8], 27u); + s[4] = (s[4] ^ s[13]) * 0x8f6a7f2du; + s[10] ^= s[4]; + s[6] *= (s[10] | 1u); + s[3] ^= s[6]; + s[2] -= s[3]; + s[10] += (s[2] | s[14]); + s[4] ^= s[10]; + s[7] = mh_rotl(s[7] ^ s[4], 13u); + s[15] += s[7]; + s[6] += s[15]; + s[3] += (s[6] | s[9]); + s[4] = mh_rotl(s[4] ^ s[3], 14u); + s[13] += s[4] + 0xfa50a754u; + s[12] ^= s[13]; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[3] += s[14]; + s[8] -= s[3]; + s[12] = mh_rotl(s[12], 11u) + s[8]; + s[8] = s[8] * 0x68315979u + s[12]; + s[3] ^= s[8] ^ 0x0c36ecd9u; + s[11] *= (s[3] | 1u); + s[15] *= (s[11] | 1u); + s[10] *= (s[15] | 1u); + s[5] ^= s[10]; + s[9] = mh_rotl(s[9], 7u) + s[5]; + s[6] = s[6] * 0xb4800e07u + s[9]; + s[14] += s[6] + 0xe2b19752u; + s[6] += s[14] + 0x5b6cb907u; + s[14] ^= s[6]; + s[3] ^= (s[14] & s[10]); + s[7] *= (s[3] | 1u); + s[1] += s[7] + 0x072137beu; + s[0] ^= (s[1] & s[8]); + s[8] += s[0]; + s[9] += s[8] + 0x02e4e39bu; + s[14] += s[9] + 0xe9bf76a8u; + s[2] ^= s[14]; + s[0] = s[0] * 0x76da5405u + s[2]; + s[10] = mh_rotl(s[10] ^ s[0], 20u); + s[13] += s[10]; + s[7] = mh_rotl(s[7] ^ s[13], 27u); + s[1] += s[7]; + s[12] = mh_rotl(s[12], 4u) + s[1]; + s[5] = s[5] * 0xfc599aedu + s[12]; + s[10] -= s[5]; + s[0] += s[10]; + s[8] = mh_rotl(s[8] ^ s[0], 10u); + s[11] ^= s[8]; + s[14] += s[11]; + s[2] -= s[14]; + s[12] += s[2] + 0x573e5081u; + s[0] ^= s[12] ^ 0x571e5302u; + s[2] ^= s[0]; + s[5] ^= s[2]; + s[8] ^= s[5] ^ 0xdac0ab44u; + s[11] = mh_rotl(s[11] ^ s[8], 6u); + s[0] += s[11]; + s[2] += s[0]; + s[6] ^= s[2]; + s[2] = mh_rotl(s[2], 31u) + s[6]; + s[11] += s[2]; + s[12] += s[11]; + s[2] += s[12] + 0xc9a167b4u; + s[5] += s[2]; + s[2] += s[5]; + s[9] ^= s[2]; + s[12] = (s[12] ^ s[9]) * 0x813582c9u; + s[2] += s[12]; + s[3] = mh_rotl(s[3] ^ s[2], 8u); + s[5] *= (s[3] | 1u); + s[4] += s[5]; + s[3] *= (s[4] | 1u); + s[6] *= (s[3] | 1u); + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[12] += s[3]; + s[5] -= s[12]; + s[3] = s[3] * 0x9fa250c7u + s[5]; + s[15] += (s[3] | s[12]); + s[14] ^= (s[15] & s[11]); + s[6] += s[14]; + s[4] += s[6]; + s[3] = s[3] * 0x07092e11u + s[4]; + s[4] = mh_rotl(s[4] ^ s[3], 9u); + s[11] *= (s[4] | 1u); + s[6] += s[11]; + s[10] *= (s[6] | 1u); + s[6] *= (s[10] | 1u); + s[4] ^= s[6]; + s[12] = mh_rotl(s[12], 28u) + s[4]; + s[10] ^= s[12]; + s[8] += s[10]; + s[15] = (s[15] ^ s[8]) * 0x23fc87d7u; + s[3] += s[15]; + s[8] ^= s[3]; + s[5] = s[5] * 0x4812e6c5u + s[8]; + s[11] -= s[5]; + s[0] *= (s[11] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[12] += (s[10] | s[5]); + s[5] ^= s[12]; + s[0] *= (s[5] | 1u); + s[15] -= s[0]; + s[8] = mh_rotl(s[8], 23u) + s[15]; + s[13] = s[13] * 0x83e86a8bu + s[8]; + s[7] += s[13]; + s[11] = (s[11] ^ s[7]) * 0xd510d0b1u; + s[7] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 11u); + s[13] *= (s[2] | 1u); + s[1] ^= s[13]; + s[9] ^= s[1]; + s[8] -= s[9]; + s[1] += s[8]; + s[2] += s[1]; + s[1] -= s[2]; + s[12] = (s[12] ^ s[1]) * 0x1205ac95u; + s[3] = mh_rotl(s[3], 22u) + s[12]; + s[0] ^= s[3]; + s[1] ^= s[0] ^ 0xa613bb86u; + s[12] += s[1] + 0x5cc04f4bu; + s[3] -= s[12]; + s[6] = (s[6] ^ s[3]) * 0xff2c5e5du; + s[7] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[7], 20u); + s[13] = (s[13] ^ s[2]) * 0xc3c13b61u; + s[6] ^= s[13]; + s[13] ^= s[6]; + s[5] = mh_rotl(s[5], 11u) + s[13]; + s[9] += s[5]; + s[15] ^= s[9]; + s[6] = (s[6] ^ s[15]) * 0xd0ff64bbu; + s[15] = mh_rotl(s[15] ^ s[6], 17u); + s[10] ^= (s[15] & s[5]); + s[13] = mh_rotl(s[13] ^ s[10], 22u); + s[2] += s[13]; + s[5] ^= s[2] ^ 0x434fd088u; + s[7] ^= (s[5] & s[2]); + s[13] ^= s[7]; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[12] += s[3]; + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 8u); + s[5] *= (s[9] | 1u); + s[14] += s[5] + 0x3680f66du; + s[15] += s[14]; + s[12] -= s[15]; + s[4] *= (s[12] | 1u); + s[7] ^= (s[4] & s[6]); + s[3] = mh_rotl(s[3], 2u) + s[7]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[10] += s[6]; + s[4] ^= (s[10] & s[3]); + s[0] ^= s[4]; + s[12] ^= s[0]; + s[15] ^= s[12]; + s[6] += (s[15] | s[7]); + s[3] += s[6]; + s[9] = mh_rotl(s[9], 2u) + s[3]; + s[15] += s[9]; + s[9] = mh_rotl(s[9] ^ s[15], 6u); + s[2] = mh_rotl(s[2], 28u) + s[9]; + s[7] = (s[7] ^ s[2]) * 0x49571301u; + s[10] = mh_rotl(s[10], 8u) + s[7]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[2] *= (s[9] | 1u); + s[7] = s[7] * 0x461c2c9bu + s[2]; + s[4] += s[7]; + s[12] += s[4]; + s[1] = mh_rotl(s[1] ^ s[12], 30u); + s[11] ^= s[1] ^ 0x41684119u; + s[6] ^= s[11]; + s[5] *= (s[6] | 1u); + s[12] ^= s[5] ^ 0x5e252f68u; + s[15] = mh_rotl(s[15] ^ s[12], 13u); + s[0] = s[0] * 0xcfa728bbu + s[15]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[5] = (s[5] ^ s[3]) * 0x4c101bb3u; + s[13] -= s[5]; + s[12] += s[13]; + s[13] -= s[12]; + s[15] ^= s[13]; + s[5] = (s[5] ^ s[15]) * 0xffd85c8du; + s[4] = mh_rotl(s[4], 21u) + s[5]; + s[7] ^= s[4]; + s[12] = mh_rotl(s[12], 16u) + s[7]; + s[11] -= s[12]; + s[3] = mh_rotl(s[3], 17u) + s[11]; + s[7] ^= s[3]; + s[0] -= s[7]; + s[9] ^= s[0]; + s[7] = mh_rotl(s[7], 11u) + s[9]; + s[4] += s[7]; + s[1] ^= s[4]; + s[8] = s[8] * 0xd56caf87u + s[1]; + s[15] -= s[8]; + s[12] ^= s[15]; + s[7] ^= s[12]; + s[15] -= s[7]; + s[10] += s[15] + 0x32455b49u; + s[12] = mh_rotl(s[12] ^ s[10], 6u); + s[5] ^= s[12] ^ 0x024545fbu; + s[12] += s[5]; + s[10] ^= s[12] ^ 0xc7112001u; + s[1] = (s[1] ^ s[10]) * 0xa0829e23u; + s[7] *= (s[1] | 1u); + s[15] = (s[15] ^ s[7]) * 0x42ed41f9u; + s[12] = mh_rotl(s[12], 12u) + s[15]; + s[3] += s[12] + 0xfc638f44u; + s[8] ^= s[3]; + s[12] -= s[8]; + s[8] += (s[12] | s[4]); + s[14] ^= s[8]; + s[4] += s[14]; + s[0] ^= s[4] ^ 0x4890174au; + s[14] += s[0]; + s[10] += s[14]; + s[1] -= s[10]; + s[4] ^= s[1]; + s[7] *= (s[4] | 1u); + s[4] *= (s[7] | 1u); + s[7] ^= s[4]; + s[2] = (s[2] ^ s[7]) * 0x14382f11u; + s[1] *= (s[2] | 1u); + s[15] ^= s[1]; + s[5] = mh_rotl(s[5] ^ s[15], 4u); + s[12] = (s[12] ^ s[5]) * 0x818ffff7u; + s[13] ^= s[12] ^ 0x3c40017du; + s[10] = mh_rotl(s[10], 6u) + s[13]; + s[12] = s[12] * 0x2c1775d5u + s[10]; + s[8] += (s[12] | s[11]); + s[1] = mh_rotl(s[1], 4u) + s[8]; + s[8] += s[1] + 0x0134d33fu; + s[5] = mh_rotl(s[5] ^ s[8], 18u); + s[10] -= s[5]; + s[14] += s[10]; + s[2] = mh_rotl(s[2] ^ s[14], 26u); + s[10] += s[2]; + s[5] = mh_rotl(s[5] ^ s[10], 25u); + s[3] += s[5]; + s[15] -= s[3]; + s[6] ^= (s[15] & s[14]); + s[12] -= s[6]; + s[5] -= s[12]; + s[6] += s[5] + 0x35380dd4u; + s[9] ^= s[6]; + s[4] = mh_rotl(s[4], 12u) + s[9]; + s[12] = (s[12] ^ s[4]) * 0x88440653u; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 22u); + s[11] = mh_rotl(s[11] ^ s[6], 31u); + s[5] = mh_rotl(s[5] ^ s[11], 11u); + s[4] += s[5] + 0xc2928041u; + s[2] -= s[4]; + s[12] ^= s[2]; + s[2] ^= s[12]; + s[10] ^= s[2] ^ 0x18d1c7f6u; + s[12] = (s[12] ^ s[10]) * 0xe5af4085u; + s[0] -= s[12]; + s[13] += s[0] + 0xbab4883eu; + s[5] = mh_rotl(s[5] ^ s[13], 28u); + s[1] = (s[1] ^ s[5]) * 0x22410953u; + s[10] = mh_rotl(s[10], 12u) + s[1]; + s[1] = (s[1] ^ s[10]) * 0xb2399be7u; + s[8] += s[1] + 0x705befa8u; + s[6] = mh_rotl(s[6], 4u) + s[8]; + s[5] ^= s[6]; + s[8] += s[5] + 0x17cc5e00u; + s[4] -= s[8]; + s[5] ^= s[4]; + s[15] += s[5]; + s[8] ^= s[15]; + s[12] += s[8]; + s[3] -= s[12]; + s[11] += s[3]; + s[12] = mh_rotl(s[12], 2u) + s[11]; + s[3] = s[3] * 0xd6adb5cbu + s[12]; + s[6] += s[3]; + s[5] = (s[5] ^ s[6]) * 0x712deca1u; + s[8] += s[5]; + s[13] *= (s[8] | 1u); + s[7] ^= s[13] ^ 0xa85619d9u; + s[4] += s[7] + 0xb2a236bcu; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[0] -= s[8]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[4] ^= s[13]; + s[10] ^= s[4]; + s[5] ^= s[10] ^ 0x37c54528u; + s[15] ^= s[5]; + s[4] ^= s[15] ^ 0x0bec700du; + s[0] ^= s[4]; + s[6] ^= s[0]; + s[11] ^= (s[6] & s[8]); + s[5] ^= (s[11] & s[1]); + s[13] ^= s[5]; + s[2] *= (s[13] | 1u); + s[10] += s[2] + 0xbc7e8198u; + s[12] ^= s[10]; + s[3] ^= s[12]; + s[5] ^= (s[3] & s[1]); + s[8] ^= s[5]; + s[11] += s[8]; + s[7] ^= s[11]; + s[15] += s[7] + 0xfcc72c89u; + s[0] += s[15]; + s[2] = s[2] * 0x7b366e1fu + s[0]; + s[4] = s[4] * 0x410f7c31u + s[2]; + s[14] += s[4]; + s[8] = (s[8] ^ s[14]) * 0x06b5c483u; + s[13] ^= s[8]; + s[4] *= (s[13] | 1u); + s[7] = mh_rotl(s[7], 14u) + s[4]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[9] += s[12]; + s[14] ^= s[9]; + s[0] += s[14] + 0xe2ef88f9u; + s[12] += s[0]; + s[14] *= (s[12] | 1u); + s[1] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[1], 27u); + s[6] -= s[12]; + s[10] += s[6]; + s[11] *= (s[10] | 1u); + s[3] += (s[11] | s[7]); + s[13] += s[3] + 0x2a6dd670u; + s[12] += s[13]; + s[14] = mh_rotl(s[14] ^ s[12], 16u); + s[12] += s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[7] ^= s[3] ^ 0xe2b68ee9u; + s[13] *= (s[7] | 1u); + s[3] ^= (s[13] & s[1]); + s[14] += s[3] + 0x9d70728au; + s[4] += (s[14] | s[2]); + s[0] += s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[3] -= s[10]; + s[11] += s[3] + 0x1b93fbbau; + s[1] = (s[1] ^ s[11]) * 0xad24de07u; + s[7] ^= s[1] ^ 0xf567e775u; + s[11] ^= s[7]; + s[13] = (s[13] ^ s[11]) * 0xb2957691u; + s[7] = mh_rotl(s[7], 20u) + s[13]; + s[13] *= (s[7] | 1u); + s[10] += s[13]; + s[13] ^= s[10]; + s[2] ^= s[13]; + s[6] ^= s[2]; + s[11] += s[6] + 0xa3624a2au; + s[13] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[13], 23u); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[5] -= s[7]; + s[0] ^= s[5]; + s[7] -= s[0]; + s[4] += s[7]; + s[12] += s[4] + 0x2c1f1085u; + s[11] = mh_rotl(s[11] ^ s[12], 14u); + s[9] += s[11] + 0xfdecf3f9u; + s[5] += s[9] + 0x2c06a4fau; + s[0] ^= (s[5] & s[12]); + s[11] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 22u) + s[11]; + s[2] = mh_rotl(s[2], 23u) + s[5]; + s[14] = (s[14] ^ s[2]) * 0x953e8e65u; + s[1] = mh_rotl(s[1], 4u) + s[14]; + s[13] = (s[13] ^ s[1]) * 0xb422e8dfu; + s[5] += s[13]; + s[8] = s[8] * 0xdd24c5ddu + s[5]; + s[15] *= (s[8] | 1u); + s[13] -= s[15]; + s[5] += s[13]; + s[8] += (s[5] | s[0]); + s[4] = (s[4] ^ s[8]) * 0x90f74f8du; + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[8] ^= s[10]; + s[14] = (s[14] ^ s[8]) * 0x68eea367u; + s[13] += s[14] + 0x4bf33e83u; + s[8] = (s[8] ^ s[13]) * 0xe5bb45edu; + s[13] += (s[8] | s[1]); + s[15] ^= s[13] ^ 0xffc7db9bu; + s[3] += s[15]; + s[0] ^= s[3]; + s[15] = mh_rotl(s[15] ^ s[0], 9u); + s[12] -= s[15]; + s[8] ^= s[12]; + s[5] += s[8] + 0x8c8db6c6u; + s[9] -= s[5]; + s[4] ^= s[9]; + s[1] = (s[1] ^ s[4]) * 0xcdb30e8bu; + s[10] += s[1]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[11] *= (s[15] | 1u); + s[8] = (s[8] ^ s[11]) * 0x1ac4b2f9u; + s[11] += s[8]; + s[10] = mh_rotl(s[10] ^ s[11], 2u); + s[1] -= s[10]; + s[6] ^= (s[1] & s[5]); + s[10] = (s[10] ^ s[6]) * 0x7f568bd3u; + s[1] = (s[1] ^ s[10]) * 0x9987ff9bu; + s[2] ^= s[1] ^ 0xc9b72de7u; + s[3] += s[2]; + s[7] = mh_rotl(s[7] ^ s[3], 14u); + s[1] = mh_rotl(s[1] ^ s[7], 17u); + s[11] *= (s[1] | 1u); + s[15] -= s[11]; + s[13] ^= s[15]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[9] += s[13]; + s[1] = s[1] * 0xfeea9fa1u + s[9]; + s[8] = s[8] * 0xcfe61b7fu + s[1]; + s[4] -= s[8]; + s[0] += s[4] + 0x73688400u; +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_5(uint* s) { + s[1] ^= s[0] ^ 0x7be05e0cu; + s[8] ^= s[1] ^ 0xbb15eaa7u; + s[3] *= (s[8] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[6] ^= s[10]; + s[1] += s[6]; + s[2] = (s[2] ^ s[1]) * 0x315dc983u; + s[3] += s[2]; + s[12] += s[3] + 0x503a8a69u; + s[7] ^= (s[12] & s[8]); + s[11] = (s[11] ^ s[7]) * 0x99203cd1u; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[5] += s[13]; + s[13] = (s[13] ^ s[5]) * 0x290906f1u; + s[6] += (s[13] | s[11]); + s[14] *= (s[6] | 1u); + s[10] += s[14]; + s[12] = mh_rotl(s[12] ^ s[10], 10u); + s[11] += s[12]; + s[1] ^= (s[11] & s[8]); + s[14] += s[1] + 0xb8346947u; + s[10] = s[10] * 0x973f37cdu + s[14]; + s[11] -= s[10]; + s[8] *= (s[11] | 1u); + s[14] ^= s[8]; + s[8] += s[14]; + s[0] = (s[0] ^ s[8]) * 0x82fd2f6du; + s[3] ^= (s[0] & s[5]); + s[10] += s[3]; + s[1] -= s[10]; + s[0] ^= s[1]; + s[5] -= s[0]; + s[11] *= (s[5] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 4u); + s[5] -= s[9]; + s[12] ^= s[5]; + s[15] = mh_rotl(s[15], 19u) + s[12]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 23u); + s[10] ^= s[15] ^ 0x3e4fd17bu; + s[7] ^= (s[10] & s[13]); + s[1] ^= s[7]; + s[10] = (s[10] ^ s[1]) * 0xa58c234du; + s[2] += s[10]; + s[7] += s[2]; + s[14] = mh_rotl(s[14] ^ s[7], 14u); + s[15] ^= s[14]; + s[11] ^= s[15] ^ 0x031afa2eu; + s[8] ^= (s[11] & s[12]); + s[4] = mh_rotl(s[4] ^ s[8], 14u); + s[15] *= (s[4] | 1u); + s[14] *= (s[15] | 1u); + s[1] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[1], 17u); + s[6] -= s[0]; + s[11] ^= s[6]; + s[7] *= (s[11] | 1u); + s[15] += s[7]; + s[1] = (s[1] ^ s[15]) * 0x65c90267u; + s[9] ^= s[1]; + s[12] = (s[12] ^ s[9]) * 0x37b05dbdu; + s[5] += s[12]; + s[1] += s[5] + 0x9ef7f880u; + s[13] -= s[1]; + s[8] = (s[8] ^ s[13]) * 0x4dccc6e3u; + s[15] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 15u) + s[15]; + s[4] = s[4] * 0xa7087673u + s[10]; + s[7] += s[4]; + s[4] = mh_rotl(s[4], 25u) + s[7]; + s[1] = s[1] * 0xd0d20effu + s[4]; + s[11] = mh_rotl(s[11], 3u) + s[1]; + s[15] ^= (s[11] & s[10]); + s[6] += s[15]; + s[10] *= (s[6] | 1u); + s[0] += s[10]; + s[15] ^= s[0]; + s[3] += (s[15] | s[13]); + s[8] += s[3]; + s[13] = s[13] * 0x647918d1u + s[8]; + s[4] -= s[13]; + s[1] -= s[4]; + s[8] -= s[1]; + s[0] += s[8]; + s[4] ^= s[0]; + s[2] = mh_rotl(s[2], 16u) + s[4]; + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[13] -= s[5]; + s[14] ^= s[13]; + s[13] += s[14] + 0x09e91881u; + s[10] = mh_rotl(s[10], 1u) + s[13]; + s[15] *= (s[10] | 1u); + s[3] = mh_rotl(s[3], 22u) + s[15]; + s[5] *= (s[3] | 1u); + s[0] = mh_rotl(s[0], 13u) + s[5]; + s[2] ^= s[0]; + s[7] ^= s[2]; + s[4] += s[7]; + s[8] += s[4]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0xf334efabu; + s[11] ^= s[4]; + s[1] -= s[11]; + s[5] += s[1]; + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[7] = mh_rotl(s[7], 2u) + s[14]; + s[12] = s[12] * 0x9d3fac25u + s[7]; + s[10] = (s[10] ^ s[12]) * 0xd7f82753u; + s[12] = (s[12] ^ s[10]) * 0xa500b1e9u; + s[7] ^= (s[12] & s[11]); + s[3] += s[7]; + s[6] += s[3]; + s[13] ^= (s[6] & s[0]); + s[15] *= (s[13] | 1u); + s[8] ^= s[15]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[4] ^= s[15] ^ 0xbf1018b9u; + s[15] *= (s[4] | 1u); + s[13] += s[15] + 0xa0aadb65u; + s[3] = s[3] * 0x1c2c8781u + s[13]; + s[12] += s[3]; + s[4] ^= (s[12] & s[6]); + s[5] += s[4]; + s[0] ^= s[5] ^ 0x15727cfcu; + s[1] ^= s[0]; + s[3] ^= s[1] ^ 0x8ec257dau; + s[12] += s[3]; + s[4] += s[12]; + s[1] ^= (s[4] & s[2]); + s[14] = mh_rotl(s[14], 30u) + s[1]; + s[4] ^= s[14] ^ 0x871677edu; + s[3] -= s[4]; + s[12] ^= s[3] ^ 0xafa32cfbu; + s[0] *= (s[12] | 1u); + s[2] += s[0]; + s[10] -= s[2]; + s[15] ^= s[10] ^ 0xfb3ab53eu; + s[0] += s[15] + 0xd703e4c6u; + s[13] += s[0] + 0xdd7d064eu; + s[4] ^= s[13]; + s[1] ^= s[4]; + s[7] = mh_rotl(s[7] ^ s[1], 18u); + s[5] = mh_rotl(s[5] ^ s[7], 5u); + s[13] -= s[5]; + s[5] += s[13]; + s[2] *= (s[5] | 1u); + s[7] -= s[2]; + s[0] *= (s[7] | 1u); + s[7] ^= s[0]; + s[11] ^= s[7] ^ 0x47fc5334u; + s[10] -= s[11]; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[7] = (s[7] ^ s[14]) * 0xba5f2ba9u; + s[0] += s[7]; + s[9] ^= s[0]; + s[12] = mh_rotl(s[12] ^ s[9], 31u); + s[15] += s[12]; + s[11] += s[15] + 0x67321a5fu; + s[14] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[14], 20u); + s[0] *= (s[2] | 1u); + s[10] += (s[0] | s[6]); + s[1] ^= s[10]; + s[10] += s[1]; + s[15] = s[15] * 0x968038e9u + s[10]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[4], 30u); + s[1] = mh_rotl(s[1], 9u) + s[7]; + s[7] += s[1] + 0x36fd51c7u; + s[0] = mh_rotl(s[0] ^ s[7], 4u); + s[9] = mh_rotl(s[9] ^ s[0], 13u); + s[0] = (s[0] ^ s[9]) * 0xe60c1fa9u; + s[3] = s[3] * 0xb184ef99u + s[0]; + s[14] += s[3]; + s[11] = mh_rotl(s[11], 3u) + s[14]; + s[1] += s[11]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[6] -= s[15]; + s[7] = (s[7] ^ s[6]) * 0x55b55f6fu; + s[15] *= (s[7] | 1u); + s[4] += (s[15] | s[13]); + s[5] -= s[4]; + s[7] = s[7] * 0xfbc2da35u + s[5]; + s[15] = (s[15] ^ s[7]) * 0x1fd2b55fu; + s[0] = mh_rotl(s[0] ^ s[15], 8u); + s[7] = mh_rotl(s[7], 15u) + s[0]; + s[5] = (s[5] ^ s[7]) * 0x4f355b4bu; + s[4] -= s[5]; + s[1] += (s[4] | s[10]); + s[0] -= s[1]; + s[4] ^= s[0]; + s[15] ^= s[4]; + s[7] = mh_rotl(s[7], 28u) + s[15]; + s[3] ^= s[7] ^ 0xb688911au; + s[1] += s[3] + 0x1c2be1ceu; + s[0] ^= s[1]; + s[7] += s[0] + 0x2850aa80u; + s[9] = mh_rotl(s[9] ^ s[7], 10u); + s[6] += s[9]; + s[13] ^= s[6] ^ 0xa94fde4bu; + s[1] = mh_rotl(s[1] ^ s[13], 6u); + s[13] ^= s[1] ^ 0x62707293u; + s[5] ^= s[13]; + s[15] += s[5]; + s[13] = s[13] * 0x229b940bu + s[15]; + s[4] ^= s[13] ^ 0x1b81e180u; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[14] += (s[7] | s[13]); + s[6] ^= s[14]; + s[1] += (s[6] | s[14]); + s[0] *= (s[1] | 1u); + s[13] ^= (s[0] & s[2]); + s[11] = (s[11] ^ s[13]) * 0x416d09a1u; + s[15] = s[15] * 0xe913f3ddu + s[11]; + s[1] -= s[15]; + s[15] ^= s[1]; + s[6] ^= s[15]; + s[8] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[8], 26u); + s[15] = s[15] * 0xc4f501e3u + s[2]; + s[10] = mh_rotl(s[10], 19u) + s[15]; + s[4] *= (s[10] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 1u); + s[15] ^= s[5] ^ 0x9b7a52afu; + s[3] *= (s[15] | 1u); + s[1] = (s[1] ^ s[3]) * 0x45c760cdu; + s[8] += s[1]; + s[5] = mh_rotl(s[5], 23u) + s[8]; + s[0] += (s[5] | s[2]); + s[14] ^= s[0] ^ 0xe21ab661u; + s[9] += s[14]; + s[2] *= (s[9] | 1u); + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[7] = mh_rotl(s[7] ^ s[1], 2u); + s[14] = mh_rotl(s[14] ^ s[7], 30u); + s[15] += s[14] + 0x25ec367cu; + s[1] += s[15]; + s[4] = mh_rotl(s[4], 30u) + s[1]; + s[6] += s[4] + 0x00a140beu; + s[11] ^= s[6]; + s[3] = mh_rotl(s[3] ^ s[11], 24u); + s[8] = (s[8] ^ s[3]) * 0xa4445dd5u; + s[11] ^= s[8]; + s[4] += s[11] + 0xdd82d9edu; + s[7] = mh_rotl(s[7], 20u) + s[4]; + s[10] = (s[10] ^ s[7]) * 0xbc2a9345u; + s[15] = s[15] * 0xe9d04645u + s[10]; + s[4] += s[15]; + s[0] += s[4]; + s[5] = mh_rotl(s[5] ^ s[0], 20u); + s[8] -= s[5]; + s[13] -= s[8]; + s[8] = s[8] * 0xdbaee3dfu + s[13]; + s[7] = s[7] * 0xa78437ddu + s[8]; + s[5] *= (s[7] | 1u); + s[11] = (s[11] ^ s[5]) * 0x7697be93u; + s[8] *= (s[11] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[10] = mh_rotl(s[10] ^ s[9], 4u); + s[4] += s[10] + 0xcb367e30u; + s[7] += (s[4] | s[1]); + s[8] = mh_rotl(s[8] ^ s[7], 1u); + s[9] = (s[9] ^ s[8]) * 0xebbaa385u; + s[8] += s[9]; + s[7] = mh_rotl(s[7] ^ s[8], 30u); + s[13] = mh_rotl(s[13] ^ s[7], 28u); + s[3] ^= s[13] ^ 0x0da68544u; + s[6] *= (s[3] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[6] = mh_rotl(s[6] ^ s[15], 17u); + s[3] ^= s[6]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[12] = s[12] * 0xc2ae0b9du + s[11]; + s[1] += s[12]; + s[12] += s[1]; + s[2] ^= s[12] ^ 0x7256c79fu; + s[10] = mh_rotl(s[10] ^ s[2], 22u); + s[4] += s[10]; + s[8] = mh_rotl(s[8] ^ s[4], 3u); + s[4] = (s[4] ^ s[8]) * 0x8220660bu; + s[3] -= s[4]; + s[1] ^= s[3]; + s[14] ^= (s[1] & s[4]); + s[5] += s[14]; + s[6] = mh_rotl(s[6], 6u) + s[5]; + s[12] = (s[12] ^ s[6]) * 0xdd90e2b3u; + s[5] = mh_rotl(s[5], 16u) + s[12]; + s[13] += s[5]; + s[2] -= s[13]; + s[5] = mh_rotl(s[5], 28u) + s[2]; + s[0] -= s[5]; + s[14] = (s[14] ^ s[0]) * 0xd9818695u; + s[3] = s[3] * 0x56cff173u + s[14]; + s[12] += s[3]; + s[7] ^= s[12]; + s[4] += s[7] + 0xc664354au; + s[10] ^= s[4]; + s[12] = mh_rotl(s[12] ^ s[10], 21u); + s[5] += (s[12] | s[10]); + s[13] ^= s[5]; + s[3] -= s[13]; + s[10] = (s[10] ^ s[3]) * 0x0f3ce629u; + s[2] += s[10]; + s[6] = mh_rotl(s[6], 27u) + s[2]; + s[3] = mh_rotl(s[3], 23u) + s[6]; + s[8] -= s[3]; + s[2] *= (s[8] | 1u); + s[5] ^= s[2] ^ 0x310625e1u; + s[8] -= s[5]; + s[0] += s[8]; + s[15] *= (s[0] | 1u); + s[6] = (s[6] ^ s[15]) * 0x427d27bbu; + s[11] += s[6] + 0x76730d6fu; + s[15] += s[11] + 0xdac6c08au; + s[7] = mh_rotl(s[7] ^ s[15], 13u); + s[14] += s[7] + 0x6911002du; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[8] = s[8] * 0x56b023efu + s[4]; + s[4] ^= s[8] ^ 0x9fd3970fu; + s[5] += s[4] + 0x6abd4154u; + s[7] += (s[5] | s[6]); + s[6] ^= s[7]; + s[10] += s[6]; + s[9] = (s[9] ^ s[10]) * 0xe4b1ea8bu; + s[6] ^= s[9]; + s[7] ^= s[6] ^ 0xe75c3c42u; + s[10] = (s[10] ^ s[7]) * 0xb59266bbu; + s[2] *= (s[10] | 1u); + s[8] ^= s[2]; + s[14] = (s[14] ^ s[8]) * 0xdbf4259fu; + s[2] = s[2] * 0x7009386du + s[14]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 25u); + s[2] ^= s[13] ^ 0x60dba7dau; + s[5] = mh_rotl(s[5] ^ s[2], 28u); + s[4] ^= s[5]; + s[11] += s[4] + 0xeb951dd9u; + s[4] ^= s[11]; + s[13] ^= s[4] ^ 0xebf6468au; + s[9] = (s[9] ^ s[13]) * 0xdd79814du; + s[3] = (s[3] ^ s[9]) * 0x8e5d0c8du; + s[4] = mh_rotl(s[4] ^ s[3], 11u); + s[6] ^= s[4]; + s[12] = (s[12] ^ s[6]) * 0x54bdc49fu; + s[2] ^= s[12]; + s[6] = mh_rotl(s[6], 21u) + s[2]; + s[3] = mh_rotl(s[3], 4u) + s[6]; + s[7] = mh_rotl(s[7], 1u) + s[3]; + s[8] += s[7]; + s[7] ^= s[8] ^ 0xea9b7589u; + s[14] = (s[14] ^ s[7]) * 0x97ae5521u; + s[4] += s[14]; + s[12] = (s[12] ^ s[4]) * 0x22320c0du; + s[11] ^= s[12] ^ 0x497dff74u; + s[7] ^= s[11]; + s[3] *= (s[7] | 1u); + s[13] = mh_rotl(s[13] ^ s[3], 19u); + s[5] ^= s[13]; + s[15] += (s[5] | s[1]); + s[5] ^= s[15]; + s[2] = s[2] * 0xbadcbfe5u + s[5]; + s[6] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[6], 9u); + s[6] += s[9] + 0xf8e24c5bu; + s[4] -= s[6]; + s[1] ^= s[4]; + s[13] -= s[1]; + s[6] ^= s[13]; + s[14] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[14], 15u); + s[0] = (s[0] ^ s[4]) * 0x5cf11fa1u; + s[3] = mh_rotl(s[3] ^ s[0], 9u); + s[15] *= (s[3] | 1u); + s[7] *= (s[15] | 1u); + s[8] += s[7] + 0x2e6f71e5u; + s[5] = mh_rotl(s[5], 26u) + s[8]; + s[7] ^= s[5]; + s[0] = (s[0] ^ s[7]) * 0x5ea96101u; + s[1] ^= s[0] ^ 0xd397e563u; + s[6] *= (s[1] | 1u); + s[10] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[10], 24u); + s[0] -= s[7]; + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] = s[12] * 0x34af385du + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[12] ^= s[4]; + s[7] -= s[12]; + s[6] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 19u); + s[0] = mh_rotl(s[0] ^ s[7], 11u); + s[5] -= s[0]; + s[11] ^= s[5]; + s[0] ^= s[11] ^ 0xbe1c3b74u; + s[5] += (s[0] | s[9]); + s[11] += (s[5] | s[4]); + s[15] += s[11]; + s[10] ^= s[15]; + s[12] = s[12] * 0x543326f5u + s[10]; + s[14] = s[14] * 0x91113863u + s[12]; + s[1] = (s[1] ^ s[14]) * 0xc15f4501u; + s[10] += s[1]; + s[9] += s[10]; + s[8] += s[9] + 0x7e4a0930u; + s[15] += s[8]; + s[5] += s[15]; + s[1] -= s[5]; + s[15] += s[1]; + s[6] = mh_rotl(s[6] ^ s[15], 22u); + s[2] ^= (s[6] & s[10]); + s[1] = (s[1] ^ s[2]) * 0xfa5dde9bu; + s[13] = mh_rotl(s[13] ^ s[1], 8u); + s[1] -= s[13]; + s[9] += s[1] + 0x3f1d7c19u; + s[2] *= (s[9] | 1u); + s[8] = (s[8] ^ s[2]) * 0xde05403bu; + s[9] += s[8]; + s[6] += s[9]; + s[13] = (s[13] ^ s[6]) * 0xcb53bdfdu; + s[14] *= (s[13] | 1u); + s[10] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 1u); + s[9] = s[9] * 0xc38dfca1u + s[13]; + s[15] = mh_rotl(s[15] ^ s[9], 24u); + s[2] *= (s[15] | 1u); + s[15] ^= s[2] ^ 0x4f0903bau; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[10] = (s[10] ^ s[2]) * 0xa4b3a383u; + s[6] *= (s[10] | 1u); + s[13] *= (s[6] | 1u); + s[1] *= (s[13] | 1u); + s[11] = (s[11] ^ s[1]) * 0xbbb47281u; + s[6] += s[11]; + s[12] += s[6]; + s[0] ^= s[12]; + s[12] -= s[0]; + s[4] += s[12]; + s[11] ^= s[4] ^ 0x4ae1d374u; + s[1] ^= s[11]; + s[6] ^= (s[1] & s[5]); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0xd088ac95u; + s[12] = (s[12] ^ s[6]) * 0xacf99fa9u; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[11] = mh_rotl(s[11], 21u) + s[14]; + s[2] ^= s[11] ^ 0x83eccd1eu; + s[15] ^= s[2]; + s[8] = s[8] * 0x51ffe091u + s[15]; + s[2] += (s[8] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 25u); + s[5] = mh_rotl(s[5] ^ s[13], 18u); + s[9] -= s[5]; + s[6] = (s[6] ^ s[9]) * 0xeb0ab863u; + s[10] ^= s[6] ^ 0xadb4a85eu; + s[11] += s[10]; + s[15] = mh_rotl(s[15], 25u) + s[11]; + s[8] ^= s[15] ^ 0x611f8ebbu; + s[4] += s[8] + 0x6c1de9f1u; + s[14] *= (s[4] | 1u); + s[3] *= (s[14] | 1u); + s[14] += (s[3] | s[8]); + s[10] ^= s[14]; + s[12] ^= s[10] ^ 0x1379b7f0u; + s[13] += s[12]; + s[6] -= s[13]; + s[5] += s[6]; + s[14] ^= s[5] ^ 0x86fda0bcu; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[14] += s[4] + 0xe3857cfau; + s[5] ^= s[14] ^ 0x983d6f15u; + s[2] *= (s[5] | 1u); + s[11] = (s[11] ^ s[2]) * 0x71d715abu; + s[15] += s[11] + 0x954d0d31u; + s[3] ^= (s[15] & s[13]); + s[0] = mh_rotl(s[0], 31u) + s[3]; + s[3] *= (s[0] | 1u); + s[12] = s[12] * 0x553df879u + s[3]; + s[14] = mh_rotl(s[14] ^ s[12], 27u); + s[7] = mh_rotl(s[7] ^ s[14], 17u); + s[0] += (s[7] | s[5]); + s[3] ^= s[0]; + s[5] ^= (s[3] & s[11]); + s[2] ^= s[5] ^ 0xdf79b0e2u; + s[6] = mh_rotl(s[6], 7u) + s[2]; + s[12] -= s[6]; + s[10] += s[12]; + s[11] ^= s[10] ^ 0xda8b8a64u; + s[0] ^= s[11]; + s[1] = (s[1] ^ s[0]) * 0xf8a8b0d1u; + s[4] = mh_rotl(s[4] ^ s[1], 3u); + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[7] = (s[7] ^ s[3]) * 0x411cdf35u; + s[6] += s[7]; + s[10] -= s[6]; + s[5] = mh_rotl(s[5], 16u) + s[10]; + s[4] += s[5]; + s[1] += s[4]; + s[0] ^= (s[1] & s[6]); + s[13] ^= s[0]; + s[9] = mh_rotl(s[9], 27u) + s[13]; + s[6] = mh_rotl(s[6], 3u) + s[9]; + s[1] += s[6] + 0xcea64d05u; + s[3] = s[3] * 0xeebb97adu + s[1]; + s[14] ^= s[3] ^ 0x892c8d98u; + s[11] ^= (s[14] & s[9]); + s[0] = (s[0] ^ s[11]) * 0xdff5cedfu; + s[14] -= s[0]; + s[6] -= s[14]; + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[11] += (s[3] | s[9]); + s[7] = mh_rotl(s[7] ^ s[11], 22u); + s[10] = mh_rotl(s[10], 2u) + s[7]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[1] -= s[4]; + s[0] += s[1] + 0x775d0372u; + s[13] *= (s[0] | 1u); + s[3] += s[13]; + s[4] += (s[3] | s[9]); + s[12] = (s[12] ^ s[4]) * 0x687c0365u; + s[13] = mh_rotl(s[13], 2u) + s[12]; + s[4] = (s[4] ^ s[13]) * 0x35a16ec5u; + s[9] ^= s[4]; + s[12] += s[9]; + s[14] -= s[12]; + s[5] *= (s[14] | 1u); + s[14] *= (s[5] | 1u); + s[13] += (s[14] | s[4]); + s[0] -= s[13]; + s[15] = s[15] * 0x621c0ea7u + s[0]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[15] = (s[15] ^ s[6]) * 0x05d14bc7u; + s[11] -= s[15]; + s[9] += (s[11] | s[13]); + s[4] += s[9]; + s[12] *= (s[4] | 1u); + s[11] ^= s[12]; + s[7] = mh_rotl(s[7], 28u) + s[11]; + s[5] = mh_rotl(s[5] ^ s[7], 12u); + s[8] = mh_rotl(s[8] ^ s[5], 17u); + s[10] ^= s[8]; + s[13] ^= s[10]; + s[7] *= (s[13] | 1u); + s[8] += s[7]; + s[15] ^= s[8]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[0] = (s[0] ^ s[4]) * 0xd8e75b75u; + s[8] -= s[0]; + s[11] += s[8]; + s[13] -= s[11]; + s[9] ^= s[13]; + s[12] = (s[12] ^ s[9]) * 0x3899fbc3u; + s[0] = mh_rotl(s[0], 17u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 26u); + s[1] = mh_rotl(s[1] ^ s[4], 23u); + s[14] = mh_rotl(s[14] ^ s[1], 25u); + s[12] = mh_rotl(s[12] ^ s[14], 27u); + s[11] -= s[12]; + s[7] ^= s[11]; + s[11] -= s[7]; + s[15] *= (s[11] | 1u); + s[7] += (s[15] | s[11]); + s[3] ^= s[7] ^ 0xfd1ba1b5u; + s[13] += s[3]; + s[14] += s[13] + 0x405242e4u; + s[10] = (s[10] ^ s[14]) * 0xeced21d1u; + s[0] -= s[10]; + s[1] = (s[1] ^ s[0]) * 0xcb862135u; + s[5] += s[1]; + s[2] -= s[5]; + s[15] = s[15] * 0x499907b3u + s[2]; + s[11] += (s[15] | s[8]); + s[14] ^= s[11]; + s[7] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[7], 27u); + s[10] += s[12] + 0x8f39e74bu; + s[5] = (s[5] ^ s[10]) * 0x2440407du; + s[1] += s[5]; + s[12] += s[1]; + s[4] *= (s[12] | 1u); + s[1] += s[4] + 0xcdf92480u; + s[15] ^= s[1]; + s[4] += s[15]; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[4] = mh_rotl(s[4], 6u) + s[1]; + s[0] *= (s[4] | 1u); + s[1] ^= s[0]; + s[7] = s[7] * 0xcac7e2ddu + s[1]; + s[11] += s[7]; + s[12] ^= s[11]; + s[15] = s[15] * 0x413393afu + s[12]; + s[8] = (s[8] ^ s[15]) * 0x25fe3939u; + s[14] *= (s[8] | 1u); + s[13] = s[13] * 0x98224c21u + s[14]; + s[8] -= s[13]; + s[2] ^= s[8] ^ 0xdc7b1f4au; + s[1] += s[2]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[8] -= s[10]; + s[11] *= (s[8] | 1u); + s[13] *= (s[11] | 1u); + s[14] += (s[13] | s[5]); + s[12] += (s[14] | s[10]); + s[10] += s[12] + 0xb0848c0bu; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 20u); + s[13] ^= s[4]; + s[7] *= (s[13] | 1u); + s[13] = mh_rotl(s[13] ^ s[7], 21u); + s[14] = mh_rotl(s[14] ^ s[13], 26u); + s[12] ^= s[14]; + s[8] += s[12]; + s[0] += s[8]; + s[12] = s[12] * 0xd28af0afu + s[0]; + s[8] += s[12] + 0xd77f1cfcu; + s[9] *= (s[8] | 1u); + s[14] *= (s[9] | 1u); + s[3] -= s[14]; + s[2] += s[3]; + s[12] ^= s[2]; + s[8] -= s[12]; + s[5] += s[8]; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[2] ^= s[15]; + s[5] -= s[2]; + s[8] ^= s[5]; + s[1] += s[8]; + s[0] ^= s[1]; + s[12] += s[0]; + s[7] ^= (s[12] & s[3]); + s[13] += (s[7] | s[0]); + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[2] = (s[2] ^ s[12]) * 0xfd12ecd1u; + s[15] *= (s[2] | 1u); + s[0] ^= s[15]; + s[2] = mh_rotl(s[2], 27u) + s[0]; + s[6] += s[2]; + s[10] += s[6]; + s[0] ^= s[10]; + s[7] = mh_rotl(s[7], 29u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[7], 19u); + s[3] = (s[3] ^ s[9]) * 0xff04d05fu; + s[13] += (s[3] | s[4]); + s[15] ^= s[13]; + s[7] += s[15]; + s[14] ^= s[7]; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[3] += (s[4] | s[6]); + s[12] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 30u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[8] += s[1] + 0x0467b529u; + s[9] += s[8]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[7] ^= (s[15] & s[8]); + s[8] = (s[8] ^ s[7]) * 0x278c5dfdu; + s[3] ^= s[8] ^ 0xbc598dedu; + s[1] = mh_rotl(s[1] ^ s[3], 9u); + s[4] += s[1]; + s[3] += (s[4] | s[13]); + s[10] = (s[10] ^ s[3]) * 0xcae4be05u; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[4] ^= s[12]; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[6] = mh_rotl(s[6] ^ s[7], 9u); + s[8] = (s[8] ^ s[6]) * 0xd9f36acdu; + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[11] ^= (s[7] & s[14]); + s[14] = mh_rotl(s[14], 3u) + s[11]; + s[8] = s[8] * 0x0ae9038fu + s[14]; + s[3] *= (s[8] | 1u); + s[13] -= s[3]; + s[5] = s[5] * 0x70529de3u + s[13]; + s[3] ^= (s[5] & s[6]); + s[14] -= s[3]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[13] += (s[0] | s[5]); + s[2] *= (s[13] | 1u); + s[4] -= s[2]; + s[1] = mh_rotl(s[1], 7u) + s[4]; + s[10] += s[1]; + s[15] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[15], 24u); + s[15] ^= s[11]; + s[10] *= (s[15] | 1u); + s[3] ^= s[10] ^ 0xcb85082cu; + s[10] ^= s[3] ^ 0xf9bf9766u; + s[11] -= s[10]; + s[3] = (s[3] ^ s[11]) * 0x87f2ce8bu; + s[8] = s[8] * 0x0ea0fcc7u + s[3]; + s[1] = mh_rotl(s[1], 9u) + s[8]; + s[10] -= s[1]; + s[6] *= (s[10] | 1u); + s[11] = s[11] * 0x0c531b4bu + s[6]; + s[8] += s[11]; + s[15] -= s[8]; + s[3] *= (s[15] | 1u); + s[11] = (s[11] ^ s[3]) * 0xad08649fu; + s[9] ^= s[11]; + s[14] -= s[9]; + s[12] += s[14]; + s[9] += s[12] + 0x232cf99eu; + s[7] ^= s[9]; + s[15] ^= (s[7] & s[8]); + s[2] += s[15] + 0x32beef7bu; + s[11] = mh_rotl(s[11], 8u) + s[2]; + s[14] -= s[11]; + s[10] += (s[14] | s[12]); + s[12] = s[12] * 0xa6ec34d5u + s[10]; + s[5] = mh_rotl(s[5] ^ s[12], 7u); + s[8] = mh_rotl(s[8], 25u) + s[5]; + s[10] ^= s[8] ^ 0xefb5c226u; + s[3] = mh_rotl(s[3] ^ s[10], 16u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[6] ^= s[4]; + s[14] = mh_rotl(s[14], 28u) + s[6]; + s[5] = mh_rotl(s[5], 5u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[5], 4u); + s[5] += s[3] + 0xe3dab3fbu; + s[15] = mh_rotl(s[15], 3u) + s[5]; + s[14] += (s[15] | s[9]); + s[0] += (s[14] | s[2]); + s[1] += (s[0] | s[15]); + s[6] *= (s[1] | 1u); + s[13] += (s[6] | s[14]); +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_6(uint* s) { + s[5] = mh_rotl(s[5], 3u) + s[0]; + s[2] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[2], 11u); + s[11] ^= s[9] ^ 0x39e32e1du; + s[3] += s[11]; + s[1] = mh_rotl(s[1] ^ s[3], 22u); + s[5] ^= s[1]; + s[8] = mh_rotl(s[8], 4u) + s[5]; + s[3] = mh_rotl(s[3] ^ s[8], 12u); + s[4] += s[3]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[3] += s[2]; + s[8] -= s[3]; + s[5] -= s[8]; + s[1] *= (s[5] | 1u); + s[9] ^= s[1] ^ 0xd81d55beu; + s[7] += s[9]; + s[3] += s[7]; + s[4] = mh_rotl(s[4] ^ s[3], 15u); + s[5] -= s[4]; + s[0] *= (s[5] | 1u); + s[3] = (s[3] ^ s[0]) * 0x4a19e371u; + s[7] = mh_rotl(s[7] ^ s[3], 10u); + s[11] += s[7]; + s[8] = s[8] * 0x259e0d2fu + s[11]; + s[3] += s[8] + 0xac463d29u; + s[9] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[9], 8u); + s[6] *= (s[10] | 1u); + s[1] ^= s[6] ^ 0xb275cab7u; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[10] *= (s[12] | 1u); + s[7] -= s[10]; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[3] += s[4] + 0xc15298f3u; + s[14] += s[3]; + s[0] += s[14] + 0xb147fc8bu; + s[8] = (s[8] ^ s[0]) * 0x2016760du; + s[6] = (s[6] ^ s[8]) * 0x54e0697fu; + s[1] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[1], 11u); + s[2] += (s[3] | s[13]); + s[8] ^= s[2]; + s[5] += s[8]; + s[8] ^= (s[5] & s[4]); + s[13] *= (s[8] | 1u); + s[11] -= s[13]; + s[5] ^= s[11]; + s[13] = mh_rotl(s[13], 28u) + s[5]; + s[14] *= (s[13] | 1u); + s[11] ^= s[14] ^ 0x301ae49du; + s[13] -= s[11]; + s[5] += s[13]; + s[9] ^= s[5]; + s[2] += s[9]; + s[5] ^= s[2]; + s[6] *= (s[5] | 1u); + s[2] += s[6]; + s[10] -= s[2]; + s[6] = s[6] * 0x7f506861u + s[10]; + s[12] ^= s[6] ^ 0xda5f5b6du; + s[6] = s[6] * 0x38d5001du + s[12]; + s[1] ^= s[6] ^ 0xc8f1c1dcu; + s[9] += s[1]; + s[3] = (s[3] ^ s[9]) * 0x8e4a88a5u; + s[7] = mh_rotl(s[7], 18u) + s[3]; + s[9] ^= s[7] ^ 0xbab40f93u; + s[13] += s[9]; + s[6] += s[13]; + s[11] ^= s[6]; + s[3] ^= s[11]; + s[10] *= (s[3] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 4u); + s[14] += s[6] + 0x0249afdau; + s[1] = s[1] * 0x86ebf639u + s[14]; + s[6] = mh_rotl(s[6], 25u) + s[1]; + s[10] *= (s[6] | 1u); + s[6] ^= s[10]; + s[3] -= s[6]; + s[1] ^= s[3] ^ 0xd9ca3a4fu; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[9] ^= s[5]; + s[5] = s[5] * 0x1457845du + s[9]; + s[11] = mh_rotl(s[11], 10u) + s[5]; + s[2] ^= (s[11] & s[3]); + s[15] *= (s[2] | 1u); + s[4] ^= s[15]; + s[7] += s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 1u); + s[0] = (s[0] ^ s[15]) * 0xb010e4d3u; + s[4] = mh_rotl(s[4] ^ s[0], 20u); + s[7] ^= (s[4] & s[3]); + s[2] ^= s[7]; + s[3] ^= s[2]; + s[11] ^= s[3]; + s[1] ^= s[11] ^ 0x35463538u; + s[7] ^= (s[1] & s[11]); + s[13] += s[7]; + s[1] = (s[1] ^ s[13]) * 0xc1e69efbu; + s[5] = mh_rotl(s[5], 16u) + s[1]; + s[1] = s[1] * 0x2e9b0e05u + s[5]; + s[15] -= s[1]; + s[12] += s[15]; + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[9] ^= s[7] ^ 0x990eced1u; + s[13] += s[9]; + s[8] += s[13]; + s[6] += s[8]; + s[14] ^= s[6] ^ 0xc88f98bdu; + s[1] += s[14]; + s[13] *= (s[1] | 1u); + s[5] ^= s[13]; + s[7] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 21u) + s[7]; + s[12] = mh_rotl(s[12], 1u) + s[1]; + s[7] *= (s[12] | 1u); + s[9] ^= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[9]; + s[4] ^= s[6] ^ 0x74363532u; + s[2] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[2], 25u); + s[0] *= (s[9] | 1u); + s[12] ^= s[0] ^ 0x0441459fu; + s[13] ^= s[12] ^ 0x662ed979u; + s[3] -= s[13]; + s[4] ^= s[3] ^ 0x1b2d8a07u; + s[8] = s[8] * 0xf7eec905u + s[4]; + s[14] = mh_rotl(s[14] ^ s[8], 27u); + s[0] ^= s[14]; + s[1] = mh_rotl(s[1], 30u) + s[0]; + s[15] += s[1] + 0xe1b48510u; + s[9] *= (s[15] | 1u); + s[4] = s[4] * 0x1d3d76ddu + s[9]; + s[11] *= (s[4] | 1u); + s[4] -= s[11]; + s[10] += s[4]; + s[15] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[15], 29u); + s[15] -= s[14]; + s[7] += s[15]; + s[0] = mh_rotl(s[0], 15u) + s[7]; + s[1] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[1], 13u); + s[10] += s[11]; + s[3] = mh_rotl(s[3] ^ s[10], 27u); + s[8] = mh_rotl(s[8], 31u) + s[3]; + s[7] += s[8]; + s[8] -= s[7]; + s[10] *= (s[8] | 1u); + s[12] -= s[10]; + s[0] = s[0] * 0x5817b1bbu + s[12]; + s[4] -= s[0]; + s[12] += s[4]; + s[15] -= s[12]; + s[0] = mh_rotl(s[0], 27u) + s[15]; + s[4] *= (s[0] | 1u); + s[5] *= (s[4] | 1u); + s[13] *= (s[5] | 1u); + s[7] *= (s[13] | 1u); + s[3] *= (s[7] | 1u); + s[6] += s[3]; + s[7] ^= s[6] ^ 0x229579c7u; + s[11] += s[7] + 0x00a25704u; + s[9] -= s[11]; + s[12] = mh_rotl(s[12], 24u) + s[9]; + s[9] ^= s[12]; + s[10] ^= (s[9] & s[1]); + s[0] = (s[0] ^ s[10]) * 0x2005a37fu; + s[14] ^= s[0] ^ 0x1c7da2c4u; + s[10] *= (s[14] | 1u); + s[12] += s[10]; + s[1] = mh_rotl(s[1] ^ s[12], 24u); + s[4] ^= (s[1] & s[14]); + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[10] = s[10] * 0xeaf112ebu + s[15]; + s[8] ^= (s[10] & s[15]); + s[3] *= (s[8] | 1u); + s[5] += (s[3] | s[8]); + s[6] += s[5] + 0xe4e3f161u; + s[9] += s[6]; + s[11] = mh_rotl(s[11] ^ s[9], 16u); + s[2] = mh_rotl(s[2] ^ s[11], 4u); + s[11] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[0] ^= s[3]; + s[11] ^= s[0]; + s[6] = (s[6] ^ s[11]) * 0x12a469a3u; + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[1]); + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[3] ^= s[15]; + s[11] -= s[3]; + s[9] = (s[9] ^ s[11]) * 0x344ce419u; + s[4] ^= s[9]; + s[10] ^= (s[4] & s[5]); + s[1] += s[10] + 0xea384c3cu; + s[10] += s[1]; + s[2] ^= s[10] ^ 0x1d75445cu; + s[8] += s[2]; + s[13] += s[8] + 0xbfc1d457u; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[14] -= s[3]; + s[0] ^= s[14] ^ 0x06e7726cu; + s[5] ^= s[0] ^ 0x51f1354du; + s[8] += (s[5] | s[11]); + s[11] += s[8]; + s[14] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[14], 13u); + s[11] -= s[13]; + s[0] += s[11]; + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[4] = (s[4] ^ s[3]) * 0x5eb788f9u; + s[0] += s[4]; + s[4] = mh_rotl(s[4], 31u) + s[0]; + s[8] ^= s[4]; + s[11] ^= s[8] ^ 0xdd96e051u; + s[3] -= s[11]; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[6] ^= s[4]; + s[15] += s[6] + 0x4f556eefu; + s[2] ^= s[15] ^ 0x296a5968u; + s[1] ^= s[2] ^ 0xc46f139au; + s[15] = (s[15] ^ s[1]) * 0x50702ea7u; + s[8] += s[15]; + s[1] = (s[1] ^ s[8]) * 0x6bafa739u; + s[0] += s[1]; + s[2] += (s[0] | s[1]); + s[1] = s[1] * 0x1f7250afu + s[2]; + s[6] ^= s[1] ^ 0x898b2247u; + s[1] += s[6] + 0xa7ddf08eu; + s[2] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[2], 11u); + s[1] = (s[1] ^ s[6]) * 0xf13b1879u; + s[9] += s[1]; + s[11] += s[9]; + s[3] += (s[11] | s[13]); + s[12] -= s[3]; + s[6] ^= s[12] ^ 0x5c3b531eu; + s[5] *= (s[6] | 1u); + s[14] ^= s[5]; + s[8] = (s[8] ^ s[14]) * 0x93599b23u; + s[13] ^= s[8]; + s[0] ^= s[13]; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[11] = (s[11] ^ s[7]) * 0x97c86fe1u; + s[4] ^= s[11]; + s[12] += (s[4] | s[8]); + s[14] ^= s[12] ^ 0x47aef842u; + s[4] += s[14]; + s[14] ^= s[4] ^ 0xef1987b2u; + s[10] -= s[14]; + s[11] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 17u); + s[14] += s[12]; + s[6] = mh_rotl(s[6], 15u) + s[14]; + s[10] += (s[6] | s[1]); + s[4] += s[10]; + s[10] ^= (s[4] & s[12]); + s[2] += s[10]; + s[14] -= s[2]; + s[10] ^= (s[14] & s[13]); + s[11] ^= s[10]; + s[15] ^= s[11]; + s[5] = mh_rotl(s[5] ^ s[15], 27u); + s[6] -= s[5]; + s[15] += s[6]; + s[8] ^= (s[15] & s[9]); + s[9] = (s[9] ^ s[8]) * 0x483ef9cfu; + s[13] ^= s[9]; + s[14] += s[13]; + s[5] += s[14] + 0x1978b9bau; + s[12] ^= s[5] ^ 0xc6a87e37u; + s[11] ^= s[12]; + s[0] += s[11] + 0x25e405bfu; + s[9] += s[0]; + s[12] += s[9]; + s[14] ^= (s[12] & s[6]); + s[0] -= s[14]; + s[7] = mh_rotl(s[7] ^ s[0], 16u); + s[11] ^= s[7]; + s[6] *= (s[11] | 1u); + s[10] = (s[10] ^ s[6]) * 0x365e6b61u; + s[7] ^= (s[10] & s[6]); + s[4] += s[7] + 0x88f34310u; + s[0] += s[4]; + s[13] *= (s[0] | 1u); + s[8] ^= s[13]; + s[2] += s[8]; + s[10] += s[2]; + s[3] += s[10]; + s[0] += s[3]; + s[9] = (s[9] ^ s[0]) * 0xc6ec1ff1u; + s[10] += s[9]; + s[13] ^= (s[10] & s[6]); + s[2] = (s[2] ^ s[13]) * 0xb02a7defu; + s[1] ^= (s[2] & s[6]); + s[8] += s[1]; + s[6] *= (s[8] | 1u); + s[0] = s[0] * 0xdbb96cf3u + s[6]; + s[6] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[4] ^= s[11]; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[6] = (s[6] ^ s[2]) * 0x72c49157u; + s[14] -= s[6]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[8] ^= s[5] ^ 0x1de584feu; + s[11] = mh_rotl(s[11] ^ s[8], 19u); + s[10] *= (s[11] | 1u); + s[12] += s[10]; + s[14] = (s[14] ^ s[12]) * 0x9befbf23u; + s[2] ^= s[14] ^ 0x958a58deu; + s[4] ^= s[2] ^ 0x255a3390u; + s[5] -= s[4]; + s[9] += s[5]; + s[11] += s[9]; + s[13] += (s[11] | s[15]); + s[4] += s[13] + 0x7f925d13u; + s[12] = mh_rotl(s[12], 20u) + s[4]; + s[13] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[13], 30u); + s[13] -= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[15] -= s[10]; + s[6] ^= s[15]; + s[13] += (s[6] | s[4]); + s[14] ^= s[13] ^ 0x935ed5ffu; + s[2] = mh_rotl(s[2] ^ s[14], 11u); + s[4] = mh_rotl(s[4], 23u) + s[2]; + s[10] += s[4] + 0x602f3d0cu; + s[4] += s[10]; + s[6] ^= (s[4] & s[2]); + s[12] *= (s[6] | 1u); + s[11] ^= s[12]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[9] = (s[9] ^ s[5]) * 0xf3832b37u; + s[15] += (s[9] | s[8]); + s[10] += s[15] + 0xb02d9997u; + s[13] = mh_rotl(s[13] ^ s[10], 15u); + s[9] += s[13] + 0xcf0e861au; + s[13] = mh_rotl(s[13] ^ s[9], 7u); + s[1] *= (s[13] | 1u); + s[0] *= (s[1] | 1u); + s[11] += s[0] + 0x60d0848au; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[1] ^= s[15] ^ 0x7a0f3dafu; + s[9] *= (s[1] | 1u); + s[12] = mh_rotl(s[12], 10u) + s[9]; + s[9] *= (s[12] | 1u); + s[5] -= s[9]; + s[0] ^= s[5]; + s[4] += s[0]; + s[3] = mh_rotl(s[3] ^ s[4], 14u); + s[8] = (s[8] ^ s[3]) * 0x24a33cefu; + s[7] = mh_rotl(s[7], 26u) + s[8]; + s[0] = mh_rotl(s[0] ^ s[7], 5u); + s[13] ^= s[0]; + s[0] ^= s[13]; + s[9] += s[0]; + s[1] += s[9] + 0xceba1d99u; + s[6] += (s[1] | s[0]); + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[2]); + s[2] -= s[0]; + s[9] ^= s[2]; + s[0] -= s[9]; + s[10] += s[0] + 0x912934d8u; + s[14] += s[10]; + s[5] ^= s[14]; + s[8] += s[5] + 0x9b41cf1du; + s[10] ^= s[8] ^ 0x783c5b76u; + s[2] -= s[10]; + s[1] = (s[1] ^ s[2]) * 0x0f56c5b9u; + s[14] ^= s[1] ^ 0x25f12e76u; + s[13] = mh_rotl(s[13], 6u) + s[14]; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[6] = mh_rotl(s[6], 22u) + s[2]; + s[4] += (s[6] | s[9]); + s[14] ^= s[4]; + s[2] -= s[14]; + s[3] ^= s[2]; + s[9] ^= s[3]; + s[6] *= (s[9] | 1u); + s[2] ^= s[6]; + s[12] += s[2]; + s[3] ^= s[12]; + s[10] = mh_rotl(s[10], 25u) + s[3]; + s[1] = mh_rotl(s[1] ^ s[10], 19u); + s[14] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[14], 25u); + s[4] = mh_rotl(s[4], 12u) + s[12]; + s[5] *= (s[4] | 1u); + s[0] ^= s[5]; + s[11] ^= (s[0] & s[8]); + s[14] ^= s[11]; + s[4] = s[4] * 0x7b3dacd1u + s[14]; + s[15] = (s[15] ^ s[4]) * 0x391f4413u; + s[0] -= s[15]; + s[11] = s[11] * 0xe57f1625u + s[0]; + s[2] -= s[11]; + s[3] -= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[3]; + s[7] -= s[11]; + s[9] -= s[7]; + s[5] = mh_rotl(s[5] ^ s[9], 25u); + s[13] ^= s[5] ^ 0x99379160u; + s[7] ^= s[13]; + s[11] = mh_rotl(s[11] ^ s[7], 6u); + s[14] ^= s[11]; + s[10] += s[14]; + s[14] ^= s[10]; + s[8] = mh_rotl(s[8] ^ s[14], 13u); + s[0] += s[8]; + s[13] += (s[0] | s[11]); + s[1] = s[1] * 0xef009353u + s[13]; + s[2] += (s[1] | s[8]); + s[0] *= (s[2] | 1u); + s[14] += s[0]; + s[1] ^= s[14]; + s[8] *= (s[1] | 1u); + s[14] += (s[8] | s[4]); + s[11] *= (s[14] | 1u); + s[15] = mh_rotl(s[15] ^ s[11], 14u); + s[4] = mh_rotl(s[4] ^ s[15], 24u); + s[8] += s[4]; + s[5] += (s[8] | s[10]); + s[2] += s[5]; + s[13] = mh_rotl(s[13] ^ s[2], 22u); + s[8] -= s[13]; + s[3] += s[8]; + s[10] += (s[3] | s[5]); + s[13] ^= s[10]; + s[0] += (s[13] | s[5]); + s[8] += s[0]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[7] = (s[7] ^ s[14]) * 0xe87bd0f5u; + s[1] ^= s[7]; + s[12] *= (s[1] | 1u); + s[9] -= s[12]; + s[8] = mh_rotl(s[8], 8u) + s[9]; + s[7] += s[8]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[6] ^= s[11]; + s[2] += (s[6] | s[3]); + s[6] = (s[6] ^ s[2]) * 0xea6f06c5u; + s[9] = s[9] * 0xb0813793u + s[6]; + s[5] = mh_rotl(s[5], 27u) + s[9]; + s[12] = (s[12] ^ s[5]) * 0x9522a8cbu; + s[11] += (s[12] | s[1]); + s[13] ^= s[11]; + s[4] *= (s[13] | 1u); + s[9] += s[4]; + s[13] ^= s[9]; + s[15] -= s[13]; + s[10] ^= s[15]; + s[8] -= s[10]; + s[11] ^= s[8]; + s[15] = mh_rotl(s[15], 15u) + s[11]; + s[5] ^= s[15]; + s[10] -= s[5]; + s[0] = s[0] * 0x84635df9u + s[10]; + s[8] += s[0]; + s[9] += s[8]; + s[15] = s[15] * 0x55198e97u + s[9]; + s[4] -= s[15]; + s[8] = mh_rotl(s[8], 5u) + s[4]; + s[11] -= s[8]; + s[13] = (s[13] ^ s[11]) * 0x15b1b0a5u; + s[11] *= (s[13] | 1u); + s[10] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[10], 22u); + s[7] += s[12] + 0x8aac82cau; + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[10] = mh_rotl(s[10] ^ s[11], 16u); + s[13] = s[13] * 0xc6a07e99u + s[10]; + s[12] *= (s[13] | 1u); + s[4] *= (s[12] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[4] = mh_rotl(s[4], 2u) + s[2]; + s[9] = mh_rotl(s[9] ^ s[4], 11u); + s[12] ^= s[9]; + s[2] += (s[12] | s[13]); + s[7] = mh_rotl(s[7], 5u) + s[2]; + s[15] += (s[7] | s[13]); + s[6] = mh_rotl(s[6], 5u) + s[15]; + s[1] -= s[6]; + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0xf187f908u; + s[12] -= s[2]; + s[9] += s[12] + 0x1a02f1acu; + s[0] ^= s[9]; + s[5] ^= s[0]; + s[3] = mh_rotl(s[3], 27u) + s[5]; + s[2] += s[3]; + s[1] += s[2]; + s[14] ^= s[1]; + s[1] += s[14]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[0] += (s[9] | s[6]); + s[6] ^= s[0] ^ 0x69d64d91u; + s[9] ^= (s[6] & s[11]); + s[4] = mh_rotl(s[4], 9u) + s[9]; + s[7] -= s[4]; + s[5] += s[7] + 0xefa00412u; + s[11] *= (s[5] | 1u); + s[0] += s[11] + 0xb0b34a8fu; + s[3] -= s[0]; + s[6] += s[3]; + s[12] = mh_rotl(s[12], 26u) + s[6]; + s[14] *= (s[12] | 1u); + s[9] -= s[14]; + s[6] += s[9]; + s[13] ^= s[6]; + s[1] += s[13]; + s[8] += s[1] + 0x1a6451adu; + s[3] ^= (s[8] & s[9]); + s[13] ^= s[3]; + s[2] ^= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 28u); + s[8] += s[6]; + s[10] ^= s[8] ^ 0x4b68b070u; + s[14] += s[10] + 0x3e959795u; + s[9] += s[14] + 0x7e7f05f4u; + s[14] *= (s[9] | 1u); + s[8] ^= s[14]; + s[11] *= (s[8] | 1u); + s[4] -= s[11]; + s[2] += s[4]; + s[6] += s[2]; + s[2] += s[6]; + s[8] *= (s[2] | 1u); + s[4] += (s[8] | s[0]); + s[13] -= s[4]; + s[0] -= s[13]; + s[5] ^= s[0] ^ 0xcdcd2654u; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[9] = (s[9] ^ s[2]) * 0x512a14b1u; + s[8] = (s[8] ^ s[9]) * 0xe54b3cc1u; + s[11] += (s[8] | s[13]); + s[15] ^= s[11] ^ 0x0823130du; + s[11] ^= s[15]; + s[3] ^= (s[11] & s[2]); + s[9] = mh_rotl(s[9] ^ s[3], 7u); + s[2] = (s[2] ^ s[9]) * 0x583f7895u; + s[15] ^= s[2] ^ 0x4a0f9347u; + s[9] += s[15]; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[2] = (s[2] ^ s[9]) * 0x071a75e5u; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 22u); + s[3] ^= s[0] ^ 0xa770c1f5u; + s[10] = mh_rotl(s[10] ^ s[3], 4u); + s[13] += s[10] + 0xeaf6caa2u; + s[12] += (s[13] | s[5]); + s[3] -= s[12]; + s[9] -= s[3]; + s[3] += s[9]; + s[15] = (s[15] ^ s[3]) * 0x8c66add5u; + s[0] -= s[15]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[3] += s[15] + 0x4fe53ed8u; + s[0] += s[3] + 0xb80a3204u; + s[12] += (s[0] | s[14]); + s[10] += s[12]; + s[9] *= (s[10] | 1u); + s[3] += s[9]; + s[0] += s[3]; + s[14] += (s[0] | s[1]); + s[4] *= (s[14] | 1u); + s[6] -= s[4]; + s[5] -= s[6]; + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[4]; + s[9] ^= s[5] ^ 0xda8f6abau; + s[10] ^= s[9]; + s[8] ^= (s[10] & s[13]); + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[1] ^= s[10]; + s[15] = (s[15] ^ s[1]) * 0x1fd82855u; + s[2] ^= s[15]; + s[4] -= s[2]; + s[2] *= (s[4] | 1u); + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[3] ^= s[8]; + s[13] *= (s[3] | 1u); + s[5] ^= s[13]; + s[7] -= s[5]; + s[3] += s[7]; + s[1] += s[3]; + s[14] *= (s[1] | 1u); + s[8] = (s[8] ^ s[14]) * 0x14b291ebu; + s[12] = mh_rotl(s[12] ^ s[8], 24u); + s[5] -= s[12]; + s[3] *= (s[5] | 1u); + s[4] += s[3] + 0x2e4c7228u; + s[11] = mh_rotl(s[11] ^ s[4], 9u); + s[5] = mh_rotl(s[5] ^ s[11], 21u); + s[4] += s[5] + 0xcec3470du; + s[14] += s[4]; + s[5] = (s[5] ^ s[14]) * 0xd3b1d179u; + s[7] = (s[7] ^ s[5]) * 0x0dfd9191u; + s[1] ^= s[7]; + s[12] += s[1] + 0x05dc87fdu; + s[11] -= s[12]; + s[7] ^= (s[11] & s[10]); + s[10] *= (s[7] | 1u); + s[8] = mh_rotl(s[8], 22u) + s[10]; + s[11] ^= s[8]; + s[10] *= (s[11] | 1u); + s[0] -= s[10]; + s[7] += s[0] + 0xbab4bd7fu; + s[0] = mh_rotl(s[0], 13u) + s[7]; + s[15] = (s[15] ^ s[0]) * 0x1a239ff7u; + s[3] = mh_rotl(s[3] ^ s[15], 24u); + s[1] = mh_rotl(s[1], 25u) + s[3]; + s[5] = mh_rotl(s[5], 23u) + s[1]; + s[4] = (s[4] ^ s[5]) * 0x114ab605u; + s[9] += s[4]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[0] -= s[5]; + s[4] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[4], 14u); + s[14] *= (s[15] | 1u); + s[10] = mh_rotl(s[10] ^ s[14], 8u); + s[3] = mh_rotl(s[3] ^ s[10], 17u); + s[6] += s[3] + 0xb216edc1u; + s[9] ^= s[6]; + s[7] += s[9]; + s[9] = mh_rotl(s[9] ^ s[7], 27u); + s[8] += (s[9] | s[12]); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[2] += (s[7] | s[11]); + s[3] = (s[3] ^ s[2]) * 0x74b003d9u; + s[1] = mh_rotl(s[1], 12u) + s[3]; + s[0] = (s[0] ^ s[1]) * 0x6e4a2ddbu; + s[7] *= (s[0] | 1u); + s[4] += s[7]; + s[13] += s[4]; + s[10] = mh_rotl(s[10] ^ s[13], 23u); + s[9] += s[10]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[13], 26u); + s[13] = mh_rotl(s[13] ^ s[15], 26u); + s[2] -= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[7] ^= s[6] ^ 0x040fda34u; + s[12] ^= s[7] ^ 0x7517e01cu; + s[9] = (s[9] ^ s[12]) * 0x65c2f9e3u; + s[2] *= (s[9] | 1u); + s[8] += (s[2] | s[15]); + s[10] = mh_rotl(s[10] ^ s[8], 25u); + s[7] = mh_rotl(s[7] ^ s[10], 18u); + s[0] ^= s[7]; + s[13] -= s[0]; + s[5] += s[13] + 0x91f36456u; + s[13] ^= s[5] ^ 0xb0249e62u; + s[9] ^= s[13]; + s[10] -= s[9]; + s[9] = s[9] * 0x3349e8abu + s[10]; + s[15] += s[9]; + s[1] = mh_rotl(s[1] ^ s[15], 18u); + s[3] -= s[1]; + s[6] ^= s[3]; + s[2] = (s[2] ^ s[6]) * 0x56121511u; + s[14] = mh_rotl(s[14], 12u) + s[2]; + s[12] ^= s[14] ^ 0x10c3c286u; + s[5] += s[12]; + s[7] += (s[5] | s[15]); + s[4] = mh_rotl(s[4] ^ s[7], 13u); + s[7] ^= s[4]; + s[3] += (s[7] | s[9]); + s[15] -= s[3]; + s[3] ^= s[15]; + s[12] = mh_rotl(s[12] ^ s[3], 28u); + s[14] ^= s[12]; + s[6] ^= (s[14] & s[3]); + s[5] -= s[6]; + s[11] ^= s[5] ^ 0x039a9ae9u; + s[8] = (s[8] ^ s[11]) * 0x0cf0a8dbu; + s[7] += s[8]; + s[2] ^= (s[7] & s[15]); + s[4] += s[2]; + s[15] *= (s[4] | 1u); + s[3] ^= (s[15] & s[0]); + s[2] += (s[3] | s[14]); + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[2] ^= s[5] ^ 0x6a1af17au; + s[12] = s[12] * 0x4dfc5c59u + s[2]; + s[7] = mh_rotl(s[7] ^ s[12], 4u); + s[1] ^= s[7]; + s[13] += s[1]; + s[3] ^= (s[13] & s[10]); + s[8] += s[3]; + s[4] += s[8]; + s[3] ^= s[4]; + s[9] = mh_rotl(s[9], 30u) + s[3]; + s[5] += s[9] + 0x07e78f25u; + s[12] ^= s[5]; + s[5] += s[12] + 0x31f9526eu; + s[14] ^= (s[5] & s[13]); + s[3] = mh_rotl(s[3] ^ s[14], 2u); + s[1] = (s[1] ^ s[3]) * 0xe113f67bu; + s[13] = mh_rotl(s[13] ^ s[1], 2u); + s[12] *= (s[13] | 1u); + s[2] ^= s[12]; + s[9] = s[9] * 0x1a8888d9u + s[2]; + s[4] += s[9]; + s[6] += (s[4] | s[7]); + s[7] = (s[7] ^ s[6]) * 0xfddcf333u; + s[15] += (s[7] | s[8]); + s[1] = mh_rotl(s[1], 10u) + s[15]; + s[8] ^= s[1]; + s[13] *= (s[8] | 1u); + s[9] *= (s[13] | 1u); + s[10] = (s[10] ^ s[9]) * 0x3ca467cfu; + s[9] += s[10]; + s[13] = mh_rotl(s[13], 10u) + s[9]; + s[4] ^= s[13]; + s[5] = (s[5] ^ s[4]) * 0x01623d69u; + s[14] = mh_rotl(s[14], 25u) + s[5]; + s[9] = mh_rotl(s[9], 20u) + s[14]; + s[13] += s[9]; + s[7] ^= s[13]; + s[0] += s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 30u); + s[7] = mh_rotl(s[7], 18u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[2] ^= s[12]; + s[3] = (s[3] ^ s[2]) * 0xabf1e829u; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_7(uint* s) { + s[5] -= s[0]; + s[4] += s[5]; + s[1] ^= s[4]; + s[8] = mh_rotl(s[8], 27u) + s[1]; + s[11] = (s[11] ^ s[8]) * 0x4b2f6f09u; + s[6] ^= s[11]; + s[9] = mh_rotl(s[9] ^ s[6], 4u); + s[8] += s[9] + 0xbb62948fu; + s[5] ^= s[8]; + s[11] += (s[5] | s[13]); + s[12] += s[11]; + s[1] = mh_rotl(s[1], 31u) + s[12]; + s[14] ^= s[1]; + s[8] *= (s[14] | 1u); + s[6] += (s[8] | s[1]); + s[10] ^= s[6]; + s[7] = s[7] * 0x6b454bc1u + s[10]; + s[6] -= s[7]; + s[9] += s[6]; + s[2] = mh_rotl(s[2], 17u) + s[9]; + s[9] -= s[2]; + s[13] ^= (s[9] & s[0]); + s[2] -= s[13]; + s[14] ^= (s[2] & s[11]); + s[13] ^= s[14]; + s[8] += s[13]; + s[1] ^= s[8]; + s[15] ^= s[1] ^ 0x6fb89ee0u; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[5] -= s[13]; + s[9] = (s[9] ^ s[5]) * 0x34a05bdbu; + s[14] = mh_rotl(s[14] ^ s[9], 19u); + s[7] += s[14] + 0x91a91f0eu; + s[12] = mh_rotl(s[12], 30u) + s[7]; + s[3] = (s[3] ^ s[12]) * 0x29e111e1u; + s[15] = mh_rotl(s[15], 13u) + s[3]; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[6] -= s[4]; + s[15] ^= (s[6] & s[3]); + s[1] ^= s[15]; + s[13] = mh_rotl(s[13], 2u) + s[1]; + s[5] -= s[13]; + s[12] += (s[5] | s[6]); + s[5] = mh_rotl(s[5], 8u) + s[12]; + s[6] = (s[6] ^ s[5]) * 0x46361369u; + s[0] = s[0] * 0x41b33755u + s[6]; + s[14] += s[0]; + s[7] = (s[7] ^ s[14]) * 0x927361a3u; + s[13] += s[7]; + s[1] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[1], 29u); + s[7] = mh_rotl(s[7] ^ s[3], 28u); + s[15] = mh_rotl(s[15], 6u) + s[7]; + s[3] = s[3] * 0x0876dd9du + s[15]; + s[4] ^= s[3]; + s[11] -= s[4]; + s[10] = mh_rotl(s[10], 29u) + s[11]; + s[5] ^= s[10]; + s[3] += s[5]; + s[7] *= (s[3] | 1u); + s[2] -= s[7]; + s[9] ^= s[2]; + s[8] *= (s[9] | 1u); + s[7] += (s[8] | s[13]); + s[13] -= s[7]; + s[11] = mh_rotl(s[11], 18u) + s[13]; + s[10] += s[11] + 0x181a9075u; + s[9] = (s[9] ^ s[10]) * 0xb49d9e43u; + s[15] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[7] += s[3]; + s[3] += s[7]; + s[4] ^= s[3] ^ 0xe8c5e0a0u; + s[7] += (s[4] | s[12]); + s[4] += s[7]; + s[14] = (s[14] ^ s[4]) * 0x178ee02fu; + s[7] += s[14]; + s[1] ^= s[7] ^ 0x194c8352u; + s[11] ^= s[1]; + s[10] *= (s[11] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[0] = mh_rotl(s[0] ^ s[13], 28u); + s[1] += (s[0] | s[7]); + s[15] -= s[1]; + s[6] += s[15]; + s[7] -= s[6]; + s[0] ^= s[7]; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x7db92f45u; + s[8] += s[12]; + s[9] = mh_rotl(s[9], 25u) + s[8]; + s[14] += s[9]; + s[4] = mh_rotl(s[4], 1u) + s[14]; + s[9] = mh_rotl(s[9], 20u) + s[4]; + s[8] -= s[9]; + s[2] = (s[2] ^ s[8]) * 0xe35b6231u; + s[14] *= (s[2] | 1u); + s[11] += s[14]; + s[6] = mh_rotl(s[6], 27u) + s[11]; + s[13] += (s[6] | s[14]); + s[3] += s[13]; + s[12] ^= s[3]; + s[2] ^= s[12]; + s[0] ^= s[2]; + s[3] += (s[0] | s[7]); + s[14] ^= (s[3] & s[9]); + s[4] += s[14] + 0x77498422u; + s[11] = mh_rotl(s[11], 18u) + s[4]; + s[10] = mh_rotl(s[10] ^ s[11], 14u); + s[6] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[2] *= (s[12] | 1u); + s[8] *= (s[2] | 1u); + s[0] = (s[0] ^ s[8]) * 0x597dfa7du; + s[5] = mh_rotl(s[5] ^ s[0], 1u); + s[8] = (s[8] ^ s[5]) * 0x818239b3u; + s[6] ^= s[8] ^ 0x898c850du; + s[1] = (s[1] ^ s[6]) * 0x3d7ae6bfu; + s[2] += (s[1] | s[0]); + s[15] = mh_rotl(s[15] ^ s[2], 12u); + s[11] ^= (s[15] & s[1]); + s[10] += (s[11] | s[5]); + s[9] = mh_rotl(s[9], 2u) + s[10]; + s[4] += s[9] + 0x8e6a7325u; + s[10] += s[4]; + s[9] *= (s[10] | 1u); + s[7] = mh_rotl(s[7] ^ s[9], 29u); + s[9] *= (s[7] | 1u); + s[14] *= (s[9] | 1u); + s[9] += (s[14] | s[8]); + s[8] *= (s[9] | 1u); + s[10] = mh_rotl(s[10] ^ s[8], 31u); + s[0] += s[10]; + s[3] ^= s[0]; + s[11] += s[3]; + s[10] = mh_rotl(s[10], 14u) + s[11]; + s[14] = s[14] * 0xedeb79c3u + s[10]; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[0] ^= s[13] ^ 0xcb8f865fu; + s[7] ^= s[0] ^ 0xc218e233u; + s[6] ^= s[7]; + s[15] -= s[6]; + s[13] += s[15]; + s[9] -= s[13]; + s[8] += s[9]; + s[5] += s[8]; + s[14] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[12] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 4u) + s[12]; + s[5] = (s[5] ^ s[2]) * 0xca70bd5bu; + s[6] = mh_rotl(s[6] ^ s[5], 1u); + s[9] -= s[6]; + s[12] ^= s[9]; + s[11] += s[12] + 0xc0665a45u; + s[3] = mh_rotl(s[3] ^ s[11], 4u); + s[9] ^= s[3] ^ 0x32e70bb6u; + s[1] ^= s[9] ^ 0xae4dfdd5u; + s[5] ^= (s[1] & s[3]); + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[13] += s[3]; + s[10] = mh_rotl(s[10], 4u) + s[13]; + s[7] += s[10]; + s[10] ^= s[7] ^ 0x4810f287u; + s[6] += (s[10] | s[13]); + s[11] = (s[11] ^ s[6]) * 0x66e90aa1u; + s[2] += s[11]; + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[11] ^= (s[8] & s[10]); + s[6] ^= s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 9u); + s[2] = (s[2] ^ s[8]) * 0x0ae2e991u; + s[14] *= (s[2] | 1u); + s[2] += (s[14] | s[3]); + s[0] -= s[2]; + s[11] += s[0] + 0x68b8549cu; + s[8] -= s[11]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[3] = mh_rotl(s[3] ^ s[12], 12u); + s[10] = s[10] * 0xf67913a1u + s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 22u); + s[11] ^= (s[14] & s[4]); + s[8] += s[11]; + s[15] *= (s[8] | 1u); + s[14] += s[15]; + s[8] = (s[8] ^ s[14]) * 0x0ab3eb01u; + s[2] = mh_rotl(s[2], 28u) + s[8]; + s[8] *= (s[2] | 1u); + s[2] ^= s[8]; + s[10] ^= s[2]; + s[0] -= s[10]; + s[4] ^= s[0] ^ 0x4f62b664u; + s[12] = mh_rotl(s[12] ^ s[4], 7u); + s[10] -= s[12]; + s[0] += s[10] + 0xf2da1dd8u; + s[3] += s[0]; + s[5] = (s[5] ^ s[3]) * 0xdbaaf8b9u; + s[4] = (s[4] ^ s[5]) * 0xf8df299fu; + s[13] += s[4]; + s[10] ^= (s[13] & s[14]); + s[5] ^= s[10]; + s[13] += s[5]; + s[8] *= (s[13] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 26u); + s[0] = mh_rotl(s[0] ^ s[11], 21u); + s[9] ^= s[0] ^ 0x9e7430f6u; + s[4] = mh_rotl(s[4], 5u) + s[9]; + s[8] ^= s[4]; + s[7] ^= s[8]; + s[0] ^= s[7]; + s[14] = mh_rotl(s[14], 20u) + s[0]; + s[7] += (s[14] | s[15]); + s[6] = (s[6] ^ s[7]) * 0x151af639u; + s[12] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[12], 15u); + s[4] = s[4] * 0xf5ff2905u + s[3]; + s[9] += s[4] + 0x986450f9u; + s[0] += s[9]; + s[3] *= (s[0] | 1u); + s[10] = mh_rotl(s[10], 6u) + s[3]; + s[7] += (s[10] | s[2]); + s[11] ^= s[7]; + s[14] = mh_rotl(s[14], 9u) + s[11]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[12] += s[6] + 0x8e33c6d8u; + s[1] ^= s[12]; + s[14] = s[14] * 0x75b03e79u + s[1]; + s[12] = (s[12] ^ s[14]) * 0xf81548e3u; + s[14] = mh_rotl(s[14] ^ s[12], 26u); + s[0] = (s[0] ^ s[14]) * 0xed123d19u; + s[4] = s[4] * 0xc3964555u + s[0]; + s[12] *= (s[4] | 1u); + s[8] = (s[8] ^ s[12]) * 0x5b0867f3u; + s[4] += s[8]; + s[11] += (s[4] | s[8]); + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[8] = mh_rotl(s[8], 13u) + s[13]; + s[10] += s[8]; + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[13] += s[5]; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[6] ^= s[1]; + s[0] = s[0] * 0x8659f36fu + s[6]; + s[6] = mh_rotl(s[6], 16u) + s[0]; + s[14] *= (s[6] | 1u); + s[3] ^= (s[14] & s[15]); + s[7] ^= s[3]; + s[8] = s[8] * 0x9b402df1u + s[7]; + s[13] -= s[8]; + s[14] = s[14] * 0xfc97057fu + s[13]; + s[8] = mh_rotl(s[8], 16u) + s[14]; + s[14] = (s[14] ^ s[8]) * 0xbe6b7107u; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = mh_rotl(s[8] ^ s[15], 17u); + s[2] *= (s[8] | 1u); + s[13] ^= (s[2] & s[15]); + s[4] -= s[13]; + s[6] += s[4]; + s[5] ^= s[6]; + s[13] += s[5] + 0xe1efd35du; + s[11] -= s[13]; + s[9] -= s[11]; + s[11] += s[9]; + s[10] += s[11] + 0x54c20a26u; + s[11] += s[10]; + s[10] ^= s[11]; + s[1] += s[10]; + s[15] ^= s[1] ^ 0xba35f967u; + s[10] ^= s[15]; + s[5] -= s[10]; + s[10] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[10], 4u); + s[12] = mh_rotl(s[12] ^ s[2], 28u); + s[3] *= (s[12] | 1u); + s[12] += s[3]; + s[2] ^= s[12] ^ 0xf5d2467fu; + s[6] *= (s[2] | 1u); + s[10] = (s[10] ^ s[6]) * 0x28dedae7u; + s[3] = mh_rotl(s[3], 23u) + s[10]; + s[13] ^= s[3]; + s[0] -= s[13]; + s[6] = mh_rotl(s[6], 27u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[6], 24u); + s[7] += s[9]; + s[1] = (s[1] ^ s[7]) * 0x7c90eb87u; + s[9] ^= s[1]; + s[13] = mh_rotl(s[13], 9u) + s[9]; + s[10] ^= s[13] ^ 0x225cb631u; + s[4] = mh_rotl(s[4] ^ s[10], 7u); + s[2] *= (s[4] | 1u); + s[4] += s[2]; + s[2] = (s[2] ^ s[4]) * 0xbf3bcc37u; + s[7] += s[2]; + s[14] = (s[14] ^ s[7]) * 0xbc306609u; + s[7] ^= (s[14] & s[8]); + s[15] ^= s[7] ^ 0x60b43c30u; + s[9] ^= s[15]; + s[4] ^= s[9]; + s[9] += (s[4] | s[7]); + s[0] ^= (s[9] & s[13]); + s[12] ^= s[0] ^ 0xd2720722u; + s[5] ^= s[12] ^ 0xd44c4970u; + s[9] ^= s[5] ^ 0xc371f5beu; + s[3] ^= s[9]; + s[0] = mh_rotl(s[0], 29u) + s[3]; + s[10] += s[0]; + s[8] += s[10]; + s[3] = (s[3] ^ s[8]) * 0xa4d0bc15u; + s[1] ^= s[3]; + s[12] ^= s[1]; + s[10] ^= s[12]; + s[2] += (s[10] | s[4]); + s[11] = mh_rotl(s[11], 16u) + s[2]; + s[9] += s[11]; + s[7] *= (s[9] | 1u); + s[0] = (s[0] ^ s[7]) * 0x5e3371e1u; + s[14] += s[0]; + s[9] ^= s[14]; + s[10] = (s[10] ^ s[9]) * 0x9e41ec57u; + s[0] ^= s[10]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4]; + s[4] *= (s[0] | 1u); + s[8] = s[8] * 0xbfdc3751u + s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[11] -= s[15]; + s[9] -= s[11]; + s[4] = mh_rotl(s[4], 8u) + s[9]; + s[15] += s[4]; + s[1] ^= s[15] ^ 0xd11970cdu; + s[15] ^= s[1]; + s[4] = s[4] * 0x94d713c9u + s[15]; + s[7] = s[7] * 0x68b74c8du + s[4]; + s[9] ^= s[7] ^ 0x96fae1c9u; + s[7] *= (s[9] | 1u); + s[4] ^= s[7]; + s[1] -= s[4]; + s[8] ^= s[1] ^ 0x3b8298fdu; + s[3] = mh_rotl(s[3] ^ s[8], 29u); + s[10] += s[3]; + s[2] ^= s[10] ^ 0xfc75ba25u; + s[15] ^= s[2] ^ 0x3370ab46u; + s[4] *= (s[15] | 1u); + s[0] = (s[0] ^ s[4]) * 0xf0c6e8a1u; + s[8] = mh_rotl(s[8], 30u) + s[0]; + s[13] ^= s[8]; + s[9] += (s[13] | s[4]); + s[3] ^= (s[9] & s[5]); + s[9] ^= s[3]; + s[6] += s[9]; + s[10] += (s[6] | s[12]); + s[15] += s[10]; + s[13] *= (s[15] | 1u); + s[15] += (s[13] | s[2]); + s[5] += s[15] + 0xc80c1f15u; + s[6] = mh_rotl(s[6] ^ s[5], 6u); + s[2] ^= s[6]; + s[14] += s[2] + 0x20c48485u; + s[0] += s[14]; + s[8] = (s[8] ^ s[0]) * 0xab09b653u; + s[5] += s[8]; + s[11] *= (s[5] | 1u); + s[15] += s[11]; + s[8] ^= s[15]; + s[11] -= s[8]; + s[12] *= (s[11] | 1u); + s[0] = mh_rotl(s[0] ^ s[12], 10u); + s[13] ^= s[0]; + s[4] = mh_rotl(s[4], 27u) + s[13]; + s[2] += s[4]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[7] *= (s[10] | 1u); + s[6] -= s[7]; + s[3] = (s[3] ^ s[6]) * 0xb3dee1f9u; + s[6] -= s[3]; + s[5] += s[6]; + s[8] *= (s[5] | 1u); + s[15] += s[8]; + s[0] = mh_rotl(s[0], 13u) + s[15]; + s[2] -= s[0]; + s[14] *= (s[2] | 1u); + s[3] += s[14]; + s[13] -= s[3]; + s[12] = mh_rotl(s[12], 15u) + s[13]; + s[8] = s[8] * 0xdd12f547u + s[12]; + s[4] = s[4] * 0xeabf279du + s[8]; + s[10] = (s[10] ^ s[4]) * 0x233f1cd3u; + s[7] += s[10] + 0x6c58f593u; + s[8] ^= (s[7] & s[14]); + s[12] -= s[8]; + s[11] ^= (s[12] & s[6]); + s[12] *= (s[11] | 1u); + s[13] = (s[13] ^ s[12]) * 0x8c02e38du; + s[2] += s[13] + 0xa8bdba12u; + s[14] += s[2]; + s[13] = (s[13] ^ s[14]) * 0x4beb81bdu; + s[5] = (s[5] ^ s[13]) * 0x1ad1e6dbu; + s[3] ^= s[5]; + s[4] ^= s[3]; + s[7] = (s[7] ^ s[4]) * 0xef5d1565u; + s[4] += (s[7] | s[12]); + s[15] ^= s[4] ^ 0x5a3cd0fbu; + s[2] += s[15]; + s[10] = (s[10] ^ s[2]) * 0x42c18153u; + s[9] = mh_rotl(s[9], 31u) + s[10]; + s[12] -= s[9]; + s[3] += s[12] + 0x809ec6a1u; + s[0] -= s[3]; + s[2] = (s[2] ^ s[0]) * 0x37fb4965u; + s[6] = mh_rotl(s[6], 14u) + s[2]; + s[15] += s[6]; + s[2] ^= s[15]; + s[9] *= (s[2] | 1u); + s[13] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[13], 15u); + s[3] ^= (s[9] & s[2]); + s[2] = (s[2] ^ s[3]) * 0xe757085du; + s[10] *= (s[2] | 1u); + s[7] += s[10] + 0x0e230d44u; + s[10] += s[7]; + s[14] += s[10]; + s[2] += s[14] + 0x3f9b1777u; + s[14] -= s[2]; + s[8] ^= s[14] ^ 0x53fdae32u; + s[14] ^= s[8] ^ 0x545e3034u; + s[12] ^= s[14]; + s[2] = mh_rotl(s[2] ^ s[12], 18u); + s[1] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[6] += s[13]; + s[13] = mh_rotl(s[13], 31u) + s[6]; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[4] = mh_rotl(s[4], 13u) + s[8]; + s[15] ^= s[4]; + s[13] ^= s[15]; + s[15] += s[13]; + s[6] *= (s[15] | 1u); + s[8] -= s[6]; + s[2] += (s[8] | s[4]); + s[8] += s[2] + 0x071fe892u; + s[2] += s[8]; + s[6] ^= s[2]; + s[12] = mh_rotl(s[12], 12u) + s[6]; + s[11] ^= s[12]; + s[10] ^= s[11]; + s[15] ^= (s[10] & s[2]); + s[0] += s[15] + 0xc5893a51u; + s[11] ^= s[0]; + s[8] = s[8] * 0xcbaa9e53u + s[11]; + s[12] ^= s[8]; + s[7] += s[12]; + s[4] ^= s[7]; + s[14] ^= s[4]; + s[8] += s[14]; + s[2] ^= (s[8] & s[13]); + s[4] += (s[2] | s[15]); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[6] *= (s[15] | 1u); + s[4] ^= s[6] ^ 0xda23719bu; + s[10] += s[4]; + s[14] = s[14] * 0x7d043037u + s[10]; + s[1] = (s[1] ^ s[14]) * 0x3702ca63u; + s[14] = s[14] * 0x6069e073u + s[1]; + s[11] += s[14]; + s[15] += s[11] + 0x080f6236u; + s[14] += s[15]; + s[0] ^= s[14] ^ 0xbcf33252u; + s[8] ^= (s[0] & s[4]); + s[10] ^= s[8] ^ 0x42b4ca59u; + s[5] ^= s[10]; + s[0] = (s[0] ^ s[5]) * 0xeff77d4bu; + s[3] = mh_rotl(s[3], 7u) + s[0]; + s[14] ^= s[3] ^ 0xa94ec34bu; + s[4] = mh_rotl(s[4], 11u) + s[14]; + s[8] = mh_rotl(s[8] ^ s[4], 26u); + s[0] = mh_rotl(s[0] ^ s[8], 29u); + s[2] = mh_rotl(s[2], 1u) + s[0]; + s[14] += s[2] + 0xe0207936u; + s[10] *= (s[14] | 1u); + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[4] += s[8] + 0x401aa131u; + s[0] += s[4]; + s[12] = mh_rotl(s[12] ^ s[0], 1u); + s[6] += s[12]; + s[5] = (s[5] ^ s[6]) * 0x5402ef7fu; + s[3] ^= s[5]; + s[12] -= s[3]; + s[14] ^= s[12] ^ 0xa47dfa06u; + s[6] = (s[6] ^ s[14]) * 0xd40c13a9u; + s[8] = (s[8] ^ s[6]) * 0xfd2046ddu; + s[2] = (s[2] ^ s[8]) * 0x06e4aacbu; + s[13] = mh_rotl(s[13], 29u) + s[2]; + s[0] ^= s[13]; + s[15] = mh_rotl(s[15], 19u) + s[0]; + s[10] += (s[15] | s[2]); + s[3] ^= s[10] ^ 0xd34e89bcu; + s[10] ^= s[3] ^ 0xbd40c99cu; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[12] += s[14]; + s[9] = mh_rotl(s[9] ^ s[12], 21u); + s[2] = (s[2] ^ s[9]) * 0xacae09c7u; + s[5] -= s[2]; + s[3] ^= s[5]; + s[14] -= s[3]; + s[5] = s[5] * 0xaf5e1497u + s[14]; + s[8] ^= (s[5] & s[12]); + s[6] ^= s[8]; + s[15] += s[6]; + s[12] ^= (s[15] & s[13]); + s[9] = mh_rotl(s[9] ^ s[12], 8u); + s[1] = mh_rotl(s[1] ^ s[9], 11u); + s[2] += s[1]; + s[4] ^= (s[2] & s[5]); + s[14] = (s[14] ^ s[4]) * 0x818385b1u; + s[7] += s[14]; + s[8] ^= s[7] ^ 0x4eae6b36u; + s[13] = mh_rotl(s[13], 19u) + s[8]; + s[6] *= (s[13] | 1u); + s[15] ^= s[6]; + s[5] = mh_rotl(s[5], 18u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[5], 16u); + s[9] += (s[6] | s[14]); + s[12] *= (s[9] | 1u); + s[0] = (s[0] ^ s[12]) * 0x5540eec9u; + s[10] ^= s[0] ^ 0x57f45e0eu; + s[12] = mh_rotl(s[12], 19u) + s[10]; + s[9] -= s[12]; + s[10] += s[9] + 0x4e7af6edu; + s[7] *= (s[10] | 1u); + s[14] *= (s[7] | 1u); + s[10] *= (s[14] | 1u); + s[13] ^= s[10]; + s[6] += s[13] + 0xdeaaf3c5u; + s[5] = (s[5] ^ s[6]) * 0x6626311bu; + s[8] += s[5]; + s[14] -= s[8]; + s[1] += s[14]; + s[0] = mh_rotl(s[0], 14u) + s[1]; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9] ^ s[1], 3u); + s[14] ^= s[9]; + s[3] += s[14]; + s[0] += s[3]; + s[6] = mh_rotl(s[6], 9u) + s[0]; + s[10] = mh_rotl(s[10] ^ s[6], 18u); + s[3] -= s[10]; + s[0] = (s[0] ^ s[3]) * 0xf8e0b555u; + s[5] = (s[5] ^ s[0]) * 0x90f83cc5u; + s[15] -= s[5]; + s[13] = (s[13] ^ s[15]) * 0x1028be17u; + s[8] ^= s[13] ^ 0x6f814efau; + s[3] = mh_rotl(s[3], 7u) + s[8]; + s[13] = s[13] * 0x1fe5d55du + s[3]; + s[14] += s[13]; + s[11] *= (s[14] | 1u); + s[8] = s[8] * 0xec49ce8fu + s[11]; + s[1] ^= s[8] ^ 0x6ce63203u; + s[13] = mh_rotl(s[13] ^ s[1], 3u); + s[4] = (s[4] ^ s[13]) * 0x1f4d84d5u; + s[3] = mh_rotl(s[3] ^ s[4], 19u); + s[6] ^= s[3] ^ 0x99bbd04au; + s[15] = mh_rotl(s[15], 23u) + s[6]; + s[5] ^= s[15]; + s[7] ^= s[5]; + s[12] = s[12] * 0x41bf1949u + s[7]; + s[3] ^= s[12] ^ 0xc73c6eaau; + s[5] += s[3]; + s[12] += s[5] + 0xaca33a02u; + s[2] += s[12]; + s[1] -= s[2]; + s[2] ^= (s[1] & s[8]); + s[15] *= (s[2] | 1u); + s[12] += s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 22u); + s[15] *= (s[2] | 1u); + s[2] += s[15]; + s[8] -= s[2]; + s[4] += s[8]; + s[6] += s[4]; + s[7] += s[6]; + s[13] += s[7]; + s[9] += s[13]; + s[11] += s[9]; + s[8] += s[11]; + s[10] = mh_rotl(s[10] ^ s[8], 23u); + s[7] -= s[10]; + s[3] += s[7]; + s[6] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[0] ^= s[5]; + s[13] = mh_rotl(s[13] ^ s[0], 26u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[13] += s[4]; + s[8] = mh_rotl(s[8] ^ s[13], 17u); + s[6] -= s[8]; + s[4] = mh_rotl(s[4] ^ s[6], 13u); + s[6] -= s[4]; + s[10] = mh_rotl(s[10], 17u) + s[6]; + s[8] = (s[8] ^ s[10]) * 0x5414f521u; + s[5] ^= (s[8] & s[12]); + s[12] += s[5]; + s[9] ^= s[12]; + s[4] = mh_rotl(s[4] ^ s[9], 22u); + s[6] ^= (s[4] & s[15]); + s[5] += s[6]; + s[2] ^= (s[5] & s[3]); + s[15] ^= s[2]; + s[11] += s[15]; + s[8] -= s[11]; + s[3] -= s[8]; + s[8] = s[8] * 0xb35e6bc9u + s[3]; + s[14] ^= s[8]; + s[6] *= (s[14] | 1u); + s[14] -= s[6]; + s[4] ^= s[14]; + s[0] ^= s[4]; + s[13] = (s[13] ^ s[0]) * 0xe1a27a3du; + s[1] = mh_rotl(s[1] ^ s[13], 4u); + s[8] = (s[8] ^ s[1]) * 0x7db5fbb1u; + s[5] += s[8]; + s[9] += s[5]; + s[6] *= (s[9] | 1u); + s[7] = (s[7] ^ s[6]) * 0x33889ef9u; + s[13] = mh_rotl(s[13] ^ s[7], 11u); + s[9] ^= s[13]; + s[8] = mh_rotl(s[8], 4u) + s[9]; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[10] ^= s[11] ^ 0x833b63eeu; + s[14] *= (s[10] | 1u); + s[5] -= s[14]; + s[3] ^= s[5]; + s[10] *= (s[3] | 1u); + s[15] = mh_rotl(s[15], 15u) + s[10]; + s[10] -= s[15]; + s[11] ^= s[10]; + s[15] += s[11] + 0x67b25095u; + s[5] = mh_rotl(s[5] ^ s[15], 6u); + s[12] += s[5]; + s[4] += (s[12] | s[15]); + s[12] += s[4] + 0x0b5448beu; + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0x9db08cddu; + s[4] = mh_rotl(s[4], 5u) + s[12]; + s[12] *= (s[4] | 1u); + s[5] ^= s[12]; + s[7] ^= (s[5] & s[15]); + s[2] = mh_rotl(s[2], 9u) + s[7]; + s[7] = (s[7] ^ s[2]) * 0xef5cc1a1u; + s[13] ^= s[7]; + s[2] += s[13] + 0xe8acb081u; + s[7] += s[2]; + s[13] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[4] += s[11]; + s[3] += s[4] + 0x2bf7bd89u; + s[15] += s[3]; + s[11] = mh_rotl(s[11] ^ s[15], 10u); + s[0] = mh_rotl(s[0] ^ s[11], 17u); + s[6] = mh_rotl(s[6] ^ s[0], 20u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[6] = mh_rotl(s[6], 26u) + s[8]; + s[11] = mh_rotl(s[11], 18u) + s[6]; + s[0] = mh_rotl(s[0], 29u) + s[11]; + s[2] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[2], 21u); + s[8] += s[11]; + s[1] ^= s[8]; + s[12] = mh_rotl(s[12], 21u) + s[1]; + s[9] = mh_rotl(s[9] ^ s[12], 30u); + s[12] = (s[12] ^ s[9]) * 0xaa6bd425u; + s[10] += s[12] + 0x3abc6eeeu; + s[4] = (s[4] ^ s[10]) * 0x26651b39u; + s[1] = (s[1] ^ s[4]) * 0x669011cbu; + s[12] = (s[12] ^ s[1]) * 0xc730fa63u; + s[4] *= (s[12] | 1u); + s[1] += s[4]; + s[13] = (s[13] ^ s[1]) * 0xa91d1549u; + s[8] = mh_rotl(s[8] ^ s[13], 20u); + s[15] = mh_rotl(s[15] ^ s[8], 19u); + s[9] ^= s[15]; + s[12] += s[9]; + s[6] ^= s[12]; + s[7] = mh_rotl(s[7], 10u) + s[6]; + s[6] = s[6] * 0x4737bba1u + s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 4u); + s[15] = (s[15] ^ s[7]) * 0x1550c0c9u; + s[6] = (s[6] ^ s[15]) * 0xa9708363u; + s[11] = s[11] * 0x7ed5889du + s[6]; + s[14] += s[11] + 0xe220d224u; + s[5] += s[14] + 0xa5c27ec0u; + s[3] ^= s[5]; + s[11] = (s[11] ^ s[3]) * 0x83211151u; + s[1] += s[11]; + s[0] -= s[1]; + s[8] += s[0]; + s[10] = mh_rotl(s[10], 22u) + s[8]; + s[14] -= s[10]; + s[13] ^= s[14]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[5] *= (s[12] | 1u); + s[2] *= (s[5] | 1u); + s[13] += s[2]; + s[14] ^= s[13]; + s[7] = mh_rotl(s[7] ^ s[14], 8u); + s[10] ^= s[7]; + s[8] ^= s[10]; + s[4] = mh_rotl(s[4], 25u) + s[8]; + s[11] ^= s[4]; + s[13] += s[11] + 0xc7fb1dc5u; + s[6] ^= s[13] ^ 0xda0de0b3u; + s[9] *= (s[6] | 1u); + s[0] += s[9]; + s[10] = mh_rotl(s[10], 30u) + s[0]; + s[11] = mh_rotl(s[11], 31u) + s[10]; + s[14] -= s[11]; + s[4] ^= s[14]; + s[7] *= (s[4] | 1u); + s[4] += s[7]; + s[9] = mh_rotl(s[9], 16u) + s[4]; + s[5] -= s[9]; + s[14] = mh_rotl(s[14], 23u) + s[5]; + s[8] += s[14]; + s[13] += (s[8] | s[4]); + s[3] -= s[13]; + s[9] ^= s[3]; + s[7] *= (s[9] | 1u); + s[0] *= (s[7] | 1u); + s[4] = s[4] * 0xa5531c79u + s[0]; + s[5] += s[4] + 0x956e1cecu; + s[4] = mh_rotl(s[4], 12u) + s[5]; + s[13] ^= s[4] ^ 0xcfd8a170u; + s[8] = mh_rotl(s[8] ^ s[13], 2u); + s[12] *= (s[8] | 1u); + s[7] = mh_rotl(s[7], 18u) + s[12]; +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_8(uint* s) { + s[12] *= (s[0] | 1u); + s[14] ^= s[12]; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[9] ^= s[7]; + s[7] += (s[9] | s[15]); + s[14] ^= s[7]; + s[12] ^= s[14]; + s[9] += s[12]; + s[0] -= s[9]; + s[11] = (s[11] ^ s[0]) * 0x032a9d93u; + s[12] ^= s[11] ^ 0x7816ceedu; + s[6] += s[12]; + s[7] ^= s[6] ^ 0x5f893870u; + s[8] ^= s[7] ^ 0x38fe7d15u; + s[5] += s[8]; + s[11] = mh_rotl(s[11] ^ s[5], 5u); + s[3] = s[3] * 0xdc8f2169u + s[11]; + s[12] += s[3]; + s[1] = (s[1] ^ s[12]) * 0xff5bb02du; + s[9] += s[1]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[5], 9u); + s[12] += s[10]; + s[2] += s[12] + 0x6fbd2719u; + s[7] *= (s[2] | 1u); + s[10] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 12u) + s[10]; + s[15] ^= (s[7] & s[2]); + s[1] = (s[1] ^ s[15]) * 0xa496dd7du; + s[12] += s[1]; + s[9] *= (s[12] | 1u); + s[4] += s[9] + 0x603c29a5u; + s[0] = (s[0] ^ s[4]) * 0xb11db5efu; + s[12] = mh_rotl(s[12] ^ s[0], 12u); + s[9] ^= s[12]; + s[3] += s[9]; + s[4] ^= s[3]; + s[10] = s[10] * 0xf2876a93u + s[4]; + s[3] *= (s[10] | 1u); + s[13] *= (s[3] | 1u); + s[10] += s[13]; + s[0] += s[10] + 0xa38ef984u; + s[13] += s[0]; + s[0] += s[13]; + s[4] -= s[0]; + s[8] = mh_rotl(s[8], 16u) + s[4]; + s[0] *= (s[8] | 1u); + s[1] = mh_rotl(s[1] ^ s[0], 19u); + s[10] -= s[1]; + s[4] -= s[10]; + s[3] += s[4] + 0x98d38850u; + s[15] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[0] ^= s[12]; + s[8] += (s[0] | s[12]); + s[1] -= s[8]; + s[0] -= s[1]; + s[12] += s[0]; + s[1] = mh_rotl(s[1] ^ s[12], 8u); + s[8] = s[8] * 0xdb178cedu + s[1]; + s[13] ^= (s[8] & s[9]); + s[14] = mh_rotl(s[14] ^ s[13], 31u); + s[5] = mh_rotl(s[5] ^ s[14], 15u); + s[14] += s[5] + 0x58102672u; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[9] = (s[9] ^ s[13]) * 0xcea6b9a5u; + s[8] = mh_rotl(s[8] ^ s[9], 10u); + s[0] ^= s[8]; + s[1] = mh_rotl(s[1] ^ s[0], 26u); + s[0] ^= (s[1] & s[14]); + s[14] = mh_rotl(s[14] ^ s[0], 29u); + s[7] = mh_rotl(s[7] ^ s[14], 10u); + s[8] ^= s[7]; + s[4] ^= s[8]; + s[3] ^= s[4]; + s[1] ^= (s[3] & s[2]); + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[3] = (s[3] ^ s[15]) * 0xf98d62f9u; + s[8] += s[3]; + s[4] ^= s[8]; + s[13] ^= s[4]; + s[14] -= s[13]; + s[13] += s[14]; + s[1] *= (s[13] | 1u); + s[4] += s[1] + 0x2e4fd7f9u; + s[3] += s[4] + 0xad1f68c8u; + s[11] += s[3]; + s[7] ^= s[11]; + s[2] ^= s[7]; + s[7] += (s[2] | s[0]); + s[3] += (s[7] | s[4]); + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[2] += (s[9] | s[4]); + s[7] += s[2]; + s[0] ^= s[7]; + s[5] += s[0]; + s[6] ^= s[5] ^ 0xdd9e035eu; + s[11] *= (s[6] | 1u); + s[6] += (s[11] | s[15]); + s[0] -= s[6]; + s[13] ^= s[0] ^ 0x28746675u; + s[1] ^= s[13]; + s[4] *= (s[1] | 1u); + s[8] += (s[4] | s[6]); + s[2] ^= (s[8] & s[15]); + s[15] += s[2]; + s[3] ^= s[15]; + s[9] -= s[3]; + s[1] = (s[1] ^ s[9]) * 0x9a49d919u; + s[0] *= (s[1] | 1u); + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 13u) + s[12]; + s[8] += s[4]; + s[15] ^= s[8]; + s[1] ^= s[15]; + s[8] = (s[8] ^ s[1]) * 0x406ccbb9u; + s[6] ^= s[8] ^ 0x9c63a403u; + s[7] *= (s[6] | 1u); + s[6] ^= s[7]; + s[3] -= s[6]; + s[2] -= s[3]; + s[1] -= s[2]; + s[11] -= s[1]; + s[5] = (s[5] ^ s[11]) * 0xc8b2063bu; + s[9] ^= s[5]; + s[11] += s[9]; + s[14] -= s[11]; + s[12] ^= s[14]; + s[7] = mh_rotl(s[7], 19u) + s[12]; + s[6] ^= s[7]; + s[7] = mh_rotl(s[7], 28u) + s[6]; + s[0] += (s[7] | s[8]); + s[5] = (s[5] ^ s[0]) * 0x91563ef9u; + s[4] = (s[4] ^ s[5]) * 0x2489c7ddu; + s[0] ^= s[4]; + s[8] += s[0]; + s[13] ^= (s[8] & s[2]); + s[4] = (s[4] ^ s[13]) * 0xd3f73963u; + s[0] += s[4]; + s[7] -= s[0]; + s[8] *= (s[7] | 1u); + s[12] += s[8] + 0xe7c7770bu; + s[2] = mh_rotl(s[2] ^ s[12], 24u); + s[5] += s[2]; + s[13] -= s[5]; + s[7] = s[7] * 0xa499d785u + s[13]; + s[14] ^= s[7] ^ 0xa5531f53u; + s[0] += s[14]; + s[12] += s[0]; + s[4] += s[12]; + s[5] ^= s[4] ^ 0xa21d41b2u; + s[13] ^= (s[5] & s[1]); + s[4] *= (s[13] | 1u); + s[15] = mh_rotl(s[15], 17u) + s[4]; + s[13] = s[13] * 0x9e80ce17u + s[15]; + s[4] ^= s[13]; + s[9] = s[9] * 0x0efbb90fu + s[4]; + s[3] = mh_rotl(s[3], 22u) + s[9]; + s[9] += s[3]; + s[7] = (s[7] ^ s[9]) * 0x41f4c675u; + s[2] = mh_rotl(s[2] ^ s[7], 10u); + s[5] += s[2]; + s[7] += s[5]; + s[3] ^= s[7]; + s[13] += s[3]; + s[10] += (s[13] | s[12]); + s[6] -= s[10]; + s[4] *= (s[6] | 1u); + s[9] *= (s[4] | 1u); + s[1] ^= (s[9] & s[2]); + s[13] = mh_rotl(s[13], 17u) + s[1]; + s[6] += (s[13] | s[14]); + s[14] = (s[14] ^ s[6]) * 0x3fcef445u; + s[2] += (s[14] | s[13]); + s[14] ^= s[2]; + s[9] = (s[9] ^ s[14]) * 0x76f83471u; + s[15] += s[9] + 0x3620bb75u; + s[6] = (s[6] ^ s[15]) * 0xd2ae1b99u; + s[11] += s[6]; + s[1] = mh_rotl(s[1], 9u) + s[11]; + s[2] *= (s[1] | 1u); + s[15] += (s[2] | s[5]); + s[9] = s[9] * 0xd0673ad9u + s[15]; + s[0] ^= (s[9] & s[10]); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x1626d79fu; + s[6] ^= s[0]; + s[5] -= s[6]; + s[1] += s[5] + 0xbdfebf4au; + s[10] += (s[1] | s[15]); + s[3] -= s[10]; + s[14] ^= s[3] ^ 0x2f4d32b3u; + s[0] ^= (s[14] & s[4]); + s[10] += s[0] + 0xfec9017au; + s[8] += s[10]; + s[5] -= s[8]; + s[3] += s[5]; + s[0] += s[3] + 0x0a719f0bu; + s[4] -= s[0]; + s[1] ^= s[4]; + s[7] ^= (s[1] & s[12]); + s[2] ^= (s[7] & s[5]); + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[5], 30u); + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[8] += s[12] + 0x934b929du; + s[6] *= (s[8] | 1u); + s[9] ^= (s[6] & s[4]); + s[3] ^= s[9]; + s[14] += s[3]; + s[1] *= (s[14] | 1u); + s[14] *= (s[1] | 1u); + s[5] ^= s[14]; + s[10] ^= s[5]; + s[13] *= (s[10] | 1u); + s[4] -= s[13]; + s[9] = s[9] * 0xc3f9050bu + s[4]; + s[0] = (s[0] ^ s[9]) * 0x4479cb01u; + s[10] = mh_rotl(s[10] ^ s[0], 22u); + s[7] ^= s[10]; + s[11] ^= (s[7] & s[10]); + s[1] = (s[1] ^ s[11]) * 0xa9a3102bu; + s[9] += s[1]; + s[3] = mh_rotl(s[3], 4u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[3], 16u); + s[9] += (s[10] | s[1]); + s[15] = s[15] * 0xf4a9fbe3u + s[9]; + s[5] += (s[15] | s[1]); + s[14] = s[14] * 0x0fdccaebu + s[5]; + s[7] += s[14] + 0x7e2f9108u; + s[3] -= s[7]; + s[13] *= (s[3] | 1u); + s[11] ^= s[13] ^ 0xc4dab8b7u; + s[3] ^= s[11]; + s[0] += s[3]; + s[1] *= (s[0] | 1u); + s[13] = (s[13] ^ s[1]) * 0x735874d5u; + s[3] ^= s[13]; + s[2] += s[3]; + s[8] ^= s[2]; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[5], 8u); + s[5] += s[6] + 0xc7780520u; + s[12] ^= s[5]; + s[0] *= (s[12] | 1u); + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 9u); + s[10] -= s[5]; + s[6] += s[10]; + s[8] += s[6]; + s[4] ^= s[8]; + s[0] ^= s[4]; + s[15] += s[0]; + s[0] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[0], 14u); + s[4] += s[15]; + s[6] = mh_rotl(s[6], 16u) + s[4]; + s[2] *= (s[6] | 1u); + s[5] ^= s[2]; + s[6] ^= s[5]; + s[3] = mh_rotl(s[3], 28u) + s[6]; + s[2] -= s[3]; + s[0] = mh_rotl(s[0], 3u) + s[2]; + s[4] = s[4] * 0xc5ff28b1u + s[0]; + s[13] = mh_rotl(s[13] ^ s[4], 17u); + s[2] = (s[2] ^ s[13]) * 0xf64a55e7u; + s[10] += s[2]; + s[5] -= s[10]; + s[0] = (s[0] ^ s[5]) * 0xc34391fbu; + s[9] ^= s[0]; + s[14] = (s[14] ^ s[9]) * 0xd3626e5fu; + s[12] += s[14] + 0x34b62de8u; + s[0] = mh_rotl(s[0], 3u) + s[12]; + s[10] -= s[0]; + s[5] ^= s[10]; + s[3] *= (s[5] | 1u); + s[1] += s[3]; + s[9] ^= s[1]; + s[14] ^= s[9]; + s[1] = mh_rotl(s[1] ^ s[14], 24u); + s[3] = (s[3] ^ s[1]) * 0xb486108bu; + s[13] += s[3]; + s[8] = mh_rotl(s[8] ^ s[13], 15u); + s[2] += s[8]; + s[13] = mh_rotl(s[13] ^ s[2], 6u); + s[1] -= s[13]; + s[13] += (s[1] | s[12]); + s[3] ^= s[13]; + s[1] *= (s[3] | 1u); + s[10] += s[1]; + s[0] = mh_rotl(s[0] ^ s[10], 11u); + s[14] = mh_rotl(s[14] ^ s[0], 9u); + s[3] = (s[3] ^ s[14]) * 0x1910cbd5u; + s[2] *= (s[3] | 1u); + s[3] ^= s[2] ^ 0x36e5f7c1u; + s[12] ^= s[3] ^ 0xc06b695au; + s[8] += s[12]; + s[11] *= (s[8] | 1u); + s[14] ^= s[11] ^ 0x7e8392d2u; + s[5] += s[14] + 0xc854c03eu; + s[14] += s[5] + 0x6264b077u; + s[3] ^= s[14]; + s[9] ^= s[3]; + s[5] += (s[9] | s[11]); + s[2] ^= s[5]; + s[12] = mh_rotl(s[12] ^ s[2], 11u); + s[9] -= s[12]; + s[11] ^= (s[9] & s[3]); + s[14] -= s[11]; + s[15] = mh_rotl(s[15], 7u) + s[14]; + s[10] *= (s[15] | 1u); + s[12] *= (s[10] | 1u); + s[3] += s[12]; + s[9] = mh_rotl(s[9], 5u) + s[3]; + s[3] += s[9] + 0x25bbb855u; + s[13] += s[3]; + s[7] += s[13]; + s[10] += s[7]; + s[13] += s[10] + 0x9a1fb9e1u; + s[9] += s[13] + 0x4a7d742fu; + s[11] ^= s[9]; + s[15] = (s[15] ^ s[11]) * 0xd796e1a9u; + s[0] += s[15] + 0x4fb80a99u; + s[14] ^= s[0]; + s[4] -= s[14]; + s[0] = mh_rotl(s[0], 19u) + s[4]; + s[3] ^= s[0]; + s[0] += s[3] + 0x7a46f0d4u; + s[9] += s[0]; + s[11] ^= s[9]; + s[2] += s[11]; + s[0] ^= s[2]; + s[10] = mh_rotl(s[10], 5u) + s[0]; + s[4] += s[10]; + s[7] -= s[4]; + s[12] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[12] ^= s[10]; + s[8] ^= s[12]; + s[7] ^= s[8]; + s[8] += s[7]; + s[0] += s[8] + 0xf25eb71du; + s[15] *= (s[0] | 1u); + s[14] *= (s[15] | 1u); + s[6] += s[14] + 0xc3c48a42u; + s[15] = (s[15] ^ s[6]) * 0x8ff157e3u; + s[4] = s[4] * 0x4517a273u + s[15]; + s[9] ^= s[4]; + s[8] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 3u); + s[1] = mh_rotl(s[1], 15u) + s[11]; + s[0] = mh_rotl(s[0], 11u) + s[1]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] ^= s[4]; + s[8] -= s[0]; + s[5] += (s[8] | s[0]); + s[13] ^= s[5] ^ 0x842fa93fu; + s[10] = s[10] * 0xebf84a5bu + s[13]; + s[9] *= (s[10] | 1u); + s[10] += s[9] + 0xa4ae65abu; + s[7] += s[10]; + s[4] += s[7]; + s[8] = (s[8] ^ s[4]) * 0xa095c55bu; + s[13] += s[8]; + s[1] += s[13] + 0x78267af3u; + s[15] -= s[1]; + s[14] ^= s[15]; + s[9] += s[14]; + s[5] += s[9]; + s[12] *= (s[5] | 1u); + s[14] += s[12]; + s[3] = s[3] * 0x387e70c1u + s[14]; + s[8] += s[3] + 0x4bb62e79u; + s[10] += s[8]; + s[14] -= s[10]; + s[12] += s[14] + 0x94ade867u; + s[11] += s[12]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[9] -= s[3]; + s[8] ^= s[9]; + s[10] += s[8]; + s[12] = (s[12] ^ s[10]) * 0xf31b9bf9u; + s[9] -= s[12]; + s[14] ^= s[9]; + s[4] = (s[4] ^ s[14]) * 0x6c65ed0fu; + s[5] ^= (s[4] & s[3]); + s[13] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[13], 27u); + s[15] *= (s[8] | 1u); + s[14] ^= s[15]; + s[1] += s[14] + 0x0dabf75fu; + s[8] += s[1]; + s[6] ^= (s[8] & s[4]); + s[2] -= s[6]; + s[10] = (s[10] ^ s[2]) * 0x5df68b21u; + s[7] *= (s[10] | 1u); + s[2] = mh_rotl(s[2], 30u) + s[7]; + s[3] = mh_rotl(s[3] ^ s[2], 11u); + s[10] ^= s[3]; + s[12] = mh_rotl(s[12], 18u) + s[10]; + s[3] = mh_rotl(s[3] ^ s[12], 2u); + s[15] -= s[3]; + s[12] ^= (s[15] & s[3]); + s[6] += s[12] + 0xba8c656du; + s[11] = mh_rotl(s[11] ^ s[6], 25u); + s[8] *= (s[11] | 1u); + s[12] += (s[8] | s[1]); + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[0] ^= s[10] ^ 0xf57cb31cu; + s[15] ^= s[0]; + s[5] += s[15]; + s[2] ^= s[5]; + s[14] += (s[2] | s[4]); + s[10] ^= s[14] ^ 0xfc568076u; + s[2] += s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[3] ^= s[0]; + s[7] = mh_rotl(s[7], 28u) + s[3]; + s[9] ^= s[7]; + s[11] -= s[9]; + s[8] -= s[11]; + s[10] += s[8] + 0x44a98267u; + s[6] = (s[6] ^ s[10]) * 0x78341057u; + s[9] *= (s[6] | 1u); + s[8] ^= s[9]; + s[9] -= s[8]; + s[11] += s[9]; + s[4] ^= s[11]; + s[7] += (s[4] | s[5]); + s[11] ^= s[7]; + s[14] += s[11]; + s[3] = mh_rotl(s[3], 10u) + s[14]; + s[1] = (s[1] ^ s[3]) * 0x699c712fu; + s[0] ^= s[1] ^ 0xadd48ad1u; + s[3] = mh_rotl(s[3] ^ s[0], 18u); + s[0] ^= s[3] ^ 0x7c2a7e58u; + s[1] = (s[1] ^ s[0]) * 0x5d0ba3bbu; + s[10] = mh_rotl(s[10] ^ s[1], 9u); + s[0] ^= s[10] ^ 0x3f61235cu; + s[2] ^= s[0]; + s[8] -= s[2]; + s[12] *= (s[8] | 1u); + s[10] *= (s[12] | 1u); + s[7] ^= s[10] ^ 0x4fe234e6u; + s[15] ^= s[7]; + s[3] += s[15] + 0x7518599bu; + s[12] = mh_rotl(s[12], 9u) + s[3]; + s[8] ^= s[12]; + s[9] ^= s[8] ^ 0xf95c4703u; + s[2] = mh_rotl(s[2], 7u) + s[9]; + s[12] ^= s[2] ^ 0x775646a8u; + s[15] ^= s[12] ^ 0x552eaf71u; + s[4] -= s[15]; + s[15] += (s[4] | s[7]); + s[0] ^= s[15]; + s[13] ^= s[0]; + s[14] += s[13] + 0x87e74b49u; + s[6] ^= s[14] ^ 0x6efaba41u; + s[10] += s[6] + 0x88e2108fu; + s[7] -= s[10]; + s[11] -= s[7]; + s[4] ^= s[11] ^ 0xa876c358u; + s[2] ^= s[4] ^ 0xd3f39ab5u; + s[5] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 9u) + s[5]; + s[2] ^= s[3]; + s[8] = mh_rotl(s[8] ^ s[2], 2u); + s[5] = (s[5] ^ s[8]) * 0x9b50170fu; + s[13] = mh_rotl(s[13] ^ s[5], 7u); + s[0] += s[13]; + s[13] -= s[0]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[11] = mh_rotl(s[11], 6u) + s[5]; + s[1] += s[11]; + s[10] += (s[1] | s[13]); + s[4] ^= s[10]; + s[5] *= (s[4] | 1u); + s[4] ^= s[5]; + s[3] += s[4]; + s[4] = mh_rotl(s[4], 29u) + s[3]; + s[5] *= (s[4] | 1u); + s[2] ^= s[5] ^ 0x435d474cu; + s[15] = mh_rotl(s[15] ^ s[2], 31u); + s[14] += s[15]; + s[15] += s[14]; + s[13] -= s[15]; + s[7] += s[13]; + s[0] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[0], 13u); + s[13] -= s[5]; + s[15] *= (s[13] | 1u); + s[8] += s[15] + 0xbf3496cau; + s[3] = mh_rotl(s[3] ^ s[8], 13u); + s[4] = mh_rotl(s[4], 20u) + s[3]; + s[6] = (s[6] ^ s[4]) * 0xe0716b4du; + s[3] ^= s[6]; + s[11] ^= s[3]; + s[12] += (s[11] | s[7]); + s[0] = mh_rotl(s[0], 7u) + s[12]; + s[8] ^= s[0]; + s[1] += s[8]; + s[13] = mh_rotl(s[13] ^ s[1], 22u); + s[4] ^= s[13] ^ 0xaac36692u; + s[1] *= (s[4] | 1u); + s[8] ^= s[1] ^ 0x1e4e42deu; + s[15] *= (s[8] | 1u); + s[5] += (s[15] | s[11]); + s[13] += s[5]; + s[6] ^= s[13]; + s[12] ^= s[6] ^ 0xb025ee52u; + s[5] += s[12]; + s[2] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[2], 8u); + s[15] -= s[10]; + s[5] += (s[15] | s[10]); + s[3] += s[5]; + s[2] -= s[3]; + s[10] += s[2] + 0x80d367feu; + s[12] -= s[10]; + s[15] *= (s[12] | 1u); + s[6] ^= s[15] ^ 0x8d56107cu; + s[15] ^= s[6]; + s[4] = mh_rotl(s[4] ^ s[15], 9u); + s[12] += (s[4] | s[14]); + s[13] = mh_rotl(s[13] ^ s[12], 10u); + s[2] ^= s[13]; + s[14] = s[14] * 0x1a3e65cbu + s[2]; + s[15] *= (s[14] | 1u); + s[11] += s[15]; + s[7] ^= s[11]; + s[12] -= s[7]; + s[8] ^= s[12] ^ 0xfadd6688u; + s[7] = mh_rotl(s[7], 8u) + s[8]; + s[9] += s[7]; + s[14] ^= s[9]; + s[13] += s[14]; + s[6] ^= s[13] ^ 0xed97a531u; + s[7] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[6] ^= s[4]; + s[10] ^= s[6]; + s[3] ^= s[10]; + s[1] -= s[3]; + s[3] += s[1]; + s[13] = (s[13] ^ s[3]) * 0x48c92b9fu; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[11] = mh_rotl(s[11], 12u) + s[2]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 19u); + s[0] += (s[12] | s[7]); + s[2] = (s[2] ^ s[0]) * 0x3e4b61a1u; + s[0] = (s[0] ^ s[2]) * 0x582f7a5fu; + s[12] = (s[12] ^ s[0]) * 0x2b069c6fu; + s[5] = s[5] * 0x7cf7ee03u + s[12]; + s[0] += s[5]; + s[4] = (s[4] ^ s[0]) * 0x16927f07u; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[12] = mh_rotl(s[12], 15u) + s[2]; + s[5] = (s[5] ^ s[12]) * 0xbf55dac1u; + s[10] *= (s[5] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 16u); + s[3] = mh_rotl(s[3] ^ s[6], 20u); + s[5] += s[3] + 0xc2d80c0eu; + s[13] ^= s[5] ^ 0x9407a51du; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[10] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[10], 6u); + s[3] = mh_rotl(s[3], 5u) + s[1]; + s[9] ^= (s[3] & s[0]); + s[15] ^= s[9]; + s[6] -= s[15]; + s[13] ^= s[6] ^ 0xba96a2feu; + s[14] ^= s[13] ^ 0x39f982b0u; + s[8] += s[14] + 0x4c13cb1au; + s[7] = mh_rotl(s[7] ^ s[8], 23u); + s[15] -= s[7]; + s[7] = mh_rotl(s[7], 30u) + s[15]; + s[11] += s[7]; + s[14] += s[11]; + s[8] = mh_rotl(s[8] ^ s[14], 22u); + s[6] ^= s[8] ^ 0x34c4199bu; + s[3] ^= s[6]; + s[4] += s[3]; + s[13] += s[4]; + s[9] ^= s[13]; + s[3] ^= (s[9] & s[4]); + s[15] += s[3]; + s[1] -= s[15]; + s[12] -= s[1]; + s[14] += s[12] + 0xec96595fu; + s[4] ^= s[14]; + s[12] ^= s[4]; + s[11] -= s[12]; + s[13] ^= s[11]; + s[0] += s[13]; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[8] ^= s[3]; + s[0] += (s[8] | s[15]); + s[11] = mh_rotl(s[11], 1u) + s[0]; + s[7] += (s[11] | s[5]); + s[4] = s[4] * 0xc1674329u + s[7]; + s[7] += s[4]; + s[6] *= (s[7] | 1u); + s[2] = (s[2] ^ s[6]) * 0xc284407bu; + s[0] ^= s[2]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 27u) + s[7]; + s[8] *= (s[14] | 1u); + s[14] -= s[8]; + s[11] *= (s[14] | 1u); + s[7] = s[7] * 0x5a2517e9u + s[11]; + s[6] += s[7]; + s[7] ^= s[6] ^ 0xf29de804u; + s[10] -= s[7]; + s[8] ^= s[10]; + s[5] = mh_rotl(s[5], 6u) + s[8]; + s[3] += s[5] + 0xa3c2f2b2u; + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[12] -= s[0]; + s[8] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[8], 1u); + s[12] = s[12] * 0xed2bef65u + s[6]; + s[9] += s[12]; + s[4] ^= s[9] ^ 0xacaef5beu; + s[3] += s[4]; + s[1] *= (s[3] | 1u); + s[8] += s[1] + 0x462f5fffu; + s[2] ^= s[8]; + s[1] += s[2]; + s[11] = mh_rotl(s[11], 14u) + s[1]; + s[6] ^= s[11] ^ 0xa93bca39u; + s[1] ^= s[6]; + s[0] ^= s[1] ^ 0x571f65b5u; + s[9] = s[9] * 0xcd8edcedu + s[0]; + s[11] ^= s[9] ^ 0xa554ca69u; + s[2] += s[11]; + s[9] ^= s[2]; + s[4] ^= s[9]; + s[8] += s[4]; + s[4] += s[8]; + s[12] -= s[4]; + s[4] -= s[12]; + s[12] = mh_rotl(s[12] ^ s[4], 1u); + s[5] = mh_rotl(s[5] ^ s[12], 17u); + s[14] *= (s[5] | 1u); + s[8] += (s[14] | s[4]); + s[13] = mh_rotl(s[13] ^ s[8], 21u); + s[15] -= s[13]; + s[0] ^= s[15]; + s[6] += s[0]; + s[14] = mh_rotl(s[14] ^ s[6], 24u); + s[13] = s[13] * 0x929d4b37u + s[14]; + s[15] -= s[13]; + s[4] = (s[4] ^ s[15]) * 0xc6dc8fbbu; + s[7] = mh_rotl(s[7] ^ s[4], 23u); + s[8] ^= s[7]; + s[10] = (s[10] ^ s[8]) * 0x06233043u; + s[2] = (s[2] ^ s[10]) * 0x4403efd9u; + s[3] ^= s[2]; + s[5] -= s[3]; + s[12] += s[5]; + s[6] = s[6] * 0x2ae6d079u + s[12]; + s[10] ^= s[6]; + s[7] ^= s[10] ^ 0x674b5a65u; + s[13] = mh_rotl(s[13], 3u) + s[7]; + s[9] *= (s[13] | 1u); + s[12] -= s[9]; + s[8] *= (s[12] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[7] = mh_rotl(s[7] ^ s[9], 20u); + s[13] += s[7]; + s[4] += s[13]; + s[13] ^= s[4]; + s[3] -= s[13]; + s[4] -= s[3]; + s[0] ^= s[4]; + s[3] = mh_rotl(s[3], 3u) + s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= s[5]; + s[11] *= (s[0] | 1u); + s[10] ^= s[11] ^ 0x147c14d2u; + s[11] ^= s[10]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[13] ^= s[0]; + s[12] ^= s[13]; + s[0] -= s[12]; + s[13] ^= s[0]; + s[11] = mh_rotl(s[11], 26u) + s[13]; + s[10] += s[11]; + s[11] ^= s[10] ^ 0x4b0abaf2u; + s[3] -= s[11]; + s[8] += (s[3] | s[9]); + s[12] += (s[8] | s[10]); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[4] *= (s[11] | 1u); + s[0] += s[4] + 0xab0da7ecu; + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[12] -= s[8]; + s[9] = mh_rotl(s[9], 7u) + s[12]; + s[7] -= s[9]; + s[3] *= (s[7] | 1u); + s[2] += s[3]; + s[4] = s[4] * 0xf4865499u + s[2]; + s[7] = s[7] * 0xbed687ffu + s[4]; + s[14] += s[7]; + s[15] += s[14] + 0x603451a7u; + s[10] ^= (s[15] & s[2]); + s[7] = mh_rotl(s[7] ^ s[10], 22u); + s[1] += s[7]; + s[5] += s[1]; + s[14] = (s[14] ^ s[5]) * 0x8e7b488du; + s[9] += (s[14] | s[11]); + s[12] *= (s[9] | 1u); + s[1] += s[12]; + s[12] += s[1] + 0x6855c1d8u; + s[15] -= s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 5u); + s[8] = mh_rotl(s[8] ^ s[9], 2u); + s[7] -= s[8]; + s[14] *= (s[7] | 1u); + s[12] *= (s[14] | 1u); + s[0] = mh_rotl(s[0], 1u) + s[12]; + s[15] = mh_rotl(s[15], 7u) + s[0]; + s[5] *= (s[15] | 1u); + s[12] = (s[12] ^ s[5]) * 0x015c0c07u; + s[5] = mh_rotl(s[5], 4u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[5], 2u); + s[10] ^= s[4]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +static inline void mh_item(__global const uint* cache, uint t, uint* s) { + s[0] = 0x3067619fu; + s[1] = 0x3c269176u; + s[2] = 0x84a03b03u; + s[3] = 0xf8c63294u; + s[4] = 0xff977c5bu; + s[5] = 0xe60def3eu; + s[6] = 0x63630141u; + s[7] = 0xb8fbcb58u; + s[8] = t * 0x42146205u + 0xbab68293u; + s[9] = t * 0x52cbe0fbu + 0xcc162340u; + s[10] = t * 0x7ecf4a03u + 0x6ce151ccu; + s[11] = t * 0x6728907fu + 0xe62b8997u; + s[12] = t * 0xd81d9751u + 0xc9c80297u; + s[13] = t * 0x132952c3u + 0xf74a1654u; + s[14] = t * 0xf60de277u + 0x3d704af5u; + s[15] = t * 0x05358035u + 0x3cf522b7u; + mh_round_0(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +static inline uint mh_word(__global const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// Memory-hard dataset (MEMHARD.md). One work-item per cache segment; one work-item per 64-byte dataset item. +// The same constants as memhard.h in this pack (one emitter, three dialects). +__kernel void igneum_cache_fill(__global uint* cache, uint nSegments) { + uint seg = (uint)get_global_id(0); + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__kernel void igneum_build(__global uint* ds, __global const uint* cache, uint nItems) { + uint t = (uint)get_global_id(0); + if (t < nItems) { + uint s[16]; + mh_item(cache, t, s); + __global uint* d = ds + ((ulong)t * 16u); + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per work-item. IGNEUM_GROUP is a multiple of 32; lane = lid & 31 and every exchange stays inside the +// lane's own aligned run of 32 work-items, exactly like simd_shuffle_xor inside a 32-wide Metal SIMD group and +// __shfl_xor_sync inside a CUDA warp. Control flow is uniform (no branches at all). +IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ 0x67a9a7beu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x1a155b25u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0x1a155b25u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0xfddfb732u; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0xfddfb732u; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4b5af2e8u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0x4b5af2e8u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xc55caf33u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0xc55caf33u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xa27c13b7u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0xa27c13b7u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x06628a48u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x06628a48u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x03852469u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x03852469u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x67a9a7beu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r2 = r3 * r4 + r2; // 0 mad + r2 = r1 * r1 + r2; // 1 mad + r2 = r3 * r2 + r2; // 2 mad + r3 = r3 ^ r5; // 3 xor + r7 = r7 ^ ds[r2 & mask]; // 4 load + r5 = r5 ^ ds[r7 & mask]; // 5 load + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r1 = r1 ^ t_; } // 6 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r7 = r7 ^ t_; } // 7 shfl + r1 = mul_hi(r1, r5); // 8 mulhi + r6 = rotr_var(r6, r3); // 9 rotr + r3 = r3 | r4; // 10 or + r4 = r4 ^ ds[r3 & mask]; // 11 load + r0 = mul_hi(r0, r4); // 12 mulhi + r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add + r0 = r0 ^ ds[r4 & mask]; // 14 load + r2 = r2 - r4; // 15 sub + r2 = r2 ^ ds[r0 & mask]; // 16 load + r7 = r7 ^ ds[r2 & mask]; // 17 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl + r5 = r5 * r0; // 19 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl + r6 = mul_hi(r6, r2); // 22 mulhi + r6 = r6 ^ ds[r1 & mask]; // 23 load + r5 = r5 * r0; // 24 mul + r5 = rotl_imm(r5, 19u); // 25 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl + r0 = r0 ^ r5; // 27 xor + r0 = r0 ^ r4; // 28 xor + r3 = r3 - r0; // 29 sub + r5 = r5 * r1; // 30 mul + r7 = r7 ^ ds[r2 & mask]; // 31 load + r1 = r1 ^ ds[r0 & mask]; // 32 load + r5 = r5 ^ r6; // 33 xor + r5 = r5 ^ ds[r1 & mask]; // 34 load + r0 = mul_hi(r0, r5); // 35 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl + r7 = r7 ^ ds[r0 & mask]; // 37 load + r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl + r2 = r2 ^ r5; // 40 xor + r3 = r6 * r3 + r3; // 41 mad + r6 = r6 - r7; // 42 sub + r7 = r7 ^ r0; // 43 xor + r1 = r1 ^ ds[r7 & mask]; // 44 load + r2 = r2 * r3; // 45 mul + r1 = mul_hi(r1, r5); // 46 mulhi + r4 = r4 - r3; // 47 sub + r2 = rotr_var(r2, r6); // 48 rotr + r3 = r3 ^ ds[r5 & mask]; // 49 load + r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add + r0 = r0 * r2; // 51 mul + r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add + r1 = r1 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0x77b1520du : 0x2bb965afu); // 53 add + r7 = rotl_imm(r7, 14u); // 54 rotl + r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add + r6 = r6 ^ ds[r7 & mask]; // 56 load + r1 = rotr_var(r1, r5); // 57 rotr + r5 = r5 ^ ds[r4 & mask]; // 58 load + r6 = r6 ^ ds[r2 & mask]; // 59 load + r3 = r5 * r0 + r3; // 60 mad + r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add + r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add + r5 = rotl_imm(r5, 19u); // 63 rotl + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} + +#if IGNEUM_EXCHANGE != 0 +// Reports the sub-group size this device uses for a work-group of IGNEUM_GROUP items. host.c runs it only when the +// per-kernel query (clGetKernelSubGroupInfoKHR on igneum_hash) is unavailable; that query is preferred because a +// compiler may pick a different wave width per kernel (RDNA: wave32 or wave64). See WAVEFRONT.md. +IGNEUM_KERNEL_HASH void igneum_probe_subgroup(__global uint* out) { + if (get_local_id(0) == 0u) { out[0] = get_sub_group_size(); out[1] = get_num_sub_groups(); } +} +#endif diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cu b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cu new file mode 100644 index 00000000..e2247231 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel.cu @@ -0,0 +1,164 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// Bit-exact twin of the Metal kernel for the same seed (see proto-cuda/CHECKLIST.md and program.metal). +// Compiled ahead of time by nvcc together with proto-cuda/host.cu. No NVRTC. +#include +#include +#include "program.h" +#include "memhard.h" + +__device__ __forceinline__ uint32_t splitmix32(uint32_t x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site, so both shift amounts are in 1..31. +__device__ __forceinline__ uint32_t rotl_imm(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } +// n is masked to 0..31; the second shift amount is masked too, so n == 0 gives x. +__device__ __forceinline__ uint32_t rotr_var(uint32_t x, uint32_t n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +__device__ __forceinline__ uint32_t ds_elem(uint32_t i, uint32_t d0, uint32_t d1) { + uint32_t x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset (MEMHARD.md). One thread per cache segment; one thread per 64-byte dataset item. +// The core functions (mh_cache_segment, mh_item) are in memhard.h and are also compiled for the host. +__global__ void igneum_cache_fill(uint32_t* cache, uint32_t nSegments) { + uint32_t seg = blockIdx.x * blockDim.x + threadIdx.x; + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__global__ void igneum_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems) { + uint32_t t = blockIdx.x * blockDim.x + threadIdx.x; + if (t < nItems) { + uint32_t s[16]; + mh_item(cache, t, s); + uint32_t* d = ds + (size_t)t * 16u; + for (uint32_t i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per thread. blockDim.x is a multiple of 32; lane = threadIdx.x & 31 and every +// __shfl_xor_sync stays inside the lane's own warp, exactly like simd_shuffle_xor inside a +// 32-wide Metal SIMD group. Control flow is uniform, so the full 0xffffffff member mask is valid. +__global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask) { + uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; + uint32_t nonce = baseNonce + gid; + uint32_t r0, r1, r2, r3, r4, r5, r6, r7; + { uint32_t x = nonce ^ 0x67a9a7beu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x1a155b25u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0x1a155b25u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0xfddfb732u; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0xfddfb732u; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4b5af2e8u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0x4b5af2e8u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xc55caf33u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0xc55caf33u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xa27c13b7u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0xa27c13b7u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x06628a48u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x06628a48u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x03852469u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x03852469u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x67a9a7beu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint32_t it = 0u; it < 8u; ++it) { + uint32_t sel = r0; + r2 = r3 * r4 + r2; // 0 mad + r2 = r1 * r1 + r2; // 1 mad + r2 = r3 * r2 + r2; // 2 mad + r3 = r3 ^ r5; // 3 xor + r7 = r7 ^ ds[r2 & mask]; // 4 load + r5 = r5 ^ ds[r7 & mask]; // 5 load + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 6 shfl + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // 7 shfl + r1 = __umulhi(r1, r5); // 8 mulhi + r6 = rotr_var(r6, r3); // 9 rotr + r3 = r3 | r4; // 10 or + r4 = r4 ^ ds[r3 & mask]; // 11 load + r0 = __umulhi(r0, r4); // 12 mulhi + r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add + r0 = r0 ^ ds[r4 & mask]; // 14 load + r2 = r2 - r4; // 15 sub + r2 = r2 ^ ds[r0 & mask]; // 16 load + r7 = r7 ^ ds[r2 & mask]; // 17 load + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl + r5 = r5 * r0; // 19 mul + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl + r6 = __umulhi(r6, r2); // 22 mulhi + r6 = r6 ^ ds[r1 & mask]; // 23 load + r5 = r5 * r0; // 24 mul + r5 = rotl_imm(r5, 19u); // 25 rotl + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl + r0 = r0 ^ r5; // 27 xor + r0 = r0 ^ r4; // 28 xor + r3 = r3 - r0; // 29 sub + r5 = r5 * r1; // 30 mul + r7 = r7 ^ ds[r2 & mask]; // 31 load + r1 = r1 ^ ds[r0 & mask]; // 32 load + r5 = r5 ^ r6; // 33 xor + r5 = r5 ^ ds[r1 & mask]; // 34 load + r0 = __umulhi(r0, r5); // 35 mulhi + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl + r7 = r7 ^ ds[r0 & mask]; // 37 load + r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl + r2 = r2 ^ r5; // 40 xor + r3 = r6 * r3 + r3; // 41 mad + r6 = r6 - r7; // 42 sub + r7 = r7 ^ r0; // 43 xor + r1 = r1 ^ ds[r7 & mask]; // 44 load + r2 = r2 * r3; // 45 mul + r1 = __umulhi(r1, r5); // 46 mulhi + r4 = r4 - r3; // 47 sub + r2 = rotr_var(r2, r6); // 48 rotr + r3 = r3 ^ ds[r5 & mask]; // 49 load + r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add + r0 = r0 * r2; // 51 mul + r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add + r1 = r1 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0x77b1520du : 0x2bb965afu); // 53 add + r7 = rotl_imm(r7, 14u); // 54 rotl + r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add + r6 = r6 ^ ds[r7 & mask]; // 56 load + r1 = rotr_var(r1, r5); // 57 rotr + r5 = r5 ^ ds[r4 & mask]; // 58 load + r6 = r6 ^ ds[r2 & mask]; // 59 load + r3 = r5 * r0 + r3; // 60 mad + r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add + r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add + r5 = rotl_imm(r5, 19u); // 63 rotl + } + uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint32_t hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((uint64_t)hi << 32) | (uint64_t)lo; +} + +// Host-side launch wrappers. Declared in program.h, called from host.cu. +cudaError_t igneum_launch_cache_fill(uint32_t* cache, uint32_t nSegments) { + if (nSegments == 0u) return cudaErrorInvalidValue; + uint32_t block = 256u; + uint32_t grid = (nSegments + block - 1u) / block; + igneum_cache_fill<<>>(cache, nSegments); + return cudaGetLastError(); +} + +cudaError_t igneum_launch_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems) { + if (nItems == 0u) return cudaErrorInvalidValue; + uint32_t block = 256u; + uint32_t grid = (nItems + block - 1u) / block; + igneum_build<<>>(ds, cache, nItems); + return cudaGetLastError(); +} + +cudaError_t igneum_launch_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + uint32_t nonces, uint32_t blockWarps) { + if (blockWarps == 0u || blockWarps > 32u) return cudaErrorInvalidValue; + uint32_t block = 32u * blockWarps; + if (nonces == 0u || (nonces % block) != 0u) return cudaErrorInvalidValue; + igneum_hash<<>>(ds, out, baseNonce, mask); + return cudaGetLastError(); +} + +cudaError_t igneum_hash_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps) { + cudaFuncAttributes attr; + cudaError_t e = cudaFuncGetAttributes(&attr, igneum_hash); + if (e != cudaSuccess) return e; + *numRegs = attr.numRegs; + return cudaOccupancyMaxActiveBlocksPerMultiprocessor(blocksPerSM, igneum_hash, (int)(32u * blockWarps), 0); +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cl b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cl new file mode 100644 index 00000000..d403e733 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cl @@ -0,0 +1,7037 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// OpenCL C twin of the Metal kernel for the same seed (see proto-opencl/README.md, WAVEFRONT.md and program.metal). +// Built from source at runtime by proto-opencl/host.c, which passes these defines: +// IGNEUM_GROUP work-group size of igneum_hash, a multiple of 32 (default 32: one work-group = one 32-lane unit) +// IGNEUM_EXCHANGE 0 = local-memory exchange with a barrier (any device, any wave width; the default) +// 1 = sub_group_shuffle_xor (cl_khr_subgroup_shuffle), only with IGNEUM_GROUP 32 and a sub-group size of exactly 32 +// 2 = intel_sub_group_shuffle_xor (cl_intel_subgroups), same condition +// The verification unit is always 32 lanes. A 64-wide hardware wave (AMD GCN/CDNA, RDNA in wave64) runs two units; +// the exchange masks are 1, 2, 4, 8, 16, so every partner lane lies inside the lane's own aligned run of 32. +#ifndef IGNEUM_GROUP +#define IGNEUM_GROUP 32 +#endif +#ifndef IGNEUM_EXCHANGE +#define IGNEUM_EXCHANGE 0 +#endif +#ifdef __OPENCL_VERSION__ +#define IGNEUM_KERNEL_HASH __kernel __attribute__((reqd_work_group_size(IGNEUM_GROUP, 1, 1))) +#define IGNEUM_LOCAL_WORDS(name, n) __local uint name[n] +#if IGNEUM_EXCHANGE == 1 +#ifdef cl_khr_subgroups +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif +#ifdef cl_khr_subgroup_shuffle +#pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable +#endif +#elif IGNEUM_EXCHANGE == 2 +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#endif +#else +// Not an OpenCL compiler: proto-opencl/emu compiles this file as C++ and supplies the built-ins and these two macros. +#include "emu_opencl.h" +#endif + +#if IGNEUM_EXCHANGE == 1 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#elif IGNEUM_EXCHANGE == 2 +#define IGNEUM_SHFL_XOR(dst, a, m) dst = intel_sub_group_shuffle_xor((a), (uint)(m)) +#define IGNEUM_BCAST0(dst, a) dst = sub_group_broadcast((a), 0u) +#else +// Local-memory exchange. Two buffers of IGNEUM_GROUP words alternate (xk counts exchanges), so one barrier per +// exchange is enough: a lane can only overwrite buffer b at exchange k+2 after passing barrier k+1, and every lane +// reaches barrier k+1 only after its read of buffer b at exchange k. The partner lid ^ m stays inside the lane's +// aligned run of 32 because m < 32. Control flow is uniform, so every work-item reaches every barrier. +#define IGNEUM_SHFL_XOR(dst, a, m) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid ^ (uint)(m))]; xk += 1u; } +#define IGNEUM_BCAST0(dst, a) { xch[(xk & 1u) * IGNEUM_GROUP + lid] = (a); barrier(CLK_LOCAL_MEM_FENCE); dst = xch[(xk & 1u) * IGNEUM_GROUP + (lid & ~31u)]; xk += 1u; } +#endif + +static inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +// n is a literal in 1..31 at every call site. OpenCL rotate() rotates left by n modulo 32. +static inline uint rotl_imm(uint x, uint n) { return rotate(x, n); } +// Right rotation by n modulo 32 as a left rotation by (32 - n) modulo 32; n == 0 gives x. +static inline uint rotr_var(uint x, uint n) { return rotate(x, (0u - n) & 31u); } +static inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 463535d01511350d). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +static inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +static inline void mh_chacha_block(const uint* x, uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +static inline void mh_cache_segment(__global uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0x3067619fu ^ prev[4]; + x[5] = 0x3c269176u ^ prev[5]; + x[6] = 0x84a03b03u ^ prev[6]; + x[7] = 0xf8c63294u ^ prev[7]; + x[8] = 0xff977c5bu ^ prev[8]; + x[9] = 0xe60def3eu ^ prev[9]; + x[10] = 0x63630141u ^ prev[10]; + x[11] = 0xb8fbcb58u ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + __global uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +static inline void mh_mixer(uint* s, uint rk) { + s[0] = (s[0] ^ (0xbab68293u + rk)) * 0x42146205u; + s[1] = (s[1] ^ (0xcc162340u + rk)) * 0x52cbe0fbu; + s[2] = (s[2] ^ (0x6ce151ccu + rk)) * 0x7ecf4a03u; + s[3] = (s[3] ^ (0xe62b8997u + rk)) * 0x6728907fu; + s[4] = (s[4] ^ (0xc9c80297u + rk)) * 0xd81d9751u; + s[5] = (s[5] ^ (0xf74a1654u + rk)) * 0x132952c3u; + s[6] = (s[6] ^ (0x3d704af5u + rk)) * 0xf60de277u; + s[7] = (s[7] ^ (0x3cf522b7u + rk)) * 0x05358035u; + s[8] = (s[8] ^ (0x2b9cac04u + rk)) * 0xbaf6499du; + s[9] = (s[9] ^ (0xa880ac10u + rk)) * 0xe4db9667u; + s[10] = (s[10] ^ (0x13e5dd1du + rk)) * 0x3e98f45du; + s[11] = (s[11] ^ (0x6fc3e233u + rk)) * 0xd0004eddu; + s[12] = (s[12] ^ (0x2d83eeacu + rk)) * 0x2691630du; + s[13] = (s[13] ^ (0x9006e8bfu + rk)) * 0x9beb3bcfu; + s[14] = (s[14] ^ (0x2c4b5362u + rk)) * 0xab310379u; + s[15] = (s[15] ^ (0x31b49ee2u + rk)) * 0x99cfb423u; + MH_QR(s[0], s[4], s[8], s[12], 20u, 20u, 19u, 4u) MH_QR(s[1], s[5], s[9], s[13], 20u, 20u, 19u, 4u) + MH_QR(s[2], s[6], s[10], s[14], 20u, 20u, 19u, 4u) MH_QR(s[3], s[7], s[11], s[15], 20u, 20u, 19u, 4u) + MH_QR(s[0], s[5], s[10], s[15], 26u, 3u, 3u, 27u) MH_QR(s[1], s[6], s[11], s[12], 26u, 3u, 3u, 27u) + MH_QR(s[2], s[7], s[8], s[13], 26u, 3u, 3u, 27u) MH_QR(s[3], s[4], s[9], s[14], 26u, 3u, 3u, 27u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_0(uint* s) { + s[14] = mh_rotl(s[14], 30u) + s[0]; + s[15] *= (s[14] | 1u); + s[6] += s[15] + 0xd9ac4ac1u; + s[3] ^= s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[7] ^= s[2]; + s[10] -= s[7]; + s[11] += s[10]; + s[12] *= (s[11] | 1u); + s[4] ^= s[12]; + s[5] = (s[5] ^ s[4]) * 0xbce67fc5u; + s[1] = (s[1] ^ s[5]) * 0xe0fb71bbu; + s[5] -= s[1]; + s[3] += s[5]; + s[10] += s[3]; + s[7] = mh_rotl(s[7] ^ s[10], 5u); + s[0] ^= s[7]; + s[10] ^= s[0]; + s[8] -= s[10]; + s[12] += s[8]; + s[9] += s[12]; + s[12] ^= s[9] ^ 0x891d0a72u; + s[1] -= s[12]; + s[10] ^= s[1] ^ 0x12a9780cu; + s[2] = mh_rotl(s[2] ^ s[10], 27u); + s[11] *= (s[2] | 1u); + s[4] += s[11]; + s[7] ^= (s[4] & s[5]); + s[0] -= s[7]; + s[11] += s[0]; + s[8] -= s[11]; + s[15] += s[8] + 0x8186dd7cu; + s[9] ^= s[15]; + s[12] += s[9]; + s[5] ^= s[12] ^ 0x4a9b0a35u; + s[4] *= (s[5] | 1u); + s[9] += s[4]; + s[12] += s[9]; + s[10] = (s[10] ^ s[12]) * 0xe3385ffdu; + s[11] -= s[10]; + s[9] -= s[11]; + s[13] += s[9] + 0xb72698dbu; + s[1] ^= (s[13] & s[2]); + s[10] = (s[10] ^ s[1]) * 0xcf3e22d7u; + s[12] = (s[12] ^ s[10]) * 0xb28b0e19u; + s[9] += s[12]; + s[1] ^= s[9]; + s[2] *= (s[1] | 1u); + s[7] ^= s[2]; + s[8] ^= (s[7] & s[12]); + s[6] += s[8]; + s[15] = (s[15] ^ s[6]) * 0xee66c1cfu; + s[4] -= s[15]; + s[3] += s[4]; + s[12] = s[12] * 0xd3452a43u + s[3]; + s[0] ^= s[12]; + s[1] *= (s[0] | 1u); + s[12] += s[1] + 0xce692008u; + s[6] ^= (s[12] & s[5]); + s[13] ^= (s[6] & s[15]); + s[7] ^= s[13]; + s[9] += s[7]; + s[12] *= (s[9] | 1u); + s[2] -= s[12]; + s[15] = mh_rotl(s[15], 25u) + s[2]; + s[6] ^= s[15]; + s[13] -= s[6]; + s[7] += (s[13] | s[15]); + s[15] = s[15] * 0x3bb17cedu + s[7]; + s[1] *= (s[15] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[1]; + s[0] = (s[0] ^ s[6]) * 0xbb828911u; + s[3] += s[0] + 0x6593f64cu; + s[5] ^= s[3] ^ 0xff45cfddu; + s[4] ^= s[5]; + s[7] *= (s[4] | 1u); + s[9] ^= s[7]; + s[11] += s[9] + 0x1618a409u; + s[2] *= (s[11] | 1u); + s[15] = (s[15] ^ s[2]) * 0x60c6efedu; + s[11] = mh_rotl(s[11] ^ s[15], 20u); + s[3] ^= s[11] ^ 0x6961fd5au; + s[6] ^= s[3]; + s[2] += s[6]; + s[0] = mh_rotl(s[0] ^ s[2], 19u); + s[5] *= (s[0] | 1u); + s[8] += s[5]; + s[9] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[9], 7u); + s[0] ^= s[2]; + s[10] ^= s[0]; + s[1] += s[10]; + s[11] += s[1]; + s[9] += s[11]; + s[10] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 3u) + s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[2] = mh_rotl(s[2] ^ s[0], 25u); + s[0] = mh_rotl(s[0], 18u) + s[2]; + s[1] = mh_rotl(s[1], 15u) + s[0]; + s[8] *= (s[1] | 1u); + s[2] -= s[8]; + s[5] = mh_rotl(s[5] ^ s[2], 7u); + s[11] ^= s[5]; + s[8] ^= s[11]; + s[3] ^= s[8] ^ 0xe6be7c09u; + s[4] += (s[3] | s[13]); + s[2] = mh_rotl(s[2] ^ s[4], 13u); + s[15] = mh_rotl(s[15] ^ s[2], 9u); + s[4] = mh_rotl(s[4], 19u) + s[15]; + s[10] = mh_rotl(s[10], 25u) + s[4]; + s[11] *= (s[10] | 1u); + s[7] -= s[11]; + s[2] ^= (s[7] & s[4]); + s[1] = mh_rotl(s[1], 14u) + s[2]; + s[3] *= (s[1] | 1u); + s[0] = s[0] * 0xd9de6c6du + s[3]; + s[12] = (s[12] ^ s[0]) * 0xe3e5b763u; + s[2] = (s[2] ^ s[12]) * 0xa90198efu; + s[6] = mh_rotl(s[6] ^ s[2], 23u); + s[1] *= (s[6] | 1u); + s[2] ^= (s[1] & s[5]); + s[12] -= s[2]; + s[14] += s[12]; + s[8] += (s[14] | s[12]); + s[5] -= s[8]; + s[12] -= s[5]; + s[5] ^= s[12]; + s[2] *= (s[5] | 1u); + s[0] += s[2]; + s[9] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[9]; + s[0] = (s[0] ^ s[5]) * 0x1881452du; + s[10] += s[0] + 0x0da78a3eu; + s[7] -= s[10]; + s[13] = (s[13] ^ s[7]) * 0x97232879u; + s[11] = (s[11] ^ s[13]) * 0xb8dae9a5u; + s[13] = mh_rotl(s[13] ^ s[11], 8u); + s[6] += s[13]; + s[3] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[3], 31u); + s[4] ^= s[6]; + s[9] ^= s[4] ^ 0x6b4c4741u; + s[15] = mh_rotl(s[15], 19u) + s[9]; + s[8] ^= s[15] ^ 0x756f820du; + s[1] = mh_rotl(s[1] ^ s[8], 10u); + s[6] -= s[1]; + s[15] = mh_rotl(s[15], 29u) + s[6]; + s[9] = mh_rotl(s[9] ^ s[15], 31u); + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] *= (s[5] | 1u); + s[12] += s[11] + 0xee00292du; + s[1] += s[12]; + s[12] ^= s[1] ^ 0x9c50a8acu; + s[13] *= (s[12] | 1u); + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[0] = (s[0] ^ s[8]) * 0xc53caea3u; + s[12] *= (s[0] | 1u); + s[9] -= s[12]; + s[11] -= s[9]; + s[5] = mh_rotl(s[5], 15u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[5], 21u); + s[2] ^= s[13] ^ 0x84b1978fu; + s[14] += s[2]; + s[3] ^= s[14] ^ 0x05a8c594u; + s[13] += s[3] + 0x54e905a7u; + s[11] ^= s[13]; + s[8] -= s[11]; + s[7] ^= s[8] ^ 0x2244941fu; + s[1] = s[1] * 0xed0aecc5u + s[7]; + s[7] *= (s[1] | 1u); + s[10] = (s[10] ^ s[7]) * 0x4b837a0bu; + s[12] -= s[10]; + s[2] -= s[12]; + s[3] *= (s[2] | 1u); + s[7] *= (s[3] | 1u); + s[12] ^= s[7] ^ 0x5ffe7c51u; + s[15] ^= (s[12] & s[6]); + s[0] = mh_rotl(s[0], 4u) + s[15]; + s[2] = mh_rotl(s[2], 12u) + s[0]; + s[4] -= s[2]; + s[9] -= s[4]; + s[15] ^= s[9]; + s[14] = mh_rotl(s[14], 15u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[14], 4u); + s[8] = mh_rotl(s[8], 12u) + s[1]; + s[2] *= (s[8] | 1u); + s[0] ^= s[2] ^ 0x24e25306u; + s[13] ^= s[0]; + s[7] = mh_rotl(s[7], 14u) + s[13]; + s[12] += s[7]; + s[2] ^= (s[12] & s[7]); + s[9] = mh_rotl(s[9], 4u) + s[2]; + s[8] *= (s[9] | 1u); + s[3] ^= (s[8] & s[5]); + s[8] = (s[8] ^ s[3]) * 0x6cea4323u; + s[13] += s[8]; + s[9] *= (s[13] | 1u); + s[15] *= (s[9] | 1u); + s[1] ^= s[15]; + s[7] -= s[1]; + s[2] += s[7] + 0x188c833fu; + s[14] += s[2] + 0xc33e117au; + s[1] ^= s[14] ^ 0x97c1cf13u; + s[15] = mh_rotl(s[15] ^ s[1], 10u); + s[13] = mh_rotl(s[13] ^ s[15], 25u); + s[9] += s[13]; + s[3] = mh_rotl(s[3], 19u) + s[9]; + s[7] ^= (s[3] & s[15]); + s[13] += s[7]; + s[0] = mh_rotl(s[0], 24u) + s[13]; + s[15] ^= s[0]; + s[11] ^= s[15] ^ 0x8046a7c8u; + s[7] *= (s[11] | 1u); + s[1] ^= s[7]; + s[3] ^= s[1]; + s[6] += s[3]; + s[11] ^= s[6]; + s[9] += (s[11] | s[14]); + s[10] ^= s[9]; + s[7] -= s[10]; + s[4] += s[7]; + s[13] += s[4] + 0x0d609a06u; + s[3] += (s[13] | s[11]); + s[8] += (s[3] | s[6]); + s[13] *= (s[8] | 1u); + s[7] ^= (s[13] & s[6]); + s[14] += s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 17u); + s[14] ^= (s[5] & s[3]); + s[11] += (s[14] | s[0]); + s[4] ^= s[11]; + s[3] ^= s[4] ^ 0x518deaefu; + s[8] *= (s[3] | 1u); + s[13] = mh_rotl(s[13] ^ s[8], 25u); + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[15] = (s[15] ^ s[3]) * 0xf612eda3u; + s[7] = mh_rotl(s[7] ^ s[15], 8u); + s[5] = s[5] * 0x2836c587u + s[7]; + s[14] = s[14] * 0x97e56ca5u + s[5]; + s[9] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[9], 23u); + s[0] -= s[15]; + s[6] ^= s[0]; + s[4] ^= (s[6] & s[15]); + s[7] ^= s[4]; + s[1] -= s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[15] = (s[15] ^ s[14]) * 0x8744e455u; + s[9] += s[15]; + s[3] = mh_rotl(s[3], 1u) + s[9]; + s[8] = s[8] * 0x973da983u + s[3]; + s[11] ^= s[8]; + s[9] ^= s[11]; + s[8] *= (s[9] | 1u); + s[13] += s[8] + 0x57db65d6u; + s[15] *= (s[13] | 1u); + s[14] -= s[15]; + s[1] = (s[1] ^ s[14]) * 0xb9f9718fu; + s[7] = mh_rotl(s[7] ^ s[1], 31u); + s[9] = (s[9] ^ s[7]) * 0x640547efu; + s[11] += s[9]; + s[3] = mh_rotl(s[3], 10u) + s[11]; + s[0] = (s[0] ^ s[3]) * 0xb284d74fu; + s[4] += s[0]; + s[15] += (s[4] | s[11]); + s[9] += s[15] + 0xf4848271u; + s[14] *= (s[9] | 1u); + s[7] += s[14] + 0x9cc79f25u; + s[3] += s[7]; + s[15] = (s[15] ^ s[3]) * 0x89e86eafu; + s[5] += s[15] + 0xd1058324u; + s[6] = (s[6] ^ s[5]) * 0x3a95ce61u; + s[14] -= s[6]; + s[5] ^= s[14]; + s[14] = mh_rotl(s[14], 29u) + s[5]; + s[12] = mh_rotl(s[12], 15u) + s[14]; + s[11] += s[12]; + s[8] *= (s[11] | 1u); + s[15] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[15], 23u); + s[13] ^= s[4]; + s[2] ^= s[13]; + s[4] = (s[4] ^ s[2]) * 0x55b5ed41u; + s[9] ^= s[4]; + s[14] += s[9] + 0x4577e106u; + s[12] *= (s[14] | 1u); + s[7] ^= (s[12] & s[8]); + s[0] = mh_rotl(s[0], 24u) + s[7]; + s[5] += s[0] + 0xe4b59af5u; + s[6] ^= s[5] ^ 0xc95684a6u; + s[2] = mh_rotl(s[2], 15u) + s[6]; + s[3] *= (s[2] | 1u); + s[9] *= (s[3] | 1u); + s[2] ^= (s[9] & s[15]); + s[1] += s[2]; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[10] = (s[10] ^ s[8]) * 0xfc3cdd57u; + s[2] -= s[10]; + s[6] += (s[2] | s[1]); + s[7] ^= s[6]; + s[12] ^= s[7]; + s[9] ^= s[12]; + s[13] ^= s[9] ^ 0x7556231du; + s[3] ^= s[13]; + s[0] += (s[3] | s[6]); + s[12] ^= s[0] ^ 0x58f380adu; + s[15] ^= s[12] ^ 0xcf2c5207u; + s[14] = mh_rotl(s[14], 8u) + s[15]; + s[15] *= (s[14] | 1u); + s[6] ^= s[15]; + s[1] *= (s[6] | 1u); + s[13] ^= (s[1] & s[7]); + s[6] ^= s[13]; + s[9] *= (s[6] | 1u); + s[10] += s[9]; + s[15] ^= (s[10] & s[9]); + s[8] *= (s[15] | 1u); + s[3] -= s[8]; + s[6] *= (s[3] | 1u); + s[12] += s[6]; + s[8] += s[12]; + s[14] ^= s[8]; + s[13] += s[14]; + s[1] += s[13] + 0xc57bd1c4u; + s[3] = mh_rotl(s[3], 22u) + s[1]; + s[13] += s[3]; + s[3] ^= s[13] ^ 0x53c4357du; + s[1] = mh_rotl(s[1], 19u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[14] = s[14] * 0xb9e6c0b1u + s[12]; + s[8] -= s[14]; + s[5] -= s[8]; + s[0] ^= s[5]; + s[11] = (s[11] ^ s[0]) * 0xf434e1efu; + s[5] = (s[5] ^ s[11]) * 0x9121d805u; + s[1] += s[5]; + s[11] += (s[1] | s[7]); + s[8] ^= s[11]; + s[7] *= (s[8] | 1u); + s[12] ^= s[7] ^ 0x367f3a0fu; + s[10] ^= s[12] ^ 0x988ad558u; + s[6] ^= s[10] ^ 0xc31a2c66u; + s[11] += s[6] + 0xf44c1a7du; + s[15] ^= (s[11] & s[1]); + s[2] = mh_rotl(s[2] ^ s[15], 14u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[9] ^= s[3]; + s[1] *= (s[9] | 1u); + s[5] = (s[5] ^ s[1]) * 0x05e8dea9u; + s[12] += (s[5] | s[11]); + s[13] += s[12]; + s[5] -= s[13]; + s[10] ^= s[5]; + s[4] = (s[4] ^ s[10]) * 0xa49163afu; + s[12] += s[4] + 0xa8c7865du; + s[1] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[1], 28u); + s[3] -= s[14]; + s[15] = (s[15] ^ s[3]) * 0x4481a6a5u; + s[12] = mh_rotl(s[12] ^ s[15], 8u); + s[3] -= s[12]; + s[9] = (s[9] ^ s[3]) * 0x0a8015a5u; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[14] -= s[9]; + s[9] *= (s[14] | 1u); + s[7] *= (s[9] | 1u); + s[1] = s[1] * 0x102d9b67u + s[7]; + s[12] += s[1]; + s[14] *= (s[12] | 1u); + s[6] ^= s[14]; + s[0] += s[6] + 0x633908b4u; + s[6] -= s[0]; + s[0] = mh_rotl(s[0] ^ s[6], 26u); + s[11] = s[11] * 0xa3cfd0bfu + s[0]; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[3] ^= s[14]; + s[6] = mh_rotl(s[6], 15u) + s[3]; + s[8] ^= s[6] ^ 0xd47945b7u; + s[11] ^= s[8]; + s[14] += s[11]; + s[5] += s[14]; + s[12] = mh_rotl(s[12], 2u) + s[5]; + s[10] *= (s[12] | 1u); + s[1] *= (s[10] | 1u); + s[3] += s[1]; + s[9] = mh_rotl(s[9] ^ s[3], 2u); + s[2] += s[9]; + s[4] ^= s[2]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[11] -= s[13]; + s[8] += s[11]; + s[7] += s[8] + 0xf15c3fd7u; + s[9] ^= s[7]; + s[8] = mh_rotl(s[8] ^ s[9], 29u); + s[7] = (s[7] ^ s[8]) * 0xea581ad3u; + s[14] = mh_rotl(s[14] ^ s[7], 31u); + s[4] = (s[4] ^ s[14]) * 0x7cfc0ccfu; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[4] -= s[1]; + s[2] ^= s[4] ^ 0x63b7d83fu; + s[10] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[10], 13u); + s[15] ^= s[13] ^ 0x5e3fbc23u; + s[7] = mh_rotl(s[7] ^ s[15], 27u); + s[4] = s[4] * 0x0ab4b509u + s[7]; + s[7] = s[7] * 0xcd845e5du + s[4]; + s[3] = mh_rotl(s[3], 11u) + s[7]; + s[15] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[15], 31u); + s[12] = mh_rotl(s[12] ^ s[6], 19u); + s[6] += s[12] + 0xc5e9e33eu; + s[13] ^= s[6] ^ 0x0ee62cbbu; + s[8] = mh_rotl(s[8] ^ s[13], 9u); + s[0] *= (s[8] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[13] += s[10]; + s[7] += s[13] + 0xb255fa09u; + s[14] += s[7]; + s[6] = mh_rotl(s[6], 24u) + s[14]; + s[3] *= (s[6] | 1u); + s[9] *= (s[3] | 1u); + s[3] = (s[3] ^ s[9]) * 0x833bda21u; + s[12] -= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 10u); + s[9] = mh_rotl(s[9], 25u) + s[6]; + s[12] -= s[9]; + s[11] += s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 24u); + s[14] ^= s[1]; + s[2] += (s[14] | s[9]); + s[13] = (s[13] ^ s[2]) * 0x1bbb3967u; + s[0] ^= s[13]; + s[13] ^= s[0] ^ 0x2109f216u; + s[8] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 23u) + s[8]; + s[9] = s[9] * 0xcdf20df5u + s[4]; + s[0] = s[0] * 0x97687fa1u + s[9]; + s[10] ^= s[0]; + s[2] += s[10]; + s[11] ^= s[2]; + s[12] *= (s[11] | 1u); + s[4] = mh_rotl(s[4] ^ s[12], 25u); + s[10] = mh_rotl(s[10], 28u) + s[4]; + s[0] ^= s[10]; + s[13] -= s[0]; + s[2] = mh_rotl(s[2], 12u) + s[13]; + s[12] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[8] ^= s[7] ^ 0x250900e2u; + s[3] = mh_rotl(s[3] ^ s[8], 27u); + s[10] += s[3] + 0xa18e04b0u; + s[12] = (s[12] ^ s[10]) * 0x7963ce7bu; + s[1] ^= (s[12] & s[6]); + s[13] = mh_rotl(s[13], 3u) + s[1]; + s[3] = mh_rotl(s[3], 1u) + s[13]; + s[14] -= s[3]; + s[10] ^= s[14]; + s[1] ^= s[10]; + s[5] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[5], 12u); + s[6] *= (s[2] | 1u); + s[11] -= s[6]; + s[9] ^= s[11] ^ 0x69d4cac1u; + s[3] = mh_rotl(s[3], 15u) + s[9]; + s[9] += s[3]; + s[14] = (s[14] ^ s[9]) * 0x00adfa7fu; + s[9] = (s[9] ^ s[14]) * 0x698e49f7u; + s[14] ^= (s[9] & s[6]); + s[4] -= s[14]; + s[5] ^= s[4] ^ 0x558a07eeu; + s[8] += s[5]; + s[9] = s[9] * 0xa25a44b5u + s[8]; + s[13] = mh_rotl(s[13], 12u) + s[9]; + s[1] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[1], 2u); + s[9] ^= s[5]; + s[15] += s[9] + 0x75af4931u; + s[9] += s[15]; + s[6] ^= s[9]; + s[9] *= (s[6] | 1u); + s[7] = (s[7] ^ s[9]) * 0x14d500bbu; + s[4] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 1u) + s[4]; + s[9] *= (s[7] | 1u); + s[10] ^= s[9]; + s[12] += s[10]; + s[2] = s[2] * 0x114aee2du + s[12]; + s[0] ^= s[2]; + s[10] += s[0]; + s[8] *= (s[10] | 1u); + s[14] = (s[14] ^ s[8]) * 0x9aaa1821u; + s[3] ^= s[14]; + s[1] = mh_rotl(s[1] ^ s[3], 14u); + s[0] += s[1]; + s[14] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[1] ^= s[11]; + s[3] += s[1]; + s[5] = mh_rotl(s[5] ^ s[3], 28u); + s[12] ^= s[5]; + s[10] ^= s[12] ^ 0xcf112b3eu; + s[12] = mh_rotl(s[12], 17u) + s[10]; + s[8] += s[12] + 0xa0423d55u; + s[12] -= s[8]; + s[4] -= s[12]; + s[14] -= s[4]; + s[0] += s[14]; + s[2] *= (s[0] | 1u); + s[8] ^= s[2]; + s[10] ^= s[8]; + s[4] += s[10] + 0x0e0a85c9u; + s[2] += s[4] + 0x5aa11787u; + s[9] += s[2] + 0xbc33a8acu; + s[1] = mh_rotl(s[1], 2u) + s[9]; + s[11] = (s[11] ^ s[1]) * 0x5ab0da6du; + s[10] = (s[10] ^ s[11]) * 0xfa4adf2du; + s[2] -= s[10]; + s[10] -= s[2]; + s[2] ^= s[10]; + s[1] += s[2]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[3] += s[6]; + s[9] ^= s[3] ^ 0xc19b7470u; + s[12] *= (s[9] | 1u); + s[14] += (s[12] | s[15]); + s[5] = (s[5] ^ s[14]) * 0x6790286fu; + s[15] ^= s[5]; + s[10] -= s[15]; + s[13] += (s[10] | s[3]); + s[2] *= (s[13] | 1u); + s[7] += (s[2] | s[13]); + s[2] += s[7]; + s[11] += s[2]; + s[1] *= (s[11] | 1u); + s[13] += s[1] + 0x9c1bdb18u; + s[5] ^= (s[13] & s[1]); + s[13] += s[5]; + s[14] ^= s[13]; + s[0] += (s[14] | s[13]); + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[7] += s[6]; + s[9] ^= (s[7] & s[0]); + s[15] = (s[15] ^ s[9]) * 0x63348941u; + s[13] ^= s[15]; + s[10] += s[13]; + s[14] = (s[14] ^ s[10]) * 0x04d19b2fu; + s[2] *= (s[14] | 1u); + s[13] -= s[2]; + s[15] -= s[13]; + s[6] += (s[15] | s[12]); + s[14] += s[6] + 0x331d9e99u; + s[1] = mh_rotl(s[1], 24u) + s[14]; + s[2] = s[2] * 0xf02184e1u + s[1]; + s[12] += s[2]; + s[4] = (s[4] ^ s[12]) * 0xa250e449u; + s[2] *= (s[4] | 1u); + s[11] ^= s[2] ^ 0x6c4530fdu; + s[2] = mh_rotl(s[2], 10u) + s[11]; + s[6] *= (s[2] | 1u); + s[0] += (s[6] | s[7]); + s[6] = (s[6] ^ s[0]) * 0x678da095u; + s[14] = mh_rotl(s[14] ^ s[6], 30u); + s[3] = (s[3] ^ s[14]) * 0x3b065e11u; + s[8] += (s[3] | s[13]); + s[0] += s[8] + 0xd1214021u; + s[12] -= s[0]; + s[4] ^= s[12] ^ 0x2ae728adu; + s[0] = mh_rotl(s[0] ^ s[4], 11u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[15] *= (s[4] | 1u); + s[8] = mh_rotl(s[8] ^ s[15], 4u); + s[12] = (s[12] ^ s[8]) * 0x32cf5655u; + s[7] = (s[7] ^ s[12]) * 0xc97ab55fu; + s[15] *= (s[7] | 1u); + s[13] = s[13] * 0xc3424c27u + s[15]; + s[3] *= (s[13] | 1u); + s[13] = s[13] * 0x8b172941u + s[3]; + s[5] = mh_rotl(s[5], 5u) + s[13]; + s[6] ^= s[5]; + s[4] = (s[4] ^ s[6]) * 0xd1833353u; + s[5] = mh_rotl(s[5] ^ s[4], 10u); + s[11] = mh_rotl(s[11], 4u) + s[5]; + s[7] = (s[7] ^ s[11]) * 0x81b253dbu; + s[11] += s[7]; + s[8] = mh_rotl(s[8], 30u) + s[11]; + s[6] ^= s[8]; + s[5] = mh_rotl(s[5], 30u) + s[6]; + s[1] += s[5]; + s[10] += s[1] + 0xc388fc9cu; + s[9] ^= s[10]; + s[7] += (s[9] | s[10]); + s[11] += s[7]; + s[14] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[11] -= s[15]; + s[8] ^= s[11]; + s[6] ^= s[8]; + s[13] ^= s[6]; + s[7] += (s[13] | s[4]); + s[9] ^= s[7]; + s[0] += s[9]; + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 3u); + s[8] = s[8] * 0x229aeb39u + s[5]; + s[1] -= s[8]; + s[0] += s[1]; + s[13] += (s[0] | s[7]); + s[15] = (s[15] ^ s[13]) * 0x878a1a07u; + s[12] += s[15]; + s[14] ^= s[12]; + s[13] -= s[14]; + s[10] ^= s[13] ^ 0x3937b9cbu; + s[3] = mh_rotl(s[3], 29u) + s[10]; + s[1] += s[3] + 0x1698a660u; + s[2] = (s[2] ^ s[1]) * 0x20fad729u; + s[5] ^= s[2] ^ 0xe9e6778au; + s[10] += s[5] + 0xdaa6b74du; + s[3] *= (s[10] | 1u); + s[1] += (s[3] | s[6]); + s[15] = s[15] * 0xc0ee8651u + s[1]; + s[2] += s[15] + 0xbf9a18d6u; + s[6] += s[2] + 0xe0a7457eu; + s[10] ^= s[6]; + s[5] ^= s[10]; + s[4] ^= s[5] ^ 0x2b72d900u; + s[5] = mh_rotl(s[5] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[5], 7u); + s[10] = mh_rotl(s[10], 13u) + s[4]; + s[3] += (s[10] | s[4]); + s[9] += (s[3] | s[2]); + s[10] ^= s[9]; + s[13] ^= (s[10] & s[8]); + s[8] = mh_rotl(s[8], 11u) + s[13]; + s[4] += (s[8] | s[3]); + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[4] ^= s[15]; + s[1] ^= s[4]; + s[11] += s[1] + 0x0fb942e8u; + s[9] += (s[11] | s[0]); + s[10] = (s[10] ^ s[9]) * 0xf4ac3c9bu; + s[8] = mh_rotl(s[8] ^ s[10], 21u); + s[15] = mh_rotl(s[15] ^ s[8], 25u); + s[12] = mh_rotl(s[12] ^ s[15], 31u); + s[1] *= (s[12] | 1u); + s[15] += s[1] + 0xad836925u; + s[4] = mh_rotl(s[4], 29u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[4], 2u); + s[5] ^= s[1]; + s[6] -= s[5]; + s[10] -= s[6]; + s[9] *= (s[10] | 1u); + s[5] = mh_rotl(s[5], 13u) + s[9]; + s[7] ^= s[5] ^ 0xa8c7112du; + s[15] += (s[7] | s[2]); + s[11] = mh_rotl(s[11], 5u) + s[15]; + s[6] += (s[11] | s[5]); + s[12] = mh_rotl(s[12] ^ s[6], 25u); + s[6] ^= s[12] ^ 0xa8a8a54fu; + s[13] += s[6]; + s[1] *= (s[13] | 1u); + s[8] *= (s[1] | 1u); + s[12] += s[8]; + s[6] = (s[6] ^ s[12]) * 0x138d287fu; + s[5] = mh_rotl(s[5] ^ s[6], 4u); + s[13] = mh_rotl(s[13], 19u) + s[5]; + s[4] = mh_rotl(s[4], 18u) + s[13]; + s[13] += s[4] + 0x47783811u; + s[3] = s[3] * 0x3cb23963u + s[13]; + s[14] -= s[3]; + s[10] += s[14]; + s[2] ^= s[10]; + s[12] ^= s[2] ^ 0x70bcebd6u; + s[3] += s[12]; + s[8] = mh_rotl(s[8], 25u) + s[3]; + s[9] -= s[8]; + s[12] ^= s[9]; + s[0] = mh_rotl(s[0] ^ s[12], 7u); + s[6] = mh_rotl(s[6] ^ s[0], 19u); + s[2] ^= s[6]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[7] = (s[7] ^ s[11]) * 0x991f0089u; + s[3] -= s[7]; + s[10] = mh_rotl(s[10], 12u) + s[3]; + s[6] ^= s[10]; + s[12] += s[6]; + s[0] -= s[12]; + s[5] ^= s[0]; + s[2] = mh_rotl(s[2], 5u) + s[5]; + s[3] -= s[2]; + s[0] += s[3] + 0x84500e17u; + s[1] ^= s[0]; + s[15] *= (s[1] | 1u); + s[6] += s[15]; + s[5] = mh_rotl(s[5], 1u) + s[6]; + s[13] ^= s[5] ^ 0x32e6a4b0u; + s[1] -= s[13]; + s[0] += s[1]; + s[7] += s[0]; + s[15] = (s[15] ^ s[7]) * 0xde51d36bu; + s[12] += s[15]; + s[11] ^= s[12] ^ 0x085d7e04u; + s[7] = mh_rotl(s[7] ^ s[11], 29u); + s[9] = mh_rotl(s[9], 10u) + s[7]; + s[3] ^= s[9]; + s[1] ^= s[3] ^ 0xe20c8a44u; + s[6] += s[1]; + s[0] ^= s[6]; + s[11] = mh_rotl(s[11], 29u) + s[0]; + s[13] = mh_rotl(s[13] ^ s[11], 3u); + s[4] = s[4] * 0x53fa87a7u + s[13]; + s[15] = mh_rotl(s[15] ^ s[4], 13u); + s[13] ^= s[15] ^ 0xbaf52e15u; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[11] ^= s[1] ^ 0x16b5024au; + s[6] += s[11] + 0x712948feu; + s[15] += s[6]; + s[10] *= (s[15] | 1u); + s[0] -= s[10]; + s[11] ^= s[0]; + s[12] += (s[11] | s[1]); + s[14] -= s[12]; + s[0] -= s[14]; + s[9] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[9], 1u); + s[14] = (s[14] ^ s[15]) * 0x97b15c85u; + s[8] -= s[14]; +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_1(uint* s) { + s[14] = mh_rotl(s[14] ^ s[0], 17u); + s[12] = (s[12] ^ s[14]) * 0xa6ee330du; + s[2] += s[12]; + s[1] = s[1] * 0x0ce4bf05u + s[2]; + s[5] = mh_rotl(s[5], 20u) + s[1]; + s[15] = mh_rotl(s[15], 15u) + s[5]; + s[7] ^= s[15]; + s[2] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[2], 17u); + s[3] += s[0]; + s[9] = mh_rotl(s[9], 23u) + s[3]; + s[5] -= s[9]; + s[4] -= s[5]; + s[13] += s[4] + 0x1663e8c2u; + s[11] ^= s[13] ^ 0x6188ab5cu; + s[1] *= (s[11] | 1u); + s[13] -= s[1]; + s[10] += s[13]; + s[7] -= s[10]; + s[11] = s[11] * 0x0909c327u + s[7]; + s[8] ^= s[11]; + s[7] ^= s[8] ^ 0x82d87f23u; + s[13] = (s[13] ^ s[7]) * 0x5c48c9c7u; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 8u); + s[8] = mh_rotl(s[8], 1u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[8], 22u); + s[7] = (s[7] ^ s[2]) * 0x8d7cb2a9u; + s[6] -= s[7]; + s[8] = (s[8] ^ s[6]) * 0xac42e56du; + s[15] ^= s[8]; + s[2] ^= (s[15] & s[8]); + s[14] += s[2]; + s[5] += s[14]; + s[10] *= (s[5] | 1u); + s[13] += s[10] + 0xded20149u; + s[4] ^= s[13]; + s[14] ^= (s[4] & s[10]); + s[9] += s[14] + 0xe78db039u; + s[10] *= (s[9] | 1u); + s[8] ^= s[10] ^ 0x042fcfe9u; + s[2] += s[8]; + s[7] -= s[2]; + s[9] ^= s[7]; + s[8] ^= s[9]; + s[0] -= s[8]; + s[13] = mh_rotl(s[13] ^ s[0], 2u); + s[4] = mh_rotl(s[4] ^ s[13], 23u); + s[3] -= s[4]; + s[11] ^= s[3]; + s[1] *= (s[11] | 1u); + s[14] -= s[1]; + s[3] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[3]; + s[11] += s[10]; + s[7] -= s[11]; + s[15] += (s[7] | s[2]); + s[12] ^= s[15] ^ 0x57a179c1u; + s[8] -= s[12]; + s[1] ^= s[8] ^ 0xcb23a9b1u; + s[2] = mh_rotl(s[2], 7u) + s[1]; + s[4] -= s[2]; + s[14] ^= s[4] ^ 0x076e00fdu; + s[5] = mh_rotl(s[5] ^ s[14], 3u); + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[6] += s[9]; + s[13] = mh_rotl(s[13] ^ s[6], 2u); + s[10] += s[13]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[11] ^= s[9]; + s[15] ^= s[11]; + s[2] += s[15]; + s[14] = (s[14] ^ s[2]) * 0x7017bcdfu; + s[9] -= s[14]; + s[12] = mh_rotl(s[12] ^ s[9], 11u); + s[3] ^= s[12]; + s[8] += (s[3] | s[0]); + s[13] ^= s[8] ^ 0xb6656cfeu; + s[11] ^= s[13] ^ 0x118ac00bu; + s[8] = (s[8] ^ s[11]) * 0x3da3f311u; + s[4] = (s[4] ^ s[8]) * 0x1d6af721u; + s[12] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[11] *= (s[10] | 1u); + s[0] *= (s[11] | 1u); + s[11] *= (s[0] | 1u); + s[4] ^= s[11]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 27u) + s[14]; + s[2] ^= (s[11] & s[5]); + s[11] -= s[2]; + s[10] *= (s[11] | 1u); + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[7] ^= s[9]; + s[2] += s[7] + 0x72228b15u; + s[13] ^= (s[2] & s[1]); + s[7] = mh_rotl(s[7], 25u) + s[13]; + s[4] = (s[4] ^ s[7]) * 0x12e611dbu; + s[15] ^= (s[4] & s[2]); + s[1] += (s[15] | s[10]); + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0x4b034585u; + s[1] += s[2]; + s[13] ^= s[1] ^ 0x03c7fc79u; + s[9] ^= (s[13] & s[7]); + s[11] += s[9] + 0xf9b5cff0u; + s[10] = mh_rotl(s[10] ^ s[11], 4u); + s[11] = s[11] * 0x5aaa11f7u + s[10]; + s[2] -= s[11]; + s[1] ^= s[2]; + s[5] = mh_rotl(s[5] ^ s[1], 30u); + s[12] ^= s[5]; + s[8] ^= (s[12] & s[15]); + s[4] = s[4] * 0x32c2f11bu + s[8]; + s[8] = (s[8] ^ s[4]) * 0x8c725c57u; + s[3] += s[8] + 0x16517d85u; + s[2] ^= s[3]; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[2] = mh_rotl(s[2], 9u) + s[0]; + s[8] -= s[2]; + s[14] += s[8] + 0x3d1690b9u; + s[8] ^= s[14] ^ 0xfd404591u; + s[5] = mh_rotl(s[5], 14u) + s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 28u); + s[7] ^= s[15]; + s[13] ^= s[7] ^ 0x1c120483u; + s[2] ^= (s[13] & s[14]); + s[6] ^= s[2]; + s[10] = (s[10] ^ s[6]) * 0x4fd29dfdu; + s[3] += s[10]; + s[10] ^= s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 25u); + s[2] = s[2] * 0x8eebc38du + s[14]; + s[5] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[9] -= s[14]; + s[14] = s[14] * 0xea014a2fu + s[9]; + s[9] ^= (s[14] & s[12]); + s[8] ^= s[9]; + s[10] = s[10] * 0xdffcece9u + s[8]; + s[11] -= s[10]; + s[9] ^= s[11]; + s[5] = (s[5] ^ s[9]) * 0xb0f7c285u; + s[2] ^= s[5]; + s[7] ^= s[2]; + s[11] ^= s[7]; + s[3] *= (s[11] | 1u); + s[8] += (s[3] | s[6]); + s[0] ^= s[8] ^ 0x0be40c24u; + s[1] = mh_rotl(s[1], 14u) + s[0]; + s[9] -= s[1]; + s[4] += s[9]; + s[12] -= s[4]; + s[8] += s[12]; + s[13] ^= s[8]; + s[8] -= s[13]; + s[15] += s[8]; + s[10] = mh_rotl(s[10] ^ s[15], 11u); + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[12] += s[3]; + s[10] ^= s[12] ^ 0x7646e0a4u; + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[7] = mh_rotl(s[7], 13u) + s[8]; + s[6] ^= (s[7] & s[15]); + s[1] += (s[6] | s[0]); + s[3] = mh_rotl(s[3], 27u) + s[1]; + s[12] ^= s[3]; + s[1] = s[1] * 0xe296889du + s[12]; + s[7] = mh_rotl(s[7], 6u) + s[1]; + s[5] += s[7]; + s[2] = (s[2] ^ s[5]) * 0xe5c22b4fu; + s[15] += s[2] + 0x31507e5eu; + s[3] += s[15]; + s[1] += s[3] + 0xa943282bu; + s[4] ^= (s[1] & s[11]); + s[10] += s[4]; + s[4] ^= (s[10] & s[5]); + s[1] += s[4]; + s[6] += s[1]; + s[13] ^= s[6]; + s[8] ^= s[13]; + s[2] = (s[2] ^ s[8]) * 0x6ff7b6c9u; + s[13] += (s[2] | s[5]); + s[12] ^= s[13] ^ 0xd6ce983fu; + s[4] ^= s[12]; + s[3] *= (s[4] | 1u); + s[10] += (s[3] | s[7]); + s[2] += s[10]; + s[14] ^= (s[2] & s[7]); + s[5] = s[5] * 0xa23d13c7u + s[14]; + s[8] += s[5] + 0xeba888dcu; + s[15] ^= s[8]; + s[2] ^= s[15] ^ 0x40a0fb0au; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[0] ^= s[9]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[5] += s[11] + 0x56f2d848u; + s[14] ^= (s[5] & s[15]); + s[7] = (s[7] ^ s[14]) * 0x1897fa79u; + s[14] = (s[14] ^ s[7]) * 0x0baf4813u; + s[15] *= (s[14] | 1u); + s[3] ^= (s[15] & s[7]); + s[10] -= s[3]; + s[4] ^= s[10]; + s[11] = (s[11] ^ s[4]) * 0x7df27859u; + s[7] *= (s[11] | 1u); + s[4] += s[7] + 0x3fc46fd8u; + s[6] = mh_rotl(s[6], 11u) + s[4]; + s[2] ^= s[6]; + s[13] += s[2]; + s[12] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[12], 18u); + s[15] ^= (s[5] & s[12]); + s[11] *= (s[15] | 1u); + s[8] += s[11]; + s[14] *= (s[8] | 1u); + s[8] += s[14]; + s[1] -= s[8]; + s[10] = mh_rotl(s[10], 18u) + s[1]; + s[4] ^= s[10]; + s[2] += s[4]; + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[13] += s[1]; + s[4] -= s[13]; + s[9] *= (s[4] | 1u); + s[6] -= s[9]; + s[3] = (s[3] ^ s[6]) * 0x6d6488c7u; + s[7] += (s[3] | s[10]); + s[12] ^= s[7]; + s[14] -= s[12]; + s[4] ^= s[14]; + s[10] += s[4]; + s[7] += s[10]; + s[15] += (s[7] | s[2]); + s[1] = mh_rotl(s[1], 8u) + s[15]; + s[5] += s[1]; + s[12] = mh_rotl(s[12], 1u) + s[5]; + s[3] *= (s[12] | 1u); + s[6] ^= s[3] ^ 0xada02894u; + s[3] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[3], 16u); + s[5] ^= s[6] ^ 0xeafee980u; + s[8] ^= s[5] ^ 0x00dbe804u; + s[10] = mh_rotl(s[10] ^ s[8], 5u); + s[2] *= (s[10] | 1u); + s[6] = mh_rotl(s[6] ^ s[2], 31u); + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[7] = s[7] * 0x16a2fd0bu + s[4]; + s[11] -= s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 20u); + s[1] ^= (s[2] & s[12]); + s[3] *= (s[1] | 1u); + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[12] += s[15]; + s[10] -= s[12]; + s[3] += s[10]; + s[13] += s[3]; + s[4] = mh_rotl(s[4], 14u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 2u); + s[8] += s[10]; + s[9] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[9], 11u); + s[9] -= s[7]; + s[11] -= s[9]; + s[5] -= s[11]; + s[3] = s[3] * 0x7d5e197du + s[5]; + s[9] *= (s[3] | 1u); + s[14] = mh_rotl(s[14], 8u) + s[9]; + s[11] += s[14] + 0xa3dd86d5u; + s[8] ^= s[11]; + s[2] -= s[8]; + s[5] *= (s[2] | 1u); + s[1] ^= s[5]; + s[12] ^= s[1]; + s[4] = mh_rotl(s[4] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 14u) + s[4]; + s[4] += (s[8] | s[15]); + s[3] = mh_rotl(s[3] ^ s[4], 2u); + s[2] ^= s[3]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[12] ^= s[9] ^ 0x33fd48ccu; + s[13] *= (s[12] | 1u); + s[3] += s[13]; + s[8] -= s[3]; + s[10] ^= (s[8] & s[7]); + s[15] ^= s[10] ^ 0xd3ffcb52u; + s[3] += s[15] + 0xd8cfcd30u; + s[0] = (s[0] ^ s[3]) * 0x013282f1u; + s[8] += s[0]; + s[4] ^= (s[8] & s[7]); + s[15] ^= s[4] ^ 0xd8b2262cu; + s[4] ^= s[15]; + s[0] ^= s[4]; + s[14] += s[0]; + s[1] += s[14]; + s[0] ^= s[1]; + s[14] += s[0]; + s[4] ^= s[14]; + s[11] *= (s[4] | 1u); + s[7] += s[11]; + s[2] = (s[2] ^ s[7]) * 0xb04d6739u; + s[12] ^= s[2]; + s[15] -= s[12]; + s[9] -= s[15]; + s[15] = (s[15] ^ s[9]) * 0x806e4757u; + s[2] = mh_rotl(s[2] ^ s[15], 26u); + s[4] ^= s[2] ^ 0x5da3ddfau; + s[14] *= (s[4] | 1u); + s[1] ^= s[14]; + s[14] = mh_rotl(s[14], 4u) + s[1]; + s[15] *= (s[14] | 1u); + s[4] = (s[4] ^ s[15]) * 0x8339a46bu; + s[13] -= s[4]; + s[1] += s[13] + 0x89cedf01u; + s[15] ^= (s[1] & s[2]); + s[5] -= s[15]; + s[4] ^= s[5]; + s[0] ^= s[4] ^ 0x659daf23u; + s[9] = mh_rotl(s[9] ^ s[0], 31u); + s[4] *= (s[9] | 1u); + s[3] ^= s[4]; + s[2] = mh_rotl(s[2], 25u) + s[3]; + s[1] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[1] *= (s[2] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 18u); + s[2] = mh_rotl(s[2] ^ s[10], 22u); + s[12] = mh_rotl(s[12], 2u) + s[2]; + s[6] ^= s[12] ^ 0xf3967aefu; + s[5] ^= s[6]; + s[11] += (s[5] | s[3]); + s[13] -= s[11]; + s[2] += (s[13] | s[12]); + s[10] ^= s[2]; + s[7] -= s[10]; + s[2] = mh_rotl(s[2] ^ s[7], 1u); + s[1] += s[2]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[10] ^= s[7]; + s[11] ^= (s[10] & s[12]); + s[3] = mh_rotl(s[3] ^ s[11], 22u); + s[12] += s[3]; + s[8] ^= s[12] ^ 0xd1018d15u; + s[6] ^= s[8]; + s[13] = s[13] * 0xad1ff569u + s[6]; + s[9] = s[9] * 0xa7473da7u + s[13]; + s[4] ^= s[9]; + s[2] *= (s[4] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 7u); + s[9] = mh_rotl(s[9] ^ s[7], 2u); + s[14] *= (s[9] | 1u); + s[11] ^= s[14]; + s[6] += s[11] + 0x02da7647u; + s[13] ^= s[6]; + s[12] += s[13]; + s[6] = mh_rotl(s[6], 4u) + s[12]; + s[0] = mh_rotl(s[0], 17u) + s[6]; + s[6] = mh_rotl(s[6] ^ s[0], 16u); + s[5] *= (s[6] | 1u); + s[14] = (s[14] ^ s[5]) * 0x631860bdu; + s[7] ^= s[14] ^ 0xfd80e869u; + s[6] *= (s[7] | 1u); + s[14] = mh_rotl(s[14] ^ s[6], 28u); + s[1] += s[14]; + s[12] -= s[1]; + s[10] = mh_rotl(s[10], 24u) + s[12]; + s[12] ^= s[10] ^ 0x923e2dd8u; + s[6] = (s[6] ^ s[12]) * 0xd1c8662bu; + s[11] = (s[11] ^ s[6]) * 0x7f1579abu; + s[1] *= (s[11] | 1u); + s[12] *= (s[1] | 1u); + s[0] += (s[12] | s[15]); + s[12] ^= (s[0] & s[5]); + s[13] = mh_rotl(s[13], 3u) + s[12]; + s[12] *= (s[13] | 1u); + s[0] += s[12]; + s[8] += s[0] + 0x20b00217u; + s[14] = (s[14] ^ s[8]) * 0xf9d426ffu; + s[2] *= (s[14] | 1u); + s[10] += s[2]; + s[2] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 29u); + s[0] = mh_rotl(s[0] ^ s[14], 8u); + s[8] = (s[8] ^ s[0]) * 0x1108ba07u; + s[14] += s[8]; + s[5] += s[14]; + s[15] += s[5]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x135192c5u; + s[14] += s[5] + 0x4e9e6ad1u; + s[5] += s[14]; + s[7] += s[5]; + s[1] = (s[1] ^ s[7]) * 0x6babe5ddu; + s[10] ^= s[1]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[1] ^= s[2]; + s[6] = mh_rotl(s[6], 15u) + s[1]; + s[12] ^= s[6]; + s[7] *= (s[12] | 1u); + s[8] = mh_rotl(s[8], 16u) + s[7]; + s[3] ^= s[8]; + s[13] += (s[3] | s[0]); + s[10] ^= s[13]; + s[2] ^= s[10]; + s[1] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[1], 1u); + s[15] = (s[15] ^ s[8]) * 0xfa9fbf2du; + s[3] ^= s[15]; + s[11] ^= s[3] ^ 0x545738b5u; + s[12] = mh_rotl(s[12], 26u) + s[11]; + s[1] = mh_rotl(s[1], 7u) + s[12]; + s[11] = mh_rotl(s[11] ^ s[1], 4u); + s[0] = mh_rotl(s[0], 8u) + s[11]; + s[2] ^= s[0] ^ 0xaacb0afeu; + s[9] += s[2]; + s[6] += s[9]; + s[13] ^= s[6] ^ 0x443ac86au; + s[3] += s[13]; + s[6] = mh_rotl(s[6], 12u) + s[3]; + s[9] ^= s[6] ^ 0x8fa27e45u; + s[14] = mh_rotl(s[14] ^ s[9], 15u); + s[4] = mh_rotl(s[4] ^ s[14], 20u); + s[5] += s[4]; + s[6] = mh_rotl(s[6], 12u) + s[5]; + s[15] = (s[15] ^ s[6]) * 0x6fbcddebu; + s[8] -= s[15]; + s[15] += s[8]; + s[4] += s[15]; + s[12] -= s[4]; + s[8] += s[12]; + s[2] += (s[8] | s[6]); + s[6] = (s[6] ^ s[2]) * 0xb3985295u; + s[0] = mh_rotl(s[0] ^ s[6], 27u); + s[4] += s[0] + 0x56dea41du; + s[13] *= (s[4] | 1u); + s[15] -= s[13]; + s[0] += s[15] + 0x3a8c7806u; + s[12] ^= s[0] ^ 0xa154fcc4u; + s[4] = (s[4] ^ s[12]) * 0xef91a6cbu; + s[10] = (s[10] ^ s[4]) * 0xfb043751u; + s[12] += s[10]; + s[9] *= (s[12] | 1u); + s[15] += (s[9] | s[1]); + s[11] = mh_rotl(s[11], 1u) + s[15]; + s[4] = (s[4] ^ s[11]) * 0x1647a845u; + s[2] -= s[4]; + s[14] ^= s[2] ^ 0x6cf9afaeu; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x0b925217u; + s[2] = mh_rotl(s[2] ^ s[9], 6u); + s[12] = (s[12] ^ s[2]) * 0x063f86d7u; + s[1] ^= s[12]; + s[11] += s[1]; + s[4] ^= s[11]; + s[0] ^= (s[4] & s[11]); + s[9] += s[0]; + s[14] = mh_rotl(s[14], 1u) + s[9]; + s[9] ^= s[14]; + s[12] += s[9]; + s[9] = mh_rotl(s[9] ^ s[12], 5u); + s[15] += (s[9] | s[7]); + s[14] += s[15] + 0x720a9418u; + s[0] -= s[14]; + s[3] = (s[3] ^ s[0]) * 0x3b661535u; + s[0] -= s[3]; + s[2] += s[0]; + s[11] = mh_rotl(s[11] ^ s[2], 28u); + s[7] -= s[11]; + s[1] ^= s[7]; + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[14] -= s[2]; + s[0] -= s[14]; + s[10] += s[0]; + s[3] = mh_rotl(s[3] ^ s[10], 5u); + s[1] = mh_rotl(s[1], 15u) + s[3]; + s[13] ^= (s[1] & s[3]); + s[5] += s[13]; + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[11] = s[11] * 0xb072cb67u + s[10]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[0] = mh_rotl(s[0] ^ s[6], 30u); + s[7] = mh_rotl(s[7], 2u) + s[0]; + s[5] = mh_rotl(s[5], 13u) + s[7]; + s[11] = mh_rotl(s[11] ^ s[5], 29u); + s[7] *= (s[11] | 1u); + s[8] ^= (s[7] & s[15]); + s[5] += s[8]; + s[14] = (s[14] ^ s[5]) * 0xadb08c77u; + s[7] = (s[7] ^ s[14]) * 0x9b7a1549u; + s[5] ^= (s[7] & s[9]); + s[9] += s[5]; + s[7] += s[9] + 0x31c29969u; + s[9] ^= s[7]; + s[12] = (s[12] ^ s[9]) * 0x1b53dc25u; + s[14] += s[12]; + s[13] -= s[14]; + s[5] = s[5] * 0x1411b229u + s[13]; + s[12] += (s[5] | s[1]); + s[8] ^= s[12]; + s[6] -= s[8]; + s[5] -= s[6]; + s[15] -= s[5]; + s[9] += s[15]; + s[8] ^= s[9]; + s[5] += s[8]; + s[4] += s[5]; + s[0] = (s[0] ^ s[4]) * 0x54b6241fu; + s[5] ^= s[0]; + s[4] = mh_rotl(s[4], 1u) + s[5]; + s[15] += s[4]; + s[7] = (s[7] ^ s[15]) * 0x65b59741u; + s[11] += s[7]; + s[2] += s[11]; + s[9] += s[2]; + s[0] -= s[9]; + s[5] -= s[0]; + s[9] ^= s[5]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[10] = s[10] * 0xf978f191u + s[14]; + s[12] += s[10]; + s[4] += s[12]; + s[7] ^= s[4]; + s[12] ^= s[7]; + s[10] += (s[12] | s[13]); + s[1] ^= s[10] ^ 0x79536ee2u; + s[15] -= s[1]; + s[13] = (s[13] ^ s[15]) * 0xaaf42111u; + s[11] += s[13] + 0xd935a555u; + s[1] = mh_rotl(s[1], 19u) + s[11]; + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[9] ^= s[13] ^ 0x6c0ea54au; + s[11] ^= s[9]; + s[9] += s[11] + 0x609cd9eau; + s[14] = (s[14] ^ s[9]) * 0xf76d6ffbu; + s[7] = mh_rotl(s[7], 14u) + s[14]; + s[3] = mh_rotl(s[3], 18u) + s[7]; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 1u) + s[7]; + s[9] = (s[9] ^ s[11]) * 0xf3497ec7u; + s[0] -= s[9]; + s[12] += s[0] + 0xfc1c2a19u; + s[14] += s[12]; + s[12] += s[14]; + s[0] = mh_rotl(s[0], 19u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[0], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 12u); + s[7] = mh_rotl(s[7], 15u) + s[9]; + s[6] += s[7]; + s[0] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[0], 25u); + s[5] += s[7]; + s[13] = (s[13] ^ s[5]) * 0x103550c1u; + s[10] += s[13]; + s[12] -= s[10]; + s[10] += (s[12] | s[0]); + s[12] += (s[10] | s[1]); + s[5] ^= s[12]; + s[2] ^= s[5]; + s[3] ^= s[2] ^ 0x2e047eb3u; + s[5] += s[3] + 0xe97cb0afu; + s[10] ^= s[5] ^ 0x4455829bu; + s[8] ^= s[10]; + s[9] = s[9] * 0xe48b6cf7u + s[8]; + s[10] = mh_rotl(s[10], 11u) + s[9]; + s[14] -= s[10]; + s[4] += s[14]; + s[1] += (s[4] | s[2]); + s[12] *= (s[1] | 1u); + s[15] -= s[12]; + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[13] = mh_rotl(s[13], 30u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[13], 3u); + s[10] += s[1] + 0x2b88f231u; + s[3] ^= s[10]; + s[14] = mh_rotl(s[14], 16u) + s[3]; + s[2] ^= s[14]; + s[0] = mh_rotl(s[0], 24u) + s[2]; + s[6] ^= s[0]; + s[7] = s[7] * 0xc8b02c1fu + s[6]; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[1] ^= s[15]; + s[2] ^= s[1]; + s[13] += (s[2] | s[4]); + s[4] = mh_rotl(s[4], 25u) + s[13]; + s[1] *= (s[4] | 1u); + s[8] += s[1] + 0x170391fdu; + s[7] -= s[8]; + s[6] += s[7] + 0x428e4c84u; + s[15] += s[6]; + s[10] += (s[15] | s[13]); + s[7] = mh_rotl(s[7], 17u) + s[10]; + s[0] *= (s[7] | 1u); + s[13] *= (s[0] | 1u); + s[6] ^= s[13]; + s[14] *= (s[6] | 1u); + s[0] += s[14] + 0x10c22a2du; + s[9] = (s[9] ^ s[0]) * 0xaeee5b5fu; + s[5] ^= (s[9] & s[6]); + s[12] += s[5] + 0xaa190509u; + s[15] = mh_rotl(s[15], 23u) + s[12]; + s[6] = mh_rotl(s[6], 29u) + s[15]; + s[4] -= s[6]; + s[1] ^= s[4]; + s[10] += s[1]; + s[3] += s[10] + 0xcb02e2f1u; + s[11] += s[3]; + s[4] ^= s[11]; + s[8] ^= s[4]; + s[10] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[10]; + s[10] = s[10] * 0x385128c9u + s[9]; + s[13] += (s[10] | s[1]); + s[15] = mh_rotl(s[15] ^ s[13], 4u); + s[1] = mh_rotl(s[1], 20u) + s[15]; + s[14] ^= (s[1] & s[6]); + s[8] ^= s[14]; + s[0] = (s[0] ^ s[8]) * 0x5e3978c9u; + s[2] ^= s[0]; + s[11] = mh_rotl(s[11], 18u) + s[2]; + s[8] = (s[8] ^ s[11]) * 0xfc3d1753u; + s[10] += s[8]; + s[2] ^= s[10]; + s[0] += s[2]; + s[1] *= (s[0] | 1u); + s[4] += s[1]; + s[1] ^= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 8u); + s[6] = (s[6] ^ s[3]) * 0xb74b7bbbu; + s[8] *= (s[6] | 1u); + s[11] -= s[8]; + s[7] ^= (s[11] & s[9]); + s[11] ^= s[7]; + s[5] += (s[11] | s[15]); + s[1] = s[1] * 0x6f397ee5u + s[5]; + s[2] ^= s[1]; + s[6] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[6], 10u); + s[5] = (s[5] ^ s[3]) * 0xf3e5cfadu; + s[8] += s[5]; + s[7] -= s[8]; + s[2] += s[7]; + s[14] = mh_rotl(s[14], 25u) + s[2]; + s[1] *= (s[14] | 1u); + s[3] = s[3] * 0x02b399cbu + s[1]; + s[2] ^= (s[3] & s[10]); + s[12] = mh_rotl(s[12] ^ s[2], 3u); + s[14] *= (s[12] | 1u); + s[0] = (s[0] ^ s[14]) * 0xdce3e741u; + s[1] = mh_rotl(s[1], 7u) + s[0]; + s[7] ^= s[1]; + s[10] *= (s[7] | 1u); + s[5] = mh_rotl(s[5], 9u) + s[10]; + s[1] *= (s[5] | 1u); + s[4] ^= s[1] ^ 0x385d5cd4u; + s[7] += s[4]; + s[15] ^= s[7]; + s[13] = mh_rotl(s[13], 22u) + s[15]; + s[12] = (s[12] ^ s[13]) * 0x817a9347u; + s[7] ^= (s[12] & s[5]); + s[9] ^= s[7]; + s[12] = mh_rotl(s[12], 8u) + s[9]; + s[5] += s[12]; + s[9] *= (s[5] | 1u); + s[15] -= s[9]; + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[8] = s[8] * 0x97d936ebu + s[13]; + s[10] += s[8]; + s[14] += s[10]; + s[6] += s[14]; + s[0] ^= s[6]; + s[11] -= s[0]; + s[1] ^= (s[11] & s[14]); + s[2] ^= s[1]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[5] ^= s[11]; + s[9] = (s[9] ^ s[5]) * 0x684dd78fu; + s[14] = s[14] * 0xcce53009u + s[9]; + s[8] = mh_rotl(s[8], 4u) + s[14]; + s[3] -= s[8]; + s[12] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[12], 22u); + s[12] += s[15] + 0x25d2e612u; + s[8] = mh_rotl(s[8] ^ s[12], 10u); + s[4] += s[8]; + s[10] = mh_rotl(s[10] ^ s[4], 9u); + s[0] += (s[10] | s[9]); + s[2] ^= s[0]; + s[10] = mh_rotl(s[10], 3u) + s[2]; + s[14] += s[10]; + s[5] ^= s[14]; + s[9] *= (s[5] | 1u); + s[13] ^= s[9] ^ 0xd2f78081u; + s[14] ^= s[13]; + s[8] += s[14]; + s[5] += s[8]; + s[15] = (s[15] ^ s[5]) * 0xb4af8bb9u; + s[5] += s[15] + 0xd497de31u; + s[13] ^= s[5]; + s[14] += (s[13] | s[4]); + s[12] = mh_rotl(s[12], 19u) + s[14]; + s[1] = (s[1] ^ s[12]) * 0x80736b3fu; + s[0] += s[1]; + s[6] -= s[0]; + s[5] *= (s[6] | 1u); + s[13] -= s[5]; + s[7] = s[7] * 0x4b586d65u + s[13]; + s[9] = mh_rotl(s[9] ^ s[7], 9u); + s[1] ^= s[9]; + s[15] *= (s[1] | 1u); + s[13] -= s[15]; + s[4] = (s[4] ^ s[13]) * 0x0bf0c72bu; + s[15] += s[4]; + s[9] ^= s[15] ^ 0x1f3d3b6fu; + s[11] += s[9]; + s[6] += (s[11] | s[5]); + s[15] += (s[6] | s[9]); + s[7] = (s[7] ^ s[15]) * 0x2d1b2827u; + s[1] = mh_rotl(s[1], 4u) + s[7]; + s[10] += s[1] + 0x19394fe5u; + s[7] += s[10] + 0x0df93d70u; + s[9] -= s[7]; + s[1] = mh_rotl(s[1], 13u) + s[9]; + s[5] += s[1]; + s[3] += s[5] + 0x528c96f9u; + s[9] *= (s[3] | 1u); + s[11] += s[9]; + s[1] += s[11]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_2(uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 11u); + s[9] = (s[9] ^ s[3]) * 0x926a6d6du; + s[10] *= (s[9] | 1u); + s[6] = (s[6] ^ s[10]) * 0x16fa529bu; + s[14] += s[6] + 0x8bf7717du; + s[15] = s[15] * 0x838a9b83u + s[14]; + s[13] += (s[15] | s[1]); + s[7] ^= s[13] ^ 0x1c4ee851u; + s[12] += s[7] + 0x2de89a80u; + s[9] = (s[9] ^ s[12]) * 0xc6ccd52bu; + s[12] -= s[9]; + s[8] ^= s[12]; + s[6] += s[8]; + s[12] -= s[6]; + s[15] = mh_rotl(s[15], 6u) + s[12]; + s[3] += s[15]; + s[14] += s[3]; + s[3] = s[3] * 0x86602d0du + s[14]; + s[12] = mh_rotl(s[12] ^ s[3], 31u); + s[0] ^= s[12]; + s[8] ^= s[0]; + s[12] -= s[8]; + s[11] += s[12]; + s[15] = (s[15] ^ s[11]) * 0xcd53cb6bu; + s[0] = (s[0] ^ s[15]) * 0x2e7b800du; + s[3] *= (s[0] | 1u); + s[4] += s[3]; + s[7] = s[7] * 0xf492cc8du + s[4]; + s[13] = mh_rotl(s[13], 6u) + s[7]; + s[8] -= s[13]; + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[6] -= s[15]; + s[1] += s[6]; + s[15] -= s[1]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x6d79f9b3u; + s[10] = mh_rotl(s[10] ^ s[5], 29u); + s[8] ^= s[10] ^ 0xd22b10f3u; + s[9] = (s[9] ^ s[8]) * 0xc87cfcd7u; + s[2] = mh_rotl(s[2], 5u) + s[9]; + s[11] *= (s[2] | 1u); + s[5] ^= s[11]; + s[7] += s[5]; + s[14] += s[7] + 0xac6f941eu; + s[5] += s[14]; + s[14] += s[5]; + s[13] ^= s[14]; + s[6] += s[13]; + s[14] -= s[6]; + s[10] = mh_rotl(s[10], 15u) + s[14]; + s[1] ^= s[10]; + s[5] = (s[5] ^ s[1]) * 0x7a531a39u; + s[15] = s[15] * 0xe6bff90bu + s[5]; + s[7] ^= s[15]; + s[4] += s[7]; + s[8] -= s[4]; + s[14] = (s[14] ^ s[8]) * 0xcb91e92bu; + s[2] -= s[14]; + s[14] = mh_rotl(s[14], 26u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[10] += s[4]; + s[1] = (s[1] ^ s[10]) * 0x2f2e1573u; + s[5] += s[1]; + s[7] += s[5]; + s[1] = mh_rotl(s[1] ^ s[7], 31u); + s[14] = mh_rotl(s[14] ^ s[1], 9u); + s[6] -= s[14]; + s[14] ^= s[6]; + s[1] += s[14]; + s[15] = (s[15] ^ s[1]) * 0xf122f41du; + s[1] -= s[15]; + s[5] += (s[1] | s[8]); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[1] = s[1] * 0x24839c9du + s[13]; + s[10] += s[1] + 0x6e377732u; + s[9] ^= s[10]; + s[10] += s[9] + 0x9c8be86fu; + s[4] = mh_rotl(s[4] ^ s[10], 18u); + s[15] = s[15] * 0x57f74b09u + s[4]; + s[0] = s[0] * 0x4777892du + s[15]; + s[15] *= (s[0] | 1u); + s[8] -= s[15]; + s[14] -= s[8]; + s[6] ^= s[14]; + s[11] += s[6]; + s[9] ^= s[11]; + s[4] += s[9] + 0x4e322e4bu; + s[7] = mh_rotl(s[7] ^ s[4], 5u); + s[15] += (s[7] | s[0]); + s[10] -= s[15]; + s[9] = mh_rotl(s[9] ^ s[10], 8u); + s[12] = mh_rotl(s[12] ^ s[9], 26u); + s[10] += s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[12] ^= s[13]; + s[1] ^= s[12] ^ 0x32411651u; + s[9] += s[1]; + s[1] *= (s[9] | 1u); + s[11] += s[1]; + s[12] = mh_rotl(s[12] ^ s[11], 11u); + s[15] = mh_rotl(s[15] ^ s[12], 16u); + s[11] ^= s[15]; + s[9] += s[11]; + s[13] += (s[9] | s[3]); + s[7] ^= (s[13] & s[1]); + s[0] ^= (s[7] & s[11]); + s[6] = mh_rotl(s[6], 25u) + s[0]; + s[7] = mh_rotl(s[7] ^ s[6], 18u); + s[2] -= s[7]; + s[14] ^= s[2] ^ 0xd6cffa6eu; + s[10] += s[14] + 0xdb62a314u; + s[2] += s[10]; + s[14] = s[14] * 0x2f015667u + s[2]; + s[3] *= (s[14] | 1u); + s[0] ^= s[3]; + s[8] *= (s[0] | 1u); + s[12] ^= s[8]; + s[9] = mh_rotl(s[9], 11u) + s[12]; + s[4] ^= s[9]; + s[15] ^= s[4]; + s[3] = mh_rotl(s[3], 5u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[14] = (s[14] ^ s[6]) * 0x3392ff1fu; + s[9] -= s[14]; + s[14] *= (s[9] | 1u); + s[9] -= s[14]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[10] = (s[10] ^ s[0]) * 0x86b32d1du; + s[7] *= (s[10] | 1u); + s[3] = s[3] * 0xcf4d9bb3u + s[7]; + s[8] *= (s[3] | 1u); + s[7] -= s[8]; + s[2] = mh_rotl(s[2], 31u) + s[7]; + s[6] ^= s[2]; + s[7] = s[7] * 0xf9e43535u + s[6]; + s[5] ^= s[7]; + s[4] = mh_rotl(s[4], 10u) + s[5]; + s[2] *= (s[4] | 1u); + s[14] = (s[14] ^ s[2]) * 0xd801e903u; + s[11] = s[11] * 0x1140fbe1u + s[14]; + s[12] = mh_rotl(s[12], 6u) + s[11]; + s[5] = s[5] * 0x974088edu + s[12]; + s[0] -= s[5]; + s[14] -= s[0]; + s[0] += (s[14] | s[4]); + s[6] -= s[0]; + s[1] *= (s[6] | 1u); + s[10] = s[10] * 0x78b0e1a7u + s[1]; + s[13] ^= s[10]; + s[0] -= s[13]; + s[7] += s[0]; + s[0] ^= s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 23u); + s[9] -= s[12]; + s[5] += (s[9] | s[6]); + s[2] += s[5]; + s[8] = s[8] * 0x7b42b5f1u + s[2]; + s[4] ^= s[8]; + s[15] = (s[15] ^ s[4]) * 0x2e28033bu; + s[12] += s[15]; + s[9] = mh_rotl(s[9] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 22u) + s[9]; + s[0] ^= s[8]; + s[10] *= (s[0] | 1u); + s[1] *= (s[10] | 1u); + s[2] ^= s[1]; + s[3] ^= (s[2] & s[12]); + s[4] *= (s[3] | 1u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[0] += s[11]; + s[15] += (s[0] | s[7]); + s[13] += s[15]; + s[0] ^= s[13]; + s[12] += s[0]; + s[10] += s[12] + 0x9646135eu; + s[0] += s[10]; + s[10] ^= (s[0] & s[2]); + s[4] += s[10] + 0x82a90265u; + s[15] ^= s[4]; + s[5] = (s[5] ^ s[15]) * 0x0ab18765u; + s[1] ^= s[5]; + s[3] = (s[3] ^ s[1]) * 0x58bdae6fu; + s[14] += (s[3] | s[2]); + s[13] += s[14] + 0xe01e7581u; + s[0] = (s[0] ^ s[13]) * 0x49941f01u; + s[10] = s[10] * 0xb246126bu + s[0]; + s[3] ^= s[10] ^ 0xe938f5d3u; + s[8] += s[3]; + s[14] += (s[8] | s[0]); + s[9] += s[14]; + s[15] ^= s[9] ^ 0xd652447bu; + s[10] ^= s[15] ^ 0xbfa14965u; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[11] ^= s[6] ^ 0x37d98687u; + s[6] = (s[6] ^ s[11]) * 0x4e553b0bu; + s[12] = mh_rotl(s[12], 17u) + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[10] ^= s[4]; + s[0] *= (s[10] | 1u); + s[12] ^= s[0]; + s[6] += (s[12] | s[14]); + s[12] = mh_rotl(s[12] ^ s[6], 16u); + s[10] ^= s[12]; + s[11] += s[10] + 0x936f0354u; + s[10] += s[11] + 0x1771251du; + s[1] = mh_rotl(s[1] ^ s[10], 13u); + s[4] = mh_rotl(s[4] ^ s[1], 18u); + s[14] = (s[14] ^ s[4]) * 0xd997b3a1u; + s[4] *= (s[14] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[4] += s[11]; + s[11] += s[4]; + s[10] = mh_rotl(s[10], 2u) + s[11]; + s[3] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[3], 1u); + s[15] ^= s[11] ^ 0x31d420ebu; + s[12] += s[15]; + s[6] = s[6] * 0xef7ed339u + s[12]; + s[5] += s[6]; + s[6] ^= s[5]; + s[7] += s[6]; + s[1] *= (s[7] | 1u); + s[13] ^= s[1]; + s[8] += s[13]; + s[0] ^= s[8]; + s[10] = s[10] * 0x2dc4f3ffu + s[0]; + s[4] ^= s[10]; + s[15] -= s[4]; + s[4] -= s[15]; + s[12] += s[4]; + s[0] ^= s[12] ^ 0xc68cf398u; + s[10] = s[10] * 0x8d7270d1u + s[0]; + s[1] ^= s[10] ^ 0x792d21d6u; + s[15] ^= s[1]; + s[3] = mh_rotl(s[3], 31u) + s[15]; + s[12] *= (s[3] | 1u); + s[0] ^= s[12] ^ 0x44570ae7u; + s[8] += s[0]; + s[5] ^= (s[8] & s[10]); + s[14] -= s[5]; + s[6] += s[14]; + s[8] += s[6] + 0xa3eeb141u; + s[11] += s[8]; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[14] -= s[13]; + s[7] += (s[14] | s[0]); + s[8] += (s[7] | s[0]); + s[3] *= (s[8] | 1u); + s[4] = s[4] * 0xb0e65813u + s[3]; + s[14] += s[4]; + s[4] -= s[14]; + s[1] += (s[4] | s[6]); + s[15] ^= s[1]; + s[3] = (s[3] ^ s[15]) * 0x74f161a1u; + s[10] += s[3] + 0xa6f7f269u; + s[0] += (s[10] | s[13]); + s[2] = mh_rotl(s[2], 21u) + s[0]; + s[9] ^= (s[2] & s[12]); + s[11] ^= s[9]; + s[9] += s[11]; + s[8] *= (s[9] | 1u); + s[5] += (s[8] | s[1]); + s[7] += s[5]; + s[11] += s[7] + 0xe1fb4104u; + s[14] ^= (s[11] & s[6]); + s[15] ^= s[14]; + s[11] ^= (s[15] & s[6]); + s[7] += s[11]; + s[9] = mh_rotl(s[9], 12u) + s[7]; + s[0] *= (s[9] | 1u); + s[4] += s[0]; + s[0] = (s[0] ^ s[4]) * 0x3458b4b9u; + s[15] *= (s[0] | 1u); + s[12] = mh_rotl(s[12], 5u) + s[15]; + s[11] -= s[12]; + s[7] = s[7] * 0xdf6299e7u + s[11]; + s[15] = mh_rotl(s[15], 17u) + s[7]; + s[8] = mh_rotl(s[8] ^ s[15], 25u); + s[1] += (s[8] | s[7]); + s[7] = s[7] * 0xcde4ccd9u + s[1]; + s[4] ^= (s[7] & s[3]); + s[11] ^= s[4]; + s[15] += s[11] + 0x93b32499u; + s[8] = s[8] * 0x2c187aebu + s[15]; + s[12] += s[8]; + s[15] += s[12] + 0x8975fca8u; + s[8] ^= s[15] ^ 0xa690273au; + s[7] += s[8]; + s[2] *= (s[7] | 1u); + s[15] += s[2]; + s[12] ^= (s[15] & s[0]); + s[13] *= (s[12] | 1u); + s[9] ^= (s[13] & s[15]); + s[7] = mh_rotl(s[7] ^ s[9], 19u); + s[9] += s[7] + 0x68201cc4u; + s[11] ^= s[9] ^ 0x8ce52309u; + s[8] ^= s[11]; + s[2] = s[2] * 0xcd1aa62fu + s[8]; + s[4] ^= s[2]; + s[11] = mh_rotl(s[11], 14u) + s[4]; + s[12] = (s[12] ^ s[11]) * 0x5225e677u; + s[7] ^= s[12] ^ 0x249730c1u; + s[8] += s[7] + 0x648c79c7u; + s[9] = mh_rotl(s[9], 23u) + s[8]; + s[6] ^= s[9] ^ 0x63921b24u; + s[8] = (s[8] ^ s[6]) * 0xbaff00d3u; + s[2] ^= s[8]; + s[4] *= (s[2] | 1u); + s[8] = (s[8] ^ s[4]) * 0xcaf43cebu; + s[6] += s[8]; + s[8] = (s[8] ^ s[6]) * 0x4fa73429u; + s[0] = (s[0] ^ s[8]) * 0xd09399a5u; + s[8] += s[0]; + s[14] = (s[14] ^ s[8]) * 0xffb37081u; + s[13] ^= s[14]; + s[4] += s[13]; + s[8] ^= s[4]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] = (s[14] ^ s[7]) * 0x412aee4du; + s[10] -= s[14]; + s[1] ^= s[10]; + s[4] ^= s[1] ^ 0x8d36a1b0u; + s[14] = (s[14] ^ s[4]) * 0xb17290dfu; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[2] += s[15]; + s[11] = mh_rotl(s[11], 10u) + s[2]; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0x2be56ccfu; + s[2] = s[2] * 0x5290c25du + s[12]; + s[1] += s[2]; + s[2] += (s[1] | s[8]); + s[6] -= s[2]; + s[10] += s[6]; + s[13] += s[10] + 0x6bcc329cu; + s[2] *= (s[13] | 1u); + s[1] = (s[1] ^ s[2]) * 0xd95e0a65u; + s[12] = (s[12] ^ s[1]) * 0x5598f745u; + s[9] += s[12]; + s[15] = mh_rotl(s[15] ^ s[9], 19u); + s[13] += s[15]; + s[6] += s[13] + 0xe9004eeau; + s[15] ^= s[6]; + s[4] -= s[15]; + s[3] += s[4]; + s[8] ^= s[3] ^ 0x118412a8u; + s[2] = s[2] * 0x7ace7595u + s[8]; + s[3] *= (s[2] | 1u); + s[7] = (s[7] ^ s[3]) * 0xefdf99afu; + s[1] ^= s[7]; + s[11] *= (s[1] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 9u); + s[0] += s[13]; + s[7] *= (s[0] | 1u); + s[1] ^= s[7]; + s[10] ^= (s[1] & s[6]); + s[1] ^= s[10] ^ 0x93602932u; + s[2] -= s[1]; + s[12] ^= s[2]; + s[3] = mh_rotl(s[3], 1u) + s[12]; + s[7] ^= s[3]; + s[14] ^= s[7] ^ 0x237f8e1au; + s[0] = mh_rotl(s[0] ^ s[14], 2u); + s[1] *= (s[0] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 2u); + s[9] = mh_rotl(s[9] ^ s[4], 16u); + s[7] = s[7] * 0xf073bd6du + s[9]; + s[10] = s[10] * 0x3a609689u + s[7]; + s[12] ^= s[10]; + s[3] ^= s[12] ^ 0x9db3a4beu; + s[14] = mh_rotl(s[14], 1u) + s[3]; + s[6] += (s[14] | s[5]); + s[1] += s[6] + 0x1aae9d69u; + s[5] = mh_rotl(s[5] ^ s[1], 29u); + s[14] ^= s[5]; + s[8] += s[14]; + s[2] ^= (s[8] & s[0]); + s[11] = (s[11] ^ s[2]) * 0xf0879cf7u; + s[1] = mh_rotl(s[1] ^ s[11], 2u); + s[6] ^= s[1]; + s[15] -= s[6]; + s[7] -= s[15]; + s[3] += s[7]; + s[2] -= s[3]; + s[10] -= s[2]; + s[11] = mh_rotl(s[11], 3u) + s[10]; + s[3] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= (s[5] & s[14]); + s[3] ^= s[0]; + s[0] = s[0] * 0xd6807e45u + s[3]; + s[10] += s[0]; + s[4] *= (s[10] | 1u); + s[2] ^= (s[4] & s[5]); + s[9] = mh_rotl(s[9], 3u) + s[2]; + s[15] = s[15] * 0x946b5521u + s[9]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] ^= s[13]; + s[4] += (s[5] | s[15]); + s[2] += s[4]; + s[12] += s[2]; + s[3] *= (s[12] | 1u); + s[6] += s[3]; + s[12] = s[12] * 0xb6b83b35u + s[6]; + s[6] -= s[12]; + s[1] ^= s[6]; + s[4] = s[4] * 0x6b8de9c3u + s[1]; + s[15] += s[4]; + s[6] -= s[15]; + s[5] ^= (s[6] & s[7]); + s[14] += s[5]; + s[7] = (s[7] ^ s[14]) * 0x5fe38793u; + s[1] += s[7]; + s[15] = (s[15] ^ s[1]) * 0x0c3d59fbu; + s[2] ^= s[15] ^ 0xa6e76c52u; + s[8] ^= s[2]; + s[15] += s[8]; + s[2] = mh_rotl(s[2], 18u) + s[15]; + s[7] ^= s[2]; + s[9] += (s[7] | s[5]); + s[0] ^= (s[9] & s[6]); + s[14] *= (s[0] | 1u); + s[7] += (s[14] | s[1]); + s[8] ^= s[7]; + s[1] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 21u); + s[1] = (s[1] ^ s[4]) * 0xaa342e53u; + s[11] -= s[1]; + s[13] ^= s[11] ^ 0xcbbd4eceu; + s[5] -= s[13]; + s[11] += s[5]; + s[14] ^= s[11] ^ 0xb5db59d3u; + s[5] ^= s[14]; + s[10] = mh_rotl(s[10] ^ s[5], 23u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[6] *= (s[8] | 1u); + s[3] ^= s[6]; + s[7] += s[3] + 0x00658f95u; + s[0] ^= s[7] ^ 0x2e56fa3eu; + s[2] ^= s[0] ^ 0xec5293e3u; + s[7] = mh_rotl(s[7] ^ s[2], 21u); + s[14] *= (s[7] | 1u); + s[11] *= (s[14] | 1u); + s[0] *= (s[11] | 1u); + s[4] = (s[4] ^ s[0]) * 0x2fb41f81u; + s[2] += s[4]; + s[0] += s[2]; + s[6] += s[0]; + s[8] = mh_rotl(s[8], 10u) + s[6]; + s[2] += s[8]; + s[5] ^= s[2] ^ 0xa8ea4a52u; + s[10] ^= (s[5] & s[1]); + s[0] += s[10] + 0xadbdf4b0u; + s[8] ^= s[0]; + s[5] ^= s[8]; + s[10] = s[10] * 0x4142cee3u + s[5]; + s[12] += s[10] + 0xf3bf2694u; + s[10] *= (s[12] | 1u); + s[9] += s[10] + 0x087246d1u; + s[4] = mh_rotl(s[4], 24u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[4], 12u); + s[3] += s[0] + 0xac907341u; + s[12] = mh_rotl(s[12] ^ s[3], 8u); + s[14] -= s[12]; + s[15] -= s[14]; + s[5] += s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 20u); + s[7] = s[7] * 0xcb052cc1u + s[9]; + s[4] += s[7]; + s[0] = mh_rotl(s[0], 21u) + s[4]; + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] += s[6]; + s[15] -= s[2]; + s[9] = mh_rotl(s[9] ^ s[15], 22u); + s[8] ^= s[9]; + s[6] += s[8] + 0xae67ff98u; + s[0] -= s[6]; + s[2] *= (s[0] | 1u); + s[12] += s[2]; + s[15] ^= s[12]; + s[0] += s[15]; + s[6] ^= s[0]; + s[3] = mh_rotl(s[3] ^ s[6], 5u); + s[1] += s[3]; + s[6] ^= s[1]; + s[12] += (s[6] | s[8]); + s[3] ^= s[12]; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[8] ^= s[2]; + s[1] += s[8]; + s[6] += (s[1] | s[15]); + s[1] += s[6] + 0x2aa7ff78u; + s[11] += s[1]; + s[14] -= s[11]; + s[3] -= s[14]; + s[9] -= s[3]; + s[6] += s[9]; + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[8] += s[12]; + s[0] = mh_rotl(s[0] ^ s[8], 22u); + s[4] ^= s[0]; + s[8] = s[8] * 0x1e56eb41u + s[4]; + s[11] += s[8]; + s[6] += s[11]; + s[13] *= (s[6] | 1u); + s[2] *= (s[13] | 1u); + s[0] += s[2] + 0x43af110cu; + s[5] = s[5] * 0xa3d7a065u + s[0]; + s[14] *= (s[5] | 1u); + s[4] += s[14]; + s[11] *= (s[4] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[11]; + s[1] += (s[5] | s[9]); + s[5] += s[1]; + s[1] ^= s[5]; + s[9] += s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[10] += s[7]; + s[13] += s[10]; + s[8] = (s[8] ^ s[13]) * 0xfc8aade7u; + s[12] ^= s[8] ^ 0x47e9555au; + s[3] -= s[12]; + s[6] ^= s[3]; + s[11] ^= s[6]; + s[9] -= s[11]; + s[3] = mh_rotl(s[3], 29u) + s[9]; + s[8] += (s[3] | s[11]); + s[12] = mh_rotl(s[12], 13u) + s[8]; + s[4] = mh_rotl(s[4], 8u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0xe569b7fdu; + s[14] ^= (s[7] & s[11]); + s[8] -= s[14]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 3u) + s[14]; + s[3] += s[7]; + s[10] *= (s[3] | 1u); + s[8] = (s[8] ^ s[10]) * 0xc72f74bdu; + s[13] ^= s[8]; + s[4] = mh_rotl(s[4], 8u) + s[13]; + s[10] ^= s[4]; + s[11] = mh_rotl(s[11] ^ s[10], 10u); + s[2] ^= s[11] ^ 0x89747ffeu; + s[7] ^= s[2]; + s[5] -= s[7]; + s[13] -= s[5]; + s[0] = (s[0] ^ s[13]) * 0xf48e8c1du; + s[14] = mh_rotl(s[14] ^ s[0], 15u); + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[13] += s[7]; + s[0] = s[0] * 0x44c6b0f1u + s[13]; + s[3] ^= s[0]; + s[15] += s[3] + 0xb264b481u; + s[12] ^= s[15]; + s[7] += (s[12] | s[13]); + s[0] += s[7]; + s[9] -= s[0]; + s[13] = s[13] * 0x720cd467u + s[9]; + s[11] ^= s[13] ^ 0xa96dd9a0u; + s[5] -= s[11]; + s[15] += (s[5] | s[11]); + s[6] += s[15]; + s[7] += s[6]; + s[8] = s[8] * 0xbeaaa467u + s[7]; + s[7] ^= s[8]; + s[11] = (s[11] ^ s[7]) * 0x30405013u; + s[1] ^= s[11]; + s[0] ^= s[1] ^ 0xe46c8953u; + s[4] = (s[4] ^ s[0]) * 0x3beff773u; + s[3] = mh_rotl(s[3], 20u) + s[4]; + s[4] ^= s[3]; + s[11] = mh_rotl(s[11], 30u) + s[4]; + s[7] += (s[11] | s[3]); + s[11] ^= s[7]; + s[13] ^= s[11]; + s[1] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 17u) + s[1]; + s[15] ^= s[0] ^ 0xbb0e1b77u; + s[9] = mh_rotl(s[9] ^ s[15], 30u); + s[0] *= (s[9] | 1u); + s[3] += s[0]; + s[0] = (s[0] ^ s[3]) * 0x28a1e7fbu; + s[11] += s[0] + 0x3f20929bu; + s[14] += s[11] + 0x9721b746u; + s[3] = (s[3] ^ s[14]) * 0xc929f765u; + s[14] *= (s[3] | 1u); + s[10] -= s[14]; + s[3] = (s[3] ^ s[10]) * 0x83ea7953u; + s[14] ^= s[3]; + s[4] += s[14]; + s[11] ^= s[4] ^ 0x9f1876eeu; + s[5] += s[11]; + s[6] = (s[6] ^ s[5]) * 0x3e059b67u; + s[0] *= (s[6] | 1u); + s[9] ^= s[0]; + s[3] *= (s[9] | 1u); + s[4] += s[3]; + s[6] += s[4]; + s[14] = (s[14] ^ s[6]) * 0xe8ebef0fu; + s[12] = mh_rotl(s[12], 31u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[0] = mh_rotl(s[0], 25u) + s[3]; + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0xdd9f45b0u; + s[1] *= (s[0] | 1u); + s[7] = (s[7] ^ s[1]) * 0xd7937423u; + s[9] += s[7]; + s[14] ^= s[9]; + s[9] += (s[14] | s[4]); + s[14] ^= s[9]; + s[12] *= (s[14] | 1u); + s[11] = (s[11] ^ s[12]) * 0x6f00822du; + s[15] += s[11] + 0x90a645c9u; + s[11] = s[11] * 0xd4e49bc3u + s[15]; + s[9] += s[11]; + s[2] = (s[2] ^ s[9]) * 0xcd756085u; + s[5] -= s[2]; + s[1] ^= s[5]; + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[13] ^= s[7] ^ 0x259d1187u; + s[9] *= (s[13] | 1u); + s[7] ^= s[9]; + s[9] -= s[7]; + s[4] ^= s[9]; + s[14] *= (s[4] | 1u); + s[8] ^= s[14]; + s[15] = s[15] * 0x975ddaebu + s[8]; + s[9] += (s[15] | s[13]); + s[6] ^= s[9] ^ 0x318e194eu; + s[2] = (s[2] ^ s[6]) * 0xb0a2842fu; + s[5] = (s[5] ^ s[2]) * 0xa9a8585du; + s[7] = (s[7] ^ s[5]) * 0x3e818aa9u; + s[3] += s[7] + 0x60f54e95u; + s[7] += s[3] + 0xb6fd49a0u; + s[5] += s[7]; + s[12] = mh_rotl(s[12] ^ s[5], 1u); + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 2u) + s[3]; + s[2] ^= s[7]; + s[7] ^= s[2] ^ 0xa06175a5u; + s[15] -= s[7]; + s[2] += s[15] + 0x32c7f73fu; + s[10] -= s[2]; + s[6] -= s[10]; + s[11] += s[6] + 0x847befcdu; + s[8] *= (s[11] | 1u); + s[10] ^= s[8] ^ 0x80bc6c43u; + s[4] = (s[4] ^ s[10]) * 0xeec1e72fu; + s[14] = mh_rotl(s[14], 15u) + s[4]; + s[2] *= (s[14] | 1u); + s[7] += s[2] + 0x4f95cda0u; + s[12] *= (s[7] | 1u); + s[15] = s[15] * 0xc0c37a91u + s[12]; + s[12] *= (s[15] | 1u); + s[1] += s[12] + 0x574e25f1u; + s[9] += s[1]; + s[12] ^= s[9] ^ 0xbee6ae4cu; + s[2] = mh_rotl(s[2], 2u) + s[12]; + s[7] ^= s[2] ^ 0x2d8d95fcu; + s[1] = mh_rotl(s[1], 12u) + s[7]; + s[12] = s[12] * 0x459875c5u + s[1]; + s[7] += s[12]; + s[2] = mh_rotl(s[2] ^ s[7], 13u); + s[4] += s[2]; + s[14] ^= (s[4] & s[11]); + s[8] ^= s[14] ^ 0xd2d101c3u; + s[7] += s[8] + 0xf7c60fa6u; + s[0] = mh_rotl(s[0] ^ s[7], 20u); + s[9] ^= s[0]; + s[5] += s[9]; + s[1] ^= s[5] ^ 0x09ae80bdu; + s[9] ^= (s[1] & s[8]); + s[6] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[6]; + s[10] += s[1]; + s[14] += s[10]; + s[12] ^= s[14]; + s[10] -= s[12]; + s[6] += s[10]; + s[7] += s[6]; + s[5] += (s[7] | s[15]); + s[14] -= s[5]; + s[13] += (s[14] | s[12]); + s[2] ^= s[13]; + s[10] = mh_rotl(s[10] ^ s[2], 25u); + s[0] = mh_rotl(s[0] ^ s[10], 9u); + s[14] = (s[14] ^ s[0]) * 0xf271e2f9u; + s[0] = mh_rotl(s[0], 30u) + s[14]; + s[7] = (s[7] ^ s[0]) * 0xbcb788a1u; + s[11] = s[11] * 0xc98f1127u + s[7]; + s[15] ^= s[11]; + s[11] = (s[11] ^ s[15]) * 0x224f625fu; + s[14] = mh_rotl(s[14] ^ s[11], 13u); + s[11] += s[14]; + s[2] = mh_rotl(s[2] ^ s[11], 22u); + s[9] ^= s[2] ^ 0x82adb28eu; + s[8] += s[9]; + s[6] += s[8]; + s[15] += s[6]; + s[14] = s[14] * 0xfca2b387u + s[15]; + s[12] += s[14]; + s[6] += (s[12] | s[8]); + s[5] *= (s[6] | 1u); + s[1] ^= s[5]; + s[3] += s[1] + 0x1f147bc4u; + s[10] = mh_rotl(s[10], 24u) + s[3]; + s[6] += s[10] + 0x7186bc62u; + s[11] = mh_rotl(s[11], 2u) + s[6]; + s[10] ^= (s[11] & s[6]); + s[2] += (s[10] | s[15]); + s[9] = mh_rotl(s[9] ^ s[2], 16u); + s[6] ^= s[9]; + s[13] ^= (s[6] & s[2]); + s[4] -= s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 7u); + s[6] += s[10] + 0x76798031u; + s[2] ^= s[6] ^ 0x81f2cae5u; + s[15] -= s[2]; + s[7] = mh_rotl(s[7] ^ s[15], 11u); + s[0] -= s[7]; + s[15] ^= s[0] ^ 0x84b0f58cu; + s[4] ^= s[15]; + s[11] += s[4] + 0x37470ecau; + s[7] = mh_rotl(s[7] ^ s[11], 25u); + s[0] ^= s[7]; + s[7] ^= s[0]; + s[15] = (s[15] ^ s[7]) * 0x8bed0165u; + s[13] = (s[13] ^ s[15]) * 0xf0b2282fu; + s[10] ^= s[13]; + s[15] *= (s[10] | 1u); +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_3(uint* s) { + s[9] -= s[0]; + s[12] *= (s[9] | 1u); + s[13] -= s[12]; + s[2] = (s[2] ^ s[13]) * 0xcaec7bb5u; + s[8] = (s[8] ^ s[2]) * 0xbfa2f813u; + s[9] = (s[9] ^ s[8]) * 0xd8816ab5u; + s[11] ^= s[9]; + s[4] = (s[4] ^ s[11]) * 0xb5a60ae1u; + s[2] += s[4]; + s[14] += s[2] + 0x3b8ef46bu; + s[5] -= s[14]; + s[12] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 5u); + s[8] = (s[8] ^ s[4]) * 0x064e4143u; + s[5] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 30u) + s[5]; + s[13] += s[10]; + s[14] += s[13] + 0xb57a206du; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[4] = mh_rotl(s[4], 8u) + s[7]; + s[2] = mh_rotl(s[2], 26u) + s[4]; + s[6] = mh_rotl(s[6], 23u) + s[2]; + s[0] = mh_rotl(s[0] ^ s[6], 10u); + s[4] = mh_rotl(s[4] ^ s[0], 16u); + s[8] = (s[8] ^ s[4]) * 0xc9a07b1du; + s[6] = (s[6] ^ s[8]) * 0xf7907103u; + s[1] = mh_rotl(s[1] ^ s[6], 2u); + s[8] = (s[8] ^ s[1]) * 0x63cfdc25u; + s[13] += (s[8] | s[3]); + s[11] -= s[13]; + s[10] += s[11] + 0xbe40fad3u; + s[14] *= (s[10] | 1u); + s[8] += s[14]; + s[14] += s[8] + 0xe91df793u; + s[5] -= s[14]; + s[2] = mh_rotl(s[2], 17u) + s[5]; + s[7] ^= s[2]; + s[9] += s[7] + 0x80c9212au; + s[1] = (s[1] ^ s[9]) * 0xa7d74fefu; + s[0] ^= s[1] ^ 0x08f82691u; + s[3] ^= (s[0] & s[12]); + s[5] = mh_rotl(s[5] ^ s[3], 10u); + s[11] *= (s[5] | 1u); + s[12] -= s[11]; + s[0] += s[12]; + s[7] = mh_rotl(s[7], 10u) + s[0]; + s[2] = mh_rotl(s[2], 25u) + s[7]; + s[15] += s[2] + 0xe54d98a2u; + s[3] ^= s[15]; + s[2] += (s[3] | s[12]); + s[11] -= s[2]; + s[14] ^= (s[11] & s[3]); + s[3] += s[14]; + s[13] += s[3]; + s[9] *= (s[13] | 1u); + s[8] ^= s[9]; + s[4] += s[8]; + s[1] += s[4]; + s[14] *= (s[1] | 1u); + s[10] = (s[10] ^ s[14]) * 0x80d81c29u; + s[14] = mh_rotl(s[14], 28u) + s[10]; + s[15] *= (s[14] | 1u); + s[9] ^= s[15] ^ 0xb96f0f72u; + s[0] += s[9] + 0x58af0b09u; + s[7] += (s[0] | s[8]); + s[4] = (s[4] ^ s[7]) * 0x3cb02481u; + s[6] += s[4] + 0x7c9ebf59u; + s[4] = mh_rotl(s[4], 31u) + s[6]; + s[11] += s[4]; + s[9] += s[11]; + s[0] ^= s[9]; + s[6] ^= s[0] ^ 0x87a4c25eu; + s[10] += s[6] + 0x63a850d3u; + s[3] *= (s[10] | 1u); + s[15] += s[3]; + s[2] *= (s[15] | 1u); + s[0] ^= s[2]; + s[10] ^= (s[0] & s[12]); + s[0] = mh_rotl(s[0] ^ s[10], 13u); + s[10] ^= s[0]; + s[1] = s[1] * 0x68b25a3du + s[10]; + s[14] ^= (s[1] & s[4]); + s[15] *= (s[14] | 1u); + s[0] = mh_rotl(s[0] ^ s[15], 21u); + s[1] ^= (s[0] & s[14]); + s[13] *= (s[1] | 1u); + s[15] *= (s[13] | 1u); + s[7] *= (s[15] | 1u); + s[3] ^= s[7] ^ 0x1eb335a8u; + s[15] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 23u) + s[15]; + s[5] ^= s[7]; + s[8] += s[5] + 0x50a316f9u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 19u) + s[5]; + s[8] = mh_rotl(s[8], 28u) + s[3]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[2] += (s[14] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 16u); + s[11] += s[13]; + s[4] ^= s[11]; + s[15] += s[4]; + s[2] += s[15]; + s[13] = mh_rotl(s[13] ^ s[2], 7u); + s[1] += s[13]; + s[0] *= (s[1] | 1u); + s[6] -= s[0]; + s[13] += s[6]; + s[2] = mh_rotl(s[2], 24u) + s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 17u); + s[10] += s[4] + 0xd112ffcfu; + s[15] ^= s[10] ^ 0x9030e81eu; + s[4] ^= s[15]; + s[9] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[9], 7u); + s[2] = mh_rotl(s[2], 24u) + s[10]; + s[14] = (s[14] ^ s[2]) * 0x93c10f1du; + s[10] *= (s[14] | 1u); + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[4] *= (s[10] | 1u); + s[10] += s[4]; + s[6] += (s[10] | s[15]); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[13] = mh_rotl(s[13] ^ s[5], 9u); + s[4] ^= s[13]; + s[10] ^= s[4]; + s[2] -= s[10]; + s[13] += (s[2] | s[9]); + s[8] -= s[13]; + s[4] -= s[8]; + s[3] ^= s[4] ^ 0x9fcb6ee8u; + s[4] ^= s[3] ^ 0xb9fbeaf9u; + s[12] = mh_rotl(s[12], 8u) + s[4]; + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 31u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 9u); + s[0] *= (s[4] | 1u); + s[6] ^= s[0]; + s[4] = mh_rotl(s[4], 13u) + s[6]; + s[13] -= s[4]; + s[7] ^= s[13]; + s[12] = mh_rotl(s[12], 10u) + s[7]; + s[14] = mh_rotl(s[14], 27u) + s[12]; + s[7] ^= s[14]; + s[0] += (s[7] | s[2]); + s[12] ^= s[0]; + s[5] = (s[5] ^ s[12]) * 0x392525a1u; + s[8] += s[5] + 0x4138a8f1u; + s[5] += s[8]; + s[11] += s[5]; + s[7] ^= s[11]; + s[14] ^= s[7]; + s[0] += s[14]; + s[12] ^= s[0]; + s[2] *= (s[12] | 1u); + s[6] -= s[2]; + s[4] += s[6] + 0xdcaac0adu; + s[10] ^= s[4]; + s[5] += s[10]; + s[10] += s[5] + 0x0cfa5affu; + s[15] ^= s[10] ^ 0x68194eefu; + s[8] *= (s[15] | 1u); + s[9] += s[8] + 0x15042ceau; + s[0] += (s[9] | s[6]); + s[14] *= (s[0] | 1u); + s[13] = s[13] * 0x5a114c5fu + s[14]; + s[1] += s[13]; + s[3] += s[1]; + s[4] ^= s[3] ^ 0x9b2578dcu; + s[3] = (s[3] ^ s[4]) * 0xf0215559u; + s[9] = mh_rotl(s[9] ^ s[3], 30u); + s[3] *= (s[9] | 1u); + s[10] *= (s[3] | 1u); + s[5] = (s[5] ^ s[10]) * 0xd48cc381u; + s[3] ^= s[5]; + s[5] -= s[3]; + s[0] = (s[0] ^ s[5]) * 0x5dc8d8cfu; + s[2] += (s[0] | s[1]); + s[4] = mh_rotl(s[4] ^ s[2], 26u); + s[11] *= (s[4] | 1u); + s[2] *= (s[11] | 1u); + s[10] -= s[2]; + s[14] = s[14] * 0x8334873fu + s[10]; + s[7] += s[14]; + s[15] += s[7] + 0xa09fcd48u; + s[10] ^= s[15]; + s[15] += s[10]; + s[12] = mh_rotl(s[12], 20u) + s[15]; + s[3] = (s[3] ^ s[12]) * 0xb7d989dfu; + s[4] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 4u); + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[8] = mh_rotl(s[8] ^ s[7], 13u); + s[1] = (s[1] ^ s[8]) * 0xfd9c4977u; + s[2] ^= s[1]; + s[13] = mh_rotl(s[13], 25u) + s[2]; + s[11] += s[13]; + s[2] = s[2] * 0x9e62997du + s[11]; + s[1] ^= s[2] ^ 0x5bed272fu; + s[7] = mh_rotl(s[7] ^ s[1], 14u); + s[12] += s[7]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[9] *= (s[1] | 1u); + s[13] ^= (s[9] & s[15]); + s[1] += (s[13] | s[14]); + s[6] -= s[1]; + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[10] -= s[1]; + s[4] = s[4] * 0x1026f5f7u + s[10]; + s[7] = (s[7] ^ s[4]) * 0x91c6caf3u; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[11] += s[4] + 0x39f61640u; + s[10] -= s[11]; + s[15] ^= s[10]; + s[13] += s[15] + 0xa8a05a01u; + s[3] = mh_rotl(s[3], 27u) + s[13]; + s[4] -= s[3]; + s[13] = mh_rotl(s[13], 8u) + s[4]; + s[8] ^= s[13]; + s[3] += s[8] + 0x4dc574e2u; + s[15] += (s[3] | s[5]); + s[9] = s[9] * 0x7c710593u + s[15]; + s[2] += s[9] + 0xe91d6df9u; + s[9] ^= s[2] ^ 0xba09d0c1u; + s[7] = mh_rotl(s[7] ^ s[9], 5u); + s[2] += s[7] + 0xf1cb3677u; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[5] = mh_rotl(s[5], 10u) + s[0]; + s[9] += s[5]; + s[12] ^= (s[9] & s[3]); + s[5] = (s[5] ^ s[12]) * 0x8e5ae08du; + s[11] -= s[5]; + s[12] ^= s[11]; + s[0] ^= s[12] ^ 0x038449c7u; + s[6] += s[0] + 0x2b0bf2e9u; + s[9] += s[6]; + s[1] += s[9]; + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[9] *= (s[3] | 1u); + s[13] = s[13] * 0xabfb518du + s[9]; + s[11] += (s[13] | s[14]); + s[6] ^= s[11]; + s[3] += s[6] + 0xbf050303u; + s[9] += s[3]; + s[8] *= (s[9] | 1u); + s[11] += s[8]; + s[7] = mh_rotl(s[7] ^ s[11], 12u); + s[1] = mh_rotl(s[1], 18u) + s[7]; + s[12] *= (s[1] | 1u); + s[5] -= s[12]; + s[11] *= (s[5] | 1u); + s[0] = s[0] * 0x1258c98fu + s[11]; + s[2] -= s[0]; + s[13] = mh_rotl(s[13], 5u) + s[2]; + s[15] = (s[15] ^ s[13]) * 0xa9ea982fu; + s[0] ^= (s[15] & s[5]); + s[14] = (s[14] ^ s[0]) * 0x8e658f2du; + s[7] = mh_rotl(s[7], 28u) + s[14]; + s[4] = (s[4] ^ s[7]) * 0xdffb5283u; + s[9] = mh_rotl(s[9], 18u) + s[4]; + s[5] = mh_rotl(s[5], 30u) + s[9]; + s[11] += s[5] + 0x67a75c51u; + s[3] = mh_rotl(s[3], 13u) + s[11]; + s[9] += s[3]; + s[1] ^= s[9] ^ 0xc25226c4u; + s[7] *= (s[1] | 1u); + s[12] ^= s[7]; + s[3] = mh_rotl(s[3] ^ s[12], 8u); + s[0] = mh_rotl(s[0], 13u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[0], 9u); + s[14] ^= s[9]; + s[0] -= s[14]; + s[12] = mh_rotl(s[12], 4u) + s[0]; + s[6] += s[12] + 0x8a7a83b1u; + s[12] += s[6] + 0xce44f768u; + s[13] ^= s[12] ^ 0xa265fddcu; + s[3] = mh_rotl(s[3] ^ s[13], 28u); + s[2] += s[3]; + s[4] = (s[4] ^ s[2]) * 0xfaf1f025u; + s[5] *= (s[4] | 1u); + s[13] = (s[13] ^ s[5]) * 0x1bde9b5du; + s[2] += (s[13] | s[0]); + s[12] ^= s[2]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] = mh_rotl(s[11], 20u) + s[2]; + s[1] *= (s[11] | 1u); + s[5] = mh_rotl(s[5], 17u) + s[1]; + s[0] = mh_rotl(s[0], 7u) + s[5]; + s[11] ^= s[0]; + s[5] -= s[11]; + s[8] *= (s[5] | 1u); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xc1818321u; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 12u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[1], 20u); + s[11] *= (s[15] | 1u); + s[13] *= (s[11] | 1u); + s[8] ^= s[13]; + s[5] = (s[5] ^ s[8]) * 0xcb34052bu; + s[12] = mh_rotl(s[12] ^ s[5], 24u); + s[5] = mh_rotl(s[5] ^ s[12], 12u); + s[9] = mh_rotl(s[9], 4u) + s[5]; + s[12] = s[12] * 0x44487769u + s[9]; + s[3] += s[12]; + s[7] = s[7] * 0x3d0dc719u + s[3]; + s[12] = mh_rotl(s[12], 25u) + s[7]; + s[14] = (s[14] ^ s[12]) * 0x0a26f463u; + s[5] ^= s[14] ^ 0x7e263a26u; + s[11] = mh_rotl(s[11], 29u) + s[5]; + s[14] -= s[11]; + s[12] = (s[12] ^ s[14]) * 0x05fc47afu; + s[11] ^= s[12]; + s[7] += s[11]; + s[8] -= s[7]; + s[4] ^= s[8]; + s[7] ^= s[4]; + s[11] ^= s[7]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[7] += (s[12] | s[9]); + s[12] ^= s[7]; + s[1] += s[12] + 0x47217177u; + s[12] = (s[12] ^ s[1]) * 0x60a7a2a1u; + s[11] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[11] ^= s[13]; + s[6] ^= s[11]; + s[0] *= (s[6] | 1u); + s[15] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[15], 4u); + s[9] = mh_rotl(s[9] ^ s[11], 20u); + s[0] = (s[0] ^ s[9]) * 0xe7aae81fu; + s[6] *= (s[0] | 1u); + s[15] += s[6]; + s[3] += s[15] + 0x6bbe960au; + s[12] -= s[3]; + s[8] *= (s[12] | 1u); + s[11] = s[11] * 0xcc54856fu + s[8]; + s[3] = (s[3] ^ s[11]) * 0x65049d67u; + s[1] -= s[3]; + s[3] *= (s[1] | 1u); + s[0] *= (s[3] | 1u); + s[12] *= (s[0] | 1u); + s[2] *= (s[12] | 1u); + s[12] -= s[2]; + s[6] ^= s[12]; + s[13] = s[13] * 0xfd8e78e7u + s[6]; + s[4] ^= s[13] ^ 0x36001de6u; + s[3] += s[4]; + s[6] -= s[3]; + s[4] *= (s[6] | 1u); + s[10] *= (s[4] | 1u); + s[7] ^= s[10]; + s[13] ^= s[7] ^ 0x3cc162e5u; + s[2] = (s[2] ^ s[13]) * 0xc6b38d29u; + s[8] ^= s[2] ^ 0x43ac5ec1u; + s[0] += (s[8] | s[14]); + s[3] += s[0] + 0xc94402c6u; + s[8] = (s[8] ^ s[3]) * 0x40a11c6du; + s[1] = mh_rotl(s[1] ^ s[8], 9u); + s[2] = (s[2] ^ s[1]) * 0x10ebfae9u; + s[8] += s[2] + 0x2e5cffd4u; + s[0] = mh_rotl(s[0], 4u) + s[8]; + s[2] *= (s[0] | 1u); + s[9] ^= s[2] ^ 0xea63f112u; + s[4] = mh_rotl(s[4] ^ s[9], 20u); + s[12] += (s[4] | s[0]); + s[6] = mh_rotl(s[6], 28u) + s[12]; + s[11] ^= s[6]; + s[2] = (s[2] ^ s[11]) * 0xb92e6187u; + s[6] += s[2]; + s[10] += (s[6] | s[2]); + s[8] ^= s[10]; + s[11] ^= s[8]; + s[12] = mh_rotl(s[12], 12u) + s[11]; + s[8] = s[8] * 0xcf6e39cbu + s[12]; + s[7] += s[8] + 0x07e25ae6u; + s[1] = (s[1] ^ s[7]) * 0x6550efddu; + s[15] += s[1] + 0xcd15560fu; + s[13] ^= s[15]; + s[4] = mh_rotl(s[4], 16u) + s[13]; + s[12] = (s[12] ^ s[4]) * 0x7129239fu; + s[9] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[9], 25u); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[2] ^= s[7]; + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[1] -= s[5]; + s[8] = s[8] * 0x1c6b90b7u + s[1]; + s[14] += s[8]; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[5] = s[5] * 0x1b17414fu + s[15]; + s[11] ^= s[5] ^ 0xd6b8f316u; + s[9] = mh_rotl(s[9], 25u) + s[11]; + s[0] = (s[0] ^ s[9]) * 0x36fce4cdu; + s[11] = (s[11] ^ s[0]) * 0x3ffedbedu; + s[6] = mh_rotl(s[6] ^ s[11], 28u); + s[0] = mh_rotl(s[0], 26u) + s[6]; + s[1] ^= s[0]; + s[7] = (s[7] ^ s[1]) * 0x4dfcedebu; + s[15] = mh_rotl(s[15], 26u) + s[7]; + s[14] = (s[14] ^ s[15]) * 0x6c9326edu; + s[4] = mh_rotl(s[4] ^ s[14], 23u); + s[9] += s[4]; + s[10] += s[9]; + s[1] += s[10]; + s[4] = mh_rotl(s[4] ^ s[1], 19u); + s[9] += s[4]; + s[13] += s[9]; + s[15] = mh_rotl(s[15], 6u) + s[13]; + s[6] = mh_rotl(s[6], 13u) + s[15]; + s[1] *= (s[6] | 1u); + s[11] = s[11] * 0x0aa13acfu + s[1]; + s[7] = (s[7] ^ s[11]) * 0xf0f30943u; + s[11] = mh_rotl(s[11], 5u) + s[7]; + s[12] ^= s[11]; + s[6] ^= s[12]; + s[3] ^= s[6]; + s[14] = mh_rotl(s[14], 11u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 8u); + s[13] *= (s[12] | 1u); + s[15] -= s[13]; + s[9] = s[9] * 0x111b0ab9u + s[15]; + s[0] = mh_rotl(s[0] ^ s[9], 2u); + s[13] ^= s[0] ^ 0x208f1223u; + s[1] = (s[1] ^ s[13]) * 0x8697b4f3u; + s[4] = s[4] * 0xf7e4eb9bu + s[1]; + s[12] = mh_rotl(s[12] ^ s[4], 20u); + s[6] = mh_rotl(s[6] ^ s[12], 16u); + s[7] += s[6] + 0xb04cedccu; + s[9] ^= (s[7] & s[12]); + s[15] = mh_rotl(s[15] ^ s[9], 8u); + s[14] = s[14] * 0xba13bfd9u + s[15]; + s[6] = mh_rotl(s[6], 30u) + s[14]; + s[2] ^= s[6] ^ 0xe3a68481u; + s[3] ^= s[2] ^ 0xdb295442u; + s[6] -= s[3]; + s[3] *= (s[6] | 1u); + s[14] ^= s[3]; + s[6] += s[14]; + s[0] += s[6]; + s[13] ^= s[0] ^ 0x2ce62ec8u; + s[9] -= s[13]; + s[6] = (s[6] ^ s[9]) * 0xb3667f91u; + s[12] ^= s[6] ^ 0xa40ba390u; + s[0] += s[12]; + s[13] = (s[13] ^ s[0]) * 0xcf132dbdu; + s[8] ^= s[13] ^ 0xc01a2e22u; + s[15] = mh_rotl(s[15], 29u) + s[8]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[12] += s[4] + 0xa106f25fu; + s[10] = mh_rotl(s[10], 2u) + s[12]; + s[1] ^= s[10]; + s[4] = s[4] * 0xd693bf07u + s[1]; + s[8] ^= s[4]; + s[15] += s[8]; + s[2] = (s[2] ^ s[15]) * 0x451147c5u; + s[6] += s[2]; + s[4] ^= s[6] ^ 0x95c3d40au; + s[8] ^= s[4]; + s[6] = mh_rotl(s[6] ^ s[8], 24u); + s[8] = s[8] * 0xfacd20cdu + s[6]; + s[3] *= (s[8] | 1u); + s[0] = s[0] * 0xf8f86c91u + s[3]; + s[9] *= (s[0] | 1u); + s[1] ^= s[9]; + s[13] ^= s[1]; + s[14] *= (s[13] | 1u); + s[0] += s[14] + 0x29396640u; + s[6] *= (s[0] | 1u); + s[13] -= s[6]; + s[4] ^= s[13]; + s[10] = mh_rotl(s[10], 29u) + s[4]; + s[11] = mh_rotl(s[11], 14u) + s[10]; + s[8] = mh_rotl(s[8], 14u) + s[11]; + s[12] = (s[12] ^ s[8]) * 0x7c958209u; + s[14] ^= s[12] ^ 0x6e81c671u; + s[6] ^= s[14]; + s[5] += s[6] + 0xe6b449c9u; + s[7] ^= (s[5] & s[12]); + s[8] = mh_rotl(s[8], 8u) + s[7]; + s[7] = s[7] * 0x3076e64fu + s[8]; + s[15] = s[15] * 0x4f3224dfu + s[7]; + s[9] = mh_rotl(s[9] ^ s[15], 24u); + s[5] = s[5] * 0x71865ddbu + s[9]; + s[2] += s[5] + 0xbd3e3e01u; + s[4] = mh_rotl(s[4] ^ s[2], 14u); + s[0] = (s[0] ^ s[4]) * 0x6b745769u; + s[9] -= s[0]; + s[4] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[4], 2u); + s[8] += (s[6] | s[10]); + s[1] *= (s[8] | 1u); + s[14] += (s[1] | s[6]); + s[6] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[6], 19u); + s[4] *= (s[13] | 1u); + s[10] ^= s[4] ^ 0xd06e492du; + s[9] ^= s[10] ^ 0x6d1c0c53u; + s[14] ^= s[9]; + s[13] ^= (s[14] & s[10]); + s[1] += (s[13] | s[4]); + s[11] = mh_rotl(s[11] ^ s[1], 30u); + s[0] += s[11]; + s[2] ^= (s[0] & s[13]); + s[0] -= s[2]; + s[12] = s[12] * 0x615420d7u + s[0]; + s[11] ^= (s[12] & s[3]); + s[1] = mh_rotl(s[1], 31u) + s[11]; + s[2] = mh_rotl(s[2] ^ s[1], 12u); + s[12] ^= s[2]; + s[8] ^= s[12]; + s[6] -= s[8]; + s[10] ^= s[6]; + s[14] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[14], 22u); + s[6] *= (s[15] | 1u); + s[1] ^= s[6]; + s[12] = s[12] * 0x513c5869u + s[1]; + s[6] = mh_rotl(s[6] ^ s[12], 21u); + s[9] ^= s[6]; + s[0] += s[9]; + s[12] ^= s[0]; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 4u); + s[1] ^= s[6]; + s[4] *= (s[1] | 1u); + s[6] = s[6] * 0xb444bcc1u + s[4]; + s[8] ^= s[6]; + s[7] ^= s[8] ^ 0x1a883d74u; + s[10] = mh_rotl(s[10] ^ s[7], 8u); + s[9] = mh_rotl(s[9], 16u) + s[10]; + s[6] += s[9]; + s[2] ^= s[6]; + s[14] = mh_rotl(s[14], 8u) + s[2]; + s[9] += (s[14] | s[11]); + s[15] *= (s[9] | 1u); + s[9] = mh_rotl(s[9], 9u) + s[15]; + s[8] = mh_rotl(s[8], 9u) + s[9]; + s[7] ^= s[8]; + s[5] ^= s[7]; + s[11] ^= s[5]; + s[4] *= (s[11] | 1u); + s[8] *= (s[4] | 1u); + s[12] += (s[8] | s[2]); + s[13] = s[13] * 0xed36b1e7u + s[12]; + s[1] ^= s[13]; + s[2] *= (s[1] | 1u); + s[5] = s[5] * 0x20dd61c9u + s[2]; + s[9] += s[5] + 0x4221406cu; + s[2] = (s[2] ^ s[9]) * 0xbd437fb1u; + s[10] ^= s[2]; + s[8] += (s[10] | s[4]); + s[1] += s[8]; + s[15] *= (s[1] | 1u); + s[10] *= (s[15] | 1u); + s[4] -= s[10]; + s[12] += s[4] + 0x2cc4a200u; + s[6] ^= s[12]; + s[11] += s[6] + 0x24df7960u; + s[13] -= s[11]; + s[4] ^= s[13]; + s[1] -= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 7u); + s[1] += s[3]; + s[9] += s[1]; + s[3] ^= s[9]; + s[6] ^= (s[3] & s[0]); + s[13] -= s[6]; + s[2] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[1] *= (s[5] | 1u); + s[3] = (s[3] ^ s[1]) * 0x290a4cddu; + s[7] = (s[7] ^ s[3]) * 0x05557b07u; + s[3] = mh_rotl(s[3] ^ s[7], 7u); + s[9] += s[3]; + s[14] ^= s[9]; + s[0] = (s[0] ^ s[14]) * 0x84c021f1u; + s[14] ^= s[0]; + s[3] -= s[14]; + s[1] = s[1] * 0x6d78fdd7u + s[3]; + s[5] = (s[5] ^ s[1]) * 0x5e5c9e7bu; + s[12] += s[5]; + s[8] += (s[12] | s[3]); + s[13] += s[8] + 0x4759e773u; + s[15] += s[13]; + s[3] = (s[3] ^ s[15]) * 0x6664f1fdu; + s[6] *= (s[3] | 1u); + s[11] = (s[11] ^ s[6]) * 0x4e530d13u; + s[5] *= (s[11] | 1u); + s[1] += s[5] + 0x3dd89a81u; + s[14] = mh_rotl(s[14], 6u) + s[1]; + s[9] = mh_rotl(s[9], 2u) + s[14]; + s[14] += s[9]; + s[10] = mh_rotl(s[10] ^ s[14], 31u); + s[12] += s[10]; + s[7] ^= (s[12] & s[11]); + s[13] += s[7]; + s[4] = mh_rotl(s[4], 4u) + s[13]; + s[3] ^= (s[4] & s[10]); + s[5] ^= (s[3] & s[11]); + s[4] = mh_rotl(s[4], 22u) + s[5]; + s[3] -= s[4]; + s[5] ^= (s[3] & s[12]); + s[2] -= s[5]; + s[9] = (s[9] ^ s[2]) * 0x009bbf5bu; + s[4] += s[9]; + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[7] = mh_rotl(s[7] ^ s[15], 20u); + s[10] += s[7]; + s[4] = s[4] * 0x4bdd1ef7u + s[10]; + s[14] ^= (s[4] & s[2]); + s[9] = (s[9] ^ s[14]) * 0x52fb945du; + s[12] += s[9]; + s[9] ^= s[12]; + s[2] = mh_rotl(s[2] ^ s[9], 11u); + s[11] += s[2] + 0x98f50a09u; + s[15] += s[11] + 0xd43ed388u; + s[10] += s[15] + 0x2f9a932bu; + s[12] ^= (s[10] & s[15]); + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0xd453117du; + s[1] += (s[12] | s[2]); + s[5] += s[1]; + s[1] += s[5]; + s[14] -= s[1]; + s[8] -= s[14]; + s[10] -= s[8]; + s[13] ^= (s[10] & s[5]); + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[13] = (s[13] ^ s[5]) * 0x664791dfu; + s[15] -= s[13]; + s[3] += s[15]; + s[5] *= (s[3] | 1u); + s[2] = (s[2] ^ s[5]) * 0x93635545u; + s[8] ^= s[2] ^ 0xfd3c4040u; + s[12] ^= s[8] ^ 0x16edb512u; + s[1] ^= s[12] ^ 0x16c54637u; + s[4] += (s[1] | s[10]); + s[1] += s[4]; + s[13] ^= (s[1] & s[6]); + s[7] += s[13] + 0x3d8c4dc2u; + s[15] += s[7]; + s[14] = (s[14] ^ s[15]) * 0xa280205du; + s[8] += s[14] + 0xea00510eu; + s[15] += s[8] + 0x22e3c715u; + s[8] ^= s[15]; + s[4] ^= s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 20u); + s[0] += s[11]; + s[13] = mh_rotl(s[13], 15u) + s[0]; + s[14] ^= s[13]; + s[0] ^= s[14]; + s[10] -= s[0]; + s[14] = s[14] * 0x93e04059u + s[10]; + s[0] += s[14] + 0x5e852243u; + s[9] += s[0]; + s[11] ^= s[9] ^ 0x6a38274eu; + s[6] ^= s[11]; + s[9] ^= s[6] ^ 0x45fe04e0u; + s[15] ^= s[9]; + s[2] = mh_rotl(s[2] ^ s[15], 2u); + s[7] ^= s[2]; + s[3] = mh_rotl(s[3], 25u) + s[7]; + s[4] += s[3]; + s[0] = mh_rotl(s[0] ^ s[4], 30u); + s[14] ^= s[0]; + s[9] += s[14]; + s[1] = s[1] * 0x3f7558f3u + s[9]; + s[4] = s[4] * 0xe3e44fb9u + s[1]; + s[11] *= (s[4] | 1u); + s[1] += s[11]; + s[9] ^= s[1]; + s[12] *= (s[9] | 1u); + s[13] ^= s[12] ^ 0xde1987e8u; + s[11] ^= (s[13] & s[12]); + s[8] *= (s[11] | 1u); + s[4] += s[8] + 0x607d6073u; + s[0] = mh_rotl(s[0], 10u) + s[4]; + s[7] = (s[7] ^ s[0]) * 0x7b248651u; + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[6] += s[1]; + s[9] += s[6]; + s[5] -= s[9]; + s[0] += s[5]; + s[6] = mh_rotl(s[6] ^ s[0], 28u); + s[1] -= s[6]; + s[12] += s[1] + 0x2a786432u; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[13] += s[15] + 0xcbe2f823u; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[12] *= (s[14] | 1u); + s[2] += s[12]; + s[0] -= s[2]; + s[6] += s[0]; + s[5] = mh_rotl(s[5], 22u) + s[6]; + s[0] -= s[5]; + s[5] ^= s[0] ^ 0x2970012du; + s[10] ^= s[5] ^ 0xed24a370u; + s[0] ^= s[10]; + s[12] = s[12] * 0x41ce9517u + s[0]; + s[4] += s[12]; + s[13] = (s[13] ^ s[4]) * 0x2d1ce425u; + s[10] = (s[10] ^ s[13]) * 0x97e04693u; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[8] += s[6]; + s[2] += s[8]; + s[4] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[4], 5u); + s[4] ^= s[2]; + s[2] += s[4]; + s[14] = (s[14] ^ s[2]) * 0x1b32c769u; + s[13] ^= s[14]; + s[5] = mh_rotl(s[5] ^ s[13], 22u); + s[6] += (s[5] | s[8]); + s[9] = mh_rotl(s[9] ^ s[6], 29u); + s[10] += s[9]; + s[7] ^= s[10]; + s[14] = mh_rotl(s[14] ^ s[7], 18u); + s[10] = mh_rotl(s[10] ^ s[14], 10u); + s[2] = mh_rotl(s[2], 5u) + s[10]; + s[5] = mh_rotl(s[5], 13u) + s[2]; + s[12] += s[5]; + s[13] = (s[13] ^ s[12]) * 0x17c1f363u; + s[9] += (s[13] | s[7]); + s[13] *= (s[9] | 1u); + s[15] = mh_rotl(s[15], 19u) + s[13]; + s[12] = mh_rotl(s[12], 19u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[12], 8u); +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_4(uint* s) { + s[8] = s[8] * 0xaecd4a17u + s[0]; + s[7] = mh_rotl(s[7], 30u) + s[8]; + s[13] ^= s[7]; + s[3] ^= s[13] ^ 0x4f2a7676u; + s[4] = mh_rotl(s[4] ^ s[3], 3u); + s[8] += s[4]; + s[0] ^= s[8]; + s[8] = (s[8] ^ s[0]) * 0x13ad02a5u; + s[3] ^= s[8]; + s[8] += s[3]; + s[12] ^= s[8] ^ 0xee807166u; + s[5] = mh_rotl(s[5] ^ s[12], 25u); + s[1] ^= s[5]; + s[7] = (s[7] ^ s[1]) * 0x7f918ce5u; + s[8] += s[7]; + s[12] ^= s[8] ^ 0x0fe3941du; + s[6] *= (s[12] | 1u); + s[15] = mh_rotl(s[15], 30u) + s[6]; + s[8] += s[15]; + s[4] ^= s[8]; + s[3] -= s[4]; + s[0] += s[3]; + s[2] ^= (s[0] & s[5]); + s[10] += s[2]; + s[2] ^= s[10]; + s[6] -= s[2]; + s[5] += s[6]; + s[14] += (s[5] | s[3]); + s[11] += (s[14] | s[3]); + s[13] += s[11]; + s[8] = mh_rotl(s[8], 26u) + s[13]; + s[1] = mh_rotl(s[1] ^ s[8], 12u); + s[11] ^= (s[1] & s[8]); + s[14] = mh_rotl(s[14] ^ s[11], 10u); + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[5] = (s[5] ^ s[7]) * 0x3ef9db3bu; + s[8] += s[5]; + s[12] += s[8]; + s[10] *= (s[12] | 1u); + s[5] ^= s[10] ^ 0x3ac44be6u; + s[14] = s[14] * 0xdd348ca1u + s[5]; + s[3] ^= s[14] ^ 0xfd694e31u; + s[7] ^= s[3]; + s[6] ^= s[7] ^ 0x1c8fa07eu; + s[4] ^= s[6]; + s[2] ^= s[4]; + s[9] -= s[2]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[13] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[13], 11u); + s[1] = (s[1] ^ s[5]) * 0x41737ac3u; + s[10] ^= (s[1] & s[13]); + s[13] -= s[10]; + s[5] += s[13] + 0xef8b331eu; + s[14] += s[5]; + s[2] += s[14]; + s[3] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[11] ^= s[2]; + s[3] = (s[3] ^ s[11]) * 0xe116294bu; + s[2] *= (s[3] | 1u); + s[6] ^= s[2]; + s[2] *= (s[6] | 1u); + s[12] ^= s[2] ^ 0x53bea191u; + s[14] *= (s[12] | 1u); + s[10] ^= s[14]; + s[4] *= (s[10] | 1u); + s[2] ^= s[4] ^ 0xced418d2u; + s[5] = s[5] * 0xe51463cbu + s[2]; + s[2] ^= s[5]; + s[6] += (s[2] | s[3]); + s[9] ^= (s[6] & s[15]); + s[0] = (s[0] ^ s[9]) * 0x52fd974du; + s[15] = mh_rotl(s[15] ^ s[0], 8u); + s[14] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[12] ^= s[8]; + s[7] = mh_rotl(s[7], 9u) + s[12]; + s[3] ^= s[7] ^ 0x86710ff9u; + s[13] -= s[3]; + s[3] ^= s[13]; + s[5] = mh_rotl(s[5], 29u) + s[3]; + s[7] += (s[5] | s[8]); + s[6] += s[7]; + s[13] ^= s[6]; + s[5] ^= s[13]; + s[13] -= s[5]; + s[4] ^= s[13]; + s[0] = mh_rotl(s[0], 28u) + s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[0] = (s[0] ^ s[10]) * 0x4bce676du; + s[9] += s[0]; + s[15] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 29u); + s[1] ^= s[5]; + s[10] ^= s[1]; + s[3] -= s[10]; + s[4] -= s[3]; + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[8] ^= s[5]; + s[4] += s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 22u); + s[7] ^= s[11]; + s[11] ^= s[7] ^ 0x678e4d82u; + s[7] = (s[7] ^ s[11]) * 0x3b4b50bfu; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[0] = mh_rotl(s[0], 11u) + s[3]; + s[4] -= s[0]; + s[3] ^= s[4]; + s[11] ^= s[3]; + s[4] *= (s[11] | 1u); + s[2] -= s[4]; + s[1] -= s[2]; + s[9] ^= s[1]; + s[11] -= s[9]; + s[9] ^= s[11]; + s[10] = (s[10] ^ s[9]) * 0x5a972befu; + s[7] ^= (s[10] & s[4]); + s[15] = (s[15] ^ s[7]) * 0xac20e017u; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[10] -= s[3]; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[15] = mh_rotl(s[15] ^ s[6], 3u); + s[4] = (s[4] ^ s[15]) * 0xbeaf0ba9u; + s[9] *= (s[4] | 1u); + s[12] ^= s[9]; + s[8] ^= s[12]; + s[14] *= (s[8] | 1u); + s[6] = mh_rotl(s[6] ^ s[14], 16u); + s[10] += s[6]; + s[1] += s[10]; + s[3] ^= s[1]; + s[9] -= s[3]; + s[6] += s[9]; + s[15] = mh_rotl(s[15], 13u) + s[6]; + s[10] ^= (s[15] & s[1]); + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[9] = mh_rotl(s[9], 11u) + s[3]; + s[2] ^= s[9] ^ 0x8f89660fu; + s[0] = mh_rotl(s[0] ^ s[2], 21u); + s[13] = (s[13] ^ s[0]) * 0x486a43b3u; + s[10] += s[13]; + s[4] ^= s[10]; + s[14] ^= s[4]; + s[2] ^= s[14]; + s[7] += s[2] + 0xd5248764u; + s[1] ^= s[7]; + s[5] ^= (s[1] & s[14]); + s[8] *= (s[5] | 1u); + s[14] += s[8]; + s[4] -= s[14]; + s[6] = mh_rotl(s[6], 1u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[6], 25u); + s[9] = mh_rotl(s[9], 10u) + s[3]; + s[7] += s[9]; + s[4] += s[7]; + s[2] = (s[2] ^ s[4]) * 0xf5d8c485u; + s[13] *= (s[2] | 1u); + s[8] ^= s[13]; + s[12] ^= s[8]; + s[0] += s[12] + 0xcbe96ecfu; + s[10] += s[0]; + s[4] += s[10]; + s[15] ^= s[4]; + s[11] *= (s[15] | 1u); + s[4] = s[4] * 0x8a37f349u + s[11]; + s[2] += s[4]; + s[10] = mh_rotl(s[10] ^ s[2], 14u); + s[12] += s[10]; + s[7] ^= s[12]; + s[6] = (s[6] ^ s[7]) * 0x5d00c42du; + s[0] ^= s[6]; + s[11] ^= s[0]; + s[15] += s[11]; + s[8] += s[15]; + s[11] ^= s[8]; + s[8] ^= (s[11] & s[7]); + s[15] -= s[8]; + s[2] -= s[15]; + s[14] += s[2]; + s[5] += s[14]; + s[11] ^= (s[5] & s[8]); + s[3] ^= s[11] ^ 0xe126a36du; + s[10] += s[3]; + s[14] += s[10]; + s[8] ^= s[14] ^ 0x52400d07u; + s[12] *= (s[8] | 1u); + s[15] ^= (s[12] & s[11]); + s[3] = mh_rotl(s[3] ^ s[15], 1u); + s[12] += s[3] + 0xd372258fu; + s[4] ^= s[12] ^ 0xf284d169u; + s[11] -= s[4]; + s[13] = mh_rotl(s[13], 1u) + s[11]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[0] *= (s[13] | 1u); + s[9] ^= s[0]; + s[1] = s[1] * 0xb05d4c01u + s[9]; + s[8] -= s[1]; + s[1] += s[8]; + s[4] = mh_rotl(s[4], 31u) + s[1]; + s[6] ^= s[4]; + s[7] ^= (s[6] & s[4]); + s[10] += s[7] + 0xc4e27d81u; + s[5] += s[10]; + s[3] *= (s[5] | 1u); + s[12] += s[3] + 0xeb606a4au; + s[11] ^= s[12] ^ 0x25bef1a4u; + s[15] *= (s[11] | 1u); + s[13] += s[15] + 0x2f08e9bbu; + s[14] += s[13]; + s[1] ^= s[14]; + s[9] *= (s[1] | 1u); + s[12] += s[9]; + s[6] *= (s[12] | 1u); + s[7] += (s[6] | s[1]); + s[13] += s[7]; + s[7] = mh_rotl(s[7], 1u) + s[13]; + s[5] = mh_rotl(s[5], 5u) + s[7]; + s[1] *= (s[5] | 1u); + s[14] = (s[14] ^ s[1]) * 0x050194b7u; + s[15] += s[14]; + s[9] = mh_rotl(s[9] ^ s[15], 18u); + s[13] = s[13] * 0xb23e5f33u + s[9]; + s[11] = mh_rotl(s[11], 3u) + s[13]; + s[10] += s[11]; + s[11] *= (s[10] | 1u); + s[3] ^= s[11]; + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[0] ^= (s[6] & s[1]); + s[10] += s[0]; + s[12] = mh_rotl(s[12], 20u) + s[10]; + s[1] *= (s[12] | 1u); + s[6] *= (s[1] | 1u); + s[7] += s[6]; + s[5] ^= s[7]; + s[13] ^= s[5]; + s[7] ^= s[13]; + s[6] ^= s[7]; + s[11] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[11], 9u); + s[8] ^= s[7] ^ 0x619be41bu; + s[4] = (s[4] ^ s[8]) * 0xa41b1063u; + s[8] = (s[8] ^ s[4]) * 0x39fd4b17u; + s[12] += s[8]; + s[0] = mh_rotl(s[0] ^ s[12], 17u); + s[1] += (s[0] | s[12]); + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[15] += s[3]; + s[2] ^= s[15] ^ 0xac74167cu; + s[4] += s[2]; + s[7] += s[4]; + s[3] ^= (s[7] & s[5]); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[15] -= s[4]; + s[3] += (s[15] | s[11]); + s[4] += s[3]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[14] += (s[8] | s[3]); + s[6] = s[6] * 0x88bcb913u + s[14]; + s[2] = mh_rotl(s[2], 26u) + s[6]; + s[9] *= (s[2] | 1u); + s[4] += s[9] + 0xf68758d3u; + s[11] ^= s[4] ^ 0xe7cb0a2du; + s[15] ^= s[11]; + s[0] = mh_rotl(s[0] ^ s[15], 10u); + s[1] ^= s[0] ^ 0x01a1a184u; + s[2] += s[1]; + s[6] = mh_rotl(s[6], 6u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[6], 18u); + s[14] ^= (s[12] & s[13]); + s[15] += s[14]; + s[4] = s[4] * 0x45d3b6d1u + s[15]; + s[15] += s[4] + 0x287abc40u; + s[12] *= (s[15] | 1u); + s[7] *= (s[12] | 1u); + s[8] += s[7]; + s[15] = mh_rotl(s[15] ^ s[8], 31u); + s[14] = (s[14] ^ s[15]) * 0x4d24e02fu; + s[0] += s[14] + 0x2e93de43u; + s[9] ^= s[0]; + s[1] -= s[9]; + s[4] += s[1] + 0x7018f3c1u; + s[5] = mh_rotl(s[5] ^ s[4], 22u); + s[4] = (s[4] ^ s[5]) * 0x5d42c6b7u; + s[1] = mh_rotl(s[1], 19u) + s[4]; + s[10] *= (s[1] | 1u); + s[6] = (s[6] ^ s[10]) * 0xb3b283ddu; + s[0] += (s[6] | s[4]); + s[4] = mh_rotl(s[4] ^ s[0], 10u); + s[2] = mh_rotl(s[2], 18u) + s[4]; + s[3] += s[2] + 0xf72224c1u; + s[2] ^= s[3]; + s[6] ^= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[6]; + s[13] -= s[11]; + s[8] += s[13]; + s[6] += s[8]; + s[2] = mh_rotl(s[2] ^ s[6], 2u); + s[3] = (s[3] ^ s[2]) * 0xe72cd1e5u; + s[10] ^= s[3]; + s[9] = (s[9] ^ s[10]) * 0xdaae888fu; + s[12] = mh_rotl(s[12] ^ s[9], 13u); + s[13] += s[12]; + s[12] += s[13] + 0x1bf086c5u; + s[10] += s[12]; + s[5] = mh_rotl(s[5], 20u) + s[10]; + s[13] = (s[13] ^ s[5]) * 0x332136d3u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[2] += (s[0] | s[7]); + s[1] ^= s[2] ^ 0x906c1640u; + s[8] += (s[1] | s[13]); + s[13] = mh_rotl(s[13] ^ s[8], 27u); + s[4] = (s[4] ^ s[13]) * 0x8f6a7f2du; + s[10] ^= s[4]; + s[6] *= (s[10] | 1u); + s[3] ^= s[6]; + s[2] -= s[3]; + s[10] += (s[2] | s[14]); + s[4] ^= s[10]; + s[7] = mh_rotl(s[7] ^ s[4], 13u); + s[15] += s[7]; + s[6] += s[15]; + s[3] += (s[6] | s[9]); + s[4] = mh_rotl(s[4] ^ s[3], 14u); + s[13] += s[4] + 0xfa50a754u; + s[12] ^= s[13]; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[3] += s[14]; + s[8] -= s[3]; + s[12] = mh_rotl(s[12], 11u) + s[8]; + s[8] = s[8] * 0x68315979u + s[12]; + s[3] ^= s[8] ^ 0x0c36ecd9u; + s[11] *= (s[3] | 1u); + s[15] *= (s[11] | 1u); + s[10] *= (s[15] | 1u); + s[5] ^= s[10]; + s[9] = mh_rotl(s[9], 7u) + s[5]; + s[6] = s[6] * 0xb4800e07u + s[9]; + s[14] += s[6] + 0xe2b19752u; + s[6] += s[14] + 0x5b6cb907u; + s[14] ^= s[6]; + s[3] ^= (s[14] & s[10]); + s[7] *= (s[3] | 1u); + s[1] += s[7] + 0x072137beu; + s[0] ^= (s[1] & s[8]); + s[8] += s[0]; + s[9] += s[8] + 0x02e4e39bu; + s[14] += s[9] + 0xe9bf76a8u; + s[2] ^= s[14]; + s[0] = s[0] * 0x76da5405u + s[2]; + s[10] = mh_rotl(s[10] ^ s[0], 20u); + s[13] += s[10]; + s[7] = mh_rotl(s[7] ^ s[13], 27u); + s[1] += s[7]; + s[12] = mh_rotl(s[12], 4u) + s[1]; + s[5] = s[5] * 0xfc599aedu + s[12]; + s[10] -= s[5]; + s[0] += s[10]; + s[8] = mh_rotl(s[8] ^ s[0], 10u); + s[11] ^= s[8]; + s[14] += s[11]; + s[2] -= s[14]; + s[12] += s[2] + 0x573e5081u; + s[0] ^= s[12] ^ 0x571e5302u; + s[2] ^= s[0]; + s[5] ^= s[2]; + s[8] ^= s[5] ^ 0xdac0ab44u; + s[11] = mh_rotl(s[11] ^ s[8], 6u); + s[0] += s[11]; + s[2] += s[0]; + s[6] ^= s[2]; + s[2] = mh_rotl(s[2], 31u) + s[6]; + s[11] += s[2]; + s[12] += s[11]; + s[2] += s[12] + 0xc9a167b4u; + s[5] += s[2]; + s[2] += s[5]; + s[9] ^= s[2]; + s[12] = (s[12] ^ s[9]) * 0x813582c9u; + s[2] += s[12]; + s[3] = mh_rotl(s[3] ^ s[2], 8u); + s[5] *= (s[3] | 1u); + s[4] += s[5]; + s[3] *= (s[4] | 1u); + s[6] *= (s[3] | 1u); + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[12] += s[3]; + s[5] -= s[12]; + s[3] = s[3] * 0x9fa250c7u + s[5]; + s[15] += (s[3] | s[12]); + s[14] ^= (s[15] & s[11]); + s[6] += s[14]; + s[4] += s[6]; + s[3] = s[3] * 0x07092e11u + s[4]; + s[4] = mh_rotl(s[4] ^ s[3], 9u); + s[11] *= (s[4] | 1u); + s[6] += s[11]; + s[10] *= (s[6] | 1u); + s[6] *= (s[10] | 1u); + s[4] ^= s[6]; + s[12] = mh_rotl(s[12], 28u) + s[4]; + s[10] ^= s[12]; + s[8] += s[10]; + s[15] = (s[15] ^ s[8]) * 0x23fc87d7u; + s[3] += s[15]; + s[8] ^= s[3]; + s[5] = s[5] * 0x4812e6c5u + s[8]; + s[11] -= s[5]; + s[0] *= (s[11] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[12] += (s[10] | s[5]); + s[5] ^= s[12]; + s[0] *= (s[5] | 1u); + s[15] -= s[0]; + s[8] = mh_rotl(s[8], 23u) + s[15]; + s[13] = s[13] * 0x83e86a8bu + s[8]; + s[7] += s[13]; + s[11] = (s[11] ^ s[7]) * 0xd510d0b1u; + s[7] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 11u); + s[13] *= (s[2] | 1u); + s[1] ^= s[13]; + s[9] ^= s[1]; + s[8] -= s[9]; + s[1] += s[8]; + s[2] += s[1]; + s[1] -= s[2]; + s[12] = (s[12] ^ s[1]) * 0x1205ac95u; + s[3] = mh_rotl(s[3], 22u) + s[12]; + s[0] ^= s[3]; + s[1] ^= s[0] ^ 0xa613bb86u; + s[12] += s[1] + 0x5cc04f4bu; + s[3] -= s[12]; + s[6] = (s[6] ^ s[3]) * 0xff2c5e5du; + s[7] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[7], 20u); + s[13] = (s[13] ^ s[2]) * 0xc3c13b61u; + s[6] ^= s[13]; + s[13] ^= s[6]; + s[5] = mh_rotl(s[5], 11u) + s[13]; + s[9] += s[5]; + s[15] ^= s[9]; + s[6] = (s[6] ^ s[15]) * 0xd0ff64bbu; + s[15] = mh_rotl(s[15] ^ s[6], 17u); + s[10] ^= (s[15] & s[5]); + s[13] = mh_rotl(s[13] ^ s[10], 22u); + s[2] += s[13]; + s[5] ^= s[2] ^ 0x434fd088u; + s[7] ^= (s[5] & s[2]); + s[13] ^= s[7]; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[12] += s[3]; + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 8u); + s[5] *= (s[9] | 1u); + s[14] += s[5] + 0x3680f66du; + s[15] += s[14]; + s[12] -= s[15]; + s[4] *= (s[12] | 1u); + s[7] ^= (s[4] & s[6]); + s[3] = mh_rotl(s[3], 2u) + s[7]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[10] += s[6]; + s[4] ^= (s[10] & s[3]); + s[0] ^= s[4]; + s[12] ^= s[0]; + s[15] ^= s[12]; + s[6] += (s[15] | s[7]); + s[3] += s[6]; + s[9] = mh_rotl(s[9], 2u) + s[3]; + s[15] += s[9]; + s[9] = mh_rotl(s[9] ^ s[15], 6u); + s[2] = mh_rotl(s[2], 28u) + s[9]; + s[7] = (s[7] ^ s[2]) * 0x49571301u; + s[10] = mh_rotl(s[10], 8u) + s[7]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[2] *= (s[9] | 1u); + s[7] = s[7] * 0x461c2c9bu + s[2]; + s[4] += s[7]; + s[12] += s[4]; + s[1] = mh_rotl(s[1] ^ s[12], 30u); + s[11] ^= s[1] ^ 0x41684119u; + s[6] ^= s[11]; + s[5] *= (s[6] | 1u); + s[12] ^= s[5] ^ 0x5e252f68u; + s[15] = mh_rotl(s[15] ^ s[12], 13u); + s[0] = s[0] * 0xcfa728bbu + s[15]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[5] = (s[5] ^ s[3]) * 0x4c101bb3u; + s[13] -= s[5]; + s[12] += s[13]; + s[13] -= s[12]; + s[15] ^= s[13]; + s[5] = (s[5] ^ s[15]) * 0xffd85c8du; + s[4] = mh_rotl(s[4], 21u) + s[5]; + s[7] ^= s[4]; + s[12] = mh_rotl(s[12], 16u) + s[7]; + s[11] -= s[12]; + s[3] = mh_rotl(s[3], 17u) + s[11]; + s[7] ^= s[3]; + s[0] -= s[7]; + s[9] ^= s[0]; + s[7] = mh_rotl(s[7], 11u) + s[9]; + s[4] += s[7]; + s[1] ^= s[4]; + s[8] = s[8] * 0xd56caf87u + s[1]; + s[15] -= s[8]; + s[12] ^= s[15]; + s[7] ^= s[12]; + s[15] -= s[7]; + s[10] += s[15] + 0x32455b49u; + s[12] = mh_rotl(s[12] ^ s[10], 6u); + s[5] ^= s[12] ^ 0x024545fbu; + s[12] += s[5]; + s[10] ^= s[12] ^ 0xc7112001u; + s[1] = (s[1] ^ s[10]) * 0xa0829e23u; + s[7] *= (s[1] | 1u); + s[15] = (s[15] ^ s[7]) * 0x42ed41f9u; + s[12] = mh_rotl(s[12], 12u) + s[15]; + s[3] += s[12] + 0xfc638f44u; + s[8] ^= s[3]; + s[12] -= s[8]; + s[8] += (s[12] | s[4]); + s[14] ^= s[8]; + s[4] += s[14]; + s[0] ^= s[4] ^ 0x4890174au; + s[14] += s[0]; + s[10] += s[14]; + s[1] -= s[10]; + s[4] ^= s[1]; + s[7] *= (s[4] | 1u); + s[4] *= (s[7] | 1u); + s[7] ^= s[4]; + s[2] = (s[2] ^ s[7]) * 0x14382f11u; + s[1] *= (s[2] | 1u); + s[15] ^= s[1]; + s[5] = mh_rotl(s[5] ^ s[15], 4u); + s[12] = (s[12] ^ s[5]) * 0x818ffff7u; + s[13] ^= s[12] ^ 0x3c40017du; + s[10] = mh_rotl(s[10], 6u) + s[13]; + s[12] = s[12] * 0x2c1775d5u + s[10]; + s[8] += (s[12] | s[11]); + s[1] = mh_rotl(s[1], 4u) + s[8]; + s[8] += s[1] + 0x0134d33fu; + s[5] = mh_rotl(s[5] ^ s[8], 18u); + s[10] -= s[5]; + s[14] += s[10]; + s[2] = mh_rotl(s[2] ^ s[14], 26u); + s[10] += s[2]; + s[5] = mh_rotl(s[5] ^ s[10], 25u); + s[3] += s[5]; + s[15] -= s[3]; + s[6] ^= (s[15] & s[14]); + s[12] -= s[6]; + s[5] -= s[12]; + s[6] += s[5] + 0x35380dd4u; + s[9] ^= s[6]; + s[4] = mh_rotl(s[4], 12u) + s[9]; + s[12] = (s[12] ^ s[4]) * 0x88440653u; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 22u); + s[11] = mh_rotl(s[11] ^ s[6], 31u); + s[5] = mh_rotl(s[5] ^ s[11], 11u); + s[4] += s[5] + 0xc2928041u; + s[2] -= s[4]; + s[12] ^= s[2]; + s[2] ^= s[12]; + s[10] ^= s[2] ^ 0x18d1c7f6u; + s[12] = (s[12] ^ s[10]) * 0xe5af4085u; + s[0] -= s[12]; + s[13] += s[0] + 0xbab4883eu; + s[5] = mh_rotl(s[5] ^ s[13], 28u); + s[1] = (s[1] ^ s[5]) * 0x22410953u; + s[10] = mh_rotl(s[10], 12u) + s[1]; + s[1] = (s[1] ^ s[10]) * 0xb2399be7u; + s[8] += s[1] + 0x705befa8u; + s[6] = mh_rotl(s[6], 4u) + s[8]; + s[5] ^= s[6]; + s[8] += s[5] + 0x17cc5e00u; + s[4] -= s[8]; + s[5] ^= s[4]; + s[15] += s[5]; + s[8] ^= s[15]; + s[12] += s[8]; + s[3] -= s[12]; + s[11] += s[3]; + s[12] = mh_rotl(s[12], 2u) + s[11]; + s[3] = s[3] * 0xd6adb5cbu + s[12]; + s[6] += s[3]; + s[5] = (s[5] ^ s[6]) * 0x712deca1u; + s[8] += s[5]; + s[13] *= (s[8] | 1u); + s[7] ^= s[13] ^ 0xa85619d9u; + s[4] += s[7] + 0xb2a236bcu; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[0] -= s[8]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[4] ^= s[13]; + s[10] ^= s[4]; + s[5] ^= s[10] ^ 0x37c54528u; + s[15] ^= s[5]; + s[4] ^= s[15] ^ 0x0bec700du; + s[0] ^= s[4]; + s[6] ^= s[0]; + s[11] ^= (s[6] & s[8]); + s[5] ^= (s[11] & s[1]); + s[13] ^= s[5]; + s[2] *= (s[13] | 1u); + s[10] += s[2] + 0xbc7e8198u; + s[12] ^= s[10]; + s[3] ^= s[12]; + s[5] ^= (s[3] & s[1]); + s[8] ^= s[5]; + s[11] += s[8]; + s[7] ^= s[11]; + s[15] += s[7] + 0xfcc72c89u; + s[0] += s[15]; + s[2] = s[2] * 0x7b366e1fu + s[0]; + s[4] = s[4] * 0x410f7c31u + s[2]; + s[14] += s[4]; + s[8] = (s[8] ^ s[14]) * 0x06b5c483u; + s[13] ^= s[8]; + s[4] *= (s[13] | 1u); + s[7] = mh_rotl(s[7], 14u) + s[4]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[9] += s[12]; + s[14] ^= s[9]; + s[0] += s[14] + 0xe2ef88f9u; + s[12] += s[0]; + s[14] *= (s[12] | 1u); + s[1] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[1], 27u); + s[6] -= s[12]; + s[10] += s[6]; + s[11] *= (s[10] | 1u); + s[3] += (s[11] | s[7]); + s[13] += s[3] + 0x2a6dd670u; + s[12] += s[13]; + s[14] = mh_rotl(s[14] ^ s[12], 16u); + s[12] += s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[7] ^= s[3] ^ 0xe2b68ee9u; + s[13] *= (s[7] | 1u); + s[3] ^= (s[13] & s[1]); + s[14] += s[3] + 0x9d70728au; + s[4] += (s[14] | s[2]); + s[0] += s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[3] -= s[10]; + s[11] += s[3] + 0x1b93fbbau; + s[1] = (s[1] ^ s[11]) * 0xad24de07u; + s[7] ^= s[1] ^ 0xf567e775u; + s[11] ^= s[7]; + s[13] = (s[13] ^ s[11]) * 0xb2957691u; + s[7] = mh_rotl(s[7], 20u) + s[13]; + s[13] *= (s[7] | 1u); + s[10] += s[13]; + s[13] ^= s[10]; + s[2] ^= s[13]; + s[6] ^= s[2]; + s[11] += s[6] + 0xa3624a2au; + s[13] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[13], 23u); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[5] -= s[7]; + s[0] ^= s[5]; + s[7] -= s[0]; + s[4] += s[7]; + s[12] += s[4] + 0x2c1f1085u; + s[11] = mh_rotl(s[11] ^ s[12], 14u); + s[9] += s[11] + 0xfdecf3f9u; + s[5] += s[9] + 0x2c06a4fau; + s[0] ^= (s[5] & s[12]); + s[11] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 22u) + s[11]; + s[2] = mh_rotl(s[2], 23u) + s[5]; + s[14] = (s[14] ^ s[2]) * 0x953e8e65u; + s[1] = mh_rotl(s[1], 4u) + s[14]; + s[13] = (s[13] ^ s[1]) * 0xb422e8dfu; + s[5] += s[13]; + s[8] = s[8] * 0xdd24c5ddu + s[5]; + s[15] *= (s[8] | 1u); + s[13] -= s[15]; + s[5] += s[13]; + s[8] += (s[5] | s[0]); + s[4] = (s[4] ^ s[8]) * 0x90f74f8du; + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[8] ^= s[10]; + s[14] = (s[14] ^ s[8]) * 0x68eea367u; + s[13] += s[14] + 0x4bf33e83u; + s[8] = (s[8] ^ s[13]) * 0xe5bb45edu; + s[13] += (s[8] | s[1]); + s[15] ^= s[13] ^ 0xffc7db9bu; + s[3] += s[15]; + s[0] ^= s[3]; + s[15] = mh_rotl(s[15] ^ s[0], 9u); + s[12] -= s[15]; + s[8] ^= s[12]; + s[5] += s[8] + 0x8c8db6c6u; + s[9] -= s[5]; + s[4] ^= s[9]; + s[1] = (s[1] ^ s[4]) * 0xcdb30e8bu; + s[10] += s[1]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[11] *= (s[15] | 1u); + s[8] = (s[8] ^ s[11]) * 0x1ac4b2f9u; + s[11] += s[8]; + s[10] = mh_rotl(s[10] ^ s[11], 2u); + s[1] -= s[10]; + s[6] ^= (s[1] & s[5]); + s[10] = (s[10] ^ s[6]) * 0x7f568bd3u; + s[1] = (s[1] ^ s[10]) * 0x9987ff9bu; + s[2] ^= s[1] ^ 0xc9b72de7u; + s[3] += s[2]; + s[7] = mh_rotl(s[7] ^ s[3], 14u); + s[1] = mh_rotl(s[1] ^ s[7], 17u); + s[11] *= (s[1] | 1u); + s[15] -= s[11]; + s[13] ^= s[15]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[9] += s[13]; + s[1] = s[1] * 0xfeea9fa1u + s[9]; + s[8] = s[8] * 0xcfe61b7fu + s[1]; + s[4] -= s[8]; + s[0] += s[4] + 0x73688400u; +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_5(uint* s) { + s[1] ^= s[0] ^ 0x7be05e0cu; + s[8] ^= s[1] ^ 0xbb15eaa7u; + s[3] *= (s[8] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[6] ^= s[10]; + s[1] += s[6]; + s[2] = (s[2] ^ s[1]) * 0x315dc983u; + s[3] += s[2]; + s[12] += s[3] + 0x503a8a69u; + s[7] ^= (s[12] & s[8]); + s[11] = (s[11] ^ s[7]) * 0x99203cd1u; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[5] += s[13]; + s[13] = (s[13] ^ s[5]) * 0x290906f1u; + s[6] += (s[13] | s[11]); + s[14] *= (s[6] | 1u); + s[10] += s[14]; + s[12] = mh_rotl(s[12] ^ s[10], 10u); + s[11] += s[12]; + s[1] ^= (s[11] & s[8]); + s[14] += s[1] + 0xb8346947u; + s[10] = s[10] * 0x973f37cdu + s[14]; + s[11] -= s[10]; + s[8] *= (s[11] | 1u); + s[14] ^= s[8]; + s[8] += s[14]; + s[0] = (s[0] ^ s[8]) * 0x82fd2f6du; + s[3] ^= (s[0] & s[5]); + s[10] += s[3]; + s[1] -= s[10]; + s[0] ^= s[1]; + s[5] -= s[0]; + s[11] *= (s[5] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 4u); + s[5] -= s[9]; + s[12] ^= s[5]; + s[15] = mh_rotl(s[15], 19u) + s[12]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 23u); + s[10] ^= s[15] ^ 0x3e4fd17bu; + s[7] ^= (s[10] & s[13]); + s[1] ^= s[7]; + s[10] = (s[10] ^ s[1]) * 0xa58c234du; + s[2] += s[10]; + s[7] += s[2]; + s[14] = mh_rotl(s[14] ^ s[7], 14u); + s[15] ^= s[14]; + s[11] ^= s[15] ^ 0x031afa2eu; + s[8] ^= (s[11] & s[12]); + s[4] = mh_rotl(s[4] ^ s[8], 14u); + s[15] *= (s[4] | 1u); + s[14] *= (s[15] | 1u); + s[1] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[1], 17u); + s[6] -= s[0]; + s[11] ^= s[6]; + s[7] *= (s[11] | 1u); + s[15] += s[7]; + s[1] = (s[1] ^ s[15]) * 0x65c90267u; + s[9] ^= s[1]; + s[12] = (s[12] ^ s[9]) * 0x37b05dbdu; + s[5] += s[12]; + s[1] += s[5] + 0x9ef7f880u; + s[13] -= s[1]; + s[8] = (s[8] ^ s[13]) * 0x4dccc6e3u; + s[15] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 15u) + s[15]; + s[4] = s[4] * 0xa7087673u + s[10]; + s[7] += s[4]; + s[4] = mh_rotl(s[4], 25u) + s[7]; + s[1] = s[1] * 0xd0d20effu + s[4]; + s[11] = mh_rotl(s[11], 3u) + s[1]; + s[15] ^= (s[11] & s[10]); + s[6] += s[15]; + s[10] *= (s[6] | 1u); + s[0] += s[10]; + s[15] ^= s[0]; + s[3] += (s[15] | s[13]); + s[8] += s[3]; + s[13] = s[13] * 0x647918d1u + s[8]; + s[4] -= s[13]; + s[1] -= s[4]; + s[8] -= s[1]; + s[0] += s[8]; + s[4] ^= s[0]; + s[2] = mh_rotl(s[2], 16u) + s[4]; + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[13] -= s[5]; + s[14] ^= s[13]; + s[13] += s[14] + 0x09e91881u; + s[10] = mh_rotl(s[10], 1u) + s[13]; + s[15] *= (s[10] | 1u); + s[3] = mh_rotl(s[3], 22u) + s[15]; + s[5] *= (s[3] | 1u); + s[0] = mh_rotl(s[0], 13u) + s[5]; + s[2] ^= s[0]; + s[7] ^= s[2]; + s[4] += s[7]; + s[8] += s[4]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0xf334efabu; + s[11] ^= s[4]; + s[1] -= s[11]; + s[5] += s[1]; + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[7] = mh_rotl(s[7], 2u) + s[14]; + s[12] = s[12] * 0x9d3fac25u + s[7]; + s[10] = (s[10] ^ s[12]) * 0xd7f82753u; + s[12] = (s[12] ^ s[10]) * 0xa500b1e9u; + s[7] ^= (s[12] & s[11]); + s[3] += s[7]; + s[6] += s[3]; + s[13] ^= (s[6] & s[0]); + s[15] *= (s[13] | 1u); + s[8] ^= s[15]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[4] ^= s[15] ^ 0xbf1018b9u; + s[15] *= (s[4] | 1u); + s[13] += s[15] + 0xa0aadb65u; + s[3] = s[3] * 0x1c2c8781u + s[13]; + s[12] += s[3]; + s[4] ^= (s[12] & s[6]); + s[5] += s[4]; + s[0] ^= s[5] ^ 0x15727cfcu; + s[1] ^= s[0]; + s[3] ^= s[1] ^ 0x8ec257dau; + s[12] += s[3]; + s[4] += s[12]; + s[1] ^= (s[4] & s[2]); + s[14] = mh_rotl(s[14], 30u) + s[1]; + s[4] ^= s[14] ^ 0x871677edu; + s[3] -= s[4]; + s[12] ^= s[3] ^ 0xafa32cfbu; + s[0] *= (s[12] | 1u); + s[2] += s[0]; + s[10] -= s[2]; + s[15] ^= s[10] ^ 0xfb3ab53eu; + s[0] += s[15] + 0xd703e4c6u; + s[13] += s[0] + 0xdd7d064eu; + s[4] ^= s[13]; + s[1] ^= s[4]; + s[7] = mh_rotl(s[7] ^ s[1], 18u); + s[5] = mh_rotl(s[5] ^ s[7], 5u); + s[13] -= s[5]; + s[5] += s[13]; + s[2] *= (s[5] | 1u); + s[7] -= s[2]; + s[0] *= (s[7] | 1u); + s[7] ^= s[0]; + s[11] ^= s[7] ^ 0x47fc5334u; + s[10] -= s[11]; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[7] = (s[7] ^ s[14]) * 0xba5f2ba9u; + s[0] += s[7]; + s[9] ^= s[0]; + s[12] = mh_rotl(s[12] ^ s[9], 31u); + s[15] += s[12]; + s[11] += s[15] + 0x67321a5fu; + s[14] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[14], 20u); + s[0] *= (s[2] | 1u); + s[10] += (s[0] | s[6]); + s[1] ^= s[10]; + s[10] += s[1]; + s[15] = s[15] * 0x968038e9u + s[10]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[4], 30u); + s[1] = mh_rotl(s[1], 9u) + s[7]; + s[7] += s[1] + 0x36fd51c7u; + s[0] = mh_rotl(s[0] ^ s[7], 4u); + s[9] = mh_rotl(s[9] ^ s[0], 13u); + s[0] = (s[0] ^ s[9]) * 0xe60c1fa9u; + s[3] = s[3] * 0xb184ef99u + s[0]; + s[14] += s[3]; + s[11] = mh_rotl(s[11], 3u) + s[14]; + s[1] += s[11]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[6] -= s[15]; + s[7] = (s[7] ^ s[6]) * 0x55b55f6fu; + s[15] *= (s[7] | 1u); + s[4] += (s[15] | s[13]); + s[5] -= s[4]; + s[7] = s[7] * 0xfbc2da35u + s[5]; + s[15] = (s[15] ^ s[7]) * 0x1fd2b55fu; + s[0] = mh_rotl(s[0] ^ s[15], 8u); + s[7] = mh_rotl(s[7], 15u) + s[0]; + s[5] = (s[5] ^ s[7]) * 0x4f355b4bu; + s[4] -= s[5]; + s[1] += (s[4] | s[10]); + s[0] -= s[1]; + s[4] ^= s[0]; + s[15] ^= s[4]; + s[7] = mh_rotl(s[7], 28u) + s[15]; + s[3] ^= s[7] ^ 0xb688911au; + s[1] += s[3] + 0x1c2be1ceu; + s[0] ^= s[1]; + s[7] += s[0] + 0x2850aa80u; + s[9] = mh_rotl(s[9] ^ s[7], 10u); + s[6] += s[9]; + s[13] ^= s[6] ^ 0xa94fde4bu; + s[1] = mh_rotl(s[1] ^ s[13], 6u); + s[13] ^= s[1] ^ 0x62707293u; + s[5] ^= s[13]; + s[15] += s[5]; + s[13] = s[13] * 0x229b940bu + s[15]; + s[4] ^= s[13] ^ 0x1b81e180u; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[14] += (s[7] | s[13]); + s[6] ^= s[14]; + s[1] += (s[6] | s[14]); + s[0] *= (s[1] | 1u); + s[13] ^= (s[0] & s[2]); + s[11] = (s[11] ^ s[13]) * 0x416d09a1u; + s[15] = s[15] * 0xe913f3ddu + s[11]; + s[1] -= s[15]; + s[15] ^= s[1]; + s[6] ^= s[15]; + s[8] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[8], 26u); + s[15] = s[15] * 0xc4f501e3u + s[2]; + s[10] = mh_rotl(s[10], 19u) + s[15]; + s[4] *= (s[10] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 1u); + s[15] ^= s[5] ^ 0x9b7a52afu; + s[3] *= (s[15] | 1u); + s[1] = (s[1] ^ s[3]) * 0x45c760cdu; + s[8] += s[1]; + s[5] = mh_rotl(s[5], 23u) + s[8]; + s[0] += (s[5] | s[2]); + s[14] ^= s[0] ^ 0xe21ab661u; + s[9] += s[14]; + s[2] *= (s[9] | 1u); + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[7] = mh_rotl(s[7] ^ s[1], 2u); + s[14] = mh_rotl(s[14] ^ s[7], 30u); + s[15] += s[14] + 0x25ec367cu; + s[1] += s[15]; + s[4] = mh_rotl(s[4], 30u) + s[1]; + s[6] += s[4] + 0x00a140beu; + s[11] ^= s[6]; + s[3] = mh_rotl(s[3] ^ s[11], 24u); + s[8] = (s[8] ^ s[3]) * 0xa4445dd5u; + s[11] ^= s[8]; + s[4] += s[11] + 0xdd82d9edu; + s[7] = mh_rotl(s[7], 20u) + s[4]; + s[10] = (s[10] ^ s[7]) * 0xbc2a9345u; + s[15] = s[15] * 0xe9d04645u + s[10]; + s[4] += s[15]; + s[0] += s[4]; + s[5] = mh_rotl(s[5] ^ s[0], 20u); + s[8] -= s[5]; + s[13] -= s[8]; + s[8] = s[8] * 0xdbaee3dfu + s[13]; + s[7] = s[7] * 0xa78437ddu + s[8]; + s[5] *= (s[7] | 1u); + s[11] = (s[11] ^ s[5]) * 0x7697be93u; + s[8] *= (s[11] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[10] = mh_rotl(s[10] ^ s[9], 4u); + s[4] += s[10] + 0xcb367e30u; + s[7] += (s[4] | s[1]); + s[8] = mh_rotl(s[8] ^ s[7], 1u); + s[9] = (s[9] ^ s[8]) * 0xebbaa385u; + s[8] += s[9]; + s[7] = mh_rotl(s[7] ^ s[8], 30u); + s[13] = mh_rotl(s[13] ^ s[7], 28u); + s[3] ^= s[13] ^ 0x0da68544u; + s[6] *= (s[3] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[6] = mh_rotl(s[6] ^ s[15], 17u); + s[3] ^= s[6]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[12] = s[12] * 0xc2ae0b9du + s[11]; + s[1] += s[12]; + s[12] += s[1]; + s[2] ^= s[12] ^ 0x7256c79fu; + s[10] = mh_rotl(s[10] ^ s[2], 22u); + s[4] += s[10]; + s[8] = mh_rotl(s[8] ^ s[4], 3u); + s[4] = (s[4] ^ s[8]) * 0x8220660bu; + s[3] -= s[4]; + s[1] ^= s[3]; + s[14] ^= (s[1] & s[4]); + s[5] += s[14]; + s[6] = mh_rotl(s[6], 6u) + s[5]; + s[12] = (s[12] ^ s[6]) * 0xdd90e2b3u; + s[5] = mh_rotl(s[5], 16u) + s[12]; + s[13] += s[5]; + s[2] -= s[13]; + s[5] = mh_rotl(s[5], 28u) + s[2]; + s[0] -= s[5]; + s[14] = (s[14] ^ s[0]) * 0xd9818695u; + s[3] = s[3] * 0x56cff173u + s[14]; + s[12] += s[3]; + s[7] ^= s[12]; + s[4] += s[7] + 0xc664354au; + s[10] ^= s[4]; + s[12] = mh_rotl(s[12] ^ s[10], 21u); + s[5] += (s[12] | s[10]); + s[13] ^= s[5]; + s[3] -= s[13]; + s[10] = (s[10] ^ s[3]) * 0x0f3ce629u; + s[2] += s[10]; + s[6] = mh_rotl(s[6], 27u) + s[2]; + s[3] = mh_rotl(s[3], 23u) + s[6]; + s[8] -= s[3]; + s[2] *= (s[8] | 1u); + s[5] ^= s[2] ^ 0x310625e1u; + s[8] -= s[5]; + s[0] += s[8]; + s[15] *= (s[0] | 1u); + s[6] = (s[6] ^ s[15]) * 0x427d27bbu; + s[11] += s[6] + 0x76730d6fu; + s[15] += s[11] + 0xdac6c08au; + s[7] = mh_rotl(s[7] ^ s[15], 13u); + s[14] += s[7] + 0x6911002du; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[8] = s[8] * 0x56b023efu + s[4]; + s[4] ^= s[8] ^ 0x9fd3970fu; + s[5] += s[4] + 0x6abd4154u; + s[7] += (s[5] | s[6]); + s[6] ^= s[7]; + s[10] += s[6]; + s[9] = (s[9] ^ s[10]) * 0xe4b1ea8bu; + s[6] ^= s[9]; + s[7] ^= s[6] ^ 0xe75c3c42u; + s[10] = (s[10] ^ s[7]) * 0xb59266bbu; + s[2] *= (s[10] | 1u); + s[8] ^= s[2]; + s[14] = (s[14] ^ s[8]) * 0xdbf4259fu; + s[2] = s[2] * 0x7009386du + s[14]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 25u); + s[2] ^= s[13] ^ 0x60dba7dau; + s[5] = mh_rotl(s[5] ^ s[2], 28u); + s[4] ^= s[5]; + s[11] += s[4] + 0xeb951dd9u; + s[4] ^= s[11]; + s[13] ^= s[4] ^ 0xebf6468au; + s[9] = (s[9] ^ s[13]) * 0xdd79814du; + s[3] = (s[3] ^ s[9]) * 0x8e5d0c8du; + s[4] = mh_rotl(s[4] ^ s[3], 11u); + s[6] ^= s[4]; + s[12] = (s[12] ^ s[6]) * 0x54bdc49fu; + s[2] ^= s[12]; + s[6] = mh_rotl(s[6], 21u) + s[2]; + s[3] = mh_rotl(s[3], 4u) + s[6]; + s[7] = mh_rotl(s[7], 1u) + s[3]; + s[8] += s[7]; + s[7] ^= s[8] ^ 0xea9b7589u; + s[14] = (s[14] ^ s[7]) * 0x97ae5521u; + s[4] += s[14]; + s[12] = (s[12] ^ s[4]) * 0x22320c0du; + s[11] ^= s[12] ^ 0x497dff74u; + s[7] ^= s[11]; + s[3] *= (s[7] | 1u); + s[13] = mh_rotl(s[13] ^ s[3], 19u); + s[5] ^= s[13]; + s[15] += (s[5] | s[1]); + s[5] ^= s[15]; + s[2] = s[2] * 0xbadcbfe5u + s[5]; + s[6] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[6], 9u); + s[6] += s[9] + 0xf8e24c5bu; + s[4] -= s[6]; + s[1] ^= s[4]; + s[13] -= s[1]; + s[6] ^= s[13]; + s[14] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[14], 15u); + s[0] = (s[0] ^ s[4]) * 0x5cf11fa1u; + s[3] = mh_rotl(s[3] ^ s[0], 9u); + s[15] *= (s[3] | 1u); + s[7] *= (s[15] | 1u); + s[8] += s[7] + 0x2e6f71e5u; + s[5] = mh_rotl(s[5], 26u) + s[8]; + s[7] ^= s[5]; + s[0] = (s[0] ^ s[7]) * 0x5ea96101u; + s[1] ^= s[0] ^ 0xd397e563u; + s[6] *= (s[1] | 1u); + s[10] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[10], 24u); + s[0] -= s[7]; + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] = s[12] * 0x34af385du + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[12] ^= s[4]; + s[7] -= s[12]; + s[6] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 19u); + s[0] = mh_rotl(s[0] ^ s[7], 11u); + s[5] -= s[0]; + s[11] ^= s[5]; + s[0] ^= s[11] ^ 0xbe1c3b74u; + s[5] += (s[0] | s[9]); + s[11] += (s[5] | s[4]); + s[15] += s[11]; + s[10] ^= s[15]; + s[12] = s[12] * 0x543326f5u + s[10]; + s[14] = s[14] * 0x91113863u + s[12]; + s[1] = (s[1] ^ s[14]) * 0xc15f4501u; + s[10] += s[1]; + s[9] += s[10]; + s[8] += s[9] + 0x7e4a0930u; + s[15] += s[8]; + s[5] += s[15]; + s[1] -= s[5]; + s[15] += s[1]; + s[6] = mh_rotl(s[6] ^ s[15], 22u); + s[2] ^= (s[6] & s[10]); + s[1] = (s[1] ^ s[2]) * 0xfa5dde9bu; + s[13] = mh_rotl(s[13] ^ s[1], 8u); + s[1] -= s[13]; + s[9] += s[1] + 0x3f1d7c19u; + s[2] *= (s[9] | 1u); + s[8] = (s[8] ^ s[2]) * 0xde05403bu; + s[9] += s[8]; + s[6] += s[9]; + s[13] = (s[13] ^ s[6]) * 0xcb53bdfdu; + s[14] *= (s[13] | 1u); + s[10] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 1u); + s[9] = s[9] * 0xc38dfca1u + s[13]; + s[15] = mh_rotl(s[15] ^ s[9], 24u); + s[2] *= (s[15] | 1u); + s[15] ^= s[2] ^ 0x4f0903bau; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[10] = (s[10] ^ s[2]) * 0xa4b3a383u; + s[6] *= (s[10] | 1u); + s[13] *= (s[6] | 1u); + s[1] *= (s[13] | 1u); + s[11] = (s[11] ^ s[1]) * 0xbbb47281u; + s[6] += s[11]; + s[12] += s[6]; + s[0] ^= s[12]; + s[12] -= s[0]; + s[4] += s[12]; + s[11] ^= s[4] ^ 0x4ae1d374u; + s[1] ^= s[11]; + s[6] ^= (s[1] & s[5]); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0xd088ac95u; + s[12] = (s[12] ^ s[6]) * 0xacf99fa9u; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[11] = mh_rotl(s[11], 21u) + s[14]; + s[2] ^= s[11] ^ 0x83eccd1eu; + s[15] ^= s[2]; + s[8] = s[8] * 0x51ffe091u + s[15]; + s[2] += (s[8] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 25u); + s[5] = mh_rotl(s[5] ^ s[13], 18u); + s[9] -= s[5]; + s[6] = (s[6] ^ s[9]) * 0xeb0ab863u; + s[10] ^= s[6] ^ 0xadb4a85eu; + s[11] += s[10]; + s[15] = mh_rotl(s[15], 25u) + s[11]; + s[8] ^= s[15] ^ 0x611f8ebbu; + s[4] += s[8] + 0x6c1de9f1u; + s[14] *= (s[4] | 1u); + s[3] *= (s[14] | 1u); + s[14] += (s[3] | s[8]); + s[10] ^= s[14]; + s[12] ^= s[10] ^ 0x1379b7f0u; + s[13] += s[12]; + s[6] -= s[13]; + s[5] += s[6]; + s[14] ^= s[5] ^ 0x86fda0bcu; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[14] += s[4] + 0xe3857cfau; + s[5] ^= s[14] ^ 0x983d6f15u; + s[2] *= (s[5] | 1u); + s[11] = (s[11] ^ s[2]) * 0x71d715abu; + s[15] += s[11] + 0x954d0d31u; + s[3] ^= (s[15] & s[13]); + s[0] = mh_rotl(s[0], 31u) + s[3]; + s[3] *= (s[0] | 1u); + s[12] = s[12] * 0x553df879u + s[3]; + s[14] = mh_rotl(s[14] ^ s[12], 27u); + s[7] = mh_rotl(s[7] ^ s[14], 17u); + s[0] += (s[7] | s[5]); + s[3] ^= s[0]; + s[5] ^= (s[3] & s[11]); + s[2] ^= s[5] ^ 0xdf79b0e2u; + s[6] = mh_rotl(s[6], 7u) + s[2]; + s[12] -= s[6]; + s[10] += s[12]; + s[11] ^= s[10] ^ 0xda8b8a64u; + s[0] ^= s[11]; + s[1] = (s[1] ^ s[0]) * 0xf8a8b0d1u; + s[4] = mh_rotl(s[4] ^ s[1], 3u); + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[7] = (s[7] ^ s[3]) * 0x411cdf35u; + s[6] += s[7]; + s[10] -= s[6]; + s[5] = mh_rotl(s[5], 16u) + s[10]; + s[4] += s[5]; + s[1] += s[4]; + s[0] ^= (s[1] & s[6]); + s[13] ^= s[0]; + s[9] = mh_rotl(s[9], 27u) + s[13]; + s[6] = mh_rotl(s[6], 3u) + s[9]; + s[1] += s[6] + 0xcea64d05u; + s[3] = s[3] * 0xeebb97adu + s[1]; + s[14] ^= s[3] ^ 0x892c8d98u; + s[11] ^= (s[14] & s[9]); + s[0] = (s[0] ^ s[11]) * 0xdff5cedfu; + s[14] -= s[0]; + s[6] -= s[14]; + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[11] += (s[3] | s[9]); + s[7] = mh_rotl(s[7] ^ s[11], 22u); + s[10] = mh_rotl(s[10], 2u) + s[7]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[1] -= s[4]; + s[0] += s[1] + 0x775d0372u; + s[13] *= (s[0] | 1u); + s[3] += s[13]; + s[4] += (s[3] | s[9]); + s[12] = (s[12] ^ s[4]) * 0x687c0365u; + s[13] = mh_rotl(s[13], 2u) + s[12]; + s[4] = (s[4] ^ s[13]) * 0x35a16ec5u; + s[9] ^= s[4]; + s[12] += s[9]; + s[14] -= s[12]; + s[5] *= (s[14] | 1u); + s[14] *= (s[5] | 1u); + s[13] += (s[14] | s[4]); + s[0] -= s[13]; + s[15] = s[15] * 0x621c0ea7u + s[0]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[15] = (s[15] ^ s[6]) * 0x05d14bc7u; + s[11] -= s[15]; + s[9] += (s[11] | s[13]); + s[4] += s[9]; + s[12] *= (s[4] | 1u); + s[11] ^= s[12]; + s[7] = mh_rotl(s[7], 28u) + s[11]; + s[5] = mh_rotl(s[5] ^ s[7], 12u); + s[8] = mh_rotl(s[8] ^ s[5], 17u); + s[10] ^= s[8]; + s[13] ^= s[10]; + s[7] *= (s[13] | 1u); + s[8] += s[7]; + s[15] ^= s[8]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[0] = (s[0] ^ s[4]) * 0xd8e75b75u; + s[8] -= s[0]; + s[11] += s[8]; + s[13] -= s[11]; + s[9] ^= s[13]; + s[12] = (s[12] ^ s[9]) * 0x3899fbc3u; + s[0] = mh_rotl(s[0], 17u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 26u); + s[1] = mh_rotl(s[1] ^ s[4], 23u); + s[14] = mh_rotl(s[14] ^ s[1], 25u); + s[12] = mh_rotl(s[12] ^ s[14], 27u); + s[11] -= s[12]; + s[7] ^= s[11]; + s[11] -= s[7]; + s[15] *= (s[11] | 1u); + s[7] += (s[15] | s[11]); + s[3] ^= s[7] ^ 0xfd1ba1b5u; + s[13] += s[3]; + s[14] += s[13] + 0x405242e4u; + s[10] = (s[10] ^ s[14]) * 0xeced21d1u; + s[0] -= s[10]; + s[1] = (s[1] ^ s[0]) * 0xcb862135u; + s[5] += s[1]; + s[2] -= s[5]; + s[15] = s[15] * 0x499907b3u + s[2]; + s[11] += (s[15] | s[8]); + s[14] ^= s[11]; + s[7] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[7], 27u); + s[10] += s[12] + 0x8f39e74bu; + s[5] = (s[5] ^ s[10]) * 0x2440407du; + s[1] += s[5]; + s[12] += s[1]; + s[4] *= (s[12] | 1u); + s[1] += s[4] + 0xcdf92480u; + s[15] ^= s[1]; + s[4] += s[15]; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[4] = mh_rotl(s[4], 6u) + s[1]; + s[0] *= (s[4] | 1u); + s[1] ^= s[0]; + s[7] = s[7] * 0xcac7e2ddu + s[1]; + s[11] += s[7]; + s[12] ^= s[11]; + s[15] = s[15] * 0x413393afu + s[12]; + s[8] = (s[8] ^ s[15]) * 0x25fe3939u; + s[14] *= (s[8] | 1u); + s[13] = s[13] * 0x98224c21u + s[14]; + s[8] -= s[13]; + s[2] ^= s[8] ^ 0xdc7b1f4au; + s[1] += s[2]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[8] -= s[10]; + s[11] *= (s[8] | 1u); + s[13] *= (s[11] | 1u); + s[14] += (s[13] | s[5]); + s[12] += (s[14] | s[10]); + s[10] += s[12] + 0xb0848c0bu; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 20u); + s[13] ^= s[4]; + s[7] *= (s[13] | 1u); + s[13] = mh_rotl(s[13] ^ s[7], 21u); + s[14] = mh_rotl(s[14] ^ s[13], 26u); + s[12] ^= s[14]; + s[8] += s[12]; + s[0] += s[8]; + s[12] = s[12] * 0xd28af0afu + s[0]; + s[8] += s[12] + 0xd77f1cfcu; + s[9] *= (s[8] | 1u); + s[14] *= (s[9] | 1u); + s[3] -= s[14]; + s[2] += s[3]; + s[12] ^= s[2]; + s[8] -= s[12]; + s[5] += s[8]; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[2] ^= s[15]; + s[5] -= s[2]; + s[8] ^= s[5]; + s[1] += s[8]; + s[0] ^= s[1]; + s[12] += s[0]; + s[7] ^= (s[12] & s[3]); + s[13] += (s[7] | s[0]); + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[2] = (s[2] ^ s[12]) * 0xfd12ecd1u; + s[15] *= (s[2] | 1u); + s[0] ^= s[15]; + s[2] = mh_rotl(s[2], 27u) + s[0]; + s[6] += s[2]; + s[10] += s[6]; + s[0] ^= s[10]; + s[7] = mh_rotl(s[7], 29u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[7], 19u); + s[3] = (s[3] ^ s[9]) * 0xff04d05fu; + s[13] += (s[3] | s[4]); + s[15] ^= s[13]; + s[7] += s[15]; + s[14] ^= s[7]; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[3] += (s[4] | s[6]); + s[12] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 30u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[8] += s[1] + 0x0467b529u; + s[9] += s[8]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[7] ^= (s[15] & s[8]); + s[8] = (s[8] ^ s[7]) * 0x278c5dfdu; + s[3] ^= s[8] ^ 0xbc598dedu; + s[1] = mh_rotl(s[1] ^ s[3], 9u); + s[4] += s[1]; + s[3] += (s[4] | s[13]); + s[10] = (s[10] ^ s[3]) * 0xcae4be05u; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[4] ^= s[12]; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[6] = mh_rotl(s[6] ^ s[7], 9u); + s[8] = (s[8] ^ s[6]) * 0xd9f36acdu; + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[11] ^= (s[7] & s[14]); + s[14] = mh_rotl(s[14], 3u) + s[11]; + s[8] = s[8] * 0x0ae9038fu + s[14]; + s[3] *= (s[8] | 1u); + s[13] -= s[3]; + s[5] = s[5] * 0x70529de3u + s[13]; + s[3] ^= (s[5] & s[6]); + s[14] -= s[3]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[13] += (s[0] | s[5]); + s[2] *= (s[13] | 1u); + s[4] -= s[2]; + s[1] = mh_rotl(s[1], 7u) + s[4]; + s[10] += s[1]; + s[15] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[15], 24u); + s[15] ^= s[11]; + s[10] *= (s[15] | 1u); + s[3] ^= s[10] ^ 0xcb85082cu; + s[10] ^= s[3] ^ 0xf9bf9766u; + s[11] -= s[10]; + s[3] = (s[3] ^ s[11]) * 0x87f2ce8bu; + s[8] = s[8] * 0x0ea0fcc7u + s[3]; + s[1] = mh_rotl(s[1], 9u) + s[8]; + s[10] -= s[1]; + s[6] *= (s[10] | 1u); + s[11] = s[11] * 0x0c531b4bu + s[6]; + s[8] += s[11]; + s[15] -= s[8]; + s[3] *= (s[15] | 1u); + s[11] = (s[11] ^ s[3]) * 0xad08649fu; + s[9] ^= s[11]; + s[14] -= s[9]; + s[12] += s[14]; + s[9] += s[12] + 0x232cf99eu; + s[7] ^= s[9]; + s[15] ^= (s[7] & s[8]); + s[2] += s[15] + 0x32beef7bu; + s[11] = mh_rotl(s[11], 8u) + s[2]; + s[14] -= s[11]; + s[10] += (s[14] | s[12]); + s[12] = s[12] * 0xa6ec34d5u + s[10]; + s[5] = mh_rotl(s[5] ^ s[12], 7u); + s[8] = mh_rotl(s[8], 25u) + s[5]; + s[10] ^= s[8] ^ 0xefb5c226u; + s[3] = mh_rotl(s[3] ^ s[10], 16u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[6] ^= s[4]; + s[14] = mh_rotl(s[14], 28u) + s[6]; + s[5] = mh_rotl(s[5], 5u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[5], 4u); + s[5] += s[3] + 0xe3dab3fbu; + s[15] = mh_rotl(s[15], 3u) + s[5]; + s[14] += (s[15] | s[9]); + s[0] += (s[14] | s[2]); + s[1] += (s[0] | s[15]); + s[6] *= (s[1] | 1u); + s[13] += (s[6] | s[14]); +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_6(uint* s) { + s[5] = mh_rotl(s[5], 3u) + s[0]; + s[2] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[2], 11u); + s[11] ^= s[9] ^ 0x39e32e1du; + s[3] += s[11]; + s[1] = mh_rotl(s[1] ^ s[3], 22u); + s[5] ^= s[1]; + s[8] = mh_rotl(s[8], 4u) + s[5]; + s[3] = mh_rotl(s[3] ^ s[8], 12u); + s[4] += s[3]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[3] += s[2]; + s[8] -= s[3]; + s[5] -= s[8]; + s[1] *= (s[5] | 1u); + s[9] ^= s[1] ^ 0xd81d55beu; + s[7] += s[9]; + s[3] += s[7]; + s[4] = mh_rotl(s[4] ^ s[3], 15u); + s[5] -= s[4]; + s[0] *= (s[5] | 1u); + s[3] = (s[3] ^ s[0]) * 0x4a19e371u; + s[7] = mh_rotl(s[7] ^ s[3], 10u); + s[11] += s[7]; + s[8] = s[8] * 0x259e0d2fu + s[11]; + s[3] += s[8] + 0xac463d29u; + s[9] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[9], 8u); + s[6] *= (s[10] | 1u); + s[1] ^= s[6] ^ 0xb275cab7u; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[10] *= (s[12] | 1u); + s[7] -= s[10]; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[3] += s[4] + 0xc15298f3u; + s[14] += s[3]; + s[0] += s[14] + 0xb147fc8bu; + s[8] = (s[8] ^ s[0]) * 0x2016760du; + s[6] = (s[6] ^ s[8]) * 0x54e0697fu; + s[1] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[1], 11u); + s[2] += (s[3] | s[13]); + s[8] ^= s[2]; + s[5] += s[8]; + s[8] ^= (s[5] & s[4]); + s[13] *= (s[8] | 1u); + s[11] -= s[13]; + s[5] ^= s[11]; + s[13] = mh_rotl(s[13], 28u) + s[5]; + s[14] *= (s[13] | 1u); + s[11] ^= s[14] ^ 0x301ae49du; + s[13] -= s[11]; + s[5] += s[13]; + s[9] ^= s[5]; + s[2] += s[9]; + s[5] ^= s[2]; + s[6] *= (s[5] | 1u); + s[2] += s[6]; + s[10] -= s[2]; + s[6] = s[6] * 0x7f506861u + s[10]; + s[12] ^= s[6] ^ 0xda5f5b6du; + s[6] = s[6] * 0x38d5001du + s[12]; + s[1] ^= s[6] ^ 0xc8f1c1dcu; + s[9] += s[1]; + s[3] = (s[3] ^ s[9]) * 0x8e4a88a5u; + s[7] = mh_rotl(s[7], 18u) + s[3]; + s[9] ^= s[7] ^ 0xbab40f93u; + s[13] += s[9]; + s[6] += s[13]; + s[11] ^= s[6]; + s[3] ^= s[11]; + s[10] *= (s[3] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 4u); + s[14] += s[6] + 0x0249afdau; + s[1] = s[1] * 0x86ebf639u + s[14]; + s[6] = mh_rotl(s[6], 25u) + s[1]; + s[10] *= (s[6] | 1u); + s[6] ^= s[10]; + s[3] -= s[6]; + s[1] ^= s[3] ^ 0xd9ca3a4fu; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[9] ^= s[5]; + s[5] = s[5] * 0x1457845du + s[9]; + s[11] = mh_rotl(s[11], 10u) + s[5]; + s[2] ^= (s[11] & s[3]); + s[15] *= (s[2] | 1u); + s[4] ^= s[15]; + s[7] += s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 1u); + s[0] = (s[0] ^ s[15]) * 0xb010e4d3u; + s[4] = mh_rotl(s[4] ^ s[0], 20u); + s[7] ^= (s[4] & s[3]); + s[2] ^= s[7]; + s[3] ^= s[2]; + s[11] ^= s[3]; + s[1] ^= s[11] ^ 0x35463538u; + s[7] ^= (s[1] & s[11]); + s[13] += s[7]; + s[1] = (s[1] ^ s[13]) * 0xc1e69efbu; + s[5] = mh_rotl(s[5], 16u) + s[1]; + s[1] = s[1] * 0x2e9b0e05u + s[5]; + s[15] -= s[1]; + s[12] += s[15]; + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[9] ^= s[7] ^ 0x990eced1u; + s[13] += s[9]; + s[8] += s[13]; + s[6] += s[8]; + s[14] ^= s[6] ^ 0xc88f98bdu; + s[1] += s[14]; + s[13] *= (s[1] | 1u); + s[5] ^= s[13]; + s[7] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 21u) + s[7]; + s[12] = mh_rotl(s[12], 1u) + s[1]; + s[7] *= (s[12] | 1u); + s[9] ^= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[9]; + s[4] ^= s[6] ^ 0x74363532u; + s[2] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[2], 25u); + s[0] *= (s[9] | 1u); + s[12] ^= s[0] ^ 0x0441459fu; + s[13] ^= s[12] ^ 0x662ed979u; + s[3] -= s[13]; + s[4] ^= s[3] ^ 0x1b2d8a07u; + s[8] = s[8] * 0xf7eec905u + s[4]; + s[14] = mh_rotl(s[14] ^ s[8], 27u); + s[0] ^= s[14]; + s[1] = mh_rotl(s[1], 30u) + s[0]; + s[15] += s[1] + 0xe1b48510u; + s[9] *= (s[15] | 1u); + s[4] = s[4] * 0x1d3d76ddu + s[9]; + s[11] *= (s[4] | 1u); + s[4] -= s[11]; + s[10] += s[4]; + s[15] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[15], 29u); + s[15] -= s[14]; + s[7] += s[15]; + s[0] = mh_rotl(s[0], 15u) + s[7]; + s[1] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[1], 13u); + s[10] += s[11]; + s[3] = mh_rotl(s[3] ^ s[10], 27u); + s[8] = mh_rotl(s[8], 31u) + s[3]; + s[7] += s[8]; + s[8] -= s[7]; + s[10] *= (s[8] | 1u); + s[12] -= s[10]; + s[0] = s[0] * 0x5817b1bbu + s[12]; + s[4] -= s[0]; + s[12] += s[4]; + s[15] -= s[12]; + s[0] = mh_rotl(s[0], 27u) + s[15]; + s[4] *= (s[0] | 1u); + s[5] *= (s[4] | 1u); + s[13] *= (s[5] | 1u); + s[7] *= (s[13] | 1u); + s[3] *= (s[7] | 1u); + s[6] += s[3]; + s[7] ^= s[6] ^ 0x229579c7u; + s[11] += s[7] + 0x00a25704u; + s[9] -= s[11]; + s[12] = mh_rotl(s[12], 24u) + s[9]; + s[9] ^= s[12]; + s[10] ^= (s[9] & s[1]); + s[0] = (s[0] ^ s[10]) * 0x2005a37fu; + s[14] ^= s[0] ^ 0x1c7da2c4u; + s[10] *= (s[14] | 1u); + s[12] += s[10]; + s[1] = mh_rotl(s[1] ^ s[12], 24u); + s[4] ^= (s[1] & s[14]); + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[10] = s[10] * 0xeaf112ebu + s[15]; + s[8] ^= (s[10] & s[15]); + s[3] *= (s[8] | 1u); + s[5] += (s[3] | s[8]); + s[6] += s[5] + 0xe4e3f161u; + s[9] += s[6]; + s[11] = mh_rotl(s[11] ^ s[9], 16u); + s[2] = mh_rotl(s[2] ^ s[11], 4u); + s[11] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[0] ^= s[3]; + s[11] ^= s[0]; + s[6] = (s[6] ^ s[11]) * 0x12a469a3u; + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[1]); + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[3] ^= s[15]; + s[11] -= s[3]; + s[9] = (s[9] ^ s[11]) * 0x344ce419u; + s[4] ^= s[9]; + s[10] ^= (s[4] & s[5]); + s[1] += s[10] + 0xea384c3cu; + s[10] += s[1]; + s[2] ^= s[10] ^ 0x1d75445cu; + s[8] += s[2]; + s[13] += s[8] + 0xbfc1d457u; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[14] -= s[3]; + s[0] ^= s[14] ^ 0x06e7726cu; + s[5] ^= s[0] ^ 0x51f1354du; + s[8] += (s[5] | s[11]); + s[11] += s[8]; + s[14] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[14], 13u); + s[11] -= s[13]; + s[0] += s[11]; + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[4] = (s[4] ^ s[3]) * 0x5eb788f9u; + s[0] += s[4]; + s[4] = mh_rotl(s[4], 31u) + s[0]; + s[8] ^= s[4]; + s[11] ^= s[8] ^ 0xdd96e051u; + s[3] -= s[11]; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[6] ^= s[4]; + s[15] += s[6] + 0x4f556eefu; + s[2] ^= s[15] ^ 0x296a5968u; + s[1] ^= s[2] ^ 0xc46f139au; + s[15] = (s[15] ^ s[1]) * 0x50702ea7u; + s[8] += s[15]; + s[1] = (s[1] ^ s[8]) * 0x6bafa739u; + s[0] += s[1]; + s[2] += (s[0] | s[1]); + s[1] = s[1] * 0x1f7250afu + s[2]; + s[6] ^= s[1] ^ 0x898b2247u; + s[1] += s[6] + 0xa7ddf08eu; + s[2] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[2], 11u); + s[1] = (s[1] ^ s[6]) * 0xf13b1879u; + s[9] += s[1]; + s[11] += s[9]; + s[3] += (s[11] | s[13]); + s[12] -= s[3]; + s[6] ^= s[12] ^ 0x5c3b531eu; + s[5] *= (s[6] | 1u); + s[14] ^= s[5]; + s[8] = (s[8] ^ s[14]) * 0x93599b23u; + s[13] ^= s[8]; + s[0] ^= s[13]; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[11] = (s[11] ^ s[7]) * 0x97c86fe1u; + s[4] ^= s[11]; + s[12] += (s[4] | s[8]); + s[14] ^= s[12] ^ 0x47aef842u; + s[4] += s[14]; + s[14] ^= s[4] ^ 0xef1987b2u; + s[10] -= s[14]; + s[11] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 17u); + s[14] += s[12]; + s[6] = mh_rotl(s[6], 15u) + s[14]; + s[10] += (s[6] | s[1]); + s[4] += s[10]; + s[10] ^= (s[4] & s[12]); + s[2] += s[10]; + s[14] -= s[2]; + s[10] ^= (s[14] & s[13]); + s[11] ^= s[10]; + s[15] ^= s[11]; + s[5] = mh_rotl(s[5] ^ s[15], 27u); + s[6] -= s[5]; + s[15] += s[6]; + s[8] ^= (s[15] & s[9]); + s[9] = (s[9] ^ s[8]) * 0x483ef9cfu; + s[13] ^= s[9]; + s[14] += s[13]; + s[5] += s[14] + 0x1978b9bau; + s[12] ^= s[5] ^ 0xc6a87e37u; + s[11] ^= s[12]; + s[0] += s[11] + 0x25e405bfu; + s[9] += s[0]; + s[12] += s[9]; + s[14] ^= (s[12] & s[6]); + s[0] -= s[14]; + s[7] = mh_rotl(s[7] ^ s[0], 16u); + s[11] ^= s[7]; + s[6] *= (s[11] | 1u); + s[10] = (s[10] ^ s[6]) * 0x365e6b61u; + s[7] ^= (s[10] & s[6]); + s[4] += s[7] + 0x88f34310u; + s[0] += s[4]; + s[13] *= (s[0] | 1u); + s[8] ^= s[13]; + s[2] += s[8]; + s[10] += s[2]; + s[3] += s[10]; + s[0] += s[3]; + s[9] = (s[9] ^ s[0]) * 0xc6ec1ff1u; + s[10] += s[9]; + s[13] ^= (s[10] & s[6]); + s[2] = (s[2] ^ s[13]) * 0xb02a7defu; + s[1] ^= (s[2] & s[6]); + s[8] += s[1]; + s[6] *= (s[8] | 1u); + s[0] = s[0] * 0xdbb96cf3u + s[6]; + s[6] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[4] ^= s[11]; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[6] = (s[6] ^ s[2]) * 0x72c49157u; + s[14] -= s[6]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[8] ^= s[5] ^ 0x1de584feu; + s[11] = mh_rotl(s[11] ^ s[8], 19u); + s[10] *= (s[11] | 1u); + s[12] += s[10]; + s[14] = (s[14] ^ s[12]) * 0x9befbf23u; + s[2] ^= s[14] ^ 0x958a58deu; + s[4] ^= s[2] ^ 0x255a3390u; + s[5] -= s[4]; + s[9] += s[5]; + s[11] += s[9]; + s[13] += (s[11] | s[15]); + s[4] += s[13] + 0x7f925d13u; + s[12] = mh_rotl(s[12], 20u) + s[4]; + s[13] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[13], 30u); + s[13] -= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[15] -= s[10]; + s[6] ^= s[15]; + s[13] += (s[6] | s[4]); + s[14] ^= s[13] ^ 0x935ed5ffu; + s[2] = mh_rotl(s[2] ^ s[14], 11u); + s[4] = mh_rotl(s[4], 23u) + s[2]; + s[10] += s[4] + 0x602f3d0cu; + s[4] += s[10]; + s[6] ^= (s[4] & s[2]); + s[12] *= (s[6] | 1u); + s[11] ^= s[12]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[9] = (s[9] ^ s[5]) * 0xf3832b37u; + s[15] += (s[9] | s[8]); + s[10] += s[15] + 0xb02d9997u; + s[13] = mh_rotl(s[13] ^ s[10], 15u); + s[9] += s[13] + 0xcf0e861au; + s[13] = mh_rotl(s[13] ^ s[9], 7u); + s[1] *= (s[13] | 1u); + s[0] *= (s[1] | 1u); + s[11] += s[0] + 0x60d0848au; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[1] ^= s[15] ^ 0x7a0f3dafu; + s[9] *= (s[1] | 1u); + s[12] = mh_rotl(s[12], 10u) + s[9]; + s[9] *= (s[12] | 1u); + s[5] -= s[9]; + s[0] ^= s[5]; + s[4] += s[0]; + s[3] = mh_rotl(s[3] ^ s[4], 14u); + s[8] = (s[8] ^ s[3]) * 0x24a33cefu; + s[7] = mh_rotl(s[7], 26u) + s[8]; + s[0] = mh_rotl(s[0] ^ s[7], 5u); + s[13] ^= s[0]; + s[0] ^= s[13]; + s[9] += s[0]; + s[1] += s[9] + 0xceba1d99u; + s[6] += (s[1] | s[0]); + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[2]); + s[2] -= s[0]; + s[9] ^= s[2]; + s[0] -= s[9]; + s[10] += s[0] + 0x912934d8u; + s[14] += s[10]; + s[5] ^= s[14]; + s[8] += s[5] + 0x9b41cf1du; + s[10] ^= s[8] ^ 0x783c5b76u; + s[2] -= s[10]; + s[1] = (s[1] ^ s[2]) * 0x0f56c5b9u; + s[14] ^= s[1] ^ 0x25f12e76u; + s[13] = mh_rotl(s[13], 6u) + s[14]; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[6] = mh_rotl(s[6], 22u) + s[2]; + s[4] += (s[6] | s[9]); + s[14] ^= s[4]; + s[2] -= s[14]; + s[3] ^= s[2]; + s[9] ^= s[3]; + s[6] *= (s[9] | 1u); + s[2] ^= s[6]; + s[12] += s[2]; + s[3] ^= s[12]; + s[10] = mh_rotl(s[10], 25u) + s[3]; + s[1] = mh_rotl(s[1] ^ s[10], 19u); + s[14] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[14], 25u); + s[4] = mh_rotl(s[4], 12u) + s[12]; + s[5] *= (s[4] | 1u); + s[0] ^= s[5]; + s[11] ^= (s[0] & s[8]); + s[14] ^= s[11]; + s[4] = s[4] * 0x7b3dacd1u + s[14]; + s[15] = (s[15] ^ s[4]) * 0x391f4413u; + s[0] -= s[15]; + s[11] = s[11] * 0xe57f1625u + s[0]; + s[2] -= s[11]; + s[3] -= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[3]; + s[7] -= s[11]; + s[9] -= s[7]; + s[5] = mh_rotl(s[5] ^ s[9], 25u); + s[13] ^= s[5] ^ 0x99379160u; + s[7] ^= s[13]; + s[11] = mh_rotl(s[11] ^ s[7], 6u); + s[14] ^= s[11]; + s[10] += s[14]; + s[14] ^= s[10]; + s[8] = mh_rotl(s[8] ^ s[14], 13u); + s[0] += s[8]; + s[13] += (s[0] | s[11]); + s[1] = s[1] * 0xef009353u + s[13]; + s[2] += (s[1] | s[8]); + s[0] *= (s[2] | 1u); + s[14] += s[0]; + s[1] ^= s[14]; + s[8] *= (s[1] | 1u); + s[14] += (s[8] | s[4]); + s[11] *= (s[14] | 1u); + s[15] = mh_rotl(s[15] ^ s[11], 14u); + s[4] = mh_rotl(s[4] ^ s[15], 24u); + s[8] += s[4]; + s[5] += (s[8] | s[10]); + s[2] += s[5]; + s[13] = mh_rotl(s[13] ^ s[2], 22u); + s[8] -= s[13]; + s[3] += s[8]; + s[10] += (s[3] | s[5]); + s[13] ^= s[10]; + s[0] += (s[13] | s[5]); + s[8] += s[0]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[7] = (s[7] ^ s[14]) * 0xe87bd0f5u; + s[1] ^= s[7]; + s[12] *= (s[1] | 1u); + s[9] -= s[12]; + s[8] = mh_rotl(s[8], 8u) + s[9]; + s[7] += s[8]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[6] ^= s[11]; + s[2] += (s[6] | s[3]); + s[6] = (s[6] ^ s[2]) * 0xea6f06c5u; + s[9] = s[9] * 0xb0813793u + s[6]; + s[5] = mh_rotl(s[5], 27u) + s[9]; + s[12] = (s[12] ^ s[5]) * 0x9522a8cbu; + s[11] += (s[12] | s[1]); + s[13] ^= s[11]; + s[4] *= (s[13] | 1u); + s[9] += s[4]; + s[13] ^= s[9]; + s[15] -= s[13]; + s[10] ^= s[15]; + s[8] -= s[10]; + s[11] ^= s[8]; + s[15] = mh_rotl(s[15], 15u) + s[11]; + s[5] ^= s[15]; + s[10] -= s[5]; + s[0] = s[0] * 0x84635df9u + s[10]; + s[8] += s[0]; + s[9] += s[8]; + s[15] = s[15] * 0x55198e97u + s[9]; + s[4] -= s[15]; + s[8] = mh_rotl(s[8], 5u) + s[4]; + s[11] -= s[8]; + s[13] = (s[13] ^ s[11]) * 0x15b1b0a5u; + s[11] *= (s[13] | 1u); + s[10] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[10], 22u); + s[7] += s[12] + 0x8aac82cau; + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[10] = mh_rotl(s[10] ^ s[11], 16u); + s[13] = s[13] * 0xc6a07e99u + s[10]; + s[12] *= (s[13] | 1u); + s[4] *= (s[12] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[4] = mh_rotl(s[4], 2u) + s[2]; + s[9] = mh_rotl(s[9] ^ s[4], 11u); + s[12] ^= s[9]; + s[2] += (s[12] | s[13]); + s[7] = mh_rotl(s[7], 5u) + s[2]; + s[15] += (s[7] | s[13]); + s[6] = mh_rotl(s[6], 5u) + s[15]; + s[1] -= s[6]; + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0xf187f908u; + s[12] -= s[2]; + s[9] += s[12] + 0x1a02f1acu; + s[0] ^= s[9]; + s[5] ^= s[0]; + s[3] = mh_rotl(s[3], 27u) + s[5]; + s[2] += s[3]; + s[1] += s[2]; + s[14] ^= s[1]; + s[1] += s[14]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[0] += (s[9] | s[6]); + s[6] ^= s[0] ^ 0x69d64d91u; + s[9] ^= (s[6] & s[11]); + s[4] = mh_rotl(s[4], 9u) + s[9]; + s[7] -= s[4]; + s[5] += s[7] + 0xefa00412u; + s[11] *= (s[5] | 1u); + s[0] += s[11] + 0xb0b34a8fu; + s[3] -= s[0]; + s[6] += s[3]; + s[12] = mh_rotl(s[12], 26u) + s[6]; + s[14] *= (s[12] | 1u); + s[9] -= s[14]; + s[6] += s[9]; + s[13] ^= s[6]; + s[1] += s[13]; + s[8] += s[1] + 0x1a6451adu; + s[3] ^= (s[8] & s[9]); + s[13] ^= s[3]; + s[2] ^= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 28u); + s[8] += s[6]; + s[10] ^= s[8] ^ 0x4b68b070u; + s[14] += s[10] + 0x3e959795u; + s[9] += s[14] + 0x7e7f05f4u; + s[14] *= (s[9] | 1u); + s[8] ^= s[14]; + s[11] *= (s[8] | 1u); + s[4] -= s[11]; + s[2] += s[4]; + s[6] += s[2]; + s[2] += s[6]; + s[8] *= (s[2] | 1u); + s[4] += (s[8] | s[0]); + s[13] -= s[4]; + s[0] -= s[13]; + s[5] ^= s[0] ^ 0xcdcd2654u; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[9] = (s[9] ^ s[2]) * 0x512a14b1u; + s[8] = (s[8] ^ s[9]) * 0xe54b3cc1u; + s[11] += (s[8] | s[13]); + s[15] ^= s[11] ^ 0x0823130du; + s[11] ^= s[15]; + s[3] ^= (s[11] & s[2]); + s[9] = mh_rotl(s[9] ^ s[3], 7u); + s[2] = (s[2] ^ s[9]) * 0x583f7895u; + s[15] ^= s[2] ^ 0x4a0f9347u; + s[9] += s[15]; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[2] = (s[2] ^ s[9]) * 0x071a75e5u; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 22u); + s[3] ^= s[0] ^ 0xa770c1f5u; + s[10] = mh_rotl(s[10] ^ s[3], 4u); + s[13] += s[10] + 0xeaf6caa2u; + s[12] += (s[13] | s[5]); + s[3] -= s[12]; + s[9] -= s[3]; + s[3] += s[9]; + s[15] = (s[15] ^ s[3]) * 0x8c66add5u; + s[0] -= s[15]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[3] += s[15] + 0x4fe53ed8u; + s[0] += s[3] + 0xb80a3204u; + s[12] += (s[0] | s[14]); + s[10] += s[12]; + s[9] *= (s[10] | 1u); + s[3] += s[9]; + s[0] += s[3]; + s[14] += (s[0] | s[1]); + s[4] *= (s[14] | 1u); + s[6] -= s[4]; + s[5] -= s[6]; + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[4]; + s[9] ^= s[5] ^ 0xda8f6abau; + s[10] ^= s[9]; + s[8] ^= (s[10] & s[13]); + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[1] ^= s[10]; + s[15] = (s[15] ^ s[1]) * 0x1fd82855u; + s[2] ^= s[15]; + s[4] -= s[2]; + s[2] *= (s[4] | 1u); + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[3] ^= s[8]; + s[13] *= (s[3] | 1u); + s[5] ^= s[13]; + s[7] -= s[5]; + s[3] += s[7]; + s[1] += s[3]; + s[14] *= (s[1] | 1u); + s[8] = (s[8] ^ s[14]) * 0x14b291ebu; + s[12] = mh_rotl(s[12] ^ s[8], 24u); + s[5] -= s[12]; + s[3] *= (s[5] | 1u); + s[4] += s[3] + 0x2e4c7228u; + s[11] = mh_rotl(s[11] ^ s[4], 9u); + s[5] = mh_rotl(s[5] ^ s[11], 21u); + s[4] += s[5] + 0xcec3470du; + s[14] += s[4]; + s[5] = (s[5] ^ s[14]) * 0xd3b1d179u; + s[7] = (s[7] ^ s[5]) * 0x0dfd9191u; + s[1] ^= s[7]; + s[12] += s[1] + 0x05dc87fdu; + s[11] -= s[12]; + s[7] ^= (s[11] & s[10]); + s[10] *= (s[7] | 1u); + s[8] = mh_rotl(s[8], 22u) + s[10]; + s[11] ^= s[8]; + s[10] *= (s[11] | 1u); + s[0] -= s[10]; + s[7] += s[0] + 0xbab4bd7fu; + s[0] = mh_rotl(s[0], 13u) + s[7]; + s[15] = (s[15] ^ s[0]) * 0x1a239ff7u; + s[3] = mh_rotl(s[3] ^ s[15], 24u); + s[1] = mh_rotl(s[1], 25u) + s[3]; + s[5] = mh_rotl(s[5], 23u) + s[1]; + s[4] = (s[4] ^ s[5]) * 0x114ab605u; + s[9] += s[4]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[0] -= s[5]; + s[4] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[4], 14u); + s[14] *= (s[15] | 1u); + s[10] = mh_rotl(s[10] ^ s[14], 8u); + s[3] = mh_rotl(s[3] ^ s[10], 17u); + s[6] += s[3] + 0xb216edc1u; + s[9] ^= s[6]; + s[7] += s[9]; + s[9] = mh_rotl(s[9] ^ s[7], 27u); + s[8] += (s[9] | s[12]); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[2] += (s[7] | s[11]); + s[3] = (s[3] ^ s[2]) * 0x74b003d9u; + s[1] = mh_rotl(s[1], 12u) + s[3]; + s[0] = (s[0] ^ s[1]) * 0x6e4a2ddbu; + s[7] *= (s[0] | 1u); + s[4] += s[7]; + s[13] += s[4]; + s[10] = mh_rotl(s[10] ^ s[13], 23u); + s[9] += s[10]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[13], 26u); + s[13] = mh_rotl(s[13] ^ s[15], 26u); + s[2] -= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[7] ^= s[6] ^ 0x040fda34u; + s[12] ^= s[7] ^ 0x7517e01cu; + s[9] = (s[9] ^ s[12]) * 0x65c2f9e3u; + s[2] *= (s[9] | 1u); + s[8] += (s[2] | s[15]); + s[10] = mh_rotl(s[10] ^ s[8], 25u); + s[7] = mh_rotl(s[7] ^ s[10], 18u); + s[0] ^= s[7]; + s[13] -= s[0]; + s[5] += s[13] + 0x91f36456u; + s[13] ^= s[5] ^ 0xb0249e62u; + s[9] ^= s[13]; + s[10] -= s[9]; + s[9] = s[9] * 0x3349e8abu + s[10]; + s[15] += s[9]; + s[1] = mh_rotl(s[1] ^ s[15], 18u); + s[3] -= s[1]; + s[6] ^= s[3]; + s[2] = (s[2] ^ s[6]) * 0x56121511u; + s[14] = mh_rotl(s[14], 12u) + s[2]; + s[12] ^= s[14] ^ 0x10c3c286u; + s[5] += s[12]; + s[7] += (s[5] | s[15]); + s[4] = mh_rotl(s[4] ^ s[7], 13u); + s[7] ^= s[4]; + s[3] += (s[7] | s[9]); + s[15] -= s[3]; + s[3] ^= s[15]; + s[12] = mh_rotl(s[12] ^ s[3], 28u); + s[14] ^= s[12]; + s[6] ^= (s[14] & s[3]); + s[5] -= s[6]; + s[11] ^= s[5] ^ 0x039a9ae9u; + s[8] = (s[8] ^ s[11]) * 0x0cf0a8dbu; + s[7] += s[8]; + s[2] ^= (s[7] & s[15]); + s[4] += s[2]; + s[15] *= (s[4] | 1u); + s[3] ^= (s[15] & s[0]); + s[2] += (s[3] | s[14]); + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[2] ^= s[5] ^ 0x6a1af17au; + s[12] = s[12] * 0x4dfc5c59u + s[2]; + s[7] = mh_rotl(s[7] ^ s[12], 4u); + s[1] ^= s[7]; + s[13] += s[1]; + s[3] ^= (s[13] & s[10]); + s[8] += s[3]; + s[4] += s[8]; + s[3] ^= s[4]; + s[9] = mh_rotl(s[9], 30u) + s[3]; + s[5] += s[9] + 0x07e78f25u; + s[12] ^= s[5]; + s[5] += s[12] + 0x31f9526eu; + s[14] ^= (s[5] & s[13]); + s[3] = mh_rotl(s[3] ^ s[14], 2u); + s[1] = (s[1] ^ s[3]) * 0xe113f67bu; + s[13] = mh_rotl(s[13] ^ s[1], 2u); + s[12] *= (s[13] | 1u); + s[2] ^= s[12]; + s[9] = s[9] * 0x1a8888d9u + s[2]; + s[4] += s[9]; + s[6] += (s[4] | s[7]); + s[7] = (s[7] ^ s[6]) * 0xfddcf333u; + s[15] += (s[7] | s[8]); + s[1] = mh_rotl(s[1], 10u) + s[15]; + s[8] ^= s[1]; + s[13] *= (s[8] | 1u); + s[9] *= (s[13] | 1u); + s[10] = (s[10] ^ s[9]) * 0x3ca467cfu; + s[9] += s[10]; + s[13] = mh_rotl(s[13], 10u) + s[9]; + s[4] ^= s[13]; + s[5] = (s[5] ^ s[4]) * 0x01623d69u; + s[14] = mh_rotl(s[14], 25u) + s[5]; + s[9] = mh_rotl(s[9], 20u) + s[14]; + s[13] += s[9]; + s[7] ^= s[13]; + s[0] += s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 30u); + s[7] = mh_rotl(s[7], 18u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[2] ^= s[12]; + s[3] = (s[3] ^ s[2]) * 0xabf1e829u; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_7(uint* s) { + s[5] -= s[0]; + s[4] += s[5]; + s[1] ^= s[4]; + s[8] = mh_rotl(s[8], 27u) + s[1]; + s[11] = (s[11] ^ s[8]) * 0x4b2f6f09u; + s[6] ^= s[11]; + s[9] = mh_rotl(s[9] ^ s[6], 4u); + s[8] += s[9] + 0xbb62948fu; + s[5] ^= s[8]; + s[11] += (s[5] | s[13]); + s[12] += s[11]; + s[1] = mh_rotl(s[1], 31u) + s[12]; + s[14] ^= s[1]; + s[8] *= (s[14] | 1u); + s[6] += (s[8] | s[1]); + s[10] ^= s[6]; + s[7] = s[7] * 0x6b454bc1u + s[10]; + s[6] -= s[7]; + s[9] += s[6]; + s[2] = mh_rotl(s[2], 17u) + s[9]; + s[9] -= s[2]; + s[13] ^= (s[9] & s[0]); + s[2] -= s[13]; + s[14] ^= (s[2] & s[11]); + s[13] ^= s[14]; + s[8] += s[13]; + s[1] ^= s[8]; + s[15] ^= s[1] ^ 0x6fb89ee0u; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[5] -= s[13]; + s[9] = (s[9] ^ s[5]) * 0x34a05bdbu; + s[14] = mh_rotl(s[14] ^ s[9], 19u); + s[7] += s[14] + 0x91a91f0eu; + s[12] = mh_rotl(s[12], 30u) + s[7]; + s[3] = (s[3] ^ s[12]) * 0x29e111e1u; + s[15] = mh_rotl(s[15], 13u) + s[3]; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[6] -= s[4]; + s[15] ^= (s[6] & s[3]); + s[1] ^= s[15]; + s[13] = mh_rotl(s[13], 2u) + s[1]; + s[5] -= s[13]; + s[12] += (s[5] | s[6]); + s[5] = mh_rotl(s[5], 8u) + s[12]; + s[6] = (s[6] ^ s[5]) * 0x46361369u; + s[0] = s[0] * 0x41b33755u + s[6]; + s[14] += s[0]; + s[7] = (s[7] ^ s[14]) * 0x927361a3u; + s[13] += s[7]; + s[1] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[1], 29u); + s[7] = mh_rotl(s[7] ^ s[3], 28u); + s[15] = mh_rotl(s[15], 6u) + s[7]; + s[3] = s[3] * 0x0876dd9du + s[15]; + s[4] ^= s[3]; + s[11] -= s[4]; + s[10] = mh_rotl(s[10], 29u) + s[11]; + s[5] ^= s[10]; + s[3] += s[5]; + s[7] *= (s[3] | 1u); + s[2] -= s[7]; + s[9] ^= s[2]; + s[8] *= (s[9] | 1u); + s[7] += (s[8] | s[13]); + s[13] -= s[7]; + s[11] = mh_rotl(s[11], 18u) + s[13]; + s[10] += s[11] + 0x181a9075u; + s[9] = (s[9] ^ s[10]) * 0xb49d9e43u; + s[15] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[7] += s[3]; + s[3] += s[7]; + s[4] ^= s[3] ^ 0xe8c5e0a0u; + s[7] += (s[4] | s[12]); + s[4] += s[7]; + s[14] = (s[14] ^ s[4]) * 0x178ee02fu; + s[7] += s[14]; + s[1] ^= s[7] ^ 0x194c8352u; + s[11] ^= s[1]; + s[10] *= (s[11] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[0] = mh_rotl(s[0] ^ s[13], 28u); + s[1] += (s[0] | s[7]); + s[15] -= s[1]; + s[6] += s[15]; + s[7] -= s[6]; + s[0] ^= s[7]; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x7db92f45u; + s[8] += s[12]; + s[9] = mh_rotl(s[9], 25u) + s[8]; + s[14] += s[9]; + s[4] = mh_rotl(s[4], 1u) + s[14]; + s[9] = mh_rotl(s[9], 20u) + s[4]; + s[8] -= s[9]; + s[2] = (s[2] ^ s[8]) * 0xe35b6231u; + s[14] *= (s[2] | 1u); + s[11] += s[14]; + s[6] = mh_rotl(s[6], 27u) + s[11]; + s[13] += (s[6] | s[14]); + s[3] += s[13]; + s[12] ^= s[3]; + s[2] ^= s[12]; + s[0] ^= s[2]; + s[3] += (s[0] | s[7]); + s[14] ^= (s[3] & s[9]); + s[4] += s[14] + 0x77498422u; + s[11] = mh_rotl(s[11], 18u) + s[4]; + s[10] = mh_rotl(s[10] ^ s[11], 14u); + s[6] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[2] *= (s[12] | 1u); + s[8] *= (s[2] | 1u); + s[0] = (s[0] ^ s[8]) * 0x597dfa7du; + s[5] = mh_rotl(s[5] ^ s[0], 1u); + s[8] = (s[8] ^ s[5]) * 0x818239b3u; + s[6] ^= s[8] ^ 0x898c850du; + s[1] = (s[1] ^ s[6]) * 0x3d7ae6bfu; + s[2] += (s[1] | s[0]); + s[15] = mh_rotl(s[15] ^ s[2], 12u); + s[11] ^= (s[15] & s[1]); + s[10] += (s[11] | s[5]); + s[9] = mh_rotl(s[9], 2u) + s[10]; + s[4] += s[9] + 0x8e6a7325u; + s[10] += s[4]; + s[9] *= (s[10] | 1u); + s[7] = mh_rotl(s[7] ^ s[9], 29u); + s[9] *= (s[7] | 1u); + s[14] *= (s[9] | 1u); + s[9] += (s[14] | s[8]); + s[8] *= (s[9] | 1u); + s[10] = mh_rotl(s[10] ^ s[8], 31u); + s[0] += s[10]; + s[3] ^= s[0]; + s[11] += s[3]; + s[10] = mh_rotl(s[10], 14u) + s[11]; + s[14] = s[14] * 0xedeb79c3u + s[10]; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[0] ^= s[13] ^ 0xcb8f865fu; + s[7] ^= s[0] ^ 0xc218e233u; + s[6] ^= s[7]; + s[15] -= s[6]; + s[13] += s[15]; + s[9] -= s[13]; + s[8] += s[9]; + s[5] += s[8]; + s[14] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[12] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 4u) + s[12]; + s[5] = (s[5] ^ s[2]) * 0xca70bd5bu; + s[6] = mh_rotl(s[6] ^ s[5], 1u); + s[9] -= s[6]; + s[12] ^= s[9]; + s[11] += s[12] + 0xc0665a45u; + s[3] = mh_rotl(s[3] ^ s[11], 4u); + s[9] ^= s[3] ^ 0x32e70bb6u; + s[1] ^= s[9] ^ 0xae4dfdd5u; + s[5] ^= (s[1] & s[3]); + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[13] += s[3]; + s[10] = mh_rotl(s[10], 4u) + s[13]; + s[7] += s[10]; + s[10] ^= s[7] ^ 0x4810f287u; + s[6] += (s[10] | s[13]); + s[11] = (s[11] ^ s[6]) * 0x66e90aa1u; + s[2] += s[11]; + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[11] ^= (s[8] & s[10]); + s[6] ^= s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 9u); + s[2] = (s[2] ^ s[8]) * 0x0ae2e991u; + s[14] *= (s[2] | 1u); + s[2] += (s[14] | s[3]); + s[0] -= s[2]; + s[11] += s[0] + 0x68b8549cu; + s[8] -= s[11]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[3] = mh_rotl(s[3] ^ s[12], 12u); + s[10] = s[10] * 0xf67913a1u + s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 22u); + s[11] ^= (s[14] & s[4]); + s[8] += s[11]; + s[15] *= (s[8] | 1u); + s[14] += s[15]; + s[8] = (s[8] ^ s[14]) * 0x0ab3eb01u; + s[2] = mh_rotl(s[2], 28u) + s[8]; + s[8] *= (s[2] | 1u); + s[2] ^= s[8]; + s[10] ^= s[2]; + s[0] -= s[10]; + s[4] ^= s[0] ^ 0x4f62b664u; + s[12] = mh_rotl(s[12] ^ s[4], 7u); + s[10] -= s[12]; + s[0] += s[10] + 0xf2da1dd8u; + s[3] += s[0]; + s[5] = (s[5] ^ s[3]) * 0xdbaaf8b9u; + s[4] = (s[4] ^ s[5]) * 0xf8df299fu; + s[13] += s[4]; + s[10] ^= (s[13] & s[14]); + s[5] ^= s[10]; + s[13] += s[5]; + s[8] *= (s[13] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 26u); + s[0] = mh_rotl(s[0] ^ s[11], 21u); + s[9] ^= s[0] ^ 0x9e7430f6u; + s[4] = mh_rotl(s[4], 5u) + s[9]; + s[8] ^= s[4]; + s[7] ^= s[8]; + s[0] ^= s[7]; + s[14] = mh_rotl(s[14], 20u) + s[0]; + s[7] += (s[14] | s[15]); + s[6] = (s[6] ^ s[7]) * 0x151af639u; + s[12] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[12], 15u); + s[4] = s[4] * 0xf5ff2905u + s[3]; + s[9] += s[4] + 0x986450f9u; + s[0] += s[9]; + s[3] *= (s[0] | 1u); + s[10] = mh_rotl(s[10], 6u) + s[3]; + s[7] += (s[10] | s[2]); + s[11] ^= s[7]; + s[14] = mh_rotl(s[14], 9u) + s[11]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[12] += s[6] + 0x8e33c6d8u; + s[1] ^= s[12]; + s[14] = s[14] * 0x75b03e79u + s[1]; + s[12] = (s[12] ^ s[14]) * 0xf81548e3u; + s[14] = mh_rotl(s[14] ^ s[12], 26u); + s[0] = (s[0] ^ s[14]) * 0xed123d19u; + s[4] = s[4] * 0xc3964555u + s[0]; + s[12] *= (s[4] | 1u); + s[8] = (s[8] ^ s[12]) * 0x5b0867f3u; + s[4] += s[8]; + s[11] += (s[4] | s[8]); + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[8] = mh_rotl(s[8], 13u) + s[13]; + s[10] += s[8]; + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[13] += s[5]; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[6] ^= s[1]; + s[0] = s[0] * 0x8659f36fu + s[6]; + s[6] = mh_rotl(s[6], 16u) + s[0]; + s[14] *= (s[6] | 1u); + s[3] ^= (s[14] & s[15]); + s[7] ^= s[3]; + s[8] = s[8] * 0x9b402df1u + s[7]; + s[13] -= s[8]; + s[14] = s[14] * 0xfc97057fu + s[13]; + s[8] = mh_rotl(s[8], 16u) + s[14]; + s[14] = (s[14] ^ s[8]) * 0xbe6b7107u; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = mh_rotl(s[8] ^ s[15], 17u); + s[2] *= (s[8] | 1u); + s[13] ^= (s[2] & s[15]); + s[4] -= s[13]; + s[6] += s[4]; + s[5] ^= s[6]; + s[13] += s[5] + 0xe1efd35du; + s[11] -= s[13]; + s[9] -= s[11]; + s[11] += s[9]; + s[10] += s[11] + 0x54c20a26u; + s[11] += s[10]; + s[10] ^= s[11]; + s[1] += s[10]; + s[15] ^= s[1] ^ 0xba35f967u; + s[10] ^= s[15]; + s[5] -= s[10]; + s[10] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[10], 4u); + s[12] = mh_rotl(s[12] ^ s[2], 28u); + s[3] *= (s[12] | 1u); + s[12] += s[3]; + s[2] ^= s[12] ^ 0xf5d2467fu; + s[6] *= (s[2] | 1u); + s[10] = (s[10] ^ s[6]) * 0x28dedae7u; + s[3] = mh_rotl(s[3], 23u) + s[10]; + s[13] ^= s[3]; + s[0] -= s[13]; + s[6] = mh_rotl(s[6], 27u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[6], 24u); + s[7] += s[9]; + s[1] = (s[1] ^ s[7]) * 0x7c90eb87u; + s[9] ^= s[1]; + s[13] = mh_rotl(s[13], 9u) + s[9]; + s[10] ^= s[13] ^ 0x225cb631u; + s[4] = mh_rotl(s[4] ^ s[10], 7u); + s[2] *= (s[4] | 1u); + s[4] += s[2]; + s[2] = (s[2] ^ s[4]) * 0xbf3bcc37u; + s[7] += s[2]; + s[14] = (s[14] ^ s[7]) * 0xbc306609u; + s[7] ^= (s[14] & s[8]); + s[15] ^= s[7] ^ 0x60b43c30u; + s[9] ^= s[15]; + s[4] ^= s[9]; + s[9] += (s[4] | s[7]); + s[0] ^= (s[9] & s[13]); + s[12] ^= s[0] ^ 0xd2720722u; + s[5] ^= s[12] ^ 0xd44c4970u; + s[9] ^= s[5] ^ 0xc371f5beu; + s[3] ^= s[9]; + s[0] = mh_rotl(s[0], 29u) + s[3]; + s[10] += s[0]; + s[8] += s[10]; + s[3] = (s[3] ^ s[8]) * 0xa4d0bc15u; + s[1] ^= s[3]; + s[12] ^= s[1]; + s[10] ^= s[12]; + s[2] += (s[10] | s[4]); + s[11] = mh_rotl(s[11], 16u) + s[2]; + s[9] += s[11]; + s[7] *= (s[9] | 1u); + s[0] = (s[0] ^ s[7]) * 0x5e3371e1u; + s[14] += s[0]; + s[9] ^= s[14]; + s[10] = (s[10] ^ s[9]) * 0x9e41ec57u; + s[0] ^= s[10]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4]; + s[4] *= (s[0] | 1u); + s[8] = s[8] * 0xbfdc3751u + s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[11] -= s[15]; + s[9] -= s[11]; + s[4] = mh_rotl(s[4], 8u) + s[9]; + s[15] += s[4]; + s[1] ^= s[15] ^ 0xd11970cdu; + s[15] ^= s[1]; + s[4] = s[4] * 0x94d713c9u + s[15]; + s[7] = s[7] * 0x68b74c8du + s[4]; + s[9] ^= s[7] ^ 0x96fae1c9u; + s[7] *= (s[9] | 1u); + s[4] ^= s[7]; + s[1] -= s[4]; + s[8] ^= s[1] ^ 0x3b8298fdu; + s[3] = mh_rotl(s[3] ^ s[8], 29u); + s[10] += s[3]; + s[2] ^= s[10] ^ 0xfc75ba25u; + s[15] ^= s[2] ^ 0x3370ab46u; + s[4] *= (s[15] | 1u); + s[0] = (s[0] ^ s[4]) * 0xf0c6e8a1u; + s[8] = mh_rotl(s[8], 30u) + s[0]; + s[13] ^= s[8]; + s[9] += (s[13] | s[4]); + s[3] ^= (s[9] & s[5]); + s[9] ^= s[3]; + s[6] += s[9]; + s[10] += (s[6] | s[12]); + s[15] += s[10]; + s[13] *= (s[15] | 1u); + s[15] += (s[13] | s[2]); + s[5] += s[15] + 0xc80c1f15u; + s[6] = mh_rotl(s[6] ^ s[5], 6u); + s[2] ^= s[6]; + s[14] += s[2] + 0x20c48485u; + s[0] += s[14]; + s[8] = (s[8] ^ s[0]) * 0xab09b653u; + s[5] += s[8]; + s[11] *= (s[5] | 1u); + s[15] += s[11]; + s[8] ^= s[15]; + s[11] -= s[8]; + s[12] *= (s[11] | 1u); + s[0] = mh_rotl(s[0] ^ s[12], 10u); + s[13] ^= s[0]; + s[4] = mh_rotl(s[4], 27u) + s[13]; + s[2] += s[4]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[7] *= (s[10] | 1u); + s[6] -= s[7]; + s[3] = (s[3] ^ s[6]) * 0xb3dee1f9u; + s[6] -= s[3]; + s[5] += s[6]; + s[8] *= (s[5] | 1u); + s[15] += s[8]; + s[0] = mh_rotl(s[0], 13u) + s[15]; + s[2] -= s[0]; + s[14] *= (s[2] | 1u); + s[3] += s[14]; + s[13] -= s[3]; + s[12] = mh_rotl(s[12], 15u) + s[13]; + s[8] = s[8] * 0xdd12f547u + s[12]; + s[4] = s[4] * 0xeabf279du + s[8]; + s[10] = (s[10] ^ s[4]) * 0x233f1cd3u; + s[7] += s[10] + 0x6c58f593u; + s[8] ^= (s[7] & s[14]); + s[12] -= s[8]; + s[11] ^= (s[12] & s[6]); + s[12] *= (s[11] | 1u); + s[13] = (s[13] ^ s[12]) * 0x8c02e38du; + s[2] += s[13] + 0xa8bdba12u; + s[14] += s[2]; + s[13] = (s[13] ^ s[14]) * 0x4beb81bdu; + s[5] = (s[5] ^ s[13]) * 0x1ad1e6dbu; + s[3] ^= s[5]; + s[4] ^= s[3]; + s[7] = (s[7] ^ s[4]) * 0xef5d1565u; + s[4] += (s[7] | s[12]); + s[15] ^= s[4] ^ 0x5a3cd0fbu; + s[2] += s[15]; + s[10] = (s[10] ^ s[2]) * 0x42c18153u; + s[9] = mh_rotl(s[9], 31u) + s[10]; + s[12] -= s[9]; + s[3] += s[12] + 0x809ec6a1u; + s[0] -= s[3]; + s[2] = (s[2] ^ s[0]) * 0x37fb4965u; + s[6] = mh_rotl(s[6], 14u) + s[2]; + s[15] += s[6]; + s[2] ^= s[15]; + s[9] *= (s[2] | 1u); + s[13] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[13], 15u); + s[3] ^= (s[9] & s[2]); + s[2] = (s[2] ^ s[3]) * 0xe757085du; + s[10] *= (s[2] | 1u); + s[7] += s[10] + 0x0e230d44u; + s[10] += s[7]; + s[14] += s[10]; + s[2] += s[14] + 0x3f9b1777u; + s[14] -= s[2]; + s[8] ^= s[14] ^ 0x53fdae32u; + s[14] ^= s[8] ^ 0x545e3034u; + s[12] ^= s[14]; + s[2] = mh_rotl(s[2] ^ s[12], 18u); + s[1] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[6] += s[13]; + s[13] = mh_rotl(s[13], 31u) + s[6]; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[4] = mh_rotl(s[4], 13u) + s[8]; + s[15] ^= s[4]; + s[13] ^= s[15]; + s[15] += s[13]; + s[6] *= (s[15] | 1u); + s[8] -= s[6]; + s[2] += (s[8] | s[4]); + s[8] += s[2] + 0x071fe892u; + s[2] += s[8]; + s[6] ^= s[2]; + s[12] = mh_rotl(s[12], 12u) + s[6]; + s[11] ^= s[12]; + s[10] ^= s[11]; + s[15] ^= (s[10] & s[2]); + s[0] += s[15] + 0xc5893a51u; + s[11] ^= s[0]; + s[8] = s[8] * 0xcbaa9e53u + s[11]; + s[12] ^= s[8]; + s[7] += s[12]; + s[4] ^= s[7]; + s[14] ^= s[4]; + s[8] += s[14]; + s[2] ^= (s[8] & s[13]); + s[4] += (s[2] | s[15]); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[6] *= (s[15] | 1u); + s[4] ^= s[6] ^ 0xda23719bu; + s[10] += s[4]; + s[14] = s[14] * 0x7d043037u + s[10]; + s[1] = (s[1] ^ s[14]) * 0x3702ca63u; + s[14] = s[14] * 0x6069e073u + s[1]; + s[11] += s[14]; + s[15] += s[11] + 0x080f6236u; + s[14] += s[15]; + s[0] ^= s[14] ^ 0xbcf33252u; + s[8] ^= (s[0] & s[4]); + s[10] ^= s[8] ^ 0x42b4ca59u; + s[5] ^= s[10]; + s[0] = (s[0] ^ s[5]) * 0xeff77d4bu; + s[3] = mh_rotl(s[3], 7u) + s[0]; + s[14] ^= s[3] ^ 0xa94ec34bu; + s[4] = mh_rotl(s[4], 11u) + s[14]; + s[8] = mh_rotl(s[8] ^ s[4], 26u); + s[0] = mh_rotl(s[0] ^ s[8], 29u); + s[2] = mh_rotl(s[2], 1u) + s[0]; + s[14] += s[2] + 0xe0207936u; + s[10] *= (s[14] | 1u); + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[4] += s[8] + 0x401aa131u; + s[0] += s[4]; + s[12] = mh_rotl(s[12] ^ s[0], 1u); + s[6] += s[12]; + s[5] = (s[5] ^ s[6]) * 0x5402ef7fu; + s[3] ^= s[5]; + s[12] -= s[3]; + s[14] ^= s[12] ^ 0xa47dfa06u; + s[6] = (s[6] ^ s[14]) * 0xd40c13a9u; + s[8] = (s[8] ^ s[6]) * 0xfd2046ddu; + s[2] = (s[2] ^ s[8]) * 0x06e4aacbu; + s[13] = mh_rotl(s[13], 29u) + s[2]; + s[0] ^= s[13]; + s[15] = mh_rotl(s[15], 19u) + s[0]; + s[10] += (s[15] | s[2]); + s[3] ^= s[10] ^ 0xd34e89bcu; + s[10] ^= s[3] ^ 0xbd40c99cu; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[12] += s[14]; + s[9] = mh_rotl(s[9] ^ s[12], 21u); + s[2] = (s[2] ^ s[9]) * 0xacae09c7u; + s[5] -= s[2]; + s[3] ^= s[5]; + s[14] -= s[3]; + s[5] = s[5] * 0xaf5e1497u + s[14]; + s[8] ^= (s[5] & s[12]); + s[6] ^= s[8]; + s[15] += s[6]; + s[12] ^= (s[15] & s[13]); + s[9] = mh_rotl(s[9] ^ s[12], 8u); + s[1] = mh_rotl(s[1] ^ s[9], 11u); + s[2] += s[1]; + s[4] ^= (s[2] & s[5]); + s[14] = (s[14] ^ s[4]) * 0x818385b1u; + s[7] += s[14]; + s[8] ^= s[7] ^ 0x4eae6b36u; + s[13] = mh_rotl(s[13], 19u) + s[8]; + s[6] *= (s[13] | 1u); + s[15] ^= s[6]; + s[5] = mh_rotl(s[5], 18u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[5], 16u); + s[9] += (s[6] | s[14]); + s[12] *= (s[9] | 1u); + s[0] = (s[0] ^ s[12]) * 0x5540eec9u; + s[10] ^= s[0] ^ 0x57f45e0eu; + s[12] = mh_rotl(s[12], 19u) + s[10]; + s[9] -= s[12]; + s[10] += s[9] + 0x4e7af6edu; + s[7] *= (s[10] | 1u); + s[14] *= (s[7] | 1u); + s[10] *= (s[14] | 1u); + s[13] ^= s[10]; + s[6] += s[13] + 0xdeaaf3c5u; + s[5] = (s[5] ^ s[6]) * 0x6626311bu; + s[8] += s[5]; + s[14] -= s[8]; + s[1] += s[14]; + s[0] = mh_rotl(s[0], 14u) + s[1]; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9] ^ s[1], 3u); + s[14] ^= s[9]; + s[3] += s[14]; + s[0] += s[3]; + s[6] = mh_rotl(s[6], 9u) + s[0]; + s[10] = mh_rotl(s[10] ^ s[6], 18u); + s[3] -= s[10]; + s[0] = (s[0] ^ s[3]) * 0xf8e0b555u; + s[5] = (s[5] ^ s[0]) * 0x90f83cc5u; + s[15] -= s[5]; + s[13] = (s[13] ^ s[15]) * 0x1028be17u; + s[8] ^= s[13] ^ 0x6f814efau; + s[3] = mh_rotl(s[3], 7u) + s[8]; + s[13] = s[13] * 0x1fe5d55du + s[3]; + s[14] += s[13]; + s[11] *= (s[14] | 1u); + s[8] = s[8] * 0xec49ce8fu + s[11]; + s[1] ^= s[8] ^ 0x6ce63203u; + s[13] = mh_rotl(s[13] ^ s[1], 3u); + s[4] = (s[4] ^ s[13]) * 0x1f4d84d5u; + s[3] = mh_rotl(s[3] ^ s[4], 19u); + s[6] ^= s[3] ^ 0x99bbd04au; + s[15] = mh_rotl(s[15], 23u) + s[6]; + s[5] ^= s[15]; + s[7] ^= s[5]; + s[12] = s[12] * 0x41bf1949u + s[7]; + s[3] ^= s[12] ^ 0xc73c6eaau; + s[5] += s[3]; + s[12] += s[5] + 0xaca33a02u; + s[2] += s[12]; + s[1] -= s[2]; + s[2] ^= (s[1] & s[8]); + s[15] *= (s[2] | 1u); + s[12] += s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 22u); + s[15] *= (s[2] | 1u); + s[2] += s[15]; + s[8] -= s[2]; + s[4] += s[8]; + s[6] += s[4]; + s[7] += s[6]; + s[13] += s[7]; + s[9] += s[13]; + s[11] += s[9]; + s[8] += s[11]; + s[10] = mh_rotl(s[10] ^ s[8], 23u); + s[7] -= s[10]; + s[3] += s[7]; + s[6] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[0] ^= s[5]; + s[13] = mh_rotl(s[13] ^ s[0], 26u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[13] += s[4]; + s[8] = mh_rotl(s[8] ^ s[13], 17u); + s[6] -= s[8]; + s[4] = mh_rotl(s[4] ^ s[6], 13u); + s[6] -= s[4]; + s[10] = mh_rotl(s[10], 17u) + s[6]; + s[8] = (s[8] ^ s[10]) * 0x5414f521u; + s[5] ^= (s[8] & s[12]); + s[12] += s[5]; + s[9] ^= s[12]; + s[4] = mh_rotl(s[4] ^ s[9], 22u); + s[6] ^= (s[4] & s[15]); + s[5] += s[6]; + s[2] ^= (s[5] & s[3]); + s[15] ^= s[2]; + s[11] += s[15]; + s[8] -= s[11]; + s[3] -= s[8]; + s[8] = s[8] * 0xb35e6bc9u + s[3]; + s[14] ^= s[8]; + s[6] *= (s[14] | 1u); + s[14] -= s[6]; + s[4] ^= s[14]; + s[0] ^= s[4]; + s[13] = (s[13] ^ s[0]) * 0xe1a27a3du; + s[1] = mh_rotl(s[1] ^ s[13], 4u); + s[8] = (s[8] ^ s[1]) * 0x7db5fbb1u; + s[5] += s[8]; + s[9] += s[5]; + s[6] *= (s[9] | 1u); + s[7] = (s[7] ^ s[6]) * 0x33889ef9u; + s[13] = mh_rotl(s[13] ^ s[7], 11u); + s[9] ^= s[13]; + s[8] = mh_rotl(s[8], 4u) + s[9]; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[10] ^= s[11] ^ 0x833b63eeu; + s[14] *= (s[10] | 1u); + s[5] -= s[14]; + s[3] ^= s[5]; + s[10] *= (s[3] | 1u); + s[15] = mh_rotl(s[15], 15u) + s[10]; + s[10] -= s[15]; + s[11] ^= s[10]; + s[15] += s[11] + 0x67b25095u; + s[5] = mh_rotl(s[5] ^ s[15], 6u); + s[12] += s[5]; + s[4] += (s[12] | s[15]); + s[12] += s[4] + 0x0b5448beu; + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0x9db08cddu; + s[4] = mh_rotl(s[4], 5u) + s[12]; + s[12] *= (s[4] | 1u); + s[5] ^= s[12]; + s[7] ^= (s[5] & s[15]); + s[2] = mh_rotl(s[2], 9u) + s[7]; + s[7] = (s[7] ^ s[2]) * 0xef5cc1a1u; + s[13] ^= s[7]; + s[2] += s[13] + 0xe8acb081u; + s[7] += s[2]; + s[13] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[4] += s[11]; + s[3] += s[4] + 0x2bf7bd89u; + s[15] += s[3]; + s[11] = mh_rotl(s[11] ^ s[15], 10u); + s[0] = mh_rotl(s[0] ^ s[11], 17u); + s[6] = mh_rotl(s[6] ^ s[0], 20u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[6] = mh_rotl(s[6], 26u) + s[8]; + s[11] = mh_rotl(s[11], 18u) + s[6]; + s[0] = mh_rotl(s[0], 29u) + s[11]; + s[2] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[2], 21u); + s[8] += s[11]; + s[1] ^= s[8]; + s[12] = mh_rotl(s[12], 21u) + s[1]; + s[9] = mh_rotl(s[9] ^ s[12], 30u); + s[12] = (s[12] ^ s[9]) * 0xaa6bd425u; + s[10] += s[12] + 0x3abc6eeeu; + s[4] = (s[4] ^ s[10]) * 0x26651b39u; + s[1] = (s[1] ^ s[4]) * 0x669011cbu; + s[12] = (s[12] ^ s[1]) * 0xc730fa63u; + s[4] *= (s[12] | 1u); + s[1] += s[4]; + s[13] = (s[13] ^ s[1]) * 0xa91d1549u; + s[8] = mh_rotl(s[8] ^ s[13], 20u); + s[15] = mh_rotl(s[15] ^ s[8], 19u); + s[9] ^= s[15]; + s[12] += s[9]; + s[6] ^= s[12]; + s[7] = mh_rotl(s[7], 10u) + s[6]; + s[6] = s[6] * 0x4737bba1u + s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 4u); + s[15] = (s[15] ^ s[7]) * 0x1550c0c9u; + s[6] = (s[6] ^ s[15]) * 0xa9708363u; + s[11] = s[11] * 0x7ed5889du + s[6]; + s[14] += s[11] + 0xe220d224u; + s[5] += s[14] + 0xa5c27ec0u; + s[3] ^= s[5]; + s[11] = (s[11] ^ s[3]) * 0x83211151u; + s[1] += s[11]; + s[0] -= s[1]; + s[8] += s[0]; + s[10] = mh_rotl(s[10], 22u) + s[8]; + s[14] -= s[10]; + s[13] ^= s[14]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[5] *= (s[12] | 1u); + s[2] *= (s[5] | 1u); + s[13] += s[2]; + s[14] ^= s[13]; + s[7] = mh_rotl(s[7] ^ s[14], 8u); + s[10] ^= s[7]; + s[8] ^= s[10]; + s[4] = mh_rotl(s[4], 25u) + s[8]; + s[11] ^= s[4]; + s[13] += s[11] + 0xc7fb1dc5u; + s[6] ^= s[13] ^ 0xda0de0b3u; + s[9] *= (s[6] | 1u); + s[0] += s[9]; + s[10] = mh_rotl(s[10], 30u) + s[0]; + s[11] = mh_rotl(s[11], 31u) + s[10]; + s[14] -= s[11]; + s[4] ^= s[14]; + s[7] *= (s[4] | 1u); + s[4] += s[7]; + s[9] = mh_rotl(s[9], 16u) + s[4]; + s[5] -= s[9]; + s[14] = mh_rotl(s[14], 23u) + s[5]; + s[8] += s[14]; + s[13] += (s[8] | s[4]); + s[3] -= s[13]; + s[9] ^= s[3]; + s[7] *= (s[9] | 1u); + s[0] *= (s[7] | 1u); + s[4] = s[4] * 0xa5531c79u + s[0]; + s[5] += s[4] + 0x956e1cecu; + s[4] = mh_rotl(s[4], 12u) + s[5]; + s[13] ^= s[4] ^ 0xcfd8a170u; + s[8] = mh_rotl(s[8] ^ s[13], 2u); + s[12] *= (s[8] | 1u); + s[7] = mh_rotl(s[7], 18u) + s[12]; +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +static inline void mh_round_8(uint* s) { + s[12] *= (s[0] | 1u); + s[14] ^= s[12]; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[9] ^= s[7]; + s[7] += (s[9] | s[15]); + s[14] ^= s[7]; + s[12] ^= s[14]; + s[9] += s[12]; + s[0] -= s[9]; + s[11] = (s[11] ^ s[0]) * 0x032a9d93u; + s[12] ^= s[11] ^ 0x7816ceedu; + s[6] += s[12]; + s[7] ^= s[6] ^ 0x5f893870u; + s[8] ^= s[7] ^ 0x38fe7d15u; + s[5] += s[8]; + s[11] = mh_rotl(s[11] ^ s[5], 5u); + s[3] = s[3] * 0xdc8f2169u + s[11]; + s[12] += s[3]; + s[1] = (s[1] ^ s[12]) * 0xff5bb02du; + s[9] += s[1]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[5], 9u); + s[12] += s[10]; + s[2] += s[12] + 0x6fbd2719u; + s[7] *= (s[2] | 1u); + s[10] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 12u) + s[10]; + s[15] ^= (s[7] & s[2]); + s[1] = (s[1] ^ s[15]) * 0xa496dd7du; + s[12] += s[1]; + s[9] *= (s[12] | 1u); + s[4] += s[9] + 0x603c29a5u; + s[0] = (s[0] ^ s[4]) * 0xb11db5efu; + s[12] = mh_rotl(s[12] ^ s[0], 12u); + s[9] ^= s[12]; + s[3] += s[9]; + s[4] ^= s[3]; + s[10] = s[10] * 0xf2876a93u + s[4]; + s[3] *= (s[10] | 1u); + s[13] *= (s[3] | 1u); + s[10] += s[13]; + s[0] += s[10] + 0xa38ef984u; + s[13] += s[0]; + s[0] += s[13]; + s[4] -= s[0]; + s[8] = mh_rotl(s[8], 16u) + s[4]; + s[0] *= (s[8] | 1u); + s[1] = mh_rotl(s[1] ^ s[0], 19u); + s[10] -= s[1]; + s[4] -= s[10]; + s[3] += s[4] + 0x98d38850u; + s[15] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[0] ^= s[12]; + s[8] += (s[0] | s[12]); + s[1] -= s[8]; + s[0] -= s[1]; + s[12] += s[0]; + s[1] = mh_rotl(s[1] ^ s[12], 8u); + s[8] = s[8] * 0xdb178cedu + s[1]; + s[13] ^= (s[8] & s[9]); + s[14] = mh_rotl(s[14] ^ s[13], 31u); + s[5] = mh_rotl(s[5] ^ s[14], 15u); + s[14] += s[5] + 0x58102672u; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[9] = (s[9] ^ s[13]) * 0xcea6b9a5u; + s[8] = mh_rotl(s[8] ^ s[9], 10u); + s[0] ^= s[8]; + s[1] = mh_rotl(s[1] ^ s[0], 26u); + s[0] ^= (s[1] & s[14]); + s[14] = mh_rotl(s[14] ^ s[0], 29u); + s[7] = mh_rotl(s[7] ^ s[14], 10u); + s[8] ^= s[7]; + s[4] ^= s[8]; + s[3] ^= s[4]; + s[1] ^= (s[3] & s[2]); + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[3] = (s[3] ^ s[15]) * 0xf98d62f9u; + s[8] += s[3]; + s[4] ^= s[8]; + s[13] ^= s[4]; + s[14] -= s[13]; + s[13] += s[14]; + s[1] *= (s[13] | 1u); + s[4] += s[1] + 0x2e4fd7f9u; + s[3] += s[4] + 0xad1f68c8u; + s[11] += s[3]; + s[7] ^= s[11]; + s[2] ^= s[7]; + s[7] += (s[2] | s[0]); + s[3] += (s[7] | s[4]); + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[2] += (s[9] | s[4]); + s[7] += s[2]; + s[0] ^= s[7]; + s[5] += s[0]; + s[6] ^= s[5] ^ 0xdd9e035eu; + s[11] *= (s[6] | 1u); + s[6] += (s[11] | s[15]); + s[0] -= s[6]; + s[13] ^= s[0] ^ 0x28746675u; + s[1] ^= s[13]; + s[4] *= (s[1] | 1u); + s[8] += (s[4] | s[6]); + s[2] ^= (s[8] & s[15]); + s[15] += s[2]; + s[3] ^= s[15]; + s[9] -= s[3]; + s[1] = (s[1] ^ s[9]) * 0x9a49d919u; + s[0] *= (s[1] | 1u); + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 13u) + s[12]; + s[8] += s[4]; + s[15] ^= s[8]; + s[1] ^= s[15]; + s[8] = (s[8] ^ s[1]) * 0x406ccbb9u; + s[6] ^= s[8] ^ 0x9c63a403u; + s[7] *= (s[6] | 1u); + s[6] ^= s[7]; + s[3] -= s[6]; + s[2] -= s[3]; + s[1] -= s[2]; + s[11] -= s[1]; + s[5] = (s[5] ^ s[11]) * 0xc8b2063bu; + s[9] ^= s[5]; + s[11] += s[9]; + s[14] -= s[11]; + s[12] ^= s[14]; + s[7] = mh_rotl(s[7], 19u) + s[12]; + s[6] ^= s[7]; + s[7] = mh_rotl(s[7], 28u) + s[6]; + s[0] += (s[7] | s[8]); + s[5] = (s[5] ^ s[0]) * 0x91563ef9u; + s[4] = (s[4] ^ s[5]) * 0x2489c7ddu; + s[0] ^= s[4]; + s[8] += s[0]; + s[13] ^= (s[8] & s[2]); + s[4] = (s[4] ^ s[13]) * 0xd3f73963u; + s[0] += s[4]; + s[7] -= s[0]; + s[8] *= (s[7] | 1u); + s[12] += s[8] + 0xe7c7770bu; + s[2] = mh_rotl(s[2] ^ s[12], 24u); + s[5] += s[2]; + s[13] -= s[5]; + s[7] = s[7] * 0xa499d785u + s[13]; + s[14] ^= s[7] ^ 0xa5531f53u; + s[0] += s[14]; + s[12] += s[0]; + s[4] += s[12]; + s[5] ^= s[4] ^ 0xa21d41b2u; + s[13] ^= (s[5] & s[1]); + s[4] *= (s[13] | 1u); + s[15] = mh_rotl(s[15], 17u) + s[4]; + s[13] = s[13] * 0x9e80ce17u + s[15]; + s[4] ^= s[13]; + s[9] = s[9] * 0x0efbb90fu + s[4]; + s[3] = mh_rotl(s[3], 22u) + s[9]; + s[9] += s[3]; + s[7] = (s[7] ^ s[9]) * 0x41f4c675u; + s[2] = mh_rotl(s[2] ^ s[7], 10u); + s[5] += s[2]; + s[7] += s[5]; + s[3] ^= s[7]; + s[13] += s[3]; + s[10] += (s[13] | s[12]); + s[6] -= s[10]; + s[4] *= (s[6] | 1u); + s[9] *= (s[4] | 1u); + s[1] ^= (s[9] & s[2]); + s[13] = mh_rotl(s[13], 17u) + s[1]; + s[6] += (s[13] | s[14]); + s[14] = (s[14] ^ s[6]) * 0x3fcef445u; + s[2] += (s[14] | s[13]); + s[14] ^= s[2]; + s[9] = (s[9] ^ s[14]) * 0x76f83471u; + s[15] += s[9] + 0x3620bb75u; + s[6] = (s[6] ^ s[15]) * 0xd2ae1b99u; + s[11] += s[6]; + s[1] = mh_rotl(s[1], 9u) + s[11]; + s[2] *= (s[1] | 1u); + s[15] += (s[2] | s[5]); + s[9] = s[9] * 0xd0673ad9u + s[15]; + s[0] ^= (s[9] & s[10]); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x1626d79fu; + s[6] ^= s[0]; + s[5] -= s[6]; + s[1] += s[5] + 0xbdfebf4au; + s[10] += (s[1] | s[15]); + s[3] -= s[10]; + s[14] ^= s[3] ^ 0x2f4d32b3u; + s[0] ^= (s[14] & s[4]); + s[10] += s[0] + 0xfec9017au; + s[8] += s[10]; + s[5] -= s[8]; + s[3] += s[5]; + s[0] += s[3] + 0x0a719f0bu; + s[4] -= s[0]; + s[1] ^= s[4]; + s[7] ^= (s[1] & s[12]); + s[2] ^= (s[7] & s[5]); + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[5], 30u); + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[8] += s[12] + 0x934b929du; + s[6] *= (s[8] | 1u); + s[9] ^= (s[6] & s[4]); + s[3] ^= s[9]; + s[14] += s[3]; + s[1] *= (s[14] | 1u); + s[14] *= (s[1] | 1u); + s[5] ^= s[14]; + s[10] ^= s[5]; + s[13] *= (s[10] | 1u); + s[4] -= s[13]; + s[9] = s[9] * 0xc3f9050bu + s[4]; + s[0] = (s[0] ^ s[9]) * 0x4479cb01u; + s[10] = mh_rotl(s[10] ^ s[0], 22u); + s[7] ^= s[10]; + s[11] ^= (s[7] & s[10]); + s[1] = (s[1] ^ s[11]) * 0xa9a3102bu; + s[9] += s[1]; + s[3] = mh_rotl(s[3], 4u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[3], 16u); + s[9] += (s[10] | s[1]); + s[15] = s[15] * 0xf4a9fbe3u + s[9]; + s[5] += (s[15] | s[1]); + s[14] = s[14] * 0x0fdccaebu + s[5]; + s[7] += s[14] + 0x7e2f9108u; + s[3] -= s[7]; + s[13] *= (s[3] | 1u); + s[11] ^= s[13] ^ 0xc4dab8b7u; + s[3] ^= s[11]; + s[0] += s[3]; + s[1] *= (s[0] | 1u); + s[13] = (s[13] ^ s[1]) * 0x735874d5u; + s[3] ^= s[13]; + s[2] += s[3]; + s[8] ^= s[2]; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[5], 8u); + s[5] += s[6] + 0xc7780520u; + s[12] ^= s[5]; + s[0] *= (s[12] | 1u); + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 9u); + s[10] -= s[5]; + s[6] += s[10]; + s[8] += s[6]; + s[4] ^= s[8]; + s[0] ^= s[4]; + s[15] += s[0]; + s[0] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[0], 14u); + s[4] += s[15]; + s[6] = mh_rotl(s[6], 16u) + s[4]; + s[2] *= (s[6] | 1u); + s[5] ^= s[2]; + s[6] ^= s[5]; + s[3] = mh_rotl(s[3], 28u) + s[6]; + s[2] -= s[3]; + s[0] = mh_rotl(s[0], 3u) + s[2]; + s[4] = s[4] * 0xc5ff28b1u + s[0]; + s[13] = mh_rotl(s[13] ^ s[4], 17u); + s[2] = (s[2] ^ s[13]) * 0xf64a55e7u; + s[10] += s[2]; + s[5] -= s[10]; + s[0] = (s[0] ^ s[5]) * 0xc34391fbu; + s[9] ^= s[0]; + s[14] = (s[14] ^ s[9]) * 0xd3626e5fu; + s[12] += s[14] + 0x34b62de8u; + s[0] = mh_rotl(s[0], 3u) + s[12]; + s[10] -= s[0]; + s[5] ^= s[10]; + s[3] *= (s[5] | 1u); + s[1] += s[3]; + s[9] ^= s[1]; + s[14] ^= s[9]; + s[1] = mh_rotl(s[1] ^ s[14], 24u); + s[3] = (s[3] ^ s[1]) * 0xb486108bu; + s[13] += s[3]; + s[8] = mh_rotl(s[8] ^ s[13], 15u); + s[2] += s[8]; + s[13] = mh_rotl(s[13] ^ s[2], 6u); + s[1] -= s[13]; + s[13] += (s[1] | s[12]); + s[3] ^= s[13]; + s[1] *= (s[3] | 1u); + s[10] += s[1]; + s[0] = mh_rotl(s[0] ^ s[10], 11u); + s[14] = mh_rotl(s[14] ^ s[0], 9u); + s[3] = (s[3] ^ s[14]) * 0x1910cbd5u; + s[2] *= (s[3] | 1u); + s[3] ^= s[2] ^ 0x36e5f7c1u; + s[12] ^= s[3] ^ 0xc06b695au; + s[8] += s[12]; + s[11] *= (s[8] | 1u); + s[14] ^= s[11] ^ 0x7e8392d2u; + s[5] += s[14] + 0xc854c03eu; + s[14] += s[5] + 0x6264b077u; + s[3] ^= s[14]; + s[9] ^= s[3]; + s[5] += (s[9] | s[11]); + s[2] ^= s[5]; + s[12] = mh_rotl(s[12] ^ s[2], 11u); + s[9] -= s[12]; + s[11] ^= (s[9] & s[3]); + s[14] -= s[11]; + s[15] = mh_rotl(s[15], 7u) + s[14]; + s[10] *= (s[15] | 1u); + s[12] *= (s[10] | 1u); + s[3] += s[12]; + s[9] = mh_rotl(s[9], 5u) + s[3]; + s[3] += s[9] + 0x25bbb855u; + s[13] += s[3]; + s[7] += s[13]; + s[10] += s[7]; + s[13] += s[10] + 0x9a1fb9e1u; + s[9] += s[13] + 0x4a7d742fu; + s[11] ^= s[9]; + s[15] = (s[15] ^ s[11]) * 0xd796e1a9u; + s[0] += s[15] + 0x4fb80a99u; + s[14] ^= s[0]; + s[4] -= s[14]; + s[0] = mh_rotl(s[0], 19u) + s[4]; + s[3] ^= s[0]; + s[0] += s[3] + 0x7a46f0d4u; + s[9] += s[0]; + s[11] ^= s[9]; + s[2] += s[11]; + s[0] ^= s[2]; + s[10] = mh_rotl(s[10], 5u) + s[0]; + s[4] += s[10]; + s[7] -= s[4]; + s[12] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[12] ^= s[10]; + s[8] ^= s[12]; + s[7] ^= s[8]; + s[8] += s[7]; + s[0] += s[8] + 0xf25eb71du; + s[15] *= (s[0] | 1u); + s[14] *= (s[15] | 1u); + s[6] += s[14] + 0xc3c48a42u; + s[15] = (s[15] ^ s[6]) * 0x8ff157e3u; + s[4] = s[4] * 0x4517a273u + s[15]; + s[9] ^= s[4]; + s[8] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 3u); + s[1] = mh_rotl(s[1], 15u) + s[11]; + s[0] = mh_rotl(s[0], 11u) + s[1]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] ^= s[4]; + s[8] -= s[0]; + s[5] += (s[8] | s[0]); + s[13] ^= s[5] ^ 0x842fa93fu; + s[10] = s[10] * 0xebf84a5bu + s[13]; + s[9] *= (s[10] | 1u); + s[10] += s[9] + 0xa4ae65abu; + s[7] += s[10]; + s[4] += s[7]; + s[8] = (s[8] ^ s[4]) * 0xa095c55bu; + s[13] += s[8]; + s[1] += s[13] + 0x78267af3u; + s[15] -= s[1]; + s[14] ^= s[15]; + s[9] += s[14]; + s[5] += s[9]; + s[12] *= (s[5] | 1u); + s[14] += s[12]; + s[3] = s[3] * 0x387e70c1u + s[14]; + s[8] += s[3] + 0x4bb62e79u; + s[10] += s[8]; + s[14] -= s[10]; + s[12] += s[14] + 0x94ade867u; + s[11] += s[12]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[9] -= s[3]; + s[8] ^= s[9]; + s[10] += s[8]; + s[12] = (s[12] ^ s[10]) * 0xf31b9bf9u; + s[9] -= s[12]; + s[14] ^= s[9]; + s[4] = (s[4] ^ s[14]) * 0x6c65ed0fu; + s[5] ^= (s[4] & s[3]); + s[13] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[13], 27u); + s[15] *= (s[8] | 1u); + s[14] ^= s[15]; + s[1] += s[14] + 0x0dabf75fu; + s[8] += s[1]; + s[6] ^= (s[8] & s[4]); + s[2] -= s[6]; + s[10] = (s[10] ^ s[2]) * 0x5df68b21u; + s[7] *= (s[10] | 1u); + s[2] = mh_rotl(s[2], 30u) + s[7]; + s[3] = mh_rotl(s[3] ^ s[2], 11u); + s[10] ^= s[3]; + s[12] = mh_rotl(s[12], 18u) + s[10]; + s[3] = mh_rotl(s[3] ^ s[12], 2u); + s[15] -= s[3]; + s[12] ^= (s[15] & s[3]); + s[6] += s[12] + 0xba8c656du; + s[11] = mh_rotl(s[11] ^ s[6], 25u); + s[8] *= (s[11] | 1u); + s[12] += (s[8] | s[1]); + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[0] ^= s[10] ^ 0xf57cb31cu; + s[15] ^= s[0]; + s[5] += s[15]; + s[2] ^= s[5]; + s[14] += (s[2] | s[4]); + s[10] ^= s[14] ^ 0xfc568076u; + s[2] += s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[3] ^= s[0]; + s[7] = mh_rotl(s[7], 28u) + s[3]; + s[9] ^= s[7]; + s[11] -= s[9]; + s[8] -= s[11]; + s[10] += s[8] + 0x44a98267u; + s[6] = (s[6] ^ s[10]) * 0x78341057u; + s[9] *= (s[6] | 1u); + s[8] ^= s[9]; + s[9] -= s[8]; + s[11] += s[9]; + s[4] ^= s[11]; + s[7] += (s[4] | s[5]); + s[11] ^= s[7]; + s[14] += s[11]; + s[3] = mh_rotl(s[3], 10u) + s[14]; + s[1] = (s[1] ^ s[3]) * 0x699c712fu; + s[0] ^= s[1] ^ 0xadd48ad1u; + s[3] = mh_rotl(s[3] ^ s[0], 18u); + s[0] ^= s[3] ^ 0x7c2a7e58u; + s[1] = (s[1] ^ s[0]) * 0x5d0ba3bbu; + s[10] = mh_rotl(s[10] ^ s[1], 9u); + s[0] ^= s[10] ^ 0x3f61235cu; + s[2] ^= s[0]; + s[8] -= s[2]; + s[12] *= (s[8] | 1u); + s[10] *= (s[12] | 1u); + s[7] ^= s[10] ^ 0x4fe234e6u; + s[15] ^= s[7]; + s[3] += s[15] + 0x7518599bu; + s[12] = mh_rotl(s[12], 9u) + s[3]; + s[8] ^= s[12]; + s[9] ^= s[8] ^ 0xf95c4703u; + s[2] = mh_rotl(s[2], 7u) + s[9]; + s[12] ^= s[2] ^ 0x775646a8u; + s[15] ^= s[12] ^ 0x552eaf71u; + s[4] -= s[15]; + s[15] += (s[4] | s[7]); + s[0] ^= s[15]; + s[13] ^= s[0]; + s[14] += s[13] + 0x87e74b49u; + s[6] ^= s[14] ^ 0x6efaba41u; + s[10] += s[6] + 0x88e2108fu; + s[7] -= s[10]; + s[11] -= s[7]; + s[4] ^= s[11] ^ 0xa876c358u; + s[2] ^= s[4] ^ 0xd3f39ab5u; + s[5] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 9u) + s[5]; + s[2] ^= s[3]; + s[8] = mh_rotl(s[8] ^ s[2], 2u); + s[5] = (s[5] ^ s[8]) * 0x9b50170fu; + s[13] = mh_rotl(s[13] ^ s[5], 7u); + s[0] += s[13]; + s[13] -= s[0]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[11] = mh_rotl(s[11], 6u) + s[5]; + s[1] += s[11]; + s[10] += (s[1] | s[13]); + s[4] ^= s[10]; + s[5] *= (s[4] | 1u); + s[4] ^= s[5]; + s[3] += s[4]; + s[4] = mh_rotl(s[4], 29u) + s[3]; + s[5] *= (s[4] | 1u); + s[2] ^= s[5] ^ 0x435d474cu; + s[15] = mh_rotl(s[15] ^ s[2], 31u); + s[14] += s[15]; + s[15] += s[14]; + s[13] -= s[15]; + s[7] += s[13]; + s[0] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[0], 13u); + s[13] -= s[5]; + s[15] *= (s[13] | 1u); + s[8] += s[15] + 0xbf3496cau; + s[3] = mh_rotl(s[3] ^ s[8], 13u); + s[4] = mh_rotl(s[4], 20u) + s[3]; + s[6] = (s[6] ^ s[4]) * 0xe0716b4du; + s[3] ^= s[6]; + s[11] ^= s[3]; + s[12] += (s[11] | s[7]); + s[0] = mh_rotl(s[0], 7u) + s[12]; + s[8] ^= s[0]; + s[1] += s[8]; + s[13] = mh_rotl(s[13] ^ s[1], 22u); + s[4] ^= s[13] ^ 0xaac36692u; + s[1] *= (s[4] | 1u); + s[8] ^= s[1] ^ 0x1e4e42deu; + s[15] *= (s[8] | 1u); + s[5] += (s[15] | s[11]); + s[13] += s[5]; + s[6] ^= s[13]; + s[12] ^= s[6] ^ 0xb025ee52u; + s[5] += s[12]; + s[2] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[2], 8u); + s[15] -= s[10]; + s[5] += (s[15] | s[10]); + s[3] += s[5]; + s[2] -= s[3]; + s[10] += s[2] + 0x80d367feu; + s[12] -= s[10]; + s[15] *= (s[12] | 1u); + s[6] ^= s[15] ^ 0x8d56107cu; + s[15] ^= s[6]; + s[4] = mh_rotl(s[4] ^ s[15], 9u); + s[12] += (s[4] | s[14]); + s[13] = mh_rotl(s[13] ^ s[12], 10u); + s[2] ^= s[13]; + s[14] = s[14] * 0x1a3e65cbu + s[2]; + s[15] *= (s[14] | 1u); + s[11] += s[15]; + s[7] ^= s[11]; + s[12] -= s[7]; + s[8] ^= s[12] ^ 0xfadd6688u; + s[7] = mh_rotl(s[7], 8u) + s[8]; + s[9] += s[7]; + s[14] ^= s[9]; + s[13] += s[14]; + s[6] ^= s[13] ^ 0xed97a531u; + s[7] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[6] ^= s[4]; + s[10] ^= s[6]; + s[3] ^= s[10]; + s[1] -= s[3]; + s[3] += s[1]; + s[13] = (s[13] ^ s[3]) * 0x48c92b9fu; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[11] = mh_rotl(s[11], 12u) + s[2]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 19u); + s[0] += (s[12] | s[7]); + s[2] = (s[2] ^ s[0]) * 0x3e4b61a1u; + s[0] = (s[0] ^ s[2]) * 0x582f7a5fu; + s[12] = (s[12] ^ s[0]) * 0x2b069c6fu; + s[5] = s[5] * 0x7cf7ee03u + s[12]; + s[0] += s[5]; + s[4] = (s[4] ^ s[0]) * 0x16927f07u; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[12] = mh_rotl(s[12], 15u) + s[2]; + s[5] = (s[5] ^ s[12]) * 0xbf55dac1u; + s[10] *= (s[5] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 16u); + s[3] = mh_rotl(s[3] ^ s[6], 20u); + s[5] += s[3] + 0xc2d80c0eu; + s[13] ^= s[5] ^ 0x9407a51du; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[10] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[10], 6u); + s[3] = mh_rotl(s[3], 5u) + s[1]; + s[9] ^= (s[3] & s[0]); + s[15] ^= s[9]; + s[6] -= s[15]; + s[13] ^= s[6] ^ 0xba96a2feu; + s[14] ^= s[13] ^ 0x39f982b0u; + s[8] += s[14] + 0x4c13cb1au; + s[7] = mh_rotl(s[7] ^ s[8], 23u); + s[15] -= s[7]; + s[7] = mh_rotl(s[7], 30u) + s[15]; + s[11] += s[7]; + s[14] += s[11]; + s[8] = mh_rotl(s[8] ^ s[14], 22u); + s[6] ^= s[8] ^ 0x34c4199bu; + s[3] ^= s[6]; + s[4] += s[3]; + s[13] += s[4]; + s[9] ^= s[13]; + s[3] ^= (s[9] & s[4]); + s[15] += s[3]; + s[1] -= s[15]; + s[12] -= s[1]; + s[14] += s[12] + 0xec96595fu; + s[4] ^= s[14]; + s[12] ^= s[4]; + s[11] -= s[12]; + s[13] ^= s[11]; + s[0] += s[13]; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[8] ^= s[3]; + s[0] += (s[8] | s[15]); + s[11] = mh_rotl(s[11], 1u) + s[0]; + s[7] += (s[11] | s[5]); + s[4] = s[4] * 0xc1674329u + s[7]; + s[7] += s[4]; + s[6] *= (s[7] | 1u); + s[2] = (s[2] ^ s[6]) * 0xc284407bu; + s[0] ^= s[2]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 27u) + s[7]; + s[8] *= (s[14] | 1u); + s[14] -= s[8]; + s[11] *= (s[14] | 1u); + s[7] = s[7] * 0x5a2517e9u + s[11]; + s[6] += s[7]; + s[7] ^= s[6] ^ 0xf29de804u; + s[10] -= s[7]; + s[8] ^= s[10]; + s[5] = mh_rotl(s[5], 6u) + s[8]; + s[3] += s[5] + 0xa3c2f2b2u; + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[12] -= s[0]; + s[8] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[8], 1u); + s[12] = s[12] * 0xed2bef65u + s[6]; + s[9] += s[12]; + s[4] ^= s[9] ^ 0xacaef5beu; + s[3] += s[4]; + s[1] *= (s[3] | 1u); + s[8] += s[1] + 0x462f5fffu; + s[2] ^= s[8]; + s[1] += s[2]; + s[11] = mh_rotl(s[11], 14u) + s[1]; + s[6] ^= s[11] ^ 0xa93bca39u; + s[1] ^= s[6]; + s[0] ^= s[1] ^ 0x571f65b5u; + s[9] = s[9] * 0xcd8edcedu + s[0]; + s[11] ^= s[9] ^ 0xa554ca69u; + s[2] += s[11]; + s[9] ^= s[2]; + s[4] ^= s[9]; + s[8] += s[4]; + s[4] += s[8]; + s[12] -= s[4]; + s[4] -= s[12]; + s[12] = mh_rotl(s[12] ^ s[4], 1u); + s[5] = mh_rotl(s[5] ^ s[12], 17u); + s[14] *= (s[5] | 1u); + s[8] += (s[14] | s[4]); + s[13] = mh_rotl(s[13] ^ s[8], 21u); + s[15] -= s[13]; + s[0] ^= s[15]; + s[6] += s[0]; + s[14] = mh_rotl(s[14] ^ s[6], 24u); + s[13] = s[13] * 0x929d4b37u + s[14]; + s[15] -= s[13]; + s[4] = (s[4] ^ s[15]) * 0xc6dc8fbbu; + s[7] = mh_rotl(s[7] ^ s[4], 23u); + s[8] ^= s[7]; + s[10] = (s[10] ^ s[8]) * 0x06233043u; + s[2] = (s[2] ^ s[10]) * 0x4403efd9u; + s[3] ^= s[2]; + s[5] -= s[3]; + s[12] += s[5]; + s[6] = s[6] * 0x2ae6d079u + s[12]; + s[10] ^= s[6]; + s[7] ^= s[10] ^ 0x674b5a65u; + s[13] = mh_rotl(s[13], 3u) + s[7]; + s[9] *= (s[13] | 1u); + s[12] -= s[9]; + s[8] *= (s[12] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[7] = mh_rotl(s[7] ^ s[9], 20u); + s[13] += s[7]; + s[4] += s[13]; + s[13] ^= s[4]; + s[3] -= s[13]; + s[4] -= s[3]; + s[0] ^= s[4]; + s[3] = mh_rotl(s[3], 3u) + s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= s[5]; + s[11] *= (s[0] | 1u); + s[10] ^= s[11] ^ 0x147c14d2u; + s[11] ^= s[10]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[13] ^= s[0]; + s[12] ^= s[13]; + s[0] -= s[12]; + s[13] ^= s[0]; + s[11] = mh_rotl(s[11], 26u) + s[13]; + s[10] += s[11]; + s[11] ^= s[10] ^ 0x4b0abaf2u; + s[3] -= s[11]; + s[8] += (s[3] | s[9]); + s[12] += (s[8] | s[10]); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[4] *= (s[11] | 1u); + s[0] += s[4] + 0xab0da7ecu; + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[12] -= s[8]; + s[9] = mh_rotl(s[9], 7u) + s[12]; + s[7] -= s[9]; + s[3] *= (s[7] | 1u); + s[2] += s[3]; + s[4] = s[4] * 0xf4865499u + s[2]; + s[7] = s[7] * 0xbed687ffu + s[4]; + s[14] += s[7]; + s[15] += s[14] + 0x603451a7u; + s[10] ^= (s[15] & s[2]); + s[7] = mh_rotl(s[7] ^ s[10], 22u); + s[1] += s[7]; + s[5] += s[1]; + s[14] = (s[14] ^ s[5]) * 0x8e7b488du; + s[9] += (s[14] | s[11]); + s[12] *= (s[9] | 1u); + s[1] += s[12]; + s[12] += s[1] + 0x6855c1d8u; + s[15] -= s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 5u); + s[8] = mh_rotl(s[8] ^ s[9], 2u); + s[7] -= s[8]; + s[14] *= (s[7] | 1u); + s[12] *= (s[14] | 1u); + s[0] = mh_rotl(s[0], 1u) + s[12]; + s[15] = mh_rotl(s[15], 7u) + s[0]; + s[5] *= (s[15] | 1u); + s[12] = (s[12] ^ s[5]) * 0x015c0c07u; + s[5] = mh_rotl(s[5], 4u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[5], 2u); + s[10] ^= s[4]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +static inline void mh_item(__global const uint* cache, uint t, uint* s) { + s[0] = 0x3067619fu; + s[1] = 0x3c269176u; + s[2] = 0x84a03b03u; + s[3] = 0xf8c63294u; + s[4] = 0xff977c5bu; + s[5] = 0xe60def3eu; + s[6] = 0x63630141u; + s[7] = 0xb8fbcb58u; + s[8] = t * 0x42146205u + 0xbab68293u; + s[9] = t * 0x52cbe0fbu + 0xcc162340u; + s[10] = t * 0x7ecf4a03u + 0x6ce151ccu; + s[11] = t * 0x6728907fu + 0xe62b8997u; + s[12] = t * 0xd81d9751u + 0xc9c80297u; + s[13] = t * 0x132952c3u + 0xf74a1654u; + s[14] = t * 0xf60de277u + 0x3d704af5u; + s[15] = t * 0x05358035u + 0x3cf522b7u; + mh_round_0(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { __global const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +static inline uint mh_word(__global const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// Memory-hard dataset (MEMHARD.md). One work-item per cache segment; one work-item per 64-byte dataset item. +// The same constants as memhard.h in this pack (one emitter, three dialects). +__kernel void igneum_cache_fill(__global uint* cache, uint nSegments) { + uint seg = (uint)get_global_id(0); + if (seg < nSegments) mh_cache_segment(cache, seg); +} +__kernel void igneum_build(__global uint* ds, __global const uint* cache, uint nItems) { + uint t = (uint)get_global_id(0); + if (t < nItems) { + uint s[16]; + mh_item(cache, t, s); + __global uint* d = ds + ((ulong)t * 16u); + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; + } +} + +// One hash per work-item. IGNEUM_GROUP is a multiple of 32; lane = lid & 31 and every exchange stays inside the +// lane's own aligned run of 32 work-items, exactly like simd_shuffle_xor inside a 32-wide Metal SIMD group and +// __shfl_xor_sync inside a CUDA warp. Control flow is uniform (no branches at all). +IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ 0x67a9a7beu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x1a155b25u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0x1a155b25u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0xfddfb732u; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0xfddfb732u; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4b5af2e8u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0x4b5af2e8u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xc55caf33u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0xc55caf33u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xa27c13b7u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0xa27c13b7u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x06628a48u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x06628a48u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x03852469u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x03852469u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x67a9a7beu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r2 = r3 * r4 + r2; // 0 mad + r2 = r1 * r1 + r2; // 1 mad + r2 = r3 * r2 + r2; // 2 mad + r3 = r3 ^ r5; // 3 xor + r7 = r7 ^ ds[r2 & mask]; // 4 load + r5 = r5 ^ ds[r7 & mask]; // 5 load + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r1 = r1 ^ t_; } // 6 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r7 = r7 ^ t_; } // 7 shfl + r1 = mul_hi(r1, r5); // 8 mulhi + r6 = rotr_var(r6, r3); // 9 rotr + r3 = r3 | r4; // 10 or + r4 = r4 ^ ds[r3 & mask]; // 11 load + r0 = mul_hi(r0, r4); // 12 mulhi + r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add + r0 = r0 ^ ds[r4 & mask]; // 14 load + r2 = r2 - r4; // 15 sub + r2 = r2 ^ ds[r0 & mask]; // 16 load + r7 = r7 ^ ds[r2 & mask]; // 17 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl + r5 = r5 * r0; // 19 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl + r6 = mul_hi(r6, r2); // 22 mulhi + r6 = r6 ^ ds[r1 & mask]; // 23 load + r5 = r5 * r0; // 24 mul + r5 = rotl_imm(r5, 19u); // 25 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl + r0 = r0 ^ r5; // 27 xor + r0 = r0 ^ r4; // 28 xor + r3 = r3 - r0; // 29 sub + r5 = r5 * r1; // 30 mul + r7 = r7 ^ ds[r2 & mask]; // 31 load + r1 = r1 ^ ds[r0 & mask]; // 32 load + r5 = r5 ^ r6; // 33 xor + r5 = r5 ^ ds[r1 & mask]; // 34 load + r0 = mul_hi(r0, r5); // 35 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl + r7 = r7 ^ ds[r0 & mask]; // 37 load + r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl + r2 = r2 ^ r5; // 40 xor + r3 = r6 * r3 + r3; // 41 mad + r6 = r6 - r7; // 42 sub + r7 = r7 ^ r0; // 43 xor + r1 = r1 ^ ds[r7 & mask]; // 44 load + r2 = r2 * r3; // 45 mul + r1 = mul_hi(r1, r5); // 46 mulhi + r4 = r4 - r3; // 47 sub + r2 = rotr_var(r2, r6); // 48 rotr + r3 = r3 ^ ds[r5 & mask]; // 49 load + r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add + r0 = r0 * r2; // 51 mul + r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add + r1 = r1 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0x77b1520du : 0x2bb965afu); // 53 add + r7 = rotl_imm(r7, 14u); // 54 rotl + r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add + r6 = r6 ^ ds[r7 & mask]; // 56 load + r1 = rotr_var(r1, r5); // 57 rotr + r5 = r5 ^ ds[r4 & mask]; // 58 load + r6 = r6 ^ ds[r2 & mask]; // 59 load + r3 = r5 * r0 + r3; // 60 mad + r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add + r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add + r5 = rotl_imm(r5, 19u); // 63 rotl + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} + +#if IGNEUM_EXCHANGE != 0 +// Reports the sub-group size this device uses for a work-group of IGNEUM_GROUP items. host.c runs it only when the +// per-kernel query (clGetKernelSubGroupInfoKHR on igneum_hash) is unavailable; that query is preferred because a +// compiler may pick a different wave width per kernel (RDNA: wave32 or wave64). See WAVEFRONT.md. +IGNEUM_KERNEL_HASH void igneum_probe_subgroup(__global uint* out) { + if (get_local_id(0) == 0u) { out[0] = get_sub_group_size(); out[1] = get_num_sub_groups(); } +} +#endif + +// Header-bound variant (bind.rs): the init words come from initw, not SEEDW. Same body as igneum_hash. +IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulong* out, uint baseNonce, uint mask, __global const uint* initw) { + uint gid = (uint)get_global_id(0); + uint lid = (uint)get_local_id(0); + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + uint iw0 = initw[0], iw1 = initw[1], iw2 = initw[2], iw3 = initw[3], iw4 = initw[4], iw5 = initw[5], iw6 = initw[6], iw7 = initw[7]; +#if IGNEUM_EXCHANGE == 0 + IGNEUM_LOCAL_WORDS(xch, 2 * IGNEUM_GROUP); + uint xk = 0u; +#else + (void)lid; +#endif + { uint x = nonce ^ iw0; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ iw1; } + { uint x = nonce ^ iw1; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ iw2; } + { uint x = nonce ^ iw2; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ iw3; } + { uint x = nonce ^ iw3; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ iw4; } + { uint x = nonce ^ iw4; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ iw5; } + { uint x = nonce ^ iw5; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ iw6; } + { uint x = nonce ^ iw6; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ iw7; } + { uint x = nonce ^ iw7; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ iw0; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r2 = r3 * r4 + r2; // 0 mad + r2 = r1 * r1 + r2; // 1 mad + r2 = r3 * r2 + r2; // 2 mad + r3 = r3 ^ r5; // 3 xor + r7 = r7 ^ ds[r2 & mask]; // 4 load + r5 = r5 ^ ds[r7 & mask]; // 5 load + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r1 = r1 ^ t_; } // 6 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r7 = r7 ^ t_; } // 7 shfl + r1 = mul_hi(r1, r5); // 8 mulhi + r6 = rotr_var(r6, r3); // 9 rotr + r3 = r3 | r4; // 10 or + r4 = r4 ^ ds[r3 & mask]; // 11 load + r0 = mul_hi(r0, r4); // 12 mulhi + r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add + r0 = r0 ^ ds[r4 & mask]; // 14 load + r2 = r2 - r4; // 15 sub + r2 = r2 ^ ds[r0 & mask]; // 16 load + r7 = r7 ^ ds[r2 & mask]; // 17 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl + r5 = r5 * r0; // 19 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl + r6 = mul_hi(r6, r2); // 22 mulhi + r6 = r6 ^ ds[r1 & mask]; // 23 load + r5 = r5 * r0; // 24 mul + r5 = rotl_imm(r5, 19u); // 25 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl + r0 = r0 ^ r5; // 27 xor + r0 = r0 ^ r4; // 28 xor + r3 = r3 - r0; // 29 sub + r5 = r5 * r1; // 30 mul + r7 = r7 ^ ds[r2 & mask]; // 31 load + r1 = r1 ^ ds[r0 & mask]; // 32 load + r5 = r5 ^ r6; // 33 xor + r5 = r5 ^ ds[r1 & mask]; // 34 load + r0 = mul_hi(r0, r5); // 35 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl + r7 = r7 ^ ds[r0 & mask]; // 37 load + r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl + r2 = r2 ^ r5; // 40 xor + r3 = r6 * r3 + r3; // 41 mad + r6 = r6 - r7; // 42 sub + r7 = r7 ^ r0; // 43 xor + r1 = r1 ^ ds[r7 & mask]; // 44 load + r2 = r2 * r3; // 45 mul + r1 = mul_hi(r1, r5); // 46 mulhi + r4 = r4 - r3; // 47 sub + r2 = rotr_var(r2, r6); // 48 rotr + r3 = r3 ^ ds[r5 & mask]; // 49 load + r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add + r0 = r0 * r2; // 51 mul + r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add + r1 = r1 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0x77b1520du : 0x2bb965afu); // 53 add + r7 = rotl_imm(r7, 14u); // 54 rotl + r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add + r6 = r6 ^ ds[r7 & mask]; // 56 load + r1 = rotr_var(r1, r5); // 57 rotr + r5 = r5 ^ ds[r4 & mask]; // 58 load + r6 = r6 ^ ds[r2 & mask]; // 59 load + r3 = r5 * r0 + r3; // 60 mad + r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add + r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add + r5 = rotl_imm(r5, 19u); // 63 rotl + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cu b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cu new file mode 100644 index 00000000..e8f1a9a7 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/kernel_bound.cu @@ -0,0 +1,123 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// Header-bound twin of igneum_hash in kernel.cu: the init words come from a kernel argument, not SEEDW. +// Host declarations (also in program_bound.h if present): +// struct IgneumInitWords { uint32_t w[8]; }; +// cudaError_t igneum_launch_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, +// IgneumInitWords iw, uint32_t nonces, uint32_t blockWarps); +// cudaError_t igneum_hash_bound_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps); +#include +#include +#include "program.h" + +struct IgneumInitWords { uint32_t w[8]; }; + +__device__ __forceinline__ uint32_t splitmix32(uint32_t x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +__device__ __forceinline__ uint32_t rotl_imm(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } +__device__ __forceinline__ uint32_t rotr_var(uint32_t x, uint32_t n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } + +__global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, IgneumInitWords iw) { + uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; + uint32_t nonce = baseNonce + gid; + uint32_t r0, r1, r2, r3, r4, r5, r6, r7; + { uint32_t x = nonce ^ iw.w[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ iw.w[1]; } + { uint32_t x = nonce ^ iw.w[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ iw.w[2]; } + { uint32_t x = nonce ^ iw.w[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ iw.w[3]; } + { uint32_t x = nonce ^ iw.w[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ iw.w[4]; } + { uint32_t x = nonce ^ iw.w[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ iw.w[5]; } + { uint32_t x = nonce ^ iw.w[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ iw.w[6]; } + { uint32_t x = nonce ^ iw.w[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ iw.w[7]; } + { uint32_t x = nonce ^ iw.w[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ iw.w[0]; } + + for (uint32_t it = 0u; it < 8u; ++it) { + uint32_t sel = r0; + r2 = r3 * r4 + r2; // 0 mad + r2 = r1 * r1 + r2; // 1 mad + r2 = r3 * r2 + r2; // 2 mad + r3 = r3 ^ r5; // 3 xor + r7 = r7 ^ ds[r2 & mask]; // 4 load + r5 = r5 ^ ds[r7 & mask]; // 5 load + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 6 shfl + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // 7 shfl + r1 = __umulhi(r1, r5); // 8 mulhi + r6 = rotr_var(r6, r3); // 9 rotr + r3 = r3 | r4; // 10 or + r4 = r4 ^ ds[r3 & mask]; // 11 load + r0 = __umulhi(r0, r4); // 12 mulhi + r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add + r0 = r0 ^ ds[r4 & mask]; // 14 load + r2 = r2 - r4; // 15 sub + r2 = r2 ^ ds[r0 & mask]; // 16 load + r7 = r7 ^ ds[r2 & mask]; // 17 load + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl + r5 = r5 * r0; // 19 mul + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl + r6 = __umulhi(r6, r2); // 22 mulhi + r6 = r6 ^ ds[r1 & mask]; // 23 load + r5 = r5 * r0; // 24 mul + r5 = rotl_imm(r5, 19u); // 25 rotl + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl + r0 = r0 ^ r5; // 27 xor + r0 = r0 ^ r4; // 28 xor + r3 = r3 - r0; // 29 sub + r5 = r5 * r1; // 30 mul + r7 = r7 ^ ds[r2 & mask]; // 31 load + r1 = r1 ^ ds[r0 & mask]; // 32 load + r5 = r5 ^ r6; // 33 xor + r5 = r5 ^ ds[r1 & mask]; // 34 load + r0 = __umulhi(r0, r5); // 35 mulhi + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl + r7 = r7 ^ ds[r0 & mask]; // 37 load + r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl + r2 = r2 ^ r5; // 40 xor + r3 = r6 * r3 + r3; // 41 mad + r6 = r6 - r7; // 42 sub + r7 = r7 ^ r0; // 43 xor + r1 = r1 ^ ds[r7 & mask]; // 44 load + r2 = r2 * r3; // 45 mul + r1 = __umulhi(r1, r5); // 46 mulhi + r4 = r4 - r3; // 47 sub + r2 = rotr_var(r2, r6); // 48 rotr + r3 = r3 ^ ds[r5 & mask]; // 49 load + r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add + r0 = r0 * r2; // 51 mul + r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add + r1 = r1 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0x77b1520du : 0x2bb965afu); // 53 add + r7 = rotl_imm(r7, 14u); // 54 rotl + r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add + r6 = r6 ^ ds[r7 & mask]; // 56 load + r1 = rotr_var(r1, r5); // 57 rotr + r5 = r5 ^ ds[r4 & mask]; // 58 load + r6 = r6 ^ ds[r2 & mask]; // 59 load + r3 = r5 * r0 + r3; // 60 mad + r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add + r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add + r5 = rotl_imm(r5, 19u); // 63 rotl + } + uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint32_t hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((uint64_t)hi << 32) | (uint64_t)lo; +} + +cudaError_t igneum_launch_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + IgneumInitWords iw, uint32_t nonces, uint32_t blockWarps) { + if (blockWarps == 0u || blockWarps > 32u) return cudaErrorInvalidValue; + uint32_t block = 32u * blockWarps; + if (nonces == 0u || (nonces % block) != 0u) return cudaErrorInvalidValue; + igneum_hash_bound<<>>(ds, out, baseNonce, mask, iw); + return cudaGetLastError(); +} + +cudaError_t igneum_hash_bound_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps) { + cudaFuncAttributes attr; + cudaError_t e = cudaFuncGetAttributes(&attr, igneum_hash_bound); + if (e != cudaSuccess) return e; + *numRegs = attr.numRegs; + return cudaOccupancyMaxActiveBlocksPerMultiprocessor(blocksPerSM, igneum_hash_bound, (int)(32u * blockWarps), 0); +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.h b/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.h new file mode 100644 index 00000000..b0a3f325 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.h @@ -0,0 +1,6773 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// Memory-hard dataset core, the same text that the Mac's Metal kernels and CPU verifier were checked against. +// Included by kernel.cu (device), host.cu (host reference) and proto-opencl/host.c (C99 host reference). +// See proto-metal/MEMHARD.md for the construction. kernel.cl carries the same text in OpenCL C. +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif +#if defined(__CUDACC__) +#define IGNEUM_HD __host__ __device__ __forceinline__ +#elif defined(_MSC_VER) && !defined(__cplusplus) +#define IGNEUM_HD static __inline +#else +#define IGNEUM_HD static inline +#endif +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 463535d01511350d). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +IGNEUM_HD uint32_t mh_rotl(uint32_t x, uint32_t n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +IGNEUM_HD void mh_chacha_block(const uint32_t* x, uint32_t* y) { + for (uint32_t i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint32_t r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint32_t i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +IGNEUM_HD void mh_cache_segment(uint32_t* cache, uint32_t seg) { + uint32_t prev[16]; uint32_t x[16]; uint32_t y[16]; + for (uint32_t i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint32_t j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0x3067619fu ^ prev[4]; + x[5] = 0x3c269176u ^ prev[5]; + x[6] = 0x84a03b03u ^ prev[6]; + x[7] = 0xf8c63294u ^ prev[7]; + x[8] = 0xff977c5bu ^ prev[8]; + x[9] = 0xe60def3eu ^ prev[9]; + x[10] = 0x63630141u ^ prev[10]; + x[11] = 0xb8fbcb58u ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + uint32_t* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint32_t i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +IGNEUM_HD void mh_mixer(uint32_t* s, uint32_t rk) { + s[0] = (s[0] ^ (0xbab68293u + rk)) * 0x42146205u; + s[1] = (s[1] ^ (0xcc162340u + rk)) * 0x52cbe0fbu; + s[2] = (s[2] ^ (0x6ce151ccu + rk)) * 0x7ecf4a03u; + s[3] = (s[3] ^ (0xe62b8997u + rk)) * 0x6728907fu; + s[4] = (s[4] ^ (0xc9c80297u + rk)) * 0xd81d9751u; + s[5] = (s[5] ^ (0xf74a1654u + rk)) * 0x132952c3u; + s[6] = (s[6] ^ (0x3d704af5u + rk)) * 0xf60de277u; + s[7] = (s[7] ^ (0x3cf522b7u + rk)) * 0x05358035u; + s[8] = (s[8] ^ (0x2b9cac04u + rk)) * 0xbaf6499du; + s[9] = (s[9] ^ (0xa880ac10u + rk)) * 0xe4db9667u; + s[10] = (s[10] ^ (0x13e5dd1du + rk)) * 0x3e98f45du; + s[11] = (s[11] ^ (0x6fc3e233u + rk)) * 0xd0004eddu; + s[12] = (s[12] ^ (0x2d83eeacu + rk)) * 0x2691630du; + s[13] = (s[13] ^ (0x9006e8bfu + rk)) * 0x9beb3bcfu; + s[14] = (s[14] ^ (0x2c4b5362u + rk)) * 0xab310379u; + s[15] = (s[15] ^ (0x31b49ee2u + rk)) * 0x99cfb423u; + MH_QR(s[0], s[4], s[8], s[12], 20u, 20u, 19u, 4u) MH_QR(s[1], s[5], s[9], s[13], 20u, 20u, 19u, 4u) + MH_QR(s[2], s[6], s[10], s[14], 20u, 20u, 19u, 4u) MH_QR(s[3], s[7], s[11], s[15], 20u, 20u, 19u, 4u) + MH_QR(s[0], s[5], s[10], s[15], 26u, 3u, 3u, 27u) MH_QR(s[1], s[6], s[11], s[12], 26u, 3u, 3u, 27u) + MH_QR(s[2], s[7], s[8], s[13], 26u, 3u, 3u, 27u) MH_QR(s[3], s[4], s[9], s[14], 26u, 3u, 3u, 27u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_0(uint32_t* s) { + s[14] = mh_rotl(s[14], 30u) + s[0]; + s[15] *= (s[14] | 1u); + s[6] += s[15] + 0xd9ac4ac1u; + s[3] ^= s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[7] ^= s[2]; + s[10] -= s[7]; + s[11] += s[10]; + s[12] *= (s[11] | 1u); + s[4] ^= s[12]; + s[5] = (s[5] ^ s[4]) * 0xbce67fc5u; + s[1] = (s[1] ^ s[5]) * 0xe0fb71bbu; + s[5] -= s[1]; + s[3] += s[5]; + s[10] += s[3]; + s[7] = mh_rotl(s[7] ^ s[10], 5u); + s[0] ^= s[7]; + s[10] ^= s[0]; + s[8] -= s[10]; + s[12] += s[8]; + s[9] += s[12]; + s[12] ^= s[9] ^ 0x891d0a72u; + s[1] -= s[12]; + s[10] ^= s[1] ^ 0x12a9780cu; + s[2] = mh_rotl(s[2] ^ s[10], 27u); + s[11] *= (s[2] | 1u); + s[4] += s[11]; + s[7] ^= (s[4] & s[5]); + s[0] -= s[7]; + s[11] += s[0]; + s[8] -= s[11]; + s[15] += s[8] + 0x8186dd7cu; + s[9] ^= s[15]; + s[12] += s[9]; + s[5] ^= s[12] ^ 0x4a9b0a35u; + s[4] *= (s[5] | 1u); + s[9] += s[4]; + s[12] += s[9]; + s[10] = (s[10] ^ s[12]) * 0xe3385ffdu; + s[11] -= s[10]; + s[9] -= s[11]; + s[13] += s[9] + 0xb72698dbu; + s[1] ^= (s[13] & s[2]); + s[10] = (s[10] ^ s[1]) * 0xcf3e22d7u; + s[12] = (s[12] ^ s[10]) * 0xb28b0e19u; + s[9] += s[12]; + s[1] ^= s[9]; + s[2] *= (s[1] | 1u); + s[7] ^= s[2]; + s[8] ^= (s[7] & s[12]); + s[6] += s[8]; + s[15] = (s[15] ^ s[6]) * 0xee66c1cfu; + s[4] -= s[15]; + s[3] += s[4]; + s[12] = s[12] * 0xd3452a43u + s[3]; + s[0] ^= s[12]; + s[1] *= (s[0] | 1u); + s[12] += s[1] + 0xce692008u; + s[6] ^= (s[12] & s[5]); + s[13] ^= (s[6] & s[15]); + s[7] ^= s[13]; + s[9] += s[7]; + s[12] *= (s[9] | 1u); + s[2] -= s[12]; + s[15] = mh_rotl(s[15], 25u) + s[2]; + s[6] ^= s[15]; + s[13] -= s[6]; + s[7] += (s[13] | s[15]); + s[15] = s[15] * 0x3bb17cedu + s[7]; + s[1] *= (s[15] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[1]; + s[0] = (s[0] ^ s[6]) * 0xbb828911u; + s[3] += s[0] + 0x6593f64cu; + s[5] ^= s[3] ^ 0xff45cfddu; + s[4] ^= s[5]; + s[7] *= (s[4] | 1u); + s[9] ^= s[7]; + s[11] += s[9] + 0x1618a409u; + s[2] *= (s[11] | 1u); + s[15] = (s[15] ^ s[2]) * 0x60c6efedu; + s[11] = mh_rotl(s[11] ^ s[15], 20u); + s[3] ^= s[11] ^ 0x6961fd5au; + s[6] ^= s[3]; + s[2] += s[6]; + s[0] = mh_rotl(s[0] ^ s[2], 19u); + s[5] *= (s[0] | 1u); + s[8] += s[5]; + s[9] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[9], 7u); + s[0] ^= s[2]; + s[10] ^= s[0]; + s[1] += s[10]; + s[11] += s[1]; + s[9] += s[11]; + s[10] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 3u) + s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[2] = mh_rotl(s[2] ^ s[0], 25u); + s[0] = mh_rotl(s[0], 18u) + s[2]; + s[1] = mh_rotl(s[1], 15u) + s[0]; + s[8] *= (s[1] | 1u); + s[2] -= s[8]; + s[5] = mh_rotl(s[5] ^ s[2], 7u); + s[11] ^= s[5]; + s[8] ^= s[11]; + s[3] ^= s[8] ^ 0xe6be7c09u; + s[4] += (s[3] | s[13]); + s[2] = mh_rotl(s[2] ^ s[4], 13u); + s[15] = mh_rotl(s[15] ^ s[2], 9u); + s[4] = mh_rotl(s[4], 19u) + s[15]; + s[10] = mh_rotl(s[10], 25u) + s[4]; + s[11] *= (s[10] | 1u); + s[7] -= s[11]; + s[2] ^= (s[7] & s[4]); + s[1] = mh_rotl(s[1], 14u) + s[2]; + s[3] *= (s[1] | 1u); + s[0] = s[0] * 0xd9de6c6du + s[3]; + s[12] = (s[12] ^ s[0]) * 0xe3e5b763u; + s[2] = (s[2] ^ s[12]) * 0xa90198efu; + s[6] = mh_rotl(s[6] ^ s[2], 23u); + s[1] *= (s[6] | 1u); + s[2] ^= (s[1] & s[5]); + s[12] -= s[2]; + s[14] += s[12]; + s[8] += (s[14] | s[12]); + s[5] -= s[8]; + s[12] -= s[5]; + s[5] ^= s[12]; + s[2] *= (s[5] | 1u); + s[0] += s[2]; + s[9] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[9]; + s[0] = (s[0] ^ s[5]) * 0x1881452du; + s[10] += s[0] + 0x0da78a3eu; + s[7] -= s[10]; + s[13] = (s[13] ^ s[7]) * 0x97232879u; + s[11] = (s[11] ^ s[13]) * 0xb8dae9a5u; + s[13] = mh_rotl(s[13] ^ s[11], 8u); + s[6] += s[13]; + s[3] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[3], 31u); + s[4] ^= s[6]; + s[9] ^= s[4] ^ 0x6b4c4741u; + s[15] = mh_rotl(s[15], 19u) + s[9]; + s[8] ^= s[15] ^ 0x756f820du; + s[1] = mh_rotl(s[1] ^ s[8], 10u); + s[6] -= s[1]; + s[15] = mh_rotl(s[15], 29u) + s[6]; + s[9] = mh_rotl(s[9] ^ s[15], 31u); + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] *= (s[5] | 1u); + s[12] += s[11] + 0xee00292du; + s[1] += s[12]; + s[12] ^= s[1] ^ 0x9c50a8acu; + s[13] *= (s[12] | 1u); + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[0] = (s[0] ^ s[8]) * 0xc53caea3u; + s[12] *= (s[0] | 1u); + s[9] -= s[12]; + s[11] -= s[9]; + s[5] = mh_rotl(s[5], 15u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[5], 21u); + s[2] ^= s[13] ^ 0x84b1978fu; + s[14] += s[2]; + s[3] ^= s[14] ^ 0x05a8c594u; + s[13] += s[3] + 0x54e905a7u; + s[11] ^= s[13]; + s[8] -= s[11]; + s[7] ^= s[8] ^ 0x2244941fu; + s[1] = s[1] * 0xed0aecc5u + s[7]; + s[7] *= (s[1] | 1u); + s[10] = (s[10] ^ s[7]) * 0x4b837a0bu; + s[12] -= s[10]; + s[2] -= s[12]; + s[3] *= (s[2] | 1u); + s[7] *= (s[3] | 1u); + s[12] ^= s[7] ^ 0x5ffe7c51u; + s[15] ^= (s[12] & s[6]); + s[0] = mh_rotl(s[0], 4u) + s[15]; + s[2] = mh_rotl(s[2], 12u) + s[0]; + s[4] -= s[2]; + s[9] -= s[4]; + s[15] ^= s[9]; + s[14] = mh_rotl(s[14], 15u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[14], 4u); + s[8] = mh_rotl(s[8], 12u) + s[1]; + s[2] *= (s[8] | 1u); + s[0] ^= s[2] ^ 0x24e25306u; + s[13] ^= s[0]; + s[7] = mh_rotl(s[7], 14u) + s[13]; + s[12] += s[7]; + s[2] ^= (s[12] & s[7]); + s[9] = mh_rotl(s[9], 4u) + s[2]; + s[8] *= (s[9] | 1u); + s[3] ^= (s[8] & s[5]); + s[8] = (s[8] ^ s[3]) * 0x6cea4323u; + s[13] += s[8]; + s[9] *= (s[13] | 1u); + s[15] *= (s[9] | 1u); + s[1] ^= s[15]; + s[7] -= s[1]; + s[2] += s[7] + 0x188c833fu; + s[14] += s[2] + 0xc33e117au; + s[1] ^= s[14] ^ 0x97c1cf13u; + s[15] = mh_rotl(s[15] ^ s[1], 10u); + s[13] = mh_rotl(s[13] ^ s[15], 25u); + s[9] += s[13]; + s[3] = mh_rotl(s[3], 19u) + s[9]; + s[7] ^= (s[3] & s[15]); + s[13] += s[7]; + s[0] = mh_rotl(s[0], 24u) + s[13]; + s[15] ^= s[0]; + s[11] ^= s[15] ^ 0x8046a7c8u; + s[7] *= (s[11] | 1u); + s[1] ^= s[7]; + s[3] ^= s[1]; + s[6] += s[3]; + s[11] ^= s[6]; + s[9] += (s[11] | s[14]); + s[10] ^= s[9]; + s[7] -= s[10]; + s[4] += s[7]; + s[13] += s[4] + 0x0d609a06u; + s[3] += (s[13] | s[11]); + s[8] += (s[3] | s[6]); + s[13] *= (s[8] | 1u); + s[7] ^= (s[13] & s[6]); + s[14] += s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 17u); + s[14] ^= (s[5] & s[3]); + s[11] += (s[14] | s[0]); + s[4] ^= s[11]; + s[3] ^= s[4] ^ 0x518deaefu; + s[8] *= (s[3] | 1u); + s[13] = mh_rotl(s[13] ^ s[8], 25u); + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[15] = (s[15] ^ s[3]) * 0xf612eda3u; + s[7] = mh_rotl(s[7] ^ s[15], 8u); + s[5] = s[5] * 0x2836c587u + s[7]; + s[14] = s[14] * 0x97e56ca5u + s[5]; + s[9] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[9], 23u); + s[0] -= s[15]; + s[6] ^= s[0]; + s[4] ^= (s[6] & s[15]); + s[7] ^= s[4]; + s[1] -= s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[15] = (s[15] ^ s[14]) * 0x8744e455u; + s[9] += s[15]; + s[3] = mh_rotl(s[3], 1u) + s[9]; + s[8] = s[8] * 0x973da983u + s[3]; + s[11] ^= s[8]; + s[9] ^= s[11]; + s[8] *= (s[9] | 1u); + s[13] += s[8] + 0x57db65d6u; + s[15] *= (s[13] | 1u); + s[14] -= s[15]; + s[1] = (s[1] ^ s[14]) * 0xb9f9718fu; + s[7] = mh_rotl(s[7] ^ s[1], 31u); + s[9] = (s[9] ^ s[7]) * 0x640547efu; + s[11] += s[9]; + s[3] = mh_rotl(s[3], 10u) + s[11]; + s[0] = (s[0] ^ s[3]) * 0xb284d74fu; + s[4] += s[0]; + s[15] += (s[4] | s[11]); + s[9] += s[15] + 0xf4848271u; + s[14] *= (s[9] | 1u); + s[7] += s[14] + 0x9cc79f25u; + s[3] += s[7]; + s[15] = (s[15] ^ s[3]) * 0x89e86eafu; + s[5] += s[15] + 0xd1058324u; + s[6] = (s[6] ^ s[5]) * 0x3a95ce61u; + s[14] -= s[6]; + s[5] ^= s[14]; + s[14] = mh_rotl(s[14], 29u) + s[5]; + s[12] = mh_rotl(s[12], 15u) + s[14]; + s[11] += s[12]; + s[8] *= (s[11] | 1u); + s[15] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[15], 23u); + s[13] ^= s[4]; + s[2] ^= s[13]; + s[4] = (s[4] ^ s[2]) * 0x55b5ed41u; + s[9] ^= s[4]; + s[14] += s[9] + 0x4577e106u; + s[12] *= (s[14] | 1u); + s[7] ^= (s[12] & s[8]); + s[0] = mh_rotl(s[0], 24u) + s[7]; + s[5] += s[0] + 0xe4b59af5u; + s[6] ^= s[5] ^ 0xc95684a6u; + s[2] = mh_rotl(s[2], 15u) + s[6]; + s[3] *= (s[2] | 1u); + s[9] *= (s[3] | 1u); + s[2] ^= (s[9] & s[15]); + s[1] += s[2]; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[10] = (s[10] ^ s[8]) * 0xfc3cdd57u; + s[2] -= s[10]; + s[6] += (s[2] | s[1]); + s[7] ^= s[6]; + s[12] ^= s[7]; + s[9] ^= s[12]; + s[13] ^= s[9] ^ 0x7556231du; + s[3] ^= s[13]; + s[0] += (s[3] | s[6]); + s[12] ^= s[0] ^ 0x58f380adu; + s[15] ^= s[12] ^ 0xcf2c5207u; + s[14] = mh_rotl(s[14], 8u) + s[15]; + s[15] *= (s[14] | 1u); + s[6] ^= s[15]; + s[1] *= (s[6] | 1u); + s[13] ^= (s[1] & s[7]); + s[6] ^= s[13]; + s[9] *= (s[6] | 1u); + s[10] += s[9]; + s[15] ^= (s[10] & s[9]); + s[8] *= (s[15] | 1u); + s[3] -= s[8]; + s[6] *= (s[3] | 1u); + s[12] += s[6]; + s[8] += s[12]; + s[14] ^= s[8]; + s[13] += s[14]; + s[1] += s[13] + 0xc57bd1c4u; + s[3] = mh_rotl(s[3], 22u) + s[1]; + s[13] += s[3]; + s[3] ^= s[13] ^ 0x53c4357du; + s[1] = mh_rotl(s[1], 19u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[14] = s[14] * 0xb9e6c0b1u + s[12]; + s[8] -= s[14]; + s[5] -= s[8]; + s[0] ^= s[5]; + s[11] = (s[11] ^ s[0]) * 0xf434e1efu; + s[5] = (s[5] ^ s[11]) * 0x9121d805u; + s[1] += s[5]; + s[11] += (s[1] | s[7]); + s[8] ^= s[11]; + s[7] *= (s[8] | 1u); + s[12] ^= s[7] ^ 0x367f3a0fu; + s[10] ^= s[12] ^ 0x988ad558u; + s[6] ^= s[10] ^ 0xc31a2c66u; + s[11] += s[6] + 0xf44c1a7du; + s[15] ^= (s[11] & s[1]); + s[2] = mh_rotl(s[2] ^ s[15], 14u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[9] ^= s[3]; + s[1] *= (s[9] | 1u); + s[5] = (s[5] ^ s[1]) * 0x05e8dea9u; + s[12] += (s[5] | s[11]); + s[13] += s[12]; + s[5] -= s[13]; + s[10] ^= s[5]; + s[4] = (s[4] ^ s[10]) * 0xa49163afu; + s[12] += s[4] + 0xa8c7865du; + s[1] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[1], 28u); + s[3] -= s[14]; + s[15] = (s[15] ^ s[3]) * 0x4481a6a5u; + s[12] = mh_rotl(s[12] ^ s[15], 8u); + s[3] -= s[12]; + s[9] = (s[9] ^ s[3]) * 0x0a8015a5u; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[14] -= s[9]; + s[9] *= (s[14] | 1u); + s[7] *= (s[9] | 1u); + s[1] = s[1] * 0x102d9b67u + s[7]; + s[12] += s[1]; + s[14] *= (s[12] | 1u); + s[6] ^= s[14]; + s[0] += s[6] + 0x633908b4u; + s[6] -= s[0]; + s[0] = mh_rotl(s[0] ^ s[6], 26u); + s[11] = s[11] * 0xa3cfd0bfu + s[0]; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[3] ^= s[14]; + s[6] = mh_rotl(s[6], 15u) + s[3]; + s[8] ^= s[6] ^ 0xd47945b7u; + s[11] ^= s[8]; + s[14] += s[11]; + s[5] += s[14]; + s[12] = mh_rotl(s[12], 2u) + s[5]; + s[10] *= (s[12] | 1u); + s[1] *= (s[10] | 1u); + s[3] += s[1]; + s[9] = mh_rotl(s[9] ^ s[3], 2u); + s[2] += s[9]; + s[4] ^= s[2]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[11] -= s[13]; + s[8] += s[11]; + s[7] += s[8] + 0xf15c3fd7u; + s[9] ^= s[7]; + s[8] = mh_rotl(s[8] ^ s[9], 29u); + s[7] = (s[7] ^ s[8]) * 0xea581ad3u; + s[14] = mh_rotl(s[14] ^ s[7], 31u); + s[4] = (s[4] ^ s[14]) * 0x7cfc0ccfu; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[4] -= s[1]; + s[2] ^= s[4] ^ 0x63b7d83fu; + s[10] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[10], 13u); + s[15] ^= s[13] ^ 0x5e3fbc23u; + s[7] = mh_rotl(s[7] ^ s[15], 27u); + s[4] = s[4] * 0x0ab4b509u + s[7]; + s[7] = s[7] * 0xcd845e5du + s[4]; + s[3] = mh_rotl(s[3], 11u) + s[7]; + s[15] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[15], 31u); + s[12] = mh_rotl(s[12] ^ s[6], 19u); + s[6] += s[12] + 0xc5e9e33eu; + s[13] ^= s[6] ^ 0x0ee62cbbu; + s[8] = mh_rotl(s[8] ^ s[13], 9u); + s[0] *= (s[8] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[13] += s[10]; + s[7] += s[13] + 0xb255fa09u; + s[14] += s[7]; + s[6] = mh_rotl(s[6], 24u) + s[14]; + s[3] *= (s[6] | 1u); + s[9] *= (s[3] | 1u); + s[3] = (s[3] ^ s[9]) * 0x833bda21u; + s[12] -= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 10u); + s[9] = mh_rotl(s[9], 25u) + s[6]; + s[12] -= s[9]; + s[11] += s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 24u); + s[14] ^= s[1]; + s[2] += (s[14] | s[9]); + s[13] = (s[13] ^ s[2]) * 0x1bbb3967u; + s[0] ^= s[13]; + s[13] ^= s[0] ^ 0x2109f216u; + s[8] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 23u) + s[8]; + s[9] = s[9] * 0xcdf20df5u + s[4]; + s[0] = s[0] * 0x97687fa1u + s[9]; + s[10] ^= s[0]; + s[2] += s[10]; + s[11] ^= s[2]; + s[12] *= (s[11] | 1u); + s[4] = mh_rotl(s[4] ^ s[12], 25u); + s[10] = mh_rotl(s[10], 28u) + s[4]; + s[0] ^= s[10]; + s[13] -= s[0]; + s[2] = mh_rotl(s[2], 12u) + s[13]; + s[12] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[8] ^= s[7] ^ 0x250900e2u; + s[3] = mh_rotl(s[3] ^ s[8], 27u); + s[10] += s[3] + 0xa18e04b0u; + s[12] = (s[12] ^ s[10]) * 0x7963ce7bu; + s[1] ^= (s[12] & s[6]); + s[13] = mh_rotl(s[13], 3u) + s[1]; + s[3] = mh_rotl(s[3], 1u) + s[13]; + s[14] -= s[3]; + s[10] ^= s[14]; + s[1] ^= s[10]; + s[5] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[5], 12u); + s[6] *= (s[2] | 1u); + s[11] -= s[6]; + s[9] ^= s[11] ^ 0x69d4cac1u; + s[3] = mh_rotl(s[3], 15u) + s[9]; + s[9] += s[3]; + s[14] = (s[14] ^ s[9]) * 0x00adfa7fu; + s[9] = (s[9] ^ s[14]) * 0x698e49f7u; + s[14] ^= (s[9] & s[6]); + s[4] -= s[14]; + s[5] ^= s[4] ^ 0x558a07eeu; + s[8] += s[5]; + s[9] = s[9] * 0xa25a44b5u + s[8]; + s[13] = mh_rotl(s[13], 12u) + s[9]; + s[1] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[1], 2u); + s[9] ^= s[5]; + s[15] += s[9] + 0x75af4931u; + s[9] += s[15]; + s[6] ^= s[9]; + s[9] *= (s[6] | 1u); + s[7] = (s[7] ^ s[9]) * 0x14d500bbu; + s[4] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 1u) + s[4]; + s[9] *= (s[7] | 1u); + s[10] ^= s[9]; + s[12] += s[10]; + s[2] = s[2] * 0x114aee2du + s[12]; + s[0] ^= s[2]; + s[10] += s[0]; + s[8] *= (s[10] | 1u); + s[14] = (s[14] ^ s[8]) * 0x9aaa1821u; + s[3] ^= s[14]; + s[1] = mh_rotl(s[1] ^ s[3], 14u); + s[0] += s[1]; + s[14] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[1] ^= s[11]; + s[3] += s[1]; + s[5] = mh_rotl(s[5] ^ s[3], 28u); + s[12] ^= s[5]; + s[10] ^= s[12] ^ 0xcf112b3eu; + s[12] = mh_rotl(s[12], 17u) + s[10]; + s[8] += s[12] + 0xa0423d55u; + s[12] -= s[8]; + s[4] -= s[12]; + s[14] -= s[4]; + s[0] += s[14]; + s[2] *= (s[0] | 1u); + s[8] ^= s[2]; + s[10] ^= s[8]; + s[4] += s[10] + 0x0e0a85c9u; + s[2] += s[4] + 0x5aa11787u; + s[9] += s[2] + 0xbc33a8acu; + s[1] = mh_rotl(s[1], 2u) + s[9]; + s[11] = (s[11] ^ s[1]) * 0x5ab0da6du; + s[10] = (s[10] ^ s[11]) * 0xfa4adf2du; + s[2] -= s[10]; + s[10] -= s[2]; + s[2] ^= s[10]; + s[1] += s[2]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[3] += s[6]; + s[9] ^= s[3] ^ 0xc19b7470u; + s[12] *= (s[9] | 1u); + s[14] += (s[12] | s[15]); + s[5] = (s[5] ^ s[14]) * 0x6790286fu; + s[15] ^= s[5]; + s[10] -= s[15]; + s[13] += (s[10] | s[3]); + s[2] *= (s[13] | 1u); + s[7] += (s[2] | s[13]); + s[2] += s[7]; + s[11] += s[2]; + s[1] *= (s[11] | 1u); + s[13] += s[1] + 0x9c1bdb18u; + s[5] ^= (s[13] & s[1]); + s[13] += s[5]; + s[14] ^= s[13]; + s[0] += (s[14] | s[13]); + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[7] += s[6]; + s[9] ^= (s[7] & s[0]); + s[15] = (s[15] ^ s[9]) * 0x63348941u; + s[13] ^= s[15]; + s[10] += s[13]; + s[14] = (s[14] ^ s[10]) * 0x04d19b2fu; + s[2] *= (s[14] | 1u); + s[13] -= s[2]; + s[15] -= s[13]; + s[6] += (s[15] | s[12]); + s[14] += s[6] + 0x331d9e99u; + s[1] = mh_rotl(s[1], 24u) + s[14]; + s[2] = s[2] * 0xf02184e1u + s[1]; + s[12] += s[2]; + s[4] = (s[4] ^ s[12]) * 0xa250e449u; + s[2] *= (s[4] | 1u); + s[11] ^= s[2] ^ 0x6c4530fdu; + s[2] = mh_rotl(s[2], 10u) + s[11]; + s[6] *= (s[2] | 1u); + s[0] += (s[6] | s[7]); + s[6] = (s[6] ^ s[0]) * 0x678da095u; + s[14] = mh_rotl(s[14] ^ s[6], 30u); + s[3] = (s[3] ^ s[14]) * 0x3b065e11u; + s[8] += (s[3] | s[13]); + s[0] += s[8] + 0xd1214021u; + s[12] -= s[0]; + s[4] ^= s[12] ^ 0x2ae728adu; + s[0] = mh_rotl(s[0] ^ s[4], 11u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[15] *= (s[4] | 1u); + s[8] = mh_rotl(s[8] ^ s[15], 4u); + s[12] = (s[12] ^ s[8]) * 0x32cf5655u; + s[7] = (s[7] ^ s[12]) * 0xc97ab55fu; + s[15] *= (s[7] | 1u); + s[13] = s[13] * 0xc3424c27u + s[15]; + s[3] *= (s[13] | 1u); + s[13] = s[13] * 0x8b172941u + s[3]; + s[5] = mh_rotl(s[5], 5u) + s[13]; + s[6] ^= s[5]; + s[4] = (s[4] ^ s[6]) * 0xd1833353u; + s[5] = mh_rotl(s[5] ^ s[4], 10u); + s[11] = mh_rotl(s[11], 4u) + s[5]; + s[7] = (s[7] ^ s[11]) * 0x81b253dbu; + s[11] += s[7]; + s[8] = mh_rotl(s[8], 30u) + s[11]; + s[6] ^= s[8]; + s[5] = mh_rotl(s[5], 30u) + s[6]; + s[1] += s[5]; + s[10] += s[1] + 0xc388fc9cu; + s[9] ^= s[10]; + s[7] += (s[9] | s[10]); + s[11] += s[7]; + s[14] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[11] -= s[15]; + s[8] ^= s[11]; + s[6] ^= s[8]; + s[13] ^= s[6]; + s[7] += (s[13] | s[4]); + s[9] ^= s[7]; + s[0] += s[9]; + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 3u); + s[8] = s[8] * 0x229aeb39u + s[5]; + s[1] -= s[8]; + s[0] += s[1]; + s[13] += (s[0] | s[7]); + s[15] = (s[15] ^ s[13]) * 0x878a1a07u; + s[12] += s[15]; + s[14] ^= s[12]; + s[13] -= s[14]; + s[10] ^= s[13] ^ 0x3937b9cbu; + s[3] = mh_rotl(s[3], 29u) + s[10]; + s[1] += s[3] + 0x1698a660u; + s[2] = (s[2] ^ s[1]) * 0x20fad729u; + s[5] ^= s[2] ^ 0xe9e6778au; + s[10] += s[5] + 0xdaa6b74du; + s[3] *= (s[10] | 1u); + s[1] += (s[3] | s[6]); + s[15] = s[15] * 0xc0ee8651u + s[1]; + s[2] += s[15] + 0xbf9a18d6u; + s[6] += s[2] + 0xe0a7457eu; + s[10] ^= s[6]; + s[5] ^= s[10]; + s[4] ^= s[5] ^ 0x2b72d900u; + s[5] = mh_rotl(s[5] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[5], 7u); + s[10] = mh_rotl(s[10], 13u) + s[4]; + s[3] += (s[10] | s[4]); + s[9] += (s[3] | s[2]); + s[10] ^= s[9]; + s[13] ^= (s[10] & s[8]); + s[8] = mh_rotl(s[8], 11u) + s[13]; + s[4] += (s[8] | s[3]); + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[4] ^= s[15]; + s[1] ^= s[4]; + s[11] += s[1] + 0x0fb942e8u; + s[9] += (s[11] | s[0]); + s[10] = (s[10] ^ s[9]) * 0xf4ac3c9bu; + s[8] = mh_rotl(s[8] ^ s[10], 21u); + s[15] = mh_rotl(s[15] ^ s[8], 25u); + s[12] = mh_rotl(s[12] ^ s[15], 31u); + s[1] *= (s[12] | 1u); + s[15] += s[1] + 0xad836925u; + s[4] = mh_rotl(s[4], 29u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[4], 2u); + s[5] ^= s[1]; + s[6] -= s[5]; + s[10] -= s[6]; + s[9] *= (s[10] | 1u); + s[5] = mh_rotl(s[5], 13u) + s[9]; + s[7] ^= s[5] ^ 0xa8c7112du; + s[15] += (s[7] | s[2]); + s[11] = mh_rotl(s[11], 5u) + s[15]; + s[6] += (s[11] | s[5]); + s[12] = mh_rotl(s[12] ^ s[6], 25u); + s[6] ^= s[12] ^ 0xa8a8a54fu; + s[13] += s[6]; + s[1] *= (s[13] | 1u); + s[8] *= (s[1] | 1u); + s[12] += s[8]; + s[6] = (s[6] ^ s[12]) * 0x138d287fu; + s[5] = mh_rotl(s[5] ^ s[6], 4u); + s[13] = mh_rotl(s[13], 19u) + s[5]; + s[4] = mh_rotl(s[4], 18u) + s[13]; + s[13] += s[4] + 0x47783811u; + s[3] = s[3] * 0x3cb23963u + s[13]; + s[14] -= s[3]; + s[10] += s[14]; + s[2] ^= s[10]; + s[12] ^= s[2] ^ 0x70bcebd6u; + s[3] += s[12]; + s[8] = mh_rotl(s[8], 25u) + s[3]; + s[9] -= s[8]; + s[12] ^= s[9]; + s[0] = mh_rotl(s[0] ^ s[12], 7u); + s[6] = mh_rotl(s[6] ^ s[0], 19u); + s[2] ^= s[6]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[7] = (s[7] ^ s[11]) * 0x991f0089u; + s[3] -= s[7]; + s[10] = mh_rotl(s[10], 12u) + s[3]; + s[6] ^= s[10]; + s[12] += s[6]; + s[0] -= s[12]; + s[5] ^= s[0]; + s[2] = mh_rotl(s[2], 5u) + s[5]; + s[3] -= s[2]; + s[0] += s[3] + 0x84500e17u; + s[1] ^= s[0]; + s[15] *= (s[1] | 1u); + s[6] += s[15]; + s[5] = mh_rotl(s[5], 1u) + s[6]; + s[13] ^= s[5] ^ 0x32e6a4b0u; + s[1] -= s[13]; + s[0] += s[1]; + s[7] += s[0]; + s[15] = (s[15] ^ s[7]) * 0xde51d36bu; + s[12] += s[15]; + s[11] ^= s[12] ^ 0x085d7e04u; + s[7] = mh_rotl(s[7] ^ s[11], 29u); + s[9] = mh_rotl(s[9], 10u) + s[7]; + s[3] ^= s[9]; + s[1] ^= s[3] ^ 0xe20c8a44u; + s[6] += s[1]; + s[0] ^= s[6]; + s[11] = mh_rotl(s[11], 29u) + s[0]; + s[13] = mh_rotl(s[13] ^ s[11], 3u); + s[4] = s[4] * 0x53fa87a7u + s[13]; + s[15] = mh_rotl(s[15] ^ s[4], 13u); + s[13] ^= s[15] ^ 0xbaf52e15u; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[11] ^= s[1] ^ 0x16b5024au; + s[6] += s[11] + 0x712948feu; + s[15] += s[6]; + s[10] *= (s[15] | 1u); + s[0] -= s[10]; + s[11] ^= s[0]; + s[12] += (s[11] | s[1]); + s[14] -= s[12]; + s[0] -= s[14]; + s[9] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[9], 1u); + s[14] = (s[14] ^ s[15]) * 0x97b15c85u; + s[8] -= s[14]; +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_1(uint32_t* s) { + s[14] = mh_rotl(s[14] ^ s[0], 17u); + s[12] = (s[12] ^ s[14]) * 0xa6ee330du; + s[2] += s[12]; + s[1] = s[1] * 0x0ce4bf05u + s[2]; + s[5] = mh_rotl(s[5], 20u) + s[1]; + s[15] = mh_rotl(s[15], 15u) + s[5]; + s[7] ^= s[15]; + s[2] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[2], 17u); + s[3] += s[0]; + s[9] = mh_rotl(s[9], 23u) + s[3]; + s[5] -= s[9]; + s[4] -= s[5]; + s[13] += s[4] + 0x1663e8c2u; + s[11] ^= s[13] ^ 0x6188ab5cu; + s[1] *= (s[11] | 1u); + s[13] -= s[1]; + s[10] += s[13]; + s[7] -= s[10]; + s[11] = s[11] * 0x0909c327u + s[7]; + s[8] ^= s[11]; + s[7] ^= s[8] ^ 0x82d87f23u; + s[13] = (s[13] ^ s[7]) * 0x5c48c9c7u; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 8u); + s[8] = mh_rotl(s[8], 1u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[8], 22u); + s[7] = (s[7] ^ s[2]) * 0x8d7cb2a9u; + s[6] -= s[7]; + s[8] = (s[8] ^ s[6]) * 0xac42e56du; + s[15] ^= s[8]; + s[2] ^= (s[15] & s[8]); + s[14] += s[2]; + s[5] += s[14]; + s[10] *= (s[5] | 1u); + s[13] += s[10] + 0xded20149u; + s[4] ^= s[13]; + s[14] ^= (s[4] & s[10]); + s[9] += s[14] + 0xe78db039u; + s[10] *= (s[9] | 1u); + s[8] ^= s[10] ^ 0x042fcfe9u; + s[2] += s[8]; + s[7] -= s[2]; + s[9] ^= s[7]; + s[8] ^= s[9]; + s[0] -= s[8]; + s[13] = mh_rotl(s[13] ^ s[0], 2u); + s[4] = mh_rotl(s[4] ^ s[13], 23u); + s[3] -= s[4]; + s[11] ^= s[3]; + s[1] *= (s[11] | 1u); + s[14] -= s[1]; + s[3] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[3]; + s[11] += s[10]; + s[7] -= s[11]; + s[15] += (s[7] | s[2]); + s[12] ^= s[15] ^ 0x57a179c1u; + s[8] -= s[12]; + s[1] ^= s[8] ^ 0xcb23a9b1u; + s[2] = mh_rotl(s[2], 7u) + s[1]; + s[4] -= s[2]; + s[14] ^= s[4] ^ 0x076e00fdu; + s[5] = mh_rotl(s[5] ^ s[14], 3u); + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[6] += s[9]; + s[13] = mh_rotl(s[13] ^ s[6], 2u); + s[10] += s[13]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[11] ^= s[9]; + s[15] ^= s[11]; + s[2] += s[15]; + s[14] = (s[14] ^ s[2]) * 0x7017bcdfu; + s[9] -= s[14]; + s[12] = mh_rotl(s[12] ^ s[9], 11u); + s[3] ^= s[12]; + s[8] += (s[3] | s[0]); + s[13] ^= s[8] ^ 0xb6656cfeu; + s[11] ^= s[13] ^ 0x118ac00bu; + s[8] = (s[8] ^ s[11]) * 0x3da3f311u; + s[4] = (s[4] ^ s[8]) * 0x1d6af721u; + s[12] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[11] *= (s[10] | 1u); + s[0] *= (s[11] | 1u); + s[11] *= (s[0] | 1u); + s[4] ^= s[11]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 27u) + s[14]; + s[2] ^= (s[11] & s[5]); + s[11] -= s[2]; + s[10] *= (s[11] | 1u); + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[7] ^= s[9]; + s[2] += s[7] + 0x72228b15u; + s[13] ^= (s[2] & s[1]); + s[7] = mh_rotl(s[7], 25u) + s[13]; + s[4] = (s[4] ^ s[7]) * 0x12e611dbu; + s[15] ^= (s[4] & s[2]); + s[1] += (s[15] | s[10]); + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0x4b034585u; + s[1] += s[2]; + s[13] ^= s[1] ^ 0x03c7fc79u; + s[9] ^= (s[13] & s[7]); + s[11] += s[9] + 0xf9b5cff0u; + s[10] = mh_rotl(s[10] ^ s[11], 4u); + s[11] = s[11] * 0x5aaa11f7u + s[10]; + s[2] -= s[11]; + s[1] ^= s[2]; + s[5] = mh_rotl(s[5] ^ s[1], 30u); + s[12] ^= s[5]; + s[8] ^= (s[12] & s[15]); + s[4] = s[4] * 0x32c2f11bu + s[8]; + s[8] = (s[8] ^ s[4]) * 0x8c725c57u; + s[3] += s[8] + 0x16517d85u; + s[2] ^= s[3]; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[2] = mh_rotl(s[2], 9u) + s[0]; + s[8] -= s[2]; + s[14] += s[8] + 0x3d1690b9u; + s[8] ^= s[14] ^ 0xfd404591u; + s[5] = mh_rotl(s[5], 14u) + s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 28u); + s[7] ^= s[15]; + s[13] ^= s[7] ^ 0x1c120483u; + s[2] ^= (s[13] & s[14]); + s[6] ^= s[2]; + s[10] = (s[10] ^ s[6]) * 0x4fd29dfdu; + s[3] += s[10]; + s[10] ^= s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 25u); + s[2] = s[2] * 0x8eebc38du + s[14]; + s[5] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[9] -= s[14]; + s[14] = s[14] * 0xea014a2fu + s[9]; + s[9] ^= (s[14] & s[12]); + s[8] ^= s[9]; + s[10] = s[10] * 0xdffcece9u + s[8]; + s[11] -= s[10]; + s[9] ^= s[11]; + s[5] = (s[5] ^ s[9]) * 0xb0f7c285u; + s[2] ^= s[5]; + s[7] ^= s[2]; + s[11] ^= s[7]; + s[3] *= (s[11] | 1u); + s[8] += (s[3] | s[6]); + s[0] ^= s[8] ^ 0x0be40c24u; + s[1] = mh_rotl(s[1], 14u) + s[0]; + s[9] -= s[1]; + s[4] += s[9]; + s[12] -= s[4]; + s[8] += s[12]; + s[13] ^= s[8]; + s[8] -= s[13]; + s[15] += s[8]; + s[10] = mh_rotl(s[10] ^ s[15], 11u); + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[12] += s[3]; + s[10] ^= s[12] ^ 0x7646e0a4u; + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[7] = mh_rotl(s[7], 13u) + s[8]; + s[6] ^= (s[7] & s[15]); + s[1] += (s[6] | s[0]); + s[3] = mh_rotl(s[3], 27u) + s[1]; + s[12] ^= s[3]; + s[1] = s[1] * 0xe296889du + s[12]; + s[7] = mh_rotl(s[7], 6u) + s[1]; + s[5] += s[7]; + s[2] = (s[2] ^ s[5]) * 0xe5c22b4fu; + s[15] += s[2] + 0x31507e5eu; + s[3] += s[15]; + s[1] += s[3] + 0xa943282bu; + s[4] ^= (s[1] & s[11]); + s[10] += s[4]; + s[4] ^= (s[10] & s[5]); + s[1] += s[4]; + s[6] += s[1]; + s[13] ^= s[6]; + s[8] ^= s[13]; + s[2] = (s[2] ^ s[8]) * 0x6ff7b6c9u; + s[13] += (s[2] | s[5]); + s[12] ^= s[13] ^ 0xd6ce983fu; + s[4] ^= s[12]; + s[3] *= (s[4] | 1u); + s[10] += (s[3] | s[7]); + s[2] += s[10]; + s[14] ^= (s[2] & s[7]); + s[5] = s[5] * 0xa23d13c7u + s[14]; + s[8] += s[5] + 0xeba888dcu; + s[15] ^= s[8]; + s[2] ^= s[15] ^ 0x40a0fb0au; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[0] ^= s[9]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[5] += s[11] + 0x56f2d848u; + s[14] ^= (s[5] & s[15]); + s[7] = (s[7] ^ s[14]) * 0x1897fa79u; + s[14] = (s[14] ^ s[7]) * 0x0baf4813u; + s[15] *= (s[14] | 1u); + s[3] ^= (s[15] & s[7]); + s[10] -= s[3]; + s[4] ^= s[10]; + s[11] = (s[11] ^ s[4]) * 0x7df27859u; + s[7] *= (s[11] | 1u); + s[4] += s[7] + 0x3fc46fd8u; + s[6] = mh_rotl(s[6], 11u) + s[4]; + s[2] ^= s[6]; + s[13] += s[2]; + s[12] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[12], 18u); + s[15] ^= (s[5] & s[12]); + s[11] *= (s[15] | 1u); + s[8] += s[11]; + s[14] *= (s[8] | 1u); + s[8] += s[14]; + s[1] -= s[8]; + s[10] = mh_rotl(s[10], 18u) + s[1]; + s[4] ^= s[10]; + s[2] += s[4]; + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[13] += s[1]; + s[4] -= s[13]; + s[9] *= (s[4] | 1u); + s[6] -= s[9]; + s[3] = (s[3] ^ s[6]) * 0x6d6488c7u; + s[7] += (s[3] | s[10]); + s[12] ^= s[7]; + s[14] -= s[12]; + s[4] ^= s[14]; + s[10] += s[4]; + s[7] += s[10]; + s[15] += (s[7] | s[2]); + s[1] = mh_rotl(s[1], 8u) + s[15]; + s[5] += s[1]; + s[12] = mh_rotl(s[12], 1u) + s[5]; + s[3] *= (s[12] | 1u); + s[6] ^= s[3] ^ 0xada02894u; + s[3] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[3], 16u); + s[5] ^= s[6] ^ 0xeafee980u; + s[8] ^= s[5] ^ 0x00dbe804u; + s[10] = mh_rotl(s[10] ^ s[8], 5u); + s[2] *= (s[10] | 1u); + s[6] = mh_rotl(s[6] ^ s[2], 31u); + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[7] = s[7] * 0x16a2fd0bu + s[4]; + s[11] -= s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 20u); + s[1] ^= (s[2] & s[12]); + s[3] *= (s[1] | 1u); + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[12] += s[15]; + s[10] -= s[12]; + s[3] += s[10]; + s[13] += s[3]; + s[4] = mh_rotl(s[4], 14u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 2u); + s[8] += s[10]; + s[9] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[9], 11u); + s[9] -= s[7]; + s[11] -= s[9]; + s[5] -= s[11]; + s[3] = s[3] * 0x7d5e197du + s[5]; + s[9] *= (s[3] | 1u); + s[14] = mh_rotl(s[14], 8u) + s[9]; + s[11] += s[14] + 0xa3dd86d5u; + s[8] ^= s[11]; + s[2] -= s[8]; + s[5] *= (s[2] | 1u); + s[1] ^= s[5]; + s[12] ^= s[1]; + s[4] = mh_rotl(s[4] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 14u) + s[4]; + s[4] += (s[8] | s[15]); + s[3] = mh_rotl(s[3] ^ s[4], 2u); + s[2] ^= s[3]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[12] ^= s[9] ^ 0x33fd48ccu; + s[13] *= (s[12] | 1u); + s[3] += s[13]; + s[8] -= s[3]; + s[10] ^= (s[8] & s[7]); + s[15] ^= s[10] ^ 0xd3ffcb52u; + s[3] += s[15] + 0xd8cfcd30u; + s[0] = (s[0] ^ s[3]) * 0x013282f1u; + s[8] += s[0]; + s[4] ^= (s[8] & s[7]); + s[15] ^= s[4] ^ 0xd8b2262cu; + s[4] ^= s[15]; + s[0] ^= s[4]; + s[14] += s[0]; + s[1] += s[14]; + s[0] ^= s[1]; + s[14] += s[0]; + s[4] ^= s[14]; + s[11] *= (s[4] | 1u); + s[7] += s[11]; + s[2] = (s[2] ^ s[7]) * 0xb04d6739u; + s[12] ^= s[2]; + s[15] -= s[12]; + s[9] -= s[15]; + s[15] = (s[15] ^ s[9]) * 0x806e4757u; + s[2] = mh_rotl(s[2] ^ s[15], 26u); + s[4] ^= s[2] ^ 0x5da3ddfau; + s[14] *= (s[4] | 1u); + s[1] ^= s[14]; + s[14] = mh_rotl(s[14], 4u) + s[1]; + s[15] *= (s[14] | 1u); + s[4] = (s[4] ^ s[15]) * 0x8339a46bu; + s[13] -= s[4]; + s[1] += s[13] + 0x89cedf01u; + s[15] ^= (s[1] & s[2]); + s[5] -= s[15]; + s[4] ^= s[5]; + s[0] ^= s[4] ^ 0x659daf23u; + s[9] = mh_rotl(s[9] ^ s[0], 31u); + s[4] *= (s[9] | 1u); + s[3] ^= s[4]; + s[2] = mh_rotl(s[2], 25u) + s[3]; + s[1] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[1] *= (s[2] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 18u); + s[2] = mh_rotl(s[2] ^ s[10], 22u); + s[12] = mh_rotl(s[12], 2u) + s[2]; + s[6] ^= s[12] ^ 0xf3967aefu; + s[5] ^= s[6]; + s[11] += (s[5] | s[3]); + s[13] -= s[11]; + s[2] += (s[13] | s[12]); + s[10] ^= s[2]; + s[7] -= s[10]; + s[2] = mh_rotl(s[2] ^ s[7], 1u); + s[1] += s[2]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[10] ^= s[7]; + s[11] ^= (s[10] & s[12]); + s[3] = mh_rotl(s[3] ^ s[11], 22u); + s[12] += s[3]; + s[8] ^= s[12] ^ 0xd1018d15u; + s[6] ^= s[8]; + s[13] = s[13] * 0xad1ff569u + s[6]; + s[9] = s[9] * 0xa7473da7u + s[13]; + s[4] ^= s[9]; + s[2] *= (s[4] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 7u); + s[9] = mh_rotl(s[9] ^ s[7], 2u); + s[14] *= (s[9] | 1u); + s[11] ^= s[14]; + s[6] += s[11] + 0x02da7647u; + s[13] ^= s[6]; + s[12] += s[13]; + s[6] = mh_rotl(s[6], 4u) + s[12]; + s[0] = mh_rotl(s[0], 17u) + s[6]; + s[6] = mh_rotl(s[6] ^ s[0], 16u); + s[5] *= (s[6] | 1u); + s[14] = (s[14] ^ s[5]) * 0x631860bdu; + s[7] ^= s[14] ^ 0xfd80e869u; + s[6] *= (s[7] | 1u); + s[14] = mh_rotl(s[14] ^ s[6], 28u); + s[1] += s[14]; + s[12] -= s[1]; + s[10] = mh_rotl(s[10], 24u) + s[12]; + s[12] ^= s[10] ^ 0x923e2dd8u; + s[6] = (s[6] ^ s[12]) * 0xd1c8662bu; + s[11] = (s[11] ^ s[6]) * 0x7f1579abu; + s[1] *= (s[11] | 1u); + s[12] *= (s[1] | 1u); + s[0] += (s[12] | s[15]); + s[12] ^= (s[0] & s[5]); + s[13] = mh_rotl(s[13], 3u) + s[12]; + s[12] *= (s[13] | 1u); + s[0] += s[12]; + s[8] += s[0] + 0x20b00217u; + s[14] = (s[14] ^ s[8]) * 0xf9d426ffu; + s[2] *= (s[14] | 1u); + s[10] += s[2]; + s[2] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 29u); + s[0] = mh_rotl(s[0] ^ s[14], 8u); + s[8] = (s[8] ^ s[0]) * 0x1108ba07u; + s[14] += s[8]; + s[5] += s[14]; + s[15] += s[5]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x135192c5u; + s[14] += s[5] + 0x4e9e6ad1u; + s[5] += s[14]; + s[7] += s[5]; + s[1] = (s[1] ^ s[7]) * 0x6babe5ddu; + s[10] ^= s[1]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[1] ^= s[2]; + s[6] = mh_rotl(s[6], 15u) + s[1]; + s[12] ^= s[6]; + s[7] *= (s[12] | 1u); + s[8] = mh_rotl(s[8], 16u) + s[7]; + s[3] ^= s[8]; + s[13] += (s[3] | s[0]); + s[10] ^= s[13]; + s[2] ^= s[10]; + s[1] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[1], 1u); + s[15] = (s[15] ^ s[8]) * 0xfa9fbf2du; + s[3] ^= s[15]; + s[11] ^= s[3] ^ 0x545738b5u; + s[12] = mh_rotl(s[12], 26u) + s[11]; + s[1] = mh_rotl(s[1], 7u) + s[12]; + s[11] = mh_rotl(s[11] ^ s[1], 4u); + s[0] = mh_rotl(s[0], 8u) + s[11]; + s[2] ^= s[0] ^ 0xaacb0afeu; + s[9] += s[2]; + s[6] += s[9]; + s[13] ^= s[6] ^ 0x443ac86au; + s[3] += s[13]; + s[6] = mh_rotl(s[6], 12u) + s[3]; + s[9] ^= s[6] ^ 0x8fa27e45u; + s[14] = mh_rotl(s[14] ^ s[9], 15u); + s[4] = mh_rotl(s[4] ^ s[14], 20u); + s[5] += s[4]; + s[6] = mh_rotl(s[6], 12u) + s[5]; + s[15] = (s[15] ^ s[6]) * 0x6fbcddebu; + s[8] -= s[15]; + s[15] += s[8]; + s[4] += s[15]; + s[12] -= s[4]; + s[8] += s[12]; + s[2] += (s[8] | s[6]); + s[6] = (s[6] ^ s[2]) * 0xb3985295u; + s[0] = mh_rotl(s[0] ^ s[6], 27u); + s[4] += s[0] + 0x56dea41du; + s[13] *= (s[4] | 1u); + s[15] -= s[13]; + s[0] += s[15] + 0x3a8c7806u; + s[12] ^= s[0] ^ 0xa154fcc4u; + s[4] = (s[4] ^ s[12]) * 0xef91a6cbu; + s[10] = (s[10] ^ s[4]) * 0xfb043751u; + s[12] += s[10]; + s[9] *= (s[12] | 1u); + s[15] += (s[9] | s[1]); + s[11] = mh_rotl(s[11], 1u) + s[15]; + s[4] = (s[4] ^ s[11]) * 0x1647a845u; + s[2] -= s[4]; + s[14] ^= s[2] ^ 0x6cf9afaeu; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x0b925217u; + s[2] = mh_rotl(s[2] ^ s[9], 6u); + s[12] = (s[12] ^ s[2]) * 0x063f86d7u; + s[1] ^= s[12]; + s[11] += s[1]; + s[4] ^= s[11]; + s[0] ^= (s[4] & s[11]); + s[9] += s[0]; + s[14] = mh_rotl(s[14], 1u) + s[9]; + s[9] ^= s[14]; + s[12] += s[9]; + s[9] = mh_rotl(s[9] ^ s[12], 5u); + s[15] += (s[9] | s[7]); + s[14] += s[15] + 0x720a9418u; + s[0] -= s[14]; + s[3] = (s[3] ^ s[0]) * 0x3b661535u; + s[0] -= s[3]; + s[2] += s[0]; + s[11] = mh_rotl(s[11] ^ s[2], 28u); + s[7] -= s[11]; + s[1] ^= s[7]; + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[14] -= s[2]; + s[0] -= s[14]; + s[10] += s[0]; + s[3] = mh_rotl(s[3] ^ s[10], 5u); + s[1] = mh_rotl(s[1], 15u) + s[3]; + s[13] ^= (s[1] & s[3]); + s[5] += s[13]; + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[11] = s[11] * 0xb072cb67u + s[10]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[0] = mh_rotl(s[0] ^ s[6], 30u); + s[7] = mh_rotl(s[7], 2u) + s[0]; + s[5] = mh_rotl(s[5], 13u) + s[7]; + s[11] = mh_rotl(s[11] ^ s[5], 29u); + s[7] *= (s[11] | 1u); + s[8] ^= (s[7] & s[15]); + s[5] += s[8]; + s[14] = (s[14] ^ s[5]) * 0xadb08c77u; + s[7] = (s[7] ^ s[14]) * 0x9b7a1549u; + s[5] ^= (s[7] & s[9]); + s[9] += s[5]; + s[7] += s[9] + 0x31c29969u; + s[9] ^= s[7]; + s[12] = (s[12] ^ s[9]) * 0x1b53dc25u; + s[14] += s[12]; + s[13] -= s[14]; + s[5] = s[5] * 0x1411b229u + s[13]; + s[12] += (s[5] | s[1]); + s[8] ^= s[12]; + s[6] -= s[8]; + s[5] -= s[6]; + s[15] -= s[5]; + s[9] += s[15]; + s[8] ^= s[9]; + s[5] += s[8]; + s[4] += s[5]; + s[0] = (s[0] ^ s[4]) * 0x54b6241fu; + s[5] ^= s[0]; + s[4] = mh_rotl(s[4], 1u) + s[5]; + s[15] += s[4]; + s[7] = (s[7] ^ s[15]) * 0x65b59741u; + s[11] += s[7]; + s[2] += s[11]; + s[9] += s[2]; + s[0] -= s[9]; + s[5] -= s[0]; + s[9] ^= s[5]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[10] = s[10] * 0xf978f191u + s[14]; + s[12] += s[10]; + s[4] += s[12]; + s[7] ^= s[4]; + s[12] ^= s[7]; + s[10] += (s[12] | s[13]); + s[1] ^= s[10] ^ 0x79536ee2u; + s[15] -= s[1]; + s[13] = (s[13] ^ s[15]) * 0xaaf42111u; + s[11] += s[13] + 0xd935a555u; + s[1] = mh_rotl(s[1], 19u) + s[11]; + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[9] ^= s[13] ^ 0x6c0ea54au; + s[11] ^= s[9]; + s[9] += s[11] + 0x609cd9eau; + s[14] = (s[14] ^ s[9]) * 0xf76d6ffbu; + s[7] = mh_rotl(s[7], 14u) + s[14]; + s[3] = mh_rotl(s[3], 18u) + s[7]; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 1u) + s[7]; + s[9] = (s[9] ^ s[11]) * 0xf3497ec7u; + s[0] -= s[9]; + s[12] += s[0] + 0xfc1c2a19u; + s[14] += s[12]; + s[12] += s[14]; + s[0] = mh_rotl(s[0], 19u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[0], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 12u); + s[7] = mh_rotl(s[7], 15u) + s[9]; + s[6] += s[7]; + s[0] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[0], 25u); + s[5] += s[7]; + s[13] = (s[13] ^ s[5]) * 0x103550c1u; + s[10] += s[13]; + s[12] -= s[10]; + s[10] += (s[12] | s[0]); + s[12] += (s[10] | s[1]); + s[5] ^= s[12]; + s[2] ^= s[5]; + s[3] ^= s[2] ^ 0x2e047eb3u; + s[5] += s[3] + 0xe97cb0afu; + s[10] ^= s[5] ^ 0x4455829bu; + s[8] ^= s[10]; + s[9] = s[9] * 0xe48b6cf7u + s[8]; + s[10] = mh_rotl(s[10], 11u) + s[9]; + s[14] -= s[10]; + s[4] += s[14]; + s[1] += (s[4] | s[2]); + s[12] *= (s[1] | 1u); + s[15] -= s[12]; + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[13] = mh_rotl(s[13], 30u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[13], 3u); + s[10] += s[1] + 0x2b88f231u; + s[3] ^= s[10]; + s[14] = mh_rotl(s[14], 16u) + s[3]; + s[2] ^= s[14]; + s[0] = mh_rotl(s[0], 24u) + s[2]; + s[6] ^= s[0]; + s[7] = s[7] * 0xc8b02c1fu + s[6]; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[1] ^= s[15]; + s[2] ^= s[1]; + s[13] += (s[2] | s[4]); + s[4] = mh_rotl(s[4], 25u) + s[13]; + s[1] *= (s[4] | 1u); + s[8] += s[1] + 0x170391fdu; + s[7] -= s[8]; + s[6] += s[7] + 0x428e4c84u; + s[15] += s[6]; + s[10] += (s[15] | s[13]); + s[7] = mh_rotl(s[7], 17u) + s[10]; + s[0] *= (s[7] | 1u); + s[13] *= (s[0] | 1u); + s[6] ^= s[13]; + s[14] *= (s[6] | 1u); + s[0] += s[14] + 0x10c22a2du; + s[9] = (s[9] ^ s[0]) * 0xaeee5b5fu; + s[5] ^= (s[9] & s[6]); + s[12] += s[5] + 0xaa190509u; + s[15] = mh_rotl(s[15], 23u) + s[12]; + s[6] = mh_rotl(s[6], 29u) + s[15]; + s[4] -= s[6]; + s[1] ^= s[4]; + s[10] += s[1]; + s[3] += s[10] + 0xcb02e2f1u; + s[11] += s[3]; + s[4] ^= s[11]; + s[8] ^= s[4]; + s[10] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[10]; + s[10] = s[10] * 0x385128c9u + s[9]; + s[13] += (s[10] | s[1]); + s[15] = mh_rotl(s[15] ^ s[13], 4u); + s[1] = mh_rotl(s[1], 20u) + s[15]; + s[14] ^= (s[1] & s[6]); + s[8] ^= s[14]; + s[0] = (s[0] ^ s[8]) * 0x5e3978c9u; + s[2] ^= s[0]; + s[11] = mh_rotl(s[11], 18u) + s[2]; + s[8] = (s[8] ^ s[11]) * 0xfc3d1753u; + s[10] += s[8]; + s[2] ^= s[10]; + s[0] += s[2]; + s[1] *= (s[0] | 1u); + s[4] += s[1]; + s[1] ^= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 8u); + s[6] = (s[6] ^ s[3]) * 0xb74b7bbbu; + s[8] *= (s[6] | 1u); + s[11] -= s[8]; + s[7] ^= (s[11] & s[9]); + s[11] ^= s[7]; + s[5] += (s[11] | s[15]); + s[1] = s[1] * 0x6f397ee5u + s[5]; + s[2] ^= s[1]; + s[6] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[6], 10u); + s[5] = (s[5] ^ s[3]) * 0xf3e5cfadu; + s[8] += s[5]; + s[7] -= s[8]; + s[2] += s[7]; + s[14] = mh_rotl(s[14], 25u) + s[2]; + s[1] *= (s[14] | 1u); + s[3] = s[3] * 0x02b399cbu + s[1]; + s[2] ^= (s[3] & s[10]); + s[12] = mh_rotl(s[12] ^ s[2], 3u); + s[14] *= (s[12] | 1u); + s[0] = (s[0] ^ s[14]) * 0xdce3e741u; + s[1] = mh_rotl(s[1], 7u) + s[0]; + s[7] ^= s[1]; + s[10] *= (s[7] | 1u); + s[5] = mh_rotl(s[5], 9u) + s[10]; + s[1] *= (s[5] | 1u); + s[4] ^= s[1] ^ 0x385d5cd4u; + s[7] += s[4]; + s[15] ^= s[7]; + s[13] = mh_rotl(s[13], 22u) + s[15]; + s[12] = (s[12] ^ s[13]) * 0x817a9347u; + s[7] ^= (s[12] & s[5]); + s[9] ^= s[7]; + s[12] = mh_rotl(s[12], 8u) + s[9]; + s[5] += s[12]; + s[9] *= (s[5] | 1u); + s[15] -= s[9]; + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[8] = s[8] * 0x97d936ebu + s[13]; + s[10] += s[8]; + s[14] += s[10]; + s[6] += s[14]; + s[0] ^= s[6]; + s[11] -= s[0]; + s[1] ^= (s[11] & s[14]); + s[2] ^= s[1]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[5] ^= s[11]; + s[9] = (s[9] ^ s[5]) * 0x684dd78fu; + s[14] = s[14] * 0xcce53009u + s[9]; + s[8] = mh_rotl(s[8], 4u) + s[14]; + s[3] -= s[8]; + s[12] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[12], 22u); + s[12] += s[15] + 0x25d2e612u; + s[8] = mh_rotl(s[8] ^ s[12], 10u); + s[4] += s[8]; + s[10] = mh_rotl(s[10] ^ s[4], 9u); + s[0] += (s[10] | s[9]); + s[2] ^= s[0]; + s[10] = mh_rotl(s[10], 3u) + s[2]; + s[14] += s[10]; + s[5] ^= s[14]; + s[9] *= (s[5] | 1u); + s[13] ^= s[9] ^ 0xd2f78081u; + s[14] ^= s[13]; + s[8] += s[14]; + s[5] += s[8]; + s[15] = (s[15] ^ s[5]) * 0xb4af8bb9u; + s[5] += s[15] + 0xd497de31u; + s[13] ^= s[5]; + s[14] += (s[13] | s[4]); + s[12] = mh_rotl(s[12], 19u) + s[14]; + s[1] = (s[1] ^ s[12]) * 0x80736b3fu; + s[0] += s[1]; + s[6] -= s[0]; + s[5] *= (s[6] | 1u); + s[13] -= s[5]; + s[7] = s[7] * 0x4b586d65u + s[13]; + s[9] = mh_rotl(s[9] ^ s[7], 9u); + s[1] ^= s[9]; + s[15] *= (s[1] | 1u); + s[13] -= s[15]; + s[4] = (s[4] ^ s[13]) * 0x0bf0c72bu; + s[15] += s[4]; + s[9] ^= s[15] ^ 0x1f3d3b6fu; + s[11] += s[9]; + s[6] += (s[11] | s[5]); + s[15] += (s[6] | s[9]); + s[7] = (s[7] ^ s[15]) * 0x2d1b2827u; + s[1] = mh_rotl(s[1], 4u) + s[7]; + s[10] += s[1] + 0x19394fe5u; + s[7] += s[10] + 0x0df93d70u; + s[9] -= s[7]; + s[1] = mh_rotl(s[1], 13u) + s[9]; + s[5] += s[1]; + s[3] += s[5] + 0x528c96f9u; + s[9] *= (s[3] | 1u); + s[11] += s[9]; + s[1] += s[11]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_2(uint32_t* s) { + s[3] = mh_rotl(s[3] ^ s[0], 11u); + s[9] = (s[9] ^ s[3]) * 0x926a6d6du; + s[10] *= (s[9] | 1u); + s[6] = (s[6] ^ s[10]) * 0x16fa529bu; + s[14] += s[6] + 0x8bf7717du; + s[15] = s[15] * 0x838a9b83u + s[14]; + s[13] += (s[15] | s[1]); + s[7] ^= s[13] ^ 0x1c4ee851u; + s[12] += s[7] + 0x2de89a80u; + s[9] = (s[9] ^ s[12]) * 0xc6ccd52bu; + s[12] -= s[9]; + s[8] ^= s[12]; + s[6] += s[8]; + s[12] -= s[6]; + s[15] = mh_rotl(s[15], 6u) + s[12]; + s[3] += s[15]; + s[14] += s[3]; + s[3] = s[3] * 0x86602d0du + s[14]; + s[12] = mh_rotl(s[12] ^ s[3], 31u); + s[0] ^= s[12]; + s[8] ^= s[0]; + s[12] -= s[8]; + s[11] += s[12]; + s[15] = (s[15] ^ s[11]) * 0xcd53cb6bu; + s[0] = (s[0] ^ s[15]) * 0x2e7b800du; + s[3] *= (s[0] | 1u); + s[4] += s[3]; + s[7] = s[7] * 0xf492cc8du + s[4]; + s[13] = mh_rotl(s[13], 6u) + s[7]; + s[8] -= s[13]; + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[6] -= s[15]; + s[1] += s[6]; + s[15] -= s[1]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x6d79f9b3u; + s[10] = mh_rotl(s[10] ^ s[5], 29u); + s[8] ^= s[10] ^ 0xd22b10f3u; + s[9] = (s[9] ^ s[8]) * 0xc87cfcd7u; + s[2] = mh_rotl(s[2], 5u) + s[9]; + s[11] *= (s[2] | 1u); + s[5] ^= s[11]; + s[7] += s[5]; + s[14] += s[7] + 0xac6f941eu; + s[5] += s[14]; + s[14] += s[5]; + s[13] ^= s[14]; + s[6] += s[13]; + s[14] -= s[6]; + s[10] = mh_rotl(s[10], 15u) + s[14]; + s[1] ^= s[10]; + s[5] = (s[5] ^ s[1]) * 0x7a531a39u; + s[15] = s[15] * 0xe6bff90bu + s[5]; + s[7] ^= s[15]; + s[4] += s[7]; + s[8] -= s[4]; + s[14] = (s[14] ^ s[8]) * 0xcb91e92bu; + s[2] -= s[14]; + s[14] = mh_rotl(s[14], 26u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[10] += s[4]; + s[1] = (s[1] ^ s[10]) * 0x2f2e1573u; + s[5] += s[1]; + s[7] += s[5]; + s[1] = mh_rotl(s[1] ^ s[7], 31u); + s[14] = mh_rotl(s[14] ^ s[1], 9u); + s[6] -= s[14]; + s[14] ^= s[6]; + s[1] += s[14]; + s[15] = (s[15] ^ s[1]) * 0xf122f41du; + s[1] -= s[15]; + s[5] += (s[1] | s[8]); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[1] = s[1] * 0x24839c9du + s[13]; + s[10] += s[1] + 0x6e377732u; + s[9] ^= s[10]; + s[10] += s[9] + 0x9c8be86fu; + s[4] = mh_rotl(s[4] ^ s[10], 18u); + s[15] = s[15] * 0x57f74b09u + s[4]; + s[0] = s[0] * 0x4777892du + s[15]; + s[15] *= (s[0] | 1u); + s[8] -= s[15]; + s[14] -= s[8]; + s[6] ^= s[14]; + s[11] += s[6]; + s[9] ^= s[11]; + s[4] += s[9] + 0x4e322e4bu; + s[7] = mh_rotl(s[7] ^ s[4], 5u); + s[15] += (s[7] | s[0]); + s[10] -= s[15]; + s[9] = mh_rotl(s[9] ^ s[10], 8u); + s[12] = mh_rotl(s[12] ^ s[9], 26u); + s[10] += s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[12] ^= s[13]; + s[1] ^= s[12] ^ 0x32411651u; + s[9] += s[1]; + s[1] *= (s[9] | 1u); + s[11] += s[1]; + s[12] = mh_rotl(s[12] ^ s[11], 11u); + s[15] = mh_rotl(s[15] ^ s[12], 16u); + s[11] ^= s[15]; + s[9] += s[11]; + s[13] += (s[9] | s[3]); + s[7] ^= (s[13] & s[1]); + s[0] ^= (s[7] & s[11]); + s[6] = mh_rotl(s[6], 25u) + s[0]; + s[7] = mh_rotl(s[7] ^ s[6], 18u); + s[2] -= s[7]; + s[14] ^= s[2] ^ 0xd6cffa6eu; + s[10] += s[14] + 0xdb62a314u; + s[2] += s[10]; + s[14] = s[14] * 0x2f015667u + s[2]; + s[3] *= (s[14] | 1u); + s[0] ^= s[3]; + s[8] *= (s[0] | 1u); + s[12] ^= s[8]; + s[9] = mh_rotl(s[9], 11u) + s[12]; + s[4] ^= s[9]; + s[15] ^= s[4]; + s[3] = mh_rotl(s[3], 5u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[14] = (s[14] ^ s[6]) * 0x3392ff1fu; + s[9] -= s[14]; + s[14] *= (s[9] | 1u); + s[9] -= s[14]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[10] = (s[10] ^ s[0]) * 0x86b32d1du; + s[7] *= (s[10] | 1u); + s[3] = s[3] * 0xcf4d9bb3u + s[7]; + s[8] *= (s[3] | 1u); + s[7] -= s[8]; + s[2] = mh_rotl(s[2], 31u) + s[7]; + s[6] ^= s[2]; + s[7] = s[7] * 0xf9e43535u + s[6]; + s[5] ^= s[7]; + s[4] = mh_rotl(s[4], 10u) + s[5]; + s[2] *= (s[4] | 1u); + s[14] = (s[14] ^ s[2]) * 0xd801e903u; + s[11] = s[11] * 0x1140fbe1u + s[14]; + s[12] = mh_rotl(s[12], 6u) + s[11]; + s[5] = s[5] * 0x974088edu + s[12]; + s[0] -= s[5]; + s[14] -= s[0]; + s[0] += (s[14] | s[4]); + s[6] -= s[0]; + s[1] *= (s[6] | 1u); + s[10] = s[10] * 0x78b0e1a7u + s[1]; + s[13] ^= s[10]; + s[0] -= s[13]; + s[7] += s[0]; + s[0] ^= s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 23u); + s[9] -= s[12]; + s[5] += (s[9] | s[6]); + s[2] += s[5]; + s[8] = s[8] * 0x7b42b5f1u + s[2]; + s[4] ^= s[8]; + s[15] = (s[15] ^ s[4]) * 0x2e28033bu; + s[12] += s[15]; + s[9] = mh_rotl(s[9] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 22u) + s[9]; + s[0] ^= s[8]; + s[10] *= (s[0] | 1u); + s[1] *= (s[10] | 1u); + s[2] ^= s[1]; + s[3] ^= (s[2] & s[12]); + s[4] *= (s[3] | 1u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[0] += s[11]; + s[15] += (s[0] | s[7]); + s[13] += s[15]; + s[0] ^= s[13]; + s[12] += s[0]; + s[10] += s[12] + 0x9646135eu; + s[0] += s[10]; + s[10] ^= (s[0] & s[2]); + s[4] += s[10] + 0x82a90265u; + s[15] ^= s[4]; + s[5] = (s[5] ^ s[15]) * 0x0ab18765u; + s[1] ^= s[5]; + s[3] = (s[3] ^ s[1]) * 0x58bdae6fu; + s[14] += (s[3] | s[2]); + s[13] += s[14] + 0xe01e7581u; + s[0] = (s[0] ^ s[13]) * 0x49941f01u; + s[10] = s[10] * 0xb246126bu + s[0]; + s[3] ^= s[10] ^ 0xe938f5d3u; + s[8] += s[3]; + s[14] += (s[8] | s[0]); + s[9] += s[14]; + s[15] ^= s[9] ^ 0xd652447bu; + s[10] ^= s[15] ^ 0xbfa14965u; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[11] ^= s[6] ^ 0x37d98687u; + s[6] = (s[6] ^ s[11]) * 0x4e553b0bu; + s[12] = mh_rotl(s[12], 17u) + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[10] ^= s[4]; + s[0] *= (s[10] | 1u); + s[12] ^= s[0]; + s[6] += (s[12] | s[14]); + s[12] = mh_rotl(s[12] ^ s[6], 16u); + s[10] ^= s[12]; + s[11] += s[10] + 0x936f0354u; + s[10] += s[11] + 0x1771251du; + s[1] = mh_rotl(s[1] ^ s[10], 13u); + s[4] = mh_rotl(s[4] ^ s[1], 18u); + s[14] = (s[14] ^ s[4]) * 0xd997b3a1u; + s[4] *= (s[14] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[4] += s[11]; + s[11] += s[4]; + s[10] = mh_rotl(s[10], 2u) + s[11]; + s[3] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[3], 1u); + s[15] ^= s[11] ^ 0x31d420ebu; + s[12] += s[15]; + s[6] = s[6] * 0xef7ed339u + s[12]; + s[5] += s[6]; + s[6] ^= s[5]; + s[7] += s[6]; + s[1] *= (s[7] | 1u); + s[13] ^= s[1]; + s[8] += s[13]; + s[0] ^= s[8]; + s[10] = s[10] * 0x2dc4f3ffu + s[0]; + s[4] ^= s[10]; + s[15] -= s[4]; + s[4] -= s[15]; + s[12] += s[4]; + s[0] ^= s[12] ^ 0xc68cf398u; + s[10] = s[10] * 0x8d7270d1u + s[0]; + s[1] ^= s[10] ^ 0x792d21d6u; + s[15] ^= s[1]; + s[3] = mh_rotl(s[3], 31u) + s[15]; + s[12] *= (s[3] | 1u); + s[0] ^= s[12] ^ 0x44570ae7u; + s[8] += s[0]; + s[5] ^= (s[8] & s[10]); + s[14] -= s[5]; + s[6] += s[14]; + s[8] += s[6] + 0xa3eeb141u; + s[11] += s[8]; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[14] -= s[13]; + s[7] += (s[14] | s[0]); + s[8] += (s[7] | s[0]); + s[3] *= (s[8] | 1u); + s[4] = s[4] * 0xb0e65813u + s[3]; + s[14] += s[4]; + s[4] -= s[14]; + s[1] += (s[4] | s[6]); + s[15] ^= s[1]; + s[3] = (s[3] ^ s[15]) * 0x74f161a1u; + s[10] += s[3] + 0xa6f7f269u; + s[0] += (s[10] | s[13]); + s[2] = mh_rotl(s[2], 21u) + s[0]; + s[9] ^= (s[2] & s[12]); + s[11] ^= s[9]; + s[9] += s[11]; + s[8] *= (s[9] | 1u); + s[5] += (s[8] | s[1]); + s[7] += s[5]; + s[11] += s[7] + 0xe1fb4104u; + s[14] ^= (s[11] & s[6]); + s[15] ^= s[14]; + s[11] ^= (s[15] & s[6]); + s[7] += s[11]; + s[9] = mh_rotl(s[9], 12u) + s[7]; + s[0] *= (s[9] | 1u); + s[4] += s[0]; + s[0] = (s[0] ^ s[4]) * 0x3458b4b9u; + s[15] *= (s[0] | 1u); + s[12] = mh_rotl(s[12], 5u) + s[15]; + s[11] -= s[12]; + s[7] = s[7] * 0xdf6299e7u + s[11]; + s[15] = mh_rotl(s[15], 17u) + s[7]; + s[8] = mh_rotl(s[8] ^ s[15], 25u); + s[1] += (s[8] | s[7]); + s[7] = s[7] * 0xcde4ccd9u + s[1]; + s[4] ^= (s[7] & s[3]); + s[11] ^= s[4]; + s[15] += s[11] + 0x93b32499u; + s[8] = s[8] * 0x2c187aebu + s[15]; + s[12] += s[8]; + s[15] += s[12] + 0x8975fca8u; + s[8] ^= s[15] ^ 0xa690273au; + s[7] += s[8]; + s[2] *= (s[7] | 1u); + s[15] += s[2]; + s[12] ^= (s[15] & s[0]); + s[13] *= (s[12] | 1u); + s[9] ^= (s[13] & s[15]); + s[7] = mh_rotl(s[7] ^ s[9], 19u); + s[9] += s[7] + 0x68201cc4u; + s[11] ^= s[9] ^ 0x8ce52309u; + s[8] ^= s[11]; + s[2] = s[2] * 0xcd1aa62fu + s[8]; + s[4] ^= s[2]; + s[11] = mh_rotl(s[11], 14u) + s[4]; + s[12] = (s[12] ^ s[11]) * 0x5225e677u; + s[7] ^= s[12] ^ 0x249730c1u; + s[8] += s[7] + 0x648c79c7u; + s[9] = mh_rotl(s[9], 23u) + s[8]; + s[6] ^= s[9] ^ 0x63921b24u; + s[8] = (s[8] ^ s[6]) * 0xbaff00d3u; + s[2] ^= s[8]; + s[4] *= (s[2] | 1u); + s[8] = (s[8] ^ s[4]) * 0xcaf43cebu; + s[6] += s[8]; + s[8] = (s[8] ^ s[6]) * 0x4fa73429u; + s[0] = (s[0] ^ s[8]) * 0xd09399a5u; + s[8] += s[0]; + s[14] = (s[14] ^ s[8]) * 0xffb37081u; + s[13] ^= s[14]; + s[4] += s[13]; + s[8] ^= s[4]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] = (s[14] ^ s[7]) * 0x412aee4du; + s[10] -= s[14]; + s[1] ^= s[10]; + s[4] ^= s[1] ^ 0x8d36a1b0u; + s[14] = (s[14] ^ s[4]) * 0xb17290dfu; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[2] += s[15]; + s[11] = mh_rotl(s[11], 10u) + s[2]; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0x2be56ccfu; + s[2] = s[2] * 0x5290c25du + s[12]; + s[1] += s[2]; + s[2] += (s[1] | s[8]); + s[6] -= s[2]; + s[10] += s[6]; + s[13] += s[10] + 0x6bcc329cu; + s[2] *= (s[13] | 1u); + s[1] = (s[1] ^ s[2]) * 0xd95e0a65u; + s[12] = (s[12] ^ s[1]) * 0x5598f745u; + s[9] += s[12]; + s[15] = mh_rotl(s[15] ^ s[9], 19u); + s[13] += s[15]; + s[6] += s[13] + 0xe9004eeau; + s[15] ^= s[6]; + s[4] -= s[15]; + s[3] += s[4]; + s[8] ^= s[3] ^ 0x118412a8u; + s[2] = s[2] * 0x7ace7595u + s[8]; + s[3] *= (s[2] | 1u); + s[7] = (s[7] ^ s[3]) * 0xefdf99afu; + s[1] ^= s[7]; + s[11] *= (s[1] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 9u); + s[0] += s[13]; + s[7] *= (s[0] | 1u); + s[1] ^= s[7]; + s[10] ^= (s[1] & s[6]); + s[1] ^= s[10] ^ 0x93602932u; + s[2] -= s[1]; + s[12] ^= s[2]; + s[3] = mh_rotl(s[3], 1u) + s[12]; + s[7] ^= s[3]; + s[14] ^= s[7] ^ 0x237f8e1au; + s[0] = mh_rotl(s[0] ^ s[14], 2u); + s[1] *= (s[0] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 2u); + s[9] = mh_rotl(s[9] ^ s[4], 16u); + s[7] = s[7] * 0xf073bd6du + s[9]; + s[10] = s[10] * 0x3a609689u + s[7]; + s[12] ^= s[10]; + s[3] ^= s[12] ^ 0x9db3a4beu; + s[14] = mh_rotl(s[14], 1u) + s[3]; + s[6] += (s[14] | s[5]); + s[1] += s[6] + 0x1aae9d69u; + s[5] = mh_rotl(s[5] ^ s[1], 29u); + s[14] ^= s[5]; + s[8] += s[14]; + s[2] ^= (s[8] & s[0]); + s[11] = (s[11] ^ s[2]) * 0xf0879cf7u; + s[1] = mh_rotl(s[1] ^ s[11], 2u); + s[6] ^= s[1]; + s[15] -= s[6]; + s[7] -= s[15]; + s[3] += s[7]; + s[2] -= s[3]; + s[10] -= s[2]; + s[11] = mh_rotl(s[11], 3u) + s[10]; + s[3] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= (s[5] & s[14]); + s[3] ^= s[0]; + s[0] = s[0] * 0xd6807e45u + s[3]; + s[10] += s[0]; + s[4] *= (s[10] | 1u); + s[2] ^= (s[4] & s[5]); + s[9] = mh_rotl(s[9], 3u) + s[2]; + s[15] = s[15] * 0x946b5521u + s[9]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] ^= s[13]; + s[4] += (s[5] | s[15]); + s[2] += s[4]; + s[12] += s[2]; + s[3] *= (s[12] | 1u); + s[6] += s[3]; + s[12] = s[12] * 0xb6b83b35u + s[6]; + s[6] -= s[12]; + s[1] ^= s[6]; + s[4] = s[4] * 0x6b8de9c3u + s[1]; + s[15] += s[4]; + s[6] -= s[15]; + s[5] ^= (s[6] & s[7]); + s[14] += s[5]; + s[7] = (s[7] ^ s[14]) * 0x5fe38793u; + s[1] += s[7]; + s[15] = (s[15] ^ s[1]) * 0x0c3d59fbu; + s[2] ^= s[15] ^ 0xa6e76c52u; + s[8] ^= s[2]; + s[15] += s[8]; + s[2] = mh_rotl(s[2], 18u) + s[15]; + s[7] ^= s[2]; + s[9] += (s[7] | s[5]); + s[0] ^= (s[9] & s[6]); + s[14] *= (s[0] | 1u); + s[7] += (s[14] | s[1]); + s[8] ^= s[7]; + s[1] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 21u); + s[1] = (s[1] ^ s[4]) * 0xaa342e53u; + s[11] -= s[1]; + s[13] ^= s[11] ^ 0xcbbd4eceu; + s[5] -= s[13]; + s[11] += s[5]; + s[14] ^= s[11] ^ 0xb5db59d3u; + s[5] ^= s[14]; + s[10] = mh_rotl(s[10] ^ s[5], 23u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[6] *= (s[8] | 1u); + s[3] ^= s[6]; + s[7] += s[3] + 0x00658f95u; + s[0] ^= s[7] ^ 0x2e56fa3eu; + s[2] ^= s[0] ^ 0xec5293e3u; + s[7] = mh_rotl(s[7] ^ s[2], 21u); + s[14] *= (s[7] | 1u); + s[11] *= (s[14] | 1u); + s[0] *= (s[11] | 1u); + s[4] = (s[4] ^ s[0]) * 0x2fb41f81u; + s[2] += s[4]; + s[0] += s[2]; + s[6] += s[0]; + s[8] = mh_rotl(s[8], 10u) + s[6]; + s[2] += s[8]; + s[5] ^= s[2] ^ 0xa8ea4a52u; + s[10] ^= (s[5] & s[1]); + s[0] += s[10] + 0xadbdf4b0u; + s[8] ^= s[0]; + s[5] ^= s[8]; + s[10] = s[10] * 0x4142cee3u + s[5]; + s[12] += s[10] + 0xf3bf2694u; + s[10] *= (s[12] | 1u); + s[9] += s[10] + 0x087246d1u; + s[4] = mh_rotl(s[4], 24u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[4], 12u); + s[3] += s[0] + 0xac907341u; + s[12] = mh_rotl(s[12] ^ s[3], 8u); + s[14] -= s[12]; + s[15] -= s[14]; + s[5] += s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 20u); + s[7] = s[7] * 0xcb052cc1u + s[9]; + s[4] += s[7]; + s[0] = mh_rotl(s[0], 21u) + s[4]; + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] += s[6]; + s[15] -= s[2]; + s[9] = mh_rotl(s[9] ^ s[15], 22u); + s[8] ^= s[9]; + s[6] += s[8] + 0xae67ff98u; + s[0] -= s[6]; + s[2] *= (s[0] | 1u); + s[12] += s[2]; + s[15] ^= s[12]; + s[0] += s[15]; + s[6] ^= s[0]; + s[3] = mh_rotl(s[3] ^ s[6], 5u); + s[1] += s[3]; + s[6] ^= s[1]; + s[12] += (s[6] | s[8]); + s[3] ^= s[12]; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[8] ^= s[2]; + s[1] += s[8]; + s[6] += (s[1] | s[15]); + s[1] += s[6] + 0x2aa7ff78u; + s[11] += s[1]; + s[14] -= s[11]; + s[3] -= s[14]; + s[9] -= s[3]; + s[6] += s[9]; + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[8] += s[12]; + s[0] = mh_rotl(s[0] ^ s[8], 22u); + s[4] ^= s[0]; + s[8] = s[8] * 0x1e56eb41u + s[4]; + s[11] += s[8]; + s[6] += s[11]; + s[13] *= (s[6] | 1u); + s[2] *= (s[13] | 1u); + s[0] += s[2] + 0x43af110cu; + s[5] = s[5] * 0xa3d7a065u + s[0]; + s[14] *= (s[5] | 1u); + s[4] += s[14]; + s[11] *= (s[4] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[11]; + s[1] += (s[5] | s[9]); + s[5] += s[1]; + s[1] ^= s[5]; + s[9] += s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[10] += s[7]; + s[13] += s[10]; + s[8] = (s[8] ^ s[13]) * 0xfc8aade7u; + s[12] ^= s[8] ^ 0x47e9555au; + s[3] -= s[12]; + s[6] ^= s[3]; + s[11] ^= s[6]; + s[9] -= s[11]; + s[3] = mh_rotl(s[3], 29u) + s[9]; + s[8] += (s[3] | s[11]); + s[12] = mh_rotl(s[12], 13u) + s[8]; + s[4] = mh_rotl(s[4], 8u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0xe569b7fdu; + s[14] ^= (s[7] & s[11]); + s[8] -= s[14]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 3u) + s[14]; + s[3] += s[7]; + s[10] *= (s[3] | 1u); + s[8] = (s[8] ^ s[10]) * 0xc72f74bdu; + s[13] ^= s[8]; + s[4] = mh_rotl(s[4], 8u) + s[13]; + s[10] ^= s[4]; + s[11] = mh_rotl(s[11] ^ s[10], 10u); + s[2] ^= s[11] ^ 0x89747ffeu; + s[7] ^= s[2]; + s[5] -= s[7]; + s[13] -= s[5]; + s[0] = (s[0] ^ s[13]) * 0xf48e8c1du; + s[14] = mh_rotl(s[14] ^ s[0], 15u); + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[13] += s[7]; + s[0] = s[0] * 0x44c6b0f1u + s[13]; + s[3] ^= s[0]; + s[15] += s[3] + 0xb264b481u; + s[12] ^= s[15]; + s[7] += (s[12] | s[13]); + s[0] += s[7]; + s[9] -= s[0]; + s[13] = s[13] * 0x720cd467u + s[9]; + s[11] ^= s[13] ^ 0xa96dd9a0u; + s[5] -= s[11]; + s[15] += (s[5] | s[11]); + s[6] += s[15]; + s[7] += s[6]; + s[8] = s[8] * 0xbeaaa467u + s[7]; + s[7] ^= s[8]; + s[11] = (s[11] ^ s[7]) * 0x30405013u; + s[1] ^= s[11]; + s[0] ^= s[1] ^ 0xe46c8953u; + s[4] = (s[4] ^ s[0]) * 0x3beff773u; + s[3] = mh_rotl(s[3], 20u) + s[4]; + s[4] ^= s[3]; + s[11] = mh_rotl(s[11], 30u) + s[4]; + s[7] += (s[11] | s[3]); + s[11] ^= s[7]; + s[13] ^= s[11]; + s[1] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 17u) + s[1]; + s[15] ^= s[0] ^ 0xbb0e1b77u; + s[9] = mh_rotl(s[9] ^ s[15], 30u); + s[0] *= (s[9] | 1u); + s[3] += s[0]; + s[0] = (s[0] ^ s[3]) * 0x28a1e7fbu; + s[11] += s[0] + 0x3f20929bu; + s[14] += s[11] + 0x9721b746u; + s[3] = (s[3] ^ s[14]) * 0xc929f765u; + s[14] *= (s[3] | 1u); + s[10] -= s[14]; + s[3] = (s[3] ^ s[10]) * 0x83ea7953u; + s[14] ^= s[3]; + s[4] += s[14]; + s[11] ^= s[4] ^ 0x9f1876eeu; + s[5] += s[11]; + s[6] = (s[6] ^ s[5]) * 0x3e059b67u; + s[0] *= (s[6] | 1u); + s[9] ^= s[0]; + s[3] *= (s[9] | 1u); + s[4] += s[3]; + s[6] += s[4]; + s[14] = (s[14] ^ s[6]) * 0xe8ebef0fu; + s[12] = mh_rotl(s[12], 31u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[0] = mh_rotl(s[0], 25u) + s[3]; + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0xdd9f45b0u; + s[1] *= (s[0] | 1u); + s[7] = (s[7] ^ s[1]) * 0xd7937423u; + s[9] += s[7]; + s[14] ^= s[9]; + s[9] += (s[14] | s[4]); + s[14] ^= s[9]; + s[12] *= (s[14] | 1u); + s[11] = (s[11] ^ s[12]) * 0x6f00822du; + s[15] += s[11] + 0x90a645c9u; + s[11] = s[11] * 0xd4e49bc3u + s[15]; + s[9] += s[11]; + s[2] = (s[2] ^ s[9]) * 0xcd756085u; + s[5] -= s[2]; + s[1] ^= s[5]; + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[13] ^= s[7] ^ 0x259d1187u; + s[9] *= (s[13] | 1u); + s[7] ^= s[9]; + s[9] -= s[7]; + s[4] ^= s[9]; + s[14] *= (s[4] | 1u); + s[8] ^= s[14]; + s[15] = s[15] * 0x975ddaebu + s[8]; + s[9] += (s[15] | s[13]); + s[6] ^= s[9] ^ 0x318e194eu; + s[2] = (s[2] ^ s[6]) * 0xb0a2842fu; + s[5] = (s[5] ^ s[2]) * 0xa9a8585du; + s[7] = (s[7] ^ s[5]) * 0x3e818aa9u; + s[3] += s[7] + 0x60f54e95u; + s[7] += s[3] + 0xb6fd49a0u; + s[5] += s[7]; + s[12] = mh_rotl(s[12] ^ s[5], 1u); + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 2u) + s[3]; + s[2] ^= s[7]; + s[7] ^= s[2] ^ 0xa06175a5u; + s[15] -= s[7]; + s[2] += s[15] + 0x32c7f73fu; + s[10] -= s[2]; + s[6] -= s[10]; + s[11] += s[6] + 0x847befcdu; + s[8] *= (s[11] | 1u); + s[10] ^= s[8] ^ 0x80bc6c43u; + s[4] = (s[4] ^ s[10]) * 0xeec1e72fu; + s[14] = mh_rotl(s[14], 15u) + s[4]; + s[2] *= (s[14] | 1u); + s[7] += s[2] + 0x4f95cda0u; + s[12] *= (s[7] | 1u); + s[15] = s[15] * 0xc0c37a91u + s[12]; + s[12] *= (s[15] | 1u); + s[1] += s[12] + 0x574e25f1u; + s[9] += s[1]; + s[12] ^= s[9] ^ 0xbee6ae4cu; + s[2] = mh_rotl(s[2], 2u) + s[12]; + s[7] ^= s[2] ^ 0x2d8d95fcu; + s[1] = mh_rotl(s[1], 12u) + s[7]; + s[12] = s[12] * 0x459875c5u + s[1]; + s[7] += s[12]; + s[2] = mh_rotl(s[2] ^ s[7], 13u); + s[4] += s[2]; + s[14] ^= (s[4] & s[11]); + s[8] ^= s[14] ^ 0xd2d101c3u; + s[7] += s[8] + 0xf7c60fa6u; + s[0] = mh_rotl(s[0] ^ s[7], 20u); + s[9] ^= s[0]; + s[5] += s[9]; + s[1] ^= s[5] ^ 0x09ae80bdu; + s[9] ^= (s[1] & s[8]); + s[6] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[6]; + s[10] += s[1]; + s[14] += s[10]; + s[12] ^= s[14]; + s[10] -= s[12]; + s[6] += s[10]; + s[7] += s[6]; + s[5] += (s[7] | s[15]); + s[14] -= s[5]; + s[13] += (s[14] | s[12]); + s[2] ^= s[13]; + s[10] = mh_rotl(s[10] ^ s[2], 25u); + s[0] = mh_rotl(s[0] ^ s[10], 9u); + s[14] = (s[14] ^ s[0]) * 0xf271e2f9u; + s[0] = mh_rotl(s[0], 30u) + s[14]; + s[7] = (s[7] ^ s[0]) * 0xbcb788a1u; + s[11] = s[11] * 0xc98f1127u + s[7]; + s[15] ^= s[11]; + s[11] = (s[11] ^ s[15]) * 0x224f625fu; + s[14] = mh_rotl(s[14] ^ s[11], 13u); + s[11] += s[14]; + s[2] = mh_rotl(s[2] ^ s[11], 22u); + s[9] ^= s[2] ^ 0x82adb28eu; + s[8] += s[9]; + s[6] += s[8]; + s[15] += s[6]; + s[14] = s[14] * 0xfca2b387u + s[15]; + s[12] += s[14]; + s[6] += (s[12] | s[8]); + s[5] *= (s[6] | 1u); + s[1] ^= s[5]; + s[3] += s[1] + 0x1f147bc4u; + s[10] = mh_rotl(s[10], 24u) + s[3]; + s[6] += s[10] + 0x7186bc62u; + s[11] = mh_rotl(s[11], 2u) + s[6]; + s[10] ^= (s[11] & s[6]); + s[2] += (s[10] | s[15]); + s[9] = mh_rotl(s[9] ^ s[2], 16u); + s[6] ^= s[9]; + s[13] ^= (s[6] & s[2]); + s[4] -= s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 7u); + s[6] += s[10] + 0x76798031u; + s[2] ^= s[6] ^ 0x81f2cae5u; + s[15] -= s[2]; + s[7] = mh_rotl(s[7] ^ s[15], 11u); + s[0] -= s[7]; + s[15] ^= s[0] ^ 0x84b0f58cu; + s[4] ^= s[15]; + s[11] += s[4] + 0x37470ecau; + s[7] = mh_rotl(s[7] ^ s[11], 25u); + s[0] ^= s[7]; + s[7] ^= s[0]; + s[15] = (s[15] ^ s[7]) * 0x8bed0165u; + s[13] = (s[13] ^ s[15]) * 0xf0b2282fu; + s[10] ^= s[13]; + s[15] *= (s[10] | 1u); +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_3(uint32_t* s) { + s[9] -= s[0]; + s[12] *= (s[9] | 1u); + s[13] -= s[12]; + s[2] = (s[2] ^ s[13]) * 0xcaec7bb5u; + s[8] = (s[8] ^ s[2]) * 0xbfa2f813u; + s[9] = (s[9] ^ s[8]) * 0xd8816ab5u; + s[11] ^= s[9]; + s[4] = (s[4] ^ s[11]) * 0xb5a60ae1u; + s[2] += s[4]; + s[14] += s[2] + 0x3b8ef46bu; + s[5] -= s[14]; + s[12] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 5u); + s[8] = (s[8] ^ s[4]) * 0x064e4143u; + s[5] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 30u) + s[5]; + s[13] += s[10]; + s[14] += s[13] + 0xb57a206du; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[4] = mh_rotl(s[4], 8u) + s[7]; + s[2] = mh_rotl(s[2], 26u) + s[4]; + s[6] = mh_rotl(s[6], 23u) + s[2]; + s[0] = mh_rotl(s[0] ^ s[6], 10u); + s[4] = mh_rotl(s[4] ^ s[0], 16u); + s[8] = (s[8] ^ s[4]) * 0xc9a07b1du; + s[6] = (s[6] ^ s[8]) * 0xf7907103u; + s[1] = mh_rotl(s[1] ^ s[6], 2u); + s[8] = (s[8] ^ s[1]) * 0x63cfdc25u; + s[13] += (s[8] | s[3]); + s[11] -= s[13]; + s[10] += s[11] + 0xbe40fad3u; + s[14] *= (s[10] | 1u); + s[8] += s[14]; + s[14] += s[8] + 0xe91df793u; + s[5] -= s[14]; + s[2] = mh_rotl(s[2], 17u) + s[5]; + s[7] ^= s[2]; + s[9] += s[7] + 0x80c9212au; + s[1] = (s[1] ^ s[9]) * 0xa7d74fefu; + s[0] ^= s[1] ^ 0x08f82691u; + s[3] ^= (s[0] & s[12]); + s[5] = mh_rotl(s[5] ^ s[3], 10u); + s[11] *= (s[5] | 1u); + s[12] -= s[11]; + s[0] += s[12]; + s[7] = mh_rotl(s[7], 10u) + s[0]; + s[2] = mh_rotl(s[2], 25u) + s[7]; + s[15] += s[2] + 0xe54d98a2u; + s[3] ^= s[15]; + s[2] += (s[3] | s[12]); + s[11] -= s[2]; + s[14] ^= (s[11] & s[3]); + s[3] += s[14]; + s[13] += s[3]; + s[9] *= (s[13] | 1u); + s[8] ^= s[9]; + s[4] += s[8]; + s[1] += s[4]; + s[14] *= (s[1] | 1u); + s[10] = (s[10] ^ s[14]) * 0x80d81c29u; + s[14] = mh_rotl(s[14], 28u) + s[10]; + s[15] *= (s[14] | 1u); + s[9] ^= s[15] ^ 0xb96f0f72u; + s[0] += s[9] + 0x58af0b09u; + s[7] += (s[0] | s[8]); + s[4] = (s[4] ^ s[7]) * 0x3cb02481u; + s[6] += s[4] + 0x7c9ebf59u; + s[4] = mh_rotl(s[4], 31u) + s[6]; + s[11] += s[4]; + s[9] += s[11]; + s[0] ^= s[9]; + s[6] ^= s[0] ^ 0x87a4c25eu; + s[10] += s[6] + 0x63a850d3u; + s[3] *= (s[10] | 1u); + s[15] += s[3]; + s[2] *= (s[15] | 1u); + s[0] ^= s[2]; + s[10] ^= (s[0] & s[12]); + s[0] = mh_rotl(s[0] ^ s[10], 13u); + s[10] ^= s[0]; + s[1] = s[1] * 0x68b25a3du + s[10]; + s[14] ^= (s[1] & s[4]); + s[15] *= (s[14] | 1u); + s[0] = mh_rotl(s[0] ^ s[15], 21u); + s[1] ^= (s[0] & s[14]); + s[13] *= (s[1] | 1u); + s[15] *= (s[13] | 1u); + s[7] *= (s[15] | 1u); + s[3] ^= s[7] ^ 0x1eb335a8u; + s[15] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 23u) + s[15]; + s[5] ^= s[7]; + s[8] += s[5] + 0x50a316f9u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 19u) + s[5]; + s[8] = mh_rotl(s[8], 28u) + s[3]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[2] += (s[14] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 16u); + s[11] += s[13]; + s[4] ^= s[11]; + s[15] += s[4]; + s[2] += s[15]; + s[13] = mh_rotl(s[13] ^ s[2], 7u); + s[1] += s[13]; + s[0] *= (s[1] | 1u); + s[6] -= s[0]; + s[13] += s[6]; + s[2] = mh_rotl(s[2], 24u) + s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 17u); + s[10] += s[4] + 0xd112ffcfu; + s[15] ^= s[10] ^ 0x9030e81eu; + s[4] ^= s[15]; + s[9] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[9], 7u); + s[2] = mh_rotl(s[2], 24u) + s[10]; + s[14] = (s[14] ^ s[2]) * 0x93c10f1du; + s[10] *= (s[14] | 1u); + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[4] *= (s[10] | 1u); + s[10] += s[4]; + s[6] += (s[10] | s[15]); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[13] = mh_rotl(s[13] ^ s[5], 9u); + s[4] ^= s[13]; + s[10] ^= s[4]; + s[2] -= s[10]; + s[13] += (s[2] | s[9]); + s[8] -= s[13]; + s[4] -= s[8]; + s[3] ^= s[4] ^ 0x9fcb6ee8u; + s[4] ^= s[3] ^ 0xb9fbeaf9u; + s[12] = mh_rotl(s[12], 8u) + s[4]; + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 31u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 9u); + s[0] *= (s[4] | 1u); + s[6] ^= s[0]; + s[4] = mh_rotl(s[4], 13u) + s[6]; + s[13] -= s[4]; + s[7] ^= s[13]; + s[12] = mh_rotl(s[12], 10u) + s[7]; + s[14] = mh_rotl(s[14], 27u) + s[12]; + s[7] ^= s[14]; + s[0] += (s[7] | s[2]); + s[12] ^= s[0]; + s[5] = (s[5] ^ s[12]) * 0x392525a1u; + s[8] += s[5] + 0x4138a8f1u; + s[5] += s[8]; + s[11] += s[5]; + s[7] ^= s[11]; + s[14] ^= s[7]; + s[0] += s[14]; + s[12] ^= s[0]; + s[2] *= (s[12] | 1u); + s[6] -= s[2]; + s[4] += s[6] + 0xdcaac0adu; + s[10] ^= s[4]; + s[5] += s[10]; + s[10] += s[5] + 0x0cfa5affu; + s[15] ^= s[10] ^ 0x68194eefu; + s[8] *= (s[15] | 1u); + s[9] += s[8] + 0x15042ceau; + s[0] += (s[9] | s[6]); + s[14] *= (s[0] | 1u); + s[13] = s[13] * 0x5a114c5fu + s[14]; + s[1] += s[13]; + s[3] += s[1]; + s[4] ^= s[3] ^ 0x9b2578dcu; + s[3] = (s[3] ^ s[4]) * 0xf0215559u; + s[9] = mh_rotl(s[9] ^ s[3], 30u); + s[3] *= (s[9] | 1u); + s[10] *= (s[3] | 1u); + s[5] = (s[5] ^ s[10]) * 0xd48cc381u; + s[3] ^= s[5]; + s[5] -= s[3]; + s[0] = (s[0] ^ s[5]) * 0x5dc8d8cfu; + s[2] += (s[0] | s[1]); + s[4] = mh_rotl(s[4] ^ s[2], 26u); + s[11] *= (s[4] | 1u); + s[2] *= (s[11] | 1u); + s[10] -= s[2]; + s[14] = s[14] * 0x8334873fu + s[10]; + s[7] += s[14]; + s[15] += s[7] + 0xa09fcd48u; + s[10] ^= s[15]; + s[15] += s[10]; + s[12] = mh_rotl(s[12], 20u) + s[15]; + s[3] = (s[3] ^ s[12]) * 0xb7d989dfu; + s[4] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 4u); + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[8] = mh_rotl(s[8] ^ s[7], 13u); + s[1] = (s[1] ^ s[8]) * 0xfd9c4977u; + s[2] ^= s[1]; + s[13] = mh_rotl(s[13], 25u) + s[2]; + s[11] += s[13]; + s[2] = s[2] * 0x9e62997du + s[11]; + s[1] ^= s[2] ^ 0x5bed272fu; + s[7] = mh_rotl(s[7] ^ s[1], 14u); + s[12] += s[7]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[9] *= (s[1] | 1u); + s[13] ^= (s[9] & s[15]); + s[1] += (s[13] | s[14]); + s[6] -= s[1]; + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[10] -= s[1]; + s[4] = s[4] * 0x1026f5f7u + s[10]; + s[7] = (s[7] ^ s[4]) * 0x91c6caf3u; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[11] += s[4] + 0x39f61640u; + s[10] -= s[11]; + s[15] ^= s[10]; + s[13] += s[15] + 0xa8a05a01u; + s[3] = mh_rotl(s[3], 27u) + s[13]; + s[4] -= s[3]; + s[13] = mh_rotl(s[13], 8u) + s[4]; + s[8] ^= s[13]; + s[3] += s[8] + 0x4dc574e2u; + s[15] += (s[3] | s[5]); + s[9] = s[9] * 0x7c710593u + s[15]; + s[2] += s[9] + 0xe91d6df9u; + s[9] ^= s[2] ^ 0xba09d0c1u; + s[7] = mh_rotl(s[7] ^ s[9], 5u); + s[2] += s[7] + 0xf1cb3677u; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[5] = mh_rotl(s[5], 10u) + s[0]; + s[9] += s[5]; + s[12] ^= (s[9] & s[3]); + s[5] = (s[5] ^ s[12]) * 0x8e5ae08du; + s[11] -= s[5]; + s[12] ^= s[11]; + s[0] ^= s[12] ^ 0x038449c7u; + s[6] += s[0] + 0x2b0bf2e9u; + s[9] += s[6]; + s[1] += s[9]; + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[9] *= (s[3] | 1u); + s[13] = s[13] * 0xabfb518du + s[9]; + s[11] += (s[13] | s[14]); + s[6] ^= s[11]; + s[3] += s[6] + 0xbf050303u; + s[9] += s[3]; + s[8] *= (s[9] | 1u); + s[11] += s[8]; + s[7] = mh_rotl(s[7] ^ s[11], 12u); + s[1] = mh_rotl(s[1], 18u) + s[7]; + s[12] *= (s[1] | 1u); + s[5] -= s[12]; + s[11] *= (s[5] | 1u); + s[0] = s[0] * 0x1258c98fu + s[11]; + s[2] -= s[0]; + s[13] = mh_rotl(s[13], 5u) + s[2]; + s[15] = (s[15] ^ s[13]) * 0xa9ea982fu; + s[0] ^= (s[15] & s[5]); + s[14] = (s[14] ^ s[0]) * 0x8e658f2du; + s[7] = mh_rotl(s[7], 28u) + s[14]; + s[4] = (s[4] ^ s[7]) * 0xdffb5283u; + s[9] = mh_rotl(s[9], 18u) + s[4]; + s[5] = mh_rotl(s[5], 30u) + s[9]; + s[11] += s[5] + 0x67a75c51u; + s[3] = mh_rotl(s[3], 13u) + s[11]; + s[9] += s[3]; + s[1] ^= s[9] ^ 0xc25226c4u; + s[7] *= (s[1] | 1u); + s[12] ^= s[7]; + s[3] = mh_rotl(s[3] ^ s[12], 8u); + s[0] = mh_rotl(s[0], 13u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[0], 9u); + s[14] ^= s[9]; + s[0] -= s[14]; + s[12] = mh_rotl(s[12], 4u) + s[0]; + s[6] += s[12] + 0x8a7a83b1u; + s[12] += s[6] + 0xce44f768u; + s[13] ^= s[12] ^ 0xa265fddcu; + s[3] = mh_rotl(s[3] ^ s[13], 28u); + s[2] += s[3]; + s[4] = (s[4] ^ s[2]) * 0xfaf1f025u; + s[5] *= (s[4] | 1u); + s[13] = (s[13] ^ s[5]) * 0x1bde9b5du; + s[2] += (s[13] | s[0]); + s[12] ^= s[2]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] = mh_rotl(s[11], 20u) + s[2]; + s[1] *= (s[11] | 1u); + s[5] = mh_rotl(s[5], 17u) + s[1]; + s[0] = mh_rotl(s[0], 7u) + s[5]; + s[11] ^= s[0]; + s[5] -= s[11]; + s[8] *= (s[5] | 1u); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xc1818321u; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 12u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[1], 20u); + s[11] *= (s[15] | 1u); + s[13] *= (s[11] | 1u); + s[8] ^= s[13]; + s[5] = (s[5] ^ s[8]) * 0xcb34052bu; + s[12] = mh_rotl(s[12] ^ s[5], 24u); + s[5] = mh_rotl(s[5] ^ s[12], 12u); + s[9] = mh_rotl(s[9], 4u) + s[5]; + s[12] = s[12] * 0x44487769u + s[9]; + s[3] += s[12]; + s[7] = s[7] * 0x3d0dc719u + s[3]; + s[12] = mh_rotl(s[12], 25u) + s[7]; + s[14] = (s[14] ^ s[12]) * 0x0a26f463u; + s[5] ^= s[14] ^ 0x7e263a26u; + s[11] = mh_rotl(s[11], 29u) + s[5]; + s[14] -= s[11]; + s[12] = (s[12] ^ s[14]) * 0x05fc47afu; + s[11] ^= s[12]; + s[7] += s[11]; + s[8] -= s[7]; + s[4] ^= s[8]; + s[7] ^= s[4]; + s[11] ^= s[7]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[7] += (s[12] | s[9]); + s[12] ^= s[7]; + s[1] += s[12] + 0x47217177u; + s[12] = (s[12] ^ s[1]) * 0x60a7a2a1u; + s[11] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[11] ^= s[13]; + s[6] ^= s[11]; + s[0] *= (s[6] | 1u); + s[15] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[15], 4u); + s[9] = mh_rotl(s[9] ^ s[11], 20u); + s[0] = (s[0] ^ s[9]) * 0xe7aae81fu; + s[6] *= (s[0] | 1u); + s[15] += s[6]; + s[3] += s[15] + 0x6bbe960au; + s[12] -= s[3]; + s[8] *= (s[12] | 1u); + s[11] = s[11] * 0xcc54856fu + s[8]; + s[3] = (s[3] ^ s[11]) * 0x65049d67u; + s[1] -= s[3]; + s[3] *= (s[1] | 1u); + s[0] *= (s[3] | 1u); + s[12] *= (s[0] | 1u); + s[2] *= (s[12] | 1u); + s[12] -= s[2]; + s[6] ^= s[12]; + s[13] = s[13] * 0xfd8e78e7u + s[6]; + s[4] ^= s[13] ^ 0x36001de6u; + s[3] += s[4]; + s[6] -= s[3]; + s[4] *= (s[6] | 1u); + s[10] *= (s[4] | 1u); + s[7] ^= s[10]; + s[13] ^= s[7] ^ 0x3cc162e5u; + s[2] = (s[2] ^ s[13]) * 0xc6b38d29u; + s[8] ^= s[2] ^ 0x43ac5ec1u; + s[0] += (s[8] | s[14]); + s[3] += s[0] + 0xc94402c6u; + s[8] = (s[8] ^ s[3]) * 0x40a11c6du; + s[1] = mh_rotl(s[1] ^ s[8], 9u); + s[2] = (s[2] ^ s[1]) * 0x10ebfae9u; + s[8] += s[2] + 0x2e5cffd4u; + s[0] = mh_rotl(s[0], 4u) + s[8]; + s[2] *= (s[0] | 1u); + s[9] ^= s[2] ^ 0xea63f112u; + s[4] = mh_rotl(s[4] ^ s[9], 20u); + s[12] += (s[4] | s[0]); + s[6] = mh_rotl(s[6], 28u) + s[12]; + s[11] ^= s[6]; + s[2] = (s[2] ^ s[11]) * 0xb92e6187u; + s[6] += s[2]; + s[10] += (s[6] | s[2]); + s[8] ^= s[10]; + s[11] ^= s[8]; + s[12] = mh_rotl(s[12], 12u) + s[11]; + s[8] = s[8] * 0xcf6e39cbu + s[12]; + s[7] += s[8] + 0x07e25ae6u; + s[1] = (s[1] ^ s[7]) * 0x6550efddu; + s[15] += s[1] + 0xcd15560fu; + s[13] ^= s[15]; + s[4] = mh_rotl(s[4], 16u) + s[13]; + s[12] = (s[12] ^ s[4]) * 0x7129239fu; + s[9] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[9], 25u); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[2] ^= s[7]; + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[1] -= s[5]; + s[8] = s[8] * 0x1c6b90b7u + s[1]; + s[14] += s[8]; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[5] = s[5] * 0x1b17414fu + s[15]; + s[11] ^= s[5] ^ 0xd6b8f316u; + s[9] = mh_rotl(s[9], 25u) + s[11]; + s[0] = (s[0] ^ s[9]) * 0x36fce4cdu; + s[11] = (s[11] ^ s[0]) * 0x3ffedbedu; + s[6] = mh_rotl(s[6] ^ s[11], 28u); + s[0] = mh_rotl(s[0], 26u) + s[6]; + s[1] ^= s[0]; + s[7] = (s[7] ^ s[1]) * 0x4dfcedebu; + s[15] = mh_rotl(s[15], 26u) + s[7]; + s[14] = (s[14] ^ s[15]) * 0x6c9326edu; + s[4] = mh_rotl(s[4] ^ s[14], 23u); + s[9] += s[4]; + s[10] += s[9]; + s[1] += s[10]; + s[4] = mh_rotl(s[4] ^ s[1], 19u); + s[9] += s[4]; + s[13] += s[9]; + s[15] = mh_rotl(s[15], 6u) + s[13]; + s[6] = mh_rotl(s[6], 13u) + s[15]; + s[1] *= (s[6] | 1u); + s[11] = s[11] * 0x0aa13acfu + s[1]; + s[7] = (s[7] ^ s[11]) * 0xf0f30943u; + s[11] = mh_rotl(s[11], 5u) + s[7]; + s[12] ^= s[11]; + s[6] ^= s[12]; + s[3] ^= s[6]; + s[14] = mh_rotl(s[14], 11u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 8u); + s[13] *= (s[12] | 1u); + s[15] -= s[13]; + s[9] = s[9] * 0x111b0ab9u + s[15]; + s[0] = mh_rotl(s[0] ^ s[9], 2u); + s[13] ^= s[0] ^ 0x208f1223u; + s[1] = (s[1] ^ s[13]) * 0x8697b4f3u; + s[4] = s[4] * 0xf7e4eb9bu + s[1]; + s[12] = mh_rotl(s[12] ^ s[4], 20u); + s[6] = mh_rotl(s[6] ^ s[12], 16u); + s[7] += s[6] + 0xb04cedccu; + s[9] ^= (s[7] & s[12]); + s[15] = mh_rotl(s[15] ^ s[9], 8u); + s[14] = s[14] * 0xba13bfd9u + s[15]; + s[6] = mh_rotl(s[6], 30u) + s[14]; + s[2] ^= s[6] ^ 0xe3a68481u; + s[3] ^= s[2] ^ 0xdb295442u; + s[6] -= s[3]; + s[3] *= (s[6] | 1u); + s[14] ^= s[3]; + s[6] += s[14]; + s[0] += s[6]; + s[13] ^= s[0] ^ 0x2ce62ec8u; + s[9] -= s[13]; + s[6] = (s[6] ^ s[9]) * 0xb3667f91u; + s[12] ^= s[6] ^ 0xa40ba390u; + s[0] += s[12]; + s[13] = (s[13] ^ s[0]) * 0xcf132dbdu; + s[8] ^= s[13] ^ 0xc01a2e22u; + s[15] = mh_rotl(s[15], 29u) + s[8]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[12] += s[4] + 0xa106f25fu; + s[10] = mh_rotl(s[10], 2u) + s[12]; + s[1] ^= s[10]; + s[4] = s[4] * 0xd693bf07u + s[1]; + s[8] ^= s[4]; + s[15] += s[8]; + s[2] = (s[2] ^ s[15]) * 0x451147c5u; + s[6] += s[2]; + s[4] ^= s[6] ^ 0x95c3d40au; + s[8] ^= s[4]; + s[6] = mh_rotl(s[6] ^ s[8], 24u); + s[8] = s[8] * 0xfacd20cdu + s[6]; + s[3] *= (s[8] | 1u); + s[0] = s[0] * 0xf8f86c91u + s[3]; + s[9] *= (s[0] | 1u); + s[1] ^= s[9]; + s[13] ^= s[1]; + s[14] *= (s[13] | 1u); + s[0] += s[14] + 0x29396640u; + s[6] *= (s[0] | 1u); + s[13] -= s[6]; + s[4] ^= s[13]; + s[10] = mh_rotl(s[10], 29u) + s[4]; + s[11] = mh_rotl(s[11], 14u) + s[10]; + s[8] = mh_rotl(s[8], 14u) + s[11]; + s[12] = (s[12] ^ s[8]) * 0x7c958209u; + s[14] ^= s[12] ^ 0x6e81c671u; + s[6] ^= s[14]; + s[5] += s[6] + 0xe6b449c9u; + s[7] ^= (s[5] & s[12]); + s[8] = mh_rotl(s[8], 8u) + s[7]; + s[7] = s[7] * 0x3076e64fu + s[8]; + s[15] = s[15] * 0x4f3224dfu + s[7]; + s[9] = mh_rotl(s[9] ^ s[15], 24u); + s[5] = s[5] * 0x71865ddbu + s[9]; + s[2] += s[5] + 0xbd3e3e01u; + s[4] = mh_rotl(s[4] ^ s[2], 14u); + s[0] = (s[0] ^ s[4]) * 0x6b745769u; + s[9] -= s[0]; + s[4] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[4], 2u); + s[8] += (s[6] | s[10]); + s[1] *= (s[8] | 1u); + s[14] += (s[1] | s[6]); + s[6] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[6], 19u); + s[4] *= (s[13] | 1u); + s[10] ^= s[4] ^ 0xd06e492du; + s[9] ^= s[10] ^ 0x6d1c0c53u; + s[14] ^= s[9]; + s[13] ^= (s[14] & s[10]); + s[1] += (s[13] | s[4]); + s[11] = mh_rotl(s[11] ^ s[1], 30u); + s[0] += s[11]; + s[2] ^= (s[0] & s[13]); + s[0] -= s[2]; + s[12] = s[12] * 0x615420d7u + s[0]; + s[11] ^= (s[12] & s[3]); + s[1] = mh_rotl(s[1], 31u) + s[11]; + s[2] = mh_rotl(s[2] ^ s[1], 12u); + s[12] ^= s[2]; + s[8] ^= s[12]; + s[6] -= s[8]; + s[10] ^= s[6]; + s[14] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[14], 22u); + s[6] *= (s[15] | 1u); + s[1] ^= s[6]; + s[12] = s[12] * 0x513c5869u + s[1]; + s[6] = mh_rotl(s[6] ^ s[12], 21u); + s[9] ^= s[6]; + s[0] += s[9]; + s[12] ^= s[0]; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 4u); + s[1] ^= s[6]; + s[4] *= (s[1] | 1u); + s[6] = s[6] * 0xb444bcc1u + s[4]; + s[8] ^= s[6]; + s[7] ^= s[8] ^ 0x1a883d74u; + s[10] = mh_rotl(s[10] ^ s[7], 8u); + s[9] = mh_rotl(s[9], 16u) + s[10]; + s[6] += s[9]; + s[2] ^= s[6]; + s[14] = mh_rotl(s[14], 8u) + s[2]; + s[9] += (s[14] | s[11]); + s[15] *= (s[9] | 1u); + s[9] = mh_rotl(s[9], 9u) + s[15]; + s[8] = mh_rotl(s[8], 9u) + s[9]; + s[7] ^= s[8]; + s[5] ^= s[7]; + s[11] ^= s[5]; + s[4] *= (s[11] | 1u); + s[8] *= (s[4] | 1u); + s[12] += (s[8] | s[2]); + s[13] = s[13] * 0xed36b1e7u + s[12]; + s[1] ^= s[13]; + s[2] *= (s[1] | 1u); + s[5] = s[5] * 0x20dd61c9u + s[2]; + s[9] += s[5] + 0x4221406cu; + s[2] = (s[2] ^ s[9]) * 0xbd437fb1u; + s[10] ^= s[2]; + s[8] += (s[10] | s[4]); + s[1] += s[8]; + s[15] *= (s[1] | 1u); + s[10] *= (s[15] | 1u); + s[4] -= s[10]; + s[12] += s[4] + 0x2cc4a200u; + s[6] ^= s[12]; + s[11] += s[6] + 0x24df7960u; + s[13] -= s[11]; + s[4] ^= s[13]; + s[1] -= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 7u); + s[1] += s[3]; + s[9] += s[1]; + s[3] ^= s[9]; + s[6] ^= (s[3] & s[0]); + s[13] -= s[6]; + s[2] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[1] *= (s[5] | 1u); + s[3] = (s[3] ^ s[1]) * 0x290a4cddu; + s[7] = (s[7] ^ s[3]) * 0x05557b07u; + s[3] = mh_rotl(s[3] ^ s[7], 7u); + s[9] += s[3]; + s[14] ^= s[9]; + s[0] = (s[0] ^ s[14]) * 0x84c021f1u; + s[14] ^= s[0]; + s[3] -= s[14]; + s[1] = s[1] * 0x6d78fdd7u + s[3]; + s[5] = (s[5] ^ s[1]) * 0x5e5c9e7bu; + s[12] += s[5]; + s[8] += (s[12] | s[3]); + s[13] += s[8] + 0x4759e773u; + s[15] += s[13]; + s[3] = (s[3] ^ s[15]) * 0x6664f1fdu; + s[6] *= (s[3] | 1u); + s[11] = (s[11] ^ s[6]) * 0x4e530d13u; + s[5] *= (s[11] | 1u); + s[1] += s[5] + 0x3dd89a81u; + s[14] = mh_rotl(s[14], 6u) + s[1]; + s[9] = mh_rotl(s[9], 2u) + s[14]; + s[14] += s[9]; + s[10] = mh_rotl(s[10] ^ s[14], 31u); + s[12] += s[10]; + s[7] ^= (s[12] & s[11]); + s[13] += s[7]; + s[4] = mh_rotl(s[4], 4u) + s[13]; + s[3] ^= (s[4] & s[10]); + s[5] ^= (s[3] & s[11]); + s[4] = mh_rotl(s[4], 22u) + s[5]; + s[3] -= s[4]; + s[5] ^= (s[3] & s[12]); + s[2] -= s[5]; + s[9] = (s[9] ^ s[2]) * 0x009bbf5bu; + s[4] += s[9]; + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[7] = mh_rotl(s[7] ^ s[15], 20u); + s[10] += s[7]; + s[4] = s[4] * 0x4bdd1ef7u + s[10]; + s[14] ^= (s[4] & s[2]); + s[9] = (s[9] ^ s[14]) * 0x52fb945du; + s[12] += s[9]; + s[9] ^= s[12]; + s[2] = mh_rotl(s[2] ^ s[9], 11u); + s[11] += s[2] + 0x98f50a09u; + s[15] += s[11] + 0xd43ed388u; + s[10] += s[15] + 0x2f9a932bu; + s[12] ^= (s[10] & s[15]); + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0xd453117du; + s[1] += (s[12] | s[2]); + s[5] += s[1]; + s[1] += s[5]; + s[14] -= s[1]; + s[8] -= s[14]; + s[10] -= s[8]; + s[13] ^= (s[10] & s[5]); + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[13] = (s[13] ^ s[5]) * 0x664791dfu; + s[15] -= s[13]; + s[3] += s[15]; + s[5] *= (s[3] | 1u); + s[2] = (s[2] ^ s[5]) * 0x93635545u; + s[8] ^= s[2] ^ 0xfd3c4040u; + s[12] ^= s[8] ^ 0x16edb512u; + s[1] ^= s[12] ^ 0x16c54637u; + s[4] += (s[1] | s[10]); + s[1] += s[4]; + s[13] ^= (s[1] & s[6]); + s[7] += s[13] + 0x3d8c4dc2u; + s[15] += s[7]; + s[14] = (s[14] ^ s[15]) * 0xa280205du; + s[8] += s[14] + 0xea00510eu; + s[15] += s[8] + 0x22e3c715u; + s[8] ^= s[15]; + s[4] ^= s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 20u); + s[0] += s[11]; + s[13] = mh_rotl(s[13], 15u) + s[0]; + s[14] ^= s[13]; + s[0] ^= s[14]; + s[10] -= s[0]; + s[14] = s[14] * 0x93e04059u + s[10]; + s[0] += s[14] + 0x5e852243u; + s[9] += s[0]; + s[11] ^= s[9] ^ 0x6a38274eu; + s[6] ^= s[11]; + s[9] ^= s[6] ^ 0x45fe04e0u; + s[15] ^= s[9]; + s[2] = mh_rotl(s[2] ^ s[15], 2u); + s[7] ^= s[2]; + s[3] = mh_rotl(s[3], 25u) + s[7]; + s[4] += s[3]; + s[0] = mh_rotl(s[0] ^ s[4], 30u); + s[14] ^= s[0]; + s[9] += s[14]; + s[1] = s[1] * 0x3f7558f3u + s[9]; + s[4] = s[4] * 0xe3e44fb9u + s[1]; + s[11] *= (s[4] | 1u); + s[1] += s[11]; + s[9] ^= s[1]; + s[12] *= (s[9] | 1u); + s[13] ^= s[12] ^ 0xde1987e8u; + s[11] ^= (s[13] & s[12]); + s[8] *= (s[11] | 1u); + s[4] += s[8] + 0x607d6073u; + s[0] = mh_rotl(s[0], 10u) + s[4]; + s[7] = (s[7] ^ s[0]) * 0x7b248651u; + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[6] += s[1]; + s[9] += s[6]; + s[5] -= s[9]; + s[0] += s[5]; + s[6] = mh_rotl(s[6] ^ s[0], 28u); + s[1] -= s[6]; + s[12] += s[1] + 0x2a786432u; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[13] += s[15] + 0xcbe2f823u; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[12] *= (s[14] | 1u); + s[2] += s[12]; + s[0] -= s[2]; + s[6] += s[0]; + s[5] = mh_rotl(s[5], 22u) + s[6]; + s[0] -= s[5]; + s[5] ^= s[0] ^ 0x2970012du; + s[10] ^= s[5] ^ 0xed24a370u; + s[0] ^= s[10]; + s[12] = s[12] * 0x41ce9517u + s[0]; + s[4] += s[12]; + s[13] = (s[13] ^ s[4]) * 0x2d1ce425u; + s[10] = (s[10] ^ s[13]) * 0x97e04693u; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[8] += s[6]; + s[2] += s[8]; + s[4] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[4], 5u); + s[4] ^= s[2]; + s[2] += s[4]; + s[14] = (s[14] ^ s[2]) * 0x1b32c769u; + s[13] ^= s[14]; + s[5] = mh_rotl(s[5] ^ s[13], 22u); + s[6] += (s[5] | s[8]); + s[9] = mh_rotl(s[9] ^ s[6], 29u); + s[10] += s[9]; + s[7] ^= s[10]; + s[14] = mh_rotl(s[14] ^ s[7], 18u); + s[10] = mh_rotl(s[10] ^ s[14], 10u); + s[2] = mh_rotl(s[2], 5u) + s[10]; + s[5] = mh_rotl(s[5], 13u) + s[2]; + s[12] += s[5]; + s[13] = (s[13] ^ s[12]) * 0x17c1f363u; + s[9] += (s[13] | s[7]); + s[13] *= (s[9] | 1u); + s[15] = mh_rotl(s[15], 19u) + s[13]; + s[12] = mh_rotl(s[12], 19u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[12], 8u); +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_4(uint32_t* s) { + s[8] = s[8] * 0xaecd4a17u + s[0]; + s[7] = mh_rotl(s[7], 30u) + s[8]; + s[13] ^= s[7]; + s[3] ^= s[13] ^ 0x4f2a7676u; + s[4] = mh_rotl(s[4] ^ s[3], 3u); + s[8] += s[4]; + s[0] ^= s[8]; + s[8] = (s[8] ^ s[0]) * 0x13ad02a5u; + s[3] ^= s[8]; + s[8] += s[3]; + s[12] ^= s[8] ^ 0xee807166u; + s[5] = mh_rotl(s[5] ^ s[12], 25u); + s[1] ^= s[5]; + s[7] = (s[7] ^ s[1]) * 0x7f918ce5u; + s[8] += s[7]; + s[12] ^= s[8] ^ 0x0fe3941du; + s[6] *= (s[12] | 1u); + s[15] = mh_rotl(s[15], 30u) + s[6]; + s[8] += s[15]; + s[4] ^= s[8]; + s[3] -= s[4]; + s[0] += s[3]; + s[2] ^= (s[0] & s[5]); + s[10] += s[2]; + s[2] ^= s[10]; + s[6] -= s[2]; + s[5] += s[6]; + s[14] += (s[5] | s[3]); + s[11] += (s[14] | s[3]); + s[13] += s[11]; + s[8] = mh_rotl(s[8], 26u) + s[13]; + s[1] = mh_rotl(s[1] ^ s[8], 12u); + s[11] ^= (s[1] & s[8]); + s[14] = mh_rotl(s[14] ^ s[11], 10u); + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[5] = (s[5] ^ s[7]) * 0x3ef9db3bu; + s[8] += s[5]; + s[12] += s[8]; + s[10] *= (s[12] | 1u); + s[5] ^= s[10] ^ 0x3ac44be6u; + s[14] = s[14] * 0xdd348ca1u + s[5]; + s[3] ^= s[14] ^ 0xfd694e31u; + s[7] ^= s[3]; + s[6] ^= s[7] ^ 0x1c8fa07eu; + s[4] ^= s[6]; + s[2] ^= s[4]; + s[9] -= s[2]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[13] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[13], 11u); + s[1] = (s[1] ^ s[5]) * 0x41737ac3u; + s[10] ^= (s[1] & s[13]); + s[13] -= s[10]; + s[5] += s[13] + 0xef8b331eu; + s[14] += s[5]; + s[2] += s[14]; + s[3] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[11] ^= s[2]; + s[3] = (s[3] ^ s[11]) * 0xe116294bu; + s[2] *= (s[3] | 1u); + s[6] ^= s[2]; + s[2] *= (s[6] | 1u); + s[12] ^= s[2] ^ 0x53bea191u; + s[14] *= (s[12] | 1u); + s[10] ^= s[14]; + s[4] *= (s[10] | 1u); + s[2] ^= s[4] ^ 0xced418d2u; + s[5] = s[5] * 0xe51463cbu + s[2]; + s[2] ^= s[5]; + s[6] += (s[2] | s[3]); + s[9] ^= (s[6] & s[15]); + s[0] = (s[0] ^ s[9]) * 0x52fd974du; + s[15] = mh_rotl(s[15] ^ s[0], 8u); + s[14] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[12] ^= s[8]; + s[7] = mh_rotl(s[7], 9u) + s[12]; + s[3] ^= s[7] ^ 0x86710ff9u; + s[13] -= s[3]; + s[3] ^= s[13]; + s[5] = mh_rotl(s[5], 29u) + s[3]; + s[7] += (s[5] | s[8]); + s[6] += s[7]; + s[13] ^= s[6]; + s[5] ^= s[13]; + s[13] -= s[5]; + s[4] ^= s[13]; + s[0] = mh_rotl(s[0], 28u) + s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[0] = (s[0] ^ s[10]) * 0x4bce676du; + s[9] += s[0]; + s[15] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 29u); + s[1] ^= s[5]; + s[10] ^= s[1]; + s[3] -= s[10]; + s[4] -= s[3]; + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[8] ^= s[5]; + s[4] += s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 22u); + s[7] ^= s[11]; + s[11] ^= s[7] ^ 0x678e4d82u; + s[7] = (s[7] ^ s[11]) * 0x3b4b50bfu; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[0] = mh_rotl(s[0], 11u) + s[3]; + s[4] -= s[0]; + s[3] ^= s[4]; + s[11] ^= s[3]; + s[4] *= (s[11] | 1u); + s[2] -= s[4]; + s[1] -= s[2]; + s[9] ^= s[1]; + s[11] -= s[9]; + s[9] ^= s[11]; + s[10] = (s[10] ^ s[9]) * 0x5a972befu; + s[7] ^= (s[10] & s[4]); + s[15] = (s[15] ^ s[7]) * 0xac20e017u; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[10] -= s[3]; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[15] = mh_rotl(s[15] ^ s[6], 3u); + s[4] = (s[4] ^ s[15]) * 0xbeaf0ba9u; + s[9] *= (s[4] | 1u); + s[12] ^= s[9]; + s[8] ^= s[12]; + s[14] *= (s[8] | 1u); + s[6] = mh_rotl(s[6] ^ s[14], 16u); + s[10] += s[6]; + s[1] += s[10]; + s[3] ^= s[1]; + s[9] -= s[3]; + s[6] += s[9]; + s[15] = mh_rotl(s[15], 13u) + s[6]; + s[10] ^= (s[15] & s[1]); + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[9] = mh_rotl(s[9], 11u) + s[3]; + s[2] ^= s[9] ^ 0x8f89660fu; + s[0] = mh_rotl(s[0] ^ s[2], 21u); + s[13] = (s[13] ^ s[0]) * 0x486a43b3u; + s[10] += s[13]; + s[4] ^= s[10]; + s[14] ^= s[4]; + s[2] ^= s[14]; + s[7] += s[2] + 0xd5248764u; + s[1] ^= s[7]; + s[5] ^= (s[1] & s[14]); + s[8] *= (s[5] | 1u); + s[14] += s[8]; + s[4] -= s[14]; + s[6] = mh_rotl(s[6], 1u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[6], 25u); + s[9] = mh_rotl(s[9], 10u) + s[3]; + s[7] += s[9]; + s[4] += s[7]; + s[2] = (s[2] ^ s[4]) * 0xf5d8c485u; + s[13] *= (s[2] | 1u); + s[8] ^= s[13]; + s[12] ^= s[8]; + s[0] += s[12] + 0xcbe96ecfu; + s[10] += s[0]; + s[4] += s[10]; + s[15] ^= s[4]; + s[11] *= (s[15] | 1u); + s[4] = s[4] * 0x8a37f349u + s[11]; + s[2] += s[4]; + s[10] = mh_rotl(s[10] ^ s[2], 14u); + s[12] += s[10]; + s[7] ^= s[12]; + s[6] = (s[6] ^ s[7]) * 0x5d00c42du; + s[0] ^= s[6]; + s[11] ^= s[0]; + s[15] += s[11]; + s[8] += s[15]; + s[11] ^= s[8]; + s[8] ^= (s[11] & s[7]); + s[15] -= s[8]; + s[2] -= s[15]; + s[14] += s[2]; + s[5] += s[14]; + s[11] ^= (s[5] & s[8]); + s[3] ^= s[11] ^ 0xe126a36du; + s[10] += s[3]; + s[14] += s[10]; + s[8] ^= s[14] ^ 0x52400d07u; + s[12] *= (s[8] | 1u); + s[15] ^= (s[12] & s[11]); + s[3] = mh_rotl(s[3] ^ s[15], 1u); + s[12] += s[3] + 0xd372258fu; + s[4] ^= s[12] ^ 0xf284d169u; + s[11] -= s[4]; + s[13] = mh_rotl(s[13], 1u) + s[11]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[0] *= (s[13] | 1u); + s[9] ^= s[0]; + s[1] = s[1] * 0xb05d4c01u + s[9]; + s[8] -= s[1]; + s[1] += s[8]; + s[4] = mh_rotl(s[4], 31u) + s[1]; + s[6] ^= s[4]; + s[7] ^= (s[6] & s[4]); + s[10] += s[7] + 0xc4e27d81u; + s[5] += s[10]; + s[3] *= (s[5] | 1u); + s[12] += s[3] + 0xeb606a4au; + s[11] ^= s[12] ^ 0x25bef1a4u; + s[15] *= (s[11] | 1u); + s[13] += s[15] + 0x2f08e9bbu; + s[14] += s[13]; + s[1] ^= s[14]; + s[9] *= (s[1] | 1u); + s[12] += s[9]; + s[6] *= (s[12] | 1u); + s[7] += (s[6] | s[1]); + s[13] += s[7]; + s[7] = mh_rotl(s[7], 1u) + s[13]; + s[5] = mh_rotl(s[5], 5u) + s[7]; + s[1] *= (s[5] | 1u); + s[14] = (s[14] ^ s[1]) * 0x050194b7u; + s[15] += s[14]; + s[9] = mh_rotl(s[9] ^ s[15], 18u); + s[13] = s[13] * 0xb23e5f33u + s[9]; + s[11] = mh_rotl(s[11], 3u) + s[13]; + s[10] += s[11]; + s[11] *= (s[10] | 1u); + s[3] ^= s[11]; + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[0] ^= (s[6] & s[1]); + s[10] += s[0]; + s[12] = mh_rotl(s[12], 20u) + s[10]; + s[1] *= (s[12] | 1u); + s[6] *= (s[1] | 1u); + s[7] += s[6]; + s[5] ^= s[7]; + s[13] ^= s[5]; + s[7] ^= s[13]; + s[6] ^= s[7]; + s[11] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[11], 9u); + s[8] ^= s[7] ^ 0x619be41bu; + s[4] = (s[4] ^ s[8]) * 0xa41b1063u; + s[8] = (s[8] ^ s[4]) * 0x39fd4b17u; + s[12] += s[8]; + s[0] = mh_rotl(s[0] ^ s[12], 17u); + s[1] += (s[0] | s[12]); + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[15] += s[3]; + s[2] ^= s[15] ^ 0xac74167cu; + s[4] += s[2]; + s[7] += s[4]; + s[3] ^= (s[7] & s[5]); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[15] -= s[4]; + s[3] += (s[15] | s[11]); + s[4] += s[3]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[14] += (s[8] | s[3]); + s[6] = s[6] * 0x88bcb913u + s[14]; + s[2] = mh_rotl(s[2], 26u) + s[6]; + s[9] *= (s[2] | 1u); + s[4] += s[9] + 0xf68758d3u; + s[11] ^= s[4] ^ 0xe7cb0a2du; + s[15] ^= s[11]; + s[0] = mh_rotl(s[0] ^ s[15], 10u); + s[1] ^= s[0] ^ 0x01a1a184u; + s[2] += s[1]; + s[6] = mh_rotl(s[6], 6u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[6], 18u); + s[14] ^= (s[12] & s[13]); + s[15] += s[14]; + s[4] = s[4] * 0x45d3b6d1u + s[15]; + s[15] += s[4] + 0x287abc40u; + s[12] *= (s[15] | 1u); + s[7] *= (s[12] | 1u); + s[8] += s[7]; + s[15] = mh_rotl(s[15] ^ s[8], 31u); + s[14] = (s[14] ^ s[15]) * 0x4d24e02fu; + s[0] += s[14] + 0x2e93de43u; + s[9] ^= s[0]; + s[1] -= s[9]; + s[4] += s[1] + 0x7018f3c1u; + s[5] = mh_rotl(s[5] ^ s[4], 22u); + s[4] = (s[4] ^ s[5]) * 0x5d42c6b7u; + s[1] = mh_rotl(s[1], 19u) + s[4]; + s[10] *= (s[1] | 1u); + s[6] = (s[6] ^ s[10]) * 0xb3b283ddu; + s[0] += (s[6] | s[4]); + s[4] = mh_rotl(s[4] ^ s[0], 10u); + s[2] = mh_rotl(s[2], 18u) + s[4]; + s[3] += s[2] + 0xf72224c1u; + s[2] ^= s[3]; + s[6] ^= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[6]; + s[13] -= s[11]; + s[8] += s[13]; + s[6] += s[8]; + s[2] = mh_rotl(s[2] ^ s[6], 2u); + s[3] = (s[3] ^ s[2]) * 0xe72cd1e5u; + s[10] ^= s[3]; + s[9] = (s[9] ^ s[10]) * 0xdaae888fu; + s[12] = mh_rotl(s[12] ^ s[9], 13u); + s[13] += s[12]; + s[12] += s[13] + 0x1bf086c5u; + s[10] += s[12]; + s[5] = mh_rotl(s[5], 20u) + s[10]; + s[13] = (s[13] ^ s[5]) * 0x332136d3u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[2] += (s[0] | s[7]); + s[1] ^= s[2] ^ 0x906c1640u; + s[8] += (s[1] | s[13]); + s[13] = mh_rotl(s[13] ^ s[8], 27u); + s[4] = (s[4] ^ s[13]) * 0x8f6a7f2du; + s[10] ^= s[4]; + s[6] *= (s[10] | 1u); + s[3] ^= s[6]; + s[2] -= s[3]; + s[10] += (s[2] | s[14]); + s[4] ^= s[10]; + s[7] = mh_rotl(s[7] ^ s[4], 13u); + s[15] += s[7]; + s[6] += s[15]; + s[3] += (s[6] | s[9]); + s[4] = mh_rotl(s[4] ^ s[3], 14u); + s[13] += s[4] + 0xfa50a754u; + s[12] ^= s[13]; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[3] += s[14]; + s[8] -= s[3]; + s[12] = mh_rotl(s[12], 11u) + s[8]; + s[8] = s[8] * 0x68315979u + s[12]; + s[3] ^= s[8] ^ 0x0c36ecd9u; + s[11] *= (s[3] | 1u); + s[15] *= (s[11] | 1u); + s[10] *= (s[15] | 1u); + s[5] ^= s[10]; + s[9] = mh_rotl(s[9], 7u) + s[5]; + s[6] = s[6] * 0xb4800e07u + s[9]; + s[14] += s[6] + 0xe2b19752u; + s[6] += s[14] + 0x5b6cb907u; + s[14] ^= s[6]; + s[3] ^= (s[14] & s[10]); + s[7] *= (s[3] | 1u); + s[1] += s[7] + 0x072137beu; + s[0] ^= (s[1] & s[8]); + s[8] += s[0]; + s[9] += s[8] + 0x02e4e39bu; + s[14] += s[9] + 0xe9bf76a8u; + s[2] ^= s[14]; + s[0] = s[0] * 0x76da5405u + s[2]; + s[10] = mh_rotl(s[10] ^ s[0], 20u); + s[13] += s[10]; + s[7] = mh_rotl(s[7] ^ s[13], 27u); + s[1] += s[7]; + s[12] = mh_rotl(s[12], 4u) + s[1]; + s[5] = s[5] * 0xfc599aedu + s[12]; + s[10] -= s[5]; + s[0] += s[10]; + s[8] = mh_rotl(s[8] ^ s[0], 10u); + s[11] ^= s[8]; + s[14] += s[11]; + s[2] -= s[14]; + s[12] += s[2] + 0x573e5081u; + s[0] ^= s[12] ^ 0x571e5302u; + s[2] ^= s[0]; + s[5] ^= s[2]; + s[8] ^= s[5] ^ 0xdac0ab44u; + s[11] = mh_rotl(s[11] ^ s[8], 6u); + s[0] += s[11]; + s[2] += s[0]; + s[6] ^= s[2]; + s[2] = mh_rotl(s[2], 31u) + s[6]; + s[11] += s[2]; + s[12] += s[11]; + s[2] += s[12] + 0xc9a167b4u; + s[5] += s[2]; + s[2] += s[5]; + s[9] ^= s[2]; + s[12] = (s[12] ^ s[9]) * 0x813582c9u; + s[2] += s[12]; + s[3] = mh_rotl(s[3] ^ s[2], 8u); + s[5] *= (s[3] | 1u); + s[4] += s[5]; + s[3] *= (s[4] | 1u); + s[6] *= (s[3] | 1u); + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[12] += s[3]; + s[5] -= s[12]; + s[3] = s[3] * 0x9fa250c7u + s[5]; + s[15] += (s[3] | s[12]); + s[14] ^= (s[15] & s[11]); + s[6] += s[14]; + s[4] += s[6]; + s[3] = s[3] * 0x07092e11u + s[4]; + s[4] = mh_rotl(s[4] ^ s[3], 9u); + s[11] *= (s[4] | 1u); + s[6] += s[11]; + s[10] *= (s[6] | 1u); + s[6] *= (s[10] | 1u); + s[4] ^= s[6]; + s[12] = mh_rotl(s[12], 28u) + s[4]; + s[10] ^= s[12]; + s[8] += s[10]; + s[15] = (s[15] ^ s[8]) * 0x23fc87d7u; + s[3] += s[15]; + s[8] ^= s[3]; + s[5] = s[5] * 0x4812e6c5u + s[8]; + s[11] -= s[5]; + s[0] *= (s[11] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[12] += (s[10] | s[5]); + s[5] ^= s[12]; + s[0] *= (s[5] | 1u); + s[15] -= s[0]; + s[8] = mh_rotl(s[8], 23u) + s[15]; + s[13] = s[13] * 0x83e86a8bu + s[8]; + s[7] += s[13]; + s[11] = (s[11] ^ s[7]) * 0xd510d0b1u; + s[7] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 11u); + s[13] *= (s[2] | 1u); + s[1] ^= s[13]; + s[9] ^= s[1]; + s[8] -= s[9]; + s[1] += s[8]; + s[2] += s[1]; + s[1] -= s[2]; + s[12] = (s[12] ^ s[1]) * 0x1205ac95u; + s[3] = mh_rotl(s[3], 22u) + s[12]; + s[0] ^= s[3]; + s[1] ^= s[0] ^ 0xa613bb86u; + s[12] += s[1] + 0x5cc04f4bu; + s[3] -= s[12]; + s[6] = (s[6] ^ s[3]) * 0xff2c5e5du; + s[7] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[7], 20u); + s[13] = (s[13] ^ s[2]) * 0xc3c13b61u; + s[6] ^= s[13]; + s[13] ^= s[6]; + s[5] = mh_rotl(s[5], 11u) + s[13]; + s[9] += s[5]; + s[15] ^= s[9]; + s[6] = (s[6] ^ s[15]) * 0xd0ff64bbu; + s[15] = mh_rotl(s[15] ^ s[6], 17u); + s[10] ^= (s[15] & s[5]); + s[13] = mh_rotl(s[13] ^ s[10], 22u); + s[2] += s[13]; + s[5] ^= s[2] ^ 0x434fd088u; + s[7] ^= (s[5] & s[2]); + s[13] ^= s[7]; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[12] += s[3]; + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 8u); + s[5] *= (s[9] | 1u); + s[14] += s[5] + 0x3680f66du; + s[15] += s[14]; + s[12] -= s[15]; + s[4] *= (s[12] | 1u); + s[7] ^= (s[4] & s[6]); + s[3] = mh_rotl(s[3], 2u) + s[7]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[10] += s[6]; + s[4] ^= (s[10] & s[3]); + s[0] ^= s[4]; + s[12] ^= s[0]; + s[15] ^= s[12]; + s[6] += (s[15] | s[7]); + s[3] += s[6]; + s[9] = mh_rotl(s[9], 2u) + s[3]; + s[15] += s[9]; + s[9] = mh_rotl(s[9] ^ s[15], 6u); + s[2] = mh_rotl(s[2], 28u) + s[9]; + s[7] = (s[7] ^ s[2]) * 0x49571301u; + s[10] = mh_rotl(s[10], 8u) + s[7]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[2] *= (s[9] | 1u); + s[7] = s[7] * 0x461c2c9bu + s[2]; + s[4] += s[7]; + s[12] += s[4]; + s[1] = mh_rotl(s[1] ^ s[12], 30u); + s[11] ^= s[1] ^ 0x41684119u; + s[6] ^= s[11]; + s[5] *= (s[6] | 1u); + s[12] ^= s[5] ^ 0x5e252f68u; + s[15] = mh_rotl(s[15] ^ s[12], 13u); + s[0] = s[0] * 0xcfa728bbu + s[15]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[5] = (s[5] ^ s[3]) * 0x4c101bb3u; + s[13] -= s[5]; + s[12] += s[13]; + s[13] -= s[12]; + s[15] ^= s[13]; + s[5] = (s[5] ^ s[15]) * 0xffd85c8du; + s[4] = mh_rotl(s[4], 21u) + s[5]; + s[7] ^= s[4]; + s[12] = mh_rotl(s[12], 16u) + s[7]; + s[11] -= s[12]; + s[3] = mh_rotl(s[3], 17u) + s[11]; + s[7] ^= s[3]; + s[0] -= s[7]; + s[9] ^= s[0]; + s[7] = mh_rotl(s[7], 11u) + s[9]; + s[4] += s[7]; + s[1] ^= s[4]; + s[8] = s[8] * 0xd56caf87u + s[1]; + s[15] -= s[8]; + s[12] ^= s[15]; + s[7] ^= s[12]; + s[15] -= s[7]; + s[10] += s[15] + 0x32455b49u; + s[12] = mh_rotl(s[12] ^ s[10], 6u); + s[5] ^= s[12] ^ 0x024545fbu; + s[12] += s[5]; + s[10] ^= s[12] ^ 0xc7112001u; + s[1] = (s[1] ^ s[10]) * 0xa0829e23u; + s[7] *= (s[1] | 1u); + s[15] = (s[15] ^ s[7]) * 0x42ed41f9u; + s[12] = mh_rotl(s[12], 12u) + s[15]; + s[3] += s[12] + 0xfc638f44u; + s[8] ^= s[3]; + s[12] -= s[8]; + s[8] += (s[12] | s[4]); + s[14] ^= s[8]; + s[4] += s[14]; + s[0] ^= s[4] ^ 0x4890174au; + s[14] += s[0]; + s[10] += s[14]; + s[1] -= s[10]; + s[4] ^= s[1]; + s[7] *= (s[4] | 1u); + s[4] *= (s[7] | 1u); + s[7] ^= s[4]; + s[2] = (s[2] ^ s[7]) * 0x14382f11u; + s[1] *= (s[2] | 1u); + s[15] ^= s[1]; + s[5] = mh_rotl(s[5] ^ s[15], 4u); + s[12] = (s[12] ^ s[5]) * 0x818ffff7u; + s[13] ^= s[12] ^ 0x3c40017du; + s[10] = mh_rotl(s[10], 6u) + s[13]; + s[12] = s[12] * 0x2c1775d5u + s[10]; + s[8] += (s[12] | s[11]); + s[1] = mh_rotl(s[1], 4u) + s[8]; + s[8] += s[1] + 0x0134d33fu; + s[5] = mh_rotl(s[5] ^ s[8], 18u); + s[10] -= s[5]; + s[14] += s[10]; + s[2] = mh_rotl(s[2] ^ s[14], 26u); + s[10] += s[2]; + s[5] = mh_rotl(s[5] ^ s[10], 25u); + s[3] += s[5]; + s[15] -= s[3]; + s[6] ^= (s[15] & s[14]); + s[12] -= s[6]; + s[5] -= s[12]; + s[6] += s[5] + 0x35380dd4u; + s[9] ^= s[6]; + s[4] = mh_rotl(s[4], 12u) + s[9]; + s[12] = (s[12] ^ s[4]) * 0x88440653u; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 22u); + s[11] = mh_rotl(s[11] ^ s[6], 31u); + s[5] = mh_rotl(s[5] ^ s[11], 11u); + s[4] += s[5] + 0xc2928041u; + s[2] -= s[4]; + s[12] ^= s[2]; + s[2] ^= s[12]; + s[10] ^= s[2] ^ 0x18d1c7f6u; + s[12] = (s[12] ^ s[10]) * 0xe5af4085u; + s[0] -= s[12]; + s[13] += s[0] + 0xbab4883eu; + s[5] = mh_rotl(s[5] ^ s[13], 28u); + s[1] = (s[1] ^ s[5]) * 0x22410953u; + s[10] = mh_rotl(s[10], 12u) + s[1]; + s[1] = (s[1] ^ s[10]) * 0xb2399be7u; + s[8] += s[1] + 0x705befa8u; + s[6] = mh_rotl(s[6], 4u) + s[8]; + s[5] ^= s[6]; + s[8] += s[5] + 0x17cc5e00u; + s[4] -= s[8]; + s[5] ^= s[4]; + s[15] += s[5]; + s[8] ^= s[15]; + s[12] += s[8]; + s[3] -= s[12]; + s[11] += s[3]; + s[12] = mh_rotl(s[12], 2u) + s[11]; + s[3] = s[3] * 0xd6adb5cbu + s[12]; + s[6] += s[3]; + s[5] = (s[5] ^ s[6]) * 0x712deca1u; + s[8] += s[5]; + s[13] *= (s[8] | 1u); + s[7] ^= s[13] ^ 0xa85619d9u; + s[4] += s[7] + 0xb2a236bcu; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[0] -= s[8]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[4] ^= s[13]; + s[10] ^= s[4]; + s[5] ^= s[10] ^ 0x37c54528u; + s[15] ^= s[5]; + s[4] ^= s[15] ^ 0x0bec700du; + s[0] ^= s[4]; + s[6] ^= s[0]; + s[11] ^= (s[6] & s[8]); + s[5] ^= (s[11] & s[1]); + s[13] ^= s[5]; + s[2] *= (s[13] | 1u); + s[10] += s[2] + 0xbc7e8198u; + s[12] ^= s[10]; + s[3] ^= s[12]; + s[5] ^= (s[3] & s[1]); + s[8] ^= s[5]; + s[11] += s[8]; + s[7] ^= s[11]; + s[15] += s[7] + 0xfcc72c89u; + s[0] += s[15]; + s[2] = s[2] * 0x7b366e1fu + s[0]; + s[4] = s[4] * 0x410f7c31u + s[2]; + s[14] += s[4]; + s[8] = (s[8] ^ s[14]) * 0x06b5c483u; + s[13] ^= s[8]; + s[4] *= (s[13] | 1u); + s[7] = mh_rotl(s[7], 14u) + s[4]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[9] += s[12]; + s[14] ^= s[9]; + s[0] += s[14] + 0xe2ef88f9u; + s[12] += s[0]; + s[14] *= (s[12] | 1u); + s[1] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[1], 27u); + s[6] -= s[12]; + s[10] += s[6]; + s[11] *= (s[10] | 1u); + s[3] += (s[11] | s[7]); + s[13] += s[3] + 0x2a6dd670u; + s[12] += s[13]; + s[14] = mh_rotl(s[14] ^ s[12], 16u); + s[12] += s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[7] ^= s[3] ^ 0xe2b68ee9u; + s[13] *= (s[7] | 1u); + s[3] ^= (s[13] & s[1]); + s[14] += s[3] + 0x9d70728au; + s[4] += (s[14] | s[2]); + s[0] += s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[3] -= s[10]; + s[11] += s[3] + 0x1b93fbbau; + s[1] = (s[1] ^ s[11]) * 0xad24de07u; + s[7] ^= s[1] ^ 0xf567e775u; + s[11] ^= s[7]; + s[13] = (s[13] ^ s[11]) * 0xb2957691u; + s[7] = mh_rotl(s[7], 20u) + s[13]; + s[13] *= (s[7] | 1u); + s[10] += s[13]; + s[13] ^= s[10]; + s[2] ^= s[13]; + s[6] ^= s[2]; + s[11] += s[6] + 0xa3624a2au; + s[13] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[13], 23u); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[5] -= s[7]; + s[0] ^= s[5]; + s[7] -= s[0]; + s[4] += s[7]; + s[12] += s[4] + 0x2c1f1085u; + s[11] = mh_rotl(s[11] ^ s[12], 14u); + s[9] += s[11] + 0xfdecf3f9u; + s[5] += s[9] + 0x2c06a4fau; + s[0] ^= (s[5] & s[12]); + s[11] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 22u) + s[11]; + s[2] = mh_rotl(s[2], 23u) + s[5]; + s[14] = (s[14] ^ s[2]) * 0x953e8e65u; + s[1] = mh_rotl(s[1], 4u) + s[14]; + s[13] = (s[13] ^ s[1]) * 0xb422e8dfu; + s[5] += s[13]; + s[8] = s[8] * 0xdd24c5ddu + s[5]; + s[15] *= (s[8] | 1u); + s[13] -= s[15]; + s[5] += s[13]; + s[8] += (s[5] | s[0]); + s[4] = (s[4] ^ s[8]) * 0x90f74f8du; + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[8] ^= s[10]; + s[14] = (s[14] ^ s[8]) * 0x68eea367u; + s[13] += s[14] + 0x4bf33e83u; + s[8] = (s[8] ^ s[13]) * 0xe5bb45edu; + s[13] += (s[8] | s[1]); + s[15] ^= s[13] ^ 0xffc7db9bu; + s[3] += s[15]; + s[0] ^= s[3]; + s[15] = mh_rotl(s[15] ^ s[0], 9u); + s[12] -= s[15]; + s[8] ^= s[12]; + s[5] += s[8] + 0x8c8db6c6u; + s[9] -= s[5]; + s[4] ^= s[9]; + s[1] = (s[1] ^ s[4]) * 0xcdb30e8bu; + s[10] += s[1]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[11] *= (s[15] | 1u); + s[8] = (s[8] ^ s[11]) * 0x1ac4b2f9u; + s[11] += s[8]; + s[10] = mh_rotl(s[10] ^ s[11], 2u); + s[1] -= s[10]; + s[6] ^= (s[1] & s[5]); + s[10] = (s[10] ^ s[6]) * 0x7f568bd3u; + s[1] = (s[1] ^ s[10]) * 0x9987ff9bu; + s[2] ^= s[1] ^ 0xc9b72de7u; + s[3] += s[2]; + s[7] = mh_rotl(s[7] ^ s[3], 14u); + s[1] = mh_rotl(s[1] ^ s[7], 17u); + s[11] *= (s[1] | 1u); + s[15] -= s[11]; + s[13] ^= s[15]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[9] += s[13]; + s[1] = s[1] * 0xfeea9fa1u + s[9]; + s[8] = s[8] * 0xcfe61b7fu + s[1]; + s[4] -= s[8]; + s[0] += s[4] + 0x73688400u; +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_5(uint32_t* s) { + s[1] ^= s[0] ^ 0x7be05e0cu; + s[8] ^= s[1] ^ 0xbb15eaa7u; + s[3] *= (s[8] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[6] ^= s[10]; + s[1] += s[6]; + s[2] = (s[2] ^ s[1]) * 0x315dc983u; + s[3] += s[2]; + s[12] += s[3] + 0x503a8a69u; + s[7] ^= (s[12] & s[8]); + s[11] = (s[11] ^ s[7]) * 0x99203cd1u; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[5] += s[13]; + s[13] = (s[13] ^ s[5]) * 0x290906f1u; + s[6] += (s[13] | s[11]); + s[14] *= (s[6] | 1u); + s[10] += s[14]; + s[12] = mh_rotl(s[12] ^ s[10], 10u); + s[11] += s[12]; + s[1] ^= (s[11] & s[8]); + s[14] += s[1] + 0xb8346947u; + s[10] = s[10] * 0x973f37cdu + s[14]; + s[11] -= s[10]; + s[8] *= (s[11] | 1u); + s[14] ^= s[8]; + s[8] += s[14]; + s[0] = (s[0] ^ s[8]) * 0x82fd2f6du; + s[3] ^= (s[0] & s[5]); + s[10] += s[3]; + s[1] -= s[10]; + s[0] ^= s[1]; + s[5] -= s[0]; + s[11] *= (s[5] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 4u); + s[5] -= s[9]; + s[12] ^= s[5]; + s[15] = mh_rotl(s[15], 19u) + s[12]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 23u); + s[10] ^= s[15] ^ 0x3e4fd17bu; + s[7] ^= (s[10] & s[13]); + s[1] ^= s[7]; + s[10] = (s[10] ^ s[1]) * 0xa58c234du; + s[2] += s[10]; + s[7] += s[2]; + s[14] = mh_rotl(s[14] ^ s[7], 14u); + s[15] ^= s[14]; + s[11] ^= s[15] ^ 0x031afa2eu; + s[8] ^= (s[11] & s[12]); + s[4] = mh_rotl(s[4] ^ s[8], 14u); + s[15] *= (s[4] | 1u); + s[14] *= (s[15] | 1u); + s[1] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[1], 17u); + s[6] -= s[0]; + s[11] ^= s[6]; + s[7] *= (s[11] | 1u); + s[15] += s[7]; + s[1] = (s[1] ^ s[15]) * 0x65c90267u; + s[9] ^= s[1]; + s[12] = (s[12] ^ s[9]) * 0x37b05dbdu; + s[5] += s[12]; + s[1] += s[5] + 0x9ef7f880u; + s[13] -= s[1]; + s[8] = (s[8] ^ s[13]) * 0x4dccc6e3u; + s[15] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 15u) + s[15]; + s[4] = s[4] * 0xa7087673u + s[10]; + s[7] += s[4]; + s[4] = mh_rotl(s[4], 25u) + s[7]; + s[1] = s[1] * 0xd0d20effu + s[4]; + s[11] = mh_rotl(s[11], 3u) + s[1]; + s[15] ^= (s[11] & s[10]); + s[6] += s[15]; + s[10] *= (s[6] | 1u); + s[0] += s[10]; + s[15] ^= s[0]; + s[3] += (s[15] | s[13]); + s[8] += s[3]; + s[13] = s[13] * 0x647918d1u + s[8]; + s[4] -= s[13]; + s[1] -= s[4]; + s[8] -= s[1]; + s[0] += s[8]; + s[4] ^= s[0]; + s[2] = mh_rotl(s[2], 16u) + s[4]; + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[13] -= s[5]; + s[14] ^= s[13]; + s[13] += s[14] + 0x09e91881u; + s[10] = mh_rotl(s[10], 1u) + s[13]; + s[15] *= (s[10] | 1u); + s[3] = mh_rotl(s[3], 22u) + s[15]; + s[5] *= (s[3] | 1u); + s[0] = mh_rotl(s[0], 13u) + s[5]; + s[2] ^= s[0]; + s[7] ^= s[2]; + s[4] += s[7]; + s[8] += s[4]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0xf334efabu; + s[11] ^= s[4]; + s[1] -= s[11]; + s[5] += s[1]; + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[7] = mh_rotl(s[7], 2u) + s[14]; + s[12] = s[12] * 0x9d3fac25u + s[7]; + s[10] = (s[10] ^ s[12]) * 0xd7f82753u; + s[12] = (s[12] ^ s[10]) * 0xa500b1e9u; + s[7] ^= (s[12] & s[11]); + s[3] += s[7]; + s[6] += s[3]; + s[13] ^= (s[6] & s[0]); + s[15] *= (s[13] | 1u); + s[8] ^= s[15]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[4] ^= s[15] ^ 0xbf1018b9u; + s[15] *= (s[4] | 1u); + s[13] += s[15] + 0xa0aadb65u; + s[3] = s[3] * 0x1c2c8781u + s[13]; + s[12] += s[3]; + s[4] ^= (s[12] & s[6]); + s[5] += s[4]; + s[0] ^= s[5] ^ 0x15727cfcu; + s[1] ^= s[0]; + s[3] ^= s[1] ^ 0x8ec257dau; + s[12] += s[3]; + s[4] += s[12]; + s[1] ^= (s[4] & s[2]); + s[14] = mh_rotl(s[14], 30u) + s[1]; + s[4] ^= s[14] ^ 0x871677edu; + s[3] -= s[4]; + s[12] ^= s[3] ^ 0xafa32cfbu; + s[0] *= (s[12] | 1u); + s[2] += s[0]; + s[10] -= s[2]; + s[15] ^= s[10] ^ 0xfb3ab53eu; + s[0] += s[15] + 0xd703e4c6u; + s[13] += s[0] + 0xdd7d064eu; + s[4] ^= s[13]; + s[1] ^= s[4]; + s[7] = mh_rotl(s[7] ^ s[1], 18u); + s[5] = mh_rotl(s[5] ^ s[7], 5u); + s[13] -= s[5]; + s[5] += s[13]; + s[2] *= (s[5] | 1u); + s[7] -= s[2]; + s[0] *= (s[7] | 1u); + s[7] ^= s[0]; + s[11] ^= s[7] ^ 0x47fc5334u; + s[10] -= s[11]; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[7] = (s[7] ^ s[14]) * 0xba5f2ba9u; + s[0] += s[7]; + s[9] ^= s[0]; + s[12] = mh_rotl(s[12] ^ s[9], 31u); + s[15] += s[12]; + s[11] += s[15] + 0x67321a5fu; + s[14] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[14], 20u); + s[0] *= (s[2] | 1u); + s[10] += (s[0] | s[6]); + s[1] ^= s[10]; + s[10] += s[1]; + s[15] = s[15] * 0x968038e9u + s[10]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[4], 30u); + s[1] = mh_rotl(s[1], 9u) + s[7]; + s[7] += s[1] + 0x36fd51c7u; + s[0] = mh_rotl(s[0] ^ s[7], 4u); + s[9] = mh_rotl(s[9] ^ s[0], 13u); + s[0] = (s[0] ^ s[9]) * 0xe60c1fa9u; + s[3] = s[3] * 0xb184ef99u + s[0]; + s[14] += s[3]; + s[11] = mh_rotl(s[11], 3u) + s[14]; + s[1] += s[11]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[6] -= s[15]; + s[7] = (s[7] ^ s[6]) * 0x55b55f6fu; + s[15] *= (s[7] | 1u); + s[4] += (s[15] | s[13]); + s[5] -= s[4]; + s[7] = s[7] * 0xfbc2da35u + s[5]; + s[15] = (s[15] ^ s[7]) * 0x1fd2b55fu; + s[0] = mh_rotl(s[0] ^ s[15], 8u); + s[7] = mh_rotl(s[7], 15u) + s[0]; + s[5] = (s[5] ^ s[7]) * 0x4f355b4bu; + s[4] -= s[5]; + s[1] += (s[4] | s[10]); + s[0] -= s[1]; + s[4] ^= s[0]; + s[15] ^= s[4]; + s[7] = mh_rotl(s[7], 28u) + s[15]; + s[3] ^= s[7] ^ 0xb688911au; + s[1] += s[3] + 0x1c2be1ceu; + s[0] ^= s[1]; + s[7] += s[0] + 0x2850aa80u; + s[9] = mh_rotl(s[9] ^ s[7], 10u); + s[6] += s[9]; + s[13] ^= s[6] ^ 0xa94fde4bu; + s[1] = mh_rotl(s[1] ^ s[13], 6u); + s[13] ^= s[1] ^ 0x62707293u; + s[5] ^= s[13]; + s[15] += s[5]; + s[13] = s[13] * 0x229b940bu + s[15]; + s[4] ^= s[13] ^ 0x1b81e180u; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[14] += (s[7] | s[13]); + s[6] ^= s[14]; + s[1] += (s[6] | s[14]); + s[0] *= (s[1] | 1u); + s[13] ^= (s[0] & s[2]); + s[11] = (s[11] ^ s[13]) * 0x416d09a1u; + s[15] = s[15] * 0xe913f3ddu + s[11]; + s[1] -= s[15]; + s[15] ^= s[1]; + s[6] ^= s[15]; + s[8] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[8], 26u); + s[15] = s[15] * 0xc4f501e3u + s[2]; + s[10] = mh_rotl(s[10], 19u) + s[15]; + s[4] *= (s[10] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 1u); + s[15] ^= s[5] ^ 0x9b7a52afu; + s[3] *= (s[15] | 1u); + s[1] = (s[1] ^ s[3]) * 0x45c760cdu; + s[8] += s[1]; + s[5] = mh_rotl(s[5], 23u) + s[8]; + s[0] += (s[5] | s[2]); + s[14] ^= s[0] ^ 0xe21ab661u; + s[9] += s[14]; + s[2] *= (s[9] | 1u); + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[7] = mh_rotl(s[7] ^ s[1], 2u); + s[14] = mh_rotl(s[14] ^ s[7], 30u); + s[15] += s[14] + 0x25ec367cu; + s[1] += s[15]; + s[4] = mh_rotl(s[4], 30u) + s[1]; + s[6] += s[4] + 0x00a140beu; + s[11] ^= s[6]; + s[3] = mh_rotl(s[3] ^ s[11], 24u); + s[8] = (s[8] ^ s[3]) * 0xa4445dd5u; + s[11] ^= s[8]; + s[4] += s[11] + 0xdd82d9edu; + s[7] = mh_rotl(s[7], 20u) + s[4]; + s[10] = (s[10] ^ s[7]) * 0xbc2a9345u; + s[15] = s[15] * 0xe9d04645u + s[10]; + s[4] += s[15]; + s[0] += s[4]; + s[5] = mh_rotl(s[5] ^ s[0], 20u); + s[8] -= s[5]; + s[13] -= s[8]; + s[8] = s[8] * 0xdbaee3dfu + s[13]; + s[7] = s[7] * 0xa78437ddu + s[8]; + s[5] *= (s[7] | 1u); + s[11] = (s[11] ^ s[5]) * 0x7697be93u; + s[8] *= (s[11] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[10] = mh_rotl(s[10] ^ s[9], 4u); + s[4] += s[10] + 0xcb367e30u; + s[7] += (s[4] | s[1]); + s[8] = mh_rotl(s[8] ^ s[7], 1u); + s[9] = (s[9] ^ s[8]) * 0xebbaa385u; + s[8] += s[9]; + s[7] = mh_rotl(s[7] ^ s[8], 30u); + s[13] = mh_rotl(s[13] ^ s[7], 28u); + s[3] ^= s[13] ^ 0x0da68544u; + s[6] *= (s[3] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[6] = mh_rotl(s[6] ^ s[15], 17u); + s[3] ^= s[6]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[12] = s[12] * 0xc2ae0b9du + s[11]; + s[1] += s[12]; + s[12] += s[1]; + s[2] ^= s[12] ^ 0x7256c79fu; + s[10] = mh_rotl(s[10] ^ s[2], 22u); + s[4] += s[10]; + s[8] = mh_rotl(s[8] ^ s[4], 3u); + s[4] = (s[4] ^ s[8]) * 0x8220660bu; + s[3] -= s[4]; + s[1] ^= s[3]; + s[14] ^= (s[1] & s[4]); + s[5] += s[14]; + s[6] = mh_rotl(s[6], 6u) + s[5]; + s[12] = (s[12] ^ s[6]) * 0xdd90e2b3u; + s[5] = mh_rotl(s[5], 16u) + s[12]; + s[13] += s[5]; + s[2] -= s[13]; + s[5] = mh_rotl(s[5], 28u) + s[2]; + s[0] -= s[5]; + s[14] = (s[14] ^ s[0]) * 0xd9818695u; + s[3] = s[3] * 0x56cff173u + s[14]; + s[12] += s[3]; + s[7] ^= s[12]; + s[4] += s[7] + 0xc664354au; + s[10] ^= s[4]; + s[12] = mh_rotl(s[12] ^ s[10], 21u); + s[5] += (s[12] | s[10]); + s[13] ^= s[5]; + s[3] -= s[13]; + s[10] = (s[10] ^ s[3]) * 0x0f3ce629u; + s[2] += s[10]; + s[6] = mh_rotl(s[6], 27u) + s[2]; + s[3] = mh_rotl(s[3], 23u) + s[6]; + s[8] -= s[3]; + s[2] *= (s[8] | 1u); + s[5] ^= s[2] ^ 0x310625e1u; + s[8] -= s[5]; + s[0] += s[8]; + s[15] *= (s[0] | 1u); + s[6] = (s[6] ^ s[15]) * 0x427d27bbu; + s[11] += s[6] + 0x76730d6fu; + s[15] += s[11] + 0xdac6c08au; + s[7] = mh_rotl(s[7] ^ s[15], 13u); + s[14] += s[7] + 0x6911002du; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[8] = s[8] * 0x56b023efu + s[4]; + s[4] ^= s[8] ^ 0x9fd3970fu; + s[5] += s[4] + 0x6abd4154u; + s[7] += (s[5] | s[6]); + s[6] ^= s[7]; + s[10] += s[6]; + s[9] = (s[9] ^ s[10]) * 0xe4b1ea8bu; + s[6] ^= s[9]; + s[7] ^= s[6] ^ 0xe75c3c42u; + s[10] = (s[10] ^ s[7]) * 0xb59266bbu; + s[2] *= (s[10] | 1u); + s[8] ^= s[2]; + s[14] = (s[14] ^ s[8]) * 0xdbf4259fu; + s[2] = s[2] * 0x7009386du + s[14]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 25u); + s[2] ^= s[13] ^ 0x60dba7dau; + s[5] = mh_rotl(s[5] ^ s[2], 28u); + s[4] ^= s[5]; + s[11] += s[4] + 0xeb951dd9u; + s[4] ^= s[11]; + s[13] ^= s[4] ^ 0xebf6468au; + s[9] = (s[9] ^ s[13]) * 0xdd79814du; + s[3] = (s[3] ^ s[9]) * 0x8e5d0c8du; + s[4] = mh_rotl(s[4] ^ s[3], 11u); + s[6] ^= s[4]; + s[12] = (s[12] ^ s[6]) * 0x54bdc49fu; + s[2] ^= s[12]; + s[6] = mh_rotl(s[6], 21u) + s[2]; + s[3] = mh_rotl(s[3], 4u) + s[6]; + s[7] = mh_rotl(s[7], 1u) + s[3]; + s[8] += s[7]; + s[7] ^= s[8] ^ 0xea9b7589u; + s[14] = (s[14] ^ s[7]) * 0x97ae5521u; + s[4] += s[14]; + s[12] = (s[12] ^ s[4]) * 0x22320c0du; + s[11] ^= s[12] ^ 0x497dff74u; + s[7] ^= s[11]; + s[3] *= (s[7] | 1u); + s[13] = mh_rotl(s[13] ^ s[3], 19u); + s[5] ^= s[13]; + s[15] += (s[5] | s[1]); + s[5] ^= s[15]; + s[2] = s[2] * 0xbadcbfe5u + s[5]; + s[6] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[6], 9u); + s[6] += s[9] + 0xf8e24c5bu; + s[4] -= s[6]; + s[1] ^= s[4]; + s[13] -= s[1]; + s[6] ^= s[13]; + s[14] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[14], 15u); + s[0] = (s[0] ^ s[4]) * 0x5cf11fa1u; + s[3] = mh_rotl(s[3] ^ s[0], 9u); + s[15] *= (s[3] | 1u); + s[7] *= (s[15] | 1u); + s[8] += s[7] + 0x2e6f71e5u; + s[5] = mh_rotl(s[5], 26u) + s[8]; + s[7] ^= s[5]; + s[0] = (s[0] ^ s[7]) * 0x5ea96101u; + s[1] ^= s[0] ^ 0xd397e563u; + s[6] *= (s[1] | 1u); + s[10] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[10], 24u); + s[0] -= s[7]; + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] = s[12] * 0x34af385du + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[12] ^= s[4]; + s[7] -= s[12]; + s[6] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 19u); + s[0] = mh_rotl(s[0] ^ s[7], 11u); + s[5] -= s[0]; + s[11] ^= s[5]; + s[0] ^= s[11] ^ 0xbe1c3b74u; + s[5] += (s[0] | s[9]); + s[11] += (s[5] | s[4]); + s[15] += s[11]; + s[10] ^= s[15]; + s[12] = s[12] * 0x543326f5u + s[10]; + s[14] = s[14] * 0x91113863u + s[12]; + s[1] = (s[1] ^ s[14]) * 0xc15f4501u; + s[10] += s[1]; + s[9] += s[10]; + s[8] += s[9] + 0x7e4a0930u; + s[15] += s[8]; + s[5] += s[15]; + s[1] -= s[5]; + s[15] += s[1]; + s[6] = mh_rotl(s[6] ^ s[15], 22u); + s[2] ^= (s[6] & s[10]); + s[1] = (s[1] ^ s[2]) * 0xfa5dde9bu; + s[13] = mh_rotl(s[13] ^ s[1], 8u); + s[1] -= s[13]; + s[9] += s[1] + 0x3f1d7c19u; + s[2] *= (s[9] | 1u); + s[8] = (s[8] ^ s[2]) * 0xde05403bu; + s[9] += s[8]; + s[6] += s[9]; + s[13] = (s[13] ^ s[6]) * 0xcb53bdfdu; + s[14] *= (s[13] | 1u); + s[10] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 1u); + s[9] = s[9] * 0xc38dfca1u + s[13]; + s[15] = mh_rotl(s[15] ^ s[9], 24u); + s[2] *= (s[15] | 1u); + s[15] ^= s[2] ^ 0x4f0903bau; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[10] = (s[10] ^ s[2]) * 0xa4b3a383u; + s[6] *= (s[10] | 1u); + s[13] *= (s[6] | 1u); + s[1] *= (s[13] | 1u); + s[11] = (s[11] ^ s[1]) * 0xbbb47281u; + s[6] += s[11]; + s[12] += s[6]; + s[0] ^= s[12]; + s[12] -= s[0]; + s[4] += s[12]; + s[11] ^= s[4] ^ 0x4ae1d374u; + s[1] ^= s[11]; + s[6] ^= (s[1] & s[5]); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0xd088ac95u; + s[12] = (s[12] ^ s[6]) * 0xacf99fa9u; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[11] = mh_rotl(s[11], 21u) + s[14]; + s[2] ^= s[11] ^ 0x83eccd1eu; + s[15] ^= s[2]; + s[8] = s[8] * 0x51ffe091u + s[15]; + s[2] += (s[8] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 25u); + s[5] = mh_rotl(s[5] ^ s[13], 18u); + s[9] -= s[5]; + s[6] = (s[6] ^ s[9]) * 0xeb0ab863u; + s[10] ^= s[6] ^ 0xadb4a85eu; + s[11] += s[10]; + s[15] = mh_rotl(s[15], 25u) + s[11]; + s[8] ^= s[15] ^ 0x611f8ebbu; + s[4] += s[8] + 0x6c1de9f1u; + s[14] *= (s[4] | 1u); + s[3] *= (s[14] | 1u); + s[14] += (s[3] | s[8]); + s[10] ^= s[14]; + s[12] ^= s[10] ^ 0x1379b7f0u; + s[13] += s[12]; + s[6] -= s[13]; + s[5] += s[6]; + s[14] ^= s[5] ^ 0x86fda0bcu; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[14] += s[4] + 0xe3857cfau; + s[5] ^= s[14] ^ 0x983d6f15u; + s[2] *= (s[5] | 1u); + s[11] = (s[11] ^ s[2]) * 0x71d715abu; + s[15] += s[11] + 0x954d0d31u; + s[3] ^= (s[15] & s[13]); + s[0] = mh_rotl(s[0], 31u) + s[3]; + s[3] *= (s[0] | 1u); + s[12] = s[12] * 0x553df879u + s[3]; + s[14] = mh_rotl(s[14] ^ s[12], 27u); + s[7] = mh_rotl(s[7] ^ s[14], 17u); + s[0] += (s[7] | s[5]); + s[3] ^= s[0]; + s[5] ^= (s[3] & s[11]); + s[2] ^= s[5] ^ 0xdf79b0e2u; + s[6] = mh_rotl(s[6], 7u) + s[2]; + s[12] -= s[6]; + s[10] += s[12]; + s[11] ^= s[10] ^ 0xda8b8a64u; + s[0] ^= s[11]; + s[1] = (s[1] ^ s[0]) * 0xf8a8b0d1u; + s[4] = mh_rotl(s[4] ^ s[1], 3u); + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[7] = (s[7] ^ s[3]) * 0x411cdf35u; + s[6] += s[7]; + s[10] -= s[6]; + s[5] = mh_rotl(s[5], 16u) + s[10]; + s[4] += s[5]; + s[1] += s[4]; + s[0] ^= (s[1] & s[6]); + s[13] ^= s[0]; + s[9] = mh_rotl(s[9], 27u) + s[13]; + s[6] = mh_rotl(s[6], 3u) + s[9]; + s[1] += s[6] + 0xcea64d05u; + s[3] = s[3] * 0xeebb97adu + s[1]; + s[14] ^= s[3] ^ 0x892c8d98u; + s[11] ^= (s[14] & s[9]); + s[0] = (s[0] ^ s[11]) * 0xdff5cedfu; + s[14] -= s[0]; + s[6] -= s[14]; + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[11] += (s[3] | s[9]); + s[7] = mh_rotl(s[7] ^ s[11], 22u); + s[10] = mh_rotl(s[10], 2u) + s[7]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[1] -= s[4]; + s[0] += s[1] + 0x775d0372u; + s[13] *= (s[0] | 1u); + s[3] += s[13]; + s[4] += (s[3] | s[9]); + s[12] = (s[12] ^ s[4]) * 0x687c0365u; + s[13] = mh_rotl(s[13], 2u) + s[12]; + s[4] = (s[4] ^ s[13]) * 0x35a16ec5u; + s[9] ^= s[4]; + s[12] += s[9]; + s[14] -= s[12]; + s[5] *= (s[14] | 1u); + s[14] *= (s[5] | 1u); + s[13] += (s[14] | s[4]); + s[0] -= s[13]; + s[15] = s[15] * 0x621c0ea7u + s[0]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[15] = (s[15] ^ s[6]) * 0x05d14bc7u; + s[11] -= s[15]; + s[9] += (s[11] | s[13]); + s[4] += s[9]; + s[12] *= (s[4] | 1u); + s[11] ^= s[12]; + s[7] = mh_rotl(s[7], 28u) + s[11]; + s[5] = mh_rotl(s[5] ^ s[7], 12u); + s[8] = mh_rotl(s[8] ^ s[5], 17u); + s[10] ^= s[8]; + s[13] ^= s[10]; + s[7] *= (s[13] | 1u); + s[8] += s[7]; + s[15] ^= s[8]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[0] = (s[0] ^ s[4]) * 0xd8e75b75u; + s[8] -= s[0]; + s[11] += s[8]; + s[13] -= s[11]; + s[9] ^= s[13]; + s[12] = (s[12] ^ s[9]) * 0x3899fbc3u; + s[0] = mh_rotl(s[0], 17u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 26u); + s[1] = mh_rotl(s[1] ^ s[4], 23u); + s[14] = mh_rotl(s[14] ^ s[1], 25u); + s[12] = mh_rotl(s[12] ^ s[14], 27u); + s[11] -= s[12]; + s[7] ^= s[11]; + s[11] -= s[7]; + s[15] *= (s[11] | 1u); + s[7] += (s[15] | s[11]); + s[3] ^= s[7] ^ 0xfd1ba1b5u; + s[13] += s[3]; + s[14] += s[13] + 0x405242e4u; + s[10] = (s[10] ^ s[14]) * 0xeced21d1u; + s[0] -= s[10]; + s[1] = (s[1] ^ s[0]) * 0xcb862135u; + s[5] += s[1]; + s[2] -= s[5]; + s[15] = s[15] * 0x499907b3u + s[2]; + s[11] += (s[15] | s[8]); + s[14] ^= s[11]; + s[7] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[7], 27u); + s[10] += s[12] + 0x8f39e74bu; + s[5] = (s[5] ^ s[10]) * 0x2440407du; + s[1] += s[5]; + s[12] += s[1]; + s[4] *= (s[12] | 1u); + s[1] += s[4] + 0xcdf92480u; + s[15] ^= s[1]; + s[4] += s[15]; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[4] = mh_rotl(s[4], 6u) + s[1]; + s[0] *= (s[4] | 1u); + s[1] ^= s[0]; + s[7] = s[7] * 0xcac7e2ddu + s[1]; + s[11] += s[7]; + s[12] ^= s[11]; + s[15] = s[15] * 0x413393afu + s[12]; + s[8] = (s[8] ^ s[15]) * 0x25fe3939u; + s[14] *= (s[8] | 1u); + s[13] = s[13] * 0x98224c21u + s[14]; + s[8] -= s[13]; + s[2] ^= s[8] ^ 0xdc7b1f4au; + s[1] += s[2]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[8] -= s[10]; + s[11] *= (s[8] | 1u); + s[13] *= (s[11] | 1u); + s[14] += (s[13] | s[5]); + s[12] += (s[14] | s[10]); + s[10] += s[12] + 0xb0848c0bu; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 20u); + s[13] ^= s[4]; + s[7] *= (s[13] | 1u); + s[13] = mh_rotl(s[13] ^ s[7], 21u); + s[14] = mh_rotl(s[14] ^ s[13], 26u); + s[12] ^= s[14]; + s[8] += s[12]; + s[0] += s[8]; + s[12] = s[12] * 0xd28af0afu + s[0]; + s[8] += s[12] + 0xd77f1cfcu; + s[9] *= (s[8] | 1u); + s[14] *= (s[9] | 1u); + s[3] -= s[14]; + s[2] += s[3]; + s[12] ^= s[2]; + s[8] -= s[12]; + s[5] += s[8]; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[2] ^= s[15]; + s[5] -= s[2]; + s[8] ^= s[5]; + s[1] += s[8]; + s[0] ^= s[1]; + s[12] += s[0]; + s[7] ^= (s[12] & s[3]); + s[13] += (s[7] | s[0]); + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[2] = (s[2] ^ s[12]) * 0xfd12ecd1u; + s[15] *= (s[2] | 1u); + s[0] ^= s[15]; + s[2] = mh_rotl(s[2], 27u) + s[0]; + s[6] += s[2]; + s[10] += s[6]; + s[0] ^= s[10]; + s[7] = mh_rotl(s[7], 29u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[7], 19u); + s[3] = (s[3] ^ s[9]) * 0xff04d05fu; + s[13] += (s[3] | s[4]); + s[15] ^= s[13]; + s[7] += s[15]; + s[14] ^= s[7]; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[3] += (s[4] | s[6]); + s[12] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 30u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[8] += s[1] + 0x0467b529u; + s[9] += s[8]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[7] ^= (s[15] & s[8]); + s[8] = (s[8] ^ s[7]) * 0x278c5dfdu; + s[3] ^= s[8] ^ 0xbc598dedu; + s[1] = mh_rotl(s[1] ^ s[3], 9u); + s[4] += s[1]; + s[3] += (s[4] | s[13]); + s[10] = (s[10] ^ s[3]) * 0xcae4be05u; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[4] ^= s[12]; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[6] = mh_rotl(s[6] ^ s[7], 9u); + s[8] = (s[8] ^ s[6]) * 0xd9f36acdu; + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[11] ^= (s[7] & s[14]); + s[14] = mh_rotl(s[14], 3u) + s[11]; + s[8] = s[8] * 0x0ae9038fu + s[14]; + s[3] *= (s[8] | 1u); + s[13] -= s[3]; + s[5] = s[5] * 0x70529de3u + s[13]; + s[3] ^= (s[5] & s[6]); + s[14] -= s[3]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[13] += (s[0] | s[5]); + s[2] *= (s[13] | 1u); + s[4] -= s[2]; + s[1] = mh_rotl(s[1], 7u) + s[4]; + s[10] += s[1]; + s[15] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[15], 24u); + s[15] ^= s[11]; + s[10] *= (s[15] | 1u); + s[3] ^= s[10] ^ 0xcb85082cu; + s[10] ^= s[3] ^ 0xf9bf9766u; + s[11] -= s[10]; + s[3] = (s[3] ^ s[11]) * 0x87f2ce8bu; + s[8] = s[8] * 0x0ea0fcc7u + s[3]; + s[1] = mh_rotl(s[1], 9u) + s[8]; + s[10] -= s[1]; + s[6] *= (s[10] | 1u); + s[11] = s[11] * 0x0c531b4bu + s[6]; + s[8] += s[11]; + s[15] -= s[8]; + s[3] *= (s[15] | 1u); + s[11] = (s[11] ^ s[3]) * 0xad08649fu; + s[9] ^= s[11]; + s[14] -= s[9]; + s[12] += s[14]; + s[9] += s[12] + 0x232cf99eu; + s[7] ^= s[9]; + s[15] ^= (s[7] & s[8]); + s[2] += s[15] + 0x32beef7bu; + s[11] = mh_rotl(s[11], 8u) + s[2]; + s[14] -= s[11]; + s[10] += (s[14] | s[12]); + s[12] = s[12] * 0xa6ec34d5u + s[10]; + s[5] = mh_rotl(s[5] ^ s[12], 7u); + s[8] = mh_rotl(s[8], 25u) + s[5]; + s[10] ^= s[8] ^ 0xefb5c226u; + s[3] = mh_rotl(s[3] ^ s[10], 16u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[6] ^= s[4]; + s[14] = mh_rotl(s[14], 28u) + s[6]; + s[5] = mh_rotl(s[5], 5u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[5], 4u); + s[5] += s[3] + 0xe3dab3fbu; + s[15] = mh_rotl(s[15], 3u) + s[5]; + s[14] += (s[15] | s[9]); + s[0] += (s[14] | s[2]); + s[1] += (s[0] | s[15]); + s[6] *= (s[1] | 1u); + s[13] += (s[6] | s[14]); +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_6(uint32_t* s) { + s[5] = mh_rotl(s[5], 3u) + s[0]; + s[2] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[2], 11u); + s[11] ^= s[9] ^ 0x39e32e1du; + s[3] += s[11]; + s[1] = mh_rotl(s[1] ^ s[3], 22u); + s[5] ^= s[1]; + s[8] = mh_rotl(s[8], 4u) + s[5]; + s[3] = mh_rotl(s[3] ^ s[8], 12u); + s[4] += s[3]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[3] += s[2]; + s[8] -= s[3]; + s[5] -= s[8]; + s[1] *= (s[5] | 1u); + s[9] ^= s[1] ^ 0xd81d55beu; + s[7] += s[9]; + s[3] += s[7]; + s[4] = mh_rotl(s[4] ^ s[3], 15u); + s[5] -= s[4]; + s[0] *= (s[5] | 1u); + s[3] = (s[3] ^ s[0]) * 0x4a19e371u; + s[7] = mh_rotl(s[7] ^ s[3], 10u); + s[11] += s[7]; + s[8] = s[8] * 0x259e0d2fu + s[11]; + s[3] += s[8] + 0xac463d29u; + s[9] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[9], 8u); + s[6] *= (s[10] | 1u); + s[1] ^= s[6] ^ 0xb275cab7u; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[10] *= (s[12] | 1u); + s[7] -= s[10]; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[3] += s[4] + 0xc15298f3u; + s[14] += s[3]; + s[0] += s[14] + 0xb147fc8bu; + s[8] = (s[8] ^ s[0]) * 0x2016760du; + s[6] = (s[6] ^ s[8]) * 0x54e0697fu; + s[1] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[1], 11u); + s[2] += (s[3] | s[13]); + s[8] ^= s[2]; + s[5] += s[8]; + s[8] ^= (s[5] & s[4]); + s[13] *= (s[8] | 1u); + s[11] -= s[13]; + s[5] ^= s[11]; + s[13] = mh_rotl(s[13], 28u) + s[5]; + s[14] *= (s[13] | 1u); + s[11] ^= s[14] ^ 0x301ae49du; + s[13] -= s[11]; + s[5] += s[13]; + s[9] ^= s[5]; + s[2] += s[9]; + s[5] ^= s[2]; + s[6] *= (s[5] | 1u); + s[2] += s[6]; + s[10] -= s[2]; + s[6] = s[6] * 0x7f506861u + s[10]; + s[12] ^= s[6] ^ 0xda5f5b6du; + s[6] = s[6] * 0x38d5001du + s[12]; + s[1] ^= s[6] ^ 0xc8f1c1dcu; + s[9] += s[1]; + s[3] = (s[3] ^ s[9]) * 0x8e4a88a5u; + s[7] = mh_rotl(s[7], 18u) + s[3]; + s[9] ^= s[7] ^ 0xbab40f93u; + s[13] += s[9]; + s[6] += s[13]; + s[11] ^= s[6]; + s[3] ^= s[11]; + s[10] *= (s[3] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 4u); + s[14] += s[6] + 0x0249afdau; + s[1] = s[1] * 0x86ebf639u + s[14]; + s[6] = mh_rotl(s[6], 25u) + s[1]; + s[10] *= (s[6] | 1u); + s[6] ^= s[10]; + s[3] -= s[6]; + s[1] ^= s[3] ^ 0xd9ca3a4fu; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[9] ^= s[5]; + s[5] = s[5] * 0x1457845du + s[9]; + s[11] = mh_rotl(s[11], 10u) + s[5]; + s[2] ^= (s[11] & s[3]); + s[15] *= (s[2] | 1u); + s[4] ^= s[15]; + s[7] += s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 1u); + s[0] = (s[0] ^ s[15]) * 0xb010e4d3u; + s[4] = mh_rotl(s[4] ^ s[0], 20u); + s[7] ^= (s[4] & s[3]); + s[2] ^= s[7]; + s[3] ^= s[2]; + s[11] ^= s[3]; + s[1] ^= s[11] ^ 0x35463538u; + s[7] ^= (s[1] & s[11]); + s[13] += s[7]; + s[1] = (s[1] ^ s[13]) * 0xc1e69efbu; + s[5] = mh_rotl(s[5], 16u) + s[1]; + s[1] = s[1] * 0x2e9b0e05u + s[5]; + s[15] -= s[1]; + s[12] += s[15]; + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[9] ^= s[7] ^ 0x990eced1u; + s[13] += s[9]; + s[8] += s[13]; + s[6] += s[8]; + s[14] ^= s[6] ^ 0xc88f98bdu; + s[1] += s[14]; + s[13] *= (s[1] | 1u); + s[5] ^= s[13]; + s[7] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 21u) + s[7]; + s[12] = mh_rotl(s[12], 1u) + s[1]; + s[7] *= (s[12] | 1u); + s[9] ^= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[9]; + s[4] ^= s[6] ^ 0x74363532u; + s[2] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[2], 25u); + s[0] *= (s[9] | 1u); + s[12] ^= s[0] ^ 0x0441459fu; + s[13] ^= s[12] ^ 0x662ed979u; + s[3] -= s[13]; + s[4] ^= s[3] ^ 0x1b2d8a07u; + s[8] = s[8] * 0xf7eec905u + s[4]; + s[14] = mh_rotl(s[14] ^ s[8], 27u); + s[0] ^= s[14]; + s[1] = mh_rotl(s[1], 30u) + s[0]; + s[15] += s[1] + 0xe1b48510u; + s[9] *= (s[15] | 1u); + s[4] = s[4] * 0x1d3d76ddu + s[9]; + s[11] *= (s[4] | 1u); + s[4] -= s[11]; + s[10] += s[4]; + s[15] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[15], 29u); + s[15] -= s[14]; + s[7] += s[15]; + s[0] = mh_rotl(s[0], 15u) + s[7]; + s[1] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[1], 13u); + s[10] += s[11]; + s[3] = mh_rotl(s[3] ^ s[10], 27u); + s[8] = mh_rotl(s[8], 31u) + s[3]; + s[7] += s[8]; + s[8] -= s[7]; + s[10] *= (s[8] | 1u); + s[12] -= s[10]; + s[0] = s[0] * 0x5817b1bbu + s[12]; + s[4] -= s[0]; + s[12] += s[4]; + s[15] -= s[12]; + s[0] = mh_rotl(s[0], 27u) + s[15]; + s[4] *= (s[0] | 1u); + s[5] *= (s[4] | 1u); + s[13] *= (s[5] | 1u); + s[7] *= (s[13] | 1u); + s[3] *= (s[7] | 1u); + s[6] += s[3]; + s[7] ^= s[6] ^ 0x229579c7u; + s[11] += s[7] + 0x00a25704u; + s[9] -= s[11]; + s[12] = mh_rotl(s[12], 24u) + s[9]; + s[9] ^= s[12]; + s[10] ^= (s[9] & s[1]); + s[0] = (s[0] ^ s[10]) * 0x2005a37fu; + s[14] ^= s[0] ^ 0x1c7da2c4u; + s[10] *= (s[14] | 1u); + s[12] += s[10]; + s[1] = mh_rotl(s[1] ^ s[12], 24u); + s[4] ^= (s[1] & s[14]); + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[10] = s[10] * 0xeaf112ebu + s[15]; + s[8] ^= (s[10] & s[15]); + s[3] *= (s[8] | 1u); + s[5] += (s[3] | s[8]); + s[6] += s[5] + 0xe4e3f161u; + s[9] += s[6]; + s[11] = mh_rotl(s[11] ^ s[9], 16u); + s[2] = mh_rotl(s[2] ^ s[11], 4u); + s[11] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[0] ^= s[3]; + s[11] ^= s[0]; + s[6] = (s[6] ^ s[11]) * 0x12a469a3u; + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[1]); + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[3] ^= s[15]; + s[11] -= s[3]; + s[9] = (s[9] ^ s[11]) * 0x344ce419u; + s[4] ^= s[9]; + s[10] ^= (s[4] & s[5]); + s[1] += s[10] + 0xea384c3cu; + s[10] += s[1]; + s[2] ^= s[10] ^ 0x1d75445cu; + s[8] += s[2]; + s[13] += s[8] + 0xbfc1d457u; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[14] -= s[3]; + s[0] ^= s[14] ^ 0x06e7726cu; + s[5] ^= s[0] ^ 0x51f1354du; + s[8] += (s[5] | s[11]); + s[11] += s[8]; + s[14] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[14], 13u); + s[11] -= s[13]; + s[0] += s[11]; + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[4] = (s[4] ^ s[3]) * 0x5eb788f9u; + s[0] += s[4]; + s[4] = mh_rotl(s[4], 31u) + s[0]; + s[8] ^= s[4]; + s[11] ^= s[8] ^ 0xdd96e051u; + s[3] -= s[11]; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[6] ^= s[4]; + s[15] += s[6] + 0x4f556eefu; + s[2] ^= s[15] ^ 0x296a5968u; + s[1] ^= s[2] ^ 0xc46f139au; + s[15] = (s[15] ^ s[1]) * 0x50702ea7u; + s[8] += s[15]; + s[1] = (s[1] ^ s[8]) * 0x6bafa739u; + s[0] += s[1]; + s[2] += (s[0] | s[1]); + s[1] = s[1] * 0x1f7250afu + s[2]; + s[6] ^= s[1] ^ 0x898b2247u; + s[1] += s[6] + 0xa7ddf08eu; + s[2] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[2], 11u); + s[1] = (s[1] ^ s[6]) * 0xf13b1879u; + s[9] += s[1]; + s[11] += s[9]; + s[3] += (s[11] | s[13]); + s[12] -= s[3]; + s[6] ^= s[12] ^ 0x5c3b531eu; + s[5] *= (s[6] | 1u); + s[14] ^= s[5]; + s[8] = (s[8] ^ s[14]) * 0x93599b23u; + s[13] ^= s[8]; + s[0] ^= s[13]; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[11] = (s[11] ^ s[7]) * 0x97c86fe1u; + s[4] ^= s[11]; + s[12] += (s[4] | s[8]); + s[14] ^= s[12] ^ 0x47aef842u; + s[4] += s[14]; + s[14] ^= s[4] ^ 0xef1987b2u; + s[10] -= s[14]; + s[11] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 17u); + s[14] += s[12]; + s[6] = mh_rotl(s[6], 15u) + s[14]; + s[10] += (s[6] | s[1]); + s[4] += s[10]; + s[10] ^= (s[4] & s[12]); + s[2] += s[10]; + s[14] -= s[2]; + s[10] ^= (s[14] & s[13]); + s[11] ^= s[10]; + s[15] ^= s[11]; + s[5] = mh_rotl(s[5] ^ s[15], 27u); + s[6] -= s[5]; + s[15] += s[6]; + s[8] ^= (s[15] & s[9]); + s[9] = (s[9] ^ s[8]) * 0x483ef9cfu; + s[13] ^= s[9]; + s[14] += s[13]; + s[5] += s[14] + 0x1978b9bau; + s[12] ^= s[5] ^ 0xc6a87e37u; + s[11] ^= s[12]; + s[0] += s[11] + 0x25e405bfu; + s[9] += s[0]; + s[12] += s[9]; + s[14] ^= (s[12] & s[6]); + s[0] -= s[14]; + s[7] = mh_rotl(s[7] ^ s[0], 16u); + s[11] ^= s[7]; + s[6] *= (s[11] | 1u); + s[10] = (s[10] ^ s[6]) * 0x365e6b61u; + s[7] ^= (s[10] & s[6]); + s[4] += s[7] + 0x88f34310u; + s[0] += s[4]; + s[13] *= (s[0] | 1u); + s[8] ^= s[13]; + s[2] += s[8]; + s[10] += s[2]; + s[3] += s[10]; + s[0] += s[3]; + s[9] = (s[9] ^ s[0]) * 0xc6ec1ff1u; + s[10] += s[9]; + s[13] ^= (s[10] & s[6]); + s[2] = (s[2] ^ s[13]) * 0xb02a7defu; + s[1] ^= (s[2] & s[6]); + s[8] += s[1]; + s[6] *= (s[8] | 1u); + s[0] = s[0] * 0xdbb96cf3u + s[6]; + s[6] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[4] ^= s[11]; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[6] = (s[6] ^ s[2]) * 0x72c49157u; + s[14] -= s[6]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[8] ^= s[5] ^ 0x1de584feu; + s[11] = mh_rotl(s[11] ^ s[8], 19u); + s[10] *= (s[11] | 1u); + s[12] += s[10]; + s[14] = (s[14] ^ s[12]) * 0x9befbf23u; + s[2] ^= s[14] ^ 0x958a58deu; + s[4] ^= s[2] ^ 0x255a3390u; + s[5] -= s[4]; + s[9] += s[5]; + s[11] += s[9]; + s[13] += (s[11] | s[15]); + s[4] += s[13] + 0x7f925d13u; + s[12] = mh_rotl(s[12], 20u) + s[4]; + s[13] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[13], 30u); + s[13] -= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[15] -= s[10]; + s[6] ^= s[15]; + s[13] += (s[6] | s[4]); + s[14] ^= s[13] ^ 0x935ed5ffu; + s[2] = mh_rotl(s[2] ^ s[14], 11u); + s[4] = mh_rotl(s[4], 23u) + s[2]; + s[10] += s[4] + 0x602f3d0cu; + s[4] += s[10]; + s[6] ^= (s[4] & s[2]); + s[12] *= (s[6] | 1u); + s[11] ^= s[12]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[9] = (s[9] ^ s[5]) * 0xf3832b37u; + s[15] += (s[9] | s[8]); + s[10] += s[15] + 0xb02d9997u; + s[13] = mh_rotl(s[13] ^ s[10], 15u); + s[9] += s[13] + 0xcf0e861au; + s[13] = mh_rotl(s[13] ^ s[9], 7u); + s[1] *= (s[13] | 1u); + s[0] *= (s[1] | 1u); + s[11] += s[0] + 0x60d0848au; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[1] ^= s[15] ^ 0x7a0f3dafu; + s[9] *= (s[1] | 1u); + s[12] = mh_rotl(s[12], 10u) + s[9]; + s[9] *= (s[12] | 1u); + s[5] -= s[9]; + s[0] ^= s[5]; + s[4] += s[0]; + s[3] = mh_rotl(s[3] ^ s[4], 14u); + s[8] = (s[8] ^ s[3]) * 0x24a33cefu; + s[7] = mh_rotl(s[7], 26u) + s[8]; + s[0] = mh_rotl(s[0] ^ s[7], 5u); + s[13] ^= s[0]; + s[0] ^= s[13]; + s[9] += s[0]; + s[1] += s[9] + 0xceba1d99u; + s[6] += (s[1] | s[0]); + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[2]); + s[2] -= s[0]; + s[9] ^= s[2]; + s[0] -= s[9]; + s[10] += s[0] + 0x912934d8u; + s[14] += s[10]; + s[5] ^= s[14]; + s[8] += s[5] + 0x9b41cf1du; + s[10] ^= s[8] ^ 0x783c5b76u; + s[2] -= s[10]; + s[1] = (s[1] ^ s[2]) * 0x0f56c5b9u; + s[14] ^= s[1] ^ 0x25f12e76u; + s[13] = mh_rotl(s[13], 6u) + s[14]; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[6] = mh_rotl(s[6], 22u) + s[2]; + s[4] += (s[6] | s[9]); + s[14] ^= s[4]; + s[2] -= s[14]; + s[3] ^= s[2]; + s[9] ^= s[3]; + s[6] *= (s[9] | 1u); + s[2] ^= s[6]; + s[12] += s[2]; + s[3] ^= s[12]; + s[10] = mh_rotl(s[10], 25u) + s[3]; + s[1] = mh_rotl(s[1] ^ s[10], 19u); + s[14] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[14], 25u); + s[4] = mh_rotl(s[4], 12u) + s[12]; + s[5] *= (s[4] | 1u); + s[0] ^= s[5]; + s[11] ^= (s[0] & s[8]); + s[14] ^= s[11]; + s[4] = s[4] * 0x7b3dacd1u + s[14]; + s[15] = (s[15] ^ s[4]) * 0x391f4413u; + s[0] -= s[15]; + s[11] = s[11] * 0xe57f1625u + s[0]; + s[2] -= s[11]; + s[3] -= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[3]; + s[7] -= s[11]; + s[9] -= s[7]; + s[5] = mh_rotl(s[5] ^ s[9], 25u); + s[13] ^= s[5] ^ 0x99379160u; + s[7] ^= s[13]; + s[11] = mh_rotl(s[11] ^ s[7], 6u); + s[14] ^= s[11]; + s[10] += s[14]; + s[14] ^= s[10]; + s[8] = mh_rotl(s[8] ^ s[14], 13u); + s[0] += s[8]; + s[13] += (s[0] | s[11]); + s[1] = s[1] * 0xef009353u + s[13]; + s[2] += (s[1] | s[8]); + s[0] *= (s[2] | 1u); + s[14] += s[0]; + s[1] ^= s[14]; + s[8] *= (s[1] | 1u); + s[14] += (s[8] | s[4]); + s[11] *= (s[14] | 1u); + s[15] = mh_rotl(s[15] ^ s[11], 14u); + s[4] = mh_rotl(s[4] ^ s[15], 24u); + s[8] += s[4]; + s[5] += (s[8] | s[10]); + s[2] += s[5]; + s[13] = mh_rotl(s[13] ^ s[2], 22u); + s[8] -= s[13]; + s[3] += s[8]; + s[10] += (s[3] | s[5]); + s[13] ^= s[10]; + s[0] += (s[13] | s[5]); + s[8] += s[0]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[7] = (s[7] ^ s[14]) * 0xe87bd0f5u; + s[1] ^= s[7]; + s[12] *= (s[1] | 1u); + s[9] -= s[12]; + s[8] = mh_rotl(s[8], 8u) + s[9]; + s[7] += s[8]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[6] ^= s[11]; + s[2] += (s[6] | s[3]); + s[6] = (s[6] ^ s[2]) * 0xea6f06c5u; + s[9] = s[9] * 0xb0813793u + s[6]; + s[5] = mh_rotl(s[5], 27u) + s[9]; + s[12] = (s[12] ^ s[5]) * 0x9522a8cbu; + s[11] += (s[12] | s[1]); + s[13] ^= s[11]; + s[4] *= (s[13] | 1u); + s[9] += s[4]; + s[13] ^= s[9]; + s[15] -= s[13]; + s[10] ^= s[15]; + s[8] -= s[10]; + s[11] ^= s[8]; + s[15] = mh_rotl(s[15], 15u) + s[11]; + s[5] ^= s[15]; + s[10] -= s[5]; + s[0] = s[0] * 0x84635df9u + s[10]; + s[8] += s[0]; + s[9] += s[8]; + s[15] = s[15] * 0x55198e97u + s[9]; + s[4] -= s[15]; + s[8] = mh_rotl(s[8], 5u) + s[4]; + s[11] -= s[8]; + s[13] = (s[13] ^ s[11]) * 0x15b1b0a5u; + s[11] *= (s[13] | 1u); + s[10] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[10], 22u); + s[7] += s[12] + 0x8aac82cau; + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[10] = mh_rotl(s[10] ^ s[11], 16u); + s[13] = s[13] * 0xc6a07e99u + s[10]; + s[12] *= (s[13] | 1u); + s[4] *= (s[12] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[4] = mh_rotl(s[4], 2u) + s[2]; + s[9] = mh_rotl(s[9] ^ s[4], 11u); + s[12] ^= s[9]; + s[2] += (s[12] | s[13]); + s[7] = mh_rotl(s[7], 5u) + s[2]; + s[15] += (s[7] | s[13]); + s[6] = mh_rotl(s[6], 5u) + s[15]; + s[1] -= s[6]; + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0xf187f908u; + s[12] -= s[2]; + s[9] += s[12] + 0x1a02f1acu; + s[0] ^= s[9]; + s[5] ^= s[0]; + s[3] = mh_rotl(s[3], 27u) + s[5]; + s[2] += s[3]; + s[1] += s[2]; + s[14] ^= s[1]; + s[1] += s[14]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[0] += (s[9] | s[6]); + s[6] ^= s[0] ^ 0x69d64d91u; + s[9] ^= (s[6] & s[11]); + s[4] = mh_rotl(s[4], 9u) + s[9]; + s[7] -= s[4]; + s[5] += s[7] + 0xefa00412u; + s[11] *= (s[5] | 1u); + s[0] += s[11] + 0xb0b34a8fu; + s[3] -= s[0]; + s[6] += s[3]; + s[12] = mh_rotl(s[12], 26u) + s[6]; + s[14] *= (s[12] | 1u); + s[9] -= s[14]; + s[6] += s[9]; + s[13] ^= s[6]; + s[1] += s[13]; + s[8] += s[1] + 0x1a6451adu; + s[3] ^= (s[8] & s[9]); + s[13] ^= s[3]; + s[2] ^= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 28u); + s[8] += s[6]; + s[10] ^= s[8] ^ 0x4b68b070u; + s[14] += s[10] + 0x3e959795u; + s[9] += s[14] + 0x7e7f05f4u; + s[14] *= (s[9] | 1u); + s[8] ^= s[14]; + s[11] *= (s[8] | 1u); + s[4] -= s[11]; + s[2] += s[4]; + s[6] += s[2]; + s[2] += s[6]; + s[8] *= (s[2] | 1u); + s[4] += (s[8] | s[0]); + s[13] -= s[4]; + s[0] -= s[13]; + s[5] ^= s[0] ^ 0xcdcd2654u; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[9] = (s[9] ^ s[2]) * 0x512a14b1u; + s[8] = (s[8] ^ s[9]) * 0xe54b3cc1u; + s[11] += (s[8] | s[13]); + s[15] ^= s[11] ^ 0x0823130du; + s[11] ^= s[15]; + s[3] ^= (s[11] & s[2]); + s[9] = mh_rotl(s[9] ^ s[3], 7u); + s[2] = (s[2] ^ s[9]) * 0x583f7895u; + s[15] ^= s[2] ^ 0x4a0f9347u; + s[9] += s[15]; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[2] = (s[2] ^ s[9]) * 0x071a75e5u; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 22u); + s[3] ^= s[0] ^ 0xa770c1f5u; + s[10] = mh_rotl(s[10] ^ s[3], 4u); + s[13] += s[10] + 0xeaf6caa2u; + s[12] += (s[13] | s[5]); + s[3] -= s[12]; + s[9] -= s[3]; + s[3] += s[9]; + s[15] = (s[15] ^ s[3]) * 0x8c66add5u; + s[0] -= s[15]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[3] += s[15] + 0x4fe53ed8u; + s[0] += s[3] + 0xb80a3204u; + s[12] += (s[0] | s[14]); + s[10] += s[12]; + s[9] *= (s[10] | 1u); + s[3] += s[9]; + s[0] += s[3]; + s[14] += (s[0] | s[1]); + s[4] *= (s[14] | 1u); + s[6] -= s[4]; + s[5] -= s[6]; + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[4]; + s[9] ^= s[5] ^ 0xda8f6abau; + s[10] ^= s[9]; + s[8] ^= (s[10] & s[13]); + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[1] ^= s[10]; + s[15] = (s[15] ^ s[1]) * 0x1fd82855u; + s[2] ^= s[15]; + s[4] -= s[2]; + s[2] *= (s[4] | 1u); + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[3] ^= s[8]; + s[13] *= (s[3] | 1u); + s[5] ^= s[13]; + s[7] -= s[5]; + s[3] += s[7]; + s[1] += s[3]; + s[14] *= (s[1] | 1u); + s[8] = (s[8] ^ s[14]) * 0x14b291ebu; + s[12] = mh_rotl(s[12] ^ s[8], 24u); + s[5] -= s[12]; + s[3] *= (s[5] | 1u); + s[4] += s[3] + 0x2e4c7228u; + s[11] = mh_rotl(s[11] ^ s[4], 9u); + s[5] = mh_rotl(s[5] ^ s[11], 21u); + s[4] += s[5] + 0xcec3470du; + s[14] += s[4]; + s[5] = (s[5] ^ s[14]) * 0xd3b1d179u; + s[7] = (s[7] ^ s[5]) * 0x0dfd9191u; + s[1] ^= s[7]; + s[12] += s[1] + 0x05dc87fdu; + s[11] -= s[12]; + s[7] ^= (s[11] & s[10]); + s[10] *= (s[7] | 1u); + s[8] = mh_rotl(s[8], 22u) + s[10]; + s[11] ^= s[8]; + s[10] *= (s[11] | 1u); + s[0] -= s[10]; + s[7] += s[0] + 0xbab4bd7fu; + s[0] = mh_rotl(s[0], 13u) + s[7]; + s[15] = (s[15] ^ s[0]) * 0x1a239ff7u; + s[3] = mh_rotl(s[3] ^ s[15], 24u); + s[1] = mh_rotl(s[1], 25u) + s[3]; + s[5] = mh_rotl(s[5], 23u) + s[1]; + s[4] = (s[4] ^ s[5]) * 0x114ab605u; + s[9] += s[4]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[0] -= s[5]; + s[4] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[4], 14u); + s[14] *= (s[15] | 1u); + s[10] = mh_rotl(s[10] ^ s[14], 8u); + s[3] = mh_rotl(s[3] ^ s[10], 17u); + s[6] += s[3] + 0xb216edc1u; + s[9] ^= s[6]; + s[7] += s[9]; + s[9] = mh_rotl(s[9] ^ s[7], 27u); + s[8] += (s[9] | s[12]); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[2] += (s[7] | s[11]); + s[3] = (s[3] ^ s[2]) * 0x74b003d9u; + s[1] = mh_rotl(s[1], 12u) + s[3]; + s[0] = (s[0] ^ s[1]) * 0x6e4a2ddbu; + s[7] *= (s[0] | 1u); + s[4] += s[7]; + s[13] += s[4]; + s[10] = mh_rotl(s[10] ^ s[13], 23u); + s[9] += s[10]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[13], 26u); + s[13] = mh_rotl(s[13] ^ s[15], 26u); + s[2] -= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[7] ^= s[6] ^ 0x040fda34u; + s[12] ^= s[7] ^ 0x7517e01cu; + s[9] = (s[9] ^ s[12]) * 0x65c2f9e3u; + s[2] *= (s[9] | 1u); + s[8] += (s[2] | s[15]); + s[10] = mh_rotl(s[10] ^ s[8], 25u); + s[7] = mh_rotl(s[7] ^ s[10], 18u); + s[0] ^= s[7]; + s[13] -= s[0]; + s[5] += s[13] + 0x91f36456u; + s[13] ^= s[5] ^ 0xb0249e62u; + s[9] ^= s[13]; + s[10] -= s[9]; + s[9] = s[9] * 0x3349e8abu + s[10]; + s[15] += s[9]; + s[1] = mh_rotl(s[1] ^ s[15], 18u); + s[3] -= s[1]; + s[6] ^= s[3]; + s[2] = (s[2] ^ s[6]) * 0x56121511u; + s[14] = mh_rotl(s[14], 12u) + s[2]; + s[12] ^= s[14] ^ 0x10c3c286u; + s[5] += s[12]; + s[7] += (s[5] | s[15]); + s[4] = mh_rotl(s[4] ^ s[7], 13u); + s[7] ^= s[4]; + s[3] += (s[7] | s[9]); + s[15] -= s[3]; + s[3] ^= s[15]; + s[12] = mh_rotl(s[12] ^ s[3], 28u); + s[14] ^= s[12]; + s[6] ^= (s[14] & s[3]); + s[5] -= s[6]; + s[11] ^= s[5] ^ 0x039a9ae9u; + s[8] = (s[8] ^ s[11]) * 0x0cf0a8dbu; + s[7] += s[8]; + s[2] ^= (s[7] & s[15]); + s[4] += s[2]; + s[15] *= (s[4] | 1u); + s[3] ^= (s[15] & s[0]); + s[2] += (s[3] | s[14]); + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[2] ^= s[5] ^ 0x6a1af17au; + s[12] = s[12] * 0x4dfc5c59u + s[2]; + s[7] = mh_rotl(s[7] ^ s[12], 4u); + s[1] ^= s[7]; + s[13] += s[1]; + s[3] ^= (s[13] & s[10]); + s[8] += s[3]; + s[4] += s[8]; + s[3] ^= s[4]; + s[9] = mh_rotl(s[9], 30u) + s[3]; + s[5] += s[9] + 0x07e78f25u; + s[12] ^= s[5]; + s[5] += s[12] + 0x31f9526eu; + s[14] ^= (s[5] & s[13]); + s[3] = mh_rotl(s[3] ^ s[14], 2u); + s[1] = (s[1] ^ s[3]) * 0xe113f67bu; + s[13] = mh_rotl(s[13] ^ s[1], 2u); + s[12] *= (s[13] | 1u); + s[2] ^= s[12]; + s[9] = s[9] * 0x1a8888d9u + s[2]; + s[4] += s[9]; + s[6] += (s[4] | s[7]); + s[7] = (s[7] ^ s[6]) * 0xfddcf333u; + s[15] += (s[7] | s[8]); + s[1] = mh_rotl(s[1], 10u) + s[15]; + s[8] ^= s[1]; + s[13] *= (s[8] | 1u); + s[9] *= (s[13] | 1u); + s[10] = (s[10] ^ s[9]) * 0x3ca467cfu; + s[9] += s[10]; + s[13] = mh_rotl(s[13], 10u) + s[9]; + s[4] ^= s[13]; + s[5] = (s[5] ^ s[4]) * 0x01623d69u; + s[14] = mh_rotl(s[14], 25u) + s[5]; + s[9] = mh_rotl(s[9], 20u) + s[14]; + s[13] += s[9]; + s[7] ^= s[13]; + s[0] += s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 30u); + s[7] = mh_rotl(s[7], 18u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[2] ^= s[12]; + s[3] = (s[3] ^ s[2]) * 0xabf1e829u; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_7(uint32_t* s) { + s[5] -= s[0]; + s[4] += s[5]; + s[1] ^= s[4]; + s[8] = mh_rotl(s[8], 27u) + s[1]; + s[11] = (s[11] ^ s[8]) * 0x4b2f6f09u; + s[6] ^= s[11]; + s[9] = mh_rotl(s[9] ^ s[6], 4u); + s[8] += s[9] + 0xbb62948fu; + s[5] ^= s[8]; + s[11] += (s[5] | s[13]); + s[12] += s[11]; + s[1] = mh_rotl(s[1], 31u) + s[12]; + s[14] ^= s[1]; + s[8] *= (s[14] | 1u); + s[6] += (s[8] | s[1]); + s[10] ^= s[6]; + s[7] = s[7] * 0x6b454bc1u + s[10]; + s[6] -= s[7]; + s[9] += s[6]; + s[2] = mh_rotl(s[2], 17u) + s[9]; + s[9] -= s[2]; + s[13] ^= (s[9] & s[0]); + s[2] -= s[13]; + s[14] ^= (s[2] & s[11]); + s[13] ^= s[14]; + s[8] += s[13]; + s[1] ^= s[8]; + s[15] ^= s[1] ^ 0x6fb89ee0u; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[5] -= s[13]; + s[9] = (s[9] ^ s[5]) * 0x34a05bdbu; + s[14] = mh_rotl(s[14] ^ s[9], 19u); + s[7] += s[14] + 0x91a91f0eu; + s[12] = mh_rotl(s[12], 30u) + s[7]; + s[3] = (s[3] ^ s[12]) * 0x29e111e1u; + s[15] = mh_rotl(s[15], 13u) + s[3]; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[6] -= s[4]; + s[15] ^= (s[6] & s[3]); + s[1] ^= s[15]; + s[13] = mh_rotl(s[13], 2u) + s[1]; + s[5] -= s[13]; + s[12] += (s[5] | s[6]); + s[5] = mh_rotl(s[5], 8u) + s[12]; + s[6] = (s[6] ^ s[5]) * 0x46361369u; + s[0] = s[0] * 0x41b33755u + s[6]; + s[14] += s[0]; + s[7] = (s[7] ^ s[14]) * 0x927361a3u; + s[13] += s[7]; + s[1] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[1], 29u); + s[7] = mh_rotl(s[7] ^ s[3], 28u); + s[15] = mh_rotl(s[15], 6u) + s[7]; + s[3] = s[3] * 0x0876dd9du + s[15]; + s[4] ^= s[3]; + s[11] -= s[4]; + s[10] = mh_rotl(s[10], 29u) + s[11]; + s[5] ^= s[10]; + s[3] += s[5]; + s[7] *= (s[3] | 1u); + s[2] -= s[7]; + s[9] ^= s[2]; + s[8] *= (s[9] | 1u); + s[7] += (s[8] | s[13]); + s[13] -= s[7]; + s[11] = mh_rotl(s[11], 18u) + s[13]; + s[10] += s[11] + 0x181a9075u; + s[9] = (s[9] ^ s[10]) * 0xb49d9e43u; + s[15] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[7] += s[3]; + s[3] += s[7]; + s[4] ^= s[3] ^ 0xe8c5e0a0u; + s[7] += (s[4] | s[12]); + s[4] += s[7]; + s[14] = (s[14] ^ s[4]) * 0x178ee02fu; + s[7] += s[14]; + s[1] ^= s[7] ^ 0x194c8352u; + s[11] ^= s[1]; + s[10] *= (s[11] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[0] = mh_rotl(s[0] ^ s[13], 28u); + s[1] += (s[0] | s[7]); + s[15] -= s[1]; + s[6] += s[15]; + s[7] -= s[6]; + s[0] ^= s[7]; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x7db92f45u; + s[8] += s[12]; + s[9] = mh_rotl(s[9], 25u) + s[8]; + s[14] += s[9]; + s[4] = mh_rotl(s[4], 1u) + s[14]; + s[9] = mh_rotl(s[9], 20u) + s[4]; + s[8] -= s[9]; + s[2] = (s[2] ^ s[8]) * 0xe35b6231u; + s[14] *= (s[2] | 1u); + s[11] += s[14]; + s[6] = mh_rotl(s[6], 27u) + s[11]; + s[13] += (s[6] | s[14]); + s[3] += s[13]; + s[12] ^= s[3]; + s[2] ^= s[12]; + s[0] ^= s[2]; + s[3] += (s[0] | s[7]); + s[14] ^= (s[3] & s[9]); + s[4] += s[14] + 0x77498422u; + s[11] = mh_rotl(s[11], 18u) + s[4]; + s[10] = mh_rotl(s[10] ^ s[11], 14u); + s[6] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[2] *= (s[12] | 1u); + s[8] *= (s[2] | 1u); + s[0] = (s[0] ^ s[8]) * 0x597dfa7du; + s[5] = mh_rotl(s[5] ^ s[0], 1u); + s[8] = (s[8] ^ s[5]) * 0x818239b3u; + s[6] ^= s[8] ^ 0x898c850du; + s[1] = (s[1] ^ s[6]) * 0x3d7ae6bfu; + s[2] += (s[1] | s[0]); + s[15] = mh_rotl(s[15] ^ s[2], 12u); + s[11] ^= (s[15] & s[1]); + s[10] += (s[11] | s[5]); + s[9] = mh_rotl(s[9], 2u) + s[10]; + s[4] += s[9] + 0x8e6a7325u; + s[10] += s[4]; + s[9] *= (s[10] | 1u); + s[7] = mh_rotl(s[7] ^ s[9], 29u); + s[9] *= (s[7] | 1u); + s[14] *= (s[9] | 1u); + s[9] += (s[14] | s[8]); + s[8] *= (s[9] | 1u); + s[10] = mh_rotl(s[10] ^ s[8], 31u); + s[0] += s[10]; + s[3] ^= s[0]; + s[11] += s[3]; + s[10] = mh_rotl(s[10], 14u) + s[11]; + s[14] = s[14] * 0xedeb79c3u + s[10]; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[0] ^= s[13] ^ 0xcb8f865fu; + s[7] ^= s[0] ^ 0xc218e233u; + s[6] ^= s[7]; + s[15] -= s[6]; + s[13] += s[15]; + s[9] -= s[13]; + s[8] += s[9]; + s[5] += s[8]; + s[14] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[12] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 4u) + s[12]; + s[5] = (s[5] ^ s[2]) * 0xca70bd5bu; + s[6] = mh_rotl(s[6] ^ s[5], 1u); + s[9] -= s[6]; + s[12] ^= s[9]; + s[11] += s[12] + 0xc0665a45u; + s[3] = mh_rotl(s[3] ^ s[11], 4u); + s[9] ^= s[3] ^ 0x32e70bb6u; + s[1] ^= s[9] ^ 0xae4dfdd5u; + s[5] ^= (s[1] & s[3]); + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[13] += s[3]; + s[10] = mh_rotl(s[10], 4u) + s[13]; + s[7] += s[10]; + s[10] ^= s[7] ^ 0x4810f287u; + s[6] += (s[10] | s[13]); + s[11] = (s[11] ^ s[6]) * 0x66e90aa1u; + s[2] += s[11]; + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[11] ^= (s[8] & s[10]); + s[6] ^= s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 9u); + s[2] = (s[2] ^ s[8]) * 0x0ae2e991u; + s[14] *= (s[2] | 1u); + s[2] += (s[14] | s[3]); + s[0] -= s[2]; + s[11] += s[0] + 0x68b8549cu; + s[8] -= s[11]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[3] = mh_rotl(s[3] ^ s[12], 12u); + s[10] = s[10] * 0xf67913a1u + s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 22u); + s[11] ^= (s[14] & s[4]); + s[8] += s[11]; + s[15] *= (s[8] | 1u); + s[14] += s[15]; + s[8] = (s[8] ^ s[14]) * 0x0ab3eb01u; + s[2] = mh_rotl(s[2], 28u) + s[8]; + s[8] *= (s[2] | 1u); + s[2] ^= s[8]; + s[10] ^= s[2]; + s[0] -= s[10]; + s[4] ^= s[0] ^ 0x4f62b664u; + s[12] = mh_rotl(s[12] ^ s[4], 7u); + s[10] -= s[12]; + s[0] += s[10] + 0xf2da1dd8u; + s[3] += s[0]; + s[5] = (s[5] ^ s[3]) * 0xdbaaf8b9u; + s[4] = (s[4] ^ s[5]) * 0xf8df299fu; + s[13] += s[4]; + s[10] ^= (s[13] & s[14]); + s[5] ^= s[10]; + s[13] += s[5]; + s[8] *= (s[13] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 26u); + s[0] = mh_rotl(s[0] ^ s[11], 21u); + s[9] ^= s[0] ^ 0x9e7430f6u; + s[4] = mh_rotl(s[4], 5u) + s[9]; + s[8] ^= s[4]; + s[7] ^= s[8]; + s[0] ^= s[7]; + s[14] = mh_rotl(s[14], 20u) + s[0]; + s[7] += (s[14] | s[15]); + s[6] = (s[6] ^ s[7]) * 0x151af639u; + s[12] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[12], 15u); + s[4] = s[4] * 0xf5ff2905u + s[3]; + s[9] += s[4] + 0x986450f9u; + s[0] += s[9]; + s[3] *= (s[0] | 1u); + s[10] = mh_rotl(s[10], 6u) + s[3]; + s[7] += (s[10] | s[2]); + s[11] ^= s[7]; + s[14] = mh_rotl(s[14], 9u) + s[11]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[12] += s[6] + 0x8e33c6d8u; + s[1] ^= s[12]; + s[14] = s[14] * 0x75b03e79u + s[1]; + s[12] = (s[12] ^ s[14]) * 0xf81548e3u; + s[14] = mh_rotl(s[14] ^ s[12], 26u); + s[0] = (s[0] ^ s[14]) * 0xed123d19u; + s[4] = s[4] * 0xc3964555u + s[0]; + s[12] *= (s[4] | 1u); + s[8] = (s[8] ^ s[12]) * 0x5b0867f3u; + s[4] += s[8]; + s[11] += (s[4] | s[8]); + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[8] = mh_rotl(s[8], 13u) + s[13]; + s[10] += s[8]; + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[13] += s[5]; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[6] ^= s[1]; + s[0] = s[0] * 0x8659f36fu + s[6]; + s[6] = mh_rotl(s[6], 16u) + s[0]; + s[14] *= (s[6] | 1u); + s[3] ^= (s[14] & s[15]); + s[7] ^= s[3]; + s[8] = s[8] * 0x9b402df1u + s[7]; + s[13] -= s[8]; + s[14] = s[14] * 0xfc97057fu + s[13]; + s[8] = mh_rotl(s[8], 16u) + s[14]; + s[14] = (s[14] ^ s[8]) * 0xbe6b7107u; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = mh_rotl(s[8] ^ s[15], 17u); + s[2] *= (s[8] | 1u); + s[13] ^= (s[2] & s[15]); + s[4] -= s[13]; + s[6] += s[4]; + s[5] ^= s[6]; + s[13] += s[5] + 0xe1efd35du; + s[11] -= s[13]; + s[9] -= s[11]; + s[11] += s[9]; + s[10] += s[11] + 0x54c20a26u; + s[11] += s[10]; + s[10] ^= s[11]; + s[1] += s[10]; + s[15] ^= s[1] ^ 0xba35f967u; + s[10] ^= s[15]; + s[5] -= s[10]; + s[10] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[10], 4u); + s[12] = mh_rotl(s[12] ^ s[2], 28u); + s[3] *= (s[12] | 1u); + s[12] += s[3]; + s[2] ^= s[12] ^ 0xf5d2467fu; + s[6] *= (s[2] | 1u); + s[10] = (s[10] ^ s[6]) * 0x28dedae7u; + s[3] = mh_rotl(s[3], 23u) + s[10]; + s[13] ^= s[3]; + s[0] -= s[13]; + s[6] = mh_rotl(s[6], 27u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[6], 24u); + s[7] += s[9]; + s[1] = (s[1] ^ s[7]) * 0x7c90eb87u; + s[9] ^= s[1]; + s[13] = mh_rotl(s[13], 9u) + s[9]; + s[10] ^= s[13] ^ 0x225cb631u; + s[4] = mh_rotl(s[4] ^ s[10], 7u); + s[2] *= (s[4] | 1u); + s[4] += s[2]; + s[2] = (s[2] ^ s[4]) * 0xbf3bcc37u; + s[7] += s[2]; + s[14] = (s[14] ^ s[7]) * 0xbc306609u; + s[7] ^= (s[14] & s[8]); + s[15] ^= s[7] ^ 0x60b43c30u; + s[9] ^= s[15]; + s[4] ^= s[9]; + s[9] += (s[4] | s[7]); + s[0] ^= (s[9] & s[13]); + s[12] ^= s[0] ^ 0xd2720722u; + s[5] ^= s[12] ^ 0xd44c4970u; + s[9] ^= s[5] ^ 0xc371f5beu; + s[3] ^= s[9]; + s[0] = mh_rotl(s[0], 29u) + s[3]; + s[10] += s[0]; + s[8] += s[10]; + s[3] = (s[3] ^ s[8]) * 0xa4d0bc15u; + s[1] ^= s[3]; + s[12] ^= s[1]; + s[10] ^= s[12]; + s[2] += (s[10] | s[4]); + s[11] = mh_rotl(s[11], 16u) + s[2]; + s[9] += s[11]; + s[7] *= (s[9] | 1u); + s[0] = (s[0] ^ s[7]) * 0x5e3371e1u; + s[14] += s[0]; + s[9] ^= s[14]; + s[10] = (s[10] ^ s[9]) * 0x9e41ec57u; + s[0] ^= s[10]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4]; + s[4] *= (s[0] | 1u); + s[8] = s[8] * 0xbfdc3751u + s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[11] -= s[15]; + s[9] -= s[11]; + s[4] = mh_rotl(s[4], 8u) + s[9]; + s[15] += s[4]; + s[1] ^= s[15] ^ 0xd11970cdu; + s[15] ^= s[1]; + s[4] = s[4] * 0x94d713c9u + s[15]; + s[7] = s[7] * 0x68b74c8du + s[4]; + s[9] ^= s[7] ^ 0x96fae1c9u; + s[7] *= (s[9] | 1u); + s[4] ^= s[7]; + s[1] -= s[4]; + s[8] ^= s[1] ^ 0x3b8298fdu; + s[3] = mh_rotl(s[3] ^ s[8], 29u); + s[10] += s[3]; + s[2] ^= s[10] ^ 0xfc75ba25u; + s[15] ^= s[2] ^ 0x3370ab46u; + s[4] *= (s[15] | 1u); + s[0] = (s[0] ^ s[4]) * 0xf0c6e8a1u; + s[8] = mh_rotl(s[8], 30u) + s[0]; + s[13] ^= s[8]; + s[9] += (s[13] | s[4]); + s[3] ^= (s[9] & s[5]); + s[9] ^= s[3]; + s[6] += s[9]; + s[10] += (s[6] | s[12]); + s[15] += s[10]; + s[13] *= (s[15] | 1u); + s[15] += (s[13] | s[2]); + s[5] += s[15] + 0xc80c1f15u; + s[6] = mh_rotl(s[6] ^ s[5], 6u); + s[2] ^= s[6]; + s[14] += s[2] + 0x20c48485u; + s[0] += s[14]; + s[8] = (s[8] ^ s[0]) * 0xab09b653u; + s[5] += s[8]; + s[11] *= (s[5] | 1u); + s[15] += s[11]; + s[8] ^= s[15]; + s[11] -= s[8]; + s[12] *= (s[11] | 1u); + s[0] = mh_rotl(s[0] ^ s[12], 10u); + s[13] ^= s[0]; + s[4] = mh_rotl(s[4], 27u) + s[13]; + s[2] += s[4]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[7] *= (s[10] | 1u); + s[6] -= s[7]; + s[3] = (s[3] ^ s[6]) * 0xb3dee1f9u; + s[6] -= s[3]; + s[5] += s[6]; + s[8] *= (s[5] | 1u); + s[15] += s[8]; + s[0] = mh_rotl(s[0], 13u) + s[15]; + s[2] -= s[0]; + s[14] *= (s[2] | 1u); + s[3] += s[14]; + s[13] -= s[3]; + s[12] = mh_rotl(s[12], 15u) + s[13]; + s[8] = s[8] * 0xdd12f547u + s[12]; + s[4] = s[4] * 0xeabf279du + s[8]; + s[10] = (s[10] ^ s[4]) * 0x233f1cd3u; + s[7] += s[10] + 0x6c58f593u; + s[8] ^= (s[7] & s[14]); + s[12] -= s[8]; + s[11] ^= (s[12] & s[6]); + s[12] *= (s[11] | 1u); + s[13] = (s[13] ^ s[12]) * 0x8c02e38du; + s[2] += s[13] + 0xa8bdba12u; + s[14] += s[2]; + s[13] = (s[13] ^ s[14]) * 0x4beb81bdu; + s[5] = (s[5] ^ s[13]) * 0x1ad1e6dbu; + s[3] ^= s[5]; + s[4] ^= s[3]; + s[7] = (s[7] ^ s[4]) * 0xef5d1565u; + s[4] += (s[7] | s[12]); + s[15] ^= s[4] ^ 0x5a3cd0fbu; + s[2] += s[15]; + s[10] = (s[10] ^ s[2]) * 0x42c18153u; + s[9] = mh_rotl(s[9], 31u) + s[10]; + s[12] -= s[9]; + s[3] += s[12] + 0x809ec6a1u; + s[0] -= s[3]; + s[2] = (s[2] ^ s[0]) * 0x37fb4965u; + s[6] = mh_rotl(s[6], 14u) + s[2]; + s[15] += s[6]; + s[2] ^= s[15]; + s[9] *= (s[2] | 1u); + s[13] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[13], 15u); + s[3] ^= (s[9] & s[2]); + s[2] = (s[2] ^ s[3]) * 0xe757085du; + s[10] *= (s[2] | 1u); + s[7] += s[10] + 0x0e230d44u; + s[10] += s[7]; + s[14] += s[10]; + s[2] += s[14] + 0x3f9b1777u; + s[14] -= s[2]; + s[8] ^= s[14] ^ 0x53fdae32u; + s[14] ^= s[8] ^ 0x545e3034u; + s[12] ^= s[14]; + s[2] = mh_rotl(s[2] ^ s[12], 18u); + s[1] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[6] += s[13]; + s[13] = mh_rotl(s[13], 31u) + s[6]; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[4] = mh_rotl(s[4], 13u) + s[8]; + s[15] ^= s[4]; + s[13] ^= s[15]; + s[15] += s[13]; + s[6] *= (s[15] | 1u); + s[8] -= s[6]; + s[2] += (s[8] | s[4]); + s[8] += s[2] + 0x071fe892u; + s[2] += s[8]; + s[6] ^= s[2]; + s[12] = mh_rotl(s[12], 12u) + s[6]; + s[11] ^= s[12]; + s[10] ^= s[11]; + s[15] ^= (s[10] & s[2]); + s[0] += s[15] + 0xc5893a51u; + s[11] ^= s[0]; + s[8] = s[8] * 0xcbaa9e53u + s[11]; + s[12] ^= s[8]; + s[7] += s[12]; + s[4] ^= s[7]; + s[14] ^= s[4]; + s[8] += s[14]; + s[2] ^= (s[8] & s[13]); + s[4] += (s[2] | s[15]); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[6] *= (s[15] | 1u); + s[4] ^= s[6] ^ 0xda23719bu; + s[10] += s[4]; + s[14] = s[14] * 0x7d043037u + s[10]; + s[1] = (s[1] ^ s[14]) * 0x3702ca63u; + s[14] = s[14] * 0x6069e073u + s[1]; + s[11] += s[14]; + s[15] += s[11] + 0x080f6236u; + s[14] += s[15]; + s[0] ^= s[14] ^ 0xbcf33252u; + s[8] ^= (s[0] & s[4]); + s[10] ^= s[8] ^ 0x42b4ca59u; + s[5] ^= s[10]; + s[0] = (s[0] ^ s[5]) * 0xeff77d4bu; + s[3] = mh_rotl(s[3], 7u) + s[0]; + s[14] ^= s[3] ^ 0xa94ec34bu; + s[4] = mh_rotl(s[4], 11u) + s[14]; + s[8] = mh_rotl(s[8] ^ s[4], 26u); + s[0] = mh_rotl(s[0] ^ s[8], 29u); + s[2] = mh_rotl(s[2], 1u) + s[0]; + s[14] += s[2] + 0xe0207936u; + s[10] *= (s[14] | 1u); + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[4] += s[8] + 0x401aa131u; + s[0] += s[4]; + s[12] = mh_rotl(s[12] ^ s[0], 1u); + s[6] += s[12]; + s[5] = (s[5] ^ s[6]) * 0x5402ef7fu; + s[3] ^= s[5]; + s[12] -= s[3]; + s[14] ^= s[12] ^ 0xa47dfa06u; + s[6] = (s[6] ^ s[14]) * 0xd40c13a9u; + s[8] = (s[8] ^ s[6]) * 0xfd2046ddu; + s[2] = (s[2] ^ s[8]) * 0x06e4aacbu; + s[13] = mh_rotl(s[13], 29u) + s[2]; + s[0] ^= s[13]; + s[15] = mh_rotl(s[15], 19u) + s[0]; + s[10] += (s[15] | s[2]); + s[3] ^= s[10] ^ 0xd34e89bcu; + s[10] ^= s[3] ^ 0xbd40c99cu; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[12] += s[14]; + s[9] = mh_rotl(s[9] ^ s[12], 21u); + s[2] = (s[2] ^ s[9]) * 0xacae09c7u; + s[5] -= s[2]; + s[3] ^= s[5]; + s[14] -= s[3]; + s[5] = s[5] * 0xaf5e1497u + s[14]; + s[8] ^= (s[5] & s[12]); + s[6] ^= s[8]; + s[15] += s[6]; + s[12] ^= (s[15] & s[13]); + s[9] = mh_rotl(s[9] ^ s[12], 8u); + s[1] = mh_rotl(s[1] ^ s[9], 11u); + s[2] += s[1]; + s[4] ^= (s[2] & s[5]); + s[14] = (s[14] ^ s[4]) * 0x818385b1u; + s[7] += s[14]; + s[8] ^= s[7] ^ 0x4eae6b36u; + s[13] = mh_rotl(s[13], 19u) + s[8]; + s[6] *= (s[13] | 1u); + s[15] ^= s[6]; + s[5] = mh_rotl(s[5], 18u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[5], 16u); + s[9] += (s[6] | s[14]); + s[12] *= (s[9] | 1u); + s[0] = (s[0] ^ s[12]) * 0x5540eec9u; + s[10] ^= s[0] ^ 0x57f45e0eu; + s[12] = mh_rotl(s[12], 19u) + s[10]; + s[9] -= s[12]; + s[10] += s[9] + 0x4e7af6edu; + s[7] *= (s[10] | 1u); + s[14] *= (s[7] | 1u); + s[10] *= (s[14] | 1u); + s[13] ^= s[10]; + s[6] += s[13] + 0xdeaaf3c5u; + s[5] = (s[5] ^ s[6]) * 0x6626311bu; + s[8] += s[5]; + s[14] -= s[8]; + s[1] += s[14]; + s[0] = mh_rotl(s[0], 14u) + s[1]; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9] ^ s[1], 3u); + s[14] ^= s[9]; + s[3] += s[14]; + s[0] += s[3]; + s[6] = mh_rotl(s[6], 9u) + s[0]; + s[10] = mh_rotl(s[10] ^ s[6], 18u); + s[3] -= s[10]; + s[0] = (s[0] ^ s[3]) * 0xf8e0b555u; + s[5] = (s[5] ^ s[0]) * 0x90f83cc5u; + s[15] -= s[5]; + s[13] = (s[13] ^ s[15]) * 0x1028be17u; + s[8] ^= s[13] ^ 0x6f814efau; + s[3] = mh_rotl(s[3], 7u) + s[8]; + s[13] = s[13] * 0x1fe5d55du + s[3]; + s[14] += s[13]; + s[11] *= (s[14] | 1u); + s[8] = s[8] * 0xec49ce8fu + s[11]; + s[1] ^= s[8] ^ 0x6ce63203u; + s[13] = mh_rotl(s[13] ^ s[1], 3u); + s[4] = (s[4] ^ s[13]) * 0x1f4d84d5u; + s[3] = mh_rotl(s[3] ^ s[4], 19u); + s[6] ^= s[3] ^ 0x99bbd04au; + s[15] = mh_rotl(s[15], 23u) + s[6]; + s[5] ^= s[15]; + s[7] ^= s[5]; + s[12] = s[12] * 0x41bf1949u + s[7]; + s[3] ^= s[12] ^ 0xc73c6eaau; + s[5] += s[3]; + s[12] += s[5] + 0xaca33a02u; + s[2] += s[12]; + s[1] -= s[2]; + s[2] ^= (s[1] & s[8]); + s[15] *= (s[2] | 1u); + s[12] += s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 22u); + s[15] *= (s[2] | 1u); + s[2] += s[15]; + s[8] -= s[2]; + s[4] += s[8]; + s[6] += s[4]; + s[7] += s[6]; + s[13] += s[7]; + s[9] += s[13]; + s[11] += s[9]; + s[8] += s[11]; + s[10] = mh_rotl(s[10] ^ s[8], 23u); + s[7] -= s[10]; + s[3] += s[7]; + s[6] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[0] ^= s[5]; + s[13] = mh_rotl(s[13] ^ s[0], 26u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[13] += s[4]; + s[8] = mh_rotl(s[8] ^ s[13], 17u); + s[6] -= s[8]; + s[4] = mh_rotl(s[4] ^ s[6], 13u); + s[6] -= s[4]; + s[10] = mh_rotl(s[10], 17u) + s[6]; + s[8] = (s[8] ^ s[10]) * 0x5414f521u; + s[5] ^= (s[8] & s[12]); + s[12] += s[5]; + s[9] ^= s[12]; + s[4] = mh_rotl(s[4] ^ s[9], 22u); + s[6] ^= (s[4] & s[15]); + s[5] += s[6]; + s[2] ^= (s[5] & s[3]); + s[15] ^= s[2]; + s[11] += s[15]; + s[8] -= s[11]; + s[3] -= s[8]; + s[8] = s[8] * 0xb35e6bc9u + s[3]; + s[14] ^= s[8]; + s[6] *= (s[14] | 1u); + s[14] -= s[6]; + s[4] ^= s[14]; + s[0] ^= s[4]; + s[13] = (s[13] ^ s[0]) * 0xe1a27a3du; + s[1] = mh_rotl(s[1] ^ s[13], 4u); + s[8] = (s[8] ^ s[1]) * 0x7db5fbb1u; + s[5] += s[8]; + s[9] += s[5]; + s[6] *= (s[9] | 1u); + s[7] = (s[7] ^ s[6]) * 0x33889ef9u; + s[13] = mh_rotl(s[13] ^ s[7], 11u); + s[9] ^= s[13]; + s[8] = mh_rotl(s[8], 4u) + s[9]; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[10] ^= s[11] ^ 0x833b63eeu; + s[14] *= (s[10] | 1u); + s[5] -= s[14]; + s[3] ^= s[5]; + s[10] *= (s[3] | 1u); + s[15] = mh_rotl(s[15], 15u) + s[10]; + s[10] -= s[15]; + s[11] ^= s[10]; + s[15] += s[11] + 0x67b25095u; + s[5] = mh_rotl(s[5] ^ s[15], 6u); + s[12] += s[5]; + s[4] += (s[12] | s[15]); + s[12] += s[4] + 0x0b5448beu; + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0x9db08cddu; + s[4] = mh_rotl(s[4], 5u) + s[12]; + s[12] *= (s[4] | 1u); + s[5] ^= s[12]; + s[7] ^= (s[5] & s[15]); + s[2] = mh_rotl(s[2], 9u) + s[7]; + s[7] = (s[7] ^ s[2]) * 0xef5cc1a1u; + s[13] ^= s[7]; + s[2] += s[13] + 0xe8acb081u; + s[7] += s[2]; + s[13] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[4] += s[11]; + s[3] += s[4] + 0x2bf7bd89u; + s[15] += s[3]; + s[11] = mh_rotl(s[11] ^ s[15], 10u); + s[0] = mh_rotl(s[0] ^ s[11], 17u); + s[6] = mh_rotl(s[6] ^ s[0], 20u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[6] = mh_rotl(s[6], 26u) + s[8]; + s[11] = mh_rotl(s[11], 18u) + s[6]; + s[0] = mh_rotl(s[0], 29u) + s[11]; + s[2] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[2], 21u); + s[8] += s[11]; + s[1] ^= s[8]; + s[12] = mh_rotl(s[12], 21u) + s[1]; + s[9] = mh_rotl(s[9] ^ s[12], 30u); + s[12] = (s[12] ^ s[9]) * 0xaa6bd425u; + s[10] += s[12] + 0x3abc6eeeu; + s[4] = (s[4] ^ s[10]) * 0x26651b39u; + s[1] = (s[1] ^ s[4]) * 0x669011cbu; + s[12] = (s[12] ^ s[1]) * 0xc730fa63u; + s[4] *= (s[12] | 1u); + s[1] += s[4]; + s[13] = (s[13] ^ s[1]) * 0xa91d1549u; + s[8] = mh_rotl(s[8] ^ s[13], 20u); + s[15] = mh_rotl(s[15] ^ s[8], 19u); + s[9] ^= s[15]; + s[12] += s[9]; + s[6] ^= s[12]; + s[7] = mh_rotl(s[7], 10u) + s[6]; + s[6] = s[6] * 0x4737bba1u + s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 4u); + s[15] = (s[15] ^ s[7]) * 0x1550c0c9u; + s[6] = (s[6] ^ s[15]) * 0xa9708363u; + s[11] = s[11] * 0x7ed5889du + s[6]; + s[14] += s[11] + 0xe220d224u; + s[5] += s[14] + 0xa5c27ec0u; + s[3] ^= s[5]; + s[11] = (s[11] ^ s[3]) * 0x83211151u; + s[1] += s[11]; + s[0] -= s[1]; + s[8] += s[0]; + s[10] = mh_rotl(s[10], 22u) + s[8]; + s[14] -= s[10]; + s[13] ^= s[14]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[5] *= (s[12] | 1u); + s[2] *= (s[5] | 1u); + s[13] += s[2]; + s[14] ^= s[13]; + s[7] = mh_rotl(s[7] ^ s[14], 8u); + s[10] ^= s[7]; + s[8] ^= s[10]; + s[4] = mh_rotl(s[4], 25u) + s[8]; + s[11] ^= s[4]; + s[13] += s[11] + 0xc7fb1dc5u; + s[6] ^= s[13] ^ 0xda0de0b3u; + s[9] *= (s[6] | 1u); + s[0] += s[9]; + s[10] = mh_rotl(s[10], 30u) + s[0]; + s[11] = mh_rotl(s[11], 31u) + s[10]; + s[14] -= s[11]; + s[4] ^= s[14]; + s[7] *= (s[4] | 1u); + s[4] += s[7]; + s[9] = mh_rotl(s[9], 16u) + s[4]; + s[5] -= s[9]; + s[14] = mh_rotl(s[14], 23u) + s[5]; + s[8] += s[14]; + s[13] += (s[8] | s[4]); + s[3] -= s[13]; + s[9] ^= s[3]; + s[7] *= (s[9] | 1u); + s[0] *= (s[7] | 1u); + s[4] = s[4] * 0xa5531c79u + s[0]; + s[5] += s[4] + 0x956e1cecu; + s[4] = mh_rotl(s[4], 12u) + s[5]; + s[13] ^= s[4] ^ 0xcfd8a170u; + s[8] = mh_rotl(s[8] ^ s[13], 2u); + s[12] *= (s[8] | 1u); + s[7] = mh_rotl(s[7], 18u) + s[12]; +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +IGNEUM_HD void mh_round_8(uint32_t* s) { + s[12] *= (s[0] | 1u); + s[14] ^= s[12]; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[9] ^= s[7]; + s[7] += (s[9] | s[15]); + s[14] ^= s[7]; + s[12] ^= s[14]; + s[9] += s[12]; + s[0] -= s[9]; + s[11] = (s[11] ^ s[0]) * 0x032a9d93u; + s[12] ^= s[11] ^ 0x7816ceedu; + s[6] += s[12]; + s[7] ^= s[6] ^ 0x5f893870u; + s[8] ^= s[7] ^ 0x38fe7d15u; + s[5] += s[8]; + s[11] = mh_rotl(s[11] ^ s[5], 5u); + s[3] = s[3] * 0xdc8f2169u + s[11]; + s[12] += s[3]; + s[1] = (s[1] ^ s[12]) * 0xff5bb02du; + s[9] += s[1]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[5], 9u); + s[12] += s[10]; + s[2] += s[12] + 0x6fbd2719u; + s[7] *= (s[2] | 1u); + s[10] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 12u) + s[10]; + s[15] ^= (s[7] & s[2]); + s[1] = (s[1] ^ s[15]) * 0xa496dd7du; + s[12] += s[1]; + s[9] *= (s[12] | 1u); + s[4] += s[9] + 0x603c29a5u; + s[0] = (s[0] ^ s[4]) * 0xb11db5efu; + s[12] = mh_rotl(s[12] ^ s[0], 12u); + s[9] ^= s[12]; + s[3] += s[9]; + s[4] ^= s[3]; + s[10] = s[10] * 0xf2876a93u + s[4]; + s[3] *= (s[10] | 1u); + s[13] *= (s[3] | 1u); + s[10] += s[13]; + s[0] += s[10] + 0xa38ef984u; + s[13] += s[0]; + s[0] += s[13]; + s[4] -= s[0]; + s[8] = mh_rotl(s[8], 16u) + s[4]; + s[0] *= (s[8] | 1u); + s[1] = mh_rotl(s[1] ^ s[0], 19u); + s[10] -= s[1]; + s[4] -= s[10]; + s[3] += s[4] + 0x98d38850u; + s[15] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[0] ^= s[12]; + s[8] += (s[0] | s[12]); + s[1] -= s[8]; + s[0] -= s[1]; + s[12] += s[0]; + s[1] = mh_rotl(s[1] ^ s[12], 8u); + s[8] = s[8] * 0xdb178cedu + s[1]; + s[13] ^= (s[8] & s[9]); + s[14] = mh_rotl(s[14] ^ s[13], 31u); + s[5] = mh_rotl(s[5] ^ s[14], 15u); + s[14] += s[5] + 0x58102672u; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[9] = (s[9] ^ s[13]) * 0xcea6b9a5u; + s[8] = mh_rotl(s[8] ^ s[9], 10u); + s[0] ^= s[8]; + s[1] = mh_rotl(s[1] ^ s[0], 26u); + s[0] ^= (s[1] & s[14]); + s[14] = mh_rotl(s[14] ^ s[0], 29u); + s[7] = mh_rotl(s[7] ^ s[14], 10u); + s[8] ^= s[7]; + s[4] ^= s[8]; + s[3] ^= s[4]; + s[1] ^= (s[3] & s[2]); + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[3] = (s[3] ^ s[15]) * 0xf98d62f9u; + s[8] += s[3]; + s[4] ^= s[8]; + s[13] ^= s[4]; + s[14] -= s[13]; + s[13] += s[14]; + s[1] *= (s[13] | 1u); + s[4] += s[1] + 0x2e4fd7f9u; + s[3] += s[4] + 0xad1f68c8u; + s[11] += s[3]; + s[7] ^= s[11]; + s[2] ^= s[7]; + s[7] += (s[2] | s[0]); + s[3] += (s[7] | s[4]); + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[2] += (s[9] | s[4]); + s[7] += s[2]; + s[0] ^= s[7]; + s[5] += s[0]; + s[6] ^= s[5] ^ 0xdd9e035eu; + s[11] *= (s[6] | 1u); + s[6] += (s[11] | s[15]); + s[0] -= s[6]; + s[13] ^= s[0] ^ 0x28746675u; + s[1] ^= s[13]; + s[4] *= (s[1] | 1u); + s[8] += (s[4] | s[6]); + s[2] ^= (s[8] & s[15]); + s[15] += s[2]; + s[3] ^= s[15]; + s[9] -= s[3]; + s[1] = (s[1] ^ s[9]) * 0x9a49d919u; + s[0] *= (s[1] | 1u); + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 13u) + s[12]; + s[8] += s[4]; + s[15] ^= s[8]; + s[1] ^= s[15]; + s[8] = (s[8] ^ s[1]) * 0x406ccbb9u; + s[6] ^= s[8] ^ 0x9c63a403u; + s[7] *= (s[6] | 1u); + s[6] ^= s[7]; + s[3] -= s[6]; + s[2] -= s[3]; + s[1] -= s[2]; + s[11] -= s[1]; + s[5] = (s[5] ^ s[11]) * 0xc8b2063bu; + s[9] ^= s[5]; + s[11] += s[9]; + s[14] -= s[11]; + s[12] ^= s[14]; + s[7] = mh_rotl(s[7], 19u) + s[12]; + s[6] ^= s[7]; + s[7] = mh_rotl(s[7], 28u) + s[6]; + s[0] += (s[7] | s[8]); + s[5] = (s[5] ^ s[0]) * 0x91563ef9u; + s[4] = (s[4] ^ s[5]) * 0x2489c7ddu; + s[0] ^= s[4]; + s[8] += s[0]; + s[13] ^= (s[8] & s[2]); + s[4] = (s[4] ^ s[13]) * 0xd3f73963u; + s[0] += s[4]; + s[7] -= s[0]; + s[8] *= (s[7] | 1u); + s[12] += s[8] + 0xe7c7770bu; + s[2] = mh_rotl(s[2] ^ s[12], 24u); + s[5] += s[2]; + s[13] -= s[5]; + s[7] = s[7] * 0xa499d785u + s[13]; + s[14] ^= s[7] ^ 0xa5531f53u; + s[0] += s[14]; + s[12] += s[0]; + s[4] += s[12]; + s[5] ^= s[4] ^ 0xa21d41b2u; + s[13] ^= (s[5] & s[1]); + s[4] *= (s[13] | 1u); + s[15] = mh_rotl(s[15], 17u) + s[4]; + s[13] = s[13] * 0x9e80ce17u + s[15]; + s[4] ^= s[13]; + s[9] = s[9] * 0x0efbb90fu + s[4]; + s[3] = mh_rotl(s[3], 22u) + s[9]; + s[9] += s[3]; + s[7] = (s[7] ^ s[9]) * 0x41f4c675u; + s[2] = mh_rotl(s[2] ^ s[7], 10u); + s[5] += s[2]; + s[7] += s[5]; + s[3] ^= s[7]; + s[13] += s[3]; + s[10] += (s[13] | s[12]); + s[6] -= s[10]; + s[4] *= (s[6] | 1u); + s[9] *= (s[4] | 1u); + s[1] ^= (s[9] & s[2]); + s[13] = mh_rotl(s[13], 17u) + s[1]; + s[6] += (s[13] | s[14]); + s[14] = (s[14] ^ s[6]) * 0x3fcef445u; + s[2] += (s[14] | s[13]); + s[14] ^= s[2]; + s[9] = (s[9] ^ s[14]) * 0x76f83471u; + s[15] += s[9] + 0x3620bb75u; + s[6] = (s[6] ^ s[15]) * 0xd2ae1b99u; + s[11] += s[6]; + s[1] = mh_rotl(s[1], 9u) + s[11]; + s[2] *= (s[1] | 1u); + s[15] += (s[2] | s[5]); + s[9] = s[9] * 0xd0673ad9u + s[15]; + s[0] ^= (s[9] & s[10]); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x1626d79fu; + s[6] ^= s[0]; + s[5] -= s[6]; + s[1] += s[5] + 0xbdfebf4au; + s[10] += (s[1] | s[15]); + s[3] -= s[10]; + s[14] ^= s[3] ^ 0x2f4d32b3u; + s[0] ^= (s[14] & s[4]); + s[10] += s[0] + 0xfec9017au; + s[8] += s[10]; + s[5] -= s[8]; + s[3] += s[5]; + s[0] += s[3] + 0x0a719f0bu; + s[4] -= s[0]; + s[1] ^= s[4]; + s[7] ^= (s[1] & s[12]); + s[2] ^= (s[7] & s[5]); + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[5], 30u); + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[8] += s[12] + 0x934b929du; + s[6] *= (s[8] | 1u); + s[9] ^= (s[6] & s[4]); + s[3] ^= s[9]; + s[14] += s[3]; + s[1] *= (s[14] | 1u); + s[14] *= (s[1] | 1u); + s[5] ^= s[14]; + s[10] ^= s[5]; + s[13] *= (s[10] | 1u); + s[4] -= s[13]; + s[9] = s[9] * 0xc3f9050bu + s[4]; + s[0] = (s[0] ^ s[9]) * 0x4479cb01u; + s[10] = mh_rotl(s[10] ^ s[0], 22u); + s[7] ^= s[10]; + s[11] ^= (s[7] & s[10]); + s[1] = (s[1] ^ s[11]) * 0xa9a3102bu; + s[9] += s[1]; + s[3] = mh_rotl(s[3], 4u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[3], 16u); + s[9] += (s[10] | s[1]); + s[15] = s[15] * 0xf4a9fbe3u + s[9]; + s[5] += (s[15] | s[1]); + s[14] = s[14] * 0x0fdccaebu + s[5]; + s[7] += s[14] + 0x7e2f9108u; + s[3] -= s[7]; + s[13] *= (s[3] | 1u); + s[11] ^= s[13] ^ 0xc4dab8b7u; + s[3] ^= s[11]; + s[0] += s[3]; + s[1] *= (s[0] | 1u); + s[13] = (s[13] ^ s[1]) * 0x735874d5u; + s[3] ^= s[13]; + s[2] += s[3]; + s[8] ^= s[2]; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[5], 8u); + s[5] += s[6] + 0xc7780520u; + s[12] ^= s[5]; + s[0] *= (s[12] | 1u); + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 9u); + s[10] -= s[5]; + s[6] += s[10]; + s[8] += s[6]; + s[4] ^= s[8]; + s[0] ^= s[4]; + s[15] += s[0]; + s[0] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[0], 14u); + s[4] += s[15]; + s[6] = mh_rotl(s[6], 16u) + s[4]; + s[2] *= (s[6] | 1u); + s[5] ^= s[2]; + s[6] ^= s[5]; + s[3] = mh_rotl(s[3], 28u) + s[6]; + s[2] -= s[3]; + s[0] = mh_rotl(s[0], 3u) + s[2]; + s[4] = s[4] * 0xc5ff28b1u + s[0]; + s[13] = mh_rotl(s[13] ^ s[4], 17u); + s[2] = (s[2] ^ s[13]) * 0xf64a55e7u; + s[10] += s[2]; + s[5] -= s[10]; + s[0] = (s[0] ^ s[5]) * 0xc34391fbu; + s[9] ^= s[0]; + s[14] = (s[14] ^ s[9]) * 0xd3626e5fu; + s[12] += s[14] + 0x34b62de8u; + s[0] = mh_rotl(s[0], 3u) + s[12]; + s[10] -= s[0]; + s[5] ^= s[10]; + s[3] *= (s[5] | 1u); + s[1] += s[3]; + s[9] ^= s[1]; + s[14] ^= s[9]; + s[1] = mh_rotl(s[1] ^ s[14], 24u); + s[3] = (s[3] ^ s[1]) * 0xb486108bu; + s[13] += s[3]; + s[8] = mh_rotl(s[8] ^ s[13], 15u); + s[2] += s[8]; + s[13] = mh_rotl(s[13] ^ s[2], 6u); + s[1] -= s[13]; + s[13] += (s[1] | s[12]); + s[3] ^= s[13]; + s[1] *= (s[3] | 1u); + s[10] += s[1]; + s[0] = mh_rotl(s[0] ^ s[10], 11u); + s[14] = mh_rotl(s[14] ^ s[0], 9u); + s[3] = (s[3] ^ s[14]) * 0x1910cbd5u; + s[2] *= (s[3] | 1u); + s[3] ^= s[2] ^ 0x36e5f7c1u; + s[12] ^= s[3] ^ 0xc06b695au; + s[8] += s[12]; + s[11] *= (s[8] | 1u); + s[14] ^= s[11] ^ 0x7e8392d2u; + s[5] += s[14] + 0xc854c03eu; + s[14] += s[5] + 0x6264b077u; + s[3] ^= s[14]; + s[9] ^= s[3]; + s[5] += (s[9] | s[11]); + s[2] ^= s[5]; + s[12] = mh_rotl(s[12] ^ s[2], 11u); + s[9] -= s[12]; + s[11] ^= (s[9] & s[3]); + s[14] -= s[11]; + s[15] = mh_rotl(s[15], 7u) + s[14]; + s[10] *= (s[15] | 1u); + s[12] *= (s[10] | 1u); + s[3] += s[12]; + s[9] = mh_rotl(s[9], 5u) + s[3]; + s[3] += s[9] + 0x25bbb855u; + s[13] += s[3]; + s[7] += s[13]; + s[10] += s[7]; + s[13] += s[10] + 0x9a1fb9e1u; + s[9] += s[13] + 0x4a7d742fu; + s[11] ^= s[9]; + s[15] = (s[15] ^ s[11]) * 0xd796e1a9u; + s[0] += s[15] + 0x4fb80a99u; + s[14] ^= s[0]; + s[4] -= s[14]; + s[0] = mh_rotl(s[0], 19u) + s[4]; + s[3] ^= s[0]; + s[0] += s[3] + 0x7a46f0d4u; + s[9] += s[0]; + s[11] ^= s[9]; + s[2] += s[11]; + s[0] ^= s[2]; + s[10] = mh_rotl(s[10], 5u) + s[0]; + s[4] += s[10]; + s[7] -= s[4]; + s[12] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[12] ^= s[10]; + s[8] ^= s[12]; + s[7] ^= s[8]; + s[8] += s[7]; + s[0] += s[8] + 0xf25eb71du; + s[15] *= (s[0] | 1u); + s[14] *= (s[15] | 1u); + s[6] += s[14] + 0xc3c48a42u; + s[15] = (s[15] ^ s[6]) * 0x8ff157e3u; + s[4] = s[4] * 0x4517a273u + s[15]; + s[9] ^= s[4]; + s[8] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 3u); + s[1] = mh_rotl(s[1], 15u) + s[11]; + s[0] = mh_rotl(s[0], 11u) + s[1]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] ^= s[4]; + s[8] -= s[0]; + s[5] += (s[8] | s[0]); + s[13] ^= s[5] ^ 0x842fa93fu; + s[10] = s[10] * 0xebf84a5bu + s[13]; + s[9] *= (s[10] | 1u); + s[10] += s[9] + 0xa4ae65abu; + s[7] += s[10]; + s[4] += s[7]; + s[8] = (s[8] ^ s[4]) * 0xa095c55bu; + s[13] += s[8]; + s[1] += s[13] + 0x78267af3u; + s[15] -= s[1]; + s[14] ^= s[15]; + s[9] += s[14]; + s[5] += s[9]; + s[12] *= (s[5] | 1u); + s[14] += s[12]; + s[3] = s[3] * 0x387e70c1u + s[14]; + s[8] += s[3] + 0x4bb62e79u; + s[10] += s[8]; + s[14] -= s[10]; + s[12] += s[14] + 0x94ade867u; + s[11] += s[12]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[9] -= s[3]; + s[8] ^= s[9]; + s[10] += s[8]; + s[12] = (s[12] ^ s[10]) * 0xf31b9bf9u; + s[9] -= s[12]; + s[14] ^= s[9]; + s[4] = (s[4] ^ s[14]) * 0x6c65ed0fu; + s[5] ^= (s[4] & s[3]); + s[13] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[13], 27u); + s[15] *= (s[8] | 1u); + s[14] ^= s[15]; + s[1] += s[14] + 0x0dabf75fu; + s[8] += s[1]; + s[6] ^= (s[8] & s[4]); + s[2] -= s[6]; + s[10] = (s[10] ^ s[2]) * 0x5df68b21u; + s[7] *= (s[10] | 1u); + s[2] = mh_rotl(s[2], 30u) + s[7]; + s[3] = mh_rotl(s[3] ^ s[2], 11u); + s[10] ^= s[3]; + s[12] = mh_rotl(s[12], 18u) + s[10]; + s[3] = mh_rotl(s[3] ^ s[12], 2u); + s[15] -= s[3]; + s[12] ^= (s[15] & s[3]); + s[6] += s[12] + 0xba8c656du; + s[11] = mh_rotl(s[11] ^ s[6], 25u); + s[8] *= (s[11] | 1u); + s[12] += (s[8] | s[1]); + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[0] ^= s[10] ^ 0xf57cb31cu; + s[15] ^= s[0]; + s[5] += s[15]; + s[2] ^= s[5]; + s[14] += (s[2] | s[4]); + s[10] ^= s[14] ^ 0xfc568076u; + s[2] += s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[3] ^= s[0]; + s[7] = mh_rotl(s[7], 28u) + s[3]; + s[9] ^= s[7]; + s[11] -= s[9]; + s[8] -= s[11]; + s[10] += s[8] + 0x44a98267u; + s[6] = (s[6] ^ s[10]) * 0x78341057u; + s[9] *= (s[6] | 1u); + s[8] ^= s[9]; + s[9] -= s[8]; + s[11] += s[9]; + s[4] ^= s[11]; + s[7] += (s[4] | s[5]); + s[11] ^= s[7]; + s[14] += s[11]; + s[3] = mh_rotl(s[3], 10u) + s[14]; + s[1] = (s[1] ^ s[3]) * 0x699c712fu; + s[0] ^= s[1] ^ 0xadd48ad1u; + s[3] = mh_rotl(s[3] ^ s[0], 18u); + s[0] ^= s[3] ^ 0x7c2a7e58u; + s[1] = (s[1] ^ s[0]) * 0x5d0ba3bbu; + s[10] = mh_rotl(s[10] ^ s[1], 9u); + s[0] ^= s[10] ^ 0x3f61235cu; + s[2] ^= s[0]; + s[8] -= s[2]; + s[12] *= (s[8] | 1u); + s[10] *= (s[12] | 1u); + s[7] ^= s[10] ^ 0x4fe234e6u; + s[15] ^= s[7]; + s[3] += s[15] + 0x7518599bu; + s[12] = mh_rotl(s[12], 9u) + s[3]; + s[8] ^= s[12]; + s[9] ^= s[8] ^ 0xf95c4703u; + s[2] = mh_rotl(s[2], 7u) + s[9]; + s[12] ^= s[2] ^ 0x775646a8u; + s[15] ^= s[12] ^ 0x552eaf71u; + s[4] -= s[15]; + s[15] += (s[4] | s[7]); + s[0] ^= s[15]; + s[13] ^= s[0]; + s[14] += s[13] + 0x87e74b49u; + s[6] ^= s[14] ^ 0x6efaba41u; + s[10] += s[6] + 0x88e2108fu; + s[7] -= s[10]; + s[11] -= s[7]; + s[4] ^= s[11] ^ 0xa876c358u; + s[2] ^= s[4] ^ 0xd3f39ab5u; + s[5] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 9u) + s[5]; + s[2] ^= s[3]; + s[8] = mh_rotl(s[8] ^ s[2], 2u); + s[5] = (s[5] ^ s[8]) * 0x9b50170fu; + s[13] = mh_rotl(s[13] ^ s[5], 7u); + s[0] += s[13]; + s[13] -= s[0]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[11] = mh_rotl(s[11], 6u) + s[5]; + s[1] += s[11]; + s[10] += (s[1] | s[13]); + s[4] ^= s[10]; + s[5] *= (s[4] | 1u); + s[4] ^= s[5]; + s[3] += s[4]; + s[4] = mh_rotl(s[4], 29u) + s[3]; + s[5] *= (s[4] | 1u); + s[2] ^= s[5] ^ 0x435d474cu; + s[15] = mh_rotl(s[15] ^ s[2], 31u); + s[14] += s[15]; + s[15] += s[14]; + s[13] -= s[15]; + s[7] += s[13]; + s[0] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[0], 13u); + s[13] -= s[5]; + s[15] *= (s[13] | 1u); + s[8] += s[15] + 0xbf3496cau; + s[3] = mh_rotl(s[3] ^ s[8], 13u); + s[4] = mh_rotl(s[4], 20u) + s[3]; + s[6] = (s[6] ^ s[4]) * 0xe0716b4du; + s[3] ^= s[6]; + s[11] ^= s[3]; + s[12] += (s[11] | s[7]); + s[0] = mh_rotl(s[0], 7u) + s[12]; + s[8] ^= s[0]; + s[1] += s[8]; + s[13] = mh_rotl(s[13] ^ s[1], 22u); + s[4] ^= s[13] ^ 0xaac36692u; + s[1] *= (s[4] | 1u); + s[8] ^= s[1] ^ 0x1e4e42deu; + s[15] *= (s[8] | 1u); + s[5] += (s[15] | s[11]); + s[13] += s[5]; + s[6] ^= s[13]; + s[12] ^= s[6] ^ 0xb025ee52u; + s[5] += s[12]; + s[2] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[2], 8u); + s[15] -= s[10]; + s[5] += (s[15] | s[10]); + s[3] += s[5]; + s[2] -= s[3]; + s[10] += s[2] + 0x80d367feu; + s[12] -= s[10]; + s[15] *= (s[12] | 1u); + s[6] ^= s[15] ^ 0x8d56107cu; + s[15] ^= s[6]; + s[4] = mh_rotl(s[4] ^ s[15], 9u); + s[12] += (s[4] | s[14]); + s[13] = mh_rotl(s[13] ^ s[12], 10u); + s[2] ^= s[13]; + s[14] = s[14] * 0x1a3e65cbu + s[2]; + s[15] *= (s[14] | 1u); + s[11] += s[15]; + s[7] ^= s[11]; + s[12] -= s[7]; + s[8] ^= s[12] ^ 0xfadd6688u; + s[7] = mh_rotl(s[7], 8u) + s[8]; + s[9] += s[7]; + s[14] ^= s[9]; + s[13] += s[14]; + s[6] ^= s[13] ^ 0xed97a531u; + s[7] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[6] ^= s[4]; + s[10] ^= s[6]; + s[3] ^= s[10]; + s[1] -= s[3]; + s[3] += s[1]; + s[13] = (s[13] ^ s[3]) * 0x48c92b9fu; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[11] = mh_rotl(s[11], 12u) + s[2]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 19u); + s[0] += (s[12] | s[7]); + s[2] = (s[2] ^ s[0]) * 0x3e4b61a1u; + s[0] = (s[0] ^ s[2]) * 0x582f7a5fu; + s[12] = (s[12] ^ s[0]) * 0x2b069c6fu; + s[5] = s[5] * 0x7cf7ee03u + s[12]; + s[0] += s[5]; + s[4] = (s[4] ^ s[0]) * 0x16927f07u; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[12] = mh_rotl(s[12], 15u) + s[2]; + s[5] = (s[5] ^ s[12]) * 0xbf55dac1u; + s[10] *= (s[5] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 16u); + s[3] = mh_rotl(s[3] ^ s[6], 20u); + s[5] += s[3] + 0xc2d80c0eu; + s[13] ^= s[5] ^ 0x9407a51du; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[10] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[10], 6u); + s[3] = mh_rotl(s[3], 5u) + s[1]; + s[9] ^= (s[3] & s[0]); + s[15] ^= s[9]; + s[6] -= s[15]; + s[13] ^= s[6] ^ 0xba96a2feu; + s[14] ^= s[13] ^ 0x39f982b0u; + s[8] += s[14] + 0x4c13cb1au; + s[7] = mh_rotl(s[7] ^ s[8], 23u); + s[15] -= s[7]; + s[7] = mh_rotl(s[7], 30u) + s[15]; + s[11] += s[7]; + s[14] += s[11]; + s[8] = mh_rotl(s[8] ^ s[14], 22u); + s[6] ^= s[8] ^ 0x34c4199bu; + s[3] ^= s[6]; + s[4] += s[3]; + s[13] += s[4]; + s[9] ^= s[13]; + s[3] ^= (s[9] & s[4]); + s[15] += s[3]; + s[1] -= s[15]; + s[12] -= s[1]; + s[14] += s[12] + 0xec96595fu; + s[4] ^= s[14]; + s[12] ^= s[4]; + s[11] -= s[12]; + s[13] ^= s[11]; + s[0] += s[13]; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[8] ^= s[3]; + s[0] += (s[8] | s[15]); + s[11] = mh_rotl(s[11], 1u) + s[0]; + s[7] += (s[11] | s[5]); + s[4] = s[4] * 0xc1674329u + s[7]; + s[7] += s[4]; + s[6] *= (s[7] | 1u); + s[2] = (s[2] ^ s[6]) * 0xc284407bu; + s[0] ^= s[2]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 27u) + s[7]; + s[8] *= (s[14] | 1u); + s[14] -= s[8]; + s[11] *= (s[14] | 1u); + s[7] = s[7] * 0x5a2517e9u + s[11]; + s[6] += s[7]; + s[7] ^= s[6] ^ 0xf29de804u; + s[10] -= s[7]; + s[8] ^= s[10]; + s[5] = mh_rotl(s[5], 6u) + s[8]; + s[3] += s[5] + 0xa3c2f2b2u; + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[12] -= s[0]; + s[8] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[8], 1u); + s[12] = s[12] * 0xed2bef65u + s[6]; + s[9] += s[12]; + s[4] ^= s[9] ^ 0xacaef5beu; + s[3] += s[4]; + s[1] *= (s[3] | 1u); + s[8] += s[1] + 0x462f5fffu; + s[2] ^= s[8]; + s[1] += s[2]; + s[11] = mh_rotl(s[11], 14u) + s[1]; + s[6] ^= s[11] ^ 0xa93bca39u; + s[1] ^= s[6]; + s[0] ^= s[1] ^ 0x571f65b5u; + s[9] = s[9] * 0xcd8edcedu + s[0]; + s[11] ^= s[9] ^ 0xa554ca69u; + s[2] += s[11]; + s[9] ^= s[2]; + s[4] ^= s[9]; + s[8] += s[4]; + s[4] += s[8]; + s[12] -= s[4]; + s[4] -= s[12]; + s[12] = mh_rotl(s[12] ^ s[4], 1u); + s[5] = mh_rotl(s[5] ^ s[12], 17u); + s[14] *= (s[5] | 1u); + s[8] += (s[14] | s[4]); + s[13] = mh_rotl(s[13] ^ s[8], 21u); + s[15] -= s[13]; + s[0] ^= s[15]; + s[6] += s[0]; + s[14] = mh_rotl(s[14] ^ s[6], 24u); + s[13] = s[13] * 0x929d4b37u + s[14]; + s[15] -= s[13]; + s[4] = (s[4] ^ s[15]) * 0xc6dc8fbbu; + s[7] = mh_rotl(s[7] ^ s[4], 23u); + s[8] ^= s[7]; + s[10] = (s[10] ^ s[8]) * 0x06233043u; + s[2] = (s[2] ^ s[10]) * 0x4403efd9u; + s[3] ^= s[2]; + s[5] -= s[3]; + s[12] += s[5]; + s[6] = s[6] * 0x2ae6d079u + s[12]; + s[10] ^= s[6]; + s[7] ^= s[10] ^ 0x674b5a65u; + s[13] = mh_rotl(s[13], 3u) + s[7]; + s[9] *= (s[13] | 1u); + s[12] -= s[9]; + s[8] *= (s[12] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[7] = mh_rotl(s[7] ^ s[9], 20u); + s[13] += s[7]; + s[4] += s[13]; + s[13] ^= s[4]; + s[3] -= s[13]; + s[4] -= s[3]; + s[0] ^= s[4]; + s[3] = mh_rotl(s[3], 3u) + s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= s[5]; + s[11] *= (s[0] | 1u); + s[10] ^= s[11] ^ 0x147c14d2u; + s[11] ^= s[10]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[13] ^= s[0]; + s[12] ^= s[13]; + s[0] -= s[12]; + s[13] ^= s[0]; + s[11] = mh_rotl(s[11], 26u) + s[13]; + s[10] += s[11]; + s[11] ^= s[10] ^ 0x4b0abaf2u; + s[3] -= s[11]; + s[8] += (s[3] | s[9]); + s[12] += (s[8] | s[10]); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[4] *= (s[11] | 1u); + s[0] += s[4] + 0xab0da7ecu; + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[12] -= s[8]; + s[9] = mh_rotl(s[9], 7u) + s[12]; + s[7] -= s[9]; + s[3] *= (s[7] | 1u); + s[2] += s[3]; + s[4] = s[4] * 0xf4865499u + s[2]; + s[7] = s[7] * 0xbed687ffu + s[4]; + s[14] += s[7]; + s[15] += s[14] + 0x603451a7u; + s[10] ^= (s[15] & s[2]); + s[7] = mh_rotl(s[7] ^ s[10], 22u); + s[1] += s[7]; + s[5] += s[1]; + s[14] = (s[14] ^ s[5]) * 0x8e7b488du; + s[9] += (s[14] | s[11]); + s[12] *= (s[9] | 1u); + s[1] += s[12]; + s[12] += s[1] + 0x6855c1d8u; + s[15] -= s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 5u); + s[8] = mh_rotl(s[8] ^ s[9], 2u); + s[7] -= s[8]; + s[14] *= (s[7] | 1u); + s[12] *= (s[14] | 1u); + s[0] = mh_rotl(s[0], 1u) + s[12]; + s[15] = mh_rotl(s[15], 7u) + s[0]; + s[5] *= (s[15] | 1u); + s[12] = (s[12] ^ s[5]) * 0x015c0c07u; + s[5] = mh_rotl(s[5], 4u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[5], 2u); + s[10] ^= s[4]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +IGNEUM_HD void mh_item(const uint32_t* cache, uint32_t t, uint32_t* s) { + s[0] = 0x3067619fu; + s[1] = 0x3c269176u; + s[2] = 0x84a03b03u; + s[3] = 0xf8c63294u; + s[4] = 0xff977c5bu; + s[5] = 0xe60def3eu; + s[6] = 0x63630141u; + s[7] = 0xb8fbcb58u; + s[8] = t * 0x42146205u + 0xbab68293u; + s[9] = t * 0x52cbe0fbu + 0xcc162340u; + s[10] = t * 0x7ecf4a03u + 0x6ce151ccu; + s[11] = t * 0x6728907fu + 0xe62b8997u; + s[12] = t * 0xd81d9751u + 0xc9c80297u; + s[13] = t * 0x132952c3u + 0xf74a1654u; + s[14] = t * 0xf60de277u + 0x3d704af5u; + s[15] = t * 0x05358035u + 0x3cf522b7u; + mh_round_0(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { const uint32_t* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint32_t i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +IGNEUM_HD uint32_t mh_word(const uint32_t* cache, uint32_t w) { uint32_t s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.metal b/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.metal new file mode 100644 index 00000000..0e980483 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/memhard.metal @@ -0,0 +1,6771 @@ +#include +using namespace metal; +// Memory-hard dataset core (MEMHARD.md). Cache: 2^26 words in 2^16 segments of 64 chained ChaCha12 lines. +// Item: 8 rounds of (the day's round program + one 64-byte cache read), then round program 8. All parameters are literals. +// Counter ASIC 3.0 item 2 (docs/plans/counter-asic-3-derivation.md): the mixer slots run the day's drawn program, 736 instructions per round +// program (mh_round_0..8), 6624 per item, drawn from the day key stream after the mixer constants (attempt 0, fingerprint 463535d01511350d). +#define MH_CACHE_LINE_MASK 0x003fffffu +#define MH_SEGMENT_LINES 64u +#define MH_QR(a, b, c, d, r1, r2, r3, r4) { a += b; d ^= a; d = mh_rotl(d, r1); c += d; b ^= c; b = mh_rotl(b, r2); a += b; d ^= a; d = mh_rotl(d, r3); c += d; b ^= c; b = mh_rotl(b, r4); } +inline uint mh_rotl(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 at every call site + +// y = ChaCha12 core(x) + x +inline void mh_chacha_block(const thread uint* x, thread uint* y) { + for (uint i = 0u; i < 16u; ++i) y[i] = x[i]; + for (uint r = 0u; r < 6u; ++r) { + MH_QR(y[0], y[4], y[8], y[12], 16u, 12u, 8u, 7u) MH_QR(y[1], y[5], y[9], y[13], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[6], y[10], y[14], 16u, 12u, 8u, 7u) MH_QR(y[3], y[7], y[11], y[15], 16u, 12u, 8u, 7u) + MH_QR(y[0], y[5], y[10], y[15], 16u, 12u, 8u, 7u) MH_QR(y[1], y[6], y[11], y[12], 16u, 12u, 8u, 7u) + MH_QR(y[2], y[7], y[8], y[13], 16u, 12u, 8u, 7u) MH_QR(y[3], y[4], y[9], y[14], 16u, 12u, 8u, 7u) + } + for (uint i = 0u; i < 16u; ++i) y[i] += x[i]; +} + +// One cache segment: 64 chained lines written at cache[seg * 1024]. in_j = prev ^ (sigma || K || seg || j || tag), prev_0 = 0. +inline void mh_cache_segment(device uint* cache, uint seg) { + uint prev[16]; uint x[16]; uint y[16]; + for (uint i = 0u; i < 16u; ++i) prev[i] = 0u; + for (uint j = 0u; j < MH_SEGMENT_LINES; ++j) { + x[0] = 0x61707865u ^ prev[0]; x[1] = 0x3320646eu ^ prev[1]; x[2] = 0x79622d32u ^ prev[2]; x[3] = 0x6b206574u ^ prev[3]; + x[4] = 0x3067619fu ^ prev[4]; + x[5] = 0x3c269176u ^ prev[5]; + x[6] = 0x84a03b03u ^ prev[6]; + x[7] = 0xf8c63294u ^ prev[7]; + x[8] = 0xff977c5bu ^ prev[8]; + x[9] = 0xe60def3eu ^ prev[9]; + x[10] = 0x63630141u ^ prev[10]; + x[11] = 0xb8fbcb58u ^ prev[11]; + x[12] = seg ^ prev[12]; x[13] = j ^ prev[13]; x[14] = 0x49676e65u ^ prev[14]; x[15] = 0x756d4d48u ^ prev[15]; + mh_chacha_block(x, y); + device uint* line = cache + ((seg * MH_SEGMENT_LINES + j) * 16u); + for (uint i = 0u; i < 16u; ++i) { line[i] = y[i]; prev[i] = y[i]; } + } +} + +// M_r: per word (s ^ (RC + rk)) * MUL, then a column round and a diagonal round with the seed-drawn rotations. +inline void mh_mixer(thread uint* s, uint rk) { + s[0] = (s[0] ^ (0xbab68293u + rk)) * 0x42146205u; + s[1] = (s[1] ^ (0xcc162340u + rk)) * 0x52cbe0fbu; + s[2] = (s[2] ^ (0x6ce151ccu + rk)) * 0x7ecf4a03u; + s[3] = (s[3] ^ (0xe62b8997u + rk)) * 0x6728907fu; + s[4] = (s[4] ^ (0xc9c80297u + rk)) * 0xd81d9751u; + s[5] = (s[5] ^ (0xf74a1654u + rk)) * 0x132952c3u; + s[6] = (s[6] ^ (0x3d704af5u + rk)) * 0xf60de277u; + s[7] = (s[7] ^ (0x3cf522b7u + rk)) * 0x05358035u; + s[8] = (s[8] ^ (0x2b9cac04u + rk)) * 0xbaf6499du; + s[9] = (s[9] ^ (0xa880ac10u + rk)) * 0xe4db9667u; + s[10] = (s[10] ^ (0x13e5dd1du + rk)) * 0x3e98f45du; + s[11] = (s[11] ^ (0x6fc3e233u + rk)) * 0xd0004eddu; + s[12] = (s[12] ^ (0x2d83eeacu + rk)) * 0x2691630du; + s[13] = (s[13] ^ (0x9006e8bfu + rk)) * 0x9beb3bcfu; + s[14] = (s[14] ^ (0x2c4b5362u + rk)) * 0xab310379u; + s[15] = (s[15] ^ (0x31b49ee2u + rk)) * 0x99cfb423u; + MH_QR(s[0], s[4], s[8], s[12], 20u, 20u, 19u, 4u) MH_QR(s[1], s[5], s[9], s[13], 20u, 20u, 19u, 4u) + MH_QR(s[2], s[6], s[10], s[14], 20u, 20u, 19u, 4u) MH_QR(s[3], s[7], s[11], s[15], 20u, 20u, 19u, 4u) + MH_QR(s[0], s[5], s[10], s[15], 26u, 3u, 3u, 27u) MH_QR(s[1], s[6], s[11], s[12], 26u, 3u, 3u, 27u) + MH_QR(s[2], s[7], s[8], s[13], 26u, 3u, 3u, 27u) MH_QR(s[3], s[4], s[9], s[14], 26u, 3u, 3u, 27u) +} + +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of mixer + cache line s[0] & mask; final mixer. +// Round program 0: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_0(thread uint* s) { + s[14] = mh_rotl(s[14], 30u) + s[0]; + s[15] *= (s[14] | 1u); + s[6] += s[15] + 0xd9ac4ac1u; + s[3] ^= s[6]; + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[7] ^= s[2]; + s[10] -= s[7]; + s[11] += s[10]; + s[12] *= (s[11] | 1u); + s[4] ^= s[12]; + s[5] = (s[5] ^ s[4]) * 0xbce67fc5u; + s[1] = (s[1] ^ s[5]) * 0xe0fb71bbu; + s[5] -= s[1]; + s[3] += s[5]; + s[10] += s[3]; + s[7] = mh_rotl(s[7] ^ s[10], 5u); + s[0] ^= s[7]; + s[10] ^= s[0]; + s[8] -= s[10]; + s[12] += s[8]; + s[9] += s[12]; + s[12] ^= s[9] ^ 0x891d0a72u; + s[1] -= s[12]; + s[10] ^= s[1] ^ 0x12a9780cu; + s[2] = mh_rotl(s[2] ^ s[10], 27u); + s[11] *= (s[2] | 1u); + s[4] += s[11]; + s[7] ^= (s[4] & s[5]); + s[0] -= s[7]; + s[11] += s[0]; + s[8] -= s[11]; + s[15] += s[8] + 0x8186dd7cu; + s[9] ^= s[15]; + s[12] += s[9]; + s[5] ^= s[12] ^ 0x4a9b0a35u; + s[4] *= (s[5] | 1u); + s[9] += s[4]; + s[12] += s[9]; + s[10] = (s[10] ^ s[12]) * 0xe3385ffdu; + s[11] -= s[10]; + s[9] -= s[11]; + s[13] += s[9] + 0xb72698dbu; + s[1] ^= (s[13] & s[2]); + s[10] = (s[10] ^ s[1]) * 0xcf3e22d7u; + s[12] = (s[12] ^ s[10]) * 0xb28b0e19u; + s[9] += s[12]; + s[1] ^= s[9]; + s[2] *= (s[1] | 1u); + s[7] ^= s[2]; + s[8] ^= (s[7] & s[12]); + s[6] += s[8]; + s[15] = (s[15] ^ s[6]) * 0xee66c1cfu; + s[4] -= s[15]; + s[3] += s[4]; + s[12] = s[12] * 0xd3452a43u + s[3]; + s[0] ^= s[12]; + s[1] *= (s[0] | 1u); + s[12] += s[1] + 0xce692008u; + s[6] ^= (s[12] & s[5]); + s[13] ^= (s[6] & s[15]); + s[7] ^= s[13]; + s[9] += s[7]; + s[12] *= (s[9] | 1u); + s[2] -= s[12]; + s[15] = mh_rotl(s[15], 25u) + s[2]; + s[6] ^= s[15]; + s[13] -= s[6]; + s[7] += (s[13] | s[15]); + s[15] = s[15] * 0x3bb17cedu + s[7]; + s[1] *= (s[15] | 1u); + s[6] = mh_rotl(s[6], 14u) + s[1]; + s[0] = (s[0] ^ s[6]) * 0xbb828911u; + s[3] += s[0] + 0x6593f64cu; + s[5] ^= s[3] ^ 0xff45cfddu; + s[4] ^= s[5]; + s[7] *= (s[4] | 1u); + s[9] ^= s[7]; + s[11] += s[9] + 0x1618a409u; + s[2] *= (s[11] | 1u); + s[15] = (s[15] ^ s[2]) * 0x60c6efedu; + s[11] = mh_rotl(s[11] ^ s[15], 20u); + s[3] ^= s[11] ^ 0x6961fd5au; + s[6] ^= s[3]; + s[2] += s[6]; + s[0] = mh_rotl(s[0] ^ s[2], 19u); + s[5] *= (s[0] | 1u); + s[8] += s[5]; + s[9] ^= s[8]; + s[2] = mh_rotl(s[2] ^ s[9], 7u); + s[0] ^= s[2]; + s[10] ^= s[0]; + s[1] += s[10]; + s[11] += s[1]; + s[9] += s[11]; + s[10] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 3u) + s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[2] = mh_rotl(s[2] ^ s[0], 25u); + s[0] = mh_rotl(s[0], 18u) + s[2]; + s[1] = mh_rotl(s[1], 15u) + s[0]; + s[8] *= (s[1] | 1u); + s[2] -= s[8]; + s[5] = mh_rotl(s[5] ^ s[2], 7u); + s[11] ^= s[5]; + s[8] ^= s[11]; + s[3] ^= s[8] ^ 0xe6be7c09u; + s[4] += (s[3] | s[13]); + s[2] = mh_rotl(s[2] ^ s[4], 13u); + s[15] = mh_rotl(s[15] ^ s[2], 9u); + s[4] = mh_rotl(s[4], 19u) + s[15]; + s[10] = mh_rotl(s[10], 25u) + s[4]; + s[11] *= (s[10] | 1u); + s[7] -= s[11]; + s[2] ^= (s[7] & s[4]); + s[1] = mh_rotl(s[1], 14u) + s[2]; + s[3] *= (s[1] | 1u); + s[0] = s[0] * 0xd9de6c6du + s[3]; + s[12] = (s[12] ^ s[0]) * 0xe3e5b763u; + s[2] = (s[2] ^ s[12]) * 0xa90198efu; + s[6] = mh_rotl(s[6] ^ s[2], 23u); + s[1] *= (s[6] | 1u); + s[2] ^= (s[1] & s[5]); + s[12] -= s[2]; + s[14] += s[12]; + s[8] += (s[14] | s[12]); + s[5] -= s[8]; + s[12] -= s[5]; + s[5] ^= s[12]; + s[2] *= (s[5] | 1u); + s[0] += s[2]; + s[9] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[9]; + s[0] = (s[0] ^ s[5]) * 0x1881452du; + s[10] += s[0] + 0x0da78a3eu; + s[7] -= s[10]; + s[13] = (s[13] ^ s[7]) * 0x97232879u; + s[11] = (s[11] ^ s[13]) * 0xb8dae9a5u; + s[13] = mh_rotl(s[13] ^ s[11], 8u); + s[6] += s[13]; + s[3] *= (s[6] | 1u); + s[6] = mh_rotl(s[6] ^ s[3], 31u); + s[4] ^= s[6]; + s[9] ^= s[4] ^ 0x6b4c4741u; + s[15] = mh_rotl(s[15], 19u) + s[9]; + s[8] ^= s[15] ^ 0x756f820du; + s[1] = mh_rotl(s[1] ^ s[8], 10u); + s[6] -= s[1]; + s[15] = mh_rotl(s[15], 29u) + s[6]; + s[9] = mh_rotl(s[9] ^ s[15], 31u); + s[1] *= (s[9] | 1u); + s[5] ^= s[1]; + s[11] *= (s[5] | 1u); + s[12] += s[11] + 0xee00292du; + s[1] += s[12]; + s[12] ^= s[1] ^ 0x9c50a8acu; + s[13] *= (s[12] | 1u); + s[6] ^= s[13]; + s[10] *= (s[6] | 1u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[0] = (s[0] ^ s[8]) * 0xc53caea3u; + s[12] *= (s[0] | 1u); + s[9] -= s[12]; + s[11] -= s[9]; + s[5] = mh_rotl(s[5], 15u) + s[11]; + s[13] = mh_rotl(s[13] ^ s[5], 21u); + s[2] ^= s[13] ^ 0x84b1978fu; + s[14] += s[2]; + s[3] ^= s[14] ^ 0x05a8c594u; + s[13] += s[3] + 0x54e905a7u; + s[11] ^= s[13]; + s[8] -= s[11]; + s[7] ^= s[8] ^ 0x2244941fu; + s[1] = s[1] * 0xed0aecc5u + s[7]; + s[7] *= (s[1] | 1u); + s[10] = (s[10] ^ s[7]) * 0x4b837a0bu; + s[12] -= s[10]; + s[2] -= s[12]; + s[3] *= (s[2] | 1u); + s[7] *= (s[3] | 1u); + s[12] ^= s[7] ^ 0x5ffe7c51u; + s[15] ^= (s[12] & s[6]); + s[0] = mh_rotl(s[0], 4u) + s[15]; + s[2] = mh_rotl(s[2], 12u) + s[0]; + s[4] -= s[2]; + s[9] -= s[4]; + s[15] ^= s[9]; + s[14] = mh_rotl(s[14], 15u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[14], 4u); + s[8] = mh_rotl(s[8], 12u) + s[1]; + s[2] *= (s[8] | 1u); + s[0] ^= s[2] ^ 0x24e25306u; + s[13] ^= s[0]; + s[7] = mh_rotl(s[7], 14u) + s[13]; + s[12] += s[7]; + s[2] ^= (s[12] & s[7]); + s[9] = mh_rotl(s[9], 4u) + s[2]; + s[8] *= (s[9] | 1u); + s[3] ^= (s[8] & s[5]); + s[8] = (s[8] ^ s[3]) * 0x6cea4323u; + s[13] += s[8]; + s[9] *= (s[13] | 1u); + s[15] *= (s[9] | 1u); + s[1] ^= s[15]; + s[7] -= s[1]; + s[2] += s[7] + 0x188c833fu; + s[14] += s[2] + 0xc33e117au; + s[1] ^= s[14] ^ 0x97c1cf13u; + s[15] = mh_rotl(s[15] ^ s[1], 10u); + s[13] = mh_rotl(s[13] ^ s[15], 25u); + s[9] += s[13]; + s[3] = mh_rotl(s[3], 19u) + s[9]; + s[7] ^= (s[3] & s[15]); + s[13] += s[7]; + s[0] = mh_rotl(s[0], 24u) + s[13]; + s[15] ^= s[0]; + s[11] ^= s[15] ^ 0x8046a7c8u; + s[7] *= (s[11] | 1u); + s[1] ^= s[7]; + s[3] ^= s[1]; + s[6] += s[3]; + s[11] ^= s[6]; + s[9] += (s[11] | s[14]); + s[10] ^= s[9]; + s[7] -= s[10]; + s[4] += s[7]; + s[13] += s[4] + 0x0d609a06u; + s[3] += (s[13] | s[11]); + s[8] += (s[3] | s[6]); + s[13] *= (s[8] | 1u); + s[7] ^= (s[13] & s[6]); + s[14] += s[7]; + s[5] = mh_rotl(s[5] ^ s[14], 17u); + s[14] ^= (s[5] & s[3]); + s[11] += (s[14] | s[0]); + s[4] ^= s[11]; + s[3] ^= s[4] ^ 0x518deaefu; + s[8] *= (s[3] | 1u); + s[13] = mh_rotl(s[13] ^ s[8], 25u); + s[3] = mh_rotl(s[3], 3u) + s[13]; + s[15] = (s[15] ^ s[3]) * 0xf612eda3u; + s[7] = mh_rotl(s[7] ^ s[15], 8u); + s[5] = s[5] * 0x2836c587u + s[7]; + s[14] = s[14] * 0x97e56ca5u + s[5]; + s[9] ^= s[14]; + s[15] = mh_rotl(s[15] ^ s[9], 23u); + s[0] -= s[15]; + s[6] ^= s[0]; + s[4] ^= (s[6] & s[15]); + s[7] ^= s[4]; + s[1] -= s[7]; + s[5] *= (s[1] | 1u); + s[14] ^= s[5]; + s[15] = (s[15] ^ s[14]) * 0x8744e455u; + s[9] += s[15]; + s[3] = mh_rotl(s[3], 1u) + s[9]; + s[8] = s[8] * 0x973da983u + s[3]; + s[11] ^= s[8]; + s[9] ^= s[11]; + s[8] *= (s[9] | 1u); + s[13] += s[8] + 0x57db65d6u; + s[15] *= (s[13] | 1u); + s[14] -= s[15]; + s[1] = (s[1] ^ s[14]) * 0xb9f9718fu; + s[7] = mh_rotl(s[7] ^ s[1], 31u); + s[9] = (s[9] ^ s[7]) * 0x640547efu; + s[11] += s[9]; + s[3] = mh_rotl(s[3], 10u) + s[11]; + s[0] = (s[0] ^ s[3]) * 0xb284d74fu; + s[4] += s[0]; + s[15] += (s[4] | s[11]); + s[9] += s[15] + 0xf4848271u; + s[14] *= (s[9] | 1u); + s[7] += s[14] + 0x9cc79f25u; + s[3] += s[7]; + s[15] = (s[15] ^ s[3]) * 0x89e86eafu; + s[5] += s[15] + 0xd1058324u; + s[6] = (s[6] ^ s[5]) * 0x3a95ce61u; + s[14] -= s[6]; + s[5] ^= s[14]; + s[14] = mh_rotl(s[14], 29u) + s[5]; + s[12] = mh_rotl(s[12], 15u) + s[14]; + s[11] += s[12]; + s[8] *= (s[11] | 1u); + s[15] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[15], 23u); + s[13] ^= s[4]; + s[2] ^= s[13]; + s[4] = (s[4] ^ s[2]) * 0x55b5ed41u; + s[9] ^= s[4]; + s[14] += s[9] + 0x4577e106u; + s[12] *= (s[14] | 1u); + s[7] ^= (s[12] & s[8]); + s[0] = mh_rotl(s[0], 24u) + s[7]; + s[5] += s[0] + 0xe4b59af5u; + s[6] ^= s[5] ^ 0xc95684a6u; + s[2] = mh_rotl(s[2], 15u) + s[6]; + s[3] *= (s[2] | 1u); + s[9] *= (s[3] | 1u); + s[2] ^= (s[9] & s[15]); + s[1] += s[2]; + s[8] = mh_rotl(s[8] ^ s[1], 14u); + s[10] = (s[10] ^ s[8]) * 0xfc3cdd57u; + s[2] -= s[10]; + s[6] += (s[2] | s[1]); + s[7] ^= s[6]; + s[12] ^= s[7]; + s[9] ^= s[12]; + s[13] ^= s[9] ^ 0x7556231du; + s[3] ^= s[13]; + s[0] += (s[3] | s[6]); + s[12] ^= s[0] ^ 0x58f380adu; + s[15] ^= s[12] ^ 0xcf2c5207u; + s[14] = mh_rotl(s[14], 8u) + s[15]; + s[15] *= (s[14] | 1u); + s[6] ^= s[15]; + s[1] *= (s[6] | 1u); + s[13] ^= (s[1] & s[7]); + s[6] ^= s[13]; + s[9] *= (s[6] | 1u); + s[10] += s[9]; + s[15] ^= (s[10] & s[9]); + s[8] *= (s[15] | 1u); + s[3] -= s[8]; + s[6] *= (s[3] | 1u); + s[12] += s[6]; + s[8] += s[12]; + s[14] ^= s[8]; + s[13] += s[14]; + s[1] += s[13] + 0xc57bd1c4u; + s[3] = mh_rotl(s[3], 22u) + s[1]; + s[13] += s[3]; + s[3] ^= s[13] ^ 0x53c4357du; + s[1] = mh_rotl(s[1], 19u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[1], 19u); + s[14] = s[14] * 0xb9e6c0b1u + s[12]; + s[8] -= s[14]; + s[5] -= s[8]; + s[0] ^= s[5]; + s[11] = (s[11] ^ s[0]) * 0xf434e1efu; + s[5] = (s[5] ^ s[11]) * 0x9121d805u; + s[1] += s[5]; + s[11] += (s[1] | s[7]); + s[8] ^= s[11]; + s[7] *= (s[8] | 1u); + s[12] ^= s[7] ^ 0x367f3a0fu; + s[10] ^= s[12] ^ 0x988ad558u; + s[6] ^= s[10] ^ 0xc31a2c66u; + s[11] += s[6] + 0xf44c1a7du; + s[15] ^= (s[11] & s[1]); + s[2] = mh_rotl(s[2] ^ s[15], 14u); + s[3] = mh_rotl(s[3], 3u) + s[2]; + s[9] ^= s[3]; + s[1] *= (s[9] | 1u); + s[5] = (s[5] ^ s[1]) * 0x05e8dea9u; + s[12] += (s[5] | s[11]); + s[13] += s[12]; + s[5] -= s[13]; + s[10] ^= s[5]; + s[4] = (s[4] ^ s[10]) * 0xa49163afu; + s[12] += s[4] + 0xa8c7865du; + s[1] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[1], 28u); + s[3] -= s[14]; + s[15] = (s[15] ^ s[3]) * 0x4481a6a5u; + s[12] = mh_rotl(s[12] ^ s[15], 8u); + s[3] -= s[12]; + s[9] = (s[9] ^ s[3]) * 0x0a8015a5u; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[14] -= s[9]; + s[9] *= (s[14] | 1u); + s[7] *= (s[9] | 1u); + s[1] = s[1] * 0x102d9b67u + s[7]; + s[12] += s[1]; + s[14] *= (s[12] | 1u); + s[6] ^= s[14]; + s[0] += s[6] + 0x633908b4u; + s[6] -= s[0]; + s[0] = mh_rotl(s[0] ^ s[6], 26u); + s[11] = s[11] * 0xa3cfd0bfu + s[0]; + s[14] = mh_rotl(s[14], 13u) + s[11]; + s[3] ^= s[14]; + s[6] = mh_rotl(s[6], 15u) + s[3]; + s[8] ^= s[6] ^ 0xd47945b7u; + s[11] ^= s[8]; + s[14] += s[11]; + s[5] += s[14]; + s[12] = mh_rotl(s[12], 2u) + s[5]; + s[10] *= (s[12] | 1u); + s[1] *= (s[10] | 1u); + s[3] += s[1]; + s[9] = mh_rotl(s[9] ^ s[3], 2u); + s[2] += s[9]; + s[4] ^= s[2]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[11] -= s[13]; + s[8] += s[11]; + s[7] += s[8] + 0xf15c3fd7u; + s[9] ^= s[7]; + s[8] = mh_rotl(s[8] ^ s[9], 29u); + s[7] = (s[7] ^ s[8]) * 0xea581ad3u; + s[14] = mh_rotl(s[14] ^ s[7], 31u); + s[4] = (s[4] ^ s[14]) * 0x7cfc0ccfu; + s[1] = mh_rotl(s[1] ^ s[4], 26u); + s[4] -= s[1]; + s[2] ^= s[4] ^ 0x63b7d83fu; + s[10] ^= s[2]; + s[13] = mh_rotl(s[13] ^ s[10], 13u); + s[15] ^= s[13] ^ 0x5e3fbc23u; + s[7] = mh_rotl(s[7] ^ s[15], 27u); + s[4] = s[4] * 0x0ab4b509u + s[7]; + s[7] = s[7] * 0xcd845e5du + s[4]; + s[3] = mh_rotl(s[3], 11u) + s[7]; + s[15] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[15], 31u); + s[12] = mh_rotl(s[12] ^ s[6], 19u); + s[6] += s[12] + 0xc5e9e33eu; + s[13] ^= s[6] ^ 0x0ee62cbbu; + s[8] = mh_rotl(s[8] ^ s[13], 9u); + s[0] *= (s[8] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[13] += s[10]; + s[7] += s[13] + 0xb255fa09u; + s[14] += s[7]; + s[6] = mh_rotl(s[6], 24u) + s[14]; + s[3] *= (s[6] | 1u); + s[9] *= (s[3] | 1u); + s[3] = (s[3] ^ s[9]) * 0x833bda21u; + s[12] -= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 10u); + s[9] = mh_rotl(s[9], 25u) + s[6]; + s[12] -= s[9]; + s[11] += s[12]; + s[1] = mh_rotl(s[1] ^ s[11], 24u); + s[14] ^= s[1]; + s[2] += (s[14] | s[9]); + s[13] = (s[13] ^ s[2]) * 0x1bbb3967u; + s[0] ^= s[13]; + s[13] ^= s[0] ^ 0x2109f216u; + s[8] *= (s[13] | 1u); + s[4] = mh_rotl(s[4], 23u) + s[8]; + s[9] = s[9] * 0xcdf20df5u + s[4]; + s[0] = s[0] * 0x97687fa1u + s[9]; + s[10] ^= s[0]; + s[2] += s[10]; + s[11] ^= s[2]; + s[12] *= (s[11] | 1u); + s[4] = mh_rotl(s[4] ^ s[12], 25u); + s[10] = mh_rotl(s[10], 28u) + s[4]; + s[0] ^= s[10]; + s[13] -= s[0]; + s[2] = mh_rotl(s[2], 12u) + s[13]; + s[12] *= (s[2] | 1u); + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[8] ^= s[7] ^ 0x250900e2u; + s[3] = mh_rotl(s[3] ^ s[8], 27u); + s[10] += s[3] + 0xa18e04b0u; + s[12] = (s[12] ^ s[10]) * 0x7963ce7bu; + s[1] ^= (s[12] & s[6]); + s[13] = mh_rotl(s[13], 3u) + s[1]; + s[3] = mh_rotl(s[3], 1u) + s[13]; + s[14] -= s[3]; + s[10] ^= s[14]; + s[1] ^= s[10]; + s[5] -= s[1]; + s[2] = mh_rotl(s[2] ^ s[5], 12u); + s[6] *= (s[2] | 1u); + s[11] -= s[6]; + s[9] ^= s[11] ^ 0x69d4cac1u; + s[3] = mh_rotl(s[3], 15u) + s[9]; + s[9] += s[3]; + s[14] = (s[14] ^ s[9]) * 0x00adfa7fu; + s[9] = (s[9] ^ s[14]) * 0x698e49f7u; + s[14] ^= (s[9] & s[6]); + s[4] -= s[14]; + s[5] ^= s[4] ^ 0x558a07eeu; + s[8] += s[5]; + s[9] = s[9] * 0xa25a44b5u + s[8]; + s[13] = mh_rotl(s[13], 12u) + s[9]; + s[1] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[1], 2u); + s[9] ^= s[5]; + s[15] += s[9] + 0x75af4931u; + s[9] += s[15]; + s[6] ^= s[9]; + s[9] *= (s[6] | 1u); + s[7] = (s[7] ^ s[9]) * 0x14d500bbu; + s[4] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 1u) + s[4]; + s[9] *= (s[7] | 1u); + s[10] ^= s[9]; + s[12] += s[10]; + s[2] = s[2] * 0x114aee2du + s[12]; + s[0] ^= s[2]; + s[10] += s[0]; + s[8] *= (s[10] | 1u); + s[14] = (s[14] ^ s[8]) * 0x9aaa1821u; + s[3] ^= s[14]; + s[1] = mh_rotl(s[1] ^ s[3], 14u); + s[0] += s[1]; + s[14] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[14], 2u); + s[1] ^= s[11]; + s[3] += s[1]; + s[5] = mh_rotl(s[5] ^ s[3], 28u); + s[12] ^= s[5]; + s[10] ^= s[12] ^ 0xcf112b3eu; + s[12] = mh_rotl(s[12], 17u) + s[10]; + s[8] += s[12] + 0xa0423d55u; + s[12] -= s[8]; + s[4] -= s[12]; + s[14] -= s[4]; + s[0] += s[14]; + s[2] *= (s[0] | 1u); + s[8] ^= s[2]; + s[10] ^= s[8]; + s[4] += s[10] + 0x0e0a85c9u; + s[2] += s[4] + 0x5aa11787u; + s[9] += s[2] + 0xbc33a8acu; + s[1] = mh_rotl(s[1], 2u) + s[9]; + s[11] = (s[11] ^ s[1]) * 0x5ab0da6du; + s[10] = (s[10] ^ s[11]) * 0xfa4adf2du; + s[2] -= s[10]; + s[10] -= s[2]; + s[2] ^= s[10]; + s[1] += s[2]; + s[6] = mh_rotl(s[6], 6u) + s[1]; + s[3] += s[6]; + s[9] ^= s[3] ^ 0xc19b7470u; + s[12] *= (s[9] | 1u); + s[14] += (s[12] | s[15]); + s[5] = (s[5] ^ s[14]) * 0x6790286fu; + s[15] ^= s[5]; + s[10] -= s[15]; + s[13] += (s[10] | s[3]); + s[2] *= (s[13] | 1u); + s[7] += (s[2] | s[13]); + s[2] += s[7]; + s[11] += s[2]; + s[1] *= (s[11] | 1u); + s[13] += s[1] + 0x9c1bdb18u; + s[5] ^= (s[13] & s[1]); + s[13] += s[5]; + s[14] ^= s[13]; + s[0] += (s[14] | s[13]); + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[7] += s[6]; + s[9] ^= (s[7] & s[0]); + s[15] = (s[15] ^ s[9]) * 0x63348941u; + s[13] ^= s[15]; + s[10] += s[13]; + s[14] = (s[14] ^ s[10]) * 0x04d19b2fu; + s[2] *= (s[14] | 1u); + s[13] -= s[2]; + s[15] -= s[13]; + s[6] += (s[15] | s[12]); + s[14] += s[6] + 0x331d9e99u; + s[1] = mh_rotl(s[1], 24u) + s[14]; + s[2] = s[2] * 0xf02184e1u + s[1]; + s[12] += s[2]; + s[4] = (s[4] ^ s[12]) * 0xa250e449u; + s[2] *= (s[4] | 1u); + s[11] ^= s[2] ^ 0x6c4530fdu; + s[2] = mh_rotl(s[2], 10u) + s[11]; + s[6] *= (s[2] | 1u); + s[0] += (s[6] | s[7]); + s[6] = (s[6] ^ s[0]) * 0x678da095u; + s[14] = mh_rotl(s[14] ^ s[6], 30u); + s[3] = (s[3] ^ s[14]) * 0x3b065e11u; + s[8] += (s[3] | s[13]); + s[0] += s[8] + 0xd1214021u; + s[12] -= s[0]; + s[4] ^= s[12] ^ 0x2ae728adu; + s[0] = mh_rotl(s[0] ^ s[4], 11u); + s[2] = mh_rotl(s[2], 23u) + s[0]; + s[4] = mh_rotl(s[4] ^ s[2], 19u); + s[15] *= (s[4] | 1u); + s[8] = mh_rotl(s[8] ^ s[15], 4u); + s[12] = (s[12] ^ s[8]) * 0x32cf5655u; + s[7] = (s[7] ^ s[12]) * 0xc97ab55fu; + s[15] *= (s[7] | 1u); + s[13] = s[13] * 0xc3424c27u + s[15]; + s[3] *= (s[13] | 1u); + s[13] = s[13] * 0x8b172941u + s[3]; + s[5] = mh_rotl(s[5], 5u) + s[13]; + s[6] ^= s[5]; + s[4] = (s[4] ^ s[6]) * 0xd1833353u; + s[5] = mh_rotl(s[5] ^ s[4], 10u); + s[11] = mh_rotl(s[11], 4u) + s[5]; + s[7] = (s[7] ^ s[11]) * 0x81b253dbu; + s[11] += s[7]; + s[8] = mh_rotl(s[8], 30u) + s[11]; + s[6] ^= s[8]; + s[5] = mh_rotl(s[5], 30u) + s[6]; + s[1] += s[5]; + s[10] += s[1] + 0xc388fc9cu; + s[9] ^= s[10]; + s[7] += (s[9] | s[10]); + s[11] += s[7]; + s[14] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[14], 21u); + s[11] -= s[15]; + s[8] ^= s[11]; + s[6] ^= s[8]; + s[13] ^= s[6]; + s[7] += (s[13] | s[4]); + s[9] ^= s[7]; + s[0] += s[9]; + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 3u); + s[8] = s[8] * 0x229aeb39u + s[5]; + s[1] -= s[8]; + s[0] += s[1]; + s[13] += (s[0] | s[7]); + s[15] = (s[15] ^ s[13]) * 0x878a1a07u; + s[12] += s[15]; + s[14] ^= s[12]; + s[13] -= s[14]; + s[10] ^= s[13] ^ 0x3937b9cbu; + s[3] = mh_rotl(s[3], 29u) + s[10]; + s[1] += s[3] + 0x1698a660u; + s[2] = (s[2] ^ s[1]) * 0x20fad729u; + s[5] ^= s[2] ^ 0xe9e6778au; + s[10] += s[5] + 0xdaa6b74du; + s[3] *= (s[10] | 1u); + s[1] += (s[3] | s[6]); + s[15] = s[15] * 0xc0ee8651u + s[1]; + s[2] += s[15] + 0xbf9a18d6u; + s[6] += s[2] + 0xe0a7457eu; + s[10] ^= s[6]; + s[5] ^= s[10]; + s[4] ^= s[5] ^ 0x2b72d900u; + s[5] = mh_rotl(s[5] ^ s[4], 2u); + s[4] = mh_rotl(s[4] ^ s[5], 7u); + s[10] = mh_rotl(s[10], 13u) + s[4]; + s[3] += (s[10] | s[4]); + s[9] += (s[3] | s[2]); + s[10] ^= s[9]; + s[13] ^= (s[10] & s[8]); + s[8] = mh_rotl(s[8], 11u) + s[13]; + s[4] += (s[8] | s[3]); + s[15] = mh_rotl(s[15] ^ s[4], 21u); + s[4] ^= s[15]; + s[1] ^= s[4]; + s[11] += s[1] + 0x0fb942e8u; + s[9] += (s[11] | s[0]); + s[10] = (s[10] ^ s[9]) * 0xf4ac3c9bu; + s[8] = mh_rotl(s[8] ^ s[10], 21u); + s[15] = mh_rotl(s[15] ^ s[8], 25u); + s[12] = mh_rotl(s[12] ^ s[15], 31u); + s[1] *= (s[12] | 1u); + s[15] += s[1] + 0xad836925u; + s[4] = mh_rotl(s[4], 29u) + s[15]; + s[1] = mh_rotl(s[1] ^ s[4], 2u); + s[5] ^= s[1]; + s[6] -= s[5]; + s[10] -= s[6]; + s[9] *= (s[10] | 1u); + s[5] = mh_rotl(s[5], 13u) + s[9]; + s[7] ^= s[5] ^ 0xa8c7112du; + s[15] += (s[7] | s[2]); + s[11] = mh_rotl(s[11], 5u) + s[15]; + s[6] += (s[11] | s[5]); + s[12] = mh_rotl(s[12] ^ s[6], 25u); + s[6] ^= s[12] ^ 0xa8a8a54fu; + s[13] += s[6]; + s[1] *= (s[13] | 1u); + s[8] *= (s[1] | 1u); + s[12] += s[8]; + s[6] = (s[6] ^ s[12]) * 0x138d287fu; + s[5] = mh_rotl(s[5] ^ s[6], 4u); + s[13] = mh_rotl(s[13], 19u) + s[5]; + s[4] = mh_rotl(s[4], 18u) + s[13]; + s[13] += s[4] + 0x47783811u; + s[3] = s[3] * 0x3cb23963u + s[13]; + s[14] -= s[3]; + s[10] += s[14]; + s[2] ^= s[10]; + s[12] ^= s[2] ^ 0x70bcebd6u; + s[3] += s[12]; + s[8] = mh_rotl(s[8], 25u) + s[3]; + s[9] -= s[8]; + s[12] ^= s[9]; + s[0] = mh_rotl(s[0] ^ s[12], 7u); + s[6] = mh_rotl(s[6] ^ s[0], 19u); + s[2] ^= s[6]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[7] = (s[7] ^ s[11]) * 0x991f0089u; + s[3] -= s[7]; + s[10] = mh_rotl(s[10], 12u) + s[3]; + s[6] ^= s[10]; + s[12] += s[6]; + s[0] -= s[12]; + s[5] ^= s[0]; + s[2] = mh_rotl(s[2], 5u) + s[5]; + s[3] -= s[2]; + s[0] += s[3] + 0x84500e17u; + s[1] ^= s[0]; + s[15] *= (s[1] | 1u); + s[6] += s[15]; + s[5] = mh_rotl(s[5], 1u) + s[6]; + s[13] ^= s[5] ^ 0x32e6a4b0u; + s[1] -= s[13]; + s[0] += s[1]; + s[7] += s[0]; + s[15] = (s[15] ^ s[7]) * 0xde51d36bu; + s[12] += s[15]; + s[11] ^= s[12] ^ 0x085d7e04u; + s[7] = mh_rotl(s[7] ^ s[11], 29u); + s[9] = mh_rotl(s[9], 10u) + s[7]; + s[3] ^= s[9]; + s[1] ^= s[3] ^ 0xe20c8a44u; + s[6] += s[1]; + s[0] ^= s[6]; + s[11] = mh_rotl(s[11], 29u) + s[0]; + s[13] = mh_rotl(s[13] ^ s[11], 3u); + s[4] = s[4] * 0x53fa87a7u + s[13]; + s[15] = mh_rotl(s[15] ^ s[4], 13u); + s[13] ^= s[15] ^ 0xbaf52e15u; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[11] ^= s[1] ^ 0x16b5024au; + s[6] += s[11] + 0x712948feu; + s[15] += s[6]; + s[10] *= (s[15] | 1u); + s[0] -= s[10]; + s[11] ^= s[0]; + s[12] += (s[11] | s[1]); + s[14] -= s[12]; + s[0] -= s[14]; + s[9] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[9], 1u); + s[14] = (s[14] ^ s[15]) * 0x97b15c85u; + s[8] -= s[14]; +} +// Round program 1: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_1(thread uint* s) { + s[14] = mh_rotl(s[14] ^ s[0], 17u); + s[12] = (s[12] ^ s[14]) * 0xa6ee330du; + s[2] += s[12]; + s[1] = s[1] * 0x0ce4bf05u + s[2]; + s[5] = mh_rotl(s[5], 20u) + s[1]; + s[15] = mh_rotl(s[15], 15u) + s[5]; + s[7] ^= s[15]; + s[2] -= s[7]; + s[0] = mh_rotl(s[0] ^ s[2], 17u); + s[3] += s[0]; + s[9] = mh_rotl(s[9], 23u) + s[3]; + s[5] -= s[9]; + s[4] -= s[5]; + s[13] += s[4] + 0x1663e8c2u; + s[11] ^= s[13] ^ 0x6188ab5cu; + s[1] *= (s[11] | 1u); + s[13] -= s[1]; + s[10] += s[13]; + s[7] -= s[10]; + s[11] = s[11] * 0x0909c327u + s[7]; + s[8] ^= s[11]; + s[7] ^= s[8] ^ 0x82d87f23u; + s[13] = (s[13] ^ s[7]) * 0x5c48c9c7u; + s[1] ^= s[13]; + s[3] ^= s[1]; + s[2] = mh_rotl(s[2] ^ s[3], 8u); + s[8] = mh_rotl(s[8], 1u) + s[2]; + s[2] = mh_rotl(s[2] ^ s[8], 22u); + s[7] = (s[7] ^ s[2]) * 0x8d7cb2a9u; + s[6] -= s[7]; + s[8] = (s[8] ^ s[6]) * 0xac42e56du; + s[15] ^= s[8]; + s[2] ^= (s[15] & s[8]); + s[14] += s[2]; + s[5] += s[14]; + s[10] *= (s[5] | 1u); + s[13] += s[10] + 0xded20149u; + s[4] ^= s[13]; + s[14] ^= (s[4] & s[10]); + s[9] += s[14] + 0xe78db039u; + s[10] *= (s[9] | 1u); + s[8] ^= s[10] ^ 0x042fcfe9u; + s[2] += s[8]; + s[7] -= s[2]; + s[9] ^= s[7]; + s[8] ^= s[9]; + s[0] -= s[8]; + s[13] = mh_rotl(s[13] ^ s[0], 2u); + s[4] = mh_rotl(s[4] ^ s[13], 23u); + s[3] -= s[4]; + s[11] ^= s[3]; + s[1] *= (s[11] | 1u); + s[14] -= s[1]; + s[3] *= (s[14] | 1u); + s[10] = mh_rotl(s[10], 31u) + s[3]; + s[11] += s[10]; + s[7] -= s[11]; + s[15] += (s[7] | s[2]); + s[12] ^= s[15] ^ 0x57a179c1u; + s[8] -= s[12]; + s[1] ^= s[8] ^ 0xcb23a9b1u; + s[2] = mh_rotl(s[2], 7u) + s[1]; + s[4] -= s[2]; + s[14] ^= s[4] ^ 0x076e00fdu; + s[5] = mh_rotl(s[5] ^ s[14], 3u); + s[9] = mh_rotl(s[9], 22u) + s[5]; + s[6] += s[9]; + s[13] = mh_rotl(s[13] ^ s[6], 2u); + s[10] += s[13]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[11] ^= s[9]; + s[15] ^= s[11]; + s[2] += s[15]; + s[14] = (s[14] ^ s[2]) * 0x7017bcdfu; + s[9] -= s[14]; + s[12] = mh_rotl(s[12] ^ s[9], 11u); + s[3] ^= s[12]; + s[8] += (s[3] | s[0]); + s[13] ^= s[8] ^ 0xb6656cfeu; + s[11] ^= s[13] ^ 0x118ac00bu; + s[8] = (s[8] ^ s[11]) * 0x3da3f311u; + s[4] = (s[4] ^ s[8]) * 0x1d6af721u; + s[12] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[11] *= (s[10] | 1u); + s[0] *= (s[11] | 1u); + s[11] *= (s[0] | 1u); + s[4] ^= s[11]; + s[14] ^= s[4]; + s[11] = mh_rotl(s[11], 27u) + s[14]; + s[2] ^= (s[11] & s[5]); + s[11] -= s[2]; + s[10] *= (s[11] | 1u); + s[9] = mh_rotl(s[9], 21u) + s[10]; + s[7] ^= s[9]; + s[2] += s[7] + 0x72228b15u; + s[13] ^= (s[2] & s[1]); + s[7] = mh_rotl(s[7], 25u) + s[13]; + s[4] = (s[4] ^ s[7]) * 0x12e611dbu; + s[15] ^= (s[4] & s[2]); + s[1] += (s[15] | s[10]); + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0x4b034585u; + s[1] += s[2]; + s[13] ^= s[1] ^ 0x03c7fc79u; + s[9] ^= (s[13] & s[7]); + s[11] += s[9] + 0xf9b5cff0u; + s[10] = mh_rotl(s[10] ^ s[11], 4u); + s[11] = s[11] * 0x5aaa11f7u + s[10]; + s[2] -= s[11]; + s[1] ^= s[2]; + s[5] = mh_rotl(s[5] ^ s[1], 30u); + s[12] ^= s[5]; + s[8] ^= (s[12] & s[15]); + s[4] = s[4] * 0x32c2f11bu + s[8]; + s[8] = (s[8] ^ s[4]) * 0x8c725c57u; + s[3] += s[8] + 0x16517d85u; + s[2] ^= s[3]; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[2] = mh_rotl(s[2], 9u) + s[0]; + s[8] -= s[2]; + s[14] += s[8] + 0x3d1690b9u; + s[8] ^= s[14] ^ 0xfd404591u; + s[5] = mh_rotl(s[5], 14u) + s[8]; + s[15] = mh_rotl(s[15] ^ s[5], 28u); + s[7] ^= s[15]; + s[13] ^= s[7] ^ 0x1c120483u; + s[2] ^= (s[13] & s[14]); + s[6] ^= s[2]; + s[10] = (s[10] ^ s[6]) * 0x4fd29dfdu; + s[3] += s[10]; + s[10] ^= s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 25u); + s[2] = s[2] * 0x8eebc38du + s[14]; + s[5] -= s[2]; + s[14] = mh_rotl(s[14] ^ s[5], 7u); + s[9] -= s[14]; + s[14] = s[14] * 0xea014a2fu + s[9]; + s[9] ^= (s[14] & s[12]); + s[8] ^= s[9]; + s[10] = s[10] * 0xdffcece9u + s[8]; + s[11] -= s[10]; + s[9] ^= s[11]; + s[5] = (s[5] ^ s[9]) * 0xb0f7c285u; + s[2] ^= s[5]; + s[7] ^= s[2]; + s[11] ^= s[7]; + s[3] *= (s[11] | 1u); + s[8] += (s[3] | s[6]); + s[0] ^= s[8] ^ 0x0be40c24u; + s[1] = mh_rotl(s[1], 14u) + s[0]; + s[9] -= s[1]; + s[4] += s[9]; + s[12] -= s[4]; + s[8] += s[12]; + s[13] ^= s[8]; + s[8] -= s[13]; + s[15] += s[8]; + s[10] = mh_rotl(s[10] ^ s[15], 11u); + s[4] ^= s[10]; + s[0] *= (s[4] | 1u); + s[3] += s[0]; + s[12] += s[3]; + s[10] ^= s[12] ^ 0x7646e0a4u; + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[7] = mh_rotl(s[7], 13u) + s[8]; + s[6] ^= (s[7] & s[15]); + s[1] += (s[6] | s[0]); + s[3] = mh_rotl(s[3], 27u) + s[1]; + s[12] ^= s[3]; + s[1] = s[1] * 0xe296889du + s[12]; + s[7] = mh_rotl(s[7], 6u) + s[1]; + s[5] += s[7]; + s[2] = (s[2] ^ s[5]) * 0xe5c22b4fu; + s[15] += s[2] + 0x31507e5eu; + s[3] += s[15]; + s[1] += s[3] + 0xa943282bu; + s[4] ^= (s[1] & s[11]); + s[10] += s[4]; + s[4] ^= (s[10] & s[5]); + s[1] += s[4]; + s[6] += s[1]; + s[13] ^= s[6]; + s[8] ^= s[13]; + s[2] = (s[2] ^ s[8]) * 0x6ff7b6c9u; + s[13] += (s[2] | s[5]); + s[12] ^= s[13] ^ 0xd6ce983fu; + s[4] ^= s[12]; + s[3] *= (s[4] | 1u); + s[10] += (s[3] | s[7]); + s[2] += s[10]; + s[14] ^= (s[2] & s[7]); + s[5] = s[5] * 0xa23d13c7u + s[14]; + s[8] += s[5] + 0xeba888dcu; + s[15] ^= s[8]; + s[2] ^= s[15] ^ 0x40a0fb0au; + s[9] = mh_rotl(s[9], 7u) + s[2]; + s[0] ^= s[9]; + s[12] -= s[0]; + s[11] *= (s[12] | 1u); + s[5] += s[11] + 0x56f2d848u; + s[14] ^= (s[5] & s[15]); + s[7] = (s[7] ^ s[14]) * 0x1897fa79u; + s[14] = (s[14] ^ s[7]) * 0x0baf4813u; + s[15] *= (s[14] | 1u); + s[3] ^= (s[15] & s[7]); + s[10] -= s[3]; + s[4] ^= s[10]; + s[11] = (s[11] ^ s[4]) * 0x7df27859u; + s[7] *= (s[11] | 1u); + s[4] += s[7] + 0x3fc46fd8u; + s[6] = mh_rotl(s[6], 11u) + s[4]; + s[2] ^= s[6]; + s[13] += s[2]; + s[12] -= s[13]; + s[5] = mh_rotl(s[5] ^ s[12], 18u); + s[15] ^= (s[5] & s[12]); + s[11] *= (s[15] | 1u); + s[8] += s[11]; + s[14] *= (s[8] | 1u); + s[8] += s[14]; + s[1] -= s[8]; + s[10] = mh_rotl(s[10], 18u) + s[1]; + s[4] ^= s[10]; + s[2] += s[4]; + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[13] += s[1]; + s[4] -= s[13]; + s[9] *= (s[4] | 1u); + s[6] -= s[9]; + s[3] = (s[3] ^ s[6]) * 0x6d6488c7u; + s[7] += (s[3] | s[10]); + s[12] ^= s[7]; + s[14] -= s[12]; + s[4] ^= s[14]; + s[10] += s[4]; + s[7] += s[10]; + s[15] += (s[7] | s[2]); + s[1] = mh_rotl(s[1], 8u) + s[15]; + s[5] += s[1]; + s[12] = mh_rotl(s[12], 1u) + s[5]; + s[3] *= (s[12] | 1u); + s[6] ^= s[3] ^ 0xada02894u; + s[3] -= s[6]; + s[6] = mh_rotl(s[6] ^ s[3], 16u); + s[5] ^= s[6] ^ 0xeafee980u; + s[8] ^= s[5] ^ 0x00dbe804u; + s[10] = mh_rotl(s[10] ^ s[8], 5u); + s[2] *= (s[10] | 1u); + s[6] = mh_rotl(s[6] ^ s[2], 31u); + s[4] = mh_rotl(s[4] ^ s[6], 28u); + s[7] = s[7] * 0x16a2fd0bu + s[4]; + s[11] -= s[7]; + s[2] = mh_rotl(s[2] ^ s[11], 20u); + s[1] ^= (s[2] & s[12]); + s[3] *= (s[1] | 1u); + s[12] *= (s[3] | 1u); + s[15] ^= s[12]; + s[12] += s[15]; + s[10] -= s[12]; + s[3] += s[10]; + s[13] += s[3]; + s[4] = mh_rotl(s[4], 14u) + s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 2u); + s[8] += s[10]; + s[9] ^= s[8]; + s[7] = mh_rotl(s[7] ^ s[9], 11u); + s[9] -= s[7]; + s[11] -= s[9]; + s[5] -= s[11]; + s[3] = s[3] * 0x7d5e197du + s[5]; + s[9] *= (s[3] | 1u); + s[14] = mh_rotl(s[14], 8u) + s[9]; + s[11] += s[14] + 0xa3dd86d5u; + s[8] ^= s[11]; + s[2] -= s[8]; + s[5] *= (s[2] | 1u); + s[1] ^= s[5]; + s[12] ^= s[1]; + s[4] = mh_rotl(s[4] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 14u) + s[4]; + s[4] += (s[8] | s[15]); + s[3] = mh_rotl(s[3] ^ s[4], 2u); + s[2] ^= s[3]; + s[9] = mh_rotl(s[9], 12u) + s[2]; + s[12] ^= s[9] ^ 0x33fd48ccu; + s[13] *= (s[12] | 1u); + s[3] += s[13]; + s[8] -= s[3]; + s[10] ^= (s[8] & s[7]); + s[15] ^= s[10] ^ 0xd3ffcb52u; + s[3] += s[15] + 0xd8cfcd30u; + s[0] = (s[0] ^ s[3]) * 0x013282f1u; + s[8] += s[0]; + s[4] ^= (s[8] & s[7]); + s[15] ^= s[4] ^ 0xd8b2262cu; + s[4] ^= s[15]; + s[0] ^= s[4]; + s[14] += s[0]; + s[1] += s[14]; + s[0] ^= s[1]; + s[14] += s[0]; + s[4] ^= s[14]; + s[11] *= (s[4] | 1u); + s[7] += s[11]; + s[2] = (s[2] ^ s[7]) * 0xb04d6739u; + s[12] ^= s[2]; + s[15] -= s[12]; + s[9] -= s[15]; + s[15] = (s[15] ^ s[9]) * 0x806e4757u; + s[2] = mh_rotl(s[2] ^ s[15], 26u); + s[4] ^= s[2] ^ 0x5da3ddfau; + s[14] *= (s[4] | 1u); + s[1] ^= s[14]; + s[14] = mh_rotl(s[14], 4u) + s[1]; + s[15] *= (s[14] | 1u); + s[4] = (s[4] ^ s[15]) * 0x8339a46bu; + s[13] -= s[4]; + s[1] += s[13] + 0x89cedf01u; + s[15] ^= (s[1] & s[2]); + s[5] -= s[15]; + s[4] ^= s[5]; + s[0] ^= s[4] ^ 0x659daf23u; + s[9] = mh_rotl(s[9] ^ s[0], 31u); + s[4] *= (s[9] | 1u); + s[3] ^= s[4]; + s[2] = mh_rotl(s[2], 25u) + s[3]; + s[1] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[1] *= (s[2] | 1u); + s[10] = mh_rotl(s[10] ^ s[1], 18u); + s[2] = mh_rotl(s[2] ^ s[10], 22u); + s[12] = mh_rotl(s[12], 2u) + s[2]; + s[6] ^= s[12] ^ 0xf3967aefu; + s[5] ^= s[6]; + s[11] += (s[5] | s[3]); + s[13] -= s[11]; + s[2] += (s[13] | s[12]); + s[10] ^= s[2]; + s[7] -= s[10]; + s[2] = mh_rotl(s[2] ^ s[7], 1u); + s[1] += s[2]; + s[7] = mh_rotl(s[7], 2u) + s[1]; + s[10] ^= s[7]; + s[11] ^= (s[10] & s[12]); + s[3] = mh_rotl(s[3] ^ s[11], 22u); + s[12] += s[3]; + s[8] ^= s[12] ^ 0xd1018d15u; + s[6] ^= s[8]; + s[13] = s[13] * 0xad1ff569u + s[6]; + s[9] = s[9] * 0xa7473da7u + s[13]; + s[4] ^= s[9]; + s[2] *= (s[4] | 1u); + s[7] = mh_rotl(s[7] ^ s[2], 7u); + s[9] = mh_rotl(s[9] ^ s[7], 2u); + s[14] *= (s[9] | 1u); + s[11] ^= s[14]; + s[6] += s[11] + 0x02da7647u; + s[13] ^= s[6]; + s[12] += s[13]; + s[6] = mh_rotl(s[6], 4u) + s[12]; + s[0] = mh_rotl(s[0], 17u) + s[6]; + s[6] = mh_rotl(s[6] ^ s[0], 16u); + s[5] *= (s[6] | 1u); + s[14] = (s[14] ^ s[5]) * 0x631860bdu; + s[7] ^= s[14] ^ 0xfd80e869u; + s[6] *= (s[7] | 1u); + s[14] = mh_rotl(s[14] ^ s[6], 28u); + s[1] += s[14]; + s[12] -= s[1]; + s[10] = mh_rotl(s[10], 24u) + s[12]; + s[12] ^= s[10] ^ 0x923e2dd8u; + s[6] = (s[6] ^ s[12]) * 0xd1c8662bu; + s[11] = (s[11] ^ s[6]) * 0x7f1579abu; + s[1] *= (s[11] | 1u); + s[12] *= (s[1] | 1u); + s[0] += (s[12] | s[15]); + s[12] ^= (s[0] & s[5]); + s[13] = mh_rotl(s[13], 3u) + s[12]; + s[12] *= (s[13] | 1u); + s[0] += s[12]; + s[8] += s[0] + 0x20b00217u; + s[14] = (s[14] ^ s[8]) * 0xf9d426ffu; + s[2] *= (s[14] | 1u); + s[10] += s[2]; + s[2] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[2], 29u); + s[0] = mh_rotl(s[0] ^ s[14], 8u); + s[8] = (s[8] ^ s[0]) * 0x1108ba07u; + s[14] += s[8]; + s[5] += s[14]; + s[15] += s[5]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x135192c5u; + s[14] += s[5] + 0x4e9e6ad1u; + s[5] += s[14]; + s[7] += s[5]; + s[1] = (s[1] ^ s[7]) * 0x6babe5ddu; + s[10] ^= s[1]; + s[2] = mh_rotl(s[2], 11u) + s[10]; + s[1] ^= s[2]; + s[6] = mh_rotl(s[6], 15u) + s[1]; + s[12] ^= s[6]; + s[7] *= (s[12] | 1u); + s[8] = mh_rotl(s[8], 16u) + s[7]; + s[3] ^= s[8]; + s[13] += (s[3] | s[0]); + s[10] ^= s[13]; + s[2] ^= s[10]; + s[1] *= (s[2] | 1u); + s[8] = mh_rotl(s[8] ^ s[1], 1u); + s[15] = (s[15] ^ s[8]) * 0xfa9fbf2du; + s[3] ^= s[15]; + s[11] ^= s[3] ^ 0x545738b5u; + s[12] = mh_rotl(s[12], 26u) + s[11]; + s[1] = mh_rotl(s[1], 7u) + s[12]; + s[11] = mh_rotl(s[11] ^ s[1], 4u); + s[0] = mh_rotl(s[0], 8u) + s[11]; + s[2] ^= s[0] ^ 0xaacb0afeu; + s[9] += s[2]; + s[6] += s[9]; + s[13] ^= s[6] ^ 0x443ac86au; + s[3] += s[13]; + s[6] = mh_rotl(s[6], 12u) + s[3]; + s[9] ^= s[6] ^ 0x8fa27e45u; + s[14] = mh_rotl(s[14] ^ s[9], 15u); + s[4] = mh_rotl(s[4] ^ s[14], 20u); + s[5] += s[4]; + s[6] = mh_rotl(s[6], 12u) + s[5]; + s[15] = (s[15] ^ s[6]) * 0x6fbcddebu; + s[8] -= s[15]; + s[15] += s[8]; + s[4] += s[15]; + s[12] -= s[4]; + s[8] += s[12]; + s[2] += (s[8] | s[6]); + s[6] = (s[6] ^ s[2]) * 0xb3985295u; + s[0] = mh_rotl(s[0] ^ s[6], 27u); + s[4] += s[0] + 0x56dea41du; + s[13] *= (s[4] | 1u); + s[15] -= s[13]; + s[0] += s[15] + 0x3a8c7806u; + s[12] ^= s[0] ^ 0xa154fcc4u; + s[4] = (s[4] ^ s[12]) * 0xef91a6cbu; + s[10] = (s[10] ^ s[4]) * 0xfb043751u; + s[12] += s[10]; + s[9] *= (s[12] | 1u); + s[15] += (s[9] | s[1]); + s[11] = mh_rotl(s[11], 1u) + s[15]; + s[4] = (s[4] ^ s[11]) * 0x1647a845u; + s[2] -= s[4]; + s[14] ^= s[2] ^ 0x6cf9afaeu; + s[7] -= s[14]; + s[9] = (s[9] ^ s[7]) * 0x0b925217u; + s[2] = mh_rotl(s[2] ^ s[9], 6u); + s[12] = (s[12] ^ s[2]) * 0x063f86d7u; + s[1] ^= s[12]; + s[11] += s[1]; + s[4] ^= s[11]; + s[0] ^= (s[4] & s[11]); + s[9] += s[0]; + s[14] = mh_rotl(s[14], 1u) + s[9]; + s[9] ^= s[14]; + s[12] += s[9]; + s[9] = mh_rotl(s[9] ^ s[12], 5u); + s[15] += (s[9] | s[7]); + s[14] += s[15] + 0x720a9418u; + s[0] -= s[14]; + s[3] = (s[3] ^ s[0]) * 0x3b661535u; + s[0] -= s[3]; + s[2] += s[0]; + s[11] = mh_rotl(s[11] ^ s[2], 28u); + s[7] -= s[11]; + s[1] ^= s[7]; + s[2] = mh_rotl(s[2] ^ s[1], 28u); + s[14] -= s[2]; + s[0] -= s[14]; + s[10] += s[0]; + s[3] = mh_rotl(s[3] ^ s[10], 5u); + s[1] = mh_rotl(s[1], 15u) + s[3]; + s[13] ^= (s[1] & s[3]); + s[5] += s[13]; + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[11] = s[11] * 0xb072cb67u + s[10]; + s[6] = mh_rotl(s[6], 23u) + s[11]; + s[0] = mh_rotl(s[0] ^ s[6], 30u); + s[7] = mh_rotl(s[7], 2u) + s[0]; + s[5] = mh_rotl(s[5], 13u) + s[7]; + s[11] = mh_rotl(s[11] ^ s[5], 29u); + s[7] *= (s[11] | 1u); + s[8] ^= (s[7] & s[15]); + s[5] += s[8]; + s[14] = (s[14] ^ s[5]) * 0xadb08c77u; + s[7] = (s[7] ^ s[14]) * 0x9b7a1549u; + s[5] ^= (s[7] & s[9]); + s[9] += s[5]; + s[7] += s[9] + 0x31c29969u; + s[9] ^= s[7]; + s[12] = (s[12] ^ s[9]) * 0x1b53dc25u; + s[14] += s[12]; + s[13] -= s[14]; + s[5] = s[5] * 0x1411b229u + s[13]; + s[12] += (s[5] | s[1]); + s[8] ^= s[12]; + s[6] -= s[8]; + s[5] -= s[6]; + s[15] -= s[5]; + s[9] += s[15]; + s[8] ^= s[9]; + s[5] += s[8]; + s[4] += s[5]; + s[0] = (s[0] ^ s[4]) * 0x54b6241fu; + s[5] ^= s[0]; + s[4] = mh_rotl(s[4], 1u) + s[5]; + s[15] += s[4]; + s[7] = (s[7] ^ s[15]) * 0x65b59741u; + s[11] += s[7]; + s[2] += s[11]; + s[9] += s[2]; + s[0] -= s[9]; + s[5] -= s[0]; + s[9] ^= s[5]; + s[14] = mh_rotl(s[14] ^ s[9], 13u); + s[10] = s[10] * 0xf978f191u + s[14]; + s[12] += s[10]; + s[4] += s[12]; + s[7] ^= s[4]; + s[12] ^= s[7]; + s[10] += (s[12] | s[13]); + s[1] ^= s[10] ^ 0x79536ee2u; + s[15] -= s[1]; + s[13] = (s[13] ^ s[15]) * 0xaaf42111u; + s[11] += s[13] + 0xd935a555u; + s[1] = mh_rotl(s[1], 19u) + s[11]; + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[9] ^= s[13] ^ 0x6c0ea54au; + s[11] ^= s[9]; + s[9] += s[11] + 0x609cd9eau; + s[14] = (s[14] ^ s[9]) * 0xf76d6ffbu; + s[7] = mh_rotl(s[7], 14u) + s[14]; + s[3] = mh_rotl(s[3], 18u) + s[7]; + s[7] += s[3]; + s[11] = mh_rotl(s[11], 1u) + s[7]; + s[9] = (s[9] ^ s[11]) * 0xf3497ec7u; + s[0] -= s[9]; + s[12] += s[0] + 0xfc1c2a19u; + s[14] += s[12]; + s[12] += s[14]; + s[0] = mh_rotl(s[0], 19u) + s[12]; + s[15] = mh_rotl(s[15] ^ s[0], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 12u); + s[7] = mh_rotl(s[7], 15u) + s[9]; + s[6] += s[7]; + s[0] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[0], 25u); + s[5] += s[7]; + s[13] = (s[13] ^ s[5]) * 0x103550c1u; + s[10] += s[13]; + s[12] -= s[10]; + s[10] += (s[12] | s[0]); + s[12] += (s[10] | s[1]); + s[5] ^= s[12]; + s[2] ^= s[5]; + s[3] ^= s[2] ^ 0x2e047eb3u; + s[5] += s[3] + 0xe97cb0afu; + s[10] ^= s[5] ^ 0x4455829bu; + s[8] ^= s[10]; + s[9] = s[9] * 0xe48b6cf7u + s[8]; + s[10] = mh_rotl(s[10], 11u) + s[9]; + s[14] -= s[10]; + s[4] += s[14]; + s[1] += (s[4] | s[2]); + s[12] *= (s[1] | 1u); + s[15] -= s[12]; + s[5] = mh_rotl(s[5], 14u) + s[15]; + s[13] = mh_rotl(s[13], 30u) + s[5]; + s[1] = mh_rotl(s[1] ^ s[13], 3u); + s[10] += s[1] + 0x2b88f231u; + s[3] ^= s[10]; + s[14] = mh_rotl(s[14], 16u) + s[3]; + s[2] ^= s[14]; + s[0] = mh_rotl(s[0], 24u) + s[2]; + s[6] ^= s[0]; + s[7] = s[7] * 0xc8b02c1fu + s[6]; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[1] ^= s[15]; + s[2] ^= s[1]; + s[13] += (s[2] | s[4]); + s[4] = mh_rotl(s[4], 25u) + s[13]; + s[1] *= (s[4] | 1u); + s[8] += s[1] + 0x170391fdu; + s[7] -= s[8]; + s[6] += s[7] + 0x428e4c84u; + s[15] += s[6]; + s[10] += (s[15] | s[13]); + s[7] = mh_rotl(s[7], 17u) + s[10]; + s[0] *= (s[7] | 1u); + s[13] *= (s[0] | 1u); + s[6] ^= s[13]; + s[14] *= (s[6] | 1u); + s[0] += s[14] + 0x10c22a2du; + s[9] = (s[9] ^ s[0]) * 0xaeee5b5fu; + s[5] ^= (s[9] & s[6]); + s[12] += s[5] + 0xaa190509u; + s[15] = mh_rotl(s[15], 23u) + s[12]; + s[6] = mh_rotl(s[6], 29u) + s[15]; + s[4] -= s[6]; + s[1] ^= s[4]; + s[10] += s[1]; + s[3] += s[10] + 0xcb02e2f1u; + s[11] += s[3]; + s[4] ^= s[11]; + s[8] ^= s[4]; + s[10] *= (s[8] | 1u); + s[9] = mh_rotl(s[9], 28u) + s[10]; + s[10] = s[10] * 0x385128c9u + s[9]; + s[13] += (s[10] | s[1]); + s[15] = mh_rotl(s[15] ^ s[13], 4u); + s[1] = mh_rotl(s[1], 20u) + s[15]; + s[14] ^= (s[1] & s[6]); + s[8] ^= s[14]; + s[0] = (s[0] ^ s[8]) * 0x5e3978c9u; + s[2] ^= s[0]; + s[11] = mh_rotl(s[11], 18u) + s[2]; + s[8] = (s[8] ^ s[11]) * 0xfc3d1753u; + s[10] += s[8]; + s[2] ^= s[10]; + s[0] += s[2]; + s[1] *= (s[0] | 1u); + s[4] += s[1]; + s[1] ^= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 8u); + s[6] = (s[6] ^ s[3]) * 0xb74b7bbbu; + s[8] *= (s[6] | 1u); + s[11] -= s[8]; + s[7] ^= (s[11] & s[9]); + s[11] ^= s[7]; + s[5] += (s[11] | s[15]); + s[1] = s[1] * 0x6f397ee5u + s[5]; + s[2] ^= s[1]; + s[6] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[6], 10u); + s[5] = (s[5] ^ s[3]) * 0xf3e5cfadu; + s[8] += s[5]; + s[7] -= s[8]; + s[2] += s[7]; + s[14] = mh_rotl(s[14], 25u) + s[2]; + s[1] *= (s[14] | 1u); + s[3] = s[3] * 0x02b399cbu + s[1]; + s[2] ^= (s[3] & s[10]); + s[12] = mh_rotl(s[12] ^ s[2], 3u); + s[14] *= (s[12] | 1u); + s[0] = (s[0] ^ s[14]) * 0xdce3e741u; + s[1] = mh_rotl(s[1], 7u) + s[0]; + s[7] ^= s[1]; + s[10] *= (s[7] | 1u); + s[5] = mh_rotl(s[5], 9u) + s[10]; + s[1] *= (s[5] | 1u); + s[4] ^= s[1] ^ 0x385d5cd4u; + s[7] += s[4]; + s[15] ^= s[7]; + s[13] = mh_rotl(s[13], 22u) + s[15]; + s[12] = (s[12] ^ s[13]) * 0x817a9347u; + s[7] ^= (s[12] & s[5]); + s[9] ^= s[7]; + s[12] = mh_rotl(s[12], 8u) + s[9]; + s[5] += s[12]; + s[9] *= (s[5] | 1u); + s[15] -= s[9]; + s[4] = mh_rotl(s[4], 5u) + s[15]; + s[13] = mh_rotl(s[13], 20u) + s[4]; + s[8] = s[8] * 0x97d936ebu + s[13]; + s[10] += s[8]; + s[14] += s[10]; + s[6] += s[14]; + s[0] ^= s[6]; + s[11] -= s[0]; + s[1] ^= (s[11] & s[14]); + s[2] ^= s[1]; + s[11] = mh_rotl(s[11], 4u) + s[2]; + s[5] ^= s[11]; + s[9] = (s[9] ^ s[5]) * 0x684dd78fu; + s[14] = s[14] * 0xcce53009u + s[9]; + s[8] = mh_rotl(s[8], 4u) + s[14]; + s[3] -= s[8]; + s[12] -= s[3]; + s[15] = mh_rotl(s[15] ^ s[12], 22u); + s[12] += s[15] + 0x25d2e612u; + s[8] = mh_rotl(s[8] ^ s[12], 10u); + s[4] += s[8]; + s[10] = mh_rotl(s[10] ^ s[4], 9u); + s[0] += (s[10] | s[9]); + s[2] ^= s[0]; + s[10] = mh_rotl(s[10], 3u) + s[2]; + s[14] += s[10]; + s[5] ^= s[14]; + s[9] *= (s[5] | 1u); + s[13] ^= s[9] ^ 0xd2f78081u; + s[14] ^= s[13]; + s[8] += s[14]; + s[5] += s[8]; + s[15] = (s[15] ^ s[5]) * 0xb4af8bb9u; + s[5] += s[15] + 0xd497de31u; + s[13] ^= s[5]; + s[14] += (s[13] | s[4]); + s[12] = mh_rotl(s[12], 19u) + s[14]; + s[1] = (s[1] ^ s[12]) * 0x80736b3fu; + s[0] += s[1]; + s[6] -= s[0]; + s[5] *= (s[6] | 1u); + s[13] -= s[5]; + s[7] = s[7] * 0x4b586d65u + s[13]; + s[9] = mh_rotl(s[9] ^ s[7], 9u); + s[1] ^= s[9]; + s[15] *= (s[1] | 1u); + s[13] -= s[15]; + s[4] = (s[4] ^ s[13]) * 0x0bf0c72bu; + s[15] += s[4]; + s[9] ^= s[15] ^ 0x1f3d3b6fu; + s[11] += s[9]; + s[6] += (s[11] | s[5]); + s[15] += (s[6] | s[9]); + s[7] = (s[7] ^ s[15]) * 0x2d1b2827u; + s[1] = mh_rotl(s[1], 4u) + s[7]; + s[10] += s[1] + 0x19394fe5u; + s[7] += s[10] + 0x0df93d70u; + s[9] -= s[7]; + s[1] = mh_rotl(s[1], 13u) + s[9]; + s[5] += s[1]; + s[3] += s[5] + 0x528c96f9u; + s[9] *= (s[3] | 1u); + s[11] += s[9]; + s[1] += s[11]; +} +// Round program 2: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_2(thread uint* s) { + s[3] = mh_rotl(s[3] ^ s[0], 11u); + s[9] = (s[9] ^ s[3]) * 0x926a6d6du; + s[10] *= (s[9] | 1u); + s[6] = (s[6] ^ s[10]) * 0x16fa529bu; + s[14] += s[6] + 0x8bf7717du; + s[15] = s[15] * 0x838a9b83u + s[14]; + s[13] += (s[15] | s[1]); + s[7] ^= s[13] ^ 0x1c4ee851u; + s[12] += s[7] + 0x2de89a80u; + s[9] = (s[9] ^ s[12]) * 0xc6ccd52bu; + s[12] -= s[9]; + s[8] ^= s[12]; + s[6] += s[8]; + s[12] -= s[6]; + s[15] = mh_rotl(s[15], 6u) + s[12]; + s[3] += s[15]; + s[14] += s[3]; + s[3] = s[3] * 0x86602d0du + s[14]; + s[12] = mh_rotl(s[12] ^ s[3], 31u); + s[0] ^= s[12]; + s[8] ^= s[0]; + s[12] -= s[8]; + s[11] += s[12]; + s[15] = (s[15] ^ s[11]) * 0xcd53cb6bu; + s[0] = (s[0] ^ s[15]) * 0x2e7b800du; + s[3] *= (s[0] | 1u); + s[4] += s[3]; + s[7] = s[7] * 0xf492cc8du + s[4]; + s[13] = mh_rotl(s[13], 6u) + s[7]; + s[8] -= s[13]; + s[15] = mh_rotl(s[15] ^ s[8], 29u); + s[6] -= s[15]; + s[1] += s[6]; + s[15] -= s[1]; + s[13] *= (s[15] | 1u); + s[5] = (s[5] ^ s[13]) * 0x6d79f9b3u; + s[10] = mh_rotl(s[10] ^ s[5], 29u); + s[8] ^= s[10] ^ 0xd22b10f3u; + s[9] = (s[9] ^ s[8]) * 0xc87cfcd7u; + s[2] = mh_rotl(s[2], 5u) + s[9]; + s[11] *= (s[2] | 1u); + s[5] ^= s[11]; + s[7] += s[5]; + s[14] += s[7] + 0xac6f941eu; + s[5] += s[14]; + s[14] += s[5]; + s[13] ^= s[14]; + s[6] += s[13]; + s[14] -= s[6]; + s[10] = mh_rotl(s[10], 15u) + s[14]; + s[1] ^= s[10]; + s[5] = (s[5] ^ s[1]) * 0x7a531a39u; + s[15] = s[15] * 0xe6bff90bu + s[5]; + s[7] ^= s[15]; + s[4] += s[7]; + s[8] -= s[4]; + s[14] = (s[14] ^ s[8]) * 0xcb91e92bu; + s[2] -= s[14]; + s[14] = mh_rotl(s[14], 26u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[10] += s[4]; + s[1] = (s[1] ^ s[10]) * 0x2f2e1573u; + s[5] += s[1]; + s[7] += s[5]; + s[1] = mh_rotl(s[1] ^ s[7], 31u); + s[14] = mh_rotl(s[14] ^ s[1], 9u); + s[6] -= s[14]; + s[14] ^= s[6]; + s[1] += s[14]; + s[15] = (s[15] ^ s[1]) * 0xf122f41du; + s[1] -= s[15]; + s[5] += (s[1] | s[8]); + s[13] = mh_rotl(s[13] ^ s[5], 20u); + s[1] = s[1] * 0x24839c9du + s[13]; + s[10] += s[1] + 0x6e377732u; + s[9] ^= s[10]; + s[10] += s[9] + 0x9c8be86fu; + s[4] = mh_rotl(s[4] ^ s[10], 18u); + s[15] = s[15] * 0x57f74b09u + s[4]; + s[0] = s[0] * 0x4777892du + s[15]; + s[15] *= (s[0] | 1u); + s[8] -= s[15]; + s[14] -= s[8]; + s[6] ^= s[14]; + s[11] += s[6]; + s[9] ^= s[11]; + s[4] += s[9] + 0x4e322e4bu; + s[7] = mh_rotl(s[7] ^ s[4], 5u); + s[15] += (s[7] | s[0]); + s[10] -= s[15]; + s[9] = mh_rotl(s[9] ^ s[10], 8u); + s[12] = mh_rotl(s[12] ^ s[9], 26u); + s[10] += s[12]; + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[12] ^= s[13]; + s[1] ^= s[12] ^ 0x32411651u; + s[9] += s[1]; + s[1] *= (s[9] | 1u); + s[11] += s[1]; + s[12] = mh_rotl(s[12] ^ s[11], 11u); + s[15] = mh_rotl(s[15] ^ s[12], 16u); + s[11] ^= s[15]; + s[9] += s[11]; + s[13] += (s[9] | s[3]); + s[7] ^= (s[13] & s[1]); + s[0] ^= (s[7] & s[11]); + s[6] = mh_rotl(s[6], 25u) + s[0]; + s[7] = mh_rotl(s[7] ^ s[6], 18u); + s[2] -= s[7]; + s[14] ^= s[2] ^ 0xd6cffa6eu; + s[10] += s[14] + 0xdb62a314u; + s[2] += s[10]; + s[14] = s[14] * 0x2f015667u + s[2]; + s[3] *= (s[14] | 1u); + s[0] ^= s[3]; + s[8] *= (s[0] | 1u); + s[12] ^= s[8]; + s[9] = mh_rotl(s[9], 11u) + s[12]; + s[4] ^= s[9]; + s[15] ^= s[4]; + s[3] = mh_rotl(s[3], 5u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[3], 20u); + s[14] = (s[14] ^ s[6]) * 0x3392ff1fu; + s[9] -= s[14]; + s[14] *= (s[9] | 1u); + s[9] -= s[14]; + s[0] = mh_rotl(s[0], 12u) + s[9]; + s[10] = (s[10] ^ s[0]) * 0x86b32d1du; + s[7] *= (s[10] | 1u); + s[3] = s[3] * 0xcf4d9bb3u + s[7]; + s[8] *= (s[3] | 1u); + s[7] -= s[8]; + s[2] = mh_rotl(s[2], 31u) + s[7]; + s[6] ^= s[2]; + s[7] = s[7] * 0xf9e43535u + s[6]; + s[5] ^= s[7]; + s[4] = mh_rotl(s[4], 10u) + s[5]; + s[2] *= (s[4] | 1u); + s[14] = (s[14] ^ s[2]) * 0xd801e903u; + s[11] = s[11] * 0x1140fbe1u + s[14]; + s[12] = mh_rotl(s[12], 6u) + s[11]; + s[5] = s[5] * 0x974088edu + s[12]; + s[0] -= s[5]; + s[14] -= s[0]; + s[0] += (s[14] | s[4]); + s[6] -= s[0]; + s[1] *= (s[6] | 1u); + s[10] = s[10] * 0x78b0e1a7u + s[1]; + s[13] ^= s[10]; + s[0] -= s[13]; + s[7] += s[0]; + s[0] ^= s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 23u); + s[9] -= s[12]; + s[5] += (s[9] | s[6]); + s[2] += s[5]; + s[8] = s[8] * 0x7b42b5f1u + s[2]; + s[4] ^= s[8]; + s[15] = (s[15] ^ s[4]) * 0x2e28033bu; + s[12] += s[15]; + s[9] = mh_rotl(s[9] ^ s[12], 27u); + s[8] = mh_rotl(s[8], 22u) + s[9]; + s[0] ^= s[8]; + s[10] *= (s[0] | 1u); + s[1] *= (s[10] | 1u); + s[2] ^= s[1]; + s[3] ^= (s[2] & s[12]); + s[4] *= (s[3] | 1u); + s[11] = mh_rotl(s[11], 22u) + s[4]; + s[0] += s[11]; + s[15] += (s[0] | s[7]); + s[13] += s[15]; + s[0] ^= s[13]; + s[12] += s[0]; + s[10] += s[12] + 0x9646135eu; + s[0] += s[10]; + s[10] ^= (s[0] & s[2]); + s[4] += s[10] + 0x82a90265u; + s[15] ^= s[4]; + s[5] = (s[5] ^ s[15]) * 0x0ab18765u; + s[1] ^= s[5]; + s[3] = (s[3] ^ s[1]) * 0x58bdae6fu; + s[14] += (s[3] | s[2]); + s[13] += s[14] + 0xe01e7581u; + s[0] = (s[0] ^ s[13]) * 0x49941f01u; + s[10] = s[10] * 0xb246126bu + s[0]; + s[3] ^= s[10] ^ 0xe938f5d3u; + s[8] += s[3]; + s[14] += (s[8] | s[0]); + s[9] += s[14]; + s[15] ^= s[9] ^ 0xd652447bu; + s[10] ^= s[15] ^ 0xbfa14965u; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[11] ^= s[6] ^ 0x37d98687u; + s[6] = (s[6] ^ s[11]) * 0x4e553b0bu; + s[12] = mh_rotl(s[12], 17u) + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[10] ^= s[4]; + s[0] *= (s[10] | 1u); + s[12] ^= s[0]; + s[6] += (s[12] | s[14]); + s[12] = mh_rotl(s[12] ^ s[6], 16u); + s[10] ^= s[12]; + s[11] += s[10] + 0x936f0354u; + s[10] += s[11] + 0x1771251du; + s[1] = mh_rotl(s[1] ^ s[10], 13u); + s[4] = mh_rotl(s[4] ^ s[1], 18u); + s[14] = (s[14] ^ s[4]) * 0xd997b3a1u; + s[4] *= (s[14] | 1u); + s[11] = mh_rotl(s[11] ^ s[4], 10u); + s[4] += s[11]; + s[11] += s[4]; + s[10] = mh_rotl(s[10], 2u) + s[11]; + s[3] -= s[10]; + s[11] = mh_rotl(s[11] ^ s[3], 1u); + s[15] ^= s[11] ^ 0x31d420ebu; + s[12] += s[15]; + s[6] = s[6] * 0xef7ed339u + s[12]; + s[5] += s[6]; + s[6] ^= s[5]; + s[7] += s[6]; + s[1] *= (s[7] | 1u); + s[13] ^= s[1]; + s[8] += s[13]; + s[0] ^= s[8]; + s[10] = s[10] * 0x2dc4f3ffu + s[0]; + s[4] ^= s[10]; + s[15] -= s[4]; + s[4] -= s[15]; + s[12] += s[4]; + s[0] ^= s[12] ^ 0xc68cf398u; + s[10] = s[10] * 0x8d7270d1u + s[0]; + s[1] ^= s[10] ^ 0x792d21d6u; + s[15] ^= s[1]; + s[3] = mh_rotl(s[3], 31u) + s[15]; + s[12] *= (s[3] | 1u); + s[0] ^= s[12] ^ 0x44570ae7u; + s[8] += s[0]; + s[5] ^= (s[8] & s[10]); + s[14] -= s[5]; + s[6] += s[14]; + s[8] += s[6] + 0xa3eeb141u; + s[11] += s[8]; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[14] -= s[13]; + s[7] += (s[14] | s[0]); + s[8] += (s[7] | s[0]); + s[3] *= (s[8] | 1u); + s[4] = s[4] * 0xb0e65813u + s[3]; + s[14] += s[4]; + s[4] -= s[14]; + s[1] += (s[4] | s[6]); + s[15] ^= s[1]; + s[3] = (s[3] ^ s[15]) * 0x74f161a1u; + s[10] += s[3] + 0xa6f7f269u; + s[0] += (s[10] | s[13]); + s[2] = mh_rotl(s[2], 21u) + s[0]; + s[9] ^= (s[2] & s[12]); + s[11] ^= s[9]; + s[9] += s[11]; + s[8] *= (s[9] | 1u); + s[5] += (s[8] | s[1]); + s[7] += s[5]; + s[11] += s[7] + 0xe1fb4104u; + s[14] ^= (s[11] & s[6]); + s[15] ^= s[14]; + s[11] ^= (s[15] & s[6]); + s[7] += s[11]; + s[9] = mh_rotl(s[9], 12u) + s[7]; + s[0] *= (s[9] | 1u); + s[4] += s[0]; + s[0] = (s[0] ^ s[4]) * 0x3458b4b9u; + s[15] *= (s[0] | 1u); + s[12] = mh_rotl(s[12], 5u) + s[15]; + s[11] -= s[12]; + s[7] = s[7] * 0xdf6299e7u + s[11]; + s[15] = mh_rotl(s[15], 17u) + s[7]; + s[8] = mh_rotl(s[8] ^ s[15], 25u); + s[1] += (s[8] | s[7]); + s[7] = s[7] * 0xcde4ccd9u + s[1]; + s[4] ^= (s[7] & s[3]); + s[11] ^= s[4]; + s[15] += s[11] + 0x93b32499u; + s[8] = s[8] * 0x2c187aebu + s[15]; + s[12] += s[8]; + s[15] += s[12] + 0x8975fca8u; + s[8] ^= s[15] ^ 0xa690273au; + s[7] += s[8]; + s[2] *= (s[7] | 1u); + s[15] += s[2]; + s[12] ^= (s[15] & s[0]); + s[13] *= (s[12] | 1u); + s[9] ^= (s[13] & s[15]); + s[7] = mh_rotl(s[7] ^ s[9], 19u); + s[9] += s[7] + 0x68201cc4u; + s[11] ^= s[9] ^ 0x8ce52309u; + s[8] ^= s[11]; + s[2] = s[2] * 0xcd1aa62fu + s[8]; + s[4] ^= s[2]; + s[11] = mh_rotl(s[11], 14u) + s[4]; + s[12] = (s[12] ^ s[11]) * 0x5225e677u; + s[7] ^= s[12] ^ 0x249730c1u; + s[8] += s[7] + 0x648c79c7u; + s[9] = mh_rotl(s[9], 23u) + s[8]; + s[6] ^= s[9] ^ 0x63921b24u; + s[8] = (s[8] ^ s[6]) * 0xbaff00d3u; + s[2] ^= s[8]; + s[4] *= (s[2] | 1u); + s[8] = (s[8] ^ s[4]) * 0xcaf43cebu; + s[6] += s[8]; + s[8] = (s[8] ^ s[6]) * 0x4fa73429u; + s[0] = (s[0] ^ s[8]) * 0xd09399a5u; + s[8] += s[0]; + s[14] = (s[14] ^ s[8]) * 0xffb37081u; + s[13] ^= s[14]; + s[4] += s[13]; + s[8] ^= s[4]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 16u) + s[14]; + s[14] = (s[14] ^ s[7]) * 0x412aee4du; + s[10] -= s[14]; + s[1] ^= s[10]; + s[4] ^= s[1] ^ 0x8d36a1b0u; + s[14] = (s[14] ^ s[4]) * 0xb17290dfu; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[2] += s[15]; + s[11] = mh_rotl(s[11], 10u) + s[2]; + s[0] ^= s[11]; + s[12] ^= s[0] ^ 0x2be56ccfu; + s[2] = s[2] * 0x5290c25du + s[12]; + s[1] += s[2]; + s[2] += (s[1] | s[8]); + s[6] -= s[2]; + s[10] += s[6]; + s[13] += s[10] + 0x6bcc329cu; + s[2] *= (s[13] | 1u); + s[1] = (s[1] ^ s[2]) * 0xd95e0a65u; + s[12] = (s[12] ^ s[1]) * 0x5598f745u; + s[9] += s[12]; + s[15] = mh_rotl(s[15] ^ s[9], 19u); + s[13] += s[15]; + s[6] += s[13] + 0xe9004eeau; + s[15] ^= s[6]; + s[4] -= s[15]; + s[3] += s[4]; + s[8] ^= s[3] ^ 0x118412a8u; + s[2] = s[2] * 0x7ace7595u + s[8]; + s[3] *= (s[2] | 1u); + s[7] = (s[7] ^ s[3]) * 0xefdf99afu; + s[1] ^= s[7]; + s[11] *= (s[1] | 1u); + s[13] = mh_rotl(s[13] ^ s[11], 9u); + s[0] += s[13]; + s[7] *= (s[0] | 1u); + s[1] ^= s[7]; + s[10] ^= (s[1] & s[6]); + s[1] ^= s[10] ^ 0x93602932u; + s[2] -= s[1]; + s[12] ^= s[2]; + s[3] = mh_rotl(s[3], 1u) + s[12]; + s[7] ^= s[3]; + s[14] ^= s[7] ^ 0x237f8e1au; + s[0] = mh_rotl(s[0] ^ s[14], 2u); + s[1] *= (s[0] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 2u); + s[9] = mh_rotl(s[9] ^ s[4], 16u); + s[7] = s[7] * 0xf073bd6du + s[9]; + s[10] = s[10] * 0x3a609689u + s[7]; + s[12] ^= s[10]; + s[3] ^= s[12] ^ 0x9db3a4beu; + s[14] = mh_rotl(s[14], 1u) + s[3]; + s[6] += (s[14] | s[5]); + s[1] += s[6] + 0x1aae9d69u; + s[5] = mh_rotl(s[5] ^ s[1], 29u); + s[14] ^= s[5]; + s[8] += s[14]; + s[2] ^= (s[8] & s[0]); + s[11] = (s[11] ^ s[2]) * 0xf0879cf7u; + s[1] = mh_rotl(s[1] ^ s[11], 2u); + s[6] ^= s[1]; + s[15] -= s[6]; + s[7] -= s[15]; + s[3] += s[7]; + s[2] -= s[3]; + s[10] -= s[2]; + s[11] = mh_rotl(s[11], 3u) + s[10]; + s[3] *= (s[11] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= (s[5] & s[14]); + s[3] ^= s[0]; + s[0] = s[0] * 0xd6807e45u + s[3]; + s[10] += s[0]; + s[4] *= (s[10] | 1u); + s[2] ^= (s[4] & s[5]); + s[9] = mh_rotl(s[9], 3u) + s[2]; + s[15] = s[15] * 0x946b5521u + s[9]; + s[13] = mh_rotl(s[13], 5u) + s[15]; + s[5] ^= s[13]; + s[4] += (s[5] | s[15]); + s[2] += s[4]; + s[12] += s[2]; + s[3] *= (s[12] | 1u); + s[6] += s[3]; + s[12] = s[12] * 0xb6b83b35u + s[6]; + s[6] -= s[12]; + s[1] ^= s[6]; + s[4] = s[4] * 0x6b8de9c3u + s[1]; + s[15] += s[4]; + s[6] -= s[15]; + s[5] ^= (s[6] & s[7]); + s[14] += s[5]; + s[7] = (s[7] ^ s[14]) * 0x5fe38793u; + s[1] += s[7]; + s[15] = (s[15] ^ s[1]) * 0x0c3d59fbu; + s[2] ^= s[15] ^ 0xa6e76c52u; + s[8] ^= s[2]; + s[15] += s[8]; + s[2] = mh_rotl(s[2], 18u) + s[15]; + s[7] ^= s[2]; + s[9] += (s[7] | s[5]); + s[0] ^= (s[9] & s[6]); + s[14] *= (s[0] | 1u); + s[7] += (s[14] | s[1]); + s[8] ^= s[7]; + s[1] *= (s[8] | 1u); + s[4] = mh_rotl(s[4] ^ s[1], 21u); + s[1] = (s[1] ^ s[4]) * 0xaa342e53u; + s[11] -= s[1]; + s[13] ^= s[11] ^ 0xcbbd4eceu; + s[5] -= s[13]; + s[11] += s[5]; + s[14] ^= s[11] ^ 0xb5db59d3u; + s[5] ^= s[14]; + s[10] = mh_rotl(s[10] ^ s[5], 23u); + s[5] ^= s[10]; + s[8] -= s[5]; + s[6] *= (s[8] | 1u); + s[3] ^= s[6]; + s[7] += s[3] + 0x00658f95u; + s[0] ^= s[7] ^ 0x2e56fa3eu; + s[2] ^= s[0] ^ 0xec5293e3u; + s[7] = mh_rotl(s[7] ^ s[2], 21u); + s[14] *= (s[7] | 1u); + s[11] *= (s[14] | 1u); + s[0] *= (s[11] | 1u); + s[4] = (s[4] ^ s[0]) * 0x2fb41f81u; + s[2] += s[4]; + s[0] += s[2]; + s[6] += s[0]; + s[8] = mh_rotl(s[8], 10u) + s[6]; + s[2] += s[8]; + s[5] ^= s[2] ^ 0xa8ea4a52u; + s[10] ^= (s[5] & s[1]); + s[0] += s[10] + 0xadbdf4b0u; + s[8] ^= s[0]; + s[5] ^= s[8]; + s[10] = s[10] * 0x4142cee3u + s[5]; + s[12] += s[10] + 0xf3bf2694u; + s[10] *= (s[12] | 1u); + s[9] += s[10] + 0x087246d1u; + s[4] = mh_rotl(s[4], 24u) + s[9]; + s[0] = mh_rotl(s[0] ^ s[4], 12u); + s[3] += s[0] + 0xac907341u; + s[12] = mh_rotl(s[12] ^ s[3], 8u); + s[14] -= s[12]; + s[15] -= s[14]; + s[5] += s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 31u); + s[9] = mh_rotl(s[9] ^ s[15], 20u); + s[7] = s[7] * 0xcb052cc1u + s[9]; + s[4] += s[7]; + s[0] = mh_rotl(s[0], 21u) + s[4]; + s[6] = mh_rotl(s[6], 17u) + s[0]; + s[2] += s[6]; + s[15] -= s[2]; + s[9] = mh_rotl(s[9] ^ s[15], 22u); + s[8] ^= s[9]; + s[6] += s[8] + 0xae67ff98u; + s[0] -= s[6]; + s[2] *= (s[0] | 1u); + s[12] += s[2]; + s[15] ^= s[12]; + s[0] += s[15]; + s[6] ^= s[0]; + s[3] = mh_rotl(s[3] ^ s[6], 5u); + s[1] += s[3]; + s[6] ^= s[1]; + s[12] += (s[6] | s[8]); + s[3] ^= s[12]; + s[2] = mh_rotl(s[2], 12u) + s[3]; + s[8] ^= s[2]; + s[1] += s[8]; + s[6] += (s[1] | s[15]); + s[1] += s[6] + 0x2aa7ff78u; + s[11] += s[1]; + s[14] -= s[11]; + s[3] -= s[14]; + s[9] -= s[3]; + s[6] += s[9]; + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[8] += s[12]; + s[0] = mh_rotl(s[0] ^ s[8], 22u); + s[4] ^= s[0]; + s[8] = s[8] * 0x1e56eb41u + s[4]; + s[11] += s[8]; + s[6] += s[11]; + s[13] *= (s[6] | 1u); + s[2] *= (s[13] | 1u); + s[0] += s[2] + 0x43af110cu; + s[5] = s[5] * 0xa3d7a065u + s[0]; + s[14] *= (s[5] | 1u); + s[4] += s[14]; + s[11] *= (s[4] | 1u); + s[5] = mh_rotl(s[5], 8u) + s[11]; + s[1] += (s[5] | s[9]); + s[5] += s[1]; + s[1] ^= s[5]; + s[9] += s[1]; + s[8] *= (s[9] | 1u); + s[7] += s[8]; + s[10] += s[7]; + s[13] += s[10]; + s[8] = (s[8] ^ s[13]) * 0xfc8aade7u; + s[12] ^= s[8] ^ 0x47e9555au; + s[3] -= s[12]; + s[6] ^= s[3]; + s[11] ^= s[6]; + s[9] -= s[11]; + s[3] = mh_rotl(s[3], 29u) + s[9]; + s[8] += (s[3] | s[11]); + s[12] = mh_rotl(s[12], 13u) + s[8]; + s[4] = mh_rotl(s[4], 8u) + s[12]; + s[7] = (s[7] ^ s[4]) * 0xe569b7fdu; + s[14] ^= (s[7] & s[11]); + s[8] -= s[14]; + s[14] ^= s[8]; + s[7] = mh_rotl(s[7], 3u) + s[14]; + s[3] += s[7]; + s[10] *= (s[3] | 1u); + s[8] = (s[8] ^ s[10]) * 0xc72f74bdu; + s[13] ^= s[8]; + s[4] = mh_rotl(s[4], 8u) + s[13]; + s[10] ^= s[4]; + s[11] = mh_rotl(s[11] ^ s[10], 10u); + s[2] ^= s[11] ^ 0x89747ffeu; + s[7] ^= s[2]; + s[5] -= s[7]; + s[13] -= s[5]; + s[0] = (s[0] ^ s[13]) * 0xf48e8c1du; + s[14] = mh_rotl(s[14] ^ s[0], 15u); + s[4] += s[14]; + s[7] = mh_rotl(s[7], 17u) + s[4]; + s[13] += s[7]; + s[0] = s[0] * 0x44c6b0f1u + s[13]; + s[3] ^= s[0]; + s[15] += s[3] + 0xb264b481u; + s[12] ^= s[15]; + s[7] += (s[12] | s[13]); + s[0] += s[7]; + s[9] -= s[0]; + s[13] = s[13] * 0x720cd467u + s[9]; + s[11] ^= s[13] ^ 0xa96dd9a0u; + s[5] -= s[11]; + s[15] += (s[5] | s[11]); + s[6] += s[15]; + s[7] += s[6]; + s[8] = s[8] * 0xbeaaa467u + s[7]; + s[7] ^= s[8]; + s[11] = (s[11] ^ s[7]) * 0x30405013u; + s[1] ^= s[11]; + s[0] ^= s[1] ^ 0xe46c8953u; + s[4] = (s[4] ^ s[0]) * 0x3beff773u; + s[3] = mh_rotl(s[3], 20u) + s[4]; + s[4] ^= s[3]; + s[11] = mh_rotl(s[11], 30u) + s[4]; + s[7] += (s[11] | s[3]); + s[11] ^= s[7]; + s[13] ^= s[11]; + s[1] *= (s[13] | 1u); + s[0] = mh_rotl(s[0], 17u) + s[1]; + s[15] ^= s[0] ^ 0xbb0e1b77u; + s[9] = mh_rotl(s[9] ^ s[15], 30u); + s[0] *= (s[9] | 1u); + s[3] += s[0]; + s[0] = (s[0] ^ s[3]) * 0x28a1e7fbu; + s[11] += s[0] + 0x3f20929bu; + s[14] += s[11] + 0x9721b746u; + s[3] = (s[3] ^ s[14]) * 0xc929f765u; + s[14] *= (s[3] | 1u); + s[10] -= s[14]; + s[3] = (s[3] ^ s[10]) * 0x83ea7953u; + s[14] ^= s[3]; + s[4] += s[14]; + s[11] ^= s[4] ^ 0x9f1876eeu; + s[5] += s[11]; + s[6] = (s[6] ^ s[5]) * 0x3e059b67u; + s[0] *= (s[6] | 1u); + s[9] ^= s[0]; + s[3] *= (s[9] | 1u); + s[4] += s[3]; + s[6] += s[4]; + s[14] = (s[14] ^ s[6]) * 0xe8ebef0fu; + s[12] = mh_rotl(s[12], 31u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[0] = mh_rotl(s[0], 25u) + s[3]; + s[4] ^= s[0]; + s[0] ^= s[4] ^ 0xdd9f45b0u; + s[1] *= (s[0] | 1u); + s[7] = (s[7] ^ s[1]) * 0xd7937423u; + s[9] += s[7]; + s[14] ^= s[9]; + s[9] += (s[14] | s[4]); + s[14] ^= s[9]; + s[12] *= (s[14] | 1u); + s[11] = (s[11] ^ s[12]) * 0x6f00822du; + s[15] += s[11] + 0x90a645c9u; + s[11] = s[11] * 0xd4e49bc3u + s[15]; + s[9] += s[11]; + s[2] = (s[2] ^ s[9]) * 0xcd756085u; + s[5] -= s[2]; + s[1] ^= s[5]; + s[7] = mh_rotl(s[7], 24u) + s[1]; + s[13] ^= s[7] ^ 0x259d1187u; + s[9] *= (s[13] | 1u); + s[7] ^= s[9]; + s[9] -= s[7]; + s[4] ^= s[9]; + s[14] *= (s[4] | 1u); + s[8] ^= s[14]; + s[15] = s[15] * 0x975ddaebu + s[8]; + s[9] += (s[15] | s[13]); + s[6] ^= s[9] ^ 0x318e194eu; + s[2] = (s[2] ^ s[6]) * 0xb0a2842fu; + s[5] = (s[5] ^ s[2]) * 0xa9a8585du; + s[7] = (s[7] ^ s[5]) * 0x3e818aa9u; + s[3] += s[7] + 0x60f54e95u; + s[7] += s[3] + 0xb6fd49a0u; + s[5] += s[7]; + s[12] = mh_rotl(s[12] ^ s[5], 1u); + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 2u) + s[3]; + s[2] ^= s[7]; + s[7] ^= s[2] ^ 0xa06175a5u; + s[15] -= s[7]; + s[2] += s[15] + 0x32c7f73fu; + s[10] -= s[2]; + s[6] -= s[10]; + s[11] += s[6] + 0x847befcdu; + s[8] *= (s[11] | 1u); + s[10] ^= s[8] ^ 0x80bc6c43u; + s[4] = (s[4] ^ s[10]) * 0xeec1e72fu; + s[14] = mh_rotl(s[14], 15u) + s[4]; + s[2] *= (s[14] | 1u); + s[7] += s[2] + 0x4f95cda0u; + s[12] *= (s[7] | 1u); + s[15] = s[15] * 0xc0c37a91u + s[12]; + s[12] *= (s[15] | 1u); + s[1] += s[12] + 0x574e25f1u; + s[9] += s[1]; + s[12] ^= s[9] ^ 0xbee6ae4cu; + s[2] = mh_rotl(s[2], 2u) + s[12]; + s[7] ^= s[2] ^ 0x2d8d95fcu; + s[1] = mh_rotl(s[1], 12u) + s[7]; + s[12] = s[12] * 0x459875c5u + s[1]; + s[7] += s[12]; + s[2] = mh_rotl(s[2] ^ s[7], 13u); + s[4] += s[2]; + s[14] ^= (s[4] & s[11]); + s[8] ^= s[14] ^ 0xd2d101c3u; + s[7] += s[8] + 0xf7c60fa6u; + s[0] = mh_rotl(s[0] ^ s[7], 20u); + s[9] ^= s[0]; + s[5] += s[9]; + s[1] ^= s[5] ^ 0x09ae80bdu; + s[9] ^= (s[1] & s[8]); + s[6] *= (s[9] | 1u); + s[1] = mh_rotl(s[1], 19u) + s[6]; + s[10] += s[1]; + s[14] += s[10]; + s[12] ^= s[14]; + s[10] -= s[12]; + s[6] += s[10]; + s[7] += s[6]; + s[5] += (s[7] | s[15]); + s[14] -= s[5]; + s[13] += (s[14] | s[12]); + s[2] ^= s[13]; + s[10] = mh_rotl(s[10] ^ s[2], 25u); + s[0] = mh_rotl(s[0] ^ s[10], 9u); + s[14] = (s[14] ^ s[0]) * 0xf271e2f9u; + s[0] = mh_rotl(s[0], 30u) + s[14]; + s[7] = (s[7] ^ s[0]) * 0xbcb788a1u; + s[11] = s[11] * 0xc98f1127u + s[7]; + s[15] ^= s[11]; + s[11] = (s[11] ^ s[15]) * 0x224f625fu; + s[14] = mh_rotl(s[14] ^ s[11], 13u); + s[11] += s[14]; + s[2] = mh_rotl(s[2] ^ s[11], 22u); + s[9] ^= s[2] ^ 0x82adb28eu; + s[8] += s[9]; + s[6] += s[8]; + s[15] += s[6]; + s[14] = s[14] * 0xfca2b387u + s[15]; + s[12] += s[14]; + s[6] += (s[12] | s[8]); + s[5] *= (s[6] | 1u); + s[1] ^= s[5]; + s[3] += s[1] + 0x1f147bc4u; + s[10] = mh_rotl(s[10], 24u) + s[3]; + s[6] += s[10] + 0x7186bc62u; + s[11] = mh_rotl(s[11], 2u) + s[6]; + s[10] ^= (s[11] & s[6]); + s[2] += (s[10] | s[15]); + s[9] = mh_rotl(s[9] ^ s[2], 16u); + s[6] ^= s[9]; + s[13] ^= (s[6] & s[2]); + s[4] -= s[13]; + s[10] = mh_rotl(s[10] ^ s[4], 7u); + s[6] += s[10] + 0x76798031u; + s[2] ^= s[6] ^ 0x81f2cae5u; + s[15] -= s[2]; + s[7] = mh_rotl(s[7] ^ s[15], 11u); + s[0] -= s[7]; + s[15] ^= s[0] ^ 0x84b0f58cu; + s[4] ^= s[15]; + s[11] += s[4] + 0x37470ecau; + s[7] = mh_rotl(s[7] ^ s[11], 25u); + s[0] ^= s[7]; + s[7] ^= s[0]; + s[15] = (s[15] ^ s[7]) * 0x8bed0165u; + s[13] = (s[13] ^ s[15]) * 0xf0b2282fu; + s[10] ^= s[13]; + s[15] *= (s[10] | 1u); +} +// Round program 3: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_3(thread uint* s) { + s[9] -= s[0]; + s[12] *= (s[9] | 1u); + s[13] -= s[12]; + s[2] = (s[2] ^ s[13]) * 0xcaec7bb5u; + s[8] = (s[8] ^ s[2]) * 0xbfa2f813u; + s[9] = (s[9] ^ s[8]) * 0xd8816ab5u; + s[11] ^= s[9]; + s[4] = (s[4] ^ s[11]) * 0xb5a60ae1u; + s[2] += s[4]; + s[14] += s[2] + 0x3b8ef46bu; + s[5] -= s[14]; + s[12] ^= s[5]; + s[4] = mh_rotl(s[4] ^ s[12], 5u); + s[8] = (s[8] ^ s[4]) * 0x064e4143u; + s[5] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 30u) + s[5]; + s[13] += s[10]; + s[14] += s[13] + 0xb57a206du; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[4] = mh_rotl(s[4], 8u) + s[7]; + s[2] = mh_rotl(s[2], 26u) + s[4]; + s[6] = mh_rotl(s[6], 23u) + s[2]; + s[0] = mh_rotl(s[0] ^ s[6], 10u); + s[4] = mh_rotl(s[4] ^ s[0], 16u); + s[8] = (s[8] ^ s[4]) * 0xc9a07b1du; + s[6] = (s[6] ^ s[8]) * 0xf7907103u; + s[1] = mh_rotl(s[1] ^ s[6], 2u); + s[8] = (s[8] ^ s[1]) * 0x63cfdc25u; + s[13] += (s[8] | s[3]); + s[11] -= s[13]; + s[10] += s[11] + 0xbe40fad3u; + s[14] *= (s[10] | 1u); + s[8] += s[14]; + s[14] += s[8] + 0xe91df793u; + s[5] -= s[14]; + s[2] = mh_rotl(s[2], 17u) + s[5]; + s[7] ^= s[2]; + s[9] += s[7] + 0x80c9212au; + s[1] = (s[1] ^ s[9]) * 0xa7d74fefu; + s[0] ^= s[1] ^ 0x08f82691u; + s[3] ^= (s[0] & s[12]); + s[5] = mh_rotl(s[5] ^ s[3], 10u); + s[11] *= (s[5] | 1u); + s[12] -= s[11]; + s[0] += s[12]; + s[7] = mh_rotl(s[7], 10u) + s[0]; + s[2] = mh_rotl(s[2], 25u) + s[7]; + s[15] += s[2] + 0xe54d98a2u; + s[3] ^= s[15]; + s[2] += (s[3] | s[12]); + s[11] -= s[2]; + s[14] ^= (s[11] & s[3]); + s[3] += s[14]; + s[13] += s[3]; + s[9] *= (s[13] | 1u); + s[8] ^= s[9]; + s[4] += s[8]; + s[1] += s[4]; + s[14] *= (s[1] | 1u); + s[10] = (s[10] ^ s[14]) * 0x80d81c29u; + s[14] = mh_rotl(s[14], 28u) + s[10]; + s[15] *= (s[14] | 1u); + s[9] ^= s[15] ^ 0xb96f0f72u; + s[0] += s[9] + 0x58af0b09u; + s[7] += (s[0] | s[8]); + s[4] = (s[4] ^ s[7]) * 0x3cb02481u; + s[6] += s[4] + 0x7c9ebf59u; + s[4] = mh_rotl(s[4], 31u) + s[6]; + s[11] += s[4]; + s[9] += s[11]; + s[0] ^= s[9]; + s[6] ^= s[0] ^ 0x87a4c25eu; + s[10] += s[6] + 0x63a850d3u; + s[3] *= (s[10] | 1u); + s[15] += s[3]; + s[2] *= (s[15] | 1u); + s[0] ^= s[2]; + s[10] ^= (s[0] & s[12]); + s[0] = mh_rotl(s[0] ^ s[10], 13u); + s[10] ^= s[0]; + s[1] = s[1] * 0x68b25a3du + s[10]; + s[14] ^= (s[1] & s[4]); + s[15] *= (s[14] | 1u); + s[0] = mh_rotl(s[0] ^ s[15], 21u); + s[1] ^= (s[0] & s[14]); + s[13] *= (s[1] | 1u); + s[15] *= (s[13] | 1u); + s[7] *= (s[15] | 1u); + s[3] ^= s[7] ^ 0x1eb335a8u; + s[15] *= (s[3] | 1u); + s[7] = mh_rotl(s[7], 23u) + s[15]; + s[5] ^= s[7]; + s[8] += s[5] + 0x50a316f9u; + s[5] ^= s[8]; + s[3] = mh_rotl(s[3], 19u) + s[5]; + s[8] = mh_rotl(s[8], 28u) + s[3]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[2] += (s[14] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 16u); + s[11] += s[13]; + s[4] ^= s[11]; + s[15] += s[4]; + s[2] += s[15]; + s[13] = mh_rotl(s[13] ^ s[2], 7u); + s[1] += s[13]; + s[0] *= (s[1] | 1u); + s[6] -= s[0]; + s[13] += s[6]; + s[2] = mh_rotl(s[2], 24u) + s[13]; + s[4] = mh_rotl(s[4] ^ s[2], 17u); + s[10] += s[4] + 0xd112ffcfu; + s[15] ^= s[10] ^ 0x9030e81eu; + s[4] ^= s[15]; + s[9] ^= s[4]; + s[10] = mh_rotl(s[10] ^ s[9], 7u); + s[2] = mh_rotl(s[2], 24u) + s[10]; + s[14] = (s[14] ^ s[2]) * 0x93c10f1du; + s[10] *= (s[14] | 1u); + s[4] *= (s[10] | 1u); + s[8] ^= s[4]; + s[10] ^= s[8]; + s[4] *= (s[10] | 1u); + s[10] += s[4]; + s[6] += (s[10] | s[15]); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[13] = mh_rotl(s[13] ^ s[5], 9u); + s[4] ^= s[13]; + s[10] ^= s[4]; + s[2] -= s[10]; + s[13] += (s[2] | s[9]); + s[8] -= s[13]; + s[4] -= s[8]; + s[3] ^= s[4] ^ 0x9fcb6ee8u; + s[4] ^= s[3] ^ 0xb9fbeaf9u; + s[12] = mh_rotl(s[12], 8u) + s[4]; + s[3] ^= s[12]; + s[7] = mh_rotl(s[7], 31u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[7], 9u); + s[0] *= (s[4] | 1u); + s[6] ^= s[0]; + s[4] = mh_rotl(s[4], 13u) + s[6]; + s[13] -= s[4]; + s[7] ^= s[13]; + s[12] = mh_rotl(s[12], 10u) + s[7]; + s[14] = mh_rotl(s[14], 27u) + s[12]; + s[7] ^= s[14]; + s[0] += (s[7] | s[2]); + s[12] ^= s[0]; + s[5] = (s[5] ^ s[12]) * 0x392525a1u; + s[8] += s[5] + 0x4138a8f1u; + s[5] += s[8]; + s[11] += s[5]; + s[7] ^= s[11]; + s[14] ^= s[7]; + s[0] += s[14]; + s[12] ^= s[0]; + s[2] *= (s[12] | 1u); + s[6] -= s[2]; + s[4] += s[6] + 0xdcaac0adu; + s[10] ^= s[4]; + s[5] += s[10]; + s[10] += s[5] + 0x0cfa5affu; + s[15] ^= s[10] ^ 0x68194eefu; + s[8] *= (s[15] | 1u); + s[9] += s[8] + 0x15042ceau; + s[0] += (s[9] | s[6]); + s[14] *= (s[0] | 1u); + s[13] = s[13] * 0x5a114c5fu + s[14]; + s[1] += s[13]; + s[3] += s[1]; + s[4] ^= s[3] ^ 0x9b2578dcu; + s[3] = (s[3] ^ s[4]) * 0xf0215559u; + s[9] = mh_rotl(s[9] ^ s[3], 30u); + s[3] *= (s[9] | 1u); + s[10] *= (s[3] | 1u); + s[5] = (s[5] ^ s[10]) * 0xd48cc381u; + s[3] ^= s[5]; + s[5] -= s[3]; + s[0] = (s[0] ^ s[5]) * 0x5dc8d8cfu; + s[2] += (s[0] | s[1]); + s[4] = mh_rotl(s[4] ^ s[2], 26u); + s[11] *= (s[4] | 1u); + s[2] *= (s[11] | 1u); + s[10] -= s[2]; + s[14] = s[14] * 0x8334873fu + s[10]; + s[7] += s[14]; + s[15] += s[7] + 0xa09fcd48u; + s[10] ^= s[15]; + s[15] += s[10]; + s[12] = mh_rotl(s[12], 20u) + s[15]; + s[3] = (s[3] ^ s[12]) * 0xb7d989dfu; + s[4] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 4u); + s[7] = mh_rotl(s[7] ^ s[5], 3u); + s[8] = mh_rotl(s[8] ^ s[7], 13u); + s[1] = (s[1] ^ s[8]) * 0xfd9c4977u; + s[2] ^= s[1]; + s[13] = mh_rotl(s[13], 25u) + s[2]; + s[11] += s[13]; + s[2] = s[2] * 0x9e62997du + s[11]; + s[1] ^= s[2] ^ 0x5bed272fu; + s[7] = mh_rotl(s[7] ^ s[1], 14u); + s[12] += s[7]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] *= (s[2] | 1u); + s[1] *= (s[11] | 1u); + s[9] *= (s[1] | 1u); + s[13] ^= (s[9] & s[15]); + s[1] += (s[13] | s[14]); + s[6] -= s[1]; + s[1] = mh_rotl(s[1], 22u) + s[6]; + s[10] -= s[1]; + s[4] = s[4] * 0x1026f5f7u + s[10]; + s[7] = (s[7] ^ s[4]) * 0x91c6caf3u; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[11] += s[4] + 0x39f61640u; + s[10] -= s[11]; + s[15] ^= s[10]; + s[13] += s[15] + 0xa8a05a01u; + s[3] = mh_rotl(s[3], 27u) + s[13]; + s[4] -= s[3]; + s[13] = mh_rotl(s[13], 8u) + s[4]; + s[8] ^= s[13]; + s[3] += s[8] + 0x4dc574e2u; + s[15] += (s[3] | s[5]); + s[9] = s[9] * 0x7c710593u + s[15]; + s[2] += s[9] + 0xe91d6df9u; + s[9] ^= s[2] ^ 0xba09d0c1u; + s[7] = mh_rotl(s[7] ^ s[9], 5u); + s[2] += s[7] + 0xf1cb3677u; + s[0] = mh_rotl(s[0], 15u) + s[2]; + s[5] = mh_rotl(s[5], 10u) + s[0]; + s[9] += s[5]; + s[12] ^= (s[9] & s[3]); + s[5] = (s[5] ^ s[12]) * 0x8e5ae08du; + s[11] -= s[5]; + s[12] ^= s[11]; + s[0] ^= s[12] ^ 0x038449c7u; + s[6] += s[0] + 0x2b0bf2e9u; + s[9] += s[6]; + s[1] += s[9]; + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[9] *= (s[3] | 1u); + s[13] = s[13] * 0xabfb518du + s[9]; + s[11] += (s[13] | s[14]); + s[6] ^= s[11]; + s[3] += s[6] + 0xbf050303u; + s[9] += s[3]; + s[8] *= (s[9] | 1u); + s[11] += s[8]; + s[7] = mh_rotl(s[7] ^ s[11], 12u); + s[1] = mh_rotl(s[1], 18u) + s[7]; + s[12] *= (s[1] | 1u); + s[5] -= s[12]; + s[11] *= (s[5] | 1u); + s[0] = s[0] * 0x1258c98fu + s[11]; + s[2] -= s[0]; + s[13] = mh_rotl(s[13], 5u) + s[2]; + s[15] = (s[15] ^ s[13]) * 0xa9ea982fu; + s[0] ^= (s[15] & s[5]); + s[14] = (s[14] ^ s[0]) * 0x8e658f2du; + s[7] = mh_rotl(s[7], 28u) + s[14]; + s[4] = (s[4] ^ s[7]) * 0xdffb5283u; + s[9] = mh_rotl(s[9], 18u) + s[4]; + s[5] = mh_rotl(s[5], 30u) + s[9]; + s[11] += s[5] + 0x67a75c51u; + s[3] = mh_rotl(s[3], 13u) + s[11]; + s[9] += s[3]; + s[1] ^= s[9] ^ 0xc25226c4u; + s[7] *= (s[1] | 1u); + s[12] ^= s[7]; + s[3] = mh_rotl(s[3] ^ s[12], 8u); + s[0] = mh_rotl(s[0], 13u) + s[3]; + s[9] = mh_rotl(s[9] ^ s[0], 9u); + s[14] ^= s[9]; + s[0] -= s[14]; + s[12] = mh_rotl(s[12], 4u) + s[0]; + s[6] += s[12] + 0x8a7a83b1u; + s[12] += s[6] + 0xce44f768u; + s[13] ^= s[12] ^ 0xa265fddcu; + s[3] = mh_rotl(s[3] ^ s[13], 28u); + s[2] += s[3]; + s[4] = (s[4] ^ s[2]) * 0xfaf1f025u; + s[5] *= (s[4] | 1u); + s[13] = (s[13] ^ s[5]) * 0x1bde9b5du; + s[2] += (s[13] | s[0]); + s[12] ^= s[2]; + s[11] += s[12]; + s[2] *= (s[11] | 1u); + s[11] = mh_rotl(s[11], 20u) + s[2]; + s[1] *= (s[11] | 1u); + s[5] = mh_rotl(s[5], 17u) + s[1]; + s[0] = mh_rotl(s[0], 7u) + s[5]; + s[11] ^= s[0]; + s[5] -= s[11]; + s[8] *= (s[5] | 1u); + s[10] *= (s[8] | 1u); + s[13] += s[10] + 0xc1818321u; + s[4] ^= s[13]; + s[1] = mh_rotl(s[1], 12u) + s[4]; + s[15] = mh_rotl(s[15] ^ s[1], 20u); + s[11] *= (s[15] | 1u); + s[13] *= (s[11] | 1u); + s[8] ^= s[13]; + s[5] = (s[5] ^ s[8]) * 0xcb34052bu; + s[12] = mh_rotl(s[12] ^ s[5], 24u); + s[5] = mh_rotl(s[5] ^ s[12], 12u); + s[9] = mh_rotl(s[9], 4u) + s[5]; + s[12] = s[12] * 0x44487769u + s[9]; + s[3] += s[12]; + s[7] = s[7] * 0x3d0dc719u + s[3]; + s[12] = mh_rotl(s[12], 25u) + s[7]; + s[14] = (s[14] ^ s[12]) * 0x0a26f463u; + s[5] ^= s[14] ^ 0x7e263a26u; + s[11] = mh_rotl(s[11], 29u) + s[5]; + s[14] -= s[11]; + s[12] = (s[12] ^ s[14]) * 0x05fc47afu; + s[11] ^= s[12]; + s[7] += s[11]; + s[8] -= s[7]; + s[4] ^= s[8]; + s[7] ^= s[4]; + s[11] ^= s[7]; + s[12] = mh_rotl(s[12], 18u) + s[11]; + s[7] += (s[12] | s[9]); + s[12] ^= s[7]; + s[1] += s[12] + 0x47217177u; + s[12] = (s[12] ^ s[1]) * 0x60a7a2a1u; + s[11] ^= s[12]; + s[13] = mh_rotl(s[13] ^ s[11], 20u); + s[11] ^= s[13]; + s[6] ^= s[11]; + s[0] *= (s[6] | 1u); + s[15] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[15], 4u); + s[9] = mh_rotl(s[9] ^ s[11], 20u); + s[0] = (s[0] ^ s[9]) * 0xe7aae81fu; + s[6] *= (s[0] | 1u); + s[15] += s[6]; + s[3] += s[15] + 0x6bbe960au; + s[12] -= s[3]; + s[8] *= (s[12] | 1u); + s[11] = s[11] * 0xcc54856fu + s[8]; + s[3] = (s[3] ^ s[11]) * 0x65049d67u; + s[1] -= s[3]; + s[3] *= (s[1] | 1u); + s[0] *= (s[3] | 1u); + s[12] *= (s[0] | 1u); + s[2] *= (s[12] | 1u); + s[12] -= s[2]; + s[6] ^= s[12]; + s[13] = s[13] * 0xfd8e78e7u + s[6]; + s[4] ^= s[13] ^ 0x36001de6u; + s[3] += s[4]; + s[6] -= s[3]; + s[4] *= (s[6] | 1u); + s[10] *= (s[4] | 1u); + s[7] ^= s[10]; + s[13] ^= s[7] ^ 0x3cc162e5u; + s[2] = (s[2] ^ s[13]) * 0xc6b38d29u; + s[8] ^= s[2] ^ 0x43ac5ec1u; + s[0] += (s[8] | s[14]); + s[3] += s[0] + 0xc94402c6u; + s[8] = (s[8] ^ s[3]) * 0x40a11c6du; + s[1] = mh_rotl(s[1] ^ s[8], 9u); + s[2] = (s[2] ^ s[1]) * 0x10ebfae9u; + s[8] += s[2] + 0x2e5cffd4u; + s[0] = mh_rotl(s[0], 4u) + s[8]; + s[2] *= (s[0] | 1u); + s[9] ^= s[2] ^ 0xea63f112u; + s[4] = mh_rotl(s[4] ^ s[9], 20u); + s[12] += (s[4] | s[0]); + s[6] = mh_rotl(s[6], 28u) + s[12]; + s[11] ^= s[6]; + s[2] = (s[2] ^ s[11]) * 0xb92e6187u; + s[6] += s[2]; + s[10] += (s[6] | s[2]); + s[8] ^= s[10]; + s[11] ^= s[8]; + s[12] = mh_rotl(s[12], 12u) + s[11]; + s[8] = s[8] * 0xcf6e39cbu + s[12]; + s[7] += s[8] + 0x07e25ae6u; + s[1] = (s[1] ^ s[7]) * 0x6550efddu; + s[15] += s[1] + 0xcd15560fu; + s[13] ^= s[15]; + s[4] = mh_rotl(s[4], 16u) + s[13]; + s[12] = (s[12] ^ s[4]) * 0x7129239fu; + s[9] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[9], 25u); + s[7] = mh_rotl(s[7], 9u) + s[6]; + s[2] ^= s[7]; + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[1] -= s[5]; + s[8] = s[8] * 0x1c6b90b7u + s[1]; + s[14] += s[8]; + s[3] *= (s[14] | 1u); + s[15] -= s[3]; + s[5] = s[5] * 0x1b17414fu + s[15]; + s[11] ^= s[5] ^ 0xd6b8f316u; + s[9] = mh_rotl(s[9], 25u) + s[11]; + s[0] = (s[0] ^ s[9]) * 0x36fce4cdu; + s[11] = (s[11] ^ s[0]) * 0x3ffedbedu; + s[6] = mh_rotl(s[6] ^ s[11], 28u); + s[0] = mh_rotl(s[0], 26u) + s[6]; + s[1] ^= s[0]; + s[7] = (s[7] ^ s[1]) * 0x4dfcedebu; + s[15] = mh_rotl(s[15], 26u) + s[7]; + s[14] = (s[14] ^ s[15]) * 0x6c9326edu; + s[4] = mh_rotl(s[4] ^ s[14], 23u); + s[9] += s[4]; + s[10] += s[9]; + s[1] += s[10]; + s[4] = mh_rotl(s[4] ^ s[1], 19u); + s[9] += s[4]; + s[13] += s[9]; + s[15] = mh_rotl(s[15], 6u) + s[13]; + s[6] = mh_rotl(s[6], 13u) + s[15]; + s[1] *= (s[6] | 1u); + s[11] = s[11] * 0x0aa13acfu + s[1]; + s[7] = (s[7] ^ s[11]) * 0xf0f30943u; + s[11] = mh_rotl(s[11], 5u) + s[7]; + s[12] ^= s[11]; + s[6] ^= s[12]; + s[3] ^= s[6]; + s[14] = mh_rotl(s[14], 11u) + s[3]; + s[12] = mh_rotl(s[12] ^ s[14], 8u); + s[13] *= (s[12] | 1u); + s[15] -= s[13]; + s[9] = s[9] * 0x111b0ab9u + s[15]; + s[0] = mh_rotl(s[0] ^ s[9], 2u); + s[13] ^= s[0] ^ 0x208f1223u; + s[1] = (s[1] ^ s[13]) * 0x8697b4f3u; + s[4] = s[4] * 0xf7e4eb9bu + s[1]; + s[12] = mh_rotl(s[12] ^ s[4], 20u); + s[6] = mh_rotl(s[6] ^ s[12], 16u); + s[7] += s[6] + 0xb04cedccu; + s[9] ^= (s[7] & s[12]); + s[15] = mh_rotl(s[15] ^ s[9], 8u); + s[14] = s[14] * 0xba13bfd9u + s[15]; + s[6] = mh_rotl(s[6], 30u) + s[14]; + s[2] ^= s[6] ^ 0xe3a68481u; + s[3] ^= s[2] ^ 0xdb295442u; + s[6] -= s[3]; + s[3] *= (s[6] | 1u); + s[14] ^= s[3]; + s[6] += s[14]; + s[0] += s[6]; + s[13] ^= s[0] ^ 0x2ce62ec8u; + s[9] -= s[13]; + s[6] = (s[6] ^ s[9]) * 0xb3667f91u; + s[12] ^= s[6] ^ 0xa40ba390u; + s[0] += s[12]; + s[13] = (s[13] ^ s[0]) * 0xcf132dbdu; + s[8] ^= s[13] ^ 0xc01a2e22u; + s[15] = mh_rotl(s[15], 29u) + s[8]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[12] += s[4] + 0xa106f25fu; + s[10] = mh_rotl(s[10], 2u) + s[12]; + s[1] ^= s[10]; + s[4] = s[4] * 0xd693bf07u + s[1]; + s[8] ^= s[4]; + s[15] += s[8]; + s[2] = (s[2] ^ s[15]) * 0x451147c5u; + s[6] += s[2]; + s[4] ^= s[6] ^ 0x95c3d40au; + s[8] ^= s[4]; + s[6] = mh_rotl(s[6] ^ s[8], 24u); + s[8] = s[8] * 0xfacd20cdu + s[6]; + s[3] *= (s[8] | 1u); + s[0] = s[0] * 0xf8f86c91u + s[3]; + s[9] *= (s[0] | 1u); + s[1] ^= s[9]; + s[13] ^= s[1]; + s[14] *= (s[13] | 1u); + s[0] += s[14] + 0x29396640u; + s[6] *= (s[0] | 1u); + s[13] -= s[6]; + s[4] ^= s[13]; + s[10] = mh_rotl(s[10], 29u) + s[4]; + s[11] = mh_rotl(s[11], 14u) + s[10]; + s[8] = mh_rotl(s[8], 14u) + s[11]; + s[12] = (s[12] ^ s[8]) * 0x7c958209u; + s[14] ^= s[12] ^ 0x6e81c671u; + s[6] ^= s[14]; + s[5] += s[6] + 0xe6b449c9u; + s[7] ^= (s[5] & s[12]); + s[8] = mh_rotl(s[8], 8u) + s[7]; + s[7] = s[7] * 0x3076e64fu + s[8]; + s[15] = s[15] * 0x4f3224dfu + s[7]; + s[9] = mh_rotl(s[9] ^ s[15], 24u); + s[5] = s[5] * 0x71865ddbu + s[9]; + s[2] += s[5] + 0xbd3e3e01u; + s[4] = mh_rotl(s[4] ^ s[2], 14u); + s[0] = (s[0] ^ s[4]) * 0x6b745769u; + s[9] -= s[0]; + s[4] ^= s[9]; + s[6] = mh_rotl(s[6] ^ s[4], 2u); + s[8] += (s[6] | s[10]); + s[1] *= (s[8] | 1u); + s[14] += (s[1] | s[6]); + s[6] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[6], 19u); + s[4] *= (s[13] | 1u); + s[10] ^= s[4] ^ 0xd06e492du; + s[9] ^= s[10] ^ 0x6d1c0c53u; + s[14] ^= s[9]; + s[13] ^= (s[14] & s[10]); + s[1] += (s[13] | s[4]); + s[11] = mh_rotl(s[11] ^ s[1], 30u); + s[0] += s[11]; + s[2] ^= (s[0] & s[13]); + s[0] -= s[2]; + s[12] = s[12] * 0x615420d7u + s[0]; + s[11] ^= (s[12] & s[3]); + s[1] = mh_rotl(s[1], 31u) + s[11]; + s[2] = mh_rotl(s[2] ^ s[1], 12u); + s[12] ^= s[2]; + s[8] ^= s[12]; + s[6] -= s[8]; + s[10] ^= s[6]; + s[14] ^= s[10]; + s[15] = mh_rotl(s[15] ^ s[14], 22u); + s[6] *= (s[15] | 1u); + s[1] ^= s[6]; + s[12] = s[12] * 0x513c5869u + s[1]; + s[6] = mh_rotl(s[6] ^ s[12], 21u); + s[9] ^= s[6]; + s[0] += s[9]; + s[12] ^= s[0]; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 4u); + s[1] ^= s[6]; + s[4] *= (s[1] | 1u); + s[6] = s[6] * 0xb444bcc1u + s[4]; + s[8] ^= s[6]; + s[7] ^= s[8] ^ 0x1a883d74u; + s[10] = mh_rotl(s[10] ^ s[7], 8u); + s[9] = mh_rotl(s[9], 16u) + s[10]; + s[6] += s[9]; + s[2] ^= s[6]; + s[14] = mh_rotl(s[14], 8u) + s[2]; + s[9] += (s[14] | s[11]); + s[15] *= (s[9] | 1u); + s[9] = mh_rotl(s[9], 9u) + s[15]; + s[8] = mh_rotl(s[8], 9u) + s[9]; + s[7] ^= s[8]; + s[5] ^= s[7]; + s[11] ^= s[5]; + s[4] *= (s[11] | 1u); + s[8] *= (s[4] | 1u); + s[12] += (s[8] | s[2]); + s[13] = s[13] * 0xed36b1e7u + s[12]; + s[1] ^= s[13]; + s[2] *= (s[1] | 1u); + s[5] = s[5] * 0x20dd61c9u + s[2]; + s[9] += s[5] + 0x4221406cu; + s[2] = (s[2] ^ s[9]) * 0xbd437fb1u; + s[10] ^= s[2]; + s[8] += (s[10] | s[4]); + s[1] += s[8]; + s[15] *= (s[1] | 1u); + s[10] *= (s[15] | 1u); + s[4] -= s[10]; + s[12] += s[4] + 0x2cc4a200u; + s[6] ^= s[12]; + s[11] += s[6] + 0x24df7960u; + s[13] -= s[11]; + s[4] ^= s[13]; + s[1] -= s[4]; + s[3] = mh_rotl(s[3] ^ s[1], 7u); + s[1] += s[3]; + s[9] += s[1]; + s[3] ^= s[9]; + s[6] ^= (s[3] & s[0]); + s[13] -= s[6]; + s[2] *= (s[13] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[2]; + s[1] *= (s[5] | 1u); + s[3] = (s[3] ^ s[1]) * 0x290a4cddu; + s[7] = (s[7] ^ s[3]) * 0x05557b07u; + s[3] = mh_rotl(s[3] ^ s[7], 7u); + s[9] += s[3]; + s[14] ^= s[9]; + s[0] = (s[0] ^ s[14]) * 0x84c021f1u; + s[14] ^= s[0]; + s[3] -= s[14]; + s[1] = s[1] * 0x6d78fdd7u + s[3]; + s[5] = (s[5] ^ s[1]) * 0x5e5c9e7bu; + s[12] += s[5]; + s[8] += (s[12] | s[3]); + s[13] += s[8] + 0x4759e773u; + s[15] += s[13]; + s[3] = (s[3] ^ s[15]) * 0x6664f1fdu; + s[6] *= (s[3] | 1u); + s[11] = (s[11] ^ s[6]) * 0x4e530d13u; + s[5] *= (s[11] | 1u); + s[1] += s[5] + 0x3dd89a81u; + s[14] = mh_rotl(s[14], 6u) + s[1]; + s[9] = mh_rotl(s[9], 2u) + s[14]; + s[14] += s[9]; + s[10] = mh_rotl(s[10] ^ s[14], 31u); + s[12] += s[10]; + s[7] ^= (s[12] & s[11]); + s[13] += s[7]; + s[4] = mh_rotl(s[4], 4u) + s[13]; + s[3] ^= (s[4] & s[10]); + s[5] ^= (s[3] & s[11]); + s[4] = mh_rotl(s[4], 22u) + s[5]; + s[3] -= s[4]; + s[5] ^= (s[3] & s[12]); + s[2] -= s[5]; + s[9] = (s[9] ^ s[2]) * 0x009bbf5bu; + s[4] += s[9]; + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[7] = mh_rotl(s[7] ^ s[15], 20u); + s[10] += s[7]; + s[4] = s[4] * 0x4bdd1ef7u + s[10]; + s[14] ^= (s[4] & s[2]); + s[9] = (s[9] ^ s[14]) * 0x52fb945du; + s[12] += s[9]; + s[9] ^= s[12]; + s[2] = mh_rotl(s[2] ^ s[9], 11u); + s[11] += s[2] + 0x98f50a09u; + s[15] += s[11] + 0xd43ed388u; + s[10] += s[15] + 0x2f9a932bu; + s[12] ^= (s[10] & s[15]); + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0xd453117du; + s[1] += (s[12] | s[2]); + s[5] += s[1]; + s[1] += s[5]; + s[14] -= s[1]; + s[8] -= s[14]; + s[10] -= s[8]; + s[13] ^= (s[10] & s[5]); + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[13] = (s[13] ^ s[5]) * 0x664791dfu; + s[15] -= s[13]; + s[3] += s[15]; + s[5] *= (s[3] | 1u); + s[2] = (s[2] ^ s[5]) * 0x93635545u; + s[8] ^= s[2] ^ 0xfd3c4040u; + s[12] ^= s[8] ^ 0x16edb512u; + s[1] ^= s[12] ^ 0x16c54637u; + s[4] += (s[1] | s[10]); + s[1] += s[4]; + s[13] ^= (s[1] & s[6]); + s[7] += s[13] + 0x3d8c4dc2u; + s[15] += s[7]; + s[14] = (s[14] ^ s[15]) * 0xa280205du; + s[8] += s[14] + 0xea00510eu; + s[15] += s[8] + 0x22e3c715u; + s[8] ^= s[15]; + s[4] ^= s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 20u); + s[0] += s[11]; + s[13] = mh_rotl(s[13], 15u) + s[0]; + s[14] ^= s[13]; + s[0] ^= s[14]; + s[10] -= s[0]; + s[14] = s[14] * 0x93e04059u + s[10]; + s[0] += s[14] + 0x5e852243u; + s[9] += s[0]; + s[11] ^= s[9] ^ 0x6a38274eu; + s[6] ^= s[11]; + s[9] ^= s[6] ^ 0x45fe04e0u; + s[15] ^= s[9]; + s[2] = mh_rotl(s[2] ^ s[15], 2u); + s[7] ^= s[2]; + s[3] = mh_rotl(s[3], 25u) + s[7]; + s[4] += s[3]; + s[0] = mh_rotl(s[0] ^ s[4], 30u); + s[14] ^= s[0]; + s[9] += s[14]; + s[1] = s[1] * 0x3f7558f3u + s[9]; + s[4] = s[4] * 0xe3e44fb9u + s[1]; + s[11] *= (s[4] | 1u); + s[1] += s[11]; + s[9] ^= s[1]; + s[12] *= (s[9] | 1u); + s[13] ^= s[12] ^ 0xde1987e8u; + s[11] ^= (s[13] & s[12]); + s[8] *= (s[11] | 1u); + s[4] += s[8] + 0x607d6073u; + s[0] = mh_rotl(s[0], 10u) + s[4]; + s[7] = (s[7] ^ s[0]) * 0x7b248651u; + s[1] = mh_rotl(s[1], 19u) + s[7]; + s[6] += s[1]; + s[9] += s[6]; + s[5] -= s[9]; + s[0] += s[5]; + s[6] = mh_rotl(s[6] ^ s[0], 28u); + s[1] -= s[6]; + s[12] += s[1] + 0x2a786432u; + s[15] = mh_rotl(s[15], 28u) + s[12]; + s[13] += s[15] + 0xcbe2f823u; + s[14] = mh_rotl(s[14] ^ s[13], 1u); + s[12] *= (s[14] | 1u); + s[2] += s[12]; + s[0] -= s[2]; + s[6] += s[0]; + s[5] = mh_rotl(s[5], 22u) + s[6]; + s[0] -= s[5]; + s[5] ^= s[0] ^ 0x2970012du; + s[10] ^= s[5] ^ 0xed24a370u; + s[0] ^= s[10]; + s[12] = s[12] * 0x41ce9517u + s[0]; + s[4] += s[12]; + s[13] = (s[13] ^ s[4]) * 0x2d1ce425u; + s[10] = (s[10] ^ s[13]) * 0x97e04693u; + s[6] = mh_rotl(s[6] ^ s[10], 31u); + s[8] += s[6]; + s[2] += s[8]; + s[4] -= s[2]; + s[2] = mh_rotl(s[2] ^ s[4], 5u); + s[4] ^= s[2]; + s[2] += s[4]; + s[14] = (s[14] ^ s[2]) * 0x1b32c769u; + s[13] ^= s[14]; + s[5] = mh_rotl(s[5] ^ s[13], 22u); + s[6] += (s[5] | s[8]); + s[9] = mh_rotl(s[9] ^ s[6], 29u); + s[10] += s[9]; + s[7] ^= s[10]; + s[14] = mh_rotl(s[14] ^ s[7], 18u); + s[10] = mh_rotl(s[10] ^ s[14], 10u); + s[2] = mh_rotl(s[2], 5u) + s[10]; + s[5] = mh_rotl(s[5], 13u) + s[2]; + s[12] += s[5]; + s[13] = (s[13] ^ s[12]) * 0x17c1f363u; + s[9] += (s[13] | s[7]); + s[13] *= (s[9] | 1u); + s[15] = mh_rotl(s[15], 19u) + s[13]; + s[12] = mh_rotl(s[12], 19u) + s[15]; + s[11] = mh_rotl(s[11] ^ s[12], 8u); +} +// Round program 4: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_4(thread uint* s) { + s[8] = s[8] * 0xaecd4a17u + s[0]; + s[7] = mh_rotl(s[7], 30u) + s[8]; + s[13] ^= s[7]; + s[3] ^= s[13] ^ 0x4f2a7676u; + s[4] = mh_rotl(s[4] ^ s[3], 3u); + s[8] += s[4]; + s[0] ^= s[8]; + s[8] = (s[8] ^ s[0]) * 0x13ad02a5u; + s[3] ^= s[8]; + s[8] += s[3]; + s[12] ^= s[8] ^ 0xee807166u; + s[5] = mh_rotl(s[5] ^ s[12], 25u); + s[1] ^= s[5]; + s[7] = (s[7] ^ s[1]) * 0x7f918ce5u; + s[8] += s[7]; + s[12] ^= s[8] ^ 0x0fe3941du; + s[6] *= (s[12] | 1u); + s[15] = mh_rotl(s[15], 30u) + s[6]; + s[8] += s[15]; + s[4] ^= s[8]; + s[3] -= s[4]; + s[0] += s[3]; + s[2] ^= (s[0] & s[5]); + s[10] += s[2]; + s[2] ^= s[10]; + s[6] -= s[2]; + s[5] += s[6]; + s[14] += (s[5] | s[3]); + s[11] += (s[14] | s[3]); + s[13] += s[11]; + s[8] = mh_rotl(s[8], 26u) + s[13]; + s[1] = mh_rotl(s[1] ^ s[8], 12u); + s[11] ^= (s[1] & s[8]); + s[14] = mh_rotl(s[14] ^ s[11], 10u); + s[7] = mh_rotl(s[7] ^ s[14], 25u); + s[5] = (s[5] ^ s[7]) * 0x3ef9db3bu; + s[8] += s[5]; + s[12] += s[8]; + s[10] *= (s[12] | 1u); + s[5] ^= s[10] ^ 0x3ac44be6u; + s[14] = s[14] * 0xdd348ca1u + s[5]; + s[3] ^= s[14] ^ 0xfd694e31u; + s[7] ^= s[3]; + s[6] ^= s[7] ^ 0x1c8fa07eu; + s[4] ^= s[6]; + s[2] ^= s[4]; + s[9] -= s[2]; + s[3] *= (s[9] | 1u); + s[9] += s[3]; + s[13] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[13], 11u); + s[1] = (s[1] ^ s[5]) * 0x41737ac3u; + s[10] ^= (s[1] & s[13]); + s[13] -= s[10]; + s[5] += s[13] + 0xef8b331eu; + s[14] += s[5]; + s[2] += s[14]; + s[3] *= (s[2] | 1u); + s[2] = mh_rotl(s[2] ^ s[3], 17u); + s[11] ^= s[2]; + s[3] = (s[3] ^ s[11]) * 0xe116294bu; + s[2] *= (s[3] | 1u); + s[6] ^= s[2]; + s[2] *= (s[6] | 1u); + s[12] ^= s[2] ^ 0x53bea191u; + s[14] *= (s[12] | 1u); + s[10] ^= s[14]; + s[4] *= (s[10] | 1u); + s[2] ^= s[4] ^ 0xced418d2u; + s[5] = s[5] * 0xe51463cbu + s[2]; + s[2] ^= s[5]; + s[6] += (s[2] | s[3]); + s[9] ^= (s[6] & s[15]); + s[0] = (s[0] ^ s[9]) * 0x52fd974du; + s[15] = mh_rotl(s[15] ^ s[0], 8u); + s[14] ^= s[15]; + s[8] = mh_rotl(s[8] ^ s[14], 15u); + s[12] ^= s[8]; + s[7] = mh_rotl(s[7], 9u) + s[12]; + s[3] ^= s[7] ^ 0x86710ff9u; + s[13] -= s[3]; + s[3] ^= s[13]; + s[5] = mh_rotl(s[5], 29u) + s[3]; + s[7] += (s[5] | s[8]); + s[6] += s[7]; + s[13] ^= s[6]; + s[5] ^= s[13]; + s[13] -= s[5]; + s[4] ^= s[13]; + s[0] = mh_rotl(s[0], 28u) + s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[0] = (s[0] ^ s[10]) * 0x4bce676du; + s[9] += s[0]; + s[15] ^= s[9]; + s[5] = mh_rotl(s[5] ^ s[15], 29u); + s[1] ^= s[5]; + s[10] ^= s[1]; + s[3] -= s[10]; + s[4] -= s[3]; + s[5] = mh_rotl(s[5] ^ s[4], 21u); + s[8] ^= s[5]; + s[4] += s[8]; + s[11] = mh_rotl(s[11] ^ s[4], 22u); + s[7] ^= s[11]; + s[11] ^= s[7] ^ 0x678e4d82u; + s[7] = (s[7] ^ s[11]) * 0x3b4b50bfu; + s[12] += s[7]; + s[15] *= (s[12] | 1u); + s[3] = mh_rotl(s[3] ^ s[15], 7u); + s[0] = mh_rotl(s[0], 11u) + s[3]; + s[4] -= s[0]; + s[3] ^= s[4]; + s[11] ^= s[3]; + s[4] *= (s[11] | 1u); + s[2] -= s[4]; + s[1] -= s[2]; + s[9] ^= s[1]; + s[11] -= s[9]; + s[9] ^= s[11]; + s[10] = (s[10] ^ s[9]) * 0x5a972befu; + s[7] ^= (s[10] & s[4]); + s[15] = (s[15] ^ s[7]) * 0xac20e017u; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[10] -= s[3]; + s[5] *= (s[10] | 1u); + s[6] += s[5]; + s[15] = mh_rotl(s[15] ^ s[6], 3u); + s[4] = (s[4] ^ s[15]) * 0xbeaf0ba9u; + s[9] *= (s[4] | 1u); + s[12] ^= s[9]; + s[8] ^= s[12]; + s[14] *= (s[8] | 1u); + s[6] = mh_rotl(s[6] ^ s[14], 16u); + s[10] += s[6]; + s[1] += s[10]; + s[3] ^= s[1]; + s[9] -= s[3]; + s[6] += s[9]; + s[15] = mh_rotl(s[15], 13u) + s[6]; + s[10] ^= (s[15] & s[1]); + s[3] = mh_rotl(s[3], 3u) + s[10]; + s[9] = mh_rotl(s[9], 11u) + s[3]; + s[2] ^= s[9] ^ 0x8f89660fu; + s[0] = mh_rotl(s[0] ^ s[2], 21u); + s[13] = (s[13] ^ s[0]) * 0x486a43b3u; + s[10] += s[13]; + s[4] ^= s[10]; + s[14] ^= s[4]; + s[2] ^= s[14]; + s[7] += s[2] + 0xd5248764u; + s[1] ^= s[7]; + s[5] ^= (s[1] & s[14]); + s[8] *= (s[5] | 1u); + s[14] += s[8]; + s[4] -= s[14]; + s[6] = mh_rotl(s[6], 1u) + s[4]; + s[3] = mh_rotl(s[3] ^ s[6], 25u); + s[9] = mh_rotl(s[9], 10u) + s[3]; + s[7] += s[9]; + s[4] += s[7]; + s[2] = (s[2] ^ s[4]) * 0xf5d8c485u; + s[13] *= (s[2] | 1u); + s[8] ^= s[13]; + s[12] ^= s[8]; + s[0] += s[12] + 0xcbe96ecfu; + s[10] += s[0]; + s[4] += s[10]; + s[15] ^= s[4]; + s[11] *= (s[15] | 1u); + s[4] = s[4] * 0x8a37f349u + s[11]; + s[2] += s[4]; + s[10] = mh_rotl(s[10] ^ s[2], 14u); + s[12] += s[10]; + s[7] ^= s[12]; + s[6] = (s[6] ^ s[7]) * 0x5d00c42du; + s[0] ^= s[6]; + s[11] ^= s[0]; + s[15] += s[11]; + s[8] += s[15]; + s[11] ^= s[8]; + s[8] ^= (s[11] & s[7]); + s[15] -= s[8]; + s[2] -= s[15]; + s[14] += s[2]; + s[5] += s[14]; + s[11] ^= (s[5] & s[8]); + s[3] ^= s[11] ^ 0xe126a36du; + s[10] += s[3]; + s[14] += s[10]; + s[8] ^= s[14] ^ 0x52400d07u; + s[12] *= (s[8] | 1u); + s[15] ^= (s[12] & s[11]); + s[3] = mh_rotl(s[3] ^ s[15], 1u); + s[12] += s[3] + 0xd372258fu; + s[4] ^= s[12] ^ 0xf284d169u; + s[11] -= s[4]; + s[13] = mh_rotl(s[13], 1u) + s[11]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[0] *= (s[13] | 1u); + s[9] ^= s[0]; + s[1] = s[1] * 0xb05d4c01u + s[9]; + s[8] -= s[1]; + s[1] += s[8]; + s[4] = mh_rotl(s[4], 31u) + s[1]; + s[6] ^= s[4]; + s[7] ^= (s[6] & s[4]); + s[10] += s[7] + 0xc4e27d81u; + s[5] += s[10]; + s[3] *= (s[5] | 1u); + s[12] += s[3] + 0xeb606a4au; + s[11] ^= s[12] ^ 0x25bef1a4u; + s[15] *= (s[11] | 1u); + s[13] += s[15] + 0x2f08e9bbu; + s[14] += s[13]; + s[1] ^= s[14]; + s[9] *= (s[1] | 1u); + s[12] += s[9]; + s[6] *= (s[12] | 1u); + s[7] += (s[6] | s[1]); + s[13] += s[7]; + s[7] = mh_rotl(s[7], 1u) + s[13]; + s[5] = mh_rotl(s[5], 5u) + s[7]; + s[1] *= (s[5] | 1u); + s[14] = (s[14] ^ s[1]) * 0x050194b7u; + s[15] += s[14]; + s[9] = mh_rotl(s[9] ^ s[15], 18u); + s[13] = s[13] * 0xb23e5f33u + s[9]; + s[11] = mh_rotl(s[11], 3u) + s[13]; + s[10] += s[11]; + s[11] *= (s[10] | 1u); + s[3] ^= s[11]; + s[6] = mh_rotl(s[6] ^ s[3], 4u); + s[0] ^= (s[6] & s[1]); + s[10] += s[0]; + s[12] = mh_rotl(s[12], 20u) + s[10]; + s[1] *= (s[12] | 1u); + s[6] *= (s[1] | 1u); + s[7] += s[6]; + s[5] ^= s[7]; + s[13] ^= s[5]; + s[7] ^= s[13]; + s[6] ^= s[7]; + s[11] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[11], 9u); + s[8] ^= s[7] ^ 0x619be41bu; + s[4] = (s[4] ^ s[8]) * 0xa41b1063u; + s[8] = (s[8] ^ s[4]) * 0x39fd4b17u; + s[12] += s[8]; + s[0] = mh_rotl(s[0] ^ s[12], 17u); + s[1] += (s[0] | s[12]); + s[3] = mh_rotl(s[3] ^ s[1], 26u); + s[15] += s[3]; + s[2] ^= s[15] ^ 0xac74167cu; + s[4] += s[2]; + s[7] += s[4]; + s[3] ^= (s[7] & s[5]); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[15] -= s[4]; + s[3] += (s[15] | s[11]); + s[4] += s[3]; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[14] += (s[8] | s[3]); + s[6] = s[6] * 0x88bcb913u + s[14]; + s[2] = mh_rotl(s[2], 26u) + s[6]; + s[9] *= (s[2] | 1u); + s[4] += s[9] + 0xf68758d3u; + s[11] ^= s[4] ^ 0xe7cb0a2du; + s[15] ^= s[11]; + s[0] = mh_rotl(s[0] ^ s[15], 10u); + s[1] ^= s[0] ^ 0x01a1a184u; + s[2] += s[1]; + s[6] = mh_rotl(s[6], 6u) + s[2]; + s[12] = mh_rotl(s[12] ^ s[6], 18u); + s[14] ^= (s[12] & s[13]); + s[15] += s[14]; + s[4] = s[4] * 0x45d3b6d1u + s[15]; + s[15] += s[4] + 0x287abc40u; + s[12] *= (s[15] | 1u); + s[7] *= (s[12] | 1u); + s[8] += s[7]; + s[15] = mh_rotl(s[15] ^ s[8], 31u); + s[14] = (s[14] ^ s[15]) * 0x4d24e02fu; + s[0] += s[14] + 0x2e93de43u; + s[9] ^= s[0]; + s[1] -= s[9]; + s[4] += s[1] + 0x7018f3c1u; + s[5] = mh_rotl(s[5] ^ s[4], 22u); + s[4] = (s[4] ^ s[5]) * 0x5d42c6b7u; + s[1] = mh_rotl(s[1], 19u) + s[4]; + s[10] *= (s[1] | 1u); + s[6] = (s[6] ^ s[10]) * 0xb3b283ddu; + s[0] += (s[6] | s[4]); + s[4] = mh_rotl(s[4] ^ s[0], 10u); + s[2] = mh_rotl(s[2], 18u) + s[4]; + s[3] += s[2] + 0xf72224c1u; + s[2] ^= s[3]; + s[6] ^= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[6]; + s[13] -= s[11]; + s[8] += s[13]; + s[6] += s[8]; + s[2] = mh_rotl(s[2] ^ s[6], 2u); + s[3] = (s[3] ^ s[2]) * 0xe72cd1e5u; + s[10] ^= s[3]; + s[9] = (s[9] ^ s[10]) * 0xdaae888fu; + s[12] = mh_rotl(s[12] ^ s[9], 13u); + s[13] += s[12]; + s[12] += s[13] + 0x1bf086c5u; + s[10] += s[12]; + s[5] = mh_rotl(s[5], 20u) + s[10]; + s[13] = (s[13] ^ s[5]) * 0x332136d3u; + s[0] = mh_rotl(s[0] ^ s[13], 30u); + s[2] += (s[0] | s[7]); + s[1] ^= s[2] ^ 0x906c1640u; + s[8] += (s[1] | s[13]); + s[13] = mh_rotl(s[13] ^ s[8], 27u); + s[4] = (s[4] ^ s[13]) * 0x8f6a7f2du; + s[10] ^= s[4]; + s[6] *= (s[10] | 1u); + s[3] ^= s[6]; + s[2] -= s[3]; + s[10] += (s[2] | s[14]); + s[4] ^= s[10]; + s[7] = mh_rotl(s[7] ^ s[4], 13u); + s[15] += s[7]; + s[6] += s[15]; + s[3] += (s[6] | s[9]); + s[4] = mh_rotl(s[4] ^ s[3], 14u); + s[13] += s[4] + 0xfa50a754u; + s[12] ^= s[13]; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[3] += s[14]; + s[8] -= s[3]; + s[12] = mh_rotl(s[12], 11u) + s[8]; + s[8] = s[8] * 0x68315979u + s[12]; + s[3] ^= s[8] ^ 0x0c36ecd9u; + s[11] *= (s[3] | 1u); + s[15] *= (s[11] | 1u); + s[10] *= (s[15] | 1u); + s[5] ^= s[10]; + s[9] = mh_rotl(s[9], 7u) + s[5]; + s[6] = s[6] * 0xb4800e07u + s[9]; + s[14] += s[6] + 0xe2b19752u; + s[6] += s[14] + 0x5b6cb907u; + s[14] ^= s[6]; + s[3] ^= (s[14] & s[10]); + s[7] *= (s[3] | 1u); + s[1] += s[7] + 0x072137beu; + s[0] ^= (s[1] & s[8]); + s[8] += s[0]; + s[9] += s[8] + 0x02e4e39bu; + s[14] += s[9] + 0xe9bf76a8u; + s[2] ^= s[14]; + s[0] = s[0] * 0x76da5405u + s[2]; + s[10] = mh_rotl(s[10] ^ s[0], 20u); + s[13] += s[10]; + s[7] = mh_rotl(s[7] ^ s[13], 27u); + s[1] += s[7]; + s[12] = mh_rotl(s[12], 4u) + s[1]; + s[5] = s[5] * 0xfc599aedu + s[12]; + s[10] -= s[5]; + s[0] += s[10]; + s[8] = mh_rotl(s[8] ^ s[0], 10u); + s[11] ^= s[8]; + s[14] += s[11]; + s[2] -= s[14]; + s[12] += s[2] + 0x573e5081u; + s[0] ^= s[12] ^ 0x571e5302u; + s[2] ^= s[0]; + s[5] ^= s[2]; + s[8] ^= s[5] ^ 0xdac0ab44u; + s[11] = mh_rotl(s[11] ^ s[8], 6u); + s[0] += s[11]; + s[2] += s[0]; + s[6] ^= s[2]; + s[2] = mh_rotl(s[2], 31u) + s[6]; + s[11] += s[2]; + s[12] += s[11]; + s[2] += s[12] + 0xc9a167b4u; + s[5] += s[2]; + s[2] += s[5]; + s[9] ^= s[2]; + s[12] = (s[12] ^ s[9]) * 0x813582c9u; + s[2] += s[12]; + s[3] = mh_rotl(s[3] ^ s[2], 8u); + s[5] *= (s[3] | 1u); + s[4] += s[5]; + s[3] *= (s[4] | 1u); + s[6] *= (s[3] | 1u); + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[12] += s[3]; + s[5] -= s[12]; + s[3] = s[3] * 0x9fa250c7u + s[5]; + s[15] += (s[3] | s[12]); + s[14] ^= (s[15] & s[11]); + s[6] += s[14]; + s[4] += s[6]; + s[3] = s[3] * 0x07092e11u + s[4]; + s[4] = mh_rotl(s[4] ^ s[3], 9u); + s[11] *= (s[4] | 1u); + s[6] += s[11]; + s[10] *= (s[6] | 1u); + s[6] *= (s[10] | 1u); + s[4] ^= s[6]; + s[12] = mh_rotl(s[12], 28u) + s[4]; + s[10] ^= s[12]; + s[8] += s[10]; + s[15] = (s[15] ^ s[8]) * 0x23fc87d7u; + s[3] += s[15]; + s[8] ^= s[3]; + s[5] = s[5] * 0x4812e6c5u + s[8]; + s[11] -= s[5]; + s[0] *= (s[11] | 1u); + s[7] *= (s[0] | 1u); + s[10] ^= s[7]; + s[12] += (s[10] | s[5]); + s[5] ^= s[12]; + s[0] *= (s[5] | 1u); + s[15] -= s[0]; + s[8] = mh_rotl(s[8], 23u) + s[15]; + s[13] = s[13] * 0x83e86a8bu + s[8]; + s[7] += s[13]; + s[11] = (s[11] ^ s[7]) * 0xd510d0b1u; + s[7] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[7], 11u); + s[13] *= (s[2] | 1u); + s[1] ^= s[13]; + s[9] ^= s[1]; + s[8] -= s[9]; + s[1] += s[8]; + s[2] += s[1]; + s[1] -= s[2]; + s[12] = (s[12] ^ s[1]) * 0x1205ac95u; + s[3] = mh_rotl(s[3], 22u) + s[12]; + s[0] ^= s[3]; + s[1] ^= s[0] ^ 0xa613bb86u; + s[12] += s[1] + 0x5cc04f4bu; + s[3] -= s[12]; + s[6] = (s[6] ^ s[3]) * 0xff2c5e5du; + s[7] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[7], 20u); + s[13] = (s[13] ^ s[2]) * 0xc3c13b61u; + s[6] ^= s[13]; + s[13] ^= s[6]; + s[5] = mh_rotl(s[5], 11u) + s[13]; + s[9] += s[5]; + s[15] ^= s[9]; + s[6] = (s[6] ^ s[15]) * 0xd0ff64bbu; + s[15] = mh_rotl(s[15] ^ s[6], 17u); + s[10] ^= (s[15] & s[5]); + s[13] = mh_rotl(s[13] ^ s[10], 22u); + s[2] += s[13]; + s[5] ^= s[2] ^ 0x434fd088u; + s[7] ^= (s[5] & s[2]); + s[13] ^= s[7]; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[12] += s[3]; + s[5] ^= s[12]; + s[9] = mh_rotl(s[9] ^ s[5], 8u); + s[5] *= (s[9] | 1u); + s[14] += s[5] + 0x3680f66du; + s[15] += s[14]; + s[12] -= s[15]; + s[4] *= (s[12] | 1u); + s[7] ^= (s[4] & s[6]); + s[3] = mh_rotl(s[3], 2u) + s[7]; + s[6] = mh_rotl(s[6], 5u) + s[3]; + s[10] += s[6]; + s[4] ^= (s[10] & s[3]); + s[0] ^= s[4]; + s[12] ^= s[0]; + s[15] ^= s[12]; + s[6] += (s[15] | s[7]); + s[3] += s[6]; + s[9] = mh_rotl(s[9], 2u) + s[3]; + s[15] += s[9]; + s[9] = mh_rotl(s[9] ^ s[15], 6u); + s[2] = mh_rotl(s[2], 28u) + s[9]; + s[7] = (s[7] ^ s[2]) * 0x49571301u; + s[10] = mh_rotl(s[10], 8u) + s[7]; + s[9] = mh_rotl(s[9], 22u) + s[10]; + s[2] *= (s[9] | 1u); + s[7] = s[7] * 0x461c2c9bu + s[2]; + s[4] += s[7]; + s[12] += s[4]; + s[1] = mh_rotl(s[1] ^ s[12], 30u); + s[11] ^= s[1] ^ 0x41684119u; + s[6] ^= s[11]; + s[5] *= (s[6] | 1u); + s[12] ^= s[5] ^ 0x5e252f68u; + s[15] = mh_rotl(s[15] ^ s[12], 13u); + s[0] = s[0] * 0xcfa728bbu + s[15]; + s[7] += s[0]; + s[3] *= (s[7] | 1u); + s[5] = (s[5] ^ s[3]) * 0x4c101bb3u; + s[13] -= s[5]; + s[12] += s[13]; + s[13] -= s[12]; + s[15] ^= s[13]; + s[5] = (s[5] ^ s[15]) * 0xffd85c8du; + s[4] = mh_rotl(s[4], 21u) + s[5]; + s[7] ^= s[4]; + s[12] = mh_rotl(s[12], 16u) + s[7]; + s[11] -= s[12]; + s[3] = mh_rotl(s[3], 17u) + s[11]; + s[7] ^= s[3]; + s[0] -= s[7]; + s[9] ^= s[0]; + s[7] = mh_rotl(s[7], 11u) + s[9]; + s[4] += s[7]; + s[1] ^= s[4]; + s[8] = s[8] * 0xd56caf87u + s[1]; + s[15] -= s[8]; + s[12] ^= s[15]; + s[7] ^= s[12]; + s[15] -= s[7]; + s[10] += s[15] + 0x32455b49u; + s[12] = mh_rotl(s[12] ^ s[10], 6u); + s[5] ^= s[12] ^ 0x024545fbu; + s[12] += s[5]; + s[10] ^= s[12] ^ 0xc7112001u; + s[1] = (s[1] ^ s[10]) * 0xa0829e23u; + s[7] *= (s[1] | 1u); + s[15] = (s[15] ^ s[7]) * 0x42ed41f9u; + s[12] = mh_rotl(s[12], 12u) + s[15]; + s[3] += s[12] + 0xfc638f44u; + s[8] ^= s[3]; + s[12] -= s[8]; + s[8] += (s[12] | s[4]); + s[14] ^= s[8]; + s[4] += s[14]; + s[0] ^= s[4] ^ 0x4890174au; + s[14] += s[0]; + s[10] += s[14]; + s[1] -= s[10]; + s[4] ^= s[1]; + s[7] *= (s[4] | 1u); + s[4] *= (s[7] | 1u); + s[7] ^= s[4]; + s[2] = (s[2] ^ s[7]) * 0x14382f11u; + s[1] *= (s[2] | 1u); + s[15] ^= s[1]; + s[5] = mh_rotl(s[5] ^ s[15], 4u); + s[12] = (s[12] ^ s[5]) * 0x818ffff7u; + s[13] ^= s[12] ^ 0x3c40017du; + s[10] = mh_rotl(s[10], 6u) + s[13]; + s[12] = s[12] * 0x2c1775d5u + s[10]; + s[8] += (s[12] | s[11]); + s[1] = mh_rotl(s[1], 4u) + s[8]; + s[8] += s[1] + 0x0134d33fu; + s[5] = mh_rotl(s[5] ^ s[8], 18u); + s[10] -= s[5]; + s[14] += s[10]; + s[2] = mh_rotl(s[2] ^ s[14], 26u); + s[10] += s[2]; + s[5] = mh_rotl(s[5] ^ s[10], 25u); + s[3] += s[5]; + s[15] -= s[3]; + s[6] ^= (s[15] & s[14]); + s[12] -= s[6]; + s[5] -= s[12]; + s[6] += s[5] + 0x35380dd4u; + s[9] ^= s[6]; + s[4] = mh_rotl(s[4], 12u) + s[9]; + s[12] = (s[12] ^ s[4]) * 0x88440653u; + s[5] += s[12]; + s[6] = mh_rotl(s[6] ^ s[5], 22u); + s[11] = mh_rotl(s[11] ^ s[6], 31u); + s[5] = mh_rotl(s[5] ^ s[11], 11u); + s[4] += s[5] + 0xc2928041u; + s[2] -= s[4]; + s[12] ^= s[2]; + s[2] ^= s[12]; + s[10] ^= s[2] ^ 0x18d1c7f6u; + s[12] = (s[12] ^ s[10]) * 0xe5af4085u; + s[0] -= s[12]; + s[13] += s[0] + 0xbab4883eu; + s[5] = mh_rotl(s[5] ^ s[13], 28u); + s[1] = (s[1] ^ s[5]) * 0x22410953u; + s[10] = mh_rotl(s[10], 12u) + s[1]; + s[1] = (s[1] ^ s[10]) * 0xb2399be7u; + s[8] += s[1] + 0x705befa8u; + s[6] = mh_rotl(s[6], 4u) + s[8]; + s[5] ^= s[6]; + s[8] += s[5] + 0x17cc5e00u; + s[4] -= s[8]; + s[5] ^= s[4]; + s[15] += s[5]; + s[8] ^= s[15]; + s[12] += s[8]; + s[3] -= s[12]; + s[11] += s[3]; + s[12] = mh_rotl(s[12], 2u) + s[11]; + s[3] = s[3] * 0xd6adb5cbu + s[12]; + s[6] += s[3]; + s[5] = (s[5] ^ s[6]) * 0x712deca1u; + s[8] += s[5]; + s[13] *= (s[8] | 1u); + s[7] ^= s[13] ^ 0xa85619d9u; + s[4] += s[7] + 0xb2a236bcu; + s[8] = mh_rotl(s[8] ^ s[4], 2u); + s[0] -= s[8]; + s[13] = mh_rotl(s[13], 24u) + s[0]; + s[4] ^= s[13]; + s[10] ^= s[4]; + s[5] ^= s[10] ^ 0x37c54528u; + s[15] ^= s[5]; + s[4] ^= s[15] ^ 0x0bec700du; + s[0] ^= s[4]; + s[6] ^= s[0]; + s[11] ^= (s[6] & s[8]); + s[5] ^= (s[11] & s[1]); + s[13] ^= s[5]; + s[2] *= (s[13] | 1u); + s[10] += s[2] + 0xbc7e8198u; + s[12] ^= s[10]; + s[3] ^= s[12]; + s[5] ^= (s[3] & s[1]); + s[8] ^= s[5]; + s[11] += s[8]; + s[7] ^= s[11]; + s[15] += s[7] + 0xfcc72c89u; + s[0] += s[15]; + s[2] = s[2] * 0x7b366e1fu + s[0]; + s[4] = s[4] * 0x410f7c31u + s[2]; + s[14] += s[4]; + s[8] = (s[8] ^ s[14]) * 0x06b5c483u; + s[13] ^= s[8]; + s[4] *= (s[13] | 1u); + s[7] = mh_rotl(s[7], 14u) + s[4]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[9] += s[12]; + s[14] ^= s[9]; + s[0] += s[14] + 0xe2ef88f9u; + s[12] += s[0]; + s[14] *= (s[12] | 1u); + s[1] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[1], 27u); + s[6] -= s[12]; + s[10] += s[6]; + s[11] *= (s[10] | 1u); + s[3] += (s[11] | s[7]); + s[13] += s[3] + 0x2a6dd670u; + s[12] += s[13]; + s[14] = mh_rotl(s[14] ^ s[12], 16u); + s[12] += s[14]; + s[3] = mh_rotl(s[3] ^ s[12], 10u); + s[7] ^= s[3] ^ 0xe2b68ee9u; + s[13] *= (s[7] | 1u); + s[3] ^= (s[13] & s[1]); + s[14] += s[3] + 0x9d70728au; + s[4] += (s[14] | s[2]); + s[0] += s[4]; + s[2] -= s[0]; + s[10] *= (s[2] | 1u); + s[3] -= s[10]; + s[11] += s[3] + 0x1b93fbbau; + s[1] = (s[1] ^ s[11]) * 0xad24de07u; + s[7] ^= s[1] ^ 0xf567e775u; + s[11] ^= s[7]; + s[13] = (s[13] ^ s[11]) * 0xb2957691u; + s[7] = mh_rotl(s[7], 20u) + s[13]; + s[13] *= (s[7] | 1u); + s[10] += s[13]; + s[13] ^= s[10]; + s[2] ^= s[13]; + s[6] ^= s[2]; + s[11] += s[6] + 0xa3624a2au; + s[13] -= s[11]; + s[15] = mh_rotl(s[15] ^ s[13], 23u); + s[7] = mh_rotl(s[7], 20u) + s[15]; + s[5] -= s[7]; + s[0] ^= s[5]; + s[7] -= s[0]; + s[4] += s[7]; + s[12] += s[4] + 0x2c1f1085u; + s[11] = mh_rotl(s[11] ^ s[12], 14u); + s[9] += s[11] + 0xfdecf3f9u; + s[5] += s[9] + 0x2c06a4fau; + s[0] ^= (s[5] & s[12]); + s[11] *= (s[0] | 1u); + s[5] = mh_rotl(s[5], 22u) + s[11]; + s[2] = mh_rotl(s[2], 23u) + s[5]; + s[14] = (s[14] ^ s[2]) * 0x953e8e65u; + s[1] = mh_rotl(s[1], 4u) + s[14]; + s[13] = (s[13] ^ s[1]) * 0xb422e8dfu; + s[5] += s[13]; + s[8] = s[8] * 0xdd24c5ddu + s[5]; + s[15] *= (s[8] | 1u); + s[13] -= s[15]; + s[5] += s[13]; + s[8] += (s[5] | s[0]); + s[4] = (s[4] ^ s[8]) * 0x90f74f8du; + s[10] = mh_rotl(s[10], 6u) + s[4]; + s[8] ^= s[10]; + s[14] = (s[14] ^ s[8]) * 0x68eea367u; + s[13] += s[14] + 0x4bf33e83u; + s[8] = (s[8] ^ s[13]) * 0xe5bb45edu; + s[13] += (s[8] | s[1]); + s[15] ^= s[13] ^ 0xffc7db9bu; + s[3] += s[15]; + s[0] ^= s[3]; + s[15] = mh_rotl(s[15] ^ s[0], 9u); + s[12] -= s[15]; + s[8] ^= s[12]; + s[5] += s[8] + 0x8c8db6c6u; + s[9] -= s[5]; + s[4] ^= s[9]; + s[1] = (s[1] ^ s[4]) * 0xcdb30e8bu; + s[10] += s[1]; + s[15] = mh_rotl(s[15], 19u) + s[10]; + s[11] *= (s[15] | 1u); + s[8] = (s[8] ^ s[11]) * 0x1ac4b2f9u; + s[11] += s[8]; + s[10] = mh_rotl(s[10] ^ s[11], 2u); + s[1] -= s[10]; + s[6] ^= (s[1] & s[5]); + s[10] = (s[10] ^ s[6]) * 0x7f568bd3u; + s[1] = (s[1] ^ s[10]) * 0x9987ff9bu; + s[2] ^= s[1] ^ 0xc9b72de7u; + s[3] += s[2]; + s[7] = mh_rotl(s[7] ^ s[3], 14u); + s[1] = mh_rotl(s[1] ^ s[7], 17u); + s[11] *= (s[1] | 1u); + s[15] -= s[11]; + s[13] ^= s[15]; + s[5] *= (s[13] | 1u); + s[13] *= (s[5] | 1u); + s[9] += s[13]; + s[1] = s[1] * 0xfeea9fa1u + s[9]; + s[8] = s[8] * 0xcfe61b7fu + s[1]; + s[4] -= s[8]; + s[0] += s[4] + 0x73688400u; +} +// Round program 5: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_5(thread uint* s) { + s[1] ^= s[0] ^ 0x7be05e0cu; + s[8] ^= s[1] ^ 0xbb15eaa7u; + s[3] *= (s[8] | 1u); + s[5] = mh_rotl(s[5] ^ s[3], 14u); + s[10] = mh_rotl(s[10], 22u) + s[5]; + s[6] ^= s[10]; + s[1] += s[6]; + s[2] = (s[2] ^ s[1]) * 0x315dc983u; + s[3] += s[2]; + s[12] += s[3] + 0x503a8a69u; + s[7] ^= (s[12] & s[8]); + s[11] = (s[11] ^ s[7]) * 0x99203cd1u; + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[5] += s[13]; + s[13] = (s[13] ^ s[5]) * 0x290906f1u; + s[6] += (s[13] | s[11]); + s[14] *= (s[6] | 1u); + s[10] += s[14]; + s[12] = mh_rotl(s[12] ^ s[10], 10u); + s[11] += s[12]; + s[1] ^= (s[11] & s[8]); + s[14] += s[1] + 0xb8346947u; + s[10] = s[10] * 0x973f37cdu + s[14]; + s[11] -= s[10]; + s[8] *= (s[11] | 1u); + s[14] ^= s[8]; + s[8] += s[14]; + s[0] = (s[0] ^ s[8]) * 0x82fd2f6du; + s[3] ^= (s[0] & s[5]); + s[10] += s[3]; + s[1] -= s[10]; + s[0] ^= s[1]; + s[5] -= s[0]; + s[11] *= (s[5] | 1u); + s[9] = mh_rotl(s[9] ^ s[11], 4u); + s[5] -= s[9]; + s[12] ^= s[5]; + s[15] = mh_rotl(s[15], 19u) + s[12]; + s[5] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[5], 23u); + s[10] ^= s[15] ^ 0x3e4fd17bu; + s[7] ^= (s[10] & s[13]); + s[1] ^= s[7]; + s[10] = (s[10] ^ s[1]) * 0xa58c234du; + s[2] += s[10]; + s[7] += s[2]; + s[14] = mh_rotl(s[14] ^ s[7], 14u); + s[15] ^= s[14]; + s[11] ^= s[15] ^ 0x031afa2eu; + s[8] ^= (s[11] & s[12]); + s[4] = mh_rotl(s[4] ^ s[8], 14u); + s[15] *= (s[4] | 1u); + s[14] *= (s[15] | 1u); + s[1] ^= s[14]; + s[0] = mh_rotl(s[0] ^ s[1], 17u); + s[6] -= s[0]; + s[11] ^= s[6]; + s[7] *= (s[11] | 1u); + s[15] += s[7]; + s[1] = (s[1] ^ s[15]) * 0x65c90267u; + s[9] ^= s[1]; + s[12] = (s[12] ^ s[9]) * 0x37b05dbdu; + s[5] += s[12]; + s[1] += s[5] + 0x9ef7f880u; + s[13] -= s[1]; + s[8] = (s[8] ^ s[13]) * 0x4dccc6e3u; + s[15] *= (s[8] | 1u); + s[10] = mh_rotl(s[10], 15u) + s[15]; + s[4] = s[4] * 0xa7087673u + s[10]; + s[7] += s[4]; + s[4] = mh_rotl(s[4], 25u) + s[7]; + s[1] = s[1] * 0xd0d20effu + s[4]; + s[11] = mh_rotl(s[11], 3u) + s[1]; + s[15] ^= (s[11] & s[10]); + s[6] += s[15]; + s[10] *= (s[6] | 1u); + s[0] += s[10]; + s[15] ^= s[0]; + s[3] += (s[15] | s[13]); + s[8] += s[3]; + s[13] = s[13] * 0x647918d1u + s[8]; + s[4] -= s[13]; + s[1] -= s[4]; + s[8] -= s[1]; + s[0] += s[8]; + s[4] ^= s[0]; + s[2] = mh_rotl(s[2], 16u) + s[4]; + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[13] -= s[5]; + s[14] ^= s[13]; + s[13] += s[14] + 0x09e91881u; + s[10] = mh_rotl(s[10], 1u) + s[13]; + s[15] *= (s[10] | 1u); + s[3] = mh_rotl(s[3], 22u) + s[15]; + s[5] *= (s[3] | 1u); + s[0] = mh_rotl(s[0], 13u) + s[5]; + s[2] ^= s[0]; + s[7] ^= s[2]; + s[4] += s[7]; + s[8] += s[4]; + s[12] *= (s[8] | 1u); + s[4] = (s[4] ^ s[12]) * 0xf334efabu; + s[11] ^= s[4]; + s[1] -= s[11]; + s[5] += s[1]; + s[14] = mh_rotl(s[14] ^ s[5], 4u); + s[7] = mh_rotl(s[7], 2u) + s[14]; + s[12] = s[12] * 0x9d3fac25u + s[7]; + s[10] = (s[10] ^ s[12]) * 0xd7f82753u; + s[12] = (s[12] ^ s[10]) * 0xa500b1e9u; + s[7] ^= (s[12] & s[11]); + s[3] += s[7]; + s[6] += s[3]; + s[13] ^= (s[6] & s[0]); + s[15] *= (s[13] | 1u); + s[8] ^= s[15]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[4] ^= s[15] ^ 0xbf1018b9u; + s[15] *= (s[4] | 1u); + s[13] += s[15] + 0xa0aadb65u; + s[3] = s[3] * 0x1c2c8781u + s[13]; + s[12] += s[3]; + s[4] ^= (s[12] & s[6]); + s[5] += s[4]; + s[0] ^= s[5] ^ 0x15727cfcu; + s[1] ^= s[0]; + s[3] ^= s[1] ^ 0x8ec257dau; + s[12] += s[3]; + s[4] += s[12]; + s[1] ^= (s[4] & s[2]); + s[14] = mh_rotl(s[14], 30u) + s[1]; + s[4] ^= s[14] ^ 0x871677edu; + s[3] -= s[4]; + s[12] ^= s[3] ^ 0xafa32cfbu; + s[0] *= (s[12] | 1u); + s[2] += s[0]; + s[10] -= s[2]; + s[15] ^= s[10] ^ 0xfb3ab53eu; + s[0] += s[15] + 0xd703e4c6u; + s[13] += s[0] + 0xdd7d064eu; + s[4] ^= s[13]; + s[1] ^= s[4]; + s[7] = mh_rotl(s[7] ^ s[1], 18u); + s[5] = mh_rotl(s[5] ^ s[7], 5u); + s[13] -= s[5]; + s[5] += s[13]; + s[2] *= (s[5] | 1u); + s[7] -= s[2]; + s[0] *= (s[7] | 1u); + s[7] ^= s[0]; + s[11] ^= s[7] ^ 0x47fc5334u; + s[10] -= s[11]; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[7] = (s[7] ^ s[14]) * 0xba5f2ba9u; + s[0] += s[7]; + s[9] ^= s[0]; + s[12] = mh_rotl(s[12] ^ s[9], 31u); + s[15] += s[12]; + s[11] += s[15] + 0x67321a5fu; + s[14] *= (s[11] | 1u); + s[2] = mh_rotl(s[2] ^ s[14], 20u); + s[0] *= (s[2] | 1u); + s[10] += (s[0] | s[6]); + s[1] ^= s[10]; + s[10] += s[1]; + s[15] = s[15] * 0x968038e9u + s[10]; + s[4] = mh_rotl(s[4], 6u) + s[15]; + s[7] = mh_rotl(s[7] ^ s[4], 30u); + s[1] = mh_rotl(s[1], 9u) + s[7]; + s[7] += s[1] + 0x36fd51c7u; + s[0] = mh_rotl(s[0] ^ s[7], 4u); + s[9] = mh_rotl(s[9] ^ s[0], 13u); + s[0] = (s[0] ^ s[9]) * 0xe60c1fa9u; + s[3] = s[3] * 0xb184ef99u + s[0]; + s[14] += s[3]; + s[11] = mh_rotl(s[11], 3u) + s[14]; + s[1] += s[11]; + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[6] -= s[15]; + s[7] = (s[7] ^ s[6]) * 0x55b55f6fu; + s[15] *= (s[7] | 1u); + s[4] += (s[15] | s[13]); + s[5] -= s[4]; + s[7] = s[7] * 0xfbc2da35u + s[5]; + s[15] = (s[15] ^ s[7]) * 0x1fd2b55fu; + s[0] = mh_rotl(s[0] ^ s[15], 8u); + s[7] = mh_rotl(s[7], 15u) + s[0]; + s[5] = (s[5] ^ s[7]) * 0x4f355b4bu; + s[4] -= s[5]; + s[1] += (s[4] | s[10]); + s[0] -= s[1]; + s[4] ^= s[0]; + s[15] ^= s[4]; + s[7] = mh_rotl(s[7], 28u) + s[15]; + s[3] ^= s[7] ^ 0xb688911au; + s[1] += s[3] + 0x1c2be1ceu; + s[0] ^= s[1]; + s[7] += s[0] + 0x2850aa80u; + s[9] = mh_rotl(s[9] ^ s[7], 10u); + s[6] += s[9]; + s[13] ^= s[6] ^ 0xa94fde4bu; + s[1] = mh_rotl(s[1] ^ s[13], 6u); + s[13] ^= s[1] ^ 0x62707293u; + s[5] ^= s[13]; + s[15] += s[5]; + s[13] = s[13] * 0x229b940bu + s[15]; + s[4] ^= s[13] ^ 0x1b81e180u; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[14] += (s[7] | s[13]); + s[6] ^= s[14]; + s[1] += (s[6] | s[14]); + s[0] *= (s[1] | 1u); + s[13] ^= (s[0] & s[2]); + s[11] = (s[11] ^ s[13]) * 0x416d09a1u; + s[15] = s[15] * 0xe913f3ddu + s[11]; + s[1] -= s[15]; + s[15] ^= s[1]; + s[6] ^= s[15]; + s[8] -= s[6]; + s[2] = mh_rotl(s[2] ^ s[8], 26u); + s[15] = s[15] * 0xc4f501e3u + s[2]; + s[10] = mh_rotl(s[10], 19u) + s[15]; + s[4] *= (s[10] | 1u); + s[5] = mh_rotl(s[5] ^ s[4], 1u); + s[15] ^= s[5] ^ 0x9b7a52afu; + s[3] *= (s[15] | 1u); + s[1] = (s[1] ^ s[3]) * 0x45c760cdu; + s[8] += s[1]; + s[5] = mh_rotl(s[5], 23u) + s[8]; + s[0] += (s[5] | s[2]); + s[14] ^= s[0] ^ 0xe21ab661u; + s[9] += s[14]; + s[2] *= (s[9] | 1u); + s[5] *= (s[2] | 1u); + s[1] += s[5]; + s[7] = mh_rotl(s[7] ^ s[1], 2u); + s[14] = mh_rotl(s[14] ^ s[7], 30u); + s[15] += s[14] + 0x25ec367cu; + s[1] += s[15]; + s[4] = mh_rotl(s[4], 30u) + s[1]; + s[6] += s[4] + 0x00a140beu; + s[11] ^= s[6]; + s[3] = mh_rotl(s[3] ^ s[11], 24u); + s[8] = (s[8] ^ s[3]) * 0xa4445dd5u; + s[11] ^= s[8]; + s[4] += s[11] + 0xdd82d9edu; + s[7] = mh_rotl(s[7], 20u) + s[4]; + s[10] = (s[10] ^ s[7]) * 0xbc2a9345u; + s[15] = s[15] * 0xe9d04645u + s[10]; + s[4] += s[15]; + s[0] += s[4]; + s[5] = mh_rotl(s[5] ^ s[0], 20u); + s[8] -= s[5]; + s[13] -= s[8]; + s[8] = s[8] * 0xdbaee3dfu + s[13]; + s[7] = s[7] * 0xa78437ddu + s[8]; + s[5] *= (s[7] | 1u); + s[11] = (s[11] ^ s[5]) * 0x7697be93u; + s[8] *= (s[11] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[10] = mh_rotl(s[10] ^ s[9], 4u); + s[4] += s[10] + 0xcb367e30u; + s[7] += (s[4] | s[1]); + s[8] = mh_rotl(s[8] ^ s[7], 1u); + s[9] = (s[9] ^ s[8]) * 0xebbaa385u; + s[8] += s[9]; + s[7] = mh_rotl(s[7] ^ s[8], 30u); + s[13] = mh_rotl(s[13] ^ s[7], 28u); + s[3] ^= s[13] ^ 0x0da68544u; + s[6] *= (s[3] | 1u); + s[15] = mh_rotl(s[15] ^ s[6], 31u); + s[6] = mh_rotl(s[6] ^ s[15], 17u); + s[3] ^= s[6]; + s[9] -= s[3]; + s[11] ^= s[9]; + s[12] = s[12] * 0xc2ae0b9du + s[11]; + s[1] += s[12]; + s[12] += s[1]; + s[2] ^= s[12] ^ 0x7256c79fu; + s[10] = mh_rotl(s[10] ^ s[2], 22u); + s[4] += s[10]; + s[8] = mh_rotl(s[8] ^ s[4], 3u); + s[4] = (s[4] ^ s[8]) * 0x8220660bu; + s[3] -= s[4]; + s[1] ^= s[3]; + s[14] ^= (s[1] & s[4]); + s[5] += s[14]; + s[6] = mh_rotl(s[6], 6u) + s[5]; + s[12] = (s[12] ^ s[6]) * 0xdd90e2b3u; + s[5] = mh_rotl(s[5], 16u) + s[12]; + s[13] += s[5]; + s[2] -= s[13]; + s[5] = mh_rotl(s[5], 28u) + s[2]; + s[0] -= s[5]; + s[14] = (s[14] ^ s[0]) * 0xd9818695u; + s[3] = s[3] * 0x56cff173u + s[14]; + s[12] += s[3]; + s[7] ^= s[12]; + s[4] += s[7] + 0xc664354au; + s[10] ^= s[4]; + s[12] = mh_rotl(s[12] ^ s[10], 21u); + s[5] += (s[12] | s[10]); + s[13] ^= s[5]; + s[3] -= s[13]; + s[10] = (s[10] ^ s[3]) * 0x0f3ce629u; + s[2] += s[10]; + s[6] = mh_rotl(s[6], 27u) + s[2]; + s[3] = mh_rotl(s[3], 23u) + s[6]; + s[8] -= s[3]; + s[2] *= (s[8] | 1u); + s[5] ^= s[2] ^ 0x310625e1u; + s[8] -= s[5]; + s[0] += s[8]; + s[15] *= (s[0] | 1u); + s[6] = (s[6] ^ s[15]) * 0x427d27bbu; + s[11] += s[6] + 0x76730d6fu; + s[15] += s[11] + 0xdac6c08au; + s[7] = mh_rotl(s[7] ^ s[15], 13u); + s[14] += s[7] + 0x6911002du; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[8] = s[8] * 0x56b023efu + s[4]; + s[4] ^= s[8] ^ 0x9fd3970fu; + s[5] += s[4] + 0x6abd4154u; + s[7] += (s[5] | s[6]); + s[6] ^= s[7]; + s[10] += s[6]; + s[9] = (s[9] ^ s[10]) * 0xe4b1ea8bu; + s[6] ^= s[9]; + s[7] ^= s[6] ^ 0xe75c3c42u; + s[10] = (s[10] ^ s[7]) * 0xb59266bbu; + s[2] *= (s[10] | 1u); + s[8] ^= s[2]; + s[14] = (s[14] ^ s[8]) * 0xdbf4259fu; + s[2] = s[2] * 0x7009386du + s[14]; + s[12] -= s[2]; + s[13] = mh_rotl(s[13] ^ s[12], 25u); + s[2] ^= s[13] ^ 0x60dba7dau; + s[5] = mh_rotl(s[5] ^ s[2], 28u); + s[4] ^= s[5]; + s[11] += s[4] + 0xeb951dd9u; + s[4] ^= s[11]; + s[13] ^= s[4] ^ 0xebf6468au; + s[9] = (s[9] ^ s[13]) * 0xdd79814du; + s[3] = (s[3] ^ s[9]) * 0x8e5d0c8du; + s[4] = mh_rotl(s[4] ^ s[3], 11u); + s[6] ^= s[4]; + s[12] = (s[12] ^ s[6]) * 0x54bdc49fu; + s[2] ^= s[12]; + s[6] = mh_rotl(s[6], 21u) + s[2]; + s[3] = mh_rotl(s[3], 4u) + s[6]; + s[7] = mh_rotl(s[7], 1u) + s[3]; + s[8] += s[7]; + s[7] ^= s[8] ^ 0xea9b7589u; + s[14] = (s[14] ^ s[7]) * 0x97ae5521u; + s[4] += s[14]; + s[12] = (s[12] ^ s[4]) * 0x22320c0du; + s[11] ^= s[12] ^ 0x497dff74u; + s[7] ^= s[11]; + s[3] *= (s[7] | 1u); + s[13] = mh_rotl(s[13] ^ s[3], 19u); + s[5] ^= s[13]; + s[15] += (s[5] | s[1]); + s[5] ^= s[15]; + s[2] = s[2] * 0xbadcbfe5u + s[5]; + s[6] *= (s[2] | 1u); + s[9] = mh_rotl(s[9] ^ s[6], 9u); + s[6] += s[9] + 0xf8e24c5bu; + s[4] -= s[6]; + s[1] ^= s[4]; + s[13] -= s[1]; + s[6] ^= s[13]; + s[14] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[14], 15u); + s[0] = (s[0] ^ s[4]) * 0x5cf11fa1u; + s[3] = mh_rotl(s[3] ^ s[0], 9u); + s[15] *= (s[3] | 1u); + s[7] *= (s[15] | 1u); + s[8] += s[7] + 0x2e6f71e5u; + s[5] = mh_rotl(s[5], 26u) + s[8]; + s[7] ^= s[5]; + s[0] = (s[0] ^ s[7]) * 0x5ea96101u; + s[1] ^= s[0] ^ 0xd397e563u; + s[6] *= (s[1] | 1u); + s[10] *= (s[6] | 1u); + s[7] = mh_rotl(s[7] ^ s[10], 24u); + s[0] -= s[7]; + s[6] = mh_rotl(s[6] ^ s[0], 30u); + s[12] = s[12] * 0x34af385du + s[6]; + s[14] *= (s[12] | 1u); + s[4] += s[14]; + s[12] ^= s[4]; + s[7] -= s[12]; + s[6] -= s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 19u); + s[0] = mh_rotl(s[0] ^ s[7], 11u); + s[5] -= s[0]; + s[11] ^= s[5]; + s[0] ^= s[11] ^ 0xbe1c3b74u; + s[5] += (s[0] | s[9]); + s[11] += (s[5] | s[4]); + s[15] += s[11]; + s[10] ^= s[15]; + s[12] = s[12] * 0x543326f5u + s[10]; + s[14] = s[14] * 0x91113863u + s[12]; + s[1] = (s[1] ^ s[14]) * 0xc15f4501u; + s[10] += s[1]; + s[9] += s[10]; + s[8] += s[9] + 0x7e4a0930u; + s[15] += s[8]; + s[5] += s[15]; + s[1] -= s[5]; + s[15] += s[1]; + s[6] = mh_rotl(s[6] ^ s[15], 22u); + s[2] ^= (s[6] & s[10]); + s[1] = (s[1] ^ s[2]) * 0xfa5dde9bu; + s[13] = mh_rotl(s[13] ^ s[1], 8u); + s[1] -= s[13]; + s[9] += s[1] + 0x3f1d7c19u; + s[2] *= (s[9] | 1u); + s[8] = (s[8] ^ s[2]) * 0xde05403bu; + s[9] += s[8]; + s[6] += s[9]; + s[13] = (s[13] ^ s[6]) * 0xcb53bdfdu; + s[14] *= (s[13] | 1u); + s[10] *= (s[14] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 1u); + s[9] = s[9] * 0xc38dfca1u + s[13]; + s[15] = mh_rotl(s[15] ^ s[9], 24u); + s[2] *= (s[15] | 1u); + s[15] ^= s[2] ^ 0x4f0903bau; + s[2] = mh_rotl(s[2] ^ s[15], 3u); + s[10] = (s[10] ^ s[2]) * 0xa4b3a383u; + s[6] *= (s[10] | 1u); + s[13] *= (s[6] | 1u); + s[1] *= (s[13] | 1u); + s[11] = (s[11] ^ s[1]) * 0xbbb47281u; + s[6] += s[11]; + s[12] += s[6]; + s[0] ^= s[12]; + s[12] -= s[0]; + s[4] += s[12]; + s[11] ^= s[4] ^ 0x4ae1d374u; + s[1] ^= s[11]; + s[6] ^= (s[1] & s[5]); + s[12] += (s[6] | s[3]); + s[6] = (s[6] ^ s[12]) * 0xd088ac95u; + s[12] = (s[12] ^ s[6]) * 0xacf99fa9u; + s[14] = mh_rotl(s[14], 10u) + s[12]; + s[11] = mh_rotl(s[11], 21u) + s[14]; + s[2] ^= s[11] ^ 0x83eccd1eu; + s[15] ^= s[2]; + s[8] = s[8] * 0x51ffe091u + s[15]; + s[2] += (s[8] | s[3]); + s[13] = mh_rotl(s[13] ^ s[2], 25u); + s[5] = mh_rotl(s[5] ^ s[13], 18u); + s[9] -= s[5]; + s[6] = (s[6] ^ s[9]) * 0xeb0ab863u; + s[10] ^= s[6] ^ 0xadb4a85eu; + s[11] += s[10]; + s[15] = mh_rotl(s[15], 25u) + s[11]; + s[8] ^= s[15] ^ 0x611f8ebbu; + s[4] += s[8] + 0x6c1de9f1u; + s[14] *= (s[4] | 1u); + s[3] *= (s[14] | 1u); + s[14] += (s[3] | s[8]); + s[10] ^= s[14]; + s[12] ^= s[10] ^ 0x1379b7f0u; + s[13] += s[12]; + s[6] -= s[13]; + s[5] += s[6]; + s[14] ^= s[5] ^ 0x86fda0bcu; + s[4] = mh_rotl(s[4] ^ s[14], 31u); + s[14] += s[4] + 0xe3857cfau; + s[5] ^= s[14] ^ 0x983d6f15u; + s[2] *= (s[5] | 1u); + s[11] = (s[11] ^ s[2]) * 0x71d715abu; + s[15] += s[11] + 0x954d0d31u; + s[3] ^= (s[15] & s[13]); + s[0] = mh_rotl(s[0], 31u) + s[3]; + s[3] *= (s[0] | 1u); + s[12] = s[12] * 0x553df879u + s[3]; + s[14] = mh_rotl(s[14] ^ s[12], 27u); + s[7] = mh_rotl(s[7] ^ s[14], 17u); + s[0] += (s[7] | s[5]); + s[3] ^= s[0]; + s[5] ^= (s[3] & s[11]); + s[2] ^= s[5] ^ 0xdf79b0e2u; + s[6] = mh_rotl(s[6], 7u) + s[2]; + s[12] -= s[6]; + s[10] += s[12]; + s[11] ^= s[10] ^ 0xda8b8a64u; + s[0] ^= s[11]; + s[1] = (s[1] ^ s[0]) * 0xf8a8b0d1u; + s[4] = mh_rotl(s[4] ^ s[1], 3u); + s[0] ^= s[4]; + s[3] *= (s[0] | 1u); + s[7] = (s[7] ^ s[3]) * 0x411cdf35u; + s[6] += s[7]; + s[10] -= s[6]; + s[5] = mh_rotl(s[5], 16u) + s[10]; + s[4] += s[5]; + s[1] += s[4]; + s[0] ^= (s[1] & s[6]); + s[13] ^= s[0]; + s[9] = mh_rotl(s[9], 27u) + s[13]; + s[6] = mh_rotl(s[6], 3u) + s[9]; + s[1] += s[6] + 0xcea64d05u; + s[3] = s[3] * 0xeebb97adu + s[1]; + s[14] ^= s[3] ^ 0x892c8d98u; + s[11] ^= (s[14] & s[9]); + s[0] = (s[0] ^ s[11]) * 0xdff5cedfu; + s[14] -= s[0]; + s[6] -= s[14]; + s[3] = mh_rotl(s[3], 21u) + s[6]; + s[11] += (s[3] | s[9]); + s[7] = mh_rotl(s[7] ^ s[11], 22u); + s[10] = mh_rotl(s[10], 2u) + s[7]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[1] -= s[4]; + s[0] += s[1] + 0x775d0372u; + s[13] *= (s[0] | 1u); + s[3] += s[13]; + s[4] += (s[3] | s[9]); + s[12] = (s[12] ^ s[4]) * 0x687c0365u; + s[13] = mh_rotl(s[13], 2u) + s[12]; + s[4] = (s[4] ^ s[13]) * 0x35a16ec5u; + s[9] ^= s[4]; + s[12] += s[9]; + s[14] -= s[12]; + s[5] *= (s[14] | 1u); + s[14] *= (s[5] | 1u); + s[13] += (s[14] | s[4]); + s[0] -= s[13]; + s[15] = s[15] * 0x621c0ea7u + s[0]; + s[6] = mh_rotl(s[6], 26u) + s[15]; + s[15] = (s[15] ^ s[6]) * 0x05d14bc7u; + s[11] -= s[15]; + s[9] += (s[11] | s[13]); + s[4] += s[9]; + s[12] *= (s[4] | 1u); + s[11] ^= s[12]; + s[7] = mh_rotl(s[7], 28u) + s[11]; + s[5] = mh_rotl(s[5] ^ s[7], 12u); + s[8] = mh_rotl(s[8] ^ s[5], 17u); + s[10] ^= s[8]; + s[13] ^= s[10]; + s[7] *= (s[13] | 1u); + s[8] += s[7]; + s[15] ^= s[8]; + s[4] = mh_rotl(s[4] ^ s[15], 26u); + s[0] = (s[0] ^ s[4]) * 0xd8e75b75u; + s[8] -= s[0]; + s[11] += s[8]; + s[13] -= s[11]; + s[9] ^= s[13]; + s[12] = (s[12] ^ s[9]) * 0x3899fbc3u; + s[0] = mh_rotl(s[0], 17u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[0], 26u); + s[1] = mh_rotl(s[1] ^ s[4], 23u); + s[14] = mh_rotl(s[14] ^ s[1], 25u); + s[12] = mh_rotl(s[12] ^ s[14], 27u); + s[11] -= s[12]; + s[7] ^= s[11]; + s[11] -= s[7]; + s[15] *= (s[11] | 1u); + s[7] += (s[15] | s[11]); + s[3] ^= s[7] ^ 0xfd1ba1b5u; + s[13] += s[3]; + s[14] += s[13] + 0x405242e4u; + s[10] = (s[10] ^ s[14]) * 0xeced21d1u; + s[0] -= s[10]; + s[1] = (s[1] ^ s[0]) * 0xcb862135u; + s[5] += s[1]; + s[2] -= s[5]; + s[15] = s[15] * 0x499907b3u + s[2]; + s[11] += (s[15] | s[8]); + s[14] ^= s[11]; + s[7] ^= s[14]; + s[12] = mh_rotl(s[12] ^ s[7], 27u); + s[10] += s[12] + 0x8f39e74bu; + s[5] = (s[5] ^ s[10]) * 0x2440407du; + s[1] += s[5]; + s[12] += s[1]; + s[4] *= (s[12] | 1u); + s[1] += s[4] + 0xcdf92480u; + s[15] ^= s[1]; + s[4] += s[15]; + s[15] *= (s[4] | 1u); + s[1] += s[15]; + s[4] = mh_rotl(s[4], 6u) + s[1]; + s[0] *= (s[4] | 1u); + s[1] ^= s[0]; + s[7] = s[7] * 0xcac7e2ddu + s[1]; + s[11] += s[7]; + s[12] ^= s[11]; + s[15] = s[15] * 0x413393afu + s[12]; + s[8] = (s[8] ^ s[15]) * 0x25fe3939u; + s[14] *= (s[8] | 1u); + s[13] = s[13] * 0x98224c21u + s[14]; + s[8] -= s[13]; + s[2] ^= s[8] ^ 0xdc7b1f4au; + s[1] += s[2]; + s[10] = mh_rotl(s[10] ^ s[1], 6u); + s[8] -= s[10]; + s[11] *= (s[8] | 1u); + s[13] *= (s[11] | 1u); + s[14] += (s[13] | s[5]); + s[12] += (s[14] | s[10]); + s[10] += s[12] + 0xb0848c0bu; + s[2] += s[10]; + s[4] = mh_rotl(s[4] ^ s[2], 20u); + s[13] ^= s[4]; + s[7] *= (s[13] | 1u); + s[13] = mh_rotl(s[13] ^ s[7], 21u); + s[14] = mh_rotl(s[14] ^ s[13], 26u); + s[12] ^= s[14]; + s[8] += s[12]; + s[0] += s[8]; + s[12] = s[12] * 0xd28af0afu + s[0]; + s[8] += s[12] + 0xd77f1cfcu; + s[9] *= (s[8] | 1u); + s[14] *= (s[9] | 1u); + s[3] -= s[14]; + s[2] += s[3]; + s[12] ^= s[2]; + s[8] -= s[12]; + s[5] += s[8]; + s[15] = mh_rotl(s[15], 24u) + s[5]; + s[2] ^= s[15]; + s[5] -= s[2]; + s[8] ^= s[5]; + s[1] += s[8]; + s[0] ^= s[1]; + s[12] += s[0]; + s[7] ^= (s[12] & s[3]); + s[13] += (s[7] | s[0]); + s[3] += s[13]; + s[12] *= (s[3] | 1u); + s[2] = (s[2] ^ s[12]) * 0xfd12ecd1u; + s[15] *= (s[2] | 1u); + s[0] ^= s[15]; + s[2] = mh_rotl(s[2], 27u) + s[0]; + s[6] += s[2]; + s[10] += s[6]; + s[0] ^= s[10]; + s[7] = mh_rotl(s[7], 29u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[7], 19u); + s[3] = (s[3] ^ s[9]) * 0xff04d05fu; + s[13] += (s[3] | s[4]); + s[15] ^= s[13]; + s[7] += s[15]; + s[14] ^= s[7]; + s[4] = mh_rotl(s[4], 17u) + s[14]; + s[3] += (s[4] | s[6]); + s[12] ^= s[3]; + s[6] = mh_rotl(s[6] ^ s[12], 30u); + s[1] = mh_rotl(s[1], 10u) + s[6]; + s[8] += s[1] + 0x0467b529u; + s[9] += s[8]; + s[7] *= (s[9] | 1u); + s[15] -= s[7]; + s[7] ^= (s[15] & s[8]); + s[8] = (s[8] ^ s[7]) * 0x278c5dfdu; + s[3] ^= s[8] ^ 0xbc598dedu; + s[1] = mh_rotl(s[1] ^ s[3], 9u); + s[4] += s[1]; + s[3] += (s[4] | s[13]); + s[10] = (s[10] ^ s[3]) * 0xcae4be05u; + s[11] *= (s[10] | 1u); + s[12] += s[11]; + s[4] ^= s[12]; + s[7] = mh_rotl(s[7], 29u) + s[4]; + s[6] = mh_rotl(s[6] ^ s[7], 9u); + s[8] = (s[8] ^ s[6]) * 0xd9f36acdu; + s[7] = mh_rotl(s[7] ^ s[8], 18u); + s[11] ^= (s[7] & s[14]); + s[14] = mh_rotl(s[14], 3u) + s[11]; + s[8] = s[8] * 0x0ae9038fu + s[14]; + s[3] *= (s[8] | 1u); + s[13] -= s[3]; + s[5] = s[5] * 0x70529de3u + s[13]; + s[3] ^= (s[5] & s[6]); + s[14] -= s[3]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[0] = mh_rotl(s[0], 9u) + s[9]; + s[13] += (s[0] | s[5]); + s[2] *= (s[13] | 1u); + s[4] -= s[2]; + s[1] = mh_rotl(s[1], 7u) + s[4]; + s[10] += s[1]; + s[15] ^= s[10]; + s[11] = mh_rotl(s[11] ^ s[15], 24u); + s[15] ^= s[11]; + s[10] *= (s[15] | 1u); + s[3] ^= s[10] ^ 0xcb85082cu; + s[10] ^= s[3] ^ 0xf9bf9766u; + s[11] -= s[10]; + s[3] = (s[3] ^ s[11]) * 0x87f2ce8bu; + s[8] = s[8] * 0x0ea0fcc7u + s[3]; + s[1] = mh_rotl(s[1], 9u) + s[8]; + s[10] -= s[1]; + s[6] *= (s[10] | 1u); + s[11] = s[11] * 0x0c531b4bu + s[6]; + s[8] += s[11]; + s[15] -= s[8]; + s[3] *= (s[15] | 1u); + s[11] = (s[11] ^ s[3]) * 0xad08649fu; + s[9] ^= s[11]; + s[14] -= s[9]; + s[12] += s[14]; + s[9] += s[12] + 0x232cf99eu; + s[7] ^= s[9]; + s[15] ^= (s[7] & s[8]); + s[2] += s[15] + 0x32beef7bu; + s[11] = mh_rotl(s[11], 8u) + s[2]; + s[14] -= s[11]; + s[10] += (s[14] | s[12]); + s[12] = s[12] * 0xa6ec34d5u + s[10]; + s[5] = mh_rotl(s[5] ^ s[12], 7u); + s[8] = mh_rotl(s[8], 25u) + s[5]; + s[10] ^= s[8] ^ 0xefb5c226u; + s[3] = mh_rotl(s[3] ^ s[10], 16u); + s[6] ^= s[3]; + s[4] ^= s[6]; + s[6] ^= s[4]; + s[14] = mh_rotl(s[14], 28u) + s[6]; + s[5] = mh_rotl(s[5], 5u) + s[14]; + s[3] = mh_rotl(s[3] ^ s[5], 4u); + s[5] += s[3] + 0xe3dab3fbu; + s[15] = mh_rotl(s[15], 3u) + s[5]; + s[14] += (s[15] | s[9]); + s[0] += (s[14] | s[2]); + s[1] += (s[0] | s[15]); + s[6] *= (s[1] | 1u); + s[13] += (s[6] | s[14]); +} +// Round program 6: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_6(thread uint* s) { + s[5] = mh_rotl(s[5], 3u) + s[0]; + s[2] ^= s[5]; + s[9] = mh_rotl(s[9] ^ s[2], 11u); + s[11] ^= s[9] ^ 0x39e32e1du; + s[3] += s[11]; + s[1] = mh_rotl(s[1] ^ s[3], 22u); + s[5] ^= s[1]; + s[8] = mh_rotl(s[8], 4u) + s[5]; + s[3] = mh_rotl(s[3] ^ s[8], 12u); + s[4] += s[3]; + s[2] = mh_rotl(s[2], 1u) + s[4]; + s[3] += s[2]; + s[8] -= s[3]; + s[5] -= s[8]; + s[1] *= (s[5] | 1u); + s[9] ^= s[1] ^ 0xd81d55beu; + s[7] += s[9]; + s[3] += s[7]; + s[4] = mh_rotl(s[4] ^ s[3], 15u); + s[5] -= s[4]; + s[0] *= (s[5] | 1u); + s[3] = (s[3] ^ s[0]) * 0x4a19e371u; + s[7] = mh_rotl(s[7] ^ s[3], 10u); + s[11] += s[7]; + s[8] = s[8] * 0x259e0d2fu + s[11]; + s[3] += s[8] + 0xac463d29u; + s[9] *= (s[3] | 1u); + s[10] = mh_rotl(s[10] ^ s[9], 8u); + s[6] *= (s[10] | 1u); + s[1] ^= s[6] ^ 0xb275cab7u; + s[12] = mh_rotl(s[12] ^ s[1], 8u); + s[10] *= (s[12] | 1u); + s[7] -= s[10]; + s[4] = mh_rotl(s[4] ^ s[7], 18u); + s[3] += s[4] + 0xc15298f3u; + s[14] += s[3]; + s[0] += s[14] + 0xb147fc8bu; + s[8] = (s[8] ^ s[0]) * 0x2016760du; + s[6] = (s[6] ^ s[8]) * 0x54e0697fu; + s[1] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[1], 11u); + s[2] += (s[3] | s[13]); + s[8] ^= s[2]; + s[5] += s[8]; + s[8] ^= (s[5] & s[4]); + s[13] *= (s[8] | 1u); + s[11] -= s[13]; + s[5] ^= s[11]; + s[13] = mh_rotl(s[13], 28u) + s[5]; + s[14] *= (s[13] | 1u); + s[11] ^= s[14] ^ 0x301ae49du; + s[13] -= s[11]; + s[5] += s[13]; + s[9] ^= s[5]; + s[2] += s[9]; + s[5] ^= s[2]; + s[6] *= (s[5] | 1u); + s[2] += s[6]; + s[10] -= s[2]; + s[6] = s[6] * 0x7f506861u + s[10]; + s[12] ^= s[6] ^ 0xda5f5b6du; + s[6] = s[6] * 0x38d5001du + s[12]; + s[1] ^= s[6] ^ 0xc8f1c1dcu; + s[9] += s[1]; + s[3] = (s[3] ^ s[9]) * 0x8e4a88a5u; + s[7] = mh_rotl(s[7], 18u) + s[3]; + s[9] ^= s[7] ^ 0xbab40f93u; + s[13] += s[9]; + s[6] += s[13]; + s[11] ^= s[6]; + s[3] ^= s[11]; + s[10] *= (s[3] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 4u); + s[14] += s[6] + 0x0249afdau; + s[1] = s[1] * 0x86ebf639u + s[14]; + s[6] = mh_rotl(s[6], 25u) + s[1]; + s[10] *= (s[6] | 1u); + s[6] ^= s[10]; + s[3] -= s[6]; + s[1] ^= s[3] ^ 0xd9ca3a4fu; + s[5] = mh_rotl(s[5] ^ s[1], 23u); + s[9] ^= s[5]; + s[5] = s[5] * 0x1457845du + s[9]; + s[11] = mh_rotl(s[11], 10u) + s[5]; + s[2] ^= (s[11] & s[3]); + s[15] *= (s[2] | 1u); + s[4] ^= s[15]; + s[7] += s[4]; + s[15] = mh_rotl(s[15] ^ s[7], 1u); + s[0] = (s[0] ^ s[15]) * 0xb010e4d3u; + s[4] = mh_rotl(s[4] ^ s[0], 20u); + s[7] ^= (s[4] & s[3]); + s[2] ^= s[7]; + s[3] ^= s[2]; + s[11] ^= s[3]; + s[1] ^= s[11] ^ 0x35463538u; + s[7] ^= (s[1] & s[11]); + s[13] += s[7]; + s[1] = (s[1] ^ s[13]) * 0xc1e69efbu; + s[5] = mh_rotl(s[5], 16u) + s[1]; + s[1] = s[1] * 0x2e9b0e05u + s[5]; + s[15] -= s[1]; + s[12] += s[15]; + s[7] = mh_rotl(s[7], 13u) + s[12]; + s[9] ^= s[7] ^ 0x990eced1u; + s[13] += s[9]; + s[8] += s[13]; + s[6] += s[8]; + s[14] ^= s[6] ^ 0xc88f98bdu; + s[1] += s[14]; + s[13] *= (s[1] | 1u); + s[5] ^= s[13]; + s[7] += (s[5] | s[12]); + s[1] = mh_rotl(s[1], 21u) + s[7]; + s[12] = mh_rotl(s[12], 1u) + s[1]; + s[7] *= (s[12] | 1u); + s[9] ^= s[7]; + s[6] = mh_rotl(s[6], 13u) + s[9]; + s[4] ^= s[6] ^ 0x74363532u; + s[2] -= s[4]; + s[9] = mh_rotl(s[9] ^ s[2], 25u); + s[0] *= (s[9] | 1u); + s[12] ^= s[0] ^ 0x0441459fu; + s[13] ^= s[12] ^ 0x662ed979u; + s[3] -= s[13]; + s[4] ^= s[3] ^ 0x1b2d8a07u; + s[8] = s[8] * 0xf7eec905u + s[4]; + s[14] = mh_rotl(s[14] ^ s[8], 27u); + s[0] ^= s[14]; + s[1] = mh_rotl(s[1], 30u) + s[0]; + s[15] += s[1] + 0xe1b48510u; + s[9] *= (s[15] | 1u); + s[4] = s[4] * 0x1d3d76ddu + s[9]; + s[11] *= (s[4] | 1u); + s[4] -= s[11]; + s[10] += s[4]; + s[15] *= (s[10] | 1u); + s[14] = mh_rotl(s[14] ^ s[15], 29u); + s[15] -= s[14]; + s[7] += s[15]; + s[0] = mh_rotl(s[0], 15u) + s[7]; + s[1] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[1], 13u); + s[10] += s[11]; + s[3] = mh_rotl(s[3] ^ s[10], 27u); + s[8] = mh_rotl(s[8], 31u) + s[3]; + s[7] += s[8]; + s[8] -= s[7]; + s[10] *= (s[8] | 1u); + s[12] -= s[10]; + s[0] = s[0] * 0x5817b1bbu + s[12]; + s[4] -= s[0]; + s[12] += s[4]; + s[15] -= s[12]; + s[0] = mh_rotl(s[0], 27u) + s[15]; + s[4] *= (s[0] | 1u); + s[5] *= (s[4] | 1u); + s[13] *= (s[5] | 1u); + s[7] *= (s[13] | 1u); + s[3] *= (s[7] | 1u); + s[6] += s[3]; + s[7] ^= s[6] ^ 0x229579c7u; + s[11] += s[7] + 0x00a25704u; + s[9] -= s[11]; + s[12] = mh_rotl(s[12], 24u) + s[9]; + s[9] ^= s[12]; + s[10] ^= (s[9] & s[1]); + s[0] = (s[0] ^ s[10]) * 0x2005a37fu; + s[14] ^= s[0] ^ 0x1c7da2c4u; + s[10] *= (s[14] | 1u); + s[12] += s[10]; + s[1] = mh_rotl(s[1] ^ s[12], 24u); + s[4] ^= (s[1] & s[14]); + s[15] = mh_rotl(s[15] ^ s[4], 25u); + s[10] = s[10] * 0xeaf112ebu + s[15]; + s[8] ^= (s[10] & s[15]); + s[3] *= (s[8] | 1u); + s[5] += (s[3] | s[8]); + s[6] += s[5] + 0xe4e3f161u; + s[9] += s[6]; + s[11] = mh_rotl(s[11] ^ s[9], 16u); + s[2] = mh_rotl(s[2] ^ s[11], 4u); + s[11] ^= s[2]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[0] ^= s[3]; + s[11] ^= s[0]; + s[6] = (s[6] ^ s[11]) * 0x12a469a3u; + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[1]); + s[15] = mh_rotl(s[15], 17u) + s[0]; + s[3] ^= s[15]; + s[11] -= s[3]; + s[9] = (s[9] ^ s[11]) * 0x344ce419u; + s[4] ^= s[9]; + s[10] ^= (s[4] & s[5]); + s[1] += s[10] + 0xea384c3cu; + s[10] += s[1]; + s[2] ^= s[10] ^ 0x1d75445cu; + s[8] += s[2]; + s[13] += s[8] + 0xbfc1d457u; + s[3] = mh_rotl(s[3], 22u) + s[13]; + s[14] -= s[3]; + s[0] ^= s[14] ^ 0x06e7726cu; + s[5] ^= s[0] ^ 0x51f1354du; + s[8] += (s[5] | s[11]); + s[11] += s[8]; + s[14] ^= s[11]; + s[13] = mh_rotl(s[13] ^ s[14], 13u); + s[11] -= s[13]; + s[0] += s[11]; + s[3] = mh_rotl(s[3] ^ s[0], 5u); + s[4] = (s[4] ^ s[3]) * 0x5eb788f9u; + s[0] += s[4]; + s[4] = mh_rotl(s[4], 31u) + s[0]; + s[8] ^= s[4]; + s[11] ^= s[8] ^ 0xdd96e051u; + s[3] -= s[11]; + s[10] = mh_rotl(s[10], 11u) + s[3]; + s[4] = mh_rotl(s[4] ^ s[10], 14u); + s[6] ^= s[4]; + s[15] += s[6] + 0x4f556eefu; + s[2] ^= s[15] ^ 0x296a5968u; + s[1] ^= s[2] ^ 0xc46f139au; + s[15] = (s[15] ^ s[1]) * 0x50702ea7u; + s[8] += s[15]; + s[1] = (s[1] ^ s[8]) * 0x6bafa739u; + s[0] += s[1]; + s[2] += (s[0] | s[1]); + s[1] = s[1] * 0x1f7250afu + s[2]; + s[6] ^= s[1] ^ 0x898b2247u; + s[1] += s[6] + 0xa7ddf08eu; + s[2] ^= s[1]; + s[6] = mh_rotl(s[6] ^ s[2], 11u); + s[1] = (s[1] ^ s[6]) * 0xf13b1879u; + s[9] += s[1]; + s[11] += s[9]; + s[3] += (s[11] | s[13]); + s[12] -= s[3]; + s[6] ^= s[12] ^ 0x5c3b531eu; + s[5] *= (s[6] | 1u); + s[14] ^= s[5]; + s[8] = (s[8] ^ s[14]) * 0x93599b23u; + s[13] ^= s[8]; + s[0] ^= s[13]; + s[7] = mh_rotl(s[7], 28u) + s[0]; + s[11] = (s[11] ^ s[7]) * 0x97c86fe1u; + s[4] ^= s[11]; + s[12] += (s[4] | s[8]); + s[14] ^= s[12] ^ 0x47aef842u; + s[4] += s[14]; + s[14] ^= s[4] ^ 0xef1987b2u; + s[10] -= s[14]; + s[11] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[11], 17u); + s[14] += s[12]; + s[6] = mh_rotl(s[6], 15u) + s[14]; + s[10] += (s[6] | s[1]); + s[4] += s[10]; + s[10] ^= (s[4] & s[12]); + s[2] += s[10]; + s[14] -= s[2]; + s[10] ^= (s[14] & s[13]); + s[11] ^= s[10]; + s[15] ^= s[11]; + s[5] = mh_rotl(s[5] ^ s[15], 27u); + s[6] -= s[5]; + s[15] += s[6]; + s[8] ^= (s[15] & s[9]); + s[9] = (s[9] ^ s[8]) * 0x483ef9cfu; + s[13] ^= s[9]; + s[14] += s[13]; + s[5] += s[14] + 0x1978b9bau; + s[12] ^= s[5] ^ 0xc6a87e37u; + s[11] ^= s[12]; + s[0] += s[11] + 0x25e405bfu; + s[9] += s[0]; + s[12] += s[9]; + s[14] ^= (s[12] & s[6]); + s[0] -= s[14]; + s[7] = mh_rotl(s[7] ^ s[0], 16u); + s[11] ^= s[7]; + s[6] *= (s[11] | 1u); + s[10] = (s[10] ^ s[6]) * 0x365e6b61u; + s[7] ^= (s[10] & s[6]); + s[4] += s[7] + 0x88f34310u; + s[0] += s[4]; + s[13] *= (s[0] | 1u); + s[8] ^= s[13]; + s[2] += s[8]; + s[10] += s[2]; + s[3] += s[10]; + s[0] += s[3]; + s[9] = (s[9] ^ s[0]) * 0xc6ec1ff1u; + s[10] += s[9]; + s[13] ^= (s[10] & s[6]); + s[2] = (s[2] ^ s[13]) * 0xb02a7defu; + s[1] ^= (s[2] & s[6]); + s[8] += s[1]; + s[6] *= (s[8] | 1u); + s[0] = s[0] * 0xdbb96cf3u + s[6]; + s[6] ^= s[0]; + s[11] = mh_rotl(s[11] ^ s[6], 15u); + s[4] ^= s[11]; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[6] = (s[6] ^ s[2]) * 0x72c49157u; + s[14] -= s[6]; + s[5] = mh_rotl(s[5] ^ s[14], 8u); + s[8] ^= s[5] ^ 0x1de584feu; + s[11] = mh_rotl(s[11] ^ s[8], 19u); + s[10] *= (s[11] | 1u); + s[12] += s[10]; + s[14] = (s[14] ^ s[12]) * 0x9befbf23u; + s[2] ^= s[14] ^ 0x958a58deu; + s[4] ^= s[2] ^ 0x255a3390u; + s[5] -= s[4]; + s[9] += s[5]; + s[11] += s[9]; + s[13] += (s[11] | s[15]); + s[4] += s[13] + 0x7f925d13u; + s[12] = mh_rotl(s[12], 20u) + s[4]; + s[13] *= (s[12] | 1u); + s[14] = mh_rotl(s[14] ^ s[13], 30u); + s[13] -= s[14]; + s[11] *= (s[13] | 1u); + s[10] += s[11]; + s[15] -= s[10]; + s[6] ^= s[15]; + s[13] += (s[6] | s[4]); + s[14] ^= s[13] ^ 0x935ed5ffu; + s[2] = mh_rotl(s[2] ^ s[14], 11u); + s[4] = mh_rotl(s[4], 23u) + s[2]; + s[10] += s[4] + 0x602f3d0cu; + s[4] += s[10]; + s[6] ^= (s[4] & s[2]); + s[12] *= (s[6] | 1u); + s[11] ^= s[12]; + s[5] = mh_rotl(s[5] ^ s[11], 2u); + s[9] = (s[9] ^ s[5]) * 0xf3832b37u; + s[15] += (s[9] | s[8]); + s[10] += s[15] + 0xb02d9997u; + s[13] = mh_rotl(s[13] ^ s[10], 15u); + s[9] += s[13] + 0xcf0e861au; + s[13] = mh_rotl(s[13] ^ s[9], 7u); + s[1] *= (s[13] | 1u); + s[0] *= (s[1] | 1u); + s[11] += s[0] + 0x60d0848au; + s[15] = mh_rotl(s[15], 1u) + s[11]; + s[1] ^= s[15] ^ 0x7a0f3dafu; + s[9] *= (s[1] | 1u); + s[12] = mh_rotl(s[12], 10u) + s[9]; + s[9] *= (s[12] | 1u); + s[5] -= s[9]; + s[0] ^= s[5]; + s[4] += s[0]; + s[3] = mh_rotl(s[3] ^ s[4], 14u); + s[8] = (s[8] ^ s[3]) * 0x24a33cefu; + s[7] = mh_rotl(s[7], 26u) + s[8]; + s[0] = mh_rotl(s[0] ^ s[7], 5u); + s[13] ^= s[0]; + s[0] ^= s[13]; + s[9] += s[0]; + s[1] += s[9] + 0xceba1d99u; + s[6] += (s[1] | s[0]); + s[7] *= (s[6] | 1u); + s[0] ^= (s[7] & s[2]); + s[2] -= s[0]; + s[9] ^= s[2]; + s[0] -= s[9]; + s[10] += s[0] + 0x912934d8u; + s[14] += s[10]; + s[5] ^= s[14]; + s[8] += s[5] + 0x9b41cf1du; + s[10] ^= s[8] ^ 0x783c5b76u; + s[2] -= s[10]; + s[1] = (s[1] ^ s[2]) * 0x0f56c5b9u; + s[14] ^= s[1] ^ 0x25f12e76u; + s[13] = mh_rotl(s[13], 6u) + s[14]; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[6] = mh_rotl(s[6], 22u) + s[2]; + s[4] += (s[6] | s[9]); + s[14] ^= s[4]; + s[2] -= s[14]; + s[3] ^= s[2]; + s[9] ^= s[3]; + s[6] *= (s[9] | 1u); + s[2] ^= s[6]; + s[12] += s[2]; + s[3] ^= s[12]; + s[10] = mh_rotl(s[10], 25u) + s[3]; + s[1] = mh_rotl(s[1] ^ s[10], 19u); + s[14] ^= s[1]; + s[12] = mh_rotl(s[12] ^ s[14], 25u); + s[4] = mh_rotl(s[4], 12u) + s[12]; + s[5] *= (s[4] | 1u); + s[0] ^= s[5]; + s[11] ^= (s[0] & s[8]); + s[14] ^= s[11]; + s[4] = s[4] * 0x7b3dacd1u + s[14]; + s[15] = (s[15] ^ s[4]) * 0x391f4413u; + s[0] -= s[15]; + s[11] = s[11] * 0xe57f1625u + s[0]; + s[2] -= s[11]; + s[3] -= s[2]; + s[11] = mh_rotl(s[11], 26u) + s[3]; + s[7] -= s[11]; + s[9] -= s[7]; + s[5] = mh_rotl(s[5] ^ s[9], 25u); + s[13] ^= s[5] ^ 0x99379160u; + s[7] ^= s[13]; + s[11] = mh_rotl(s[11] ^ s[7], 6u); + s[14] ^= s[11]; + s[10] += s[14]; + s[14] ^= s[10]; + s[8] = mh_rotl(s[8] ^ s[14], 13u); + s[0] += s[8]; + s[13] += (s[0] | s[11]); + s[1] = s[1] * 0xef009353u + s[13]; + s[2] += (s[1] | s[8]); + s[0] *= (s[2] | 1u); + s[14] += s[0]; + s[1] ^= s[14]; + s[8] *= (s[1] | 1u); + s[14] += (s[8] | s[4]); + s[11] *= (s[14] | 1u); + s[15] = mh_rotl(s[15] ^ s[11], 14u); + s[4] = mh_rotl(s[4] ^ s[15], 24u); + s[8] += s[4]; + s[5] += (s[8] | s[10]); + s[2] += s[5]; + s[13] = mh_rotl(s[13] ^ s[2], 22u); + s[8] -= s[13]; + s[3] += s[8]; + s[10] += (s[3] | s[5]); + s[13] ^= s[10]; + s[0] += (s[13] | s[5]); + s[8] += s[0]; + s[14] = mh_rotl(s[14], 23u) + s[8]; + s[7] = (s[7] ^ s[14]) * 0xe87bd0f5u; + s[1] ^= s[7]; + s[12] *= (s[1] | 1u); + s[9] -= s[12]; + s[8] = mh_rotl(s[8], 8u) + s[9]; + s[7] += s[8]; + s[11] = mh_rotl(s[11], 9u) + s[7]; + s[6] ^= s[11]; + s[2] += (s[6] | s[3]); + s[6] = (s[6] ^ s[2]) * 0xea6f06c5u; + s[9] = s[9] * 0xb0813793u + s[6]; + s[5] = mh_rotl(s[5], 27u) + s[9]; + s[12] = (s[12] ^ s[5]) * 0x9522a8cbu; + s[11] += (s[12] | s[1]); + s[13] ^= s[11]; + s[4] *= (s[13] | 1u); + s[9] += s[4]; + s[13] ^= s[9]; + s[15] -= s[13]; + s[10] ^= s[15]; + s[8] -= s[10]; + s[11] ^= s[8]; + s[15] = mh_rotl(s[15], 15u) + s[11]; + s[5] ^= s[15]; + s[10] -= s[5]; + s[0] = s[0] * 0x84635df9u + s[10]; + s[8] += s[0]; + s[9] += s[8]; + s[15] = s[15] * 0x55198e97u + s[9]; + s[4] -= s[15]; + s[8] = mh_rotl(s[8], 5u) + s[4]; + s[11] -= s[8]; + s[13] = (s[13] ^ s[11]) * 0x15b1b0a5u; + s[11] *= (s[13] | 1u); + s[10] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[10], 22u); + s[7] += s[12] + 0x8aac82cau; + s[11] = mh_rotl(s[11] ^ s[7], 24u); + s[10] = mh_rotl(s[10] ^ s[11], 16u); + s[13] = s[13] * 0xc6a07e99u + s[10]; + s[12] *= (s[13] | 1u); + s[4] *= (s[12] | 1u); + s[2] = mh_rotl(s[2], 13u) + s[4]; + s[4] = mh_rotl(s[4], 2u) + s[2]; + s[9] = mh_rotl(s[9] ^ s[4], 11u); + s[12] ^= s[9]; + s[2] += (s[12] | s[13]); + s[7] = mh_rotl(s[7], 5u) + s[2]; + s[15] += (s[7] | s[13]); + s[6] = mh_rotl(s[6], 5u) + s[15]; + s[1] -= s[6]; + s[14] ^= s[1]; + s[2] ^= s[14] ^ 0xf187f908u; + s[12] -= s[2]; + s[9] += s[12] + 0x1a02f1acu; + s[0] ^= s[9]; + s[5] ^= s[0]; + s[3] = mh_rotl(s[3], 27u) + s[5]; + s[2] += s[3]; + s[1] += s[2]; + s[14] ^= s[1]; + s[1] += s[14]; + s[9] = mh_rotl(s[9], 7u) + s[1]; + s[0] += (s[9] | s[6]); + s[6] ^= s[0] ^ 0x69d64d91u; + s[9] ^= (s[6] & s[11]); + s[4] = mh_rotl(s[4], 9u) + s[9]; + s[7] -= s[4]; + s[5] += s[7] + 0xefa00412u; + s[11] *= (s[5] | 1u); + s[0] += s[11] + 0xb0b34a8fu; + s[3] -= s[0]; + s[6] += s[3]; + s[12] = mh_rotl(s[12], 26u) + s[6]; + s[14] *= (s[12] | 1u); + s[9] -= s[14]; + s[6] += s[9]; + s[13] ^= s[6]; + s[1] += s[13]; + s[8] += s[1] + 0x1a6451adu; + s[3] ^= (s[8] & s[9]); + s[13] ^= s[3]; + s[2] ^= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 28u); + s[8] += s[6]; + s[10] ^= s[8] ^ 0x4b68b070u; + s[14] += s[10] + 0x3e959795u; + s[9] += s[14] + 0x7e7f05f4u; + s[14] *= (s[9] | 1u); + s[8] ^= s[14]; + s[11] *= (s[8] | 1u); + s[4] -= s[11]; + s[2] += s[4]; + s[6] += s[2]; + s[2] += s[6]; + s[8] *= (s[2] | 1u); + s[4] += (s[8] | s[0]); + s[13] -= s[4]; + s[0] -= s[13]; + s[5] ^= s[0] ^ 0xcdcd2654u; + s[2] = mh_rotl(s[2] ^ s[5], 27u); + s[9] = (s[9] ^ s[2]) * 0x512a14b1u; + s[8] = (s[8] ^ s[9]) * 0xe54b3cc1u; + s[11] += (s[8] | s[13]); + s[15] ^= s[11] ^ 0x0823130du; + s[11] ^= s[15]; + s[3] ^= (s[11] & s[2]); + s[9] = mh_rotl(s[9] ^ s[3], 7u); + s[2] = (s[2] ^ s[9]) * 0x583f7895u; + s[15] ^= s[2] ^ 0x4a0f9347u; + s[9] += s[15]; + s[11] ^= s[9]; + s[9] *= (s[11] | 1u); + s[2] = (s[2] ^ s[9]) * 0x071a75e5u; + s[14] *= (s[2] | 1u); + s[0] = mh_rotl(s[0] ^ s[14], 22u); + s[3] ^= s[0] ^ 0xa770c1f5u; + s[10] = mh_rotl(s[10] ^ s[3], 4u); + s[13] += s[10] + 0xeaf6caa2u; + s[12] += (s[13] | s[5]); + s[3] -= s[12]; + s[9] -= s[3]; + s[3] += s[9]; + s[15] = (s[15] ^ s[3]) * 0x8c66add5u; + s[0] -= s[15]; + s[15] = mh_rotl(s[15], 20u) + s[0]; + s[3] += s[15] + 0x4fe53ed8u; + s[0] += s[3] + 0xb80a3204u; + s[12] += (s[0] | s[14]); + s[10] += s[12]; + s[9] *= (s[10] | 1u); + s[3] += s[9]; + s[0] += s[3]; + s[14] += (s[0] | s[1]); + s[4] *= (s[14] | 1u); + s[6] -= s[4]; + s[5] -= s[6]; + s[4] *= (s[5] | 1u); + s[5] = mh_rotl(s[5], 5u) + s[4]; + s[9] ^= s[5] ^ 0xda8f6abau; + s[10] ^= s[9]; + s[8] ^= (s[10] & s[13]); + s[10] = mh_rotl(s[10], 26u) + s[8]; + s[1] ^= s[10]; + s[15] = (s[15] ^ s[1]) * 0x1fd82855u; + s[2] ^= s[15]; + s[4] -= s[2]; + s[2] *= (s[4] | 1u); + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[3] ^= s[8]; + s[13] *= (s[3] | 1u); + s[5] ^= s[13]; + s[7] -= s[5]; + s[3] += s[7]; + s[1] += s[3]; + s[14] *= (s[1] | 1u); + s[8] = (s[8] ^ s[14]) * 0x14b291ebu; + s[12] = mh_rotl(s[12] ^ s[8], 24u); + s[5] -= s[12]; + s[3] *= (s[5] | 1u); + s[4] += s[3] + 0x2e4c7228u; + s[11] = mh_rotl(s[11] ^ s[4], 9u); + s[5] = mh_rotl(s[5] ^ s[11], 21u); + s[4] += s[5] + 0xcec3470du; + s[14] += s[4]; + s[5] = (s[5] ^ s[14]) * 0xd3b1d179u; + s[7] = (s[7] ^ s[5]) * 0x0dfd9191u; + s[1] ^= s[7]; + s[12] += s[1] + 0x05dc87fdu; + s[11] -= s[12]; + s[7] ^= (s[11] & s[10]); + s[10] *= (s[7] | 1u); + s[8] = mh_rotl(s[8], 22u) + s[10]; + s[11] ^= s[8]; + s[10] *= (s[11] | 1u); + s[0] -= s[10]; + s[7] += s[0] + 0xbab4bd7fu; + s[0] = mh_rotl(s[0], 13u) + s[7]; + s[15] = (s[15] ^ s[0]) * 0x1a239ff7u; + s[3] = mh_rotl(s[3] ^ s[15], 24u); + s[1] = mh_rotl(s[1], 25u) + s[3]; + s[5] = mh_rotl(s[5], 23u) + s[1]; + s[4] = (s[4] ^ s[5]) * 0x114ab605u; + s[9] += s[4]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[0] -= s[5]; + s[4] ^= s[0]; + s[15] = mh_rotl(s[15] ^ s[4], 14u); + s[14] *= (s[15] | 1u); + s[10] = mh_rotl(s[10] ^ s[14], 8u); + s[3] = mh_rotl(s[3] ^ s[10], 17u); + s[6] += s[3] + 0xb216edc1u; + s[9] ^= s[6]; + s[7] += s[9]; + s[9] = mh_rotl(s[9] ^ s[7], 27u); + s[8] += (s[9] | s[12]); + s[10] *= (s[8] | 1u); + s[7] += s[10]; + s[2] += (s[7] | s[11]); + s[3] = (s[3] ^ s[2]) * 0x74b003d9u; + s[1] = mh_rotl(s[1], 12u) + s[3]; + s[0] = (s[0] ^ s[1]) * 0x6e4a2ddbu; + s[7] *= (s[0] | 1u); + s[4] += s[7]; + s[13] += s[4]; + s[10] = mh_rotl(s[10] ^ s[13], 23u); + s[9] += s[10]; + s[1] ^= s[9]; + s[3] ^= s[1]; + s[13] = mh_rotl(s[13], 26u) + s[3]; + s[15] = mh_rotl(s[15] ^ s[13], 26u); + s[13] = mh_rotl(s[13] ^ s[15], 26u); + s[2] -= s[13]; + s[6] = mh_rotl(s[6] ^ s[2], 17u); + s[7] ^= s[6] ^ 0x040fda34u; + s[12] ^= s[7] ^ 0x7517e01cu; + s[9] = (s[9] ^ s[12]) * 0x65c2f9e3u; + s[2] *= (s[9] | 1u); + s[8] += (s[2] | s[15]); + s[10] = mh_rotl(s[10] ^ s[8], 25u); + s[7] = mh_rotl(s[7] ^ s[10], 18u); + s[0] ^= s[7]; + s[13] -= s[0]; + s[5] += s[13] + 0x91f36456u; + s[13] ^= s[5] ^ 0xb0249e62u; + s[9] ^= s[13]; + s[10] -= s[9]; + s[9] = s[9] * 0x3349e8abu + s[10]; + s[15] += s[9]; + s[1] = mh_rotl(s[1] ^ s[15], 18u); + s[3] -= s[1]; + s[6] ^= s[3]; + s[2] = (s[2] ^ s[6]) * 0x56121511u; + s[14] = mh_rotl(s[14], 12u) + s[2]; + s[12] ^= s[14] ^ 0x10c3c286u; + s[5] += s[12]; + s[7] += (s[5] | s[15]); + s[4] = mh_rotl(s[4] ^ s[7], 13u); + s[7] ^= s[4]; + s[3] += (s[7] | s[9]); + s[15] -= s[3]; + s[3] ^= s[15]; + s[12] = mh_rotl(s[12] ^ s[3], 28u); + s[14] ^= s[12]; + s[6] ^= (s[14] & s[3]); + s[5] -= s[6]; + s[11] ^= s[5] ^ 0x039a9ae9u; + s[8] = (s[8] ^ s[11]) * 0x0cf0a8dbu; + s[7] += s[8]; + s[2] ^= (s[7] & s[15]); + s[4] += s[2]; + s[15] *= (s[4] | 1u); + s[3] ^= (s[15] & s[0]); + s[2] += (s[3] | s[14]); + s[5] = mh_rotl(s[5] ^ s[2], 2u); + s[2] ^= s[5] ^ 0x6a1af17au; + s[12] = s[12] * 0x4dfc5c59u + s[2]; + s[7] = mh_rotl(s[7] ^ s[12], 4u); + s[1] ^= s[7]; + s[13] += s[1]; + s[3] ^= (s[13] & s[10]); + s[8] += s[3]; + s[4] += s[8]; + s[3] ^= s[4]; + s[9] = mh_rotl(s[9], 30u) + s[3]; + s[5] += s[9] + 0x07e78f25u; + s[12] ^= s[5]; + s[5] += s[12] + 0x31f9526eu; + s[14] ^= (s[5] & s[13]); + s[3] = mh_rotl(s[3] ^ s[14], 2u); + s[1] = (s[1] ^ s[3]) * 0xe113f67bu; + s[13] = mh_rotl(s[13] ^ s[1], 2u); + s[12] *= (s[13] | 1u); + s[2] ^= s[12]; + s[9] = s[9] * 0x1a8888d9u + s[2]; + s[4] += s[9]; + s[6] += (s[4] | s[7]); + s[7] = (s[7] ^ s[6]) * 0xfddcf333u; + s[15] += (s[7] | s[8]); + s[1] = mh_rotl(s[1], 10u) + s[15]; + s[8] ^= s[1]; + s[13] *= (s[8] | 1u); + s[9] *= (s[13] | 1u); + s[10] = (s[10] ^ s[9]) * 0x3ca467cfu; + s[9] += s[10]; + s[13] = mh_rotl(s[13], 10u) + s[9]; + s[4] ^= s[13]; + s[5] = (s[5] ^ s[4]) * 0x01623d69u; + s[14] = mh_rotl(s[14], 25u) + s[5]; + s[9] = mh_rotl(s[9], 20u) + s[14]; + s[13] += s[9]; + s[7] ^= s[13]; + s[0] += s[7]; + s[12] = mh_rotl(s[12] ^ s[0], 30u); + s[7] = mh_rotl(s[7], 18u) + s[12]; + s[12] = mh_rotl(s[12] ^ s[7], 28u); + s[2] ^= s[12]; + s[3] = (s[3] ^ s[2]) * 0xabf1e829u; +} +// Round program 7: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_7(thread uint* s) { + s[5] -= s[0]; + s[4] += s[5]; + s[1] ^= s[4]; + s[8] = mh_rotl(s[8], 27u) + s[1]; + s[11] = (s[11] ^ s[8]) * 0x4b2f6f09u; + s[6] ^= s[11]; + s[9] = mh_rotl(s[9] ^ s[6], 4u); + s[8] += s[9] + 0xbb62948fu; + s[5] ^= s[8]; + s[11] += (s[5] | s[13]); + s[12] += s[11]; + s[1] = mh_rotl(s[1], 31u) + s[12]; + s[14] ^= s[1]; + s[8] *= (s[14] | 1u); + s[6] += (s[8] | s[1]); + s[10] ^= s[6]; + s[7] = s[7] * 0x6b454bc1u + s[10]; + s[6] -= s[7]; + s[9] += s[6]; + s[2] = mh_rotl(s[2], 17u) + s[9]; + s[9] -= s[2]; + s[13] ^= (s[9] & s[0]); + s[2] -= s[13]; + s[14] ^= (s[2] & s[11]); + s[13] ^= s[14]; + s[8] += s[13]; + s[1] ^= s[8]; + s[15] ^= s[1] ^ 0x6fb89ee0u; + s[13] = mh_rotl(s[13], 6u) + s[15]; + s[5] -= s[13]; + s[9] = (s[9] ^ s[5]) * 0x34a05bdbu; + s[14] = mh_rotl(s[14] ^ s[9], 19u); + s[7] += s[14] + 0x91a91f0eu; + s[12] = mh_rotl(s[12], 30u) + s[7]; + s[3] = (s[3] ^ s[12]) * 0x29e111e1u; + s[15] = mh_rotl(s[15], 13u) + s[3]; + s[4] = mh_rotl(s[4], 23u) + s[15]; + s[6] -= s[4]; + s[15] ^= (s[6] & s[3]); + s[1] ^= s[15]; + s[13] = mh_rotl(s[13], 2u) + s[1]; + s[5] -= s[13]; + s[12] += (s[5] | s[6]); + s[5] = mh_rotl(s[5], 8u) + s[12]; + s[6] = (s[6] ^ s[5]) * 0x46361369u; + s[0] = s[0] * 0x41b33755u + s[6]; + s[14] += s[0]; + s[7] = (s[7] ^ s[14]) * 0x927361a3u; + s[13] += s[7]; + s[1] ^= s[13]; + s[3] = mh_rotl(s[3] ^ s[1], 29u); + s[7] = mh_rotl(s[7] ^ s[3], 28u); + s[15] = mh_rotl(s[15], 6u) + s[7]; + s[3] = s[3] * 0x0876dd9du + s[15]; + s[4] ^= s[3]; + s[11] -= s[4]; + s[10] = mh_rotl(s[10], 29u) + s[11]; + s[5] ^= s[10]; + s[3] += s[5]; + s[7] *= (s[3] | 1u); + s[2] -= s[7]; + s[9] ^= s[2]; + s[8] *= (s[9] | 1u); + s[7] += (s[8] | s[13]); + s[13] -= s[7]; + s[11] = mh_rotl(s[11], 18u) + s[13]; + s[10] += s[11] + 0x181a9075u; + s[9] = (s[9] ^ s[10]) * 0xb49d9e43u; + s[15] ^= s[9]; + s[3] = mh_rotl(s[3] ^ s[15], 5u); + s[7] += s[3]; + s[3] += s[7]; + s[4] ^= s[3] ^ 0xe8c5e0a0u; + s[7] += (s[4] | s[12]); + s[4] += s[7]; + s[14] = (s[14] ^ s[4]) * 0x178ee02fu; + s[7] += s[14]; + s[1] ^= s[7] ^ 0x194c8352u; + s[11] ^= s[1]; + s[10] *= (s[11] | 1u); + s[13] = mh_rotl(s[13] ^ s[10], 16u); + s[0] = mh_rotl(s[0] ^ s[13], 28u); + s[1] += (s[0] | s[7]); + s[15] -= s[1]; + s[6] += s[15]; + s[7] -= s[6]; + s[0] ^= s[7]; + s[4] += s[0]; + s[12] = (s[12] ^ s[4]) * 0x7db92f45u; + s[8] += s[12]; + s[9] = mh_rotl(s[9], 25u) + s[8]; + s[14] += s[9]; + s[4] = mh_rotl(s[4], 1u) + s[14]; + s[9] = mh_rotl(s[9], 20u) + s[4]; + s[8] -= s[9]; + s[2] = (s[2] ^ s[8]) * 0xe35b6231u; + s[14] *= (s[2] | 1u); + s[11] += s[14]; + s[6] = mh_rotl(s[6], 27u) + s[11]; + s[13] += (s[6] | s[14]); + s[3] += s[13]; + s[12] ^= s[3]; + s[2] ^= s[12]; + s[0] ^= s[2]; + s[3] += (s[0] | s[7]); + s[14] ^= (s[3] & s[9]); + s[4] += s[14] + 0x77498422u; + s[11] = mh_rotl(s[11], 18u) + s[4]; + s[10] = mh_rotl(s[10] ^ s[11], 14u); + s[6] *= (s[10] | 1u); + s[12] = mh_rotl(s[12] ^ s[6], 12u); + s[2] *= (s[12] | 1u); + s[8] *= (s[2] | 1u); + s[0] = (s[0] ^ s[8]) * 0x597dfa7du; + s[5] = mh_rotl(s[5] ^ s[0], 1u); + s[8] = (s[8] ^ s[5]) * 0x818239b3u; + s[6] ^= s[8] ^ 0x898c850du; + s[1] = (s[1] ^ s[6]) * 0x3d7ae6bfu; + s[2] += (s[1] | s[0]); + s[15] = mh_rotl(s[15] ^ s[2], 12u); + s[11] ^= (s[15] & s[1]); + s[10] += (s[11] | s[5]); + s[9] = mh_rotl(s[9], 2u) + s[10]; + s[4] += s[9] + 0x8e6a7325u; + s[10] += s[4]; + s[9] *= (s[10] | 1u); + s[7] = mh_rotl(s[7] ^ s[9], 29u); + s[9] *= (s[7] | 1u); + s[14] *= (s[9] | 1u); + s[9] += (s[14] | s[8]); + s[8] *= (s[9] | 1u); + s[10] = mh_rotl(s[10] ^ s[8], 31u); + s[0] += s[10]; + s[3] ^= s[0]; + s[11] += s[3]; + s[10] = mh_rotl(s[10], 14u) + s[11]; + s[14] = s[14] * 0xedeb79c3u + s[10]; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[0] ^= s[13] ^ 0xcb8f865fu; + s[7] ^= s[0] ^ 0xc218e233u; + s[6] ^= s[7]; + s[15] -= s[6]; + s[13] += s[15]; + s[9] -= s[13]; + s[8] += s[9]; + s[5] += s[8]; + s[14] -= s[5]; + s[9] = mh_rotl(s[9] ^ s[14], 5u); + s[12] *= (s[9] | 1u); + s[2] = mh_rotl(s[2], 4u) + s[12]; + s[5] = (s[5] ^ s[2]) * 0xca70bd5bu; + s[6] = mh_rotl(s[6] ^ s[5], 1u); + s[9] -= s[6]; + s[12] ^= s[9]; + s[11] += s[12] + 0xc0665a45u; + s[3] = mh_rotl(s[3] ^ s[11], 4u); + s[9] ^= s[3] ^ 0x32e70bb6u; + s[1] ^= s[9] ^ 0xae4dfdd5u; + s[5] ^= (s[1] & s[3]); + s[3] = mh_rotl(s[3] ^ s[5], 22u); + s[13] += s[3]; + s[10] = mh_rotl(s[10], 4u) + s[13]; + s[7] += s[10]; + s[10] ^= s[7] ^ 0x4810f287u; + s[6] += (s[10] | s[13]); + s[11] = (s[11] ^ s[6]) * 0x66e90aa1u; + s[2] += s[11]; + s[14] += s[2]; + s[8] *= (s[14] | 1u); + s[11] ^= (s[8] & s[10]); + s[6] ^= s[11]; + s[8] = mh_rotl(s[8] ^ s[6], 9u); + s[2] = (s[2] ^ s[8]) * 0x0ae2e991u; + s[14] *= (s[2] | 1u); + s[2] += (s[14] | s[3]); + s[0] -= s[2]; + s[11] += s[0] + 0x68b8549cu; + s[8] -= s[11]; + s[5] *= (s[8] | 1u); + s[12] -= s[5]; + s[3] = mh_rotl(s[3] ^ s[12], 12u); + s[10] = s[10] * 0xf67913a1u + s[3]; + s[14] = mh_rotl(s[14] ^ s[10], 22u); + s[11] ^= (s[14] & s[4]); + s[8] += s[11]; + s[15] *= (s[8] | 1u); + s[14] += s[15]; + s[8] = (s[8] ^ s[14]) * 0x0ab3eb01u; + s[2] = mh_rotl(s[2], 28u) + s[8]; + s[8] *= (s[2] | 1u); + s[2] ^= s[8]; + s[10] ^= s[2]; + s[0] -= s[10]; + s[4] ^= s[0] ^ 0x4f62b664u; + s[12] = mh_rotl(s[12] ^ s[4], 7u); + s[10] -= s[12]; + s[0] += s[10] + 0xf2da1dd8u; + s[3] += s[0]; + s[5] = (s[5] ^ s[3]) * 0xdbaaf8b9u; + s[4] = (s[4] ^ s[5]) * 0xf8df299fu; + s[13] += s[4]; + s[10] ^= (s[13] & s[14]); + s[5] ^= s[10]; + s[13] += s[5]; + s[8] *= (s[13] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 26u); + s[0] = mh_rotl(s[0] ^ s[11], 21u); + s[9] ^= s[0] ^ 0x9e7430f6u; + s[4] = mh_rotl(s[4], 5u) + s[9]; + s[8] ^= s[4]; + s[7] ^= s[8]; + s[0] ^= s[7]; + s[14] = mh_rotl(s[14], 20u) + s[0]; + s[7] += (s[14] | s[15]); + s[6] = (s[6] ^ s[7]) * 0x151af639u; + s[12] -= s[6]; + s[3] = mh_rotl(s[3] ^ s[12], 15u); + s[4] = s[4] * 0xf5ff2905u + s[3]; + s[9] += s[4] + 0x986450f9u; + s[0] += s[9]; + s[3] *= (s[0] | 1u); + s[10] = mh_rotl(s[10], 6u) + s[3]; + s[7] += (s[10] | s[2]); + s[11] ^= s[7]; + s[14] = mh_rotl(s[14], 9u) + s[11]; + s[6] = mh_rotl(s[6] ^ s[14], 9u); + s[12] += s[6] + 0x8e33c6d8u; + s[1] ^= s[12]; + s[14] = s[14] * 0x75b03e79u + s[1]; + s[12] = (s[12] ^ s[14]) * 0xf81548e3u; + s[14] = mh_rotl(s[14] ^ s[12], 26u); + s[0] = (s[0] ^ s[14]) * 0xed123d19u; + s[4] = s[4] * 0xc3964555u + s[0]; + s[12] *= (s[4] | 1u); + s[8] = (s[8] ^ s[12]) * 0x5b0867f3u; + s[4] += s[8]; + s[11] += (s[4] | s[8]); + s[13] = mh_rotl(s[13], 13u) + s[11]; + s[8] = mh_rotl(s[8], 13u) + s[13]; + s[10] += s[8]; + s[5] = mh_rotl(s[5], 21u) + s[10]; + s[13] += s[5]; + s[1] = mh_rotl(s[1], 28u) + s[13]; + s[6] ^= s[1]; + s[0] = s[0] * 0x8659f36fu + s[6]; + s[6] = mh_rotl(s[6], 16u) + s[0]; + s[14] *= (s[6] | 1u); + s[3] ^= (s[14] & s[15]); + s[7] ^= s[3]; + s[8] = s[8] * 0x9b402df1u + s[7]; + s[13] -= s[8]; + s[14] = s[14] * 0xfc97057fu + s[13]; + s[8] = mh_rotl(s[8], 16u) + s[14]; + s[14] = (s[14] ^ s[8]) * 0xbe6b7107u; + s[15] = mh_rotl(s[15] ^ s[14], 13u); + s[8] = mh_rotl(s[8] ^ s[15], 17u); + s[2] *= (s[8] | 1u); + s[13] ^= (s[2] & s[15]); + s[4] -= s[13]; + s[6] += s[4]; + s[5] ^= s[6]; + s[13] += s[5] + 0xe1efd35du; + s[11] -= s[13]; + s[9] -= s[11]; + s[11] += s[9]; + s[10] += s[11] + 0x54c20a26u; + s[11] += s[10]; + s[10] ^= s[11]; + s[1] += s[10]; + s[15] ^= s[1] ^ 0xba35f967u; + s[10] ^= s[15]; + s[5] -= s[10]; + s[10] -= s[5]; + s[2] = mh_rotl(s[2] ^ s[10], 4u); + s[12] = mh_rotl(s[12] ^ s[2], 28u); + s[3] *= (s[12] | 1u); + s[12] += s[3]; + s[2] ^= s[12] ^ 0xf5d2467fu; + s[6] *= (s[2] | 1u); + s[10] = (s[10] ^ s[6]) * 0x28dedae7u; + s[3] = mh_rotl(s[3], 23u) + s[10]; + s[13] ^= s[3]; + s[0] -= s[13]; + s[6] = mh_rotl(s[6], 27u) + s[0]; + s[9] = mh_rotl(s[9] ^ s[6], 24u); + s[7] += s[9]; + s[1] = (s[1] ^ s[7]) * 0x7c90eb87u; + s[9] ^= s[1]; + s[13] = mh_rotl(s[13], 9u) + s[9]; + s[10] ^= s[13] ^ 0x225cb631u; + s[4] = mh_rotl(s[4] ^ s[10], 7u); + s[2] *= (s[4] | 1u); + s[4] += s[2]; + s[2] = (s[2] ^ s[4]) * 0xbf3bcc37u; + s[7] += s[2]; + s[14] = (s[14] ^ s[7]) * 0xbc306609u; + s[7] ^= (s[14] & s[8]); + s[15] ^= s[7] ^ 0x60b43c30u; + s[9] ^= s[15]; + s[4] ^= s[9]; + s[9] += (s[4] | s[7]); + s[0] ^= (s[9] & s[13]); + s[12] ^= s[0] ^ 0xd2720722u; + s[5] ^= s[12] ^ 0xd44c4970u; + s[9] ^= s[5] ^ 0xc371f5beu; + s[3] ^= s[9]; + s[0] = mh_rotl(s[0], 29u) + s[3]; + s[10] += s[0]; + s[8] += s[10]; + s[3] = (s[3] ^ s[8]) * 0xa4d0bc15u; + s[1] ^= s[3]; + s[12] ^= s[1]; + s[10] ^= s[12]; + s[2] += (s[10] | s[4]); + s[11] = mh_rotl(s[11], 16u) + s[2]; + s[9] += s[11]; + s[7] *= (s[9] | 1u); + s[0] = (s[0] ^ s[7]) * 0x5e3371e1u; + s[14] += s[0]; + s[9] ^= s[14]; + s[10] = (s[10] ^ s[9]) * 0x9e41ec57u; + s[0] ^= s[10]; + s[4] *= (s[0] | 1u); + s[0] ^= s[4]; + s[4] *= (s[0] | 1u); + s[8] = s[8] * 0xbfdc3751u + s[4]; + s[15] = mh_rotl(s[15] ^ s[8], 21u); + s[11] -= s[15]; + s[9] -= s[11]; + s[4] = mh_rotl(s[4], 8u) + s[9]; + s[15] += s[4]; + s[1] ^= s[15] ^ 0xd11970cdu; + s[15] ^= s[1]; + s[4] = s[4] * 0x94d713c9u + s[15]; + s[7] = s[7] * 0x68b74c8du + s[4]; + s[9] ^= s[7] ^ 0x96fae1c9u; + s[7] *= (s[9] | 1u); + s[4] ^= s[7]; + s[1] -= s[4]; + s[8] ^= s[1] ^ 0x3b8298fdu; + s[3] = mh_rotl(s[3] ^ s[8], 29u); + s[10] += s[3]; + s[2] ^= s[10] ^ 0xfc75ba25u; + s[15] ^= s[2] ^ 0x3370ab46u; + s[4] *= (s[15] | 1u); + s[0] = (s[0] ^ s[4]) * 0xf0c6e8a1u; + s[8] = mh_rotl(s[8], 30u) + s[0]; + s[13] ^= s[8]; + s[9] += (s[13] | s[4]); + s[3] ^= (s[9] & s[5]); + s[9] ^= s[3]; + s[6] += s[9]; + s[10] += (s[6] | s[12]); + s[15] += s[10]; + s[13] *= (s[15] | 1u); + s[15] += (s[13] | s[2]); + s[5] += s[15] + 0xc80c1f15u; + s[6] = mh_rotl(s[6] ^ s[5], 6u); + s[2] ^= s[6]; + s[14] += s[2] + 0x20c48485u; + s[0] += s[14]; + s[8] = (s[8] ^ s[0]) * 0xab09b653u; + s[5] += s[8]; + s[11] *= (s[5] | 1u); + s[15] += s[11]; + s[8] ^= s[15]; + s[11] -= s[8]; + s[12] *= (s[11] | 1u); + s[0] = mh_rotl(s[0] ^ s[12], 10u); + s[13] ^= s[0]; + s[4] = mh_rotl(s[4], 27u) + s[13]; + s[2] += s[4]; + s[10] = mh_rotl(s[10], 18u) + s[2]; + s[7] *= (s[10] | 1u); + s[6] -= s[7]; + s[3] = (s[3] ^ s[6]) * 0xb3dee1f9u; + s[6] -= s[3]; + s[5] += s[6]; + s[8] *= (s[5] | 1u); + s[15] += s[8]; + s[0] = mh_rotl(s[0], 13u) + s[15]; + s[2] -= s[0]; + s[14] *= (s[2] | 1u); + s[3] += s[14]; + s[13] -= s[3]; + s[12] = mh_rotl(s[12], 15u) + s[13]; + s[8] = s[8] * 0xdd12f547u + s[12]; + s[4] = s[4] * 0xeabf279du + s[8]; + s[10] = (s[10] ^ s[4]) * 0x233f1cd3u; + s[7] += s[10] + 0x6c58f593u; + s[8] ^= (s[7] & s[14]); + s[12] -= s[8]; + s[11] ^= (s[12] & s[6]); + s[12] *= (s[11] | 1u); + s[13] = (s[13] ^ s[12]) * 0x8c02e38du; + s[2] += s[13] + 0xa8bdba12u; + s[14] += s[2]; + s[13] = (s[13] ^ s[14]) * 0x4beb81bdu; + s[5] = (s[5] ^ s[13]) * 0x1ad1e6dbu; + s[3] ^= s[5]; + s[4] ^= s[3]; + s[7] = (s[7] ^ s[4]) * 0xef5d1565u; + s[4] += (s[7] | s[12]); + s[15] ^= s[4] ^ 0x5a3cd0fbu; + s[2] += s[15]; + s[10] = (s[10] ^ s[2]) * 0x42c18153u; + s[9] = mh_rotl(s[9], 31u) + s[10]; + s[12] -= s[9]; + s[3] += s[12] + 0x809ec6a1u; + s[0] -= s[3]; + s[2] = (s[2] ^ s[0]) * 0x37fb4965u; + s[6] = mh_rotl(s[6], 14u) + s[2]; + s[15] += s[6]; + s[2] ^= s[15]; + s[9] *= (s[2] | 1u); + s[13] ^= s[9]; + s[9] = mh_rotl(s[9] ^ s[13], 15u); + s[3] ^= (s[9] & s[2]); + s[2] = (s[2] ^ s[3]) * 0xe757085du; + s[10] *= (s[2] | 1u); + s[7] += s[10] + 0x0e230d44u; + s[10] += s[7]; + s[14] += s[10]; + s[2] += s[14] + 0x3f9b1777u; + s[14] -= s[2]; + s[8] ^= s[14] ^ 0x53fdae32u; + s[14] ^= s[8] ^ 0x545e3034u; + s[12] ^= s[14]; + s[2] = mh_rotl(s[2] ^ s[12], 18u); + s[1] *= (s[2] | 1u); + s[13] = mh_rotl(s[13], 1u) + s[1]; + s[6] += s[13]; + s[13] = mh_rotl(s[13], 31u) + s[6]; + s[8] = mh_rotl(s[8], 9u) + s[13]; + s[4] = mh_rotl(s[4], 13u) + s[8]; + s[15] ^= s[4]; + s[13] ^= s[15]; + s[15] += s[13]; + s[6] *= (s[15] | 1u); + s[8] -= s[6]; + s[2] += (s[8] | s[4]); + s[8] += s[2] + 0x071fe892u; + s[2] += s[8]; + s[6] ^= s[2]; + s[12] = mh_rotl(s[12], 12u) + s[6]; + s[11] ^= s[12]; + s[10] ^= s[11]; + s[15] ^= (s[10] & s[2]); + s[0] += s[15] + 0xc5893a51u; + s[11] ^= s[0]; + s[8] = s[8] * 0xcbaa9e53u + s[11]; + s[12] ^= s[8]; + s[7] += s[12]; + s[4] ^= s[7]; + s[14] ^= s[4]; + s[8] += s[14]; + s[2] ^= (s[8] & s[13]); + s[4] += (s[2] | s[15]); + s[15] = mh_rotl(s[15], 18u) + s[4]; + s[6] *= (s[15] | 1u); + s[4] ^= s[6] ^ 0xda23719bu; + s[10] += s[4]; + s[14] = s[14] * 0x7d043037u + s[10]; + s[1] = (s[1] ^ s[14]) * 0x3702ca63u; + s[14] = s[14] * 0x6069e073u + s[1]; + s[11] += s[14]; + s[15] += s[11] + 0x080f6236u; + s[14] += s[15]; + s[0] ^= s[14] ^ 0xbcf33252u; + s[8] ^= (s[0] & s[4]); + s[10] ^= s[8] ^ 0x42b4ca59u; + s[5] ^= s[10]; + s[0] = (s[0] ^ s[5]) * 0xeff77d4bu; + s[3] = mh_rotl(s[3], 7u) + s[0]; + s[14] ^= s[3] ^ 0xa94ec34bu; + s[4] = mh_rotl(s[4], 11u) + s[14]; + s[8] = mh_rotl(s[8] ^ s[4], 26u); + s[0] = mh_rotl(s[0] ^ s[8], 29u); + s[2] = mh_rotl(s[2], 1u) + s[0]; + s[14] += s[2] + 0xe0207936u; + s[10] *= (s[14] | 1u); + s[8] = mh_rotl(s[8] ^ s[10], 19u); + s[4] += s[8] + 0x401aa131u; + s[0] += s[4]; + s[12] = mh_rotl(s[12] ^ s[0], 1u); + s[6] += s[12]; + s[5] = (s[5] ^ s[6]) * 0x5402ef7fu; + s[3] ^= s[5]; + s[12] -= s[3]; + s[14] ^= s[12] ^ 0xa47dfa06u; + s[6] = (s[6] ^ s[14]) * 0xd40c13a9u; + s[8] = (s[8] ^ s[6]) * 0xfd2046ddu; + s[2] = (s[2] ^ s[8]) * 0x06e4aacbu; + s[13] = mh_rotl(s[13], 29u) + s[2]; + s[0] ^= s[13]; + s[15] = mh_rotl(s[15], 19u) + s[0]; + s[10] += (s[15] | s[2]); + s[3] ^= s[10] ^ 0xd34e89bcu; + s[10] ^= s[3] ^ 0xbd40c99cu; + s[14] = mh_rotl(s[14], 7u) + s[10]; + s[12] += s[14]; + s[9] = mh_rotl(s[9] ^ s[12], 21u); + s[2] = (s[2] ^ s[9]) * 0xacae09c7u; + s[5] -= s[2]; + s[3] ^= s[5]; + s[14] -= s[3]; + s[5] = s[5] * 0xaf5e1497u + s[14]; + s[8] ^= (s[5] & s[12]); + s[6] ^= s[8]; + s[15] += s[6]; + s[12] ^= (s[15] & s[13]); + s[9] = mh_rotl(s[9] ^ s[12], 8u); + s[1] = mh_rotl(s[1] ^ s[9], 11u); + s[2] += s[1]; + s[4] ^= (s[2] & s[5]); + s[14] = (s[14] ^ s[4]) * 0x818385b1u; + s[7] += s[14]; + s[8] ^= s[7] ^ 0x4eae6b36u; + s[13] = mh_rotl(s[13], 19u) + s[8]; + s[6] *= (s[13] | 1u); + s[15] ^= s[6]; + s[5] = mh_rotl(s[5], 18u) + s[15]; + s[6] = mh_rotl(s[6] ^ s[5], 16u); + s[9] += (s[6] | s[14]); + s[12] *= (s[9] | 1u); + s[0] = (s[0] ^ s[12]) * 0x5540eec9u; + s[10] ^= s[0] ^ 0x57f45e0eu; + s[12] = mh_rotl(s[12], 19u) + s[10]; + s[9] -= s[12]; + s[10] += s[9] + 0x4e7af6edu; + s[7] *= (s[10] | 1u); + s[14] *= (s[7] | 1u); + s[10] *= (s[14] | 1u); + s[13] ^= s[10]; + s[6] += s[13] + 0xdeaaf3c5u; + s[5] = (s[5] ^ s[6]) * 0x6626311bu; + s[8] += s[5]; + s[14] -= s[8]; + s[1] += s[14]; + s[0] = mh_rotl(s[0], 14u) + s[1]; + s[1] ^= s[0]; + s[9] = mh_rotl(s[9] ^ s[1], 3u); + s[14] ^= s[9]; + s[3] += s[14]; + s[0] += s[3]; + s[6] = mh_rotl(s[6], 9u) + s[0]; + s[10] = mh_rotl(s[10] ^ s[6], 18u); + s[3] -= s[10]; + s[0] = (s[0] ^ s[3]) * 0xf8e0b555u; + s[5] = (s[5] ^ s[0]) * 0x90f83cc5u; + s[15] -= s[5]; + s[13] = (s[13] ^ s[15]) * 0x1028be17u; + s[8] ^= s[13] ^ 0x6f814efau; + s[3] = mh_rotl(s[3], 7u) + s[8]; + s[13] = s[13] * 0x1fe5d55du + s[3]; + s[14] += s[13]; + s[11] *= (s[14] | 1u); + s[8] = s[8] * 0xec49ce8fu + s[11]; + s[1] ^= s[8] ^ 0x6ce63203u; + s[13] = mh_rotl(s[13] ^ s[1], 3u); + s[4] = (s[4] ^ s[13]) * 0x1f4d84d5u; + s[3] = mh_rotl(s[3] ^ s[4], 19u); + s[6] ^= s[3] ^ 0x99bbd04au; + s[15] = mh_rotl(s[15], 23u) + s[6]; + s[5] ^= s[15]; + s[7] ^= s[5]; + s[12] = s[12] * 0x41bf1949u + s[7]; + s[3] ^= s[12] ^ 0xc73c6eaau; + s[5] += s[3]; + s[12] += s[5] + 0xaca33a02u; + s[2] += s[12]; + s[1] -= s[2]; + s[2] ^= (s[1] & s[8]); + s[15] *= (s[2] | 1u); + s[12] += s[15]; + s[2] = mh_rotl(s[2] ^ s[12], 22u); + s[15] *= (s[2] | 1u); + s[2] += s[15]; + s[8] -= s[2]; + s[4] += s[8]; + s[6] += s[4]; + s[7] += s[6]; + s[13] += s[7]; + s[9] += s[13]; + s[11] += s[9]; + s[8] += s[11]; + s[10] = mh_rotl(s[10] ^ s[8], 23u); + s[7] -= s[10]; + s[3] += s[7]; + s[6] *= (s[3] | 1u); + s[5] = mh_rotl(s[5] ^ s[6], 9u); + s[0] ^= s[5]; + s[13] = mh_rotl(s[13] ^ s[0], 26u); + s[4] = mh_rotl(s[4], 1u) + s[13]; + s[13] += s[4]; + s[8] = mh_rotl(s[8] ^ s[13], 17u); + s[6] -= s[8]; + s[4] = mh_rotl(s[4] ^ s[6], 13u); + s[6] -= s[4]; + s[10] = mh_rotl(s[10], 17u) + s[6]; + s[8] = (s[8] ^ s[10]) * 0x5414f521u; + s[5] ^= (s[8] & s[12]); + s[12] += s[5]; + s[9] ^= s[12]; + s[4] = mh_rotl(s[4] ^ s[9], 22u); + s[6] ^= (s[4] & s[15]); + s[5] += s[6]; + s[2] ^= (s[5] & s[3]); + s[15] ^= s[2]; + s[11] += s[15]; + s[8] -= s[11]; + s[3] -= s[8]; + s[8] = s[8] * 0xb35e6bc9u + s[3]; + s[14] ^= s[8]; + s[6] *= (s[14] | 1u); + s[14] -= s[6]; + s[4] ^= s[14]; + s[0] ^= s[4]; + s[13] = (s[13] ^ s[0]) * 0xe1a27a3du; + s[1] = mh_rotl(s[1] ^ s[13], 4u); + s[8] = (s[8] ^ s[1]) * 0x7db5fbb1u; + s[5] += s[8]; + s[9] += s[5]; + s[6] *= (s[9] | 1u); + s[7] = (s[7] ^ s[6]) * 0x33889ef9u; + s[13] = mh_rotl(s[13] ^ s[7], 11u); + s[9] ^= s[13]; + s[8] = mh_rotl(s[8], 4u) + s[9]; + s[11] = mh_rotl(s[11], 8u) + s[8]; + s[10] ^= s[11] ^ 0x833b63eeu; + s[14] *= (s[10] | 1u); + s[5] -= s[14]; + s[3] ^= s[5]; + s[10] *= (s[3] | 1u); + s[15] = mh_rotl(s[15], 15u) + s[10]; + s[10] -= s[15]; + s[11] ^= s[10]; + s[15] += s[11] + 0x67b25095u; + s[5] = mh_rotl(s[5] ^ s[15], 6u); + s[12] += s[5]; + s[4] += (s[12] | s[15]); + s[12] += s[4] + 0x0b5448beu; + s[8] *= (s[12] | 1u); + s[12] += s[8] + 0x9db08cddu; + s[4] = mh_rotl(s[4], 5u) + s[12]; + s[12] *= (s[4] | 1u); + s[5] ^= s[12]; + s[7] ^= (s[5] & s[15]); + s[2] = mh_rotl(s[2], 9u) + s[7]; + s[7] = (s[7] ^ s[2]) * 0xef5cc1a1u; + s[13] ^= s[7]; + s[2] += s[13] + 0xe8acb081u; + s[7] += s[2]; + s[13] ^= s[7]; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[4] += s[11]; + s[3] += s[4] + 0x2bf7bd89u; + s[15] += s[3]; + s[11] = mh_rotl(s[11] ^ s[15], 10u); + s[0] = mh_rotl(s[0] ^ s[11], 17u); + s[6] = mh_rotl(s[6] ^ s[0], 20u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[6] = mh_rotl(s[6], 26u) + s[8]; + s[11] = mh_rotl(s[11], 18u) + s[6]; + s[0] = mh_rotl(s[0], 29u) + s[11]; + s[2] *= (s[0] | 1u); + s[11] = mh_rotl(s[11] ^ s[2], 21u); + s[8] += s[11]; + s[1] ^= s[8]; + s[12] = mh_rotl(s[12], 21u) + s[1]; + s[9] = mh_rotl(s[9] ^ s[12], 30u); + s[12] = (s[12] ^ s[9]) * 0xaa6bd425u; + s[10] += s[12] + 0x3abc6eeeu; + s[4] = (s[4] ^ s[10]) * 0x26651b39u; + s[1] = (s[1] ^ s[4]) * 0x669011cbu; + s[12] = (s[12] ^ s[1]) * 0xc730fa63u; + s[4] *= (s[12] | 1u); + s[1] += s[4]; + s[13] = (s[13] ^ s[1]) * 0xa91d1549u; + s[8] = mh_rotl(s[8] ^ s[13], 20u); + s[15] = mh_rotl(s[15] ^ s[8], 19u); + s[9] ^= s[15]; + s[12] += s[9]; + s[6] ^= s[12]; + s[7] = mh_rotl(s[7], 10u) + s[6]; + s[6] = s[6] * 0x4737bba1u + s[7]; + s[7] = mh_rotl(s[7] ^ s[6], 4u); + s[15] = (s[15] ^ s[7]) * 0x1550c0c9u; + s[6] = (s[6] ^ s[15]) * 0xa9708363u; + s[11] = s[11] * 0x7ed5889du + s[6]; + s[14] += s[11] + 0xe220d224u; + s[5] += s[14] + 0xa5c27ec0u; + s[3] ^= s[5]; + s[11] = (s[11] ^ s[3]) * 0x83211151u; + s[1] += s[11]; + s[0] -= s[1]; + s[8] += s[0]; + s[10] = mh_rotl(s[10], 22u) + s[8]; + s[14] -= s[10]; + s[13] ^= s[14]; + s[12] = mh_rotl(s[12], 19u) + s[13]; + s[5] *= (s[12] | 1u); + s[2] *= (s[5] | 1u); + s[13] += s[2]; + s[14] ^= s[13]; + s[7] = mh_rotl(s[7] ^ s[14], 8u); + s[10] ^= s[7]; + s[8] ^= s[10]; + s[4] = mh_rotl(s[4], 25u) + s[8]; + s[11] ^= s[4]; + s[13] += s[11] + 0xc7fb1dc5u; + s[6] ^= s[13] ^ 0xda0de0b3u; + s[9] *= (s[6] | 1u); + s[0] += s[9]; + s[10] = mh_rotl(s[10], 30u) + s[0]; + s[11] = mh_rotl(s[11], 31u) + s[10]; + s[14] -= s[11]; + s[4] ^= s[14]; + s[7] *= (s[4] | 1u); + s[4] += s[7]; + s[9] = mh_rotl(s[9], 16u) + s[4]; + s[5] -= s[9]; + s[14] = mh_rotl(s[14], 23u) + s[5]; + s[8] += s[14]; + s[13] += (s[8] | s[4]); + s[3] -= s[13]; + s[9] ^= s[3]; + s[7] *= (s[9] | 1u); + s[0] *= (s[7] | 1u); + s[4] = s[4] * 0xa5531c79u + s[0]; + s[5] += s[4] + 0x956e1cecu; + s[4] = mh_rotl(s[4], 12u) + s[5]; + s[13] ^= s[4] ^ 0xcfd8a170u; + s[8] = mh_rotl(s[8] ^ s[13], 2u); + s[12] *= (s[8] | 1u); + s[7] = mh_rotl(s[7], 18u) + s[12]; +} +// Round program 8: 736 instructions, chain rule (every instruction reads the register the previous one wrote; s[0] first). +inline void mh_round_8(thread uint* s) { + s[12] *= (s[0] | 1u); + s[14] ^= s[12]; + s[7] = mh_rotl(s[7] ^ s[14], 19u); + s[9] ^= s[7]; + s[7] += (s[9] | s[15]); + s[14] ^= s[7]; + s[12] ^= s[14]; + s[9] += s[12]; + s[0] -= s[9]; + s[11] = (s[11] ^ s[0]) * 0x032a9d93u; + s[12] ^= s[11] ^ 0x7816ceedu; + s[6] += s[12]; + s[7] ^= s[6] ^ 0x5f893870u; + s[8] ^= s[7] ^ 0x38fe7d15u; + s[5] += s[8]; + s[11] = mh_rotl(s[11] ^ s[5], 5u); + s[3] = s[3] * 0xdc8f2169u + s[11]; + s[12] += s[3]; + s[1] = (s[1] ^ s[12]) * 0xff5bb02du; + s[9] += s[1]; + s[5] = mh_rotl(s[5], 17u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[5], 9u); + s[12] += s[10]; + s[2] += s[12] + 0x6fbd2719u; + s[7] *= (s[2] | 1u); + s[10] *= (s[7] | 1u); + s[7] = mh_rotl(s[7], 12u) + s[10]; + s[15] ^= (s[7] & s[2]); + s[1] = (s[1] ^ s[15]) * 0xa496dd7du; + s[12] += s[1]; + s[9] *= (s[12] | 1u); + s[4] += s[9] + 0x603c29a5u; + s[0] = (s[0] ^ s[4]) * 0xb11db5efu; + s[12] = mh_rotl(s[12] ^ s[0], 12u); + s[9] ^= s[12]; + s[3] += s[9]; + s[4] ^= s[3]; + s[10] = s[10] * 0xf2876a93u + s[4]; + s[3] *= (s[10] | 1u); + s[13] *= (s[3] | 1u); + s[10] += s[13]; + s[0] += s[10] + 0xa38ef984u; + s[13] += s[0]; + s[0] += s[13]; + s[4] -= s[0]; + s[8] = mh_rotl(s[8], 16u) + s[4]; + s[0] *= (s[8] | 1u); + s[1] = mh_rotl(s[1] ^ s[0], 19u); + s[10] -= s[1]; + s[4] -= s[10]; + s[3] += s[4] + 0x98d38850u; + s[15] ^= s[3]; + s[12] = mh_rotl(s[12] ^ s[15], 7u); + s[0] ^= s[12]; + s[8] += (s[0] | s[12]); + s[1] -= s[8]; + s[0] -= s[1]; + s[12] += s[0]; + s[1] = mh_rotl(s[1] ^ s[12], 8u); + s[8] = s[8] * 0xdb178cedu + s[1]; + s[13] ^= (s[8] & s[9]); + s[14] = mh_rotl(s[14] ^ s[13], 31u); + s[5] = mh_rotl(s[5] ^ s[14], 15u); + s[14] += s[5] + 0x58102672u; + s[13] = mh_rotl(s[13], 31u) + s[14]; + s[9] = (s[9] ^ s[13]) * 0xcea6b9a5u; + s[8] = mh_rotl(s[8] ^ s[9], 10u); + s[0] ^= s[8]; + s[1] = mh_rotl(s[1] ^ s[0], 26u); + s[0] ^= (s[1] & s[14]); + s[14] = mh_rotl(s[14] ^ s[0], 29u); + s[7] = mh_rotl(s[7] ^ s[14], 10u); + s[8] ^= s[7]; + s[4] ^= s[8]; + s[3] ^= s[4]; + s[1] ^= (s[3] & s[2]); + s[15] = mh_rotl(s[15] ^ s[1], 16u); + s[3] = (s[3] ^ s[15]) * 0xf98d62f9u; + s[8] += s[3]; + s[4] ^= s[8]; + s[13] ^= s[4]; + s[14] -= s[13]; + s[13] += s[14]; + s[1] *= (s[13] | 1u); + s[4] += s[1] + 0x2e4fd7f9u; + s[3] += s[4] + 0xad1f68c8u; + s[11] += s[3]; + s[7] ^= s[11]; + s[2] ^= s[7]; + s[7] += (s[2] | s[0]); + s[3] += (s[7] | s[4]); + s[14] = mh_rotl(s[14], 3u) + s[3]; + s[9] += s[14]; + s[2] += (s[9] | s[4]); + s[7] += s[2]; + s[0] ^= s[7]; + s[5] += s[0]; + s[6] ^= s[5] ^ 0xdd9e035eu; + s[11] *= (s[6] | 1u); + s[6] += (s[11] | s[15]); + s[0] -= s[6]; + s[13] ^= s[0] ^ 0x28746675u; + s[1] ^= s[13]; + s[4] *= (s[1] | 1u); + s[8] += (s[4] | s[6]); + s[2] ^= (s[8] & s[15]); + s[15] += s[2]; + s[3] ^= s[15]; + s[9] -= s[3]; + s[1] = (s[1] ^ s[9]) * 0x9a49d919u; + s[0] *= (s[1] | 1u); + s[3] *= (s[0] | 1u); + s[12] ^= s[3]; + s[4] = mh_rotl(s[4], 13u) + s[12]; + s[8] += s[4]; + s[15] ^= s[8]; + s[1] ^= s[15]; + s[8] = (s[8] ^ s[1]) * 0x406ccbb9u; + s[6] ^= s[8] ^ 0x9c63a403u; + s[7] *= (s[6] | 1u); + s[6] ^= s[7]; + s[3] -= s[6]; + s[2] -= s[3]; + s[1] -= s[2]; + s[11] -= s[1]; + s[5] = (s[5] ^ s[11]) * 0xc8b2063bu; + s[9] ^= s[5]; + s[11] += s[9]; + s[14] -= s[11]; + s[12] ^= s[14]; + s[7] = mh_rotl(s[7], 19u) + s[12]; + s[6] ^= s[7]; + s[7] = mh_rotl(s[7], 28u) + s[6]; + s[0] += (s[7] | s[8]); + s[5] = (s[5] ^ s[0]) * 0x91563ef9u; + s[4] = (s[4] ^ s[5]) * 0x2489c7ddu; + s[0] ^= s[4]; + s[8] += s[0]; + s[13] ^= (s[8] & s[2]); + s[4] = (s[4] ^ s[13]) * 0xd3f73963u; + s[0] += s[4]; + s[7] -= s[0]; + s[8] *= (s[7] | 1u); + s[12] += s[8] + 0xe7c7770bu; + s[2] = mh_rotl(s[2] ^ s[12], 24u); + s[5] += s[2]; + s[13] -= s[5]; + s[7] = s[7] * 0xa499d785u + s[13]; + s[14] ^= s[7] ^ 0xa5531f53u; + s[0] += s[14]; + s[12] += s[0]; + s[4] += s[12]; + s[5] ^= s[4] ^ 0xa21d41b2u; + s[13] ^= (s[5] & s[1]); + s[4] *= (s[13] | 1u); + s[15] = mh_rotl(s[15], 17u) + s[4]; + s[13] = s[13] * 0x9e80ce17u + s[15]; + s[4] ^= s[13]; + s[9] = s[9] * 0x0efbb90fu + s[4]; + s[3] = mh_rotl(s[3], 22u) + s[9]; + s[9] += s[3]; + s[7] = (s[7] ^ s[9]) * 0x41f4c675u; + s[2] = mh_rotl(s[2] ^ s[7], 10u); + s[5] += s[2]; + s[7] += s[5]; + s[3] ^= s[7]; + s[13] += s[3]; + s[10] += (s[13] | s[12]); + s[6] -= s[10]; + s[4] *= (s[6] | 1u); + s[9] *= (s[4] | 1u); + s[1] ^= (s[9] & s[2]); + s[13] = mh_rotl(s[13], 17u) + s[1]; + s[6] += (s[13] | s[14]); + s[14] = (s[14] ^ s[6]) * 0x3fcef445u; + s[2] += (s[14] | s[13]); + s[14] ^= s[2]; + s[9] = (s[9] ^ s[14]) * 0x76f83471u; + s[15] += s[9] + 0x3620bb75u; + s[6] = (s[6] ^ s[15]) * 0xd2ae1b99u; + s[11] += s[6]; + s[1] = mh_rotl(s[1], 9u) + s[11]; + s[2] *= (s[1] | 1u); + s[15] += (s[2] | s[5]); + s[9] = s[9] * 0xd0673ad9u + s[15]; + s[0] ^= (s[9] & s[10]); + s[7] ^= s[0]; + s[10] ^= s[7]; + s[11] += s[10]; + s[0] = (s[0] ^ s[11]) * 0x1626d79fu; + s[6] ^= s[0]; + s[5] -= s[6]; + s[1] += s[5] + 0xbdfebf4au; + s[10] += (s[1] | s[15]); + s[3] -= s[10]; + s[14] ^= s[3] ^ 0x2f4d32b3u; + s[0] ^= (s[14] & s[4]); + s[10] += s[0] + 0xfec9017au; + s[8] += s[10]; + s[5] -= s[8]; + s[3] += s[5]; + s[0] += s[3] + 0x0a719f0bu; + s[4] -= s[0]; + s[1] ^= s[4]; + s[7] ^= (s[1] & s[12]); + s[2] ^= (s[7] & s[5]); + s[5] = mh_rotl(s[5], 27u) + s[2]; + s[4] = mh_rotl(s[4] ^ s[5], 30u); + s[12] = mh_rotl(s[12], 16u) + s[4]; + s[8] += s[12] + 0x934b929du; + s[6] *= (s[8] | 1u); + s[9] ^= (s[6] & s[4]); + s[3] ^= s[9]; + s[14] += s[3]; + s[1] *= (s[14] | 1u); + s[14] *= (s[1] | 1u); + s[5] ^= s[14]; + s[10] ^= s[5]; + s[13] *= (s[10] | 1u); + s[4] -= s[13]; + s[9] = s[9] * 0xc3f9050bu + s[4]; + s[0] = (s[0] ^ s[9]) * 0x4479cb01u; + s[10] = mh_rotl(s[10] ^ s[0], 22u); + s[7] ^= s[10]; + s[11] ^= (s[7] & s[10]); + s[1] = (s[1] ^ s[11]) * 0xa9a3102bu; + s[9] += s[1]; + s[3] = mh_rotl(s[3], 4u) + s[9]; + s[10] = mh_rotl(s[10] ^ s[3], 16u); + s[9] += (s[10] | s[1]); + s[15] = s[15] * 0xf4a9fbe3u + s[9]; + s[5] += (s[15] | s[1]); + s[14] = s[14] * 0x0fdccaebu + s[5]; + s[7] += s[14] + 0x7e2f9108u; + s[3] -= s[7]; + s[13] *= (s[3] | 1u); + s[11] ^= s[13] ^ 0xc4dab8b7u; + s[3] ^= s[11]; + s[0] += s[3]; + s[1] *= (s[0] | 1u); + s[13] = (s[13] ^ s[1]) * 0x735874d5u; + s[3] ^= s[13]; + s[2] += s[3]; + s[8] ^= s[2]; + s[5] = mh_rotl(s[5], 20u) + s[8]; + s[6] = mh_rotl(s[6] ^ s[5], 8u); + s[5] += s[6] + 0xc7780520u; + s[12] ^= s[5]; + s[0] *= (s[12] | 1u); + s[3] += s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 9u); + s[10] -= s[5]; + s[6] += s[10]; + s[8] += s[6]; + s[4] ^= s[8]; + s[0] ^= s[4]; + s[15] += s[0]; + s[0] -= s[15]; + s[15] = mh_rotl(s[15] ^ s[0], 14u); + s[4] += s[15]; + s[6] = mh_rotl(s[6], 16u) + s[4]; + s[2] *= (s[6] | 1u); + s[5] ^= s[2]; + s[6] ^= s[5]; + s[3] = mh_rotl(s[3], 28u) + s[6]; + s[2] -= s[3]; + s[0] = mh_rotl(s[0], 3u) + s[2]; + s[4] = s[4] * 0xc5ff28b1u + s[0]; + s[13] = mh_rotl(s[13] ^ s[4], 17u); + s[2] = (s[2] ^ s[13]) * 0xf64a55e7u; + s[10] += s[2]; + s[5] -= s[10]; + s[0] = (s[0] ^ s[5]) * 0xc34391fbu; + s[9] ^= s[0]; + s[14] = (s[14] ^ s[9]) * 0xd3626e5fu; + s[12] += s[14] + 0x34b62de8u; + s[0] = mh_rotl(s[0], 3u) + s[12]; + s[10] -= s[0]; + s[5] ^= s[10]; + s[3] *= (s[5] | 1u); + s[1] += s[3]; + s[9] ^= s[1]; + s[14] ^= s[9]; + s[1] = mh_rotl(s[1] ^ s[14], 24u); + s[3] = (s[3] ^ s[1]) * 0xb486108bu; + s[13] += s[3]; + s[8] = mh_rotl(s[8] ^ s[13], 15u); + s[2] += s[8]; + s[13] = mh_rotl(s[13] ^ s[2], 6u); + s[1] -= s[13]; + s[13] += (s[1] | s[12]); + s[3] ^= s[13]; + s[1] *= (s[3] | 1u); + s[10] += s[1]; + s[0] = mh_rotl(s[0] ^ s[10], 11u); + s[14] = mh_rotl(s[14] ^ s[0], 9u); + s[3] = (s[3] ^ s[14]) * 0x1910cbd5u; + s[2] *= (s[3] | 1u); + s[3] ^= s[2] ^ 0x36e5f7c1u; + s[12] ^= s[3] ^ 0xc06b695au; + s[8] += s[12]; + s[11] *= (s[8] | 1u); + s[14] ^= s[11] ^ 0x7e8392d2u; + s[5] += s[14] + 0xc854c03eu; + s[14] += s[5] + 0x6264b077u; + s[3] ^= s[14]; + s[9] ^= s[3]; + s[5] += (s[9] | s[11]); + s[2] ^= s[5]; + s[12] = mh_rotl(s[12] ^ s[2], 11u); + s[9] -= s[12]; + s[11] ^= (s[9] & s[3]); + s[14] -= s[11]; + s[15] = mh_rotl(s[15], 7u) + s[14]; + s[10] *= (s[15] | 1u); + s[12] *= (s[10] | 1u); + s[3] += s[12]; + s[9] = mh_rotl(s[9], 5u) + s[3]; + s[3] += s[9] + 0x25bbb855u; + s[13] += s[3]; + s[7] += s[13]; + s[10] += s[7]; + s[13] += s[10] + 0x9a1fb9e1u; + s[9] += s[13] + 0x4a7d742fu; + s[11] ^= s[9]; + s[15] = (s[15] ^ s[11]) * 0xd796e1a9u; + s[0] += s[15] + 0x4fb80a99u; + s[14] ^= s[0]; + s[4] -= s[14]; + s[0] = mh_rotl(s[0], 19u) + s[4]; + s[3] ^= s[0]; + s[0] += s[3] + 0x7a46f0d4u; + s[9] += s[0]; + s[11] ^= s[9]; + s[2] += s[11]; + s[0] ^= s[2]; + s[10] = mh_rotl(s[10], 5u) + s[0]; + s[4] += s[10]; + s[7] -= s[4]; + s[12] ^= s[7]; + s[10] = mh_rotl(s[10] ^ s[12], 5u); + s[12] ^= s[10]; + s[8] ^= s[12]; + s[7] ^= s[8]; + s[8] += s[7]; + s[0] += s[8] + 0xf25eb71du; + s[15] *= (s[0] | 1u); + s[14] *= (s[15] | 1u); + s[6] += s[14] + 0xc3c48a42u; + s[15] = (s[15] ^ s[6]) * 0x8ff157e3u; + s[4] = s[4] * 0x4517a273u + s[15]; + s[9] ^= s[4]; + s[8] *= (s[9] | 1u); + s[11] = mh_rotl(s[11] ^ s[8], 3u); + s[1] = mh_rotl(s[1], 15u) + s[11]; + s[0] = mh_rotl(s[0], 11u) + s[1]; + s[4] = mh_rotl(s[4], 15u) + s[0]; + s[0] ^= s[4]; + s[8] -= s[0]; + s[5] += (s[8] | s[0]); + s[13] ^= s[5] ^ 0x842fa93fu; + s[10] = s[10] * 0xebf84a5bu + s[13]; + s[9] *= (s[10] | 1u); + s[10] += s[9] + 0xa4ae65abu; + s[7] += s[10]; + s[4] += s[7]; + s[8] = (s[8] ^ s[4]) * 0xa095c55bu; + s[13] += s[8]; + s[1] += s[13] + 0x78267af3u; + s[15] -= s[1]; + s[14] ^= s[15]; + s[9] += s[14]; + s[5] += s[9]; + s[12] *= (s[5] | 1u); + s[14] += s[12]; + s[3] = s[3] * 0x387e70c1u + s[14]; + s[8] += s[3] + 0x4bb62e79u; + s[10] += s[8]; + s[14] -= s[10]; + s[12] += s[14] + 0x94ade867u; + s[11] += s[12]; + s[3] = mh_rotl(s[3] ^ s[11], 17u); + s[9] -= s[3]; + s[8] ^= s[9]; + s[10] += s[8]; + s[12] = (s[12] ^ s[10]) * 0xf31b9bf9u; + s[9] -= s[12]; + s[14] ^= s[9]; + s[4] = (s[4] ^ s[14]) * 0x6c65ed0fu; + s[5] ^= (s[4] & s[3]); + s[13] ^= s[5]; + s[8] = mh_rotl(s[8] ^ s[13], 27u); + s[15] *= (s[8] | 1u); + s[14] ^= s[15]; + s[1] += s[14] + 0x0dabf75fu; + s[8] += s[1]; + s[6] ^= (s[8] & s[4]); + s[2] -= s[6]; + s[10] = (s[10] ^ s[2]) * 0x5df68b21u; + s[7] *= (s[10] | 1u); + s[2] = mh_rotl(s[2], 30u) + s[7]; + s[3] = mh_rotl(s[3] ^ s[2], 11u); + s[10] ^= s[3]; + s[12] = mh_rotl(s[12], 18u) + s[10]; + s[3] = mh_rotl(s[3] ^ s[12], 2u); + s[15] -= s[3]; + s[12] ^= (s[15] & s[3]); + s[6] += s[12] + 0xba8c656du; + s[11] = mh_rotl(s[11] ^ s[6], 25u); + s[8] *= (s[11] | 1u); + s[12] += (s[8] | s[1]); + s[10] = mh_rotl(s[10] ^ s[12], 14u); + s[0] ^= s[10] ^ 0xf57cb31cu; + s[15] ^= s[0]; + s[5] += s[15]; + s[2] ^= s[5]; + s[14] += (s[2] | s[4]); + s[10] ^= s[14] ^ 0xfc568076u; + s[2] += s[10]; + s[5] ^= s[2]; + s[0] += s[5]; + s[3] ^= s[0]; + s[7] = mh_rotl(s[7], 28u) + s[3]; + s[9] ^= s[7]; + s[11] -= s[9]; + s[8] -= s[11]; + s[10] += s[8] + 0x44a98267u; + s[6] = (s[6] ^ s[10]) * 0x78341057u; + s[9] *= (s[6] | 1u); + s[8] ^= s[9]; + s[9] -= s[8]; + s[11] += s[9]; + s[4] ^= s[11]; + s[7] += (s[4] | s[5]); + s[11] ^= s[7]; + s[14] += s[11]; + s[3] = mh_rotl(s[3], 10u) + s[14]; + s[1] = (s[1] ^ s[3]) * 0x699c712fu; + s[0] ^= s[1] ^ 0xadd48ad1u; + s[3] = mh_rotl(s[3] ^ s[0], 18u); + s[0] ^= s[3] ^ 0x7c2a7e58u; + s[1] = (s[1] ^ s[0]) * 0x5d0ba3bbu; + s[10] = mh_rotl(s[10] ^ s[1], 9u); + s[0] ^= s[10] ^ 0x3f61235cu; + s[2] ^= s[0]; + s[8] -= s[2]; + s[12] *= (s[8] | 1u); + s[10] *= (s[12] | 1u); + s[7] ^= s[10] ^ 0x4fe234e6u; + s[15] ^= s[7]; + s[3] += s[15] + 0x7518599bu; + s[12] = mh_rotl(s[12], 9u) + s[3]; + s[8] ^= s[12]; + s[9] ^= s[8] ^ 0xf95c4703u; + s[2] = mh_rotl(s[2], 7u) + s[9]; + s[12] ^= s[2] ^ 0x775646a8u; + s[15] ^= s[12] ^ 0x552eaf71u; + s[4] -= s[15]; + s[15] += (s[4] | s[7]); + s[0] ^= s[15]; + s[13] ^= s[0]; + s[14] += s[13] + 0x87e74b49u; + s[6] ^= s[14] ^ 0x6efaba41u; + s[10] += s[6] + 0x88e2108fu; + s[7] -= s[10]; + s[11] -= s[7]; + s[4] ^= s[11] ^ 0xa876c358u; + s[2] ^= s[4] ^ 0xd3f39ab5u; + s[5] *= (s[2] | 1u); + s[3] = mh_rotl(s[3], 9u) + s[5]; + s[2] ^= s[3]; + s[8] = mh_rotl(s[8] ^ s[2], 2u); + s[5] = (s[5] ^ s[8]) * 0x9b50170fu; + s[13] = mh_rotl(s[13] ^ s[5], 7u); + s[0] += s[13]; + s[13] -= s[0]; + s[5] = mh_rotl(s[5] ^ s[13], 21u); + s[11] = mh_rotl(s[11], 6u) + s[5]; + s[1] += s[11]; + s[10] += (s[1] | s[13]); + s[4] ^= s[10]; + s[5] *= (s[4] | 1u); + s[4] ^= s[5]; + s[3] += s[4]; + s[4] = mh_rotl(s[4], 29u) + s[3]; + s[5] *= (s[4] | 1u); + s[2] ^= s[5] ^ 0x435d474cu; + s[15] = mh_rotl(s[15] ^ s[2], 31u); + s[14] += s[15]; + s[15] += s[14]; + s[13] -= s[15]; + s[7] += s[13]; + s[0] ^= s[7]; + s[5] = mh_rotl(s[5] ^ s[0], 13u); + s[13] -= s[5]; + s[15] *= (s[13] | 1u); + s[8] += s[15] + 0xbf3496cau; + s[3] = mh_rotl(s[3] ^ s[8], 13u); + s[4] = mh_rotl(s[4], 20u) + s[3]; + s[6] = (s[6] ^ s[4]) * 0xe0716b4du; + s[3] ^= s[6]; + s[11] ^= s[3]; + s[12] += (s[11] | s[7]); + s[0] = mh_rotl(s[0], 7u) + s[12]; + s[8] ^= s[0]; + s[1] += s[8]; + s[13] = mh_rotl(s[13] ^ s[1], 22u); + s[4] ^= s[13] ^ 0xaac36692u; + s[1] *= (s[4] | 1u); + s[8] ^= s[1] ^ 0x1e4e42deu; + s[15] *= (s[8] | 1u); + s[5] += (s[15] | s[11]); + s[13] += s[5]; + s[6] ^= s[13]; + s[12] ^= s[6] ^ 0xb025ee52u; + s[5] += s[12]; + s[2] *= (s[5] | 1u); + s[10] = mh_rotl(s[10] ^ s[2], 8u); + s[15] -= s[10]; + s[5] += (s[15] | s[10]); + s[3] += s[5]; + s[2] -= s[3]; + s[10] += s[2] + 0x80d367feu; + s[12] -= s[10]; + s[15] *= (s[12] | 1u); + s[6] ^= s[15] ^ 0x8d56107cu; + s[15] ^= s[6]; + s[4] = mh_rotl(s[4] ^ s[15], 9u); + s[12] += (s[4] | s[14]); + s[13] = mh_rotl(s[13] ^ s[12], 10u); + s[2] ^= s[13]; + s[14] = s[14] * 0x1a3e65cbu + s[2]; + s[15] *= (s[14] | 1u); + s[11] += s[15]; + s[7] ^= s[11]; + s[12] -= s[7]; + s[8] ^= s[12] ^ 0xfadd6688u; + s[7] = mh_rotl(s[7], 8u) + s[8]; + s[9] += s[7]; + s[14] ^= s[9]; + s[13] += s[14]; + s[6] ^= s[13] ^ 0xed97a531u; + s[7] -= s[6]; + s[4] = mh_rotl(s[4] ^ s[7], 28u); + s[6] ^= s[4]; + s[10] ^= s[6]; + s[3] ^= s[10]; + s[1] -= s[3]; + s[3] += s[1]; + s[13] = (s[13] ^ s[3]) * 0x48c92b9fu; + s[2] = mh_rotl(s[2], 6u) + s[13]; + s[11] = mh_rotl(s[11], 12u) + s[2]; + s[8] ^= s[11]; + s[12] = mh_rotl(s[12] ^ s[8], 19u); + s[0] += (s[12] | s[7]); + s[2] = (s[2] ^ s[0]) * 0x3e4b61a1u; + s[0] = (s[0] ^ s[2]) * 0x582f7a5fu; + s[12] = (s[12] ^ s[0]) * 0x2b069c6fu; + s[5] = s[5] * 0x7cf7ee03u + s[12]; + s[0] += s[5]; + s[4] = (s[4] ^ s[0]) * 0x16927f07u; + s[2] = mh_rotl(s[2], 8u) + s[4]; + s[12] = mh_rotl(s[12], 15u) + s[2]; + s[5] = (s[5] ^ s[12]) * 0xbf55dac1u; + s[10] *= (s[5] | 1u); + s[6] = mh_rotl(s[6] ^ s[10], 16u); + s[3] = mh_rotl(s[3] ^ s[6], 20u); + s[5] += s[3] + 0xc2d80c0eu; + s[13] ^= s[5] ^ 0x9407a51du; + s[11] = mh_rotl(s[11] ^ s[13], 29u); + s[10] -= s[11]; + s[1] = mh_rotl(s[1] ^ s[10], 6u); + s[3] = mh_rotl(s[3], 5u) + s[1]; + s[9] ^= (s[3] & s[0]); + s[15] ^= s[9]; + s[6] -= s[15]; + s[13] ^= s[6] ^ 0xba96a2feu; + s[14] ^= s[13] ^ 0x39f982b0u; + s[8] += s[14] + 0x4c13cb1au; + s[7] = mh_rotl(s[7] ^ s[8], 23u); + s[15] -= s[7]; + s[7] = mh_rotl(s[7], 30u) + s[15]; + s[11] += s[7]; + s[14] += s[11]; + s[8] = mh_rotl(s[8] ^ s[14], 22u); + s[6] ^= s[8] ^ 0x34c4199bu; + s[3] ^= s[6]; + s[4] += s[3]; + s[13] += s[4]; + s[9] ^= s[13]; + s[3] ^= (s[9] & s[4]); + s[15] += s[3]; + s[1] -= s[15]; + s[12] -= s[1]; + s[14] += s[12] + 0xec96595fu; + s[4] ^= s[14]; + s[12] ^= s[4]; + s[11] -= s[12]; + s[13] ^= s[11]; + s[0] += s[13]; + s[11] ^= s[0]; + s[3] ^= s[11]; + s[8] ^= s[3]; + s[0] += (s[8] | s[15]); + s[11] = mh_rotl(s[11], 1u) + s[0]; + s[7] += (s[11] | s[5]); + s[4] = s[4] * 0xc1674329u + s[7]; + s[7] += s[4]; + s[6] *= (s[7] | 1u); + s[2] = (s[2] ^ s[6]) * 0xc284407bu; + s[0] ^= s[2]; + s[7] -= s[0]; + s[14] = mh_rotl(s[14], 27u) + s[7]; + s[8] *= (s[14] | 1u); + s[14] -= s[8]; + s[11] *= (s[14] | 1u); + s[7] = s[7] * 0x5a2517e9u + s[11]; + s[6] += s[7]; + s[7] ^= s[6] ^ 0xf29de804u; + s[10] -= s[7]; + s[8] ^= s[10]; + s[5] = mh_rotl(s[5], 6u) + s[8]; + s[3] += s[5] + 0xa3c2f2b2u; + s[0] = mh_rotl(s[0] ^ s[3], 17u); + s[12] -= s[0]; + s[8] ^= s[12]; + s[6] = mh_rotl(s[6] ^ s[8], 1u); + s[12] = s[12] * 0xed2bef65u + s[6]; + s[9] += s[12]; + s[4] ^= s[9] ^ 0xacaef5beu; + s[3] += s[4]; + s[1] *= (s[3] | 1u); + s[8] += s[1] + 0x462f5fffu; + s[2] ^= s[8]; + s[1] += s[2]; + s[11] = mh_rotl(s[11], 14u) + s[1]; + s[6] ^= s[11] ^ 0xa93bca39u; + s[1] ^= s[6]; + s[0] ^= s[1] ^ 0x571f65b5u; + s[9] = s[9] * 0xcd8edcedu + s[0]; + s[11] ^= s[9] ^ 0xa554ca69u; + s[2] += s[11]; + s[9] ^= s[2]; + s[4] ^= s[9]; + s[8] += s[4]; + s[4] += s[8]; + s[12] -= s[4]; + s[4] -= s[12]; + s[12] = mh_rotl(s[12] ^ s[4], 1u); + s[5] = mh_rotl(s[5] ^ s[12], 17u); + s[14] *= (s[5] | 1u); + s[8] += (s[14] | s[4]); + s[13] = mh_rotl(s[13] ^ s[8], 21u); + s[15] -= s[13]; + s[0] ^= s[15]; + s[6] += s[0]; + s[14] = mh_rotl(s[14] ^ s[6], 24u); + s[13] = s[13] * 0x929d4b37u + s[14]; + s[15] -= s[13]; + s[4] = (s[4] ^ s[15]) * 0xc6dc8fbbu; + s[7] = mh_rotl(s[7] ^ s[4], 23u); + s[8] ^= s[7]; + s[10] = (s[10] ^ s[8]) * 0x06233043u; + s[2] = (s[2] ^ s[10]) * 0x4403efd9u; + s[3] ^= s[2]; + s[5] -= s[3]; + s[12] += s[5]; + s[6] = s[6] * 0x2ae6d079u + s[12]; + s[10] ^= s[6]; + s[7] ^= s[10] ^ 0x674b5a65u; + s[13] = mh_rotl(s[13], 3u) + s[7]; + s[9] *= (s[13] | 1u); + s[12] -= s[9]; + s[8] *= (s[12] | 1u); + s[5] *= (s[8] | 1u); + s[9] += s[5]; + s[7] = mh_rotl(s[7] ^ s[9], 20u); + s[13] += s[7]; + s[4] += s[13]; + s[13] ^= s[4]; + s[3] -= s[13]; + s[4] -= s[3]; + s[0] ^= s[4]; + s[3] = mh_rotl(s[3], 3u) + s[0]; + s[5] = mh_rotl(s[5] ^ s[3], 25u); + s[0] ^= s[5]; + s[11] *= (s[0] | 1u); + s[10] ^= s[11] ^ 0x147c14d2u; + s[11] ^= s[10]; + s[0] = mh_rotl(s[0], 18u) + s[11]; + s[13] ^= s[0]; + s[12] ^= s[13]; + s[0] -= s[12]; + s[13] ^= s[0]; + s[11] = mh_rotl(s[11], 26u) + s[13]; + s[10] += s[11]; + s[11] ^= s[10] ^ 0x4b0abaf2u; + s[3] -= s[11]; + s[8] += (s[3] | s[9]); + s[12] += (s[8] | s[10]); + s[11] = mh_rotl(s[11], 31u) + s[12]; + s[4] *= (s[11] | 1u); + s[0] += s[4] + 0xab0da7ecu; + s[6] = mh_rotl(s[6] ^ s[0], 31u); + s[8] = mh_rotl(s[8] ^ s[6], 21u); + s[12] -= s[8]; + s[9] = mh_rotl(s[9], 7u) + s[12]; + s[7] -= s[9]; + s[3] *= (s[7] | 1u); + s[2] += s[3]; + s[4] = s[4] * 0xf4865499u + s[2]; + s[7] = s[7] * 0xbed687ffu + s[4]; + s[14] += s[7]; + s[15] += s[14] + 0x603451a7u; + s[10] ^= (s[15] & s[2]); + s[7] = mh_rotl(s[7] ^ s[10], 22u); + s[1] += s[7]; + s[5] += s[1]; + s[14] = (s[14] ^ s[5]) * 0x8e7b488du; + s[9] += (s[14] | s[11]); + s[12] *= (s[9] | 1u); + s[1] += s[12]; + s[12] += s[1] + 0x6855c1d8u; + s[15] -= s[12]; + s[9] = mh_rotl(s[9] ^ s[15], 5u); + s[8] = mh_rotl(s[8] ^ s[9], 2u); + s[7] -= s[8]; + s[14] *= (s[7] | 1u); + s[12] *= (s[14] | 1u); + s[0] = mh_rotl(s[0], 1u) + s[12]; + s[15] = mh_rotl(s[15], 7u) + s[0]; + s[5] *= (s[15] | 1u); + s[12] = (s[12] ^ s[5]) * 0x015c0c07u; + s[5] = mh_rotl(s[5], 4u) + s[12]; + s[4] = mh_rotl(s[4] ^ s[5], 2u); + s[10] ^= s[4]; +} +// Item t: 16 words. s = (K, t * MUL[i] + RC[i]); 8 rounds of (round program r, cache line s[0] & mask); round program 8. +inline void mh_item(device const uint* cache, uint t, thread uint* s) { + s[0] = 0x3067619fu; + s[1] = 0x3c269176u; + s[2] = 0x84a03b03u; + s[3] = 0xf8c63294u; + s[4] = 0xff977c5bu; + s[5] = 0xe60def3eu; + s[6] = 0x63630141u; + s[7] = 0xb8fbcb58u; + s[8] = t * 0x42146205u + 0xbab68293u; + s[9] = t * 0x52cbe0fbu + 0xcc162340u; + s[10] = t * 0x7ecf4a03u + 0x6ce151ccu; + s[11] = t * 0x6728907fu + 0xe62b8997u; + s[12] = t * 0xd81d9751u + 0xc9c80297u; + s[13] = t * 0x132952c3u + 0xf74a1654u; + s[14] = t * 0xf60de277u + 0x3d704af5u; + s[15] = t * 0x05358035u + 0x3cf522b7u; + mh_round_0(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_1(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_2(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_3(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_4(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_5(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_6(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_7(s); + { device const uint* line = cache + ((s[0] & MH_CACHE_LINE_MASK) * 16u); for (uint i = 0u; i < 16u; ++i) s[i] ^= line[i]; } + mh_round_8(s); +} +// dataset[w] without the dataset: derive item w >> 4 and take word w & 15. +inline uint mh_word(device const uint* cache, uint w) { uint s[16]; mh_item(cache, w >> 4u, s); return s[w & 15u]; } + +// One thread per segment (2^16 threads). +kernel void igneum_cache_fill(device uint* cache [[buffer(0)]], uint gid [[thread_position_in_grid]]) { + mh_cache_segment(cache, gid); +} +// One thread per 64-byte item (dataset words / 16 threads). +kernel void igneum_build(device const uint* cache [[buffer(0)]], device uint* dataset [[buffer(1)]], + uint gid [[thread_position_in_grid]]) { + uint s[16]; + mh_item(cache, gid, s); + device uint* d = dataset + gid * 16u; + for (uint i = 0u; i < 16u; ++i) d[i] = s[i]; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/program.h b/proto-cuda/packs-ca3-derive/dr736-genesis/program.h new file mode 100644 index 00000000..edbd1e90 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/program.h @@ -0,0 +1,72 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// Program metadata for host.cu plus the launch wrappers defined in kernel.cu. +// Also included by proto-opencl/host.c (C99), which defines IGNEUM_NO_CUDA first and reads only the macros. +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif +#ifndef IGNEUM_NO_CUDA +#include +#endif + +#define IGNEUM_SEED_STRING "igneum-genesis" +#define IGNEUM_SEED_BYTES_HEX "69676e65756d2d67656e65736973" +#define IGNEUM_GENERATOR 2 +#define IGNEUM_PROGRAM_ATTEMPT 0 +#define IGNEUM_PROGRAM_ID 0x72c1d8048aef9542ull +#define IGNEUM_DAY_STRING "2026-10-03" +#define IGNEUM_DAY_BYTES_HEX "6461792f323032362d31302d3033" +#define IGNEUM_DAY0 0x3067619fu +#define IGNEUM_DAY1 0x3c269176u +#define IGNEUM_DATASET_LOG2 28 +#define IGNEUM_MASK 0x0fffffffu +#define IGNEUM_LANES 32 +#define IGNEUM_ITERATIONS 8 +#define IGNEUM_INSTR_COUNT 64 +#define IGNEUM_LOADS_PER_HASH 128 +#define IGNEUM_WIDE_LOADS_PER_HASH 0 +#define IGNEUM_OP_MIX "load=16 add=8 shfl=8 xor=6 mad=5 mul=5 mulhi=5 sub=4 rotl=3 rotr=3 or=1" +// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item +// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. +#define IGNEUM_LOAD_CLASS "dr736" +#define IGNEUM_CLASS_MIXER_MULT 1 +#define IGNEUM_CACHE_GROWTH 1 // 1: cache words = 2^(26 + doublings(day)), doublings = floor(log2(1 + day / 1460)) +// Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md, a prototype, NOT class v3): the item +// derivation runs the day's drawn program (memhard.h: mh_round_0..8, IGNEUM_DERIVE_LEN instructions each) in place of the mixer. +#define IGNEUM_CLASS_DERIVE_LEN 736 +#define IGNEUM_LOAD_SLOTS 16 +#define IGNEUM_LOAD_MIX { 100, 0, 0 } +#define IGNEUM_LOAD_WIDTH_COUNTS { 16, 0, 0 } // loads of 4, 16, 64 bytes per program +#define IGNEUM_BYTES_PER_HASH 512 +#define IGNEUM_FOLD_ROT 11 +#define IGNEUM_FOLD_MUL 0x9e3779b1u +// 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) +#define IGNEUM_DATASET_MODE 1 + +#define IGNEUM_SEEDW_INIT { 0x67a9a7beu, 0x1a155b25u, 0xfddfb732u, 0x4b5af2e8u, 0xc55caf33u, 0xa27c13b7u, 0x06628a48u, 0x03852469u } +#define IGNEUM_KEY_INIT { 0x3067619fu, 0x3c269176u, 0x84a03b03u, 0xf8c63294u, 0xff977c5bu, 0xe60def3eu, 0x63630141u, 0xb8fbcb58u } +#define IGNEUM_CACHE_LOG2_WORDS 26 +#define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 +#define IGNEUM_CACHE_SEGMENTS 65536u +#define IGNEUM_ITEM_ROUNDS 8 +#define IGNEUM_DERIVE_LEN 736 // instructions per round program of the day's item-derivation program (Counter ASIC 3.0 item 2; memhard.h mh_round_0..8) +#define IGNEUM_DERIVE_ATTEMPT 0 +#define IGNEUM_DERIVE_FINGERPRINT 0x463535d01511350dull +#define IGNEUM_DERIVE_INSTRS_PER_ITEM 6624 +#define IGNEUM_DERIVE_GPU_OPS_PER_ITEM 10659 +#define IGNEUM_DERIVE_CHIP_OPS_PER_ITEM 9992 +#define IGNEUM_DERIVE_MULS_PER_ITEM 1461 +#define IGNEUM_MIX_ROT_INIT { 20u, 20u, 19u, 4u, 26u, 3u, 3u, 27u } +#define IGNEUM_MIX_MUL_INIT { 0x42146205u, 0x52cbe0fbu, 0x7ecf4a03u, 0x6728907fu, 0xd81d9751u, 0x132952c3u, 0xf60de277u, 0x05358035u, 0xbaf6499du, 0xe4db9667u, 0x3e98f45du, 0xd0004eddu, 0x2691630du, 0x9beb3bcfu, 0xab310379u, 0x99cfb423u } +#define IGNEUM_MIX_RC_INIT { 0xbab68293u, 0xcc162340u, 0x6ce151ccu, 0xe62b8997u, 0xc9c80297u, 0xf74a1654u, 0x3d704af5u, 0x3cf522b7u, 0x2b9cac04u, 0xa880ac10u, 0x13e5dd1du, 0x6fc3e233u, 0x2d83eeacu, 0x9006e8bfu, 0x2c4b5362u, 0x31b49ee2u } + +#ifndef IGNEUM_NO_CUDA +// Defined in kernel.cu. All launch on the default stream and return cudaGetLastError(). +cudaError_t igneum_launch_cache_fill(uint32_t* cache, uint32_t nSegments); +cudaError_t igneum_launch_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems); +cudaError_t igneum_launch_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask, + uint32_t nonces, uint32_t blockWarps); +cudaError_t igneum_hash_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps); +#endif diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/program.json b/proto-cuda/packs-ca3-derive/dr736-genesis/program.json new file mode 100644 index 00000000..7a0ab9fe --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/program.json @@ -0,0 +1,151 @@ +{ + "format": "igneum-program-pack-3", + "generator": 2, + "attempt": 0, + "program_id": "0x72c1d8048aef9542", + "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", + "dataset_mode": "memory-hard", + "seed": "igneum-genesis", + "seed_bytes": "69676e65756d2d67656e65736973", + "seed_words": ["0x67a9a7be", "0x1a155b25", "0xfddfb732", "0x4b5af2e8", "0xc55caf33", "0xa27c13b7", "0x06628a48", "0x03852469"], + "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", + "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", + "lanes": 32, + "registers": 8, + "iterations": 8, + "instruction_count": 64, + "loads_per_hash": 128, + "load_class": "dr736", + "derive_len": 736, + "derive": "Counter ASIC 3.0 item 2 (6 October 2026, docs/plans/counter-asic-3-derivation.md; a prototype, not class v3): the nine mixer slots of the item derivation each run a straight-line program of derive_len instructions drawn from the day key stream after the 40 mixer draws, four draws per instruction (op roll below(100), destination roll below(15), third-register roll below(14), the immediate next()); every instruction reads the register the previous one wrote (s[0] first) and writes another; twelve forms, each a bijection on the state; the 8 dependent cache reads per item unchanged; the acceptance test of derive.rs (every register written per round program, 8 distinct rotations, the x8 mixer's operation and multiply counts as floors) rejects a draw and the next attempt continues the stream", + "mixer_mult": 1, + "cache_growth": true, + "mixer": "class v3 (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): every mixer application of the item derivation is 1 applications with round keys (r * 1 + j + 1) * 0x9E3779B9, the 8 dependent cache reads per item unchanged; cache growth rule option C: cache words = 2^(26 + doublings(day)), dataset words = 2^(genesis_log2 + doublings(day)), doublings(day) = floor(log2(1 + day / 1460)) for day = days since genesis", + "load_slots": 16, + "load_mix_percent_4_16_64": [100, 0, 0], + "load_width_counts_4_16_64": [16, 0, 0], + "bytes_per_hash": 512, + "wide_load": "read-width experiment (5 October 2026, docs/plans/read-width.md), NOT the lottery hash: a load of W words (width field, 4 or 16) reads dataset[b .. b + W) with b = (src & mask) & ~(W - 1) and folds every word into dst: x = dst ^ w[0]; for j in 1..W: x = (rotl(x, 11) * 0x9e3779b1) ^ w[j]; dst = x; width 1 is the plain load; the width is drawn per instruction from the class mix with one extra below(100) draw after the nine of version 2, and the program id is FNV-1a 64 over 'igneum-program-rw/' || generator_le32 || seed words || attempt_le32 || mix[3] || load_slots", + "op_mix": {"load": 16, "add": 8, "shfl": 8, "xor": 6, "mad": 5, "mul": 5, "mulhi": 5, "sub": 4, "rotl": 3, "rotr": 3, "or": 1}, + "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", + "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", + "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", + "output": "lo = r0 ^ rotl(r1,7) ^ rotl(r2,14) ^ rotl(r3,21); hi = r4 ^ rotl(r5,9) ^ rotl(r6,18) ^ rotl(r7,27); out = (hi << 32) | lo", + "op_semantics": { + "add": "dst = dst + src + (bit `bit` of sel ? imm2 : imm)", + "sub": "dst = dst - src", + "mul": "dst = dst * src (low 32)", + "mulhi": "dst = high 32 bits of dst * src", + "xor": "dst = dst ^ src", + "or": "dst = dst | src", + "rotl": "dst = rotl(dst, rot), rot in 1..31", + "rotr": "dst = rotr(dst, src & 31)", + "mad": "dst = src * src2 + dst", + "shfl": "dst = dst ^ (src of lane (lane ^ mask)), mask in {1,2,4,8,16}, within the 32-lane warp", + "load": "dst = dst ^ dataset[src & dataset.mask]", + "wload": "base = (src of lane 0 & dataset.mask) & ~31; dst = dst ^ dataset[base + lane] (warp-coalesced 128-byte load, lever b, only when --wide-frac > 0)" + }, + "dataset": { + "log2_words": 28, + "bytes": 1073741824, + "mask": "0x0fffffff", + "day": "2026-10-03", + "day_bytes": "6461792f323032362d31302d3033", + "day_words_from": "seed_words_from_bytes(day_bytes)", + "d0": "0x3067619f", + "d1": "0x3c269176", + "mode": "memory-hard", + "spec": "proto-metal/MEMHARD.md", + "key": ["0x3067619f", "0x3c269176", "0x84a03b03", "0xf8c63294", "0xff977c5b", "0xe60def3e", "0x63630141", "0xb8fbcb58"], + "key_derivation": "the 8 words of seed_words_from_bytes(day_bytes); d0, d1 are key[0], key[1]", + "cache": {"log2_words": 26, "bytes": 268435456, "line_words": 16, "segment_lines": 64, "segments": 65536, "block": "ChaCha12 core + feed-forward, rotations 16 12 8 7", "sigma": ["0x61707865", "0x3320646e", "0x79622d32", "0x6b206574"], "tag": ["0x49676e65", "0x756d4d48"], "chain": "in_j = prev_line ^ (sigma[0..3] || key[0..7] || seg || j || tag[0..1]); line_j = block(in_j); prev_0 = 0"}, + "mixer": {"draw": "SplitMix64 seeded with key[0] | key[1] << 32: rot[0..7] = 1 + next() % 31, mul[0..15] = low32(next()) | 1, rc[0..15] = low32(next())", "rot": [20, 20, 19, 4, 26, 3, 3, 27], "mul": ["0x42146205", "0x52cbe0fb", "0x7ecf4a03", "0x6728907f", "0xd81d9751", "0x132952c3", "0xf60de277", "0x05358035", "0xbaf6499d", "0xe4db9667", "0x3e98f45d", "0xd0004edd", "0x2691630d", "0x9beb3bcf", "0xab310379", "0x99cfb423"], "rc": ["0xbab68293", "0xcc162340", "0x6ce151cc", "0xe62b8997", "0xc9c80297", "0xf74a1654", "0x3d704af5", "0x3cf522b7", "0x2b9cac04", "0xa880ac10", "0x13e5dd1d", "0x6fc3e233", "0x2d83eeac", "0x9006e8bf", "0x2c4b5362", "0x31b49ee2"], "round": "for i in 0..15: s[i] = (s[i] ^ (rc[i] + (r+1) * 0x9E3779B9)) * mul[i]; then quarter rounds on columns (0,4,8,12) (1,5,9,13) (2,6,10,14) (3,7,11,15) with rot[0..3] and diagonals (0,5,10,15) (1,6,11,12) (2,7,8,13) (3,4,9,14) with rot[4..7]", "quarter_round": "a += b; d ^= a; d = rotl(d, r1); c += d; b ^= c; b = rotl(b, r2); a += b; d ^= a; d = rotl(d, r3); c += d; b ^= c; b = rotl(b, r4)"}, + "derive_len": 736, + "derive_attempt": 0, + "derive_fingerprint": "0x463535d01511350d", + "derive_op_mix": "add=969 sub=635 xor=985 mul=667 rot=633 xrot=649 addc=386 xorc=395 mulc=530 mulc2=264 andx=231 orx=280", + "derive_instrs_per_item": 6624, + "derive_gpu_ops_per_item": 10659, + "derive_chip_ops_per_item": 9992, + "derive_muls_per_item": 1461, + "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: s = P_r(s); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then s = P_8(s); item(t) = s; P_r is round program r below (c = the register the previous instruction wrote, s[0] first): add d += c; sub d -= c; xor d ^= c; mul d *= (c | 1); rot d = rotl(d, k) + c; xrot d = rotl(d ^ c, k); addc d += c + imm; xorc d ^= c ^ imm; mulc d = (d ^ c) * imm; mulc2 d = d * imm + c; andx d ^= (c & b); orx d += (c | b)", + "programs": [ + ["rot d=14 c=0 k=30", "mul d=15 c=14", "addc d=6 c=15 imm=0xd9ac4ac1", "xor d=3 c=6", "xrot d=2 c=3 k=17", "xor d=7 c=2", "sub d=10 c=7", "add d=11 c=10", "mul d=12 c=11", "xor d=4 c=12", "mulc d=5 c=4 imm=0xbce67fc5", "mulc d=1 c=5 imm=0xe0fb71bb", "sub d=5 c=1", "add d=3 c=5", "add d=10 c=3", "xrot d=7 c=10 k=5", "xor d=0 c=7", "xor d=10 c=0", "sub d=8 c=10", "add d=12 c=8", "add d=9 c=12", "xorc d=12 c=9 imm=0x891d0a72", "sub d=1 c=12", "xorc d=10 c=1 imm=0x12a9780c", "xrot d=2 c=10 k=27", "mul d=11 c=2", "add d=4 c=11", "andx d=7 c=4 b=5", "sub d=0 c=7", "add d=11 c=0", "sub d=8 c=11", "addc d=15 c=8 imm=0x8186dd7c", "xor d=9 c=15", "add d=12 c=9", "xorc d=5 c=12 imm=0x4a9b0a35", "mul d=4 c=5", "add d=9 c=4", "add d=12 c=9", "mulc d=10 c=12 imm=0xe3385ffd", "sub d=11 c=10", "sub d=9 c=11", "addc d=13 c=9 imm=0xb72698db", "andx d=1 c=13 b=2", "mulc d=10 c=1 imm=0xcf3e22d7", "mulc d=12 c=10 imm=0xb28b0e19", "add d=9 c=12", "xor d=1 c=9", "mul d=2 c=1", "xor d=7 c=2", "andx d=8 c=7 b=12", "add d=6 c=8", "mulc d=15 c=6 imm=0xee66c1cf", "sub d=4 c=15", "add d=3 c=4", "mulc2 d=12 c=3 imm=0xd3452a43", "xor d=0 c=12", "mul d=1 c=0", "addc d=12 c=1 imm=0xce692008", "andx d=6 c=12 b=5", "andx d=13 c=6 b=15", "xor d=7 c=13", "add d=9 c=7", "mul d=12 c=9", "sub d=2 c=12", "rot d=15 c=2 k=25", "xor d=6 c=15", "sub d=13 c=6", "orx d=7 c=13 b=15", "mulc2 d=15 c=7 imm=0x3bb17ced", "mul d=1 c=15", "rot d=6 c=1 k=14", "mulc d=0 c=6 imm=0xbb828911", "addc d=3 c=0 imm=0x6593f64c", "xorc d=5 c=3 imm=0xff45cfdd", "xor d=4 c=5", "mul d=7 c=4", "xor d=9 c=7", "addc d=11 c=9 imm=0x1618a409", "mul d=2 c=11", "mulc d=15 c=2 imm=0x60c6efed", "xrot d=11 c=15 k=20", "xorc d=3 c=11 imm=0x6961fd5a", "xor d=6 c=3", "add d=2 c=6", "xrot d=0 c=2 k=19", "mul d=5 c=0", "add d=8 c=5", "xor d=9 c=8", "xrot d=2 c=9 k=7", "xor d=0 c=2", "xor d=10 c=0", "add d=1 c=10", "add d=11 c=1", "add d=9 c=11", "mul d=10 c=9", "rot d=2 c=10 k=3", "xor d=5 c=2", "add d=0 c=5", "xrot d=2 c=0 k=25", "rot d=0 c=2 k=18", "rot d=1 c=0 k=15", "mul d=8 c=1", "sub d=2 c=8", "xrot d=5 c=2 k=7", "xor d=11 c=5", "xor d=8 c=11", "xorc d=3 c=8 imm=0xe6be7c09", "orx d=4 c=3 b=13", "xrot d=2 c=4 k=13", "xrot d=15 c=2 k=9", "rot d=4 c=15 k=19", "rot d=10 c=4 k=25", "mul d=11 c=10", "sub d=7 c=11", "andx d=2 c=7 b=4", "rot d=1 c=2 k=14", "mul d=3 c=1", "mulc2 d=0 c=3 imm=0xd9de6c6d", "mulc d=12 c=0 imm=0xe3e5b763", "mulc d=2 c=12 imm=0xa90198ef", "xrot d=6 c=2 k=23", "mul d=1 c=6", "andx d=2 c=1 b=5", "sub d=12 c=2", "add d=14 c=12", "orx d=8 c=14 b=12", "sub d=5 c=8", "sub d=12 c=5", "xor d=5 c=12", "mul d=2 c=5", "add d=0 c=2", "mul d=9 c=0", "rot d=5 c=9 k=8", "mulc d=0 c=5 imm=0x1881452d", "addc d=10 c=0 imm=0x0da78a3e", "sub d=7 c=10", "mulc d=13 c=7 imm=0x97232879", "mulc d=11 c=13 imm=0xb8dae9a5", "xrot d=13 c=11 k=8", "add d=6 c=13", "mul d=3 c=6", "xrot d=6 c=3 k=31", "xor d=4 c=6", "xorc d=9 c=4 imm=0x6b4c4741", "rot d=15 c=9 k=19", "xorc d=8 c=15 imm=0x756f820d", "xrot d=1 c=8 k=10", "sub d=6 c=1", "rot d=15 c=6 k=29", "xrot d=9 c=15 k=31", "mul d=1 c=9", "xor d=5 c=1", "mul d=11 c=5", "addc d=12 c=11 imm=0xee00292d", "add d=1 c=12", "xorc d=12 c=1 imm=0x9c50a8ac", "mul d=13 c=12", "xor d=6 c=13", "mul d=10 c=6", "xor d=5 c=10", "sub d=8 c=5", "mulc d=0 c=8 imm=0xc53caea3", "mul d=12 c=0", "sub d=9 c=12", "sub d=11 c=9", "rot d=5 c=11 k=15", "xrot d=13 c=5 k=21", "xorc d=2 c=13 imm=0x84b1978f", "add d=14 c=2", "xorc d=3 c=14 imm=0x05a8c594", "addc d=13 c=3 imm=0x54e905a7", "xor d=11 c=13", "sub d=8 c=11", "xorc d=7 c=8 imm=0x2244941f", "mulc2 d=1 c=7 imm=0xed0aecc5", "mul d=7 c=1", "mulc d=10 c=7 imm=0x4b837a0b", "sub d=12 c=10", "sub d=2 c=12", "mul d=3 c=2", "mul d=7 c=3", "xorc d=12 c=7 imm=0x5ffe7c51", "andx d=15 c=12 b=6", "rot d=0 c=15 k=4", "rot d=2 c=0 k=12", "sub d=4 c=2", "sub d=9 c=4", "xor d=15 c=9", "rot d=14 c=15 k=15", "xrot d=1 c=14 k=4", "rot d=8 c=1 k=12", "mul d=2 c=8", "xorc d=0 c=2 imm=0x24e25306", "xor d=13 c=0", "rot d=7 c=13 k=14", "add d=12 c=7", "andx d=2 c=12 b=7", "rot d=9 c=2 k=4", "mul d=8 c=9", "andx d=3 c=8 b=5", "mulc d=8 c=3 imm=0x6cea4323", "add d=13 c=8", "mul d=9 c=13", "mul d=15 c=9", "xor d=1 c=15", "sub d=7 c=1", "addc d=2 c=7 imm=0x188c833f", "addc d=14 c=2 imm=0xc33e117a", "xorc d=1 c=14 imm=0x97c1cf13", "xrot d=15 c=1 k=10", "xrot d=13 c=15 k=25", "add d=9 c=13", "rot d=3 c=9 k=19", "andx d=7 c=3 b=15", "add d=13 c=7", "rot d=0 c=13 k=24", "xor d=15 c=0", "xorc d=11 c=15 imm=0x8046a7c8", "mul d=7 c=11", "xor d=1 c=7", "xor d=3 c=1", "add d=6 c=3", "xor d=11 c=6", "orx d=9 c=11 b=14", "xor d=10 c=9", "sub d=7 c=10", "add d=4 c=7", "addc d=13 c=4 imm=0x0d609a06", "orx d=3 c=13 b=11", "orx d=8 c=3 b=6", "mul d=13 c=8", "andx d=7 c=13 b=6", "add d=14 c=7", "xrot d=5 c=14 k=17", "andx d=14 c=5 b=3", "orx d=11 c=14 b=0", "xor d=4 c=11", "xorc d=3 c=4 imm=0x518deaef", "mul d=8 c=3", "xrot d=13 c=8 k=25", "rot d=3 c=13 k=3", "mulc d=15 c=3 imm=0xf612eda3", "xrot d=7 c=15 k=8", "mulc2 d=5 c=7 imm=0x2836c587", "mulc2 d=14 c=5 imm=0x97e56ca5", "xor d=9 c=14", "xrot d=15 c=9 k=23", "sub d=0 c=15", "xor d=6 c=0", "andx d=4 c=6 b=15", "xor d=7 c=4", "sub d=1 c=7", "mul d=5 c=1", "xor d=14 c=5", "mulc d=15 c=14 imm=0x8744e455", "add d=9 c=15", "rot d=3 c=9 k=1", "mulc2 d=8 c=3 imm=0x973da983", "xor d=11 c=8", "xor d=9 c=11", "mul d=8 c=9", "addc d=13 c=8 imm=0x57db65d6", "mul d=15 c=13", "sub d=14 c=15", "mulc d=1 c=14 imm=0xb9f9718f", "xrot d=7 c=1 k=31", "mulc d=9 c=7 imm=0x640547ef", "add d=11 c=9", "rot d=3 c=11 k=10", "mulc d=0 c=3 imm=0xb284d74f", "add d=4 c=0", "orx d=15 c=4 b=11", "addc d=9 c=15 imm=0xf4848271", "mul d=14 c=9", "addc d=7 c=14 imm=0x9cc79f25", "add d=3 c=7", "mulc d=15 c=3 imm=0x89e86eaf", "addc d=5 c=15 imm=0xd1058324", "mulc d=6 c=5 imm=0x3a95ce61", "sub d=14 c=6", "xor d=5 c=14", "rot d=14 c=5 k=29", "rot d=12 c=14 k=15", "add d=11 c=12", "mul d=8 c=11", "mul d=15 c=8", "xrot d=4 c=15 k=23", "xor d=13 c=4", "xor d=2 c=13", "mulc d=4 c=2 imm=0x55b5ed41", "xor d=9 c=4", "addc d=14 c=9 imm=0x4577e106", "mul d=12 c=14", "andx d=7 c=12 b=8", "rot d=0 c=7 k=24", "addc d=5 c=0 imm=0xe4b59af5", "xorc d=6 c=5 imm=0xc95684a6", "rot d=2 c=6 k=15", "mul d=3 c=2", "mul d=9 c=3", "andx d=2 c=9 b=15", "add d=1 c=2", "xrot d=8 c=1 k=14", "mulc d=10 c=8 imm=0xfc3cdd57", "sub d=2 c=10", "orx d=6 c=2 b=1", "xor d=7 c=6", "xor d=12 c=7", "xor d=9 c=12", "xorc d=13 c=9 imm=0x7556231d", "xor d=3 c=13", "orx d=0 c=3 b=6", "xorc d=12 c=0 imm=0x58f380ad", "xorc d=15 c=12 imm=0xcf2c5207", "rot d=14 c=15 k=8", "mul d=15 c=14", "xor d=6 c=15", "mul d=1 c=6", "andx d=13 c=1 b=7", "xor d=6 c=13", "mul d=9 c=6", "add d=10 c=9", "andx d=15 c=10 b=9", "mul d=8 c=15", "sub d=3 c=8", "mul d=6 c=3", "add d=12 c=6", "add d=8 c=12", "xor d=14 c=8", "add d=13 c=14", "addc d=1 c=13 imm=0xc57bd1c4", "rot d=3 c=1 k=22", "add d=13 c=3", "xorc d=3 c=13 imm=0x53c4357d", "rot d=1 c=3 k=19", "xrot d=12 c=1 k=19", "mulc2 d=14 c=12 imm=0xb9e6c0b1", "sub d=8 c=14", "sub d=5 c=8", "xor d=0 c=5", "mulc d=11 c=0 imm=0xf434e1ef", "mulc d=5 c=11 imm=0x9121d805", "add d=1 c=5", "orx d=11 c=1 b=7", "xor d=8 c=11", "mul d=7 c=8", "xorc d=12 c=7 imm=0x367f3a0f", "xorc d=10 c=12 imm=0x988ad558", "xorc d=6 c=10 imm=0xc31a2c66", "addc d=11 c=6 imm=0xf44c1a7d", "andx d=15 c=11 b=1", "xrot d=2 c=15 k=14", "rot d=3 c=2 k=3", "xor d=9 c=3", "mul d=1 c=9", "mulc d=5 c=1 imm=0x05e8dea9", "orx d=12 c=5 b=11", "add d=13 c=12", "sub d=5 c=13", "xor d=10 c=5", "mulc d=4 c=10 imm=0xa49163af", "addc d=12 c=4 imm=0xa8c7865d", "mul d=1 c=12", "xrot d=14 c=1 k=28", "sub d=3 c=14", "mulc d=15 c=3 imm=0x4481a6a5", "xrot d=12 c=15 k=8", "sub d=3 c=12", "mulc d=9 c=3 imm=0x0a8015a5", "xor d=11 c=9", "mul d=9 c=11", "sub d=14 c=9", "mul d=9 c=14", "mul d=7 c=9", "mulc2 d=1 c=7 imm=0x102d9b67", "add d=12 c=1", "mul d=14 c=12", "xor d=6 c=14", "addc d=0 c=6 imm=0x633908b4", "sub d=6 c=0", "xrot d=0 c=6 k=26", "mulc2 d=11 c=0 imm=0xa3cfd0bf", "rot d=14 c=11 k=13", "xor d=3 c=14", "rot d=6 c=3 k=15", "xorc d=8 c=6 imm=0xd47945b7", "xor d=11 c=8", "add d=14 c=11", "add d=5 c=14", "rot d=12 c=5 k=2", "mul d=10 c=12", "mul d=1 c=10", "add d=3 c=1", "xrot d=9 c=3 k=2", "add d=2 c=9", "xor d=4 c=2", "rot d=13 c=4 k=20", "sub d=11 c=13", "add d=8 c=11", "addc d=7 c=8 imm=0xf15c3fd7", "xor d=9 c=7", "xrot d=8 c=9 k=29", "mulc d=7 c=8 imm=0xea581ad3", "xrot d=14 c=7 k=31", "mulc d=4 c=14 imm=0x7cfc0ccf", "xrot d=1 c=4 k=26", "sub d=4 c=1", "xorc d=2 c=4 imm=0x63b7d83f", "xor d=10 c=2", "xrot d=13 c=10 k=13", "xorc d=15 c=13 imm=0x5e3fbc23", "xrot d=7 c=15 k=27", "mulc2 d=4 c=7 imm=0x0ab4b509", "mulc2 d=7 c=4 imm=0xcd845e5d", "rot d=3 c=7 k=11", "xor d=15 c=3", "xrot d=6 c=15 k=31", "xrot d=12 c=6 k=19", "addc d=6 c=12 imm=0xc5e9e33e", "xorc d=13 c=6 imm=0x0ee62cbb", "xrot d=8 c=13 k=9", "mul d=0 c=8", "mul d=7 c=0", "xor d=10 c=7", "add d=13 c=10", "addc d=7 c=13 imm=0xb255fa09", "add d=14 c=7", "rot d=6 c=14 k=24", "mul d=3 c=6", "mul d=9 c=3", "mulc d=3 c=9 imm=0x833bda21", "sub d=12 c=3", "xrot d=6 c=12 k=10", "rot d=9 c=6 k=25", "sub d=12 c=9", "add d=11 c=12", "xrot d=1 c=11 k=24", "xor d=14 c=1", "orx d=2 c=14 b=9", "mulc d=13 c=2 imm=0x1bbb3967", "xor d=0 c=13", "xorc d=13 c=0 imm=0x2109f216", "mul d=8 c=13", "rot d=4 c=8 k=23", "mulc2 d=9 c=4 imm=0xcdf20df5", "mulc2 d=0 c=9 imm=0x97687fa1", "xor d=10 c=0", "add d=2 c=10", "xor d=11 c=2", "mul d=12 c=11", "xrot d=4 c=12 k=25", "rot d=10 c=4 k=28", "xor d=0 c=10", "sub d=13 c=0", "rot d=2 c=13 k=12", "mul d=12 c=2", "rot d=7 c=12 k=13", "xorc d=8 c=7 imm=0x250900e2", "xrot d=3 c=8 k=27", "addc d=10 c=3 imm=0xa18e04b0", "mulc d=12 c=10 imm=0x7963ce7b", "andx d=1 c=12 b=6", "rot d=13 c=1 k=3", "rot d=3 c=13 k=1", "sub d=14 c=3", "xor d=10 c=14", "xor d=1 c=10", "sub d=5 c=1", "xrot d=2 c=5 k=12", "mul d=6 c=2", "sub d=11 c=6", "xorc d=9 c=11 imm=0x69d4cac1", "rot d=3 c=9 k=15", "add d=9 c=3", "mulc d=14 c=9 imm=0x00adfa7f", "mulc d=9 c=14 imm=0x698e49f7", "andx d=14 c=9 b=6", "sub d=4 c=14", "xorc d=5 c=4 imm=0x558a07ee", "add d=8 c=5", "mulc2 d=9 c=8 imm=0xa25a44b5", "rot d=13 c=9 k=12", "sub d=1 c=13", "xrot d=5 c=1 k=2", "xor d=9 c=5", "addc d=15 c=9 imm=0x75af4931", "add d=9 c=15", "xor d=6 c=9", "mul d=9 c=6", "mulc d=7 c=9 imm=0x14d500bb", "mul d=4 c=7", "rot d=7 c=4 k=1", "mul d=9 c=7", "xor d=10 c=9", "add d=12 c=10", "mulc2 d=2 c=12 imm=0x114aee2d", "xor d=0 c=2", "add d=10 c=0", "mul d=8 c=10", "mulc d=14 c=8 imm=0x9aaa1821", "xor d=3 c=14", "xrot d=1 c=3 k=14", "add d=0 c=1", "mul d=14 c=0", "xrot d=11 c=14 k=2", "xor d=1 c=11", "add d=3 c=1", "xrot d=5 c=3 k=28", "xor d=12 c=5", "xorc d=10 c=12 imm=0xcf112b3e", "rot d=12 c=10 k=17", "addc d=8 c=12 imm=0xa0423d55", "sub d=12 c=8", "sub d=4 c=12", "sub d=14 c=4", "add d=0 c=14", "mul d=2 c=0", "xor d=8 c=2", "xor d=10 c=8", "addc d=4 c=10 imm=0x0e0a85c9", "addc d=2 c=4 imm=0x5aa11787", "addc d=9 c=2 imm=0xbc33a8ac", "rot d=1 c=9 k=2", "mulc d=11 c=1 imm=0x5ab0da6d", "mulc d=10 c=11 imm=0xfa4adf2d", "sub d=2 c=10", "sub d=10 c=2", "xor d=2 c=10", "add d=1 c=2", "rot d=6 c=1 k=6", "add d=3 c=6", "xorc d=9 c=3 imm=0xc19b7470", "mul d=12 c=9", "orx d=14 c=12 b=15", "mulc d=5 c=14 imm=0x6790286f", "xor d=15 c=5", "sub d=10 c=15", "orx d=13 c=10 b=3", "mul d=2 c=13", "orx d=7 c=2 b=13", "add d=2 c=7", "add d=11 c=2", "mul d=1 c=11", "addc d=13 c=1 imm=0x9c1bdb18", "andx d=5 c=13 b=1", "add d=13 c=5", "xor d=14 c=13", "orx d=0 c=14 b=13", "xrot d=6 c=0 k=31", "add d=7 c=6", "andx d=9 c=7 b=0", "mulc d=15 c=9 imm=0x63348941", "xor d=13 c=15", "add d=10 c=13", "mulc d=14 c=10 imm=0x04d19b2f", "mul d=2 c=14", "sub d=13 c=2", "sub d=15 c=13", "orx d=6 c=15 b=12", "addc d=14 c=6 imm=0x331d9e99", "rot d=1 c=14 k=24", "mulc2 d=2 c=1 imm=0xf02184e1", "add d=12 c=2", "mulc d=4 c=12 imm=0xa250e449", "mul d=2 c=4", "xorc d=11 c=2 imm=0x6c4530fd", "rot d=2 c=11 k=10", "mul d=6 c=2", "orx d=0 c=6 b=7", "mulc d=6 c=0 imm=0x678da095", "xrot d=14 c=6 k=30", "mulc d=3 c=14 imm=0x3b065e11", "orx d=8 c=3 b=13", "addc d=0 c=8 imm=0xd1214021", "sub d=12 c=0", "xorc d=4 c=12 imm=0x2ae728ad", "xrot d=0 c=4 k=11", "rot d=2 c=0 k=23", "xrot d=4 c=2 k=19", "mul d=15 c=4", "xrot d=8 c=15 k=4", "mulc d=12 c=8 imm=0x32cf5655", "mulc d=7 c=12 imm=0xc97ab55f", "mul d=15 c=7", "mulc2 d=13 c=15 imm=0xc3424c27", "mul d=3 c=13", "mulc2 d=13 c=3 imm=0x8b172941", "rot d=5 c=13 k=5", "xor d=6 c=5", "mulc d=4 c=6 imm=0xd1833353", "xrot d=5 c=4 k=10", "rot d=11 c=5 k=4", "mulc d=7 c=11 imm=0x81b253db", "add d=11 c=7", "rot d=8 c=11 k=30", "xor d=6 c=8", "rot d=5 c=6 k=30", "add d=1 c=5", "addc d=10 c=1 imm=0xc388fc9c", "xor d=9 c=10", "orx d=7 c=9 b=10", "add d=11 c=7", "sub d=14 c=11", "xrot d=15 c=14 k=21", "sub d=11 c=15", "xor d=8 c=11", "xor d=6 c=8", "xor d=13 c=6", "orx d=7 c=13 b=4", "xor d=9 c=7", "add d=0 c=9", "add d=3 c=0", "xrot d=5 c=3 k=3", "mulc2 d=8 c=5 imm=0x229aeb39", "sub d=1 c=8", "add d=0 c=1", "orx d=13 c=0 b=7", "mulc d=15 c=13 imm=0x878a1a07", "add d=12 c=15", "xor d=14 c=12", "sub d=13 c=14", "xorc d=10 c=13 imm=0x3937b9cb", "rot d=3 c=10 k=29", "addc d=1 c=3 imm=0x1698a660", "mulc d=2 c=1 imm=0x20fad729", "xorc d=5 c=2 imm=0xe9e6778a", "addc d=10 c=5 imm=0xdaa6b74d", "mul d=3 c=10", "orx d=1 c=3 b=6", "mulc2 d=15 c=1 imm=0xc0ee8651", "addc d=2 c=15 imm=0xbf9a18d6", "addc d=6 c=2 imm=0xe0a7457e", "xor d=10 c=6", "xor d=5 c=10", "xorc d=4 c=5 imm=0x2b72d900", "xrot d=5 c=4 k=2", "xrot d=4 c=5 k=7", "rot d=10 c=4 k=13", "orx d=3 c=10 b=4", "orx d=9 c=3 b=2", "xor d=10 c=9", "andx d=13 c=10 b=8", "rot d=8 c=13 k=11", "orx d=4 c=8 b=3", "xrot d=15 c=4 k=21", "xor d=4 c=15", "xor d=1 c=4", "addc d=11 c=1 imm=0x0fb942e8", "orx d=9 c=11 b=0", "mulc d=10 c=9 imm=0xf4ac3c9b", "xrot d=8 c=10 k=21", "xrot d=15 c=8 k=25", "xrot d=12 c=15 k=31", "mul d=1 c=12", "addc d=15 c=1 imm=0xad836925", "rot d=4 c=15 k=29", "xrot d=1 c=4 k=2", "xor d=5 c=1", "sub d=6 c=5", "sub d=10 c=6", "mul d=9 c=10", "rot d=5 c=9 k=13", "xorc d=7 c=5 imm=0xa8c7112d", "orx d=15 c=7 b=2", "rot d=11 c=15 k=5", "orx d=6 c=11 b=5", "xrot d=12 c=6 k=25", "xorc d=6 c=12 imm=0xa8a8a54f", "add d=13 c=6", "mul d=1 c=13", "mul d=8 c=1", "add d=12 c=8", "mulc d=6 c=12 imm=0x138d287f", "xrot d=5 c=6 k=4", "rot d=13 c=5 k=19", "rot d=4 c=13 k=18", "addc d=13 c=4 imm=0x47783811", "mulc2 d=3 c=13 imm=0x3cb23963", "sub d=14 c=3", "add d=10 c=14", "xor d=2 c=10", "xorc d=12 c=2 imm=0x70bcebd6", "add d=3 c=12", "rot d=8 c=3 k=25", "sub d=9 c=8", "xor d=12 c=9", "xrot d=0 c=12 k=7", "xrot d=6 c=0 k=19", "xor d=2 c=6", "rot d=11 c=2 k=4", "mulc d=7 c=11 imm=0x991f0089", "sub d=3 c=7", "rot d=10 c=3 k=12", "xor d=6 c=10", "add d=12 c=6", "sub d=0 c=12", "xor d=5 c=0", "rot d=2 c=5 k=5", "sub d=3 c=2", "addc d=0 c=3 imm=0x84500e17", "xor d=1 c=0", "mul d=15 c=1", "add d=6 c=15", "rot d=5 c=6 k=1", "xorc d=13 c=5 imm=0x32e6a4b0", "sub d=1 c=13", "add d=0 c=1", "add d=7 c=0", "mulc d=15 c=7 imm=0xde51d36b", "add d=12 c=15", "xorc d=11 c=12 imm=0x085d7e04", "xrot d=7 c=11 k=29", "rot d=9 c=7 k=10", "xor d=3 c=9", "xorc d=1 c=3 imm=0xe20c8a44", "add d=6 c=1", "xor d=0 c=6", "rot d=11 c=0 k=29", "xrot d=13 c=11 k=3", "mulc2 d=4 c=13 imm=0x53fa87a7", "xrot d=15 c=4 k=13", "xorc d=13 c=15 imm=0xbaf52e15", "rot d=1 c=13 k=28", "xorc d=11 c=1 imm=0x16b5024a", "addc d=6 c=11 imm=0x712948fe", "add d=15 c=6", "mul d=10 c=15", "sub d=0 c=10", "xor d=11 c=0", "orx d=12 c=11 b=1", "sub d=14 c=12", "sub d=0 c=14", "xor d=9 c=0", "xrot d=15 c=9 k=1", "mulc d=14 c=15 imm=0x97b15c85", "sub d=8 c=14"], + ["xrot d=14 c=0 k=17", "mulc d=12 c=14 imm=0xa6ee330d", "add d=2 c=12", "mulc2 d=1 c=2 imm=0x0ce4bf05", "rot d=5 c=1 k=20", "rot d=15 c=5 k=15", "xor d=7 c=15", "sub d=2 c=7", "xrot d=0 c=2 k=17", "add d=3 c=0", "rot d=9 c=3 k=23", "sub d=5 c=9", "sub d=4 c=5", "addc d=13 c=4 imm=0x1663e8c2", "xorc d=11 c=13 imm=0x6188ab5c", "mul d=1 c=11", "sub d=13 c=1", "add d=10 c=13", "sub d=7 c=10", "mulc2 d=11 c=7 imm=0x0909c327", "xor d=8 c=11", "xorc d=7 c=8 imm=0x82d87f23", "mulc d=13 c=7 imm=0x5c48c9c7", "xor d=1 c=13", "xor d=3 c=1", "xrot d=2 c=3 k=8", "rot d=8 c=2 k=1", "xrot d=2 c=8 k=22", "mulc d=7 c=2 imm=0x8d7cb2a9", "sub d=6 c=7", "mulc d=8 c=6 imm=0xac42e56d", "xor d=15 c=8", "andx d=2 c=15 b=8", "add d=14 c=2", "add d=5 c=14", "mul d=10 c=5", "addc d=13 c=10 imm=0xded20149", "xor d=4 c=13", "andx d=14 c=4 b=10", "addc d=9 c=14 imm=0xe78db039", "mul d=10 c=9", "xorc d=8 c=10 imm=0x042fcfe9", "add d=2 c=8", "sub d=7 c=2", "xor d=9 c=7", "xor d=8 c=9", "sub d=0 c=8", "xrot d=13 c=0 k=2", "xrot d=4 c=13 k=23", "sub d=3 c=4", "xor d=11 c=3", "mul d=1 c=11", "sub d=14 c=1", "mul d=3 c=14", "rot d=10 c=3 k=31", "add d=11 c=10", "sub d=7 c=11", "orx d=15 c=7 b=2", "xorc d=12 c=15 imm=0x57a179c1", "sub d=8 c=12", "xorc d=1 c=8 imm=0xcb23a9b1", "rot d=2 c=1 k=7", "sub d=4 c=2", "xorc d=14 c=4 imm=0x076e00fd", "xrot d=5 c=14 k=3", "rot d=9 c=5 k=22", "add d=6 c=9", "xrot d=13 c=6 k=2", "add d=10 c=13", "rot d=9 c=10 k=22", "xor d=11 c=9", "xor d=15 c=11", "add d=2 c=15", "mulc d=14 c=2 imm=0x7017bcdf", "sub d=9 c=14", "xrot d=12 c=9 k=11", "xor d=3 c=12", "orx d=8 c=3 b=0", "xorc d=13 c=8 imm=0xb6656cfe", "xorc d=11 c=13 imm=0x118ac00b", "mulc d=8 c=11 imm=0x3da3f311", "mulc d=4 c=8 imm=0x1d6af721", "xor d=12 c=4", "xrot d=10 c=12 k=14", "mul d=11 c=10", "mul d=0 c=11", "mul d=11 c=0", "xor d=4 c=11", "xor d=14 c=4", "rot d=11 c=14 k=27", "andx d=2 c=11 b=5", "sub d=11 c=2", "mul d=10 c=11", "rot d=9 c=10 k=21", "xor d=7 c=9", "addc d=2 c=7 imm=0x72228b15", "andx d=13 c=2 b=1", "rot d=7 c=13 k=25", "mulc d=4 c=7 imm=0x12e611db", "andx d=15 c=4 b=2", "orx d=1 c=15 b=10", "xor d=14 c=1", "xorc d=2 c=14 imm=0x4b034585", "add d=1 c=2", "xorc d=13 c=1 imm=0x03c7fc79", "andx d=9 c=13 b=7", "addc d=11 c=9 imm=0xf9b5cff0", "xrot d=10 c=11 k=4", "mulc2 d=11 c=10 imm=0x5aaa11f7", "sub d=2 c=11", "xor d=1 c=2", "xrot d=5 c=1 k=30", "xor d=12 c=5", "andx d=8 c=12 b=15", "mulc2 d=4 c=8 imm=0x32c2f11b", "mulc d=8 c=4 imm=0x8c725c57", "addc d=3 c=8 imm=0x16517d85", "xor d=2 c=3", "rot d=0 c=2 k=15", "rot d=2 c=0 k=9", "sub d=8 c=2", "addc d=14 c=8 imm=0x3d1690b9", "xorc d=8 c=14 imm=0xfd404591", "rot d=5 c=8 k=14", "xrot d=15 c=5 k=28", "xor d=7 c=15", "xorc d=13 c=7 imm=0x1c120483", "andx d=2 c=13 b=14", "xor d=6 c=2", "mulc d=10 c=6 imm=0x4fd29dfd", "add d=3 c=10", "xor d=10 c=3", "xrot d=14 c=10 k=25", "mulc2 d=2 c=14 imm=0x8eebc38d", "sub d=5 c=2", "xrot d=14 c=5 k=7", "sub d=9 c=14", "mulc2 d=14 c=9 imm=0xea014a2f", "andx d=9 c=14 b=12", "xor d=8 c=9", "mulc2 d=10 c=8 imm=0xdffcece9", "sub d=11 c=10", "xor d=9 c=11", "mulc d=5 c=9 imm=0xb0f7c285", "xor d=2 c=5", "xor d=7 c=2", "xor d=11 c=7", "mul d=3 c=11", "orx d=8 c=3 b=6", "xorc d=0 c=8 imm=0x0be40c24", "rot d=1 c=0 k=14", "sub d=9 c=1", "add d=4 c=9", "sub d=12 c=4", "add d=8 c=12", "xor d=13 c=8", "sub d=8 c=13", "add d=15 c=8", "xrot d=10 c=15 k=11", "xor d=4 c=10", "mul d=0 c=4", "add d=3 c=0", "add d=12 c=3", "xorc d=10 c=12 imm=0x7646e0a4", "mul d=4 c=10", "xor d=8 c=4", "rot d=7 c=8 k=13", "andx d=6 c=7 b=15", "orx d=1 c=6 b=0", "rot d=3 c=1 k=27", "xor d=12 c=3", "mulc2 d=1 c=12 imm=0xe296889d", "rot d=7 c=1 k=6", "add d=5 c=7", "mulc d=2 c=5 imm=0xe5c22b4f", "addc d=15 c=2 imm=0x31507e5e", "add d=3 c=15", "addc d=1 c=3 imm=0xa943282b", "andx d=4 c=1 b=11", "add d=10 c=4", "andx d=4 c=10 b=5", "add d=1 c=4", "add d=6 c=1", "xor d=13 c=6", "xor d=8 c=13", "mulc d=2 c=8 imm=0x6ff7b6c9", "orx d=13 c=2 b=5", "xorc d=12 c=13 imm=0xd6ce983f", "xor d=4 c=12", "mul d=3 c=4", "orx d=10 c=3 b=7", "add d=2 c=10", "andx d=14 c=2 b=7", "mulc2 d=5 c=14 imm=0xa23d13c7", "addc d=8 c=5 imm=0xeba888dc", "xor d=15 c=8", "xorc d=2 c=15 imm=0x40a0fb0a", "rot d=9 c=2 k=7", "xor d=0 c=9", "sub d=12 c=0", "mul d=11 c=12", "addc d=5 c=11 imm=0x56f2d848", "andx d=14 c=5 b=15", "mulc d=7 c=14 imm=0x1897fa79", "mulc d=14 c=7 imm=0x0baf4813", "mul d=15 c=14", "andx d=3 c=15 b=7", "sub d=10 c=3", "xor d=4 c=10", "mulc d=11 c=4 imm=0x7df27859", "mul d=7 c=11", "addc d=4 c=7 imm=0x3fc46fd8", "rot d=6 c=4 k=11", "xor d=2 c=6", "add d=13 c=2", "sub d=12 c=13", "xrot d=5 c=12 k=18", "andx d=15 c=5 b=12", "mul d=11 c=15", "add d=8 c=11", "mul d=14 c=8", "add d=8 c=14", "sub d=1 c=8", "rot d=10 c=1 k=18", "xor d=4 c=10", "add d=2 c=4", "mul d=11 c=2", "mul d=1 c=11", "add d=13 c=1", "sub d=4 c=13", "mul d=9 c=4", "sub d=6 c=9", "mulc d=3 c=6 imm=0x6d6488c7", "orx d=7 c=3 b=10", "xor d=12 c=7", "sub d=14 c=12", "xor d=4 c=14", "add d=10 c=4", "add d=7 c=10", "orx d=15 c=7 b=2", "rot d=1 c=15 k=8", "add d=5 c=1", "rot d=12 c=5 k=1", "mul d=3 c=12", "xorc d=6 c=3 imm=0xada02894", "sub d=3 c=6", "xrot d=6 c=3 k=16", "xorc d=5 c=6 imm=0xeafee980", "xorc d=8 c=5 imm=0x00dbe804", "xrot d=10 c=8 k=5", "mul d=2 c=10", "xrot d=6 c=2 k=31", "xrot d=4 c=6 k=28", "mulc2 d=7 c=4 imm=0x16a2fd0b", "sub d=11 c=7", "xrot d=2 c=11 k=20", "andx d=1 c=2 b=12", "mul d=3 c=1", "mul d=12 c=3", "xor d=15 c=12", "add d=12 c=15", "sub d=10 c=12", "add d=3 c=10", "add d=13 c=3", "rot d=4 c=13 k=14", "xrot d=10 c=4 k=2", "add d=8 c=10", "xor d=9 c=8", "xrot d=7 c=9 k=11", "sub d=9 c=7", "sub d=11 c=9", "sub d=5 c=11", "mulc2 d=3 c=5 imm=0x7d5e197d", "mul d=9 c=3", "rot d=14 c=9 k=8", "addc d=11 c=14 imm=0xa3dd86d5", "xor d=8 c=11", "sub d=2 c=8", "mul d=5 c=2", "xor d=1 c=5", "xor d=12 c=1", "xrot d=4 c=12 k=27", "rot d=8 c=4 k=14", "orx d=4 c=8 b=15", "xrot d=3 c=4 k=2", "xor d=2 c=3", "rot d=9 c=2 k=12", "xorc d=12 c=9 imm=0x33fd48cc", "mul d=13 c=12", "add d=3 c=13", "sub d=8 c=3", "andx d=10 c=8 b=7", "xorc d=15 c=10 imm=0xd3ffcb52", "addc d=3 c=15 imm=0xd8cfcd30", "mulc d=0 c=3 imm=0x013282f1", "add d=8 c=0", "andx d=4 c=8 b=7", "xorc d=15 c=4 imm=0xd8b2262c", "xor d=4 c=15", "xor d=0 c=4", "add d=14 c=0", "add d=1 c=14", "xor d=0 c=1", "add d=14 c=0", "xor d=4 c=14", "mul d=11 c=4", "add d=7 c=11", "mulc d=2 c=7 imm=0xb04d6739", "xor d=12 c=2", "sub d=15 c=12", "sub d=9 c=15", "mulc d=15 c=9 imm=0x806e4757", "xrot d=2 c=15 k=26", "xorc d=4 c=2 imm=0x5da3ddfa", "mul d=14 c=4", "xor d=1 c=14", "rot d=14 c=1 k=4", "mul d=15 c=14", "mulc d=4 c=15 imm=0x8339a46b", "sub d=13 c=4", "addc d=1 c=13 imm=0x89cedf01", "andx d=15 c=1 b=2", "sub d=5 c=15", "xor d=4 c=5", "xorc d=0 c=4 imm=0x659daf23", "xrot d=9 c=0 k=31", "mul d=4 c=9", "xor d=3 c=4", "rot d=2 c=3 k=25", "mul d=1 c=2", "xrot d=2 c=1 k=28", "mul d=1 c=2", "xrot d=10 c=1 k=18", "xrot d=2 c=10 k=22", "rot d=12 c=2 k=2", "xorc d=6 c=12 imm=0xf3967aef", "xor d=5 c=6", "orx d=11 c=5 b=3", "sub d=13 c=11", "orx d=2 c=13 b=12", "xor d=10 c=2", "sub d=7 c=10", "xrot d=2 c=7 k=1", "add d=1 c=2", "rot d=7 c=1 k=2", "xor d=10 c=7", "andx d=11 c=10 b=12", "xrot d=3 c=11 k=22", "add d=12 c=3", "xorc d=8 c=12 imm=0xd1018d15", "xor d=6 c=8", "mulc2 d=13 c=6 imm=0xad1ff569", "mulc2 d=9 c=13 imm=0xa7473da7", "xor d=4 c=9", "mul d=2 c=4", "xrot d=7 c=2 k=7", "xrot d=9 c=7 k=2", "mul d=14 c=9", "xor d=11 c=14", "addc d=6 c=11 imm=0x02da7647", "xor d=13 c=6", "add d=12 c=13", "rot d=6 c=12 k=4", "rot d=0 c=6 k=17", "xrot d=6 c=0 k=16", "mul d=5 c=6", "mulc d=14 c=5 imm=0x631860bd", "xorc d=7 c=14 imm=0xfd80e869", "mul d=6 c=7", "xrot d=14 c=6 k=28", "add d=1 c=14", "sub d=12 c=1", "rot d=10 c=12 k=24", "xorc d=12 c=10 imm=0x923e2dd8", "mulc d=6 c=12 imm=0xd1c8662b", "mulc d=11 c=6 imm=0x7f1579ab", "mul d=1 c=11", "mul d=12 c=1", "orx d=0 c=12 b=15", "andx d=12 c=0 b=5", "rot d=13 c=12 k=3", "mul d=12 c=13", "add d=0 c=12", "addc d=8 c=0 imm=0x20b00217", "mulc d=14 c=8 imm=0xf9d426ff", "mul d=2 c=14", "add d=10 c=2", "mul d=2 c=10", "xrot d=14 c=2 k=29", "xrot d=0 c=14 k=8", "mulc d=8 c=0 imm=0x1108ba07", "add d=14 c=8", "add d=5 c=14", "add d=15 c=5", "mul d=13 c=15", "mulc d=5 c=13 imm=0x135192c5", "addc d=14 c=5 imm=0x4e9e6ad1", "add d=5 c=14", "add d=7 c=5", "mulc d=1 c=7 imm=0x6babe5dd", "xor d=10 c=1", "rot d=2 c=10 k=11", "xor d=1 c=2", "rot d=6 c=1 k=15", "xor d=12 c=6", "mul d=7 c=12", "rot d=8 c=7 k=16", "xor d=3 c=8", "orx d=13 c=3 b=0", "xor d=10 c=13", "xor d=2 c=10", "mul d=1 c=2", "xrot d=8 c=1 k=1", "mulc d=15 c=8 imm=0xfa9fbf2d", "xor d=3 c=15", "xorc d=11 c=3 imm=0x545738b5", "rot d=12 c=11 k=26", "rot d=1 c=12 k=7", "xrot d=11 c=1 k=4", "rot d=0 c=11 k=8", "xorc d=2 c=0 imm=0xaacb0afe", "add d=9 c=2", "add d=6 c=9", "xorc d=13 c=6 imm=0x443ac86a", "add d=3 c=13", "rot d=6 c=3 k=12", "xorc d=9 c=6 imm=0x8fa27e45", "xrot d=14 c=9 k=15", "xrot d=4 c=14 k=20", "add d=5 c=4", "rot d=6 c=5 k=12", "mulc d=15 c=6 imm=0x6fbcddeb", "sub d=8 c=15", "add d=15 c=8", "add d=4 c=15", "sub d=12 c=4", "add d=8 c=12", "orx d=2 c=8 b=6", "mulc d=6 c=2 imm=0xb3985295", "xrot d=0 c=6 k=27", "addc d=4 c=0 imm=0x56dea41d", "mul d=13 c=4", "sub d=15 c=13", "addc d=0 c=15 imm=0x3a8c7806", "xorc d=12 c=0 imm=0xa154fcc4", "mulc d=4 c=12 imm=0xef91a6cb", "mulc d=10 c=4 imm=0xfb043751", "add d=12 c=10", "mul d=9 c=12", "orx d=15 c=9 b=1", "rot d=11 c=15 k=1", "mulc d=4 c=11 imm=0x1647a845", "sub d=2 c=4", "xorc d=14 c=2 imm=0x6cf9afae", "sub d=7 c=14", "mulc d=9 c=7 imm=0x0b925217", "xrot d=2 c=9 k=6", "mulc d=12 c=2 imm=0x063f86d7", "xor d=1 c=12", "add d=11 c=1", "xor d=4 c=11", "andx d=0 c=4 b=11", "add d=9 c=0", "rot d=14 c=9 k=1", "xor d=9 c=14", "add d=12 c=9", "xrot d=9 c=12 k=5", "orx d=15 c=9 b=7", "addc d=14 c=15 imm=0x720a9418", "sub d=0 c=14", "mulc d=3 c=0 imm=0x3b661535", "sub d=0 c=3", "add d=2 c=0", "xrot d=11 c=2 k=28", "sub d=7 c=11", "xor d=1 c=7", "xrot d=2 c=1 k=28", "sub d=14 c=2", "sub d=0 c=14", "add d=10 c=0", "xrot d=3 c=10 k=5", "rot d=1 c=3 k=15", "andx d=13 c=1 b=3", "add d=5 c=13", "rot d=10 c=5 k=22", "mulc2 d=11 c=10 imm=0xb072cb67", "rot d=6 c=11 k=23", "xrot d=0 c=6 k=30", "rot d=7 c=0 k=2", "rot d=5 c=7 k=13", "xrot d=11 c=5 k=29", "mul d=7 c=11", "andx d=8 c=7 b=15", "add d=5 c=8", "mulc d=14 c=5 imm=0xadb08c77", "mulc d=7 c=14 imm=0x9b7a1549", "andx d=5 c=7 b=9", "add d=9 c=5", "addc d=7 c=9 imm=0x31c29969", "xor d=9 c=7", "mulc d=12 c=9 imm=0x1b53dc25", "add d=14 c=12", "sub d=13 c=14", "mulc2 d=5 c=13 imm=0x1411b229", "orx d=12 c=5 b=1", "xor d=8 c=12", "sub d=6 c=8", "sub d=5 c=6", "sub d=15 c=5", "add d=9 c=15", "xor d=8 c=9", "add d=5 c=8", "add d=4 c=5", "mulc d=0 c=4 imm=0x54b6241f", "xor d=5 c=0", "rot d=4 c=5 k=1", "add d=15 c=4", "mulc d=7 c=15 imm=0x65b59741", "add d=11 c=7", "add d=2 c=11", "add d=9 c=2", "sub d=0 c=9", "sub d=5 c=0", "xor d=9 c=5", "xrot d=14 c=9 k=13", "mulc2 d=10 c=14 imm=0xf978f191", "add d=12 c=10", "add d=4 c=12", "xor d=7 c=4", "xor d=12 c=7", "orx d=10 c=12 b=13", "xorc d=1 c=10 imm=0x79536ee2", "sub d=15 c=1", "mulc d=13 c=15 imm=0xaaf42111", "addc d=11 c=13 imm=0xd935a555", "rot d=1 c=11 k=19", "rot d=13 c=1 k=1", "xorc d=9 c=13 imm=0x6c0ea54a", "xor d=11 c=9", "addc d=9 c=11 imm=0x609cd9ea", "mulc d=14 c=9 imm=0xf76d6ffb", "rot d=7 c=14 k=14", "rot d=3 c=7 k=18", "add d=7 c=3", "rot d=11 c=7 k=1", "mulc d=9 c=11 imm=0xf3497ec7", "sub d=0 c=9", "addc d=12 c=0 imm=0xfc1c2a19", "add d=14 c=12", "add d=12 c=14", "rot d=0 c=12 k=19", "xrot d=15 c=0 k=31", "xrot d=9 c=15 k=12", "rot d=7 c=9 k=15", "add d=6 c=7", "mul d=0 c=6", "xrot d=7 c=0 k=25", "add d=5 c=7", "mulc d=13 c=5 imm=0x103550c1", "add d=10 c=13", "sub d=12 c=10", "orx d=10 c=12 b=0", "orx d=12 c=10 b=1", "xor d=5 c=12", "xor d=2 c=5", "xorc d=3 c=2 imm=0x2e047eb3", "addc d=5 c=3 imm=0xe97cb0af", "xorc d=10 c=5 imm=0x4455829b", "xor d=8 c=10", "mulc2 d=9 c=8 imm=0xe48b6cf7", "rot d=10 c=9 k=11", "sub d=14 c=10", "add d=4 c=14", "orx d=1 c=4 b=2", "mul d=12 c=1", "sub d=15 c=12", "rot d=5 c=15 k=14", "rot d=13 c=5 k=30", "xrot d=1 c=13 k=3", "addc d=10 c=1 imm=0x2b88f231", "xor d=3 c=10", "rot d=14 c=3 k=16", "xor d=2 c=14", "rot d=0 c=2 k=24", "xor d=6 c=0", "mulc2 d=7 c=6 imm=0xc8b02c1f", "add d=12 c=7", "mul d=15 c=12", "xor d=1 c=15", "xor d=2 c=1", "orx d=13 c=2 b=4", "rot d=4 c=13 k=25", "mul d=1 c=4", "addc d=8 c=1 imm=0x170391fd", "sub d=7 c=8", "addc d=6 c=7 imm=0x428e4c84", "add d=15 c=6", "orx d=10 c=15 b=13", "rot d=7 c=10 k=17", "mul d=0 c=7", "mul d=13 c=0", "xor d=6 c=13", "mul d=14 c=6", "addc d=0 c=14 imm=0x10c22a2d", "mulc d=9 c=0 imm=0xaeee5b5f", "andx d=5 c=9 b=6", "addc d=12 c=5 imm=0xaa190509", "rot d=15 c=12 k=23", "rot d=6 c=15 k=29", "sub d=4 c=6", "xor d=1 c=4", "add d=10 c=1", "addc d=3 c=10 imm=0xcb02e2f1", "add d=11 c=3", "xor d=4 c=11", "xor d=8 c=4", "mul d=10 c=8", "rot d=9 c=10 k=28", "mulc2 d=10 c=9 imm=0x385128c9", "orx d=13 c=10 b=1", "xrot d=15 c=13 k=4", "rot d=1 c=15 k=20", "andx d=14 c=1 b=6", "xor d=8 c=14", "mulc d=0 c=8 imm=0x5e3978c9", "xor d=2 c=0", "rot d=11 c=2 k=18", "mulc d=8 c=11 imm=0xfc3d1753", "add d=10 c=8", "xor d=2 c=10", "add d=0 c=2", "mul d=1 c=0", "add d=4 c=1", "xor d=1 c=4", "xrot d=3 c=1 k=8", "mulc d=6 c=3 imm=0xb74b7bbb", "mul d=8 c=6", "sub d=11 c=8", "andx d=7 c=11 b=9", "xor d=11 c=7", "orx d=5 c=11 b=15", "mulc2 d=1 c=5 imm=0x6f397ee5", "xor d=2 c=1", "xor d=6 c=2", "xrot d=3 c=6 k=10", "mulc d=5 c=3 imm=0xf3e5cfad", "add d=8 c=5", "sub d=7 c=8", "add d=2 c=7", "rot d=14 c=2 k=25", "mul d=1 c=14", "mulc2 d=3 c=1 imm=0x02b399cb", "andx d=2 c=3 b=10", "xrot d=12 c=2 k=3", "mul d=14 c=12", "mulc d=0 c=14 imm=0xdce3e741", "rot d=1 c=0 k=7", "xor d=7 c=1", "mul d=10 c=7", "rot d=5 c=10 k=9", "mul d=1 c=5", "xorc d=4 c=1 imm=0x385d5cd4", "add d=7 c=4", "xor d=15 c=7", "rot d=13 c=15 k=22", "mulc d=12 c=13 imm=0x817a9347", "andx d=7 c=12 b=5", "xor d=9 c=7", "rot d=12 c=9 k=8", "add d=5 c=12", "mul d=9 c=5", "sub d=15 c=9", "rot d=4 c=15 k=5", "rot d=13 c=4 k=20", "mulc2 d=8 c=13 imm=0x97d936eb", "add d=10 c=8", "add d=14 c=10", "add d=6 c=14", "xor d=0 c=6", "sub d=11 c=0", "andx d=1 c=11 b=14", "xor d=2 c=1", "rot d=11 c=2 k=4", "xor d=5 c=11", "mulc d=9 c=5 imm=0x684dd78f", "mulc2 d=14 c=9 imm=0xcce53009", "rot d=8 c=14 k=4", "sub d=3 c=8", "sub d=12 c=3", "xrot d=15 c=12 k=22", "addc d=12 c=15 imm=0x25d2e612", "xrot d=8 c=12 k=10", "add d=4 c=8", "xrot d=10 c=4 k=9", "orx d=0 c=10 b=9", "xor d=2 c=0", "rot d=10 c=2 k=3", "add d=14 c=10", "xor d=5 c=14", "mul d=9 c=5", "xorc d=13 c=9 imm=0xd2f78081", "xor d=14 c=13", "add d=8 c=14", "add d=5 c=8", "mulc d=15 c=5 imm=0xb4af8bb9", "addc d=5 c=15 imm=0xd497de31", "xor d=13 c=5", "orx d=14 c=13 b=4", "rot d=12 c=14 k=19", "mulc d=1 c=12 imm=0x80736b3f", "add d=0 c=1", "sub d=6 c=0", "mul d=5 c=6", "sub d=13 c=5", "mulc2 d=7 c=13 imm=0x4b586d65", "xrot d=9 c=7 k=9", "xor d=1 c=9", "mul d=15 c=1", "sub d=13 c=15", "mulc d=4 c=13 imm=0x0bf0c72b", "add d=15 c=4", "xorc d=9 c=15 imm=0x1f3d3b6f", "add d=11 c=9", "orx d=6 c=11 b=5", "orx d=15 c=6 b=9", "mulc d=7 c=15 imm=0x2d1b2827", "rot d=1 c=7 k=4", "addc d=10 c=1 imm=0x19394fe5", "addc d=7 c=10 imm=0x0df93d70", "sub d=9 c=7", "rot d=1 c=9 k=13", "add d=5 c=1", "addc d=3 c=5 imm=0x528c96f9", "mul d=9 c=3", "add d=11 c=9", "add d=1 c=11"], + ["xrot d=3 c=0 k=11", "mulc d=9 c=3 imm=0x926a6d6d", "mul d=10 c=9", "mulc d=6 c=10 imm=0x16fa529b", "addc d=14 c=6 imm=0x8bf7717d", "mulc2 d=15 c=14 imm=0x838a9b83", "orx d=13 c=15 b=1", "xorc d=7 c=13 imm=0x1c4ee851", "addc d=12 c=7 imm=0x2de89a80", "mulc d=9 c=12 imm=0xc6ccd52b", "sub d=12 c=9", "xor d=8 c=12", "add d=6 c=8", "sub d=12 c=6", "rot d=15 c=12 k=6", "add d=3 c=15", "add d=14 c=3", "mulc2 d=3 c=14 imm=0x86602d0d", "xrot d=12 c=3 k=31", "xor d=0 c=12", "xor d=8 c=0", "sub d=12 c=8", "add d=11 c=12", "mulc d=15 c=11 imm=0xcd53cb6b", "mulc d=0 c=15 imm=0x2e7b800d", "mul d=3 c=0", "add d=4 c=3", "mulc2 d=7 c=4 imm=0xf492cc8d", "rot d=13 c=7 k=6", "sub d=8 c=13", "xrot d=15 c=8 k=29", "sub d=6 c=15", "add d=1 c=6", "sub d=15 c=1", "mul d=13 c=15", "mulc d=5 c=13 imm=0x6d79f9b3", "xrot d=10 c=5 k=29", "xorc d=8 c=10 imm=0xd22b10f3", "mulc d=9 c=8 imm=0xc87cfcd7", "rot d=2 c=9 k=5", "mul d=11 c=2", "xor d=5 c=11", "add d=7 c=5", "addc d=14 c=7 imm=0xac6f941e", "add d=5 c=14", "add d=14 c=5", "xor d=13 c=14", "add d=6 c=13", "sub d=14 c=6", "rot d=10 c=14 k=15", "xor d=1 c=10", "mulc d=5 c=1 imm=0x7a531a39", "mulc2 d=15 c=5 imm=0xe6bff90b", "xor d=7 c=15", "add d=4 c=7", "sub d=8 c=4", "mulc d=14 c=8 imm=0xcb91e92b", "sub d=2 c=14", "rot d=14 c=2 k=26", "xrot d=4 c=14 k=31", "add d=10 c=4", "mulc d=1 c=10 imm=0x2f2e1573", "add d=5 c=1", "add d=7 c=5", "xrot d=1 c=7 k=31", "xrot d=14 c=1 k=9", "sub d=6 c=14", "xor d=14 c=6", "add d=1 c=14", "mulc d=15 c=1 imm=0xf122f41d", "sub d=1 c=15", "orx d=5 c=1 b=8", "xrot d=13 c=5 k=20", "mulc2 d=1 c=13 imm=0x24839c9d", "addc d=10 c=1 imm=0x6e377732", "xor d=9 c=10", "addc d=10 c=9 imm=0x9c8be86f", "xrot d=4 c=10 k=18", "mulc2 d=15 c=4 imm=0x57f74b09", "mulc2 d=0 c=15 imm=0x4777892d", "mul d=15 c=0", "sub d=8 c=15", "sub d=14 c=8", "xor d=6 c=14", "add d=11 c=6", "xor d=9 c=11", "addc d=4 c=9 imm=0x4e322e4b", "xrot d=7 c=4 k=5", "orx d=15 c=7 b=0", "sub d=10 c=15", "xrot d=9 c=10 k=8", "xrot d=12 c=9 k=26", "add d=10 c=12", "xrot d=13 c=10 k=16", "xor d=12 c=13", "xorc d=1 c=12 imm=0x32411651", "add d=9 c=1", "mul d=1 c=9", "add d=11 c=1", "xrot d=12 c=11 k=11", "xrot d=15 c=12 k=16", "xor d=11 c=15", "add d=9 c=11", "orx d=13 c=9 b=3", "andx d=7 c=13 b=1", "andx d=0 c=7 b=11", "rot d=6 c=0 k=25", "xrot d=7 c=6 k=18", "sub d=2 c=7", "xorc d=14 c=2 imm=0xd6cffa6e", "addc d=10 c=14 imm=0xdb62a314", "add d=2 c=10", "mulc2 d=14 c=2 imm=0x2f015667", "mul d=3 c=14", "xor d=0 c=3", "mul d=8 c=0", "xor d=12 c=8", "rot d=9 c=12 k=11", "xor d=4 c=9", "xor d=15 c=4", "rot d=3 c=15 k=5", "xrot d=6 c=3 k=20", "mulc d=14 c=6 imm=0x3392ff1f", "sub d=9 c=14", "mul d=14 c=9", "sub d=9 c=14", "rot d=0 c=9 k=12", "mulc d=10 c=0 imm=0x86b32d1d", "mul d=7 c=10", "mulc2 d=3 c=7 imm=0xcf4d9bb3", "mul d=8 c=3", "sub d=7 c=8", "rot d=2 c=7 k=31", "xor d=6 c=2", "mulc2 d=7 c=6 imm=0xf9e43535", "xor d=5 c=7", "rot d=4 c=5 k=10", "mul d=2 c=4", "mulc d=14 c=2 imm=0xd801e903", "mulc2 d=11 c=14 imm=0x1140fbe1", "rot d=12 c=11 k=6", "mulc2 d=5 c=12 imm=0x974088ed", "sub d=0 c=5", "sub d=14 c=0", "orx d=0 c=14 b=4", "sub d=6 c=0", "mul d=1 c=6", "mulc2 d=10 c=1 imm=0x78b0e1a7", "xor d=13 c=10", "sub d=0 c=13", "add d=7 c=0", "xor d=0 c=7", "xrot d=12 c=0 k=23", "sub d=9 c=12", "orx d=5 c=9 b=6", "add d=2 c=5", "mulc2 d=8 c=2 imm=0x7b42b5f1", "xor d=4 c=8", "mulc d=15 c=4 imm=0x2e28033b", "add d=12 c=15", "xrot d=9 c=12 k=27", "rot d=8 c=9 k=22", "xor d=0 c=8", "mul d=10 c=0", "mul d=1 c=10", "xor d=2 c=1", "andx d=3 c=2 b=12", "mul d=4 c=3", "rot d=11 c=4 k=22", "add d=0 c=11", "orx d=15 c=0 b=7", "add d=13 c=15", "xor d=0 c=13", "add d=12 c=0", "addc d=10 c=12 imm=0x9646135e", "add d=0 c=10", "andx d=10 c=0 b=2", "addc d=4 c=10 imm=0x82a90265", "xor d=15 c=4", "mulc d=5 c=15 imm=0x0ab18765", "xor d=1 c=5", "mulc d=3 c=1 imm=0x58bdae6f", "orx d=14 c=3 b=2", "addc d=13 c=14 imm=0xe01e7581", "mulc d=0 c=13 imm=0x49941f01", "mulc2 d=10 c=0 imm=0xb246126b", "xorc d=3 c=10 imm=0xe938f5d3", "add d=8 c=3", "orx d=14 c=8 b=0", "add d=9 c=14", "xorc d=15 c=9 imm=0xd652447b", "xorc d=10 c=15 imm=0xbfa14965", "mul d=5 c=10", "add d=6 c=5", "xorc d=11 c=6 imm=0x37d98687", "mulc d=6 c=11 imm=0x4e553b0b", "rot d=12 c=6 k=17", "mul d=14 c=12", "add d=4 c=14", "xor d=10 c=4", "mul d=0 c=10", "xor d=12 c=0", "orx d=6 c=12 b=14", "xrot d=12 c=6 k=16", "xor d=10 c=12", "addc d=11 c=10 imm=0x936f0354", "addc d=10 c=11 imm=0x1771251d", "xrot d=1 c=10 k=13", "xrot d=4 c=1 k=18", "mulc d=14 c=4 imm=0xd997b3a1", "mul d=4 c=14", "xrot d=11 c=4 k=10", "add d=4 c=11", "add d=11 c=4", "rot d=10 c=11 k=2", "sub d=3 c=10", "xrot d=11 c=3 k=1", "xorc d=15 c=11 imm=0x31d420eb", "add d=12 c=15", "mulc2 d=6 c=12 imm=0xef7ed339", "add d=5 c=6", "xor d=6 c=5", "add d=7 c=6", "mul d=1 c=7", "xor d=13 c=1", "add d=8 c=13", "xor d=0 c=8", "mulc2 d=10 c=0 imm=0x2dc4f3ff", "xor d=4 c=10", "sub d=15 c=4", "sub d=4 c=15", "add d=12 c=4", "xorc d=0 c=12 imm=0xc68cf398", "mulc2 d=10 c=0 imm=0x8d7270d1", "xorc d=1 c=10 imm=0x792d21d6", "xor d=15 c=1", "rot d=3 c=15 k=31", "mul d=12 c=3", "xorc d=0 c=12 imm=0x44570ae7", "add d=8 c=0", "andx d=5 c=8 b=10", "sub d=14 c=5", "add d=6 c=14", "addc d=8 c=6 imm=0xa3eeb141", "add d=11 c=8", "rot d=13 c=11 k=13", "sub d=14 c=13", "orx d=7 c=14 b=0", "orx d=8 c=7 b=0", "mul d=3 c=8", "mulc2 d=4 c=3 imm=0xb0e65813", "add d=14 c=4", "sub d=4 c=14", "orx d=1 c=4 b=6", "xor d=15 c=1", "mulc d=3 c=15 imm=0x74f161a1", "addc d=10 c=3 imm=0xa6f7f269", "orx d=0 c=10 b=13", "rot d=2 c=0 k=21", "andx d=9 c=2 b=12", "xor d=11 c=9", "add d=9 c=11", "mul d=8 c=9", "orx d=5 c=8 b=1", "add d=7 c=5", "addc d=11 c=7 imm=0xe1fb4104", "andx d=14 c=11 b=6", "xor d=15 c=14", "andx d=11 c=15 b=6", "add d=7 c=11", "rot d=9 c=7 k=12", "mul d=0 c=9", "add d=4 c=0", "mulc d=0 c=4 imm=0x3458b4b9", "mul d=15 c=0", "rot d=12 c=15 k=5", "sub d=11 c=12", "mulc2 d=7 c=11 imm=0xdf6299e7", "rot d=15 c=7 k=17", "xrot d=8 c=15 k=25", "orx d=1 c=8 b=7", "mulc2 d=7 c=1 imm=0xcde4ccd9", "andx d=4 c=7 b=3", "xor d=11 c=4", "addc d=15 c=11 imm=0x93b32499", "mulc2 d=8 c=15 imm=0x2c187aeb", "add d=12 c=8", "addc d=15 c=12 imm=0x8975fca8", "xorc d=8 c=15 imm=0xa690273a", "add d=7 c=8", "mul d=2 c=7", "add d=15 c=2", "andx d=12 c=15 b=0", "mul d=13 c=12", "andx d=9 c=13 b=15", "xrot d=7 c=9 k=19", "addc d=9 c=7 imm=0x68201cc4", "xorc d=11 c=9 imm=0x8ce52309", "xor d=8 c=11", "mulc2 d=2 c=8 imm=0xcd1aa62f", "xor d=4 c=2", "rot d=11 c=4 k=14", "mulc d=12 c=11 imm=0x5225e677", "xorc d=7 c=12 imm=0x249730c1", "addc d=8 c=7 imm=0x648c79c7", "rot d=9 c=8 k=23", "xorc d=6 c=9 imm=0x63921b24", "mulc d=8 c=6 imm=0xbaff00d3", "xor d=2 c=8", "mul d=4 c=2", "mulc d=8 c=4 imm=0xcaf43ceb", "add d=6 c=8", "mulc d=8 c=6 imm=0x4fa73429", "mulc d=0 c=8 imm=0xd09399a5", "add d=8 c=0", "mulc d=14 c=8 imm=0xffb37081", "xor d=13 c=14", "add d=4 c=13", "xor d=8 c=4", "xor d=14 c=8", "rot d=7 c=14 k=16", "mulc d=14 c=7 imm=0x412aee4d", "sub d=10 c=14", "xor d=1 c=10", "xorc d=4 c=1 imm=0x8d36a1b0", "mulc d=14 c=4 imm=0xb17290df", "mul d=3 c=14", "sub d=15 c=3", "add d=2 c=15", "rot d=11 c=2 k=10", "xor d=0 c=11", "xorc d=12 c=0 imm=0x2be56ccf", "mulc2 d=2 c=12 imm=0x5290c25d", "add d=1 c=2", "orx d=2 c=1 b=8", "sub d=6 c=2", "add d=10 c=6", "addc d=13 c=10 imm=0x6bcc329c", "mul d=2 c=13", "mulc d=1 c=2 imm=0xd95e0a65", "mulc d=12 c=1 imm=0x5598f745", "add d=9 c=12", "xrot d=15 c=9 k=19", "add d=13 c=15", "addc d=6 c=13 imm=0xe9004eea", "xor d=15 c=6", "sub d=4 c=15", "add d=3 c=4", "xorc d=8 c=3 imm=0x118412a8", "mulc2 d=2 c=8 imm=0x7ace7595", "mul d=3 c=2", "mulc d=7 c=3 imm=0xefdf99af", "xor d=1 c=7", "mul d=11 c=1", "xrot d=13 c=11 k=9", "add d=0 c=13", "mul d=7 c=0", "xor d=1 c=7", "andx d=10 c=1 b=6", "xorc d=1 c=10 imm=0x93602932", "sub d=2 c=1", "xor d=12 c=2", "rot d=3 c=12 k=1", "xor d=7 c=3", "xorc d=14 c=7 imm=0x237f8e1a", "xrot d=0 c=14 k=2", "mul d=1 c=0", "xrot d=4 c=1 k=2", "xrot d=9 c=4 k=16", "mulc2 d=7 c=9 imm=0xf073bd6d", "mulc2 d=10 c=7 imm=0x3a609689", "xor d=12 c=10", "xorc d=3 c=12 imm=0x9db3a4be", "rot d=14 c=3 k=1", "orx d=6 c=14 b=5", "addc d=1 c=6 imm=0x1aae9d69", "xrot d=5 c=1 k=29", "xor d=14 c=5", "add d=8 c=14", "andx d=2 c=8 b=0", "mulc d=11 c=2 imm=0xf0879cf7", "xrot d=1 c=11 k=2", "xor d=6 c=1", "sub d=15 c=6", "sub d=7 c=15", "add d=3 c=7", "sub d=2 c=3", "sub d=10 c=2", "rot d=11 c=10 k=3", "mul d=3 c=11", "xrot d=5 c=3 k=25", "andx d=0 c=5 b=14", "xor d=3 c=0", "mulc2 d=0 c=3 imm=0xd6807e45", "add d=10 c=0", "mul d=4 c=10", "andx d=2 c=4 b=5", "rot d=9 c=2 k=3", "mulc2 d=15 c=9 imm=0x946b5521", "rot d=13 c=15 k=5", "xor d=5 c=13", "orx d=4 c=5 b=15", "add d=2 c=4", "add d=12 c=2", "mul d=3 c=12", "add d=6 c=3", "mulc2 d=12 c=6 imm=0xb6b83b35", "sub d=6 c=12", "xor d=1 c=6", "mulc2 d=4 c=1 imm=0x6b8de9c3", "add d=15 c=4", "sub d=6 c=15", "andx d=5 c=6 b=7", "add d=14 c=5", "mulc d=7 c=14 imm=0x5fe38793", "add d=1 c=7", "mulc d=15 c=1 imm=0x0c3d59fb", "xorc d=2 c=15 imm=0xa6e76c52", "xor d=8 c=2", "add d=15 c=8", "rot d=2 c=15 k=18", "xor d=7 c=2", "orx d=9 c=7 b=5", "andx d=0 c=9 b=6", "mul d=14 c=0", "orx d=7 c=14 b=1", "xor d=8 c=7", "mul d=1 c=8", "xrot d=4 c=1 k=21", "mulc d=1 c=4 imm=0xaa342e53", "sub d=11 c=1", "xorc d=13 c=11 imm=0xcbbd4ece", "sub d=5 c=13", "add d=11 c=5", "xorc d=14 c=11 imm=0xb5db59d3", "xor d=5 c=14", "xrot d=10 c=5 k=23", "xor d=5 c=10", "sub d=8 c=5", "mul d=6 c=8", "xor d=3 c=6", "addc d=7 c=3 imm=0x00658f95", "xorc d=0 c=7 imm=0x2e56fa3e", "xorc d=2 c=0 imm=0xec5293e3", "xrot d=7 c=2 k=21", "mul d=14 c=7", "mul d=11 c=14", "mul d=0 c=11", "mulc d=4 c=0 imm=0x2fb41f81", "add d=2 c=4", "add d=0 c=2", "add d=6 c=0", "rot d=8 c=6 k=10", "add d=2 c=8", "xorc d=5 c=2 imm=0xa8ea4a52", "andx d=10 c=5 b=1", "addc d=0 c=10 imm=0xadbdf4b0", "xor d=8 c=0", "xor d=5 c=8", "mulc2 d=10 c=5 imm=0x4142cee3", "addc d=12 c=10 imm=0xf3bf2694", "mul d=10 c=12", "addc d=9 c=10 imm=0x087246d1", "rot d=4 c=9 k=24", "xrot d=0 c=4 k=12", "addc d=3 c=0 imm=0xac907341", "xrot d=12 c=3 k=8", "sub d=14 c=12", "sub d=15 c=14", "add d=5 c=15", "xrot d=15 c=5 k=31", "xrot d=9 c=15 k=20", "mulc2 d=7 c=9 imm=0xcb052cc1", "add d=4 c=7", "rot d=0 c=4 k=21", "rot d=6 c=0 k=17", "add d=2 c=6", "sub d=15 c=2", "xrot d=9 c=15 k=22", "xor d=8 c=9", "addc d=6 c=8 imm=0xae67ff98", "sub d=0 c=6", "mul d=2 c=0", "add d=12 c=2", "xor d=15 c=12", "add d=0 c=15", "xor d=6 c=0", "xrot d=3 c=6 k=5", "add d=1 c=3", "xor d=6 c=1", "orx d=12 c=6 b=8", "xor d=3 c=12", "rot d=2 c=3 k=12", "xor d=8 c=2", "add d=1 c=8", "orx d=6 c=1 b=15", "addc d=1 c=6 imm=0x2aa7ff78", "add d=11 c=1", "sub d=14 c=11", "sub d=3 c=14", "sub d=9 c=3", "add d=6 c=9", "xrot d=12 c=6 k=12", "add d=8 c=12", "xrot d=0 c=8 k=22", "xor d=4 c=0", "mulc2 d=8 c=4 imm=0x1e56eb41", "add d=11 c=8", "add d=6 c=11", "mul d=13 c=6", "mul d=2 c=13", "addc d=0 c=2 imm=0x43af110c", "mulc2 d=5 c=0 imm=0xa3d7a065", "mul d=14 c=5", "add d=4 c=14", "mul d=11 c=4", "rot d=5 c=11 k=8", "orx d=1 c=5 b=9", "add d=5 c=1", "xor d=1 c=5", "add d=9 c=1", "mul d=8 c=9", "add d=7 c=8", "add d=10 c=7", "add d=13 c=10", "mulc d=8 c=13 imm=0xfc8aade7", "xorc d=12 c=8 imm=0x47e9555a", "sub d=3 c=12", "xor d=6 c=3", "xor d=11 c=6", "sub d=9 c=11", "rot d=3 c=9 k=29", "orx d=8 c=3 b=11", "rot d=12 c=8 k=13", "rot d=4 c=12 k=8", "mulc d=7 c=4 imm=0xe569b7fd", "andx d=14 c=7 b=11", "sub d=8 c=14", "xor d=14 c=8", "rot d=7 c=14 k=3", "add d=3 c=7", "mul d=10 c=3", "mulc d=8 c=10 imm=0xc72f74bd", "xor d=13 c=8", "rot d=4 c=13 k=8", "xor d=10 c=4", "xrot d=11 c=10 k=10", "xorc d=2 c=11 imm=0x89747ffe", "xor d=7 c=2", "sub d=5 c=7", "sub d=13 c=5", "mulc d=0 c=13 imm=0xf48e8c1d", "xrot d=14 c=0 k=15", "add d=4 c=14", "rot d=7 c=4 k=17", "add d=13 c=7", "mulc2 d=0 c=13 imm=0x44c6b0f1", "xor d=3 c=0", "addc d=15 c=3 imm=0xb264b481", "xor d=12 c=15", "orx d=7 c=12 b=13", "add d=0 c=7", "sub d=9 c=0", "mulc2 d=13 c=9 imm=0x720cd467", "xorc d=11 c=13 imm=0xa96dd9a0", "sub d=5 c=11", "orx d=15 c=5 b=11", "add d=6 c=15", "add d=7 c=6", "mulc2 d=8 c=7 imm=0xbeaaa467", "xor d=7 c=8", "mulc d=11 c=7 imm=0x30405013", "xor d=1 c=11", "xorc d=0 c=1 imm=0xe46c8953", "mulc d=4 c=0 imm=0x3beff773", "rot d=3 c=4 k=20", "xor d=4 c=3", "rot d=11 c=4 k=30", "orx d=7 c=11 b=3", "xor d=11 c=7", "xor d=13 c=11", "mul d=1 c=13", "rot d=0 c=1 k=17", "xorc d=15 c=0 imm=0xbb0e1b77", "xrot d=9 c=15 k=30", "mul d=0 c=9", "add d=3 c=0", "mulc d=0 c=3 imm=0x28a1e7fb", "addc d=11 c=0 imm=0x3f20929b", "addc d=14 c=11 imm=0x9721b746", "mulc d=3 c=14 imm=0xc929f765", "mul d=14 c=3", "sub d=10 c=14", "mulc d=3 c=10 imm=0x83ea7953", "xor d=14 c=3", "add d=4 c=14", "xorc d=11 c=4 imm=0x9f1876ee", "add d=5 c=11", "mulc d=6 c=5 imm=0x3e059b67", "mul d=0 c=6", "xor d=9 c=0", "mul d=3 c=9", "add d=4 c=3", "add d=6 c=4", "mulc d=14 c=6 imm=0xe8ebef0f", "rot d=12 c=14 k=31", "xrot d=3 c=12 k=10", "rot d=0 c=3 k=25", "xor d=4 c=0", "xorc d=0 c=4 imm=0xdd9f45b0", "mul d=1 c=0", "mulc d=7 c=1 imm=0xd7937423", "add d=9 c=7", "xor d=14 c=9", "orx d=9 c=14 b=4", "xor d=14 c=9", "mul d=12 c=14", "mulc d=11 c=12 imm=0x6f00822d", "addc d=15 c=11 imm=0x90a645c9", "mulc2 d=11 c=15 imm=0xd4e49bc3", "add d=9 c=11", "mulc d=2 c=9 imm=0xcd756085", "sub d=5 c=2", "xor d=1 c=5", "rot d=7 c=1 k=24", "xorc d=13 c=7 imm=0x259d1187", "mul d=9 c=13", "xor d=7 c=9", "sub d=9 c=7", "xor d=4 c=9", "mul d=14 c=4", "xor d=8 c=14", "mulc2 d=15 c=8 imm=0x975ddaeb", "orx d=9 c=15 b=13", "xorc d=6 c=9 imm=0x318e194e", "mulc d=2 c=6 imm=0xb0a2842f", "mulc d=5 c=2 imm=0xa9a8585d", "mulc d=7 c=5 imm=0x3e818aa9", "addc d=3 c=7 imm=0x60f54e95", "addc d=7 c=3 imm=0xb6fd49a0", "add d=5 c=7", "xrot d=12 c=5 k=1", "xor d=3 c=12", "rot d=7 c=3 k=2", "xor d=2 c=7", "xorc d=7 c=2 imm=0xa06175a5", "sub d=15 c=7", "addc d=2 c=15 imm=0x32c7f73f", "sub d=10 c=2", "sub d=6 c=10", "addc d=11 c=6 imm=0x847befcd", "mul d=8 c=11", "xorc d=10 c=8 imm=0x80bc6c43", "mulc d=4 c=10 imm=0xeec1e72f", "rot d=14 c=4 k=15", "mul d=2 c=14", "addc d=7 c=2 imm=0x4f95cda0", "mul d=12 c=7", "mulc2 d=15 c=12 imm=0xc0c37a91", "mul d=12 c=15", "addc d=1 c=12 imm=0x574e25f1", "add d=9 c=1", "xorc d=12 c=9 imm=0xbee6ae4c", "rot d=2 c=12 k=2", "xorc d=7 c=2 imm=0x2d8d95fc", "rot d=1 c=7 k=12", "mulc2 d=12 c=1 imm=0x459875c5", "add d=7 c=12", "xrot d=2 c=7 k=13", "add d=4 c=2", "andx d=14 c=4 b=11", "xorc d=8 c=14 imm=0xd2d101c3", "addc d=7 c=8 imm=0xf7c60fa6", "xrot d=0 c=7 k=20", "xor d=9 c=0", "add d=5 c=9", "xorc d=1 c=5 imm=0x09ae80bd", "andx d=9 c=1 b=8", "mul d=6 c=9", "rot d=1 c=6 k=19", "add d=10 c=1", "add d=14 c=10", "xor d=12 c=14", "sub d=10 c=12", "add d=6 c=10", "add d=7 c=6", "orx d=5 c=7 b=15", "sub d=14 c=5", "orx d=13 c=14 b=12", "xor d=2 c=13", "xrot d=10 c=2 k=25", "xrot d=0 c=10 k=9", "mulc d=14 c=0 imm=0xf271e2f9", "rot d=0 c=14 k=30", "mulc d=7 c=0 imm=0xbcb788a1", "mulc2 d=11 c=7 imm=0xc98f1127", "xor d=15 c=11", "mulc d=11 c=15 imm=0x224f625f", "xrot d=14 c=11 k=13", "add d=11 c=14", "xrot d=2 c=11 k=22", "xorc d=9 c=2 imm=0x82adb28e", "add d=8 c=9", "add d=6 c=8", "add d=15 c=6", "mulc2 d=14 c=15 imm=0xfca2b387", "add d=12 c=14", "orx d=6 c=12 b=8", "mul d=5 c=6", "xor d=1 c=5", "addc d=3 c=1 imm=0x1f147bc4", "rot d=10 c=3 k=24", "addc d=6 c=10 imm=0x7186bc62", "rot d=11 c=6 k=2", "andx d=10 c=11 b=6", "orx d=2 c=10 b=15", "xrot d=9 c=2 k=16", "xor d=6 c=9", "andx d=13 c=6 b=2", "sub d=4 c=13", "xrot d=10 c=4 k=7", "addc d=6 c=10 imm=0x76798031", "xorc d=2 c=6 imm=0x81f2cae5", "sub d=15 c=2", "xrot d=7 c=15 k=11", "sub d=0 c=7", "xorc d=15 c=0 imm=0x84b0f58c", "xor d=4 c=15", "addc d=11 c=4 imm=0x37470eca", "xrot d=7 c=11 k=25", "xor d=0 c=7", "xor d=7 c=0", "mulc d=15 c=7 imm=0x8bed0165", "mulc d=13 c=15 imm=0xf0b2282f", "xor d=10 c=13", "mul d=15 c=10"], + ["sub d=9 c=0", "mul d=12 c=9", "sub d=13 c=12", "mulc d=2 c=13 imm=0xcaec7bb5", "mulc d=8 c=2 imm=0xbfa2f813", "mulc d=9 c=8 imm=0xd8816ab5", "xor d=11 c=9", "mulc d=4 c=11 imm=0xb5a60ae1", "add d=2 c=4", "addc d=14 c=2 imm=0x3b8ef46b", "sub d=5 c=14", "xor d=12 c=5", "xrot d=4 c=12 k=5", "mulc d=8 c=4 imm=0x064e4143", "mul d=5 c=8", "rot d=10 c=5 k=30", "add d=13 c=10", "addc d=14 c=13 imm=0xb57a206d", "xrot d=7 c=14 k=19", "rot d=4 c=7 k=8", "rot d=2 c=4 k=26", "rot d=6 c=2 k=23", "xrot d=0 c=6 k=10", "xrot d=4 c=0 k=16", "mulc d=8 c=4 imm=0xc9a07b1d", "mulc d=6 c=8 imm=0xf7907103", "xrot d=1 c=6 k=2", "mulc d=8 c=1 imm=0x63cfdc25", "orx d=13 c=8 b=3", "sub d=11 c=13", "addc d=10 c=11 imm=0xbe40fad3", "mul d=14 c=10", "add d=8 c=14", "addc d=14 c=8 imm=0xe91df793", "sub d=5 c=14", "rot d=2 c=5 k=17", "xor d=7 c=2", "addc d=9 c=7 imm=0x80c9212a", "mulc d=1 c=9 imm=0xa7d74fef", "xorc d=0 c=1 imm=0x08f82691", "andx d=3 c=0 b=12", "xrot d=5 c=3 k=10", "mul d=11 c=5", "sub d=12 c=11", "add d=0 c=12", "rot d=7 c=0 k=10", "rot d=2 c=7 k=25", "addc d=15 c=2 imm=0xe54d98a2", "xor d=3 c=15", "orx d=2 c=3 b=12", "sub d=11 c=2", "andx d=14 c=11 b=3", "add d=3 c=14", "add d=13 c=3", "mul d=9 c=13", "xor d=8 c=9", "add d=4 c=8", "add d=1 c=4", "mul d=14 c=1", "mulc d=10 c=14 imm=0x80d81c29", "rot d=14 c=10 k=28", "mul d=15 c=14", "xorc d=9 c=15 imm=0xb96f0f72", "addc d=0 c=9 imm=0x58af0b09", "orx d=7 c=0 b=8", "mulc d=4 c=7 imm=0x3cb02481", "addc d=6 c=4 imm=0x7c9ebf59", "rot d=4 c=6 k=31", "add d=11 c=4", "add d=9 c=11", "xor d=0 c=9", "xorc d=6 c=0 imm=0x87a4c25e", "addc d=10 c=6 imm=0x63a850d3", "mul d=3 c=10", "add d=15 c=3", "mul d=2 c=15", "xor d=0 c=2", "andx d=10 c=0 b=12", "xrot d=0 c=10 k=13", "xor d=10 c=0", "mulc2 d=1 c=10 imm=0x68b25a3d", "andx d=14 c=1 b=4", "mul d=15 c=14", "xrot d=0 c=15 k=21", "andx d=1 c=0 b=14", "mul d=13 c=1", "mul d=15 c=13", "mul d=7 c=15", "xorc d=3 c=7 imm=0x1eb335a8", "mul d=15 c=3", "rot d=7 c=15 k=23", "xor d=5 c=7", "addc d=8 c=5 imm=0x50a316f9", "xor d=5 c=8", "rot d=3 c=5 k=19", "rot d=8 c=3 k=28", "rot d=14 c=8 k=23", "orx d=2 c=14 b=3", "xrot d=13 c=2 k=16", "add d=11 c=13", "xor d=4 c=11", "add d=15 c=4", "add d=2 c=15", "xrot d=13 c=2 k=7", "add d=1 c=13", "mul d=0 c=1", "sub d=6 c=0", "add d=13 c=6", "rot d=2 c=13 k=24", "xrot d=4 c=2 k=17", "addc d=10 c=4 imm=0xd112ffcf", "xorc d=15 c=10 imm=0x9030e81e", "xor d=4 c=15", "xor d=9 c=4", "xrot d=10 c=9 k=7", "rot d=2 c=10 k=24", "mulc d=14 c=2 imm=0x93c10f1d", "mul d=10 c=14", "mul d=4 c=10", "xor d=8 c=4", "xor d=10 c=8", "mul d=4 c=10", "add d=10 c=4", "orx d=6 c=10 b=15", "xrot d=5 c=6 k=9", "xrot d=13 c=5 k=9", "xor d=4 c=13", "xor d=10 c=4", "sub d=2 c=10", "orx d=13 c=2 b=9", "sub d=8 c=13", "sub d=4 c=8", "xorc d=3 c=4 imm=0x9fcb6ee8", "xorc d=4 c=3 imm=0xb9fbeaf9", "rot d=12 c=4 k=8", "xor d=3 c=12", "rot d=7 c=3 k=31", "xrot d=4 c=7 k=9", "mul d=0 c=4", "xor d=6 c=0", "rot d=4 c=6 k=13", "sub d=13 c=4", "xor d=7 c=13", "rot d=12 c=7 k=10", "rot d=14 c=12 k=27", "xor d=7 c=14", "orx d=0 c=7 b=2", "xor d=12 c=0", "mulc d=5 c=12 imm=0x392525a1", "addc d=8 c=5 imm=0x4138a8f1", "add d=5 c=8", "add d=11 c=5", "xor d=7 c=11", "xor d=14 c=7", "add d=0 c=14", "xor d=12 c=0", "mul d=2 c=12", "sub d=6 c=2", "addc d=4 c=6 imm=0xdcaac0ad", "xor d=10 c=4", "add d=5 c=10", "addc d=10 c=5 imm=0x0cfa5aff", "xorc d=15 c=10 imm=0x68194eef", "mul d=8 c=15", "addc d=9 c=8 imm=0x15042cea", "orx d=0 c=9 b=6", "mul d=14 c=0", "mulc2 d=13 c=14 imm=0x5a114c5f", "add d=1 c=13", "add d=3 c=1", "xorc d=4 c=3 imm=0x9b2578dc", "mulc d=3 c=4 imm=0xf0215559", "xrot d=9 c=3 k=30", "mul d=3 c=9", "mul d=10 c=3", "mulc d=5 c=10 imm=0xd48cc381", "xor d=3 c=5", "sub d=5 c=3", "mulc d=0 c=5 imm=0x5dc8d8cf", "orx d=2 c=0 b=1", "xrot d=4 c=2 k=26", "mul d=11 c=4", "mul d=2 c=11", "sub d=10 c=2", "mulc2 d=14 c=10 imm=0x8334873f", "add d=7 c=14", "addc d=15 c=7 imm=0xa09fcd48", "xor d=10 c=15", "add d=15 c=10", "rot d=12 c=15 k=20", "mulc d=3 c=12 imm=0xb7d989df", "mul d=4 c=3", "xrot d=5 c=4 k=4", "xrot d=7 c=5 k=3", "xrot d=8 c=7 k=13", "mulc d=1 c=8 imm=0xfd9c4977", "xor d=2 c=1", "rot d=13 c=2 k=25", "add d=11 c=13", "mulc2 d=2 c=11 imm=0x9e62997d", "xorc d=1 c=2 imm=0x5bed272f", "xrot d=7 c=1 k=14", "add d=12 c=7", "add d=11 c=12", "mul d=2 c=11", "mul d=11 c=2", "mul d=1 c=11", "mul d=9 c=1", "andx d=13 c=9 b=15", "orx d=1 c=13 b=14", "sub d=6 c=1", "rot d=1 c=6 k=22", "sub d=10 c=1", "mulc2 d=4 c=10 imm=0x1026f5f7", "mulc d=7 c=4 imm=0x91c6caf3", "xrot d=4 c=7 k=18", "addc d=11 c=4 imm=0x39f61640", "sub d=10 c=11", "xor d=15 c=10", "addc d=13 c=15 imm=0xa8a05a01", "rot d=3 c=13 k=27", "sub d=4 c=3", "rot d=13 c=4 k=8", "xor d=8 c=13", "addc d=3 c=8 imm=0x4dc574e2", "orx d=15 c=3 b=5", "mulc2 d=9 c=15 imm=0x7c710593", "addc d=2 c=9 imm=0xe91d6df9", "xorc d=9 c=2 imm=0xba09d0c1", "xrot d=7 c=9 k=5", "addc d=2 c=7 imm=0xf1cb3677", "rot d=0 c=2 k=15", "rot d=5 c=0 k=10", "add d=9 c=5", "andx d=12 c=9 b=3", "mulc d=5 c=12 imm=0x8e5ae08d", "sub d=11 c=5", "xor d=12 c=11", "xorc d=0 c=12 imm=0x038449c7", "addc d=6 c=0 imm=0x2b0bf2e9", "add d=9 c=6", "add d=1 c=9", "xrot d=3 c=1 k=26", "mul d=9 c=3", "mulc2 d=13 c=9 imm=0xabfb518d", "orx d=11 c=13 b=14", "xor d=6 c=11", "addc d=3 c=6 imm=0xbf050303", "add d=9 c=3", "mul d=8 c=9", "add d=11 c=8", "xrot d=7 c=11 k=12", "rot d=1 c=7 k=18", "mul d=12 c=1", "sub d=5 c=12", "mul d=11 c=5", "mulc2 d=0 c=11 imm=0x1258c98f", "sub d=2 c=0", "rot d=13 c=2 k=5", "mulc d=15 c=13 imm=0xa9ea982f", "andx d=0 c=15 b=5", "mulc d=14 c=0 imm=0x8e658f2d", "rot d=7 c=14 k=28", "mulc d=4 c=7 imm=0xdffb5283", "rot d=9 c=4 k=18", "rot d=5 c=9 k=30", "addc d=11 c=5 imm=0x67a75c51", "rot d=3 c=11 k=13", "add d=9 c=3", "xorc d=1 c=9 imm=0xc25226c4", "mul d=7 c=1", "xor d=12 c=7", "xrot d=3 c=12 k=8", "rot d=0 c=3 k=13", "xrot d=9 c=0 k=9", "xor d=14 c=9", "sub d=0 c=14", "rot d=12 c=0 k=4", "addc d=6 c=12 imm=0x8a7a83b1", "addc d=12 c=6 imm=0xce44f768", "xorc d=13 c=12 imm=0xa265fddc", "xrot d=3 c=13 k=28", "add d=2 c=3", "mulc d=4 c=2 imm=0xfaf1f025", "mul d=5 c=4", "mulc d=13 c=5 imm=0x1bde9b5d", "orx d=2 c=13 b=0", "xor d=12 c=2", "add d=11 c=12", "mul d=2 c=11", "rot d=11 c=2 k=20", "mul d=1 c=11", "rot d=5 c=1 k=17", "rot d=0 c=5 k=7", "xor d=11 c=0", "sub d=5 c=11", "mul d=8 c=5", "mul d=10 c=8", "addc d=13 c=10 imm=0xc1818321", "xor d=4 c=13", "rot d=1 c=4 k=12", "xrot d=15 c=1 k=20", "mul d=11 c=15", "mul d=13 c=11", "xor d=8 c=13", "mulc d=5 c=8 imm=0xcb34052b", "xrot d=12 c=5 k=24", "xrot d=5 c=12 k=12", "rot d=9 c=5 k=4", "mulc2 d=12 c=9 imm=0x44487769", "add d=3 c=12", "mulc2 d=7 c=3 imm=0x3d0dc719", "rot d=12 c=7 k=25", "mulc d=14 c=12 imm=0x0a26f463", "xorc d=5 c=14 imm=0x7e263a26", "rot d=11 c=5 k=29", "sub d=14 c=11", "mulc d=12 c=14 imm=0x05fc47af", "xor d=11 c=12", "add d=7 c=11", "sub d=8 c=7", "xor d=4 c=8", "xor d=7 c=4", "xor d=11 c=7", "rot d=12 c=11 k=18", "orx d=7 c=12 b=9", "xor d=12 c=7", "addc d=1 c=12 imm=0x47217177", "mulc d=12 c=1 imm=0x60a7a2a1", "xor d=11 c=12", "xrot d=13 c=11 k=20", "xor d=11 c=13", "xor d=6 c=11", "mul d=0 c=6", "mul d=15 c=0", "xrot d=11 c=15 k=4", "xrot d=9 c=11 k=20", "mulc d=0 c=9 imm=0xe7aae81f", "mul d=6 c=0", "add d=15 c=6", "addc d=3 c=15 imm=0x6bbe960a", "sub d=12 c=3", "mul d=8 c=12", "mulc2 d=11 c=8 imm=0xcc54856f", "mulc d=3 c=11 imm=0x65049d67", "sub d=1 c=3", "mul d=3 c=1", "mul d=0 c=3", "mul d=12 c=0", "mul d=2 c=12", "sub d=12 c=2", "xor d=6 c=12", "mulc2 d=13 c=6 imm=0xfd8e78e7", "xorc d=4 c=13 imm=0x36001de6", "add d=3 c=4", "sub d=6 c=3", "mul d=4 c=6", "mul d=10 c=4", "xor d=7 c=10", "xorc d=13 c=7 imm=0x3cc162e5", "mulc d=2 c=13 imm=0xc6b38d29", "xorc d=8 c=2 imm=0x43ac5ec1", "orx d=0 c=8 b=14", "addc d=3 c=0 imm=0xc94402c6", "mulc d=8 c=3 imm=0x40a11c6d", "xrot d=1 c=8 k=9", "mulc d=2 c=1 imm=0x10ebfae9", "addc d=8 c=2 imm=0x2e5cffd4", "rot d=0 c=8 k=4", "mul d=2 c=0", "xorc d=9 c=2 imm=0xea63f112", "xrot d=4 c=9 k=20", "orx d=12 c=4 b=0", "rot d=6 c=12 k=28", "xor d=11 c=6", "mulc d=2 c=11 imm=0xb92e6187", "add d=6 c=2", "orx d=10 c=6 b=2", "xor d=8 c=10", "xor d=11 c=8", "rot d=12 c=11 k=12", "mulc2 d=8 c=12 imm=0xcf6e39cb", "addc d=7 c=8 imm=0x07e25ae6", "mulc d=1 c=7 imm=0x6550efdd", "addc d=15 c=1 imm=0xcd15560f", "xor d=13 c=15", "rot d=4 c=13 k=16", "mulc d=12 c=4 imm=0x7129239f", "xor d=9 c=12", "xrot d=6 c=9 k=25", "rot d=7 c=6 k=9", "xor d=2 c=7", "rot d=5 c=2 k=27", "sub d=1 c=5", "mulc2 d=8 c=1 imm=0x1c6b90b7", "add d=14 c=8", "mul d=3 c=14", "sub d=15 c=3", "mulc2 d=5 c=15 imm=0x1b17414f", "xorc d=11 c=5 imm=0xd6b8f316", "rot d=9 c=11 k=25", "mulc d=0 c=9 imm=0x36fce4cd", "mulc d=11 c=0 imm=0x3ffedbed", "xrot d=6 c=11 k=28", "rot d=0 c=6 k=26", "xor d=1 c=0", "mulc d=7 c=1 imm=0x4dfcedeb", "rot d=15 c=7 k=26", "mulc d=14 c=15 imm=0x6c9326ed", "xrot d=4 c=14 k=23", "add d=9 c=4", "add d=10 c=9", "add d=1 c=10", "xrot d=4 c=1 k=19", "add d=9 c=4", "add d=13 c=9", "rot d=15 c=13 k=6", "rot d=6 c=15 k=13", "mul d=1 c=6", "mulc2 d=11 c=1 imm=0x0aa13acf", "mulc d=7 c=11 imm=0xf0f30943", "rot d=11 c=7 k=5", "xor d=12 c=11", "xor d=6 c=12", "xor d=3 c=6", "rot d=14 c=3 k=11", "xrot d=12 c=14 k=8", "mul d=13 c=12", "sub d=15 c=13", "mulc2 d=9 c=15 imm=0x111b0ab9", "xrot d=0 c=9 k=2", "xorc d=13 c=0 imm=0x208f1223", "mulc d=1 c=13 imm=0x8697b4f3", "mulc2 d=4 c=1 imm=0xf7e4eb9b", "xrot d=12 c=4 k=20", "xrot d=6 c=12 k=16", "addc d=7 c=6 imm=0xb04cedcc", "andx d=9 c=7 b=12", "xrot d=15 c=9 k=8", "mulc2 d=14 c=15 imm=0xba13bfd9", "rot d=6 c=14 k=30", "xorc d=2 c=6 imm=0xe3a68481", "xorc d=3 c=2 imm=0xdb295442", "sub d=6 c=3", "mul d=3 c=6", "xor d=14 c=3", "add d=6 c=14", "add d=0 c=6", "xorc d=13 c=0 imm=0x2ce62ec8", "sub d=9 c=13", "mulc d=6 c=9 imm=0xb3667f91", "xorc d=12 c=6 imm=0xa40ba390", "add d=0 c=12", "mulc d=13 c=0 imm=0xcf132dbd", "xorc d=8 c=13 imm=0xc01a2e22", "rot d=15 c=8 k=29", "rot d=4 c=15 k=6", "addc d=12 c=4 imm=0xa106f25f", "rot d=10 c=12 k=2", "xor d=1 c=10", "mulc2 d=4 c=1 imm=0xd693bf07", "xor d=8 c=4", "add d=15 c=8", "mulc d=2 c=15 imm=0x451147c5", "add d=6 c=2", "xorc d=4 c=6 imm=0x95c3d40a", "xor d=8 c=4", "xrot d=6 c=8 k=24", "mulc2 d=8 c=6 imm=0xfacd20cd", "mul d=3 c=8", "mulc2 d=0 c=3 imm=0xf8f86c91", "mul d=9 c=0", "xor d=1 c=9", "xor d=13 c=1", "mul d=14 c=13", "addc d=0 c=14 imm=0x29396640", "mul d=6 c=0", "sub d=13 c=6", "xor d=4 c=13", "rot d=10 c=4 k=29", "rot d=11 c=10 k=14", "rot d=8 c=11 k=14", "mulc d=12 c=8 imm=0x7c958209", "xorc d=14 c=12 imm=0x6e81c671", "xor d=6 c=14", "addc d=5 c=6 imm=0xe6b449c9", "andx d=7 c=5 b=12", "rot d=8 c=7 k=8", "mulc2 d=7 c=8 imm=0x3076e64f", "mulc2 d=15 c=7 imm=0x4f3224df", "xrot d=9 c=15 k=24", "mulc2 d=5 c=9 imm=0x71865ddb", "addc d=2 c=5 imm=0xbd3e3e01", "xrot d=4 c=2 k=14", "mulc d=0 c=4 imm=0x6b745769", "sub d=9 c=0", "xor d=4 c=9", "xrot d=6 c=4 k=2", "orx d=8 c=6 b=10", "mul d=1 c=8", "orx d=14 c=1 b=6", "mul d=6 c=14", "xrot d=13 c=6 k=19", "mul d=4 c=13", "xorc d=10 c=4 imm=0xd06e492d", "xorc d=9 c=10 imm=0x6d1c0c53", "xor d=14 c=9", "andx d=13 c=14 b=10", "orx d=1 c=13 b=4", "xrot d=11 c=1 k=30", "add d=0 c=11", "andx d=2 c=0 b=13", "sub d=0 c=2", "mulc2 d=12 c=0 imm=0x615420d7", "andx d=11 c=12 b=3", "rot d=1 c=11 k=31", "xrot d=2 c=1 k=12", "xor d=12 c=2", "xor d=8 c=12", "sub d=6 c=8", "xor d=10 c=6", "xor d=14 c=10", "xrot d=15 c=14 k=22", "mul d=6 c=15", "xor d=1 c=6", "mulc2 d=12 c=1 imm=0x513c5869", "xrot d=6 c=12 k=21", "xor d=9 c=6", "add d=0 c=9", "xor d=12 c=0", "add d=5 c=12", "xrot d=6 c=5 k=4", "xor d=1 c=6", "mul d=4 c=1", "mulc2 d=6 c=4 imm=0xb444bcc1", "xor d=8 c=6", "xorc d=7 c=8 imm=0x1a883d74", "xrot d=10 c=7 k=8", "rot d=9 c=10 k=16", "add d=6 c=9", "xor d=2 c=6", "rot d=14 c=2 k=8", "orx d=9 c=14 b=11", "mul d=15 c=9", "rot d=9 c=15 k=9", "rot d=8 c=9 k=9", "xor d=7 c=8", "xor d=5 c=7", "xor d=11 c=5", "mul d=4 c=11", "mul d=8 c=4", "orx d=12 c=8 b=2", "mulc2 d=13 c=12 imm=0xed36b1e7", "xor d=1 c=13", "mul d=2 c=1", "mulc2 d=5 c=2 imm=0x20dd61c9", "addc d=9 c=5 imm=0x4221406c", "mulc d=2 c=9 imm=0xbd437fb1", "xor d=10 c=2", "orx d=8 c=10 b=4", "add d=1 c=8", "mul d=15 c=1", "mul d=10 c=15", "sub d=4 c=10", "addc d=12 c=4 imm=0x2cc4a200", "xor d=6 c=12", "addc d=11 c=6 imm=0x24df7960", "sub d=13 c=11", "xor d=4 c=13", "sub d=1 c=4", "xrot d=3 c=1 k=7", "add d=1 c=3", "add d=9 c=1", "xor d=3 c=9", "andx d=6 c=3 b=0", "sub d=13 c=6", "mul d=2 c=13", "rot d=5 c=2 k=5", "mul d=1 c=5", "mulc d=3 c=1 imm=0x290a4cdd", "mulc d=7 c=3 imm=0x05557b07", "xrot d=3 c=7 k=7", "add d=9 c=3", "xor d=14 c=9", "mulc d=0 c=14 imm=0x84c021f1", "xor d=14 c=0", "sub d=3 c=14", "mulc2 d=1 c=3 imm=0x6d78fdd7", "mulc d=5 c=1 imm=0x5e5c9e7b", "add d=12 c=5", "orx d=8 c=12 b=3", "addc d=13 c=8 imm=0x4759e773", "add d=15 c=13", "mulc d=3 c=15 imm=0x6664f1fd", "mul d=6 c=3", "mulc d=11 c=6 imm=0x4e530d13", "mul d=5 c=11", "addc d=1 c=5 imm=0x3dd89a81", "rot d=14 c=1 k=6", "rot d=9 c=14 k=2", "add d=14 c=9", "xrot d=10 c=14 k=31", "add d=12 c=10", "andx d=7 c=12 b=11", "add d=13 c=7", "rot d=4 c=13 k=4", "andx d=3 c=4 b=10", "andx d=5 c=3 b=11", "rot d=4 c=5 k=22", "sub d=3 c=4", "andx d=5 c=3 b=12", "sub d=2 c=5", "mulc d=9 c=2 imm=0x009bbf5b", "add d=4 c=9", "xrot d=15 c=4 k=25", "xrot d=7 c=15 k=20", "add d=10 c=7", "mulc2 d=4 c=10 imm=0x4bdd1ef7", "andx d=14 c=4 b=2", "mulc d=9 c=14 imm=0x52fb945d", "add d=12 c=9", "xor d=9 c=12", "xrot d=2 c=9 k=11", "addc d=11 c=2 imm=0x98f50a09", "addc d=15 c=11 imm=0xd43ed388", "addc d=10 c=15 imm=0x2f9a932b", "andx d=12 c=10 b=15", "mul d=8 c=12", "addc d=12 c=8 imm=0xd453117d", "orx d=1 c=12 b=2", "add d=5 c=1", "add d=1 c=5", "sub d=14 c=1", "sub d=8 c=14", "sub d=10 c=8", "andx d=13 c=10 b=5", "xrot d=5 c=13 k=21", "mulc d=13 c=5 imm=0x664791df", "sub d=15 c=13", "add d=3 c=15", "mul d=5 c=3", "mulc d=2 c=5 imm=0x93635545", "xorc d=8 c=2 imm=0xfd3c4040", "xorc d=12 c=8 imm=0x16edb512", "xorc d=1 c=12 imm=0x16c54637", "orx d=4 c=1 b=10", "add d=1 c=4", "andx d=13 c=1 b=6", "addc d=7 c=13 imm=0x3d8c4dc2", "add d=15 c=7", "mulc d=14 c=15 imm=0xa280205d", "addc d=8 c=14 imm=0xea00510e", "addc d=15 c=8 imm=0x22e3c715", "xor d=8 c=15", "xor d=4 c=8", "xrot d=11 c=4 k=20", "add d=0 c=11", "rot d=13 c=0 k=15", "xor d=14 c=13", "xor d=0 c=14", "sub d=10 c=0", "mulc2 d=14 c=10 imm=0x93e04059", "addc d=0 c=14 imm=0x5e852243", "add d=9 c=0", "xorc d=11 c=9 imm=0x6a38274e", "xor d=6 c=11", "xorc d=9 c=6 imm=0x45fe04e0", "xor d=15 c=9", "xrot d=2 c=15 k=2", "xor d=7 c=2", "rot d=3 c=7 k=25", "add d=4 c=3", "xrot d=0 c=4 k=30", "xor d=14 c=0", "add d=9 c=14", "mulc2 d=1 c=9 imm=0x3f7558f3", "mulc2 d=4 c=1 imm=0xe3e44fb9", "mul d=11 c=4", "add d=1 c=11", "xor d=9 c=1", "mul d=12 c=9", "xorc d=13 c=12 imm=0xde1987e8", "andx d=11 c=13 b=12", "mul d=8 c=11", "addc d=4 c=8 imm=0x607d6073", "rot d=0 c=4 k=10", "mulc d=7 c=0 imm=0x7b248651", "rot d=1 c=7 k=19", "add d=6 c=1", "add d=9 c=6", "sub d=5 c=9", "add d=0 c=5", "xrot d=6 c=0 k=28", "sub d=1 c=6", "addc d=12 c=1 imm=0x2a786432", "rot d=15 c=12 k=28", "addc d=13 c=15 imm=0xcbe2f823", "xrot d=14 c=13 k=1", "mul d=12 c=14", "add d=2 c=12", "sub d=0 c=2", "add d=6 c=0", "rot d=5 c=6 k=22", "sub d=0 c=5", "xorc d=5 c=0 imm=0x2970012d", "xorc d=10 c=5 imm=0xed24a370", "xor d=0 c=10", "mulc2 d=12 c=0 imm=0x41ce9517", "add d=4 c=12", "mulc d=13 c=4 imm=0x2d1ce425", "mulc d=10 c=13 imm=0x97e04693", "xrot d=6 c=10 k=31", "add d=8 c=6", "add d=2 c=8", "sub d=4 c=2", "xrot d=2 c=4 k=5", "xor d=4 c=2", "add d=2 c=4", "mulc d=14 c=2 imm=0x1b32c769", "xor d=13 c=14", "xrot d=5 c=13 k=22", "orx d=6 c=5 b=8", "xrot d=9 c=6 k=29", "add d=10 c=9", "xor d=7 c=10", "xrot d=14 c=7 k=18", "xrot d=10 c=14 k=10", "rot d=2 c=10 k=5", "rot d=5 c=2 k=13", "add d=12 c=5", "mulc d=13 c=12 imm=0x17c1f363", "orx d=9 c=13 b=7", "mul d=13 c=9", "rot d=15 c=13 k=19", "rot d=12 c=15 k=19", "xrot d=11 c=12 k=8"], + ["mulc2 d=8 c=0 imm=0xaecd4a17", "rot d=7 c=8 k=30", "xor d=13 c=7", "xorc d=3 c=13 imm=0x4f2a7676", "xrot d=4 c=3 k=3", "add d=8 c=4", "xor d=0 c=8", "mulc d=8 c=0 imm=0x13ad02a5", "xor d=3 c=8", "add d=8 c=3", "xorc d=12 c=8 imm=0xee807166", "xrot d=5 c=12 k=25", "xor d=1 c=5", "mulc d=7 c=1 imm=0x7f918ce5", "add d=8 c=7", "xorc d=12 c=8 imm=0x0fe3941d", "mul d=6 c=12", "rot d=15 c=6 k=30", "add d=8 c=15", "xor d=4 c=8", "sub d=3 c=4", "add d=0 c=3", "andx d=2 c=0 b=5", "add d=10 c=2", "xor d=2 c=10", "sub d=6 c=2", "add d=5 c=6", "orx d=14 c=5 b=3", "orx d=11 c=14 b=3", "add d=13 c=11", "rot d=8 c=13 k=26", "xrot d=1 c=8 k=12", "andx d=11 c=1 b=8", "xrot d=14 c=11 k=10", "xrot d=7 c=14 k=25", "mulc d=5 c=7 imm=0x3ef9db3b", "add d=8 c=5", "add d=12 c=8", "mul d=10 c=12", "xorc d=5 c=10 imm=0x3ac44be6", "mulc2 d=14 c=5 imm=0xdd348ca1", "xorc d=3 c=14 imm=0xfd694e31", "xor d=7 c=3", "xorc d=6 c=7 imm=0x1c8fa07e", "xor d=4 c=6", "xor d=2 c=4", "sub d=9 c=2", "mul d=3 c=9", "add d=9 c=3", "xor d=13 c=9", "xrot d=5 c=13 k=11", "mulc d=1 c=5 imm=0x41737ac3", "andx d=10 c=1 b=13", "sub d=13 c=10", "addc d=5 c=13 imm=0xef8b331e", "add d=14 c=5", "add d=2 c=14", "mul d=3 c=2", "xrot d=2 c=3 k=17", "xor d=11 c=2", "mulc d=3 c=11 imm=0xe116294b", "mul d=2 c=3", "xor d=6 c=2", "mul d=2 c=6", "xorc d=12 c=2 imm=0x53bea191", "mul d=14 c=12", "xor d=10 c=14", "mul d=4 c=10", "xorc d=2 c=4 imm=0xced418d2", "mulc2 d=5 c=2 imm=0xe51463cb", "xor d=2 c=5", "orx d=6 c=2 b=3", "andx d=9 c=6 b=15", "mulc d=0 c=9 imm=0x52fd974d", "xrot d=15 c=0 k=8", "xor d=14 c=15", "xrot d=8 c=14 k=15", "xor d=12 c=8", "rot d=7 c=12 k=9", "xorc d=3 c=7 imm=0x86710ff9", "sub d=13 c=3", "xor d=3 c=13", "rot d=5 c=3 k=29", "orx d=7 c=5 b=8", "add d=6 c=7", "xor d=13 c=6", "xor d=5 c=13", "sub d=13 c=5", "xor d=4 c=13", "rot d=0 c=4 k=28", "sub d=2 c=0", "mul d=10 c=2", "mulc d=0 c=10 imm=0x4bce676d", "add d=9 c=0", "xor d=15 c=9", "xrot d=5 c=15 k=29", "xor d=1 c=5", "xor d=10 c=1", "sub d=3 c=10", "sub d=4 c=3", "xrot d=5 c=4 k=21", "xor d=8 c=5", "add d=4 c=8", "xrot d=11 c=4 k=22", "xor d=7 c=11", "xorc d=11 c=7 imm=0x678e4d82", "mulc d=7 c=11 imm=0x3b4b50bf", "add d=12 c=7", "mul d=15 c=12", "xrot d=3 c=15 k=7", "rot d=0 c=3 k=11", "sub d=4 c=0", "xor d=3 c=4", "xor d=11 c=3", "mul d=4 c=11", "sub d=2 c=4", "sub d=1 c=2", "xor d=9 c=1", "sub d=11 c=9", "xor d=9 c=11", "mulc d=10 c=9 imm=0x5a972bef", "andx d=7 c=10 b=4", "mulc d=15 c=7 imm=0xac20e017", "xrot d=3 c=15 k=5", "sub d=10 c=3", "mul d=5 c=10", "add d=6 c=5", "xrot d=15 c=6 k=3", "mulc d=4 c=15 imm=0xbeaf0ba9", "mul d=9 c=4", "xor d=12 c=9", "xor d=8 c=12", "mul d=14 c=8", "xrot d=6 c=14 k=16", "add d=10 c=6", "add d=1 c=10", "xor d=3 c=1", "sub d=9 c=3", "add d=6 c=9", "rot d=15 c=6 k=13", "andx d=10 c=15 b=1", "rot d=3 c=10 k=3", "rot d=9 c=3 k=11", "xorc d=2 c=9 imm=0x8f89660f", "xrot d=0 c=2 k=21", "mulc d=13 c=0 imm=0x486a43b3", "add d=10 c=13", "xor d=4 c=10", "xor d=14 c=4", "xor d=2 c=14", "addc d=7 c=2 imm=0xd5248764", "xor d=1 c=7", "andx d=5 c=1 b=14", "mul d=8 c=5", "add d=14 c=8", "sub d=4 c=14", "rot d=6 c=4 k=1", "xrot d=3 c=6 k=25", "rot d=9 c=3 k=10", "add d=7 c=9", "add d=4 c=7", "mulc d=2 c=4 imm=0xf5d8c485", "mul d=13 c=2", "xor d=8 c=13", "xor d=12 c=8", "addc d=0 c=12 imm=0xcbe96ecf", "add d=10 c=0", "add d=4 c=10", "xor d=15 c=4", "mul d=11 c=15", "mulc2 d=4 c=11 imm=0x8a37f349", "add d=2 c=4", "xrot d=10 c=2 k=14", "add d=12 c=10", "xor d=7 c=12", "mulc d=6 c=7 imm=0x5d00c42d", "xor d=0 c=6", "xor d=11 c=0", "add d=15 c=11", "add d=8 c=15", "xor d=11 c=8", "andx d=8 c=11 b=7", "sub d=15 c=8", "sub d=2 c=15", "add d=14 c=2", "add d=5 c=14", "andx d=11 c=5 b=8", "xorc d=3 c=11 imm=0xe126a36d", "add d=10 c=3", "add d=14 c=10", "xorc d=8 c=14 imm=0x52400d07", "mul d=12 c=8", "andx d=15 c=12 b=11", "xrot d=3 c=15 k=1", "addc d=12 c=3 imm=0xd372258f", "xorc d=4 c=12 imm=0xf284d169", "sub d=11 c=4", "rot d=13 c=11 k=1", "mul d=5 c=13", "mul d=13 c=5", "mul d=0 c=13", "xor d=9 c=0", "mulc2 d=1 c=9 imm=0xb05d4c01", "sub d=8 c=1", "add d=1 c=8", "rot d=4 c=1 k=31", "xor d=6 c=4", "andx d=7 c=6 b=4", "addc d=10 c=7 imm=0xc4e27d81", "add d=5 c=10", "mul d=3 c=5", "addc d=12 c=3 imm=0xeb606a4a", "xorc d=11 c=12 imm=0x25bef1a4", "mul d=15 c=11", "addc d=13 c=15 imm=0x2f08e9bb", "add d=14 c=13", "xor d=1 c=14", "mul d=9 c=1", "add d=12 c=9", "mul d=6 c=12", "orx d=7 c=6 b=1", "add d=13 c=7", "rot d=7 c=13 k=1", "rot d=5 c=7 k=5", "mul d=1 c=5", "mulc d=14 c=1 imm=0x050194b7", "add d=15 c=14", "xrot d=9 c=15 k=18", "mulc2 d=13 c=9 imm=0xb23e5f33", "rot d=11 c=13 k=3", "add d=10 c=11", "mul d=11 c=10", "xor d=3 c=11", "xrot d=6 c=3 k=4", "andx d=0 c=6 b=1", "add d=10 c=0", "rot d=12 c=10 k=20", "mul d=1 c=12", "mul d=6 c=1", "add d=7 c=6", "xor d=5 c=7", "xor d=13 c=5", "xor d=7 c=13", "xor d=6 c=7", "mul d=11 c=6", "xrot d=7 c=11 k=9", "xorc d=8 c=7 imm=0x619be41b", "mulc d=4 c=8 imm=0xa41b1063", "mulc d=8 c=4 imm=0x39fd4b17", "add d=12 c=8", "xrot d=0 c=12 k=17", "orx d=1 c=0 b=12", "xrot d=3 c=1 k=26", "add d=15 c=3", "xorc d=2 c=15 imm=0xac74167c", "add d=4 c=2", "add d=7 c=4", "andx d=3 c=7 b=5", "xor d=6 c=3", "xor d=4 c=6", "sub d=15 c=4", "orx d=3 c=15 b=11", "add d=4 c=3", "xrot d=8 c=4 k=2", "orx d=14 c=8 b=3", "mulc2 d=6 c=14 imm=0x88bcb913", "rot d=2 c=6 k=26", "mul d=9 c=2", "addc d=4 c=9 imm=0xf68758d3", "xorc d=11 c=4 imm=0xe7cb0a2d", "xor d=15 c=11", "xrot d=0 c=15 k=10", "xorc d=1 c=0 imm=0x01a1a184", "add d=2 c=1", "rot d=6 c=2 k=6", "xrot d=12 c=6 k=18", "andx d=14 c=12 b=13", "add d=15 c=14", "mulc2 d=4 c=15 imm=0x45d3b6d1", "addc d=15 c=4 imm=0x287abc40", "mul d=12 c=15", "mul d=7 c=12", "add d=8 c=7", "xrot d=15 c=8 k=31", "mulc d=14 c=15 imm=0x4d24e02f", "addc d=0 c=14 imm=0x2e93de43", "xor d=9 c=0", "sub d=1 c=9", "addc d=4 c=1 imm=0x7018f3c1", "xrot d=5 c=4 k=22", "mulc d=4 c=5 imm=0x5d42c6b7", "rot d=1 c=4 k=19", "mul d=10 c=1", "mulc d=6 c=10 imm=0xb3b283dd", "orx d=0 c=6 b=4", "xrot d=4 c=0 k=10", "rot d=2 c=4 k=18", "addc d=3 c=2 imm=0xf72224c1", "xor d=2 c=3", "xor d=6 c=2", "rot d=11 c=6 k=26", "sub d=13 c=11", "add d=8 c=13", "add d=6 c=8", "xrot d=2 c=6 k=2", "mulc d=3 c=2 imm=0xe72cd1e5", "xor d=10 c=3", "mulc d=9 c=10 imm=0xdaae888f", "xrot d=12 c=9 k=13", "add d=13 c=12", "addc d=12 c=13 imm=0x1bf086c5", "add d=10 c=12", "rot d=5 c=10 k=20", "mulc d=13 c=5 imm=0x332136d3", "xrot d=0 c=13 k=30", "orx d=2 c=0 b=7", "xorc d=1 c=2 imm=0x906c1640", "orx d=8 c=1 b=13", "xrot d=13 c=8 k=27", "mulc d=4 c=13 imm=0x8f6a7f2d", "xor d=10 c=4", "mul d=6 c=10", "xor d=3 c=6", "sub d=2 c=3", "orx d=10 c=2 b=14", "xor d=4 c=10", "xrot d=7 c=4 k=13", "add d=15 c=7", "add d=6 c=15", "orx d=3 c=6 b=9", "xrot d=4 c=3 k=14", "addc d=13 c=4 imm=0xfa50a754", "xor d=12 c=13", "rot d=14 c=12 k=10", "add d=3 c=14", "sub d=8 c=3", "rot d=12 c=8 k=11", "mulc2 d=8 c=12 imm=0x68315979", "xorc d=3 c=8 imm=0x0c36ecd9", "mul d=11 c=3", "mul d=15 c=11", "mul d=10 c=15", "xor d=5 c=10", "rot d=9 c=5 k=7", "mulc2 d=6 c=9 imm=0xb4800e07", "addc d=14 c=6 imm=0xe2b19752", "addc d=6 c=14 imm=0x5b6cb907", "xor d=14 c=6", "andx d=3 c=14 b=10", "mul d=7 c=3", "addc d=1 c=7 imm=0x072137be", "andx d=0 c=1 b=8", "add d=8 c=0", "addc d=9 c=8 imm=0x02e4e39b", "addc d=14 c=9 imm=0xe9bf76a8", "xor d=2 c=14", "mulc2 d=0 c=2 imm=0x76da5405", "xrot d=10 c=0 k=20", "add d=13 c=10", "xrot d=7 c=13 k=27", "add d=1 c=7", "rot d=12 c=1 k=4", "mulc2 d=5 c=12 imm=0xfc599aed", "sub d=10 c=5", "add d=0 c=10", "xrot d=8 c=0 k=10", "xor d=11 c=8", "add d=14 c=11", "sub d=2 c=14", "addc d=12 c=2 imm=0x573e5081", "xorc d=0 c=12 imm=0x571e5302", "xor d=2 c=0", "xor d=5 c=2", "xorc d=8 c=5 imm=0xdac0ab44", "xrot d=11 c=8 k=6", "add d=0 c=11", "add d=2 c=0", "xor d=6 c=2", "rot d=2 c=6 k=31", "add d=11 c=2", "add d=12 c=11", "addc d=2 c=12 imm=0xc9a167b4", "add d=5 c=2", "add d=2 c=5", "xor d=9 c=2", "mulc d=12 c=9 imm=0x813582c9", "add d=2 c=12", "xrot d=3 c=2 k=8", "mul d=5 c=3", "add d=4 c=5", "mul d=3 c=4", "mul d=6 c=3", "rot d=3 c=6 k=21", "add d=12 c=3", "sub d=5 c=12", "mulc2 d=3 c=5 imm=0x9fa250c7", "orx d=15 c=3 b=12", "andx d=14 c=15 b=11", "add d=6 c=14", "add d=4 c=6", "mulc2 d=3 c=4 imm=0x07092e11", "xrot d=4 c=3 k=9", "mul d=11 c=4", "add d=6 c=11", "mul d=10 c=6", "mul d=6 c=10", "xor d=4 c=6", "rot d=12 c=4 k=28", "xor d=10 c=12", "add d=8 c=10", "mulc d=15 c=8 imm=0x23fc87d7", "add d=3 c=15", "xor d=8 c=3", "mulc2 d=5 c=8 imm=0x4812e6c5", "sub d=11 c=5", "mul d=0 c=11", "mul d=7 c=0", "xor d=10 c=7", "orx d=12 c=10 b=5", "xor d=5 c=12", "mul d=0 c=5", "sub d=15 c=0", "rot d=8 c=15 k=23", "mulc2 d=13 c=8 imm=0x83e86a8b", "add d=7 c=13", "mulc d=11 c=7 imm=0xd510d0b1", "mul d=7 c=11", "xrot d=2 c=7 k=11", "mul d=13 c=2", "xor d=1 c=13", "xor d=9 c=1", "sub d=8 c=9", "add d=1 c=8", "add d=2 c=1", "sub d=1 c=2", "mulc d=12 c=1 imm=0x1205ac95", "rot d=3 c=12 k=22", "xor d=0 c=3", "xorc d=1 c=0 imm=0xa613bb86", "addc d=12 c=1 imm=0x5cc04f4b", "sub d=3 c=12", "mulc d=6 c=3 imm=0xff2c5e5d", "sub d=7 c=6", "xrot d=2 c=7 k=20", "mulc d=13 c=2 imm=0xc3c13b61", "xor d=6 c=13", "xor d=13 c=6", "rot d=5 c=13 k=11", "add d=9 c=5", "xor d=15 c=9", "mulc d=6 c=15 imm=0xd0ff64bb", "xrot d=15 c=6 k=17", "andx d=10 c=15 b=5", "xrot d=13 c=10 k=22", "add d=2 c=13", "xorc d=5 c=2 imm=0x434fd088", "andx d=7 c=5 b=2", "xor d=13 c=7", "rot d=3 c=13 k=22", "add d=12 c=3", "xor d=5 c=12", "xrot d=9 c=5 k=8", "mul d=5 c=9", "addc d=14 c=5 imm=0x3680f66d", "add d=15 c=14", "sub d=12 c=15", "mul d=4 c=12", "andx d=7 c=4 b=6", "rot d=3 c=7 k=2", "rot d=6 c=3 k=5", "add d=10 c=6", "andx d=4 c=10 b=3", "xor d=0 c=4", "xor d=12 c=0", "xor d=15 c=12", "orx d=6 c=15 b=7", "add d=3 c=6", "rot d=9 c=3 k=2", "add d=15 c=9", "xrot d=9 c=15 k=6", "rot d=2 c=9 k=28", "mulc d=7 c=2 imm=0x49571301", "rot d=10 c=7 k=8", "rot d=9 c=10 k=22", "mul d=2 c=9", "mulc2 d=7 c=2 imm=0x461c2c9b", "add d=4 c=7", "add d=12 c=4", "xrot d=1 c=12 k=30", "xorc d=11 c=1 imm=0x41684119", "xor d=6 c=11", "mul d=5 c=6", "xorc d=12 c=5 imm=0x5e252f68", "xrot d=15 c=12 k=13", "mulc2 d=0 c=15 imm=0xcfa728bb", "add d=7 c=0", "mul d=3 c=7", "mulc d=5 c=3 imm=0x4c101bb3", "sub d=13 c=5", "add d=12 c=13", "sub d=13 c=12", "xor d=15 c=13", "mulc d=5 c=15 imm=0xffd85c8d", "rot d=4 c=5 k=21", "xor d=7 c=4", "rot d=12 c=7 k=16", "sub d=11 c=12", "rot d=3 c=11 k=17", "xor d=7 c=3", "sub d=0 c=7", "xor d=9 c=0", "rot d=7 c=9 k=11", "add d=4 c=7", "xor d=1 c=4", "mulc2 d=8 c=1 imm=0xd56caf87", "sub d=15 c=8", "xor d=12 c=15", "xor d=7 c=12", "sub d=15 c=7", "addc d=10 c=15 imm=0x32455b49", "xrot d=12 c=10 k=6", "xorc d=5 c=12 imm=0x024545fb", "add d=12 c=5", "xorc d=10 c=12 imm=0xc7112001", "mulc d=1 c=10 imm=0xa0829e23", "mul d=7 c=1", "mulc d=15 c=7 imm=0x42ed41f9", "rot d=12 c=15 k=12", "addc d=3 c=12 imm=0xfc638f44", "xor d=8 c=3", "sub d=12 c=8", "orx d=8 c=12 b=4", "xor d=14 c=8", "add d=4 c=14", "xorc d=0 c=4 imm=0x4890174a", "add d=14 c=0", "add d=10 c=14", "sub d=1 c=10", "xor d=4 c=1", "mul d=7 c=4", "mul d=4 c=7", "xor d=7 c=4", "mulc d=2 c=7 imm=0x14382f11", "mul d=1 c=2", "xor d=15 c=1", "xrot d=5 c=15 k=4", "mulc d=12 c=5 imm=0x818ffff7", "xorc d=13 c=12 imm=0x3c40017d", "rot d=10 c=13 k=6", "mulc2 d=12 c=10 imm=0x2c1775d5", "orx d=8 c=12 b=11", "rot d=1 c=8 k=4", "addc d=8 c=1 imm=0x0134d33f", "xrot d=5 c=8 k=18", "sub d=10 c=5", "add d=14 c=10", "xrot d=2 c=14 k=26", "add d=10 c=2", "xrot d=5 c=10 k=25", "add d=3 c=5", "sub d=15 c=3", "andx d=6 c=15 b=14", "sub d=12 c=6", "sub d=5 c=12", "addc d=6 c=5 imm=0x35380dd4", "xor d=9 c=6", "rot d=4 c=9 k=12", "mulc d=12 c=4 imm=0x88440653", "add d=5 c=12", "xrot d=6 c=5 k=22", "xrot d=11 c=6 k=31", "xrot d=5 c=11 k=11", "addc d=4 c=5 imm=0xc2928041", "sub d=2 c=4", "xor d=12 c=2", "xor d=2 c=12", "xorc d=10 c=2 imm=0x18d1c7f6", "mulc d=12 c=10 imm=0xe5af4085", "sub d=0 c=12", "addc d=13 c=0 imm=0xbab4883e", "xrot d=5 c=13 k=28", "mulc d=1 c=5 imm=0x22410953", "rot d=10 c=1 k=12", "mulc d=1 c=10 imm=0xb2399be7", "addc d=8 c=1 imm=0x705befa8", "rot d=6 c=8 k=4", "xor d=5 c=6", "addc d=8 c=5 imm=0x17cc5e00", "sub d=4 c=8", "xor d=5 c=4", "add d=15 c=5", "xor d=8 c=15", "add d=12 c=8", "sub d=3 c=12", "add d=11 c=3", "rot d=12 c=11 k=2", "mulc2 d=3 c=12 imm=0xd6adb5cb", "add d=6 c=3", "mulc d=5 c=6 imm=0x712deca1", "add d=8 c=5", "mul d=13 c=8", "xorc d=7 c=13 imm=0xa85619d9", "addc d=4 c=7 imm=0xb2a236bc", "xrot d=8 c=4 k=2", "sub d=0 c=8", "rot d=13 c=0 k=24", "xor d=4 c=13", "xor d=10 c=4", "xorc d=5 c=10 imm=0x37c54528", "xor d=15 c=5", "xorc d=4 c=15 imm=0x0bec700d", "xor d=0 c=4", "xor d=6 c=0", "andx d=11 c=6 b=8", "andx d=5 c=11 b=1", "xor d=13 c=5", "mul d=2 c=13", "addc d=10 c=2 imm=0xbc7e8198", "xor d=12 c=10", "xor d=3 c=12", "andx d=5 c=3 b=1", "xor d=8 c=5", "add d=11 c=8", "xor d=7 c=11", "addc d=15 c=7 imm=0xfcc72c89", "add d=0 c=15", "mulc2 d=2 c=0 imm=0x7b366e1f", "mulc2 d=4 c=2 imm=0x410f7c31", "add d=14 c=4", "mulc d=8 c=14 imm=0x06b5c483", "xor d=13 c=8", "mul d=4 c=13", "rot d=7 c=4 k=14", "xrot d=12 c=7 k=28", "add d=9 c=12", "xor d=14 c=9", "addc d=0 c=14 imm=0xe2ef88f9", "add d=12 c=0", "mul d=14 c=12", "xor d=1 c=14", "xrot d=12 c=1 k=27", "sub d=6 c=12", "add d=10 c=6", "mul d=11 c=10", "orx d=3 c=11 b=7", "addc d=13 c=3 imm=0x2a6dd670", "add d=12 c=13", "xrot d=14 c=12 k=16", "add d=12 c=14", "xrot d=3 c=12 k=10", "xorc d=7 c=3 imm=0xe2b68ee9", "mul d=13 c=7", "andx d=3 c=13 b=1", "addc d=14 c=3 imm=0x9d70728a", "orx d=4 c=14 b=2", "add d=0 c=4", "sub d=2 c=0", "mul d=10 c=2", "sub d=3 c=10", "addc d=11 c=3 imm=0x1b93fbba", "mulc d=1 c=11 imm=0xad24de07", "xorc d=7 c=1 imm=0xf567e775", "xor d=11 c=7", "mulc d=13 c=11 imm=0xb2957691", "rot d=7 c=13 k=20", "mul d=13 c=7", "add d=10 c=13", "xor d=13 c=10", "xor d=2 c=13", "xor d=6 c=2", "addc d=11 c=6 imm=0xa3624a2a", "sub d=13 c=11", "xrot d=15 c=13 k=23", "rot d=7 c=15 k=20", "sub d=5 c=7", "xor d=0 c=5", "sub d=7 c=0", "add d=4 c=7", "addc d=12 c=4 imm=0x2c1f1085", "xrot d=11 c=12 k=14", "addc d=9 c=11 imm=0xfdecf3f9", "addc d=5 c=9 imm=0x2c06a4fa", "andx d=0 c=5 b=12", "mul d=11 c=0", "rot d=5 c=11 k=22", "rot d=2 c=5 k=23", "mulc d=14 c=2 imm=0x953e8e65", "rot d=1 c=14 k=4", "mulc d=13 c=1 imm=0xb422e8df", "add d=5 c=13", "mulc2 d=8 c=5 imm=0xdd24c5dd", "mul d=15 c=8", "sub d=13 c=15", "add d=5 c=13", "orx d=8 c=5 b=0", "mulc d=4 c=8 imm=0x90f74f8d", "rot d=10 c=4 k=6", "xor d=8 c=10", "mulc d=14 c=8 imm=0x68eea367", "addc d=13 c=14 imm=0x4bf33e83", "mulc d=8 c=13 imm=0xe5bb45ed", "orx d=13 c=8 b=1", "xorc d=15 c=13 imm=0xffc7db9b", "add d=3 c=15", "xor d=0 c=3", "xrot d=15 c=0 k=9", "sub d=12 c=15", "xor d=8 c=12", "addc d=5 c=8 imm=0x8c8db6c6", "sub d=9 c=5", "xor d=4 c=9", "mulc d=1 c=4 imm=0xcdb30e8b", "add d=10 c=1", "rot d=15 c=10 k=19", "mul d=11 c=15", "mulc d=8 c=11 imm=0x1ac4b2f9", "add d=11 c=8", "xrot d=10 c=11 k=2", "sub d=1 c=10", "andx d=6 c=1 b=5", "mulc d=10 c=6 imm=0x7f568bd3", "mulc d=1 c=10 imm=0x9987ff9b", "xorc d=2 c=1 imm=0xc9b72de7", "add d=3 c=2", "xrot d=7 c=3 k=14", "xrot d=1 c=7 k=17", "mul d=11 c=1", "sub d=15 c=11", "xor d=13 c=15", "mul d=5 c=13", "mul d=13 c=5", "add d=9 c=13", "mulc2 d=1 c=9 imm=0xfeea9fa1", "mulc2 d=8 c=1 imm=0xcfe61b7f", "sub d=4 c=8", "addc d=0 c=4 imm=0x73688400"], + ["xorc d=1 c=0 imm=0x7be05e0c", "xorc d=8 c=1 imm=0xbb15eaa7", "mul d=3 c=8", "xrot d=5 c=3 k=14", "rot d=10 c=5 k=22", "xor d=6 c=10", "add d=1 c=6", "mulc d=2 c=1 imm=0x315dc983", "add d=3 c=2", "addc d=12 c=3 imm=0x503a8a69", "andx d=7 c=12 b=8", "mulc d=11 c=7 imm=0x99203cd1", "rot d=13 c=11 k=13", "add d=5 c=13", "mulc d=13 c=5 imm=0x290906f1", "orx d=6 c=13 b=11", "mul d=14 c=6", "add d=10 c=14", "xrot d=12 c=10 k=10", "add d=11 c=12", "andx d=1 c=11 b=8", "addc d=14 c=1 imm=0xb8346947", "mulc2 d=10 c=14 imm=0x973f37cd", "sub d=11 c=10", "mul d=8 c=11", "xor d=14 c=8", "add d=8 c=14", "mulc d=0 c=8 imm=0x82fd2f6d", "andx d=3 c=0 b=5", "add d=10 c=3", "sub d=1 c=10", "xor d=0 c=1", "sub d=5 c=0", "mul d=11 c=5", "xrot d=9 c=11 k=4", "sub d=5 c=9", "xor d=12 c=5", "rot d=15 c=12 k=19", "sub d=5 c=15", "xrot d=15 c=5 k=23", "xorc d=10 c=15 imm=0x3e4fd17b", "andx d=7 c=10 b=13", "xor d=1 c=7", "mulc d=10 c=1 imm=0xa58c234d", "add d=2 c=10", "add d=7 c=2", "xrot d=14 c=7 k=14", "xor d=15 c=14", "xorc d=11 c=15 imm=0x031afa2e", "andx d=8 c=11 b=12", "xrot d=4 c=8 k=14", "mul d=15 c=4", "mul d=14 c=15", "xor d=1 c=14", "xrot d=0 c=1 k=17", "sub d=6 c=0", "xor d=11 c=6", "mul d=7 c=11", "add d=15 c=7", "mulc d=1 c=15 imm=0x65c90267", "xor d=9 c=1", "mulc d=12 c=9 imm=0x37b05dbd", "add d=5 c=12", "addc d=1 c=5 imm=0x9ef7f880", "sub d=13 c=1", "mulc d=8 c=13 imm=0x4dccc6e3", "mul d=15 c=8", "rot d=10 c=15 k=15", "mulc2 d=4 c=10 imm=0xa7087673", "add d=7 c=4", "rot d=4 c=7 k=25", "mulc2 d=1 c=4 imm=0xd0d20eff", "rot d=11 c=1 k=3", "andx d=15 c=11 b=10", "add d=6 c=15", "mul d=10 c=6", "add d=0 c=10", "xor d=15 c=0", "orx d=3 c=15 b=13", "add d=8 c=3", "mulc2 d=13 c=8 imm=0x647918d1", "sub d=4 c=13", "sub d=1 c=4", "sub d=8 c=1", "add d=0 c=8", "xor d=4 c=0", "rot d=2 c=4 k=16", "xrot d=5 c=2 k=2", "sub d=13 c=5", "xor d=14 c=13", "addc d=13 c=14 imm=0x09e91881", "rot d=10 c=13 k=1", "mul d=15 c=10", "rot d=3 c=15 k=22", "mul d=5 c=3", "rot d=0 c=5 k=13", "xor d=2 c=0", "xor d=7 c=2", "add d=4 c=7", "add d=8 c=4", "mul d=12 c=8", "mulc d=4 c=12 imm=0xf334efab", "xor d=11 c=4", "sub d=1 c=11", "add d=5 c=1", "xrot d=14 c=5 k=4", "rot d=7 c=14 k=2", "mulc2 d=12 c=7 imm=0x9d3fac25", "mulc d=10 c=12 imm=0xd7f82753", "mulc d=12 c=10 imm=0xa500b1e9", "andx d=7 c=12 b=11", "add d=3 c=7", "add d=6 c=3", "andx d=13 c=6 b=0", "mul d=15 c=13", "xor d=8 c=15", "xrot d=15 c=8 k=21", "xorc d=4 c=15 imm=0xbf1018b9", "mul d=15 c=4", "addc d=13 c=15 imm=0xa0aadb65", "mulc2 d=3 c=13 imm=0x1c2c8781", "add d=12 c=3", "andx d=4 c=12 b=6", "add d=5 c=4", "xorc d=0 c=5 imm=0x15727cfc", "xor d=1 c=0", "xorc d=3 c=1 imm=0x8ec257da", "add d=12 c=3", "add d=4 c=12", "andx d=1 c=4 b=2", "rot d=14 c=1 k=30", "xorc d=4 c=14 imm=0x871677ed", "sub d=3 c=4", "xorc d=12 c=3 imm=0xafa32cfb", "mul d=0 c=12", "add d=2 c=0", "sub d=10 c=2", "xorc d=15 c=10 imm=0xfb3ab53e", "addc d=0 c=15 imm=0xd703e4c6", "addc d=13 c=0 imm=0xdd7d064e", "xor d=4 c=13", "xor d=1 c=4", "xrot d=7 c=1 k=18", "xrot d=5 c=7 k=5", "sub d=13 c=5", "add d=5 c=13", "mul d=2 c=5", "sub d=7 c=2", "mul d=0 c=7", "xor d=7 c=0", "xorc d=11 c=7 imm=0x47fc5334", "sub d=10 c=11", "rot d=14 c=10 k=7", "mulc d=7 c=14 imm=0xba5f2ba9", "add d=0 c=7", "xor d=9 c=0", "xrot d=12 c=9 k=31", "add d=15 c=12", "addc d=11 c=15 imm=0x67321a5f", "mul d=14 c=11", "xrot d=2 c=14 k=20", "mul d=0 c=2", "orx d=10 c=0 b=6", "xor d=1 c=10", "add d=10 c=1", "mulc2 d=15 c=10 imm=0x968038e9", "rot d=4 c=15 k=6", "xrot d=7 c=4 k=30", "rot d=1 c=7 k=9", "addc d=7 c=1 imm=0x36fd51c7", "xrot d=0 c=7 k=4", "xrot d=9 c=0 k=13", "mulc d=0 c=9 imm=0xe60c1fa9", "mulc2 d=3 c=0 imm=0xb184ef99", "add d=14 c=3", "rot d=11 c=14 k=3", "add d=1 c=11", "xrot d=15 c=1 k=16", "sub d=6 c=15", "mulc d=7 c=6 imm=0x55b55f6f", "mul d=15 c=7", "orx d=4 c=15 b=13", "sub d=5 c=4", "mulc2 d=7 c=5 imm=0xfbc2da35", "mulc d=15 c=7 imm=0x1fd2b55f", "xrot d=0 c=15 k=8", "rot d=7 c=0 k=15", "mulc d=5 c=7 imm=0x4f355b4b", "sub d=4 c=5", "orx d=1 c=4 b=10", "sub d=0 c=1", "xor d=4 c=0", "xor d=15 c=4", "rot d=7 c=15 k=28", "xorc d=3 c=7 imm=0xb688911a", "addc d=1 c=3 imm=0x1c2be1ce", "xor d=0 c=1", "addc d=7 c=0 imm=0x2850aa80", "xrot d=9 c=7 k=10", "add d=6 c=9", "xorc d=13 c=6 imm=0xa94fde4b", "xrot d=1 c=13 k=6", "xorc d=13 c=1 imm=0x62707293", "xor d=5 c=13", "add d=15 c=5", "mulc2 d=13 c=15 imm=0x229b940b", "xorc d=4 c=13 imm=0x1b81e180", "rot d=7 c=4 k=29", "orx d=14 c=7 b=13", "xor d=6 c=14", "orx d=1 c=6 b=14", "mul d=0 c=1", "andx d=13 c=0 b=2", "mulc d=11 c=13 imm=0x416d09a1", "mulc2 d=15 c=11 imm=0xe913f3dd", "sub d=1 c=15", "xor d=15 c=1", "xor d=6 c=15", "sub d=8 c=6", "xrot d=2 c=8 k=26", "mulc2 d=15 c=2 imm=0xc4f501e3", "rot d=10 c=15 k=19", "mul d=4 c=10", "xrot d=5 c=4 k=1", "xorc d=15 c=5 imm=0x9b7a52af", "mul d=3 c=15", "mulc d=1 c=3 imm=0x45c760cd", "add d=8 c=1", "rot d=5 c=8 k=23", "orx d=0 c=5 b=2", "xorc d=14 c=0 imm=0xe21ab661", "add d=9 c=14", "mul d=2 c=9", "mul d=5 c=2", "add d=1 c=5", "xrot d=7 c=1 k=2", "xrot d=14 c=7 k=30", "addc d=15 c=14 imm=0x25ec367c", "add d=1 c=15", "rot d=4 c=1 k=30", "addc d=6 c=4 imm=0x00a140be", "xor d=11 c=6", "xrot d=3 c=11 k=24", "mulc d=8 c=3 imm=0xa4445dd5", "xor d=11 c=8", "addc d=4 c=11 imm=0xdd82d9ed", "rot d=7 c=4 k=20", "mulc d=10 c=7 imm=0xbc2a9345", "mulc2 d=15 c=10 imm=0xe9d04645", "add d=4 c=15", "add d=0 c=4", "xrot d=5 c=0 k=20", "sub d=8 c=5", "sub d=13 c=8", "mulc2 d=8 c=13 imm=0xdbaee3df", "mulc2 d=7 c=8 imm=0xa78437dd", "mul d=5 c=7", "mulc d=11 c=5 imm=0x7697be93", "mul d=8 c=11", "mul d=5 c=8", "add d=9 c=5", "xrot d=10 c=9 k=4", "addc d=4 c=10 imm=0xcb367e30", "orx d=7 c=4 b=1", "xrot d=8 c=7 k=1", "mulc d=9 c=8 imm=0xebbaa385", "add d=8 c=9", "xrot d=7 c=8 k=30", "xrot d=13 c=7 k=28", "xorc d=3 c=13 imm=0x0da68544", "mul d=6 c=3", "xrot d=15 c=6 k=31", "xrot d=6 c=15 k=17", "xor d=3 c=6", "sub d=9 c=3", "xor d=11 c=9", "mulc2 d=12 c=11 imm=0xc2ae0b9d", "add d=1 c=12", "add d=12 c=1", "xorc d=2 c=12 imm=0x7256c79f", "xrot d=10 c=2 k=22", "add d=4 c=10", "xrot d=8 c=4 k=3", "mulc d=4 c=8 imm=0x8220660b", "sub d=3 c=4", "xor d=1 c=3", "andx d=14 c=1 b=4", "add d=5 c=14", "rot d=6 c=5 k=6", "mulc d=12 c=6 imm=0xdd90e2b3", "rot d=5 c=12 k=16", "add d=13 c=5", "sub d=2 c=13", "rot d=5 c=2 k=28", "sub d=0 c=5", "mulc d=14 c=0 imm=0xd9818695", "mulc2 d=3 c=14 imm=0x56cff173", "add d=12 c=3", "xor d=7 c=12", "addc d=4 c=7 imm=0xc664354a", "xor d=10 c=4", "xrot d=12 c=10 k=21", "orx d=5 c=12 b=10", "xor d=13 c=5", "sub d=3 c=13", "mulc d=10 c=3 imm=0x0f3ce629", "add d=2 c=10", "rot d=6 c=2 k=27", "rot d=3 c=6 k=23", "sub d=8 c=3", "mul d=2 c=8", "xorc d=5 c=2 imm=0x310625e1", "sub d=8 c=5", "add d=0 c=8", "mul d=15 c=0", "mulc d=6 c=15 imm=0x427d27bb", "addc d=11 c=6 imm=0x76730d6f", "addc d=15 c=11 imm=0xdac6c08a", "xrot d=7 c=15 k=13", "addc d=14 c=7 imm=0x6911002d", "rot d=4 c=14 k=17", "mulc2 d=8 c=4 imm=0x56b023ef", "xorc d=4 c=8 imm=0x9fd3970f", "addc d=5 c=4 imm=0x6abd4154", "orx d=7 c=5 b=6", "xor d=6 c=7", "add d=10 c=6", "mulc d=9 c=10 imm=0xe4b1ea8b", "xor d=6 c=9", "xorc d=7 c=6 imm=0xe75c3c42", "mulc d=10 c=7 imm=0xb59266bb", "mul d=2 c=10", "xor d=8 c=2", "mulc d=14 c=8 imm=0xdbf4259f", "mulc2 d=2 c=14 imm=0x7009386d", "sub d=12 c=2", "xrot d=13 c=12 k=25", "xorc d=2 c=13 imm=0x60dba7da", "xrot d=5 c=2 k=28", "xor d=4 c=5", "addc d=11 c=4 imm=0xeb951dd9", "xor d=4 c=11", "xorc d=13 c=4 imm=0xebf6468a", "mulc d=9 c=13 imm=0xdd79814d", "mulc d=3 c=9 imm=0x8e5d0c8d", "xrot d=4 c=3 k=11", "xor d=6 c=4", "mulc d=12 c=6 imm=0x54bdc49f", "xor d=2 c=12", "rot d=6 c=2 k=21", "rot d=3 c=6 k=4", "rot d=7 c=3 k=1", "add d=8 c=7", "xorc d=7 c=8 imm=0xea9b7589", "mulc d=14 c=7 imm=0x97ae5521", "add d=4 c=14", "mulc d=12 c=4 imm=0x22320c0d", "xorc d=11 c=12 imm=0x497dff74", "xor d=7 c=11", "mul d=3 c=7", "xrot d=13 c=3 k=19", "xor d=5 c=13", "orx d=15 c=5 b=1", "xor d=5 c=15", "mulc2 d=2 c=5 imm=0xbadcbfe5", "mul d=6 c=2", "xrot d=9 c=6 k=9", "addc d=6 c=9 imm=0xf8e24c5b", "sub d=4 c=6", "xor d=1 c=4", "sub d=13 c=1", "xor d=6 c=13", "sub d=14 c=6", "xrot d=4 c=14 k=15", "mulc d=0 c=4 imm=0x5cf11fa1", "xrot d=3 c=0 k=9", "mul d=15 c=3", "mul d=7 c=15", "addc d=8 c=7 imm=0x2e6f71e5", "rot d=5 c=8 k=26", "xor d=7 c=5", "mulc d=0 c=7 imm=0x5ea96101", "xorc d=1 c=0 imm=0xd397e563", "mul d=6 c=1", "mul d=10 c=6", "xrot d=7 c=10 k=24", "sub d=0 c=7", "xrot d=6 c=0 k=30", "mulc2 d=12 c=6 imm=0x34af385d", "mul d=14 c=12", "add d=4 c=14", "xor d=12 c=4", "sub d=7 c=12", "sub d=6 c=7", "xrot d=7 c=6 k=19", "xrot d=0 c=7 k=11", "sub d=5 c=0", "xor d=11 c=5", "xorc d=0 c=11 imm=0xbe1c3b74", "orx d=5 c=0 b=9", "orx d=11 c=5 b=4", "add d=15 c=11", "xor d=10 c=15", "mulc2 d=12 c=10 imm=0x543326f5", "mulc2 d=14 c=12 imm=0x91113863", "mulc d=1 c=14 imm=0xc15f4501", "add d=10 c=1", "add d=9 c=10", "addc d=8 c=9 imm=0x7e4a0930", "add d=15 c=8", "add d=5 c=15", "sub d=1 c=5", "add d=15 c=1", "xrot d=6 c=15 k=22", "andx d=2 c=6 b=10", "mulc d=1 c=2 imm=0xfa5dde9b", "xrot d=13 c=1 k=8", "sub d=1 c=13", "addc d=9 c=1 imm=0x3f1d7c19", "mul d=2 c=9", "mulc d=8 c=2 imm=0xde05403b", "add d=9 c=8", "add d=6 c=9", "mulc d=13 c=6 imm=0xcb53bdfd", "mul d=14 c=13", "mul d=10 c=14", "xrot d=13 c=10 k=1", "mulc2 d=9 c=13 imm=0xc38dfca1", "xrot d=15 c=9 k=24", "mul d=2 c=15", "xorc d=15 c=2 imm=0x4f0903ba", "xrot d=2 c=15 k=3", "mulc d=10 c=2 imm=0xa4b3a383", "mul d=6 c=10", "mul d=13 c=6", "mul d=1 c=13", "mulc d=11 c=1 imm=0xbbb47281", "add d=6 c=11", "add d=12 c=6", "xor d=0 c=12", "sub d=12 c=0", "add d=4 c=12", "xorc d=11 c=4 imm=0x4ae1d374", "xor d=1 c=11", "andx d=6 c=1 b=5", "orx d=12 c=6 b=3", "mulc d=6 c=12 imm=0xd088ac95", "mulc d=12 c=6 imm=0xacf99fa9", "rot d=14 c=12 k=10", "rot d=11 c=14 k=21", "xorc d=2 c=11 imm=0x83eccd1e", "xor d=15 c=2", "mulc2 d=8 c=15 imm=0x51ffe091", "orx d=2 c=8 b=3", "xrot d=13 c=2 k=25", "xrot d=5 c=13 k=18", "sub d=9 c=5", "mulc d=6 c=9 imm=0xeb0ab863", "xorc d=10 c=6 imm=0xadb4a85e", "add d=11 c=10", "rot d=15 c=11 k=25", "xorc d=8 c=15 imm=0x611f8ebb", "addc d=4 c=8 imm=0x6c1de9f1", "mul d=14 c=4", "mul d=3 c=14", "orx d=14 c=3 b=8", "xor d=10 c=14", "xorc d=12 c=10 imm=0x1379b7f0", "add d=13 c=12", "sub d=6 c=13", "add d=5 c=6", "xorc d=14 c=5 imm=0x86fda0bc", "xrot d=4 c=14 k=31", "addc d=14 c=4 imm=0xe3857cfa", "xorc d=5 c=14 imm=0x983d6f15", "mul d=2 c=5", "mulc d=11 c=2 imm=0x71d715ab", "addc d=15 c=11 imm=0x954d0d31", "andx d=3 c=15 b=13", "rot d=0 c=3 k=31", "mul d=3 c=0", "mulc2 d=12 c=3 imm=0x553df879", "xrot d=14 c=12 k=27", "xrot d=7 c=14 k=17", "orx d=0 c=7 b=5", "xor d=3 c=0", "andx d=5 c=3 b=11", "xorc d=2 c=5 imm=0xdf79b0e2", "rot d=6 c=2 k=7", "sub d=12 c=6", "add d=10 c=12", "xorc d=11 c=10 imm=0xda8b8a64", "xor d=0 c=11", "mulc d=1 c=0 imm=0xf8a8b0d1", "xrot d=4 c=1 k=3", "xor d=0 c=4", "mul d=3 c=0", "mulc d=7 c=3 imm=0x411cdf35", "add d=6 c=7", "sub d=10 c=6", "rot d=5 c=10 k=16", "add d=4 c=5", "add d=1 c=4", "andx d=0 c=1 b=6", "xor d=13 c=0", "rot d=9 c=13 k=27", "rot d=6 c=9 k=3", "addc d=1 c=6 imm=0xcea64d05", "mulc2 d=3 c=1 imm=0xeebb97ad", "xorc d=14 c=3 imm=0x892c8d98", "andx d=11 c=14 b=9", "mulc d=0 c=11 imm=0xdff5cedf", "sub d=14 c=0", "sub d=6 c=14", "rot d=3 c=6 k=21", "orx d=11 c=3 b=9", "xrot d=7 c=11 k=22", "rot d=10 c=7 k=2", "xrot d=4 c=10 k=14", "sub d=1 c=4", "addc d=0 c=1 imm=0x775d0372", "mul d=13 c=0", "add d=3 c=13", "orx d=4 c=3 b=9", "mulc d=12 c=4 imm=0x687c0365", "rot d=13 c=12 k=2", "mulc d=4 c=13 imm=0x35a16ec5", "xor d=9 c=4", "add d=12 c=9", "sub d=14 c=12", "mul d=5 c=14", "mul d=14 c=5", "orx d=13 c=14 b=4", "sub d=0 c=13", "mulc2 d=15 c=0 imm=0x621c0ea7", "rot d=6 c=15 k=26", "mulc d=15 c=6 imm=0x05d14bc7", "sub d=11 c=15", "orx d=9 c=11 b=13", "add d=4 c=9", "mul d=12 c=4", "xor d=11 c=12", "rot d=7 c=11 k=28", "xrot d=5 c=7 k=12", "xrot d=8 c=5 k=17", "xor d=10 c=8", "xor d=13 c=10", "mul d=7 c=13", "add d=8 c=7", "xor d=15 c=8", "xrot d=4 c=15 k=26", "mulc d=0 c=4 imm=0xd8e75b75", "sub d=8 c=0", "add d=11 c=8", "sub d=13 c=11", "xor d=9 c=13", "mulc d=12 c=9 imm=0x3899fbc3", "rot d=0 c=12 k=17", "xrot d=4 c=0 k=26", "xrot d=1 c=4 k=23", "xrot d=14 c=1 k=25", "xrot d=12 c=14 k=27", "sub d=11 c=12", "xor d=7 c=11", "sub d=11 c=7", "mul d=15 c=11", "orx d=7 c=15 b=11", "xorc d=3 c=7 imm=0xfd1ba1b5", "add d=13 c=3", "addc d=14 c=13 imm=0x405242e4", "mulc d=10 c=14 imm=0xeced21d1", "sub d=0 c=10", "mulc d=1 c=0 imm=0xcb862135", "add d=5 c=1", "sub d=2 c=5", "mulc2 d=15 c=2 imm=0x499907b3", "orx d=11 c=15 b=8", "xor d=14 c=11", "xor d=7 c=14", "xrot d=12 c=7 k=27", "addc d=10 c=12 imm=0x8f39e74b", "mulc d=5 c=10 imm=0x2440407d", "add d=1 c=5", "add d=12 c=1", "mul d=4 c=12", "addc d=1 c=4 imm=0xcdf92480", "xor d=15 c=1", "add d=4 c=15", "mul d=15 c=4", "add d=1 c=15", "rot d=4 c=1 k=6", "mul d=0 c=4", "xor d=1 c=0", "mulc2 d=7 c=1 imm=0xcac7e2dd", "add d=11 c=7", "xor d=12 c=11", "mulc2 d=15 c=12 imm=0x413393af", "mulc d=8 c=15 imm=0x25fe3939", "mul d=14 c=8", "mulc2 d=13 c=14 imm=0x98224c21", "sub d=8 c=13", "xorc d=2 c=8 imm=0xdc7b1f4a", "add d=1 c=2", "xrot d=10 c=1 k=6", "sub d=8 c=10", "mul d=11 c=8", "mul d=13 c=11", "orx d=14 c=13 b=5", "orx d=12 c=14 b=10", "addc d=10 c=12 imm=0xb0848c0b", "add d=2 c=10", "xrot d=4 c=2 k=20", "xor d=13 c=4", "mul d=7 c=13", "xrot d=13 c=7 k=21", "xrot d=14 c=13 k=26", "xor d=12 c=14", "add d=8 c=12", "add d=0 c=8", "mulc2 d=12 c=0 imm=0xd28af0af", "addc d=8 c=12 imm=0xd77f1cfc", "mul d=9 c=8", "mul d=14 c=9", "sub d=3 c=14", "add d=2 c=3", "xor d=12 c=2", "sub d=8 c=12", "add d=5 c=8", "rot d=15 c=5 k=24", "xor d=2 c=15", "sub d=5 c=2", "xor d=8 c=5", "add d=1 c=8", "xor d=0 c=1", "add d=12 c=0", "andx d=7 c=12 b=3", "orx d=13 c=7 b=0", "add d=3 c=13", "mul d=12 c=3", "mulc d=2 c=12 imm=0xfd12ecd1", "mul d=15 c=2", "xor d=0 c=15", "rot d=2 c=0 k=27", "add d=6 c=2", "add d=10 c=6", "xor d=0 c=10", "rot d=7 c=0 k=29", "xrot d=9 c=7 k=19", "mulc d=3 c=9 imm=0xff04d05f", "orx d=13 c=3 b=4", "xor d=15 c=13", "add d=7 c=15", "xor d=14 c=7", "rot d=4 c=14 k=17", "orx d=3 c=4 b=6", "xor d=12 c=3", "xrot d=6 c=12 k=30", "rot d=1 c=6 k=10", "addc d=8 c=1 imm=0x0467b529", "add d=9 c=8", "mul d=7 c=9", "sub d=15 c=7", "andx d=7 c=15 b=8", "mulc d=8 c=7 imm=0x278c5dfd", "xorc d=3 c=8 imm=0xbc598ded", "xrot d=1 c=3 k=9", "add d=4 c=1", "orx d=3 c=4 b=13", "mulc d=10 c=3 imm=0xcae4be05", "mul d=11 c=10", "add d=12 c=11", "xor d=4 c=12", "rot d=7 c=4 k=29", "xrot d=6 c=7 k=9", "mulc d=8 c=6 imm=0xd9f36acd", "xrot d=7 c=8 k=18", "andx d=11 c=7 b=14", "rot d=14 c=11 k=3", "mulc2 d=8 c=14 imm=0x0ae9038f", "mul d=3 c=8", "sub d=13 c=3", "mulc2 d=5 c=13 imm=0x70529de3", "andx d=3 c=5 b=6", "sub d=14 c=3", "xrot d=9 c=14 k=5", "rot d=0 c=9 k=9", "orx d=13 c=0 b=5", "mul d=2 c=13", "sub d=4 c=2", "rot d=1 c=4 k=7", "add d=10 c=1", "xor d=15 c=10", "xrot d=11 c=15 k=24", "xor d=15 c=11", "mul d=10 c=15", "xorc d=3 c=10 imm=0xcb85082c", "xorc d=10 c=3 imm=0xf9bf9766", "sub d=11 c=10", "mulc d=3 c=11 imm=0x87f2ce8b", "mulc2 d=8 c=3 imm=0x0ea0fcc7", "rot d=1 c=8 k=9", "sub d=10 c=1", "mul d=6 c=10", "mulc2 d=11 c=6 imm=0x0c531b4b", "add d=8 c=11", "sub d=15 c=8", "mul d=3 c=15", "mulc d=11 c=3 imm=0xad08649f", "xor d=9 c=11", "sub d=14 c=9", "add d=12 c=14", "addc d=9 c=12 imm=0x232cf99e", "xor d=7 c=9", "andx d=15 c=7 b=8", "addc d=2 c=15 imm=0x32beef7b", "rot d=11 c=2 k=8", "sub d=14 c=11", "orx d=10 c=14 b=12", "mulc2 d=12 c=10 imm=0xa6ec34d5", "xrot d=5 c=12 k=7", "rot d=8 c=5 k=25", "xorc d=10 c=8 imm=0xefb5c226", "xrot d=3 c=10 k=16", "xor d=6 c=3", "xor d=4 c=6", "xor d=6 c=4", "rot d=14 c=6 k=28", "rot d=5 c=14 k=5", "xrot d=3 c=5 k=4", "addc d=5 c=3 imm=0xe3dab3fb", "rot d=15 c=5 k=3", "orx d=14 c=15 b=9", "orx d=0 c=14 b=2", "orx d=1 c=0 b=15", "mul d=6 c=1", "orx d=13 c=6 b=14"], + ["rot d=5 c=0 k=3", "xor d=2 c=5", "xrot d=9 c=2 k=11", "xorc d=11 c=9 imm=0x39e32e1d", "add d=3 c=11", "xrot d=1 c=3 k=22", "xor d=5 c=1", "rot d=8 c=5 k=4", "xrot d=3 c=8 k=12", "add d=4 c=3", "rot d=2 c=4 k=1", "add d=3 c=2", "sub d=8 c=3", "sub d=5 c=8", "mul d=1 c=5", "xorc d=9 c=1 imm=0xd81d55be", "add d=7 c=9", "add d=3 c=7", "xrot d=4 c=3 k=15", "sub d=5 c=4", "mul d=0 c=5", "mulc d=3 c=0 imm=0x4a19e371", "xrot d=7 c=3 k=10", "add d=11 c=7", "mulc2 d=8 c=11 imm=0x259e0d2f", "addc d=3 c=8 imm=0xac463d29", "mul d=9 c=3", "xrot d=10 c=9 k=8", "mul d=6 c=10", "xorc d=1 c=6 imm=0xb275cab7", "xrot d=12 c=1 k=8", "mul d=10 c=12", "sub d=7 c=10", "xrot d=4 c=7 k=18", "addc d=3 c=4 imm=0xc15298f3", "add d=14 c=3", "addc d=0 c=14 imm=0xb147fc8b", "mulc d=8 c=0 imm=0x2016760d", "mulc d=6 c=8 imm=0x54e0697f", "sub d=1 c=6", "xrot d=3 c=1 k=11", "orx d=2 c=3 b=13", "xor d=8 c=2", "add d=5 c=8", "andx d=8 c=5 b=4", "mul d=13 c=8", "sub d=11 c=13", "xor d=5 c=11", "rot d=13 c=5 k=28", "mul d=14 c=13", "xorc d=11 c=14 imm=0x301ae49d", "sub d=13 c=11", "add d=5 c=13", "xor d=9 c=5", "add d=2 c=9", "xor d=5 c=2", "mul d=6 c=5", "add d=2 c=6", "sub d=10 c=2", "mulc2 d=6 c=10 imm=0x7f506861", "xorc d=12 c=6 imm=0xda5f5b6d", "mulc2 d=6 c=12 imm=0x38d5001d", "xorc d=1 c=6 imm=0xc8f1c1dc", "add d=9 c=1", "mulc d=3 c=9 imm=0x8e4a88a5", "rot d=7 c=3 k=18", "xorc d=9 c=7 imm=0xbab40f93", "add d=13 c=9", "add d=6 c=13", "xor d=11 c=6", "xor d=3 c=11", "mul d=10 c=3", "xrot d=6 c=10 k=4", "addc d=14 c=6 imm=0x0249afda", "mulc2 d=1 c=14 imm=0x86ebf639", "rot d=6 c=1 k=25", "mul d=10 c=6", "xor d=6 c=10", "sub d=3 c=6", "xorc d=1 c=3 imm=0xd9ca3a4f", "xrot d=5 c=1 k=23", "xor d=9 c=5", "mulc2 d=5 c=9 imm=0x1457845d", "rot d=11 c=5 k=10", "andx d=2 c=11 b=3", "mul d=15 c=2", "xor d=4 c=15", "add d=7 c=4", "xrot d=15 c=7 k=1", "mulc d=0 c=15 imm=0xb010e4d3", "xrot d=4 c=0 k=20", "andx d=7 c=4 b=3", "xor d=2 c=7", "xor d=3 c=2", "xor d=11 c=3", "xorc d=1 c=11 imm=0x35463538", "andx d=7 c=1 b=11", "add d=13 c=7", "mulc d=1 c=13 imm=0xc1e69efb", "rot d=5 c=1 k=16", "mulc2 d=1 c=5 imm=0x2e9b0e05", "sub d=15 c=1", "add d=12 c=15", "rot d=7 c=12 k=13", "xorc d=9 c=7 imm=0x990eced1", "add d=13 c=9", "add d=8 c=13", "add d=6 c=8", "xorc d=14 c=6 imm=0xc88f98bd", "add d=1 c=14", "mul d=13 c=1", "xor d=5 c=13", "orx d=7 c=5 b=12", "rot d=1 c=7 k=21", "rot d=12 c=1 k=1", "mul d=7 c=12", "xor d=9 c=7", "rot d=6 c=9 k=13", "xorc d=4 c=6 imm=0x74363532", "sub d=2 c=4", "xrot d=9 c=2 k=25", "mul d=0 c=9", "xorc d=12 c=0 imm=0x0441459f", "xorc d=13 c=12 imm=0x662ed979", "sub d=3 c=13", "xorc d=4 c=3 imm=0x1b2d8a07", "mulc2 d=8 c=4 imm=0xf7eec905", "xrot d=14 c=8 k=27", "xor d=0 c=14", "rot d=1 c=0 k=30", "addc d=15 c=1 imm=0xe1b48510", "mul d=9 c=15", "mulc2 d=4 c=9 imm=0x1d3d76dd", "mul d=11 c=4", "sub d=4 c=11", "add d=10 c=4", "mul d=15 c=10", "xrot d=14 c=15 k=29", "sub d=15 c=14", "add d=7 c=15", "rot d=0 c=7 k=15", "xor d=1 c=0", "xrot d=11 c=1 k=13", "add d=10 c=11", "xrot d=3 c=10 k=27", "rot d=8 c=3 k=31", "add d=7 c=8", "sub d=8 c=7", "mul d=10 c=8", "sub d=12 c=10", "mulc2 d=0 c=12 imm=0x5817b1bb", "sub d=4 c=0", "add d=12 c=4", "sub d=15 c=12", "rot d=0 c=15 k=27", "mul d=4 c=0", "mul d=5 c=4", "mul d=13 c=5", "mul d=7 c=13", "mul d=3 c=7", "add d=6 c=3", "xorc d=7 c=6 imm=0x229579c7", "addc d=11 c=7 imm=0x00a25704", "sub d=9 c=11", "rot d=12 c=9 k=24", "xor d=9 c=12", "andx d=10 c=9 b=1", "mulc d=0 c=10 imm=0x2005a37f", "xorc d=14 c=0 imm=0x1c7da2c4", "mul d=10 c=14", "add d=12 c=10", "xrot d=1 c=12 k=24", "andx d=4 c=1 b=14", "xrot d=15 c=4 k=25", "mulc2 d=10 c=15 imm=0xeaf112eb", "andx d=8 c=10 b=15", "mul d=3 c=8", "orx d=5 c=3 b=8", "addc d=6 c=5 imm=0xe4e3f161", "add d=9 c=6", "xrot d=11 c=9 k=16", "xrot d=2 c=11 k=4", "xor d=11 c=2", "xrot d=3 c=11 k=17", "xor d=0 c=3", "xor d=11 c=0", "mulc d=6 c=11 imm=0x12a469a3", "mul d=7 c=6", "andx d=0 c=7 b=1", "rot d=15 c=0 k=17", "xor d=3 c=15", "sub d=11 c=3", "mulc d=9 c=11 imm=0x344ce419", "xor d=4 c=9", "andx d=10 c=4 b=5", "addc d=1 c=10 imm=0xea384c3c", "add d=10 c=1", "xorc d=2 c=10 imm=0x1d75445c", "add d=8 c=2", "addc d=13 c=8 imm=0xbfc1d457", "rot d=3 c=13 k=22", "sub d=14 c=3", "xorc d=0 c=14 imm=0x06e7726c", "xorc d=5 c=0 imm=0x51f1354d", "orx d=8 c=5 b=11", "add d=11 c=8", "xor d=14 c=11", "xrot d=13 c=14 k=13", "sub d=11 c=13", "add d=0 c=11", "xrot d=3 c=0 k=5", "mulc d=4 c=3 imm=0x5eb788f9", "add d=0 c=4", "rot d=4 c=0 k=31", "xor d=8 c=4", "xorc d=11 c=8 imm=0xdd96e051", "sub d=3 c=11", "rot d=10 c=3 k=11", "xrot d=4 c=10 k=14", "xor d=6 c=4", "addc d=15 c=6 imm=0x4f556eef", "xorc d=2 c=15 imm=0x296a5968", "xorc d=1 c=2 imm=0xc46f139a", "mulc d=15 c=1 imm=0x50702ea7", "add d=8 c=15", "mulc d=1 c=8 imm=0x6bafa739", "add d=0 c=1", "orx d=2 c=0 b=1", "mulc2 d=1 c=2 imm=0x1f7250af", "xorc d=6 c=1 imm=0x898b2247", "addc d=1 c=6 imm=0xa7ddf08e", "xor d=2 c=1", "xrot d=6 c=2 k=11", "mulc d=1 c=6 imm=0xf13b1879", "add d=9 c=1", "add d=11 c=9", "orx d=3 c=11 b=13", "sub d=12 c=3", "xorc d=6 c=12 imm=0x5c3b531e", "mul d=5 c=6", "xor d=14 c=5", "mulc d=8 c=14 imm=0x93599b23", "xor d=13 c=8", "xor d=0 c=13", "rot d=7 c=0 k=28", "mulc d=11 c=7 imm=0x97c86fe1", "xor d=4 c=11", "orx d=12 c=4 b=8", "xorc d=14 c=12 imm=0x47aef842", "add d=4 c=14", "xorc d=14 c=4 imm=0xef1987b2", "sub d=10 c=14", "mul d=11 c=10", "xrot d=12 c=11 k=17", "add d=14 c=12", "rot d=6 c=14 k=15", "orx d=10 c=6 b=1", "add d=4 c=10", "andx d=10 c=4 b=12", "add d=2 c=10", "sub d=14 c=2", "andx d=10 c=14 b=13", "xor d=11 c=10", "xor d=15 c=11", "xrot d=5 c=15 k=27", "sub d=6 c=5", "add d=15 c=6", "andx d=8 c=15 b=9", "mulc d=9 c=8 imm=0x483ef9cf", "xor d=13 c=9", "add d=14 c=13", "addc d=5 c=14 imm=0x1978b9ba", "xorc d=12 c=5 imm=0xc6a87e37", "xor d=11 c=12", "addc d=0 c=11 imm=0x25e405bf", "add d=9 c=0", "add d=12 c=9", "andx d=14 c=12 b=6", "sub d=0 c=14", "xrot d=7 c=0 k=16", "xor d=11 c=7", "mul d=6 c=11", "mulc d=10 c=6 imm=0x365e6b61", "andx d=7 c=10 b=6", "addc d=4 c=7 imm=0x88f34310", "add d=0 c=4", "mul d=13 c=0", "xor d=8 c=13", "add d=2 c=8", "add d=10 c=2", "add d=3 c=10", "add d=0 c=3", "mulc d=9 c=0 imm=0xc6ec1ff1", "add d=10 c=9", "andx d=13 c=10 b=6", "mulc d=2 c=13 imm=0xb02a7def", "andx d=1 c=2 b=6", "add d=8 c=1", "mul d=6 c=8", "mulc2 d=0 c=6 imm=0xdbb96cf3", "xor d=6 c=0", "xrot d=11 c=6 k=15", "xor d=4 c=11", "rot d=2 c=4 k=8", "mulc d=6 c=2 imm=0x72c49157", "sub d=14 c=6", "xrot d=5 c=14 k=8", "xorc d=8 c=5 imm=0x1de584fe", "xrot d=11 c=8 k=19", "mul d=10 c=11", "add d=12 c=10", "mulc d=14 c=12 imm=0x9befbf23", "xorc d=2 c=14 imm=0x958a58de", "xorc d=4 c=2 imm=0x255a3390", "sub d=5 c=4", "add d=9 c=5", "add d=11 c=9", "orx d=13 c=11 b=15", "addc d=4 c=13 imm=0x7f925d13", "rot d=12 c=4 k=20", "mul d=13 c=12", "xrot d=14 c=13 k=30", "sub d=13 c=14", "mul d=11 c=13", "add d=10 c=11", "sub d=15 c=10", "xor d=6 c=15", "orx d=13 c=6 b=4", "xorc d=14 c=13 imm=0x935ed5ff", "xrot d=2 c=14 k=11", "rot d=4 c=2 k=23", "addc d=10 c=4 imm=0x602f3d0c", "add d=4 c=10", "andx d=6 c=4 b=2", "mul d=12 c=6", "xor d=11 c=12", "xrot d=5 c=11 k=2", "mulc d=9 c=5 imm=0xf3832b37", "orx d=15 c=9 b=8", "addc d=10 c=15 imm=0xb02d9997", "xrot d=13 c=10 k=15", "addc d=9 c=13 imm=0xcf0e861a", "xrot d=13 c=9 k=7", "mul d=1 c=13", "mul d=0 c=1", "addc d=11 c=0 imm=0x60d0848a", "rot d=15 c=11 k=1", "xorc d=1 c=15 imm=0x7a0f3daf", "mul d=9 c=1", "rot d=12 c=9 k=10", "mul d=9 c=12", "sub d=5 c=9", "xor d=0 c=5", "add d=4 c=0", "xrot d=3 c=4 k=14", "mulc d=8 c=3 imm=0x24a33cef", "rot d=7 c=8 k=26", "xrot d=0 c=7 k=5", "xor d=13 c=0", "xor d=0 c=13", "add d=9 c=0", "addc d=1 c=9 imm=0xceba1d99", "orx d=6 c=1 b=0", "mul d=7 c=6", "andx d=0 c=7 b=2", "sub d=2 c=0", "xor d=9 c=2", "sub d=0 c=9", "addc d=10 c=0 imm=0x912934d8", "add d=14 c=10", "xor d=5 c=14", "addc d=8 c=5 imm=0x9b41cf1d", "xorc d=10 c=8 imm=0x783c5b76", "sub d=2 c=10", "mulc d=1 c=2 imm=0x0f56c5b9", "xorc d=14 c=1 imm=0x25f12e76", "rot d=13 c=14 k=6", "rot d=2 c=13 k=6", "rot d=6 c=2 k=22", "orx d=4 c=6 b=9", "xor d=14 c=4", "sub d=2 c=14", "xor d=3 c=2", "xor d=9 c=3", "mul d=6 c=9", "xor d=2 c=6", "add d=12 c=2", "xor d=3 c=12", "rot d=10 c=3 k=25", "xrot d=1 c=10 k=19", "xor d=14 c=1", "xrot d=12 c=14 k=25", "rot d=4 c=12 k=12", "mul d=5 c=4", "xor d=0 c=5", "andx d=11 c=0 b=8", "xor d=14 c=11", "mulc2 d=4 c=14 imm=0x7b3dacd1", "mulc d=15 c=4 imm=0x391f4413", "sub d=0 c=15", "mulc2 d=11 c=0 imm=0xe57f1625", "sub d=2 c=11", "sub d=3 c=2", "rot d=11 c=3 k=26", "sub d=7 c=11", "sub d=9 c=7", "xrot d=5 c=9 k=25", "xorc d=13 c=5 imm=0x99379160", "xor d=7 c=13", "xrot d=11 c=7 k=6", "xor d=14 c=11", "add d=10 c=14", "xor d=14 c=10", "xrot d=8 c=14 k=13", "add d=0 c=8", "orx d=13 c=0 b=11", "mulc2 d=1 c=13 imm=0xef009353", "orx d=2 c=1 b=8", "mul d=0 c=2", "add d=14 c=0", "xor d=1 c=14", "mul d=8 c=1", "orx d=14 c=8 b=4", "mul d=11 c=14", "xrot d=15 c=11 k=14", "xrot d=4 c=15 k=24", "add d=8 c=4", "orx d=5 c=8 b=10", "add d=2 c=5", "xrot d=13 c=2 k=22", "sub d=8 c=13", "add d=3 c=8", "orx d=10 c=3 b=5", "xor d=13 c=10", "orx d=0 c=13 b=5", "add d=8 c=0", "rot d=14 c=8 k=23", "mulc d=7 c=14 imm=0xe87bd0f5", "xor d=1 c=7", "mul d=12 c=1", "sub d=9 c=12", "rot d=8 c=9 k=8", "add d=7 c=8", "rot d=11 c=7 k=9", "xor d=6 c=11", "orx d=2 c=6 b=3", "mulc d=6 c=2 imm=0xea6f06c5", "mulc2 d=9 c=6 imm=0xb0813793", "rot d=5 c=9 k=27", "mulc d=12 c=5 imm=0x9522a8cb", "orx d=11 c=12 b=1", "xor d=13 c=11", "mul d=4 c=13", "add d=9 c=4", "xor d=13 c=9", "sub d=15 c=13", "xor d=10 c=15", "sub d=8 c=10", "xor d=11 c=8", "rot d=15 c=11 k=15", "xor d=5 c=15", "sub d=10 c=5", "mulc2 d=0 c=10 imm=0x84635df9", "add d=8 c=0", "add d=9 c=8", "mulc2 d=15 c=9 imm=0x55198e97", "sub d=4 c=15", "rot d=8 c=4 k=5", "sub d=11 c=8", "mulc d=13 c=11 imm=0x15b1b0a5", "mul d=11 c=13", "xor d=10 c=11", "xrot d=12 c=10 k=22", "addc d=7 c=12 imm=0x8aac82ca", "xrot d=11 c=7 k=24", "xrot d=10 c=11 k=16", "mulc2 d=13 c=10 imm=0xc6a07e99", "mul d=12 c=13", "mul d=4 c=12", "rot d=2 c=4 k=13", "rot d=4 c=2 k=2", "xrot d=9 c=4 k=11", "xor d=12 c=9", "orx d=2 c=12 b=13", "rot d=7 c=2 k=5", "orx d=15 c=7 b=13", "rot d=6 c=15 k=5", "sub d=1 c=6", "xor d=14 c=1", "xorc d=2 c=14 imm=0xf187f908", "sub d=12 c=2", "addc d=9 c=12 imm=0x1a02f1ac", "xor d=0 c=9", "xor d=5 c=0", "rot d=3 c=5 k=27", "add d=2 c=3", "add d=1 c=2", "xor d=14 c=1", "add d=1 c=14", "rot d=9 c=1 k=7", "orx d=0 c=9 b=6", "xorc d=6 c=0 imm=0x69d64d91", "andx d=9 c=6 b=11", "rot d=4 c=9 k=9", "sub d=7 c=4", "addc d=5 c=7 imm=0xefa00412", "mul d=11 c=5", "addc d=0 c=11 imm=0xb0b34a8f", "sub d=3 c=0", "add d=6 c=3", "rot d=12 c=6 k=26", "mul d=14 c=12", "sub d=9 c=14", "add d=6 c=9", "xor d=13 c=6", "add d=1 c=13", "addc d=8 c=1 imm=0x1a6451ad", "andx d=3 c=8 b=9", "xor d=13 c=3", "xor d=2 c=13", "xrot d=6 c=2 k=28", "add d=8 c=6", "xorc d=10 c=8 imm=0x4b68b070", "addc d=14 c=10 imm=0x3e959795", "addc d=9 c=14 imm=0x7e7f05f4", "mul d=14 c=9", "xor d=8 c=14", "mul d=11 c=8", "sub d=4 c=11", "add d=2 c=4", "add d=6 c=2", "add d=2 c=6", "mul d=8 c=2", "orx d=4 c=8 b=0", "sub d=13 c=4", "sub d=0 c=13", "xorc d=5 c=0 imm=0xcdcd2654", "xrot d=2 c=5 k=27", "mulc d=9 c=2 imm=0x512a14b1", "mulc d=8 c=9 imm=0xe54b3cc1", "orx d=11 c=8 b=13", "xorc d=15 c=11 imm=0x0823130d", "xor d=11 c=15", "andx d=3 c=11 b=2", "xrot d=9 c=3 k=7", "mulc d=2 c=9 imm=0x583f7895", "xorc d=15 c=2 imm=0x4a0f9347", "add d=9 c=15", "xor d=11 c=9", "mul d=9 c=11", "mulc d=2 c=9 imm=0x071a75e5", "mul d=14 c=2", "xrot d=0 c=14 k=22", "xorc d=3 c=0 imm=0xa770c1f5", "xrot d=10 c=3 k=4", "addc d=13 c=10 imm=0xeaf6caa2", "orx d=12 c=13 b=5", "sub d=3 c=12", "sub d=9 c=3", "add d=3 c=9", "mulc d=15 c=3 imm=0x8c66add5", "sub d=0 c=15", "rot d=15 c=0 k=20", "addc d=3 c=15 imm=0x4fe53ed8", "addc d=0 c=3 imm=0xb80a3204", "orx d=12 c=0 b=14", "add d=10 c=12", "mul d=9 c=10", "add d=3 c=9", "add d=0 c=3", "orx d=14 c=0 b=1", "mul d=4 c=14", "sub d=6 c=4", "sub d=5 c=6", "mul d=4 c=5", "rot d=5 c=4 k=5", "xorc d=9 c=5 imm=0xda8f6aba", "xor d=10 c=9", "andx d=8 c=10 b=13", "rot d=10 c=8 k=26", "xor d=1 c=10", "mulc d=15 c=1 imm=0x1fd82855", "xor d=2 c=15", "sub d=4 c=2", "mul d=2 c=4", "add d=14 c=2", "mul d=8 c=14", "xor d=3 c=8", "mul d=13 c=3", "xor d=5 c=13", "sub d=7 c=5", "add d=3 c=7", "add d=1 c=3", "mul d=14 c=1", "mulc d=8 c=14 imm=0x14b291eb", "xrot d=12 c=8 k=24", "sub d=5 c=12", "mul d=3 c=5", "addc d=4 c=3 imm=0x2e4c7228", "xrot d=11 c=4 k=9", "xrot d=5 c=11 k=21", "addc d=4 c=5 imm=0xcec3470d", "add d=14 c=4", "mulc d=5 c=14 imm=0xd3b1d179", "mulc d=7 c=5 imm=0x0dfd9191", "xor d=1 c=7", "addc d=12 c=1 imm=0x05dc87fd", "sub d=11 c=12", "andx d=7 c=11 b=10", "mul d=10 c=7", "rot d=8 c=10 k=22", "xor d=11 c=8", "mul d=10 c=11", "sub d=0 c=10", "addc d=7 c=0 imm=0xbab4bd7f", "rot d=0 c=7 k=13", "mulc d=15 c=0 imm=0x1a239ff7", "xrot d=3 c=15 k=24", "rot d=1 c=3 k=25", "rot d=5 c=1 k=23", "mulc d=4 c=5 imm=0x114ab605", "add d=9 c=4", "rot d=5 c=9 k=17", "sub d=0 c=5", "xor d=4 c=0", "xrot d=15 c=4 k=14", "mul d=14 c=15", "xrot d=10 c=14 k=8", "xrot d=3 c=10 k=17", "addc d=6 c=3 imm=0xb216edc1", "xor d=9 c=6", "add d=7 c=9", "xrot d=9 c=7 k=27", "orx d=8 c=9 b=12", "mul d=10 c=8", "add d=7 c=10", "orx d=2 c=7 b=11", "mulc d=3 c=2 imm=0x74b003d9", "rot d=1 c=3 k=12", "mulc d=0 c=1 imm=0x6e4a2ddb", "mul d=7 c=0", "add d=4 c=7", "add d=13 c=4", "xrot d=10 c=13 k=23", "add d=9 c=10", "xor d=1 c=9", "xor d=3 c=1", "rot d=13 c=3 k=26", "xrot d=15 c=13 k=26", "xrot d=13 c=15 k=26", "sub d=2 c=13", "xrot d=6 c=2 k=17", "xorc d=7 c=6 imm=0x040fda34", "xorc d=12 c=7 imm=0x7517e01c", "mulc d=9 c=12 imm=0x65c2f9e3", "mul d=2 c=9", "orx d=8 c=2 b=15", "xrot d=10 c=8 k=25", "xrot d=7 c=10 k=18", "xor d=0 c=7", "sub d=13 c=0", "addc d=5 c=13 imm=0x91f36456", "xorc d=13 c=5 imm=0xb0249e62", "xor d=9 c=13", "sub d=10 c=9", "mulc2 d=9 c=10 imm=0x3349e8ab", "add d=15 c=9", "xrot d=1 c=15 k=18", "sub d=3 c=1", "xor d=6 c=3", "mulc d=2 c=6 imm=0x56121511", "rot d=14 c=2 k=12", "xorc d=12 c=14 imm=0x10c3c286", "add d=5 c=12", "orx d=7 c=5 b=15", "xrot d=4 c=7 k=13", "xor d=7 c=4", "orx d=3 c=7 b=9", "sub d=15 c=3", "xor d=3 c=15", "xrot d=12 c=3 k=28", "xor d=14 c=12", "andx d=6 c=14 b=3", "sub d=5 c=6", "xorc d=11 c=5 imm=0x039a9ae9", "mulc d=8 c=11 imm=0x0cf0a8db", "add d=7 c=8", "andx d=2 c=7 b=15", "add d=4 c=2", "mul d=15 c=4", "andx d=3 c=15 b=0", "orx d=2 c=3 b=14", "xrot d=5 c=2 k=2", "xorc d=2 c=5 imm=0x6a1af17a", "mulc2 d=12 c=2 imm=0x4dfc5c59", "xrot d=7 c=12 k=4", "xor d=1 c=7", "add d=13 c=1", "andx d=3 c=13 b=10", "add d=8 c=3", "add d=4 c=8", "xor d=3 c=4", "rot d=9 c=3 k=30", "addc d=5 c=9 imm=0x07e78f25", "xor d=12 c=5", "addc d=5 c=12 imm=0x31f9526e", "andx d=14 c=5 b=13", "xrot d=3 c=14 k=2", "mulc d=1 c=3 imm=0xe113f67b", "xrot d=13 c=1 k=2", "mul d=12 c=13", "xor d=2 c=12", "mulc2 d=9 c=2 imm=0x1a8888d9", "add d=4 c=9", "orx d=6 c=4 b=7", "mulc d=7 c=6 imm=0xfddcf333", "orx d=15 c=7 b=8", "rot d=1 c=15 k=10", "xor d=8 c=1", "mul d=13 c=8", "mul d=9 c=13", "mulc d=10 c=9 imm=0x3ca467cf", "add d=9 c=10", "rot d=13 c=9 k=10", "xor d=4 c=13", "mulc d=5 c=4 imm=0x01623d69", "rot d=14 c=5 k=25", "rot d=9 c=14 k=20", "add d=13 c=9", "xor d=7 c=13", "add d=0 c=7", "xrot d=12 c=0 k=30", "rot d=7 c=12 k=18", "xrot d=12 c=7 k=28", "xor d=2 c=12", "mulc d=3 c=2 imm=0xabf1e829"], + ["sub d=5 c=0", "add d=4 c=5", "xor d=1 c=4", "rot d=8 c=1 k=27", "mulc d=11 c=8 imm=0x4b2f6f09", "xor d=6 c=11", "xrot d=9 c=6 k=4", "addc d=8 c=9 imm=0xbb62948f", "xor d=5 c=8", "orx d=11 c=5 b=13", "add d=12 c=11", "rot d=1 c=12 k=31", "xor d=14 c=1", "mul d=8 c=14", "orx d=6 c=8 b=1", "xor d=10 c=6", "mulc2 d=7 c=10 imm=0x6b454bc1", "sub d=6 c=7", "add d=9 c=6", "rot d=2 c=9 k=17", "sub d=9 c=2", "andx d=13 c=9 b=0", "sub d=2 c=13", "andx d=14 c=2 b=11", "xor d=13 c=14", "add d=8 c=13", "xor d=1 c=8", "xorc d=15 c=1 imm=0x6fb89ee0", "rot d=13 c=15 k=6", "sub d=5 c=13", "mulc d=9 c=5 imm=0x34a05bdb", "xrot d=14 c=9 k=19", "addc d=7 c=14 imm=0x91a91f0e", "rot d=12 c=7 k=30", "mulc d=3 c=12 imm=0x29e111e1", "rot d=15 c=3 k=13", "rot d=4 c=15 k=23", "sub d=6 c=4", "andx d=15 c=6 b=3", "xor d=1 c=15", "rot d=13 c=1 k=2", "sub d=5 c=13", "orx d=12 c=5 b=6", "rot d=5 c=12 k=8", "mulc d=6 c=5 imm=0x46361369", "mulc2 d=0 c=6 imm=0x41b33755", "add d=14 c=0", "mulc d=7 c=14 imm=0x927361a3", "add d=13 c=7", "xor d=1 c=13", "xrot d=3 c=1 k=29", "xrot d=7 c=3 k=28", "rot d=15 c=7 k=6", "mulc2 d=3 c=15 imm=0x0876dd9d", "xor d=4 c=3", "sub d=11 c=4", "rot d=10 c=11 k=29", "xor d=5 c=10", "add d=3 c=5", "mul d=7 c=3", "sub d=2 c=7", "xor d=9 c=2", "mul d=8 c=9", "orx d=7 c=8 b=13", "sub d=13 c=7", "rot d=11 c=13 k=18", "addc d=10 c=11 imm=0x181a9075", "mulc d=9 c=10 imm=0xb49d9e43", "xor d=15 c=9", "xrot d=3 c=15 k=5", "add d=7 c=3", "add d=3 c=7", "xorc d=4 c=3 imm=0xe8c5e0a0", "orx d=7 c=4 b=12", "add d=4 c=7", "mulc d=14 c=4 imm=0x178ee02f", "add d=7 c=14", "xorc d=1 c=7 imm=0x194c8352", "xor d=11 c=1", "mul d=10 c=11", "xrot d=13 c=10 k=16", "xrot d=0 c=13 k=28", "orx d=1 c=0 b=7", "sub d=15 c=1", "add d=6 c=15", "sub d=7 c=6", "xor d=0 c=7", "add d=4 c=0", "mulc d=12 c=4 imm=0x7db92f45", "add d=8 c=12", "rot d=9 c=8 k=25", "add d=14 c=9", "rot d=4 c=14 k=1", "rot d=9 c=4 k=20", "sub d=8 c=9", "mulc d=2 c=8 imm=0xe35b6231", "mul d=14 c=2", "add d=11 c=14", "rot d=6 c=11 k=27", "orx d=13 c=6 b=14", "add d=3 c=13", "xor d=12 c=3", "xor d=2 c=12", "xor d=0 c=2", "orx d=3 c=0 b=7", "andx d=14 c=3 b=9", "addc d=4 c=14 imm=0x77498422", "rot d=11 c=4 k=18", "xrot d=10 c=11 k=14", "mul d=6 c=10", "xrot d=12 c=6 k=12", "mul d=2 c=12", "mul d=8 c=2", "mulc d=0 c=8 imm=0x597dfa7d", "xrot d=5 c=0 k=1", "mulc d=8 c=5 imm=0x818239b3", "xorc d=6 c=8 imm=0x898c850d", "mulc d=1 c=6 imm=0x3d7ae6bf", "orx d=2 c=1 b=0", "xrot d=15 c=2 k=12", "andx d=11 c=15 b=1", "orx d=10 c=11 b=5", "rot d=9 c=10 k=2", "addc d=4 c=9 imm=0x8e6a7325", "add d=10 c=4", "mul d=9 c=10", "xrot d=7 c=9 k=29", "mul d=9 c=7", "mul d=14 c=9", "orx d=9 c=14 b=8", "mul d=8 c=9", "xrot d=10 c=8 k=31", "add d=0 c=10", "xor d=3 c=0", "add d=11 c=3", "rot d=10 c=11 k=14", "mulc2 d=14 c=10 imm=0xedeb79c3", "rot d=13 c=14 k=31", "xorc d=0 c=13 imm=0xcb8f865f", "xorc d=7 c=0 imm=0xc218e233", "xor d=6 c=7", "sub d=15 c=6", "add d=13 c=15", "sub d=9 c=13", "add d=8 c=9", "add d=5 c=8", "sub d=14 c=5", "xrot d=9 c=14 k=5", "mul d=12 c=9", "rot d=2 c=12 k=4", "mulc d=5 c=2 imm=0xca70bd5b", "xrot d=6 c=5 k=1", "sub d=9 c=6", "xor d=12 c=9", "addc d=11 c=12 imm=0xc0665a45", "xrot d=3 c=11 k=4", "xorc d=9 c=3 imm=0x32e70bb6", "xorc d=1 c=9 imm=0xae4dfdd5", "andx d=5 c=1 b=3", "xrot d=3 c=5 k=22", "add d=13 c=3", "rot d=10 c=13 k=4", "add d=7 c=10", "xorc d=10 c=7 imm=0x4810f287", "orx d=6 c=10 b=13", "mulc d=11 c=6 imm=0x66e90aa1", "add d=2 c=11", "add d=14 c=2", "mul d=8 c=14", "andx d=11 c=8 b=10", "xor d=6 c=11", "xrot d=8 c=6 k=9", "mulc d=2 c=8 imm=0x0ae2e991", "mul d=14 c=2", "orx d=2 c=14 b=3", "sub d=0 c=2", "addc d=11 c=0 imm=0x68b8549c", "sub d=8 c=11", "mul d=5 c=8", "sub d=12 c=5", "xrot d=3 c=12 k=12", "mulc2 d=10 c=3 imm=0xf67913a1", "xrot d=14 c=10 k=22", "andx d=11 c=14 b=4", "add d=8 c=11", "mul d=15 c=8", "add d=14 c=15", "mulc d=8 c=14 imm=0x0ab3eb01", "rot d=2 c=8 k=28", "mul d=8 c=2", "xor d=2 c=8", "xor d=10 c=2", "sub d=0 c=10", "xorc d=4 c=0 imm=0x4f62b664", "xrot d=12 c=4 k=7", "sub d=10 c=12", "addc d=0 c=10 imm=0xf2da1dd8", "add d=3 c=0", "mulc d=5 c=3 imm=0xdbaaf8b9", "mulc d=4 c=5 imm=0xf8df299f", "add d=13 c=4", "andx d=10 c=13 b=14", "xor d=5 c=10", "add d=13 c=5", "mul d=8 c=13", "xrot d=11 c=8 k=26", "xrot d=0 c=11 k=21", "xorc d=9 c=0 imm=0x9e7430f6", "rot d=4 c=9 k=5", "xor d=8 c=4", "xor d=7 c=8", "xor d=0 c=7", "rot d=14 c=0 k=20", "orx d=7 c=14 b=15", "mulc d=6 c=7 imm=0x151af639", "sub d=12 c=6", "xrot d=3 c=12 k=15", "mulc2 d=4 c=3 imm=0xf5ff2905", "addc d=9 c=4 imm=0x986450f9", "add d=0 c=9", "mul d=3 c=0", "rot d=10 c=3 k=6", "orx d=7 c=10 b=2", "xor d=11 c=7", "rot d=14 c=11 k=9", "xrot d=6 c=14 k=9", "addc d=12 c=6 imm=0x8e33c6d8", "xor d=1 c=12", "mulc2 d=14 c=1 imm=0x75b03e79", "mulc d=12 c=14 imm=0xf81548e3", "xrot d=14 c=12 k=26", "mulc d=0 c=14 imm=0xed123d19", "mulc2 d=4 c=0 imm=0xc3964555", "mul d=12 c=4", "mulc d=8 c=12 imm=0x5b0867f3", "add d=4 c=8", "orx d=11 c=4 b=8", "rot d=13 c=11 k=13", "rot d=8 c=13 k=13", "add d=10 c=8", "rot d=5 c=10 k=21", "add d=13 c=5", "rot d=1 c=13 k=28", "xor d=6 c=1", "mulc2 d=0 c=6 imm=0x8659f36f", "rot d=6 c=0 k=16", "mul d=14 c=6", "andx d=3 c=14 b=15", "xor d=7 c=3", "mulc2 d=8 c=7 imm=0x9b402df1", "sub d=13 c=8", "mulc2 d=14 c=13 imm=0xfc97057f", "rot d=8 c=14 k=16", "mulc d=14 c=8 imm=0xbe6b7107", "xrot d=15 c=14 k=13", "xrot d=8 c=15 k=17", "mul d=2 c=8", "andx d=13 c=2 b=15", "sub d=4 c=13", "add d=6 c=4", "xor d=5 c=6", "addc d=13 c=5 imm=0xe1efd35d", "sub d=11 c=13", "sub d=9 c=11", "add d=11 c=9", "addc d=10 c=11 imm=0x54c20a26", "add d=11 c=10", "xor d=10 c=11", "add d=1 c=10", "xorc d=15 c=1 imm=0xba35f967", "xor d=10 c=15", "sub d=5 c=10", "sub d=10 c=5", "xrot d=2 c=10 k=4", "xrot d=12 c=2 k=28", "mul d=3 c=12", "add d=12 c=3", "xorc d=2 c=12 imm=0xf5d2467f", "mul d=6 c=2", "mulc d=10 c=6 imm=0x28dedae7", "rot d=3 c=10 k=23", "xor d=13 c=3", "sub d=0 c=13", "rot d=6 c=0 k=27", "xrot d=9 c=6 k=24", "add d=7 c=9", "mulc d=1 c=7 imm=0x7c90eb87", "xor d=9 c=1", "rot d=13 c=9 k=9", "xorc d=10 c=13 imm=0x225cb631", "xrot d=4 c=10 k=7", "mul d=2 c=4", "add d=4 c=2", "mulc d=2 c=4 imm=0xbf3bcc37", "add d=7 c=2", "mulc d=14 c=7 imm=0xbc306609", "andx d=7 c=14 b=8", "xorc d=15 c=7 imm=0x60b43c30", "xor d=9 c=15", "xor d=4 c=9", "orx d=9 c=4 b=7", "andx d=0 c=9 b=13", "xorc d=12 c=0 imm=0xd2720722", "xorc d=5 c=12 imm=0xd44c4970", "xorc d=9 c=5 imm=0xc371f5be", "xor d=3 c=9", "rot d=0 c=3 k=29", "add d=10 c=0", "add d=8 c=10", "mulc d=3 c=8 imm=0xa4d0bc15", "xor d=1 c=3", "xor d=12 c=1", "xor d=10 c=12", "orx d=2 c=10 b=4", "rot d=11 c=2 k=16", "add d=9 c=11", "mul d=7 c=9", "mulc d=0 c=7 imm=0x5e3371e1", "add d=14 c=0", "xor d=9 c=14", "mulc d=10 c=9 imm=0x9e41ec57", "xor d=0 c=10", "mul d=4 c=0", "xor d=0 c=4", "mul d=4 c=0", "mulc2 d=8 c=4 imm=0xbfdc3751", "xrot d=15 c=8 k=21", "sub d=11 c=15", "sub d=9 c=11", "rot d=4 c=9 k=8", "add d=15 c=4", "xorc d=1 c=15 imm=0xd11970cd", "xor d=15 c=1", "mulc2 d=4 c=15 imm=0x94d713c9", "mulc2 d=7 c=4 imm=0x68b74c8d", "xorc d=9 c=7 imm=0x96fae1c9", "mul d=7 c=9", "xor d=4 c=7", "sub d=1 c=4", "xorc d=8 c=1 imm=0x3b8298fd", "xrot d=3 c=8 k=29", "add d=10 c=3", "xorc d=2 c=10 imm=0xfc75ba25", "xorc d=15 c=2 imm=0x3370ab46", "mul d=4 c=15", "mulc d=0 c=4 imm=0xf0c6e8a1", "rot d=8 c=0 k=30", "xor d=13 c=8", "orx d=9 c=13 b=4", "andx d=3 c=9 b=5", "xor d=9 c=3", "add d=6 c=9", "orx d=10 c=6 b=12", "add d=15 c=10", "mul d=13 c=15", "orx d=15 c=13 b=2", "addc d=5 c=15 imm=0xc80c1f15", "xrot d=6 c=5 k=6", "xor d=2 c=6", "addc d=14 c=2 imm=0x20c48485", "add d=0 c=14", "mulc d=8 c=0 imm=0xab09b653", "add d=5 c=8", "mul d=11 c=5", "add d=15 c=11", "xor d=8 c=15", "sub d=11 c=8", "mul d=12 c=11", "xrot d=0 c=12 k=10", "xor d=13 c=0", "rot d=4 c=13 k=27", "add d=2 c=4", "rot d=10 c=2 k=18", "mul d=7 c=10", "sub d=6 c=7", "mulc d=3 c=6 imm=0xb3dee1f9", "sub d=6 c=3", "add d=5 c=6", "mul d=8 c=5", "add d=15 c=8", "rot d=0 c=15 k=13", "sub d=2 c=0", "mul d=14 c=2", "add d=3 c=14", "sub d=13 c=3", "rot d=12 c=13 k=15", "mulc2 d=8 c=12 imm=0xdd12f547", "mulc2 d=4 c=8 imm=0xeabf279d", "mulc d=10 c=4 imm=0x233f1cd3", "addc d=7 c=10 imm=0x6c58f593", "andx d=8 c=7 b=14", "sub d=12 c=8", "andx d=11 c=12 b=6", "mul d=12 c=11", "mulc d=13 c=12 imm=0x8c02e38d", "addc d=2 c=13 imm=0xa8bdba12", "add d=14 c=2", "mulc d=13 c=14 imm=0x4beb81bd", "mulc d=5 c=13 imm=0x1ad1e6db", "xor d=3 c=5", "xor d=4 c=3", "mulc d=7 c=4 imm=0xef5d1565", "orx d=4 c=7 b=12", "xorc d=15 c=4 imm=0x5a3cd0fb", "add d=2 c=15", "mulc d=10 c=2 imm=0x42c18153", "rot d=9 c=10 k=31", "sub d=12 c=9", "addc d=3 c=12 imm=0x809ec6a1", "sub d=0 c=3", "mulc d=2 c=0 imm=0x37fb4965", "rot d=6 c=2 k=14", "add d=15 c=6", "xor d=2 c=15", "mul d=9 c=2", "xor d=13 c=9", "xrot d=9 c=13 k=15", "andx d=3 c=9 b=2", "mulc d=2 c=3 imm=0xe757085d", "mul d=10 c=2", "addc d=7 c=10 imm=0x0e230d44", "add d=10 c=7", "add d=14 c=10", "addc d=2 c=14 imm=0x3f9b1777", "sub d=14 c=2", "xorc d=8 c=14 imm=0x53fdae32", "xorc d=14 c=8 imm=0x545e3034", "xor d=12 c=14", "xrot d=2 c=12 k=18", "mul d=1 c=2", "rot d=13 c=1 k=1", "add d=6 c=13", "rot d=13 c=6 k=31", "rot d=8 c=13 k=9", "rot d=4 c=8 k=13", "xor d=15 c=4", "xor d=13 c=15", "add d=15 c=13", "mul d=6 c=15", "sub d=8 c=6", "orx d=2 c=8 b=4", "addc d=8 c=2 imm=0x071fe892", "add d=2 c=8", "xor d=6 c=2", "rot d=12 c=6 k=12", "xor d=11 c=12", "xor d=10 c=11", "andx d=15 c=10 b=2", "addc d=0 c=15 imm=0xc5893a51", "xor d=11 c=0", "mulc2 d=8 c=11 imm=0xcbaa9e53", "xor d=12 c=8", "add d=7 c=12", "xor d=4 c=7", "xor d=14 c=4", "add d=8 c=14", "andx d=2 c=8 b=13", "orx d=4 c=2 b=15", "rot d=15 c=4 k=18", "mul d=6 c=15", "xorc d=4 c=6 imm=0xda23719b", "add d=10 c=4", "mulc2 d=14 c=10 imm=0x7d043037", "mulc d=1 c=14 imm=0x3702ca63", "mulc2 d=14 c=1 imm=0x6069e073", "add d=11 c=14", "addc d=15 c=11 imm=0x080f6236", "add d=14 c=15", "xorc d=0 c=14 imm=0xbcf33252", "andx d=8 c=0 b=4", "xorc d=10 c=8 imm=0x42b4ca59", "xor d=5 c=10", "mulc d=0 c=5 imm=0xeff77d4b", "rot d=3 c=0 k=7", "xorc d=14 c=3 imm=0xa94ec34b", "rot d=4 c=14 k=11", "xrot d=8 c=4 k=26", "xrot d=0 c=8 k=29", "rot d=2 c=0 k=1", "addc d=14 c=2 imm=0xe0207936", "mul d=10 c=14", "xrot d=8 c=10 k=19", "addc d=4 c=8 imm=0x401aa131", "add d=0 c=4", "xrot d=12 c=0 k=1", "add d=6 c=12", "mulc d=5 c=6 imm=0x5402ef7f", "xor d=3 c=5", "sub d=12 c=3", "xorc d=14 c=12 imm=0xa47dfa06", "mulc d=6 c=14 imm=0xd40c13a9", "mulc d=8 c=6 imm=0xfd2046dd", "mulc d=2 c=8 imm=0x06e4aacb", "rot d=13 c=2 k=29", "xor d=0 c=13", "rot d=15 c=0 k=19", "orx d=10 c=15 b=2", "xorc d=3 c=10 imm=0xd34e89bc", "xorc d=10 c=3 imm=0xbd40c99c", "rot d=14 c=10 k=7", "add d=12 c=14", "xrot d=9 c=12 k=21", "mulc d=2 c=9 imm=0xacae09c7", "sub d=5 c=2", "xor d=3 c=5", "sub d=14 c=3", "mulc2 d=5 c=14 imm=0xaf5e1497", "andx d=8 c=5 b=12", "xor d=6 c=8", "add d=15 c=6", "andx d=12 c=15 b=13", "xrot d=9 c=12 k=8", "xrot d=1 c=9 k=11", "add d=2 c=1", "andx d=4 c=2 b=5", "mulc d=14 c=4 imm=0x818385b1", "add d=7 c=14", "xorc d=8 c=7 imm=0x4eae6b36", "rot d=13 c=8 k=19", "mul d=6 c=13", "xor d=15 c=6", "rot d=5 c=15 k=18", "xrot d=6 c=5 k=16", "orx d=9 c=6 b=14", "mul d=12 c=9", "mulc d=0 c=12 imm=0x5540eec9", "xorc d=10 c=0 imm=0x57f45e0e", "rot d=12 c=10 k=19", "sub d=9 c=12", "addc d=10 c=9 imm=0x4e7af6ed", "mul d=7 c=10", "mul d=14 c=7", "mul d=10 c=14", "xor d=13 c=10", "addc d=6 c=13 imm=0xdeaaf3c5", "mulc d=5 c=6 imm=0x6626311b", "add d=8 c=5", "sub d=14 c=8", "add d=1 c=14", "rot d=0 c=1 k=14", "xor d=1 c=0", "xrot d=9 c=1 k=3", "xor d=14 c=9", "add d=3 c=14", "add d=0 c=3", "rot d=6 c=0 k=9", "xrot d=10 c=6 k=18", "sub d=3 c=10", "mulc d=0 c=3 imm=0xf8e0b555", "mulc d=5 c=0 imm=0x90f83cc5", "sub d=15 c=5", "mulc d=13 c=15 imm=0x1028be17", "xorc d=8 c=13 imm=0x6f814efa", "rot d=3 c=8 k=7", "mulc2 d=13 c=3 imm=0x1fe5d55d", "add d=14 c=13", "mul d=11 c=14", "mulc2 d=8 c=11 imm=0xec49ce8f", "xorc d=1 c=8 imm=0x6ce63203", "xrot d=13 c=1 k=3", "mulc d=4 c=13 imm=0x1f4d84d5", "xrot d=3 c=4 k=19", "xorc d=6 c=3 imm=0x99bbd04a", "rot d=15 c=6 k=23", "xor d=5 c=15", "xor d=7 c=5", "mulc2 d=12 c=7 imm=0x41bf1949", "xorc d=3 c=12 imm=0xc73c6eaa", "add d=5 c=3", "addc d=12 c=5 imm=0xaca33a02", "add d=2 c=12", "sub d=1 c=2", "andx d=2 c=1 b=8", "mul d=15 c=2", "add d=12 c=15", "xrot d=2 c=12 k=22", "mul d=15 c=2", "add d=2 c=15", "sub d=8 c=2", "add d=4 c=8", "add d=6 c=4", "add d=7 c=6", "add d=13 c=7", "add d=9 c=13", "add d=11 c=9", "add d=8 c=11", "xrot d=10 c=8 k=23", "sub d=7 c=10", "add d=3 c=7", "mul d=6 c=3", "xrot d=5 c=6 k=9", "xor d=0 c=5", "xrot d=13 c=0 k=26", "rot d=4 c=13 k=1", "add d=13 c=4", "xrot d=8 c=13 k=17", "sub d=6 c=8", "xrot d=4 c=6 k=13", "sub d=6 c=4", "rot d=10 c=6 k=17", "mulc d=8 c=10 imm=0x5414f521", "andx d=5 c=8 b=12", "add d=12 c=5", "xor d=9 c=12", "xrot d=4 c=9 k=22", "andx d=6 c=4 b=15", "add d=5 c=6", "andx d=2 c=5 b=3", "xor d=15 c=2", "add d=11 c=15", "sub d=8 c=11", "sub d=3 c=8", "mulc2 d=8 c=3 imm=0xb35e6bc9", "xor d=14 c=8", "mul d=6 c=14", "sub d=14 c=6", "xor d=4 c=14", "xor d=0 c=4", "mulc d=13 c=0 imm=0xe1a27a3d", "xrot d=1 c=13 k=4", "mulc d=8 c=1 imm=0x7db5fbb1", "add d=5 c=8", "add d=9 c=5", "mul d=6 c=9", "mulc d=7 c=6 imm=0x33889ef9", "xrot d=13 c=7 k=11", "xor d=9 c=13", "rot d=8 c=9 k=4", "rot d=11 c=8 k=8", "xorc d=10 c=11 imm=0x833b63ee", "mul d=14 c=10", "sub d=5 c=14", "xor d=3 c=5", "mul d=10 c=3", "rot d=15 c=10 k=15", "sub d=10 c=15", "xor d=11 c=10", "addc d=15 c=11 imm=0x67b25095", "xrot d=5 c=15 k=6", "add d=12 c=5", "orx d=4 c=12 b=15", "addc d=12 c=4 imm=0x0b5448be", "mul d=8 c=12", "addc d=12 c=8 imm=0x9db08cdd", "rot d=4 c=12 k=5", "mul d=12 c=4", "xor d=5 c=12", "andx d=7 c=5 b=15", "rot d=2 c=7 k=9", "mulc d=7 c=2 imm=0xef5cc1a1", "xor d=13 c=7", "addc d=2 c=13 imm=0xe8acb081", "add d=7 c=2", "xor d=13 c=7", "xrot d=11 c=13 k=29", "add d=4 c=11", "addc d=3 c=4 imm=0x2bf7bd89", "add d=15 c=3", "xrot d=11 c=15 k=10", "xrot d=0 c=11 k=17", "xrot d=6 c=0 k=20", "xrot d=8 c=6 k=21", "rot d=6 c=8 k=26", "rot d=11 c=6 k=18", "rot d=0 c=11 k=29", "mul d=2 c=0", "xrot d=11 c=2 k=21", "add d=8 c=11", "xor d=1 c=8", "rot d=12 c=1 k=21", "xrot d=9 c=12 k=30", "mulc d=12 c=9 imm=0xaa6bd425", "addc d=10 c=12 imm=0x3abc6eee", "mulc d=4 c=10 imm=0x26651b39", "mulc d=1 c=4 imm=0x669011cb", "mulc d=12 c=1 imm=0xc730fa63", "mul d=4 c=12", "add d=1 c=4", "mulc d=13 c=1 imm=0xa91d1549", "xrot d=8 c=13 k=20", "xrot d=15 c=8 k=19", "xor d=9 c=15", "add d=12 c=9", "xor d=6 c=12", "rot d=7 c=6 k=10", "mulc2 d=6 c=7 imm=0x4737bba1", "xrot d=7 c=6 k=4", "mulc d=15 c=7 imm=0x1550c0c9", "mulc d=6 c=15 imm=0xa9708363", "mulc2 d=11 c=6 imm=0x7ed5889d", "addc d=14 c=11 imm=0xe220d224", "addc d=5 c=14 imm=0xa5c27ec0", "xor d=3 c=5", "mulc d=11 c=3 imm=0x83211151", "add d=1 c=11", "sub d=0 c=1", "add d=8 c=0", "rot d=10 c=8 k=22", "sub d=14 c=10", "xor d=13 c=14", "rot d=12 c=13 k=19", "mul d=5 c=12", "mul d=2 c=5", "add d=13 c=2", "xor d=14 c=13", "xrot d=7 c=14 k=8", "xor d=10 c=7", "xor d=8 c=10", "rot d=4 c=8 k=25", "xor d=11 c=4", "addc d=13 c=11 imm=0xc7fb1dc5", "xorc d=6 c=13 imm=0xda0de0b3", "mul d=9 c=6", "add d=0 c=9", "rot d=10 c=0 k=30", "rot d=11 c=10 k=31", "sub d=14 c=11", "xor d=4 c=14", "mul d=7 c=4", "add d=4 c=7", "rot d=9 c=4 k=16", "sub d=5 c=9", "rot d=14 c=5 k=23", "add d=8 c=14", "orx d=13 c=8 b=4", "sub d=3 c=13", "xor d=9 c=3", "mul d=7 c=9", "mul d=0 c=7", "mulc2 d=4 c=0 imm=0xa5531c79", "addc d=5 c=4 imm=0x956e1cec", "rot d=4 c=5 k=12", "xorc d=13 c=4 imm=0xcfd8a170", "xrot d=8 c=13 k=2", "mul d=12 c=8", "rot d=7 c=12 k=18"], + ["mul d=12 c=0", "xor d=14 c=12", "xrot d=7 c=14 k=19", "xor d=9 c=7", "orx d=7 c=9 b=15", "xor d=14 c=7", "xor d=12 c=14", "add d=9 c=12", "sub d=0 c=9", "mulc d=11 c=0 imm=0x032a9d93", "xorc d=12 c=11 imm=0x7816ceed", "add d=6 c=12", "xorc d=7 c=6 imm=0x5f893870", "xorc d=8 c=7 imm=0x38fe7d15", "add d=5 c=8", "xrot d=11 c=5 k=5", "mulc2 d=3 c=11 imm=0xdc8f2169", "add d=12 c=3", "mulc d=1 c=12 imm=0xff5bb02d", "add d=9 c=1", "rot d=5 c=9 k=17", "xrot d=10 c=5 k=9", "add d=12 c=10", "addc d=2 c=12 imm=0x6fbd2719", "mul d=7 c=2", "mul d=10 c=7", "rot d=7 c=10 k=12", "andx d=15 c=7 b=2", "mulc d=1 c=15 imm=0xa496dd7d", "add d=12 c=1", "mul d=9 c=12", "addc d=4 c=9 imm=0x603c29a5", "mulc d=0 c=4 imm=0xb11db5ef", "xrot d=12 c=0 k=12", "xor d=9 c=12", "add d=3 c=9", "xor d=4 c=3", "mulc2 d=10 c=4 imm=0xf2876a93", "mul d=3 c=10", "mul d=13 c=3", "add d=10 c=13", "addc d=0 c=10 imm=0xa38ef984", "add d=13 c=0", "add d=0 c=13", "sub d=4 c=0", "rot d=8 c=4 k=16", "mul d=0 c=8", "xrot d=1 c=0 k=19", "sub d=10 c=1", "sub d=4 c=10", "addc d=3 c=4 imm=0x98d38850", "xor d=15 c=3", "xrot d=12 c=15 k=7", "xor d=0 c=12", "orx d=8 c=0 b=12", "sub d=1 c=8", "sub d=0 c=1", "add d=12 c=0", "xrot d=1 c=12 k=8", "mulc2 d=8 c=1 imm=0xdb178ced", "andx d=13 c=8 b=9", "xrot d=14 c=13 k=31", "xrot d=5 c=14 k=15", "addc d=14 c=5 imm=0x58102672", "rot d=13 c=14 k=31", "mulc d=9 c=13 imm=0xcea6b9a5", "xrot d=8 c=9 k=10", "xor d=0 c=8", "xrot d=1 c=0 k=26", "andx d=0 c=1 b=14", "xrot d=14 c=0 k=29", "xrot d=7 c=14 k=10", "xor d=8 c=7", "xor d=4 c=8", "xor d=3 c=4", "andx d=1 c=3 b=2", "xrot d=15 c=1 k=16", "mulc d=3 c=15 imm=0xf98d62f9", "add d=8 c=3", "xor d=4 c=8", "xor d=13 c=4", "sub d=14 c=13", "add d=13 c=14", "mul d=1 c=13", "addc d=4 c=1 imm=0x2e4fd7f9", "addc d=3 c=4 imm=0xad1f68c8", "add d=11 c=3", "xor d=7 c=11", "xor d=2 c=7", "orx d=7 c=2 b=0", "orx d=3 c=7 b=4", "rot d=14 c=3 k=3", "add d=9 c=14", "orx d=2 c=9 b=4", "add d=7 c=2", "xor d=0 c=7", "add d=5 c=0", "xorc d=6 c=5 imm=0xdd9e035e", "mul d=11 c=6", "orx d=6 c=11 b=15", "sub d=0 c=6", "xorc d=13 c=0 imm=0x28746675", "xor d=1 c=13", "mul d=4 c=1", "orx d=8 c=4 b=6", "andx d=2 c=8 b=15", "add d=15 c=2", "xor d=3 c=15", "sub d=9 c=3", "mulc d=1 c=9 imm=0x9a49d919", "mul d=0 c=1", "mul d=3 c=0", "xor d=12 c=3", "rot d=4 c=12 k=13", "add d=8 c=4", "xor d=15 c=8", "xor d=1 c=15", "mulc d=8 c=1 imm=0x406ccbb9", "xorc d=6 c=8 imm=0x9c63a403", "mul d=7 c=6", "xor d=6 c=7", "sub d=3 c=6", "sub d=2 c=3", "sub d=1 c=2", "sub d=11 c=1", "mulc d=5 c=11 imm=0xc8b2063b", "xor d=9 c=5", "add d=11 c=9", "sub d=14 c=11", "xor d=12 c=14", "rot d=7 c=12 k=19", "xor d=6 c=7", "rot d=7 c=6 k=28", "orx d=0 c=7 b=8", "mulc d=5 c=0 imm=0x91563ef9", "mulc d=4 c=5 imm=0x2489c7dd", "xor d=0 c=4", "add d=8 c=0", "andx d=13 c=8 b=2", "mulc d=4 c=13 imm=0xd3f73963", "add d=0 c=4", "sub d=7 c=0", "mul d=8 c=7", "addc d=12 c=8 imm=0xe7c7770b", "xrot d=2 c=12 k=24", "add d=5 c=2", "sub d=13 c=5", "mulc2 d=7 c=13 imm=0xa499d785", "xorc d=14 c=7 imm=0xa5531f53", "add d=0 c=14", "add d=12 c=0", "add d=4 c=12", "xorc d=5 c=4 imm=0xa21d41b2", "andx d=13 c=5 b=1", "mul d=4 c=13", "rot d=15 c=4 k=17", "mulc2 d=13 c=15 imm=0x9e80ce17", "xor d=4 c=13", "mulc2 d=9 c=4 imm=0x0efbb90f", "rot d=3 c=9 k=22", "add d=9 c=3", "mulc d=7 c=9 imm=0x41f4c675", "xrot d=2 c=7 k=10", "add d=5 c=2", "add d=7 c=5", "xor d=3 c=7", "add d=13 c=3", "orx d=10 c=13 b=12", "sub d=6 c=10", "mul d=4 c=6", "mul d=9 c=4", "andx d=1 c=9 b=2", "rot d=13 c=1 k=17", "orx d=6 c=13 b=14", "mulc d=14 c=6 imm=0x3fcef445", "orx d=2 c=14 b=13", "xor d=14 c=2", "mulc d=9 c=14 imm=0x76f83471", "addc d=15 c=9 imm=0x3620bb75", "mulc d=6 c=15 imm=0xd2ae1b99", "add d=11 c=6", "rot d=1 c=11 k=9", "mul d=2 c=1", "orx d=15 c=2 b=5", "mulc2 d=9 c=15 imm=0xd0673ad9", "andx d=0 c=9 b=10", "xor d=7 c=0", "xor d=10 c=7", "add d=11 c=10", "mulc d=0 c=11 imm=0x1626d79f", "xor d=6 c=0", "sub d=5 c=6", "addc d=1 c=5 imm=0xbdfebf4a", "orx d=10 c=1 b=15", "sub d=3 c=10", "xorc d=14 c=3 imm=0x2f4d32b3", "andx d=0 c=14 b=4", "addc d=10 c=0 imm=0xfec9017a", "add d=8 c=10", "sub d=5 c=8", "add d=3 c=5", "addc d=0 c=3 imm=0x0a719f0b", "sub d=4 c=0", "xor d=1 c=4", "andx d=7 c=1 b=12", "andx d=2 c=7 b=5", "rot d=5 c=2 k=27", "xrot d=4 c=5 k=30", "rot d=12 c=4 k=16", "addc d=8 c=12 imm=0x934b929d", "mul d=6 c=8", "andx d=9 c=6 b=4", "xor d=3 c=9", "add d=14 c=3", "mul d=1 c=14", "mul d=14 c=1", "xor d=5 c=14", "xor d=10 c=5", "mul d=13 c=10", "sub d=4 c=13", "mulc2 d=9 c=4 imm=0xc3f9050b", "mulc d=0 c=9 imm=0x4479cb01", "xrot d=10 c=0 k=22", "xor d=7 c=10", "andx d=11 c=7 b=10", "mulc d=1 c=11 imm=0xa9a3102b", "add d=9 c=1", "rot d=3 c=9 k=4", "xrot d=10 c=3 k=16", "orx d=9 c=10 b=1", "mulc2 d=15 c=9 imm=0xf4a9fbe3", "orx d=5 c=15 b=1", "mulc2 d=14 c=5 imm=0x0fdccaeb", "addc d=7 c=14 imm=0x7e2f9108", "sub d=3 c=7", "mul d=13 c=3", "xorc d=11 c=13 imm=0xc4dab8b7", "xor d=3 c=11", "add d=0 c=3", "mul d=1 c=0", "mulc d=13 c=1 imm=0x735874d5", "xor d=3 c=13", "add d=2 c=3", "xor d=8 c=2", "rot d=5 c=8 k=20", "xrot d=6 c=5 k=8", "addc d=5 c=6 imm=0xc7780520", "xor d=12 c=5", "mul d=0 c=12", "add d=3 c=0", "xrot d=5 c=3 k=9", "sub d=10 c=5", "add d=6 c=10", "add d=8 c=6", "xor d=4 c=8", "xor d=0 c=4", "add d=15 c=0", "sub d=0 c=15", "xrot d=15 c=0 k=14", "add d=4 c=15", "rot d=6 c=4 k=16", "mul d=2 c=6", "xor d=5 c=2", "xor d=6 c=5", "rot d=3 c=6 k=28", "sub d=2 c=3", "rot d=0 c=2 k=3", "mulc2 d=4 c=0 imm=0xc5ff28b1", "xrot d=13 c=4 k=17", "mulc d=2 c=13 imm=0xf64a55e7", "add d=10 c=2", "sub d=5 c=10", "mulc d=0 c=5 imm=0xc34391fb", "xor d=9 c=0", "mulc d=14 c=9 imm=0xd3626e5f", "addc d=12 c=14 imm=0x34b62de8", "rot d=0 c=12 k=3", "sub d=10 c=0", "xor d=5 c=10", "mul d=3 c=5", "add d=1 c=3", "xor d=9 c=1", "xor d=14 c=9", "xrot d=1 c=14 k=24", "mulc d=3 c=1 imm=0xb486108b", "add d=13 c=3", "xrot d=8 c=13 k=15", "add d=2 c=8", "xrot d=13 c=2 k=6", "sub d=1 c=13", "orx d=13 c=1 b=12", "xor d=3 c=13", "mul d=1 c=3", "add d=10 c=1", "xrot d=0 c=10 k=11", "xrot d=14 c=0 k=9", "mulc d=3 c=14 imm=0x1910cbd5", "mul d=2 c=3", "xorc d=3 c=2 imm=0x36e5f7c1", "xorc d=12 c=3 imm=0xc06b695a", "add d=8 c=12", "mul d=11 c=8", "xorc d=14 c=11 imm=0x7e8392d2", "addc d=5 c=14 imm=0xc854c03e", "addc d=14 c=5 imm=0x6264b077", "xor d=3 c=14", "xor d=9 c=3", "orx d=5 c=9 b=11", "xor d=2 c=5", "xrot d=12 c=2 k=11", "sub d=9 c=12", "andx d=11 c=9 b=3", "sub d=14 c=11", "rot d=15 c=14 k=7", "mul d=10 c=15", "mul d=12 c=10", "add d=3 c=12", "rot d=9 c=3 k=5", "addc d=3 c=9 imm=0x25bbb855", "add d=13 c=3", "add d=7 c=13", "add d=10 c=7", "addc d=13 c=10 imm=0x9a1fb9e1", "addc d=9 c=13 imm=0x4a7d742f", "xor d=11 c=9", "mulc d=15 c=11 imm=0xd796e1a9", "addc d=0 c=15 imm=0x4fb80a99", "xor d=14 c=0", "sub d=4 c=14", "rot d=0 c=4 k=19", "xor d=3 c=0", "addc d=0 c=3 imm=0x7a46f0d4", "add d=9 c=0", "xor d=11 c=9", "add d=2 c=11", "xor d=0 c=2", "rot d=10 c=0 k=5", "add d=4 c=10", "sub d=7 c=4", "xor d=12 c=7", "xrot d=10 c=12 k=5", "xor d=12 c=10", "xor d=8 c=12", "xor d=7 c=8", "add d=8 c=7", "addc d=0 c=8 imm=0xf25eb71d", "mul d=15 c=0", "mul d=14 c=15", "addc d=6 c=14 imm=0xc3c48a42", "mulc d=15 c=6 imm=0x8ff157e3", "mulc2 d=4 c=15 imm=0x4517a273", "xor d=9 c=4", "mul d=8 c=9", "xrot d=11 c=8 k=3", "rot d=1 c=11 k=15", "rot d=0 c=1 k=11", "rot d=4 c=0 k=15", "xor d=0 c=4", "sub d=8 c=0", "orx d=5 c=8 b=0", "xorc d=13 c=5 imm=0x842fa93f", "mulc2 d=10 c=13 imm=0xebf84a5b", "mul d=9 c=10", "addc d=10 c=9 imm=0xa4ae65ab", "add d=7 c=10", "add d=4 c=7", "mulc d=8 c=4 imm=0xa095c55b", "add d=13 c=8", "addc d=1 c=13 imm=0x78267af3", "sub d=15 c=1", "xor d=14 c=15", "add d=9 c=14", "add d=5 c=9", "mul d=12 c=5", "add d=14 c=12", "mulc2 d=3 c=14 imm=0x387e70c1", "addc d=8 c=3 imm=0x4bb62e79", "add d=10 c=8", "sub d=14 c=10", "addc d=12 c=14 imm=0x94ade867", "add d=11 c=12", "xrot d=3 c=11 k=17", "sub d=9 c=3", "xor d=8 c=9", "add d=10 c=8", "mulc d=12 c=10 imm=0xf31b9bf9", "sub d=9 c=12", "xor d=14 c=9", "mulc d=4 c=14 imm=0x6c65ed0f", "andx d=5 c=4 b=3", "xor d=13 c=5", "xrot d=8 c=13 k=27", "mul d=15 c=8", "xor d=14 c=15", "addc d=1 c=14 imm=0x0dabf75f", "add d=8 c=1", "andx d=6 c=8 b=4", "sub d=2 c=6", "mulc d=10 c=2 imm=0x5df68b21", "mul d=7 c=10", "rot d=2 c=7 k=30", "xrot d=3 c=2 k=11", "xor d=10 c=3", "rot d=12 c=10 k=18", "xrot d=3 c=12 k=2", "sub d=15 c=3", "andx d=12 c=15 b=3", "addc d=6 c=12 imm=0xba8c656d", "xrot d=11 c=6 k=25", "mul d=8 c=11", "orx d=12 c=8 b=1", "xrot d=10 c=12 k=14", "xorc d=0 c=10 imm=0xf57cb31c", "xor d=15 c=0", "add d=5 c=15", "xor d=2 c=5", "orx d=14 c=2 b=4", "xorc d=10 c=14 imm=0xfc568076", "add d=2 c=10", "xor d=5 c=2", "add d=0 c=5", "xor d=3 c=0", "rot d=7 c=3 k=28", "xor d=9 c=7", "sub d=11 c=9", "sub d=8 c=11", "addc d=10 c=8 imm=0x44a98267", "mulc d=6 c=10 imm=0x78341057", "mul d=9 c=6", "xor d=8 c=9", "sub d=9 c=8", "add d=11 c=9", "xor d=4 c=11", "orx d=7 c=4 b=5", "xor d=11 c=7", "add d=14 c=11", "rot d=3 c=14 k=10", "mulc d=1 c=3 imm=0x699c712f", "xorc d=0 c=1 imm=0xadd48ad1", "xrot d=3 c=0 k=18", "xorc d=0 c=3 imm=0x7c2a7e58", "mulc d=1 c=0 imm=0x5d0ba3bb", "xrot d=10 c=1 k=9", "xorc d=0 c=10 imm=0x3f61235c", "xor d=2 c=0", "sub d=8 c=2", "mul d=12 c=8", "mul d=10 c=12", "xorc d=7 c=10 imm=0x4fe234e6", "xor d=15 c=7", "addc d=3 c=15 imm=0x7518599b", "rot d=12 c=3 k=9", "xor d=8 c=12", "xorc d=9 c=8 imm=0xf95c4703", "rot d=2 c=9 k=7", "xorc d=12 c=2 imm=0x775646a8", "xorc d=15 c=12 imm=0x552eaf71", "sub d=4 c=15", "orx d=15 c=4 b=7", "xor d=0 c=15", "xor d=13 c=0", "addc d=14 c=13 imm=0x87e74b49", "xorc d=6 c=14 imm=0x6efaba41", "addc d=10 c=6 imm=0x88e2108f", "sub d=7 c=10", "sub d=11 c=7", "xorc d=4 c=11 imm=0xa876c358", "xorc d=2 c=4 imm=0xd3f39ab5", "mul d=5 c=2", "rot d=3 c=5 k=9", "xor d=2 c=3", "xrot d=8 c=2 k=2", "mulc d=5 c=8 imm=0x9b50170f", "xrot d=13 c=5 k=7", "add d=0 c=13", "sub d=13 c=0", "xrot d=5 c=13 k=21", "rot d=11 c=5 k=6", "add d=1 c=11", "orx d=10 c=1 b=13", "xor d=4 c=10", "mul d=5 c=4", "xor d=4 c=5", "add d=3 c=4", "rot d=4 c=3 k=29", "mul d=5 c=4", "xorc d=2 c=5 imm=0x435d474c", "xrot d=15 c=2 k=31", "add d=14 c=15", "add d=15 c=14", "sub d=13 c=15", "add d=7 c=13", "xor d=0 c=7", "xrot d=5 c=0 k=13", "sub d=13 c=5", "mul d=15 c=13", "addc d=8 c=15 imm=0xbf3496ca", "xrot d=3 c=8 k=13", "rot d=4 c=3 k=20", "mulc d=6 c=4 imm=0xe0716b4d", "xor d=3 c=6", "xor d=11 c=3", "orx d=12 c=11 b=7", "rot d=0 c=12 k=7", "xor d=8 c=0", "add d=1 c=8", "xrot d=13 c=1 k=22", "xorc d=4 c=13 imm=0xaac36692", "mul d=1 c=4", "xorc d=8 c=1 imm=0x1e4e42de", "mul d=15 c=8", "orx d=5 c=15 b=11", "add d=13 c=5", "xor d=6 c=13", "xorc d=12 c=6 imm=0xb025ee52", "add d=5 c=12", "mul d=2 c=5", "xrot d=10 c=2 k=8", "sub d=15 c=10", "orx d=5 c=15 b=10", "add d=3 c=5", "sub d=2 c=3", "addc d=10 c=2 imm=0x80d367fe", "sub d=12 c=10", "mul d=15 c=12", "xorc d=6 c=15 imm=0x8d56107c", "xor d=15 c=6", "xrot d=4 c=15 k=9", "orx d=12 c=4 b=14", "xrot d=13 c=12 k=10", "xor d=2 c=13", "mulc2 d=14 c=2 imm=0x1a3e65cb", "mul d=15 c=14", "add d=11 c=15", "xor d=7 c=11", "sub d=12 c=7", "xorc d=8 c=12 imm=0xfadd6688", "rot d=7 c=8 k=8", "add d=9 c=7", "xor d=14 c=9", "add d=13 c=14", "xorc d=6 c=13 imm=0xed97a531", "sub d=7 c=6", "xrot d=4 c=7 k=28", "xor d=6 c=4", "xor d=10 c=6", "xor d=3 c=10", "sub d=1 c=3", "add d=3 c=1", "mulc d=13 c=3 imm=0x48c92b9f", "rot d=2 c=13 k=6", "rot d=11 c=2 k=12", "xor d=8 c=11", "xrot d=12 c=8 k=19", "orx d=0 c=12 b=7", "mulc d=2 c=0 imm=0x3e4b61a1", "mulc d=0 c=2 imm=0x582f7a5f", "mulc d=12 c=0 imm=0x2b069c6f", "mulc2 d=5 c=12 imm=0x7cf7ee03", "add d=0 c=5", "mulc d=4 c=0 imm=0x16927f07", "rot d=2 c=4 k=8", "rot d=12 c=2 k=15", "mulc d=5 c=12 imm=0xbf55dac1", "mul d=10 c=5", "xrot d=6 c=10 k=16", "xrot d=3 c=6 k=20", "addc d=5 c=3 imm=0xc2d80c0e", "xorc d=13 c=5 imm=0x9407a51d", "xrot d=11 c=13 k=29", "sub d=10 c=11", "xrot d=1 c=10 k=6", "rot d=3 c=1 k=5", "andx d=9 c=3 b=0", "xor d=15 c=9", "sub d=6 c=15", "xorc d=13 c=6 imm=0xba96a2fe", "xorc d=14 c=13 imm=0x39f982b0", "addc d=8 c=14 imm=0x4c13cb1a", "xrot d=7 c=8 k=23", "sub d=15 c=7", "rot d=7 c=15 k=30", "add d=11 c=7", "add d=14 c=11", "xrot d=8 c=14 k=22", "xorc d=6 c=8 imm=0x34c4199b", "xor d=3 c=6", "add d=4 c=3", "add d=13 c=4", "xor d=9 c=13", "andx d=3 c=9 b=4", "add d=15 c=3", "sub d=1 c=15", "sub d=12 c=1", "addc d=14 c=12 imm=0xec96595f", "xor d=4 c=14", "xor d=12 c=4", "sub d=11 c=12", "xor d=13 c=11", "add d=0 c=13", "xor d=11 c=0", "xor d=3 c=11", "xor d=8 c=3", "orx d=0 c=8 b=15", "rot d=11 c=0 k=1", "orx d=7 c=11 b=5", "mulc2 d=4 c=7 imm=0xc1674329", "add d=7 c=4", "mul d=6 c=7", "mulc d=2 c=6 imm=0xc284407b", "xor d=0 c=2", "sub d=7 c=0", "rot d=14 c=7 k=27", "mul d=8 c=14", "sub d=14 c=8", "mul d=11 c=14", "mulc2 d=7 c=11 imm=0x5a2517e9", "add d=6 c=7", "xorc d=7 c=6 imm=0xf29de804", "sub d=10 c=7", "xor d=8 c=10", "rot d=5 c=8 k=6", "addc d=3 c=5 imm=0xa3c2f2b2", "xrot d=0 c=3 k=17", "sub d=12 c=0", "xor d=8 c=12", "xrot d=6 c=8 k=1", "mulc2 d=12 c=6 imm=0xed2bef65", "add d=9 c=12", "xorc d=4 c=9 imm=0xacaef5be", "add d=3 c=4", "mul d=1 c=3", "addc d=8 c=1 imm=0x462f5fff", "xor d=2 c=8", "add d=1 c=2", "rot d=11 c=1 k=14", "xorc d=6 c=11 imm=0xa93bca39", "xor d=1 c=6", "xorc d=0 c=1 imm=0x571f65b5", "mulc2 d=9 c=0 imm=0xcd8edced", "xorc d=11 c=9 imm=0xa554ca69", "add d=2 c=11", "xor d=9 c=2", "xor d=4 c=9", "add d=8 c=4", "add d=4 c=8", "sub d=12 c=4", "sub d=4 c=12", "xrot d=12 c=4 k=1", "xrot d=5 c=12 k=17", "mul d=14 c=5", "orx d=8 c=14 b=4", "xrot d=13 c=8 k=21", "sub d=15 c=13", "xor d=0 c=15", "add d=6 c=0", "xrot d=14 c=6 k=24", "mulc2 d=13 c=14 imm=0x929d4b37", "sub d=15 c=13", "mulc d=4 c=15 imm=0xc6dc8fbb", "xrot d=7 c=4 k=23", "xor d=8 c=7", "mulc d=10 c=8 imm=0x06233043", "mulc d=2 c=10 imm=0x4403efd9", "xor d=3 c=2", "sub d=5 c=3", "add d=12 c=5", "mulc2 d=6 c=12 imm=0x2ae6d079", "xor d=10 c=6", "xorc d=7 c=10 imm=0x674b5a65", "rot d=13 c=7 k=3", "mul d=9 c=13", "sub d=12 c=9", "mul d=8 c=12", "mul d=5 c=8", "add d=9 c=5", "xrot d=7 c=9 k=20", "add d=13 c=7", "add d=4 c=13", "xor d=13 c=4", "sub d=3 c=13", "sub d=4 c=3", "xor d=0 c=4", "rot d=3 c=0 k=3", "xrot d=5 c=3 k=25", "xor d=0 c=5", "mul d=11 c=0", "xorc d=10 c=11 imm=0x147c14d2", "xor d=11 c=10", "rot d=0 c=11 k=18", "xor d=13 c=0", "xor d=12 c=13", "sub d=0 c=12", "xor d=13 c=0", "rot d=11 c=13 k=26", "add d=10 c=11", "xorc d=11 c=10 imm=0x4b0abaf2", "sub d=3 c=11", "orx d=8 c=3 b=9", "orx d=12 c=8 b=10", "rot d=11 c=12 k=31", "mul d=4 c=11", "addc d=0 c=4 imm=0xab0da7ec", "xrot d=6 c=0 k=31", "xrot d=8 c=6 k=21", "sub d=12 c=8", "rot d=9 c=12 k=7", "sub d=7 c=9", "mul d=3 c=7", "add d=2 c=3", "mulc2 d=4 c=2 imm=0xf4865499", "mulc2 d=7 c=4 imm=0xbed687ff", "add d=14 c=7", "addc d=15 c=14 imm=0x603451a7", "andx d=10 c=15 b=2", "xrot d=7 c=10 k=22", "add d=1 c=7", "add d=5 c=1", "mulc d=14 c=5 imm=0x8e7b488d", "orx d=9 c=14 b=11", "mul d=12 c=9", "add d=1 c=12", "addc d=12 c=1 imm=0x6855c1d8", "sub d=15 c=12", "xrot d=9 c=15 k=5", "xrot d=8 c=9 k=2", "sub d=7 c=8", "mul d=14 c=7", "mul d=12 c=14", "rot d=0 c=12 k=1", "rot d=15 c=0 k=7", "mul d=5 c=15", "mulc d=12 c=5 imm=0x015c0c07", "rot d=5 c=12 k=4", "xrot d=4 c=5 k=2", "xor d=10 c=4"] + ], + "word": "dataset[w] = item(w >> 4)[w & 15]" + }, + "instructions": [ + {"i": 0, "op": "mad", "dst": 2, "src": 3, "src2": 4, "imm": "0xbf7b174d", "imm2": "0x337b762e", "rot": 17, "bit": 2, "mask": 2, "width": 1}, + {"i": 1, "op": "mad", "dst": 2, "src": 1, "src2": 1, "imm": "0xdd04a5da", "imm2": "0x42da7657", "rot": 15, "bit": 30, "mask": 16, "width": 1}, + {"i": 2, "op": "mad", "dst": 2, "src": 3, "src2": 2, "imm": "0x734003fa", "imm2": "0x5bb67700", "rot": 3, "bit": 20, "mask": 1, "width": 1}, + {"i": 3, "op": "xor", "dst": 3, "src": 5, "src2": 5, "imm": "0xc55a1b1c", "imm2": "0xa19720f3", "rot": 7, "bit": 8, "mask": 1, "width": 1}, + {"i": 4, "op": "load", "dst": 7, "src": 2, "src2": 5, "imm": "0xad572dd7", "imm2": "0x9ceb3ea7", "rot": 18, "bit": 30, "mask": 2, "width": 1}, + {"i": 5, "op": "load", "dst": 5, "src": 7, "src2": 3, "imm": "0x769a53be", "imm2": "0x80f9067e", "rot": 12, "bit": 22, "mask": 1, "width": 1}, + {"i": 6, "op": "shfl", "dst": 1, "src": 4, "src2": 0, "imm": "0xd3613d88", "imm2": "0x262fb219", "rot": 10, "bit": 30, "mask": 8, "width": 1}, + {"i": 7, "op": "shfl", "dst": 7, "src": 3, "src2": 4, "imm": "0xce38e42f", "imm2": "0xb868b818", "rot": 11, "bit": 8, "mask": 8, "width": 1}, + {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, + {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, + {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, + {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, + {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, + {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, + {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, + {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, + {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, + {"i": 27, "op": "xor", "dst": 0, "src": 5, "src2": 7, "imm": "0x6378fe15", "imm2": "0x66c78f42", "rot": 12, "bit": 31, "mask": 8, "width": 1}, + {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, + {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, + {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, + {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, + {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, + {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, + {"i": 41, "op": "mad", "dst": 3, "src": 6, "src2": 3, "imm": "0xce13eff8", "imm2": "0x04cc1d55", "rot": 3, "bit": 1, "mask": 4, "width": 1}, + {"i": 42, "op": "sub", "dst": 6, "src": 7, "src2": 1, "imm": "0x6a65ab71", "imm2": "0x8fbc1bcd", "rot": 4, "bit": 1, "mask": 8, "width": 1}, + {"i": 43, "op": "xor", "dst": 7, "src": 0, "src2": 7, "imm": "0xdaeb4928", "imm2": "0xc0423027", "rot": 24, "bit": 11, "mask": 8, "width": 1}, + {"i": 44, "op": "load", "dst": 1, "src": 7, "src2": 7, "imm": "0x778f01c9", "imm2": "0x28cedcea", "rot": 12, "bit": 4, "mask": 16, "width": 1}, + {"i": 45, "op": "mul", "dst": 2, "src": 3, "src2": 2, "imm": "0xf4264f1b", "imm2": "0x0f627d56", "rot": 5, "bit": 28, "mask": 8, "width": 1}, + {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, + {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, + {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, + {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, + {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, + {"i": 53, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x2bb965af", "imm2": "0x77b1520d", "rot": 2, "bit": 12, "mask": 8, "width": 1}, + {"i": 54, "op": "rotl", "dst": 7, "src": 1, "src2": 0, "imm": "0x553e678b", "imm2": "0x3cc8eae0", "rot": 14, "bit": 20, "mask": 2, "width": 1}, + {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, + {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, + {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, + {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, + {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, + {"i": 63, "op": "rotl", "dst": 5, "src": 4, "src2": 2, "imm": "0xae210f8d", "imm2": "0x8e499ba4", "rot": 19, "bit": 9, "mask": 1, "width": 1} + ] +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/program.metal b/proto-cuda/packs-ca3-derive/dr736-genesis/program.metal new file mode 100644 index 00000000..d90be2f7 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/program.metal @@ -0,0 +1,109 @@ +#include +using namespace metal; + +#define MASK 0x0fffffffu +constant uint SEEDW[8] = { 0x67a9a7beu, 0x1a155b25u, 0xfddfb732u, 0x4b5af2e8u, 0xc55caf33u, 0xa27c13b7u, 0x06628a48u, 0x03852469u }; + +inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +inline uint rotl_imm(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 +inline uint rotr_var(uint x, uint n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +kernel void igneum_hash(device const uint* dataset [[buffer(0)]], + device ulong* out [[buffer(1)]], + constant uint& baseNonce [[buffer(2)]], + uint gid [[thread_position_in_grid]]) { + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + { uint x = nonce ^ SEEDW[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ SEEDW[1]; } + { uint x = nonce ^ SEEDW[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ SEEDW[2]; } + { uint x = nonce ^ SEEDW[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ SEEDW[3]; } + { uint x = nonce ^ SEEDW[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ SEEDW[4]; } + { uint x = nonce ^ SEEDW[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ SEEDW[5]; } + { uint x = nonce ^ SEEDW[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ SEEDW[6]; } + { uint x = nonce ^ SEEDW[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ SEEDW[7]; } + { uint x = nonce ^ SEEDW[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ SEEDW[0]; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r2 = r3 * r4 + r2; // 0 + r2 = r1 * r1 + r2; // 1 + r2 = r3 * r2 + r2; // 2 + r3 = r3 ^ r5; // 3 + r7 = r7 ^ dataset[r2 & MASK]; // 4 + r5 = r5 ^ dataset[r7 & MASK]; // 5 + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)8); // 6 + r7 = r7 ^ simd_shuffle_xor(r3, (ushort)8); // 7 + r1 = mulhi(r1, r5); // 8 + r6 = rotr_var(r6, r3); // 9 + r3 = r3 | r4; // 10 + r4 = r4 ^ dataset[r3 & MASK]; // 11 + r0 = mulhi(r0, r4); // 12 + r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 + r0 = r0 ^ dataset[r4 & MASK]; // 14 + r2 = r2 - r4; // 15 + r2 = r2 ^ dataset[r0 & MASK]; // 16 + r7 = r7 ^ dataset[r2 & MASK]; // 17 + r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 + r5 = r5 * r0; // 19 + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 + r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 + r6 = mulhi(r6, r2); // 22 + r6 = r6 ^ dataset[r1 & MASK]; // 23 + r5 = r5 * r0; // 24 + r5 = rotl_imm(r5, 19u); // 25 + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 + r0 = r0 ^ r5; // 27 + r0 = r0 ^ r4; // 28 + r3 = r3 - r0; // 29 + r5 = r5 * r1; // 30 + r7 = r7 ^ dataset[r2 & MASK]; // 31 + r1 = r1 ^ dataset[r0 & MASK]; // 32 + r5 = r5 ^ r6; // 33 + r5 = r5 ^ dataset[r1 & MASK]; // 34 + r0 = mulhi(r0, r5); // 35 + r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 + r7 = r7 ^ dataset[r0 & MASK]; // 37 + r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 + r2 = r2 ^ r5; // 40 + r3 = r6 * r3 + r3; // 41 + r6 = r6 - r7; // 42 + r7 = r7 ^ r0; // 43 + r1 = r1 ^ dataset[r7 & MASK]; // 44 + r2 = r2 * r3; // 45 + r1 = mulhi(r1, r5); // 46 + r4 = r4 - r3; // 47 + r2 = rotr_var(r2, r6); // 48 + r3 = r3 ^ dataset[r5 & MASK]; // 49 + r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 + r0 = r0 * r2; // 51 + r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 + r1 = r1 + r0 + select(0x2bb965afu, 0x77b1520du, ((sel >> 12u) & 1u) != 0u); // 53 + r7 = rotl_imm(r7, 14u); // 54 + r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 + r6 = r6 ^ dataset[r7 & MASK]; // 56 + r1 = rotr_var(r1, r5); // 57 + r5 = r5 ^ dataset[r4 & MASK]; // 58 + r6 = r6 ^ dataset[r2 & MASK]; // 59 + r3 = r5 * r0 + r3; // 60 + r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 + r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 + r5 = rotl_imm(r5, 19u); // 63 + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/program_bound.metal b/proto-cuda/packs-ca3-derive/dr736-genesis/program_bound.metal new file mode 100644 index 00000000..8fafce71 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/program_bound.metal @@ -0,0 +1,111 @@ +#include +using namespace metal; + +#define MASK 0x0fffffffu +constant uint SEEDW[8] = { 0x67a9a7beu, 0x1a155b25u, 0xfddfb732u, 0x4b5af2e8u, 0xc55caf33u, 0xa27c13b7u, 0x06628a48u, 0x03852469u }; + +inline uint splitmix32(uint x) { + x ^= x >> 16; x *= 0x7feb352du; + x ^= x >> 15; x *= 0x846ca68bu; + x ^= x >> 16; + return x; +} +inline uint rotl_imm(uint x, uint n) { return (x << n) | (x >> (32u - n)); } // n in 1..31 +inline uint rotr_var(uint x, uint n) { n &= 31u; return (x >> n) | (x << ((32u - n) & 31u)); } +inline uint ds_elem(uint i, uint d0, uint d1) { + uint x = i ^ d0; + x *= 0x9E3779B1u; x ^= x >> 15; + x += d1; + x *= 0x85EBCA77u; x ^= x >> 13; + x *= 0xC2B2AE3Du; x ^= x >> 16; + return x; +} + +// Header-bound variant: the init words come from buffer 3 (bind.rs), not from SEEDW. +kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], + device ulong* out [[buffer(1)]], + constant uint& baseNonce [[buffer(2)]], + constant uint* initw [[buffer(3)]], + uint gid [[thread_position_in_grid]]) { + uint nonce = baseNonce + gid; + uint r0, r1, r2, r3, r4, r5, r6, r7; + { uint x = nonce ^ initw[0]; x += 0x9e3779b9u * 1u; x = splitmix32(x); r0 = x ^ initw[1]; } + { uint x = nonce ^ initw[1]; x += 0x9e3779b9u * 2u; x = splitmix32(x); r1 = x ^ initw[2]; } + { uint x = nonce ^ initw[2]; x += 0x9e3779b9u * 3u; x = splitmix32(x); r2 = x ^ initw[3]; } + { uint x = nonce ^ initw[3]; x += 0x9e3779b9u * 4u; x = splitmix32(x); r3 = x ^ initw[4]; } + { uint x = nonce ^ initw[4]; x += 0x9e3779b9u * 5u; x = splitmix32(x); r4 = x ^ initw[5]; } + { uint x = nonce ^ initw[5]; x += 0x9e3779b9u * 6u; x = splitmix32(x); r5 = x ^ initw[6]; } + { uint x = nonce ^ initw[6]; x += 0x9e3779b9u * 7u; x = splitmix32(x); r6 = x ^ initw[7]; } + { uint x = nonce ^ initw[7]; x += 0x9e3779b9u * 8u; x = splitmix32(x); r7 = x ^ initw[0]; } + + for (uint it = 0u; it < 8u; ++it) { + uint sel = r0; + r2 = r3 * r4 + r2; // 0 + r2 = r1 * r1 + r2; // 1 + r2 = r3 * r2 + r2; // 2 + r3 = r3 ^ r5; // 3 + r7 = r7 ^ dataset[r2 & MASK]; // 4 + r5 = r5 ^ dataset[r7 & MASK]; // 5 + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)8); // 6 + r7 = r7 ^ simd_shuffle_xor(r3, (ushort)8); // 7 + r1 = mulhi(r1, r5); // 8 + r6 = rotr_var(r6, r3); // 9 + r3 = r3 | r4; // 10 + r4 = r4 ^ dataset[r3 & MASK]; // 11 + r0 = mulhi(r0, r4); // 12 + r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 + r0 = r0 ^ dataset[r4 & MASK]; // 14 + r2 = r2 - r4; // 15 + r2 = r2 ^ dataset[r0 & MASK]; // 16 + r7 = r7 ^ dataset[r2 & MASK]; // 17 + r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 + r5 = r5 * r0; // 19 + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 + r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 + r6 = mulhi(r6, r2); // 22 + r6 = r6 ^ dataset[r1 & MASK]; // 23 + r5 = r5 * r0; // 24 + r5 = rotl_imm(r5, 19u); // 25 + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 + r0 = r0 ^ r5; // 27 + r0 = r0 ^ r4; // 28 + r3 = r3 - r0; // 29 + r5 = r5 * r1; // 30 + r7 = r7 ^ dataset[r2 & MASK]; // 31 + r1 = r1 ^ dataset[r0 & MASK]; // 32 + r5 = r5 ^ r6; // 33 + r5 = r5 ^ dataset[r1 & MASK]; // 34 + r0 = mulhi(r0, r5); // 35 + r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 + r7 = r7 ^ dataset[r0 & MASK]; // 37 + r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 + r2 = r2 ^ r5; // 40 + r3 = r6 * r3 + r3; // 41 + r6 = r6 - r7; // 42 + r7 = r7 ^ r0; // 43 + r1 = r1 ^ dataset[r7 & MASK]; // 44 + r2 = r2 * r3; // 45 + r1 = mulhi(r1, r5); // 46 + r4 = r4 - r3; // 47 + r2 = rotr_var(r2, r6); // 48 + r3 = r3 ^ dataset[r5 & MASK]; // 49 + r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 + r0 = r0 * r2; // 51 + r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 + r1 = r1 + r0 + select(0x2bb965afu, 0x77b1520du, ((sel >> 12u) & 1u) != 0u); // 53 + r7 = rotl_imm(r7, 14u); // 54 + r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 + r6 = r6 ^ dataset[r7 & MASK]; // 56 + r1 = rotr_var(r1, r5); // 57 + r5 = r5 ^ dataset[r4 & MASK]; // 58 + r6 = r6 ^ dataset[r2 & MASK]; // 59 + r3 = r5 * r0 + r3; // 60 + r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 + r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 + r5 = rotl_imm(r5, 19u); // 63 + } + uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); + uint hi = r4 ^ rotl_imm(r5, 9u) ^ rotl_imm(r6, 18u) ^ rotl_imm(r7, 27u); + out[gid] = ((ulong)hi << 32) | (ulong)lo; +} diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.h b/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.h new file mode 100644 index 00000000..bbbc8ac0 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.h @@ -0,0 +1,57 @@ +// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand. +// Expected outputs: igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset +#pragma once +#ifdef __cplusplus +#include +#else +#include +#endif + +#define IGNEUM_VEC_WARPS 3 +static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; +static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { + { // base nonce 0 + 0xe23d389f3eea0c83ull, 0xdb20ad461b5a2b40ull, 0x19f7ba3b1f71682cull, 0x85f636966fc9aca0ull, 0x6487ed96bdc27c42ull, 0xc490c3313b8029a3ull, 0xe361eba9844902d4ull, 0xf08e800494c84491ull, + 0xa8bad93be02c1cacull, 0xe4e1f2c75c891797ull, 0x63b050548aa5d9b3ull, 0x7b8851cd9a064497ull, 0x9873c6fdd34355abull, 0xbe51e127ed02c404ull, 0x1aa1ee5f4c909067ull, 0x422684f3c86c5058ull, + 0x42c3e7bc0f3578a3ull, 0x3e34aef37a263942ull, 0xcf0a9f5f13bd905cull, 0x44ba872dba90ac37ull, 0xbd590fe07552ad9bull, 0x62b32d43d066161eull, 0x213423a10a13d5d1ull, 0x6bca949b59253f84ull, + 0xfdb3dba0dcb2951bull, 0x1f871d6c8a19d696ull, 0x413da5a7e4e5f500ull, 0xa448622cdd32bb6dull, 0x5193eba1f8804e2aull, 0x567869c0cfdb19acull, 0x2b2b619c048918dcull, 0x6605db059b381bd9ull + }, + { // base nonce 4096 + 0xfdb4b214da8ce292ull, 0xa04a87297fc6a9c0ull, 0x968cecee7a3bcd99ull, 0xa41939b15019ad50ull, 0xffc694d1b04e4da2ull, 0xc262e3973d436fdaull, 0x665a2ce13954b603ull, 0x6ece51e9d9d5d921ull, + 0x5ff85c609da62800ull, 0xde9a8e850dd6c1e9ull, 0x39e876e19ae70187ull, 0xdb55c10b53c52bf2ull, 0x610845800cd92811ull, 0x696316e0c89c9d52ull, 0x3f18086d783e7d7aull, 0xb0d29c8dfb421fd5ull, + 0x580543d5977c1138ull, 0xaba172c0bc028b29ull, 0x43ffd7726859240dull, 0xf04dcb8e1b09dcafull, 0xa1ebc5eb5873c4fbull, 0x4141b328723483e0ull, 0xba9fad0940aa4905ull, 0xed0671189b176bd0ull, + 0x7ed7083b52f320fdull, 0x30c86e3033463bf7ull, 0x8169974907e0f4a3ull, 0x89fd7aad0e41bf03ull, 0x1aab38280fa3ee63ull, 0x6f525aeaa4c8a186ull, 0x5bd2a274c3905d8bull, 0xdb698d03437d74f7ull + }, + { // base nonce 1000000 + 0x534671b1bf5cea36ull, 0xe3f81c66bf210aa3ull, 0xb79ffc3d3cca6731ull, 0x5df44d8e9e3ac008ull, 0x445792668a534b0dull, 0x293f8c07ed96f576ull, 0x5b2e23716649e117ull, 0x55aa3dcc43378f3full, + 0xfec021749867a3a8ull, 0x3f06d1c7cabc290full, 0x875d22f8b0811415ull, 0x0cd09e82747f0eefull, 0x2bcf3b7cd81a64c8ull, 0x23c180008f4a8677ull, 0x8bae18c724c5810aull, 0xb6a3fe36acf8b5e3ull, + 0xc145ffcaa45352baull, 0xf1a0f8edaaf82d2dull, 0x205ba1313b3852b1ull, 0x6922192747873b0bull, 0x9937304a65a44a7dull, 0xca589d2fe74a7e01ull, 0xbecb0ddd75ba8dddull, 0x752e223db126522aull, + 0x92f919e76899e682ull, 0x6c9bf07fddaae5efull, 0xfa7a39ed604236c0ull, 0x1478fb9d0050bc69ull, 0x9e078959178a2797ull, 0x7e6311fd8ff88b13ull, 0x911c33694145c818ull, 0x733b123353f13d21ull + } +}; + +// Dataset self-test: dataset[0..15] and dataset[IGNEUM_MASK] (268435455). +static const uint32_t IGNEUM_DS_HEAD[16] = { + 0xe73af5cau, 0x45d77effu, 0xb640f499u, 0x351c2ca1u, 0xfed2d16fu, 0x1199bd1du, 0x1db2bbecu, 0x4b1769deu, + 0x45b535eau, 0x414c389cu, 0xb8cada9cu, 0x32a3eb0fu, 0x405305cau, 0xddbd43e4u, 0xbdd280acu, 0x70358961u +}; +static const uint32_t IGNEUM_DS_LAST_INDEX = 268435455u; +static const uint32_t IGNEUM_DS_LAST = 0x7cdbf6b5u; +// 64 sampled dataset words (index, value) computed on the Mac. +#define IGNEUM_DS_SAMPLES 64 +static const uint32_t IGNEUM_DS_SAMPLE_INDEX[IGNEUM_DS_SAMPLES] = { + 59471966u, 217795994u, 208353206u, 42483309u, 172547758u, 148076330u, 183853158u, 214389424u, 267488061u, 169781097u, 184093494u, 153880993u, 84977930u, 46426879u, 3093825u, 225364072u, 44593546u, 260713159u, 168250303u, 52384140u, 223401610u, 45554030u, 95410555u, 175039924u, 79171087u, 267580473u, 24168642u, 37981670u, 171551130u, 195559979u, 204611762u, 140997658u, 138925853u, 86637313u, 20736778u, 219665210u, 160430336u, 264654675u, 8013395u, 228945585u, 213884386u, 104419827u, 44185464u, 142737231u, 99284897u, 132475900u, 61861762u, 132056166u, 262388043u, 91878046u, 117353561u, 124768597u, 71352993u, 190698941u, 46055428u, 55281366u, 165145231u, 106810753u, 171985651u, 232085256u, 159510492u, 40072060u, 209107596u, 39023794u +}; +static const uint32_t IGNEUM_DS_SAMPLE_VALUE[IGNEUM_DS_SAMPLES] = { + 0x0c799a6du, 0xa21ecab8u, 0xcc71d9a3u, 0xb0d7af9cu, 0x1925c929u, 0x457795ffu, 0x4718201au, 0x985cde9eu, 0x4bb9b17eu, 0x677407ddu, 0x6093de87u, 0x2a754135u, 0xbc58f70du, 0xd805eb4bu, 0xf453a94du, 0x5a28b420u, 0xe92fb02bu, 0x8a48d35au, 0x2024c448u, 0x48ac5a95u, 0x8fa7880cu, 0xfff38e1bu, 0x4e98033au, 0xb6a33ee4u, 0xdfb0f94fu, 0x80d99b65u, 0x7d1c8bdeu, 0x06f4c2c4u, 0x05e3527cu, 0x8690f1beu, 0xa392261au, 0xac2293ffu, 0x0d067d65u, 0x7133a61eu, 0x1b115d00u, 0x566e466fu, 0x40e4c461u, 0x39b8ff78u, 0x580c8cafu, 0xbdc4761bu, 0x18e3d94cu, 0x7d742821u, 0xaeb2e213u, 0xbf49ac05u, 0xa607dc56u, 0x225cafb1u, 0xb4f81cf3u, 0x68afbfa5u, 0xe6d35b11u, 0x86050c01u, 0x799c3487u, 0xa90362eau, 0x051a2bbeu, 0xced2c729u, 0xe9429d0bu, 0x5bcdc16cu, 0x0af50eb5u, 0x1493ced7u, 0xcd80ab7eu, 0x4b67919au, 0x633f820au, 0x5fd0275eu, 0x6d20c837u, 0x200a638eu +}; +// Cache self-test (memory-hard mode): cache[0..15], the last 16 words, and FNV-1a 64 over all 2^26 words. +static const uint32_t IGNEUM_CACHE_HEAD[16] = { + 0x355a86d2u, 0x7957db1cu, 0xd21772afu, 0x6fc1e09bu, 0xd55ce61du, 0x6e6a278bu, 0xd3f543ceu, 0x223d8e82u, + 0x143ab337u, 0x2e9f05bdu, 0x2eb389bfu, 0x0c6e449eu, 0x5cfa4222u, 0xba6560feu, 0x8e3e1aa4u, 0xdbcc1d53u +}; +static const uint32_t IGNEUM_CACHE_LAST[16] = { + 0x41190d91u, 0xbd277957u, 0x22ddbb49u, 0x6986f207u, 0xdf69a4d6u, 0x26401a3au, 0x818230fbu, 0xc417122du, + 0x3597b211u, 0xb553ce55u, 0xcf39cc0du, 0x3b7fc43au, 0x3fd43b00u, 0x67e1c80eu, 0xffa7ea7du, 0xca2960abu +}; +static const uint64_t IGNEUM_CACHE_FNV64 = 0x48c4f5bf24166b2eull; diff --git a/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.json b/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.json new file mode 100644 index 00000000..83507710 --- /dev/null +++ b/proto-cuda/packs-ca3-derive/dr736-genesis/vectors.json @@ -0,0 +1,36 @@ +{ + "seed": "igneum-genesis", + "day": "2026-10-03", + "dataset_mode": "memory-hard", + "dataset_log2_words": 28, + "mask": "0x0fffffff", + "lanes": 32, + "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", + "warps": [ + {"base_nonce": 0, "expected": [ + "0xe23d389f3eea0c83", "0xdb20ad461b5a2b40", "0x19f7ba3b1f71682c", "0x85f636966fc9aca0", "0x6487ed96bdc27c42", "0xc490c3313b8029a3", "0xe361eba9844902d4", "0xf08e800494c84491", + "0xa8bad93be02c1cac", "0xe4e1f2c75c891797", "0x63b050548aa5d9b3", "0x7b8851cd9a064497", "0x9873c6fdd34355ab", "0xbe51e127ed02c404", "0x1aa1ee5f4c909067", "0x422684f3c86c5058", + "0x42c3e7bc0f3578a3", "0x3e34aef37a263942", "0xcf0a9f5f13bd905c", "0x44ba872dba90ac37", "0xbd590fe07552ad9b", "0x62b32d43d066161e", "0x213423a10a13d5d1", "0x6bca949b59253f84", + "0xfdb3dba0dcb2951b", "0x1f871d6c8a19d696", "0x413da5a7e4e5f500", "0xa448622cdd32bb6d", "0x5193eba1f8804e2a", "0x567869c0cfdb19ac", "0x2b2b619c048918dc", "0x6605db059b381bd9" + ]}, + {"base_nonce": 4096, "expected": [ + "0xfdb4b214da8ce292", "0xa04a87297fc6a9c0", "0x968cecee7a3bcd99", "0xa41939b15019ad50", "0xffc694d1b04e4da2", "0xc262e3973d436fda", "0x665a2ce13954b603", "0x6ece51e9d9d5d921", + "0x5ff85c609da62800", "0xde9a8e850dd6c1e9", "0x39e876e19ae70187", "0xdb55c10b53c52bf2", "0x610845800cd92811", "0x696316e0c89c9d52", "0x3f18086d783e7d7a", "0xb0d29c8dfb421fd5", + "0x580543d5977c1138", "0xaba172c0bc028b29", "0x43ffd7726859240d", "0xf04dcb8e1b09dcaf", "0xa1ebc5eb5873c4fb", "0x4141b328723483e0", "0xba9fad0940aa4905", "0xed0671189b176bd0", + "0x7ed7083b52f320fd", "0x30c86e3033463bf7", "0x8169974907e0f4a3", "0x89fd7aad0e41bf03", "0x1aab38280fa3ee63", "0x6f525aeaa4c8a186", "0x5bd2a274c3905d8b", "0xdb698d03437d74f7" + ]}, + {"base_nonce": 1000000, "expected": [ + "0x534671b1bf5cea36", "0xe3f81c66bf210aa3", "0xb79ffc3d3cca6731", "0x5df44d8e9e3ac008", "0x445792668a534b0d", "0x293f8c07ed96f576", "0x5b2e23716649e117", "0x55aa3dcc43378f3f", + "0xfec021749867a3a8", "0x3f06d1c7cabc290f", "0x875d22f8b0811415", "0x0cd09e82747f0eef", "0x2bcf3b7cd81a64c8", "0x23c180008f4a8677", "0x8bae18c724c5810a", "0xb6a3fe36acf8b5e3", + "0xc145ffcaa45352ba", "0xf1a0f8edaaf82d2d", "0x205ba1313b3852b1", "0x6922192747873b0b", "0x9937304a65a44a7d", "0xca589d2fe74a7e01", "0xbecb0ddd75ba8ddd", "0x752e223db126522a", + "0x92f919e76899e682", "0x6c9bf07fddaae5ef", "0xfa7a39ed604236c0", "0x1478fb9d0050bc69", "0x9e078959178a2797", "0x7e6311fd8ff88b13", "0x911c33694145c818", "0x733b123353f13d21" + ]} + ], + "dataset_head": ["0xe73af5ca", "0x45d77eff", "0xb640f499", "0x351c2ca1", "0xfed2d16f", "0x1199bd1d", "0x1db2bbec", "0x4b1769de", "0x45b535ea", "0x414c389c", "0xb8cada9c", "0x32a3eb0f", "0x405305ca", "0xddbd43e4", "0xbdd280ac", "0x70358961"], + "dataset_last_index": 268435455, + "dataset_last": "0x7cdbf6b5", + "dataset_samples": [{"index": 59471966, "value": "0x0c799a6d"}, {"index": 217795994, "value": "0xa21ecab8"}, {"index": 208353206, "value": "0xcc71d9a3"}, {"index": 42483309, "value": "0xb0d7af9c"}, {"index": 172547758, "value": "0x1925c929"}, {"index": 148076330, "value": "0x457795ff"}, {"index": 183853158, "value": "0x4718201a"}, {"index": 214389424, "value": "0x985cde9e"}, {"index": 267488061, "value": "0x4bb9b17e"}, {"index": 169781097, "value": "0x677407dd"}, {"index": 184093494, "value": "0x6093de87"}, {"index": 153880993, "value": "0x2a754135"}, {"index": 84977930, "value": "0xbc58f70d"}, {"index": 46426879, "value": "0xd805eb4b"}, {"index": 3093825, "value": "0xf453a94d"}, {"index": 225364072, "value": "0x5a28b420"}, {"index": 44593546, "value": "0xe92fb02b"}, {"index": 260713159, "value": "0x8a48d35a"}, {"index": 168250303, "value": "0x2024c448"}, {"index": 52384140, "value": "0x48ac5a95"}, {"index": 223401610, "value": "0x8fa7880c"}, {"index": 45554030, "value": "0xfff38e1b"}, {"index": 95410555, "value": "0x4e98033a"}, {"index": 175039924, "value": "0xb6a33ee4"}, {"index": 79171087, "value": "0xdfb0f94f"}, {"index": 267580473, "value": "0x80d99b65"}, {"index": 24168642, "value": "0x7d1c8bde"}, {"index": 37981670, "value": "0x06f4c2c4"}, {"index": 171551130, "value": "0x05e3527c"}, {"index": 195559979, "value": "0x8690f1be"}, {"index": 204611762, "value": "0xa392261a"}, {"index": 140997658, "value": "0xac2293ff"}, {"index": 138925853, "value": "0x0d067d65"}, {"index": 86637313, "value": "0x7133a61e"}, {"index": 20736778, "value": "0x1b115d00"}, {"index": 219665210, "value": "0x566e466f"}, {"index": 160430336, "value": "0x40e4c461"}, {"index": 264654675, "value": "0x39b8ff78"}, {"index": 8013395, "value": "0x580c8caf"}, {"index": 228945585, "value": "0xbdc4761b"}, {"index": 213884386, "value": "0x18e3d94c"}, {"index": 104419827, "value": "0x7d742821"}, {"index": 44185464, "value": "0xaeb2e213"}, {"index": 142737231, "value": "0xbf49ac05"}, {"index": 99284897, "value": "0xa607dc56"}, {"index": 132475900, "value": "0x225cafb1"}, {"index": 61861762, "value": "0xb4f81cf3"}, {"index": 132056166, "value": "0x68afbfa5"}, {"index": 262388043, "value": "0xe6d35b11"}, {"index": 91878046, "value": "0x86050c01"}, {"index": 117353561, "value": "0x799c3487"}, {"index": 124768597, "value": "0xa90362ea"}, {"index": 71352993, "value": "0x051a2bbe"}, {"index": 190698941, "value": "0xced2c729"}, {"index": 46055428, "value": "0xe9429d0b"}, {"index": 55281366, "value": "0x5bcdc16c"}, {"index": 165145231, "value": "0x0af50eb5"}, {"index": 106810753, "value": "0x1493ced7"}, {"index": 171985651, "value": "0xcd80ab7e"}, {"index": 232085256, "value": "0x4b67919a"}, {"index": 159510492, "value": "0x633f820a"}, {"index": 40072060, "value": "0x5fd0275e"}, {"index": 209107596, "value": "0x6d20c837"}, {"index": 39023794, "value": "0x200a638e"}], + "cache_head": ["0x355a86d2", "0x7957db1c", "0xd21772af", "0x6fc1e09b", "0xd55ce61d", "0x6e6a278b", "0xd3f543ce", "0x223d8e82", "0x143ab337", "0x2e9f05bd", "0x2eb389bf", "0x0c6e449e", "0x5cfa4222", "0xba6560fe", "0x8e3e1aa4", "0xdbcc1d53"], + "cache_last_line": ["0x41190d91", "0xbd277957", "0x22ddbb49", "0x6986f207", "0xdf69a4d6", "0x26401a3a", "0x818230fb", "0xc417122d", "0x3597b211", "0xb553ce55", "0xcf39cc0d", "0x3b7fc43a", "0x3fd43b00", "0x67e1c80e", "0xffa7ea7d", "0xca2960ab"], + "cache_fnv1a64": "0x48c4f5bf24166b2e" +} diff --git a/relay/playbooks/ca3-derive-pc2.ps1 b/relay/playbooks/ca3-derive-pc2.ps1 new file mode 100644 index 00000000..328e98d0 --- /dev/null +++ b/relay/playbooks/ca3-derive-pc2.ps1 @@ -0,0 +1,118 @@ +# Igneum run job: Counter ASIC 3.0 item 2, the per-day item-derivation program (docs/plans/counter-asic-3-derivation.md), +# on PC 2's RTX 5090 (machine 1ccfe586), 6 October 2026. ONE job carries everything (the PC 2 rule of the ca3 brief): +# it downloads the packs zip itself from the downloads host (sha256 checked), finds the installed app's +# igneum-worker-cuda.exe (NVRTC compiles each pack's own kernel text, so no new worker build is needed), switches the +# NVIDIA card off in the app ONLY while the packs run (the card key from the app's settings.json, never /api/state; +# restored after with the settings it had), and never quits, restarts or updates the installed app. The numbers this +# job is for: per pack, the worker's own `nvrtc .. cache .. dataset .. ms` line (the daily 1 GiB build on the 5090), +# the self-test (bit-exactness: cache FNV, dataset head, word [MASK], 64 samples, 96 vector lanes against the Rust CPU +# interpreter), the 2^24 fingerprint at base nonce 0 (against the Mac: dr736-genesis 50e3eaa779da4f1e, +# dr736-devnet-epoch0 9553f6d5c667205a, mx8-genesis 7c28cfb06c5c65a9, v2-genesis-mh 25f96e7dce90bd4e) and the hash rate. +# Packs: dr736-genesis, dr736-devnet-epoch0 (the derivation class), mx8-genesis (the x8 control), v2-genesis-mh (the v2 +# control). Every result line starts with RESULT. The placeholder __DL_BASE__ is substituted at publish time; the +# downloads token never enters the repository. +$ErrorActionPreference = 'Continue' +function Say([string] $m) { Write-Host ("[" + (Get-Date -Format 'HH:mm:ss') + "] " + $m) } +function Stamp { (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') } +# everything lives in this job's own folder (the wiped-jobs-folder rule of tools/ci/kit-path-check.sh: nothing of +# another job's is reached) +$work = Join-Path $env:IGNEUM_JOB_DIR 'ca3-derive' +New-Item -ItemType Directory -Force -Path $work | Out-Null +$zipUrl = '__DL_BASE__/igneum-ca3-derive-packs.zip' +$zipSha = 'aadce58ca54f136d8c41dc15154b3ae107624808e7f061c266df228b200bc676' +$zip = Join-Path $work 'igneum-ca3-derive-packs.zip' +Write-Output "RESULT job ca3-derive-pc2 start $(Stamp) machine $env:COMPUTERNAME" + +# ---- the packs: downloaded by this job, sha256 checked, expanded fresh ---- +try { + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + Invoke-WebRequest -Uri $zipUrl -OutFile $zip -TimeoutSec 120 -Headers @{ 'Cache-Control' = 'no-cache' } +} catch { Write-Output ("RESULT error download: " + $_.Exception.Message); exit 2 } +$got = (Get-FileHash -Algorithm SHA256 $zip).Hash.ToLower() +if ($got -ne $zipSha) { Write-Output "RESULT error zip sha256 $got expected $zipSha"; exit 2 } +Write-Output "RESULT zip sha256 $got size $((Get-Item $zip).Length) OK" +$packs = Join-Path $work 'packs-ca3-derive' +if (Test-Path $packs) { Remove-Item -Recurse -Force $packs } +Expand-Archive -Path $zip -DestinationPath $work -Force +$packList = @('v2-genesis-mh', 'mx8-genesis', 'dr736-genesis', 'dr736-devnet-epoch0') +foreach ($pk in $packList) { + $d = Join-Path $packs $pk + if (-not (Test-Path (Join-Path $d 'memhard.h'))) { Write-Output "RESULT error pack $pk missing after extract"; exit 2 } + Write-Output ("RESULT pack $pk memhard.h sha256 " + (Get-FileHash -Algorithm SHA256 (Join-Path $d 'memhard.h')).Hash.ToLower() + " program.h sha256 " + (Get-FileHash -Algorithm SHA256 (Join-Path $d 'program.h')).Hash.ToLower()) +} + +# ---- the worker: the installed app's igneum-worker-cuda.exe, run in place (its NVRTC DLLs sit beside it) ---- +$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-worker-cuda.exe') } | Select-Object -First 1 +if (-not $inst) { Write-Output 'RESULT error no installed igneum-worker-cuda.exe'; exit 2 } +$cuda = Join-Path $inst 'igneum-worker-cuda.exe' +Write-Output "RESULT worker-cuda $cuda sha256 $((Get-FileHash -Algorithm SHA256 $cuda).Hash.ToLower()) nvrtc_dlls $((Get-ChildItem $inst -Filter 'nvrtc*.dll').Count)" +$help = (& $cuda --help 2>&1 | Out-String) +$hasBench = $help -match '--bench' +Write-Output "RESULT worker-cuda has --bench: $hasBench" +if (-not $hasBench) { Write-Output 'RESULT note the installed worker has no --bench; --check gives the build time and the self-test, no fingerprint and no hash rate' } + +# ---- the app: the NVIDIA card's key and settings from settings.json; switched off through POST api/cards only ---- +$appDir = $env:IGNEUM_APP_DIR +if (-not $appDir) { $appDir = Join-Path $env:LOCALAPPDATA 'igneum\app' } +$urlFile = Join-Path $appDir 'app.url' +$url = $null +if (Test-Path $urlFile) { $url = (Get-Content -LiteralPath $urlFile -Raw).Trim() } +$sj = Join-Path $appDir 'settings.json' +$cardKey = $null; $cardPref = $null +if (Test-Path $sj) { + try { + $settings = Get-Content -LiteralPath $sj -Raw | ConvertFrom-Json + if ($settings.cards) { + foreach ($p in $settings.cards.PSObject.Properties) { if ($p.Name -like 'nvidia:*') { $cardKey = $p.Name; $cardPref = $p.Value; break } } + } + } catch { Say ("settings.json: " + $_.Exception.Message) } +} +if ($cardKey) { + Write-Output ("RESULT card " + $cardKey + " enabled=" + $cardPref.enabled + " identities=" + $cardPref.identities + " power_pct=" + $cardPref.power_pct + " (settings.json)") +} else { + Write-Output 'RESULT card none in settings.json (no nvidia:* entry); the app keeps mining on the card and the numbers carry that load' +} +$cardOff = $false +if ($cardKey -and $url) { + $ident = 1; if ($cardPref.identities) { $ident = [int]$cardPref.identities } + $pp = 0; if ($cardPref.power_pct) { $pp = [int]$cardPref.power_pct } + $body = @{ cards = @(@{ key = $cardKey; enabled = $false; identities = $ident; power_pct = $pp }) } | ConvertTo-Json -Depth 5 + try { Invoke-RestMethod -Uri ($url + 'api/cards') -Method POST -Body $body -ContentType 'application/json' -TimeoutSec 10 | Out-Null; $cardOff = $true; Say 'card off requested' } catch { Write-Output ("RESULT error api/cards off: " + $_.Exception.Message) } + # wait for the worker process to go, up to 90 s (the process list, not /api/state) + $t = 0 + while ($t -lt 90) { + Start-Sleep -Seconds 5; $t += 5 + $w = Get-Process -Name 'igneum-worker-cuda' -ErrorAction SilentlyContinue + if (-not $w) { break } + } + $w = Get-Process -Name 'igneum-worker-cuda' -ErrorAction SilentlyContinue + Write-Output ("RESULT card-off " + $cardKey + " after " + $t + " s, worker processes left " + (($w | Measure-Object).Count)) + Start-Sleep -Seconds 5 +} +& nvidia-smi --query-gpu=name,driver_version,power.limit,clocks.sm,clocks.mem,memory.used,temperature.gpu --format=csv,noheader 2>&1 | ForEach-Object { "RESULT gpu-before $_" } + +# ---- the runs: --check for the build line and the self-test, --bench for the fingerprint and the rate ---- +foreach ($pk in $packList) { + $d = Join-Path $packs $pk + Write-Output "RESULT run $pk check start $(Stamp)" + & $cuda --check --pack $d 2>&1 | ForEach-Object { "RESULT check $pk $_" } + Write-Output "RESULT run $pk check exit $LASTEXITCODE" + if ($hasBench) { + Write-Output "RESULT run $pk bench start $(Stamp)" + & $cuda --bench --pack $d --batches 5 --batch-log2 24 --block-warps 1 2>&1 | ForEach-Object { "RESULT bench $pk $_" } + Write-Output "RESULT run $pk bench exit $LASTEXITCODE" + & $cuda --bench --pack $d --batches 5 --batch-log2 24 --block-warps 8 2>&1 | Where-Object { $_ -match '^RESULT|error|FAIL|dataset' } | ForEach-Object { "RESULT bench8 $pk $_" } + } +} +& nvidia-smi --query-gpu=power.draw,clocks.sm,clocks.mem,memory.used,temperature.gpu --format=csv,noheader 2>&1 | ForEach-Object { "RESULT gpu-after $_" } + +# ---- restore the card with the settings it had ---- +if ($cardOff) { + $ident = 1; if ($cardPref.identities) { $ident = [int]$cardPref.identities } + $pp = 0; if ($cardPref.power_pct) { $pp = [int]$cardPref.power_pct } + $en = $true; if ($null -ne $cardPref.enabled) { $en = [bool]$cardPref.enabled } + $body = @{ cards = @(@{ key = $cardKey; enabled = $en; identities = $ident; power_pct = $pp }) } | ConvertTo-Json -Depth 5 + try { Invoke-RestMethod -Uri ($url + 'api/cards') -Method POST -Body $body -ContentType 'application/json' -TimeoutSec 10 | Out-Null; Write-Output ("RESULT card restored " + $cardKey + " enabled=" + $en) } catch { Write-Output ("RESULT error card restore " + $cardKey + ": " + $_.Exception.Message) } +} +Write-Output "RESULT job ca3-derive-pc2 end $(Stamp)" +exit 0