diff --git a/HANDOFF.md b/HANDOFF.md index 2301861..554e118 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,8 +1,123 @@ # MuTap — Project Handoff -> Context brief for a Claude Code session. Captures decisions and technical direction from prior planning so the next session can start building without re-deriving anything. Can be adapted into a `CLAUDE.md` for persistent project context. +> Context brief for a Claude Code session. Captures decisions and technical direction so the next session can start working without re-deriving anything. Can be adapted into a `CLAUDE.md` for persistent project context. > -> **Rev 2** — refined against the actual `tap` ecosystem on disk (AmbiTap, AmbiTap-Max, SampleRateTap). Two former open decisions are now settled by sibling-repo convention, the single-repo assumption is corrected to the ecosystem's core/-Max split, and the build milestones are restructured into individually testable stages. +> **Rev 3** — the plan below has been EXECUTED: M0 through M6 and the v2 +> Kalman upgrade are built, measured, tested and merged. This revision adds +> the "State of the repo" and "Working notes" sections (start there), marks +> the milestone list as history, and re-ranks what's next. The algorithm +> description, portability architecture, Hexagon specifics and paper list +> remain the reference they always were. +> +> **Rev 2** — refined against the actual `tap` ecosystem on disk (AmbiTap, AmbiTap-Max, SampleRateTap). Two former open decisions settled by sibling-repo convention, the single-repo assumption corrected to the ecosystem's core/-Max split, milestones restructured into individually testable stages. + +--- + +## State of the repo (Rev 3) + +Everything below exists, is regression-tested, and is green in CI +(Linux GCC/Clang, macOS, Windows, ASan+UBSan, clang-format/tidy, +Cortex-M55 under QEMU, Hexagon under QEMU). The README's Status section +carries the measured numbers; this is the map: + +- `include/mutap/` — `fft.h` (Ooura wrapper), `fdaf.h` (partitioned-block + NLMS core + the M4 control stack: IPC, IPC-scaled stepping, transient + gate, variable regularization), `fd_kalman.h` (**the v2 Kalman core** — + no step size, no IPC; per-bin state uncertainty + near-end PSD replace + the control stack; opt-in `transient_floor_ratio` trades tonal ASG for + burst hardening), `lpc.h` (ridge-guarded Levinson + the two pluggable + near-end models: `speech_predictor`, `warped_lpc_predictor`), + `pem_afc.h` (the FDAF-PEM-AFROW wrapper, templated over BOTH the + predictor and the adaptive core). +- `tests/` — 88 tests; `tests/support/closed_loop.h` is the closed-loop + simulator + MSG/ASG bisection metrics (a deliverable in its own right). +- `tools/capi/` + `notebooks/afc_demo.ipynb` — the C ABI and the executed + demo notebook (7 sections, every figure measured). The notebook is a + build product of `tools/notebook/build_afc_demo.py` — edit the script, + never the .ipynb. +- `platform/` + `cmake/arm-cortex-m55-mps3.cmake` — the bare-metal M55 + rig; `cmake/hexagon-linux-musl.cmake` — the Hexagon cross build. +- `book/` — "Quieting the Loop" (mdBook, AmbiTap-book conventions): one + chapter so far, the user-facing guide to the canceller and every knob. +- Sibling repo `tap/MuTap-Max` — `mutap.defeed~` with attributes `block`, + `mu`, `adapt`, `gate`, `warp`, `kalman`; engine is a + `std::variant` over {speech, warped} × {NLMS, Kalman}, xtc~-pattern + lock-free rebuild handoff. + +## Working notes for the next session (hard-won; read before touching) + +1. **Every test threshold is a measured number.** The workflow that built + this repo: run the experiment in a scratch harness first, write the + measured value into a comment next to the assertion, set the threshold + with margin. Keep doing this — reviewers (and CI archaeology) depend + on those comments. +2. **Closed-loop trajectories are chaotic; assert directions, not + magnitudes.** Platform libm/FMA differences (AppleClang arm64 + especially) get amplified arbitrarily by the loop. Three incidents to + learn from: the λ=0 warped/plain identity is algebraic but not bitwise + (FMA contraction → assert 1e-9, not 4 ulp); a naive-loop blowup peak + measured 18k on Linux and 34k on macOS (assert survival/recovery and + floored containment, never the chaotic peak); single-seed ASG numbers + move by dB between platforms (assert medians across seeds, bisected + stability directions, floors with several dB of margin). +3. **One room is not an evaluation.** The warped predictor's first cut + was validated on one simulated room and shipped claims that a + five-room sweep demolished (one room in five DESTABILIZED at the old + defaults). The fix was structural (IPC pairing / the Kalman core), not + tuning. Any new closed-loop claim: sweep rooms from BOTH generator + families (the C++ `std::mt19937` rooms in the tests and the notebook's + numpy rooms) before writing the number down. +4. **The emulated-target test selection lives in TWO places that must be + kept in sync by hand**: the baked gtest filter in + `tests/bare_metal_main.cpp` (Cortex-M55, no argv on target) and the + `TEST_FILTER` in `tests/CMakeLists.txt` (Hexagon and any future hosted + cross target). Both mirror the same policy: float typed suites, + LP/conditioning, validation/contract tests, float closed-loop + scenarios; the double-typed adaptive suites stay host-only (the full + suite ran once on the Hexagon ISA — 44 min of TCG — and passed; the + per-push selection takes ~8). +5. **Hexagon CI quirks**: the toolchain downloads from Codelinaro's + artifactory (the quic/toolchain_for_hexagon GitHub releases carry NO + assets — the release notes just link out); the archive's inner + directory name varies, so the workflow locates `clang++` and derives + the root; `-static` does NOT imply `--eh-frame-hdr` and without it the + first `throw` aborts (that cost one CI round to find). +6. **The submodule dance**: MuTap merges are rebase-merges, so every + merge orphans the branch SHAs. After any MuTap PR merges, re-pin + `MuTap-Max/submodules/MuTap` to the new main tip before (or as part + of) the next MuTap-Max merge — a dangling gitlink breaks recursive + clones once branches are cleaned up. +7. **min-api pin gotcha** (MuTap-Max): the pinned min-api has no scalar + `send()` path on queue-backed outlets — send a pre-allocated `atoms` + lvalue (see `m_ipc_atoms` in the external). +8. **The book's honesty rule** (inherited from the AmbiTap book): no + number in `book/` that the test suite or notebook doesn't measure, no + patch or attribute described that doesn't exist. If a chapter needs a + feature, build the feature in the same change. + +## What's next (ranked) + +1. **In-Max listening.** Everything is code-complete and + simulation-verified; nothing has been heard in a real room through a + real mic→speaker loop. The help patcher is the checklist (added + stable gain by ear, IPC metering, engine/gate/warp A/B). Findings + feed 2. +2. **Decide the default engine.** The Kalman core beats the tuned NLMS + stack in every simulated scenario; after real-room listening, decide + whether `@kalman` becomes the external's default (and whether the M4 + knobs get de-emphasized in docs). +3. **M55 performance work** — CMSIS-DSP/Helium mapping of the FDAF hot + path and SampleRateTap-style instruction-count ratchets in CI. +4. **Hexagon performance work** — needs the proprietary SDK + hardware: + VTCM residency, L2 streaming layout, HVX mapping (the specifics + section below still holds). +5. **AEC objects** — the open-loop cousin is nearly free now (the cores + already run open-loop; it's an external + docs problem). +6. **Book chapters** — echo cancellation, and the embedded-targets story. +7. **RIR fixtures** — infrastructure DONE (`tools/fixtures/ + make_rir_fixtures.py`, `tests/fixtures/rir_*.h`, `test_rir_fixtures.cpp`): + three physically-modeled image-source rooms are committed baselines. + Still open (below): adding measured rooms — one command per WAV. --- @@ -144,9 +259,14 @@ Concrete numbers that pin down the layout decisions (the vector-width question i --- -## Milestones (restructured: each stage independently testable) +## Milestones (Rev 3: ALL DONE — kept as the record of how it was staged) -The original "milestone 2 = the whole algorithm" was too big a bite. FDAF-PEM-AFROW decomposes into layers where each layer has a crisp pass/fail experiment; build them in this order and land regression fixtures with each. +Every stage below landed with its pass criterion met and regression +fixtures committed; the README's Status section carries the measured +results. The staging itself proved out — each layer's crisp pass/fail +experiment caught real issues (M2's naive-bias baseline, the M4 burst +fixtures, the room sweeps) that a build-it-all-at-once plan would have +merged blind. **M0 — Scaffold `tap/MuTap`.** Sibling-repo layout: `include/mutap/`, `tests/`, `bench/`, `examples/`, `notebooks/`, `tools/capi/`, `cmake/`, `docs/`; MIT LICENSE; `STYLE.md` + `.clang-format`/`.clang-tidy` copied from a sibling; CI (`ci.yml`: build matrix, tests, format/tidy gates); README using the framing above. Vendor Ooura, port the real-FFT wrapper. @@ -192,10 +312,10 @@ The original "milestone 2 = the whole algorithm" was too big a bite. FDAF-PEM-AF ## Open decisions (for Tim) -Resolved since rev 1: ~~license~~ (MIT, by convention), ~~core language~~ (header-only C++20, by convention), ~~milestone ordering~~ (core + closed-loop harness first, Max wrapper at M5 — and the wrapper lives in `tap/MuTap-Max`). +Resolved since rev 1: ~~license~~ (MIT), ~~core language~~ (header-only C++20), ~~milestone ordering~~ (executed as staged). Resolved since rev 2: ~~first program-material target~~ (moot — both predictors and both engines exist; what remains is the real-room tuning pass, item 1 of "What's next"). Still open: -- **First program-material target for tuning/demos** — speech vs music. The *implementation* order is fixed (speech predictor first, to validate against the literature; music predictor second), but which material the first real-room demo and default tuning target depends on the actual use case (live PA/instruments would pull the M6 music predictor forward, right after M4). -- **Max external naming** — `mutap.defeed~` is a placeholder; alternatives: `mutap.afc~`, `mutap.howl~`, `mutap.clean~`. Sibling convention is `.~`. -- **RIR fixtures** — which measured room impulse responses to standardize on for regression tests (e.g. a MYRiAD/openAIR room vs. self-measured), since the fixtures become permanent pass/fail baselines. +- **Max external naming** — `mutap.defeed~` is a placeholder; alternatives: `mutap.afc~`, `mutap.howl~`, `mutap.clean~`. Sibling convention is `.~`. Worth settling before anything links to the object name publicly (the book chapter and maxref would need a coordinated rename). +- **Default engine in the external** — `@kalman` off (classic NLMS) is the shipping default purely on seniority; the measured case for flipping it is in `tests/test_fd_kalman.cpp` and book chapter 1. Decide after real-room listening. +- **RIR fixtures, the measured half** — the fixture pipeline is built and three physically-modeled rooms (image-source, documented geometry) are committed baselines with regression tests. What remains yours: which MEASURED rooms join them — an academic dataset room (MYRiAD is the PEM-AFROW group's own database; openAIR is the other usual source; check each room's license allows redistribution in an MIT repo) and/or your own swept-sine measurements. Either way it is one command per room: `python3 tools/fixtures/make_rir_fixtures.py --from-wav room.wav myroom --source ""`, then a test with a freshly measured threshold. (The dataset hosts are unreachable from the remote dev container's network policy, so the WAVs have to enter via a commit.) diff --git a/README.md b/README.md index b3e7cdf..712ee61 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,14 @@ algorithmically complete. What exists today: wrecked); the opt-in transient floor contains it to gated-NLMS quality at a measured ~2–6 dB tonal-ASG cost, which is why it defaults off ([`tests/test_fd_kalman.cpp`](tests/test_fd_kalman.cpp)). +- **RIR fixtures** — three physically-modeled rooms (image-source method, + documented geometry, deterministic; [`tools/fixtures/`](tools/fixtures/)) + committed as permanent closed-loop baselines with real early-reflection + structure. Measured on them (block 64, 16 partitions, speech-envelope + material): **Kalman +17.8…+19.1 dB ASG vs the classic stack's + +9.4…+9.7** ([`tests/test_rir_fixtures.cpp`](tests/test_rir_fixtures.cpp)). + Measured rooms (academic datasets or your own sweeps) join with one + command: `make_rir_fixtures.py --from-wav`. Next up: the `mutap.defeed~` Max attribute for the Kalman core, and the Hexagon data-layout work on real hardware (VTCM residency, FastRPC @@ -211,6 +219,7 @@ notebooks/ demo notebook (ctypes over the C ABI) book/ "Quieting the Loop" (mdBook) — the user-facing field guide platform/ Cortex-M55 bare-metal board support (startup, linker) cmake/ cross toolchain files (Cortex-M55 MPS3, Hexagon musl) +tests/fixtures/ RIR fixtures (committed rooms; tools/fixtures regenerates) ``` Planned as the milestones land: `examples/`, `bench/`, `docs/`. diff --git a/notebooks/afc_demo.ipynb b/notebooks/afc_demo.ipynb index 1393850..e014a75 100644 --- a/notebooks/afc_demo.ipynb +++ b/notebooks/afc_demo.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "b36dc7b3", + "id": "bda5df7e", "metadata": {}, "source": [ "# MuTap — adaptive feedback cancellation, demonstrated\n", @@ -34,13 +34,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "2dc54035", + "id": "49b7bb2a", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:01.954031Z", - "iopub.status.busy": "2026-07-15T14:58:01.953777Z", - "iopub.status.idle": "2026-07-15T14:58:02.356333Z", - "shell.execute_reply": "2026-07-15T14:58:02.354791Z" + "iopub.execute_input": "2026-07-15T17:52:03.970680Z", + "iopub.status.busy": "2026-07-15T17:52:03.970420Z", + "iopub.status.idle": "2026-07-15T17:52:08.853801Z", + "shell.execute_reply": "2026-07-15T17:52:08.851888Z" } }, "outputs": [ @@ -165,7 +165,7 @@ }, { "cell_type": "markdown", - "id": "366caa7b", + "id": "146d8f70", "metadata": {}, "source": [ "## The closed loop\n", @@ -189,13 +189,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "c33aaaf3", + "id": "29168f76", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:02.359135Z", - "iopub.status.busy": "2026-07-15T14:58:02.358787Z", - "iopub.status.idle": "2026-07-15T14:58:02.504181Z", - "shell.execute_reply": "2026-07-15T14:58:02.502735Z" + "iopub.execute_input": "2026-07-15T17:52:08.856668Z", + "iopub.status.busy": "2026-07-15T17:52:08.856282Z", + "iopub.status.idle": "2026-07-15T17:52:09.478412Z", + "shell.execute_reply": "2026-07-15T17:52:09.476958Z" } }, "outputs": [ @@ -310,7 +310,7 @@ }, { "cell_type": "markdown", - "id": "3ab0b2a3", + "id": "26a2565d", "metadata": {}, "source": [ "## 1. Howling\n", @@ -326,13 +326,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "974b91cc", + "id": "21c71481", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:02.506624Z", - "iopub.status.busy": "2026-07-15T14:58:02.506315Z", - "iopub.status.idle": "2026-07-15T14:58:03.159382Z", - "shell.execute_reply": "2026-07-15T14:58:03.158151Z" + "iopub.execute_input": "2026-07-15T17:52:09.482709Z", + "iopub.status.busy": "2026-07-15T17:52:09.482153Z", + "iopub.status.idle": "2026-07-15T17:52:10.685992Z", + "shell.execute_reply": "2026-07-15T17:52:10.684735Z" } }, "outputs": [ @@ -387,7 +387,7 @@ }, { "cell_type": "markdown", - "id": "5fd525bd", + "id": "7200ea80", "metadata": {}, "source": [ "## 2. The bias problem — a gain staircase\n", @@ -414,13 +414,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "cd96471a", + "id": "8695b31d", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:03.161857Z", - "iopub.status.busy": "2026-07-15T14:58:03.161614Z", - "iopub.status.idle": "2026-07-15T14:58:05.251819Z", - "shell.execute_reply": "2026-07-15T14:58:05.250601Z" + "iopub.execute_input": "2026-07-15T17:52:10.689505Z", + "iopub.status.busy": "2026-07-15T17:52:10.689189Z", + "iopub.status.idle": "2026-07-15T17:52:13.518474Z", + "shell.execute_reply": "2026-07-15T17:52:13.516919Z" } }, "outputs": [ @@ -482,7 +482,7 @@ }, { "cell_type": "markdown", - "id": "4166d309", + "id": "2852aab2", "metadata": {}, "source": [ "## 3. Added stable gain — the scoreboard\n", @@ -500,13 +500,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "01283800", + "id": "05a269a0", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:05.253893Z", - "iopub.status.busy": "2026-07-15T14:58:05.253697Z", - "iopub.status.idle": "2026-07-15T14:58:16.100504Z", - "shell.execute_reply": "2026-07-15T14:58:16.099406Z" + "iopub.execute_input": "2026-07-15T17:52:13.522737Z", + "iopub.status.busy": "2026-07-15T17:52:13.522356Z", + "iopub.status.idle": "2026-07-15T17:52:28.159809Z", + "shell.execute_reply": "2026-07-15T17:52:28.158574Z" } }, "outputs": [ @@ -555,7 +555,7 @@ }, { "cell_type": "markdown", - "id": "a1e61324", + "id": "f0038aca", "metadata": {}, "source": [ "## 4. Music — the frequency-warped predictor, across rooms\n", @@ -594,13 +594,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "1eafa631", + "id": "c570be41", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:16.103113Z", - "iopub.status.busy": "2026-07-15T14:58:16.102837Z", - "iopub.status.idle": "2026-07-15T14:58:30.322133Z", - "shell.execute_reply": "2026-07-15T14:58:30.320852Z" + "iopub.execute_input": "2026-07-15T17:52:28.163145Z", + "iopub.status.busy": "2026-07-15T17:52:28.162606Z", + "iopub.status.idle": "2026-07-15T17:52:47.427909Z", + "shell.execute_reply": "2026-07-15T17:52:47.426543Z" } }, "outputs": [ @@ -667,7 +667,7 @@ }, { "cell_type": "markdown", - "id": "6f0edb93", + "id": "34897996", "metadata": {}, "source": [ "And the control in the other direction: the same warped + IPC\n", @@ -679,13 +679,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "c9eb4273", + "id": "da75e84b", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:30.324366Z", - "iopub.status.busy": "2026-07-15T14:58:30.324175Z", - "iopub.status.idle": "2026-07-15T14:58:31.247296Z", - "shell.execute_reply": "2026-07-15T14:58:31.246057Z" + "iopub.execute_input": "2026-07-15T17:52:47.430621Z", + "iopub.status.busy": "2026-07-15T17:52:47.430328Z", + "iopub.status.idle": "2026-07-15T17:52:48.778674Z", + "shell.execute_reply": "2026-07-15T17:52:48.777327Z" } }, "outputs": [ @@ -709,7 +709,7 @@ }, { "cell_type": "markdown", - "id": "90e20d75", + "id": "10c10e30", "metadata": {}, "source": [ "## 5. IPC — knowing when to adapt\n", @@ -729,13 +729,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "554da3ee", + "id": "926d4a6b", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:31.249366Z", - "iopub.status.busy": "2026-07-15T14:58:31.249164Z", - "iopub.status.idle": "2026-07-15T14:58:31.802617Z", - "shell.execute_reply": "2026-07-15T14:58:31.801498Z" + "iopub.execute_input": "2026-07-15T17:52:48.781404Z", + "iopub.status.busy": "2026-07-15T17:52:48.781115Z", + "iopub.status.idle": "2026-07-15T17:52:49.521928Z", + "shell.execute_reply": "2026-07-15T17:52:49.520659Z" } }, "outputs": [ @@ -793,7 +793,7 @@ }, { "cell_type": "markdown", - "id": "3d27ccfe", + "id": "f5f4f174", "metadata": {}, "source": [ "## 6. Surviving bursts\n", @@ -809,13 +809,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "94c2d6bc", + "id": "0cb4a898", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:31.804654Z", - "iopub.status.busy": "2026-07-15T14:58:31.804439Z", - "iopub.status.idle": "2026-07-15T14:58:33.933821Z", - "shell.execute_reply": "2026-07-15T14:58:33.932612Z" + "iopub.execute_input": "2026-07-15T17:52:49.524156Z", + "iopub.status.busy": "2026-07-15T17:52:49.523911Z", + "iopub.status.idle": "2026-07-15T17:52:52.246953Z", + "shell.execute_reply": "2026-07-15T17:52:52.245201Z" } }, "outputs": [ @@ -869,7 +869,7 @@ }, { "cell_type": "markdown", - "id": "3b41cb00", + "id": "7505e6ed", "metadata": {}, "source": [ "## 7. The v2 core — a frequency-domain Kalman filter\n", @@ -900,13 +900,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "a32ba938", + "id": "d8537c6a", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:33.936922Z", - "iopub.status.busy": "2026-07-15T14:58:33.936680Z", - "iopub.status.idle": "2026-07-15T14:58:46.834385Z", - "shell.execute_reply": "2026-07-15T14:58:46.833176Z" + "iopub.execute_input": "2026-07-15T17:52:52.249591Z", + "iopub.status.busy": "2026-07-15T17:52:52.249329Z", + "iopub.status.idle": "2026-07-15T17:53:09.107495Z", + "shell.execute_reply": "2026-07-15T17:53:09.106370Z" } }, "outputs": [ @@ -951,7 +951,7 @@ }, { "cell_type": "markdown", - "id": "8903e3b9", + "id": "c49c88f6", "metadata": {}, "source": [ "And the section-6 burst, revisited. Ungated, the Kalman bounds the\n", @@ -967,13 +967,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "dc234d36", + "id": "d0407487", "metadata": { "execution": { - "iopub.execute_input": "2026-07-15T14:58:46.836376Z", - "iopub.status.busy": "2026-07-15T14:58:46.836180Z", - "iopub.status.idle": "2026-07-15T14:58:48.933259Z", - "shell.execute_reply": "2026-07-15T14:58:48.931942Z" + "iopub.execute_input": "2026-07-15T17:53:09.110166Z", + "iopub.status.busy": "2026-07-15T17:53:09.109947Z", + "iopub.status.idle": "2026-07-15T17:53:11.743395Z", + "shell.execute_reply": "2026-07-15T17:53:11.741916Z" } }, "outputs": [ @@ -1026,7 +1026,7 @@ }, { "cell_type": "markdown", - "id": "6b5bc8a5", + "id": "59ee0134", "metadata": {}, "source": [ "## Where this goes next\n", diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e5df8e0..92a9164 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -35,7 +35,8 @@ add_executable(mutap_tests test_lpc.cpp test_pem_afc.cpp test_adaptation_control.cpp - test_closed_loop.cpp) + test_closed_loop.cpp + test_rir_fixtures.cpp) target_link_libraries(mutap_tests PRIVATE MuTap::MuTap mutap_warnings) diff --git a/tests/fixtures/rir_hall.h b/tests/fixtures/rir_hall.h new file mode 100644 index 0000000..028fb07 --- /dev/null +++ b/tests/fixtures/rir_hall.h @@ -0,0 +1,1047 @@ +// GENERATED by tools/fixtures/make_rir_fixtures.py — do not edit by hand. +// SPDX-License-Identifier: MIT +// Copyright 2026 MuTap contributors +// +// Physically-modeled room: reverberant hall, mic 5.6 m out — the PA scenario. +// pyroomacoustics image-source method, shoebox [15.0, 10.0, 6.0] m, +// uniform absorption 0.12, max_order 17, +// speaker at [4.0, 5.0, 2.0], mic at [9.5, 4.2, 1.6], fs 48000 Hz. +// Deterministic: rebuilding with the same parameters reproduces +// this data exactly. Conditioning (delay trim to a 32-sample +// guard, truncation to 4096 taps, unit-energy normalization) +// is documented in the generator script. +#pragma once + +namespace mutap_test::fixtures { + + inline constexpr unsigned k_rir_hall_fs = 48000; + inline constexpr unsigned k_rir_hall_taps = 4096; + + inline constexpr float k_rir_hall[4096] = { + -7.52013287e-04f, -7.52964295e-04f, -7.53915775e-04f, -7.54867725e-04f, + -7.55820144e-04f, -7.56773031e-04f, -7.57726386e-04f, -7.58680208e-04f, + -7.62217345e-04f, -7.50008651e-04f, -7.85916629e-04f, -7.18157153e-04f, + -8.34344583e-04f, -6.60000472e-04f, -9.10705416e-04f, -5.72234861e-04f, + -1.01842376e-03f, -4.51286127e-04f, -1.16126542e-03f, -2.93149615e-04f, + -1.34353020e-03f, -9.31576143e-05f, -1.57035078e-03f, 1.54388991e-04f, + -1.84812562e-03f, 4.56784837e-04f, -2.18526924e-03f, 8.23840031e-04f, + -2.59335835e-03f, 1.26938280e-03f, -3.08908497e-03f, 1.81380681e-03f, + -3.69775483e-03f, 2.48910079e-03f, -4.46013585e-03f, 3.34735187e-03f, + -5.44422628e-03f, 4.47987048e-03f, -6.77528033e-03f, 6.06274066e-03f, + -8.70888002e-03f, 8.48171596e-03f, -1.18564677e-02f, 1.27702086e-02f, + -1.81249361e-02f, 2.29320367e-02f, -3.79588263e-02f, 8.36274712e-02f, + 3.17461227e-01f, -5.54756876e-02f, 2.89070193e-02f, -2.10336771e-02f, + 1.44103230e-02f, -1.28860320e-02f, 9.12786775e-03f, -9.15818433e-03f, + 6.33282059e-03f, -6.97810814e-03f, 4.57090213e-03f, -5.52486492e-03f, + 3.34189941e-03f, -4.47574421e-03f, 2.42810646e-03f, -3.67853077e-03f, + 1.71990774e-03f, -3.05212011e-03f, 1.15603651e-03f, -2.54979501e-03f, + 7.00254112e-04f, -2.14263368e-03f, 3.29158471e-04f, -1.81155801e-03f, + 2.69974950e-05f, -1.54342586e-03f, -2.17340361e-04f, -1.32870823e-03f, + -4.12099033e-04f, -1.16018829e-03f, -5.63687251e-04f, -1.03211163e-03f, + -6.77329709e-04f, -9.39679276e-04f, -7.57483928e-04f, -8.78715438e-04f, + -8.08092836e-04f, -8.45462091e-04f, -8.32764710e-04f, -8.36436759e-04f, + -8.37426436e-04f, -8.38416549e-04f, -8.39407098e-04f, -8.40398085e-04f, + -8.41389508e-04f, -8.42381367e-04f, -8.43373664e-04f, -8.44366397e-04f, + -8.45359567e-04f, -8.46353174e-04f, -8.47347218e-04f, -8.48341699e-04f, + -8.49336616e-04f, -8.50331971e-04f, -8.51327762e-04f, -8.52323990e-04f, + -8.53320656e-04f, -8.54317758e-04f, -8.55315297e-04f, -8.56313274e-04f, + -8.57311687e-04f, -8.58310537e-04f, -8.59309824e-04f, -8.60309548e-04f, + -8.61309709e-04f, -8.62310307e-04f, -8.63311342e-04f, -8.64312814e-04f, + -8.65314723e-04f, -8.66317068e-04f, -8.67319851e-04f, -8.68323070e-04f, + -8.69326726e-04f, -8.70330818e-04f, -8.71335347e-04f, -8.72340313e-04f, + -8.73345716e-04f, -8.74351555e-04f, -8.75357831e-04f, -8.76364543e-04f, + -8.77371691e-04f, -8.78379276e-04f, -8.79387297e-04f, -8.80395755e-04f, + -8.81404648e-04f, -8.82413978e-04f, -8.83423744e-04f, -8.84433946e-04f, + -8.85444583e-04f, -8.86455657e-04f, -8.87467166e-04f, -8.88479111e-04f, + -8.89491492e-04f, -8.90504308e-04f, -8.91517559e-04f, -8.92531246e-04f, + -8.93545368e-04f, -8.94559925e-04f, -8.95574917e-04f, -8.96590344e-04f, + -8.97606206e-04f, -8.98622503e-04f, -8.99639234e-04f, -9.00656400e-04f, + -9.01674000e-04f, -9.02692035e-04f, -9.03710503e-04f, -9.07523069e-04f, + -8.94303386e-04f, -9.33135285e-04f, -8.59811474e-04f, -9.85515850e-04f, + -7.96834949e-04f, -1.06815311e-03f, -7.01776023e-04f, -1.18478099e-03f, + -5.70729946e-04f, -1.33951474e-03f, -3.99320822e-04f, -1.53705914e-03f, + -1.82434143e-04f, -1.78303574e-03f, 8.61832713e-05f, -2.08448956e-03f, + 4.14554480e-04f, -2.45066758e-03f, 8.13485270e-04f, -2.89432923e-03f, + 1.29822227e-03f, -3.43392374e-03f, 1.89132455e-03f, -4.09743074e-03f, + 2.62807304e-03f, -4.92977605e-03f, 3.56625077e-03f, -6.00682703e-03f, + 4.80778889e-03f, -7.46858051e-03f, 6.55012630e-03f, -9.60267778e-03f, + 9.22934667e-03f, -1.31045071e-02f, 1.40301847e-02f, -2.01847992e-02f, + 2.56763428e-02f, -4.35732456e-02f, 1.04290099e-01f, 2.27262026e-01f, + -5.52408416e-02f, 2.96601862e-02f, -2.20948629e-02f, 1.50700397e-02f, + -1.37353093e-02f, 9.58985856e-03f, -9.83985776e-03f, 6.65393752e-03f, + -7.54102772e-03f, 4.79037335e-03f, -6.00023101e-03f, 3.48471283e-03f, + -4.88383059e-03f, 2.51096602e-03f, -4.03329505e-03f, 1.75462942e-03f, + -3.36379221e-03f, 1.15158870e-03f, -2.82616635e-03f, 6.63481939e-04f, + -2.38985331e-03f, 2.65633282e-04f, -2.03471799e-03f, -5.85948235e-05f, + -1.74685353e-03f, -3.20969462e-04f, -1.51617807e-03f, -5.30231438e-04f, + -1.33502359e-03f, -6.93190844e-04f, -1.19726740e-03f, -8.15411008e-04f, + -1.09779777e-03f, -9.01642944e-04f, -1.03215898e-03f, -9.56100329e-04f, + -9.96331872e-04f, -9.82644304e-04f, -9.86587144e-04f, -9.87640763e-04f, + -9.88694828e-04f, -9.89749341e-04f, -9.90804302e-04f, -9.91859711e-04f, + -9.92915569e-04f, -9.93971877e-04f, -9.95028634e-04f, -9.96085841e-04f, + -9.97143499e-04f, -9.98201607e-04f, -9.99260167e-04f, -1.00031918e-03f, + -1.00137864e-03f, -1.00243856e-03f, -1.00349893e-03f, -1.00455975e-03f, + -1.00562103e-03f, -1.00668276e-03f, -1.00774495e-03f, -1.00880759e-03f, + -1.00987068e-03f, -1.01093424e-03f, -1.01199824e-03f, -1.01306271e-03f, + -1.01412763e-03f, -1.01519301e-03f, -1.01625885e-03f, -1.01732514e-03f, + -1.01839190e-03f, -1.01945911e-03f, -1.02052678e-03f, -1.02159491e-03f, + -1.02266350e-03f, -1.02373255e-03f, -1.02480206e-03f, -1.02587203e-03f, + -1.02694247e-03f, -1.02801336e-03f, -1.02908472e-03f, -1.03015654e-03f, + -1.03122882e-03f, -1.03230156e-03f, -1.03337477e-03f, -1.03444844e-03f, + -1.03552258e-03f, -1.03659718e-03f, -1.03767224e-03f, -1.03874777e-03f, + -1.03982376e-03f, -1.04090022e-03f, -1.04197714e-03f, -1.04305453e-03f, + -1.04413239e-03f, -1.04521071e-03f, -1.04628950e-03f, -1.04736876e-03f, + -1.04844849e-03f, -1.04952868e-03f, -1.05060934e-03f, -1.05169047e-03f, + -1.05277207e-03f, -1.05385413e-03f, -1.05493667e-03f, -1.05601967e-03f, + -1.05710314e-03f, -1.05818709e-03f, -1.05927150e-03f, -1.06035638e-03f, + -1.06144174e-03f, -1.06252756e-03f, -1.06361386e-03f, -1.06470063e-03f, + -1.06578787e-03f, -1.06687558e-03f, -1.06796376e-03f, -1.06905241e-03f, + -1.07014154e-03f, -1.07123114e-03f, -1.07232121e-03f, -1.07341176e-03f, + -1.07450278e-03f, -1.07559427e-03f, -1.07668623e-03f, -1.07777867e-03f, + -1.07887159e-03f, -1.07996497e-03f, -1.08105884e-03f, -1.08215317e-03f, + -1.08324798e-03f, -1.08434327e-03f, -1.08543903e-03f, -1.08653527e-03f, + -1.08763198e-03f, -1.08872917e-03f, -1.08982683e-03f, -1.09092497e-03f, + -1.09202358e-03f, -1.09312268e-03f, -1.09422224e-03f, -1.09532229e-03f, + -1.09642281e-03f, -1.09752381e-03f, -1.09862528e-03f, -1.09972723e-03f, + -1.10082966e-03f, -1.10193257e-03f, -1.10303595e-03f, -1.10413981e-03f, + -1.10524415e-03f, -1.10634897e-03f, -1.10745426e-03f, -1.10856003e-03f, + -1.10966629e-03f, -1.11077301e-03f, -1.11188022e-03f, -1.11298791e-03f, + -1.11409607e-03f, -1.11520471e-03f, -1.11631383e-03f, -1.11742343e-03f, + -1.11853351e-03f, -1.11964407e-03f, -1.12075511e-03f, -1.12186662e-03f, + -1.12297862e-03f, -1.12409109e-03f, -1.12520404e-03f, -1.12631748e-03f, + -1.12743139e-03f, -1.12854578e-03f, -1.12966065e-03f, -1.13077600e-03f, + -1.13189183e-03f, -1.13300814e-03f, -1.13412493e-03f, -1.13524219e-03f, + -1.13635994e-03f, -1.13747817e-03f, -1.13859688e-03f, -1.13971606e-03f, + -1.14083573e-03f, -1.14195587e-03f, -1.14307650e-03f, -1.14419760e-03f, + -1.14531919e-03f, -1.14644125e-03f, -1.14756380e-03f, -1.14868682e-03f, + -1.14981032e-03f, -1.15093431e-03f, -1.15205877e-03f, -1.15318371e-03f, + -1.15430913e-03f, -1.15543503e-03f, -1.15656141e-03f, -1.15768827e-03f, + -1.15881561e-03f, -1.15994343e-03f, -1.16107173e-03f, -1.16220051e-03f, + -1.16332976e-03f, -1.16445950e-03f, -1.16558971e-03f, -1.16672041e-03f, + -1.16785158e-03f, -1.16898323e-03f, -1.17011536e-03f, -1.17124797e-03f, + -1.17238106e-03f, -1.17351462e-03f, -1.17464867e-03f, -1.17578319e-03f, + -1.17691819e-03f, -1.17805367e-03f, -1.17918962e-03f, -1.18032606e-03f, + -1.18146297e-03f, -1.18260036e-03f, -1.18373823e-03f, -1.18487657e-03f, + -1.18601540e-03f, -1.18715470e-03f, -1.18829447e-03f, -1.18943473e-03f, + -1.19057546e-03f, -1.19171666e-03f, -1.19285835e-03f, -1.19400051e-03f, + -1.19514314e-03f, -1.19628625e-03f, -1.19742984e-03f, -1.19857391e-03f, + -1.19971845e-03f, -1.20086346e-03f, -1.20200895e-03f, -1.20315491e-03f, + -1.20430135e-03f, -1.20544827e-03f, -1.20659566e-03f, -1.20774352e-03f, + -1.20889186e-03f, -1.21004067e-03f, -1.21118995e-03f, -1.21233971e-03f, + -1.21348994e-03f, -1.21464064e-03f, -1.21579182e-03f, -1.21694347e-03f, + -1.21809559e-03f, -1.21924819e-03f, -1.22040125e-03f, -1.22155479e-03f, + -1.22270880e-03f, -1.22386328e-03f, -1.22501823e-03f, -1.22617365e-03f, + -1.22732954e-03f, -1.22848591e-03f, -1.22964274e-03f, -1.23080004e-03f, + -1.23195781e-03f, -1.23311605e-03f, -1.23427476e-03f, -1.23543394e-03f, + -1.23659359e-03f, -1.23775370e-03f, -1.23891428e-03f, -1.24007533e-03f, + -1.24123685e-03f, -1.24239883e-03f, -1.24356128e-03f, -1.24472420e-03f, + -1.24588758e-03f, -1.24705143e-03f, -1.24821574e-03f, -1.24938052e-03f, + -1.25054576e-03f, -1.25171147e-03f, -1.25287764e-03f, -1.25404427e-03f, + -1.25521137e-03f, -1.25637893e-03f, -1.25754695e-03f, -1.25871544e-03f, + -1.25988438e-03f, -1.26105379e-03f, -1.26222366e-03f, -1.26339399e-03f, + -1.26456479e-03f, -1.26573604e-03f, -1.26690775e-03f, -1.26807992e-03f, + -1.26925255e-03f, -1.27042563e-03f, -1.27159918e-03f, -1.27277318e-03f, + -1.27394764e-03f, -1.27512256e-03f, -1.27629794e-03f, -1.27747377e-03f, + -1.27865005e-03f, -1.27982679e-03f, -1.28100399e-03f, -1.28218164e-03f, + -1.28335975e-03f, -1.28453830e-03f, -1.28571732e-03f, -1.28689678e-03f, + -1.28807670e-03f, -1.28925706e-03f, -1.29043788e-03f, -1.29161915e-03f, + -1.29280087e-03f, -1.29398304e-03f, -1.29516566e-03f, -1.29634873e-03f, + -1.29753225e-03f, -1.29871622e-03f, -1.29990063e-03f, -1.30108549e-03f, + -1.30227080e-03f, -1.30345655e-03f, -1.30464275e-03f, -1.30582940e-03f, + -1.30701648e-03f, -1.30820402e-03f, -1.30939199e-03f, -1.31058041e-03f, + -1.31176927e-03f, -1.31295858e-03f, -1.31414832e-03f, -1.31533851e-03f, + -1.31652914e-03f, -1.31772020e-03f, -1.31891171e-03f, -1.32010365e-03f, + -1.32129604e-03f, -1.32248886e-03f, -1.32368212e-03f, -1.32487581e-03f, + -1.32606994e-03f, -1.32726451e-03f, -1.32845951e-03f, -1.32965494e-03f, + -1.33085081e-03f, -1.33204711e-03f, -1.33324385e-03f, -1.33444102e-03f, + -1.33563861e-03f, -1.33683664e-03f, -1.33803510e-03f, -1.33923399e-03f, + -1.34043331e-03f, -1.34163305e-03f, -1.34283322e-03f, -1.34403382e-03f, + -1.34523485e-03f, -1.34643630e-03f, -1.34763818e-03f, -1.34884048e-03f, + -1.35004321e-03f, -1.35124635e-03f, -1.35244993e-03f, -1.35365392e-03f, + -1.35485833e-03f, -1.35606317e-03f, -1.35726842e-03f, -1.35847410e-03f, + -1.35968019e-03f, -1.36088670e-03f, -1.36209363e-03f, -1.36330097e-03f, + -1.36450873e-03f, -1.36571690e-03f, -1.36692549e-03f, -1.36813450e-03f, + -1.36934391e-03f, -1.37055374e-03f, -1.37176398e-03f, -1.37297463e-03f, + -1.37418569e-03f, -1.37539716e-03f, -1.37660904e-03f, -1.37782132e-03f, + -1.37903402e-03f, -1.38024712e-03f, -1.38146062e-03f, -1.38267453e-03f, + -1.38388885e-03f, -1.38510356e-03f, -1.38631868e-03f, -1.38753421e-03f, + -1.38875013e-03f, -1.38996645e-03f, -1.39118318e-03f, -1.39240030e-03f, + -1.39361782e-03f, -1.39483573e-03f, -1.39605405e-03f, -1.39727276e-03f, + -1.39849186e-03f, -1.39971136e-03f, -1.40093125e-03f, -1.40215153e-03f, + -1.40337220e-03f, -1.40459327e-03f, -1.40581472e-03f, -1.40703656e-03f, + -1.40825880e-03f, -1.40948141e-03f, -1.41070442e-03f, -1.41192781e-03f, + -1.41315159e-03f, -1.41437575e-03f, -1.41560029e-03f, -1.41682521e-03f, + -1.41805052e-03f, -1.41927620e-03f, -1.42050227e-03f, -1.42172871e-03f, + -1.42295553e-03f, -1.42418273e-03f, -1.42541031e-03f, -1.42663826e-03f, + -1.42786658e-03f, -1.42909528e-03f, -1.43032435e-03f, -1.43155379e-03f, + -1.43278360e-03f, -1.43401378e-03f, -1.43524433e-03f, -1.43647524e-03f, + -1.43770653e-03f, -1.43893818e-03f, -1.44017019e-03f, -1.44140257e-03f, + -1.44263531e-03f, -1.44386841e-03f, -1.44510187e-03f, -1.44633570e-03f, + -1.44756988e-03f, -1.44880442e-03f, -1.45223529e-03f, -1.44227671e-03f, + -1.47324145e-03f, -1.41601790e-03f, -1.51531161e-03f, -1.36733498e-03f, + -1.58121191e-03f, -1.29337171e-03f, -1.67391021e-03f, -1.19102149e-03f, + -1.79668554e-03f, -1.05679069e-03f, -1.95329896e-03f, -8.86586820e-04f, + -2.14825456e-03f, -6.75391794e-04f, -2.38721045e-03f, -4.16749320e-04f, + -2.67762346e-03f, -1.01943182e-04f, -3.02980239e-03f, 2.81362663e-04f, + -3.45868355e-03f, 7.51474351e-04f, -3.98699561e-03f, 1.33699149e-03f, + -4.65121759e-03f, 2.08516081e-03f, -5.51366210e-03f, 3.07986923e-03f, + -6.68993478e-03f, 4.48491092e-03f, -8.42000722e-03f, 6.66671251e-03f, + -1.12935981e-02f, 1.06424405e-02f, -1.72425561e-02f, 2.06568651e-02f, + -3.83394261e-02f, 1.05707669e-01f, 1.17548294e-01f, -3.94889483e-02f, + 2.09496753e-02f, -1.73181573e-02f, 1.06035477e-02f, -1.12329019e-02f, + 6.55025943e-03f, -8.32344639e-03f, 4.33947788e-03f, -6.58432940e-03f, + 2.92175357e-03f, -5.40967516e-03f, 1.92177009e-03f, -4.55425377e-03f, + 1.17242894e-03f, -3.90027233e-03f, 5.88320144e-04f, -3.38430347e-03f, + 1.21372027e-04f, -2.96926330e-03f, -2.57491762e-04f, -2.63200515e-03f, + -5.66947929e-04f, -2.35726930e-03f, -8.19622629e-04f, -2.13448083e-03f, + -1.02447701e-03f, -1.95595349e-03f, -1.18818434e-03f, -1.81582398e-03f, + -1.31595864e-03f, -1.70940055e-03f, -1.41207095e-03f, -1.63275145e-03f, + -1.48017789e-03f, -1.58244287e-03f, -1.52353275e-03f, -1.55536807e-03f, + -1.54512290e-03f, -1.54863859e-03f, -1.54989891e-03f, -1.55115951e-03f, + -1.55242039e-03f, -1.55368155e-03f, -1.55494300e-03f, -1.55620473e-03f, + -1.55746674e-03f, -1.55872902e-03f, -1.55999159e-03f, -1.56125443e-03f, + -1.56251755e-03f, -1.56378095e-03f, -1.56526627e-03f, -1.56539967e-03f, + -1.56966857e-03f, -1.56502016e-03f, -1.57621090e-03f, -1.56235920e-03f, + -1.58518538e-03f, -1.55711383e-03f, -1.59690714e-03f, -1.54895227e-03f, + -1.61173010e-03f, -1.53749642e-03f, -1.63006135e-03f, -1.52230118e-03f, + -1.65239318e-03f, -1.50281985e-03f, -1.67934859e-03f, -1.47833259e-03f, + -1.71175145e-03f, -1.44787239e-03f, -1.75075594e-03f, -1.41005885e-03f, + -1.79804159e-03f, -1.36281905e-03f, -1.85605019e-03f, -1.30321344e-03f, + -1.92884398e-03f, -1.22563738e-03f, -2.02375719e-03f, -1.12026439e-03f, + -2.15446222e-03f, -9.67430556e-04f, -2.35034010e-03f, -7.21213357e-04f, + -2.68754751e-03f, -2.44700822e-04f, -3.44272036e-03f, 1.13485684e-03f, + -7.00077505e-03f, 1.65126179e-01f, 4.34086419e-03f, -4.50541297e-03f, + 2.76161490e-04f, -3.01924336e-03f, -5.19729212e-04f, -2.52252521e-03f, + -8.68386495e-04f, -2.26920766e-03f, -1.06897474e-03f, -2.11310147e-03f, + -1.20206504e-03f, -2.00598319e-03f, -1.29831315e-03f, -1.92739322e-03f, + -1.37192459e-03f, -1.86717518e-03f, -1.43021748e-03f, -1.81996156e-03f, + -1.47752303e-03f, -1.78214570e-03f, -1.51658612e-03f, -1.75164889e-03f, + -1.54908167e-03f, -1.72709974e-03f, -1.57615560e-03f, -1.70753330e-03f, + -1.59862814e-03f, -1.69224553e-03f, -1.61710713e-03f, -1.68069488e-03f, + -1.63207873e-03f, -1.67244667e-03f, -1.64394256e-03f, -1.66713067e-03f, + -1.65304064e-03f, -1.66442379e-03f, -1.65968357e-03f, -1.66402839e-03f, + -1.66415761e-03f, -1.66566648e-03f, -1.66694933e-03f, -1.66983042e-03f, + -1.66296676e-03f, -1.68589041e-03f, -1.64461382e-03f, -1.71729880e-03f, + -1.60991236e-03f, -1.76609013e-03f, -1.55675860e-03f, -1.83445361e-03f, + -1.48285792e-03f, -1.92481539e-03f, -1.38561980e-03f, -2.03996858e-03f, + -1.26200050e-03f, -2.18326926e-03f, -1.10825470e-03f, -2.35894599e-03f, + -9.19547292e-04f, -2.57259462e-03f, -6.89330891e-04f, -2.83197341e-03f, + -4.08305534e-04f, -3.14835820e-03f, -6.26177269e-05f, -3.53894324e-03f, + 3.69336316e-04f, -4.03142360e-03f, 9.23698893e-04f, -4.67364971e-03f, + 1.66507402e-03f, -5.55505377e-03f, 2.72092431e-03f, -6.86374660e-03f, + 4.38111902e-03f, -9.07179180e-03f, 7.47305642e-03f, -1.37876611e-02f, + 1.56668592e-02f, -3.22870163e-02f, 1.21430338e-01f, 5.94451012e-02f, + -2.60535375e-02f, 1.33672771e-02f, -1.25791124e-02f, 6.68558442e-03f, + -8.53403976e-03f, 3.94178061e-03f, -6.54242575e-03f, 2.41375228e-03f, + -5.33397037e-03f, 1.42195288e-03f, -4.51028211e-03f, 7.16788510e-04f, + -3.90683249e-03f, 1.85345560e-04f, -3.44356178e-03f, -2.30667901e-04f, + -3.07706854e-03f, -5.64318079e-04f, -2.78164462e-03f, -8.35819334e-04f, + -2.54122037e-03f, -1.05814253e-03f, -2.34517528e-03f, -1.24009390e-03f, + -2.18612168e-03f, -1.38794431e-03f, -2.05867168e-03f, -1.50637930e-03f, + -1.95870073e-03f, -1.59907277e-03f, -1.88289892e-03f, -1.66904381e-03f, + -1.82848076e-03f, -1.71888565e-03f, -1.79300735e-03f, -1.75091423e-03f, + -1.77426387e-03f, -1.76726163e-03f, -1.77018609e-03f, -1.77148334e-03f, + -1.77278073e-03f, -1.77407828e-03f, -1.77537597e-03f, -1.77667381e-03f, + -1.77797180e-03f, -1.77926993e-03f, -1.78056820e-03f, -1.78186662e-03f, + -1.78316518e-03f, -1.78446388e-03f, -1.78576273e-03f, -1.78706171e-03f, + -1.78836084e-03f, -1.78966010e-03f, -1.79095951e-03f, -1.79225905e-03f, + -1.79355872e-03f, -1.79485853e-03f, -1.79615848e-03f, -1.79745856e-03f, + -1.79875877e-03f, -1.80005912e-03f, -1.80135960e-03f, -1.80266021e-03f, + -1.80396094e-03f, -1.80526181e-03f, -1.80656281e-03f, -1.80786393e-03f, + -1.80916518e-03f, -1.81046655e-03f, -1.81176805e-03f, -1.81306967e-03f, + -1.81437142e-03f, -1.81572175e-03f, -1.81677707e-03f, -1.81873304e-03f, + -1.81875204e-03f, -1.82220232e-03f, -1.82024310e-03f, -1.82618380e-03f, + -1.82119470e-03f, -1.83073474e-03f, -1.82154729e-03f, -1.83591933e-03f, + -1.82123423e-03f, -1.84180582e-03f, -1.82017927e-03f, -1.84847980e-03f, + -1.81828814e-03f, -1.85604711e-03f, -1.81544014e-03f, -1.86464716e-03f, + -1.81146524e-03f, -1.87447345e-03f, -1.80614967e-03f, -1.88580858e-03f, + -1.79913173e-03f, -1.89906849e-03f, -1.78975758e-03f, -1.91523304e-03f, + -1.77705288e-03f, -1.93530989e-03f, -1.75952574e-03f, -1.96145484e-03f, + -1.73416453e-03f, -1.99802990e-03f, -1.69440641e-03f, -2.05533163e-03f, + -1.62307660e-03f, -2.16457562e-03f, -1.45645067e-03f, -2.48458067e-03f, + -5.92542915e-04f, 1.45703377e-01f, -3.01160169e-03f, -1.28944698e-03f, + -2.25808889e-03f, -1.58616647e-03f, -2.10064175e-03f, -1.69053796e-03f, + -2.03219552e-03f, -1.74593917e-03f, -1.99379794e-03f, -1.78148401e-03f, + -1.96928528e-03f, -1.80690720e-03f, -1.95240866e-03f, -1.82639976e-03f, + -1.94024900e-03f, -1.84205587e-03f, -1.93117774e-03f, -1.85519428e-03f, + -1.92437585e-03f, -1.86625739e-03f, -1.91940029e-03f, -1.87570272e-03f, + -1.91586996e-03f, -1.88384059e-03f, -1.91353029e-03f, -1.89088904e-03f, + -1.91219385e-03f, -1.89701055e-03f, -1.91171809e-03f, -1.90233042e-03f, + -1.91198962e-03f, -1.90695443e-03f, -1.91427994e-03f, -1.90537068e-03f, + -1.92730781e-03f, -1.89096983e-03f, -1.95395366e-03f, -1.86212824e-03f, + -1.99589172e-03f, -1.81715444e-03f, -2.05475998e-03f, -1.75438984e-03f, + -2.13244196e-03f, -1.67166280e-03f, -2.23133192e-03f, -1.56636429e-03f, + -2.35430669e-03f, -1.43528282e-03f, -2.50499367e-03f, -1.27427098e-03f, + -2.68819253e-03f, -1.07771088e-03f, -2.91056222e-03f, -8.37615517e-04f, + -3.18178630e-03f, -5.42090323e-04f, -3.51662953e-03f, -1.72585221e-04f, + -3.93889248e-03f, 3.01991779e-04f, -4.48974370e-03f, 9.37242261e-04f, + -5.24621593e-03f, 1.84286979e-03f, -6.36989986e-03f, 3.26813351e-03f, + -8.26830296e-03f, 5.92986064e-03f, -1.23396314e-02f, 1.30344506e-02f, + -2.85386951e-02f, 1.11172035e-01f, 4.84733753e-02f, -2.24813696e-02f, + 1.08414439e-02f, -1.12188634e-02f, 5.22503413e-03f, -7.81467575e-03f, + 2.91695532e-03f, -6.14414610e-03f, 1.63952788e-03f, -5.14034815e-03f, + 8.20913317e-04f, -4.46786426e-03f, 2.51183941e-04f, -3.98875174e-03f, + -1.63709859e-04f, -3.63703462e-03f, -4.70933998e-04f, -3.37901925e-03f, + -6.94252437e-04f, -3.19849179e-03f, -8.43297156e-04f, -3.09230115e-03f, + -9.13986037e-04f, -3.07399261e-03f, -8.78526187e-04f, -3.19578896e-03f, + -6.37072164e-04f, -3.66562884e-03f, 3.23226833e-04f, -6.31220067e-03f, + 1.28574756e-01f, 2.46703945e-03f, -4.14554306e-03f, -6.07544917e-04f, + -3.04482757e-03f, -1.18713434e-03f, -2.68902236e-03f, -1.43742809e-03f, + -2.50681733e-03f, -1.58648925e-03f, -2.38893997e-03f, -1.68939199e-03f, + -2.30730640e-03f, -1.76399057e-03f, -2.24758850e-03f, -1.82119792e-03f, + -2.20198390e-03f, -1.86663450e-03f, -2.16637200e-03f, -1.90362886e-03f, + -2.13797775e-03f, -1.93429141e-03f, -2.11520456e-03f, -1.95990852e-03f, + -2.09699911e-03f, -1.98136035e-03f, -2.08262030e-03f, -1.99927685e-03f, + -2.07152742e-03f, -2.01412486e-03f, -2.06330450e-03f, -2.02627776e-03f, + -2.05761779e-03f, -2.03604244e-03f, -2.05418292e-03f, -2.04368155e-03f, + -2.05275177e-03f, -2.04943364e-03f, -2.05309573e-03f, -2.05351858e-03f, + -2.05500129e-03f, -2.05631014e-03f, -2.05761895e-03f, -2.05892772e-03f, + -2.06023646e-03f, -2.06154516e-03f, -2.06285383e-03f, -2.06416245e-03f, + -2.06547104e-03f, -2.06677958e-03f, -2.06808808e-03f, -2.06939654e-03f, + -2.07070496e-03f, -2.07201333e-03f, -2.07480361e-03f, -2.06855691e-03f, + -2.08993261e-03f, -2.05177439e-03f, -2.11929184e-03f, -2.01983335e-03f, + -2.16476561e-03f, -1.97078568e-03f, -2.22981822e-03f, -1.89661810e-03f, + -2.32595135e-03f, -1.78791097e-03f, -2.45998674e-03f, -1.63537166e-03f, + -2.64424999e-03f, -1.42805143e-03f, -2.88704808e-03f, -1.15806165e-03f, + -3.19711999e-03f, -8.15602915e-04f, -3.58560775e-03f, -3.87830892e-04f, + -4.06753180e-03f, 1.43093154e-04f, -4.66436058e-03f, 8.03391971e-04f, + -5.40877279e-03f, 1.63457600e-03f, -6.35440957e-03f, 2.70740565e-03f, + -7.59702167e-03f, 4.15536747e-03f, -9.32939525e-03f, 6.26931586e-03f, + -1.20154424e-02f, 9.84605476e-03f, -1.71745124e-02f, 1.82878626e-02f, + -3.50418948e-02f, 1.10307273e-01f, 4.99616052e-02f, -1.73624981e-02f, + 2.97252885e-03f, -1.37372898e-03f, -7.93362964e-03f, 9.75456932e-03f, + -2.47292678e-02f, 5.99934346e-02f, 8.89828875e-02f, -2.10934253e-02f, + -1.14251836e-03f, 2.56355484e-02f, 1.16876975e-01f, -3.37812197e-02f, + 1.78640181e-02f, -1.70901823e-02f, 9.80906691e-03f, -1.20652658e-02f, + 6.25860116e-03f, -9.37822495e-03f, 4.11935878e-03f, -7.62728496e-03f, + 2.64308716e-03f, -6.36931857e-03f, 1.54760628e-03f, -5.41615332e-03f, + 7.06054051e-04f, -4.68099350e-03f, 5.38923504e-05f, -4.11221514e-03f, + -4.49759040e-04f, -3.67790307e-03f, -8.30193503e-04f, -3.35767755e-03f, + -1.10399077e-03f, -3.13796449e-03f, -1.28232516e-03f, -3.00954599e-03f, + -1.37278620e-03f, -2.96622627e-03f, -1.38176821e-03f, -2.99860237e-03f, + -1.31991533e-03f, -3.10069523e-03f, -1.18731581e-03f, -3.27529286e-03f, + -9.79576037e-04f, -3.52874691e-03f, -6.89305350e-04f, -3.86748524e-03f, + -3.08317704e-04f, -4.30862377e-03f, 1.91420835e-04f, -4.88876552e-03f, + 8.59472862e-04f, -5.68211242e-03f, 1.80702617e-03f, -6.85387289e-03f, + 3.28743124e-03f, -8.81404877e-03f, 6.01319025e-03f, -1.29305883e-02f, + 1.30427979e-02f, -2.82112566e-02f, 8.39968384e-02f, 6.38570304e-02f, + -2.59306366e-02f, 1.21469721e-02f, -1.24344668e-02f, 5.65483376e-03f, + -8.56257378e-03f, 3.05196991e-03f, -6.68513098e-03f, 1.61767966e-03f, + -5.55499711e-03f, 6.92333436e-04f, -4.78852062e-03f, 3.69685882e-05f, + -4.22889611e-03f, -4.55624836e-04f, -3.80034172e-03f, -8.40509002e-04f, + -3.46190778e-03f, -1.14878891e-03f, -3.18951827e-03f, -1.39937376e-03f, + -2.96812688e-03f, -1.60440526e-03f, -2.78780242e-03f, -1.77210831e-03f, + -2.64165123e-03f, -1.90833000e-03f, -2.52465472e-03f, -2.01743059e-03f, + -2.43297768e-03f, -2.10282351e-03f, -2.36354644e-03f, -2.16730912e-03f, + -2.31378102e-03f, -2.21328824e-03f, -2.28142511e-03f, -2.24290086e-03f, + -2.26443370e-03f, -2.25811442e-03f, -2.26090331e-03f, -2.26219897e-03f, + -2.26349452e-03f, -2.26478997e-03f, -2.26608531e-03f, -2.26738054e-03f, + -2.26867566e-03f, -2.26997067e-03f, -2.27126558e-03f, -2.27256038e-03f, + -2.27385506e-03f, -2.27514964e-03f, -2.27644411e-03f, -2.27773846e-03f, + -2.27903271e-03f, -2.28032684e-03f, -2.28162086e-03f, -2.28291477e-03f, + -2.28420857e-03f, -2.28550226e-03f, -2.28679583e-03f, -2.28808929e-03f, + -2.28938263e-03f, -2.29067586e-03f, -2.29196898e-03f, -2.29326198e-03f, + -2.29588850e-03f, -2.29038347e-03f, -2.30972898e-03f, -2.27552467e-03f, + -2.33635373e-03f, -2.24705631e-03f, -2.37743533e-03f, -2.20325233e-03f, + -2.43476622e-03f, -2.14223772e-03f, -2.51032425e-03f, -2.06190627e-03f, + -2.60637428e-03f, -1.95979570e-03f, -2.72562563e-03f, -1.83288979e-03f, + -2.87147650e-03f, -1.67731343e-03f, -3.04839918e-03f, -1.48784199e-03f, + -3.26256945e-03f, -1.25709297e-03f, -3.52291958e-03f, -9.74122830e-04f, + -3.84303045e-03f, -6.21837613e-04f, -4.24468701e-03f, -1.72113021e-04f, + -4.76489647e-03f, 4.24827104e-04f, -5.47214207e-03f, 1.26576815e-03f, + -6.50780394e-03f, 2.56581488e-03f, -8.21644725e-03f, 4.91550800e-03f, + -1.17094680e-02f, 1.07217316e-02f, -2.36408525e-02f, 5.42041254e-02f, + 8.46695012e-02f, -2.67774617e-02f, 1.17648422e-02f, -1.21971799e-02f, + 5.14867347e-03f, -8.35771967e-03f, 2.60923721e-03f, -6.54600514e-03f, + 1.23589323e-03f, -5.47051944e-03f, 3.59232982e-04f, -4.74733256e-03f, + -2.57425705e-04f, -4.22237701e-03f, -7.18742083e-04f, -3.82205690e-03f, + -1.07798470e-03f, -3.50686039e-03f, -1.36504732e-03f, -3.25379674e-03f, + -1.59792624e-03f, -3.04853542e-03f, -1.78817914e-03f, -2.88163674e-03f, + -1.94361458e-03f, -2.74657034e-03f, -2.06976167e-03f, -2.63859523e-03f, + -2.17073337e-03f, -2.55410013e-03f, -2.24973881e-03f, -2.49019969e-03f, + -2.30940284e-03f, -2.44447873e-03f, -2.35197003e-03f, -2.41483127e-03f, + -2.37943417e-03f, -2.39935445e-03f, -2.39362409e-03f, -2.39628091e-03f, + -2.39756277e-03f, -2.39884447e-03f, -2.40012601e-03f, -2.40140738e-03f, + -2.40268860e-03f, -2.40396965e-03f, -2.40525053e-03f, -2.40653125e-03f, + -2.40781181e-03f, -2.40909220e-03f, -2.41037242e-03f, -2.41165247e-03f, + -2.41293236e-03f, -2.41421207e-03f, -2.41549162e-03f, -2.41677100e-03f, + -2.41805020e-03f, -2.41932923e-03f, -2.42060809e-03f, -2.42188678e-03f, + -2.42316529e-03f, -2.42444362e-03f, -2.42572178e-03f, -2.42699976e-03f, + -2.42827757e-03f, -2.42955519e-03f, -2.43083264e-03f, -2.43210990e-03f, + -2.43338698e-03f, -2.43466389e-03f, -2.43594060e-03f, -2.43721714e-03f, + -2.43849349e-03f, -2.43976965e-03f, -2.44104563e-03f, -2.44232142e-03f, + -2.44359702e-03f, -2.44487243e-03f, -2.44614766e-03f, -2.44742269e-03f, + -2.44869753e-03f, -2.44997217e-03f, -2.45124662e-03f, -2.45252088e-03f, + -2.45379494e-03f, -2.45506881e-03f, -2.45634247e-03f, -2.45761594e-03f, + -2.45888921e-03f, -2.46016227e-03f, -2.46143514e-03f, -2.46270780e-03f, + -2.46398026e-03f, -2.46525251e-03f, -2.46652455e-03f, -2.46779639e-03f, + -2.46906802e-03f, -2.47033945e-03f, -2.47161066e-03f, -2.47288166e-03f, + -2.47415245e-03f, -2.47542302e-03f, -2.47669338e-03f, -2.47796352e-03f, + -2.47923345e-03f, -2.48050316e-03f, -2.48177265e-03f, -2.48388694e-03f, + -2.48084771e-03f, -2.49356122e-03f, -2.47231927e-03f, -2.51135590e-03f, + -2.45513618e-03f, -2.53835283e-03f, -2.42817886e-03f, -2.57571786e-03f, + -2.39022410e-03f, -2.62474526e-03f, -2.33989039e-03f, -2.68692649e-03f, + -2.27554859e-03f, -2.76405842e-03f, -2.19519331e-03f, -2.85840820e-03f, + -2.09667982e-03f, -2.97113974e-03f, -1.97937865e-03f, -3.10423482e-03f, + -1.83924025e-03f, -3.26323376e-03f, -1.66935099e-03f, -3.45681682e-03f, + -1.45868224e-03f, -3.69932569e-03f, -1.18827993e-03f, -4.01606098e-03f, + -8.23752317e-04f, -4.45496581e-03f, -2.96300190e-04f, -5.11826548e-03f, + 5.52739990e-04f, -6.26644396e-03f, 2.18445952e-03f, -8.80790005e-03f, + 6.71516699e-03f, -1.95340962e-02f, 8.79214590e-02f, 2.61934970e-02f, + -1.51946788e-02f, 5.72215086e-03f, -8.75846771e-03f, 2.52621412e-03f, + -6.87810525e-03f, 1.31767795e-03f, -6.08372669e-03f, 7.99233001e-04f, + -5.78909188e-03f, 6.95321735e-04f, -5.89505515e-03f, 1.05004468e-03f, + -6.62954061e-03f, 2.45030080e-03f, -9.58821605e-03f, 1.13564962e-02f, + 1.00012879e-01f, -1.22577849e-02f, 2.29743391e-03f, -5.70785630e-03f, + -2.69870475e-04f, -4.33974225e-03f, -1.12089732e-03f, -3.76797868e-03f, + -1.53669229e-03f, -3.45899628e-03f, -1.78277492e-03f, -3.26506212e-03f, + -1.94795308e-03f, -3.12969055e-03f, -2.06972381e-03f, -3.02711745e-03f, + -2.16629828e-03f, -2.94414460e-03f, -2.24738714e-03f, -2.87415512e-03f, + -2.31629447e-03f, -2.81613562e-03f, -2.37384518e-03f, -2.76956251e-03f, + -2.41806351e-03f, -2.73819591e-03f, -2.44773175e-03f, -2.71808480e-03f, + -2.46954203e-03f, -2.70416939e-03f, -2.48586820e-03f, -2.69509075e-03f, + -2.49793866e-03f, -2.68973874e-03f, -2.50674677e-03f, -2.68724314e-03f, + -2.51303136e-03f, -2.68700847e-03f, -2.51722219e-03f, -2.68880754e-03f, + -2.51973938e-03f, -2.69124587e-03f, -2.52229603e-03f, -2.69426602e-03f, + -2.52268063e-03f, -2.70293371e-03f, -2.51048489e-03f, -2.73263494e-03f, + -2.46929599e-03f, -2.80080452e-03f, -2.37701312e-03f, -2.93728311e-03f, + -2.18725300e-03f, -3.22484776e-03f, -1.74802643e-03f, -3.95513060e-03f, + -4.32856544e-04f, -6.77309380e-03f, 8.48136732e-03f, 1.00714944e-01f, + -1.68825749e-02f, 7.45699453e-03f, -1.22323943e-02f, 8.33470629e-03f, + -1.80299794e-02f, 3.13501975e-02f, 8.06269137e-02f, -2.01915048e-02f, + 7.08333411e-03f, -9.41322746e-03f, 2.63367464e-03f, -7.05172551e-03f, + 1.23192536e-03f, -6.19741704e-03f, 7.26917094e-04f, -5.96402260e-03f, + 7.22697540e-04f, -6.20622095e-03f, 1.25119178e-03f, -7.14395602e-03f, + 2.82177034e-03f, -9.87118653e-03f, 8.02778416e-03f, -2.23182975e-02f, + 7.11250575e-02f, 6.22662475e-02f, -3.20782686e-02f, 2.19651646e-02f, + -3.17524804e-02f, 6.44454696e-02f, 5.27461977e-02f, -1.80542671e-02f, + 5.20192611e-03f, -7.50780501e-03f, 5.65766632e-04f, -4.92948530e-03f, + -1.08213857e-03f, -3.77903308e-03f, -1.95418966e-03f, -3.08413915e-03f, + -2.54585821e-03f, -2.56477658e-03f, -3.03083114e-03f, -2.10292234e-03f, + -3.49686213e-03f, -1.62573984e-03f, -4.01413120e-03f, -1.05325048e-03f, + -4.68608847e-03f, -2.34919326e-04f, -5.77379906e-03f, 1.40194547e-03f, + -9.16057116e-03f, 9.42131489e-02f, -1.77899654e-03f, -4.25196409e-04f, + -7.04661037e-03f, 4.28694871e-03f, -1.47427228e-02f, 2.75087791e-02f, + 8.08320767e-02f, -2.08703867e-02f, 7.57511925e-03f, -9.86617366e-03f, + 2.75585700e-03f, -7.09709125e-03f, 9.29771534e-04f, -5.79963958e-03f, + -4.93251171e-05f, -5.04138923e-03f, -6.59765350e-04f, -4.54808927e-03f, + -1.07017287e-03f, -4.21697554e-03f, -1.33560093e-03f, -4.03683367e-03f, + -1.39452304e-03f, -4.33094177e-03f, 9.74377798e-02f, -2.48153108e-03f, + -2.60170101e-03f, -2.92806876e-03f, -2.52199511e-03f, -2.92418939e-03f, + -2.56145885e-03f, -2.87834641e-03f, -2.61490812e-03f, -2.83089904e-03f, + -2.66389741e-03f, -2.79103911e-03f, -2.70370323e-03f, -2.76111673e-03f, + -2.73328796e-03f, -2.74147547e-03f, -2.75270418e-03f, -2.73141024e-03f, + -2.76328897e-03f, -2.72980709e-03f, -2.76565850e-03f, -2.73718518e-03f, + -2.75678970e-03f, -2.75668668e-03f, -2.73671005e-03f, -2.78731326e-03f, + -2.70466946e-03f, -2.83074778e-03f, -2.65894159e-03f, -2.88877788e-03f, + -2.59765605e-03f, -2.96338169e-03f, -2.51869863e-03f, -3.05684413e-03f, + -2.41956273e-03f, -3.17194975e-03f, -2.29712652e-03f, -3.31225337e-03f, + -2.14727640e-03f, -3.48248227e-03f, -1.96450329e-03f, -3.68944911e-03f, + -1.74024755e-03f, -3.94370266e-03f, -1.46143544e-03f, -4.26185610e-03f, + -1.10634464e-03f, -4.67313901e-03f, -6.34306050e-04f, -5.23671772e-03f, + 4.64635944e-05f, -6.11017915e-03f, 1.25837138e-03f, -8.25925110e-03f, + 9.85469322e-02f, -5.75542882e-03f, 2.46979099e-03f, -1.02936652e-02f, + 8.25625514e-03f, -2.18107934e-02f, 5.64222925e-02f, 5.36646867e-02f, + -2.19835141e-02f, 8.72351299e-03f, -1.09879321e-02f, 3.50096509e-03f, + -7.88764884e-03f, 1.42188735e-03f, -6.39307089e-03f, 2.84484234e-04f, + -5.50305161e-03f, -4.38218368e-04f, -4.91245053e-03f, -9.35661581e-04f, + -4.49735109e-03f, -1.29207084e-03f, -4.19870627e-03f, -1.54992055e-03f, + -3.98536445e-03f, -1.73239397e-03f, -3.83991545e-03f, -1.85259047e-03f, + -3.75257406e-03f, -1.91767101e-03f, -3.71833403e-03f, -1.93078112e-03f, + -3.73574919e-03f, -1.89172003e-03f, -3.80772123e-03f, -1.79262065e-03f, + -3.94662347e-03f, -1.61999323e-03f, -4.16673856e-03f, -1.35574399e-03f, + -4.49259380e-03f, -9.66325498e-04f, -4.97093766e-03f, -3.84613994e-04f, + -5.70176358e-03f, 5.44576344e-04f, -6.93905706e-03f, 2.26774076e-03f, + -9.55540080e-03f, 6.80533313e-03f, -1.99494599e-02f, 7.66626678e-02f, + 2.56966787e-02f, -1.44285664e-02f, 4.10986162e-03f, -7.60555082e-03f, + 5.59429847e-04f, -5.34150327e-03f, -1.07979827e-03f, -4.05464654e-03f, + -2.16817520e-03f, -3.08916287e-03f, -3.07645068e-03f, -2.20416689e-03f, + -3.98621088e-03f, -1.23747674e-03f, -5.07087052e-03f, 3.01889405e-05f, + -6.65035532e-03f, 2.12844954e-03f, -9.72483455e-03f, 7.30184978e-03f, + -2.10815213e-02f, 6.76448415e-02f, 3.71583781e-02f, -1.85929223e-02f, + 6.88493442e-03f, -9.91849229e-03f, 2.58085660e-03f, -7.30168242e-03f, + 7.94366479e-04f, -5.99847523e-03f, -2.11509525e-04f, -5.20112794e-03f, + -8.68280993e-04f, -4.65665098e-03f, -1.33464952e-03f, -4.26017586e-03f, + -1.68284737e-03f, -3.96022564e-03f, -1.95060670e-03f, -3.72846951e-03f, + -2.16052294e-03f, -3.54464300e-03f, -2.33071850e-03f, -3.39520609e-03f, + -2.47016885e-03f, -3.27350251e-03f, -2.58439134e-03f, -3.17490558e-03f, + -2.67731290e-03f, -3.09604211e-03f, -2.75186601e-03f, -3.03433100e-03f, + -2.81034912e-03f, -2.98770212e-03f, -2.85465063e-03f, -2.95441398e-03f, + -2.88733328e-03f, -2.92908272e-03f, -2.91590944e-03f, -2.90657719e-03f, + -2.94023556e-03f, -2.88995304e-03f, -2.95954292e-03f, -2.87483697e-03f, + -2.98060349e-03f, -2.85681316e-03f, -3.00472634e-03f, -2.83553984e-03f, + -3.03231174e-03f, -2.81054107e-03f, -3.06392900e-03f, -2.78113393e-03f, + -3.10040398e-03f, -2.74631325e-03f, -3.14296712e-03f, -2.70456184e-03f, + -3.19350063e-03f, -2.65352903e-03f, -3.25497111e-03f, -2.58943833e-03f, + -3.33223102e-03f, -2.50594350e-03f, -3.43477962e-03f, -2.38734373e-03f, + -3.58486993e-03f, -2.20717695e-03f, -3.81500167e-03f, -1.91984180e-03f, + -4.19372589e-03f, -1.41745550e-03f, -4.90055238e-03f, -3.79417596e-04f, + -6.56556971e-03f, 2.61899714e-03f, -1.32769933e-02f, 2.85610148e-02f, + 7.46906407e-02f, -3.33171334e-02f, 3.80133348e-02f, 6.43659491e-02f, + -1.50414188e-02f, 2.87741939e-03f, -6.72004154e-03f, -1.38112587e-04f, + -5.34349791e-03f, -8.14136403e-04f, -5.04048512e-03f, -8.99122239e-04f, + -5.11267918e-03f, -7.12376948e-04f, -5.40898593e-03f, -3.16012604e-04f, + -5.92500577e-03f, 3.34100475e-04f, -6.75875570e-03f, 1.41122566e-03f, + -8.20733326e-03f, 3.44419753e-03f, -1.12946908e-02f, 8.72287803e-03f, + -2.27174460e-02f, 5.98644682e-02f, 4.94452950e-02f, -2.12988595e-02f, + 8.00572707e-03f, -1.07828165e-02f, 2.98934561e-03f, -7.80726437e-03f, + 9.97322833e-04f, -6.37643772e-03f, -9.20803975e-05f, -5.52160428e-03f, + -7.89943301e-04f, -4.94694515e-03f, -1.27712512e-03f, -4.53730873e-03f, + -1.63278307e-03f, -4.23332651e-03f, -1.90052289e-03f, -4.00702708e-03f, + -2.09633594e-03f, -3.84832263e-03f, -2.22899213e-03f, -3.74877111e-03f, + -2.30546233e-03f, -3.70325249e-03f, -2.32936917e-03f, -3.70939818e-03f, + -2.30198805e-03f, -3.76692741e-03f, -2.22264845e-03f, -3.87747354e-03f, + -2.08869067e-03f, -4.04484179e-03f, -1.89497711e-03f, -4.27577347e-03f, + -1.63277619e-03f, -4.58150159e-03f, -1.28763642e-03f, -4.98082573e-03f, + -8.34831313e-04f, -5.50656481e-03f, -2.31176124e-04f, -6.21543584e-03f, + 6.03281178e-04f, -7.22938112e-03f, 1.85908101e-03f, -8.85469230e-03f, + 4.06242293e-03f, -1.20938832e-02f, 9.45886335e-03f, -2.37662061e-02f, + 7.65397790e-02f, 2.56984934e-02f, -1.02141916e-02f, -4.74639828e-03f, + 1.47539032e-02f, 7.17426906e-02f, -2.10219312e-02f, 7.95901913e-03f, + -1.11277971e-02f, 3.33880302e-03f, -8.32591356e-03f, 1.40918220e-03f, + -6.90451324e-03f, 3.06277355e-04f, -6.02889768e-03f, -4.10585778e-04f, + -5.44108664e-03f, -9.03542992e-04f, -5.03382322e-03f, -1.24636032e-03f, + -4.75486112e-03f, -1.47676600e-03f, -4.57663315e-03f, -1.61495314e-03f, + -4.48455129e-03f, -1.67116279e-03f, -4.47185717e-03f, -1.64912819e-03f, + -4.53763270e-03f, -1.54697425e-03f, -4.68672273e-03f, -1.35644027e-03f, + -4.93143304e-03f, -1.06030438e-03f, -5.29558422e-03f, -6.25547327e-04f, + -5.82502201e-03f, 1.23081382e-05f, -6.61252979e-03f, 9.90863296e-04f, + -7.87053543e-03f, 2.65539646e-03f, -1.02033959e-02f, 6.19249994e-03f, + -1.64193298e-02f, 2.17194103e-02f, 5.91911830e-02f, 5.70816570e-02f, + 3.15622141e-02f, -1.90097999e-02f, 7.37173252e-03f, -1.08760171e-02f, + 3.05031079e-03f, -8.14353341e-03f, 1.13850784e-03f, -6.72435529e-03f, + 2.99761108e-05f, -5.83588430e-03f, -7.07635968e-04f, -5.21816799e-03f, + -1.24056155e-03f, -4.75974813e-03f, -1.64639760e-03f, -4.40488850e-03f, + -1.96618804e-03f, -4.12282129e-03f, -2.22350871e-03f, -3.89503215e-03f, + -2.43305999e-03f, -3.70974727e-03f, -2.60441315e-03f, -3.55907847e-03f, + -2.74415565e-03f, -3.43745976e-03f, -2.85704314e-03f, -3.34077610e-03f, + -2.94668073e-03f, -3.26660497e-03f, -3.01276576e-03f, -3.21732873e-03f, + -3.05389941e-03f, -3.19333231e-03f, -3.06739457e-03f, -3.19961799e-03f, + -3.04956387e-03f, -3.23745119e-03f, -3.00039045e-03f, -3.30553275e-03f, + -2.92261489e-03f, -3.40030390e-03f, -2.81921761e-03f, -3.52145444e-03f, + -2.68770444e-03f, -3.67264433e-03f, -2.52397758e-03f, -3.85851883e-03f, + -2.32270483e-03f, -4.08527467e-03f, -2.07659005e-03f, -4.36161006e-03f, + -1.77513944e-03f, -4.70032417e-03f, -1.40252991e-03f, -5.12136893e-03f, + -9.33171942e-04f, -5.65801267e-03f, -3.23001167e-04f, -6.37002418e-03f, + 5.11308879e-04f, -7.37749442e-03f, 1.75018821e-03f, -8.96645860e-03f, + 3.88012166e-03f, -1.20547153e-02f, 8.95028736e-03f, -2.29205574e-02f, + 7.80744891e-02f, 1.68398573e-02f, -5.08557003e-03f, -1.16919422e-02f, + 3.80520560e-02f, 4.97887145e-02f, -2.24768668e-02f, 9.16938034e-03f, + -1.23779634e-02f, 4.21015989e-03f, -9.36224053e-03f, 2.16363488e-03f, + -7.89141992e-03f, 1.06104018e-03f, -7.05449107e-03f, 4.15283333e-04f, + -6.56615013e-03f, 4.89404058e-05f, -6.31191792e-03f, -1.13046894e-04f, + -6.24321926e-03f, -9.99447751e-05f, -6.34612996e-03f, 8.78345583e-05f, + -6.63374180e-03f, 4.78030020e-04f, -7.15112349e-03f, 1.14090322e-03f, + -8.00936800e-03f, 2.25336975e-03f, -9.49697220e-03f, 4.31378405e-03f, + -1.25587720e-02f, 9.39397180e-03f, -2.30938033e-02f, 5.19166152e-02f, + 4.84935657e-02f, -1.79314378e-02f, 3.78479829e-03f, -6.39704317e-03f, + -2.73326619e-03f, -1.04316825e-03f, -8.86787065e-03f, 9.83552005e-03f, + 5.70253637e-02f, 5.51852735e-02f, 3.15194675e-02f, -1.96590057e-02f, + 8.08292805e-03f, -1.19958996e-02f, 4.05486355e-03f, -9.47909310e-03f, + 2.33219294e-03f, -8.25124154e-03f, 1.43790578e-03f, -7.61707599e-03f, + 1.01417662e-03f, -7.39695501e-03f, 9.98949251e-04f, -7.63362433e-03f, + 1.56804796e-03f, -8.73444583e-03f, 3.65119813e-03f, -1.32087502e-02f, + 1.82177992e-02f, 6.78421522e-02f, -1.55424609e-02f, 3.30562644e-03f, + -7.62035931e-03f, 4.40420968e-05f, -5.84622760e-03f, -1.06860273e-03f, + -5.09229616e-03f, -1.61516974e-03f, -4.68719042e-03f, -1.92613910e-03f, + -4.46123092e-03f, -2.07019971e-03f, -4.45423785e-03f, -1.68317107e-03f, + 7.37327407e-02f, -3.50527243e-03f, -3.29283842e-03f, -3.14603114e-03f, + -3.34572296e-03f, -3.18448824e-03f, -3.27508088e-03f, -3.27612525e-03f, + -3.17824121e-03f, -3.38282408e-03f, -3.07137004e-03f, -3.49714786e-03f, + -2.95586495e-03f, -3.62339048e-03f, -2.82615811e-03f, -3.76449391e-03f, + -2.68019249e-03f, -3.92572750e-03f, -2.50797947e-03f, -4.12149598e-03f, + -2.28990863e-03f, -4.37894201e-03f, -1.98721471e-03f, -4.75557905e-03f, + -1.51062135e-03f, -5.39884960e-03f, -5.96814883e-04f, -6.83004956e-03f, + 1.97952859e-03f, -1.31047926e-02f, 6.53470867e-02f, 1.09603562e-02f, + -9.78544963e-03f, 9.80162813e-04f, -6.46981571e-03f, -7.02444949e-04f, + -5.46600278e-03f, -1.35877547e-03f, -5.02513734e-03f, -1.66116639e-03f, + -4.83223493e-03f, -1.77124792e-03f, -4.80553979e-03f, -1.71836539e-03f, + -4.96505305e-03f, -1.40937295e-03f, -5.56479181e-03f, -9.74031864e-05f, + -9.69307478e-03f, 5.29410232e-02f, 5.02878712e-02f, 5.24293447e-02f, + -2.99112852e-02f, 7.05235662e-02f, 1.75273204e-02f, -1.02492681e-02f, + 2.58905311e-04f, -5.35622010e-03f, -2.11283432e-03f, -3.90021132e-03f, + -3.16109223e-03f, -3.05988800e-03f, -3.90565221e-03f, -2.35590983e-03f, + -4.62238756e-03f, -1.59255764e-03f, -5.48665961e-03f, -5.71752900e-04f, + -6.77021625e-03f, 1.14115649e-03f, -9.27239062e-03f, 5.28277396e-03f, + -1.79343789e-02f, 4.06663515e-02f, 4.30988527e-02f, -1.85963698e-02f, + 5.80900648e-03f, -9.79088461e-03f, 1.65527479e-03f, -7.32950330e-03f, + 3.64906568e-06f, -6.13970628e-03f, -9.04684105e-04f, -5.42606066e-03f, + -1.48705380e-03f, -4.94725698e-03f, -1.89310777e-03f, -4.60545242e-03f, + -2.18952430e-03f, -4.35366923e-03f, -2.41084383e-03f, -4.16556339e-03f, + -2.57547069e-03f, -4.02997756e-03f, -2.69246625e-03f, -3.93592967e-03f, + -2.77298319e-03f, -3.87551888e-03f, -2.82214888e-03f, -3.84307717e-03f, + -2.84644466e-03f, -3.83421634e-03f, -2.84724650e-03f, -3.84929029e-03f, + -2.82298525e-03f, -3.89132079e-03f, -2.76893812e-03f, -3.96734902e-03f, + -2.67468004e-03f, -4.09264565e-03f, -2.51775946e-03f, -4.30083649e-03f, + -2.24634019e-03f, -4.67523050e-03f, -1.71939177e-03f, -5.47468428e-03f, + -3.94163805e-04f, -8.10076472e-03f, 7.40307169e-03f, 6.95185444e-02f, + -1.25481622e-02f, 1.90720813e-03f, -7.26744822e-03f, -1.03791497e-04f, + -6.28260953e-03f, -6.15233370e-04f, -6.05464624e-03f, -6.50915194e-04f, + -6.18372569e-03f, -3.71588800e-04f, -6.63547849e-03f, 2.85610851e-04f, + -7.58681978e-03f, 1.68408468e-03f, -9.78156382e-03f, 5.54336541e-03f, + -1.85077654e-02f, 5.44175795e-02f, 2.52184195e-02f, -1.41661829e-02f, + 2.93033322e-03f, -7.59342512e-03f, -4.18060786e-04f, -5.47650038e-03f, + -1.94710700e-03f, -4.27202166e-03f, -2.97158318e-03f, -3.35525398e-03f, + -3.84007623e-03f, -2.50327068e-03f, -4.71686390e-03f, -1.57390382e-03f, + -5.74832638e-03f, -3.89385185e-04f, -7.18361906e-03f, 1.44769308e-03f, + -9.74403064e-03f, 5.46834868e-03f, -1.76044340e-02f, 3.27333060e-02f, + 5.25918396e-02f, -1.75181383e-02f, 3.78842436e-03f, -7.51138494e-03f, + -1.20178457e-03f, -4.11958482e-03f, -4.04581333e-03f, -1.27093657e-03f, + -7.47563318e-03f, 3.82319314e-03f, -1.78999586e-02f, 5.83244419e-02f, + 3.20857024e-02f, -1.81111433e-02f, 6.08520891e-03f, -1.04884155e-02f, + 2.25728760e-03f, -8.14842381e-03f, 6.64598042e-04f, -7.00020006e-03f, + -1.99690839e-04f, -6.34356513e-03f, -7.04025494e-04f, -5.97072624e-03f, + -9.67023672e-04f, -5.82109639e-03f, -1.00231490e-03f, -5.93243411e-03f, + -6.94091198e-04f, -6.57878945e-03f, 6.57185554e-04f, -1.02291721e-02f, + 6.94466511e-02f, 2.53849978e-03f, -5.72691802e-03f, -2.29106272e-03f, + -3.96866348e-03f, -3.27430678e-03f, -3.29382200e-03f, -3.81412240e-03f, + -2.82050029e-03f, -4.26938174e-03f, -2.36167660e-03f, -4.76386498e-03f, + -1.81247199e-03f, -5.40744343e-03f, -1.03502628e-03f, -6.39992222e-03f, + 2.96151130e-04f, -8.33669959e-03f, 3.44269327e-03f, -1.46060857e-02f, + 2.43658876e-02f, 5.77601047e-02f, -1.80443452e-02f, 4.81891719e-03f, + -9.17237542e-03f, 9.00198392e-04f, -6.92056845e-03f, -5.83780136e-04f, + -5.86376037e-03f, -1.38506223e-03f, -5.23669331e-03f, -1.89732072e-03f, + -4.81244572e-03f, -2.26266680e-03f, -4.49823299e-03f, -2.54323835e-03f, + -4.25056885e-03f, -2.77079509e-03f, -4.04558516e-03f, -2.96370931e-03f, + -3.86886005e-03f, -3.13381480e-03f, -3.70987881e-03f, -3.29053531e-03f, + -3.56090643e-03f, -3.44003377e-03f, -3.41658704e-03f, -3.58730914e-03f, + -3.27210334e-03f, -3.73715667e-03f, -3.12252613e-03f, -3.89481119e-03f, + -2.96212303e-03f, -4.06672723e-03f, -2.78342341e-03f, -4.26175296e-03f, + -2.57571401e-03f, -4.49322744e-03f, -2.32197401e-03f, -4.78329759e-03f, + -1.99269377e-03f, -5.17314822e-03f, -1.52778274e-03f, -5.75086831e-03f, + -7.95941037e-04f, -6.72605181e-03f, 5.69171683e-04f, -8.81179204e-03f, + 4.19813968e-03f, -1.70405573e-02f, 5.24551722e-02f, 2.30194325e-02f, + -1.41281417e-02f, 3.12544716e-03f, -8.25222635e-03f, 2.02321415e-04f, + -6.48091978e-03f, -1.00121201e-03f, -5.60778236e-03f, -1.67242349e-03f, + -5.07779171e-03f, -2.10855137e-03f, -4.71655023e-03f, -2.41892151e-03f, + -4.45195874e-03f, -2.65303378e-03f, -4.24891181e-03f, -2.83645278e-03f, + -4.08837139e-03f, -2.98368869e-03f, -3.95929569e-03f, -3.10332978e-03f, + -3.85327112e-03f, -3.20448854e-03f, -3.76265943e-03f, -3.29227213e-03f, + -3.68364629e-03f, -3.37001879e-03f, -3.61326427e-03f, -3.44040797e-03f, + -3.54905407e-03f, -3.50573424e-03f, -3.48884020e-03f, -3.56809492e-03f, + -3.43056433e-03f, -3.62953972e-03f, -3.37215109e-03f, -3.69221135e-03f, + -3.31208542e-03f, -3.75550295e-03f, -3.25249409e-03f, -3.81937361e-03f, + -3.18908452e-03f, -3.89036545e-03f, -3.11637380e-03f, -3.97253832e-03f, + -3.03013185e-03f, -4.07133203e-03f, -2.92311995e-03f, -4.19639353e-03f, + -2.78244838e-03f, -4.36517033e-03f, -2.58418040e-03f, -4.61088921e-03f, + -2.28200449e-03f, -4.99671435e-03f, -1.80074229e-03f, -5.53695022e-03f, + -1.91647900e-03f, 4.38381936e-02f, 5.63469431e-02f, 2.17611115e-02f, + -1.32342125e-02f, 2.64233249e-03f, -8.26833180e-03f, 4.51043928e-04f, + -7.13506109e-03f, -1.49511099e-04f, -6.87079323e-03f, -1.70280884e-04f, + -7.07104821e-03f, 2.54532888e-04f, -7.77888692e-03f, 1.35656798e-03f, + -9.53773855e-03f, 4.39173059e-03f, -1.58661166e-02f, 2.70120348e-02f, + 4.73510228e-02f, -1.65358729e-02f, 3.56125809e-03f, -8.25745255e-03f, + -1.86013788e-04f, -6.05783224e-03f, -1.67676528e-03f, -4.95290759e-03f, + -2.56137313e-03f, -4.20741751e-03f, -3.22861962e-03f, -3.58721067e-03f, + -3.83837231e-03f, -2.96723251e-03f, -4.50453019e-03f, -2.22173769e-03f, + -5.39693575e-03f, -1.08458612e-03f, -6.98907710e-03f, 1.42842359e-03f, + -1.18759659e-02f, 1.70140384e-02f, 5.40908538e-02f, -1.61596529e-02f, + 3.67331738e-03f, -8.73978878e-03f, 4.98839579e-04f, -6.97612344e-03f, + -6.11371180e-04f, -6.23724669e-03f, -1.12016853e-03f, -5.89414578e-03f, + -1.34407471e-03f, -5.77269419e-03f, -1.38254764e-03f, -5.81771435e-03f, + -1.26064980e-03f, -6.02859642e-03f, -9.54123986e-04f, -6.46233193e-03f, + -3.54572149e-04f, -7.32007295e-03f, 9.47323141e-04f, -9.62008288e-03f, + 6.89035840e-03f, 5.62390636e-02f, -6.29922939e-03f, -4.51211684e-03f, + -6.02890332e-04f, -8.75704669e-03f, 5.02516314e-03f, -2.08295274e-02f, + 1.21893684e-01f, 2.26421046e-02f, -1.56246296e-02f, 4.19158929e-03f, + -9.30159877e-03f, 8.45156430e-04f, -7.17785973e-03f, -6.58570332e-04f, + -6.03910821e-03f, -1.57249245e-03f, -5.28078039e-03f, -2.22749083e-03f, + -4.70483632e-03f, -2.75280694e-03f, -4.21986885e-03f, -3.21738626e-03f, + -3.76954152e-03f, -3.67269154e-03f, -3.30097361e-03f, -4.17971443e-03f, + -2.73379393e-03f, -4.85911351e-03f, -1.86688904e-03f, -6.08475850e-03f, + 1.07199602e-04f, -1.00791082e-02f, 1.38698190e-02f, 5.41849321e-02f, + 4.75326606e-02f, -1.57564362e-03f, -5.87602503e-03f, -1.64020591e-03f, + -5.33961561e-03f, -2.09840822e-03f, -4.99104012e-03f, -2.36272550e-03f, + -4.79893381e-03f, -2.50226654e-03f, -4.70901153e-03f, -2.55491037e-03f, + -4.69619134e-03f, -2.53689877e-03f, -4.74944426e-03f, -2.45394240e-03f, + -4.87171418e-03f, -2.29276220e-03f, -5.08747395e-03f, -2.01346750e-03f, + -5.46223670e-03f, -1.50334846e-03f, -6.20953825e-03f, -2.75272442e-04f, + -8.94752870e-03f, 6.54599713e-02f, -2.52480297e-03f, -1.74585102e-03f, + -8.25034526e-03f, 8.46271591e-03f, 5.67005679e-02f, -1.32846239e-02f, + 1.79055548e-03f, -7.48173317e-03f, -6.41585010e-04f, -6.12620468e-03f, + -1.50820466e-03f, -5.53426549e-03f, -1.93438232e-03f, -5.22614136e-03f, + -2.16111286e-03f, -5.06791763e-03f, -2.26924828e-03f, -5.00834581e-03f, + -2.29113066e-03f, -5.02785044e-03f, -2.23702396e-03f, -5.12368052e-03f, + -2.10277276e-03f, -5.30737181e-03f, -1.86826484e-03f, -5.61018980e-03f, + -1.48616436e-03f, -6.10394744e-03f, -8.45038471e-04f, -6.96886096e-03f, + 3.65026849e-04f, -8.78768074e-03f, 3.40034800e-03f, -1.50001032e-02f, + 2.54329830e-02f, 4.51928717e-02f, -1.61122513e-02f, 6.60698053e-02f, + -9.53173064e-03f, 6.39102633e-04f, -7.06908326e-03f, -8.73451778e-04f, + -6.01861065e-03f, -1.65944833e-03f, -5.40761314e-03f, -2.15497228e-03f, + -5.00070460e-03f, -2.50094313e-03f, -4.70705085e-03f, -2.75862753e-03f, + -4.48392897e-03f, -2.95874487e-03f, -4.30866605e-03f, -3.11838446e-03f, + -4.16813158e-03f, -3.24782549e-03f, -4.05424050e-03f, -3.35349769e-03f, + -3.96171088e-03f, -3.43980351e-03f, -3.88686282e-03f, -3.50985295e-03f, + -3.82703658e-03f, -3.56595099e-03f, -3.78021094e-03f, -3.60989092e-03f, + -3.74477557e-03f, -3.64319902e-03f, -3.71912643e-03f, -3.66753207e-03f, + -3.70178568e-03f, -3.68412872e-03f, -3.69162431e-03f, -3.69407748e-03f, + -3.68758722e-03f, -3.69909982e-03f, -3.68596729e-03f, -3.70404866e-03f, + -3.68355202e-03f, -3.70992196e-03f, -3.68012584e-03f, -3.71686610e-03f, + -3.67555506e-03f, -3.72503096e-03f, -3.66966909e-03f, -3.73461301e-03f, + -3.66223729e-03f, -3.74588350e-03f, -3.65294105e-03f, -3.75923094e-03f, + -3.64129906e-03f, -3.77524366e-03f, -3.62652378e-03f, -3.79498050e-03f, + -3.60736673e-03f, -3.82069531e-03f, -3.57873416e-03f, -3.86001409e-03f, + -3.53297993e-03f, -3.92038226e-03f, -3.46073176e-03f, -4.01520669e-03f, + -3.34005922e-03f, -4.18647618e-03f, -3.08205220e-03f, -4.65353507e-03f, + -1.87220760e-03f, 5.69603813e-02f, -5.06243969e-03f, -3.17045125e-03f, + -3.95830785e-03f, -3.66535361e-03f, -3.63464992e-03f, -3.92663920e-03f, + -3.40341129e-03f, -4.15167007e-03f, -3.18018979e-03f, -4.38565277e-03f, + -2.93604666e-03f, -4.65037098e-03f, -2.65192281e-03f, -4.96479004e-03f, + -2.30694190e-03f, -5.35373067e-03f, -1.86974674e-03f, -5.85864100e-03f, + -1.28352750e-03f, -6.56084666e-03f, -4.25895505e-04f, -7.65500122e-03f, + 1.03549070e-03f, -9.76675037e-03f, 4.46318038e-03f, -1.67207241e-02f, + 3.06359750e-02f, 3.86031742e-02f, -1.59063166e-02f, 3.60615486e-03f, + -1.13096433e-02f, 5.23858100e-02f, 1.14284203e-02f, -1.90886846e-02f, + 3.09170089e-02f, 3.19549450e-02f, -4.81593107e-03f, 6.96989004e-02f, + -1.72068449e-02f, 4.65519127e-03f, -9.96335444e-03f, 1.18802104e-03f, + -7.81559108e-03f, -3.15553093e-04f, -6.69005826e-03f, -1.20334867e-03f, + -5.97045285e-03f, -1.80611285e-03f, -5.46067630e-03f, -2.24850166e-03f, + -5.07739315e-03f, -2.58844950e-03f, -4.77894706e-03f, -2.85669583e-03f, + -4.54220206e-03f, -3.07160404e-03f, -4.35076380e-03f, -3.24804311e-03f, + -4.19327893e-03f, -3.39337505e-03f, -4.06510516e-03f, -3.51008177e-03f, + -3.96615953e-03f, -3.59512382e-03f, -3.90405556e-03f, -3.63373966e-03f, + -3.90546275e-03f, -3.57860668e-03f, -4.05710570e-03f, -3.25639362e-03f, + -4.74471749e-03f, -1.66472071e-03f, -9.55346391e-03f, 5.08398844e-02f, + 1.79748398e-02f, -2.21838046e-02f, 3.34902840e-02f, 4.06703675e-02f, + -1.61252859e-02f, 4.04403936e-03f, -1.18006436e-02f, 5.67553558e-02f, + 1.32746702e-03f, -6.27631949e-03f, -1.77041956e-03f, -5.75806902e-03f, + -1.63115461e-03f, -6.21767190e-03f, -9.30466480e-04f, -7.19053520e-03f, + 4.18151428e-04f, -9.17344313e-03f, 3.65702253e-03f, -1.57183077e-02f, + 2.74652529e-02f, 3.97806177e-02f, -1.56261350e-02f, 2.55790935e-03f, + -7.74809990e-03f, -1.22780158e-03f, -5.36634033e-03f, -2.98541710e-03f, + -3.91741112e-03f, -4.30316439e-03f, -2.61370142e-03f, -5.72728996e-03f, + -8.53008014e-04f, -8.55993013e-03f, 5.87012213e-02f, -6.25964023e-03f, + 2.24754502e-03f, -1.53810974e-02f, 3.25808173e-02f, 3.46847524e-02f, + -1.62493031e-02f, 3.33084674e-03f, -8.49911367e-03f, -5.86277554e-04f, + -5.92363896e-03f, -2.59914833e-03f, -4.10741823e-03f, -4.51361962e-03f, + -1.68757437e-03f, -8.49641125e-03f, 9.40512535e-03f, 4.81454867e-02f, + -1.41440005e-02f, 2.21480279e-03f, -8.10386815e-03f, -4.73654290e-04f, + -6.50955492e-03f, -1.56490092e-03f, -5.70233118e-03f, -2.19905915e-03f, + -5.18999698e-03f, -2.62872092e-03f, -4.82654732e-03f, -2.94498004e-03f, + -4.55465563e-03f, -3.18248437e-03f, -4.35538535e-03f, -3.34680454e-03f, + -4.23842931e-03f, -3.40598574e-03f, -4.27505677e-03f, -3.20886041e-03f, + -4.80659842e-03f, -1.85333468e-03f, -9.12458155e-03f, 5.04399190e-02f, + 1.59114925e-02f, -2.11665077e-02f, 3.51319873e-02f, 2.78940354e-02f, + -1.31887609e-02f, 1.25873316e-03f, -7.14978129e-03f, -1.45099329e-03f, + -5.60719297e-03f, -2.45933816e-03f, -4.88932749e-03f, -3.01013075e-03f, + -4.44772081e-03f, -3.38467430e-03f, -4.12238721e-03f, -3.68190633e-03f, + -3.84672213e-03f, -3.94981697e-03f, -3.58530606e-03f, -4.21566506e-03f, + -3.31483996e-03f, -4.50161953e-03f, -3.01228316e-03f, -4.83366084e-03f, + -2.64613910e-03f, -5.25245067e-03f, -2.16095313e-03f, -5.83762126e-03f, + -1.43609208e-03f, -6.78342157e-03f, -1.33970918e-04f, -8.74085018e-03f, + 3.21537211e-03f, -1.61365579e-02f, 4.12978584e-02f, 2.36235284e-02f, + -1.43193432e-02f, 2.58408583e-03f, -8.44929365e-03f, -2.92972421e-04f, + -6.71716620e-03f, -1.46347361e-03f, -5.87162318e-03f, -2.11023664e-03f, + -5.36075332e-03f, -2.53004893e-03f, -5.01258610e-03f, -2.82838301e-03f, + -4.75771274e-03f, -3.05312728e-03f, -4.56223623e-03f, -3.22893055e-03f, + -4.40782067e-03f, -3.36973645e-03f, -4.28365159e-03f, -3.48404524e-03f, + -4.18296342e-03f, -3.57732604e-03f, -4.10126763e-03f, -3.65331758e-03f, + -4.03540253e-03f, -3.71473899e-03f, -3.98298483e-03f, -3.76372714e-03f, + -3.94204710e-03f, -3.80214707e-03f, -3.91075336e-03f, -3.83185551e-03f, + -3.88713115e-03f, -3.85516916e-03f, -3.86833478e-03f, -3.87565328e-03f, + -3.84958809e-03f, -3.90014506e-03f, -3.82118131e-03f, -3.94328628e-03f, + -3.75632546e-03f, -4.05772545e-03f, -3.54901594e-03f, -4.48485162e-03f, + -2.52606890e-03f, -7.92176921e-03f, 4.16717706e-02f, 5.80069974e-02f, + 8.74320221e-03f, -7.43410774e-03f, -2.16827543e-03f, -4.86064032e-03f, + -3.27467635e-03f, -4.24502773e-03f, -3.68272627e-03f, -3.94195691e-03f, + -3.93536082e-03f, -3.71909611e-03f, -4.14838296e-03f, -3.51127509e-03f, + -4.36279155e-03f, -3.28986620e-03f, -4.60088295e-03f, -3.03540809e-03f, + -4.88162806e-03f, -2.72758932e-03f, -5.22863133e-03f, -2.33703721e-03f, + -5.68033806e-03f, -1.81098661e-03f, -6.31262628e-03f, -1.03503022e-03f, + -7.30857464e-03f, 3.07132428e-04f, -9.27414250e-03f, 3.57306760e-03f, + -1.62452962e-02f, 3.67859965e-02f, 2.24286218e-02f, -1.29765863e-02f, + 1.42170675e-03f, -8.38130187e-03f, 5.86955213e-03f, 7.10890519e-02f, + 9.02876322e-02f, -1.33388981e-02f, -2.25512803e-04f, -5.33257204e-03f, + -3.92780593e-03f, -2.54872071e-03f, -6.82187599e-03f, 1.42678091e-03f, + -1.44925139e-02f, 3.49573913e-02f, 2.85598582e-02f, -1.62587747e-02f, + 3.95497649e-03f, -9.75105820e-03f, 7.83485888e-04f, -7.84567994e-03f, + -4.94438326e-04f, -6.93784817e-03f, -1.16535787e-03f, -6.43882593e-03f, + -1.53789495e-03f, -6.17344396e-03f, -1.71480739e-03f, -6.08328247e-03f, + -1.72323847e-03f, -6.16789653e-03f, -1.53551786e-03f, -6.49207979e-03f, + -1.02359135e-03f, -7.31229564e-03f, 3.69293742e-04f, -1.00837169e-02f, + 8.73257157e-03f, 4.80917851e-02f, -1.09782519e-02f, -6.28184793e-04f, + -5.75047079e-03f, -2.91108122e-03f, -4.36170581e-03f, -3.93614284e-03f, + -3.49579189e-03f, -4.75911836e-03f, -2.63851158e-03f, -5.74154632e-03f, + -1.41425395e-03f, -7.43104232e-03f, 1.22861132e-03f, -1.25289521e-02f, + 1.76637754e-02f, 3.78290058e-02f, -6.88378312e-03f, 6.18445224e-02f, + 3.97180506e-02f, -3.23451670e-03f, -6.23530241e-03f, 5.07266833e-02f, + -6.21505622e-03f, -1.62964149e-03f, -6.26270795e-03f, -1.51084397e-03f, + -6.55360960e-03f, -9.42972964e-04f, -7.62288124e-03f, 1.18535886e-03f, + -1.27878443e-02f, 2.50572226e-02f, 3.48781141e-02f, -2.29223448e-02f, + 2.42284340e-02f, 3.86120603e-02f, -1.31347781e-02f, 1.11122548e-03f, + -7.58353375e-03f, -9.32675002e-04f, -6.60266924e-03f, -1.56694885e-03f, + -5.82476173e-03f, -3.80459942e-03f, 4.16758097e-02f, 8.21292744e-03f, + -1.46968643e-02f, 8.64821328e-03f, -2.23975453e-02f, 5.31186710e-02f, + 7.18552417e-03f, 2.78504666e-02f, 3.05979344e-02f, -1.83700414e-02f, + 5.41603856e-03f, -1.09090681e-02f, 1.57885097e-03f, -8.53168826e-03f, + -4.90077527e-05f, -7.35046170e-03f, -9.45244485e-04f, -6.65515588e-03f, + -1.49806199e-03f, -6.21489694e-03f, -1.85321152e-03f, -5.93387492e-03f, + -2.07520474e-03f, -5.76842244e-03f, -2.19297777e-03f, -5.70141256e-03f, + -2.21240658e-03f, -5.73715956e-03f, -2.12146418e-03f, -5.89535486e-03f, + -1.88708437e-03f, -6.23383146e-03f, -1.41074691e-03f, -6.91460831e-03f, + -4.19000032e-04f, -8.44709532e-03f, 2.18880197e-03f, -1.38582040e-02f, + 2.16272682e-02f, 3.90618080e-02f, -1.55254202e-02f, 2.66044631e-03f, + -8.57682623e-03f, -4.65436210e-04f, -6.77163420e-03f, -1.64903985e-03f, + -5.94711356e-03f, -2.23456324e-03f, -5.56223857e-03f, -2.41082241e-03f, + -5.69156298e-03f, -1.67263224e-03f, -8.40012572e-03f, 4.87206979e-02f, + 3.48978120e-03f, -8.46294138e-03f, -1.42618912e-04f, -7.73632536e-03f, + -1.68070028e-06f, -8.40031650e-03f, 1.16910338e-03f, -1.02901101e-02f, + 4.40612668e-03f, -1.71363717e-02f, 3.46882311e-02f, 2.16690087e-02f, + -1.07303054e-02f, -2.17527128e-03f, -2.38164005e-03f, -1.02439662e-02f, + 1.85637999e-02f, 3.71220604e-02f, -1.66457569e-02f, 3.79369254e-03f, + -9.63551701e-03f, 4.26388283e-04f, -7.56798310e-03f, -1.01623543e-03f, + -6.48412475e-03f, -1.87778305e-03f, -5.77652150e-03f, -2.47770836e-03f, + -5.26481747e-03f, -2.91707369e-03f, -4.90244303e-03f, -3.18936723e-03f, + -4.77879488e-03f, -3.00195235e-03f, -6.02860658e-03f, 4.55736833e-02f, + 1.65826240e-04f, -6.89618112e-03f, -1.27072983e-03f, -6.83374801e-03f, + -8.94351632e-04f, -7.48719922e-03f, 1.74576393e-05f, -8.72307224e-03f, + 1.72217721e-03f, -1.12230739e-02f, 5.80726033e-03f, -1.96277770e-02f, + 4.76732128e-02f, 6.06356607e-03f, 3.04903573e-02f, 2.55373471e-02f, + -1.72041462e-02f, 4.73692102e-03f, -1.05546087e-02f, 1.21834896e-03f, + -8.32833962e-03f, -3.36460064e-04f, -7.17638863e-03f, -1.23061501e-03f, + -6.46414617e-03f, -1.81470501e-03f, -5.98005106e-03f, -2.22491580e-03f, + -5.63290341e-03f, -2.52398277e-03f, -5.37841721e-03f, -2.74374319e-03f, + -5.19371154e-03f, -2.90018097e-03f, -5.06829050e-03f, -2.99931776e-03f, + -5.00033457e-03f, -3.03832451e-03f, -4.99826527e-03f, -3.00139329e-03f, + -5.08874391e-03f, -2.84463435e-03f, -5.34459440e-03f, -2.44223058e-03f, + -6.00090070e-03f, -1.29728527e-03f, -8.35280866e-03f, 6.02530198e-03f, + 4.38304823e-02f, -1.18123378e-02f, 5.43851420e-04f, -7.45204524e-03f, + -1.11757245e-03f, -6.68034812e-03f, -1.43356440e-03f, -6.70769410e-03f, + -1.02367491e-03f, -7.80904715e-03f, 2.40047135e-03f, 4.36654644e-02f, + -6.55134780e-03f, -3.71478619e-03f, -3.19209958e-03f, -6.19064736e-03f, + 1.49934308e-03f, 9.88428585e-02f, -1.00078137e-02f, -7.18794368e-04f, + -6.44451847e-03f, -2.00359481e-03f, -5.98417850e-03f, -1.55312426e-03f, + 4.46927710e-02f, -4.58679300e-03f, -4.02127659e-03f, -3.90562926e-03f, + -4.20784901e-03f, -3.85114331e-03f, -4.21540277e-03f, -3.86708916e-03f, + -4.19143092e-03f, -3.89794047e-03f, -4.16036338e-03f, -3.93213607e-03f, + -4.12766390e-03f, -3.96754241e-03f, -4.09311525e-03f, -4.00642609e-03f, + -4.05245080e-03f, -4.05555434e-03f, -3.99335432e-03f, -4.14041973e-03f, + -3.86053005e-03f, -4.40066779e-03f, -3.12257366e-03f, 4.87754685e-02f, + -5.31273627e-03f, -3.24630062e-03f, -4.70892617e-03f, -3.42647471e-03f, + -4.66804605e-03f, -3.39261001e-03f, -4.76875702e-03f, -3.21811199e-03f, + -5.05836795e-03f, -2.72436617e-03f, -6.03390577e-03f, 4.42632996e-05f, + 4.45849006e-02f, -7.21427783e-03f, -2.86785429e-03f, -2.95446473e-03f, + 4.81926090e-02f, 3.92024415e-02f, -5.83858012e-03f, -3.73703227e-03f, + -3.96848032e-03f, -4.31817504e-03f, -3.69115197e-03f, -4.49505996e-03f, + -3.55524306e-03f, -4.61986796e-03f, -3.43295262e-03f, -4.75103094e-03f, + -3.29207260e-03f, -4.90942919e-03f, -3.11587507e-03f, -5.11301713e-03f, + -2.88174857e-03f, -5.39150922e-03f, -2.54877276e-03f, -5.80413379e-03f, + -2.02726539e-03f, -6.49422939e-03f, -1.07172224e-03f, -7.92336853e-03f, + 1.31550964e-03f, -1.28371256e-02f, 1.90196242e-02f, 3.42325442e-02f, + -1.46123983e-02f, 2.08830203e-03f, -8.43768239e-03f, -6.63709646e-04f, + -6.87396123e-03f, -1.66950732e-03f, -6.18199854e-03f, -2.16962669e-03f, + -5.81505624e-03f, -2.44316503e-03f, -5.61749559e-03f, -2.58156673e-03f, + -5.53541279e-03f, -2.61363072e-03f, -5.55885182e-03f, -2.53224956e-03f, + -5.71547034e-03f, -2.28021659e-03f, -6.11079255e-03f, -1.66057148e-03f, + -7.14381257e-03f, 2.72198622e-04f, -1.19019775e-02f, 4.12403607e-02f, + 7.72435445e-03f, -9.30953723e-03f, -6.98598363e-04f, -6.59517167e-03f, + -2.06973809e-03f, -5.75741031e-03f, -2.65842823e-03f, -5.27898337e-03f, + -3.16724884e-03f, -4.33729691e-03f, 4.57054525e-02f, -6.61827043e-03f, + -2.03258422e-03f, -6.04241888e-03f, -2.08083104e-03f, -6.25370605e-03f, + -1.61337138e-03f, -7.10138303e-03f, -5.62745608e-05f, -1.04330254e-02f, + 1.12887590e-02f, 3.58362098e-02f, -1.32211237e-02f, 1.32148712e-03f, + -8.11274690e-03f, -7.50679630e-04f, -7.06965355e-03f, -1.29273128e-03f, + -6.84593898e-03f, -1.26567262e-03f, -7.13414328e-03f, -6.41201397e-04f, + -8.31141597e-03f, 1.66821404e-03f, -1.39461316e-02f, 3.64701363e-02f, + 1.49082514e-02f, -1.19925551e-02f, 1.07319737e-03f, -8.09911390e-03f, + -7.02741520e-04f, -7.16188184e-03f, -1.21219185e-03f, -6.91538993e-03f, + -1.27969826e-03f, -6.99108177e-03f, -1.08241960e-03f, -7.31061123e-03f, + -6.36051764e-04f, -7.90903676e-03f, 1.51090004e-04f, -8.96043281e-03f, + 1.59191446e-03f, -1.10468535e-02f, 4.89151555e-03f, -1.72628213e-02f, + 2.40975164e-02f, 2.39144168e-02f, 1.25994341e-02f, 3.55475989e-02f, + -1.78616195e-02f, 4.35831489e-03f, -1.01118767e-02f, 3.94686058e-04f, + -7.55101358e-03f, -1.52631720e-03f, -5.90295823e-03f, -3.19801120e-03f, + -3.75352730e-03f, -7.39604118e-03f, 3.97544559e-02f, 5.79305085e-03f, + -9.73077334e-03f, 1.68822915e-04f, -7.74131107e-03f, -8.69716385e-04f, + -7.13159142e-03f, -1.22921236e-03f, -6.95571993e-03f, -1.25208258e-03f, + -7.08889933e-03f, -9.44230595e-04f, -7.62902287e-03f, -6.50716391e-05f, + -9.08948232e-03f, 2.57423792e-03f, -1.50002353e-02f, 2.99342321e-02f, + 2.22361942e-02f, -1.31766820e-02f, 1.16599314e-03f, -7.74493479e-03f, + -1.46161493e-03f, -6.13998174e-03f, -2.59858452e-03f, -5.23005351e-03f, + -3.45264918e-03f, -4.11658845e-03f, 4.08137809e-02f, -5.10957566e-03f, + -3.84112365e-03f, -3.75829988e-03f, -5.79337091e-03f, 3.77252307e-03f, + 5.31933447e-02f, 2.77637893e-02f, -1.02492477e-02f, -3.56699938e-04f, + -7.46833353e-03f, -6.08293572e-04f, -8.30912901e-03f, 1.44554834e-03f, + -1.33800320e-02f, 3.65741077e-02f, 8.54607819e-03f, -8.61306464e-03f, + -2.00218846e-03f, -5.05147541e-03f, -4.04689980e-03f, -3.55599893e-03f, + -5.33326116e-03f, -2.31042296e-03f, -6.67318233e-03f, -7.27171256e-04f, + -8.75889392e-03f, 2.43398339e-03f, -1.48596601e-02f, 2.51808766e-02f, + 2.59903081e-02f, -1.18777494e-02f, -1.37688366e-03f, -3.66118040e-03f, + -9.31203240e-03f, 3.68653383e-02f, 1.01533006e-02f, -1.07231449e-02f, + 1.26084436e-05f, -6.97840151e-03f, -2.22731045e-03f, -5.33173877e-03f, + -3.61256334e-03f, -4.04014410e-03f, -4.94526550e-03f, -2.51860543e-03f, + -6.91357495e-03f, 4.75993331e-04f, -1.29094972e-02f, 2.69374234e-02f, + 2.02613735e-02f, -1.28631114e-02f, 7.44521397e-04f, -6.80738084e-03f, + -4.35040127e-03f, 3.84361285e-02f, 4.14776721e-03f, -9.56482373e-03f, + 3.66291986e-04f, -8.35783657e-03f, 1.00590843e-04f, -8.89052709e-03f, + 1.86179639e-03f, -1.37956511e-02f, 2.52665956e-02f, 3.56167154e-02f, + -2.36003418e-02f, 3.68000330e-02f, 1.14605401e-02f, -9.04909512e-03f, + -1.47228281e-03f, -6.02056539e-03f, -2.68160218e-03f, -5.44954886e-03f, + -2.96180655e-03f, -5.33206722e-03f, -2.97958933e-03f, -5.38837821e-03f, + -2.86726632e-03f, -5.55456904e-03f, -2.65154972e-03f, -5.82718703e-03f, + -2.31771651e-03f, -6.23958230e-03f, -1.80861146e-03f, -6.88519106e-03f, + -9.68293992e-04f, -8.03848359e-03f, 7.40573000e-04f, -1.09928469e-02f, + 8.33892384e-03f, 3.26434587e-02f, -4.36990583e-03f, -1.07597937e-02f, + 2.12209804e-02f, 3.25448411e-02f, -1.60676591e-02f, 3.04832822e-03f, + -9.33281422e-03f, -2.05774507e-04f, -7.34301508e-03f, -1.58658214e-03f, + -6.30812618e-03f, -2.41058421e-03f, -5.62582199e-03f, -2.99971307e-03f, + -5.10370651e-03f, -3.47875358e-03f, -4.65771568e-03f, -3.90541431e-03f, + -4.24550250e-03f, -4.31500135e-03f, -3.83442621e-03f, -4.73952438e-03f, + -3.39068506e-03f, -5.21802904e-03f, -2.86524032e-03f, -5.81696500e-03f, + -2.16133677e-03f, -6.68805651e-03f, -1.01991819e-03f, -8.32499022e-03f, + 1.66514110e-03f, -1.40428598e-02f, 3.03196232e-02f, 1.53864752e-02f, + -1.09413219e-02f, -6.09848273e-04f, -6.20551528e-03f, -3.18736406e-03f, + -4.37345789e-03f, -4.76665899e-03f, -2.76365086e-03f, -6.72077196e-03f, + 1.30413180e-04f, -1.25032662e-02f, 2.59780989e-02f, 2.01149726e-02f, + -1.33830562e-02f, 1.59897001e-03f, -8.45030711e-03f, -8.17999678e-04f, + -6.98582343e-03f, -1.81350229e-03f, -6.26405395e-03f, -2.36321911e-03f, + -5.83609552e-03f, -2.70532023e-03f, -5.56322431e-03f, -2.92603346e-03f, + -5.38933697e-03f, -3.06296441e-03f, -5.28889273e-03f, -3.13330558e-03f, + -5.25086607e-03f, -3.14315302e-03f, -5.27348075e-03f, -3.09006791e-03f, + -5.36382308e-03f, -2.96127129e-03f, -5.54223862e-03f, -2.72559805e-03f, + -5.85640233e-03f, -2.30855270e-03f, -6.42744759e-03f, -1.50141087e-03f, + -7.64829572e-03f, 5.47021695e-04f, -1.18627033e-02f, 1.55822457e-02f, + 2.95107927e-02f, -1.32138461e-02f, 9.52416224e-04f, -7.79016673e-03f, + -1.48994827e-03f, -6.37247012e-03f, -2.43335262e-03f, -5.69090361e-03f, + -2.95933371e-03f, -5.26892362e-03f, -3.31393571e-03f, -4.96463710e-03f, + -3.58540920e-03f, -4.72007369e-03f, -3.81370481e-03f, -4.50702148e-03f, + -4.01823795e-03f, -4.31201881e-03f, -4.21025710e-03f, -4.12391391e-03f, + -4.40056063e-03f, -3.93294451e-03f, -4.59810396e-03f, -3.73060349e-03f, + -4.81068813e-03f, -3.50872315e-03f, -5.04959437e-03f, -3.25124047e-03f, + -5.33647768e-03f, -2.92864351e-03f, -5.71313708e-03f, -2.47901597e-03f, + -6.27664016e-03f, -1.73899687e-03f, -7.33258980e-03f, -2.60372688e-05f, + -1.10349599e-02f, 3.96556126e-02f, -1.93262353e-03f, 5.65878159e-04f, + 3.72632549e-02f, -8.79635717e-03f, -2.96210918e-03f, -3.08917817e-03f, + -9.50700790e-03f, 2.82582176e-02f, 1.54096978e-02f, -1.39829133e-02f, + 3.15632046e-03f, -1.07339554e-02f, 2.07137284e-03f, -1.08738695e-02f, + 3.58283341e-03f, -1.54787894e-02f, 2.95113234e-02f, 1.59912881e-02f, + -1.33637464e-02f, 4.34600181e-02f, 3.01620322e-03f, -9.73177166e-03f, + 2.22510711e-03f, -1.39288757e-02f, 2.08986561e-02f, 2.40018610e-02f, + -1.18552857e-02f, -5.73535238e-04f, -6.03413009e-03f, -3.70314351e-03f, + -3.65282926e-03f, -6.08208328e-03f, -5.52642112e-04f, -1.17402150e-02f, + 2.13134215e-02f, 2.35456921e-02f, -1.40422134e-02f, 1.86095424e-03f, + -8.69283435e-03f, -7.47371103e-04f, -7.09766680e-03f, -1.84588248e-03f, + -6.29377628e-03f, -2.45274280e-03f, -5.84762069e-03f, -2.74347435e-03f, + -5.76355423e-03f, -2.46881986e-03f, -6.92625092e-03f, 2.49273178e-03f, + 3.78311744e-02f, -1.33971229e-02f, 3.99476551e-03f, -1.57776271e-02f, + 3.68668917e-02f, 1.36412036e-02f, -1.08399669e-02f, -4.77088155e-04f, + -6.72934777e-03f, -2.53186181e-03f, -5.45230583e-03f, -3.43891290e-03f, + -4.74932436e-03f, -4.02635836e-03f, -4.23283073e-03f, -4.50708913e-03f, + -3.76847940e-03f, -4.97727129e-03f, -3.27781545e-03f, -5.51411328e-03f, + -2.66876204e-03f, -6.24511443e-03f, -1.74035446e-03f, -7.52735087e-03f, + 2.42764635e-04f, -1.12801549e-02f, 1.17776413e-02f, 4.02161069e-02f, + -1.26235042e-02f, -1.26413744e-04f, -6.63528818e-03f, -2.94168293e-03f, + -4.79973250e-03f, 3.98059447e-02f, -3.15017262e-03f, -6.38118542e-03f, + -4.71350753e-04f, -1.19150224e-02f, 2.80711017e-02f, 1.51516010e-02f, + -1.23083819e-02f, 9.66833702e-04f, -8.20609788e-03f, -1.07128985e-03f, + -6.98059285e-03f, -1.88141406e-03f, -6.42756470e-03f, -2.25494368e-03f, + -6.20679777e-03f, -2.32800232e-03f, -6.31450474e-03f, -1.96377552e-03f, + -7.13082900e-03f, -1.72751702e-04f, -1.19434438e-02f, 3.54520423e-02f, + 1.35808417e-02f, -1.38289283e-02f, 4.24673517e-03f, -1.47039989e-02f, + 1.84154196e-02f, 2.54612569e-02f, -1.17558614e-02f, -3.26706827e-04f, + -6.83624478e-03f, -2.44076675e-03f, -5.67490044e-03f, -3.16943629e-03f, + -5.18077866e-03f, -3.52726616e-03f, -4.91329256e-03f, -3.73680599e-03f, + -4.74793629e-03f, -3.87245605e-03f, -4.63853296e-03f, -3.96452265e-03f, + -4.56380840e-03f, -4.02833398e-03f, -4.51268204e-03f, -4.07230567e-03f, + -4.47764665e-03f, -4.10336380e-03f, -4.45371022e-03f, -4.12432506e-03f, + -4.43912889e-03f, -4.13646866e-03f, -4.43299519e-03f, -4.14039875e-03f, + -4.43495955e-03f, -4.13624008e-03f, -4.44510397e-03f, -4.12371189e-03f, + -4.46391099e-03f, -4.10211429e-03f, -4.49232455e-03f, -4.07022377e-03f, + -4.53230766e-03f, -4.02478486e-03f, -4.58728657e-03f, -3.96357462e-03f, + -4.65954746e-03f, -3.88294010e-03f, -4.75397026e-03f, -3.77479759e-03f, + -4.88456060e-03f, -3.61919905e-03f, -5.07790191e-03f, -3.37977277e-03f, + -5.37765883e-03f, -3.05714887e-03f, -5.10251929e-03f, 4.96735770e-02f, + 3.22653464e-02f, -9.03623341e-03f, -2.32453940e-03f, -5.03530605e-03f, + -4.98065968e-03f, 3.53299799e-02f, -1.33221606e-03f, -6.01525535e-03f, + -3.05937286e-03f, -5.27479664e-03f, -3.51651037e-03f, -4.94930479e-03f, + -3.77075425e-03f, -4.74457571e-03f, -3.94170747e-03f, -4.60670094e-03f, + -4.04877934e-03f, -4.54205665e-03f, -4.05724170e-03f, -4.62837281e-03f, + -3.80857891e-03f, -5.20391554e-03f, -2.47624262e-03f, -8.97079484e-03f, + 2.54331730e-02f, 1.31790832e-02f, -1.48984881e-02f, 5.89854339e-03f, + -1.72075264e-02f, 2.45744414e-02f, 1.82393116e-02f, -8.07041241e-03f, + -5.20845659e-03f, 1.65076380e-03f, 3.94187741e-02f, -6.43570908e-03f, + -7.43338562e-03f, 2.05821288e-02f, 5.41982902e-02f, 4.71062892e-03f, + -1.16682173e-02f, 1.16601662e-02f, 3.21151048e-02f, -1.13435417e-02f, + -1.59120872e-03f, -4.63094924e-03f, -6.64525085e-03f, 4.60352824e-03f, + 3.67913235e-02f, -1.18950241e-02f, -2.77589252e-04f, -6.80488162e-03f, + -2.83597834e-03f, -5.04187963e-03f, -4.27626583e-03f, -3.72291092e-03f, + -5.61048389e-03f, -2.24503896e-03f, -7.43427891e-03f, 3.38548545e-04f, + -1.20403703e-02f, 1.47069190e-02f, 2.95677203e-02f, -1.14779167e-02f, + -1.63903361e-03f, -4.42429665e-03f, 3.73687840e-02f, -1.53928459e-03f, + -1.19326705e-02f, 2.61862285e-02f, 2.27835564e-02f, -1.47269181e-02f, + 2.25113157e-03f, -9.14820527e-03f, -5.74263266e-04f, -7.36799126e-03f, + -1.84003435e-03f, -6.39868749e-03f, -2.63009588e-03f, -5.72357706e-03f, + -3.24268331e-03f, -5.12995406e-03f, -3.89033949e-03f, -4.28384174e-03f, + -5.40191506e-03f, 5.52741689e-04f, 3.80064795e-02f, -1.74865444e-02f, + 2.70561313e-02f, 1.63223212e-02f, -1.32704666e-02f, 3.26514892e-03f, + -1.37911335e-02f, 1.76725699e-02f, 2.14846663e-02f, -1.14931166e-02f, + -4.01035012e-04f, -6.98597925e-03f, -2.39785985e-03f, -5.86094724e-03f, + -3.11936079e-03f, -5.36399359e-03f, -3.48231715e-03f, -5.09200313e-03f, + -3.69404932e-03f, -4.92802971e-03f, -3.82460545e-03f, -4.82753961e-03f, + -3.90373757e-03f, -4.77005918e-03f, -3.94640733e-03f, -4.74311119e-03f, + -3.96315369e-03f, -4.73955391e-03f, -3.95780181e-03f, -4.75734799e-03f, + -3.93137414e-03f, -4.79638246e-03f, -3.88310821e-03f, -4.85831989e-03f, + -3.81034253e-03f, -4.94698422e-03f, -3.70782703e-03f, -5.06949805e-03f, + -3.56591823e-03f, -5.23894110e-03f, -3.36692523e-03f, -5.47943350e-03f, + -3.07621558e-03f, -5.84407583e-03f, -2.60939731e-03f, -6.47038968e-03f, + -1.72854628e-03f, -7.81781228e-03f, 6.12773063e-04f, -1.30948270e-02f, + 3.03916990e-02f, 1.33077800e-02f, -1.13621273e-02f, -2.81885828e-05f, + -7.48198847e-03f, -1.94813079e-03f, -6.32367959e-03f, -2.73030046e-03f, + -5.76055465e-03f, -3.15902594e-03f, -5.42383476e-03f, -3.43516322e-03f, + -5.19505044e-03f, -3.63205416e-03f, -5.02539110e-03f, -3.78428509e-03f, + -4.89015123e-03f, -3.90954400e-03f, -4.77637797e-03f, -4.01723892e-03f, + -4.67722678e-03f, -4.11286168e-03f, -4.58797650e-03f, -4.20032682e-03f, + -4.50549798e-03f, -4.28209509e-03f, -4.42793588e-03f, -4.35942818e-03f, + -4.35466758e-03f, -4.43219741e-03f, -4.28724043e-03f, -4.49612142e-03f, + -4.23287142e-03f, -4.54196578e-03f, -4.20376604e-03f, -4.55104801e-03f, + -4.23031280e-03f, -4.47238476e-03f, -4.40191899e-03f, -4.13894312e-03f, + -5.05980174e-03f, -2.75305536e-03f, -8.58367438e-03f, 1.33621126e-02f, + 2.86790294e-02f, -1.98042493e-02f, 1.02080484e-02f, -2.33691701e-02f, + 3.83737699e-02f, 5.48636068e-02f, -1.82719639e-02f, 1.21989617e-03f, + -2.69422705e-03f, 4.06912905e-02f, -1.51147062e-02f, 3.47841747e-03f, + -1.17151693e-02f, 4.94242509e-03f, 2.76709406e-02f, -5.10922883e-03f, + -5.33298468e-03f, -2.89588397e-03f, -6.19561107e-03f, -2.32867191e-03f, + -6.75547740e-03f, -1.61435422e-03f, -7.83193307e-03f, 2.42218339e-04f, + -1.17795954e-02f, 1.47384354e-02f, 2.86710985e-02f, -1.35906562e-02f, + 1.20347286e-03f, -8.64713247e-03f, -7.57957248e-04f, -7.80665316e-03f, + -9.33397801e-04f, -8.25739168e-03f, 4.57634806e-04f, -1.19632686e-02f, + 1.74396160e-02f, 2.06908237e-02f, -1.38005245e-02f, 3.09959482e-03f, + -1.35328359e-02f, 1.85078463e-02f, 2.30237564e-02f, -1.47384663e-02f, + 5.51080852e-03f, 2.98688689e-02f, -5.31031221e-03f, -4.96520649e-03f, + -3.71577524e-03f, -3.36020783e-03f, 4.46449823e-02f, -1.81080698e-02f, + 2.87270904e-02f, 1.18589656e-02f, -8.78931089e-03f, -2.87867589e-03f, + -4.49794360e-03f, -5.37486810e-03f, -2.44259052e-03f, -7.59382854e-03f, + 6.49184355e-04f, -1.36276187e-02f, 2.91617203e-02f, 1.74646701e-02f, + -1.34198036e-02f, 6.37358261e-03f, 5.07954030e-02f, 1.66968345e-02f, + -9.55519195e-03f, -1.99347423e-03f, -5.51500126e-03f, -4.30097705e-03f, + -3.58601751e-03f, -6.39086803e-03f, -7.18187314e-04f, -1.17466417e-02f, + 1.97358012e-02f, 2.36251920e-02f, -1.40102289e-02f, 1.49268679e-03f, + -8.70770519e-03f, -1.08381409e-03f, -7.12253781e-03f, -2.19826561e-03f, + -6.26458373e-03f, -2.92577428e-03f, -5.56642744e-03f, -3.77768167e-03f, + -3.83865327e-03f, 3.80494651e-02f, -8.17459836e-03f, -1.47145201e-03f, + -7.54810073e-03f, 3.14566553e-04f, 3.00618970e-02f, -6.39183508e-03f, + -3.78793154e-03f, -4.63020598e-03f, -4.44821363e-03f, -4.28027839e-03f, + -4.67438853e-03f, -4.12673252e-03f, -4.73051584e-03f, 3.21097714e-02f, + -5.28687514e-03f, -3.55349317e-03f, -5.40995798e-03f, -3.33359207e-03f, + -5.68741345e-03f, -3.00584545e-03f, -6.07718878e-03f, -2.54239194e-03f, + -6.64436049e-03f, -1.83005204e-03f, -7.59207003e-03f, -4.59717550e-04f, + -9.93922302e-03f, 5.68060485e-03f, 2.90934303e-02f, -6.53856497e-03f, + -5.65287242e-03f, -9.46223078e-04f, -1.13186293e-02f, 1.50891870e-02f, + 2.09539326e-02f, -1.09546032e-02f, -1.59824745e-03f, -5.42318751e-03f, + -4.88390808e-03f, -2.53816867e-03f, -8.51864187e-03f, 5.64611413e-03f, + 2.97331850e-02f, -8.74444606e-03f, -4.00488218e-03f, -2.16356876e-03f, + -1.07892883e-02f, 1.78778122e-02f, 2.08130007e-02f, -1.12264374e-02f, + -3.63483758e-03f, 7.33583800e-03f, 3.11117739e-02f, -1.87155551e-02f, + 7.19984773e-03f, -1.72907874e-02f, 2.14904478e-02f, 1.56901976e-02f, + -8.93072141e-03f, -2.68277448e-03f, -5.22354074e-03f, -4.16805348e-03f, + -4.48426421e-03f, -4.58629619e-03f, -4.22683425e-03f, -4.76355934e-03f, + -4.09294348e-03f, -4.88141694e-03f, -3.98087389e-03f, -5.00060325e-03f, + -3.85257075e-03f, -5.14628052e-03f, -3.68948982e-03f, -5.33490088e-03f, + -3.47521541e-03f, -5.58323576e-03f, -3.19047323e-03f, -5.91763634e-03f, + -2.79719058e-03f, -6.39206249e-03f, -2.21836898e-03f, -7.12318353e-03f, + -1.26240054e-03f, -8.45692792e-03f, 7.87811024e-04f, -1.22708728e-02f, + 1.25757062e-02f, 2.45257472e-02f, -8.37664418e-03f, -5.79274713e-03f, + 5.01174575e-03f, 3.06834805e-02f, -1.21869425e-02f, -2.71123438e-04f, + }; + +} // namespace mutap_test::fixtures diff --git a/tests/fixtures/rir_rehearsal.h b/tests/fixtures/rir_rehearsal.h new file mode 100644 index 0000000..73474a0 --- /dev/null +++ b/tests/fixtures/rir_rehearsal.h @@ -0,0 +1,1047 @@ +// GENERATED by tools/fixtures/make_rir_fixtures.py — do not edit by hand. +// SPDX-License-Identifier: MIT +// Copyright 2026 MuTap contributors +// +// Physically-modeled room: mid-size rehearsal room, mic 3.2 m from the speaker. +// pyroomacoustics image-source method, shoebox [8.0, 6.0, 3.5] m, +// uniform absorption 0.2, max_order 17, +// speaker at [2.5, 3.1, 1.7], mic at [5.5, 2.0, 1.4], fs 48000 Hz. +// Deterministic: rebuilding with the same parameters reproduces +// this data exactly. Conditioning (delay trim to a 32-sample +// guard, truncation to 4096 taps, unit-energy normalization) +// is documented in the generator script. +#pragma once + +namespace mutap_test::fixtures { + + inline constexpr unsigned k_rir_rehearsal_fs = 48000; + inline constexpr unsigned k_rir_rehearsal_taps = 4096; + + inline constexpr float k_rir_rehearsal[4096] = { + -1.40113892e-03f, -1.40288980e-03f, -1.40464151e-03f, -1.40639406e-03f, + -1.40814745e-03f, -1.40990167e-03f, -1.41165672e-03f, -1.41341261e-03f, + -1.41653979e-03f, -1.41130928e-03f, -1.43163340e-03f, -1.39687060e-03f, + -1.45991631e-03f, -1.36837856e-03f, -1.50315748e-03f, -1.32400142e-03f, + -1.56326821e-03f, -1.26173128e-03f, -1.64237332e-03f, -1.17929662e-03f, + -1.74292715e-03f, -1.07402007e-03f, -1.86788611e-03f, -9.42587056e-04f, + -2.02100173e-03f, -7.80712727e-04f, -2.20723817e-03f, -5.82576147e-04f, + -2.43350450e-03f, -3.39868121e-04f, -2.70989726e-03f, -4.01769809e-05f, + -3.05168294e-03f, 3.35558129e-04f, -3.48371865e-03f, 8.20255670e-04f, + -4.04957250e-03f, 1.47282332e-03f, -4.83126063e-03f, 2.41089599e-03f, + -6.00374718e-03f, 3.90685027e-03f, -8.01657582e-03f, 6.76305614e-03f, + -1.24721610e-02f, 1.48038878e-02f, -3.23503616e-02f, 2.80835611e-01f, + 3.85016725e-02f, -2.00107341e-02f, 1.04882852e-02f, -1.02792814e-02f, + 5.39304723e-03f, -7.11067539e-03f, 3.20401983e-03f, -5.50553955e-03f, + 1.95916413e-03f, -4.51714142e-03f, 1.14101923e-03f, -3.83743908e-03f, + 5.54354915e-04f, -3.33659908e-03f, 1.09464513e-04f, -2.95064222e-03f, + -2.40361102e-04f, -2.64478703e-03f, -5.21964714e-04f, -2.39780374e-03f, + -7.51972802e-04f, -2.19659079e-03f, -9.40967431e-04f, -2.03246561e-03f, + -1.09617266e-03f, -1.89935739e-03f, -1.22273676e-03f, -1.79283633e-03f, + -1.32453071e-03f, -1.70948886e-03f, -1.40459609e-03f, -1.64656854e-03f, + -1.46544330e-03f, -1.60175652e-03f, -1.50923171e-03f, -1.57301726e-03f, + -1.53790145e-03f, -1.55849257e-03f, -1.55324276e-03f, -1.55644663e-03f, + -1.55826525e-03f, -1.56008459e-03f, -1.56190467e-03f, -1.56372547e-03f, + -1.56554700e-03f, -1.56736926e-03f, -1.56919225e-03f, -1.57101596e-03f, + -1.57284039e-03f, -1.57466555e-03f, -1.57649142e-03f, -1.57831802e-03f, + -1.58014534e-03f, -1.58197338e-03f, -1.58380213e-03f, -1.58563160e-03f, + -1.58746179e-03f, -1.58929269e-03f, -1.59112431e-03f, -1.59295663e-03f, + -1.59478967e-03f, -1.59662342e-03f, -1.59845788e-03f, -1.60029304e-03f, + -1.60212892e-03f, -1.60396550e-03f, -1.60580278e-03f, -1.60764077e-03f, + -1.60947946e-03f, -1.61131885e-03f, -1.61315894e-03f, -1.61499974e-03f, + -1.61684123e-03f, -1.61868341e-03f, -1.62052630e-03f, -1.62236988e-03f, + -1.62421415e-03f, -1.62605911e-03f, -1.62790477e-03f, -1.62975111e-03f, + -1.63159815e-03f, -1.63344587e-03f, -1.63529428e-03f, -1.63714338e-03f, + -1.63899316e-03f, -1.64084362e-03f, -1.64269477e-03f, -1.64454660e-03f, + -1.64639910e-03f, -1.64825229e-03f, -1.65010615e-03f, -1.65196069e-03f, + -1.65381590e-03f, -1.65567179e-03f, -1.65752835e-03f, -1.65938558e-03f, + -1.66124348e-03f, -1.66310205e-03f, -1.66496128e-03f, -1.66682118e-03f, + -1.66868175e-03f, -1.67054298e-03f, -1.67240488e-03f, -1.67426743e-03f, + -1.67613065e-03f, -1.67799452e-03f, -1.67985905e-03f, -1.68172424e-03f, + -1.68359008e-03f, -1.68545658e-03f, -1.68732373e-03f, -1.68919152e-03f, + -1.69105997e-03f, -1.69292907e-03f, -1.69479881e-03f, -1.69666920e-03f, + -1.69854024e-03f, -1.70041191e-03f, -1.70228423e-03f, -1.70415719e-03f, + -1.70603078e-03f, -1.70790502e-03f, -1.70977989e-03f, -1.71165540e-03f, + -1.71353153e-03f, -1.71540831e-03f, -1.71728571e-03f, -1.71916374e-03f, + -1.72104240e-03f, -1.72292168e-03f, -1.72480159e-03f, -1.72668213e-03f, + -1.72856328e-03f, -1.73044506e-03f, -1.73244247e-03f, -1.73373858e-03f, + -1.73718276e-03f, -1.73599442e-03f, -1.74303981e-03f, -1.73706195e-03f, + -1.75016918e-03f, -1.73677963e-03f, -1.75873904e-03f, -1.73497143e-03f, + -1.76893848e-03f, -1.73143348e-03f, -1.78098510e-03f, -1.72592861e-03f, + -1.79514193e-03f, -1.71816484e-03f, -1.81174143e-03f, -1.70775835e-03f, + -1.83121732e-03f, -1.69419427e-03f, -1.85419616e-03f, -1.67674262e-03f, + -1.88155574e-03f, -1.65429617e-03f, -1.91451404e-03f, -1.62549084e-03f, + -1.95515711e-03f, -1.58727719e-03f, -2.00738542e-03f, -1.53450111e-03f, + -2.07837550e-03f, -1.45685047e-03f, -2.18351565e-03f, -1.33025832e-03f, + -2.36273960e-03f, -1.08295964e-03f, -2.76121908e-03f, -3.61741006e-04f, + -4.63083007e-03f, 1.84842422e-01f, 1.31342533e-03f, -3.32409623e-03f, + -8.18689236e-04f, -2.54766603e-03f, -1.23844230e-03f, -2.28961739e-03f, + -1.42379967e-03f, -2.15922616e-03f, -1.53148083e-03f, -2.07984394e-03f, + -1.60376234e-03f, -2.02615655e-03f, -1.65672006e-03f, -1.98743538e-03f, + -1.69780066e-03f, -1.95835701e-03f, -1.73077422e-03f, -1.93622850e-03f, + -1.75795951e-03f, -1.91897819e-03f, -1.78087098e-03f, -1.90552976e-03f, + -1.80036934e-03f, -1.89517409e-03f, -1.81705005e-03f, -1.88741307e-03f, + -1.83133612e-03f, -1.88188388e-03f, -1.84354050e-03f, -1.87830667e-03f, + -1.85391319e-03f, -1.87646086e-03f, -1.86266009e-03f, -1.87615397e-03f, + -1.86995567e-03f, -1.87722080e-03f, -1.87596075e-03f, -1.87950724e-03f, + -1.88082303e-03f, -1.88286968e-03f, -1.88479701e-03f, -1.88672486e-03f, + -1.89065731e-03f, -1.88237059e-03f, -1.91143027e-03f, -1.86001252e-03f, + -1.95142305e-03f, -1.81719700e-03f, -2.01315527e-03f, -1.75132301e-03f, + -2.09932890e-03f, -1.65956311e-03f, -2.21292742e-03f, -1.53873931e-03f, + -2.35737092e-03f, -1.38513177e-03f, -2.53675227e-03f, -1.19418154e-03f, + -2.75621011e-03f, -9.60026918e-04f, -3.02251255e-03f, -6.74759183e-04f, + -3.34501104e-03f, -3.27191536e-04f, -3.73724501e-03f, 9.92652687e-05f, + -4.21981079e-03f, 6.30531254e-04f, -4.82575040e-03f, 1.30934472e-03f, + -5.61137901e-03f, 2.21148382e-03f, -6.68104982e-03f, 3.48463676e-03f, + -8.25085344e-03f, 5.45824190e-03f, -1.08498835e-02f, 9.04231655e-03f, + -1.61994853e-02f, 1.79947407e-02f, -3.48521439e-02f, 8.97431117e-02f, + 1.15426908e-01f, -3.75079839e-02f, 1.88306305e-02f, -1.65633951e-02f, + 9.17228617e-03f, -1.09171921e-02f, 5.42140411e-03f, -8.23357795e-03f, + 3.38272845e-03f, -6.63467565e-03f, 2.07765928e-03f, -5.55713462e-03f, + 1.15796351e-03f, -4.77379631e-03f, 4.69060413e-04f, -4.17580852e-03f, + -6.79145269e-05f, -3.70463730e-03f, -4.97290009e-04f, -3.32612919e-03f, + -8.45824238e-04f, -3.01898001e-03f, -1.13070563e-03f, -2.76915103e-03f, + -1.36354771e-03f, -2.56691889e-03f, -1.55258664e-03f, -2.40522139e-03f, + -1.70395223e-03f, -2.27867423e-03f, -1.82243096e-03f, -2.18297181e-03f, + -1.91194106e-03f, -2.11450811e-03f, -1.97583542e-03f, -2.07013561e-03f, + -2.01709495e-03f, -2.04700841e-03f, -2.03845564e-03f, -2.04248172e-03f, + -2.04444636e-03f, -2.04641140e-03f, -2.04837684e-03f, -2.05034268e-03f, + -2.05230892e-03f, -2.05427556e-03f, -2.05624259e-03f, -2.05821002e-03f, + -2.06017785e-03f, -2.06214606e-03f, -2.06411467e-03f, -2.06608366e-03f, + -2.06805305e-03f, -2.07002282e-03f, -2.07199297e-03f, -2.07396351e-03f, + -2.07593443e-03f, -2.07790574e-03f, -2.07987742e-03f, -2.08184948e-03f, + -2.08382192e-03f, -2.08579473e-03f, -2.08776792e-03f, -2.08974148e-03f, + -2.09171541e-03f, -2.09368972e-03f, -2.09566439e-03f, -2.09763942e-03f, + -2.09961483e-03f, -2.10159059e-03f, -2.10356672e-03f, -2.10554321e-03f, + -2.10752006e-03f, -2.10949727e-03f, -2.11147484e-03f, -2.11345276e-03f, + -2.11543103e-03f, -2.11740966e-03f, -2.11938863e-03f, -2.12136796e-03f, + -2.12334763e-03f, -2.12532765e-03f, -2.12730802e-03f, -2.12928872e-03f, + -2.13175076e-03f, -2.13127940e-03f, -2.13977799e-03f, -2.12893930e-03f, + -2.15243716e-03f, -2.12166311e-03f, -2.17035198e-03f, -2.10880531e-03f, + -2.19419600e-03f, -2.08965694e-03f, -2.22471973e-03f, -2.06341615e-03f, + -2.26278986e-03f, -2.02913597e-03f, -2.30944963e-03f, -1.98564762e-03f, + -2.36602796e-03f, -1.93143314e-03f, -2.43427974e-03f, -1.86443525e-03f, + -2.51665043e-03f, -1.78170997e-03f, -2.61671437e-03f, -1.67886241e-03f, + -2.73984793e-03f, -1.54921377e-03f, -2.89482955e-03f, -1.38105618e-03f, + -3.09714929e-03f, -1.15346672e-03f, -3.37593784e-03f, -8.24617627e-04f, + -3.79352184e-03f, -2.97317798e-04f, -4.51067462e-03f, 7.16335661e-04f, + -6.10517884e-03f, 3.60667004e-03f, -1.33865878e-02f, 1.36326645e-01f, + 1.12768560e-02f, -8.59452075e-03f, 1.93888547e-03f, -5.27372515e-03f, + 1.81159848e-04f, -4.18017669e-03f, -5.81082602e-04f, -3.62492719e-03f, + -1.01719498e-03f, -3.28319258e-03f, -1.30532369e-03f, -3.04866682e-03f, + -1.51296583e-03f, -2.87638896e-03f, -1.67122898e-03f, -2.74415223e-03f, + -1.79631425e-03f, -2.63991346e-03f, -1.89756874e-03f, -2.55621696e-03f, + -1.98081536e-03f, -2.48850308e-03f, -2.04973317e-03f, -2.43374939e-03f, + -2.10683762e-03f, -2.38984080e-03f, -2.15392554e-03f, -2.35523701e-03f, + -2.19234247e-03f, -2.32874638e-03f, -2.22314982e-03f, -2.30941112e-03f, + -2.24722357e-03f, -2.29642187e-03f, -2.26531693e-03f, -2.28906825e-03f, + -2.27810797e-03f, -2.28670063e-03f, -2.28622252e-03f, -2.28871196e-03f, + -2.29071505e-03f, -2.29271836e-03f, -2.29472187e-03f, -2.29672559e-03f, + -2.29872952e-03f, -2.30073365e-03f, -2.30273799e-03f, -2.30474252e-03f, + -2.30674726e-03f, -2.30875219e-03f, -2.31075732e-03f, -2.31276264e-03f, + -2.31476815e-03f, -2.31677385e-03f, -2.31877975e-03f, -2.32078583e-03f, + -2.32279209e-03f, -2.32479854e-03f, -2.32680517e-03f, -2.32881198e-03f, + -2.33081897e-03f, -2.33282613e-03f, -2.33483347e-03f, -2.33684098e-03f, + -2.33884866e-03f, -2.34171191e-03f, -2.33936041e-03f, -2.35294442e-03f, + -2.33219520e-03f, -2.37236703e-03f, -2.31631768e-03f, -2.40104127e-03f, + -2.29063330e-03f, -2.44010190e-03f, -2.25395768e-03f, -2.49079666e-03f, + -2.20496377e-03f, -2.55455049e-03f, -2.14210460e-03f, -2.63306423e-03f, + -2.06349098e-03f, -2.72845918e-03f, -1.96670532e-03f, -2.84352439e-03f, + -1.84849536e-03f, -2.98209809e-03f, -1.70427703e-03f, -3.14971397e-03f, + -1.52728745e-03f, -3.35476339e-03f, -1.30692232e-03f, -3.61075972e-03f, + -1.02590851e-03f, -3.94026015e-03f, -6.53955660e-04f, -4.38481960e-03f, + -1.32634533e-04f, -5.02925924e-03f, 6.66105038e-04f, -6.07661495e-03f, + 2.08556216e-03f, -8.16072240e-03f, 5.45779918e-03f, -1.47623456e-02f, + 2.57413465e-02f, 1.00523368e-01f, -2.04484341e-02f, 7.38785189e-03f, + -9.11587895e-03f, 2.60165668e-03f, -6.42839726e-03f, 8.52652434e-04f, + -5.19941532e-03f, -7.49790213e-05f, -4.48175514e-03f, -6.61193303e-04f, + -4.00435052e-03f, -1.07121747e-03f, -3.66057632e-03f, -1.37699427e-03f, + -3.40012301e-03f, -1.61476258e-03f, -3.19719469e-03f, -1.80060413e-03f, + -3.04289822e-03f, -1.94153608e-03f, -2.92984774e-03f, -2.04406101e-03f, + -2.85300226e-03f, -2.11207953e-03f, -2.80937307e-03f, -2.14784711e-03f, + -2.79730447e-03f, -2.15250070e-03f, -2.81611887e-03f, -2.12630194e-03f, + -2.86595443e-03f, -2.06870781e-03f, -2.94778158e-03f, -1.97828150e-03f, + -3.06357427e-03f, -1.85240724e-03f, -3.21671849e-03f, -1.68674677e-03f, + -3.41275088e-03f, -1.47508617e-03f, -3.65743667e-03f, -1.21036636e-03f, + -3.96342379e-03f, -8.72551760e-04f, -4.35815628e-03f, -4.24778408e-04f, + -4.89224271e-03f, 2.04268159e-04f, -5.66947630e-03f, 1.17175628e-03f, + -6.94009793e-03f, 2.90314317e-03f, -9.49567517e-03f, 7.08201470e-03f, + -1.78340956e-02f, 3.43719332e-02f, 8.85361885e-02f, -2.27571082e-02f, + 8.75612530e-03f, -1.03186196e-02f, 3.33602657e-03f, -7.23314817e-03f, + 1.31354092e-03f, -5.80452126e-03f, 2.35141374e-04f, -4.97092487e-03f, + -4.41078981e-04f, -4.42383472e-03f, -9.04150484e-04f, -4.04118512e-03f, + -1.23631699e-03f, -3.76567171e-03f, -1.47860648e-03f, -3.56725112e-03f, + -1.65335774e-03f, -3.42919583e-03f, -1.77320789e-03f, -3.34186709e-03f, + -1.84642002e-03f, -3.29592496e-03f, -1.88301293e-03f, -3.28418553e-03f, + -1.88633558e-03f, -3.30534654e-03f, -1.85653846e-03f, -3.36049449e-03f, + -1.79112739e-03f, -3.45382558e-03f, -1.68372486e-03f, -3.59448429e-03f, + -1.52167889e-03f, -3.79999307e-03f, -1.28038660e-03f, -4.10524977e-03f, + -9.09515072e-04f, -4.58477152e-03f, -2.95837086e-04f, -5.41797751e-03f, + 8.68026515e-04f, -7.18389156e-03f, 3.81306209e-03f, -1.31176542e-02f, + 2.25558128e-02f, 9.07322472e-02f, -2.05519355e-02f, 7.93559782e-03f, + -1.05308893e-02f, 3.95649888e-03f, -8.55142616e-03f, 2.93480843e-03f, + -8.13876899e-03f, 2.98246550e-03f, -8.65278907e-03f, 4.04827571e-03f, + -1.05668707e-02f, 7.50696804e-03f, -1.78095433e-02f, 3.10668740e-02f, + 9.60194879e-02f, -2.15104190e-02f, 7.45807309e-03f, -9.46239578e-03f, + 2.37886369e-03f, -6.64449333e-03f, 5.73986710e-04f, -5.39750218e-03f, + -3.51424414e-04f, -4.69284916e-03f, -9.19166695e-04f, -4.23612546e-03f, + -1.30824174e-03f, -3.91227510e-03f, -1.59585227e-03f, -3.66767204e-03f, + -1.82033403e-03f, -3.47423474e-03f, -2.00262700e-03f, -3.31620257e-03f, + -2.15477502e-03f, -3.18416021e-03f, -2.28475235e-03f, -3.07000637e-03f, + -2.40073403e-03f, -2.96809536e-03f, -2.50392390e-03f, -2.87955956e-03f, + -2.59468028e-03f, -2.80184734e-03f, -2.67610527e-03f, -2.73205798e-03f, + -2.75095134e-03f, -2.66753779e-03f, -2.82181753e-03f, -2.60570483e-03f, + -2.89131202e-03f, -2.54505314e-03f, -2.95741826e-03f, -2.49017995e-03f, + -3.01853851e-03f, -2.43643289e-03f, -3.08235361e-03f, -2.37796144e-03f, + -3.15229633e-03f, -2.31218086e-03f, -3.22982893e-03f, -2.23786111e-03f, + -3.31940559e-03f, -2.14565400e-03f, -3.43499272e-03f, -2.01585095e-03f, + -3.60499531e-03f, -1.80659767e-03f, -3.89300779e-03f, -1.41719305e-03f, + -4.46738448e-03f, -5.44421553e-04f, -5.93687065e-03f, 2.26515741e-03f, + -1.31880503e-02f, 8.54697275e-02f, 1.51318260e-02f, -1.21848193e-02f, + 4.24981910e-03f, -8.85714476e-03f, 2.85873783e-03f, -8.33946024e-03f, + 2.85380481e-03f, -8.74238309e-03f, 3.63120082e-03f, -9.97067331e-03f, + 5.45483402e-03f, -1.27556489e-02f, 1.00092519e-02f, -2.15368873e-02f, + 3.54864836e-02f, 1.92200681e-01f, -2.58726986e-02f, 7.58635792e-03f, + -8.09736438e-03f, -8.82641008e-04f, -1.60191922e-03f, -8.68843238e-03f, + 1.67467972e-02f, 8.47119473e-02f, -2.03044447e-02f, 7.54880992e-03f, + -1.03706155e-02f, 3.09371428e-03f, -7.71848015e-03f, 1.27151113e-03f, + -6.37298564e-03f, 2.11696215e-04f, -5.51979451e-03f, -5.07079804e-04f, + -4.91567293e-03f, -1.03631623e-03f, -4.46059147e-03f, -1.44506457e-03f, + -4.10526996e-03f, -1.76948182e-03f, -3.82299197e-03f, -2.02848011e-03f, + -3.60040227e-03f, -2.23323345e-03f, -3.42712268e-03f, -2.39275628e-03f, + -3.29565180e-03f, -2.51335497e-03f, -3.20064476e-03f, -2.59959436e-03f, + -3.13818900e-03f, -2.65482073e-03f, -3.10544691e-03f, -2.68138606e-03f, + -3.10054499e-03f, -2.68386420e-03f, -3.10965524e-03f, -2.68236558e-03f, + -3.11958428e-03f, -2.67921103e-03f, -3.13298457e-03f, -2.66926628e-03f, + -3.15884761e-03f, -2.63797133e-03f, -3.22049908e-03f, -2.54321931e-03f, + -3.40232729e-03f, -2.20357180e-03f, -4.16369302e-03f, 1.28280297e-04f, + 8.52343654e-02f, -7.15272828e-03f, -2.10122622e-04f, -5.22579779e-03f, + -7.65104125e-04f, -5.10150365e-03f, -6.92106008e-04f, -5.31169929e-03f, + -3.91359930e-04f, -5.70668589e-03f, 7.99993501e-05f, -6.27482740e-03f, + 7.39761849e-04f, -7.05903341e-03f, 1.65808977e-03f, -8.16448059e-03f, + 2.99021167e-03f, -9.82344202e-03f, 5.09511281e-03f, -1.26184470e-02f, + 8.98422071e-03f, -1.84838747e-02f, 1.89503899e-02f, -3.98641424e-02f, + 1.11783076e-01f, 1.00958553e-01f, -3.84557569e-02f, 1.82680337e-02f, + -1.80244831e-02f, 8.56971756e-03f, -1.22750551e-02f, 4.71540479e-03f, + -9.49715018e-03f, 2.59101330e-03f, -7.81900918e-03f, 1.21098029e-03f, + -6.66903573e-03f, 2.19874092e-04f, -5.81416249e-03f, -5.41711398e-04f, + -5.14165922e-03f, -1.15553434e-03f, -4.59072776e-03f, -1.66832910e-03f, + -4.12439150e-03f, -2.10985818e-03f, -3.71822246e-03f, -2.50070807e-03f, + -3.35433635e-03f, -2.85698373e-03f, -3.01758508e-03f, -3.19359598e-03f, + -2.69268175e-03f, -3.52705173e-03f, -2.36050579e-03f, -3.88070434e-03f, + -1.99162960e-03f, -4.29364524e-03f, -1.53065079e-03f, -4.84903447e-03f, + -8.44060599e-04f, -5.78115721e-03f, 5.34497398e-04f, -8.23087001e-03f, + 6.95869907e-03f, 6.81882684e-02f, -7.64515496e-03f, -2.98322740e-03f, + 1.78936787e-03f, 1.63896983e-01f, -1.10262777e-02f, 1.42872832e-03f, + -6.25506909e-03f, -5.89628982e-04f, -5.08460249e-03f, -1.38411814e-03f, + -4.51015246e-03f, -1.83450929e-03f, -4.15597123e-03f, -2.13366145e-03f, + -3.91109453e-03f, -2.35059256e-03f, -3.73004713e-03f, -2.51661548e-03f, + -3.59061359e-03f, -2.64793390e-03f, -3.48049918e-03f, -2.75409605e-03f, + -3.39244964e-03f, -2.84065957e-03f, -3.32190295e-03f, -2.91140291e-03f, + -3.26576983e-03f, -2.96893104e-03f, -3.22181572e-03f, -3.01517150e-03f, + -3.18836149e-03f, -3.05160160e-03f, -3.16409138e-03f, -3.07940804e-03f, + -3.14792653e-03f, -3.09958187e-03f, -3.13894316e-03f, -3.11470192e-03f, + -3.12930665e-03f, -3.13687324e-03f, -3.10874587e-03f, -3.17213489e-03f, + -3.07355438e-03f, -3.22352735e-03f, -3.02019585e-03f, -3.29509479e-03f, + -2.94518518e-03f, -3.38956068e-03f, -2.84587645e-03f, -3.50982192e-03f, + -2.71926059e-03f, -3.65902473e-03f, -2.56185944e-03f, -3.84102566e-03f, + -2.36943181e-03f, -4.06047702e-03f, -2.13695822e-03f, -4.32256411e-03f, + -1.85967080e-03f, -4.63004969e-03f, -1.54164182e-03f, -4.95527466e-03f, + -1.32286825e-03f, 6.51343878e-02f, 4.16729651e-05f, -6.55608721e-03f, + 5.58961730e-04f, -7.39961474e-03f, 1.63402742e-03f, -8.76700462e-03f, + 3.38529007e-03f, -1.11115601e-02f, 6.67481109e-03f, -1.61366888e-02f, + 1.53993129e-02f, -3.57804845e-02f, 1.25216171e-01f, 6.31963747e-02f, + -2.94091468e-02f, 1.30098059e-02f, -1.48594980e-02f, 5.81248079e-03f, + -1.05102413e-02f, 2.86353280e-03f, -8.37308095e-03f, 1.22299508e-03f, + -7.07811151e-03f, 1.58753834e-04f, -6.19643177e-03f, -5.97752048e-04f, + -5.55109164e-03f, -1.16791204e-03f, -5.05604534e-03f, -1.61436130e-03f, + -4.66466961e-03f, -1.97260598e-03f, -4.34937582e-03f, -2.26433511e-03f, + -4.09292188e-03f, -2.50346147e-03f, -3.88391897e-03f, -2.69942450e-03f, + -3.71445241e-03f, -2.85894023e-03f, -3.57876950e-03f, -2.98810458e-03f, + -3.46786547e-03f, -3.09814809e-03f, -3.37262910e-03f, -3.19475553e-03f, + -3.28868577e-03f, -3.28212993e-03f, -3.21195398e-03f, -3.36427574e-03f, + -3.13847093e-03f, -3.44515066e-03f, -3.06424475e-03f, -3.53047787e-03f, + -2.97894402e-03f, -3.63250823e-03f, -2.87489870e-03f, -3.75430549e-03f, + -2.74953760e-03f, -3.89923323e-03f, -2.59888134e-03f, -4.07204725e-03f, + -2.41718967e-03f, -4.27974614e-03f, -2.19582602e-03f, -4.53312606e-03f, + -1.92107405e-03f, -4.84975516e-03f, -1.57032430e-03f, -5.25933023e-03f, + -1.10354865e-03f, -5.81698126e-03f, -4.42940810e-04f, -6.63602501e-03f, + 5.83158570e-04f, -7.98967364e-03f, 2.43850165e-03f, -1.07379242e-02f, + 6.94098878e-03f, -1.96756988e-02f, 3.52231317e-02f, 1.17623816e-01f, + -2.74069268e-02f, 1.02595255e-02f, -1.29495724e-02f, 4.22329176e-03f, + -9.68833883e-03f, 2.26057156e-03f, -8.50098523e-03f, 1.61786898e-03f, + -8.37263773e-03f, 2.12445049e-03f, -1.01124860e-02f, 8.22840890e-03f, + 5.87199037e-02f, -8.46810204e-03f, -1.54300587e-03f, -3.99466492e-03f, + -3.34328868e-03f, -2.98262496e-03f, -4.04298359e-03f, -2.43878305e-03f, + -4.52550795e-03f, -1.98881577e-03f, -4.98511457e-03f, -1.51438798e-03f, + -5.50610264e-03f, -9.44868024e-04f, -6.15769400e-03f, -2.02715144e-04f, + -7.03613667e-03f, 8.41038399e-04f, -8.32523597e-03f, 2.46221858e-03f, + -1.04632231e-02f, 5.41739690e-03f, -1.49032605e-02f, 1.29395680e-02f, + -3.10152612e-02f, 8.27017297e-02f, 7.54557435e-02f, -3.04168741e-02f, + 1.28693373e-02f, -1.50261903e-02f, 5.60592421e-03f, -1.07630142e-02f, + 2.78874231e-03f, -8.77758054e-03f, 1.31524103e-03f, -7.66419022e-03f, + 4.48606156e-04f, -6.99726670e-03f, -7.33723714e-05f, -6.60805477e-03f, + -3.62820716e-04f, -6.42036476e-03f, -4.71116909e-04f, -6.40211414e-03f, + -4.14844760e-04f, -6.54965206e-03f, -1.85225026e-04f, -6.88527641e-03f, + 2.56335503e-04f, -7.46912626e-03f, 1.00064844e-03f, -8.43858858e-03f, + 2.26005720e-03f, -1.01342390e-02f, 4.60979552e-03f, -1.35873925e-02f, + 9.86642306e-03f, 3.16782222e-02f, 9.86519498e-02f, 5.57103472e-02f, + -2.46194747e-02f, 8.83174607e-03f, -1.17482903e-02f, 2.45343723e-03f, + -7.78552767e-03f, -3.70829008e-04f, -5.60598774e-03f, -2.08828274e-03f, + -4.80322253e-03f, 1.34197235e-01f, 4.95579800e-03f, -1.63036312e-02f, + 3.88448187e-02f, 3.39937871e-02f, -1.71890047e-02f, 5.06260292e-03f, + -9.74510056e-03f, 1.42740527e-03f, -7.53762715e-03f, -8.82224882e-05f, + -6.43227077e-03f, -9.42321505e-04f, -5.76454375e-03f, -1.48517555e-03f, + -5.33117174e-03f, -1.84310821e-03f, -5.04947227e-03f, -2.07234731e-03f, + -4.88041885e-03f, -2.20037023e-03f, -4.80434018e-03f, -2.24220243e-03f, + -4.80745423e-03f, -2.21042135e-03f, -4.88192415e-03f, -2.10713713e-03f, + -5.02951037e-03f, -1.92745948e-03f, -5.25881929e-03f, -1.65947784e-03f, + -5.58347048e-03f, -1.28468831e-03f, -6.03539408e-03f, -7.52040653e-04f, + -6.68857844e-03f, 4.51471081e-05f, -7.70170671e-03f, 1.35261603e-03f, + -9.47597654e-03f, 3.87367653e-03f, -1.33753489e-02f, 1.07003079e-02f, + -2.87435598e-02f, 9.15585585e-02f, 5.46491747e-02f, -2.66013262e-02f, + 1.11804718e-02f, -1.46593403e-02f, 5.52251991e-03f, -1.14421394e-02f, + 3.53451396e-03f, -1.02082425e-02f, 2.81470268e-03f, -9.91502284e-03f, + 2.90874907e-03f, -1.04533471e-02f, 4.01272286e-03f, -1.24516339e-02f, + 7.66271861e-03f, -2.01527160e-02f, 3.27904588e-02f, 1.04591319e-01f, + -2.37656141e-02f, 7.16791263e-03f, -1.07922278e-02f, 1.73861055e-03f, + -7.79936512e-03f, -1.64608126e-04f, -6.49072506e-03f, -1.13049062e-03f, + -5.75620632e-03f, -1.71927339e-03f, -5.28284013e-03f, -2.12042071e-03f, + -4.94825585e-03f, -2.41607759e-03f, -4.69582943e-03f, -2.64626889e-03f, + -4.49672220e-03f, -2.83194285e-03f, -4.33582563e-03f, -2.98376640e-03f, + -4.20590565e-03f, -3.10632495e-03f, -4.10615816e-03f, -3.19370609e-03f, + -4.04799786e-03f, -3.23360986e-03f, -4.04551160e-03f, -3.20337138e-03f, + -4.13888819e-03f, -3.02966668e-03f, -4.47079585e-03f, -2.40304174e-03f, + -5.85132595e-03f, 1.87077901e-03f, 1.15389427e-01f, -1.17632416e-02f, + 2.09328137e-03f, -9.34684335e-03f, 3.28990032e-03f, -1.44228908e-02f, + 2.45882587e-02f, 5.07686671e-02f, -1.99474463e-02f, 7.54817425e-03f, + -1.37143229e-02f, 7.17398372e-03f, -1.83862531e-02f, 3.17922424e-02f, + 3.55508665e-02f, -1.45466808e-02f, 2.18246148e-03f, -7.50411464e-03f, + -9.53253743e-04f, -5.73209162e-03f, -2.10731897e-03f, -4.91905508e-03f, + -2.73139493e-03f, -4.42371929e-03f, -3.15460125e-03f, -4.06023364e-03f, + -3.48844575e-03f, -3.75820084e-03f, -3.78123241e-03f, -3.48154569e-03f, + -4.06098146e-03f, -3.20755534e-03f, -4.34740252e-03f, -2.91780566e-03f, + -4.65905916e-03f, -2.59221907e-03f, -5.01913110e-03f, -2.20255720e-03f, + -5.46348591e-03f, -1.70154858e-03f, -6.05692965e-03f, -9.96854880e-04f, + -6.93526170e-03f, 1.19179659e-04f, -8.43513315e-03f, 2.23566502e-03f, + -1.16987753e-02f, 7.94174090e-03f, -2.45528231e-02f, 7.56652994e-02f, + 4.54330160e-02f, -2.34562866e-02f, 9.07670941e-03f, -1.35689645e-02f, + 4.49375180e-03f, -1.10817396e-02f, 3.10665853e-03f, -1.04368488e-02f, + 3.07205185e-03f, -1.10882208e-02f, 4.74681133e-03f, -1.52305649e-02f, + 5.53121277e-02f, -1.21436070e-02f, 3.23358057e-02f, 3.16425141e-02f, + -1.57662657e-02f, 3.38776250e-03f, -8.83817129e-03f, 1.62419825e-04f, + -7.00059417e-03f, -1.00575005e-03f, -6.22421605e-03f, -1.54639209e-03f, + -5.85472725e-03f, -1.80405305e-03f, -5.69385534e-03f, -1.89967949e-03f, + -5.66514382e-03f, -1.88223338e-03f, -5.73778284e-03f, -1.76976422e-03f, + -5.90349240e-03f, -1.56221157e-03f, -6.17013276e-03f, -1.24358030e-03f, + -6.56333489e-03f, -7.75945820e-04f, -7.13754958e-03f, -8.11739396e-05f, + -8.00795366e-03f, 1.01658819e-03f, -9.44970210e-03f, 2.96814413e-03f, + -1.22720351e-02f, 7.43744246e-03f, -2.07762403e-02f, 3.48787612e-02f, + 2.05426098e-02f, 7.63015568e-02f, 2.82090031e-02f, -1.96596986e-02f, + 6.86925709e-03f, -1.18853299e-02f, 2.60027712e-03f, -9.13373764e-03f, + 6.46688286e-04f, -7.67114158e-03f, -5.06463751e-04f, -6.74329386e-03f, + -1.28252400e-03f, -6.09274958e-03f, -1.84761741e-03f, -5.60729247e-03f, + -2.28036648e-03f, -5.23017839e-03f, -2.62269588e-03f, -4.92979350e-03f, + -2.89902313e-03f, -4.68690245e-03f, -3.12516253e-03f, -4.48700399e-03f, + -3.31466123e-03f, -4.31913521e-03f, -3.47560741e-03f, -4.17678380e-03f, + -3.61370399e-03f, -4.05488610e-03f, -3.73351007e-03f, -3.94927334e-03f, + -3.83889616e-03f, -3.85629609e-03f, -3.93335605e-03f, -3.77255804e-03f, + -4.02024262e-03f, -3.69570610e-03f, -4.09884438e-03f, -3.62869771e-03f, + -4.16861237e-03f, -3.56715958e-03f, -4.23702396e-03f, -3.50263125e-03f, + -4.31221711e-03f, -3.42871667e-03f, -4.39919383e-03f, -3.33981473e-03f, + -4.50540630e-03f, -3.22655260e-03f, -4.64194453e-03f, -3.07410668e-03f, + -4.83206004e-03f, -2.84618892e-03f, -5.13068436e-03f, -2.45783315e-03f, + -5.67571972e-03f, -1.67025750e-03f, -6.91994435e-03f, 5.01749776e-04f, + -1.15907587e-02f, 1.79822594e-02f, 3.46157149e-02f, -1.57721917e-02f, + 3.80748347e-03f, -1.01093527e-02f, 1.55938716e-03f, -9.11461450e-03f, + 1.21529903e-03f, -9.22827461e-03f, 1.71702691e-03f, -1.01672074e-02f, + 3.22170598e-03f, -1.25846144e-02f, 7.36785810e-03f, -2.11093665e-02f, + 3.65875480e-02f, 7.32348212e-02f, -2.16011138e-02f, 5.18561444e-03f, + -9.54304629e-03f, -3.99642509e-04f, -6.05221014e-03f, -3.05993854e-03f, + -3.65605515e-03f, -5.66094153e-03f, -1.62762443e-04f, -1.21027644e-02f, + 2.51476697e-02f, 2.68453091e-02f, -1.51633451e-02f, 3.11838799e-03f, + -9.20099532e-03f, 1.85838566e-04f, -7.39944119e-03f, -1.06972147e-03f, + -6.46840564e-03f, -1.80218736e-03f, -5.88472821e-03f, -2.28758120e-03f, + -5.48623487e-03f, -2.62772880e-03f, -5.20665531e-03f, -2.86600825e-03f, + -5.01718196e-03f, -3.02338401e-03f, -4.90151201e-03f, -3.11204149e-03f, + -4.85095937e-03f, -3.13787279e-03f, -4.86224886e-03f, -3.10164513e-03f, + -4.93702203e-03f, -2.99943773e-03f, -5.08128402e-03f, -2.82145562e-03f, + -5.31284411e-03f, -2.53786180e-03f, -5.67976695e-03f, -2.06183837e-03f, + -6.36233246e-03f, -9.55145874e-04f, -8.89248447e-03f, 9.00277310e-02f, + -2.03684182e-03f, -3.81904525e-03f, -5.12409490e-03f, -2.26945596e-03f, + -6.38171996e-03f, -1.00080304e-03f, -7.86412214e-03f, 9.06843686e-04f, + -1.06028475e-02f, 5.36538521e-03f, -1.96335495e-02f, 3.72106481e-02f, + 6.97923987e-02f, -2.41225435e-02f, 7.80530354e-03f, -1.25553943e-02f, + 2.68932894e-03f, -9.67919683e-03f, 8.70979038e-04f, -8.47621941e-03f, + 6.29592200e-05f, -7.97650018e-03f, -1.78017562e-04f, -8.01941989e-03f, + 2.14686326e-04f, -8.98418285e-03f, 2.32898173e-03f, -1.45910028e-02f, + 4.90191614e-02f, 1.05996356e-02f, -1.02222515e-02f, -1.76969889e-04f, + -6.95454105e-03f, -1.70516266e-03f, -6.13799521e-03f, -2.15952002e-03f, + -5.92277233e-03f, -2.19815928e-03f, -6.08343402e-03f, -1.73490535e-03f, + -7.45082049e-03f, 4.23180185e-02f, -3.06007347e-03f, -3.85427746e-03f, + -4.76994190e-03f, -3.11727713e-03f, -5.29046549e-03f, -2.65425301e-03f, + -5.78495040e-03f, -2.08120235e-03f, -6.52061544e-03f, -1.07850276e-03f, + -8.03408815e-03f, 1.49758123e-03f, -1.35955233e-02f, 2.57551342e-02f, + 2.31870937e-02f, -1.35720932e-02f, 1.67357588e-03f, -8.29869971e-03f, + -7.94758132e-04f, -6.87550298e-03f, -1.71338896e-03f, -6.25851667e-03f, + -2.14477256e-03f, -5.96944662e-03f, -2.33447637e-03f, -5.87410486e-03f, + -2.35600034e-03f, -5.93676765e-03f, -2.21492326e-03f, -6.18333422e-03f, + -1.84689804e-03f, -6.73644496e-03f, -1.02137088e-03f, -8.05627861e-03f, + 1.30240023e-03f, -1.31356640e-02f, 2.14811845e-02f, 3.34896688e-02f, + -1.70992437e-02f, 5.86324215e-03f, -1.61662801e-02f, 5.34919270e-02f, + -1.04510781e-03f, 2.97348639e-02f, 1.40479831e-02f, -1.50663771e-02f, + 5.25220604e-03f, -1.34767848e-02f, 5.94250181e-03f, -1.59509391e-02f, + 1.09546937e-02f, -2.69004347e-02f, 5.21618704e-02f, 6.33907331e-02f, + -1.99920637e-02f, 1.28250344e-03f, -2.92475755e-03f, -1.50911084e-02f, + 5.89054146e-02f, 4.19659217e-02f, -2.55215568e-02f, 1.13641286e-02f, + -1.75797569e-02f, 9.03658938e-03f, -1.98805639e-02f, 2.74585668e-02f, + 2.67472823e-02f, -1.08300868e-02f, -1.44497433e-03f, -5.47804938e-03f, + -3.57813569e-03f, -4.42770186e-03f, -4.16112857e-03f, -4.08862752e-03f, + -4.37726203e-03f, -3.95072141e-03f, -4.47953522e-03f, -3.87806250e-03f, + -4.54459081e-03f, -3.82615624e-03f, -4.59825204e-03f, -3.78103434e-03f, + -4.64639283e-03f, -3.74402991e-03f, -4.67701885e-03f, -3.74629286e-03f, + -4.62080951e-03f, -3.94540531e-03f, -4.06999785e-03f, -5.81798624e-03f, + 4.13267131e-02f, 2.45105483e-03f, -9.10428604e-03f, 5.03369366e-04f, + -9.30629987e-03f, 1.65165057e-03f, -1.14864902e-02f, 5.63909747e-03f, + -2.04770492e-02f, 7.50626854e-02f, -3.24827299e-04f, 6.71584410e-02f, + 2.26419791e-02f, -1.81552190e-02f, 5.75057798e-03f, -1.23345842e-02f, + 2.81095864e-03f, -1.06963910e-02f, 1.93113443e-03f, -1.03873373e-02f, + 2.14660064e-03f, -1.12541871e-02f, 4.04610015e-03f, -1.55005243e-02f, + 1.85142731e-02f, 3.10984771e-02f, -7.85996893e-03f, -8.66409641e-03f, + 3.39699969e-02f, 1.47012679e-02f, -1.31765454e-02f, 1.88988528e-03f, + -9.11527383e-03f, -1.27434897e-04f, -7.98072604e-03f, -7.79360343e-04f, + -7.62655342e-03f, -1.20498068e-03f, -3.06795636e-03f, 1.07523395e-01f, + 1.15456948e-02f, -9.15477056e-03f, -1.81224978e-03f, -5.75843751e-03f, + -3.30355744e-03f, -4.95361742e-03f, -3.80004869e-03f, -4.62996508e-03f, + -4.03188034e-03f, -4.46396448e-03f, -4.16544503e-03f, -4.35963024e-03f, + -4.26167512e-03f, -4.27614413e-03f, -4.34716909e-03f, -4.19741924e-03f, + -4.43276204e-03f, -4.11393855e-03f, -4.52752485e-03f, -4.01675452e-03f, + -4.64109818e-03f, -3.89436802e-03f, -4.78830537e-03f, -3.72662484e-03f, + -4.99799705e-03f, -3.47054928e-03f, -5.33734252e-03f, -3.01167577e-03f, + -6.02171657e-03f, -1.89433745e-03f, -8.23792942e-03f, 4.90820212e-03f, + 3.50358673e-02f, -1.11736259e-02f, -3.44537661e-04f, -7.25127569e-03f, + -1.90891534e-03f, -6.44954279e-03f, -2.36504911e-03f, -6.19966901e-03f, + -2.48681424e-03f, -6.18458436e-03f, -2.41944606e-03f, -6.34509798e-03f, + -2.16647389e-03f, -6.72394514e-03f, -1.63200019e-03f, -7.49941747e-03f, + -4.83170119e-04f, -9.34208055e-03f, 2.85487148e-03f, -1.73109761e-02f, + 6.23295300e-02f, 1.71248740e-02f, -1.36659847e-02f, 1.66377399e-03f, + -8.84830953e-03f, -6.77554327e-04f, -7.64427721e-03f, 3.91742538e-02f, + -6.13375880e-03f, -2.56786073e-03f, -6.06260615e-03f, -2.73193369e-03f, + -5.93658431e-03f, -2.80825994e-03f, -5.93279932e-03f, -2.73487716e-03f, + -6.11991108e-03f, -2.40007362e-03f, -6.69452422e-03f, -1.43847609e-03f, + -8.39790525e-03f, 1.89367893e-03f, -1.66803041e-02f, 5.08393101e-02f, + 3.21152755e-02f, -2.26504974e-02f, 1.11668480e-02f, -2.20358153e-02f, + 3.01144357e-02f, 9.90274527e-03f, 1.95569627e-02f, 1.98883385e-02f, + -1.35101297e-02f, 9.65978685e-04f, -7.93153776e-03f, -2.00796590e-03f, + -5.80700466e-03f, -4.37128806e-03f, 3.90654853e-02f, -9.65622826e-04f, + -6.53029053e-03f, -2.79851391e-03f, -5.67475656e-03f, -3.36965210e-03f, + -5.24446892e-03f, -3.72836102e-03f, -4.93939205e-03f, -4.00686509e-03f, + -4.68758425e-03f, -4.25000836e-03f, -4.45880591e-03f, -4.47824494e-03f, + -4.23833069e-03f, -4.70566290e-03f, -4.01012883e-03f, -4.95044806e-03f, + -3.75271441e-03f, -5.24005593e-03f, -3.42889792e-03f, -5.62738623e-03f, + -2.95961143e-03f, -6.23774966e-03f, -2.12864966e-03f, -7.48779433e-03f, + -1.46169342e-06f, -1.21597910e-02f, 2.40477058e-02f, 1.14810087e-02f, + -9.62149001e-03f, -3.47535251e-03f, 3.04125069e-02f, 4.31479001e-03f, + -1.02450211e-02f, 5.00072568e-04f, -9.11827599e-03f, 3.23910123e-04f, + -9.70241590e-03f, 1.99374027e-03f, -1.40832510e-02f, 2.35941948e-02f, + 1.84621529e-02f, -1.37196244e-02f, 6.30259004e-03f, 3.24512906e-02f, + -1.13281203e-02f, 8.38279127e-04f, -1.01180863e-02f, 2.76890896e-03f, + -1.56725124e-02f, 2.30438021e-02f, 5.50927556e-02f, -1.89661819e-02f, + 3.93285130e-03f, -1.04568336e-02f, 2.04013224e-04f, -8.25243413e-03f, + -1.48346149e-03f, -6.40314036e-03f, -4.97718689e-03f, 1.02020353e-02f, + 2.77482322e-02f, -2.79514197e-02f, 6.60929489e-02f, 1.04289076e-02f, + -7.14219563e-03f, -5.41868703e-03f, -1.17173753e-03f, -1.08057176e-02f, + 1.08281828e-02f, 2.75861314e-02f, -1.02388248e-02f, -2.56137671e-03f, + -4.60196863e-03f, -5.66957602e-03f, -2.16088350e-03f, -8.11587603e-03f, + 9.16588969e-04f, -1.35925646e-02f, 3.38222567e-02f, 2.85293988e-03f, + -4.59578811e-03f, -7.33865730e-03f, 7.52271383e-04f, -1.26220399e-02f, + 7.96856972e-03f, -2.61079376e-02f, 6.04948572e-02f, 3.46553057e-02f, + 3.66068169e-02f, 3.15822716e-02f, -2.36964984e-02f, 9.28218019e-03f, + -1.55404507e-02f, 4.80620131e-03f, -1.27284872e-02f, 2.93238355e-03f, + -1.14868168e-02f, 2.16472478e-03f, -1.11476108e-02f, 2.26248803e-03f, + -1.18097097e-02f, 3.80289057e-03f, -1.52244949e-02f, 1.44232220e-02f, + 1.57953220e-02f, 1.20576923e-02f, 1.97282486e-02f, -1.24679225e-02f, + -1.74689955e-04f, -7.23853523e-03f, -2.84998705e-03f, -5.52329403e-03f, + -4.11781274e-03f, -4.49649089e-03f, -5.02613559e-03f, -3.64937293e-03f, + -5.86809231e-03f, -2.78396417e-03f, -6.80608551e-03f, -1.73673891e-03f, + -8.03795048e-03f, -2.22776063e-04f, -1.00487680e-02f, 2.75621723e-03f, + -1.56596200e-02f, 3.00811796e-02f, 8.63357258e-04f, 5.22908284e-04f, + -1.86319425e-02f, 5.02029719e-02f, 3.59310603e-02f, -1.88773364e-02f, + 3.14806210e-03f, -8.52930630e-03f, -4.38313186e-03f, 4.86808647e-03f, + 2.71948556e-02f, -1.47504822e-02f, 2.01581539e-03f, -9.40520939e-03f, + -1.02036842e-03f, -6.84538805e-03f, -4.59473737e-03f, 2.45695543e-02f, + 3.97675788e-03f, -1.01986313e-02f, 1.24756595e-04f, -8.91970602e-03f, + -3.47520419e-04f, -8.98537179e-03f, 2.80971762e-04f, -1.04767643e-02f, + 3.50073171e-03f, -1.88090586e-02f, 5.90196956e-02f, 2.43112347e-02f, + -1.77734550e-02f, 4.91761116e-03f, -1.28749808e-02f, 3.51202595e-03f, + -1.34331325e-02f, 6.25793066e-03f, -2.09838843e-02f, 4.23106207e-02f, + 3.37726767e-02f, -1.70000663e-02f, 2.43148730e-03f, -9.37557969e-03f, + -1.09421559e-03f, -7.34944591e-03f, -2.41200083e-03f, -6.42972511e-03f, + -3.09833794e-03f, -5.90273410e-03f, -3.52491755e-03f, -5.55527060e-03f, + -3.82359983e-03f, -5.30031879e-03f, -4.05464040e-03f, -5.09557000e-03f, + -4.24815729e-03f, -4.91857279e-03f, -4.42173338e-03f, -4.75498325e-03f, + -4.58779713e-03f, -4.59305316e-03f, -4.75800384e-03f, -4.42111068e-03f, + -4.94486058e-03f, -4.22428394e-03f, -5.16739910e-03f, -3.97674483e-03f, + -5.46269997e-03f, -3.62213889e-03f, -5.92212094e-03f, -3.00070603e-03f, + -6.85740903e-03f, -1.38743726e-03f, -1.05854708e-02f, 2.45758851e-02f, + 5.98759458e-03f, 2.38186927e-02f, -2.12780059e-03f, -6.54731280e-03f, + -3.15432174e-03f, -5.89515519e-03f, -3.60312086e-03f, -5.57654549e-03f, + -3.84443730e-03f, -5.39715553e-03f, -3.98643420e-03f, -5.29234719e-03f, + -4.06982289e-03f, -5.23550573e-03f, -4.11244868e-03f, -5.21452047e-03f, + -4.12246534e-03f, -5.22411941e-03f, -4.10293249e-03f, -5.26306220e-03f, + -4.05346967e-03f, -5.33332424e-03f, -3.97030348e-03f, -5.44089803e-03f, + -3.84472611e-03f, -5.59798411e-03f, -3.65960117e-03f, -5.82896665e-03f, + -3.37949409e-03f, -6.18694712e-03f, -2.92146473e-03f, -6.80904382e-03f, + -2.04063374e-03f, -8.18310729e-03f, 4.19510842e-04f, -1.41532026e-02f, + 5.46680077e-02f, 4.23881761e-02f, -9.33207526e-03f, -1.62250938e-03f, + -6.84898295e-03f, -3.15801589e-03f, -5.77092129e-03f, -4.04723009e-03f, + -4.89866015e-03f, -5.18036824e-03f, -2.45576257e-03f, 2.78487718e-02f, + -7.95905491e-03f, -2.76918255e-03f, -6.14222687e-03f, -3.55818329e-03f, + -5.67533944e-03f, -3.88381129e-03f, -5.43614965e-03f, -4.07567802e-03f, + -5.28463580e-03f, -4.20578791e-03f, -5.17870700e-03f, -4.30130360e-03f, + -5.09963167e-03f, -4.37532020e-03f, -5.03698511e-03f, -4.43991578e-03f, + -4.97345122e-03f, -4.52183293e-03f, -4.86252435e-03f, -4.71517190e-03f, + -4.47193223e-03f, -5.85597699e-03f, 5.14005810e-02f, -1.65874327e-03f, + -6.84474892e-03f, -2.82195832e-03f, -6.66803318e-03f, -2.65824012e-03f, + -7.08691799e-03f, -1.95817879e-03f, -8.22516818e-03f, -4.75257368e-08f, + -1.22344243e-02f, 1.29015853e-02f, 5.34761103e-02f, -1.63836813e-02f, + 2.11246130e-03f, -9.94349115e-03f, -2.21859918e-04f, -9.19030176e-03f, + 2.30738858e-04f, -1.16531238e-02f, 1.17212455e-02f, 1.89637802e-02f, + -1.15399880e-02f, -5.13224400e-04f, -8.20212846e-03f, -1.46501302e-03f, + -8.37769878e-03f, -1.82530760e-04f, -1.18163062e-02f, 1.21535554e-02f, + 4.64656135e-02f, -1.61457439e-02f, 2.26533245e-03f, -1.02801488e-02f, + 8.15363670e-05f, -9.36601802e-03f, -1.76806363e-04f, -9.58513082e-03f, + 4.98264976e-04f, -1.08656314e-02f, 2.81499125e-03f, -1.57569050e-02f, + 2.25733819e-02f, 1.15378861e-02f, -5.35801253e-03f, -1.11800784e-02f, + 2.14936481e-02f, 7.56184185e-02f, -1.71384123e-02f, 3.31824951e-03f, + -1.09160154e-02f, 2.16935721e-04f, -9.08477621e-03f, -9.70940259e-04f, + -8.28791635e-03f, -1.51484146e-03f, -7.93576187e-03f, -1.72369888e-03f, + -7.85724029e-03f, -1.69112637e-03f, -8.00796595e-03f, -1.42330389e-03f, + -8.42143786e-03f, -8.35656507e-04f, -9.25965148e-03f, 3.72040956e-04f, + -1.11100696e-02f, 3.50159070e-03f, -1.76644486e-02f, 2.92314932e-02f, + 3.15389995e-02f, -1.49170467e-02f, 2.32951439e-04f, -7.55865713e-03f, + -3.51895529e-03f, -4.96381976e-03f, -5.77300258e-03f, -2.54619816e-03f, + -9.12008082e-03f, 4.67533070e-03f, 1.50584971e-02f, 1.29423343e-02f, + 1.41783022e-02f, -1.25006215e-02f, -2.19566285e-04f, -7.67920742e-03f, + -3.45470242e-03f, -4.37307012e-03f, -8.92577611e-03f, 6.51109307e-02f, + 2.10889764e-02f, -1.61934149e-02f, 3.74573384e-03f, -1.24518989e-02f, + 2.59127771e-03f, -1.26774201e-02f, 4.24475929e-03f, -1.69504785e-02f, + 7.86497311e-02f, 1.51392907e-02f, -8.10265414e-03f, -7.71847540e-03f, + 1.53010954e-02f, 1.25488021e-02f, 1.82177690e-02f, 9.72648160e-04f, + -8.91775629e-03f, -1.68308072e-03f, -7.43992946e-03f, -2.67063472e-03f, + -6.72738708e-03f, -3.21930298e-03f, -6.29555281e-03f, -3.57633694e-03f, + -6.00087358e-03f, -3.83077241e-03f, -5.78577039e-03f, -4.02209092e-03f, + -5.62157770e-03f, -4.17156774e-03f, -5.49256550e-03f, -4.29035549e-03f, + -5.39152075e-03f, -4.38267139e-03f, -5.31591888e-03f, -4.45063275e-03f, + -5.26387616e-03f, -4.49505347e-03f, -5.23614101e-03f, -4.51341575e-03f, + -5.23825195e-03f, -4.49437614e-03f, -5.29111378e-03f, -4.39806522e-03f, + -5.49097597e-03f, -3.86200810e-03f, 2.84969483e-02f, -5.27701329e-03f, + -4.85691255e-03f, -4.75209880e-03f, -5.12608083e-03f, -4.54367821e-03f, + -5.33817162e-03f, -4.30099478e-03f, -5.66718336e-03f, -3.78331050e-03f, + -6.83024740e-03f, 2.22805453e-02f, -3.71405659e-03f, -4.94602384e-03f, + -5.45378749e-03f, -3.61151074e-03f, -7.62927004e-03f, 3.65593419e-03f, + 2.00553146e-02f, -1.39839158e-02f, 5.30289949e-02f, -7.01882118e-03f, + 2.81787647e-02f, -1.62221672e-03f, -6.33757019e-03f, -3.98410178e-03f, + -5.65072013e-03f, -4.18279154e-03f, -5.79072818e-03f, -3.35502488e-03f, + 2.15081000e-02f, -6.09599966e-03f, -4.33465152e-03f, -5.29339733e-03f, + -4.63488608e-03f, -5.14231713e-03f, -4.72736861e-03f, -5.08773989e-03f, + -4.76450686e-03f, -5.07022917e-03f, -4.77418913e-03f, -5.07459774e-03f, + -4.76519985e-03f, -5.09580826e-03f, -4.74033114e-03f, -5.13280546e-03f, + -4.69865341e-03f, -5.18807904e-03f, -4.63743642e-03f, -5.26423604e-03f, + -4.55354780e-03f, -5.36540031e-03f, -4.44163547e-03f, -5.49846261e-03f, + -4.29251400e-03f, -5.67630799e-03f, -4.08765127e-03f, -5.92605141e-03f, + -3.78619085e-03f, -6.31286292e-03f, -3.27400737e-03f, -7.06168841e-03f, + -2.02699779e-03f, -9.86463933e-03f, 2.02647978e-02f, 6.79720929e-04f, + -6.81027257e-03f, -4.25685019e-03f, -4.99494344e-03f, -5.38625829e-03f, + -4.09087909e-03f, -6.25966370e-03f, -3.12295350e-03f, -7.50254697e-03f, + -1.25832971e-03f, -1.11097460e-02f, 1.20030409e-02f, 1.50731464e-02f, + -1.05467544e-02f, -2.21591582e-03f, -6.29050580e-03f, -4.72106977e-03f, + -4.03575385e-03f, 1.75730225e-02f, 8.84267894e-03f, 1.43882308e-02f, + -1.18059644e-02f, -4.97553251e-04f, -8.42262338e-03f, -2.09539742e-03f, + -7.47843472e-03f, -2.73359146e-03f, -6.99841789e-03f, -3.19683858e-03f, + -6.18382547e-03f, 2.32833472e-02f, -8.49407105e-03f, -1.74037456e-03f, + -8.39595485e-03f, -1.10136698e-03f, -9.74658110e-03f, 1.54251028e-03f, + -1.60536534e-02f, 3.70827210e-02f, 1.76504286e-02f, -1.39764707e-02f, + 7.16068300e-04f, -9.26161424e-03f, -1.48922011e-03f, -8.04486769e-03f, + -2.20007423e-03f, -7.65910923e-03f, -2.34919237e-03f, -7.71225548e-03f, + -2.30435245e-03f, 2.09167901e-02f, 1.19058339e-02f, 1.17266805e-02f, + -9.09152628e-03f, -3.03455635e-03f, -6.11499100e-03f, -4.35466467e-03f, + -5.35763261e-03f, -4.86711377e-03f, -4.97522544e-03f, -5.18709250e-03f, + -4.69137717e-03f, -5.46565314e-03f, -4.40766803e-03f, -5.77931716e-03f, + -4.05169109e-03f, -6.21586374e-03f, -3.48969937e-03f, -7.01928908e-03f, + -2.17177890e-03f, -9.95969776e-03f, 2.25286341e-02f, 6.42900456e-04f, + -6.91738947e-03f, -4.35361816e-03f, -4.95794895e-03f, -5.68568954e-03f, + -3.75111283e-03f, -7.05897096e-03f, -1.82033039e-03f, -1.07557135e-02f, + 1.46733653e-02f, 7.13391591e-03f, -8.71077726e-03f, -3.89223490e-03f, + -3.42788645e-03f, 2.39922097e-02f, -8.44616460e-03f, -3.26170028e-03f, + -6.03784162e-03f, -4.56250998e-03f, -5.08502494e-03f, -5.37714586e-03f, + -4.32705701e-03f, -6.14271610e-03f, -3.51118445e-03f, -7.07890713e-03f, + -2.36332819e-03f, -8.64010977e-03f, 7.91513353e-05f, -1.36137796e-02f, + 2.05447102e-02f, 4.22621629e-02f, 8.56562619e-03f, -1.02573582e-02f, + 1.67995813e-02f, 7.24421722e-03f, 2.35166765e-02f, -2.02468118e-02f, + 5.29890870e-02f, 1.29473441e-02f, -1.00015085e-02f, -6.79040253e-03f, + 2.21712481e-02f, 4.26174751e-02f, -3.49425491e-03f, -1.44045843e-03f, + -8.76343454e-03f, -1.61120981e-03f, -8.28132168e-03f, -2.02847661e-03f, + -7.98742358e-03f, -2.20109231e-03f, -7.94689552e-03f, -2.10428472e-03f, + -8.22045770e-03f, -1.59566558e-03f, -9.11055145e-03f, 4.99838051e-06f, + -1.24946338e-02f, 1.17148677e-02f, 2.64154865e-02f, -1.18791560e-02f, + -1.75779951e-03f, -6.95806979e-03f, -4.03577162e-03f, -5.53571036e-03f, + -5.11101253e-03f, -4.60060402e-03f, -6.04724671e-03f, -3.53754814e-03f, + -7.46190630e-03f, -1.24205001e-03f, -1.27605942e-02f, 3.54248831e-02f, + 4.40715830e-02f, 2.12037100e-03f, -7.07409373e-03f, -3.37515254e-03f, + -7.26297436e-03f, -2.01311235e-03f, -1.00431357e-02f, 6.88867675e-03f, + 1.35983365e-02f, -8.79965852e-03f, -4.06348391e-03f, -4.64311913e-03f, + -6.90664460e-03f, -1.55358543e-03f, -1.18965997e-02f, 1.37429035e-02f, + 3.07089506e-02f, -1.35766264e-02f, -2.29730528e-03f, 1.68760820e-03f, + 7.11673727e-02f, 7.05337879e-04f, -3.39475633e-03f, -7.47689491e-03f, + -2.69347682e-03f, -7.49883520e-03f, -2.73578921e-03f, -7.55496483e-03f, + -2.47601531e-03f, -8.27249252e-03f, -1.28884207e-04f, 1.71865186e-02f, + -5.97710484e-03f, -5.88457886e-03f, -2.57819077e-03f, 2.51095071e-02f, + -7.19192054e-03f, -3.94855693e-03f, -6.92855546e-03f, 1.21833830e-02f, + 1.48722010e-02f, 2.10711300e-02f, -1.01985915e-02f, -2.56472356e-03f, + -6.76762833e-03f, -3.97662482e-03f, -5.98290814e-03f, -4.49593519e-03f, + -5.60538077e-03f, -4.79768888e-03f, -5.35765279e-03f, -5.01033175e-03f, + -5.19663521e-03f, -5.05870369e-03f, -5.66871985e-03f, 2.34933619e-02f, + -6.28614204e-04f, -1.09575055e-02f, 1.09525501e-02f, 3.92856520e-02f, + 3.09494895e-03f, -4.42414990e-03f, -6.25996967e-03f, -4.09850914e-03f, + -6.05445431e-03f, -4.44929061e-03f, -5.45262144e-03f, -6.09592963e-03f, + 1.31817934e-02f, 1.05226285e-02f, 5.79027844e-02f, -3.18635899e-03f, + -7.64374706e-03f, -1.56893085e-03f, -1.14555792e-02f, 2.12608215e-02f, + 5.16638938e-02f, -8.43180013e-03f, -2.96152345e-03f, -6.72997307e-03f, + -3.98562598e-03f, -6.07420547e-03f, -4.44192604e-03f, -5.76007712e-03f, + -4.58837479e-03f, 1.61460646e-02f, -5.28929363e-03f, -5.04012480e-03f, + -5.37512468e-03f, -4.86459308e-03f, -5.59323975e-03f, -4.61546465e-03f, + -5.88883804e-03f, -4.26276931e-03f, -6.33705351e-03f, -3.66742197e-03f, + -7.20939848e-03f, -2.21680886e-03f, -1.03280670e-02f, 1.26585152e-02f, + 7.25998075e-03f, -9.73600855e-03f, -2.43852422e-03f, -7.11029512e-03f, + -3.72345513e-03f, -6.34329636e-03f, -4.22611026e-03f, -6.03708199e-03f, + -4.23942440e-03f, 2.43179235e-02f, -5.46891299e-03f, -5.00340288e-03f, + -5.42995866e-03f, -4.85175047e-03f, -5.66624768e-03f, -4.54263083e-03f, + -6.09193223e-03f, -3.89334024e-03f, -7.43636796e-03f, 1.66774284e-02f, + -4.37262166e-03f, -4.55418339e-03f, -6.91178880e-03f, -1.86142678e-03f, + -1.25087308e-02f, 2.84650813e-02f, 2.18142926e-02f, -2.05466536e-02f, + 1.66690342e-02f, 1.15937671e-02f, -6.63288596e-03f, -7.01265991e-03f, + 1.16978001e-03f, 1.55122904e-02f, -5.25027710e-03f, 4.27349340e-02f, + 7.72106519e-03f, -3.25114920e-03f, -7.59497529e-03f, -2.68993097e-03f, + -7.96558662e-03f, -2.03560608e-03f, -9.23977357e-03f, 9.46188482e-04f, + 9.47274093e-03f, 9.30029695e-03f, 1.67981162e-02f, -1.22331562e-02f, + -1.02201689e-03f, -8.02927621e-03f, -4.08509279e-03f, 2.24466987e-02f, + 4.42212083e-03f, -1.59721188e-02f, 2.08402395e-02f, 2.94191335e-02f, + -1.81134941e-02f, 4.42874275e-02f, -1.12123442e-02f, 1.52338398e-02f, + 7.60387818e-03f, -9.93681052e-03f, -2.24687854e-03f, -7.55893196e-03f, + -3.20487474e-03f, -7.14795570e-03f, -3.33561629e-03f, -7.20828834e-03f, + -3.12114006e-03f, -7.59369241e-03f, -2.51879178e-03f, -8.54891632e-03f, + -8.87174418e-04f, -1.19705694e-02f, 1.24226368e-02f, 1.41218548e-02f, + -1.06057080e-02f, -2.53066245e-03f, -6.80774571e-03f, -4.34492271e-03f, + -5.74278259e-03f, -4.95526737e-03f, -5.70971237e-03f, -3.05620770e-03f, + 2.57907336e-02f, -1.22801965e-02f, 1.67061408e-03f, -1.45658823e-02f, + 2.40876745e-02f, -6.10925067e-03f, 9.68400156e-03f, 3.19277838e-02f, + -1.17897869e-02f, -3.56916893e-03f, 5.23307665e-02f, 2.30631158e-02f, + -1.74304821e-02f, 3.35576674e-03f, -1.25876735e-02f, 1.98441790e-03f, + -1.45548617e-02f, 3.57233712e-02f, 3.07118034e-03f, 2.11463386e-02f, + -5.03798089e-03f, -5.55476789e-03f, -4.96970305e-03f, -5.62817506e-03f, + -4.82348505e-03f, -5.83403198e-03f, -4.58047435e-03f, -6.11190972e-03f, + -4.27797929e-03f, -6.44537934e-03f, -3.91752093e-03f, -6.84479928e-03f, + -3.47678223e-03f, -7.34583219e-03f, -2.90458117e-03f, -8.02165983e-03f, + -2.09081495e-03f, -9.04598768e-03f, -7.47424435e-04f, -1.09381434e-02f, + 2.19657217e-03f, -1.64887300e-02f, 1.97303138e-02f, 3.23888158e-02f, + -9.76359212e-03f, -9.82578360e-03f, 2.68645825e-02f, 4.32075688e-02f, + -2.06591097e-02f, 4.78624081e-03f, -1.31197775e-02f, 1.30416767e-03f, + -1.11540467e-02f, 1.22505307e-04f, -1.04837880e-02f, -1.52866045e-04f, + -1.05942541e-02f, 4.11576260e-04f, -1.18446775e-02f, 2.95583628e-03f, + -1.78385335e-02f, 3.01836442e-02f, 2.41041521e-02f, -1.45083407e-02f, + -2.77701360e-04f, -8.48234426e-03f, -3.25858294e-03f, -6.40171484e-03f, + -5.62008606e-03f, 1.56224773e-02f, -1.66940433e-03f, -7.19231075e-03f, + -4.69479644e-03f, -1.80951121e-03f, 5.15401991e-02f, 5.72812311e-04f, + -5.14652168e-03f, -6.31975141e-03f, -3.97531185e-03f, -6.94826286e-03f, + -3.20916831e-03f, -8.68913293e-03f, 1.45547661e-02f, -1.95015682e-03f, + -6.55402356e-03f, -4.70308109e-03f, -5.64501935e-03f, -5.17349153e-03f, + -5.34855136e-03f, -5.39499821e-03f, -5.16681141e-03f, -5.56611433e-03f, + -4.99709547e-03f, -5.75396180e-03f, -4.78280276e-03f, -6.02131258e-03f, + -4.43510272e-03f, -6.51898009e-03f, -3.64894080e-03f, -8.04146675e-03f, + 1.13460615e-03f, 1.24589840e-02f, -8.97699577e-03f, -3.37530701e-03f, + -6.61655335e-03f, -4.43591335e-03f, -5.98113463e-03f, -4.88560181e-03f, + -5.63237712e-03f, -5.18429308e-03f, -5.36367027e-03f, -5.44831439e-03f, + -5.09240476e-03f, -5.75542851e-03f, -4.72039970e-03f, -6.26945597e-03f, + -3.88380730e-03f, -8.19096129e-03f, 1.89443090e-02f, -1.66756036e-03f, + -6.95149145e-03f, -4.40556532e-03f, -5.94377612e-03f, -4.98688596e-03f, + -5.53422293e-03f, -5.32403351e-03f, -5.22900191e-03f, -5.63589187e-03f, + -4.88433680e-03f, -6.06350028e-03f, -4.30352656e-03f, -6.96522585e-03f, + -2.65786960e-03f, -1.10398234e-02f, 2.83101247e-02f, 9.55554693e-03f, + -1.48512281e-02f, 1.01374855e-02f, 5.32319370e-03f, -7.65537459e-03f, + -4.37876887e-03f, -6.00828793e-03f, -4.56398051e-03f, -7.37716110e-03f, + 1.09901410e-02f, 1.64300764e-02f, 9.36789286e-03f, -7.48635829e-03f, + 1.61337422e-02f, -8.17090862e-03f, -9.08556020e-04f, 1.30526045e-02f, + 9.57560074e-03f, 2.37120866e-02f, -4.84301260e-03f, -3.82724423e-03f, + -7.97506965e-03f, -1.31231404e-03f, -1.30004368e-02f, 3.40106226e-02f, + 8.23068871e-03f, -1.14808681e-02f, -1.23627716e-03f, -8.74138796e-03f, + -2.21620775e-03f, -9.20391772e-03f, 1.75211692e-02f, -3.78442324e-03f, + -5.68769835e-03f, -5.37124411e-03f, -5.34391133e-03f, -5.36253933e-03f, + -5.60097024e-03f, -4.73883392e-03f, -7.30802350e-03f, 1.47833008e-02f, + -6.14023586e-04f, -8.05695086e-03f, -3.44742032e-03f, -6.72567695e-03f, + -5.24868409e-03f, 2.75569240e-04f, 1.43703840e-02f, -1.58532158e-02f, + 5.39917206e-03f, -2.02506986e-02f, 3.67846459e-02f, 3.33786235e-03f, + 1.43691736e-02f, 7.02870950e-02f, -1.23001213e-02f, 3.53195204e-03f, + -1.42355768e-02f, 2.06157248e-02f, -5.98543698e-03f, -3.13445234e-03f, + -8.04559653e-03f, -2.58597252e-03f, -8.40575334e-03f, -2.13920478e-03f, + -9.12323261e-03f, -8.67277269e-04f, -1.17917843e-02f, 8.32310453e-03f, + 1.44080267e-02f, -8.28953604e-03f, -6.74859435e-03f, 1.50718541e-02f, + 2.37284335e-03f, -9.24018194e-03f, -2.80800135e-03f, -7.40178825e-03f, + -3.81089585e-03f, -6.76570789e-03f, -4.24634708e-03f, -6.47290916e-03f, + -4.41908885e-03f, -6.45339457e-03f, -4.17222262e-03f, -7.44752662e-03f, + 3.35985877e-02f, -7.36030888e-04f, -8.02855494e-03f, -3.12709948e-03f, + -7.87636385e-03f, -2.43165655e-03f, -9.77215924e-03f, 4.90579849e-03f, + 5.89922757e-03f, -7.60934671e-03f, -5.54222878e-03f, -5.96493727e-04f, + 1.99085949e-02f, 3.00693534e-02f, 1.27416761e-02f, -3.24182595e-03f, + -9.18005411e-03f, 2.68833672e-03f, 9.77976415e-03f, -7.69200714e-03f, + -5.12978233e-03f, -4.72457853e-03f, -6.98589505e-03f, 1.40655722e-02f, + -8.79729026e-03f, -3.25754256e-04f, -1.43270532e-02f, 2.38897739e-02f, + 1.31346253e-02f, -1.04158814e-02f, -5.25601883e-03f, 4.03347870e-03f, + 1.46011557e-02f, -1.28976973e-02f, -5.03554959e-04f, -9.21015893e-03f, + -2.40365163e-03f, -7.99283949e-03f, -3.27673631e-03f, -7.33050982e-03f, + -3.80308321e-03f, -6.90833945e-03f, -4.14640619e-03f, -6.64099248e-03f, + -4.34200272e-03f, -6.53696560e-03f, -4.32327578e-03f, -6.77138705e-03f, + -3.64513294e-03f, -8.75591547e-03f, 8.29706532e-03f, 4.97491530e-03f, + -1.06013116e-02f, -1.17627156e-03f, -9.83652385e-03f, -2.29753905e-04f, + -1.33570175e-02f, 2.68731330e-02f, 2.90203733e-03f, -7.78984629e-03f, + -5.00272024e-03f, -4.76955179e-03f, -7.26245817e-03f, -2.14353966e-03f, + -1.20288241e-02f, 1.93990146e-02f, 2.16116887e-02f, 4.96354611e-03f, + -3.42470890e-03f, -7.16505289e-03f, -4.28512547e-03f, -6.16179647e-03f, + -5.32851832e-03f, -4.85065482e-03f, -7.70998925e-03f, 8.27095106e-03f, + 1.20210119e-03f, -8.30205569e-03f, -4.52381539e-03f, 5.76444853e-03f, + 2.09111214e-02f, -3.00722160e-03f, -5.41119860e-03f, -5.99851178e-03f, + -4.82706197e-03f, -6.18532990e-03f, -4.74966557e-03f, -6.24465852e-03f, + -4.67234142e-03f, -6.38445251e-03f, -4.40577787e-03f, -6.97973626e-03f, + -2.46980797e-03f, 1.28368109e-02f, -8.49229969e-03f, 1.18646338e-02f, + -4.41966401e-03f, -6.08112374e-03f, -4.92193301e-03f, -6.15702470e-03f, + -4.62573502e-03f, -6.71824818e-03f, -3.53848174e-03f, -9.36319698e-03f, + 8.99587527e-03f, 2.78105456e-02f, 2.15676410e-02f, -7.03786620e-03f, + -5.48760902e-03f, -5.11909023e-03f, -6.02732761e-03f, -4.88569299e-03f, + -6.17692712e-03f, -4.75604332e-03f, -6.32444233e-03f, -4.57034998e-03f, + -6.58952263e-03f, -4.15215217e-03f, -7.46364687e-03f, 3.28874267e-02f, + -6.03177206e-03f, -3.78362799e-03f, -8.96056648e-03f, 5.54566374e-03f, + 9.99487257e-03f, -1.12985632e-02f, -8.71054177e-04f, -1.12135429e-02f, + 1.10544180e-02f, 8.09519210e-03f, -1.20284205e-02f, 1.86530353e-03f, + 9.86257152e-03f, 2.66680853e-03f, 3.27494536e-02f, -1.44841001e-03f, + -5.05110163e-03f, -6.17873788e-03f, -4.92139127e-03f, -6.01784033e-03f, + -5.10508132e-03f, -5.84981292e-03f, -5.26601717e-03f, -5.68689319e-03f, + -5.46329747e-03f, -5.39799446e-03f, -6.04100904e-03f, -3.54615385e-03f, + 2.06662943e-02f, 7.25864609e-03f, 1.95718121e-02f, 2.98543727e-03f, + -8.70031036e-03f, -3.36951317e-03f, -7.51724049e-03f, -3.13950606e-03f, + -9.49623943e-03f, 1.08073693e-02f, 3.91384804e-03f, -9.97128409e-03f, + -1.92774770e-03f, 8.24195086e-03f, -3.60519465e-03f, -7.72724300e-03f, + -3.12496781e-03f, -8.22789895e-03f, -2.41626174e-03f, -9.32762829e-03f, + -5.14446780e-04f, -1.35973902e-02f, 6.25678344e-02f, 2.37090727e-03f, + -6.70173750e-03f, -7.91560743e-03f, 1.36397430e-02f, -2.44465978e-03f, + 1.20391485e-03f, 1.53784137e-02f, -1.30542762e-02f, 2.16222380e-02f, + -8.25988801e-03f, 2.46403706e-02f, 2.17611890e-02f, 8.49580756e-03f, + -1.50085050e-02f, 1.37831707e-02f, -4.51761013e-03f, -3.69247516e-03f, + -8.22557107e-03f, -2.28993428e-03f, -9.49159086e-03f, -5.21980256e-04f, + -1.29435489e-02f, 1.42905266e-02f, 2.36195125e-03f, -2.84765105e-03f, + 1.61764910e-02f, -8.08541266e-03f, -6.45225622e-03f, 2.11639656e-03f, + 1.16869042e-02f, -1.08325102e-02f, -2.39976540e-03f, -7.71743204e-03f, + -4.03795846e-03f, -6.58658940e-03f, -4.96863014e-03f, -5.70288793e-03f, + -5.95498302e-03f, -4.37500168e-03f, -8.34838033e-03f, 4.24663291e-03f, + 7.49132397e-03f, -9.98412037e-03f, -2.90569064e-03f, -7.28616223e-03f, + -4.78497889e-03f, -3.76106605e-03f, 3.33467491e-02f, 2.21547827e-03f, + -5.44902540e-03f, -6.29265456e-03f, -4.71684312e-03f, -6.45914128e-03f, + -4.65539570e-03f, -6.52754452e-03f, -4.53658882e-03f, -6.74676993e-03f, + -4.15056249e-03f, -7.45108015e-03f, -2.75313576e-03f, -1.09775971e-02f, + 2.15047067e-02f, 6.71631771e-03f, -1.15422775e-02f, -1.06813800e-03f, + -9.64618055e-03f, -1.42814482e-03f, -1.04488062e-02f, 2.46497302e-03f, + 5.71690110e-03f, -5.56403292e-03f, -7.47941505e-03f, -2.10112054e-03f, + -1.20536893e-02f, 2.39807754e-02f, 3.01288705e-03f, -7.64295344e-03f, + -6.89655241e-03f, 7.82299084e-03f, 5.68838821e-03f, -1.07683298e-02f, + -1.95397152e-03f, -8.49348106e-03f, -3.09931059e-03f, -7.81805778e-03f, + -3.52353294e-03f, -7.55755847e-03f, -3.67635248e-03f, -7.45789256e-03f, + -4.00592507e-03f, 7.01268304e-03f, 1.35861526e-02f, -1.90119165e-03f, + -5.98189222e-03f, -6.05885213e-03f, -4.68860735e-03f, -6.83116646e-03f, + -4.04854687e-03f, -7.50134675e-03f, -3.20862027e-03f, -8.81948212e-03f, + 4.74825681e-05f, 9.11641181e-03f, -5.93175419e-03f, -6.97805419e-03f, + -3.06544590e-03f, -9.48131025e-03f, 4.49920999e-04f, -1.67144418e-02f, + 3.63253562e-02f, 4.29651648e-02f, -1.95799326e-02f, 1.69269650e-02f, + -1.51846721e-03f, -7.36992815e-03f, -1.48315304e-03f, 1.04236057e-02f, + -5.87935391e-03f, 2.63778768e-02f, -1.07179240e-02f, -2.80285596e-03f, + -4.11543793e-03f, 1.93832839e-02f, 6.13902944e-04f, -5.41962879e-03f, + -6.63363601e-03f, -4.32573760e-03f, -7.04460212e-03f, -4.05139514e-03f, + -7.34733034e-03f, -3.62473116e-03f, -8.03507088e-03f, -2.39042384e-03f, + -1.07990562e-02f, 1.20284824e-02f, 7.72520056e-05f, -1.31356939e-03f, + 6.26915757e-02f, -1.28558115e-02f, 1.42276611e-04f, -1.17157009e-02f, + 4.06878087e-03f, 3.47581121e-02f, -9.56572903e-03f, -4.11515858e-03f, + -6.28804517e-03f, -5.38995118e-03f, -5.54970539e-03f, -6.21559802e-03f, + 9.36967556e-03f, 5.69453287e-03f, 7.50640883e-03f, -1.46064174e-02f, + 4.39298537e-02f, 4.81443375e-05f, -7.21167099e-03f, -6.02463692e-03f, + 8.15303506e-03f, -1.82124634e-03f, -7.79215564e-03f, -3.93586480e-03f, + -7.22586081e-03f, -3.79507514e-03f, -8.61529212e-03f, 9.11795975e-03f, + 1.16601423e-03f, -9.69832228e-03f, -1.37737620e-03f, -1.22730615e-02f, + 3.13212905e-02f, 3.00983516e-03f, 2.25562363e-02f, -1.80100907e-03f, + -8.21100950e-03f, -3.51615709e-03f, -7.57579561e-03f, -3.72579491e-03f, + -7.70517480e-03f, -3.15135348e-03f, -9.23321062e-03f, 2.11002412e-03f, + 4.18343019e-02f, -1.29667978e-02f, -1.72680336e-04f, -1.26626694e-02f, + 3.18274875e-02f, 2.08797600e-03f, -9.11031031e-03f, -3.28183822e-03f, + -7.57634583e-03f, -3.90185691e-03f, -7.34466423e-03f, -3.90765376e-03f, + -7.52384574e-03f, -3.53365745e-03f, -8.17546707e-03f, -2.39097811e-03f, + -1.05585021e-02f, 1.00994696e-02f, -7.47303247e-03f, 2.56696951e-02f, + 1.67717556e-02f, -1.30013166e-02f, -6.03056465e-04f, -9.85814006e-03f, + -1.70082152e-03f, -9.86886675e-03f, 2.89235917e-02f, 3.43764411e-02f, + -7.98242819e-03f, -4.99729860e-03f, -6.20449445e-03f, 1.03013634e-02f, + -2.85583104e-03f, -8.03262127e-03f, -3.17489521e-03f, -8.46690542e-03f, + -2.30783639e-03f, -1.00364141e-02f, 1.74041848e-03f, 4.62235386e-03f, + -3.65651803e-03f, -1.13633507e-02f, 9.86771866e-03f, 3.10025211e-02f, + -1.38203274e-02f, -1.41748078e-03f, -8.25901373e-03f, -4.05645971e-03f, + -6.57955303e-03f, -5.32331495e-03f, -5.50244831e-03f, -6.34418935e-03f, + -4.43971645e-03f, -7.56196700e-03f, -2.96784115e-03f, -8.14653575e-03f, + 3.85250937e-02f, 1.24555357e-02f, -1.02194826e-02f, -5.43004916e-03f, + 5.06902763e-03f, 5.87537677e-02f, -3.77070963e-03f, -5.43492021e-03f, + -4.81464902e-03f, -9.22811434e-03f, 1.08200549e-02f, 1.66007626e-02f, + -1.50643568e-02f, 1.29714896e-03f, -1.18676863e-02f, 4.89608043e-04f, + -1.27843610e-02f, 7.03104061e-03f, 8.85533261e-04f, -4.86666041e-03f, + -8.20461857e-03f, -1.87292186e-03f, -1.15000282e-02f, 1.76411398e-02f, + 3.56267626e-02f, -7.27637685e-03f, -6.84638315e-03f, -2.85885036e-03f, + -1.02431940e-02f, 1.40423009e-03f, -1.79302868e-02f, 4.78974997e-02f, + 4.84470599e-02f, -2.18574028e-02f, 9.29134903e-03f, 1.14572069e-02f, + 1.84785559e-03f, -3.63707524e-03f, 1.31255753e-02f, -1.68258064e-02f, + 1.22341879e-02f, 1.19090306e-02f, -1.08145531e-02f, 1.05792094e-02f, + -4.69795052e-03f, -5.23554847e-03f, -7.54356841e-03f, 4.12586749e-02f, + 1.75823490e-02f, -1.07201034e-02f, -2.51094666e-03f, -8.18177560e-03f, + -3.54543097e-03f, -7.73828152e-03f, -3.37771174e-03f, 2.64828517e-02f, + -5.21980819e-03f, -6.53977209e-03f, -4.70339683e-03f, -6.84577954e-03f, + -4.34032191e-03f, -7.42739324e-03f, -3.24206166e-03f, -1.01353618e-02f, + 1.95941609e-02f, 2.32824102e-03f, -7.57538790e-03f, 2.91428220e-02f, + -1.67257167e-02f, 2.77059041e-02f, 7.97974222e-03f, -1.19150459e-02f, + -3.02282218e-04f, -1.31807752e-02f, 3.84192019e-02f, 3.00704547e-02f, + -8.24215084e-03f, -2.37649312e-03f, -8.98124315e-03f, -2.19619307e-03f, + -1.00647042e-02f, 2.03541491e-03f, 6.46437918e-03f, -5.41818756e-03f, + 1.01986428e-02f, -5.12715790e-03f, -9.14849132e-03f, 9.17753345e-03f, + 4.40932772e-03f, 1.19356145e-03f, 1.94345350e-02f, -7.86604978e-04f, + 3.55921713e-02f, 6.55781462e-03f, -9.77884131e-03f, -3.29952351e-03f, + -7.58257788e-03f, -3.99530462e-03f, -7.55647366e-03f, -3.43428240e-03f, + -9.27368810e-03f, 5.70374453e-03f, 1.61281943e-03f, -8.25213829e-03f, + -4.31043752e-03f, -6.58164471e-03f, -5.27226040e-03f, -5.56691550e-03f, + 7.89261717e-03f, -6.67267539e-03f, -5.37486324e-03f, -5.44851658e-03f, + -7.43755418e-03f, 5.91128475e-03f, 6.75420998e-03f, -1.49517329e-02f, + 1.90946863e-02f, 2.70578167e-03f, -8.45651556e-03f, -4.07061701e-03f, + -7.66971051e-03f, 6.10930502e-03f, -1.87096915e-03f, -7.92923215e-03f, + -4.46238003e-03f, -2.20417067e-03f, 1.12404864e-02f, -2.02216148e-02f, + 4.08001359e-02f, 1.55182762e-02f, -1.16112807e-02f, -3.32119280e-03f, + -6.43448357e-03f, 3.59766689e-03f, 1.06251414e-02f, 1.18735857e-02f, + -1.16332973e-02f, -2.21090057e-03f, -8.15800311e-03f, -3.98913591e-03f, + -6.98886206e-03f, -4.88024728e-03f, -6.23688786e-03f, -5.57745487e-03f, + -5.53516309e-03f, -6.35418980e-03f, -4.58893665e-03f, -7.65449805e-03f, + -2.51139360e-03f, -1.19283455e-02f, 2.04975952e-02f, 5.67637403e-02f, + -1.71669097e-02f, 1.85356577e-03f, -1.22724475e-02f, 1.01055361e-03f, + -1.48033990e-02f, 3.74364528e-02f, 1.05697732e-02f, -9.97577595e-03f, + -3.49648348e-03f, -7.24458541e-03f, -4.55274758e-03f, -6.88222832e-03f, + -4.36009417e-03f, -8.18966127e-03f, 8.00606488e-03f, 5.94328530e-04f, + -1.01483180e-02f, 1.70284638e-03f, 1.16632677e-02f, 6.49891758e-03f, + -1.10115307e-02f, 2.10837783e-02f, 1.95590652e-03f, -9.58667514e-03f, + -2.61409205e-03f, 6.74879190e-03f, -4.64863515e-03f, -7.06838634e-03f, + -4.32388004e-03f, -7.34576238e-03f, -3.80176514e-03f, -8.76665475e-03f, + 2.02887024e-02f, -3.10310023e-03f, -7.77372891e-03f, 2.19006925e-02f, + -1.45428304e-03f, -9.37343409e-03f, -1.33677839e-03f, -1.29588858e-02f, + 3.13576972e-02f, 9.82487983e-03f, -1.31119474e-02f, 1.08939552e-02f, + 3.61160875e-03f, 3.29163137e-02f, -1.01340463e-02f, 3.72725941e-02f, + -8.07038194e-03f, -3.27322994e-03f, 2.91626177e-02f, -5.97717860e-03f, + -5.91002029e-03f, -5.55997109e-03f, -5.92862177e-03f, -5.69782992e-03f, + 1.01448180e-02f, -5.40111341e-03f, -6.01880573e-03f, -5.51679787e-03f, + -6.07495313e-03f, -5.21428275e-03f, -7.16646429e-03f, 6.53014641e-03f, + -8.75243946e-04f, -9.15454378e-03f, -2.18704751e-03f, -1.06785587e-02f, + 6.41561399e-03f, 1.59523612e-03f, 2.59078508e-02f, 2.50033275e-02f, + 2.99617762e-02f, 1.66836158e-03f, -9.45919033e-03f, -3.10383851e-03f, + -7.95612427e-03f, -4.11927523e-03f, 3.48149768e-03f, 1.33233004e-02f, + 2.65393346e-02f, -8.99364065e-03f, -5.52389021e-03f, 1.42838593e-02f, + 1.29530876e-02f, 2.07745030e-02f, -2.26174313e-03f, 5.50564346e-02f, + -1.02794309e-02f, -3.83050026e-03f, -6.68652283e-03f, -5.50313799e-03f, + -5.49941683e-03f, -6.66425799e-03f, -3.94029817e-03f, -9.78720221e-03f, + 1.29095577e-02f, 1.89358148e-02f, -9.79571440e-03f, -2.70454687e-03f, + -8.45678593e-03f, -3.08258423e-03f, -9.18938975e-03f, 3.94327000e-03f, + -9.56011296e-04f, -7.73686721e-03f, -3.98583191e-03f, -8.59897846e-03f, + 3.08575230e-03f, 1.07640559e-02f, -1.21348440e-02f, -6.21726644e-04f, + -1.12187514e-02f, 1.89468480e-03f, 9.35644856e-04f, 2.54361986e-02f, + 1.39722087e-02f, -9.21463904e-03f, -4.16600658e-03f, -6.52764664e-03f, + -5.61380738e-03f, -5.48526538e-03f, -6.53279354e-03f, -4.52810743e-03f, + -7.70614295e-03f, -2.81895527e-03f, -1.08931803e-02f, 7.61553853e-03f, + 1.99785846e-02f, -1.21277466e-02f, -2.55624267e-03f, -7.33694650e-03f, + -6.26754092e-03f, 5.03195879e-03f, 5.76836590e-03f, -1.34843661e-02f, + 7.11113817e-03f, -6.02990689e-04f, -3.68004343e-03f, 6.17891399e-03f, + -7.34810908e-03f, 9.89466310e-03f, -1.27294825e-02f, 1.96124000e-02f, + -1.32731132e-03f, -6.75161591e-03f, -6.15955587e-03f, -3.54335977e-03f, + 1.14089730e-02f, -7.80455971e-03f, -4.91557316e-03f, -6.14190633e-03f, + -5.82651195e-03f, -5.39700403e-03f, -6.62515153e-03f, -4.29858562e-03f, + -8.73387985e-03f, 5.71401025e-03f, -5.66646017e-04f, -1.12267812e-03f, + 1.30380365e-02f, -1.62047786e-03f, 2.54672768e-02f, -6.99389855e-03f, + 2.47537719e-02f, -2.91928140e-03f, -8.91623812e-03f, 4.01242932e-03f, + 6.96733239e-03f, 2.64066836e-02f, -8.01500228e-03f, 2.57014137e-02f, + -4.57127344e-03f, -6.24819978e-03f, -5.64836726e-03f, -5.75778014e-03f, + -6.00628829e-03f, -5.43265719e-03f, -6.35083250e-03f, -5.02268783e-03f, + -6.90567968e-03f, -4.17059542e-03f, 4.59536576e-03f, 7.11580349e-03f, + 3.26103509e-02f, 4.36641544e-02f, 1.23286541e-02f, -9.86836135e-03f, + -3.53290211e-03f, -7.40009200e-03f, -4.58964138e-03f, -6.71132644e-03f, + -5.37210482e-03f, 5.38694829e-03f, -3.79262901e-03f, -7.37708271e-03f, + -4.31523530e-03f, -7.36179001e-03f, -4.00917247e-03f, -8.35797843e-03f, + 5.21399429e-03f, -3.63456200e-03f, -6.98193286e-03f, -6.86502877e-04f, + 1.46643118e-02f, -5.00400322e-03f, -4.17486959e-03f, -8.91880270e-03f, + 7.98604261e-04f, 2.49570791e-02f, 1.49526893e-03f, 4.52456293e-03f, + -1.08153884e-02f, -2.16803083e-03f, -8.87559612e-03f, -2.98274531e-03f, + -8.64850100e-03f, -2.66904906e-03f, -9.92269273e-03f, 3.19931918e-03f, + 6.49305295e-04f, -6.05660749e-03f, -8.32458311e-03f, 3.10177632e-02f, + 1.17260815e-02f, 9.05010540e-03f, 2.95670681e-03f, -1.53232815e-02f, + 2.16670707e-02f, 5.42825932e-03f, -9.36850354e-03f, -4.06319478e-03f, + -6.78035646e-03f, -5.30068820e-03f, -6.02680046e-03f, -5.84524770e-03f, + -5.57054653e-03f, -6.30528484e-03f, -4.91266921e-03f, 4.58183018e-03f, + -5.58772278e-03f, -6.47032914e-03f, -4.85006076e-03f, -7.14387740e-03f, + -3.99922493e-03f, 6.63508468e-03f, 2.63772909e-04f, 1.80088330e-02f, + -8.73263822e-03f, -4.78494901e-03f, -6.02531828e-03f, -6.18762899e-03f, + -4.93689650e-03f, -7.28113735e-03f, -3.58335693e-03f, -9.28938739e-03f, + 1.83938112e-02f, 1.01006702e-02f, -9.43918262e-03f, -4.87941721e-03f, + 6.57019844e-03f, -4.01911993e-03f, -6.44107745e-03f, -5.85231201e-03f, + -5.26484601e-03f, -6.90916441e-03f, -4.13823200e-03f, -8.29822331e-03f, + -2.12797438e-03f, -1.20096190e-02f, 1.01818582e-02f, 2.79764305e-02f, + -1.24286400e-02f, -2.62890762e-03f, -7.41682950e-03f, -5.40075200e-03f, + -5.04515841e-03f, -8.52865382e-03f, 3.69382088e-03f, 1.17100293e-02f, + -1.09472788e-02f, -2.89337933e-03f, -7.73576034e-03f, -4.59036410e-03f, + -6.53724773e-03f, -5.60487162e-03f, -5.54179158e-03f, -6.74772513e-03f, + -3.95397617e-03f, -9.69861169e-03f, 6.77097584e-03f, 1.67438662e-02f, + -1.15618862e-03f, 1.01115566e-02f, -6.96494650e-03f, -4.07167502e-03f, + -8.89046944e-03f, 6.09118935e-03f, 3.00386201e-02f, 3.30080357e-03f, + -5.66822866e-03f, -7.61383782e-03f, 7.42369607e-03f, 2.57636188e-03f, + 9.82794608e-04f, -1.28311115e-03f, 1.80125781e-02f, 3.61590714e-04f, + 1.21711180e-02f, 8.93382508e-03f, -1.65077915e-03f, -4.01089556e-03f, + -7.56451008e-03f, -3.93633632e-03f, 1.10398517e-02f, -8.37250741e-03f, + -7.11705640e-04f, 4.11967419e-03f, 2.39192411e-02f, 9.05256626e-03f, + -1.31514711e-02f, 1.17449744e-03f, 7.52828614e-04f, 1.56657260e-02f, + -3.87211960e-03f, -6.28522156e-03f, -5.75896322e-03f, -5.83335996e-03f, + -5.77580483e-03f, -6.13169833e-03f, -4.98381245e-03f, -8.40723800e-03f, + 1.75545483e-02f, 2.35049853e-03f, -1.10225654e-02f, -9.52223224e-04f, + -1.17643563e-02f, 7.83081719e-03f, -6.89043451e-04f, -5.68073032e-03f, + -7.95645868e-03f, 1.74642616e-02f, -8.04321903e-03f, 2.74850164e-03f, + 2.86952957e-02f, -7.48183383e-03f, 1.24369949e-03f, 7.72102874e-03f, + 1.30466209e-02f, -1.65923918e-04f, 1.82233535e-02f, 6.52972314e-04f, + 1.90353642e-03f, -2.58206329e-03f, 8.97345082e-03f, 2.93709621e-03f, + 1.11165690e-02f, 6.85400898e-03f, -8.77331326e-03f, -4.26293669e-03f, + -7.12536915e-03f, -4.33280096e-03f, 3.71476884e-03f, -5.04258366e-03f, + -7.68024953e-03f, 8.23646165e-03f, 7.68869876e-03f, -7.51230385e-03f, + -5.19320882e-03f, -6.03831591e-03f, -5.95517629e-03f, -5.51082477e-03f, + -6.34911341e-03f, -5.31237063e-03f, -5.68129384e-03f, 8.24754537e-03f, + -1.15053129e-02f, 3.88717517e-03f, -1.58752990e-03f, 1.01442664e-03f, + 4.43214093e-04f, -2.96436601e-03f, 6.31185164e-03f, -9.03808785e-03f, + -4.98676936e-03f, 1.87508166e-02f, -2.83496252e-03f, -7.55919079e-03f, + -4.73991807e-03f, -6.53709304e-03f, -5.52969305e-03f, -5.79821286e-03f, + -6.34631959e-03f, -4.71593735e-03f, -8.20070199e-03f, 6.72148777e-04f, + 1.58971537e-02f, -1.05726871e-02f, -3.08947488e-03f, -7.82442818e-03f, + -4.32235252e-03f, -7.08506138e-03f, -4.85226658e-03f, -6.58990259e-03f, + 6.57827168e-03f, -5.51000610e-03f, 1.00381359e-02f, 1.48435158e-02f, + -8.58866101e-03f, -4.31517545e-03f, -7.08508205e-03f, -4.66935956e-03f, + -7.13585925e-03f, -4.31376175e-03f, -8.03467009e-03f, -4.60561516e-04f, + 7.50079252e-03f, 2.62592672e-03f, -1.15253097e-02f, 9.16815422e-03f, + 5.51957753e-03f, -1.05236421e-02f, 4.12007555e-03f, 9.86725462e-03f, + -2.67557116e-03f, -6.63944155e-03f, -5.77364928e-03f, -5.45134239e-03f, + -6.81914509e-03f, -3.66843521e-03f, 3.60603399e-03f, -6.34044526e-03f, + -6.29360761e-03f, -4.80997976e-03f, -7.57677506e-03f, -3.10408497e-03f, + -1.10661836e-02f, 3.92905317e-02f, 1.47254987e-03f, -8.85970426e-03f, + -3.92682942e-03f, -8.06328996e-03f, 5.84999053e-03f, 1.16218428e-02f, + -3.53883705e-03f, 5.53557540e-03f, -5.09563872e-03f, 5.70696094e-03f, + -5.57262333e-03f, -4.10173605e-03f, -9.96697066e-03f, 8.64853873e-03f, + 2.14074692e-02f, -4.58294487e-03f, -1.05610186e-02f, 1.29393758e-02f, + 3.66373799e-02f, -4.10301190e-03f, -1.13811558e-03f, -9.57555310e-03f, + -2.84288420e-03f, -8.38319785e-03f, -3.72893815e-03f, -7.65119105e-03f, + -4.43450717e-03f, -6.78768492e-03f, -6.00667253e-03f, 8.02352722e-04f, + 2.11280102e-03f, -1.05367728e-02f, -1.78862590e-03f, -9.90201083e-03f, + -1.49724985e-03f, -1.10857385e-02f, 2.00861561e-03f, 3.41499822e-03f, + 8.15891928e-03f, 2.80230827e-02f, 1.28016504e-03f, 8.59734389e-03f, + -5.06978183e-03f, -1.07945258e-02f, 3.29009993e-02f, 1.71296760e-03f, + -4.00248470e-03f, 2.10028853e-02f, -1.20440001e-02f, -2.74246378e-03f, + 6.32476402e-03f, -8.92152968e-04f, -9.50209025e-03f, -2.73471999e-03f, + -8.76394562e-03f, -3.01527821e-03f, -8.87770716e-03f, -2.31911893e-03f, + -1.10658174e-02f, 1.30056959e-02f, 4.38621131e-04f, -7.53575142e-03f, + -6.36725681e-03f, 4.00625484e-03f, 5.01817013e-03f, -1.40956395e-02f, + 8.60239715e-03f, 1.50007998e-02f, -5.78793078e-03f, 1.67631732e-02f, + -1.34441209e-02f, 5.23967880e-04f, -1.34919348e-02f, 1.63782529e-02f, + 6.43795958e-03f, 7.70007039e-03f, 1.50646281e-02f, 3.02017651e-02f, + -3.48464873e-03f, -4.07432456e-03f, 2.39763886e-02f, -1.10928932e-02f, + -1.72360438e-03f, -1.07613502e-02f, 9.37446706e-03f, -1.35654345e-03f, + -7.05745385e-03f, -5.78730582e-03f, 9.33927048e-03f, -4.20061958e-03f, + -7.46242971e-03f, -2.51944385e-03f, 1.19238777e-02f, -1.02506486e-02f, + 3.68702479e-05f, -3.22826779e-05f, -6.35872267e-03f, 1.48266818e-02f, + -6.46794149e-03f, -5.66770541e-03f, -5.91306192e-03f, -5.89165363e-03f, + -5.89079687e-03f, -5.59422877e-03f, -7.24870739e-03f, 1.16407071e-02f, + 8.43395212e-03f, 1.53682845e-02f, 7.53823978e-03f, -1.00648788e-02f, + -1.58937960e-03f, -1.15540142e-02f, 5.31942144e-03f, 1.82443010e-02f, + 1.80994993e-02f, 1.37978934e-02f, -1.53141074e-03f, 1.64243484e-02f, + -1.52563433e-02f, 4.30756066e-03f, 2.13964225e-02f, 2.18689414e-03f, + -8.95391457e-03f, -3.26541139e-03f, -8.42621739e-03f, -3.10746063e-03f, + -9.49825681e-03f, 1.09654604e-02f, -4.73963132e-03f, -5.51366047e-03f, + -6.72705068e-03f, -4.69505550e-03f, 4.18964730e-03f, -4.62702931e-03f, + -7.22681562e-03f, -4.76686535e-03f, -3.59199363e-03f, 6.91501513e-03f, + -1.12093490e-03f, 2.55245139e-02f, -5.72664305e-03f, -1.23899261e-03f, + -1.37917310e-02f, 1.28464786e-02f, 1.42638517e-02f, -7.30705714e-03f, + 5.67466611e-03f, 1.05717565e-02f, -4.95683889e-04f, 1.50456346e-02f, + -7.18349034e-05f, -7.71720366e-03f, -6.62744168e-03f, 2.24325567e-03f, + -5.47548137e-03f, 7.23577999e-03f, 8.52639053e-03f, -1.10440899e-02f, + -3.73159546e-03f, -3.42063738e-03f, 4.97202751e-03f, -9.74247929e-03f, + -3.91280088e-03f, -6.05863566e-03f, -8.98542187e-03f, 1.42402941e-02f, + 2.73623336e-02f, -2.14142097e-02f, 3.63525723e-02f, 5.76361330e-04f, + 1.64596135e-02f, 9.35298408e-03f, -7.65072224e-03f, -5.98516647e-03f, + -4.74012281e-03f, -7.93042197e-03f, -2.59933080e-03f, -1.16596048e-02f, + 1.16925752e-02f, 1.20607982e-02f, -1.15903168e-02f, -2.74129374e-03f, + -7.68228261e-03f, -5.30675449e-03f, -3.51186911e-03f, 3.75483887e-03f, + -8.81034983e-03f, -4.95651891e-03f, 1.23805442e-03f, 2.32609686e-03f, + -1.05386726e-02f, 1.05616088e-02f, -1.27039396e-02f, 1.79814433e-03f, + -1.70316928e-02f, 3.48242792e-02f, 1.96830135e-02f, -1.18472320e-02f, + -3.96077432e-03f, -3.49015000e-03f, 1.72833440e-02f, -1.16772639e-02f, + -1.52487827e-03f, -1.07461524e-02f, 1.36151799e-02f, 7.47447031e-03f, + -1.03809644e-02f, 1.99292558e-03f, 2.35392561e-03f, -8.06602796e-03f, + -4.74728251e-03f, -6.57059501e-03f, -5.40956009e-03f, -6.33901876e-03f, + -4.67880984e-03f, 8.97214130e-03f, -9.66488221e-03f, 3.21792328e-02f, + -4.08495037e-03f, -3.92184661e-04f, 2.67213233e-02f, -7.80904885e-03f, + -5.06517391e-03f, -4.98519083e-03f, 4.79331538e-03f, -9.40249334e-03f, + 6.08452060e-04f, 5.91967081e-04f, -5.84319910e-03f, 1.20344893e-02f, + 1.44133012e-02f, -8.12679431e-03f, -6.99972892e-03f, 2.99063667e-03f, + 7.47318673e-03f, -1.12457310e-02f, -1.94882810e-03f, -9.68286814e-03f, + 1.83128136e-02f, -6.55381511e-03f, -4.62939698e-03f, -7.31754989e-03f, + -4.30622320e-03f, -7.55208270e-03f, 5.68625347e-03f, -1.08810032e-02f, + 1.77087074e-02f, -3.55915503e-04f, -7.96430217e-03f, -4.75841990e-03f, + -6.56923261e-03f, 6.66483412e-03f, -5.67663635e-03f, -6.58351862e-03f, + -2.66440472e-03f, 7.70991031e-03f, 5.63781222e-03f, -4.69870142e-03f, + 1.83442994e-02f, 6.18736204e-04f, -5.99202618e-04f, 7.02263649e-03f, + -7.04292385e-03f, -4.91727410e-03f, -5.19689379e-03f, 3.36512999e-02f, + -4.94679031e-03f, -5.32737088e-03f, -6.76427697e-03f, -4.80866161e-03f, + -7.16943983e-03f, -4.25072407e-03f, -8.27978725e-03f, 6.98112159e-06f, + 7.46896374e-04f, -8.16329317e-03f, 3.05320601e-03f, 1.23651444e-02f, + -8.43013677e-03f, 9.07281647e-03f, 7.03076407e-03f, -1.42174056e-03f, + -2.80967956e-03f, -8.70709912e-03f, -3.04075682e-03f, -9.35659057e-03f, + 1.04091832e-02f, 4.31572995e-03f, -4.02228201e-03f, 8.57308892e-03f, + 6.52952361e-03f, -1.03797144e-02f, -4.51565632e-04f, 8.22875213e-03f, + -4.89760157e-03f, 6.97879951e-05f, 8.00349468e-03f, 1.02759640e-02f, + -4.60716345e-03f, 8.98257675e-03f, -7.95904506e-03f, 5.29842354e-03f, + -1.10422325e-02f, -2.36041707e-03f, -1.99588846e-03f, 2.83253919e-03f, + -8.82599562e-04f, -1.88066102e-03f, -1.20237274e-02f, 1.84707428e-02f, + -1.77433254e-04f, -5.19876616e-03f, -8.79202095e-03f, 2.35495276e-04f, + 9.50177681e-03f, 4.84968032e-02f, 2.01640052e-02f, 4.40881192e-02f, + 1.49238000e-03f, -9.49531309e-03f, -3.53653704e-03f, -6.96948860e-03f, + 5.76169438e-03f, -9.38731712e-03f, 4.16824616e-04f, 8.17409568e-03f, + 4.58582644e-03f, -8.93616429e-03f, -3.85951999e-03f, -7.51110808e-03f, + -4.46009347e-03f, -7.19693350e-03f, -4.60961191e-03f, -7.19858178e-03f, + -4.38134553e-03f, -8.01786676e-03f, 2.26408388e-03f, -3.54411340e-03f, + -6.67810744e-03f, -5.48024692e-03f, -6.11103316e-03f, -5.76623441e-03f, + -5.90066757e-03f, -5.99930018e-03f, -5.52652766e-03f, -6.82696687e-03f, + -2.41727342e-03f, 7.31852932e-03f, -1.04615841e-02f, -7.41163387e-04f, + 1.54252474e-02f, 7.64865649e-04f, 8.46105192e-03f, 6.56594241e-04f, + -1.43745468e-03f, 6.30670077e-03f, 2.51059165e-03f, -5.74046572e-03f, + 1.54684670e-02f, 5.26218573e-03f, -2.81150513e-03f, 4.86694757e-03f, + 5.99692683e-03f, -1.07691994e-02f, 2.96560805e-03f, 2.64943220e-03f, + -8.04252372e-03f, -4.99978846e-03f, -5.20561220e-03f, 4.89190329e-03f, + -9.83768819e-03f, -1.68428067e-03f, -1.22683601e-02f, 1.46263890e-02f, + 2.78134668e-02f, -8.13338779e-03f, 4.71997796e-03f, 6.56914268e-03f, + 4.05667702e-03f, 5.70355316e-03f, 6.68310382e-03f, -3.25910135e-03f, + 1.03784520e-03f, 2.13869978e-02f, -8.20428883e-04f, -5.07325496e-03f, + -5.83058908e-03f, 2.44426697e-02f, -7.11184048e-03f, -5.29939097e-03f, + -6.09726654e-03f, -6.01646156e-03f, -5.27214561e-03f, -7.56554053e-03f, + 5.51167188e-03f, -1.22402993e-03f, -8.76499349e-03f, -1.91999713e-03f, + 1.87580363e-03f, -6.87624855e-03f, -6.26917309e-03f, 3.19101986e-03f, + -5.08073001e-04f, -9.78929146e-03f, -1.66904105e-03f, -1.17886179e-02f, + 1.01444980e-02f, 1.10805472e-02f, 2.59033047e-02f, -1.00200300e-02f, + 1.00904082e-02f, 1.56394372e-02f, 1.29292111e-03f, 3.07097962e-02f, + 3.37784643e-03f, -1.11674821e-02f, 6.42033223e-03f, 6.14505226e-03f, + }; + +} // namespace mutap_test::fixtures diff --git a/tests/fixtures/rir_studio.h b/tests/fixtures/rir_studio.h new file mode 100644 index 0000000..057f753 --- /dev/null +++ b/tests/fixtures/rir_studio.h @@ -0,0 +1,1047 @@ +// GENERATED by tools/fixtures/make_rir_fixtures.py — do not edit by hand. +// SPDX-License-Identifier: MIT +// Copyright 2026 MuTap contributors +// +// Physically-modeled room: small dry control room, mic 1.2 m from a wedge. +// pyroomacoustics image-source method, shoebox [5.0, 4.0, 2.8] m, +// uniform absorption 0.35, max_order 17, +// speaker at [1.0, 2.0, 1.2], mic at [2.1, 2.4, 1.3], fs 48000 Hz. +// Deterministic: rebuilding with the same parameters reproduces +// this data exactly. Conditioning (delay trim to a 32-sample +// guard, truncation to 4096 taps, unit-energy normalization) +// is documented in the generator script. +#pragma once + +namespace mutap_test::fixtures { + + inline constexpr unsigned k_rir_studio_fs = 48000; + inline constexpr unsigned k_rir_studio_taps = 4096; + + inline constexpr float k_rir_studio[4096] = { + -2.14331212e-03f, -2.14553537e-03f, -2.14775905e-03f, -2.14998317e-03f, + -2.15220773e-03f, -2.15443272e-03f, -2.15665813e-03f, -2.15888397e-03f, + -2.16111024e-03f, -2.16333692e-03f, -2.16556401e-03f, -2.16779152e-03f, + -2.17001944e-03f, -2.17224776e-03f, -2.17447649e-03f, -2.17670562e-03f, + -2.18673041e-03f, -2.14922103e-03f, -2.25700337e-03f, -2.05165349e-03f, + -2.40211178e-03f, -1.87438291e-03f, -2.63194558e-03f, -1.60718737e-03f, + -2.95713555e-03f, -1.23892609e-03f, -3.38945645e-03f, -7.57041343e-04f, + -3.94244051e-03f, -1.46789168e-04f, -4.63233601e-03f, 6.09946277e-04f, + -5.47959672e-03f, 1.53654266e-03f, -6.51124476e-03f, 2.66461431e-03f, + -7.76471023e-03f, 4.03900858e-03f, -9.29437574e-03f, 5.72645959e-03f, + -1.11830667e-02f, 7.83112837e-03f, -1.35640644e-02f, 1.05264608e-02f, + -1.66667582e-02f, 1.41219201e-02f, -2.09189232e-02f, 1.92259887e-02f, + -2.72163939e-02f, 2.72150294e-02f, -3.77919772e-02f, 4.19820002e-02f, + -6.01556606e-02f, 8.04482933e-02f, -1.44938600e-01f, 5.03253647e-01f, + 3.26817217e-01f, -1.25688863e-01f, 7.31789266e-02f, -5.62075664e-02f, + 3.93549935e-02f, -3.58996383e-02f, 2.56690744e-02f, -2.59880169e-02f, + 1.80998663e-02f, -1.99993207e-02f, 1.32079924e-02f, -1.59268635e-02f, + 9.74064393e-03f, -1.29470722e-02f, 7.13393312e-03f, -1.06608788e-02f, + 5.09764211e-03f, -8.85231422e-03f, 3.46755652e-03f, -7.39409338e-03f, + 2.14364208e-03f, -6.20662663e-03f, 1.06166973e-03f, -5.23736694e-03f, + 1.78098712e-04f, -4.44980307e-03f, -5.38049939e-04f, -3.81733531e-03f, + -1.10988633e-03f, -3.31962539e-03f, -1.55552272e-03f, -2.94036321e-03f, + -1.88982614e-03f, -2.66584590e-03f, -2.12555024e-03f, -2.48408332e-03f, + -2.27407201e-03f, -2.38420025e-03f, -2.34585675e-03f, -2.35606871e-03f, + -2.35832102e-03f, -2.36057353e-03f, -2.36282624e-03f, -2.36507916e-03f, + -2.36733227e-03f, -2.36958558e-03f, -2.37183909e-03f, -2.37409280e-03f, + -2.37634670e-03f, -2.37860078e-03f, -2.38085506e-03f, -2.38310953e-03f, + -2.38536418e-03f, -2.38761901e-03f, -2.38987403e-03f, -2.39212923e-03f, + -2.39438461e-03f, -2.39664016e-03f, -2.39889589e-03f, -2.40115179e-03f, + -2.40340787e-03f, -2.40566411e-03f, -2.40792053e-03f, -2.41017711e-03f, + -2.41243385e-03f, -2.41469076e-03f, -2.41694782e-03f, -2.41920505e-03f, + -2.42146243e-03f, -2.42371997e-03f, -2.42597766e-03f, -2.42823550e-03f, + -2.43049349e-03f, -2.43275163e-03f, -2.43500992e-03f, -2.43726835e-03f, + -2.43952692e-03f, -2.44178563e-03f, -2.44404447e-03f, -2.44630346e-03f, + -2.44856258e-03f, -2.45082183e-03f, -2.45308121e-03f, -2.45534071e-03f, + -2.45760035e-03f, -2.45986011e-03f, -2.46211999e-03f, -2.46437999e-03f, + -2.46664011e-03f, -2.46890035e-03f, -2.47116070e-03f, -2.47342116e-03f, + -2.47568173e-03f, -2.47794241e-03f, -2.48020320e-03f, -2.48246409e-03f, + -2.48472508e-03f, -2.48698617e-03f, -2.48924736e-03f, -2.49150864e-03f, + -2.49377002e-03f, -2.49603149e-03f, -2.49829305e-03f, -2.50055470e-03f, + -2.50281643e-03f, -2.50507824e-03f, -2.50734014e-03f, -2.50960211e-03f, + -2.51186416e-03f, -2.51412629e-03f, -2.51638849e-03f, -2.51865075e-03f, + -2.52091309e-03f, -2.52317549e-03f, -2.52543795e-03f, -2.52770048e-03f, + -2.52996306e-03f, -2.53222570e-03f, -2.53448840e-03f, -2.53675115e-03f, + -2.53901394e-03f, -2.54127679e-03f, -2.54353968e-03f, -2.54580262e-03f, + -2.54806559e-03f, -2.55032861e-03f, -2.55259166e-03f, -2.55485475e-03f, + -2.55711786e-03f, -2.55938101e-03f, -2.56164418e-03f, -2.56390738e-03f, + -2.56617061e-03f, -2.56843385e-03f, -2.57069711e-03f, -2.57296038e-03f, + -2.57522367e-03f, -2.57748697e-03f, -2.57975028e-03f, -2.58201359e-03f, + -2.58427691e-03f, -2.58654023e-03f, -2.58880355e-03f, -2.59106686e-03f, + -2.59333017e-03f, -2.59559347e-03f, -2.59785676e-03f, -2.60012004e-03f, + -2.60238330e-03f, -2.60464654e-03f, -2.60690976e-03f, -2.60917296e-03f, + -2.61143614e-03f, -2.61369928e-03f, -2.61596239e-03f, -2.61822548e-03f, + -2.62048852e-03f, -2.62275153e-03f, -2.62501450e-03f, -2.62727742e-03f, + -2.62954030e-03f, -2.63180313e-03f, -2.63406590e-03f, -2.63632863e-03f, + -2.63859130e-03f, -2.64085391e-03f, -2.64311646e-03f, -2.64537894e-03f, + -2.64764136e-03f, -2.64990371e-03f, -2.65216599e-03f, -2.65442820e-03f, + -2.65669033e-03f, -2.65895237e-03f, -2.66121434e-03f, -2.66347622e-03f, + -2.66573801e-03f, -2.66799972e-03f, -2.67026133e-03f, -2.67252284e-03f, + -2.67478426e-03f, -2.67704557e-03f, -2.68160364e-03f, -2.67215493e-03f, + -2.70552086e-03f, -2.64660519e-03f, -2.75150190e-03f, -2.59754843e-03f, + -2.82247641e-03f, -2.52195450e-03f, -2.92159856e-03f, -2.41651578e-03f, + -3.05236428e-03f, -2.27749809e-03f, -3.21880417e-03f, -2.10050954e-03f, + -3.42576098e-03f, -1.88014338e-03f, -3.67934281e-03f, -1.60941576e-03f, + -3.98763114e-03f, -1.27886656e-03f, -4.36184049e-03f, -8.75041329e-04f, + -4.81828367e-03f, -3.77904567e-04f, -5.38183151e-03f, 2.43790610e-04f, + -6.09258652e-03f, 1.04245126e-03f, -7.01994501e-03f, 2.11181573e-03f, + -8.29381327e-03f, 3.63722262e-03f, -1.01880308e-02f, 6.04128836e-03f, + -1.33922819e-02f, 1.05362586e-02f, -2.02728054e-02f, 2.25575930e-02f, + -4.77668808e-02f, 1.92411935e-01f, 8.08558043e-02f, -3.70387345e-02f, + 1.86337387e-02f, -1.82291748e-02f, 9.21657678e-03f, -1.25025145e-02f, + 5.31953172e-03f, -9.66969637e-03f, 3.14151636e-03f, -7.94678124e-03f, + 1.72477872e-03f, -6.77309465e-03f, 7.25174068e-04f, -5.92981835e-03f, + -6.62425499e-06f, -5.30803365e-03f, -5.50734052e-04f, -4.84881888e-03f, + -9.51344820e-04f, -4.51852049e-03f, -1.23413824e-03f, -4.29754674e-03f, + -1.41408122e-03f, -4.17455043e-03f, -1.49960584e-03f, -4.14352823e-03f, + -1.49461026e-03f, -4.20247948e-03f, -1.39929616e-03f, -4.35300175e-03f, + -1.21016444e-03f, -4.60069578e-03f, -9.19185925e-04f, -4.95652637e-03f, + -5.11763732e-04f, -5.43970153e-03f, 3.73739068e-05f, -6.08532113e-03f, + 7.79664926e-04f, -6.96398596e-03f, 1.80196008e-03f, -8.18225741e-03f, + 3.25254916e-03f, -9.96792475e-03f, 5.48856372e-03f, -1.28943667e-02f, + 9.48856376e-03f, -1.87944120e-02f, 1.91959242e-02f, -3.84451099e-02f, + 8.79758737e-02f, 1.56803756e-01f, -4.43889952e-02f, 2.04586767e-02f, + -1.87661866e-02f, 8.83458404e-03f, -1.19333080e-02f, 4.21365246e-03f, + -8.53077595e-03f, 1.52730786e-03f, -6.31511242e-03f, -3.93212413e-04f, + -4.60526341e-03f, -1.98207192e-03f, -3.10040882e-03f, -3.46726989e-03f, + -1.60866516e-03f, -5.03075668e-03f, 6.58145946e-05f, -6.91059192e-03f, + 2.24557761e-03f, -9.58867209e-03f, 5.72234746e-03f, -1.45123853e-02f, + 1.35488261e-02f, -2.98075995e-02f, 6.30030921e-02f, 1.61912588e-01f, + -3.98533057e-02f, 1.77870439e-02f, -1.72646398e-02f, 7.88343731e-03f, + -1.15838282e-02f, 4.14161403e-03f, -8.92108649e-03f, 2.12583842e-03f, + -7.34822777e-03f, 8.48224100e-04f, -6.30243917e-03f, -3.70366805e-05f, + -5.55877202e-03f, -6.85226219e-04f, -5.00055339e-03f, -1.18729729e-03f, + -4.56200139e-03f, -1.58807689e-03f, -4.21056525e-03f, -1.91294218e-03f, + -3.92602069e-03f, -2.17822639e-03f, -3.69523981e-03f, -2.39412885e-03f, + -3.51029371e-03f, -2.56747056e-03f, -3.36493341e-03f, -2.70379780e-03f, + -3.25432986e-03f, -2.80736451e-03f, -3.17469151e-03f, -2.88158003e-03f, + -3.12292204e-03f, -2.92928501e-03f, -3.09639478e-03f, -2.95292027e-03f, + -3.09283418e-03f, -2.95461480e-03f, -3.11024902e-03f, -2.93803052e-03f, + -3.13988169e-03f, -2.91473493e-03f, -3.17477573e-03f, -2.88563436e-03f, + -3.21614083e-03f, -2.84923278e-03f, -3.26581148e-03f, -2.80309635e-03f, + -3.32703717e-03f, -2.74335277e-03f, -3.40457428e-03f, -2.66349165e-03f, + -3.50745185e-03f, -2.55087812e-03f, -3.65392405e-03f, -2.37814043e-03f, + -3.88756308e-03f, -2.07113823e-03f, -4.34239695e-03f, -1.36027654e-03f, + -5.68491716e-03f, 2.27073932e-03f, 1.62941797e-01f, -7.83318873e-03f, + -7.06546127e-04f, -4.63765419e-03f, -1.97515557e-03f, -3.93531736e-03f, + -2.44668615e-03f, -3.59658194e-03f, -2.72272692e-03f, -3.37322496e-03f, + -2.92698827e-03f, -3.19553078e-03f, -3.10247969e-03f, -3.03487934e-03f, + -3.26963664e-03f, -2.87559937e-03f, -3.44140837e-03f, -2.70601432e-03f, + -3.62912025e-03f, -2.51460257e-03f, -3.84568770e-03f, -2.28555356e-03f, + -4.11101110e-03f, -1.99295216e-03f, -4.46031211e-03f, -1.58702785e-03f, + -4.96697191e-03f, -9.54119422e-04f, -5.81808253e-03f, 2.39340021e-04f, + -7.67983442e-03f, 3.58524124e-03f, -1.59751738e-02f, 1.20371903e-01f, + 1.32335422e-02f, -1.07851280e-02f, 1.77719645e-03f, -6.78761297e-03f, + -3.24214357e-04f, -5.48449380e-03f, -1.22948481e-03f, -4.82555854e-03f, + -1.74577200e-03f, -4.42068854e-03f, -2.08620505e-03f, -4.14306777e-03f, + -2.33118998e-03f, -3.93920569e-03f, -2.51769244e-03f, -3.78273355e-03f, + -2.66524196e-03f, -3.65818560e-03f, -2.78668825e-03f, -3.55544064e-03f, + -2.88949783e-03f, -3.46874621e-03f, -2.97839344e-03f, -3.39414800e-03f, + -3.05674314e-03f, -3.32873269e-03f, -3.12710585e-03f, -3.27021082e-03f, + -3.19157833e-03f, -3.21662610e-03f, -3.25201951e-03f, -3.16617209e-03f, + -3.31151811e-03f, -3.11173922e-03f, -3.38105010e-03f, -3.04180010e-03f, + -3.47063789e-03f, -2.94848357e-03f, -3.58639463e-03f, -2.82589795e-03f, + -3.73536507e-03f, -2.66460422e-03f, -3.92927501e-03f, -2.45228968e-03f, + -4.18105976e-03f, -2.17319557e-03f, -4.51156010e-03f, -1.79868312e-03f, + -4.96187856e-03f, -1.26669049e-03f, -5.63198293e-03f, -4.01839110e-04f, + -6.86892767e-03f, 1.62537058e-03f, -1.15601336e-02f, 1.12839353e-01f, + 2.08881986e-03f, -4.45151502e-03f, -3.66753955e-03f, -1.93181247e-03f, + -5.40715774e-03f, -4.57727580e-04f, -6.84162252e-03f, 1.04355327e-03f, + -8.53395396e-03f, 3.03710573e-03f, -1.10331433e-02f, 6.34690572e-03f, + -1.58131939e-02f, 1.41410562e-02f, -3.20106452e-02f, 9.11326308e-02f, + 3.87625148e-02f, 1.49262244e-04f, 1.42231402e-01f, -2.97434508e-02f, + 1.29062852e-02f, -1.52109876e-02f, 6.04271431e-03f, -1.10047404e-02f, + 3.12077142e-03f, -8.83637379e-03f, 1.41749001e-03f, -7.46180201e-03f, + 2.61677093e-04f, -6.48236457e-03f, -5.98626513e-04f, -5.72973760e-03f, + -1.28125975e-03f, -5.11833663e-03f, -1.85052674e-03f, -4.59847060e-03f, + -2.34586830e-03f, -4.13779154e-03f, -2.79500533e-03f, -3.71110087e-03f, + -3.22272165e-03f, -3.29142725e-03f, -3.66102927e-03f, -2.83705160e-03f, + -4.17338121e-03f, -2.23104555e-03f, -5.03457327e-03f, -4.65091934e-04f, + 1.01836416e-01f, -4.11884029e-03f, -3.77040007e-03f, -2.47100212e-03f, + -4.69000762e-03f, -1.74174713e-03f, -5.38405130e-03f, -1.03695687e-03f, + -6.16212283e-03f, -1.54810285e-04f, -7.22488537e-03f, 1.15893076e-03f, + -8.94811153e-03f, 3.53203637e-03f, -1.25202003e-02f, 9.61514543e-03f, + -2.57739624e-02f, 7.23782504e-02f, 5.20397011e-02f, -2.36187519e-02f, + 8.85636645e-03f, -1.21772227e-02f, 3.31853325e-03f, -8.86109965e-03f, + 1.07301130e-03f, -7.23273141e-03f, -1.86138013e-04f, -6.23208501e-03f, + -1.02101894e-03f, -5.53129696e-03f, -1.63658641e-03f, -4.99521661e-03f, + -2.12587389e-03f, -4.55745325e-03f, -2.53777354e-03f, -4.18094526e-03f, + -2.90120244e-03f, -3.84245961e-03f, -3.23537676e-03f, -3.52558420e-03f, + -3.55492726e-03f, -3.21656406e-03f, -3.87329158e-03f, -2.90197166e-03f, + -4.20449123e-03f, -2.56623037e-03f, -4.56662655e-03f, -2.18832347e-03f, + -4.98389427e-03f, -1.73874683e-03f, -5.49552612e-03f, -1.16078374e-03f, + -6.18885649e-03f, -3.17567684e-04f, -7.28314799e-03f, 1.16328632e-03f, + -9.47019290e-03f, 4.74938380e-03f, -1.66515728e-02f, 2.80653866e-02f, + 8.31619428e-02f, -2.21229493e-02f, 7.10815069e-03f, -1.10558248e-02f, + 2.43482840e-03f, -8.50293112e-03f, 8.52508174e-04f, -7.47236491e-03f, + 1.54115474e-04f, -7.01565019e-03f, -1.37743989e-04f, -6.86951847e-03f, + -1.75032477e-04f, -6.94677106e-03f, -2.74634122e-06f, -7.23379741e-03f, + 3.92914975e-04f, -7.77286149e-03f, 1.08898388e-03f, -8.68939856e-03f, + 2.28528162e-03f, -1.03082467e-02f, 4.53761361e-03f, -1.36666419e-02f, + 1.00867419e-02f, -2.52215953e-02f, 7.46455942e-02f, 1.79809304e-03f, + 6.17127767e-02f, 4.46043033e-02f, -2.52298397e-02f, 1.10747039e-02f, + -1.48954991e-02f, 5.84076242e-03f, -1.17753973e-02f, 3.83894217e-03f, + -1.04977361e-02f, 3.08522052e-03f, -1.02214603e-02f, 3.30684953e-03f, + -1.11336518e-02f, 5.38318680e-03f, -1.59360704e-02f, 2.13812070e-02f, + 7.99115092e-02f, -1.67495170e-02f, 2.97740548e-03f, -7.75779687e-03f, + -6.73817872e-04f, -5.79523212e-03f, -1.90257456e-03f, -4.95800295e-03f, + -2.53301528e-03f, -4.45842545e-03f, -2.97582476e-03f, -4.04449561e-03f, + -3.41907053e-03f, -3.53411113e-03f, -4.10270746e-03f, -2.50013605e-03f, + -6.05450204e-03f, 3.03299685e-03f, 8.68079598e-02f, -1.23112820e-02f, + 2.04676983e-03f, -8.61955600e-03f, 1.59193042e-03f, -1.03389822e-02f, + 9.15162099e-03f, 6.50881438e-02f, -1.21399596e-02f, 9.43024467e-04f, + -6.94347551e-03f, -9.33633754e-04f, -6.09796001e-03f, -1.32308953e-03f, + -5.97787822e-03f, -1.27722009e-03f, -6.16576071e-03f, -9.78224745e-04f, + -6.59260727e-03f, -4.24203671e-04f, -7.32174876e-03f, 5.22058048e-04f, + -8.60487094e-03f, 2.32359501e-03f, -1.13577325e-02f, 7.08336648e-03f, + -2.21004575e-02f, 7.10444929e-02f, 2.85392020e-02f, -1.59653097e-02f, + 3.37483705e-03f, -8.26425979e-03f, -6.45983573e-04f, -5.65080932e-03f, + -2.61313271e-03f, -4.01380086e-03f, -4.12376110e-03f, -2.50586779e-03f, + -5.78651934e-03f, -5.05613132e-04f, -8.50221129e-03f, 3.76012331e-03f, + -1.71526873e-02f, 3.87085813e-02f, 4.12245401e-02f, -1.90041819e-02f, + 5.59186502e-03f, -1.04210963e-02f, 1.48675597e-03f, -7.96317307e-03f, + -1.83005221e-04f, -6.75341677e-03f, -1.11564041e-03f, -6.02184411e-03f, + -1.71605160e-03f, -5.53370584e-03f, -2.13017400e-03f, -5.19340519e-03f, + -2.42320589e-03f, -4.95570544e-03f, -2.62558420e-03f, -4.80051244e-03f, + -2.75204967e-03f, -4.71606525e-03f, -2.81127825e-03f, -4.69671756e-03f, + -2.80626253e-03f, -4.74195831e-03f, -2.73584482e-03f, -4.85335814e-03f, + -2.59630543e-03f, -5.04128793e-03f, -2.36832398e-03f, -5.33479900e-03f, + -2.00954014e-03f, -5.79734159e-03f, -1.42116062e-03f, -6.59121866e-03f, + -3.15925174e-04f, -8.28252520e-03f, 2.62786426e-03f, -1.51466945e-02f, + 5.75269873e-02f, 1.23220259e-02f, -1.03111383e-02f, -6.23889745e-05f, + -6.13473215e-03f, -2.35170120e-03f, -4.58425888e-03f, -3.57418654e-03f, + -3.52118308e-03f, -4.60432195e-03f, -2.44791224e-03f, -5.84011750e-03f, + -9.04818639e-04f, -8.01819856e-03f, 2.67673430e-03f, -1.59212730e-02f, + 5.17283920e-02f, 1.92911065e-02f, -1.34078061e-02f, 2.13959607e-03f, + -8.06416689e-03f, -6.33878795e-04f, -6.30896914e-03f, -1.89360440e-03f, + -5.34290278e-03f, -2.68980822e-03f, -4.66960977e-03f, -3.29442027e-03f, + -4.12171340e-03f, -3.82117419e-03f, -3.61339569e-03f, -4.34342359e-03f, + -3.07252670e-03f, -4.94307085e-03f, -2.39289794e-03f, -5.77487512e-03f, + -1.32367908e-03f, -7.29395886e-03f, 1.09029383e-03f, -1.20285025e-02f, + 1.62717307e-02f, 5.19595252e-02f, -1.60917520e-02f, 3.16941098e-03f, + -8.90263927e-03f, 9.90607059e-05f, -7.20619738e-03f, -9.68007451e-04f, + -6.50288193e-03f, -1.45288359e-03f, -6.18339112e-03f, -1.65916951e-03f, + -6.08468057e-03f, -1.67458661e-03f, -6.16621224e-03f, -1.50383435e-03f, + -6.45786252e-03f, -1.07503673e-03f, -7.09411298e-03f, -1.41680307e-04f, + -8.55291383e-03f, 2.33846046e-03f, -1.36691111e-02f, 1.97494461e-02f, + 4.77915118e-02f, -1.61028349e-02f, 2.99989176e-03f, -8.75919695e-03f, + -1.59743506e-04f, -7.01420897e-03f, -1.25697687e-03f, -6.28723158e-03f, + -1.76559214e-03f, -5.93888678e-03f, -2.00972838e-03f, -5.78889245e-03f, + -2.09473832e-03f, -5.77543118e-03f, -2.05409528e-03f, -5.88648617e-03f, + -1.87990916e-03f, -6.15404194e-03f, -1.50331650e-03f, -6.71248726e-03f, + -6.47151426e-04f, -8.25386007e-03f, 3.35712030e-03f, 5.29414416e-02f, + -6.25786442e-03f, -4.08758261e-03f, -2.72592106e-03f, -6.00054456e-03f, + -1.12705212e-03f, -7.70835824e-03f, 9.92574619e-04f, -1.07436247e-02f, + 6.08199034e-03f, -2.20624188e-02f, 7.19589054e-02f, 3.21255293e-02f, + -1.85479082e-02f, 5.08817132e-03f, -1.04788242e-02f, 1.01551095e-03f, + -7.96744202e-03f, -7.31038974e-04f, -6.66841210e-03f, -1.76289290e-03f, + -5.82520978e-03f, -2.48799519e-03f, -5.19583934e-03f, -3.06151575e-03f, + -4.67299806e-03f, -3.56245498e-03f, -4.19668183e-03f, -4.03835623e-03f, + -3.72574302e-03f, -4.52855941e-03f, -3.21894920e-03f, -5.08022574e-03f, + -2.61852130e-03f, -5.76861820e-03f, -1.81632782e-03f, -6.76567881e-03f, + -5.18329379e-04f, -8.62052856e-03f, 2.45655792e-03f, -1.45783441e-02f, + 2.35667758e-02f, 4.01524625e-02f, -1.59159266e-02f, 2.64084814e-03f, + -8.52214685e-03f, -7.59986781e-04f, -6.51039302e-03f, -2.13250503e-03f, + -5.49744949e-03f, -2.94278046e-03f, -4.82334497e-03f, -3.54715699e-03f, + -4.26253631e-03f, -4.11289647e-03f, -3.66949570e-03f, -4.79452585e-03f, + -2.83968003e-03f, -5.92029133e-03f, -1.13287598e-03f, -9.21082248e-03f, + 4.54744240e-02f, -1.06031163e-02f, 3.61977324e-02f, 2.55958870e-02f, + -1.80257348e-02f, 6.43123582e-03f, -1.34080557e-02f, 5.14667983e-03f, + -1.40244709e-02f, 7.88240376e-03f, -2.12710945e-02f, 3.85144144e-02f, + 4.08433188e-02f, -1.59849657e-02f, 1.64880568e-03f, -7.07149850e-03f, + -2.81915168e-03f, -3.95586847e-03f, -5.68994321e-03f, -4.24933366e-04f, + -1.20764212e-02f, 2.80345249e-02f, 1.94843556e-02f, -1.34340900e-02f, + 1.83292138e-03f, -8.44298564e-03f, -7.14917764e-04f, -6.83590469e-03f, + -1.86752928e-03f, -5.95215998e-03f, -2.59585322e-03f, -5.33621996e-03f, + -3.14806474e-03f, -4.83784314e-03f, -3.62282315e-03f, -4.38583503e-03f, + -4.07992526e-03f, -3.92028992e-03f, -4.59097793e-03f, -3.33693981e-03f, + -5.34332592e-03f, -2.20647452e-03f, -7.81675772e-03f, 6.28778524e-02f, + -1.07317679e-03f, -5.12551091e-03f, -3.92625283e-03f, -3.86276714e-03f, + -4.79957536e-03f, -3.12544560e-03f, -5.52622706e-03f, -2.34602492e-03f, + -6.45439551e-03f, -1.15980573e-03f, -8.13552306e-03f, 1.50608777e-03f, + -1.33117093e-02f, 1.77404059e-02f, 5.30455719e-02f, -1.34338369e-02f, + 4.58405073e-02f, -1.32474425e-02f, 2.33598946e-03f, -9.54258840e-03f, + 6.20699396e-04f, -8.65467615e-03f, 2.30987356e-04f, -8.68658295e-03f, + 7.10533554e-04f, -9.83393697e-03f, 3.14850939e-03f, -1.61492120e-02f, + 5.76077227e-02f, 1.05331754e-02f, -9.86160027e-03f, -1.10763564e-03f, + -5.93467312e-03f, -3.38970189e-03f, -3.98046194e-03f, -6.35665425e-03f, + 3.60212612e-02f, 1.04733812e-03f, -7.07831699e-03f, -2.10605290e-03f, + -5.87165584e-03f, -2.79224702e-03f, -5.42301789e-03f, -3.12133947e-03f, + -5.17823854e-03f, -3.32114854e-03f, -5.01914981e-03f, -3.46293467e-03f, + -4.90165823e-03f, -3.57224092e-03f, -4.81090288e-03f, -3.65918674e-03f, + -4.73923713e-03f, -3.72903785e-03f, -4.68424539e-03f, -3.78058523e-03f, + -4.65020691e-03f, -3.80836415e-03f, -4.64369641e-03f, -3.80272557e-03f, + -4.67931066e-03f, -3.74204444e-03f, -4.79006985e-03f, -3.57325642e-03f, + -5.06586119e-03f, -3.13305371e-03f, -5.83644745e-03f, -1.63122884e-03f, + -9.76238723e-03f, 4.32632710e-02f, 5.78637911e-03f, -9.62208419e-03f, + -1.36938651e-04f, -7.87045958e-03f, -8.05373151e-04f, -7.71690422e-03f, + -6.27211937e-04f, -8.20348622e-03f, 1.99182995e-04f, -9.51605618e-03f, + 2.28675822e-03f, -1.31255489e-02f, 9.87762292e-03f, 2.55124322e-02f, + 8.51045767e-02f, 4.31889146e-02f, -2.95871218e-02f, 2.45815270e-02f, + 3.03505749e-02f, -6.81944783e-03f, -4.85777754e-03f, -2.75785263e-03f, + -6.21834831e-03f, -2.06821990e-03f, -6.78337859e-03f, -1.35265120e-03f, + -8.09195720e-03f, 2.34485529e-03f, 4.28676409e-02f, -7.42710192e-03f, + -3.27549551e-03f, -4.52489331e-03f, -4.51177895e-03f, -3.75020816e-03f, + -5.14536820e-03f, -3.12942014e-03f, -5.87385402e-03f, -2.16720030e-03f, + -7.33557604e-03f, 4.03315536e-04f, -1.32682007e-02f, 3.43284842e-02f, + 1.76980977e-02f, -1.39947649e-02f, 2.44222882e-03f, -9.86114494e-03f, + 6.62158069e-04f, -9.06925244e-03f, 4.42298316e-04f, -9.31380083e-03f, + 1.16875945e-03f, -1.07295812e-02f, 3.81966775e-03f, -1.64843639e-02f, + 2.48433941e-02f, 4.13015468e-02f, -1.55705589e-02f, 1.49910384e-03f, + -7.90216157e-03f, -2.07999945e-03f, -5.65841583e-03f, -3.81680851e-03f, + -4.03613141e-03f, -5.70076525e-03f, -1.26008581e-03f, -1.14202027e-02f, + 2.45943244e-02f, 2.81124224e-02f, -2.04014101e-02f, 1.50631429e-02f, + 2.43526166e-02f, -7.37007659e-03f, -3.88756544e-03f, -4.01194043e-03f, + -5.06132215e-03f, -3.46070634e-03f, -5.38725766e-03f, -3.23430718e-03f, + -5.58582547e-03f, -3.04444566e-03f, -5.79734468e-03f, -2.80796812e-03f, + -6.08861194e-03f, -2.42807965e-03f, 3.14205758e-02f, -2.19192851e-03f, + -6.90350872e-03f, -1.45447390e-03f, -7.80008143e-03f, -2.80238068e-04f, + -9.47230983e-03f, 2.35457884e-03f, -1.45679004e-02f, 1.94260394e-02f, + 2.96983244e-02f, -1.09768335e-02f, -2.01572745e-03f, 6.00042822e-02f, + 1.94166980e-02f, -1.20461617e-02f, -3.20744910e-04f, -6.56058766e-03f, + -3.79507167e-03f, -3.10036371e-03f, -9.76699145e-03f, 8.49546972e-02f, + 6.09180710e-03f, -9.82960988e-03f, -7.55669110e-04f, -7.04057841e-03f, + -2.52743708e-03f, -5.61789115e-03f, -3.94250349e-03f, -3.86123331e-03f, + -6.90213083e-03f, 4.61462916e-03f, 5.24511550e-02f, -1.64112639e-02f, + 5.10110561e-03f, 2.51029168e-02f, 1.90753299e-03f, -1.50064953e-02f, + 5.69064064e-02f, 3.93465041e-02f, -1.58459407e-02f, 2.86460889e-03f, + -1.03944343e-02f, 1.20871230e-03f, -1.04529063e-02f, 2.90690444e-03f, + -1.55660329e-02f, 2.95554948e-02f, 1.89645883e-02f, -1.24192165e-02f, + 1.73487287e-04f, -7.61406355e-03f, -2.06541269e-03f, -6.33369234e-03f, + -2.89079696e-03f, -5.77102013e-03f, -3.30034364e-03f, -5.47210750e-03f, + -3.53066983e-03f, -5.30172865e-03f, -3.66451189e-03f, -5.20657741e-03f, + -3.73773693e-03f, -5.16166713e-03f, -3.76758958e-03f, -5.15638413e-03f, + -3.75922111e-03f, -5.18998014e-03f, -3.70863595e-03f, -5.27204774e-03f, + -3.59974613e-03f, -5.42793420e-03f, -3.39255566e-03f, -5.72236213e-03f, + -2.97244933e-03f, -6.38174727e-03f, -1.83186072e-03f, -8.84199091e-03f, + 7.30699122e-03f, 3.01400356e-02f, 3.21751026e-02f, -5.28910812e-03f, + -3.88188294e-03f, -6.61146094e-03f, 2.80000383e-02f, 3.74225969e-03f, + 2.75794543e-02f, -4.57942387e-03f, -5.07806867e-03f, -3.76429572e-03f, + -5.27265644e-03f, -3.68965014e-03f, -5.33804820e-03f, -3.60787209e-03f, + -5.47161437e-03f, -3.39892839e-03f, -5.83405092e-03f, -2.71264016e-03f, + -7.60143239e-03f, 2.34801234e-02f, -1.36837107e-03f, -5.76659454e-03f, + -3.89066819e-03f, -4.66783696e-03f, -5.28571114e-03f, 3.60820794e-02f, + 3.81477226e-03f, 2.86626683e-02f, -1.00326063e-02f, 7.50725131e-05f, + -1.06702117e-02f, 4.85504508e-02f, 2.06554466e-02f, -1.28056705e-02f, + 1.18894008e-03f, -9.59832418e-03f, 8.71995952e-04f, -1.17298318e-02f, + 1.17792822e-02f, 2.27594420e-02f, -1.22392479e-02f, 1.19832433e-03f, + -1.18676701e-02f, 2.33527364e-02f, 1.10369963e-02f, -1.27572415e-02f, + 3.15535819e-03f, -1.45881032e-02f, 1.90865993e-02f, 2.57775289e-02f, + -1.27509962e-02f, -4.81029629e-05f, -7.51877238e-03f, -2.46023154e-03f, + -5.86588213e-03f, 3.10069542e-02f, -6.37062301e-03f, -3.15754692e-03f, + -5.73258628e-03f, -3.52534165e-03f, -5.48418621e-03f, -3.70456662e-03f, + -5.37312057e-03f, -3.74524216e-03f, -5.47324096e-03f, -3.20115372e-03f, + 2.22991162e-02f, -5.24135951e-03f, -4.28212199e-03f, -4.75334351e-03f, + -4.40972140e-03f, -4.73595723e-03f, -4.38563649e-03f, -4.78977055e-03f, + -4.32040346e-03f, -4.87230379e-03f, -4.23251856e-03f, -4.96430431e-03f, + 2.94111289e-02f, -5.23525103e-03f, -3.79940689e-03f, -5.58025244e-03f, + -3.19917314e-03f, -6.83763934e-03f, 9.57262421e-04f, 2.87953783e-02f, + -1.23975528e-02f, 7.62155126e-03f, 1.75545762e-02f, -1.09896680e-02f, + 3.44163835e-04f, -1.03434085e-02f, 2.06975546e-02f, 1.88409209e-02f, + 3.61207246e-02f, 1.35560579e-02f, -9.08766329e-03f, -3.11814528e-03f, + -4.22810319e-03f, -7.47399246e-03f, 7.40170952e-03f, 2.53307036e-02f, + -1.75077286e-02f, 1.83042105e-02f, 7.52355373e-03f, -8.15353331e-03f, + -2.53686885e-03f, -6.25747285e-03f, -3.06082648e-03f, -6.23600901e-03f, + -2.81844126e-03f, -6.69116363e-03f, -2.14215988e-03f, -7.68794161e-03f, + -6.07916877e-04f, -1.03972785e-02f, 6.15691952e-03f, 1.94857958e-02f, + 1.18488907e-02f, 1.81620484e-02f, -1.35015626e-02f, 1.14781375e-03f, + -9.00785084e-03f, -1.04329211e-03f, -7.71875081e-03f, -1.87748851e-03f, + -7.16518779e-03f, -2.24711367e-03f, -6.94533033e-03f, -2.34173078e-03f, + -6.99359256e-03f, -2.10873463e-03f, -7.59807232e-03f, -2.04239926e-04f, + 2.59228331e-02f, -6.72604855e-03f, 1.23494603e-03f, 2.82150469e-02f, + 1.58090582e-02f, -3.00689746e-03f, -1.10429852e-02f, 1.61266827e-02f, + 2.47049974e-02f, -1.39088655e-02f, 1.02026285e-03f, -8.83781676e-03f, + -1.27480582e-03f, -7.54690232e-03f, -2.08406011e-03f, -7.02256278e-03f, + -2.42835367e-03f, -6.81872767e-03f, -2.52220507e-03f, -6.83838413e-03f, + -2.38667377e-03f, -7.12990335e-03f, -1.87936288e-03f, -8.00984617e-03f, + -2.65031293e-04f, -1.16068886e-02f, 1.46440194e-02f, 1.62559914e-02f, + -1.11712820e-02f, -9.14162529e-04f, -7.25406272e-03f, -2.78969877e-03f, + -6.03626202e-03f, -3.85247226e-03f, -4.69914355e-03f, -6.68907213e-03f, + 2.22499470e-02f, 5.06566357e-03f, -1.12412348e-02f, 1.74146275e-03f, + -1.27493536e-02f, 1.33116450e-02f, 9.47223580e-03f, -7.48836445e-03f, + -4.24051624e-03f, -3.87780986e-03f, -6.61183401e-03f, -1.29776878e-03f, + -1.10585730e-02f, 1.56793893e-02f, 1.35067389e-02f, 1.84206820e-02f, + 3.15992743e-03f, -1.04306083e-02f, 7.58881591e-04f, -1.16430372e-02f, + 1.63366261e-02f, 5.99890384e-03f, -9.04211831e-03f, -1.31156964e-03f, + -8.88695877e-03f, 2.68890411e-02f, -2.46051090e-03f, -5.15355200e-03f, + -4.90221337e-03f, -4.09179732e-03f, -5.72265296e-03f, -3.23733024e-03f, + -6.82773709e-03f, -1.52491042e-03f, -1.02631629e-02f, 1.12724413e-02f, + 1.80865717e-02f, -1.17471097e-02f, -4.31019299e-04f, -7.87144074e-03f, + -2.17908562e-03f, -6.88783115e-03f, -2.79677105e-03f, -6.48861234e-03f, + -3.05850106e-03f, -6.33396484e-03f, -3.13344463e-03f, -6.33771421e-03f, + -3.05813438e-03f, -6.50179397e-03f, -2.79169250e-03f, -6.91892291e-03f, + -2.14944908e-03f, -7.97211245e-03f, -2.31412460e-04f, -1.24708027e-02f, + 2.70617582e-02f, 9.76404725e-03f, -1.06002185e-02f, -1.04157441e-03f, + -7.46799796e-03f, -2.54345209e-03f, -6.60951401e-03f, -3.08355468e-03f, + -6.26135627e-03f, -3.31313008e-03f, -6.12180597e-03f, -3.39064420e-03f, + -6.10117851e-03f, -3.36907703e-03f, -6.16824126e-03f, -3.26517592e-03f, + -6.31699082e-03f, -3.07582634e-03f, -6.55965927e-03f, -2.77811852e-03f, + -6.93388371e-03f, -2.31188889e-03f, -7.53597873e-03f, -1.51565056e-03f, + -8.66573075e-03f, 2.63539836e-04f, -1.22276879e-02f, 1.70473883e-02f, + 2.90911917e-03f, -4.99663366e-03f, -7.25079889e-03f, 4.13206864e-04f, + -1.48960191e-02f, 3.02692188e-02f, 4.91105672e-02f, -1.54299099e-02f, + 1.15543614e-03f, -8.41686072e-03f, -2.76059053e-03f, -4.88583199e-03f, + 2.42861579e-02f, 6.08040418e-02f, 1.02825808e-02f, -1.10690415e-02f, + -3.95522150e-04f, -8.25989396e-03f, -1.81968334e-03f, -7.39154068e-03f, + -2.37340091e-03f, -7.11324053e-03f, -2.15270208e-03f, 1.71358388e-02f, + -4.10053852e-03f, -5.78956514e-03f, -3.67684996e-03f, -5.95367709e-03f, + -3.53334870e-03f, -6.16660687e-03f, -3.16596737e-03f, -6.91895751e-03f, + -9.67230906e-04f, 2.32064979e-02f, -6.85590897e-03f, -3.92141657e-03f, + -5.34752712e-03f, -4.09038511e-03f, -6.70027606e-03f, 1.04669936e-02f, + 1.29956813e-02f, 1.61073160e-02f, -3.29338298e-03f, -1.06319579e-02f, + 2.74398495e-02f, 5.68547291e-03f, -9.04306789e-03f, -2.34333419e-03f, + -6.37685753e-03f, -3.75493972e-03f, -5.51734762e-03f, -4.21941159e-03f, + -5.77083202e-03f, 1.72107044e-02f, -1.69354423e-03f, -7.36166814e-03f, + -2.10166564e-03f, -7.90528721e-03f, -1.10854608e-03f, -9.40769065e-03f, + 1.25225032e-03f, -1.38826112e-02f, 2.01034498e-02f, -4.57141238e-03f, + 1.29991701e-02f, 6.74093151e-02f, -1.95502289e-02f, 3.53749010e-03f, + -1.05807425e-02f, -5.07274754e-04f, -8.15743922e-03f, -2.21130747e-03f, + -6.79310755e-03f, -3.52848149e-03f, -4.85545396e-03f, 1.93313932e-02f, + -7.63237538e-03f, -3.00665081e-03f, -6.05644718e-03f, -4.35189457e-03f, + -2.11029065e-03f, 2.82849126e-02f, 2.18450003e-02f, -1.46247449e-02f, + 4.36659669e-02f, 1.35453928e-02f, -1.14654950e-02f, -5.56403497e-04f, + -6.68301452e-03f, 3.00203121e-02f, -2.02664577e-02f, 4.58227676e-02f, + 2.72938125e-02f, -1.52601408e-02f, 2.18999024e-02f, -5.22966527e-03f, + -3.79299167e-03f, -5.84589362e-03f, -3.93091512e-03f, -5.65149243e-03f, + -4.10577144e-03f, -5.51124524e-03f, -4.21940850e-03f, -5.42585958e-03f, + -4.28578295e-03f, -5.38198797e-03f, -4.31376976e-03f, -5.37426111e-03f, + -4.30782980e-03f, -5.39920307e-03f, -4.26926994e-03f, -5.45752506e-03f, + -4.19616257e-03f, -5.54930916e-03f, -4.10056028e-03f, -5.61545481e-03f, + -4.25506828e-03f, -3.68438800e-03f, 2.60658046e-02f, 1.43681255e-02f, + -6.98497718e-03f, 1.94395973e-02f, 4.49722374e-02f, 8.22398452e-03f, + -8.32248769e-03f, 2.15248386e-02f, 1.01811433e-02f, -5.45770812e-03f, + -5.83196897e-03f, 1.88636708e-02f, -8.35242075e-03f, 1.49802075e-02f, + 9.78798029e-03f, -1.27654402e-02f, 1.96643602e-03f, -1.19465221e-02f, + 2.53252969e-02f, -1.60752078e-02f, 2.51297729e-02f, -5.01327546e-03f, + 1.84581706e-02f, 4.84895130e-02f, -2.03785674e-02f, 5.24377861e-03f, + -1.41524744e-02f, 1.78800425e-02f, 1.58309098e-04f, -6.65622611e-03f, + -2.96951835e-03f, -8.56024841e-03f, 1.17536295e-02f, 5.73146560e-03f, + -9.52024147e-03f, -1.73811657e-03f, -7.15973712e-03f, 2.09085382e-02f, + 1.51618579e-02f, -8.23166741e-03f, 1.93656848e-02f, 2.34929214e-03f, + -9.56560964e-03f, -3.71126600e-04f, -1.05011755e-02f, 6.84109627e-03f, + 1.72049606e-02f, -1.13161072e-02f, 6.99465519e-03f, 1.86201171e-02f, + 8.30487965e-03f, 1.28265618e-02f, -9.59017344e-03f, -1.35897221e-03f, + -8.29436703e-03f, -1.16034528e-03f, -9.36052382e-03f, 1.11389006e-03f, + -1.47942374e-02f, 3.20631108e-02f, 1.27427647e-02f, -1.12717901e-02f, + -1.41438035e-03f, -6.90707283e-03f, -3.92133805e-03f, -4.78314960e-03f, + -6.90729777e-03f, 7.21014454e-03f, 2.82479074e-02f, 1.01172734e-04f, + -5.97505825e-03f, -3.87149905e-03f, -6.53412863e-03f, -1.94255146e-03f, + -1.12303176e-02f, 3.56246923e-02f, 1.87355322e-02f, -1.44523892e-02f, + 2.51069524e-03f, -1.28841810e-02f, 4.22536223e-02f, 1.66493577e-02f, + -3.19858320e-03f, -8.52262771e-03f, 4.95022362e-03f, 6.78978144e-03f, + -7.98645205e-03f, -3.45005027e-03f, -5.51695403e-03f, -5.14298926e-03f, + -2.52285663e-03f, 1.23693188e-02f, -8.63754119e-03f, -2.26068259e-03f, + -7.24156192e-03f, -2.61305968e-03f, -7.36880964e-03f, -2.00710628e-03f, + -8.91235560e-03f, 3.50224619e-03f, 1.23840486e-02f, -8.21442222e-03f, + -3.41909873e-03f, -5.66686502e-03f, -4.59236510e-03f, -4.90785578e-03f, + -5.23096948e-03f, -4.21126622e-03f, -6.28334832e-03f, -1.54119068e-03f, + 2.04891890e-02f, -7.89066729e-03f, -3.29285102e-03f, -6.03076201e-03f, + -4.09089048e-03f, -5.54204679e-03f, -4.47512037e-03f, -5.16234647e-03f, + -4.95788221e-03f, -4.39066698e-03f, -6.57588180e-03f, 1.24039551e-03f, + 2.02194001e-02f, -1.23070636e-02f, 9.91055290e-04f, -1.13351423e-02f, + 1.67205001e-02f, -1.02088941e-02f, 1.85087114e-02f, 2.64545867e-03f, + -6.80549959e-03f, -4.73374518e-03f, -4.12868256e-03f, -6.56900688e-03f, + -2.29080203e-03f, -9.34154570e-03f, 1.81697994e-02f, -7.10312312e-03f, + 1.27755461e-02f, 1.61563277e-03f, -6.01736312e-03f, -6.51388282e-03f, + 2.20002319e-03f, 7.81301539e-03f, -7.14137276e-03f, -5.62633944e-03f, + 1.22731576e-02f, -6.69640357e-03f, 1.34362765e-02f, -1.07250591e-03f, + 5.91125894e-03f, 8.78227267e-03f, -1.12642458e-02f, -7.74926102e-04f, + -6.30649963e-03f, 2.26837011e-02f, 4.87895578e-03f, -6.12272363e-03f, + -4.62862457e-03f, -5.20785564e-03f, -4.34919863e-03f, -6.34705587e-03f, + -6.93026960e-04f, 3.18674755e-02f, -1.05644768e-02f, -6.98195548e-04f, + -1.01447929e-02f, 2.60715839e-02f, -4.57879584e-04f, -6.99551551e-03f, + -3.34614625e-03f, -6.81323675e-03f, -1.39049124e-04f, 2.27006787e-02f, + 6.16504540e-03f, -8.49953430e-03f, -2.23161896e-03f, -7.62495745e-03f, + -1.87446382e-03f, -9.21407947e-03f, 8.52223722e-03f, 1.41038578e-02f, + -2.96347400e-04f, -1.05372175e-02f, 8.00588331e-03f, 6.29228063e-03f, + -1.38637435e-03f, 1.43177517e-02f, -1.05501769e-02f, -1.53015991e-03f, + -7.39163983e-03f, -3.07140079e-03f, -6.51458751e-03f, 1.21328073e-02f, + -5.43231129e-03f, -4.62049938e-03f, -5.02018512e-03f, -5.25474972e-03f, + -4.02153332e-03f, -7.45357939e-03f, 1.79696343e-02f, 2.01743253e-04f, + -7.60132404e-03f, -3.08076305e-03f, -6.42507235e-03f, -3.75779641e-03f, + -5.91455263e-03f, -4.26672432e-03f, -5.21808479e-03f, -5.66797094e-03f, + 2.46540465e-04f, 1.01823528e-02f, -1.16542456e-02f, 1.24045235e-03f, + -1.25393660e-02f, 9.91333647e-03f, 2.49787647e-02f, 5.49764986e-04f, + 1.75817669e-02f, -1.04802353e-02f, -2.47606848e-03f, -4.04618182e-03f, + 5.02393322e-02f, -7.04134887e-03f, -2.46555106e-03f, -7.32249634e-03f, + -2.62928096e-03f, -7.44087596e-03f, -1.99796274e-03f, -9.49668069e-03f, + 2.68779130e-02f, -1.81830725e-03f, -5.22250992e-03f, -7.04932771e-03f, + 1.44243902e-02f, 5.27240479e-03f, -1.25055741e-02f, 8.70460821e-03f, + 6.66556724e-03f, -7.63716846e-03f, -3.81968063e-03f, -5.51298488e-03f, + -4.72160649e-03f, -5.07590762e-03f, -4.61144336e-03f, 1.17497022e-02f, + -7.97180691e-03f, 2.56763948e-04f, 1.23049104e-02f, 1.17187327e-02f, + -3.28257794e-03f, -5.56335041e-03f, -5.60613005e-03f, 1.03107095e-02f, + 1.76054600e-02f, -9.01506309e-03f, -2.89875030e-04f, 2.88136493e-02f, + -1.93879391e-03f, -7.19963549e-03f, -2.64117845e-03f, -7.77359420e-03f, + -7.07927223e-04f, 7.27464202e-03f, -1.64535458e-03f, 2.42192631e-02f, + 1.21649619e-02f, 2.31580933e-02f, -9.14288310e-03f, -2.21967704e-03f, + -6.95400958e-03f, 1.62694176e-02f, -7.38613405e-03f, -2.80768376e-03f, + -7.07853202e-03f, -2.84776471e-03f, -7.17505615e-03f, -2.65960108e-03f, + -7.39202071e-03f, -2.78054485e-03f, 1.55436437e-03f, 3.69736769e-02f, + -8.84375508e-04f, 1.53197810e-02f, -7.92480240e-03f, 6.82606562e-03f, + 4.97887247e-04f, 1.56542020e-02f, 4.79753958e-03f, -7.85309061e-03f, + -5.05942534e-03f, 2.68841114e-03f, 6.28629739e-03f, -9.68522154e-03f, + -1.76662149e-03f, -7.52867799e-03f, -2.63996683e-03f, -7.93643433e-03f, + 9.44591456e-03f, 1.07855479e-02f, 1.95254631e-03f, -6.69931930e-03f, + -4.34994804e-03f, -4.95748240e-03f, -5.65406826e-03f, -3.36263537e-03f, + -8.57340661e-03f, 8.86001406e-03f, 3.73522819e-03f, 4.94420261e-04f, + 7.74557945e-03f, -1.36068368e-02f, 1.75649879e-02f, -5.54819668e-03f, + -2.01302593e-03f, 1.12076856e-02f, -3.07162396e-03f, -8.23283834e-03f, + 9.90699225e-04f, 3.08493203e-02f, -6.56727509e-03f, 2.17018118e-02f, + 1.83323933e-02f, -8.54012638e-03f, 2.62593884e-03f, 1.86029335e-02f, + -6.65661801e-03f, -6.86858535e-03f, 3.55766092e-03f, 2.32158107e-02f, + -1.16568394e-02f, -9.71275191e-04f, -8.15151983e-03f, 1.52531692e-02f, + -5.42236132e-03f, -4.54744151e-03f, -5.18225190e-03f, -5.09529840e-03f, + -4.46662982e-03f, -6.15490948e-03f, -2.04463317e-03f, 1.26746784e-02f, + -6.75742323e-03f, -4.53380843e-03f, -4.62401154e-03f, -6.39123248e-03f, + -3.21955637e-04f, 8.69050463e-03f, -9.68611555e-03f, 6.46898585e-03f, + 1.21464644e-02f, -3.09506161e-03f, 1.66003463e-02f, 8.36747608e-03f, + -1.00986099e-02f, -1.61521797e-03f, -7.61329203e-03f, -2.72298052e-03f, + -7.15015337e-03f, -2.32201563e-03f, 5.85466453e-03f, -6.20947729e-03f, + 4.76723818e-03f, -2.79649599e-04f, -9.09266137e-03f, 2.68553343e-03f, + 1.15924838e-02f, 6.87619818e-03f, 8.30818056e-03f, -3.50341604e-03f, + 9.62022702e-03f, -6.97246520e-03f, 3.07170216e-04f, 1.07050630e-02f, + 9.08378950e-04f, -2.95304750e-03f, -8.83014203e-03f, 4.26915517e-03f, + 3.04704864e-03f, 1.10680667e-02f, -3.64329813e-03f, 3.36388158e-03f, + 3.59912593e-03f, -9.24154460e-05f, 2.06226209e-02f, -1.17730880e-02f, + 5.18943596e-03f, 1.31582518e-02f, -6.05882561e-03f, -5.75587339e-03f, + -3.35213079e-03f, -7.43554766e-03f, -9.67805341e-04f, 3.35038726e-03f, + -8.37062537e-04f, 7.31713297e-03f, -6.20202269e-03f, -5.50001173e-03f, + -3.20867461e-03f, -8.65543114e-03f, 6.45771643e-03f, 4.72370650e-04f, + 3.84328658e-03f, 2.84680419e-03f, -8.46351567e-03f, -2.92380931e-03f, + -6.12948362e-03f, -4.90175089e-03f, 2.03157661e-02f, 1.05302306e-02f, + -1.06583203e-02f, 6.76938704e-03f, 2.53834903e-03f, -9.52876082e-03f, + 6.18508117e-03f, 2.34716987e-03f, -7.83532992e-03f, 7.71329733e-03f, + -4.97837085e-03f, -5.08581407e-03f, -4.61909546e-03f, -5.73849631e-03f, + -3.63845869e-03f, -7.61163934e-03f, 3.26520003e-03f, 2.04758509e-02f, + -1.11807896e-02f, 4.53765827e-03f, 4.61389309e-03f, -8.51702622e-03f, + -1.78793867e-03f, -9.34356383e-03f, 7.21357417e-03f, -8.87048100e-05f, + 2.65377769e-03f, 2.44678938e-04f, -7.61033609e-03f, -3.11220420e-03f, + 1.92677696e-02f, -3.83236145e-03f, -6.50652515e-03f, -1.39239634e-03f, + 5.62557894e-03f, -8.15960420e-03f, -2.44938564e-03f, -7.56533796e-03f, + -2.03238053e-03f, -8.78367617e-03f, 1.26668303e-03f, 1.16386932e-03f, + 1.37870777e-03f, 4.67113266e-04f, 4.55488889e-03f, 6.37181883e-03f, + -8.98371785e-03f, -3.01741070e-03f, -5.59026433e-03f, -6.18779151e-03f, + 4.83307042e-03f, 2.43971256e-03f, -8.08167391e-03f, -3.49456225e-03f, + -3.98188823e-03f, 1.03405734e-02f, -9.56816349e-03f, -1.41824502e-03f, + -8.34761583e-03f, -1.35891622e-03f, -9.78696414e-03f, 2.30995981e-02f, + -1.79220273e-03f, 3.97509823e-03f, -1.68763425e-03f, 6.86040524e-03f, + -2.66501808e-03f, -6.66063608e-03f, -3.49520117e-03f, -6.51016345e-03f, + -3.17225971e-03f, -7.77029931e-03f, 5.30605586e-03f, 1.47494841e-02f, + -5.72111695e-03f, -4.39857957e-03f, -5.42762187e-03f, -4.61070609e-03f, + -5.36662512e-03f, -4.47718691e-03f, -6.01133126e-03f, 8.34525481e-03f, + -3.03263823e-03f, -6.24028726e-03f, -3.81613618e-03f, -6.29365752e-03f, + -3.24459334e-03f, -8.00164363e-03f, 7.22476059e-03f, 2.04373455e-02f, + -1.53699999e-03f, -5.29453478e-03f, -4.98114937e-03f, -4.94060711e-03f, + -5.02396198e-03f, -4.94535620e-03f, -5.05044962e-03f, -4.78430949e-03f, + -5.73961350e-03f, 4.24002759e-03f, -8.26808505e-04f, -8.67290748e-03f, + 1.08050192e-03f, 8.14918346e-03f, -6.67837799e-04f, 6.93195031e-03f, + -9.31423093e-03f, -1.97303871e-03f, -7.53698920e-03f, -2.48718065e-03f, + -7.84940163e-03f, 8.87137825e-03f, -8.74831227e-03f, 6.54287037e-03f, + 1.02275617e-02f, -9.97988001e-03f, -1.79436589e-03f, -7.33796078e-03f, + -3.55396439e-03f, 8.65501648e-04f, 3.20471917e-03f, -3.16362453e-03f, + 1.62478956e-02f, 1.79874927e-02f, -8.64002890e-03f, -4.98845943e-03f, + 3.09241285e-03f, 4.59119532e-03f, 3.01093226e-03f, -5.92090654e-03f, + 1.05650874e-02f, 6.61113989e-03f, -8.16226766e-03f, -3.07612808e-03f, + -6.26171807e-03f, -4.15762681e-03f, -5.27708971e-03f, -5.64902105e-03f, + 6.15502379e-04f, 3.58895308e-03f, -1.02983941e-02f, 9.46849224e-03f, + 9.19153859e-03f, 1.60273710e-03f, -9.85400987e-03f, 4.77105516e-03f, + 1.93276469e-03f, -2.42563170e-03f, 8.48503306e-03f, -1.05283698e-02f, + 1.14416358e-03f, 8.63605421e-03f, -5.38332914e-03f, -5.65305489e-03f, + -3.68060928e-03f, -7.21808594e-03f, 1.26212286e-02f, -5.28391100e-03f, + 4.66495908e-03f, -2.12140598e-03f, 2.89803898e-03f, -5.17800755e-03f, + -4.54909855e-03f, -5.72245499e-03f, -3.74147505e-03f, -7.14493787e-03f, + 9.06631932e-04f, 1.39107873e-02f, -7.76180936e-03f, -3.37758633e-03f, + -6.21428303e-03f, -3.14484543e-03f, 2.08570174e-02f, -4.98723474e-03f, + -4.43412298e-03f, -5.77106769e-03f, -3.91691337e-03f, 2.80249995e-03f, + 1.25071757e-02f, 2.71579464e-02f, 5.21139294e-03f, -8.50740319e-03f, + 7.42977834e-03f, 6.50917758e-03f, -8.74898222e-03f, -2.56993645e-03f, + -6.84126006e-03f, -3.21355922e-03f, -7.15335338e-03f, 7.28529609e-04f, + 3.42720785e-03f, -9.23682559e-03f, 1.88286596e-03f, 4.82631265e-03f, + -6.93557947e-03f, -6.05959409e-04f, 1.48814895e-02f, 4.71703410e-03f, + 1.98327767e-03f, 1.39970808e-02f, -1.15783365e-02f, 3.12768237e-03f, + -2.63275397e-03f, 3.58945099e-03f, -8.47636448e-04f, 2.85375360e-03f, + 2.86150444e-03f, 1.44167828e-03f, -8.05342110e-03f, -2.59157190e-03f, + -3.57074909e-04f, 7.53460281e-03f, 6.71840013e-03f, 1.27799412e-02f, + 1.85746108e-03f, -1.72591097e-03f, 1.01123309e-03f, -8.06453386e-03f, + -2.77466312e-03f, -6.66973784e-03f, -3.47022417e-03f, -6.65709247e-03f, + 4.62730961e-03f, -1.46903879e-03f, -9.59592219e-03f, 1.73074850e-02f, + 1.03083268e-02f, -1.18135629e-02f, 6.04519191e-04f, -1.07140085e-02f, + 3.44847533e-03f, -1.81337506e-03f, 8.06622964e-03f, 2.00966919e-03f, + -4.97980745e-03f, 6.38352639e-03f, -8.48635164e-03f, 4.60605059e-03f, + -4.51223601e-03f, -5.12619641e-03f, -4.63624692e-03f, -5.53974678e-03f, + -3.90242624e-03f, -7.05853507e-03f, 5.51894667e-03f, 1.08963362e-02f, + -7.44418832e-03f, -3.39565308e-03f, -6.17908221e-03f, -3.74349048e-03f, + -6.60497554e-03f, 1.07945236e-02f, 1.02947909e-02f, -1.28850299e-02f, + 3.15307237e-02f, 3.90729708e-03f, 2.70278482e-04f, -3.06986675e-03f, + -6.01069216e-03f, 4.79726657e-03f, -6.47236575e-04f, 1.02150771e-02f, + -9.18961592e-03f, -1.97781037e-03f, -4.83003509e-04f, 1.82550683e-03f, + 1.48514045e-02f, -2.48988487e-03f, 7.19732440e-03f, -7.54066882e-03f, + -3.41323813e-03f, -6.07289593e-03f, -4.00677324e-03f, -5.76405506e-03f, + -4.20315844e-03f, -5.56803651e-03f, -4.58894396e-03f, -3.96929981e-03f, + 6.74669870e-03f, -1.01805310e-02f, 2.03864841e-02f, -5.49905552e-03f, + -1.36063854e-03f, 3.12359471e-03f, -4.95034700e-03f, -6.76538501e-03f, + 7.14032767e-03f, 6.85844815e-03f, -7.48484781e-03f, 5.71466059e-04f, + 7.96046333e-03f, 1.39210535e-02f, -6.13062351e-03f, 4.43489200e-03f, + 1.15128746e-02f, 1.72690728e-03f, 5.04102703e-03f, -7.62047401e-03f, + -2.57419274e-03f, -7.98201075e-03f, 1.23895876e-02f, 2.61781258e-03f, + -2.18700968e-03f, 3.97919791e-03f, -7.84423000e-03f, -2.81287936e-03f, + 2.48014355e-03f, -5.36142691e-03f, -4.95726605e-03f, 2.56732056e-03f, + 2.28803731e-04f, -1.07692897e-02f, 1.78080309e-02f, -1.52089473e-04f, + -4.29940629e-03f, -8.53506363e-03f, 9.67284772e-03f, 4.13095929e-03f, + -6.98349088e-03f, -5.65633358e-03f, 1.25811627e-03f, 1.09023389e-02f, + -9.12294190e-03f, -2.77012144e-03f, -5.95690710e-03f, -4.83229003e-03f, + -3.88091230e-03f, -7.98429945e-03f, 6.57801467e-03f, 5.10047327e-03f, + 1.79552827e-02f, 3.20566311e-03f, -1.03474939e-02f, -1.82504398e-04f, + -9.95603077e-03f, 5.12581039e-03f, -5.55577693e-03f, 1.33349920e-03f, + 4.11731651e-03f, -7.04613109e-03f, -4.03000241e-03f, -5.05072778e-03f, + -6.08775405e-03f, 1.97093266e-02f, 9.60728018e-04f, -1.00668914e-02f, + 4.37731634e-03f, 1.06982076e-02f, 2.40962617e-03f, -4.84341937e-03f, + -9.11210101e-04f, 1.59919635e-02f, -5.04561404e-03f, -4.61534693e-03f, + -3.90888089e-03f, 3.77413502e-03f, -8.01074570e-03f, -2.02385714e-03f, + -8.53590276e-03f, 2.85725723e-03f, 2.41020853e-03f, 4.21617322e-04f, + -2.02455378e-03f, -6.29452028e-03f, -4.29535272e-03f, -3.74465784e-03f, + 4.14198589e-03f, -1.01250973e-02f, 1.11277086e-02f, 2.37488903e-02f, + -1.60638124e-03f, 1.56843654e-03f, -4.98653569e-03f, 9.29442302e-03f, + 1.08821145e-02f, -6.76124952e-03f, -4.83249704e-03f, -3.58254584e-03f, + 4.72801061e-03f, -6.70585838e-03f, 1.33012602e-02f, 9.97294007e-03f, + 1.10505240e-02f, -2.67914847e-03f, 1.86526138e-02f, -8.17193137e-03f, + -6.90844567e-05f, 1.19619554e-03f, 4.43815387e-03f, 7.90173790e-03f, + -1.17743807e-03f, -3.25465340e-03f, -8.60122867e-03f, 1.78466419e-02f, + 1.21793475e-02f, -9.20773371e-03f, -2.05423375e-03f, -7.31475279e-03f, + 9.58593701e-03f, 3.08856683e-04f, -6.25889500e-03f, -3.98484986e-03f, + -5.79016398e-03f, -3.71923003e-03f, -6.79337138e-03f, 6.82650843e-04f, + -1.09357961e-03f, 1.57945686e-02f, -2.03466778e-03f, -6.69662036e-03f, + -3.48389609e-03f, -5.52324002e-03f, 9.83638666e-03f, 5.73288916e-03f, + -5.09467499e-03f, 9.64313523e-03f, -2.10872851e-03f, 1.97346054e-03f, + -8.44488949e-03f, -1.44145986e-03f, -1.11421346e-03f, 4.25181026e-03f, + 5.54518098e-03f, 7.72047847e-03f, -4.27714869e-03f, -4.90079019e-03f, + -5.27356509e-03f, -3.96961524e-03f, -6.76242426e-03f, 2.67065523e-03f, + -4.66118906e-04f, -6.36528149e-03f, -4.45781780e-03f, 3.18270657e-03f, + 4.90014962e-03f, -5.74572984e-03f, -3.79666513e-03f, -6.67031991e-03f, + 2.99354803e-03f, 1.92768561e-02f, -5.84982200e-03f, 2.58347079e-03f, + 1.63705434e-02f, -4.05241120e-03f, 2.79734403e-03f, -1.04199818e-02f, + 8.18947929e-03f, -2.51641544e-04f, -6.79242335e-03f, 3.79420626e-03f, + 1.85601266e-03f, -1.02668024e-02f, 6.50658846e-03f, -1.82624029e-03f, + 2.52318893e-03f, -1.56400421e-03f, -5.88765116e-03f, -4.73099638e-03f, + -4.02265454e-03f, 4.14916491e-03f, -4.61808821e-03f, -6.75266850e-03f, + 1.05805368e-02f, 1.69013617e-02f, -4.83893111e-03f, -3.20312842e-03f, + -6.29921180e-03f, -3.88934682e-03f, 2.95280736e-04f, -8.60700593e-04f, + -9.06380236e-03f, 7.89089271e-03f, -4.12709501e-03f, 1.17346649e-03f, + 3.81422625e-03f, 6.53059593e-04f, 2.47058995e-03f, -7.84223716e-03f, + -2.27763395e-03f, -8.21299815e-03f, 9.70841711e-03f, 1.19326524e-03f, + -7.25898557e-03f, -3.18544999e-03f, -6.16258672e-03f, -3.98864411e-03f, + -2.08591736e-04f, 1.15389644e-02f, -6.72468124e-03f, 4.09008019e-03f, + -2.75302129e-03f, -3.16826658e-03f, 1.47688764e-03f, -4.41364370e-03f, + -3.56673074e-04f, -7.61515138e-05f, 1.07841525e-02f, -2.45246505e-03f, + 5.49961718e-04f, -8.75350828e-03f, 3.13891294e-03f, -2.87382872e-03f, + -5.98431997e-03f, 5.17943152e-04f, -5.09183491e-04f, -7.77113079e-03f, + 1.67487971e-03f, -1.18797485e-03f, 1.85925070e-03f, -5.27709157e-03f, + -4.17857602e-03f, 7.59757600e-03f, -6.24067438e-03f, -3.35145956e-03f, + -7.23822535e-03f, 6.94158880e-03f, 1.91082399e-03f, -8.73561197e-03f, + 9.43943984e-03f, -1.88277461e-03f, -6.65177394e-03f, 2.09481290e-03f, + -1.42978083e-03f, 2.06249269e-03f, -7.15123411e-03f, -2.45739008e-03f, + -8.25114079e-03f, 4.63869913e-03f, 8.16085769e-03f, 4.94611590e-03f, + -4.90448549e-03f, 2.99268277e-03f, 4.83356276e-03f, -5.77888101e-03f, + -3.73948252e-03f, -6.53409738e-03f, 4.80508276e-03f, -2.79623397e-04f, + -2.65118891e-03f, 2.57350540e-03f, -8.51460666e-04f, -1.39495731e-03f, + 5.24190750e-03f, -7.57783216e-03f, -3.67202513e-03f, -2.79210812e-03f, + 2.64066097e-03f, -3.77143477e-03f, 8.22127730e-03f, -4.03776846e-03f, + -3.75398898e-03f, -6.89107459e-03f, 1.55562578e-04f, 1.51722675e-02f, + 1.44633282e-02f, -1.01634184e-03f, -6.75899428e-03f, -3.22657653e-03f, + -6.46478449e-03f, 1.39839137e-02f, 8.33691848e-04f, -6.17275789e-03f, + 3.92139947e-03f, -6.63597042e-03f, 4.27182446e-03f, -6.94325984e-03f, + 1.52294214e-02f, -9.72380384e-04f, 2.05245260e-03f, -6.77630247e-03f, + 1.40175029e-02f, 9.00074436e-03f, 5.89749562e-03f, 1.72053018e-03f, + 3.50879950e-05f, -5.36153894e-03f, -2.84344522e-03f, -7.35885117e-04f, + 6.58126242e-03f, 5.78782187e-04f, -7.76558851e-03f, -2.74665954e-03f, + -5.08678639e-03f, 3.10185204e-03f, -9.96637579e-03f, 3.60360595e-03f, + 1.16477474e-03f, -4.71172466e-03f, -6.41705575e-03f, 7.23771070e-03f, + -4.85637384e-03f, -3.24430489e-03f, -7.89261809e-03f, 4.30491729e-03f, + 3.09680149e-03f, -3.31520882e-03f, 4.10316694e-03f, -8.90037281e-03f, + 9.64318226e-04f, -1.15719618e-04f, -1.92477535e-03f, 5.85931918e-03f, + 6.75577017e-03f, -1.15128977e-02f, 8.64694205e-03f, 6.88302646e-03f, + 6.80445635e-03f, -6.62214840e-03f, -2.21208106e-03f, 7.17033720e-03f, + -5.58045486e-03f, -4.23758895e-03f, 9.85001373e-04f, -5.08915747e-03f, + -4.36207850e-03f, -5.69689838e-03f, 2.43040873e-03f, 8.36959994e-03f, + 2.82002811e-03f, 1.80068140e-03f, -2.52816170e-03f, 4.80037382e-04f, + -6.86971566e-03f, 8.34910653e-04f, -3.31077470e-03f, 7.48846051e-03f, + -3.94768295e-03f, 3.01129536e-03f, -2.97668479e-03f, -6.33853920e-03f, + 7.03264274e-03f, 1.63090422e-03f, 2.04023589e-03f, -1.10568074e-03f, + -6.48335096e-03f, -3.47944943e-03f, -5.86181245e-03f, -3.62544479e-03f, + 1.32673411e-03f, 1.14105204e-02f, 1.93359223e-02f, 5.27141098e-03f, + -7.15134968e-03f, -2.57375479e-03f, -5.24425871e-05f, 1.16037844e-03f, + -5.71836575e-03f, 7.52029577e-04f, 3.31080313e-03f, -4.81437679e-03f, + -4.36413268e-03f, -5.61097160e-03f, 4.66156870e-03f, -8.40562372e-04f, + -9.07532064e-03f, 1.21545264e-02f, 8.13043005e-03f, -5.28543711e-03f, + 1.05413344e-03f, -2.32645178e-03f, 1.51810678e-03f, 7.29741236e-03f, + -4.55288587e-03f, 5.06533712e-03f, -2.72835342e-03f, -6.45969856e-03f, + -2.88322521e-03f, -6.89007129e-03f, 8.15318335e-03f, -6.00325972e-03f, + -1.99871798e-03f, -9.58843105e-03f, 1.55632733e-02f, 5.34079968e-03f, + -8.22594295e-03f, 7.30222016e-03f, 7.01210600e-03f, 6.50289705e-03f, + -6.36629283e-03f, -4.79947787e-03f, 4.55280824e-03f, -1.88588290e-03f, + -1.78335933e-03f, -6.83002335e-04f, 1.05909710e-03f, 4.08943899e-03f, + 5.14552172e-04f, -8.25005626e-03f, 7.76107009e-03f, -5.10360717e-03f, + -3.13495206e-03f, -7.32380968e-03f, 8.80949473e-03f, -7.23628548e-03f, + 5.47734615e-03f, -3.06496957e-03f, 5.41522373e-03f, 6.67087580e-03f, + -9.25533429e-03f, 1.09771607e-03f, 1.60310944e-03f, -6.69170860e-05f, + 5.09321201e-03f, -4.74597506e-03f, -3.88663508e-03f, -6.94650872e-03f, + 8.24670021e-03f, 2.36252410e-03f, -1.51708350e-03f, -3.91295106e-03f, + -5.01061623e-03f, -4.98006058e-03f, -2.76865374e-03f, 3.38605240e-03f, + 1.46377056e-03f, 1.26199528e-03f, -1.49527857e-03f, 1.20833665e-03f, + 1.09272923e-02f, -2.87570467e-03f, -2.65086568e-03f, 1.88823163e-03f, + -7.92334646e-03f, -1.80709201e-03f, 3.91757260e-03f, 7.23500029e-03f, + -4.51472907e-03f, -1.30809939e-03f, -9.06406845e-04f, 4.88496943e-03f, + 7.55458534e-03f, -4.44901621e-04f, -7.06716225e-04f, 3.79425929e-03f, + -4.69648719e-03f, -1.36187052e-03f, 2.38273810e-03f, -1.15126205e-03f, + -3.29285572e-03f, -5.74141197e-03f, 1.14928502e-03f, -4.22011182e-03f, + -4.97485850e-03f, -4.44304437e-03f, 5.46559243e-03f, 5.24649571e-04f, + -2.68142359e-03f, -6.99195011e-04f, 1.67275331e-03f, -6.16452778e-03f, + -4.15694686e-03f, -4.56419572e-03f, -5.29955479e-03f, -3.25137142e-03f, + -7.72630557e-03f, 2.41387284e-02f, 8.90327992e-04f, -6.68151009e-03f, + -4.05728251e-03f, 3.52403757e-04f, -1.79493928e-03f, -6.26764161e-03f, + -3.46173696e-03f, -5.58118112e-03f, -3.87841366e-03f, -5.29209799e-03f, + -4.07245253e-03f, -5.18962565e-03f, -4.01620160e-03f, -5.66171249e-03f, + -8.54312470e-04f, 4.03031264e-03f, -2.65656866e-03f, 1.40868221e-03f, + -4.79886789e-03f, 5.49757208e-03f, 1.64180078e-02f, -6.44937481e-03f, + 5.24826144e-03f, -4.92685770e-04f, -6.42297638e-03f, 1.98278337e-03f, + -2.99916409e-03f, 1.23925685e-04f, 6.67309196e-03f, -7.34959749e-04f, + 2.01222769e-03f, -2.32744381e-03f, 4.24873806e-03f, 1.16521527e-03f, + -8.95117018e-04f, -3.30611842e-03f, -7.55726946e-03f, 3.11124015e-03f, + 7.91530397e-03f, -2.37414604e-03f, -4.29338205e-03f, 1.13018979e-02f, + 7.97033300e-03f, 1.13477761e-02f, -3.07749244e-03f, 8.37448800e-04f, + 2.05472809e-03f, 2.86937507e-03f, 1.56820948e-03f, -2.65212883e-03f, + 1.28170356e-02f, -6.74729564e-03f, 7.61956050e-03f, 9.81961079e-03f, + 7.43228045e-05f, -7.25514329e-03f, 2.24815865e-03f, -2.78294264e-04f, + 8.28057251e-03f, 6.82450470e-03f, -4.58537634e-03f, 6.78886996e-03f, + -9.21405843e-03f, 3.65471096e-03f, 3.18025255e-03f, 4.47224780e-03f, + -2.73480822e-03f, -2.22112234e-03f, -4.40393853e-03f, -1.30302532e-03f, + 8.62429989e-03f, 1.62069650e-03f, -7.97373132e-03f, -1.94745323e-03f, + -7.00460842e-03f, -1.77508226e-03f, -9.38332601e-04f, 1.37923253e-02f, + 9.56108751e-03f, 1.21234727e-03f, -1.27473266e-03f, 7.89543494e-03f, + -1.20944868e-03f, -6.00810827e-03f, 1.60853839e-02f, -2.23428815e-03f, + -4.76451812e-03f, -4.86028300e-03f, -3.89143684e-03f, 6.81601393e-03f, + 6.17492457e-04f, -1.52948354e-03f, -6.05530666e-03f, -3.30255767e-03f, + -6.14570571e-03f, -1.11553558e-03f, 6.54467542e-03f, -5.55307579e-03f, + 5.31612151e-03f, -7.78878911e-03f, -1.45083430e-03f, -8.67558409e-03f, + 6.59912879e-03f, 4.67741078e-03f, 3.74962129e-03f, -7.70272934e-03f, + 7.37683796e-03f, 5.91003631e-03f, -8.72073623e-03f, 6.24805135e-03f, + -6.58276690e-03f, -1.20440502e-03f, 1.02966808e-02f, -5.90427129e-03f, + -3.66400126e-03f, -5.44445035e-03f, -3.44616303e-03f, 2.99870060e-05f, + 8.15643277e-04f, 3.45784344e-03f, -6.51752447e-03f, -3.38523400e-03f, + 1.87908914e-02f, 1.43409758e-02f, 3.56209819e-03f, -4.59185105e-03f, + -3.80291525e-03f, 6.42513354e-03f, -7.24244145e-03f, 8.31519054e-03f, + 6.72130441e-03f, -8.60304978e-03f, -7.93725528e-04f, -4.72287106e-03f, + 1.05449774e-02f, 1.96298845e-03f, -6.84100121e-03f, 2.79225052e-03f, + 4.70927430e-03f, 6.92785752e-03f, -1.33534900e-04f, 1.92366850e-03f, + -5.51956460e-03f, 9.94788012e-03f, -4.86899257e-04f, 8.29728831e-05f, + 3.42265149e-03f, 2.28923356e-03f, -3.11382407e-03f, -3.86428001e-03f, + -5.27023156e-03f, -3.74698648e-03f, -5.33777667e-03f, -3.57023204e-03f, + 1.21870385e-02f, -3.42049771e-03f, -6.30267990e-03f, 9.20951086e-04f, + -2.13223276e-03f, -9.65377047e-04f, -2.31806909e-03f, -5.38155758e-03f, + 5.36763153e-03f, 6.51794239e-04f, 1.65139750e-02f, 6.61691582e-03f, + -6.90852672e-03f, -3.62070809e-03f, -2.28741270e-03f, 4.18861920e-05f, + -3.59546251e-03f, 2.91830401e-03f, -4.28697119e-03f, -2.70499229e-03f, + 5.24487873e-03f, -4.77402057e-03f, -5.09739071e-03f, 3.56832902e-03f, + -1.46792156e-03f, -4.03375024e-03f, -1.96510315e-03f, 5.74768004e-03f, + 8.06184488e-03f, 1.64796150e-03f, -1.19169972e-03f, 2.21215379e-02f, + 3.62443018e-03f, -6.26079183e-03f, -3.94156853e-03f, -4.44294705e-03f, + -4.64986176e-03f, 2.25049644e-03f, 2.31697438e-03f, -3.54596208e-03f, + -7.25511141e-03f, 3.12269524e-03f, 1.67356309e-02f, -8.02171047e-03f, + -3.07186953e-03f, -4.63515805e-03f, -5.81563080e-03f, 5.01823034e-03f, + 9.55090513e-03f, 5.69292030e-03f, -2.99000899e-03f, 1.13058216e-03f, + 1.46662730e-02f, -2.96154485e-03f, 1.39821601e-04f, -7.63932601e-04f, + -3.19975506e-03f, -4.49424179e-03f, 4.50929679e-03f, 3.60395710e-03f, + 9.25647525e-03f, -7.57825463e-03f, 4.45598183e-03f, -8.00947506e-04f, + 1.13672750e-04f, -5.58040683e-03f, 9.59205418e-04f, 6.89000404e-03f, + -7.07721413e-05f, -1.58035977e-03f, -4.01556487e-04f, -4.71922661e-03f, + -3.68515808e-03f, -6.08791984e-03f, 9.40437634e-03f, -3.08988697e-03f, + -3.72982973e-03f, -4.68176818e-04f, -5.48385625e-03f, 5.40747906e-03f, + -4.87244039e-03f, -4.13755246e-03f, 1.91416389e-03f, 1.03975853e-02f, + -7.23558695e-03f, -1.47504374e-03f, -1.78761946e-03f, -5.05647845e-03f, + -3.77304493e-03f, -5.71601529e-03f, 4.10925185e-04f, 3.94408891e-03f, + -7.92977761e-03f, 1.80062340e-03f, -4.20169057e-03f, -3.73064220e-03f, + -5.58457822e-03f, 2.68200496e-03f, -5.14784749e-03f, -5.26646946e-04f, + -1.80077942e-03f, 1.55463547e-04f, -5.14923404e-03f, -3.99210872e-04f, + -3.80915135e-03f, -4.37078341e-03f, -4.94554372e-03f, 1.72176761e-03f, + 2.81308361e-03f, -6.09556223e-03f, -3.34854701e-03f, -5.26342712e-03f, + 1.64393042e-05f, -2.91735737e-03f, 4.39563439e-03f, 1.40456921e-02f, + -6.43372503e-03f, 4.54736064e-04f, 1.02862162e-03f, 2.39435965e-04f, + -7.37204324e-03f, 5.00465233e-03f, -1.76771937e-03f, 6.74401658e-03f, + 2.70811591e-03f, 3.85837507e-03f, 9.35902373e-04f, 8.57444635e-04f, + 2.59823469e-03f, -1.46523493e-03f, 5.09450761e-03f, 6.38123361e-03f, + 4.55922206e-03f, -2.88251799e-03f, -4.32970783e-03f, 3.61445290e-03f, + -2.42180239e-04f, -1.35060464e-03f, 5.15280670e-03f, -5.60523524e-03f, + 2.57627437e-03f, -4.98586080e-03f, -2.00388428e-03f, -6.39117769e-04f, + -1.20531901e-03f, -5.59607242e-03f, -3.30299479e-03f, -6.00870751e-03f, + 1.55830934e-03f, 1.34547198e-02f, -7.06117814e-03f, -1.22073891e-03f, + -8.51829296e-03f, 4.73450670e-03f, 4.43596709e-03f, -7.08312725e-05f, + -5.81483314e-03f, 1.77251616e-03f, 9.10435697e-05f, -2.74541528e-03f, + 6.50184471e-03f, -6.74201355e-03f, -3.55194595e-03f, -2.71061672e-03f, + -1.32142311e-03f, -5.51504890e-03f, -9.17527630e-04f, 6.92242742e-03f, + 6.50432357e-03f, -6.29763680e-03f, 4.35238386e-03f, 2.68239380e-03f, + -2.70819599e-03f, 4.82571353e-03f, 3.51418377e-03f, -7.69631917e-03f, + 1.24200926e-03f, -5.41759808e-03f, 9.57401841e-03f, 2.33067976e-03f, + -1.60644633e-03f, -7.39783474e-04f, -4.82891152e-03f, 7.12426723e-04f, + 1.32435817e-03f, 7.48477318e-04f, -9.98120810e-04f, -5.66908716e-04f, + -2.34262089e-03f, -2.19775919e-03f, -4.91523296e-03f, 9.38384480e-03f, + -3.56982750e-03f, 5.73799947e-03f, 2.79928054e-03f, -6.85157150e-04f, + -2.26160653e-03f, 9.45353740e-03f, -2.13782383e-03f, -1.80934303e-03f, + -1.15842574e-03f, -4.27547188e-03f, -1.17830841e-03f, -4.81666605e-03f, + -1.26724151e-03f, 5.47755583e-04f, 4.92781841e-04f, -7.88475810e-04f, + 3.16672719e-03f, 3.21934926e-03f, 7.55739222e-03f, -7.12463750e-03f, + 6.81311681e-03f, 3.28965612e-03f, -5.35583872e-03f, -3.72352770e-03f, + -4.42208613e-03f, 1.67998797e-03f, -3.75725897e-04f, -4.99314565e-04f, + -2.64319564e-03f, -5.41990896e-03f, -1.81125015e-03f, 5.83272555e-03f, + -4.48823384e-03f, -7.30774853e-04f, -3.29962474e-03f, 9.67810884e-04f, + -9.49436949e-04f, -1.22737103e-03f, 3.10354390e-03f, -2.52535961e-03f, + -6.54871859e-03f, 4.82546248e-03f, 5.92181680e-03f, -2.44002566e-03f, + -1.91449552e-03f, 4.49857254e-03f, -6.05588100e-04f, -6.27095177e-03f, + 1.66207984e-03f, -6.83058721e-03f, 3.19371726e-03f, -1.06417549e-03f, + -1.39549305e-03f, -6.71771259e-03f, 5.12268265e-03f, -5.03821415e-03f, + 1.12473857e-02f, 4.23995705e-04f, -5.30022018e-03f, -4.85802270e-03f, + 4.07557389e-04f, 7.18520005e-03f, -8.65326702e-04f, 3.76189055e-04f, + -6.15477207e-03f, 5.80187072e-04f, -6.25376719e-03f, -1.83485130e-03f, + -1.02759821e-03f, -1.49794696e-03f, 4.79546376e-03f, 5.60230462e-03f, + -3.71487316e-03f, 8.19490339e-03f, -6.53539019e-04f, 1.07411115e-02f, + 4.44623616e-03f, -2.12945949e-03f, -2.42564438e-03f, -1.91350791e-04f, + -5.53025210e-03f, -3.37853498e-03f, -4.88715685e-03f, 3.97696171e-03f, + -6.77176894e-03f, 1.48787764e-02f, 1.94223105e-03f, -2.72461567e-03f, + 5.13389938e-04f, -7.12235567e-03f, 1.03777766e-02f, -2.11001819e-03f, + 3.93679416e-03f, 1.18796509e-03f, -1.07210666e-03f, 3.70222502e-03f, + -5.88006219e-03f, -3.81415694e-03f, -1.67800372e-03f, 4.10048323e-03f, + -1.85748763e-03f, -2.65316663e-03f, 8.23434259e-03f, -3.82254055e-03f, + -4.88472435e-03f, -3.33915478e-03f, -5.37816321e-03f, -2.24353904e-03f, + 2.46147998e-03f, -4.33714134e-03f, -4.74412223e-03f, -3.14295950e-03f, + -6.11423109e-03f, 7.17213363e-03f, 6.20635954e-03f, -8.60532380e-04f, + -1.26863894e-05f, -1.33150051e-03f, 3.35503208e-03f, 3.63065119e-03f, + -1.92173930e-03f, -1.70750417e-03f, 7.00454592e-03f, 5.82060316e-03f, + 1.15678863e-03f, -6.43512722e-03f, 1.13472091e-03f, 5.68786518e-05f, + 2.60644683e-03f, 4.82183171e-03f, -3.50744558e-04f, -8.12216984e-03f, + 7.62411544e-03f, 6.18963254e-03f, -5.38434520e-03f, -4.05782354e-03f, + -2.90139960e-03f, 5.98255325e-03f, -7.07699570e-04f, -2.03903173e-03f, + 4.04212154e-03f, -2.43233817e-03f, 7.31740961e-03f, 5.95194904e-04f, + -5.96451462e-03f, 3.24023380e-04f, 5.59901003e-04f, 1.84614487e-02f, + 7.19662218e-03f, -1.48709611e-03f, 5.10241163e-04f, 8.44700514e-04f, + -7.37913941e-03f, 7.90363259e-03f, 2.45006267e-03f, 3.63586559e-03f, + -4.26201658e-03f, 5.90818930e-03f, 1.51737557e-03f, -8.71079576e-04f, + 5.77287785e-03f, -1.87239628e-03f, -2.48998218e-03f, 1.06708989e-03f, + -1.58027957e-03f, -4.62638408e-03f, -4.45957273e-03f, 1.86479773e-03f, + 1.37654384e-03f, -1.85972170e-03f, -2.88269704e-04f, -6.36827692e-03f, + 1.46486875e-03f, 1.31113108e-02f, -2.30520067e-03f, 8.54400340e-04f, + -3.89289050e-03f, -2.87801235e-03f, -9.41047598e-04f, -4.74338710e-03f, + -3.97363239e-03f, -4.06961648e-03f, -1.29606105e-04f, 4.32304192e-03f, + 7.92230053e-03f, -2.84532455e-03f, 2.38556162e-03f, -3.11613949e-03f, + 2.24310013e-03f, -3.69558105e-03f, 3.39373112e-03f, -3.41253973e-03f, + -2.28464791e-04f, 4.22790739e-03f, -5.96660841e-03f, 1.71962717e-04f, + -3.87628946e-03f, 8.01321522e-03f, -1.46580219e-04f, -5.69059949e-03f, + -2.81608565e-03f, -5.78954507e-03f, 2.63998968e-03f, 5.16203604e-04f, + -4.07884423e-03f, 2.40185276e-03f, -4.79125616e-03f, 9.36265521e-04f, + -1.31782023e-03f, 2.05998324e-03f, 5.61753282e-03f, 6.95474615e-03f, + 5.24528302e-05f, 7.05874724e-03f, 8.01999260e-04f, -2.10510217e-03f, + 4.93749814e-03f, -4.58438227e-04f, 3.01276720e-03f, -7.79938023e-03f, + 2.51130275e-03f, 2.36279448e-03f, 9.02960024e-04f, -5.36783977e-03f, + 6.53951790e-03f, -4.21827731e-03f, 1.01298967e-02f, 2.06024966e-03f, + -3.36233823e-03f, 8.40087338e-04f, -6.06169339e-03f, -2.38735219e-03f, + -5.89045891e-03f, -1.32534920e-03f, -1.58587433e-03f, -1.01847820e-03f, + -3.02139341e-03f, -3.66850043e-03f, -1.62814405e-03f, -5.03876375e-04f, + -5.70762022e-03f, 8.70703553e-03f, 9.99057337e-04f, -4.64990590e-04f, + 6.58124985e-03f, -6.39788637e-03f, 2.91139583e-03f, -4.47122990e-03f, + 7.79390724e-03f, 1.03696773e-03f, -2.56865318e-03f, -5.66853029e-03f, + -4.81231512e-04f, 1.00676685e-03f, 5.61935495e-04f, -3.67448335e-03f, + -3.47121505e-05f, -3.33829928e-03f, 3.09500436e-03f, 7.06360452e-03f, + -5.70776393e-03f, -3.56549381e-03f, -3.14487938e-03f, 5.68157285e-03f, + 4.97543496e-03f, 1.38869575e-02f, 3.99565520e-03f, -5.09133413e-03f, + 6.22963080e-04f, -8.65638991e-05f, -2.28672156e-03f, -6.34978792e-04f, + -6.57459784e-03f, 4.26422041e-04f, -3.30462500e-03f, 2.29660944e-03f, + -3.60163301e-03f, -2.49510308e-03f, 9.75555342e-04f, 1.11253292e-03f, + 4.90692540e-03f, 4.86955802e-04f, 3.12291002e-03f, 1.60946853e-03f, + -3.29130626e-03f, 6.26694330e-04f, 2.57099031e-03f, -5.72170310e-03f, + -3.20275128e-03f, -1.80130253e-03f, 2.29699919e-03f, -8.19372678e-05f, + 2.81607706e-03f, 1.95721610e-03f, 1.08580013e-03f, 5.98388552e-04f, + -4.93981870e-03f, -3.22229696e-03f, -4.99113020e-03f, -8.07005868e-04f, + -3.83018273e-03f, -3.30201430e-03f, -1.63205562e-03f, 9.31194675e-05f, + 1.25765757e-03f, -5.80334263e-03f, 8.28197422e-03f, -4.93704749e-03f, + 2.53100344e-03f, -4.98217923e-05f, -3.31113529e-03f, 2.63931484e-05f, + 5.86062549e-03f, -1.77261413e-03f, 4.44293214e-03f, -6.44493930e-03f, + 9.59142830e-04f, -6.23621125e-03f, 5.06556513e-03f, -2.58949201e-03f, + 3.98122965e-04f, -2.69772403e-03f, -2.51144722e-03f, -3.90360085e-04f, + -3.23814792e-03f, 5.07230346e-03f, -4.06773640e-03f, 5.83383781e-03f, + -3.74727509e-03f, -3.81866022e-03f, -3.52092828e-03f, -1.19174097e-03f, + 1.47427716e-03f, 8.69689696e-03f, -1.17974688e-03f, 1.91358624e-03f, + 4.53049848e-04f, 7.15160136e-03f, -2.14901178e-03f, 3.01680307e-04f, + 5.59371873e-04f, -3.37241816e-03f, 5.93327492e-03f, -4.12834862e-03f, + 6.75438147e-03f, -9.11966493e-04f, 1.04941029e-03f, 6.57049862e-03f, + 1.46080899e-03f, 1.85702814e-03f, 5.26283509e-03f, -4.40490561e-03f, + 3.18991586e-03f, 5.18910915e-03f, 1.41127547e-04f, -4.84144175e-04f, + 1.06958456e-03f, -3.46592584e-03f, -2.11817811e-03f, -2.43560019e-03f, + 4.13765232e-04f, -2.47561040e-03f, -4.00509243e-03f, -9.81170183e-04f, + -3.83067444e-03f, 3.04561885e-03f, -5.38033233e-03f, -1.42801852e-03f, + -1.23329635e-03f, 1.89160527e-03f, 6.65504038e-03f, 5.19128067e-03f, + 4.60411046e-03f, -1.40710348e-03f, -9.93845893e-04f, -4.06815844e-03f, + -4.02940845e-03f, -2.17722043e-03f, 9.50017732e-04f, 3.48162141e-03f, + -7.38718921e-04f, -5.37330146e-03f, -2.41353452e-03f, -2.45514224e-03f, + -3.74899518e-03f, -4.19876726e-03f, -3.53318836e-03f, -3.90335935e-03f, + 7.99403048e-03f, 2.23598790e-03f, -1.27196625e-03f, -6.98209117e-04f, + -3.34452638e-03f, -1.67136173e-03f, -4.11209071e-04f, 2.00183911e-03f, + -1.96630995e-03f, 7.51034735e-03f, 1.04411133e-03f, -4.15263773e-03f, + -1.38297131e-03f, -1.35685884e-03f, -3.66053008e-03f, -3.75062128e-03f, + -4.26252272e-03f, -2.66070178e-03f, 3.04279896e-03f, -1.15931137e-03f, + -8.04472671e-04f, 9.56815213e-04f, 3.67030527e-03f, -4.10187319e-03f, + -4.00586954e-03f, -2.15367263e-03f, 2.99550076e-04f, -2.34182556e-03f, + -4.03231193e-03f, -4.07455426e-03f, -9.99925362e-04f, -2.44139635e-03f, + -2.56420203e-03f, -2.05639534e-03f, 1.64281990e-03f, -3.34215025e-03f, + 1.63080678e-03f, 2.78736348e-03f, -2.71428644e-03f, -1.94359939e-03f, + 4.66116264e-04f, -5.36595747e-03f, 4.33257844e-03f, -1.22900344e-03f, + -4.49363447e-03f, -3.31463048e-03f, -4.50934504e-03f, 3.92916116e-03f, + -2.32144819e-03f, 3.19169141e-04f, -5.54654348e-04f, -2.83405255e-03f, + 5.85994280e-03f, -8.83349314e-04f, 1.46193262e-03f, -5.17087036e-04f, + 1.28772066e-03f, 9.01745222e-03f, -3.70378752e-03f, 2.62950301e-03f, + 4.42066713e-03f, -2.23419638e-03f, -5.42324156e-03f, -1.27469902e-04f, + -1.11335479e-03f, 2.19778028e-03f, 3.82233086e-04f, -3.05194055e-03f, + -5.09629390e-03f, 6.99047966e-03f, 6.50238752e-03f, -5.97760040e-03f, + 1.33962745e-03f, -2.67005994e-03f, 6.28695192e-03f, -5.25628797e-03f, + -2.43496085e-03f, -4.36582435e-03f, 6.77189471e-03f, 1.60004188e-03f, + -1.78105381e-03f, -1.58956472e-03f, 6.83749955e-03f, 4.22955787e-03f, + -6.18657771e-05f, 4.76718646e-03f, 6.89557503e-03f, -4.36374449e-04f, + -1.97165898e-03f, 2.11515273e-03f, -1.57386778e-03f, -2.39199247e-03f, + -3.77694789e-03f, 1.41495182e-05f, -4.23819927e-03f, -3.99838893e-04f, + -1.84292257e-03f, -4.13794427e-03f, -3.85602661e-03f, -3.26367541e-03f, + -1.02352133e-03f, -1.11821842e-03f, -1.05977728e-03f, 1.24286188e-03f, + 6.05471379e-03f, -5.38882583e-03f, -8.58685404e-04f, 2.82203219e-03f, + -8.35029879e-04f, -4.09445555e-03f, 1.27992985e-03f, -9.37967248e-05f, + -5.04724168e-03f, 2.69376037e-03f, -3.20417365e-03f, -1.58162149e-03f, + 8.08066909e-04f, -4.66080994e-03f, -3.22330119e-03f, -4.30362249e-03f, + -2.21065079e-03f, 2.96976317e-03f, -1.81913544e-03f, 6.54912621e-04f, + 2.49217761e-03f, -1.33522484e-03f, -5.54243349e-03f, -4.48106706e-04f, + -9.82479537e-04f, -2.21475608e-03f, 1.62873784e-03f, -4.69727221e-03f, + 1.92644814e-03f, 3.95784658e-03f, 3.73904441e-04f, -5.16700288e-04f, + -2.32776339e-03f, 1.29988153e-03f, 2.68958812e-03f, 1.16407074e-03f, + 1.70432050e-03f, -5.78559821e-03f, 5.14141671e-03f, 3.37174474e-03f, + -2.74392256e-03f, -5.32313656e-04f, 5.56278251e-04f, -2.88665850e-03f, + -3.28788976e-03f, -4.20362250e-03f, 1.87348595e-03f, -3.54692344e-03f, + -3.16945750e-03f, -1.65841080e-03f, -4.18242438e-03f, -1.43544251e-03f, + -1.02137356e-03f, 2.24513558e-03f, 8.54776674e-04f, -1.37337724e-03f, + -9.85155078e-04f, -2.51014320e-03f, -1.38634625e-03f, -3.92926527e-03f, + -3.62573273e-03f, 3.05018793e-04f, 2.18085570e-03f, 1.92694139e-03f, + 1.35673847e-03f, -1.57336770e-05f, -4.70996278e-04f, 4.81152278e-04f, + -3.44224823e-03f, -1.74578732e-03f, -3.45206030e-03f, 2.03574602e-03f, + -2.01598654e-03f, -3.58838070e-03f, -3.94272302e-04f, -2.06715172e-04f, + -4.24059086e-03f, -1.53520733e-03f, -2.98915290e-03f, 1.63414860e-03f, + 2.08127519e-03f, -4.84499055e-03f, 6.75526504e-03f, 7.10952899e-03f, + -4.30695968e-03f, 2.18169603e-03f, 1.85650407e-03f, 3.11565866e-03f, + -2.11125220e-03f, 1.27705773e-03f, -5.91562034e-04f, -6.66834096e-04f, + -4.60023702e-04f, -4.14689832e-03f, -3.99501168e-03f, -1.84207489e-03f, + 1.22518905e-02f, 5.70980373e-05f, 6.31486051e-04f, 3.52783558e-04f, + -1.61523910e-03f, -3.55324656e-03f, -2.47676924e-03f, -3.61374200e-04f, + -2.64197895e-04f, -1.10007127e-03f, -1.23213948e-03f, 2.47706062e-03f, + 5.16737241e-03f, -2.15926309e-03f, -3.63963318e-03f, -8.93021326e-04f, + 7.58414090e-03f, -9.37076958e-04f, -1.53437114e-03f, -1.49419828e-03f, + -4.09692371e-03f, 2.14666693e-03f, 2.36430884e-04f, -2.25650772e-03f, + -1.53866635e-03f, 6.23758555e-03f, -2.42150497e-03f, 2.13421957e-03f, + -1.60080852e-03f, -1.35092055e-03f, -1.02897481e-03f, -1.77400790e-03f, + -4.63578247e-03f, 4.81523834e-03f, -2.14278609e-03f, -1.57403225e-03f, + -5.78677782e-03f, 5.12966356e-03f, -2.05947550e-03f, -3.01460270e-03f, + 2.14334701e-03f, -2.53055624e-03f, -2.56715632e-03f, -1.95717646e-04f, + -3.43359782e-03f, -3.40926148e-04f, -1.50590187e-03f, -6.12339854e-04f, + 1.50133035e-03f, 1.02130897e-02f, 3.22233022e-03f, 3.43009287e-03f, + 2.44070366e-03f, -3.32569202e-04f, -2.79672062e-03f, -3.70634444e-03f, + -1.17576204e-04f, 3.00403878e-03f, 1.36281122e-03f, -1.00192493e-03f, + -3.94677027e-03f, -1.19903456e-03f, -1.98122831e-03f, -3.49460027e-03f, + 3.73083575e-04f, 7.29541139e-03f, 3.83962884e-03f, -5.22533456e-03f, + 4.06105975e-03f, -3.14387595e-03f, 7.07210023e-03f, -3.10811173e-03f, + -3.70013300e-03f, -1.46135656e-03f, 2.37510999e-03f, -3.47082589e-04f, + -1.80078603e-03f, -6.23696407e-05f, 6.96621639e-03f, -3.82350622e-03f, + -2.30267083e-03f, -2.37311103e-03f, 5.47383339e-04f, 4.63862783e-03f, + -3.83077360e-04f, -3.40947297e-03f, -1.07821817e-03f, -1.20896398e-03f, + -2.32654470e-03f, -3.96289138e-03f, 1.57346950e-04f, 1.14938914e-03f, + -3.24515582e-03f, -2.79200480e-03f, -2.37664190e-03f, -2.97324818e-03f, + -9.63382723e-04f, -4.51102789e-03f, -3.02277669e-03f, -2.21256639e-03f, + 6.61884010e-03f, 6.80661542e-04f, -3.92359094e-03f, 1.51047579e-03f, + 7.23849971e-04f, -3.41829571e-03f, -2.45942773e-03f, -5.15374629e-03f, + 1.56856270e-04f, 3.09960843e-04f, 1.30372264e-03f, 3.32142485e-03f, + 1.00585357e-03f, -4.05529335e-03f, -1.61059202e-03f, -2.79637770e-03f, + 5.27013984e-03f, -1.74240654e-03f, -2.52814650e-03f, -3.37782764e-03f, + 1.14183645e-03f, -1.36940203e-03f, 4.18168710e-03f, -5.23807947e-03f, + 1.31547685e-04f, 6.54835652e-04f, 2.84682688e-03f, 6.27836677e-03f, + -1.98888416e-03f, 6.32030004e-04f, -3.84587153e-03f, -7.98819017e-04f, + 2.50633974e-03f, -1.78122577e-03f, -2.02770187e-03f, 2.05984900e-03f, + -1.24080071e-03f, 3.68440150e-03f, -1.73418318e-03f, -4.25922937e-03f, + -2.70796179e-03f, -2.57009483e-03f, 1.20306163e-04f, 3.84920854e-03f, + -5.24040535e-03f, -1.92672855e-03f, 2.79201641e-03f, 4.25790467e-03f, + -2.92628418e-03f, -2.23123953e-03f, -4.68143917e-03f, 6.72447703e-03f, + -2.84144169e-04f, -3.57101980e-03f, 3.75038586e-03f, -2.81988345e-03f, + -2.13385025e-03f, -4.22690943e-03f, -2.03418952e-03f, 9.62965841e-04f, + 2.96016094e-03f, -4.17773702e-03f, 4.69107715e-03f, -1.20511067e-03f, + 4.45058964e-03f, -2.67642939e-03f, -2.14115074e-03f, 1.17133326e-03f, + 4.34060416e-03f, -4.39489832e-03f, -1.33596587e-03f, 4.38643839e-03f, + -2.50487497e-03f, 2.68070718e-03f, 1.60567199e-03f, 4.05080790e-03f, + 4.12558869e-03f, -3.49381208e-03f, -1.14735730e-03f, 7.99269752e-03f, + -2.42492587e-03f, -2.89351982e-03f, 9.77274197e-04f, 2.29872009e-03f, + -3.18766892e-03f, -2.21293818e-03f, -4.27150224e-04f, 1.36331740e-03f, + -2.82928064e-03f, -1.22330261e-03f, -3.92558245e-03f, 1.86707700e-03f, + 4.67311173e-03f, -3.11876001e-03f, 3.24016852e-03f, -1.21478537e-03f, + 3.30433841e-03f, -1.63312133e-03f, 1.58127728e-03f, 5.59689726e-03f, + -1.95811923e-03f, -3.07114361e-03f, 9.17527967e-03f, 4.15618019e-03f, + -8.69449097e-04f, 1.20795049e-04f, -1.31885457e-04f, -3.02201925e-03f, + -3.61058533e-04f, -5.39213089e-03f, -1.28089683e-04f, -1.16558026e-03f, + 5.35988426e-03f, -1.02630561e-04f, 3.10575487e-04f, 3.19571725e-03f, + 3.06612434e-03f, 1.99706715e-03f, -3.99084905e-03f, 7.55834090e-04f, + -6.77569584e-04f, 2.36317415e-03f, -2.47722776e-04f, 7.27292893e-03f, + 4.33025734e-04f, -5.55582867e-04f, -3.09723346e-03f, 8.50553213e-03f, + 2.49904199e-03f, -3.16019871e-03f, -1.40001882e-03f, -1.25389833e-03f, + -5.00290271e-04f, 4.34745925e-03f, -2.95446880e-03f, -1.41914900e-03f, + 2.00718212e-03f, -1.80430986e-03f, -8.89334795e-04f, 2.58898115e-03f, + 1.24351880e-03f, -1.77017967e-03f, -1.88193150e-03f, -3.56278839e-03f, + -3.22423243e-03f, -3.17383573e-03f, -1.18324813e-03f, -1.18665486e-03f, + 7.20111805e-04f, 4.05762077e-04f, -3.78228131e-03f, -2.00365948e-03f, + -6.24867150e-04f, -9.72778950e-04f, -2.90850149e-05f, -1.34521605e-03f, + 4.16808793e-04f, -5.10308066e-05f, -9.08310114e-04f, -1.87053713e-04f, + -4.85475542e-03f, -8.68394752e-04f, -4.01207020e-03f, 2.37402602e-04f, + -2.06253530e-03f, 1.20038940e-03f, -8.90169451e-04f, -5.08686452e-03f, + 1.90098933e-03f, -1.01600109e-03f, -2.26809915e-03f, -3.98051814e-04f, + -6.67547284e-04f, 1.42926423e-03f, -2.30434194e-03f, -1.72129016e-03f, + -1.82227856e-03f, -3.58106548e-03f, -1.16503414e-03f, 2.01960278e-03f, + 7.23537952e-03f, -2.36649583e-03f, -9.76005622e-04f, -1.75054093e-03f, + 6.06093477e-03f, -4.25403142e-05f, -5.38927199e-04f, -1.00797063e-03f, + 4.73803310e-03f, 5.15360013e-04f, -2.20455979e-03f, 6.43198700e-04f, + 9.64444877e-04f, 1.33299774e-03f, 2.50847573e-03f, 8.91491898e-03f, + -2.12082577e-03f, 3.23876846e-03f, -9.76463765e-04f, -4.78365161e-03f, + 5.02071469e-04f, -2.93985342e-03f, -2.49079464e-03f, 2.31302996e-03f, + 1.72181362e-03f, -2.00493443e-03f, 4.44406808e-04f, -9.44691940e-05f, + 8.04041242e-03f, -2.17596061e-03f, -9.22368356e-04f, 2.81257850e-03f, + 3.06119985e-03f, -3.81145232e-04f, -1.76689951e-03f, -8.97771960e-04f, + 1.43837992e-03f, -3.20119893e-03f, -9.21187417e-04f, 2.00186418e-03f, + -2.33534334e-04f, 3.33221202e-04f, -2.74313386e-03f, -6.98603379e-04f, + -4.22385429e-03f, 7.05046238e-03f, 8.65244946e-03f, -4.38090022e-03f, + -2.65635113e-03f, -1.99465449e-03f, -1.13774374e-03f, -6.15599418e-04f, + 6.89732921e-04f, 7.36444243e-05f, 4.61067432e-03f, -5.63104936e-04f, + -1.40496047e-05f, -4.92288613e-03f, 6.90118045e-03f, -7.59447761e-04f, + 2.42046636e-03f, 1.52457137e-03f, 8.74547039e-04f, 3.05689429e-04f, + -2.33477630e-04f, -4.18454789e-04f, -4.87775067e-03f, -9.09539278e-04f, + 2.87824950e-03f, 9.79083466e-03f, 1.21647043e-03f, -3.94700689e-03f, + 2.00561852e-03f, -5.09153129e-04f, -1.24561718e-03f, -1.86070911e-03f, + -4.24145572e-03f, 6.78746287e-03f, 6.65607379e-03f, -5.58647170e-03f, + 1.07473570e-03f, -3.14156587e-03f, 6.05508156e-04f, -6.44542902e-04f, + 7.14210318e-04f, 2.21236563e-03f, -1.82315986e-03f, -3.40441486e-03f, + -3.37208823e-03f, 6.80230635e-04f, 1.88782857e-03f, 1.80068440e-03f, + -1.33636126e-03f, -2.52659016e-03f, -8.54570617e-04f, 3.60963957e-03f, + -2.04762414e-03f, -2.13837053e-03f, -6.15393419e-04f, -1.54049596e-03f, + 2.63033503e-03f, -1.36626209e-03f, 1.28594156e-03f, -2.55960691e-04f, + -2.49006102e-03f, -7.41325410e-04f, -9.69943885e-04f, -3.80176777e-03f, + 2.66773205e-03f, -1.27017940e-03f, -1.49321164e-03f, 7.11284158e-04f, + -1.97457257e-03f, -2.42419334e-04f, 2.35357279e-03f, 6.71692730e-03f, + -3.27589159e-03f, 3.60362408e-03f, 5.97120386e-03f, -2.68954027e-03f, + 8.63652541e-04f, 2.83402479e-04f, 3.08646387e-05f, 6.75233331e-03f, + -2.54111703e-03f, -1.29108450e-03f, 2.19764601e-03f, -3.30642470e-03f, + -2.10886718e-03f, 2.18525045e-04f, -4.79335124e-04f, 6.22686549e-03f, + 2.09453507e-03f, 7.14942597e-04f, 5.30455216e-03f, -2.90888707e-04f, + -2.02228215e-03f, 2.73894916e-03f, -3.26447307e-03f, -9.33243670e-04f, + -1.51084291e-03f, 5.75921490e-03f, -4.94911882e-04f, -6.63449098e-04f, + -4.82568300e-03f, 5.14360500e-04f, -1.94160639e-03f, -2.17300649e-03f, + -4.26527578e-03f, -1.31302552e-03f, -2.34277147e-03f, 3.55936092e-03f, + -2.11845614e-03f, -1.35541546e-03f, -2.11901766e-03f, -9.12932503e-04f, + 1.02916298e-03f, -1.04777034e-03f, -7.79197629e-04f, -1.29982298e-03f, + }; + +} // namespace mutap_test::fixtures diff --git a/tests/test_rir_fixtures.cpp b/tests/test_rir_fixtures.cpp new file mode 100644 index 0000000..5ba8661 --- /dev/null +++ b/tests/test_rir_fixtures.cpp @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT +// Copyright 2026 MuTap contributors +// +// The RIR fixtures: physically-modeled rooms (image-source method; see +// tools/fixtures/make_rir_fixtures.py for the geometry, conditioning and +// how to add measured rooms) used as feedback paths in the closed loop. +// Unlike the synthetic random-decay rooms used elsewhere, these have real +// early-reflection structure: a direct sound, discrete wall reflections at +// geometry-determined delays, and a dense decaying tail. +// +// Measured (block 64, 16 partitions over the first 1024 taps, converge +// 3000 blocks at MSG-6 on speech-envelope material): +// +// room MSG Kalman ASG NLMS ASG +// studio -7.7 dB +17.8 dB +9.4 dB +// rehearsal -8.0 dB +18.8 dB +9.7 dB +// hall -7.1 dB +19.1 dB +9.7 dB +// +// Thresholds sit well inside those numbers so they gate regressions. + +#include +#include +#include + +#include + +#include "fixtures/rir_hall.h" +#include "fixtures/rir_rehearsal.h" +#include "fixtures/rir_studio.h" +#include "mutap/fd_kalman.h" +#include "mutap/pem_afc.h" +#include "support/closed_loop.h" + +namespace { + + using mutap_test::closed_loop_sim; + + constexpr size_t k_block = 64; + constexpr size_t k_taps = 1024; ///< first 21 ms: direct + early reflections + constexpr size_t k_parts = k_taps / k_block; + + struct room { + const char* name; + const float* rir; + size_t full_taps; + }; + + const room k_rooms[] = { + {"studio", mutap_test::fixtures::k_rir_studio, mutap_test::fixtures::k_rir_studio_taps}, + {"rehearsal", mutap_test::fixtures::k_rir_rehearsal, mutap_test::fixtures::k_rir_rehearsal_taps}, + {"hall", mutap_test::fixtures::k_rir_hall, mutap_test::fixtures::k_rir_hall_taps}, + }; + + // The tests model the first k_taps of the room (a practical canceller + // length); the truncation is re-normalized to unit energy so gain + // numbers stay comparable across rooms and with the synthetic tests. + std::vector truncated_path(const room& r) { + std::vector f(r.rir, r.rir + k_taps); + double energy = 0.0; + for (const double v : f) { + energy += v * v; + } + for (auto& v : f) { + v /= std::sqrt(energy); + } + return f; + } + + template + double converge_and_measure_asg(const std::vector& path) { + const double open_msg = mutap_test::theoretical_msg_db(path); + + typename closed_loop_sim::config lc; + lc.feedback_path = path; + lc.block_size = k_block; + lc.forward_delay = 2 * k_block; + + typename Pem::config pc; + pc.fdaf.block_size = k_block; + pc.fdaf.partitions = k_parts; + Pem pem(pc); + + const auto v_converge = mutap_test::ar_near_end(3000 * k_block, 2); + const auto v_probe = mutap_test::ar_near_end(600 * k_block, 12); + + auto converge_cfg = lc; + converge_cfg.forward_gain_db = open_msg - 6.0; + closed_loop_sim sim(converge_cfg); + for (size_t blk = 0; blk < 3000; ++blk) { + sim.step(&v_converge[blk * k_block], &pem); + } + return mutap_test::measured_msg_db(lc, &pem, v_probe, open_msg - 15.0, open_msg + 25.0, 0.5) - open_msg; + } + + // The generator's contract: full-length, unit-energy, and the direct + // sound inside the leading guard (the bulk delay was trimmed). + TEST(RirFixtures, FixturesAreConditionedAsDocumented) { + for (const auto& r : k_rooms) { + EXPECT_EQ(r.full_taps, 4096U) << r.name; + double energy = 0.0; + double peak = 0.0; + size_t argmax = 0; + for (size_t i = 0; i < r.full_taps; ++i) { + const double v = static_cast(r.rir[i]); + energy += v * v; + if (std::abs(v) > peak) { + peak = std::abs(v); + argmax = i; + } + } + EXPECT_NEAR(energy, 1.0, 1e-3) << r.name; + EXPECT_LT(argmax, 64U) << r.name << ": direct sound should sit near the trimmed onset"; + } + } + + // The headline: on rooms with REAL reflection structure, the Kalman + // canceller holds the same large broadband gains the synthetic rooms + // showed (measured +17.8..+19.1 dB across the three rooms). + TEST(RirFixtures, KalmanPemAddsStableGainOnModeledRooms) { + using pem = mutap::pem_afc, mutap::partitioned_fdkf>; + for (const auto& r : k_rooms) { + EXPECT_GT(converge_and_measure_asg(truncated_path(r)), 10.0) << r.name << " (measured >= +17.8 dB)"; + } + } + + // And the classic engine's reference point on one room (measured + // +9.4 dB) — the gap between these two tests is the v2 story told on + // realistic acoustics. + TEST(RirFixtures, NlmsPemAddsStableGainOnStudio) { + EXPECT_GT(converge_and_measure_asg>(truncated_path(k_rooms[0])), 4.0) + << "measured +9.4 dB"; + } + +} // namespace diff --git a/tools/fixtures/make_rir_fixtures.py b/tools/fixtures/make_rir_fixtures.py new file mode 100644 index 0000000..42bc224 --- /dev/null +++ b/tools/fixtures/make_rir_fixtures.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python3 +"""Generate the committed RIR fixtures in tests/fixtures/. + +Room impulse responses used as feedback paths F in the closed-loop +regression tests. Two sources of truth: + + --generate Rebuild the physically-modeled rooms defined in ROOMS + below (pyroomacoustics image-source method: deterministic, + reproducible bit-for-bit from these parameters). These are + the shipped fixtures until measured rooms replace or join + them. + + --from-wav WAV NAME --source "..." + Convert a measured RIR (an academic dataset room, or your + own swept-sine measurement) into a fixture header. State + the provenance and license in --source; it is embedded in + the header, because the fixture becomes a permanent + pass/fail baseline and future readers must know what room + they are being judged against. The WAV must be mono; if + its rate is not 48 kHz it is resampled (needs scipy). + +Every fixture is processed the same way, documented here once: + 1. trim the bulk propagation delay to a 32-sample guard before the + first sample within 40 dB of the peak (the tests' canceller lengths + then model the room, not silence); + 2. truncate to TAPS samples (85 ms at 48 kHz: the direct sound, the + early reflections and the early tail — what a practical canceller + filter length covers); + 3. normalize to unit energy (matching the synthetic fixtures, so gain + numbers stay comparable across rooms). + +Requires: numpy; pyroomacoustics for --generate; scipy only if a WAV +needs resampling. +""" + +import argparse +import pathlib + +import numpy as np + +REPO_ROOT = pathlib.Path(__file__).resolve().parents[2] +OUT_DIR = REPO_ROOT / "tests" / "fixtures" +FS = 48000 +TAPS = 4096 +GUARD = 32 # samples of true pre-delay kept ahead of the direct sound + +# The modeled rooms. Deliberately differentiated: a dry nearfield studio, +# a mid-size rehearsal room, and a reverberant hall with a distant mic — +# the axis along which feedback cancellation gets harder. +ROOMS = { + "studio": dict( + dims=[5.0, 4.0, 2.8], + absorption=0.35, + max_order=17, + speaker=[1.0, 2.0, 1.2], + mic=[2.1, 2.4, 1.3], + blurb="small dry control room, mic 1.2 m from a wedge", + ), + "rehearsal": dict( + dims=[8.0, 6.0, 3.5], + absorption=0.20, + max_order=17, + speaker=[2.5, 3.1, 1.7], + mic=[5.5, 2.0, 1.4], + blurb="mid-size rehearsal room, mic 3.2 m from the speaker", + ), + "hall": dict( + dims=[15.0, 10.0, 6.0], + absorption=0.12, + max_order=17, + speaker=[4.0, 5.0, 2.0], + mic=[9.5, 4.2, 1.6], + blurb="reverberant hall, mic 5.6 m out — the PA scenario", + ), +} + + +def condition(rir: np.ndarray) -> np.ndarray: + rir = np.asarray(rir, dtype=np.float64) + peak = np.max(np.abs(rir)) + if peak <= 0: + raise ValueError("silent RIR") + onset = int(np.argmax(np.abs(rir) >= peak * 10 ** (-40 / 20))) + start = max(0, onset - GUARD) + rir = rir[start : start + TAPS] + if len(rir) < TAPS: + rir = np.pad(rir, (0, TAPS - len(rir))) + return rir / np.sqrt(np.sum(rir * rir)) + + +def emit_header(name: str, rir: np.ndarray, provenance: str) -> None: + OUT_DIR.mkdir(parents=True, exist_ok=True) + path = OUT_DIR / f"rir_{name}.h" + lines = [ + "// GENERATED by tools/fixtures/make_rir_fixtures.py — do not edit by hand.", + "// SPDX-License-Identifier: MIT", + "// Copyright 2026 MuTap contributors", + "//", + ] + for ln in provenance.splitlines(): + lines.append(f"// {ln}".rstrip()) + lines += [ + "#pragma once", + "", + "namespace mutap_test::fixtures {", + "", + f" inline constexpr unsigned k_rir_{name}_fs = {FS};", + f" inline constexpr unsigned k_rir_{name}_taps = {len(rir)};", + "", + f" inline constexpr float k_rir_{name}[{len(rir)}] = {{", + ] + row = [] + for i, v in enumerate(rir): + row.append(f"{v:.8e}f") + if len(row) == 4: + lines.append(" " + ", ".join(row) + ",") + row = [] + if row: + lines.append(" " + ", ".join(row) + ",") + lines += [" };", "", "} // namespace mutap_test::fixtures", ""] + path.write_text("\n".join(lines)) + print(f"wrote {path} ({len(rir)} taps)") + + +def generate_modeled() -> None: + import pyroomacoustics as pra + + for name, spec in ROOMS.items(): + room = pra.ShoeBox( + spec["dims"], + fs=FS, + materials=pra.Material(spec["absorption"]), + max_order=spec["max_order"], + ) + room.add_source(spec["speaker"]) + room.add_microphone(spec["mic"]) + room.compute_rir() + rir = condition(room.rir[0][0]) + provenance = "\n".join( + [ + f"Physically-modeled room: {spec['blurb']}.", + f"pyroomacoustics image-source method, shoebox {spec['dims']} m,", + f"uniform absorption {spec['absorption']}, max_order {spec['max_order']},", + f"speaker at {spec['speaker']}, mic at {spec['mic']}, fs {FS} Hz.", + "Deterministic: rebuilding with the same parameters reproduces", + "this data exactly. Conditioning (delay trim to a 32-sample", + f"guard, truncation to {TAPS} taps, unit-energy normalization)", + "is documented in the generator script.", + ] + ) + emit_header(name, rir, provenance) + + +def from_wav(wav_path: str, name: str, source: str) -> None: + import wave + + with wave.open(wav_path, "rb") as w: + if w.getnchannels() != 1: + raise SystemExit("mono WAV required") + fs = w.getframerate() + raw = w.readframes(w.getnframes()) + width = w.getsampwidth() + if width == 2: + x = np.frombuffer(raw, dtype=np.int16).astype(np.float64) / 32768.0 + elif width == 4: + x = np.frombuffer(raw, dtype=np.int32).astype(np.float64) / 2147483648.0 + else: + raise SystemExit(f"unsupported sample width {width}") + if fs != FS: + from scipy.signal import resample_poly + + from math import gcd + + g = gcd(FS, fs) + x = resample_poly(x, FS // g, fs // g) + provenance = "\n".join( + [ + f"Measured RIR imported from {pathlib.Path(wav_path).name} (original fs {fs} Hz).", + f"Source/license: {source}", + "Conditioning (delay trim to a 32-sample guard, truncation to", + f"{TAPS} taps, unit-energy normalization) is documented in the", + "generator script.", + ] + ) + emit_header(name, condition(x), provenance) + + +def main() -> None: + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("--generate", action="store_true", help="rebuild the modeled rooms") + ap.add_argument("--from-wav", nargs=2, metavar=("WAV", "NAME"), help="import a measured RIR") + ap.add_argument("--source", default="", help="provenance + license text for --from-wav") + args = ap.parse_args() + if args.generate: + generate_modeled() + elif args.from_wav: + if not args.source: + raise SystemExit("--from-wav requires --source (provenance/license is not optional)") + from_wav(args.from_wav[0], args.from_wav[1], args.source) + else: + ap.print_help() + + +if __name__ == "__main__": + main() diff --git a/tools/notebook/build_afc_demo.py b/tools/notebook/build_afc_demo.py new file mode 100644 index 0000000..0101976 --- /dev/null +++ b/tools/notebook/build_afc_demo.py @@ -0,0 +1,708 @@ +#!/usr/bin/env python3 +"""Assemble and execute notebooks/afc_demo.ipynb. + +The committed notebook is a build product of this script: every cell's +source lives here, and running it re-executes everything against the +current library (the first notebook cell builds the C ABI if needed) and +overwrites notebooks/afc_demo.ipynb with fresh outputs. Edit THIS file, +not the .ipynb. Requires: nbformat, nbclient, numpy, matplotlib, cmake. + + python3 tools/notebook/build_afc_demo.py +""" +import pathlib + +import nbformat as nbf +from nbclient import NotebookClient + +REPO_ROOT = pathlib.Path(__file__).resolve().parents[2] + +nb = nbf.v4.new_notebook() +nb.metadata.kernelspec = {"display_name": "Python 3", "language": "python", "name": "python3"} +cells = [] +md = lambda s: cells.append(nbf.v4.new_markdown_cell(s)) +code = lambda s: cells.append(nbf.v4.new_code_cell(s)) + +md("""# MuTap — adaptive feedback cancellation, demonstrated + +A microphone and a loudspeaker in the same room form a **closed loop**: the +speaker plays a processed copy of what the mic picks up, the room feeds it +back, and past a critical gain the loop rings up into a howl. **MuTap** +cancels the feedback path with an adaptive filter — but a naive adaptive +filter is *biased* in a closed loop (the speaker signal is correlated with +the very source you want to keep), so MuTap uses **PEM prewhitening** +(FDAF-PEM-AFROW: Rombouts et al. 2007, Gil-Cacho et al. 2014) to remove the +bias, plus IPC-gated adaptation control to survive real-world transients. + +This notebook loads the library through its C ABI (`ctypes`, no Python +bindings required), runs the same closed-loop simulation as the test suite, +and *shows* what it does: + +1. **Howling** — the loop pushed past its maximum stable gain (MSG) +2. **The bias problem** — a naive canceller vs the PEM canceller, same loop +3. **Added stable gain** — the deliverable metric, across program material +4. **Music** — the frequency-warped predictor vs a low chord, across rooms +5. **IPC** — the double-talk indicator that gates adaptation +6. **Bursts** — adaptation control surviving a +20 dB near-end burst +7. **The Kalman core (v2)** — one update rule replaces every tuning knob + +Everything is deterministic (fixed seeds); re-running reproduces every figure. +""") + +code(r'''import ctypes, pathlib, subprocess, sys +import numpy as np +import matplotlib.pyplot as plt + +REPO = pathlib.Path.cwd().parent if pathlib.Path.cwd().name == "notebooks" else pathlib.Path.cwd() +CAPI_DIR = REPO / "build" / "tools" / "capi" + +def _find_dso(): + for name in ("libmutap_capi.so", "libmutap_capi.dylib", "mutap_capi.dll"): + hits = sorted(CAPI_DIR.rglob(name)) + if hits: + return hits[0] + return None + +def _run(cmd): + r = subprocess.run(cmd, capture_output=True, text=True) + if r.returncode != 0: + print(r.stdout); print(r.stderr, file=sys.stderr) + raise RuntimeError("command failed: " + " ".join(cmd)) + +DSO = _find_dso() +if DSO is None: # build the C ABI shared library on first run + _run(["cmake", "-B", str(REPO / "build"), "-S", str(REPO), + "-DCMAKE_BUILD_TYPE=Release", "-DMUTAP_BUILD_CAPI=ON"]) + _run(["cmake", "--build", str(REPO / "build"), "--target", "mutap_capi", + "--config", "Release", "-j"]) + DSO = _find_dso() +assert DSO is not None, "libmutap_capi not found after build" + +_lib = ctypes.CDLL(str(DSO)) +_d, _p, _s = ctypes.c_double, ctypes.POINTER(ctypes.c_double), ctypes.c_size_t +for fam in ("fdaf", "afc"): + getattr(_lib, f"mutap_{fam}_create").restype = ctypes.c_void_p + getattr(_lib, f"mutap_{fam}_create").argtypes = [_s, _s, _d, _d, ctypes.c_int, _d] + getattr(_lib, f"mutap_{fam}_clone").restype = ctypes.c_void_p + getattr(_lib, f"mutap_{fam}_clone").argtypes = [ctypes.c_void_p] + getattr(_lib, f"mutap_{fam}_process").argtypes = [ctypes.c_void_p, _p, _p, _p] + getattr(_lib, f"mutap_{fam}_impulse_response").argtypes = [ctypes.c_void_p, _p] + getattr(_lib, f"mutap_{fam}_filter_length").restype = _s + getattr(_lib, f"mutap_{fam}_filter_length").argtypes = [ctypes.c_void_p] + getattr(_lib, f"mutap_{fam}_ipc").restype = _d + getattr(_lib, f"mutap_{fam}_ipc").argtypes = [ctypes.c_void_p] + getattr(_lib, f"mutap_{fam}_set_adaptation").argtypes = [ctypes.c_void_p, ctypes.c_int] + getattr(_lib, f"mutap_{fam}_destroy").argtypes = [ctypes.c_void_p] + +def _ptr(a): + return a.ctypes.data_as(_p) + +class Canceller: + """ctypes wrapper over one canceller family ("fdaf" = naive, "afc" = PEM).""" + def __init__(self, family, block=64, partitions=4, mu=0.0, rel_reg=-1.0, + ipc_scaling=False, transient_ratio=0.0, _handle=None): + self.family = family + self.h = _handle if _handle is not None else getattr(_lib, f"mutap_{family}_create")( + block, partitions, mu, rel_reg, int(ipc_scaling), transient_ratio) + assert self.h, "create failed (bad config?)" + self.block = block + def process(self, u, y): + e = np.empty(self.block) + getattr(_lib, f"mutap_{self.family}_process")(self.h, _ptr(np.ascontiguousarray(u)), + _ptr(np.ascontiguousarray(y)), _ptr(e)) + return e + def impulse_response(self): + ir = np.empty(getattr(_lib, f"mutap_{self.family}_filter_length")(self.h)) + getattr(_lib, f"mutap_{self.family}_impulse_response")(self.h, _ptr(ir)) + return ir + def ipc(self): + return getattr(_lib, f"mutap_{self.family}_ipc")(self.h) + def freeze(self, frozen=True): + getattr(_lib, f"mutap_{self.family}_set_adaptation")(self.h, int(not frozen)) + def clone(self): + c = Canceller(self.family, block=self.block, + _handle=getattr(_lib, f"mutap_{self.family}_clone")(self.h)) + return c + def __del__(self): + if getattr(self, "h", None): + getattr(_lib, f"mutap_{self.family}_destroy")(self.h) + +_lib.mutap_afc_create_warped.restype = ctypes.c_void_p +_lib.mutap_afc_create_warped.argtypes = [_s, _s, _d, _d, ctypes.c_int, _d, _d, _s] + +def naive(**kw): return Canceller("fdaf", **kw) +def pem(**kw): return Canceller("afc", **kw) + +def pem_warped(block=64, partitions=4, mu=0.0, rel_reg=-1.0, ipc_scaling=False, + transient_ratio=0.0, lam=0.0, order=0): + """PEM canceller with the frequency-warped (music/tonal) near-end model. + lam = 0 selects the room-robust default (0.5); order 0 -> 16. Pair with + ipc_scaling=True — section 4 shows why.""" + h = _lib.mutap_afc_create_warped(block, partitions, mu, rel_reg, int(ipc_scaling), + transient_ratio, lam, order) + return Canceller("afc", block=block, _handle=h) + +_lib.mutap_afc_create_kalman.restype = ctypes.c_void_p +_lib.mutap_afc_create_kalman.argtypes = [_s, _s, _d, ctypes.c_int, _d, _s] + +def pem_kalman(block=64, partitions=4, floor_ratio=0.0, warp=False, lam=0.0, order=0): + """PEM canceller on the frequency-domain KALMAN core (v2): no step size, + no gating options — see section 7.""" + h = _lib.mutap_afc_create_kalman(block, partitions, floor_ratio, int(warp), lam, order) + return Canceller("afc", block=block, _handle=h) + +# ---- plot style: validated categorical palette, fixed entity assignment ---- +C_PEM, C_NAIVE, C_OPEN, C_TRUTH, C_WARPED, C_KAL = "#2a78d6", "#1baf7a", "#eda100", "#52514e", "#008300", "#a333c8" +plt.rcParams.update({"figure.dpi": 110, "axes.spines.top": False, "axes.spines.right": False, + "axes.grid": True, "grid.alpha": 0.25, "grid.linewidth": 0.6, + "lines.linewidth": 2.0, "font.size": 10}) +print("MuTap C ABI version:", _lib.mutap_version())''') + +md(r"""## The closed loop + +$$y(n) = v(n) + F(q)\,u(n) \qquad e(n) = y(n) - \hat F(q)\,u(n) \qquad u(n) = K\,e(n-d)$$ + +The mic signal $y$ is the near-end source $v$ (the talker/instrument — the +signal we want) plus the room's feedback path $F$ applied to the loudspeaker +signal $u$. The canceller subtracts its estimate $\hat F(q)\,u$; the forward +path amplifies the cleaned signal by $K$ with $d$ samples of delay and sends +it to the speaker. Below: the same deterministic block-synchronous simulation +the test suite uses — a synthetic 256-tap decaying room response as $F$, and +the true-path convolution at sample resolution. At 48 kHz the 64-sample +blocks are 1.3 ms and the 256-tap path is 5.3 ms of room. + +The loop's **maximum stable gain** (MSG) without a canceller is bounded by +$-20\log_{10}\max_\omega|F(\omega)|$; a canceller's job is measured by the +**added stable gain** (ASG) it buys beyond that.""") + +code(r'''FS, BLOCK, PARTS = 48000, 64, 4 +TAPS = BLOCK * PARTS + +def decaying_rir(taps=TAPS, seed=5): + rng = np.random.default_rng(seed) + f = rng.standard_normal(taps) * np.exp(-np.arange(taps) / (taps / 4)) + return f / np.sqrt(np.sum(f * f)) + +def white(n, seed): + return np.random.default_rng(seed).standard_normal(n) + +def tonal(n, seed): + """Three incommensurate sinusoids, unit RMS, -40 dB noise floor.""" + t = np.arange(n) + s = np.sqrt(2 / 3) * (np.sin(0.031 * 2 * np.pi * t + 0.1) + + np.sin(0.093 * 2 * np.pi * t + 1.3) + + np.sin(0.171 * 2 * np.pi * t + 2.9)) + return s + 0.01 * white(n, seed) + +def _ar4(x): # two resonator pole pairs (speech-envelope-like coloring) + out = np.empty_like(x) + s1 = [0.0, 0.0]; s2 = [0.0, 0.0] + a1 = (-2 * 0.97 * np.cos(0.03 * 2 * np.pi), 0.97 ** 2) + a2 = (-2 * 0.95 * np.cos(0.11 * 2 * np.pi), 0.95 ** 2) + for i, w in enumerate(x): + w = w - a1[0] * s1[0] - a1[1] * s1[1]; s1[1], s1[0] = s1[0], w + w = w - a2[0] * s2[0] - a2[1] * s2[1]; s2[1], s2[0] = s2[0], w + out[i] = w + return out + +def speech_env(n, seed): + x = _ar4(white(n, seed)) + return x / np.sqrt(np.mean(x * x)) + +def voiced(n, seed, period=160): + exc = np.zeros(n); exc[::period] = np.sqrt(period) + x = _ar4(exc + 0.01 * white(n, seed)) + return x / np.sqrt(np.mean(x * x)) + +class ClosedLoop: + def __init__(self, path, gain_db, block=BLOCK, delay=2 * BLOCK, clip=1000.0): + self.f, self.b, self.d, self.clip = np.asarray(path), block, delay, clip + self.set_gain_db(gain_db) + self.u_hist = np.zeros(len(path) - 1 + block) + self.e_hist = np.zeros(delay) + def set_gain_db(self, k_db): + self.gain = 10 ** (k_db / 20) + def step(self, v, canceller=None): + b = self.b + u = np.clip(np.nan_to_num(self.gain * self.e_hist[:b], posinf=self.clip, neginf=-self.clip), + -self.clip, self.clip) + self.u_hist[len(self.f) - 1:] = u + y = v + np.convolve(self.u_hist, self.f[::-1], mode="valid") + self.u_hist[:len(self.f) - 1] = self.u_hist[b:].copy()[:len(self.f) - 1] + e = canceller.process(u, y) if canceller is not None else y.copy() + self.e_hist = np.concatenate([self.e_hist[b:], e]) + return u, y, e + +def theoretical_msg_db(f): + return -20 * np.log10(np.abs(np.fft.rfft(f, 8192)).max()) + +def misalignment_db(truth, est): + return 10 * np.log10(np.sum((truth - est) ** 2) / np.sum(truth ** 2)) + +def run_loop(path, gain_db, v, canceller=None, howl_rms=100.0): + """Run v through the loop; returns (e trace, block RMS trace, howled).""" + loop = ClosedLoop(path, gain_db) + blocks = len(v) // BLOCK + e_trace = np.empty(blocks * BLOCK); rms = np.empty(blocks); howled = False + for k in range(blocks): + _, _, e = loop.step(v[k * BLOCK:(k + 1) * BLOCK], canceller) + e_trace[k * BLOCK:(k + 1) * BLOCK] = e + rms[k] = np.sqrt(np.mean(e * e)) + howled = howled or rms[k] >= howl_rms + return e_trace, rms, howled + +def measured_msg_db(path, template, v, lo, hi, tol=0.5): + """Bisect the forward gain; each probe runs a fresh clone of `template`.""" + def howls(k_db): + c = template.clone() if template is not None else None + return run_loop(path, k_db, v, c)[2] + if howls(lo): + return lo + while hi - lo > tol: + mid = 0.5 * (lo + hi) + lo, hi = (lo, mid) if howls(mid) else (mid, hi) + return lo + +F = decaying_rir() +MSG = theoretical_msg_db(F) +fig, ax = plt.subplots(figsize=(8, 2.4)) +ax.plot(np.arange(TAPS) / FS * 1000, F, color=C_TRUTH, lw=1.0) +ax.set_xlabel("time (ms)"); ax.set_ylabel("amplitude") +ax.set_title(f"the room: synthetic feedback path F (256 taps) — loop MSG bound {MSG:+.1f} dB") +plt.tight_layout(); plt.show()''') + +md("""## 1. Howling + +No canceller. The forward gain ramps slowly from 8 dB below the MSG bound to +6 dB above it. Watch the loop cross from quietly regenerative to screaming: +the spectrogram collapses to the single loop resonance that wins the race, +and the level slams into the loudspeaker limiter. This is the failure mode +everything below exists to prevent — and the measured onset lands where the +$-20\\log_{10}\\max|F(\\omega)|$ bound says it should.""") + +code(r'''BLOCKS_RAMP = 3000 +v = tonal(BLOCKS_RAMP * BLOCK, seed=2) +gains = np.linspace(MSG - 8, MSG + 4, BLOCKS_RAMP) +loop = ClosedLoop(F, gains[0]) +e_trace = np.empty(BLOCKS_RAMP * BLOCK); rms = np.empty(BLOCKS_RAMP) +for k in range(BLOCKS_RAMP): + loop.set_gain_db(gains[k]) + _, _, e = loop.step(v[k * BLOCK:(k + 1) * BLOCK]) + e_trace[k * BLOCK:(k + 1) * BLOCK] = e + rms[k] = np.sqrt(np.mean(e * e)) + +t_blocks = np.arange(BLOCKS_RAMP) * BLOCK / FS +t_msg = t_blocks[np.argmax(gains >= MSG)] +fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 5.2), + gridspec_kw={"height_ratios": [1, 1.4]}) +ax1.semilogy(t_blocks, rms, color=C_OPEN) +ax1.axvline(t_msg, color=C_TRUTH, ls="--", lw=1) +ax1.annotate(" gain crosses the MSG bound", (t_msg, rms.max() * 0.3), fontsize=9, color=C_TRUTH) +ax1.set_ylabel("output RMS"); ax1.set_xlim(0, t_blocks[-1]) +ax1.set_title(f"open loop: forward gain ramped {MSG - 8:+.1f} -> {MSG + 4:+.1f} dB over {t_blocks[-1]:.0f} s") +ax2.specgram(e_trace, NFFT=512, Fs=FS, noverlap=384, cmap="magma", vmin=-30) +ax2.axvline(t_msg, color="white", ls="--", lw=1) +ax2.set_ylim(0, 12000) +ax2.set_ylabel("frequency (Hz)"); ax2.set_xlabel("time (s)") +plt.tight_layout(); plt.show() +onset = gains[np.argmax(rms >= 100)] if (rms >= 100).any() else np.nan +print(f"howl onset at forward gain {onset:+.1f} dB — MSG bound {MSG:+.1f} dB " + "(onset trails the bound slightly: near threshold the ring-up is slow)")''') + +md("""## 2. The bias problem — a gain staircase + +Both cancellers now adapt inside the loop while the near-end source plays +**tonal** program material (three steady sinusoids — sustained notes through +a PA). The loudspeaker signal is a delayed, filtered copy of that near-end +source, so a **naive** adaptive filter can't tell feedback from music: its +update is biased toward cancelling the music itself. The **PEM** canceller +re-fits a near-end model every block (short-term LP + pitch predictor) and +prewhitens both signals before its update, which removes the bias. + +The forward gain steps up every 1.3 s: **MSG − 6 → MSG → MSG + 6 dB**. The +naive canceller erupts at a gain the bare room handles; the PEM canceller +rides quietly through a gain 6 dB *above* the open-loop limit — and its room +estimate *improves* with each step, because a louder loop means more feedback +signal to identify from. (Neither estimate gets a deep broadband misalignment +in a closed loop at these gains — the feedback is quiet relative to the music, +and tonal material only excites the path at a few frequencies. Unbiased +*tracking* is what buys stable gain, not a one-time perfect fit; the naive +estimate is worse than having no filter at all, the dotted line.)""") + +code(r'''STAGES = [(MSG - 6, 1000), (MSG, 1000), (MSG + 6, 1000)] +BLOCKS_ID = sum(nb for _, nb in STAGES) +v = tonal(BLOCKS_ID * BLOCK, seed=2) +results = {} +for name, factory, col in (("PEM (mutap::pem_afc)", pem, C_PEM), + ("naive FDAF", lambda: naive(rel_reg=0.0), C_NAIVE)): + c = factory() + loop = ClosedLoop(F, STAGES[0][0]) + rms = np.empty(BLOCKS_ID); mis = [] + k = 0 + for gain_db, n_blocks in STAGES: + loop.set_gain_db(gain_db) + for _ in range(n_blocks): + _, _, e = loop.step(v[k * BLOCK:(k + 1) * BLOCK], c) + rms[k] = np.sqrt(np.mean(e * e)) + if k % 10 == 0: + mis.append(misalignment_db(F, c.impulse_response())) + k += 1 + results[name] = (rms, mis, col) + +t = np.arange(BLOCKS_ID) * BLOCK / FS +edges = np.cumsum([0] + [nb for _, nb in STAGES]) * BLOCK / FS +fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 5.4), sharex=True, + gridspec_kw={"height_ratios": [1.3, 1]}) +for name, (rms, mis, col) in results.items(): + ax1.semilogy(t, rms, color=col, label=name, lw=1.5) + ax2.plot(np.arange(0, BLOCKS_ID, 10) * BLOCK / FS, mis, color=col, lw=1.5) +for ax in (ax1, ax2): + for edge in edges[1:-1]: + ax.axvline(edge, color=C_TRUTH, ls="--", lw=0.8) +for (gain_db, _), x0, x1 in zip(STAGES, edges[:-1], edges[1:]): + ax1.annotate(f"MSG {gain_db - MSG:+.0f} dB", ((x0 + x1) / 2, 2e3), ha="center", + fontsize=9, color=C_TRUTH) +ax1.axhline(100, color=C_TRUTH, lw=0.8, ls=":") +ax1.annotate("howl threshold", (0.05, 130), fontsize=8, color=C_TRUTH) +ax1.set_ylabel("output block RMS (log)") +ax1.set_title("the gain staircase: same loop, same music, both cancellers adapting") +ax1.legend(fontsize=9, frameon=False, loc="center left") +ax2.axhline(0, color=C_TRUTH, lw=0.8, ls=":") +ax2.annotate("zero filter (no canceller at all)", (0.05, 0.7), fontsize=8, color=C_TRUTH) +ax2.set_xlabel("time (s)"); ax2.set_ylabel("misalignment (dB)") +plt.tight_layout(); plt.show()''') + +md("""## 3. Added stable gain — the scoreboard + +Converge each canceller in the loop at MSG − 6 dB, then bisect the forward +gain (fresh clone per probe, adaptation live) for the highest gain that does +not howl. **ASG = that gain minus the open-loop MSG.** Positive: the canceller +lets you turn the system up beyond what the bare room allows. Negative: the +canceller is *destabilizing* — worse than nothing. This is the M2/M3 test +suite's measurement, reproduced: the naive canceller only survives +uncorrelated (white) near-end; PEM is positive on everything, including the +tonal and voiced material where naive howls below the open-loop limit.""") + +code(r'''MATERIALS = [("white", white), ("speech envelope", speech_env), ("tonal", tonal), ("voiced", voiced)] +SEARCH_LO, SEARCH_HI = MSG - 12, MSG + 25 +asg = {"PEM": [], "naive": []} +for mname, gen in MATERIALS: + v_conv, v_probe = gen(1500 * BLOCK, 2), gen(400 * BLOCK, 12) + for cname, factory in (("PEM", pem), ("naive", lambda: naive(rel_reg=0.0))): + c = factory() + loop = ClosedLoop(F, MSG - 6) + for k in range(1500): + loop.step(v_conv[k * BLOCK:(k + 1) * BLOCK], c) + asg[cname].append(measured_msg_db(F, c, v_probe, SEARCH_LO, SEARCH_HI) - MSG) + +fig, ax = plt.subplots(figsize=(8, 3.4)) +ypos = np.arange(len(MATERIALS), dtype=float) +for i, (cname, col, off) in enumerate((("PEM", C_PEM, -0.18), ("naive", C_NAIVE, 0.18))): + vals = asg[cname] + ax.barh(ypos + off, vals, height=0.32, color=col, label=cname) + for y, val in zip(ypos + off, vals): + floored = " (search floor)" if abs(val - (SEARCH_LO - MSG)) < 0.6 else "" + ax.annotate(f"{val:+.1f} dB{floored}", (val, y), va="center", fontsize=8, + ha="left" if val >= 0 else "right", + xytext=(4 if val >= 0 else -4, 0), textcoords="offset points") +ax.axvline(0, color=C_TRUTH, lw=1) +ax.set_yticks(ypos, [m for m, _ in MATERIALS]); ax.invert_yaxis() +ax.set_xlabel("added stable gain vs open loop (dB)") +ax.set_title("ASG by near-end program material (converged at MSG − 6 dB)") +ax.legend(fontsize=9, frameon=False, loc="lower right") +ax.set_xlim(SEARCH_LO - MSG - 4, max(max(asg["PEM"]), max(asg["naive"])) + 5) +plt.tight_layout(); plt.show()''') + +md("""## 4. Music — the frequency-warped predictor, across rooms + +The speech cascade's whitening has two engines: a short-term LP for the +spectral envelope and a single pitch tap for periodicity. A **low chord +defeats both** — three incommensurate fundamentals share no common period +(the pitch tap never locks), and a dozen partials packed below 500 Hz are +too finely spaced for a moderate-order plain LP, whose resolution is spent +uniformly over frequency (its poles crowd $z=1$, exactly where the +ridge-guarded analysis is stiffest). + +`mutap::warped_lpc_predictor` replaces every unit delay in the predictor +with a first-order allpass, warping the frequency axis so the same order +concentrates its resolution in the bass ($\lambda = 0.766$ approximates +the Bark scale at 48 kHz; the room-robust default is $\lambda = 0.5$, +order 16). The whitening filter stays feed-forward — a tapped allpass +chain, unconditionally stable — and at $\lambda = 0$ the whole predictor +collapses exactly to plain LP. + +One room is not an evaluation. A single-room comparison flattered the +warped predictor badly (the first cut of this section did exactly that), +so below both cancellers converge on the chord in **three different +rooms** — and the warped predictor runs **with and without IPC-scaled +stepping**. That switch is the finding: the warped whitener notches the +partials so hard that on some rooms the converged update *runs away* — it +builds a spurious resonance in the partial band that live adaptation +reinforces, and the loop howls far **below** the open-loop MSG (room C: +the bar is pinned at the −15 dB search floor). IPC scaling suppresses +exactly that update — error power no longer coherent with the input — and +with it the warped canceller is the strongest option in every room tried +(eleven rooms across this notebook's generator family and the C++ test +suite's: ASG +7.2…+11.3 dB, no collapse anywhere).""") + +code(r'''def music(n, seed): + """Low A-major chord: A1/C#2/E2 fundamentals, 4 harmonics each at 1/h, + -40 dB noise floor, unit RMS (an implied 48 kHz).""" + rng = np.random.default_rng(seed) + f0 = np.array([55.0, 69.296, 82.407]) / FS + phase = np.array([[0.1, 1.9, 4.2, 0.7], [2.3, 5.1, 1.4, 3.8], [0.9, 3.3, 5.7, 2.2]]) + t = np.arange(n) + x = sum((1.0 / h) * np.sin(2 * np.pi * f0[voice] * h * t + phase[voice][h - 1]) + for voice in range(3) for h in range(1, 5)) + x = x + 0.01 * rng.standard_normal(n) + return x / np.sqrt(np.mean(x * x)) + +ROOMS = [("room A (seed 5)", 5), ("room B (seed 7)", 7), ("room C (seed 8)", 8)] +CONFIGS = [("warped + IPC step scaling", lambda: pem_warped(ipc_scaling=True), C_WARPED), + ("warped, plain stepping", lambda: pem_warped(), "#8fce8f"), + ("speech cascade", lambda: pem(), C_PEM)] +v_conv, v_probe = music(1500 * BLOCK, 2), music(600 * BLOCK, 12) +asg_m = {cname: [] for cname, _, _ in CONFIGS} +for rname, seed in ROOMS: + Fr = decaying_rir(seed=seed) + msg_r = theoretical_msg_db(Fr) + for cname, factory, _ in CONFIGS: + c = factory() + loop = ClosedLoop(Fr, msg_r - 6) + for k in range(1500): + loop.step(v_conv[k * BLOCK:(k + 1) * BLOCK], c) + asg_m[cname].append(measured_msg_db(Fr, c, v_probe, msg_r - 15, msg_r + 25) - msg_r) + +fig, ax = plt.subplots(figsize=(8, 3.6)) +ypos = np.arange(len(ROOMS), dtype=float) +for (cname, _, col), off in zip(CONFIGS, (-0.26, 0.0, 0.26)): + vals = asg_m[cname] + ax.barh(ypos + off, vals, height=0.22, color=col, label=cname) + for y, val in zip(ypos + off, vals): + if val <= -14.9: # pinned at the bisection search floor: label inside the bar + ax.annotate("howls below the -15 dB search floor", (val, y), va="center", + ha="left", fontsize=8, color="white", fontweight="bold", + xytext=(6, 0), textcoords="offset points") + else: + ax.annotate(f"{val:+.1f} dB", (val, y), va="center", fontsize=8, + ha="left", xytext=(4, 0), textcoords="offset points") +ax.axvline(0, color=C_TRUTH, lw=1) +ax.set_yticks(ypos, [r for r, _ in ROOMS]); ax.invert_yaxis() +ax.set_xlabel("added stable gain vs open loop (dB) — low-chord near-end") +ax.set_title("the warped predictor needs IPC-scaled stepping — and then wins in every room") +ax.legend(fontsize=8, frameon=False, loc="upper left") +plt.tight_layout(); plt.show()''') + +md("""And the control in the other direction: the same warped + IPC +canceller on the **speech-envelope** material the cascade was built for — +no collapse there either (the C++ suite measures +13.8 dB ASG on its +reference room, more headroom than the cascade itself).""") + +code(r'''c = pem_warped(ipc_scaling=True) +loop = ClosedLoop(F, MSG - 6) +v_conv_s = speech_env(1500 * BLOCK, 2) +for k in range(1500): + loop.step(v_conv_s[k * BLOCK:(k + 1) * BLOCK], c) +asg_ctl = measured_msg_db(F, c, speech_env(600 * BLOCK, 12), MSG - 15, MSG + 25) - MSG +print(f"warped + IPC on speech-envelope material, notebook room: ASG {asg_ctl:+.1f} dB")''') + +md("""## 5. IPC — knowing when to adapt + +The **instantaneous pseudo-correlation** (Gil-Cacho et al. 2014) is MuTap's +double-talk indicator: a chance-corrected coherence estimating the *fraction +of error power still coherent with the loudspeaker signal*. High = the error +is unmodeled feedback (informative — adapt hard). Low = the error is the +near-end source (adapting would inject bias — hold). It comes almost free +from spectra the FDAF already has. + +Left: an open-loop echo canceller converging, then hit with double-talk. +Right: the 2014 paper's headline, reproduced in the feedback loop — PEM +prewhitening collapses the correlation that biases the naive update.""") + +code(r'''# left: open-loop AEC — echo only, then double-talk +u = white(480 * BLOCK, 1); talk = white(480 * BLOCK, 9) +d = np.convolve(u, F)[:len(u)] +c = naive() +ipc_trace = np.empty(480) +for k in range(480): + sl = slice(k * BLOCK, (k + 1) * BLOCK) + desired = d[sl] + (3.0 * talk[sl] if k >= 400 else 0.0) + c.process(u[sl], desired) + ipc_trace[k] = c.ipc() + +# right: mean IPC inside the tonal closed loop, naive raw pair vs PEM prewhitened pair +loop_ipc = {} +v = tonal(600 * BLOCK, 2) +for name, c2 in (("naive\n(raw pair)", naive(rel_reg=0.0)), ("PEM\n(prewhitened)", pem())): + loop = ClosedLoop(F, MSG - 6) + vals = [] + for k in range(600): + loop.step(v[k * BLOCK:(k + 1) * BLOCK], c2) + if k >= 100: + vals.append(c2.ipc()) + loop_ipc[name] = np.mean(vals) + +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3.2), gridspec_kw={"width_ratios": [2.2, 1]}) +t = np.arange(480) * BLOCK / FS +ax1.plot(t, ipc_trace, color=C_PEM) +ax1.axvspan(400 * BLOCK / FS, 480 * BLOCK / FS, color=C_TRUTH, alpha=0.12) +ax1.annotate("echo only:\nIPC high while unconverged,\nfalls as the filter learns", (0.08, 0.62), fontsize=9) +ax1.annotate("double-talk: near-end floods the error,\nIPC stays low (a gate would hold)", (0.40, 0.45), fontsize=9) +ax1.set_xlabel("time (s)"); ax1.set_ylabel("IPC"); ax1.set_ylim(-0.03, 1.03) +ax1.set_title("open-loop echo canceller") +names = list(loop_ipc) +ax2.bar(names, [loop_ipc[n] for n in names], color=[C_NAIVE, C_PEM], width=0.55) +for i, n in enumerate(names): + ax2.annotate(f"{loop_ipc[n]:.2f}", (i, loop_ipc[n]), ha="center", va="bottom", fontsize=9) +ax2.set_ylim(0, 1); ax2.set_ylabel("mean IPC in the loop") +ax2.set_title("tonal closed loop") +plt.tight_layout(); plt.show()''') + +md("""## 6. Surviving bursts + +Real rooms have door slams and fortissimo entrances. Here the tonal near-end +jumps **+20 dB for 50 blocks** (67 ms) while the PEM canceller sits converged +in the loop. Ungated, those blocks have terrible update SNR: the filter is +wrecked, the loop rings up, and it takes seconds to recover. With M4's +adaptation control — the IPC-scaled step plus the instantaneous transient +gate — the canceller simply *holds* through the burst.""") + +code(r'''def burst_run(gated): + kw = dict(ipc_scaling=True, transient_ratio=4.0) if gated else {} + c = pem(**kw) + loop = ClosedLoop(F, MSG - 6) + v = tonal(1700 * BLOCK, 2) + rms = np.empty(1700) + for k in range(1700): + vb = v[k * BLOCK:(k + 1) * BLOCK] * (10.0 if 1500 <= k < 1550 else 1.0) + _, _, e = loop.step(vb, c) + rms[k] = np.sqrt(np.mean(e * e)) + return rms + +rms_open = burst_run(gated=False) +rms_gated = burst_run(gated=True) +t = np.arange(1700) * BLOCK / FS +fig, ax = plt.subplots(figsize=(8, 3.4)) +ax.semilogy(t, rms_open, color=C_NAIVE, label="no gating") +ax.semilogy(t, rms_gated, color=C_PEM, label="IPC step scaling + transient gate") +ax.axvspan(1500 * BLOCK / FS, 1550 * BLOCK / FS, color=C_TRUTH, alpha=0.12) +ax.annotate("+20 dB burst", (1500 * BLOCK / FS, rms_open.max() * 1.1), fontsize=9) +ax.set_xlim(1400 * BLOCK / FS, 1700 * BLOCK / FS) +ax.set_xlabel("time (s)"); ax.set_ylabel("output block RMS (log)") +ax.set_title("a near-end burst hits the converged canceller") +ax.legend(fontsize=9, frameon=False) +plt.tight_layout(); plt.show() +print(f"worst block RMS through the burst: ungated {rms_open[1500:1650].max():,.0f}, " + f"gated {rms_gated[1500:1650].max():,.1f}")''') + +md(r"""## 7. The v2 core — a frequency-domain Kalman filter + +Everything above runs on an NLMS update dressed with the M4 control stack: +a hand-picked step size $\mu$, IPC-scaled stepping, variable +regularization, a transient gate. The **partitioned-block frequency-domain +Kalman filter** (Enzner & Vary 2006; Bernardi et al.'s PEM variant) +replaces all of it with two tracked quantities: a per-bin **state +uncertainty** $P$ (how wrong might my filter be here?) and a per-bin +**near-end PSD** $\Psi_s$ (how much of the error is signal I must not +chase?). The gain $P\,U^*/(\sum_q|U_q|^2P_q + \Psi_s)$ is then everything the +knobs approximated: large while unconverged, small when converged, small +when the near-end dominates — automatically, per bin. + +Below, the section-3 scoreboard re-run with the Kalman core (same loop, +same material, same probe; **zero adaptation-control config**): broadband +and voiced ASG roughly double; tonal gives a few dB back to the tuned +stack on this room (on the C++ suite's room the two are at parity and the +Kalman's speech/white runs saturate that probe's +25 dB ceiling — +chaotic room-to-room variance cuts both ways). The C++ suite closes the +loop on the section-4 story too: warped+Kalman measures +8.4…+13.1 dB +across the five rooms — and the speech cascade +11.6…+13.4, *including* +the room where its NLMS incarnation destabilizes — with no IPC pairing at +all.""") + +code(r'''asg_k = [] +for mname, gen in MATERIALS: + v_conv, v_probe = gen(1500 * BLOCK, 2), gen(600 * BLOCK, 12) + c = pem_kalman() + loop = ClosedLoop(F, MSG - 6) + for k in range(1500): + loop.step(v_conv[k * BLOCK:(k + 1) * BLOCK], c) + asg_k.append(measured_msg_db(F, c, v_probe, SEARCH_LO, SEARCH_HI) - MSG) + +fig, ax = plt.subplots(figsize=(8, 3.4)) +ypos = np.arange(len(MATERIALS), dtype=float) +for cname, vals, col, off in (("Kalman-PEM (v2)", asg_k, C_KAL, -0.18), + ("NLMS-PEM (M3/M4)", asg["PEM"], C_PEM, 0.18)): + ax.barh(ypos + off, vals, height=0.32, color=col, label=cname) + for y, val in zip(ypos + off, vals): + ceil = " (probe ceiling)" if val >= (SEARCH_HI - MSG) - 0.6 else "" + ax.annotate(f"{val:+.1f} dB{ceil}", (val, y), va="center", fontsize=8, + ha="left" if val >= 0 else "right", + xytext=(4 if val >= 0 else -4, 0), textcoords="offset points") +ax.axvline(0, color=C_TRUTH, lw=1) +ax.set_yticks(ypos, [m for m, _ in MATERIALS]); ax.invert_yaxis() +ax.set_xlabel("added stable gain vs open loop (dB)") +ax.set_title("the Kalman core vs the tuned NLMS stack — no knobs vs all the knobs") +ax.legend(fontsize=9, frameon=False, loc="lower right") +plt.tight_layout(); plt.show()''') + +md("""And the section-6 burst, revisited. Ungated, the Kalman bounds the +hit (the noise-PSD estimate catches up within a few blocks) and the +estimate *survives* — where the ungated NLMS was wrecked. The opt-in +transient floor (`floor_ratio=8`) contains it to — here, below — the M4 +gate's level; it +defaults off because the same reflex that absorbs a burst throttles the +ring-up that live re-convergence must consume — a measured ~2–6 dB ASG +cost on tonal material.""") + +code(r'''def burst_run_kalman(floor_ratio): + c = pem_kalman(floor_ratio=floor_ratio) + loop = ClosedLoop(F, MSG - 6) + v = tonal(1700 * BLOCK, 2) + rms = np.empty(1700) + for k in range(1700): + vb = v[k * BLOCK:(k + 1) * BLOCK] * (10.0 if 1500 <= k < 1550 else 1.0) + _, _, e = loop.step(vb, c) + rms[k] = np.sqrt(np.mean(e * e)) + return rms + +rms_k = burst_run_kalman(0.0) +rms_kf = burst_run_kalman(8.0) +t = np.arange(1700) * BLOCK / FS +fig, ax = plt.subplots(figsize=(8, 3.4)) +ax.semilogy(t, rms_open, color=C_NAIVE, alpha=0.5, label="NLMS, no gating (wrecked)") +ax.semilogy(t, rms_k, color=C_KAL, label="Kalman, no options") +ax.semilogy(t, rms_kf, color=C_PEM, label="Kalman, transient floor 8 (opt-in)") +ax.axvspan(1500 * BLOCK / FS, 1550 * BLOCK / FS, color=C_TRUTH, alpha=0.12) +ax.set_xlim(1400 * BLOCK / FS, 1700 * BLOCK / FS) +ax.set_xlabel("time (s)"); ax.set_ylabel("output block RMS (log)") +ax.set_title("the same +20 dB burst against the Kalman core") +ax.legend(fontsize=9, frameon=False) +plt.tight_layout(); plt.show() +print(f"worst block RMS through the burst: NLMS ungated {rms_open[1500:1650].max():,.0f}, " + f"Kalman {rms_k[1500:1650].max():,.0f}, Kalman+floor {rms_kf[1500:1650].max():,.1f}")''') + +md("""## Where this goes next + +- The same float core runs unchanged on the embedded targets (Cortex-M55 / + Hexagon) — the plan and milestones live in [`HANDOFF.md`](../HANDOFF.md). +- Every number in this notebook is locked down as a regression test in + [`tests/`](../tests): the closed-loop harness, the M2 naive-bias baseline, + the M3 PEM pass criteria, and the M4 adaptation-control behavior. +- The Kalman core is selectable wherever the NLMS core is: + `mutap::pem_afc>`. +- The Max/MSP external (`mutap.defeed~`, in + [MuTap-Max](https://github.com/tap/MuTap-Max)) wraps `mutap::pem_afc` + exactly as driven here; its `@warp` attribute selects the frequency-warped + near-end model demonstrated above (and enables the IPC step scaling it + requires). + +**Papers:** Rombouts, van Waterschoot & Moonen, *JAES* 55(11), 2007 +(PEM-AFROW) · Gil-Cacho, van Waterschoot, Moonen & Jensen, *IEEE/ACM TASLP* +22(12), 2014 (FDAF-PEM-AFROW, IPC) · van Waterschoot & Moonen, *Proc. IEEE* +99(2), 2011 (the 50-year survey).""") + +nb.cells = cells +client = NotebookClient(nb, timeout=1200, kernel_name="python3", + resources={"metadata": {"path": str(REPO_ROOT / "notebooks")}}) +client.execute() +nbf.write(nb, str(REPO_ROOT / "notebooks" / "afc_demo.ipynb")) +print("notebook executed and written")