From df8a8b0f33c2d20ee753536bfab937e534f24dcc Mon Sep 17 00:00:00 2001 From: ewowi Date: Fri, 4 Sep 2026 09:24:58 +0200 Subject: [PATCH 1/7] Swap in gradient noise, and build the polar and oscillator kernels Noise, Noise2D, PolarNoise, Tunnel and every script that samples a field now run on Perlin gradient noise instead of value noise: the same names and ranges, a smoother and seam-free field. Radial effects read each pixel's angle and radius from a table built once per geometry, which is 34% of a PolarNoise frame on an ESP32-S3. Aurora is a new showcase: layered noise curtains in polar space, each layer on its own oscillator, with a MoonLive script of the same look. Performance, ESP32-S3 at 64x64: PolarNoise 20.8 ms to 13.7 ms with the address table. Noise 4.6 to 5.0 ms, Noise2D 6.7 to 8.5 ms, Tunnel 16.4 to 16.6 ms with gradient noise. Desktop: every noise kernel is 1.4x to 4x faster per sample. Core - Perlin improved gradient noise behind inoise8/16, fbm, warp and turbulence, arity-templated and branch-free so an in-order core stays fast: a first cut measured 2.8x faster on the host and 1.5x SLOWER on the S3. - fbm no longer narrows its own range as octaves rise. Four octaves spanned 54..199 of 0..255, so any effect stretching the top of the field could never reach full brightness. Every fbm field gains contrast. - core/oscillators.h: a bank of low-frequency oscillators advanced once per frame, phases held together so a composition does not drift apart. Light domain - light/polar.h: PolarLut, the per-pixel angle and radius as a table, 8-bit by default and 16-bit opt-in, gated on free heap against the reserve so a device without PSRAM declines it and computes the address instead. - PolarNoise, Tunnel and Spiral read the table; Rings keeps computing, since its distances are from moving ripple centers. - AuroraEffect, and moonlive/effects/aurora.mle rendering the same composition. UI - fbm, warp and osc reach MoonLive scripts as builtins. Tests - Oscillator bank, PolarLut, and a per-effect check that the 16-bit table renders bit-identically to the computed address. - Two scenarios: the address table through a live pipeline, and Aurora's cost model per control. - Five goldens re-baselined, each with its reason in the file. Docs/CI - CLAUDE.md: ESP32 build and flash only on the product owner's word; desktop builds only when a prerequisite; be sparse with slow steps. - The MoonLive roadmap records two measured limits: 16 frame slots, whose instruction-field justification does not hold (Xtensa encodes 256, RISC-V 2048), and script functions taking no arguments and returning nothing. - The generative-fields plan records Aurora's desktop-only hitch with the five causes ruled out, and the layer-crossover change that was built, measured at 3.4%, and reverted. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 16 + .../effects-power-function-inventory.md | 72 ++++ .../generative-fields-analysis-bottom-up.md | 234 +++++++++++++ .../generative-fields-analysis-top-down.md | 324 ++++++++++++++++++ docs/backlog/moonlive-language-roadmap.md | 56 ++- docs/moonmodules/light/MoonLiveEffect.md | 5 +- docs/moonmodules/light/effects.md | 36 +- docs/moonmodules/light/layouts.md | 3 +- docs/moonmodules/light/power-functions.md | 14 +- docs/performance.md | 53 +++ moondeck/MoonDeck.md | 11 + moondeck/check/bench_kernels.py | 61 ++++ moonlive/effects/aurora.mle | 48 +++ src/core/moonlive/MoonLiveBuiltins_common.h | 4 +- src/core/noise.h | 313 ++++++++++------- src/core/oscillators.h | 133 +++++++ src/light/drivers/Drivers.h | 21 +- src/light/effects/AuroraEffect.h | 205 +++++++++++ src/light/effects/EffectBase.h | 2 +- src/light/effects/Noise2DEffect.h | 6 +- src/light/effects/NoiseEffect.h | 6 +- src/light/effects/NoiseMeterEffect.h | 2 +- src/light/effects/PolarNoiseEffect.h | 76 +++- src/light/effects/RingsEffect.h | 7 +- src/light/effects/SpiralEffect.h | 43 ++- src/light/effects/TunnelEffect.h | 43 ++- src/light/effects/WaveEffect.h | 4 +- src/light/layouts/Rings241Layout.h | 28 +- src/light/moonlive/MoonLiveBuiltins_light.h | 47 ++- src/light/moonlive/script_catalog.h | 7 +- src/light/polar.h | 182 ++++++++++ src/main.cpp | 2 + test/CMakeLists.txt | 10 + test/bench/bench_kernels.cpp | 90 +++++ test/scenario_runner.cpp | 4 + test/scenarios/light/scenario_Aurora_fps.json | 309 +++++++++++++++++ .../light/scenario_Fields_polar_lut.json | 310 +++++++++++++++++ test/unit/core/unit_Oscillators.cpp | 174 ++++++++++ test/unit/core/unit_fields.cpp | 2 +- test/unit/core/unit_math16.cpp | 2 +- test/unit/core/unit_moonlive_compiler.cpp | 2 +- test/unit/core/unit_noise.cpp | 50 ++- test/unit/light/unit_AuroraEffect.cpp | 133 +++++++ test/unit/light/unit_Canvas.cpp | 2 +- test/unit/light/unit_Circle.cpp | 2 +- test/unit/light/unit_Drivers_container.cpp | 28 ++ test/unit/light/unit_Effects_golden.cpp | 27 +- test/unit/light/unit_MoonLiveScripts.cpp | 2 +- test/unit/light/unit_Particles.cpp | 2 +- test/unit/light/unit_PolarLut.cpp | 218 ++++++++++++ test/unit/light/unit_PolarLut_equivalence.cpp | 102 ++++++ test/unit/light/unit_Rings241Layout.cpp | 99 ++++++ test/unit/light/unit_Splat.cpp | 2 +- 53 files changed, 3419 insertions(+), 215 deletions(-) create mode 100644 docs/backlog/effects-power-function-inventory.md create mode 100644 docs/backlog/generative-fields-analysis-bottom-up.md create mode 100644 docs/backlog/generative-fields-analysis-top-down.md create mode 100644 moondeck/check/bench_kernels.py create mode 100644 moonlive/effects/aurora.mle create mode 100644 src/core/oscillators.h create mode 100644 src/light/effects/AuroraEffect.h create mode 100644 src/light/polar.h create mode 100644 test/bench/bench_kernels.cpp create mode 100644 test/scenarios/light/scenario_Aurora_fps.json create mode 100644 test/scenarios/light/scenario_Fields_polar_lut.json create mode 100644 test/unit/core/unit_Oscillators.cpp create mode 100644 test/unit/light/unit_AuroraEffect.cpp create mode 100644 test/unit/light/unit_PolarLut.cpp create mode 100644 test/unit/light/unit_PolarLut_equivalence.cpp create mode 100644 test/unit/light/unit_Rings241Layout.cpp diff --git a/CLAUDE.md b/CLAUDE.md index 56d5501c..1757597b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -194,6 +194,22 @@ the fastest loop, and anything the desktop can prove (UI, logic, tests) is prove through a multi-minute compile and a 60-second flash. A device build comes after the desktop is clean, and only for what the desktop cannot show: the platform layer, timing, memory, real hardware. +**ESP32 build and flash: ONLY when the product owner approves.** Not "when it seems useful", not to +confirm something compiles, not at the end of a phase, not to take a measurement the agent thinks is +interesting. The PO says when a board is written to, every time. Ask, then wait. This is the rule an +agent breaks by being helpful, and it has been broken repeatedly in one session. + +**Desktop build and test: only when needed as a prerequisite to continue.** A build earns its place +when the next step cannot happen without it: code that must compile before it can be measured, a test +that must run before its result can be read. Not after every edit, and not to re-confirm what the +last build already proved. + +**Fast cycles: be sparse with anything slow.** The general form, applying to every expensive step: +ESP32 builds, full-suite runs, scenario runs, gate lists, repo-wide sweeps. Run the cheapest thing +that answers the question at hand (one test case, one check), and save the heavy step for when its +answer is actually needed or the PO asks. A minute per step compounds across a session into the PO +waiting instead of working. + **Bench boards are free test rigs.** Build and flash freely to verify work; re-probe ports first. A *rigorous* change (anything that could brick, boot-loop, or wipe a board: flash erases, boot/partition/build-config changes, a first flash of an untested board) gets a one-sentence heads-up and a go-ahead first — the test is reversibility. **Invite the product owner to test, then STOP.** If the PO could see or judge the result, hand it over ("running on X, look at Y") and wait for their observation before concluding, documenting, or moving on. Leave the state running; don't revert, reflash, or reconfigure what they were about to look at. diff --git a/docs/backlog/effects-power-function-inventory.md b/docs/backlog/effects-power-function-inventory.md new file mode 100644 index 00000000..8644f2db --- /dev/null +++ b/docs/backlog/effects-power-function-inventory.md @@ -0,0 +1,72 @@ +# Effects × power functions — inventory + +> **Forward-looking backlog document — exception to CLAUDE.md present-tense rule.** One row per effect in the tree on 2026-09-03 (58), recording what each uses today and which power functions it could run on: the ones that exist ([power-functions.md](../moonmodules/light/power-functions.md)) and the ones the [generative-fields top-down](generative-fields-analysis-top-down.md) builds (gradient noise, `PolarLut`, `Oscillators`, `advect` and the velocity rules, `decay`, `lineAA`/`disc`, the 16-bit Layer). It is the input for the catalog sweep that top-down names as a follow-on plan, under the product owner's rule: **every effect runs on the power functions for whatever they cover; an effect that does not is rewritten on them; algorithmic effects keep their logic; a rewrite lands only if at least as beautiful as the effect ran before.** Rows shrink as effects are rewritten; a rewritten effect's row is deleted, not ticked. + +**Kind.** N = natural motion (physics, fields, noise, trails, rotation, oscillation): rewritten on the kernels. A = algorithmic (a rule set or a game is the effect): keeps its logic, draws through the library. M = audio meter (bars, levels, spectra): the geometry and ballistics rows apply. U = utility or test: no rewrite owed. Anything in doubt is N. + +**Uses today** is read from the source: `noise` (`inoise*`/`fbm`/`warp`), `polar` (`atan16`/`dist16`/`kaleido`), `beat` (`BeatPhase`/`beatsin`), `sin` (`sin16`/`sin8`), `fade` (`fadeToBlackBy`), `particles`, `splat`, `blur`, `geom` (`draw::line`/`rect`/`bar`), `shader`, `scratch` (`ScratchBuffer`), `rnd`, `pal` (`colorFromPalette`), `audio`, and **float** where the effect still computes per light in float. + +| Effect | Kind | Uses today | Could use, existing | Could use, to be built | Note | +|---|---|---|---|---|---| +| AudioSpectrum | M | geom pal audio | `bar`, `smoothFollow`, `peakHold` | 16-bit bars (smooth tops) | | +| AudioVolume | M | pal audio | `smoothFollow` | `decay`, `Oscillators` for the idle breathe | writes raw bytes: migrates to `draw::` in the 16-bit phase | +| Ballpit | N | particles scratch rnd pal | on `particles` already | 16-bit `splat`, `decay` | | +| Blurz | N | fade blur rnd pal audio **float** | `disc` via `coverage`, `blur` | `decay` by half-life, `disc`, `Oscillators`; float to fixed | | +| BouncingBalls | N | fade scratch rnd pal **float** | `particles` (mandated: gains inter-ball collisions), `splat` | `decay` | the power-functions top-down's "worth converging" is now "converge"; writes raw bytes | +| DemoReel | U | rnd | | | orchestration, not rendering | +| Dissolve | N | beat rnd pal | `hashInt`, `easeInOutQuad` already | `Oscillators` for the timing | | +| DistortionWaves | N | beat sin pal **float** | `sin16`, `warp8` | `PolarLut`, `Oscillators`, `warp16`; float to fixed | a Family A shader in all but name | +| Echo | N | polar beat sin particles scratch pal | | `advect` with the spiral rule (zoom + rotation IS a velocity rule), `decay` | the prototype of Family B; becomes a few kernel calls | +| Fire | N | scratch rnd pal | `blur` for heat diffusion | 16-bit heat on the Layer, gradient noise for the sparks, `decay` | writes raw bytes | +| Fireworks | N | beat fade particles splat scratch rnd pal | on `particles` already | `decay` by half-life, `lineAA` for shell trails | | +| FishTank | N | beat particles scratch rnd pal audio | on `particles` for motion | `Oscillators` for tail and fin motion | sprite drawing stays | +| FixedRectangle | U | fade | | | test effect | +| FlyingToasters | A | beat particles scratch rnd audio | on `particles` for drift | | sprites; keeps its choreography | +| FreqMatrix | M | pal audio | `scroll` | 16-bit gradient, `decay` | | +| FreqSaws | M | beat fade pal audio | `bar` | `Oscillators` | its `invert` is a hidden mirror modifier (known extraction) | +| GEQ3D | M | beat fade geom pal audio | `bar`, `peakHold` | 16-bit bars | | +| GEQ | M | fade geom scratch pal audio | `bar`, `peakHold` | 16-bit bars | | +| GameOfLife | **A** | scratch rnd pal | `draw::pixel` only | | **kept as is**: the cautionary case; its logic is the effect | +| LavaLamp | N | beat pal | `blobField`, `smin` | 16-bit falloff, `decay`, `Oscillators` for blob paths | | +| Lines | U | | | | test effect; writes raw bytes | +| Lissajous | N | sin fade pal | `sin16`, `splat` | `lineAA`, `decay`, `Oscillators` | it is a Trails emitter; may be superseded by Trails | +| Metaballs | N | beat pal | `blobField`, `smin` | 16-bit field, `Oscillators` | | +| MovingHead | N | beat sin pal audio | `BeatPhase` | `Oscillators` for formations | fixture roles, not pixels | +| NetworkReceive | U | scratch | | widens into the 16-bit Layer | writes raw bytes by design | +| Noise2D | N | noise pal | | gradient noise (phase 0), `fbm`, `Oscillators`, 16-bit output | | +| Noise | N | noise beat pal | | gradient noise (phase 0), `Oscillators`, 16-bit output | writes raw bytes | +| NoiseMeter | M | noise beat sin fade pal audio | `smoothFollow` | gradient noise, `Oscillators` | | +| Pacman | **A** | beat particles scratch rnd pal audio | on `particles` for motion | | game logic is the effect | +| PaintBrush | N | polar beat sin fade geom rnd pal audio **float** | `lineAA` via `splat` | `lineAA`, `decay`, `PolarLut`, `Oscillators`; float to fixed | | +| Particles | N | particles scratch rnd pal | on `particles` already | 16-bit `splat` | | +| Plasma | N | beat sin pal | `sin16` | `PolarLut`, `fbm`/`warp` as a shader, `Oscillators`, 16-bit | | +| PolarNoise | N | noise polar beat pal | `warp8`, `kaleido` | `PolarLut`, `Oscillators`, gradient noise (phase 1 of the plan) | the Petrick idiom already | +| Pong | **A** | beat rnd pal audio | | | game | +| Praxis | **A** | beat sin pal | | `Oscillators` | algorithmic palette pattern | +| Rainbow | N | pal | | 16-bit gradient (no banding), `Oscillators` | writes raw bytes; the default effect | +| Random | U | fade particles rnd pal | `hashInt` | | | +| Raymarch | N | beat sin shader pal **float** | on `raymarch.h` (FPU-gated by design) | 16-bit output | float is the design here | +| Rings | N | polar rnd pal | | `PolarLut`, `decay`, `Oscillators` | | +| Ripples | N | pal **float** | `dist16`, `sin16` | `PolarLut`, 16-bit; float to fixed | a radial shader | +| RubiksCube | **A** | rnd pal **float** | | | keeps its logic; its float rotation can go fixed later | +| SdfShapes | N | beat sin shader pal | on `shader.h` already | `Oscillators`, 16-bit coverage | | +| Sine | N | beat sin **float** | `sin16` | 16-bit; float to fixed | | +| Solid | U | scratch pal | | | | +| SpaceInvaders | **A** | beat rnd pal audio | | | game | +| Spectrum | M | geom scratch pal audio | `bar`, `smoothFollow`, `peakHold` already | 16-bit bars | | +| SphereMove | N | fade rnd pal **float** | `sdSphere` via `raymarch.h`/`shader.h` | 16-bit; float to fixed | | +| Spiral | N | polar beat pal | | `PolarLut`, `Oscillators` | | +| SpriteFountain | N | beat sin particles scratch rnd audio | on `particles` already | `decay` | | +| StarField | N | fade shader scratch rnd pal **float** | `shader::project` already | `splat`, `decay`; float to fixed | | +| StarSky | N | fade scratch rnd pal | `hashInt` | `Oscillators` for the twinkle, `decay` | the earlier verdict "not a particle" stands; oscillation is its mechanism | +| Tetrix | **A** | particles scratch rnd pal **float** | `FrameTime` | | state machine is the effect | +| Text | U | pal | `scroll` | 16-bit anti-aliased glyphs later | | +| Truchet | N | beat shader rnd pal | on `shader.h` already | `Oscillators` | | +| Tunnel | N | noise polar beat pal | `fbm8` | `PolarLut`, gradient noise, `Oscillators`, `warp` | | +| VectorBalls | N | beat sin shader pal | on `shader.h` already | 16-bit | | +| WaterRipple | N | scratch rnd pal | already a wide-state kernel | renders into the 16-bit Layer without narrowing; `disc` for drops; `decay` | | +| Wave | N | noise beat sin scratch pal | `sin16` | gradient noise, `Oscillators` | | + +**Counts.** 58 effects: 36 natural motion, 8 algorithmic (GameOfLife, FlyingToasters, Pacman, Pong, Praxis, RubiksCube, SpaceInvaders, Tetrix), 8 audio meters, 6 utility. 12 still compute per light in float outside the FPU-gated raymarch (BouncingBalls, Blurz, DistortionWaves, PaintBrush, Ripples, RubiksCube, Sine, SphereMove, StarField, Tetrix, Raymarch by design, and one in Wave's history); 7 write raw Layer bytes (the 16-bit phase migrates them to `draw::`). + +**What the sweep would look like when it becomes a plan.** Batches by kernel, as each lands: the noise effects with phase 0; the polar and oscillation effects with phase 1; the raw-byte writers with the 16-bit Layer; Echo, Lissajous, PaintBrush and the trail effects with `advect`/`decay`/`lineAA`; BouncingBalls onto `particles` on its own, since it is a rework with a bench judgment. Each batch under ~100 files, each effect compared against how it ran, the golden re-baselined with the reason. Effects a showcase supersedes (Lissajous by Trails, possibly Echo) are deleted rather than kept beside it. diff --git a/docs/backlog/generative-fields-analysis-bottom-up.md b/docs/backlog/generative-fields-analysis-bottom-up.md new file mode 100644 index 00000000..d7bc232f --- /dev/null +++ b/docs/backlog/generative-fields-analysis-bottom-up.md @@ -0,0 +1,234 @@ +# Generative fields — bottom-up analysis + +> **Forward-looking research document — exception to CLAUDE.md present-tense rule.** A Stage-1 bottom-up analysis of the effect family this document names *generative fields*: images computed from noise fields over a coordinate mapping, either fresh every frame (a shader) or by transporting the previous frame through a velocity field (advection). Part 1 states what we want to build in the terms of the field's primary sources. Part 2 lists implementations that do similar things and where each fills in a spot. Part 3 places the family in projectMM's architecture: what exists, measured, and what is missing. The **top-down** companion (to be written from the prompt at the end) turns Part 3 into the implementation spec. Written 2026-09-03. Modeled on [power-functions-analysis-bottom-up.md](power-functions-analysis-bottom-up.md), which this extends: the fields, shader and particle families it cataloged are taken as read. + +## TL;DR + +- **The target is two textbook techniques over one block set.** A **procedural shader**: color as a function of (position, time), computed per pixel from noise sampled through a coordinate transform. **Advection**: the previous frame transported by a velocity field and decayed, with sources drawn into it each frame. Both stand on the same primitives: a polar coordinate mapping, gradient noise with fractional Brownian motion and domain warping, low-frequency oscillators, a contrast window and palette, anti-aliased sub-pixel rasterization, a bilinear resampler, framerate-independent exponential decay, and fixed-point arithmetic with quantization last (Part 1). +- **Every algorithm has a name and an originator.** Perlin noise (1985, 2002), fBm, domain warping (Quilez), semi-Lagrangian advection and stable fluids (Stam 1999, 2003), curl noise (Bridson 2007), flow-field particle tracing (Hobbs; Shiffman), Wu's anti-aliased lines (1991), coverage from signed distance, exponential half-life decay, LFO modulation. None needs more than adds, multiplies, a sine table and a noise function (Part 1). +- **The cost model is arithmetic and decides the design.** A shader costs samples per pixel and scales with area × samples; advection costs a few loads and lerps per pixel per pass and scales with area × channels, plus memory for color state above 8 bits. For both, framerate is part of the rendering method: transport must stay sub-pixel per frame, decay must not step, oscillators must not alias. Throughput in pixels per second, not frames per second, is the honest metric (Part 1 § Cost). +- **The field has converged on the same shapes.** A polar-noise shader engine with an oscillator bank and a coordinate mapper; an emitter-plus-flow advection engine with six flow types, a modulator bank and a half-life fade; both now available in Q16.16 fixed point with bit-exact tests, on the ESP32 class we target; anti-aliased canvases; wave and fluid solvers; particle-trail systems. These are similar to what Part 1 describes, not identical, and each fills in a spot: measured throughput, parameter vocabularies users expect, fixed-point choices that work, and precision decisions (Part 2). +- **projectMM has most of the blocks and lacks three.** Present: polar addressing, 16-bit value noise with fBm/warp/turbulence, 16-bit oscillators, palettes, a GLSL-vocabulary shader runner, SDF coverage, a 24.8 sub-pixel splat, particles, a persisting Layer buffer, and 55 MoonLive builtins that already express a polar-noise pixel. Missing: **a bilinear resampler of the previous frame** (so no advection), **color state above 8 bits** (so trails posterize and sub-integer accumulation is impossible), and **gradient noise** (value noise reads coarser at low frequency). The MoonLive gap is structural: per-pixel host calls cost ~5 µs per pixel measured, and a script has no frame of state; both families want whole-frame kernels a script composes (Part 3). +- **The ESP32 budget is known.** ~293 cycles per pixel at 128×128 @ 50 fps on 240 MHz; one noise sample per pixel measures ~750 cycles on the S3 today. A rich shader is a panel-class effect on any MCU; advection scales to walls in cycles and needs PSRAM for state. Every target has an FPU, the P4 and S31 add SIMD and hardware loops, the P4 measures ~3× the S3 and a desktop core 20-40×, so the P4 and S31 are where this family shines on an MCU: the ESP32 class stops at about one noise sample per pixel on a 128² wall, and the desktop continues on the same contract and drives the wall over the network. The levers are standard: LUTs, fixed point, fewer samples, a field below output resolution, a field below frame rate, per-target FPU and SIMD behind one contract (Part 3 § Budget, § Per-target headroom). +- **Out of scope for Stage 1.** API names and signatures; the 8-bit versus 16-bit buffer decision; where advection state lives; the MoonLive frame-kernel shape; which showcase effects come first. All Stage 2 (Part 3 § Bridge). + +## Why this document exists + +The product owner's goals for this family, recorded 2026-09-03: + +1. **projectMM supports the building blocks of these effects**, via compiled functions and especially via MoonLive effects, on the power-function library ([power-functions.md](../moonmodules/light/power-functions.md)), the same way it carries particles and SDFs. +2. **A few genuinely beautiful showcase effects** are built on those blocks, as the proof the blocks are right. +3. **The ESP32 is CPU-bound; memory is not the constraint.** Every choice is made against the per-pixel cycle budget, and the fact that these effects look better the higher the framerate is a design input. +4. **Industry-standard terminology and algorithms throughout**, per [CLAUDE.md § Principles](../../CLAUDE.md#principles): the textbook construct, named by its textbook name, from the primary source. + +--- + +# Part 1: What we want to build + +Stated from the primary sources only. Where a name is given, it is the algorithm's name in the literature; where a person is named, it is the originator of the algorithm, not an implementation. + +## The two techniques + +**A procedural shader** computes each pixel's color as a function of its position and the current time: `color = f(x, y, t)`. Nothing has to survive between frames, which is what makes it composable; state is welcome whenever it saves work: a polar table cached per geometry, a field rendered below the frame rate and interpolated, the dithering error carried forward, a value fed back into the next frame's parameters. Composition happens on the *coordinate*: transform where the pixel samples from (rotate, scale, fold, displace by another field) and the image transforms with it. This is the shader model of the GPU tradition, applied on a CPU one pixel at a time. + +**Advection** transports a quantity (here: the color already in the frame) along a velocity field. Each frame: sources add color where they are drawn; every pixel's new value is the old value found by stepping *backward* along the velocity (the semi-Lagrangian method: Stam, *Stable Fluids*, SIGGRAPH 1999; *Real-Time Fluid Dynamics for Games*, GDC 2003), read with bilinear interpolation; and the result decays. The frame buffer is the simulation state. + +They differ in one property that decides everything downstream: a shader needs no state and its cost is samples per pixel, with state used to cut samples; advection is all state and its cost is a resample per pixel per pass plus the memory to hold color above 8 bits. They share every block below the top. + +## The blocks + +### Coordinate mapping + +- **Cartesian to polar.** For every pixel, `r = hypot(x − cx, y − cy)` and `θ = atan2(y − cy, x − cx)` about a center. Precomputed once per geometry into two tables; nothing trigonometric runs per pixel at render time except the sine and cosine of a *modulated* angle. Polar addressing is what makes motion rotate around a center rather than slide across the panel. +- **Polar transforms.** Add to θ to rotate; multiply r to zoom; add `k·r` to θ to twist into a spiral; fold θ into n mirrored wedges for a kaleidoscope (`θ' = |((θ mod 2π/n) − π/n)|`); take `1/r` for a tunnel. Each is one operation on the coordinate before sampling. +- **Domain warping.** Replace `f(p)` by `f(p + g(p))` where `g` is itself a noise field (Quilez, *Domain warping*). The canonical forms are `fbm(p + fbm(p))` and `fbm(p + fbm(p + fbm(p)))`; the intermediate displacement vectors are free color inputs. Applied in polar space, warping the angle makes the field swirl and warping the radius makes it breathe. +- **Normalized shader space.** Center the pixel and scale by the short side so a circle stays circular on a non-square panel; the GLSL `uv` convention. + +### Noise + +- **Gradient noise** (Perlin, *An Image Synthesizer*, 1985; *Improving Noise*, 2002): a pseudo-random gradient at each lattice corner, a dot product with the offset, a quintic fade, trilinear interpolation. Smooth to the first derivative, statistically isotropic, zero-mean. Simplex noise (Perlin 2001) is the same idea on a simplex lattice, cheaper in higher dimensions. **Value noise** interpolates random values at lattice corners instead; it is cheaper and visibly lumpier at low frequency because its extrema sit on the lattice. +- **Fractional Brownian motion (fBm).** Sum octaves at doubling frequency and halving amplitude (`lacunarity = 2`, `gain = 0.5`); structure at every scale. **Turbulence** sums the absolute value instead; the creases read as flame and smoke. Octave count is the primary cost knob. +- **Noise as a source of motion.** The third noise dimension advanced with time evolves a 2D field without scrolling it. A noise value mapped to an angle (`θ = 2π · noise`) is the classic flow-field construction (Hobbs, *Flow Fields*; Shiffman, *The Nature of Code*, autonomous agents). +- **Curl noise** (Bridson, Houriham, Nordenstam, *Curl-noise for procedural fluid flow*, SIGGRAPH 2007). In 2D the velocity is the perpendicular gradient of a scalar noise potential, `v = (∂ψ/∂y, −∂ψ/∂x)`: exactly divergence-free, so transported color swirls and never piles up, with two finite differences per pixel and no solver. + +### Time: oscillators and modulation + +- A **timer bank**: N independent clocks, each `phase_i = (t + offset_i) · ratio_i`, all scaled by one master speed so a single knob scales the whole animation. +- From each clock the four standard **LFO shapes**: a ramp (the phase itself, for scrolling and zoom), a wrapped phase in `[0, 2π)` (rotation), a bipolar sine in `[−1, 1]` (breathing), and a noise-driven angle `2π · noise(phase)` (wandering). Unipolar variants in `[0, 1]`. +- **Modulation**: a parameter bound to a clock and a depth, applied multiplicatively about its base value (`p' = p · (1 + depth · lfo)`), so nothing in the image is constant and every parameter can breathe. The synthesizer model, by its synthesizer names. +- **Framerate independence.** Every rate is per second, integrated with the measured `dt`; a virtual clock `t += dt · speed` keeps oscillators and decay in step under one speed control. + +### Color + +- **Contrast window**: clamp the field value to `[low, high]` and rescale; a black point and a white point, which is how a soft noise field becomes shapes with edges. +- **Palette mapping**: the windowed value indexes a gradient; or three field layers drive R, G, B directly; or a **cosine palette** (`a + b·cos(2π(c·v + d))`, Quilez) gives a whole ramp from twelve constants. +- **Gamma** as the last nonlinearity before output, and **quantization last**: compute in more than 8 bits, round once, with **temporal dithering** (error spread across frames) where the output is 8-bit. + +### Sources: anti-aliased rasterization + +Anything drawn directly into the frame, at fractional coordinates, additively: + +- A **disc** by coverage from its signed distance: `cov = clamp(radius + 0.5 − dist, 0, 1)` per pixel; edges anti-alias for free. +- A **line** by Wu's algorithm (1991) or its generalization: step along the segment and distribute each step over the 2×2 neighbors with bilinear weights `(1−fx)(1−fy), fx(1−fy), (1−fx)fy, fx·fy`. The same 2×2 **splat** places a point source at sub-pixel precision. +- Sources move on the oscillators above: orbits, Lissajous curves (`x = A·sin(a·t), y = B·sin(b·t + φ)`), swarms with Reynolds steering, and borders or masks that are static geometry. + +### Transport: the velocity field and the resampler + +- **Velocity as a rule per pixel**, evaluated at sample time, not stored: a uniform wind (direction, speed, optional rotation); radial in or out; a spiral (rotate by α, move radially by ρ, in polar space); zoned rings (smoothstep-blended radii, each with its own swirl or drift); noise-driven shift (two independent 1D noise profiles, one per axis, applied separably); curl noise; or a stored field from a solver. +- **The resampler**: for each destination pixel, `src = dst − v·dt`; read the previous frame at `src` with **bilinear interpolation** (four loads, three lerps per channel); **wrap** at edges for a seamless tile or **clamp** so color flows off. A separable field (row shift then column shift) halves the work: two 1D passes through a scratch buffer. +- **Partial transport**: `out = (1 − b)·current + b·sampled` mixes what arrives with what was there; it reads as viscosity without a solver. +- **Stable fluids** (Stam 1999) when real fluid behavior is wanted: diffuse velocity, project to divergence-free (Jacobi or Gauss-Seidel iterations on a Poisson equation), self-advect, project again, optionally reinject lost swirl by **vorticity confinement** (Fedkiw, Stam, Jensen 2001), then diffuse and advect the dye. Orders of magnitude costlier than a velocity rule; curl noise gets most of the look for none of the solve. + +### Decay + +- **Exponential decay by half-life**: `k = 0.5^(dt / t½)`, multiply every channel by `k` each frame. Framerate-independent by construction; a half-life in seconds is the user-facing knob. A per-frame constant multiply (the 8-bit "fade by" idiom) is the same thing only at one fixed framerate. +- **Blur** as a second decay, separable, for softening trails. + +### Arithmetic + +- **Fixed point** throughout the hot path: Q16.16 for coordinates, velocities and color state; angles as a fraction of a turn in an integer (a 16-bit or 24-bit turn) so sine and cosine are table lookups and wraparound is free; square roots avoided by comparing squares or by an integer `isqrt`. +- **Lookup tables** for everything per-geometry (polar), per-turn (sine, cosine), per-curve (fade, gamma). +- **Precision graded by role**: the noise inner loop tolerates 8 fractional bits at a quality cost; color state does not. + +## Cost + +Per pixel, a shader pays `samples × noise_cost + transform + window + palette`; rich compositions run 3 to 12 samples. Cost is `area × samples`. Advection pays, per pixel per pass, four loads, three lerps and one multiply per channel, and per frame the field rule; cost is `area × channels × passes`, independent of noise, plus color-state memory of `area × channels × 4 bytes` (and a scratch copy, and any stored field). A 16-bit or wider color state is not optional for advection: an 8-bit state cannot hold sub-integer accumulation from splats or a slow decay, and a trail fading through 256 levels posterizes at the low end. + +**Framerate is part of the rendering method.** Transport per frame is `v · dt`; when it exceeds about a pixel the bilinear filter smears instead of moving and edges tear. A decay of `0.5^(dt/t½)` with a short half-life becomes a strobe at low fps. Temporal dithering averages only above the eye's integration rate. Oscillators sampled below twice their rate alias. The consequence is a design rule: the per-frame cost must stay small enough that the frame rate stays high, and the metric to report is **pixels per second**, which is what the frame rate at a given area actually measures. + +The standard levers, in the order they are usually pulled: lookup tables; fixed point; fewer samples (octaves, warp depth); render the field below output resolution and upscale bilinearly (a smooth field hides it); update the field below the frame rate and interpolate; vectorize the noise inner loop where the CPU has SIMD; use the hardware FPU for the kernels that are float by nature (square roots, arctangents, a reference algorithm kept in float), behind the same contract; move the field update to a second core; and above all of these, run the field on a machine with the cycles and feed the lights over the network. + +--- + +# Part 2: Examples from the field + +Implementations that do similar things to Part 1. None is the specification; each fills in a spot: a measured number, a parameter vocabulary users expect, a fixed-point choice that is known to work, a precision decision. + +| Example | What it is | Similar to | What it fills in | +|---|---|---|---| +| **ANIMartRIX** (Stefan Petrick; also in FastLED master as `fl::Animartrix`) | A polar-noise shader engine: per-pixel polar tables, a timer bank yielding ramp / phase / bipolar sine / noise-angle signals, a "5D coordinate mapper" (`newx = (offset_x + cx − cos θ·r)·scale_x`, likewise y, `z` from a ramp), gradient noise per layer, a low/high contrast window, per-channel or palette color, gamma, sanity clamp; 50 named animations of 1 to 12 layers | Part 1 shader, polar transforms, LFO bank, contrast window | The author's throughput on the Teensy 4.0 the engine was tuned on: ~730 k RGB pixels/s per layer at 600 MHz ("20 fps on 36k LEDs"), 53 k/s on an ESP32 core, 110 k/s on two; "3 layers at 400+ fps, 10 layers at ~50 fps" on a 16×16 class panel. Float throughout, quantized to 8 bits "in the very last step", temporal dithering. The parameter names users of this style know: `scale_x/y/z`, `offset_x/y/z`, `z`, `center`, `low_limit`, `high_limit`, `master_speed`, `ratio`, `offset` per timer | +| **FastLED master's fixed-point migration of the same engine** (`3e77a096`, 2026-09-02) | Q16.16 (`s16x16`) throughout; angles as A24 (24-bit turn) into `sincos32`; four gradient-noise precisions side by side (`s16x16` reference, `q16`, an `i16`-optimized inner loop "2× faster multiplies", `s8x8` "4× faster, trades accuracy"), a 4-wide SIMD noise; **bit-identical tests** against the float engine | Part 1 arithmetic | Proof that the whole shader family is exact in Q16.16 with a table sine and a table-driven gradient noise, on the ESP32 class; the precision-by-role grading; a fixed-point type family documented for MCUs ("integer math is 5-100× faster … no rounding errors; results are exact and reproducible") | +| **FlowFields** (4wheeljive, from a 2026 concept post by Petrick; forks: `ewowi/flowfields`, Petrick's `ColorTrails`) | An advection engine: **emitters** ("anything that is drawn directly") plus **flows** ("an invisible wind that moves the previous pixels and blends them together"). Six flows as displacement rules (noise via two decoupled 1D profiles, radial, directional wind with a perpendicular wobble, three-zone rings with swirl and drift, spiral, and a full stable-fluids solver with vorticity confinement), eight emitters (orbital, swarming and audio dots, Lissajous line, rainbow border, noise kaleidoscope, cube, fluid jet), a 20-timer modulator bank with multiplicative "breathing", float RGB grids, a half-life fade `0.5^(dt/persistence)`, dithered 8-bit output, a virtual clock under one `globalSpeed` | Part 1 advection, velocity rules, sources, decay, modulation | The flow vocabulary and defaults users expect (`persistence`, `blendFactor`, `windStep`, `angularStep`/`radialStep`, `innerSwirl`/`outerSwirl`/`midDrift`, `xShift`/`yShift`, `noiseFreq`, `viscosity`, `vorticity`, `gravity`; ~35 named controls); that separable noise transport with decoupled axes reads as diagonal flow; that partial transport reads as viscosity; the solver's cost (5 Jacobi iterations per solve, three solves per frame) as the upper bound | +| **`fl::FlowField`** (FastLED master, from the above, 2026-03-21) | The same engine distilled to two emitters and the noise flow, in a float variant and a **Q16.16 variant** with `i32` color state ("allowing sub-integer color accumulation during splats") quantized at output; coverage discs and 2×2 bilinear lines; a "noise punch" impulse into the profiles | Part 1 resampler, sources, decay, arithmetic | The measured share: **advection ~80% of frame time** in fixed point, with the hoisting and `restrict` tricks that get it there; six 32-bit grids (384 KB at 128²), hence "memory is large"; defaults `persistence` 0.86 s, `flow_shift` 1.8 px, `noise_freq` 0.33/0.32 | +| **`fl::gfx` canvas** (FastLED master) | An anti-aliased 2D canvas: line, disc, ring, stroked line with caps, additive by default, float / int / fixed-point coordinates | Part 1 sources | The API shape a sub-pixel rasterizer converges on | +| **Fixed-point sub-pixel graphics** (Sutaburosu; the anti-aliased canvas demo in MoonLight as `FixedPointCanvasDemoEffect`, and in FastLED master as the fixed-integer drawing `fl::gfx` credits him for, the SKIPSM Gaussian blur behind `fl::gfx::blur`, and the Elias water effect `FxWater`) | Twelve sub-demos on a Q16.16 anti-aliased canvas (clock, orbiting discs, star web, spirograph, Lissajous, thin and thick cube, organic walkers, boids, hypotrochoid, branching tree), "blazing fast fixed integer drawing"; a binomial two-pass Gaussian blur; a 2D ripple simulation after Hugo Elias | Part 1 sources, arithmetic, blur | That anti-aliased sub-pixel drawing is fully deterministic and FPU-free in Q16.16 at panel-to-wall sizes; the blur kernel shape a trail idiom converges on; a working catalog of source geometries (orbits, Lissajous, spirograph and hypotrochoid curves, boids, a recursive tree) for the emitter set. The canvas demo itself is parked by the product owner as a port candidate | +| **`fl::WaveFx`** (FastLED master, after Shawn Silverman) | A 2D wave-equation simulation with 2× to 8× supersampling, mapped to color by gradient | Part 1 stored-field transport | Supersampling as the artifact lever for a stored field; the comment that 2× "gives the best results for the CPU consumption" | +| **`fl::Luminova`** (FastLED master) | 256 particles with per-frame fade and blur, "soft white trails" | Part 1 decay + blur, with particles as sources | Fade-plus-blur as the trail idiom for point sources | +| **Flow-field generative art** (Hobbs; Shiffman) | A grid of angles from noise; particles or pen strokes follow the angle in small steps | Part 1 noise-as-motion | The tracing form of a flow field, where the particle is the source and the field never touches the frame; Hobbs's advice to distort with something other than Perlin noise once the look is familiar | +| **Stable fluids** (Stam 1999, GDC 2003) | The reference solver and its "linear backtrace" advection | Part 1 transport | The algorithm every advection effect above descends from, and the reason semi-Lagrangian advection is unconditionally stable at any `dt` | +| **Earlier 8-bit work in the same idiom** (FunkyNoise, FunkyClouds, 2014; a self-modulating simplex noise gist) | Polar angle per pixel shifted by noise; noise modulating the offsets, scale and palette index of the next noise pass | Part 1 warping, feedback modulation | That the idiom predates FPUs and was first done in 8-bit FastLED terms | +| **MoonLight's port of ColorTrails** (2026-03) and **FastLED-MM's FlowFields sketch** (2026-04/05) | The advection engine on `fl::CanvasRGB` + `s16x16`; the same engine at 128×128 inside projectMM's earlier module runtime with 35 registered controls | Part 1 advection, in our own prior work | That the family has already run on our hardware and behind our UI; a bench reference for the advection showcase | + +Two things the examples agree on that Part 1 states as requirements: **compute above 8 bits and quantize last**, and **report pixels per second**. One thing none of them does yet: curl noise as a velocity rule, which Part 1 includes because it is the standard cheap answer to fluid-looking flow. + + +--- + +# Part 3: How this fits projectMM + +## What we have + +Against Part 1's blocks, measured on this tree: + +| Part 1 block | projectMM today | Status | +|---|---|---| +| Polar mapping | `atan16`, `dist16`, `kaleido` ([math16.h](../../src/core/math16.h)), computed per pixel; `PolarNoiseEffect` uses them | ✅ per pixel; ⬜ no precomputed LUT type | +| Polar transforms, `uv` | `shader.h`: `uv`, `rotate`, `repeat`, `mirror`; `kaleido` | ✅ | +| Noise | `inoise8`/`inoise16` **value** noise; `fbm8`/`fbm16`, `turbulence8`, `warp8` ([noise.h](../../src/core/noise.h)) | ✅ fBm, warp, turbulence; ⬜ gradient noise; ⬜ curl noise | +| Oscillators | `BeatPhase`, `beat`/`beatsin`, `sin16`/`cos16`, `smoothFollow`, easings, `hashInt` | ✅ single phase; ⬜ timer bank with the four LFO shapes and modulation binding | +| Contrast, palette | `map32`, `smoothstep`, `colorFromPalette`, `cosPalette` | ✅ | +| Gamma, dithering | `Correction` curves at the driver | ✅ gamma at output; ⬜ temporal dithering | +| Sources | `coverage` (SDF), `draw::splat` (24.8 sub-pixel, additive), `draw::line` (Bresenham, not anti-aliased), `particles.h` | ✅ disc, splat; ⬜ anti-aliased line | +| Resampler | `draw::scroll` (integer shift, wrap or clear) | ⬜ **no bilinear sample of the previous frame** | +| Velocity rules | none | ⬜ | +| Decay | `Layer::fadeToBlackBy` (8-bit multiply, once per frame, MIN across effects) | ✅ 8-bit; ⬜ half-life form on wide state | +| Blur | `draw::blur`, separable, every axis | ✅ | +| Color state | `Layer` buffer, `uint8_t` per channel ([Buffer.h](../../src/light/layers/Buffer.h)), persisting between frames ([ADR-0003](../adr/0003-layer-buffer-persists-frame-to-frame.md)) | ✅ persistence; ⬜ **no state above 8 bits** | +| Fixed point | 16-bit contract, uint8 angle / `angle16` turn, 24.8 positions, 16.0 noise coordinates ([power-functions-analysis-top-down.md § 2](power-functions-analysis-top-down.md)) | ✅ | +| Shader runner | `shader.h`: `each` (one function of position and time, the loop, mapping and write handled) | ✅ | +| Particles | pool, gravity, drag, bounce, collide, splat render | ✅ | +| Stored-field simulation | none | ⬜ (out of scope unless the top-down wants fluid) | + +The persistence contract advection needs already exists: the Layer does not clear between frames, and "a read-prior effect reads last frame's pixels via `draw::get` / `draw::blur`; the persistence *is* its state" ([architecture.md § Buffer persistence](../architecture.md#buffer-persistence--the-layer-does-not-clear-each-frame)). What is missing is the resampler and the bit depth. + +`PolarNoiseEffect` is the Part 1 shader already: polar addressing, `warp8` in polar space (the angle warped by noise), `kaleido`, a palette, with `octaves` and `warp` exposed as the cost knobs and the header stating the cost ("~4 samples/pixel at octaves=2 … on a large wall drop `octaves` to 1"). + +## What MoonLive has + +55 builtins ([MoonLiveBuiltins_light.h](../../src/light/moonlive/MoonLiveBuiltins_light.h), [MoonLiveBuiltins_common.h](../../src/core/moonlive/MoonLiveBuiltins_common.h)): `noise`, `polarA`/`polarR`, `sin`/`cos`, `beat`/`beatsin`, `smoothstep`/`step`/`smin`, `uvX`/`uvY`, `scale`, `mod`/`div`/`fdiv`, `setRGB`/`setXYZ`/`setPaletteColor`/`fill`/`fade`/`line`, the audio set, and the particle set. A script can write a Part 1 shader pixel today (`octopus.mle` is one). The measured cost is the call rate, not the arithmetic ([moonlive-language-roadmap.md § 4c](moonlive-language-roadmap.md)): `plasma.mle` at 9 host calls per pixel is 16,031 µs on a 3,840-pixel S3 fixture (~4.2 µs/px); `polarR` alone ~3.5 µs/px because it wraps a real square root; the particle vocabulary, "one call per FRAME rather than per pixel", is 54× cheaper on the same fixture. The roadmap's conclusions apply unchanged: "per-pixel builtins want to be inline ops, not calls" and "a `frame()` entry shape would sidestep it entirely". + +Advection is not expressible from a script: the 64-byte arena holds no frame of state and no builtin resamples the previous frame. The particle pool shows the shape that works for stateful families: a handle to native state, whole-pool passes per frame, the script composing them. + +## The budget, measured + +Per-pixel cycles at 240 MHz ([power-functions-analysis-bottom-up.md § Shaders](power-functions-analysis-bottom-up.md)): ~15,600 at 16×16 @ 60 fps, **~293 at 128×128 @ 50 fps**. The S3 render-only sweep ([performance.md](../performance.md)), µs per frame: + +| Effect | 16² | 32² | 64² | 128² | per pixel at 128² | +|---|---:|---:|---:|---:|---:| +| Noise (simplex, 1 sample/px) | 913 | 2,951 | 11,661 | 51,230 | 3.1 µs (~750 cycles) | +| Plasma | 352 | 1,020 | 3,744 | 20,020 | 1.2 µs | +| Metaballs | 462 | 1,757 | 6,108 | 28,576 | 1.7 µs | +| LavaLamp | 309 | 974 | 3,612 | 21,243 | 1.3 µs | + +On the classic ESP32 (no FPU, no PSRAM) the Noise effect runs 1,117 / 324 / 71 / 17 fps across the four sizes. So one noise sample per pixel is already 2.5× the wall budget, which is consistent with the field's own numbers in Part 2 once clock and FPU are normalized: **the shader half is a panel-class family on every MCU, and the engineering is in Part 1's levers.** Advection scales to walls in cycles (no noise per pixel; the field's noise is per row and column) and its cost is state: six 32-bit grids at 128² are 384 KB, PSRAM territory, and a panel-class family only on a PSRAM-less classic. + +Framerate protection is therefore the rule for both, in different currencies: **samples per pixel** for a shader, **cycles per frame and bytes of state** for advection. + +## Per-target headroom: FPU, SIMD, clock, and where the desktop takes over + +What each shipped target brings, from the IDF SoC capability headers and our own measurements: + +| Target | Cores × clock | FPU | SIMD | State memory | Measured against the S3 | +|---|---|---|---|---|---| +| classic ESP32 (Xtensa LX6) | 2 × 240 MHz | single precision | none | internal only, or 4 MB PSRAM on WROVER / 2 MB on PICO | slower; beats the S3 only on memory-bound loops (internal RAM vs PSRAM latency) | +| ESP32-S3 (Xtensa LX7) | 2 × 240 MHz | single precision | 128-bit PIE (`SOC_SIMD_INSTRUCTION_SUPPORTED`) | 8 MB octal PSRAM | the reference row in this document | +| ESP32-P4 (RISC-V) | 2 × 400 MHz | single precision | PIE + hardware loops (`SOC_CPU_HAS_PIE`, `SOC_CPU_HAS_HWLOOP`) | 32 MB PSRAM | ~3× on heavy compute ([performance.md](../performance.md)) | +| ESP32-S31 (RISC-V) | 2 × 320 MHz | single precision | PIE + hardware loops | PSRAM | between the S3 and the P4 | +| desktop | GHz class | double and single | NEON / SSE / AVX | unbounded | 20-40× an S3 per core, plus SIMD ([performance.md](../performance.md), the `collide` measurement) | +| Teensy 4.x (Cortex-M7), a future target | 1 × 600 MHz | single and double | none (DSP instructions) | 1 MB internal, no PSRAM | not measured; listed in [architecture.md § Scaling to available memory](../architecture.md#scaling-to-available-memory) as a supported class | + +**Can the FPU help?** Every target has one, so a float kernel is legal everywhere, and the repo already has the precedent: `raymarch.h` is compiled only where the SoC declares an FPU, as "the one bounded exception to the integer-only render path", while `shader.h` stays fixed point and runs everywhere ([power-functions.md § Raymarching](../moonmodules/light/power-functions.md#raymarching--one-technique-inside-a-shader)). The honest expectation: on these cores a float multiply costs about what an integer multiply costs, so an FPU does not make a noise sample cheaper; it makes square roots, arctangents and trig cheap enough to skip the tables, and it lets a float reference algorithm run unconverted where an exact fixed-point port is not worth writing yet. The portable contract stays fixed point; the FPU is a per-target acceleration behind it, per the standing decision. + +**Where the family shines on an MCU.** The S3 is the baseline this document measures against because it is the bench board with numbers, not because it is the target. The P4 is the natural home of the shader half: the highest clock, four-lane SIMD, hardware loops and 32 MB of PSRAM put a 64² composition and a 128² single-layer field inside its budget, and the S31 sits next to it on every axis. The classic is the portable floor, the target that keeps the contract honest. The top-down should size the showcases for the P4 and S31, keep them running on the S3, and let the classic degrade by the cost knobs. + +**Can SIMD help?** Yes, and the P4 is where it pays: PIE processes four 32-bit lanes per instruction and the hardware loop removes the branch per iteration, which is exactly the shape of a noise inner loop, a bilinear lerp across four channels, or a separable advection pass. The S3 has the same width. This is the lever the field has already pulled (a 4-wide fixed-point noise exists in the wild), and it is a per-target implementation of the same function, never part of the contract. The classic has neither, which is why it is the target that decides the portable budget. + +**Where the border is.** Per pixel at 50 fps, the cycle budget is `clock / (area × 50)`; one noise sample costs ~750 cycles on the S3 today, ~250 on the P4 by the measured ratio, ~20-40 on a desktop core. Samples per pixel affordable at 50 fps, rounded down: + +| Grid | S3 (240 MHz) | P4 (400 MHz, ~3×) | desktop (one core, ~30×) | +|---|---:|---:|---:| +| 16×16 | 24 | 72 | hundreds | +| 32×32 | 6 | 18 | ~180 | +| 64×64 | 1 | 4 | ~45 | +| 128×128 | 0 (one sample = 19 fps) | 1 | ~11 | + +So the ESP32 class stops at one sample per pixel on a 128² wall (S3) to one or two (P4), and carries a rich 3-to-12-layer composition only up to about 32×32 (S3) or 64×64 (P4). Beyond that line the desktop continues without a change of code: it is the same effect on the same contract, with SIMD and the clock on its side, and it already drives lights over the network as a processing node ([architecture.md § Drivers](../architecture.md#drivers): ArtNet, DDP, E1.31). Advection moves the border differently: its per-pixel cost is fixed and small, so the S3 and P4 carry it to a 128² wall as long as the wide color state fits PSRAM; the classic without PSRAM stops at panel size for lack of memory, not cycles. + +## What we need to add + +In Part 1's order, against the table above: + +1. **Gradient noise** beside value noise, in the existing 16-bit fixed vocabulary, as the quality upgrade for every field effect; keep value noise as the cheap inner-octave option (Part 2's precision-by-role grading). +2. **A polar LUT type**: angle and radius per pixel, built on the cold path, invalidated on geometry change; `PolarNoiseEffect` and every polar effect read it instead of calling `atan16`/`dist16` per pixel. +3. **An oscillator bank**: N clocks with offset and ratio under one master speed, the four LFO shapes, and a modulation binding (`parameter · (1 + depth · lfo)`), as one power function family rather than per-effect members. +4. **Curl noise** as a velocity rule, and the plain rules (wind, radial, spiral, rings, separable noise) as small functions of (pixel, t). +5. **The resampler**: bilinear sample of the previous frame at a fractional source, wrap and clamp variants, separable and full 2D forms. This is the advection kernel and the single largest missing block. +6. **Half-life decay** and an **anti-aliased line**, completing the sources-and-decay set beside `splat` and `coverage`. +7. **Color state above 8 bits** for advection and for dim trails: either a 16-bit Layer buffer (the LED-driver analysis already backlogs a "16-bit pipeline + dither", [backlog-light.md](backlog-light.md)) or effect-owned Q16.16 state quantized into the 8-bit Layer each frame. The examples are unanimous about *where* quantization goes (last) and split on *where the state lives*; the top-down decides. +8. **Temporal dithering** at the quantization step, once the state is wide. +9. **MoonLive frame kernels**: the prepare / emit / advect / decay passes and the polar-shader inner loop exposed as whole-frame builtins (inline ops or handle-based native passes), so a script composes frames the way it composes particle passes. Depends on the multi-argument host-call and arena work the language roadmap already names. +10. **Showcases**, three: a pure shader in the polar-noise idiom beyond `PolarNoiseEffect`; an advection effect with the noise, spiral and directional rules, two sources and the oscillator bank; and one that feeds a shader's output into a flow. + +## Bridge to the top-down + +The bottom-up settles what the top-down can take as given: the family is two techniques over one shared block set, every block has a textbook name and algorithm, the cost model is arithmetic and makes a shader a samples-per-pixel problem and advection a cycles-per-frame-and-memory problem, framerate is the rendering method for both, the field has proven the whole set exact in Q16.16 on our silicon class, and projectMM lacks three blocks (resampler, wide color state, gradient noise) plus the bank, the LUT and the kernels that make them composable. What it leaves open is design: names and signatures in our fixed-point vocabulary; where wide state lives and whether the Layer goes to 16 bits; the MoonLive frame-kernel shape and its dependency on the host-call ABI; which per-target accelerations sit behind the one contract; the three showcases to the control level; the tests, the timing contracts, and the order the work lands in. The top-down owns those decisions and their resource accounting. + +### Prompt for the agent that writes the top-down + +> Read `CLAUDE.md`, `docs/architecture.md` (§ Hot path discipline, § Effects and Layer, § Buffer persistence, § MoonLive), `docs/coding-standards.md`, `docs/backlog/generative-fields-analysis-bottom-up.md` (this document, in full: Part 1 is the specification language, Part 2 the examples, Part 3 the gap), `docs/backlog/power-functions-analysis-top-down.md` (the shape and the standing decisions: dimension-generic, one contract everywhere with per-target acceleration, fixed point invisible to the writer, the 16-bit contract, particles as the stateful precedent), `docs/moonmodules/light/power-functions.md` (what exists), and `docs/backlog/moonlive-language-roadmap.md` § 4c and § 2 (the per-pixel call cost and the multi-argument host-call blocker). +> +> Write `docs/backlog/generative-fields-analysis-top-down.md`: the implementation spec for the generative-fields family in projectMM, for compiled effects and for MoonLive scripts, on the power-function library. Use the house format of the power-functions top-down (status legend, TL;DR, numbered sections, decisions for sign-off, out of scope). Present tense for what exists, forward-looking only under the banner. American spelling, no em-dashes. Specify every kernel from Part 1's primary sources by its textbook name and algorithm; use Part 2 only for measured numbers, parameter vocabularies and precision choices, never as a source of code, and record prior art per module the way `PolarNoiseEffect.h` does. +> +> Decide, with rationale and resource accounting per target (classic ESP32 without PSRAM, S3, P4, desktop): (1) the power functions to add for Part 3's ten items, with signatures in the repo's fixed-point vocabulary; (2) where wide color state lives (a 16-bit Layer buffer versus effect-owned Q16.16 state quantized into the 8-bit Layer), with the memory table per fixture size and the dithering plan; (3) the MoonLive frame-kernel shape: how a script composes whole-frame passes and reads a per-pixel shader through inline ops rather than per-pixel host calls, and which language-roadmap blockers it depends on; (4) the performance plan against Part 3's measured budget and per-target headroom table: samples-per-pixel targets for shaders, cycles-per-frame and bytes-of-state targets for advection, the field-below-resolution and field-below-frame-rate levers, which kernels get FPU or SIMD (PIE) variants per target behind the one contract, where the desktop takes over as the processing node, and how framerate is protected as the rendering method; (5) the three showcases, specified to the control level; (6) the tests that pin each kernel (golden frames on the desktop, per-target timing contracts in scenarios) and the bench criteria the product owner judges by eye on the S3 and on a wall; (7) the order the work lands in, each step verifiable on the desktop first. +> +> Where a decision needs the product owner, list it under decisions for sign-off with the options and your recommendation rather than deciding silently. The bar is the measured quality and cost of the effects themselves. diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md new file mode 100644 index 00000000..2ca759ea --- /dev/null +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -0,0 +1,324 @@ +# Generative fields — top-down build spec + +> **Forward-looking design document — exception to CLAUDE.md present-tense rule.** Stage 2 of the generative-fields work: turns the [bottom-up analysis](generative-fields-analysis-bottom-up.md) (Part 1 the specification language, Part 2 the examples, Part 3 the gap) into an implementable spec: homes, types, signatures, the MoonLive surface, budgets, tests, and a step-by-step plan. Written 2026-09-03 against the five product-owner decisions in § 0. Where this document makes a NEW decision it is marked **(proposal)** and listed in § 10. Companions: the [power-functions top-down](power-functions-analysis-top-down.md) owns the library's homes, types and standing decisions, which this document extends rather than restates; the [MoonLive roadmap](moonlive-language-roadmap.md) owns the engine. + +## Status legend + +| | Meaning | +|---|---| +| ✅ | **Done.** Built and in the tree. | +| 🔨 | **To do.** Open, with the reason stated. | +| ❓ | **Unsure.** A claim or number not yet verified; a question, not a fact. | + +An unmarked line is context or rationale. + +## TL;DR + +- ✅ **Five decisions taken by the product owner (2026-09-03):** the Layer buffer goes to 16 bits per channel as the one format, subject to the memory analysis in § 2; gradient noise replaces value noise in place (one solution, the goldens move once); MoonLive gets each kernel in the same phase as the compiled function, with a shipped script; the stable-fluids solver is in scope as the last phase, a P4 and desktop showcase; every effect that does not run on the power functions is rewritten on them (algorithmic effects such as Game of Life excepted), judged against how it ran before and never made worse. +- **(proposal) The Layer width is a per-layer property fixed on the cold path, one template instantiated twice, never a per-light branch.** 16-bit is the default wherever it fits; 8-bit is the degradation step the existing adaptive-allocation cascade already has, so the classic without PSRAM keeps its proven 128² pipeline. The pipeline stays 16-bit end to end and quantizes **once, per driver, in `Correction`**, to the width that driver's wire takes: 8-bit with temporal dithering for WS2812-class LEDs and every network, Hue, video and preview output, 16-bit straight through for a 16-bit LED. Memory doubles per layer and for the output buffer (98 KB each at 128² RGB), bandwidth doubles in blend, extrude and preview, and the S3's PSRAM latency makes that measurable on cheap effects; the KPI gate reads it per batch (§ 2). +- **(proposal) Seven kernels, in the existing homes.** `core/noise.h`: gradient noise in place, plus `curl16`. `light/polar.h` (new): `PolarLut`. `core/oscillators.h` (new): `Oscillators`, the timer bank with the four LFO shapes and modulation. `light/draw.h`: `advect` (the bilinear previous-frame resampler, separable and 2D, wrap and clamp), the velocity rules, `decay` by half-life, `lineAA`, `disc`, and the 16-bit quantize with temporal dithering. `light/fluid.h` (new, last): the Stam solver. Every function names its canonical source; nothing is ported (§ 3). +- **(proposal) MoonLive operates on the Layer, not on a handle.** With the Layer at 16 bits the frame buffer IS the wide state, so advection, decay and the emitters are whole-frame builtins on the script's own layer, the shape `fill` and `fade` already have; the polar LUT and the oscillator bank are handles declared in `defineControls()`, the shape `pool()` has. Multi-argument host calls already ship (`emit` takes seven), so nothing here waits on the engine; the one engine change is the pixel-store inline ops learning the 16-bit element (§ 4). +- **Budgets are the bottom-up's, restated as targets per target.** Shaders: samples per pixel against ~750 cycles per sample on the S3, ~250 on the P4; advection: cycles per frame plus bytes of state, PSRAM-class for walls. Framerate is protected by rule: every kernel is `dt`-driven, transport stays sub-pixel per frame, and a showcase must hold its stated fps on its stated fixture or its cost knob is the default (§ 5). +- **Four showcases, three plus fluid**, specified to the control level: *Aurora* (a pure shader), *Trails* (emitters and flows), *Nebula* (a shader feeding a flow), *Fluid* (the solver, P4 and desktop) (§ 6). +- **Six phases, desktop first, bench last; the product owner decides when enough is done to commit.** Noise swap; fields and Aurora; the 16-bit Layer; advection and Trails; composition, dithering and SIMD; fluid. The catalog sweep that decision 5 mandates is a follow-on plan, fed by the [effects × power functions inventory](effects-power-function-inventory.md); only the effects a phase touches directly (the noise effects in phase 0, PolarNoise in phase 1, the raw-byte writers in phase 2) are rewritten inside this plan. Each phase lands with its unit tests, its goldens, its scenario, its MoonLive builtins and script, and its catalog cards (§ 8). + +## 0. Inputs and the decisions taken + +From the bottom-up: two techniques over one block set; every block named from its primary source; the cost model; projectMM's three missing blocks (previous-frame resampler, color state above 8 bits, gradient noise) plus the LUT, the bank and the kernels that compose them; the per-target headroom table with the P4 and S31 as the MCU home of the family. From the power-functions top-down, carried unchanged: dimension-generic; one contract everywhere with per-target acceleration; fixed point invisible to the writer; the 16-bit contract (`angle16`, `frac16`, `pos_t` 24.8); particles as the stateful precedent; determinism (pure function of position, time, seed; stateful kernels declare a resync point); golden frames as hashes; the `Canvas` descriptor. + +Product-owner decisions, 2026-09-03: + +1. **Wide color state: the 16-bit Layer**, as the cleanest, least-code, fastest alternative; decided per Layer at run time from free memory with 8-bit as the fallback (option B, agreed); and **quantized once per driver in `Correction`**, so the pipeline is 16-bit end to end and a 16-bit LED is a driver, not a pipeline change (agreed). Detail in § 2. +2. **Gradient noise replaces value noise in place.** One solution; no second function kept for compatibility (CLAUDE.md minimalism). +3. **MoonLive per phase, same PR.** +4. **Stable fluids in scope**, as the last phase; if it costs CPU it is a P4 and desktop showcase. +5. **Every effect runs on the power functions for whatever they cover; an effect that does not is rewritten.** Most effects were developed quickly to demonstrate a mechanism, and keeping them rendering the same is not a goal. The rule is a mandate, not an option: an effect whose mechanism is one the library provides (motion, fields, noise, polar addressing, trails, particles, oscillators) is rewritten on the library's kernel. Bouncing balls run on `particles`; every noise-like effect runs on the noise this plan builds; every trail decays by half-life; every polar effect reads the LUT. The one exception is the **algorithmic** effect, where a rule set *is* the effect rather than a natural motion: Game of Life is the type case, and it keeps its logic and uses the library only to draw. The guard that came with "behave identically first" stays: an early Game of Life port was much worse than its MoonLight origin, so a rewrite is compared against the effect as it ran and lands only if at least as beautiful on the panel. The aim is effects at a level no other LED firmware reaches, not a 1:1 rendition of another project's catalog. + +## 1. Homes and style ✅ *(the rule; the headers are new or grown)* + +The power-functions rule stands: grow existing homes, one style, free functions over `const Canvas&`, fixed-point vocabulary, a doc block naming the canonical source. **(proposal)** + +| Home | Gains | Notes | +|---|---|---| +| `core/noise.h` | gradient noise behind the existing `inoise8/16`, `fbm`, `warp`, `turbulence` names; `curl16` | Domain-neutral. The name promises the field; the algorithm changes underneath (decision 2). | +| `core/oscillators.h` **(new)** | `Oscillators`: N clocks, four LFO shapes each, modulation binding, one master speed, `dt`-driven | Domain-neutral: audio meters and services want the same LFOs. | +| `light/polar.h` **(new)** | `PolarLut`: `angle16` and radius per pixel, built at `prepare()`, 8-bit default with a 16-bit opt-in (the power-functions decision) | Was planned there and never built; `kaleido` stays in `math16.h`. | +| `light/draw.h` | `advect` (separable and 2D), the velocity rules, `decay`, `lineAA`, `disc`, `quantize` with dithering | The frame-ops family, which is where `scroll` and `blur` already live. | +| `light/layers/Buffer.h`, `BlendMap.h`, `Layer.h` | bytes per channel; the 16-bit format and its quantize-last | § 2. | +| `light/fluid.h` **(new, last)** | `Fluid`: velocity grids, diffuse, project, advect, vorticity confinement, dye transport | Stateful kernel with a resync point, like particles. | +| `light/moonlive/MoonLiveBuiltins_light.h` | one builtin per kernel, per phase | § 4. | + +## 2. The 16-bit Layer + +### What the codebase says + +[architecture.md § Memory strategy](../architecture.md#memory-strategy): all buffers are raw `uint8_t*` arrays sized `channelsPerLight × nrOfLights`; "there is no fixed channel layout: `channelsPerLight` is a runtime value, so RGB, RGBW and multi-channel DMX fixtures all use the same code path; the buffer simply gets wider". Adaptive allocation checks heap before every allocation with a 32 KB reserve, and the degradation cascade "reduces layer dimensions until the buffer fits, minimum 8×8". The architecture "does not assume PSRAM"; the classic without PSRAM is "proven up to 16 K lights (128×128 measured live on Olimex)". CLAUDE.md: minimal memory, fastest hot path, "the standard, complete construct beats a hand-rolled special case", and "no `#ifdef`, no per-light virtual call, data over objects". The LED-driver analysis already planned this as its mode 3, "16-bit pipeline (incl. dither): doubles RAM; best gradient quality; required for 16-bit-native LEDs (UCS7604, HD108)", with the driver declaring its input width and the pipeline building Layer buffers accordingly ([leddriver-analysis-top-down.md § 7.3](../history/leddriver-analysis-top-down.md)). + +So the width is a property the architecture already treats as runtime data (like `channelsPerLight`), the cascade already knows how to shrink a layer that does not fit, and the pipeline decision was already made in principle. What is new is doing it. + +### Memory, per fixture, RGB, one layer + +The last column is an **illustration** from the classic's measured free heap today (~104 KB running at 128² with mirror, Ethernet and mDNS up), not a threshold: the decision is made at run time from free memory, never from the grid size, so the same layout may run 16-bit on one device and 8-bit on another depending on what else is loaded. + +| Grid | 8-bit | 16-bit | Illustration: would it fit today's measured classic heap without PSRAM? | +|---|---:|---:|---| +| 16×16 | 768 B | 1.5 KB | yes | +| 32×32 | 3 KB | 6 KB | yes | +| 64×64 | 12 KB | 24.6 KB | yes | +| 96×96 | 27 KB | 55 KB | yes, one layer | +| 128×128 | 49 KB | 98 KB | **no** as a second allocation beside the 49 KB output buffer: the reserve is 32 KB | +| 48×256 (the wall) | 37 KB | 74 KB | PSRAM already required by `nrOfLightsType` | + +The driver output buffer, where one exists (two or more layers, or a mapping LUT), follows the Layer's width, so the composite case costs two 16-bit buffers; it is part of the same runtime allocation check. Advection needs a scratch copy for the separable pass (a second buffer of the same size) and, for the fluid solver, velocity, pressure and divergence grids (four more `int32` planes). Those are effect-owned `ScratchBuffer`s, allocated at `prepare()`, reported through `dynamicBytes()`, PSRAM-preferred; the memory ladder shows them exactly as it shows a particle pool. + +### Can 8 or 16 be decided dynamically without hot-path cost? Yes, and it is the existing mechanism + +The width is decided **per Layer at `prepare()`**, on the cold path, by the same allocation check that decides whether a LUT or an output buffer exists: the Layer attempts the 16-bit allocation against the free heap after the 32 KB reserve, keeps it when it succeeds, and otherwise takes 8-bit as the first step of the cascade (before dimension reduction). It is a measurement, not a table: no grid size is special, and the answer re-decides on every `prepare()` (a layout change, an added layer, a freed module). Every per-pixel loop that reads or writes Layer bytes is written **once as a template on the sample type** and instantiated for `uint8_t` and `uint16_t`; the choice happens **once per pass per frame** (a function pointer or a branch at the top of `blendMap`, `extrude`, `fadeToBlackBy`, `advect`), never per light. That is the "data over objects, no virtual call per light" rule satisfied, and it is one algorithm, not two implementations. The price is code size (two instantiations of the frame-op set) and a second configuration to test, which the goldens cover by running both widths. + +**(proposal)** Two options, with the recommendation: + +- **A. 16-bit only.** One format, the cascade shrinks a layer that does not fit. Least code and one test configuration; the classic without PSRAM loses its stated 128² full pipeline (it drops to 96² single-layer, 64² with two layers), which is a documented capability regression on a shipping board class. +- **B. 16-bit default, 8-bit as the first cascade step** (recommended). One template, two instantiations, chosen per layer on the cold path; the classic keeps 128²; the hot path pays nothing per light. Minimalism is respected in the way that matters here: one algorithm with one home, and the 8-bit path is a fallback the architecture already promises, not a second feature. + +### Quantize last: once, per driver, in `Correction` (agreed) + +The pipeline is 16-bit end to end: Layer → `blendMap` → output buffer, all at the Layer's width. Quantization happens **once, in `Correction::apply`, per driver**, which every driver already runs through `DriverBase` (LED, ArtNet/DDP/E1.31, PanelCard, Hue, NDI, HLS, Preview): white balance, brightness, the power limiter and the perceptual curve run at 16-bit input, and the last step narrows to the width the driver's wire declares. **8-bit with temporal dithering** for WS2812-class LEDs and every network, video and preview output; **16-bit straight through** for a 16-bit LED. This is mode 3 of the LED-driver analysis ("driver input 16-bit, wire 8-bit, the driver downsamples and dithers; required for 16-bit-native LEDs"), and its `inputBitsPerChannel()` stub becomes real: the driver declares its wire width, `Correction` quantizes to it. + +Why here and not at `blendMap`: quantizing earlier throws the extra bits away before the perceptual curve, which is exactly where 8-bit input crushes the low end, and it makes a 16-bit LED impossible. One site for the whole system also means one dither state (per driver, one byte per channel of carried error, or a stateless ordered matrix) and one place to test. + +Two consequences. The zero-copy path (a single layer with no LUT, the driver reading the Layer directly) needs no view: `Correction` reads the Layer's width like any other source. The `Correction` LUTs stay 256 entries with interpolation on the 16-bit input (the shape `sin16` uses), not a 64K table. In phase 2 the narrowing is `>> 8` so every existing effect renders bit-identically and no golden moves; dithering is the phase 4 switch. + +**The four combinations, and the hot path.** The Layer's width (decided by memory) and the wire's width (declared by the driver) are independent facts that meet in one `Correction` template; the combinations fall out, none is a mode to maintain: + +| Layer | Wire | `Correction` does | When | +|---|---|---|---| +| 16 | 16 | curve and brightness at 16, no quantization | the full pipeline: a PSRAM board with a 16-bit LED | +| 16 | 8 | curve and brightness at 16, quantize once with dithering | the common case: 16-bit fits, WS2812-class LEDs, and every network, video and preview output | +| 8 | 8 | today's path, byte for byte | a board where memory forced the 8-bit fallback | +| 8 | 16 | widen (`v · 257`), curve and brightness at 16, out at 16 | the fallback board driving a 16-bit LED; smoother dimming than 8-bit scaling, the effect's own 8-bit steps remain | + +No path you have today gets slower: the 8-bit instantiations are the same code compiled for `uint8_t`, chosen once per pass per frame, so the per-light instruction count on an 8-bit Layer is unchanged. The 16-bit paths cost what they carry: twice the bytes moved (the S3's PSRAM latency shows this on cheap effects; the KPI gate reads it per batch), the same ALU ops on a 32-bit core, one interpolation per channel in `Correction` on top of the LUT lookup, and dithering as one add and one compare per channel, only on a 16-to-8 wire and only when switched on. No per-light branch, no virtual call, no allocation on the path. + +**16-bit LEDs are enabled, not built.** HD108 (16-bit per channel, clocked SPI) and UCS7604 (16-bit per channel, one-wire) are the known families; APA102/SK9822 are 8-bit color with a 5-bit current gain and do not qualify. Each is its own driver increment: verify the datasheet first, then an encoder that takes 16-bit wire values from `Correction` (an SPI driver for HD108, a wider symbol table for UCS7604). + +### The surface, counted + +What touches Layer bytes and therefore changes in phase 2: `Buffer` (bytes per channel, 1 or 2), `Canvas` (a sample-width field), the 25 `Canvas` and 12 `Buffer` overloads in `draw.h` (one template each), `BlendMap` (identity and LUT paths, both widths), `Layer::extrude` and `fadeToBlackBy` (bytes-per-light already, width-agnostic after the template), `Correction::apply` (16-bit input, quantize to the declared wire width; the one quantization site), `DriverBase` (the declared wire width), `PreviewDriver` (quantized through the same path), `NetworkReceiveEffect` (widens), the **7 effects that write raw bytes** (AudioVolume, BouncingBalls, Fire, Lines, NetworkReceive, Rainbow, Noise), `colorFromPalette` (unchanged: returns 8-bit RGB, widened at the write), the MoonLive `StoreElem` / `FillElems` inline ops on all three backends (element = 3 × 2 bytes), and the zero-copy driver path. Modifiers are coordinate-only and untouched; the mapping LUT is index-only and untouched. + +## 3. The kernels + +Signatures are shapes, not final names; the PR is the spec. All fixed point, all `dt`-driven where time enters, all pure functions of (position, time, seed) unless stated. **(proposal)** + +### 3.1 Gradient noise, in place (decision 2) + +`inoise8/16(x[,y[,z]])` keep their names, their 16.0 coordinate convention and their output ranges; the implementation becomes **Perlin's improved noise** (2002): a 256-entry permutation table, gradients from the 12 edge directions of a cube (8 in 2D), the quintic fade `6t⁵ − 15t⁴ + 10t³`, integer throughout, output rescaled to the full range the header already promises. `fbm`, `warp` and `turbulence` sit on top unchanged. The seven noise effects (Noise, NoiseMeter, Noise2D, PolarNoise, Wave, Tunnel, and EffectBase's users) change look in one commit; their goldens move in that commit with the reason in the message. Under decision 5 the question on the panel is whether they look at least as good as before; any that look worse are re-tuned before the swap is accepted, since a noise effect that ran beautifully on value noise may not degrade on gradient noise. The header's note that ports from FastLED "look slightly different for a reason the author cannot see" is deleted: they no longer do. + +Cost target: within 1.3× of the current value noise per sample (the gradient dot products replace the value lerps; the fade is the same), measured by the micro-bench in phase 0 before the swap is accepted. + +### 3.2 `PolarLut` (`light/polar.h`) + +```cpp +polar::Lut lut; // POD over ScratchBuffer +lut.build(dims, center, precision); // prepare(): angle16 + radius per pixel; 8-bit each by default, 16-bit opt-in +lut.angle(i); lut.radius(i); // hot path: two loads per pixel, no atan, no sqrt +``` + +Rebuilt on geometry or center change through `affectsPrepare`; reported as `dynamicBytes`. `PolarNoiseEffect` migrates to it (pixel-identical at the 16-bit precision, golden-pinned; the 8-bit default is a deliberate, bench-judged divergence). A polar modifier consuming the same LUT is the modifier-first path the earlier decision named; it is not in these phases. + +### 3.3 `Oscillators` (`core/oscillators.h`) + +```cpp +Oscillators osc; // N clocks; N is the effect's choice (4 to 20) +osc.set(i, ratio, offset); // per clock, at prepare() or on control change +osc.advance(dtMs, masterSpeed); // once per frame: phase_i += dt · ratio_i · master +osc.ramp(i); osc.phase(i); // 32-bit ramp; angle16 wrapped phase +osc.bipolar(i); osc.unipolar(i); // sin16 of the phase; 0..65535 form +osc.noiseAngle(i); // angle16 from inoise16(ramp), the wandering angle +osc.modulate(base, i, depth); // base · (1 + depth · bipolar(i)), the multiplicative binding +``` + +Frame-rate independent by construction (`dt`, never a frame count, per coding-standards § Animate on elapsed time). Determinism: the phases derive from the shared time origin, so two devices agree (§ 6b of the power-functions top-down). `BeatPhase` stays for single-tempo effects. + +### 3.4 Velocity rules and `curl16` (`draw.h`, `noise.h`) + +A velocity rule is a function `(x, y, t, params) → (vx, vy)` in `pos_t` per frame; none is stored. The set from Part 1: `flowWind` (direction, speed, rotation rate, perpendicular wobble), `flowRadial` (in or out), `flowSpiral` (angular step, radial step), `flowRings` (three zones with smoothstep boundaries, per-zone swirl and drift), `flowNoise` (two 1D profiles, one per axis, decoupled), and `curl16(x, y, t, scale)`: the perpendicular gradient of a scalar noise potential by two central differences, divergence-free by construction (Bridson 2007). The profiles of `flowNoise` are computed once per row and column per frame, not per pixel. + +### 3.5 `advect` (`draw.h`) + +```cpp +draw::advect(cv, scratch, rule, dtMs, Edge::Wrap|Clamp); // full 2D: backward sample, bilinear, per channel +draw::advectSeparable(cv, scratch, xProf, yProf, Edge); // two 1D passes through the scratch plane +``` + +The semi-Lagrangian step (Stam 1999): for each destination pixel, `src = dst − v · dt`, read the previous frame at `src` with bilinear interpolation (four loads, three lerps per channel), write to `scratch`, swap. On the 16-bit Layer the color state is the Layer itself; `scratch` is one effect-owned plane of the same width. Partial transport (`blend` fraction) is a parameter. Budget: ~40 cycles per pixel per channel per pass on the S3 (the field's 80% share is what this is measured against). + +### 3.6 `decay` (`draw.h`) + +`draw::decay(cv, halfLifeMs, dtMs)`: multiply every sample by `k = 0.5^(dt / t½)`, `k` computed once per frame from a 16-bit `pow2` table. Framerate-independent by definition; a unit test pins `decay(2·dt) == decay(dt)²` within one LSB. The Layer's collected `fadeToBlackBy` remains the one 8-bit-per-frame decay for effects that want it; `decay` is the half-life form on wide state. + +### 3.7 `lineAA`, `disc` (`draw.h`) + +`lineAA` steps the segment at ~3 samples per pixel and splats each through the existing 2×2 bilinear `splat` (Wu 1991). `disc(cv, center, radius, color)` writes coverage `clamp(r + 0.5 − dist, 0, 1)` per pixel in the bounding box, using the squared-distance `coverage` path already in `draw.h`. Both additive with saturation, the particle default. + +### 3.8 `quantize` with dithering (`draw.h`, phase 4) + +`draw::quantize(src16, dst8, ditherState)`: `>> 8` in phase 2; in phase 4 the truncation error is carried per pixel into the next frame (one byte per channel of state, effect-owned, or a 4×4 ordered matrix with no state, selectable). Applies at every 16-to-8 boundary listed in § 2. + +### 3.9 `Fluid` (`light/fluid.h`, phase 5) + +The Stam 1999 solver over effect-owned `int32` Q16.16 grids: `diffuse(velocity)`, `project()` (Jacobi, iteration count a control, default 5), `advect(velocity by itself)`, `project()`, optional `vorticityConfinement()`, then dye (the Layer) advected by `draw::advect` with the stored field. Wall boundaries; `addVelocity(x, y, dvx, dvy)` and the Layer write are the source terms. Declares a resync point (re-seed to rest). Sized for panels; the P4 and desktop are its home. + +## 4. MoonLive: the frame kernels, per phase (decision 3) + +**The Layer is the state, so the kernels are whole-frame builtins on the script's layer**, the shape `fill(r,g,b)` and `fade(amt)` already have: no handle, no arena bytes, one host call per frame. Stateful helpers that are not the frame (the polar LUT, the oscillator bank, the fluid grids) are **handles declared in `defineControls()`**, exactly like `pool(n)`: sized once, allocated by the binding outside the arena, whole-object passes per frame. Multi-argument host calls ship (`emit` takes seven), the builtin table holds 64, so nothing waits on the engine. **(proposal)** + +| Phase | Builtins | Script shipped | +|---|---|---| +| 1 fields | `polar(precision)` handle; `polarA()`/`polarR()` become inline loads from the LUT when one is declared (today they compute per pixel); `oscillators(n)`, `lfoSet(i, ratio, offset)`, `ramp(i)`, `phase(i)`, `bipolar(i)`, `unipolar(i)`, `noiseAngle(i)`, `modulate(v, i, depth)`; `gradient noise` is invisible: `noise()` just improves | `aurora.mle` | +| 3 advection | `flowWind(...)`, `flowRadial(...)`, `flowSpiral(...)`, `flowRings(...)`, `flowNoise(...)`, `flowCurl(...)` (each sets this frame's rule), `advect(blend)`, `decay(halfLifeMs)`, `disc(x, y, r, hue)`, `lineAA(x0, y0, x1, y1, hue)` | `trails.mle` | +| 4 composition | none new; `aurora.mle` as an emitter inside `nebula.mle` is composition of existing builtins | `nebula.mle` | +| 5 fluid | `fluid(iterations)` handle, `fluidJet(x, y, angle, force)`, `fluidStep(viscosity, vorticity, gravity)` | `fluid.mle` | + +The per-pixel shader path improves without new builtins: the LUT turns `polarA`/`polarR` from a 3.5 µs square root into two loads, and the roadmap's inline-op work (§ 4c) is what removes the remaining call cost; that work is the roadmap's, not this document's. + +The one engine change this plan requires: the `StoreElem` and `FillElems` inline ops lower a 16-bit element on all three backends when the layer is 16-bit (phase 2). The lowering already carries the element width as "N bytes"; the width becomes a per-binding constant. + +## 5. Performance plan + +**Currencies.** Shaders: samples per pixel, against ~750 cycles per sample on the S3 and ~250 on the P4 (bottom-up, Part 3), with the gradient-noise swap held within 1.3× of that. Advection: cycles per frame and bytes of state; the target per pass is ~40 cycles per pixel per channel on the S3, so a 128² RGB separable advect is ~4 ms on the S3 and ~1.3 ms on the P4, wall-capable at 50 fps with the shader budget left for the emitters. + +**Framerate as the rendering method, by rule.** Every kernel takes `dt`; no kernel takes a frame count. `advect` clamps the per-frame displacement to one pixel and reports when it clamps (the `frameTime`-style status), so a slow frame smears rather than tears. `decay` is a half-life. The oscillator bank is `dt`-integrated. A showcase's stated fps on its stated fixture is a scenario contract; when it fails, the default of its cost knob moves, not the contract. + +**Levers, in the order the plan pulls them.** LUTs (phase 1); fixed point (already); cost knobs as controls with honest defaults (every showcase); field below output resolution with bilinear upscale (phase 4: a `fieldScale` control, the shader renders into a smaller scratch plane and `draw::upscale` bilinearly fills the layer); field below frame rate (phase 4: `fieldRate`, the shader updates every N frames and the oscillators still advance every frame); SIMD (phase 4: a PIE variant of the gradient-noise inner loop and of the bilinear lerp for the S3 and P4, behind the platform boundary, selected by `platform_config.h` capability flags, bit-identical to the scalar form and tested as such); FPU (a float variant of `curl16` and the fluid solver where `hasFpu`, the `raymarch.h` precedent, same bit-identical-within-tolerance test); a second core (the field update as a `multicore` producer, not in these phases). + +**Where the desktop takes over.** The same effects, the same controls; the desktop as processing node feeds a wall over ArtNet or DDP. The per-target headroom table in the bottom-up is the guide: rich compositions above 32² (S3) or 64² (P4) are desktop work, and a showcase's card says so. + +## 6. Showcases + +Each is a compiled effect and a MoonLive script of the same look, so the script proves the builtin surface. Controls are the cost knobs and the look knobs, with defaults that hold the stated fps on the stated fixture. **(proposal)** + +**Aurora** (phase 1; shader; 🔬 2D). Three gradient-noise layers over a `PolarLut`, each layer's transform driven by its own oscillators; the layers become R, G, B through a contrast window and a palette blend. Controls: `speed` (master), `scale` (cells across the short side), `layers` (1 to 4, the cost knob), `warp` (angle displacement by noise), `twist` (radius shears the angle), `segments` (kaleidoscope fold, 1 = off), `contrast` (low/high window width), `palette` (the shared control). Targets: S3 32² at 100 fps with 3 layers; P4 64² at 60 fps with 3 layers; desktop 128² at 200 fps. + +**Trails** (phase 3; advection; 🔬 2D). Emitters drawn into the 16-bit layer, then advected and decayed. Controls: `emitter` (orbital dots, Lissajous line, both), `dots` (1 to 8), `orbit` (diameter), `flow` (wind, radial, spiral, rings, noise, curl), `strength` (pixels per second), `blend` (partial transport), `persistence` (half-life in ms), `breathe` (modulation depth on strength and orbit, from the bank), `palette`. Targets: S3 64² at 60 fps; P4 128² at 50 fps; classic 32² at 60 fps in 16-bit. + +**Nebula** (phase 4; composition; 🔬 2D). The Aurora field, thresholded by its contrast window so most of it is black, is the emitter; a curl-noise flow carries it. Controls: Aurora's `layers`/`scale`/`contrast`, Trails' `strength`/`persistence`/`blend`, plus `fieldScale` (the field at half or quarter resolution) and `fieldRate` (the field every N frames). Targets: S3 64² at 50 fps with the field at half resolution; P4 128² at 50 fps; desktop unconstrained. + +**Fluid** (phase 5; solver; 🔬 2D; P4 and desktop). A jet emitter into a Stam solver, dye on the 16-bit layer. Controls: `jets` (1 to 4), `force`, `angle` (oscillator-modulated), `viscosity`, `vorticity`, `gravity`, `iterations` (the cost knob), `persistence`, `palette`. Targets: P4 64² at 50 fps with 5 iterations; desktop 128² at 100 fps; on the S3 and classic it runs at whatever the panel allows and its card says so. + +Each showcase gets its card in [effects.md](../moonmodules/light/effects.md) in the PolarNoise form (one line per control, the cost knob named as such), and its numbers in [performance.md](../performance.md). + +## 7. Tests and bench criteria + +- **Unit, per kernel, behavior-named.** Gradient noise: zero-mean over a large sample, range, continuity across cell boundaries, the same value on every ISA (a fixed-seed table of 64 samples). `PolarLut`: the LUT equals per-pixel `atan16`/`dist16` at 16-bit precision; the 8-bit default within one LSB of angle. `Oscillators`: `dt`-independence (two steps of `dt` equal one of `2·dt`), wrap, modulation bounds. `advect`: a single lit pixel moves exactly `v·dt` (sub-pixel, so two neighbors share it by the bilinear weights), wrap and clamp edges, the separable form equals the 2D form for an axis-aligned field, no write outside the buffer. `decay`: `decay(2·dt) == decay(dt)²` within one LSB, and a value never rises. `curl16`: divergence of the sampled field is zero within tolerance on a grid. `lineAA`/`disc`: total coverage of a disc equals its area within 2%; a line's coverage is independent of direction within 5%. `quantize`: `>> 8` bit-identical to the 8-bit path; dithering averages to the 16-bit value over 256 frames. 16-bit Layer: every `draw::` primitive tested at both widths. +- **Goldens.** A golden pins the plumbing, not the look (decision 5): phase 2 moves none, because a bit-identical quantize is the proof that widening the Layer is mechanical; phase 0 and phase 6 move goldens deliberately, with the reason in the commit and the product owner's comparison against the old frame on the panel, and that is the harness working. Each showcase adds its golden at both widths. +- **Scenarios, per family.** Fields: a `PolarLut` sized at prepare and rebuilt on a grid resize, with the memory ladder. Advection: Trails on a live pipeline at 16², 32², 64², 128² with the scratch plane in the ladder and the tick within its per-target contract. The 16-bit Layer: the existing `scenario_Layer_memory_1to1` and `scenario_MultiplyModifier_memory_lut` at both widths, and the cascade stepping from 16 to 8 bits on a constrained heap. Fluid: its grids in the ladder and its tick contract on the P4. Every showcase's fps target is a `contract` in its scenario, per target. +- **Perf.** The micro-bench target from the power-functions plan gains a row per kernel; `collect_kpi.py --commit` per phase on the S3 and P4; the desktop tick is the fast alarm. +- **The final gate is the product owner's eyes.** Per phase: the S3 bench board (shiffy, 80×48) for the panel class, the P4 (.139) for the MCU home, the desktop at 128×96 for the ceiling, and a wall run for Trails and Nebula. The criteria are visual: no tearing at the stated fps, no visible steps in a trail's tail, a shader that turns rather than scrolls, and the classic at 32² still smooth. + +## 8. Step-by-step implementation plan + +The steps below are work order, not commit order. Each step is finished on the desktop first, then the S3, then the P4, then the wall where it applies, and the product owner tests as steps land. **When to commit, and how much rides in one commit or PR, is the product owner's call** ([CLAUDE.md § Commit](../../CLAUDE.md#commit)): the pre-commit and pre-merge gates cost real time, so a commit carries several steps and a PR carries several phases. Nothing here implies one PR per phase. Order chosen so the first showcase lands before the one cross-cutting change. + +### Phase 0: measure, then swap the noise (small) +1. Add the kernel rows to the micro-bench target: value noise as it is, per sample, on desktop; record. +2. Implement Perlin improved noise behind `inoise8/16` (2D and 3D; 1D as the 2D with y = 0), integer, same coordinate convention, same output ranges. Delete the "value noise" note in `noise.h`. +3. Run the micro-bench: accept only within 1.3× per sample; else optimize (the 8-gradient 2D form, a 12-entry gradient table) before continuing. +4. Desktop build, `ctest`: the seven noise goldens fail as expected; update them in the same commit with the reason. +5. Flash S3 and P4; `collect_kpi.py --commit`; the product owner judges Noise, Noise2D, PolarNoise, Tunnel on the panel. Catalog cards: no text change unless the look note in a card mentions value noise. + +### Phase 1: fields and Aurora (medium) +1. `core/oscillators.h` with its unit tests. +2. `light/polar.h`: `PolarLut` with 8-bit default and 16-bit opt-in; unit tests against `atan16`/`dist16`. +3. Migrate `PolarNoiseEffect` to the LUT (golden-pinned at 16-bit; the 8-bit default is a deliberate move judged on the panel) and to the bank for its drift. +4. `AuroraEffect`: the three-layer shader, controls per § 6, card in effects.md, golden. +5. MoonLive: `polar()` and `oscillators()` handles with their builtins; `polarA`/`polarR` read the LUT when declared; `aurora.mle`; the compile-every-script test and a script golden. +6. Scenario: fields (LUT rebuild on resize, memory ladder), Aurora's fps contract per target. +7. Desktop, S3, P4; performance.md rows; the product owner's look. + +### Open from phase 1 + +**Aurora hitches on the desktop and not on the S3 (2026-09-04).** The product owner sees a periodic +hitch in the desktop preview; the same firmware on an ESP32-S3 at 64x64 looks smooth, and the S3's +LEDs were not yet judged. Five causes were tested and ruled out with measurements: + +| ruled out | the measurement | +|---|---| +| an integer overflow | every expression stays in range at every control setting, checked by hand | +| the drift sawtooth wrapping | worst single-frame field change at a wrap is 7 of 255, no spike | +| the field moving too fast | per FRAME the desktop moves 15x LESS than the S3 (0.009 against 0.136 noise cells), so it should read smoother | +| the contrast window's per-frame easing | its absolute worst frame is SMALLER at 385 fps (17.6) than at 25 fps (30.2) | +| the preview transport at a large grid | the product owner set the desktop to 64x64, matching the S3, and the hitch stayed | + +What is known: brightness changes are distributed rather than discrete (median 17 per frame, 99th +percentile 101), so there is no single glitching frame; and the desktop renders at ~385 fps against +the S3's 25, which is the one large difference left standing. The next thing to try is a frame-rate +cap on the desktop: if the hitch tracks the render rate rather than the wall clock, something in the +pipeline is per-frame where it should be per-unit-time, and the effect is not the place to look. + +**Aurora's layer crossover (2026-09-04).** With a winner-takes-all palette index, 12.7% of pixels +change which layer owns their color every frame, and 35% on the worst frame; each change moves the +hue a whole palette region. A weighted crossover (cubed weights, so a dominant layer still +dominates) removes the discontinuity and measured 2.7x less frame-to-frame change, for 3.4% more +time per pixel (42.8 against 41.4 ns on the host). Built, measured, then REVERTED on the product +owner's call: it did not address the hitch above, and the cost is real. Revisit when the hitch is +understood, since the two may be related. + +### Phase 2: the 16-bit Layer (large, cross-cutting) +1. `Buffer`: bytes per channel; `Canvas`: sample width; `Layer::prepare()` picks the width by the allocation check (option B) or fixed 16 (option A), per the sign-off. +2. `draw.h`: every `Canvas` and `Buffer` primitive as one template instantiated for both widths; `get`/`pixel` widen 8-bit RGB on write and narrow on read for the existing callers. +3. `BlendMap`: both paths templated; the output buffer follows the Layer's width. +4. `Correction::apply` reads 16-bit input and quantizes (`>> 8` in this phase) to the wire width `DriverBase` declares (8 for every driver today); the preview goes through the same path; `NetworkReceiveEffect` widens. No quantizing view is needed on the zero-copy path. +5. The 7 raw-byte effects migrated to `draw::` (which the power-functions plan already owed). +6. MoonLive `StoreElem`/`FillElems` at 16-bit on Xtensa, RISC-V and the host backend; the existing script tests at both widths. +7. Every golden at both widths, all unchanged (bit-identical quantize is the acceptance test of this phase). +8. Scenarios: the memory scenarios at both widths; the cascade from 16 to 8 on a constrained heap (the classic at 128²). +9. KPI on S3, P4 and classic: blend, extrude and preview cost at 16-bit read against the table; the S3's PSRAM latency is the number to watch. +10. Docs: architecture.md § Buffer types, memory strategy, the leddriver mode-3 note closed, MIGRATING.md if any API a script or driver sees changed. + +### Phase 3: advection and Trails (medium) +1. `advect` (2D and separable), the velocity rules, `curl16`, `decay`, `lineAA`, `disc`, with their unit tests. +2. `TrailsEffect`: emitters, flows, the bank for breathing, scratch plane in `ScratchBuffer`, card, golden. +3. MoonLive: the flow, advect, decay and emitter builtins; `trails.mle`; script golden. +4. Scenario: Trails at four sizes with the ladder and per-target contracts. +5. Desktop, S3, P4, wall; performance.md; the product owner's look (the tail of a trail is the thing to judge). + +### Phase 4: composition, dithering, levers, SIMD (medium) +1. `quantize` with temporal dithering, switchable, default per the sign-off; tests. +2. `fieldScale` and `fieldRate` as shared mechanisms (`draw::upscale`, a frame-skip helper on the bank's clock). +3. `NebulaEffect` and `nebula.mle`; card, golden, scenario contract. +4. The PIE variants of the noise inner loop and the bilinear lerp for S3 and P4 behind `src/platform/`, bit-identical tests against the scalar forms; the FPU `curl16` where `hasFpu`. +5. KPI per target; the product owner's look on the wall. + +### Phase 5: fluid (medium; P4 and desktop) +1. `light/fluid.h` with its unit tests (divergence after `project` within tolerance; a jet moves dye; rest state is stable). +2. `FluidEffect` and `fluid.mle`; card with its per-target honesty; golden; scenario on the P4. +3. The backlog entry closes; performance.md rows on P4 and desktop. + +### After the phases: the catalog sweep (large; its own plan) +Decision 5 mandates that every natural-motion effect runs on the power functions. That sweep is not a phase of this plan: it is sized and sequenced in its own plan once the kernels exist, from the [effects × power functions inventory](effects-power-function-inventory.md), which records for each of the 58 effects what it uses today and what it could use. Two rules carry over: each rewrite is compared on the panel against the effect as it ran and lands only if at least as beautiful, and an effect a showcase supersedes outright is deleted, the way a particle-system effect replaces its non-PS twin. + +## 9. Resource accounting + +- **Flash:** the gradient noise is a 256-byte permutation plus a 12-entry gradient table; the LFO bank and LUT are small; the 16-bit Layer instantiates the frame-op set twice (estimate low single-digit KB per target ❓, read from the repo-health flash table per batch); the SIMD variants are per-target only. +- **RAM:** all sized buffers are `prepare()`-time, PSRAM-preferred, `dynamicBytes`-reported, zero static (`check_footprint`): the 16-bit Layer per § 2's table; `PolarLut` 2 B/pixel default; the advection scratch plane one Layer's size; the fluid grids four `int32` planes plus scratch (a 64² fluid is ~100 KB, PSRAM class). +- **Cycles:** budgets in § 5; the KPI gate per phase; the desktop tick as the fast alarm. +- **Repo:** goldens are hashes; scenarios record their observations; each phase adds ~1 effect, ~1 script, ~1 scenario. +- **Boundary:** `noise`/`oscillators` core; `polar`/`draw`/`fluid` light; SIMD and FPU variants only under `src/platform/`, selected by `platform_config.h` flags, never an `#ifdef` outside. +- **Complete construct, real consumer:** every kernel lands with its showcase and its script in the same PR. + +## 10. Decisions for sign-off + +1. ✅ **Layer width mechanism: B** (16-bit default, 8-bit as the first cascade step, decided per Layer at prepare from free memory, one template). Agreed 2026-09-03. +10. ✅ **Quantization lives in `Correction`, once per driver, to the driver's declared wire width**; the pipeline is 16-bit end to end and 16-bit LEDs become driver increments. Agreed 2026-09-03. +2. **Gradient noise swap accepted on the 1.3× per-sample bound**, goldens moved in one commit, judged on S3 and P4 (§ 3.1). +3. **MoonLive kernels operate on the script's Layer; LUT, bank and fluid are handles** (§ 4). +4. **Phase order**: noise, fields and Aurora, the 16-bit Layer, advection and Trails, composition, fluid (§ 8). Alternative: the 16-bit Layer first, if the cross-cutting risk should be retired before any showcase. +5. **Showcase names and targets** (§ 6): the fps-per-fixture numbers become scenario contracts on acceptance. +6. **`PolarLut` 8-bit default** (the earlier decision, restated because Aurora's angular resolution on a 128² wall may want 16-bit as its default) ❓. +7. **Temporal dithering default**: on for 16-bit layers once phase 4 lands, or off with a per-driver switch (the leddriver analysis's per-driver mode) ❓. +8. **Fluid on the S3 and classic**: runs with its card stating the panel size it holds, or hidden behind a capability flag. Recommendation: runs, honestly labeled. +9. **Two documents still state the old stance and need the PO's edit under decision 5**: [power-functions.md § Migrating an effect](../moonmodules/light/power-functions.md) ("Step 1, the port: behave identically") and the header of `test/unit/light/golden_frame.h` ("pixel-identical by default"). Proposal: "faithful first" stays, and its purpose is stated: it guards against degrading an effect into a quick-and-dirty one (the early Game of Life port), not against improving it. Two sentences follow it: every effect runs on the power functions for whatever they cover, and an effect that does not is rewritten on them, with the effect as it ran as the reference and "at least as beautiful on the panel" as the bar; algorithmic effects (a rule set is the effect) keep their logic. The golden is re-baselined in the same commit with the reason, and the harness comment reads "a golden pins the plumbing; a deliberate re-baseline records an improvement the product owner judged". + +## Out of scope + +16-bit-native LED drivers (HD108, UCS7604): enabled by the per-driver quantization, each its own increment starting with the datasheet; a polar modifier on the LUT (modifier-first path, its own increment); the second-core field producer; 3D variants of the velocity rules and the LUT (the dimension audit's "waits for a consumer" rule); a MoonLive per-pixel inline-op program beyond the LUT loads (the roadmap's § 4c work); GPU acceleration on desktop; supersync's protocol (each stateful kernel declares its resync point, no more). diff --git a/docs/backlog/moonlive-language-roadmap.md b/docs/backlog/moonlive-language-roadmap.md index aeabea33..c628c328 100644 --- a/docs/backlog/moonlive-language-roadmap.md +++ b/docs/backlog/moonlive-language-roadmap.md @@ -35,6 +35,7 @@ Five hard limits, all found by hitting them: | script state | **64 bytes** shared by all members | `kCtrlBytes`, `MoonLiveBuiltins.h:132` | | distinct members | **8** | `kMaxCtrls`, same file | | branch labels | **16** (an `if` or `for` takes up to 2) | `kIrLabels`, `MoonLiveIr.h:201` | +| frame slots | **16**, shared by live variables, loop counters and staged call arguments | `kMaxLocals`, `MoonLiveIr.h` | | ~~numeric types~~ | ~~`uint8_t`, `uint16_t`, `int16_t`~~ → **`int`, `byte`, `bool`, `fixed`, `string`** ✅ | still no float: `fixed` is Q16.16 | | ~~builtin table~~ | ~~16, and 16 used~~ → **64** ✅ | `BuiltinTable::kMax` — raised, with an overflow assert | @@ -42,6 +43,11 @@ The branch budget was binary-searched with generated scripts: **6 `if`/`else` + 7 does not.** The state budget is what caps the balls effect at 4 balls rather than 25 — six fields per ball needs ~150 bytes and six members. +The frame-slot budget was hit writing `aurora.mle` (2026-09-04), the first two-layer shader: it +compiles only after folding intermediates back into the expressions that use them, which is the +readability the language exists to give. Factoring the loop body into a helper would relieve it, +once helpers can take arguments and return values (§ 6). See § 8b. + ## What a simulation effect gives up today Each row is a compromise the balls effect makes, and the language feature that would remove it: @@ -383,12 +389,30 @@ does not foreclose float. **Settled** by the type-system design above: `fixed` is Q16.16 on a uniform int slot, float stays out, and the range analysis lives there. -### 6. Function arguments — *moderate, removes a real footgun* +### 6. Function arguments and return values — *moderate, removes a real footgun* `draw(i)` instead of setting a member the helper reads. The current shape is not just verbose: caller and callee agree by convention and nothing checks it, so a helper called from two places with different state silently does the wrong thing. It is also what makes helpers composable. +Script functions DO exist and ship: `balls.mle` calls `drawBall()`, `crosshair.mle` calls three +helpers, and every layout and modifier is one. Recursion works. Three limits sit on top of them, and +`aurora.mle` hit all three at once writing a `bright(v)` helper to apply one contrast window to two +layers (2026-09-04): + +| limit | what the compiler says | +|---|---| +| no parameters | `a script function takes no arguments yet` | +| no return value | `a script function returns nothing yet` | +| no forward calls: a helper must be declared ABOVE its caller | `unknown function`, with the column but not the name | + +The third is the cheapest to build and the most confusing to meet, since the message is the one an +actual typo produces: a second pass over the class body resolves it, which the code comment names as +the reason it is refused rather than half-supported. + +Parameters and returns also relieve § 8b: a helper's variables are live only inside it, so factoring +a loop body into a function is how a script stays under the frame budget. + ### 7. Signed values: ✅ *shipped* `int16_t` members, signed comparison, signed `/` and `%`, and `uvX`/`uvY` returning a signed @@ -425,6 +449,36 @@ script value cannot express however signed it is. compile-time table space and nothing at run time. Measure what a realistic effect needs before picking a number — the balls port wanted ~12 and had to be folded down. +### 8b. More frame slots — *the encoding is NOT the limit; measure the stack* + +**16 live variables**, shared by a script's named variables, its loop counters, and the arguments it +stages for a call. The budget is what is live AT ONCE rather than a total: a call hands its staging +slots back, and an `if`, `else` or `for` block hands its locals back at the closing brace +([MoonLiveEffect.md](../moonmodules/light/MoonLiveEffect.md) documents both). A script that exceeds +it fails with "too many variables in this function", "too many arguments to hold" or "too many loop +variables". + +Sixteen is enough for the shipped corpus and was not enough for the first two-layer shader: +`aurora.mle` wants an oscillator per layer, the grid centre, a polar angle and radius, and a field +sample per layer, all live in the same scope inside two nested loops, with the loop counters and +each call's staged arguments drawn from the same 16. + +`kMaxLocals`'s own comment says raising it "means widening the frame on all three backends together +— the slot index is an instruction field". **Measured on the shipped assemblers, that is not so:** + +| backend | how a slot is addressed | slots the encoding allows | +|---|---|---| +| Xtensa | `s32i/l32i`, an 8-bit offset counting 4-byte words | 256 | +| RISC-V | `sw/lw`, a 12-bit signed offset from the frame pointer | 2048 | +| host (arm64, x86-64) | an offset from a parked frame pointer | not encoding-bound | + +So the real cost is **stack**, not encoding: each slot is 4 bytes of frame on the render task, and +`kAsmLabels`/`kAsmFixups` next door carry the warning that this project has already bootlooped a P4 +on an oversized stack frame. 16 slots is 64 bytes; 32 would be 128. That is a cheap change on its +face, and the honest next step is to MEASURE the deepest compile-chain frame at 32 the way the +`kAsmLabels` note measured 48/96, then pick a number. Worth doing together with § 8, since both are +"probably just a constant" and both want the same measurement. + ### 9. Division: ✅ *shipped* `/` and `%` are operators, at multiplication's precedence. Both lower to a host call the way `mod` diff --git a/docs/moonmodules/light/MoonLiveEffect.md b/docs/moonmodules/light/MoonLiveEffect.md index 372dc542..58c7a27a 100644 --- a/docs/moonmodules/light/MoonLiveEffect.md +++ b/docs/moonmodules/light/MoonLiveEffect.md @@ -159,7 +159,7 @@ Registered by the light domain, not built into the compiler (the core owns only | `mod(a, b)` | `a % b` — the wrap a cyclic animation needs | | `beat(bpm, t)` | a `0..65535` sawtooth at `bpm` | | `beatsin(bpm, t, high)` | a sine `0..high` at `bpm` | -| `noise(x, y, z)` | `0..255` value noise at that point — the field behind fire, clouds and plasma | +| `noise(x, y, z)` | `0..255` gradient noise at that point, the field behind fire, clouds and plasma | | `scale(value, n)` | a `0..65535` value onto `0..n-1` — lands a wave on an axis | | `sin(angle)`, `cos(angle)` | the circle; one turn is `0..65535`, result biased to `1..65535` centered at 32768 | | `turn(n)` | one revolution split `n` ways — the angle step for placing `n` points on a circle | @@ -171,6 +171,9 @@ Registered by the light domain, not built into the compiler (the core owns only | `smin(a, b, k)` | the smooth minimum of two distances, so shapes melt into one surface rather than overlapping | | `fade(amt)` | dim every light toward black, FastLED's `fadeToBlackBy`. The trail primitive | | `polarA(dx, dy)`, `polarR(dx, dy)` | angle and distance from a center, for a radial effect | +| `fbm(x, y, octaves)` | octaves of noise summed at doubling frequency and halving amplitude, `0..255`: the cloud, smoke and terrain field. `octaves` is the cost knob, one noise sample each | +| `warp(x, y, strength)` | the field sampled where the field itself displaced it, `0..255`: the flowing, marbled look. Three noise samples | +| `osc(rate, ms, shape)` | a low-frequency oscillator, `0..65535`, at `rate` cycles per minute. Shapes: 0 sine, 1 triangle, 2 sawtooth, 3 square. Stateless, so two oscillators sharing a rate hold their phase relationship | | `escape(cx, cy, jx, jy, iters)` | the Mandelbrot/Julia escape count, `0..255`, `0` inside the set. Zero seed = Mandelbrot; the four coordinates are `fixed`, so uv output flows straight in. The one loop a script cannot write: it squares signed values in 64 bits | | `setPaletteColor(x, y, index, bri)` | one light from the ACTIVE palette, in one call | | `paletteR(i, bri)`, `paletteG`, `paletteB` | one palette channel, when a script needs the value rather than a pixel | diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index 0e8abab4..3f40f1ba 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -202,7 +202,7 @@ Detail: [technical](moxygen/RandomEffect.md) Rings effect preview -Expanding concentric rings from random centres, additive overlap (calm defaults). +Expanding concentric rings from random centers, additive overlap (calm defaults). - `count` — number of concentric rings (1–255). - `speed` — expansion rate. @@ -221,7 +221,7 @@ Detail: [technical](moxygen/RingsEffect.md) Ripples effect preview -Distance-from-centre sets a per-column wave phase; the lit surface ripples like water. +Distance-from-center sets a per-column wave phase; the lit surface ripples like water. - `speed` — wave animation rate (0 = frozen, 99 = fast). - `interval` — wavefront spacing (low = tight rings, high = wide). @@ -403,6 +403,26 @@ The court is fixed point rather than pixels, so the game plays identically on a Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1972) + + +### Aurora 🔬 · 2D + +Several noise fields, each drifting on its own clock, read in polar coordinates and composited into curtains of light. Nothing is simulated: layers of the same field at different scales, moved by independent oscillators, interfere with each other, and the interference is what reads as curtains folding through one another. The strongest layer at each pixel wins, so the layers stay distinct instead of averaging into haze, and which layer won picks the region of the palette. Every palette gives a different aurora. + +- `speed` — master rate; every layer's motion scales from it, and 0 freezes the composition. +- `scale` — noise cells across the grid: low is broad curtains, high is fine structure. +- `layers` — how many fields are composited, and the main cost knob. +- `warp` — how far the field displaces its own sample angle, which is what makes a curtain fold over itself rather than sweep past. +- `twist` — how much the radius shears the angle, giving the curtains their lean. +- `segments` — kaleidoscope wedges; 1 leaves the composition unfolded. +- `contrast` — how much of the field lights. Low is cloud, high is a few sharp curtains. The window is placed against the field's own measured range, so this means the same thing on any grid and at any octave count. +- `octaves` — detail within each layer, multiplying the cost knob. +- `polarTable`, `polarTable16` — as PolarNoise above. + +Cost is one warped fbm per layer per pixel, so `layers` times `octaves` is the budget. The polar address is a table read rather than an angle and a distance per pixel. + +Origin: projectMM original, in the shader vocabulary Stefan Petrick made recognizable in the LED world + ### Ballpit 🔬 · 2D @@ -486,7 +506,7 @@ Origin: projectMM original, on Sébastien Truchet's 1704 tiling and the standard ### Tunnel 🔬 · 2D -A texture mapped onto the inside of an infinite tube, so the viewer appears to fly down it forever. Nothing is 3D: the angle around the centre is one texture coordinate and the reciprocal of the distance is the other, which is perspective for the price of a divide. +A texture mapped onto the inside of an infinite tube, so the viewer appears to fly down it forever. Nothing is 3D: the angle around the center is one texture coordinate and the reciprocal of the distance is the other, which is perspective for the price of a divide. - `bpm` — how fast the tunnel flies past. - `depth` — texture scale along the tunnel; higher is finer rings. @@ -504,7 +524,7 @@ Origin: projectMM original, on the standard demoscene tunnel A rotating 3D object drawn as shaded spheres — the demoscene classic that named the technique. The smallest complete demonstration of putting 3D on a panel: rotate, project, sort back-to-front, shade by distance, draw. - `bpm` — rotation speed. -- `size` — ball radius at the object's centre, in pixels. +- `size` — ball radius at the object's center, in pixels. - `spread` — how far apart the balls sit. - `distance` — how far the object is from the viewer. - `fade` — dim the far balls, which is what reads as depth. @@ -550,7 +570,7 @@ Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function ### PolarNoise 🔬 · 2D -A warped noise field addressed by angle and radius, folded into a kaleidoscope. The field turns and breathes around the centre rather than scrolling past it. +A warped noise field addressed by angle and radius, folded into a kaleidoscope. The field turns and breathes around the center rather than scrolling past it. - `bpm` — how fast the field drifts. - `scale` — noise cells across the grid: low is broad shapes, high is fine detail. @@ -558,6 +578,8 @@ A warped noise field addressed by angle and radius, folded into a kaleidoscope. - `warp` — domain-warp strength; 0 gives a plain field. - `octaves` — fbm octaves, and the main cost knob. - `twist` — how much the radius shears the angle, setting the spiral. +- `polarTable` — read each pixel's angle and radius from a table instead of computing them every frame. On by default: it is the same picture, measured 34% faster on an ESP32-S3, and costs 2 bytes per pixel. Turn it off on a device short of memory; the effect then computes the address and looks identical. +- `polarTable16` — hold that table at full 16-bit precision, at 4 bytes per pixel instead of 2. Cost scales with `octaves` and `warp`: at `warp` > 0 and `octaves` 2 it is roughly 4 noise samples per pixel. On a large wall set `octaves` to 1 or `warp` to 0, which degrades to a plain polar noise that still reads well. @@ -751,7 +773,7 @@ Detail: [technical](moxygen/GEQ3DEffect.md) ### Noise2D 💫🌙🐙 · 2D -A smoothly drifting value-noise field: each pixel samples 3D noise (grid position × `scale`, time on the Z axis) and indexes the palette directly, giving an organic plasma wash that morphs over time. +A smoothly drifting gradient-noise field: each pixel samples 3D noise (grid position × `scale`, time on the Z axis) and indexes the palette directly, giving an organic plasma wash that morphs over time. - `speed` — how fast the field morphs (time-flow rate). - `scale` — noise zoom (higher = finer, more detailed). @@ -933,7 +955,7 @@ Detail: [technical](moxygen/FireEffect.md) Noise effect preview -Smooth animated value noise; true 3D field on volumetric layouts. +Smooth animated gradient noise; true 3D field on volumetric layouts. - `scale` — spatial frequency of the field (1–32, higher = finer detail). - `bpm` — scroll speed (8 noise cells per beat). diff --git a/docs/moonmodules/light/layouts.md b/docs/moonmodules/light/layouts.md index 783825af..0c09f7f7 100644 --- a/docs/moonmodules/light/layouts.md +++ b/docs/moonmodules/light/layouts.md @@ -97,9 +97,10 @@ Detail: [technical](moxygen/RingLayout.md) ### Rings 241 -The classic 241-LED concentric-ring disc: nested rings of 1, 8, 12, 16, 24, 32, 40, 48, 60 LEDs sharing a centre. +The classic 241-LED concentric-ring disc: nested rings of 1, 8, 12, 16, 24, 32, 40, 48, 60 LEDs sharing a center. - `scale` — overall radius scale (1–10). +- `outside in`: light 0 on the outer ring, wired inward, instead of at the center wired outward. The direction around each ring is unchanged. Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Layouts/L_MoonLight.h) diff --git a/docs/moonmodules/light/power-functions.md b/docs/moonmodules/light/power-functions.md index 7c04efc2..53b1c55a 100644 --- a/docs/moonmodules/light/power-functions.md +++ b/docs/moonmodules/light/power-functions.md @@ -124,9 +124,9 @@ One sample is a soft blur; the character comes from composing them. Summing octa | Power function | What it does | Effects | Modifiers | |---|---|---|---| -| `inoise8` | Value noise in 1D, 2D or 3D: a smooth, deterministic pseudo-random field | Noise, Noise2D, NoiseMeter, Wave | — | -| `fbm8` | Sums noise octaves at doubling frequency and halving amplitude, turning a blur into cloud and terrain structure | PolarNoise, Tunnel | — | -| `warp8` | Samples noise at a coordinate that noise itself displaced — the flowing, marbled look | PolarNoise | — | +| `inoise8` | Perlin gradient noise in 1D, 2D or 3D: a smooth, deterministic pseudo-random field | Noise, Noise2D, NoiseMeter, Wave | `noise` | +| `fbm8` | Sums noise octaves at doubling frequency and halving amplitude, turning a blur into cloud and terrain structure. Re-widened per octave count, so the field keeps its full range however many are summed | PolarNoise, Tunnel, Aurora | `fbm` | +| `warp8` | Samples noise at a coordinate that noise itself displaced — the flowing, marbled look | PolarNoise, Aurora | `warp` | | `turbulence8` | Sums the folded absolute value of noise, whose creases read as billowing smoke and flame | *(no caller yet)* | — | | `blobCentres` + `blobField` | Orbits N sources on sine paths and sums their inverse-square falloff — the metaball field behind anything fluid or molten | LavaLamp, Metaballs | — | @@ -144,9 +144,10 @@ The 16-bit forms matter here: the 8-bit versions step visibly on a large fixture | Power function | What it does | Effects | Modifiers | |---|---|---|---| -| `atan16` | The angle of a point as a 16-bit turn, smooth enough that a sweep shows no steps on a large fixture | PolarNoise, Spiral, Tunnel | — | -| `dist16` | True Euclidean radius — not the octagon `dist8` approximates, and it does not saturate at 255 | PolarNoise, Rings, Spiral, Tunnel | — | -| `kaleido` | Folds an angle into n mirrored wedges, giving any field n-fold symmetry for one modulo | PolarNoise, Tunnel | — | +| `PolarLut` | Every pixel's angle and radius, built once per geometry and read as a table. 34% of a PolarNoise frame on an ESP32-S3, at 2 bytes per pixel (4 at full precision); declines the table when free heap minus the reserve cannot hold it, and the caller computes the address instead | PolarNoise, Spiral, Tunnel, Aurora | — | +| `atan16` | The angle of a point as a 16-bit turn, smooth enough that a sweep shows no steps on a large fixture | Rings, and the fallback path of every `PolarLut` caller | — | +| `dist16` | True Euclidean radius — not the octagon `dist8` approximates, and it does not saturate at 255 | Rings, and the fallback path of every `PolarLut` caller | — | +| `kaleido` | Folds an angle into n mirrored wedges, giving any field n-fold symmetry for one modulo | PolarNoise, Tunnel, Aurora | — | | `isqrt` | Integer square root with no divide and no float | PaintBrush, WaterRipple | — | | `sin8` / `cos8` | The 8-bit oscillators — the internal fast path where a mod-256 result is exactly right | *(the 16-bit forms are the contract)* | **Rotate** | @@ -165,6 +166,7 @@ The framerate rule lives here too: everything in this group is driven by elapsed | Power function | What it does | Effects | Modifiers | |---|---|---|---| | `sin16` / `cos16` | 16-bit oscillators, smooth where the 8-bit forms visibly step on a large fixture | Echo, SdfShapes | — | +| `OscillatorBank` | N independent low-frequency oscillators advanced once per frame and read per pixel, each with its own rate, shape, range and phase offset. Their phases are held together, so oscillators sharing a rate keep their relationship for as long as the device runs | Aurora, PolarNoise | — | | `map32` | Maps a value between ranges, clamped, with the fencepost handled once so the last column is never lost | FreqMatrix, FreqSaws, GEQ, GEQ3D, Spectrum, StarField | — | | `hashInt` | Hashes position and time to a random-looking but reproducible value, so devices agree without exchanging anything | Dissolve, WaterRipple | — | | `peakHold` | Rises instantly to a new high then decays slowly — the falling peak dot every VU meter has | Spectrum | — | diff --git a/docs/performance.md b/docs/performance.md index ba55e946..281f1f6b 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -33,6 +33,59 @@ Binary sizes: | macOS arm64 | 358 KB | debug-arm64 (release-strip is smaller) | | Windows x64 | 432 KB | MSVC Release, static CRT | +### Kernel micro-bench (host) + +`uv run moondeck/check/bench_kernels.py` (the `mm_bench` target, Release, best of 5 over a 256×256 sweep of 16.0 fixed coordinates). A report that gates a kernel swap: the generative-fields plan accepts gradient noise behind the same names only within 1.3× of the row it replaces. Host figures; the S3 is 20-40× slower per core, so the ratio between rows is what transfers to a board. + +**Phase 0, before and after the swap to Perlin improved gradient noise (2026-09-04, macOS arm64).** The bound for accepting the swap was 1.3x per sample against the row it replaces, and it had to hold on a board, not only here: the first gradient cut was 2.8x FASTER on this host and 1.5x SLOWER on an ESP32-S3, because a runtime arity argument, select expressions that compile to branches, and eight corners in flight cost nothing on an out-of-order core and everything on an in-order one without a branch predictor. The shipped core is arity-templated, branch-free (a gradient table), 32-bit on the 8-bit tier, and hashes each corner to four bits with one multiply (three hashed to a byte nothing read). Host, ns per sample: + +| Kernel | value noise | gradient noise | ratio | +|---|---:|---:|---:| +| inoise8 1D | 13.0 | 2.6 | 0.20 | +| inoise8 2D | 22.2 | 5.4 | 0.24 | +| inoise8 3D | 29.3 | 11.5 | 0.39 | +| inoise16 1D | 4.7 | 3.2 | 0.68 | +| inoise16 2D | 9.6 | 7.0 | 0.73 | +| inoise16 3D | 17.8 | 13.3 | 0.75 | +| fbm8 2D, 2 octaves | 22.8 | 11.7 | 0.51 | +| fbm8 2D, 4 octaves | 38.0 | 24.2 | 0.64 | +| fbm16 2D, 2 octaves | 14.8 | 13.5 | 0.91 | +| fbm16 2D, 4 octaves | 22.2 | 27.1 | 1.22 | +| turbulence8 2D, 2 octaves | 18.3 | 12.8 | 0.70 | +| warp8 2D, 1 octave | 30.6 | 21.9 | 0.72 | +| warp8 2D, 2 octaves | 36.5 | 29.8 | 0.82 | + +**ESP32-S3 (esp32s3-n16r8, 64x64, the four noise effects, tick in µs)**, the measurement that decided it. Same board, same grid, value noise re-flashed from the previous commit for the before column: + +| Effect (path) | value noise | gradient, first cut | gradient, shipped | ratio | +|---|---:|---:|---:|---:| +| Noise (inoise8 2D) | 4,621 | 7,009 | 5,049 | 1.09 | +| Noise2D (inoise8 3D) | 6,681 | 10,661 | 8,453 | 1.27 | +| Tunnel (fbm8) | 16,385 | 21,304 | 16,649 | 1.02 | +| PolarNoise (warp8) | 20,356 | 29,199 | 20,490 | 1.01 | + +The 3D path is the closest to the bound and the reason: 3D gradient noise does eight dot products the value form never did, and the S3 instruction count for a 3D sample is 1.3x the old one. Method worth keeping: compile the kernel with the target's own compiler (`xtensa-esp32s3-elf-g++ -O2 -S`) and count instructions, branches and stack spills BEFORE flashing; three restructurings were compared that way in seconds, and the one flash went to the winner. The P4 and S31 numbers are open until those boards are back on the bench. + +**All rows, ns per sample, best of 5:** + +| Kernel | ns/sample | Msamples/s | +|---|---:|---:| +| inoise8 1D | 2.6 | 381.6 | +| inoise8 2D | 5.4 | 184.1 | +| inoise8 3D | 11.5 | 86.7 | +| inoise16 1D | 3.2 | 315.8 | +| inoise16 2D | 7.0 | 143.6 | +| inoise16 3D | 13.3 | 75.2 | +| fbm8 2D, 2 octaves | 11.7 | 85.5 | +| fbm8 2D, 4 octaves | 24.2 | 41.3 | +| fbm16 2D, 2 octaves | 13.5 | 73.8 | +| fbm16 2D, 4 octaves | 27.1 | 37.0 | +| turbulence8 2D, 2 octaves | 12.8 | 78.1 | +| warp8 2D, 1 octave | 21.9 | 45.7 | +| warp8 2D, 2 octaves | 29.8 | 33.5 | + +That reading held: the 8-bit tier improved most (2D by 4x on the host), because the value form quantized at every stage where the gradient form carries its dot products at full width. + ### Memory at 128×128 with mirror | Module | dynamicBytes | Breakdown | diff --git a/moondeck/MoonDeck.md b/moondeck/MoonDeck.md index 1f9ca6cd..92738520 100644 --- a/moondeck/MoonDeck.md +++ b/moondeck/MoonDeck.md @@ -204,6 +204,17 @@ The ESP32 half reads `esp32/monitor.log`, and refreshes it by opening the serial In `--commit` mode it also writes the repo-health snapshot (below), reusing the tick/FPS it just measured. +### bench_kernels + +Kernel micro-bench: nanoseconds per call for the power-function kernels (noise, fBm, warp, and every kernel added since), on this host. + +```bash +uv run moondeck/check/bench_kernels.py # build (Release) and run +uv run moondeck/check/bench_kernels.py --no-build # run the binary already built +``` + +A report, not a check: the Markdown table it prints is pasted into performance.md, and a kernel swap is accepted against the previous rows (the gradient-noise swap's bound is 1.3x per sample). Host timings; the S3 is 20-40x slower per core, so the ratio between rows is what transfers, and `collect_kpi.py` on a board gives the absolute cost. Builds only the `mm_bench` target, so it does not drag the test suite through the compiler. + ### repo_health Measure the repo's current state into `repo-health.json` — flash per firmware variant, tick/FPS per target, lines of code by area, comment density, test counts, docs inventory. diff --git a/moondeck/check/bench_kernels.py b/moondeck/check/bench_kernels.py new file mode 100644 index 00000000..c1fc08b6 --- /dev/null +++ b/moondeck/check/bench_kernels.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +"""Kernel micro-bench: ns per call for the power-function kernels, on this host. + +Builds and runs the ``mm_bench`` target (``test/bench/bench_kernels.cpp``) in the desktop build +tree and prints its Markdown table. A report, not a check: nothing passes or fails, and the +numbers are read against the previous rows in performance.md before a kernel swap is accepted +(the generative-fields plan's 1.3x-per-sample bound on the gradient-noise swap is the first). + +Host timings only. The S3 is 20-40x slower per core (performance.md), so the RATIO between two +rows is what transfers to a board; run collect_kpi.py on the device for the absolute cost. + +Usage: + uv run moondeck/check/bench_kernels.py # build (Release) and run + uv run moondeck/check/bench_kernels.py --no-build # run the binary already built +""" + +import argparse +import os +import platform +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +BUILD_DIR = ROOT / "build" / "macos" + + +def binary() -> Path: + exe = "mm_bench.exe" if platform.system() == "Windows" else "mm_bench" + for candidate in (BUILD_DIR / "test" / exe, BUILD_DIR / "test" / "Release" / exe): + if candidate.exists(): + return candidate + return BUILD_DIR / "test" / exe + + +def main() -> None: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--no-build", action="store_true", help="run the already-built binary") + args = ap.parse_args() + + if not args.no_build: + # Same tree and build type build_desktop.py uses for the test binaries, one target only. + cfg = ["cmake", "-B", str(BUILD_DIR), "-DCMAKE_BUILD_TYPE=Release"] + if subprocess.run(cfg, cwd=ROOT).returncode != 0: + sys.exit(1) + cmd = ["cmake", "--build", str(BUILD_DIR), "--target", "mm_bench"] + if platform.system() == "Windows": + cmd += ["--config", "Release"] + if subprocess.run(cmd, cwd=ROOT).returncode != 0: + sys.exit(1) + + exe = binary() + if not exe.exists(): + print(f"mm_bench not built: {exe}\n build: uv run moondeck/check/bench_kernels.py") + sys.exit(1) + print(f"Kernel micro-bench on {platform.machine()} ({os.cpu_count()} cores), Release, best of 5:", flush=True) + sys.exit(subprocess.run([str(exe)], cwd=ROOT).returncode) + + +if __name__ == "__main__": + main() diff --git a/moonlive/effects/aurora.mle b/moonlive/effects/aurora.mle new file mode 100644 index 00000000..7fe2def6 --- /dev/null +++ b/moonlive/effects/aurora.mle @@ -0,0 +1,48 @@ +// Aurora: layered noise curtains, each drifting on its own clock, read around the center. + +class AuroraEffect { + byte speed = 30; + byte zoom = 40; + byte fold = 60; + byte twist = 40; + byte contrast = 150; + + int dimensions() { return 2; } + + string tags() { return "💫"; } + + void defineControls() { + addControl("speed", speed, 0, 120); // how fast the curtains drift + addControl("zoom", zoom, 1, 255); // noise cells across the grid + addControl("fold", fold, 0, 255); // how far the field folds over itself + addControl("twist", twist, 0, 255); // how much the radius leans the curtains + addControl("contrast", contrast, 0, 255); // how much of the field lights + } + + void tick() { + int driftA = div(osc(speed, t, 2), 64); + int driftB = div(osc(mod(speed * 3, 127) + 1, t, 2), 64); + + for (int y = 0; y < height; y = y + 1) { + for (int x = 0; x < width; x = x + 1) { + int a = polarA(x - div(width, 2), y - div(height, 2)); + int r = polarR(x - div(width, 2), y - div(height, 2)); + a = div(a + r * twist, 64) * zoom; + + int best = warp(a, r * zoom + driftA, fold * 4); + int other = warp(a + zoom * 3, r * zoom + driftB + 4096, fold * 4); + + int index = 40; + if (other > best) { + best = other; + index = 170; + } + if (best > contrast) { + setPaletteColor(x, y, index, div((best - contrast) * 255, 256 - contrast)); + } else { + setPaletteColor(x, y, index, 0); + } + } + } + } +} diff --git a/src/core/moonlive/MoonLiveBuiltins_common.h b/src/core/moonlive/MoonLiveBuiltins_common.h index 0544e6c2..62390917 100644 --- a/src/core/moonlive/MoonLiveBuiltins_common.h +++ b/src/core/moonlive/MoonLiveBuiltins_common.h @@ -3,7 +3,7 @@ #include "core/moonlive/MoonLiveBuiltins.h" #include "core/math8.h" // beatsin16: the shared time vocabulary #include "core/math16.h" // beat16 / sin16 / cos16: full-range waveforms -#include "core/noise.h" // inoise8: the shared value-noise field +#include "core/noise.h" // inoise8: the shared gradient-noise field #include #include @@ -165,7 +165,7 @@ extern "C" inline uint32_t mm_ml_beatsin(const uintptr_t* args, uint32_t, const return beatsin16(static_cast(bpm), ms, 0, static_cast(high)); } -// noise(x, y, z) → the 0..255 value-noise field at that point, the primitive behind fire, clouds, +// noise(x, y, z) → the 0..255 gradient-noise field at that point, the primitive behind fire, clouds, // plasma and lava. Coordinates are 16.0 fixed point: the HIGH byte picks the noise cell and the low // byte interpolates within it, so `x * 256 / scale` zooms and feeding `t` into an axis makes the // field flow. Three arguments is exactly a Call's budget, and 2D is the same call with z held at a diff --git a/src/core/noise.h b/src/core/noise.h index 9393cc2f..cfd03ead 100644 --- a/src/core/noise.h +++ b/src/core/noise.h @@ -2,166 +2,239 @@ #include -// Value noise: a smooth, deterministic pseudo-random field, the staple "organic motion" -// source for LED effects. inoise8 returns a 0..255 value that varies smoothly across space, -// so neighbouring coordinates give similar values (unlike a raw hash). Sample it across a -// grid for clouds/plasma/fire-like fields; scroll a coordinate (or pass a time offset) to -// animate. 1D, 2D and 3D variants share one hash + a smoothstep interpolation. +// Gradient noise: a smooth, deterministic pseudo-random field, the staple "organic motion" source +// for LED effects. inoise8 returns a 0..255 value that varies smoothly across space, so +// neighboring coordinates give similar values (unlike a raw hash). Sample it across a grid for +// clouds/plasma/fire-like fields; scroll a coordinate (or pass a time offset) to animate. 1D, 2D +// and 3D share one gradient set and one interpolation. // -// **This is VALUE noise, and FastLED's `inoise8` is GRADIENT noise.** The name is kept because it is -// the one every LED effect author reaches for and the 0..255 contract matches, but the character -// differs: value noise reads blockier and more axis-aligned, and uses the full output range where -// FastLED's compresses toward the middle. A ported effect will therefore LOOK slightly different for -// a reason its author cannot see from the call site, which is why it is stated here rather than left -// to be discovered. Prior art: Ken Perlin's method by way of FastLED; the hash + smoothstep + lerp -// are ours, promoted from NoiseEffect so every effect shares one field generator. +// The algorithm is Perlin's improved noise (Ken Perlin, "Improving Noise", SIGGRAPH 2002): a +// pseudo-random GRADIENT at every lattice corner (one of the twelve cube-edge directions, chosen by +// a hash), the dot product of that gradient with the offset from the corner, a quintic fade +// 6t⁵ − 15t⁴ + 10t³ on the fraction, and a linear blend across the corners. Gradient noise is zero +// at every lattice point and has no value bias toward the corners, which is why it reads as smooth +// and isotropic where value noise (a random VALUE per corner) reads blocky and axis-aligned at low +// frequency. 2D is 3D with the z offset at zero (inoise8(x, y) == inoise8(x, y, 0)); 1D takes ±1 +// gradients of its own, since the cube-edge set projected onto one axis is zero for six codes of +// sixteen. The cost scales with the corners: 2, 4 and 8 corner dot products. // -// Coordinates are 16.0 fixed scaled however the caller likes — the high byte selects the -// noise CELL, the low byte the interpolation position within it. So a larger coordinate step -// per pixel = finer noise (more cells across the grid); a smaller step = broader, smoother. +// Output uses the full range. The gradient dot product is signed offsets added, so the blend spans +// ±one cell rather than the ±√3/2 the unit-vector bound suggests: an exact search over every +// gradient choice at every fraction gives ±half a cell in 1D, ±one cell in 2D and ±1.035 cells in +// 3D. Each tier halves the raw blend onto its range, so the midpoint is the field's mean and 0 and +// the top value are both reached; the clamp is a guard only the 3D extreme touches. Written fresh, +// integer throughout: the hash and the fade table are ours, the gradient trick is Perlin's. +// +// Coordinates are 16.0 fixed scaled however the caller likes: the high byte selects the noise +// CELL, the low byte the interpolation position within it. So a larger coordinate step per pixel is +// finer noise (more cells across the grid); a smaller step is broader and smoother. namespace mm { namespace noise { -// Integer hash → 0..255. Three coords (z=0 for 1D/2D) feed one well-mixed avalanche. -constexpr uint8_t hash(uint32_t x, uint32_t y, uint32_t z) { - uint32_t h = x * 1619u + y * 31337u + z * 6271u; - h = (h >> 13) ^ h; - h = h * (h * h * 60493u + 19990303u) + 1376312589u; - return static_cast((h >> 16) & 0xFF); +/// Lattice hash: a corner's gradient index, 0..15. Each coordinate times its own odd constant, +/// xored (the products of x and x + 1 are shared across a cell's corners, so this part is six +/// multiplies per 3D sample rather than 24), then one xorshift, one multiply, and the top nibble +/// of the product, its best-mixed part. Four bits is all a gradient needs, so this is the whole +/// hash: a byte-wide avalanche spent three multiplies per corner on bits nothing read. Checked +/// against that avalanche: the sixteen codes are uniform to 0.6%, and adjacent corners are +/// independent to the same 5% the avalanche managed (a linear pre-mix with one multiply was NOT: +/// adjacent corners correlated six-fold, which reads as lattice patterns). Both tiers share it, so +/// the 16-bit field is the 8-bit one at finer resolution rather than an unrelated field. +constexpr uint32_t corner(uint32_t x, uint32_t y, uint32_t z) { + uint32_t h = (x * 0x8da6b343u) ^ (y * 0xd8163841u) ^ (z * 0xcb1ab31fu); + h ^= h >> 16; + h *= 0x7feb352du; + return h >> 28; +} + +/// Perlin's twelve cube-edge gradients (every signed permutation of (1, 1, 0)), padded to sixteen +/// with four repeats so the hash's low nibble indexes them by a mask rather than a modulo. A table +/// rather than Perlin's select expression because the selects compile to branches, and a core +/// without a branch predictor pays for each one: the select form was 44 branches per 2D sample on +/// Xtensa, the table is loads and small multiplies. +inline constexpr int8_t kGradient[16][3] = { + {1, 1, 0}, {-1, 1, 0}, {1, -1, 0}, {-1, -1, 0}, + {1, 0, 1}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, + {0, 1, 1}, {0, -1, 1}, {0, 1, -1}, {0, -1, -1}, + {1, 1, 0}, {0, -1, 1}, {-1, 1, 0}, {0, -1, -1}, +}; + +/// Dot product of corner gradient `h` (0..15) with the offset, over the axes the arity samples. +template +constexpr int32_t grad(uint32_t h, int32_t x, int32_t y, int32_t z) { + // 1D takes ±1 gradients of its own: six of the sixteen cube-edge gradients have no x component, + // which would leave a 1D cell flat wherever both corners drew one. + if constexpr (Dims == 1) return (h & 1u) ? -x : x; + const int8_t* g = kGradient[h]; + int32_t d = g[0] * x; + if constexpr (Dims > 1) d += g[1] * y; + if constexpr (Dims > 2) d += g[2] * z; + return d; } -// Smoothstep 3t²−2t³ on 0..255 — turns the linear cell fraction into an eased one so the -// field has no hard creases at cell boundaries (the difference between value noise and a -// blocky grid). -constexpr uint8_t smoothstep(uint8_t t) { - uint16_t t2 = static_cast(t) * t / 255; - uint16_t t3 = static_cast(t2) * t / 255; - return static_cast((3 * t2 - 2 * t3) & 0xFF); +/// The quintic fade 6t⁵ − 15t⁴ + 10t³ as a table over t = i/256, i = 0..256, in 0.16 fixed +/// (0..65536). The 16-bit tier interpolates between entries on its low byte; the 8-bit tier +/// indexes it directly. A table because the polynomial needs a 40-bit intermediate per sample. +struct FadeTable { + uint32_t v[257]; + constexpr FadeTable() : v{} { + for (uint64_t i = 0; i <= 256; i++) { + // (6i⁵ − 3840i⁴ + 655360i³) / 2^24 == (6t⁵ − 15t⁴ + 10t³) · 65536 for t = i/256. + const uint64_t i3 = i * i * i; + v[i] = static_cast((6u * i3 * i * i - 3840u * i3 * i + 655360u * i3) >> 24); + } + } +}; +inline constexpr FadeTable kFade{}; + +/// fade for an 8-bit fraction: a table lookup. +constexpr uint32_t fade8(uint8_t t) { return kFade.v[t]; } + +/// fade for a 16-bit fraction: the table on the high byte, linear on the low byte. +constexpr uint32_t fade16(uint16_t t) { + const uint32_t a = kFade.v[t >> 8], b = kFade.v[(t >> 8) + 1]; + return a + (((b - a) * (t & 0xFFu)) >> 8); } -// Linear interpolate a→b by t/255. -constexpr uint8_t lerp8(uint8_t a, uint8_t b, uint8_t t) { - int16_t delta = static_cast(b) - static_cast(a); - return static_cast(static_cast(a) + delta * t / 255); +/// The two tiers as policies for the one core below: the fraction width, the fade of a fraction, and the blend a→b by a 0.16 weight sized to the tier's operand range. +struct Tier8 { + static constexpr int kFrac = 8; + static constexpr uint32_t fade(int32_t f) { return fade8(static_cast(f)); } + /// Operands stay within ±2^11 (three offsets of a 256 cell), so the product fits 32 bits. + static constexpr int32_t blend(int32_t a, int32_t b, uint32_t w) { + return a + (((b - a) * static_cast(w)) >> 16); + } +}; +struct Tier16 { + static constexpr int kFrac = 16; + static constexpr uint32_t fade(int32_t f) { return fade16(static_cast(f)); } + /// Operands reach 2^18 against a 2^16 weight: a widening multiply (two on a 32-bit core). + static constexpr int32_t blend(int32_t a, int32_t b, uint32_t w) { + return a + static_cast((static_cast(b - a) * static_cast(w)) >> 16); + } +}; + +/// The core: gradient noise over the corners of one lattice cell. `x/y/z` are fixed point with +/// `Tier::kFrac` fraction bits (the whole part selects the cell); an unused axis is passed as 0. +/// One instantiation per arity so each compiles to straight-line code over exactly its corners. +/// `layer` is one z-slice (2 or 4 corners with the blends between them) and 3D is that slice at z +/// and z + 1 blended by the z fade: written this way because one body with eight corners in +/// flight spilled half its registers on a 16-register window (52 stack stores per sample on +/// Xtensa), while the slice form keeps at most four. Returns the raw blend in cell units: ±half a +/// cell in 1D, ±one cell in 2D, ±1.035 cells in 3D (the exact extremes, from a search over every +/// gradient choice at every fraction). +template +constexpr int32_t layer(uint32_t ix, uint32_t iy, uint32_t iz, int32_t fx, int32_t fy, int32_t fz, uint32_t wx, uint32_t wy) { + constexpr int32_t kCell = 1 << Tier::kFrac; + int32_t v = Tier::blend(grad(corner(ix, iy, iz), fx, fy, fz), + grad(corner(ix + 1, iy, iz), fx - kCell, fy, fz), wx); + if constexpr (Dims > 1) { + v = Tier::blend(v, Tier::blend(grad(corner(ix, iy + 1, iz), fx, fy - kCell, fz), + grad(corner(ix + 1, iy + 1, iz), fx - kCell, fy - kCell, fz), wx), wy); + } + return v; } -/// The 16-bit tier's internals. The 8-bit forms above quantise at EVERY stage — the corner values, -/// the interpolation and the octave sum — so a gradient that should be smooth steps visibly once a -/// fixture is large. These are the same three functions at 16 bits. -constexpr uint16_t hash16(uint32_t x, uint32_t y, uint32_t z) { - uint32_t h = x * 374761393u + y * 668265263u + z * 2147483647u; - h = (h ^ (h >> 13)) * 1274126177u; - return static_cast((h ^ (h >> 16)) & 0xFFFF); +template +constexpr int32_t raw(uint32_t x, uint32_t y, uint32_t z) { + constexpr int32_t kCell = 1 << Tier::kFrac; + const uint32_t ix = x >> Tier::kFrac, iy = y >> Tier::kFrac, iz = z >> Tier::kFrac; + const int32_t fx = static_cast(x & (kCell - 1)); + const int32_t fy = static_cast(y & (kCell - 1)); + const int32_t fz = static_cast(z & (kCell - 1)); + const uint32_t wx = Tier::fade(fx); + const uint32_t wy = Dims > 1 ? Tier::fade(fy) : 0; + int32_t v = layer(ix, iy, iz, fx, fy, fz, wx, wy); + if constexpr (Dims > 2) v = Tier::blend(v, layer(ix, iy, iz + 1, fx, fy, fz - kCell, wx, wy), Tier::fade(fz)); + return v; } -/// Smoothstep at 16 bits: 3t² − 2t³, the standard ease that removes the linear kink between cells. -constexpr uint16_t smoothstep16(uint16_t t) { - const uint32_t t1 = t; - const uint32_t t2 = (t1 * t1) >> 16; - const uint32_t t3 = (t2 * t1) >> 16; - const uint32_t v = 3u * t2 - 2u * t3; - return static_cast(v > 65535u ? 65535u : v); +/// Map a raw blend onto the tier's unsigned range: halve it (the extreme is ±one cell) and center +/// it on the midpoint. The clamp is a guard that only the 3D extreme past one cell reaches. +template +constexpr uint32_t out(int32_t raw) { + constexpr int32_t kCell = 1 << Tier::kFrac; + const int32_t v = kCell / 2 + (raw >> 1); + return static_cast(v < 0 ? 0 : (v > kCell - 1 ? kCell - 1 : v)); } -/// Linear interpolate a→b by t/65535. +/// Linear interpolate a→b by t/65536, unsigned 16-bit endpoints. The 16-bit tier's general lerp, +/// kept for callers that blend field values rather than gradients. constexpr uint16_t lerp16(uint16_t a, uint16_t b, uint16_t t) { const int32_t delta = static_cast(b) - static_cast(a); // 64-bit intermediate: `delta * t` reaches 4.29e9 against an INT32_MAX of 2.15e9, so the 32-bit - // form was signed overflow (undefined behaviour) on roughly a quarter of samples. It happened to + // form was signed overflow (undefined behavior) on roughly a quarter of samples. It happened to // produce the right low bits on wrap-around hardware, which is what kept it invisible. return static_cast(static_cast(a) + static_cast((static_cast(delta) * t) >> 16)); } +/// Octave sums narrow, and this is what widens them back. +/// +/// fbm divides its octave sum by the sum of the AMPLITUDES, which is what keeps the result inside +/// range. But octaves are near-independent, so their spread grows like the root of the sum of +/// squares rather than like the sum: dividing by the latter shrinks the field every octave added. +/// Measured on the shipped noise, 4 octaves spanned 54..199 of 0..255, so a caller stretching the +/// top of the field (a contrast window, a threshold) could never reach full brightness however it +/// was configured, and every fbm read flatter than the noise underneath it. +/// +/// The gain is that ratio per octave count, in 8.8 fixed, applied around the midpoint so the field +/// stays centered. One octave needs none and the series settles by about six. +inline constexpr uint16_t kFbmGain[9] = {256, 256, 343, 391, 417, 430, 437, 440, 442}; + +/// Re-widen an octave sum around the midpoint. `mid` is 128 at the 8-bit tier, 32768 at 16-bit. +constexpr int32_t fbmWiden(int32_t v, int32_t mid, uint8_t octaves) { + const uint16_t g = kFbmGain[octaves > 8 ? 8 : octaves]; + return mid + (((v - mid) * g) >> 8); +} + } // namespace noise -// 1D value noise: x is a 16.0 fixed coordinate (high byte = cell, low byte = position). +// 1D gradient noise: x is a 16.0 fixed coordinate (high byte = cell, low byte = position). constexpr uint8_t inoise8(uint32_t x) { - const uint32_t ix = x >> 8; - const uint8_t fx = noise::smoothstep(static_cast(x & 0xFF)); - return noise::lerp8(noise::hash(ix, 0, 0), noise::hash(ix + 1, 0, 0), fx); + return static_cast(noise::out(noise::raw(x, 0, 0))); } -// 2D value noise with bilinear interpolation over the 4 cell corners. +// 2D gradient noise over the 4 cell corners. constexpr uint8_t inoise8(uint32_t x, uint32_t y) { - const uint32_t ix = x >> 8, iy = y >> 8; - const uint8_t fx = noise::smoothstep(static_cast(x & 0xFF)); - const uint8_t fy = noise::smoothstep(static_cast(y & 0xFF)); - const uint8_t v00 = noise::hash(ix, iy, 0); - const uint8_t v10 = noise::hash(ix + 1, iy, 0); - const uint8_t v01 = noise::hash(ix, iy + 1, 0); - const uint8_t v11 = noise::hash(ix + 1, iy + 1, 0); - return noise::lerp8(noise::lerp8(v00, v10, fx), noise::lerp8(v01, v11, fx), fy); + return static_cast(noise::out(noise::raw(x, y, 0))); } -// 3D value noise with trilinear interpolation over the 8 cube corners. +// 3D gradient noise over the 8 cube corners. constexpr uint8_t inoise8(uint32_t x, uint32_t y, uint32_t z) { - const uint32_t ix = x >> 8, iy = y >> 8, iz = z >> 8; - const uint8_t fx = noise::smoothstep(static_cast(x & 0xFF)); - const uint8_t fy = noise::smoothstep(static_cast(y & 0xFF)); - const uint8_t fz = noise::smoothstep(static_cast(z & 0xFF)); - const uint8_t v000 = noise::hash(ix, iy, iz); - const uint8_t v100 = noise::hash(ix + 1, iy, iz); - const uint8_t v010 = noise::hash(ix, iy + 1, iz); - const uint8_t v110 = noise::hash(ix + 1, iy + 1, iz); - const uint8_t v001 = noise::hash(ix, iy, iz + 1); - const uint8_t v101 = noise::hash(ix + 1, iy, iz + 1); - const uint8_t v011 = noise::hash(ix, iy + 1, iz + 1); - const uint8_t v111 = noise::hash(ix + 1, iy + 1, iz + 1); - const uint8_t z0 = noise::lerp8(noise::lerp8(v000, v100, fx), noise::lerp8(v010, v110, fx), fy); - const uint8_t z1 = noise::lerp8(noise::lerp8(v001, v101, fx), noise::lerp8(v011, v111, fx), fy); - return noise::lerp8(z0, z1, fz); + return static_cast(noise::out(noise::raw(x, y, z))); } // --- 16-bit noise --------------------------------------------------------------------------- // -// The same value noise at 16 bits. math16.h states why the tier exists: 256 levels band visibly on -// a large fixture, so everything an effect writes against is 16-bit. The 8-bit forms above stay for -// the cases where a byte is what the caller needs anyway (a palette index, a brightness). +// The same gradient noise at 16 bits. math16.h states why the tier exists: 256 levels band visibly +// on a large fixture, so everything an effect writes against is 16-bit. The 8-bit forms above stay +// for the cases where a byte is what the caller needs anyway (a palette index, a brightness). -/// 1D value noise at 16 bits. `x` is 16.16 fixed point: the whole part selects the cell, the +/// 1D gradient noise at 16 bits. `x` is 16.16 fixed point: the whole part selects the cell, the /// fraction interpolates within it. constexpr uint16_t inoise16(uint32_t x) { - const uint32_t ix = x >> 16; - const uint16_t fx = noise::smoothstep16(static_cast(x & 0xFFFF)); - return noise::lerp16(noise::hash16(ix, 0, 0), noise::hash16(ix + 1, 0, 0), fx); + return static_cast(noise::out(noise::raw(x, 0, 0))); } -/// 2D value noise at 16 bits — the common case for a panel. +/// 2D gradient noise at 16 bits: the common case for a panel. constexpr uint16_t inoise16(uint32_t x, uint32_t y) { - const uint32_t ix = x >> 16, iy = y >> 16; - const uint16_t fx = noise::smoothstep16(static_cast(x & 0xFFFF)); - const uint16_t fy = noise::smoothstep16(static_cast(y & 0xFFFF)); - const uint16_t v00 = noise::hash16(ix, iy, 0); - const uint16_t v10 = noise::hash16(ix + 1, iy, 0); - const uint16_t v01 = noise::hash16(ix, iy + 1, 0); - const uint16_t v11 = noise::hash16(ix + 1, iy + 1, 0); - return noise::lerp16(noise::lerp16(v00, v10, fx), noise::lerp16(v01, v11, fx), fy); + return static_cast(noise::out(noise::raw(x, y, 0))); } -/// 3D value noise at 16 bits — z is the axis a 2D effect uses as time, so the field evolves in +/// 3D gradient noise at 16 bits. `z` is the axis a 2D effect uses as time, so the field evolves in /// place instead of scrolling past. constexpr uint16_t inoise16(uint32_t x, uint32_t y, uint32_t z) { - const uint32_t ix = x >> 16, iy = y >> 16, iz = z >> 16; - const uint16_t fx = noise::smoothstep16(static_cast(x & 0xFFFF)); - const uint16_t fy = noise::smoothstep16(static_cast(y & 0xFFFF)); - const uint16_t fz = noise::smoothstep16(static_cast(z & 0xFFFF)); - const uint16_t z0 = noise::lerp16( - noise::lerp16(noise::hash16(ix, iy, iz), noise::hash16(ix + 1, iy, iz), fx), - noise::lerp16(noise::hash16(ix, iy + 1, iz), noise::hash16(ix + 1, iy + 1, iz), fx), fy); - const uint16_t z1 = noise::lerp16( - noise::lerp16(noise::hash16(ix, iy, iz + 1), noise::hash16(ix + 1, iy, iz + 1), fx), - noise::lerp16(noise::hash16(ix, iy + 1, iz + 1), noise::hash16(ix + 1, iy + 1, iz + 1), fx), fy); - return noise::lerp16(z0, z1, fz); + return static_cast(noise::out(noise::raw(x, y, z))); } /// Fractal Brownian motion at 16 bits: `octaves` samples at doubling frequency, halving amplitude. inline uint16_t fbm16(uint32_t x, uint32_t y, uint8_t octaves) { if (octaves == 0) return 32768; // no octaves: flat mid-field // The sum is 64-bit so each octave keeps its full 16 bits. Shifting each sample down by 8 to fit - // a 32-bit accumulator made the result 8-bit wearing a 16-bit type — measured at 195 distinct - // values over 20,000 samples, low byte never set — which is exactly the banding this tier is for. + // a 32-bit accumulator made the result 8-bit wearing a 16-bit type: measured at 195 distinct + // values over 20,000 samples, low byte never set: which is exactly the banding this tier is for. uint64_t sum = 0; uint32_t norm = 0, amp = 32768; for (uint8_t o = 0; o < octaves && amp > 0; o++) { @@ -170,29 +243,31 @@ inline uint16_t fbm16(uint32_t x, uint32_t y, uint8_t octaves) { x <<= 1; y <<= 1; // double the frequency amp >>= 1; // halve the contribution } - return norm ? static_cast(sum / norm) : 32768; + if (!norm) return 32768; + const int32_t widened = noise::fbmWiden(static_cast(sum / norm), 32768, octaves); + return static_cast(widened < 0 ? 0 : (widened > 65535 ? 65535 : widened)); } // --- Field composition ------------------------------------------------------------------------ // -// One noise sample is a smooth blur; the looks people actually recognise come from COMPOSING +// One noise sample is a smooth blur; the looks people actually recognize come from COMPOSING // samples. Three standard compositions cover most of it, and each is a few lines over `inoise8` // rather than a new field generator: // -// fbm — sum octaves at doubling frequency and halving amplitude. Turns the blur into +// fbm : sum octaves at doubling frequency and halving amplitude. Turns the blur into // cloud/terrain/smoke structure: large shapes with fine detail on them. -// turbulence — the same sum over |noise|, whose creases read as billows and flame. -// warp — sample noise at a coordinate that noise itself displaced (domain warping). This +// turbulence: the same sum over |noise|, whose creases read as billows and flame. +// warp : sample noise at a coordinate that noise itself displaced (domain warping). This // is the one that produces the flowing, marbled, liquid look; Iñigo Quilez's // "warping" article is the canonical description. // // Cost is stated per call because it is the thing that decides whether an effect fits: each // octave is one `inoise8`, so fbm(3) costs three samples, and warp costs its own samples PLUS the -// field it then samples. On a large fixture that multiplies by pixel count — see the per-target +// field it then samples. On a large fixture that multiplies by pixel count: see the per-target // budget in the power-function docs before reaching for octaves on a 128x128 wall. /// Fractal Brownian motion: `octaves` samples at doubling frequency, halving amplitude, returned -/// normalised to 0..255. octaves=1 is plain noise; 3-4 is the usual cloud look. +/// normalized to 0..255. octaves=1 is plain noise; 3-4 is the usual cloud look. inline uint8_t fbm8(uint32_t x, uint32_t y, uint8_t octaves) { if (octaves == 0) return 128; // no octaves: flat mid-field uint32_t sum = 0, norm = 0, amp = 128; @@ -202,10 +277,12 @@ inline uint8_t fbm8(uint32_t x, uint32_t y, uint8_t octaves) { x <<= 1; y <<= 1; // double the frequency amp >>= 1; // halve the contribution } - return static_cast(norm ? sum / norm : 128); + if (!norm) return 128; + const int32_t widened = noise::fbmWiden(static_cast(sum / norm), 128, octaves); + return static_cast(widened < 0 ? 0 : (widened > 255 ? 255 : widened)); } -/// 3D fbm — the same sum with a z axis, so a 2D effect can use z as time for a field that evolves +/// 3D fbm: the same sum with a z axis, so a 2D effect can use z as time for a field that evolves /// in place rather than scrolling past. inline uint8_t fbm8(uint32_t x, uint32_t y, uint32_t z, uint8_t octaves) { if (octaves == 0) return 128; @@ -216,7 +293,9 @@ inline uint8_t fbm8(uint32_t x, uint32_t y, uint32_t z, uint8_t octaves) { x <<= 1; y <<= 1; z <<= 1; amp >>= 1; } - return static_cast(norm ? sum / norm : 128); + if (!norm) return 128; + const int32_t widened = noise::fbmWiden(static_cast(sum / norm), 128, octaves); + return static_cast(widened < 0 ? 0 : (widened > 255 ? 255 : widened)); } /// Turbulence: fbm over |noise - 128|, which creases the field where it crosses the midpoint. The diff --git a/src/core/oscillators.h b/src/core/oscillators.h new file mode 100644 index 00000000..00fbd650 --- /dev/null +++ b/src/core/oscillators.h @@ -0,0 +1,133 @@ +#pragma once + +#include "core/math16.h" // BeatPhase, sin16, triwave16, angle16 + +#include + +// An oscillator bank: N independent low-frequency oscillators advanced once per frame and read as +// often as an effect likes. +// +// Every animated quantity in a generative field is an oscillator: where a shape sits, how far a +// coordinate is displaced, how fast a layer rotates, how bright it is this instant. Written by +// hand that is a BeatPhase member, a waveform call and a range map per quantity, which is why +// effects that animate several things at once grow a row of near-identical members and a block of +// arithmetic in tick(). The bank is that pattern owned once: declare how many oscillators, set each +// one's rate, waveform and output range, advance the bank, then read. +// +// Two properties make a bank different from N loose oscillators, and both matter for the shaders +// this exists for. Advancing is ONE pass, so cost is per frame and not per pixel: a pixel loop +// reads values that are already computed, which is the whole point when a field samples the same +// oscillator 16,384 times. And phases are held together, so oscillators keep their relationships: +// two layers at the same rate a quarter-cycle apart stay a quarter-cycle apart for as long as the +// device runs, which is what makes a composition read as deliberate rather than as drift. +// +// Standard shapes only, all from math16: sine, triangle, sawtooth, square. Anything richer is a +// COMBINATION of oscillators (that is the vocabulary Stefan Petrick's shaders are written in), not +// a new waveform here. + +namespace mm { + +/// The shape an oscillator traces over its cycle. +enum class Wave : uint8_t { + Sine, ///< the default: smooth, no corners, the shape most motion wants + Triangle, ///< linear out and back; sharper turns than a sine at the same rate + Saw, ///< ramp up then jump back: rotation, scrolling, anything that only goes one way + Square, ///< low half the cycle, high the other: switching, strobing, hard alternation +}; + +/// One oscillator's settings. `rate` is BPM-like (cycles per minute), so 60 is one cycle a second +/// and 0 holds the phase still. `low`/`high` are the output range, inclusive, and may be inverted +/// (low > high) to run the shape backwards. `phaseOffset` is an angle16 added at read time, so two +/// oscillators can share a rate and sit a fixed fraction of a cycle apart: 16384 is a quarter turn. +struct Oscillator { + uint16_t rate = 0; + int32_t low = 0; + int32_t high = 65535; + angle16 phaseOffset = 0; + Wave wave = Wave::Sine; +}; + +/// A fixed-size bank of oscillators. `N` is a compile-time count because an effect knows how many +/// quantities it animates, and a fixed member array costs no allocation and no indirection. +/// +/// Usage, once per frame: `bank.advance(elapsed())`, then `bank.value(i)` wherever the value is +/// needed, including inside a pixel loop. Configure with `set(i, {...})` in prepare() or whenever a +/// control changes; a rate change takes effect from that frame without jumping the phase, which is +/// what live reconfiguration requires. +template +class OscillatorBank { +public: + static constexpr uint8_t kCount = N; + + /// Configure oscillator `i`. Out-of-range indices are ignored rather than trapping: an effect + /// driving the bank from a control must not be able to crash the device with a bad index. + void set(uint8_t i, const Oscillator& osc) { + if (i < N) osc_[i] = osc; + } + + /// Read one oscillator's settings, for a caller that adjusts a single field. + const Oscillator& get(uint8_t i) const { return osc_[i < N ? i : N - 1]; } + + /// Advance every oscillator by this frame's elapsed time. Call once per frame, before reading. + /// Each phase accumulates its own dt*rate numerator, so a rate of 0 holds and a rate changed + /// mid-run continues from where the phase stands (BeatPhase owns the why). + void advance(uint32_t elapsedMs) { + for (uint8_t i = 0; i < N; i++) phase_[i].advance(elapsedMs, osc_[i].rate); + } + + /// Oscillator `i`'s current phase as an angle16, offset included. The raw cycle position, for a + /// caller that wants to drive something other than the configured range. + angle16 phase(uint8_t i) const { + if (i >= N) return 0; + return static_cast(phase_[i].phase(65536) + osc_[i].phaseOffset); + } + + /// Oscillator `i`'s current value, mapped into its configured range. Cheap enough to call per + /// pixel, though an effect whose value is constant across the frame should hoist it. + int32_t value(uint8_t i) const { + if (i >= N) return 0; + return map(osc_[i], unit(osc_[i].wave, phase(i))); + } + + /// Oscillator `i`'s value as a 0..65535 unit position, ignoring the configured range. For a + /// caller doing its own mapping, and the form `value` is built on. + uint16_t unitValue(uint8_t i) const { + if (i >= N) return 0; + return unit(osc_[i].wave, phase(i)); + } + + /// Restart every phase at zero, keeping the configuration. For an effect whose composition must + /// begin from a known state. + void reset() { + for (uint8_t i = 0; i < N; i++) phase_[i].reset(); + } + +private: + /// The waveform, as a 0..65535 position through the cycle. + static uint16_t unit(Wave wave, angle16 theta) { + switch (wave) { + // sin16 is signed around zero; shift it into the unsigned range the mapping expects. + case Wave::Sine: return static_cast(sin16(theta) + 32768); + case Wave::Triangle: return triwave16(theta); + case Wave::Saw: return theta; + case Wave::Square: return theta < 32768 ? 0 : 65535; + } + return 0; + } + + /// Map a unit position onto [low, high], inclusive at BOTH ends. Dividing by 65535 rather than + /// shifting by 16 is the difference between an oscillator that reaches its stated maximum and + /// one that stops one step short of it forever: an effect sweeping a hue to 255 would never + /// arrive. 64-bit intermediate, because a range spanning the full int32 overflows a 32-bit + /// product, and a caller mapping onto pixel coordinates times a scale gets there sooner than it + /// looks. + static int32_t map(const Oscillator& osc, uint16_t u) { + const int64_t span = static_cast(osc.high) - osc.low; + return static_cast(osc.low + (span * u) / 65535); + } + + Oscillator osc_[N]; + BeatPhase phase_[N]; +}; + +} // namespace mm diff --git a/src/light/drivers/Drivers.h b/src/light/drivers/Drivers.h index b202c927..d53d45b4 100644 --- a/src/light/drivers/Drivers.h +++ b/src/light/drivers/Drivers.h @@ -451,24 +451,29 @@ class Drivers : public MoonModule { std::strcmp(controlName, "brightness") == 0) { rebuildAllCorrections(); } - // The relay follows `on`, and is written HERE rather than per frame: switching power is a - // state change, not a per-frame concern, and a mechanical relay would wear out doing it at - // frame rate (the Dig-2-Go's is solid-state, but the rule holds for the ones that are not). - // Also written when the pin itself changes, so entering it on a live device closes the relay - // straight away instead of at the next toggle. - if (std::strcmp(controlName, "on") == 0 || std::strcmp(controlName, "relayPins") == 0) { + // The relay follows `on` and brightness, and is written HERE rather than per frame: + // switching power is a state change, not a per-frame concern, and a mechanical relay would + // wear out doing it at frame rate (the Dig-2-Go's is solid-state, but the rule holds for the + // ones that are not). Also written when the pin itself changes, so entering it on a live + // device closes the relay straight away instead of at the next toggle. A brightness drag + // costs at most one edge, at the zero boundary: the level only changes there. + if (std::strcmp(controlName, "on") == 0 || std::strcmp(controlName, "brightness") == 0 || + std::strcmp(controlName, "relayPins") == 0) { applyRelay(); } } - /// Drive the power relay to match `on`. + /// Drive the power relay: closed while `on` and brightness is above zero, open otherwise. /// /// Some boards gate the LED supply behind a relay (the QuinLED Dig-2-Go's GPIO 12 is its "LED /// Relay enable pin"), so the data line can be perfectly correct and the strip stay dark. The /// relay belongs to `on` rather than to a driver or a service: it is the physical expression of /// master power, and `on` is the one control the UI, the WLED bridge, MQTT and OSC all already /// write. A second on/off would be a split brain, with nothing able to say which one meant off. + /// Brightness 0 opens it too: a strip at zero draws its idle current for nothing, and a slider + /// at 0 is how a WLED-style client says "off" without touching `on`. void applyRelay() { + const bool closed = on && brightness > 0; // Release a pin the user just cleared, or it stays asserted forever on a GPIO nothing owns. // The same reasoning InfraredService applies when its pin is unset. if (!relayPins[0]) { @@ -497,7 +502,7 @@ class Drivers : public MoonModule { for (uint8_t i = 0; i < n; i++) { // An input-only pin (classic ESP32 34-39) refuses the write, and the seam says so: a // relay wired to one would otherwise look configured and do nothing. - if (!platform::gpioWrite(static_cast(pins[i]), on)) + if (!platform::gpioWrite(static_cast(pins[i]), closed)) setStatus("relay pin cannot drive an output", Severity::Warning); lastRelayPins_[i] = static_cast(pins[i]); } diff --git a/src/light/effects/AuroraEffect.h b/src/light/effects/AuroraEffect.h new file mode 100644 index 00000000..a8f12854 --- /dev/null +++ b/src/light/effects/AuroraEffect.h @@ -0,0 +1,205 @@ +#pragma once + +#include "core/math16.h" // kaleido, angle16 +#include "core/noise.h" // fbm8: the field each layer samples +#include "core/oscillators.h" // OscillatorBank: every layer's motion +#include "light/effects/EffectBase.h" +#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed + +namespace mm { + +// Aurora: several noise fields, each drifting on its own clock, read in polar coordinates and +// composited into light. +// +// This is the shader idiom rather than a picture of anything: no aurora is simulated. Layers of the +// same field, sampled at different scales and moved by different oscillators, are combined, and the +// interference between them is what reads as curtains of light folding through each other. Nothing +// here is specific to auroras, which is the point: it is the vocabulary this library exists to +// provide, and the effect is a composition in it. +// +// Four pieces, each a power function: +// +// - `PolarLut` gives every pixel its angle and radius once, so the field is addressed around the +// center rather than across the grid, and the address is not recomputed per frame. +// - `OscillatorBank` drives the motion. Each layer has its own drift, its own breathing scale and +// its own rotation, and because the bank holds their phases together the layers keep their +// relationships instead of sliding into each other over an evening. +// - `fbm8` over gradient noise is the field itself: octaves of noise, so each layer has both a +// broad shape and fine structure on it. +// - A contrast window then decides what is visible. This is what separates a shader from a blur: +// most of the field is pushed to black and only the top of it lights, so the result reads as +// distinct curtains rather than as an evenly cloudy panel. +// +// The layers are combined by taking the strongest at each pixel, and the pixel's color comes from +// WHICH layer won and how far it exceeded the window, read through the palette. So the palette +// controls the mood and the layers control the structure, which is the split that makes the effect +// worth handing someone: every palette gives a different aurora and none of them look wrong. +// +// Cost: one fbm per layer per pixel, so `layers` is the cost knob and `octaves` multiplies it. The +// polar address is a table read. Targets in performance.md. +// @card AuroraEffect.png +/// Effect: layered noise curtains in polar coordinates, each layer on its own oscillators. +class AuroraEffect : public EffectBase { +public: + const char* tags() const override { return "💫🖌️"; } // power-function showcase + Dim dimensions() const override { return Dim::D2; } // writes the z=0 slice; extrude fills z + + static constexpr uint8_t kMaxLayers = 4; + + uint8_t speed = 30; // master rate: every layer's motion scales from this + uint8_t scale = 40; // noise cells across the grid: low = broad curtains, high = fine detail + uint8_t layers = 3; // how many fields are composited, and the main cost knob + uint8_t warp = 60; // how far the field displaces its own sample angle + uint8_t twist = 40; // how much the radius shears the angle, giving the curtains their lean + uint8_t segments = 1; // kaleidoscope fold; 1 leaves the composition unfolded + uint8_t contrast = 140; // the visibility window: higher = fewer, sharper curtains + uint8_t octaves = 2; // detail within each layer, multiplying the cost knob + + /// Read the polar address from a table instead of computing it per pixel (light/polar.h). + bool usePolarTable = true; + bool widePolarTable = false; + + void defineControls() override { + controls_.addControl("speed", speed, 0, 120); + controls_.addControl("scale", scale, 1, 255); + controls_.addControl("layers", layers, 1, kMaxLayers); + controls_.addControl("warp", warp, 0, 255); + controls_.addControl("twist", twist, 0, 255); + controls_.addControl("segments", segments, 1, 16); + controls_.addControl("contrast", contrast, 0, 255); + controls_.addControl("octaves", octaves, 1, 4); + controls_.addControl("polarTable", usePolarTable); + controls_.addControl("polarTable16", widePolarTable); + } + + void prepare() override { + // The polar address is built here, not in tick(): prepare() is where a module builds state + // and where allocation is allowed, and it runs again on every resize and control change, so + // the table is always current without the render path ever allocating. + if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); + else lut_.release(); + } + + void tick() MM_NONBLOCKING override { + const draw::Canvas cv = canvas(); + const lengthType w = width(), h = height(); + const uint8_t n = layers < 1 ? 1 : (layers > kMaxLayers ? kMaxLayers : layers); + + // Each layer gets three oscillators: how far it has drifted, how its scale breathes, and how + // far it has rotated. Rates are deliberately unequal and not multiples of each other, so the + // layers drift in and out of alignment for a long time before repeating. + for (uint8_t i = 0; i < kMaxLayers; i++) { + const uint16_t rate = static_cast(speed) * (7 + i * 5) / 10; + bank_.set(static_cast(i * 3 + 0), + {.rate = rate, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); + bank_.set(static_cast(i * 3 + 1), + {.rate = static_cast(rate / 3), .low = 192, .high = 320, + .phaseOffset = static_cast(i * 12000), .wave = Wave::Sine}); + bank_.set(static_cast(i * 3 + 2), + {.rate = static_cast(rate / 5), .low = -8192, .high = 8192, + .phaseOffset = static_cast(i * 20000), .wave = Wave::Sine}); + } + bank_.advance(elapsed()); + + const bool table = lut_.ready(); + const int32_t cx = w / 2, cy = h / 2; + + // Hoist everything constant across the frame: the pixel loop should read, not compute. + uint32_t drift[kMaxLayers]; + uint32_t layerScale[kMaxLayers]; + int32_t rotate[kMaxLayers]; + for (uint8_t i = 0; i < n; i++) { + drift[i] = bank_.unitValue(static_cast(i * 3 + 0)); + layerScale[i] = static_cast(bank_.value(static_cast(i * 3 + 1))) * scale / 256u; + rotate[i] = bank_.value(static_cast(i * 3 + 2)); + if (layerScale[i] == 0) layerScale[i] = 1; + } + + // The window sits at `contrast` of the way up the field's own range, which the previous + // frame measured. The field drifts slowly, so last frame's range is this frame's to within a + // step, and the alternative (a pass to measure, then a pass to draw) doubles the cost. + // Anchored on the measured LOW, not the midpoint, so contrast 0 lights the whole field and + // contrast 255 leaves only its peaks. + const uint8_t lowEnd = floor_ < peak_ ? floor_ : static_cast(peak_ > 8 ? peak_ - 8 : 0); + const uint8_t threshold = static_cast( + lowEnd + (static_cast(peak_ - lowEnd) * contrast) / 272u); + uint8_t frameMax = 0, frameMin = 255; + + std::size_t idx = 0; + for (lengthType y = 0; y < h; y++) { + for (lengthType x = 0; x < w; x++, idx++) { + angle16 baseAngle; + uint32_t r; + if (table) { + baseAngle = lut_.angle(idx); + r = lut_.radiusPixels(idx); + } else { + const int32_t dx = static_cast(x) - cx; + const int32_t dy = static_cast(y) - cy; + baseAngle = atan16(dy, dx); + r = dist16(dx, dy); + } + + // The strongest layer at this pixel wins, and how far it exceeds the visibility + // window is the brightness. Taking the maximum rather than a sum is what keeps the + // curtains distinct: summing would average them into an even haze. + uint8_t best = 0; + uint8_t winner = 0; + for (uint8_t i = 0; i < n; i++) { + // Each layer leans its own way and turns at its own rate. + angle16 a = static_cast(baseAngle + (r * twist) + rotate[i]); + a = kaleido(a, segments); + + const uint32_t fx = (static_cast(a) >> 6) * layerScale[i] / 16u; + const uint32_t fy = (r * layerScale[i]) + (drift[i] >> 6) + i * 4096u; + + // The field displaces its own sample angle, which is what makes a curtain fold + // over itself rather than merely sweep past. + const uint8_t v = warp > 0 ? warp8(fx, fy, static_cast(warp) * 4, octaves) + : fbm8(fx, fy, octaves); + if (v > best) { best = v; winner = i; } + } + + // The visibility window: everything below the threshold is dark, and what is above + // it is stretched back over the full range, so a small part of the field becomes the + // whole of the light. This is the control that decides curtains against cloud. + // + // The window is placed against the field's OWN range, measured on the previous + // frame, not against 0..255. A field of noise rarely reaches either end on a small + // grid, so a fixed threshold left the brightest curtain at two thirds of full and no + // setting could fix it. Tracking the range means `contrast` says what fraction of + // the field lights, on any grid, at any octave count, in any palette. + uint8_t bri = 0; + if (best > threshold) { + const uint32_t span = peak_ > threshold ? peak_ - threshold : 1u; + const uint32_t over = static_cast(best - threshold) * 255u / span; + bri = static_cast(over > 255u ? 255u : over); + } + if (best > frameMax) frameMax = best; + if (best < frameMin) frameMin = best; + + // Which layer won picks the region of the palette: the layers stay separable + // colors rather than one averaged hue. Nothing else enters the index. An earlier + // version added a term from the field's own value, which moved the hue as the + // brightness moved and wrapped past the end of the palette, so a brightening + // curtain jumped from one end of it to the other. Brightness belongs in the + // brightness. + const uint8_t index = static_cast((winner * 255u) / n); + draw::pixel(cv, {x, y, 0}, colorFromPalette(*Palettes::active(), index, bri)); + } + } + + // Carry this frame's range into the next one's window. Eased rather than assigned, so a + // single bright frame cannot make the whole composition flinch. + peak_ = static_cast((peak_ * 7u + (frameMax < 32 ? 32 : frameMax)) / 8u); + floor_ = static_cast((floor_ * 7u + frameMin) / 8u); + } + +private: + PolarLut lut_{*this}; + OscillatorBank bank_; + uint8_t peak_ = 200; ///< the field's high water mark, eased per frame + uint8_t floor_ = 40; ///< and its low, so the window spans what is there +}; + +} // namespace mm diff --git a/src/light/effects/EffectBase.h b/src/light/effects/EffectBase.h index c6391788..cf7dd109 100644 --- a/src/light/effects/EffectBase.h +++ b/src/light/effects/EffectBase.h @@ -144,7 +144,7 @@ class EffectBase : public MoonModule { #include "light/draw.h" // draw::pixel / fill / line / fade / blur — write pixels by coordinate #include "light/Palette.h" // colorFromPalette, Palettes::active — the palette system #include "core/math8.h" // beat8 / beatsin8 / sin8 / random8 — the integer animation helpers -#include "core/noise.h" // inoise8 — the shared value-noise field +#include "core/noise.h" // inoise8: the shared gradient-noise field #include "core/color.h" // RGB #include "core/crc.h" // crc16 — grid/state fingerprints (stasis detection) #include "core/ScratchBuffer.h" // ScratchBuffer — self-sizing scratch memory for stateful effects diff --git a/src/light/effects/Noise2DEffect.h b/src/light/effects/Noise2DEffect.h index 3ab0071a..3b026f68 100644 --- a/src/light/effects/Noise2DEffect.h +++ b/src/light/effects/Noise2DEffect.h @@ -4,7 +4,7 @@ namespace mm { -// Noise 2D: a smoothly drifting value-noise field. Each (x,y) pixel reads a 3D noise sample whose +// Noise 2D: a smoothly drifting gradient-noise field. Each (x,y) pixel reads a 3D noise sample whose // X/Y coordinates are the grid position scaled by `scale` (larger scale = finer, more detailed // noise; smaller = broad, smooth blobs) and whose Z coordinate is time, so the whole field flows / // morphs over the frames. The 0..255 noise value indexes the active palette directly, giving the @@ -18,11 +18,11 @@ namespace mm { // 1 — the division can never be by zero. // // Prior art: MoonLight's Noise2D effect (E_MoonModules / MoonModules), itself in the WLED -// noise-effect lineage (FastLED inoise8 — Perlin/value noise, Mark Kriegsman / Ken Perlin). The +// noise-effect lineage (FastLED inoise8, Perlin noise, Mark Kriegsman / Ken Perlin). The // per-pixel coordinate-scale + time-on-Z animation and the direct palette indexing are reproduced // exactly here, written fresh on EffectBase + the shared draw / noise primitives. // Author: WLED (Noise 2D) — https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h -/// 2D value-noise effect. +/// 2D gradient-noise effect. class Noise2DEffect : public EffectBase { public: const char* tags() const override { return "💫🌙🐙"; } // MoonLight origin · MoonModules · WLED diff --git a/src/light/effects/NoiseEffect.h b/src/light/effects/NoiseEffect.h index 90d3d0ee..210b2143 100644 --- a/src/light/effects/NoiseEffect.h +++ b/src/light/effects/NoiseEffect.h @@ -6,7 +6,7 @@ namespace mm { // Author: FastLED inoise field (Mark Kriegsman) -/// Smooth animated value-noise effect (3D on volumetric layouts). +/// Smooth animated gradient-noise effect (3D on volumetric layouts). /// @card NoiseEffect.gif class NoiseEffect : public EffectBase { public: @@ -69,8 +69,8 @@ class NoiseEffect : public EffectBase { private: BeatPhase phase_; - // The value-noise field itself (hash + smoothstep + bi/trilinear interp) is the shared - // inoise8 in core/noise.h — this effect just scales coordinates into it and colors the + // The gradient-noise field itself (lattice hash, gradient dot products, quintic fade, bi- or + // trilinear blend) is the shared inoise8 in core/noise.h: this effect just scales coordinates into it and colors the // result through the palette. }; diff --git a/src/light/effects/NoiseMeterEffect.h b/src/light/effects/NoiseMeterEffect.h index cdcd4c36..5d79b645 100644 --- a/src/light/effects/NoiseMeterEffect.h +++ b/src/light/effects/NoiseMeterEffect.h @@ -5,7 +5,7 @@ namespace mm { // Noise Meter: a vertical VU column whose height tracks the overall sound level and whose color is a -// scrolling 2D value-noise field, so a loud moment fills the panel from the bottom up with a drifting, +// scrolling 2D gradient-noise field, so a loud moment fills the panel from the bottom up with a drifting, // organic gradient instead of a flat bar. Each frame the buffer fades a little (motion trail), the // audio level (scaled by `width`) sets how many rows light up from the bottom, and for each lit row a // noise sample — taken from a field that both scrolls (the aux0/aux1 phase accumulators) and is diff --git a/src/light/effects/PolarNoiseEffect.h b/src/light/effects/PolarNoiseEffect.h index 310d0623..caa490f4 100644 --- a/src/light/effects/PolarNoiseEffect.h +++ b/src/light/effects/PolarNoiseEffect.h @@ -1,8 +1,10 @@ #pragma once -#include "core/math16.h" // atan16, dist16, kaleido, BeatPhase +#include "core/math16.h" // kaleido, angle16 #include "core/noise.h" // fbm8, warp8 +#include "core/oscillators.h" // OscillatorBank: the drift, as an oscillator #include "light/effects/EffectBase.h" +#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { @@ -12,14 +14,17 @@ namespace mm { // texture scrolling past the panel, but a field that seems to turn and breathe inside it. Three // power functions compose to get there, and the effect itself is mostly parameter choices: // -// - `atan16`/`dist16` address the grid by ANGLE and RADIUS instead of x and y, which is what -// makes the motion rotate around the centre rather than slide across it. +// - `PolarLut` addresses the grid by ANGLE and RADIUS instead of x and y, which is what makes +// the motion rotate around the center rather than slide across it. The address is the same one +// `atan16` and `dist16` compute, read from a table: it does not change between frames, and +// computing it per pixel measured 39% of this effect's frame on an ESP32-S3. // - `warp8` displaces the sample coordinate by another noise field, so the field flows and // marbles instead of merely drifting (Quilez's domain warping). // - `kaleido` folds the angle into n mirrored wedges, turning the field into a mandala with a // single modulo — the symmetry is free because it happens before the field is ever sampled. // // Cost: `warp` is 2 noise samples plus its inner fbm, so at octaves=2 this is ~4 samples/pixel. +// The polar address is a table read rather than an `atan16` plus a `dist16`. // That is a rich-field effect, appropriate on small and medium fixtures and on desktop; on a large // wall drop `octaves` to 1 (or `warp` to 0) and it degrades to a plain polar noise that still // reads well. The controls are deliberately the cost knobs, not just the look knobs. @@ -40,6 +45,18 @@ class PolarNoiseEffect : public EffectBase { uint8_t octaves = 2; // fbm octaves — the main cost knob uint8_t twist = 30; // how much the radius shears the angle, giving the field a spiral set + /// Read the polar address from a table rather than computing it per pixel. On by default: it is + /// the same address either way. Turning it off trades frame time for the two bytes per pixel the + /// table costs, which is the tradeoff on a device with a large grid and little memory, and it is + /// how the fallback path stays exercised rather than being code nothing ever runs. + bool usePolarTable = true; + + /// Hold the polar address at full 16-bit precision, at twice the memory. The 8-bit default + /// quantizes the angle to 256 steps, which a noise field samples through without showing it; + /// an effect whose look depends on a fine angle (a slow rotation, a palette read straight from + /// the angle) turns this on. + bool widePolarTable = false; + void defineControls() override { controls_.addControl("bpm", bpm, 0, 60); controls_.addControl("scale", scale, 1, 255); @@ -47,27 +64,53 @@ class PolarNoiseEffect : public EffectBase { controls_.addControl("warp", warp, 0, 255); controls_.addControl("octaves", octaves, 1, 4); controls_.addControl("twist", twist, 0, 255); + // The address tradeoff, as controls because it is the user's to make: the table costs 2 + // bytes per pixel (4 when wide) and buys back the per-pixel atan16 and dist16. + controls_.addControl("polarTable", usePolarTable); + controls_.addControl("polarTable16", widePolarTable); } + void prepare() override { + // The polar address is built here, not in tick(): prepare() is where a module builds state + // and where allocation is allowed, and it runs again on every resize and control change, so + // the table is always current without the render path ever allocating. + if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); + else lut_.release(); + } + void tick() MM_NONBLOCKING override { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(); - phase_.advance(elapsed(), bpm); - const uint32_t t = phase_.phase(65536); + // The drift is an oscillator: a sawtooth that only ever moves forward, which is what makes + // the field breathe outward rather than rock back and forth. + drift_.set(0, {.rate = bpm, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); + drift_.advance(elapsed()); + const uint32_t t = drift_.unitValue(0); - // Centre in whole pixels; the field is smooth so sub-pixel centring buys nothing here. + // Build the address table if the grid changed; a rebuild is the only frame that pays for it. + // If it cannot be allocated the effect still renders, computing the address per pixel. + const bool table = lut_.ready(); const int32_t cx = w / 2, cy = h / 2; + std::size_t i = 0; for (lengthType y = 0; y < h; y++) { - for (lengthType x = 0; x < w; x++) { - const int32_t dx = static_cast(x) - cx; - const int32_t dy = static_cast(y) - cy; - - // Polar address. The twist term shears the angle by the radius, which is what turns - // concentric rings into spiral arms. - const uint32_t r = dist16(dx, dy); - angle16 a = atan16(dy, dx); + for (lengthType x = 0; x < w; x++, i++) { + // The polar address, and the radius in the pixel units the field is scaled in. + angle16 a; + uint32_t r; + if (table) { + a = lut_.angle(i); + r = lut_.radiusPixels(i); + } else { + const int32_t dx = static_cast(x) - cx; + const int32_t dy = static_cast(y) - cy; + a = atan16(dy, dx); + r = dist16(dx, dy); + } + + // The twist shears the angle by the radius, which is what turns concentric rings + // into spiral arms. a = static_cast(a + (r * twist)); // Fold into wedges BEFORE sampling, so the symmetry costs one modulo rather than a @@ -75,7 +118,7 @@ class PolarNoiseEffect : public EffectBase { a = kaleido(a, segments); // Sample the field in (angle, radius) space: the angle drives one axis and the - // radius the other, so the field wraps around the centre. Time moves the radius + // radius the other, so the field wraps around the center. Time moves the radius // axis, which reads as the pattern breathing outward. const uint32_t fx = (static_cast(a) >> 6) * scale / 16u; const uint32_t fy = (r * scale) + (t >> 6); @@ -90,7 +133,8 @@ class PolarNoiseEffect : public EffectBase { } private: - BeatPhase phase_; + PolarLut lut_{*this}; + OscillatorBank<1> drift_; }; } // namespace mm diff --git a/src/light/effects/RingsEffect.h b/src/light/effects/RingsEffect.h index 5dc61c9c..060ff166 100644 --- a/src/light/effects/RingsEffect.h +++ b/src/light/effects/RingsEffect.h @@ -82,8 +82,13 @@ class RingsEffect : public EffectBase { const int32_t dx = static_cast(x) - cx_[i]; const int32_t dy = static_cast(y) - cy_[i]; // Kept wide for the same reason as maxR: clamping the per-pixel distance to a - // byte made every light past 255 from a ripple's centre read as exactly 255, so + // byte made every light past 255 from a ripple's center read as exactly 255, so // the ring never appeared out there at all. + // + // Computed rather than read from a PolarLut, unlike the other radial effects: + // this distance is from a RIPPLE's center, not the grid's, and each ripple moves + // and respawns. A table per ripple would cost N times the memory and a rebuild + // whenever one respawns, which is more than the dist16 it would save. const uint32_t d = dist16(dx, dy); int32_t diff = static_cast(d) - static_cast(radius_[i]); if (diff < 0) diff = -diff; // stays int32: narrowing truncated large distances diff --git a/src/light/effects/SpiralEffect.h b/src/light/effects/SpiralEffect.h index 13f284d6..52de44d0 100644 --- a/src/light/effects/SpiralEffect.h +++ b/src/light/effects/SpiralEffect.h @@ -1,7 +1,8 @@ #pragma once -#include "core/math16.h" // BeatPhase — the shared BPM accumulator +#include "core/math16.h" // BeatPhase: the shared BPM accumulator #include "light/effects/EffectBase.h" +#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { @@ -18,12 +19,28 @@ class SpiralEffect : public EffectBase { uint8_t twist = 4; uint8_t hue_shift = 0; + /// Read the polar address from a table instead of computing it per pixel (light/polar.h). It + /// costs 2 bytes per pixel, 4 when wide, and the effect falls back to computing the address + /// when the device cannot spare them. + bool usePolarTable = true; + bool widePolarTable = false; + void defineControls() override { controls_.addControl("bpm", bpm, 1, 255); controls_.addControl("twist", twist, 1, 255); controls_.addControl("hue_shift", hue_shift, 0, 255); + controls_.addControl("polarTable", usePolarTable); + controls_.addControl("polarTable16", widePolarTable); + } + void prepare() override { + // The polar address is built here, not in tick(): prepare() is where a module builds state + // and where allocation is allowed, and it runs again on every resize and control change, so + // the table is always current without the render path ever allocating. + if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); + else lut_.release(); } + void tick() MM_NONBLOCKING override { uint8_t* buf = buffer(); lengthType w = width(); @@ -42,16 +59,27 @@ class SpiralEffect : public EffectBase { int16_t cx = static_cast(w >> 1); int16_t cy = static_cast(h >> 1); + // The polar address is the same every frame, so it is read from a table; if the device + // cannot spare the memory the effect computes it per pixel and looks the same. + const bool table = lut_.ready(); + + std::size_t i = 0; for (lengthType y = 0; y < h; y++) { int16_t dy = static_cast(y) - cy; uint8_t* row = buf + static_cast(y) * static_cast(w) * cpl; - for (lengthType x = 0; x < w; x++) { + for (lengthType x = 0; x < w; x++, i++) { int16_t dx = static_cast(x) - cx; - // 16-bit polar: atan16 resolves the sweep smoothly where the 8-bit form stepped, and - // dist16 is a TRUE radius where dist8 approximated an octagon (visible corners on a - // large panel). Both are taken down to 8 bits here because hue is mod-256 by design. - const uint8_t angle = static_cast(atan16(dy, dx) >> 8); - const uint8_t dist = static_cast(dist16(dx, dy)); + // Angle and radius, both taken down to 8 bits here because hue is mod-256 by design. + // A true radius rather than the octagon an 8-bit distance approximates, which showed + // as visible corners on a large panel. + uint8_t angle, dist; + if (table) { + angle = static_cast(lut_.angle(i) >> 8); + dist = static_cast(lut_.radiusPixels(i)); + } else { + angle = static_cast(atan16(dy, dx) >> 8); + dist = static_cast(dist16(dx, dy)); + } uint8_t hue = static_cast( angle + static_cast(dist * twist) - t + hue_shift); RGB c = colorFromPalette(*Palettes::active(), hue); @@ -65,6 +93,7 @@ class SpiralEffect : public EffectBase { } private: + PolarLut lut_{*this}; // Numerator-only accumulator (units of dt*bpm). See tick() for why. BeatPhase phase_; }; diff --git a/src/light/effects/TunnelEffect.h b/src/light/effects/TunnelEffect.h index c80fc806..2593ce1b 100644 --- a/src/light/effects/TunnelEffect.h +++ b/src/light/effects/TunnelEffect.h @@ -1,8 +1,9 @@ #pragma once #include "core/math16.h" // atan16, dist16, kaleido, BeatPhase -#include "core/noise.h" // fbm8 — the tunnel wall texture +#include "core/noise.h" // fbm8: the tunnel wall texture #include "light/effects/EffectBase.h" +#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { @@ -38,6 +39,12 @@ class TunnelEffect : public EffectBase { uint8_t octaves = 2; // wall texture detail, and the cost knob bool vignette = true; // darken toward the vanishing point so it reads as receding + /// Read the polar address from a table instead of computing it per pixel (light/polar.h). It + /// costs 2 bytes per pixel, 4 when wide, and the effect falls back to computing the address + /// when the device cannot spare them. + bool usePolarTable = true; + bool widePolarTable = false; + void defineControls() override { controls_.addControl("bpm", bpm, 0, 120); controls_.addControl("depth", depth, 1, 255); @@ -45,8 +52,18 @@ class TunnelEffect : public EffectBase { controls_.addControl("segments", segments, 1, 16); controls_.addControl("octaves", octaves, 1, 4); controls_.addControl("vignette", vignette); + controls_.addControl("polarTable", usePolarTable); + controls_.addControl("polarTable16", widePolarTable); + } + void prepare() override { + // The polar address is built here, not in tick(): prepare() is where a module builds state + // and where allocation is allowed, and it runs again on every resize and control change, so + // the table is always current without the render path ever allocating. + if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); + else lut_.release(); } + void tick() MM_NONBLOCKING override { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(); @@ -56,13 +73,24 @@ class TunnelEffect : public EffectBase { const int32_t cx = w / 2, cy = h / 2; - for (lengthType y = 0; y < h; y++) { - for (lengthType x = 0; x < w; x++) { - const int32_t dx = static_cast(x) - cx; - const int32_t dy = static_cast(y) - cy; + // The polar address does not change between frames, so it is read from a table; if the + // device cannot spare the memory the effect computes it per pixel and looks the same. + const bool table = lut_.ready(); - const uint32_t r = dist16(dx, dy); - angle16 a = atan16(dy, dx); + std::size_t i = 0; + for (lengthType y = 0; y < h; y++) { + for (lengthType x = 0; x < w; x++, i++) { + uint32_t r; + angle16 a; + if (table) { + a = lut_.angle(i); + r = lut_.radiusPixels(i); + } else { + const int32_t dx = static_cast(x) - cx; + const int32_t dy = static_cast(y) - cy; + r = dist16(dx, dy); + a = atan16(dy, dx); + } // 1/r is the depth coordinate: distant wall (small r) compresses toward the centre, // which is exactly the perspective foreshortening a real tunnel has. The +1 keeps @@ -94,6 +122,7 @@ class TunnelEffect : public EffectBase { } private: + PolarLut lut_{*this}; BeatPhase phase_; }; diff --git a/src/light/effects/WaveEffect.h b/src/light/effects/WaveEffect.h index e1bbd6f3..c3bf0ca5 100644 --- a/src/light/effects/WaveEffect.h +++ b/src/light/effects/WaveEffect.h @@ -29,7 +29,7 @@ class WaveEffect : public EffectBase { Dim dimensions() const override { return Dim::D2; } // Waveform shapes, index-aligned with waveY()'s switch. "Sin3" is a composite of three sines - // (a richer, rolling wave); "Noise" plots value noise for a jittered band. + // (a richer, rolling wave); "Noise" plots gradient noise for a jittered band. static constexpr const char* kTypeOptions[] = {"Sawtooth", "Triangle", "Sine", "Square", "Sin3", "Noise"}; static constexpr uint8_t kTypeCount = 6; @@ -136,7 +136,7 @@ class WaveEffect : public EffectBase { case 4: v = static_cast( // Sin3: three summed sines (sin8(phase) + sin8(static_cast(phase * 2)) + sin8(static_cast(phase * 3))) / 3); break; - default: v = inoise8(phase); break; // Noise (type 5) — shared 1D value noise + default: v = inoise8(phase); break; // Noise (type 5): shared 1D gradient noise } const lengthType y = static_cast((static_cast(v) * h) / 256); return y < h ? y : static_cast(h - 1); diff --git a/src/light/layouts/Rings241Layout.h b/src/light/layouts/Rings241Layout.h index b7f3ffde..e8909548 100644 --- a/src/light/layouts/Rings241Layout.h +++ b/src/light/layouts/Rings241Layout.h @@ -6,12 +6,12 @@ namespace mm { // The classic 241-LED concentric-ring disc: nine full circles sharing one -// centre, with ring LED counts 1, 8, 12, 16, 24, 32, 40, 48, 60 (sum 241). +// center, with ring LED counts 1, 8, 12, 16, 24, 32, 40, 48, 60 (sum 241). // // Prior art: MoonLight's Rings241Layout, which composes MoonLight's RingLayout // once per ring. RingLayout places `n` LEDs evenly on a circle of radius // n / (2π), starting at the bottom (angleRad = π at i=0) and stepping by 2π/n. -// This port reproduces that exact per-LED math but emits coordinates only — +// This port reproduces that exact per-LED math but emits coordinates only; // MoonLight's pin/wiring plumbing (doNextPin/nextPin, and RingLayout's // angleFirst/rotation/clockwise/nrOfLEDs UI controls) has no place here, since // a projectMM layout hands positions to the driver and the driver owns pins. @@ -19,6 +19,12 @@ namespace mm { // multiplier. Every ring is a full circle (MoonLight's rotation = 360), so every // LED is emitted; that makes lightCount() the fixed constant 241. // +// `outside in` is ours, not MoonLight's: it names which end of the wire is light +// 0. A disc is soldered either from the center LED outward (MoonLight's order, +// the default) or from the outer 60-LED ring inward, and a layout that only knew +// one of them would light the wrong ring for the other. Only the ring SEQUENCE +// flips; the direction around each ring stays as wired. +// // Precision is reproduced statement-for-statement, because the disc's integer // coordinates depend on it: MoonLight forms `angleRad` from the double macros // PI / TWO_PI, stores it in a *float*, then takes float sinf/cosf and multiplies @@ -33,12 +39,16 @@ class Rings241Layout : public LayoutBase { public: const char* tags() const override { return "💫"; } Dim dimensions() const override { return Dim::D2; } - // Spacing multiplier — scales both the ring radii and the shared centre. + // Spacing multiplier: scales both the ring radii and the shared center. // MoonLight default 2, range 1..10. uint8_t scale = 2; + // Wiring order: false = light 0 at the center, rings outward (MoonLight's + // order); true = light 0 on the outer ring, rings inward. + bool outside_in = false; // "outside in" void defineControls() override { controls_.addControl("scale", scale, 1, 10); + controls_.addControl("outside in", outside_in); } nrOfLightsType lightCount() const override { @@ -51,15 +61,19 @@ class Rings241Layout : public LayoutBase { } void placeLights(const CoordSink& sink) const override { - // Shared centre — MoonLight: leftMargin = 1.1 * getRadius(60), assigned to + // Shared center. MoonLight: leftMargin = 1.1 * getRadius(60), assigned to // a uint8_t (implicit truncation), stored as ringCenter's integer x/y, then // scaled per LED: x = scale * ringCenter.x. const uint8_t leftMargin = static_cast(1.1f * getRadius(60)); nrOfLightsType idx = 0; // Rings emitted smallest-to-largest, the same order MoonLight calls - // RingLayout::onLayout (nrOfLEDs = 1, 8, 12, … 60). - for (uint8_t n : kRingSizes) { + // RingLayout::onLayout (nrOfLEDs = 1, 8, 12, … 60), or largest-to-smallest + // when the disc is wired from the outer ring in. The per-LED math below + // depends only on n, so the ring order is the whole difference. + constexpr uint8_t kRings = sizeof(kRingSizes) / sizeof(kRingSizes[0]); + for (uint8_t r = 0; r < kRings; r++) { + const uint8_t n = kRingSizes[outside_in ? kRings - 1 - r : r]; const float radius = getRadius(n); for (uint8_t i = 0; i < n; i++) { float x = static_cast(scale * leftMargin); @@ -83,7 +97,7 @@ class Rings241Layout : public LayoutBase { } private: - // RingLayout::getRadius(n) = n / (2π) — the radius that spaces n LEDs one + // RingLayout::getRadius(n) = n / (2π), the radius that spaces n LEDs one // unit apart around the circle. Returns float, as MoonLight does (the // division is in double then narrowed, matching n / TWO_PI on the double macro). static float getRadius(uint8_t n) { return static_cast(n / kTwoPi); } diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index e864c272..53a54c98 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -13,7 +13,7 @@ #include "core/math8.h" // beatsin16 — the shared time vocabulary #include "core/math16.h" // beat16 / triwave16 — full-range waveforms #include "light/shader.h" // shader::smoothstep, the GLSL vocabulary, already in fixed point -#include "core/noise.h" // inoise8 — the shared value-noise field +#include "core/noise.h" // inoise8: the shared gradient-noise field #include #include "core/AudioService.h" // the audio vocabulary reads the latest frame #include "light/draw.h" // draw::line, the shared 3D Bresenham a script draws with @@ -244,6 +244,43 @@ extern "C" inline uint32_t mm_light_polarR(const uintptr_t* args, uint32_t, cons +// fbm(x, y, octaves) → octaves of noise summed at doubling frequency and halving amplitude, 0..255. +// One noise() sample is a smooth blur; this is what turns it into cloud, smoke and terrain, with a +// broad shape and finer structure on it. Coordinates are the same 16.0 fixed point noise() takes. +// `octaves` is the cost knob: each one is another noise sample per pixel. +extern "C" inline uint32_t mm_light_fbm(const uintptr_t* args, uint32_t, const uint8_t*) { + return fbm8(uint32_t(args[0]), uint32_t(args[1]), static_cast(uint32_t(args[2]))); +} + +// warp(x, y, strength) → the field sampled at a point that the field itself displaced, 0..255. +// This is the primitive behind the flowing, marbled look: the field stops reading as a texture laid +// over the grid and starts reading as something moving through it. Three noise samples per call. +extern "C" inline uint32_t mm_light_warp(const uintptr_t* args, uint32_t, const uint8_t*) { + return warp8(uint32_t(args[0]), uint32_t(args[1]), static_cast(uint32_t(args[2])), 1); +} + +// osc(rate, ms, shape) → a low-frequency oscillator, 0..65535, `rate` cycles per minute at time +// `ms`. Shapes: 0 sine, 1 triangle, 2 sawtooth, 3 square (core/oscillators.h names them). +// +// Every animated quantity in a generative field is one of these, and a composition is several at +// different rates: where a shape sits, how far a coordinate is displaced, how fast a layer turns. +// A pure function of time rather than a stateful bank, because a script has no state between +// frames: two calls with the same rate stay locked together for as long as the device runs, which +// is what the compiled OscillatorBank gives an effect and what a composition needs. +extern "C" inline uint32_t mm_light_osc(const uintptr_t* args, uint32_t, const uint8_t*) { + const uint32_t rate = uint32_t(args[0]), ms = uint32_t(args[1]), shape = uint32_t(args[2]); + if (rate == 0) return shape == 3 ? 0u : 32768u; // held still, at the shape's start + // The phase, as an angle16: rate cycles per minute means rate * ms / 60000 turns. + const uint32_t phase = static_cast((static_cast(ms) * rate * 65536u) / 60000u); + const angle16 a = static_cast(phase); + switch (shape) { + case 1: return triwave16(a); + case 2: return a; + case 3: return a < 32768 ? 0u : 65535u; + default: return static_cast(sin16(a) + 32768); + } +} + // print(v) → write one value to the serial log, and return it so `print` can be dropped into an // expression without changing what it computes (`setXYZ(0, print(x), y, z)` still stores x). @@ -1156,6 +1193,14 @@ inline const BuiltinTable& lightBuiltins() { // them here is what lets a radial effect drop its precomputed lookup table. t.add({"polarA", 2, /*returns*/ true, BuiltinKind::Call, &mm_light_polarA, {}}); t.add({"polarR", 2, /*returns*/ true, BuiltinKind::Call, &mm_light_polarR, {}}); + // fbm(x, y, octaves) / warp(x, y, strength) → the two compositions over noise() that turn one + // smooth field into cloud and into flow. The compiled effects are written out of these, so a + // script reaches the same vocabulary rather than summing octaves by hand in the grammar. + t.add({"fbm", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_fbm, {}}); + t.add({"warp", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_warp, {}}); + // osc(rate, ms, shape) → an LFO, the unit every animated quantity is made of. Stateless, so + // oscillators sharing a rate hold their relationship for as long as the device runs. + t.add({"osc", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_osc, {}}); // addLight(x, y, z) → place a light. A scripted layout's whole vocabulary. t.add({"addLight", 3, /*returns*/ false, BuiltinKind::Call, &mm_light_addLight, {}}); // line(x1, y1, x2, y2, r, g, b) → a segment on the canvas, via the shared draw::line. diff --git a/src/light/moonlive/script_catalog.h b/src/light/moonlive/script_catalog.h index 57a51ab6..60cc3153 100644 --- a/src/light/moonlive/script_catalog.h +++ b/src/light/moonlive/script_catalog.h @@ -15,6 +15,7 @@ namespace mm::moonlive { /// upstream and in the factory script directory on the device. constexpr const char* kEffectCatalog[] = { "aim.mle", + "aurora.mle", "ballpit.mle", "balls.mle", "breathe.mle", @@ -39,13 +40,14 @@ constexpr const char* kEffectCatalog[] = { "spectrum.mle", "sweep.mle", }; -constexpr size_t kEffectCatalogCount = 24; +constexpr size_t kEffectCatalogCount = 25; /// What each effect above declares about itself, in the same order. /// A dimension of 0 means the script says nothing, so the DEVICE decides the default. constexpr unsigned char kEffectCatalogDim[] = { 1, 2, 2, + 2, 1, 3, 2, @@ -71,6 +73,7 @@ constexpr unsigned char kEffectCatalogDim[] = { /// The emoji each declares, "" when it declares none. constexpr const char* kEffectCatalogTags[] = { "💫🎯", + "💫", "💫✨", "💫", "💫", @@ -207,6 +210,6 @@ constexpr const char* kPaletteCatalogTags[] = { }; constexpr const char* kPaletteFolder = "palettes"; ///< its directory upstream -constexpr size_t kCatalogCount = 42; ///< every factory script, all roles +constexpr size_t kCatalogCount = 43; ///< every factory script, all roles } // namespace mm::moonlive diff --git a/src/light/polar.h b/src/light/polar.h new file mode 100644 index 00000000..f77cbc74 --- /dev/null +++ b/src/light/polar.h @@ -0,0 +1,182 @@ +#pragma once + +#include "core/ScratchBuffer.h" // ScratchBuffer: self-sizing, owner-tied scratch memory +#include "core/math16.h" // atan16, dist16, angle16 +#include "platform/platform.h" // freeHeap, HEAP_RESERVE: the memory gate + +#include + +// PolarLut: the angle and radius of every pixel, computed once and read from a table. +// +// A radial effect addresses the grid by ANGLE and RADIUS rather than x and y, which is what makes +// its motion turn around the center instead of sliding across it. Computed per pixel per frame, +// that address is `atan16` plus `dist16`, and on an ESP32-S3 it measures 1.9 microseconds per +// pixel: 39% of a PolarNoise frame at 64x64, before the field it addresses is sampled at all. The +// address does not change between frames, only the field sampled through it does, so the whole cost +// is recomputation of a constant. +// +// This is that constant, held per layer: two tables the size of the grid, rebuilt when the geometry +// changes and read as two array lookups per pixel afterwards. Effects keep their look and get their +// frame time back, and it compounds, because every radial effect pays the same toll today. +// +// Two widths, because the tradeoff is real. The 8-bit tables cost 2 bytes per pixel and are the +// default: 256 angle steps and 256 radius steps are what an effect sampling a noise field through +// them can actually resolve. The 16-bit tables cost 4 bytes per pixel and are opt-in, for an effect +// whose look breaks up at 8 bits: a slow rotation shows angle steps as visible facets, and a +// palette indexed straight from the radius bands. On a 128x128 wall that is 32 KB against 64 KB. +// +// The tables are a layer's, not an effect's: every effect on that layer shares one address for the +// same grid. An effect declares a PolarLut member, calls prepare() with the grid it is about to +// draw, and reads. prepare() rebuilds only when the geometry or the width actually changed, so +// calling it every frame is free. +// +// On a device without PSRAM the tables are a real fraction of the heap, so prepare() checks free +// memory against the reserve and declines rather than crowding it: a 32x32 grid asks 2 KB, a 64x64 +// grid 8 KB, and a 128x128 wall 32 KB. The caller falls back to computing the address per pixel and +// the picture is unchanged, which is why the fallback is a supported path rather than an error +// case, and why an effect exposes it as a control. + +namespace mm { + +/// The polar address of every pixel on a grid, as tables. +/// +/// Precision is chosen at prepare() time rather than by type, so an effect can offer it as a +/// control and switch live, which is what the live-reconfiguration rule requires. +class PolarLut { +public: + /// Owner is the module the tables belong to: it accounts their bytes and frees them when the + /// module is disabled, the same contract every ScratchBuffer has. + explicit PolarLut(MoonModule& owner) : angle8_(owner), radius8_(owner), angle16_(owner), radius16_(owner) {} + + /// Build the tables for a `w` x `h` grid, if they are not already built for exactly that. + /// `wide` selects the 16-bit tables. The center is the grid's middle in whole pixels, matching + /// what the radial effects compute by hand today. + /// + /// Returns false when the tables are not available, and the caller then computes the address per + /// pixel: an effect must still render on a device too tight for them, just more slowly. Two + /// things make it decline, and the first matters more on a device without PSRAM. It REFUSES the + /// tables when free heap minus the reserve that protects stacks, WiFi and HTTP cannot hold them, + /// rather than taking the last of the heap and starving something else later (the rule + /// MappingLUT established). And if the allocation fails anyway it unwinds to nothing rather than + /// holding a half-built table. Degrade visibly, never crash. + bool prepare(uint16_t w, uint16_t h, bool wide = false) { + if (w == w_ && h == h_ && wide == wide_ && ready_) return true; + w_ = w; h_ = h; wide_ = wide; ready_ = false; + const std::size_t n = static_cast(w) * h; + if (n == 0) { release(); return false; } // an empty grid holds nothing, not the old table + + // Free the width we are not using, so switching precision live does not hold both, and so + // the budget below is measured against a heap that already has the old tables back. + if (wide) { angle8_.resize(0); radius8_.resize(0); } + else { angle16_.resize(0); radius16_.resize(0); } + + // The memory gate. freeHeap() is 0 on desktop, which means unlimited, so the gate is an + // ESP32 rule only. The tables are worth having, not worth the last of the heap. + const std::size_t want = n * (wide ? 4u : 2u); + const std::size_t freeHeap = platform::freeHeap(); + if (freeHeap != 0) { + const std::size_t budget = freeHeap > platform::HEAP_RESERVE ? freeHeap - platform::HEAP_RESERVE : 0; + if (budget < want) { release(); return false; } + } + + if (wide) { if (!angle16_.resize(n) || !radius16_.resize(n)) { release(); return false; } } + else { if (!angle8_.resize(n) || !radius8_.resize(n)) { release(); return false; } } + + // The longest radius on the grid: the corner furthest from the center. Radii scale against + // it so the outer edge reaches full scale whatever the aspect ratio, which is what makes a + // radial gradient fill a wide panel instead of banding in a circle inside it. + const int32_t cx = w / 2, cy = h / 2; + const int32_t fx = (cx > w - 1 - cx ? cx : w - 1 - cx); + const int32_t fy = (cy > h - 1 - cy ? cy : h - 1 - cy); + maxRadius_ = dist16(fx, fy); + if (maxRadius_ == 0) maxRadius_ = 1; // a 1x1 grid: avoid a divide by zero + + for (uint16_t y = 0; y < h; y++) { + for (uint16_t x = 0; x < w; x++) { + const int32_t dx = static_cast(x) - cx; + const int32_t dy = static_cast(y) - cy; + const angle16 a = atan16(dy, dx); + const uint32_t r = dist16(dx, dy); + // Scale the radius to full range against the furthest corner, so `radius` is a + // position from center (0) to edge (full scale) rather than a pixel count. Both + // steps ROUND rather than truncate: a caller scaling back to pixels truncates twice + // otherwise and lands a whole pixel short at every radius, which shifts the entire + // field inward by one and is plainly visible as a displaced center. + const uint32_t rs = r >= maxRadius_ ? 65535u : (r * 65535u + maxRadius_ / 2) / maxRadius_; + const std::size_t i = static_cast(y) * w + x; + if (wide) { + angle16_[i] = a; + radius16_[i] = static_cast(rs); + } else { + angle8_[i] = static_cast(a >> 8); + radius8_[i] = static_cast((rs + 128) >> 8 > 255 ? 255 : (rs + 128) >> 8); + } + } + } + ready_ = true; + return true; + } + + /// Free the tables, for a caller that has switched the address back to per-pixel computation. + /// The next prepare() rebuilds them. + void release() { + if (!ready_ && bytes() == 0) return; + angle8_.resize(0); radius8_.resize(0); angle16_.resize(0); radius16_.resize(0); + w_ = h_ = 0; + ready_ = false; + } + + /// True once the tables hold a grid; false if allocation failed and the caller must compute. + bool ready() const { return ready_; } + /// True when the 16-bit tables are the ones built. + bool wide() const { return wide_; } + /// The distance from center to the furthest corner, in pixels: what `radius` is scaled against. + uint32_t maxRadius() const { return maxRadius_; } + /// What the tables currently cost. + std::size_t bytes() const { return angle8_.bytes() + radius8_.bytes() + angle16_.bytes() + radius16_.bytes(); } + + /// The angle of pixel `i` (row-major, y * width + x), as a full angle16 whichever width is + /// built: the 8-bit table widens, so a caller reads one type and the precision is the table's. + /// An angle wraps, so the low byte is filled from the high one and a wrapped value stays + /// continuous across the seam. + angle16 angle(std::size_t i) const { + if (!ready_) return 0; + if (wide_) return angle16_.data()[i]; + const uint32_t v = angle8_.data()[i]; + return static_cast((v << 8) | v); + } + + /// The radius of pixel `i`, 0 at the center to 65535 at the furthest corner. + uint16_t radius(std::size_t i) const { + if (!ready_) return 0; + if (wide_) return radius16_.data()[i]; + // Widen so the top of the 8-bit range reaches the top of the 16-bit one: 255 must read as + // full scale, not as 65280, or the outer edge never arrives. + const uint32_t v = radius8_.data()[i]; + return static_cast((v << 8) | v); + } + + /// The radius of pixel `i` in PIXELS from the center, which is the form a field scaled in grid + /// units wants. Rounded, so it round-trips the stored value rather than landing short. + uint32_t radiusPixels(std::size_t i) const { + if (!ready_) return 0; + return (static_cast(radius(i)) * maxRadius_ + 32768u) >> 16; + } + + /// The angle at (x, y). The index form above is what a pixel loop should use; this is for a + /// caller that has coordinates rather than a running index. + angle16 angleAt(uint16_t x, uint16_t y) const { return angle(static_cast(y) * w_ + x); } + /// The radius at (x, y). + uint16_t radiusAt(uint16_t x, uint16_t y) const { return radius(static_cast(y) * w_ + x); } + +private: + ScratchBuffer angle8_, radius8_; + ScratchBuffer angle16_; + ScratchBuffer radius16_; + uint16_t w_ = 0, h_ = 0; + uint32_t maxRadius_ = 1; + bool wide_ = false; + bool ready_ = false; +}; + +} // namespace mm diff --git a/src/main.cpp b/src/main.cpp index c9c54648..ed30d4f9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,6 +44,7 @@ #include "light/effects/SolidEffect.h" #include "light/effects/StarSkyEffect.h" #include "light/effects/SdfShapesEffect.h" +#include "light/effects/AuroraEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/WaterRippleEffect.h" #include "light/effects/TunnelEffect.h" @@ -237,6 +238,7 @@ static void registerModuleTypes() { mm::ModuleFactory::registerType("SineEffect", "light/effects.md#sine"); mm::ModuleFactory::registerType("SolidEffect", "light/effects.md#solid"); mm::ModuleFactory::registerType("SdfShapesEffect", "light/effects.md#sdfshapes"); + mm::ModuleFactory::registerType("AuroraEffect", "light/effects.md#aurora"); mm::ModuleFactory::registerType("PolarNoiseEffect", "light/effects.md#polarnoise"); mm::ModuleFactory::registerType("WaterRippleEffect", "light/effects.md#waterripple"); mm::ModuleFactory::registerType("TunnelEffect", "light/effects.md#tunnel"); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ae2269b2..f5879477 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -10,6 +10,7 @@ add_executable(mm_tests unit/core/unit_platform_audiofft.cpp unit/core/unit_Buffer.cpp unit/core/unit_ScratchBuffer.cpp + unit/core/unit_Oscillators.cpp unit/core/unit_ActiveInstance.cpp unit/core/unit_Color.cpp unit/core/unit_math8.cpp @@ -104,6 +105,9 @@ add_executable(mm_tests unit/light/unit_Circle.cpp unit/light/unit_Particles.cpp unit/light/unit_Shader.cpp + unit/light/unit_PolarLut.cpp + unit/light/unit_PolarLut_equivalence.cpp + unit/light/unit_AuroraEffect.cpp unit/light/unit_Effects_framerate.cpp unit/light/unit_SineEffect.cpp unit/light/unit_DistortionWavesEffect.cpp @@ -118,6 +122,7 @@ add_executable(mm_tests unit/light/unit_WaveEffect.cpp unit/light/unit_FireEffect.cpp unit/light/unit_GridLayout.cpp + unit/light/unit_Rings241Layout.cpp unit/light/unit_SingleColumnLayout.cpp unit/light/unit_SphereLayout.cpp unit/light/unit_WheelLayout.cpp @@ -202,3 +207,8 @@ set_tests_properties(unit_tests PROPERTIES # Scenario runner (replays scenario JSON files in-process) add_executable(mm_scenarios scenario_runner.cpp) target_link_libraries(mm_scenarios PRIVATE mm_core mm_platform) + +# Kernel micro-bench: ns per call for the power-function kernels, on the host. A report, not a +# test (no ctest registration): the numbers go into performance.md and gate a kernel swap. +add_executable(mm_bench bench/bench_kernels.cpp) +target_link_libraries(mm_bench PRIVATE mm_core mm_platform) diff --git a/test/bench/bench_kernels.cpp b/test/bench/bench_kernels.cpp new file mode 100644 index 00000000..473e634c --- /dev/null +++ b/test/bench/bench_kernels.cpp @@ -0,0 +1,90 @@ +// Kernel micro-bench: nanoseconds per call for the power-function kernels, on the host. +// +// The gate for a kernel swap: the generative-fields plan replaces value noise with gradient noise +// behind the same names and accepts the swap only within 1.3x of the value-noise cost per sample. +// That bound is meaningless without the number it is measured against, so this target records it, +// before the swap, and every later kernel adds a row. Host timings, not ESP32 cycles: the S3 is +// 20-40x slower per core (performance.md, the `collide` measurement) and the ratio between two rows +// is what transfers, not the absolute figure. +// +// Method: sweep a 256x256 grid of 16.0 fixed coordinates at a fixed step (the same shape a noise +// effect samples), accumulate every result into a checksum the compiler cannot elide, repeat, and +// keep the best of several runs so a scheduler hiccup does not become a slower kernel. Output is a +// Markdown table so the rows paste into performance.md unchanged. +// +// Not a doctest: a benchmark that asserts a timing is a flaky test, and one that does not assert is +// a report. This is the report. Run by hand or through moondeck/check/bench_kernels.py. + +#include "core/math16.h" +#include "core/noise.h" + +#include +#include +#include +#include + +namespace { + +constexpr uint32_t kGrid = 256; // samples per axis per pass +constexpr uint32_t kStep = 40; // 16.0 fixed coordinate step: ~6.4 noise cells across +constexpr int kRuns = 5; // best-of + +struct Row { + const char* name; + std::function fn; +}; + +/// Time one kernel over the grid; returns the best ns per sample across kRuns. +double bench(const Row& row) { + double best = 1e18; + volatile uint32_t sink = 0; // the checksum the optimizer must honor + for (int run = 0; run < kRuns; run++) { + uint32_t acc = 0; + const auto t0 = std::chrono::steady_clock::now(); + for (uint32_t y = 0; y < kGrid; y++) + for (uint32_t x = 0; x < kGrid; x++) + acc += row.fn(x * kStep, y * kStep, (x + y) * 3); + const auto t1 = std::chrono::steady_clock::now(); + sink = sink + acc; + const double ns = std::chrono::duration(t1 - t0).count() / (kGrid * kGrid); + if (ns < best) best = ns; + } + return best; +} + +} // namespace + +int main() { + using namespace mm; + const Row rows[] = { + {"inoise8 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise8(x)); }}, + {"inoise8 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise8(x, y)); }}, + {"inoise8 3D", [](uint32_t x, uint32_t y, uint32_t z){ return uint32_t(inoise8(x, y, z)); }}, + {"inoise16 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise16(x)); }}, + {"inoise16 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise16(x, y)); }}, + {"inoise16 3D", [](uint32_t x, uint32_t y, uint32_t z){ return uint32_t(inoise16(x, y, z)); }}, + {"fbm8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 2)); }}, + {"fbm8 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 4)); }}, + {"fbm16 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 2)); }}, + {"fbm16 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 4)); }}, + {"turbulence8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(turbulence8(x, y, 2)); }}, + {"warp8 2D, 1 octave", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 1)); }}, + {"warp8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 2)); }}, + // The polar address, computed per pixel per frame by every radial effect today. The phase-1 + // LUT replaces these three with two table reads, so this is the row it has to beat. + {"atan16", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(atan16(int32_t(y) - 128, int32_t(x) - 128)); }}, + {"dist16", [](uint32_t x, uint32_t y, uint32_t) { return dist16(int32_t(x) - 128, int32_t(y) - 128); }}, + {"polar address (dist16 + atan16 + kaleido)", [](uint32_t x, uint32_t y, uint32_t) { + const int32_t dx = int32_t(x) - 128, dy = int32_t(y) - 128; + const uint32_t r = dist16(dx, dy); + return uint32_t(kaleido(angle16(atan16(dy, dx) + r * 4), 5)) + r; + }}, + }; + + std::printf("| Kernel | ns/sample | Msamples/s |\n|---|---:|---:|\n"); + for (const Row& row : rows) { + const double ns = bench(row); + std::printf("| %s | %.1f | %.1f |\n", row.name, ns, 1000.0 / ns); + } + return 0; +} diff --git a/test/scenario_runner.cpp b/test/scenario_runner.cpp index 45d5a16f..02e0990b 100644 --- a/test/scenario_runner.cpp +++ b/test/scenario_runner.cpp @@ -22,6 +22,8 @@ #include "light/moonlive/MoonLiveEffect.h" #include "light/moonlive/MoonLiveModifier.h" #include "light/moonlive/MoonLiveLayout.h" +#include "light/effects/AuroraEffect.h" +#include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" #include "light/effects/RingsEffect.h" #include "light/effects/RipplesEffect.h" @@ -219,6 +221,8 @@ static void registerScenarioTypes() { mm::ModuleFactory::registerType("MoonLiveEffect"); mm::ModuleFactory::registerType("MoonLiveModifier"); mm::ModuleFactory::registerType("MoonLiveLayout"); + mm::ModuleFactory::registerType("AuroraEffect"); + mm::ModuleFactory::registerType("PolarNoiseEffect"); mm::ModuleFactory::registerType("SpiralEffect"); mm::ModuleFactory::registerType("RingsEffect"); mm::ModuleFactory::registerType("RipplesEffect"); diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json new file mode 100644 index 00000000..fbc7debc --- /dev/null +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -0,0 +1,309 @@ +{ + "name": "scenario_Aurora_fps", + "module": "AuroraEffect", + "mode": "mutate", + "also": [ + "OscillatorBank", + "PolarLut", + "GridLayout", + "Layer" + ], + "description": "What a layered shader costs, one control at a time. Aurora samples a warped noise field once per layer per pixel, so its frame time is set by three knobs that multiply: how many layers, how many octaves inside each, and whether the field warps at all. The steps walk them from the cheapest configuration to the most expensive on one grid, so the ratios between the observed numbers are what an author reads to choose settings for a fixture, and a jump in any one of them between commits is a regression with a name. The grid is deliberately 64x64: large enough that per-pixel cost dominates, small enough to run on every target the contracts name.", + "fixture": [ + { + "name": "fix-layouts", + "op": "add_module", + "id": "Layouts", + "type": "Layouts" + }, + { + "name": "fix-layers", + "op": "add_module", + "id": "Effects", + "type": "Effects", + "props": { + "layouts": "Layouts" + } + }, + { + "name": "fix-drivers", + "op": "add_module", + "id": "Drivers", + "type": "Drivers", + "props": { + "effects": "Effects" + } + } + ], + "steps": [ + { + "name": "canvas-clear-layers", + "description": "Self-canvas: clear and rebuild the pipeline this scenario assumes, so it runs from any device state.", + "op": "clear_children", + "id": "Effects" + }, + { + "name": "canvas-clear-layouts", + "op": "clear_children", + "id": "Layouts" + }, + { + "name": "canvas-grid", + "op": "add_module", + "id": "Grid", + "type": "GridLayout", + "parent_id": "Layouts", + "props": { + "width": 64, + "height": 64 + } + }, + { + "name": "canvas-layer", + "op": "add_module", + "id": "Layer", + "type": "Layer", + "parent_id": "Effects" + }, + { + "name": "aurora-defaults", + "description": "Aurora as it ships: 3 layers, 2 octaves, warp on. This is the number a catalog card promises, and the one every step below is read against.", + "op": "add_module", + "id": "Aurora", + "type": "AuroraEffect", + "parent_id": "Layer", + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 3000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: Aurora at 64x64, 3 layers, 2 octaves, warp on" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 478, + "p95": 650, + "min": 474, + "max": 650, + "n": 3, + "samples": [478, 474, 650] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "one-layer", + "description": "The cost knob at its cheapest. Layers are the outer multiplier: each one is a full warped field sample per pixel, so this should land near a third of the step above.", + "op": "set_control", + "id": "Aurora", + "key": "layers", + "value": 1, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 1500, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: one layer, roughly a third of the three-layer cost" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 207, + "p95": 208, + "min": 207, + "max": 208, + "n": 3, + "samples": [207, 207, 208] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "one-layer-no-warp", + "description": "Warp off: the field is sampled where it lies rather than where the field displaced it, which is two fewer noise samples per pixel. The cheapest Aurora that still reads as Aurora, and the configuration a large wall runs.", + "op": "set_control", + "id": "Aurora", + "key": "warp", + "value": 0, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 900, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: one layer without domain warping" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 127, + "p95": 128, + "min": 127, + "max": 128, + "n": 3, + "samples": [127, 127, 128] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "four-layers-no-warp", + "description": "Four unwarped layers: the same total field samples as roughly one warped layer, arranged as more structure instead of more folding. Reading this against one-layer-no-warp is how an author trades detail for depth at a fixed budget.", + "op": "set_control", + "id": "Aurora", + "key": "layers", + "value": 4, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 3400, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: four layers, warp off" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 304, + "p95": 306, + "min": 303, + "max": 306, + "n": 3, + "samples": [304, 303, 306] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "four-layers-four-octaves", + "description": "Four unwarped layers at four octaves: the octave knob at its top, with warp still off from the step above. Read against four-layers-no-warp, this is what octaves alone cost.", + "op": "set_control", + "id": "Aurora", + "key": "octaves", + "value": 4, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 7000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: four layers, four octaves, warp still off" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 474, + "p95": 480, + "min": 474, + "max": 480, + "n": 3, + "samples": [474, 474, 480] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "warp-back-on", + "description": "Warp back on, so the two steps below measure the configuration Aurora actually ships. Setting it explicitly rather than relying on the default is what keeps each number readable on its own.", + "op": "set_control", + "id": "Aurora", + "key": "warp", + "value": 60, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 9000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: four layers, four octaves, warp on: the true ceiling" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 785, + "p95": 937, + "min": 785, + "max": 937, + "n": 2, + "samples": [937, 785] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "kaleidoscope", + "description": "Fold the composition into six wedges, at the ceiling settings above. The symmetry is applied to the angle before the field is ever sampled, so it costs one modulo per pixel and not a second pass over the field: the small step from warp-back-on is what pins that claim.", + "op": "set_control", + "id": "Aurora", + "key": "segments", + "value": 6, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 9500, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: the fold adds one modulo per pixel, not a pass" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 814, + "p95": 821, + "min": 507, + "max": 821, + "n": 3, + "samples": [507, 814, 821] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "back-to-defaults", + "description": "Octaves back to the shipped 2, with four layers and the fold still on. Returning near the four-layers steps above is what shows the effect carries no state that accumulates across reconfiguration.", + "op": "set_control", + "id": "Aurora", + "key": "octaves", + "value": 2, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 4200, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: four layers, two octaves, folded" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 643, + "p95": 658, + "min": 333, + "max": 658, + "n": 3, + "samples": [333, 643, 658] + }, + "last_updated": "2026-09-04" + } + } + } + ] +} diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json new file mode 100644 index 00000000..2d462167 --- /dev/null +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -0,0 +1,310 @@ +{ + "name": "scenario_Fields_polar_lut", + "module": "PolarLut", + "mode": "mutate", + "also": [ + "PolarNoiseEffect", + "AuroraEffect", + "GridLayout", + "Layer" + ], + "description": "The polar address table through a running pipeline: it is built for the grid a radial effect draws on, rebuilt when that grid resizes, dropped when the effect switches it off, and doubled when full precision is asked for. What the steps pin is that every one of those transitions happens live, under a rendering pipeline, without a reboot and without a stale table addressing pixels that no longer exist. The frame times are recorded per target and read as a TREND rather than as a pass mark: on a desktop the table and the computed address measure the same, because an out-of-order core with a large cache computes atan16 and dist16 about as fast as it loads two arrays. The 34% the table is worth was measured on an ESP32-S3, and it is an in-order-core property, so the contracts that matter here are the device ones. Aurora is measured last because it samples the field several times per pixel, which is what sets the fps a composition of this shape can promise.", + "fixture": [ + { + "name": "fix-layouts", + "op": "add_module", + "id": "Layouts", + "type": "Layouts" + }, + { + "name": "fix-layers", + "op": "add_module", + "id": "Effects", + "type": "Effects", + "props": { + "layouts": "Layouts" + } + }, + { + "name": "fix-drivers", + "op": "add_module", + "id": "Drivers", + "type": "Drivers", + "props": { + "effects": "Effects" + } + } + ], + "steps": [ + { + "name": "canvas-clear-layers", + "description": "Self-canvas: clear and rebuild the pipeline this scenario assumes, so it runs from any device state.", + "op": "clear_children", + "id": "Effects" + }, + { + "name": "canvas-clear-layouts", + "op": "clear_children", + "id": "Layouts" + }, + { + "name": "canvas-grid", + "description": "A 64x64 panel: large enough that the address table is real memory (8 KB narrow) and small enough to run on every target.", + "op": "add_module", + "id": "Grid", + "type": "GridLayout", + "parent_id": "Layouts", + "props": { + "width": 64, + "height": 64 + } + }, + { + "name": "canvas-layer", + "op": "add_module", + "id": "Layer", + "type": "Layer", + "parent_id": "Effects" + }, + { + "name": "add-polarnoise", + "description": "A radial effect on the layer. It builds the table in prepare(), so the allocation happens here rather than on the first rendered frame.", + "op": "add_module", + "id": "PolarNoise", + "type": "PolarNoiseEffect", + "parent_id": "Layer", + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 4000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: PolarNoise at 64x64 through the address table" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 281, + "p95": 289, + "min": 189, + "max": 289, + "n": 3, + "samples": [289, 189, 281] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "table-off", + "description": "Switch the table off under a running effect: the effect computes each pixel's angle and radius instead, which is the path a device short of memory takes. The picture is unchanged, which unit_PolarLut_equivalence pins bit-for-bit at full precision; what this step proves is that the switch takes effect live.", + "op": "set_control", + "id": "PolarNoise", + "key": "polarTable", + "value": false, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 6000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: the computed-address fallback, slower than the table above" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 189, + "p95": 194, + "min": 183, + "max": 194, + "n": 3, + "samples": [183, 189, 194] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "table-on", + "description": "Back to the table, which prepare() rebuilds. Confirms the switch is live in both directions rather than one-way.", + "op": "set_control", + "id": "PolarNoise", + "key": "polarTable", + "value": true, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 4000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: back to the table cost" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 177, + "p95": 180, + "min": 168, + "max": 180, + "n": 3, + "samples": [168, 180, 177] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "table-wide", + "description": "Full 16-bit precision: 4 bytes per pixel instead of 2, so the table doubles at this grid. Frame time barely moves on any target, which is what makes precision a memory decision rather than a speed one.", + "op": "set_control", + "id": "PolarNoise", + "key": "polarTable16", + "value": true, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 4200, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: the wide table, near the narrow one in time" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 175, + "p95": 179, + "min": 168, + "max": 179, + "n": 3, + "samples": [168, 175, 179] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "resize-down", + "description": "Shrink the grid under a running effect. The table is rebuilt for the new geometry in prepare(), not carried over: a stale table would address pixels that no longer exist.", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 32, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 2400, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: half the pixels, half the table" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 86, + "p95": 88, + "min": 83, + "max": 88, + "n": 3, + "samples": [83, 86, 88] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "resize-up", + "description": "Grow it again, the direction that has to allocate rather than free. On a device without PSRAM this is where prepare() weighs the table against free heap minus the reserve that protects stacks, WiFi and HTTP, and declines it rather than taking the last of the heap; the effect keeps rendering through the computed address.", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 96, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 7000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: 64x96 with the wide table" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 257, + "p95": 264, + "min": 250, + "max": 264, + "n": 3, + "samples": [250, 257, 264] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "swap-to-aurora", + "description": "Aurora on the same layer: three layers of warped noise over the same address, each on its own oscillator. Several field samples per pixel, so this is the frame time that decides what the fps contract can promise.", + "op": "add_module", + "id": "Aurora", + "type": "AuroraEffect", + "parent_id": "Layer", + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 40000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: Aurora at 64x96, 3 layers, 2 octaves" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 970, + "p95": 981, + "min": 960, + "max": 981, + "n": 3, + "samples": [960, 970, 981] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "aurora-one-layer", + "description": "Drop to a single layer, the cost knob at its cheapest. The ratio against the step above is what an effect author reads to choose a layer count for their fixture.", + "op": "set_control", + "id": "Aurora", + "key": "layers", + "value": 1, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 16000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "initial contract: roughly a third of the three-layer cost" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 561, + "p95": 561, + "min": 560, + "max": 561, + "n": 3, + "samples": [560, 561, 561] + }, + "last_updated": "2026-09-04" + } + } + } + ] +} diff --git a/test/unit/core/unit_Oscillators.cpp b/test/unit/core/unit_Oscillators.cpp new file mode 100644 index 00000000..6703b4fc --- /dev/null +++ b/test/unit/core/unit_Oscillators.cpp @@ -0,0 +1,174 @@ +// @module oscillators +// @also math16 + +// The oscillator bank: the animated quantities of a generative field, advanced once per frame and +// read per pixel. These pin what an effect author relies on: that a value stays inside the range +// they asked for, that two oscillators sharing a rate hold their relationship for as long as the +// device runs, that changing a rate mid-run does not jump the picture, and that the bank costs one +// pass per frame rather than one per read. + +#include "doctest.h" +#include "core/oscillators.h" + +using namespace mm; + +namespace { + +/// Run a bank forward to `untilMs` on the device clock, in `dtMs` steps, the way a render loop +/// does. `from` is where the clock already stands, so successive calls continue rather than +/// restarting: the first advance of a fresh bank only establishes the time base (BeatPhase's +/// first-tick guard), and calling this again from 0 would establish it a second time. +template +uint32_t run(OscillatorBank& bank, uint32_t untilMs, uint32_t dtMs, uint32_t from = 0) { + if (from == 0) bank.advance(0); + uint32_t t = from; + while (t + dtMs <= untilMs) { t += dtMs; bank.advance(t); } + return t; +} + +} // namespace + +TEST_CASE("an oscillator stays inside the range the effect asked for") { + OscillatorBank<1> bank; + bank.set(0, {.rate = 120, .low = 10, .high = 200, .phaseOffset = 0, .wave = Wave::Sine}); + int32_t lo = 1 << 30, hi = -(1 << 30); + uint32_t t = 0; + for (uint32_t f = 0; f < 2000; f++) { + bank.advance(t); + t += 7; // an irregular frame time, as a real loop has + lo = bank.value(0) < lo ? bank.value(0) : lo; + hi = bank.value(0) > hi ? bank.value(0) : hi; + } + CHECK(lo >= 10); + CHECK(hi <= 200); + CHECK(lo < 20); // and it actually reaches the ends + CHECK(hi > 190); +} + +TEST_CASE("a range given backwards runs the shape backwards") { + OscillatorBank<2> bank; + bank.set(0, {.rate = 60, .low = 0, .high = 100, .phaseOffset = 0, .wave = Wave::Saw}); + bank.set(1, {.rate = 60, .low = 100, .high = 0, .phaseOffset = 0, .wave = Wave::Saw}); + run(bank, 200, 5); + // Same phase, mirrored ranges: the two are reflections, so they sum to the span. + CHECK(bank.value(0) + bank.value(1) == 100); +} + +TEST_CASE("two oscillators at the same rate hold their phase relationship indefinitely") { + // The property a composition depends on: layers set a quarter-cycle apart must not drift, or a + // deliberate arrangement decays into noise over an evening. + OscillatorBank<2> bank; + bank.set(0, {.rate = 45, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Sine}); + bank.set(1, {.rate = 45, .low = 0, .high = 65535, .phaseOffset = 16384, .wave = Wave::Sine}); + + run(bank, 1600, 16); + const int32_t earlyGap = static_cast(bank.phase(1)) - static_cast(bank.phase(0)); + uint32_t t = 1600; + for (uint32_t f = 0; f < 200000; f++) { t += 16; bank.advance(t); } // ~an hour of frames + const int32_t lateGap = static_cast(bank.phase(1)) - static_cast(bank.phase(0)); + CHECK(earlyGap == lateGap); +} + +TEST_CASE("a rate of zero holds the picture still") { + OscillatorBank<1> bank; + bank.set(0, {.rate = 0, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Sine}); + run(bank, 8000, 16); + CHECK(bank.phase(0) == 0); + CHECK(bank.value(0) == 32768); // a sine at phase zero sits at its midpoint +} + +TEST_CASE("changing the rate continues from where the phase stands, without jumping") { + // Live reconfiguration: turning a speed control must not make the picture leap. + OscillatorBank<1> bank; + bank.set(0, {.rate = 30, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); + uint32_t t = 0; + for (uint32_t f = 0; f < 50; f++) { bank.advance(t); t += 16; } + const uint16_t before = bank.unitValue(0); + CHECK(before > 0); // it is genuinely mid-cycle, not at the start + + Oscillator faster = bank.get(0); + faster.rate = 240; + bank.set(0, faster); + bank.advance(t); // the very next frame, one 16 ms step + const uint16_t after = bank.unitValue(0); + + // One frame at the new rate moves the phase by a frame's worth, not to a new place entirely. + const int32_t step = static_cast(after) - static_cast(before); + CHECK(step >= 0); + CHECK(step < 6000); // 16 ms at 240 BPM is ~4.3% of a cycle +} + +TEST_CASE("the four waveforms have the shapes their names promise") { + OscillatorBank<4> bank; + for (uint8_t i = 0; i < 4; i++) + bank.set(i, {.rate = 60, .low = 0, .high = 65535, .phaseOffset = 0, .wave = static_cast(i)}); + + // A quarter of a cycle in (60 BPM is one cycle a second, so 250 ms): the sine is at its peak, + // the triangle halfway up its rise, the saw a quarter of the way along, the square still low. + uint32_t t = run(bank, 250, 10); + CHECK(bank.unitValue(0) > 64000); // Sine + CHECK(bank.unitValue(1) == doctest::Approx(32768).epsilon(0.05)); // Triangle + CHECK(bank.unitValue(2) == doctest::Approx(16384).epsilon(0.05)); // Saw + CHECK(bank.unitValue(3) == 0); // Square + + // Half a cycle: the sine is back through its midpoint on the way down, the triangle at ITS peak + // (it turns at the half, where the sine turned at the quarter), the square now high. + t = run(bank, 500, 10, t); + CHECK(bank.unitValue(0) == doctest::Approx(32768).epsilon(0.02)); + CHECK(bank.unitValue(1) > 64000); + CHECK(bank.unitValue(3) == 65535); + + // And a full cycle brings every shape back to where it started. + run(bank, 1000, 10, t); + CHECK(bank.unitValue(1) == 0); + CHECK(bank.unitValue(2) == 0); +} + +TEST_CASE("a square wave is only ever fully on or fully off") { + OscillatorBank<1> bank; + bank.set(0, {.rate = 90, .low = 0, .high = 255, .phaseOffset = 0, .wave = Wave::Square}); + uint32_t t = 0; + bool sawLow = false, sawHigh = false; + for (uint32_t f = 0; f < 300; f++) { + bank.advance(t); + t += 11; // 3.3 s, about five cycles at 90 BPM + const int32_t v = bank.value(0); + CHECK((v == 0 || v == 255)); // never anything in between + sawLow = sawLow || v == 0; + sawHigh = sawHigh || v == 255; + } + CHECK(sawLow); + CHECK(sawHigh); // and it does switch +} + +TEST_CASE("an out-of-range oscillator index reads as zero rather than crashing the device") { + // An effect driving the bank from a user control must not be able to fault it. + OscillatorBank<2> bank; + bank.set(9, {.rate = 60, .low = 0, .high = 100, .phaseOffset = 0, .wave = Wave::Sine}); + run(bank, 160, 16); + CHECK(bank.value(9) == 0); + CHECK(bank.phase(9) == 0); + CHECK(bank.unitValue(200) == 0); +} + +TEST_CASE("the first frame establishes the time base instead of jumping the phase") { + // An effect enabled after the device has been up for an hour starts at zero, not an hour in. + OscillatorBank<1> bank; + bank.set(0, {.rate = 60, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); + bank.advance(3600000u); // first call, an hour on the clock + CHECK(bank.phase(0) == 0); + bank.advance(3600016u); + // One 16 ms frame in, not an hour: at 60 BPM that is 16/1000 of a turn, about 1048. + CHECK(bank.phase(0) > 1000); + CHECK(bank.phase(0) < 1100); +} + +TEST_CASE("reset restarts the motion without losing the configuration") { + OscillatorBank<1> bank; + bank.set(0, {.rate = 120, .low = 5, .high = 9, .phaseOffset = 0, .wave = Wave::Triangle}); + run(bank, 1600, 16); + bank.reset(); + CHECK(bank.phase(0) == 0); + CHECK(bank.get(0).rate == 120); + CHECK(bank.get(0).high == 9); +} diff --git a/test/unit/core/unit_fields.cpp b/test/unit/core/unit_fields.cpp index 07a53d33..84cb2c35 100644 --- a/test/unit/core/unit_fields.cpp +++ b/test/unit/core/unit_fields.cpp @@ -70,7 +70,7 @@ TEST_CASE("fbm with no octaves is a flat field") { CHECK(fbm8(999, 111, 0) == 128); } -// A field must be a FIELD: neighbouring points are similar, distant points are not. This is what +// A field must be a FIELD: neighboring points are similar, distant points are not. This is what // separates noise from a raw hash, and it must survive the octave sum. TEST_CASE("fbm is smooth: neighbours resemble each other more than distant points") { const int here = fbm8(5000, 5000, 3); diff --git a/test/unit/core/unit_math16.cpp b/test/unit/core/unit_math16.cpp index e0f9a08d..2ce1b358 100644 --- a/test/unit/core/unit_math16.cpp +++ b/test/unit/core/unit_math16.cpp @@ -298,7 +298,7 @@ TEST_CASE("hashInt is a pure function of its inputs") { CHECK(hashInt(5, 9, 0, 42) == hashInt(5, 9, 0, 42)); } -TEST_CASE("hashInt gives neighbouring pixels unrelated values") { +TEST_CASE("hashInt gives neighboring pixels unrelated values") { // Adjacent inputs must not produce adjacent outputs, or a dissolve would appear in stripes. int differing = 0; for (uint32_t x = 0; x < 64; x++) diff --git a/test/unit/core/unit_moonlive_compiler.cpp b/test/unit/core/unit_moonlive_compiler.cpp index d98e49f3..d8ddca27 100644 --- a/test/unit/core/unit_moonlive_compiler.cpp +++ b/test/unit/core/unit_moonlive_compiler.cpp @@ -1534,7 +1534,7 @@ TEST_CASE("a member declaration and a typed function are told apart") { #if MM_MOONLIVE_HAS_HOST_JIT TEST_CASE("an array is indexed correctly at both element widths, by a computed index") { // The index scaling, from the outside. `idx * width` is emitted as a SHIFT (width 4) or skipped - // entirely (width 1), so a wrong shift or a wrongly skipped one reads the neighbouring element + // entirely (width 1), so a wrong shift or a wrongly skipped one reads the neighboring element // rather than failing loudly. A CONSTANT index would not catch it: the interesting path is an // index the engine computes at run time, which is what a loop counter is. // diff --git a/test/unit/core/unit_noise.cpp b/test/unit/core/unit_noise.cpp index 59fc2cc4..3d298933 100644 --- a/test/unit/core/unit_noise.cpp +++ b/test/unit/core/unit_noise.cpp @@ -8,19 +8,18 @@ using namespace mm; // Determinism: the same coordinate always gives the same value (a pure function of position), -// so a field is reproducible frame to frame and across the 1D/2D/3D entry points at z/y = 0. +// so a field is reproducible frame to frame and across the 2D/3D entry points at z = 0. TEST_CASE("noise: inoise8 is deterministic and the lower-D calls agree at zero on the extra axes") { CHECK(inoise8(1234u) == inoise8(1234u)); CHECK(inoise8(50u, 80u) == inoise8(50u, 80u)); CHECK(inoise8(7u, 9u, 11u) == inoise8(7u, 9u, 11u)); - // 2D at y=0 equals 1D at the same x (the hash uses 0 for the absent axes in both). - CHECK(inoise8(300u, 0u) == inoise8(300u)); + // 1D is NOT 2D at y=0: it draws ±1 gradients of its own (core/noise.h says why). // 3D at z=0 equals 2D at the same (x,y). CHECK(inoise8(640u, 128u, 0u) == inoise8(640u, 128u)); } -// Smoothness: neighbouring positions WITHIN a cell (sub-256 steps) differ only a little — that's -// what makes it value noise rather than a raw hash (which would jump randomly every step). +// Smoothness: neighboring positions WITHIN a cell (sub-256 steps) differ only a little: that's +// what makes it noise rather than a raw hash (which would jump randomly every step). TEST_CASE("noise: inoise8 varies smoothly inside a cell") { // Walk across one cell (x from 0x100 to 0x1FF — cell index 1) in small steps; consecutive // samples must not jump wildly. (Across a cell BOUNDARY it can change more — that's expected.) @@ -89,9 +88,42 @@ TEST_CASE("16-bit interpolation stays exact across the full range") { } TEST_CASE("16-bit noise is smooth where the 8-bit form would step") { - // The whole point of the tier: sampling finer than the 8-bit LUT resolves must produce - // intermediate values rather than a staircase. + // The whole point of the tier: sampling finer than an 8-bit fraction resolves must produce + // intermediate values rather than a staircase. Four cells along x at a fixed y, sixteen samples + // per 8-bit step: a field stepping at 8 bits could show at most 4 * 256 distinct values. std::set values; - for (uint32_t f = 0; f < 256; f++) values.insert(inoise16(0x10000u + f * 16u)); - CHECK(values.size() > 150); // a stepped field repeats a handful; rounding costs a few + for (uint32_t f = 0; f < 4u * 4096u; f++) values.insert(inoise16(0x10000u + f * 16u, 0x18000u)); + CHECK(values.size() > 2000); +} + +TEST_CASE("fbm keeps its full range however many octaves are summed") { + // Octaves are near-independent, so their spread grows like the root of the sum of squares while + // the normalizer divides by the sum of amplitudes. Left uncorrected the field narrows with every + // octave added: 4 octaves measured 54..199 of 0..255, so an effect stretching the top of the + // field could never reach full brightness and every fbm read flatter than the noise under it. + for (uint8_t octaves = 1; octaves <= 4; octaves++) { + uint8_t lo = 255, hi = 0; + for (uint32_t y = 0; y < 1200; y += 7) + for (uint32_t x = 0; x < 1200; x += 7) { + const uint8_t v = fbm8(x * 40, y * 40, octaves); + lo = v < lo ? v : lo; + hi = v > hi ? v : hi; + } + CHECK(lo < 32); // reaches the dark end + CHECK(hi > 224); // and the bright end, at every octave count + } +} + +TEST_CASE("16-bit fbm keeps its range too") { + for (uint8_t octaves = 1; octaves <= 4; octaves++) { + uint16_t lo = 65535, hi = 0; + for (uint32_t y = 0; y < 900; y += 7) + for (uint32_t x = 0; x < 900; x += 7) { + const uint16_t v = fbm16(x * 2600, y * 2600, octaves); + lo = v < lo ? v : lo; + hi = v > hi ? v : hi; + } + CHECK(lo < 8192); + CHECK(hi > 57343); + } } diff --git a/test/unit/light/unit_AuroraEffect.cpp b/test/unit/light/unit_AuroraEffect.cpp new file mode 100644 index 00000000..f2efa2e5 --- /dev/null +++ b/test/unit/light/unit_AuroraEffect.cpp @@ -0,0 +1,133 @@ +// @module AuroraEffect +// @also polar, oscillators, noise + +// Aurora is a composition rather than a picture of anything, so what is pinned here is that the +// composition behaves: that curtains appear and are distinct rather than an even haze, that the +// contrast control decides how much of the field lights, that the layers move independently, and +// that raising the cost knob costs something. The golden pins the plumbing; these pin the look. + +#include "doctest.h" +#include "light/effects/AuroraEffect.h" +#include "light/layers/Layer.h" +#include "light/layouts/GridLayout.h" +#include "light/layouts/Layouts.h" +#include "platform/platform.h" + +#include +#include + +using namespace mm; + +namespace { + +/// Render Aurora with `configure` applied, and return the final frame. +template +std::vector render(lengthType w, lengthType h, F configure, uint16_t frames = 60, uint32_t startMs = 1000) { + platform::setTestNowMs(startMs); + Layouts layouts; + GridLayout grid; + Layer layer; + AuroraEffect effect; + configure(effect); + grid.width = w; grid.height = h; grid.depth = 1; + layouts.addChild(&grid); + layer.setLayouts(&layouts); + layer.setChannelsPerLight(3); + layer.addChild(&effect); + layer.applyState(); + for (uint16_t f = 0; f < frames; f++) { + platform::setTestNowMs(startMs + static_cast(f) * 20); + layer.tick(); + } + auto& buf = layer.buffer(); + return std::vector(buf.data(), buf.data() + buf.bytes()); +} + +/// The share of channels that are lit at all. +double litShare(const std::vector& f) { + std::size_t lit = 0; + for (uint8_t v : f) lit += v > 8 ? 1 : 0; + return double(lit) / f.size(); +} + +/// How many channels differ between two frames. +std::size_t differing(const std::vector& a, const std::vector& b) { + std::size_t n = 0; + for (std::size_t i = 0; i < a.size() && i < b.size(); i++) n += a[i] != b[i] ? 1 : 0; + return n; +} + +} // namespace + +TEST_CASE("the contrast control decides how much of the field lights up") { + // This is what makes Aurora curtains rather than cloud: a high window leaves only the peaks of + // the field visible, a low one lets most of it through. + const auto sharp = render(32, 32, [](AuroraEffect& e) { e.contrast = 200; }); + const auto soft = render(32, 32, [](AuroraEffect& e) { e.contrast = 40; }); + CHECK(litShare(sharp) < litShare(soft)); + CHECK(litShare(sharp) < 0.5); // a minority of the panel is curtain + CHECK(litShare(soft) > 0.5); // and the field itself covers it +} + +TEST_CASE("curtains appear rather than an even wash of light") { + // A field that lit every pixel equally would be a blur. The frame must have real dark and real + // bright in it at the default contrast. + const auto frame = render(32, 32, [](AuroraEffect&) {}); + uint8_t lo = 255, hi = 0; + for (uint8_t v : frame) { lo = v < lo ? v : lo; hi = v > hi ? v : hi; } + CHECK(lo < 16); // somewhere is genuinely dark + CHECK(hi > 200); // somewhere is genuinely bright +} + +TEST_CASE("the composition keeps moving, and no two moments look alike") { + const auto early = render(32, 32, [](AuroraEffect&) {}, 30); + const auto late = render(32, 32, [](AuroraEffect&) {}, 240); + CHECK(differing(early, late) > early.size() / 8); +} + +TEST_CASE("a still speed holds the picture, so a fixture can be frozen") { + const auto a = render(32, 32, [](AuroraEffect& e) { e.speed = 0; }, 30); + const auto b = render(32, 32, [](AuroraEffect& e) { e.speed = 0; }, 240); + CHECK(differing(a, b) == 0); +} + +TEST_CASE("each layer adds structure, so the cost knob buys something") { + // One layer is a single field; three layers interfere. If more layers changed nothing, the + // effect's main control would be paying for nothing. + const auto one = render(32, 32, [](AuroraEffect& e) { e.layers = 1; }); + const auto three = render(32, 32, [](AuroraEffect& e) { e.layers = 3; }); + CHECK(differing(one, three) > one.size() / 4); +} + +TEST_CASE("the kaleidoscope fold makes the composition symmetric") { + // Folding the angle into wedges must actually repeat the field around the center. + const auto folded = render(33, 33, [](AuroraEffect& e) { e.segments = 4; e.twist = 0; }); + // Sample a ring of pixels and check the fold repeats: opposite wedges carry the same field. + const std::size_t w = 33; + std::size_t same = 0, total = 0; + for (std::size_t k = 4; k < 16; k++) { + const std::size_t left = (16 * w + (16 - k)) * 3; + const std::size_t right = (16 * w + (16 + k)) * 3; + const int d = folded[left] > folded[right] ? folded[left] - folded[right] + : folded[right] - folded[left]; + same += d < 32 ? 1 : 0; + total++; + } + CHECK(same * 2 >= total); // the mirrored halves largely agree +} + +TEST_CASE("Aurora renders on a grid too small to have a center") { + // Robustness: any size, any order. A 1x1 and a 2x1 grid must not fault or divide by zero. + const auto tiny = render(1, 1, [](AuroraEffect&) {}, 5); + CHECK(tiny.size() == 3); + const auto strip = render(2, 1, [](AuroraEffect&) {}, 5); + CHECK(strip.size() == 6); +} + +TEST_CASE("Aurora renders the same picture whether or not the polar table is available") { + // The table is an optimization, not part of the look: a device that cannot spare the memory + // gets the same composition. + const auto tabled = render(32, 32, [](AuroraEffect& e) { e.widePolarTable = true; }); + const auto exact = render(32, 32, [](AuroraEffect& e) { e.usePolarTable = false; }); + CHECK(differing(tabled, exact) == 0); +} diff --git a/test/unit/light/unit_Canvas.cpp b/test/unit/light/unit_Canvas.cpp index d8015787..ec667d37 100644 --- a/test/unit/light/unit_Canvas.cpp +++ b/test/unit/light/unit_Canvas.cpp @@ -66,7 +66,7 @@ TEST_CASE("Canvas pixel writes land where get reads them, and clip outside") { CHECK(c.b == 30); // A write outside the grid is silently dropped, and reading there is black — never a crash and - // never a stray byte in a neighbouring light (the robustness rule). + // never a stray byte in a neighboring light (the robustness rule). draw::pixel(s.cv, {99, 99, 0}, RGB{255, 255, 255}); const RGB out = draw::get(s.cv, {99, 99, 0}); CHECK(out.r == 0); diff --git a/test/unit/light/unit_Circle.cpp b/test/unit/light/unit_Circle.cpp index ca19a525..8cb269e4 100644 --- a/test/unit/light/unit_Circle.cpp +++ b/test/unit/light/unit_Circle.cpp @@ -117,7 +117,7 @@ TEST_CASE("a negative radius draws nothing") { // The reason lineAA exists: a diagonal that is not at 45 degrees lands between cells, and Wu // splits it rather than snapping. A perfectly diagonal line has nothing to split. -TEST_CASE("an anti-aliased line spreads a shallow diagonal over neighbouring cells") { +TEST_CASE("an anti-aliased line spreads a shallow diagonal over neighboring cells") { Surface s(8, 8); draw::lineAA(s.cv, {0, 0, 0}, {7, 3, 0}, RGB{255, 0, 0}); // Somewhere along the run, two vertically-adjacent cells are both partly lit — the AA signature. diff --git a/test/unit/light/unit_Drivers_container.cpp b/test/unit/light/unit_Drivers_container.cpp index a8e7ab01..d7db532a 100644 --- a/test/unit/light/unit_Drivers_container.cpp +++ b/test/unit/light/unit_Drivers_container.cpp @@ -4,6 +4,7 @@ #include "light/drivers/Drivers.h" #include "light/drivers/LightPresetsModule.h" // the non-deletable boot-wired preset library #include "../core/conditional_controls.h" // mm::test::setControlValue +#include "platform/platform.h" // gpioRead: the desktop reads back what gpioWrite put there #include @@ -207,3 +208,30 @@ TEST_CASE("a probe Drivers (controls read, never prepared) leaves the scripted-p CHECK(std::strcmp(mm::LivePalettes::nameAt(0), "running.mlp") == 0); mm::LivePalettes::clear(); } + +// The power relay is the physical expression of "the lights are off", and brightness 0 is off as +// much as `on` = false is: a WLED-style client says off by sending bri 0 without touching `on`, and +// a strip at zero still draws its idle current through a closed relay. So the relay opens at +// brightness 0 and closes again the moment brightness returns, with `on` unchanged either way. +TEST_CASE("the relay opens at brightness 0 and closes again when brightness returns") { + mm::platform::clearTestGpioLevel(); + mm::Drivers drivers; + std::strcpy(drivers.relayPins, "12"); + drivers.on = true; + drivers.brightness = 100; + drivers.onControlChanged("relayPins"); // entering the pin closes the relay at once + CHECK(mm::platform::gpioRead(12)); + + drivers.brightness = 0; + drivers.onControlChanged("brightness"); + CHECK_FALSE(mm::platform::gpioRead(12)); // off by brightness, `on` still true + + drivers.brightness = 1; + drivers.onControlChanged("brightness"); + CHECK(mm::platform::gpioRead(12)); // the smallest non-zero brightness is on + + drivers.on = false; + drivers.onControlChanged("on"); + CHECK_FALSE(mm::platform::gpioRead(12)); // and `on` still opens it whatever brightness says + mm::platform::clearTestGpioLevel(); +} diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index 1b42cbb2..cef94da8 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -60,6 +60,7 @@ #include "light/effects/NoiseEffect.h" #include "light/effects/PlasmaEffect.h" #include "light/effects/RainbowEffect.h" +#include "light/effects/AuroraEffect.h" #include "light/effects/RingsEffect.h" #include "light/effects/SdfShapesEffect.h" #include "light/effects/PolarNoiseEffect.h" @@ -89,11 +90,29 @@ using namespace mm; // throttling it twice. BouncingBalls moved because the Layer now resets its fade clock in // prepare(), which discards the idle gap before the first frame: the guarantee LissajousEffect used // to give for its own trail, given once for every effect. Reviewed and re-blessed together. +// Four goldens moved on 2026-09-03 when the noise core became Perlin improved gradient noise +// (PolarNoise, Tunnel, Noise, Noise2D). The names, coordinates and output ranges are unchanged; the +// field itself is a different, smoother one, which is the point of the swap. No other golden moved, +// which is the evidence that the change is confined to the noise callers. +// The three fbm effects (PolarNoise, Tunnel, Aurora) moved again on 2026-09-04 when fbm stopped +// narrowing its own range: octaves are near-independent, so their spread grows like the root of the +// sum of squares while the normalizer divides by the sum of amplitudes, and 4 octaves had shrunk to +// 54..199 of 0..255. Every fbm field is now higher contrast, which is a visible improvement rather +// than a neutral change; unit_noise pins the range at every octave count. +// Tunnel moved on 2026-09-04 for the same reason as PolarNoise below, and Spiral moved with them +// (it has no golden). All three are pinned instead by unit_PolarLut_equivalence, which renders each +// through the table and through the computed address and requires the 16-bit table to be identical. +// PolarNoise moved again on 2026-09-04: it reads its per-pixel angle and radius from PolarLut +// instead of calling atan16 and dist16 every frame, and takes its drift from an oscillator. The +// address is the same one, and unit_PolarLut_equivalence pins that the 16-bit table renders +// BIT-IDENTICALLY to the computed path; the default 8-bit table quantizes the angle to 256 steps, +// which is what moved the hash. TEST_CASE("time-driven effects render byte-identical frames (migration guard)") { SUBCASE("two SDF shapes orbit and melt together, with a soft edge") { SdfShapesEffect e; golden::checkGolden("SdfShapesEffect", golden::renderHash(e, 16, 16, 1), 0xbcfb74b4836606a3ull); } - SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x5e888644938f8851ull); } + SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x8d48e0d1e0180610ull); } + SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } - SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0xa2f6752d82436fc1ull); } + SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } SUBCASE("the previous frame fed back zoomed and rotated, leaving trails") { EchoEffect e; golden::checkGolden("EchoEffect", golden::renderHash(e, 16, 16, 1), 0x53d2ba4d4fdf9499ull); } SUBCASE("two colour fields trade places pixel by pixel") { DissolveEffect e; golden::checkGolden("DissolveEffect", golden::renderHash(e, 16, 16, 1), 0xeb7810ca874152bcull); } SUBCASE("shells rise, stall at their apex and burst into falling sparks") { FireworksEffect e; golden::checkGolden("FireworksEffect", golden::renderHash(e, 16, 16, 1), 0x5ffbfcab94c90a94ull); } @@ -107,7 +126,7 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("arc tiles join into endless winding paths") { TruchetEffect e; golden::checkGolden("TruchetEffect", golden::renderHash(e, 16, 16, 1), 0xdcb9b41536eff043ull); } SUBCASE("SineEffect") { SineEffect e; golden::checkGolden("SineEffect", golden::renderHash(e, 16, 16, 1), 0xe96c6fd2da1b264bull); } SUBCASE("PlasmaEffect") { PlasmaEffect e; golden::checkGolden("PlasmaEffect", golden::renderHash(e, 16, 16, 1), 0xfe821e9102099b93ull); } - SUBCASE("NoiseEffect") { NoiseEffect e; golden::checkGolden("NoiseEffect", golden::renderHash(e, 16, 16, 1), 0xdeb42f569f324cebull); } + SUBCASE("NoiseEffect") { NoiseEffect e; golden::checkGolden("NoiseEffect", golden::renderHash(e, 16, 16, 1), 0xf3c36c9cccfdd04full); } SUBCASE("DistortionWavesEffect") { DistortionWavesEffect e; golden::checkGolden("DistortionWavesEffect", golden::renderHash(e, 16, 16, 1), 0xe4cd8111e8159133ull); } SUBCASE("LavaLampEffect") { LavaLampEffect e; golden::checkGolden("LavaLampEffect", golden::renderHash(e, 16, 16, 1), 0x3c312e8a75b9ac83ull); } SUBCASE("MetaballsEffect") { MetaballsEffect e; golden::checkGolden("MetaballsEffect", golden::renderHash(e, 16, 16, 1), 0x96a26bf931ad8341ull); } @@ -119,7 +138,7 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("BouncingBallsEffect") { BouncingBallsEffect e; golden::checkGolden("BouncingBallsEffect", golden::renderHash(e, 16, 16, 1), 0x8b89c982e566f5b4ull); } SUBCASE("FixedRectangleEffect") { FixedRectangleEffect e; golden::checkGolden("FixedRectangleEffect", golden::renderHash(e, 16, 16, 1), 0x22b828f908e9ce1cull); } SUBCASE("LissajousEffect") { LissajousEffect e; golden::checkGolden("LissajousEffect", golden::renderHash(e, 16, 16, 1), 0x7a5f13102f039d12ull); } - SUBCASE("Noise2DEffect") { Noise2DEffect e; golden::checkGolden("Noise2DEffect", golden::renderHash(e, 16, 16, 1), 0xefbc5485de148631ull); } + SUBCASE("Noise2DEffect") { Noise2DEffect e; golden::checkGolden("Noise2DEffect", golden::renderHash(e, 16, 16, 1), 0xf8cfe517a606b68bull); } SUBCASE("PraxisEffect") { PraxisEffect e; golden::checkGolden("PraxisEffect", golden::renderHash(e, 16, 16, 1), 0x0420f0404b3f12c5ull); } SUBCASE("SolidEffect") { SolidEffect e; golden::checkGolden("SolidEffect", golden::renderHash(e, 16, 16, 1), 0x56711c1cf0c8ae83ull); } SUBCASE("SphereMoveEffect") { SphereMoveEffect e; golden::checkGolden("SphereMoveEffect", golden::renderHash(e, 16, 16, 1), 0xb3f3d7c75fe49fdbull); } diff --git a/test/unit/light/unit_MoonLiveScripts.cpp b/test/unit/light/unit_MoonLiveScripts.cpp index 5ce711af..867f36ee 100644 --- a/test/unit/light/unit_MoonLiveScripts.cpp +++ b/test/unit/light/unit_MoonLiveScripts.cpp @@ -311,7 +311,7 @@ TEST_CASE("a script reads elapsed time, so it can animate") { // (adjacent points inside one cell differ a little, not wildly) and it actually VARIES across the // field (a constant would be smooth too, and useless). #if MM_MOONLIVE_HAS_HOST_JIT -TEST_CASE("noise is smooth across neighbouring points, and varies across the field") { +TEST_CASE("noise is smooth across neighboring points, and varies across the field") { uint8_t code[4096]; // One light per sample: light i gets the noise at x = i * 64, so the 32 lights walk 8 whole // cells (256 units each) and the buffer IS a real slice of the field, not a corner of one cell. diff --git a/test/unit/light/unit_Particles.cpp b/test/unit/light/unit_Particles.cpp index f4493f8f..c1beeff2 100644 --- a/test/unit/light/unit_Particles.cpp +++ b/test/unit/light/unit_Particles.cpp @@ -703,7 +703,7 @@ TEST_CASE("spreadLane gives every slot its own lane, for any count") { TEST_CASE("spreadLane interleaves rather than striding in order") { // EVERY consecutive pair must be non-adjacent, not merely one of them. The weaker form of // this test passed against a stride of `slots - 1`, which is coprime but congruent to -1, so - // consecutive slots walked DOWN neighbouring lanes and nothing was interleaved at all. + // consecutive slots walked DOWN neighboring lanes and nothing was interleaved at all. constexpr mm::lengthType kExtent = 27720; // lcm(1..12): every count below divides it for (uint16_t slots = 5; slots <= 12; slots++) { if (slots == 6) continue; // 6 has no coprime near 3 (2 and 3 both share a factor) diff --git a/test/unit/light/unit_PolarLut.cpp b/test/unit/light/unit_PolarLut.cpp new file mode 100644 index 00000000..63c3fe4f --- /dev/null +++ b/test/unit/light/unit_PolarLut.cpp @@ -0,0 +1,218 @@ +// @module polar +// @also math16, ScratchBuffer + +// The polar address table: the angle and radius of every pixel, computed once instead of per frame. +// These pin what a radial effect depends on when it reads the table instead of calling atan16 and +// dist16: that the address is the same one it would have computed, that the center and the edges +// land where the geometry says, that resizing the grid rebuilds it, and that a device too tight for +// the tables still renders rather than crashing. + +#include "doctest.h" +#include "core/MoonModule.h" +#include "light/polar.h" +#include "platform/platform.h" + +#include + +using namespace mm; + +namespace { + +/// A bare module to own the tables, the fixture the ScratchBuffer tests use. +struct Owner : MoonModule { + PolarLut lut{*this}; +}; + +/// The signed difference between two angles, the short way around the circle. +int32_t angleDelta(angle16 a, angle16 b) { + int32_t d = static_cast(a) - static_cast(b); + if (d > 32768) d -= 65536; + if (d < -32768) d += 65536; + return d < 0 ? -d : d; +} + +} // namespace + +TEST_CASE("the table gives the same angle a radial effect would compute per pixel") { + Owner o; + REQUIRE(o.lut.prepare(32, 32, /*wide=*/true)); + const int32_t cx = 16, cy = 16; + for (uint16_t y = 0; y < 32; y++) { + for (uint16_t x = 0; x < 32; x++) { + const angle16 expected = atan16(static_cast(y) - cy, static_cast(x) - cx); + CHECK(o.lut.angleAt(x, y) == expected); + } + } +} + +TEST_CASE("the 8-bit table is the same address at 256 steps, which is what it costs half the memory for") { + Owner o; + REQUIRE(o.lut.prepare(24, 24, /*wide=*/false)); + const int32_t cx = 12, cy = 12; + int32_t worst = 0; + for (uint16_t y = 0; y < 24; y++) + for (uint16_t x = 0; x < 24; x++) { + const angle16 exact = atan16(static_cast(y) - cy, static_cast(x) - cx); + const int32_t d = angleDelta(o.lut.angleAt(x, y), exact); + worst = d > worst ? d : worst; + } + CHECK(worst < 256); // within one 8-bit step of the exact angle, never further +} + +TEST_CASE("the radius runs from nothing at the center to full scale at the furthest corner") { + Owner o; + REQUIRE(o.lut.prepare(33, 33, true)); + CHECK(o.lut.radiusAt(16, 16) == 0); // the center pixel + CHECK(o.lut.radiusAt(0, 0) == 65535); // a corner, the furthest point + CHECK(o.lut.radiusAt(32, 32) > 60000); + // Halfway out along an axis is about half the scale of the diagonal corner. + CHECK(o.lut.radiusAt(32, 16) > 40000); + CHECK(o.lut.radiusAt(32, 16) < 55000); +} + +TEST_CASE("a wide panel fills to its edges instead of banding in a circle inside it") { + // The aspect-ratio property: radii scale against the furthest corner, so a 64x16 strip reaches + // full scale at its ends rather than saturating everywhere past the short axis. + Owner o; + REQUIRE(o.lut.prepare(64, 16, true)); + CHECK(o.lut.radiusAt(0, 8) > 55000); // the far end of the long axis + CHECK(o.lut.radiusAt(32, 0) < 40000); // the edge of the short axis is nearer + CHECK(o.lut.radiusAt(32, 8) == 0); +} + +TEST_CASE("angles point the way the geometry says") { + Owner o; + REQUIRE(o.lut.prepare(65, 65, true)); + // atan16(dy, dx): zero along +x, a quarter turn per axis, going the way atan2 goes. + CHECK(angleDelta(o.lut.angleAt(64, 32), 0) < 512); + CHECK(angleDelta(o.lut.angleAt(32, 64), 16384) < 512); + CHECK(angleDelta(o.lut.angleAt(0, 32), 32768) < 512); + CHECK(angleDelta(o.lut.angleAt(32, 0), 49152) < 512); +} + +TEST_CASE("opposite sides of the center face opposite ways") { + Owner o; + REQUIRE(o.lut.prepare(41, 41, true)); + for (uint16_t k = 1; k < 20; k++) { + const angle16 a = o.lut.angleAt(static_cast(20 + k), 20); + const angle16 b = o.lut.angleAt(static_cast(20 - k), 20); + CHECK(angleDelta(a, static_cast(b + 32768)) < 512); + CHECK(o.lut.radiusAt(static_cast(20 + k), 20) == o.lut.radiusAt(static_cast(20 - k), 20)); + } +} + +TEST_CASE("resizing the grid rebuilds the table for the new geometry") { + Owner o; + REQUIRE(o.lut.prepare(16, 16, true)); + const uint16_t small = o.lut.radiusAt(0, 0); + const std::size_t smallBytes = o.lut.bytes(); + + REQUIRE(o.lut.prepare(64, 64, true)); + CHECK(o.lut.bytes() == smallBytes * 16); // 16x the pixels + CHECK(o.lut.radiusAt(0, 0) == small); // a corner is still a corner + CHECK(o.lut.radiusAt(32, 32) == 0); // but the center moved with the grid +} + +TEST_CASE("preparing the same geometry again costs nothing") { + Owner o; + REQUIRE(o.lut.prepare(32, 32, false)); + const angle16 before = o.lut.angleAt(7, 9); + const std::size_t bytes = o.lut.bytes(); + for (int i = 0; i < 100; i++) CHECK(o.lut.prepare(32, 32, false)); // as a tick() would + CHECK(o.lut.angleAt(7, 9) == before); + CHECK(o.lut.bytes() == bytes); +} + +TEST_CASE("switching precision live does not hold both tables") { + // An effect offering precision as a control switches while running; the memory must follow. + Owner o; + REQUIRE(o.lut.prepare(32, 32, false)); + const std::size_t narrow = o.lut.bytes(); + CHECK(narrow == 32 * 32 * 2); // one byte of angle and one of radius + + REQUIRE(o.lut.prepare(32, 32, true)); + CHECK(o.lut.bytes() == 32 * 32 * 4); // two bytes each, and NOT six + CHECK(o.lut.wide()); + + REQUIRE(o.lut.prepare(32, 32, false)); + CHECK(o.lut.bytes() == narrow); + CHECK_FALSE(o.lut.wide()); +} + +TEST_CASE("the tables are the module's memory, freed with it") { + Owner o; + CHECK(o.dynamicBytes() == 0); + REQUIRE(o.lut.prepare(48, 48, true)); + CHECK(o.dynamicBytes() == 48 * 48 * 4); + REQUIRE(o.lut.prepare(48, 48, false)); + CHECK(o.dynamicBytes() == 48 * 48 * 2); +} + +TEST_CASE("an empty grid reports not ready instead of building a table of nothing") { + Owner o; + CHECK_FALSE(o.lut.prepare(0, 0, false)); + CHECK_FALSE(o.lut.ready()); + CHECK(o.lut.angle(0) == 0); // and reads are safe, not a fault + CHECK(o.lut.radius(0) == 0); +} + +TEST_CASE("a single-pixel grid is its own center") { + Owner o; + REQUIRE(o.lut.prepare(1, 1, true)); + CHECK(o.lut.radiusAt(0, 0) == 0); + CHECK(o.lut.maxRadius() >= 1); // never zero: nothing divides by it +} + +TEST_CASE("the index form and the coordinate form address the same pixel") { + // A pixel loop reads by running index; both must agree or a loop silently shears the field. + Owner o; + REQUIRE(o.lut.prepare(20, 12, true)); + for (uint16_t y = 0; y < 12; y++) + for (uint16_t x = 0; x < 20; x++) { + const std::size_t i = static_cast(y) * 20 + x; + CHECK(o.lut.angle(i) == o.lut.angleAt(x, y)); + CHECK(o.lut.radius(i) == o.lut.radiusAt(x, y)); + } +} + +TEST_CASE("the table is refused rather than taking the last of a small heap") { + // On a device without PSRAM the tables are a real fraction of the heap. Asking for a wall-sized + // grid must leave the reserve that protects stacks, WiFi and HTTP intact, and the caller then + // computes the address per pixel instead. The desktop reports unlimited heap, so this pins the + // arithmetic of the gate rather than the allocation. + Owner o; + const std::size_t reserve = platform::HEAP_RESERVE; + const std::size_t free = platform::freeHeap(); + if (free == 0) { + // Desktop: unlimited, so even a wall-sized table is granted and the fallback is unused. + CHECK(o.lut.prepare(128, 128, true)); + CHECK(o.lut.bytes() == 128 * 128 * 4); + } else { + const std::size_t budget = free > reserve ? free - reserve : 0; + const std::size_t want = 128u * 128u * 4u; + CHECK(o.lut.prepare(128, 128, true) == (budget >= want)); + } +} + +TEST_CASE("a refused table leaves nothing allocated behind") { + Owner o; + REQUIRE(o.lut.prepare(32, 32, false)); + CHECK(o.dynamicBytes() > 0); + CHECK_FALSE(o.lut.prepare(0, 0, false)); // an impossible grid + CHECK(o.lut.bytes() == 0); + CHECK(o.dynamicBytes() == 0); + CHECK_FALSE(o.lut.ready()); +} + +TEST_CASE("releasing the table gives the memory back and the next prepare rebuilds it") { + Owner o; + REQUIRE(o.lut.prepare(48, 48, false)); + const std::size_t held = o.dynamicBytes(); + CHECK(held == 48 * 48 * 2); + o.lut.release(); + CHECK(o.dynamicBytes() == 0); + CHECK_FALSE(o.lut.ready()); + REQUIRE(o.lut.prepare(48, 48, false)); + CHECK(o.dynamicBytes() == held); + CHECK(o.lut.radiusAt(24, 24) == 0); // and it is the same table as before +} diff --git a/test/unit/light/unit_PolarLut_equivalence.cpp b/test/unit/light/unit_PolarLut_equivalence.cpp new file mode 100644 index 00000000..328828ad --- /dev/null +++ b/test/unit/light/unit_PolarLut_equivalence.cpp @@ -0,0 +1,102 @@ +// @module polar +// @also PolarNoiseEffect + +// The migration check for the polar table: an effect reading the table must look like the same +// effect, not merely a plausible one. PolarNoise is rendered twice on the same grid at the same +// frames, once through the table and once computing atan16/dist16 per pixel, and the frames are +// compared pixel by pixel. This is the evidence behind the re-baselined golden. + +#include "doctest.h" +#include "light/effects/PolarNoiseEffect.h" +#include "light/effects/SpiralEffect.h" +#include "light/effects/TunnelEffect.h" +#include "light/layers/Layer.h" +#include "light/layouts/GridLayout.h" +#include "light/layouts/Layouts.h" +#include "platform/platform.h" + +#include +#include + +using namespace mm; + +namespace { + +/// Render one effect for `frames` and return the final buffer. `EffectT` is any effect carrying the +/// polar-table controls, so the same comparison covers every effect that reads the address. +template +std::vector render(lengthType w, lengthType h, bool useTable, bool wide = false, uint16_t frames = 60) { + platform::setTestNowMs(1000); + Layouts layouts; + GridLayout grid; + Layer layer; + EffectT effect; + effect.usePolarTable = useTable; + effect.widePolarTable = wide; + grid.width = w; grid.height = h; grid.depth = 1; + layouts.addChild(&grid); + layer.setLayouts(&layouts); + layer.setChannelsPerLight(3); + layer.addChild(&effect); + layer.applyState(); + for (uint16_t f = 0; f < frames; f++) { + platform::setTestNowMs(1000 + static_cast(f) * 20); + layer.tick(); + } + auto& buf = layer.buffer(); + return std::vector(buf.data(), buf.data() + buf.bytes()); +} + +/// The share of bytes that differ by more than `tol`, and the worst difference seen. +struct Diff { double share; int worst; }; +Diff compare(const std::vector& a, const std::vector& b, int tol) { + REQUIRE(a.size() == b.size()); + REQUIRE(!a.empty()); + std::size_t over = 0; + int worst = 0; + for (std::size_t i = 0; i < a.size(); i++) { + const int d = a[i] > b[i] ? a[i] - b[i] : b[i] - a[i]; + if (d > worst) worst = d; + if (d > tol) over++; + } + return {double(over) / a.size(), worst}; +} + +} // namespace + +TEST_CASE("the 16-bit table renders exactly what computing the address per pixel renders") { + // At full precision the table IS the computation, cached: same angle, same radius, same field. + // Anything less would mean the table had introduced an error of its own. Every effect that + // reads the address is checked, because each scales and truncates it differently. + SUBCASE("PolarNoise") { + const Diff d = compare(render(64, 64, true, true), render(64, 64, false), 0); + CHECK(d.worst == 0); + } + SUBCASE("Tunnel") { + const Diff d = compare(render(64, 64, true, true), render(64, 64, false), 0); + CHECK(d.worst == 0); + } + SUBCASE("Spiral") { + const Diff d = compare(render(64, 64, true, true), render(64, 64, false), 0); + CHECK(d.worst == 0); + } +} + +TEST_CASE("the 8-bit table costs a quantized angle, and nothing else") { + // The default trades 2 bytes per pixel for 256 angle steps. That shows up where the field is + // steepest and nowhere else, so most of the picture is untouched and no pixel is wildly wrong. + const auto tabled = render(64, 64, true); + const auto exact = render(64, 64, false); + const Diff d = compare(tabled, exact, 8); + CHECK(d.share < 0.15); // a minority of channels differ at all + const Diff gross = compare(tabled, exact, 64); + CHECK(gross.share < 0.02); // and almost none differ grossly +} + +TEST_CASE("an effect still renders when the polar table cannot be built") { + // Degrade visibly, never crash: with the table off the effect computes the address per pixel. + const auto exact = render(32, 32, false); + std::size_t lit = 0; + for (uint8_t v : exact) lit += v > 0 ? 1 : 0; + CHECK(lit > exact.size() / 4); +} diff --git a/test/unit/light/unit_Rings241Layout.cpp b/test/unit/light/unit_Rings241Layout.cpp new file mode 100644 index 00000000..09d40c91 --- /dev/null +++ b/test/unit/light/unit_Rings241Layout.cpp @@ -0,0 +1,99 @@ +// @module Rings241Layout +// @also SingleColumnLayout + +// Pins the 241-LED disc's wiring order. The disc is soldered either from the center LED outward +// (MoonLight's order, the default) or from the outer 60-LED ring inward, and a layout that only +// knew one would light the wrong ring for the other. The coordinates are the same set either way; +// what `outside in` changes is which index lands on which ring. + +#include "doctest.h" +#include "light/layouts/Rings241Layout.h" + +#include +#include + +namespace { + +struct CoordEntry { + mm::nrOfLightsType idx; + mm::lengthType x, y, z; + bool operator==(const CoordEntry& o) const { return x == o.x && y == o.y && z == o.z; } +}; + +void collectCoord(void* ctx, mm::nrOfLightsType idx, mm::lengthType x, mm::lengthType y, mm::lengthType z) { + static_cast*>(ctx)->push_back({idx, x, y, z}); +} + +std::vector coordsOf(const mm::LayoutBase& layout) { + std::vector out; + layout.placeLights(mm::CoordSink{collectCoord, nullptr, &out}); + return out; +} + +constexpr mm::nrOfLightsType kTotal = 241; +constexpr mm::nrOfLightsType kOuter = 60; // the largest ring, wired first when outside in + +} // namespace + +// Indices are contiguous 0..240 whatever the wiring order: a gap or a repeat is a light the driver +// never writes, so the disc would carry a permanently dark pixel. +TEST_CASE("Rings241 emits 241 consecutively indexed lights in either wiring order") { + for (bool outsideIn : {false, true}) { + mm::Rings241Layout disc; + disc.outside_in = outsideIn; + CHECK(disc.lightCount() == kTotal); + const auto coords = coordsOf(disc); + REQUIRE(coords.size() == kTotal); + for (mm::nrOfLightsType i = 0; i < kTotal; i++) CHECK(coords[i].idx == i); + } +} + +// The default wires from the center out: light 0 IS the center LED (the 1-LED ring), and the last +// sixty lights are the outer ring. This is MoonLight's order, so an existing disc keeps its picture. +TEST_CASE("Rings241 wires from the center outward by default") { + mm::Rings241Layout disc; + const auto coords = coordsOf(disc); + REQUIRE(coords.size() == kTotal); + // The center is the shared origin every ring is drawn around; the 1-LED ring sits exactly on it. + const auto& center = coords[0]; + // Every outer-ring light is farther from the center than every inner light: the outer sixty + // must be the last sixty, or the wiring order is not center-out. + auto dist2 = [&](const CoordEntry& c) { + const int dx = c.x - center.x, dy = c.y - center.y; + return dx * dx + dy * dy; + }; + int innerMax = 0; + for (mm::nrOfLightsType i = 1; i < kTotal - kOuter; i++) innerMax = std::max(innerMax, dist2(coords[i])); + for (mm::nrOfLightsType i = kTotal - kOuter; i < kTotal; i++) CHECK(dist2(coords[i]) > innerMax); +} + +// Outside in flips the ring SEQUENCE and nothing else: the first sixty lights are the outer ring in +// the same direction they were wired center-out, and the center LED is last. Asserted against the +// default's output ring by ring, so a reversal that also flipped the direction around a ring, or +// that moved a coordinate, is caught rather than passing on a symmetric disc. +TEST_CASE("outside in puts light 0 on the outer ring and the center LED last, rings unchanged inside") { + mm::Rings241Layout in, out; + out.outside_in = true; + const auto a = coordsOf(in); + const auto b = coordsOf(out); + REQUIRE(a.size() == kTotal); + REQUIRE(b.size() == kTotal); + + // Walk the default's rings from the last (outer) to the first (center) and expect them to appear + // in `out` in that order, each ring's own LED order intact. + constexpr mm::nrOfLightsType sizes[9] = {1, 8, 12, 16, 24, 32, 40, 48, 60}; + mm::nrOfLightsType starts[9]; + mm::nrOfLightsType acc = 0; + for (int r = 0; r < 9; r++) { starts[r] = acc; acc += sizes[r]; } + + mm::nrOfLightsType o = 0; + for (int r = 8; r >= 0; r--) { + for (mm::nrOfLightsType i = 0; i < sizes[r]; i++) { + CHECK(b[o] == a[starts[r] + i]); // same coordinate, same position within the ring + CHECK(b[o].idx == o); + o++; + } + } + CHECK(o == kTotal); + CHECK(b[kTotal - 1] == a[0]); // the center LED is the last light when wired outside in +} diff --git a/test/unit/light/unit_Splat.cpp b/test/unit/light/unit_Splat.cpp index 190674a8..eecba50e 100644 --- a/test/unit/light/unit_Splat.cpp +++ b/test/unit/light/unit_Splat.cpp @@ -1,7 +1,7 @@ // @module draw // @also Canvas -// draw::splat draws a point at a fractional position by spreading its light over the neighbouring +// draw::splat draws a point at a fractional position by spreading its light over the neighboring // pixels. What makes it correct rather than merely soft is conservation: a point contributes exactly // its own brightness, wherever it lands. If the weights summed to more than one pixel's worth, a // moving point would pulse brighter as it crossed cell boundaries; if less, it would dim. From e014ba301e5e9a137760fec4913a46cc9b25bfc7 Mon Sep 17 00:00:00 2001 From: ewowi Date: Fri, 4 Sep 2026 11:45:30 +0200 Subject: [PATCH 2/7] Give the field library three dimensions, and merge the two noise effects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every field kernel now has a 3D form, the polar address table covers volumetric fixtures under a choice of three projections, and Aurora, PolarNoise and Tunnel render through a cube instead of repeating one slice. Noise and Noise2D were the same effect and are now one, with a control choosing whether the field drifts across the fixture or morphs in place. The RMT driver gains a bit-timing control, so a 12V WS2811 strip works where the WS2812 default read as noise. Performance, desktop 20x20x20: Noise 961 us, Tunnel 1077, PolarNoise 1703, Aurora 2497. Every kernel within 1% of the previous commit, measured against it with one harness; 1D noise 6% faster. Core - fbm16, turbulence8 and warp8 gain 3D forms. warp8 shares one body across both arities, so the 2D form cannot drift from the 3D one and still compiles to four corners rather than eight: routing it through the 3D body cost 1.73x. - Noise output scales per arity. Halving regardless was right for 2D and 3D and wrong for 1D, which spanned only 64..192 of 0..255, so a 1D field read washed out against the same field sampled in 2D. Light domain - PolarLut takes a depth and a projection: cylindrical (the 2D behavior extended, and the default), spherical, radial. The choice is made once when the table is built, and only spherical allocates the third table its elevation needs. - A shared Controls struct replaces the member, option table, binding and prepare call that four effects had each copied. - Aurora, PolarNoise and Tunnel are Dim::D3. No golden moved: on a panel the depth term is zero at every light, so the 3D sample reduces exactly to the old one. - Noise absorbs Noise2D. `motion` picks drift or morph; the drift golden is unchanged and the second effect is deleted. - The relay list releases its old pins on a parse error. A typo mid-edit left the previous relays closed on GPIOs no control named any more, so a strip kept power through brightness zero with nothing explaining why. - RmtLedDriver gains `timing`: 800kHz WS2812B/SK6812, 400kHz WS2811, 800kHz WS2811 fast, and custom with the three nanosecond fields. Named by speed rather than by chip, because the names do not partition the timings. UI - fbm, warp and osc reach MoonLive scripts. osc drops its zero-rate special case, which held a triangle and a sawtooth at their midpoint rather than their start. Tests - Every kernel's 2D call equals its 3D call with z at zero, and z demonstrably changes the field. The three projections, their memory, and that all three agree at depth 1. Aurora and Noise on a strip, a panel and a cube alike. - The polar controls bind before an effect has a fixture, which segfaulted the framerate sweep when addControls asked for a depth it could not have. - Relay and RMT timing regressions, both control-checked against the bug. Docs/CI - CLAUDE.md: ask before running anything slow, and bench boards are free in risk rather than in the product owner's time. - The benchmark stopped dispatching through std::function, which it was partly measuring; performance.md records the halved figures and says why. - The advection budget was wrong under either reading of its own units: a single 128 RGB S3 pass is 8.2 ms, not the 4 ms stated for two. Reviews - 🐇 1D noise halved twice: fixed, full range restored. - 🐇 bench measured its own dispatch: fixed, numbers re-recorded. - 🐇 relay pins held after a parse error: fixed with a regression test. - 🐇 scenario measured Aurora and PolarNoise together: PolarNoise removed first. - 🐇 Aurora cost formula ignored warp's two probes: now layers x (octaves + 2). - 🐇 CLAUDE.md permitted free flashing while another rule forbade it: reconciled. - 🐇 advection budget internally inconsistent: recomputed. - 🐇 phase-2 note hardcoded 3 channels: now channelsPerLight. - 🐇 osc zero-rate special case: removed. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 12 +- .../generative-fields-analysis-top-down.md | 93 ++++++- docs/backlog/moonlive-language-roadmap.md | 34 ++- docs/metrics/repo-health.json | 170 +++++++------ docs/metrics/repo-health.md | 96 ++++---- docs/moonmodules/light/drivers.md | 3 + docs/moonmodules/light/effects.md | 28 +-- docs/performance.md | 31 +-- src/core/noise.h | 112 +++++++-- src/light/drivers/Drivers.h | 7 + src/light/drivers/RmtLedDriver.h | 77 ++++++ src/light/effects/AuroraEffect.h | 37 ++- src/light/effects/Noise2DEffect.h | 62 ----- src/light/effects/NoiseEffect.h | 102 ++++---- src/light/effects/PolarNoiseEffect.h | 41 ++-- src/light/effects/SpiralEffect.h | 14 +- src/light/effects/TunnelEffect.h | 40 ++-- src/light/moonlive/MoonLiveBuiltins_light.h | 5 +- src/light/polar.h | 187 +++++++++++++-- src/main.cpp | 2 - test/CMakeLists.txt | 1 + test/bench/bench_kernels.cpp | 72 +++--- .../scenario_MoonModule_control_change.json | 26 +- .../light/scenario_Audio_mutation.json | 26 +- test/scenarios/light/scenario_Aurora_fps.json | 80 +++---- .../light/scenario_Driver_mutation.json | 20 +- .../light/scenario_Effects_composition.json | 6 +- .../light/scenario_Fields_polar_lut.json | 88 +++---- .../light/scenario_GridBlacks_blackpixel.json | 12 +- .../light/scenario_GridLayout_resize.json | 22 +- .../light/scenario_Layer_base_pipeline.json | 4 +- .../light/scenario_Layer_memory_1to1.json | 4 +- .../light/scenario_Layouts_mutation.json | 18 +- .../scenario_MoonLiveEffect_livescript.json | 40 ++-- .../light/scenario_MoonLive_pipeline.json | 22 +- .../scenario_MultiplyModifier_memory_lut.json | 6 +- .../scenario_MultiplyModifier_pipeline.json | 8 +- .../light/scenario_modifier_chain.json | 20 +- .../light/scenario_modifier_swap.json | 14 +- test/scenarios/light/scenario_perf_full.json | 116 ++++----- test/scenarios/light/scenario_perf_light.json | 20 +- .../light/scenario_peripheral_grid_sweep.json | 88 +++---- .../light/scenario_peripheral_switch.json | 24 +- test/unit/core/unit_noise.cpp | 31 +++ test/unit/light/unit_AuroraEffect.cpp | 55 ++++- test/unit/light/unit_Drivers_container.cpp | 34 +++ test/unit/light/unit_Effects_golden.cpp | 2 - test/unit/light/unit_Noise2DEffect.cpp | 91 ------- test/unit/light/unit_NoiseEffect.cpp | 226 +++++++----------- test/unit/light/unit_PolarLut.cpp | 118 +++++++++ test/unit/light/unit_PolarLut_equivalence.cpp | 4 +- test/unit/light/unit_RmtLedDriver_pins.cpp | 87 +++++++ 52 files changed, 1555 insertions(+), 983 deletions(-) delete mode 100644 src/light/effects/Noise2DEffect.h delete mode 100644 test/unit/light/unit_Noise2DEffect.cpp diff --git a/CLAUDE.md b/CLAUDE.md index 1757597b..b7f3b2b4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -204,13 +204,13 @@ when the next step cannot happen without it: code that must compile before it ca that must run before its result can be read. Not after every edit, and not to re-confirm what the last build already proved. -**Fast cycles: be sparse with anything slow.** The general form, applying to every expensive step: -ESP32 builds, full-suite runs, scenario runs, gate lists, repo-wide sweeps. Run the cheapest thing -that answers the question at hand (one test case, one check), and save the heavy step for when its -answer is actually needed or the PO asks. A minute per step compounds across a session into the PO -waiting instead of working. +**Fast cycles: ASK before running anything slow.** Applies to every expensive step: ESP32 builds, +full scenario sweeps, gate lists, repo-wide sweeps, `collect_kpi`. Run the cheapest thing that +answers the question at hand (one test case, one scenario by name, one check); when the heavy one is +actually needed, say what it is and why, then wait for the go-ahead. A minute per step compounds +across a session into the PO waiting instead of working, and a sweep run twice wastes it twice. -**Bench boards are free test rigs.** Build and flash freely to verify work; re-probe ports first. A *rigorous* change (anything that could brick, boot-loop, or wipe a board: flash erases, boot/partition/build-config changes, a first flash of an untested board) gets a one-sentence heads-up and a go-ahead first — the test is reversibility. +**Bench boards cost nothing to break, but they cost the PO's time to use.** They are free test rigs in the sense that matters for RISK: nothing on them is precious, so verifying on one needs no ceremony. They are not free in TIME, which is why the flashing rule above stands: the PO says when a board is written to. Re-probe ports first, since they drift between sessions. A *rigorous* change (anything that could brick, boot-loop, or wipe a board: flash erases, boot/partition/build-config changes, a first flash of an untested board) needs a one-sentence heads-up on top of the normal go-ahead, because there the test is reversibility rather than time. **Invite the product owner to test, then STOP.** If the PO could see or judge the result, hand it over ("running on X, look at Y") and wait for their observation before concluding, documenting, or moving on. Leave the state running; don't revert, reflash, or reconfigure what they were about to look at. diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md index 2ca759ea..61d8e88c 100644 --- a/docs/backlog/generative-fields-analysis-top-down.md +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -20,7 +20,7 @@ An unmarked line is context or rationale. - **(proposal) MoonLive operates on the Layer, not on a handle.** With the Layer at 16 bits the frame buffer IS the wide state, so advection, decay and the emitters are whole-frame builtins on the script's own layer, the shape `fill` and `fade` already have; the polar LUT and the oscillator bank are handles declared in `defineControls()`, the shape `pool()` has. Multi-argument host calls already ship (`emit` takes seven), so nothing here waits on the engine; the one engine change is the pixel-store inline ops learning the 16-bit element (§ 4). - **Budgets are the bottom-up's, restated as targets per target.** Shaders: samples per pixel against ~750 cycles per sample on the S3, ~250 on the P4; advection: cycles per frame plus bytes of state, PSRAM-class for walls. Framerate is protected by rule: every kernel is `dt`-driven, transport stays sub-pixel per frame, and a showcase must hold its stated fps on its stated fixture or its cost knob is the default (§ 5). - **Four showcases, three plus fluid**, specified to the control level: *Aurora* (a pure shader), *Trails* (emitters and flows), *Nebula* (a shader feeding a flow), *Fluid* (the solver, P4 and desktop) (§ 6). -- **Six phases, desktop first, bench last; the product owner decides when enough is done to commit.** Noise swap; fields and Aurora; the 16-bit Layer; advection and Trails; composition, dithering and SIMD; fluid. The catalog sweep that decision 5 mandates is a follow-on plan, fed by the [effects × power functions inventory](effects-power-function-inventory.md); only the effects a phase touches directly (the noise effects in phase 0, PolarNoise in phase 1, the raw-byte writers in phase 2) are rewritten inside this plan. Each phase lands with its unit tests, its goldens, its scenario, its MoonLive builtins and script, and its catalog cards (§ 8). +- **Eight phases, desktop first, bench last; the product owner decides when enough is done to commit.** Noise swap; fields and Aurora; three dimensions everywhere; Coord3D in MoonLive; the 16-bit Layer; advection and Trails; composition, dithering and SIMD; fluid. The catalog sweep that decision 5 mandates is a follow-on plan, fed by the [effects × power functions inventory](effects-power-function-inventory.md); only the effects a phase touches directly (the noise effects in phase 0, PolarNoise in phase 1, the raw-byte writers in phase 2) are rewritten inside this plan. Each phase lands with its unit tests, its goldens, its scenario, its MoonLive builtins and script, and its catalog cards (§ 8). ## 0. Inputs and the decisions taken @@ -103,7 +103,7 @@ No path you have today gets slower: the 8-bit instantiations are the same code c ### The surface, counted -What touches Layer bytes and therefore changes in phase 2: `Buffer` (bytes per channel, 1 or 2), `Canvas` (a sample-width field), the 25 `Canvas` and 12 `Buffer` overloads in `draw.h` (one template each), `BlendMap` (identity and LUT paths, both widths), `Layer::extrude` and `fadeToBlackBy` (bytes-per-light already, width-agnostic after the template), `Correction::apply` (16-bit input, quantize to the declared wire width; the one quantization site), `DriverBase` (the declared wire width), `PreviewDriver` (quantized through the same path), `NetworkReceiveEffect` (widens), the **7 effects that write raw bytes** (AudioVolume, BouncingBalls, Fire, Lines, NetworkReceive, Rainbow, Noise), `colorFromPalette` (unchanged: returns 8-bit RGB, widened at the write), the MoonLive `StoreElem` / `FillElems` inline ops on all three backends (element = 3 × 2 bytes), and the zero-copy driver path. Modifiers are coordinate-only and untouched; the mapping LUT is index-only and untouched. +What touches Layer bytes and therefore changes in phase 2: `Buffer` (bytes per channel, 1 or 2), `Canvas` (a sample-width field), the 25 `Canvas` and 12 `Buffer` overloads in `draw.h` (one template each), `BlendMap` (identity and LUT paths, both widths), `Layer::extrude` and `fadeToBlackBy` (bytes-per-light already, width-agnostic after the template), `Correction::apply` (16-bit input, quantize to the declared wire width; the one quantization site), `DriverBase` (the declared wire width), `PreviewDriver` (quantized through the same path), `NetworkReceiveEffect` (widens), the **7 effects that write raw bytes** (AudioVolume, BouncingBalls, Fire, Lines, NetworkReceive, Rainbow, Noise), `colorFromPalette` (unchanged: returns 8-bit RGB, widened at the write), the MoonLive `StoreElem` / `FillElems` inline ops on all three backends (element = `channelsPerLight` × the Layer's bytes per channel, NOT a fixed 3 × 2: the ops already store N bytes rather than a fixed RGB, and a phase that hardcoded three channels would break the RGBW and multi-channel DMX fixtures the same buffer serves), and the zero-copy driver path. Modifiers are coordinate-only and untouched; the mapping LUT is index-only and untouched. ## 3. The kernels @@ -185,7 +185,7 @@ The one engine change this plan requires: the `StoreElem` and `FillElems` inline ## 5. Performance plan -**Currencies.** Shaders: samples per pixel, against ~750 cycles per sample on the S3 and ~250 on the P4 (bottom-up, Part 3), with the gradient-noise swap held within 1.3× of that. Advection: cycles per frame and bytes of state; the target per pass is ~40 cycles per pixel per channel on the S3, so a 128² RGB separable advect is ~4 ms on the S3 and ~1.3 ms on the P4, wall-capable at 50 fps with the shader budget left for the emitters. +**Currencies.** Shaders: samples per pixel, against ~750 cycles per sample on the S3 and ~250 on the P4 (bottom-up, Part 3), with the gradient-noise swap held within 1.3× of that. Advection: cycles per frame and bytes of state. The target is ~40 cycles per pixel per channel PER PASS, and separable advection is two passes (x then y), so a 128² RGB advect is 128·128·3·40·2 cycles: **~16 ms on the S3** at 240 MHz and **~10 ms on the P4** at 400 MHz. (An earlier draft said 4 ms and 1.3 ms, which matched neither one pass nor two: the arithmetic gives 8.2 ms for a single S3 pass. The numbers below follow from the corrected figures.) That is 60 fps on the P4 with room for the emitters, and on the S3 it is the whole frame at 60 fps, so a 128² wall runs advection at 30 fps or drops to 64² for 50. The phase-3 scenario sets the contract per target from measurement rather than from this estimate. **Framerate as the rendering method, by rule.** Every kernel takes `dt`; no kernel takes a frame count. `advect` clamps the per-frame displacement to one pixel and reports when it clamps (the `frameTime`-style status), so a slow frame smears rather than tears. `decay` is a half-life. The oscillator bank is `dt`-integrated. A showcase's stated fps on its stated fixture is a scenario contract; when it fails, the default of its cost knob moves, not the contract. @@ -224,7 +224,7 @@ The steps below are work order, not commit order. Each step is finished on the d 2. Implement Perlin improved noise behind `inoise8/16` (2D and 3D; 1D as the 2D with y = 0), integer, same coordinate convention, same output ranges. Delete the "value noise" note in `noise.h`. 3. Run the micro-bench: accept only within 1.3× per sample; else optimize (the 8-gradient 2D form, a 12-entry gradient table) before continuing. 4. Desktop build, `ctest`: the seven noise goldens fail as expected; update them in the same commit with the reason. -5. Flash S3 and P4; `collect_kpi.py --commit`; the product owner judges Noise, Noise2D, PolarNoise, Tunnel on the panel. Catalog cards: no text change unless the look note in a card mentions value noise. +5. On the product owner's go-ahead (CLAUDE.md § Build: a board is written to only when they say so), flash S3 and P4; `collect_kpi.py --commit`; they judge Noise, PolarNoise and Tunnel on the panel. Catalog cards: no text change unless the look note in a card mentions value noise. ### Phase 1: fields and Aurora (medium) 1. `core/oscillators.h` with its unit tests. @@ -233,7 +233,7 @@ The steps below are work order, not commit order. Each step is finished on the d 4. `AuroraEffect`: the three-layer shader, controls per § 6, card in effects.md, golden. 5. MoonLive: `polar()` and `oscillators()` handles with their builtins; `polarA`/`polarR` read the LUT when declared; `aurora.mle`; the compile-every-script test and a script golden. 6. Scenario: fields (LUT rebuild on resize, memory ladder), Aurora's fps contract per target. -7. Desktop, S3, P4; performance.md rows; the product owner's look. +7. Desktop first; then S3 and P4 on the product owner's go-ahead; performance.md rows; their look. ### Open from phase 1 @@ -263,6 +263,89 @@ time per pixel (42.8 against 41.4 ns on the host). Built, measured, then REVERTE owner's call: it did not address the hitch above, and the cost is real. Revisit when the hitch is understood, since the two may be related. +### Phase 1b: three dimensions everywhere (medium) + +Dimension-generic is a stated input of this plan (§ 0), and the library is not there yet. The gap is +uneven rather than absent, and the hot-path worry it raises turns out not to be the blocker. + +**Where it already holds.** `draw::` is `Coord3D` throughout (pixel, line, blendPixel, addPixel, +glyph). `blur` runs a third pass behind `if (z > 1)`, so a 2D layout pays nothing for the capability. +`inoise8` and `inoise16` have real 1D, 2D and 3D forms, each compiling to its own straight-line body +over exactly its corners after the phase 0 swap. + +**Where it does not.** `fbm16`, `turbulence8` and `warp8` stop at 2D; only `fbm8` has a 3D overload. +`PolarLut` stores angle and radius on a plane, with no z. `atan16` and `dist16` are planar by nature. + +**A 3D-capable kernel costs a 2D layout nothing**, and the tree already shows both ways to get that: +the third axis is either a template parameter that compiles away (`if constexpr (Dims > 2)` in the +noise core) or a runtime guard on a value that is 1 (`blur`). Neither is a per-pixel branch. So the +missing overloads are mechanical. + +The one that is not mechanical is **polar in three dimensions**, and the answer is a control rather +than a decision. Spherical (two angles and a radius), cylindrical (an angle, a radius and a height) +and distance-from-center are three different looks, and which one is right is a property of the +FIXTURE: a sphere wants the first, a tube or curtain the second, a cube may want any of them. The +choice costs nothing per pixel because it is made once when the table is built, and the table is the +same size either way. Cylindrical is the default: it reduces to exactly today's behavior when depth +is 1, so no existing 2D fixture changes. + +**What "dimension-generic" does NOT claim.** The KERNELS take any arity; an EFFECT still looks good +only at the arities its design has. Aurora on a strip is one radial line through the field, which +reads as a slow flicker rather than as curtains, and no amount of library work changes that. The +Layer already handles the mismatch (a D2 effect on a 3D layer has its z=0 slice copied across z, a +D1 effect its column copied across x), so an effect that declares less than the fixture is correct +rather than broken. Which effects earn a genuine 1D or 3D form is per-effect judgment, made in the +catalog sweep, not a property this phase delivers. + +1. `fbm16`, `turbulence8` and `warp8` gain their 3D overloads, matching `fbm8`'s existing shape. +2. `PolarLut` gains a z axis and a `mapping` control (cylindrical default, spherical, radial), with + the 2D path bit-identical to today's at depth 1. +3. The effects that are `Dim::D2` only because their kernels were: Aurora, PolarNoise and Tunnel are + the three that a volumetric fixture would show something new, and all three are blocked on step 2 + rather than on their own code. Noise2D needs no polar work at all: it already samples 3D noise + with time on z, so a volumetric form is passing the light's own z instead. +4. ✅ **Noise2D and Noise were the same effect**, and are now one: Noise + already uses the light's real z when depth > 1, and the two differ only in control names and + scale defaults (`bpm`/4 against `speed`/64). Merging them is a catalog decision with a golden and + a card, so it was done here rather than deferred: `motion` chooses drift (the old Noise) or morph + (the old Noise2D), the drift golden is unchanged, and the second effect is deleted. +5. Unit tests per kernel that a 2D call is exactly the 3D call with z held at zero, which is what + makes the extension safe to make everywhere else. ✅ *(shipped: `fbm8`, `fbm16`, `turbulence8` and + `warp8` all have 3D forms, and `warp8`'s 2D form is now literally the 3D one at z = 0, so the two + cannot drift apart.)* + +### Phase 1c: Coord3D in MoonLive (medium) + +A script computes a position as three loose integers today, and flattens it by hand +(`mod(bx+dx, width) + mod(by+dy, height) * width`), which is the buffer layout leaking into every +effect. The engine already passes `Coord3D` everywhere, so the script vocabulary is the odd one out. + +This is **not** general struct support. The MoonLive roadmap settles that: a predefined struct is one +the compiler knows by layout, needing no user-declarable struct machinery +([roadmap § 4b](moonlive-language-roadmap.md), with user structs deferred to § 10 for readability +rather than capability). It depends on the multi-value call ABI (§ 2 there), which is what makes a +coordinate in and a color out expressible at all. + +**`Coord3D` yes; the color struct waits for phase 2.** The roadmap pairs `Coord3D` with a `CRGB`, +and that pairing predates the 16-bit decision. A script-visible color fixed at three `uint8_t` would +be the one place in the pipeline where the channel width stops being runtime data, exactly as phase 2 +makes `draw.h` a template over both widths and has `Correction` quantize once at the driver. So the +color type is specified AFTER phase 2 knows what it is, and it takes our own name rather than +FastLED's (CLAUDE.md: our own code, our own names). A coordinate has no such dependency, which is +why it goes first. + +**How far it goes: as far as every other type.** A predefined struct that only appears in builtin +signatures would be a special case, and the language does not need another one. `Coord3D` is a +class member, a local, a function argument and a return value, the same as `int`, `byte`, `bool` and +`fixed`. Arguments and returns are roadmap § 6, which this step therefore depends on. Two +consequences worth stating: a member costs three of the 8 member records and 6 of the 64 arena bytes +unless the compiler packs it as one record, which is worth deciding when the type is added rather +than after; and a local costs one frame slot per field under today's flat allocator, so a script +holding several coordinates meets the 16-slot ceiling faster (§ 8b there). + +Ordering note: this is the step that makes a 3D script possible, so it follows phase 1b rather than +leading it. A script that can hold a coordinate but calls kernels that ignore z has gained nothing. + ### Phase 2: the 16-bit Layer (large, cross-cutting) 1. `Buffer`: bytes per channel; `Canvas`: sample width; `Layer::prepare()` picks the width by the allocation check (option B) or fixed 16 (option A), per the sign-off. 2. `draw.h`: every `Canvas` and `Buffer` primitive as one template instantiated for both widths; `get`/`pixel` widen 8-bit RGB on write and narrow on read for the existing callers. diff --git a/docs/backlog/moonlive-language-roadmap.md b/docs/backlog/moonlive-language-roadmap.md index c628c328..3c6b7a32 100644 --- a/docs/backlog/moonlive-language-roadmap.md +++ b/docs/backlog/moonlive-language-roadmap.md @@ -341,7 +341,7 @@ variables, so a new builtin should take a name a script would not: `polarA`/`pol the obvious ones. The compile-every-script test caught it immediately, which is the argument for keeping that test cheap to run. -### 4b. Two predefined structs: `Coord3D` and `CRGB` — *and they make #4 land properly* +### 4b. Predefined structs: `Coord3D` now, a color type after the 16-bit Layer — *and they make #4 land properly* Most of what a script manipulates is a POSITION or a COLOUR, and today both are loose integers: a coordinate is three separate values or an index the script computes by hand @@ -349,7 +349,20 @@ coordinate is three separate values or an index the script computes by hand travel together. Two predefined types would carry them: - **`Coord3D`** — `{x, y, z}`, the shape `setXYZ`, `addLight` and every layout already think in. -- **`CRGB`** — `{r, g, b}`, the FastLED name, matching `RGB` in `core/color.h`. +- **A color struct** — `{r, g, b}`, matching `RGB` in `core/color.h`. + +**No `HSV` struct.** The builtins already record the decision and the reason +(`MoonLiveBuiltins_light.h`): a hue wheel is how an effect picks color while IGNORING the user's +palette, and 47 of 52 compiled effects were moved off that habit. A predefined `HSV` would put it +back as the easy default. HSV stays where it earns its place, in `setPalEntryHSV`, which is +authoring a palette rather than bypassing one. + +**The color one waits, and does not take FastLED's `CRGB` name.** The +[generative-fields plan](generative-fields-analysis-top-down.md) makes the Layer 16-bit with the +channel width decided at run time and `draw.h` templated over both widths, so a script-visible color +fixed at three `uint8_t` would be the one place the width stops being runtime data. Specify it after +that phase lands, under our own name (CLAUDE.md: our own code, our own names). `Coord3D` has no such +dependency and goes first. Predefined rather than user-declarable structs (#10): these two are what the ENGINE already passes around, so they need no general struct machinery — just two known layouts the compiler understands @@ -361,6 +374,14 @@ The payoff is that #4 becomes the natural signature rather than a special case: setColorFromPalette(pos, index, brightness); // pos is a Coord3D ``` +**Scope: a predefined struct is a type, not a calling convention.** One that appeared only in +builtin signatures would be a special case the language does not need. `Coord3D` is a class member, +a local, a function argument and a return value, exactly as `int`, `byte`, `bool` and `fixed` are, +which makes § 6 (arguments and returns) a prerequisite rather than a nicety. Two costs to settle +when it is added: whether a member is one member record or three of the eight, and hence 6 of the 64 +arena bytes; and that a local occupies one frame slot per field under today's flat allocator, so a +script holding a few coordinates reaches the 16-slot ceiling sooner (§ 8b). + One call, one brightness evaluation, and the index arithmetic stops being open-coded at every call site. It also removes the `mod(...) + mod(...) * width` flattening a script writes today, which is the buffer layout leaking into every effect. @@ -514,12 +535,19 @@ Not exposed, each with a reason: `spray` (`emit` with a wide cone is one), `spawn` (per-particle in a whole-pool API), `force`/`forceSmall` (needs the `acc` buffer for wind nothing needs yet), `attract`, `wrap`, `liveCount`, `clear`. -### 10. Structs — *readability, once the arena is bigger* +### 10. User structs, and arrays of them — *readability, once the arena is bigger* `ball[i].x` instead of parallel arrays. Genuinely nicer and closer to how a precompiled effect reads, but parallel arrays work the moment the arena is big enough. Last because #1 removes most of the pain, not because it does not matter. +Arrays of the five scalar types already ship (`byte heat[16]` in `ember.mle`), so what is missing +here is arrays OF STRUCTS, and it splits in two. An array of a PREDEFINED struct (§ 4b) is the +smaller half and the one an effect reaches for first: a script holding `Coord3D pos[8]` is exactly +the parallel-array flattening this item exists to remove, and the element width the array path +already carries (`idxPack`) is the machinery it needs. An array of a USER struct needs the general +declaration machinery above it. Worth building in that order if this is picked up. + ## How to know a step landed Two measures, one local and one external. diff --git a/docs/metrics/repo-health.json b/docs/metrics/repo-health.json index bdd5d250..81b3e7d2 100644 --- a/docs/metrics/repo-health.json +++ b/docs/metrics/repo-health.json @@ -1,7 +1,7 @@ { - "commit": "803cae97", + "commit": "df8a8b0f", "flash": { - "esp32s3-n16r8": 1902352, + "esp32s3-n16r8": 1998944, "desktop": 1692152, "esp32": 1923264, "esp32p4rev1-eth": 1675216, @@ -17,20 +17,20 @@ }, "perf": { "desktop": { - "tick_us": 845, - "fps": 1183, + "tick_us": 135, + "fps": 7407, "scenario_p50": { "Layer_base_pipeline": { - "p50": 75, + "p50": 107, "p95": 211, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "Layer_memory_1to1": { - "p50": 9, - "p95": 40, + "p50": 10, + "p95": 41, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" } } }, @@ -44,7 +44,7 @@ "p50": 131, "p95": 246, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32-eth-wifi": { "p50": 89895, @@ -157,10 +157,10 @@ }, "Audio_mutation": { "desktop-macos": { - "p50": 33, - "p95": 307, + "p50": 45, + "p95": 790, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 40, @@ -181,12 +181,20 @@ "last": "2026-07-24" } }, + "Aurora_fps": { + "desktop-macos": { + "p50": 937, + "p95": 1423, + "n": 4, + "last": "2026-09-04" + } + }, "Driver_mutation": { "desktop-macos": { - "p50": 37, - "p95": 665, + "p50": 49, + "p95": 285, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 42, @@ -209,10 +217,10 @@ }, "Effects_composition": { "desktop-macos": { - "p50": 343, + "p50": 497, "p95": 2259, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 549, @@ -221,12 +229,20 @@ "last": "2026-07-08" } }, + "Fields_polar_lut": { + "desktop-macos": { + "p50": 981, + "p95": 1206, + "n": 6, + "last": "2026-09-04" + } + }, "GridBlacks_blackpixel": { "desktop-macos": { - "p50": 5, + "p50": 7, "p95": 25, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32s3-n16r8": { "p50": 267, @@ -249,10 +265,10 @@ }, "GridLayout_resize": { "desktop-macos": { - "p50": 167, - "p95": 311, + "p50": 132, + "p95": 298, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32-eth-wifi": { "p50": 82231, @@ -293,10 +309,10 @@ }, "Layer_base_pipeline": { "desktop-macos": { - "p50": 75, + "p50": 107, "p95": 211, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 118, @@ -307,10 +323,10 @@ }, "Layer_memory_1to1": { "desktop-macos": { - "p50": 9, - "p95": 40, + "p50": 10, + "p95": 41, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 1, @@ -321,10 +337,10 @@ }, "Layouts_mutation": { "desktop-macos": { - "p50": 130, + "p50": 171, "p95": 2190, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 111, @@ -373,10 +389,10 @@ }, "MoonLiveEffect_livescript": { "desktop-macos": { - "p50": 8, - "p95": 482, + "p50": 14, + "p95": 151, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32s3-n16r8": { "p50": 8255, @@ -423,10 +439,10 @@ "last": "2026-08-20" }, "desktop-macos": { - "p50": 7, + "p50": 11, "p95": 185, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 1, @@ -437,10 +453,10 @@ }, "MultiplyModifier_memory_lut": { "desktop-macos": { - "p50": 4, + "p50": 6, "p95": 165, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 3, @@ -451,10 +467,10 @@ }, "MultiplyModifier_pipeline": { "desktop-macos": { - "p50": 133, + "p50": 129, "p95": 283, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 225, @@ -465,10 +481,10 @@ }, "modifier_chain": { "desktop-macos": { - "p50": 62, + "p50": 78, "p95": 473, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 69, @@ -485,10 +501,10 @@ }, "modifier_swap": { "desktop-macos": { - "p50": 31, + "p50": 46, "p95": 456, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32-eth": { "p50": 1010, @@ -523,10 +539,10 @@ }, "perf_full": { "desktop-macos": { - "p50": 429, - "p95": 2011, + "p50": 589, + "p95": 2027, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32s3-n16r8": { "p50": 16915, @@ -555,10 +571,10 @@ }, "perf_light": { "desktop-macos": { - "p50": 23, + "p50": 35, "p95": 134, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32s3-n16r8": { "p50": 2485, @@ -599,10 +615,10 @@ "last": "2026-07-25" }, "desktop-macos": { - "p50": 378, - "p95": 1666, + "p50": 586, + "p95": 2098, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "desktop-windows": { "p50": 649, @@ -625,10 +641,10 @@ "last": "2026-07-24" }, "desktop-macos": { - "p50": 6, + "p50": 9, "p95": 38, "n": 32, - "last": "2026-09-02" + "last": "2026-09-03" }, "esp32p4rev1-eth": { "p50": 217, @@ -652,54 +668,54 @@ } }, "loc": { - "core": 24602, - "light": 30425, + "core": 24938, + "light": 31807, "platform": 17463, - "ui": 9964, - "test": 53126, - "moondeck": 22414 + "ui": 10089, + "test": 54681, + "moondeck": 22488 }, "comments": { "core": { - "lines": 9786, - "ratio": 0.43 + "lines": 9940, + "ratio": 0.431 }, "light": { - "lines": 11631, - "ratio": 0.421 + "lines": 12233, + "ratio": 0.423 }, "platform": { "lines": 6117, "ratio": 0.385 }, "ui": { - "lines": 2895, - "ratio": 0.307 + "lines": 2969, + "ratio": 0.311 }, "test": { - "lines": 9875, + "lines": 10179, "ratio": 0.213 }, "moondeck": { - "lines": 3641, - "ratio": 0.186 + "lines": 3643, + "ratio": 0.185 } }, "tests": { - "cases": 1794, - "scenarios": 23 + "cases": 1876, + "scenarios": 25 }, "docs": { - "md_files": 214, - "md_lines": 34049, - "plans_files": 114, - "backlog_lines": 5520, - "lessons_lines": 648, - "claude_md_lines": 216 + "md_files": 218, + "md_lines": 35121, + "plans_files": 115, + "backlog_lines": 6338, + "lessons_lines": 678, + "claude_md_lines": 237 }, "complexity": { - "functions": 3214, - "over_threshold": 212, + "functions": 3290, + "over_threshold": 220, "worst_ccn": 108 } } diff --git a/docs/metrics/repo-health.md b/docs/metrics/repo-health.md index 6c1082a3..0c6d62fa 100644 --- a/docs/metrics/repo-health.md +++ b/docs/metrics/repo-health.md @@ -1,6 +1,6 @@ # Repo health -Measured at `803cae97`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** +Measured at `df8a8b0f`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** Current state only; the trend is this file's git history (`git log -p docs/metrics/repo-health.md`). Nothing here fails a build: the numbers make growth visible, the judgment stays human. @@ -10,15 +10,15 @@ Current state only; the trend is this file's git history (`git log -p docs/metri |---|---:|---:|---:|:--:| | desktop | 1,652 KB | - | - | carried | | esp32 | 1,878 KB | 2,496 KB | 75% | carried | -| esp32-16mb | 1,767 KB | 4,096 KB | 43% | carried | -| esp32-eth | 1,365 KB | 2,496 KB | 55% | carried | -| esp32-wrover | 1,801 KB | 2,496 KB | 72% | carried | +| esp32-16mb | 1,767 KB | - | - | carried | +| esp32-eth | 1,365 KB | - | - | carried | +| esp32-wrover | 1,801 KB | - | - | carried | | esp32p4rev1-eth | 1,636 KB | 4,096 KB | 40% | carried | -| esp32p4rev1-eth-wifi | 1,972 KB | 4,096 KB | 48% | carried | -| esp32p4rev3-eth | 1,605 KB | 4,096 KB | 39% | carried | -| esp32s3-n16r8 | 1,858 KB | 4,096 KB | 45% | carried | -| esp32s3-n8r8 | 1,925 KB (+135 KB) ⚠ | 3,072 KB | 63% | yes | -| esp32s3-zero | 1,747 KB | 2,496 KB | 70% | carried | +| esp32p4rev1-eth-wifi | 1,972 KB | - | - | carried | +| esp32p4rev3-eth | 1,605 KB | - | - | carried | +| esp32s3-n16r8 | 1,952 KB (+94 KB) ⚠ | 4,096 KB | 48% | yes | +| esp32s3-n8r8 | 1,925 KB | - | - | carried | +| esp32s3-zero | 1,747 KB | - | - | carried | | esp32s31 | 2,056 KB | 4,096 KB | 50% | carried | | qemu | 1,351 KB | - | - | carried | @@ -28,47 +28,49 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Tick | FPS | |---|---:|---:| -| desktop | 845 µs (+388 µs) ⚠ | 1,183 (−1,005) ⚠ | +| desktop | 135 µs (−710 µs) ✓ | 7,407 (+6,224) ✓ | | esp32 | 8,354 µs | 119 | ### Scenario tick by target (p50 of each sample window) | Scenario | desktop-macos | desktop-windows | esp32 | esp32s3-n16r8 | esp32p4rev1-eth | esp32s31 | esp32-eth | esp32-eth-wifi | unknown | |---|---|---|---|---|---|---|---|---|---| -| Audio_mutation | 33 (−1) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | -| Driver_mutation | 37 | 42 ? | 12,812 | 39 ? | - | - | - | - | - | -| Effects_composition | 343 (+14) ⚠ | 549 ? | - | - | - | - | - | - | - | -| GridBlacks_blackpixel | 5 (+1) ⚠ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | -| GridLayout_resize | 167 | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | -| Layer_base_pipeline | 75 (+2) ⚠ | 118 ? | - | - | - | - | - | - | - | -| Layer_memory_1to1 | 9 | 1 ? | - | - | - | - | - | - | - | -| Layouts_mutation | 130 (+11) ⚠ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | +| Audio_mutation | 45 (+12) ⚠ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | +| Aurora_fps | 937 | - | - | - | - | - | - | - | - | +| Driver_mutation | 49 (+12) ⚠ | 42 ? | 12,812 | 39 ? | - | - | - | - | - | +| Effects_composition | 497 (+154) ⚠ | 549 ? | - | - | - | - | - | - | - | +| Fields_polar_lut | 981 | - | - | - | - | - | - | - | - | +| GridBlacks_blackpixel | 7 (+2) ⚠ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | +| GridLayout_resize | 132 (−35) ✓ | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | +| Layer_base_pipeline | 107 (+32) ⚠ | 118 ? | - | - | - | - | - | - | - | +| Layer_memory_1to1 | 10 (+1) ⚠ | 1 ? | - | - | - | - | - | - | - | +| Layouts_mutation | 171 (+41) ⚠ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | | MoonLiveEffect_controls | 11 ? | - | 12,901 | 4,624 ? | - | - | - | - | - | -| MoonLiveEffect_livescript | 8 (+1) ⚠ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | -| MoonLive_pipeline | 7 (+1) ⚠ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | +| MoonLiveEffect_livescript | 14 (+6) ⚠ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | +| MoonLive_pipeline | 11 (+4) ⚠ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | | MoonModule_control_change | 131 | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | | MqttModule_haDiscovery_toggle | 3 ? | - | 36 ? | 36 ? | - | - | - | - | - | -| MultiplyModifier_memory_lut | 4 | 3 ? | - | - | - | - | - | - | - | -| MultiplyModifier_pipeline | 133 | 225 ? | - | - | - | - | - | - | - | +| MultiplyModifier_memory_lut | 6 (+2) ⚠ | 3 ? | - | - | - | - | - | - | - | +| MultiplyModifier_pipeline | 129 (−4) ✓ | 225 ? | - | - | - | - | - | - | - | | NetworkModule_eth_reconfigure | - | - | 1,169 ? | 97,843 ? | - | - | - | - | - | | NetworkModule_mdns_toggle | 13 ? | - | 36 ? | 36 ? | 21 ? | - | 109,767 ? | 93,963 ? | - | -| modifier_chain | 62 | 69 ? | 13,337 | - | - | - | - | - | - | -| modifier_swap | 31 (+1) ⚠ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | -| perf_full | 429 (+58) ⚠ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | -| perf_light | 23 (+2) ⚠ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | -| peripheral_grid_sweep | 378 (+9) ⚠ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | -| peripheral_switch | 6 | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | +| modifier_chain | 78 (+16) ⚠ | 69 ? | 13,337 | - | - | - | - | - | - | +| modifier_swap | 46 (+15) ⚠ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | +| perf_full | 589 (+160) ⚠ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | +| perf_light | 35 (+12) ⚠ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | +| peripheral_grid_sweep | 586 (+208) ⚠ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | +| peripheral_switch | 9 (+3) ⚠ | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first impression rather than a percentile; several are months old and were captured during a network reconfigure, so they read as whole milliseconds. `-` means that target has never run that scenario. -**Coverage: 94/207 cells measured (45%), 28 of them with 4+ samples (13%).** The blanks are the point: a regression on a target that has never run a scenario cannot be DETECTED in it, and the target cannot be compared against the others. Filling the matrix means running the scenario suite on each bench board, which is a standing task rather than a one-off. +**Coverage: 96/225 cells measured (42%), 30 of them with 4+ samples (13%).** The blanks are the point: a regression on a target that has never run a scenario cannot be DETECTED in it, and the target cannot be compared against the others. Filling the matrix means running the scenario suite on each bench board, which is a standing task rather than a one-off. ### desktop: isolated scenarios (p50 of the sample window) | Scenario | p50 | p95 | n | |---|---:|---:|---:| -| Layer_base_pipeline | 75 µs (+2 µs) ⚠ | 211 µs | 32 | -| Layer_memory_1to1 | 9 µs | 40 µs | 32 | +| Layer_base_pipeline | 107 µs (+32 µs) ⚠ | 211 µs | 32 | +| Layer_memory_1to1 | 10 µs (+1 µs) ⚠ | 41 µs | 32 | These build a bare pipeline with no optional modules, so a change here is a change in the pipeline itself rather than in what was measured. A new module belongs in an advanced scenario, which keeps its own numbers. @@ -76,36 +78,36 @@ These build a bare pipeline with no optional modules, so a change here is a chan | Area | Lines | Comments | Comment share | |---|---:|---:|---:| -| core | 24,602 (+56) ⚠ | 9,786 | 43.0 % (+0.1 %) ⚠ | -| light | 30,425 (+3) ⚠ | 11,631 | 42.1 % (−0.1 %) ✓ | -| platform | 17,463 (+117) ⚠ | 6,117 | 38.5 % (+0.1 %) ⚠ | -| ui | 9,964 (+3) ⚠ | 2,895 | 30.7 % | -| test | 53,126 (+94) ⚠ | 9,875 | 21.3 % | -| moondeck | 22,414 | 3,641 | 18.6 % | +| core | 24,938 (+336) ⚠ | 9,940 | 43.1 % (+0.1 %) ⚠ | +| light | 31,807 (+1,382) ⚠ | 12,233 | 42.3 % (+0.2 %) ⚠ | +| platform | 17,463 | 6,117 | 38.5 % | +| ui | 10,089 (+125) ⚠ | 2,969 | 31.1 % (+0.4 %) ⚠ | +| test | 54,681 (+1,555) ⚠ | 10,179 | 21.3 % | +| moondeck | 22,488 (+74) ⚠ | 3,643 | 18.5 % (−0.1 %) ✓ | ## Tests | Kind | Count | |---|---:| -| unit cases | 1,794 (+4) ✓ | -| scenarios | 23 | +| unit cases | 1,876 (+82) ✓ | +| scenarios | 25 (+2) ✓ | ## Complexity | Metric | Value | |---|---:| -| functions | 3,214 (+8) ✓ | -| over threshold | 212 | +| functions | 3,290 (+76) ✓ | +| over threshold | 220 (+8) ⚠ | | worst CCN | 108 | ## Documentation | Metric | Value | |---|---:| -| markdown files | 214 | -| markdown lines | 34,049 (+234) ⚠ | -| plan files | 114 | -| backlog lines | 5,520 (+51) ⚠ | -| lessons lines | 648 | -| CLAUDE.md lines | 216 | +| markdown files | 218 (+4) ⚠ | +| markdown lines | 35,121 (+1,072) ⚠ | +| plan files | 115 (+1) ⚠ | +| backlog lines | 6,338 (+818) ⚠ | +| lessons lines | 678 (+30) ⚠ | +| CLAUDE.md lines | 237 (+21) ⚠ | diff --git a/docs/moonmodules/light/drivers.md b/docs/moonmodules/light/drivers.md index 756c0195..f65825b3 100644 --- a/docs/moonmodules/light/drivers.md +++ b/docs/moonmodules/light/drivers.md @@ -48,6 +48,9 @@ The card reads top-down as **invariant controls → `peripheral` divider → per - `pins` — data GPIO list, e.g. `18,17,16`, or inclusive ranges like `20-23` (= `20,21,22,23`) mixed freely (`20-22,35,38-40`). One strand each — or, with the `MoonI80` pin expander, one *group of 8*. Empty idles until set; changing it re-inits live. - `ledsPerPin` — lights per **strand**, following the broadcasting idiom (cf. NumPy / CSS shorthand): **empty** = even split of the window; **one number** = that many on *every* strand (`64` → 64 each); **a list** `3,4,5` = one per strand by position (a short list even-splits the remainder). Shorter strands go dark early while the longest finishes. Through an expander an entry is one strand, not one pin, so two strands on one '595 can differ. +- `timing` (RMT only) — the bit rate on the wire. **`800kHz WS2812B/SK6812`** is the default and drives WS2812, WS2812B and SK6812 alike, which is why it fits nearly every strip. **`400kHz WS2811`** doubles the bit cell for a 12V WS2811 strip in its low-speed mode: on the default timing such a strip decodes the first few lights and then reads noise, which looks like flicker and stale colors past a handful of LEDs. **`800kHz WS2811 fast`** is the same 1.25 µs cell with narrower pulses. **`custom`** reveals `t0hNs` / `t1hNs` / `periodNs` so a strip matching no preset is a control change rather than a firmware release. Named by speed rather than by chip because the names do not partition the timings: SK6812 and WS2812B decode identically, and "WS2811" covers two different rates. A 400 kHz strip takes twice as long per frame, so it halves the achievable frame rate at a given light count. + + **The parallel driver has no `timing` control**: its bit timing comes from the bus pixel clock, which the nanosecond fields only approximate, so changing it means changing that clock in the platform layer. A strip that needs non-default timing runs on the RMT driver. - `peripheral` (the **divider**) — the DMA peripheral driving the bus (`i80` / `Parlio` / `MoonI80`), filtered to what the chip supports. Everything **above** it is invariant (*which LEDs and how many*); everything **below** is what the chosen peripheral supports. Switching it re-surfaces that peripheral's own controls and re-inits live. Always shown — with a single option it reads as a labeled indicator of what's driving the LEDs. - *peripheral-specific* (below the divider) — each shown only on the peripherals that support it, so the set changes when you switch `peripheral`: - `doubleBuffer` — the async second frame buffer (encode overlaps the wire). Shown on `i80` and `Parlio` (they route through a real transaction queue); **hidden on `MoonI80`**, which runs single-buffer (its speed comes from the streaming ring, not from double-buffering a whole frame). diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index 3f40f1ba..a6a7f40e 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -419,7 +419,7 @@ Several noise fields, each drifting on its own clock, read in polar coordinates - `octaves` — detail within each layer, multiplying the cost knob. - `polarTable`, `polarTable16` — as PolarNoise above. -Cost is one warped fbm per layer per pixel, so `layers` times `octaves` is the budget. The polar address is a table read rather than an angle and a distance per pixel. +Cost is one warped field sample per layer per pixel. With `warp` above zero each of those is a `warp8`, which spends two noise samples finding where to look before the `octaves` samples of the field itself, so the budget is `layers` × (`octaves` + 2); at `warp` 0 it is `layers` × `octaves`. The polar address is a table read rather than an angle and a distance per pixel. Origin: projectMM original, in the shader vocabulary Stefan Petrick made recognizable in the LED world @@ -769,21 +769,6 @@ Detail: [technical](moxygen/GEQ3DEffect.md) [Tests](../../tests/unit-tests.md#geq3deffect) - - -### Noise2D 💫🌙🐙 · 2D - -A smoothly drifting gradient-noise field: each pixel samples 3D noise (grid position × `scale`, time on the Z axis) and indexes the palette directly, giving an organic plasma wash that morphs over time. - -- `speed` — how fast the field morphs (time-flow rate). -- `scale` — noise zoom (higher = finer, more detailed). - -Origin: WLED · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) - -Detail: [technical](moxygen/Noise2DEffect.md) - -[Tests](../../tests/unit-tests.md#noise2deffect) - ### PaintBrush 💫🌙📊 · 3D @@ -951,16 +936,17 @@ Detail: [technical](moxygen/FireEffect.md) -### Noise ⚡️ · 2D/3D +### Noise ⚡️💫🌙🐙 · 1D/2D/3D Noise effect preview -Smooth animated gradient noise; true 3D field on volumetric layouts. +A gradient-noise field indexed straight into the palette: the plainest way to turn the field into light, and the effect every other noise effect is a variation on. -- `scale` — spatial frequency of the field (1–32, higher = finer detail). -- `bpm` — scroll speed (8 noise cells per beat). +- `motion` — what moves. **`drift`** scrolls the sample coordinates, so the field slides across the fixture like weather, each axis at its own rate so it flows rather than translating rigidly; on a volumetric fixture the third axis is the light's own depth, so the slices differ. **`morph`** holds the coordinates still and puts time on the third axis, so the field changes in place without going anywhere, which on a panel is the classic plasma wash; there is then no axis left for depth, so a volumetric fixture shows the same field in every slice. +- `scale` — spatial frequency: low is broad blobs, high is fine detail. +- `bpm` — how fast it moves. -Origin: FastLED · inoise field (Mark Kriegsman) +Origin: FastLED · inoise field (Mark Kriegsman); the `morph` form from WLED via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h), which shipped it as a separate Noise2D effect until the two were merged Detail: [technical](moxygen/NoiseEffect.md) diff --git a/docs/performance.md b/docs/performance.md index 281f1f6b..66509dd5 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -66,23 +66,26 @@ Binary sizes: The 3D path is the closest to the bound and the reason: 3D gradient noise does eight dot products the value form never did, and the S3 instruction count for a 3D sample is 1.3x the old one. Method worth keeping: compile the kernel with the target's own compiler (`xtensa-esp32s3-elf-g++ -O2 -S`) and count instructions, branches and stack spills BEFORE flashing; three restructurings were compared that way in seconds, and the one flash went to the winner. The P4 and S31 numbers are open until those boards are back on the bench. -**All rows, ns per sample, best of 5:** +**All rows, ns per sample, best of 5.** Re-measured 2026-09-04 after the benchmark stopped dispatching through `std::function`: a type-erased call cannot be inlined, so it added an indirect call to every sample and the old figures were part kernel and part harness. Every row roughly halved, which is the size of what was being attributed to the kernels: | Kernel | ns/sample | Msamples/s | |---|---:|---:| -| inoise8 1D | 2.6 | 381.6 | -| inoise8 2D | 5.4 | 184.1 | -| inoise8 3D | 11.5 | 86.7 | -| inoise16 1D | 3.2 | 315.8 | -| inoise16 2D | 7.0 | 143.6 | -| inoise16 3D | 13.3 | 75.2 | -| fbm8 2D, 2 octaves | 11.7 | 85.5 | -| fbm8 2D, 4 octaves | 24.2 | 41.3 | -| fbm16 2D, 2 octaves | 13.5 | 73.8 | -| fbm16 2D, 4 octaves | 27.1 | 37.0 | -| turbulence8 2D, 2 octaves | 12.8 | 78.1 | -| warp8 2D, 1 octave | 21.9 | 45.7 | -| warp8 2D, 2 octaves | 29.8 | 33.5 | +| inoise8 1D | 1.8 | 554.4 | +| inoise8 2D | 4.6 | 218.5 | +| inoise8 3D | 10.1 | 99.5 | +| inoise16 1D | 1.0 | 954.4 | +| inoise16 2D | 2.1 | 481.1 | +| inoise16 3D | 12.5 | 80.1 | +| fbm8 2D, 2 octaves | 10.0 | 100.0 | +| fbm8 2D, 4 octaves | 21.3 | 47.0 | +| fbm16 2D, 2 octaves | 5.2 | 190.7 | +| fbm16 2D, 4 octaves | 11.8 | 84.9 | +| turbulence8 2D, 2 octaves | 10.2 | 98.2 | +| warp8 2D, 1 octave | 16.6 | 60.1 | +| warp8 2D, 2 octaves | 25.5 | 39.2 | +| atan16 | 1.5 | 649.1 | +| dist16 | 8.0 | 125.3 | +| polar address (dist16 + atan16 + kaleido) | 9.9 | 101.3 | That reading held: the 8-bit tier improved most (2D by 4x on the host), because the value form quantized at every stage where the gradient form carries its dot products at full width. diff --git a/src/core/noise.h b/src/core/noise.h index cfd03ead..2583c797 100644 --- a/src/core/noise.h +++ b/src/core/noise.h @@ -150,12 +150,17 @@ constexpr int32_t raw(uint32_t x, uint32_t y, uint32_t z) { return v; } -/// Map a raw blend onto the tier's unsigned range: halve it (the extreme is ±one cell) and center -/// it on the midpoint. The clamp is a guard that only the 3D extreme past one cell reaches. -template +/// Map a raw blend onto the tier's unsigned range, centered on the midpoint. +/// +/// The scale is per ARITY, because the extreme is: ±half a cell in 1D, ±one cell in 2D and ±1.035 +/// in 3D (the exact figures, from a search over every gradient choice at every fraction). Halving +/// regardless is right for 2D and 3D and wrong for 1D, which then spans only the middle half of the +/// range: measured 64..192 of 0..255, so a 1D field read washed out against the same field sampled +/// in 2D. The clamp is a guard that only the 3D extreme past one cell reaches. +template constexpr uint32_t out(int32_t raw) { constexpr int32_t kCell = 1 << Tier::kFrac; - const int32_t v = kCell / 2 + (raw >> 1); + const int32_t v = kCell / 2 + (Dims == 1 ? raw : (raw >> 1)); return static_cast(v < 0 ? 0 : (v > kCell - 1 ? kCell - 1 : v)); } @@ -193,17 +198,17 @@ constexpr int32_t fbmWiden(int32_t v, int32_t mid, uint8_t octaves) { // 1D gradient noise: x is a 16.0 fixed coordinate (high byte = cell, low byte = position). constexpr uint8_t inoise8(uint32_t x) { - return static_cast(noise::out(noise::raw(x, 0, 0))); + return static_cast(noise::out(noise::raw(x, 0, 0))); } // 2D gradient noise over the 4 cell corners. constexpr uint8_t inoise8(uint32_t x, uint32_t y) { - return static_cast(noise::out(noise::raw(x, y, 0))); + return static_cast(noise::out(noise::raw(x, y, 0))); } // 3D gradient noise over the 8 cube corners. constexpr uint8_t inoise8(uint32_t x, uint32_t y, uint32_t z) { - return static_cast(noise::out(noise::raw(x, y, z))); + return static_cast(noise::out(noise::raw(x, y, z))); } // --- 16-bit noise --------------------------------------------------------------------------- @@ -215,18 +220,18 @@ constexpr uint8_t inoise8(uint32_t x, uint32_t y, uint32_t z) { /// 1D gradient noise at 16 bits. `x` is 16.16 fixed point: the whole part selects the cell, the /// fraction interpolates within it. constexpr uint16_t inoise16(uint32_t x) { - return static_cast(noise::out(noise::raw(x, 0, 0))); + return static_cast(noise::out(noise::raw(x, 0, 0))); } /// 2D gradient noise at 16 bits: the common case for a panel. constexpr uint16_t inoise16(uint32_t x, uint32_t y) { - return static_cast(noise::out(noise::raw(x, y, 0))); + return static_cast(noise::out(noise::raw(x, y, 0))); } /// 3D gradient noise at 16 bits. `z` is the axis a 2D effect uses as time, so the field evolves in /// place instead of scrolling past. constexpr uint16_t inoise16(uint32_t x, uint32_t y, uint32_t z) { - return static_cast(noise::out(noise::raw(x, y, z))); + return static_cast(noise::out(noise::raw(x, y, z))); } /// Fractal Brownian motion at 16 bits: `octaves` samples at doubling frequency, halving amplitude. @@ -248,6 +253,23 @@ inline uint16_t fbm16(uint32_t x, uint32_t y, uint8_t octaves) { return static_cast(widened < 0 ? 0 : (widened > 65535 ? 65535 : widened)); } +/// 3D fbm at 16 bits: the same sum with a z axis, so a volumetric fixture samples a real field +/// rather than a plane repeated along z, and a 2D effect can use z as time. +inline uint16_t fbm16(uint32_t x, uint32_t y, uint32_t z, uint8_t octaves) { + if (octaves == 0) return 32768; + uint64_t sum = 0; + uint32_t norm = 0, amp = 32768; + for (uint8_t o = 0; o < octaves && amp > 0; o++) { + sum += static_cast(inoise16(x, y, z)) * amp; + norm += amp; + x <<= 1; y <<= 1; z <<= 1; + amp >>= 1; + } + if (!norm) return 32768; + const int32_t widened = noise::fbmWiden(static_cast(sum / norm), 32768, octaves); + return static_cast(widened < 0 ? 0 : (widened > 65535 ? 65535 : widened)); +} + // --- Field composition ------------------------------------------------------------------------ // // One noise sample is a smooth blur; the looks people actually recognize come from COMPOSING @@ -314,18 +336,76 @@ inline uint8_t turbulence8(uint32_t x, uint32_t y, uint8_t octaves) { return static_cast(r > 255 ? 255 : r); } +/// 3D turbulence: the same creased sum with a z axis. +inline uint8_t turbulence8(uint32_t x, uint32_t y, uint32_t z, uint8_t octaves) { + if (octaves == 0) return 0; + uint32_t sum = 0, norm = 0, amp = 128; + for (uint8_t o = 0; o < octaves && amp > 0; o++) { + const int16_t v = static_cast(inoise8(x, y, z)) - 128; + sum += static_cast(v < 0 ? -v : v) * 2u * amp; + norm += amp; + x <<= 1; y <<= 1; z <<= 1; + amp >>= 1; + } + const uint32_t r = norm ? sum / norm : 0; + return static_cast(r > 255 ? 255 : r); +} + /// Domain warp: displace the sample coordinate by a noise field, then sample there. `strength` is /// how far the displacement reaches, in the same fixed-point units as the coordinates. /// /// This is the primitive behind the flowing/marbled look: the field stops looking like a texture /// laid on the grid and starts looking like something moving through it. Two extra samples. + +/// 3D domain warp: the same displacement with a z axis, so the field flows through a volume rather +/// than through a plane. Three probes rather than two, each offset by its own constant so the axes +/// displace independently: sampling one field three times would move everything along a diagonal. +/// +/// `octaves` has NO default here, unlike the 2D form. With one, `warp8(x, y, strength, octaves)` and +/// `warp8(x, y, z, strength)` are both viable at four arguments and every existing call becomes +/// ambiguous. Requiring it makes the arity say which field the caller means. +/// +/// Shares one body with the 2D form through `Dims`, so the two cannot drift apart, and each still +/// compiles to exactly its own arity: the 2D instantiation samples 2D noise over four corners and +/// never touches z. Calling the 3D body with z = 0 would have been simpler and measured 1.73x +/// slower, because every probe and the inner fbm then walk eight corners to reach the same answer. +template +inline uint8_t warpImpl(uint32_t x, uint32_t y, uint32_t z, uint16_t strength, uint8_t octaves) { + // Offset the probe fields so the axes displace independently: sampling one field twice would + // move everything along a diagonal. + int32_t dx, dy, dz = 0; + if constexpr (Dims > 2) { + dx = (static_cast(inoise8(x, y, z)) - 128) * strength / 128; + dy = (static_cast(inoise8(x + 0x9E37u, y + 0x7C15u, z)) - 128) * strength / 128; + // The z probe rides z ITSELF rather than a constant offset, so a fixture with no depth + // displaces nothing along an axis it does not have. That is what makes the 2D instantiation + // below the same field as this one at z = 0, rather than merely a similar one. + if (z) dz = (static_cast(inoise8(x + 0x6A09u, y + 0xBB67u, z)) - 128) * strength / 128; + } else { + dx = (static_cast(inoise8(x, y)) - 128) * strength / 128; + dy = (static_cast(inoise8(x + 0x9E37u, y + 0x7C15u)) - 128) * strength / 128; + } + const uint32_t sx = static_cast(static_cast(x) + dx); + const uint32_t sy = static_cast(static_cast(y) + dy); + if constexpr (Dims > 2) { + return fbm8(sx, sy, static_cast(static_cast(z) + dz), octaves); + } else { + return fbm8(sx, sy, octaves); + } +} + +/// 3D domain warp: the field flows through a volume rather than through a plane. +inline uint8_t warp8(uint32_t x, uint32_t y, uint32_t z, uint16_t strength, uint8_t octaves) { + return warpImpl<3>(x, y, z, strength, octaves); +} + +/// 2D domain warp: displace the sample coordinate by a noise field, then sample there. `strength` is +/// how far the displacement reaches, in the same fixed-point units as the coordinates. +/// +/// This is the primitive behind the flowing/marbled look: the field stops looking like a texture +/// laid on the grid and starts looking like something moving through it. Two extra samples. inline uint8_t warp8(uint32_t x, uint32_t y, uint16_t strength, uint8_t octaves = 1) { - // Offset the two probe fields so the x and y displacements are independent rather than equal - // (sampling the same field twice would displace everything along one diagonal). - const int32_t dx = (static_cast(inoise8(x, y)) - 128) * strength / 128; - const int32_t dy = (static_cast(inoise8(x + 0x9E37u, y + 0x7C15u)) - 128) * strength / 128; - return fbm8(static_cast(static_cast(x) + dx), - static_cast(static_cast(y) + dy), octaves); + return warpImpl<2>(x, y, 0u, strength, octaves); } } // namespace mm diff --git a/src/light/drivers/Drivers.h b/src/light/drivers/Drivers.h index d53d45b4..5ace8294 100644 --- a/src/light/drivers/Drivers.h +++ b/src/light/drivers/Drivers.h @@ -488,6 +488,13 @@ class Drivers : public MoonModule { // setStatus. Reporting it is the difference between a typo'd list and a working one. if (const char* err = parsePinList(relayPins, pins, kMaxRelays, n)) { setStatus(err, Severity::Warning); + // Release what the OLD list held before giving up. A typo mid-edit would otherwise leave + // the previous relays asserted on GPIOs no control names any more, so the strip stays + // powered after brightness reaches zero and nothing in the UI explains why. An + // unparseable list means no relays, which is the same state as an empty one. + for (uint8_t i = 0; i < lastRelayCount_; i++) + platform::gpioWrite(lastRelayPins_[i], false); + lastRelayCount_ = 0; return; } // Release the pins that are LEAVING the list before driving the new one. Clearing the list diff --git a/src/light/drivers/RmtLedDriver.h b/src/light/drivers/RmtLedDriver.h index 66113236..10f9fc61 100644 --- a/src/light/drivers/RmtLedDriver.h +++ b/src/light/drivers/RmtLedDriver.h @@ -68,6 +68,33 @@ class RmtLedDriver : public DriverBase { /// not this safety cap. char ledsPerPin[48] = ""; + /// Wire timing. Named by SPEED rather than by chipset, because chipset names do not partition + /// the timings: SK6812 and WS2812B decode identically, while "WS2811" covers two different bit + /// rates. The chip names in each label are examples of what that timing drives, not a list. + /// + /// The default satisfies WS2812, WS2812B and SK6812 at once, which is why it has served every + /// strip so far. A 12V WS2811 strip in its low-speed mode needs twice the bit cell and reads + /// the default as noise past the first few lights (issue #94). + uint8_t timing = 0; + + /// The three numbers behind `timing`, shown only when it is `custom`. A strip whose datasheet + /// matches no preset is then a control change rather than a firmware release, and what a user + /// finds by trying is a number they can report back. + uint16_t t0hNs = 350; + uint16_t t1hNs = 700; + uint16_t periodNs = 1250; + + /// The index of `custom` in the table below: the one option that reads the three fields. + static constexpr uint8_t kTimingCustom = 3; + + /// The presets, in the order the select lists them. + static constexpr const char* kTimingOptions[] = { + "800kHz WS2812B/SK6812", // 350 / 700 / 1250: the default, and most strips + "400kHz WS2811", // 500 / 1200 / 2500: 12V WS2811 in low-speed mode + "800kHz WS2811 fast", // 250 / 600 / 1250: WS2811 strapped to high speed + "custom", // the three fields below + }; + /// On-device loopback self-test — RMT is a transceiver, so the driver verifies its own output /// on real silicon (replaces the old standalone test firmware). Tick to run a one-shot RMT /// TX→RX round-trip: jumper the first pin (TX) to `loopbackRxPin`, it transmits a known WS2812 @@ -110,6 +137,19 @@ class RmtLedDriver : public DriverBase { addWindowControls(); // start / count — the slice of the shared buffer this driver outputs controls_.addText("pins", pins, sizeof(pins)); controls_.addText("ledsPerPin", ledsPerPin, sizeof(ledsPerPin)); + controls_.addSelect("timing", timing, kTimingOptions, + static_cast(sizeof(kTimingOptions) / sizeof(kTimingOptions[0]))); + // The custom fields are always bound so persistence can load them whatever the mode, and + // shown only in custom mode: the same add-then-setHidden shape the loopback controls use. + // Ranges are the encodable window at the 40 MHz tick clock, not datasheet limits: a user + // reading their own datasheet should be able to type what it says. + const bool custom = timing == kTimingCustom; + controls_.addControl("t0hNs", t0hNs, 50, 4000); + controls_.setHidden(controls_.count() - 1, !custom); + controls_.addControl("t1hNs", t1hNs, 50, 4000); + controls_.setHidden(controls_.count() - 1, !custom); + controls_.addControl("periodNs", periodNs, 200, 8000); + controls_.setHidden(controls_.count() - 1, !custom); controls_.addControl("loopbackTest", loopbackTest); controls_.setAdvanced(controls_.count() - 1); // expert-mode: a bench self-test, not a normal-use control // loopbackTxPin / loopbackRxPin are always bound (so persistence can load @@ -131,6 +171,8 @@ class RmtLedDriver : public DriverBase { /// sweep runs and parseConfig()/reinit() pick up the new lists. bool affectsPrepare(const char* name) const override { return std::strcmp(name, "pins") == 0 || std::strcmp(name, "ledsPerPin") == 0 + || std::strcmp(name, "timing") == 0 || std::strcmp(name, "t0hNs") == 0 + || std::strcmp(name, "t1hNs") == 0 || std::strcmp(name, "periodNs") == 0 || isWindowControl(name); } @@ -316,6 +358,15 @@ class RmtLedDriver : public DriverBase { Buffer* sourceBuffer_ = nullptr; LedDriverConfig cfg_; + +public: + /// The wire timing the `timing` control resolved to. The tests assert against this rather than + /// against RMT ticks, so what is pinned is the contract a datasheet states (nanoseconds) rather + /// than the tick clock that happens to express it. Same injection-point role as + /// `correctionForTest()`; read-only, since the control is the way to change it. + const LedDriverConfig& wireTimingForTest() const { return cfg_; } + +private: platform::RmtWs2812Handle rmt_[kMaxPins]; uint16_t pinList_[kMaxPins] = {}; // parsed pins, list order nrOfLightsType pinCounts_[kMaxPins] = {}; // lights per pin (slice lengths) @@ -369,7 +420,33 @@ class RmtLedDriver : public DriverBase { // the current buffer/correction. On error: pinCount_ = 0 (tick() idles) and // the static error literal goes to the status slot; a later successful parse // clears it. Off the hot path. + /// Turn the `timing` selection into the wire timing the encoder reads. Called from + /// parseConfig, so every path that rebuilds the driver picks it up: the numbers are read per + /// frame from cfg_, so a change takes effect on the next frame with no channel reinit (the RMT + /// tick clock is unchanged, only how many ticks each bit lasts). + void applyTiming() { + switch (timing) { + // The 400 kHz WS2811 mode: T0H 0.5 us, T1H 1.2 us, 2.5 us cell. Twice the bit period, + // so a frame takes twice as long; at 18 lights that is ~1 ms, at 1000 it is ~60 ms. + case 1: cfg_.t0h_ns = 500; cfg_.t1h_ns = 1200; cfg_.period_ns = 2500; break; + // WS2811 strapped to its high-speed mode: the same 1.25 us cell as WS2812 with narrower + // pulses. Within the WS2812 decode window, so it is a refinement rather than a rescue. + case 2: cfg_.t0h_ns = 250; cfg_.t1h_ns = 600; cfg_.period_ns = 1250; break; + case kTimingCustom: + // Trusted as typed, but ordered: a t1h below t0h encodes 1 as a shorter pulse than + // 0, which no chip decodes, and a period below t1h cannot contain the pulse. + cfg_.t0h_ns = t0hNs; + cfg_.t1h_ns = t1hNs > t0hNs ? t1hNs : static_cast(t0hNs + 50); + cfg_.period_ns = periodNs > cfg_.t1h_ns ? periodNs + : static_cast(cfg_.t1h_ns + 50); + break; + // The default: satisfies WS2812, WS2812B and SK6812 at once. + default: cfg_.t0h_ns = 350; cfg_.t1h_ns = 700; cfg_.period_ns = 1250; break; + } + } + bool parseConfig() { + applyTiming(); pinCount_ = 0; uint8_t n = 0; const char* warn = nullptr; diff --git a/src/light/effects/AuroraEffect.h b/src/light/effects/AuroraEffect.h index a8f12854..16e41d2b 100644 --- a/src/light/effects/AuroraEffect.h +++ b/src/light/effects/AuroraEffect.h @@ -42,7 +42,7 @@ namespace mm { class AuroraEffect : public EffectBase { public: const char* tags() const override { return "💫🖌️"; } // power-function showcase - Dim dimensions() const override { return Dim::D2; } // writes the z=0 slice; extrude fills z + Dim dimensions() const override { return Dim::D3; } // volumetric: the curtains have depth static constexpr uint8_t kMaxLayers = 4; @@ -55,9 +55,9 @@ class AuroraEffect : public EffectBase { uint8_t contrast = 140; // the visibility window: higher = fewer, sharper curtains uint8_t octaves = 2; // detail within each layer, multiplying the cost knob - /// Read the polar address from a table instead of computing it per pixel (light/polar.h). - bool usePolarTable = true; - bool widePolarTable = false; + /// The polar address: whether to read it from a table, at what precision, and how a + /// volumetric fixture's coordinates become an angle and a radius (light/polar.h). + PolarLut::Controls polar; void defineControls() override { controls_.addControl("speed", speed, 0, 120); @@ -68,21 +68,19 @@ class AuroraEffect : public EffectBase { controls_.addControl("segments", segments, 1, 16); controls_.addControl("contrast", contrast, 0, 255); controls_.addControl("octaves", octaves, 1, 4); - controls_.addControl("polarTable", usePolarTable); - controls_.addControl("polarTable16", widePolarTable); + PolarLut::addControls(controls_, polar); } void prepare() override { // The polar address is built here, not in tick(): prepare() is where a module builds state // and where allocation is allowed, and it runs again on every resize and control change, so // the table is always current without the render path ever allocating. - if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); - else lut_.release(); + lut_.prepareFor(polar, width(), height(), EffectBase::depth()); } void tick() MM_NONBLOCKING override { const draw::Canvas cv = canvas(); - const lengthType w = width(), h = height(); + const lengthType w = width(), h = height(), dep = depth(); const uint8_t n = layers < 1 ? 1 : (layers > kMaxLayers ? kMaxLayers : layers); // Each layer gets three oscillators: how far it has drifted, how its scale breathes, and how @@ -102,7 +100,7 @@ class AuroraEffect : public EffectBase { bank_.advance(elapsed()); const bool table = lut_.ready(); - const int32_t cx = w / 2, cy = h / 2; + const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; // Hoist everything constant across the frame: the pixel loop should read, not compute. uint32_t drift[kMaxLayers]; @@ -126,18 +124,27 @@ class AuroraEffect : public EffectBase { uint8_t frameMax = 0, frameMin = 255; std::size_t idx = 0; + for (lengthType z = 0; z < dep; z++) for (lengthType y = 0; y < h; y++) { for (lengthType x = 0; x < w; x++, idx++) { angle16 baseAngle; uint32_t r; + // The depth coordinate the field samples along. Under cylindrical the address is + // the same at every height, so this is what separates the slices; under the other + // two the address already carries depth and this rides along with it. + int32_t along; if (table) { baseAngle = lut_.angle(idx); r = lut_.radiusPixels(idx); + along = lut_.mapping() == PolarLut::Mapping::Spherical + ? static_cast(lut_.pitch(idx) >> 6) + : static_cast(z) - cz; } else { const int32_t dx = static_cast(x) - cx; const int32_t dy = static_cast(y) - cy; baseAngle = atan16(dy, dx); r = dist16(dx, dy); + along = static_cast(z) - cz; } // The strongest layer at this pixel wins, and how far it exceeds the visibility @@ -152,11 +159,15 @@ class AuroraEffect : public EffectBase { const uint32_t fx = (static_cast(a) >> 6) * layerScale[i] / 16u; const uint32_t fy = (r * layerScale[i]) + (drift[i] >> 6) + i * 4096u; + // Depth is the field's third axis, so a volumetric fixture samples through the + // field rather than repeating one slice. On a panel `along` is 0 at every light + // and this reduces to the 2D sample exactly. + const uint32_t fz = static_cast(along * static_cast(layerScale[i])); // The field displaces its own sample angle, which is what makes a curtain fold // over itself rather than merely sweep past. - const uint8_t v = warp > 0 ? warp8(fx, fy, static_cast(warp) * 4, octaves) - : fbm8(fx, fy, octaves); + const uint8_t v = warp > 0 ? warp8(fx, fy, fz, static_cast(warp) * 4, octaves) + : fbm8(fx, fy, fz, octaves); if (v > best) { best = v; winner = i; } } @@ -185,7 +196,7 @@ class AuroraEffect : public EffectBase { // curtain jumped from one end of it to the other. Brightness belongs in the // brightness. const uint8_t index = static_cast((winner * 255u) / n); - draw::pixel(cv, {x, y, 0}, colorFromPalette(*Palettes::active(), index, bri)); + draw::pixel(cv, {x, y, z}, colorFromPalette(*Palettes::active(), index, bri)); } } diff --git a/src/light/effects/Noise2DEffect.h b/src/light/effects/Noise2DEffect.h deleted file mode 100644 index 3b026f68..00000000 --- a/src/light/effects/Noise2DEffect.h +++ /dev/null @@ -1,62 +0,0 @@ -#pragma once - -#include "light/effects/EffectBase.h" - -namespace mm { - -// Noise 2D: a smoothly drifting gradient-noise field. Each (x,y) pixel reads a 3D noise sample whose -// X/Y coordinates are the grid position scaled by `scale` (larger scale = finer, more detailed -// noise; smaller = broad, smooth blobs) and whose Z coordinate is time, so the whole field flows / -// morphs over the frames. The 0..255 noise value indexes the active palette directly, giving the -// classic organic, plasma-like color wash. -// -// Source math (MoonLight's Noise2D): for every (x,y), -// pixelHue8 = inoise8(x*scale, y*scale, millis()/(16-speed)); -// setRGB(x,y, ColorFromPalette(pal, pixelHue8)); -// `16-speed` is the time divisor: a higher `speed` (max 15) shrinks the divisor, so time advances -// faster through the noise and the field morphs quicker. speed maxes at 15, so 16-speed is at least -// 1 — the division can never be by zero. -// -// Prior art: MoonLight's Noise2D effect (E_MoonModules / MoonModules), itself in the WLED -// noise-effect lineage (FastLED inoise8, Perlin noise, Mark Kriegsman / Ken Perlin). The -// per-pixel coordinate-scale + time-on-Z animation and the direct palette indexing are reproduced -// exactly here, written fresh on EffectBase + the shared draw / noise primitives. -// Author: WLED (Noise 2D) — https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h -/// 2D gradient-noise effect. -class Noise2DEffect : public EffectBase { -public: - const char* tags() const override { return "💫🌙🐙"; } // MoonLight origin · MoonModules · WLED - Dim dimensions() const override { return Dim::D2; } - - uint8_t speed = 8; // time-flow rate (0..15); higher = faster morph (divisor is 16-speed) - uint8_t scale = 64; // noise zoom (2..255); higher = finer/more-detailed field - - void defineControls() override { - controls_.addControl("speed", speed, 0, 15); - controls_.addControl("scale", scale, 2, 255); - } - - void tick() MM_NONBLOCKING override { - const int cols = width(); - const int rows = height(); - - const draw::Canvas cv = canvas(); - - // Time coordinate on the noise Z axis: millis() / (16 - speed). speed <= 15 keeps the - // divisor >= 1 (no divide-by-zero). uint32_t throughout — matches inoise8's coordinate type. - const uint32_t t = elapsed() / static_cast(16 - speed); - - for (int y = 0; y < rows; y++) { - for (int x = 0; x < cols; x++) { - const uint8_t pixelHue8 = inoise8(static_cast(x) * scale, - static_cast(y) * scale, t); - const RGB c = colorFromPalette(*Palettes::active(), pixelHue8); - draw::pixel(cv, {static_cast(x), static_cast(y), 0}, c); - } - } - } - -private: -}; - -} // namespace mm \ No newline at end of file diff --git a/src/light/effects/NoiseEffect.h b/src/light/effects/NoiseEffect.h index 210b2143..bba1642a 100644 --- a/src/light/effects/NoiseEffect.h +++ b/src/light/effects/NoiseEffect.h @@ -1,66 +1,86 @@ #pragma once -#include "core/math16.h" // BeatPhase — the shared BPM accumulator +#include "core/math16.h" // BeatPhase: the shared BPM accumulator #include "light/effects/EffectBase.h" namespace mm { -// Author: FastLED inoise field (Mark Kriegsman) -/// Smooth animated gradient-noise effect (3D on volumetric layouts). +// Noise: a gradient-noise field indexed straight into the palette, the plainest way to turn the +// field into light and the reference every other noise effect is a variation on. +// +// One control decides what MOVES, which is the whole character of the effect and was previously the +// difference between two separate effects: +// +// drift - the sample coordinates scroll, so the field slides across the fixture like weather. +// Each axis scrolls at a slightly different rate, so it flows rather than translating +// rigidly. On a volumetric fixture the third axis is the light's own z, so the slices +// differ and the field has real depth. +// morph - the coordinates hold still and TIME is the third axis, so the field changes in place +// without going anywhere. On a panel this is the classic plasma-like wash. On a +// volumetric fixture there is no axis left for depth, so every slice is the same. +// +// Author: FastLED inoise field (Mark Kriegsman), and MoonLight's Noise2D for the morph form. +/// Effect: a gradient-noise field through the palette, drifting across the fixture or morphing in place. /// @card NoiseEffect.gif class NoiseEffect : public EffectBase { public: - const char* tags() const override { return "⚡️"; } // FastLED-style noise + const char* tags() const override { return "⚡️💫🌙🐙"; } // FastLED + MoonLight lineage Dim dimensions() const override { return Dim::D3; } - uint8_t scale = 4; // spatial frequency (1-32) - uint8_t bpm = 60; // beats per minute — scrolls 8 noise cells per beat + static constexpr const char* kMotionOptions[] = {"drift", "morph"}; + + uint8_t motion = 0; // 0 = drift (the field moves), 1 = morph (the field changes in place) + uint8_t scale = 4; // spatial frequency: lower is broader, higher is finer + uint8_t bpm = 60; // how fast it moves, in beats per minute void defineControls() override { - controls_.addControl("scale", scale, 1, 32); + controls_.addSelect("motion", motion, kMotionOptions, 2); + controls_.addControl("scale", scale, 1, 255); controls_.addControl("bpm", bpm, 1, 255); } void tick() MM_NONBLOCKING override { uint8_t* buf = buffer(); - lengthType w = width(); - lengthType h = height(); - lengthType d = depth(); - uint8_t cpl = channelsPerLight(); - nrOfLightsType count = nrOfLights(); - nrOfLightsType wh = static_cast(w) * h; + const lengthType w = width(), h = height(), d = depth(); + const uint8_t cpl = channelsPerLight(); + const nrOfLightsType count = nrOfLights(); + const nrOfLightsType wh = static_cast(w) * h; + if (cpl == 0 || w == 0 || h == 0) return; - // Accumulate phase incrementally — changing BPM doesn't cause a jump. phase_ holds the RAW - // numerator (dt·bpm·w·64) and the /60000 divide runs only at the sampling point below; dividing - // per tick would truncate sub-unit progress to zero on a fast board (short dt) or small grid, - // stalling the field. Factor 64 tuned so 60 BPM at 128-wide gives smooth motion. - // The rate carries the grid width, so it is fed pre-scaled: advanceScaled takes the whole - // dt multiplicand rather than a plain BPM. BeatPhase owns the first-tick seed (the field - // starts at phase 0 rather than jumping by the device uptime) and the divide-late rule. + // Accumulate the phase incrementally, so changing bpm does not jump the field. phase_ holds + // the RAW numerator and the divide runs at the sampling point: dividing per tick truncates + // sub-unit progress to zero on a fast board or a small grid, stalling the field. The rate + // carries the grid width, so it is fed pre-scaled. BeatPhase owns the first-tick seed and + // the divide-late rule. phase_.advanceScaled(elapsed(), static_cast(bpm) * w * 64); - uint32_t t = phase_.phase(1); + const uint32_t t = phase_.phase(1); + const uint8_t sc = scale ? scale : 1; - // Buffer layout is (z * h * w + y * w + x). For a 2D grid (d == 1) z - // is always 0 and we sample 2D noise — no perf cost vs. the old 2D-only - // path. For d > 1 we sample 3D noise so each z-slice differs. for (nrOfLightsType i = 0; i < count; i++) { - nrOfLightsType rem = i % wh; - lengthType x = static_cast(rem % w); - lengthType y = static_cast(rem / w); - lengthType z = static_cast(i / wh); + const nrOfLightsType rem = i % wh; + const lengthType x = static_cast(rem % w); + const lengthType y = static_cast(rem / w); + const lengthType z = static_cast(i / wh); - // Scale coords into noise space: a finer `scale` packs more cells across the grid, - // and the time offset scrolls each axis at a slightly different rate so the field - // flows rather than slides flat. inoise8's high byte selects the cell, low byte the - // position within it. - const uint32_t nx = (static_cast(x) * 256u + t) / scale; - const uint32_t ny = (static_cast(y) * 256u + t / 3u) / scale; - const uint8_t n = (d > 1) - ? inoise8(nx, ny, (static_cast(z) * 256u + t / 5u) / scale) - : inoise8(nx, ny); - RGB c = colorFromPalette(*Palettes::active(), n); + uint8_t n; + if (motion == 1) { + // Morph: space is still and time is the third axis. The field changes without + // travelling, which on a panel is the classic plasma wash. + n = inoise8(static_cast(x) * 256u / sc, + static_cast(y) * 256u / sc, + (static_cast(z) * 256u / sc) + t); + } else { + // Drift: the coordinates scroll, each axis at its own rate so the field flows + // instead of sliding rigidly. On a volumetric fixture z is the light's own depth, + // so the slices differ; on a panel that term is constant and costs nothing. + const uint32_t nx = (static_cast(x) * 256u + t) / sc; + const uint32_t ny = (static_cast(y) * 256u + t / 3u) / sc; + n = d > 1 ? inoise8(nx, ny, (static_cast(z) * 256u + t / 5u) / sc) + : inoise8(nx, ny); + } - size_t offset = static_cast(i) * cpl; + const RGB c = colorFromPalette(*Palettes::active(), n); + const size_t offset = static_cast(i) * cpl; if (cpl >= 1) buf[offset + 0] = c.r; if (cpl >= 2) buf[offset + 1] = c.g; if (cpl >= 3) buf[offset + 2] = c.b; @@ -69,8 +89,8 @@ class NoiseEffect : public EffectBase { private: BeatPhase phase_; - // The gradient-noise field itself (lattice hash, gradient dot products, quintic fade, bi- or - // trilinear blend) is the shared inoise8 in core/noise.h: this effect just scales coordinates into it and colors the + // The field itself (lattice hash, gradient dot products, quintic fade, bi- or trilinear blend) + // is the shared inoise8 in core/noise.h: this effect scales coordinates into it and colors the // result through the palette. }; diff --git a/src/light/effects/PolarNoiseEffect.h b/src/light/effects/PolarNoiseEffect.h index caa490f4..625a9d7e 100644 --- a/src/light/effects/PolarNoiseEffect.h +++ b/src/light/effects/PolarNoiseEffect.h @@ -36,7 +36,7 @@ namespace mm { class PolarNoiseEffect : public EffectBase { public: const char* tags() const override { return "💫🖌️"; } // power-function showcase - Dim dimensions() const override { return Dim::D2; } // writes the z=0 slice; extrude fills z + Dim dimensions() const override { return Dim::D3; } // volumetric: the field turns through depth uint8_t bpm = 8; // how fast the field drifts uint8_t scale = 40; // noise cells across the grid: low = broad shapes, high = fine detail @@ -45,17 +45,9 @@ class PolarNoiseEffect : public EffectBase { uint8_t octaves = 2; // fbm octaves — the main cost knob uint8_t twist = 30; // how much the radius shears the angle, giving the field a spiral set - /// Read the polar address from a table rather than computing it per pixel. On by default: it is - /// the same address either way. Turning it off trades frame time for the two bytes per pixel the - /// table costs, which is the tradeoff on a device with a large grid and little memory, and it is - /// how the fallback path stays exercised rather than being code nothing ever runs. - bool usePolarTable = true; - - /// Hold the polar address at full 16-bit precision, at twice the memory. The 8-bit default - /// quantizes the angle to 256 steps, which a noise field samples through without showing it; - /// an effect whose look depends on a fine angle (a slow rotation, a palette read straight from - /// the angle) turns this on. - bool widePolarTable = false; + /// The polar address: whether to read it from a table, at what precision, and how a + /// volumetric fixture's coordinates become an angle and a radius (light/polar.h). + PolarLut::Controls polar; void defineControls() override { controls_.addControl("bpm", bpm, 0, 60); @@ -66,21 +58,19 @@ class PolarNoiseEffect : public EffectBase { controls_.addControl("twist", twist, 0, 255); // The address tradeoff, as controls because it is the user's to make: the table costs 2 // bytes per pixel (4 when wide) and buys back the per-pixel atan16 and dist16. - controls_.addControl("polarTable", usePolarTable); - controls_.addControl("polarTable16", widePolarTable); + PolarLut::addControls(controls_, polar); } void prepare() override { // The polar address is built here, not in tick(): prepare() is where a module builds state // and where allocation is allowed, and it runs again on every resize and control change, so // the table is always current without the render path ever allocating. - if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); - else lut_.release(); + lut_.prepareFor(polar, width(), height(), EffectBase::depth()); } void tick() MM_NONBLOCKING override { const draw::Canvas cv = canvas(); - const lengthType w = width(), h = height(); + const lengthType w = width(), h = height(), dep = depth(); // The drift is an oscillator: a sawtooth that only ever moves forward, which is what makes // the field breathe outward rather than rock back and forth. @@ -91,22 +81,30 @@ class PolarNoiseEffect : public EffectBase { // Build the address table if the grid changed; a rebuild is the only frame that pays for it. // If it cannot be allocated the effect still renders, computing the address per pixel. const bool table = lut_.ready(); - const int32_t cx = w / 2, cy = h / 2; + const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; std::size_t i = 0; + for (lengthType z = 0; z < dep; z++) for (lengthType y = 0; y < h; y++) { for (lengthType x = 0; x < w; x++, i++) { // The polar address, and the radius in the pixel units the field is scaled in. angle16 a; uint32_t r; + // The axis the field is sampled along through the fixture. Zero at every light on a + // panel, so the volumetric form reduces exactly to the flat one there. + int32_t along; if (table) { a = lut_.angle(i); r = lut_.radiusPixels(i); + along = lut_.mapping() == PolarLut::Mapping::Spherical + ? static_cast(lut_.pitch(i) >> 6) + : static_cast(z) - cz; } else { const int32_t dx = static_cast(x) - cx; const int32_t dy = static_cast(y) - cy; a = atan16(dy, dx); r = dist16(dx, dy); + along = static_cast(z) - cz; } // The twist shears the angle by the radius, which is what turns concentric rings @@ -122,12 +120,13 @@ class PolarNoiseEffect : public EffectBase { // axis, which reads as the pattern breathing outward. const uint32_t fx = (static_cast(a) >> 6) * scale / 16u; const uint32_t fy = (r * scale) + (t >> 6); + const uint32_t fz = static_cast(along * static_cast(scale)); - const uint8_t v = warp > 0 ? warp8(fx, fy, static_cast(warp) * 4, octaves) - : fbm8(fx, fy, octaves); + const uint8_t v = warp > 0 ? warp8(fx, fy, fz, static_cast(warp) * 4, octaves) + : fbm8(fx, fy, fz, octaves); const RGB c = colorFromPalette(*Palettes::active(), v, 255); - draw::pixel(cv, {x, y, 0}, c); + draw::pixel(cv, {x, y, z}, c); } } } diff --git a/src/light/effects/SpiralEffect.h b/src/light/effects/SpiralEffect.h index 52de44d0..71ebe4b6 100644 --- a/src/light/effects/SpiralEffect.h +++ b/src/light/effects/SpiralEffect.h @@ -19,25 +19,21 @@ class SpiralEffect : public EffectBase { uint8_t twist = 4; uint8_t hue_shift = 0; - /// Read the polar address from a table instead of computing it per pixel (light/polar.h). It - /// costs 2 bytes per pixel, 4 when wide, and the effect falls back to computing the address - /// when the device cannot spare them. - bool usePolarTable = true; - bool widePolarTable = false; + /// The polar address: whether to read it from a table, at what precision, and how a + /// volumetric fixture's coordinates become an angle and a radius (light/polar.h). + PolarLut::Controls polar; void defineControls() override { controls_.addControl("bpm", bpm, 1, 255); controls_.addControl("twist", twist, 1, 255); controls_.addControl("hue_shift", hue_shift, 0, 255); - controls_.addControl("polarTable", usePolarTable); - controls_.addControl("polarTable16", widePolarTable); + PolarLut::addControls(controls_, polar); } void prepare() override { // The polar address is built here, not in tick(): prepare() is where a module builds state // and where allocation is allowed, and it runs again on every resize and control change, so // the table is always current without the render path ever allocating. - if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); - else lut_.release(); + lut_.prepareFor(polar, width(), height(), depth()); } diff --git a/src/light/effects/TunnelEffect.h b/src/light/effects/TunnelEffect.h index 2593ce1b..fc12851a 100644 --- a/src/light/effects/TunnelEffect.h +++ b/src/light/effects/TunnelEffect.h @@ -30,20 +30,20 @@ namespace mm { class TunnelEffect : public EffectBase { public: const char* tags() const override { return "💫🖌️"; } // power-function showcase - Dim dimensions() const override { return Dim::D2; } // writes the z=0 slice; extrude fills z + Dim dimensions() const override { return Dim::D3; } // volumetric: the wall recedes through depth uint8_t bpm = 20; // how fast the tunnel flies past - uint8_t depth = 60; // texture scale along the tunnel: higher = finer rings + uint8_t depth = 60; // texture scale along the tunnel: higher = finer rings. + // Shadows EffectBase::depth() (the fixture's), which is why the few + // uses of that one below are qualified. uint8_t twist = 40; // rotation per unit depth, so the tunnel corkscrews uint8_t segments = 1; // kaleidoscope the wall; 1 leaves it plain uint8_t octaves = 2; // wall texture detail, and the cost knob bool vignette = true; // darken toward the vanishing point so it reads as receding - /// Read the polar address from a table instead of computing it per pixel (light/polar.h). It - /// costs 2 bytes per pixel, 4 when wide, and the effect falls back to computing the address - /// when the device cannot spare them. - bool usePolarTable = true; - bool widePolarTable = false; + /// The polar address: whether to read it from a table, at what precision, and how a + /// volumetric fixture's coordinates become an angle and a radius (light/polar.h). + PolarLut::Controls polar; void defineControls() override { controls_.addControl("bpm", bpm, 0, 120); @@ -52,44 +52,51 @@ class TunnelEffect : public EffectBase { controls_.addControl("segments", segments, 1, 16); controls_.addControl("octaves", octaves, 1, 4); controls_.addControl("vignette", vignette); - controls_.addControl("polarTable", usePolarTable); - controls_.addControl("polarTable16", widePolarTable); + PolarLut::addControls(controls_, polar); } void prepare() override { // The polar address is built here, not in tick(): prepare() is where a module builds state // and where allocation is allowed, and it runs again on every resize and control change, so // the table is always current without the render path ever allocating. - if (usePolarTable) lut_.prepare(static_cast(width()), static_cast(height()), widePolarTable); - else lut_.release(); + lut_.prepareFor(polar, width(), height(), EffectBase::depth()); } void tick() MM_NONBLOCKING override { const draw::Canvas cv = canvas(); - const lengthType w = width(), h = height(); + const lengthType w = width(), h = height(), dep = EffectBase::depth(); phase_.advance(elapsed(), bpm); const uint32_t t = phase_.phase(65536); - const int32_t cx = w / 2, cy = h / 2; + const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; // The polar address does not change between frames, so it is read from a table; if the // device cannot spare the memory the effect computes it per pixel and looks the same. const bool table = lut_.ready(); std::size_t i = 0; + for (lengthType z = 0; z < dep; z++) for (lengthType y = 0; y < h; y++) { for (lengthType x = 0; x < w; x++, i++) { uint32_t r; angle16 a; + // How far along the tube this light sits. A volumetric fixture is a real tube, so + // depth is literally distance down it: the wall texture scrolls past each slice at + // its own offset rather than every slice showing the same ring. + int32_t along; if (table) { a = lut_.angle(i); r = lut_.radiusPixels(i); + along = lut_.mapping() == PolarLut::Mapping::Spherical + ? static_cast(lut_.pitch(i) >> 6) + : static_cast(z) - cz; } else { const int32_t dx = static_cast(x) - cx; const int32_t dy = static_cast(y) - cy; r = dist16(dx, dy); a = atan16(dy, dx); + along = static_cast(z) - cz; } // 1/r is the depth coordinate: distant wall (small r) compresses toward the centre, @@ -105,7 +112,10 @@ class TunnelEffect : public EffectBase { // Sample the wall texture in (angle, depth) space, with time pulling the depth // coordinate toward the viewer. const uint32_t u = (static_cast(a) >> 5); - const uint32_t v = depthCoord + (t >> 5); + // Depth down the tube adds to the texture's own depth coordinate, so a light further + // in shows wall that is further away. On a panel `along` is 0 and this is the flat + // tunnel exactly. + const uint32_t v = depthCoord + (t >> 5) + static_cast(along * 256); const uint8_t tex = fbm8(u, v, octaves); // Vignette by distance so the centre reads as far away rather than merely small. @@ -116,7 +126,7 @@ class TunnelEffect : public EffectBase { bri = static_cast(rel < 20 ? 20 : rel); } - draw::pixel(cv, {x, y, 0}, colorFromPalette(*Palettes::active(), tex, bri)); + draw::pixel(cv, {x, y, z}, colorFromPalette(*Palettes::active(), tex, bri)); } } } diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index 53a54c98..49271289 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -269,7 +269,10 @@ extern "C" inline uint32_t mm_light_warp(const uintptr_t* args, uint32_t, const // is what the compiled OscillatorBank gives an effect and what a composition needs. extern "C" inline uint32_t mm_light_osc(const uintptr_t* args, uint32_t, const uint8_t*) { const uint32_t rate = uint32_t(args[0]), ms = uint32_t(args[1]), shape = uint32_t(args[2]); - if (rate == 0) return shape == 3 ? 0u : 32768u; // held still, at the shape's start + // No special case for rate 0: the phase is then 0 and each shape's own value at phase 0 is the + // right answer (a sine sits at its midpoint, a triangle and a sawtooth at their start, a square + // low). An earlier version returned the midpoint for all four, which held a triangle and a saw + // at 32768 rather than at 0. // The phase, as an angle16: rate cycles per minute means rate * ms / 60000 turns. const uint32_t phase = static_cast((static_cast(ms) * rate * 65536u) / 60000u); const angle16 a = static_cast(phase); diff --git a/src/light/polar.h b/src/light/polar.h index f77cbc74..b235ca00 100644 --- a/src/light/polar.h +++ b/src/light/polar.h @@ -1,7 +1,9 @@ #pragma once +#include "core/Control.h" // ControlList: the controls an effect surfaces for the table #include "core/ScratchBuffer.h" // ScratchBuffer: self-sizing, owner-tied scratch memory #include "core/math16.h" // atan16, dist16, angle16 +#include "light/light_types.h" // lengthType #include "platform/platform.h" // freeHeap, HEAP_RESERVE: the memory gate #include @@ -30,6 +32,19 @@ // draw, and reads. prepare() rebuilds only when the geometry or the width actually changed, so // calling it every frame is free. // +// On a VOLUMETRIC fixture "angle and radius" has no single meaning, so the projection is a control +// rather than a decision. Which one is right is a property of the fixture, not of the library: +// +// cylindrical - angle and radius on the xy plane, depth carried separately. A tube, a curtain or +// a stack of panels wants this, and it reduces to exactly the 2D behavior when +// depth is 1, so no existing fixture changes. The default for that reason. +// spherical - angle around, angle up, radius from the center. A sphere or a ball of light +// inside a cube wants this; it costs one more table for the second angle. +// radial - distance from the center only, no angle. Shells rather than curtains, and the +// cheapest of the three. +// +// The choice is made once when the table is built, so it costs nothing per sample. +// // On a device without PSRAM the tables are a real fraction of the heap, so prepare() checks free // memory against the reserve and declines rather than crowding it: a 32x32 grid asks 2 KB, a 64x64 // grid 8 KB, and a 128x128 wall 32 KB. The caller falls back to computing the address per pixel and @@ -44,9 +59,19 @@ namespace mm { /// control and switch live, which is what the live-reconfiguration rule requires. class PolarLut { public: + /// How a volumetric fixture's coordinates become an angle and a radius. Ignored at depth 1, + /// where all three reduce to the same plane. + enum class Mapping : uint8_t { + Cylindrical = 0, ///< angle and radius on xy, depth separate: the 2D behavior, extended + Spherical = 1, ///< angle around and angle up, radius from the center + Radial = 2, ///< distance from the center only + }; + /// Owner is the module the tables belong to: it accounts their bytes and frees them when the /// module is disabled, the same contract every ScratchBuffer has. - explicit PolarLut(MoonModule& owner) : angle8_(owner), radius8_(owner), angle16_(owner), radius16_(owner) {} + explicit PolarLut(MoonModule& owner) + : angle8_(owner), radius8_(owner), pitch8_(owner), + angle16_(owner), pitch16_(owner), radius16_(owner) {} /// Build the tables for a `w` x `h` grid, if they are not already built for exactly that. /// `wide` selects the 16-bit tables. The center is the grid's middle in whole pixels, matching @@ -59,57 +84,144 @@ class PolarLut { /// rather than taking the last of the heap and starving something else later (the rule /// MappingLUT established). And if the allocation fails anyway it unwinds to nothing rather than /// holding a half-built table. Degrade visibly, never crash. + /// The controls an effect surfaces to let a user address a volumetric fixture, and the state + /// behind them. Bound by `addControls` and read by `prepareFor`, so an effect adopting the table + /// writes two calls rather than repeating a member, an option table, a binding and a five-line + /// prepare: three effects had all four copied before this existed. + struct Controls { + bool use = true; ///< read the address from a table rather than computing it + bool wide = false; ///< hold it at full 16-bit precision, at twice the memory + uint8_t mapping = 0; ///< which projection, indexing kMappingOptions + }; + + static constexpr const char* kMappingOptions[] = {"cylindrical", "spherical", "radial"}; + + /// Surface the three controls on `list`. + /// + /// Deliberately asks nothing about the fixture: defineControls() runs before an effect is + /// attached to a layer (and on the throwaway instances the /api/types probe builds), so + /// reaching for width or depth here dereferences a null layer. An earlier version hid the + /// mapping on a flat fixture and segfaulted the framerate sweep for exactly that reason. The + /// mapping is simply always shown; on a fixture with no depth all three agree, so the control + /// is inert rather than wrong. + static void addControls(ControlList& list, Controls& c) { + list.addControl("polarTable", c.use); + list.addControl("polarTable16", c.wide); + list.addSelect("mapping", c.mapping, kMappingOptions, 3); + } + + /// Build (or release) the table for a fixture of this size, per the controls. The one call an + /// effect makes from prepare(). + bool prepareFor(const Controls& c, lengthType w, lengthType h, lengthType d) { + if (!c.use) { release(); return false; } + return prepare(static_cast(w), static_cast(h), static_cast(d), + c.wide, static_cast(c.mapping > 2 ? 0 : c.mapping)); + } + + /// The 2D form. A separate overload rather than a defaulted depth, because `prepare(w, h, true)` + /// meaning "16-bit" and `prepare(w, h, 1)` meaning "one deep" are one careless argument apart, + /// and a bool that silently becomes a depth is the kind of mistake that compiles and renders + /// wrong. The arity says which one the caller means. bool prepare(uint16_t w, uint16_t h, bool wide = false) { - if (w == w_ && h == h_ && wide == wide_ && ready_) return true; - w_ = w; h_ = h; wide_ = wide; ready_ = false; - const std::size_t n = static_cast(w) * h; + return prepare(w, h, 1, wide, Mapping::Cylindrical); + } + + /// The volumetric form: `d` is the fixture's depth and `mapping` how its coordinates become an + /// angle and a radius. At `d` = 1 all three mappings agree and this is the 2D form. + bool prepare(uint16_t w, uint16_t h, uint16_t d, bool wide, + Mapping mapping = Mapping::Cylindrical) { + if (w == w_ && h == h_ && d == d_ && wide == wide_ && mapping == mapping_ && ready_) return true; + w_ = w; h_ = h; d_ = d; wide_ = wide; mapping_ = mapping; ready_ = false; + const std::size_t n = static_cast(w) * h * (d ? d : 1); if (n == 0) { release(); return false; } // an empty grid holds nothing, not the old table + // Spherical is the one projection that needs a second angle, so it is the one that costs a + // third table. The others leave it unallocated rather than filled with zeros. + const bool needPitch = mapping == Mapping::Spherical && d > 1; + // Free the width we are not using, so switching precision live does not hold both, and so // the budget below is measured against a heap that already has the old tables back. - if (wide) { angle8_.resize(0); radius8_.resize(0); } - else { angle16_.resize(0); radius16_.resize(0); } + if (wide) { angle8_.resize(0); radius8_.resize(0); pitch8_.resize(0); } + else { angle16_.resize(0); radius16_.resize(0); pitch16_.resize(0); } + if (!needPitch) { pitch8_.resize(0); pitch16_.resize(0); } // The memory gate. freeHeap() is 0 on desktop, which means unlimited, so the gate is an // ESP32 rule only. The tables are worth having, not worth the last of the heap. - const std::size_t want = n * (wide ? 4u : 2u); + const std::size_t want = n * (wide ? 4u : 2u) + (needPitch ? n * (wide ? 2u : 1u) : 0u); const std::size_t freeHeap = platform::freeHeap(); if (freeHeap != 0) { const std::size_t budget = freeHeap > platform::HEAP_RESERVE ? freeHeap - platform::HEAP_RESERVE : 0; if (budget < want) { release(); return false; } } - if (wide) { if (!angle16_.resize(n) || !radius16_.resize(n)) { release(); return false; } } - else { if (!angle8_.resize(n) || !radius8_.resize(n)) { release(); return false; } } + if (wide) { + if (!angle16_.resize(n) || !radius16_.resize(n)) { release(); return false; } + if (needPitch && !pitch16_.resize(n)) { release(); return false; } + } else { + if (!angle8_.resize(n) || !radius8_.resize(n)) { release(); return false; } + if (needPitch && !pitch8_.resize(n)) { release(); return false; } + } - // The longest radius on the grid: the corner furthest from the center. Radii scale against - // it so the outer edge reaches full scale whatever the aspect ratio, which is what makes a - // radial gradient fill a wide panel instead of banding in a circle inside it. - const int32_t cx = w / 2, cy = h / 2; + // The longest radius on the fixture: the corner furthest from the center. Radii scale + // against it so the outer edge reaches full scale whatever the aspect ratio, which is what + // makes a radial gradient fill a wide panel instead of banding in a circle inside it. Under + // cylindrical the depth axis is carried separately, so it does not enter the radius and a + // deep fixture measures the same as the panel it is made of. + const int32_t cx = w / 2, cy = h / 2, cz = d / 2; const int32_t fx = (cx > w - 1 - cx ? cx : w - 1 - cx); const int32_t fy = (cy > h - 1 - cy ? cy : h - 1 - cy); - maxRadius_ = dist16(fx, fy); + const int32_t fz = (cz > d - 1 - cz ? cz : d - 1 - cz); + maxRadius_ = mapping == Mapping::Cylindrical ? dist16(fx, fy) + : dist16(dist16(fx, fy), fz); if (maxRadius_ == 0) maxRadius_ = 1; // a 1x1 grid: avoid a divide by zero + for (uint16_t z = 0; z < (d ? d : 1); z++) for (uint16_t y = 0; y < h; y++) { for (uint16_t x = 0; x < w; x++) { const int32_t dx = static_cast(x) - cx; const int32_t dy = static_cast(y) - cy; - const angle16 a = atan16(dy, dx); - const uint32_t r = dist16(dx, dy); + const int32_t dz = static_cast(z) - cz; + + // The three projections differ only here: what the angle means and what the radius + // measures. Everything below is common, which is why adding one costs a case. + angle16 a = 0; + uint32_t r = 0; + angle16 pitch = 0; + switch (mapping) { + case Mapping::Radial: + // No angle at all: distance from the center, so the field reads as shells. + r = dist16(dist16(dx, dy), dz); + break; + case Mapping::Spherical: + // Around and up: the second angle is the elevation above the xy plane, so a + // sphere's surface maps onto the field evenly rather than pinching. + a = atan16(dy, dx); + r = dist16(dist16(dx, dy), dz); + pitch = atan16(dz, static_cast(dist16(dx, dy))); + break; + case Mapping::Cylindrical: + default: + // The 2D address, with depth left to the caller: identical to a panel's at + // every z, which is what makes this the default. + a = atan16(dy, dx); + r = dist16(dx, dy); + break; + } // Scale the radius to full range against the furthest corner, so `radius` is a // position from center (0) to edge (full scale) rather than a pixel count. Both // steps ROUND rather than truncate: a caller scaling back to pixels truncates twice // otherwise and lands a whole pixel short at every radius, which shifts the entire // field inward by one and is plainly visible as a displaced center. const uint32_t rs = r >= maxRadius_ ? 65535u : (r * 65535u + maxRadius_ / 2) / maxRadius_; - const std::size_t i = static_cast(y) * w + x; + const std::size_t i = (static_cast(z) * h + y) * w + x; if (wide) { angle16_[i] = a; radius16_[i] = static_cast(rs); + if (needPitch) pitch16_[i] = pitch; } else { angle8_[i] = static_cast(a >> 8); radius8_[i] = static_cast((rs + 128) >> 8 > 255 ? 255 : (rs + 128) >> 8); + if (needPitch) pitch8_[i] = static_cast(pitch >> 8); } } } @@ -121,8 +233,9 @@ class PolarLut { /// The next prepare() rebuilds them. void release() { if (!ready_ && bytes() == 0) return; - angle8_.resize(0); radius8_.resize(0); angle16_.resize(0); radius16_.resize(0); - w_ = h_ = 0; + angle8_.resize(0); radius8_.resize(0); pitch8_.resize(0); + angle16_.resize(0); radius16_.resize(0); pitch16_.resize(0); + w_ = h_ = d_ = 0; ready_ = false; } @@ -133,7 +246,22 @@ class PolarLut { /// The distance from center to the furthest corner, in pixels: what `radius` is scaled against. uint32_t maxRadius() const { return maxRadius_; } /// What the tables currently cost. - std::size_t bytes() const { return angle8_.bytes() + radius8_.bytes() + angle16_.bytes() + radius16_.bytes(); } + std::size_t bytes() const { + return angle8_.bytes() + radius8_.bytes() + pitch8_.bytes() + + angle16_.bytes() + radius16_.bytes() + pitch16_.bytes(); + } + /// Which projection the built tables use. + Mapping mapping() const { return mapping_; } + + /// The elevation of pixel `i` above the xy plane, under the spherical projection. Zero under the + /// other two, which have no second angle: a caller can read it unconditionally. + angle16 pitch(std::size_t i) const { + if (!ready_) return 0; + if (wide_) return pitch16_.count() ? pitch16_.data()[i] : 0; + if (!pitch8_.count()) return 0; + const uint32_t v = pitch8_.data()[i]; + return static_cast((v << 8) | v); + } /// The angle of pixel `i` (row-major, y * width + x), as a full angle16 whichever width is /// built: the 8-bit table widens, so a caller reads one type and the precision is the table's. @@ -165,15 +293,22 @@ class PolarLut { /// The angle at (x, y). The index form above is what a pixel loop should use; this is for a /// caller that has coordinates rather than a running index. - angle16 angleAt(uint16_t x, uint16_t y) const { return angle(static_cast(y) * w_ + x); } - /// The radius at (x, y). - uint16_t radiusAt(uint16_t x, uint16_t y) const { return radius(static_cast(y) * w_ + x); } + angle16 angleAt(uint16_t x, uint16_t y, uint16_t z = 0) const { return angle(index(x, y, z)); } + /// The radius at (x, y, z). + uint16_t radiusAt(uint16_t x, uint16_t y, uint16_t z = 0) const { return radius(index(x, y, z)); } + /// The elevation at (x, y, z), under the spherical projection. + angle16 pitchAt(uint16_t x, uint16_t y, uint16_t z = 0) const { return pitch(index(x, y, z)); } + /// The running index of (x, y, z), the same order the buffer uses. + std::size_t index(uint16_t x, uint16_t y, uint16_t z = 0) const { + return (static_cast(z) * h_ + y) * w_ + x; + } private: - ScratchBuffer angle8_, radius8_; - ScratchBuffer angle16_; + ScratchBuffer angle8_, radius8_, pitch8_; + ScratchBuffer angle16_, pitch16_; ScratchBuffer radius16_; - uint16_t w_ = 0, h_ = 0; + uint16_t w_ = 0, h_ = 0, d_ = 0; + Mapping mapping_ = Mapping::Cylindrical; uint32_t maxRadius_ = 1; bool wide_ = false; bool ready_ = false; diff --git a/src/main.cpp b/src/main.cpp index ed30d4f9..8ab2f7f2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,7 +68,6 @@ #include "light/effects/RandomEffect.h" #include "light/effects/LissajousEffect.h" #include "light/effects/RubiksCubeEffect.h" -#include "light/effects/Noise2DEffect.h" #include "light/effects/BouncingBallsEffect.h" #include "light/effects/TetrixEffect.h" #include "light/effects/TextEffect.h" @@ -224,7 +223,6 @@ static void registerModuleTypes() { mm::ModuleFactory::registerType("MoonLiveEffect", "light/MoonLiveEffect.md"); mm::ModuleFactory::registerType("NetworkReceiveEffect", "light/effects.md#networkreceive"); mm::ModuleFactory::registerType("NoiseEffect", "light/effects.md#noise"); - mm::ModuleFactory::registerType("Noise2DEffect", "light/effects.md#noise2d"); mm::ModuleFactory::registerType("NoiseMeterEffect", "light/effects.md#noisemeter"); mm::ModuleFactory::registerType("PaintBrushEffect", "light/effects.md#paintbrush"); mm::ModuleFactory::registerType("ParticlesEffect", "light/effects.md#particles"); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f5879477..9b00c1ee 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -108,6 +108,7 @@ add_executable(mm_tests unit/light/unit_PolarLut.cpp unit/light/unit_PolarLut_equivalence.cpp unit/light/unit_AuroraEffect.cpp + unit/light/unit_NoiseEffect.cpp unit/light/unit_Effects_framerate.cpp unit/light/unit_SineEffect.cpp unit/light/unit_DistortionWavesEffect.cpp diff --git a/test/bench/bench_kernels.cpp b/test/bench/bench_kernels.cpp index 473e634c..5a49affa 100644 --- a/test/bench/bench_kernels.cpp +++ b/test/bench/bench_kernels.cpp @@ -21,7 +21,6 @@ #include #include #include -#include namespace { @@ -29,13 +28,14 @@ constexpr uint32_t kGrid = 256; // samples per axis per pass constexpr uint32_t kStep = 40; // 16.0 fixed coordinate step: ~6.4 noise cells across constexpr int kRuns = 5; // best-of -struct Row { - const char* name; - std::function fn; -}; - /// Time one kernel over the grid; returns the best ns per sample across kRuns. -double bench(const Row& row) { +/// +/// The kernel arrives as a TEMPLATE parameter, not a std::function: a type-erased call cannot be +/// inlined, so it adds an indirect call to every sample and lands in the same nanoseconds the +/// measurement is trying to attribute to the kernel. At 5 ns a sample that is a large share of what +/// is being reported. +template +double bench(Fn fn) { double best = 1e18; volatile uint32_t sink = 0; // the checksum the optimizer must honor for (int run = 0; run < kRuns; run++) { @@ -43,7 +43,7 @@ double bench(const Row& row) { const auto t0 = std::chrono::steady_clock::now(); for (uint32_t y = 0; y < kGrid; y++) for (uint32_t x = 0; x < kGrid; x++) - acc += row.fn(x * kStep, y * kStep, (x + y) * 3); + acc += fn(x * kStep, y * kStep, (x + y) * 3); const auto t1 = std::chrono::steady_clock::now(); sink = sink + acc; const double ns = std::chrono::duration(t1 - t0).count() / (kGrid * kGrid); @@ -52,39 +52,37 @@ double bench(const Row& row) { return best; } +/// One row of the table: measure `fn` and print it. +template +void row(const char* name, Fn fn) { + const double ns = bench(fn); + std::printf("| %s | %.1f | %.1f |\n", name, ns, 1000.0 / ns); +} + } // namespace int main() { using namespace mm; - const Row rows[] = { - {"inoise8 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise8(x)); }}, - {"inoise8 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise8(x, y)); }}, - {"inoise8 3D", [](uint32_t x, uint32_t y, uint32_t z){ return uint32_t(inoise8(x, y, z)); }}, - {"inoise16 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise16(x)); }}, - {"inoise16 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise16(x, y)); }}, - {"inoise16 3D", [](uint32_t x, uint32_t y, uint32_t z){ return uint32_t(inoise16(x, y, z)); }}, - {"fbm8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 2)); }}, - {"fbm8 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 4)); }}, - {"fbm16 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 2)); }}, - {"fbm16 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 4)); }}, - {"turbulence8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(turbulence8(x, y, 2)); }}, - {"warp8 2D, 1 octave", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 1)); }}, - {"warp8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 2)); }}, - // The polar address, computed per pixel per frame by every radial effect today. The phase-1 - // LUT replaces these three with two table reads, so this is the row it has to beat. - {"atan16", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(atan16(int32_t(y) - 128, int32_t(x) - 128)); }}, - {"dist16", [](uint32_t x, uint32_t y, uint32_t) { return dist16(int32_t(x) - 128, int32_t(y) - 128); }}, - {"polar address (dist16 + atan16 + kaleido)", [](uint32_t x, uint32_t y, uint32_t) { - const int32_t dx = int32_t(x) - 128, dy = int32_t(y) - 128; - const uint32_t r = dist16(dx, dy); - return uint32_t(kaleido(angle16(atan16(dy, dx) + r * 4), 5)) + r; - }}, - }; - std::printf("| Kernel | ns/sample | Msamples/s |\n|---|---:|---:|\n"); - for (const Row& row : rows) { - const double ns = bench(row); - std::printf("| %s | %.1f | %.1f |\n", row.name, ns, 1000.0 / ns); - } + row("inoise8 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise8(x)); }); + row("inoise8 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise8(x, y)); }); + row("inoise8 3D", [](uint32_t x, uint32_t y, uint32_t z) { return uint32_t(inoise8(x, y, z)); }); + row("inoise16 1D", [](uint32_t x, uint32_t, uint32_t) { return uint32_t(inoise16(x)); }); + row("inoise16 2D", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(inoise16(x, y)); }); + row("inoise16 3D", [](uint32_t x, uint32_t y, uint32_t z) { return uint32_t(inoise16(x, y, z)); }); + row("fbm8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 2)); }); + row("fbm8 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm8(x, y, 4)); }); + row("fbm16 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 2)); }); + row("fbm16 2D, 4 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(fbm16(x, y, 4)); }); + row("turbulence8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(turbulence8(x, y, 2)); }); + row("warp8 2D, 1 octave", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 1)); }); + row("warp8 2D, 2 octaves", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(warp8(x, y, 512, 2)); }); + row("atan16", [](uint32_t x, uint32_t y, uint32_t) { return uint32_t(atan16(int32_t(y) - 128, int32_t(x) - 128)); }); + row("dist16", [](uint32_t x, uint32_t y, uint32_t) { return dist16(int32_t(x) - 128, int32_t(y) - 128); }); + row("polar address (dist16 + atan16 + kaleido)", [](uint32_t x, uint32_t y, uint32_t) { + const int32_t dx = int32_t(x) - 128, dy = int32_t(y) - 128; + const uint32_t r = dist16(dx, dy); + return uint32_t(kaleido(angle16(atan16(dy, dx) + r * 4), 5)) + r; + }); return 0; } diff --git a/test/scenarios/core/scenario_MoonModule_control_change.json b/test/scenarios/core/scenario_MoonModule_control_change.json index f25ee24d..7651c977 100644 --- a/test/scenarios/core/scenario_MoonModule_control_change.json +++ b/test/scenarios/core/scenario_MoonModule_control_change.json @@ -117,14 +117,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 131, + "p50": 130, "p95": 246, - "min": 123, + "min": 119, "max": 248, "n": 32, - "samples": [131, 140, 129, 124, 129, 127, 124, 125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127] + "samples": [124, 129, 127, 124, 125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { @@ -301,12 +301,12 @@ "tick_us": { "p50": 131, "p95": 238, - "min": 125, + "min": 119, "max": 247, "n": 32, - "samples": [130, 125, 127, 129, 129, 129, 127, 127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128] + "samples": [129, 129, 129, 127, 127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { @@ -483,12 +483,12 @@ "tick_us": { "p50": 130, "p95": 239, - "min": 126, + "min": 118, "max": 240, "n": 32, - "samples": [128, 129, 128, 128, 129, 129, 128, 128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128] + "samples": [128, 129, 129, 128, 128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { @@ -673,12 +673,12 @@ "tick_us": { "p50": 130, "p95": 247, - "min": 125, + "min": 119, "max": 261, "n": 32, - "samples": [125, 129, 127, 128, 129, 128, 131, 128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128] + "samples": [128, 129, 128, 131, 128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index 711b5778..19722771 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -110,9 +110,9 @@ "min": 16, "max": 707, "n": 32, - "samples": [16, 20, 21, 707, 122, 31, 89, 17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20] + "samples": [707, 122, 31, 89, 17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -207,9 +207,9 @@ "min": 17, "max": 882, "n": 32, - "samples": [21, 20, 21, 882, 305, 79, 184, 18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22] + "samples": [882, 305, 79, 184, 18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -321,9 +321,9 @@ "min": 17, "max": 1192, "n": 32, - "samples": [19, 19, 25, 1192, 592, 50, 152, 19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20] + "samples": [1192, 592, 50, 152, 19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -418,9 +418,9 @@ "min": 19, "max": 945, "n": 32, - "samples": [22, 22, 28, 945, 790, 48, 80, 23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23] + "samples": [945, 790, 48, 80, 23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -508,14 +508,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 41, + "p50": 39, "p95": 307, "min": 19, "max": 400, "n": 32, - "samples": [50, 22, 23, 400, 307, 72, 64, 21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21] + "samples": [400, 307, 72, 64, 21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -608,9 +608,9 @@ "min": 17, "max": 484, "n": 32, - "samples": [72, 22, 20, 484, 273, 34, 64, 19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26] + "samples": [484, 273, 34, 64, 19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index fbc7debc..9cbe3c4f 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,12 +84,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 478, - "p95": 650, + "p50": 786, + "p95": 855, "min": 474, - "max": 650, - "n": 3, - "samples": [478, 474, 650] + "max": 855, + "n": 8, + "samples": [478, 474, 650, 786, 803, 855, 835, 843] }, "last_updated": "2026-09-04" } @@ -114,12 +114,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 207, - "p95": 208, + "p50": 307, + "p95": 320, "min": 207, - "max": 208, - "n": 3, - "samples": [207, 207, 208] + "max": 320, + "n": 8, + "samples": [207, 207, 208, 307, 311, 320, 316, 318] }, "last_updated": "2026-09-04" } @@ -144,12 +144,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 127, - "p95": 128, + "p50": 183, + "p95": 192, "min": 127, - "max": 128, - "n": 3, - "samples": [127, 127, 128] + "max": 192, + "n": 8, + "samples": [127, 127, 128, 185, 183, 189, 187, 192] }, "last_updated": "2026-09-04" } @@ -174,12 +174,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 304, - "p95": 306, + "p50": 530, + "p95": 554, "min": 303, - "max": 306, - "n": 3, - "samples": [304, 303, 306] + "max": 554, + "n": 8, + "samples": [304, 303, 306, 530, 532, 554, 540, 544] }, "last_updated": "2026-09-04" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 474, - "p95": 480, + "p50": 919, + "p95": 974, "min": 474, - "max": 480, - "n": 3, - "samples": [474, 474, 480] + "max": 974, + "n": 8, + "samples": [474, 474, 480, 921, 919, 974, 933, 936] }, "last_updated": "2026-09-04" } @@ -234,12 +234,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 785, - "p95": 937, + "p50": 1423, + "p95": 1562, "min": 785, - "max": 937, - "n": 2, - "samples": [937, 785] + "max": 1562, + "n": 7, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562] }, "last_updated": "2026-09-04" } @@ -264,12 +264,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 814, - "p95": 821, + "p50": 1491, + "p95": 1511, "min": 507, - "max": 821, - "n": 3, - "samples": [507, 814, 821] + "max": 1511, + "n": 8, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494] }, "last_updated": "2026-09-04" } @@ -294,12 +294,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 643, - "p95": 658, + "p50": 1079, + "p95": 1108, "min": 333, - "max": 658, - "n": 3, - "samples": [333, 643, 658] + "max": 1108, + "n": 8, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096] }, "last_updated": "2026-09-04" } diff --git a/test/scenarios/light/scenario_Driver_mutation.json b/test/scenarios/light/scenario_Driver_mutation.json index 897d765f..fc617268 100644 --- a/test/scenarios/light/scenario_Driver_mutation.json +++ b/test/scenarios/light/scenario_Driver_mutation.json @@ -81,9 +81,9 @@ "min": 17, "max": 1843, "n": 32, - "samples": [17, 17, 20, 1198, 180, 56, 69, 19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21] + "samples": [1198, 180, 56, 69, 19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -178,9 +178,9 @@ "min": 17, "max": 2596, "n": 32, - "samples": [21, 17, 21, 2596, 665, 42, 58, 17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22] + "samples": [2596, 665, 42, 58, 17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -275,9 +275,9 @@ "min": 18, "max": 339, "n": 32, - "samples": [38, 21, 21, 177, 160, 49, 61, 20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18] + "samples": [177, 160, 49, 61, 20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -370,9 +370,9 @@ "min": 20, "max": 718, "n": 32, - "samples": [21, 22, 28, 718, 285, 71, 68, 20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24] + "samples": [718, 285, 71, 68, 20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -465,9 +465,9 @@ "min": 19, "max": 852, "n": 32, - "samples": [31, 19, 25, 852, 244, 94, 87, 19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21] + "samples": [852, 244, 94, 87, 19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Effects_composition.json b/test/scenarios/light/scenario_Effects_composition.json index 7b9cdc2a..1fdd7ce8 100644 --- a/test/scenarios/light/scenario_Effects_composition.json +++ b/test/scenarios/light/scenario_Effects_composition.json @@ -108,12 +108,12 @@ "tick_us": { "p50": 497, "p95": 2259, - "min": 248, + "min": 142, "max": 11415, "n": 32, - "samples": [326, 255, 306, 11415, 2259, 507, 742, 252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248] + "samples": [11415, 2259, 507, 742, 252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index 2d462167..2a34a2d0 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -86,11 +86,11 @@ "desktop-macos": { "tick_us": { "p50": 281, - "p95": 289, + "p95": 387, "min": 189, - "max": 289, - "n": 3, - "samples": [289, 189, 281] + "max": 387, + "n": 9, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281] }, "last_updated": "2026-09-04" } @@ -115,12 +115,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 189, - "p95": 194, + "p50": 275, + "p95": 284, "min": 183, - "max": 194, - "n": 3, - "samples": [183, 189, 194] + "max": 284, + "n": 9, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281] }, "last_updated": "2026-09-04" } @@ -145,12 +145,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 177, - "p95": 180, + "p50": 274, + "p95": 282, "min": 168, - "max": 180, - "n": 3, - "samples": [168, 180, 177] + "max": 282, + "n": 9, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282] }, "last_updated": "2026-09-04" } @@ -175,12 +175,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 175, - "p95": 179, + "p50": 274, + "p95": 284, "min": 168, - "max": 179, - "n": 3, - "samples": [168, 175, 179] + "max": 284, + "n": 9, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282] }, "last_updated": "2026-09-04" } @@ -205,12 +205,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 86, - "p95": 88, + "p50": 137, + "p95": 142, "min": 83, - "max": 88, - "n": 3, - "samples": [83, 86, 88] + "max": 142, + "n": 9, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138] }, "last_updated": "2026-09-04" } @@ -235,20 +235,26 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 257, - "p95": 264, + "p50": 413, + "p95": 501, "min": 250, - "max": 264, - "n": 3, - "samples": [250, 257, 264] + "max": 501, + "n": 9, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417] }, "last_updated": "2026-09-04" } } }, + { + "name": "remove-polarnoise", + "description": "Take PolarNoise off the layer before Aurora goes on it. Adding a second effect to a layer does not replace the first: both render, so the step below would have measured the pair and reported it as Aurora's cost.", + "op": "remove_module", + "id": "PolarNoise" + }, { "name": "swap-to-aurora", - "description": "Aurora on the same layer: three layers of warped noise over the same address, each on its own oscillator. Several field samples per pixel, so this is the frame time that decides what the fps contract can promise.", + "description": "Aurora alone on the layer: three layers of warped noise over the same address, each on its own oscillator. Several field samples per pixel, so this is the frame time that decides what the fps contract can promise.", "op": "add_module", "id": "Aurora", "type": "AuroraEffect", @@ -265,12 +271,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 970, - "p95": 981, + "p50": 1200, + "p95": 1239, "min": 960, - "max": 981, - "n": 3, - "samples": [960, 970, 981] + "max": 1239, + "n": 9, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206] }, "last_updated": "2026-09-04" } @@ -295,12 +301,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 561, - "p95": 561, - "min": 560, - "max": 561, - "n": 3, - "samples": [560, 561, 561] + "p50": 479, + "p95": 590, + "min": 460, + "max": 590, + "n": 9, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476] }, "last_updated": "2026-09-04" } diff --git a/test/scenarios/light/scenario_GridBlacks_blackpixel.json b/test/scenarios/light/scenario_GridBlacks_blackpixel.json index f8841374..51d2f1e0 100644 --- a/test/scenarios/light/scenario_GridBlacks_blackpixel.json +++ b/test/scenarios/light/scenario_GridBlacks_blackpixel.json @@ -92,12 +92,12 @@ "tick_us": { "p50": 5, "p95": 15, - "min": 2, + "min": 1, "max": 27, "n": 32, - "samples": [2, 4, 2, 2, 2, 2, 2, 3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2] + "samples": [2, 2, 2, 2, 3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -195,12 +195,12 @@ "tick_us": { "p50": 7, "p95": 25, - "min": 3, + "min": 2, "max": 73, "n": 32, - "samples": [3, 6, 3, 3, 3, 3, 3, 4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3] + "samples": [3, 3, 3, 3, 4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_GridLayout_resize.json b/test/scenarios/light/scenario_GridLayout_resize.json index 21d8f58b..f9f17c63 100644 --- a/test/scenarios/light/scenario_GridLayout_resize.json +++ b/test/scenarios/light/scenario_GridLayout_resize.json @@ -117,14 +117,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 131, + "p50": 130, "p95": 311, - "min": 124, + "min": 118, "max": 316, "n": 32, - "samples": [205, 129, 131, 131, 125, 124, 209, 127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126] + "samples": [131, 125, 124, 209, 127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { @@ -299,14 +299,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 70, + "p50": 69, "p95": 161, "min": 63, "max": 177, "n": 32, - "samples": [103, 70, 70, 66, 69, 67, 177, 68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68] + "samples": [66, 69, 67, 177, 68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { @@ -481,14 +481,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 132, + "p50": 129, "p95": 298, - "min": 125, + "min": 120, "max": 309, "n": 32, - "samples": [204, 128, 130, 135, 128, 129, 127, 128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127] + "samples": [135, 128, 129, 127, 128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_base_pipeline.json b/test/scenarios/light/scenario_Layer_base_pipeline.json index 66d562d1..c0f13900 100644 --- a/test/scenarios/light/scenario_Layer_base_pipeline.json +++ b/test/scenarios/light/scenario_Layer_base_pipeline.json @@ -88,9 +88,9 @@ "min": 64, "max": 245, "n": 32, - "samples": [107, 71, 68, 69, 68, 67, 75, 189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65] + "samples": [69, 68, 67, 75, 189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_memory_1to1.json b/test/scenarios/light/scenario_Layer_memory_1to1.json index 6b50de37..d50bec5b 100644 --- a/test/scenarios/light/scenario_Layer_memory_1to1.json +++ b/test/scenarios/light/scenario_Layer_memory_1to1.json @@ -85,9 +85,9 @@ "min": 5, "max": 229, "n": 32, - "samples": [5, 5, 9, 5, 9, 5, 5, 5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5] + "samples": [5, 9, 5, 5, 5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layouts_mutation.json b/test/scenarios/light/scenario_Layouts_mutation.json index 1f3b77e5..ee1126c5 100644 --- a/test/scenarios/light/scenario_Layouts_mutation.json +++ b/test/scenarios/light/scenario_Layouts_mutation.json @@ -83,9 +83,9 @@ "min": 16, "max": 750, "n": 32, - "samples": [17, 16, 20, 608, 750, 54, 437, 17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16] + "samples": [608, 750, 54, 437, 17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -208,12 +208,12 @@ "tick_us": { "p50": 87, "p95": 1353, - "min": 46, + "min": 44, "max": 1367, "n": 32, - "samples": [47, 46, 52, 1353, 1367, 236, 714, 46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47] + "samples": [1353, 1367, 236, 714, 46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -334,9 +334,9 @@ "min": 89, "max": 2305, "n": 32, - "samples": [94, 93, 105, 2190, 2305, 1486, 1211, 89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93] + "samples": [2190, 2305, 1486, 1211, 89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -456,9 +456,9 @@ "min": 16, "max": 719, "n": 32, - "samples": [20, 20, 20, 595, 719, 126, 409, 20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20] + "samples": [595, 719, 126, 409, 20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json index ab9ddbae..27fb7074 100644 --- a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json +++ b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json @@ -88,14 +88,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, + "p50": 11, "p95": 132, "min": 5, "max": 1050, "n": 32, - "samples": [13, 5, 5, 5, 5, 5, 7, 132, 1050, 17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5] + "samples": [5, 5, 5, 7, 132, 1050, 17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -211,9 +211,9 @@ "min": 5, "max": 1656, "n": 32, - "samples": [9, 5, 7, 5, 5, 5, 6, 482, 1656, 16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5] + "samples": [5, 5, 5, 6, 482, 1656, 16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -321,9 +321,9 @@ "min": 5, "max": 184, "n": 32, - "samples": [10, 5, 5, 5, 5, 5, 6, 22, 184, 20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5] + "samples": [5, 5, 5, 6, 22, 184, 20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -431,9 +431,9 @@ "min": 5, "max": 309, "n": 32, - "samples": [9, 5, 5, 5, 5, 5, 6, 309, 151, 25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5] + "samples": [5, 5, 5, 6, 309, 151, 25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -534,9 +534,9 @@ "min": 5, "max": 464, "n": 32, - "samples": [10, 5, 5, 5, 5, 5, 6, 208, 464, 15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5] + "samples": [5, 5, 5, 6, 208, 464, 15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -637,9 +637,9 @@ "min": 5, "max": 282, "n": 32, - "samples": [10, 5, 5, 5, 5, 5, 6, 187, 282, 14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5] + "samples": [5, 5, 5, 6, 187, 282, 14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -738,9 +738,9 @@ "min": 5, "max": 113, "n": 32, - "samples": [9, 5, 5, 5, 5, 5, 6, 113, 81, 19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5] + "samples": [5, 5, 5, 6, 113, 81, 19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -836,14 +836,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, + "p50": 10, "p95": 32, "min": 5, "max": 169, "n": 32, - "samples": [12, 5, 5, 5, 5, 5, 6, 169, 9, 17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5] + "samples": [5, 5, 5, 6, 169, 9, 17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -944,9 +944,9 @@ "min": 5, "max": 728, "n": 32, - "samples": [9, 5, 5, 5, 5, 5, 6, 728, 26, 15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6] + "samples": [5, 5, 5, 6, 728, 26, 15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLive_pipeline.json b/test/scenarios/light/scenario_MoonLive_pipeline.json index e60f5afd..f10a32d3 100644 --- a/test/scenarios/light/scenario_MoonLive_pipeline.json +++ b/test/scenarios/light/scenario_MoonLive_pipeline.json @@ -379,9 +379,9 @@ "min": 5, "max": 267, "n": 32, - "samples": [5, 5, 10, 5, 5, 5, 5, 5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5] + "samples": [5, 5, 5, 5, 5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -531,14 +531,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, + "p50": 9, "p95": 97, "min": 4, "max": 559, "n": 32, - "samples": [5, 5, 10, 4, 5, 5, 5, 5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5] + "samples": [4, 5, 5, 5, 5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -687,9 +687,9 @@ "min": 5, "max": 520, "n": 32, - "samples": [5, 5, 11, 5, 5, 5, 5, 5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6] + "samples": [5, 5, 5, 5, 5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -989,9 +989,9 @@ "min": 5, "max": 117, "n": 32, - "samples": [5, 5, 10, 5, 5, 5, 5, 5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5] + "samples": [5, 5, 5, 5, 5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1131,9 +1131,9 @@ "min": 5, "max": 397, "n": 32, - "samples": [5, 5, 11, 5, 5, 5, 5, 5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5] + "samples": [5, 5, 5, 5, 5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json index a3bf5366..8f9afbc0 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json +++ b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json @@ -91,12 +91,12 @@ "tick_us": { "p50": 6, "p95": 165, - "min": 3, + "min": 2, "max": 241, "n": 32, - "samples": [3, 3, 7, 3, 6, 3, 3, 3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3] + "samples": [3, 6, 3, 3, 3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json index 182f3eae..0c6ab070 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json +++ b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json @@ -89,14 +89,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 129, + "p50": 127, "p95": 283, - "min": 124, + "min": 117, "max": 302, "n": 32, - "samples": [189, 145, 130, 127, 124, 133, 125, 133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126] + "samples": [127, 124, 133, 125, 133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_modifier_chain.json b/test/scenarios/light/scenario_modifier_chain.json index 987074ba..65010574 100644 --- a/test/scenarios/light/scenario_modifier_chain.json +++ b/test/scenarios/light/scenario_modifier_chain.json @@ -106,9 +106,9 @@ "min": 8, "max": 270, "n": 32, - "samples": [9, 8, 10, 270, 205, 35, 32, 8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8] + "samples": [270, 205, 35, 32, 8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -163,12 +163,12 @@ "tick_us": { "p50": 15, "p95": 86, - "min": 7, + "min": 6, "max": 457, "n": 32, - "samples": [7, 7, 9, 457, 81, 17, 24, 7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7] + "samples": [457, 81, 17, 24, 7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -224,9 +224,9 @@ "min": 22, "max": 466, "n": 32, - "samples": [26, 24, 27, 466, 325, 55, 72, 24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22] + "samples": [466, 325, 55, 72, 24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -254,12 +254,12 @@ "tick_us": { "p50": 78, "p95": 473, - "min": 45, + "min": 43, "max": 2547, "n": 32, - "samples": [46, 46, 46, 2547, 173, 108, 125, 45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47] + "samples": [2547, 173, 108, 125, 45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_modifier_swap.json b/test/scenarios/light/scenario_modifier_swap.json index e1d215e4..7f90acff 100644 --- a/test/scenarios/light/scenario_modifier_swap.json +++ b/test/scenarios/light/scenario_modifier_swap.json @@ -156,9 +156,9 @@ "min": 8, "max": 1133, "n": 32, - "samples": [8, 8, 10, 359, 1133, 28, 148, 8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8] + "samples": [359, 1133, 28, 148, 8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth": { "tick_us": { @@ -297,12 +297,12 @@ "tick_us": { "p50": 46, "p95": 456, - "min": 22, + "min": 20, "max": 1237, "n": 32, - "samples": [23, 23, 27, 456, 1237, 73, 206, 22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25] + "samples": [456, 1237, 73, 206, 22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth": { "tick_us": { @@ -444,9 +444,9 @@ "min": 9, "max": 513, "n": 32, - "samples": [10, 13, 10, 421, 79, 37, 62, 9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10] + "samples": [421, 79, 37, 62, 9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32-eth": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_full.json b/test/scenarios/light/scenario_perf_full.json index 51285b84..fcfb21c8 100644 --- a/test/scenarios/light/scenario_perf_full.json +++ b/test/scenarios/light/scenario_perf_full.json @@ -87,12 +87,12 @@ "tick_us": { "p50": 5, "p95": 15, - "min": 2, + "min": 1, "max": 22, "n": 32, - "samples": [2, 2, 3, 15, 7, 5, 7, 2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2] + "samples": [15, 7, 5, 7, 2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -207,12 +207,12 @@ "tick_us": { "p50": 5, "p95": 48, - "min": 2, + "min": 1, "max": 51, "n": 32, - "samples": [2, 2, 3, 48, 8, 5, 7, 2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2] + "samples": [48, 8, 5, 7, 2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -327,12 +327,12 @@ "tick_us": { "p50": 5, "p95": 24, - "min": 2, + "min": 1, "max": 28, "n": 32, - "samples": [2, 2, 3, 24, 7, 5, 7, 2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2] + "samples": [24, 7, 5, 7, 2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -570,12 +570,12 @@ "tick_us": { "p50": 5, "p95": 12, - "min": 2, + "min": 1, "max": 31, "n": 32, - "samples": [2, 2, 3, 12, 9, 6, 6, 2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2] + "samples": [12, 9, 6, 6, 2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -688,12 +688,12 @@ "tick_us": { "p50": 5, "p95": 26, - "min": 2, + "min": 1, "max": 70, "n": 32, - "samples": [2, 2, 3, 8, 7, 7, 8, 2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2] + "samples": [8, 7, 7, 8, 2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -817,12 +817,12 @@ "tick_us": { "p50": 5, "p95": 13, - "min": 2, + "min": 1, "max": 13, "n": 32, - "samples": [2, 2, 3, 9, 7, 5, 7, 2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2] + "samples": [9, 7, 5, 7, 2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -950,12 +950,12 @@ "tick_us": { "p50": 5, "p95": 19, - "min": 2, + "min": 1, "max": 27, "n": 32, - "samples": [2, 2, 3, 19, 27, 5, 9, 2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2] + "samples": [19, 27, 5, 9, 2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1057,12 +1057,12 @@ "tick_us": { "p50": 5, "p95": 21, - "min": 2, + "min": 1, "max": 23, "n": 32, - "samples": [2, 2, 3, 23, 20, 5, 7, 2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2] + "samples": [23, 20, 5, 7, 2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -1170,12 +1170,12 @@ "tick_us": { "p50": 5, "p95": 12, - "min": 2, + "min": 1, "max": 26, "n": 32, - "samples": [2, 2, 3, 12, 7, 5, 7, 2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2] + "samples": [12, 7, 5, 7, 2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1294,12 +1294,12 @@ "tick_us": { "p50": 19, "p95": 136, - "min": 9, + "min": 4, "max": 167, "n": 32, - "samples": [9, 9, 12, 80, 72, 21, 27, 10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9] + "samples": [80, 72, 21, 27, 10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1418,12 +1418,12 @@ "tick_us": { "p50": 87, "p95": 270, - "min": 40, + "min": 17, "max": 346, "n": 32, - "samples": [41, 41, 50, 234, 270, 99, 141, 43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40] + "samples": [234, 270, 99, 141, 43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1542,12 +1542,12 @@ "tick_us": { "p50": 368, "p95": 1023, - "min": 173, + "min": 70, "max": 2016, "n": 32, - "samples": [177, 177, 213, 948, 764, 440, 562, 186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173] + "samples": [948, 764, 440, 562, 186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1677,9 +1677,9 @@ "min": 4, "max": 50, "n": 32, - "samples": [4, 4, 5, 50, 19, 9, 14, 4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4] + "samples": [50, 19, 9, 14, 4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1798,12 +1798,12 @@ "tick_us": { "p50": 35, "p95": 98, - "min": 17, + "min": 15, "max": 108, "n": 32, - "samples": [17, 17, 21, 98, 64, 42, 55, 18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17] + "samples": [98, 64, 42, 55, 18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -1922,12 +1922,12 @@ "tick_us": { "p50": 144, "p95": 398, - "min": 69, + "min": 61, "max": 662, "n": 32, - "samples": [71, 70, 87, 363, 308, 218, 235, 73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69] + "samples": [363, 308, 218, 235, 73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -2044,14 +2044,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 589, + "p50": 562, "p95": 2027, - "min": 278, + "min": 247, "max": 12932, "n": 32, - "samples": [282, 281, 748, 1898, 2027, 1059, 930, 293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279] + "samples": [1898, 2027, 1059, 930, 293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -2208,9 +2208,9 @@ "min": 1, "max": 13, "n": 32, - "samples": [1, 1, 1, 9, 3, 3, 3, 1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1] + "samples": [9, 3, 3, 3, 1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32": { "tick_us": { @@ -2332,9 +2332,9 @@ "min": 4, "max": 25, "n": 32, - "samples": [4, 4, 5, 25, 13, 10, 13, 4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4] + "samples": [25, 13, 10, 13, 4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32": { "tick_us": { @@ -2453,12 +2453,12 @@ "tick_us": { "p50": 35, "p95": 113, - "min": 17, + "min": 15, "max": 166, "n": 32, - "samples": [17, 17, 22, 166, 64, 35, 65, 18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17] + "samples": [166, 64, 35, 65, 18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32": { "tick_us": { @@ -2577,12 +2577,12 @@ "tick_us": { "p50": 151, "p95": 574, - "min": 70, + "min": 62, "max": 731, "n": 32, - "samples": [75, 73, 87, 731, 461, 157, 249, 72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70] + "samples": [731, 461, 157, 249, 72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_light.json b/test/scenarios/light/scenario_perf_light.json index 62836950..fa3f701c 100644 --- a/test/scenarios/light/scenario_perf_light.json +++ b/test/scenarios/light/scenario_perf_light.json @@ -103,12 +103,12 @@ "tick_us": { "p50": 5, "p95": 12, - "min": 2, + "min": 1, "max": 23, "n": 32, - "samples": [2, 2, 3, 23, 12, 5, 7, 2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2] + "samples": [23, 12, 5, 7, 2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -454,9 +454,9 @@ "min": 1, "max": 20, "n": 32, - "samples": [1, 1, 1, 20, 3, 3, 3, 1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1] + "samples": [20, 3, 3, 3, 1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -578,9 +578,9 @@ "min": 4, "max": 49, "n": 32, - "samples": [4, 4, 5, 17, 12, 13, 24, 4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4] + "samples": [17, 12, 13, 24, 4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { @@ -699,12 +699,12 @@ "tick_us": { "p50": 35, "p95": 134, - "min": 17, + "min": 15, "max": 255, "n": 32, - "samples": [18, 18, 21, 134, 255, 47, 60, 18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17] + "samples": [134, 255, 47, 60, 18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_grid_sweep.json b/test/scenarios/light/scenario_peripheral_grid_sweep.json index 1f2dc873..f4cdd466 100644 --- a/test/scenarios/light/scenario_peripheral_grid_sweep.json +++ b/test/scenarios/light/scenario_peripheral_grid_sweep.json @@ -178,9 +178,9 @@ "min": 4, "max": 35, "n": 32, - "samples": [4, 4, 5, 35, 20, 9, 33, 4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4] + "samples": [35, 20, 9, 33, 4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -302,12 +302,12 @@ "tick_us": { "p50": 36, "p95": 160, - "min": 17, + "min": 15, "max": 169, "n": 32, - "samples": [18, 18, 22, 169, 74, 48, 160, 18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17] + "samples": [169, 74, 48, 160, 18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -429,12 +429,12 @@ "tick_us": { "p50": 147, "p95": 309, - "min": 69, + "min": 62, "max": 761, "n": 32, - "samples": [72, 72, 86, 761, 309, 172, 287, 74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69] + "samples": [761, 309, 172, 287, 74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -556,12 +556,12 @@ "tick_us": { "p50": 581, "p95": 1947, - "min": 277, + "min": 247, "max": 2629, "n": 32, - "samples": [287, 282, 331, 1466, 1947, 595, 2629, 299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278] + "samples": [1466, 1947, 595, 2629, 299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -707,9 +707,9 @@ "min": 4, "max": 36, "n": 32, - "samples": [4, 5, 5, 26, 28, 9, 14, 4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4] + "samples": [26, 28, 9, 14, 4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -831,12 +831,12 @@ "tick_us": { "p50": 36, "p95": 121, - "min": 17, + "min": 15, "max": 137, "n": 32, - "samples": [18, 17, 21, 101, 103, 35, 137, 18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17] + "samples": [101, 103, 35, 137, 18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -958,12 +958,12 @@ "tick_us": { "p50": 142, "p95": 424, - "min": 69, + "min": 61, "max": 534, "n": 32, - "samples": [70, 72, 83, 534, 424, 139, 272, 74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69] + "samples": [534, 424, 139, 272, 74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1085,12 +1085,12 @@ "tick_us": { "p50": 571, "p95": 1666, - "min": 279, + "min": 249, "max": 2008, "n": 32, - "samples": [282, 378, 331, 1666, 2008, 592, 1042, 305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279] + "samples": [1666, 2008, 592, 1042, 305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1236,9 +1236,9 @@ "min": 4, "max": 98, "n": 32, - "samples": [4, 4, 5, 98, 24, 9, 17, 4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4] + "samples": [98, 24, 9, 17, 4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1360,12 +1360,12 @@ "tick_us": { "p50": 35, "p95": 138, - "min": 17, + "min": 15, "max": 257, "n": 32, - "samples": [17, 19, 20, 257, 81, 35, 51, 19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17] + "samples": [257, 81, 35, 51, 19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1487,12 +1487,12 @@ "tick_us": { "p50": 141, "p95": 431, - "min": 69, + "min": 62, "max": 1064, "n": 32, - "samples": [71, 74, 83, 1064, 431, 152, 225, 96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70] + "samples": [1064, 431, 152, 225, 96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1614,12 +1614,12 @@ "tick_us": { "p50": 564, "p95": 1708, - "min": 274, + "min": 247, "max": 2746, "n": 32, - "samples": [283, 283, 332, 2746, 1708, 569, 1378, 305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274] + "samples": [2746, 1708, 569, 1378, 305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1765,9 +1765,9 @@ "min": 4, "max": 55, "n": 32, - "samples": [4, 4, 5, 18, 55, 11, 32, 4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4] + "samples": [18, 55, 11, 32, 4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -1889,12 +1889,12 @@ "tick_us": { "p50": 36, "p95": 158, - "min": 17, + "min": 15, "max": 187, "n": 32, - "samples": [17, 18, 21, 158, 187, 37, 73, 19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17] + "samples": [158, 187, 37, 73, 19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -2016,12 +2016,12 @@ "tick_us": { "p50": 144, "p95": 634, - "min": 68, + "min": 61, "max": 1010, "n": 32, - "samples": [71, 69, 80, 1010, 438, 177, 634, 74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68] + "samples": [1010, 438, 177, 634, 74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { @@ -2143,12 +2143,12 @@ "tick_us": { "p50": 586, "p95": 2098, - "min": 279, + "min": 246, "max": 3242, "n": 32, - "samples": [283, 283, 317, 1791, 3242, 1519, 2098, 305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281] + "samples": [1791, 3242, 1519, 2098, 305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_switch.json b/test/scenarios/light/scenario_peripheral_switch.json index 332de59c..dbbeb55c 100644 --- a/test/scenarios/light/scenario_peripheral_switch.json +++ b/test/scenarios/light/scenario_peripheral_switch.json @@ -177,9 +177,9 @@ "min": 4, "max": 45, "n": 32, - "samples": [4, 4, 5, 45, 19, 38, 21, 5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4] + "samples": [45, 19, 38, 21, 5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -298,9 +298,9 @@ "min": 4, "max": 58, "n": 32, - "samples": [4, 5, 5, 29, 40, 39, 58, 5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4] + "samples": [29, 40, 39, 58, 5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -419,9 +419,9 @@ "min": 4, "max": 160, "n": 32, - "samples": [4, 4, 5, 26, 15, 69, 160, 5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4] + "samples": [26, 15, 69, 160, 5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -539,9 +539,9 @@ "min": 4, "max": 358, "n": 32, - "samples": [4, 4, 5, 24, 72, 20, 358, 5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4] + "samples": [24, 72, 20, 358, 5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -660,9 +660,9 @@ "min": 4, "max": 65, "n": 32, - "samples": [4, 4, 5, 42, 24, 16, 26, 6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4] + "samples": [42, 24, 16, 26, 6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { @@ -797,9 +797,9 @@ "min": 4, "max": 66, "n": 32, - "samples": [4, 4, 5, 66, 14, 29, 12, 6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4] + "samples": [66, 14, 29, 12, 6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-04" }, "esp32p4rev1-eth": { "tick_us": { diff --git a/test/unit/core/unit_noise.cpp b/test/unit/core/unit_noise.cpp index 3d298933..4780fed1 100644 --- a/test/unit/core/unit_noise.cpp +++ b/test/unit/core/unit_noise.cpp @@ -127,3 +127,34 @@ TEST_CASE("16-bit fbm keeps its range too") { CHECK(hi > 57343); } } + +// The contract that makes the field library dimension-generic: a 2D call is the 3D call with the +// missing axis at zero. Without it a volumetric fixture and a panel would sample different fields +// for the same coordinates, and an effect could not simply pass z through. +TEST_CASE("every field kernel's 2D form is its 3D form with z at zero") { + for (uint32_t y = 0; y < 4000; y += 231) { + for (uint32_t x = 0; x < 4000; x += 197) { + CHECK(fbm8(x, y, 2) == fbm8(x, y, 0u, 2)); + CHECK(fbm8(x, y, 4) == fbm8(x, y, 0u, 4)); + CHECK(fbm16(x, y, 2) == fbm16(x, y, 0u, 2)); + CHECK(fbm16(x, y, 3) == fbm16(x, y, 0u, 3)); + CHECK(turbulence8(x, y, 2) == turbulence8(x, y, 0u, 2)); + CHECK(warp8(x, y, 240, 1) == warp8(x, y, 0u, 240, 1)); + CHECK(warp8(x, y, 512, 2) == warp8(x, y, 0u, 512, 2)); + } + } +} + +TEST_CASE("the z axis actually changes the field, rather than being carried and ignored") { + // The other half of the contract: passing z must do something, or "3D support" is a signature + // change. A volumetric fixture's slices have to differ from each other. + int differing = 0, total = 0; + for (uint32_t y = 0; y < 3000; y += 311) { + for (uint32_t x = 0; x < 3000; x += 271) { + total++; + if (fbm8(x, y, 0u, 2) != fbm8(x, y, 3000u, 2)) differing++; + } + } + REQUIRE(total > 50); + CHECK(differing * 4 > total * 3); // three quarters of samples move with z +} diff --git a/test/unit/light/unit_AuroraEffect.cpp b/test/unit/light/unit_AuroraEffect.cpp index f2efa2e5..89cb38b2 100644 --- a/test/unit/light/unit_AuroraEffect.cpp +++ b/test/unit/light/unit_AuroraEffect.cpp @@ -13,6 +13,7 @@ #include "light/layouts/Layouts.h" #include "platform/platform.h" +#include #include #include @@ -20,16 +21,27 @@ using namespace mm; namespace { +template +std::vector render3(lengthType w, lengthType h, lengthType d, F configure, + uint16_t frames = 60, uint32_t startMs = 1000); + /// Render Aurora with `configure` applied, and return the final frame. template std::vector render(lengthType w, lengthType h, F configure, uint16_t frames = 60, uint32_t startMs = 1000) { + return render3(w, h, 1, configure, frames, startMs); +} + +/// The volumetric form: `d` lights deep. +template +std::vector render3(lengthType w, lengthType h, lengthType d, F configure, + uint16_t frames, uint32_t startMs) { platform::setTestNowMs(startMs); Layouts layouts; GridLayout grid; Layer layer; AuroraEffect effect; configure(effect); - grid.width = w; grid.height = h; grid.depth = 1; + grid.width = w; grid.height = h; grid.depth = d; layouts.addChild(&grid); layer.setLayouts(&layouts); layer.setChannelsPerLight(3); @@ -127,7 +139,44 @@ TEST_CASE("Aurora renders on a grid too small to have a center") { TEST_CASE("Aurora renders the same picture whether or not the polar table is available") { // The table is an optimization, not part of the look: a device that cannot spare the memory // gets the same composition. - const auto tabled = render(32, 32, [](AuroraEffect& e) { e.widePolarTable = true; }); - const auto exact = render(32, 32, [](AuroraEffect& e) { e.usePolarTable = false; }); + const auto tabled = render(32, 32, [](AuroraEffect& e) { e.polar.wide = true; }); + const auto exact = render(32, 32, [](AuroraEffect& e) { e.polar.use = false; }); CHECK(differing(tabled, exact) == 0); } + +TEST_CASE("on a volumetric fixture the curtains have depth instead of one repeated slice") { + // What a cube buys over a panel: the field is sampled through the volume, so a light at the + // front and one at the back of the same column are in different parts of the composition. + const auto f = render3(8, 8, 6, [](AuroraEffect& e) { e.contrast = 40; }, 40); + const std::size_t slice = 8 * 8 * 3; + REQUIRE(f.size() >= slice * 6); + std::size_t diff = 0; + for (std::size_t i = 0; i < slice; i++) diff += f[i] != f[slice * 5 + i] ? 1 : 0; + CHECK(diff > slice / 4); +} + +TEST_CASE("each projection composes the volume differently") { + // The control earns its place only if the three look different on the same fixture. + const auto cyl = render3(8, 8, 6, [](AuroraEffect& e) { e.polar.mapping = 0; e.contrast = 40; }, 40); + const auto sph = render3(8, 8, 6, [](AuroraEffect& e) { e.polar.mapping = 1; e.contrast = 40; }, 40); + const auto rad = render3(8, 8, 6, [](AuroraEffect& e) { e.polar.mapping = 2; e.contrast = 40; }, 40); + std::size_t a = 0, b = 0; + for (std::size_t i = 0; i < cyl.size(); i++) { + a += cyl[i] != sph[i] ? 1 : 0; + b += cyl[i] != rad[i] ? 1 : 0; + } + CHECK(a > cyl.size() / 8); + CHECK(b > cyl.size() / 8); +} + +TEST_CASE("Aurora renders on a strip, a panel and a cube alike") { + // Any effect on any dimension: a strip is one line through a field designed around two axes, so + // it is not what Aurora is for, but it must still light rather than fail or go dark. + for (auto dims : {std::array{64, 1, 1}, {16, 16, 1}, {8, 8, 8}}) { + const auto f = render3(dims[0], dims[1], dims[2], [](AuroraEffect& e) { e.contrast = 30; }, 30); + REQUIRE(f.size() == static_cast(dims[0]) * dims[1] * dims[2] * 3); + std::size_t lit = 0; + for (uint8_t v : f) lit += v > 0 ? 1 : 0; + CHECK(lit > 0); + } +} diff --git a/test/unit/light/unit_Drivers_container.cpp b/test/unit/light/unit_Drivers_container.cpp index d7db532a..dec87e59 100644 --- a/test/unit/light/unit_Drivers_container.cpp +++ b/test/unit/light/unit_Drivers_container.cpp @@ -235,3 +235,37 @@ TEST_CASE("the relay opens at brightness 0 and closes again when brightness retu CHECK_FALSE(mm::platform::gpioRead(12)); // and `on` still opens it whatever brightness says mm::platform::clearTestGpioLevel(); } + +// A typo in the relay list must not leave the previous relays closed. Reporting the parse error and +// returning looked right, but the pins from the last VALID list stayed asserted on GPIOs no control +// named any more: the strip kept its power through a brightness of zero, and nothing in the UI said +// why. An unparseable list means no relays, which is the same state as an empty one. +TEST_CASE("a typo in the relay list releases the relays it used to hold") { + mm::platform::clearTestGpioLevel(); + mm::Drivers drivers; + std::strcpy(drivers.relayPins, "12,13"); + drivers.on = true; + drivers.brightness = 100; + drivers.onControlChanged("relayPins"); + CHECK(mm::platform::gpioRead(12)); + CHECK(mm::platform::gpioRead(13)); + + // Mid-edit the list is briefly nonsense, which is the normal way a user types one. + std::strcpy(drivers.relayPins, "12,,x"); + drivers.onControlChanged("relayPins"); + CHECK_FALSE(mm::platform::gpioRead(12)); + CHECK_FALSE(mm::platform::gpioRead(13)); + + // And the driver has forgotten them, so a later brightness change does not resurrect either pin. + drivers.brightness = 200; + drivers.onControlChanged("brightness"); + CHECK_FALSE(mm::platform::gpioRead(12)); + CHECK_FALSE(mm::platform::gpioRead(13)); + + // A corrected list takes effect normally. + std::strcpy(drivers.relayPins, "13"); + drivers.onControlChanged("relayPins"); + CHECK(mm::platform::gpioRead(13)); + CHECK_FALSE(mm::platform::gpioRead(12)); + mm::platform::clearTestGpioLevel(); +} diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index cef94da8..b591af9c 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -45,7 +45,6 @@ #include "light/effects/BouncingBallsEffect.h" #include "light/effects/FixedRectangleEffect.h" #include "light/effects/LissajousEffect.h" -#include "light/effects/Noise2DEffect.h" #include "light/effects/PraxisEffect.h" #include "light/effects/SolidEffect.h" #include "light/effects/SphereMoveEffect.h" @@ -138,7 +137,6 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("BouncingBallsEffect") { BouncingBallsEffect e; golden::checkGolden("BouncingBallsEffect", golden::renderHash(e, 16, 16, 1), 0x8b89c982e566f5b4ull); } SUBCASE("FixedRectangleEffect") { FixedRectangleEffect e; golden::checkGolden("FixedRectangleEffect", golden::renderHash(e, 16, 16, 1), 0x22b828f908e9ce1cull); } SUBCASE("LissajousEffect") { LissajousEffect e; golden::checkGolden("LissajousEffect", golden::renderHash(e, 16, 16, 1), 0x7a5f13102f039d12ull); } - SUBCASE("Noise2DEffect") { Noise2DEffect e; golden::checkGolden("Noise2DEffect", golden::renderHash(e, 16, 16, 1), 0xf8cfe517a606b68bull); } SUBCASE("PraxisEffect") { PraxisEffect e; golden::checkGolden("PraxisEffect", golden::renderHash(e, 16, 16, 1), 0x0420f0404b3f12c5ull); } SUBCASE("SolidEffect") { SolidEffect e; golden::checkGolden("SolidEffect", golden::renderHash(e, 16, 16, 1), 0x56711c1cf0c8ae83ull); } SUBCASE("SphereMoveEffect") { SphereMoveEffect e; golden::checkGolden("SphereMoveEffect", golden::renderHash(e, 16, 16, 1), 0xb3f3d7c75fe49fdbull); } diff --git a/test/unit/light/unit_Noise2DEffect.cpp b/test/unit/light/unit_Noise2DEffect.cpp deleted file mode 100644 index 6fda905c..00000000 --- a/test/unit/light/unit_Noise2DEffect.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// @module Noise2DEffect - -#include "doctest.h" -#include "light/layouts/Layouts.h" -#include "light/effects/Noise2DEffect.h" -#include "light/layouts/GridLayout.h" - -// A single frame on an 8×8 grid fills the buffer with a palette-mapped noise field (non-zero). -TEST_CASE("Noise2DEffect writes a non-zero palette-mapped noise field") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 8; - grid.height = 8; - grid.depth = 1; - layouts.addChild(&grid); - - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - - mm::Noise2DEffect noise; - layer.addChild(&noise); - - layer.applyState(); - // Palettes::active() is a process-wide static any prior test can mutate; pin a colorful palette - // (Rainbow=0) so the non-black assertion is order-independent. - mm::Palettes::setActive(0); - layer.tick(); - - auto& buf = layer.buffer(); - REQUIRE(buf.data() != nullptr); - REQUIRE(buf.count() == 64); - - bool hasNonZero = false; - for (size_t i = 0; i < buf.bytes(); i++) { - if (buf.data()[i] != 0) { hasNonZero = true; break; } - } - CHECK(hasNonZero); -} - -// The field is spatial: distant pixels read different noise samples, so their colors differ. -TEST_CASE("Noise2DEffect distant pixels carry different colors") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 16; - grid.height = 16; - grid.depth = 1; - layouts.addChild(&grid); - - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - - mm::Noise2DEffect noise; - noise.scale = 64; // default zoom: at (0,0) vs (8,8) the noise coords are (0,0) vs (512,512) - layer.addChild(&noise); - - layer.applyState(); - mm::Palettes::setActive(0); - layer.tick(); - - auto* data = layer.buffer().data(); - uint8_t r0 = data[0], g0 = data[1], b0 = data[2]; - size_t idx88 = (8 * 16 + 8) * 3; - uint8_t r1 = data[idx88], g1 = data[idx88 + 1], b1 = data[idx88 + 2]; - // Value noise is smooth but not constant; widely separated coords sample different field values, - // which index different palette entries. - CHECK((r0 != r1 || g0 != g1 || b0 != b1)); -} - -// Effects must run at every grid size: a 0×0×0 layer renders without crashing (the cols/rows guard). -TEST_CASE("Noise2DEffect survives a degenerate 0x0 grid") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 0; - grid.height = 0; - grid.depth = 0; - layouts.addChild(&grid); - - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - - mm::Noise2DEffect noise; - layer.addChild(&noise); - - layer.applyState(); - layer.tick(); // must not crash on an empty grid - - CHECK(layer.buffer().count() == 0); -} diff --git a/test/unit/light/unit_NoiseEffect.cpp b/test/unit/light/unit_NoiseEffect.cpp index 0ec7e987..8cb1a2b8 100644 --- a/test/unit/light/unit_NoiseEffect.cpp +++ b/test/unit/light/unit_NoiseEffect.cpp @@ -1,164 +1,110 @@ // @module NoiseEffect -// @also PlasmaEffect, RainbowEffect +// @also noise, Palette + +// Noise is the plainest field effect: a gradient-noise sample straight into the palette. Its one +// character control decides what moves, which is what used to be two separate effects (the second +// was Noise2D, whose morph behavior is the `morph` option here). These pin that both options render, +// that they differ, and that each moves the way its name says. #include "doctest.h" -#include "light/layouts/Layouts.h" #include "light/effects/NoiseEffect.h" -#include "light/effects/PlasmaEffect.h" -#include "light/effects/RainbowEffect.h" +#include "light/layers/Layer.h" #include "light/layouts/GridLayout.h" - -// Hash one z-slice of the layer buffer (used by 3D-depth tests below). -static uint32_t hashSlice(const uint8_t* data, size_t sliceBytes) { - uint32_t h = 2166136261u; - for (size_t i = 0; i < sliceBytes; i++) { h ^= data[i]; h *= 16777619u; } - return h; -} - -// One tick on an 8×8 grid leaves at least one non-zero byte (noise paints somewhere). -TEST_CASE("NoiseEffect writes non-zero RGB data to buffer") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 8; - grid.height = 8; - grid.depth = 1; +#include "light/layouts/Layouts.h" +#include "platform/platform.h" + +#include +#include +#include +#include + +using namespace mm; + +namespace { + +/// Render Noise for `frames` on a w x h x d fixture and return the final buffer. +std::vector render(lengthType w, lengthType h, lengthType d, uint8_t motion, + uint16_t frames = 40) { + platform::setTestNowMs(1000); + Layouts layouts; + GridLayout grid; + Layer layer; + NoiseEffect effect; + effect.motion = motion; + grid.width = w; grid.height = h; grid.depth = d; layouts.addChild(&grid); - - mm::Layer layer; layer.setLayouts(&layouts); layer.setChannelsPerLight(3); - - mm::NoiseEffect noise; - layer.addChild(&noise); - + layer.addChild(&effect); layer.applyState(); - layer.tick(); - - auto& buf = layer.buffer(); - REQUIRE(buf.data() != nullptr); - - bool hasNonZero = false; - for (size_t i = 0; i < buf.bytes(); i++) { - if (buf.data()[i] != 0) { hasNonZero = true; break; } + for (uint16_t f = 0; f < frames; f++) { + platform::setTestNowMs(1000 + static_cast(f) * 20); + layer.tick(); } - CHECK(hasNonZero); + auto& buf = layer.buffer(); + return std::vector(buf.data(), buf.data() + buf.bytes()); } -// Opposite corners of a 16×16 grid carry different colors (noise is not flat). -TEST_CASE("NoiseEffect produces spatial variation") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 16; - grid.height = 16; - grid.depth = 1; - layouts.addChild(&grid); - - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - - mm::NoiseEffect noise; - layer.addChild(&noise); - - layer.applyState(); - layer.tick(); - - auto* data = layer.buffer().data(); - // Compare corners — noise should produce different values - uint8_t r0 = data[0], g0 = data[1], b0 = data[2]; - size_t lastIdx = (16 * 16 - 1) * 3; - uint8_t r1 = data[lastIdx], g1 = data[lastIdx + 1], b1 = data[lastIdx + 2]; - CHECK((r0 != r1 || g0 != g1 || b0 != b1)); +std::size_t differing(const std::vector& a, const std::vector& b) { + std::size_t n = 0; + for (std::size_t i = 0; i < a.size() && i < b.size(); i++) n += a[i] != b[i] ? 1 : 0; + return n; } -// Noise and Rainbow produce visibly different frames on the same grid (sanity check that they're distinct algorithms). -TEST_CASE("NoiseEffect produces different output than RainbowEffect") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 8; - grid.height = 8; - grid.depth = 1; - layouts.addChild(&grid); - - // Render rainbow - mm::Layer layer1; - layer1.setLayouts(&layouts); - layer1.setChannelsPerLight(3); - mm::RainbowEffect rainbow; - layer1.addChild(&rainbow); - layer1.applyState(); - layer1.tick(); - - // Render noise - mm::Layer layer2; - layer2.setLayouts(&layouts); - layer2.setChannelsPerLight(3); - mm::NoiseEffect noise; - layer2.addChild(&noise); - layer2.applyState(); - layer2.tick(); +} // namespace - // Compare buffers — should differ - bool differs = false; - for (size_t i = 0; i < layer1.buffer().bytes(); i++) { - if (layer1.buffer().data()[i] != layer2.buffer().data()[i]) { - differs = true; - break; - } +TEST_CASE("both motions paint a field rather than a flat wash") { + for (uint8_t motion = 0; motion < 2; motion++) { + const auto f = render(16, 16, 1, motion); + std::set values(f.begin(), f.end()); + CHECK(values.size() > 8); // a real field, not one repeated color } - CHECK(differs); } -// Z-axis variation tests: with depth > 1 each z-slice must differ from the -// next. A 2D-only effect (the previous behaviour) produced identical slices — -// these tests pin the bug fixed. - -// With depth > 1, adjacent and distant z-slices each render differently (3D noise, not a stack of identical 2D slices). -TEST_CASE("NoiseEffect produces different output per z-slice with depth > 1") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 8; grid.height = 8; grid.depth = 8; - layouts.addChild(&grid); - - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - mm::NoiseEffect noise; - layer.addChild(&noise); - layer.applyState(); - layer.tick(); - - const size_t sliceBytes = static_cast(grid.width) * grid.height * 3; - REQUIRE(layer.buffer().bytes() == sliceBytes * grid.depth); - - uint32_t h0 = hashSlice(layer.buffer().data() + 0 * sliceBytes, sliceBytes); - uint32_t h1 = hashSlice(layer.buffer().data() + 1 * sliceBytes, sliceBytes); - uint32_t h4 = hashSlice(layer.buffer().data() + 4 * sliceBytes, sliceBytes); - CHECK(h0 != h1); // adjacent slices differ - CHECK(h0 != h4); // distant slices differ +TEST_CASE("drift moves the field across the fixture; morph changes it in place") { + // The distinction the control exists for, and the reason the two used to be separate effects. + // Drift scrolls the sample coordinates, so a later frame is the same field shifted. Morph holds + // the coordinates and advances time, so the field changes without going anywhere. Either way + // the picture must move, which is what this checks: a still frame would mean the motion control + // does nothing at all. + for (uint8_t motion = 0; motion < 2; motion++) { + const auto early = render(24, 24, 1, motion, 10); + const auto late = render(24, 24, 1, motion, 120); + CHECK(differing(early, late) > early.size() / 4); + } } -// Same z-slice variation requirement holds for Plasma — each depth plane renders differently. -TEST_CASE("PlasmaEffect produces different output per z-slice with depth > 1") { - mm::Layouts layouts; - mm::GridLayout grid; - grid.width = 8; grid.height = 8; grid.depth = 8; - layouts.addChild(&grid); +TEST_CASE("the two motions are genuinely different fields") { + const auto drift = render(24, 24, 1, 0, 60); + const auto morph = render(24, 24, 1, 1, 60); + CHECK(differing(drift, morph) > drift.size() / 2); +} - mm::Layer layer; - layer.setLayouts(&layouts); - layer.setChannelsPerLight(3); - mm::PlasmaEffect plasma; - layer.addChild(&plasma); - layer.applyState(); - layer.tick(); +TEST_CASE("on a volumetric fixture drifting slices differ from each other") { + // What a 3D fixture buys: the light's own depth is the third noise axis, so the field has real + // depth rather than one slice repeated. Morph spends that axis on time instead, so its slices + // are identical by design and only drift is checked here. + const auto f = render(8, 8, 4, 0, 40); + const std::size_t slice = 8 * 8 * 3; + REQUIRE(f.size() >= slice * 4); + std::size_t diff = 0; + for (std::size_t i = 0; i < slice; i++) diff += f[i] != f[slice * 3 + i] ? 1 : 0; + CHECK(diff > slice / 4); +} - const size_t sliceBytes = static_cast(grid.width) * grid.height * 3; - REQUIRE(layer.buffer().bytes() == sliceBytes * grid.depth); +TEST_CASE("Noise renders on a strip, a panel and a cube alike") { + // Any effect on any fixture: a 1D strip is not what a field effect is designed around, but it + // must still paint something rather than failing or going dark. + for (auto dims : {std::array{64, 1, 1}, {16, 16, 1}, {8, 8, 8}}) { + const auto f = render(dims[0], dims[1], dims[2], 0); + REQUIRE(f.size() == static_cast(dims[0]) * dims[1] * dims[2] * 3); + std::size_t lit = 0; + for (uint8_t v : f) lit += v > 0 ? 1 : 0; + CHECK(lit > f.size() / 8); + } +} - uint32_t h0 = hashSlice(layer.buffer().data() + 0 * sliceBytes, sliceBytes); - uint32_t h2 = hashSlice(layer.buffer().data() + 2 * sliceBytes, sliceBytes); - uint32_t h7 = hashSlice(layer.buffer().data() + 7 * sliceBytes, sliceBytes); - CHECK(h0 != h2); - CHECK(h0 != h7); +TEST_CASE("Noise survives a degenerate grid rather than faulting") { + const auto f = render(0, 0, 1, 0, 3); + CHECK(f.empty()); } diff --git a/test/unit/light/unit_PolarLut.cpp b/test/unit/light/unit_PolarLut.cpp index 63c3fe4f..55c3385b 100644 --- a/test/unit/light/unit_PolarLut.cpp +++ b/test/unit/light/unit_PolarLut.cpp @@ -9,6 +9,10 @@ #include "doctest.h" #include "core/MoonModule.h" +#include "light/effects/AuroraEffect.h" +#include "light/effects/PolarNoiseEffect.h" +#include "light/effects/SpiralEffect.h" +#include "light/effects/TunnelEffect.h" #include "light/polar.h" #include "platform/platform.h" @@ -216,3 +220,117 @@ TEST_CASE("releasing the table gives the memory back and the next prepare rebuil CHECK(o.dynamicBytes() == held); CHECK(o.lut.radiusAt(24, 24) == 0); // and it is the same table as before } + +// --- volumetric fixtures ---------------------------------------------------- +// +// "Angle and radius" has no single meaning in three dimensions, so the projection is a control. +// These pin what each one promises, and that the default costs an existing 2D fixture nothing. + +TEST_CASE("at one light deep every projection is the flat address, so no panel changes") { + // The property that makes cylindrical a safe default: a panel is a depth-1 volume, and all + // three mappings have to agree there or switching one would alter a fixture that has no depth. + Owner flat, cyl, sph, rad; + REQUIRE(flat.lut.prepare(24, 24, true)); + REQUIRE(cyl.lut.prepare(24, 24, 1, true, PolarLut::Mapping::Cylindrical)); + REQUIRE(sph.lut.prepare(24, 24, 1, true, PolarLut::Mapping::Spherical)); + REQUIRE(rad.lut.prepare(24, 24, 1, true, PolarLut::Mapping::Radial)); + for (uint16_t y = 0; y < 24; y++) + for (uint16_t x = 0; x < 24; x++) { + CHECK(cyl.lut.angleAt(x, y) == flat.lut.angleAt(x, y)); + CHECK(cyl.lut.radiusAt(x, y) == flat.lut.radiusAt(x, y)); + CHECK(rad.lut.radiusAt(x, y) == flat.lut.radiusAt(x, y)); + CHECK(sph.lut.angleAt(x, y) == flat.lut.angleAt(x, y)); + } +} + +TEST_CASE("cylindrical carries depth separately, so every slice reads the same address") { + // A tube or a stack of panels: the pattern is the same at every height, which is what lets an + // effect use depth for something else entirely. + Owner o; + REQUIRE(o.lut.prepare(16, 16, 8, true, PolarLut::Mapping::Cylindrical)); + for (uint16_t z = 1; z < 8; z++) + for (uint16_t y = 0; y < 16; y += 3) + for (uint16_t x = 0; x < 16; x += 3) { + CHECK(o.lut.angleAt(x, y, z) == o.lut.angleAt(x, y, 0)); + CHECK(o.lut.radiusAt(x, y, z) == o.lut.radiusAt(x, y, 0)); + } +} + +TEST_CASE("radial measures distance from the center of the volume, so the field reads as shells") { + Owner o; + REQUIRE(o.lut.prepare(9, 9, 9, true, PolarLut::Mapping::Radial)); + CHECK(o.lut.radiusAt(4, 4, 4) == 0); // the center light + CHECK(o.lut.radiusAt(0, 0, 0) == 65535); // a corner, the furthest point + CHECK(o.lut.radiusAt(8, 8, 8) > 60000); + // Equidistant lights share a radius whichever axis they lie on: that is what makes it a shell. + CHECK(o.lut.radiusAt(0, 4, 4) == o.lut.radiusAt(4, 0, 4)); + CHECK(o.lut.radiusAt(4, 4, 0) == o.lut.radiusAt(4, 0, 4)); +} + +TEST_CASE("spherical adds an elevation, so a sphere maps evenly instead of pinching") { + Owner o; + REQUIRE(o.lut.prepare(17, 17, 17, true, PolarLut::Mapping::Spherical)); + // On the equator the elevation is zero; above and below the center it points up and down. + CHECK(o.lut.pitchAt(16, 8, 8) == 0); + const angle16 up = o.lut.pitchAt(16, 8, 16); + const angle16 down = o.lut.pitchAt(16, 8, 0); + CHECK(up > 0); + CHECK(up < 32768); // above the plane, less than a quarter turn + CHECK(down > 32768); // below it, wrapped the other way + // And the radius is the distance through the volume, not across a slice. + CHECK(o.lut.radiusAt(8, 8, 8) == 0); + CHECK(o.lut.radiusAt(8, 8, 16) > 30000); +} + +TEST_CASE("only spherical pays for the third table") { + // The second angle is what spherical needs and the others do not, so it is what spherical alone + // allocates: a fixture on cylindrical must not carry memory for a value it never reads. + Owner cyl, sph; + REQUIRE(cyl.lut.prepare(16, 16, 4, false, PolarLut::Mapping::Cylindrical)); + REQUIRE(sph.lut.prepare(16, 16, 4, false, PolarLut::Mapping::Spherical)); + CHECK(cyl.lut.bytes() == 16 * 16 * 4 * 2); // angle + radius + CHECK(sph.lut.bytes() == 16 * 16 * 4 * 3); // + elevation + CHECK(cyl.lut.pitchAt(3, 3, 2) == 0); // and reading it is safe, not a fault +} + +TEST_CASE("switching projection live rebuilds the table and frees what the new one does not need") { + Owner o; + REQUIRE(o.lut.prepare(16, 16, 4, false, PolarLut::Mapping::Spherical)); + const std::size_t withPitch = o.lut.bytes(); + REQUIRE(o.lut.prepare(16, 16, 4, false, PolarLut::Mapping::Cylindrical)); + CHECK(o.lut.bytes() < withPitch); + CHECK(o.lut.mapping() == PolarLut::Mapping::Cylindrical); +} + +TEST_CASE("the volumetric index matches the buffer's own ordering") { + // A pixel loop reads by running index; if the table ordered its lights differently the field + // would be sheared through the volume rather than merely wrong at one light. + Owner o; + REQUIRE(o.lut.prepare(5, 4, 3, true, PolarLut::Mapping::Spherical)); + std::size_t i = 0; + for (uint16_t z = 0; z < 3; z++) + for (uint16_t y = 0; y < 4; y++) + for (uint16_t x = 0; x < 5; x++, i++) { + CHECK(o.lut.index(x, y, z) == i); + CHECK(o.lut.angle(i) == o.lut.angleAt(x, y, z)); + CHECK(o.lut.radius(i) == o.lut.radiusAt(x, y, z)); + } +} + +TEST_CASE("an effect can bind the polar controls before it has a fixture") { + // defineControls() runs before an effect is attached to a layer, and again on the throwaway + // instances the /api/types probe builds, so anything it asks about the fixture dereferences a + // null layer. An earlier addControls() hid the mapping on a flat fixture and segfaulted the + // framerate sweep for exactly that reason. + AuroraEffect a; + PolarNoiseEffect p; + TunnelEffect t; + SpiralEffect s; + a.defineControls(); + p.defineControls(); + t.defineControls(); + s.defineControls(); + // And the controls are all there, on an effect that has never seen a layer. + CHECK(a.controls().count() > 3); + CHECK(s.controls().count() > 3); +} diff --git a/test/unit/light/unit_PolarLut_equivalence.cpp b/test/unit/light/unit_PolarLut_equivalence.cpp index 328828ad..59a2f04e 100644 --- a/test/unit/light/unit_PolarLut_equivalence.cpp +++ b/test/unit/light/unit_PolarLut_equivalence.cpp @@ -31,8 +31,8 @@ std::vector render(lengthType w, lengthType h, bool useTable, bool wide GridLayout grid; Layer layer; EffectT effect; - effect.usePolarTable = useTable; - effect.widePolarTable = wide; + effect.polar.use = useTable; + effect.polar.wide = wide; grid.width = w; grid.height = h; grid.depth = 1; layouts.addChild(&grid); layer.setLayouts(&layouts); diff --git a/test/unit/light/unit_RmtLedDriver_pins.cpp b/test/unit/light/unit_RmtLedDriver_pins.cpp index 4a4ef14e..1b9dab49 100644 --- a/test/unit/light/unit_RmtLedDriver_pins.cpp +++ b/test/unit/light/unit_RmtLedDriver_pins.cpp @@ -479,3 +479,90 @@ TEST_CASE("RmtLedDriver tick is crash-safe for every pin configuration") { } CHECK(true); // reached here ⇒ no crash in any subcase } + +// --- wire timing ------------------------------------------------------------ +// +// A strip's bit rate is not universal: the shipped default satisfies WS2812, WS2812B and SK6812 +// together, but a 12V WS2811 in its low-speed mode wants twice the bit cell and reads the default +// as noise past the first few lights (issue #94). The `timing` control is what lets a user say so. + +TEST_CASE("the default timing is the one that drives WS2812B and SK6812 alike") { + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + wire(d, src, corr, 8); + const auto& c = d.wireTimingForTest(); + CHECK(c.t0h_ns == 350); + CHECK(c.t1h_ns == 700); + CHECK(c.period_ns == 1250); +} + +TEST_CASE("selecting 400 kHz doubles the bit cell, which is what a 12V WS2811 strip decodes") { + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.timing = 1; + wire(d, src, corr, 8); + const auto& c = d.wireTimingForTest(); + CHECK(c.t0h_ns == 500); + CHECK(c.t1h_ns == 1200); + CHECK(c.period_ns == 2500); +} + +TEST_CASE("the WS2811 fast mode keeps the 1.25 us cell with narrower pulses") { + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.timing = 2; + wire(d, src, corr, 8); + const auto& c = d.wireTimingForTest(); + CHECK(c.t0h_ns == 250); + CHECK(c.t1h_ns == 600); + CHECK(c.period_ns == 1250); +} + +TEST_CASE("custom timing is taken as the user typed it") { + // The escape hatch: a strip whose datasheet matches no preset is a control change rather than a + // firmware release, and the numbers a user finds by trying are ones they can report back. + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.timing = 3; + d.t0hNs = 400; d.t1hNs = 850; d.periodNs = 1400; + wire(d, src, corr, 8); + const auto& c = d.wireTimingForTest(); + CHECK(c.t0h_ns == 400); + CHECK(c.t1h_ns == 850); + CHECK(c.period_ns == 1400); +} + +TEST_CASE("custom timing that no chip could decode is ordered rather than emitted") { + // A "1" pulse shorter than a "0" pulse, or a cell too short to contain the pulse, is not a + // slow strip: it is a typo. Emitting it would drive the line with something undecodable, so the + // values are ordered into a shape a receiver can at least read. + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.timing = 3; + d.t0hNs = 900; d.t1hNs = 300; d.periodNs = 400; + wire(d, src, corr, 8); + const auto& c = d.wireTimingForTest(); + CHECK(c.t1h_ns > c.t0h_ns); + CHECK(c.period_ns > c.t1h_ns); +} + +TEST_CASE("switching timing takes effect without reconfiguring the pins") { + // Live reconfiguration: a user trying presets against a strip must not have to re-enter their + // wiring between attempts, and the frame after the change carries the new timing. + mm::RmtLedDriver d; + mm::Buffer src; + mm::Correction corr; + std::strncpy(d.pins, "2,4", sizeof(d.pins)); + wire(d, src, corr, 18); + CHECK(d.wireTimingForTest().period_ns == 1250); + + d.timing = 1; + d.applyState(); // what a control change triggers + CHECK(d.wireTimingForTest().period_ns == 2500); + CHECK(std::strcmp(d.pins, "2,4") == 0); // and the wiring is untouched +} From b54961087e04cc8f9507dddbf7bd9582489c6dcf Mon Sep 17 00:00:00 2001 From: ewowi Date: Fri, 4 Sep 2026 18:54:38 +0200 Subject: [PATCH 3/7] Let a MoonLive function return a value, and make Aurora volumetric A script's helper can now compute rather than only act: `int level() { ... }` and the call is an expression. The MoonLive Aurora uses it to sample a real 3D field, so on a cube the curtains stand through the volume instead of one slice repeating. Three review findings on the polar and noise kernels are closed. Performance: desktop unchanged (Aurora 64x64 p50 803us, within noise of 786us before); no ESP32 measurement, since no tick-path code changed. **Core** - Every backend's `callLabel` preserves the whole vreg pool across a script call and delivers the callee's value into the destination register. Xtensa's window rotation is why the result arrives in the caller's a10: call8 rotates by 8, so the callee's a2 is this frame's a10, and it is parked in the frame before the pool restore runs over it. - `writesDst` consults `CallScript`'s `b` flag, so a value-returning call is seen as DEFINING its destination. It was not, and the register allocator remapped every source while leaving the dst unmapped: after a compaction the call wrote its pre-compaction register and the consumer read the new one. Only reachable at a squeezed budget, which is the normal case on a ten-register Xtensa, so the host suite never saw it and hardware would have. - `kMaxLocals` is 32: a volumetric script needs 19 slots, and the cost is stack (148 bytes of frame), never the encoding. **Light domain** - `warpImpl` adds its displacement in unsigned arithmetic. Casting the coordinate to int32_t first was signed overflow for any coordinate past 2^31, which `r * zoom + drift` reaches on a large fixture. - NoiseEffect's morph passes time alone on the third axis. With a depth term it was a second drift, and the catalog card promised otherwise. - `PolarLut::addressOf` is the one home for the projections: the table builder calls it instead of holding a second copy, the computed fallback keeps the selected mapping in Aurora, PolarNoise and Tunnel (it computed cylindrical unconditionally, so a device short of memory silently changed composition), and `mappingOf` replaces the clamp's four copies. **Tests** - A returned value survives a squeezed budget, entered at the script's `tick` rather than the block start, plus the caller-side result stash pinned per device ISA. Nothing else reaches those two backends, where a wrong encoding is silent. - The computed fallback matches the table under all three mappings. - Morph shows the same field in every slice; FireEffect gains the golden it lacked. **Docs** - The spec said a function returns nothing; the builtin table lacked `fbm3`, `warp3` and `setPaletteColorZ`; the Aurora card said 2D while the code is D3. - Phase 2's 16-bit Layer is recorded as built, measured and stashed: a wide frame buffer costs +56.5% on the S3 and +57.9% on desktop, the two agreeing. Phases 3 and 4 start in 8 bits. Migrating a raw-byte effect onto `draw::pixel` is a measured regression (+170%, +327% for the flat-index form), so that step is withdrawn. Co-Authored-By: Claude Opus 5 --- docs/backlog/backlog-core.md | 20 +++++ docs/backlog/backlog-light.md | 7 ++ .../generative-fields-analysis-top-down.md | 54 +++++++++++- docs/backlog/moonlive-language-roadmap.md | 20 +++-- docs/moonmodules/light/MoonLiveEffect.md | 4 +- docs/moonmodules/light/effects.md | 2 +- moonlive/effects/aurora.mle | 50 ++++++----- src/core/moonlive/MoonLiveCompiler.cpp | 20 ++++- src/core/moonlive/MoonLiveIr.h | 27 ++++-- src/core/moonlive/MoonLiveSpill.cpp | 23 +++-- src/core/moonlive/moonlive_lower.h | 5 +- src/core/noise.h | 10 ++- src/light/effects/AuroraEffect.h | 14 +-- src/light/effects/NoiseEffect.h | 9 +- src/light/effects/PolarNoiseEffect.h | 15 ++-- src/light/effects/TunnelEffect.h | 24 +++--- src/light/moonlive/MoonLiveBuiltins_light.h | 53 +++++++++--- src/light/moonlive/script_catalog.h | 2 +- src/light/polar.h | 67 +++++++++------ src/platform/desktop/moonlive_asm_arm64.cpp | 23 ++++- src/platform/desktop/moonlive_asm_host.h | 4 +- src/platform/desktop/moonlive_asm_x86_64.cpp | 28 ++++-- src/platform/esp32/moonlive_asm_riscv.cpp | 24 +++++- src/platform/esp32/moonlive_asm_riscv.h | 4 +- src/platform/esp32/moonlive_asm_xtensa.cpp | 14 ++- src/platform/esp32/moonlive_asm_xtensa.h | 7 +- test/scenarios/light/scenario_Aurora_fps.json | 50 +++++------ .../light/scenario_Fields_polar_lut.json | 48 +++++------ test/unit/core/moonlive_device_codegen.inc | 23 +++++ .../unit/core/unit_moonlive_codegen_riscv.cpp | 13 ++- .../core/unit_moonlive_codegen_xtensa.cpp | 12 ++- test/unit/core/unit_moonlive_compiler.cpp | 86 +++++++++++++++++++ test/unit/core/unit_moonlive_spill.cpp | 58 +++++++++++++ test/unit/light/unit_Effects_golden.cpp | 2 + test/unit/light/unit_NoiseEffect.cpp | 13 +++ test/unit/light/unit_PolarLut_equivalence.cpp | 19 +++- 36 files changed, 673 insertions(+), 181 deletions(-) diff --git a/docs/backlog/backlog-core.md b/docs/backlog/backlog-core.md index 6465d0b7..6f1030a2 100644 --- a/docs/backlog/backlog-core.md +++ b/docs/backlog/backlog-core.md @@ -173,6 +173,26 @@ of code is fine; a new IDF component is the expensive kind). the rename map and restore report) ships in the File Manager. Remaining: tier 2, a single-archive device endpoint (one request instead of a walk); tier 3, restore hosted on MoonBase's page, the migration answer for future partition-table moves. +- **Restore clones a device's IDENTITY along with its config** (found answering + [#76](https://github.com/MoonModules/projectMM/issues/76), 2026-09-04). Backup bundles every + file including hidden `.config`, and restore writes them all back unfiltered, so restoring one + device's bundle onto another copies four things that must differ per device: + + | field | why it must differ | + |---|---| + | `deviceName` | the single network identity: mDNS hostname, SoftAP SSID and DHCP hostname all derive from it (`SystemModule.h`). Twelve clones all answer to `.local`, resolution goes non-deterministic, MoonDeck's device list collapses to one row | + | WiFi `password` | travels in the bundle (the UI button warns), so a shared or attached backup leaks it | + | a static IP | if set, every clone claims one address | + | `universeStart` and the Art-Net/DDP window | exactly what must differ per device in the light-pole case #76 describes: cloned, every pole shows the same thing | + + This turns "clone this pole to the other eleven" from the feature the issue wants into a trap. + **The fix is small and is a prerequisite for the recipe idea rather than a separate job:** restore + treats identity as per-device, either skipping those fields or prompting once with the target's + current values prefilled. Worth deciding whether the bundle should carry the secrets at all, or + keep an identity section the restoring device is expected to supply. +- **A backup is a file bundle, not a recipe** (#76 step 2): nothing binds it to a `deviceModel`, so + restoring a Dig-Quad bundle onto an S3 writes pin maps that do not fit the board. The 28 profiles + in `deviceModels.json` are the missing half. - **Firmware downgrade guard**: MoonBase installs whatever image it is given; a version display (read from the incoming image's app descriptor) before flashing would make an accidental downgrade visible. diff --git a/docs/backlog/backlog-light.md b/docs/backlog/backlog-light.md index 163f197c..75116d20 100644 --- a/docs/backlog/backlog-light.md +++ b/docs/backlog/backlog-light.md @@ -18,6 +18,13 @@ Forward-looking to-build items for the **light domain** (`src/light/`: drivers, so its motion speed is a property of the frame rate. **Build trigger**: a stall we cannot remove at its source, on hardware a user actually has. +## Effects + +### Moving-head effects from MoonLight, including two of troyhack's (2026-09-04) + +MoonLight has several moving-head effects that have no equivalent here, two of them troyhack's. +Migrate them all, on the power functions per the standing mandate rather than traced across. + ## Drivers ### Logarithmic brightness, and a power budget the device knows about (2026-09-02) diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md index 61d8e88c..625f75dd 100644 --- a/docs/backlog/generative-fields-analysis-top-down.md +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -346,7 +346,59 @@ holding several coordinates meets the 16-slot ceiling faster (§ 8b there). Ordering note: this is the step that makes a 3D script possible, so it follows phase 1b rather than leading it. A script that can hold a coordinate but calls kernels that ignore z has gained nothing. -### Phase 2: the 16-bit Layer (large, cross-cutting) +### Phase 2: the 16-bit Layer: BUILT, MEASURED, STASHED (2026-09-04) + +**Decision: the wide frame buffer is not the way to precision; phases 3 and 4 start in 8 bits.** +The whole phase was built and verified (every golden matched through a narrowed hash, every driver +and both preview paths read at the layer's width), then measured, and the measurement reversed the +premise. It is held in a local `git stash` (`2026-09-04 phase 2 ...`) pending the product owner's +call on where it should live: a stash is local and unpushed, so it does not survive a drop or a +fresh clone, and "recoverable if the wall says otherwise" needs a branch or a tag to be true. + +**The number.** A noise field plus the driver's per-light read, the same benchmark on both targets: + +| | 8-bit | 16-bit | cost | +|---|---|---|---| +| ESP32-S3, 128x128 | 18.25 ms | 28.58 ms | **+56.5%** (effect +50%, driver read +63%) | +| desktop arm64, 128x128 | 0.48 ms | 0.76 ms | +57.9% | + +The two agree, which is rare for a host benchmark against Xtensa and is what makes the number +trustworthy. On the S3 the driver read was the LARGER half: the per-light reassembly of two bytes +into a channel is what an in-order core punishes. The 8-bit dispatch itself cost nothing measurable +(a loop-invariant branch), so the work was correct; it was aimed one layer too high. + +**Why the premise was wrong.** Phase 2 existed to prepare phases 3 and 4. Phase 4's own first step is +temporal dithering, and phase 3's trails need a precise ACCUMULATOR, not a wide frame buffer (the +Wave effect already does this with a private plane). That is also how the ANIMartRIX and FlowFields +engines work: float per pixel, quantized to 8 bits in the very last step, dithered. The precision +lives in the computation, not in the frame. A wide frame buffer buys smoother gradients, which is +visible on Rainbow across a 768-wide panel and nowhere else we looked; phases 3 and 4 add motion and +structure, not gradients. + +**What stayed in the tree (all correct at 8 bits, all pinned):** the three CodeRabbit findings on +PR 95 (`warpImpl` unsigned wrap, morph without a depth term, the polar fallback keeping its mapping, +each with a test), and a golden for Fire, which had none. What went to the stash: `Buffer`/`Canvas` +width, `putChannel`/`getChannel`, the wide `Correction` path, every driver's width dispatch, the +16-bit noise/palette/color/LUT kernels, and nine effects moved onto `draw::pixel` (see below). + +**Two findings to carry forward.** +- **A raw byte write is invisible to a grep for the draw API.** Nine effects address `buffer()` + directly and use no draw call; the plan counted seven. Grep for `buffer()`, `data()[`, `* cpl` and + `memcpy` as well. +- **Moving an effect onto `draw::pixel` is a hot-path REGRESSION**, not a cleanup. Measured on the + desktop over a 256x256 RGB frame: the row pointer the effects use writes a light in 0.26 ns; + `draw::pixel` with x and y already known costs +170% (the `offsetOf` multiplies and the bounds + check per light); a flat-index effect that first reconstructs x, y, z with three divides and then + calls it costs +327%. Step 5 below is therefore withdrawn as written. If uniformity is wanted, the + draw API needs a row or span form that an effect can advance, not a per-light coordinate write. + +**Should the wide buffer ever come back**, the stash holds a complete, tested implementation whose +only open item was the MoonLive store (a script's `StoreElem` writes three consecutive bytes). The +design for that is worked out: keep byte stores, emit a second one per channel, no new encodings. + +The original phase plan follows, kept as the record of what was built and measured. + +#### Phase 2 as planned (superseded) 1. `Buffer`: bytes per channel; `Canvas`: sample width; `Layer::prepare()` picks the width by the allocation check (option B) or fixed 16 (option A), per the sign-off. 2. `draw.h`: every `Canvas` and `Buffer` primitive as one template instantiated for both widths; `get`/`pixel` widen 8-bit RGB on write and narrow on read for the existing callers. 3. `BlendMap`: both paths templated; the output buffer follows the Layer's width. diff --git a/docs/backlog/moonlive-language-roadmap.md b/docs/backlog/moonlive-language-roadmap.md index 3c6b7a32..f2095847 100644 --- a/docs/backlog/moonlive-language-roadmap.md +++ b/docs/backlog/moonlive-language-roadmap.md @@ -35,7 +35,7 @@ Five hard limits, all found by hitting them: | script state | **64 bytes** shared by all members | `kCtrlBytes`, `MoonLiveBuiltins.h:132` | | distinct members | **8** | `kMaxCtrls`, same file | | branch labels | **16** (an `if` or `for` takes up to 2) | `kIrLabels`, `MoonLiveIr.h:201` | -| frame slots | **16**, shared by live variables, loop counters and staged call arguments | `kMaxLocals`, `MoonLiveIr.h` | +| frame slots | **32**, shared by live variables, loop counters and staged call arguments ✅ | `kMaxLocals`, `MoonLiveIr.h` | | ~~numeric types~~ | ~~`uint8_t`, `uint16_t`, `int16_t`~~ → **`int`, `byte`, `bool`, `fixed`, `string`** ✅ | still no float: `fixed` is Q16.16 | | ~~builtin table~~ | ~~16, and 16 used~~ → **64** ✅ | `BuiltinTable::kMax` — raised, with an overflow assert | @@ -419,17 +419,20 @@ with different state silently does the wrong thing. It is also what makes helper Script functions DO exist and ship: `balls.mle` calls `drawBall()`, `crosshair.mle` calls three helpers, and every layout and modifier is one. Recursion works. Three limits sit on top of them, and `aurora.mle` hit all three at once writing a `bright(v)` helper to apply one contrast window to two -layers (2026-09-04): +layers (2026-09-04). **The return value shipped the same day**, so two remain: | limit | what the compiler says | |---|---| | no parameters | `a script function takes no arguments yet` | -| no return value | `a script function returns nothing yet` | | no forward calls: a helper must be declared ABOVE its caller | `unknown function`, with the column but not the name | -The third is the cheapest to build and the most confusing to meet, since the message is the one an -actual typo produces: a second pass over the class body resolves it, which the code comment names as -the reason it is refused rather than half-supported. +A function may now RETURN a value: `int f() { return ...; }` and the call is an expression. Each +backend's `callLabel` preserves the whole vreg pool and delivers the result into the destination +register, so a value survives the calls that follow it in the same expression. + +The forward call is the cheapest to build and the most confusing to meet, since the message is the +one an actual typo produces: a second pass over the class body resolves it, which the code comment +names as the reason it is refused rather than half-supported. Parameters and returns also relieve § 8b: a helper's variables are live only inside it, so factoring a loop body into a function is how a script stays under the frame budget. @@ -496,9 +499,8 @@ each call's staged arguments drawn from the same 16. So the real cost is **stack**, not encoding: each slot is 4 bytes of frame on the render task, and `kAsmLabels`/`kAsmFixups` next door carry the warning that this project has already bootlooped a P4 on an oversized stack frame. 16 slots is 64 bytes; 32 would be 128. That is a cheap change on its -face, and the honest next step is to MEASURE the deepest compile-chain frame at 32 the way the -`kAsmLabels` note measured 48/96, then pick a number. Worth doing together with § 8, since both are -"probably just a constant" and both want the same measurement. +face, and the measurement settled it: **`kMaxLocals` is 32** (2026-09-04), 128 bytes of frame, and +the encoding was never the limit on any backend. ### 9. Division: ✅ *shipped* diff --git a/docs/moonmodules/light/MoonLiveEffect.md b/docs/moonmodules/light/MoonLiveEffect.md index 58c7a27a..2efe64e5 100644 --- a/docs/moonmodules/light/MoonLiveEffect.md +++ b/docs/moonmodules/light/MoonLiveEffect.md @@ -173,9 +173,11 @@ Registered by the light domain, not built into the compiler (the core owns only | `polarA(dx, dy)`, `polarR(dx, dy)` | angle and distance from a center, for a radial effect | | `fbm(x, y, octaves)` | octaves of noise summed at doubling frequency and halving amplitude, `0..255`: the cloud, smoke and terrain field. `octaves` is the cost knob, one noise sample each | | `warp(x, y, strength)` | the field sampled where the field itself displaced it, `0..255`: the flowing, marbled look. Three noise samples | +| `fbm3(x, y, z, octaves)`, `warp3(x, y, z, strength)` | the same two fields with a third axis, so a volumetric fixture samples through the field rather than repeating one slice. On a panel, pass `0` for `z` and the result is the 2D form exactly | | `osc(rate, ms, shape)` | a low-frequency oscillator, `0..65535`, at `rate` cycles per minute. Shapes: 0 sine, 1 triangle, 2 sawtooth, 3 square. Stateless, so two oscillators sharing a rate hold their phase relationship | | `escape(cx, cy, jx, jy, iters)` | the Mandelbrot/Julia escape count, `0..255`, `0` inside the set. Zero seed = Mandelbrot; the four coordinates are `fixed`, so uv output flows straight in. The one loop a script cannot write: it squares signed values in 64 bits | | `setPaletteColor(x, y, index, bri)` | one light from the ACTIVE palette, in one call | +| `setPaletteColorZ(x, y, z, index, bri)` | the same, addressing a light in a volume | | `paletteR(i, bri)`, `paletteG`, `paletteB` | one palette channel, when a script needs the value rather than a pixel | | `pool(n)` | size this script's particle pool, from `defineControls()`. Returns what it got | | `emit(x, y, angle, speed, n, life, hue)` | throw `n` particles from a point | @@ -207,7 +209,7 @@ vocabulary follows the [WLED Particle System](https://github.com/wled/WLED) by D A class may define functions beside its entry point and call them, including calling itself. `effects/crosshair.mle` is the worked example: a `column()` and a `row()`, both called from `tick()`. -These are real calls, not text pasted in by the compiler: the callee allocates its own frame when it runs, which is what lets one helper call another and what makes recursion work. A function takes no arguments and returns nothing yet, so a helper does a whole job rather than computing a value. +These are real calls, not text pasted in by the compiler: the callee allocates its own frame when it runs, which is what lets one helper call another and what makes recursion work. A function takes no arguments yet, but it may RETURN a value: declare it `int` and the helper computes where a number is needed (`setRGB(0, level(), 0, 0)`); declare it `void` and it does a whole job instead. Two rules a script author meets: diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index a6a7f40e..73096f62 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -405,7 +405,7 @@ Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1 -### Aurora 🔬 · 2D +### Aurora 🔬 · 3D Several noise fields, each drifting on its own clock, read in polar coordinates and composited into curtains of light. Nothing is simulated: layers of the same field at different scales, moved by independent oscillators, interfere with each other, and the interference is what reads as curtains folding through one another. The strongest layer at each pixel wins, so the layers stay distinct instead of averaging into haze, and which layer won picks the region of the palette. Every palette gives a different aurora. diff --git a/moonlive/effects/aurora.mle b/moonlive/effects/aurora.mle index 7fe2def6..9dd091ba 100644 --- a/moonlive/effects/aurora.mle +++ b/moonlive/effects/aurora.mle @@ -7,7 +7,7 @@ class AuroraEffect { byte twist = 40; byte contrast = 150; - int dimensions() { return 2; } + int dimensions() { return 3; } string tags() { return "💫"; } @@ -22,25 +22,35 @@ class AuroraEffect { void tick() { int driftA = div(osc(speed, t, 2), 64); int driftB = div(osc(mod(speed * 3, 127) + 1, t, 2), 64); - - for (int y = 0; y < height; y = y + 1) { - for (int x = 0; x < width; x = x + 1) { - int a = polarA(x - div(width, 2), y - div(height, 2)); - int r = polarR(x - div(width, 2), y - div(height, 2)); - a = div(a + r * twist, 64) * zoom; - - int best = warp(a, r * zoom + driftA, fold * 4); - int other = warp(a + zoom * 3, r * zoom + driftB + 4096, fold * 4); - - int index = 40; - if (other > best) { - best = other; - index = 170; - } - if (best > contrast) { - setPaletteColor(x, y, index, div((best - contrast) * 255, 256 - contrast)); - } else { - setPaletteColor(x, y, index, 0); + int driftC = div(osc(mod(speed * 7, 113) + 1, t, 2), 64); + + for (int z = 0; z < depth; z = z + 1) { + for (int y = 0; y < height; y = y + 1) { + for (int x = 0; x < width; x = x + 1) { + int a = polarA(x - div(width, 2), y - div(height, 2)); + int r = polarR(x - div(width, 2), y - div(height, 2)); + a = div(a + r * twist, 64) * zoom; + + int d = (z - div(depth, 2)) * zoom; + + int best = warp3(a, r * zoom + driftA, d, fold * 4); + int other = warp3(a + zoom * 3, r * zoom + driftB + 4096, d, fold * 4); + + int index = 40; + if (other > best) { + best = other; + index = 170; + } + other = warp3(a + zoom * 6, r * zoom + driftC + 8192, d, fold * 4); + if (other > best) { + best = other; + index = 100; + } + if (best > contrast) { + setPaletteColorZ(x, y, z, index, div((best - contrast) * 255, 256 - contrast)); + } else { + setPaletteColorZ(x, y, z, index, 0); + } } } } diff --git a/src/core/moonlive/MoonLiveCompiler.cpp b/src/core/moonlive/MoonLiveCompiler.cpp index 97879c0c..64c76851 100644 --- a/src/core/moonlive/MoonLiveCompiler.cpp +++ b/src/core/moonlive/MoonLiveCompiler.cpp @@ -683,7 +683,25 @@ struct Parser { lex.advance(); if (!expect(Tok::LParen, "expected '(' after the function name")) return; if (!expect(Tok::RParen, "a script function takes no arguments yet")) return; - if (resultOut) { fail("a script function returns nothing yet"); return; } + // A call used as a VALUE takes what the callee returned. Refused when the callee + // declares void, since there is nothing to take and the script would otherwise + // read whatever the return register happened to hold. + if (resultOut) { + if (fns[i].ret == RetType::Void) { + fail("this function returns nothing, so it cannot be used as a value"); return; + } + if (fns[i].ret == RetType::Str) { + fail("a string return cannot be used in an expression yet"); return; + } + // The value stays in its register: a script call preserves the caller's + // vregs (every backend's callLabel saves the pool around it, exactly as a + // builtin call does), so a second call in the same expression cannot overwrite + // it. The first version left the pool unsaved and `a() + b()` read 6. + const VReg v = alloc(); + emit({IrOp::CallScript, v, 0, 1, 0, 0, static_cast(i), nullptr, {}}); + *resultOut = v; + return; + } // `imm` is the callee's FUNCTION NUMBER, not its position in the op array. An IR // index would be the more obvious choice and was the first one, but the spill pass // rewrites the array and every index past its first insertion shifts: the call then diff --git a/src/core/moonlive/MoonLiveIr.h b/src/core/moonlive/MoonLiveIr.h index 7b419bf5..6bbe557a 100644 --- a/src/core/moonlive/MoonLiveIr.h +++ b/src/core/moonlive/MoonLiveIr.h @@ -85,10 +85,12 @@ enum class IrOp : uint8_t { // a null arena. Each backend reloads them from the frame before the call; where they // go is the per-ISA part. // - // NOTHING MAY BE LIVE IN A REGISTER ACROSS ONE. Script variables are slot-resident - // and temporaries die within their statement, so this holds today and is why no - // save-set is emitted. Xtensa's window rotation would hide a violation that - // corrupts RISC-V, so it is stated here rather than left to be discovered. + // Every caller vreg IS preserved across one: each backend's callLabel saves the + // pool and restores it, the same guarantee a builtin call gives, because a value + // computed before the call and read after it (`a() + b()`) is ordinary in an + // expression. `b` says whether the caller wants the callee's value, and when it does + // the result is delivered into `dst` after the pool is back. The allocator reads + // that same flag to decide the op defines `dst` (MoonLiveSpill's writesDst). ConstPtr, // dst = the pointer in `ptr`: a full-width address materialized into a register. // Distinct from Const because `imm` is int32_t and a pointer is 64 bits on the // desktop, so an address cannot ride an immediate. Every backend already builds one @@ -250,11 +252,18 @@ static constexpr uint8_t kIrLabels = 16; static constexpr uint8_t kAsmLabels = 48; static constexpr uint8_t kAsmFixups = 96; -/// Script variables live in FRAME SLOTS, and this bounds how many one program may hold at once. -/// Sixteen matches what every backend's frame can address (`kMaxSpillSlots`), so a program that -/// parses is a program the assembler can encode. Raising it means widening the frame on all three -/// backends together — the slot index is an instruction field, not just a table size. -static constexpr uint8_t kMaxLocals = 16; +/// Script variables live in FRAME SLOTS, and this bounds how many one program may hold at once: +/// named variables, loop counters and limits, and the arguments staged for a call, all at the same +/// moment. A block hands its slots back at its closing brace and a call hands back its staging, so +/// the budget is what is LIVE at once rather than a total. +/// +/// 32 is what a volumetric script needs: three nested loops cost six slots before a five-argument +/// write stages anything. The budget's cost is STACK, not encoding (Xtensa's s32i/l32i offset +/// reaches 256 slots, RISC-V's 2048, and the host addresses from a frame pointer), and it is +/// measured: the script's own frame is 148 bytes on the render task, and only for a script that +/// uses the slots, since the prologue reserves the peak the program actually reached; the compile +/// chain's deepest nesting is 2512 bytes of the main task's 12288, at 24 bytes per parser local. +static constexpr uint8_t kMaxLocals = 32; /// The most arguments one call can carry. Bounded by the FRAME, not by the register file: the parser /// stages arguments into consecutive local slots, so a call can take as many as the locals range diff --git a/src/core/moonlive/MoonLiveSpill.cpp b/src/core/moonlive/MoonLiveSpill.cpp index 88606380..2bf682d4 100644 --- a/src/core/moonlive/MoonLiveSpill.cpp +++ b/src/core/moonlive/MoonLiveSpill.cpp @@ -114,16 +114,23 @@ uint8_t sourcesOf(const IrInst& in, VReg* out) { // Does this op WRITE its dst? Branches, Label, Spill and the inline ops do not — their dst field is // a zero the front-end never fills in, and reading it as a definition would give vreg 0 (kArg0, the // buffer pointer) a spurious live range that the allocator would then try to manage. -bool writesDst(IrOp op) { - switch (op) { +/// Whether an op DEFINES its `dst`, which is what gives it a live interval and what makes the +/// rewriter remap it. Takes the whole instruction because `CallScript` answers per call: the +/// statement form writes nothing, the expression form writes its result. +bool writesDst(const IrInst& in) { + switch (in.op) { case IrOp::Label: case IrOp::BranchGe: case IrOp::BranchGeS: case IrOp::BranchNe: // A member store writes MEMORY, not a register: its `a` is the value and `imm` the arena // offset, so reading its dst as a definition would give vreg 0 a spurious live range. case IrOp::StoreCtrl: case IrOp::StoreCtrl32: - // CallScript writes no dst either: a script function returns nothing today, so the call is - // a statement rather than an expression. When it gains a return value this moves. - case IrOp::CallScript: + // CallScript writes its dst only when the caller WANTED the value (`b != 0`). The flag has + // to be consulted: a statement call's dst field is 0, which is kArg4's neighbour kArg0, so + // treating every call as a definition would give that argument a spurious live interval. + // Reading it as never-defining is the other error, and the expensive one: the rewriter + // remaps every source but leaves an unmapped dst, so after a compaction the call wrote the + // pre-compaction register while its consumer read the new one, and the value was lost. + case IrOp::CallScript: return in.b != 0; case IrOp::Spill: case IrOp::Inline: return false; default: return true; } @@ -240,7 +247,7 @@ bool spillToBudget(IrProgram& ir, const RegBudget& budget, uint8_t& slotsUsed) { VReg src[4]; const uint8_t n = sourcesOf(in, src); for (uint8_t s = 0; s < n; s++) mention(src[s], i); - if (writesDst(in.op)) mention(in.dst, i); + if (writesDst(in)) mention(in.dst, i); } // A value whose live range TOUCHES a loop is live to that loop's end. Naive first-def-to-last-use @@ -415,9 +422,9 @@ bool spillToBudget(IrProgram& ir, const RegBudget& budget, uint8_t& slotsUsed) { if (n > 2) in.c = mapped(src[2], 2); if (n > 3) in.d = mapped(src[3], 3); - const bool dstSpilled = writesDst(in.op) && in.dst < kMaxVRegs && iv[in.dst].spilled; + const bool dstSpilled = writesDst(in) && in.dst < kMaxVRegs && iv[in.dst].spilled; const uint8_t dstSlot = dstSpilled ? iv[in.dst].slot : 0; - if (writesDst(in.op)) { + if (writesDst(in)) { // A spilled destination is computed into a reload temp and then stored. It may reuse a // temp that carried a source: the op reads its sources and writes its destination as one // instruction, so the aliasing is the ordinary `add d, d, b` every ISA here defines. diff --git a/src/core/moonlive/moonlive_lower.h b/src/core/moonlive/moonlive_lower.h index b90d710e..dc811dec 100644 --- a/src/core/moonlive/moonlive_lower.h +++ b/src/core/moonlive/moonlive_lower.h @@ -372,7 +372,10 @@ size_t lowerWith(IrProgram& ir, uint8_t* out, size_t cap, const RegBudget* squee // down, and for recursion it is the enclosing function), so this binds a label and // the assembler patches the displacement once every function is placed. if (op.imm < 0 || op.imm >= ir.fnCount) break; - a.callLabel(fnLabel[op.imm]); + // `b` marks a call whose value the caller wants; the backend delivers it into + // dst, since which register holds it is ABI knowledge (Xtensa's call8 rotates the + // window, so the callee's a2 is the caller's a10). + a.callLabel(fnLabel[op.imm], reg(op.dst), op.b != 0); break; } case IrOp::Ret: diff --git a/src/core/noise.h b/src/core/noise.h index 2583c797..02bdaa01 100644 --- a/src/core/noise.h +++ b/src/core/noise.h @@ -385,10 +385,14 @@ inline uint8_t warpImpl(uint32_t x, uint32_t y, uint32_t z, uint16_t strength, u dx = (static_cast(inoise8(x, y)) - 128) * strength / 128; dy = (static_cast(inoise8(x + 0x9E37u, y + 0x7C15u)) - 128) * strength / 128; } - const uint32_t sx = static_cast(static_cast(x) + dx); - const uint32_t sy = static_cast(static_cast(y) + dy); + // The displacement is added in UNSIGNED arithmetic. Casting the coordinate to int32_t first + // was signed overflow (undefined behavior) for any coordinate past 2^31, which a scaled field + // reaches easily: `r * zoom + drift` on a large fixture is already past it. Unsigned wrapping is + // defined, and wrapping is what a noise coordinate wants anyway. + const uint32_t sx = x + static_cast(dx); + const uint32_t sy = y + static_cast(dy); if constexpr (Dims > 2) { - return fbm8(sx, sy, static_cast(static_cast(z) + dz), octaves); + return fbm8(sx, sy, z + static_cast(dz), octaves); } else { return fbm8(sx, sy, octaves); } diff --git a/src/light/effects/AuroraEffect.h b/src/light/effects/AuroraEffect.h index 16e41d2b..2139580c 100644 --- a/src/light/effects/AuroraEffect.h +++ b/src/light/effects/AuroraEffect.h @@ -140,11 +140,15 @@ class AuroraEffect : public EffectBase { ? static_cast(lut_.pitch(idx) >> 6) : static_cast(z) - cz; } else { - const int32_t dx = static_cast(x) - cx; - const int32_t dy = static_cast(y) - cy; - baseAngle = atan16(dy, dx); - r = dist16(dx, dy); - along = static_cast(z) - cz; + // The same address the table would have held, under the same mapping. + const auto m = PolarLut::mappingOf(polar); + const auto ad = PolarLut::addressOf(m, static_cast(x) - cx, + static_cast(y) - cy, + static_cast(z) - cz); + baseAngle = ad.angle; + r = ad.radius; + along = m == PolarLut::Mapping::Spherical ? static_cast(ad.pitch >> 6) + : static_cast(z) - cz; } // The strongest layer at this pixel wins, and how far it exceeds the visibility diff --git a/src/light/effects/NoiseEffect.h b/src/light/effects/NoiseEffect.h index bba1642a..d39c5f0e 100644 --- a/src/light/effects/NoiseEffect.h +++ b/src/light/effects/NoiseEffect.h @@ -64,11 +64,12 @@ class NoiseEffect : public EffectBase { uint8_t n; if (motion == 1) { - // Morph: space is still and time is the third axis. The field changes without - // travelling, which on a panel is the classic plasma wash. + // Morph: space is still and TIME is the third axis, with no depth term, so the + // field changes without traveling and a volumetric fixture shows the same field in + // every slice. On a panel it is the classic plasma wash. Drift spends that axis on + // depth instead, which is what separates the two. n = inoise8(static_cast(x) * 256u / sc, - static_cast(y) * 256u / sc, - (static_cast(z) * 256u / sc) + t); + static_cast(y) * 256u / sc, t); } else { // Drift: the coordinates scroll, each axis at its own rate so the field flows // instead of sliding rigidly. On a volumetric fixture z is the light's own depth, diff --git a/src/light/effects/PolarNoiseEffect.h b/src/light/effects/PolarNoiseEffect.h index 625a9d7e..9b563c29 100644 --- a/src/light/effects/PolarNoiseEffect.h +++ b/src/light/effects/PolarNoiseEffect.h @@ -100,11 +100,16 @@ class PolarNoiseEffect : public EffectBase { ? static_cast(lut_.pitch(i) >> 6) : static_cast(z) - cz; } else { - const int32_t dx = static_cast(x) - cx; - const int32_t dy = static_cast(y) - cy; - a = atan16(dy, dx); - r = dist16(dx, dy); - along = static_cast(z) - cz; + // The same address the table would have held, under the same mapping: a device + // too tight for the table must show the same composition, not a different one. + const auto m = PolarLut::mappingOf(polar); + const auto ad = PolarLut::addressOf(m, static_cast(x) - cx, + static_cast(y) - cy, + static_cast(z) - cz); + a = ad.angle; + r = ad.radius; + along = m == PolarLut::Mapping::Spherical ? static_cast(ad.pitch >> 6) + : static_cast(z) - cz; } // The twist shears the angle by the radius, which is what turns concentric rings diff --git a/src/light/effects/TunnelEffect.h b/src/light/effects/TunnelEffect.h index fc12851a..be006caf 100644 --- a/src/light/effects/TunnelEffect.h +++ b/src/light/effects/TunnelEffect.h @@ -10,9 +10,9 @@ namespace mm { // Tunnel: the demoscene classic — a texture mapped onto the inside of an infinite tube, so the // viewer appears to fly down it forever. // -// The trick is that nothing is 3D. For each pixel, its ANGLE around the centre becomes one texture +// The trick is that nothing is 3D. For each pixel, its ANGLE around the center becomes one texture // coordinate and the RECIPROCAL of its distance becomes the other. Because 1/r grows without bound -// as you approach the centre, the texture compresses toward a vanishing point, and adding time to +// as you approach the center, the texture compresses toward a vanishing point, and adding time to // that coordinate pulls it toward the viewer. Perspective for the price of a divide. // // It is the polar vocabulary carried to its conclusion: `atan16` and `dist16` give the angle and @@ -92,16 +92,20 @@ class TunnelEffect : public EffectBase { ? static_cast(lut_.pitch(i) >> 6) : static_cast(z) - cz; } else { - const int32_t dx = static_cast(x) - cx; - const int32_t dy = static_cast(y) - cy; - r = dist16(dx, dy); - a = atan16(dy, dx); - along = static_cast(z) - cz; + // The same address the table would have held, under the same mapping. + const auto m = PolarLut::mappingOf(polar); + const auto ad = PolarLut::addressOf(m, static_cast(x) - cx, + static_cast(y) - cy, + static_cast(z) - cz); + a = ad.angle; + r = ad.radius; + along = m == PolarLut::Mapping::Spherical ? static_cast(ad.pitch >> 6) + : static_cast(z) - cz; } - // 1/r is the depth coordinate: distant wall (small r) compresses toward the centre, + // 1/r is the depth coordinate: distant wall (small r) compresses toward the center, // which is exactly the perspective foreshortening a real tunnel has. The +1 keeps - // the pixel at the very centre from dividing by zero. + // the pixel at the very center from dividing by zero. const uint32_t depthCoord = (static_cast(depth) * 4096u) / (r + 1); // The wall corkscrews: rotating by depth means each ring is turned a little more @@ -118,7 +122,7 @@ class TunnelEffect : public EffectBase { const uint32_t v = depthCoord + (t >> 5) + static_cast(along * 256); const uint8_t tex = fbm8(u, v, octaves); - // Vignette by distance so the centre reads as far away rather than merely small. + // Vignette by distance so the center reads as far away rather than merely small. uint8_t bri = 255; if (vignette) { const uint32_t maxR = static_cast(cx > cy ? cx : cy) + 1; diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index 49271289..d6c016ca 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -61,11 +61,11 @@ inline uint8_t byteArg(uintptr_t a) { } // The ACTIVE palette, so a script follows the device's palette control exactly as a compiled -// effect does — which is the whole point: before this, a script could only hard-code colour. +// effect does, which is the whole point: before this, a script could only hard-code color. // -// Deliberately NO hsv() alongside it. A hue wheel is how an effect picks colour while IGNORING +// Deliberately NO hsv() alongside it. A hue wheel is how an effect picks color while IGNORING // the user's palette, which is the habit the compiled effects were moved off (47 of 52 read the -// palette; the exceptions are effects where colour carries meaning, like the axis-identifying +// palette; the exceptions are effects where color carries meaning, like the axis-identifying // red/green/blue in LinesEffect). Giving scripts hsv() would reintroduce it as the easy default. extern "C" inline uint32_t mm_light_paletteR(const uintptr_t* args, uint32_t, const uint8_t*) { return colorFromPalette(*Palettes::active(), byteArg(args[0]), byteArg(args[1])).r; @@ -228,9 +228,9 @@ extern "C" inline uint32_t mm_light_escape(const uintptr_t* args, uint32_t, cons // is biased into 0..65535 with the zero line at 32768. A script that wants a coordinate scales the // result: `scale(sin(a), width)` sweeps the whole axis, which is the same `scale` a beat uses. // polarA(dx, dy) / polarR(dx, dy) — the POLAR pair (Angle, Radius), for an effect written around distance and -// bearing from a centre rather than around x/y. Both take offsets that a script computes as -// `x - cx`, which is unsigned and therefore wraps for a point left of centre: the builtins -// re-centre it themselves (see below), so a script does not have to reason about the wrap. +// bearing from a center rather than around x/y. Both take offsets that a script computes as +// `x - cx`, which is unsigned and therefore wraps for a point left of center: the builtins +// re-center it themselves (see below), so a script does not have to reason about the wrap. // // polarA() returns an angle16 (65536 = one turn), so it feeds straight into sin()/cos(). polarR() // returns the true distance, not the octagonal approximation, because a visibly non-circular @@ -259,6 +259,18 @@ extern "C" inline uint32_t mm_light_warp(const uintptr_t* args, uint32_t, const return warp8(uint32_t(args[0]), uint32_t(args[1]), static_cast(uint32_t(args[2])), 1); } +// fbm3(x, y, z, octaves) / warp3(x, y, z, strength) → the volumetric forms of the two field +// compositions. The kernels underneath are the same ones the compiled effects call, and each is its +// 2D form when z is 0, so a script can pass a light's depth unconditionally. +extern "C" inline uint32_t mm_light_fbm3(const uintptr_t* args, uint32_t, const uint8_t*) { + return fbm8(uint32_t(args[0]), uint32_t(args[1]), uint32_t(args[2]), + static_cast(uint32_t(args[3]))); +} +extern "C" inline uint32_t mm_light_warp3(const uintptr_t* args, uint32_t, const uint8_t*) { + return warp8(uint32_t(args[0]), uint32_t(args[1]), uint32_t(args[2]), + static_cast(uint32_t(args[3])), 1); +} + // osc(rate, ms, shape) → a low-frequency oscillator, 0..65535, `rate` cycles per minute at time // `ms`. Shapes: 0 sine, 1 triangle, 2 sawtooth, 3 square (core/oscillators.h names them). // @@ -666,7 +678,7 @@ inline void setDrawCanvas(const draw::Canvas& cv) MM_NONBLOCKING { if (s) s->canvas = cv; } -/// setPaletteColor(x, y, index, brightness) → one pixel, coloured from the ACTIVE palette. +/// setPaletteColor(x, y, index, brightness) → one pixel, colored from the ACTIVE palette. /// /// One call where a script used to write three: `paletteR/G/B` each returned a single channel, so /// a palette pixel cost three host calls AND three evaluations of whatever expression produced the @@ -711,6 +723,21 @@ extern "C" inline uint32_t mm_light_setPalEntryHSV(const uintptr_t* args, uint32 return 0; } +// setPaletteColorZ(x, y, z, index, bri) - one light in a VOLUME, from the active palette. +// +// A separate name rather than an optional argument on setPaletteColor: a builtin's arity is exact +// (the compiler checks `n != fn->argc`), so an optional one would be a change to the call path for +// a case the fixture already tells apart. On a fixture with no depth z is 0 and the two agree. +extern "C" inline uint32_t mm_light_setPaletteColorZ(const uintptr_t* args, uint32_t, const uint8_t*) { + const draw::Canvas& cv = drawCanvas(); + if (!cv.data) return 0; // no canvas installed (a layout, a modifier) + const uint32_t x = uint32_t(args[0]), y = uint32_t(args[1]), z = uint32_t(args[2]); + if (x >= uint32_t(cv.dims.x) || y >= uint32_t(cv.dims.y) || z >= uint32_t(cv.dims.z)) return 0; + draw::pixel(cv, Coord3D{lengthType(x), lengthType(y), lengthType(z)}, + colorFromPalette(*Palettes::active(), byteArg(args[3]), byteArg(args[4]))); + return 0; +} + extern "C" inline uint32_t mm_light_setPaletteColor(const uintptr_t* args, uint32_t, const uint8_t*) { const draw::Canvas& cv = drawCanvas(); if (!cv.data) return 0; // no canvas installed (a layout, a modifier) @@ -1130,7 +1157,7 @@ inline const BuiltinTable& lightBuiltins() { t.add({"setRGB", 4, /*returns*/ false, BuiltinKind::Inline, nullptr, InlineOp::StoreElem}); // setXYZ(x, y, z) → write one POSITION (bounds-guarded). The same StoreElem as setRGB: // three values at index * stride, and what differs is the destination the binding hands run() - // (a colour buffer for an effect, a coordinate for a modifier), so one op serves both and the + // (a color buffer for an effect, a coordinate for a modifier), so one op serves both and the // engine stays free of any notion of what the three bytes mean. // // A different OP from setRGB, not the same one with an argument hidden: StoreFirst writes @@ -1190,7 +1217,7 @@ inline const BuiltinTable& lightBuiltins() { // Mandelbrot with a zero seed, Julia otherwise. The one piece of maths a script cannot // express: it squares SIGNED values and script arithmetic is unsigned. t.add({"escape", 5, /*returns*/ true, BuiltinKind::Call, &mm_light_escape, {}, /*byRef*/ 0, /*byStr*/ 0, /*fixedArgs*/ 0x0f}); - // polarA(dx, dy) / polarR(dx, dy) → polar from a centre. atan16 and dist16 already exist in + // polarA(dx, dy) / polarR(dx, dy) → polar from a center. atan16 and dist16 already exist in // math16.h. NOT named `angle`/`radius`: a script wants those for its own controls // (ring.mll and balls.mle both declare `radius`), and a builtin would shadow them. Exposing // them here is what lets a radial effect drop its precomputed lookup table. @@ -1201,6 +1228,9 @@ inline const BuiltinTable& lightBuiltins() { // script reaches the same vocabulary rather than summing octaves by hand in the grammar. t.add({"fbm", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_fbm, {}}); t.add({"warp", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_warp, {}}); + // Their 3D forms, so a script samples through a volume rather than repeating one slice. + t.add({"fbm3", 4, /*returns*/ true, BuiltinKind::Call, &mm_light_fbm3, {}}); + t.add({"warp3", 4, /*returns*/ true, BuiltinKind::Call, &mm_light_warp3, {}}); // osc(rate, ms, shape) → an LFO, the unit every animated quantity is made of. Stateless, so // oscillators sharing a rate hold their relationship for as long as the device runs. t.add({"osc", 3, /*returns*/ true, BuiltinKind::Call, &mm_light_osc, {}}); @@ -1215,9 +1245,12 @@ inline const BuiltinTable& lightBuiltins() { // follows from how the member was declared, so the two can no longer disagree. t.add({"addControl", 4, /*returns*/ false, BuiltinKind::Call, &mm_light_addControl, {}, /*byRef*/ 0x2, /*byStr*/ 0x1}); - // setPaletteColor(x, y, i, bri) → one palette-coloured pixel. The form a script should reach + // setPaletteColor(x, y, i, bri) → one palette-colored pixel. The form a script should reach // for: one call, one brightness evaluation, and no buffer-layout arithmetic at the call site. t.add({"setPaletteColor", 4, /*returns*/ false, BuiltinKind::Call, &mm_light_setPaletteColor, {}}); + // The volumetric write: the same call with the light's depth, so a script paints a cube rather + // than its z = 0 slice. + t.add({"setPaletteColorZ", 5, /*returns*/ false, BuiltinKind::Call, &mm_light_setPaletteColorZ, {}}); // setPalEntry(i,r,g,b) / setPalEntryHSV(i,h,s,v) -> write one of the sixteen ACTIVE palette // entries. A palette script's only output; a no-op in every other role, where no sink is // installed, so an effect calling it changes nothing rather than corrupting the palette. diff --git a/src/light/moonlive/script_catalog.h b/src/light/moonlive/script_catalog.h index 60cc3153..f8d5d6fe 100644 --- a/src/light/moonlive/script_catalog.h +++ b/src/light/moonlive/script_catalog.h @@ -45,7 +45,7 @@ constexpr size_t kEffectCatalogCount = 25; /// A dimension of 0 means the script says nothing, so the DEVICE decides the default. constexpr unsigned char kEffectCatalogDim[] = { 1, - 2, + 3, 2, 2, 1, diff --git a/src/light/polar.h b/src/light/polar.h index b235ca00..ff6e35d3 100644 --- a/src/light/polar.h +++ b/src/light/polar.h @@ -110,12 +110,45 @@ class PolarLut { list.addSelect("mapping", c.mapping, kMappingOptions, 3); } + /// The polar address of one light, computed rather than read: what an effect uses when the table + /// was declined (a device too tight for it) or switched off. + /// + /// Takes the mapping, so the fallback renders the SAME composition the table would have. An + /// earlier version computed cylindrical unconditionally, so a fixture set to spherical or radial + /// silently reverted to cylindrical the moment memory ran short: the effect kept working and + /// quietly showed a different thing, which is worse than not working. + struct Address { + angle16 angle; ///< around the axis + uint32_t radius; ///< in pixels from the center + angle16 pitch; ///< elevation, under Spherical; 0 otherwise + }; + /// The mapping a Controls block selects, clamped to one this class defines. The control is a + /// select index and a saved config can hold a value from a build that offered more of them, so + /// the clamp is what keeps an unknown index rendering as cylindrical rather than reading past + /// the switch. One home: the table builder and every effect's computed fallback ask here. + static Mapping mappingOf(const Controls& c) { + return static_cast(c.mapping > 2 ? 0 : c.mapping); + } + + static Address addressOf(Mapping mapping, int32_t dx, int32_t dy, int32_t dz) { + switch (mapping) { + case Mapping::Radial: + return {0, dist16(dist16(dx, dy), dz), 0}; + case Mapping::Spherical: + return {atan16(dy, dx), dist16(dist16(dx, dy), dz), + atan16(dz, static_cast(dist16(dx, dy)))}; + case Mapping::Cylindrical: + default: + return {atan16(dy, dx), dist16(dx, dy), 0}; + } + } + /// Build (or release) the table for a fixture of this size, per the controls. The one call an /// effect makes from prepare(). bool prepareFor(const Controls& c, lengthType w, lengthType h, lengthType d) { if (!c.use) { release(); return false; } return prepare(static_cast(w), static_cast(h), static_cast(d), - c.wide, static_cast(c.mapping > 2 ? 0 : c.mapping)); + c.wide, mappingOf(c)); } /// The 2D form. A separate overload rather than a defaulted depth, because `prepare(w, h, true)` @@ -182,31 +215,13 @@ class PolarLut { const int32_t dy = static_cast(y) - cy; const int32_t dz = static_cast(z) - cz; - // The three projections differ only here: what the angle means and what the radius - // measures. Everything below is common, which is why adding one costs a case. - angle16 a = 0; - uint32_t r = 0; - angle16 pitch = 0; - switch (mapping) { - case Mapping::Radial: - // No angle at all: distance from the center, so the field reads as shells. - r = dist16(dist16(dx, dy), dz); - break; - case Mapping::Spherical: - // Around and up: the second angle is the elevation above the xy plane, so a - // sphere's surface maps onto the field evenly rather than pinching. - a = atan16(dy, dx); - r = dist16(dist16(dx, dy), dz); - pitch = atan16(dz, static_cast(dist16(dx, dy))); - break; - case Mapping::Cylindrical: - default: - // The 2D address, with depth left to the caller: identical to a panel's at - // every z, which is what makes this the default. - a = atan16(dy, dx); - r = dist16(dx, dy); - break; - } + // Through addressOf, the same call the computed fallback makes: the table is a + // CACHE of that function, so a second copy of the projections here is the one way + // the two could disagree, and unit_PolarLut_equivalence pins that they do not. + const Address ad = addressOf(mapping, dx, dy, dz); + angle16 a = ad.angle; + uint32_t r = ad.radius; + angle16 pitch = ad.pitch; // Scale the radius to full range against the furthest corner, so `radius` is a // position from center (0) to edge (full scale) rather than a pixel count. Both // steps ROUND rather than truncate: a caller scaling back to pixels truncates twice diff --git a/src/platform/desktop/moonlive_asm_arm64.cpp b/src/platform/desktop/moonlive_asm_arm64.cpp index 946955d2..421ad533 100644 --- a/src/platform/desktop/moonlive_asm_arm64.cpp +++ b/src/platform/desktop/moonlive_asm_arm64.cpp @@ -311,7 +311,18 @@ void HostAssembler::ret() { emit32(0xd65f03c0u); } // calls nest and therefore recurse. // // Pass the host arguments on (the contract is with IrOp::CallScript in core). -void HostAssembler::callLabel(Label l) { +void HostAssembler::callLabel(Label l, Reg d, bool take) { + // The same preservation call() gives a builtin: the whole vreg pool, the host args and x30 to + // the stack, the result parked in x15 (outside the pool) across the restore. Without it a value + // computed before the call and used after it, `a() + b()`, read the second call's result twice. + emit32(0xa9b807e0u); // stp x0, x1, [sp, #-128]! + emit32(0xa9017be2u); // stp x2, x30, [sp, #16] + emit32(0xa90723e3u); // stp x3, x8, [sp, #112] + emit32(0xa90217e4u); // stp x4, x5, [sp, #32] + emit32(0xa9031fe6u); // stp x6, x7, [sp, #48] + emit32(0xa9042be9u); // stp x9, x10, [sp, #64] + emit32(0xa90533ebu); // stp x11,x12, [sp, #80] + emit32(0xa9063bedu); // stp x13,x14, [sp, #96] // Reloading them is a NO-OP on this backend as long as R0..R4 map onto the ABI argument // registers x0..x4 and `bl` leaves them alone, which is why removing these four instructions // does not fail a single test here while the same omission crashes an S3. Emitted anyway, so @@ -319,6 +330,16 @@ void HostAssembler::callLabel(Label l) { for (uint8_t v = 0; v < kHostArgSlots; v++) spillLoad(static_cast(v), hostArgSlot(v)); addFixup(len_, l, FixKind::Call); emit32(0x94000000u); // bl #0: the 26-bit imm is patched below + if (take) emit32(0xaa0003efu); // mov x15, x0 (result → x15, outside the pool) + emit32(0xa94723e3u); // ldp x3, x8, [sp, #112] + emit32(0xa9463bedu); // ldp x13,x14, [sp, #96] + emit32(0xa94533ebu); // ldp x11,x12, [sp, #80] + emit32(0xa9442be9u); // ldp x9, x10, [sp, #64] + emit32(0xa9431fe6u); // ldp x6, x7, [sp, #48] + emit32(0xa94217e4u); // ldp x4, x5, [sp, #32] + emit32(0xa9417be2u); // ldp x2, x30, [sp, #16] + emit32(0xa8c807e0u); // ldp x0, x1, [sp], #128 + if (take) emit32(0xaa0f03e0u | uint32_t(mr(d))); // mov x, x15 } void HostAssembler::patchBranches() { diff --git a/src/platform/desktop/moonlive_asm_host.h b/src/platform/desktop/moonlive_asm_host.h index cb4a2149..51f5a602 100644 --- a/src/platform/desktop/moonlive_asm_host.h +++ b/src/platform/desktop/moonlive_asm_host.h @@ -135,7 +135,9 @@ class HostAssembler { /// Call a function in THIS block, by label: the script-to-script call. The return address is /// linked into x30 (arm64 `bl`) or pushed on the stack (x86-64 `call rel32`); either way the /// callee's prologue preserves it, which is what lets the call nest. - void callLabel(Label l); + /// Every caller vreg is preserved across it exactly as call() does for a builtin, and the + /// return value is delivered into `d` when `take` is set. + void callLabel(Label l, Reg d = R0, bool take = false); void ret(); private: diff --git a/src/platform/desktop/moonlive_asm_x86_64.cpp b/src/platform/desktop/moonlive_asm_x86_64.cpp index 4b3cc181..9d09d185 100644 --- a/src/platform/desktop/moonlive_asm_x86_64.cpp +++ b/src/platform/desktop/moonlive_asm_x86_64.cpp @@ -809,7 +809,11 @@ void HostAssembler::call(Reg d, Reg a, Reg b, Reg c, const void* fn) { // Script-to-script call: bl-equivalent on x64 is `call rel32` (E8 xx xx xx xx). The callee's // prologue saves rbp and nonvolatiles, exactly like our own prologue, so calls nest. -void HostAssembler::callLabel(Label l) { +void HostAssembler::callLabel(Label l, Reg d, bool take) { + // The same preservation call() gives a builtin: push the whole pool, call, write the result over + // the pushed slot of `d` so the pops deliver it. Without it a value computed before the call and + // used after it, `a() + b()`, read the second call's result twice. + for (uint8_t v = 0; v < kRegCount; v++) emitPushReg(this, kX64Reg[v]); // Reload parked host arguments from their spill slots — the contract with IrOp::CallScript // in core, mirroring arm64. On x64 this matters: the arg registers ARE vregs the callee may // have consumed, so their live-across-a-called-function meaning has to be re-established. @@ -819,17 +823,31 @@ void HostAssembler::callLabel(Label l) { // above the 32-byte shadow space. The entry-point function's prologue reads kArg4 from // [rbp+48] and it works because the C++ caller followed Win64 exactly. A script-to-script // call must do the same: without this store, the callee's `mov rdi, [rbp+48]` reads whatever - // happened to be in that stack slot (an old vreg-save byte, a return-address byte from a - // previous call), rdi becomes garbage, and the first host(kArg4) dereferences it and faults. - // [rsp+kShadowSpace] is the outgoing arg-5 slot prologue reserves for exactly this (see the - // frame layout above); call() saves vregs with pushes below rsp and reserves nothing here. + // happened to be in that stack slot, rdi becomes garbage, and the first host(kArg4) + // dereferences it and faults. The pushes above buried the slot prologue reserved, so a fresh + // outgoing area is opened here: shadow + the arg-5 slot, padded to keep rsp 16-aligned (the + // pushes leave it aligned, as call()'s own `sub rsp, kShadowSpace` relies on). // SysV passes arg 5 in r8, which IS R4 in the SysV map; the spillLoad above already put it // in the right register, so no stack store is needed. + emitSubRspImm32(this, int32_t(kShadowSpace) + 16); emitMovMemDispReg(this, x64::RSP, kShadowSpace, xr(R4)); #endif addFixup(len_, l, FixKind::Call); uint8_t b[5] = { 0xE8, 0, 0, 0, 0 }; emitBytes(b, 5); +#if defined(_WIN32) + { + uint8_t add[4] = { rex_(true, false, false, false), 0x83, modrm_(0b11, 0, x64::RSP), + uint8_t(kShadowSpace + 16) }; + emitBytes(add, 4); + } +#endif + if (take) { + uint8_t zx[2] = {0x89, 0xC0}; // mov eax, eax: zero-extend the 32-bit result + emitBytes(zx, 2); + emitMovMemDispReg(this, x64::RSP, pushedSlot(d), x64::RAX); + } + for (uint8_t v = kRegCount; v-- > 0;) emitPopReg(this, kX64Reg[v]); } // Resolve all pending fixups: overwrite the rel32 field in each branch/call with (target - site). diff --git a/src/platform/esp32/moonlive_asm_riscv.cpp b/src/platform/esp32/moonlive_asm_riscv.cpp index fd7a9862..a9db0ceb 100644 --- a/src/platform/esp32/moonlive_asm_riscv.cpp +++ b/src/platform/esp32/moonlive_asm_riscv.cpp @@ -61,11 +61,33 @@ void RiscvAssembler::bind(Label l) { if (l < kMaxLabels) labelPos_[l] = static_c // Pass the host arguments on (the contract is with IrOp::CallScript in core). The RISC-V delta: // there is no window rotation, so the values go straight into the argument registers the callee's // prologue reads. -void RiscvAssembler::callLabel(Label l) { +// The encoders below are defined with the arithmetic ops further down; declared here so callLabel +// can sit with its sibling call-related routines rather than after them. +static uint32_t encAddi(uint8_t rd, uint8_t rs1, int32_t imm); +static uint32_t encSw(uint8_t rs2, uint8_t rs1, int32_t imm); +static uint32_t encLw(uint8_t rd, uint8_t rs1, int32_t imm); + +void RiscvAssembler::callLabel(Label l, Reg d, bool take) { + // The same preservation call() gives a builtin: the whole vreg pool and ra to the stack, the + // callee's a0 stashed in t6 past the restore. Without it a value computed before the call and + // used after it, `a() + b()`, read the second call's result twice. + emit32(encAddi(2, 2, -80)); // addi sp, sp, -80 + emit32(encSw(1, 2, 76)); // sw ra, 76(sp) + static const uint8_t saved[] = {10, 11, 12, 13, 14, 5, 6, 7, 28, 29, 30, 15, 16, 17}; + int off = 0; + for (uint8_t r : saved) { emit32(encSw(r, 2, off)); off += 4; } + // The host arguments are reloaded from the FRAME (s0-relative), so the sp move above does not + // disturb where they come from. for (uint8_t v = 0; v < kHostArgSlots; v++) spillLoad(static_cast(v), hostArgSlot(v)); addFixup(len_, l, FixKind::Jal); // jal x1, 0: opcode 0x6f, rd = 1. The 20-bit immediate is scattered by the patcher. emit32(0x000000efu); + if (take) emit32(encAddi(kScratchFn, 10, 0)); // mv t6, a0 + off = 0; + for (uint8_t r : saved) { emit32(encLw(r, 2, off)); off += 4; } + emit32(encLw(1, 2, 76)); + emit32(encAddi(2, 2, 80)); + if (take) emit32(encAddi(xr(d), kScratchFn, 0)); // mv dst, t6 } // Record a pending branch fixup, guarding the fixed table (overflow_ rather than an OOB write). diff --git a/src/platform/esp32/moonlive_asm_riscv.h b/src/platform/esp32/moonlive_asm_riscv.h index 9babc754..63c5d17e 100644 --- a/src/platform/esp32/moonlive_asm_riscv.h +++ b/src/platform/esp32/moonlive_asm_riscv.h @@ -104,7 +104,9 @@ class RiscvAssembler { void call(Reg d, Reg a, Reg b, Reg c, const void* fn); // standard call to a host built-in /// Call a function in THIS block, by label: the script-to-script call. `jal ra, off` links the /// return address in x1 and jumps; the callee's own prologue saves ra, so recursion works. - void callLabel(Label l); + /// Every caller vreg is preserved across it exactly as call() does for a builtin, and the + /// callee's a0 is delivered into `d` when `take` is set. + void callLabel(Label l, Reg d = R0, bool take = false); void epilogue(); // undo prologue's frame (if any), then ret /// Park `a` where the ABI returns a value, so the host reads it after the call. The move /// happens BEFORE the epilogue's teardown: on a windowed or frame-pointer ABI the diff --git a/src/platform/esp32/moonlive_asm_xtensa.cpp b/src/platform/esp32/moonlive_asm_xtensa.cpp index 9ad95712..11fa0fc2 100644 --- a/src/platform/esp32/moonlive_asm_xtensa.cpp +++ b/src/platform/esp32/moonlive_asm_xtensa.cpp @@ -164,7 +164,14 @@ void XtensaAssembler::addFixup(size_t at, Label label, FixKind kind) { // explicit sp adjust plus an s32i of a0). Reaching a windowed callee with call0 hands it a frame it // never allocated. The callee owes the 32-byte window reserve like any other call8 frame, which its // own per-function prologue provides. -void XtensaAssembler::callLabel(Label l) { +void XtensaAssembler::callLabel(Label l, Reg d, bool take) { + // The same preservation call() gives a builtin. The window protects a2..a7 (R0..R5) by itself; + // a8..a11 (R6..R9) become the callee's a0..a3 and are overwritten, so they go to the frame first, + // in the slots call() owns. Without this a value computed before the call and used after it, + // `a() + b()`, read the second call's result twice. + auto s32i = [&](uint8_t r, uint8_t off4){ const uint8_t enc[3]={uint8_t((r<<4)|2),0x61,off4}; emit(enc,3); }; + auto l32i = [&](uint8_t r, uint8_t off4){ const uint8_t enc[3]={uint8_t((r<<4)|2),0x21,off4}; emit(enc,3); }; + s32i(8, 4); s32i(9, 5); s32i(10, 6); s32i(11, 7); // Pass the host arguments on (the contract is with IrOp::CallScript in core). The Xtensa // delta: call8 ROTATES the window by 8, so the callee's a2..a6 are this routine's a10..a14 and // the arguments are written to the OUTGOING window, not to a2..a6, which stay this frame's own. @@ -180,6 +187,11 @@ void XtensaAssembler::callLabel(Label l) { // xtensa-esp32-elf-as, which encodes `call8 target` at pc 6 with target 0 as a5 ff ff. const uint8_t enc[3] = {0x25, 0x00, 0x00}; emit(enc, 3); + // The result lands in a10, which the restore below overwrites: park it in the frame first, the + // slot call() already uses for exactly this, then deliver it once the pool is back. + if (take) s32i(10, kResultSlot); + l32i(8, 4); l32i(9, 5); l32i(10, 6); l32i(11, 7); + if (take) l32i(ar(d), kResultSlot); } // movi aD, #imm. The narrow byte form carries only 0..255, so a wider constant (a uint16 like diff --git a/src/platform/esp32/moonlive_asm_xtensa.h b/src/platform/esp32/moonlive_asm_xtensa.h index d19cf843..fbbdc68c 100644 --- a/src/platform/esp32/moonlive_asm_xtensa.h +++ b/src/platform/esp32/moonlive_asm_xtensa.h @@ -119,7 +119,12 @@ class XtensaAssembler { /// /// The callee therefore owes the 32-byte window-save reserve like any other call8 frame, which /// per-function prologues already give it. - void callLabel(Label l); + /// + /// Every caller vreg is preserved across the call exactly as call() does for a builtin, and the + /// callee's return value is delivered into `d` when `take` is set. The window rotation is why + /// that value arrives in the CALLER's a10: call8 rotates by 8, so the callee's a2 is this + /// frame's a10. + void callLabel(Label l, Reg d = R0, bool take = false); void epilogue(); // retw.n /// Park `a` where the ABI returns a value, so the host reads it after the call. The move /// happens BEFORE the epilogue's teardown: on a windowed or frame-pointer ABI the diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index 9cbe3c4f..ff1f9ffb 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,12 +84,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 786, - "p95": 855, + "p50": 803, + "p95": 890, "min": 474, - "max": 855, - "n": 8, - "samples": [478, 474, 650, 786, 803, 855, 835, 843] + "max": 890, + "n": 9, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890] }, "last_updated": "2026-09-04" } @@ -114,12 +114,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 307, + "p50": 311, "p95": 320, "min": 207, "max": 320, - "n": 8, - "samples": [207, 207, 208, 307, 311, 320, 316, 318] + "n": 9, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317] }, "last_updated": "2026-09-04" } @@ -144,12 +144,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 183, + "p50": 185, "p95": 192, "min": 127, "max": 192, - "n": 8, - "samples": [127, 127, 128, 185, 183, 189, 187, 192] + "n": 9, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186] }, "last_updated": "2026-09-04" } @@ -174,12 +174,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 530, + "p50": 532, "p95": 554, "min": 303, "max": 554, - "n": 8, - "samples": [304, 303, 306, 530, 532, 554, 540, 544] + "n": 9, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551] }, "last_updated": "2026-09-04" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 919, + "p50": 921, "p95": 974, "min": 474, "max": 974, - "n": 8, - "samples": [474, 474, 480, 921, 919, 974, 933, 936] + "n": 9, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938] }, "last_updated": "2026-09-04" } @@ -238,8 +238,8 @@ "p95": 1562, "min": 785, "max": 1562, - "n": 7, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562] + "n": 8, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455] }, "last_updated": "2026-09-04" } @@ -264,12 +264,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1491, + "p50": 1494, "p95": 1511, "min": 507, "max": 1511, - "n": 8, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494] + "n": 9, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498] }, "last_updated": "2026-09-04" } @@ -294,12 +294,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1079, + "p50": 1092, "p95": 1108, "min": 333, "max": 1108, - "n": 8, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096] + "n": 9, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104] }, "last_updated": "2026-09-04" } diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index 2a34a2d0..cdb5abe1 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -89,8 +89,8 @@ "p95": 387, "min": 189, "max": 387, - "n": 9, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281] + "n": 10, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289] }, "last_updated": "2026-09-04" } @@ -116,11 +116,11 @@ "desktop-macos": { "tick_us": { "p50": 275, - "p95": 284, + "p95": 313, "min": 183, - "max": 284, - "n": 9, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281] + "max": 313, + "n": 10, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313] }, "last_updated": "2026-09-04" } @@ -146,11 +146,11 @@ "desktop-macos": { "tick_us": { "p50": 274, - "p95": 282, + "p95": 288, "min": 168, - "max": 282, - "n": 9, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282] + "max": 288, + "n": 10, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288] }, "last_updated": "2026-09-04" } @@ -176,11 +176,11 @@ "desktop-macos": { "tick_us": { "p50": 274, - "p95": 284, + "p95": 285, "min": 168, - "max": 284, - "n": 9, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282] + "max": 285, + "n": 10, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285] }, "last_updated": "2026-09-04" } @@ -206,11 +206,11 @@ "desktop-macos": { "tick_us": { "p50": 137, - "p95": 142, + "p95": 144, "min": 83, - "max": 142, - "n": 9, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138] + "max": 144, + "n": 10, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144] }, "last_updated": "2026-09-04" } @@ -239,8 +239,8 @@ "p95": 501, "min": 250, "max": 501, - "n": 9, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417] + "n": 10, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422] }, "last_updated": "2026-09-04" } @@ -275,8 +275,8 @@ "p95": 1239, "min": 960, "max": 1239, - "n": 9, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206] + "n": 10, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218] }, "last_updated": "2026-09-04" } @@ -305,8 +305,8 @@ "p95": 590, "min": 460, "max": 590, - "n": 9, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476] + "n": 10, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472] }, "last_updated": "2026-09-04" } diff --git a/test/unit/core/moonlive_device_codegen.inc b/test/unit/core/moonlive_device_codegen.inc index 283508da..61699047 100644 --- a/test/unit/core/moonlive_device_codegen.inc +++ b/test/unit/core/moonlive_device_codegen.inc @@ -253,6 +253,29 @@ TEST_CASE("every function in a class starts where a call can reach it, on " MM_I // // The predicate matches the DESTINATION only. Which register holds the value is the allocator's // choice and may change; that it is moved into the ABI's return register is the contract. +// The CALLER side of the same contract, and the half nothing else reaches. Taking a value means +// stashing the callee's result before the vreg pool is restored over it: the restore reloads the +// very register the value arrived in. Host backends prove the SEMANTICS (unit_moonlive_spill and +// unit_moonlive_compiler run the code), but these two ISAs are never executed here, so a wrong +// stash is silent, and a value-returning call is exactly where an encoding slip reads as a +// plausible number rather than a crash. +TEST_CASE("taking a script function's value stashes it past the pool restore on " MM_ISA_NAME) { + bool ok = false; + // The value must be USED after a second call, so the pool restore genuinely runs over it. + const auto code = emitBytes("class T {\n" + " int a() { return 40; }\n" + " int b() { return 5; }\n" + " void tick() { setRGB(0, a() + b(), 0, 0); }\n" + "}\n", + mm::moonlive::effectSysVars(), ok); + REQUIRE(ok); + REQUIRE(code.size() > 4); + bool found = false; + for (size_t i = 0; i + 4 <= code.size(); i += MM_ISA_RET_STRIDE) + if (MM_ISA_STASHES_RESULT(&code[i])) { found = true; break; } + CHECK(found); +} + TEST_CASE("a returned value reaches the return register on " MM_ISA_NAME) { bool ok = false; // A function that returns a COMPUTED value: a literal could be materialized straight into the diff --git a/test/unit/core/unit_moonlive_codegen_riscv.cpp b/test/unit/core/unit_moonlive_codegen_riscv.cpp index c4604c70..84434eca 100644 --- a/test/unit/core/unit_moonlive_codegen_riscv.cpp +++ b/test/unit/core/unit_moonlive_codegen_riscv.cpp @@ -53,13 +53,22 @@ namespace mm { using namespace ::mm; using namespace ::mm::moonlive; #define MM_GOLD_FX_LEN 164u // +4: one branch #define MM_GOLD_FILLLOOP_LEN 360u // +24: fits on every backend since the host args moved to the frame #define MM_GOLD_FXLOOP_LEN 252u // +16: four branches -#define MM_GOLD_FXLOOP_HASH 1379319229u -#define MM_GOLD_FX_HASH 4146299475u +// The two hashes moved 2026-09-04 when kMaxLocals went 16 -> 32 (the first volumetric script needed +// 19 slots). A wider frame changes the prologue's reserve and every slot offset, so identical source +// emits different bytes: a frame-offset change is exactly what this hash exists to surface, and it +// did. The LENGTHS are unchanged, which is the evidence it is offsets rather than different code. +#define MM_GOLD_FXLOOP_HASH 3140471189u +#define MM_GOLD_FX_HASH 2676401519u // `mv a0, xN` is `addi a0, xN, 0`: opcode 0x13, funct3 0, rd = x10 (a0), imm 0. rs1 is the // allocator's choice, so it is masked out; rd and the immediate are the contract. #define MM_ISA_RET_WRITES_RETREG(p) \ (((uint32_t((p)[0]) | (uint32_t((p)[1]) << 8) | (uint32_t((p)[2]) << 16) | \ (uint32_t((p)[3]) << 24)) & 0xfff07fffu) == 0x00000513u) +// The caller-side stash: `mv t6, a0`, i.e. `addi t6, a0, 0`. rd = x31 (t6), rs1 = x10 (a0), +// imm 0. The callee's value is parked past the pool restore, which would otherwise overwrite a0. +#define MM_ISA_STASHES_RESULT(p) \ + ((uint32_t((p)[0]) | (uint32_t((p)[1]) << 8) | (uint32_t((p)[2]) << 16) | \ + (uint32_t((p)[3]) << 24)) == 0x00050f93u) #define MM_ISA_RET_STRIDE 4 #define MM_ISA_LOWER mm_riscv_backend::mm::moonlive::lowerToBytes // The assembler type itself, so the stack-budget check can measure the object the compile path diff --git a/test/unit/core/unit_moonlive_codegen_xtensa.cpp b/test/unit/core/unit_moonlive_codegen_xtensa.cpp index ec4d7cfc..d3f5dfdb 100644 --- a/test/unit/core/unit_moonlive_codegen_xtensa.cpp +++ b/test/unit/core/unit_moonlive_codegen_xtensa.cpp @@ -56,12 +56,20 @@ namespace mm { using namespace ::mm; using namespace ::mm::moonlive; // narrow form's 4-bit offset field could not reach and // silently wrapped to offset 0. One byte per sys-var read. #define MM_GOLD_FXLOOP_LEN 190u -#define MM_GOLD_FXLOOP_HASH 307181036u -#define MM_GOLD_FX_HASH 2796457628u +// The two hashes moved 2026-09-04 when kMaxLocals went 16 -> 32 (the first volumetric script needed +// 19 slots). A wider frame changes the prologue's reserve and every slot offset, so identical source +// emits different bytes: a frame-offset change is exactly what this hash exists to surface, and it +// did. The LENGTHS are unchanged, which is the evidence it is offsets rather than different code. +#define MM_GOLD_FXLOOP_HASH 1859543084u +#define MM_GOLD_FX_HASH 4201448700u // `mov.n a2, aN`: two bytes, {(dst << 4) | 0xd, src}. a2 is the windowed ABI's return register and // where R0 lives, so the first byte is 0x2d whatever the source. This backend emits BYTES in memory // order (not 24-bit words), so the pair is read as it sits. #define MM_ISA_RET_WRITES_RETREG(p) ((p)[0] == 0x2du) +// The caller-side stash: `s32i a10, a1, kResultSlot`. The callee returns in the CALLER's a10 +// (call8 rotates the window by 8), and the pool restore below is about to overwrite it, so it is +// parked in the frame first. Bytes: (10<<4)|2 = 0xa2, then 0x61, then the word offset 8. +#define MM_ISA_STASHES_RESULT(p) ((p)[0] == 0xa2u && (p)[1] == 0x61u && (p)[2] == 0x08u) #define MM_ISA_RET_STRIDE 1 #define MM_ISA_LOWER mm_xtensa_backend::mm::moonlive::lowerToBytes // The assembler type itself, so the stack-budget check can measure the object the compile path diff --git a/test/unit/core/unit_moonlive_compiler.cpp b/test/unit/core/unit_moonlive_compiler.cpp index d8ddca27..2e20a405 100644 --- a/test/unit/core/unit_moonlive_compiler.cpp +++ b/test/unit/core/unit_moonlive_compiler.cpp @@ -1800,3 +1800,89 @@ TEST_CASE("a fixed local reports its scaling where it is read") { kTable, kSys, out, sizeof(out)); CHECK_FALSE(r.ok); } + +// A script's own function can hand a value back, so a helper computes rather than only acts. The +// return machinery already existed at the HOST boundary (a function declares int or void, and the +// exit parks the value in the ABI register); what was missing was the call site taking it. +// +// What makes it harder than moving a register: the result has to survive the calls that FOLLOW it +// in the same expression. So a script call now preserves the whole vreg pool exactly as a builtin +// call does, and the callee's value is delivered into the destination vreg once that pool is back. +// Parking it in the frame's argument region instead was tried and rotated the enclosing call's +// arguments, since that region is still being filled as the expression parses. +TEST_CASE("a script function's return value can be used in an expression") { + moonlive::MoonLive eng; + REQUIRE(eng.compile( + "class T {\n" + " int answer() { return 21; }\n" + " void tick() { setRGB(0, answer(), answer() + 1, 0); }\n" + "}\n", kTable, kSys)); + std::vector buf(4 * 3, 0); + eng.run(buf.data(), 4, 3, 0, "tick"); + CHECK(buf[0] == 21); // what the helper returned + CHECK(buf[1] == 22); // and it is usable in arithmetic + eng.free(); +} + +TEST_CASE("a returned value survives the calls that follow it in the same expression") { + // The case that exposed both wrong designs: with the result in a register `a() + b()` read 6 + // (b's value twice), and with it in the argument region the arguments came out rotated. + moonlive::MoonLive eng; + REQUIRE(eng.compile( + "class T {\n" + " int a() { return 10; }\n" + " int b() { return 3; }\n" + " void tick() { setRGB(0, a() + b(), a(), b()); }\n" + "}\n", kTable, kSys)); + std::vector buf(4 * 3, 0); + eng.run(buf.data(), 4, 3, 0, "tick"); + CHECK(buf[0] == 13); + CHECK(buf[1] == 10); + CHECK(buf[2] == 3); + eng.free(); +} + +TEST_CASE("a helper's value can drive a loop and a member") { + // What the feature is for: a helper that computes, called where a number is needed. + moonlive::MoonLive eng; + REQUIRE(eng.compile( + "class T {\n" + " byte level = 4;\n" + " int scaled() { return level * 10; }\n" + " void tick() {\n" + " for (int i = 0; i < 2; i = i + 1) { setRGB(i, scaled(), scaled() + i, 0); }\n" + " }\n" + "}\n", kTable, kSys)); + std::vector buf(4 * 3, 0); + eng.run(buf.data(), 4, 3, 0, "tick"); + CHECK(buf[0] == 40); + CHECK(buf[1] == 40); + CHECK(buf[3] == 40); + CHECK(buf[4] == 41); + eng.free(); +} + +TEST_CASE("a void function cannot be used as a value") { + // Reading the return register of a function that never wrote it would hand the script whatever + // the last call left there: a plausible number, silently wrong. + moonlive::MoonLive eng; + CHECK_FALSE(eng.compile( + "class T {\n" + " void act() { }\n" + " void tick() { setRGB(0, act(), 0, 0); }\n" + "}\n", kTable, kSys)); + eng.free(); +} + +TEST_CASE("a returning function still works as a statement, with its value dropped") { + moonlive::MoonLive eng; + REQUIRE(eng.compile( + "class T {\n" + " int side() { return 7; }\n" + " void tick() { side(); setRGB(0, 1, 0, 0); }\n" + "}\n", kTable, kSys)); + std::vector buf(4 * 3, 0); + eng.run(buf.data(), 4, 3, 0, "tick"); + CHECK(buf[0] == 1); + eng.free(); +} diff --git a/test/unit/core/unit_moonlive_spill.cpp b/test/unit/core/unit_moonlive_spill.cpp index b60e719e..b0283ad1 100644 --- a/test/unit/core/unit_moonlive_spill.cpp +++ b/test/unit/core/unit_moonlive_spill.cpp @@ -1,6 +1,8 @@ // @module MoonLive #include "doctest.h" + +#include #include "moonlive_script_wrap.h" #include "core/moonlive/MoonLiveCompiler.h" #include "core/moonlive/MoonLiveSpill.h" @@ -86,6 +88,62 @@ TEST_CASE("a script renders identical pixels at a squeezed register budget as at CHECK(litCount(full) == 6); // and it actually did something } +// A returned value is a DEFINITION, and the allocator has to see it as one. +// +// The rewriter remaps every operand of every op it renumbers, but only remaps a `dst` for an op +// that declares it writes one. A value-returning call did not, so after a compaction the call still +// wrote its pre-compaction register while the consumer read the new one: `a() + b()` came out as +// whatever that register happened to hold. Invisible at the host's own budget, which takes the +// already-fits path and renumbers nothing, so this drives the SQUEEZED budget through the script's +// `tick` entry rather than the block start a plain renderAt would call. +TEST_CASE("a value returned by a script function survives a squeezed register budget") { + const char* src = + "class T {\n" + " int a() { return 40; }\n" + " int b() { return 5; }\n" + " void tick() {\n" + " int p = a() + b();\n" + " int q = a() + a();\n" + " int r = b() + b();\n" + " int s = p + q;\n" + " for (int i = 0; i < 3; i = i + 1) { setRGB(i, p, q, r + s - 90); }\n" + " }\n" + "}\n"; + + auto renderTick = [&](const moonlive::RegBudget* budget) { + uint8_t code[moonlive::kCodeCap]; + auto r = moonlive::compileSource(src, kT, kSys, code, sizeof(code), budget); + REQUIRE(r.ok); + // Enter at `tick`, not at the block start: a multi-function script begins with its helpers, + // and calling the block start would run `a()` as the program. + uint16_t tickOffset = 0xFFFF; + for (uint8_t i = 0; i < r.entryCount; i++) + if (std::strncmp(r.entries[i].name, "tick", r.entries[i].nameLen) == 0) tickOffset = r.entries[i].offset; + REQUIRE(tickOffset != 0xFFFF); + + std::vector buf(4 * 3, 0); + void* blk = platform::allocExec(r.len); + REQUIRE(blk != nullptr); + platform::writeExec(blk, code, r.len); + uint8_t arena[moonlive::kArenaBytes] = {}; + for (uint8_t i = 0; i < r.memberCount; i++) arena[r.members[i].offset] = r.members[i].def; + reinterpret_cast(static_cast(blk) + tickOffset)(buf.data(), 4, 3, 0, arena); + platform::freeExec(blk, r.len); + return buf; + }; + + const auto tightBudget = squeezed(11, 1); + const auto full = renderTick(nullptr); + const auto tight = renderTick(&tightBudget); + + CHECK(full == tight); + for (int i = 0; i < 3; i++) { + CHECK(tight[i * 3 + 0] == 45); // a() + b() + CHECK(tight[i * 3 + 1] == 80); // a() + a() + CHECK(tight[i * 3 + 2] == 45); // (b()+b()) + (p+q) - 90 + } +} + // The back-edge case. Naive first-def-to-last-use intervals look dead early in a loop body, so the // allocator would hand a counter's register away and the next iteration would read someone else's // value — placing lights twice, or not at all. Nested, so the extension has to apply innermost-first. diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index b591af9c..c729211d 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -58,6 +58,7 @@ #include "light/effects/MetaballsEffect.h" #include "light/effects/NoiseEffect.h" #include "light/effects/PlasmaEffect.h" +#include "light/effects/FireEffect.h" #include "light/effects/RainbowEffect.h" #include "light/effects/AuroraEffect.h" #include "light/effects/RingsEffect.h" @@ -109,6 +110,7 @@ using namespace mm; TEST_CASE("time-driven effects render byte-identical frames (migration guard)") { SUBCASE("two SDF shapes orbit and melt together, with a soft edge") { SdfShapesEffect e; golden::checkGolden("SdfShapesEffect", golden::renderHash(e, 16, 16, 1), 0xbcfb74b4836606a3ull); } SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x8d48e0d1e0180610ull); } + SUBCASE("heat rises, cools and colors through the palette") { FireEffect e; golden::checkGolden("FireEffect", golden::renderHash(e, 16, 16, 1), 0x1cadbabb59bc489bull); } SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } diff --git a/test/unit/light/unit_NoiseEffect.cpp b/test/unit/light/unit_NoiseEffect.cpp index 8cb1a2b8..1df8762c 100644 --- a/test/unit/light/unit_NoiseEffect.cpp +++ b/test/unit/light/unit_NoiseEffect.cpp @@ -108,3 +108,16 @@ TEST_CASE("Noise survives a degenerate grid rather than faulting") { const auto f = render(0, 0, 1, 0, 3); CHECK(f.empty()); } + +TEST_CASE("morph shows the same field in every slice, because time is its third axis") { + // The two motions divide the one spare axis between them: drift spends it on depth, morph on + // time. So a volumetric fixture under morph is the same field repeated, which is what the + // catalog card promises. The code briefly added a depth term here as well, which made morph a + // second drift and left the documentation wrong rather than the behavior. + const auto f = render(8, 8, 4, 1, 40); + const std::size_t slice = 8 * 8 * 3; + REQUIRE(f.size() >= slice * 4); + for (std::size_t s = 1; s < 4; s++) + for (std::size_t i = 0; i < slice; i++) + REQUIRE(f[i] == f[slice * s + i]); +} diff --git a/test/unit/light/unit_PolarLut_equivalence.cpp b/test/unit/light/unit_PolarLut_equivalence.cpp index 59a2f04e..79ddf583 100644 --- a/test/unit/light/unit_PolarLut_equivalence.cpp +++ b/test/unit/light/unit_PolarLut_equivalence.cpp @@ -7,6 +7,7 @@ // compared pixel by pixel. This is the evidence behind the re-baselined golden. #include "doctest.h" +#include "light/effects/AuroraEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" #include "light/effects/TunnelEffect.h" @@ -25,7 +26,8 @@ namespace { /// Render one effect for `frames` and return the final buffer. `EffectT` is any effect carrying the /// polar-table controls, so the same comparison covers every effect that reads the address. template -std::vector render(lengthType w, lengthType h, bool useTable, bool wide = false, uint16_t frames = 60) { +std::vector render(lengthType w, lengthType h, bool useTable, bool wide = false, + uint16_t frames = 60, lengthType d = 1, uint8_t mapping = 0) { platform::setTestNowMs(1000); Layouts layouts; GridLayout grid; @@ -33,7 +35,8 @@ std::vector render(lengthType w, lengthType h, bool useTable, bool wide EffectT effect; effect.polar.use = useTable; effect.polar.wide = wide; - grid.width = w; grid.height = h; grid.depth = 1; + effect.polar.mapping = mapping; + grid.width = w; grid.height = h; grid.depth = d; layouts.addChild(&grid); layer.setLayouts(&layouts); layer.setChannelsPerLight(3); @@ -100,3 +103,15 @@ TEST_CASE("an effect still renders when the polar table cannot be built") { for (uint8_t v : exact) lit += v > 0 ? 1 : 0; CHECK(lit > exact.size() / 4); } + +TEST_CASE("the computed fallback keeps the mapping the table would have used") { + // A device too tight for the table must show the SAME composition, not a different one. The + // fallback computed cylindrical unconditionally at first, so a fixture set to spherical or + // radial silently reverted the moment memory ran short: still rendering, quietly wrong. + for (uint8_t mapping = 0; mapping < 3; mapping++) { + const auto tabled = render(8, 8, true, /*wide=*/true, 40, 5, mapping); + const auto exact = render(8, 8, false, /*wide=*/false, 40, 5, mapping); + const Diff d = compare(tabled, exact, 0); + CHECK(d.worst == 0); + } +} From 3d3d48a5917a225faed9b763834c60d52c91290b Mon Sep 17 00:00:00 2001 From: ewowi Date: Fri, 4 Sep 2026 22:06:06 +0200 Subject: [PATCH 4/7] Carry light on a flow: advection, decay and the Trails effect Dots thrown into a moving medium leave tails the flow carries and bends. The tail is not drawn: it is the previous frames' dots, transported along a velocity field and dimmed by a half-life, which is why the shape of the flow is visible in it. Volumetric, and scriptable: trails.mle drives the same kernels. Performance: desktop 17 ns/light for the transport, so a 20-cube advects in 0.14 ms; ESP32-S3 measured on a 15-cube at 45.3 ms with curl (22 fps) and 20.2 ms with plain noise (49 fps). The flow rule's noise sampling is the whole cost: the 2.2x between them is exactly its 4-versus-2 samples per light. **Core** - `mm::halfLifeKeep(dt, halfLife)`: the fraction of a value that survives, from a 33-entry pow2 table, worst error 0.012% against exact. Framerate independence becomes a property of the formula rather than of each caller's arithmetic. - `curl16`: the perpendicular gradient of a noise potential, divergence-free by construction (Bridson 2007). Measured 340x less divergence than sampling noise straight into a velocity, which is what stops a flow clumping what it carries. **Light domain** - `draw::advect` and `advect16`: backward bilinear transport (Stam 1999), so every destination is written exactly once. `sampleClamp` and `sampleEdge` complete `sampleWrap`'s edge rules, since a wind must not loop the panel. - `draw::decay` and `decay16`, `disc`, `sphere`, and the `flowWind`, `flowRadial`, `flowSpiral` velocity rules. - `TrailsEffect`, D3, and the trail plane it owns is 16-BIT. That is not gold-plating: a byte plane multiplied by slightly less than one hundreds of times a second either truncates the tail away (0 instead of 100 at 1 ms frames) or, if rounded, never fades at all (200 instead of 100, the trail frozen solid). Both measured; the table is in `draw::decay`. - Three effects lost the wrong spelling of `blobCenters` along the way. **UI** - The 3D preview's off-LED placeholders no longer write depth. They are decoration, not geometry: an unlit LED holding the depth buffer HIDES every lit LED behind it whatever its alpha, which is what made a cube a solid grey wall at large dot sizes. Their alpha is also solved from the fixture's depth now, so the stacked haze is a quarter at any depth rather than 99%. **MoonLive** - `trail`, `flowNoise`, `flowCurl`, `trailDecay`, `emitTrail`, and `trails.mle`. Each flow call advects the whole plane once: a per-pixel script loop would cross the boundary 8000 times a frame on a cube. - The builtin table was at 61 of 64 and fails SILENTLY when full, so it is 96 now (measured: 32 bytes a slot, 1 KB) with a test that fails rather than prints. - `trailDecay`, not `decay`: a builtin name is reserved for every script, and taking `decay` stopped pulse.mle and beat-flash.mlp compiling, since both declare a member of that name. A test now pins the names scripts declare. - The register allocator's `writesDst` reads `CallScript`'s value flag, so a value-returning call is seen as defining its destination. **Tests** - decay's framerate independence, advect's transport and edge rules, disc and sphere coverage, the velocity rules, curl's divergence, the builtin-table capacity and the name-collision rule. A golden and a catalog card for Trails, and a scenario ladder at four sizes: the cost is linear in lights (8000-light cube 323 us against the 4096-light panel's 164), and persistence and dots are both measurably free. **Docs** - CLAUDE.md: never say "it is not mine" for a spelling or an em-dash, just fix it, scoped to files the change already touches. The plan records the phase 3 decisions: 3D by default (measured at 1% cost in 2D), and the PPA is for `upscale`, not advection, since it transforms a rectangle by one transform while advection displaces every pixel by its own velocity. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 4 + .../generative-fields-analysis-top-down.md | 40 +- docs/moonmodules/light/effects.md | 576 +++++++++--------- moonlive/effects/trails.mle | 50 ++ src/core/math16.h | 99 ++- src/core/moonlive/MoonLiveBuiltins.h | 55 +- src/core/noise.h | 33 + src/light/draw.h | 403 +++++++++--- src/light/effects/LavaLampEffect.h | 2 +- src/light/effects/MetaballsEffect.h | 2 +- src/light/effects/TrailsEffect.h | 204 +++++++ src/light/moonlive/MoonLiveBuiltins_light.h | 217 ++++++- src/light/moonlive/MoonLiveEffect.h | 84 ++- src/light/moonlive/MoonLiveScript.h | 18 +- src/light/moonlive/script_catalog.h | 7 +- src/main.cpp | 2 + src/ui/preview3d.js | 26 +- test/scenario_runner.cpp | 2 + test/scenarios/light/scenario_Aurora_fps.json | 38 +- .../light/scenario_Fields_polar_lut.json | 52 +- .../light/scenario_Trails_ladder.json | 323 ++++++++++ test/unit/core/unit_math16.cpp | 46 ++ .../core/unit_moonlive_codegen_x86_64.cpp | 10 +- test/unit/core/unit_moonlive_compiler.cpp | 35 ++ test/unit/core/unit_noise.cpp | 36 ++ test/unit/light/unit_Effects_golden.cpp | 2 + test/unit/light/unit_NoiseEffect.cpp | 6 +- test/unit/light/unit_PolarLut_equivalence.cpp | 6 +- test/unit/light/unit_draw.cpp | 230 ++++++- 29 files changed, 2094 insertions(+), 514 deletions(-) create mode 100644 moonlive/effects/trails.mle create mode 100644 src/light/effects/TrailsEffect.h create mode 100644 test/scenarios/light/scenario_Trails_ladder.json diff --git a/CLAUDE.md b/CLAUDE.md index b7f3b2b4..9d644695 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,6 +16,10 @@ A high-performance system driving large LED installations and DMX fixtures. One 5. **The whole repo, continuously.** We are responsible for every line in the repository, not only the lines changed today. Anything spotted in passing is ours: a British spelling, a stale comment, a doc describing what the code no longer does, a duplicated block, a test pinning the wrong contract. Fix it in the change that found it, or backlog it by name; walking past a defect you have read is what lets debt accumulate. "Pre-existing", "out of scope" and "not mine" say nothing about whether the code is right, and the next reader meets it unchanged. The one thing provenance IS good for is scope: work belonging to another branch is backlogged rather than smuggled into this one. (Applied to review findings in [§ Handling review findings](#commit).) + **Never say "it is not mine".** For anything a check can find and a one-line edit can fix, an em-dash, a British spelling, a typo, JUST FIX IT, in the same edit that found it. Do not report it, do not ask, do not explain whose line it was: saying it costs more of the product owner's time than fixing it. Provenance is worth a sentence only when the fix is large enough to need its own decision. + + **Scope: the files this change is already editing, not the repo.** "In passing" means a file already open for another reason. A repo-wide sweep for the same defect is its own change with its own review, and folding one into a feature branch buries the feature in noise. A blanket find-and-replace is also how a symbol gets renamed by accident: a spelling fix once rewrote an API name inside `draw.h` and broke two effects that called it, because the word was part of an identifier rather than prose. Read what an edit touches before making it. + 6. **Robustness.** Unbreakable in use: any input, any order, any size. Degrade visibly, never crash, and every discovered crash becomes a test. Every setting applies live; no reboot to apply configuration ([architecture.md § Live reconfiguration](docs/architecture.md#live-reconfiguration-every-change-applies-without-a-reboot)). Out of scope: power loss, brown-out, corrupted updates. ## The Process diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md index 625f75dd..78365213 100644 --- a/docs/backlog/generative-fields-analysis-top-down.md +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -146,15 +146,30 @@ A velocity rule is a function `(x, y, t, params) → (vx, vy)` in `pos_t` per fr ### 3.5 `advect` (`draw.h`) ```cpp -draw::advect(cv, scratch, rule, dtMs, Edge::Wrap|Clamp); // full 2D: backward sample, bilinear, per channel +draw::advect(dst, src, rule, Edge::Wrap|Clamp); // backward sample, bilinear, per channel draw::advectSeparable(cv, scratch, xProf, yProf, Edge); // two 1D passes through the scratch plane ``` +**Shipped (2026-09-04), with the 3D cost measured.** The signature took `dst, src` rather than +`cv, scratch` and dropped `dtMs`: the two planes must differ (reading and writing one buffer samples +pixels the same pass already moved, smearing along the walk order instead of the flow), and the rule +returns sub-pixel units per frame, so only the caller knows the cadence to scale by. `sampleWrap` +already existed and covered the Wrap half; `sampleClamp` and `sampleEdge` are new, and Clamp is what +a wind wants, since a trail leaving the panel must not reappear on the far side. + +**The PO's prerequisite, that 3D awareness must not cost the 2D path, holds: 1%.** Desktop, median +of 11, every destination byte verified written: a 20x20 panel is 16.98 ns/light, the 20x20x20 cube +17.09. The z loop runs once at depth 1, so a panel pays a loop counter. In absolute terms the cube +advects in **0.14 ms**, under 1% of a 20 ms frame, so transport is cheap and the flow rules' +noise sampling is what will set the cost. + The semi-Lagrangian step (Stam 1999): for each destination pixel, `src = dst − v · dt`, read the previous frame at `src` with bilinear interpolation (four loads, three lerps per channel), write to `scratch`, swap. On the 16-bit Layer the color state is the Layer itself; `scratch` is one effect-owned plane of the same width. Partial transport (`blend` fraction) is a parameter. Budget: ~40 cycles per pixel per channel per pass on the S3 (the field's 80% share is what this is measured against). ### 3.6 `decay` (`draw.h`) -`draw::decay(cv, halfLifeMs, dtMs)`: multiply every sample by `k = 0.5^(dt / t½)`, `k` computed once per frame from a 16-bit `pow2` table. Framerate-independent by definition; a unit test pins `decay(2·dt) == decay(dt)²` within one LSB. The Layer's collected `fadeToBlackBy` remains the one 8-bit-per-frame decay for effects that want it; `decay` is the half-life form on wide state. +`draw::decay(cv, halfLifeMs, dtMs)`: multiply every sample by `k = 0.5^(dt / t½)`, `k` computed once per frame from a 16-bit `pow2` table (`mm::halfLifeKeep`). Framerate-independent by definition; a unit test pins `decay(2·dt) == decay(dt)²` within one LSB. + +**Shipped, with a measured limit (2026-09-04): an 8-BIT plane cannot hold this decay at a high framerate, and no rounding rule fixes it.** Decaying 200 over a 500 ms half-life in 500 ms of frames, exact answer 100: truncating gives 96 at 50 ms frames, 73 at 5 ms and **0** at 1 ms; rounding gives 100, 100 and **200**, the trail frozen solid. Both are the QUANTIZATION rather than the weight, the value being re-rounded to a byte hundreds of times a second. A 16-bit accumulator holds 100/101/102. So `decay` on a byte canvas is honest at a slow cadence and `decay16` on a wide scratch plane is what a trail uses: the precision belongs in the ACCUMULATOR, not the frame buffer, which is the same conclusion phase 2 reached from the other side. The Layer's collected `fadeToBlackBy` remains the one 8-bit-per-frame decay for effects that want it; `decay` is the half-life form on wide state. ### 3.7 `lineAA`, `disc` (`draw.h`) @@ -411,6 +426,19 @@ The original phase plan follows, kept as the record of what was built and measur 10. Docs: architecture.md § Buffer types, memory strategy, the leddriver mode-3 note closed, MIGRATING.md if any API a script or driver sees changed. ### Phase 3: advection and Trails (medium) + +**Volumetric from the start (PO, 2026-09-04).** TrailsEffect is `Dim::D3`, as Aurora is: the bench +S3 is a 20x20x20 cube, so a flat trail would be the thing on the wall. Per function: `decay` and +`decay16` are already dimension-blind (they walk the buffer flat); `advect` needs a TRILINEAR +sampler for 3D, since `sampleWrap` takes `pos_t x, y` with a whole-pixel z, which is 8 corner reads +instead of 4 plus a `vz` from the rule; `flowWind`, `flowRadial`, `flowSpiral` and `curl16` all have +3D forms (3D curl is a cross product of gradients, not one perpendicular) while `flowRings` stays +planar; `disc` becomes a sphere through `sdSphere`. The effect is written 3D-aware from the start +because `dimensions()` and the plane sizing are decided once, but `advect` ships 2D first and gains +the trilinear path in step 4, so step 3 still reaches the wall early. **Memory is the constraint a +volumetric trail meets first**: a 16-bit RGB plane is 48 KB on a 20-cube and 1.5 MB on a 64-cube +(PSRAM only), against 24 KB for a 64x64 panel. + 1. `advect` (2D and separable), the velocity rules, `curl16`, `decay`, `lineAA`, `disc`, with their unit tests. 2. `TrailsEffect`: emitters, flows, the bank for breathing, scratch plane in `ScratchBuffer`, card, golden. 3. MoonLive: the flow, advect, decay and emitter builtins; `trails.mle`; script golden. @@ -422,6 +450,14 @@ The original phase plan follows, kept as the record of what was built and measur 2. `fieldScale` and `fieldRate` as shared mechanisms (`draw::upscale`, a frame-skip helper on the bank's clock). 3. `NebulaEffect` and `nebula.mle`; card, golden, scenario contract. 4. The PIE variants of the noise inner loop and the bilinear lerp for S3 and P4 behind `src/platform/`, bit-identical tests against the scalar forms; the FPU `curl16` where `hasFpu`. + - **The P4's PPA is for `upscale`, not for advection (2026-09-04).** The Pixel Processing + Accelerator is a 2D-DMA blitter: it transforms a whole rectangle by ONE affine transform + (scale, rotate, translate, blend) with no CPU in the loop. Advection displaces every pixel by + its OWN velocity, so the interesting rules (`flowNoise`, `curl16`) do not map onto it at all, + and the ones that would (a rigid scroll, `flowRadial`) are the cheap cases anyway. Where it + does fit is `fieldScale`'s bilinear `draw::upscale` above, which is exactly a scaled blit, and + the sprite blit already backlogged under [Sprite follow-ups](backlog-light.md). Both are P4 + only, so PPA can be an acceleration behind an existing signature, never the main path. 5. KPI per target; the product owner's look on the wall. ### Phase 5: fluid (medium; P4 and desktop) diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index 73096f62..bae24696 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -1,8 +1,8 @@ # Effects -Every effect, one block each: its preview, what it does, and what each control means — together. An effect writes per-pixel color into its [Layer](moxygen/Layer.md)'s buffer each tick; [modifiers](modifiers.md) reshape the result and a [driver](moxygen/PreviewDriver.md) sends it out. Effects that name an index color read the global palette (the `palette` control on [Drivers](moxygen/Drivers.md)) via `colorFromPalette`. Each block's emoji are its `tags()` (origin/creator/audio — see the [tag emoji legend](../../architecture.md#tag-emoji-legend)); **Dim** is its native axes ([Layer](moxygen/Layer.md) extrudes a lower-dim effect onto a bigger grid). Effects are grouped into sections by origin, and each block carries that effect's preview, behaviour, and control descriptions together. (For how this page maps to the source/asset folders, see the [folder-structure decision](../../adr/0015-library-is-a-tag-not-a-folder.md).) +Every effect, one block each: its preview, what it does, and what each control means: together. An effect writes per-pixel color into its [Layer](moxygen/Layer.md)'s buffer each tick; [modifiers](modifiers.md) reshape the result and a [driver](moxygen/PreviewDriver.md) sends it out. Effects that name an index color read the global palette (the `palette` control on [Drivers](moxygen/Drivers.md)) via `colorFromPalette`. Each block's emoji are its `tags()` (origin/creator/audio: see the [tag emoji legend](../../architecture.md#tag-emoji-legend)); **Dim** is its native axes ([Layer](moxygen/Layer.md) extrudes a lower-dim effect onto a bigger grid). Effects are grouped into sections by origin, and each block carries that effect's preview, behavior, and control descriptions together. (For how this page maps to the source/asset folders, see the [folder-structure decision](../../adr/0015-library-is-a-tag-not-a-folder.md).) -Effects are built from the shared [power functions](power-functions.md) — the drawing, field and motion routines every effect composes; that page lists each one with its callers. +Effects are built from the shared [power functions](power-functions.md): the drawing, field and motion routines every effect composes; that page lists each one with its callers. **Jump to:** [MoonLight](#moonlight-effects) · [MoonModules](#moonmodules-effects) · [WLED](#wled-effects) · [FastLED](#fastled-effects) · [projectMM-native](#projectmm-native-effects) @@ -16,8 +16,8 @@ Effects are built from the shared [power functions](power-functions.md) — the Two interfering sine waves beat against each other into a moiré color field. -- `freq_x` / `freq_y` — horizontal/vertical wave frequency (1–8). -- `speed` — animation rate (0 = frozen). +- `freq_x` / `freq_y`: horizontal/vertical wave frequency (1–8). +- `speed`: animation rate (0 = frozen). Origin: WLED · by ldirko & blazoncek (WLED port) · [gallery](https://editor.soulmatelights.com/gallery/1089-distorsion-waves) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -31,10 +31,10 @@ Detail: [technical](moxygen/DistortionWavesEffect.md) A solid color filling a positioned box within the grid, with an optional alternating-white checker on the box's pixels. -- `red` / `green` / `blue` / `white` — the box color. -- `X position` / `Y position` / `Z position` — the box's origin corner. -- `Rectangle width` / `Rectangle height` / `Rectangle depth` — the box extent on each axis. -- `alternateWhite` — alternate box pixels to white in a checker pattern. +- `red` / `green` / `blue` / `white`: the box color. +- `X position` / `Y position` / `Z position`: the box's origin corner. +- `Rectangle width` / `Rectangle height` / `Rectangle depth`: the box extent on each axis. +- `alternateWhite`: alternate box pixels to white in a checker pattern. Origin: MoonLight · by [limpkin](https://github.com/limpkin) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -48,13 +48,13 @@ Detail: [technical](moxygen/FixedRectangleEffect.md) Audio-reactive sawtooth waves: each column maps to a frequency band whose magnitude drives a per-band oscillator speed, so louder bands sweep their sawtooth up the column faster, with three phase methods. -- `fade` — background decay per frame. -- `increaser` — how fast a band's speed ramps up with its magnitude. -- `decreaser` — how fast a silent band's speed decays. -- `bpmMax` — ceiling on a band's oscillation speed. -- `invert` — flip alternate columns vertically. -- `keepOn` — keep oscillating even when a band is silent. -- `method` — phase model (`Chaos`, `Chaos fix`, `BandPhases`). +- `fade`: background decay per frame. +- `increaser`: how fast a band's speed ramps up with its magnitude. +- `decreaser`: how fast a silent band's speed decays. +- `bpmMax`: ceiling on a band's oscillation speed. +- `invert`: flip alternate columns vertically. +- `keepOn`: keep oscillating even when a band is silent. +- `method`: phase model (`Chaos`, `Chaos fix`, `BandPhases`). Origin: MoonLight (audio) · by [@TroyHacks](https://github.com/troyhacks) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -68,11 +68,11 @@ Detail: [technical](moxygen/FreqSawsEffect.md) LavaLamp effect preview -Three slow blobs through a black→red→orange→yellow→white ramp — atmospheric lava look. +Three slow blobs through a black→red→orange→yellow→white ramp: atmospheric lava look. -- `bpm` — blob drift speed. -- `radius` — blob influence radius. -- `intensity` — field gain into the black→red→orange→yellow→white ramp. +- `bpm`: blob drift speed. +- `radius`: blob influence radius. +- `intensity`: field gain into the black→red→orange→yellow→white ramp. Origin: projectMM original (metaball lava lamp) @@ -82,14 +82,14 @@ Detail: [technical](moxygen/LavaLampEffect.md) -### Lines 💫 · — +### Lines 💫 · , Lines effect preview -Sweeps axis-aligned planes in sync; red/green/blue name the X/Y/Z axis — a preview-orientation test pattern. +Sweeps axis-aligned planes in sync; red/green/blue name the X/Y/Z axis: a preview-orientation test pattern. -- `speed` — sweep BPM. -- `axis` — which plane sweeps (`all`, `x (red)`, `y (green)`, `z (blue)`). +- `speed`: sweep BPM. +- `axis`: which plane sweeps (`all`, `x (red)`, `y (green)`, `z (blue)`). Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -101,12 +101,12 @@ Detail: [technical](moxygen/LinesEffect.md) Metaballs effect preview -`count` blobs orbit via integer sin/cos; metaball field per pixel — bright HSV merge/split. +`count` blobs orbit via integer sin/cos; metaball field per pixel: bright HSV merge/split. -- `bpm` — orbit speed. -- `radius` — blob influence radius. -- `count` — number of orbiting balls (1–8). -- `hue_shift` — rotate the palette index. +- `bpm`: orbit speed. +- `radius`: blob influence radius. +- `count`: number of orbiting balls (1–8). +- `hue_shift`: rotate the palette index. Origin: projectMM original (metaballs) @@ -122,10 +122,10 @@ Detail: [technical](moxygen/MetaballsEffect.md) A swarm of drifting particles with persistent fading trails. -- `count` — number of particles (1–255). -- `speed` — drift velocity. -- `fade` — trail persistence (higher = longer tails). -- `hue_shift` — rotate every particle's hue. +- `count`: number of particles (1–255). +- `speed`: drift velocity. +- `fade`: trail persistence (higher = longer tails). +- `hue_shift`: rotate every particle's hue. Origin: MoonLight · by WildCats08 / [@Brandon502](https://github.com/Brandon502) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -141,9 +141,9 @@ Detail: [technical](moxygen/ParticlesEffect.md) Summed sine waves on orthogonal + diagonal axes; large rolling blobs (3D on volumetric layouts). -- `bpm` — roll speed. -- `scale_x` / `scale_y` — blob size on each axis (larger = bigger, calmer blobs, lower spatial frequency). -- `hue_shift` — rotate the palette index. +- `bpm`: roll speed. +- `scale_x` / `scale_y`: blob size on each axis (larger = bigger, calmer blobs, lower spatial frequency). +- `hue_shift`: rotate the palette index. Origin: FastLED / WLED lineage (classic plasma) @@ -157,8 +157,8 @@ Detail: [technical](moxygen/PlasmaEffect.md) An algorithmic palette pattern driven by two beat oscillators (a macro and a micro mutator) whose frequencies and ranges reshape the hue field over time. -- `macroMutatorFreq` / `macroMutatorMin` / `macroMutatorMax` — the coarse mutator's beat frequency and its oscillation range. -- `microMutatorFreq` / `microMutatorMin` / `microMutatorMax` — the fine mutator's beat frequency and range. +- `macroMutatorFreq` / `macroMutatorMin` / `macroMutatorMax`: the coarse mutator's beat frequency and its oscillation range. +- `microMutatorFreq` / `microMutatorMin` / `microMutatorMax`: the fine mutator's beat frequency and range. Origin: MoonLight · by MONSOONO / @Flavourdynamics · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -172,9 +172,9 @@ Detail: [technical](moxygen/PraxisEffect.md) Rainbow effect preview -Diagonal animated rainbow — always-visible default/test effect. +Diagonal animated rainbow: always-visible default/test effect. -- `speed` — animation BPM (one full hue cycle per beat). +- `speed`: animation BPM (one full hue cycle per beat). Origin: FastLED · Mark Kriegsman (rainbow) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_FastLED.h) @@ -186,9 +186,9 @@ Detail: [technical](moxygen/RainbowEffect.md) ### Random 💫 · 3D -Lights one random light per frame in a random palette color over a fading background — a sparse, palette-tinted sparkle. +Lights one random light per frame in a random palette color over a fading background: a sparse, palette-tinted sparkle. -- `fade` — how fast prior sparkles fade to black. +- `fade`: how fast prior sparkles fade to black. Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -204,10 +204,10 @@ Detail: [technical](moxygen/RandomEffect.md) Expanding concentric rings from random centers, additive overlap (calm defaults). -- `count` — number of concentric rings (1–255). -- `speed` — expansion rate. -- `thickness` — ring band width. -- `hue_shift` — rotate every ring's hue. +- `count`: number of concentric rings (1–255). +- `speed`: expansion rate. +- `thickness`: ring band width. +- `hue_shift`: rotate every ring's hue. Origin: projectMM original (concentric rings) @@ -223,8 +223,8 @@ Detail: [technical](moxygen/RingsEffect.md) Distance-from-center sets a per-column wave phase; the lit surface ripples like water. -- `speed` — wave animation rate (0 = frozen, 99 = fast). -- `interval` — wavefront spacing (low = tight rings, high = wide). +- `speed`: wave animation rate (0 = frozen, 99 = fast). +- `interval`: wavefront spacing (low = tight rings, high = wide). Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -238,10 +238,10 @@ Detail: [technical](moxygen/RipplesEffect.md) A 3D Rubik's Cube projected onto the volume: it scrambles, then plays its solution back one turn at a time, the six faces in their standard colors. -- `turnsPerSecond` — how fast the cube turns. -- `cubeSize` — the cube order (2×2 up to 8×8). -- `randomTurning` — turn endlessly at random instead of scramble-then-solve. -- `usePalette` — color the six faces from the system-wide palette instead of the classic Rubik's colors. +- `turnsPerSecond`: how fast the cube turns. +- `cubeSize`: the cube order (2×2 up to 8×8). +- `randomTurning`: turn endlessly at random instead of scramble-then-solve. +- `usePalette`: color the six faces from the system-wide palette instead of the classic Rubik's colors. Origin: MoonLight · by WildCats08 / [@Brandon502](https://github.com/Brandon502) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -253,15 +253,15 @@ Detail: [technical](moxygen/RubiksCubeEffect.md) ### Fireworks 🔬 · 2D -Shells rise, stall, and burst into sparks that arc over and fall. Every stage is a particle-kernel call: spawn, gravity, angleEmit, drag, age. Nothing schedules the apex — the shell decelerates under gravity and bursts when its vertical velocity crosses zero, so a faster launch bursts higher without a second control. +Shells rise, stall, and burst into sparks that arc over and fall. Every stage is a particle-kernel call: spawn, gravity, angleEmit, drag, age. Nothing schedules the apex: the shell decelerates under gravity and bursts when its vertical velocity crosses zero, so a faster launch bursts higher without a second control. -- `launchRate` — how often a new shell goes up. -- `launchSpeed` — how hard it is thrown, and so how high it bursts. -- `gravity` — how fast everything falls, per 60 Hz of simulated time. -- `sparks` — sparks per burst. -- `sparkLife` — how long a spark survives. -- `drag` — air resistance flattening the arc. -- `fade` — trail length (the Layer's decay, not the pool's). +- `launchRate`: how often a new shell goes up. +- `launchSpeed`: how hard it is thrown, and so how high it bursts. +- `gravity`: how fast everything falls, per 60 Hz of simulated time. +- `sparks`: sparks per burst. +- `sparkLife`: how long a spark survives. +- `drag`: air resistance flattening the arc. +- `fade`: trail length (the Layer's decay, not the pool's). Physics is driven by elapsed time, not frame count, so the same settings behave identically on a desktop at thousands of fps and an ESP32 at a few hundred ([architecture § tick rate](../../architecture.md#effects)). @@ -273,12 +273,12 @@ Origin: projectMM original, on the WLED Particle System's firework family by Dam An aquarium on a light wall: fish of three shapes swim across a dark tank, each in its own color from the active palette, tails beating. Movement is a particle-pool entry per fish with constant velocity, respawning at the far edge when it swims off; the shape is drawn through the `draw::sprite` power function. Unlike the other sprite effects, the art carries shade ROLES (body, outline, highlight, fin, eye, band) rather than fixed colors, and each fish fills them from its own place on the palette, so one drawing yields as many colorways as there are fish. -- `fish` — how many broad tropical fish (0-8). -- `slim` — how many slender fish (0-8). -- `school` — how many tiny schooling fish (0-8). -- `speed` — swim rate in body-lengths, so motion reads the same on any grid; each fish varies around it, and the smaller shapes drift slower, which reads as depth. -- `spriteSize` — integer magnification (crisp nearest-neighbor); 0 = auto, scaling with the grid so a fish reads as a fish on a 16x16 matrix and on a 768-wide desktop grid alike. -- `soundReactive` — move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. +- `fish`: how many broad tropical fish (0-8). +- `slim`: how many slender fish (0-8). +- `school`: how many tiny schooling fish (0-8). +- `speed`: swim rate in body-lengths, so motion reads the same on any grid; each fish varies around it, and the smaller shapes drift slower, which reads as depth. +- `spriteSize`: integer magnification (crisp nearest-neighbor); 0 = auto, scaling with the grid so a fish reads as a fish on a 16x16 matrix and on a 768-wide desktop grid alike. +- `soundReactive`: move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. Uses the global palette: every fish takes a body color from it, with its band a paler version of that same color rather than a second pick, which would read as two fish fused together. @@ -290,15 +290,15 @@ Origin: projectMM original; inspired by the aquarium screensavers of the After D The classic screensaver on a light wall: chrome toasters with flapping wings and slices of toast drift diagonally across the dark, forever. Each flier is a particle-pool entry with constant velocity (respawning off the upper-right when it leaves the lower-left), rendered through the `draw::sprite` power function; the wing flap runs on a shared BeatPhase with a per-toaster offset so the flock never syncs. -- `toasters` — how many fly (1–12). -- `toast` — how many slices trail along (0–8). -- `speed` — drift rate in sprite-widths, so flight reads the same on any grid; each flier varies ±25% around it. -- `spriteSize` — integer magnification for toasters AND toast (crisp nearest-neighbor); 0 = auto, scaling with the grid so a toaster reads as a toaster on a big wall. -- `soundReactive` — move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. +- `toasters`: how many fly (1–12). +- `toast`: how many slices trail along (0–8). +- `speed`: drift rate in sprite-widths, so flight reads the same on any grid; each flier varies ±25% around it. +- `spriteSize`: integer magnification for toasters AND toast (crisp nearest-neighbor); 0 = auto, scaling with the grid so a toaster reads as a toaster on a big wall. +- `soundReactive`: move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. The sprites carry their own colors (chrome, wing, crust), so the global palette does not apply. Needs a grid at least the toaster's size (12×9). -Origin: projectMM original; inspired by After Dark's Flying Toasters (Berkeley Systems, 1989), suggested by Frank ([softhack007](https://github.com/softhack007)) — the pixel art here is drawn fresh for this effect +Origin: projectMM original; inspired by After Dark's Flying Toasters (Berkeley Systems, 1989), suggested by Frank ([softhack007](https://github.com/softhack007)): the pixel art here is drawn fresh for this effect @@ -313,18 +313,18 @@ The first effect that AIMS a fixture rather than only coloring it. It writes pan the role setters, which do nothing on a light that carries no such channel, so the same effect on an LED strip paints the color pattern and moves nothing. -- `formation` — how the heads relate: - - **fan** — neighbours differ by a fraction of the sweep, so the beams open and close like a hand. - - **mirror** — the halves face each other; the classic look, best on an even-numbered rig. - - **chase** — a wave travelling down the row, the same sweep delayed head by head. - - **cross** — alternate heads oppose, a tight scissoring that looks fast at a low BPM. - - **unison** — every head as one, the reference the others read against. -- `panBpm` / `tiltBpm` — sweep rates (60 = one sweep a second). Different rates are what turn two +- `formation`: how the heads relate: + - **fan**: neighbors differ by a fraction of the sweep, so the beams open and close like a hand. + - **mirror**: the halves face each other; the classic look, best on an even-numbered rig. + - **chase**: a wave travelling down the row, the same sweep delayed head by head. + - **cross**: alternate heads oppose, a tight scissoring that looks fast at a low BPM. + - **unison**: every head as one, the reference the others read against. +- `panBpm` / `tiltBpm`: sweep rates (60 = one sweep a second). Different rates are what turn two sines into a path instead of a diagonal. -- `panRange` / `tiltRange` — how much of the fixture's travel to use. A head at full pan spends +- `panRange` / `tiltRange`: how much of the fixture's travel to use. A head at full pan spends much of its sweep pointing away from the audience, so the default is a band around center. -- `panCenter` / `tiltCenter` — where the sweep is centered (128 = the fixture's middle). -- `soundReactive` — move and light with the music: the beam swings wider as the room gets louder, +- `panCenter` / `tiltCenter`: where the sweep is centered (128 = the fixture's middle). +- `soundReactive`: move and light with the music: the beam swings wider as the room gets louder, each head takes its brightness from its own frequency band so the rig ripples rather than pulsing as one block, and a beat widens the sweep and flares the color with a short decay so a kick is visible rather than a one-frame flicker. Silence holds the rig still, which is what makes it read @@ -343,11 +343,11 @@ The arcade cast crossing a light wall: Pacman chomps his way along while the fou In this first iteration the characters travel independently and do not notice each other. The maze, the pellets and the chase are the next step, built on the shapes and the movement grid this one establishes. -- `pacmen` — how many Pacmen (0-4). -- `ghosts` — how many ghosts (0-8); the arcade cast is four. -- `speed` — travel rate in sprite-widths, so motion reads the same on any grid; Pacman runs slightly ahead of the ghosts, as in the original. -- `spriteSize` — integer magnification (crisp nearest-neighbor); 0 = auto, scaling with the grid so the characters read on a 16x16 matrix and on a 768-wide desktop grid alike. -- `soundReactive` — move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. +- `pacmen`: how many Pacmen (0-4). +- `ghosts`: how many ghosts (0-8); the arcade cast is four. +- `speed`: travel rate in sprite-widths, so motion reads the same on any grid; Pacman runs slightly ahead of the ghosts, as in the original. +- `spriteSize`: integer magnification (crisp nearest-neighbor); 0 = auto, scaling with the grid so the characters read on a 16x16 matrix and on a 768-wide desktop grid alike. +- `soundReactive`: move to the music: each sprite follows its own frequency band, so the scene breathes rather than surging as one block, and silence stands it still. Without an audio source the sprites keep moving normally. Pacman is always his own yellow; the ghosts take their body colors from the active palette, so they stay four distinguishable characters whatever palette is loaded. @@ -361,11 +361,11 @@ The 1978 formation marching down the wall: five ranks of squid, crab and octopus On a panel narrower than the formation the ranks scroll through the court instead of turning at the walls, so a 16-wide matrix shows the march passing rather than a block stuck at the top. -- `marchBpm` — steps per minute at a full formation; the effective rate rises to four times this as the ranks are cleared. -- `stepX` — how far a step moves the formation sideways, in pixels. -- `dropY` — how far a wall turn drops it, in pixels. -- `size` — integer magnification per art pixel; 1 on a matrix, 2 or more on a wall. -- `soundReactive` — the beat becomes the clock: the formation steps on transients and stands still in silence, so the march locks to the track. +- `marchBpm`: steps per minute at a full formation; the effective rate rises to four times this as the ranks are cleared. +- `stepX`: how far a step moves the formation sideways, in pixels. +- `dropY`: how far a wall turn drops it, in pixels. +- `size`: integer magnification per art pixel; 1 on a matrix, 2 or more on a wall. +- `soundReactive`: the beat becomes the clock: the formation steps on transients and stands still in silence, so the march locks to the track. The invaders take their body color from the active palette. Origin: projectMM original; inspired by Taito's Space Invaders (1978), the pixel art drawn fresh for this effect @@ -377,12 +377,12 @@ A fountain that throws the project's whole sprite cast: fish, Pacman and his gho Physics run on elapsed time, not per frame, so the plume looks the same on a 60 fps board and a 1200 fps desktop. -- `lift` — how hard the nozzle throws; scales with the grid, so it fills a small panel and a wall alike. -- `pull` — gravity. Measured rather than guessed: 3 gives a two-second arc, which is long enough to read a 12x8 toaster. -- `rate` — sprites launched per beat of the emit clock. -- `emitBpm` — launches per minute, so the plume's density is a choice rather than a side effect of how fast the device runs. -- `size` — integer magnification per art pixel. -- `soundReactive` — one sprite per frequency band, thrown when that band is loud, so the cast maps onto the spectrum in order: the bass bands throw fish, the treble bands throw invaders. Silence throws nothing. +- `lift`: how hard the nozzle throws; scales with the grid, so it fills a small panel and a wall alike. +- `pull`: gravity. Measured rather than guessed: 3 gives a two-second arc, which is long enough to read a 12x8 toaster. +- `rate`: sprites launched per beat of the emit clock. +- `emitBpm`: launches per minute, so the plume's density is a choice rather than a side effect of how fast the device runs. +- `size`: integer magnification per art pixel. +- `soundReactive`: one sprite per frequency band, thrown when that band is loud, so the cast maps onto the spectrum in order: the bass bands throw fish, the treble bands throw invaders. Silence throws nothing. Colors come from the active palette, one entry per sprite, held for its whole flight. Origin: projectMM original @@ -394,12 +394,12 @@ Two paddles rallying a ball across the grid, the attract-mode reading of the 197 The court is fixed point rather than pixels, so the game plays identically on a 16x16 matrix and a 256-wide wall; positions are scaled to the grid only when they are drawn. -- `rallyBpm` — ball crossings per minute, so the rally takes the same wall-clock time on any grid. -- `paddle` — paddle length as a percentage of the court height; short paddles miss more, which is what makes points happen. -- `reflex` — how sharply a paddle chases the ball. Below full speed it lags a fast ball, which is where the misses come from. -- `size` — integer magnification, when the ball is a sprite. -- `spriteBall` — swap the classic square for a member of the shared sprite cast, re-picked on every hit, so a paddle knocks one character away and another back. -- `soundReactive` — the ball advances only on the beat, so it crosses the court in time with the track and stands still in silence. +- `rallyBpm`: ball crossings per minute, so the rally takes the same wall-clock time on any grid. +- `paddle`: paddle length as a percentage of the court height; short paddles miss more, which is what makes points happen. +- `reflex`: how sharply a paddle chases the ball. Below full speed it lags a fast ball, which is where the misses come from. +- `size`: integer magnification, when the ball is a sprite. +- `spriteBall`: swap the classic square for a member of the shared sprite cast, re-picked on every hit, so a paddle knocks one character away and another back. +- `soundReactive`: the ball advances only on the beat, so it crosses the court in time with the track and stands still in silence. Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1972) @@ -409,15 +409,15 @@ Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1 Several noise fields, each drifting on its own clock, read in polar coordinates and composited into curtains of light. Nothing is simulated: layers of the same field at different scales, moved by independent oscillators, interfere with each other, and the interference is what reads as curtains folding through one another. The strongest layer at each pixel wins, so the layers stay distinct instead of averaging into haze, and which layer won picks the region of the palette. Every palette gives a different aurora. -- `speed` — master rate; every layer's motion scales from it, and 0 freezes the composition. -- `scale` — noise cells across the grid: low is broad curtains, high is fine structure. -- `layers` — how many fields are composited, and the main cost knob. -- `warp` — how far the field displaces its own sample angle, which is what makes a curtain fold over itself rather than sweep past. -- `twist` — how much the radius shears the angle, giving the curtains their lean. -- `segments` — kaleidoscope wedges; 1 leaves the composition unfolded. -- `contrast` — how much of the field lights. Low is cloud, high is a few sharp curtains. The window is placed against the field's own measured range, so this means the same thing on any grid and at any octave count. -- `octaves` — detail within each layer, multiplying the cost knob. -- `polarTable`, `polarTable16` — as PolarNoise above. +- `speed`: master rate; every layer's motion scales from it, and 0 freezes the composition. +- `scale`: noise cells across the grid: low is broad curtains, high is fine structure. +- `layers`: how many fields are composited, and the main cost knob. +- `warp`: how far the field displaces its own sample angle, which is what makes a curtain fold over itself rather than sweep past. +- `twist`: how much the radius shears the angle, giving the curtains their lean. +- `segments`: kaleidoscope wedges; 1 leaves the composition unfolded. +- `contrast`: how much of the field lights. Low is cloud, high is a few sharp curtains. The window is placed against the field's own measured range, so this means the same thing on any grid and at any octave count. +- `octaves`: detail within each layer, multiplying the cost knob. +- `polarTable`, `polarTable16`: as PolarNoise above. Cost is one warped field sample per layer per pixel. With `warp` above zero each of those is a `warp8`, which spends two noise samples finding where to look before the `octaves` samples of the field itself, so the budget is `layers` × (`octaves` + 2); at `warp` 0 it is `layers` × `octaves`. The polar address is a table read rather than an angle and a distance per pixel. @@ -427,14 +427,14 @@ Origin: projectMM original, in the shader vocabulary Stefan Petrick made recogni ### Ballpit 🔬 · 2D -Falling balls that pile up and shove each other aside. The heap is emergent: gravity pulls, the floor stops, and contact between neighbours produces the shape. `tilt` turns the pit into a slope and the whole pile slides and re-settles. +Falling balls that pile up and shove each other aside. The heap is emergent: gravity pulls, the floor stops, and contact between neighbors produces the shape. `tilt` turns the pit into a slope and the whole pile slides and re-settles. -- `balls` — how many share the pit. -- `gravity` — how hard they fall. -- `size` — contact radius in pixels: how far apart balls sit when touching. -- `bounce` — restitution: how much speed a contact keeps. -- `tilt` — sideways force, turning the pit into a slope. -- `drag` — damping, so the heap settles instead of sloshing. +- `balls`: how many share the pit. +- `gravity`: how hard they fall. +- `size`: contact radius in pixels: how far apart balls sit when touching. +- `bounce`: restitution: how much speed a contact keeps. +- `tilt`: sideways force, turning the pit into a slope. +- `drag`: damping, so the heap settles instead of sloshing. Exercises the half of the particle kernel [Fireworks](#fireworks) leaves untouched: sparks never notice each other, these do. Collisions are the one non-linear part of the kernel, so the pool is deliberately small. @@ -446,10 +446,10 @@ Origin: projectMM original, on the WLED Particle System's ballpit family by Dami Two color fields trade places pixel by pixel in an order that looks random but is computed, so the transition needs no per-pixel state and no shuffled index list. Two devices rendering the same frame dissolve identically without exchanging anything. -- `bpm` — how fast one transition completes. -- `spread` — how much of the transition pixels spend mid-flight; 0 gives a hard edge. -- `eased` — ease the progress instead of sweeping linearly. -- `scatter` — random order; off gives a positional wipe from the same code. +- `bpm`: how fast one transition completes. +- `spread`: how much of the transition pixels spend mid-flight; 0 gives a hard edge. +- `eased`: ease the progress instead of sweeping linearly. +- `scatter`: random order; off gives a positional wipe from the same code. Origin: projectMM original, on the classic dissolve transition in its position-addressed (shader) form @@ -457,13 +457,13 @@ Origin: projectMM original, on the classic dissolve transition in its position-a ### Echo 🔬 · 2D -The previous frame fed back through a zoom and rotation, dimmed, with a bright source drawn on top — trails that spiral away from themselves, like a camera pointed at its own monitor. +The previous frame fed back through a zoom and rotation, dimmed, with a bright source drawn on top: trails that spiral away from themselves, like a camera pointed at its own monitor. -- `bpm` — how fast the source orbits. -- `zoom` — how much the feedback grows each frame. -- `rotate` — rotation per frame, which turns the trail into a spiral. -- `decay` — how fast the echo fades; higher is a shorter trail. -- `size` — radius of the bright source. +- `bpm`: how fast the source orbits. +- `zoom`: how much the feedback grows each frame. +- `rotate`: rotation per frame, which turns the trail into a spiral. +- `decay`: how fast the echo fades; higher is a shorter trail. +- `size`: radius of the bright source. Shows that feedback is not a primitive: once the grid can be read as a texture (`sampleWrap`), the whole family of trails, zoom blur and smear is a few lines. @@ -475,11 +475,11 @@ Origin: projectMM original, on video feedback and the standard texture-feedback An audio analyser with real meter ballistics: bars rise fast enough to catch a transient and fall slowly enough to read, and a peak dot marks the recent maximum and drifts down. -- `attack` — how fast a bar rises toward a new level. -- `release` — how fast it falls back. -- `peakDecay` — how fast the peak dot drifts down. -- `showPeaks` — draw the floating peak dots. -- `colorByColumn` — color per band instead of by height. +- `attack`: how fast a bar rises toward a new level. +- `release`: how fast it falls back. +- `peakDecay`: how fast the peak dot drifts down. +- `showPeaks`: draw the floating peak dots. +- `colorByColumn`: color per band instead of by height. The asymmetry is the whole point; a symmetric follower either misses the hit or flickers. @@ -489,31 +489,47 @@ Origin: projectMM original, on standard VU/PPM meter ballistics and WLED's GEQ b ### Truchet 🔬 · 2D -A maze of interlocking arcs that never repeats, drawn without storing a single tile. Randomly-turned tiles with arcs at their edges join into continuous winding paths across the whole surface — the pattern looks designed, and nothing designed it. +A maze of interlocking arcs that never repeats, drawn without storing a single tile. Randomly-turned tiles with arcs at their edges join into continuous winding paths across the whole surface: the pattern looks designed, and nothing designed it. -- `bpm` — how fast the pattern drifts. -- `scale` — tiles across the short side. -- `thickness` — how fat the arcs are. -- `softness` — edge softness: the anti-aliasing width. -- `shuffle` — reshuffles which way the tiles face. -- `drift` — slide the pattern instead of holding still. +- `bpm`: how fast the pattern drifts. +- `scale`: tiles across the short side. +- `thickness`: how fat the arcs are. +- `softness`: edge softness: the anti-aliasing width. +- `shuffle`: reshuffles which way the tiles face. +- `drift`: slide the pattern instead of holding still. -**The representative 2D shader**, and a better introduction to the form than [Raymarch](#raymarch): no 3D, no rays, no float, cheap on any target. It shows the three moves most shader effects are built from — folding space so one tile becomes hundreds (`repeat`), deciding each tile's orientation from its position alone (`hashInt`, so no array remembers it and two devices agree without exchanging anything), and turning a distance into a soft edge (`smoothstep`). +**The representative 2D shader**, and a better introduction to the form than [Raymarch](#raymarch): no 3D, no rays, no float, cheap on any target. It shows the three moves most shader effects are built from: folding space so one tile becomes hundreds (`repeat`), deciding each tile's orientation from its position alone (`hashInt`, so no array remembers it and two devices agree without exchanging anything), and turning a distance into a soft edge (`smoothstep`). Origin: projectMM original, on Sébastien Truchet's 1704 tiling and the standard shader fract/hash/smoothstep idiom + + +### Trails 💫🖌️ · 3D + +Dots thrown into a moving medium, leaving tails the flow carries and bends. Nothing draws a tail: the tail is the previous frames' dots, transported along a velocity field and dimmed, which is why the shape of the flow is visible in it. The medium moves through the volume too, so on a cube the tails lean through depth rather than a plane repeating. + +- `speed`: how fast the medium moves, and with it every tail. +- `dots`: how many emitters are throwing light in. +- `scale`: the flow field's cell size; low is broad sweeps, high is eddies. +- `persistence`: how long a tail survives, as a half-life, so it is the same length in seconds at any framerate. +- `breathe`: how much the flow's strength rises and falls. + +The trail plane the effect owns is 16-bit, which is what lets a tail fade smoothly: a byte plane multiplied by slightly less than one hundreds of times a second either truncates the tail away or, rounded, never fades at all. + +Origin: projectMM original, in the flow-field idiom (4wheeljive's FlowFields, from a Stefan Petrick concept), with Stam's backward advection for the transport + ### Tunnel 🔬 · 2D A texture mapped onto the inside of an infinite tube, so the viewer appears to fly down it forever. Nothing is 3D: the angle around the center is one texture coordinate and the reciprocal of the distance is the other, which is perspective for the price of a divide. -- `bpm` — how fast the tunnel flies past. -- `depth` — texture scale along the tunnel; higher is finer rings. -- `twist` — rotation per unit depth, so the tunnel corkscrews. -- `segments` — kaleidoscope the wall; 1 leaves it plain. -- `octaves` — wall texture detail, and the cost knob. -- `vignette` — darken toward the vanishing point so it reads as receding. +- `bpm`: how fast the tunnel flies past. +- `depth`: texture scale along the tunnel; higher is finer rings. +- `twist`: rotation per unit depth, so the tunnel corkscrews. +- `segments`: kaleidoscope the wall; 1 leaves it plain. +- `octaves`: wall texture detail, and the cost knob. +- `vignette`: darken toward the vanishing point so it reads as receding. Origin: projectMM original, on the standard demoscene tunnel @@ -521,15 +537,15 @@ Origin: projectMM original, on the standard demoscene tunnel ### VectorBalls 🔬 · 2D -A rotating 3D object drawn as shaded spheres — the demoscene classic that named the technique. The smallest complete demonstration of putting 3D on a panel: rotate, project, sort back-to-front, shade by distance, draw. +A rotating 3D object drawn as shaded spheres: the demoscene classic that named the technique. The smallest complete demonstration of putting 3D on a panel: rotate, project, sort back-to-front, shade by distance, draw. -- `bpm` — rotation speed. -- `size` — ball radius at the object's center, in pixels. -- `spread` — how far apart the balls sit. -- `distance` — how far the object is from the viewer. -- `fade` — dim the far balls, which is what reads as depth. +- `bpm`: rotation speed. +- `size`: ball radius at the object's center, in pixels. +- `spread`: how far apart the balls sit. +- `distance`: how far the object is from the viewer. +- `fade`: dim the far balls, which is what reads as depth. -Painter's ordering matters more than it sounds: without it a far ball can paint over a near one and the object reads as turning inside out. Costs a few microseconds a frame at default settings — 14 points rather than a per-pixel loop, so it is the cheapest of the showcases. +Painter's ordering matters more than it sounds: without it a far ball can paint over a near one and the object reads as turning inside out. Costs a few microseconds a frame at default settings: 14 points rather than a per-pixel loop, so it is the cheapest of the showcases. Origin: projectMM original, on the Amiga-era demoscene vector-ball effect @@ -539,12 +555,12 @@ Origin: projectMM original, on the Amiga-era demoscene vector-ball effect A propagating wave simulation: drops land, their rings spread outward, reflect off the edges and interfere where they cross. The crossing is what a closed-form ripple cannot fake, because two rings meeting have to add and cancel. -- `speed` — simulation steps per second: how fast the water itself moves, independent of the framerate. -- `dropRate` — how often drops land, in time rather than per frame. -- `damping` — how fast waves lose energy; higher is calmer water. -- `strength` — how hard a drop hits. -- `colorByHeight` — color the surface by height so crests and troughs read differently. -- `hueBase` / `hueSpread` — where in the palette the still surface sits, and how far a crest and a trough reach from it. +- `speed`: simulation steps per second: how fast the water itself moves, independent of the framerate. +- `dropRate`: how often drops land, in time rather than per frame. +- `damping`: how fast waves lose energy; higher is calmer water. +- `strength`: how hard a drop hits. +- `colorByHeight`: color the surface by height so crests and troughs read differently. +- `hueBase` / `hueSpread`: where in the palette the still surface sits, and how far a crest and a trough reach from it. Distinct from [Ripples](#ripples), which draws expanding rings from a closed-form radius: that one is cheaper and always looks like clean concentric circles, this one behaves like water. Costs two int16 buffers sized to the grid. @@ -554,15 +570,15 @@ Origin: projectMM original, on Hugo Elias's water surface algorithm ### Raymarch 🔬 · 2D -A lit 3D scene rendered by marching a ray through a distance field, one ray per pixel. Nothing draws a sphere: the scene is a function returning the distance to the nearest surface, and the spheres emerge because each ray stops where that function says a surface is. The lighting is derived too — the surface normal is the gradient of the distance field. +A lit 3D scene rendered by marching a ray through a distance field, one ray per pixel. Nothing draws a sphere: the scene is a function returning the distance to the nearest surface, and the spheres emerge because each ray stops where that function says a surface is. The lighting is derived too: the surface normal is the gradient of the distance field. -- `bpm` — how fast the scene animates. -- `steps` — ray marching steps: the quality and cost knob. -- `blend` — how much the two spheres melt into each other. -- `cameraY` — camera height above the floor. -- `showFloor` — include the ground plane. +- `bpm`: how fast the scene animates. +- `steps`: ray marching steps: the quality and cost knob. +- `blend`: how much the two spheres melt into each other. +- `cameraY`: camera height above the floor. +- `showFloor`: include the ground plane. -**Compiled only where the SoC declares a hardware FPU** (`SOC_CPU_HAS_FPU`, which every ESP32 variant and the desktop satisfy). This is the one stated exception to the integer-only render-path rule, and it is gated rather than assumed. The cost is per *pixel*, not per chip — measured at 0.30 ms/frame for 32×32 on desktop, and 1.64 ms for 4096 lights on an ESP32-S3 while still holding 409 fps. What limits it is pixel count; `steps` trades quality for cost. Frames also stream over NetworkSend, so a desktop can drive a fixture that could never compute this locally. +**Compiled only where the SoC declares a hardware FPU** (`SOC_CPU_HAS_FPU`, which every ESP32 variant and the desktop satisfy). This is the one stated exception to the integer-only render-path rule, and it is gated rather than assumed. The cost is per *pixel*, not per chip: measured at 0.30 ms/frame for 32×32 on desktop, and 1.64 ms for 4096 lights on an ESP32-S3 while still holding 409 fps. What limits it is pixel count; `steps` trades quality for cost. Frames also stream over NetworkSend, so a desktop can drive a fixture that could never compute this locally. Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function articles @@ -572,14 +588,14 @@ Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function A warped noise field addressed by angle and radius, folded into a kaleidoscope. The field turns and breathes around the center rather than scrolling past it. -- `bpm` — how fast the field drifts. -- `scale` — noise cells across the grid: low is broad shapes, high is fine detail. -- `segments` — kaleidoscope wedges; 1 disables the fold. -- `warp` — domain-warp strength; 0 gives a plain field. -- `octaves` — fbm octaves, and the main cost knob. -- `twist` — how much the radius shears the angle, setting the spiral. -- `polarTable` — read each pixel's angle and radius from a table instead of computing them every frame. On by default: it is the same picture, measured 34% faster on an ESP32-S3, and costs 2 bytes per pixel. Turn it off on a device short of memory; the effect then computes the address and looks identical. -- `polarTable16` — hold that table at full 16-bit precision, at 4 bytes per pixel instead of 2. +- `bpm`: how fast the field drifts. +- `scale`: noise cells across the grid: low is broad shapes, high is fine detail. +- `segments`: kaleidoscope wedges; 1 disables the fold. +- `warp`: domain-warp strength; 0 gives a plain field. +- `octaves`: fbm octaves, and the main cost knob. +- `twist`: how much the radius shears the angle, setting the spiral. +- `polarTable`: read each pixel's angle and radius from a table instead of computing them every frame. On by default: it is the same picture, measured 34% faster on an ESP32-S3, and costs 2 bytes per pixel. Turn it off on a device short of memory; the effect then computes the address and looks identical. +- `polarTable16`: hold that table at full 16-bit precision, at 4 bytes per pixel instead of 2. Cost scales with `octaves` and `warp`: at `warp` > 0 and `octaves` 2 it is roughly 4 noise samples per pixel. On a large wall set `octaves` to 1 or `warp` to 0, which degrades to a plain polar noise that still reads well. @@ -591,12 +607,12 @@ Origin: projectMM original, after Stefan Petrick's polar/noise vocabulary and I A circle and a box orbit and melt into each other, drawn as signed distance fields rather than rasterized outlines. One distance per pixel yields three looks at once: an anti-aliased fill, an outline (`|d| - width`), and a glow that falls off into the surrounding field. -- `bpm` — orbit speed. -- `radius` — circle radius, as a fraction of the short side. -- `boxSize` — box half-extent, same scale. -- `blend` — melt radius; 0 unions the shapes hard. -- `outline` — 0 fills the shape; higher draws an outline of that width. -- `glow` — tint the field around the shape by distance. +- `bpm`: orbit speed. +- `radius`: circle radius, as a fraction of the short side. +- `boxSize`: box half-extent, same scale. +- `blend`: melt radius; 0 unions the shapes hard. +- `outline`: 0 fills the shape; higher draws an outline of that width. +- `glow`: tint the field around the shape by distance. Measured on an ESP32-S3 at 128×128: 20 fps, 728 cycles/pixel using the true-distance form, alongside StarSky (692) and Metaballs (647) at the same size. @@ -608,11 +624,11 @@ Origin: projectMM original, after Iñigo Quilez's distance-function catalogue an A flat fill with five color modes: a plain RGB(W) color, the active palette spread across the lights, an RMS-averaged single palette color, or the palette banded along the grid's rows or columns. -- `red` / `green` / `blue` / `white` — the flat color in `RGB(W)` mode (ignored in the palette modes). -- `brightness` — scales the flat and palette-spread output. -- `colorMode` — `RGB(W)`, `Palette` (spread across the lights), `Palette avg` (RMS mean of the palette), `Palette rows`, `Palette cols` (palette banded along that axis). -- `minRGB` — in the band modes, drops palette entries whose every channel is below this floor. -- `randomColors` — in the band modes, deterministically shuffles the surviving palette entries. +- `red` / `green` / `blue` / `white`: the flat color in `RGB(W)` mode (ignored in the palette modes). +- `brightness`: scales the flat and palette-spread output. +- `colorMode`: `RGB(W)`, `Palette` (spread across the lights), `Palette avg` (RMS mean of the palette), `Palette rows`, `Palette cols` (palette banded along that axis). +- `minRGB`: in the band modes, drops palette entries whose every channel is below this floor. +- `randomColors`: in the band modes, deterministically shuffles the surviving palette entries. Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -626,7 +642,7 @@ Detail: [technical](moxygen/SolidEffect.md) A hollow spherical shell that bounces through the 3D volume, its surface colored from the palette, leaving no trail. -- `speed` — how fast the sphere moves through the volume. +- `speed`: how fast the sphere moves through the volume. Origin: MoonLight · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -642,9 +658,9 @@ Detail: [technical](moxygen/SphereMoveEffect.md) Rotating spiral from angle + distance (`atan2_8`/`dist8`). -- `bpm` — rotation speed. -- `twist` — how tightly the arm winds (hue gain per unit of distance). -- `hue_shift` — rotate the palette index. +- `bpm`: rotation speed. +- `twist`: how tightly the arm winds (hue gain per unit of distance). +- `hue_shift`: rotate the palette index. Origin: projectMM original (rotating spiral) @@ -658,10 +674,10 @@ Detail: [technical](moxygen/SpiralEffect.md) A perspective starfield: stars approach the viewer from a vanishing point, brightening as they near, then respawn at depth. -- `speed` — how fast stars approach (frame throttle). -- `numStars` — how many stars are active. -- `blur` — motion-trail fade per frame. -- `usePalette` — color the stars from the palette instead of white. +- `speed`: how fast stars approach (frame throttle). +- `numStars`: how many stars are active. +- `blur`: motion-trail fade per frame. +- `usePalette`: color the stars from the palette instead of white. Origin: MoonLight · by [@Brandon502](https://github.com/Brandon502), inspired by Daniel Shiffman / [Coding Train](https://www.youtube.com/watch?v=17WoOqgXsRM) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -677,9 +693,9 @@ Detail: [technical](moxygen/StarFieldEffect.md) Twinkling stars at random light positions, each fading in and out independently over a dark background. -- `speed` — fade rate per frame (how fast each star brightens/dims). -- `star_fill_ratio` — how many stars (as a fraction of the light count). -- `usePalette` — color the stars from the active palette instead of white. +- `speed`: fade rate per frame (how fast each star brightens/dims). +- `star_fill_ratio`: how many stars (as a fraction of the light count). +- `usePalette`: color the stars from the active palette instead of white. Origin: MoonLight · by [limpkin](https://github.com/limpkin) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -693,11 +709,11 @@ Detail: [technical](moxygen/StarSkyEffect.md) Renders a multi-line string in a bitmap font. Static by default (laid out top-left, each newline dropping one font-height, clipped where it runs off the grid); turn on `scroll` to march the whole block leftwards as a wrapping marquee. Text color comes from the active palette. -- `text` — the string to show; a **multi-line text area** (each line renders on its own row). -- `scroll` — off (default) = static; on = horizontal marquee. -- `font` — glyph size (`4x6` compact, `6x8` larger). -- `speed` — marquee speed (only used when `scroll` is on). -- `hue` — palette index for the text color. +- `text`: the string to show; a **multi-line text area** (each line renders on its own row). +- `scroll`: off (default) = static; on = horizontal marquee. +- `font`: glyph size (`4x6` compact, `6x8` larger). +- `speed`: marquee speed (only used when `scroll` is on). +- `hue`: palette index for the text color. Origin: projectMM original, on MoonLight's Scrolling Text · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -711,19 +727,19 @@ Detail: [technical](moxygen/TextEffect.md) ### GameOfLife 💫🌙 · 2D/3D -Conway's cellular automaton generalised to 2D/3D: selectable rulesets (+ custom `B#/S#`), cells that inherit a neighbour's palette color on birth, optional green→red age coloring, a dead-cell blur fading toward the background color, toroidal `wrap`, a 1.5 s settle pause, and 3-CRC stasis self-respawn (R-pentomino/glider) when the board goes static. +Conway's cellular automaton generalised to 2D/3D: selectable rulesets (+ custom `B#/S#`), cells that inherit a neighbor's palette color on birth, optional green→red age coloring, a dead-cell blur fading toward the background color, toroidal `wrap`, a 1.5 s settle pause, and 3-CRC stasis self-respawn (R-pentomino/glider) when the board goes static. -- `backgroundColorR` / `backgroundColorG` / `backgroundColorB` — the color dead cells fade toward (0–255 each). -- `ruleset` — the birth/survive rule (Conway, HighLife, InverseLife, Maze, Mazecentric, DrighLife, or Custom). -- `customRuleString` — a custom `B#/S#` rule, read only when `ruleset` = Custom. -- `GameSpeed (FPS)` — generation rate (0–100, 100 = uncapped). -- `startingLifeDensity` — % of cells alive at start (10–90). -- `mutationChance` — % chance a newborn gets a random color (0–100). -- `wrap` — toroidal edges (cells wrap around). -- `disablePause` — skip the 1.5 s settle pause between boards. -- `colorByAge` — green→red aging instead of inheriting a neighbour's palette color. -- `infinite` — respawn on stasis (R-pentomino/glider) instead of resetting. -- `blur` — dead-cell fade strength toward the background color. +- `backgroundColorR` / `backgroundColorG` / `backgroundColorB`: the color dead cells fade toward (0–255 each). +- `ruleset`: the birth/survive rule (Conway, HighLife, InverseLife, Maze, Mazecentric, DrighLife, or Custom). +- `customRuleString`: a custom `B#/S#` rule, read only when `ruleset` = Custom. +- `GameSpeed (FPS)`: generation rate (0–100, 100 = uncapped). +- `startingLifeDensity`: % of cells alive at start (10–90). +- `mutationChance`: % chance a newborn gets a random color (0–100). +- `wrap`: toroidal edges (cells wrap around). +- `disablePause`: skip the 1.5 s settle pause between boards. +- `colorByAge`: green→red aging instead of inheriting a neighbor's palette color. +- `infinite`: respawn on stasis (R-pentomino/glider) instead of resetting. +- `blur`: dead-cell fade strength toward the background color. Origin: MoonModules · by Ewoud Wijma (2022), mods by Brandon Butler / [@Brandon502](https://github.com/Brandon502) · [natureofcode](https://natureofcode.com/book/chapter-7-cellular-automata/) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonModules.h) @@ -735,14 +751,14 @@ Detail: [technical](moxygen/GameOfLifeEffect.md) ### GEQ 💫🐙📊 · 2D -GEQ effect preview +GEQ effect preview A flat graphic equaliser: the 16 audio bands rise as vertical bars from the bottom, with optional smoothing between bars, per-bar palette coloring, and falling peak markers. -- `fadeOut` — how fast bars fade each frame. -- `ripple` — falling-peak marker decay. -- `colorBars` — color each bar from the palette by band instead of by row. -- `smoothBars` — blend neighbouring bands for smoother bar heights. +- `fadeOut`: how fast bars fade each frame. +- `ripple`: falling-peak marker decay. +- `colorBars`: color each bar from the palette by band instead of by row. +- `smoothBars`: blend neighboring bands for smoother bar heights. Origin: WLED (audio) · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -756,12 +772,12 @@ Detail: [technical](moxygen/GEQEffect.md) A 3D-perspective graphic equaliser: audio bands rise as bars with faked depth, their side/top lines drawn toward a "projector" vanishing point (sweeping left↔right) and shortened by `depth`. Bands left of the projector are painted right-to-left, bands right of it left-to-right; per-face darkening (side/top/front) and optional `borders`. -- `speed` — projector sweep rate (1–10, higher = faster). -- `frontFill` — bar front-face fill strength (0–255). -- `horizon` — vanishing-point row the projector sits on. -- `depth` — how far the side/top perspective lines reach toward the projector. -- `numBands` — bands shown (2–16, fewer = wider bars). -- `borders` — outline each bar. +- `speed`: projector sweep rate (1–10, higher = faster). +- `frontFill`: bar front-face fill strength (0–255). +- `horizon`: vanishing-point row the projector sits on. +- `depth`: how far the side/top perspective lines reach toward the projector. +- `numBands`: bands shown (2–16, fewer = wider bars). +- `borders`: outline each bar. Origin: MoonModules (audio) · by [@TroyHacks](https://github.com/troyhacks) (GPLv3) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonModules.h) @@ -775,12 +791,12 @@ Detail: [technical](moxygen/GEQ3DEffect.md) Audio-reactive brush strokes: lines whose 3D endpoints oscillate on the beat (`beatsin8`, audio-band timebase), each stroke shortened to a band-magnitude length so the moving tip sweeps a curve over the fading field. -- `oscillatorOffset` — phase-spread between the oscillating endpoints (0–16). -- `numLines` — parallel animated strokes (2–255). -- `fadeRate` — background decay per frame (0–128, higher = shorter strokes). -- `minLength` — a stroke draws only if longer than this, so quiet bands stay dark. -- `color_chaos` — per-line random hue vs a per-band gradient. -- `phase_chaos` — random per-frame phase jitter. +- `oscillatorOffset`: phase-spread between the oscillating endpoints (0–16). +- `numLines`: parallel animated strokes (2–255). +- `fadeRate`: background decay per frame (0–128, higher = shorter strokes). +- `minLength`: a stroke draws only if longer than this, so quiet bands stay dark. +- `color_chaos`: per-line random hue vs a per-band gradient. +- `phase_chaos`: random per-frame phase jitter. Origin: MoonModules (audio) · by [@TroyHacks](https://github.com/troyhacks) (GPLv3) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonModules.h) @@ -794,9 +810,9 @@ Detail: [technical](moxygen/PaintBrushEffect.md) Falling Tetris-style blocks: each column drops a brick that lands on the growing stack, fills the column, then clears and restarts. -- `speed` — fall speed (0 = randomised per brick). -- `width` — brick height (0 = randomised). -- `oneColor` — one advancing palette color for all bricks instead of random per-brick colors. +- `speed`: fall speed (0 = randomised per brick). +- `width`: brick height (0 = randomised). +- `oneColor`: one advancing palette color for all bricks instead of random per-brick colors. Origin: WLED · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -810,14 +826,14 @@ Detail: [technical](moxygen/TetrixEffect.md) ### Blurz 🐙📊 · 2D -Blurz effect preview +Blurz effect preview Audio-reactive blurred dots: one frequency band per frame lights a dot whose position maps to that band (or to the major-peak frequency), then the whole frame is blurred for soft trails. -- `fadeRate` — background decay per frame. -- `blur` — blur strength applied each frame. -- `freqMap` — place the dot by the major-peak frequency instead of scanning bands. -- `geqScanner` — scan the dot across the strip in a GEQ-like sweep. +- `fadeRate`: background decay per frame. +- `blur`: blur strength applied each frame. +- `freqMap`: place the dot by the major-peak frequency instead of scanning bands. +- `geqScanner`: scan the dot across the strip in a GEQ-like sweep. Origin: WLED (audio) · by Andrew Tuline (WLED-SR), enhancements by [@softhack007](https://github.com/softhack007) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -829,12 +845,12 @@ Detail: [technical](moxygen/BlurzEffect.md) ### BouncingBalls 🐙 · 2D -BouncingBalls effect preview +BouncingBalls effect preview A row of balls per column bounce under gravity, each losing energy on impact and relaunching when it stops, palette-colored by ball index over a fading background. -- `grav` — gravity strength (higher = faster fall, snappier bounce). -- `numBalls` — balls per column (1–16). +- `grav`: gravity strength (higher = faster fall, snappier bounce). +- `numBalls`: balls per column (1–16). Origin: WLED · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -846,15 +862,15 @@ Detail: [technical](moxygen/BouncingBallsEffect.md) ### FreqMatrix 🐙📊 · 1D -FreqMatrix effect preview +FreqMatrix effect preview A 1D scrolling frequency display: each frame shifts the strip and injects a new pixel at one end whose hue comes from the dominant frequency and whose brightness from the volume. -- `speed` — scroll rate. -- `fx` — sound-effect intensity (scales the injected brightness). -- `lowBin` / `highBin` — the frequency window mapped across the hue range. -- `sensitivity` — input gain (10–100). -- `audioSpeed` — let the volume modulate the scroll speed. +- `speed`: scroll rate. +- `fx`: sound-effect intensity (scales the injected brightness). +- `lowBin` / `highBin`: the frequency window mapped across the hue range. +- `sensitivity`: input gain (10–100). +- `audioSpeed`: let the volume modulate the scroll speed. Origin: WLED (audio) · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -866,13 +882,13 @@ Detail: [technical](moxygen/FreqMatrixEffect.md) ### Lissajous 🐙 · 2D -Lissajous effect preview +Lissajous effect preview A Lissajous curve traced across the grid from two phase-shifted `sin8`/`cos8` sweeps, palette-colored along its length, with a fading trail. -- `xFrequency` — the x-axis sweep frequency (sets the curve's lobe count). -- `fadeRate` — trail fade per frame. -- `speed` — how fast the curve's phase advances. +- `xFrequency`: the x-axis sweep frequency (sets the curve's lobe count). +- `fadeRate`: trail fade per frame. +- `speed`: how fast the curve's phase advances. Origin: WLED · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -884,12 +900,12 @@ Detail: [technical](moxygen/LissajousEffect.md) ### NoiseMeter 🐙📊 · 3D -NoiseMeter effect preview +NoiseMeter effect preview An audio VU meter rendered as a noise bar: the volume sets how many rows light from the bottom, each row colored by drifting Perlin noise, filling the full width and depth. -- `fadeRate` — trail decay per frame (200–254). -- `width` — how strongly the volume drives the bar height. +- `fadeRate`: trail decay per frame (200–254). +- `width`: how strongly the volume drives the bar height. Origin: WLED (audio) · by Andrew Tuline (WLED-SR) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -903,9 +919,9 @@ Detail: [technical](moxygen/NoiseMeterEffect.md) An oscilloscope waveform scrolls across the grid with a fading trail; six selectable shapes. -- `bpm` — travel speed (phase advance per minute). -- `fade` — trail fade per frame (0 = instant clear, 255 = long tail). -- `type` — waveform shape (`Sawtooth`, `Triangle`, `Sine`, `Square`, `Sin3`, `Noise`). +- `bpm`: travel speed (phase advance per minute). +- `fade`: trail fade per frame (0 = instant clear, 255 = long tail). +- `type`: waveform shape (`Sawtooth`, `Triangle`, `Sine`, `Square`, `Sin3`, `Noise`). Origin: MoonLight · by Ewoud Wijma · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) @@ -921,12 +937,12 @@ Detail: [technical](moxygen/WaveEffect.md) Fire effect preview -Fire2012-style heat field — sparks at the base rise and cool through the active palette (heat = palette index, cold at the low end, hottest at the high end); spark count scales with width. +Fire2012-style heat field: sparks at the base rise and cool through the active palette (heat = palette index, cold at the low end, hottest at the high end); spark count scales with width. -- `cooling` — how fast heat dissipates as it rises (higher = shorter flames). -- `sparking` — chance of a new spark at the base each frame (higher = livelier fire). +- `cooling`: how fast heat dissipates as it rises (higher = shorter flames). +- `sparking`: chance of a new spark at the base each frame (higher = livelier fire). -The flame color comes from the **active palette**. For the classic fire look pick the **Lava** palette (black→red→orange→yellow→white — the recommended default); any palette works, so an Ocean or Forest palette turns the flame blue or green. +The flame color comes from the **active palette**. For the classic fire look pick the **Lava** palette (black→red→orange→yellow→white: the recommended default); any palette works, so an Ocean or Forest palette turns the flame blue or green. Origin: FastLED / MoonLight · Mark Kriegsman's Fire2012; MoonLight adapts [MatrixFireFast](https://github.com/toggledbits/MatrixFireFast) (toggledbits) @@ -942,9 +958,9 @@ Detail: [technical](moxygen/FireEffect.md) A gradient-noise field indexed straight into the palette: the plainest way to turn the field into light, and the effect every other noise effect is a variation on. -- `motion` — what moves. **`drift`** scrolls the sample coordinates, so the field slides across the fixture like weather, each axis at its own rate so it flows rather than translating rigidly; on a volumetric fixture the third axis is the light's own depth, so the slices differ. **`morph`** holds the coordinates still and puts time on the third axis, so the field changes in place without going anywhere, which on a panel is the classic plasma wash; there is then no axis left for depth, so a volumetric fixture shows the same field in every slice. -- `scale` — spatial frequency: low is broad blobs, high is fine detail. -- `bpm` — how fast it moves. +- `motion`: what moves. **`drift`** scrolls the sample coordinates, so the field slides across the fixture like weather, each axis at its own rate so it flows rather than translating rigidly; on a volumetric fixture the third axis is the light's own depth, so the slices differ. **`morph`** holds the coordinates still and puts time on the third axis, so the field changes in place without going anywhere, which on a panel is the classic plasma wash; there is then no axis left for depth, so a volumetric fixture shows the same field in every slice. +- `scale`: spatial frequency: low is broad blobs, high is fine detail. +- `bpm`: how fast it moves. Origin: FastLED · inoise field (Mark Kriegsman); the `morph` form from WLED via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h), which shipped it as a separate Noise2D effect until the two were merged @@ -960,7 +976,7 @@ Detail: [technical](moxygen/NoiseEffect.md) The 16 mic frequency bands spread across X, each column lit bottom-up by its magnitude. -- `colorMode` — bar coloring: `height` (green base → red top, the VU look) or `per-band` (each column its own hue, the rainbow analyser look). +- `colorMode`: bar coloring: `height` (green base → red top, the VU look) or `per-band` (each column its own hue, the rainbow analyser look). Origin: projectMM original, on the WLED-SR GEQ / spectrum concept (Andrew Tuline) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_WLED.h) @@ -974,7 +990,7 @@ Detail: [technical](moxygen/AudioSpectrumEffect.md) A whole-grid VU meter: every light pulses with the mic level, color indexing the palette by loudness. -- `brightness` — overall brightness ceiling for the VU pulse (1–255). +- `brightness`: overall brightness ceiling for the VU pulse (1–255). Origin: projectMM original (VU meter) @@ -986,12 +1002,12 @@ Detail: [technical](moxygen/AudioVolumeEffect.md) ### DemoReel 🎬 · 3D -A demo reel: plays every other registered effect in turn, auto-advancing on a timer, so one Layer cycles the whole library hands-free — the showcase/test tool for everything. It hosts a single live effect at a time (created from the effect registry, rendered into this Layer) and swaps to the next when the interval elapses — new effects are picked up automatically. It can also pick a fresh palette each cycle and overlay the playing effect's name. The `status` line shows which effect is playing (e.g. `playing: Plasma (3/20)`). It never hosts itself, and it plays effects in sequence rather than compositing them (layering is the [Layer](moxygen/Layer.md) stack's job). +A demo reel: plays every other registered effect in turn, auto-advancing on a timer, so one Layer cycles the whole library hands-free: the showcase/test tool for everything. It hosts a single live effect at a time (created from the effect registry, rendered into this Layer) and swaps to the next when the interval elapses: new effects are picked up automatically. It can also pick a fresh palette each cycle and overlay the playing effect's name. The `status` line shows which effect is playing (e.g. `playing: Plasma (3/20)`). It never hosts itself, and it plays effects in sequence rather than compositing them (layering is the [Layer](moxygen/Layer.md) stack's job). -- `interval` — seconds each effect plays before advancing (1–120). -- `shuffle` — jump to a random next effect instead of registry order. -- `randomPalette` — pick a random palette on each cycle (showcases the palette set); default on. -- `showName` — overlay the playing effect's name in a small font; default on. +- `interval`: seconds each effect plays before advancing (1–120). +- `shuffle`: jump to a random next effect instead of registry order. +- `randomPalette`: pick a random palette on each cycle (showcases the palette set); default on. +- `showName`: overlay the playing effect's name in a small font; default on. Origin: FastLED · Mark Kriegsman's [DemoReel100](https://github.com/FastLED/FastLED/blob/master/examples/DemoReel100/DemoReel100.ino); projectMM reel @@ -1003,10 +1019,10 @@ Detail: [technical](moxygen/DemoReelEffect.md) ### NetworkReceive 📡🌙 -Receives lights-over-UDP (Art-Net, E1.31/sACN, DDP) and writes it into the layer — the receive side for Resolume/Madrix/xLights/LedFx. +Receives lights-over-UDP (Art-Net, E1.31/sACN, DDP) and writes it into the layer: the receive side for Resolume/Madrix/xLights/LedFx. -- `universe_start` — the first incoming universe to map onto the layer (mirrors the sender). -- `channels_per_universe` — bytes each universe maps to (510 = whole RGB lights per universe, the xLights/Falcon convention; 512 for Madrix-style senders that pack pixels across universe boundaries). +- `universe_start`: the first incoming universe to map onto the layer (mirrors the sender). +- `channels_per_universe`: bytes each universe maps to (510 = whole RGB lights per universe, the xLights/Falcon convention; 512 for Madrix-style senders that pack pixels across universe boundaries). Origin: projectMM original (E1.31 / Art-Net receive) @@ -1020,11 +1036,11 @@ Detail: [technical](moxygen/NetworkReceiveEffect.md) ### Sine 🌀 · 3D -R/G/B each follow a sine along one axis at 120° phase offset — a glowing, scrolling color box. +R/G/B each follow a sine along one axis at 120° phase offset: a glowing, scrolling color box. -- `frequency` — spatial frequency, waves across the box (1–20). -- `amplitude` — peak brightness (0–255, 255 = full). -- `bpm` — scroll speed. +- `frequency`: spatial frequency, waves across the box (1–20). +- `amplitude`: peak brightness (0–255, 255 = full). +- `bpm`: scroll speed. Origin: MoonLight (Sinus, AI-generated) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_MoonLight.h) diff --git a/moonlive/effects/trails.mle b/moonlive/effects/trails.mle new file mode 100644 index 00000000..a93ab4e6 --- /dev/null +++ b/moonlive/effects/trails.mle @@ -0,0 +1,50 @@ +// Trails: dots thrown into a flowing medium, leaving tails the flow carries and bends. + +class TrailsEffect { + byte speed = 60; + byte zoom = 30; + byte dots = 3; + byte persistence = 120; + byte curl = 1; + + int dimensions() { return 3; } + + string tags() { return "💫🖌️"; } + + void defineControls() { + trail(1); + addControl("speed", speed, 0, 255); // how fast the medium moves + addControl("zoom", zoom, 1, 255); // the flow's cell size + addControl("dots", dots, 1, 8); // how many emitters throw light in + addControl("persistence", persistence, 0, 255); // how long a tail survives + addControl("curl", curl, 0, 1); // 1 = divergence-free, so nothing clumps + } + + void tick() { + int span = width; + if (height > span) { span = height; } + + int cells = div(zoom * 64, span) + 1; + int push = div(speed * 4 * span, 64); + + if (curl > 0) { flowCurl(cells, push); } else { flowNoise(cells, push); } + trailDecay(20 + persistence * persistence / 16); + + int head = div(span, 256) + 1; + if (head > 4) { head = 4; } + + int area = (head * 2 + 1) * (head * 2 + 1); + int n = div(dots * width * height, 4096 * div(area, 9)); + if (n < 1) { n = 1; } + if (n > 64) { n = 64; } + + for (int i = 0; i < n; i = i + 1) { + int a = osc(speed / 4 + 4 + i * 3, t, 0) + i * div(65535, n); + int b = osc(speed / 3 + 5 + i * 5, t, 0) + i * 9973; + int px = scale(sin(a), width); + int py = scale(cos(b), height); + int pz = scale(sin(b * 2), depth); + emitTrail(px, py, pz, mod(i * div(255, n) + div(t, 64), 256), 255, head); + } + } +} diff --git a/src/core/math16.h b/src/core/math16.h index 6562fbed..8846a7de 100644 --- a/src/core/math16.h +++ b/src/core/math16.h @@ -1,6 +1,6 @@ #pragma once -// 16-bit fixed-point tier — the power-function contract's numeric vocabulary. +// 16-bit fixed-point tier: the power-function contract's numeric vocabulary. // // Why a 16-bit tier alongside math8.h: an 8-bit result positions to 256 levels, which visibly steps // on a large fixture (a 12K-light wall shows the staircase in a slow gradient or a slow-moving @@ -9,10 +9,10 @@ // design) and as the internal fast path. // // Cost discipline, measured rather than assumed: interpolating the existing 8-bit `sin8_lut` was -// tried first (zero new bytes) and REJECTED — rounding the endpoints to 8 bits distorts the segments +// tried first (zero new bytes) and REJECTED: rounding the endpoints to 8 bits distorts the segments // the interpolation runs between, giving 1.1% of amplitude, worse than the 0.69% of FastLED's // classic `lib8tion` sin16. A 130-byte quarter-wave 16-bit table with the same linear interpolation -// measures 0.031% — 22x better than lib8tion at a cost that rounds to nothing. FastLED master's +// measures 0.031%: 22x better than lib8tion at a cost that rounds to nothing. FastLED master's // `fl::sin32` is near-exact but spends 1040 bytes plus two int64 multiplies per call; this is the // middle that keeps large-fixture gradients smooth without that. A quadratic core can swap in behind // this same name if a field-heavy effect ever needs it. @@ -43,14 +43,14 @@ inline constexpr int16_t sin16_quarter[65] = { 32767 }; -/// Sine over a 16-bit angle, returning SIGNED -32767..32767 — FastLED's sin16 contract. +/// Sine over a 16-bit angle, returning SIGNED -32767..32767: FastLED's sin16 contract. /// /// Verified against the two codebases users port FROM, at master rather than at a release, because /// FastLED 4.0 is close and the contract we bind to should be the one users will have: /// - FastLED master (6a120dedc9, 2026-08-07): `fl/math/sin32.h` declares `i16 sin16lut(u16)`, /// commented "output is between -32767 and 32767". /// - WLED main (c1838ed4, 2026-08-05): `constexpr int16_t (*sinFunction)(uint16_t) = &sin16_t`, -/// and its effects write `sin16_t(x) + 32768` when they want an unsigned value — precisely the +/// and its effects write `sin16_t(x) + 32768` when they want an unsigned value: precisely the /// arithmetic that broke silently against our old unsigned return. /// /// The unsigned 0..65535 form (32768 at the zero crossing) was tried first, to match `sin8`. It is @@ -69,7 +69,7 @@ constexpr int16_t sin16(angle16 theta) { // Odd quadrants run the quarter wave backwards (sin descends from the peak). const uint16_t walk = (quadrant & 1) ? static_cast(0x4000 - pos) : pos; // uint16 for the index, NOT uint8: walk reaches 0x4000 exactly at a quadrant boundary in an odd - // quadrant, and >>8 is then 64 — which a uint8 holds fine but only by luck of the cast order. + // quadrant, and >>8 is then 64: which a uint8 holds fine but only by luck of the cast order. // Keeping it wide makes the "table has 65 entries so idx==64 is valid" invariant explicit. const uint16_t idx = static_cast(walk >> 8); // 0..64 const uint8_t frac = static_cast(walk & 0xFF); @@ -101,7 +101,7 @@ constexpr int32_t map32(int32_t v, int32_t inLo, int32_t inHi, int32_t outLo, in // in an int32 subtraction, so computing the spans in 32 bits overflows at the extremes. The // product of two 32-bit spans fits in int64 for every range this maps between: an extent, a // byte, a band count, a frequency. Mapping a FULL int32 range onto another full int32 range - // would exceed it (offset and outSpan both approach 2^32), which no caller does — the widest + // would exceed it (offset and outSpan both approach 2^32), which no caller does: the widest // real case is a 16-bit phase onto a grid extent, five orders of magnitude short of it. const int64_t inSpan = static_cast(inHi) - static_cast(inLo); const int64_t outSpan = static_cast(outHi) - static_cast(outLo); @@ -117,7 +117,7 @@ constexpr int32_t map32(int32_t v, int32_t inLo, int32_t inHi, int32_t outLo, in /// once: the per-tick product `dt * bpm * scale / 60000` rounds to ZERO when dt is under a /// millisecond (every desktop frame, and an ESP32 running a small fixture fast), so the animation /// silently freezes. The fix all nine converged on is to accumulate the RAW numerator in 64 bits and -/// divide only at the read — which is what this does. +/// divide only at the read: which is what this does. /// /// Usage: one member per animated quantity; call `advance(elapsedMs, rate)` once per frame, then /// read as often as needed. `rate` is BPM-like: the caller's speed control, whatever its units. @@ -125,7 +125,7 @@ class BeatPhase { public: /// Accumulate this frame's contribution. Safe to call with a rate of 0 (the phase holds). /// The first call only establishes the time base, so a large `elapsed` at startup cannot jump - /// the phase — the same first-tick guard three of the nine effects carried by hand. + /// the phase: the same first-tick guard three of the nine effects carried by hand. void advance(uint32_t elapsedMs, uint32_t rate) { if (!started_) { started_ = true; lastMs_ = elapsedMs; return; } const uint32_t dt = elapsedMs - lastMs_; // unsigned: correct across the millis() wrap @@ -133,7 +133,7 @@ class BeatPhase { num_ += static_cast(dt) * rate; } - /// The phase scaled by `scale` and divided late — `phase(256)` is the uint8 angle form + /// The phase scaled by `scale` and divided late: `phase(256)` is the uint8 angle form /// (256 = full turn) the effects use, `phase(65536)` the angle16 form. /// Returns the raw scaled value; the caller truncates to its angle width, which is where the /// free wrap happens. @@ -146,7 +146,7 @@ class BeatPhase { /// scales for its second axis). uint64_t numerator() const { return num_; } - /// Feed a pre-scaled product directly — for the callers whose rate already carries a factor. + /// Feed a pre-scaled product directly: for the callers whose rate already carries a factor. void advanceScaled(uint32_t elapsedMs, uint64_t scaledRate) { if (!started_) { started_ = true; lastMs_ = elapsedMs; return; } const uint32_t dt = elapsedMs - lastMs_; @@ -163,14 +163,14 @@ class BeatPhase { }; /// Integer square root of a 32-bit value, rounded down. Binary restoring method: no divide, no -/// float, ~16 iterations worst case — which matters because the ESP32 has no fast divide and effects +/// float, ~16 iterations worst case: which matters because the ESP32 has no fast divide and effects /// call this per pixel when they need a true distance. /// /// PaintBrushEffect hand-rolled this; it lives here so a caller reaching for a distance gets the /// same one. Where a comparison against a threshold will do (is this point inside a circle?), prefer -/// comparing SQUARED values and skip this entirely — measured on hardware, the squared form is ~14 +/// comparing SQUARED values and skip this entirely: measured on hardware, the squared form is ~14 /// cycles/pixel against ~108 for the sqrt. -/// Integer square root of a 64-bit value — the wide form, for values whose square exceeds 32 bits. +/// Integer square root of a 64-bit value: the wide form, for values whose square exceeds 32 bits. /// `dist16` needs it: two coordinates of only 70000 already square-and-sum past UINT32_MAX, so the /// 32-bit form saturated at 65535 and reported the wrong distance well inside normal range. /// @@ -208,9 +208,9 @@ constexpr uint32_t isqrt(uint32_t v) { // `atan2_8`/`dist8` in math8.h are the 8-bit forms: an octant atan2 and an OCTAGONAL distance // (max + half-min), which is up to ~12% off a true radius and saturates at 255. On a small panel // neither shows; on a large one the octagon reads as visible corners on what should be a circle, -// and the saturation flattens everything past 255 lights from the centre. +// and the saturation flattens everything past 255 lights from the center. // -// These are the 16-bit forms for addressing a grid in polar coordinates — the vocabulary behind +// These are the 16-bit forms for addressing a grid in polar coordinates: the vocabulary behind // every radial look: rings, spirals, rotation, kaleidoscopes, tunnels, radial wipes, a spectrum // bent around a circle. `atan16` returns an angle16 (65536 = one turn) so it feeds sin16 and the // palette directly; `dist16` returns a true Euclidean radius via isqrt. Both are general grid @@ -229,10 +229,10 @@ inline constexpr int16_t atan16_octant[33] = { /// Angle of (x, y) as an angle16, measured counter-clockwise from +x. Full 16-bit resolution, so a /// gradient swept around the circle has no visible steps on a large fixture. inline angle16 atan16(int32_t y, int32_t x) { - if (x == 0 && y == 0) return 0; // the centre has no direction + if (x == 0 && y == 0) return 0; // the center has no direction // Fold into the first octant, remembering which one, then interpolate the arctangent there. // Unsigned magnitudes: negating INT32_MIN has no int32 representation, so the obvious - // `x < 0 ? -x : x` is undefined behaviour at exactly one input per axis. Widening first keeps + // `x < 0 ? -x : x` is undefined behavior at exactly one input per axis. Widening first keeps // the fold exact across the whole range. // // `0u - v` rather than `-v`: the unary form is well-defined on an unsigned (it is modular @@ -260,7 +260,7 @@ inline angle16 atan16(int32_t y, int32_t x) { return static_cast(a); } -/// True Euclidean distance from the origin to (dx, dy) — a real radius, not the octagon `dist8` +/// True Euclidean distance from the origin to (dx, dy): a real radius, not the octagon `dist8` /// approximates, and it does not saturate at 255. inline uint32_t dist16(int32_t dx, int32_t dy) { // Squared in UNSIGNED 64-bit and rooted with the 64-bit isqrt. The obvious 32-bit form is wrong @@ -297,7 +297,7 @@ constexpr frac16 easeInOutCubic(frac16 t) { return static_cast(65535ull - ((4ull * u * u * u) >> 32)); } -/// Quadratic ease out: fast start, gentle settle — the "arrives and rests" curve. +/// Quadratic ease out: fast start, gentle settle. The "arrives and rests" curve. /// /// The squared term divides by 65535 rather than shifting by 16: `(65535·65535) >> 16` is 65534, /// which would leave the curve one unit short at t=0 and start a fade barely lit. @@ -309,7 +309,7 @@ constexpr frac16 easeOutQuad(frac16 t) { // --- Followers and meters --------------------------------------------------------------------- /// A one-pole low-pass follower: `current` moves a fraction of the way toward `target` each frame. -/// This is how a value stops jittering — a meter, a control, a beat-driven size. `rate` is 0..255, +/// This is how a value stops jittering: a meter, a control, a beat-driven size. `rate` is 0..255, /// where 255 snaps instantly and small values glide. /// /// Deliberately frame-rate dependent in its simple form, which is what every LED codebase uses; a @@ -320,7 +320,7 @@ constexpr uint8_t smoothFollow(uint8_t current, uint8_t target, uint8_t rate) { const int32_t delta = static_cast(target) - current; // Round the step AWAY from zero so every nonzero rate makes progress. A plain shift truncates // toward zero, which for a small rate means an upward step rounds to 0 and the value never - // rises, while a downward step of the same size rounds to -1 and does move — a follower that + // rises, while a downward step of the same size rounds to -1 and does move: a follower that // could fall but not climb (measured: rate 1 moved 100->99 but left 0 at 0). const int32_t step = (delta * rate) / 256; if (step != 0) return static_cast(current + step); @@ -328,7 +328,7 @@ constexpr uint8_t smoothFollow(uint8_t current, uint8_t target, uint8_t rate) { } /// The falling-peak meter: rise INSTANTLY to a new high, then decay slowly. The asymmetry is the -/// whole point — a peak that eased upward would miss transients, and one that dropped instantly +/// whole point: a peak that eased upward would miss transients, and one that dropped instantly /// would show nothing to read. Every VU meter with a floating peak dot is this function. constexpr uint8_t peakHold(uint8_t peak, uint8_t value, uint8_t decay) { if (value > peak) return value; // instant attack @@ -337,7 +337,7 @@ constexpr uint8_t peakHold(uint8_t peak, uint8_t value, uint8_t decay) { // --- Position-addressable randomness ----------------------------------------------------------- -/// A hash of up to four integers to 0..65535 — random-LOOKING but a pure function of its inputs, so +/// A hash of up to four integers to 0..65535: random-LOOKING but a pure function of its inputs, so /// the same pixel gets the same value on every device and every frame. /// /// This is what a stream RNG cannot do: `Random8` advances per CALL, so a device that renders one @@ -353,7 +353,7 @@ constexpr uint16_t hashInt(uint32_t a, uint32_t b = 0, uint32_t c = 0, uint32_t return static_cast(h >> 16); } -/// Fold an angle into `segments` mirrored wedges — the kaleidoscope. Any field sampled through +/// Fold an angle into `segments` mirrored wedges: the kaleidoscope. Any field sampled through /// this gains n-fold symmetry, which is why a mediocre noise field becomes a mandala for the cost /// of one modulo: the fold is applied to the ANGLE, and everything downstream is unchanged. /// @@ -364,7 +364,7 @@ inline angle16 kaleido(angle16 a, uint8_t segments) { const uint32_t wedge = 65536u / segments; uint32_t within = a % wedge; // position inside this wedge const uint32_t index = a / wedge; - // Reflect alternate wedges and return the FOLDED coordinate — deliberately one wedge wide, not + // Reflect alternate wedges and return the FOLDED coordinate: deliberately one wedge wide, not // the original angle. That is what a kaleidoscope is: every wedge maps onto the same range, so a // field sampled through it repeats n times around the circle, and mirroring every other wedge is // what makes the seams join rather than showing a hard edge. A caller that wants the full turn @@ -382,7 +382,7 @@ inline angle16 kaleido(angle16 a, uint8_t segments) { // it. These are the same textbook shapes at full 16-bit range, so a position scales to any axis // length without the caller rescaling. -// Triangle wave: 0 to 65535 over the first half of the cycle and back over the second — the fold of +// Triangle wave: 0 to 65535 over the first half of the cycle and back over the second. The fold of // a ramp, the 16-bit twin of triwave8. Cheaper and sharper than a sine where an effect wants a // linear sweep out and back. constexpr uint16_t triwave16(uint16_t i) { @@ -391,7 +391,7 @@ constexpr uint16_t triwave16(uint16_t i) { } // beat16: a 0..65535 sawtooth completing `bpm` cycles per minute, measured from `timebase`. -// The 16-bit twin of beat8 — same FastLED semantics, full range, so `beat16(bpm) * n >> 16` lands +// The 16-bit twin of beat8: same FastLED semantics, full range, so `beat16(bpm) * n >> 16` lands // on any axis length evenly rather than in 1/256ths. constexpr uint16_t beat16(uint8_t bpm, uint32_t ms, uint32_t timebase = 0) { if (bpm == 0) return 0; @@ -401,4 +401,47 @@ constexpr uint16_t beat16(uint8_t bpm, uint32_t ms, uint32_t timebase = 0) { return static_cast((pos * 65536u) / period); } +/// Half-life decay: the fraction of a value that SURVIVES after `dtMs`, as a 0..65536 weight. +/// +/// `0.5^(dt / halfLifeMs)`, the textbook exponential decay written so the caller states the thing +/// they actually mean: "half of it is gone after N milliseconds". Framerate independence is then a +/// property of the formula rather than of the caller's arithmetic, because the exponent carries dt: +/// two 10 ms steps and one 20 ms step reach the same place, which `decay(2·dt) == decay(dt)²` pins. +/// +/// This exists because the per-frame form does not survive a fast device. A "keep 240 of 255 each +/// frame" fade is a decay whose half-life moves with the framerate, so the same setting is a long +/// tail at 60 fps and an instant clear at 1200; the effects that hit this carry a remainder by hand +/// (ParticlesEffect's `fadeCarry_`, and the Layer's own) to stop the fade truncating to nothing. +/// +/// Returns 65536 (unchanged) for a zero dt or a zero half-life, and 0 once the value could not +/// survive rounding anyway: a caller multiplies by this and shifts down 16. +inline uint32_t halfLifeKeep(uint32_t dtMs, uint32_t halfLifeMs) { + if (dtMs == 0 || halfLifeMs == 0) return 65536; + // 2^-x by table lookup on the fraction, then a shift for the whole halvings. 33 entries at + // 1/32 of a half-life, linearly interpolated: measured worst error 3.95 of 65536 (0.006%), + // which is under one part in 255 at the byte width every caller narrows to. + // Held as the DROP below 65536, so the first entry (a full 65536, one past uint16_t) fits the + // same 16-bit table as the rest rather than widening every entry to carry one value. + static constexpr uint16_t kPow2Drop[33] = { + 0, 1404, 2779, 4123, 5439, 6727, 7987, 9220, + 10427, 11608, 12763, 13894, 15001, 16084, 17143, 18180, + 19195, 20188, 21160, 22111, 23041, 23952, 24843, 25715, + 26568, 27403, 28220, 29020, 29802, 30568, 31317, 32050, + 32768, + }; + // How many half-lives have passed, in 1/32nds. A long stall shifts the result to zero rather + // than wrapping: 32 halvings is already below one part in 4 billion. + const uint64_t units = (static_cast(dtMs) * 32u) / halfLifeMs; + const uint32_t whole = static_cast(units >> 5); + if (whole >= 32) return 0; + const uint32_t i = static_cast(units & 31u); + // Interpolate between the table's entries on the sub-1/32 remainder, which the multiply above + // has already discarded, so recover it at the finer scale the division allows. + const uint64_t fine = (static_cast(dtMs) * 32u * 256u) / halfLifeMs; + const uint32_t f = static_cast(fine & 255u); + const uint32_t a = kPow2Drop[i], b = kPow2Drop[i + 1]; + const uint32_t drop = a + (((b - a) * f) >> 8); + return (65536u - drop) >> whole; +} + } // namespace mm diff --git a/src/core/moonlive/MoonLiveBuiltins.h b/src/core/moonlive/MoonLiveBuiltins.h index 0db7c844..3de32e3d 100644 --- a/src/core/moonlive/MoonLiveBuiltins.h +++ b/src/core/moonlive/MoonLiveBuiltins.h @@ -4,16 +4,16 @@ #include #include // the builtin-table overflow diagnostic -// MoonLive built-in table — the neutral seam by which a HOST registers the functions a script +// MoonLive built-in table: the neutral seam by which a HOST registers the functions a script // may call (the ESPLiveScript `arti_external_function` / ARTI / doc §3.4 model). The core // compiler knows only *that a name maps to a descriptor*; it owns no function names and no // domain semantics. The light domain (or any other host) populates the table with its own -// vocabulary — setRGB/fill/random16 for LEDs, something else for a display or a sensor. +// vocabulary: setRGB/fill/random16 for LEDs, something else for a display or a sensor. // // A descriptor says how a call lowers: -// - Call — a pure host helper: lower to a generic call to `fn` (a C function pointer), +// - Call : a pure host helper: lower to a generic call to `fn` (a C function pointer), // one argument in, one result out. (random16, later sin/cos/hsvToRgb…) -// - Inline — a routine the backend emits inline (no per-call overhead — the hot-path +// - Inline: a routine the backend emits inline (no per-call overhead: the hot-path // writers): the descriptor carries an `inlineOp` TAG, a neutral opcode the // per-ISA lowering knows how to emit. The core never interprets the tag; it just // threads it through. The light domain decides which names map to which tags. @@ -26,7 +26,7 @@ namespace mm::moonlive { // A script member's TYPE. A semantic, not a storage width: every SCALAR occupies one uniform // 4-byte slot whatever its type, and only ARRAYS pack by element. That is what removes the width // machinery a script used to spell for itself (uint8_t/uint16_t/int16_t), which is where four -// bugs came from — a wrapped member, a sentinel read through a 16-bit window, a one-byte store +// bugs came from: a wrapped member, a sentinel read through a 16-bit window, a one-byte store // into a two-byte member, a sign-blind array load. Here rather than with the IR because a builtin // descriptor names the type its by-reference argument takes. // @@ -50,7 +50,7 @@ constexpr uint8_t ctrlSlotBytes(CtrlType) { return 4; } -// Neutral inline opcodes — "store shapes a backend can emit", not "LED operations". A host maps +// Neutral inline opcodes: "store shapes a backend can emit", not "LED operations". A host maps // its function names onto these; a backend implements them. StoreElem = store N bytes (one // element) at a computed index; FillElems = a counted loop writing one element per slot. The // core treats them as opaque tags; the per-ISA backend and the host both know the element is 3 @@ -70,7 +70,7 @@ enum class BuiltinKind : uint8_t { Call, Inline }; // // The compiler already evaluates every argument into a CONSECUTIVE frame slot (the stack machine's // argument staging), so the call only has to say where they start. Each backend materialises that -// address from its own frame pointer — the arithmetic spillStore/spillLoad already do — which means +// address from its own frame pointer: the arithmetic spillStore/spillLoad already do: which means // the number of arguments is bounded by frame slots rather than by how many the calling convention // can carry. `draw::line` takes seven; a fixed three would have forced it to be split into bespoke // halves, and every power function added after it would inherit the same distortion. @@ -81,7 +81,7 @@ enum class BuiltinKind : uint8_t { Call, Inline }; // // `arena` is the control/system-variable block, as before. // `args` points at `argc` frame slots. The element type is uintptr_t because a frame slot IS one -// machine word — 8 bytes on arm64, 4 on Xtensa and RISC-V — and the backends store a whole word per +// machine word: 8 bytes on arm64, 4 on Xtensa and RISC-V: and the backends store a whole word per // slot. Reading them as uint32_t made args[1] land on the upper half of slot 0 on a 64-bit host, // which is a value of 0 rather than the argument: correct on both devices, wrong on the desktop. using HostCallFn = uint32_t (*)(const uintptr_t* args, uint32_t argc, const uint8_t* arena); @@ -112,7 +112,7 @@ struct Builtin { // speaks fixed declares it here and the checker follows. // // Almost every builtin is whole numbers: a channel, a light index, an angle16, a count. The - // exceptions are the ones a shader hands coordinates to — uvX/uvY return a fixed coordinate, + // exceptions are the ones a shader hands coordinates to: uvX/uvY return a fixed coordinate, // and escape() takes four of them. uint8_t fixedArgs = 0; bool fixedReturn = false; @@ -121,29 +121,30 @@ struct Builtin { /// Assert a host's builtin table did not silently drop a registration. /// /// `BuiltinTable::add()` returns false when the table is full, and a host registers dozens of -/// names in a row without checking each one — so an overflow used to surface as a script failing +/// names in a row without checking each one: so an overflow used to surface as a script failing /// with "unknown function" for a builtin that plainly exists in the source. This turns it into a /// failure at the point of registration. A host calls it once, after building its table. #define MM_ASSERT_NO_BUILTIN_OVERFLOW(t) \ do { \ if ((t).full()) { \ - std::printf("MoonLive: builtin table FULL at %u entries — a registration " \ + std::printf("MoonLive: builtin table FULL at %u entries, a registration " \ "was dropped. Raise BuiltinTable::kMax.\n", \ static_cast((t).registered())); \ } \ } while (0) // A fixed-capacity table the host fills and the compiler reads. No heap; a host registers a -// handful of functions. Lookup is by name (linear — the table is tiny). +// handful of functions. Lookup is by name (linear: the table is tiny). struct BuiltinTable { - // 64, not 16. The light domain filled all 16, and a table at capacity fails SILENTLY: add() - // returned false, no caller checked it, and the script found out as "unknown function" at - // compile time with nothing pointing at the real cause. 64 is what the power-functions spec - // asks for; the cost is `sizeof(Builtin) * 48` more in a table the host builds once. - static constexpr uint8_t kMax = 64; + // 96, not 16 and no longer 64. The light domain filled all 16, and a table at capacity fails + // SILENTLY: add() returned false, no caller checked it, and the script found out as "unknown + // function" at compile time with nothing pointing at the real cause. 64 was reached at 61 of 64 + // when the flow builtins arrived (2026-09-04), which is too little headroom for a table that + // fails this way; the cost is `sizeof(Builtin)` per unused slot in a table the host builds once. + static constexpr uint8_t kMax = 96; Builtin items[kMax]; uint8_t count = 0; - bool overflowed = false; // set when an add() was DROPPED — see full() + bool overflowed = false; // set when an add() was DROPPED: see full() bool add(const Builtin& b) { if (b.name == nullptr) return false; // a null name would null-deref in find() @@ -153,7 +154,7 @@ struct BuiltinTable { } /// True when a registration was dropped for lack of room. A host builds its table once at - /// startup, so this is asserted there rather than checked per call — the point is that + /// startup, so this is asserted there rather than checked per call: the point is that /// running out of table is LOUD, which is exactly what the 16-entry version was not. bool full() const { return overflowed; } @@ -194,13 +195,13 @@ static constexpr uint8_t kMaxCtrls = 8; // records: how many members/co // [kCtrlBytes .. kCtrlBytes+kMaxSysVars) host system variables (width/height/…), offset assigned // by the host and CONSTANT for the program's life // [kDepthSlot] the recursion depth counter, owned by the emitted code -// System variables sit ABOVE the script's range so that adding or removing a control — which -// renumbers every control offset — cannot move them. The binding caches their slot pointers, so a +// System variables sit ABOVE the script's range so that adding or removing a control: which +// renumbers every control offset: cannot move them. The binding caches their slot pointers, so a // moving offset would silently write the wrong byte. // The emitted-code buffer is sized to THE SCRIPT (codeCapFor below), not to a constant, for the -// same reason the IR op array is: the backends differ by up to 1.9x on identical source — RISC-V is +// same reason the IR op array is: the backends differ by up to 1.9x on identical source: RISC-V is // fixed-4-byte and saves the whole register pool around every call where Xtensa has 3-byte narrow -// forms — so any single number is either too small for the sparsest backend or wasteful for the +// forms: so any single number is either too small for the sparsest backend or wasteful for the // densest. A fixed 2 KB let `plasma.mle` run on an S3 and desktop and REFUSED it on an S31 by 96 // bytes, which is the second time one constant made a script's portability depend on its ISA. // @@ -210,7 +211,7 @@ static constexpr size_t kCodeCap = 16384; /// Bytes to reserve for a script of `tokens` tokens. Over-estimating costs one cold-path allocation /// that is freed when the compile ends; under-estimating fails a script that would have fit, so the -/// direction of the error is deliberate — the same rule the IR's op estimate follows. +/// direction of the error is deliberate: the same rule the IR's op estimate follows. /// /// 48 bytes/token, measured across every shipped script on all three backends with `countTokens` /// (which skips comments, so a long header does not inflate the count). The densest is @@ -274,7 +275,7 @@ static constexpr uint8_t kMaxCallDepth = 32; static constexpr uint8_t kArenaBytes = kCtrlBytes + kMaxSysVars * kSysVarBytes + 1; // +1: kDepthSlot -/// A name the HOST defines and the script only reads: `width`, `height`, `depth`. Reserved — a +/// A name the HOST defines and the script only reads (`width`, `height`, `depth`). Reserved: a /// script cannot declare one, so the name means the same thing in every script (the `t` rule, one /// construct wider). Distinct from a control: nobody sets it in the UI, and it never appears in /// declaredControls(), so no binding has to hide it. @@ -285,7 +286,7 @@ static constexpr uint8_t kArenaBytes = kCtrlBytes + kMaxSysVars * kSysVarBytes /// declaring it. enum class SysVarKind : uint8_t { Arena, // a byte in the controls arena the binding writes per frame (width/height/depth) - Arg, // an argument register the host passes on every run (t) — costs no instruction + Arg, // an argument register the host passes on every run (t): costs no instruction }; struct SysVar { @@ -294,7 +295,7 @@ struct SysVar { uint8_t where = 0; // Arena: byte offset into the arena. Arg: the VReg (kArg0..kArg4). }; -/// The system variables one host domain defines. Same shape and lookup as BuiltinTable — a host +/// The system variables one host domain defines. Same shape and lookup as BuiltinTable: a host /// hands the compiler both, and the compiler resolves names against them without knowing the domain. struct SysVarTable { // Bounded by the arena's system range, not chosen independently: a host that could register diff --git a/src/core/noise.h b/src/core/noise.h index 02bdaa01..ed46fc31 100644 --- a/src/core/noise.h +++ b/src/core/noise.h @@ -412,4 +412,37 @@ inline uint8_t warp8(uint32_t x, uint32_t y, uint16_t strength, uint8_t octaves return warpImpl<2>(x, y, 0u, strength, octaves); } +/// Curl of a noise potential: a velocity field that cannot pile up or thin out. +/// +/// The perpendicular gradient of a scalar field (Bridson, "Curl-Noise for Procedural Fluid Flow", +/// SIGGRAPH 2007). Taking the gradient of a potential and turning it 90 degrees gives a field whose +/// divergence is zero BY CONSTRUCTION: whatever flows into a region flows out again. That is what +/// separates it from sampling noise straight into a velocity, where the field has sources and sinks +/// and anything carried by it collects in the sinks and drains from the sources, which looks like +/// clumping rather than flow. +/// +/// The output is scaled by `strength`, in the caller's own units (sub-pixels per frame for a +/// transport). `eps` is the sampling distance for the central difference, in the same 16.16 +/// coordinates as the field: too small and the difference is quantization noise, too large and the +/// curl is of a blurrier field than the one being sampled. The default is a sixteenth of a cell. +inline void curl16(uint32_t x, uint32_t y, uint32_t z, int32_t strength, + int32_t& vx, int32_t& vy, uint32_t eps = 4096) { + // Two central differences of the potential. dP/dy becomes the x component and -dP/dx the y, + // which is the 90-degree turn: the flow runs ALONG the potential's contours rather than up them. + const int32_t dy = static_cast(inoise16(x, y + eps, z)) + - static_cast(inoise16(x, y - eps, z)); + const int32_t dx = static_cast(inoise16(x + eps, y, z)) + - static_cast(inoise16(x - eps, y, z)); + // The differences span roughly a quarter of the range at the default eps, so >>15 keeps the + // result near `strength` rather than swamping it. A caller wanting a wilder field raises eps. + vx = (dy * strength) >> 15; + vy = (-dx * strength) >> 15; +} + +/// The 2D form: the same field at a fixed z, which is what a panel wants. +inline void curl16(uint32_t x, uint32_t y, int32_t strength, int32_t& vx, int32_t& vy, + uint32_t eps = 4096) { + curl16(x, y, 0u, strength, vx, vy, eps); +} + } // namespace mm diff --git a/src/light/draw.h b/src/light/draw.h index a369e735..8b916b34 100644 --- a/src/light/draw.h +++ b/src/light/draw.h @@ -4,25 +4,25 @@ #include "light/layers/Buffer.h" // Buffer (flat light array) #include "core/color.h" // RGB, scale8 #include "core/math8.h" -#include "core/math16.h" // isqrt — true-distance SDFs; the squared forms avoid it // qadd8 — saturating add for blur's seep accumulation -#include "light/Palette.h" // blend(RGB,RGB,amt) — for blendPixel -#include "light/fonts.h" // fonts::Font — bitmap glyph tables for draw::text +#include "core/math16.h" // isqrt: true-distance SDFs; halfLifeKeep: the decay weight +#include "light/Palette.h" // blend(RGB,RGB,amt): for blendPixel +#include "light/fonts.h" // fonts::Font: bitmap glyph tables for draw::text -#include // std::reverse — in-place rotation for a wrapping scroll -#include // std::memmove/memcpy/memset — the scroll's run moves +#include // std::reverse: in-place rotation for a wrapping scroll +#include // std::memmove/memcpy/memset: the scroll's run moves -// Geometry draw primitives for effects/modifiers: set a pixel, draw a line — bounds-clipped, +// Geometry draw primitives for effects/modifiers: set a pixel, draw a line: bounds-clipped, // integer-only, working 1D→3D against the flat light Buffer. The "core absorbs the hard part" // rule applied to drawing: the Bresenham + clipping lives here once, so an effect calls // drawLine() instead of re-rolling it. Light-domain (it touches the light Buffer), not core. // // Prior art: the line algorithm is Bresenham (1962) generalised to 3D (the textbook DDA-error -// form). FastLED keeps draw in its 2D/matrix add-ons, not core — same split here. +// form). FastLED keeps draw in its 2D/matrix add-ons, not core: same split here. // // The Buffer is a flat array of `count` lights × `cpl` channels; the grid SHAPE (w,h,d) lives on // the Layer/Layout, so the caller passes `dims` (the Coord3D extent). Index order matches the // engine: off = (z·h·w + y·w + x)·cpl. A pixel outside [0,w)×[0,h)×[0,d) is silently clipped, so -// a line that runs off the grid just stops drawing — no out-of-bounds write (the robustness rule). +// a line that runs off the grid just stops drawing: no out-of-bounds write (the robustness rule). namespace mm::draw { @@ -30,7 +30,7 @@ namespace mm::draw { /// The surface a draw call writes to: a buffer plus the grid dimensions that address it. /// /// Today every draw call takes `(Buffer&, Coord3D dims)` as two independent arguments that nothing -/// checks for agreement — pass dims from one layer with a buffer from another, or (far likelier) a +/// checks for agreement: pass dims from one layer with a buffer from another, or (far likelier) a /// dims computed with the depth guard and one without, and the result is silent misaddressing. /// Binding them into one value makes the mismatch unrepresentable rather than merely detected. /// @@ -39,7 +39,7 @@ namespace mm::draw { /// /// **Passed BY VALUE, deliberately.** It is a small POD (pointer + 3 int16 + 2 small ints) and /// measured 62 instructions in a per-pixel fill loop against 67 for today's separate arguments and -/// 69 for a `const Canvas&` — a reference member forces the extents to be re-read from memory +/// 69 for a `const Canvas&`: a reference member forces the extents to be re-read from memory /// because the compiler must assume they alias the buffer being written, while a by-value POD stays /// in registers. So the abstraction is not a cost here; it is a small win. struct Canvas { @@ -55,7 +55,7 @@ struct Canvas { buf.channelsPerLight()}; } - /// Byte offset of a coordinate, or `bytes` when it is outside the grid — the one address + /// Byte offset of a coordinate, or `bytes` when it is outside the grid: the one address /// computation every draw call shares, so the addressing rule (x fastest, then y, then z) has a /// single home. size_t offsetOf(Coord3D p) const { @@ -65,7 +65,7 @@ struct Canvas { } }; -/// One pixel, clipped to the grid — the Canvas form. Same semantics as the (Buffer&, dims) overload +/// One pixel, clipped to the grid: the Canvas form. Same semantics as the (Buffer&, dims) overload /// below, which remains until the migration completes and is then removed (a permanent two-API /// window would be worse than either shape alone). inline void pixel(const Canvas& cv, Coord3D p, RGB c) { @@ -90,7 +90,7 @@ namespace detail { /// Buffer and Canvas forms of `line` share one error-carry loop instead of drifting apart. /// /// `shorten` (0..255) pulls b back toward a by that fraction, with the *2 rounding the original -/// used — the perspective/length lever effects animate. +/// used: the perspective/length lever effects animate. template inline void walkLine(Coord3D a, Coord3D b, uint8_t shorten, PlotFn plot) { if (shorten == 0) return; @@ -137,7 +137,7 @@ inline void walkLine(Coord3D a, Coord3D b, uint8_t shorten, PlotFn plot) { } // namespace detail // One pixel, clipped to the grid. Writes R/G/B where channels fit (cpl may be 1..N); extra -// channels (e.g. a W in RGBW) are left as-is — the driver derives white, same as effects do. +// channels (e.g. a W in RGBW) are left as-is: the driver derives white, same as effects do. inline void pixel(Buffer& buf, Coord3D dims, Coord3D p, RGB c) { if (p.x < 0 || p.y < 0 || p.z < 0 || p.x >= dims.x || p.y >= dims.y || p.z >= dims.z) return; const uint8_t cpl = buf.channelsPerLight(); @@ -152,11 +152,11 @@ inline void pixel(Buffer& buf, Coord3D dims, Coord3D p, RGB c) { // A straight line a→b, clipped to the grid. 3D Bresenham: step along the dominant axis and carry // an integer error term per other axis (the textbook generalisation of the 2D line). Works for -// 1D (a row), 2D (a plane), and 3D (a volume) without special-casing — a degenerate axis just +// 1D (a row), 2D (a plane), and 3D (a volume) without special-casing: a degenerate axis just // never steps. Endpoints are inclusive. // // `shorten` (0..255, default 255 = full line) draws only the first shorten/255 of the way from a -// toward b — the far endpoint is pulled back toward `a`. 255 = whole line, 128 ≈ half, 1 = the +// toward b: the far endpoint is pulled back toward `a`. 255 = whole line, 128 ≈ half, 1 = the // start pixel, 0 = nothing. This is the perspective/length lever (MoonLight's `depth` param): // effects animate the drawn tip by varying `shorten`, so a fixed pair of endpoints traces a // sweeping partial segment over successive frames. (WLEDMM's *2-rounding shorten, generalised 3D.) @@ -192,8 +192,8 @@ inline void blendPixel(Buffer& buf, Coord3D dims, Coord3D p, RGB c, uint8_t amt) d[off + 0] = out.r; d[off + 1] = out.g; d[off + 2] = out.b; } -// Add a color into a pixel, saturating (a bright pixel can't wrap to dark) — WLED's addRGB / additive -// setPixelColor. Used to re-stamp a light on top of a blur so its centre stays bright. Clipped like pixel(). +// Add a color into a pixel, saturating (a bright pixel can't wrap to dark): WLED's addRGB / additive +// setPixelColor. Used to re-stamp a light on top of a blur so its center stays bright. Clipped like pixel(). inline void addPixel(Buffer& buf, Coord3D dims, Coord3D p, RGB c) { const size_t off = offsetOf(buf, dims, p); if (off + 2 >= buf.bytes()) return; @@ -203,7 +203,7 @@ inline void addPixel(Buffer& buf, Coord3D dims, Coord3D p, RGB c) { d[off + 2] = qadd8(d[off + 2], c.b); } -// Fade the whole buffer toward black by amt/255 — one pass over the bytes. This is the primitive the +// Fade the whole buffer toward black by amt/255: one pass over the bytes. This is the primitive the // Layer's once-per-frame collected fade (Layer::fadeToBlackBy) applies; effects request a fade through // the Layer (which MINs the amount across effects and calls this once) rather than calling it directly. inline void fade(Buffer& buf, uint8_t amt) { @@ -213,17 +213,17 @@ inline void fade(Buffer& buf, uint8_t amt) { for (size_t i = 0; i < n; i++) d[i] = scale8(d[i], keep); } -// Box blur, working 1D→3D against the flat Buffer — one unified primitive, not a blur1d/blur2d/blur3d +// Box blur, working 1D→3D against the flat Buffer: one unified primitive, not a blur1d/blur2d/blur3d // trio (the *common patterns first* / "primitives are 3D-aware" rule, same as draw::line). It runs a // separable seep pass along each axis whose extent is >1: a 1×N 1D layer blurs along y (its only // axis with extent>1); 2D along x then y; 3D along x, y, z. `amt` (0 = none, 255 = max) is split // keep=255-amt / seep=amt>>1 per pixel. // -// Algorithm: the canonical FastLED blur1d single-forward-pass with carryover — each pixel keeps +// Algorithm: the canonical FastLED blur1d single-forward-pass with carryover: each pixel keeps // `keep` of itself, seeps `seep` forward to the next pixel and `seep` back to the previous one, so -// one O(N) pass per axis approximates a symmetric box blur. Behaviour is identical to MoonLight's +// one O(N) pass per axis approximates a symmetric box blur. Behavior is identical to MoonLight's // blur1d/blurRows/blurColumns (verified against VirtualLayer.cpp); the speed comes from doing it on -// the raw bytes — a stride walk with three uint8 carried in registers, no per-pixel getRGB/setRGB/ +// the raw bytes: a stride walk with three uint8 carried in registers, no per-pixel getRGB/setRGB/ // Coord3D construction (the overhead that makes a generic-layer blur an FPS killer). Prior art: // FastLED's blur1d (Mark Kriegsman), the recognisable carryover-seep; our byte-level implementation. // @@ -256,7 +256,7 @@ inline void blurAxis(uint8_t* d, size_t cpl, size_t len, size_t stride, } } -// Blur the whole buffer by `amt`, separably along every axis with extent >1 (x, then y, then z — +// Blur the whole buffer by `amt`, separably along every axis with extent >1 (x, then y, then z , // MoonLight's blur2d order, extended to z). One call covers 1D/2D/3D. Off the per-pixel-effect path. inline void blur(Buffer& buf, Coord3D dims, uint8_t amt) { if (amt == 0) return; @@ -269,7 +269,7 @@ inline void blur(Buffer& buf, Coord3D dims, uint8_t amt) { if (static_cast(w * h * z) * cpl > buf.bytes()) return; // dims/buffer mismatch guard // x-pass: each (y,z) line is `w` pixels, stride cpl; lines start every w·cpl bytes, h·z of them. blurAxis(d, cpl, w, cpl, h * z, w * cpl, amt); - // y-pass: each (x,z) line is `h` pixels, stride w·cpl. Lines: for each z, the w columns — start + // y-pass: each (x,z) line is `h` pixels, stride w·cpl. Lines: for each z, the w columns: start // offsets are z·(h·w·cpl) + x·cpl. Walk them as one run of (w·z) lines stepping by cpl, but the // z blocks aren't contiguous in column-start, so loop z outside. for (size_t zz = 0; zz < z; zz++) @@ -303,7 +303,7 @@ inline void glyph(Buffer& buf, Coord3D dims, const fonts::Font& font, char ch, l const uint8_t bits = rows[ry]; // Columns are MSB-first: the LEFTMOST glyph column (rx=0) is bit 7, the next bit 6, … so // read column rx from bit (7 - rx). (Reading (rx + 8-width) instead mirrors each glyph - // left-to-right — a 'b' renders as a 'd'.) + // left-to-right: a 'b' renders as a 'd'.) for (uint8_t rx = 0; rx < font.width; rx++) if ((bits >> (7 - rx)) & 0x01) pixel(buf, dims, {static_cast(x + rx), static_cast(y + ry), 0}, c); @@ -333,7 +333,7 @@ inline lengthType text(Buffer& buf, Coord3D dims, const fonts::Font& font, const // ---- Canvas overloads -------------------------------------------------------------------------- // The Canvas forms of the primitives above. Most carry their OWN implementation rather than // forwarding to the (Buffer&, dims) form, because `Canvas` holds a raw pointer where the older -// signatures take a Buffer&. That means a pair CAN drift, and one already did — the Canvas `blur` +// signatures take a Buffer&. That means a pair CAN drift, and one already did: the Canvas `blur` // looped its y-pass differently from the Buffer form until a reviewer caught it. `line` is the // exception: both forms share `detail::walkLine`, so its error-carry loop has exactly one home. // @@ -347,6 +347,57 @@ inline void fade(const Canvas& cv, uint8_t amt) { for (size_t i = 0; i < cv.bytes; i++) cv.data[i] = scale8(cv.data[i], keep); } +/// Decay every sample toward black by a HALF-LIFE: after `halfLifeMs`, half of it is gone. +/// +/// The framerate-independent form of `fade`, and the one to reach for on state that persists across +/// frames (a trail plane, an advected field). `fade` takes "how much to lose this frame", which +/// means the same setting is a long tail at 60 fps and an instant clear at 1200; this takes a +/// duration, so the picture is identical on any device and `dt` does the work. +/// +/// The weight is computed ONCE per call (`mm::halfLifeKeep`) and the loop is a multiply and a shift +/// per byte, so this costs what `fade` costs. +/// +/// **The 8-bit limit, measured (2026-09-04).** An 8-BIT buffer cannot hold this decay at a high +/// framerate, and no rounding rule fixes it. Decaying 200 over a 500 ms half-life in 500 ms of +/// frames, where the exact answer is 100: +/// +/// | frame | truncating | rounding | a 16-bit accumulator | +/// |---|---|---|---| +/// | 50 ms | 96 | 100 | 100 | +/// | 5 ms | 73 | 100 | 101 | +/// | 1 ms | **0** | **200** | 102 | +/// +/// Truncating loses a fraction every frame until a fast device erases the trail outright; rounding +/// puts it back every frame until the trail never decays and the effect turns solid, which is the +/// exact symptom `fade` already has. Both failures are the QUANTIZATION, not the weight: the value +/// is re-rounded to a byte hundreds of times a second. So an effect whose trail must survive at any +/// framerate keeps its plane WIDER than the layer (16 bits per channel in its own ScratchBuffer) +/// and narrows once on the way out, which is where the precision belongs. `decay` on a byte plane +/// is honest for a slow cadence (a 50 ms tick, or a half-life short enough that a frame's loss is +/// several counts) and is what the Layer's collected `fadeToBlackBy` already does. +inline void decay(const Canvas& cv, uint32_t halfLifeMs, uint32_t dtMs) { + const uint32_t keep = mm::halfLifeKeep(dtMs, halfLifeMs); + if (keep >= 65536) return; // nothing elapsed, or no half-life asked for + if (keep == 0) { std::memset(cv.data, 0, cv.bytes); return; } + for (size_t i = 0; i < cv.bytes; i++) + cv.data[i] = static_cast((static_cast(cv.data[i]) * keep) >> 16); +} + +/// The same decay over a 16-bit plane: the form a trail uses, and the one that holds at any +/// framerate (the table above). `n` is the number of 16-bit samples, not bytes. +/// +/// Separate from the Canvas form rather than a template over it, because the two are different +/// enough to be worth reading apart: this one owns no geometry, since a scratch plane is a flat +/// array its effect already knows the shape of. +inline void decay16(uint16_t* data, size_t n, uint32_t halfLifeMs, uint32_t dtMs) { + if (!data) return; + const uint32_t keep = mm::halfLifeKeep(dtMs, halfLifeMs); + if (keep >= 65536) return; + if (keep == 0) { std::memset(data, 0, n * sizeof(uint16_t)); return; } + for (size_t i = 0; i < n; i++) + data[i] = static_cast((static_cast(data[i]) * keep) >> 16); +} + /// Fill every light with one color, leaving any channel beyond RGB untouched. inline void fill(const Canvas& cv, RGB c) { if (cv.cpl == 0) return; // a 0-channel buffer has no color to write @@ -363,13 +414,13 @@ inline void blendPixel(const Canvas& cv, Coord3D p, RGB c, uint8_t amt) { pixel(cv, p, blend(cur, c, amt)); } -/// Saturating additive pixel — light adds, so this never wraps to black. +/// Saturating additive pixel: light adds, so this never wraps to black. inline void addPixel(const Canvas& cv, Coord3D p, RGB c) { const RGB cur = get(cv, p); pixel(cv, p, RGB{qadd8(cur.r, c.r), qadd8(cur.g, c.g), qadd8(cur.b, c.b)}); } -/// Separable box blur over every axis with extent > 1 — one call covers 1D/2D/3D. The axis passes +/// Separable box blur over every axis with extent > 1: one call covers 1D/2D/3D. The axis passes /// are the Buffer form's: the y-pass loops z on the OUTSIDE because a z-slice's column starts are /// not contiguous, which a single call cannot express. inline void blur(const Canvas& cv, uint8_t amt) { @@ -386,7 +437,7 @@ inline void blur(const Canvas& cv, uint8_t amt) { if (z > 1) blurAxis(cv.data, cpl, z, w * h * cpl, w * h, cpl, amt); // z } -/// A straight line a→b on a Canvas — the same 3D Bresenham the Buffer form runs, reached through +/// A straight line a→b on a Canvas: the same 3D Bresenham the Buffer form runs, reached through /// the shared walker below so the error-carry loop has exactly one home. inline void line(const Canvas& cv, Coord3D a, Coord3D b, RGB c, uint8_t shorten = 255) { detail::walkLine(a, b, shorten, [&](Coord3D p) { pixel(cv, p, c); }); @@ -396,13 +447,13 @@ inline void line(const Canvas& cv, Coord3D a, Coord3D b, RGB c, uint8_t shorten // // A field of N sources orbiting on sine paths, summed per pixel with an inverse-square falloff. // This is the standard implicit-surface primitive: anything that reads as fluid, merging, molten or -// organic is this field under a different coloring — blobs, plasma cores, glowing orbs, an audio +// organic is this field under a different coloring: blobs, plasma cores, glowing orbs, an audio // band driving a source's radius. Two effects use it today (they computed byte-identical fields // from two private copies of the loop) and differ ONLY in the coloring they apply, which is the // evidence for the seam: the field is shared, the coloring is the effect's own. // -// The oscillator tables stay with the CALLER, so a caller is free to drive sources from anything — -// a control, audio, a particle position — rather than from the sine paths the current callers use. +// The oscillator tables stay with the CALLER, so a caller is free to drive sources from anything , +// a control, audio, a particle position: rather than from the sine paths the current callers use. // A kernel that hard-coded one set of constants would have made every future effect look the same. // // Prior art: Jim Blinn's 1982 blobby model; the integer inverse-square form follows WLED's metaball @@ -415,8 +466,8 @@ struct BlobPath { uint8_t phaseY; }; -/// Evaluate blob centres for this frame into `outX`/`outY` (caller-sized to `count`). -inline void blobCentres(const BlobPath* paths, uint8_t count, uint8_t t, lengthType w, lengthType h, +/// Evaluate blob centers for this frame into `outX`/`outY` (caller-sized to `count`). +inline void blobCenters(const BlobPath* paths, uint8_t count, uint8_t t, lengthType w, lengthType h, int16_t* outX, int16_t* outY) { for (uint8_t b = 0; b < count; b++) { const uint8_t tb = static_cast(t * paths[b].speedMul); @@ -430,7 +481,7 @@ inline void blobCentres(const BlobPath* paths, uint8_t count, uint8_t t, lengthT /// caller passing a 24.8 sub-pixel radius squared would overflow. /// /// The field at one pixel: the sum over blobs of r²·64 / (d² + 1). The `+1` keeps a pixel sitting -/// exactly on a centre from dividing by zero, and the ·64 holds precision in the integer divide. +/// exactly on a center from dividing by zero, and the ·64 holds precision in the integer divide. /// Returns the raw sum; the caller decides how it maps to color, and how it clamps. inline uint32_t blobField(lengthType x, lengthType y, const int16_t* bx, const int16_t* by, uint8_t count, int32_t r2) { @@ -448,12 +499,12 @@ inline uint32_t blobField(lengthType x, lengthType y, const int16_t* bx, const i // // A shift register over the whole grid: every light moves `delta` steps along one axis, and the // vacated edge is left dark (the caller paints the new content into it). FreqMatrix hand-rolled this -// as a per-pixel copy loop reading each neighbour through get()/pixel(); the same move is one +// as a per-pixel copy loop reading each neighbor through get()/pixel(); the same move is one // `memmove` per contiguous run, because the addressing rule puts x adjacent in memory and a whole // row adjacent along y. // -// `wrap` chooses between the two useful behaviours: a shift register (false — content falls off the -// end and the far edge goes dark) and a loop (true — content that leaves one edge re-enters the +// `wrap` chooses between the two useful behaviors: a shift register (false: content falls off the +// end and the far edge goes dark) and a loop (true: content that leaves one edge re-enters the // other), which is the marquee/tunnel idiom. Prior art: WLED's `move()` and the classic shift // register; the wrapping form is the standard scrolling-texture primitive. @@ -468,9 +519,9 @@ inline void scroll(const Canvas& cv, uint8_t axis, int delta, bool wrap = false) // this BEFORE reducing modulo the extent, which would turn it into a no-op.) if (!wrap && (delta >= extent || delta <= -extent)) { fill(cv, RGB{0, 0, 0}); return; } - // Wrapping reduces into the axis and normalises to a positive rotation, since rotating left by n + // Wrapping reduces into the axis and normalizes to a positive rotation, since rotating left by n // equals rotating right by extent-n. A shift keeps its sign: the direction decides which end - // goes dark, so it cannot be normalised away. + // goes dark, so it cannot be normalized away. int shift = delta % extent; if (shift == 0) return; // a full turn when wrapping; nothing to do if (wrap && shift < 0) shift += extent; @@ -520,7 +571,7 @@ inline void scroll(const Canvas& cv, uint8_t axis, int delta, bool wrap = false) // shift does not overwrite a source it has yet to read. if (wrap) { // Rotate by three reversals, the same trick the contiguous path above uses. No - // scratch buffer, so a light of ANY channel count rotates whole — a fixed-size + // scratch buffer, so a light of ANY channel count rotates whole: a fixed-size // temporary silently truncated the extra channels of a wide fixture, and there is // no ceiling worth guessing at here. It is also O(extent) instead of // O(shift x extent): a 64-row column scrolled by 30 was doing 1920 cell copies. @@ -559,7 +610,7 @@ inline void scroll(const Canvas& cv, uint8_t axis, int delta, bool wrap = false) // --- Rectangles and bars ----------------------------------------------------------------------- // // `bar` is the audio-meter staple: a run of `len` cells growing from an origin along one axis. Four -// effects hand-rolled it, and their loops disagreed on everything that matters — which end is the +// effects hand-rolled it, and their loops disagreed on everything that matters: which end is the // floor, whether the color varies along the run, and what happens when the run overshoots the grid. // // The color is a CALLBACK rather than a single RGB because that is what the call sites actually do: @@ -571,11 +622,11 @@ inline void scroll(const Canvas& cv, uint8_t axis, int delta, bool wrap = false) // // **What a MoonLive script gets, stated because the two forms are NOT equivalent.** A script calls // builtins through a table that carries plain scalars (`core/moonlive/MoonLiveBuiltins.h`), and the -// grammar is a function-call statement with expression arguments — no loops, no closures. So a +// grammar is a function-call statement with expression arguments: no loops, no closures. So a // script can reach the flat form, `bar(x, y, len, dir, r, g, b)`, and gets a SOLID bar. The -// per-cell gradient GEQ draws is not expressible that way, and a colour-callback builtin cannot be +// per-cell gradient GEQ draws is not expressible that way, and a color-callback builtin cannot be // registered in that table at all. Closing that gap needs a scalar-shaped primitive a script can -// call — a gradient bar taking two endpoint colours, or a palette-ramp variant — which is a +// call: a gradient bar taking two endpoint colors, or a palette-ramp variant: which is a // deliberate addition, not something the callback form provides for free. Tracked in the // power-function plan rather than assumed away here. @@ -637,7 +688,7 @@ inline void rect(const Canvas& cv, lengthType x, lengthType y, lengthType w, len // --- Circles --------------------------------------------------------------------------------- // // Two implementations, deliberately, because they answer different questions. `circle`/`fillCircle` -// take INTEGER pixel coordinates and use Bresenham's midpoint algorithm — no multiply per pixel, no +// take INTEGER pixel coordinates and use Bresenham's midpoint algorithm: no multiply per pixel, no // distance, exactly the cells on the rim. That is the right tool when a shape sits on the grid. // // The SDF forms above (`sdCircle` + `coverage`) are the right tool when the circle MOVES: they give @@ -670,7 +721,7 @@ inline void circle(const Canvas& cv, lengthType cx, lengthType cy, lengthType r, } /// A filled disc: the same midpoint walk, drawing a horizontal span per scanline instead of points, -/// colored per row by `colorAt(dyFromCenter)` — the signed row offset, so a caller can ramp a +/// colored per row by `colorAt(dyFromCenter)`: the signed row offset, so a caller can ramp a /// gradient across the disc. template inline void fillCircle(const Canvas& cv, lengthType cx, lengthType cy, lengthType r, ColorFn colorAt) { @@ -702,7 +753,7 @@ inline void fillCircle(const Canvas& cv, lengthType cx, lengthType cy, lengthTyp // // Wu's 1991 algorithm: where Bresenham picks ONE cell per step, Wu lights the two cells straddling // the true line and splits the intensity between them by distance. The result is a line without -// staircase edges, at roughly twice the writes. `line` (Bresenham, above) stays the default — this +// staircase edges, at roughly twice the writes. `line` (Bresenham, above) stays the default: this // is for the cases where the stair-stepping is the thing you notice. // // The blend is additive so a line crossing existing content brightens rather than replaces it, @@ -787,7 +838,7 @@ inline void sprite(const Canvas& cv, const sprites::Sprite& s, uint8_t frame, } } -/// Blit one glyph on a Canvas — the Canvas form of `glyph`. Same MSB-first column order and the +/// Blit one glyph on a Canvas: the Canvas form of `glyph`. Same MSB-first column order and the /// same clipping; only the pixel writer differs. inline void glyph(const Canvas& cv, const fonts::Font& font, char ch, lengthType x, lengthType y, RGB c) { if (ch < 32 || ch > 126) return; @@ -801,7 +852,7 @@ inline void glyph(const Canvas& cv, const fonts::Font& font, char ch, lengthType } } -/// Draw a NUL-terminated string on a Canvas — the Canvas form of `text`. Returns the first line's +/// Draw a NUL-terminated string on a Canvas: the Canvas form of `text`. Returns the first line's /// pixel width, as the Buffer form does. inline lengthType text(const Canvas& cv, const fonts::Font& font, const char* str, lengthType x, lengthType y, RGB c) { @@ -821,14 +872,14 @@ inline lengthType text(const Canvas& cv, const fonts::Font& font, const char* st } /// Byte offset of a coordinate on a Canvas, or `bytes` when it is outside the grid. The Canvas form -/// of `offsetOf` — for effects that need the raw index (e.g. to touch a W channel `pixel` leaves +/// of `offsetOf`: for effects that need the raw index (e.g. to touch a W channel `pixel` leaves /// alone). Delegates to Canvas::offsetOf so the addressing rule keeps one home. inline size_t offsetOf(const Canvas& cv, Coord3D p) { return cv.offsetOf(p); } // ---- Sub-pixel positioning ---------------------------------------------------------------------- /// A position in **24.8 fixed point**: one pixel = 256 sub-units, so `x >> 8` is the pixel and the -/// low byte is the fraction within it. int32 covers ±8 million pixels — a 16K-light strip has room +/// low byte is the fraction within it. int32 covers ±8 million pixels: a 16K-light strip has room /// to spare, where an int16 sub-pixel type (WLED-PS uses 10.6) runs out at ±512. using pos_t = int32_t; @@ -840,29 +891,29 @@ inline constexpr int32_t kSubOne = 1 << kSubShift; inline constexpr pos_t toSub(lengthType px) { return static_cast(px) << kSubShift; } /// Decode a sub-pixel coordinate to the pixel that contains it. Uses an arithmetic shift, which -/// floors toward negative infinity — the behaviour a grid wants, so -0.5 lands in pixel -1 rather +/// floors toward negative infinity: the behavior a grid wants, so -0.5 lands in pixel -1 rather /// than being pulled to 0 and doubling up on the boundary. inline constexpr lengthType toPixel(pos_t sub) { return static_cast(sub >> kSubShift); } -/// Draw a point at a FRACTIONAL position, spreading its light across the neighbouring pixels by +/// Draw a point at a FRACTIONAL position, spreading its light across the neighboring pixels by /// how much of each it covers (Xiaolin Wu, SIGGRAPH 1991; the same weighting WLED's `wu_pixel` and /// its particle renderer use). /// /// Why it matters: a whole-pixel write makes a moving point jump from cell to cell, which on a -/// coarse matrix reads as stepping. Splitting the light between neighbours by coverage lets the eye +/// coarse matrix reads as stepping. Splitting the light between neighbors by coverage lets the eye /// see it *between* pixels, so a 16x16 panel gains apparent resolution. This is the difference the /// canon survey ranks as the single highest-leverage primitive for motion. /// /// Additive with saturation, because light adds: two points landing on one pixel brighten it rather -/// than one overwriting the other. Weights are computed once per axis and are exact — the four +/// than one overwriting the other. Weights are computed once per axis and are exact: the four /// corner weights sum to 256, so a point contributes exactly its own brightness, no more. /// -/// 1D/2D/3D: a degenerate axis (extent 1) contributes no second neighbour, so the same call is a +/// 1D/2D/3D: a degenerate axis (extent 1) contributes no second neighbor, so the same call is a /// 2-pixel blend on a strand, 4 on a matrix, 8 in a volume. inline void splat(const Canvas& cv, pos_t x, pos_t y, pos_t z, RGB c) { const lengthType px = toPixel(x), py = toPixel(y), pz = toPixel(z); // Fraction within the pixel, 0..255. Masking (rather than subtracting) is correct for negatives - // too: -1.25 px has fraction 0.75 relative to pixel -2, which is what the neighbour weighting + // too: -1.25 px has fraction 0.75 relative to pixel -2, which is what the neighbor weighting // needs. const uint16_t fx = static_cast(x & (kSubOne - 1)); const uint16_t fy = static_cast(y & (kSubOne - 1)); @@ -880,7 +931,7 @@ inline void splat(const Canvas& cv, pos_t x, pos_t y, pos_t z, RGB c) { const uint32_t wy = dy ? fy : (kSubOne - fy); const uint32_t wz = dz ? fz : (kSubOne - fz); // Weight is the covered fraction of this corner: the product of the per-axis coverages, - // normalised back to 0..255 (>>16 for the two extra 8-bit factors). + // normalized back to 0..255 (>>16 for the two extra 8-bit factors). const uint32_t w = (wx * wy * wz) >> (2 * kSubShift); if (w == 0) continue; @@ -900,7 +951,7 @@ inline void splat(const Canvas& cv, pos_t x, pos_t y, RGB c) { splat(cv, x, y, 0 // // Everything above WRITES. These read, which is the other half of the vocabulary and the one the // canon survey found missing: once a grid can be sampled at an arbitrary sub-pixel coordinate, a -// whole family follows from three lines each — feedback, tunnels, zoom, rotation, plasma warp, +// whole family follows from three lines each: feedback, tunnels, zoom, rotation, plasma warp, // motion trails. Without it, each of those needs its own bespoke loop. // // `sampleWrap` takes SUB-PIXEL coordinates (the same 24.8 `pos_t` as splat) and returns a bilinear @@ -932,7 +983,121 @@ inline RGB sampleWrap(const Canvas& cv, pos_t x, pos_t y, lengthType z = 0) { mix(mix(c00.b, c10.b, fx), mix(c01.b, c11.b, fx), fy)}; } -/// Combine two colors by taking the brighter channel — the "screen"/max operator feedback chains +/// How a sample outside the grid is read: wrapped around, or held at the edge. +enum class Edge : uint8_t { + Wrap, ///< the far side comes back around: seamless for a scroll, a tunnel, a torus flow + Clamp, ///< the edge pixel repeats: what a flow leaving the grid should smear against +}; + +/// Bilinear sample at a sub-pixel coordinate, holding the edge pixel outside the grid. +/// +/// The Clamp half of `sampleWrap`. A flow that carries pixels off one side must not have them +/// reappear on the other, which is what Wrap does and what makes it wrong for a wind: the trail +/// would loop the panel instead of leaving it. +inline RGB sampleClamp(const Canvas& cv, pos_t x, pos_t y, lengthType z = 0) { + if (cv.dims.x <= 0 || cv.dims.y <= 0) return RGB{0, 0, 0}; + const int32_t x0 = toPixel(x), y0 = toPixel(y); + const uint8_t fx = static_cast(x & (kSubOne - 1)); + const uint8_t fy = static_cast(y & (kSubOne - 1)); + const auto clamp = [](int32_t v, lengthType n) { + return static_cast(v < 0 ? 0 : (v >= n ? n - 1 : v)); + }; + const lengthType xa = clamp(x0, cv.dims.x), xb = clamp(x0 + 1, cv.dims.x); + const lengthType ya = clamp(y0, cv.dims.y), yb = clamp(y0 + 1, cv.dims.y); + const RGB c00 = get(cv, {xa, ya, z}), c10 = get(cv, {xb, ya, z}); + const RGB c01 = get(cv, {xa, yb, z}), c11 = get(cv, {xb, yb, z}); + const auto mix = [](uint8_t a, uint8_t b, uint8_t tt) { + return static_cast(a + (((static_cast(b) - a) * tt) >> 8)); + }; + return RGB{mix(mix(c00.r, c10.r, fx), mix(c01.r, c11.r, fx), fy), + mix(mix(c00.g, c10.g, fx), mix(c01.g, c11.g, fx), fy), + mix(mix(c00.b, c10.b, fx), mix(c01.b, c11.b, fx), fy)}; +} + +/// Sample under either edge rule, so a caller carries the choice as data rather than a branch. +inline RGB sampleEdge(const Canvas& cv, pos_t x, pos_t y, Edge edge, lengthType z = 0) { + return edge == Edge::Wrap ? sampleWrap(cv, x, y, z) : sampleClamp(cv, x, y, z); +} + +/// Move every pixel of `src` along a velocity field and write the result into `dst`. +/// +/// Advection: the transport half of a flow, and the primitive a trail is made of. `rule` answers, +/// for a pixel, which way and how fast the medium is moving there; this walks BACKWARD along that +/// velocity and samples where the pixel must have come from, which is the standard stable form +/// (Stam, "Stable Fluids", SIGGRAPH 1999). Going backward rather than forward is what keeps it from +/// tearing: every destination pixel is written exactly once, so no gaps open where the field +/// diverges and nothing is written twice where it converges. +/// +/// `dst` and `src` MUST be different planes. Reading and writing one buffer would sample pixels the +/// same pass had already moved, which smears along the walk order rather than along the flow: the +/// caller keeps a scratch plane and swaps, the ping-pong an effect owns. +/// +/// The rule is called once per pixel and returns sub-pixel units per frame, so a velocity already +/// carries the frame's dt: the caller scales it, since only the caller knows the cadence. +template +inline void advect(const Canvas& dst, const Canvas& src, Rule&& rule, Edge edge = Edge::Wrap) { + if (!dst.data || !src.data) return; + if (dst.dims.x != src.dims.x || dst.dims.y != src.dims.y) return; // two shapes, no meaning + for (lengthType z = 0; z < dst.dims.z; z++) { + for (lengthType y = 0; y < dst.dims.y; y++) { + for (lengthType x = 0; x < dst.dims.x; x++) { + pos_t vx = 0, vy = 0; + rule(x, y, z, vx, vy); + // BACKWARD: where did what is here now come from? Hence the subtraction. + const pos_t sx = toSub(x) - vx; + const pos_t sy = toSub(y) - vy; + pixel(dst, {x, y, z}, sampleEdge(src, sx, sy, edge, z)); + } + } + } +} + +/// Advect a 16-BIT plane: the form a trail uses, and the reason it survives. +/// +/// The Canvas vocabulary is 8-bit throughout (`get`, `pixel` and `sampleWrap` all speak `RGB`), so a +/// wide plane cannot borrow it: a Canvas over 16-bit data would read the high and low halves of one +/// channel as two different colors. This is the same walk against `uint16_t` samples, three per +/// light, with the bilinear blend done at full width so the transport does not quantize what the +/// decay is about to multiply. `n` is samples, `w`/`h`/`d` the geometry they are laid out in. +/// +/// Edge::Clamp holds the border sample; Edge::Wrap brings the far side around. +template +inline void advect16(uint16_t* dst, const uint16_t* src, lengthType w, lengthType h, lengthType d, + Rule&& rule, Edge edge = Edge::Wrap) { + if (!dst || !src || w <= 0 || h <= 0 || d <= 0) return; + const auto fold = [&](int32_t v, lengthType n) -> lengthType { + if (edge == Edge::Wrap) { const int32_t m = v % n; return static_cast(m < 0 ? m + n : m); } + return static_cast(v < 0 ? 0 : (v >= n ? n - 1 : v)); + }; + for (lengthType z = 0; z < d; z++) { + for (lengthType y = 0; y < h; y++) { + for (lengthType x = 0; x < w; x++) { + pos_t vx = 0, vy = 0; + rule(x, y, z, vx, vy); + const pos_t sx = toSub(x) - vx, sy = toSub(y) - vy; // BACKWARD, as advect() + const int32_t x0 = toPixel(sx), y0 = toPixel(sy); + const uint32_t fx = static_cast(sx & (kSubOne - 1)); + const uint32_t fy = static_cast(sy & (kSubOne - 1)); + const lengthType xa = fold(x0, w), xb = fold(x0 + 1, w); + const lengthType ya = fold(y0, h), yb = fold(y0 + 1, h); + const size_t slice = static_cast(z) * h * w; + const size_t i00 = (slice + static_cast(ya) * w + xa) * 3; + const size_t i10 = (slice + static_cast(ya) * w + xb) * 3; + const size_t i01 = (slice + static_cast(yb) * w + xa) * 3; + const size_t i11 = (slice + static_cast(yb) * w + xb) * 3; + const size_t o = (slice + static_cast(y) * w + x) * 3; + for (uint8_t c = 0; c < 3; c++) { + // Two lerps at full width: the top edge, the bottom edge, then between them. + const uint32_t a = src[i00 + c] + (((static_cast(src[i10 + c]) - src[i00 + c]) * static_cast(fx)) >> kSubShift); + const uint32_t b = src[i01 + c] + (((static_cast(src[i11 + c]) - src[i01 + c]) * static_cast(fx)) >> kSubShift); + dst[o + c] = static_cast(a + (((static_cast(b) - static_cast(a)) * static_cast(fy)) >> kSubShift)); + } + } + } + } +} + +/// Combine two colors by taking the brighter channel: the "screen"/max operator feedback chains /// use so a trail brightens rather than averaging away. inline RGB combineMax(RGB a, RGB b) { return RGB{a.r > b.r ? a.r : b.r, a.g > b.g ? a.g : b.g, a.b > b.b ? a.b : b.b}; @@ -941,13 +1106,13 @@ inline RGB combineMax(RGB a, RGB b) { // ---- Signed distance fields -------------------------------------------------------------------- // -// An SDF answers "how far is this point from the shape's edge?" — negative inside, zero on the edge, +// An SDF answers "how far is this point from the shape's edge?": negative inside, zero on the edge, // positive outside (Iñigo Quilez's 2D/3D distance-function catalog is the reference). One number // then gives a filled shape, an anti-aliased edge, an outline (`|d| - width`), a glow (a falloff of // d), and a smooth blend between shapes (`smin`), instead of a separate routine for each. // // It is also where dimension-generic stops being a slogan: `length(p) - r` is two points on a -// strand, a circle on a matrix and a sphere in a volume — the SAME code, because only the length +// strand, a circle on a matrix and a sphere in a volume: the SAME code, because only the length // changes. A rasteriser needs a different algorithm per dimension. // // **Distances are in sub-pixel units (pos_t, 24.8)**, so a shape can move and grow smoothly rather @@ -958,8 +1123,8 @@ inline RGB combineMax(RGB a, RGB b) { // shape therefore has a `*Sq` variant that answers "inside/outside and by how much, squared", and // effects should reach for it unless they need a real distance (outline width, linear falloff). -/// Squared distance from a point to a circle's centre, minus the squared radius. Negative inside, -/// zero on the rim, positive outside — the sign and the ordering match the true SDF, so a threshold +/// Squared distance from a point to a circle's center, minus the squared radius. Negative inside, +/// zero on the rim, positive outside: the sign and the ordering match the true SDF, so a threshold /// test behaves identically without paying for a square root. inline int32_t sdCircleSq(pos_t px, pos_t py, pos_t cx, pos_t cy, pos_t r) { // Work in whole sub-units squared; int64 because a 24.8 coordinate squared overflows int32 on a @@ -975,7 +1140,7 @@ inline int32_t sdCircleSq(pos_t px, pos_t py, pos_t cx, pos_t cy, pos_t r) { return static_cast(diff); } -/// True signed distance to a circle's edge, in sub-pixel units. Costs a square root — use +/// True signed distance to a circle's edge, in sub-pixel units. Costs a square root: use /// `sdCircleSq` unless the actual distance is needed (an outline of a given width, a linear glow). inline int32_t sdCircle(pos_t px, pos_t py, pos_t cx, pos_t cy, pos_t r) { const int64_t dx = px - cx, dy = py - cy; @@ -984,7 +1149,7 @@ inline int32_t sdCircle(pos_t px, pos_t py, pos_t cx, pos_t cy, pos_t r) { return static_cast(d) - r; } -/// Signed distance to an axis-aligned box centred at (cx, cy) with half-extents (bx, by). +/// Signed distance to an axis-aligned box centered at (cx, cy) with half-extents (bx, by). /// /// Outside, this is the Chebyshev distance (the larger axis overshoot) rather than the Euclidean /// one: it is exact along the faces, differs only near the corners, and costs no square root. For a @@ -1001,7 +1166,7 @@ inline int32_t sdBox(pos_t px, pos_t py, pos_t cx, pos_t cy, pos_t bx, pos_t by) return qx > qy ? qx : qy; } -/// Signed distance to a line segment a→b, minus `thickness` — a capsule, which is what a drawn line +/// Signed distance to a line segment a→b, minus `thickness`: a capsule, which is what a drawn line /// with soft edges actually is. Projects the point onto the segment, clamps to its ends, then /// measures. One square root; the projection itself is integer. inline int32_t sdSegment(pos_t px, pos_t py, pos_t ax, pos_t ay, pos_t bx, pos_t by, pos_t thickness) { @@ -1023,12 +1188,12 @@ inline int32_t sdSegment(pos_t px, pos_t py, pos_t ax, pos_t ay, pos_t bx, pos_t return static_cast(d) - thickness; } -/// Smooth minimum of two distances — the operator that makes two shapes flow into each other rather +/// Smooth minimum of two distances: the operator that makes two shapes flow into each other rather /// than simply overlapping (Quilez, "smooth minimum"). `k` is the blend radius in sub-pixel units: /// 0 gives a hard union (a plain `min`), larger values a longer merge. /// /// This is metaballs generalised: the classic inverse-square blob field is one look, whereas `smin` -/// blends ANY pair of shapes — a circle into a box, a segment into a circle. +/// blends ANY pair of shapes: a circle into a box, a segment into a circle. inline int32_t smin(int32_t a, int32_t b, int32_t k) { if (k <= 0) return a < b ? a : b; // Polynomial smooth min: h = clamp(0.5 + 0.5*(b-a)/k), mix(b, a, h) - k*h*(1-h). @@ -1047,7 +1212,7 @@ inline int32_t smin(int32_t a, int32_t b, int32_t k) { } /// Turn a signed distance into coverage: 255 well inside, 0 well outside, a ramp across the edge. -/// This is the anti-aliasing an SDF gives for free — the pixel is lit in proportion to how much of +/// This is the anti-aliasing an SDF gives for free: the pixel is lit in proportion to how much of /// it the shape covers, so an edge reads as smooth instead of stepped. /// /// The ramp is one pixel wide by default, which matches how much area a boundary actually crosses. @@ -1059,4 +1224,98 @@ inline uint8_t coverage(int32_t d, pos_t edge = kSubOne) { return static_cast(((edge - d) * 255) / (2 * edge)); } + +// --- Filled shapes with soft edges ------------------------------------------------------------- +// +// `circle` and `fillCircle` above are Bresenham: whole pixels, hard edges, the right answer for a +// ring outline. These are the SDF forms, which take sub-pixel centers and radii and shade the +// boundary by coverage, so a small disc can sit between pixels and a growing one does not jump a +// whole cell at a time. On a 16x16 panel that difference is the whole difference between a blob +// that moves and a blob that stutters. + +/// A filled disc with an anti-aliased edge, additive so overlapping discs brighten. +/// +/// Coverage per pixel from the signed distance, over the bounding box only: a disc of radius r +/// touches (2r+2)^2 pixels however large the grid is, so this costs the shape rather than the frame. +inline void disc(const Canvas& cv, pos_t cx, pos_t cy, pos_t r, RGB c, lengthType z = 0) { + if (r <= 0) return; + const lengthType x0 = toPixel(cx - r) - 1, x1 = toPixel(cx + r) + 1; + const lengthType y0 = toPixel(cy - r) - 1, y1 = toPixel(cy + r) + 1; + for (lengthType y = y0; y <= y1; y++) { + for (lengthType x = x0; x <= x1; x++) { + // The pixel's CENTER against the edge: sampling the corner biases the shape half a + // pixel up and left, which shows as a disc that drifts as it grows. + const int32_t d = sdCircle(toSub(x) + kSubOne / 2, toSub(y) + kSubOne / 2, cx, cy, r); + const uint8_t cov = coverage(d); + if (cov == 0) continue; + addPixel(cv, {x, y, z}, RGB{scale8(c.r, cov), scale8(c.g, cov), scale8(c.b, cov)}); + } + } +} + +/// The volumetric form: a filled sphere, shaded the same way. +/// +/// Separate rather than a defaulted depth on `disc`, because the cost differs by an order: a sphere +/// touches (2r+2)^3 pixels. A caller on a panel should get the cheap one without thinking about it. +inline void sphere(const Canvas& cv, pos_t cx, pos_t cy, pos_t cz, pos_t r, RGB c) { + if (r <= 0) return; + const lengthType x0 = toPixel(cx - r) - 1, x1 = toPixel(cx + r) + 1; + const lengthType y0 = toPixel(cy - r) - 1, y1 = toPixel(cy + r) + 1; + const lengthType z0 = toPixel(cz - r) - 1, z1 = toPixel(cz + r) + 1; + for (lengthType z = z0; z <= z1; z++) { + for (lengthType y = y0; y <= y1; y++) { + for (lengthType x = x0; x <= x1; x++) { + const int64_t dx = toSub(x) + kSubOne / 2 - cx; + const int64_t dy = toSub(y) + kSubOne / 2 - cy; + const int64_t dz = toSub(z) + kSubOne / 2 - cz; + const uint64_t d2 = static_cast(dx * dx + dy * dy + dz * dz); + const uint32_t dist = isqrt(static_cast(d2 > UINT32_MAX ? UINT32_MAX : d2)); + const uint8_t cov = coverage(static_cast(dist) - r); + if (cov == 0) continue; + addPixel(cv, {x, y, z}, RGB{scale8(c.r, cov), scale8(c.g, cov), scale8(c.b, cov)}); + } + } + } +} + +// --- Velocity rules ---------------------------------------------------------------------------- +// +// A velocity rule answers, for one point, which way the medium is moving there. They are plain +// functions rather than objects because none of them holds state: everything that varies over time +// arrives as an argument, so an effect can drive one from a control, an oscillator or audio without +// the rule knowing. `advect` takes any callable of this shape, so these are conveniences, not a +// closed set: an effect with its own idea writes a lambda. +// +// All return sub-pixels PER CALL, so the caller has already folded in the frame's dt. Prior art: +// the flow vocabulary of 4wheeljive's FlowFields (from a Stefan Petrick concept) and, for curl, +// Bridson 2007. + +/// A steady wind: everything moves the same way at the same speed. +inline void flowWind(angle16 direction, int32_t speed, pos_t& vx, pos_t& vy) { + vx = static_cast((static_cast(cos16(direction)) * speed) >> 15); + vy = static_cast((static_cast(sin16(direction)) * speed) >> 15); +} + +/// Out from a center, or into it when `speed` is negative. The fountain and the drain. +inline void flowRadial(lengthType x, lengthType y, lengthType cx, lengthType cy, + int32_t speed, pos_t& vx, pos_t& vy) { + const int32_t dx = static_cast(x) - cx, dy = static_cast(y) - cy; + if (dx == 0 && dy == 0) { vx = vy = 0; return; } // the center has no direction to go + const angle16 a = atan16(dy, dx); + flowWind(a, speed, vx, vy); +} + +/// Around a center and outward at once: the spiral, which is the two above added. +inline void flowSpiral(lengthType x, lengthType y, lengthType cx, lengthType cy, + int32_t angular, int32_t radial, pos_t& vx, pos_t& vy) { + const int32_t dx = static_cast(x) - cx, dy = static_cast(y) - cy; + if (dx == 0 && dy == 0) { vx = vy = 0; return; } + const angle16 a = atan16(dy, dx); + pos_t rx, ry, tx, ty; + flowWind(a, radial, rx, ry); // outward + flowWind(static_cast(a + 16384), angular, tx, ty); // and a quarter turn from it + vx = rx + tx; + vy = ry + ty; +} + } // namespace mm::draw diff --git a/src/light/effects/LavaLampEffect.h b/src/light/effects/LavaLampEffect.h index 7b484563..9c566030 100644 --- a/src/light/effects/LavaLampEffect.h +++ b/src/light/effects/LavaLampEffect.h @@ -53,7 +53,7 @@ class LavaLampEffect : public EffectBase { int16_t bx[NUM_BLOBS] = {}; int16_t by[NUM_BLOBS] = {}; - draw::blobCentres(BLOB_PATHS, NUM_BLOBS, t, w, h, bx, by); + draw::blobCenters(BLOB_PATHS, NUM_BLOBS, t, w, h, bx, by); int32_t r2 = static_cast(radius) * radius; for (lengthType y = 0; y < h; y++) { diff --git a/src/light/effects/MetaballsEffect.h b/src/light/effects/MetaballsEffect.h index 8be5218e..8be49ac3 100644 --- a/src/light/effects/MetaballsEffect.h +++ b/src/light/effects/MetaballsEffect.h @@ -52,7 +52,7 @@ class MetaballsEffect : public EffectBase { const uint8_t n = count < MAX_BALLS ? count : MAX_BALLS; int16_t bx[MAX_BALLS]; int16_t by[MAX_BALLS]; - draw::blobCentres(BLOB_PATHS, n, t, w, h, bx, by); + draw::blobCenters(BLOB_PATHS, n, t, w, h, bx, by); // Field strength: sum of r^2 / (d^2 + 1) int32_t r2 = static_cast(radius) * radius; diff --git a/src/light/effects/TrailsEffect.h b/src/light/effects/TrailsEffect.h new file mode 100644 index 00000000..e79d1d00 --- /dev/null +++ b/src/light/effects/TrailsEffect.h @@ -0,0 +1,204 @@ +#pragma once + +#include "core/oscillators.h" // OscillatorBank: the emitters' motion and the breathing +#include "light/effects/EffectBase.h" + +namespace mm { + +// Trails: dots thrown into a moving medium, leaving tails that the flow carries and bends. +// +// The composition is three power functions and nothing else: an EMITTER draws a few bright points, +// `draw::advect` carries the whole plane along a velocity field, and `draw::decay16` dims it by a +// half-life. Run every frame, that loop is what a trail IS. Nothing here paints a tail: the tail is +// last frame's dots, moved and dimmed, which is why the shape of the flow is visible in it. +// +// This is the advection idiom the way Aurora is the shader idiom. The vocabulary it demonstrates is +// transport rather than sampling: a field that says where the medium is going, applied to whatever +// happens to be there. Prior art: the flow-field family (4wheeljive's FlowFields, from a Stefan +// Petrick concept), and Stam's backward advection for the transport step itself. +// +// **The plane is 16-BIT, and that is the point.** A trail is a value multiplied by slightly less +// than one, hundreds of times a second. At 8 bits that either truncates to nothing (the tail dies +// early: measured, 48 of 64 cells) or rounds back up to where it started (the trail never fades and +// the effect turns solid). Both were measured; see `draw::decay`. So the plane the effect owns is +// wider than the layer it writes to, and narrows once on the way out. The precision belongs in the +// ACCUMULATOR, not in the frame buffer. +// +// Cost: one advect (a bilinear sample per light) plus one noise sample per light for the flow, so +// the flow rule dominates. Volumetric: on a cube every slice is carried, and the flow's third +// component moves the trail through the volume rather than repeating a plane. +// @card TrailsEffect.png +/// Effect: bright dots thrown into a flowing medium, leaving tails the flow carries and bends. +class TrailsEffect : public EffectBase { +public: + const char* tags() const override { return "💫🖌️"; } // power-function showcase + Dim dimensions() const override { return Dim::D3; } // volumetric: the flow moves through z + + static constexpr uint8_t kMaxDots = 8; + + uint8_t speed = 40; // how fast the medium moves, and with it every tail + uint8_t dots = 3; // how many emitters are throwing light in + uint8_t scale = 30; // the flow field's cell size: low = broad sweeps, high = eddies + uint8_t persistence = 90; // how long a tail survives, as a half-life (see halfLifeMs) + uint8_t breathe = 40; // how much the flow's strength rises and falls + + void defineControls() override { + controls_.addControl("speed", speed, 0, 255); + controls_.addControl("dots", dots, 1, kMaxDots); + controls_.addControl("scale", scale, 1, 255); + controls_.addControl("persistence", persistence, 0, 255); + controls_.addControl("breathe", breathe, 0, 255); + } + + void prepare() override { + // The plane is the effect's own state and holds THREE channels per light whatever the + // layer's width is: a trail is about its own history, not about the fixture's wiring. + const lengthType w = width(), h = height(), d = depth(); + const size_t needed = static_cast(w) * h * d * 3; + const size_t had = plane_.count(); + plane_.resize(needed); + // Same sample count but a different shape (8x16 -> 16x8, or a cube reshaped): resize() kept + // the old samples, and they are laid out for the old geometry, so they would smear. Clear. + if (needed > 0 && needed == had && (w != planeW_ || h != planeH_ || d != planeD_)) + std::memset(plane_.data(), 0, plane_.bytes()); + scratch_.resize(needed); + planeW_ = w; planeH_ = h; planeD_ = d; + } + + void tick() MM_NONBLOCKING override { + if (!plane_ || !scratch_) return; // a zero grid, or an allocation that failed + const lengthType w = width(), h = height(), d = depth(); + const uint32_t dt = elapsed() - lastMs_; + lastMs_ = elapsed(); + + // Two oscillators: one walks the emitters around, one breathes the flow's strength so the + // composition swells and settles instead of running at one rate forever. + bank_.set(0, {.rate = static_cast(8 + speed / 8), .low = 0, .high = 65535, + .phaseOffset = 0, .wave = Wave::Saw}); + bank_.set(1, {.rate = 7, .low = static_cast(256 - breathe), + .high = static_cast(256 + breathe), + .phaseOffset = 0, .wave = Wave::Sine}); + bank_.advance(dt); + + // Which buffer currently HOLDS the trail alternates: a ScratchBuffer is deliberately fixed + // to its module (non-movable, it owns a slot in the module's free list), so the ping-pong + // swaps a flag rather than the buffers. + ScratchBuffer& src = front_ ? plane_ : scratch_; + ScratchBuffer& dst = front_ ? scratch_ : plane_; + + // 1. Transport: carry what is already there along the flow. Backward-sampled, so this both + // moves the trail and is what bends it, since neighboring pixels take different paths. + const uint32_t t = elapsed(); + const uint32_t cells = static_cast(scale) * 256u; + const int32_t strength = static_cast(bank_.value(1)); // the breathing multiplier + const uint32_t step = (static_cast(speed) * dt) / 8u; // sub-pixels this frame + draw::advect16(dst.data(), src.data(), w, h, d, + [&](lengthType x, lengthType y, lengthType z, + draw::pos_t& vx, draw::pos_t& vy) { + flowAt(x, y, z, t, cells, strength, step, vx, vy); + }, draw::Edge::Clamp); + front_ = !front_; // the destination now holds the trail + ScratchBuffer& moved = front_ ? plane_ : scratch_; + + // 2. Decay: a half-life, so the tail is the same length in SECONDS on any device. This is + // the step that needs the wide plane (draw::decay's own note has the measurements). + draw::decay16(moved.data(), moved.count(), halfLifeMs(), dt); + + // 3. Emit: the bright heads, drawn after the transport so this frame's dots are sharp and + // only the previous ones have been carried. + emitDots(moved.data(), w, h, d); + + // 4. Narrow onto the layer: the one place the wide plane meets the fixture's width. + blit(moved.data(), w, h, d); + } + +private: + /// The persistence control as a half-life in milliseconds. Deliberately not linear: the + /// interesting range is short, and a slider that spends half its travel between four and eight + /// seconds would waste it. 0 is a bare head with no tail at all. + uint32_t halfLifeMs() const { + return 20u + static_cast(persistence) * static_cast(persistence) / 16u; + } + + /// The flow: where the medium is going at this point, in sub-pixels this frame. + /// + /// A noise field read at two offsets, one per axis, which is the decoupled form: reading ONE + /// field for both axes moves everything along a diagonal, since the two components would rise + /// and fall together. The third axis is sampled too, so a cube's slices flow differently rather + /// than the same plane repeating through the volume. + void flowAt(lengthType x, lengthType y, lengthType z, uint32_t t, uint32_t cells, + int32_t strength, uint32_t step, draw::pos_t& vx, draw::pos_t& vy) const { + const uint32_t fx = static_cast(x) * cells; + const uint32_t fy = static_cast(y) * cells; + const uint32_t fz = static_cast(z) * cells + t / 4u; + // Centered on zero, so the field pushes both ways rather than only along the axes. + const int32_t nx = static_cast(inoise16(fx, fy, fz)) - 32768; + const int32_t ny = static_cast(inoise16(fx + 0x9E37u, fy + 0x7C15u, fz)) - 32768; + // strength is the breathing multiplier in 1/256ths; step is the frame's travel budget. + const int32_t amp = static_cast(step) * strength / 256; + vx = static_cast((nx * amp) >> 15); + vy = static_cast((ny * amp) >> 15); + } + + /// The heads: a few bright points walking their own paths, each on the palette. + void emitDots(uint16_t* plane, lengthType w, lengthType h, lengthType d) { + const uint8_t n = dots < 1 ? 1 : (dots > kMaxDots ? kMaxDots : dots); + const uint32_t walk = bank_.unitValue(0); + for (uint8_t i = 0; i < n; i++) { + // Each dot rides the same clock at its own offset and its own ratio, so they never + // bunch: a Lissajous walk, which visits the whole grid rather than circling one spot. + const angle16 a = static_cast(walk + i * (65536u / n)); + const angle16 b = static_cast(walk * 3u + i * 9973u); + const lengthType px = mapAxis(sin16(a), w); + const lengthType py = mapAxis(cos16(b), h); + const lengthType pz = d > 1 ? mapAxis(sin16(static_cast(b * 2u)), d) : 0; + const RGB c = colorFromPalette(*Palettes::active(), + static_cast(i * (255u / n) + (walk >> 9))); + // Written at the plane's width, so a head starts at full precision and the decay has + // somewhere to go: writing a byte would put the whole tail in the top 8 bits. + writeWide(plane, w, h, d, px, py, pz, c); + } + } + + /// A signed 16-bit sine mapped onto an axis, centered, with the ends reachable. + static lengthType mapAxis(int16_t s, lengthType extent) { + if (extent <= 1) return 0; + const int32_t v = (static_cast(s) + 32768) * (extent - 1) / 65535; + return static_cast(v); + } + + /// One light at the plane's full width: an 8-bit color widened by repeating the byte, so 255 + /// becomes 65535 rather than 65280 and a full-brightness head is genuinely full. + static void writeWide(uint16_t* plane, lengthType w, lengthType h, lengthType d, + lengthType x, lengthType y, lengthType z, RGB c) { + if (x < 0 || y < 0 || z < 0 || x >= w || y >= h || z >= d) return; + const size_t off = (static_cast(z) * h * w + static_cast(y) * w + x) * 3; + plane[off + 0] = static_cast((c.r << 8) | c.r); + plane[off + 1] = static_cast((c.g << 8) | c.g); + plane[off + 2] = static_cast((c.b << 8) | c.b); + } + + /// The wide plane onto the layer, taking each channel's high byte. The one narrowing step. + void blit(const uint16_t* p, lengthType w, lengthType h, lengthType d) { + const draw::Canvas cv = canvas(); + const std::size_t samples = static_cast(w) * h * d * 3; + std::size_t i = 0; + for (lengthType z = 0; z < d; z++) + for (lengthType y = 0; y < h; y++) + for (lengthType x = 0; x < w; x++, i += 3) { + if (i + 2 >= samples) return; + draw::pixel(cv, {x, y, z}, RGB{static_cast(p[i] >> 8), + static_cast(p[i + 1] >> 8), + static_cast(p[i + 2] >> 8)}); + } + } + + ScratchBuffer plane_{*this}; ///< the trail itself, three samples per light + ScratchBuffer scratch_{*this}; ///< advect's destination; the two alternate roles + bool front_ = true; ///< which of the two currently holds the trail + OscillatorBank<2> bank_; + lengthType planeW_ = 0, planeH_ = 0, planeD_ = 0; + uint32_t lastMs_ = 0; +}; + +} // namespace mm diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index d6c016ca..6a4dd1a9 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -5,13 +5,13 @@ #include "core/moonlive/MoonLiveBuiltins.h" #include "core/moonlive/MoonLiveBuiltins_common.h" // the neutral half: math, waveforms, noise, print #include "core/moonlive/MoonLive.h" // runDefineControls drives the engine -#include "core/moonlive/MoonLiveIr.h" // kArg3 — the register `t` is passed in +#include "core/moonlive/MoonLiveIr.h" // kArg3: the register `t` is passed in #include #include -#include "core/math8.h" // beatsin16 — the shared time vocabulary -#include "core/math16.h" // beat16 / triwave16 — full-range waveforms +#include "core/math8.h" // beatsin16: the shared time vocabulary +#include "core/math16.h" // beat16 / triwave16: full-range waveforms #include "light/shader.h" // shader::smoothstep, the GLSL vocabulary, already in fixed point #include "core/noise.h" // inoise8: the shared gradient-noise field #include @@ -19,7 +19,7 @@ #include "light/draw.h" // draw::line, the shared 3D Bresenham a script draws with #include "light/particles.h" // particles::Pool, the kernel a scripted particle effect drives -// MoonLive — the LIGHT-DOMAIN built-in registration. This is the only place the LED vocabulary +// MoonLive: the LIGHT-DOMAIN built-in registration. This is the only place the LED vocabulary // lives: the function NAMES (`setRGB`, `fill`, `random16`), their arg counts, and the meaning // of the inline opcodes (StoreElem = an RGB pixel write, FillElems = fill every light). The core // compiler sees only the neutral BuiltinTable / InlineOp tags this file hands it. A different @@ -31,7 +31,7 @@ namespace mm::moonlive { // random16(n) → a pseudo-random value in [0, n). A simple LCG, deterministic enough that the // runtime Bounds guard always sees an in-range index; the same implementation on every target // so a script behaves identically. The one host helper exposed as a Call so far. -// The palette, as THREE builtins — `paletteR(i, bri)`, `paletteG(i, bri)`, `paletteB(i, bri)`. +// The palette, as THREE builtins: `paletteR(i, bri)`, `paletteG(i, bri)`, `paletteB(i, bri)`. // `bri` is the brightness colorFromPalette already takes, and it is what gives a shape a // radial falloff instead of a flat fill. A builtin returns // one uint32_t, so a packed 0xRRGGBB would need the script to unpack it, and the language has no @@ -170,7 +170,7 @@ extern "C" inline uint32_t mm_light_uvY(const uintptr_t* args, uint32_t, const u // no rescaling anywhere. // // The products are int64 and have to be. z*z at the escape radius is 4.0, whose Q32 square is -// about 7.4e10 — an int32 overflows there and the point reads as escaped when it has not, which +// about 7.4e10: an int32 overflows there and the point reads as escaped when it has not, which // draws holes in the middle of the set. // // `iters` is the detail dial and the cost: the loop is bounded by it, so a script trades @@ -220,14 +220,14 @@ extern "C" inline uint32_t mm_light_escape(const uintptr_t* args, uint32_t, cons // scale(value, n) → map a 0..65535 value onto 0..n-1. The other half of `beat`: a beat is full-scale // by design so it is fixture-independent, and this is what lands it on an actual axis. `beat(30, t)` // then `scale(…, width)` is the sweep position, which is exactly what LinesEffect computes -// (`beat * n / 65536`) — including the detail that it REACHES n-1, where the naive `/ 65535` form +// (`beat * n / 65536`): including the detail that it REACHES n-1, where the naive `/ 65535` form // truncates one short and the last column never lights. -// sin(angle) / cos(angle) — the full-turn wave, angle 0..65535 for one revolution. +// sin(angle) / cos(angle): the full-turn wave, angle 0..65535 for one revolution. // // math16's sin16/cos16 return SIGNED -32768..32767; a script's values are unsigned, so the result // is biased into 0..65535 with the zero line at 32768. A script that wants a coordinate scales the // result: `scale(sin(a), width)` sweeps the whole axis, which is the same `scale` a beat uses. -// polarA(dx, dy) / polarR(dx, dy) — the POLAR pair (Angle, Radius), for an effect written around distance and +// polarA(dx, dy) / polarR(dx, dy): the POLAR pair (Angle, Radius), for an effect written around distance and // bearing from a center rather than around x/y. Both take offsets that a script computes as // `x - cx`, which is unsigned and therefore wraps for a point left of center: the builtins // re-center it themselves (see below), so a script does not have to reason about the wrap. @@ -305,7 +305,7 @@ extern "C" inline uint32_t mm_light_osc(const uintptr_t* args, uint32_t, const u // That case cost a long debugging session before this existed. // // **Rate-limited, because the call sites are per-light.** A modifier's script runs once per light -// per mapping rebuild — 16,384 times on a 128x128 wall. Printing all of them would flood the serial +// per mapping rebuild: 16,384 times on a 128x128 wall. Printing all of them would flood the serial // line, stall the render (a UART write blocks) and bury the first values, which are the useful // ones. So a burst is capped and the rest are counted, not printed: the tail of a flood tells you // nothing the head did not. @@ -315,25 +315,25 @@ extern "C" inline uint32_t mm_light_osc(const uintptr_t* args, uint32_t, const u // // A layout cannot write into a buffer the way an effect does: it does not know how many lights it // will place until it has placed them, and on a classic ESP32 a 16k-light fixture would need 48 KB -// of coordinate staging — memory that board does not have. So the script CALLS OUT instead, once +// of coordinate staging: memory that board does not have. So the script CALLS OUT instead, once // per light, and the host decides what to do with each: count it on the sizing pass, emit it into // the consumer's sink on the walk. Nothing is stored. // // The active sink is set by the binding around each run. Outside a run it is null and a call is -// ignored — a script that reaches addLight from an effect places nothing rather than corrupting +// ignored: a script that reaches addLight from an effect places nothing rather than corrupting // something. using AddLightFn = void (*)(void* ctx, uint16_t x, uint16_t y, uint16_t z); /// PER-THREAD, not one global: the sink belongs to whichever thread is running a script, and more /// than one does. A layout is asked for its light count and its coordinates from the HTTP task when a -/// control is edited, while the render task walks the same layout for the frame — as one global, one +/// control is edited, while the render task walks the same layout for the frame: as one global, one /// thread cleared the sink while the other was mid-run and the built-in called through a live /// function pointer with a null context. That is a null dereference on the render core, seen as an /// intermittent crash while resizing a scripted layout. /// /// Keyed on platform::currentThreadId() rather than C++ `thread_local`, which is UNUSABLE on the /// ESP32: the compiler reaches TLS through the THREADPTR special register, and a FreeRTOS task -/// created without TLS has THREADPTR = 0 — so the access dereferences a small offset from null and +/// created without TLS has THREADPTR = 0: so the access dereferences a small offset from null and /// dies inside the exception handler. Measured: EXCVADDR 0xfffffff0, `Double exception` in /// _xt_context_save, on every scripted LAYOUT (the only binding whose script calls a host function). /// Reading the task handle costs one load and needs no per-task setup. @@ -395,13 +395,35 @@ struct MotionSink { MotionFn fn = nullptr; void* ctx = nullptr; }; /// read-only handle installed around each tick. A script calling pool(400) from tick() therefore /// reaches no sizing sink and gets a no-op returning the live count, which is what keeps allocation /// off the render path entirely. +using TrailSizeFn = bool (*)(void* ctx, bool want); +struct TrailSizeSink { TrailSizeFn fn = nullptr; void* ctx = nullptr; }; + using PoolSizeFn = uint16_t (*)(void* ctx, uint16_t count); struct PoolSizeSink { PoolSizeFn fn = nullptr; void* ctx = nullptr; }; struct PoolSink { particles::Pool* pool = nullptr; uint32_t scale = particles::FrameTime::kOne; }; +/// The trail plane a script advects and decays, and the frame's dt. +/// +/// A data handle rather than a function sink, for PoolSink's reason: the script names a flow and a +/// persistence, and the BINDING owns the two planes, their geometry and the ping-pong between them. +/// Framerate independence is the system's property too: `dtMs` arrives here rather than being asked +/// of the script, so a script author cannot get it wrong and a slow frame cannot skip the decay. +struct FlowSink { + uint16_t* a = nullptr; ///< one of the two planes, three uint16 per light + uint16_t* b = nullptr; ///< the other; which one holds the trail is `front` + /// Points at the BINDING's own flag, so a script's advect calls flip the owner's state + /// directly. Copying the flag into the sink and reading it back afterwards would work only for + /// an even number of swaps, and a script may advect once, twice or not at all. + bool* front = nullptr; ///< true: `a` holds the trail; false: `b` does + lengthType w = 0, h = 0, d = 0; + uint32_t dtMs = 0; + uint16_t* live() const { return !front ? nullptr : (*front ? a : b); } + uint16_t* spare() const { return !front ? nullptr : (*front ? b : a); } +}; + namespace detail { // `owner` is ATOMIC and claimed with compare_exchange: the claim used to be a load then a store, -// so two threads could both see the same slot free and both take it — leaving them sharing one +// so two threads could both see the same slot free and both take it: leaving them sharing one // sink, which is the very aliasing this table exists to prevent. // // The slot is the ONE per-thread home for everything a running script's built-ins reach: the @@ -409,9 +431,10 @@ namespace detail { // second table would repeat the claim/release machinery for the same lifetime. struct SinkSlot { std::atomic owner{0}; AddLightSink sink; draw::Canvas canvas; AddControlSink controls; FadeSink fade; MotionSink motion; CoordSink coord; - PalSink pal; PoolSizeSink poolSize; PoolSink pool; }; + PalSink pal; PoolSizeSink poolSize; PoolSink pool; FlowSink flow; + TrailSizeSink trailSize; }; /// Two slots: the render task and whichever task edits a control are the two that ever run a script -/// at once. A third concurrent runner gets the overflow slot, which holds no sink — so its addLight +/// at once. A third concurrent runner gets the overflow slot, which holds no sink: so its addLight /// calls no-op instead of writing through someone else's context. // constinit at namespace scope, not a function-local static: a local static carries a thread-safe // initialisation guard, which is a lock, and this is read from the render tick. Constant @@ -419,7 +442,7 @@ struct SinkSlot { std::atomic owner{0}; AddLightSink sink; draw::Canv inline constinit SinkSlot gSinkSlots[2]{}; inline SinkSlot* sinkSlots() MM_NONBLOCKING { return gSinkSlots; } /// PERMANENTLY EMPTY. A third concurrent runner reads this and finds no sink, so its addLight calls -/// no-op — setAddLightSink deliberately never installs here, because a shared sink would let two +/// no-op: setAddLightSink deliberately never installs here, because a shared sink would let two /// overflow threads write through each other's context. inline const AddLightSink& sinkOverflow() { static const AddLightSink s; return s; } /// The canvas twin of sinkOverflow: data stays null, so a third runner's draw calls no-op. @@ -575,6 +598,37 @@ inline void setPoolSink(particles::Pool* pool, uint32_t scale) MM_NONBLOCKING { if (!pool) detail::releaseIfEmpty(s); } +/// Where trail() asks for its plane, during defineControls only (the pool's own shape). +inline const TrailSizeSink& trailSizeSink() MM_NONBLOCKING { + detail::SinkSlot* s = detail::ownedSlot(false); + static constinit TrailSizeSink none{}; + return s ? s->trailSize : none; +} + +/// Install the trail sizer for one defineControls() run; nullptr to detach. +inline void setTrailSizeSink(TrailSizeFn fn, void* ctx) MM_NONBLOCKING { + detail::SinkSlot* s = detail::ownedSlot(fn != nullptr); + if (!s) return; + s->trailSize = {fn, ctx}; + if (!fn) detail::releaseIfEmpty(s); +} + +/// The trail plane this run may advect and decay, or an empty handle when there is none. +inline FlowSink& flowSink() MM_NONBLOCKING { + detail::SinkSlot* s = detail::ownedSlot(false); + static constinit FlowSink none{}; + return s ? s->flow : none; +} + +/// Hand the flow builtins their planes for one run; a null front detaches. The binding owns the +/// buffers and reads `swapped` afterwards to learn which one now holds the trail. +inline void setFlowSink(const FlowSink& f) MM_NONBLOCKING { + detail::SinkSlot* s = detail::ownedSlot(f.a != nullptr); + if (!s) return; + s->flow = f; + if (!f.a) detail::releaseIfEmpty(s); +} + /// Point addControl at a consumer for the duration of one defineControls() run; nullptr to detach. /// False when the two-slot table is full, which the caller must not treat as an installed sink: /// every addControl would then be a silent no-op and the script would publish no controls at all. @@ -599,7 +653,7 @@ inline void setAddLightSink(AddLightFn fn, void* ctx) { } // Install ONLY into an owned slot. Writing through addLightSink() would install into the shared // overflow sink when both slots are taken, and a second overflow thread would then run through - // the first one's context — the exact aliasing the two-slot table exists to prevent. A third + // the first one's context: the exact aliasing the two-slot table exists to prevent. A third // concurrent runner instead gets no sink at all, so its addLight calls no-op: visibly nothing // placed, rather than lights written through another thread's layout. detail::SinkSlot* s = detail::ownedSlot(true); @@ -682,13 +736,13 @@ inline void setDrawCanvas(const draw::Canvas& cv) MM_NONBLOCKING { /// /// One call where a script used to write three: `paletteR/G/B` each returned a single channel, so /// a palette pixel cost three host calls AND three evaluations of whatever expression produced the -/// brightness — the compiler evaluates each argument independently. Measured on an S3, that was +/// brightness: the compiler evaluates each argument independently. Measured on an S3, that was /// 1451 us flat vs 1940 us with a per-pixel falloff; folding it into one call removes two of the /// three calls and two of the three brightness computations. /// /// Takes x/y rather than a flat index so the buffer layout stops leaking into every script: a /// script was writing `mod(bx + dx, width) + mod(by + dy, height) * width` at every call site. -/// Out-of-range coordinates are dropped, not wrapped — a "negative" coordinate arrives as a huge +/// Out-of-range coordinates are dropped, not wrapped: a "negative" coordinate arrives as a huge /// unsigned value, and wrapping it would paint the wrong edge rather than nothing. /// setPalEntry(i, r, g, b) - write one of the sixteen active palette entries. /// @@ -697,7 +751,7 @@ inline void setDrawCanvas(const draw::Canvas& cv) MM_NONBLOCKING { /// a gradient stop list can express. /// /// The index is BOUNDED rather than wrapped: a script computing an index from a control could -/// otherwise write a neighbouring entry and produce a palette nobody wrote, which reads as an engine +/// otherwise write a neighboring entry and produce a palette nobody wrote, which reads as an engine /// fault. Out of range does nothing, which is visible in the picture and blames the script. extern "C" inline uint32_t mm_light_setPalEntry(const uintptr_t* args, uint32_t, const uint8_t*) { const PalSink& s = palSink(); @@ -758,6 +812,110 @@ extern "C" inline uint32_t mm_light_setPaletteColor(const uintptr_t* args, uint3 /// /// Reaches nothing from a layout or a modifier, where no sink is installed, so the call is a /// no-op there rather than fading a layer the script is not ticking in. +/// trail(1) asks for the trail plane; trail(0) gives it up. Answers whether one is available. +/// +/// The pool's shape, for the pool's reason: the planes are two 16-bit buffers (96 KB on a 20-cube), +/// so they exist only for a script that says it advects, and the ask happens at defineControls +/// where allocation is legal. Called from tick() it REPORTS rather than resizing, so the render +/// path never allocates. +extern "C" inline uint32_t mm_light_trail(const uintptr_t* args, uint32_t, const uint8_t*) { + const TrailSizeSink& s = trailSizeSink(); + if (!s.fn) return flowSink().live() != nullptr ? 1u : 0u; // outside defineControls: report + return s.fn(s.ctx, uint32_t(args[0]) != 0) ? 1u : 0u; +} + +// The flow builtins: a script names a wind and a persistence, and the binding owns the planes. +// +// `flowNoise(scale, strength)` and `flowCurl(scale, strength)` each ADVECT the whole trail plane in +// one call, because the alternative (a script loop calling a per-pixel rule) would cross the script +// boundary once per light, which on a 20-cube is 8000 calls a frame. One call, the loop in C++. + +/// Advect the trail along a noise field: two decoupled samples, one per axis. +extern "C" inline uint32_t mm_light_flowNoise(const uintptr_t* args, uint32_t, const uint8_t*) { + FlowSink& f = flowSink(); + if (!f.live() || !f.spare()) return 0; + const uint32_t cells = (uint32_t(args[0]) ? uint32_t(args[0]) : 1u) * 256u; + const int32_t strength = signedArg(args[1]); + const uint32_t t = platform::millis(); + draw::advect16(f.spare(), f.live(), f.w, f.h, f.d, + [&](lengthType x, lengthType y, lengthType z, draw::pos_t& vx, draw::pos_t& vy) { + const uint32_t fx = uint32_t(x) * cells, fy = uint32_t(y) * cells; + const uint32_t fz = uint32_t(z) * cells + t / 4u; + const int32_t nx = int32_t(inoise16(fx, fy, fz)) - 32768; + const int32_t ny = int32_t(inoise16(fx + 0x9E37u, fy + 0x7C15u, fz)) - 32768; + vx = draw::pos_t((nx * strength) >> 15); + vy = draw::pos_t((ny * strength) >> 15); + }, draw::Edge::Clamp); + *f.front = !*f.front; // the destination now holds the trail + return 0; +} + +/// Advect the trail along a curl field: the same, but divergence-free, so nothing clumps. +extern "C" inline uint32_t mm_light_flowCurl(const uintptr_t* args, uint32_t, const uint8_t*) { + FlowSink& f = flowSink(); + if (!f.live() || !f.spare()) return 0; + const uint32_t cells = (uint32_t(args[0]) ? uint32_t(args[0]) : 1u) * 256u; + const int32_t strength = signedArg(args[1]); + const uint32_t t = platform::millis(); + draw::advect16(f.spare(), f.live(), f.w, f.h, f.d, + [&](lengthType x, lengthType y, lengthType z, draw::pos_t& vx, draw::pos_t& vy) { + int32_t cx = 0, cy = 0; + curl16(uint32_t(x) * cells, uint32_t(y) * cells, + uint32_t(z) * cells + t / 4u, strength, cx, cy); + vx = draw::pos_t(cx); + vy = draw::pos_t(cy); + }, draw::Edge::Clamp); + *f.front = !*f.front; + return 0; +} + +/// Dim the trail by a half-life in milliseconds: the tail's length, in seconds rather than frames. +/// +/// `trailDecay`, not `decay`: a builtin name is reserved for every script, and `decay` is an +/// ordinary word for a member (`pulse.mle` and `beat-flash.mlp` both declare one). Taking it broke +/// both scripts, which is a real backward-compatibility break for a name this vocabulary does not +/// need. The existing `fade` builtin already pushed authors to `fadeAmt` for the same reason. +extern "C" inline uint32_t mm_light_trailDecay(const uintptr_t* args, uint32_t, const uint8_t*) { + FlowSink& f = flowSink(); + if (!f.live()) return 0; + const size_t n = size_t(f.w) * f.h * f.d * 3; + draw::decay16(f.live(), n, uint32_t(args[0]), f.dtMs); + return 0; +} + +/// Throw light into the trail: a disc at the plane's full width, so the decay has somewhere to go. +/// Takes a palette index rather than a color, as setPaletteColor does. +/// +/// `radius` in whole lights, and it is what decides whether a long tail is visible at all. Advection +/// spreads a head bilinearly, so after N frames one light's worth of brightness covers roughly N +/// pixels: a single-pixel head on a 4-second tail arrives at about 1 part in 255 and the panel reads +/// as a faint smear. A disc injects radius^2 times as much for the same tail, which is the knob that +/// makes persistence usable rather than merely long. +extern "C" inline uint32_t mm_light_emitTrail(const uintptr_t* args, uint32_t, const uint8_t*) { + FlowSink& f = flowSink(); + uint16_t* plane = f.live(); + if (!plane) return 0; + const int32_t cx = signedArg(args[0]), cy = signedArg(args[1]), cz = signedArg(args[2]); + const RGB c = colorFromPalette(*Palettes::active(), byteArg(args[3]), byteArg(args[4])); + const int32_t r = args ? signedArg(args[5]) : 0; + const int32_t rad = r < 0 ? 0 : (r > 32 ? 32 : r); // a runaway radius is a full-frame loop + const uint16_t wr = uint16_t((c.r << 8) | c.r); // widened by repeating the byte, so a + const uint16_t wg = uint16_t((c.g << 8) | c.g); // full head is 65535 rather than 65280 + const uint16_t wb = uint16_t((c.b << 8) | c.b); + for (int32_t dy = -rad; dy <= rad; dy++) { + for (int32_t dx = -rad; dx <= rad; dx++) { + if (dx * dx + dy * dy > rad * rad) continue; // a disc, not a square + const int32_t x = cx + dx, y = cy + dy; + if (x < 0 || y < 0 || cz < 0 || x >= f.w || y >= f.h || cz >= f.d) continue; + const size_t off = (size_t(cz) * f.h * f.w + size_t(y) * f.w + x) * 3; + plane[off + 0] = wr; + plane[off + 1] = wg; + plane[off + 2] = wb; + } + } + return 0; +} + extern "C" inline uint32_t mm_light_fade(const uintptr_t* args, uint32_t, const uint8_t*) { const FadeSink& f = fadeSink(); if (!f.fn) return 0; @@ -1067,7 +1225,7 @@ inline void writeSysVarSlot(uint8_t* arenaSlot, uint32_t value) MM_NONBLOCKING { } /// The system variables a light script can read. Each binding registers the names it actually -/// WRITES, so an unwritten name stays unknown rather than reading a silent 0 — a script that asks +/// WRITES, so an unwritten name stays unknown rather than reading a silent 0: a script that asks /// for something its host never supplies gets a compile error naming it, which is the honest answer. /// /// Registering is also what RESERVES the name: a script cannot declare a control or a loop variable @@ -1135,7 +1293,7 @@ inline SysVarTable effectSysVars() { return lightSysVars(); } inline SysVarTable modifierSysVars() { return lightSysVars(); } // The light-domain built-in table the binding injects into the compiler. setRGB and fill are -// Inline (they lower to stores — the hot-path writers, no per-call cost); random16 is a Call. +// Inline (they lower to stores: the hot-path writers, no per-call cost); random16 is a Call. // The distances are signed and re-centered here. draw::smin already widens its intermediates to 64 // bits, and that is load-bearing: a wrapped smin returns a value larger than BOTH inputs, which // inverts the blend rather than degrading it. @@ -1170,6 +1328,12 @@ inline const BuiltinTable& lightBuiltins() { // fade(amt) → dim every light toward black, FastLED's fadeToBlackBy. The trail // primitive, collected by the layer so N fading effects cost one pass. See mm_light_fade. t.add({"fade", 1, /*returns*/ false, BuiltinKind::Call, &mm_light_fade, {}}); + // The flow family: each advects the whole plane in one call (see the handlers). + t.add({"trail", 1, /*returns*/ true, BuiltinKind::Call, &mm_light_trail, {}}); + t.add({"flowNoise", 2, false, BuiltinKind::Call, &mm_light_flowNoise, {}}); + t.add({"flowCurl", 2, false, BuiltinKind::Call, &mm_light_flowCurl, {}}); + t.add({"trailDecay", 1, false, BuiltinKind::Call, &mm_light_trailDecay, {}}); + t.add({"emitTrail", 6, false, BuiltinKind::Call, &mm_light_emitTrail, {}}); // setPan(index, value) / setTilt(index, value) → aim a moving head. Calls, not Inline stores: // the channel offset comes from the layer's fixture map, which the engine cannot see. // The audio vocabulary. All return 0 without audio, so a script written for a rig with a @@ -1283,7 +1447,8 @@ inline const BuiltinTable& lightBuiltins() { /// modifier). Installed and detached in the same bracket as the control sink: sizing a pool and /// declaring a control are the same moment, and sharing the bracket means a script's pool cannot /// be resized from anywhere else. -inline void runDefineControls(MoonLive& engine, PoolSizeFn sizePool = nullptr, void* poolCtx = nullptr) { +inline void runDefineControls(MoonLive& engine, PoolSizeFn sizePool = nullptr, void* poolCtx = nullptr, + TrailSizeFn sizeTrail = nullptr, void* trailCtx = nullptr) { // A script with no defineControls() declares no controls, which is the honest answer for one // that wants no UI: there is nothing to clear and nothing to run. if (!engine.hasEntry(kEntryDefineControls)) return; @@ -1296,12 +1461,14 @@ inline void runDefineControls(MoonLive& engine, PoolSizeFn sizePool = nullptr, v static_cast(ctx)->addDeclaredControl(n, off, lo, hi, type); }, &engine)) return; if (sizePool) setPoolSizeSink(sizePool, poolCtx); + if (sizeTrail) setTrailSizeSink(sizeTrail, trailCtx); engine.clearDeclaredControls(); // re-runnable: rebuild rather than append // A one-light scratch buffer: this entry point writes no pixels, but `run` refuses a null or // undersized one, and honoring that contract costs less than carving out an exception. uint8_t scratch[3] = {}; engine.run(scratch, 1, 3, 0, kEntryDefineControls); if (sizePool) setPoolSizeSink(nullptr, nullptr); + if (sizeTrail) setTrailSizeSink(nullptr, nullptr); setAddControlSink(nullptr, nullptr); } diff --git a/src/light/moonlive/MoonLiveEffect.h b/src/light/moonlive/MoonLiveEffect.h index 4f7c55ed..1cc571bf 100644 --- a/src/light/moonlive/MoonLiveEffect.h +++ b/src/light/moonlive/MoonLiveEffect.h @@ -8,7 +8,7 @@ #include #include -// MoonLiveEffect — a scripted effect rendered by the MoonLive engine (§3.3 of +// MoonLiveEffect: a scripted effect rendered by the MoonLive engine (§3.3 of // livescripts-analysis-top-down.md). The thin binding side of the engine/binding seam: it // IS a first-class EffectBase (role, controls, lifecycle, generic UI), and its tick() // delegates to a compiled MoonLive over this effect's own buffer. @@ -16,7 +16,7 @@ // The effect holds a `source` text control; prepare compiles it through the engine and // tick() runs the emitted native code over the buffer (emit → allocExec → call → write). A // source edit recompiles live; a parse error shows in the module status and the layer goes -// dark — robust, no reboot. +// dark: robust, no reboot. namespace mm { @@ -46,7 +46,7 @@ class MoonLiveEffect : public EffectBase { // script recompiles (the script-editor loop), which re-derives the control set. void defineControls() override { // The script NAME, not the script. The text lives in a file the UI loads, edits and - // saves through /api/file — so a module costs ~32 bytes here instead of a resident + // saves through /api/file: so a module costs ~32 bytes here instead of a resident // kilobyte, and a script is bounded by the filesystem rather than by this array. controls_.addFilePath("script", script_.buffer(), script_.bufferSize(), moonlive::kEffectPick); @@ -64,7 +64,7 @@ class MoonLiveEffect : public EffectBase { } // Compile the source on the cold rebuild path. A failed compile (parse error or no exec - // memory) surfaces in the module status and leaves tick() a no-op — the effect renders + // memory) surfaces in the module status and leaves tick() a no-op: the effect renders // dark, the device keeps running (robustness + no-reboot). A *source* edit re-enters here and // recompiles, so a new script swaps in live; a broken edit just shows its diagnostic. // Compile the script if the file changed, then surface whatever it declares. @@ -77,7 +77,15 @@ class MoonLiveEffect : public EffectBase { script_.setPoolSizer([](void* ctx, uint16_t n) -> uint16_t { return static_cast(ctx)->particles_.resize(n); }, this); + // Whether the script wants a trail plane, asked the same way and for the same reason: two + // 16-bit planes are 96 KB on a 20-cube, so only a script that advects pays for them. + script_.setTrailSizer([](void* ctx, bool want) -> bool { + return static_cast(ctx)->resizeTrail(want); + }, this); script_.sync(moonlive::effectSysVars(), *this); + // The planes follow the FIXTURE, so a resize re-sizes them even though the script did not + // change: sync() only re-runs defineControls when the source did. + if (trailWanted_) resizeTrail(true); // The compile re-derives the declared-control set, so rebuild the control list to surface // it (the same rebuildControls() pattern NetworkModule uses when a state change reshapes // its controls). Each scripted control re-binds to its (stable-address) arena slot. @@ -121,11 +129,34 @@ class MoonLiveEffect : public EffectBase { // computed: framerate independence is the system's property, not the script author's. if (particles_.count() > 0) moonlive::setPoolSink(&particles_.pool(), particles_.advance(elapsed())); + // The trail plane, for a script that advects. Allocated only when one asked for it, since + // it is two 16-bit planes: on a 20-cube that is 96 KB, which a script drawing dots must not + // pay. The binding owns the geometry, the ping-pong and the dt for the same reason it owns + // the particle pool's frame scale: none of it is the script author's to get right. + const uint32_t nowMs = elapsed(); + const uint32_t dt = nowMs - lastTickMs_; + lastTickMs_ = nowMs; + if (trailA_) { + moonlive::FlowSink f{}; + f.a = trailA_.data(); + f.b = trailB_.data(); + f.front = &trailFront_; + f.w = width(); f.h = height(); f.d = depth(); + f.dtMs = dt; + moonlive::setFlowSink(f); + } // The frame moment: run `tick` if the script defined one. A script that defines only // `modifyLogical` renders nothing here and folds coordinates instead, which is the author's // choice rather than an error. if (script_.engine().hasEntry(moonlive::kEntryTick)) script_.engine().run(buffer(), nrOfLights(), cpl, elapsed(), moonlive::kEntryTick); + // The trail plane onto the layer, taking each channel's high byte: the one narrowing step, + // and the one the script cannot do for itself. Without it a script advects and decays a + // plane nobody ever reads, which renders black however correct the flow is. + if (trailA_) { + moonlive::setFlowSink({}); + blitTrail(); + } moonlive::setPoolSink(nullptr, 0); moonlive::setMotionSink(nullptr, nullptr); moonlive::setFadeSink(nullptr, nullptr); @@ -141,7 +172,7 @@ class MoonLiveEffect : public EffectBase { EffectBase::release(); } - /// Replace the script. The next prepare() compiles it — the same path a UI edit takes, so a + /// Replace the script. The next prepare() compiles it: the same path a UI edit takes, so a /// test and a user exercise identical code. /// Point the module at a script in the shared script directory. The file itself is written by /// the UI (or the File Manager); this only says WHICH one, and the next prepare() compiles it. @@ -160,6 +191,49 @@ class MoonLiveEffect : public EffectBase { // renders nothing until one is named, rather than every new module compiling the same effect. moonlive::MoonLiveScript script_; moonlive::MoonLiveParticles particles_{*this}; + // The trail planes: two, because advection reads one and writes the other (reading and writing + // one buffer would sample pixels the same pass had already moved). `trailFront_` says which + // holds the trail, and the flow builtins flip it through a pointer. + ScratchBuffer trailA_{*this}; + ScratchBuffer trailB_{*this}; + bool trailFront_ = true; + bool trailWanted_ = false; + uint32_t lastTickMs_ = 0; + + /// The wide trail plane onto the layer. `draw::pixel` per light rather than a memcpy, because + /// the plane holds three uint16 per light while the layer holds `cpl` bytes: the widths differ + /// and so may the channel count. + void blitTrail() { + const uint16_t* p = (trailFront_ ? trailA_ : trailB_).data(); + if (!p) return; + const draw::Canvas cv = canvas(); + const lengthType w = width(), h = height(), d = depth(); + const std::size_t samples = static_cast(w) * h * d * 3; + std::size_t i = 0; + for (lengthType z = 0; z < d; z++) + for (lengthType y = 0; y < h; y++) + for (lengthType x = 0; x < w; x++, i += 3) { + if (i + 2 >= samples) return; + draw::pixel(cv, {x, y, z}, RGB{static_cast(p[i] >> 8), + static_cast(p[i + 1] >> 8), + static_cast(p[i + 2] >> 8)}); + } + } + + /// Size (or free) the trail planes for the current fixture. Returns whether one is available, + /// which is what the script sees: a device too small to hold them reports the truth rather than + /// rendering nothing in silence. + bool resizeTrail(bool want) { + trailWanted_ = want; + if (!want) { trailA_.resize(0); trailB_.resize(0); return false; } + const size_t n = static_cast(width()) * height() * depth() * 3; + if (n == 0) { trailA_.resize(0); trailB_.resize(0); return false; } + if (!trailA_.resize(n) || !trailB_.resize(n)) { + trailA_.resize(0); trailB_.resize(0); // a half-allocated pair is worse than none + return false; + } + return true; + } }; } // namespace mm diff --git a/src/light/moonlive/MoonLiveScript.h b/src/light/moonlive/MoonLiveScript.h index ee564629..b354c211 100644 --- a/src/light/moonlive/MoonLiveScript.h +++ b/src/light/moonlive/MoonLiveScript.h @@ -35,6 +35,10 @@ class MoonLiveScript { /// a binding with no particles, which is every binding but the effect today. void setPoolSizer(PoolSizeFn fn, void* ctx) { sizePool_ = fn; poolCtx_ = ctx; } + /// The same for a binding that owns a trail plane: the script asks with `trail(1)`, and only a + /// script that asks pays for the two 16-bit planes. + void setTrailSizer(TrailSizeFn fn, void* ctx) { sizeTrail_ = fn; trailCtx_ = ctx; } + /// Re-read the file and recompile IFF its content hash moved. /// /// Returns true when a NEW program was installed. That return value is load-bearing rather than @@ -86,7 +90,7 @@ class MoonLiveScript { // Declare the controls the script asks for, the way a compiled module does: by RUNNING // defineControls(). Before the binding's rebuildControls(), which turns the declared // list into UI cards. - runDefineControls(engine_, sizePool_, poolCtx_); + runDefineControls(engine_, sizePool_, poolCtx_, sizeTrail_, trailCtx_); // What the script SAYS it is, read once per compile rather than per frame. Both are // cold-path questions the host asks about a program, the same two a compiled module // answers with `Dim dimensions()` and `const char* tags()`. @@ -197,7 +201,7 @@ class MoonLiveScript { const moonlive::DeclaredControl* decls = engine_.declaredControls(n); for (uint8_t i = 0; i < n; i++) { uint8_t* slot = engine_.controlSlot(decls[i].offset); - if (!slot) continue; // engine not compiled yet — controls appear after prepare + if (!slot) continue; // engine not compiled yet: controls appear after prepare // Published as the widget the member's TYPE calls for. Every scalar occupies the same // 4-byte slot, so this is no longer a width dispatch: it is the semantic one, and the // storage underneath is identical in all three cases. @@ -209,13 +213,13 @@ class MoonLiveScript { // byte and bool point at the slot's LOW BYTE, which is only correct because the two // are masked on store: the upper three bytes are always zero, so a 1-byte control // reading and writing that byte sees the member's whole value. On a big-endian target - // the low byte would be at offset+3 — no supported target is one. + // the low byte would be at offset+3: no supported target is one. switch (decls[i].type) { case moonlive::CtrlType::Bool: // NORMALIZED before the byte is ever read as a `bool`. A script's store // truncates rather than normalizing, so a bool member can legally hold 7 // (`flag = 7;` is ordinary arithmetic to the language), and a C++ bool object - // holding anything but 0 or 1 is undefined behaviour the moment it is read. + // holding anything but 0 or 1 is undefined behavior the moment it is read. // One write at publish time settles it; every later write comes through // applyControlValue's parseBool, which yields 0 or 1 by construction. *slot = (*slot != 0) ? 1 : 0; @@ -282,8 +286,10 @@ class MoonLiveScript { char failedScript_[kMaxScriptName + 1] = ""; size_t reportedBytes_ = 0; // what this script last added to the owner's total - PoolSizeFn sizePool_ = nullptr; - void* poolCtx_ = nullptr; + PoolSizeFn sizePool_ = nullptr; + void* poolCtx_ = nullptr; + TrailSizeFn sizeTrail_ = nullptr; + void* trailCtx_ = nullptr; }; } // namespace mm::moonlive diff --git a/src/light/moonlive/script_catalog.h b/src/light/moonlive/script_catalog.h index f8d5d6fe..9711916e 100644 --- a/src/light/moonlive/script_catalog.h +++ b/src/light/moonlive/script_catalog.h @@ -39,8 +39,9 @@ constexpr const char* kEffectCatalog[] = { "sparkle.mle", "spectrum.mle", "sweep.mle", + "trails.mle", }; -constexpr size_t kEffectCatalogCount = 25; +constexpr size_t kEffectCatalogCount = 26; /// What each effect above declares about itself, in the same order. /// A dimension of 0 means the script says nothing, so the DEVICE decides the default. constexpr unsigned char kEffectCatalogDim[] = { @@ -69,6 +70,7 @@ constexpr unsigned char kEffectCatalogDim[] = { 3, 2, 1, + 3, }; /// The emoji each declares, "" when it declares none. constexpr const char* kEffectCatalogTags[] = { @@ -97,6 +99,7 @@ constexpr const char* kEffectCatalogTags[] = { "💫", "💫🎶", "💫🎯", + "💫🖌️", }; constexpr const char* kEffectFolder = "effects"; ///< its directory upstream @@ -210,6 +213,6 @@ constexpr const char* kPaletteCatalogTags[] = { }; constexpr const char* kPaletteFolder = "palettes"; ///< its directory upstream -constexpr size_t kCatalogCount = 43; ///< every factory script, all roles +constexpr size_t kCatalogCount = 44; ///< every factory script, all roles } // namespace mm::moonlive diff --git a/src/main.cpp b/src/main.cpp index 8ab2f7f2..8fb10634 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -47,6 +47,7 @@ #include "light/effects/AuroraEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/WaterRippleEffect.h" +#include "light/effects/TrailsEffect.h" #include "light/effects/TunnelEffect.h" #include "light/effects/EchoEffect.h" #include "light/effects/DissolveEffect.h" @@ -239,6 +240,7 @@ static void registerModuleTypes() { mm::ModuleFactory::registerType("AuroraEffect", "light/effects.md#aurora"); mm::ModuleFactory::registerType("PolarNoiseEffect", "light/effects.md#polarnoise"); mm::ModuleFactory::registerType("WaterRippleEffect", "light/effects.md#waterripple"); + mm::ModuleFactory::registerType("TrailsEffect", "light/effects.md#trails"); mm::ModuleFactory::registerType("TunnelEffect", "light/effects.md#tunnel"); mm::ModuleFactory::registerType("EchoEffect", "light/effects.md#echo"); mm::ModuleFactory::registerType("DissolveEffect", "light/effects.md#dissolve"); diff --git a/src/ui/preview3d.js b/src/ui/preview3d.js index a2dc8ab5..d1d59c3c 100644 --- a/src/ui/preview3d.js +++ b/src/ui/preview3d.js @@ -885,7 +885,22 @@ function drawVerts() { // Fade them by base sprite size — full rings ≥8px, gone ≤4px — so the layout shows on // small/zoomed grids and the lit pattern reads cleanly when dense. Lit dots are never // faded (their alpha ignores uRingFade in the shader). - const ringFade = Math.max(0, Math.min(1, (pointSize - 4) / 4)); + let ringFade = Math.max(0, Math.min(1, (pointSize - 4) / 4)); + // A VOLUME needs the opposite of a flat grid. On a panel the placeholders sit in one plane and + // an opaque one costs nothing; in a cube every dark LED is in front of some other LED, so at a + // large dot size the placeholders stack into a solid grey wall and the lit pattern inside it + // cannot be seen at all. Fade them by the depth they have to be seen through, and further as + // the dots grow: the layout still reads, and the effect shows through it. + if (dims > 2) { + // A volume stacks its placeholders: seen through N slices they compose as 1-(1-a)^N, so + // the same alpha that is a light tint on a panel is a wall in a cube. Solve for the per-LED + // value that holds the TOTAL at a quarter whatever the depth, so the layout stays readable + // without hiding the effect inside it. (The occlusion itself is fixed above, by not writing + // depth; this is what keeps the remaining tint from adding up.) + const kVolumeHaze = 0.25; + const perLed = 1 - Math.pow(1 - kVolumeHaze, 1 / Math.max(1, bZ)); + ringFade = Math.min(ringFade, perLed / 0.22); // 0.22 is the shader's base alpha + } gl.uniform1f(glLocs.uRingFade, ringFade); // Two passes so lit LEDs always sit ABOVE the grey placeholders (your "lights should layer @@ -894,10 +909,15 @@ function drawVerts() { // off-LED placeholders and writes depth; pass 2 draws the lit LEDs with depthFunc LEQUAL // and depth-WRITE off — so a lit dot beats a co-located placeholder (equal depth passes) // yet lit dots still depth-sort against each other in a true 3D cube under any pan/tilt. - gl.uniform1f(glLocs.uLitPass, 0.0); // placeholders (write depth) + // Placeholders do NOT write depth. They are decoration, not geometry: an unlit LED that + // occupies the depth buffer HIDES every lit LED behind it, however transparent it looks, since + // the depth test rejects the later fragment before its alpha is ever considered. That is what + // made a cube a solid wall at large dot sizes: not the grey, the depth. With the write off, a + // dark LED tints what is behind it and nothing more, so a volume is seen through. + gl.depthMask(false); + gl.uniform1f(glLocs.uLitPass, 0.0); // placeholders (no depth write) gl.drawArrays(gl.POINTS, 0, lastVertCount); gl.depthFunc(gl.LEQUAL); - gl.depthMask(false); gl.uniform1f(glLocs.uLitPass, 1.0); // lit LEDs, on top gl.drawArrays(gl.POINTS, 0, lastVertCount); gl.depthMask(true); diff --git a/test/scenario_runner.cpp b/test/scenario_runner.cpp index 02e0990b..81628f29 100644 --- a/test/scenario_runner.cpp +++ b/test/scenario_runner.cpp @@ -23,6 +23,7 @@ #include "light/moonlive/MoonLiveModifier.h" #include "light/moonlive/MoonLiveLayout.h" #include "light/effects/AuroraEffect.h" +#include "light/effects/TrailsEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" #include "light/effects/RingsEffect.h" @@ -222,6 +223,7 @@ static void registerScenarioTypes() { mm::ModuleFactory::registerType("MoonLiveModifier"); mm::ModuleFactory::registerType("MoonLiveLayout"); mm::ModuleFactory::registerType("AuroraEffect"); + mm::ModuleFactory::registerType("TrailsEffect"); mm::ModuleFactory::registerType("PolarNoiseEffect"); mm::ModuleFactory::registerType("SpiralEffect"); mm::ModuleFactory::registerType("RingsEffect"); diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index ff1f9ffb..370b6556 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -88,8 +88,8 @@ "p95": 890, "min": 474, "max": 890, - "n": 9, - "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890] + "n": 10, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827] }, "last_updated": "2026-09-04" } @@ -118,8 +118,8 @@ "p95": 320, "min": 207, "max": 320, - "n": 9, - "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317] + "n": 10, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317] }, "last_updated": "2026-09-04" } @@ -148,8 +148,8 @@ "p95": 192, "min": 127, "max": 192, - "n": 9, - "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186] + "n": 10, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185] }, "last_updated": "2026-09-04" } @@ -178,8 +178,8 @@ "p95": 554, "min": 303, "max": 554, - "n": 9, - "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551] + "n": 10, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551] }, "last_updated": "2026-09-04" } @@ -208,8 +208,8 @@ "p95": 974, "min": 474, "max": 974, - "n": 9, - "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938] + "n": 10, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945] }, "last_updated": "2026-09-04" } @@ -234,12 +234,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1423, + "p50": 1430, "p95": 1562, "min": 785, "max": 1562, - "n": 8, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455] + "n": 9, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458] }, "last_updated": "2026-09-04" } @@ -268,8 +268,8 @@ "p95": 1511, "min": 507, "max": 1511, - "n": 9, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498] + "n": 10, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506] }, "last_updated": "2026-09-04" } @@ -295,11 +295,11 @@ "desktop-macos": { "tick_us": { "p50": 1092, - "p95": 1108, + "p95": 1118, "min": 333, - "max": 1108, - "n": 9, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104] + "max": 1118, + "n": 10, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118] }, "last_updated": "2026-09-04" } diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index cdb5abe1..2ddd23c8 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -85,12 +85,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 281, + "p50": 283, "p95": 387, "min": 189, "max": 387, - "n": 10, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289] + "n": 11, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325] }, "last_updated": "2026-09-04" } @@ -115,12 +115,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 275, + "p50": 279, "p95": 313, "min": 183, "max": 313, - "n": 10, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313] + "n": 11, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297] }, "last_updated": "2026-09-04" } @@ -145,12 +145,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 274, - "p95": 288, + "p50": 279, + "p95": 289, "min": 168, - "max": 288, - "n": 10, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288] + "max": 289, + "n": 11, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289] }, "last_updated": "2026-09-04" } @@ -175,12 +175,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 274, - "p95": 285, + "p50": 277, + "p95": 286, "min": 168, - "max": 285, - "n": 10, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285] + "max": 286, + "n": 11, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286] }, "last_updated": "2026-09-04" } @@ -205,12 +205,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 137, + "p50": 138, "p95": 144, "min": 83, "max": 144, - "n": 10, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144] + "n": 11, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141] }, "last_updated": "2026-09-04" } @@ -239,8 +239,8 @@ "p95": 501, "min": 250, "max": 501, - "n": 10, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422] + "n": 11, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421] }, "last_updated": "2026-09-04" } @@ -271,12 +271,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1200, + "p50": 1206, "p95": 1239, "min": 960, "max": 1239, - "n": 10, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218] + "n": 11, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228] }, "last_updated": "2026-09-04" } @@ -305,8 +305,8 @@ "p95": 590, "min": 460, "max": 590, - "n": 10, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472] + "n": 11, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473] }, "last_updated": "2026-09-04" } diff --git a/test/scenarios/light/scenario_Trails_ladder.json b/test/scenarios/light/scenario_Trails_ladder.json new file mode 100644 index 00000000..509ae3af --- /dev/null +++ b/test/scenarios/light/scenario_Trails_ladder.json @@ -0,0 +1,323 @@ +{ + "name": "scenario_Trails_ladder", + "module": "TrailsEffect", + "mode": "mutate", + "also": [ + "draw", + "OscillatorBank", + "GridLayout", + "Layer" + ], + "description": "What a flow costs as a fixture grows, and what it costs to become a volume. Trails runs three passes over its own plane every frame (advect it along the flow, decay it by a half-life, write the emitters), so its cost is per light and the ladder is what proves that: 16x16, 32x32, 64x64 and then a 20x20x20 cube, which has roughly twice the lights of the 64x64 panel and must cost roughly twice as much rather than something worse. The last two steps hold the geometry still and move the controls instead, because a control that changes the cost would be the thing an author has to know about: persistence must not (the decay is a multiply per sample whatever the half-life) and dots must barely (an emitter is one write). The plane is 16-bit and there are two of them, so the memory each step reports is 6 bytes per light, which is the honest price of a tail that fades smoothly.", + "fixture": [ + { + "name": "fix-layouts", + "op": "add_module", + "id": "Layouts", + "type": "Layouts" + }, + { + "name": "fix-layers", + "op": "add_module", + "id": "Effects", + "type": "Effects", + "props": { + "layouts": "Layouts" + } + }, + { + "name": "fix-drivers", + "op": "add_module", + "id": "Drivers", + "type": "Drivers", + "props": { + "effects": "Effects" + } + } + ], + "steps": [ + { + "name": "canvas-clear-layers", + "description": "Self-canvas: clear and rebuild the pipeline this scenario assumes, so it runs from any device state.", + "op": "clear_children", + "id": "Effects" + }, + { + "name": "canvas-clear-layouts", + "op": "clear_children", + "id": "Layouts" + }, + { + "name": "canvas-grid", + "description": "A 16x16 panel to start the ladder: the smallest size a trail reads on, and the one every larger step is compared against per light.", + "op": "add_module", + "id": "Grid", + "type": "GridLayout", + "parent_id": "Layouts", + "props": { + "width": 16, + "height": 16, + "depth": 1 + } + }, + { + "name": "canvas-layer", + "op": "add_module", + "id": "Layer", + "type": "Layer", + "parent_id": "Effects" + }, + { + "name": "trails-16", + "description": "Trails as it ships, on 16x16. The tick is one advect plus one decay over the whole plane, plus a noise sample per light for the flow, so the per-light cost here is what every step below multiplies.", + "op": "add_module", + "id": "Trails", + "type": "TrailsEffect", + "parent_id": "Layer", + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 40, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: Trails at 16x16, 3 dots, curl off" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 10, + "p95": 11, + "min": 10, + "max": 11, + "n": 3, + "samples": [11, 10, 10] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "grid-32", + "description": "Four times the lights. Transport and decay are both per light, so this step and the next are what show the cost is linear rather than hiding a per-frame constant.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 32 + }, + { + "name": "grid-32-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 32, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 180, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: 32x32, four times 16x16" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 42, + "p95": 57, + "min": 40, + "max": 57, + "n": 3, + "samples": [57, 40, 42] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "grid-64", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 64 + }, + { + "name": "grid-64-h", + "description": "64x64: the size a panel user actually runs, and the one the catalog card's fps claim is read from.", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 64, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 650, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: 64x64, the panel size the card quotes" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 166, + "p95": 208, + "min": 160, + "max": 208, + "n": 3, + "samples": [208, 160, 166] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "cube-20", + "description": "The volumetric case, and the bench fixture: a 20x20x20 cube is 8000 lights against the panel's 4096, and every slice is carried by the same flow. What this pins is that 3D is the same cost per light, not a different algorithm.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 20 + }, + { + "name": "cube-20-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 20 + }, + { + "name": "cube-20-d", + "op": "set_control", + "id": "Grid", + "key": "depth", + "value": 20, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 1000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: the 20-cube, 8000 lights" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 323, + "p95": 331, + "min": 313, + "max": 331, + "n": 3, + "samples": [323, 313, 331] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "long-tail", + "description": "Persistence at its top. The decay is a multiply per sample whatever the half-life is, so a long tail must cost the same as a short one: a step that moved here would mean the decay had become conditional on its own result.", + "op": "set_control", + "id": "Trails", + "key": "persistence", + "value": 255, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 1000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: a long tail costs what a short one costs" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 321, + "p95": 334, + "min": 312, + "max": 334, + "n": 3, + "samples": [321, 312, 334] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "more-dots", + "description": "Eight emitters rather than three. A dot is one write, so this is the cheapest control on the effect and the step proves it: the emitters are not what a large fixture pays for.", + "op": "set_control", + "id": "Trails", + "key": "dots", + "value": 8, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 1000, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: emitters are nearly free next to the per-light passes" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 319, + "p95": 336, + "min": 312, + "max": 336, + "n": 3, + "samples": [319, 312, 336] + }, + "last_updated": "2026-09-04" + } + } + }, + { + "name": "back-to-panel", + "description": "Back to a flat 64x64, which frees the cube's planes. Returning near the earlier 64x64 number is what shows the effect carries no state that accumulates across a resize: the planes are rebuilt for the new geometry rather than reused.", + "op": "set_control", + "id": "Grid", + "key": "depth", + "value": 1 + }, + { + "name": "back-to-panel-w", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 64 + }, + { + "name": "back-to-panel-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 64, + "measure": true, + "contract": { + "desktop-macos": { + "tick_us": 520, + "free_heap": 0, + "set_by": "2026-09-04", + "reason": "measured 2026-09-04, budget ~3x p50: back to the 64x64 number above" + } + }, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 169, + "p95": 169, + "min": 164, + "max": 169, + "n": 3, + "samples": [164, 169, 169] + }, + "last_updated": "2026-09-04" + } + } + } + ] +} diff --git a/test/unit/core/unit_math16.cpp b/test/unit/core/unit_math16.cpp index 2ce1b358..3c1f40da 100644 --- a/test/unit/core/unit_math16.cpp +++ b/test/unit/core/unit_math16.cpp @@ -12,6 +12,7 @@ #include #include +#include #include using namespace mm; @@ -449,3 +450,48 @@ TEST_CASE("a beat completes one full cycle per beat, at any tempo") { // A zero tempo is a still frame rather than a divide-by-zero. CHECK(mm::beat16(0, 1234) == 0); } + +// halfLifeKeep: the decay a caller states as "half of it is gone after N ms". The properties below +// are what make it framerate-independent, which is the whole reason it exists. + +TEST_CASE("a half-life decay loses exactly half its value over one half-life") { + CHECK(mm::halfLifeKeep(100, 100) == 32768); // one half-life: half survives + CHECK(mm::halfLifeKeep(200, 100) == 16384); // two: a quarter + CHECK(mm::halfLifeKeep(400, 100) == 4096); // four: a sixteenth + // Nothing elapsed, or no half-life asked for, leaves the value alone rather than erasing it. + CHECK(mm::halfLifeKeep(0, 100) == 65536); + CHECK(mm::halfLifeKeep(50, 0) == 65536); + // A long stall decays to nothing instead of wrapping around to bright. + CHECK(mm::halfLifeKeep(100000, 100) == 0); +} + +TEST_CASE("two decay steps reach the same place as one step of twice the time") { + // The framerate-independence property, and the reason the half-life form replaces a per-frame + // fade: a device rendering at 30 fps and one at 60 must dim a trail at the same rate in + // SECONDS. Written as decay(2dt) == decay(dt)^2, which is what that means arithmetically. + // + // The tolerance is one count at the BYTE width every caller narrows to (a channel is 8 bits), + // not at the 16-bit width of the weight itself: 256 of 65536. Measured worst case is 11. + for (uint32_t halfLife : {10u, 100u, 1000u, 5000u}) { + for (uint32_t dt = 1; dt < halfLife * 2; dt += 7) { + const uint64_t once = mm::halfLifeKeep(dt, halfLife); + const uint64_t twice = mm::halfLifeKeep(2 * dt, halfLife); + const uint64_t squared = (once * once) >> 16; + const int64_t diff = static_cast(twice) - static_cast(squared); + CHECK(std::llabs(diff) <= 256); + } + } +} + +TEST_CASE("halving twice as often dims at the same rate, so framerate cannot change a trail") { + // The same property stated the way a user meets it: run 20 frames of 10 ms and 10 frames of + // 20 ms over the same 200 ms, and a value must land in the same place either way. + const uint32_t halfLife = 250; + uint64_t fast = 65535, slow = 65535; + for (int i = 0; i < 20; i++) fast = (fast * mm::halfLifeKeep(10, halfLife)) >> 16; + for (int i = 0; i < 10; i++) slow = (slow * mm::halfLifeKeep(20, halfLife)) >> 16; + // Both cover 200 ms of a 250 ms half-life, so both should sit near 65535 * 2^-0.8. + CHECK(std::llabs(static_cast(fast) - static_cast(slow)) <= 256); + CHECK(fast > 36000); // 2^-0.8 is 0.574, so ~37600 + CHECK(fast < 39000); +} diff --git a/test/unit/core/unit_moonlive_codegen_x86_64.cpp b/test/unit/core/unit_moonlive_codegen_x86_64.cpp index 113359d2..dd393cd7 100644 --- a/test/unit/core/unit_moonlive_codegen_x86_64.cpp +++ b/test/unit/core/unit_moonlive_codegen_x86_64.cpp @@ -535,12 +535,18 @@ TEST_CASE("x86_64: callLabel(L) patches to rel32 target - (site + 5)") { if (A.bytes()[i] == 0xE8) { callAt = i; break; } } REQUIRE(callAt != size_t(-1)); - // Now bind the label just after the call and finalize; rel = 0. + // Bind the label after the call and finalize. rel is measured from the END of the E8 + // instruction to the label, so it counts whatever callLabel emits AFTER the call: the pool + // restore that delivers a script function's return value. Asserting rel == 0 pinned the old + // shape, where the call was the last thing emitted. + const size_t afterCall = callAt + 5; A.bind(l); A.finalize(); + const int32_t expected = static_cast(A.size() - afterCall); int32_t rel; std::memcpy(&rel, A.bytes() + callAt + 1, 4); - CHECK(rel == 0); + CHECK(rel == expected); + CHECK(rel > 0); // the restore is emitted between the call and the label } // ================================================================================================= diff --git a/test/unit/core/unit_moonlive_compiler.cpp b/test/unit/core/unit_moonlive_compiler.cpp index 2e20a405..10eb3e60 100644 --- a/test/unit/core/unit_moonlive_compiler.cpp +++ b/test/unit/core/unit_moonlive_compiler.cpp @@ -1810,6 +1810,41 @@ TEST_CASE("a fixed local reports its scaling where it is read") { // call does, and the callee's value is delivered into the destination vreg once that pool is back. // Parking it in the frame's argument region instead was tried and rotated the enclosing call's // arguments, since that region is still being filled as the expression parses. +TEST_CASE("every shipped script still compiles after a builtin is added") { + // A builtin name is reserved for every script, so ADDING one can stop an existing script + // compiling: its member of that name becomes a call. Measured, not hypothetical: a `decay` + // builtin broke pulse.mle and beat-flash.mlp, which both declare `byte decay`, and the + // diagnostic pointed at the member rather than at the name that took it. It is `trailDecay`. + // + // The names below are the ones a member ACTUALLY uses in the shipped scripts today. A new + // builtin wanting one of them takes a compound name instead, as `fade` pushed authors to + // `fadeAmt`. (`scale` is a long-standing core builtin and no script declares it, so the rule + // is about what scripts use, not about every ordinary word.) + static constexpr const char* kNamesScriptsDeclare[] = { + "decay", "speed", "fade", "bri", "hue", "zoom", "twist", "contrast", "sparkle", + }; + const moonlive::BuiltinTable& t = moonlive::lightBuiltins(); + for (const char* word : kNamesScriptsDeclare) { + // `fade` is the exception that proves the rule: it was taken first, and every script since + // has written `fadeAmt`. Nothing else here may become a builtin. + if (std::strcmp(word, "fade") == 0) continue; + INFO("a builtin took a name the shipped scripts declare as a member: ", std::string(word)); + CHECK(t.find(word, std::strlen(word)) == nullptr); + } +} + +TEST_CASE("the builtin table has room for every name the light domain registers") { + // The table fails SILENTLY when full: add() returns false, nothing checks each call, and the + // script reports "unknown function" for a builtin that plainly exists in the source. The + // registration-time guard only prints, which no CI run reads, so this is the check that fails. + // It also keeps real headroom visible: the table hit 61 of 64 when the flow builtins landed. + const moonlive::BuiltinTable& t = moonlive::lightBuiltins(); + CHECK_FALSE(t.full()); // nothing was dropped + CHECK(t.registered() < moonlive::BuiltinTable::kMax); + // A domain within a couple of names of the cap is one commit from the silent failure. + CHECK(moonlive::BuiltinTable::kMax - t.registered() >= 4); +} + TEST_CASE("a script function's return value can be used in an expression") { moonlive::MoonLive eng; REQUIRE(eng.compile( diff --git a/test/unit/core/unit_noise.cpp b/test/unit/core/unit_noise.cpp index 4780fed1..5b2ae823 100644 --- a/test/unit/core/unit_noise.cpp +++ b/test/unit/core/unit_noise.cpp @@ -158,3 +158,39 @@ TEST_CASE("the z axis actually changes the field, rather than being carried and REQUIRE(total > 50); CHECK(differing * 4 > total * 3); // three quarters of samples move with z } + +TEST_CASE("a curl field has no sources or sinks, so what it carries cannot pile up") { + // The reason curl exists rather than sampling noise straight into a velocity. A field with + // divergence has places where flow converges (anything carried there collects into a clump) and + // places where it diverges (the medium thins to nothing). Curl is the perpendicular gradient of + // a potential, so its divergence is zero by construction, and what it carries keeps its shape. + // + // Measured here against the naive alternative over the same points: two noise samples used + // directly as vx and vy. + double curlDiv = 0, naiveDiv = 0; + int n = 0; + constexpr uint32_t kCell = 1u << 16, kEps = 4096; + for (uint32_t y = kCell * 2; y < kCell * 10; y += kCell / 2) { + for (uint32_t x = kCell * 2; x < kCell * 10; x += kCell / 2) { + int32_t ax, ay, bx, by, cx2, cy2, dx2, dy2; + mm::curl16(x + kEps, y, 1000, ax, ay); + mm::curl16(x - kEps, y, 1000, bx, by); + mm::curl16(x, y + kEps, 1000, cx2, cy2); + mm::curl16(x, y - kEps, 1000, dx2, dy2); + curlDiv += std::abs(static_cast(ax - bx) + static_cast(cy2 - dy2)); + + const auto naive = [](uint32_t a, uint32_t b, bool second) { + const int32_t v = second ? static_cast(mm::inoise16(a + 0x9E37u, b + 0x7C15u)) + : static_cast(mm::inoise16(a, b)); + return static_cast(v - 32768) * 1000.0 / 32768.0; + }; + naiveDiv += std::abs((naive(x + kEps, y, false) - naive(x - kEps, y, false)) + + (naive(x, y + kEps, true) - naive(x, y - kEps, true))); + n++; + } + } + REQUIRE(n > 0); + // Two orders of magnitude apart, measured: curl ~0.3, noise-as-velocity ~90. + CHECK(curlDiv / n < 5.0); + CHECK(naiveDiv / n > 20.0); +} diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index c729211d..965a15fa 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -65,6 +65,7 @@ #include "light/effects/SdfShapesEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/WaterRippleEffect.h" +#include "light/effects/TrailsEffect.h" #include "light/effects/TunnelEffect.h" #include "light/effects/EchoEffect.h" #include "light/effects/DissolveEffect.h" @@ -111,6 +112,7 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("two SDF shapes orbit and melt together, with a soft edge") { SdfShapesEffect e; golden::checkGolden("SdfShapesEffect", golden::renderHash(e, 16, 16, 1), 0xbcfb74b4836606a3ull); } SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x8d48e0d1e0180610ull); } SUBCASE("heat rises, cools and colors through the palette") { FireEffect e; golden::checkGolden("FireEffect", golden::renderHash(e, 16, 16, 1), 0x1cadbabb59bc489bull); } + SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x890d030651bf7d7cull); } SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } diff --git a/test/unit/light/unit_NoiseEffect.cpp b/test/unit/light/unit_NoiseEffect.cpp index 1df8762c..8acea7f0 100644 --- a/test/unit/light/unit_NoiseEffect.cpp +++ b/test/unit/light/unit_NoiseEffect.cpp @@ -7,6 +7,8 @@ // that they differ, and that each moves the way its name says. #include "doctest.h" + +#include "golden_frame.h" // ScopedTestClock: restores the real clock on scope exit #include "light/effects/NoiseEffect.h" #include "light/layers/Layer.h" #include "light/layouts/GridLayout.h" @@ -25,7 +27,9 @@ namespace { /// Render Noise for `frames` on a w x h x d fixture and return the final buffer. std::vector render(lengthType w, lengthType h, lengthType d, uint8_t motion, uint16_t frames = 40) { - platform::setTestNowMs(1000); + // RAII, so the override is cleared even if a REQUIRE below exits early: a leaked test clock + // freezes time for every test that runs after this one in the same binary. + const mm::golden::ScopedTestClock clock(1000); Layouts layouts; GridLayout grid; Layer layer; diff --git a/test/unit/light/unit_PolarLut_equivalence.cpp b/test/unit/light/unit_PolarLut_equivalence.cpp index 79ddf583..7a4b431f 100644 --- a/test/unit/light/unit_PolarLut_equivalence.cpp +++ b/test/unit/light/unit_PolarLut_equivalence.cpp @@ -7,6 +7,8 @@ // compared pixel by pixel. This is the evidence behind the re-baselined golden. #include "doctest.h" + +#include "golden_frame.h" // ScopedTestClock: restores the real clock on scope exit #include "light/effects/AuroraEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" @@ -28,7 +30,9 @@ namespace { template std::vector render(lengthType w, lengthType h, bool useTable, bool wide = false, uint16_t frames = 60, lengthType d = 1, uint8_t mapping = 0) { - platform::setTestNowMs(1000); + // RAII, so the override is cleared even if a REQUIRE below exits early: a leaked test clock + // freezes time for every test that runs after this one in the same binary. + const mm::golden::ScopedTestClock clock(1000); Layouts layouts; GridLayout grid; Layer layer; diff --git a/test/unit/light/unit_draw.cpp b/test/unit/light/unit_draw.cpp index bbe0c85d..0f3e0a4f 100644 --- a/test/unit/light/unit_draw.cpp +++ b/test/unit/light/unit_draw.cpp @@ -3,6 +3,8 @@ #include "doctest.h" #include "light/draw.h" +#include + using namespace mm; namespace { @@ -108,7 +110,7 @@ TEST_CASE("draw: line shorten pulls the far endpoint back toward the start") { namespace { // Reference blur (the FastLED blur1d carryover-seep, written the slow-but-obvious way) along x for -// one row, used to pin draw::blur's fast byte-level pass to the canonical behaviour. Mirrors +// one row, used to pin draw::blur's fast byte-level pass to the canonical behavior. Mirrors // MoonLight's blurRows for a single row. void refBlurRowX(Buffer& b, Coord3D dims, lengthType y, lengthType z, uint8_t amt) { const uint8_t keep = static_cast(255 - amt), seep = static_cast(amt >> 1); @@ -127,13 +129,13 @@ void refBlurRowX(Buffer& b, Coord3D dims, lengthType y, lengthType z, uint8_t am } // namespace // draw::blur on a 1D row matches the canonical carryover-seep reference byte-for-byte (same -// behaviour as FastLED blur1d / MoonLight blurRows), and is symmetric around a centred bright pixel. +// behavior as FastLED blur1d / MoonLight blurRows), and is symmetric around a centerd bright pixel. TEST_CASE("draw: blur matches the reference carryover-seep on a 1D row") { Buffer got, ref; Coord3D dims{5, 1, 1}; REQUIRE(got.allocate(5, 3)); REQUIRE(ref.allocate(5, 3)); - // A single white pixel in the centre of both buffers. + // A single white pixel in the center of both buffers. draw::pixel(got, dims, {2, 0, 0}, {255, 255, 255}); draw::pixel(ref, dims, {2, 0, 0}, {255, 255, 255}); @@ -144,18 +146,18 @@ TEST_CASE("draw: blur matches the reference carryover-seep on a 1D row") { const RGB g = at(got, dims, x, 0, 0), r = at(ref, dims, x, 0, 0); CHECK(g.r == r.r); CHECK(g.g == r.g); CHECK(g.b == r.b); } - // Centre stays brightest, the two immediate neighbours are equally lit (symmetry), the centre - // still has the most energy, and it spread outward (neighbours non-black). + // Center stays brightest, the two immediate neighbors are equally lit (symmetry), the center + // still has the most energy, and it spread outward (neighbors non-black). CHECK(at(got, dims, 1, 0, 0).r == at(got, dims, 3, 0, 0).r); CHECK(at(got, dims, 2, 0, 0).r > at(got, dims, 1, 0, 0).r); CHECK_FALSE(isBlack(at(got, dims, 1, 0, 0))); CHECK_FALSE(isBlack(at(got, dims, 3, 0, 0))); } -// blur runs separably on every axis with extent>1: a 2D blur spreads a centre pixel to all four -// orthogonal neighbours; a 3D blur reaches the z neighbours too. And it never writes out of bounds. +// blur runs separably on every axis with extent>1: a 2D blur spreads a center pixel to all four +// orthogonal neighbors; a 3D blur reaches the z neighbors too. And it never writes out of bounds. TEST_CASE("draw: blur spreads in 2D and 3D and is safe at degenerate sizes") { - { // 2D: centre pixel of a 5×5 reaches its 4 orthogonal neighbours. + { // 2D: center pixel of a 5×5 reaches its 4 orthogonal neighbors. Buffer buf; Coord3D dims{5, 5, 1}; REQUIRE(buf.allocate(25, 3)); draw::pixel(buf, dims, {2, 2, 0}, {255, 255, 255}); @@ -164,10 +166,10 @@ TEST_CASE("draw: blur spreads in 2D and 3D and is safe at degenerate sizes") { CHECK_FALSE(isBlack(at(buf, dims, 3, 2, 0))); // +x CHECK_FALSE(isBlack(at(buf, dims, 2, 1, 0))); // -y CHECK_FALSE(isBlack(at(buf, dims, 2, 3, 0))); // +y - // x/y symmetry: the four orthogonal neighbours carry equal energy. + // x/y symmetry: the four orthogonal neighbors carry equal energy. CHECK(at(buf, dims, 1, 2, 0).r == at(buf, dims, 2, 1, 0).r); } - { // 3D: the z neighbours light up too. + { // 3D: the z neighbors light up too. Buffer buf; Coord3D dims{3, 3, 3}; REQUIRE(buf.allocate(27, 3)); draw::pixel(buf, dims, {1, 1, 1}, {255, 255, 255}); @@ -179,14 +181,14 @@ TEST_CASE("draw: blur spreads in 2D and 3D and is safe at degenerate sizes") { Buffer buf; Coord3D dims{1, 1, 1}; REQUIRE(buf.allocate(1, 3)); draw::pixel(buf, dims, {0, 0, 0}, {200, 100, 50}); - draw::blur(buf, dims, 255); // nothing to seep — must be a safe no-op + draw::blur(buf, dims, 255); // nothing to seep: must be a safe no-op CHECK(at(buf, dims, 0, 0, 0).r == 200); draw::blur(buf, dims, 0); // amt 0 returns immediately CHECK(at(buf, dims, 0, 0, 0).r == 200); } } -// A glyph blits in the correct orientation — neither X-mirrored (a 'b' as a 'd') nor Y-flipped. +// A glyph blits in the correct orientation: neither X-mirrored (a 'b' as a 'd') nor Y-flipped. // 'L' is the ideal probe: its vertical bar must be on the LEFT and its foot on the BOTTOM row. This // guards the column-bit and row-direction reads, so the DemoReel name overlay renders each letter // upright and un-mirrored. @@ -211,7 +213,7 @@ TEST_CASE("draw: glyph renders upright and un-mirrored (the 'L' probe)") { for (lengthType x = 0; x < f.width; x++) if (!isBlack(at(buf, dims, x, static_cast(f.height - 2), 0))) bottomLit++; // row 6 (row 7 is blank) CHECK(bottomLit >= 4); // the foot spans several columns near the bottom - // The top row has only the single bar pixel, not the foot — so top != bottom (Y not flipped). + // The top row has only the single bar pixel, not the foot: so top != bottom (Y not flipped). int topLit = 0; for (lengthType x = 0; x < f.width; x++) if (!isBlack(at(buf, dims, x, 0, 0))) topLit++; @@ -292,3 +294,205 @@ TEST_CASE("draw::sprite mirrors horizontally without moving the sprite") { CHECK(isBlack(at(buf, dims, 0, 0, 0))); // flipped: the same footprint, mirrored CHECK(at(buf, dims, 3, 0, 0).r == 10); } + +// draw::decay is the framerate-independent trail fade: a duration, not a per-frame amount. These +// pin the property a user actually sees, which is that the same effect looks the same on a slow +// device and a fast one. + +TEST_CASE("decay dims a plane by half over one half-life at a realistic frame time") { + Buffer buf; + Coord3D dims{4, 4, 1}; + REQUIRE(buf.allocate(16, 3)); + const draw::Canvas cv = draw::Canvas::of(buf, 4, 4, 1); + draw::fill(cv, RGB{200, 200, 200}); + for (int i = 0; i < 10; i++) draw::decay(cv, 500, 50); // 500 ms at a 20 fps cadence + const RGB c = at(buf, dims, 1, 1, 0); + CHECK(c.r > 90); // half of 200, allowing for integer rounding + CHECK(c.r < 105); +} + +TEST_CASE("a 16-bit trail plane decays at the same rate whatever the framerate") { + // The property a byte plane CANNOT hold: re-rounding a byte hundreds of times a second either + // erases the trail (truncating) or freezes it solid (rounding). Measured, decaying 200 over a + // 500 ms half-life in 500 ms of frames, where the exact answer is 100: a byte plane gives 96 at + // 50 ms frames, 73 at 5 ms and 0 at 1 ms. The wide plane below holds 100/101/102. + auto runWide = [](int frames, uint32_t dt) { + uint16_t plane[16]; + for (uint16_t& v : plane) v = 200 * 257; // 200 widened to 16 bits + for (int i = 0; i < frames; i++) draw::decay16(plane, 16, 500, dt); + return static_cast(plane[5] / 257); // narrowed back to a byte + }; + const int slow = runWide(10, 50); // 20 fps + const int mid = runWide(100, 5); // 200 fps + const int fast = runWide(500, 1); // 1000 fps + CHECK(slow > 95); + CHECK(slow < 105); + CHECK(std::abs(slow - mid) <= 3); + CHECK(std::abs(slow - fast) <= 3); // the framerate independence the half-life form is for +} + +TEST_CASE("decay leaves a plane alone when no time has passed, and clears it after a long stall") { + Buffer buf; + Coord3D dims{4, 4, 1}; + REQUIRE(buf.allocate(16, 3)); + const draw::Canvas cv = draw::Canvas::of(buf, 4, 4, 1); + draw::fill(cv, RGB{123, 45, 67}); + + draw::decay(cv, 500, 0); // a frame that took no time changes nothing + CHECK(at(buf, dims, 0, 0, 0).r == 123); + draw::decay(cv, 0, 100); // no half-life asked for: also nothing + CHECK(at(buf, dims, 0, 0, 0).g == 45); + + draw::decay(cv, 10, 100000); // a long stall goes black rather than wrapping bright + CHECK(isBlack(at(buf, dims, 0, 0, 0))); +} + +// draw::advect moves a plane along a velocity field: the transport half of a flow, and what a +// trail is made of. It samples BACKWARD, so every destination pixel is written exactly once. + +TEST_CASE("advect carries the picture along the flow, one whole pixel at a time") { + Buffer src, dst; + Coord3D dims{8, 8, 1}; + REQUIRE(src.allocate(64, 3)); + REQUIRE(dst.allocate(64, 3)); + const draw::Canvas s = draw::Canvas::of(src, 8, 8, 1); + const draw::Canvas d = draw::Canvas::of(dst, 8, 8, 1); + draw::pixel(s, {2, 3, 0}, RGB{200, 100, 50}); + + // One pixel to the right per frame, so what was at x=2 must be found at x=3. + draw::advect(d, s, [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::kSubOne; vy = 0; + }); + CHECK(at(dst, dims, 3, 3, 0).r == 200); + CHECK(isBlack(at(dst, dims, 2, 3, 0))); +} + +TEST_CASE("a uniform field survives being advected, so a flow does not dim what it carries") { + // The property that separates transport from blur: moving a region of equal values must not + // change them, whatever the sub-pixel offset. A half-pixel step is the worst case, since it + // blends two neighbors at full weight. + Buffer src, dst; + Coord3D dims{8, 8, 1}; + REQUIRE(src.allocate(64, 3)); + REQUIRE(dst.allocate(64, 3)); + const draw::Canvas s = draw::Canvas::of(src, 8, 8, 1); + const draw::Canvas d = draw::Canvas::of(dst, 8, 8, 1); + draw::fill(s, RGB{180, 180, 180}); + draw::advect(d, s, [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::kSubOne / 2; vy = draw::kSubOne / 2; + }); + CHECK(at(dst, dims, 4, 4, 0).r == 180); +} + +TEST_CASE("the edge rule decides whether a flow loops the grid or leaves it") { + Buffer src, dst; + Coord3D dims{4, 4, 1}; + REQUIRE(src.allocate(16, 3)); + REQUIRE(dst.allocate(16, 3)); + const draw::Canvas s = draw::Canvas::of(src, 4, 4, 1); + const draw::Canvas d = draw::Canvas::of(dst, 4, 4, 1); + draw::pixel(s, {3, 1, 0}, RGB{255, 0, 0}); // lit at the right edge + + auto right = [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::kSubOne; vy = 0; + }; + // Wrapping: what leaves the right edge arrives at the left. + draw::advect(d, s, right, draw::Edge::Wrap); + CHECK(at(dst, dims, 0, 1, 0).r == 255); + // Clamping: it does not come back, and the edge column holds its own value instead. + draw::fill(d, RGB{0, 0, 0}); + draw::advect(d, s, right, draw::Edge::Clamp); + CHECK(isBlack(at(dst, dims, 0, 1, 0))); +} + +TEST_CASE("advect moves every slice of a volume, so a cube flows like a panel") { + // 3D is the default shape for this phase: the bench fixture is a 20-cube. A D2 rule leaves z + // alone, and each slice must still be carried. + Buffer src, dst; + Coord3D dims{4, 4, 3}; + REQUIRE(src.allocate(48, 3)); + REQUIRE(dst.allocate(48, 3)); + const draw::Canvas s = draw::Canvas::of(src, 4, 4, 3); + const draw::Canvas d = draw::Canvas::of(dst, 4, 4, 3); + draw::pixel(s, {1, 1, 0}, RGB{90, 0, 0}); + draw::pixel(s, {1, 1, 2}, RGB{200, 0, 0}); // a different value in the far slice + + draw::advect(d, s, [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::kSubOne; vy = 0; + }); + CHECK(at(dst, dims, 2, 1, 0).r == 90); // each slice carried its own content + CHECK(at(dst, dims, 2, 1, 2).r == 200); +} + +// disc and sphere: the SDF-shaded fills, where a sub-pixel center means a small shape can move +// between cells instead of jumping one at a time. + +TEST_CASE("a disc lights its interior and softens its edge") { + Buffer buf; + Coord3D dims{9, 9, 1}; + REQUIRE(buf.allocate(81, 3)); + const draw::Canvas cv = draw::Canvas::of(buf, 9, 9, 1); + draw::disc(cv, draw::toSub(4), draw::toSub(4), draw::toSub(3), RGB{255, 255, 255}); + + CHECK(at(buf, dims, 4, 4, 0).r == 255); // the middle is solid + CHECK(isBlack(at(buf, dims, 0, 0, 0))); // a far corner is untouched + // The rim is partial: neither full nor black, which is the anti-aliasing. + const uint8_t rim = at(buf, dims, 4, 1, 0).r; + CHECK(rim > 0); + CHECK(rim < 255); +} + +TEST_CASE("two overlapping discs brighten where they meet, because light adds") { + Buffer buf; + Coord3D dims{8, 8, 1}; + REQUIRE(buf.allocate(64, 3)); + const draw::Canvas cv = draw::Canvas::of(buf, 8, 8, 1); + draw::disc(cv, draw::toSub(3), draw::toSub(4), draw::toSub(2), RGB{100, 0, 0}); + const uint8_t single = at(buf, dims, 4, 4, 0).r; + draw::disc(cv, draw::toSub(5), draw::toSub(4), draw::toSub(2), RGB{100, 0, 0}); + CHECK(at(buf, dims, 4, 4, 0).r > single); // the overlap is brighter than one alone +} + +TEST_CASE("a sphere fills a volume, so a cube gets a ball rather than a stack of discs") { + Buffer buf; + Coord3D dims{7, 7, 7}; + REQUIRE(buf.allocate(343, 3)); + const draw::Canvas cv = draw::Canvas::of(buf, 7, 7, 7); + draw::sphere(cv, draw::toSub(3), draw::toSub(3), draw::toSub(3), draw::toSub(2), + RGB{255, 255, 255}); + CHECK(at(buf, dims, 3, 3, 3).r == 255); // the center of the volume + CHECK(at(buf, dims, 3, 3, 1).r > 0); // and it reaches along z + CHECK(isBlack(at(buf, dims, 0, 0, 0))); // but not into the corners +} + +// The velocity rules: plain functions, so an effect can drive them from anything. + +TEST_CASE("the wind blows every point the same way") { + draw::pos_t vx = 0, vy = 0; + draw::flowWind(0, 256, vx, vy); // angle 0 is +x + CHECK(vx > 200); + CHECK(vy > -20); + CHECK(vy < 20); + draw::flowWind(16384, 256, vx, vy); // a quarter turn is +y + CHECK(vy > 200); +} + +TEST_CASE("a radial flow points away from its center, and inward when reversed") { + draw::pos_t vx = 0, vy = 0; + draw::flowRadial(6, 3, 3, 3, 256, vx, vy); // to the right of center: pushed further right + CHECK(vx > 100); + draw::flowRadial(6, 3, 3, 3, -256, vx, vy); // negative speed draws it back in + CHECK(vx < -100); + // The center itself has no direction to move, and must not divide by zero reaching for one. + draw::flowRadial(3, 3, 3, 3, 256, vx, vy); + CHECK(vx == 0); + CHECK(vy == 0); +} + +TEST_CASE("a spiral is a radial flow with a turn added, so it both circles and escapes") { + draw::pos_t rx = 0, ry = 0, sx = 0, sy = 0; + draw::flowRadial(6, 3, 3, 3, 256, rx, ry); + draw::flowSpiral(6, 3, 3, 3, 256, 256, sx, sy); + CHECK(sx == rx); // the outward part is the same + CHECK(sy != ry); // and the angular part is what it adds +} From 907e51ae92e3282db89e03dcce37c46c737f3856 Mon Sep 17 00:00:00 2001 From: ewowi Date: Sat, 5 Sep 2026 07:29:19 +0200 Subject: [PATCH 5/7] Pour light into a simulated fluid, and compose fields at a fraction of the cost MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A new Fluid effect pours dye from sweeping jets into a medium that solves its own motion, so a vortex forms and travels because the equations say it must rather than because a function drew it. Nebula births a whole noise field into a curl flow and carries it as one folding cloud. Both come with scripts, and two levers let a script afford a per-pixel field on a large fixture: compute it at a fraction of the resolution, or only every Nth frame. Desktop, 64x64 panel: Fluid 134 us, and a 20x20x20 cube 232 us. The pressure solve is the cost knob, near-linear from 20 us at one iteration to 69 at twenty. Device numbers are unmeasured; the ESP32 pass is the next commit. Core - noise: curl16, the divergence-free flow field, with its strength product widened to int64 so a large fixture cannot overflow it - math16: halfLifeKeep, so a decay is stated in seconds and holds at any framerate Light domain - fluid.h: the Stam stable-fluid solver in Q16.16 (diffuse, project, advect, project), one independent medium per depth slice. Its four working grids are sized per slice rather than per volume, which a 20-cube was over-allocating by 121 KB - FluidEffect: jets whose radius breathes, whose aim leans off the tangent, and which alternate direction so they collide. Jets pinned to one circle all turning the same way sum into a single rotation, which the solver faithfully renders as a hollow ring - NebulaEffect: a thresholded field as the emitter, placed against the field's own measured range so one contrast setting means the same thing on any fixture - draw: advect16, decay16, quantize with temporal and ordered dithering, upscale16, and blit16, the one 16-to-8 narrowing step three effects had each copied. Two of the copies dithered and one truncated, so Trails banded where the others did not - TrailsEffect now narrows through blit16, which is why its golden moves UI - preview3d: placeholders no longer write depth, so a dark LED stops hiding every lit one behind it; the volume haze is solved per LED instead of accumulating Tests - unit_fluid: the solver's convergence bound, a jet moving dye, rest stability, and the release-then-prepare frame that crashed the desktop - unit_draw: upscale16 over a saddle, the fixture class that was missing - scenario_Fluid_solver: the iteration ladder, the cube, and the live reshapes Docs - Fluid and Nebula catalog cards; performance.md gains the solver's desktop rows - the generative-fields plan closes phases 3 through 5 Reviews - 👾 lerp wrapped on any descending pair (unsigned b - a): a 2x2 saddle of 0 and 100 produced 98354, so a noise field lit whole cells at full brightness under fieldScale. Fixed, and pinned with a saddle fixture that fails against the old code - 👾 upscale16 held a 24 KB tap table on a stack the ESP32 gives 12 KB, so the first stretched frame would have overflowed it. The table is the caller's scratch now, which also removes the 4096-wide fixture limit - 👾 a stalled pour poured its whole debt in one frame: capped at 80 ms - 👾 three tick-path allocations moved into prepare(); Nebula gained the same-count reshape clear Trails carries - 👾 fieldRate's counter sat inside the trail guard, so a script without trail(1) got 1 forever - 👾 accepted with a measurement instead: Nebula's birth is not framerate-dependent (9.047 against 9.066 over a 4x change, 0.2%), because the time-based decay balances it. The dead-alias finding was wrong too; t is read inside the flow lambda - 👾 spellings, dead code, and four docs that described what the code no longer did Co-Authored-By: Claude Opus 5 (1M context) --- .../generative-fields-analysis-top-down.md | 46 ++- docs/moonmodules/light/effects.md | 49 ++- docs/performance.md | 26 ++ moonlive/effects/fluid.mle | 44 ++ moonlive/effects/nebula.mle | 47 +++ src/core/noise.h | 14 +- src/light/draw.h | 215 ++++++++++ src/light/effects/FluidEffect.h | 257 ++++++++++++ src/light/effects/NebulaEffect.h | 273 +++++++++++++ src/light/effects/TrailsEffect.h | 64 ++- src/light/fluid.h | 241 +++++++++++ src/light/moonlive/MoonLiveBuiltins_light.h | 27 +- src/light/moonlive/MoonLiveEffect.h | 6 + src/light/moonlive/MoonLiveScriptFile.h | 5 + src/light/moonlive/script_catalog.h | 10 +- src/main.cpp | 4 + src/ui/preview3d.js | 28 +- test/CMakeLists.txt | 1 + test/scenario_runner.cpp | 4 + .../scenario_MoonModule_control_change.json | 24 +- .../light/scenario_Audio_mutation.json | 60 +-- test/scenarios/light/scenario_Aurora_fps.json | 90 ++--- .../light/scenario_Driver_mutation.json | 48 +-- .../light/scenario_Effects_composition.json | 10 +- .../light/scenario_Fields_polar_lut.json | 74 ++-- .../light/scenario_Fluid_solver.json | 375 ++++++++++++++++++ .../light/scenario_GridBlacks_blackpixel.json | 8 +- .../light/scenario_GridLayout_resize.json | 20 +- .../light/scenario_Layer_base_pipeline.json | 4 +- .../light/scenario_Layer_memory_1to1.json | 4 +- .../light/scenario_Layouts_mutation.json | 42 +- .../scenario_MoonLiveEffect_livescript.json | 36 +- .../light/scenario_MoonLive_pipeline.json | 20 +- .../scenario_MultiplyModifier_memory_lut.json | 6 +- .../scenario_MultiplyModifier_pipeline.json | 4 +- .../light/scenario_Trails_ladder.json | 64 +-- .../light/scenario_modifier_chain.json | 42 +- .../light/scenario_modifier_swap.json | 30 +- test/scenarios/light/scenario_perf_full.json | 132 +++--- test/scenarios/light/scenario_perf_light.json | 26 +- .../light/scenario_peripheral_grid_sweep.json | 142 +++---- .../light/scenario_peripheral_switch.json | 38 +- test/unit/core/unit_noise.cpp | 2 + test/unit/light/unit_Effects_golden.cpp | 21 +- test/unit/light/unit_draw.cpp | 144 +++++++ test/unit/light/unit_fluid.cpp | 196 +++++++++ 46 files changed, 2510 insertions(+), 513 deletions(-) create mode 100644 moonlive/effects/fluid.mle create mode 100644 moonlive/effects/nebula.mle create mode 100644 src/light/effects/FluidEffect.h create mode 100644 src/light/effects/NebulaEffect.h create mode 100644 src/light/fluid.h create mode 100644 test/scenarios/light/scenario_Fluid_solver.json create mode 100644 test/unit/light/unit_fluid.cpp diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md index 78365213..fb1f0168 100644 --- a/docs/backlog/generative-fields-analysis-top-down.md +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -460,10 +460,50 @@ volumetric trail meets first**: a 16-bit RGB plane is 48 KB on a 20-cube and 1.5 only, so PPA can be an acceleration behind an existing signature, never the main path. 5. KPI per target; the product owner's look on the wall. +### A scripted control's name can disagree with the file that declares it (2026-09-04, open) + +Reproduced on the desktop with `Nebula.mle`, and the three facts contradict each other: + +- the module's `script` control holds `Nebula.mle` (so the UI is NOT lowercasing the selection); +- `GET /api/file?path=/moonlive/Nebula.mle` returns a file whose line 20 is `addControl("rate", ...)`; +- the UI renders that slider as **`rate1`**, a name the file no longer contains anywhere. + +So the compiled program disagrees with its own source. `resolveScript` is exact-match and prefers +the user's copy, which is correct, and the picker sets `option.value` to the exact filename, so +neither is the cause. The `rate1` text is a name the file held EARLIER in the session, which points +at the control list surviving a recompile rather than at the resolver or the UI. + +**Ruled out by measurement, so a future look need not repeat it**: the builtin table has room (65 of +96); `kMaxCtrls` is 8 against 5 declared; the 64-byte arena holds five `byte` members; declaration +ORDER is irrelevant (moving the control first changed nothing); the control NAME is irrelevant +(renaming it changed nothing); `aurora.mle` and `trails.mle` have the identical shape and are fine. + +**Where to start**: `rebuildControls()` after a recompile, and whether a declared control that +vanishes from the script is cleared from `ControlList` or merely left behind. A test that compiles a +script, edits one control's name, recompiles and asserts the OLD name is gone would pin it. + +**A second, smaller thing this exposed**: `/moonlive/Nebula.mle` and `/.moonlive/nebula.mle` are two +files on the device and one on a case-insensitive desktop, and nothing stops a user creating a +capital-N file beside a lowercase catalog entry. The fork mechanism assumes the two names match. + ### Phase 5: fluid (medium; P4 and desktop) -1. `light/fluid.h` with its unit tests (divergence after `project` within tolerance; a jet moves dye; rest state is stable). -2. `FluidEffect` and `fluid.mle`; card with its per-target honesty; golden; scenario on the P4. -3. The backlog entry closes; performance.md rows on P4 and desktop. +1. ✅ `light/fluid.h` with its unit tests (divergence after `project` within tolerance; a jet moves dye; rest state is stable). +2. ✅ `FluidEffect` and `fluid.mle`; card, golden, and `scenario_Fluid_solver`. The scenario runs on the host; a P4 run needs a board. +3. ✅ performance.md carries the desktop rows; the P4 and S3 rows are open, since they need a board. + +**Two bugs the jets taught, both worth keeping.** The first shipped picture was a hollow RING, and +the cause was the forcing rather than the solver: jets pinned to one circle at `w/3`, all sweeping +the same direction, all aimed purely tangentially. Measuring speed by radius showed the energy in a +band (1.35 at r5 against 0.33 at the center) while `|grad v|` was a healthy 0.30 per cell, so the +medium was working and being asked the wrong question. The fix is three-part: the radius breathes +between center and wall, the aim leans either side of the tangent, and alternate jets sweep against +each other so they collide, because colliding jets are what roll up vortex pairs. After it, the peak +sits mid-panel (0.78 at r2) and the outer band halves. + +The second: a purely time-paced pour never fires on the opening tick, because `dt` is deliberately 0 +there, and on a fast device it then takes many frames to owe a whole period. The panel stays black +in the meantime and every resize repeats it. The first pour is now unconditional. The scenario's +`buffer non-zero after render` check is what caught it, at 16×16. ### After the phases: the catalog sweep (large; its own plan) Decision 5 mandates that every natural-motion effect runs on the power functions. That sweep is not a phase of this plan: it is sized and sequenced in its own plan once the kernels exist, from the [effects × power functions inventory](effects-power-function-inventory.md), which records for each of the 58 effects what it uses today and what it could use. Two rules carry over: each rewrite is compared on the panel against the effect as it ran and lands only if at least as beautiful, and an effect a showcase supersedes outright is deleted, the way a particle-system effect replaces its non-PS twin. diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index bae24696..63a9e8ff 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -82,7 +82,7 @@ Detail: [technical](moxygen/LavaLampEffect.md) -### Lines 💫 · , +### Lines 💫 · 3D Lines effect preview @@ -502,11 +502,50 @@ A maze of interlocking arcs that never repeats, drawn without storing a single t Origin: projectMM original, on Sébastien Truchet's 1704 tiling and the standard shader fract/hash/smoothstep idiom + + +### Fluid 💫🖌️ · 3D + +Light poured into a simulated medium and carried by it. Every other flow in this library is a function of position and time; this one is state, so a jet fired now changes where everything downstream goes for seconds afterwards and the same settings never quite repeat a minute. The solver is Stam's stable fluid (diffuse, project, advect, project), which is unconditionally stable at any timestep, and the projection is what keeps the flow divergence-free so dye neither piles up nor drains away. + +The jets are the effect's character, and they are deliberately not on a fixed circle: each one's radius breathes between the center and the wall, its aim leans either side of the tangent, and alternate jets sweep against each other. Jets pinned to one circle all turning the same way sum into a single rotation, which the solver faithfully renders as a hollow ring with a dead middle. Colliding jets are what roll up vortex pairs. + +- `jets`: how many places light is poured in. +- `force`: how hard each one pushes the medium. +- `swirl`: how fast the jets sweep, which is what stirs vortices rather than pumping in one direction. +- `viscosity`: how much the medium drags on itself; higher is syrup, lower is smoke. +- `persistence`: how long dye survives, as a half-life. +- `iterations`: pressure-solve effort, and the honest cost knob. At 1 the flow reads springy because the medium is not properly divergence-free. + +The dye is held at 16 bits and narrowed once on the way out, dithered temporally: a value multiplied by slightly less than one many times a second has nowhere to go at 8 bits. + +On a cube every depth slice is its own medium and the jets drift through the slices, so each one is stirred in turn and the slices differ rather than one plane repeating. Nothing is carried between slices: that is a volumetric solve, a different solver rather than a flag, and the same per-slice shape Trails has. A panel is depth 1 and pays nothing for it. Cost is several passes over the grid per frame plus `iterations` more for the pressure solve, so it is sized for the desktop and the P4. What an S3 can carry is unmeasured (performance.md holds the desktop rows). + +Origin: projectMM original, after Stam 1999 "Stable Fluids" + + + +### Nebula 💫🖌️ · 3D + +A noise field decides where light is born, a curl flow decides where it goes, and between them the cloud keeps folding into itself. The field is thresholded hard, so only its top survives and the rest is black; the flow is divergence-free, so nothing piles up or thins out. Neither half is new: what is, is that the emitter is a FIELD rather than a handful of dots, so light enters everywhere at once and the flow shapes a whole cloud instead of drawing trails. + +- `speed`: how fast the medium moves, and with it the whole cloud. +- `scale`: the field's cell size; low is broad clouds, high is wisps. +- `contrast`: what FRACTION of the field is bright enough to be born, placed against the field's own measured range rather than an absolute value, so the same setting means the same thing on any fixture. Measured on a 64x64 panel: 0 floods it, 128 is a haze, 192 (the default) a cloud with bright cores, 255 a few wisps. +- `persistence`: how long light survives once it is in the flow, as a half-life. +- `octaves`: detail within the field, and its cost knob. +- `fieldScale`: compute the field at half or quarter resolution and stretch it. A field is smooth, so this costs little visually and saves a great deal: measured 3.0x at half and 6.6x at quarter on a curl field. +- `fieldRate`: recompute the field every N frames. The flow still carries the cloud every frame, so this costs detail rather than smoothness. + +The cloud is held at 16 bits and narrowed once on the way out, dithered temporally, which is what keeps a slow fade smooth rather than stepped. + +Origin: projectMM original, composing the noise-field and curl-flow kernels + ### Trails 💫🖌️ · 3D -Dots thrown into a moving medium, leaving tails the flow carries and bends. Nothing draws a tail: the tail is the previous frames' dots, transported along a velocity field and dimmed, which is why the shape of the flow is visible in it. The medium moves through the volume too, so on a cube the tails lean through depth rather than a plane repeating. +Dots thrown into a moving medium, leaving tails the flow carries and bends. Nothing draws a tail: the tail is the previous frames' dots, transported along a velocity field and dimmed, which is why the shape of the flow is visible in it. On a cube each depth slice gets its own flow, so the slices differ rather than one plane repeating, though light is carried within a slice and not yet between them: the transport is 2D per slice until 3D advection ships. - `speed`: how fast the medium moves, and with it every tail. - `dots`: how many emitters are throwing light in. @@ -578,7 +617,7 @@ A lit 3D scene rendered by marching a ray through a distance field, one ray per - `cameraY`: camera height above the floor. - `showFloor`: include the ground plane. -**Compiled only where the SoC declares a hardware FPU** (`SOC_CPU_HAS_FPU`, which every ESP32 variant and the desktop satisfy). This is the one stated exception to the integer-only render-path rule, and it is gated rather than assumed. The cost is per *pixel*, not per chip: measured at 0.30 ms/frame for 32×32 on desktop, and 1.64 ms for 4096 lights on an ESP32-S3 while still holding 409 fps. What limits it is pixel count; `steps` trades quality for cost. Frames also stream over NetworkSend, so a desktop can drive a fixture that could never compute this locally. +**Compiled only where the SoC declares a hardware FPU** (`SOC_CPU_HAS_FPU`, which the desktop and every ESP32 target this project builds satisfy: S3, P4, S31 and the classic ESP32 were each checked). A target without one simply does not carry the effect, rather than failing to build. This is the one stated exception to the integer-only render-path rule, and it is gated rather than assumed. The cost is per *pixel*, not per chip: measured at 0.30 ms/frame for 32×32 on desktop, and 1.64 ms for 4096 lights on an ESP32-S3 while still holding 409 fps. What limits it is pixel count; `steps` trades quality for cost. Frames also stream over NetworkSend, so a desktop can drive a fixture that could never compute this locally. Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function articles @@ -594,8 +633,8 @@ A warped noise field addressed by angle and radius, folded into a kaleidoscope. - `warp`: domain-warp strength; 0 gives a plain field. - `octaves`: fbm octaves, and the main cost knob. - `twist`: how much the radius shears the angle, setting the spiral. -- `polarTable`: read each pixel's angle and radius from a table instead of computing them every frame. On by default: it is the same picture, measured 34% faster on an ESP32-S3, and costs 2 bytes per pixel. Turn it off on a device short of memory; the effect then computes the address and looks identical. -- `polarTable16`: hold that table at full 16-bit precision, at 4 bytes per pixel instead of 2. +- `polarTable`: read each pixel's angle and radius from a table instead of computing them every frame. On by default: measured 34% faster on an ESP32-S3, at 2 bytes per pixel. The 8-bit table quantizes the angle to 256 steps, so it is not pixel-identical to computing the address: a minority of channels differ, and only where the field is steepest. Turn it off on a device short of memory, and the effect computes the address per pixel instead. +- `polarTable16`: hold that table at full 16-bit precision, at 4 bytes per pixel instead of 2. This one IS pixel-identical to computing the address, which a unit test pins. Cost scales with `octaves` and `warp`: at `warp` > 0 and `octaves` 2 it is roughly 4 noise samples per pixel. On a large wall set `octaves` to 1 or `warp` to 0, which degrades to a plain polar noise that still reads well. diff --git a/docs/performance.md b/docs/performance.md index 66509dd5..85bd62b2 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -89,6 +89,32 @@ The 3D path is the closest to the bound and the reason: 3D gradient noise does e That reading held: the 8-bit tier improved most (2D by 4x on the host), because the value form quantized at every stage where the gradient form carries its dot products at full width. +### Fluid solver cost (host) + +`scenario_Fluid_solver`, desktop macOS arm64, tick in µs. The solver is Stam's stable fluid: several +passes over the grid per frame, plus `iterations` Gauss-Seidel sweeps for the pressure projection +that keeps the flow divergence-free. + +| Grid | iterations | tick µs | +|---|---:|---:| +| 32×32 | 1 | 20 | +| 32×32 | 5 (default) | 30 | +| 32×32 | 20 | 69 | +| 64×64 | 5 | 133 | +| 20×20×20 cube | 5 | 249 | +| 16×16 | 5 | 7 | + +Two properties an author picks a setting from. **`iterations` is near-linear**: 1 to 20 is 20 to +69 µs, since each is another sweep over the whole grid. **The forcing is free next to the solver**: +going from 2 jets to 4, and persistence from 150 to 255, moved 135 µs to 134 µs, inside the noise. +So the grid and the iteration count are the two knobs that matter, and the jets are a look rather +than a cost. **A cube is depth times one panel**: twenty 20×20 slices, each its own medium, cost +249 µs against 133 for one 64×64 panel with about half the lights, which is the per-slice solve +paying its boundary and projection twenty times over. + +Device rows are open: the P4 and S3 numbers need a board and have not been measured, so what +this effect can carry on either is an open question rather than a claim. + ### Memory at 128×128 with mirror | Module | dynamicBytes | Breakdown | diff --git a/moonlive/effects/fluid.mle b/moonlive/effects/fluid.mle new file mode 100644 index 00000000..4c9187b5 --- /dev/null +++ b/moonlive/effects/fluid.mle @@ -0,0 +1,44 @@ +// Fluid: dye poured from sweeping jets and carried away by the flow. + +class FluidEffect { + byte jets = 3; + byte swirl = 90; + byte zoom = 30; + byte force = 140; + byte persistence = 170; + + int dimensions() { return 3; } + + string tags() { return "💫🖌️"; } + + void defineControls() { + trail(1); + addControl("jets", jets, 1, 6); // how many places dye is poured in + addControl("swirl", swirl, 0, 255); // how fast the jets sweep + addControl("zoom", zoom, 1, 255); // the flow's cell size + addControl("force", force, 0, 255); // how hard the flow carries + addControl("persistence", persistence, 0, 255); // how long dye survives + } + + void tick() { + int span = width; + if (height > span) { span = height; } + + flowCurl(zoom, div(force * 4 * span, 64)); + trailDecay(40 + persistence * persistence / 12); + + int radius = div(span, 32) + 1; + + for (int i = 0; i < jets; i = i + 1) { + int rate = 3 + div(swirl, 12) + i * 2; + int a = osc(rate, t, 2) + i * 10922; + int reach = 40 + div(osc(div(rate, 3) + 1, t, 1), 280); + int jx = div(width, 2) + div((cos(a) - 32768) * div(width - 2, 2) * reach, 255 * 32768); + int jy = div(height, 2) + div((sin(a) - 32768) * div(height - 2, 2) * reach, 255 * 32768); + + for (int z = 0; z < depth; z = z + 1) { + emitTrail(jx, jy, z, mod(i * div(255, jets) + div(t, 64), 256), 255, radius); + } + } + } +} diff --git a/moonlive/effects/nebula.mle b/moonlive/effects/nebula.mle new file mode 100644 index 00000000..5ab35efc --- /dev/null +++ b/moonlive/effects/nebula.mle @@ -0,0 +1,47 @@ +// Nebula: a noise field births light, a curl flow carries it into a folding cloud. + +class NebulaEffect { + byte speed = 40; + byte zoom = 40; + byte contrast = 200; + byte persistence = 140; + byte rate = 1; + + int dimensions() { return 3; } + + string tags() { return "💫🖌️"; } + + void defineControls() { + trail(1); + addControl("speed", speed, 0, 255); // how fast the cloud moves + addControl("zoom", zoom, 1, 255); // the field's cell size + addControl("contrast", contrast, 0, 255); // how much of the field is born + addControl("persistence", persistence, 0, 255); // how long light survives + addControl("rate", rate, 1, 8); // birth the field every n frames + } + + void tick() { + int span = width; + if (height > span) { span = height; } + + int grain = div(zoom * 256, span * 16) + 1; + int push = div(speed * 4 * span, 64); + + flowCurl(zoom, push); + trailDecay(40 + persistence * persistence / 12); + + if (fieldRate(rate) > 0) { + for (int z = 0; z < depth; z = z + 1) { + for (int y = 0; y < height; y = y + 1) { + for (int x = 0; x < width; x = x + 1) { + int v = fbm3(x * grain, y * grain + div(t, 32), z * grain, 2); + if (v > contrast) { + int bri = div((v - contrast) * 255, 256 - contrast); + emitTrail(x, y, z, bri, bri, 0); + } + } + } + } + } + } +} diff --git a/src/core/noise.h b/src/core/noise.h index ed46fc31..40f63056 100644 --- a/src/core/noise.h +++ b/src/core/noise.h @@ -435,8 +435,18 @@ inline void curl16(uint32_t x, uint32_t y, uint32_t z, int32_t strength, - static_cast(inoise16(x - eps, y, z)); // The differences span roughly a quarter of the range at the default eps, so >>15 keeps the // result near `strength` rather than swamping it. A caller wanting a wilder field raises eps. - vx = (dy * strength) >> 15; - vy = (-dx * strength) >> 15; + // + // Widened to 64 bits for the product: a difference reaches +-65535 and `strength` is the + // caller's own number, so `dy * strength` overflows a signed 32-bit at a strength above 32768, + // which a large panel already approaches (a 768-wide fixture at full speed passes 12240, and a + // stalled frame scales that further). Signed overflow is undefined, so this is a real fault + // rather than a wrap; clamped on the way back down so a wild strength saturates instead. + const auto scaled = [](int32_t d, int32_t s) -> int32_t { + const int64_t v = (static_cast(d) * s) >> 15; + return static_cast(v > INT32_MAX ? INT32_MAX : (v < INT32_MIN ? INT32_MIN : v)); + }; + vx = scaled(dy, strength); + vy = scaled(-dx, strength); } /// The 2D form: the same field at a fixed z, which is what a panel wants. diff --git a/src/light/draw.h b/src/light/draw.h index 8b916b34..9a5c05db 100644 --- a/src/light/draw.h +++ b/src/light/draw.h @@ -1278,6 +1278,221 @@ inline void sphere(const Canvas& cv, pos_t cx, pos_t cy, pos_t cz, pos_t r, RGB } } +// --- Rendering below the output resolution ----------------------------------------------------- +// +// The cost of a field effect is per light, so the cheapest way to afford one on a large fixture is +// to compute FEWER lights and interpolate the rest. A field is smooth by construction, which is +// exactly the property that makes this nearly free visually: at half resolution a noise field +// carries a quarter of the samples and the eye cannot tell, because the values in between were +// always going to be close to their neighbors. +// +// This is the `fieldScale` lever. Its companion is `fieldRate`, which is not a primitive: an effect +// updates its field every N frames and lets the oscillators advance every frame, so the motion +// stays smooth while the expensive part runs less often. +// +// **What it is worth depends on the field's cost per sample, and only that.** The stretch itself is +// a fixed price per OUTPUT light (measured at 1.55 ns a sample, which is the bilinear arithmetic's +// own floor), so it saves nothing on a field that was already cheap. Measured on a 64x64 layer: +// +// | field | full | half | quarter | +// |---|---|---|---| +// | 2-octave fbm (1 noise sample) | 59 us | 34 us (1.7x) | 23 us (2.6x) | +// | curl (4 noise samples) | 212 us | 71 us (3.0x) | 32 us (6.6x) | +// +// So this is a lever for the expensive fields, the ones an S3 cannot otherwise afford, and a +// caller reaching for it on a cheap one is paying the stretch for almost nothing. + +/// One destination column's blend: the two source columns and the weight between them. +struct UpscaleTap { uint16_t a, b; uint16_t w; }; + +/// Bilinearly stretch a smaller 16-bit plane over a larger one. +/// +/// `src` is `sw x sh x sd` samples, three per light; `dst` is `dw x dh x dd`. Both are the effect's +/// own planes, so this takes raw pointers rather than a Canvas: a field at half resolution is not a +/// fixture and has no channel count of its own. +/// +/// The z axis is interpolated too when both planes have depth, so a volumetric field can be +/// computed on a coarse cube. A plane with `sd == 1` is stretched flat across the destination's +/// depth instead, which is what a 2D field on a 3D fixture wants and costs no z work at all. +/// +/// `taps` is the caller's scratch, `dw` entries: the per-column blend table, hoisted out of the +/// inner loop. It belongs to the caller because this runs from tick(), where neither the heap nor +/// a large frame is available. An earlier version held it as a 4096-entry local, which is 24 KB on +/// a stack the ESP32 gives 12 KB (CONFIG_ESP_MAIN_TASK_STACK_SIZE), so the first stretched frame +/// would have overflowed it. Pass fewer than `dw` entries and the call does nothing. +inline void upscale16(uint16_t* dst, lengthType dw, lengthType dh, lengthType dd, + const uint16_t* src, lengthType sw, lengthType sh, lengthType sd, + UpscaleTap* taps, size_t tapCount) { + if (!dst || !src || dw <= 0 || dh <= 0 || dd <= 0 || sw <= 0 || sh <= 0 || sd <= 0) return; + if (!taps || tapCount < static_cast(dw)) return; + // Map destination center to source in 16.16, so the edges land on the edges rather than + // drifting half a cell: (d + 0.5) * s / D - 0.5, the standard alignment. + // + // The mapping is computed ONCE per axis, not per pixel: it needs a 64-bit divide by a runtime + // extent, and doing that three times per output sample made the upscale cost more than the + // field it was meant to save (measured: a flat 22 us against a field that dropped from 59 to + // 15). The x row is a small table, y and z are stepped, so the inner loop is adds and shifts. + const auto axis = [](lengthType d, lengthType dn, lengthType sn) -> int32_t { + if (dn <= 1) return 0; + const int64_t num = (static_cast(d) * 2 + 1) * sn - dn; + return static_cast((num << 15) / dn); // 16.16, may be negative at the edge + }; + const auto clamp = [](int32_t v, lengthType n) -> size_t { + return static_cast(v < 0 ? 0 : (v >= n ? n - 1 : v)); + }; + // One entry per destination column: the two source columns it blends and the weight between. + UpscaleTap* row = taps; + for (lengthType x = 0; x < dw; x++) { + const int32_t fx = axis(x, dw, sw); + row[x] = {static_cast(clamp(fx >> 16, sw)), + static_cast(clamp((fx >> 16) + 1, sw)), + static_cast(fx & 0xFFFF)}; + } + const bool interpZ = sd > 1; + for (lengthType z = 0; z < dd; z++) { + const int32_t fz = interpZ ? axis(z, dd, sd) : 0; + const int32_t z0 = fz >> 16; + const uint32_t wz = static_cast(fz & 0xFFFF); + const size_t za = clamp(z0, sd), zb = interpZ ? clamp(z0 + 1, sd) : za; + for (lengthType y = 0; y < dh; y++) { + const int32_t fy = axis(y, dh, sh); + const int32_t y0 = fy >> 16; + const uint32_t wy = static_cast(fy & 0xFFFF); + const size_t ya = clamp(y0, sh), yb = clamp(y0 + 1, sh); + for (lengthType x = 0; x < dw; x++) { + const UpscaleTap tap = row[x]; + const uint32_t wx = tap.w; + const size_t xa = tap.a, xb = tap.b; + const size_t slA = za * sh * sw, slB = zb * sh * sw; + const size_t o = ((static_cast(z) * dh + y) * dw + x) * 3; + for (uint8_t c = 0; c < 3; c++) { + const auto at = [&](size_t sl, size_t yy, size_t xx) -> uint32_t { + return src[(sl + yy * sw + xx) * 3 + c]; + }; + // SIGNED difference: `b - a` on unsigned wraps whenever the field descends, + // and a wrapped row blended against an unwrapped one lands far outside the + // input range (a 2x2 saddle of 0 and 100 produced 98354). A noise field is a + // saddle almost everywhere, so this lit whole cells at full brightness. + const auto lerp = [](uint32_t a, uint32_t b, uint32_t w) -> uint32_t { + return static_cast(static_cast(a) + + (((static_cast(b) - static_cast(a)) + * static_cast(w)) >> 16)); + }; + // Two rows of the near slice, then the far one, then between them. + const uint32_t n0 = lerp(at(slA, ya, xa), at(slA, ya, xb), wx); + const uint32_t n1 = lerp(at(slA, yb, xa), at(slA, yb, xb), wx); + uint32_t v = lerp(n0, n1, wy); + if (interpZ) { + const uint32_t f0 = lerp(at(slB, ya, xa), at(slB, ya, xb), wx); + const uint32_t f1 = lerp(at(slB, yb, xa), at(slB, yb, xb), wx); + v = lerp(v, lerp(f0, f1, wy), wz); + } + dst[o + c] = static_cast(v); + } + } + } + } +} + +// --- Narrowing 16-bit state to the wire ------------------------------------------------------- +// +// Everything above computes wider than it writes. A field is 16-bit, a trail plane is 16-bit, and +// the wire is a byte, so somewhere the low half is thrown away. Doing that by `>> 8` is what makes +// a slow gradient band: measured on a dark 2%-wide ramp across 64 lights, the 16-bit values hold 64 +// distinct levels and the truncation leaves 6. +// +// Dithering does not add levels. It moves the error somewhere the eye integrates it away: +// +// - ORDERED (a 4x4 Bayer matrix, no state) spreads the error over SPACE. The mean lands right +// (28.14 against 28.01 ideal, versus truncation's 27.59) and the band edge dissolves into a +// texture. Free, and correct on a still image. +// - TEMPORAL (one byte of carry per channel) spreads it over TIME: the remainder of this frame's +// truncation is added to the next, so a pixel alternates between two levels in the proportion +// its true value asks for. Measured over 32 frames, eight neighbors a fraction of a byte apart +// resolve to 25.59, 25.75, 25.91, 26.06 ... where truncation reports 25, 25, 25, 26. This is +// what makes a slow fade smooth rather than stepped, and it is the reason a 16-bit pipeline is +// worth having at all on 8-bit LEDs. +// +// Temporal needs a byte of state per channel, which the caller owns: the state must persist across +// frames and belongs to whoever owns the plane. Ordered needs none, which is why it is the fallback +// for a caller with nowhere to keep it. + +/// How the low half of a 16-bit sample is disposed of on the way to a byte. +enum class Dither : uint8_t { + None, ///< truncate: the fastest, and what bands + Ordered, ///< a 4x4 Bayer threshold on the pixel's position: stateless, spatial + Temporal, ///< carry the error into the next frame: needs a byte per channel, and is smoothest +}; + +/// The 4x4 Bayer matrix, scaled to a 0..255 threshold. The standard recurrence, in its usual order. +inline constexpr uint8_t kBayer4[16] = { + 8, 136, 40, 168, + 200, 72, 232, 104, + 56, 184, 24, 152, + 248, 120, 216, 88, +}; + +/// Narrow one 16-bit sample to a byte, dithered. +/// +/// `carry` is the caller's per-channel state and is READ AND WRITTEN under Temporal; it is ignored +/// by the other modes, so a caller with no state passes a dummy. `x`/`y` position the Bayer +/// threshold under Ordered. +inline uint8_t quantize(uint16_t v, Dither mode, uint8_t& carry, + lengthType x = 0, lengthType y = 0, lengthType z = 0) { + switch (mode) { + case Dither::Ordered: { + // z ROTATES the matrix rather than indexing a third dimension. A 4x4x4 table would be + // the textbook answer and is the wrong trade here: it is 4x the constant data for a + // pattern the eye never resolves in depth, and a volume's slices only need to avoid + // sharing one threshold, not to be independently optimal. The rotation costs an add on + // an index that is already being computed, so a panel (z always 0) pays nothing. + const size_t cell = (static_cast(y & 3) * 4) + (x & 3) + (static_cast(z & 3) * 5); + const uint8_t thr = kBayer4[cell & 15]; + const uint8_t hi = static_cast(v >> 8); + // Round up when the discarded low byte beats this pixel's threshold. Saturating, so a + // sample already at full stays there rather than wrapping to black. + return (static_cast(v & 0xFF) > thr && hi < 255) ? static_cast(hi + 1) : hi; + } + case Dither::Temporal: { + // The remainder this frame could not express is added to the next, so the sequence of + // bytes averages to the true value. One byte of carry is enough: the error is always + // under one step, and letting it saturate rather than wrap keeps a bright pixel bright. + const uint32_t x16 = static_cast(v) + carry; + const uint32_t hi = x16 >> 8; + const uint8_t out = static_cast(hi > 255 ? 255 : hi); + const uint32_t used = static_cast(out) << 8; + carry = static_cast(x16 > used ? (x16 - used > 255 ? 255 : x16 - used) : 0); + return out; + } + case Dither::None: + default: + return static_cast(v >> 8); + } +} + +/// A 16-bit plane onto the canvas: the one narrowing step, dithered. +/// +/// Three effects held a copy of this loop and they disagreed, which is the reason it is here: two +/// dithered and one truncated, so the same slow fade banded in one effect and not the others. The +/// `carry` plane is the dither's per-channel error, `w*h*d*3` bytes sized by the caller's prepare(); +/// pass nullptr for none and the narrowing truncates, which is what a plane with no fade wants. +inline void blit16(const Canvas& cv, const uint16_t* p, lengthType w, lengthType h, lengthType d, + uint8_t* carry) { + if (!p) return; + std::size_t i = 0; + uint8_t dummy = 0; + for (lengthType z = 0; z < d; z++) + for (lengthType y = 0; y < h; y++) + for (lengthType x = 0; x < w; x++, i += 3) { + const auto q = [&](std::size_t c) { + uint8_t& st = carry ? carry[i + c] : dummy; + return quantize(p[i + c], carry ? Dither::Temporal : Dither::None, st, x, y, z); + }; + pixel(cv, {x, y, z}, RGB{q(0), q(1), q(2)}); + } +} + + // --- Velocity rules ---------------------------------------------------------------------------- // // A velocity rule answers, for one point, which way the medium is moving there. They are plain diff --git a/src/light/effects/FluidEffect.h b/src/light/effects/FluidEffect.h new file mode 100644 index 00000000..c7a2cc74 --- /dev/null +++ b/src/light/effects/FluidEffect.h @@ -0,0 +1,257 @@ +#pragma once + +#include "core/oscillators.h" // OscillatorBank: where the jets point, and how they breathe +#include "light/effects/EffectBase.h" +#include "light/fluid.h" // the Stam solver: the medium itself + +namespace mm { + +// Fluid: light poured into a simulated medium, and carried by it. +// +// Why a solver rather than another field: `light/fluid.h`. What it looks like and what the controls +// do: the catalog card. Here: how the three parts are wired. +// +// Three parts, and only the first is new: +// +// - `Fluid` solves the medium (Stam 1999: diffuse, project, advect, project). Its own header +// explains why that algorithm and why Q16.16. +// - Jets pour velocity AND dye in together, so light enters where the medium is being pushed. +// - `draw::advect16` carries the dye along the finished field, and `draw::decay16` fades it, which +// is exactly what Trails does. The dye plane is 16-bit for the same reason: a value multiplied +// by slightly less than one, many times a second, has nowhere to go at 8 bits. +// +// **Cost is the honest problem.** The solver is several passes over the grid per frame and the +// pressure solve is `iterations` of them, so this is a desktop and P4 effect. An S3 runs it on a +// small grid; the numbers per target are in performance.md rather than promised here. +// @card FluidEffect.png +/// Effect: dye poured into a simulated fluid, carried by the flow the medium itself works out. +class FluidEffect : public EffectBase { +public: + const char* tags() const override { return "💫🖌️"; } // power-function showcase + Dim dimensions() const override { return Dim::D3; } // a medium per slice, jets wander in z + + static constexpr uint8_t kMaxJets = 4; + static constexpr uint8_t kClocks = 4; ///< per jet: position, reach, aim, depth + + uint8_t jets = 2; // how many places light is poured in + uint8_t force = 120; // how hard each one pushes + uint8_t swirl = 90; // how fast the jets sweep, which is what makes vortices + uint8_t viscosity = 20; // how much the medium drags on itself + uint8_t persistence = 150; // how long dye survives, as a half-life + uint8_t iterations = 5; // pressure-solve effort, and the cost knob + + void defineControls() override { + controls_.addControl("jets", jets, 1, kMaxJets); + controls_.addControl("force", force, 0, 255); + controls_.addControl("swirl", swirl, 0, 255); + controls_.addControl("viscosity", viscosity, 0, 255); + controls_.addControl("persistence", persistence, 0, 255); + controls_.addControl("iterations", iterations, 1, 20); + } + + void prepare() override { + const lengthType w = width(), h = height(), d = depth(); + // On a cube every slice is its own medium and the jets wander through them, the same + // per-slice shape Trails has: nothing is carried between slices, which a volumetric solve + // would do and is a different solver. A panel is depth 1 and pays nothing for it. + const bool medium = fluid_.resize(w, h, d); + const size_t n = medium ? static_cast(w) * h * d * 3 : 0; + dyeA_.resize(n); + dyeB_.resize(n); + carry_.resize(n); // the dither's error, sized here: tick() is MM_NONBLOCKING + started_ = false; + pourCarry_ = 0; + poured_ = false; + } + + void tick() MM_NONBLOCKING override { + // Readiness is READ from the buffers every frame, never cached: MoonModule::release() + // frees them when this module or an ancestor is disabled, and the re-enable only requests + // a prepare for the next loop, so one frame can tick between the two. A cached flag said + // "ready" on that frame and pour() wrote to a null plane (SIGSEGV on the desktop). + if (!fluid_.valid() || !dyeA_ || !dyeB_) return; + const lengthType w = width(), h = height(), d = depth(); + const uint32_t now = elapsed(); + // A zero delta on the first tick: the whole uptime would push the solver in one step. + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + // Each jet gets its own clocks: where it sits, how far out it wanders, which way it aims, + // and on a cube which slice it is in. They are separate for the reason pour() documents. + // Rates are deliberately not multiples of each other. + for (uint8_t i = 0; i < kMaxJets; i++) { + const uint16_t rate = static_cast(3 + swirl / 12 + i * 2); + bank_.set(static_cast(i * kClocks + 0), + {.rate = rate, .low = 0, .high = 65535, + .phaseOffset = static_cast(i * 16384), .wave = Wave::Saw}); + // The radius breathes from the middle out to near the wall, so the forcing covers the + // panel over time instead of a band. + bank_.set(static_cast(i * kClocks + 1), + {.rate = static_cast(rate / 3 + 1), .low = 0, .high = 255, + .phaseOffset = static_cast(i * 9000), .wave = Wave::Sine}); + // And the aim swings around the tangent, so a jet drives across the middle rather than + // only along its own orbit. + bank_.set(static_cast(i * kClocks + 2), + {.rate = static_cast(rate / 2 + 1), .low = 0, .high = 65535, + .phaseOffset = static_cast(i * 21000), .wave = Wave::Sine}); + // And on a cube the jet drifts through the slices, so each slice is visited in turn. + bank_.set(static_cast(i * kClocks + 3), + {.rate = static_cast(rate / 4 + 1), .low = 0, .high = 65535, + .phaseOffset = static_cast(i * 30000), .wave = Wave::Sine}); + } + bank_.advance(dt); + + uint16_t* live = front_ ? dyeA_.data() : dyeB_.data(); + uint16_t* spare = front_ ? dyeB_.data() : dyeA_.data(); + + // Paced by TIME, not by frames: a jet firing every frame pours at the framerate, so a fast + // device fills the panel while a slow one trickles (measured 1.58 at 1200 fps against 60). + // The dye is SET rather than accumulated, so scaling its brightness by dt does not work + // either, which is the trap Trails' emitter documents. A budget with a carry is the fix. + constexpr uint32_t kPourMs = 20; + pourCarry_ += dt; + // The first pour is unconditional: dt is deliberately 0 on the opening tick, so a purely + // time-paced jet never fires on it, and on a fast device it then takes many frames to owe + // a whole period. The panel stays black in the meantime, which a resize repeats every + // time. One jet at startup is what the medium needs anyway. + if (!poured_) { + poured_ = true; // the opening pour, see above + pour(live, w, h, d, now); + } + // Subtracting the period rather than taking a modulo of it: the remainder IS the time + // already owed toward the next pour, and discarding it drops a different fraction at every + // framerate. The debt is CAPPED, though: after a long stall (a WiFi scan, a filesystem + // write) the owed time can be seconds, and pouring all of it in one frame is a burst that + // both blows the frame budget and floods the medium. Beyond the cap the missed pours are + // dropped, which is what "degrade visibly, never crash" means here. + constexpr uint32_t kMaxCatchUp = 4; // 80 ms of jets in one frame, at most + if (pourCarry_ > kPourMs * kMaxCatchUp) pourCarry_ = kPourMs * kMaxCatchUp; + while (pourCarry_ >= kPourMs) { + pourCarry_ -= kPourMs; + pour(live, w, h, d, now); + } + + // The medium first, then the dye it carries: the field must be solved before anything is + // moved along it, or the dye would follow the PREVIOUS frame's flow. + const int32_t dtQ = static_cast((static_cast(dt) * Fluid::kOne) / 1000u); + fluid_.step(static_cast(viscosity) * (Fluid::kOne / 4096), dtQ, iterations); + + const int32_t* vx = fluid_.velocityX(); + const int32_t* vy = fluid_.velocityY(); + const size_t plane = fluid_.plane(); + draw::advect16(spare, live, w, h, d, + [&](lengthType x, lengthType y, lengthType z, draw::pos_t& ox, draw::pos_t& oy) { + const size_t i = static_cast(z) * plane + static_cast(y) * w + x; + // Q16.16 cells per second into sub-pixels this frame: one cell is one + // light, and draw::pos_t counts 256 to the light. + ox = static_cast((static_cast(vx[i]) * dtQ) >> 24); + oy = static_cast((static_cast(vy[i]) * dtQ) >> 24); + }, draw::Edge::Clamp); + front_ = !front_; + uint16_t* dye = front_ ? dyeA_.data() : dyeB_.data(); + + draw::decay16(dye, dyeA_.count(), 40u + static_cast(persistence) * persistence / 10u, dt); + draw::blit16(canvas(), dye, w, h, d, carry_ ? carry_.data() : nullptr); + } + +private: + /// The jets: velocity and dye together, so light enters where the medium is pushed. + void pour(uint16_t* dye, lengthType w, lengthType h, lengthType d, uint32_t now) { + const uint8_t n = jets < 1 ? 1 : (jets > kMaxJets ? kMaxJets : jets); + for (uint8_t i = 0; i < n; i++) { + const angle16 a = static_cast(bank_.unitValue(static_cast(i * kClocks + 0))); + // The radius wanders between the center and the wall rather than sitting on one circle. + const uint32_t reach = bank_.value(static_cast(i * kClocks + 1)); + const int32_t rx = static_cast((w / 2 - 1) * reach / 320u); + const int32_t ry = static_cast((h / 2 - 1) * reach / 320u); + const lengthType jx = static_cast(w / 2 + (static_cast(cos16(a)) * rx) / 32768); + const lengthType jy = static_cast(h / 2 + (static_cast(sin16(a)) * ry) / 32768); + // The aim swings either side of the tangent, so the jet has a radial component and + // drives dye through the middle. Pure tangent is what produced a hollow ring. + const int32_t lean = static_cast(bank_.value(static_cast(i * kClocks + 2))) - 32768; + const lengthType jz = d > 1 + ? static_cast((bank_.value(static_cast(i * kClocks + 3)) * (d - 1)) / 65535u) + : 0; + // Odd jets sweep the other way, so they meet the even ones head-on: colliding jets are + // what roll up vortex pairs, while jets all turning together sum into one rotation. + const int32_t sense = (i & 1) ? -1 : 1; + const angle16 dir = static_cast(a + static_cast(sense * (16384 + lean / 3))); + // The push covers the same disc as the dye and scales with the fixture, in cells per + // second. A single-cell push is mostly divergence, which the projection removes, and + // `force / 64` cells/s on a 64-wide panel measured a mean of 0.45 cells/s: the dye sat + // where it was poured and decayed in place. At this scale the nozzle peaks near 1.5 + // lights per frame, which is what reads as paint being jetted rather than dabbed. + const lengthType span = w > h ? w : h; + const lengthType rad = span / 32 + 1; + const lengthType rz = d > 1 ? rad : 0; // a sphere on a cube, a disc on a panel + const int32_t mag = static_cast( + (static_cast(force) * span * Fluid::kOne) / (255 * 2)); + const int32_t dvx = static_cast((static_cast(cos16(dir)) * mag) >> 15); + const int32_t dvy = static_cast((static_cast(sin16(dir)) * mag) >> 15); + for (lengthType dz = -rz; dz <= rz; dz++) + for (lengthType dy = -rad; dy <= rad; dy++) + for (lengthType dx = -rad; dx <= rad; dx++) + if (dx * dx + dy * dy + dz * dz <= rad * rad) + fluid_.addVelocity(jx + dx, jy + dy, dvx, dvy, jz + dz); + + const RGB c = colorFromPalette(*Palettes::active(), + static_cast(i * (255u / n) + (now >> 6))); + splatDye(dye, w, h, d, jx, jy, jz, c); + } + } + + /// Dye into a soft disc, so a jet has a body rather than a single pixel the flow immediately + /// spreads to nothing. Written at the plane's full width, which is where the decay lives. + void splatDye(uint16_t* dye, lengthType w, lengthType h, lengthType d, + lengthType cx, lengthType cy, lengthType cz, RGB c) { + // The jet's body scales with the fixture. A fixed radius is a fixed NUMBER of lights, and + // advection spreads them over an area that grows with the grid, so on a large panel the dye + // arrives at a fraction of a count and the whole effect reads as a faint smear. This is the + // same arithmetic Trails' emitter head carries, for the same reason. + const lengthType span = w > h ? w : h; + const lengthType rad = span / 32 + 1; + const lengthType rz = d > 1 ? rad : 0; // a sphere on a cube, a disc on a panel + const int32_t r2 = static_cast(rad) * rad; + const uint16_t wide[3] = {static_cast((c.r << 8) | c.r), + static_cast((c.g << 8) | c.g), + static_cast((c.b << 8) | c.b)}; + for (lengthType dz = -rz; dz <= rz; dz++) + for (lengthType dy = -rad; dy <= rad; dy++) + for (lengthType dx = -rad; dx <= rad; dx++) { + // A DISC, not a square. A square block is an axis-aligned slab, and advection + // carries its corners into the blocky patches the panel shows as squares. + const int32_t d2 = static_cast(dx) * dx + static_cast(dy) * dy + + static_cast(dz) * dz; + if (d2 > r2) continue; + const lengthType x = cx + dx, y = cy + dy, z = cz + dz; + if (x < 0 || y < 0 || z < 0 || x >= w || y >= h || z >= d) continue; + // Full at the center, tapering to nothing at the rim: a flat slab has a hard edge + // that stays hard however far the flow carries it. + const uint32_t fall = static_cast(((r2 - d2) * 255) / (r2 > 0 ? r2 : 1)); + const size_t o = ((static_cast(z) * h + y) * w + x) * 3; + for (size_t k = 0; k < 3; k++) { + // ADDED, not assigned. Overwriting stamps a solid block of one color, which is + // why the jets read as flat patches rather than as dye entering a medium; + // accumulating lets a jet build up where it lingers and blend where two meet. + const uint32_t add = (static_cast(wide[k]) * fall) / 255u; + const uint32_t sum = static_cast(dye[o + k]) + add; + dye[o + k] = static_cast(sum > 65535u ? 65535u : sum); + } + } + } + + + Fluid fluid_{*this}; + ScratchBuffer dyeA_{*this}; ///< the dye; the two alternate roles + ScratchBuffer dyeB_{*this}; + ScratchBuffer carry_{*this}; ///< the dither's per-channel error + OscillatorBank bank_; + bool front_ = true; + bool started_ = false; + uint32_t lastMs_ = 0; + uint32_t pourCarry_ = 0; ///< time owed to the jets, in ms + bool poured_ = false; ///< has the opening pour happened yet +}; + +} // namespace mm diff --git a/src/light/effects/NebulaEffect.h b/src/light/effects/NebulaEffect.h new file mode 100644 index 00000000..03accf7f --- /dev/null +++ b/src/light/effects/NebulaEffect.h @@ -0,0 +1,273 @@ +#pragma once + +#include "core/oscillators.h" // OscillatorBank: the drift, and the clock fieldRate counts +#include "light/effects/EffectBase.h" // and core/noise.h with it: fbm8, curl16 + +#include // memset: the reshape clear + +namespace mm { + +// Nebula: a cloud that is generated in one place and carried in another. +// +// The composition phase 4 exists to demonstrate, and the first effect built from two power +// functions rather than one. A noise field decides WHERE light is born: thresholded hard, so only +// the top of the field survives and the rest is black. A curl flow decides where it GOES. Neither +// half is new; what is new is that the emitter is a field rather than a handful of dots, so the +// light enters everywhere at once and the flow shapes a whole cloud instead of drawing trails. +// +// That is why it reads as a nebula rather than as either of its parts: the birth is structured (the +// field's own shape) and the transport is divergence-free (curl noise, so nothing piles up), and +// between them the cloud keeps folding into itself without ever collapsing or thinning out. +// +// **Two cost levers, because this is the effect that needs them.** The field is the expensive half, +// so `fieldScale` computes it at half or quarter resolution and stretches it (measured 3x and 6.6x +// on a curl field; `draw::upscale16` carries the numbers), and `fieldRate` recomputes it only every +// N frames. Both leave the MOTION alone: the flow still carries the plane every frame and the +// oscillators still advance, so a cheaper field costs detail rather than smoothness. +// +// Cost: the flow is one curl per light per frame (4 noise samples), the field is one fbm per light +// at whatever scale and rate the levers ask for. Targets in performance.md. +// @card NebulaEffect.png +/// Effect: a noise field births light, a curl flow carries it, and the two make a folding cloud. +class NebulaEffect : public EffectBase { +public: + const char* tags() const override { return "💫🖌️"; } // power-function showcase + Dim dimensions() const override { return Dim::D3; } // the flow and the field both carry z + + uint8_t speed = 40; // how fast the medium moves, and with it the whole cloud + uint8_t scale = 40; // the field's cell size: low = broad clouds, high = wisps + /// The window: only the top of the field is born, so the cloud is mostly dark with structure + /// in it. Placed against the field's OWN measured range, so this means the same thing on a + /// panel and on a cube. Measured across the slider, 64x64 against a 20-cube: 0 floods both + /// (99% and 97%), 128 is a haze (79% and 66%), 192 is a cloud (35% and 31%), 255 leaves a few + /// wisps (7% and 6%). The two track each other at every setting, where an absolute threshold + /// lit a quarter of the panel and almost none of the cube. + uint8_t contrast = 192; + uint8_t persistence = 140; // how long light survives once it is in the flow + uint8_t octaves = 2; // detail in the field, and its cost knob + uint8_t fieldScale = 1; // 1 = full, 2 = half, 4 = quarter: the field's resolution + uint8_t fieldRate = 1; // recompute the field every N frames + + void defineControls() override { + controls_.addControl("speed", speed, 0, 255); + controls_.addControl("scale", scale, 1, 255); + controls_.addControl("contrast", contrast, 0, 255); + controls_.addControl("persistence", persistence, 0, 255); + controls_.addControl("octaves", octaves, 1, 4); + controls_.addControl("fieldScale", fieldScale, 1, 4); + controls_.addControl("fieldRate", fieldRate, 1, 8); + } + + bool affectsPrepare(const char* name) const override { + // `fieldScale` alone resizes the field plane. `fieldRate` only skips frames and every other + // control is read per frame, so none of them needs a rebuild. + return std::strcmp(name, "fieldScale") == 0; + } + + /// The lever, clamped once: prepare() sizes the field from it and tick() picks its path by it. + uint8_t fieldScaleClamped() const { return fieldScale < 1 ? 1 : (fieldScale > 4 ? 4 : fieldScale); } + + void prepare() override { + const lengthType w = width(), h = height(), d = depth(); + const size_t n = static_cast(w) * h * d * 3; + const size_t had = planeA_.count(); + // The cloud itself: two planes, because advection reads one and writes the other. + planeA_.resize(n); + planeB_.resize(n); + // Everything the render path writes into is sized HERE: tick() is MM_NONBLOCKING, and a + // resize() on a changed size reallocates and zero-fills, which is heap work in the hot path. + carry_.resize(n); + scratch_.resize(fieldScaleClamped() > 1 ? n : 0); + taps_.resize(static_cast(w)); + // Same sample count but a different shape (8x16 -> 16x8, or a cube reshaped): both planes + // hold samples laid out for the old geometry and the ping-pong swaps the spare one in on + // the next frame, so clearing only the live one leaves the stale picture one frame away. + // (A changed count needs no clear: resize() zero-fills when it reallocates.) The same guard + // Trails carries, for the same reason. + if (n > 0 && n == had && (w != planeW_ || h != planeH_ || d != planeD_)) { + std::memset(planeA_.data(), 0, planeA_.bytes()); + std::memset(planeB_.data(), 0, planeB_.bytes()); + } + // The field is computed at its own resolution and stretched. At fieldScale 1 it IS the + // fixture, and no intermediate plane is allocated: the lever costs nothing when it is off. + const uint8_t s = fieldScaleClamped(); + fw_ = w / s > 0 ? w / s : 1; + fh_ = h / s > 0 ? h / s : 1; + fd_ = d / s > 0 ? d / s : 1; + field_.resize(s > 1 ? static_cast(fw_) * fh_ * fd_ * 3 : 0); + planeW_ = w; planeH_ = h; planeD_ = d; + frame_ = 0; + started_ = false; + } + + void tick() MM_NONBLOCKING override { + if (!planeA_ || !planeB_) return; + const lengthType w = width(), h = height(), d = depth(); + // One clock reading, and a zero delta on the first tick: without it `now - 0` hands the + // flow the whole uptime, which teleports the cloud and decays it away on the frame it + // starts. Trails carries the same guard for the same reason. + const uint32_t now = elapsed(); + const uint32_t t = now; // the flow field's third axis, read inside the lambda + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + bank_.set(0, {.rate = static_cast(4 + speed / 6), .low = 0, .high = 65535, + .phaseOffset = 0, .wave = Wave::Saw}); + bank_.advance(dt); + + uint16_t* live = front_ ? planeA_.data() : planeB_.data(); + uint16_t* spare = front_ ? planeB_.data() : planeA_.data(); + + // 1. Transport, every frame: this is the motion, and it is what fieldRate must not skip. + const uint32_t cells = static_cast(scale) * 256u; + const int32_t push = static_cast(speed) * static_cast(dt) / 4; + draw::advect16(spare, live, w, h, d, + [&](lengthType x, lengthType y, lengthType z, + draw::pos_t& vx, draw::pos_t& vy) { + int32_t cx = 0, cy = 0; + // eps MUST be at least the distance between neighboring samples. + // Left at its default (4096) while a pixel step is `cells` (10240 at + // scale 40), the central difference measures inside the gap BETWEEN two + // pixels, so neighbors get uncorrelated flow directions and the cloud + // comes out striped rather than smooth. Half a pixel step is the + // smallest value that still sees the field the pixels sample. + curl16(static_cast(x) * cells, + static_cast(y) * cells, + static_cast(z) * cells + t / 8u, push, cx, cy, + cells / 2u); + vx = static_cast(cx); + vy = static_cast(cy); + }, draw::Edge::Clamp); + front_ = !front_; + uint16_t* cloud = front_ ? planeA_.data() : planeB_.data(); + + // 2. Decay, every frame: the half-life is what makes the cloud a cloud rather than a smear. + draw::decay16(cloud, planeA_.count(), 40u + static_cast(persistence) * persistence / 12u, dt); + + // 3. Birth, every fieldRate frames: the expensive half, and the one the levers exist for. + const uint8_t rate = fieldRate < 1 ? 1 : fieldRate; + if (frame_ % rate == 0) birth(cloud, w, h, d, now); + frame_++; + + // 4. Onto the layer, narrowing once. Dithered temporally: the cloud's dark half is where + // banding lives, and carrying the error is what keeps a slow fade smooth. + draw::blit16(canvas(), cloud, w, h, d, carry_ ? carry_.data() : nullptr); + } + +private: + /// Where light is born: the field, thresholded so only its top survives, added to the cloud. + void birth(uint16_t* cloud, lengthType w, lengthType h, lengthType d, uint32_t now) { + const uint32_t drift = bank_.unitValue(0) >> 6; + const uint32_t cells = static_cast(scale) * 192u; + const uint8_t oct = octaves < 1 ? 1 : (octaves > 4 ? 4 : octaves); + // At fieldScale 1 the field is written straight into the cloud; above it, into the small + // plane and stretched. One code path either way: `dst` and its extents are what differ. + // The window sits at `contrast` of the way up the field's OWN range, measured on the + // previous frame, rather than at an absolute value. A fixed threshold is tuned for one + // fixture and wrong on every other: measured, fbm8 over an 8-cube's 512 samples peaks near + // 223 while a 64x64 panel's 4096 reach much higher, so a threshold of 200 lit a quarter of + // the panel and almost nothing of the cube. Tracking the range means `contrast` says what + // FRACTION of the field is born, on any fixture. (Aurora places its window the same way.) + // The control spans the TOP HALF of the range, not all of it. Nebula's field is an emitter + // that runs every frame and accumulates in the cloud, so anything below about 60% of the + // range floods the fixture: measured at 64x64, a window at 73% lights 96% of the panel and + // one at 93% lights 24%. Mapping 0..255 onto 60%..100% puts the whole useful span on the + // slider instead of compressing it into its last few values. (Aurora draws its field + // directly rather than accumulating, so its own mapping starts at the bottom.) + const uint8_t lowEnd = floor_ < peak_ ? floor_ : static_cast(peak_ > 8 ? peak_ - 8 : 0); + const uint32_t span16 = static_cast(peak_ - lowEnd); + const uint32_t frac = 154u + (static_cast(contrast) * 101u) / 255u; // 60%..100% + const uint8_t threshold = static_cast(lowEnd + (span16 * frac) / 255u); + uint8_t frameMax = 0, frameMin = 255; + + const bool small = field_.count() > 0; + uint16_t* dst = small ? field_.data() : cloud; + const lengthType dw = small ? fw_ : w, dh = small ? fh_ : h, dd = small ? fd_ : d; + const lengthType sx = w / (dw > 0 ? dw : 1), sy = h / (dh > 0 ? dh : 1), sz = d / (dd > 0 ? dd : 1); + std::size_t i = 0; + for (lengthType z = 0; z < dd; z++) + for (lengthType y = 0; y < dh; y++) + for (lengthType x = 0; x < dw; x++, i += 3) { + const uint8_t v = fbm8(static_cast(x * sx) * cells / 256u + drift, + static_cast(y * sy) * cells / 256u, + static_cast(z * sz) * cells / 256u + now / 32u, oct); + // The window: below `contrast` nothing is born at all, and what is above it is + // stretched back over the full range, so a small part of the field becomes all + // of the light. This is what makes a cloud rather than an even haze. + if (v > frameMax) frameMax = v; + if (v < frameMin) frameMin = v; + if (v <= threshold) { + if (small) { dst[i] = dst[i + 1] = dst[i + 2] = 0; } + continue; + } + const uint32_t span = peak_ > threshold ? peak_ - threshold : 1u; + const uint32_t over = static_cast(v - threshold) * 255u / span; + const uint8_t bri = static_cast(over > 255u ? 255u : over); + // The palette index is the field's position WITHIN THE WINDOW, stretched back + // over the full range, not the raw field value. Two reasons, and the second is + // what makes the effect look like its palette at all: + // + // - no time term: adding one walks every born pixel through the palette + // together, which reads as the cloud changing color rather than as a cloud. + // A wisp should keep the color it was born with as the flow carries it. + // - stretched: the window admits only the top of the field (values above + // `contrast`), so the raw value spans about a fifth of the palette and every + // wisp comes out the same hue. Rescaling that slice to 0..255 gives the same + // cloud in every color the palette has. + // + // `over` is already that position, 0 at the window's edge and 255 at the + // field's peak, so the index and the brightness come from one computation. + const RGB c = colorFromPalette(*Palettes::active(), bri, bri); + // Written at full width, so the decay has somewhere to go. + if (small) { + dst[i + 0] = static_cast((c.r << 8) | c.r); + dst[i + 1] = static_cast((c.g << 8) | c.g); + dst[i + 2] = static_cast((c.b << 8) | c.b); + } else { + // Straight into the cloud: ADD, so new light joins what is already flowing + // rather than erasing it. + addWide(dst, i + 0, static_cast((c.r << 8) | c.r)); + addWide(dst, i + 1, static_cast((c.g << 8) | c.g)); + addWide(dst, i + 2, static_cast((c.b << 8) | c.b)); + } + } + // Carry this frame's range into the next one's window, eased so a single bright frame + // cannot make the whole cloud flinch. + peak_ = static_cast((peak_ * 7u + (frameMax < 32 ? 32 : frameMax)) / 8u); + floor_ = static_cast((floor_ * 7u + frameMin) / 8u); + + if (!small) return; + // Stretch the small field over the cloud, adding as it goes. + if (!scratch_ || !taps_) return; // sized in prepare(); the render path never allocates + draw::upscale16(scratch_.data(), w, h, d, field_.data(), fw_, fh_, fd_, + taps_.data(), taps_.count()); + const size_t n = static_cast(w) * h * d * 3; + for (size_t k = 0; k < n; k++) addWide(cloud, k, scratch_[k]); + } + + /// Saturating add at 16 bits: light adds, and a bright cloud must not wrap to black. + static void addWide(uint16_t* p, size_t i, uint16_t v) { + const uint32_t s = static_cast(p[i]) + v; + p[i] = static_cast(s > 65535u ? 65535u : s); + } + + + ScratchBuffer planeA_{*this}; ///< the cloud; the two alternate roles + ScratchBuffer planeB_{*this}; + ScratchBuffer field_{*this}; ///< the field at its own resolution (empty at 1:1) + ScratchBuffer scratch_{*this}; ///< the stretched field, when one is used + ScratchBuffer taps_{*this}; ///< upscale16's per-column blend table + ScratchBuffer carry_{*this}; ///< the dither's per-channel error + OscillatorBank<1> bank_; + lengthType planeW_ = 0, planeH_ = 0, planeD_ = 0; + lengthType fw_ = 0, fh_ = 0, fd_ = 0; + bool front_ = true; + uint32_t lastMs_ = 0; + uint32_t frame_ = 0; + uint8_t peak_ = 200; ///< the field's high water mark, eased per frame + uint8_t floor_ = 40; ///< and its low, so the window spans what is there + bool started_ = false; ///< false until a frame has been timed +}; + +} // namespace mm diff --git a/src/light/effects/TrailsEffect.h b/src/light/effects/TrailsEffect.h index e79d1d00..1accd863 100644 --- a/src/light/effects/TrailsEffect.h +++ b/src/light/effects/TrailsEffect.h @@ -59,17 +59,30 @@ class TrailsEffect : public EffectBase { plane_.resize(needed); // Same sample count but a different shape (8x16 -> 16x8, or a cube reshaped): resize() kept // the old samples, and they are laid out for the old geometry, so they would smear. Clear. - if (needed > 0 && needed == had && (w != planeW_ || h != planeH_ || d != planeD_)) - std::memset(plane_.data(), 0, plane_.bytes()); scratch_.resize(needed); + carry_.resize(needed); // the dither's error, one byte per sample + // Same sample count but a different shape: BOTH planes hold samples laid out for the old + // geometry, and the ping-pong swaps the spare one in on the very next frame, so clearing + // only the live one leaves the stale picture one frame away. (A changed sample count needs + // no clear: resize() zero-fills when it reallocates.) + if (needed > 0 && needed == had && (w != planeW_ || h != planeH_ || d != planeD_)) { + std::memset(plane_.data(), 0, plane_.bytes()); + std::memset(scratch_.data(), 0, scratch_.bytes()); + } planeW_ = w; planeH_ = h; planeD_ = d; + started_ = false; // the next tick is the first: it has no previous frame to measure } void tick() MM_NONBLOCKING override { if (!plane_ || !scratch_) return; // a zero grid, or an allocation that failed const lengthType w = width(), h = height(), d = depth(); - const uint32_t dt = elapsed() - lastMs_; - lastMs_ = elapsed(); + // One reading of the clock, and a zero delta on the first tick: `lastMs_` has no previous + // frame to measure against, so `elapsed() - 0` would hand the flow the whole uptime and + // teleport the trail (and decay it to nothing) on the frame it starts. + const uint32_t now = elapsed(); + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; // Two oscillators: one walks the emitters around, one breathes the flow's strength so the // composition swells and settles instead of running at one rate forever. @@ -88,7 +101,7 @@ class TrailsEffect : public EffectBase { // 1. Transport: carry what is already there along the flow. Backward-sampled, so this both // moves the trail and is what bends it, since neighboring pixels take different paths. - const uint32_t t = elapsed(); + const uint32_t t = now; // the same reading the delta came from const uint32_t cells = static_cast(scale) * 256u; const int32_t strength = static_cast(bank_.value(1)); // the breathing multiplier const uint32_t step = (static_cast(speed) * dt) / 8u; // sub-pixels this frame @@ -106,10 +119,12 @@ class TrailsEffect : public EffectBase { // 3. Emit: the bright heads, drawn after the transport so this frame's dots are sharp and // only the previous ones have been carried. - emitDots(moved.data(), w, h, d); + emitDots(moved.data(), w, h, d, dt); // 4. Narrow onto the layer: the one place the wide plane meets the fixture's width. - blit(moved.data(), w, h, d); + // Dithered, like the other wide-plane effects: a trail's slow fade is exactly where an + // 8-bit truncation bands, and the carry is what removes it. + draw::blit16(canvas(), moved.data(), w, h, d, carry_ ? carry_.data() : nullptr); } private: @@ -141,8 +156,24 @@ class TrailsEffect : public EffectBase { } /// The heads: a few bright points walking their own paths, each on the palette. - void emitDots(uint16_t* plane, lengthType w, lengthType h, lengthType d) { + /// + /// Emission is paced by TIME, not by frames, and the heads stay at full brightness. + /// + /// Writing a head every frame injects light at the framerate: measured, a 1200 fps device lit a + /// third more of the panel than a 60 fps one for the same settings. Scaling the brightness by + /// dt instead is the obvious fix and is WRONG here, because `writeWide` SETS the pixel rather + /// than accumulating into it: twenty dim writes do not add up to one bright one, and the fast + /// device came out twice as dark instead (1.96 the other way). So the head keeps its full + /// value and fires on a budget, with the remainder carried, which is the pattern + /// ParticlesEffect already uses for its fade. + void emitDots(uint16_t* plane, lengthType w, lengthType h, lengthType d, uint32_t dt) { const uint8_t n = dots < 1 ? 1 : (dots > kMaxDots ? kMaxDots : dots); + constexpr uint32_t kReferenceMs = 20; + emitCarry_ += dt; + if (emitCarry_ < kReferenceMs) return; // not enough time has passed for a head yet + // Consume whole ticks and keep the remainder, so no time is lost to truncation and a slow + // frame does not emit a burst. + emitCarry_ %= kReferenceMs; const uint32_t walk = bank_.unitValue(0); for (uint8_t i = 0; i < n; i++) { // Each dot rides the same clock at its own offset and its own ratio, so they never @@ -178,27 +209,16 @@ class TrailsEffect : public EffectBase { plane[off + 2] = static_cast((c.b << 8) | c.b); } - /// The wide plane onto the layer, taking each channel's high byte. The one narrowing step. - void blit(const uint16_t* p, lengthType w, lengthType h, lengthType d) { - const draw::Canvas cv = canvas(); - const std::size_t samples = static_cast(w) * h * d * 3; - std::size_t i = 0; - for (lengthType z = 0; z < d; z++) - for (lengthType y = 0; y < h; y++) - for (lengthType x = 0; x < w; x++, i += 3) { - if (i + 2 >= samples) return; - draw::pixel(cv, {x, y, z}, RGB{static_cast(p[i] >> 8), - static_cast(p[i + 1] >> 8), - static_cast(p[i + 2] >> 8)}); - } - } ScratchBuffer plane_{*this}; ///< the trail itself, three samples per light ScratchBuffer scratch_{*this}; ///< advect's destination; the two alternate roles + ScratchBuffer carry_{*this}; ///< the dither's per-channel error bool front_ = true; ///< which of the two currently holds the trail OscillatorBank<2> bank_; lengthType planeW_ = 0, planeH_ = 0, planeD_ = 0; uint32_t lastMs_ = 0; + bool started_ = false; ///< false until a frame has been timed + uint32_t emitCarry_ = 0; ///< time owed to the emitters, in ms }; } // namespace mm diff --git a/src/light/fluid.h b/src/light/fluid.h new file mode 100644 index 00000000..6a98a1d8 --- /dev/null +++ b/src/light/fluid.h @@ -0,0 +1,241 @@ +#pragma once + +#include "core/ScratchBuffer.h" // the grids an effect owns +#include "light/light_types.h" + +#include + +namespace mm { + +// A stable-fluid velocity field: the medium itself, simulated rather than sampled. +// +// Every flow so far has been a FUNCTION of position and time: noise, curl, a wind. This is the +// other kind. The velocity here is state that evolves from its own past, so pushing the medium in +// one place changes where everything downstream goes, and a vortex forms because the math says it +// must rather than because a rule drew one. That is the difference a viewer sees: a curl field is +// beautiful and unchanging in character, while a fluid REACTS. +// +// The algorithm is Stam's (Jos Stam, "Stable Fluids", SIGGRAPH 1999), which is the standard choice +// for exactly one reason: it cannot blow up. An explicit solver has a timestep small enough to stay +// stable, and a frame that runs long breaks it; Stam's is unconditionally stable, so a device that +// stalls for a second resumes with a plausible field instead of a screenful of infinities. On a +// fixture that must never look broken, that property is worth more than accuracy. +// +// Four steps a frame, and the order is the algorithm: +// +// 1. `diffuse` viscosity: each cell relaxes toward its neighbors' average. +// 2. `project` make it divergence-free: the step that turns a set of arrows into a FLOW. +// 3. `advect` the velocity carries itself, which is what makes a vortex persist and travel. +// 4. `project` again, because advection reintroduces divergence. +// +// Then the caller advects its own dye (the light) along the finished field with `draw::advect16`. +// +// **Q16.16 throughout, not float.** The render path is integer by contract, and a fluid is the +// hardest case for that: `project` solves a linear system by relaxation, so an error that a float +// would absorb accumulates over iterations. 16 fraction bits is what makes the pressure solve +// converge at all; 8 would quantize the gradient to nothing on a slow flow. +// +// Sized for panels. The cost is per cell per iteration and there are several passes, so this is a +// desktop and P4 effect; an S3 runs it on a small grid or not at all. +class Fluid { +public: + explicit Fluid(MoonModule& owner) + : vx_(owner), vy_(owner), vx0_(owner), vy0_(owner), p_(owner), div_(owner) {} + + /// Q16.16: the fixed-point format the whole solver works in. + static constexpr int32_t kOne = 1 << 16; + + /// Size (or free) the grids. Returns whether a field is available, which is what an effect + /// reports: a device too small says so rather than rendering nothing in silence. + /// + /// Depth is a stack of INDEPENDENT slices, each its own 2D medium: the solve is per slice and + /// nothing is carried between them. A panel is depth 1 and pays nothing for the stack. A true + /// volumetric solve (pressure and advection across z) is a different solver, not a flag. + bool resize(lengthType w, lengthType h, lengthType d = 1) { + if (w <= 2 || h <= 2 || d < 1) { release(); return false; } // a grid with no interior + const size_t n = static_cast(w) * h * d; + // Already this shape AND still allocated: MoonModule::release() frees every registered + // buffer behind this object's back (a disabled module, or a disabled ancestor), and the + // shape alone would then report a grid that is no longer there. + if (w == w_ && h == h_ && d == d_ && vx_) return true; + // The velocity is per cell, but the four working grids are per SLICE: the solve walks one + // slice at a time and never addresses another's, so sizing them to the volume allocated + // 19 unused copies on a 20-cube (121 KB for nothing). + const size_t slice = static_cast(w) * h; + const bool ok = vx_.resize(n) && vy_.resize(n) && vx0_.resize(slice) + && vy0_.resize(slice) && p_.resize(slice) && div_.resize(slice); + if (!ok) { release(); return false; } + w_ = w; h_ = h; d_ = d; cells_ = n; + reset(); + return true; + } + + void release() { + vx_.resize(0); vy_.resize(0); vx0_.resize(0); vy0_.resize(0); p_.resize(0); div_.resize(0); + w_ = h_ = d_ = 0; cells_ = 0; + } + + /// Re-seed to rest: every velocity zero. The resync point, for a fixture that has been + /// reconfigured under a running simulation. + void reset() { + if (!valid()) return; + std::memset(vx_.data(), 0, vx_.bytes()); + std::memset(vy_.data(), 0, vy_.bytes()); + } + + /// Ready to step. Read from the buffers, not from a cached shape: the owner's release() can + /// free them between two frames, and that is exactly the frame a stale flag crashes on. + bool valid() const { return cells_ > 0 && vx_ && vy_ && vx0_ && vy0_ && p_ && div_; } + lengthType width() const { return w_; } + lengthType height() const { return h_; } + lengthType depth() const { return d_; } + /// Cells per slice: a slice's fields start at `z * plane()` in velocityX()/velocityY(). + size_t plane() const { return static_cast(w_) * h_; } + const int32_t* velocityX() const { return vx_.data(); } + const int32_t* velocityY() const { return vy_.data(); } + + /// Push the medium at one cell. The source term: an emitter, a control, a beat. + void addVelocity(lengthType x, lengthType y, int32_t dvx, int32_t dvy, lengthType z = 0) { + if (!valid() || x < 0 || y < 0 || z < 0 || x >= w_ || y >= h_ || z >= d_) return; + const size_t i = static_cast(z) * plane() + idx(x, y); + vx_[i] += dvx; + vy_[i] += dvy; + } + + /// One frame of the simulation. `viscosity` and `dt` are Q16.16; `iterations` is the pressure + /// solve's effort, and the honest cost knob: 5 is the usual default, 1 is visibly springy. + void step(int32_t viscosity, int32_t dt, uint8_t iterations) { + if (!valid()) return; + const uint8_t iters = iterationsSanitized(iterations); + const size_t n = plane(); + for (lengthType z = 0; z < d_; z++) { + const size_t at = static_cast(z) * n; + int32_t* vx = vx_.data() + at; int32_t* vy = vy_.data() + at; + int32_t* vx0 = vx0_.data(); int32_t* vy0 = vy0_.data(); // per-slice scratch + if (viscosity > 0) { + diffuse(vx, vx0, viscosity, dt, iters, 1); + diffuse(vy, vy0, viscosity, dt, iters, 2); + } + project(vx, vy, iters); + std::memcpy(vx0, vx, n * sizeof(int32_t)); + std::memcpy(vy0, vy, n * sizeof(int32_t)); + advectSelf(vx, vy, vx0, vy0, dt); + project(vx, vy, iters); + } + } + +private: + static uint8_t iterationsSanitized(uint8_t iterations) { return iterations < 1 ? 1 : iterations; } + size_t idx(lengthType x, lengthType y) const { return static_cast(y) * w_ + x; } + + /// Walls: the boundary mirrors the interior, with the normal component negated, so the medium + /// slides along an edge rather than through it. `b` says which component (1 = x, 2 = y, 0 = a + /// scalar like pressure). + void setBoundary(int32_t* f, int b) { + for (lengthType x = 1; x < w_ - 1; x++) { + f[idx(x, 0)] = (b == 2) ? -f[idx(x, 1)] : f[idx(x, 1)]; + f[idx(x, h_ - 1)] = (b == 2) ? -f[idx(x, h_ - 2)] : f[idx(x, h_ - 2)]; + } + for (lengthType y = 1; y < h_ - 1; y++) { + f[idx(0, y)] = (b == 1) ? -f[idx(1, y)] : f[idx(1, y)]; + f[idx(w_ - 1, y)] = (b == 1) ? -f[idx(w_ - 2, y)] : f[idx(w_ - 2, y)]; + } + // The corners have no single neighbor to mirror, so they average the two beside them. + f[idx(0, 0)] = (f[idx(1, 0)] + f[idx(0, 1)]) / 2; + f[idx(w_ - 1, 0)] = (f[idx(w_ - 2, 0)] + f[idx(w_ - 1, 1)]) / 2; + f[idx(0, h_ - 1)] = (f[idx(1, h_ - 1)] + f[idx(0, h_ - 2)]) / 2; + f[idx(w_ - 1, h_ - 1)] = (f[idx(w_ - 2, h_ - 1)] + f[idx(w_ - 1, h_ - 2)]) / 2; + } + + /// Gauss-Seidel relaxation: the shared inner loop of both diffuse and project. Each cell + /// becomes a weighted average of itself and its four neighbors, repeated until it settles. + void relax(int32_t* f, const int32_t* f0, int32_t a, int32_t c, uint8_t iters, int b) { + if (c == 0) return; + for (uint8_t k = 0; k < iters; k++) { + for (lengthType y = 1; y < h_ - 1; y++) { + for (lengthType x = 1; x < w_ - 1; x++) { + const int64_t neigh = static_cast(f[idx(x - 1, y)]) + f[idx(x + 1, y)] + + f[idx(x, y - 1)] + f[idx(x, y + 1)]; + // 64-bit for the product: a Q16.16 velocity times a Q16.16 coefficient is a + // Q32.32 intermediate, and truncating it to 32 bits loses the whole integer + // part on any but the slowest flow. + const int64_t v = (static_cast(f0[idx(x, y)]) << 16) + + static_cast(a) * neigh; + f[idx(x, y)] = static_cast(v / c); + } + } + setBoundary(f, b); + } + } + + void diffuse(int32_t* f, int32_t* f0, int32_t visc, int32_t dt, uint8_t iters, int b) { + std::memcpy(f0, f, plane() * sizeof(int32_t)); + const int64_t a = (static_cast(visc) * dt) >> 16; + if (a <= 0) return; + relax(f, f0, static_cast(a), static_cast((kOne + 4 * a)), iters, b); + } + + /// Make the field divergence-free: compute how much each cell is gaining or losing, solve for + /// a pressure whose gradient cancels it, then subtract that gradient. + /// + /// This is the step that separates a fluid from a field of arrows. Without it the medium piles + /// up in some places and drains from others, and anything carried by it clumps and vanishes. + void project(int32_t* vx, int32_t* vy, uint8_t iters) { + int32_t* div = div_.data(); + int32_t* p = p_.data(); + for (lengthType y = 1; y < h_ - 1; y++) + for (lengthType x = 1; x < w_ - 1; x++) { + const int64_t d = static_cast(vx[idx(x + 1, y)]) - vx[idx(x - 1, y)] + + vy[idx(x, y + 1)] - vy[idx(x, y - 1)]; + div[idx(x, y)] = static_cast(-d / 2); + p[idx(x, y)] = 0; + } + setBoundary(div, 0); + setBoundary(p, 0); + relax(p, div, kOne, 4 * kOne, iters, 0); + for (lengthType y = 1; y < h_ - 1; y++) + for (lengthType x = 1; x < w_ - 1; x++) { + vx[idx(x, y)] -= (p[idx(x + 1, y)] - p[idx(x - 1, y)]) / 2; + vy[idx(x, y)] -= (p[idx(x, y + 1)] - p[idx(x, y - 1)]) / 2; + } + setBoundary(vx, 1); + setBoundary(vy, 2); + } + + /// The velocity carries itself: backward-sampled, like every other advection here, because + /// that is what stays stable when a cell would otherwise move further than one cell per step. + void advectSelf(int32_t* vx, int32_t* vy, const int32_t* vx0, const int32_t* vy0, int32_t dt) { + for (lengthType y = 1; y < h_ - 1; y++) { + for (lengthType x = 1; x < w_ - 1; x++) { + // Where this cell's contents came from, in Q16.16 cell coordinates. + int64_t sx = (static_cast(x) << 16) - ((static_cast(vx0[idx(x, y)]) * dt) >> 16); + int64_t sy = (static_cast(y) << 16) - ((static_cast(vy0[idx(x, y)]) * dt) >> 16); + // Clamped half a cell inside the wall, so the bilinear read below always has four + // real neighbors and the boundary handles the rest. + const int64_t lo = kOne / 2, hiX = (static_cast(w_) << 16) - kOne - kOne / 2; + const int64_t hiY = (static_cast(h_) << 16) - kOne - kOne / 2; + sx = sx < lo ? lo : (sx > hiX ? hiX : sx); + sy = sy < lo ? lo : (sy > hiY ? hiY : sy); + const lengthType x0 = static_cast(sx >> 16), y0 = static_cast(sy >> 16); + const int64_t fx = sx & 0xFFFF, fy = sy & 0xFFFF; + const auto blend = [&](const int32_t* f) -> int32_t { + const int64_t a = f[idx(x0, y0)] + (((static_cast(f[idx(x0 + 1, y0)]) - f[idx(x0, y0)]) * fx) >> 16); + const int64_t b = f[idx(x0, y0 + 1)] + (((static_cast(f[idx(x0 + 1, y0 + 1)]) - f[idx(x0, y0 + 1)]) * fx) >> 16); + return static_cast(a + (((b - a) * fy) >> 16)); + }; + vx[idx(x, y)] = blend(vx0); + vy[idx(x, y)] = blend(vy0); + } + } + setBoundary(vx, 1); + setBoundary(vy, 2); + } + + ScratchBuffer vx_, vy_; ///< the velocity field, Q16.16 + ScratchBuffer vx0_, vy0_; ///< the previous field, which advection reads + ScratchBuffer p_, div_; ///< the pressure solve's working grids + lengthType w_ = 0, h_ = 0, d_ = 0; + size_t cells_ = 0; ///< every slice together +}; + +} // namespace mm diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index 6a4dd1a9..e15c6f2a 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -415,6 +415,7 @@ struct FlowSink { /// directly. Copying the flag into the sink and reading it back afterwards would work only for /// an even number of swaps, and a script may advect once, twice or not at all. bool* front = nullptr; ///< true: `a` holds the trail; false: `b` does + const uint32_t* frame = nullptr; ///< the binding's frame counter, for fieldRate lengthType w = 0, h = 0, d = 0; uint32_t dtMs = 0; uint16_t* live() const { return !front ? nullptr : (*front ? a : b); } @@ -830,6 +831,24 @@ extern "C" inline uint32_t mm_light_trail(const uintptr_t* args, uint32_t, const // one call, because the alternative (a script loop calling a per-pixel rule) would cross the script // boundary once per light, which on a 20-cube is 8000 calls a frame. One call, the loop in C++. +/// Should this frame do the expensive work? `fieldRate(n)` answers true once every n frames. +/// +/// A script's ONLY practical way to afford a per-pixel loop on a large fixture: crossing the script +/// boundary once per light costs 8000 calls a frame on a cube, and skipping four in five of those is +/// the difference between an effect that runs and one that does not. What a caller puts inside the +/// gate is its own composition; guarding the expensive BIRTH while the flow and the decay run every +/// frame keeps the motion smooth and costs only detail, which is what nebula.mle does. +/// +/// The counter lives with the binding, not the script: a script holding its own frame count would +/// have to reason about what a frame is, which is the system's business. +extern "C" inline uint32_t mm_light_fieldRate(const uintptr_t* args, uint32_t, const uint8_t*) { + FlowSink& f = flowSink(); + if (!f.frame) return 1; // no binding: never skip, so a script still works + const uint32_t n = uint32_t(args[0]); + if (n <= 1) return 1; + return (*f.frame % n) == 0 ? 1u : 0u; +} + /// Advect the trail along a noise field: two decoupled samples, one per axis. extern "C" inline uint32_t mm_light_flowNoise(const uintptr_t* args, uint32_t, const uint8_t*) { FlowSink& f = flowSink(); @@ -905,9 +924,12 @@ extern "C" inline uint32_t mm_light_emitTrail(const uintptr_t* args, uint32_t, c for (int32_t dy = -rad; dy <= rad; dy++) { for (int32_t dx = -rad; dx <= rad; dx++) { if (dx * dx + dy * dy > rad * rad) continue; // a disc, not a square - const int32_t x = cx + dx, y = cy + dy; + // Widened for the sum: cx and cy come from the SCRIPT, so either may be near + // INT32_MAX, and adding the radius to that is signed overflow before the bounds test + // ever runs. Only a coordinate that passed the test is narrowed for indexing. + const int64_t x = static_cast(cx) + dx, y = static_cast(cy) + dy; if (x < 0 || y < 0 || cz < 0 || x >= f.w || y >= f.h || cz >= f.d) continue; - const size_t off = (size_t(cz) * f.h * f.w + size_t(y) * f.w + x) * 3; + const size_t off = (size_t(cz) * f.h * f.w + size_t(y) * f.w + size_t(x)) * 3; plane[off + 0] = wr; plane[off + 1] = wg; plane[off + 2] = wb; @@ -1330,6 +1352,7 @@ inline const BuiltinTable& lightBuiltins() { t.add({"fade", 1, /*returns*/ false, BuiltinKind::Call, &mm_light_fade, {}}); // The flow family: each advects the whole plane in one call (see the handlers). t.add({"trail", 1, /*returns*/ true, BuiltinKind::Call, &mm_light_trail, {}}); + t.add({"fieldRate", 1, /*returns*/ true, BuiltinKind::Call, &mm_light_fieldRate, {}}); t.add({"flowNoise", 2, false, BuiltinKind::Call, &mm_light_flowNoise, {}}); t.add({"flowCurl", 2, false, BuiltinKind::Call, &mm_light_flowCurl, {}}); t.add({"trailDecay", 1, false, BuiltinKind::Call, &mm_light_trailDecay, {}}); diff --git a/src/light/moonlive/MoonLiveEffect.h b/src/light/moonlive/MoonLiveEffect.h index 1cc571bf..d6fca7e6 100644 --- a/src/light/moonlive/MoonLiveEffect.h +++ b/src/light/moonlive/MoonLiveEffect.h @@ -141,6 +141,7 @@ class MoonLiveEffect : public EffectBase { f.a = trailA_.data(); f.b = trailB_.data(); f.front = &trailFront_; + f.frame = &frameCount_; f.w = width(); f.h = height(); f.d = depth(); f.dtMs = dt; moonlive::setFlowSink(f); @@ -157,6 +158,10 @@ class MoonLiveEffect : public EffectBase { moonlive::setFlowSink({}); blitTrail(); } + // Outside the trail branch: the counter is the BINDING's frame count, and `fieldRate(n)` is + // a rate limiter any script may use. Advanced only when a trail existed, a script that + // skips `trail(1)` got a frozen counter and fieldRate answered 1 on every frame forever. + frameCount_++; moonlive::setPoolSink(nullptr, 0); moonlive::setMotionSink(nullptr, nullptr); moonlive::setFadeSink(nullptr, nullptr); @@ -197,6 +202,7 @@ class MoonLiveEffect : public EffectBase { ScratchBuffer trailA_{*this}; ScratchBuffer trailB_{*this}; bool trailFront_ = true; + uint32_t frameCount_ = 0; ///< the counter fieldRate reads bool trailWanted_ = false; uint32_t lastTickMs_ = 0; diff --git a/src/light/moonlive/MoonLiveScriptFile.h b/src/light/moonlive/MoonLiveScriptFile.h index caab691f..f7c3516c 100644 --- a/src/light/moonlive/MoonLiveScriptFile.h +++ b/src/light/moonlive/MoonLiveScriptFile.h @@ -11,6 +11,11 @@ namespace mm::moonlive { /// Where a scripted module's script file lives. One fixed directory, the way `/.config` holds /// persisted state: a module stores a NAME, not a path, so it cannot reach outside this folder and /// the File Manager has one obvious place to look. +/// The USER's scripts, which the UI writes and the loader prefers. An edit made in the device's +/// own editor lands here, so a factory script of the same name is shadowed from that moment on: +/// pushing a new version of a shipped script to `kFactoryScriptDir` will NOT be seen once a user +/// has saved their own copy. (Two names differing only in case are one file on a case-insensitive +/// desktop and two on the device's LittleFS, which makes that shadowing easy to miss.) inline constexpr const char* kScriptDir = "/moonlive"; /// Where the FACTORY scripts land: the ones the picker offers from the shipped catalog and the UI diff --git a/src/light/moonlive/script_catalog.h b/src/light/moonlive/script_catalog.h index 9711916e..b7dda019 100644 --- a/src/light/moonlive/script_catalog.h +++ b/src/light/moonlive/script_catalog.h @@ -24,11 +24,13 @@ constexpr const char* kEffectCatalog[] = { "crosshair.mle", "dot.mle", "ember.mle", + "fluid.mle", "fountain.mle", "fractal.mle", "gradient.mle", "lines.mle", "metal.mle", + "nebula.mle", "noise.mle", "octopus.mle", "plasma.mle", @@ -41,7 +43,7 @@ constexpr const char* kEffectCatalog[] = { "sweep.mle", "trails.mle", }; -constexpr size_t kEffectCatalogCount = 26; +constexpr size_t kEffectCatalogCount = 28; /// What each effect above declares about itself, in the same order. /// A dimension of 0 means the script says nothing, so the DEVICE decides the default. constexpr unsigned char kEffectCatalogDim[] = { @@ -55,11 +57,13 @@ constexpr unsigned char kEffectCatalogDim[] = { 2, 2, 1, + 3, 2, 2, 3, 2, 2, + 3, 2, 2, 2, @@ -84,11 +88,13 @@ constexpr const char* kEffectCatalogTags[] = { "💫", "💫", "💫", + "💫🖌️", "💫✨", "💫🖌️", "💫", "💫", "💫🖌️", + "💫🖌️", "💫", "💫🖌️", "💫", @@ -213,6 +219,6 @@ constexpr const char* kPaletteCatalogTags[] = { }; constexpr const char* kPaletteFolder = "palettes"; ///< its directory upstream -constexpr size_t kCatalogCount = 44; ///< every factory script, all roles +constexpr size_t kCatalogCount = 46; ///< every factory script, all roles } // namespace mm::moonlive diff --git a/src/main.cpp b/src/main.cpp index 8fb10634..a6c460aa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,8 @@ #include "light/effects/LinesEffect.h" #include "light/effects/RainbowEffect.h" #include "light/effects/WaveEffect.h" +#include "light/effects/FluidEffect.h" +#include "light/effects/NebulaEffect.h" #include "light/effects/NoiseEffect.h" #include "light/effects/MovingHeadEffect.h" #include "light/effects/PacmanEffect.h" @@ -240,6 +242,8 @@ static void registerModuleTypes() { mm::ModuleFactory::registerType("AuroraEffect", "light/effects.md#aurora"); mm::ModuleFactory::registerType("PolarNoiseEffect", "light/effects.md#polarnoise"); mm::ModuleFactory::registerType("WaterRippleEffect", "light/effects.md#waterripple"); + mm::ModuleFactory::registerType("FluidEffect", "light/effects.md#fluid"); + mm::ModuleFactory::registerType("NebulaEffect", "light/effects.md#nebula"); mm::ModuleFactory::registerType("TrailsEffect", "light/effects.md#trails"); mm::ModuleFactory::registerType("TunnelEffect", "light/effects.md#tunnel"); mm::ModuleFactory::registerType("EchoEffect", "light/effects.md#echo"); diff --git a/src/ui/preview3d.js b/src/ui/preview3d.js index d1d59c3c..c25910d6 100644 --- a/src/ui/preview3d.js +++ b/src/ui/preview3d.js @@ -866,7 +866,7 @@ function drawVerts() { // panel (¾ light, ¼ gap) at any size — a big grid is spatially downsampled (the device // sends ~1800 lattice points), so sizing by the full dimension left each dot a fraction of // its cell with big gaps. The sampled points fill the bounding box uniformly, so the pitch - // between neighbours (in grid units) is (boxVolume / count)^(1/activeDims): the square root + // between neighbors (in grid units) is (boxVolume / count)^(1/activeDims): the square root // for a flat grid, the CUBE root for a 3D volume (a cube's points spread over depth, so a // flat √ undercounts the pitch and the dots come out too small — the 3D-gap bug). Convert // that grid pitch to on-screen pixels (canvas px per grid unit) and take 75% of it. The @@ -903,24 +903,26 @@ function drawVerts() { } gl.uniform1f(glLocs.uRingFade, ringFade); - // Two passes so lit LEDs always sit ABOVE the grey placeholders (your "lights should layer - // above the circles"). On a flat grid all LEDs share a z-plane, so a single pass let draw - // order + z-fighting clip a lit dot behind a neighbour's placeholder. Pass 1 draws the - // off-LED placeholders and writes depth; pass 2 draws the lit LEDs with depthFunc LEQUAL - // and depth-WRITE off — so a lit dot beats a co-located placeholder (equal depth passes) - // yet lit dots still depth-sort against each other in a true 3D cube under any pan/tilt. + // Two passes so lit LEDs always sit ABOVE the grey placeholders. On a flat grid all LEDs share + // a z-plane, so a single pass let draw order + z-fighting clip a lit dot behind a neighbor's + // placeholder. Pass 1 draws the off-LED placeholders, pass 2 the lit ones with depthFunc LEQUAL // Placeholders do NOT write depth. They are decoration, not geometry: an unlit LED that // occupies the depth buffer HIDES every lit LED behind it, however transparent it looks, since // the depth test rejects the later fragment before its alpha is ever considered. That is what // made a cube a solid wall at large dot sizes: not the grey, the depth. With the write off, a // dark LED tints what is behind it and nothing more, so a volume is seen through. + // Pass 1, placeholders: depth TEST on (they hide behind lit LEDs in front of them) but depth + // WRITE off, so an unlit LED never occupies the buffer. gl.depthMask(false); - gl.uniform1f(glLocs.uLitPass, 0.0); // placeholders (no depth write) - gl.drawArrays(gl.POINTS, 0, lastVertCount); - gl.depthFunc(gl.LEQUAL); - gl.uniform1f(glLocs.uLitPass, 1.0); // lit LEDs, on top + gl.uniform1f(glLocs.uLitPass, 0.0); gl.drawArrays(gl.POINTS, 0, lastVertCount); + // Pass 2, lit LEDs: depth write back ON, so they depth-sort against EACH OTHER in a volume. + // Leaving it off here was the bug's other half: a lit LED at the back of a cube then drew over + // one at the front, because nothing recorded which was nearer. gl.depthMask(true); + gl.depthFunc(gl.LEQUAL); // beats a co-located placeholder + gl.uniform1f(glLocs.uLitPass, 1.0); + gl.drawArrays(gl.POINTS, 0, lastVertCount); gl.depthFunc(gl.LESS); drawBoundingBox(mvp); @@ -950,7 +952,7 @@ function drawVerts() { // A rest beam points along -Z, OUT of the layout toward the viewer. Z is the scene's depth axis // (architecture.md: 2D is the (x,y) face and 3D adds slices across Z), so X and Y are where the // fixtures are ARRANGED and Z is the only axis free to shine along. Aiming down -Y instead would -// send each head along the axis its neighbours occupy, which is what a 1 x N chain of heads made +// send each head along the axis its neighbors occupy, which is what a 1 x N chain of heads made // obvious: every beam ran through the next fixture. // // Pan then sweeps in the (x,z) plane and tilt lifts toward +Y, so a centered head points straight @@ -1157,7 +1159,7 @@ function drawBoundingBox(mvp) { // rendered onto a 2D canvas laid over #preview: project the light's position through the // SAME mvp the GL render uses (so labels track LEDs in 2D AND 3D layouts), to a screen // pixel, and draw its number. Legibility LOD: a number is drawn only if it FITS INSIDE its -// light bulb (the on-screen sprite) — so it never overflows onto neighbours. The font is +// light bulb (the on-screen sprite), so it never overflows onto neighbors. The font is // sized to the sprite, so as you zoom in (sprites grow, depth-corrected) more numbers fit // and appear; zoomed out on a dense grid they don't fit and stay hidden. Behind-camera // points (w ≤ 0) are skipped — essential for 3D. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9b00c1ee..ae07040b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -87,6 +87,7 @@ add_executable(mm_tests unit/light/unit_PanelCardDriver_packet.cpp unit/light/unit_WledAudioSyncPacket.cpp unit/light/unit_BlendMap.cpp + unit/light/unit_fluid.cpp unit/light/unit_draw.cpp unit/light/unit_GameOfLifeEffect.cpp unit/light/unit_DemoReelEffect.cpp diff --git a/test/scenario_runner.cpp b/test/scenario_runner.cpp index 81628f29..93b25ef9 100644 --- a/test/scenario_runner.cpp +++ b/test/scenario_runner.cpp @@ -23,6 +23,8 @@ #include "light/moonlive/MoonLiveModifier.h" #include "light/moonlive/MoonLiveLayout.h" #include "light/effects/AuroraEffect.h" +#include "light/effects/FluidEffect.h" +#include "light/effects/NebulaEffect.h" #include "light/effects/TrailsEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" @@ -223,6 +225,8 @@ static void registerScenarioTypes() { mm::ModuleFactory::registerType("MoonLiveModifier"); mm::ModuleFactory::registerType("MoonLiveLayout"); mm::ModuleFactory::registerType("AuroraEffect"); + mm::ModuleFactory::registerType("FluidEffect"); + mm::ModuleFactory::registerType("NebulaEffect"); mm::ModuleFactory::registerType("TrailsEffect"); mm::ModuleFactory::registerType("PolarNoiseEffect"); mm::ModuleFactory::registerType("SpiralEffect"); diff --git a/test/scenarios/core/scenario_MoonModule_control_change.json b/test/scenarios/core/scenario_MoonModule_control_change.json index 7651c977..4deeef62 100644 --- a/test/scenarios/core/scenario_MoonModule_control_change.json +++ b/test/scenarios/core/scenario_MoonModule_control_change.json @@ -119,12 +119,12 @@ "tick_us": { "p50": 130, "p95": 246, - "min": 119, + "min": 118, "max": 248, "n": 32, - "samples": [124, 129, 127, 124, 125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121] + "samples": [127, 124, 125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { @@ -301,12 +301,12 @@ "tick_us": { "p50": 131, "p95": 238, - "min": 119, + "min": 118, "max": 247, "n": 32, - "samples": [129, 129, 129, 127, 127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120] + "samples": [129, 127, 127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { @@ -483,12 +483,12 @@ "tick_us": { "p50": 130, "p95": 239, - "min": 118, + "min": 116, "max": 240, "n": 32, - "samples": [128, 129, 129, 128, 128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121] + "samples": [129, 128, 128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { @@ -673,12 +673,12 @@ "tick_us": { "p50": 130, "p95": 247, - "min": 119, + "min": 118, "max": 261, "n": 32, - "samples": [128, 129, 128, 131, 128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120] + "samples": [128, 131, 128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index 19722771..f84c596f 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -105,14 +105,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 31, - "p95": 122, + "p50": 25, + "p95": 77, "min": 16, - "max": 707, + "max": 89, "n": 32, - "samples": [707, 122, 31, 89, 17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20] + "samples": [31, 89, 17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -202,14 +202,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 37, - "p95": 404, + "p50": 35, + "p95": 202, "min": 17, - "max": 882, + "max": 404, "n": 32, - "samples": [882, 305, 79, 184, 18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19] + "samples": [79, 184, 18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -316,14 +316,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 44, - "p95": 592, + "p50": 37, + "p95": 213, "min": 17, - "max": 1192, + "max": 413, "n": 32, - "samples": [1192, 592, 50, 152, 19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20] + "samples": [50, 152, 19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -413,14 +413,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 45, - "p95": 790, + "p50": 38, + "p95": 125, "min": 19, - "max": 945, + "max": 184, "n": 32, - "samples": [945, 790, 48, 80, 23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20] + "samples": [48, 80, 23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -508,14 +508,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 39, - "p95": 307, + "p50": 36, + "p95": 82, "min": 19, - "max": 400, + "max": 110, "n": 32, - "samples": [400, 307, 72, 64, 21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20] + "samples": [72, 64, 21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -603,14 +603,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 34, - "p95": 273, + "p50": 32, + "p95": 105, "min": 17, - "max": 484, + "max": 142, "n": 32, - "samples": [484, 273, 34, 64, 19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19] + "samples": [34, 64, 19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index 370b6556..20b8ee77 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,14 +84,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 803, + "p50": 827, "p95": 890, "min": 474, "max": 890, - "n": 10, - "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827] + "n": 12, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -114,14 +114,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 311, - "p95": 320, + "p50": 316, + "p95": 334, "min": 207, - "max": 320, - "n": 10, - "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317] + "max": 334, + "n": 12, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -145,13 +145,13 @@ "desktop-macos": { "tick_us": { "p50": 185, - "p95": 192, + "p95": 196, "min": 127, - "max": 192, - "n": 10, - "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185] + "max": 196, + "n": 12, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -174,14 +174,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 532, - "p95": 554, + "p50": 540, + "p95": 581, "min": 303, - "max": 554, - "n": 10, - "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551] + "max": 581, + "n": 12, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -204,14 +204,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 921, - "p95": 974, + "p50": 933, + "p95": 997, "min": 474, - "max": 974, - "n": 10, - "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945] + "max": 997, + "n": 12, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -234,14 +234,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1430, - "p95": 1562, + "p50": 1455, + "p95": 2116, "min": 785, - "max": 1562, - "n": 9, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458] + "max": 2116, + "n": 11, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -264,14 +264,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1494, - "p95": 1511, + "p50": 1496, + "p95": 1920, "min": 507, - "max": 1511, - "n": 10, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506] + "max": 1920, + "n": 12, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -294,14 +294,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1092, - "p95": 1118, + "p50": 1096, + "p95": 1211, "min": 333, - "max": 1118, - "n": 10, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118] + "max": 1211, + "n": 12, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } } diff --git a/test/scenarios/light/scenario_Driver_mutation.json b/test/scenarios/light/scenario_Driver_mutation.json index fc617268..d3670664 100644 --- a/test/scenarios/light/scenario_Driver_mutation.json +++ b/test/scenarios/light/scenario_Driver_mutation.json @@ -76,14 +76,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 43, - "p95": 1198, + "p50": 37, + "p95": 590, "min": 17, "max": 1843, "n": 32, - "samples": [1198, 180, 56, 69, 19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20] + "samples": [56, 69, 19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -173,14 +173,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 45, - "p95": 665, + "p50": 39, + "p95": 298, "min": 17, - "max": 2596, + "max": 421, "n": 32, - "samples": [2596, 665, 42, 58, 17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20] + "samples": [42, 58, 17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -270,14 +270,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 38, + "p50": 36, "p95": 257, "min": 18, "max": 339, "n": 32, - "samples": [177, 160, 49, 61, 20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20] + "samples": [49, 61, 20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -365,14 +365,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 49, - "p95": 285, - "min": 20, - "max": 718, + "p50": 38, + "p95": 120, + "min": 17, + "max": 173, "n": 32, - "samples": [718, 285, 71, 68, 20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20] + "samples": [71, 68, 20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -460,14 +460,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 47, - "p95": 316, - "min": 19, - "max": 852, + "p50": 35, + "p95": 267, + "min": 17, + "max": 316, "n": 32, - "samples": [852, 244, 94, 87, 19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20] + "samples": [94, 87, 19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Effects_composition.json b/test/scenarios/light/scenario_Effects_composition.json index 1fdd7ce8..ad1a293e 100644 --- a/test/scenarios/light/scenario_Effects_composition.json +++ b/test/scenarios/light/scenario_Effects_composition.json @@ -106,14 +106,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 497, - "p95": 2259, + "p50": 485, + "p95": 1253, "min": 142, - "max": 11415, + "max": 1335, "n": 32, - "samples": [11415, 2259, 507, 742, 252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146] + "samples": [507, 742, 252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index 2ddd23c8..8bb4547e 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -85,14 +85,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 283, + "p50": 289, "p95": 387, "min": 189, "max": 387, - "n": 11, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325] + "n": 13, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -115,14 +115,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 279, + "p50": 281, "p95": 313, "min": 183, "max": 313, - "n": 11, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297] + "n": 13, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -145,14 +145,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 279, - "p95": 289, + "p50": 281, + "p95": 303, "min": 168, - "max": 289, - "n": 11, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289] + "max": 303, + "n": 13, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -175,14 +175,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 277, - "p95": 286, + "p50": 278, + "p95": 301, "min": 168, - "max": 286, - "n": 11, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286] + "max": 301, + "n": 13, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -206,13 +206,13 @@ "desktop-macos": { "tick_us": { "p50": 138, - "p95": 144, + "p95": 147, "min": 83, - "max": 144, - "n": 11, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141] + "max": 147, + "n": 13, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -235,14 +235,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 413, + "p50": 417, "p95": 501, "min": 250, "max": 501, - "n": 11, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421] + "n": 13, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -272,13 +272,13 @@ "desktop-macos": { "tick_us": { "p50": 1206, - "p95": 1239, + "p95": 1298, "min": 960, - "max": 1239, - "n": 11, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228] + "max": 1298, + "n": 13, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -305,10 +305,10 @@ "p95": 590, "min": 460, "max": 590, - "n": 11, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473] + "n": 13, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } } diff --git a/test/scenarios/light/scenario_Fluid_solver.json b/test/scenarios/light/scenario_Fluid_solver.json new file mode 100644 index 00000000..ced1d178 --- /dev/null +++ b/test/scenarios/light/scenario_Fluid_solver.json @@ -0,0 +1,375 @@ +{ + "name": "scenario_Fluid_solver", + "module": "FluidEffect", + "mode": "mutate", + "also": [ + "Fluid", + "draw", + "OscillatorBank", + "GridLayout", + "Layer" + ], + "description": "What a stable-fluid solver costs, and that it survives being reshaped underneath itself. Unlike every other flow in the library the velocity here is STATE: six grids the solver owns, reallocated whenever the fixture changes, which is what makes the resize steps a real contract rather than a formality. A stale grid would address cells that no longer exist. The cost knob is `iterations`, the pressure solve that keeps the flow divergence-free: each one is another Gauss-Seidel sweep over the whole grid, so the ladder from 1 to 20 is close to linear and it is what an author reads to pick a value for their fixture. On a cube every slice is its own medium, with nothing carried between slices, so the cost is depth times one panel. The frame times are a TREND per target rather than a pass mark; the solver is several passes over the grid per frame, so this is a desktop and P4 effect and the device numbers are the ones that decide where it can run.", + "fixture": [ + { + "name": "fix-layouts", + "op": "add_module", + "id": "Layouts", + "type": "Layouts" + }, + { + "name": "fix-layers", + "op": "add_module", + "id": "Effects", + "type": "Effects", + "props": { + "layouts": "Layouts" + } + }, + { + "name": "fix-drivers", + "op": "add_module", + "id": "Drivers", + "type": "Drivers", + "props": { + "effects": "Effects" + } + } + ], + "steps": [ + { + "name": "canvas-clear-layers", + "description": "Self-canvas: rebuild the pipeline this scenario assumes, so it runs from any device state.", + "op": "clear_children", + "id": "Effects" + }, + { + "name": "canvas-clear-layouts", + "op": "clear_children", + "id": "Layouts" + }, + { + "name": "canvas-grid", + "description": "A 32x32 panel to start: small enough that the six solver grids are cheap while the shape of the cost is already visible.", + "op": "add_module", + "id": "Grid", + "type": "GridLayout", + "parent_id": "Layouts", + "props": { + "width": 32, + "height": 32 + } + }, + { + "name": "canvas-layer", + "op": "add_module", + "id": "Layer", + "type": "Layer", + "parent_id": "Effects" + }, + { + "name": "add-fluid", + "description": "The solver on the layer. prepare() allocates six velocity and pressure grids plus two dye planes, so the allocation happens here rather than on the first rendered frame.", + "op": "add_module", + "id": "Fluid", + "type": "FluidEffect", + "parent_id": "Layer", + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 30, + "p95": 31, + "min": 30, + "max": 31, + "n": 4, + "samples": [30, 30, 30, 31] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "iterations-1", + "description": "The pressure solve at its cheapest. At one sweep the flow is not properly divergence-free and reads springy, which is the visible cost of the cheap setting.", + "op": "set_control", + "id": "Fluid", + "key": "iterations", + "value": 1, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 20, + "p95": 20, + "min": 19, + "max": 20, + "n": 4, + "samples": [20, 20, 20, 19] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "iterations-20", + "description": "And at its most expensive. The ratio against the step above is the pressure solve's share of the frame, which is what an author trades against grid size.", + "op": "set_control", + "id": "Fluid", + "key": "iterations", + "value": 20, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 69, + "p95": 70, + "min": 68, + "max": 70, + "n": 4, + "samples": [69, 69, 68, 70] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "iterations-5", + "description": "Back to the default, confirming the knob moves in both directions rather than one way.", + "op": "set_control", + "id": "Fluid", + "key": "iterations", + "value": 5, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 30, + "p95": 31, + "min": 30, + "max": 31, + "n": 4, + "samples": [30, 31, 30, 30] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "grid-64", + "description": "Double each side under a running solver: four times the cells, and every one of the six grids is reallocated in prepare(). A solver that carried its old grid over would be addressing cells that no longer exist.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 64, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 65, + "p95": 66, + "min": 64, + "max": 66, + "n": 4, + "samples": [64, 65, 65, 66] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "grid-64-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 64, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 134, + "p95": 138, + "min": 133, + "max": 138, + "n": 4, + "samples": [133, 134, 138, 136] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "all-jets", + "description": "Every jet pouring at once. The jets are forcing rather than per-pixel work, so this should barely move the frame time: the solver dominates, which is the point.", + "op": "set_control", + "id": "Fluid", + "key": "jets", + "value": 4, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 136, + "p95": 140, + "min": 133, + "max": 140, + "n": 4, + "samples": [133, 140, 137, 136] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "long-persistence", + "description": "Dye held at its longest half-life, the setting the 16-bit plane exists for: a value multiplied by slightly less than one many times a second has nowhere to go at 8 bits.", + "op": "set_control", + "id": "Fluid", + "key": "persistence", + "value": 255, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 135, + "p95": 141, + "min": 134, + "max": 141, + "n": 4, + "samples": [134, 141, 138, 135] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "cube-20", + "description": "A 20x20x20 cube, the largest volumetric fixture in practice: twenty independent slices, each its own medium, with the jets drifting through them in z. The cost is twenty small solves, close to one 90x90 panel, and it is what decides whether the effect belongs on a cube at all.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 20, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 38, + "p95": 39, + "min": 36, + "max": 39, + "n": 3, + "samples": [39, 38, 36] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "cube-20-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 20, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 11, + "p95": 12, + "min": 11, + "max": 12, + "n": 3, + "samples": [12, 11, 11] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "cube-20-d", + "op": "set_control", + "id": "Grid", + "key": "depth", + "value": 20, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 232, + "p95": 249, + "min": 229, + "max": 249, + "n": 3, + "samples": [249, 232, 229] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "back-to-panel", + "description": "Depth back to 1: the slices are freed and the panel path is exactly the 2D one again.", + "op": "set_control", + "id": "Grid", + "key": "depth", + "value": 1, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 11, + "p95": 12, + "min": 11, + "max": 12, + "n": 3, + "samples": [12, 11, 11] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "grid-16", + "description": "Shrink it again, the direction that frees rather than allocates, and the one where a solver holding a stale pointer shows up immediately.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 16, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 9, + "p95": 29, + "min": 9, + "max": 29, + "n": 4, + "samples": [29, 9, 9, 9] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "grid-16-h", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 16, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 7, + "p95": 7, + "min": 7, + "max": 7, + "n": 4, + "samples": [7, 7, 7, 7] + }, + "last_updated": "2026-09-05" + } + } + } + ] +} diff --git a/test/scenarios/light/scenario_GridBlacks_blackpixel.json b/test/scenarios/light/scenario_GridBlacks_blackpixel.json index 51d2f1e0..dd1de86d 100644 --- a/test/scenarios/light/scenario_GridBlacks_blackpixel.json +++ b/test/scenarios/light/scenario_GridBlacks_blackpixel.json @@ -95,9 +95,9 @@ "min": 1, "max": 27, "n": 32, - "samples": [2, 2, 2, 2, 3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1] + "samples": [2, 2, 3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -198,9 +198,9 @@ "min": 2, "max": 73, "n": 32, - "samples": [3, 3, 3, 3, 4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2] + "samples": [3, 3, 4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_GridLayout_resize.json b/test/scenarios/light/scenario_GridLayout_resize.json index f9f17c63..ccfaa4bb 100644 --- a/test/scenarios/light/scenario_GridLayout_resize.json +++ b/test/scenarios/light/scenario_GridLayout_resize.json @@ -117,14 +117,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 130, + "p50": 129, "p95": 311, - "min": 118, + "min": 117, "max": 316, "n": 32, - "samples": [131, 125, 124, 209, 127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120] + "samples": [124, 209, 127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { @@ -301,12 +301,12 @@ "tick_us": { "p50": 69, "p95": 161, - "min": 63, + "min": 59, "max": 177, "n": 32, - "samples": [66, 69, 67, 177, 68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64] + "samples": [67, 177, 68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { @@ -483,12 +483,12 @@ "tick_us": { "p50": 129, "p95": 298, - "min": 120, + "min": 116, "max": 309, "n": 32, - "samples": [135, 128, 129, 127, 128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121] + "samples": [129, 127, 128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_base_pipeline.json b/test/scenarios/light/scenario_Layer_base_pipeline.json index c0f13900..b39021f5 100644 --- a/test/scenarios/light/scenario_Layer_base_pipeline.json +++ b/test/scenarios/light/scenario_Layer_base_pipeline.json @@ -88,9 +88,9 @@ "min": 64, "max": 245, "n": 32, - "samples": [69, 68, 67, 75, 189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69] + "samples": [67, 75, 189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_memory_1to1.json b/test/scenarios/light/scenario_Layer_memory_1to1.json index d50bec5b..5993979b 100644 --- a/test/scenarios/light/scenario_Layer_memory_1to1.json +++ b/test/scenarios/light/scenario_Layer_memory_1to1.json @@ -85,9 +85,9 @@ "min": 5, "max": 229, "n": 32, - "samples": [5, 9, 5, 5, 5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5] + "samples": [5, 5, 5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layouts_mutation.json b/test/scenarios/light/scenario_Layouts_mutation.json index ee1126c5..048f38c8 100644 --- a/test/scenarios/light/scenario_Layouts_mutation.json +++ b/test/scenarios/light/scenario_Layouts_mutation.json @@ -78,14 +78,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, - "p95": 608, + "p50": 32, + "p95": 354, "min": 16, - "max": 750, + "max": 437, "n": 32, - "samples": [608, 750, 54, 437, 17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16] + "samples": [54, 437, 17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -206,14 +206,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 87, - "p95": 1353, + "p50": 86, + "p95": 633, "min": 44, - "max": 1367, + "max": 714, "n": 32, - "samples": [1353, 1367, 236, 714, 46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46] + "samples": [236, 714, 46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -329,14 +329,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 171, - "p95": 2190, - "min": 89, - "max": 2305, + "p50": 169, + "p95": 1211, + "min": 88, + "max": 1486, "n": 32, - "samples": [2190, 2305, 1486, 1211, 89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93] + "samples": [1486, 1211, 89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -451,14 +451,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, - "p95": 595, + "p50": 31, + "p95": 293, "min": 16, - "max": 719, + "max": 409, "n": 32, - "samples": [595, 719, 126, 409, 20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20] + "samples": [126, 409, 20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json index 27fb7074..c91e1ba9 100644 --- a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json +++ b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json @@ -93,9 +93,9 @@ "min": 5, "max": 1050, "n": 32, - "samples": [5, 5, 5, 7, 132, 1050, 17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5] + "samples": [5, 7, 132, 1050, 17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -211,9 +211,9 @@ "min": 5, "max": 1656, "n": 32, - "samples": [5, 5, 5, 6, 482, 1656, 16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5] + "samples": [5, 6, 482, 1656, 16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -321,9 +321,9 @@ "min": 5, "max": 184, "n": 32, - "samples": [5, 5, 5, 6, 22, 184, 20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5] + "samples": [5, 6, 22, 184, 20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -431,9 +431,9 @@ "min": 5, "max": 309, "n": 32, - "samples": [5, 5, 5, 6, 309, 151, 25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5] + "samples": [5, 6, 309, 151, 25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -534,9 +534,9 @@ "min": 5, "max": 464, "n": 32, - "samples": [5, 5, 5, 6, 208, 464, 15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5] + "samples": [5, 6, 208, 464, 15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -637,9 +637,9 @@ "min": 5, "max": 282, "n": 32, - "samples": [5, 5, 5, 6, 187, 282, 14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5] + "samples": [5, 6, 187, 282, 14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -738,9 +738,9 @@ "min": 5, "max": 113, "n": 32, - "samples": [5, 5, 5, 6, 113, 81, 19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5] + "samples": [5, 6, 113, 81, 19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -841,9 +841,9 @@ "min": 5, "max": 169, "n": 32, - "samples": [5, 5, 5, 6, 169, 9, 17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5] + "samples": [5, 6, 169, 9, 17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -944,9 +944,9 @@ "min": 5, "max": 728, "n": 32, - "samples": [5, 5, 5, 6, 728, 26, 15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6] + "samples": [5, 6, 728, 26, 15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLive_pipeline.json b/test/scenarios/light/scenario_MoonLive_pipeline.json index f10a32d3..7fd78234 100644 --- a/test/scenarios/light/scenario_MoonLive_pipeline.json +++ b/test/scenarios/light/scenario_MoonLive_pipeline.json @@ -379,9 +379,9 @@ "min": 5, "max": 267, "n": 32, - "samples": [5, 5, 5, 5, 5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5] + "samples": [5, 5, 5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -536,9 +536,9 @@ "min": 4, "max": 559, "n": 32, - "samples": [4, 5, 5, 5, 5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5] + "samples": [5, 5, 5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -687,9 +687,9 @@ "min": 5, "max": 520, "n": 32, - "samples": [5, 5, 5, 5, 5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5] + "samples": [5, 5, 5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -989,9 +989,9 @@ "min": 5, "max": 117, "n": 32, - "samples": [5, 5, 5, 5, 5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5] + "samples": [5, 5, 5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1131,9 +1131,9 @@ "min": 5, "max": 397, "n": 32, - "samples": [5, 5, 5, 5, 5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5] + "samples": [5, 5, 5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json index 8f9afbc0..091abadd 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json +++ b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json @@ -89,14 +89,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 6, + "p50": 5, "p95": 165, "min": 2, "max": 241, "n": 32, - "samples": [3, 6, 3, 3, 3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3] + "samples": [3, 3, 3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json index 0c6ab070..035eb3c0 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json +++ b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json @@ -94,9 +94,9 @@ "min": 117, "max": 302, "n": 32, - "samples": [127, 124, 133, 125, 133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117] + "samples": [133, 125, 133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Trails_ladder.json b/test/scenarios/light/scenario_Trails_ladder.json index 509ae3af..756afc00 100644 --- a/test/scenarios/light/scenario_Trails_ladder.json +++ b/test/scenarios/light/scenario_Trails_ladder.json @@ -90,10 +90,10 @@ "p95": 11, "min": 10, "max": 11, - "n": 3, - "samples": [11, 10, 10] + "n": 5, + "samples": [11, 10, 10, 10, 11] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -127,10 +127,10 @@ "p95": 57, "min": 40, "max": 57, - "n": 3, - "samples": [57, 40, 42] + "n": 5, + "samples": [57, 40, 42, 41, 45] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -164,10 +164,10 @@ "p95": 208, "min": 160, "max": 208, - "n": 3, - "samples": [208, 160, 166] + "n": 5, + "samples": [208, 160, 166, 165, 182] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -204,14 +204,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 323, - "p95": 331, + "p50": 324, + "p95": 358, "min": 313, - "max": 331, - "n": 3, - "samples": [323, 313, 331] + "max": 358, + "n": 5, + "samples": [323, 313, 331, 324, 358] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -234,14 +234,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 321, - "p95": 334, + "p50": 332, + "p95": 442, "min": 312, - "max": 334, - "n": 3, - "samples": [321, 312, 334] + "max": 442, + "n": 5, + "samples": [321, 312, 334, 332, 442] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -264,14 +264,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 319, - "p95": 336, + "p50": 336, + "p95": 359, "min": 312, - "max": 336, - "n": 3, - "samples": [319, 312, 336] + "max": 359, + "n": 5, + "samples": [319, 312, 336, 350, 359] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } }, @@ -309,13 +309,13 @@ "desktop-macos": { "tick_us": { "p50": 169, - "p95": 169, + "p95": 183, "min": 164, - "max": 169, - "n": 3, - "samples": [164, 169, 169] + "max": 183, + "n": 5, + "samples": [164, 169, 169, 166, 183] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" } } } diff --git a/test/scenarios/light/scenario_modifier_chain.json b/test/scenarios/light/scenario_modifier_chain.json index 65010574..2cd97f49 100644 --- a/test/scenarios/light/scenario_modifier_chain.json +++ b/test/scenarios/light/scenario_modifier_chain.json @@ -102,13 +102,13 @@ "desktop-macos": { "tick_us": { "p50": 17, - "p95": 205, + "p95": 86, "min": 8, - "max": 270, + "max": 163, "n": 32, - "samples": [270, 205, 35, 32, 8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8] + "samples": [35, 32, 8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -161,14 +161,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 15, - "p95": 86, + "p50": 14, + "p95": 49, "min": 6, - "max": 457, + "max": 86, "n": 32, - "samples": [457, 81, 17, 24, 7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7] + "samples": [17, 24, 7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -219,14 +219,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 48, - "p95": 325, - "min": 22, - "max": 466, + "p50": 46, + "p95": 94, + "min": 21, + "max": 143, "n": 32, - "samples": [466, 325, 55, 72, 24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22] + "samples": [55, 72, 24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -252,14 +252,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 78, - "p95": 473, - "min": 43, - "max": 2547, + "p50": 77, + "p95": 138, + "min": 41, + "max": 473, "n": 32, - "samples": [2547, 173, 108, 125, 45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44] + "samples": [108, 125, 45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_modifier_swap.json b/test/scenarios/light/scenario_modifier_swap.json index 7f90acff..a1576adf 100644 --- a/test/scenarios/light/scenario_modifier_swap.json +++ b/test/scenarios/light/scenario_modifier_swap.json @@ -151,14 +151,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 22, - "p95": 359, + "p50": 17, + "p95": 148, "min": 8, - "max": 1133, + "max": 246, "n": 32, - "samples": [359, 1133, 28, 148, 8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8] + "samples": [28, 148, 8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth": { "tick_us": { @@ -295,14 +295,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 46, - "p95": 456, + "p50": 43, + "p95": 206, "min": 20, - "max": 1237, + "max": 321, "n": 32, - "samples": [456, 1237, 73, 206, 22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20] + "samples": [73, 206, 22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth": { "tick_us": { @@ -439,14 +439,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 24, - "p95": 421, - "min": 9, + "p50": 16, + "p95": 76, + "min": 8, "max": 513, "n": 32, - "samples": [421, 79, 37, 62, 9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10] + "samples": [37, 62, 9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32-eth": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_full.json b/test/scenarios/light/scenario_perf_full.json index fcfb21c8..0fb3d766 100644 --- a/test/scenarios/light/scenario_perf_full.json +++ b/test/scenarios/light/scenario_perf_full.json @@ -86,13 +86,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 15, + "p95": 11, "min": 1, "max": 22, "n": 32, - "samples": [15, 7, 5, 7, 2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -206,13 +206,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 48, + "p95": 15, "min": 1, "max": 51, "n": 32, - "samples": [48, 8, 5, 7, 2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -326,13 +326,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 24, + "p95": 12, "min": 1, "max": 28, "n": 32, - "samples": [24, 7, 5, 7, 2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -569,13 +569,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 12, + "p95": 9, "min": 1, "max": 31, "n": 32, - "samples": [12, 9, 6, 6, 2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1] + "samples": [6, 6, 2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -691,9 +691,9 @@ "min": 1, "max": 70, "n": 32, - "samples": [8, 7, 7, 8, 2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1] + "samples": [7, 8, 2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -820,9 +820,9 @@ "min": 1, "max": 13, "n": 32, - "samples": [9, 7, 5, 7, 2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -949,13 +949,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 19, + "p95": 9, "min": 1, - "max": 27, + "max": 11, "n": 32, - "samples": [19, 27, 5, 9, 2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 9, 2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1056,13 +1056,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 21, + "p95": 13, "min": 1, - "max": 23, + "max": 21, "n": 32, - "samples": [23, 20, 5, 7, 2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -1169,13 +1169,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 12, + "p95": 11, "min": 1, "max": 26, "n": 32, - "samples": [12, 7, 5, 7, 2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1297,9 +1297,9 @@ "min": 4, "max": 167, "n": 32, - "samples": [80, 72, 21, 27, 10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4] + "samples": [21, 27, 10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1416,14 +1416,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 87, - "p95": 270, + "p50": 82, + "p95": 255, "min": 17, "max": 346, "n": 32, - "samples": [234, 270, 99, 141, 43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17] + "samples": [99, 141, 43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1540,14 +1540,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 368, + "p50": 349, "p95": 1023, "min": 70, "max": 2016, "n": 32, - "samples": [948, 764, 440, 562, 186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70] + "samples": [440, 562, 186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1673,13 +1673,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 28, + "p95": 18, "min": 4, - "max": 50, + "max": 28, "n": 32, - "samples": [50, 19, 9, 14, 4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] + "samples": [9, 14, 4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1797,13 +1797,13 @@ "desktop-macos": { "tick_us": { "p50": 35, - "p95": 98, + "p95": 87, "min": 15, "max": 108, "n": 32, - "samples": [98, 64, 42, 55, 18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15] + "samples": [42, 55, 18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -1920,14 +1920,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 144, + "p50": 140, "p95": 398, "min": 61, "max": 662, "n": 32, - "samples": [363, 308, 218, 235, 73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61] + "samples": [218, 235, 73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -2044,14 +2044,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 562, - "p95": 2027, + "p50": 558, + "p95": 2011, "min": 247, "max": 12932, "n": 32, - "samples": [1898, 2027, 1059, 930, 293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247] + "samples": [1059, 930, 293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -2204,13 +2204,13 @@ "desktop-macos": { "tick_us": { "p50": 2, - "p95": 9, + "p95": 8, "min": 1, "max": 13, "n": 32, - "samples": [9, 3, 3, 3, 1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1] + "samples": [3, 3, 1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32": { "tick_us": { @@ -2328,13 +2328,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 23, + "p95": 20, "min": 4, - "max": 25, + "max": 23, "n": 32, - "samples": [25, 13, 10, 13, 4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4] + "samples": [10, 13, 4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32": { "tick_us": { @@ -2452,13 +2452,13 @@ "desktop-macos": { "tick_us": { "p50": 35, - "p95": 113, + "p95": 74, "min": 15, - "max": 166, + "max": 113, "n": 32, - "samples": [166, 64, 35, 65, 18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15] + "samples": [35, 65, 18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32": { "tick_us": { @@ -2575,14 +2575,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 151, - "p95": 574, + "p50": 141, + "p95": 570, "min": 62, - "max": 731, + "max": 574, "n": 32, - "samples": [731, 461, 157, 249, 72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62] + "samples": [157, 249, 72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_light.json b/test/scenarios/light/scenario_perf_light.json index fa3f701c..64267e29 100644 --- a/test/scenarios/light/scenario_perf_light.json +++ b/test/scenarios/light/scenario_perf_light.json @@ -102,13 +102,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 12, + "p95": 10, "min": 1, - "max": 23, + "max": 10, "n": 32, - "samples": [23, 12, 5, 7, 2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -452,11 +452,11 @@ "p50": 2, "p95": 4, "min": 1, - "max": 20, + "max": 4, "n": 32, - "samples": [20, 3, 3, 3, 1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1] + "samples": [3, 3, 1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -578,9 +578,9 @@ "min": 4, "max": 49, "n": 32, - "samples": [17, 12, 13, 24, 4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4] + "samples": [13, 24, 4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -698,13 +698,13 @@ "desktop-macos": { "tick_us": { "p50": 35, - "p95": 134, + "p95": 76, "min": 15, - "max": 255, + "max": 78, "n": 32, - "samples": [134, 255, 47, 60, 18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15] + "samples": [47, 60, 18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_grid_sweep.json b/test/scenarios/light/scenario_peripheral_grid_sweep.json index f4cdd466..1c1b150b 100644 --- a/test/scenarios/light/scenario_peripheral_grid_sweep.json +++ b/test/scenarios/light/scenario_peripheral_grid_sweep.json @@ -174,13 +174,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 33, + "p95": 20, "min": 4, - "max": 35, + "max": 33, "n": 32, - "samples": [35, 20, 9, 33, 4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4] + "samples": [9, 33, 4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -300,14 +300,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 36, - "p95": 160, + "p50": 35, + "p95": 88, "min": 15, - "max": 169, + "max": 160, "n": 32, - "samples": [169, 74, 48, 160, 18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15] + "samples": [48, 160, 18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -427,14 +427,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 147, - "p95": 309, + "p50": 144, + "p95": 287, "min": 62, - "max": 761, + "max": 298, "n": 32, - "samples": [761, 309, 172, 287, 74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62] + "samples": [172, 287, 74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -554,14 +554,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 581, - "p95": 1947, + "p50": 580, + "p95": 1401, "min": 247, "max": 2629, "n": 32, - "samples": [1466, 1947, 595, 2629, 299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250] + "samples": [595, 2629, 299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -702,14 +702,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 10, + "p50": 9, "p95": 35, "min": 4, "max": 36, "n": 32, - "samples": [26, 28, 9, 14, 4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4] + "samples": [9, 14, 4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -829,14 +829,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 36, + "p50": 35, "p95": 121, "min": 15, "max": 137, "n": 32, - "samples": [101, 103, 35, 137, 18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16] + "samples": [35, 137, 18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -956,14 +956,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 142, - "p95": 424, + "p50": 139, + "p95": 315, "min": 61, - "max": 534, + "max": 331, "n": 32, - "samples": [534, 424, 139, 272, 74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65] + "samples": [139, 272, 74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1083,14 +1083,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 571, - "p95": 1666, + "p50": 560, + "p95": 1281, "min": 249, - "max": 2008, + "max": 1396, "n": 32, - "samples": [1666, 2008, 592, 1042, 305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310] + "samples": [592, 1042, 305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1232,13 +1232,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 53, + "p95": 18, "min": 4, - "max": 98, + "max": 53, "n": 32, - "samples": [98, 24, 9, 17, 4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4] + "samples": [9, 17, 4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1359,13 +1359,13 @@ "desktop-macos": { "tick_us": { "p50": 35, - "p95": 138, + "p95": 74, "min": 15, - "max": 257, + "max": 138, "n": 32, - "samples": [257, 81, 35, 51, 19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15] + "samples": [35, 51, 19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1485,14 +1485,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 141, - "p95": 431, + "p50": 140, + "p95": 275, "min": 62, - "max": 1064, + "max": 294, "n": 32, - "samples": [1064, 431, 152, 225, 96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62] + "samples": [152, 225, 96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1612,14 +1612,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 564, - "p95": 1708, + "p50": 558, + "p95": 1188, "min": 247, - "max": 2746, + "max": 1378, "n": 32, - "samples": [2746, 1708, 569, 1378, 305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251] + "samples": [569, 1378, 305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1761,13 +1761,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 32, + "p95": 20, "min": 4, - "max": 55, + "max": 32, "n": 32, - "samples": [18, 55, 11, 32, 4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4] + "samples": [11, 32, 4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -1887,14 +1887,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 36, - "p95": 158, + "p50": 35, + "p95": 73, "min": 15, - "max": 187, + "max": 144, "n": 32, - "samples": [158, 187, 37, 73, 19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15] + "samples": [37, 73, 19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -2014,14 +2014,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 144, - "p95": 634, + "p50": 140, + "p95": 447, "min": 61, - "max": 1010, + "max": 634, "n": 32, - "samples": [1010, 438, 177, 634, 74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61] + "samples": [177, 634, 74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { @@ -2141,14 +2141,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 586, - "p95": 2098, + "p50": 568, + "p95": 1685, "min": 246, - "max": 3242, + "max": 2098, "n": 32, - "samples": [1791, 3242, 1519, 2098, 305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246] + "samples": [1519, 2098, 305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_switch.json b/test/scenarios/light/scenario_peripheral_switch.json index dbbeb55c..9ddaeb38 100644 --- a/test/scenarios/light/scenario_peripheral_switch.json +++ b/test/scenarios/light/scenario_peripheral_switch.json @@ -173,13 +173,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 38, + "p95": 21, "min": 4, - "max": 45, + "max": 38, "n": 32, - "samples": [45, 19, 38, 21, 5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4] + "samples": [38, 21, 5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -294,13 +294,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 40, + "p95": 39, "min": 4, "max": 58, "n": 32, - "samples": [29, 40, 39, 58, 5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4] + "samples": [39, 58, 5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -419,9 +419,9 @@ "min": 4, "max": 160, "n": 32, - "samples": [26, 15, 69, 160, 5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] + "samples": [69, 160, 5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -535,13 +535,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 72, + "p95": 20, "min": 4, "max": 358, "n": 32, - "samples": [24, 72, 20, 358, 5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4] + "samples": [20, 358, 5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -656,13 +656,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 42, + "p95": 26, "min": 4, "max": 65, "n": 32, - "samples": [42, 24, 16, 26, 6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4] + "samples": [16, 26, 6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { @@ -793,13 +793,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 29, + "p95": 24, "min": 4, - "max": 66, + "max": 29, "n": 32, - "samples": [66, 14, 29, 12, 6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4] + "samples": [29, 12, 6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-04" + "last_updated": "2026-09-05" }, "esp32p4rev1-eth": { "tick_us": { diff --git a/test/unit/core/unit_noise.cpp b/test/unit/core/unit_noise.cpp index 5b2ae823..62a9d127 100644 --- a/test/unit/core/unit_noise.cpp +++ b/test/unit/core/unit_noise.cpp @@ -3,6 +3,8 @@ #include "doctest.h" #include "core/noise.h" +#include // std::abs on doubles: GCC does not get it transitively + #include using namespace mm; diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index 965a15fa..43aef2a2 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -8,7 +8,13 @@ // AudioSpectrum) are deliberately ABSENT: their output depends on whatever the audio service holds, // so a hash over their frames would pin the test rig's audio state rather than the effect. Their // migrations rely on their behaviour tests plus the Canvas equivalence test in unit_Canvas. -// @also SineEffect, PlasmaEffect, NoiseEffect, DistortionWavesEffect, LavaLampEffect, MetaballsEffect, SpiralEffect, RingsEffect, WaveEffect, RainbowEffect +// @also AuroraEffect, BallpitEffect, BouncingBallsEffect, DissolveEffect, DistortionWavesEffect, EchoEffect, +// @also FireEffect, FireworksEffect, FishTankEffect, FixedRectangleEffect, FluidEffect, +// @also FlyingToastersEffect, GameOfLifeEffect, LavaLampEffect, LissajousEffect, MetaballsEffect, +// @also NebulaEffect, NoiseEffect, PacmanEffect, PlasmaEffect, PolarNoiseEffect, PraxisEffect, +// @also RainbowEffect, RingsEffect, RubiksCubeEffect, SdfShapesEffect, SineEffect, SolidEffect, +// @also SphereMoveEffect, SpiralEffect, StarFieldEffect, StarSkyEffect, TetrixEffect, TextEffect, +// @also TrailsEffect, TruchetEffect, TunnelEffect, WaterRippleEffect, WaveEffect // Pins the EXACT rendered output of the time-driven effects, so the power-function migration's // "renders exactly the same" claim is proved rather than asserted. @@ -65,6 +71,8 @@ #include "light/effects/SdfShapesEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/WaterRippleEffect.h" +#include "light/effects/FluidEffect.h" +#include "light/effects/NebulaEffect.h" #include "light/effects/TrailsEffect.h" #include "light/effects/TunnelEffect.h" #include "light/effects/EchoEffect.h" @@ -100,6 +108,13 @@ using namespace mm; // sum of squares while the normalizer divides by the sum of amplitudes, and 4 octaves had shrunk to // 54..199 of 0..255. Every fbm field is now higher contrast, which is a visible improvement rather // than a neutral change; unit_noise pins the range at every octave count. +// Trails moved on 2026-09-04, for two deliberate fixes. Its first tick now measures a ZERO delta +// rather than the whole uptime, which had teleported the flow and decayed the trail away on the +// frame it started. And its emitters are paced by TIME rather than firing every frame: writing a +// head per frame injects light at the framerate (measured 1.37 at 1200 fps against 60, which the +// framerate audit caught). Scaling the head's brightness by dt was tried first and is wrong here, +// because writeWide SETS the pixel rather than accumulating, so twenty dim writes do not add up to +// one bright one and the fast device came out twice as dark instead. // Tunnel moved on 2026-09-04 for the same reason as PolarNoise below, and Spiral moved with them // (it has no golden). All three are pinned instead by unit_PolarLut_equivalence, which renders each // through the table and through the computed address and requires the 16-bit table to be identical. @@ -112,7 +127,9 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("two SDF shapes orbit and melt together, with a soft edge") { SdfShapesEffect e; golden::checkGolden("SdfShapesEffect", golden::renderHash(e, 16, 16, 1), 0xbcfb74b4836606a3ull); } SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x8d48e0d1e0180610ull); } SUBCASE("heat rises, cools and colors through the palette") { FireEffect e; golden::checkGolden("FireEffect", golden::renderHash(e, 16, 16, 1), 0x1cadbabb59bc489bull); } - SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x890d030651bf7d7cull); } + SUBCASE("dye poured into a simulated medium, carried by the flow it works out") { FluidEffect e; golden::checkGolden("FluidEffect", golden::renderHash(e, 16, 16, 1), 0xdef67ab1f131e137ull); } + SUBCASE("a field births light and a curl flow carries it into a cloud") { NebulaEffect e; golden::checkGolden("NebulaEffect", golden::renderHash(e, 16, 16, 1), 0xc42116cc9f9cc33full); } + SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x30489b453830f597ull); } SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } diff --git a/test/unit/light/unit_draw.cpp b/test/unit/light/unit_draw.cpp index 0f3e0a4f..1ebe20f0 100644 --- a/test/unit/light/unit_draw.cpp +++ b/test/unit/light/unit_draw.cpp @@ -4,6 +4,7 @@ #include "light/draw.h" #include +#include // the upscale tests' planes: GCC needs it named using namespace mm; @@ -496,3 +497,146 @@ TEST_CASE("a spiral is a radial flow with a turn added, so it both circles and e CHECK(sx == rx); // the outward part is the same CHECK(sy != ry); // and the angular part is what it adds } + +// draw::quantize is the 16-to-8 boundary every wide pipeline ends at. What the modes buy is not +// more levels, it is where the discarded half of the value goes. + +TEST_CASE("truncating a slow gradient bands it, and dithering restores its true mean") { + // A dark, slow ramp is the worst case: 64 distinct 16-bit values that truncation flattens to a + // handful of steps. Neither mode can add levels to a single frame; what ordered dithering fixes + // is the MEAN, so the band sits where the real value is rather than below it. + double trueSum = 0, truncSum = 0, ditherSum = 0; + uint8_t carry = 0; + for (int i = 0; i < 64; i++) { + const uint16_t v = static_cast(65535 * 0.10 + (65535 * 0.02) * i / 64); + trueSum += v / 257.0; + truncSum += draw::quantize(v, draw::Dither::None, carry); + ditherSum += draw::quantize(v, draw::Dither::Ordered, carry, i % 8, i / 8); + } + const double trueMean = trueSum / 64, truncMean = truncSum / 64, ditherMean = ditherSum / 64; + CHECK(std::abs(ditherMean - trueMean) < std::abs(truncMean - trueMean)); // closer to the truth + CHECK(std::abs(ditherMean - trueMean) < 0.5); +} + +TEST_CASE("temporal dithering resolves neighbors that a single frame cannot") { + // The property that makes a 16-bit pipeline worth having on 8-bit LEDs: eight values a fraction + // of a byte apart all truncate to the same one or two levels, but averaged over frames they + // separate, and the eye does that averaging. This is what turns a stepped fade into a smooth + // one. + constexpr int kLights = 8, kFrames = 32; + uint16_t v[kLights]; + uint8_t carry[kLights] = {}; + long sum[kLights] = {}; + for (int i = 0; i < kLights; i++) v[i] = static_cast(65535 * 0.10 + 40 * i); + + for (int f = 0; f < kFrames; f++) + for (int i = 0; i < kLights; i++) sum[i] += draw::quantize(v[i], draw::Dither::Temporal, carry[i]); + + // Every neighbor's average is distinct and ordered, which truncation cannot manage. + for (int i = 1; i < kLights; i++) { + const double lo = double(sum[i - 1]) / kFrames, hi = double(sum[i]) / kFrames; + CHECK(hi > lo); + } + // And each tracks its own true value, not merely its neighbor's order. + for (int i = 0; i < kLights; i++) + CHECK(std::abs(double(sum[i]) / kFrames - v[i] / 257.0) < 0.6); +} + +TEST_CASE("a dithered value never wraps past full, so a bright light cannot flash black") { + uint8_t carry = 0; + for (int f = 0; f < 100; f++) { + CHECK(draw::quantize(65535, draw::Dither::Temporal, carry) == 255); + CHECK(draw::quantize(65535, draw::Dither::Ordered, carry, f % 4, f % 4) == 255); + } + // Black stays black under every mode: a carry must not light an unlit pixel. + uint8_t c2 = 0; + for (int f = 0; f < 100; f++) CHECK(draw::quantize(0, draw::Dither::Temporal, c2) == 0); +} + +TEST_CASE("the ordered pattern differs per z, so a volume does not repeat one texture") { + // On a cube every slice would otherwise share a threshold, and the dither would read as a + // pattern stamped through the volume rather than as noise. + uint8_t carry = 0; + const uint16_t v = 0x2080; // a value squarely between two byte levels + bool differs = false; + for (lengthType z = 1; z < 4; z++) + for (lengthType y = 0; y < 4 && !differs; y++) + for (lengthType x = 0; x < 4 && !differs; x++) + if (draw::quantize(v, draw::Dither::Ordered, carry, x, y, z) + != draw::quantize(v, draw::Dither::Ordered, carry, x, y, 0)) differs = true; + CHECK(differs); +} + +// draw::upscale16 is the fieldScale lever: compute a smooth field at a fraction of the fixture's +// resolution and interpolate the rest, which is nearly free visually because a field is smooth. + +TEST_CASE("an upscaled plane keeps a uniform value, so a flat field does not gain texture") { + std::vector src(4 * 4 * 3, 30000), dst(16 * 16 * 3, 0); + std::vector taps(16); + draw::upscale16(dst.data(), 16, 16, 1, src.data(), 4, 4, 1, taps.data(), taps.size()); + for (uint16_t v : dst) CHECK(v == 30000); +} + +TEST_CASE("an upscaled ramp stays monotonic, so a gradient does not gain steps or reversals") { + // 8 wide, ramping left to right; stretched to 32. Every step must be non-decreasing, which is + // what a bilinear stretch guarantees and a nearest-neighbor one would not. + std::vector src(8 * 3), dst(32 * 3, 0); + for (int x = 0; x < 8; x++) + for (int c = 0; c < 3; c++) src[x * 3 + c] = static_cast(x * 8000); + std::vector taps(32); + draw::upscale16(dst.data(), 32, 1, 1, src.data(), 8, 1, 1, taps.data(), taps.size()); + for (int x = 1; x < 32; x++) CHECK(dst[x * 3] >= dst[(x - 1) * 3]); + CHECK(dst[0] == 0); // the ends reach the source's ends + CHECK(dst[31 * 3] == 7 * 8000); +} + +TEST_CASE("a flat field stretches across a volume's depth without z work") { + // A 2D field on a 3D fixture: every slice gets the same picture, which is what a depth-1 source + // means, and it costs no interpolation along z. + std::vector src(4 * 4 * 3), dst(8 * 8 * 4 * 3, 0); + for (size_t i = 0; i < src.size(); i++) src[i] = static_cast(i * 700); + std::vector taps(8); + draw::upscale16(dst.data(), 8, 8, 4, src.data(), 4, 4, 1, taps.data(), taps.size()); + const size_t slice = 8 * 8 * 3; + for (size_t z = 1; z < 4; z++) + for (size_t i = 0; i < slice; i++) REQUIRE(dst[i] == dst[z * slice + i]); +} + +TEST_CASE("a volumetric field interpolates along z as well, so a coarse cube fills a fine one") { + // Two source slices, black and white. The destination's middle slices must land between them + // rather than snapping to one. + std::vector src(2 * 2 * 2 * 3), dst(4 * 4 * 8 * 3, 0); + for (int z = 0; z < 2; z++) + for (int i = 0; i < 2 * 2 * 3; i++) src[z * 12 + i] = z ? 60000 : 0; + std::vector taps(4); + draw::upscale16(dst.data(), 4, 4, 8, src.data(), 2, 2, 2, taps.data(), taps.size()); + const size_t slice = 4 * 4 * 3; + CHECK(dst[0] == 0); // the near face is still black + CHECK(dst[7 * slice] == 60000); // the far face still white + CHECK(dst[3 * slice] > 5000); // and the middle is genuinely between + CHECK(dst[3 * slice] < 55000); +} + +TEST_CASE("an upscaled saddle stays inside the values it was given, so a field that dips does not light up") { + // The fixtures above are uniform or monotone, so every interpolation ascends. A noise field is a + // saddle almost everywhere: along one diagonal it rises, along the other it falls. A descending + // pair is where an unsigned difference wraps, and blending a wrapped row against an unwrapped one + // lands far outside the input range (this fixture produced 98354 for inputs of 0 and 100). + std::vector src(2 * 2 * 3, 0), dst(8 * 8 * 3, 0); + for (int c = 0; c < 3; c++) { + src[(0 * 2 + 0) * 3 + c] = 100; // high, low + src[(1 * 2 + 1) * 3 + c] = 100; // low, high + } + std::vector taps(8); + draw::upscale16(dst.data(), 8, 8, 1, src.data(), 2, 2, 1, taps.data(), taps.size()); + for (uint16_t v : dst) CHECK(v <= 100); +} + +TEST_CASE("upscale16 declines rather than writing when the caller's tap table is too small") { + // The table is the caller's because tick() can neither allocate nor spare a large frame. A short + // one is a programming error, and the safe answer is to do nothing rather than run off its end. + std::vector src(4 * 4 * 3, 30000), dst(16 * 16 * 3, 7); + std::vector taps(4); // 16 columns need 16 + draw::upscale16(dst.data(), 16, 16, 1, src.data(), 4, 4, 1, taps.data(), taps.size()); + for (uint16_t v : dst) CHECK(v == 7); // untouched +} diff --git a/test/unit/light/unit_fluid.cpp b/test/unit/light/unit_fluid.cpp new file mode 100644 index 00000000..1eed291d --- /dev/null +++ b/test/unit/light/unit_fluid.cpp @@ -0,0 +1,196 @@ +// @module Fluid +// @also draw, FluidEffect + +// The stable-fluid solver. What matters is not that it computes something, but the three +// properties that separate a fluid from a field of arrows: it stays divergence-free (so what it +// carries neither piles up nor drains away), a push actually moves the medium downstream, and a +// field at rest STAYS at rest rather than drifting on its own rounding. + +#include "doctest.h" +#include "light/fluid.h" +#include "core/MoonModule.h" +#include "golden_frame.h" // the effect harness: Layouts, Grid, Layer +#include "light/effects/FluidEffect.h" + +#include +#include + +using namespace mm; + +namespace { +/// A bare owner: ScratchBuffer needs a module to register with, and the solver needs nothing else. +struct Owner : MoonModule { + const char* name() const { return "fluidTest"; } +}; + +/// The worst absolute divergence over the interior. Zero is a perfect flow; the solver relaxes +/// toward it rather than reaching it exactly, which is what the tolerance below is about. +int64_t worstDivergence(const Fluid& f) { + const int32_t* vx = f.velocityX(); + const int32_t* vy = f.velocityY(); + const lengthType w = f.width(), h = f.height(); + int64_t worst = 0; + for (lengthType y = 1; y < h - 1; y++) + for (lengthType x = 1; x < w - 1; x++) { + const size_t i = static_cast(y) * w + x; + const int64_t d = static_cast(vx[i + 1]) - vx[i - 1] + + vy[i + w] - vy[i - w]; + const int64_t a = d < 0 ? -d : d; + if (a > worst) worst = a; + } + return worst; +} +} // namespace + +TEST_CASE("each step drives the flow further toward divergence-free") { + // The property `project` exists for, stated as the method actually promises it. A single pass + // cannot cancel a point impulse: the discrete pressure gradient is spread over neighboring + // cells while the push is concentrated in one, so a float reference with the same scaling also + // leaves about 60% of it after one pass. What must hold is that the solver CONVERGES, and that + // is what this pins: the divergence falls with every step and ends far below where it began. + Owner owner; + Fluid fluid(owner); + REQUIRE(fluid.resize(24, 24)); + + for (int i = 0; i < 8; i++) fluid.addVelocity(12, 12, 3 * Fluid::kOne, Fluid::kOne); + const int64_t pushed = worstDivergence(fluid); + REQUIRE(pushed > 0); + + int64_t previous = pushed; + for (int f = 0; f < 8; f++) { + fluid.step(0, Fluid::kOne / 60, 5); + const int64_t now = worstDivergence(fluid); + // Never materially worse. Once it has settled the last bits wobble by a thousand or so, + // which is integer rounding in the relaxation rather than divergence, so the bound is + // generous in absolute terms and still catches a solver that is actually growing: a + // diverging one doubles rather than drifting. + CHECK(now <= previous + previous / 4 + 2000); + previous = now; + } + // And it settles to where only the PRESSURE SOLVE can take it. This bound is what makes the + // test about `project` rather than about advection: measured over these 8 steps, the worst + // divergence falls from 1572864 to about 13000 with the solve and stalls near 253000 without + // it, so a bound of a hundredth passes only when the projection is actually running. + CHECK(previous < pushed / 100); +} + +TEST_CASE("more solver iterations leave less divergence, so the cost knob buys correctness") { + // `iterations` is the honest cost control: it is a relaxation, so more passes converge further. + // If this did not hold, the knob would be paying for nothing. + Owner owner; + Fluid coarse(owner), fine(owner); + REQUIRE(coarse.resize(24, 24)); + REQUIRE(fine.resize(24, 24)); + for (int i = 0; i < 8; i++) { + coarse.addVelocity(12, 12, 3 * Fluid::kOne, Fluid::kOne); + fine.addVelocity(12, 12, 3 * Fluid::kOne, Fluid::kOne); + } + coarse.step(0, Fluid::kOne / 60, 1); + fine.step(0, Fluid::kOne / 60, 20); + CHECK(worstDivergence(fine) <= worstDivergence(coarse)); +} + +TEST_CASE("a jet carries the medium downstream, so a push is felt where it points") { + // A fluid must TRANSPORT. Push right at one place and the velocity a few cells to the right + // must pick it up: without advection the push would stay where it was made. + Owner owner; + Fluid fluid(owner); + REQUIRE(fluid.resize(32, 16)); + const lengthType jetX = 6, jetY = 8; + for (int f = 0; f < 30; f++) { + for (int i = 0; i < 4; i++) fluid.addVelocity(jetX, jetY, 4 * Fluid::kOne, 0); + fluid.step(0, Fluid::kOne / 60, 5); + } + const int32_t* vx = fluid.velocityX(); + const size_t downstream = static_cast(jetY) * 32 + (jetX + 5); + CHECK(vx[downstream] > 0); // the medium is moving right, well past the jet itself +} + +TEST_CASE("a fluid at rest stays at rest, so an idle fixture does not drift") { + // Nothing pushed, so nothing may move. A solver that leaks energy from its own rounding would + // show a fixture creeping while the user is doing nothing at all. + Owner owner; + Fluid fluid(owner); + REQUIRE(fluid.resize(16, 16)); + for (int f = 0; f < 60; f++) fluid.step(Fluid::kOne / 100, Fluid::kOne / 60, 5); + const int32_t* vx = fluid.velocityX(); + const int32_t* vy = fluid.velocityY(); + for (size_t i = 0; i < 16 * 16; i++) { + CHECK(vx[i] == 0); + CHECK(vy[i] == 0); + } +} + +TEST_CASE("a long stall leaves a plausible field rather than infinities") { + // The reason this solver and not an explicit one: it is unconditionally stable, so a frame that + // took a whole second resumes with a field a viewer would accept instead of a broken fixture. + Owner owner; + Fluid fluid(owner); + REQUIRE(fluid.resize(16, 16)); + for (int i = 0; i < 16; i++) fluid.addVelocity(8, 8, 6 * Fluid::kOne, 6 * Fluid::kOne); + fluid.step(0, Fluid::kOne, 5); // dt of a FULL SECOND + + const int32_t* vx = fluid.velocityX(); + for (size_t i = 0; i < 16 * 16; i++) { + CHECK(std::abs(vx[i]) < 100 * Fluid::kOne); // bounded, not exploded + } +} + +TEST_CASE("a grid too small to have an interior is refused rather than half-built") { + Owner owner; + Fluid fluid(owner); + CHECK_FALSE(fluid.resize(2, 2)); // no interior cell at all + CHECK_FALSE(fluid.valid()); + CHECK(fluid.resize(8, 8)); + CHECK(fluid.valid()); + fluid.release(); + CHECK_FALSE(fluid.valid()); +} + +// The release path. MoonModule::release() frees every ScratchBuffer a module registered, and it runs +// whenever the module or an ancestor is disabled. The re-enable only REQUESTS a prepare for the next +// scheduler loop, and Layer::tick runs every child whose enabled flag is set, so one frame can tick +// between the release and the prepare that rebuilds the grids. That frame crashed the desktop with a +// null dye plane (2026-09-05). The solver and the effect both read readiness from their buffers now. + +TEST_CASE("a fluid whose grids were released reports itself not ready, and resizing to the same shape rebuilds them") { + Owner o; Fluid f(o); + REQUIRE(f.resize(16, 16)); + REQUIRE(f.valid()); + o.release(); // what a disabled ancestor does to every buffer + CHECK_FALSE(f.valid()); + CHECK(f.velocityX() == nullptr); + f.step(0, Fluid::kOne / 50, 5); // must be a no-op rather than a write through null + f.addVelocity(8, 8, Fluid::kOne, 0); + // prepare() runs again with the SAME grid: the shape alone must not pass as "already built". + REQUIRE(f.resize(16, 16)); + CHECK(f.valid()); + CHECK(f.velocityX() != nullptr); +} + +TEST_CASE("Fluid ticks dark rather than crashing on the frame between a release and its prepare, then renders again") { + golden::ScopedTestClock clock(1000); + Layouts layouts; GridLayout grid; Layer layer; FluidEffect effect; + grid.width = 32; grid.height = 32; grid.depth = 1; + layouts.addChild(&grid); + layer.setLayouts(&layouts); + layer.setChannelsPerLight(3); + layer.addChild(&effect); + layer.applyState(); + for (uint16_t i = 0; i < 20; i++) { platform::setTestNowMs(1000 + i * 20u); layer.tick(); } + + effect.release(); // the disable, with the enabled flag still set + platform::setTestNowMs(1500); + layer.tick(); // the frame before the requested prepare: no crash + + layer.applyState(); // the prepare the scheduler services next loop + bool lit = false; + for (uint16_t i = 0; i < 40 && !lit; i++) { + platform::setTestNowMs(1600 + i * 20u); + layer.tick(); + const auto& buf = layer.buffer(); + for (size_t b = 0; b < buf.bytes(); b++) if (buf.data()[b]) { lit = true; break; } + } + CHECK(lit); +} + From 1f431beab34eea60f68ac25ea9c6d03bf6f9414c Mon Sep 17 00:00:00 2001 From: ewowi Date: Sat, 5 Sep 2026 11:51:34 +0200 Subject: [PATCH 6/7] Teach the field library: a tutorial, and the fixes writing it found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A tutorial that takes a reader from "what is a field" to composing the transport and simulation kernels, and the corrections that writing it surfaced: a scripted trail that mis-timed its first frame after any resize, a leaked dither plane, and four planning documents that described a vocabulary the code never shipped. Desktop 64x64: Fluid 5.5 ms, Nebula 8.3 ms, Trails 3.4 ms. ESP32-S3 image 2,042,967 bytes, 240 bytes SMALLER than before despite the new code, because moving three shared headers into the base bundle removed 14 include lines. Core - MoonLiveEffect: the first-frame dt guard now resets in prepare(). It was set once at construction, so the frame after a disable, a re-enable or a resize still handed the flow and the decay the whole idle interval, which teleports a trail and fades it away. The compiled effects each reset theirs; the binding did not. - MoonLiveEffect: resizeTrail frees all three buffers on every exit path (the carry plane leaked on two of them) and clears both planes on a same-count reshape, the guard Trails, Nebula and Fluid already carry. Light domain - EffectBase bundles core/oscillators.h, core/math16.h and light/polar.h. Four and five effects each included them directly against the standard's "move it into the base header" rule; 14 include lines go, and the S3 image gets smaller. - FluidEffect: a same-count reshape clears both dye planes, so 8x16 to 16x8 no longer smears the old layout for a frame. - TrailsEffect: two comments that described what the code does not do (z-flow between slices, and `dots` as a count rather than a density). Docs - A new tutorial, "Making beautiful effects": fields, noise, octaves, warp, then the ladder from lines through SDFs, particles, fields and transport to simulation. Names the algorithms and their authors, and shows what the power functions and MoonLive buy together: fluid.mle is 44 lines against 276 compiled, because a script composes kernels rather than implementing them. - effects.md: 61 card emoji synced to what tags() actually returns. The cards carried a different vocabulary entirely (the role and dim chips the UI derives), which is why 41 of them disagreed with the code. - MIGRATING + migrate.js: the Noise2D deletion was a breaking change with no entry. Restore now maps Noise2DEffect to NoiseEffect and carries `scale`. - power-functions.md gains the transport family and drops a deleted effect; performance.md notes the two noise effects have merged. - The generative-fields plan gains § 11, the whole 16-bit arc: why the wide Layer was built, the +56% that reversed it, what replaced it, and what is worth salvaging from the stash. Four planning docs corrected where they claimed builtins, controls and a solver shape that never shipped. Scripts/MoonDeck - screenshot_modules.py --all-registered fills the module list from the registered types instead of a hand-kept list that was 42 effects stale and silently skipped everything missing from it. Tests - unit_draw: upscale16 over a saddle (the fixture class that was missing) and a short tap table; advect16 transport, conservation and both edge rules; blit16's dither carry. None of advect16 or blit16 had a test, though four effects render through them. - unit_fluid: the reshape clear, pinned against a control run that fails without it. - scenario_MoonLiveEffect_livescript: three steps that transpose the grid at a constant light count, which is what the scripted reshape clear exists for. Reviews - 👾 the dt guard never reset: fixed, and the comment now says what it does. - 👾 resizeTrail leaked the carry on two exit paths: one release path now. - 👾 the tutorial claimed fluid.mle IS the Stam solver (it is a curl flow with no pressure solve), pointed at a script control that does not exist, and said every power function has a builtin: all three corrected. - 👾 plan memory figures were per-channel read as per-light (5 to 15 B/light, 1.5 to 3.75 MB for a 64-cube). - 👾 "unit_NoiseEffect.cpp dropped from the build": rejected after checking. The tests were absent from a STALE binary; a rebuild shows all seven. Co-Authored-By: Claude Opus 5 (1M context) --- docs/MIGRATING.md | 12 + .../effects-power-function-inventory.md | 9 +- .../generative-fields-analysis-bottom-up.md | 7 + .../generative-fields-analysis-top-down.md | 225 +++++++++------ docs/backlog/moonlive-language-roadmap.md | 31 +- docs/moonmodules/light/MoonLiveEffect.md | 7 +- docs/moonmodules/light/effects.md | 186 +++++++++--- docs/moonmodules/light/power-functions.md | 31 +- docs/performance.md | 6 +- docs/tutorials/generative-effects.md | 273 ++++++++++++++++++ mkdocs.yml | 1 + moondeck/MoonDeck.md | 7 + moondeck/docs/screenshot_modules.py | 21 +- moonlive/effects/nebula.mle | 26 +- src/light/draw.h | 4 +- src/light/effects/AuroraEffect.h | 4 - src/light/effects/EffectBase.h | 5 +- src/light/effects/FluidEffect.h | 23 +- src/light/effects/NebulaEffect.h | 2 - src/light/effects/PolarNoiseEffect.h | 4 - src/light/effects/SpiralEffect.h | 2 - src/light/effects/TrailsEffect.h | 71 +++-- src/light/effects/TunnelEffect.h | 3 - src/light/moonlive/MoonLiveBuiltins_light.h | 9 +- src/light/moonlive/MoonLiveEffect.h | 67 +++-- src/ui/migrate.js | 5 + src/ui/preview3d.js | 1 + test/CMakeLists.txt | 1 - .../scenario_MoonModule_control_change.json | 14 +- .../light/scenario_Audio_mutation.json | 30 +- test/scenarios/light/scenario_Aurora_fps.json | 42 +-- .../light/scenario_Driver_mutation.json | 20 +- .../light/scenario_Effects_composition.json | 4 +- .../light/scenario_Fields_polar_lut.json | 48 +-- .../light/scenario_Fluid_solver.json | 111 +++---- .../light/scenario_GridBlacks_blackpixel.json | 4 +- .../light/scenario_GridLayout_resize.json | 14 +- .../light/scenario_Layer_base_pipeline.json | 2 +- .../light/scenario_Layer_memory_1to1.json | 2 +- .../light/scenario_Layouts_mutation.json | 34 +-- .../scenario_MoonLiveEffect_livescript.json | 134 ++++++--- .../light/scenario_MoonLive_pipeline.json | 10 +- .../scenario_MultiplyModifier_memory_lut.json | 2 +- .../scenario_MultiplyModifier_pipeline.json | 2 +- .../light/scenario_Trails_ladder.json | 40 +-- .../light/scenario_modifier_chain.json | 16 +- .../light/scenario_modifier_swap.json | 14 +- test/scenarios/light/scenario_perf_full.json | 78 ++--- test/scenarios/light/scenario_perf_light.json | 20 +- .../light/scenario_peripheral_grid_sweep.json | 100 +++---- .../light/scenario_peripheral_switch.json | 46 +-- test/unit/light/unit_Effects_golden.cpp | 9 +- test/unit/light/unit_draw.cpp | 88 ++++++ test/unit/light/unit_fluid.cpp | 28 ++ 54 files changed, 1364 insertions(+), 591 deletions(-) create mode 100644 docs/tutorials/generative-effects.md diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 948d3fcd..bd0500d3 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -24,6 +24,18 @@ projectMM ships **no migration code**: the persistence layer is robust by defaul ## Unreleased (`next-iteration`) +### Noise2D is gone; Noise renders it + +**Action: re-set one control.** Affects any device with a Noise2D effect on a layer. + +The two noise effects were one effect with two names: `Noise` is `Dim::D3` and draws the identical +field on a panel, so the 2D variant earned nothing. A restored config maps `Noise2DEffect` to +`NoiseEffect` and carries `scale` across. + +What does not carry is `speed`. Noise2D took a 0..15 divisor of its own; Noise takes its rate from +`bpm` on the shared beat clock, so there is no value to map onto. Set `bpm` to taste after +restoring. + ### Infrared is a list of learned rows, and the remote must be re-learned **Action: re-learn the remote.** Affects any device with a configured infrared service. diff --git a/docs/backlog/effects-power-function-inventory.md b/docs/backlog/effects-power-function-inventory.md index 8644f2db..f34e1d91 100644 --- a/docs/backlog/effects-power-function-inventory.md +++ b/docs/backlog/effects-power-function-inventory.md @@ -1,6 +1,6 @@ # Effects × power functions — inventory -> **Forward-looking backlog document — exception to CLAUDE.md present-tense rule.** One row per effect in the tree on 2026-09-03 (58), recording what each uses today and which power functions it could run on: the ones that exist ([power-functions.md](../moonmodules/light/power-functions.md)) and the ones the [generative-fields top-down](generative-fields-analysis-top-down.md) builds (gradient noise, `PolarLut`, `Oscillators`, `advect` and the velocity rules, `decay`, `lineAA`/`disc`, the 16-bit Layer). It is the input for the catalog sweep that top-down names as a follow-on plan, under the product owner's rule: **every effect runs on the power functions for whatever they cover; an effect that does not is rewritten on them; algorithmic effects keep their logic; a rewrite lands only if at least as beautiful as the effect ran before.** Rows shrink as effects are rewritten; a rewritten effect's row is deleted, not ticked. +> **Forward-looking backlog document — exception to CLAUDE.md present-tense rule.** One row per effect in the tree on 2026-09-03 (58), recording what each uses today and which power functions it could run on: the ones that exist ([power-functions.md](../moonmodules/light/power-functions.md)) and the ones the [generative-fields top-down](generative-fields-analysis-top-down.md) builds (gradient noise, `PolarLut`, `Oscillators`, `advect` and the velocity rules, `decay`, `lineAA`/`disc`; the 16-bit Layer was proposed and then reversed, top-down § 11). It is the input for the catalog sweep that top-down names as a follow-on plan, under the product owner's rule: **every effect runs on the power functions for whatever they cover; an effect that does not is rewritten on them; algorithmic effects keep their logic; a rewrite lands only if at least as beautiful as the effect ran before.** Rows shrink as effects are rewritten; a rewritten effect's row is deleted, not ticked. **Kind.** N = natural motion (physics, fields, noise, trails, rotation, oscillation): rewritten on the kernels. A = algorithmic (a rule set or a game is the effect): keeps its logic, draws through the library. M = audio meter (bars, levels, spectra): the geometry and ballistics rows apply. U = utility or test: no rewrite owed. Anything in doubt is N. @@ -33,14 +33,11 @@ | Metaballs | N | beat pal | `blobField`, `smin` | 16-bit field, `Oscillators` | | | MovingHead | N | beat sin pal audio | `BeatPhase` | `Oscillators` for formations | fixture roles, not pixels | | NetworkReceive | U | scratch | | widens into the 16-bit Layer | writes raw bytes by design | -| Noise2D | N | noise pal | | gradient noise (phase 0), `fbm`, `Oscillators`, 16-bit output | | -| Noise | N | noise beat pal | | gradient noise (phase 0), `Oscillators`, 16-bit output | writes raw bytes | | NoiseMeter | M | noise beat sin fade pal audio | `smoothFollow` | gradient noise, `Oscillators` | | | Pacman | **A** | beat particles scratch rnd pal audio | on `particles` for motion | | game logic is the effect | | PaintBrush | N | polar beat sin fade geom rnd pal audio **float** | `lineAA` via `splat` | `lineAA`, `decay`, `PolarLut`, `Oscillators`; float to fixed | | | Particles | N | particles scratch rnd pal | on `particles` already | 16-bit `splat` | | | Plasma | N | beat sin pal | `sin16` | `PolarLut`, `fbm`/`warp` as a shader, `Oscillators`, 16-bit | | -| PolarNoise | N | noise polar beat pal | `warp8`, `kaleido` | `PolarLut`, `Oscillators`, gradient noise (phase 1 of the plan) | the Petrick idiom already | | Pong | **A** | beat rnd pal audio | | | game | | Praxis | **A** | beat sin pal | | `Oscillators` | algorithmic palette pattern | | Rainbow | N | pal | | 16-bit gradient (no banding), `Oscillators` | writes raw bytes; the default effect | @@ -55,18 +52,16 @@ | SpaceInvaders | **A** | beat rnd pal audio | | | game | | Spectrum | M | geom scratch pal audio | `bar`, `smoothFollow`, `peakHold` already | 16-bit bars | | | SphereMove | N | fade rnd pal **float** | `sdSphere` via `raymarch.h`/`shader.h` | 16-bit; float to fixed | | -| Spiral | N | polar beat pal | | `PolarLut`, `Oscillators` | | | SpriteFountain | N | beat sin particles scratch rnd audio | on `particles` already | `decay` | | | StarField | N | fade shader scratch rnd pal **float** | `shader::project` already | `splat`, `decay`; float to fixed | | | StarSky | N | fade scratch rnd pal | `hashInt` | `Oscillators` for the twinkle, `decay` | the earlier verdict "not a particle" stands; oscillation is its mechanism | | Tetrix | **A** | particles scratch rnd pal **float** | `FrameTime` | | state machine is the effect | | Text | U | pal | `scroll` | 16-bit anti-aliased glyphs later | | | Truchet | N | beat shader rnd pal | on `shader.h` already | `Oscillators` | | -| Tunnel | N | noise polar beat pal | `fbm8` | `PolarLut`, gradient noise, `Oscillators`, `warp` | | | VectorBalls | N | beat sin shader pal | on `shader.h` already | 16-bit | | | WaterRipple | N | scratch rnd pal | already a wide-state kernel | renders into the 16-bit Layer without narrowing; `disc` for drops; `decay` | | | Wave | N | noise beat sin scratch pal | `sin16` | gradient noise, `Oscillators` | | -**Counts.** 58 effects: 36 natural motion, 8 algorithmic (GameOfLife, FlyingToasters, Pacman, Pong, Praxis, RubiksCube, SpaceInvaders, Tetrix), 8 audio meters, 6 utility. 12 still compute per light in float outside the FPU-gated raymarch (BouncingBalls, Blurz, DistortionWaves, PaintBrush, Ripples, RubiksCube, Sine, SphereMove, StarField, Tetrix, Raymarch by design, and one in Wave's history); 7 write raw Layer bytes (the 16-bit phase migrates them to `draw::`). +**Counts.** 54 rows remain of the 58 the table opened with, the difference being effects since rewritten on the kernels and deleted per the rule above. 11 still compute per light in float outside the FPU-gated raymarch (BouncingBalls, Blurz, DistortionWaves, PaintBrush, Ripples, RubiksCube, Sine, SphereMove, StarField, Tetrix, Raymarch by design). 17 effect headers write `buffer()` bytes directly rather than going through `draw::`; that is a measured OPTIMIZATION on the hot path rather than debt (a row pointer costs 0.26 ns/light where `draw::pixel` with known coordinates costs +170%), so it is not a migration target. The 16-bit phase that was to migrate them was reversed (top-down § 11). **What the sweep would look like when it becomes a plan.** Batches by kernel, as each lands: the noise effects with phase 0; the polar and oscillation effects with phase 1; the raw-byte writers with the 16-bit Layer; Echo, Lissajous, PaintBrush and the trail effects with `advect`/`decay`/`lineAA`; BouncingBalls onto `particles` on its own, since it is a rework with a bench judgment. Each batch under ~100 files, each effect compared against how it ran, the golden re-baselined with the reason. Effects a showcase supersedes (Lissajous by Trails, possibly Echo) are deleted rather than kept beside it. diff --git a/docs/backlog/generative-fields-analysis-bottom-up.md b/docs/backlog/generative-fields-analysis-bottom-up.md index d7bc232f..777ebdc2 100644 --- a/docs/backlog/generative-fields-analysis-bottom-up.md +++ b/docs/backlog/generative-fields-analysis-bottom-up.md @@ -4,6 +4,13 @@ ## TL;DR +> **Status (2026-09-05): the three gaps this document names are closed.** Advection shipped as +> `draw::advect`/`advect16`, gradient noise replaced value noise behind the same names, and color +> state above 8 bits shipped as effect-owned 16-bit planes rather than a wide Layer (the top-down's +> § 11 records why). The "What we need to add" list in Part 3 is therefore built, and the builtin +> count below (55) is now 67. The rest of the document is a Stage-1 snapshot and is left as written. + + - **The target is two textbook techniques over one block set.** A **procedural shader**: color as a function of (position, time), computed per pixel from noise sampled through a coordinate transform. **Advection**: the previous frame transported by a velocity field and decayed, with sources drawn into it each frame. Both stand on the same primitives: a polar coordinate mapping, gradient noise with fractional Brownian motion and domain warping, low-frequency oscillators, a contrast window and palette, anti-aliased sub-pixel rasterization, a bilinear resampler, framerate-independent exponential decay, and fixed-point arithmetic with quantization last (Part 1). - **Every algorithm has a name and an originator.** Perlin noise (1985, 2002), fBm, domain warping (Quilez), semi-Lagrangian advection and stable fluids (Stam 1999, 2003), curl noise (Bridson 2007), flow-field particle tracing (Hobbs; Shiffman), Wu's anti-aliased lines (1991), coverage from signed distance, exponential half-life decay, LFO modulation. None needs more than adds, multiplies, a sine table and a noise function (Part 1). - **The cost model is arithmetic and decides the design.** A shader costs samples per pixel and scales with area × samples; advection costs a few loads and lerps per pixel per pass and scales with area × channels, plus memory for color state above 8 bits. For both, framerate is part of the rendering method: transport must stay sub-pixel per frame, decay must not step, oscillators must not alias. Throughput in pixels per second, not frames per second, is the honest metric (Part 1 § Cost). diff --git a/docs/backlog/generative-fields-analysis-top-down.md b/docs/backlog/generative-fields-analysis-top-down.md index fb1f0168..8554643b 100644 --- a/docs/backlog/generative-fields-analysis-top-down.md +++ b/docs/backlog/generative-fields-analysis-top-down.md @@ -14,7 +14,7 @@ An unmarked line is context or rationale. ## TL;DR -- ✅ **Five decisions taken by the product owner (2026-09-03):** the Layer buffer goes to 16 bits per channel as the one format, subject to the memory analysis in § 2; gradient noise replaces value noise in place (one solution, the goldens move once); MoonLive gets each kernel in the same phase as the compiled function, with a shipped script; the stable-fluids solver is in scope as the last phase, a P4 and desktop showcase; every effect that does not run on the power functions is rewritten on them (algorithmic effects such as Game of Life excepted), judged against how it ran before and never made worse. +- **Five decisions taken by the product owner (2026-09-03)** (the first was later reversed on measurement, § 11): the Layer buffer goes to 16 bits per channel as the one format, subject to the memory analysis in § 2; gradient noise replaces value noise in place (one solution, the goldens move once); MoonLive gets each kernel in the same phase as the compiled function, with a shipped script; the stable-fluids solver is in scope as the last phase, a P4 and desktop showcase; every effect that does not run on the power functions is rewritten on them (algorithmic effects such as Game of Life excepted), judged against how it ran before and never made worse. - **(proposal) The Layer width is a per-layer property fixed on the cold path, one template instantiated twice, never a per-light branch.** 16-bit is the default wherever it fits; 8-bit is the degradation step the existing adaptive-allocation cascade already has, so the classic without PSRAM keeps its proven 128² pipeline. The pipeline stays 16-bit end to end and quantizes **once, per driver, in `Correction`**, to the width that driver's wire takes: 8-bit with temporal dithering for WS2812-class LEDs and every network, Hue, video and preview output, 16-bit straight through for a 16-bit LED. Memory doubles per layer and for the output buffer (98 KB each at 128² RGB), bandwidth doubles in blend, extrude and preview, and the S3's PSRAM latency makes that measurable on cheap effects; the KPI gate reads it per batch (§ 2). - **(proposal) Seven kernels, in the existing homes.** `core/noise.h`: gradient noise in place, plus `curl16`. `light/polar.h` (new): `PolarLut`. `core/oscillators.h` (new): `Oscillators`, the timer bank with the four LFO shapes and modulation. `light/draw.h`: `advect` (the bilinear previous-frame resampler, separable and 2D, wrap and clamp), the velocity rules, `decay` by half-life, `lineAA`, `disc`, and the 16-bit quantize with temporal dithering. `light/fluid.h` (new, last): the Stam solver. Every function names its canonical source; nothing is ported (§ 3). - **(proposal) MoonLive operates on the Layer, not on a handle.** With the Layer at 16 bits the frame buffer IS the wide state, so advection, decay and the emitters are whole-frame builtins on the script's own layer, the shape `fill` and `fade` already have; the polar LUT and the oscillator bank are handles declared in `defineControls()`, the shape `pool()` has. Multi-argument host calls already ship (`emit` takes seven), so nothing here waits on the engine; the one engine change is the pixel-store inline ops learning the 16-bit element (§ 4). @@ -181,18 +181,22 @@ The semi-Lagrangian step (Stam 1999): for each destination pixel, `src = dst − ### 3.9 `Fluid` (`light/fluid.h`, phase 5) -The Stam 1999 solver over effect-owned `int32` Q16.16 grids: `diffuse(velocity)`, `project()` (Jacobi, iteration count a control, default 5), `advect(velocity by itself)`, `project()`, optional `vorticityConfinement()`, then dye (the Layer) advected by `draw::advect` with the stored field. Wall boundaries; `addVelocity(x, y, dvx, dvy)` and the Layer write are the source terms. Declares a resync point (re-seed to rest). Sized for panels; the P4 and desktop are its home. +The Stam 1999 solver over effect-owned `int32` Q16.16 grids: `diffuse(velocity)`, `project()`, `advect(velocity by itself)`, `project()`, then dye advected by `draw::advect16` along the stored field. Wall boundaries; `addVelocity(x, y, dvx, dvy, z)` and the dye splat are the source terms. SHIPPED with three differences: the relaxation is Gauss-Seidel rather than Jacobi (it converges in fewer sweeps for the same code, and the sweep count is the `iterations` control, default 5); vorticity confinement was not built; and the dye is the EFFECT's own 16-bit plane rather than the Layer, which is what kept the buffer 8-bit (§ 11). Declares a resync point (re-seed to rest). Sized for panels; the P4 and desktop are its home. ## 4. MoonLive: the frame kernels, per phase (decision 3) -**The Layer is the state, so the kernels are whole-frame builtins on the script's layer**, the shape `fill(r,g,b)` and `fade(amt)` already have: no handle, no arena bytes, one host call per frame. Stateful helpers that are not the frame (the polar LUT, the oscillator bank, the fluid grids) are **handles declared in `defineControls()`**, exactly like `pool(n)`: sized once, allocated by the binding outside the arena, whole-object passes per frame. Multi-argument host calls ship (`emit` takes seven), the builtin table holds 64, so nothing waits on the engine. **(proposal)** +**The Layer is the state, so the kernels are whole-frame builtins on the script's layer**, the shape `fill(r,g,b)` and `fade(amt)` already have: no handle, no arena bytes, one host call per frame. Stateful helpers that are not the frame (the polar LUT, the oscillator bank, the fluid grids) are **handles declared in `defineControls()`**, exactly like `pool(n)`: sized once, allocated by the binding outside the arena, whole-object passes per frame. Multi-argument host calls ship (`emit` takes seven), the builtin table holds 96, so nothing waits on the engine. **(proposal)** + +**What shipped, against this table.** The vocabulary below is the design proposal; the names in the +code differ where implementation taught otherwise, and the third column says which. Read the +registered set in `MoonLiveBuiltins_light.h` as the authority. | Phase | Builtins | Script shipped | |---|---|---| -| 1 fields | `polar(precision)` handle; `polarA()`/`polarR()` become inline loads from the LUT when one is declared (today they compute per pixel); `oscillators(n)`, `lfoSet(i, ratio, offset)`, `ramp(i)`, `phase(i)`, `bipolar(i)`, `unipolar(i)`, `noiseAngle(i)`, `modulate(v, i, depth)`; `gradient noise` is invisible: `noise()` just improves | `aurora.mle` | -| 3 advection | `flowWind(...)`, `flowRadial(...)`, `flowSpiral(...)`, `flowRings(...)`, `flowNoise(...)`, `flowCurl(...)` (each sets this frame's rule), `advect(blend)`, `decay(halfLifeMs)`, `disc(x, y, r, hue)`, `lineAA(x0, y0, x1, y1, hue)` | `trails.mle` | -| 4 composition | none new; `aurora.mle` as an emitter inside `nebula.mle` is composition of existing builtins | `nebula.mle` | -| 5 fluid | `fluid(iterations)` handle, `fluidJet(x, y, angle, force)`, `fluidStep(viscosity, vorticity, gravity)` | `fluid.mle` | +| 1 fields | SHIPPED as `osc(rate, ms, shape)` alone, which is STATELESS: two oscillators sharing a rate hold their phase relationship without a bank, so the handle and its eight accessors were not needed. `polarA`/`polarR` still compute per pixel (no LUT handle). The gradient-noise swap is invisible to scripts, as planned | `aurora.mle` | +| 3 advection | SHIPPED as `trail(1)`, `flowNoise(zoom, strength)`, `flowCurl(zoom, strength)`, `trailDecay(halfLifeMs)`, `emitTrail(x, y, z, index, bri, radius)`. The flow builtins ADVECT rather than setting a rule for a separate `advect()`, which halves the host calls; `decay` became `trailDecay` because a plain `decay` is a name scripts already declare. `flowWind`/`flowRadial`/`flowSpiral` exist in `draw.h` with no script binding; `lineAA` shipped earlier (2026-08-07) and has no script binding either; only `flowRings` is absent | `trails.mle` | +| 4 composition | SHIPPED as `fieldRate(n)`, the frame-skip lever a per-pixel script needs on a large fixture. `fieldScale` stayed compiled-only: a script cannot own the second plane it needs | `nebula.mle` | +| 5 fluid | NOT BUILT: the solver has no script binding, so `fluid.mle` is jets pouring into a curl flow through the phase-3 builtins, which looks like the effect without being it. Exposing `Fluid` to scripts is open | `fluid.mle` | The per-pixel shader path improves without new builtins: the LUT turns `polarA`/`polarR` from a 3.5 µs square root into two loads, and the roadmap's inline-op work (§ 4c) is what removes the remaining call cost; that work is the roadmap's, not this document's. @@ -212,13 +216,13 @@ The one engine change this plan requires: the `StoreElem` and `FillElems` inline Each is a compiled effect and a MoonLive script of the same look, so the script proves the builtin surface. Controls are the cost knobs and the look knobs, with defaults that hold the stated fps on the stated fixture. **(proposal)** -**Aurora** (phase 1; shader; 🔬 2D). Three gradient-noise layers over a `PolarLut`, each layer's transform driven by its own oscillators; the layers become R, G, B through a contrast window and a palette blend. Controls: `speed` (master), `scale` (cells across the short side), `layers` (1 to 4, the cost knob), `warp` (angle displacement by noise), `twist` (radius shears the angle), `segments` (kaleidoscope fold, 1 = off), `contrast` (low/high window width), `palette` (the shared control). Targets: S3 32² at 100 fps with 3 layers; P4 64² at 60 fps with 3 layers; desktop 128² at 200 fps. +**Aurora** (phase 1; shader; 💫🖌️ 3D). Layers of gradient noise over a `PolarLut`, each layer's transform driven by its own oscillators; which layer wins picks the palette region, and a contrast window decides what is visible at all. SHIPPED controls: `speed`, `scale`, `layers` (1 to 4, the cost knob), `warp`, `twist`, `segments` (kaleidoscope), `contrast`, `octaves`, plus `PolarLut`'s `polarTable`, `polarTable16` and `mapping`. -**Trails** (phase 3; advection; 🔬 2D). Emitters drawn into the 16-bit layer, then advected and decayed. Controls: `emitter` (orbital dots, Lissajous line, both), `dots` (1 to 8), `orbit` (diameter), `flow` (wind, radial, spiral, rings, noise, curl), `strength` (pixels per second), `blend` (partial transport), `persistence` (half-life in ms), `breathe` (modulation depth on strength and orbit, from the bank), `palette`. Targets: S3 64² at 60 fps; P4 128² at 50 fps; classic 32² at 60 fps in 16-bit. +**Trails** (phase 3; advection; 💫🖌️ 3D). Emitters drawn into the effect's own 16-bit plane, then advected and decayed. SHIPPED controls: `speed`, `dots` (a density, scaled by the fixture), `scale`, `persistence` (a half-life), `breathe`. The planned `emitter`, `orbit`, `flow` and `blend` controls were not built: one Lissajous walk and one flow rule proved enough, and a flow SELECT is open. -**Nebula** (phase 4; composition; 🔬 2D). The Aurora field, thresholded by its contrast window so most of it is black, is the emitter; a curl-noise flow carries it. Controls: Aurora's `layers`/`scale`/`contrast`, Trails' `strength`/`persistence`/`blend`, plus `fieldScale` (the field at half or quarter resolution) and `fieldRate` (the field every N frames). Targets: S3 64² at 50 fps with the field at half resolution; P4 128² at 50 fps; desktop unconstrained. +**Nebula** (phase 4; composition; 💫🖌️ 3D). A noise field, thresholded against its own measured range so most of it is black, is the emitter; a curl flow carries it. SHIPPED controls: `speed`, `scale`, `contrast`, `persistence`, `octaves`, `fieldScale` (compute the field at half or quarter resolution), `fieldRate` (recompute it every N frames). -**Fluid** (phase 5; solver; 🔬 2D; P4 and desktop). A jet emitter into a Stam solver, dye on the 16-bit layer. Controls: `jets` (1 to 4), `force`, `angle` (oscillator-modulated), `viscosity`, `vorticity`, `gravity`, `iterations` (the cost knob), `persistence`, `palette`. Targets: P4 64² at 50 fps with 5 iterations; desktop 128² at 100 fps; on the S3 and classic it runs at whatever the panel allows and its card says so. +**Fluid** (phase 5; solver; 💫🖌️ 3D; P4 and desktop). Jets pour velocity and dye into a Stam solver, one independent medium per depth slice. SHIPPED controls: `jets` (1 to 4), `force`, `swirl`, `viscosity`, `persistence`, `iterations` (the pressure solve, and the cost knob). `angle`, `vorticity` and `gravity` were not built. Each showcase gets its card in [effects.md](../moonmodules/light/effects.md) in the PolarNoise form (one line per control, the cost knob named as such), and its numbers in [performance.md](../performance.md). @@ -226,7 +230,9 @@ Each showcase gets its card in [effects.md](../moonmodules/light/effects.md) in - **Unit, per kernel, behavior-named.** Gradient noise: zero-mean over a large sample, range, continuity across cell boundaries, the same value on every ISA (a fixed-seed table of 64 samples). `PolarLut`: the LUT equals per-pixel `atan16`/`dist16` at 16-bit precision; the 8-bit default within one LSB of angle. `Oscillators`: `dt`-independence (two steps of `dt` equal one of `2·dt`), wrap, modulation bounds. `advect`: a single lit pixel moves exactly `v·dt` (sub-pixel, so two neighbors share it by the bilinear weights), wrap and clamp edges, the separable form equals the 2D form for an axis-aligned field, no write outside the buffer. `decay`: `decay(2·dt) == decay(dt)²` within one LSB, and a value never rises. `curl16`: divergence of the sampled field is zero within tolerance on a grid. `lineAA`/`disc`: total coverage of a disc equals its area within 2%; a line's coverage is independent of direction within 5%. `quantize`: `>> 8` bit-identical to the 8-bit path; dithering averages to the 16-bit value over 256 frames. 16-bit Layer: every `draw::` primitive tested at both widths. - **Goldens.** A golden pins the plumbing, not the look (decision 5): phase 2 moves none, because a bit-identical quantize is the proof that widening the Layer is mechanical; phase 0 and phase 6 move goldens deliberately, with the reason in the commit and the product owner's comparison against the old frame on the panel, and that is the harness working. Each showcase adds its golden at both widths. -- **Scenarios, per family.** Fields: a `PolarLut` sized at prepare and rebuilt on a grid resize, with the memory ladder. Advection: Trails on a live pipeline at 16², 32², 64², 128² with the scratch plane in the ladder and the tick within its per-target contract. The 16-bit Layer: the existing `scenario_Layer_memory_1to1` and `scenario_MultiplyModifier_memory_lut` at both widths, and the cascade stepping from 16 to 8 bits on a constrained heap. Fluid: its grids in the ladder and its tick contract on the P4. Every showcase's fps target is a `contract` in its scenario, per target. +- **Scenarios, per family.** Fields: a `PolarLut` sized at prepare and rebuilt on a grid resize, with the memory ladder. Advection: Trails on a live pipeline at 16², 32², 64², 128² with the scratch plane in the ladder and the tick within its per-target contract. The 16-bit Layer: the existing `scenario_Layer_memory_1to1` and `scenario_MultiplyModifier_memory_lut` at both widths, and the cascade stepping from 16 to 8 bits on a constrained heap. Fluid: its grids in the ladder and its tick contract on the P4. Every showcase's fps target is a `contract` in its scenario. As shipped the contracts are +`desktop-macos` only and expressed in `tick_us`; no device contract exists yet, because the S3 and P4 +numbers have not been taken (§ 8, phase 3 step 5 and phase 5 step 3). - **Perf.** The micro-bench target from the power-functions plan gains a row per kernel; `collect_kpi.py --commit` per phase on the S3 and P4; the desktop tick is the fast alarm. - **The final gate is the product owner's eyes.** Per phase: the S3 bench board (shiffy, 80×48) for the panel class, the P4 (.139) for the MCU home, the desktop at 128×96 for the ceiling, and a wall run for Trails and Nebula. The criteria are visual: no tearing at the stated fps, no visible steps in a trail's tail, a shader that turns rather than scrolls, and the classic at 32² still smooth. @@ -341,7 +347,7 @@ the compiler knows by layout, needing no user-declarable struct machinery rather than capability). It depends on the multi-value call ABI (§ 2 there), which is what makes a coordinate in and a color out expressible at all. -**`Coord3D` yes; the color struct waits for phase 2.** The roadmap pairs `Coord3D` with a `CRGB`, +**`Coord3D` yes; the color struct waited for phase 2, which was reversed (§ 11), so the dependency is void and the struct is its own question.** The roadmap pairs `Coord3D` with a `CRGB`, and that pairing predates the 16-bit decision. A script-visible color fixed at three `uint8_t` would be the one place in the pipeline where the channel width stops being runtime data, exactly as phase 2 makes `draw.h` a template over both widths and has `Correction` quantize once at the driver. So the @@ -361,73 +367,19 @@ holding several coordinates meets the 16-slot ceiling faster (§ 8b there). Ordering note: this is the step that makes a 3D script possible, so it follows phase 1b rather than leading it. A script that can hold a coordinate but calls kernels that ignore z has gained nothing. -### Phase 2: the 16-bit Layer: BUILT, MEASURED, STASHED (2026-09-04) - -**Decision: the wide frame buffer is not the way to precision; phases 3 and 4 start in 8 bits.** -The whole phase was built and verified (every golden matched through a narrowed hash, every driver -and both preview paths read at the layer's width), then measured, and the measurement reversed the -premise. It is held in a local `git stash` (`2026-09-04 phase 2 ...`) pending the product owner's -call on where it should live: a stash is local and unpushed, so it does not survive a drop or a -fresh clone, and "recoverable if the wall says otherwise" needs a branch or a tag to be true. - -**The number.** A noise field plus the driver's per-light read, the same benchmark on both targets: +### Phase 2: the 16-bit Layer: BUILT, MEASURED, REVERSED (2026-09-04) -| | 8-bit | 16-bit | cost | -|---|---|---|---| -| ESP32-S3, 128x128 | 18.25 ms | 28.58 ms | **+56.5%** (effect +50%, driver read +63%) | -| desktop arm64, 128x128 | 0.48 ms | 0.76 ms | +57.9% | +**Decision: the wide frame buffer is not the way to precision; phases 3 onward are 8-bit with +effect-owned 16-bit planes.** The whole arc, the measurement that reversed it, what replaced it and +what is worth salvaging: [§ 11](#11-the-16-bit-question-what-it-was-both-answers-and-what-is-left). -The two agree, which is rare for a host benchmark against Xtensa and is what makes the number -trustworthy. On the S3 the driver read was the LARGER half: the per-light reassembly of two bytes -into a channel is what an in-order core punishes. The 8-bit dispatch itself cost nothing measurable -(a loop-invariant branch), so the work was correct; it was aimed one layer too high. - -**Why the premise was wrong.** Phase 2 existed to prepare phases 3 and 4. Phase 4's own first step is -temporal dithering, and phase 3's trails need a precise ACCUMULATOR, not a wide frame buffer (the -Wave effect already does this with a private plane). That is also how the ANIMartRIX and FlowFields -engines work: float per pixel, quantized to 8 bits in the very last step, dithered. The precision -lives in the computation, not in the frame. A wide frame buffer buys smoother gradients, which is -visible on Rainbow across a 768-wide panel and nowhere else we looked; phases 3 and 4 add motion and -structure, not gradients. - -**What stayed in the tree (all correct at 8 bits, all pinned):** the three CodeRabbit findings on -PR 95 (`warpImpl` unsigned wrap, morph without a depth term, the polar fallback keeping its mapping, -each with a test), and a golden for Fire, which had none. What went to the stash: `Buffer`/`Canvas` -width, `putChannel`/`getChannel`, the wide `Correction` path, every driver's width dispatch, the -16-bit noise/palette/color/LUT kernels, and nine effects moved onto `draw::pixel` (see below). - -**Two findings to carry forward.** -- **A raw byte write is invisible to a grep for the draw API.** Nine effects address `buffer()` - directly and use no draw call; the plan counted seven. Grep for `buffer()`, `data()[`, `* cpl` and - `memcpy` as well. -- **Moving an effect onto `draw::pixel` is a hot-path REGRESSION**, not a cleanup. Measured on the - desktop over a 256x256 RGB frame: the row pointer the effects use writes a light in 0.26 ns; - `draw::pixel` with x and y already known costs +170% (the `offsetOf` multiplies and the bounds - check per light); a flat-index effect that first reconstructs x, y, z with three divides and then - calls it costs +327%. Step 5 below is therefore withdrawn as written. If uniformity is wanted, the - draw API needs a row or span form that an effect can advance, not a per-light coordinate write. - -**Should the wide buffer ever come back**, the stash holds a complete, tested implementation whose -only open item was the MoonLive store (a script's `StoreElem` writes three consecutive bytes). The -design for that is worked out: keep byte stores, emit a second one per channel, no new encodings. - -The original phase plan follows, kept as the record of what was built and measured. - -#### Phase 2 as planned (superseded) -1. `Buffer`: bytes per channel; `Canvas`: sample width; `Layer::prepare()` picks the width by the allocation check (option B) or fixed 16 (option A), per the sign-off. -2. `draw.h`: every `Canvas` and `Buffer` primitive as one template instantiated for both widths; `get`/`pixel` widen 8-bit RGB on write and narrow on read for the existing callers. -3. `BlendMap`: both paths templated; the output buffer follows the Layer's width. -4. `Correction::apply` reads 16-bit input and quantizes (`>> 8` in this phase) to the wire width `DriverBase` declares (8 for every driver today); the preview goes through the same path; `NetworkReceiveEffect` widens. No quantizing view is needed on the zero-copy path. -5. The 7 raw-byte effects migrated to `draw::` (which the power-functions plan already owed). -6. MoonLive `StoreElem`/`FillElems` at 16-bit on Xtensa, RISC-V and the host backend; the existing script tests at both widths. -7. Every golden at both widths, all unchanged (bit-identical quantize is the acceptance test of this phase). -8. Scenarios: the memory scenarios at both widths; the cascade from 16 to 8 on a constrained heap (the classic at 128²). -9. KPI on S3, P4 and classic: blend, extrude and preview cost at 16-bit read against the table; the S3's PSRAM latency is the number to watch. -10. Docs: architecture.md § Buffer types, memory strategy, the leddriver mode-3 note closed, MIGRATING.md if any API a script or driver sees changed. ### Phase 3: advection and Trails (medium) -**Volumetric from the start (PO, 2026-09-04).** TrailsEffect is `Dim::D3`, as Aurora is: the bench +**Volumetric from the start (PO, 2026-09-04).** What shipped is per-slice: every slice gets its own +flow and they differ, but `advect16`'s rule yields vx and vy only, so light is carried WITHIN a slice +and not between them. The trilinear sampler and the vz below were not built, and 3D transport is +open. TrailsEffect is `Dim::D3`, as Aurora is: the bench S3 is a 20x20x20 cube, so a flat trail would be the thing on the wall. Per function: `decay` and `decay16` are already dimension-blind (they walk the buffer flat); `advect` needs a TRILINEAR sampler for 3D, since `sampleWrap` takes `pos_t x, y` with a whole-pixel z, which is 8 corner reads @@ -439,16 +391,16 @@ the trilinear path in step 4, so step 3 still reaches the wall early. **Memory i volumetric trail meets first**: a 16-bit RGB plane is 48 KB on a 20-cube and 1.5 MB on a 64-cube (PSRAM only), against 24 KB for a 64x64 panel. -1. `advect` (2D and separable), the velocity rules, `curl16`, `decay`, `lineAA`, `disc`, with their unit tests. -2. `TrailsEffect`: emitters, flows, the bank for breathing, scratch plane in `ScratchBuffer`, card, golden. -3. MoonLive: the flow, advect, decay and emitter builtins; `trails.mle`; script golden. -4. Scenario: Trails at four sizes with the ladder and per-target contracts. -5. Desktop, S3, P4, wall; performance.md; the product owner's look (the tail of a trail is the thing to judge). +1. ✅ `advect`, the velocity rules, `curl16`, `decay`, `disc`, with their unit tests. Two parts of the step did not ship: the SEPARABLE form of `advect` (the 2D and 16-bit forms are what exist), and `lineAA`, which turned out to be already in `draw.h` from 2026-08-07. +2. ✅ `TrailsEffect`: emitters, flows, the bank for breathing, scratch plane in `ScratchBuffer`, card, golden. +3. ✅ MoonLive: the flow, advect, decay and emitter builtins; `trails.mle`. +4. ✅ Scenario: `scenario_Trails_ladder`. +5. Desktop ✅ and the product owner's look ✅. S3, P4 and the wall are open, and performance.md has no Trails row yet. ### Phase 4: composition, dithering, levers, SIMD (medium) -1. `quantize` with temporal dithering, switchable, default per the sign-off; tests. -2. `fieldScale` and `fieldRate` as shared mechanisms (`draw::upscale`, a frame-skip helper on the bank's clock). -3. `NebulaEffect` and `nebula.mle`; card, golden, scenario contract. +1. ✅ `quantize` with temporal and ordered dithering; tests. +2. ✅ `fieldScale` and `fieldRate` (`draw::upscale16`, and a frame counter the binding owns). +3. ✅ `NebulaEffect` and `nebula.mle`; card and golden. No Nebula scenario: the Fluid one covers the shared field machinery, so it was not worth its own. 4. The PIE variants of the noise inner loop and the bilinear lerp for S3 and P4 behind `src/platform/`, bit-identical tests against the scalar forms; the FPU `curl16` where `hasFpu`. - **The P4's PPA is for `upscale`, not for advection (2026-09-04).** The Pixel Processing Accelerator is a 2D-DMA blitter: it transforms a whole rectangle by ONE affine transform @@ -473,7 +425,7 @@ the user's copy, which is correct, and the picker sets `option.value` to the exa neither is the cause. The `rate1` text is a name the file held EARLIER in the session, which points at the control list surviving a recompile rather than at the resolver or the UI. -**Ruled out by measurement, so a future look need not repeat it**: the builtin table has room (65 of +**Ruled out by measurement, so a future look need not repeat it**: the built-in table has room (67 of 96); `kMaxCtrls` is 8 against 5 declared; the 64-byte arena holds five `byte` members; declaration ORDER is irrelevant (moving the control first changed nothing); the control NAME is irrelevant (renaming it changed nothing); `aurora.mle` and `trails.mle` have the identical shape and are fine. @@ -488,7 +440,7 @@ capital-N file beside a lowercase catalog entry. The fork mechanism assumes the ### Phase 5: fluid (medium; P4 and desktop) 1. ✅ `light/fluid.h` with its unit tests (divergence after `project` within tolerance; a jet moves dye; rest state is stable). -2. ✅ `FluidEffect` and `fluid.mle`; card, golden, and `scenario_Fluid_solver`. The scenario runs on the host; a P4 run needs a board. +2. ✅ `FluidEffect`; card, golden, and `scenario_Fluid_solver` (host; a P4 run needs a board). `fluid.mle` ships too, but NOT on the solver: the plan's `fluid`/`fluidJet`/`fluidStep` builtins were not built, so the script is jets pouring into a curl flow, which looks like the effect without being it. Exposing the solver to scripts is open. 3. ✅ performance.md carries the desktop rows; the P4 and S3 rows are open, since they need a board. **Two bugs the jets taught, both worth keeping.** The first shipped picture was a hollow RING, and @@ -510,8 +462,8 @@ Decision 5 mandates that every natural-motion effect runs on the power functions ## 9. Resource accounting -- **Flash:** the gradient noise is a 256-byte permutation plus a 12-entry gradient table; the LFO bank and LUT are small; the 16-bit Layer instantiates the frame-op set twice (estimate low single-digit KB per target ❓, read from the repo-health flash table per batch); the SIMD variants are per-target only. -- **RAM:** all sized buffers are `prepare()`-time, PSRAM-preferred, `dynamicBytes`-reported, zero static (`check_footprint`): the 16-bit Layer per § 2's table; `PolarLut` 2 B/pixel default; the advection scratch plane one Layer's size; the fluid grids four `int32` planes plus scratch (a 64² fluid is ~100 KB, PSRAM class). +- **Flash:** the gradient noise is a 16-entry gradient table (Perlin's twelve cube-edge gradients padded to sixteen so the index is a mask) and NO permutation table: the corner hash is a multiply, which is what made it branch-free on Xtensa; the LFO bank and LUT are small; the 16-bit Layer instantiates the frame-op set twice (estimate low single-digit KB per target ❓, read from the repo-health flash table per batch); the SIMD variants are per-target only. +- **RAM:** all sized buffers are `prepare()`-time, PSRAM-preferred, `dynamicBytes`-reported, zero static (`check_footprint`). As shipped: `PolarLut` 2 B/pixel default; a wide-plane effect carries two 16-bit planes plus a 1-byte dither carry, so 15 B/light on top of the Layer's 3 (5 bytes per channel, three channels) (measured, Trails at 64x64x10: 614,400 B against the Layer's 122,880); the fluid holds two velocity grids sized to the volume plus four working grids sized to ONE SLICE (`int32` throughout). The 16-bit Layer's row is gone with the decision (§ 11). - **Cycles:** budgets in § 5; the KPI gate per phase; the desktop tick as the fast alarm. - **Repo:** goldens are hashes; scenarios record their observations; each phase adds ~1 effect, ~1 script, ~1 scenario. - **Boundary:** `noise`/`oscillators` core; `polar`/`draw`/`fluid` light; SIMD and FPU variants only under `src/platform/`, selected by `platform_config.h` flags, never an `#ifdef` outside. @@ -519,8 +471,8 @@ Decision 5 mandates that every natural-motion effect runs on the power functions ## 10. Decisions for sign-off -1. ✅ **Layer width mechanism: B** (16-bit default, 8-bit as the first cascade step, decided per Layer at prepare from free memory, one template). Agreed 2026-09-03. -10. ✅ **Quantization lives in `Correction`, once per driver, to the driver's declared wire width**; the pipeline is 16-bit end to end and 16-bit LEDs become driver increments. Agreed 2026-09-03. +1. ↩️ **Layer width mechanism: B** (16-bit default, 8-bit as the first cascade step, decided per Layer at prepare from free memory, one template). Agreed 2026-09-03, BUILT, then REVERSED on the measurement (§ 11): the buffer is 8 bits and precision is held in effect-owned planes instead. +10. ⬜ **Quantization lives in `Correction`, once per driver, to the driver's declared wire width**; the pipeline is 16-bit end to end and 16-bit LEDs become driver increments. Agreed 2026-09-03, NOT built: it followed from decision 1, which was reversed. Quantization lives in `draw::blit16`, at the one point a wide plane meets the 8-bit buffer. 2. **Gradient noise swap accepted on the 1.3× per-sample bound**, goldens moved in one commit, judged on S3 and P4 (§ 3.1). 3. **MoonLive kernels operate on the script's Layer; LUT, bank and fluid are handles** (§ 4). 4. **Phase order**: noise, fields and Aurora, the 16-bit Layer, advection and Trails, composition, fluid (§ 8). Alternative: the 16-bit Layer first, if the cross-cutting risk should be retired before any showcase. @@ -530,6 +482,101 @@ Decision 5 mandates that every natural-motion effect runs on the power functions 8. **Fluid on the S3 and classic**: runs with its card stating the panel size it holds, or hidden behind a capability flag. Recommendation: runs, honestly labeled. 9. **Two documents still state the old stance and need the PO's edit under decision 5**: [power-functions.md § Migrating an effect](../moonmodules/light/power-functions.md) ("Step 1, the port: behave identically") and the header of `test/unit/light/golden_frame.h` ("pixel-identical by default"). Proposal: "faithful first" stays, and its purpose is stated: it guards against degrading an effect into a quick-and-dirty one (the early Game of Life port), not against improving it. Two sentences follow it: every effect runs on the power functions for whatever they cover, and an effect that does not is rewritten on them, with the effect as it ran as the reference and "at least as beautiful on the panel" as the bar; algorithmic effects (a rule set is the effect) keep their logic. The golden is re-baselined in the same commit with the reason, and the harness comment reads "a golden pins the plumbing; a deliberate re-baseline records an improvement the product owner judged". +## 11. The 16-bit question: what it was, both answers, and what is left + +The plan opened with a decision to widen the Layer buffer to 16 bits per channel (§ 10, decision 1). +That was built, measured, and reversed, and the precision problem it existed to solve was then solved +a different way. This section is the whole arc, because the reversal is the most useful thing the +work produced and a stash is a poor place to keep a lesson. + +### The problem is real, and it is narrower than it looks + +An 8-bit channel multiplied by slightly less than one, many times a second, has nowhere to go. A +decay to a half-life of two seconds at 60 fps wants to multiply by about 0.994 per frame: at 8 bits +a value of 100 either truncates to 99 and keeps truncating, reaching 0 far too fast, or rounds back +to 100 and never fades at all. The tail either vanishes or freezes, and neither is a tail. + +That is the case that motivated the phase. The important observation, which took building the wrong +thing to see, is WHERE it happens: in a plane that DECAYS, frame after frame. The Layer buffer is +written fresh by every effect on every frame, so its precision is a display question, not an +accumulation one. Banding on a buffer is a dither problem. Banding on a decaying plane is a width +problem. + +### Answer A: widen the Layer (built, measured, reversed) + +Phase 2 made `Buffer`, `Canvas` and every `draw::` primitive width-templated, taught every driver and +both preview paths to read at the layer's width, and kept every golden matching through a narrowed +hash. It worked. Then it was measured: + +| | 8-bit | 16-bit | cost | +|---|---|---|---| +| ESP32-S3, 128x128 | 18.25 ms | 28.58 ms | **+56.5%** (effect +50%, driver read +63%) | +| desktop arm64, 128x128 | 0.48 ms | 0.76 ms | +57.9% | + +Two architectures that usually disagree agreed within 1.5 points, which is what makes the number +trustworthy. **On the S3 the DRIVER READ was the larger half.** Reassembling two bytes into a channel +happens `lights x channels` times per frame whatever the effect does, and an in-order core with no +branch predictor punishes it. The 8-bit dispatch itself cost nothing measurable, so the work was +correct; it was aimed one layer too high. + +### Answer B: widen the plane that accumulates (shipped) + +Trails, Nebula, Fluid and the scripted trail each own a 16-bit plane, advect and decay it at full +width, and narrow ONCE on the way out through `draw::blit16` with temporal dithering. The buffer +stays 8 bits, so the driver read is untouched, which is the entire +56% avoided. + +Measured on the desktop at 64x64x10, the same grid for both: + +| | tick | dynamic bytes | +|---|---:|---:| +| Trails (two 16-bit planes + carry) | 1913 us | 614,400 | +| Noise (8-bit, no state) | 920 us | 0 | +| the Layer buffer itself | | 122,880 | + +**The cost moved to memory, and it is larger per effect than the wide buffer would have been**: 5 +bytes per light (two 16-bit RGB planes plus a 1-byte dither carry) against the 3 the Layer holds, so +2.5x what a 16-bit buffer would have cost. Three properties make that acceptable where the buffer was +not: only effects that need it pay, it is `prepare()`-time and PSRAM-preferred, and it is freed when +the effect is removed. A 64-cube would want 3.75 MB for the set (two 1.5 MB planes plus the carry), which is a PSRAM-class effect and the +cards say so. + +### What to learn from it + +**Measure the whole path, not the kernel.** The effect-side cost of a wide buffer was the obvious +half and the smaller one. Nobody predicted the driver read, and no host benchmark would have found it +either: it is an in-order-core property. + +**Precision is not a pipeline property, it is a per-consumer one.** The plan reasoned "the pipeline +should be 16-bit end to end", which is a tidy sentence and an expensive design. What the code needed +was 16 bits in the four places that accumulate. + +**A reversal is worth more than the feature.** Phase 2 cost a day and produced a number that will +stop this being proposed again for years. That is why the numbers live here rather than in a commit +message. + +**Building it was the only way to measure it.** The estimate before the work was "some overhead"; the +answer was +56%. Neither number could have been argued to. + +### Follow-ups, in the order they are worth doing + +1. **Tag the stash, or lose it.** The phase-2 work is 65 files, +1826/-362, in `stash@{0}` and + NOWHERE else: no branch, no tag. A stash does not survive `git stash drop`, a fresh clone, or a + dead disk. `git tag phase2-16bit-layer stash@{0}` costs nothing and makes "recoverable if the wall + says otherwise" true. Product owner's call, since it is a git operation. +2. **Cherry-pick `Correction`'s dithering** (`src/light/drivers/Correction.h`, +158 in the stash). + Decision 10 put quantization in `Correction`, once per driver, at the driver's declared wire + width. That decision followed from the wide buffer and so was never built, but the DRIVER-side + half stands on its own: an 8-bit buffer dithered at the wire is the cheapest remaining win for + banding on a real panel, and it is the one piece of phase 2 whose cost does not scale with lights + x channels. +3. **The five shared-primitive bugs the phase found are still real** under any wide buffer: `fill`, + Canvas `fade`, `blur`, `Layer::extrude` and `effectSetChannel` all assume one byte per channel. + They are correct at 8 bits, so nothing is broken today, but they are a trap for the next wide + thing. Worth a comment at each site rather than a fix. +4. **16-bit LEDs remain unanswered.** Some drivers can carry more than 8 bits to the wire. With the + buffer at 8 that is now a driver-increment question rather than a pipeline one, which is a smaller + and better-shaped problem than the plan assumed. + ## Out of scope 16-bit-native LED drivers (HD108, UCS7604): enabled by the per-driver quantization, each its own increment starting with the datasheet; a polar modifier on the LUT (modifier-first path, its own increment); the second-core field producer; 3D variants of the velocity rules and the LUT (the dimension audit's "waits for a consumer" rule); a MoonLive per-pixel inline-op program beyond the LUT loads (the roadmap's § 4c work); GPU acceleration on desktop; supersync's protocol (each stateful kernel declares its resync point, no more). diff --git a/docs/backlog/moonlive-language-roadmap.md b/docs/backlog/moonlive-language-roadmap.md index f2095847..3322d5b1 100644 --- a/docs/backlog/moonlive-language-roadmap.md +++ b/docs/backlog/moonlive-language-roadmap.md @@ -32,12 +32,12 @@ Five hard limits, all found by hitting them: | limit | value | where | |---|---|---| -| script state | **64 bytes** shared by all members | `kCtrlBytes`, `MoonLiveBuiltins.h:132` | +| script state | **64 bytes** shared by all members | `kCtrlBytes`, `MoonLiveBuiltins.h:188` | | distinct members | **8** | `kMaxCtrls`, same file | -| branch labels | **16** (an `if` or `for` takes up to 2) | `kIrLabels`, `MoonLiveIr.h:201` | +| branch labels | **16** (an `if` or `for` takes up to 2) | `kIrLabels`, `MoonLiveIr.h:228` | | frame slots | **32**, shared by live variables, loop counters and staged call arguments ✅ | `kMaxLocals`, `MoonLiveIr.h` | | ~~numeric types~~ | ~~`uint8_t`, `uint16_t`, `int16_t`~~ → **`int`, `byte`, `bool`, `fixed`, `string`** ✅ | still no float: `fixed` is Q16.16 | -| ~~builtin table~~ | ~~16, and 16 used~~ → **64** ✅ | `BuiltinTable::kMax` — raised, with an overflow assert | +| ~~builtin table~~ | ~~16, and 16 used~~ → **96** ✅ | `BuiltinTable::kMax` — raised, with an overflow assert | The branch budget was binary-searched with generated scripts: **6 `if`/`else` + 2 `for` compiles, 7 does not.** The state budget is what caps the balls effect at 4 balls rather than 25 — six fields @@ -97,8 +97,7 @@ than "add a language feature": 3. **Typed multi-argument host calls** (≤ 6 args, optional return). Today a builtin takes one `uint32_t` and returns one, which is why `line()` had to be given a bespoke seven-argument staging path and why most of the library is inexpressible. -4. **Script symbols** `x/y/z/w/h/d/time` — already threaded to the runtime entry point, needing - only grammar exposure. +4. ✅ **Script symbols** — SHIPPED as `t`, `width`, `height`, `depth`, `xPos`, `yPos`, `zPos`. 5. **Two entry shapes:** `frame()` for composing kernels (the scalable path) and `pixel(x,y,z)` for per-pixel ergonomics (honest ceiling around 32×32). 6. **Stateful handles** — a `Pool`, a `BeatPhase` — script-declared, arena-allocated at compile @@ -217,13 +216,17 @@ Ordered by **what removing it buys**, not by implementation cost. and it failed SILENTLY: `add()` returned false, no caller checked it, and the next builtin would have surfaced as "unknown function" in a script with nothing pointing at the cause. -Now 64 (what the power-functions spec asks for), with `MM_ASSERT_NO_BUILTIN_OVERFLOW` so a dropped +Now 96 (what the power-functions spec asks for), with `MM_ASSERT_NO_BUILTIN_OVERFLOW` so a dropped registration is loud at startup rather than silent. This gated every other builtin; the palette work below went in immediately behind it. -### 2. Typed multi-argument host calls — *the library's blocker* +### 2. Typed multi-argument host calls — ✅ SHIPPED -A builtin takes one `uint32_t` and returns one. `line()` needed a bespoke seven-argument staging +SHIPPED: a builtin takes `const uintptr_t* args` with arities up to seven, plus typed flags +(`fixedArgs`, `fixedReturn`, `byRef`, `byStr`), and `emit` uses all seven. The paragraph below is the +problem as it stood before that. + +A builtin took one `uint32_t` and returned one. `line()` needed a bespoke seven-argument staging path to exist at all, and most of the power-functions surface cannot be expressed without this. The spec asks for ≤ 6 arguments plus an optional return. @@ -252,7 +255,7 @@ Not purely a constants bump, and the blockers are known: - `kCtrlBytes` / `kMaxCtrls` are both `uint8_t`, so the arena caps at 255 bytes before any type change. 150 bytes of particle state fits under that; much more does not. - `static_assert(kCtrlBytes <= 64, "seeded_ is a 64-bit mask, one bit per script arena byte")` - (`MoonLive.h:285`) is the real gate. Past 64 bytes the seeded-member mask needs re-indexing — + (`MoonLive.h:355`) is the real gate. Past 64 bytes the seeded-member mask needs re-indexing — and there is a worked example, because it was widened 16 → 64 once already. The assert exists because the earlier `uint32_t` version silently aliased members mod 32. - Watch `sizeof(MoonLive)`. It is held BY VALUE in every scripted module and constructed on the @@ -358,8 +361,10 @@ back as the easy default. HSV stays where it earns its place, in `setPalEntryHSV authoring a palette rather than bypassing one. **The color one waits, and does not take FastLED's `CRGB` name.** The -[generative-fields plan](generative-fields-analysis-top-down.md) makes the Layer 16-bit with the -channel width decided at run time and `draw.h` templated over both widths, so a script-visible color +[generative-fields plan](generative-fields-analysis-top-down.md) PROPOSED making the Layer 16-bit +with the channel width decided at run time and `draw.h` templated over both widths, then reversed it +on the measurement (that plan's § 11), so this reason is void and the color struct is its own +question. As written: a script-visible color fixed at three `uint8_t` would be the one place the width stops being runtime data. Specify it after that phase lands, under our own name (CLAUDE.md: our own code, our own names). `Coord3D` has no such dependency and goes first. @@ -380,7 +385,7 @@ a local, a function argument and a return value, exactly as `int`, `byte`, `bool which makes § 6 (arguments and returns) a prerequisite rather than a nicety. Two costs to settle when it is added: whether a member is one member record or three of the eight, and hence 6 of the 64 arena bytes; and that a local occupies one frame slot per field under today's flat allocator, so a -script holding a few coordinates reaches the 16-slot ceiling sooner (§ 8b). +script holding a few coordinates reaches the 32-slot ceiling sooner (§ 8b). One call, one brightness evaluation, and the index arithmetic stops being open-coded at every call site. It also removes the `mod(...) + mod(...) * width` flattening a script writes today, which is @@ -475,7 +480,7 @@ picking a number — the balls port wanted ~12 and had to be folded down. ### 8b. More frame slots — *the encoding is NOT the limit; measure the stack* -**16 live variables**, shared by a script's named variables, its loop counters, and the arguments it +**32 live variables**, shared by a script's named variables, its loop counters, and the arguments it stages for a call. The budget is what is live AT ONCE rather than a total: a call hands its staging slots back, and an `if`, `else` or `for` block hands its locals back at the closing brace ([MoonLiveEffect.md](../moonmodules/light/MoonLiveEffect.md) documents both). A script that exceeds diff --git a/docs/moonmodules/light/MoonLiveEffect.md b/docs/moonmodules/light/MoonLiveEffect.md index 2efe64e5..6031ee64 100644 --- a/docs/moonmodules/light/MoonLiveEffect.md +++ b/docs/moonmodules/light/MoonLiveEffect.md @@ -163,7 +163,7 @@ Registered by the light domain, not built into the compiler (the core owns only | `scale(value, n)` | a `0..65535` value onto `0..n-1` — lands a wave on an axis | | `sin(angle)`, `cos(angle)` | the circle; one turn is `0..65535`, result biased to `1..65535` centered at 32768 | | `turn(n)` | one revolution split `n` ways — the angle step for placing `n` points on a circle | -| `print(v)` | log a value and return it ([what it costs](writing-scripts.md#debugging-print)) | +| `print(v)` | log a value and return it. A host call per invocation, so it belongs in a cold path rather than a per-pixel loop | | `a / b`, `a % b` | divide and remainder. Both are host calls: cheap on a cold path, deliberate per light. Dividing by zero **saturates** toward the numerator's sign rather than faulting, so no script needs a zero-check of its own; the remainder is 0 | | `toFixed(v)`, `toInt(v)` | convert between a whole number and a `fixed` one, each a single instruction | | `smoothstep(e0, e1, v)` | a soft `0..65535` ramp between two edges, the anti-aliasing primitive | @@ -179,6 +179,11 @@ Registered by the light domain, not built into the compiler (the core owns only | `setPaletteColor(x, y, index, bri)` | one light from the ACTIVE palette, in one call | | `setPaletteColorZ(x, y, z, index, bri)` | the same, addressing a light in a volume | | `paletteR(i, bri)`, `paletteG`, `paletteB` | one palette channel, when a script needs the value rather than a pixel | +| `trail(1)` | ask for a trail plane, from `defineControls()`. A 16-bit plane the flow builtins carry and the binding blits, so a script gets tails without owning a buffer. Returns whether it got one | +| `flowNoise(zoom, strength)`, `flowCurl(zoom, strength)` | carry the whole trail plane one frame along a flow: noise for a wandering field, curl for a divergence-free one where nothing clumps. One call, because a per-pixel rule would cross the script boundary 8000 times on a cube | +| `trailDecay(halfLifeMs)` | fade the trail by a half-life in milliseconds, so a tail's length is in seconds and holds at any framerate. Named `trailDecay` because `decay` is an ordinary word a script may want for its own member | +| `emitTrail(x, y, z, index, bri, radius)` | throw light into the trail as a disc of the given radius. A single-pixel head arrives at a fraction of a count after a long tail, which is why the radius is a parameter | +| `fieldRate(n)` | true once every n frames: the lever that makes a per-pixel loop affordable on a large fixture. The flow and the decay still run every frame, so what it costs is detail rather than smoothness | | `pool(n)` | size this script's particle pool, from `defineControls()`. Returns what it got | | `emit(x, y, angle, speed, n, life, hue)` | throw `n` particles from a point | | `gravity(g)`, `drag(k)` | the two forces | diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index 63a9e8ff..78f9cd4e 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -14,6 +14,8 @@ Effects are built from the shared [power functions](power-functions.md): the dra ### DistortionWaves 💫 · 2D +DistortionWaves effect preview + Two interfering sine waves beat against each other into a moiré color field. - `freq_x` / `freq_y`: horizontal/vertical wave frequency (1–8). @@ -29,6 +31,8 @@ Detail: [technical](moxygen/DistortionWavesEffect.md) ### FixedRectangle 💫 · 3D +FixedRectangle effect preview + A solid color filling a positioned box within the grid, with an optional alternating-white checker on the box's pixels. - `red` / `green` / `blue` / `white`: the box color. @@ -44,7 +48,9 @@ Detail: [technical](moxygen/FixedRectangleEffect.md) -### FreqSaws 💫📊 · 2D +### FreqSaws 💫🎶 · 2D + +FreqSaws effect preview Audio-reactive sawtooth waves: each column maps to a frequency band whose magnitude drives a per-band oscillator speed, so louder bands sweep their sawtooth up the column faster, with three phase methods. @@ -116,7 +122,7 @@ Detail: [technical](moxygen/MetaballsEffect.md) -### Particles 💫🦅 · 2D +### Particles 💫🦅✨ · 2D Particles effect preview @@ -155,6 +161,8 @@ Detail: [technical](moxygen/PlasmaEffect.md) ### Praxis 💫 · 2D +Praxis effect preview + An algorithmic palette pattern driven by two beat oscillators (a macro and a micro mutator) whose frequencies and ranges reshape the hue field over time. - `macroMutatorFreq` / `macroMutatorMin` / `macroMutatorMax`: the coarse mutator's beat frequency and its oscillation range. @@ -184,7 +192,9 @@ Detail: [technical](moxygen/RainbowEffect.md) -### Random 💫 · 3D +### Random 💫✨ · 3D + +Random effect preview Lights one random light per frame in a random palette color over a fading background: a sparse, palette-tinted sparkle. @@ -198,7 +208,7 @@ Detail: [technical](moxygen/RandomEffect.md) -### Rings 💫🦅 · 2D +### Rings 💫🦅🖌️ · 2D Rings effect preview @@ -217,7 +227,7 @@ Detail: [technical](moxygen/RingsEffect.md) -### Ripples 💫🟦🦅 · 3D +### Ripples 💫🦅 · 3D Ripples effect preview @@ -234,7 +244,9 @@ Detail: [technical](moxygen/RipplesEffect.md) -### RubiksCube 💫🧊 · 3D +### RubiksCube 💫 · 3D + +RubiksCube effect preview A 3D Rubik's Cube projected onto the volume: it scrambles, then plays its solution back one turn at a time, the six faces in their standard colors. @@ -251,7 +263,9 @@ Detail: [technical](moxygen/RubiksCubeEffect.md) -### Fireworks 🔬 · 2D +### Fireworks 💫✨ · 2D + +Fireworks effect preview Shells rise, stall, and burst into sparks that arc over and fall. Every stage is a particle-kernel call: spawn, gravity, angleEmit, drag, age. Nothing schedules the apex: the shell decelerates under gravity and bursts when its vertical velocity crosses zero, so a faster launch bursts higher without a second control. @@ -269,7 +283,9 @@ Origin: projectMM original, on the WLED Particle System's firework family by Dam -### Fish Tank 📊 · 2D +### Fish Tank 💫🎶✨👾 · 2D + +Fish Tank effect preview An aquarium on a light wall: fish of three shapes swim across a dark tank, each in its own color from the active palette, tails beating. Movement is a particle-pool entry per fish with constant velocity, respawning at the far edge when it swims off; the shape is drawn through the `draw::sprite` power function. Unlike the other sprite effects, the art carries shade ROLES (body, outline, highlight, fin, eye, band) rather than fixed colors, and each fish fills them from its own place on the palette, so one drawing yields as many colorways as there are fish. @@ -286,7 +302,9 @@ Origin: projectMM original; inspired by the aquarium screensavers of the After D -### Flying Toasters 🔬📊 · 2D +### Flying Toasters 💫🎶✨👾 · 2D + +Flying Toasters effect preview The classic screensaver on a light wall: chrome toasters with flapping wings and slices of toast drift diagonally across the dark, forever. Each flier is a particle-pool entry with constant velocity (respawning off the upper-right when it leaves the lower-left), rendered through the `draw::sprite` power function; the wing flap runs on a shared BeatPhase with a per-toaster offset so the flock never syncs. @@ -302,7 +320,9 @@ Origin: projectMM original; inspired by After Dark's Flying Toasters (Berkeley S -### MovingHead 🔬📊 · 1D +### MovingHead 💫🎶🎯 · 1D + +MovingHead effect preview Aims a rig of moving heads as one instrument. Pan and tilt sweep on two sine waves at different rates, so a beam traces a path rather than a line, and `formation` decides how the heads relate to @@ -337,7 +357,9 @@ Uses the global palette. Origin: projectMM original -### Pacman 🔬📊 · 2D +### Pacman 💫🎶✨👾 · 2D + +Pacman effect preview The arcade cast crossing a light wall: Pacman chomps his way along while the four ghosts drift past, each in its own color, wrapping around the edges forever. Movement is a particle-pool entry per character and the shapes go through the `draw::sprite` power function; one ghost drawing serves all four colors because the art carries palette slots rather than fixed colors, and a single drawing serves both travel directions because `draw::sprite` can mirror it. @@ -355,7 +377,9 @@ Origin: projectMM original; inspired by Namco's Pac-Man (1980), the pixel art dr -### Space Invaders 🔬📊 · 2D +### Space Invaders 💫🎵👾 · 2D + +Space Invaders effect preview The 1978 formation marching down the wall: five ranks of squid, crab and octopus stepping sideways in the two-frame wiggle, dropping a row and reversing at each wall, and speeding up as the ranks thin. That acceleration is the defining mechanic rather than a flourish, because the arcade original sped up for a mechanical reason (fewer invaders meant a shorter loop for the hardware to draw) and the tension it produced is the reason anyone remembers the game. Invaders fire down, the cannon tracks the lowest one and fires back, and when the formation lands the board resets so the attract loop runs forever. @@ -371,7 +395,9 @@ The invaders take their body color from the active palette. Origin: projectMM or -### Sprite Fountain 🔬📊 · 2D +### Sprite Fountain 💫🎶✨👾 · 2D + +Sprite Fountain effect preview A fountain that throws the project's whole sprite cast: fish, Pacman and his ghosts, toasters and toast, and the three invaders, launched from the floor on a sweeping nozzle and falling back under gravity. The pixel art is SHARED with the effects that introduced it rather than copied, so a fix to a fish fixes it in both places. The particle pool's one spare byte per particle carries which character a slot is, which is what makes a mixed cast free: widening the pool for a sprite id would cost every particle system in the project memory for a field only this effect reads. @@ -388,7 +414,9 @@ Colors come from the active palette, one entry per sprite, held for its whole fl -### Pong 🔬📊 · 2D +### Pong 💫🎵👾 · 2D + +Pong effect preview Two paddles rallying a ball across the grid, the attract-mode reading of the 1972 original where both players are the machine. A perfect tracker would rally forever and never look like a game, so each paddle has a reaction delay and a small aiming error, re-rolled every exchange: it starts moving a moment after the ball turns and meets it slightly off center. That is what produces near-misses, edge hits and the occasional point. Where on the paddle the ball lands sets the angle it leaves at, which was the one piece of skill the original had. @@ -405,7 +433,9 @@ Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1 -### Aurora 🔬 · 3D +### Aurora 💫🖌️ · 3D + +Aurora effect preview Several noise fields, each drifting on its own clock, read in polar coordinates and composited into curtains of light. Nothing is simulated: layers of the same field at different scales, moved by independent oscillators, interfere with each other, and the interference is what reads as curtains folding through one another. The strongest layer at each pixel wins, so the layers stay distinct instead of averaging into haze, and which layer won picks the region of the palette. Every palette gives a different aurora. @@ -425,7 +455,9 @@ Origin: projectMM original, in the shader vocabulary Stefan Petrick made recogni -### Ballpit 🔬 · 2D +### Ballpit 💫✨ · 2D + +Ballpit effect preview Falling balls that pile up and shove each other aside. The heap is emergent: gravity pulls, the floor stops, and contact between neighbors produces the shape. `tilt` turns the pit into a slope and the whole pile slides and re-settles. @@ -442,7 +474,9 @@ Origin: projectMM original, on the WLED Particle System's ballpit family by Dami -### Dissolve 🔬 · 2D +### Dissolve 💫 · 2D + +Dissolve effect preview Two color fields trade places pixel by pixel in an order that looks random but is computed, so the transition needs no per-pixel state and no shuffled index list. Two devices rendering the same frame dissolve identically without exchanging anything. @@ -455,7 +489,9 @@ Origin: projectMM original, on the classic dissolve transition in its position-a -### Echo 🔬 · 2D +### Echo 💫✨ · 2D + +Echo effect preview The previous frame fed back through a zoom and rotation, dimmed, with a bright source drawn on top: trails that spiral away from themselves, like a camera pointed at its own monitor. @@ -471,7 +507,9 @@ Origin: projectMM original, on video feedback and the standard texture-feedback -### Spectrum 🔬📊 · 2D +### Spectrum 💫🎶 · 2D + +Spectrum effect preview An audio analyser with real meter ballistics: bars rise fast enough to catch a transient and fall slowly enough to read, and a peak dot marks the recent maximum and drifts down. @@ -487,7 +525,9 @@ Origin: projectMM original, on standard VU/PPM meter ballistics and WLED's GEQ b -### Truchet 🔬 · 2D +### Truchet 💫🖌️ · 2D + +Truchet effect preview A maze of interlocking arcs that never repeats, drawn without storing a single tile. Randomly-turned tiles with arcs at their edges join into continuous winding paths across the whole surface: the pattern looks designed, and nothing designed it. @@ -506,6 +546,8 @@ Origin: projectMM original, on Sébastien Truchet's 1704 tiling and the standard ### Fluid 💫🖌️ · 3D +Fluid effect preview + Light poured into a simulated medium and carried by it. Every other flow in this library is a function of position and time; this one is state, so a jet fired now changes where everything downstream goes for seconds afterwards and the same settings never quite repeat a minute. The solver is Stam's stable fluid (diffuse, project, advect, project), which is unconditionally stable at any timestep, and the projection is what keeps the flow divergence-free so dye neither piles up nor drains away. The jets are the effect's character, and they are deliberately not on a fixed circle: each one's radius breathes between the center and the wall, its aim leans either side of the tangent, and alternate jets sweep against each other. Jets pinned to one circle all turning the same way sum into a single rotation, which the solver faithfully renders as a hollow ring with a dead middle. Colliding jets are what roll up vortex pairs. @@ -527,6 +569,8 @@ Origin: projectMM original, after Stam 1999 "Stable Fluids" ### Nebula 💫🖌️ · 3D +Nebula effect preview + A noise field decides where light is born, a curl flow decides where it goes, and between them the cloud keeps folding into itself. The field is thresholded hard, so only its top survives and the rest is black; the flow is divergence-free, so nothing piles up or thins out. Neither half is new: what is, is that the emitter is a FIELD rather than a handful of dots, so light enters everywhere at once and the flow shapes a whole cloud instead of drawing trails. - `speed`: how fast the medium moves, and with it the whole cloud. @@ -545,6 +589,8 @@ Origin: projectMM original, composing the noise-field and curl-flow kernels ### Trails 💫🖌️ · 3D +Trails effect preview + Dots thrown into a moving medium, leaving tails the flow carries and bends. Nothing draws a tail: the tail is the previous frames' dots, transported along a velocity field and dimmed, which is why the shape of the flow is visible in it. On a cube each depth slice gets its own flow, so the slices differ rather than one plane repeating, though light is carried within a slice and not yet between them: the transport is 2D per slice until 3D advection ships. - `speed`: how fast the medium moves, and with it every tail. @@ -559,7 +605,9 @@ Origin: projectMM original, in the flow-field idiom (4wheeljive's FlowFields, fr -### Tunnel 🔬 · 2D +### Tunnel 💫🖌️ · 3D + +Tunnel effect preview A texture mapped onto the inside of an infinite tube, so the viewer appears to fly down it forever. Nothing is 3D: the angle around the center is one texture coordinate and the reciprocal of the distance is the other, which is perspective for the price of a divide. @@ -574,7 +622,9 @@ Origin: projectMM original, on the standard demoscene tunnel -### VectorBalls 🔬 · 2D +### VectorBalls 💫🖌️ · 2D + +VectorBalls effect preview A rotating 3D object drawn as shaded spheres: the demoscene classic that named the technique. The smallest complete demonstration of putting 3D on a panel: rotate, project, sort back-to-front, shade by distance, draw. @@ -590,7 +640,9 @@ Origin: projectMM original, on the Amiga-era demoscene vector-ball effect -### WaterRipple 🔬 · 2D +### WaterRipple 💫🧬 · 2D + +WaterRipple effect preview A propagating wave simulation: drops land, their rings spread outward, reflect off the edges and interfere where they cross. The crossing is what a closed-form ripple cannot fake, because two rings meeting have to add and cancel. @@ -607,7 +659,9 @@ Origin: projectMM original, on Hugo Elias's water surface algorithm -### Raymarch 🔬 · 2D +### Raymarch 💫🖌️ · 2D + +Raymarch effect preview A lit 3D scene rendered by marching a ray through a distance field, one ray per pixel. Nothing draws a sphere: the scene is a function returning the distance to the nearest surface, and the spheres emerge because each ray stops where that function says a surface is. The lighting is derived too: the surface normal is the gradient of the distance field. @@ -623,7 +677,9 @@ Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function -### PolarNoise 🔬 · 2D +### PolarNoise 💫🖌️ · 3D + +PolarNoise effect preview A warped noise field addressed by angle and radius, folded into a kaleidoscope. The field turns and breathes around the center rather than scrolling past it. @@ -642,7 +698,9 @@ Origin: projectMM original, after Stefan Petrick's polar/noise vocabulary and I -### SdfShapes 🔬 · 2D +### SdfShapes 💫🖌️ · 2D + +SdfShapes effect preview A circle and a box orbit and melt into each other, drawn as signed distance fields rather than rasterized outlines. One distance per pixel yields three looks at once: an anti-aliased fill, an outline (`|d| - width`), and a glow that falls off into the surrounding field. @@ -661,6 +719,8 @@ Origin: projectMM original, after Iñigo Quilez's distance-function catalogue an ### Solid 💫 · 3D +Solid effect preview + A flat fill with five color modes: a plain RGB(W) color, the active palette spread across the lights, an RMS-averaged single palette color, or the palette banded along the grid's rows or columns. - `red` / `green` / `blue` / `white`: the flat color in `RGB(W)` mode (ignored in the palette modes). @@ -677,7 +737,9 @@ Detail: [technical](moxygen/SolidEffect.md) -### SphereMove 💫🧊 · 3D +### SphereMove 💫 · 3D + +SphereMove effect preview A hollow spherical shell that bounces through the 3D volume, its surface colored from the palette, leaving no trail. @@ -691,7 +753,7 @@ Detail: [technical](moxygen/SphereMoveEffect.md) -### Spiral 💫🦅 · 2D +### Spiral 💫🦅🖌️ · 2D Spiral effect preview @@ -709,7 +771,9 @@ Detail: [technical](moxygen/SpiralEffect.md) -### StarField 💫 · 2D +### StarField 💫🖌️ · 2D + +StarField effect preview A perspective starfield: stars approach the viewer from a vanishing point, brightening as they near, then respawn at depth. @@ -746,6 +810,8 @@ Detail: [technical](moxygen/StarSkyEffect.md) ### Text 💫 · 2D +Text effect preview + Renders a multi-line string in a bitmap font. Static by default (laid out top-left, each newline dropping one font-height, clipped where it runs off the grid); turn on `scroll` to march the whole block leftwards as a wrapping marquee. Text color comes from the active palette. - `text`: the string to show; a **multi-line text area** (each line renders on its own row). @@ -764,7 +830,9 @@ Detail: [technical](moxygen/TextEffect.md) -### GameOfLife 💫🌙 · 2D/3D +### GameOfLife 💫🌙🧬 · 2D/3D + +GameOfLife effect preview Conway's cellular automaton generalised to 2D/3D: selectable rulesets (+ custom `B#/S#`), cells that inherit a neighbor's palette color on birth, optional green→red age coloring, a dead-cell blur fading toward the background color, toroidal `wrap`, a 1.5 s settle pause, and 3-CRC stasis self-respawn (R-pentomino/glider) when the board goes static. @@ -788,7 +856,9 @@ Detail: [technical](moxygen/GameOfLifeEffect.md) -### GEQ 💫🐙📊 · 2D +### GEQ 💫🐙🎶 · 2D + +GEQ effect preview GEQ effect preview @@ -807,7 +877,9 @@ Detail: [technical](moxygen/GEQEffect.md) -### GEQ3D 💫🌙📊 · 2D +### GEQ3D 💫🌙🎶 · 2D + +GEQ3D effect preview A 3D-perspective graphic equaliser: audio bands rise as bars with faked depth, their side/top lines drawn toward a "projector" vanishing point (sweeping left↔right) and shortened by `depth`. Bands left of the projector are painted right-to-left, bands right of it left-to-right; per-face darkening (side/top/front) and optional `borders`. @@ -826,7 +898,9 @@ Detail: [technical](moxygen/GEQ3DEffect.md) -### PaintBrush 💫🌙📊 · 3D +### PaintBrush 💫🌙🎶 · 3D + +PaintBrush effect preview Audio-reactive brush strokes: lines whose 3D endpoints oscillate on the beat (`beatsin8`, audio-band timebase), each stroke shortened to a band-magnitude length so the moving tip sweeps a curve over the fading field. @@ -845,7 +919,9 @@ Detail: [technical](moxygen/PaintBrushEffect.md) -### Tetrix 💫🌙 · 2D +### Tetrix 💫🌙✨ · 2D + +Tetrix effect preview Falling Tetris-style blocks: each column drops a brick that lands on the growing stack, fills the column, then clears and restarts. @@ -863,7 +939,9 @@ Detail: [technical](moxygen/TetrixEffect.md) -### Blurz 🐙📊 · 2D +### Blurz 🐙🎶 · 2D + +Blurz effect preview Blurz effect preview @@ -882,7 +960,9 @@ Detail: [technical](moxygen/BlurzEffect.md) -### BouncingBalls 🐙 · 2D +### BouncingBalls 💫🐙 · 2D + +BouncingBalls effect preview BouncingBalls effect preview @@ -899,7 +979,9 @@ Detail: [technical](moxygen/BouncingBallsEffect.md) -### FreqMatrix 🐙📊 · 1D +### FreqMatrix 🐙🎶 · 1D + +FreqMatrix effect preview FreqMatrix effect preview @@ -921,6 +1003,8 @@ Detail: [technical](moxygen/FreqMatrixEffect.md) ### Lissajous 🐙 · 2D +Lissajous effect preview + Lissajous effect preview A Lissajous curve traced across the grid from two phase-shifted `sin8`/`cos8` sweeps, palette-colored along its length, with a fading trail. @@ -937,7 +1021,9 @@ Detail: [technical](moxygen/LissajousEffect.md) -### NoiseMeter 🐙📊 · 3D +### NoiseMeter 🐙🎵 · 3D + +NoiseMeter effect preview NoiseMeter effect preview @@ -954,7 +1040,9 @@ Detail: [technical](moxygen/NoiseMeterEffect.md) -### Wave 🌊 · 2D +### Wave 💫 · 2D + +Wave effect preview An oscilloscope waveform scrolls across the grid with a fading trail; six selectable shapes. @@ -972,7 +1060,7 @@ Detail: [technical](moxygen/WaveEffect.md) -### Fire ⚡️🦅 · 2D +### Fire ⚡️🦅🧬 · 2D Fire effect preview @@ -1011,7 +1099,9 @@ Detail: [technical](moxygen/NoiseEffect.md) -### AudioSpectrum 📊 +### AudioSpectrum 💫🎶 + +AudioSpectrum effect preview The 16 mic frequency bands spread across X, each column lit bottom-up by its magnitude. @@ -1025,7 +1115,9 @@ Detail: [technical](moxygen/AudioSpectrumEffect.md) -### AudioVolume 🔊 +### AudioVolume 💫🎵 + +AudioVolume effect preview A whole-grid VU meter: every light pulses with the mic level, color indexing the palette by loudness. @@ -1039,7 +1131,9 @@ Detail: [technical](moxygen/AudioVolumeEffect.md) -### DemoReel 🎬 · 3D +### DemoReel 💫 · 3D + +DemoReel effect preview A demo reel: plays every other registered effect in turn, auto-advancing on a timer, so one Layer cycles the whole library hands-free: the showcase/test tool for everything. It hosts a single live effect at a time (created from the effect registry, rendered into this Layer) and swaps to the next when the interval elapses: new effects are picked up automatically. It can also pick a fresh palette each cycle and overlay the playing effect's name. The `status` line shows which effect is playing (e.g. `playing: Plasma (3/20)`). It never hosts itself, and it plays effects in sequence rather than compositing them (layering is the [Layer](moxygen/Layer.md) stack's job). @@ -1058,6 +1152,8 @@ Detail: [technical](moxygen/DemoReelEffect.md) ### NetworkReceive 📡🌙 +NetworkReceive effect preview + Receives lights-over-UDP (Art-Net, E1.31/sACN, DDP) and writes it into the layer: the receive side for Resolume/Madrix/xLights/LedFx. - `universe_start`: the first incoming universe to map onto the layer (mirrors the sender). @@ -1073,7 +1169,9 @@ Detail: [technical](moxygen/NetworkReceiveEffect.md) -### Sine 🌀 · 3D +### Sine 💫 · 3D + +Sine effect preview R/G/B each follow a sine along one axis at 120° phase offset: a glowing, scrolling color box. diff --git a/docs/moonmodules/light/power-functions.md b/docs/moonmodules/light/power-functions.md index 53b1c55a..fb75b0a3 100644 --- a/docs/moonmodules/light/power-functions.md +++ b/docs/moonmodules/light/power-functions.md @@ -124,14 +124,39 @@ One sample is a soft blur; the character comes from composing them. Summing octa | Power function | What it does | Effects | Modifiers | |---|---|---|---| -| `inoise8` | Perlin gradient noise in 1D, 2D or 3D: a smooth, deterministic pseudo-random field | Noise, Noise2D, NoiseMeter, Wave | `noise` | -| `fbm8` | Sums noise octaves at doubling frequency and halving amplitude, turning a blur into cloud and terrain structure. Re-widened per octave count, so the field keeps its full range however many are summed | PolarNoise, Tunnel, Aurora | `fbm` | +| `inoise8` | Perlin gradient noise in 1D, 2D or 3D: a smooth, deterministic pseudo-random field | Noise, NoiseMeter, Wave | `noise` | +| `fbm8` | Sums noise octaves at doubling frequency and halving amplitude, turning a blur into cloud and terrain structure. Re-widened per octave count, so the field keeps its full range however many are summed | PolarNoise, Tunnel, Aurora, Nebula | `fbm` | | `warp8` | Samples noise at a coordinate that noise itself displaced — the flowing, marbled look | PolarNoise, Aurora | `warp` | | `turbulence8` | Sums the folded absolute value of noise, whose creases read as billowing smoke and flame | *(no caller yet)* | — | | `blobCentres` + `blobField` | Orbits N sources on sine paths and sums their inverse-square falloff — the metaball field behind anything fluid or molten | LavaLamp, Metaballs | — | +| `curl16` | The perpendicular gradient of a noise potential: a flow field that is divergence-free by construction, so what it carries neither piles up nor drains away | Nebula, Trails | — | +| `Fluid` | A stable-fluid solver (Stam 1999) in Q16.16: the medium works out its own motion rather than reading it from a function, one independent medium per depth slice | Fluid | — | +## Transport + +A field says where things go; these carry light along one, frame after frame. The state they move is +the effect's own plane rather than the layer buffer, held at 16 bits because a value multiplied by +slightly less than one many times a second has nowhere to go at 8. + +Each takes a depth, so a cube is the same call as a panel and a panel pays nothing for it (`d = 1` +reduces to the 2D loop exactly). What that buys on a cube differs by kernel: the noise fields sample +a genuine third axis, so slices differ rather than one plane repeating, while the transport kernels +carry light WITHIN each slice and not yet between them. Moving light through a volume needs a +trilinear sampler and a third velocity component, which is open work. + +
+ +| Power function | What it does | Effects | Modifiers | +|---|---|---|---| +| `draw::advect`, `advect16` | Moves a whole plane along a velocity rule by sampling BACKWARD, so every destination is written exactly once and nothing tears or duplicates | Trails, Nebula, Fluid | — | +| `draw::decay`, `decay16` | Fades a plane by a HALF-LIFE in milliseconds, so a tail's length is stated in seconds and holds at any framerate | Trails, Nebula, Fluid | — | +| `draw::quantize` | Narrows 16 bits to 8, carrying the error into the next frame (temporal) or offsetting by a Bayer cell (ordered), so a slow fade stays smooth rather than stepping | through `blit16` | — | +| `draw::blit16` | A 16-bit plane onto the canvas, dithered: the one narrowing step every wide-plane effect shares | Trails, Nebula, Fluid, MoonLive scripts | — | +| `draw::upscale16` | Bilinearly stretches a small plane over a large one, so a smooth field can be computed at a fraction of the resolution (measured 3.0x at half, 6.6x at quarter) | Nebula | — | +| `halfLifeKeep` | What fraction of a value survives a given elapsed time at a given half-life: the framerate-independent decay both `decay` forms are built on | through `decay` | — | + ## Polar and geometry math **Addressing the grid by angle and radius instead of by x and y.** @@ -166,7 +191,7 @@ The framerate rule lives here too: everything in this group is driven by elapsed | Power function | What it does | Effects | Modifiers | |---|---|---|---| | `sin16` / `cos16` | 16-bit oscillators, smooth where the 8-bit forms visibly step on a large fixture | Echo, SdfShapes | — | -| `OscillatorBank` | N independent low-frequency oscillators advanced once per frame and read per pixel, each with its own rate, shape, range and phase offset. Their phases are held together, so oscillators sharing a rate keep their relationship for as long as the device runs | Aurora, PolarNoise | — | +| `OscillatorBank` | N independent low-frequency oscillators advanced once per frame and read per pixel, each with its own rate, shape, range and phase offset. Their phases are held together, so oscillators sharing a rate keep their relationship for as long as the device runs | Aurora, PolarNoise, Trails, Nebula, Fluid | — | | `map32` | Maps a value between ranges, clamped, with the fencepost handled once so the last column is never lost | FreqMatrix, FreqSaws, GEQ, GEQ3D, Spectrum, StarField | — | | `hashInt` | Hashes position and time to a random-looking but reproducible value, so devices agree without exchanging anything | Dissolve, WaterRipple | — | | `peakHold` | Rises instantly to a new high then decays slowly — the falling peak dot every VU meter has | Spectrum | — | diff --git a/docs/performance.md b/docs/performance.md index 85bd62b2..430f26a0 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -64,6 +64,10 @@ Binary sizes: | Tunnel (fbm8) | 16,385 | 21,304 | 16,649 | 1.02 | | PolarNoise (warp8) | 20,356 | 29,199 | 20,490 | 1.01 | +The two noise effects have since merged: `Noise` is `Dim::D3` and renders what `Noise2D` did, so the +two rows above are one effect's 2D and 3D paths under the names they carried when the swap was +measured. + The 3D path is the closest to the bound and the reason: 3D gradient noise does eight dot products the value form never did, and the S3 instruction count for a 3D sample is 1.3x the old one. Method worth keeping: compile the kernel with the target's own compiler (`xtensa-esp32s3-elf-g++ -O2 -S`) and count instructions, branches and stack spills BEFORE flashing; three restructurings were compared that way in seconds, and the one flash went to the winner. The P4 and S31 numbers are open until those boards are back on the bench. **All rows, ns per sample, best of 5.** Re-measured 2026-09-04 after the benchmark stopped dispatching through `std::function`: a type-erased call cannot be inlined, so it added an indirect call to every sample and the old figures were part kernel and part harness. Every row roughly halved, which is the size of what was being attributed to the kernels: @@ -298,7 +302,7 @@ A render-only per-effect sweep on the S3 (`observed.esp32s3-n16r8`, build `Jun 1 | LavaLamp | 309 | 974 | 3,612 | 21,243 | | GameOfLife | 138 | 413 | 1,870 | 16,127 | -The cheapest (Lines, Checkerboard, PlasmaPalette) clear ~100 FPS even at 16K; the heaviest is **Noise** (51 ms = ~19 FPS at 16K — simplex noise per pixel), then Rings and GlowParticles. Effect-compute differences stay visible across the whole range because nothing is output-bound here. +The cheapest (Lines, Checkerboard, PlasmaPalette) clear ~100 FPS even at 16K; the heaviest is **Noise** (51 ms = ~19 FPS at 16K, a noise sample per pixel), then Rings and GlowParticles. Effect-compute differences stay visible across the whole range because nothing is output-bound here. **Free internal heap** holds ~8.54 MB at small grids and ~8.46–8.49 MB at 16K — the ~50–100 KB delta is just the grid-sized render buffer (the `model` array), and it returns to ~8.54 MB whenever the grid shrinks: **no leak, no fragmentation creep** across the sweep. Largest free internal block stays ~90–110 KB throughout. (Internal RAM is not the constraint on this PSRAM board; the Layer buffer is in PSRAM.) diff --git a/docs/tutorials/generative-effects.md b/docs/tutorials/generative-effects.md new file mode 100644 index 00000000..4e2f3dd6 --- /dev/null +++ b/docs/tutorials/generative-effects.md @@ -0,0 +1,273 @@ +# Making beautiful effects + +Most LED effects are written a light at a time: loop over the pixels, work out a +color, write it. That works, and it takes a long time to get from "it lights up" +to "I want to keep watching it". + +This page is about the other way. projectMM ships a set of **power functions**: +the handful of algorithms that computer graphics has used for forty years to make +things look alive. You do not implement them, you compose them. And because every +one of them is available to **MoonLive** scripts as well as to compiled C++, a +few dozen lines of script gets you an effect that would otherwise be a project. + +> Never opened the interface? Start with **[Install & first light](../gettingstarted.md)** +> and **[How projectMM works](how-projectmm-works.md)**, then come back. + +--- + +## 1. The one idea: a field + +Here is the shift that makes everything else easy. + +Instead of asking *"what should pixel 37 be?"*, ask *"what is the value of this +field at (x, y, z), right now?"* The field is a function of position and time. You +sample it once per light, turn the number into a color, and the picture falls out. + +That is what a **shader** is, and it is why an effect written this way is +resolution-independent: the same code fills a 16-light strip and a 12,288-light +wall, because it never counted pixels in the first place. + +Fields also compose. Add two, and you get a third. Use one to bend another's +coordinates, and you get something neither could produce alone. That is the whole +trick, and the rest of this page is the vocabulary. + +--- + +## 2. Noise: the raw material + +Random numbers look like static. **Noise** looks like nature, because a noise +value is close to its neighbors: it wanders instead of jumping. + +**Ken Perlin** published it in 1985 (*An Image Synthesizer*), after developing it +on the movie *Tron*; it later won him an Academy Award. projectMM uses his own +revision, *improved noise* (SIGGRAPH 2002), which removes the directional bias of +the original. + +``` +int v = noise(x * 20, y * 20, div(t, 32)); // 0..255, smooth in every direction +``` + +Three things to know, and then you can use it: + +**Scale is everything.** `noise(x, y, 0)` reads one value per light and looks like +static, because adjacent lights land in completely different parts of the field. +Multiply the coordinate down and you zoom in: `noise(x * 20, y * 20, 0)` gives +broad soft blobs. Getting this wrong is the single most common reason a noise +effect looks like colored snow. + +**Time is just another axis.** Do not recompute a 2D field and shift it. Sample a +3D field and walk along z: `noise(x * 20, y * 20, div(t, 32))`. The picture morphs +instead of scrolling, which is what makes it look organic rather than mechanical. + +**1D, 2D and 3D are the same call.** One axis for a strip, two for a panel, three +for a cube, or two of space and one of time. `noise()` takes what you give it. + +(`div(t, 32)` rather than `t / 32`: MoonLive spells integer division `div`, and +`t` is the millisecond clock every script is handed.) + +--- + +## 3. Octaves: detail at every size + +One noise sample is a soft blur. Nature is not soft: a coastline has bays, and the +bays have inlets, and the inlets have rocks. + +**fBm** (fractional Brownian motion, the term is Mandelbrot's) is the answer, and +it is embarrassingly simple. Sample the field several times, each at double the +frequency and half the strength, and add them up. Each pass is an **octave**, the +name borrowed from music, where an octave is also a doubling. + +``` +int v = fbm(x * 20, y * 20, 2); // 2 octaves: shape, plus texture on it +``` + +| Octaves | What you get | What it costs | +|---|---|---| +| 1 | soft blobs | 1 sample | +| 2 | shape with texture on it | 2 samples | +| 4 | rock, cloud, terrain | 4 samples | + +Octaves are the **cost knob** of every field effect: doubling them doubles the +work per light. Two is usually the sweet spot; four is for when the fixture is +small enough to afford it. + +One measured detail worth knowing: octaves partly cancel, so their sum is +narrower than one octave's range. Four octaves span roughly 54..199 of 0..255 +rather than the full sweep. projectMM re-widens the result for you, so `fbm` at +any octave count still uses the whole range and your thresholds keep working. + +--- + +## 4. Warp: the trick that sells it + +This one is worth learning on its own, because it is the difference between "some +noise" and "that looks like smoke". + +**Domain warping** (popularized by **Inigo Quilez**, of Shadertoy) means using +noise to move the place where you sample noise. You are not adding a field to a +field, you are bending one field's coordinates with another. + +``` +int v = warp(x * 20, y * 20, 60); // 60 = how far the field displaces itself +``` + +The result flows, folds and curls back on itself. Almost every "liquid" or +"marbled" look you have admired is domain warping. + +![Aurora: layered warped noise read in polar coordinates](../assets/light/tutorial/aurora.png) + +That is **Aurora**: a few layers of warped noise, each drifting on its own clock, +read around the center instead of across the grid, with a contrast window that +pushes most of the field to black so distinct curtains survive. + +--- + +## 5. From lines to fields: the ladder + +The power functions are a ladder, and the rungs are worth knowing because each one +buys a different kind of beauty. + +**Lines and shapes** are the bottom rung. `line` (Bresenham 1962), `circle` +(Bresenham's 1965 midpoint form), `disc`, `sphere`, `text`, `sprite`. Exact, +cheap, and the right answer when you want a *thing* on the panel rather than a +texture. + +**Signed distance fields** are the same shapes, made soft. Instead of "is this +pixel inside the circle", `sdCircle` answers "how far is this pixel from the +edge", negative inside. A distance is a number you can threshold, glow, outline or +blend, and two distance fields blend into shapes neither one describes. The +catalog follows **Inigo Quilez**'s. + +**Particles** give you motion with memory. A particle pool carries position and +velocity, and `gravity`, `drag`, `bounce` and `collide` act on all of them at +once. Use this when the thing that matters is that a spark *fell*, and the pixels +are just where it happens to be. + +**Fields** are where this page started: noise, fBm, warp, sampled per light. + +**Transport** is the top rung, and it is what this release added. A field says +where things go; transport actually *carries* light along it, frame after frame. +`advect` moves a whole plane along a velocity field by asking, for each +destination, where its contents came from. `decay` fades what is already there by +a half-life in milliseconds. Together they make a trail that is not drawn: it is +the previous frames' light, moved and dimmed. + +**Curl noise** (**Robert Bridson**, 2007) is the field transport wants. Take a +noise field and use its perpendicular gradient, and the result is +*divergence-free*: it swirls, but nothing ever piles up or drains away. That +property is why a curl flow reads as a real medium rather than as arrows. + +![Nebula: a noise field born into a curl flow](../assets/light/tutorial/nebula.png) + +**Simulation** is the last rung. **Jos Stam**'s *Stable Fluids* (SIGGRAPH 1999) +solves the medium's own motion: diffuse, project, advect, project. Every other +flow is a function of position and time; this one is state. A jet fired now +changes where everything downstream goes for seconds afterwards. + +![Fluid: dye poured into a Stam solver](../assets/light/tutorial/fluid.png) + +--- + +## 6. Why 16 bits, in one paragraph + +A trail is a value multiplied by slightly less than one, sixty times a second. At +8 bits that does not work: a value of 100 multiplied by 0.994 either truncates +back to 99 and keeps falling too fast, or rounds back to 100 and never fades at +all. The tail either vanishes or freezes. + +So every effect that carries light over time keeps its own plane at **16 bits** +and narrows to 8 once, at the end, with dithering. The layer buffer stays 8-bit, +which keeps every driver fast. You get this for free: `trail(1)` in a script +allocates it, and the blit happens for you. + +--- + +## 7. Compiled or scripted + +Most of the vocabulary above exists twice: as a C++ kernel, and as a MoonLive builtin. Same +algorithm, same numbers. Not all of it, though: `line`, `circle`, the noise family and the whole +transport set are scriptable, while `disc`, `sphere`, `text`, `sprite`, the SDF catalog and the +fluid solver are compiled-only for now. + +**MoonLive** is projectMM's scripting language. Scripts are compiled to native +code on the device, so a script is not interpreted per pixel: it runs at machine +speed. You edit one in the browser and the picture changes as you type. + +The interesting number is how little a script has to say: + +| Effect | MoonLive script | Compiled C++ | +|---|---:|---:| +| Fluid | 44 lines | 276 lines | +| Trails | 50 lines | 261 lines | +| Aurora | 58 lines | 216 lines | +| Nebula | 63 lines | 271 lines | + +These are not stripped-down versions: each is a real effect someone would happily +run. The reason they are a fifth of the size is that **the heavy lifting is in the +kernels, and the kernels are available to both.** A script does not implement +advection; it calls it. The C++ version is longer mostly because it also handles +allocation, resizing and control registration, which the script binding does on the +script's behalf. + +One honest caveat on that table: `fluid.mle` is not the Stam solver. The solver has no script +binding yet, so the script pours jets into a curl flow, which LOOKS like a fluid without simulating +one. Aurora, Trails and Nebula are genuinely the same effect in both columns. + +This is the point where the two halves reinforce each other. Every kernel added +for a compiled effect immediately makes scripts more capable, and every effect +that turns out to be expressible as a script is one that does not need to be +compiled in at all. `fluid.mle` is 44 lines: + +``` +void tick() { + flowCurl(zoom, div(force * 4 * span, 64)); // the medium + trailDecay(40 + persistence * persistence / 12); // the fade + + for (int i = 0; i < jets; i = i + 1) { + int a = osc(rate, t, 2) + i * 10922; // where this jet points + ... + emitTrail(jx, jy, z, color, 255, radius); // pour dye in + } +} +``` + +Three kernel calls and a loop. That is a fluid-looking effect. + +**Which to use.** Script first, always: you can iterate in seconds and you cannot +crash the device. Move to C++ when you need something the vocabulary does not +have, or when you are writing a per-light loop on a very large fixture and the +script boundary starts to cost (a script call per light is thousands of crossings +per frame; `fieldRate(n)` exists precisely to make that affordable). + +--- + +## 8. Everything is 3D, when the fixture is + +Every kernel on this page takes a depth. On a panel you pass 1 and pay nothing: +the loop is the 2D loop exactly. On a cube, the field is sampled along a real +third axis, so the slices differ instead of one plane repeating. + +Worth knowing where the line currently is: the **fields** are genuinely +volumetric, while **transport** carries light within each slice and not yet +between them. A trail on a cube travels across its slice, not through the volume. + +--- + +## 9. Try this + +The fastest way to feel it is to break something on purpose. Open a MoonLive +script, pick one number, and move it a long way. + +| Change | What you should see | The lesson | +|---|---|---| +| `zoom` very low, then very high | soft blobs, then colored static | scale is everything | +| octaves 1 to 4 | texture appears on the shape, frame time rises | octaves are the cost knob | +| `warp` from 0 upward | the field stops drifting and starts folding | domain warping | +| `persistence` low to high | tails from a flicker to seconds long | half-life decay | +| Fluid's `iterations` to 1 (the compiled effect, not the script) | the flow reads springy | the pressure solve is what makes it a fluid | + +## Where to go next + +- **[Power functions](../moonmodules/light/power-functions.md)**: the catalog, with what each one costs and who calls it +- **[Writing scripts](../moonmodules/light/writing-scripts.md)**: the MoonLive language reference +- **[Effects](../moonmodules/light/effects.md)**: every effect in the tree, with its controls diff --git a/mkdocs.yml b/mkdocs.yml index 15c9f506..eee832a9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -136,6 +136,7 @@ nav: - Installing projectMM on a desktop: tutorials/installing-to-desktop.md - Driving LED panels with a receiving card: tutorials/panel-cards.md - Driving projectMM from a phone or tablet: tutorials/control-surface.md + - Making beautiful effects: tutorials/generative-effects.md - Build your own MoonModules: usecases/build-your-own-moonmodules.md - Home automation: usecases/home-automation.md - LED signal integrity: usecases/led-signal-integrity.md diff --git a/moondeck/MoonDeck.md b/moondeck/MoonDeck.md index 92738520..219d8390 100644 --- a/moondeck/MoonDeck.md +++ b/moondeck/MoonDeck.md @@ -786,8 +786,15 @@ uv run moondeck/docs/screenshot_modules.py # requires projectMM running on lo uv run moondeck/docs/screenshot_modules.py --host 192.168.1.210:8080 uv run moondeck/docs/screenshot_modules.py --gif # also record 3-second GIF previews uv run moondeck/docs/screenshot_modules.py --force # re-capture and overwrite existing screenshots +uv run moondeck/docs/screenshot_modules.py --all-registered # every registered module, not just the listed ones ``` +`--all-registered` is what keeps the set complete. The script carries a hand-written MODULES list +for the few modules that need particular props or a parent that is not a Layer; every other +registered effect and modifier is captured on a Layer with its defaults. Without it a module added +today is silently skipped until someone remembers to edit the list, which is how 42 effects came to +have no preview. + The **GIF** and **Force** checkboxes in MoonDeck toggle these flags. Connects to a running projectMM server, builds a minimal pipeline scaffold (Layouts → Grid, Layer, Drivers), adds each module, screenshots its card, then removes it. Saves: diff --git a/moondeck/docs/screenshot_modules.py b/moondeck/docs/screenshot_modules.py index d2312d26..3ecfc265 100644 --- a/moondeck/docs/screenshot_modules.py +++ b/moondeck/docs/screenshot_modules.py @@ -101,6 +101,11 @@ def asset_dir_for(type_name: str) -> Path: # Effects ("RainbowEffect", "Layer", {}, True), ("NoiseEffect", "Layer", {}, True), + # The generative-fields showcases: each is Dim::D3, so the preview shows a volume. + ("AuroraEffect", "Layer", {}, True), + ("TrailsEffect", "Layer", {}, True), + ("NebulaEffect", "Layer", {}, True), + ("FluidEffect", "Layer", {}, True), ("FireEffect", "Layer", {}, True), ("PlasmaEffect", "Layer", {}, True), ("PlasmaPaletteEffect", "Layer", {}, True), @@ -684,6 +689,10 @@ def main() -> int: parser.add_argument("--grid", type=int, default=0, metavar="N", help="Resize the GridLayout to NxN before capturing (e.g. 128) for " "higher-resolution previews. Default: leave the boot grid (16).") + parser.add_argument("--all-registered", action="store_true", + help="Also capture every registered effect/modifier that has no MODULES " + "entry, on a Layer with default controls. Fixes the list going stale " + "the moment a module is added.") parser.add_argument("--extras-only", action="store_true", help="Skip projectMM module captures; only run the extra shots " "(MoonDeck tabs, installer). Useful for recapturing the " @@ -720,10 +729,18 @@ def main() -> int: uncaptured = sorted( t for t in source_registered_types() if ("Effect" in t or "Modifier" in t) and t not in listed) - if uncaptured: + if uncaptured and args.all_registered: + # Capture them anyway: an effect goes on a Layer, a modifier on a Layer, both want a + # GIF. The hand-kept list stays for the ones that need special props or a parent that + # is not a Layer; everything else needs no entry at all. + MODULES.extend((t, "Layer", {}, True) for t in uncaptured) + print(f" + {len(uncaptured)} registered effect/modifier(s) added from the types " + f"registered in src/main.cpp (--all-registered)") + elif uncaptured: print(f" ⚠️ {len(uncaptured)} registered effect/modifier(s) are NOT in this " f"script's MODULES list, so they get no screenshot: {', '.join(uncaptured)}") - print(" Add them to MODULES (near the top of this file) to capture them.") + print(" Run with --all-registered to capture them, or add an entry to MODULES " + "if one needs special props.") # Optional pipeline tweaks for nicer effect previews (raw, higher-res). if args.no_modifier or args.grid: diff --git a/moonlive/effects/nebula.mle b/moonlive/effects/nebula.mle index 5ab35efc..efbe0c11 100644 --- a/moonlive/effects/nebula.mle +++ b/moonlive/effects/nebula.mle @@ -3,9 +3,11 @@ class NebulaEffect { byte speed = 40; byte zoom = 40; - byte contrast = 200; + byte contrast = 120; byte persistence = 140; byte rate = 1; + byte peak = 200; + byte floorv = 40; int dimensions() { return 3; } @@ -15,7 +17,7 @@ class NebulaEffect { trail(1); addControl("speed", speed, 0, 255); // how fast the cloud moves addControl("zoom", zoom, 1, 255); // the field's cell size - addControl("contrast", contrast, 0, 255); // how much of the field is born + addControl("contrast", contrast, 0, 255); // 0 floods the fixture, 255 leaves a few wisps addControl("persistence", persistence, 0, 255); // how long light survives addControl("rate", rate, 1, 8); // birth the field every n frames } @@ -26,22 +28,36 @@ class NebulaEffect { int grain = div(zoom * 256, span * 16) + 1; int push = div(speed * 4 * span, 64); + int radius = div(span, 32) + 1; flowCurl(zoom, push); trailDecay(40 + persistence * persistence / 12); + int low = floorv; + if (peak < low) { low = peak - 8; } + if (low < 0) { low = 0; } + int threshold = low + div((peak - low) * contrast, 255); + int frameMax = 0; + int frameMin = 255; + if (fieldRate(rate) > 0) { for (int z = 0; z < depth; z = z + 1) { for (int y = 0; y < height; y = y + 1) { for (int x = 0; x < width; x = x + 1) { int v = fbm3(x * grain, y * grain + div(t, 32), z * grain, 2); - if (v > contrast) { - int bri = div((v - contrast) * 255, 256 - contrast); - emitTrail(x, y, z, bri, bri, 0); + if (v > frameMax) { frameMax = v; } + if (v < frameMin) { frameMin = v; } + if (v > threshold) { + int bri = div((v - threshold) * 255, peak - threshold + 1); + if (bri > 255) { bri = 255; } + emitTrail(x, y, z, bri, bri, radius); } } } } + if (frameMax < 32) { frameMax = 32; } + peak = div(peak * 7 + frameMax, 8); + floorv = div(floorv * 7 + frameMin, 8); } } } diff --git a/src/light/draw.h b/src/light/draw.h index 9a5c05db..dfc1bb25 100644 --- a/src/light/draw.h +++ b/src/light/draw.h @@ -256,7 +256,7 @@ inline void blurAxis(uint8_t* d, size_t cpl, size_t len, size_t stride, } } -// Blur the whole buffer by `amt`, separably along every axis with extent >1 (x, then y, then z , +// Blur the whole buffer by `amt`, separably along every axis with extent >1 (x, then y, then z): // MoonLight's blur2d order, extended to z). One call covers 1D/2D/3D. Off the per-pixel-effect path. inline void blur(Buffer& buf, Coord3D dims, uint8_t amt) { if (amt == 0) return; @@ -452,7 +452,7 @@ inline void line(const Canvas& cv, Coord3D a, Coord3D b, RGB c, uint8_t shorten // from two private copies of the loop) and differ ONLY in the coloring they apply, which is the // evidence for the seam: the field is shared, the coloring is the effect's own. // -// The oscillator tables stay with the CALLER, so a caller is free to drive sources from anything , +// The oscillator tables stay with the CALLER, so a caller is free to drive sources from anything: // a control, audio, a particle position: rather than from the sine paths the current callers use. // A kernel that hard-coded one set of constants would have made every future effect look the same. // diff --git a/src/light/effects/AuroraEffect.h b/src/light/effects/AuroraEffect.h index 2139580c..18d683ac 100644 --- a/src/light/effects/AuroraEffect.h +++ b/src/light/effects/AuroraEffect.h @@ -1,10 +1,6 @@ #pragma once -#include "core/math16.h" // kaleido, angle16 -#include "core/noise.h" // fbm8: the field each layer samples -#include "core/oscillators.h" // OscillatorBank: every layer's motion #include "light/effects/EffectBase.h" -#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { diff --git a/src/light/effects/EffectBase.h b/src/light/effects/EffectBase.h index cf7dd109..b11fd668 100644 --- a/src/light/effects/EffectBase.h +++ b/src/light/effects/EffectBase.h @@ -148,9 +148,12 @@ class EffectBase : public MoonModule { #include "core/color.h" // RGB #include "core/crc.h" // crc16 — grid/state fingerprints (stasis detection) #include "core/ScratchBuffer.h" // ScratchBuffer — self-sizing scratch memory for stateful effects +#include "core/oscillators.h" // OscillatorBank / Wave: the motion kernel five effects share +#include "core/math16.h" // angle16, kaleido, halfLifeKeep: the fixed-point trig and decay +#include "light/polar.h" // PolarLut: the per-pixel angle and radius four radial effects read #include "core/AudioService.h" // AudioService::latestFrame() — the shared audio source #include "core/AudioFrame.h" // AudioFrame — level + 16-band spectrum an audio-reactive effect reads #include // memset / memcpy / strcmp — buffer + control-name handling -#include // sqrtf / sinf / log10f — per-frame float maths (never per-light) +#include // sqrtf / sinf / log10f: per-frame float math (never per-light) #include // std::array — fixed-size effect state tables (cube faces, LUTs) diff --git a/src/light/effects/FluidEffect.h b/src/light/effects/FluidEffect.h index c7a2cc74..0e74d7ef 100644 --- a/src/light/effects/FluidEffect.h +++ b/src/light/effects/FluidEffect.h @@ -1,6 +1,5 @@ #pragma once -#include "core/oscillators.h" // OscillatorBank: where the jets point, and how they breathe #include "light/effects/EffectBase.h" #include "light/fluid.h" // the Stam solver: the medium itself @@ -56,9 +55,20 @@ class FluidEffect : public EffectBase { // would do and is a different solver. A panel is depth 1 and pays nothing for it. const bool medium = fluid_.resize(w, h, d); const size_t n = medium ? static_cast(w) * h * d * 3 : 0; + const size_t had = dyeA_.count(); dyeA_.resize(n); dyeB_.resize(n); carry_.resize(n); // the dither's error, sized here: tick() is MM_NONBLOCKING + // Same sample count but a different shape (8x16 to 16x8, or a cube reshaped): resize() kept + // the samples and they are laid out for the old geometry, so they would smear. BOTH planes, + // because the ping-pong swaps the spare one in on the very next frame and clearing only the + // live one leaves the stale picture one frame away. (A changed count needs no clear: + // resize() zero-fills when it reallocates.) The guard Trails and Nebula carry. + if (n > 0 && n == had && (w != planeW_ || h != planeH_ || d != planeD_)) { + std::memset(dyeA_.data(), 0, dyeA_.bytes()); + std::memset(dyeB_.data(), 0, dyeB_.bytes()); + } + planeW_ = w; planeH_ = h; planeD_ = d; started_ = false; pourCarry_ = 0; poured_ = false; @@ -155,6 +165,16 @@ class FluidEffect : public EffectBase { draw::blit16(canvas(), dye, w, h, d, carry_ ? carry_.data() : nullptr); } + /// Read-only access to the dye planes, for the reshape test: a rendered frame pours fresh dye + /// over a stale plane, so the picture cannot tell a cleared plane from an uncleared one. + std::size_t dyeSamples() const { return dyeA_.count() + dyeB_.count(); } + uint16_t dyeAt(std::size_t i) const { + const std::size_t n = dyeA_.count(); + if (i < n) return dyeA_.data()[i]; + const std::size_t j = i - n; + return j < dyeB_.count() ? dyeB_.data()[j] : 0; // past the end reads 0, never off it + } + private: /// The jets: velocity and dye together, so light enters where the medium is pushed. void pour(uint16_t* dye, lengthType w, lengthType h, lengthType d, uint32_t now) { @@ -251,6 +271,7 @@ class FluidEffect : public EffectBase { bool started_ = false; uint32_t lastMs_ = 0; uint32_t pourCarry_ = 0; ///< time owed to the jets, in ms + lengthType planeW_ = 0, planeH_ = 0, planeD_ = 0; ///< the shape the planes hold bool poured_ = false; ///< has the opening pour happened yet }; diff --git a/src/light/effects/NebulaEffect.h b/src/light/effects/NebulaEffect.h index 03accf7f..7416564f 100644 --- a/src/light/effects/NebulaEffect.h +++ b/src/light/effects/NebulaEffect.h @@ -1,9 +1,7 @@ #pragma once -#include "core/oscillators.h" // OscillatorBank: the drift, and the clock fieldRate counts #include "light/effects/EffectBase.h" // and core/noise.h with it: fbm8, curl16 -#include // memset: the reshape clear namespace mm { diff --git a/src/light/effects/PolarNoiseEffect.h b/src/light/effects/PolarNoiseEffect.h index 9b563c29..96bb8ffd 100644 --- a/src/light/effects/PolarNoiseEffect.h +++ b/src/light/effects/PolarNoiseEffect.h @@ -1,10 +1,6 @@ #pragma once -#include "core/math16.h" // kaleido, angle16 -#include "core/noise.h" // fbm8, warp8 -#include "core/oscillators.h" // OscillatorBank: the drift, as an oscillator #include "light/effects/EffectBase.h" -#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { diff --git a/src/light/effects/SpiralEffect.h b/src/light/effects/SpiralEffect.h index 71ebe4b6..d33b9963 100644 --- a/src/light/effects/SpiralEffect.h +++ b/src/light/effects/SpiralEffect.h @@ -1,8 +1,6 @@ #pragma once -#include "core/math16.h" // BeatPhase: the shared BPM accumulator #include "light/effects/EffectBase.h" -#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { diff --git a/src/light/effects/TrailsEffect.h b/src/light/effects/TrailsEffect.h index 1accd863..5cee44f3 100644 --- a/src/light/effects/TrailsEffect.h +++ b/src/light/effects/TrailsEffect.h @@ -1,6 +1,5 @@ #pragma once -#include "core/oscillators.h" // OscillatorBank: the emitters' motion and the breathing #include "light/effects/EffectBase.h" namespace mm { @@ -25,19 +24,30 @@ namespace mm { // ACCUMULATOR, not in the frame buffer. // // Cost: one advect (a bilinear sample per light) plus one noise sample per light for the flow, so -// the flow rule dominates. Volumetric: on a cube every slice is carried, and the flow's third -// component moves the trail through the volume rather than repeating a plane. +// the flow rule dominates. Volumetric: on a cube every slice gets its OWN flow, sampled at that +// slice's depth, so the slices differ rather than one plane repeating. Light is carried WITHIN a +// slice and not yet between them: `advect16`'s rule yields vx and vy only, so a trail does not +// travel through the volume. 3D transport needs a trilinear sampler and a vz, which is its own +// change. // @card TrailsEffect.png /// Effect: bright dots thrown into a flowing medium, leaving tails the flow carries and bends. class TrailsEffect : public EffectBase { public: const char* tags() const override { return "💫🖌️"; } // power-function showcase - Dim dimensions() const override { return Dim::D3; } // volumetric: the flow moves through z + Dim dimensions() const override { return Dim::D3; } // per-slice: each slice gets its own flow static constexpr uint8_t kMaxDots = 8; + static constexpr uint32_t kMaxEmitters = 64; ///< the ceiling once `dots` is scaled by the grid + + /// The head's radius for a fixture: one light on a panel, larger as the grid grows, capped so a + /// wall does not spend the frame drawing one head. + static lengthType spanRadius(lengthType span) { + const lengthType r = static_cast(span / 256 + 1); + return r > 4 ? 4 : r; + } uint8_t speed = 40; // how fast the medium moves, and with it every tail - uint8_t dots = 3; // how many emitters are throwing light in + uint8_t dots = 3; // emitter DENSITY: the count scales with the grid (see emitDots) uint8_t scale = 30; // the flow field's cell size: low = broad sweeps, high = eddies uint8_t persistence = 90; // how long a tail survives, as a half-life (see halfLifeMs) uint8_t breathe = 40; // how much the flow's strength rises and falls @@ -151,8 +161,11 @@ class TrailsEffect : public EffectBase { const int32_t ny = static_cast(inoise16(fx + 0x9E37u, fy + 0x7C15u, fz)) - 32768; // strength is the breathing multiplier in 1/256ths; step is the frame's travel budget. const int32_t amp = static_cast(step) * strength / 256; - vx = static_cast((nx * amp) >> 15); - vy = static_cast((ny * amp) >> 15); + // 64-bit for the product, as curl16 carries for the same reason: `amp` grows with a + // stalled dt, and a signed 32-bit multiply wraps rather than saturating, which reverses the + // flow instead of merely overdriving it. + vx = static_cast((static_cast(nx) * amp) >> 15); + vy = static_cast((static_cast(ny) * amp) >> 15); } /// The heads: a few bright points walking their own paths, each on the palette. @@ -167,12 +180,24 @@ class TrailsEffect : public EffectBase { /// value and fires on a budget, with the remainder carried, which is the pattern /// ParticlesEffect already uses for its fade. void emitDots(uint16_t* plane, lengthType w, lengthType h, lengthType d, uint32_t dt) { - const uint8_t n = dots < 1 ? 1 : (dots > kMaxDots ? kMaxDots : dots); + // `dots` is a DENSITY, not a count: the emitters scale with the fixture, because a handful + // of heads that fill a 64x64 panel are lost on a wall. Measured against the script, which + // already did this: three fixed dots put 1/567th of the light on a 768x348 panel. + const lengthType span = w > h ? w : h; + const lengthType rad = spanRadius(span); + const uint32_t area = static_cast(rad * 2 + 1) * (rad * 2 + 1); + const uint8_t want = dots < 1 ? 1 : (dots > kMaxDots ? kMaxDots : dots); + uint32_t scaled = static_cast(want) * w * h / (4096u * (area > 8u ? area / 9u : 1u)); + if (scaled < 1) scaled = 1; + if (scaled > kMaxEmitters) scaled = kMaxEmitters; + const uint8_t n = static_cast(scaled); constexpr uint32_t kReferenceMs = 20; emitCarry_ += dt; if (emitCarry_ < kReferenceMs) return; // not enough time has passed for a head yet - // Consume whole ticks and keep the remainder, so no time is lost to truncation and a slow - // frame does not emit a burst. + // One head per frame at most, and the remainder carries: a slow frame must not emit the + // burst it owes, because every head is a full disc and a stall would flood the plane. Below + // 50 fps this does cost heads (30/s at 30 fps against 50/s above 50), which is the trade + // taken deliberately; Fluid's jets cap the same debt rather than dropping it. emitCarry_ %= kReferenceMs; const uint32_t walk = bank_.unitValue(0); for (uint8_t i = 0; i < n; i++) { @@ -187,7 +212,7 @@ class TrailsEffect : public EffectBase { static_cast(i * (255u / n) + (walk >> 9))); // Written at the plane's width, so a head starts at full precision and the decay has // somewhere to go: writing a byte would put the whole tail in the top 8 bits. - writeWide(plane, w, h, d, px, py, pz, c); + writeWide(plane, w, h, d, px, py, pz, c, rad); } } @@ -201,12 +226,24 @@ class TrailsEffect : public EffectBase { /// One light at the plane's full width: an 8-bit color widened by repeating the byte, so 255 /// becomes 65535 rather than 65280 and a full-brightness head is genuinely full. static void writeWide(uint16_t* plane, lengthType w, lengthType h, lengthType d, - lengthType x, lengthType y, lengthType z, RGB c) { - if (x < 0 || y < 0 || z < 0 || x >= w || y >= h || z >= d) return; - const size_t off = (static_cast(z) * h * w + static_cast(y) * w + x) * 3; - plane[off + 0] = static_cast((c.r << 8) | c.r); - plane[off + 1] = static_cast((c.g << 8) | c.g); - plane[off + 2] = static_cast((c.b << 8) | c.b); + lengthType x, lengthType y, lengthType z, RGB c, lengthType rad) { + // A DISC, not a pixel. Advection spreads a head bilinearly, so after N frames one light's + // worth of brightness covers roughly N pixels: a single-pixel head on a multi-second tail + // arrives at about 1 part in 255 and the panel reads as a faint smear. The radius grows + // with the fixture, because the area a tail is spread over does too. + const lengthType rz = d > 1 ? rad : 0; + for (lengthType dz = -rz; dz <= rz; dz++) + for (lengthType dy = -rad; dy <= rad; dy++) + for (lengthType dx = -rad; dx <= rad; dx++) { + if (dx * dx + dy * dy + dz * dz > rad * rad) continue; + const lengthType px = x + dx, py = y + dy, pz = z + dz; + if (px < 0 || py < 0 || pz < 0 || px >= w || py >= h || pz >= d) continue; + const size_t off = (static_cast(pz) * h * w + + static_cast(py) * w + px) * 3; + plane[off + 0] = static_cast((c.r << 8) | c.r); + plane[off + 1] = static_cast((c.g << 8) | c.g); + plane[off + 2] = static_cast((c.b << 8) | c.b); + } } diff --git a/src/light/effects/TunnelEffect.h b/src/light/effects/TunnelEffect.h index be006caf..edf8f37e 100644 --- a/src/light/effects/TunnelEffect.h +++ b/src/light/effects/TunnelEffect.h @@ -1,9 +1,6 @@ #pragma once -#include "core/math16.h" // atan16, dist16, kaleido, BeatPhase -#include "core/noise.h" // fbm8: the tunnel wall texture #include "light/effects/EffectBase.h" -#include "light/polar.h" // PolarLut: the per-pixel angle and radius, precomputed namespace mm { diff --git a/src/light/moonlive/MoonLiveBuiltins_light.h b/src/light/moonlive/MoonLiveBuiltins_light.h index e15c6f2a..0ed4468e 100644 --- a/src/light/moonlive/MoonLiveBuiltins_light.h +++ b/src/light/moonlive/MoonLiveBuiltins_light.h @@ -862,8 +862,11 @@ extern "C" inline uint32_t mm_light_flowNoise(const uintptr_t* args, uint32_t, c const uint32_t fz = uint32_t(z) * cells + t / 4u; const int32_t nx = int32_t(inoise16(fx, fy, fz)) - 32768; const int32_t ny = int32_t(inoise16(fx + 0x9E37u, fy + 0x7C15u, fz)) - 32768; - vx = draw::pos_t((nx * strength) >> 15); - vy = draw::pos_t((ny * strength) >> 15); + // 64-bit: `strength` is a SCRIPT value and so unbounded, and a 32-bit + // product wraps rather than saturating. curl16 was widened for this; its + // noise sibling needs it more, not less. + vx = draw::pos_t((static_cast(nx) * strength) >> 15); + vy = draw::pos_t((static_cast(ny) * strength) >> 15); }, draw::Edge::Clamp); *f.front = !*f.front; // the destination now holds the trail return 0; @@ -916,7 +919,7 @@ extern "C" inline uint32_t mm_light_emitTrail(const uintptr_t* args, uint32_t, c if (!plane) return 0; const int32_t cx = signedArg(args[0]), cy = signedArg(args[1]), cz = signedArg(args[2]); const RGB c = colorFromPalette(*Palettes::active(), byteArg(args[3]), byteArg(args[4])); - const int32_t r = args ? signedArg(args[5]) : 0; + const int32_t r = signedArg(args[5]); const int32_t rad = r < 0 ? 0 : (r > 32 ? 32 : r); // a runaway radius is a full-frame loop const uint16_t wr = uint16_t((c.r << 8) | c.r); // widened by repeating the byte, so a const uint16_t wg = uint16_t((c.g << 8) | c.g); // full head is 65535 rather than 65280 diff --git a/src/light/moonlive/MoonLiveEffect.h b/src/light/moonlive/MoonLiveEffect.h index d6fca7e6..ac6cb79c 100644 --- a/src/light/moonlive/MoonLiveEffect.h +++ b/src/light/moonlive/MoonLiveEffect.h @@ -73,6 +73,12 @@ class MoonLiveEffect : public EffectBase { // unchanged script costs a read rather than a re-JIT. It reports the status and the dynamic // bytes itself, which is why nothing here repeats that. void prepare() override { + // The next tick is the first: it has no previous frame to measure against. Without this the + // frame after a disable, a re-enable or a resize hands the flow and the decay the whole + // interval the module sat idle, which teleports the trail and fades it away. Trails, Nebula + // and Fluid reset the same flag in prepare() for the same reason; setting it once at + // construction covers only the very first frame of the module's life. + tickStarted_ = false; // The script sizes its own pool from defineControls(), which sync() runs after a compile. script_.setPoolSizer([](void* ctx, uint16_t n) -> uint16_t { return static_cast(ctx)->particles_.resize(n); @@ -134,8 +140,13 @@ class MoonLiveEffect : public EffectBase { // pay. The binding owns the geometry, the ping-pong and the dt for the same reason it owns // the particle pool's frame scale: none of it is the script author's to get right. const uint32_t nowMs = elapsed(); - const uint32_t dt = nowMs - lastTickMs_; + // A zero delta on the first tick, and on the first after a disable: `nowMs - 0` hands the + // flow and the decay the whole uptime, which teleports the trail and fades it away on the + // frame it starts. Trails, Nebula and Fluid each carry this guard; the binding needs it for + // the same reason. + const uint32_t dt = tickStarted_ ? nowMs - lastTickMs_ : 0u; lastTickMs_ = nowMs; + tickStarted_ = true; if (trailA_) { moonlive::FlowSink f{}; f.a = trailA_.data(); @@ -201,29 +212,22 @@ class MoonLiveEffect : public EffectBase { // holds the trail, and the flow builtins flip it through a pointer. ScratchBuffer trailA_{*this}; ScratchBuffer trailB_{*this}; + ScratchBuffer trailCarry_{*this}; ///< the dither's per-channel error bool trailFront_ = true; uint32_t frameCount_ = 0; ///< the counter fieldRate reads bool trailWanted_ = false; uint32_t lastTickMs_ = 0; + bool tickStarted_ = false; ///< has a frame been timed yet + lengthType trailW_ = 0, trailH_ = 0, trailD_ = 0; ///< the shape the planes hold - /// The wide trail plane onto the layer. `draw::pixel` per light rather than a memcpy, because - /// the plane holds three uint16 per light while the layer holds `cpl` bytes: the widths differ - /// and so may the channel count. + /// The trail plane onto the layer. Through `draw::blit16` like the compiled effects: a + /// fourth hand-rolled copy of the narrowing loop is what left this one truncating where the + /// others dithered, which is the divergence blit16 exists to end. void blitTrail() { - const uint16_t* p = (trailFront_ ? trailA_ : trailB_).data(); - if (!p) return; - const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(), d = depth(); - const std::size_t samples = static_cast(w) * h * d * 3; - std::size_t i = 0; - for (lengthType z = 0; z < d; z++) - for (lengthType y = 0; y < h; y++) - for (lengthType x = 0; x < w; x++, i += 3) { - if (i + 2 >= samples) return; - draw::pixel(cv, {x, y, z}, RGB{static_cast(p[i] >> 8), - static_cast(p[i + 1] >> 8), - static_cast(p[i + 2] >> 8)}); - } + if (!trailA_ || !trailB_) return; + const uint16_t* live = trailFront_ ? trailA_.data() : trailB_.data(); + draw::blit16(canvas(), live, w, h, d, trailCarry_ ? trailCarry_.data() : nullptr); } /// Size (or free) the trail planes for the current fixture. Returns whether one is available, @@ -231,15 +235,34 @@ class MoonLiveEffect : public EffectBase { /// rendering nothing in silence. bool resizeTrail(bool want) { trailWanted_ = want; - if (!want) { trailA_.resize(0); trailB_.resize(0); return false; } - const size_t n = static_cast(width()) * height() * depth() * 3; - if (n == 0) { trailA_.resize(0); trailB_.resize(0); return false; } - if (!trailA_.resize(n) || !trailB_.resize(n)) { - trailA_.resize(0); trailB_.resize(0); // a half-allocated pair is worse than none + // Every exit frees all THREE buffers together: the carry is as much part of the trail as + // the planes, and leaving it behind on a failure path is memory nothing will ever read. + if (!want) { releaseTrail(); return false; } + const lengthType w = width(), h = height(), d = depth(); + const size_t n = static_cast(w) * h * d * 3; + if (n == 0) { releaseTrail(); return false; } + const size_t had = trailA_.count(); + if (!trailA_.resize(n) || !trailB_.resize(n) || !trailCarry_.resize(n)) { + releaseTrail(); // a half-allocated set is worse than none return false; } + // Same sample count but a different shape (8x16 to 16x8, or a cube reshaped): resize() kept + // the samples and they are laid out for the old geometry, so they would smear. BOTH planes, + // because the ping-pong swaps the spare one in on the very next frame. The guard Trails, + // Nebula and Fluid all carry; a scripted trail is no different. + if (n == had && (w != trailW_ || h != trailH_ || d != trailD_)) { + std::memset(trailA_.data(), 0, trailA_.bytes()); + std::memset(trailB_.data(), 0, trailB_.bytes()); + } + trailW_ = w; trailH_ = h; trailD_ = d; return true; } + + /// Free the trail set. One place, so a new buffer cannot be forgotten on one exit path. + void releaseTrail() { + trailA_.resize(0); trailB_.resize(0); trailCarry_.resize(0); + trailW_ = trailH_ = trailD_ = 0; + } }; } // namespace mm diff --git a/src/ui/migrate.js b/src/ui/migrate.js index 255154d7..d0029c75 100644 --- a/src/ui/migrate.js +++ b/src/ui/migrate.js @@ -27,6 +27,11 @@ export const FILE_RENAMES = { // merge made explicit when its value is deterministic; `review` flags what a map cannot decide. export const TYPE_RENAMES = { "Layers": { type: "Effects", date: "2026-08-08" }, + // Noise2D folded into Noise, which is Dim::D3 and renders the same field on a panel. `scale` + // carries; Noise2D's `speed` (a 0..15 divisor) has no equivalent, because Noise takes its rate + // from `bpm` on the shared beat clock rather than a per-effect divisor. + "Noise2DEffect": { type: "NoiseEffect", date: "2026-09-05", + review: "set bpm: Noise2D's speed (0..15) has no equivalent on the beat clock" }, // Infrared was rebuilt around learned-code ROWS, so the single-target controls it used to // carry (`code on/off`, `code brightness up`, ...) have no equivalent: the codes themselves // are gone and the remote has to be re-learned. The module carries over, which is what stops diff --git a/src/ui/preview3d.js b/src/ui/preview3d.js index c25910d6..1ebb5d3e 100644 --- a/src/ui/preview3d.js +++ b/src/ui/preview3d.js @@ -906,6 +906,7 @@ function drawVerts() { // Two passes so lit LEDs always sit ABOVE the grey placeholders. On a flat grid all LEDs share // a z-plane, so a single pass let draw order + z-fighting clip a lit dot behind a neighbor's // placeholder. Pass 1 draws the off-LED placeholders, pass 2 the lit ones with depthFunc LEQUAL + // so they land on top. // Placeholders do NOT write depth. They are decoration, not geometry: an unlit LED that // occupies the depth buffer HIDES every lit LED behind it, however transparent it looks, since // the depth test rejects the later fragment before its alpha is ever considered. That is what diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ae07040b..fc626bc5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -153,7 +153,6 @@ add_executable(mm_tests unit/light/unit_RotateModifier.cpp unit/light/unit_RegionModifier.cpp unit/light/unit_PinwheelModifier.cpp - unit/light/unit_NoiseEffect.cpp unit/light/unit_ParticlesEffect.cpp unit/light/unit_PlasmaEffect.cpp unit/light/unit_PreviewDriver.cpp diff --git a/test/scenarios/core/scenario_MoonModule_control_change.json b/test/scenarios/core/scenario_MoonModule_control_change.json index 4deeef62..bdaeb191 100644 --- a/test/scenarios/core/scenario_MoonModule_control_change.json +++ b/test/scenarios/core/scenario_MoonModule_control_change.json @@ -117,12 +117,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 130, + "p50": 134, "p95": 246, "min": 118, "max": 248, "n": 32, - "samples": [127, 124, 125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120] + "samples": [125, 126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120, 199, 193] }, "last_updated": "2026-09-05" }, @@ -299,12 +299,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 131, + "p50": 132, "p95": 238, "min": 118, "max": 247, "n": 32, - "samples": [129, 127, 127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118] + "samples": [127, 127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118, 131, 134] }, "last_updated": "2026-09-05" }, @@ -486,7 +486,7 @@ "min": 116, "max": 240, "n": 32, - "samples": [129, 128, 128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116] + "samples": [128, 128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116, 116, 122] }, "last_updated": "2026-09-05" }, @@ -671,12 +671,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 130, + "p50": 129, "p95": 247, "min": 118, "max": 261, "n": 32, - "samples": [128, 131, 128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118] + "samples": [128, 128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118, 120, 123] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index f84c596f..cd0a043b 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -105,12 +105,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 25, - "p95": 77, + "p50": 21, + "p95": 61, "min": 16, - "max": 89, + "max": 77, "n": 32, - "samples": [31, 89, 17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17] + "samples": [17, 17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16] }, "last_updated": "2026-09-05" }, @@ -202,12 +202,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 33, "p95": 202, "min": 17, "max": 404, "n": 32, - "samples": [79, 184, 18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27] + "samples": [18, 23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17] }, "last_updated": "2026-09-05" }, @@ -316,12 +316,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 37, + "p50": 33, "p95": 213, "min": 17, "max": 413, "n": 32, - "samples": [50, 152, 19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25] + "samples": [19, 24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18] }, "last_updated": "2026-09-05" }, @@ -413,12 +413,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 38, + "p50": 31, "p95": 125, "min": 19, "max": 184, "n": 32, - "samples": [48, 80, 23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31] + "samples": [23, 30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20] }, "last_updated": "2026-09-05" }, @@ -508,12 +508,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 36, + "p50": 32, "p95": 82, "min": 19, "max": 110, "n": 32, - "samples": [72, 64, 21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27] + "samples": [21, 26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21] }, "last_updated": "2026-09-05" }, @@ -603,12 +603,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, + "p50": 29, "p95": 105, - "min": 17, + "min": 16, "max": 142, "n": 32, - "samples": [34, 64, 19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17] + "samples": [19, 19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index 20b8ee77..f4316f81 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,12 +84,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 827, + "p50": 835, "p95": 890, "min": 474, "max": 890, - "n": 12, - "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871] + "n": 14, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871, 845, 856] }, "last_updated": "2026-09-05" } @@ -118,8 +118,8 @@ "p95": 334, "min": 207, "max": 334, - "n": 12, - "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334] + "n": 14, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334, 312, 322] }, "last_updated": "2026-09-05" } @@ -144,12 +144,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 185, + "p50": 186, "p95": 196, "min": 127, "max": 196, - "n": 12, - "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196] + "n": 14, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196, 187, 187] }, "last_updated": "2026-09-05" } @@ -174,12 +174,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 540, + "p50": 543, "p95": 581, "min": 303, "max": 581, - "n": 12, - "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581] + "n": 14, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581, 543, 554] }, "last_updated": "2026-09-05" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 933, + "p50": 936, "p95": 997, "min": 474, "max": 997, - "n": 12, - "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997] + "n": 14, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997, 937, 956] }, "last_updated": "2026-09-05" } @@ -238,8 +238,8 @@ "p95": 2116, "min": 785, "max": 2116, - "n": 11, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116] + "n": 13, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116, 1446, 1497] }, "last_updated": "2026-09-05" } @@ -268,8 +268,8 @@ "p95": 1920, "min": 507, "max": 1920, - "n": 12, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920] + "n": 14, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920, 1494, 1564] }, "last_updated": "2026-09-05" } @@ -294,12 +294,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1096, + "p50": 1103, "p95": 1211, "min": 333, "max": 1211, - "n": 12, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211] + "n": 14, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211, 1103, 1135] }, "last_updated": "2026-09-05" } diff --git a/test/scenarios/light/scenario_Driver_mutation.json b/test/scenarios/light/scenario_Driver_mutation.json index d3670664..2135b423 100644 --- a/test/scenarios/light/scenario_Driver_mutation.json +++ b/test/scenarios/light/scenario_Driver_mutation.json @@ -76,12 +76,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 37, + "p50": 32, "p95": 590, "min": 17, "max": 1843, "n": 32, - "samples": [56, 69, 19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19] + "samples": [19, 25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19, 20, 19] }, "last_updated": "2026-09-05" }, @@ -173,12 +173,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 39, + "p50": 32, "p95": 298, "min": 17, "max": 421, "n": 32, - "samples": [42, 58, 17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27] + "samples": [17, 25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27, 20, 20] }, "last_updated": "2026-09-05" }, @@ -270,12 +270,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 36, + "p50": 32, "p95": 257, "min": 18, "max": 339, "n": 32, - "samples": [49, 61, 20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24] + "samples": [20, 29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24, 20, 20] }, "last_updated": "2026-09-05" }, @@ -365,12 +365,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 38, + "p50": 33, "p95": 120, "min": 17, "max": 173, "n": 32, - "samples": [71, 68, 20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19] + "samples": [20, 33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19, 20, 20] }, "last_updated": "2026-09-05" }, @@ -460,12 +460,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 29, "p95": 267, "min": 17, "max": 316, "n": 32, - "samples": [94, 87, 19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23] + "samples": [19, 27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23, 20, 20] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Effects_composition.json b/test/scenarios/light/scenario_Effects_composition.json index ad1a293e..019289f2 100644 --- a/test/scenarios/light/scenario_Effects_composition.json +++ b/test/scenarios/light/scenario_Effects_composition.json @@ -106,12 +106,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 485, + "p50": 370, "p95": 1253, "min": 142, "max": 1335, "n": 32, - "samples": [507, 742, 252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145] + "samples": [252, 253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145, 146, 148] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index 8bb4547e..b9ef1fb3 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -89,8 +89,8 @@ "p95": 387, "min": 189, "max": 387, - "n": 13, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302] + "n": 15, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302, 291, 286] }, "last_updated": "2026-09-05" } @@ -119,8 +119,8 @@ "p95": 313, "min": 183, "max": 313, - "n": 13, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297] + "n": 15, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297, 283, 288] }, "last_updated": "2026-09-05" } @@ -145,12 +145,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 281, + "p50": 282, "p95": 303, "min": 168, "max": 303, - "n": 13, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303] + "n": 15, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303, 284, 286] }, "last_updated": "2026-09-05" } @@ -175,12 +175,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 278, + "p50": 281, "p95": 301, "min": 168, "max": 301, - "n": 13, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301] + "n": 15, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301, 281, 287] }, "last_updated": "2026-09-05" } @@ -205,12 +205,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 138, + "p50": 140, "p95": 147, "min": 83, "max": 147, - "n": 13, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147] + "n": 15, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147, 141, 144] }, "last_updated": "2026-09-05" } @@ -235,12 +235,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 417, + "p50": 420, "p95": 501, "min": 250, "max": 501, - "n": 13, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444] + "n": 15, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444, 420, 451] }, "last_updated": "2026-09-05" } @@ -271,12 +271,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1206, + "p50": 1218, "p95": 1298, "min": 960, "max": 1298, - "n": 13, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298] + "n": 15, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298, 1269, 1240] }, "last_updated": "2026-09-05" } @@ -301,12 +301,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 479, - "p95": 590, + "p50": 480, + "p95": 604, "min": 460, - "max": 590, - "n": 13, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506] + "max": 604, + "n": 15, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506, 482, 604] }, "last_updated": "2026-09-05" } diff --git a/test/scenarios/light/scenario_Fluid_solver.json b/test/scenarios/light/scenario_Fluid_solver.json index ced1d178..ec77a2de 100644 --- a/test/scenarios/light/scenario_Fluid_solver.json +++ b/test/scenarios/light/scenario_Fluid_solver.json @@ -80,10 +80,10 @@ "tick_us": { "p50": 30, "p95": 31, - "min": 30, + "min": 29, "max": 31, - "n": 4, - "samples": [30, 30, 30, 31] + "n": 8, + "samples": [30, 30, 30, 31, 30, 31, 29, 31] }, "last_updated": "2026-09-05" } @@ -100,12 +100,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 20, + "p50": 19, "p95": 20, "min": 19, "max": 20, - "n": 4, - "samples": [20, 20, 20, 19] + "n": 8, + "samples": [20, 20, 20, 19, 19, 19, 20, 19] }, "last_updated": "2026-09-05" } @@ -122,12 +122,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 69, + "p50": 68, "p95": 70, - "min": 68, + "min": 66, "max": 70, - "n": 4, - "samples": [69, 69, 68, 70] + "n": 8, + "samples": [69, 69, 68, 70, 68, 68, 66, 68] }, "last_updated": "2026-09-05" } @@ -144,12 +144,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 29, "p95": 31, - "min": 30, + "min": 29, "max": 31, - "n": 4, - "samples": [30, 31, 30, 30] + "n": 8, + "samples": [30, 31, 30, 30, 29, 29, 29, 29] }, "last_updated": "2026-09-05" } @@ -157,7 +157,7 @@ }, { "name": "grid-64", - "description": "Double each side under a running solver: four times the cells, and every one of the six grids is reallocated in prepare(). A solver that carried its old grid over would be addressing cells that no longer exist.", + "description": "Widen to 64 under a running solver, height still 32: one dimension doubled, so twice the cells, and every one of the six grids is reallocated in prepare(). A solver that carried its old grid over would be addressing cells that no longer exist.", "op": "set_control", "id": "Grid", "key": "width", @@ -166,12 +166,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 65, + "p50": 64, "p95": 66, - "min": 64, + "min": 63, "max": 66, - "n": 4, - "samples": [64, 65, 65, 66] + "n": 8, + "samples": [64, 65, 65, 66, 66, 64, 64, 63] }, "last_updated": "2026-09-05" } @@ -187,16 +187,17 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 134, + "p50": 133, "p95": 138, - "min": 133, + "min": 130, "max": 138, - "n": 4, - "samples": [133, 134, 138, 136] + "n": 8, + "samples": [133, 134, 138, 136, 134, 131, 130, 132] }, "last_updated": "2026-09-05" } - } + }, + "description": "And the height, making it 64x64: four times the cells of the 32x32 the pair started from. Reallocating on each axis separately is the shape a UI resize actually takes." }, { "name": "all-jets", @@ -209,12 +210,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 136, + "p50": 133, "p95": 140, - "min": 133, + "min": 131, "max": 140, - "n": 4, - "samples": [133, 140, 137, 136] + "n": 8, + "samples": [133, 140, 137, 136, 135, 131, 132, 131] }, "last_updated": "2026-09-05" } @@ -231,12 +232,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 135, - "p95": 141, - "min": 134, - "max": 141, - "n": 4, - "samples": [134, 141, 138, 135] + "p50": 134, + "p95": 147, + "min": 130, + "max": 147, + "n": 8, + "samples": [134, 141, 138, 135, 147, 134, 130, 131] }, "last_updated": "2026-09-05" } @@ -253,12 +254,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 38, - "p95": 39, - "min": 36, - "max": 39, - "n": 3, - "samples": [39, 38, 36] + "p50": 36, + "p95": 40, + "min": 35, + "max": 40, + "n": 7, + "samples": [39, 38, 36, 40, 36, 35, 36] }, "last_updated": "2026-09-05" } @@ -278,8 +279,8 @@ "p95": 12, "min": 11, "max": 12, - "n": 3, - "samples": [12, 11, 11] + "n": 7, + "samples": [12, 11, 11, 11, 11, 11, 11] }, "last_updated": "2026-09-05" } @@ -295,12 +296,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 232, + "p50": 222, "p95": 249, - "min": 229, + "min": 220, "max": 249, - "n": 3, - "samples": [249, 232, 229] + "n": 7, + "samples": [249, 232, 229, 220, 220, 220, 222] }, "last_updated": "2026-09-05" } @@ -321,8 +322,8 @@ "p95": 12, "min": 11, "max": 12, - "n": 3, - "samples": [12, 11, 11] + "n": 7, + "samples": [12, 11, 11, 11, 11, 11, 11] }, "last_updated": "2026-09-05" } @@ -339,12 +340,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 8, "p95": 29, - "min": 9, + "min": 8, "max": 29, - "n": 4, - "samples": [29, 9, 9, 9] + "n": 8, + "samples": [29, 9, 9, 9, 8, 8, 8, 8] }, "last_updated": "2026-09-05" } @@ -362,10 +363,10 @@ "tick_us": { "p50": 7, "p95": 7, - "min": 7, + "min": 6, "max": 7, - "n": 4, - "samples": [7, 7, 7, 7] + "n": 8, + "samples": [7, 7, 7, 7, 6, 7, 6, 7] }, "last_updated": "2026-09-05" } diff --git a/test/scenarios/light/scenario_GridBlacks_blackpixel.json b/test/scenarios/light/scenario_GridBlacks_blackpixel.json index dd1de86d..c8ae6c00 100644 --- a/test/scenarios/light/scenario_GridBlacks_blackpixel.json +++ b/test/scenarios/light/scenario_GridBlacks_blackpixel.json @@ -95,7 +95,7 @@ "min": 1, "max": 27, "n": 32, - "samples": [2, 2, 3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1] + "samples": [3, 10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -198,7 +198,7 @@ "min": 2, "max": 73, "n": 32, - "samples": [3, 3, 4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2] + "samples": [4, 73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2, 2, 2] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_GridLayout_resize.json b/test/scenarios/light/scenario_GridLayout_resize.json index ccfaa4bb..66fe8b90 100644 --- a/test/scenarios/light/scenario_GridLayout_resize.json +++ b/test/scenarios/light/scenario_GridLayout_resize.json @@ -117,12 +117,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 129, + "p50": 128, "p95": 311, "min": 117, "max": 316, "n": 32, - "samples": [124, 209, 127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117] + "samples": [127, 170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117, 119, 122] }, "last_updated": "2026-09-05" }, @@ -299,12 +299,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 69, - "p95": 161, + "p50": 68, + "p95": 145, "min": 59, - "max": 177, + "max": 161, "n": 32, - "samples": [67, 177, 68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59] + "samples": [68, 141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59, 64, 65] }, "last_updated": "2026-09-05" }, @@ -486,7 +486,7 @@ "min": 116, "max": 309, "n": 32, - "samples": [129, 127, 128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116] + "samples": [128, 164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116, 120, 122] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Layer_base_pipeline.json b/test/scenarios/light/scenario_Layer_base_pipeline.json index b39021f5..c4a9d569 100644 --- a/test/scenarios/light/scenario_Layer_base_pipeline.json +++ b/test/scenarios/light/scenario_Layer_base_pipeline.json @@ -88,7 +88,7 @@ "min": 64, "max": 245, "n": 32, - "samples": [67, 75, 189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64] + "samples": [189, 64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64, 66, 66] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Layer_memory_1to1.json b/test/scenarios/light/scenario_Layer_memory_1to1.json index 5993979b..b8be103d 100644 --- a/test/scenarios/light/scenario_Layer_memory_1to1.json +++ b/test/scenarios/light/scenario_Layer_memory_1to1.json @@ -85,7 +85,7 @@ "min": 5, "max": 229, "n": 32, - "samples": [5, 5, 5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6] + "samples": [5, 6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6, 5, 5] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Layouts_mutation.json b/test/scenarios/light/scenario_Layouts_mutation.json index 048f38c8..58f14401 100644 --- a/test/scenarios/light/scenario_Layouts_mutation.json +++ b/test/scenarios/light/scenario_Layouts_mutation.json @@ -78,12 +78,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, - "p95": 354, + "p50": 29, + "p95": 79, "min": 16, - "max": 437, + "max": 354, "n": 32, - "samples": [54, 437, 17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17] + "samples": [17, 22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17, 16, 16] }, "last_updated": "2026-09-05" }, @@ -206,12 +206,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 86, - "p95": 633, - "min": 44, - "max": 714, + "p50": 75, + "p95": 180, + "min": 43, + "max": 633, "n": 32, - "samples": [236, 714, 46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45] + "samples": [46, 51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45, 43, 48] }, "last_updated": "2026-09-05" }, @@ -329,12 +329,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 169, - "p95": 1211, + "p50": 156, + "p95": 381, "min": 88, - "max": 1486, + "max": 554, "n": 32, - "samples": [1486, 1211, 89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88] + "samples": [89, 93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88, 92, 94] }, "last_updated": "2026-09-05" }, @@ -451,12 +451,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 31, - "p95": 293, + "p50": 27, + "p95": 68, "min": 16, - "max": 409, + "max": 293, "n": 32, - "samples": [126, 409, 20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17] + "samples": [20, 21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17, 20, 20] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json index c91e1ba9..3478b839 100644 --- a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json +++ b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json @@ -88,12 +88,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 132, + "p50": 10, + "p95": 71, "min": 5, - "max": 1050, + "max": 93, "n": 32, - "samples": [5, 7, 132, 1050, 17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5] + "samples": [17, 15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6] }, "last_updated": "2026-09-05" }, @@ -206,12 +206,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 482, + "p50": 9, + "p95": 25, "min": 5, - "max": 1656, + "max": 34, "n": 32, - "samples": [5, 6, 482, 1656, 16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5] + "samples": [16, 12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -316,12 +316,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 33, + "p50": 10, + "p95": 28, "min": 5, - "max": 184, + "max": 33, "n": 32, - "samples": [5, 6, 22, 184, 20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5] + "samples": [20, 33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5] }, "last_updated": "2026-09-05" }, @@ -426,12 +426,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 14, - "p95": 151, + "p50": 11, + "p95": 29, "min": 5, - "max": 309, + "max": 31, "n": 32, - "samples": [5, 6, 309, 151, 25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5] + "samples": [25, 31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -529,12 +529,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, - "p95": 208, + "p50": 11, + "p95": 41, "min": 5, - "max": 464, + "max": 60, "n": 32, - "samples": [5, 6, 208, 464, 15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5] + "samples": [15, 41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -633,11 +633,11 @@ "desktop-macos": { "tick_us": { "p50": 11, - "p95": 187, + "p95": 28, "min": 5, - "max": 282, + "max": 29, "n": 32, - "samples": [5, 6, 187, 282, 14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5] + "samples": [14, 28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5] }, "last_updated": "2026-09-05" }, @@ -724,6 +724,72 @@ } } }, + { + "name": "transpose-grid-h", + "description": "Make it 16x8, then 8x16 below: the SAME sample count in a different shape. resize() keeps the buffer and its contents, which are laid out for the old geometry, so a scripted trail must clear both of its planes or the previous picture smears across the new one. The compiled effects each carry this guard; the binding does it on the script's behalf.", + "op": "set_control", + "id": "Grid", + "key": "height", + "value": 8, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 5, + "p95": 5, + "min": 5, + "max": 5, + "n": 2, + "samples": [5, 5] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "transpose-grid-w", + "description": "And the transpose: 8 wide by 16 high, the same count again. The pair proves the clear fires on a reshape rather than only on a size change, in both directions.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 8, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 5, + "p95": 5, + "min": 5, + "max": 5, + "n": 2, + "samples": [5, 5] + }, + "last_updated": "2026-09-05" + } + } + }, + { + "name": "transpose-restore", + "description": "Back to the square the rest of the scenario assumes.", + "op": "set_control", + "id": "Grid", + "key": "width", + "value": 16, + "measure": true, + "observed": { + "desktop-macos": { + "tick_us": { + "p50": 5, + "p95": 5, + "min": 5, + "max": 5, + "n": 2, + "samples": [5, 5] + }, + "last_updated": "2026-09-05" + } + } + }, { "name": "remove-moonlive", "description": "Remove the scripted effect. release frees the exec block; the Layer keeps rendering (now empty). Measures add/remove robustness.", @@ -733,12 +799,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, - "p95": 81, + "p50": 11, + "p95": 24, "min": 5, - "max": 113, + "max": 64, "n": 32, - "samples": [5, 6, 113, 81, 19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5] + "samples": [19, 64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -837,11 +903,11 @@ "desktop-macos": { "tick_us": { "p50": 10, - "p95": 32, + "p95": 29, "min": 5, - "max": 169, + "max": 32, "n": 32, - "samples": [5, 6, 169, 9, 17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5] + "samples": [17, 27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -939,12 +1005,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 37, + "p50": 9, + "p95": 31, "min": 5, - "max": 728, + "max": 37, "n": 32, - "samples": [5, 6, 728, 26, 15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6] + "samples": [15, 12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6, 6, 5, 5, 5] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_MoonLive_pipeline.json b/test/scenarios/light/scenario_MoonLive_pipeline.json index 7fd78234..194d20b0 100644 --- a/test/scenarios/light/scenario_MoonLive_pipeline.json +++ b/test/scenarios/light/scenario_MoonLive_pipeline.json @@ -379,7 +379,7 @@ "min": 5, "max": 267, "n": 32, - "samples": [5, 5, 5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5] + "samples": [5, 6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, @@ -536,7 +536,7 @@ "min": 4, "max": 559, "n": 32, - "samples": [5, 5, 5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6] + "samples": [5, 6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6, 5, 5] }, "last_updated": "2026-09-05" }, @@ -687,7 +687,7 @@ "min": 5, "max": 520, "n": 32, - "samples": [5, 5, 5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6] + "samples": [5, 6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6, 5, 5] }, "last_updated": "2026-09-05" }, @@ -989,7 +989,7 @@ "min": 5, "max": 117, "n": 32, - "samples": [5, 5, 5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6] + "samples": [5, 6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6, 5, 5] }, "last_updated": "2026-09-05" }, @@ -1131,7 +1131,7 @@ "min": 5, "max": 397, "n": 32, - "samples": [5, 5, 5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5] + "samples": [5, 6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json index 091abadd..e370f27e 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json +++ b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json @@ -94,7 +94,7 @@ "min": 2, "max": 241, "n": 32, - "samples": [3, 3, 3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3] + "samples": [3, 3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3, 2, 2] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json index 035eb3c0..b038ab01 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json +++ b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json @@ -94,7 +94,7 @@ "min": 117, "max": 302, "n": 32, - "samples": [133, 125, 133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117] + "samples": [133, 126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117, 119, 119] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_Trails_ladder.json b/test/scenarios/light/scenario_Trails_ladder.json index 756afc00..29945761 100644 --- a/test/scenarios/light/scenario_Trails_ladder.json +++ b/test/scenarios/light/scenario_Trails_ladder.json @@ -86,12 +86,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, + "p50": 11, "p95": 11, "min": 10, "max": 11, - "n": 5, - "samples": [11, 10, 10, 10, 11] + "n": 8, + "samples": [11, 10, 10, 10, 11, 11, 11, 11] }, "last_updated": "2026-09-05" } @@ -123,12 +123,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 42, + "p50": 45, "p95": 57, "min": 40, "max": 57, - "n": 5, - "samples": [57, 40, 42, 41, 45] + "n": 8, + "samples": [57, 40, 42, 41, 45, 45, 45, 45] }, "last_updated": "2026-09-05" } @@ -160,12 +160,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 166, + "p50": 178, "p95": 208, "min": 160, "max": 208, - "n": 5, - "samples": [208, 160, 166, 165, 182] + "n": 8, + "samples": [208, 160, 166, 165, 182, 178, 180, 184] }, "last_updated": "2026-09-05" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 324, + "p50": 331, "p95": 358, "min": 313, "max": 358, - "n": 5, - "samples": [323, 313, 331, 324, 358] + "n": 8, + "samples": [323, 313, 331, 324, 358, 348, 353, 357] }, "last_updated": "2026-09-05" } @@ -234,12 +234,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 332, + "p50": 334, "p95": 442, "min": 312, "max": 442, - "n": 5, - "samples": [321, 312, 334, 332, 442] + "n": 8, + "samples": [321, 312, 334, 332, 442, 353, 358, 354] }, "last_updated": "2026-09-05" } @@ -264,12 +264,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 336, + "p50": 350, "p95": 359, "min": 312, "max": 359, - "n": 5, - "samples": [319, 312, 336, 350, 359] + "n": 8, + "samples": [319, 312, 336, 350, 359, 351, 354, 354] }, "last_updated": "2026-09-05" } @@ -312,8 +312,8 @@ "p95": 183, "min": 164, "max": 183, - "n": 5, - "samples": [164, 169, 169, 166, 183] + "n": 8, + "samples": [164, 169, 169, 166, 183, 178, 180, 182] }, "last_updated": "2026-09-05" } diff --git a/test/scenarios/light/scenario_modifier_chain.json b/test/scenarios/light/scenario_modifier_chain.json index 2cd97f49..9cd8731f 100644 --- a/test/scenarios/light/scenario_modifier_chain.json +++ b/test/scenarios/light/scenario_modifier_chain.json @@ -101,12 +101,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 17, + "p50": 16, "p95": 86, "min": 8, "max": 163, "n": 32, - "samples": [35, 32, 8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9] + "samples": [8, 163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9, 8, 9] }, "last_updated": "2026-09-05" }, @@ -166,7 +166,7 @@ "min": 6, "max": 86, "n": 32, - "samples": [17, 24, 7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7] + "samples": [7, 26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7, 6, 9] }, "last_updated": "2026-09-05" }, @@ -219,12 +219,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 46, + "p50": 41, "p95": 94, "min": 21, "max": 143, "n": 32, - "samples": [55, 72, 24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21] + "samples": [24, 29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21, 21, 24] }, "last_updated": "2026-09-05" }, @@ -252,12 +252,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 77, + "p50": 72, "p95": 138, - "min": 41, + "min": 40, "max": 473, "n": 32, - "samples": [108, 125, 45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42] + "samples": [45, 62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42, 40, 44] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_modifier_swap.json b/test/scenarios/light/scenario_modifier_swap.json index a1576adf..24e512ba 100644 --- a/test/scenarios/light/scenario_modifier_swap.json +++ b/test/scenarios/light/scenario_modifier_swap.json @@ -151,12 +151,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 17, - "p95": 148, + "p50": 16, + "p95": 87, "min": 8, "max": 246, "n": 32, - "samples": [28, 148, 8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8] + "samples": [8, 8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8] }, "last_updated": "2026-09-05" }, @@ -295,12 +295,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 43, - "p95": 206, + "p50": 42, + "p95": 160, "min": 20, "max": 321, "n": 32, - "samples": [73, 206, 22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21] + "samples": [22, 23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21, 20, 22] }, "last_updated": "2026-09-05" }, @@ -444,7 +444,7 @@ "min": 8, "max": 513, "n": 32, - "samples": [37, 62, 9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9] + "samples": [9, 10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9, 11, 10] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_perf_full.json b/test/scenarios/light/scenario_perf_full.json index 0fb3d766..65bdd9e4 100644 --- a/test/scenarios/light/scenario_perf_full.json +++ b/test/scenarios/light/scenario_perf_full.json @@ -85,12 +85,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 11, "min": 1, "max": 22, "n": 32, - "samples": [5, 7, 2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -205,12 +205,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 15, "min": 1, "max": 51, "n": 32, - "samples": [5, 7, 2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -325,12 +325,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 12, "min": 1, "max": 28, "n": 32, - "samples": [5, 7, 2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -568,12 +568,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 9, "min": 1, "max": 31, "n": 32, - "samples": [6, 6, 2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -686,12 +686,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 26, "min": 1, "max": 70, "n": 32, - "samples": [7, 8, 2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -815,12 +815,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 13, "min": 1, "max": 13, "n": 32, - "samples": [5, 7, 2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -948,12 +948,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 9, "min": 1, "max": 11, "n": 32, - "samples": [5, 9, 2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -1055,12 +1055,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 13, "min": 1, "max": 21, "n": 32, - "samples": [5, 7, 2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -1168,12 +1168,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 11, "min": 1, "max": 26, "n": 32, - "samples": [5, 7, 2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -1292,12 +1292,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 19, + "p50": 16, "p95": 136, "min": 4, "max": 167, "n": 32, - "samples": [21, 27, 10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4] + "samples": [10, 9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -1416,12 +1416,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 82, + "p50": 73, "p95": 255, "min": 17, "max": 346, "n": 32, - "samples": [99, 141, 43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18] + "samples": [43, 41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18, 17, 18] }, "last_updated": "2026-09-05" }, @@ -1540,12 +1540,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 349, + "p50": 303, "p95": 1023, "min": 70, "max": 2016, "n": 32, - "samples": [440, 562, 186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74] + "samples": [186, 178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74, 71, 70] }, "last_updated": "2026-09-05" }, @@ -1672,12 +1672,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 7, "p95": 18, "min": 4, "max": 28, "n": 32, - "samples": [9, 14, 4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -1796,12 +1796,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 30, "p95": 87, "min": 15, "max": 108, "n": 32, - "samples": [42, 55, 18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16] + "samples": [18, 18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16, 16, 16] }, "last_updated": "2026-09-05" }, @@ -1920,12 +1920,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 140, + "p50": 120, "p95": 398, "min": 61, "max": 662, "n": 32, - "samples": [218, 235, 73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65] + "samples": [73, 74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65, 64, 63] }, "last_updated": "2026-09-05" }, @@ -2044,12 +2044,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 558, + "p50": 489, "p95": 2011, "min": 247, "max": 12932, "n": 32, - "samples": [1059, 930, 293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265] + "samples": [293, 289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265, 251, 255] }, "last_updated": "2026-09-05" }, @@ -2208,7 +2208,7 @@ "min": 1, "max": 13, "n": 32, - "samples": [3, 3, 1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1] + "samples": [1, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -2327,12 +2327,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 7, "p95": 20, "min": 4, "max": 23, "n": 32, - "samples": [10, 13, 4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -2451,12 +2451,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 30, "p95": 74, "min": 15, "max": 113, "n": 32, - "samples": [35, 65, 18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16] + "samples": [18, 17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16, 15, 16] }, "last_updated": "2026-09-05" }, @@ -2575,12 +2575,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 141, + "p50": 120, "p95": 570, "min": 62, "max": 574, "n": 32, - "samples": [157, 249, 72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66] + "samples": [72, 71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66, 63, 64] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_perf_light.json b/test/scenarios/light/scenario_perf_light.json index 64267e29..b52d203e 100644 --- a/test/scenarios/light/scenario_perf_light.json +++ b/test/scenarios/light/scenario_perf_light.json @@ -101,12 +101,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 4, "p95": 10, "min": 1, "max": 10, "n": 32, - "samples": [5, 7, 2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1] + "samples": [2, 2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -336,9 +336,9 @@ "min": 1, "max": 3, "n": 32, - "samples": [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1] + "samples": [1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1] }, - "last_updated": "2026-09-03" + "last_updated": "2026-09-05" }, "esp32s3-n16r8": { "tick_us": { @@ -454,7 +454,7 @@ "min": 1, "max": 4, "n": 32, - "samples": [3, 3, 1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1] + "samples": [1, 1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-05" }, @@ -573,12 +573,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 24, + "p50": 7, + "p95": 23, "min": 4, "max": 49, "n": 32, - "samples": [13, 24, 4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -697,12 +697,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 30, "p95": 76, "min": 15, "max": 78, "n": 32, - "samples": [47, 60, 18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16] + "samples": [18, 18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16, 15, 15] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_peripheral_grid_sweep.json b/test/scenarios/light/scenario_peripheral_grid_sweep.json index 1c1b150b..281cdf92 100644 --- a/test/scenarios/light/scenario_peripheral_grid_sweep.json +++ b/test/scenarios/light/scenario_peripheral_grid_sweep.json @@ -173,12 +173,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 20, + "p50": 7, + "p95": 14, "min": 4, - "max": 33, + "max": 20, "n": 32, - "samples": [9, 33, 4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -300,12 +300,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 35, - "p95": 88, + "p50": 31, + "p95": 74, "min": 15, - "max": 160, + "max": 88, "n": 32, - "samples": [48, 160, 18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17] + "samples": [18, 18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17, 16, 16] }, "last_updated": "2026-09-05" }, @@ -427,12 +427,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 144, - "p95": 287, + "p50": 123, + "p95": 241, "min": 62, "max": 298, "n": 32, - "samples": [172, 287, 74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65] + "samples": [74, 71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65, 63, 63] }, "last_updated": "2026-09-05" }, @@ -554,12 +554,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 580, - "p95": 1401, + "p50": 485, + "p95": 1394, "min": 247, - "max": 2629, + "max": 1401, "n": 32, - "samples": [595, 2629, 299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264] + "samples": [299, 285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264, 252, 255] }, "last_updated": "2026-09-05" }, @@ -702,12 +702,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 8, "p95": 35, "min": 4, "max": 36, "n": 32, - "samples": [9, 14, 4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4, 4, 5] }, "last_updated": "2026-09-05" }, @@ -829,12 +829,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 35, - "p95": 121, + "p50": 30, + "p95": 98, "min": 15, - "max": 137, + "max": 121, "n": 32, - "samples": [35, 137, 18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16] + "samples": [18, 17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16, 15, 15] }, "last_updated": "2026-09-05" }, @@ -956,12 +956,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 139, + "p50": 121, "p95": 315, "min": 61, "max": 331, "n": 32, - "samples": [139, 272, 74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68] + "samples": [74, 69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68, 62, 64] }, "last_updated": "2026-09-05" }, @@ -1083,12 +1083,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 560, + "p50": 481, "p95": 1281, "min": 249, "max": 1396, "n": 32, - "samples": [592, 1042, 305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263] + "samples": [305, 280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263, 254, 254] }, "last_updated": "2026-09-05" }, @@ -1231,12 +1231,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 8, "p95": 18, "min": 4, "max": 53, "n": 32, - "samples": [9, 17, 4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -1358,12 +1358,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 35, + "p50": 30, "p95": 74, "min": 15, "max": 138, "n": 32, - "samples": [35, 51, 19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16] + "samples": [19, 17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16, 16, 15] }, "last_updated": "2026-09-05" }, @@ -1485,12 +1485,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 140, + "p50": 120, "p95": 275, "min": 62, "max": 294, "n": 32, - "samples": [152, 225, 96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66] + "samples": [96, 70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66, 64, 63] }, "last_updated": "2026-09-05" }, @@ -1612,12 +1612,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 558, - "p95": 1188, + "p50": 436, + "p95": 995, "min": 247, - "max": 1378, + "max": 1188, "n": 32, - "samples": [569, 1378, 305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262] + "samples": [305, 278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262, 251, 254] }, "last_updated": "2026-09-05" }, @@ -1760,12 +1760,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 20, + "p50": 7, + "p95": 14, "min": 4, - "max": 32, + "max": 20, "n": 32, - "samples": [11, 32, 4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4] + "samples": [4, 4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -1887,12 +1887,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 35, - "p95": 73, + "p50": 27, + "p95": 64, "min": 15, "max": 144, "n": 32, - "samples": [37, 73, 19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16] + "samples": [19, 18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16, 16, 15] }, "last_updated": "2026-09-05" }, @@ -2014,12 +2014,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 140, - "p95": 447, + "p50": 109, + "p95": 321, "min": 61, - "max": 634, + "max": 447, "n": 32, - "samples": [177, 634, 74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65] + "samples": [74, 72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65, 63, 64] }, "last_updated": "2026-09-05" }, @@ -2141,12 +2141,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 568, - "p95": 1685, + "p50": 437, + "p95": 1612, "min": 246, - "max": 2098, + "max": 1685, "n": 32, - "samples": [1519, 2098, 305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271] + "samples": [305, 279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271, 249, 255] }, "last_updated": "2026-09-05" }, diff --git a/test/scenarios/light/scenario_peripheral_switch.json b/test/scenarios/light/scenario_peripheral_switch.json index 9ddaeb38..3500a829 100644 --- a/test/scenarios/light/scenario_peripheral_switch.json +++ b/test/scenarios/light/scenario_peripheral_switch.json @@ -172,12 +172,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 21, + "p50": 8, + "p95": 16, "min": 4, - "max": 38, + "max": 17, "n": 32, - "samples": [38, 21, 5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [5, 4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -293,12 +293,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 39, + "p50": 7, + "p95": 16, "min": 4, - "max": 58, + "max": 29, "n": 32, - "samples": [39, 58, 5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [5, 4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -414,12 +414,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 69, + "p50": 7, + "p95": 17, "min": 4, - "max": 160, + "max": 22, "n": 32, - "samples": [69, 160, 5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [5, 4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -534,12 +534,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 20, + "p50": 8, + "p95": 17, "min": 4, - "max": 358, + "max": 17, "n": 32, - "samples": [20, 358, 5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4] + "samples": [5, 4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -655,12 +655,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 26, + "p50": 8, + "p95": 17, "min": 4, "max": 65, "n": 32, - "samples": [16, 26, 6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [6, 4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, @@ -792,12 +792,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 24, + "p50": 8, + "p95": 18, "min": 4, - "max": 29, + "max": 24, "n": 32, - "samples": [29, 12, 6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4] + "samples": [6, 4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, "last_updated": "2026-09-05" }, diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index 43aef2a2..6c1e3d56 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -31,9 +31,10 @@ // uses the first call as the time base only. Verified as the SOLE cause by reproducing the old // first-tick behaviour on top of BeatPhase and watching the original hash return. // -// The control cases prove it: WaveEffect and NoiseEffect ALREADY carried that guard, and their -// hashes did NOT move across the same migration. So a moved hash here means "this effect gained the -// guard", not "the migration drifted". +// The control case proves it: WaveEffect ALREADY carried that guard, and its hash did NOT move +// across the same migration. So a moved hash here means "this effect gained the guard", not "the +// migration drifted". (NoiseEffect was a second control case until the gradient-noise swap and the +// two-noise merge moved its hash for reasons of their own, recorded below.) // // Every other hash below was captured from the code BEFORE the migration and must not move. If one does, // either the migration changed the arithmetic (a bug — the accumulators are meant to be identical) @@ -129,7 +130,7 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("heat rises, cools and colors through the palette") { FireEffect e; golden::checkGolden("FireEffect", golden::renderHash(e, 16, 16, 1), 0x1cadbabb59bc489bull); } SUBCASE("dye poured into a simulated medium, carried by the flow it works out") { FluidEffect e; golden::checkGolden("FluidEffect", golden::renderHash(e, 16, 16, 1), 0xdef67ab1f131e137ull); } SUBCASE("a field births light and a curl flow carries it into a cloud") { NebulaEffect e; golden::checkGolden("NebulaEffect", golden::renderHash(e, 16, 16, 1), 0xc42116cc9f9cc33full); } - SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x30489b453830f597ull); } + SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x77993423ebe2f58cull); } SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } diff --git a/test/unit/light/unit_draw.cpp b/test/unit/light/unit_draw.cpp index 1ebe20f0..3b5535dc 100644 --- a/test/unit/light/unit_draw.cpp +++ b/test/unit/light/unit_draw.cpp @@ -640,3 +640,91 @@ TEST_CASE("upscale16 declines rather than writing when the caller's tap table is draw::upscale16(dst.data(), 16, 16, 1, src.data(), 4, 4, 1, taps.data(), taps.size()); for (uint16_t v : dst) CHECK(v == 7); // untouched } + +// advect16 and blit16 are what every wide-plane effect (Trails, Nebula, Fluid, and a scripted +// trail) actually renders through, and neither had a test: the 8-bit advect was pinned and its +// 16-bit sibling was not, which is how a plane-wide primitive ships unverified. + +TEST_CASE("a 16-bit plane carried by a whole-cell flow arrives intact, so light is transported rather than smeared away") { + // One lit cell, pushed one whole cell to the right each frame. A whole-cell step has no + // bilinear fraction, so the value must survive exactly: any loss here is the transport itself + // leaking, which over a hundred frames of a trail is the difference between a tail and a haze. + const lengthType W = 8, H = 1; + std::vector a(size_t(W) * H * 3, 0), b(a.size(), 0); + a[(0 * 3) + 0] = 60000; a[(0 * 3) + 1] = 40000; a[(0 * 3) + 2] = 20000; + uint16_t* src = a.data(); uint16_t* dst = b.data(); + for (int step = 1; step <= 3; step++) { + draw::advect16(dst, src, W, H, 1, + [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::pos_t(draw::kSubOne); // exactly one cell + vy = 0; + }, draw::Edge::Clamp); + std::swap(src, dst); + CHECK(src[(size_t(step) * 3) + 0] == 60000); + CHECK(src[(size_t(step) * 3) + 1] == 40000); + CHECK(src[(size_t(step) * 3) + 2] == 20000); + } +} + +TEST_CASE("a half-cell flow splits a 16-bit sample between the two cells it straddles, and loses none of it") { + // The bilinear case: half a cell of motion puts half the light in each neighbor. What matters + // is that the TOTAL is conserved, which is what keeps a long trail from fading on its own. + const lengthType W = 8; + std::vector a(size_t(W) * 3, 0), b(a.size(), 0); + a[(4 * 3) + 0] = 40000; + draw::advect16(b.data(), a.data(), W, 1, 1, + [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::pos_t(draw::kSubOne / 2); vy = 0; + }, draw::Edge::Clamp); + uint32_t total = 0; + for (lengthType x = 0; x < W; x++) total += b[(size_t(x) * 3)]; + CHECK(total >= 39000); // conserved, bar the fixed-point rounding + CHECK(total <= 40000); + CHECK(b[(4 * 3)] > 0); // and it straddles the two cells + CHECK(b[(5 * 3)] > 0); +} + +TEST_CASE("a flow off the edge circulates under Wrap and carries the light out of the grid under Clamp") { + // The advection samples BACKWARD (every destination asks where its contents came from), so a + // leftward flow means cell x reads cell x+1. Under Wrap the left column reads the right one and + // the light comes round; under Clamp nothing reads past the wall, so light that flows off the + // edge is GONE rather than piling up against it. Both are correct and an effect picks one: a + // trail that should circulate wants Wrap, a fluid in a box wants Clamp. + const lengthType W = 4; + std::vector a(size_t(W) * 3, 0), b(a.size(), 0); + a[(0 * 3)] = 50000; // at the left wall, pushed further left + auto push = [](lengthType, lengthType, lengthType, draw::pos_t& vx, draw::pos_t& vy) { + vx = draw::pos_t(-draw::kSubOne); vy = 0; + }; + draw::advect16(b.data(), a.data(), W, 1, 1, push, draw::Edge::Wrap); + CHECK(b[(size_t(W - 1) * 3)] == 50000); // came round the far side, intact + std::fill(b.begin(), b.end(), uint16_t(0)); + draw::advect16(b.data(), a.data(), W, 1, 1, push, draw::Edge::Clamp); + uint32_t total = 0; + for (lengthType x = 0; x < W; x++) total += b[(size_t(x) * 3)]; + CHECK(total == 0); // left the grid rather than banking against the wall +} + +TEST_CASE("blit16 narrows a wide plane to the canvas, and dithering carries the error a truncation would drop") { + // A value just under the halfway point of an 8-bit step: truncation reports the lower step on + // every frame forever, while the carry accumulates and reaches the higher one part of the time. + // That difference IS the smooth fade the 16-bit planes exist for. + const lengthType W = 4, H = 4; + Buffer buf; + REQUIRE(buf.allocate(static_cast(W) * H, 3)); + buf.clear(); + const draw::Canvas cv = draw::Canvas::of(buf, W, H, 1); + std::vector plane(size_t(W) * H * 3, uint16_t(0x01C0)); // 1.75 of an 8-bit step + std::vector carry(plane.size(), 0); + + draw::blit16(cv, plane.data(), W, H, 1, nullptr); + for (size_t i = 0; i < size_t(W) * H * 3; i++) REQUIRE(buf.data()[i] == 1); // truncated, always + + int higher = 0; + for (int frame = 0; frame < 8; frame++) { + draw::blit16(cv, plane.data(), W, H, 1, carry.data()); + if (buf.data()[0] == 2) higher++; + } + CHECK(higher > 0); // the carry reaches the step above + CHECK(higher < 8); // but not on every frame: it is a ratio, not a bias +} diff --git a/test/unit/light/unit_fluid.cpp b/test/unit/light/unit_fluid.cpp index 1eed291d..fe934f2f 100644 --- a/test/unit/light/unit_fluid.cpp +++ b/test/unit/light/unit_fluid.cpp @@ -194,3 +194,31 @@ TEST_CASE("Fluid ticks dark rather than crashing on the frame between a release CHECK(lit); } + +TEST_CASE("Fluid reshaped to the same light count starts from black rather than the old layout's dye") { + // 8x16 to 16x8: the sample count is identical, so resize() keeps the buffer and its contents, + // which are laid out for the OLD geometry. Both planes must be cleared, because the ping-pong + // swaps the spare one in on the very next frame. Trails and Nebula carry the same guard. + // + // The check reads the planes through prepare() alone, with no tick in between: a rendered frame + // pours fresh dye on top and would hide a stale plane behind it. + golden::ScopedTestClock clock(1000); + Layouts layouts; GridLayout grid; Layer layer; FluidEffect effect; + grid.width = 8; grid.height = 16; grid.depth = 1; + layouts.addChild(&grid); + layer.setLayouts(&layouts); + layer.setChannelsPerLight(3); + layer.addChild(&effect); + layer.applyState(); + for (uint16_t i = 0; i < 40; i++) { platform::setTestNowMs(1000 + i * 20u); layer.tick(); } + + uint64_t before = 0; + for (size_t k = 0; k < effect.dyeSamples(); k++) before += effect.dyeAt(k); + REQUIRE(before > 0); // there is dye that could carry over + + grid.width = 16; grid.height = 8; // the same count, transposed + layer.applyState(); + uint64_t after = 0; + for (size_t k = 0; k < effect.dyeSamples(); k++) after += effect.dyeAt(k); + CHECK(after == 0); // both planes cleared for the new geometry +} From 3b217ea94dbb77608e712b59bd8ee5d1336c855a Mon Sep 17 00:00:00 2001 From: ewowi Date: Sat, 5 Sep 2026 12:39:40 +0200 Subject: [PATCH 7/7] Give every effect a preview, and fix a scroll that moved one column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previews for all 61 effects, where 12 had one before, plus the review round that came with them. The one behavior fix is real and old: scrolling along y moved a single column per slice and along z a single line for the whole volume, because those axes' lines are not evenly spaced by one stride. Previews - 62 GIFs and 62 control-card PNGs, captured from the desktop build through the real render pipeline, 21 MB, a GIF averaging 346 KB. The dense field effects are the heavy tail (Tunnel 1.1 MB): every light changes every frame, which is the one thing GIF cannot compress. - The audio-reactive effects are captured with the audio service running, so a spectrum analyser shows bars rather than an empty panel. Every capture uses the effect's default settings, which is what a reader meets when they add it. - 49 preview references on the cards, matching the convention the existing 12 use. These land with the images: a card pointing at an image that arrives in a later commit is a 404 on the site, which `test_catalog_card_images_resolve_on_disk` fails on, so the pair is one commit. Light domain - draw::scroll: the lines of a y-scroll are the (z, x) columns and of a z-scroll the (y, x) cells, and neither is evenly spaced by a single stride: x steps by a light within a slice, z by a whole slice. Collapsing them to one counter scrolled the first column of each slice and left the rest standing. Now two nested indices, so every column moves. - FluidEffect and the scripted trail clear the dither carry on a same-count reshape, alongside the planes: the carry is per-light error, so it is laid out for the old geometry exactly as the dye is. - MoonLiveEffect::release() forgets the trail's shape as well as its memory, or the next prepare() compares the new geometry against freed planes and skips a clear. Scripts/MoonDeck - screenshot_modules.py filters the registered types against what the running server actually offers before adding them, which is what the three add_module failures in the first full sweep were. Docs - README and the generative-effects tutorial credit Stefan Petrick: the techniques are the published ones (Perlin, Quilez, Bridson, Stam) and he is the person who brought that shader vocabulary to LED panels and showed what it does there. - Nebula's card names the prior art its window and flow come from, rather than leaving the reader to follow the chain through Aurora. - The tutorial's "you cannot crash the device" is now bounded honestly: the compiler refuses a script past its budgets, and what it cannot refuse is a per-light loop too expensive for the fixture, which can starve the network stack on a large grid while the lights keep running. - The tutorial distinguished the compiled-only kernels (advect16, decay16, quantize, blit16, upscale16, halfLifeKeep) from the six builtins a script reaches them through, rather than implying every kernel is callable. - The inventory drops a planned batch built on the 16-bit Layer, which was reversed. Tests - draw::scroll along y and z, pinned against a control run that fails on the old collapsed form. Reviews - 🐇 a y-scroll visiting one column per slice: fixed, and the z axis had the same shape. - 🐇 both reshape clears missed the dither carry; release() left a stale shape. - 🐇 the uncaptured type list was not filtered by the server registry. - 🐇 the tutorial's absolute safety claim and its compiled-only/scriptable split. - 🐇 nebula.mle's contrast default: kept at 120. The script's window spans the field's full range where the compiled effect's spans the top, and 192 births 0% of the field there (measured), so the defaults differ on purpose. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 1 + docs/assets/light/Effects.gif | Bin 0 -> 21660 bytes .../light/effects/AudioSpectrumEffect.gif | Bin 0 -> 335757 bytes .../light/effects/AudioSpectrumEffect.png | Bin 0 -> 11738 bytes .../light/effects/AudioVolumeEffect.gif | Bin 0 -> 638076 bytes .../light/effects/AudioVolumeEffect.png | Bin 0 -> 11407 bytes docs/assets/light/effects/AuroraEffect.gif | Bin 0 -> 564434 bytes docs/assets/light/effects/AuroraEffect.png | Bin 0 -> 29733 bytes docs/assets/light/effects/BallpitEffect.gif | Bin 0 -> 35033 bytes docs/assets/light/effects/BallpitEffect.png | Bin 0 -> 18364 bytes docs/assets/light/effects/BlurzEffect.gif | Bin 0 -> 584215 bytes docs/assets/light/effects/BlurzEffect.png | Bin 0 -> 15412 bytes .../light/effects/BouncingBallsEffect.gif | Bin 0 -> 526982 bytes .../light/effects/BouncingBallsEffect.png | Bin 0 -> 12985 bytes docs/assets/light/effects/DemoReelEffect.gif | Bin 0 -> 24118 bytes docs/assets/light/effects/DemoReelEffect.png | Bin 0 -> 19833 bytes docs/assets/light/effects/DissolveEffect.gif | Bin 0 -> 311152 bytes docs/assets/light/effects/DissolveEffect.png | Bin 0 -> 14613 bytes .../light/effects/DistortionWavesEffect.gif | Bin 0 -> 1052504 bytes .../light/effects/DistortionWavesEffect.png | Bin 0 -> 13279 bytes docs/assets/light/effects/EchoEffect.gif | Bin 0 -> 203023 bytes docs/assets/light/effects/EchoEffect.png | Bin 0 -> 16509 bytes docs/assets/light/effects/FireworksEffect.gif | Bin 0 -> 312252 bytes docs/assets/light/effects/FireworksEffect.png | Bin 0 -> 21253 bytes docs/assets/light/effects/FishTankEffect.gif | Bin 0 -> 380865 bytes docs/assets/light/effects/FishTankEffect.png | Bin 0 -> 21144 bytes .../light/effects/FixedRectangleEffect.gif | Bin 0 -> 27035 bytes .../light/effects/FixedRectangleEffect.png | Bin 0 -> 28703 bytes docs/assets/light/effects/FluidEffect.gif | Bin 0 -> 702481 bytes docs/assets/light/effects/FluidEffect.png | Bin 0 -> 19653 bytes .../light/effects/FlyingToastersEffect.gif | Bin 0 -> 464314 bytes .../light/effects/FlyingToastersEffect.png | Bin 0 -> 20789 bytes .../assets/light/effects/FreqMatrixEffect.gif | Bin 0 -> 131895 bytes .../assets/light/effects/FreqMatrixEffect.png | Bin 0 -> 20281 bytes docs/assets/light/effects/FreqSawsEffect.gif | Bin 0 -> 394940 bytes docs/assets/light/effects/FreqSawsEffect.png | Bin 0 -> 20971 bytes docs/assets/light/effects/GEQ3DEffect.gif | Bin 0 -> 505333 bytes docs/assets/light/effects/GEQ3DEffect.png | Bin 0 -> 19479 bytes docs/assets/light/effects/GEQEffect.gif | Bin 0 -> 462936 bytes docs/assets/light/effects/GEQEffect.png | Bin 0 -> 16719 bytes .../assets/light/effects/GameOfLifeEffect.gif | Bin 0 -> 270394 bytes .../assets/light/effects/GameOfLifeEffect.png | Bin 0 -> 41617 bytes docs/assets/light/effects/LavaLampEffect.png | Bin 0 -> 13865 bytes docs/assets/light/effects/LissajousEffect.gif | Bin 0 -> 649740 bytes docs/assets/light/effects/LissajousEffect.png | Bin 0 -> 14542 bytes docs/assets/light/effects/MoonLiveEffect.gif | Bin 0 -> 21660 bytes docs/assets/light/effects/MoonLiveEffect.png | Bin 0 -> 14799 bytes .../assets/light/effects/MovingHeadEffect.gif | Bin 0 -> 817647 bytes .../assets/light/effects/MovingHeadEffect.png | Bin 0 -> 26229 bytes docs/assets/light/effects/NebulaEffect.gif | Bin 0 -> 798886 bytes docs/assets/light/effects/NebulaEffect.png | Bin 0 -> 21646 bytes .../light/effects/NetworkReceiveEffect.gif | Bin 0 -> 21660 bytes .../light/effects/NetworkReceiveEffect.png | Bin 0 -> 17985 bytes docs/assets/light/effects/NoiseEffect.png | Bin 0 -> 14192 bytes .../assets/light/effects/NoiseMeterEffect.gif | Bin 0 -> 704146 bytes .../assets/light/effects/NoiseMeterEffect.png | Bin 0 -> 12993 bytes docs/assets/light/effects/PacmanEffect.gif | Bin 0 -> 249893 bytes docs/assets/light/effects/PacmanEffect.png | Bin 0 -> 19858 bytes .../assets/light/effects/PaintBrushEffect.gif | Bin 0 -> 360725 bytes .../assets/light/effects/PaintBrushEffect.png | Bin 0 -> 21729 bytes docs/assets/light/effects/PlasmaEffect.png | Bin 0 -> 15268 bytes .../assets/light/effects/PolarNoiseEffect.gif | Bin 0 -> 1044088 bytes .../assets/light/effects/PolarNoiseEffect.png | Bin 0 -> 26431 bytes docs/assets/light/effects/PongEffect.gif | Bin 0 -> 35824 bytes docs/assets/light/effects/PongEffect.png | Bin 0 -> 19876 bytes docs/assets/light/effects/PraxisEffect.gif | Bin 0 -> 1108480 bytes docs/assets/light/effects/PraxisEffect.png | Bin 0 -> 25080 bytes docs/assets/light/effects/RandomEffect.gif | Bin 0 -> 49440 bytes docs/assets/light/effects/RandomEffect.png | Bin 0 -> 9040 bytes docs/assets/light/effects/RaymarchEffect.gif | Bin 0 -> 172196 bytes docs/assets/light/effects/RaymarchEffect.png | Bin 0 -> 17075 bytes docs/assets/light/effects/RingsEffect.png | Bin 0 -> 15736 bytes docs/assets/light/effects/RipplesEffect.png | Bin 0 -> 11269 bytes .../assets/light/effects/RubiksCubeEffect.gif | Bin 0 -> 128991 bytes .../assets/light/effects/RubiksCubeEffect.png | Bin 0 -> 15738 bytes docs/assets/light/effects/SdfShapesEffect.gif | Bin 0 -> 301160 bytes docs/assets/light/effects/SdfShapesEffect.png | Bin 0 -> 18864 bytes docs/assets/light/effects/SineEffect.gif | Bin 0 -> 875026 bytes docs/assets/light/effects/SineEffect.png | Bin 0 -> 13258 bytes docs/assets/light/effects/SolidEffect.gif | Bin 0 -> 44196 bytes docs/assets/light/effects/SolidEffect.png | Bin 0 -> 24029 bytes .../light/effects/SpaceInvadersEffect.gif | Bin 0 -> 90209 bytes .../light/effects/SpaceInvadersEffect.png | Bin 0 -> 18539 bytes docs/assets/light/effects/SpectrumEffect.gif | Bin 0 -> 342860 bytes docs/assets/light/effects/SpectrumEffect.png | Bin 0 -> 19645 bytes .../assets/light/effects/SphereMoveEffect.gif | Bin 0 -> 56661 bytes .../assets/light/effects/SphereMoveEffect.png | Bin 0 -> 10494 bytes .../light/effects/SpriteFountainEffect.gif | Bin 0 -> 431576 bytes .../light/effects/SpriteFountainEffect.png | Bin 0 -> 20691 bytes docs/assets/light/effects/StarFieldEffect.gif | Bin 0 -> 71868 bytes docs/assets/light/effects/StarFieldEffect.png | Bin 0 -> 14923 bytes docs/assets/light/effects/StarSkyEffect.png | Bin 0 -> 13295 bytes docs/assets/light/effects/TetrixEffect.gif | Bin 0 -> 65292 bytes docs/assets/light/effects/TetrixEffect.png | Bin 0 -> 14273 bytes docs/assets/light/effects/TextEffect.gif | Bin 0 -> 23748 bytes docs/assets/light/effects/TextEffect.png | Bin 0 -> 16111 bytes docs/assets/light/effects/TrailsEffect.gif | Bin 0 -> 187121 bytes docs/assets/light/effects/TrailsEffect.png | Bin 0 -> 17718 bytes docs/assets/light/effects/TruchetEffect.gif | Bin 0 -> 273883 bytes docs/assets/light/effects/TruchetEffect.png | Bin 0 -> 17795 bytes docs/assets/light/effects/TunnelEffect.gif | Bin 0 -> 1172560 bytes docs/assets/light/effects/TunnelEffect.png | Bin 0 -> 26073 bytes .../light/effects/VectorBallsEffect.gif | Bin 0 -> 166560 bytes .../light/effects/VectorBallsEffect.png | Bin 0 -> 16868 bytes .../light/effects/WaterRippleEffect.gif | Bin 0 -> 1148069 bytes .../light/effects/WaterRippleEffect.png | Bin 0 -> 23619 bytes docs/assets/light/effects/WaveEffect.gif | Bin 0 -> 231176 bytes docs/assets/light/effects/WaveEffect.png | Bin 0 -> 13493 bytes docs/assets/light/modifiers/BlockModifier.gif | Bin 0 -> 21660 bytes docs/assets/light/modifiers/BlockModifier.png | Bin 0 -> 6413 bytes .../light/modifiers/CheckerboardModifier.png | Bin 0 -> 10193 bytes .../assets/light/modifiers/CircleModifier.gif | Bin 0 -> 21660 bytes .../assets/light/modifiers/CircleModifier.png | Bin 0 -> 6601 bytes .../assets/light/modifiers/MirrorModifier.png | Bin 0 -> 11159 bytes .../light/modifiers/MoonLiveModifier.gif | Bin 0 -> 21660 bytes .../light/modifiers/MoonLiveModifier.png | Bin 0 -> 14781 bytes .../light/modifiers/PinwheelModifier.gif | Bin 0 -> 21660 bytes .../light/modifiers/PinwheelModifier.png | Bin 0 -> 14652 bytes .../light/modifiers/RandomMapModifier.gif | Bin 0 -> 21660 bytes .../light/modifiers/RandomMapModifier.png | Bin 0 -> 8484 bytes .../assets/light/modifiers/RegionModifier.gif | Bin 0 -> 21660 bytes .../assets/light/modifiers/RegionModifier.png | Bin 0 -> 16941 bytes .../light/modifiers/RippleXZModifier.gif | Bin 0 -> 21660 bytes .../light/modifiers/RippleXZModifier.png | Bin 0 -> 12697 bytes .../assets/light/modifiers/RotateModifier.gif | Bin 0 -> 21660 bytes .../assets/light/modifiers/RotateModifier.png | Bin 0 -> 7906 bytes .../light/modifiers/TransposeModifier.gif | Bin 0 -> 21660 bytes .../light/modifiers/TransposeModifier.png | Bin 0 -> 16112 bytes docs/assets/light/tutorial/aurora.png | Bin 0 -> 103034 bytes docs/assets/light/tutorial/fluid.png | Bin 0 -> 143883 bytes docs/assets/light/tutorial/nebula.png | Bin 0 -> 151498 bytes .../effects-power-function-inventory.md | 2 +- docs/moonmodules/light/effects.md | 2 +- docs/tutorials/generative-effects.md | 45 ++++++--- moondeck/docs/screenshot_modules.py | 8 +- src/light/draw.h | 19 +++- src/light/effects/FluidEffect.h | 4 + src/light/moonlive/MoonLiveEffect.h | 5 + .../scenario_MoonModule_control_change.json | 14 +-- .../light/scenario_Audio_mutation.json | 12 +-- test/scenarios/light/scenario_Aurora_fps.json | 60 ++++++------ .../light/scenario_Driver_mutation.json | 10 +- .../light/scenario_Effects_composition.json | 2 +- .../light/scenario_Fields_polar_lut.json | 36 ++++---- .../light/scenario_Fluid_solver.json | 86 +++++++++--------- .../light/scenario_GridBlacks_blackpixel.json | 4 +- .../light/scenario_GridLayout_resize.json | 6 +- .../light/scenario_Layer_base_pipeline.json | 4 +- .../light/scenario_Layer_memory_1to1.json | 2 +- .../light/scenario_Layouts_mutation.json | 8 +- .../scenario_MoonLiveEffect_livescript.json | 44 ++++----- .../light/scenario_MoonLive_pipeline.json | 10 +- .../scenario_MultiplyModifier_memory_lut.json | 2 +- .../scenario_MultiplyModifier_pipeline.json | 4 +- .../light/scenario_Trails_ladder.json | 54 +++++------ .../light/scenario_modifier_chain.json | 10 +- .../light/scenario_modifier_swap.json | 6 +- test/scenarios/light/scenario_perf_full.json | 40 ++++---- test/scenarios/light/scenario_perf_light.json | 8 +- .../light/scenario_peripheral_grid_sweep.json | 32 +++---- .../light/scenario_peripheral_switch.json | 12 +-- test/unit/light/unit_draw.cpp | 33 +++++++ 162 files changed, 332 insertions(+), 253 deletions(-) create mode 100644 docs/assets/light/Effects.gif create mode 100644 docs/assets/light/effects/AudioSpectrumEffect.gif create mode 100644 docs/assets/light/effects/AudioSpectrumEffect.png create mode 100644 docs/assets/light/effects/AudioVolumeEffect.gif create mode 100644 docs/assets/light/effects/AudioVolumeEffect.png create mode 100644 docs/assets/light/effects/AuroraEffect.gif create mode 100644 docs/assets/light/effects/AuroraEffect.png create mode 100644 docs/assets/light/effects/BallpitEffect.gif create mode 100644 docs/assets/light/effects/BallpitEffect.png create mode 100644 docs/assets/light/effects/BlurzEffect.gif create mode 100644 docs/assets/light/effects/BlurzEffect.png create mode 100644 docs/assets/light/effects/BouncingBallsEffect.gif create mode 100644 docs/assets/light/effects/BouncingBallsEffect.png create mode 100644 docs/assets/light/effects/DemoReelEffect.gif create mode 100644 docs/assets/light/effects/DemoReelEffect.png create mode 100644 docs/assets/light/effects/DissolveEffect.gif create mode 100644 docs/assets/light/effects/DissolveEffect.png create mode 100644 docs/assets/light/effects/DistortionWavesEffect.gif create mode 100644 docs/assets/light/effects/DistortionWavesEffect.png create mode 100644 docs/assets/light/effects/EchoEffect.gif create mode 100644 docs/assets/light/effects/EchoEffect.png create mode 100644 docs/assets/light/effects/FireworksEffect.gif create mode 100644 docs/assets/light/effects/FireworksEffect.png create mode 100644 docs/assets/light/effects/FishTankEffect.gif create mode 100644 docs/assets/light/effects/FishTankEffect.png create mode 100644 docs/assets/light/effects/FixedRectangleEffect.gif create mode 100644 docs/assets/light/effects/FixedRectangleEffect.png create mode 100644 docs/assets/light/effects/FluidEffect.gif create mode 100644 docs/assets/light/effects/FluidEffect.png create mode 100644 docs/assets/light/effects/FlyingToastersEffect.gif create mode 100644 docs/assets/light/effects/FlyingToastersEffect.png create mode 100644 docs/assets/light/effects/FreqMatrixEffect.gif create mode 100644 docs/assets/light/effects/FreqMatrixEffect.png create mode 100644 docs/assets/light/effects/FreqSawsEffect.gif create mode 100644 docs/assets/light/effects/FreqSawsEffect.png create mode 100644 docs/assets/light/effects/GEQ3DEffect.gif create mode 100644 docs/assets/light/effects/GEQ3DEffect.png create mode 100644 docs/assets/light/effects/GEQEffect.gif create mode 100644 docs/assets/light/effects/GEQEffect.png create mode 100644 docs/assets/light/effects/GameOfLifeEffect.gif create mode 100644 docs/assets/light/effects/GameOfLifeEffect.png create mode 100644 docs/assets/light/effects/LavaLampEffect.png create mode 100644 docs/assets/light/effects/LissajousEffect.gif create mode 100644 docs/assets/light/effects/LissajousEffect.png create mode 100644 docs/assets/light/effects/MoonLiveEffect.gif create mode 100644 docs/assets/light/effects/MoonLiveEffect.png create mode 100644 docs/assets/light/effects/MovingHeadEffect.gif create mode 100644 docs/assets/light/effects/MovingHeadEffect.png create mode 100644 docs/assets/light/effects/NebulaEffect.gif create mode 100644 docs/assets/light/effects/NebulaEffect.png create mode 100644 docs/assets/light/effects/NetworkReceiveEffect.gif create mode 100644 docs/assets/light/effects/NetworkReceiveEffect.png create mode 100644 docs/assets/light/effects/NoiseEffect.png create mode 100644 docs/assets/light/effects/NoiseMeterEffect.gif create mode 100644 docs/assets/light/effects/NoiseMeterEffect.png create mode 100644 docs/assets/light/effects/PacmanEffect.gif create mode 100644 docs/assets/light/effects/PacmanEffect.png create mode 100644 docs/assets/light/effects/PaintBrushEffect.gif create mode 100644 docs/assets/light/effects/PaintBrushEffect.png create mode 100644 docs/assets/light/effects/PlasmaEffect.png create mode 100644 docs/assets/light/effects/PolarNoiseEffect.gif create mode 100644 docs/assets/light/effects/PolarNoiseEffect.png create mode 100644 docs/assets/light/effects/PongEffect.gif create mode 100644 docs/assets/light/effects/PongEffect.png create mode 100644 docs/assets/light/effects/PraxisEffect.gif create mode 100644 docs/assets/light/effects/PraxisEffect.png create mode 100644 docs/assets/light/effects/RandomEffect.gif create mode 100644 docs/assets/light/effects/RandomEffect.png create mode 100644 docs/assets/light/effects/RaymarchEffect.gif create mode 100644 docs/assets/light/effects/RaymarchEffect.png create mode 100644 docs/assets/light/effects/RingsEffect.png create mode 100644 docs/assets/light/effects/RipplesEffect.png create mode 100644 docs/assets/light/effects/RubiksCubeEffect.gif create mode 100644 docs/assets/light/effects/RubiksCubeEffect.png create mode 100644 docs/assets/light/effects/SdfShapesEffect.gif create mode 100644 docs/assets/light/effects/SdfShapesEffect.png create mode 100644 docs/assets/light/effects/SineEffect.gif create mode 100644 docs/assets/light/effects/SineEffect.png create mode 100644 docs/assets/light/effects/SolidEffect.gif create mode 100644 docs/assets/light/effects/SolidEffect.png create mode 100644 docs/assets/light/effects/SpaceInvadersEffect.gif create mode 100644 docs/assets/light/effects/SpaceInvadersEffect.png create mode 100644 docs/assets/light/effects/SpectrumEffect.gif create mode 100644 docs/assets/light/effects/SpectrumEffect.png create mode 100644 docs/assets/light/effects/SphereMoveEffect.gif create mode 100644 docs/assets/light/effects/SphereMoveEffect.png create mode 100644 docs/assets/light/effects/SpriteFountainEffect.gif create mode 100644 docs/assets/light/effects/SpriteFountainEffect.png create mode 100644 docs/assets/light/effects/StarFieldEffect.gif create mode 100644 docs/assets/light/effects/StarFieldEffect.png create mode 100644 docs/assets/light/effects/StarSkyEffect.png create mode 100644 docs/assets/light/effects/TetrixEffect.gif create mode 100644 docs/assets/light/effects/TetrixEffect.png create mode 100644 docs/assets/light/effects/TextEffect.gif create mode 100644 docs/assets/light/effects/TextEffect.png create mode 100644 docs/assets/light/effects/TrailsEffect.gif create mode 100644 docs/assets/light/effects/TrailsEffect.png create mode 100644 docs/assets/light/effects/TruchetEffect.gif create mode 100644 docs/assets/light/effects/TruchetEffect.png create mode 100644 docs/assets/light/effects/TunnelEffect.gif create mode 100644 docs/assets/light/effects/TunnelEffect.png create mode 100644 docs/assets/light/effects/VectorBallsEffect.gif create mode 100644 docs/assets/light/effects/VectorBallsEffect.png create mode 100644 docs/assets/light/effects/WaterRippleEffect.gif create mode 100644 docs/assets/light/effects/WaterRippleEffect.png create mode 100644 docs/assets/light/effects/WaveEffect.gif create mode 100644 docs/assets/light/effects/WaveEffect.png create mode 100644 docs/assets/light/modifiers/BlockModifier.gif create mode 100644 docs/assets/light/modifiers/BlockModifier.png create mode 100644 docs/assets/light/modifiers/CheckerboardModifier.png create mode 100644 docs/assets/light/modifiers/CircleModifier.gif create mode 100644 docs/assets/light/modifiers/CircleModifier.png create mode 100644 docs/assets/light/modifiers/MirrorModifier.png create mode 100644 docs/assets/light/modifiers/MoonLiveModifier.gif create mode 100644 docs/assets/light/modifiers/MoonLiveModifier.png create mode 100644 docs/assets/light/modifiers/PinwheelModifier.gif create mode 100644 docs/assets/light/modifiers/PinwheelModifier.png create mode 100644 docs/assets/light/modifiers/RandomMapModifier.gif create mode 100644 docs/assets/light/modifiers/RandomMapModifier.png create mode 100644 docs/assets/light/modifiers/RegionModifier.gif create mode 100644 docs/assets/light/modifiers/RegionModifier.png create mode 100644 docs/assets/light/modifiers/RippleXZModifier.gif create mode 100644 docs/assets/light/modifiers/RippleXZModifier.png create mode 100644 docs/assets/light/modifiers/RotateModifier.gif create mode 100644 docs/assets/light/modifiers/RotateModifier.png create mode 100644 docs/assets/light/modifiers/TransposeModifier.gif create mode 100644 docs/assets/light/modifiers/TransposeModifier.png create mode 100644 docs/assets/light/tutorial/aurora.png create mode 100644 docs/assets/light/tutorial/fluid.png create mode 100644 docs/assets/light/tutorial/nebula.png diff --git a/README.md b/README.md index 1c8425df..5d92e9e3 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,7 @@ Specific people whose work directly shaped parts of projectMM. We study their th - **[WLED](https://github.com/wled/WLED) and [WLED-MM](https://github.com/MoonModules/WLED)**: projectMM is born out of WLED, and takes the usermod idea to a new level. Here *everything* is a mod (a MoonModule): effects, drivers, networking, the file system, the system manager. It also integrates tightly with WLED: a projectMM device can act as a WLED device, and it talks to WLED devices (audio sync, discovery, and more). - **Frank ([softhack007](https://github.com/softhack007))**: main author of the WLED-MM audio-reactive usermod, the most-used open-source audio-reactive LED implementation. The ideas behind [AudioService](docs/moonmodules/core/moxygen/AudioService.md) (including the adaptive noise-gate concept, analyzed with his permission) descend from years of collaboration on WLED-SR / WLED-MM. He also inspired the [Flying Toasters](docs/moonmodules/light/effects.md#flyingtoasters) effect and the sprite support behind it. - **[troyhacks](https://github.com/troyhacks/WLED)**: reworked the WLED-MM audio-reactive DSP to run on Espressif's [esp-dsp](https://github.com/espressif/esp-dsp) FFT (a low-latency, "stupid fast" alternative to ArduinoFFT); the same esp-dsp FFT choice [AudioService](docs/moonmodules/core/moxygen/AudioService.md) makes. See its Prior art notes. +- **[Stefan Petrick](https://github.com/StefanPetrick)**: the generative-field vocabulary the LED world learned from [Animartrix](https://github.com/StefanPetrick/animartrix), [FunkyNoise](https://github.com/StefanPetrick/FunkyNoise) and [ColorTrails](https://github.com/StefanPetrick/ColorTrails): noise read in polar coordinates, layers on independent oscillators, a contrast window that turns a field into curtains, and emitters carried by a flow field. [Aurora](docs/moonmodules/light/effects.md#aurora), [PolarNoise](docs/moonmodules/light/effects.md#polarnoise), [Tunnel](docs/moonmodules/light/effects.md#tunnel) and [Trails](docs/moonmodules/light/effects.md#trails) are written here on the published algorithms underneath (Perlin's noise, Quilez's domain warping, Bridson's curl, Stam's fluids). Stefan brought that shader vocabulary to LED panels and showed what it does there, which is the tradition the [power functions](docs/moonmodules/light/power-functions.md) and these effects sit in. - **[hpwit](https://github.com/hpwit) (Yves Bazin)**: the clockless I2S / RMT / Parlio LED-driver techniques and the [ESPLiveScript](https://github.com/hpwit/ESPLiveScript) live-script engine behind the LED drivers and MoonLive. - **Christophe Gagnier ([@Moustachauve](https://github.com/Moustachauve))**: author of the native [WLED-Android](https://github.com/Moustachauve/WLED-Android) and [WLED-iOS](https://github.com/Moustachauve/WLED-iOS) apps. Their source let us reverse-engineer exactly what those apps read, so projectMM devices appear in (and are controllable from) the native WLED apps. - **The [Improv Wi-Fi](https://github.com/improv-wifi) project**: the open Improv serial provisioning standard ([sdk-cpp](https://github.com/improv-wifi/sdk-cpp) / [sdk-js](https://github.com/improv-wifi/sdk-js)) that the projectMM web installer uses to provision a freshly-flashed device over USB. diff --git a/docs/assets/light/Effects.gif b/docs/assets/light/Effects.gif new file mode 100644 index 0000000000000000000000000000000000000000..41ac0d2bfdcd3246a52f8be88b70e9dae49e4de2 GIT binary patch literal 21660 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

O~NwROb)R*S8-UgzNE?qN|b{; z9=f~8!9+UrSQac?xZ9j<90h`JmVv(Jz@pf&=dGa7Hkc6}WF%5i<3P{|`eqd>5g1~W9VJ6}$|JUOVPP!Y!Zny57phDEZ224yDc~al zlC0oNJP^o+*66Foi2x5S^dq0(Ar<2ONjC2WJY;}7m*g)4z-2L(E3j}D>@&4CRtgjZ zZb%<8__fb%S2l^mHZW~a*# z+|jxq8vM;ZQnI|>n8SH>MThkDh-DT$ouW9JJa}|oe}iv4CuDQO<3M-{gSg6X@V}zs zHrP;E*I?8Q+mjj_$v9@*4BO+)-jhmcY=#j&9qX*qj>N;%UEr;a1oS6rxkmJ1A)H!L z|9vkIjYr_)h3Gse|0uyzu8W64O~f@CZ4f%hYJ1Ci%P9R=E5t-f_icgTH|uq1=ox3h zB7&g51A&O3i1spq?Ib;c1xuLR@Yuy5jG!_2Ju+ZLKUAKQ27z}R)qZf>aB;|>hLmJl zmeduhvZtj^l2~``kzqefd!|e`U@})t=`ROs&xpDf)Rgtw@Zy z&PYwRflGKe->ewh5}bsgI2bSsw@uue$qu}bg#BCY9Pv7EOpG$MN8M^Rich$F-WP=|GR%p^-`QHW*J;r5bk z^vfs@E>JJGwueHq__=khWKToe)NUZ3Yx|jvHIcwK$*`Xp%JY<tVq;h1BHGGDhiDuftp|YzW^W}tSwGPFi0Wv zqN+z=8U!iycwOp&I$OOlTz3dzwRel>FTnbW+%Y8%t?7!%71ca`gInNX>?y_zGTdt! zt{x672$d}_W9T5@qIBDK^6GcJiW%<^M>!#HP5l+5-U~cvrYPN@Ddq#2w5g#Q+|vDsWwp2U18S zs;j&&&mxGqPAgk=_yip)kdYwHQiHb(J!xlCiWeON=HJc9V|1 z%q94Xe1;{M&~rMMF~|pDemsfwV{4ec2)u!1A1Z-JRv}@c7$-J3W-H8r3ZqK9w&mxU z)AO{1ly+(!k*B$`00v|Quzi)*xrAqe{M8_ZN=^l2A~&Ezw?*Z$JJyhXH5n2+dVnC! zy75nz10MQS?{uB1<5ngrSJ;>@ zH|PbpG00i7+FN*upF`nWgn$uB)0GZ&gju@Kp@E~Zn<;?DV5N%?`Z>|knw#`Z9~x@X z?m&lpc}EH2(f`)h#?atFcqqCIX7wo|P7KSE3})?vrAQHkY(n*2An%I0T|2>(3-x8F zCE#K9^o_~ggr!74{8m9^ut+B0m^F@`JL8TKc;dX{hTX2P+i$f(DN$wXm9LVfp>@a8 zSZunBp%%w5w?*^*FHI|r(_8Wkizn;jd`?Rq?if&0jc3;%ZQ33uf*lg>G@R9$3^iSF zEL}*~8+FkRlioGjV|%_arnVao?MhBv2dZN6jpm-?fE zgjH-5_QOW}wnp^=jf&KVIzjBRyoWkHk;Zd~Bf$OP*KtK`WMI5rlo+{5c*mWA+R2{W z#Ezr$bOR}*ICir|JA#%&h)@OO`{Q*lB6M>m>)FuGv0w@u;T@-!PKo<*5Lz$2y)^@x zFG3h(Y&86;h^DiUxp*CeO>iN*JA76u+E<^r^RekeYEbrLT-D>0zaJl9PVD|b43Htx zx#3itu}3Yc8iYA6g4pducF2%jY?vP#W+y{c^U$Z{Ponu~u?*!Wy}ez6UKfTdL=X-L zdWwhc5TfkaFdq=2i-+z4Jq`mwkMq#YQq+VYsns0wC>1!(#Wl-O_M&Y~c=Uu2l|Ba~ zQ!o?kXa1sXr$pF0EOZD6o^6DA&c^1-VI`+9kJ-3W3|NUj>OLFyH|x}fGz6DzzFh{a z*MsEn;2#%&t?`IV%FM?icn&M=?M_yvc;>?g;9qlufI1V;nn~x)1W4eoPAOnZ{xjL! znU8HV%T+Te6vWEk01SrMFMGALK_>eEDBpjTL!VU-c*W(x)RhvB2$7+cPmF6}elp}P zFN>zwx63*?yqgB~R2RwS03|TEjMe~3Ir{=owK!F6-EPpK)ArA9^ zG90E_hKd#*IjlL-9;jF}C#Hk*c~JVLx#K+OPBGH{^lK*W zwetXSCmwKfn)VPQf<*J>JCXbG080sXS`N!(plY@)`iT+mm2hG@?i2`~DnTVU;ktN; z?Dfk^$35Yp>nX0MKyO~)5JEOCZ2&7==SM8`8!`5c6vdIi&#;!}W!PL0g2Tgp6yrX! z(K}`EY!UL}Os?@6WSIzAMnRzR-?rUHpiB_-jh}7)h1V*5wmtQ!{pT%~pHc4+p05zbXFi*rQ6Swnelb;E{cGl(oAc*L#p>;StA`n1=$6R+;^n+k z&&1LvCZd{L(R>#h%3#AxWGFEY-2{T#{f(^ofXciHlx955=R!Gbpy|U?lHRic*0Tr3 z@J%fAg_o#Jc(^|Z)rEf(Dvt^fqMk_5?QCWU8{K#Y6(Tdtm7ykN7$Ns%s1(&D#+~9t zv3ZCw*^68j%uzWLl5U?_JT-GK_La2eRf6P~w$bb>W!bBXzn{PQZ$bI@`znJu z{~5x}!_@5?ejxECnF>GFprEW#%brcN%>~AQqOisYKG?OHX@=ZA4Whv@Bwhb;+p8|c z*hZ7s4uM9UzTX{7k6xk5=eG6Uz%Zu)KUBh9&y%6$(cg0yFk}<9Ues08VoD>O-D+30 zCG@RZebAqW=bt@#A1>yMR_pJ0yd2q^`sh;PuCTi!R&deTtrKa*Z+ zX2je+dwjgXeE;4LPyZUVu<-5Q6jBpE9C7u9TIYw#;hmPrGcUe>UdZ3`$5Ex1KlUv@ zy|Vkw%*&tq<+GzThOsR(zw%b!KKe8H)y#hf)>alCoQr++`_QlNU;cgb>XqV;^&S~6 z1A?)YGXT{PE)%Y`SI$K0)^lCZroD0(tj!eHRcY(0+!gOi%yJ|6+OD_}gF~|1Njvtg zxRc}Svph6+^{#km@0rT-)H$%a;z=naW_!^pY(IJF)rDkx8=Tzx$=m2`eYTIuh2Bp- zW|yb3eJ!r9e)6Rc6ZiO8PuSWF@IavdKU-%9;(}&CXF#C!*)9d@f6sP_wCrIEc(*<0 z*zQKS|25n7t7PG}su{%BVz8jLQq{y~9NQX{aCiLw&2|M-iMA;s@rX+?&ez)i8vPyN z^O;)bnDX&u@Bf+Ya*VtN?!9G1vONH~I+)#7al%6|=U^OkPNl`!y@&mOXS)hqz6p-T z*RJ2_{Zdx*>#r)OXzs{OX{*KM_pYzcc0EQSslImk549idvh{7SuQAKw1hwI!EJOP! zU5;0;yg%Z$u};tC%d1A4Bwb+tws^?J8{jaj!ZH(7X$Ii^}CqZ{joPz2cTYuEM_ z>-)DPoPXIzP&28;C_)0ydi?uQ@5)(iS9jP^dblvCc`^a}t?qfV=;r;K&faF3lG#Vw zvnw|h6N<;@CTO>fA68hOFk%ukVVRyDyu@fL50#A89#^$w+u2dA-IC@Jay-!SG%;ID zt^b2QFczf2`*kIz-*Rxwo=6|y7r#^%O&s#nNtRX5f8&4o*M4>zD9L_TjscK zP48?(T@KP6PKiz}4y;UYX@CW8n(28(2(;nR*D<3Yh*T<;JG|ptX%y?A^G}AftYRhuK^E<^3j8-)gGo zpYC7IdABog>|jXBis0aCTWieacWS#XB}UX+O$FZM_&m?C>Ct1URuJQ$o2&g$EIhwtHt=OjB@|Is% zr|)jmJ#O==Kd9&s7ogo@vE9pyRD<_0{cd-4Oj@)>iWm_fCP%g9O!T(+}Sv0rpSHWeE`$anxHe&#gZpX~k+B{g?Z0 zERV&e{Z_0VqonIi?Co}`%JQV-L|p&t-c<8RD@x3fZuKm?aY%sOp8`)GTiIINE9abF zo1*K|6F36(@J{e8Rd-&o*ToH{-qE86jJEY(y#T4mVrg^(#2fC1bc#q%u*^S^n#s+G=$~D-kQ`{sw65yS~%p_QWK? z@XP59+?7A~1Gx#&D>Y=9Re@hqpJ3_bzZ;*v4$~O8;%wr;j9%050WTaaG6|tNL9$%b z286YLAT73;roQ;uId@&HXm`A}>7B8Go|ZqzOyv_1ZnzOqv#+oKN63!3ZgKYbAHrs| z_u4Q~(aC}v?&T}FtqrO9tXZnvd5>{gW2*eLFWR^U!rH!X{-?=kNaf>5>Vd)+XCck) z7McS6-eC2yG(Bs52|w{=1b|PIR_yM*Yvo0I%^FInH+txg%PnIm43r0cyz zyHaE#<$k;F|j#^EzRb+Ti zhkUS3tl+iQdP?)wDq&N9ATzVb<(}H5)zU2v29;5TL&v^?`psEX0GrE${az_Dc9flP z?to~REVdds4qCFbUK!pT*OLH=IS0rU8YmjksGp;p!=B!7&DuHA%~fM3z7S`-qNq$w zDL|*ZC>(DpJ}zO;BKL?#sPAL~>-t4}8re;))aF4;YNE2Y*06dl4~$u2b0Qu1Fc(pg zet|ySe>MXl(A>NcBf2yLO`+awKETlU&X_X+WQK#&5l|mMH;>KBT&G@rAuk z#W&xI6ELwth`K|m#F9IU{*9^rCAbqLaFpVajPSxlf+|`v}j@&=CpTVD|IF4>+ z<$ZM{^p@{R?JD$+R(6M7^}{+VtS&GPN5D+6ZiOMI8XrPVKDy*nf;}ReV912My*?$l z90$WJnGC+&MBsknW&4(HwjjprHNnoIPzBqJjcf&@zj9m?Yl5hJMP)Otq0~piEuqZL zt5h$u(L6Bir?O!`1qhB9A~gvGc&W@ya>|_l;>~oumy&8*LYdJlzNi@KAO9?|&Rrc+ zWGVvtUD=~)zxAZ!Rwt;ECw|y^0IU=UTFr`zzdie`_o6eq48K!iVxq|;}u5Axw;2j-6(2k&QJ>b(ZM zb&XKi5dAJzOtpQ@>! zK9$Q4p2_Z?Z0qL_v{(Mq{utSoTWr=U9;I`!cYbvrg)D4d`{9Q{TEB-!`qUZg4KkY`KPZ z{pkmzO3N-%hAidh^NG@;kRHyCtt?p7HT+|WYGYu&GxybotMjxVLal{}`=oeyuEqSc zNg&s8UYS>@2>lHrAYB)!6D9j_8zyKo28xpK0Xb~rx~Q|^55hX4+8em)Hy7De<}BzM?t)prBXm^6eRcIk@k3w=n(1&;oY9N#-WT*2QwBMN@qjK4-3|b z>6NdUf2(B13p3rNJ7-aob-^RuyA&|qImc6 zeCAA15$H*T#)<$kSSnTwB93z5_gu0(-|Td?kD5DY5zmF*V<}H@X`U?Pl2ECe4ZX=! zfwrlseN%R4pmX{Vo;^U19Q!vHdYPIfX~}YH1~#9CTRe%i-VgU>?aBD8x}Sd7{xyWe zfX1>@gXyWkcvYp6vTQah>R9$seLP`WfLz&2;6dYrFm(q=6i@YIJ@P0U;b}nHD8L8G z>=Vw#oCAFCHc(dY=!p;fp*@gm~cidYd3& z+o8yIMLoX01T_84If#Bp7Y~OX!~4}Dk9@J}OD=Nzt`@0l(DJ09h^PEZqWmWdN|)69 z5-O!r@ZN9jH7`>qc)}hQlqp8K5`Zpa=W*f0GW`ZIV<(-R`R#~ncTA)l=8WeY zYlX#fA;P_oXCn>6DmgE5J@&KeLJDI)xWvTKAq|H3K>8soUY@ucI4ndeg5Zd?jAI;x zEI#|FJKU3tc`L=rase&__kn>5`lfd3>V{V(Dkhh)0~A;w9quc|JP@JQw<+A1kqQ?T zi#fthIsEEqus;KlCSe)R!jC7~wtNYxc1!J>18PZ-##R2vRg3zgbxX7;g~BCE_7^@7 zw9iwnoXv;&o+}nNS1CNwv{wqx_raK4sJ$%Qmv@FKE52Zt-UrsR6Y_Va0F6)5yB1wF zrvPc&?%b4JCTq%vQ`55_I%~}X+024LJ1(_DfK@3%7#2BX*+3q07dF)g*ktB8IQg=n zc6cBX23VXpZF-{UQ+DyY_F_L-%iLhercO~QcxTR<=w46gtcU-t_S2&Vf*K~N>a}f2 z89u*J5HYF(OFmw;R7xF$A5jY%J{tMVPPgCdu!*O(F9>m#j9FJi?eLf{JS90S+Rbyv zQ!ncWGR*Jc!voTj?iBc#QFNS#w!gHZ5VWocnGUW2c3^~>!jqK1t^Du_X2Annu;?DP zso_)39ZTU#Z)lpFY`bIGhuc+NFNH_ZA-;w!lv(?u6yyn&{NQ$jzv~(UXv8;d`E&;E zKUqy62q@wz|Bxw9iXe&H3npJV$^A&NC)$n$^vGfmNpTy_T6uvrn**WYbeQJtBbx#f zC}kdVM~^)w`a8>aVa7nXuRx^qpzqM8$dZi2D-LIl>D_;VcShw|(es3;ydXN^jvn$T z2pLDHJAFHj%f1j4oD=@E<_jM16(K%Klz&UH>k-d4u$WA!Q34yNpyP5zx;DwsA2;#t z?I*CA7em<>8+aFU#1}Wbz4*A`m_vN66CNI_;9erLv?CdR<}Y1(3;PohNT8eIe}?{v z&H59`I?lmE|9NwoMn%-goK7CCdSiI_YDBxmKKK-)++GxQQK&Sv!9b%H^oIu^6(}}NMyHU$zB_6O%#z12ya6uB_!Vfrn zGWb&}oD(DMSkOCc&j}E;m%536*+cdP)*wDowW7R7*5l5z3T}wG&^r3xV#34Kz!5`# z^jX-8k)849e5^OwLVQ{K6=quN;Ps~o*wzFrOokkOr&;k`-9aP9dJm-tKl)pURRsZ| zUCL`>R42jXT}onHvu+z+Y1b`Ov_tGGIhHPj)ehSoYue`{A8T%gXf5>Y%e&>HoBv;u zzlsOcUw%tj9v>-=t+tLU?!p@e!q4j&%%D%-z5XXcR9ssLGFTV3-e~4~R2gl8+kvpV zpTRsC@IVIc3kB!E*zqt=!@-mE!L!1i1-BO?hqzI1imeXyxu$w-juF9C9s$WLSS4kT z5z3~@hnT~PR1>5cO8-o>N*#BksvNrFm~OVU(z!CK5|?%Qyh-(PD&*1r4GAkWGpn|B z7->%j)9HUlE4)G!vy*=}xA?LK?6`oR@R+|mO(UxHexJ_GFxci%fPU(3RZ*x%XNy~7 zD=LKnJzX_ey@a{T&I&0w3$(t2M_0T{ri`GFX2ZPiPM4E|!#5C;T?mg> zth!umPC&HdLD(qJYuX=-@IlD7`EvoIk6`N@kud4yEQUCVoUY-_)FDm^3ZO#=)`N+gW#DK9 z{*3aGjgPj~*VlG08`=KREdGmrRN(->`mAP(UYV!&f7m+jwZIkmA~NWof$)n54HoP3 zK;SzH?Qa9>g^gP8d+jooJw2|H$sxWIM9WDWG=l+iXb|4XhaKn(kxYaI7Qu_s)jv|z zDkz?8;9j%O3zt4?Z(v8%`9lxf1*}_!S_Ni4=ekFBLK8R;vyA{80LB7lCAlbt=-3}F7ZglHAD_mvwvr7%BBQ8UPd55 zu6u=5u;3`hAiSIcFOT-$&W2m=HGgjTc5h(RWB}NJJrF8_W}-j_Y!Km(`0YZ@n_->x z3ZRx8kb){rkpsX0(9D%EYrQ3~TO{pLJk|pCPXgRiz9EAR-YHUhG4JcT7zgZ8D`n{Z zWe;bwo#}nFpcQkT8*~HiqnfK48A`HWuuAWQ#uK424C3#Eh@j$+VRVzzSx_2K zC%#YnN=z@%GfL1Id~@P56r7ixtZL59Vwt%+pqx_k1sN73gV+g^?!H-mae3waN&){X z?vR2c4jJm+e7~kQvA~s{6O! zm!a!~5SC3b+OZN~HPtlp507Q(M z+6RU9cZ&L$g_nzKW%a+b!wtw24Auln>#;=rJMTy3agy;ty&aU`8pY0RA;GWE^5pp+ z#v4;YzX8@k-eIsRHc9^Uv?8 z`{DKP%g24f{DLy{A#3G$T=MXrRHhx9sOIf1e-PO#LSiBq{E`uL4*thT2`Ira-jFm%(z zYpSh3A64TxydZX`=g%V}Q_Dvp&a7QPJ*oAr;#Ibl^my@VumtKUGgcm9-pA`bC7t1M z5SgH!cx(lF&_=`=YR*pSi+R5G6CYH&?YdQ0r60U6qw05?m@o8Hz;_@#Ka#_f*Y1Cw zhDXp=QzxB^n8g~AeT>7;&~rEp&0er91*%=aoCc~120DrC)7a^>w8UExa?(eI#^uj| zj&UR@E@yPjzAqgMaBNTXJ2NUrYTiZp2$<+;>m#PsD$E-tdu7Cx2{?SkwG0l z)^(8zJ2m}LyBCmlZKAHaK(mga3X;49F3dYVU82nmJy^p<_29Y?nr4)7(tvH+e2S-= zIX(OV90RB%wzD|^kTJkQ;_DGM^N}(wZp?g8SfW$C_O*BT+k0aiAZGv0la_F7cl3m* zZ=*ErABx0y{?oZ@dww2?;fSfa>^+ow zoU&j0-KTYPPYw{7cS{o^t`N-6K_@^pM&X5=>H}wUL>!QhWYFcsi{eK`_tz>@0GsQv zUIVF-=(?fpfBH(XmKLT`&O`KjO6^WI2$oIOHW5C-y66d&#Iymb?cup9=U*0xw51Uj zw^YciiiLj>+6LPl>+H;GX@dKBS9^T;itn%9H5zvne$$yE4Bks$6j4q`9l zb$2&N|6@3CiBy`VF~!9ZH4HYxtxs6Ul%jw0k#Ty8zl$sz?03A4X{bknPXNFNO%`G6 zu)#&*uApbr3PgZ-3Y{l`Vh2d}@i(S0ZBmGhxJsBw zZgwuTNpQAsFPZxK)djzPN@z@$m1bWZQttw))UD)xHkCP#*}GHFQhYjsTBnX+NyW_+ zAZ-8p`Zl(%)%hBga+IkTo+|=b=~put%4=`@eBvQawv{36p(oD@zSMvJbt-Yus%3z(Z6g z@yxncG%Td`h&)c}qge*5`H4d30@2^CmZ6cTkZrR_qwg=7FZ(6R*4VL1M>oa^yr#HX zl$HkS9o%s7RjyCrL$2n80^+i_9_A)m4AmDu{BkJ@j>CY?1%g0R3y*t(SRk_-(OTP8 z(XAlSa6%uq+`?aAzZ27lO&djH8C`3Bi${^;62Z=8{+c@jib-n_{Run+;f@RNxV3`t zC3e7Wu8w*(;-MmwbM}+-Ny_MRM3}qygLYjz7;mPU&#z>d-%AAt?7vWIH^3sV6?!4r0=vajanrt(A(Fr`hK7C$O(kx;!w7%3bxW-~5m41Fx z{Wj{8Pz|~e6n;)xiudO>))=tZw0%|^%G!>0?6v4(aUPr2%3xs_aF3eR8TsbVV{=?} z`1xNSm76r`+5JmU4xeev3!%)xH>{3t1|=Sl8rY)!j*5hr_*GvM`8zlsR8 zCs2bDa|ZP&J1A@WX6m8u1`Wvtb~k@z`&)HcvT2*4PX02QGycE4J^G(=2Zy!a_1}vQ z~Y1(!b~RTI1@a2;V1>UHx3-gAcN;Rn%peT^z-*HSdWjbAY!Hg$od1L zRvA4_zSGpWju))18BWE4Cn4%P$irBTpq8otHLb~#J7_wKTaMVFfssn-{gq{FXO;Nm zt8aa_Z)xHK-6;E$B!dW;0%%#0`l05{@A_0;Sumutw*M;6Z33N6bO374V}iUmbrz3T zoHt?u`8U&L+IzpuClNWOyOK}cvd9j&_VRi(^8yJ;R(vty#ltWdbj#JFch?(RwSfQh z@U4IF@0k-V(a!hh%!Y0GkLqjGn4QiQ2z9=&vlYI0$Fz#WCrEh?n0}DRggDR(Bybww zSDPi^bA8}~8GcAGS?@iD|bN-*~x{jdAb=@D3E0ZHKF6GPrq_GSCfY<=tqWt@v0FQ)<2n zzLbi6KWBWE3nH)`xMGSi6QNlwxgq1|^c)>%p>~Pjoj5%;$#LNT?|FT@5eHs$(a--& zl~$D?n1P!iYXk?wSR8@s`EaWO#xU3hP~~ce=_TMqT!v~hMHZjW1z8wr$hHhd)QrbGD*hbQ8WI&q0Ow4yB^qJ>?&FuJVIy;*>&DS5{ z>9bm_gY_-Fxn&PsU4$Lk4kFf79)8u_Nfkc2!-WA zvX<-EF~<*xKscOh^p;>MzR`ifvtxs90fo*vmJK%=>7AAf7eV&86W`RqL}tJ6I`6WD z*k`qOMsC%^@}%nU%fJ&(cdYkZ$LUhfxeg5EUYjsI4YX(>^;u4a>2})1oaBl?*5)?N zjold~18%zq9LMjFmYO;)=rAU#HhOoP*PXfqHcHt|Z7H5;W`R%DT*q<*2`y)uTMWh! zMDPv#!Sj{}8Aj>C2f2jg^>iYsk` z`Tp`t&!ixnNU$6RvteD0p6*Iw&J57Ns~68?wQyWf;7dFod=GZ9 z$T^+YymIs!-yaPZR97<8MpmlQ%dQfsA(y(xO~m+i1ivixP32ch*E z5b{ZawHo5Na=1m)t$W}+3pse#bZg1@ITQrqh0;6m_C`XoV0%T`c44V84(z*BmIF|8 z+lximS1F6VB%Pw6zRi$}9Xt;d5%eFr2_+b8rL40D+Yx*DtH4r5&28$~e^~fBAEJx6 ziE80yi)w(e+JTsgzb9=-?1LVTb;f5PR5pL8zmf>xCBXeQ!@-OVrK&bv7Jx6B*6{G3 z`b%Vm5yP&#sF{%YShoFs5e(?#-&vvaeEnlrX4$Y^sWDuhi8&U-(!5!Jq`S2@Z#R93 zD){F#$QdJ{FN1Eqwf`jUdr+cX#sVOgc#)t)gmBHpYey-YpB&FwgJL|iXGQOVR{q*e zz1i9Orw<%1k9=Oti&6!_Dy(n(_gDL4;ZpGFqtBa?i=j?ZPb&_X1t@b-T(4l-DZ7Gg z6+{qusWfbPf+Pp|qDmv#S3aZe*@dd#+QPHU;ZvojN#dtXCp_z4oW4Q^|3}teBLb>U zON3Q!`_Y!-zQ|V+UHfsa5&X(Lh7VKsd>3BH#nk%?`R!+rF2ynY#(o?*JP?fze0H^& z0RF4P$|@Cyk%Q>KwRD#{3l0}s9BNPC)xXz?9Gd9;&9kepw)(-l{QgA6bI)f&_hUs# z7OyQ&?I7B%q(rD4lCheD=M+L z4TI3N5cLzyMBbGhGYPIB3fJQH?2LI1Zw>y`%r+yBX5BqRJ|AmxASGaB9L0GGT6GxGIwnDd5KsWv@w^(|~lmPQa#C9$O zc^vOhk53>86eEO26!E|1xO+=%g$-IY=1o6Gc!D2X{Z(%8k!tWa zp#8W7$e`Abg&{ph@i9UUhJDLnTA_7oo&5Bxe;UC7fZ!u!-oBZh{8a&t z$)ip86o?==z^fywdfK$$F~fs|0G+I90+w>l~yH_ulRz}Yi`yw$Q?u@8Ddy@fN`#PvUWgE|K6$m54jYYibDy+Isdy^Q@(risJ;#+so_O;Y(!Szv05ph}d|N+6MzWPNF%Uh&^F22V1gPUt;Tlw;~B;qP27 zFJd|mj>9#d9PYyN10RA@0p-~kg3?|J&e#X@k)GB{s-3Q(KA_j!EQZinV2d_T7<}_l zEB?c0IIBLseP$y-22jT)wmik|+nm!PtNOgO0!fcyZf0%O`U!F(-*+76*|FZA zrC-RTzt`yp*^YA^SG$u^QTNUv9pQXj1<+PrH?OJ+$$8zg8|AZg{+#O{e5<@qd*Xx* z1FGs^1<(F;D6oG*xt~AK`@7s&0@|s|Hy?06+dlaekk@)m$7PylJ`Ng0PTsOQWxuL@ z%Cy2+tTD^TgKVxXcWp@QY%0Szh|4 zaISZ4e8+p;fsu4I+jI%i*%=>x#c{2x&=%-uzG*$WI=rcS?PD2(|_S`>>H` z=2o7ue61Z7T(n%y(*jv#799|m5B)Rb^>(Q2954}39`7NrVE`j+7*rz%>)8qJw^ zv4KpiKaOW7$6wD8koI8D8J+ih)Aov40V}L{35}NKXIXrS|IYOHtUx)jhYhCCwrqbe z0I1`9*Rc`lIqmN?UTGokS&oh0_6e37^`(6pWc#GNgu^E>xJAsPdkAOfXZ?13KVytx zzjLTAA3)q4IFR)6iWYT-7%MIb3Nad4P?KAhA7XgB%&B$u23 zAl`**z9n7ft1jr^!4~3w9vt#AYHci!-4jvQ=#XQ%JGU3@b!~3j%MD(h$_><8I-VrG z1H4G?hZ&DL@BHmY$l$$Oy8yi>opuk*{Z>1l0XqN16Lf0-!&e)ujCw3z)_rKsE8f%P zfU*0#ta9aF>!(VqkCEHsdFsOXJ?{jSTtesmgO~1&MK36Xn%AzF8d-2_`7kDi@=439TLFwvYV4Hk-ylj&T zdqHHIgSv0(VR~mOdT6Oa>T>isXZ^&RgV^KD>FJQ)Q6~?gYz9(nV;6%eP_b?Phb_j= zQ(bQT{&U@Yn9j#X_NP#JKIQt3TTaE6U;F+&#-;8TyvBPJMl4*E97U(6H($-4U+!+- zKNRe+|L0G4etvqxx_y7TU*PCj56rj&sn5(f5KxfbD@U*vc`y!NrZd6$e9tw{gbOv{ z0xpzqQiXf*<(Z7=F^gK<>k-4aU(sn6goE7CGOlC=VxZy=0u3U=Q-NSaJEQcV&rk7V z3=n2MM%@J|u%xky833SGaEA)y$55nzU_rEL^OM>R%LXMBQQVKkNFKGnqQ??vn-~lop zqwUfw4r)NMyf~QkoQE{kqvHhn8i^%)syYE76(3a{34z=S%gQ|jh=-|0kj z^N4{bqf6U+17|1S?Pqr^9JRl%uiRAH3u9#}rx+7%kAa@ zAz|obB1J1PC$$t6^nm!}QgrOsf6aK&?ZKAAnIlBAAfaWTZYl)?nVND`Syy8?-=g$9 z8N4!dhJ*ho#^DLmla?`s3&wj0<6wvqy#jt{0q|5zt!eE;f1?n9mlz#xi7wM|_zND# z_WOPDj9%pUz5v}=_DaAm#_HH3{ZkE=dWK2o@=Ep2h54?HJ-I9Bkxt$!w<#$-rB0EQ z{pzEYk!Q`r7b3x~D-UCg9CyG_O@0R;L-)46)TJHpiw-a<@a$g|Rc!qe`%T%n60j|- zY0m%Wne6;5#`;F(p`wS5?lDEm<;S;_mly!_2wL>*HehF^qbCD|vhIXnO=QJ(S3&f% ziML1?yt&QRU}!B4{hnlLf%+1xyY7*hjR0l!x*GTGuuDU04a6q0MLkx^=snebI_aZ% zCGy9qp_4fO1Cd5Us{i!ri@(yjJ^;}=m9ZnHS#0#1kJu&lH-~*`w5fPx@{%}4;0T>!J`Tb@Pfi%9BwqXUUc;%x za=&HSAtwAC9r&n*nGz7LpYs~~0#NSYHc*jU@qbrh4XX5TYuUqEx9{>QUb1_1Pl%DH zLZ1XAT~edo6$e&6VjAX-01%8+M5a^*2q`%GAXvER2#!r-fJNU9cozCa8U-Q zZSJH?nO%D-DnL5%`mh3O1Akh(;A(0xW1;)-MYkw^X;806e!@Y3M<{6npv2a|vQE~O zFur4m*(dpR(%D+ebn=jnaaymdkgI-WKEKwhc<}uTGWW&qL8F6;boIjzc6*rdb%c|> zu7o*6c;1DmDbEnwBhDHh<{t&0la#uWY&1XRuKZ~iHd#yqPKB+f9qD2_V#U(!9=Es} z@2UrEM%{?Lci?@Mg{4kYGM$Y=HuOYu2pkM-DS7Uxr512!!P5Y%w_!ThYoim*4HAqVnNMB+1g<7 zDU*8x<3^GWv+c~(DaKWq{>0 zQNuj^bSqUPRJL#B~jGU`)h(_ z#`_d=0DRb9s?PM0+7A=jODsUA^4MFE?8I;Wnj89Yg1gXsO~Agye<|7kkKy4L_iH=u zCaLauW~Tix+=K4JX^WVK-i})CLHk;nZp+-KA{6!(tm^6`gIvTdNBkP6(jNDKBS+Pf zb4(0+pa?M~X&Q6XN?s%e#MW>%#FVqoT14CAG?R&AeUK2wOs{?%n$q^&a;CG@I5rNb zKWuQN8$SL8uluJ1yTCP$f$E(dbgH46$ILnvMc~(!(k$t&tAfI}P~@)6%g;p#N< z>=j&p0orz)rq)^Wb^xeuoO}&GJW8Zti@1Lask(BiX|XHs$mV+3lQj7_(q!COM0MFD8l3TzY3aUd76gx$6`T_R- zVuqOI?VqCK{ein9#*8pr`@MAXY$H8~<{=nzEozM27HaZj_Ad2hh0mY`a}ZrIzDA^h zw*-#=QVZQFxL14p?%4+2_6ORtRZ!`xTTi;IPfXQi1mRdbQ?^kE5r{1YA87=e`2dG% z%f0$}$Y~?`3}<<6$hRH%Dw^*%3-;?D9B#R16i)XjqI*bEkOcl5mrr2GwhRaV?WNE0 z*|<#%^mM102sJ8AKruHf&LAo_-U`3Via#IDHDJipiJV?JMSoTpy+vnKFE~@Y(Q2Tn zhpL1VaVahwD%CuN_9rz?0z@#teqX@eMDzw```VO@9qm-~_@L)>oRJ{fHiJL6GAYu7 ztGw5d7ZyBZ8Agq3dWvFo$xq6J3cvT3dgH?yv!U=DU@m-7&jGk*!yB!L7dCZ}8rIRL zH=gOA1vx2NC}bI7!JNqs3ALmiUDwWv0q)_@t}VC)6^!GWC|+ zf8ICBNjF@;=n{bBneI>w%j7G>+eNUu&%$%!-nIeC19{i3ym~A`+n6vIPYFQHQl0^1 z$RhJ*6Ch$rN_)xK$DCZjP|<)K`YZ)`<8K->@H2&LZAL}wajQLm-S?Co)&&CV*AO9L zR@yh4dOzE` zF#bU(`zg?F>fE?SWY!3jSr^-eK&CldaqN`TdWnh*_eU;K)v6BdNBfsAM4<1=Oc=l` zZdAjH`QEwaD9m)$USNeSHFTju*OIEYG<@{fyFU&<6A^e_KRu`~z*Rx_9UeqhoK7Ne z?K7TQVYq2IgRVt%muN(0NW$cMndxe21#u8>0W-0u2SR80O zCvqwf&gA5gWsxGgt1$}yvPQoJ+MyWQ{$;v%2KRmDh`yeZm(1h4h$-|f;1l8eJ1lNU zpBZ&{qE5y5^sg~jwS&WxOvQtX&rZY~jim$NxV?`I;(%{SQtbtSR`AI~3}EwN`*B*S zPI!jjk{WSVik80ED;hFrc@fLvnz=o8eFDIWIf9HKH$nUDa~nfxuejq6jKtJR)ZqO~ z-Qr?d0BWKZRl!}38wt!xc!pJG>VpR;@udz=1EEH&Z1-8PyM+2qw86J~DC=3zu4%xa z12|1GW9~5In!`JxZ=bd^Is?B|-vNY2flQZsbc(oECN!+L_3D!kn`ULEa@O@7vMVts zXUFeeJ`CKF)w@s+IpQw-l0!u?v@Ldq9NeOm`$MRxy~9UbqHd_tOa8{NClp=4ou+(- z_Dx3QtoBdQgN3Ibd-}M{k4KnQskbW^56zwXSGGBd7+};+H5_>KatAloBWfqk@YA}H zPcwNRXzMM#<;UN&iq5r(PIJC97?z`ccK#qq!mAQ* zs8@bO6ZcsfD&u^u5!H5;W{aUl>dVZ>2VD{(CmZKCr4TSLSf*1lJ(I-HeyZs&S-`+~ z=mV`U{d~Vw`r2ICE&$l?u8zT-)=v?ic7*)AzESR3i=j)U;z2&_3fcrMu(!dl~fJmjIiJIN#jElisCh2VQa{IIU5J zCeXXS@Kz|9T%7s{JUhcphIOM^Oi^{)A*K}?c%NnC#DWA?hQlx@2@-%}3_8LG-^2uA zjA*vYnueV~+Z51*3zglyFw0@RltWDAGPE4hxLdZS2>3I}#o2EJIZZM5@Lzm)-tW(+ zH#4sj@;*_Rk)I`qD->$oG5iwdZR593#`auYk5Yq{57+&jy4A}7%qoDI{r>|Bo z=0d_>k-{GIi%HtykKH1->iBMGYmgO2{==aBKQOMV3dVi?|Aleqs4fK>gFnhgIs(cH z9%1el^mUCL!qKZtT2Y#Ztr&J1DWCkULaJF(#NC1b>#=5X;k((^#|s#b^zayezO~f@ zL1Nj0}cpEyZD9z&@+7cqkG4Ea|B6GK-Oabkn62qy01kXHQR*wiKBb+ z5qfT$!1^N>)EGEVhG@7JbP@^#nVsbTqZMaS_MUG;kIm*E3Zf`u(zv?82SW(CfDd!; z>U$pJ!LS8@Zdo-SSZOhJVntJ9oMM^v7;f(a}4jL|ZaT+A+*NggD=Egn}anK4LMPypd+3Y)Z)=U4xyPR!s! zH*#w(`y1Ur71j^}_3#sM z^v24tskIM>ai=Ok{sy7bcnt#It;5<_U>pP!jot}(j4+!Hd5pr{MFkw|J_r;bPsl_9 zwpQxg#(;AL%JLEYbiEFq#wPagaBqBy&6)gn(-eu@AM2w*Hicyfs=K5N^Ku`Evw+wa9cI_g@lM!>s?~#;U zhJ3Ob8-=HICqCEB?VmoLmwYX?UgwmFYnbt+M=O)gZPOH(KcNR+itYShkZ6!ltdc&a z{Cb?aB`jpK^Nw_}u*UD_z)%_Th=PB}?~0T~q-9V@fgAH!*{>5b2z^1s+la0ZWaM3) zaFTbRtPGd@aYxV)cO;-ppVpngIht@IP&Inf`*9&RT`H|y_lJ@0FJD?Md|++tJQZKP zr%&0^$+~DVRE-PLlfg+t6}z7wE`WR`z1p&-sZLbzvc`bY-)UwVO@x(`2@~gRjt==BgPD~GbA03?*qMtVOR+C)iv5!0f~=_ z%%B!%dCjW-+?OmB4Wdov_G~rkJ=S=%Wd2a}P;Z*NXQX$_zRQAZeS!NKzh*iz&_Seo zdao}1^+07SRaQW4c#0DixvvdW3vWsk&19~xoIs1_;oV4THbr5GW)c0oF|(aSVeE&l zN7s?zH2#7#5{#y44J->DeBJJpE;aOCm1(mesYO2(L2J8ljyG%Pv{GUkDwThDQ1#JZ z!wmyGbR@NgRY8NA&DNXN3>isolygNZ)k6f(u-gtByya(UYLD9Gi*C|&&W*LKk3i2N zDFAj}^vqWyA9C~U$$)LIwX(fq&-g*+4;6}O#>MCwlW4qV;y+>X)y@%nGsxQYKQscy zm-Qtn9RfSuqHLG>+3pF;j(-10G zrE^hV1#T%&YY)2x^_{IY>)25dfSt;>@*I#E8u6Sl%&k^LF;&~Np!7Y)hG=(M|6E?$u~%;k*Dg0S9cQ#* zKc)!Q?J_sQv|M0R*UZ7Yaz+Vya3~o7#;CXo+6=5_r;w(e&ET2IskN@*{T|vglg_0- zOr!61HZL0abEjx^NLGXTGM4RFM^=* z05t`TV9eDd_{Fq3`d)dy`UgdjpBNahwsX#Zj|6pulQxiw;2UmeIpI`6MT}TEpms@w z!kLT&9^}o%UBt*ufWEsnK7}L*dHtK|`fj|kIPcu0KA_cd(!prV9PHlmR@VXVILs_> z%}=?StW&5p(n*K<^xUfg;oC&N7}e>b!P=HAHJpTNI7A+`jYE|Q@V(~y@Y~dDpLY7L z3UZ$B?oEZWM|azv2Ana{&(n1&vwsi5UYF2zx0%WR-EVk7U13=83^Uz#=xqf5Xtq-}-F~fpv|YW*~8} z{%UFFDl$V;frT4Q5RY=IMwEAva~1mMD6z#!9rt~AAM)G$n1Nd|)YyaMMR1n`t>NYC z4Sr{ZP};Ef;Qs0Xguxz2j738Xq+1dbyK;^KwcCsL%~++KI?9sR>;3CGQdp6e6WZ|W zgMY+{w{1$*>SC59SUU;>*4>G(jd!3vgp!`v+T`*NSaq4*lTs_*lVN1QI5~HKKQwW% zJnk-!nnMItMx{dR?vt%{)m`2u{=w5hb!g;>LFkfYo>KjS z6!V6g3J={<5)sVCpwxev+seW=$%U=Hk#*Z5IfCAm<+p^hAZ#z$G@ywAFY2eGJjq}L zC;Cu|+guB*qqD4I!?OMRIlXH{2#@U6t5e__QO&D7PsL2xrXe-b#?-#2L3!=iFc=9C`#P;`81CMr4* z1^pC+%7SG_p*F*JLgVF`d2gcjyn)2CxsUsx5e#Sq+lF~K^KCXNP3T41ksV&g`Me8{ z4>sTPm7!!qqTVE#=7Z}}!5+9hNbVN9j?J`av$}6vL9$Hi6Z}>fwAm7c8s~~GANZ9` zlo&8--k@Bp)`0r9_~5simKPP}!=!*crwSpBa>PB3TDY~Lb@aZWzx1Km5I#}!A`u?Q ziRxV5o2Jk$Sl+fpXPeezt4v0o4=U~5Q?M-&dd6k{E+S2B*LDr6fyxhQrj%#JD1bi= zoXJ4+PD*-7Mf&-j-~pD_JW;Ed4N2r65xblU@r5?#;hFM{IShMrgGHnQ!dup?`0PeI zrT?$HC6iI;nFtDrgZZ+7eu>ab_6|H>KT!v2xihfJ_<~jtBc+o3rRjU5BP4PAUEe7v5eDIzWM@6aCM-xm{xx8jFDD z3|Pb?@VYDD;bPdkVBaqUjV#A$ER6?W_EHliPhVDu`^-VqNOa&9)|I!1H5!aY%~3dAhu` zm%};*H-={GxRk;AV<1J0v=WJ306^m!P9s#Re|XwzckzC^*H-)C6&rCCu`KHRu5|0l z@=3VIpE57Mr;Up_ZQy)Ju>!gOk|tVTvsekOa>~(nq=u|_-DQ)erW}F|qBe>sP_PbS z2!(i4aLA_qP%^Es(gw7F0*e=d23JA1gF-sd2Kwp+R{jQNEWnqhb-`={h(wQe^62c_ zqyO_CvcP8)wH;(bTkf&-yP$Nv^++$x5jJ9FGsM6ZahrX7b#>!@H2&ApA*GSX^E)VB zN>qDiS9B#CKBs5>S(Je4NQc1mx3qb>Ydm6Wrm=`hcMS^W$P=6J4f&ND2g@!BH980| zk50`R3H3;RLwt|UbavkJL@1>dv_WEbp)!?pxC}`>YRO`3ds3l7vP`ac>|>#x7D6e@ z&@XPNl+!H@E75D0qB52tDN2vcN_l4E=H{z&QIQmAD51H%)l3tfjpRCbteA{kV1y}P zyK#s2j6$L=N0*+iO@G^>OGdf7WKo%rA8sZGcQ>ciwT88v&ht2Z+_v<@Gd(-k?C0Is zN+En6k9v5xP6R~2zLi2?aRr$N^VpRc?t4`{Ui0$aT;bLTVtE@1@^r_6Zgiga9Z*gZ zY?BaTD?NF?wNet(+t;<_hX*85p78X`e#gc@CQhwh2uBwfo>l#FdEz1t$&x~HImlh5 znq(0pE1lU*zG$%rzeFY7+fa=pkXBX|> zG+9r=VMhu*!j<(<#@_}meW!M-CZ9sMmW8A%NODJ!IL(3@CTYEqXnF{b#^d{{RO`t) zNx9@huAQKnctrR`HH|NQ6FH(^>o1rJAqE7IvFg>Rtb2~W7_u9cA;W~am}V*f<@g=P z`^_6DMH{U0yc4%RT2?;;f^>0^SF8_bVG3?z)oXyJEd8R_GH(lo`7#1&W0{1~e z0g$piRmK^Ay&h6g8E4m1K*nQD_v3 zC>uyL2HO@0ic+apH&SX6<^If%k0&?W+My73;YhsMoQ!gOqiKDm$PDQR9sQ z`9>1!$>>+9OAYqwAE9p8Q4Vb=H&13js@aI!!oD~W2(4;-+jp{2C77$#{%oMB5cqc> z6tv~S2GoV*M-w7$P`0SaStS>hkEx@;i8z=J(8%Atg2all490%f+!mkSRqp8w9b! zfeuWs@yNQ`e@Bh!VicodAlQK0V?*jf71Vp+Zti%LP)*6|`F=R#?B7Z2QIKqo+PmRf zpwb~z2y{V5{4yGnNmL6^By9m%wtkB@m}(a$LpLai(3=IDXD&oZ+jSE;;3;zKlSiB@*mBO?U@i!H^oMq)d^5Jt zG{twFv8{8I9m)g^L%+CN$$`0uvGxv*jl_}l?AY98_0RrOKB*=-92NdNz3w5TjIACk zhmeX0&8V9OwCSNaYBv?;5CUm!GJEkI>>h5+b;R&rTyE0=`#GS}a8Qyc_f&953ku!v zDA@B!;{0-3go5iKca7#0tzJf| z^oU`B)bx;5!5a&W5lV0oZp&#!=WY3hvnD0Q!?0xOp^M>=&ch%hx$0e*1n;*tH*Cqr zLy<^;n&K&mJ*NZcD+`D5Bs0xNsxIe4q%5sPiN-uv?Vh4C^ZV1X@Y%Cgm~@sJlMb7A zfuHcv)a?LuqBhQ2zu1|JEnv?xMJG+!Kwl~J*(LD0@1TeDS^CTKfwvx84*f2a>>A#NpK{*;{fH)=@av8KQZHr}tyK!A-#&!+OTlxVCYu=tka0_CPCAJ~s7n2u=?f#XK&(i^b5M-q ziQ06Eq%2egwSi?>SnY`@yB(&jF|Y{5=4~EN;~1#vhgnPswCMd` zaU`DK6~0dbDQj$^aX_tF zP8tUcS8@Q>(tkOXhRSzw!teUMaPW0SrDy;WEnzRp5fPg2cB*0E{GeVY1YNj(5C|c7 zBQDB&=@%zE%6Ftvp?&SZeuph~&lQ={p6_UADsFt=+1xZXV7UFPVK_{68_SazcC6@U zN*x9i9YG4nre;Ju;H6joG4r*yy2LJ_x+or92;w2gtHj=TwCY#Ino1VwqnVsJpXa(QSp zQYVU1a@%e#cm)#4=?Bk2Tz9-{$PYRGgS+?;lF9mb33ND6^dvJYE7<@VFGT~WZ^9ZJ zBF2BwTNraH|DdV&FfTLJzcg)}=}*qOJHprY-Jh`v>Cml&cTm0BPii#TlaAgRF1TPhXu~-9N7KT3?!nopo7Q_@ z+tld@n4<%!gxs5nhqelxXds2kIcZ-OL;YRyJL*Uyvo9$?;WG; z8uiZv6NDxg11M zPz+hn@^uM9?3pwa06_e?sqsHRpdk8Ryu*8;Kicc8UAp$mci!fdug8kbZ}|c$H8shg zXkkrzk&!iKV-{~6mbo8hblZK&eN`h z#VsGK*O6)iNy8ODfMvw$y|Kz^p=I3wna@AuYtW$Msi$xGam^LIv-UR8`+o%JS==Xr z8d>`v`g?0$N^!XC`w`bAwhSEy+&pmY9~|FsH28d2g=Bi0^3XL-?6UV+OG*KxdX$1w z>81d3xu885QfuZ#pAU^7g`JJOK2H34+#F^!TybC&HB=b@19m$2-;q?g`X6Xms&=ZF zrm54aTL!Bg*O@lq2@L&r$9?p#nU~@Ee+Jd$@CRs@qVFtsb!CA2?GuwnewW{~mIsS# z%xlscWyMm#73QqWaF48TX4=3RmKvEAmX)TJZ5nsCt=li}_xF6x=Y0MGf8ZRib6u~; z^YOTKUeccYH;6uQ0W)A!M1Z}%+Qfa_RT#0`SntC_qXpW7CbJKC&hFhu*3EQ;-lE1A zSe`W+;ahn>%3AFD@ya@Y+jE-zgxe?yOFF0Pd%tAkN6V!WcPYIc9+Z7%OkgZC7@*@` zW+bS(bcrs$9SHdJaxGUSay7olYQ~SuUH9MIF#p`S6K;Eaww`{;gaqM-KFtqz>1x4vq*Yw^j_xd4porynb?$A!{K?s z5@C3mnJ_>s>NlwfMFC$H={ekgvA)tt$JM&PJ{?co*dE(D&_G>O^kZ*(GMn3@XbbQqBFnU$1NRUhGCTkQ>FP z1JW?8bD|ac@j#v#-XE^IHDkb@J7gM}8jsx3PdSNbD!5|grFNE@*PPx6i^b3Ge*VuX zA&!fR5JrSZBd=WZ$&HS0=XZCpMKc}y3#^LZ`pj{PXM9RfQKYw8pTOM(&;`>n0_!s# z5`5HOD~HNhlCNR8CUVm0g9nwX?yzA&Mv0K-P>K1+?At%)KDwz9P2-Y@MX^$r1)~~D z%w7yAmhDsJT?glV{hsT|GC#P@j}3RAvTYiRVxyR#)s+WiQlygUo4cyLA#X0APJcbb zT|02!F4Uo>CYoI_MBS#QeE=1sS%OS>H?JYX!Jms)4(MQppjnItofRHDsC9Taqx$Ng zp*NW+;_T?5S(v+$Q7*V=z+s$En$2WvSKX9XilVzP%JLdo1#8vg>Q#2v!+0aq^Mb=$ zt>qyZ>oE5cP0ZOA(TmEKoSiwZ6RMP_l#o&I5un_dm3z8wvsonF>q@G&XO?woKAETX z8dtD&b`Q!)%E4>1z%iy@QUC1>H#P-Lt|OUwK6~2^z0fbZmNRZs>o3vjA%Ogg>m2I% zEN$$bsek)zONjR+k>4!Kw6`@~(G8}cqjLot4S+B*{c-G}f5yMy#$p0m*=q@J&2)A> zJLLa+po6OabvVBbYO=kTg;xJMtH-On^7-Y5zmJ+Qx_WiSHXR>!v@^Hw-!arzmD;fT zgWhdZi)HhMS?hY#(iN-gO=TB)ffhw%WS2*U#$8k8*1R;GC0`TsOc$R})h_PVn&FBE zYBp8%A*b?^S6sx2hYA;-X*>`S1nRL!W6vlyDtwD%!}bQv@IUbhY+Uo zOpVXX+f3EA*bnrSTR#1xwvpF(IBXndSUGRYZP7WwJ74z$Z@0m`KR``8{%wq*3#Pi5 zu*G@xunoRO$I0;=v~%cziOJX4Fn~H%EY$fzRq{9*4Axp^uYV`JZ56i0Y)`kD9^dD} zL1M|%35h-MlUQF@pE@>?Fx~tvv((*C=iZT!I3W#v5Cc^e3ji+Rh& zc2|S_$Au~G%L3Gi=`xLGD*IdDkkfA3A=Lpf_go#mDueLPr8j%t@K=&&1`briHfL;h zx(-rtxVgc=uTIHh*Wp_>Iep$tK>lViIYHxrw@&od-8%dF+ix1NC4Iv3*wkZ>^Nfnx zYA)@H;Xq=R2HvOKrg9>ZmfIreItID*k&#-gVx_t-X=9_hYuUHcly?X&>Ry#{$=k9P z){L?T<8<85%8-=WfBa&@gzTXbAX5Kvwc1^L#(~{+a7+1N%C;D;Ii=1r^uQ6-{mbfh z*01u*ZuE~?*?h_80eu*Pk;VzY_x_@P43nrm_8mj~@0LK7aS_a7<=N2c4z&}7aT8b) zQ8{Sg=Y{~8oAC)ARP}4Hib%~5e3+5z|5Xub7Zo3y*a`c!gC2G0w#&V{M*9Db`feH} z4tUk4qmGU)8CZ1z7tyi2rit>#t_MwP&GU6+havb`Jj}{*zV`fL|B=WQmG5Rc-nP{# z8R>nx+8Me$t)DkOAARv*-C2u9p0}Gbd9s_Gwr%s2T(OjWGwKyEnPCr zylYP-Yu*-!te%eEiRYdFfUOVuaJ?vx<8|3Lj7m9ja|Cqsq1%BB;RJTo!bE28jhaZG zJ*Ix>yx19nc3K#9oxNZ9-`xL(+7mGwcZF)6G~`@wE3~Fs?q0|Zb>ZBUa-vpqL#2A% z0&vSugz`N2rSPog3R82{)Lc%&^so=US6_XqYZniOx?cWKxbarJb2Sd^kpMO(@lTV% zP5{uT$mZ4)cmbAU#sIlcL2*CxO|wBR4A9eTEIX|_^Z>|wg?&;~bdtd~tENn)8ds8x zWEn&AJo0n_|6;o{x8D+F{0Dxm14nxzJuHKdmTS;KG~vh z^B>B;i-u>YMlID>f8WRc7s3`CgPSD|iYE}448f*!wqJCIwq+sZPrj9;N)iCKB!Rb2 zUK$9fZ-tNE$>6v%(R@E2FdJcv%iYU>ZP5qg79dgcTzw|Of!ZEcox4>8bYKjGRzo}Q z8aj)>vW23sKf;qT)_NMS60dvp7|WE8zBa!P?Y zQOd$CKyOH8KK-m=znf!Ni3`}%NT|m3D46+OqJ!V8RfhTF#&1aENPiCh1VU8KmUXfC z_Acxgno@?0`yY@UP0c^p&wZ86x7LH~UWIlhsCePFQdjZlWnu6Lsr?8G1sH-Bu=@j9 z@$I*QOW}U*=We*4yI$5GTBHUPM{Nk zs|UagWg6DmpD_^*bNYu(XeHMt`=4Sa@2FRVe&~1r3e3lH>;a&ge()#JpxI2`v1_bK z53pIJ#+q#2IqQMIQtD-|$EmU`uf}-Y$tWn%ogPlVW%aH@mJY{@Sf<#H+hLO}aEdYD z9%n__m}JKd z+EaeovCDSI+z`pU%?fAcAY2{C58jg20J@#$JRF_@xLxLUuM(UZdz=2)2JK z)MJ#yNpl@mgv*76tWjI3z2tLfFDcc}lJ0+sH}jNps%8>I$mW0auNlbJ(npuA*?Jq? z@ZUU_*36T5=KEdGhKr(^EWH)zi^BXE5%8#ngVRDTjS-S##V&lA8;_LS-qkYxc0y9x z(%{Ed!3NkQ1rOET^HbKwq*(yqB?$3sKa0~&+7hR)xg$|Ncll(0h#7@Ebl7r_pR zVBY8Mm|^u|q!4`#MATFogB)$+tbNMr0FOvF9! zQpN7lmIva9D3*R~8`6zF8PCRKay6QlbpO(*+~sl3l6E_e?bqh zS!~JHqk|~(uG7M(T#;)oroKU5P<`-1)v+fHT4n96+uJV+zy%j{_abn3NJ{lsMI^|H zIp713RrO!+k#4y3w$Rlj_ivk4`#D<>WzcK^sHA?bUe4B}u`F_s5OrH`*TJ(Jl~*Tr zqTL4F9t^fJuD_69-=zoMorBO9!Hx=*(%|eNtLr0Pl|}DCG1$C#LX88S{meBlY85YO z@Fb*}Va|oEbe3AJfa0Fa*c^wSrI$W3Md{yAS%`% zqQ=x_77{q@{7h#&{Io@GcT*<$l>3f&s7A3L5poHbh~EVM=RyQE|1bkKc4#70jtL^H zUm|IYSb#Gv^{0n=PoH70moU}okL(M!s#UKq*TSGn)UTRY*Eqkiw|QmM0ZlxsSt{EX08L9<3JJu`6ea)9nz^fQadQ4 z?`Qh0*O}AR)!wF&(=R-vS+9D`Ejh-Kh&7qVC7v-SH^De171VbOIsX9kZvoHEZ2r#9 zsLOk=*2$bNqA?`LQN^HgX_9A31zO5<&i2-qYQQa9*(}!v{hvsyYztdMedVxm#M28xxS-fP8Y;}I@Xe%A+d;ju?YxL z55jsM=@PD_xC_H?7$aaysI{lT22WqCO`p`*-YhGNAux(b+FZO=8jUZ>YMP4TtZJI?uEe0oZ!gfm|y4jIlR! zV)U%vG%kSWzh3vpkT>OfT_^!N*%rKrBbDk>-$>2-F9Byh1Wj-} zq{F@PSnZrsaS!jWokOT00(0%f&N<7_-L2Q>$Em~8Gd|bYc9D;gcOchefNG*rL9cG+ z&awEhdm0`Ok52Nuc@T#r<-*mLhn@lGIpVqd#0ciiI2zZozsvb&Ph;hc!MOQ*Lm*2z z$j|iF$rU!~=YkC{-s^rh!av6LsjpJ7=j%Ce83QcO>iiOZYmRVQR_gai1w(8FQt6*v zQrYlt`ma{ePx%jiJ29+wzu2h7nR7g)j^|kSFVEhMCC+V98ZVB1V$Wxu@)kf&#}{gk zJqo=>O1iH5GKmwq0HwB$TE|0T{GgsxQ1n|}&0ZT9vGk;rjh9IW=Rb_&ftY4CV^edD z|4`D0t!te>crU-|2I&n12v0p^-usrb?qeqC2zuDcfnr;9kc%m@Bv7^)@VeKHxxA~M zQsbXbo>uJg20GhqJULrlY{ZsNzp@5rs(qU}6YBlO5zg;ym0Wv#jqRAOgsBcZz$hs_kGL9 z2u_(L77`?vWmtg7Qm!i<^De|$Gs-9TjcbX8axwiwV(_JT@ArDN$2w1(`(a1;OJOu|{Ip<0EueOux z239zJOolUq<01TY`Iau6JYMrW@rwCxZr=7Cw!eE)?t4c3?)$7x%>2C{0sp_z6as(- zcm-(rf1)X{XSisIsBR=5V;oT9*I7SSsL7h|C(3!n`U!*r1OKkZi88$5dR=JIX?5Zj zr0H)>lcuTviKdKZd*AENkd0c$aW2if_>n1}qVM#yJt!q99v|NX6{&kHohSkQ?78^( z3T@4EE_d(4Qliz3MI;3lAiK&~I?Fu(=81_;wAu2zSFgn8TPa&0bpI(Uzs1w|SLPfc$OW?Ij+#IGf2IA&c7 zcJezG8>|1PrENy+F%+6?8Mfgp*-?W!xapQU~P!e zb!uIx;kbK#86`z}7{)1xu%1!8pPKIkK7d=Tp-mT(^|YyiA(%FL0zETRUCZJWW{$X z;@kIK+O*BDjV*5;x%Ns&(^=Z2i8?^z0)ooFYde> z=)dlMfZfGvN;-Eq-*#mMK5(k1S6! z8F*(|Ba5@}ue$=tU%a><6~FqsQaiWA%Z+U0e-f^?_`&3_^8jKwBdu(*GKy0{(bzTUTXl=P2 z`MPkee2C!h5FeNIb>Z`RW_Png{!N(;fMA0}q?{MApoRs7`5ed8!iP3QNE%Jt`U%RdSac-bC z!^9##kNW1A7~WGt`V7<@fsW};R6p3M>D*)YaA&~A%#_n7XYh)!xk-sy@$vBO2?MN^ zBi-1F4dO4G$$m^GA~0RAQX{(~b@uV#R?Onh+LnF8Q(yzlO_IJA za-*UX_f%R#$~A-Eb%<&`OUib-c++6fJA!1Wu_h-Vhdf3D(;4>*6CoC+D=f`(SUARo zjC8Oz%!MOxjeT#7c+rc<7{!3%GBwXKkOlW&9oF8b!No#8Z*Xbd6^+#>Yy*Jd+i?Yb zCT~3Sh>8FM;{e&G<-!vRtsvXDcHq4n1#V<(1HA(LkK}mqMsH|07N%3k!vdy zRU0YL)?qR8#Kb(%1ZO~8-FG-%U>G?{15X1?QNhFjS327V_P5~>!zE&X=M6KjU0U}& zI~Se4P?RlRGU$ne7p-r(kvFGu7~Q7mQVCeWmyEoh( z@9X}{*|mlZgx>=wsZW1Sw@s+@nw2Sjf>A^eu1$~s&EA>-tUdno>E>#hPFO~(*H8Va zYqJNT#;sy_LpvFL^zC&*Z@ZV+gRY^7Pge57%<4k|~?Yp^P`^I0-+H`bJ@-QK!9!3h8WgpW3Nx??;Ba^d79o zK5}!Wl^IUm0Ax*14n8~pqk%Ut$6$rd)cpKa3m=yxhPLh0np;0 zt{rtsbwCy6ePa3fPXML&hLDqVKQiKSVO~%HPVq&b{fl6KsY)dgqK+k}HI()J=`8N> z_4`UH0zfA81bZ7;cHTFmpe>cfceXK24vhX@heZ?a#I7Gv4_v)U#Kv(COudYJ2yQ@v zFRvj%u5UKC1Kxc2^(q`Pmv%VDEFT@3DI`fbj(wd7;KK#2Ws>5Hx{!!eCIi3=X-Xa|WTck$uMKen%j;*%Tn;wrdQk;( zAOjQkDS&zRDl53Ed^y#GrDr=X+~Uyz1e>N)))g&#qk94ckxC#;g-OKGs$m2%wS!)ANy)Yjl%u3N-C&HS8Y{J#!JC&KV4^;9ro z%69L6echbz9+-8XTzTuhXI!jIoyFLMUi=f?O`teNE7 zv-vhD0sKdI7U6sYxQ5N;a$@!K;O2-sr8}C!?zkJU<5t|_Me?z$6vK|S$mD)VJ!Gcg?W7|W zt2sMxOfNOZp}!@Er+55oYF9rWI_0y!h{WHEc_LLLV{FAvnz0^U8a^x7H9d#P2bx>9 z|1@-aEK1qvzVgsXN1lD#T{aC#6Fkwgqz)Sml%g4eVVDn2`Gp*P4`)A-WMggQ@{oH% zrT#?B>AeZmv~=pOLWt@Ian=^v$?prOsXq7v0&^__e3`(!$AB))n4cK76!kJuJX~Ia z5_bp8*xBaVW94Ps@kERk#}`4O!W@N&dpP9~xlj1Q@hXf>1ctgXIVT-=jM+m_*vq=8U{zrQGg(hW@`c$*1-1X8M50 zi~wS?f3s!)72*Vl46WX)(6j(B6j!VU{%1 zH;n324Ad(w>sC|v6*+nir&36x+#xU(BL5;g_l}V0&K+j4G=w5&vL6s|kO61yR&Fw3-N7bXb{r^T61Nq7ce?-wSDAOtDA{Br_y5fprv#8!Cu{Z5;tlcHxEJOgOO zr)UUEIn-ZVd`hn51Snag>r%evR4(&ouc8YcM>+|VEtQlaMqtm)kvqhWg*en*2Djlp zcdLt@g_CjiB6N=s#*zN7ZJz|+FNNx_eHH94J^HisXe{)A0VtoI0ol_8DW))x-4Gut zBuHeasGbA~5-Z|!)bbgMHg9IKPM`?tEQMrit($m!^eRjHt^?Uw6u9|kI5qhI{g4hn zEID8<-%yQ`BcW4%<|VT?XPRw|rY9Y53EN?QY(I-KKZ6pB6*Ft&8H}>&!|jgtBz)Eh zUmAQ|j-({*8W$t{7a=K9<;zrfAcm5MQ&!YzB1Vk%VO(v8VUFGA0Rq?|DNG^9PohF% zJ*Q!jAHFgf18ODP3sqUvY7jU+fkf(DC2^PDrE3lZIV$| zv6n%d5Ryex{V7tF33VC-s>lIle`4SF)DWRaC;VWl zT*5$bOXwdol?)NY^s17{VVL)f4~dC-$DoqL5Qd_6zko^!23N^Z516$dA1Nyo_l3;x z!Vx8nUh^zwT<^sHSnhvD!M4d^`N9GVFM|YJa4ihF6k(EUzpv?l!r`TqF85o*LCI@W zcraBrb;*hFRbe{==h2|_q+}`$?!$0QZdT~*AqS6u+0-zBd7G`VYcLfODuvenQdOkq z4>BNFopcYaw)i7@@i4I2xFdmSrtciCuN3}Hjbcg4r-vBE6RO_t0H@%NT1q2n9Lv7P z4s<)%!CsmI5OwUKEt_fYhhCPdXk zu~mZRTP;coLH(X5mjyb;0f`X_B&B8thaf35QvlgP+S@c_C7hEA03yTZ&&iGy?jROZ&GNctG;|F_Z)Ir?Xa zxo`h5Pn1Fq$>GIfc-kRYr5v75P`W?6-lWjKk=2z1Qe1|0f0KmMso>|L-XB6Giy618 z;MR?9EJdFCi%{jW7-2LU_(804eG#Tm(7zC(?zbae5YP$>{pHs}o3Hi2)QH{8hGLrF z(n`-MVUPP!y}xkydp0x#>6uxDog^df@>Oh=!D4ESOsriP+SOC-nL>x$b5ecE?Ay9U zbzG1{T2NkK)CwU=cQGo@1V!&G;AG{r`2_331w8?~V7rB|b|(D7KhR~T^fkOETP}=b z_Eru#S_5qo1^S&LB1fhRuB20uSD0Jk31{kYdzaLW z{~d9nW9+jI!HUG-Z9cHBC$Jb?`}21g|3nOC&}jatV$m2p3XGq6gijHYM+QvO9~mZR zKyl5WGE>YzB)Ft&sMih_E(BdU>(nu9xX%%@ixBa~B$?Bnr>~U8>^IadRI`CZ*rT+w ziL9MTUek58Nf5(^a?Kn8O6(R*M+I4q3p>`TTWEk$$B2MK6 z1L25+opeZRAnwW{z#il_$RfQm85d5GlzgTAa3Tzk?RnB{@?l2vk(o=vw=IVkhL0bB ztx#)bFp%KRJ7NGhenFTtocf?Y=Es{t-v!7~TGn@|vZGM(w@$vGB1v+N(>Zh@6(X_A zO4T?--s+1yQ+$pK|2K6?rB1WkF?fv`1BXwyg$9j;`@84q`U*WBF2FbkAhOda$GE7I zZ(y8U%B@Azqcw3>`gM4&d0$a5^6mms;%;?AggQ&jAp}JxF3^)gdSYmZLxO}967(bu zv6oq9yA2Ykk6dW8QD#Sk;SdC9gv+2aCl$^LWzRahwM#FPU;;|q}^+0 z40h4N(v8ReI>Ca(kZp44!HmaAf_vLxNfGlCZicx#(Q13HYmxxqI#*0x2xi|{@^FFK zRz~;~7-C7{?>lpHD%4PH8J@$nJd+9K^wX@bkHIv}=z&k-f`@IbpX$$g6tk!mM-ov7O*!4|cG_B$F&sT3_g{Mp55)fimzm;=54gZwJT{F!)EQzffF|7I5vFKaj z@z5js=0BdhLc`_iBE20k*Ykp7D}3H)HL5i_ZB~mEB^;MOiE@CkFo@kf=7$*>YCwqh zPL)(b)D{8i#{xQop*=axV~CZQ;qXU7m20G0z*N(F<@iE5>MR{hr(UT!iTHJ7A1`6^ zF;Sf1EQ}|IaSbSk81VfBV_qc2f4BQTBj)To-<;wi1sn4FuKb47EotD0!?%tUy@v5I zh^AA}EJ4h66}3QN4b&37;XZQLpz7d45uMSuxK`6;DOJwvQBi-s3w1(eO}bBX4*fv> z=^n0r$yLu_YU=OGVgNx&>T$tGu4Hjj@S;BqP&%fFJ0FwKhKv-bqq{-}_){nNrFVhW z#+dR|44SN{r;v0b1(UZ3Sc`2WSHt-7au*S8bl5D!#8s(NhS2m=p_Hi=)9xqif3Yc* zu&?Mz)&5v({lq%}_MO*;=W=1UXC*$i>j#5Kdt4f}oSLt&x6H}?{UcCSaPr>G+|Xvw z)Kraor(jM&Rq9&@G~@PsZ&j%v$-;lYfxh4Lduj-Uj)ml`|y?AI_+##DbaS>me_`()p; z-?|3xQ^d3@w3^aSle!khDMi??O&>yv?H#p$e(lBcu-5eSr`(s%r-q0@*ne6NHYb)k zRX!>2Eb1Jr`35(%TM#5%o+l)T%<@zy+^sm)_dhm5Afm^W*(wo=pjMq|y8&Z{SrXKc>UVk zgSt(+1{p<|wYiT2MdOoS)*7Ibhc$*Hz zO9_W-LT=CZ0TPIOiQ-D*q#NdFtT>0iU2ym#si-%XD4o~}+eYT#R7{n-U}lGga= zChb@Y`}ig<8`XwU6hRD=@k<5P$W1PB`N<#o=u>8=`ybbK(L1;0-&uGGFI+dQT;{pW zJ3;lli14t{KE2<^BDH=2Q=Rj*wAlhLlN7oN>e=xqV*&ro`4~y}kZ$(#BV#~YMAFT-zH1s88b*FYM9n7&Hs%Ak#!|1-s}#N~{0JA*b@jsp|3_eDLf_Tx$%kNY zZ5gR(z&Mf#2{ydhYESwhu&fst{pqitrSANEVa(jcsIVX_(+gAj=BQC4No61qrGI_y zc5Mza*r+fo+4oJ++y`t)pwWt^M@tCVV=)T{%ifHJvgsZ z`|5$_mx)qrj_p+7>x%?$z%dTe@=5lxV9S5_dgOS!jPecS_0F%*)+rJIg7>c~q12zm z(%=MdaJ13-+x_4ya6`VAruyMlSsUGi<2G;*Ew4DL;4T>a>fU%K9%QmUSY&gA4~(r)WUsRq^I`KgLui$B{p~ zA9yVYG@Qfy4Vff^Wov{jfxRSpYZCZH)vs^0XT<%CtrxJb^c?mUTecS&VlD z?|Ll$uaj%F{8B3rH>SfzAVo;N$9=n2_&PqpgD-p>K&(78p$GOl)Sg_2AhX4kiDvuq)9bjLv%A7 z85NkMOu4fFOLc{y!)`oGQrwQB1V%hxT&}gleJ(d<$JviVmez0OFt>%Crp#9Gx@rsI zD%H`MUeTx~r}h3$@eq%@nUwU27{g%O+b(^#MQ& zN@|KKZ38Sx<&J1s;@SAFx}6bJ7UB!qn}vz)_{jgL zwpY6T-|I@7zWl>Q?jp&fUwR2hBC;}#J_N#xnA)S3qle$W*UkL}5indRXO<+Rc4da+ zu1>5>gDc+U7^q8i!iJBy^WvO&6%V)og}lZI>RTIEi1o^e+oc?W_)8JRWeAzQvS=?C zY|SM}NiJW$KAsggIXNUFEB&5oBG2mDF?C~H+7Q|uVyFtU6BQ?7V>SWCm%^@|@$t}= zd;;+LbF}77+1Wli>A1XSnPiRZ zY>PWmoO8a%_I<1DkqrY<2-&etxoaQWW?kdEpl@esv<1*`he+hA?B0dh`zq?Q(Nrp| zu2U_JV(?#Si^0FV;GlQ+b@ws%+6DL6se)%W@1a3i1$FS{4^I8Dl=~Ph7Pa9CMXgJi z2K4lP_NZO3oO8$Q_*%kczuo_q%h7&og_5_jho960H0CzH5!&M097@Y4y#wq}F2a&Z z_BZDrFlN4097J%&E z(O@0K`Fb4BObCSMF2J1eY7fB=8v}xF2c_C}L7XHM-SBhIbUQAO;K}q*%y6mtuMs#l z=Mmy>D){Goqk*Pbit8cB2+E1XcI&iM+8`V}3s1vAk_O(MuT04EfbBJy^n2&m%R2Qh zOQnezXW&J?jTIQ{4tm5D@9J3HTtWpWFgdsK7;I!TP^BF)>>Z|C6V!UT*N)0kW04_h z?WEkz9xn;rV)cX%hsIQ%u7%sGo&EOA&)UkcsCqP9l2eV}u7Agi{7Nyeft=7g&fNlm zulNPHD?}Jhw9Om5^K?HXUNyd4jIs}6vh2Eu3qH}&+KVf`PB8Li2SsVmX5aC3?5DiV z*?hI36?4cALuhldNV3sGD=JkRguNdkJyStb_4 zMzoe1>^iesq;yP{`>CH5=`y70!8>hez~>CXT|EkjKD3*vDgoH}UMb3T*FzxjGY|f&p34wA6(F0*bRyHh9j0 z2jcVB*gV0T2Ka=95W(Q{T-exZHo~RH;4WLik=fIf-y4G+BD?J-(140BZI-RsRo%E{t{iG%NwEN%%a z;AuVMUrzhRdiR|abnbBnZSG<5>+81E;Jt&jN+}I`78-}uG$;qyMkKK1YFoB9$EcN} zbU;TR*up;37iNvs@*gu8EERNLEvScEuYjE-Tk7;U;4)YyAWy&g{7FC9TBaWi2FjAnWNib3JJY*iWHcbt!* zj9IJcwKtRFP9Ll$1RP34L55i=R>D2)eO4mYZoh(@l@6`Ig5&+UI94r0^U^On(D2u4 z$ABBt%%VTto{M)*KXFIduCjq2_(ZYt4Z89DnL;CLj@!sNdkFZ(AHW&S_BI}|m{$vr z6Wl(-#0-HRwEB!wK`7+;CPf^gKUb1@rJ7gkRB&ptgUkbhI@I|2_{}Xs&|h%TVumL` zljLLtKQ9mh!Agh7p7O3~RLd3bnn4lAlipy(VB4n++xBC==YU-zr)vR- zPh8cSIhz~x0OX2Qcn#}!4eQzbpp{}$YUnV%Xj9IsIf>z@sDTPP`kvu93R5eVUt)@f zSTO9s!RDwP0g3N*#r7D3wo`Vps*tzdW`1k}96!DaN<&qnZWPWM`AYeF9B*z!c8JcO!zu)=?p%$F!hvVgD$zl6n3W7;W2k~6v z>~i}{yg8RH>yBb~LFJVrUG$McG5{q=%uNaPliQdV%>T46DAt)P;k$ z_VT0xAe02OVAK#uASeK6K*eq=2iqRw6AAvwBdF#ar+t^4TrlU4%VF4loexj*(RPpC z9duR{mdezo+UciedTw}CbFAX-`ud@EPAEV2<~a|5t?|`A`2Zx`3-h}ko_#rd6iy_u z0dN421k@@8K{0?epdZt2SA;3)Ttz);L^x!B-+!!)_5=M7+om<&aMFFX{6`&<<1q*RDYqi zJFIND*$*-g0eiP{;{Sqv%yNwJbKKGC%WbH^;|PKTsKR8b|MpiA0@UH0f)O@e1k!{9 zpv(=Y1+1wGAR(LVoHKB}c(ztZ%>1QffMG)~^;wHp6tM$^zuP^#?IfV>T5rWYq(J3( z%bKMN=jYQ4W|8bgqnSxK7Tc@#{Jg6ThMi|wy-{=_&jFEA!QQer+@$|G|K&4{FVD~) z5f6)b<}097FPA_=aOjX`{OmLKgSJHLs#}ZRAFw-i9*I3q8QE9?R}{KLm*7ru%~JW* zBK$T#MWJ{v#$4aljN#(i3v8gr{(Ib&clR2P0s6?gYejI4uInFEcXdTr@_7}utq*JA z97GXMn^-Zrr-RE3d7cZ`nlQjh?WVFZGIFHPqC|6c6$ZKaSXN z7SBN$PYRy02_#m*4(3MEqc$|agtjC`T*1NBIyWvw0YUqClTF<~RrP}1OxA`HIFUJ3 z>&5%e0&XptJAa;Iz7n-?=P^NT^ETa}aMw=giq*JQ=c3gs-YNmgkO2g2_O<1F(}cZ6 zH^V|Y6#rR=dwuk2w0zkm4hH8p2E&#B<*W@^1NuGdV?7Ii`# z69lU!_w-q0^@0nALI8XfknobNij}?jd$kZ>eGkn{LKmkzi(Z4&RtWZ5n^Dmw^0-FO zK)4u))eZ6FK{vu%w>w2S(5nXBz!cOzt&afS_x988Y&22*Zp4|kBYzDc3(Qj z20k|54z>t*%*}*5t@ssJtBP;JyPwCV_yC*!Q(CjFWaYy8Z{LAiEP#T2+ZEBU01WaN zZ`Y|E9{*r9{R*(e0rK(Od^guVQ_12Y54 zq!uLO7?IOW*J*F61gM*<37>4h@88zC_9qloqwk575tdtXD|m#n6;|1g3XXq1$=lD{ zofc7a^8y9uo917qHxn%Rfcd5LmY%n^8~1I)dPlI~N1!ft!W}&O2~-phGG$tIb-t*s zR;_Kd5?_Ryr(m9izcYoipCyNLHTM0f1??&Cz{3@JwNJe4N&V`yiJ59nKzWCo!YHZO zHSx>{>GOSB`!81P30-vPWG6Yz#Y9QAxPzXY(ZmyUZmL+g`j00ij{EaVetBy3IHeXv zuH+Km!7Djm@>*pZxj4geeHu8RpXFb?U^p$+9#gZ!vt6sfmZCNrflkt=P7u{UFZ-TP1}^L! z9$r~8DPM8Vd>_ww5arRuWI5OB&iJQj=uKWFo-y*^5Yr$Oc;XSysps#0o;HEM|8(bu zXfF@RSAHICI zjWo=`b1Wkv6dc5DMa6UlwAF>{gs<30UEmFe4-b{DCYF4e0a;~-L#cZUz5O33+a-lrj6) zlz;sV{fx@Y=CIh$E&s&yjPfOKZKS4lE*u*{?9NVJ)vJ-*+Ew`lEi9Ea-?Uqc$-4O8 z;<`4PK9FZl75(|Wr5T}R86?sCQza;<%u_cH>7aix8ZXjw&iJtM#i*Pp7WEDjlP8PA zWlaB{D|W`(*8Ap#d|i!VeJA2=2mg?k>2lko%YV{B-)t`>+Wv1eCDpfF{NrQy)d`7O zz>iil&H-5aUE=n6II<@NrH!ZmfFK*cA@#SOS|8;Wl80=##=9Q&6ZFG&LCmTGSXAwQ zZ}R|4+PULdKH67zNdGpeG$CuduJv|VHFP;IP|KF*Yy9r(J;}K(`Rngng!tHfkagMC zUQIJ zed06I+q@85db}2LnDA$`I&qIpN(pR$Y@VHq#pC<{uo8Bo4pXSWnRP$f%zQZ zsH2S{G1~Mo@46s}F2qO8=g)%$tsu?C(PJ8Cv+I3K1HNk&K-U>YdpY@Mp5{VJiFpMZ z->rm@0RNZswNh}tF9BEnAI=x9)aC#Ga=zF#a@5yEoOVg1-T&cyJ?mKd^f}!cAHDrS0x<%l&Wjja=*c^EMOi1m)<*n><54XZfc#m7}@=L^kuTDepRIG z!-3F;?T@MXnU zywe!nm#KVeN;?SGk|30S@b6uczd74LBCeNA-*w-#YnnTKymPA)<4)LGZiw%6#N(Z> zBo_1*_rv|Y7pzm=4+oYSB|u7uAxi-#{vB9sI_pdS?h~PQ(mG^RI}uCdnFU*a*}xPX zc%>N}U+nWDDp6rvCETLNbJeQkA(IxXL4I|qk=~9`JN_5gO>g?=oXwCy8B)uVmk~%9 zDDNEAwW@s`5|PytK2F!))4Rd=mONtu9e^6%N~oVD!4jC77W%pg9pgKL6KW2Oa}_3t zS*2N$za{0;Y>d9!&X&J?@L$205c|5R^A)Ij9AR~)?&*l`^VZC=RBVuvi3wJ-N{Cm0&ajjjr#t3o?V zX;f#|WZW?#ueLpEYkLXJ*Jtg7Jg2bh47V`oLs|{n3#$M$32^!T~y+Oy{NS--Qen$G*4i>%#XVF_jamXNS3YUPgut7t&{_4(^nsgY2a(W zdq(m!-ahfpJ2^0UE=jFuaYe^8TV=qm7QZK-l<`?C38Y;Zcdbq@W?zn@FDBQo z45c3&O@dg3`Z9N)T0Eb0NJxf(}#pgXuA?}AW0*xsM#^(X2}4|Z#H4*ip!nBy7I z!YpXtfUy)~a!C=b!eO-EFc$ubd045r` zJ1%^K^5U#{E&G|SdVP8k8-|$xlKl-U^&Iomx1m7!>Io}*Bsd>~iZQJ<)KIQgR3b1B zL*Xu##@PVdfBGLTIhsP=LMKYK_GOZP2Sr=_e_Y*nT#{`A_kUy~h`6_c6KCLFDY$o- z=FV_inxVNHGTd6>Ov`~YEz6l{>%y6q6`GZoEi^MN>(Zu`#lv;q_v`n1p5Nd8@5ynV z-{bvJUX&^HhWK0kqE*OYrdOiGwYrqr#&z$^l;@vF-H}|LwTg*wMj~khrzJ;94+%*f zimp}uu_Pnot6ua(n3I9pc*SBZYq;Q--^6wC7})KWY0u-v3JE`Qa|jC)b{oCo9?JJs zl?`C1LAI3E22TDj`F!m|{M=x0i+m@AA)gW{jPL@0NUVrF7hn&k(UF0ctP;Uq85z=o zh-k~*LgnmbDDvC*9??1g+Pa)8??ufwOD<9#e4{XZ{0%%k{*E0l*+`2TrS_u`@*)M8 zN1R!fzlj-_Ai0!A6gG!{_yt4A0vO7++QjH|>b8T4z&Bro zIbtZ_7rOFX%CFJyYJJ8P%6Ev?*uR~E3&7neCHk2DAt!24z+5~v z$7H6XP(P%N!`ii6xi9T{a7I)PQLS=_9REU6dY3?5qR+lehshjyX626)3!IaXxpI!Z zW~Fu1M*^&bEqIcX$nUW>H9!|oEjtJHS^sc&;MPY_k^3?2oDv^}Y0dSohMd`DwShauF^jf!J0zyCc*$+RdI{CZpU@qrLD^dla^rK; zbhA{=A6E=;4)r1sOMuuywL?w@8B_97svT;|n`n3r z=x%zrAD=Z-0qayxfXfeJ^H|sa z5p_=URC-+$Q@M~Z114&b>v(xK{$B(~awR{{BmqEwqZ1M4bh6SB#k1Sbq3Yj!885-j zxr*aH>H`vfbsBw+&wsb{91!l>ztyhTpKtYNEuISdN$7vThwKv;1vDLjxuG>0vII*I zhR+pC93ngDh#@cDb;v&$Q;SoPoG>U%yH5V{4%uZZW14U|ve1nIRvN0O6l{v@3_CCM zm&qPf6opyEe|Q8fb^!Jk=3)6*xM>kkwmKCz5;WP}e6Qd;7Y06Z+*6T&{Yd7JZnf8; zL__EGUT=&Q{s-W->=6RIr3Uw(7$W-7m#ErO+H$QuhL{!Dpg;7NGZyyaMnGoMoV01! z$dWXpyOh5<`0fMQHcC*ViPpOt3<;6ZnrNaP{dE5?%0(NsmLW1`Xe&uxS-I#(u}1=` zV_(+Z5m)>G2(!Q~iBNtmtyhQ*=?@K&GraZ)%Gi#`S<5X(&YhXPgdWRQ?+5&0trFvW zlv*rB7&O^it{qC;%(1Ss3nPn|!}+`E5n$6?NtHG1i;>0;GCe(Kb8MX5Want2;RL2= zd^}S-wM^8~a*0nZ>h`jIwA^M6MujZ^U^_Jt5{)AGltN`9dvT;MT{Y?@SgE6@y%d~+0f6#(xV+x-E6 z8cK;)D9mU`hF!jcxzG>mBp}aHK=D*?MTV%qY(khs)a#M(q`VU_GEi9-%D@RAQ#m%NjVfX3EIRh*u=w>O)vC0C+1Ga** zyUFZ4%M8%kg@cNLGE{uN7!j%m5WPb{UFSj*7E&kJT48Gv$#CfmQh`{LjS0N~(^H_v zFOaH{^~E@2DpQE`@E|#oF5Ekj$6&Z2-cZn4m<(3{>O&7QA(y$?#(Xrwd}js??15e2 zAoBsj4J$Z@gXB=Gt%YfyX61BBMpc!XAvYp49pd7qS=AxqVM%eNgB{q%@MXu{V`X0E zgZOappY78b$tUh+6z-v^X{SN<@sE3s90MvyJhxz=hZI!5ihqlj+=-Ks)5UnvK<4x) zATh_Bi|=wevXe`vw}ZcnBnWuNp&e3ca<=`mIpR$=Hcl8QgdHL%%PgW5%lEPr^Pm~R zWD-{F0~^Kp%vkHm>s@6XNz+tW+XL%W`yX{nh-v1Z3R)>u9?F_6%&gM#Uv~ozfnu8r zk~N*=g4v|KS{RR@GW8{=0&w0JXQOvdL{r;C)&QsDAFG#>704NG=Yzm2E&mg3(*_)D z5qLyD%*r`6T0#~j-0A^Dn5OpB9#`b1h^mWRUI*z&eo4VLhLoY;7)Xc&fG*RHTEReP z;?Wb52~Qr=CPfrUH9BS_yK$PRPY*bI6M6G1%%6}M5n)U%J5sUk@iz=wQdMg+UfU3S zuG+-iXIuQO49F4-r4=dSmZ0e*X$1is)_J0Gm zge>S&AAYUDczS|7)J>TO9Fl@Ykbr6g`-8%`tCKrO0_?zpxbo^1%KWZ2HGxFHKd$L2 zNr5e}<-c5Gr!x|!b%fj~yQdvuPE$h;?|llRfAp&W&Bj}1nF}zm`LmMS7JA#?#S30H zX)HF`UzaX_Eun3t^rQgdZcV@kgFy?&y?fZdKNu1LAyqcZ)s-|{EzeK5CyFD@8B9)Yt&9(k7SUY(^N&tZES#JfkGtp%c$~__i zK^erM(0;yF$^%~>L* zKx%)deX;c}CYb^K_C)aq6jo#D^d;Spjfm~1pzcsExv=f9eV1q*yKaXN0GW`nMc~BG zVhc@hS+Ug6g2d~*@Q2yb!mZ^h134RV-Q9Qvw2hDt5Y&d?lx#+WG5Zw ziiN5Q!CDF=Nw3j%TQX&nRpkr~U<=d5K&MaQ5qyz%L&UU^V12>&STX^;m)&_zuUWmb zeLL`&HM|0dko{72T)0NQZ$W<$*arGLPkx#$))`~|Q#^9hRU%&Q2pJQ=g#|NmEC?8- z+8ow}n)7QSCbJa(*3!DtG`C@CPckuiy%(Ps3e_QDd z3?zys9J7h7k`N?b%`V@=Ja8jHfs{pyo=OM^mn98EIFXG?_rO2!#JxOZr7c6Zk`=PQgaL=Pwjpq|lOfq8dlO zW@0NY{e^`|e!6^QOe*|~%1=qfJNg=Bri9CIX#WsENx%+zI1Eq;kPE^Vl4I-LM#`>j zhP3t{eHDqe~dnPj2&ToF^!x4EywMxrv)6Z&9UMC^Ku?LbFpupD9_MS2?SMgafJkPZTX zU1%T^35YKS9EQ5#{;fRlTdVW2Ya<#^0|mQ4g8D5@+iZ1hYM*f+XRv>()nuKH`8z%b zC%30(+?|mVu+-$IoM3DlPzcI7$GXXC~8}fj+KqtfaB8D{R9{z;e?BPXI zOv12-iv!`@8~ds?z~{cudcX4v@k z?wpp}z^0U2aCxZ#7?bBzsws0>Bv`Zna%mype;O;$aMWgN*n{{5k#?V*ctcWy< z0lnVuD!~=m@Q03F7r8wK0dr&{93BJ{L~hi$xA{isSweMX4}+mpZCOQM9^}F%vXcgl zwS`~jBE4Couo3I4=Cb($xw)!0c8**TX}W!6=cCUpwy7gvL!BAUxJ|?_#k<57Pl#;$ zc`Gk5$bA%;`vmtd>B^I^y|?EKxS}Sg0K8m17QnqWkuHtx8)A8gJSvc(| z%->ye;D4P~ikZhzL@0rdcZ0_B<~b_&im%yN(QM8y*E#k;Qp5TmS|=q_Zk!(>jFu2` z5VFMO@Pk)({fdC!q}X|JkBpH}99oumlg@79p~1^XE+jx4gx}~X&?{>Nao%zj^VJLM zDQ&YCFT^Bu2&`^S*QXOr_JEITrEWs}*`nA_NRPLeY?;)EZP{uGnTQlx-q+%9k0Pj> zVHki2UvA#vdY6D!5}-NLFDAp}JWq@{UHisO$f`2A&(P%$`vEWkPs68xbt-t5Z5cnJ z@2{B;mJf8CsY0`_i5Ju%-J?XgehTQ9tMQ~O)A z@CO1yByf=F3st_VsNlSK-wJHVg)pNaCM5s+U%;r;fVdHGm>0&A2iebl9Abliawn`R zeIV_(`20~2(;Oq#9*Efrk5gTc5;+O1s&?9l`1Fkv-|OcK7)r8v7Sm+;+Yf*Ga@2`P zu!rz@Q1Aqo$c1LEV8#aJTtd%rzSC)b>!pm7Nu_jQtifX#rJ^Ki!?78ot{mY8nFcg*HD0mduVH8LZx`nRaSR_K!`v3|PkNi~Od_ zV(yQkn`|`_?aCMd*_`>jG=4W&MaIhqlV=9bj33Fb>OQV4&xDg-tahEe^%iV+^T#tM z(H)t+_|$JpMVt;DXSV1a5~`nj7Qs*}%}hB`7Q83B zQud6}yYcp>L~4S2^%gV*dVwu^762}Lo6w1c3&~SFyy5&Ey$e9wG+WU9LERj|yzm(g zDrw4n&~(@j3n@7vV{-0Hu=(0RTK3N-u+ACRZ(EQ9RB(*Vnz8lOkX1YLPMen^_^i3l z2Nd5PtjGlX7B{1>W~Hc|oU{Hua+0w<2c|>5-lV56QZoWBJD_|?=x3z41Xgrj8|}?l~b7`vwSP7)KbAo9l6BCSWv*% z*_Uo&+n8Krajht855}3kBCToi`Ghfa7x;I*V+8-Xg{j-sJtm&1ZczeWxK4Yxn6~IU z&@MlyD83bOPkc3FF8tYhd&5E9v>~bUS&naRK$I{dQ`yshACbB~TIH8sFFU22oJSabVueol{!fJ4)){(oy9wZnUm~->TO+v%@dP zYfUuV@DQu~mBP=ZLN-XUS~oHp<-?>f|7;XN-pUdJ2Jv0l``!jz*?;Tg3wTQDe4|SJ zOJzUs174fp+=6b)eER}3b^6H+(52Y3CTlo83lXqM9nD3Qm-QEjxs4awJhAn2lIjl5 zKaHvnQ_#4t6ZK*v86=5R=Ix2wdw+y6hPgydp=@(Q5+W9_3J#w|O>6TSc1Jth{reWI zN%UOY={3=SL|I?Qk&`MQ=Lv+jUMOz^Jr2DqWifK1vC2Jdj0smB3|n%*jRGa9v9I#g za%dk(^z4FMDLhZ5)9jF9?VFmYy$6MB(UXW(dEY}rp4w;Lfxu#T&RUYis|JqyO^7U? z->Bcpp^klfS<&qzRr_vA%xXX*9%Z>A-*LHilCWIv??VI^njGS-Ozt*6zm8z~hoLmp zPn^^3#s zHLV{1sBY6g9;yF_fuQ&uxq+(=Wm?|L4^3h$=`nfoa2#`i&3jNYMOa3;$m&KS!ejcyzL2()n6Giuka5b;-;O1gTZLo0VX?6r8Pl41npk5A$9cre8j4_UNa_F?#iyt2x|vbav}cI z&)?te7>j?BE=4igkLkNz9nw0BZI*XLSkgt>OEpeLM)fuxN($88TgqcTwQ?E;w-6I~ zj?&h}Q*(%2e`>GYZLCv~DmGcjd~(VBJyidUmND?mpm8FdTw-`_2=}e+<`?&Yx}R5Y z>bZlK&H35`t<8w|8>M#x2xsmb)SCZm)S<|>`D35&=;RRYSYF>>5lIHOXH;5WoO1JM zGC5WAOZ!FDwLe*Yh`mne##x%9!=m<)ymLWN!P~-}sNRwOwZKckkI!T&x+7J5B!;65 zmn1LL1h%glbBTy?IxMyEc=^==56xx)6Mq4GBhU#z^c`%ciT+}|hf=qmN-<3yjl!)Cl-$P*HOSS6@etIQ1-f z`Ilv;TG5mUCS%h(Lj4K)WGhRO%wwu7E}cnTi8tVqS0V`R`M2*oiF_HoHeo!0(@3DI#o=<6)Huq!}ky6sU~s_&Jd8A z@zf{Y|HUkg4hd$RC(H8f_G^wj^~C6*-AjLBO&{G zZDO1cj)->_Sg9Fr<0NR3^~%pTJ@Z7GFsr0H+Qpr@4iu0|9qB-y|Cci9ku{D9aKgZJ zgqMTIb(C^|u47Dyd6%21x7dBRZp{MS>m#~Bg)vw@<>Cli1irQj(_*m=dw#a4lI1~p zU;1IO`#LNgve>yGf~V=!V-RK_w{;udT_cyuj4i>Wrn@Bb>}f}GtA z3Xw=*jlLkIzeH772u5<1O5Z^dSv?MuJg^RzjPMA$E7<^m=?tVa8vb+-_WCS-LcMkT z`wNeDA5^1Bn3qc&b=1c3_}M>CRz&0Q7kvlkEtFf}b)tV>$o#Bge?}=xget_TZ430P zUW!7YaXn;xNZ#&dqi&cI;sb&n$iKnJ6!51p>?dE*p*zJ6=V?AT_XKup~R?o)KvlF}6*-$Nc z^>>^O#v?&;?=0_WZDZ#yh1+~4jLJdo!8=ODQ$wnb2Ih7le3(vykd(sdVZ zj=~Y9L!eNNLgOJ;u(AD43d^YjeC!zT{Q9XA!{w2ZBaBUrBqf%4IpU)t>$0zw7Kx=O zoRABlNj9gpXXw;DG;V9KVF8H3UMmaj#!%^f74@T2z$3>hV;qO{N0?%sV0XaC$89-d z?1;VsNZ(7tepzFtkNB@GDTHU-N-iUy;cLLz8-{|qtr1rLMWI#5jsl?EE*f*`FiR_s zGE(WIiv|mvoHEu^P|0aGurn1Dda$$uC{0Q%y$nQbN9xvEvb1YZ|H_huC~M3v--UMZ z^Si_hRqR)wjS4)FrYDQf z;2Ztt@hrs}meo{;I*&!BlJhK!u126i?M1%yN&@DSpXy>J({3BqxYd!c zE{$6+FH~$)Isk1}%@=XBgmG^DM(I)QRn3nU(NMY8mU=RJHhYoza**rMkJuKe$w zi@mun=9_m_=M7Jf0kMqH_sgf+w+%>G){RmjBbl48pD!epJsnRA8A%N{(6ditNj8?2 z7~!8r`|i04sW}1rJyWwz91lSA96asLkv4|BjEB_S4910T0=?+0;ZCg;QyC(a`LN>( zVnrr zd?k2M^7~DbkG2MD!9Xkgg>VPfjsEK3;TvEj#D4!FPuk=#xz;&IJ3Eng9a9K*F5Kk? z?08;Y{!4@px>L5Mb*AuwcnmL6*?z{fG+Wy3JRam%E-|uhqh@mIkF_{Xqfft(`)rDd z=j(MA0+$D>Brf${;WD*q8lDjGx$Bjih|U)Wfik>F!(gBc2iRHHUz*#&x(L*RvyO#a z*0_F3Fx^sA)}`8syGL{bTg7YDN3!CjU5q;#JKV~e1`G=Tc^Qp0=|HNb;xxZovGsjyJgtY52`N3+|!_y?Y~ zHi2FB1Jd1e9guZTujWoIsX44tG^}6mhq8kX|CSou3OO`yU|Qzudx>$dSgQ}C;C%1? z%H>mz*L5J$%5aeBp$GgP*2N~YubX2e%^SN60WamL54qbX`n+6Vk)?0g+79dTfO?i9 zP=J+U2XLsr+#nO^==r`L96lA$?z_R+#w#L(hAOL4w*Kpa$VT z7$yE;TMgtk5VHS1Zu-mP96$ixtzQN{jNt+I+C0$>VluCm$NmoZr!=64kJekRG)%Q8 zMN~U~)wXb}tEChZ0ZcM2@7|K8)&ht^&E16o5gxXZ0ySw+~Esn3){SX5a72 zIScbX^+pz%10$G@`WlShe$_X%?DNkhu^kL`H#IE|vvqVgp|jzdH@w&8+TJXa@`@0t zrO=g;8<(e8^=`NA|GusLMlL+q^Wy9Bo6eGI5R1q9EHkC&lD=NKQ$Ql+$(1$d$2epe zjR%u4#TdfnA8WJ;waTFW%SQ{1IHAveDj(W7OO&{gU`)KT-rq zGt-H;$au!NxYwLyso7abn7pdB;;;X(a!SEhB#?IbU#gO$@s^^+El22K;H#}OrNb=Z z0#gs}1Knoq8rpN*&_WOXV(1yi1C!fHl;}-R`DXCi{VLqLPeu{Y+!7KF z$h&C(bm8au^H_he=g(+FUj65 z(%;-GTPnS4_w$|wbp8&)doUV(8~C&7FWF>}&;FImQNr(q5H&@AZ_7N9k72cVj=EK8 z0D97|+Qg}I<}a@YzcISz6cM?A+T9c>Ypi4Bl+)#YO9rm1$a&~HWHrZF<6XHHE(>Tw zd-}+!@JLOO35Qwe$bQ-ev=ln+f9&rA-LAD&=&u`@7qLo zY{IA;$bt`YrsTTO6=kfPoNFGXB)-3uzPCOZWW)2WPwuvL1c|+VKbF21?3Xwmn|OC$ zVq4P26#9`>^+p~1{~|2)gsJf*K*Rq#ZIjXy5|%i!MUv>pLkG*(rfPWlOi8}=FwdCn(mZ-rj5i!=XNqo_5G{f$59Km!hObWD zugd!qWwkm}%eeZmwAY{#3hXH07esV z>SOh+ce9|hCMc`bEk^n{d#fvh_ zKK46P@s6h~e6W+J^?$4dv$Yy5apg!S!nh2z3(_Xzzv|A5#X#~PN=X}Wjt27psd0N( zuCJJJ3Km{ZNlJw%JB@nBJEJvcu#>XxWjqIkBkQ{F5;cn~l(Hyw!n8PnfTLh80R>x2 zuH>?ei|%{(roFVM@{6Ri|5^V5mIl8mb2(0SUei&y{o5p8EIZL*!`_R~Tcm1n{5xJY zW^*XGzwGjz_oOhCL}J4X`iqlViouq0Z@{^liI`AGCP?e+wuTrgZh>;j{;M<)tiT_U zC{!k&xO!*Lu!}h;-~YPAR59?BguCWBs{+V*Dk9_QNYwv7D^4P$)-m4HR%KR!4}hiD z3MVVo;(mxL6*~d%bd`yiO{y>!Mq0*^p?Ch15CAb!NoMdS^2#{`t?%N2jF)_z1Dx8??w=v2L!^856%fF_M_d(=5pJM=~P5{{NvJNz|!H>3~7i$6gv&DrR~Xu!T1$ zr%*I1CoZg?IP;tl5yc);6^wuCihi!4lH~`~T1-B3X!9O)%JPmmY8H%5WGcU%avt2d zCW%8|E;z9jo-ouS0^b4c@mFVIKyRzuNJ)o-YUJMJs^bi~0CfD+6Zz9vh~;yvC{P5b zyc}nzRVRXOky56u26etA#rkt`|6bXK$sbA#nqvX4)TM#s7x*@wbh233*E9O^WQfZ) z8gqyOdTSURb>8;zK;-uIU{Ou+k8|=$8(adPcZWd$xY)QwxGgua6ypH(k}17nJ_~%5 zVP8J66axuVT`^9HKd-3Z$;CH9=k9FIDOQjmT0joZ>NlGJoGYqScjjWLD;rKC&i z_HCLtaYzhQMi1-AT}}inIJ^5hMQH4^HXiAWyc$y#1S1T{yhTBwT zS?{Uvk?jp}QQxKbS*mm8ZZmeLY`1IAdoggNhlcPvqzeFOrn{`OehQ)!+A~e+V+S=C z!IO`^n2r!XhVeXva{Fs!!+qeWiuT58aKp}qq(=dVC{IouJl+=T3(Rv}ZWX4H8c213 zP*Z{Ris&T`8MfxHTE<2-w$m)YNULALD*6#EVaW)ADWo#3`uWgjaMyq@9d`IcFfvMBcpW|0`pcanMfPXxIn)8bBXD8vA6bE>e$p0* zx{+&4tgxkot{sJl ziAsWlYf;+O{`JE?w@Jwi<)Y>Hvd_s6CMxD{Tk$);vSc%Z4v_tehtP)hLcj>7q{)3wqcE2c5$W$`&fF* zOq5YB7QElhu<+cTo(j$g`hGe~<@kp#r){#9wXY^HKI!csBpV{Q?649HGtE<2R z?4T8KAa6^Q~V+3eZO(PY@+^rPX#XcQDQ577RK zfe7oivaP$GmLWGc(f@4vcu~dVV#RRZJoFiq;ANS&^A75`V}6t<@lDVH3dD#XDNli3 z2C1K!f@%@{b~zSl?~P|*5l-4Us%4o;lSD%&^=W(wwX7&QP@F8>VDZs}Ig}Iy`~xJu zvFYQ=DHg(?W;CTUX6iwb(fx%1YFm=mrZVg>(3@)|QP^BRSMN1#Z_I1|dGAf#7H zReB|7@+|{0ZGtlue#^MVk;I5^54sTc&2wOTHVtl(gij;&JnH^R0^y3=!MLlEIH}9)bn*1>j9{AWAF0iM>hZf7kGvADyv9`1ku?!}-SP~7k+6ts+bh9!hP-Z#Z|m|T@PtxKBvb{3XgU`-dvav{V}60Uay`5QxjUNFFD z!E|&nXWNZVvf+H73I$7a@0X0CM<&sDLzP_y@C<-sL zj=;r$M(h5tQBnXfuTy-x2N6sGJ>aK51HgpE)F@f;DGo5M$K;_@!yNvMD*4RuI{;H2 z*kG_h9MkAOnhE$Jj!!?jn^83W$+Ai~1?+Iy^VBgG(hN<;|0d?|r-7p}ka>#u932$N z$$tho`Jf7E27?v<$ls|t9~ILeQwA|u4c|NpIRUTm#-9HjRCtM17~+>Q*AJ_rK|6lz zmkg}&F2rPysag<32sE$-TzFv8dw9pgW7Bwf@K8%FGrx^FbXCXGP2xj9vVf4#BWPo^ z%!PPaDsQFx-_$x>c@^_G7PRMY%hXOt;{>hKpZNVXZSu)kvZd>ZUj=N%48Mbv7Y;6YCK6^*<6R2kh|G{_Dl|L}MaZB3_$pC;u2TksPNP0`Xyk zuU=>d`DQ+lh~FFBEg{)!E}CdP&<-q1Gt-18q-bUIx}uu8H3YAHr2|0f`_jFr;Pa%@ zpV>`jbktT4dJ~ZG+G1B6S1w65=2V~`HKJ&{lOnowc|W09hXm0HiLxU}0eb;-^5qoE&A zFZ`_XNz!+XroxhuF7}$FW9$Rnl}V;l5swSt5DFAW717~JAJZPpoz>@TpY4=>> zIB-aM%TZ0~Bj+&g*^oS1U^ESs&Vd0Z)P(qGXLJZfh>wyy-UR4g^SkU?#cZ83M>j$C z5g>be3U-wxY-(eufcCAjn-E-e2n%wWRc#??a_`*&$Nr6ZGV37&g6L7sK4=E(@oZ(H zKzdl{F$ERFA@|wY&~L|%1alz%)Kp+EB#;CNz*aLeA=S>3onI>s@?iEqN(&auxeVy= z;-$1lqUUM&#U@xU<;H4D{#iQgWkg5`7crx8*RE9{LZLOcE-N|CLDD z`@1>ma9Beoqx`jkEYS40iPWxvA#q&K^~!Pz{i@Hi+e#bzWTkm+xwXAc7^)i2O%N9R2+Z)#lRcv z$R^t(I)!!ntj&9&AmvBu9b}7;bSh|k)T&6G@^IAR(0&k0`Xb|}T$fg0&;=!&HPIXe6}1iSh8L!kms&6&>ZRcM-D8IzsKmRn9vjjy^pxX zX?p$k7`-QU#Ou}Wx!5GCAhZRe!g{>EfjLUeeG9zEgq zLVN}b!Qa-w0aqsWspY9uW_n|EjUWUH%>w)USPM8y=3;w{N8^qy-m0V9lm2!R^D-Mk zh>+@&gAhe7B}g%Q2mV^M!90zy1ByTz#!pA}fIC_ZNj#MeL80}}OWfC&n3`p8tP!EA zbAIJMHO2ThIHTbA*R3fO=+k!?)*tcv0IboSQ*)c5F5JWB6!;`b^sgHclRbzvn{x%M z%Zj(wC9Yjz{}K1$fQ&Fv$~6#E5{OzEYj>ZQAIp@jZjS6# zaP0O7lX)gqWZ*&GJ(c&B@5{MXzsU*u*OMLgw%dK|3$&P!e7!JKTm0`*W zH#+jdu=sOw6B|81jH23DTVm)Tm|zU}JbUDL8@L72m6r;w<4>=G{uMfDbgYYa{0wlH zzAu#D%pSh@?MC>VUC)^|e~3GOF&(Xjl6`VG=gsCa>(f&kMxq^ok8l1bSVjsmv!gO^ z&arvE%6#|ZG&&bumb71i8y5UHd+x{Ww8ww!f?opPdC)*e8^g%ch97}9uj^loV(;Wa ztfP9}j(+(yp4EAA2NF%)trVXs47wKyOn&eF{)PKP#-oZ*5&8^H){G*FZBxXMHG1#< zS=b*b_KuC*VNT@z5+$+MM7QK>h<}9BHstx;DO2!&@9WkXz-6wJxAzDMOUdcuwUVRE z)4O8oyhiAZsM=yJ?*^yZy;=%Z$9V7^*U8hK_#pq6PDO9fSW-H;{O^7p%(#XnV|=-w zTdhZl(E4NS!kM`;#anB=q1O;@VhLL>>nnm@ugcfcfzv+}Qsccj4lisOquOlVS@V6> zoy*J-7R;~mIHFe$B)Kh{FUeGgzNHsUak}+qW-xP_Kwx8ot zxl?bt8*e-K9$IOZJ5&Ee@qu7%RwLt0qi9{wMzl)_q~q^v#Jnqc%=|dcb&IVzDwjJd ztwV2#+BOdUm42@XA`)pJ@j3Y3^L?UD8ZaLP#`K#ZE4P}Nn%K2$$h1Sgms#p?CEM3Q zJgO@Tl5YY`omALcY6;RI_PB|kX7$j-?Q$0~#oHOil?H9ZD>adMn3M6%s8S!xrGj09 zgl^}$DVihN^iVMZt+3y=d$(AcX(Cd2@UBBMo(cy-izX?}P%Kscbt949Gg7E{&K8Bc zfghjKHaJ+>p>33W*P%$SuA`Y~eDTs1qViMQ&OY>u=+Byr2Kuz|_&bA{{2ax)DX7wR z>f9dEoel^PHtcJ)Bs)x-y_HI!kTw!9T!X zbsY1rhl^^22UD80s_AKW^I&k> z;xbarfQrpE>f8Lzp!f5DA?8ap$Wx!>+YzCKB3bK2843wcov{z71@)POzDuIJA4I%W zNud*f7l@Td6Xu8Wo2A6AzRVWBmd=d?i5~LPV~O4Z{AnuQ6~O)|A~`}?m>7IetYAyx z7pnV<{!O?ixX^juA>olpDNVZ}lTG9mURhqB$S?KOo7fH%PD`GUzUOmUFwkt+v+!bC|2ECxe$MS}b1H@0@N5(jPktaiTF)C=5{>dJ8n2lB-98 z#d{B(Pn8#vW}C_T+FDBqUAG?i!YpS}F>3}`kX?_nygVfPwP%8to^tr?2`LdmBo zu6b6#bq=IpJ-yJ@2Ifr#25pXGj{5Q7f3whsOo0Dpp=q*{sS=NQcU40i^iOLO&eIzoSAXp%JJ5%L7zVvli!!{F-ms{ZZ~g_5`fffHc1TsT zlLXN{Dk;5TZGWb`Jh?UZmHm!h?TF8Kl|N^$FU(zw`QwcGflW2RFH0FHAs2^|oCd}i zUaG$q(As}W>h!5hXXxyMeKs*9wwdLYgBCY})QTx_jjGhUH&g9`D093BW;XfnkA~?k zjL3ZPgQ$L?!W!4lq8<1^ogIzgds^<_p9te%bgW1i#xb^xy5A^wr0a_QWpB3x%p;fX z@LEP8>Et8B=_~6fJ%UT(1CfHa6Bep(7gp^{$z`hn(FhPx8T&?ka%g8uE19T#^uZcL z%(MpPzwMx?Vqkhxp;QB6BEM^bLWaOe0PMCyu+7er_HhfHJ=7X2m2w3ee3i{nDUT;T z9NEV4B1CSV_p~U(IDy*|B`ge;^_88}WP9eP4M(uwlBh3t+uYJsvWuK52=n#t+(P8{Q4rYce9?>BaVf)sncJIzRJFl*)%i2f0 z(r%DBJ}k9m>FyBInHv$HuJsgs>F)VY-`LLz6V&JBO9_9y`R#}}?mbwQ+V*)aYu&@{ zEIe>)?o|#&L@X-A{f1Q)gqWGZkH8FtG#LgZo{~$8qOnvwzMgqFJ`HbO$Tu1Mq3M%* zLaOw*Z+y(aQOoDJIP~oG{OA1iY2g9PAbzg4_!sc*2h)hX+gDL+mF<4Te6e)e*fsU} zw{k6(+@p%xlgrXztUOa?lLK3*OheDuv_K!;o|fq05;m1J?~2&DMaouWI}VDSQk>#e zck**hC+%jAX?Ao&FmwP`F!Bmd>j!{ec|W~hN;5G>o(OD6EV+E!cW=XBRJRPp+c(weEjuDfxXK;@V{zjhtqLvB6q{P@Bklfa>V7s31=w(k3% z>iF^hKW95ehhrQLI`+ZAajawI*eCOtQOI7QV`Zdr298z73>nAB2w4ef*jW`RsVJ+` zrm5+BdcEH7%jNs|Tt0unIX|88c-|kk>(%TRR*>zXS)z8PI#ZqDXs_kWfH@g56t=)8 zFwk})5Hkr*Bxc!T0i+!S>ZI{nS+)zH7a*;dNi5P#rU_8=RIm&zYFKoO-XPzMF{kTW z@;3Z{YVgo_NHpx+tzru7Q#W5mKd>NIJfv29-jMj73sHv`{uiR|5$>~?W61kor>iwy z`;q|5odziG8mLeJik&)pKZcOlvU4v!V}H94og^91 zH2U$BAtlUcVe_b28!_X;IfC%Ok4YiSatmfh(|!t|Gduijd(^RucvWpgJf&J`=*pQ+ zUZv|bf4W3A=Pmwr@e}06vr))~r!Cq2ZB56FK0Xnem=`(d&T8)wpp!c&ynrA~mJbDu z-pYvI0#|;PKe29p;u@p%g7rYW{$M{{2Ei-7)S0_V6G^5eZ}ftuagr1s(Jh1bt~`h# zntJjWy}~-Db3D^dNST4I9H5`y5W>>(aq?iZl#B#gR^rrH5f(7B#CL~-nC00wdBjxh z0{^2RyvE7Sb6Y%5>jC^Ad2JHl8InhIPEZxqwFlxceW}y1O}_0PhXIXB8mTh=#xvBn zjP$#BgV_1WlVDVHPAdkDW@(g6a$9a)-zIx9DL1z3yDzxlaf3V>$CS9^7@@iD@9~o$ zI8biMly_(n&mtQDX<>l}R2BIAQwd3VvZYwoE}3;%w~D9=RKPN$DbTR8b8cP#@abdn zc~Ci6*n*fYhBW_}G#|l-(CrmP&_tpNCAQMJ^0bH?7RLgp^Be%fq|c~d^#?LkaeS9e zhRVYExNfBS@`&B?SrtiOI|cB97ofDn#BDW?rjPnWh{>fDum2E(NVWfmou)r7F!;w# zZ(VXPhBX%h4n4U1EKhc?;}UCvJ=*uBMNs|jNWUeuuJDC>wNnEzqTcei93vk%@Y2HS zmhnLLWSeA~wwZ%d32Cs9NH7Nd1E)0))1~@bf6;Q)&GUG!2)I_r{%l~WQ7_((Q>t5V zyi*6;+r+KE75VYN@fv_`L1uRy0qCO;7{;vgFrC|XuYqaNSi;}tM4tW3<_goRk(vb7 z9j-8)tWFuS=aHk1pP926zL2+5D7|cP2M{fc?#z7JnTbi(`czJ)mrv2q`@eZ3& zLAfzdh8)1&&{4C4*3-E&P2st8eppX~RgK2n4TGojsOx5m2w*#oPp-;&d`?0#x&VjC zN-)e)A~N=#aI(me`F%c8hF-;v{5giSvXjGh>cDA_NF~G%f*_e!4dyI855R}(JS(E( znr}5q-yDJEnD#S1tm0PlTAZs}6I%KUT@@0qvt1pjlMazME2 z;(H#163>W^KOo?G$<~)camOyTMgrFIvXv2>!QHW!!u+WKigGp@?q+Wdrj6g7>;5pF{`7C#(hz8YF4yA zqsV06rTNmtHn*8@zG@TGYs8E0hc7<8K-Zc{m*t@!Yj`>%R*9v0C$h2<)7$;a8#{Jx zUf^k3!#+HNI_EC7uu6G&e~_h^?%I1t^lCI-ocoM(e0ljr@eitZnFnC6JOdbv1s@*g zLnkBF=Dg=)8PzhZBUbzP3s`}2PfY6`YA(@acG=K}EAJD9%hg5gC4rZ)^sF1%c7m6F z{1$1qZmzKngr;s~u!pnv3cFo*>QTApxqs!ly?ns+fIThPbl;yWO|MC>_ki~$ zE^C;B{ZD|~{sNiNYqrAZ4oX%_C(UQer_`NR(lbYI%ME>7ilubi)_F)bf$2ux!Xp_f zcX$M`GyLJvp~wdYWXplo^j@?{fhJQJ_Iox{GFihwfs(7mJTZ=QXkM zr!hh*hp|)}F^5uR3|)ln(SK*fY-8AdfD!b&(A0@fyWbG|Q(U2cfVHy3W79`!8`WC9 zbniFx@=w50agaUO|Bichj0h#(3FB_auuBxtCj!;l7cZ0)y%zP?O+UmQ4O>3-#3&de z;Z4__1oD=s6MSU{pGfB2X#Jabj~pR-E}!prlx~~=>4hIs#-SvbeHxv(2U&t z#7=I-M^@+!m|{`5s+ZXlw53K9=BM%L!)jsU-4d|N>R9fs8zAmaQ`~}mD0zJ>IbIs`rOpZ%b8ZqT{Bx|1Zvn(It`5hpI|8-D|;h_$x2#%Yk@GNhBsfu2F;|S zUWWS!rr(#qdl~3Y3vIs!TwAV+Li?vmd5J%?BQvjYLP(_CZAa^c$C(KcQ+n^g$?4Ez zb46)U1;qzp)#S)>UQp6cR`MGjpLW2WczCBoC*ZW_A})MovNJoC8yt1T;K)o}%uQJI zS%5FawKGu9T-TNJuyd@y5St@nQRT;5scGC^M^xSiBeBI@sj?NFZ(Co?%!<@gB=wrebf@GLW)i40_ytfAUYqyox(qi=`nC2{2YIKUr>pW3`Tk|W_@vS@>=8T zq4%o#^)+VhPCd9XbTKyGk53`|tRT&1b++6`@_Xd+*)a9ns^6!O<@Qx(H&orhVoHGX zURs40iN#ZMM-S{Bb^2THqaRnfo~ZymF{ACMc@dE4mCbQ$5(jtXqxhu^W7=#W(lKS? zM^a##nEgL7eadfxAhj4=y23}J4;+VNVgv-pFZ1A7`M-cH@89hCdXzX4fWT?MUP_M6r^{q?J2j^ zJB+|sXuU3RmduCVhW~WfCddiD*GmM09Rj8lj#p~CqR&YaZkLtCUMWT&AD-~XL{Y3; zbBnrmJcB6sB@FZC2jN+*(QsD=vIpempr%I|o>X9&Sl9|XA_|Yoc(@;HA5cF)(+CPG z{`J28uO4dEwPo02&6bjhpC5B13?v2y3K?AM zjElI`SK)q$lm(Fj=~=Ujqbm6xnz{c)He>1pTp6f9_gX#$>)*f{iRi6>G1Q^TVVI0Q zEK0*YDmVcxrGM{TU9z)=^+N1jVbFqG5Y}b%A;8zgQqZML*G4ckXRoVJJoR+IOG$T8 zKS-^u*DFwT_=057V}U*7i6@TZhf^wz%|e*66}av%cIVk~5M(U6Zb~{=U2Z}t!95^B z?BH*0Yq1dGJXppmO)jC15F+F;;OZza5Y;*WW~GMflI7fm(b-^hI>@zNglh8H(IA({ z#Zv2e+J>F56RNOQ)7K|pOm!^J(-N7m*$R<$sr*e=P#cWY5M7EpvT!xY%jkC$At3Jy zhX)+1t*oh(`rU^eNt`8{+wfb$SlD>2j06uj#Xvcy`7M>H>ahSt{f3kDuII(Gz(*fz5cu^IOk!R;eIu+y;6T0TxTs%?sGB z<98x5xFsuI=jW|$5?@-DOQm|f?)MLZ zD!$JbUAX{}PN&?6azH@bd8~h)4uE1hX%eHv3Dvgv4jbt}c&>t#g6uHsa_^?`62NMY z+#p`u=uU1^UH?~(OR~7Ar?1c|Ejdg0;8l4(=Ou?Uy9(@6a&whKuYER&9lK-c z?>1x%!p5XhY;>CT?WMKtE?46C}k71hSp^ zFj3fuW}bE%guIXwiUBv5@&<$^?rVJ=Stx+j#x2W@yHE^Eaaq+~+m?&c6!7`J%SR2}E9y_VQ5nWgg(-7ix~TzzFQYZ-ypmxCLuchEVZ| z%6QIU3TSN}mX?)g)yN0(p6WlJ|14W(R3~a(BuRh-qYGa{W-1eZ@c~lkA{FT?>h83o zDzO$~m$oxBU=6+Qm`U;JxgJ7PKs-$wH`LVEY?K-4!Yid+LI?c8GFYbkuv(L?_ST9 zwD|Wm#?7clD|Ht`fN0ZrWexgjtt7sCzcFSIgS#Wo)2ih}rDIOdYdiXg9#$|Om1v~0TIg5cCjIFUJIYPMmsNno67Tz6 z?-wYW+5o}GF2)C*dPr9Q!C7B*Ni48+Q-F9b>XK87!7xy|SyHDxMx?}}qSh5(O<=z0`o}5D*8~7V& zdi!jgm}3VbF*c!}z_>Y})!ZRRHpp}v;M)mu8-^$vKorGgf5B6Psw<@Daf<<+~@aHagKa!Z5>n zQ6mo()xG52WYV?bz=m#i-%9=Ng!oZ)eE&>vBmM@lmLf}E_qF#DY({+_ef71*GZ#I% z-8hH^Io4~=XE)Q<+bedhAhs_y%hd~UyCE^S_Zarou}}}--xvI0^oX13XP8z2w7rYa zN>>nvly0|r$jksnA`#D!66U_`BR3_4Q^0dcQB_$|RBzG=!l>|4z@&jHNL}3IDg5mDmoiAQsm>TJrPWb0hb5)u!5G#pS z5(A)kfK_=?w5VABZvsQ1A+5YjUs5pVC5o*=w+NVE*#JEUq*t{yZb`{wrPi&p|> z+!H-S;>a@yC zQAHf+&$Q!|38?5s?`Fn^qj9^X??Pj}!=pmwO*ZGDaTq^Ltn4d;h%b8d+rv2pN_wsv z@Ovb~HH{Y*vkX*U*(roQNyL#S`X8XqBfjEt zJ|bM%U)T>2aM^$zyw?dP`IiBQkJ$8sn;wF47nqY@nS(!Kp5^!ek4YMQ0_jZ>-oDu-(ZH@~n{ef)C%|^7PVgYJPxA0b_wrI2WaP21 zWw&zB3kWt2&7Fo~21cabKSBsU{0FKx)PuO7x{kz^1onO#QjE@psz1r6qc>edDU z|1@Z)6MuV;*eFGS$qQC6^1z9Lu}@%M zdNQrpyt4*iZkG+mNmgA2rN6W>`M_rv2l~;z%YefOO&*eW}0^2B%v=hSx;~=(m9&@zj`=3MDG7uwU^bm#Un=|-8y?0! z$l&l_?^MbihjI1wU#`Z-sj#*3BsVrdW;;LF3Z#Sq*o7$;C|jwHKvirZR$nYdt~<25 z49|)l?bdGin<8R>0a;LixKUB{E!iq=HA_eATCPYc1*XLP>xY3+{XHlYM-qm3*aZ@g z$L;8DEu2^hbY2V)PczHP7|agZ+p zI=dqh!x!zjr7=I81)o>tQuPR<+iG~n7C7jnMa*8Omwml~rdmMT50E=g3BbjeFAQyA z3oan2#@Ef9_c>lHhpctC!@j=IIGG{q^1WaHNfT#b@)B!NsQ#zh3fB3Hu!fJx!{e$1|kUM~7o{;c6J z$Q%LEnFsr(le0g`G=a{|*G`q@&Eo$|@frVv-;?to2AwLv0&BH&(IXV%Gi5#dP6{s8 zY2TxbzGcP1C_C}*(w@zm2?SZoo*AA5j0;bthMYuBUSX-LZE7)I+7IYCsv6J?RSVFy zA(>un5aZ_ShmQNf4~MJSKzOe=Xo$^s9J)wb%#C>o zKT~jVeOnM3nsj@WqRa~d8w&JL!V;^rl&23=wrVZ*-;`XvDFUreOeF?!>wHf=2oE^b zwhy5Rsa`V8NA9dWzn??Cn`y>OX7%?H#n z7t}*J7J?~Io=#A*GFx+Ml3WGbZPzVf0bZZ?X$LFpQNqov@W;pMMchtgstp2zKR(|p zROX2*-QuMioI5@4t}VD0aj{e2GKLs{fy{joQ;z+gYToIujx87%CEF>H$EBjosV@~A z(g`%>BpmTK)?x!>wXXUbdfu`67PadAKH-~6!D(l0%#E19b1n3kL8*+(h+8h8_*jrZ zC-^SffHLq>VF!Gy(I9IRgt+}(?@>pa7}#S@hPnju_Gj96fsf#i7i*P+T#(;imW@b9 zsmrRAwZ%GI&X6%L+uKHWX^R}w)VuWDo*Lt%va=y)tk!EXvps06A8^b7FnjCwkLv=5 zM`rx~nkz-b_Y9Z3ysdrpcmwj#HmD8*cijfXG9a8G*tHFY8wHvjaxi|60!`SCtG58* zhVG`#Cg6tDOsnZ_yh{D^S3izj^=VU93f{@moOXaEEd`_Z+1!Z-K zjWBHBxRaP+y`q?QU|mkJWPPJcy_rqrtlSq^frQG@>k0i7`RpP!6GHfw3uJBfOdNo_ zWq$Fz%$W9#GfdBzm8}V;*U6=FDV8eTsskBP9&d&?F=>CtK8?MsHZ|{BUW>e~{)iMe z;gFG9&$=8ioXj;4SdX*SRjIG33 z@Cqk>-pux>Bh_~9NWvW5u3U7i`I}U%{(=+Le~s^F`LVl~eD-K{Hpz{w=A*Z)Bn^W= z?wv;~GzlpSTL@t_=WF4L#hWwd6_p5MzYo0#&XfoWwpgK$=SNq0ZBq4qo)hr8Xs$Ff zOh58Bt>Oc1BFwIFR_wRMLem65kicP`yLqMz)yy)7Xa}ljS9%2_Fc6VZxKSg=BJa#i zBIB%P<=l3zCTq!p?_*BcNUnx#k=g-XerYlZaN}CO8sUQu-WGTRo}<>0Rw+Cw+cCFO zvsyu7a0og0b==phoRMrDh!mI1u3VOft35zB=P6ynG6b%ay(!>e+>3$!%s(X9TN-%)17bWchrfy>Fwkd-L(*L%d@bvo=0dX%WQo_3h=B- zYWoJ;U#6E*O0xo5h?S34O8 zgk$IW9drTnFpZ`=m*s;5#NtdgV7_$KP;rF{JhMNDlpQB@L$-yHBmWl>(J6lkvrZS% zCFQ}zad-W5j@4d@YBheN$bS|~m$w%JDDf+*Bpg*Huhatg8di9Cd9D0#(?gOfjif=` zbNT$T|FcE78wR(M3Rv1(Gt*CHo|V6eu>cAZFm>>JE&S}p86T9GP{n(4v_M^?=l7aw zfOg7CWduX=<>F@e*RY!@!5bglUibs~RRpC+S@y1m;|R>%W^?4k_tjoLo7CowJp5nP zIzjsW+!9pdb+k%xP=(!Q-(%V z$iBcmIv@-ntZCeKA4_2aalPdI8q`n!)I=23-wBylbig~n^6u)WXzSej;O}(}$>9(* zaa|cn?6;6!63H{8$id?xW|X+NiYgN%oPa8m0L8q2#fdjJlkZN8K zC9f-VjX*d=r`4O`KYS_%Q0v?Bi6HypAwxf%CJ3h=M(33r$PRKfuLxtp)f!TSqGW?Y zjEgji8?W&Ee0!XCtcF6Ppv=EX-8K6iJLi71)`p9o{Ou<(Go0vuCj+*5-UO9n-ZD4o{6Z4DZR zG5inXHF<#_oZi@^SjAI%Gue!AK!FIp86 zhxv7!cOAmh`a1UhT7vVoUueUBb_V=*6+Ionz&~Y|1;StMLoNtQ689KL>~gD)S?eR@ zWge-zrPhmqESg~un|q_oTVT#Qe{CcMy8M_q8y0Zn*_TeH7OF1%8Un=qanBz(8z^K? z9f_AUhXu>bi=3>clL}{%q**uY2^gqW&f5*FuroqOd4h4+} z)iDelBnzg{oEu^xbRw#P9mH>Eim! ze+iMU#sfc0a|WsAGy#*nw{8vo0A#Xov8C3vQ?ZsD^(D}K^H`%aeWwwr)qaiti7^`b zS!m>Oq~u3zz^rJdAqM*BF*{v%0u_8?Arf3vs?N2u@ix@g!|iEQXj?uKO| zyp(6L`0RF?l^31gf!dIE*`GT?D$j2l^Zh>REK3M{vEO;_#>uL>@2Km#5ck7Ppl8o_ z@%)GShiZC}s~iyWPY|DTI#9)nPNUEj(yMN>%=TSDwK?O|+24+GrWwI#t~hKA?#igPsW zjVRLuzHP;_(W1Xg2Um}^x$7|H{e`&_rDZeiPI)h3>k=eKPMHfcZ{5=08BkMYzegiB zc52q9rmz3pS0ZXbX9H9@L~S-5OELPZ6kdIqWrI;%O09Gl5Dm+C`D)jcU%@csb zf6L5a4@MBb?dYrKEzF@`qqo|008gIqDd7Q1UKY)fbmi-!Dl7*z#nJoMhUPzUcBzVz zm89#rIoc*O3&b4bC7JJ?z$fL`;`z>+mt}YlU1K4b?sMP{#wE>UuC@$9BZ|xvnfe^! z9#9xoo6ay^?ez$_`~bD@2}Ys(q{IT~qR=2C_d*U1#rs2@Wj|Z6XsOhH(8NzydeyC6 z+dtPxXIQF?^)JJSWyHCkHRQ-1ejpXPktcw*Y1>k*@$W8(lKib!U$y15%g(`ZzfHFW zfo%Hf5tTBy(*w5TqE6-LU>;{{m{LyggF(Jt2V|hIep}q>CEWnQ=iNXL{A9u-RqtkZ z@e)k%)R;|D%6t-^-~)TfC51Unx2{zk3M9i|XG7*G%z4$Aq0ABc7hjwcG{W9|PSw+* z{9}>vRM9slfu=4tL}TQ|=8Tsa?g;WJ{6lU!ocDi~9n^W~&m?a7us;m%g)uBN3*3=!rm<#^|Q9mn2&?svz(7-RCxzZfHNxN589Bjp?`dFIo7`uX}CZ<#(y zuelV6EsYbDZKGs7tx4|T7F}7&{Il{0E2Wa##&Psfd6)`WV2*!(*3LnEC!PC!@YziQ zrM*ZG@3zm#5w7TWQfjGsi(c2Y+Tq--jHNL{~P`t|{vY_xS z_y+`-%>DskT-%D#V;`k{CaE3ccbK`ic&SvG3^3w|ex($fu>tI-%SqYpH9>N(ZWQ@$ zJe(WjmF{mlGsgQV74D+}+x(2#yx_O04m32bBoOHbqS~wm+O(7Dkn+R#Kg}Y(Jh=Iw z4!b?1JFk294Xy>_*_bS#agCSg%8N=qnozDMhLu9lt3y^xwV zm;p)$b_dVGlU0WEh|C0d92lYRHJUVKn6$FYq#!7)(XwB=W6@N0Du_|AC5K>iNo@n_`)8WlF`-pBeNV zR-Ni&wd9f6ja-HBduB_yd*(mOq|k`D^ef^&J9k&LUM5_d#ZZtuJUk>G4gXspo^%io z_DTXeN#MMj2uOd<26q~+h5+|9=f0C<4p4I=)PeczWn%i`EK;DoK)Gg&9wVP~{Jye& zcvrHd>D51_y9gj?GKeJ0z_ZiMAnDNGon>SSEj7=7U4rtDKPS60S8>)>)#itF| z*F%`$h5u~pWD4!+ELM}NhzhD|!p_`!QB->N;ayjIjXA`;e8!v%AA!usN4KB8wwD@11n4wH{^%n*ve%sW3Kd`gCtYJD@^OWH(2je62fR+eD_URy& zP2*`_f6#sB1~d-8+#G`wqh?H^AvVqQEV;8r=+_5wtgXToXWcT8?>G0Pkidnjl2bgO zE)h-hXO2D z0+rpl-m(LLeV$UsM?di|$M-5n)lJNMeK4_Uf(C||3T@)iKqB!Vk9o=T(A%uM|7IA$ zV?X!*C&LH?U!q%c&-BxqS^rgu!#NtLA^2s%S5`Sz@07nuoudl@kxTEgt{w!D(@{$Y zRG-<8x<}KuUnoblO*&NcEYZesE93hc2cE`xLKXcSqx;Dsc(D(2^2IpSAcJJEU6?8 ztK_%W^$lMb9NaL0@TkriOK)#@d-^V<6K1_6y{_FW`5qUhiiXb#Y@BgFvb-eY~seSnJQYEP#-X{n|_h9E`viaTp5W z9KRjFkqiE~XS-`HzE4gG@1Lp@bZ-*Ie{=o`Rc-G0!J{W?ve+{DL7(>qukhbh`aNJ)Q+?+56f}OiFRkVOZa;4EaCmrNdpvu5(&SFgFa!2~v>&_b#&c0Rk^kC{ zmN@5Xe_>c0Uul7?+a;f=?u#>LDRUfJoCv?9zTVL{%Tql~_cBztfky`NKY_>1-&0pw z7MjE&KA5YiC|)3){E(N;*W3E2!@;?`Jm;lic}r9{-FN0{yKPS}B~TJ6aq;P3@@IJy zN!OU8gQ-A%zmp>Q(iiuluF>3HZm!;DUpQ-+t*a`EJp>%i1`xYn-BVKuYN-^D$J}ut zwfe2hw_T`ADz8FVBPrm)RJg^hS zQ19G_@(8!HFL7QR*xriU`Pna@Q=^>(i^X%LFL{FHUYv%uT$tJV{M1o(sCKwI<3mi8iDup7^!E=h9%uts}X~u}sR;|5?hWRq}Y(^h5BTYC-L{wS( z(W5MUcX2?*+kWE+2xL8WnXJ(*J`m2PVS{~?wO0Nc#mgEOt zZ+cMRJ^uAvO04oFwzpEXVg>UYVY<>WU#)5DBHUL_B>wyqc)U>&Y(PoA@M%%5vH9$D zrgRF#sM#xyxc4eDJ7(q%$169HAI3dYL#6|s|q%3w4#U?-dG-N+) z4gceP6|>P_1$xH`7O+=-(X?{X5L5Iq>J_R=Yw4I{(*hInx~*L4_Km=m;fcmzhqlVW z_u$?bhZ7j_Vwv{!OS&H){P@*zo0svv_uDVH!=KnS-ju>+YEOQ~vSRy6^N+RjW`Djj z9zN}2Qq!;34LU9Sh~yla$$vb!Dop$nAPvu~M&~G~8x+>Rwl!8rL!d>4v$HGnLufo8P{bh( zo9?NCA&YWYR#-*L1F+WxmwR)B0V5~*EkZcT4!gIOY2`j56!A{z3of|pAkD)k_nsk{z@V+mpNZ^^T4? zzXD7Yp|@8h7SMI_F&Zt2T(H(?JQwx)w*q~78+5&3P0zmV&cxU{#M@lgIA+x;aEanF zIviRfSz;d@ZZ)r32h|aiDUo+bAwRiDup`U4@g0H6e#fgbwKbX|%9w+S8u&*2LXnie zv}wFjv)?{x7Ps2Tg6Z8=_7Z0H!oN%xdD)hXM=sppaz!QH5sZ3sxU_OJ;gH{JzN3i` zv~H=f*RAD6oKC4#E$TtcS2_-`>Wdy+8iTGD3=1u`J*ug6Z~C-U67=O0oA*1SV64(y zID5Mx_M7C@$6uPQild7|?$niT6YmGzjm-DTqC3wN$A-l1Gg;B0wa480-`+-uXvqx?Te7_pl(;g$JFaLa1Ja^zvG26m|ty0#t zcP0Pir?VWYE@s{^>d5djPlPyL^p4?`%98a_k+C4!ra7PN%bNVZ=gp!kj-8>a+c|7@ zI&>w+AD2MhL5-w19^8;ffA-!|QR=~<%2;>Uw;wI14kVWRfDubH?FBk9D9<}vPG#of z@ORjE?P|`@;&Nbz;#FYS!)>X;Hiv2Fq!j-n@^PUac8VdFlnM!LDv#VE1k|!a?!NXy z#|v37Fv`L(OL|ALQ+!FBr_x=I$K-ROZuJY(RMb58uJ#G?vqrtEzRPXXE%EfX)RW)! z-cC7IIlhY;=KblMZtha^N64Y;RFT7zpO8CVuJKPsq@ONN>z|U<>S5r{)=Z702srKS z+DbuUqQ(V&)H>ZfYMV4Rf3VAZN+R)&!;^1wa_7EGDQLLdF%W&UOm**e+P1`a{gte6 zm?4?!+=rLDZ|IjKg>_uJR2XHa#rr-WXi>kg2BRw5z9{;Z@hvaK+i04M3Dp}m2h!y# zBi%iFjq(Nd^)}KY$vMk?p#4l>}mGz*{QHyu{XZ8ZQ z!qofcep*Na=UVgl$BYjHM++|T{TvBu8S|QUSuxi9`&FQG_g=_)n|AnVk~>HOOM55- z-91#F1rDJ?zbSYvDT-%UdkyKRRIAAS9F_hYh=#$?@G_I-7wNy5kOBnkt*uP&6{EL_ z79FJ;XD!9VEi_K|X%I^yMKYsr2PU;HB=;5DCC%v%%db>#0tE`h-nb`OO*l8-ue=pV={>pi8 zJ&d>a$RmjZGIY%owb^Nn)Jl~8Ic-fZx)Z1%E@db|-yNU!@)Wi^XVc)wx}|#;DsDqX zPEaiL#VeMXTwJ#o0(TqIL`*R&JRsdI7tUj2|1wOpF7Iw{p6RC`$vWu+i+O`kG`$NG zMv0OpAcE2rtV$pmp!8e=70Ut>&-=Jn;c~B*-0BYd5{7z|B? z(A_?6C4Ny#w0J>w6`>7VB?{3cZoQCEDn(f|A9c2k$_j**QOK)37!*Om;I{P2WH7Q& zCCJ;?C{E#Vzr5{)v~8m}g$kJq7mcF&92A#Pox;?|AsZI+e;1>&G0-Dd_rtzg1qYk1 zp0|Fd5SlZ*jGO1gxK3q;OZq}RN(_qBH4!3&ZZ@_pGZA45e4UtfqXz2GKZIbQCgt$pEk zORlMK0?_5c#ga^Pr{JjZ6Lk3}XvIB1oI;`e`e^gentqLIR1Lwo zWa7OCSBU*_}6rj*H&XOh+9=5XecPwb!YW5{AN)fn z67Q6ywWzi@44(h{Z)2o&+X8qurnV6R2uru)xPSX4ndueSH6|W zR^5gGgpuLer=Qdw%@To?4P`E<;hkPlJ=JZTH_v?k|H!(}u%!FL{|H@Gba z;@-G&WQAMH3TI|Rrs7H*nW+_y(l(}*m384v%Z$v*vVl$8*t%?T)Ajq`5ANfB<|7Y4 zhJ4TS^L}M{{sfhkm>d26)B}hsW8DhQ2cClh@sV_c=Iv*C6BV(aT_N0awGCd`=+=8C zt*Ha&OLbf4QgE^ygW5&S_Ia0Gce7H^Rqd)SO_RI+_#J(iHMk#t;XNm@y>d5Wp$Q6P z(xhxfnR4muJ%{lPpLTHuw|R6bspasoPPX!fOU}*j@M|?S*=|R@MvtV;HX^O zLP#ueV;^6QOUEI13wy)!Hf3l8_xf^fXKtF)aS}guSOeYkaO362t=kYk8f`3tjk~G) zzQ8qxKT94gl%SeB zhRz5z_HV2o6TnZb(P~{qI@)0A=(rgQ|M6hox)eK)O)Ql`g3?q)x{n*s+}yC;VXBL{ zwxXZaRl4&ZM0_bg~&#gW0Wx5(HHRE-oE6u#=ADPX4af9 z-#?L-+*?0W2H_&xp-w)UJpId<*Yexd}>-tG<4a=EDZni^0!SzpI&fmG*6#&iN#+i=r81L z6UPP(?*CoA4eJ+YU?~)<*MG5I<9yZt2Z8FL4dB%s`jwjrM>lHkhd$0V(%W>vzW#D< z^r+gg4fd9C@q_Ss1~=sdA!G*=J70=OV68r`S9;b}--ac8Wd{f!InN$hV>aM8G<@iM z_K9tdtQ6+fEM{M4EYJVa_nM&;pDfd_dQD4Xu{M^(j&VPXKEr%A*v56dV)kaAeUp4| zei0n=wVLI6Mg8kZ_k+gQ_@J9IV3_I&93iO0SZS=0N2pU<2G4)QnR za%9Su@wh-7Jej^f3I_=ks_p&ZcW`5M22AfnP<|FRbI--QjLW)09V`8Pna1&VyYlaT z+;nVc2^R%G9-$%D{=RnvfIQZ!`qlWvl^Ex1Z%ls$6fCd7i>-{lOw3QenZI$KP<8VD zy2Sg!qWjlw@5E8bs;T(s1@&tos%JZIE9F516tt)o9)^RK02a;ykQ9+>6xeEG+xtb-k02r#P@f>v)N$kMzoNAB{G5vKD@vjy?idOr@g+=%^CW9eyqI8@}|5u|eB5@0i8- zn7%r@8Rcr^>wwo2uEL?%dzipEmE^F7nuv`aw!6iM2 z8~2?!Oq)@qxeUhqI-+L;+x)hR=K|xo++i-y(dOn%$-5KY&Xvu~rJ~OV%5Th7J>IqT zirIlE7n(q)ty(2bawkV}E_EHwg#q^a(B%pMhe?Akj^}M`ySomSpS|YZC5`-}dwPo> zy&<^f^=zp=>Sg73=ib``cMW@RDNL1t-$)*9R}=vzpw9=Rp~pq&G%*AOgmj6}B@75; zwt)VH27nv=b6wBJm7jhgXWa!tTx0tTFgo4cBBZ$RfmgvQc(eQYsKq}84-fA0$$MZq z9Cf`2Dw|Oqz%C3h;g>g~p8kfUG9Z`eN-qGI6cTL4OX(#OTOx#nralv&H1*d=eWSfR z1+|&#cNCkLS)pP*_p1MSMkUx3Egsdp@T_#!rRdYj9yz^{?P1y~|9s=a1=Um>L_kBo z`i+dBEUY@Tm@0ZEJS-t<^B(>}K>? z=|?#Z1}IwqorZ{MN-qQ$x=_}|Tv7T6!5`XXX{xI6#MkEeL)Al{H2sQSgw*+VL|LA8 ze^I1<_hhKchdx#A$*!{Rp=TO<%QoC||7^O&)HV-NLP9a+%A14LuN+Y^N%=VX8kYZ9H3tX3f`Fuj<9rz4aTvr^3h9hEr)WQ3*RYXel(^9nskaSM z3l-Lj>+~(hni%8~anHs%G@`?o-oCCNKFYd$Cq6oLVy~V>Ycl>XYwQqpgc}|6Dx!5) zdcb#!%*B?nK)%vC$;F(zITm>{d;&RnltI=b|)}_B&?;O8-D)mP5jcZ@& z{s%X2%iO=;zlL_cD9zv&*y7l*N!Cm<*$swhrH17HNz3n+w3rnC)6nrl8Kv!@q`T*6 z?pZ>5eWN3%duNGN*6~J1_Nf{bbXHAw)Y^!Z?S<(#MRMQO69?9wpN<>|Tg=geHf#;@ z(Fpwvo4z)Z{=p=rhyZ(LwNs#xv`>UDNW!1CiAAgQ_S$kJjaW_ zzJGb^?tAM>#f|LMGUwE&n|t1!OG_JC{j2TTs&{Xm&0GdQTd<`fi>g4%N!dqVG@6X@ zN1Bp0lFe$!xj{$T^Cq;ReBC5+pB}xYWaOl-h;AbA1X(hiDc=Bodyc-F&r=k|8KV=F zhb5_J--GH+rYzoxqJnG=5*x1mzOqms%$gW9nI!8Ra}azJQAUH7|7fSJrhHgYMZ4!h zx>xJ;`$bRbzGr;8@t#nfNA)(VVPlhWr*H`JDH%@gr?MF^F_!0r1o5Mi9zqcHAHd)`Wfo=gIOx! z>(hd*%D@-T?2G{_>Oq&FP~$q!9ZzZz-k(2MKU4a4H*s7SHi=$n69M|G^vlp#9bWZs!R z<9?=LakO(nt9_X0r>^y!n&! zSHibF!p9KakH5ONbhO@B4H{cU+fh9eT$FfN)JI7{>h(j0b@` z&+~y11;FGpIGCy8ti0Rc8diQ!XNw&>QrD+MNc;V;6IHU`z^4p^JNoD6sS z5_N@SL!8EsvcDKk9b2rJWzzLzEl+m08Os} zuIvsVg!U5G4uGj62mqiw2w-rK34ta%0wCJY!$#;Rs?SrTk=~xI+%sG%y{myos#4X_ zm?E68PTJ5gx+mYylmcLTg*;HnDK856nB5b&=5;LP_U*_L+r02gZ=x?h9GBdZ1%-g7 zdUm58+$=LMR6h2rLc@as08P`k(Mkw-*DI@6ymTGYa;z+6I}YOe=lP5fQ8EY!192kyXTsXJgS4= zuVmhPIBtqLe|GbGL};Vne!qF(@_X+ldL(!6jqN9`204GJfjP!{1vpuUuN#F*A|bglyfka(2z9bN4QP#P+Do)8TIPVdTGNb$SxU z1`FDhQqWU-o##ybKO^_V@BqdZ0S@jRWUN{raX|OFrTqp{fLh9u9?5;y~SSbAnD1EkS)mP zeWSb0R=?U{8a#u{7J-X9;ptZK+XcsMA4mpvT3Tp35C>ZI|9!y=@}Ms7Utm1-pZ~W{`2MW`3~g z{aRN~%1Enz*q|uD!A0|^*|vb-j)LW-%V(lS6WkbA*!aaJY_gL_C`8vFymX+Q&48`B zkx?@jgKw{S0ovhLXC2?fYyw7yXdX2IU7yU0xj2~DoyMFOQ*p3)fd|j(W}*3Dmfwsbr2#L=uqRieD**8=1!ELgXR2%XB|-sp6U5X_Ak^X6U4 z*H-`PhiHe`kP&)x{p?ACGr!|84{z=?fo+<5R_8=&Pw{pBGZ!a`d{oo_LM?tO zH8{Cr4bk5wap~l^(cKV-9KCuyy&JjtVD0$sr8)1choWHn(s?bO=7r>ZaIk-JL!~a= z(uhw~uQCeIXeC9DX$&^6eW+QeU+*8`DvO1wr`ZhOR+Sv3Z-@(w4LpVSASY=QvDX}i zMs8@?#7J5Gqo&~21Uvq6YpN}OxwT1+yTD-6H7cL+ZZ zsUN3j?^(;no?&qD;=Z*1tFXv|cxvS`YK`4G z^&KekFu!wTyW_qasyqKRty02}hKyf$Hq8sKx^E26&8D5xBLo85(D5mxA)|6)fo?&x4kK172fGp z2ciy9qUN_laB^-GBrtq(n?IiUel1jQv;N23A-W^lNw#+@l{HV9t!_n(L>hhf)~=BVPw%%yK}=x-F6_NN%R+19~1BviVW#z|Pg7+NGzSIbv!DQ}#w{!do>62s|8yoLxE z^t*EqSYg6X(S8D`Aoc=|r(if*>lh>2g+7>6erMV0uC1HF66*N_LGs?Yk2ojqG? z@R5GixRuV?JZ55G;smlh=7M#L-5Sp105vGUa~tM?h+OG7X-^(XgX>e<;t{0HreU`Q zJ%e4!@n7{I1tF^)#-G?xMVL}hdVmV#m6iZYj|5Jrhp+ajGi-dsFgifdW(`-YlScz9 z02!ZlIje;^z^O0-#HUm~KcaGQJD8=8t^$)mxF90Vd>&9`s=`q$cVApd?m+rygCfoV z#?5iEmJcy|u*}cO#Cb97&NLD?KOu*-&Qo?fsl;GGqla|n0bZzvN|iH-U=u-ghCkwF zpL!k;tUZjc z?<>bLMTp{Fp1Q;GxVrAe%G@s*&CY;v^0~WEGq;)Qtbx7J8O6jcZhLio1Xghz8u-Ky zuzv5tnC{obIMM8=&dhyC^3#+7o!+myBP%1QSCBo?bM*SF_;S0jyU<`wlhZqF+ddPc z_T-NZ$A>bdc3YS*f?OS>{~kAnodJO9b0%8h6pre=G`i(3<;Wz_NPS*foxuPhQU`tB zCj((0mloCg@mwpp5KSW*ooz;glo&$DHQ?gVTOD8ZE#mbJO{~kN)9liJ+-+G)itk@x zdou58l$)>o`@bTJtlc`+=zzh|{U;}Bjxv`@q$~a{<#}-Aju9#B^(pg1 zC%m!wwo3J*2b3c-Ot5g7hD(aO{baH(UBdJG)f=dB6|ldAz;U=BtWf=$ z22No<)4h^Sw79Z(S6verRA0bWgDj&H%_>ow6=9({M!9|1B2GaJ8dlL@s|^D&r0nt7 z&pzq+l_JBJh+HEXt3Q4Y0OLo%bwh$&L!(}5GQGmDVq3(;p!9C_%nLu*pmSP{tAPxxoH@tqJgM6 zPLUoWT}HX@*`AlV8(bP)cNwA4h}9`Ru%q<%!Qc$-Tj*;yR)n78DjLeG+6YA!V+Tyr zDHeCnu5W){1JZv%g4D7A!dTM9Me0EHi#VPt^Ju0s2876B_P5`ZaaVmlU=v8Gh*2zR5SCUM{*-=>`&qw4 zoOju5n7Y>P%9lNAYkd1Y5Xp(mTPWt(i&@CFI!&vcTBl`Qfh5-pP%MaP8Zd?y}! zisZjC`d`OHx+{QgIx0gyh=acT7tzezT@2WCCScQt3ethDD3++yMTGXc8O8@!ForKUKmOfWm4^7WU9 zrKXDFcxVVMtu&rr?xyK%wAQRp!GK_2Qjn*OLLL&Jzthvdip*-G5Hlid-kfGPDaPpK z-$2Qw7x-&J%;7oBeUf##v>oB}%vNbZxG=Msq&U8uSt#KhXsJqDwCodY%7Z{2OJiRG zz-#I7ud*_+czqw!afN~er(r(hloxQ&L-%qo6Vy(Na}+g_rVdP8KW2suuPeY@ne#6( zhKEWa&A3flDNs2HZtAw_aggRH#w&g0pC6<61XIlJ?kH`ds5=tZwJ2Qt9x zg)mF_jyN$Q|1PwNxHq*g+!bILMJT_SuCHKr)BxbDZ7H8vTOFdRz7<8@?uV${fdHDJ z8zd0gfL*FI6$CaB;|NQgL!TmTUSovba5pl90`C!OoXv#PNKpkOat;l?nX+T;5_GE!{;}|Y zKM?v-8e0y7^61K?YvOXbj#b6PgmL9L0Q6aatBj=0jgeIx^DpDaAWp+y1n~EsVC`x^;1W`zf!o5+QNrQg_?3|bE_~sgSi5?gADWD-5 zT-cQTmp!8~KQl38)_?37V^xR{v#Sr|83$X<&Uw*?xGF;Y2f~*$#ZusW zQO~=5-M)QQ--LU8gwQA{_8VO(U(WbXJOiwXC`K#9v+!m;g?P3=3$Z(ceI>;{d4Xq8Qx?fMf%#72S`(Bv^zDR>7!!YSgQ41j}YY^EXpW~LBz`bgI{e0&6a{+bl}GrCo)HY;op2uA;GHqztB)#8M5WM3>6A?c zGzcJIbBqM~d?UR;=IQODaGtCaXo}zLE#8Rh?Ke#Wq+C%|{aPS;2LijRs3xbjlT<3N z9|bifsIjSPkKwDu&;|6U)miwWykv_2_9{;bz4#i3`D9GkZxjjj$TFtm}wYH18)(y(DE z16eLQ8BRwiavu-KFv@o1T7V{y3SUpzw*4NoPykWLRNMDK{3Or~BB)$Zosxk8s{O%l zJQP=tpGg!Z4>VVTc`3!}Z-+E7J6__T>n@VQtu%{i<~{0iUZVW3 zR9Q^$zKm1O96^G(uJ6Q3%thEE36_^;-%2-Gq@hSS-*K5+q42S`{Sh^|3Ly<=EptgQXIzegS&K(P@;+hLHeI-mQ=&Pp@zFLt+5ze$1qVUX zUiMsaroq+;VaJ$=^>oO{0#Hi=UMGUaioiOep$Hid_!E*ULUoB8R5Jf7afDXQ& z1t}9EQ~VBPi4h*cbAM|gLWPhBE4c)Y5uEs23lSbSz;vWZEv0IzYs{eDw=`$^Oozrr zMo};;<{rfe^83?*mD`$DH0pIdHG^S&4OLY|D&*@m4|uF9OkFcQ3|ic#7Ap4lj)H|# zpa;JzZ#A!<3B?6Ut1h?eb%sVd-x|G~11|TYq^82*<96R&yq(FgII5bnK*!4n=S;Iu z=}awU?tYd6QDBz#YZRYQu(J(nvA6)Ia&O(=P&zOzTms#Zl@>2iRDgEZT!54aF!O}L z88C8If;l7?m)P=^`Vf%XPf_y%7&xl=4xw3(t@Ks0=j>jFo|Dhj@sOS_wXr2MLk3X{ zfuwt%Nu&)Qlet; z^Nge-wOh7}#I^N)aU zkIWuTP#csaJr?#yNH8b&V!ZNU%NE#?;F%le*vn%86CoaW>DBFi3@yMcmKKt9p=J%A>`7o1!JlH zN4?2Q5{$F%)hPf*09faepmc|6JEMkvDZpT3_WuRrBr$<>I24|DX$fA^ z6^FVmMM2eIsSIkXK$68k9c3T~P)&vwh@^SQdOETQ7tr@FyjcQUCxd*s4E7}4TPua+ z9017=T)+2SkspJue+8k_p_jv8KB5y(J0MB2mYfoBGytr9wQy+;oF5(J9I+LI!Qh0cS`a-R+KuqZRb*hwA^Hk;?^bsJ9-U)ir<4MS^c- zVXbkwx9ML^y>)f%e>kRC0d^RrKxVZxUC6Kf8g98qz1dI#O*TEV?2s1Pu+3Ii&$YaY z-D-KBQ0+Wwbcu!_RW#h7!;x6Xc>(6(e$ovA8l!4oO29@KZBPhwC;LvOXJFb$YF;~$ zXXuEVDUicbR0)6*NkDZHpl8pQDpDpJm}G@}SVXV)bAT67;H>&>eqzuTbpP2KpcvYD zU^Udn_VQy2GDJ8yTa7J|Dcd4;E|F9%&hD_z0PkH;zC*I1avi56MSqDpnNmR4;2Y_c z_5P?`%a~FzBt|j222A$^V#XP$XI+q^w15G5G%QUB^Zx;VE* ztOJ{T0W5;9R2MGw2oJ_}oDbfphCZJ!8IbMo1y zlM*n5AV@o2%%1Qx*4{BxZ&Fp) zJKWPsm|#A|K#t!!joUOgrSRpNNa<|_>w(nM{s*_0tLsWgPe-%tET7gG|F6O#srJ`G zMt5TU9y5K(W^de{V_i_on5%YyxQwSVhKQ~*>p%l&0bY%48w&jz-8K$Fg& z{h;~)s{Yry0Hq^ce0#ox!ol!+jqjqJmV|ecU0)7batOgNd{8S6%#Wl_j3PP3+JQPQ zos?%V`n8<$YU@dSmv&(((irV9*$X?6+(ht2de-#4)Iir3{}uiu*Kr$~E_BPwsanh9 z`}{SXo;Jirkh@29oW7STvs>xi6{}_tzFjUhIb9fHJ29<7y|`r>MNSA}RoGj-b(5|A zNqkfFzyRD?Wz{?xRBh5O8b&rwB8(Au%r6VHp3T*rXuV$pUk%UOl!a94FquZ~gj^E) zLc=Cz2g2c$qO)_Sc77vTx0Tr0UDiSz;Y%G;*;V!kbQQ{^m-f+cq?i5{^{hkLs@kCi zXH{(rdG*J^{HaKB*pRF9jIWF8d;=rTJ0RS@MY+DS)U|nj4W|24KDqmsHoNt>j&O~# z{HZIVqKgEnZ8e{@Ns*HP0d3e|1}CbKM2K~gF{V* zp5~Y*j;OY~?R((Up-!~otIp6+5#4(*w6rnfDiP0q#Hhx3C2T9MEIAX`)^yx9L@sM(j z8O9hXIL+4KdZ5=tAq?--m2_tis6!{zZgfrqmHGq-OH-V6-M|JPOZ-d1?QpqLA4h+Az8rN*SWzH)rvDs3t-PXA zyLA#&Te=kBB#t_5oNT;**v((1O2ki-rN$tSXZBj%Ef3Uts?r;M=RY$~{053|OHex| z1;GYB!{b&)kQaY24b^84^3y>E8~e~PqW6drp}*||9T;JN8aj&ruZxdTYGtvS#Pe6Z zrj4LlE+(SKVxZ;mDBA+lZ?L%~xZJxp#mL0X#9&#$=>j$C))QV~uCGkEhNL)~+km6? zi-$Fy3ae8f&y-{NY(mMc2glq~P!Ied`rn>HdkjVtOkn2mRRV}b@3A=J7WS$#830BX zqN7$u^4r>G)*bjNh#-zx$b{TR4OErx8f%#x{^##VflAR~0R6RX%?IBMxIwAU>8srvQqFtsHaY}L?q zjO>)++WEA#+;~W=IDjr4T~Fz=%{98HfFs)rhCm89QgUJ9jtMlR*Z;1ucOcQPZ(_NU zU}N-L!Q$d5dyedM(?zt=w_CFrobV-%;Sa$D)8(j>+1e~Mi(PPw)X~aq4;$26Xd~tq zmuqwR2t+jwe%ropU+6F6{c9aZ2!AwcLdBFPu&{LbF^}X`MK&RgL1OGJvDSJ{+Qj=z=jZU$2u(;Dw zyBJvR{b8|g)80zMw$re4r7Frr;am!Pi^qTGyf zP=)9M$Zfv7gaG$+19jz4@`+rN5|Aej#waPLGC6;TpmMp=fb(c(~dGCRj{DxDb3F=5;s?LghYghd#Y#uU)Av zOyk76?J49ao=JRmHprudXD4EP1+wiV5D(nhyDJ=rX~ZkV07|Uy!{&G|fn0Ps=1ZX9 zfj*h2a(SNZ&FD~Rj?;Yo^;<8A)Yk{Vkg=n%QG z{5Tuc)^3{(a%gS0?qzQ*M1qpW_qc=X_#AE319hsX&liBx!B~f3J&suO4)M@#8+{Et z`Wy|!Y9FX025HFnbxe>3E$AE_R53STCJ6dExJQ0pt;)E?^CD9tEyN%JssD<#SKNz# zGo_~-66h79mzaCiBG@Qq1u|4J6^Q^pa0dy1Fb}$(0KLD`0TCjFZ6!gj0N7M1Y)g>) z2_mF`QW5TEXhwu=q`)I6Zb$lH$85lVs5;Rt)n;^XBCR|%Rp1D?e(OOM8Nf@FK+e$E z1L=@AM^!@U5d4a^MM;~B;H*s4ra!3d^OR*U&w9jg(?Fhj&O(B6mpuo#0Vgljtoi7!ojBpK7 zIl~?9#sum1-Y9XaK%D@l0V?G893d7oU_78AMU`9D%X+lwq)#@;M8ZuCIubg_GNyAm zK9H&oc61`%m}Fqj$H#x4!SL}0fa5Px?ev!%htljmbXAY1tCEGhe;j#_6eUDQ9;w8d z^TztE^k(Kt*qxot#e?iMeigv?|JWidclE;E@L-LgindGe8lslxcK8nxXcH6On8Y<_ z0y8FI3v0RjCLUv{JQvS>rou}TUCeL*(SnYomMG$o;Fuh)cY;9xX>VY5OJCYvbcu$U zl!aMhqUk`ZUXZ@XOUv!1nRD<;dPAGuKi^ESL3C3ONt;OmbgLLPVge@2M{gzZ#?G+T ziQqfjn%CFxO;ycuIXNe}dvGX!*|zEJf};TL2Z4 z*x@DRTV&9$WVX8my55cF*sJf^!rRa?M;6(J4yug0u`Q*sp;D0fAloj8r4+=~;K#PlnIcogQqy+vIlt2a+X>lvMffA?Y0%iSA=*tD?1x(dA23Z{|g1 zG|(wqHgV;_b0Wx$4@$eZ|MH4!B~i!ab5OV~$VteSZl%t#w5rTC+?@$pmSO#MzJP9JtNGSKm*9V3xvRPb} z#nUk@yz}V`f16pvS_j5s7XU{%&oZF1Y6xJ9mFrqK(wGOZZF$TP!NT>Dlbw?f^QU)h z?0!-|9q@oeCspK&%TsM*3MN&{tZrvbRjkQAlTgyUYmlc)0=e9(*qsf_JnFtn2G2o& z2qZ``6J9!L16oyqEH2lfgLO%^3|zT#G$_MuCW`_7uet@3qT7rqDH?VMbv8r#R~vlD zRaCdw=75_RK=cT0wZ2!hbql*Vm8k|eMaX0t*>&^7H}vqs){1$*)DKJ~ca!Et=`E^T z#hfxGYaM+kzoqw%XX7r$Io&}XDFTKU4#{0!S4jGSF2nFLA?$7k7ke0l_ZMxI*M;O8xJHKUuJ5N z42n}v;Q+@iOPJe#fVL*5P6rvS?S*=jfHX(IF+yk%fGuD`a%He&H;}d!Hxpm64#4?z z3tWIZe2AsJWfHzM2>gD#%`QrX9VID8qWA=@yZIMkt?(MIN~Tp5Q0l3cyqp$T^b!tF z;N|ekBM@wmjv@fYJ3oZ;Wn|G>s>3hW|MNXIVqC=-(|`$zyI9HAlD#TyAZv;4D3n%n zAuHi4FfJ@(ngQ~m)XIe=8Dzm#rKsf8TsBFVq4%STI>^?H1~oRawUa=>4eVJyTgRC5 zd4Iev3F4cM)+Itb1qZJ70)2>(9$PS8!lAlNmT|zoM7EjYaU^kdvfDyzz?x`N6FS=z z0hYPdnKCL*;^$2Vap#04mh+AuT0nNhhKkI(Hz-tM6F+5VRpXWU&W`H26BtnGXis*| zW%CG06ue@Ob(t3Nv4!p}eJ^CF^z`qv`0>$3~bE4eMF98>V_i!By&rRMiO9;B10P1;B zd)o7i{M1U)sa+8!D+3S6AhVJM*2%SBDIYF5BUim$tJUS`<-6KKv{$h=a$^nZy#|WB z!rhG$Mv|aG*==?6&|EPzqwU@rars)}8V;XVOu!}QY8H|zQ18a6*%gILjh}9LZ)2Q0 z2>|`|V;P43^J5)Pu%b&~8(Qw28suitVD3wT6K%Z2rAO*v&~?Iy@b_#*7Cu074t)$v z&E_m$`A?V4u9W?!%kC^1G!!$pvDpqQiU${n5&L|(afi?X&=Wi;1LPZdBbiCv%?MBs zg6P3yXYOyv$MdR*TpKbxSs3aDXxt@JJm+h`8a9?Ivv<;Io^+60w-;6>f$v;W(*^A7 zR8!F{;jLv?B!9YqgTfzju4PZc7&7R;DYlx)_jR(L|F4i1bn1vZ(LiSlUTw5R|J+F> zS&E`4W-DfzXl8_CfiO3!mE+qAFE)};q&L6UhVYe8_QE84dO0S4SCVP`7R?FAim3Uw zRQ{)RfIaER#{3p0nF+4G1_xbc+X5(ij)@7R3iri|1WH;OZeK|+&f}Ka%o$dnwmHLX zPIaohHwLyL9jwT#`IfofMZx|rvqsX;Hou~O`MKfAV^XW=NH30^2=H=zT0Cv_fY3yMGRPbjsV#QL#TtzWV|gU51iPyZ|S&Iz* z;e&1{p=<$s+qHjGe)ag%hq)*%hukIEqOT45(XX|gq}p+Al&V2ro=NDinSrZnItUCC za9!vRX-7u_hRLq6Vmg(9!D%=*aZhxN1Pxnz)h1gm^~0Ll0yfeXzi+K+Fm`TLFI22X z#0SV*KR$}&C+ba?B%r~GW8MOabn_R@r9;@D`b@ZSw|W}GymlYNj*7q9^Zeicj}qh z<>s7?srUIuGA{4&a6Uu4bCk^7JMCU{4Tp1xzc|wTM4?$)QWgep{8;qZ0RIFstH<3F80P41s#z%+_HW+#o-)%c7X#v6Zn zs3i|B6tZ9*w7zzPPO=!Jk+o9=1jcY>{@QVaxE^RmI&cDmwgC*|)+j>5klizY2|Up1 zVsBX}#bL$`t4W^Fo~OLIkxXIq*LnVAWcxa{f9OYtp8rx%=Y6MFQ2n(KMq>9rw6)0gNWFgOsY!8ke!uNUz5bAH~-0Kx3V|d|R^0xWVhC z80CDo{arUb&r1c?4(~*Y&DjfAI%ihT)MSnt-%RhH){AiKxax4RO3Vu(4P`rI zs0b;S(zX46AVWsg zkcm*-PO*Pf@=hEON@aG8kL_J+a6sdb`t0nkKnfN4YR6gjXh1r#BhV&^(gV@$n~%Eh z9Su>bHX{8VP$%-;QxHmMnwAO!{C;;Uw!w3{@MI4>QLPvnoL-*mVY{ z2G@B)-KoWAQX}c`%v3Mn7=^Xd2Sn&pqY-2r$zdlA;GL^dkBdHj>Z{= z7%~e*uZf-1I68={d}wMhbzw@CPQSz!Q=l#vDzUM2ufszSPN<|387BmZAEp!Wxop%^ zcz_1Yh%d*Zzf95~C&nr;sYj_vO<>K_G$Ra8{kqoEMxM2Jyi#6rT{aN3&%)HqD3aM? zuAQ$P;*_TDBf{Whf||7gQ_HFBa=mDiMtMRkxG;Ti+Pr2MX+l&%FqZu7=ngONad<`-_)~CTe21r z!(cf_v9@k&Q2QbK4uB=d#hX*5Ah;%u?4g3~hx(w&q+``eo z(5Uh=Vxy|#eB(`HEzK&h;pz?PC#@AbZp}I>@Z$-uaj!z|U3@TZZasD!ti1%ponxGa zdk9Y^2}h9gKL9$hEIN9v81|S-L{PR6N^KFE2gNX-cR(Ct5<~^|ReaZUYKrX5?)gMs z#Sxkq{>+{TOrc;k_cJB3khJjo8cM&vkz z)?+g?Qjziih2q3lsX1x3QF9y*BOcU=I~Nz1o8UR7$HX0R+I1FH83Np&fE&~};S7PR zJWN`+$R#0IDFx0_Z!f8ZD&fr#(#UrQa2Q4m@>Aj*=I;%6t%`oiB=l^Wu)B7mxy-an ziy_4>X9rg{E=KPQSu)cTM4?{PD1@s*o`K7^x(pY`{S-XcT2d5h_713Cv%($1g++W49cs( zbu_NA-Vs8$7zHzWJ$f?MsImM6TWz+1XW#DMKwkmjpN9vNzPuVL{|#5ihX|Pewh{uF zBigFeY3>t+?cNJohMKX#s^$If!`nAd@bW+>xnb^V2mWzE=LS6Yb#un)9 z@}H(&C<^*ShUB3O$Xk`6A>-CBA5?ipuBVCsU)a77E88MBA36o;nH{;mRLI3r*o|em zPZ68+zL+J5XRFu*MNm zMR4sa^g71cDEbGkso(HHNQ$$Tq|@6jXv?ef)5hwjOc>XN z*DX(}h~PWgvrxY31Q2dc8P|AJGGWHfR4}Stx~GJoSO~d#L-$h*GiSuIq@&u$33#l= zZOjNC#c}8k$MQ*Qqpr!=N?({;ik>Ro`03_OTqIc2jpccoR*p*`KwjSm4HGFWJudLK zyA%NRAmm-YkfL0StJSzgdSWYY`&44|&2|Oswc=~{4q~p`U6jjMpyshW4};6 z6hh0F5j_p+CKkt`7Z8-=TNeh_t6`xO$^{l|63d#0jN0QyZ3JtzPGAQMhu6%ptmqmS zV_90s6u97ycOk1_D*XRp>%GI0ZUDbs_7GGMRB(lR7nrlOz`eu06Wp2^nwh30pyDoE zg=K}Ka))VU8yu-kv@9ztEGwU;mX-C?!{PV7@43#ou5Qg_14!IVyo;H#WMt6KtI8zTQ33d6BF1r$o=)&7NJd;UPe~lWoIxv-ck*R?w8$ zuE-2mtgXa&Ih@im($T`vibd+D`Go4b8cGA6PNJeJX_^&OSQ-_%G^LrOx#t?ZzOM-- z)6=wF068xh*Rf-R0IwOXZKQ`qds@|>14)n(U4}$a+KuB&XrZGnbg(vHT6x~pr30MP z0>ltT>{~`H#cY-thtgR>8GDx8IAUuBURfA3uo~UyXh3uaYD3nU&GASS(1s4K9$QXV zw*u*7K)R4xwOo#|j;prLO${rFN(EJ^2=^32L*5C9a-wPS*X?!jd|4DvbO!#u3xF1h zF(jpi{Q&44s!7{5DnS6W7v5>ZW;{}`CKci7CTQxs+VHTI9PJy zd7w{QjiRB%!R3y-6KO#=-EodI9Cboto*I%;_QfB1Reeme7n<8Uu4xPWSKNZVP=a&7Xfxfsb>x|CYvANs~{_ z6Ctgt>Zhm9W3(D+35O*KCMHC3O2U67NhYOKQYkL(ZLughCMC!%TW&&Qo5UJOlP9rm z*QU2I_}e2D8GRzcd%z|h5JN~UY_TA=xwtNHQ_ zA@-1!4lcEqXVx-eAdSMMjhMFx)%I-DeJH_8eS(H)x_=}c50TibVih#@TL2Ix5{H-Z zaZ<6;64hxxN41xYs*&LQgL~`5o?Q0>eCmFDyIUky+quy_GRXB3$0ujHa{a^9Hei)K zes5rnvO7ob>O*G&82l>7wUOe(UdS{moE@ev0yJM`t1s880{mm1H{-=qV0s$<0<|@h ziXVu^1&cjj>9{Yq6)hZ9zXT)!T$w&+{sWGXea8rMw7Z)uE_>d|;Ex;{^ZLx^=CF?I zH@fP_VlYCWc`R4UhDHdLkkVX0a(*85=xBKkBG9O~~IY!HH zmst#6+~LYP$OgzysS-KM_)@|gRXJ8Sp(b4PpkZz-tQgc3c$SbEKRjvukk(puU7kIPstaS zKRqu_Kkaph84dGrVOHH5WXb}$04>F?W>#FKQXo1PWFd4lnP;n;0d+(m3lYd@sPvq< z2yuwDodr}&;u<=RXo*}g2#{u}tI{Y}Zw;uH&ovZt6%X4qSAoc%BGqRe7$Hk(kc<7u z!Hai_427=x^EAvH*@{|XYAezGLspL%aIGjcbrk8%QwanhG-kOYO|&7GY!WpIF* z1BY{RDCGYkP;CG#z)Qf1|1W_mY8@?yexd%~1Zu{-Sb{x72~@_4RfnGLM92z4drvs>@@ zbuvcV<_+_1Yih>sXaD*-Is(>>zff_!I_FOF#zffDzwkHu8a4&c|Ezzh-X_>Y!u|`m z^Kh!kJXXy9Gn0I);cV{4R2?t`R$~Zi&A)&Z=pQ!i#3efYb+`L4+j?>}*`nT8oeUbJ zw|+e}^!6prDdelk-GdFqsrA{_9#3sG99VO`Jg(=#W3$DrMsGC*xoucvOHoSjKsDb?mcKwcV=!hs2P zBKyn(jj*)jS?~2^a--j8iRmjERp1tHN1o%q-114ZP+E+ndGpwN@rnQ(a{ZjFB(jmR zpr>w=$5eNXnjO=$&7Yf9*FPvA>Lg^UJa^6TieFN*QWBE4$3kwuS6b7hBaKAT*l&qNFSnWn&B@wye-os>x11n<}0A|2c<&eMq~eRVD_ zY>E639H(<6Cz5WIdeDJS&UUkW(^%q%37V5n-`ldZdYTuwVCQ&#JkKWtaWudzmlPnFF#Ir_hKNpT*IW7xNs1ahSx%cHwT5r1gE?p@7-b0y9Kg_VUvT7~(&T-?INsj7}%!Q0#!eW?JE2wQ91P%u`OPhY-dVP0Inipn4la>KepeG+jlk0uo+$!w5G4C2>RT zx_t;&4H-kOQs|xNm-2K}chMatQugN;I!1Cni^^XqE)KK`wcM=Bp`w+gBcQ$p&##RT zbR=MX(&Pxz3InoE0-`qx0q_(6kL8_=>13?)$+L(e5<@52e`2sjWlr&YV@aE`r4Y8odg)zI4^dYgi(J zj6g{9Y?1?8vVQk@h_;xWF>@K+S%mC3}*52?h>G4#hYUQ4AC1PBi47YD1rh{X31do^O*kleelhR?2_@fi@G1=>bVzE zx_5GV6RqthX@SKHpL|+`daRuiqz?k9j4+0(Ws<73bw=R!=}|Qd;P$?b(wKA@+LBSRs%^Jb8$2gRTq z@&l!iBy_|a)IN_{Mll1b&7{GMc;`z~=D-9`YDvX3=OBK|8F{PrmC;>c-=wcvY4_AE z{Es6&b)CQ$?`8AA7i|+{7zPy{W(KY&v$$qWd%!xvudonb?#4)>p0ZXfXLoBEw zMUVdQY-E5~_)k@bI)eYII;Mode-gU@%eZ?xx7XAlH*1=17Ixlx#Ljeu&)xmX>7iu3b32?8FvStO zNvSm4HE0)KM=9Ozl=6&<{ZaZOT!D9*%C`^jF7Djamj3m^xK9^+ z>g`ZgKC0%%=-fj9$mjon*NzQ-K~Odufew}*a%ZZ4bmkU*CG~Sz0V=8!X)A99e>T5< z^je$@o_G!^=iL0YNi~~0RY@(g36-FX^J((NgC9WXKY&~N&K2O>9&(!wd{=V0X!}_= zp{%a+Gh%J4cUbx-t<(1|&x*o#44AO1m^&`;?8E5L911N=3W?8-jhER+3nB4Bh=7@S z=kzYTeX&xIl>^&s5DcM_15`LrBS_Y~eOCO+&VE`}#;cth(z5pN$$D;*6~Si*0MrcX z*eh>$te$qk3bfZeF>85+I%$|x09ta8ygR9K#uGUSb3&PRw&*0W5tm`VW3($pz0(>Q_+AMG#aGa(RNN?sHdX~+tWut-QUF|9 zB+&K&s0%-DGaVYZ3=U%goA7wOk!q&QM_fT0on*Wzt%24-KZLMO0=5PMSYm16)zcXD zoYe7eCP@{rJO*VSk9XyK+02o6=&S6f26cdky6UNQb3auB#UK~){xm7XN1F5c^?qAc zS^%99ivj7&rBFIKT}KMi#lx6X&^kou&zd{}Gh0k_yZ%W7_?EW1QmQTw1BGF~XTG@Xtm5VVF5M<+Gz%ZBuklusIOP861Y z%2kVvbjCaAW|&#e9x>VP$x}@(gEu&9Oc-uh;IY>ByO7I$g=ufzfwJ}0d8aj!*}*y@ zAg2!MX#xd(ZYsz|x4 z>eC$5t`0P`29g{Oh~ePE$c#8jK*1TG1OUtl!^BeqcRCeMH9HKGHui{X?oDEu%iG_F z9anKJ@WEx3xNGzTB}VRcg8$YzML2=5Iq@O##5SRUPE=N8Y|gvSgu8^&xt>Sk5LBsy?!5`Z)4e&* zBcL0aK|9;iHddC~7k~(4s9ieLNepZT^yTj$7bHzdLWpzZmhD8%*3&LE$fyi+Oaca0vaco6m^;L6F_3$6bp|rPktUqx zrb3@H{ThPI%VCb4f!a3c74a zp!j-{Vt|@q!hITKGX}j7B?7iA9zuzO|8*!n-H7f?g8ofcp%~T@vmtmTgdnwbyO%8+ zbMWJyJs-Q{k5>p+d=IW_<^6aH^kLgCbpg#;vFkF7!162VstnP$UqFH_1WQU*+0mQ= zXU!}l0bocwTN$KTracft&2X8SFeI8E&0+UwJ9O-Wr3S`i2OWdHc7>T-%zN<;>LLYu zOncXuKx1a1JWp@{CQgUk7{A9yV!qka+=xMkR@q?ugb=E5Q@{>xaXNRu@eaZJ(;$R} z>5^82_=usTDMkqK6g9qZ<3yi=BG#a3T^u4I%J7w+;HwBepqLER1hFnd>cai#T2x0;ux+A~Ob(RB29pF(N0PG= zEnguAJq^&JGnCHLQT*lge3|bHIwFt-zOu}`a~RtbV^_IYR{6j&LYj|wUsgW|PX%Nv z&lG&ybA0PpUCSfDPmWMI6>3G!GiT}arK+zAAV1SYs2{*^Vde|>lM{mViXAOZIu4eM zC}s-tD#cm@xG%kgWx@0l)^Tvxw)-TS*{juCEy0$QaL!(`)94&!l^I-xBgye|Xy~jdM-D!rU7Vm)~R(DqEM;0V!ZQHN4>wQE` z5Ca+n3#Ave{;(+Mq2VzWAp{FK zi5VGU!I+E}=QEXZl!rG<650g)rl=&Mp*Fp}z{dXNHuj{`O+Vzm#G@CXaer0oYB2F) z=%ZC{J?5b^U`@000L;x`hAaRB0Ji_tiz2-ceSFlXa}z30?BKqHYE(fhKHP@9}nQI6S~d3i-R{ z(^eF0O-eQ*!JaE?FlxXx6rdYbq7;NUNqXE2Lh{9ZXy(&H`)nPDD7Sw)(^lPzTHPKQ zxLiB$><|iryw(n2W9T-C?H;i>Gv_gqe9R!Om(y`3$9#7}z;O*h%qc|J(RyLG zpU00Y*nlrtEP`@t+EzADpN*?J+^f$%b^mvHED4hgNVle&#nynUGbGHSTa!Mw_0bAq z^|Q9WLaEF2A22gKR^aSOQEw-?;}GrgNdIohc21@pi%NcA{_XV>Or%g>pQ@J3W?W4> ziG3tmz%wo1U)w!>|34j=n$?T6EtuQ@RH}1|(b=1M&+!eN{XN6as70;MypI>55y#(s zfBW?7mU`Qr0V|+^>I0j6&@xaU0Ja4+v|yBsk(v5$&P)8*xhQyTgrP%sO6%O3pT&8Z`+ zz>RdpP1>7A1gIk!8Z0W#Tzb@Q8?g8Z7fC!byd>C_MGPI@hBA!h7Y`$W{$C zq$B2oTh!{Vt3^i+Tlem|^dJ6zjJ8|3Nr(R=?k?Ub5-~dd8rv6UG!pS4Luva#^&T}{ z(dS9J**)RQo`lq!^T;7nBMqBEwXecIAB}c7Mgmp)JUaclg$B#Z6|VHfH9Nq&k_$c z35UUakc$OqKX0iwFq*g!H`Q8prWtMQ|R-NtYQ z7=-eqd-O*mn~d+Bk0?{564Sa{kzMVR`*h77-4glTt~4(qxV2h#dnZ(xj0C44^z)1q zV$z{*-zxo%{OW4`HplAOj|UyO`c@Z~4dZHVF1ew07Yr?sE(U_$cN~r$+1q-c4BCCB z$Xa`DNOA#?U0rq|?Nzmn2JE#t&mdgTU0i{(tG29Y*t`7`-`JaJ^Y*tX|De3tyQacf z!@uJeK(EB~z<^_3idDavMpfcKdz8_Ez5hLVH#E7%tyzB^QN5&ychy>uJLc@I`iG^i za!YQn%s|P~bv*hqJt`1YeOB{*;>)r}Jt$S9Y5O-DMAKi*{8|VNn@u;%@SQcAKSzG_ z-<*A=$1)x|@i z1Rl_t>RL1K@=@m%WcYtxc~9j|uNtC11~>OV54fcJ<9w{|9qMhmrN|WY)A5JO#3I?6 z1}E+i*}m8Pu*-GA^)lJaG$oNeYTmeJP`XT6OGS~{)$9^$SsRIqm&_TUyijR?n{Q!e z07z!pXJQ zD5sRQuXf76_&>?f``!p;_N2e}(VKN&rg=a;P~9&Ao3o)))e$8VZ|x^Rl_2jtly*~r zN-`ihw$*qIL|s(d2ZO&p^Tqwt--^3pg4embO8SLl+7S zIx)GmRq46h;P?5;^}WZsd(S-4sE2JOIXR__3BU?xG649r56*-OVUTshVfa$bXuE=CpwFcIff{0DE6PV4XF)D z(AWrDEKAA`DFV>W(a#fwY2XBUd{js%uX~Zb$=}~{50!tb<}0N71yB7^pjppHJF!+ zufm=y-VLKZ*yHIQ@`A$nbZ$wP|HIC#X^K(o`kMIRc#3VNt1@YIw_w_ehpyl}Xi%9( zG~dHy#)@5QxZgPHzI%b|1Xb$PoFhy zn~dP(dP&FR&;}oI_$tyacYfbEu2Ql+j23TRkFKE8AGyny(*52kihZHOgy&o|^x>)w;-=-ed5! z=Z4OJOW4zG>FXb)xWk(3j>+HOttn{Ge}n%rduuB3*}aXEKWfn4jm>KH7fNqWF6Q`; z#P)6|#0$C%IR`I{IQ14OH@b=@)pGzK-S17Cbye;hr|n6unPa1qS?Cv$gXJzNzdLvb z!-O~RX;Ij)Tr)2Ft)uBy1cK?YO-GEmPS$vr6kSDpb1?sh)fHsE;Qp#PSiv-unRY&< z{N{X2J;5SE&x>Z)oVt3x874Bgibn-zuUJL8(Ylpcp3q6j=~Q;RD|B0J;#yEa%#5yK z^UsIqE_B9Kyo2(ADHZlwObdWU%ql-d(MLN34KP|h9A21NH{2gJBJK2TJ{Z(!5f>l7 z8Tc_R1L1Y~g7*ZQCqGW~yAC;v9I3WjK058cpx?KSFiZv`c0qUGUk<2u@JoJ1DOmbL zsh;haQt?%b)B0P_U;o|piX)mIxA-zC=xCl6rJYK&+j=~5!v*!@yQ{A$B1X4>T6E?w z(|FH!&Be><%~2amXRSV460QSyPjjH2Zl`=5x~^mT9?age`8=8c-j2CBJP^KfDDmjb zfng_&ncC3vQ`#%d(?dD+&hKwa;NB#jW#~?XavE@$4);~{);ABh>zXh4t!g5pUc0K2 zb7xb7ATi)YK3(+3chj1nc>XunW`(46i^^bBaZqMzD%quU_XTtl%ID*{f)2hr_>SEY zpeC=g&E<#E1$kFK`1iHs!)FQr#4nGYZA7xaeiQL+&Uk$5S*+9$0lUAbUR``OvimTC z*N_~_#u9_;QXGENd#9)hnKj>}#q-}@2K{x)-oEhaLitFte(i_ck$=4bKotaYw~>(j zAF4zO4&OENNp0DJX6Alf$K2rAk3~VDM>B-sR_e7PJOEvYwwaBJ3 z$m2W$)!GsDn|A!!v9^II&04K1U5vh?D@T-i#hd}!G3MEyJ}1kN&1Fl12IL4^yW+S| zT+2SB5pz1x*Ca`;@)F9tAJeugqwVj$Ws8OLK_~neS*B4!f zsl7jXb()NM+hb}F!#-7DqwOR(qXBI$vv;ve?5v?ng zf~n@>Sj2IncMVm|?SSj*p2N@bJWH|)VdkYp$ZfoB>vZ2#@fL#Z;Ca4(LCP_2pDR@hg-|`)V z+labtzG1ROiQ89%Q#A6x)pOk#kl4+lc7aQ`83%iy%*jC9q-8e&h!b;Qd+6Lq5XwgH z{S?|BVK%s6-(Ejhg_<@MN@9<0zjtC7=_JfsNenfs-BahM*obO zXHi4L$WQ zPS?))UOtS)b3Hh^6qa-8Z#acfz1H$j%SwZf@A|s>P&w}YPc%3@nHXj;eMIMS5%WCf z(sWzN2zhAJ*&Zb@lmxq00ogelxxX^ew=!x4$!Com!%VRgr<^QH&g!5rqM^7qh%jA_ zM!y9x@@+k7C%b%M2*d(77HXTb9}wuKI7a}400ixv zH3js7E{#VI21S?f&&Tpvi-Qz1PdR9L>!+FPW(h|A7z)PzXhGu{_+g22N z2z*=_}J~jgJd|+3z1D?v!7+?6%RC!0N{YvYl6%}lda`2y1+b;(L zfEWOV42m^QxKPVhe>14}Ee2z7p>ApC3kdxfEb9e;KWBTv6n`}6C2oCgpUhJ98n70= z)U+M%=jnQ5vFmF)_t4y_&3f9P`-sfkJP&Di2 zW!`TuwRI=Fb`Ja&x)^yv;aE`JymV;%mqpa04>w$0CT&c4m9ZaE2m7RX&FPk)#5XF`tHF=x)tQQ}^cYm$%f4k17Iq_Z#aU=Z)akzV8F*o4!*Bh3}r4^T4Z55bHXM^^gg0JVN zOzGQ;b=uv_lnjUDU7bPTpS$1P^+}Nfzd`*4#YMMEg6_Sr)39O9FXesm45a^~)1_Vi zW(PLU_?lUJrP`B#Q_)2|%%GFu?sr8r6m!`Qf;3`LLJOyuOfM2gj2+*m^P)9ohwkxK zuGIp&y#{L^TYuN#`4Z5b6Z9*$DUMEEfRz^_#-NbmHyEC}wiSy&SYu8SGzy@vJP)Ro zb{_Rg>}2>?U579srcc;7Wj#MBqN!HrT%Dn|^Oo>ydi=WfT5||7@2OveP8X z^mOQ**2Sl1UUPsqTiom97hjxiIXvBv(R25IH514;37+_KlUtbi_ZJsmB8H zj0itGsWf7Q5Gabd@d8_+d)d6ADcmQ+mZyA<-Ei0Pah;m7<8>)7JAf`sKa#QMiR9zf zR2s>Mu+g2hcx%^_s3+kxiN^nKAME^J?E{F`ZO@c`8trDF-;wDN%)7r2B2Z_K{y0pB zJc*Nf>}-|~jb%AihVDM#73t;amk^l>sjNEi{(;&w^5Kjhs7c?UzM6^sNo7{hr0PDu zIT?Y}=a(<+dO&O~H>rL|o+ljPk9a<*YO9Odc4o6F9lxafa9p$62U~)NEU>{eFUZ2Y zMyyWjPygvph>GSfvwJ2k>X`$*E2-X0ajn zswpEtc#Z5A7Pq<;qw*IuB6a+V1io1E@fh_b(T|+evI6P6LU?WHeO=8eaw9qrS^{i6 zH9MxuQa)C42`u&v#f*UT)s2lDW0#RucY(Ynry!+dpiY{|kjcNJ_nCE)GRaiUub)zr zCt;P76_EgY>Db28tw;+3N_p=b_&a_GesFw@6gvli{6{gpm_$RFII@vL%c_(yDoD-o z#a4lItKC5$+!X`DWQ_Hm7%u0mtK_~vNS+|$Y4!mO*V)k5ElJF?q$&>ji@_*_rc#Qo z##i7jv*2D@?nt?}o6#Xwski-@QQd7M-ZRIoc22e_aTv5`c(C+NZSW@H)x!kmBlS@l zi+uSK_@z<~#907RtNT-Go;Jnrn_Jj2RkiI-QbOr=tJiAwjwSymnxF*kt>iAU>})0% z@^WvDApH5AR)T2=r6L9o@V>3_N>&Q31nH&GwmIj1#hn+HnFk`|$g(1RRMJw_MG;Fp z8DyUMst~4gki<(a0_(I1UCmpMh^es~OyipMh;l6OM}>Y(!m18(r5vmQ67jf;@$#1P zs~e>w8s|mtaQ?LFXu&IlL*%69iwAxA*hV)*OQ5p1{`GV*5b2Pe2?DLIvOu7Pb;^gt!#3-IY8TerE#IUog|MgeLyPLSO|sydWp#$N ztK+u5*t=S>uZXuW?rnHGnBy{e8`Y@t{9Fkb*O5&! z&eB&|yKoPgf3D_qr-$_xV5u3Edt%5Dd_WZhG0Cn-bpCWWeECrw<)K&;8SvTU+)7*U zLw46m+ov8AEcj}(j~8bteB0$$M%@;0r5NL`aGC{2be&$Xt4ROAO@>m8VkG6YMt1S| zSXyTG#nVisvueLVD52Pm5HCm>7c&!eG(+SQP74Ev?&B9-Ry!sFwYC+yJI;W0zO=73 zhzr`5U3E$qYAHhI-ga4VNKI>0>fhueJO9;ln$%B;WQ^`p_B~}Rl4#zRK`>)1u<>OO zI_tj<_P>6x%|+ubpqtN&3+mrrFmr@uI*pXT4Hnkx0g8N@Bhu20Z=WLG;1Cz~7h0wk_dI)X!YnD%hfmJ@O!6OAPHUw)zxuRZNmJ$1 zZo`dVngKm9k4PhY6+gDst`(sOW>f;UmnIuRtfsTGM*Iw(@7q;159SOPD%Dqni*_J5WeFzF-pqtOmtB9?W$wB zE^`m51lbyIL;dZ_T~fkP565xJ!8#>VM;hh^=_c7W2wZ*UW?Esz6J85m*B;Oo)0D2J zGbD<9Q-tpc&?v$CIzBP`dB3jgz+LQeIx3`;RvKOIz84z|p$J>gSi-&yZnWVUSQ&mg z*Ga=@th9Xw>VKXfd0KRfATECl2$D7MuNQX=3xIZ;&Uh6CW(}>~Y==$#JofVQaK?=0 z`Wzm`tc!F~RvOd`QVqno$u~HBE-KBeR?Zuavw2|onMY5>-d--lw~=|qtFMSh=@Mci zxjeK3q*_w%ewn1?0E@_C`6J&27)02XtEa+JatUhCgJFSkHW+om+aEwJQD?eJphFTi_Qn{T7DZt2W+YXZo1cs7p<1|q+))iKnQc(P7hsx*Jk-6$ovIX+YqZC zSoV1(_R|Dm)~-}-uXon6Hbme5B-^LvQFuOiACkuKIJ4a#B2sxN9-dbQUPxGdgR)*o zzs@c$4u#|@!XRBjI3yS%B(r^Gd%IRtc^)ni)QFFo5$+T55vBS{_MpsGXkAlaaD-b) z8PpL2rtyRG`P+ur@CZ?X*4qMBSt^TN^jr-=113c-&;o7LGKCoNIm8Z6B_}f!(oQFn zgdSy~g;b~~3n?L^C1garm*Vvs1GuIM8XHFPgFFN}4dq)Y!m#PRfX_d|63DRicxs~5 z?>r!+U>LHN6!I<~L$S@jmPUl)YBnbXWqT&=r3580Ak}2$SEDs{G9~19?N~BuoLc+H z8-9a~z9FvlZ%W?-J4h|FP5c3YcG)trbJt1$6ly7j?)vz#r{;pItq~OjL=Ma8+vSX` ze8=>6v*j_^oQpYZa5zl=qCaXO!8a-1mkF)TN7`%d9$YR)hd~@C5Mk`fu7QkhCgYg_ z@t8&`i@!a(Qp?`~)43KI$OG3J?QtVP4=3sO8Dnb45>6V$$POQ2&?=z%FnKt*Iv2W@ z5-X>|wk_`(!m$$8Fdefc3vYK~D)isxWvN}XfH0v&Z0AcJ82>cx+-uy{wdUYq-dI9( z=XX_KI>ess17bpesoUkA0@fa`lYSXE2nq{=%8mTy!kS^zaJb?2>#N902=Yd#)%Y0u zy%+uCyLbb5&c`Ty%g$n3d74I-uf8=!|Cp(q#h1Rb!Hxc2N|E0u{t z6dEpH4%U7P`4JhCPs*|g z8+*}h3a(R8e88Y@2y@m|ni%hE8`^`hRBBk??doKEXrr$hz!t)o^&2MpKkzIU?>>^n zkBlogfp)BLxtOk!4L$iNXTx4_H3@w`X}7LisgfmCOJpg5^TF?lF%b2`UzqTJ%G!pE zIjC?gLnEMx&{Mr4c*hvTn+(}#qqAR@1!6)28QWRvaqS*G=WnGK`W*EW9<^WQL@h%D zSkc=Sj>LOwN3f!yaBS#OY+C+lIIT2mF7ECR$ei&eN8nLN>yZn;1fMVV^qAXrJ=p`s z@}RGd8tgmr@^H_+Dh$SKML?wl+K z+ylvFDgDQE@)RTb$?%P!i0?VSZZUg9N?L-=sfav{g;)J>zvK(k^uY% zj95`*kk%%$z+3?Q`d3vtIe-dqPNGAS$#4&0M;A?PP+Rv`)zJO|h^KvKbE4Wm`>^+d zcHNooy%1(>C&z5x(E*xze;(|nrI^54G{MO+p8SnZ=t^@E*e#680};}JK6sUd9wdu&H=)M>N`cFD zM%4)(C0pWyy3XMtoIGs7v8`6$LJL{2B%6zbFikkvV9!coHbE^@s{EWqTkJu;R#Q0z z0Eb7R3BK@nDzr;ncY^^xaRsvrRg?XJvgb;Ff#p_fbC|Cs@N5i@MuH`a;9PdXHioT% ze6RWgH=*{-hz}Bi`=*RNRjEiAJWm8u*{7V*@TUWV6D*}O#Ax82$;&}OG^1-VWdL@p z=Y~pvA@%6vjLi{=#M{m3e+xIY@M?U;uv5!QRBGP?Bc&EP+e3tCBg41u>s7P};>cqs zA<$&8{rkktMNhVWKn-bATt`Ek(cyMyA$nKFbY_fi4DT@LZ{Mlt3_KUuIIypu4^qf? zcidUo*`AAwBH=?lJR|7WY_jz-nSp;DP39mmId%Pm+NoFWVC;l&Pbz79C)`e|hU#+h zAYmp7?LCBJhxc8%cuuNE!`HvVy8&T+v>Dsh-1FlDD=_r~J?STh&zv>E{3|!kd4WIt z`3&U2KPVPJmnEwB;Ht|dqb{?XQZe@K0r1fX$ybZUxaI?=EOGAo5Iq^d34jYHLzHCz zSK(bEwp)$m>Sx;hhN!+WS^dlvc4IOw+_J;0x9E;G5q&8I(+&!-P~ZU<6uTcTM}-@o$ksLHqeq3PMAp?Ve&L`L617~%ya@NPaLF^dt%QZr z69HfuKqCRFOb0+^z;M}pZDwGEvFFu>gK*IRj0?*Vo5jdi0xpigWV)#+(9HdP;8P-W zKfw9;YyYF{=+ysZ`lqsC5$}t+WQ%=A4+2PY;?pZ^u+wqIh)sZ*P?H*}9V^|0CtkX@#T#lxoCkgH8j;pSXjdH>7F2 zJr<(p=coH&CJ2{?L8@t0C}n-ur+Q z5}|iXMu|=Ptae!`4DY9Q#=zFCAAUp(@#6bF7(+UcMRGc%guWYQ1q&1*O2|h}Lh{xf zzma#{#t{QOs}K8-WOcIgNQ&IdH_u%g|MB9`ZpGNu1?rkXruxr3gjj?)d5~}IHOH4F z@lM?v&{WF~*q}bw7`OLfiMNlp$}WhBuRt6eN!kv{1YC7Zgv7_Q`{3}IM%@4gocu1u zC0mkx`0Kews6nGcH0wtHxO$17M~U~kGCz9JvU(x_QpQkz&qtAC2A{E1#8v@IuE*`! zF!V3fU>olr+tg#+Eon$LXGhNLwHZe#vVUrnRy!%o#w&zR;- zo}s1$5ABXIzD8C3C{j7L?D7bs`h}$;mkr|@ls)YXm3Py~g^>S?tosUTdJEfzpWX-% zdZ>mTdZ>mTddE-{5Y*5F5i}GLMJ0t2dgw)jP}GPmGzCNrz1RYx8wE8WD%K5(ipn-` zp65OI-kC24nH=RHGyj!YYhCy68pNQ-2@;+HNIu{KwlEexINq)^9v%5XO7yac=26vJ#3mX-nvF(D}8X4!??+RP6%ET65n`Y|jtWg!1KwO%)bt6D-XG zGp0dTx~A%`d$>$s2dY0*YvK};5-V@P5y~95_CSx{bsuUBTqJjR4h7F3z-@M^Ob^Gu2Zk9WLzFazy@QCBH$P22-DCH?l z@|@G-PiH@gE3z`s&OtY*93YqF#Bd+D%V9|GU}^ylUlcn`B|e(YjJUuKsGubI#*C2> z&`wu32Pqfk2rG==omi;rdFrYm-glsbW!`DmE+0tN);9K3G>9oyS?=$Gi8p&pNsBw} zzEc+&YTzDRPAJt?pE;uiQ`6}6_BCwD2)yJ7iZ0?h0#aXF+T4lr)hS<~t(e5EoVch| zluU&+AK!1TWqsg|%td*HhZNU_ql2?!9u^0c-zwR0`$3|z2-fl&fzoGup^wEEmi&~- zzw8V@`-ugR->%rX_p}+D#Ic!O*ZH8bNM^mT`Qmk%Ifuwp&s=%t znP;>~EI4<33OK^@xKsF6HR9BK``JXk0hi^6l6+gORTRF8-CqXGD?;yk^R-Za0TbtE zRb%LbvAM54z1wPrvl5aWHaBtstb=evt8H4hP9r^H!EDm%`jHNjkmYKXw>&jsR$2CY z5|OY{2yeJr!h^lupNxH75`X8{1^J@-a9C5a#qe?wF+*9e-kHmC#q5u9I(*mU=Nd-B zBJ*MITq#Yjy(qgpe?$wJTr_NFQtQMylx+mLA~LY4?EP)fW*W6p6t(}?p%QK3)^nCs zDXqQE&rrop!qFY*SFG|5^F~%U!CU_9LFL;`S>9pBOl#*sHqhFqo$NMp+Sp&)2-r!@ z!R!OZ>*G4su1Wlhp`(lW9lMzz$Dd`i<@{OW?ik{o&=AJ$;v2XZSAloW?sIv_zqK#* z#W=?8D_B8Ey^H?s}D#_TEtz@rAdlRNR|_(W#s73SSY@?-##{`Z;#uuI#CQ zBUL)lJMEUxrQa+^&&tP&NAksl{t4&5Io18{iov8a#qtqWhelG0#QlN`rDlHpV+K;Y z^HJw^S^5O+_}wJuB1j&igH&6ps02{R?m`hWY(^+Kwcb;?S(3ZsgoOT??^1#IWmr>I zK@%|=tef1X`f6(8uejwiRk$wenK+_*CWw0j8;!vrJs%2qJ5@4SRl+9bmrdt;b>v{;p8Y96WxSCqUY zPzWUhwTF(CG$<@fk8X+kKnO6x5d;5ssMmuk1{3-`zkQpXZB-mxK6dS%c?=i%c#P&U z{>xvA&ab|@3Sfnr0;LvNaNA8Pg7m&7@wY#sGX-lTW`}7E-UQg(Xo3TLj!~^CrPx?9YXey7T-l~pP$1@agfoRl3*Q^_lGl&sYWAdi}>NUost4LQ=uITc2?1>P)Sr?Eba=8s#C-_T+zP zdlMS$KqefHcu-Z{t60;tIKaXR8>e+DfKo5E%l5tD^E=mum7fZ8Wo9@KA|+4$dIU%{ zuC;{p`2)JxT3K{p0#Fo@7}N5z-B_E;R^fWTG4Qyg66CNb-=28z*pWA7@_LrKQ`}k$ z+@?ln;0a#%B~(o~k%=mCDbH#GOSLYh98HY?i!+90`BVlf3Rvch1YKa1Ji|3oAOZ62 zWLu+fWEIGhY2BqAbH79mXs$4yHtC{A;@{B#&usbvIx@yx zwUs0jK%-l9&rW&}T%g?uubtiIEHko;{3LdzwFFS)s^Hc`j(8G^8_;FP;VXfL_1c%h z_rE71l4ObdxKisc(SH*Qv$N{tqnj@LI_IW-n_DcY=pvSqv>kV1$1K}4i|v%7ZM~xhhPx9{}@raVMk^Zbh}Dh4Mu4{7HvSs=t~%^ZYo? zN>oWZ>(gm})wkuL_ z8rf(s-kK&|-oX5O{7|!0rp~7HR2+T$^{4$8$3tYG|9wtZyo8XOPtPkdj((~T1X5W7 zw||b`mA%(eqtWFww({YLQ}>ajo_R6OPvkXGzTPjfMVwrG{~F3ViP3xAAEq03_R4aE zQFo7f^J{kYLTy*z){>pP%|ff6Z|cuCj2K8D-c5PVky%#LRpPNA#HD+W8=Ed46^%5< zC^o*iqWX!d$z7rkDMpW~<0p8k zR75)}hRm?2|AXF1XhmKm!nEE8Lz+ISA+VWG%5AnQP^AtN&gpTAil;Y5ys<5#0+1W!uksw^SP%HT7eH*ONTlik76Y`uB2Gvc0`=i}9Bc>uDRUHn)BAIt_t*{eVoPD(E{E86%y z^ukjISfwihx6E1C8boW(6L+uQjk_kY>lEjTQ< z_N9yPl(6zx$9@ zy9B1=wd^;FojD00enHqE3j`R68-uJ55m@w1JAlC!+@z>+pw05PMPVyhK^*t0<5Km#8sM zv~Eztm{**NpMR54c2}nX)1K_ui9pqV6HB$QLGC57RGUC7woC*C2%%!Eb`#6dm&>!; zP_}1z;%2*_K6bZ^t;|UrnjB@w*xzhm(IMUdaVx0_2CPG(L4q8#zWp#c2efcby*+2a4zXH^!^p>*$+0jH1OZu5s3`#WwE z5Fj-K_zsIvE;uGqP27)K77O&05cwHct=&t3(12{^p*W%am%Cn0-*u_Sdi)@K` z0|2SJ3zt8GuRi*EWdqNg`+C>K5?ad)D!wQWJx^sq{j9fQQ=NT==SH z+}A}0_8nphA&_9H@0OKnj3Qhc4mRH)oi{N16?5i?jN|p zmIpvs_te@3o44FBL6ki3Wdh;J~$f1bb z>yfZSX&}e&{N${BWyU}V%_D%r(gHyHB-!z-}o0G1`WpZF7v71u5DW#1N0?IB=_euJ3RYwrF7?WGs=84BCl-dh$SZA0%1^ zaFMCZ&S~EXHt5N!4w3}w1Y2JS#S$J@dY_QsU?jq@tdMG(fT?`yx~?9Tb@W$W!*WqB z_Mu_@OfkN<2CJzDDt(5k(t`Fi5P+`k0F&^Z1OCDF#@D5SCikXdMUGdT>v?^L*4mR7 z9;mEW9Rk3EI3PIFBSyGOdj-l8=4sV?KOqa8;{@ZkLg&-iE=}Y+KJMsqcAWbi7U6-F zgn!Ii6$t1eOFSq7ryNh2SG=G9+c;MjE3qG!PvOkY*F!&opl6^(daQ?G|*yhzfDB>ld(c-_nQzk=&(e&<)5 z>{T`SC50*r5XUUZCtRQ-X-_e?!W;|HrGk7yo|*z)90+(^o4kMidv!L ztCWkEc0HTz9KK*;Z-Vp&=to_b5lmk4dx_C1@}5Cka1=;@o?c@Jv|Ukw!c-B!)EZ$# zqIMXK7fs0(52H}TBflsg4hLkB*3mIgV>YY6{NB9#cjb;Qo%OFu=o-NAfAE3;fHtwO z%>tyUXY1@<{}SrwNOrTi0<<9m8}8*FB7#NcTp+oBnS|70;bAEoF~ykb%YVwukPv&W zSG$3M|7x)wtWaNXY-0#?)`M2-V`;Kpe5_jQWYgh18L#O$Sd{z#R#U+I%%#Sl+-NTpzjkxQ8q-dL8R}|iG4Pl z7y2^gRb*GkzW&f+_OTI!g@9p{A3VDdT1-%Smm=&71%_BNxF4b-j>+DzQwJb1;^o?~ z0r?bajY|dJJdN8Izj(l!Aqrm46W@h;%iH0=Xu&1F2UOaqW31Sm4h>+()0uJBfzj3GrT4dX4H-Y7 zfUtO{S&h%{2|G1}>HC6vc3=2-XH3^O^?6_X%g@0_D!=#{mH z|4(G@90MU|7&XNc>t`5k-~ZLma$>7Df4z&NR2wU~6{-1jcT877+F7&dZ)coqvc}w9 z{wFebmZ;=u8{1iHfESHzTIo{#AGUi}8Kz`Gf=wcO$JB;HE-PNO418$(Vy4e1fO8?) zB~5uk{^~B@q0W8xYPITed`W*L(pG&IZ)JUxG7ep1&Em7x)n@(r*XQu;#D9RB(NRU9u*J*v97d5&z8-9KD zm4DgKy!i5v;#?(X{IJ9U(+Gd|uH6CWf>t)W_FTQ+^YNVTy{Gy{w1VfNCxK38Y{$Hj zIC}Rgx|zVgcQ5ShkEtn#>%+75TGE{3>mGY^O=y_)npWjeOD1(gax5RDj3Ta_0zAjTx-zbc4 zAuiYNa!^#R2yI!2DK-d%1gV=al?`;=VrVY+3@QDaWBSDgJKxknN>km{qB3+am|Z3C zw~fGN7o^Ic|Gi^p`4+=}=YUy;}t!mz%E zFMbeT9>{k=Vj;H^-kv`&QSsD|tR|z&^~_K3twx(>8g|;didvO*cDVyzh$A3yqmr;( zUB$-0>u4n{tKxVS?NF?{KTTWE}ycco!5rEoB7!Qtw|CU(hXM*pFeaq{ig3t$nIJXy*aF5$7s3J_a%y( z@y=J@9^HL*z66HL{$!rdcZaV`$Qdq9sGCk|T?{{^^h8y{X=_OqB1c__dLS9+-dm6m zKGmAR5AW}qRLA$+damHL89jM1Ch&VpZy9Fv(|I+MD5JrKhy&nVNfM^SQXXYzUb8Thhozp4tc%fuWCODqO}t zM^^=neGcIJ1<&{=Z2guieC58kA5_?S%9~7zDM~e4c6m+HIU#|z8wkJVt~p;Hi}-j= z;uB0Qp7S|hEphCQKp|FsHeWXf5acQ6J`^;mAyFnzP)X|#vQ;~Rh}=k&1G8?{yJY9;F z=&n7)ff!;|WXco43VRbOXr(TB+1@)8MZOoTo~w`B!o64g+i-L+4hM@~TXN+*QJ+#v z*b|5qx=jFbUHjX2Y)^3{Z5D=+xT8h8u+hj};V@h`TQf3CQ%i%6Fgry@)$&`VPK3+s z0Ck;m(^;PD$dWZ627!XJeB@fZ^^4_4+`{k=SU3+^i%%sgeBpf=Az3nRN;5~qQFQUt z!;B1Q(h_5ts&nuPt?gyW9K5U8u+OvWrAr11V|N6t!59Hws*kF%8vjdi0@_koO zg^zV%RJ25!3QLwoGOZ+i%ph!qVFKY0cGf+ZjmoHO(t55!LvhxKU)4x>Nd97wCMpc) zCYO~UE0lRedAI#ou3JZ>WE?(>YE&)6j*uMb7%QEV;M@kv%K3(8B9@!GJaAD>#Uz z@jV?Pdqnv>4J^>fCyRtW%}&-`s^m6}zib%#A%&T=)vj^ce8gyexGW4yKfK5(uq;_G z*XIq#(R7%o|1NqM6QfZlPBHf^{bae_Z$;kqJ3IaS!c!6th>GAb;3xs@X1FFCj3r5B zhxI*F-TfT9MU*sOWhx%tW)_2fDL1%QwZz^0hnTNdc>$M_*JZ!VFA(e(7hBa{t z>|S;iLPZK!S%<8iO+zNwnHG$)a*mr!BZ+1Ev=uejftY&QctJ+76zvd@49pdiT||ml zXa-=3f7p5&6v&LKi>x%;yJ%}lv7gUW*ndztgh0QAzNDnTxh$Q8)r?jh@=7@>kjUb< zD|r%KH6NOnr!;9&9_GoRb|<m zMBGC)0Lf56XEu5C*xy@+Sg5%`Ln)o!`3c(Tt%uV^fYDt&xWk0r2CWD@9wbwFfsq_X z&BBiyu1ag9T(hkcbs}2RI)}i!fz*M|tFtg^{5<{j1+9`j-nXG&Ayzt!8UypvU9fM2 zDZtgF*nXhh)^NH1bB@Aqp_jevCCFg`Q@x46klYU}&nkJ6c3iY@cxHYr|JZb>W;pw` z_B^csAGIY@DprwS1~ylHu^!}f zp$n~pN|E6#G4HI=fav|e=h@_y)^{|xtd5 z8MX72yLu*3wyyqaZV=({i=czh_a}udV&pJW;k3LS&js`7{7$vDzhMl*FgfM~!~aZN z5o`A&*mS>_UGo))Z|`f3C-t3@?9{Rpa!lk|+@x*V@L=y}&3|2QxnYn7XKlk*FvqB_ z%AJCIH*Pd$H-DYQ{X1HXx?&UsL`q@-B1CPooW&II&v|z@9oc9Db7M`Z zH0%@ST3pq^{qEukYp_bVzMcVp8FmQ_Z?l9cr^2Z0_^r63iE{o@sbGIV$mFaO6$cBT z9zOEJvnE#ii7qslqZUJktsa-ptujqx!$()`^kq^ByhGpMVC!|WpbMabnR?b_@YQta zTCNS57bqPa9m;_uC?34|?Wj^06Z*|=rWM+~N0knR?GY$=T47F56Qx{o<$}!k0;vuT zV`lfIUlAIX9Y~pO2*`&W&?9*Zn*;JOQozF0#nP}K0yIdvE`lR);%`K||6hM86=I3t93DPI3nXa+NLhnH_|UM&C++h@bfmlGIZU{LFH; zGd$)v4z4mSA0k?Z!tk!;f<)WU)?F0F4krblw8os8Ck_X$?%p z&LEieue2i=WEz#>6XfCopow_U_H^)00?U(K3yy}6`1u7)n=MFPvff-4G93Vq? zh07*_>rNYBaM92w)|e-Kb;-*$zQZ0dlMv5k6QhNCKML5I?X0>RY=cSg%p$&06mx3! zq{QHFp^(z4bccEiheT)~qCO0Fcz>(K3AWgvmXBIJse2-y8z%jL22SL{pYkMkWx}l2 zQL8kxu@#JsJ(5g?C%?hOa*o*fz(a+u86?C}lB%1s%n>U5z=SiEQ-Ko#it|{mA^|{> z47+eqe)_#Lqz(~$Q{lU-q?)^AROsHFA(5UG^ae@#DFsa8AwF?3J2;>TAJ^jq+ne9R zSU#9dZ$v5&H#k+SIc$~iJqlQrrrVM0hC2Z!?V|_)mH&VaaG>5Yrb!AGIW^T4803pX zr365WdTzF2yY!F3mfuLQFAw>FoYq7J$8kI}DICLGPPP}+o`Wi-7H3wJm-CAMd4`eg zj7*7zGu#im@!6__jXL}o9JSdysEtN#OJ*Y~F@=Q#j%xxb1{ItD0Q1Sx0|H1Q2a+r} zdsn$>R2iBGF08I<{?LPopo;6ws`k^41Q5<01tvlp??9S|KnBdLdZ^^3jo44}b> ze&~`<YRa94Y1f;Ugy>G zy$yYhNdxVdbM$R5_+XZv=Q{U=T$)y}567IrwLQ%OKOjrb19Cz6QtvSmNp@+gLNt}f zOctV7`I)e)OE!m`8trV;s62T4C9&^DJr5K36weQ&1gJPYvn_agygHndD=vA^5ZVU| zfx_wVS_J(0z>Y)$GOkEo#tW%9Dm~5KyJuYbyZHG(lPa}=k)Fae43MPPNkvy;Ta$Og z2ERvVC2(l#=ReQGh#jzmb!Z3`@f+)hlb6kEbTx!{CuP9tx{$(nKrs}C8UVIFE0rwBKU7y#`3ptLmO5f7WEI=;v*{46ofv=eRnLvi z^P6?oQJ1@_hQ!uo%P;8@w%5MTU+(@byN62lkb!-iQB<#hcV^0090K3Z)O%!yN%7hP z+St1tao0f39+(dGN^I0XkANzMZv1Ze8VUhL?b5l@0R47RVkktkst`ujAK&Ef)C{E3 zu6JP|p$Zb;X;Q?qGQD*Y5@|t;!m|kt)s02F@J8-p7W>XS=V-+)CIFH^g65FB-c*M* z{N^62>OSDtjJK&-$oBN5ivh^0N<8wz`)(7I=XVTr-{!F(-OK@i^uOy;r-va=*)30T z99>_w{aSmXTkpq8S9g(IZ~!g3oPxBbLPH|^Jg8mQw9otYFt2Py`K|$B?2MT8(+eJe z;`kbCV7YGf6di}mMNe8sO1tnNCxuc<^JqCTLQINH4NC56!E*U;< zDDx*4epGD&H4!370;#iDJ0w6iZYY3Kw37)JkV$fJxU>Y@TIFHTt1Eiy*D$g ze(J7%8(`y&IQlhdlZv7?nJv-kFsh<%SuhHOVs;`REeZw34a=B!PSnfA0~ zFu(rmUTLnidY%xy$SXB^Rynnf1MIVv@Uu|o6+4MMCZsugV1J4W48W z50cEgc^k)(JK67ZD=M=9noQ}(e}mR?%8!zuA_9C?%};9C%g>KcW$c*ienV;`Ps<_P)d3#hGLdBItV(1I||gnF?L@_aZ4^5DNI!*!?+;YIb~XOdrvF=bFiL%3<3RWc_x{vLZh z7}o3uzzxd#6RZs5OpdS-H8>O7Xh)YNs22$qM3VfDlO*C`-b=S`G)Vl1f}fF{C^dv< z(wdG7&W*I&Kwg{d=fEEQ14$r5OGxMT5uQ9LUGh6bn6SMqV={iKNG6ihZMhB&2EdBe z0N&I~eidE3L3j<7@-7=JzC*g$eFYbjWQ}+V8txpbxVz(1-9IWLRFN$VsHW=AgYFbS zjF#S5|Chq+gzm+eM^N6&G8?nspGGBj`_7U#Zzyn*z#`R#og8TCuf0Q4b5E1*cJ1{I zKTYg;7`&S|GB_CRKJetI?MKw?`_A{dX)@u%jY=H{3;86;Y5+KvT|I}B3>GSRQVY%{deevIThbVpt>k!jbC{O1frnVCUZ*|#9##IP>fRK%5 zgKLULZ7ZsQ8N?!zueB6-A+d+L-u#y@J1c1BQKFs@*#3*(+L>l;tIxk0V-n7Y93JP&dd=FIEk^WWWJBky46Ghju6X0JF%7#R`c1KUY~hu_e$ zp&<594yr<-`D6&Lo95+xH2)f{s-0jX+6mo9o)!s$)2R@SJ1l-ZEu2RbRa$6S+jhl5 ztABoU#mtB}&}agzwo?%q;_D}b0cPL5A~B$n8t(OMAr@;rfmQ>1jF(zsYPjKF*I!{( z4aXeD7*LeFF{H}@8DXI_Qz>%qULxkBYAnFh4y|(?Z=Ed;aEY4WE>w-VOIW2^zeUFg zGvY5D*dEUbB}6w_j5qH7xaZp5Nj2riNg?b~(&m_9M(lm8cD3m;u>0whR$yXn{}@A@ zQZ|m=yfEepdr)6Zh7{<$jzg=P1!UR0ch&b%u!w8a(VTm8uQq4*&^8fl)v+I+_1~A2 zfnzL;KKQz~GQ<7;lWTn<1&vlmvTxF28>4wZtC-2x4e)nS+{p@Bec^mOkB>| zV5_IT*Ar;i=yXjzD{H*pOiFWgjRxb{XZZmi9FoSSmX-a=r5*sk>K3vj3XY+PSJ40lO%-4qtS~4lL<=Qh}HsDxn z@|v#3v6sv4g(^*j1?ribti#e@SF=DUs~Zv>_M0~r!KGC~l0}y(#-&5XFOSj8Qa4NRjSns?&nV2h>k5$Noy_8h}}EtdJE#GIx6L&;+`z+a{te}sqemN zE0SBQM(q;Tp)O+*+M6GR42{7BMv=M|PEcrUC)wfs?<)3~8G&~aU!sV@QDB7b1+7tF zZoMKo<>v0h68r+-Z7r^Q>nb}=O_$m3k!CQ)$|%ixqhM3bFP78|`JZGU+rs|p!IA!Y8M=F=aMG_?Qw4hs9{ranT_LLSsfKFOmIg=JU)5&hktEfBNP}}YekkNWKC4*LvkyuD$o^WRv+v-t%I-B;D#9<)QCkIs%UUU zC3;-47B>gb(S~b_4E_*%rI(iUHu_$s?dRG$-msJ^>Gm>$n4HCGH(%gnx2p)ZCK09X z5aSNk)`!bhbwiQ97fhQHwYWxHfq!8e_TRQ5qpa>BiMDmSUAp|b72i)LOQE+iNS7{M zY}B6Wr^{x10KSD;(S&hlQ3XL0HJ5J+m zNAia#UZ^fFz+WZly$e9YH`h7 zM-cw_+A_+T=Xvagc+!1sS#6!;Wu`%dX(%2#5g=Q5@e5m4uLdp=h9A`=d%G%nUXn44 zYZX@pLv^PFd0N=fH+I;e$|V=aBdit-bo#2v5>EL&?qS#`QfVd?1WO>hYBoiex~eUs zZNkTFN?PI5hy0~JUHa#D?VLf77EJ2j!{tiGK?URI=%^f?yXxRN#OezN{%#TUb3Yqo zH<*jQ=pL}&Nx57)BmI%qS+4VTOYjkU?BV$jP}}W2>_CSMo>-dtg^xYoZC5K2mJhU7^e6H-do- z6pfmHFRv8mm+lknx$*#a{%xwqg3o+foAteI_rucdBX4wm=dv^&Qn%eNwY2>xKe)<3 zS4J{4IyO++?0c|00?c4rkL!Vrm6M8SRwaw4ps{AU$>jaMOPrxG|5m9S{D@}}p}&G_+qL+y|fP#~2X6nh|Al3C&X}JIntb;A%m=+DzrZO}>OtqmVIO-a0`94n1 zCFHl)+JpZ?NbJs?)4t#i^^7v;-aALS_RuR&K5i$t_>Z_$N2pC&(v-O8n{x6NlzDK? zOu1aG+G$-zV({Fs%D=>d_BP5t$Jxv(`i4wr?yC0d)&joo_aJ`TdhSlE6^uJ)L@w?L z!c}Kk;JG(%C8Dg*6cYYRFpNaexR`SA4f>mO)2EvZIuX2vD$paXalJ9bW==JuYq+~_`SY7#~HGxIa98r1ZDnIyRRyTBb zO4#vj=Y!;fhhEaE^3Pt-I6_rotPR6pv&?fYrydz)NsUqdY&u`##T(&=r^6CQ!gT+U z)Ab)tb4VRgh`bl=Wf!9@>Y@}%dd02 z_MaE}Z>R99Gtx@KIHkXsK+QH`&8XtNSGrwpT|!JAd#p+L`q%5>iROXH?8t*xqx+`^vnTc7P4Dr2okkhX8y3^lUP*Hs4gf8Joc+2sJk_CivPbn&? zltg_|Ee-Vp#&4m*p5qY`?3AjuArLl;kdEAI;E`?16D;_ zWw5I7Yjz2T>(@oAJHi)z$Y$@O5Qt)YtD zxzqPPUjDPtzXDLSqY+^w- z9u>U~#u#Jx)f9HNG8262nkfzf?;+&2UqSt0Y#4}THsA;47E=S@`rfLqfG#Pk^32Q5 zadu#=H~hbW0vr+KNQM7*32p;mTv=DOz*Qm*`@fQqRszm$nM##0Mhmmj6Q^mI2>xiu zV7)F^uP;3q5+pzMqgp2T*%y4DYbl<#_9 zY)@i~vNgdr4mb9MXuETm+M5hFp0pX4vC+^kwP38+NR;6;58m)K=SjFb+B|$@-8_(#|TqLWDXM!#D z{iT#+ZtmfJ!NR+(W|8H}0Gg~-U0HBEKYRO#O5o>}a;tt*^9GfLf<@k8l;JpKT(RNv2J1RP(gV~uTC(_3;lz26b zxIrcA2q(C*BXP?9-sCSNLv;c2e6C;*0)*q_$}Sg#uX$eK(r0kxI+}$W3uW2wNo9|x zbxus-TSxV{SefoCX6p>48GxPEpi_soE4n=R+4MI!!}R&gvG0 zlFJz+EfXH|wKv=i0IG;lwBUhBgfXar8ODC6v}}33rTdp4rWX!!*B~**urQW6a2@4*u#l<3j0WsrO6PbmvVeF3n+U+VX zw_>F4{QKUyvyDy-NJCDkr0$(o;%!S*B_mwL!cEX?3&!Cg>7;_YMLJ0&cp!ms4&WJV z=dG%)%L{4##0Eou!F9Rzo;3Oll`(jjX^0V+32v$PGiC&p8VmGW7^DsM0vV(`WP8I_-hnwee&OtDqBu#hHU>Kv^lSb&U zvMc&F)L}LF&44MjsRalr|H6M@e5}DF(d9H3PQ-#0yy4n|aJ_{htu0+bOi18=eu25J zHURcdR^?QiX~E^uqKbYA;tpL5J1QF3w&nL@&E;k;!y|q^WuPOnzaX1hAzPAnl3#F; zt$sawbVbIVX4x70rkzi^DV%2P>B&vH%+kgMxbq;U6o%0nLw=1W&nM}x@1gcFZqvX{ zB;D~9raiVZ>W!jFKiz@|Zc=8ck~&qf_f>B9?A2}}Yfm0Bl&jPNr+fh607YZMX8qUb znO|_ht)Xg!_3@Mj%PE$~$rkLd8%P^`r; zH?>~fK;Kx_EAJk^`HM4$9q(PX+%N!H2?ca2quB&hF$i*79G!DxwvSt$>UO9*-JqJ7 zpTW&H!N^?khbQrv2dzfa{lXGHKR;mTFz&0-fn(Z{#V5+eSIrk~NY`_Cx{6t>F(F+e z3uxdWZJ)TO&+QiY*xsxCKyB8}(`y9>g)`Oj@Emr2?R=3X;yMZ24o$VSaK!{48X&6g z-r_2>B=*aFWtb&`%-Gs{{wwTIV~3j*nRdH0xm88C&ffVfsfuqqA>pUW+Ieanp44x3 zJ@VS*e^Qbs2Sn?xrWF)6Y+wn$0n#V#mhpYk_W0VYf*h!op<2ysa*+GhuZCg){^^rU z0!p1G6_^5wRoSr9-UY7V_*&+T*hq~X(JcrS(zN?iBku=?PJ=VL_x#QSr+;Wh1OE9? z$WRi#GEKZP`kXmqMF`deM?KlU7!IndX7rXao<^T5*^Stt-92i68kG_69z4sRA|Ng4n^t(s5L=h6>VDqEXuj>9S*f`mdkHjs#;iGZGG6r zLx$)uh4vFy2PSpjUJUx$SQ&i%RaSLMrJgDg)VHvF_Vj{@RH1}IiymTcMNAU`_S`Y_ z`NJ$v5o5tA5*!hi6!A91%x{qHnplvrklRlL*%08zG2Wk42|I;qR)A*8%3fE`X7+0H zP8`IOrq`#NYs0n=S_H~afchVi8hE-AUak(adc6i5Ix^R5dvj(9K@7L4bhvEtIoSIN zSZ}>$`;a_tYTpIUSqoy-{Ox$U(UouBqmo~r{iO12*M=UP*0#TIIvemn3ct^gvSix0 zf6Bz{&hE1ld4pAngXV~M&F75%xfWj(D4kMWf2!gNm8EIk&tDim=vbAM=aVGO{8 z(JLS7x`qZ!D$XeAu8u~X0Jcprj{T52{t|a6P*r2_eie2<+~>NiPTt9W_@E)UI%7?A zBWd3S9C{@>3^F?19=Q0W2&cB~9wb{JXkFN@{=u&I+39QBs$MQ`{ ztPHwsb}ey?{M5$j@+$$;m2v^U0K!t4*jPrgC)&fZMEQoWO1476X512+tA#U2+sk;p z&$?}sf#>P31~6tSxEay6&D}1Uf3qsrOmt!3Y_t&w-$i2$Pxg0-30=f6@1tc1NTpOt z<<{Y9T|`OHN==_<%iCIG0VBpYxoV1m=ajOkpDaGIBL0@v4~Nb~Hrg8ny(H6_T;Oc_ zL<1H5PkkY`aA49;h?CmpB_YlClSF> zU{AyN9nq-z*Js5zAJfb-mtN0&Abe`agV>#9Y4zngQ;qHk>9-F{-dktLQ|K1vLlmv^ z-Ra5(Bsv5Gx{O6AlL5-y&tqT^4hwy*H833uKE76PhLaDUE7BFzPb-w0qOgKL1+n#a z7;6!RfVXaIpoWE|y+NQT<$3l8hUow;{Pu#>Tx;NqGIRbR=VuIpSRljzpbMa?3Nb}U z1CSVffmc<@GQ3c_2_7Q*z95rKFA7B9u+*^4LI4B%Jh9dU-ykvM#k>hEF>Kiyvt zxi#Wfg0ls5LC`P33VGOVTkDg|@~tIUlg4}#Lt~02n^>{}rpS;6Z)uyWs_`6!?V~WT za#pH5{u_Y=G7qCA?=jP*FvEFZ<5~ue1$C>B|MX4b)J$=vIwF6$)Xo?Q2msl!`X=ic z&TK~T6%DO=P`2z2t$OrTI_SiMp&fpz;_tB*!A-MT!@tq@tdgB8slxo%7B=$OiMaO2fJNFO{d{-0F42&vr(o zx{z*+F({QW(v&fjgUVOAfaGaEa>z%Or~WCAWvXoL$RQOF0xCwY!fT3MoPluXt}&)} zz+alC+n)mYeww7$jf4&M&GhX|$jaC)SF${SnfPBB$ZT|)!)3{lVHZ)+8u;2^{?lt0k{-S?D@jK=a+T?DAHj$!P;$mjH)d^1yS@A>G~ z$H^1cg(n{+4IM95vNr1fF*e$jvy$0ZF=(;H*hVMobDK}_ZPQ!dTQ4>N9tKrZy*z>)#L(ci-8V%wsoTWh6XGK%&%7Ya7~AY*BY^1w#kz zRT;tFmec;Kd%xZyAuS37SHF{)S5`7Gi#~8WeCI=faZ-j}t%aH0=K5TRzk-IA`#L8$ zf90Ix5vv&bsF#$o@!ql-w6>cIK%U~Q1(dK1YM**Ct5w)7tWSIY`Xjw5}EBsDSb7t*E@|BdP*ebpK7FK7BFBG%TD!$bNbH~1ESYc;#HBvUR zu$b#$?_Y4wiH{3C z_lM_=W2v8p^F7G@tqPu>4n;#{QFxrH*Io|$shswI$5))a7N}#AzN8Khj28e1amTCt z99P)gzqPCEfR5LMhsv?B-Kmom@~}$v_>EnaHqAtsYC_YptXFVzP}JKLf1~7 z(6E7F@=^XzQC0`o*@-z(T0%k;IEKDo2ua@hLjfGzQwQI}d~+vW5>{NIwU3 zxBt8K_@QF#0s!s&cTKKXGHC4gE7>MkcSC}xM6(fh#GwKs7WFT@tVAJj0EB0W^`|KR zCGe7Co;wh1_j~DexfNlFpOPKkKdY`vuk9*GOd|n}QUYnqjY&x1hI>ILl%jqst}xoo zdV9_70eL5tA?^Hq-79H0BhLetke!=Xq1GCNxSARUQKMm^*<)s?uw-$EmnaAz<7X@) zm-FR~Ic$iw=(+l3{1ujd)OHWjkVle3;TSmSfX#E; zqaOOaD6oW4X35)o)^E&4JU8A;obkd;`~5quBqGb+{^|c|*2$`h=l>XqJw*NbpH(;= z{*4!-@(&5ByD|d*ZqANB%3zv#!t>2ot+4atefmk5d_59F;h%MP@p%JGKW;_k3Sr!h zOF>B=WT4~^-6x+su@(Job%)~rVe3AlnoI+KU5E4rB-GGDuWCR_0Fi{=4NZ!op;s|f zDV7v^GxQ>AK%}aKB7z_jiWEf+sECS66R{2|DvXXfarQpv{P$Y>JBu%@^@cp}@40TH zuzeT)qg~I5cNIPLetUn?@C0xgyNzv`74FpcXE7Zpm#xAsa1gz)cAv}sJu%mJ62!Gk zRl0b~tIZqpJy8$6lD|H1p4B#beCNDtHU8rM_@GABq|4V{{T0x~$#04(ay0dwt%1z+ ze|9!V)zb_Cy?&)cVl4Tj&J65zGKkcJe9`HTaeL6}{pMtuPCH45VAgTLJrf^i9gvq% z5j1EPb3RjRAllsF{)O)0@}!9`S?-Nasg2zY$ZtpGUM~pVxoNb0xNBu28!1rP^Tb(s zsA;+)-*xy@ptfK^A{+SR*1tV_)W4+{JBWSx3DEj>J}ivHxE;@rw;L<^Eb(o+{C;X^o749A|!Nkk~l1 zI3&V+Nokj-+?0}GKuvS8o2C)MhwCd14?l8WPDAD-bw#Q4_{7_m@&oRv__Ugo=sj(V2Mfvqq^i0zRAnsN zoh~bc)@;q5RRYGw2Kh%V=gNS>v33{L4R6?a+V1vz&y8_rP^2_P^P%#U>2^?s98dj~ zU|+^JC43@X@7gH}DH!IP8s&Q4_5I7hXUgj~Rrt(r(AI}?ky$2C-m>1evVc9`GF~}` zVIFndOdi1-CJ1<&;uwF!mKcBeudXj8+n>pFAIGU&S5Qb?6Z)D%8TCpEH14v5_wT3j z_R(~J#GAp)oArw)d`yPQuf+3DyuBAihdpK|PQ_fy4AXhB$?#AJDpwE{*LdZ22=(Zj zZTO=r81MM{f65eIlH(+g8(kcCcsiI4Z*<3>0DtL~72ZFczjfQURV#+=^Dq=0Q+;WIcP5yPPrH>8D0Og z=;52-@crI#ppkLkE3}XV`#CzTBi)w7F5OaYk*N-lsnbumW7yMV=zvZB^`%hDl=sM3 zaRA$6a1O-Xeg7H-&41HOECpD zmHB~bB^&Jd^9VO)t%CEu?p-CP?h*>rSrTAXJ+yC9YgJq z%^~t`bwc8+2`J`)8^bNp_kfn8#2?hh*#>IE^h=?J z{OkGwJ@53zyj_NY12&Qcd~jU&2;3nG=twlxTyPFU9l|@wP!}ileygJbTMbKMPtK;2 zW1S=}tSxIjoygN^fS>VRSbAo0QT6ZU1WcQawES}!-9uzGD#l5rb5Y^=wCeEsEl@gn z)S`|l=Xhdj)5hjTuFuShK*EH?!Xi%!UzkC~4ki*#Lw>TQsejVkW3ngd49R3wECrkwpI=PJ_alrX}apN_(%Y@eWx9J?qs2+&0WM-C54F zrjGb;AnL~~BP#Fl?pB*?erw?baqk&?{M7sJF;A^npOBfv?A>UQti8s|;x_@=5>Bf* z8yn{Ll#k@e)GrBp)12o=Yit_C&u=6Mak-F`&%*DVU=2`%pI<95KSezu&nyh(u|3+< z%gNfK)3Apmke8_NRbH!Y_%)3eQ!1|y2w^7$n&`PXPJWQ%=e)V%isxd&;HMqe4^X6a<{9&2OF3NM8J zcw!}cNA>O9wC5(3f7kkyK2V>~t^Xspu3S9B8O3S6u-L>6s|IY3ipLyd?2cMSY12blT^W~ z8$dyv*KqLJT)P!Xl?%9GPC}i)7G+8@nlvvuox3>vW?=bl#d$u>^XlS>U2h~T&Gy=U z#~4+I0S!akISTu$lE$7S6<0!3wG(At(}dID2W$TJZ}ff3_C!RupqHH{6reS<*W0FMF^gQ%(d0nn4=_)1g7d$ZQ3E(62q(0{&KO#1pE4WX_) z=qNYne}br4V;K`$8E9;#Hzihl6ZGK?@LG;Y_$K(@H+w1%s#cl>1e3BZ+;FR9q$3QW zemqDI1wFZ$^q zm8hycw?!gEmz^kPs5Uyx5f9D2j4C3yt|Ui%f?^MCLX7DmA#YA;(^B0D@nSz{l~c}d zt51(fN~=SOKynDGzwoOpHh?2+ShLKa$-YbAA#DjydK4I2e704314bu1$RFDZ9Wx{9 znPSur`c`xo8+@nlmklACNd{n`ADl2BaL~s@M^r?7IQ8T}E2f~qZ$0PK*k0j10L0FO z#P76}It)0cEB_;uh7np(91so@FX|12z;YfqVQ))7jW_@uUbuh`MAE^Vtul9#k1%zt zPrdf=&x4#hVf~v31E-)xCTx9#>?kRz>2a*Nz~o4QIwOcGg5CsJ@J>IA5b@rGIBH4+ z)4{?cA|PHk6D$=Taw7q5f2;2Qxuqm&Y^0{@)-_7jbS57w&!U{jnB==Z^hE=EVY0$5 z`NKnj{g~|5G&Bk1&Wo|$0eJJys4a_7*%hw303&|24yIB?4$8YNZIGt7ColP8X-#et zL$1bUUl^6fmkq@qZ=`_?$=>SUm@_@)R}MzaCqm5Nh3=G6EEy=ELIN>R<$U16m(vIi zzz73P){z}#5d84DPHUEs4J>E_6GBbm<+-yS%JTB5I;WQWI~C6 zU$FfI8{q3KIa>mnJ)fkC^9N}WnI=zl%$mri7enbTBv=a<&i^6q@E)e_X(IA$;O6qNYYw1$ zHQ?UdRD^V%vz@U&=E6}~C<0Td!;>FEDk;GkqPMxPrKPH}S?iM~NMbtBhgyAoU6?Me z+`lZ5N|&S24V(x7QB`P$UgfE_3b%lBUHK}g2^iJ^s;L?5<7M6Ht@!CRQ49+Sq9Olc zBO?j*EDmZ&sM79r%cKT>gam{w{Z}d81iq-gEUXmoBSE?xKr*yc7Y-yG0~Cge5Az)+ zG8Dyfa4%!d;MxGaa?q>7iW8yItXanHb_irHkz4A6uW_N!El7ChEMI661$=Cdd&l`w zd}(!603?V2>DfB%E6kWuSQ0ff?H|FvZKbG>Y=ZF+FAOwLrsuW51baN(Y{cA&CbG+q z--9)TlIRDYd=`(QfIGa2N9~;wu(5xF#BA@tX2|D&UT+u3LAHq-YL~JG_9_Az%6Gi# z++#9g5Y2}L+ek z5xP^5{cLdkXt^~#l`3_^J7k|S_N+-E*oF>Lt*x-ZT+v?E0jf&p^Uti?OB*!pbM=hPiU?&6vogRc+|3b#kAA97VHo(no6?MLD%D{08}vKK?h(82sNU%c=9i)Hym2fhn0YCc#;KBtHP@gT$ z=m%e>AC&RcwVs#;H54Hm{_@2TJt^03j!fG&-ihhJ9M$K7kbUKfSPMstD;xIdl7g(U zN_ZT0J>OoJtc!{U3#ZL)4*qdGDA{=L?i}+;Hw-!e%A6+z0J=%lv4_5e-ZsFRDwN%~ z?1^69mA1~<4BxNOrCi@uBRiG8|4!Zu|WRD{IxoJiHV)vuY>3fBc^q3aE^$xlmloMyv5gGr_Hus*_!rNt)pW%T58nlIttOkHV&Hin|c2-9~ z!KqW91K1_0;5T6`A^KKpNheN_s!>&)UAH!yP=O0 z4+&z;0#YpW2#cUDr;_o8 zivBTIDWF@MqOUkYcJ=W%1>HgcM{>Yzn}MWWWu0*w;;^#$l~V=q^t$ZKrPO|Rki7t~ zHdPMEy@EM_zlG$mu0^*zxGMcX?V+ljHO45wChxBw3fA%L=x(84%og1eq=JSwMOQGQ z=V%~%4$5Z=bw(XNw0WY93emhOCwckEKkqRImcXiJ`H(0ACY%CZvvO82y&x`qcJUCVSq3+v}RcMmjk$|~_ffAp3b10-%P6KclAoi3X zN~0w_5XOI&RvkGggfU7t0uHRmZGXaQ7XXh`IXo02UkqtYi~0dMoBPh}yNAXt$)(xY zy47m87uDV~6&|(Hqu|_%K8j*dma3{7U_=YUu?pjo7?L`CC49wtz!!3E`eROunx zU&LKUNvRbj!E#fYRp)&ZLdX(AA6AMwI<=sO&#BQrc<+LJtTal-IB}^W0Oehxz>5C( zZipFPq+lM$xuOJe^tgA%0lnjusvBNxKYVf*(r9ApvQG zbz!X(>Dp%{wp{1q-7HP{+lBl77Z5vTDFkAvQL}b`fLN4K5q!fGz5AoYW@(!C zaYnCcokSKeRNA*gvN_7^W2j7+hd9!#L^KNx6$zp+5~bO|mP8PRYICagd7_r(N=T@d zIae`7P?Totas4vuzW@5U<1Wtm`Qf~2ElI^|dA8NT%pF#N4tP2I*zLfu=(BY(9nU#U zb2nECRk*h~g*v~W^{CmV{e*X<=KDbO;M{9H9awDbD=0GLTn;YKn&PV! zsFWQ&a_44W80*J+FPogxSU7eBI@2-eVQX;u=l)-cl8T?X~9Azw!^n77d@zdu2VmnXNP4>11wBO{tJ-gP6a~to`|Ld)rJ8QSkSHuVnGUwNMb! z*+H=1BKiRIdN~K^t4#qtng;xZ;YpOxn30C}fxBMwV2zq)@p!jx+V-eUS9tC-@|d`w zAI&h=!u);IdmJ_m~htBnuFjU3nCW=N!cVM%ZEkYMD> zi};1hgE&X1P97QX3dd4;%r_wMo|8WHNmzv}TV3iFk-I~=VKsjhUG~(@Y`C;o9T<#V z@n6#{;%B-33h`qbj^bS;iUt}O>_d0XxqnCmj~XtCc;o8Dx%NGJbmY+sVFw3izDQpM z0}ui@NTM&q75dE66&RfFN*(RdeL*^^rvoB@ma9v#<#yG8N#oIFq_h-S>ZyRzq~FQ` zIz)ZI9n&9G$>}omY^5jfOLE@po?|p9)qpgPdK%Nd$*P*ABf}PI|Ej4yP!~0l5WO>+ z@JJe_9a#+HS(uE&Q-lMgb#Q^mf{b?ds$ys)6P92XgB4Wxf<`pjFMi z3I%EW))#i`vItaksQkX4$V2eHp+=M`W(-H?3#C~GO8@{W{szF*4O-wdzMU*zavu2B z{>r{b&YXTy>(j6XBJAC*IvV54N!tH!<==Rhrz$B` z-XQ&C3fi8^j4s?fyL~yA1^wkXO#G=mnD<8Osx-AQ?omMd)V%qvHYqm!`P~^cN|@T{ zXo5;!1KR3M|D#|g(ud+#Z$Q53K$?{SO*>+W6)skGeRKd(rdcyN5Xu z0kI4G_$hY7GAFy`+3N>^&ULt6ys?N5XUZS)g2$`);7exMe9{}6{7$M1dlCH1$8c2Z z0#-DD#zj2)B*bd}f2-E?k5xN*#`p!Rb;;^Fz%UoB%>_V_DcSnV zFF~}8vnU(@WQv#28%J#Z^4|N6+2Y zl5fHkB|tdW)Om$G-LZwT_do|0qKcM_^#U?X?eKTDKoBs>5YtVrDS11fqL z7NU=DZ_Or*DcPN<*3Tn?wUc$|bbpp_)1%MTrEERut2ln3Hg`NDWT{jjMm(3s0$& z_3TCo$2if!bji)L2ylU9jc6++uPvZ3+}wDlu|9F&@+!X|3(5LE(r(aNo#}j5+sR}# zK;Bdp#N^fOgyy&H%F^$*KQX{a@-j8*8F|+x;;~7l@wGJnUy@hDOQFUK zXe^{)6`?^+tm{M1HD1MyN3B+btX6oCckOxsUEo&Gl}3nLbo-U zSF9~-K)~G!_ig|U!T@MK*J!(Kw*hO2B2D6np0)uEqCu)8oyD2UiHP2Uy2<)ytWVwr zjQ7Kl3YG36lmn$DmKC6mW$U9GIg$NE58q`+r9p2KSz3JXktK*bm$5gkF-bD}X1l26 zl${VmCKwwIMu~cj)2nOuD{%p+sGfx{O_IJa7D7-wTqe?#(C^WEDGYmY z`SX>y5Bi$tFA6`lZu|qoafCW&hfyoTyoU97G+&L+BDXR+rV6cUowZ)O?2&i8+c6~A zUBle6fFCLvIE=Q?U;}6FbXnNnJc9wP$%732Ei;XsX75by9m&^TntYUTQ=1Fy)CXz# z1Ft6CbV@1tp*Yx62+Z!qis^c51QZVJ6*H(A#Lh`vb3>i&Kx$1*t;JmH$m`T^WxS2) z^t;OVOIRbT@-9A@ zQtjL3z8>|Poz|I4JBaMAwspOxslb}qtc&x{dXv@EY1mS)lT*LsRnN7<`Q!<#cx)rv zDnHx8MnJ)y`r(W40;4HR(QV0pzM`xj%NoL!%kRmGRTO;r$8WQ%kC9)vt-;z$VH|e67UkwhW=3Q){N-t2a^-&%pr6$y^9Pf z4nSc+TDX3<3ey7v=j}H}!r8jod{+22*@M*4yMa?s!a;7I13cb!IYq>v{`x$77Di;~ z@Y)#Bly;t7Si(H2tzt~+LYIAI=XLfjRqu~@R`^e%5byo{_2GYbFIe|Bg7BhkvE%I0 zfWjSL^*5M`^la8nZE?zHLlTZo!b~)(OkWyQT9*0SYy6SOA_02!7N&%1M z-}%0=aC-lZ{fwu&|0(M9bw^Vgi2Fs={M+?2G@ufVF4iDUxoY) zYo@Wzz(pe$t;{z&5H;wnfGTHJOX0J zWEwD`Rg~)=;Qn(p%bsn^Ez_ck(A6HDB_%yJIR2R+tpKe``NLi#MeY|;7U*uKx6uRreUe2afQ z=ns5ngXcef^5SDy&jRp#rYYG-N~UbU&HZq*b41_W*W~?q5d*hlH6D|Ky)~!IwP{QZ zTz!-1h3Vpmlzm>S4HD6(*A*kU`#*3m-?2;YMH*wI&|H9M*h?e02#UKO5ONn8fwDLp zF^D5tZY%koTui$E;*wgP6))_cab`u^RXuuOwH!y_UtT52y>54xEi+!b|9-_Y!2R_v zvh`iAtRp%G1etHK?&*f`ViQzs`U)(Ko^Eeg69JIr6I$7I-wgwWM@)zT6Gd`+_U8Vw z-_NXSZLcd5hzl+h>BED>;>?njE&Ou2%+tkwP_(_L(?I{R(s}#<=z12l(ZQnVF460; zx%3@G?AvqSV;X=7k*69a-$}pk8g^W~g(B;*a?oW%FP*5r-@Gs8P%p%W#U8|BYq<`n zu|{BssFYqSvn6Erk;g|YE#iWTJ4c#hPd+Q=b6-8YRVbeTl=l}=;tr8MGo)z@Ltg2v zH0u4XqgRhm-Cs)B4TsDeX_coJ(!Y_8w=D=Nhf!KJ(cT%gXNU(l8_zoiKrb1W_x+CT zh|-F1u4>hZdj8!|_=fHuO69?%sKLD2jGMgO^)h-ykfP#D+lyzgl@(Yr$+O|p%9kLY zazspMXr7T*PgHT#TbrI4pf1UM&Lgsx``qv)s2}&%wC?zD56H;j!}s}W^VU{w;N6#9 zvAr9*!nLsxpP}J@p<}5`>*@=LUl^i#VB(A7dy|Rta9}?YuR4Kv^#Y*)_tx3DBvE%Y z>>l$s@lyYL1i`>*?M~r(U&9MX!p(=Mjy9srb*#n@bI`6t<4>yXwVTh%%6WBPhWoyJ zRaYLl;HYtIEh0K>udm+K_F{?1O`{*0Q&mYIOP(C@^D#$X5qMZh` zEd^PUK*vnKS_>}hn_}7JW!W6a+P9s%UuVlkc8gq{W%Gk|W(s7Tw&g_0a?swg`5R;h z+wxG6HlwljQ?fj(3(l}vcDQeLODMBVmJ{jQKEO9iT#EfB3m1{%cOYwkoqXU;3Rk+; zc+#XaI>}NSRCSl#`@y}`oFJ_Bg`5GNewt)V9XQhR9XT=)JDFO0csl0I_rV(Hk2+JH zCK9w)Q}Jd$3`D*pO@8>F<3^&eTmS6;-mSOIJ)!&u;Z?IY5Okx*yT=zNPMJbc*e5_) zl6TwV4%@%#snq33Cna&^ey8;7R~!xYNZXg$t|R10nZVMK=)O-b+ChYURMI76B?hfb z)meRbZ8^t(qScCpEv#=#K2c)6n0QxKmU)W4^JQ!lq;#~8qFl@lRW?_OtSY)fo2lJf z4!QYT`>Tq3WnXl+meuTZrS4%~#jm;WJLRK8<*38LwRw3h<-!LCA{36sIf88l;zNz9 zHs+G71*Q9gc1Fv6+UeMuY-Hu0u6yMZ%!rRkI#EmgBQNCPn#boBmdC9lHOAZxO!*Tz zigDCsyc~`DnsZX@e8o6IAC8@{4)4dLQBgsjVM0?+q=ntZfxh}I{=C)PF=e&=jRHR_=z zgaz8_{*T;c@LB!F&q|8=qowxgUdXJqgC|WsLqt8qQtc}e^jhR%NNl|S#Y{H4C{))T>&n;=wsrFm{3e8 zY5AzC%L4Q^Wi-Syr&-@T>RPjqQ}L2%@R-HQrS0HzD0Azv&#gl%dc@75*dlgDI}5h? z5~1ua7(O0cn61EASdQZNm^M7(bm*7#LAZxc1ISN2*^o1RDkLFG>Ej1h zNr?-!=fM81t%7xLvGypx3f6+}{KIG4G z=@9f#mGOjV--Y<+UBwAtGuKzU40pKZr6Y09hm1>)yhk&-UXtz{uX#8N-ci<;jO=av zDBa^NQK(G%aMyv;_t@CbN!;kd&mU*4x9laXD?Wp7dH>=(wGCXugA;Amc(*0xyEOKb zUzN|{;`nGe5s+mCHNf)z64-!?z+~H$-?ou3$cC(ly<_6QCw^cxmh(llNiK2(Ugd5Y zM)i->Dill=504;ia3m4=rJ+iHLZsLnhd<{h)3Fn)ve1ep2!^Y~T^6ZmB1$+;58GQG zlz(!2?wO(2(m) zR>rh#j=ux)FzJpp!LPkccP(4kQb`=AD^B4*XG+RdwmqXHY zu#Wnf$C6poubW!dHBVsXu3d*{Yp8;aNj0|D08A)c1Rcm7#mEytk!5>qIvUO@s_h(b zS-V7qftY4t8lt!`h9m8>Zxv_BtC}E%p?N-0I;dfsdJydFK6*&5o(Flrzlv=1gzJ!n z%508Eju>TCh{XI=-G}fay|9%lXsh_}!dT@}KN-_M;*Bd}h|)x|I-45pw3uLj%vf!6 z*@9Y=XE21(#q$}Y`pQy7(xD>ZD1WCh0-OObni0WW(eyO9Iu*4&PPlaR5o2x5o#OCaw>R>-X(06vrANb}m=Xss?>_L)mp-KV@%Tq6twu{)VQk+#$zjr~ z!zRJQ_EvcgS2jl(LzIi&?<6sCRMxY@%TTkWgYk6ZnZNC%3dC3*!4pg1AI1$D%P9v= zV~rjZ!Pih3vG9Ef-N8BzP$%_vG0mA^F%mwG`Vrv3G>AEr^NA7nHltN>KBLQWU-oEF z8c216l>G;q&Pubzac|tnr`(?;8fqMR2WP2NfndMWV-Ld~H=F6AckgRnk~HpzrR*xQ z59a{Ym1p5L;|#%}th90U-_)#a(;fU=I_d#^ycyN#r>%48{a;M>>vIz(D2#VwwQTb| z%v-}kew@R)Ka*qpH%a=~r_m(%Y@Yd(o%^B)nF#;``fTf|*qQs&xDrx+VuiZ6BYq4^ zpDhX6Dwr7V?s{GDjbigj=8hG@NOg#`sDKCe z5n>lvG=?p&iC%<@@0`fGEtHN26^<_NvXOQ{A7^oJ=R97EN;S=vgwgI=uahRLF1nc( zz9hSY1ScWp^<8#37A(ci4KZ6~sgDJwKXt<>qf!P9P_>pFap(PG5+4pHFmZEYVz<)U z1DM?kFM6dHf2mqjkRJmy8r}`GERcqEwrvgMH z;g3}<{>@d>xUm6a*j!ZiYV0?jxtNOup#vMj*r0(8}lcmubaO;8b4CYG?4f9bwi;Ral78Ls#bl?8m_MF z)@(R~V@N(HI4r@l(22CsYk3Te@9AB}8IY$EM|4Kzimv8ZWa0jP#CSW*r@}tofx!{; zPJ&e?jdiNy#4X7?qu3%gobF4*Z|(l&Di@{3FSxk%!#+hdtqD7{H#6#b;5{6C_gqtZcxN>Xu%{>?7b!Z zPykH($MK;QO&2=)4I8x>0jnoMka8|YWPd+lWGAexjgn<#%gpJzV6#JW=?nV{;gQaqSbuB*nOs8lQ zDfdligCFQG!xKpd!S4NWq%r6!*8gCLvL_{b5g_ynkY?AjgZkCV1UYtejB&^|auXo_ zfu8Qj$=O;$o6w-BhTXAaYUvYEww{pGZFm(uH41e zu%)UMr8XG9PhdW17OOL5$;E2t!hDAIg&(6UP%>-z*BFt5B-Q_XSn%E)@8Eu4pzj%YpOcX`k>wBw&_-B z%E3ga9u@r+BmNu%5w26&+UfDz`BZpb1HdW z28b=734i_#mU#kY2i~3JTSeq*S7^n=1wiB9qC;T|;A_U_2O8dFIhz5Emp4NT;G;&c~Su^Me7lDNUkww{Z7RAXyy z4mIr;orn~2!=M3fB8{|*E7%D;QhP|$h$Qq4?H2y?4cTE0mr4&V0|Xf8@vW>rZ1zZ5 z0#roRJl!xAf9#G3*ntKz!a_E1;8)*D6zv$et{Bh_yLyx&5aa z%J;k7ub`)3p*xSPA-chF5RG5S3D?uWa0kqi?3uq?Jzho>nr=q_8a@5_4MyxHc5{LF zDNFI=Jb12#Z4y{3!!Xs&kO|ooKX6Cku?XxQ03AoS%GVL?q8+Q~Q7LEXN``=QsOU~Q zA;bwe!9(-cRM*~t zg9o^#fsvqd)cmi!y8rDNQd2KxK_c;iHebPUD|TrK@I3lC9}+B&eJ$mLUr(#nnnmGO zA})Xyk&0IeU&}Gga5e;q|al&I0noC8rml1NeVsBRZrhL}Itx~!KCgHhtihfj3 z1`j%>4at{)D7d<iT1?|12a=T(lwLhK2UAYSfWABYewTr^Vs zv_ds;mS62o85q%ibQ$|AS|gMTUcf5!fIz>1N`tHT$yu5U2Piwe$CLvM;pe7yc)Z=> zgf1!fJ(Tg`6=R*0`6K-m*naqwM=<6x$Z$Xl1kUCoY24!^;k&AC@L-CjxCB9rdA@>% zNaO8V7=YK)p_v`k!j$|6qumUfJ)tDn5o*)&V@NU^tZR5vSVdp}OCk(!1}h9EmqHBb zpf2H-hC5WDPet^KuXELJwPxSLfI~J30Y5TAsisi^gz!Nw_LV9cM*D+UAIU}6PM(no zGjzPI<{AKtn}D~RfL3k7a|y7;FT;;<`NYW1-yL{B5jF%b0ssKisTT#pFV<|pdEJXC zs%enqE0-`rRNUK8y<{U^#t9*h`-wutEbZL3oFPxvBgX2-5cB}&ua&nvLBzp zt2n^-?SBcS@%RP1{Ssqa8K=TUIy1k6BYI#!RS1F&5Pnq;!9xwX;{d$Ke3-`X5u**- zFo9r4sz?)ibZf*28XKy)Fo1YR5I%H9Lmb70|4_Bco@0_UkP^AL((Z4EK;e8y3R5<2tUnx0|h%Ye&OCZu@AAoi^> z#@QAU@VL*1mphat!$hT}iVT1Z`$4MEvnO?egQY;-fh_dmxoNYnmjSL z#6$wpF_mSH3WW$+IUf$0=8G+GEP$RRnvqUVb~1@+qZ=KG^GjE``Y@NLtoh4Y%aCM) z_uz0oIE5Y7l3%so>iYa+ypgM#PxK)H`|)En5d;x^qX|C!$YPBiC*0twqg* zR>xTqEF}kOW*bBLV5jy}qQH-rDF+Fr0ug8cadRBT<{|J85h9M{hpc=&LQb8(=79Ir z5zRUXFH9qakj_=QL}XpfNsI=2aN0IW;F}dKGl(_9g}Cs-Rj&oK zUQoQ3?-DVxC=s|BZlET4W?`=NU*7q29-;^^_Xy+3?G$!gw^iZgbhTZK^H(WikC&kE zBybm1Y#IX|=)w=af$qIrzAsv|=E?a&%*n=oCi)td#4evq!X7z7MWo9@ zVeECW5s#=~>G=`x=Mi^E@PqY7G*=GL;vaF6aK*79xphUUM4$0|hU~|`-zONmueeLu zR9^Y(a^ns4fr<`nl_hq!OR#_q{qhS-!l3R^VHcs4BH-D|RaaJ{A;qTc{jb=IH^q<;%=DZx zq;!aP?Ec@0^p7#ir|^a(X>=O_qYkmH6?P7YteEnH#*r?gTLL!9{0?G^BR2CfhatUi z^n=|iRcWH+Iq{2&AKS0RrouB9?ykry85PZ?29NhF;M6Rgh$G_wI^cjJNPKbXnO!@x z{~)dFze!?^&rT$w9m7IH zQRi%l5AmLx;NyIuu?zOu1ZONpIFlqiyI_fN9oH%#K|w=RD%)q*zJGI`NA6n5&@g@iAaF^T$R|Quk7p*0?rd0eepl9diR#n=bc%1D- z@ChQ%@t%~@c8LW(E3xvVfR<+Vc;asW4A)g;m=x|WTmMa}4HE^EKkO8NlGcvI zlrU^w=kpl;9CR2QyX;h^>3+ekc20dHOJJuarLJ{%NTJ>nVjkLD zEg#Ge*aHlyPG|~NM;gZin(HI_F({Pj8n*;*wg%WDS`~GzOV3yE$K)cN44HjN0mUw2 z#5+-N(No#1(W7QXvCLBCcf>KS+B0rbvC##BY|!j|_a6ni&G+6npPATIZIO>HvjKwL zFk?2m?35eUhPIiP`m-jS#?KBmYpUnrsd>N#16sfNo7{sgQ=EyDUX4&Z6$3X?C~76+ znfG~4y?eQs4#B0iPHI$4RSjnaRp8JFgcmy)O>sDk9Pv<2#3*pZEC?7lLy-6#{fV$K z_8!^en7DFrU(SU8TSFqV==#4ar=yNvjN^_p7RC@pKR5eqBJ}Q@x!IVb)?@>JfA8V1 zT%;!Z(e7kzqFSqA>ochHvB`a2it)KqaNFk6?!0MB9yVn4`1MIVty=wLUqfXOa{+-e zraeEN-qS!>kCH{M2~P5UAAreL}F*Xk-jwWZ^LU?snQ5lA1hLtcg_ zYwrS2Ah($|so%R|VVKOo6cg^Yp6~mfbHL{uKT)Hm>R0@v7@foWQ^655p7}?e4kKX=P7kacMc){P?CxU6|NTzv_huoMfP)lWk&VDx)HOT>wM4FAw@Q4^U|L&T5aBI{PfQl%7=&L`v_qkz zkt5*i2CS=6_mj7Bisa)IK4QnXTs01Vvj?9W1=5!dEErbUmnq}0oK9jY%4%YNo-mBl zRl7uEZz%!g=SRSj&aV|H4Nk$GKszwu^DFpj$|;HKzZgjon#9uExWmq~!FGBW8DbBA z<~0PhngU+17u^OEbQQ9q*zYnJ5F-W`<6-9?8DXq(Mr#W0JcL}Djo=s+Cu6p@z4aPA z$GtY_sT&?<;vdyDJ30#8z5PQFnDbV#;a;ABhwHORQ5W`n$&|5olm=;>$~6+0Za#AN zLdX(&PFTfl<-h_z?on0xYiJ^$YiBM|y)B0SG&#`)cf^|%yQ44a@Rd%zO8b4?C*NVJ z;liP_9@;B{+@JCL%;|#mINhsfm}C14gs&dCk76OHbQ77rrCpe6RK=5-e^FUfZu-yx z4sKt!gEbVY(K3v3xXw}X?*kjZ08@hI@jVaN?n*153v~MilxLrU-r#EP>zQ&qosl7z z8e3*AXz)_eKpxig6g@v`0=5#~suXe|?F)vq@2|Af6@yW~DXQ>9;xY%L*K8EuqV|c3 zaItRzJX$$AABPK{{GAxLr!JgeX)V9jGuI~g704d1``1^5%|$sP9V~Pdm4~I*rdDLM z^>)Z#Ox)7S09Te>Jz9a5AcL+O6y5`_-@%*0T1(i_39q8I=eRH z0AhGk*S3@cml!R>d6A-onlKi`wMPYOP+q(z%9QG^V+HKK`gUscs28uG6?6vq z;jaFcv@eIB&V7`W2%W9$tyG5}pkKT6C3NKOLaWDki&}b$x4q5Evm+&NtqEYc_j+Dk zdwE&`M2dSd0~mQi&9%VzByKc}?Cx^qTmNpu-(y4m0giwSo;8;v$mILC{#0kz>mE3Y zldh;6RVDWm_P$E~q8>&o_Na%*QH9`#OPO+(k`bK2n^XHUs8DY%TETNw|AfC6)U^3_ zpyKOuHO+R}=93RXuseR9>sk#0;RVTw;;Sz!w<@++j>=AzjU2v@)3@urTaaR)-1IgI z=@J9c*%jxhL|Z+Pp1ic7h}Uwog_^Hpw&`pzJJzTew^LXq()v5>rFJsCEI?4 zb8vpw)^czyjt>-XcTOnG6e9x|38;|L5uMkEwKq*3TNQI>^yJsLFI^PsjV25XYcDGx zML97hVTz6Qcn(>_?Kd+Ik3~) zz^?#!2C%SNSOO}VtLbN9dCQLGJygJ=k9{2pG2{VO1mTEpvGGa)-qRr>38`*7K>vkk zx{AMM3Na=?h6^Zb!KPgUH-wA5Rs5lthSsN_3K~9_oED$_VXE1}8lZ zz49`Xtw-h@@!&ana`XtoN@|@=-BAC*Q(d|Rr-;R+tNlIJD8eeo7G&e2q~=UeBd|tq z5P^_+>6q4fLd*?##?_o^&~As=(YW{4^R1C%_8?9vjpMw2c7f^nsOgS1^R$1-bd3!rW!hez%jzixLLmMUBzLiaHd2MOn_@SN;w@6;C7 zhhWW%y4Sp^mY0IBdPiLfLp35;IJ?qPbL7>CJ8X>+ORb`drVE{xkIVl4EUTCAi7&`&mOUe%*0OP@$pF`!oh1~cYTVhB@&j@dvu5(-Ta5x0Ww(#8Ets^X`=OI%- zty9fQ8_MF_8`jH3o;)aMhH{;DxrKJwPzd%AaZ)HqO#;+)y>4BdV?^K>w6GtzyGzZS zI_5>Eab^SDvBzmhP;Fqo@aAdF@*q9P(`lLSw@w%`AZ~O|AJ5@|L0;1{UMb1H4SGJm z6);OT4SpvR{tm6)?EGn7<|!9t&6IyOblL5ToCI0dc2zWBh`WIu4Y-yirAJ4A*n6)B zDWgD;l~n;n%X5s4dRtc|z441Xi;b>wq^2&CShgDsB;oVp`fN2a6W;{IWe-nC7%TGqc-&iR^bn#b9(rc zhWrnDu$u>9ST;hz>0b1X=G`vRfL3khvhQ|JpH$oP=D$5ezslU3>J$8!cr3Mi-rcBF z?n58PpI&a5U2kMv_NhYg%>{6hbRZOUTw?<35Mop+qh*@I(Ls$XT`iqcQuOrqG0H5z ztVJ!yUWZcUajeIAsx^1p`|0n0neWa9Nyk==pV8OT*XbmQ=*cs5}_uaO;wvMS!hS*p773<0r zD#?cA7F(_G`}&a%I>E{=KX-Y&g!o! zYp?c*ssLRq9jdLV1o0o9F#KdV_-ZEQM)=*jNz&i;1gR;^^X|;U^PM`nog5yX zuo3zyzhzqqfXktlkDqa3gB=h%%8YYnt1YUw-5M8RH|-mK{3zH*E!g4t=g0MhMB{|% zr%fhVpoZ)ywoR1s!3iN{RsFIb#N_OZV-8@J;u`j8!eTGKE#Rs8o?AMaoS>i05E5r= zeWm9Sy%X!jmnI{)qVQBdeKmvQPy^*;deisWr;*hB{nB&o`bup_u6GW^3KwWe(haBv z!jIqBr6IeiPgX)e#%>$iY?5;xN}P)cJ}-IVZWO8mB=W2YkVoODSFJ^_pQDU~;Gih3 z9?jx{fGc}Bj`WyqYbuc8#j~LS>)eNCbepz=?1S$0on=8kHqXC=7UQ058z+*Ugw%hW5DS8@v{S*? zzZ4jX9^KolsN`I4YXUIq@AiIjP^%JGQ2WL%)PLlbFJJ>sGA-7lYmS4d)AI>7U98Q- zyyJH+H?P3HCJ#I8mG0_DCE7#N7a-{&XXdle4&;_h*gXXznDWl+g`!jbS-F&jvyfA| z{m?>*4MFkz=i?b&Sp9i!_Qcfj*fY(WjpPc?I2l~?5pwnE&2D|AYKfM+hEE=&J2{|U zRL9@C{s0iq7y#MxV^3qGs%DQwh}Ha{KqUK=S2}Cr*J@LdjXwu|48h}8eH-`2f8>CU=!5p05%>~$%hO9fbnd2&9PR#6#a%$qkLMgxviNv{sKp0LUmn*cD!ty8d*P1u z#af-b)D~poCETLkYrP33B$)s!eW+XN3Nil379;|Oz7{I}NNZuor-{YvZ@mh9ki^p4 z_{Hs)!nDfKD3rxH_x_)S?My8xJ$&~^thN(dkHA*;<{5$J5fOE4-plOXg5NarN)4Ig z-?m-r0}G|EMZv)No=Cx51EGS_<|HS8i|g`Mwl;}7zu4zrezlVm$onW~O<+4#LwsiB zLPpLh_ulEu+ECb(CK7>%L@3(V%bKrco~|2m@yEUQre3({;Z5Rt(6|}|NSfm89Y$w1>~()HRVhwk$Og-{3S{+_z2tosGe50@?YG}L0q>|SLsIVyc0Fo>@4uAHRVi; zft`OcxAK{JDX4O~8A@cAU61oRn64r#`=&mlU^b9!lY#n_B?_NL>3BP0_vnqmPfTXuo&* z?m18+2&-xB+P_gWk?B;)((7d4-D z|9}@-lQxUW$U6F|VwLnJ&0bg9Touq98QvK2@5ZcY)8h%#5eSZ1OF6l_~ ziLJfCCl*9{_=*yHSkRlulP_z}Es(dA4bhCC=f0#Q8ObQ@`vG(KS@z*05((1%0fnJK z5|H_SU!zP2*`8z`&W`adn>?oI05sax>&dau4bgV;#P#VC_u%)q#zs_o{-%6I+0 ziTzJPI{81ocbebsPAa_c^=)lc32a@h2t zo_A61r~Bjl^2AOh0=AA|<@~bXs(p75!Q~8vwRp}Z+&n2Tc1+KXf9fIK^Gs#D!uB-# zw#R*2)lcmoGgG=hp!>7zxaRoH%NOEx)LJwLrqwsOC#|A3=QBUcNp99%OUM~w-8$*e z=NWXy7=KG(ccW|aPWR_WZljXYz9YjwRlbB96cD^`YWKEAVmJ33sFK>H_rPdO^uk>KWb=J121ZQHLK0{9#Fxfx+J**ZgT_=wxwn6pV{JQ zlbVV1F>%vNI&2W)4CV0IeW%I@iE29pTYMjem2YmygjGc$U#ZiFy`r9l3k?--rBr^< z&2QXp(m$?Ua$I*@XVP^iwrT(S(zJe?h|2_3_vb@PS3T8Lcj*K*him6VxzNvduhr&M z(S(HienpU>%#Y`OKUu(~ z^TMAA3yKe%tZ*2hX;jah6f8%P>RbnvT;V=4!MK zyUX$}6aHzAz*i#|!*^NS?6Fi=&~e=R_H3M> zUM8HGT3z#ct-X&pXmjtqJ!1Fi(Obce)RX07HxKQ<_GJp!e8+3x9;SX1|7}zEUwP@P zaJn@!w!$5&o|0Z#wUYkafv+0FAW&6B*~qo`C%hDLS0&^Im(Q{t-WR^0v^z_`-hE0N zkv&z?=_zZ6Q+SHAXWrm?BoTr=Wj8BFj{XY%a=o_xv&-^KSXp>M_GKCS0FRQ9Dl@4w`>OvVF!PB=rreNVZY|y)dwBIG!TEbt>1qeN6V$ z2t|Dvgc#s6AvVYn)pjCRKAkBOA;v2I>jih5e7_-q%mR|}a0@ONg{P9SHyQ3+o-SOG z2UddW!IXUQ$S&P8R*UZPJLf^jA{xSF#T~8Evx@&eBD?rK?x=XF+%HeJP@}>G%f#LF z$Br79u8IK-!Vs=*Dp!#%2Al=#D)Nuo^r73bF`yBQDwc&r>S7|qB0!Z4NH-oG>|*?O z@z!pFq)YC;Un8M`;@FGx|DnOqQa3gIvxiN9lCj z1TG9zn1u0AOBXd86-`TSZOIFk@>1T7MU=6*QlaHL%r1hx0J$ zw?F^C6?$72^CrHo=38b03I$T!E^J7~Fvnf}Z)6QYr=?K%!$(Gl%(IAVDAFX2kOev2 z))_1MJK~yP^-K=w$vxfulTE87VjuF0=8}~nwrnwjGfx{rK5;(dae8$Ve)KguoIp{c zj61*hGlB}AX#dzd#Wl4BJ6_YgbL3}Y?u^_h8qwUI_7uoNW)Wok*V#Ka3=gp+zC@=d zzkJhs{)zh1dI=do2vT~n|KtxA2K}gO+xAn!8TlaQRV)R;ZJ{YG`8@G+wk@ek16PX$4r8$*Z+?hUCY+1_26DA}lq4 zop4kv6N8%z9n3bp@Y_QM%`igi5jd%o2W$-37?8t*PfAZH&*~#brsr((G8(YAQZHbJh{H&>^a3fFulEcdFd$$gI%-szGu zF50Tq$0aDg$TZh{bV}Hr&sYD3A6k9Mt}JpaIOTWQQOH_M zUMRExjYLnb*w_cIZwT>a0$c{nA&~@57g*@{;9V?=@h3h+bbg=57bj>zl*5R_hHR^1 z8m1A+{;QE$mq-sQ6v!mEP|&>Jz-x-EhdvtGCd9%MHVR;gAP>15KbG#{>Rq#xaAgq_ zNHYaBOOV-iW7L1SgEgnD*3Y%|o4^hsN@cnUH(x@wbh)7juO%|Gd4 zDlNH(d#xDfzQc$wiVsZr*aAwIX_B-xLwnoy>tDfC^1n%2HY-Opd_(rT0^7CoaP7)} zWj{L}Of5y17d9YQ$B^Mu&elsRFC)@J!ac*oVUtzBNn5z$KFcI3Gc5t;C;}S@BIwKD zWG{{FVcNgfJPs?sV+7t58Z5&A`ug=|d8_?5viDn@&Ajv(I`S}6f{(^K#3(*e4I;yg zd>Dj$268-R&dYty&uROM0nUL;8_K1rXA_05JKJI z*py%yAsEfw5o`}hd}MKXH2CgvAVmyKpl$~QN2itGSB=5*`rv2DKqA?pG;1qoDs>!> zHYLLvshFWvnM2~JK^$x@l`fhG`!S=-&x1__d(0BehlBO8uMV7s!#$<~WN62?E?J}} zAg;^?`wG$kJf!2{!3AW9(nn{~kl1XH>i* zp8#*oj8e$APTg}3x`%--677`Gpv7Wzwm53R+a!5SYgZ=hKlvdoIdTf-ECNz#dt>yB zRM)gHvw+2FKXOW@d9=ef$cR!y z^a#~&`$K&1f`aRel3S^#I-ef8Djy~SS}K4bqQA>cwN$Zkd})9MEhQxdrb!GGoJ;|J zD)|FuhsZt&#LW-6T2cq%>}WXFdN%cu4aM zBOVxBIB(T4VLCfzI$Sa$XA4ZEf0lL$`HOCXHx}ovT%qtU}GcE8PB>k^qA52}@HQx6WkO zI&<>>$6>fBhlD&yJo%6XuK;U)IjDNY8yXLakNgT5d86{>HvZdN6|5oD5#+74$oH5! z4P;)zTfx8A5_cOwNzCm^??Sg(ZGaSAyiYkj$iQ@qplJ0Gg6`YC0EX(XFgF*(^N5HX{14d^VN;Reuez(q9kk!}YAFfoLr}UT=!S+U- z-5YVDQ`+?_M~{D(*@rzx8fYX8!((aw8lWc6DK`^7SbGX=U)yMQkl)`E;Ii{LjW580 zzysxtzb6_qurU9khWBuI!nriS%AC2X9)%V7ylsOnl;}ChFjnPF1*gaP9`Q&|_8}1L4H(+@kc#@BzX?S16KSB5r>(H9 z-6^-5o4+Ys4*AvazkWjc4@9l-(!*)PQ@7zMScAyRkPic@o5@fYVfeMB!E5D&!)9q2>h(sjQ35E_iNN<(= z_+KgtifK_~*v4A0)f2ayyxtU{a$V=)Xo%V7*Ze`{Qh1m^{5?RwEHH}fPy6g0l(spM z3B4b-nZ`dt(X|uUYUl=rdZlg|Ai|TW&{hU!lqj>A4-3o;&;R&#T2x+si z-QW&au4cc6`)aWh-rGypXKY6k)D^SyVUch%%;Yx7Ds0h)OF9DEjD>}ZbbohGLL6fL z=w>B-N;n)%#;VlfA&SCt=nIQ)IP)Lt8mv%cnJ z)I6-aZR$c+I(gx-=<0|=#^~tVo1;(DtoQ!81Nj7P#G^xm%2Lcgm;0s3K1lc(S1LS^s@~jAJgQ`g`guTh z95xIEJJQ@g`R$-J98g4;pd}!9GT%Gk7rrk`Q{_N+csz7~nlnhNVvA&KtI!cx(&(>`rDH*h^;UEV`<0h%e?@J(?^b;GxSjQ+?p2@^Wq zW0gW~yQb8cBl)m(vq<~SK<-$=XyaqmSS$=3r;#FrdRJvx400fuG=*aFnZF8{khql1 zp{fQh8ub~9<8OrVP=Zj&b?ZTSlH*7B&EG+H{C1XCV0RZ zyWwAoNiq#_Bc7}_0S?_qb0mYG!CO2JY<#-&oEHlKGcw*(dBbiTRhmG2THNS#uTvY) zlv)ResF-f*$vno15uZu*kJ_jmx2k_PY6xHcL^YMx!}fREUprioeJ4PR77<4VUy{T| zJnk|RS&(q8r8?(&o~=L|bd?*c)`Fk61SLbe#fhy`P=6v~b>1%(d#0DA>9_rsAD3>W zG56E4*Z5_Msl;K!^jh1yybw{h`&HHEW^w_Fst5QH@CZEIoDaAN+#XEh^o(bYmlEat08QFKggsPK z{FqV%4@+ipj}fgw06_pnoB&Wv;KV)L_YigSjzp!I4fAP`5!h>q2pYSxlGODkV(HiV zW6oHn+n?Br|$TL)^TX(D|jbG}UCtJf-952TFNV#2N5ZVJfe^eOW{YTkLpM8w$;FJA@!x%1d-M`4-~x^?73 z^A!d=BN`uBCB3ic@Ov#6XT7bgqK}$bsATNtNheH?`8{xDEf<&a&Iz^5V?~opA&r9@ z=d1AvHktBxQZ%yb@%x)JoH7^?2pe;Im=9=w-7_J+9b|_T$$g5-so3w4`biTNvdic2 zHLgYDhjSbIgr|(R%p*-FrAVfpnrGa+d+u!+S#4`4bMwO!VTf#$Q)6PJq11lZPd z$9_K1Eik>kejaW4_IF~@=saQVeqZ}U15EIDN1J5Ix_u%MZx4!BD)MQVNi>CYPc(+8 z%MC9YoMmW~Q;0ryH#e4%Tp#M<*y0L&OW@dDFXIVp3&!w5b)`wvqNmft3i^ z`;aSKd3fQ1hKgx1vHGFPl`y}v5e{{YuAj~7ss_FZOlujpo|+Czy&oA%`c=`Vd3N6$ zBP%>7(*|eRuBU8S@oE2$ z3=0uG0gP6qv*suDm!f7y&h$~%RvJMgeh;_|is>9wfbJcUakJFFy4$A$;|%Kjq$kcoO$1B~nW8>@wHI$m@;U<}Oq#Nu)5VIhSle-vse z(?6g_KXP+MhYGe3Z{bIOzf~c_9}!|9-v>6YJ?;evrg?G6+d<|b@dIRTReA#^Jc_1P zOf7GKT?mCNqtvzw34up;OE|@VxYv}T z)=DOkU_b#K;CmfaD1Kc!as&UPLVN&LcBYo6wJH3hb~6nTnd7IDGsV&N{nsW7d$)F; z>94qHJH%k+Oj6b=I0|m)*y6G^l!_{A83jR6Vm9s^m%A;i!PK6`(Mn?nrW~9u-39>a zRa`wo?Hz6`iOdtf*WQk|UagoMoFS7AkaI0_bRmn)6m^~|Z*zupb7_5RGU*=;-Sm>| zR`p;8#yW49-WrO|QAA!BrJC3fvJHN4^S$z>1ag`^QeY$ z-P%XJG4QB%24VU+-h1OAY>=;pK`qaElu%zbqT^(PUHrhZN|ts{LZ(>C?{h7aEZS7a z0AiDEs9t*bY0ryf0Lc*TEYStS-X9Efc&~d=@y)w?cz+ETfegP`>d$Ujt6BUlW4oP2 zkc77G-B?bt(c5_-;rvEmPWZQJOLiJX?KQV!67DaxqWg~rndMrnTZKG+Qbiu7;XU%) zWiIqTQoe5(O}s{p+^HClzU^I`HK_sPZvHXT@6=OHx-KD>evvG=qx?2P&2%!YQMEfD zTD-O|?CI_I7kgfrT9)oNiR@FlC`W#O8$dCOfRdGj|ijV|V!|hL*5o4R-GRDeXOl%Ky!u zO4NrD_Ovr|=mdz_H+`E_qr1Kvz0d@rIWu#xwK|+ssnpM*R~6DO)eU(#rO~6GNETJ_ zxKmRH)J<_E26YSFm!eL?UHQ974B8WNwJA< z()zGlT*+FN-*GwMYNe>o+5p3J-Mj0Ma5 zj8xO95W^Zf=CyI{;_X}OWi-X0-b;L#B7+7`5QIN>?s*rs7BKYGLs{!1cBIE+6rKcn znziwo)}6$OTeG(H6+`MXnb!B6)yS=-&wosjcl)-w)NFwg#CDTEBn05wH0AB?Carzm ztQAsRi*{hV=3`O&=f|^}Z*~C<_k88`R5QC98DXj`;bg9=6Y96v!2vTbFk~e!Rxu?;_E-#29(+nJCWya%O`{q z6Cq}uimYVk615ek&MMmoWWF`2{qZ_Zj>){Y!%9v7Qba<^CoX(H(AL{nX+gM}2P)WY zR&ZXi7tAG=ag_3w)Qa#0lW(sWNn_bOwh@+O>MKQ!fJ3o;e;Thi-p1=9RZq_Yzet5g z4ylxRl$@kd4x3%$(u>qQm5IuAHaS8oya$YnI}Gm;4~4$nC#Kk#fqip$5Gk6{~I-Cl!Fa8Mq==mnUVA_(q=JOBvYh1&m31O zEPl*XC0*AiIbD6DnNG;h>dQ64arAxR*@XP<>p=QJ>A4s?cnWb;jG(Q0+B5Qxt{~E= z;G^dK=ls|z)6C2P_QrLY`6fV;mySGL4c;)MK~o1VMl*lx9Jh=Cd~x}i6XSYBk93mX zZXvsLkQKXGdC>^0v?bv)sVeD3k)UjDU!&Da7Uh1p69}Oz`fxBB{ z9Jg%Y6PTB|nimWLtop!lB)>Q$P@K&BuT$)ckk;otKx``zkUf=us1K$E3W!TO{a=+> zx=ho@PErD|uHS;aN1>Tad6M$RbIhd^Sd>_OT<*@PB@ z%YgwBO-z|CT5(f4KvgU<$8l!YN45=B{4?T7SLbN1dOi@YNsNWBw`Lu8BKF2YSb8b_lAery%7XWbvy z2RkBlBM`U*5c{8`)9=ax(MF2n6hd4@yMI5*;7?i8%VmE#%(E+g~b%%H_p4Q1$ zn^e!Zu5{f?RfHIV@^S+6U_Zuleoq;%qyK-c;(UD)1P97v?#Wj>vI#FNy3sPd-ezr}E6EEie$U%HqCu=>D%o4I)0 z!?Nxo@K^o8_tJPVxM}`jZWL8X^+91(*Z6u%nNId>mx6i!VHV)!!2g#Ni(k z``CiqSRRgJ5d{qHv`hirTfV2FP- z@%*?Y`4YYPlIc2tH-DNdZpt2U`f*7!D(BB#8)oF=j;fl_^RCK8I&T}?l3(;JMR5Bf zG$(?Vp4;phYjU%V+^h0L9|xn+VQ*T;Df6%&Vd3w*h!>aGsz~*Rw{eQAv+w?l<(MPd zf9Koq^RkHfuFoUBco9YMAUWTTj!&g{!>)(gxml}uS)yD`9^gWywLya=UoUzs*nY>c zf9ips%Y?_pvMEfT-30El(FZwS{3p)Ru7aPcifd(Q6~(V?(X>w2fOr=i%mrC`EQd{8 zhx+%i4+kWidt1;LHQ1)aR%Z^QDhWm)cFe00ecm+QTX^S|J{_#;ZPG6u@--wUnB3G3 zENBS~PV_RI1Z-tjzb zw=6Bc|DmD$5?KmGp|a*?Ntf9y!?RKvD*G)L2d&<87Rd9i}jlVM#R7S zFTd*})-HHFdW9)YUVpMTA>{Mre_tx!5s{88Z>!NHW`J}dgZ-a5r7~ltn_lPbF$z4r z^VnAHjvHyjYGsN4_doE@A6B-V2nL&{Ia$B|^JXLxIWhfZ-8s^sBIrzyW(abo&m6 zJmS9GF@--rI6+ynUzWBwo2Dx)NtZQ@WZlTmrCE`F5krR`_M3d#N7bjo9cAcE zpI)wVlsyk9MNhyuXw|G8ul;;%9|Ucr$2EAGuTZnS_odF=npR|pJ(??$o{emA>*Uh^ z5vaLmdb|D=H{~k^^3UHlVk@Sd*HjL_g0kySrb7)MK2scJm6ag5rI2`46VG?80*ZRz z#M!i(hQE@WQG$rt$i?|6mrWX5`tR|yp2cm~tgASz(bj&jI8@F)(R>JQ|Ed^L(243e z8R+&$pfoDmBwjk<%rM_)UQAXF337bFYk=x35u9(g!aMQ<-F~mYM=adlbg%STZR(V< zZ_~26+5SST2vw(&xyDX!d`;?XKY~0gZs;2!xa88IshysX8@J=sFTmZ6$Mo*S@cLdI z)f@Aqf)wr;ZScBTP!v#BOygedasHrKL3oO8N21=`cWr_uaJKvgK|Iv$jS1fA|9rGg zvz|`;yk$4CvjM90apm*#YR5GX*}=`b9pKo$;-$MiLDa>&q>i}a3kr`Ka~@l)E8p7l z_{R=OW|hvqKTV#xe67-4&sgXX%CN08bHqqa=idIKfrJDDUzHd51D*k(1P&U1K4>nuS*yyoF#NRzPX<;^r3%#HhkjgtKvk++|*+ss&rkH@Z9z1 zm-5N9ip7t0AJ5d8$>O$%!5>IbiW~lwt;mT#F~?~3xHR)Z`c$rLGk_Fu9mq3*W{Zsn z4V>zH`%Ikr=fzDw>!-`ApgH={9wHS`lR~ zN#)4w65O5#EB*LMUOniOgjJ%!gU+bG3=4Fg;F)dgDkEn^Tc_IEv7}~_ESQ-Uuzp8r# z%K{7n!6@j~Ri!gXNbF5vQT&m&$PV9|rfCr!O`lF+E}BE_CKDt`x|6X?Wc3g{2AgNW zOh6jo!D{|LPMV8B2%i>|s?LB_f#(8dYcouz>%mCOVG1hKcD!p91SRDx#pMzK&k2y% zj1<~fSz8-O6Bervc^ptuEa91b=H+2-O3RePrhfHS(l zY#yXGsKim4XUt@Z7dSi3PdcxRQ8Y(qy_Kj*2h;sob#gj3%P8#e6Z>YuhPku-) z5ljqk#&!^z5ua93zD##a3~$(!X=SnZ_@ZjZ{IdU&uWZ2^6}gAxJS`ydf!Q(>YJ-&$ zZFs0+j{p-fbuO}cb;=r+fDYlG^^_t$B#D5^AkUvA=jjWPa{s{1ojDhV_4)V~H1fjp zAXOnMZ(#cn`cXPYb(DG87^-(r*^#XS>hwdZgb<~t3R>7GZ5QQ5^z9y&jy>4_eL6+{ z@9%$9hKbOP$=UsJH~^=W%>|=JW#h>IdX|6+G|#PJTqhTdS;2BU#0x0H^hX3zti`IX zzeaYayB#5P!$H$WXp1NiA`kRjw`VUL2E%L}GRN%(S<~h!(!c^+-NN57IHHNfcmxco;SY1O*mi?|9xupU)A|bf#Sg_z@85L5^W*Y0|lIT?YcHIftFmi`6=Dc1ku6#kY>wUQ0 zIdmA7s9s0THEJ2agDSVjA0LSur|!o;o<@5KX)kQTJ~#479Oenyuo*c46DS%X1XWR> zy#~k?*I}a!FcN*kaAqr>qIQv*XBx;t`mF;nC1C2$=)D_TlnsU;x8%(EHh`9M!w}k$rStE<1Y4TScUnj>Nw_T^F#X*m$pl4QEYJ9)+>i+3ks=m}s`ub`#qqe?Djiv?ruP6p z+~;)Ly2y!tbaLqzA}@#l*<=AUsD-U2HS@~6XQGwdd^aCXTWMJeyAc(6`x-|$%S%iE z4v(=OyyFGOk{3}r&7b7ELEJ4gh-T(fUE*LV2G?{Oeyh*N34a#q-?OAsW5`!nEDqf}-V{QY;; zZPHU;G0c04;l~He#RnC1VFp5Q91RAygKpsOJgxxqKIBTIeO$5pDj?- z?P1rZVcIJYM(2um=4kepOlZKA+%bx5(~?@42%;eX8%nQ&WC~^|~{(DKJ!Kqt3Daj>Snh<&hrc&i#iV3OV6|V>iJSL94qU4X{WWECLJ9 zw~0wuO;Q;uj}(04P=rM`M3V#4QO`;$up$$+I%X8K=CMSpDn-Mp zP!z?E3Nbar+7nN%Jgl4yeZw@TNz>QH}%tq)cw8vEh_ zB7@A)up;J8VQ#I`)_Y}UglMF)Miw5CEGU!akJI@?!&$jsbVye@=Ia!OM2=4;)}A$~ zI{yY9CH6lkz}#V=F7AMyUBz_arGPnH%9;)!l;{k^019`c6-!)zAL7>%gHJW@D4(f0 zb&XXYKsgX?gr!SJV05)Yq!2nYm1Iw){1YN4HSa~?5iBe+i&4)6ArCR(Syt+Q$+D^4 zsDo>SQw#9V(PtVu5r?qIpV9vX{$8$P_VlA3^JQOB(RM^QwD62+KZ41KFMXpKMTKh( zASPKb2JuYBYBl;3G>QpdZx!eqXk;-Ec2UWIwnkkZ7UnAQ-2M%tp4v^0>d>bdn` zCB4EkS4^5r-tMu@ha=I*2sroi4uqWoEJ_vbr2;veQj@s=UF)vd#%H!M502^9W=V+f za|N~E?MW+Ba%{Y=Pn3MWco(s>?g|QaxAjz#*!;Q>Qzuk)5TNdh(Z4RAVlWU_9yi|W zZ#oKAN~hKzdQ<;yUv2tSeXk={?3m%hlrH>~s${~X1y{In(FScnAlbnEds%cIs#6iB{2%ujsYGV8p9 zVK;sG+{1|4$5$#*Bakz$=S(b&64D`w*q#Kt%I_$sHCHYFkhR8qWGEO4YCrYV66Q_@ zyDe3_kxr$|)ZXrDxf5_GAr@6mn-8M<6J3RC;$`&8I)E$wOaDsnf_Vn$M#v|O*n|bwb z>oJ#-;Z!mIPPn)G;noQ&U^5?!&y#v1GNoidMS(IiWJnwx#^Cb&rJ!HzTAzKE|0~{M zB#8M-mZfpklj>W{LI-pU&yE6QUMxvv%phM7n@`c2&G+$wvzvyy+RvE54*!900tV=` z1}vk)BHJpso@W>lNsglxAD^U3WU32D!|Y=_@d%k)%J6 zO+s0)OkRVWTOXB6^cEm)E=dJqJbgq`cX&u6Qp3z!zWe^uv&QwQ_>uR=;Qo<@joDV4 zOE&^;M)^KaFDBuDiIzQAMEEQl; z05-#$D+jn3oQ-q8n;xYaa7z_IBX(@-YKz$|8$dQaWFXz0J~Xe|1oajaiO()cq?2Sw z-xBW*;KmVp%c1Qp6;dt!BpxE7ev`}7=o*BkU7`MlJS@JvnpP4^gjGE}{2vF?^EZ*! zk6K-krsP61iA|TEwuE%G(IRD?1d!|{nYMYfJO*aE-cBqZppjtzTLrqrn~ehZEZquS z;(yPHHu3I&eYmoR0XK0ffxx9?niT8AFehxzDtverD<%MqnbD0 zo@Nw7!)dVlr0L(4W%qerO>Nyqb})MJS$;%gc_Q?>7=4Nt7)owHKC2m87vKw)Xg6!qw5kl^?m<)KUqa-cmPqyC&9$75E}+Kb~O(A zAw_1G>#ldZ`C!B?R;9`e5opTVp&+-U+|w}}et9$)wM=Yoi_r_IQI4z}AOeAaUHHl+M1 zcj#%G9mf6er9}qB1yiN~gaz|P!Mzg8GGyD+N&82WR=rRgBCx{@^D7(t2q@3rQ+fOf zq%GQ=l3vk#+}7w(?ZFRfWJ#ooQ1c)HL#Ek}$ke6#K6nn!RtsRfvBenW9Hd^YuzZxL z29i@X*OPiuyZtI=;LHc9W=Nag)amn+z8_V)^kD0*m>9BOgT_o)eAf-h_(ee1W%$bThxD? z!@|rYXiF}@mI#wD2dQO%RjqHx-DeXbVV0pQAYkD|X{@3xYJZ}Pd?q-EWx5+Vm*(Ap zoQ0*AqrZG6kjUT=>}9MQEWsEtS9H7F9_GhGD-59nNw5SlT4r4;Ck>WR)J_&d3<`M) zrCPB>5VZ+lMw1w}fxViLl$f)9B{-%4&Lj#SH-v^0f%NqR#TdfOlC%pBmYbaolfQp# zY3AM)c*&6FTlz7%Sny?`He=Jg@BYaK*K2Qv!@;M-=zGHNNfIeCQTmPmkrUIBL%G@< z1Ap+SMwVCVjc1d zF%JlcIdYqIw{r|3@Lfnxv?L8>`~_8N96BA3Y}MsFYLRoQz&?_XQ__!K$$gOh5*ASG zp9)#F|5^}O>#q{425yDDFe3*&wPghmV@yI}7HSsmZY9&WI=&$7jd#o}+4QB`=?JTJ zlg&{Mqv7tQ+Oq0R>4ztna`6jgDWK1jH(zP$d3y8}+l{`d)WFl?T9hll|MGnm7jXbp zf#sYDvu}0W+#_ESs269t)x0n0j-HGA^-4zR{k5#o?hh|6H|e>fAKRQA7dGGcwK0mg z&MgJ__L;8`WvpJ&4U-x}=+n%S#M#g77<}ww9gJNflPOICrGceN_-{QlDSfO~^^+f) z^#ODB4RRj1N@Y00Qw~1JtX9`?%;o`a+Z>Bl}Q0Z*0+cCJg z??KOWY%Xq^z8|gTOByX4*aJ&mE2~9l50}-fwMZ?iDU8AJJ5_WLYE_&AX#F!BnO>bN z)mF43Wf9bBQA*Zw!uaoBD|lkQJ?`SaNr7`-2W2!?@YvUQao?TY@;b$f<|v)wQ#;Ll zx8HM)H80%xDop#5PDMlH@Jo{Q-vitfz)_^?djU|dq_lS3=Uhq~vT)nQE+<)?Syh(; z?Qi@T%QltD_gP(ztN*$~$2Rzj|0usbE`JFl1f|Be(5a z?|j2)A~<Av`2)#7P$k%gqQhA+K zDeX#-!L{uaUYN-3;;#qTtji(EBWW`6xzvX^_9t4$wJCY0<1J&VY&>jjn3O}!! zWy_Q|4JwVNU`&Vrm?Mucq3RhI^-;va|Cg&P{{iR`My|)*2teWQljI#{C$$SnupK~V zkwthyNln(&o!3}ye7RgT2A^k4aw^sQQef;=<>_hts@!?gQ~vj$^TlY(R@-@&CJ_(J z{han16*=f+eiw)~6pe4S8Z_h;oBDbS~OKy(N{ zI!t5;#r4CYY-(4~EcTV{|8y+fM7Oc20;sB|`%X)winr!(yG0?)EDq1wE&H{a`Q6XT z*#Q*SUK=dHtdZ*sQE2D5ph>Hq(l{a$HTxB-%E#+G8bgJ@910q`{zm6~Z+HB^&x2#) z>KtgHy6PglMn_>qsft$SPUtOiu07Y?yWf4&beeodZ_P>N0+HzyyTZ;(9YBXEyGWaA zNx7VRfH+HoYCOG%vChC4rmo?mwSJcoYM1g1k5)rsiD7$A3=pU^R^-1Jn`hAsDLY*g zdGV6|L9#Q_gO}SN8Gy6jj~XWlfQ7#UN>szT)c-Ddn6KHf?Ozq_^Z*4>y~;}t?r@Ry z544Jj#%{oCFMoLqe0kOA5fbl9HChenkxa5g z$y=-eEp|`iw+c*vGT-U3+ZSnuIcu$CiHca|ivq%$;x-Xe*l4m*E$sqWhF#xa+qMMg znmk<&J+`J@QnkL9rAMlZ#kipRH~R%Ul)b3qE zYY5Cr6D6ceydleTPUK1`{E1$^3*Q-=24+n+2j0Kp;;aOkOpbR^juv<7kFQDLI6&WH zgn8emybdMVx@o_=&bVD+XA8AScryY*={=ecdg~=q5un>k{4%Zel#W#XI;%J?Mp~1K z&?MoQ!MN~x?TV?c(IZGEF&(N`Jc=oeb-qc_?|pH<|moMASSnnK$xbvlQn*gXX^sm@Qp*aW9I~IVs z8&H387Ya^_*$>-+IrnRP?%U@A^&gngL{Ks1C9!-^xAXl@KCyOpxf8nHB;T(7bKdSNGit-cQSL!NZUFt1W(m{D^ly2K z^WWPxH@-YFx{}3K+0a(|kTBxIQh}y9W7vH$rBZMd{6jcR|H1{1R`%^_P6w*8&}U z*;)dff%kN%#f=Q2>IVyjDs)El5OWO( z+EgVnl~?3{)FF31I-{0RAu_W7A;A`^>Qpe&u?npVMvie?qF_?jb;ag;;1tIU~KG$Lj>m)As zrq%>&zCQi&V^_( zF9a^3^~2a2Gmt*6w>^sG2%<+W*8}8FpA>16sJ(2u%sqLJ#5Fk zoYtoH+pgHy#6}tZH=OBAtK3ZILGYCAPj z4Dp+R3BXJ@a%;*UM289@BpB)4lk=^-7FTa2h!WH&W9JU(TH09&edK!v86g6qsw!0a zP|e$JTXHtm{q3EQrF^$en8LkkrFS)oaV*ggga%Ly6{rPF!~6_&JhtjPn42>N4mvN( zqQcGg%s4~_pE0^w>NlZpF^>{sSyFYT`Uq^wR)`*EN6+BQC-3}Q_dxcv@(h0Onn*iO z%qNjKYxCe3Kz5aF84kK>&Aoh*#w1E2HiL^jLk!D7sFUZo&KffkQ}_wT+CZpOtF!cltk5+{KgU(V zmh=;XvCkfM74+jJM<^d;kqU6@nk?<5bPKeAfB;R!F^9A6a;MR4bvAgi2E4%k>8*kB zEaO^$D@F_5!Uq~t&}IaXeyzLYlDX(+(SJLfOO-adU3-cy%{Cq^tBt%iBw+v;oe|oq ziXv5mnImr(Z+!6Y>v9~SG~OXI9{kSNBQwSiL|ou8r`;}1pJh%xdwAE-;Fh}UjdZmI zr>2KT{eL%;jv1T4--ldW*AlTvIUir$>e zo$Dbptp&O2LcBQ*v~qxDL}V+u+1#N&-imIjwcomcp#XTaRjvUU2*~tw zqV=m1B#^aS4-#ZM6=bx*lF-TA@gO4%|F~b7Nfr)5?UG@acq!wyue`8ZDKffQYxJa0 zC(Lx>;?0wTpo6q!BVp0jX)j5b(pFTQfjN6@qv7w61^&kiwnBdD5@fvG%uFR0{SRft z2g6fy9f=?#3Iu)vvYo(mkB$uc9Ga*C){$RKVmVT9=MBM|mP4(1=DR#_G0Wef8Y@pu9W?BLa3JAF~jjOmxfrgHO|sUY`{u)Sg9 z7i?K(G^U{d;+n;>Bw72pLwuG%`hurxu2S+CgmFPX)-z##M$!Gx*04#0+xDB`r3^#N zrSoA-`uOQ21@Qg9sI7RO1*c7wx>b^~KI>`3rZ80np=E;;LjaJ;-@;Xpza?qjHLEy8QN`;&LV1_7< zp! z4$j+1OXl=FNhp{7uW|QrF+6##XW`|AI&OP!+vO<;JcbW4BZCt7r;=#kw&y5)S}e*P zvTXx|Y+rJxAJ{q<9@irGZ`#qQnZIf3)W%**Ift7;ZdAl{8cA}Eh%0R;C3g$ymG_`U zqcvAQ$aPPT!B1j*`M;}2$C*8@KKE|2lc=EILAO#k>;*^>o_fHQcff!bYdjhIL}}q6 ze!<94UC(%diD!La_fcEQM{qmgJ_SgU5J_5p$%3SaVNv2H%kO>B^miAgK^ZNuX@lbr2h2#NsEf>F*cz*ho-wD<>ngRI)*p_@C<^j`j zJN?fsrlvwzBD2UXZrE*@WqGl^kjg!=!nr1~vQM?8?3etsbwvLy)T4M9E_D%vZoLg! z=*I3^Dw>UFsbF$9oe5nK7Nfm(t!E$8+>>cU1M$s45@KpUXBC*&#ZhijEbN*eacUKG zvDbp`hhu78i;V>lGzwn*d zu4q_p1{!?$4;_T(Fm;HUq4|g5^HO?)i)+j31_wEiOBq8)HFRp7`{j}+J{TELnN^9J zaUMScr#KG@29N18(QU|#uLaFdpee#UmFTA-LUts=bM(tiXKH@NBIKx#%pqF7gB#(T z{TYmtA30*Z;(@*ff>8fEjFGV*it&}Zf4MP^sF9^1s z10y$cF_mS2l)}r1DHh1CfSZnk?l#UHw}3~{8Czrvejabh&e~>_-E#O*(d|kF>|1W+ zdEl;TwwaNR9wC>C)7dKwzd&Fuq~^NRf)~y#p(a-bVZ?-e22bwEbw1fKh<}wZfx2jN z+bvt|1|j$$F+Tvnw0yQ9b;z>dk11jOI$omunBVPDZmz@vF$#{}7FVSL;Ne6NaTaD3 z$X2DkFXl0AXiE=EKUmX0nUwA)?xHJr|8Cc08FS4^o);rZesy|OM(iZT8ydX!W~X_= zzG;9dV%Wh^)g5eLAV2?@Ck#|^@9wH8OSD~bDz~=}Gr=F&yC#7>n)QCjqvGv1=KxaX ze9$&B*p&~S{{>Qg$kO2~u03TE`PB>nxY-TlGh96{8dB>WcA)U!e}amI4E-%g0~*Ma z%6zjqqp&v2uF8uNgX5tf7XZ|7(Z$j zJcl+)fBm9X-{-1rfHOvGvRK6?{r%c!N-f@Yl>2MT>q1YnQ194Zp>kR`Sss|3Z{?C+ zmKR~}m@qazFDaY*X24D-W26Gxpp{17k>jg343bLG{~e_jSD3?Q8UxZN*XP@PCYXNN zT*Jka;ez7%SfW(j04`En*XJj%;iQAvV-Zg8{K$3H@|{Q1xA-h?4#P@zxFVpm5q)LF zlddVXrb+}hFmh*O?Uy^mN?E1MtIFo<_dREX{Y+lZWGW!K?(ICXaen0zY0HY$+{KzJzWyTkJej|~FdinjGYmDFmg9GCMz%QVrH9TXa%Gb1-7?aF9~O_@b7=NjsQ9My{0`u9W_`{Sl9I4Oy4NE==U_3m7uf3yd2a zfu(V45;Rp!P#m_Z|Gw=;ottXd*V&HxdK#+awV-wPI7Ilf!+!1F?n)&iL*2zXz2$rH zHtuyVG&18S-%(Je8;|87AAtzfh#ZE=rN4&2hZh}ThR!~Wir1E;qU2ctMj9-UMTzD7Lb@6&=zi-Mg6|wc)yv9xMzJcLKp2Q0&BfTEo zTjw_}O@!}$B91|TpVGooyQR&>(r?^&olM{jc(RFZ}`DC zIs7=aGF1?kH9~B=yhp%xVC-eVwlO9y`~o89vzh${TCd-Bkzo}J$*EI)&yKfV;5uK7 z2~!3{z$eahb{Kc7Db@Jt;OT^Li10#rz{jpp7sk-1HEYAJz&_gwz%6 zn#AORR9?~F9&L&iTHp9Y(L+?(f+P+Qwu*wYYz>Qp?I%fy4ExZb0w=8{A_mjfj3EL} z$)%Ez`tcZTYY|IhA8$lQjUi`)djVl>$m$6hihK%GH1phN+% z6pNP%_UEq1+hD+GTWn!M{7T`bEz6{aF|JSVm7gWM8}b1#yn?gR6CzCGIwem}?9ZwC z3YOckj0m$Gm58@zZYEu@P0|S9)~E0RycUOq? z-NjPO+JNK2%u4q2m~!*$5W{0Ym@R2k^2RV-F)uf;F;01v)UIxuar1r*ROY&^Htsr} ztx`2waGLLgs|O%Ms`^kA3`^cTO**8u1rf(%8gA4fjdHcnS>kc?93avttQmEhGGV>_ zbDr_a2=2($l`9Kx?ak@UsJ)amTptEjc|uDvIT_pXH$0cybHB~%uZM5<5|?n)+Sz~*F^~{RsP;Iwn|bKJH6w0`-oRRf4)`m&$j|yuL|w6zNd}cyf1YH zH4f8PG;AbgZ z;qx)hft@4ia4z1uNL9-DqHXW%n>yg(M>_dh3f7GdaT%=f-){0k8zjdX5Fvo|0$3PND>$dx6s$ z1B?N^V8k|&<*MSqyrRKfO9 zTa$~eY&2-Zz9Vs*6teCq)q!NUwnE1Nc%Bb9X1StF%Awaag5gltmK(+cdX&ctfy=JC zqh=Zzv?|7{>U&q#LbJ9#ZpSDzL09%Fh23A>5>0NY(^saO5KbMUi)vR%nldoYB=Y#G z8YO!reeT$$`0UjH)6e8;U#VvcX$1;=Mb(T) zMX>JMEoqv=7X!Uu3;%hSRD~3{jy`jwsBfS2NHtmH9a?1gv>dYc$)P?<)Y;5x)GnWP zf@Mg-%+K^MLT!1sU?Vd+Gujq6kG!yrF@r57wY5hlT?bVpAD4Ci!0l;>ka=1l_i_15 z<iy0~u4m3HE2iKIoRj;nCm zem{Sl|2D+&XaGd6%3VW|Rph>8u7}E3El&JVH>ZBsaPWI;b5={p>eTiB{Ne|D&&K#q zH+yDWtH9}_A7bpL3+!z$$Y@=C0~MzcI*9oqVKKw}x|-nF?%j=~X$;5v@7d7#QAqJW z;K-%(qiQO@c7wt9PT4&>NUb>*&=bMgF&X_DsS^K00{OVa8Pt*+C@AsYd?g2qda9jQ zpt9mIxg=3=d*L;7IBF5#CM}tn0y$k&fyjpYS<7Er^mgoBecs4Ph1)Pg-Qe8*pJir} z#f_HonA|>b?&a#l?0zqmJv(I*Xt8mdTx} z$A5FaMghuHa$MUWFSpc`=aQz=WX3I(5SGPG&?odM`{`bYDvhbJo;9Vft?ZbnEt@|P zl~}(>E^sZ*XGpNuMHz}}Y@B#o>iY@%m3b*0wPws}?UeN#ZFB0RiB!U8t+PjPcPnRg z_a$9ZQ&hp!Kqe&3vBtq1i2WW2e(6Q$9bG2oJZw&)YLSyoe#<4qoQ zXZv<)r3W!kdw%*V##b3-XLPQi)3>dA88&A(tDN4s62L3{sHuHCB4D!_;=ql?_Wpun zY@G@%Oq^O3W-Bb7OtB9?`k=YT$8UV7-ff)fhN%@Scx1W4Rtws6jx&^VvhLNH5k^$L zQQ!u}Lhr2c)*8d}QKScjP>p7E)HoWlO*t#yK&42!z_VK^_GRPL;P>;J+=Y`X{rvVb zV2y8C6RM}NvRRF+288*24Y@14sdGVE$8+&&Ei|MyBv+N{Ha zFWuuC<5a5#ff#G2(nGISU}2XELO#;egVGZ#rM#+gPFP1h9h$IBp9X(^|9bI71Yf5V zI+{{Ogbkko%20RA-~fY8mQ}zIhbo^Vqz%jeBI2doR6UgjXfp$tPeq_#7@v}hO2>&Mf*%DGSJ zuU&h~v?EAPpdEEkvuOatT;NQ9p(A`UfZ3FhZqD`WlWT&ObmYeIfrd*!*~4UQgq6_P z;h<54IeA&Oj0({jqU9N5RGyJ_`*DS*PX6!=laWSZs+_DzY~Z6KyFt$ z10a$=+Tv5U8NyurN0W}Z@gq946(#)SJ>2GwuZrKY;Py)M5LJmz>9ei57y35GRWlYf zuH&ksF~TX&9;y`j3ZI@L8G+Lo(N%A0zR$}Hzi#W7Mb~x(q6IA zl@UG!u9>2sS5=nL?s%x(xn}r}3SC6>8c^#W8DgohEStMFqI{0D#WpuJ@))M_)0?e? znDbk;!v{ff3Os-=LKjWgBm+=Af;W8%clV??>AI+(W=%_VNyurEj(Vx@ZdZ=gb)GQJ?LI^wNI0!fh*c{U&$crT05Y)5Qa3xMrBO z;4$lxsgnV@8L@W}^u##|qSU?dF0#z0WQXMyoKze2#I~Z>a^;*?SC(a7%=%^y?J&Fv zbdp_IoYYUHu~n`z)ux5_&gSTM+VfbE2iAHnx!DoD7OQ)Vsh@-1 z7}HUZP8SWj_R-U!(5@OEjip4H(s4 z1V#k%mjcrRcWn+>s9$Fh?dNkj;76M3Z@uyzcU&t~cIAfq?zx#fu&#?33RMSG=4%1l z2hyR5ijv@Tg&?PCJ|~O^SqC3CWg6f2ko`=NCh{N+Jed;{NGqD<^-(V=4kbiqth5DEiXZL<>+7EP6O_W1;4HB5Wk$xq2N_m2umB3!9S{u~3AGk)Ke2HLh0S&Y z97*5&DeEVU$zI(1=MuDR<4Db5;-9k|EcS2=*)p65*}D{*l4UJj9;h)I7`k*gdKG(6 zVQ=Pl_xSuH>uE>iMmRxB5KX0mU{b7Lq%dcTobykp>MO_?)v?o)u;*dyHtWNIKQ(g5 z$hwPLFRtb!kHbQ06XK|L=Uipx1mP)5=vVj%O|4@=Sy@dT7)fJfHwC$mlFf#t9i#+b z$j`EgE6rMgm{Ne2VrYV-cYp!mh){0;ZjH}=vSD=90F2@SqLxAo^Fb7Hp_>-2fQ+np z;}^yy9iKMPMC_7{!>!U&rtz6qNV3OkqD&8wz6JQ^D>8#bFm5|63Bb)K9zbt~!m1|C zEv74id0<&gRkQ#SfB~U}00S~Kl1E^0je*)HyLn~&rFilp}n*54YGU9!(^Om?IMl&XfLN)(|s3F7rMbP&@;kbcH^#JE^v1F4A zKvRIxJm_8;$fK^xL`!G*jq#;Khd{6DfFsrG?W|9|kP{eh^#E9=IPHesF~o%H^#n+x zK-xpeK8cQgB}5WQLHievaz7izD!`hK#s3je^T?9#3 zf<$3JS|TVGtj>YU*}MrxjU3a-2L*DWscXmX3~m7}!!B%2793wx_c;ai5Qc(BAblIw zK9@aT9mQO-%kZXnI6W-#nzHX^)b15S-Cmjoi=n&7mSJ3I1P=;Hvxx`fyGG=>|okryhUgB9%&W;9WOoNe78H|MsL#eRvlPu8mGGN5;g6jcu>d~ zUF%jwY}O{dHFN}KRii$VoV(0094IF|Sj2c!qOOoKOZ%lOPLY~o@``lZu3NzTM5X(P z2oepJKaib7_V^cHCT=-c`~_-C2byAzv>0%A0$_(dE_neAUdcfw<8{psKyZLKcCP8@;|{- z3#*eZ2$S9mYdi$}{vdFYn4hD-zwQDHrgUc3b!G}X?T#L3M%C^jcR9TU$B?02vj7|s zraXkbFuM#F>47+mp~Mmzd#^~Yug3od8>46-aA%_)78aw_5rWBa=B3;6 z;@!*?&|%FA^%=yUrl8H3%!Bc`cplUm0L~>CdmA{t<7Api75IrD*Qb@NJS@FMkhCQC zP)x>9mYiE0)a0jZ0OgWNqM{G|aI3{d@ljQ+-E}L^FT?w;j&+(5hJWO?OJ9hNP?kWe0*xj{u)Rw|M@JyQUsYy zzAh`et^vX`#_YJ(p&No+Q%Z;rqhZta3jZsK^C z8nCw6uq4u9%UO*CE37|lZ*1huufWSbTZ$C)y&kQeDX_Hz6t-}~Ab#RY-boif-faSp z^#1o~`fQtdRSM4HCguni;r&|P^w!}N`p%%cuCg%@HU)iw+;r3(H7P_o2|RD4X#Lt9 zSk(ndCc_Vi&hl5G2gPs>2PQNzTOtcmt z#X^~{0-+Th{aGL*=2fI6Bp1(X_Iq@;96@l%BS9oMM|>asv-8JD$M>JI(U>YvFQ|@h z?M^W?XAt0uh0Yh5-!OOn;T~5&ECE<({-{xZIFC)DJqXN0uM4EP;}DuadUXly0nofZ z;ltF@T&TnFrx5w%Z1Nk(K^meVvT4-nA@iDHZ zopJwvy2t8**vMO>*o{HMe%0VzT{()_c=_hAXRTmq1G6U+KgASZdq zXiV!a8mw3d-nsej=>c&(;6mm74`S(MNCFSMoeWL6cis}Spp>d%zO4E#`oy)^n_jZU zO`sRDX;4512(&Z6hz#C!!+jF_UBZx7`pc2Pn_v8#)&9Xr|CWil=y|qp+ww)|o&z2) z|64k+uCYtBT`|tCQXZEjCwCaqa$j8|ZrR-^YxmJNW=-b?eWc7fs1SJ0mz3TA1Cz$s zL!N)pSa=#Fl2q)tA1WQ*j#&TODC=cS6#wY&w%D0hrBYi_TC~x&YWonJ#(j*?N<30e zYKQpS(q^p2`i~rZ>I8GgBQEl!ipkKJlgP1y*;Ek(bNR}SgR9+1!b4hrcB&Yv{Q=`J zApY;N_DxmLZV_a8tNLR-e%} zd_JBGz*7D3mT`rR+pUWq)}ACKDymu+l~kB=Fb>%+XOXAfOEl)q%wZ)Y5>>E+p+l3c zGY)emQZOy3I&&orqHVzIy`?7|j{k$G1g()<+)7j?ob|c7PE;Nx228zk#vEPtZ!Fz_ zjJFA^*d;vdcM-^4#px_dU_($*rrn zw0m~NjZ4f$fp54|#lal>x@QN+vpQi{SM~b$7e0-92mX!$?&Vc>pO3!5mi~rp@QmK< zb*>(R740{nz8X}1sdzbcIVD|6^QC*~Ju`2V-Nlf#X=T--0p)wGx`Sy?_LMZdKl&!9 z%ZDVgRIW0r=IJNYXY~ek6jfRT{R`W7?{z__P3CyE-!7Ru|9(kGuFkd21?JZ`v~m^O z23IVbGK(av)V;?*B_|{5#hQdY^1BAlIIGQfccfaRU4B!F&~7_9NnAnc&;?z3G68LZ zD?bYHFDJCGZ;Vcu)l)_bwq-vZWt*?X62_l3J}p5T^bo)Fn_TCt6dCso3VgOj9&0f$ zAbb9CdlhJr3v&2djCTr#X#WV4751yUDxG5N(p~^^;ar1$*hU*)x2+dVKOGf3I+>cJ- zQ``?tgA7_T+8}I}2~%m=Se@VX;u=QEM!R4<*lywOfr8dj`ua9|-;9^rZ2L$)TYIiv z+k$ykC1N#ZJzpN@=nw)7G!9!|acX0H1Xy>GUe#VA#unP0<~vG*lqQ^WL~u>HV)6d%pZl;?h?k1$OqYP*>l!-d{o9uq5Ng1xo~}blhgewc&5$Z z<7w|f`}W@tjRmi8t*}6oc7rXd#Y?#whra}B*;TOpl8LMgWqsV9Lb5Yv&j~GkMWgS6 zHLOn%k6G>^bF}TT`K*ekN!6{<(E^M{mXK*!-2WDc?n1;R&mWC*sc@YeMak^^0rKnE1u@pcU`}{cu}${YX~vcq25a7$Ij1xvY9P#6(J6}T9Oam z?)LqnOAzI{?6Cs_uDG!~ELYKuB5+B@1ZnxAXbJRxVp-<34uet`cSUxhe zm2biFB>OZK*Ab)Lxg$kng^nk*@@zj5*?*RtyS+R{Dv0OL;{kSd*CNQ#zW0>6UR7?j zT$cJ_9IJ6$PTvt7V4IjOtxzA-5>wu(<<#rMD+WLvbicT1CF{zwzUnU1rtvi1nc#X# zzMk1Dlv^!Rv1)15*fIvSS0s}j2*uBHmp!95K&PU@*``$QvZIZ`cx~XBwx`Q7=Z7Qi zOzW%Jya&o80d)g1f)V@qI$Magby@>yrJ;>P!^};}Y1-_PkLCMLME%l)3EE6uM`C`m z40Kk-e1_Q)eUOK3$5j`F=bkD{Nzo{K{80)ZskNn2yKw;QZ^2aLbN@XBoLqHw0{o3N&(C4wMvy9X;)U=wBf~syJ9{x@m z|1S{Zp_Es6h3Bzjad}?FmZk9xKczUytvO$nVUxKyE1ag}hO52AbyAsfZzSp?H5Ub| zjVT4x%ea#Ki>0|UBwrX7Y zYnwgF+5yu-VqDluMNxdMMI*!boN%Arb8Rry0o>}-wxYnE-Yspp{KP@TM;5O+sn21C zwEKaM3AD=eD7_0W#Wa*LVnp`wZk~MO61;uJdI$)<`^J~8k&-|3C$WVh@l0Kq& zpxoGS|G)3D#u_0PE_=Uv-YuGyNT7tuyUn$cK?Ikx?MrX!uCC9V)CH@uU(f2U(WQ2I-je+fy+?QKopJ5r zSS2Mtup2*-8D&_y_bGmQ0S8o;edi|4e~Hez`cl!fOZB7kv+?{)2IiS@)1GAaonH^6 z+yVEF;ReJ|%`m)v^k9W-svOgV+AR9?yBLo-Z`BL~(cP21o&n6xb-rJg*{$w#XY;^ySdlVPwrz6zUxW+e9l4B2-#4(~h zX0&c&fE7Q9A2EAsy<9bKZasbe3d(U12^-?-)mi|+QDU2`HTZnj#_2h-##WVfscQQ; zC+7=G%mp!2wlHMHZ?$?sSoPp(;gn9}A~9_`j%n@4uw?_;H&J;sPh27Kj69xG}ZBy~DlB znIkh&kC}OnEEQ+CM_RZ_%?dRQ(+W)uZE0C)Hq@4N>KrXIt5e*5KKFe;zK`#}@cQ9B zp3m!bT|nRLLf=;qD<^8$5S2qgV&)NdFhhDt?Ax8#T}f6fjKC#MYiqa&Ue7k3wSr{> zPV|F*_4DP>kcSnj#UHGJxegVbB%5qd-*!ctQ6kS}?H6LQC6=my^H+{TRp$i+h-2Rt zO=Y+^gLuVSz|Qcxk}}m#XwoN?Y96oZ$vMQXduRg_01XAB((DC}=X`^D1(+)0#2F!F z8gK4aDL>KWR3HRDVQ~)g3Ri4F1!(7Ve))KGC+kbGy`|`UC`cc5#tjd##`CwKP|xb& zFW)h9Sa5;%DKh}+euFKuxajWksP%@5<=Wm+BVM3$h4g4;NIS~Q7>SADgfKbXY%~R* zk7(4XSTjy*Xn)+PLfPV&iiZjB+4198K+D9x4+XoH*tA8qaVI;4t1IK@GQUK8oINt{ zUU9F=zKu)~U)2uxJC9!HKmIcE7*VcWUxQm@YfIQ}*js2X<=UAdw}#&F)yZQrAn^&d z$Feeq>!wQw?)GcT@2RRDV&%UX5n~#QIBzym*l&?@OWPJx|Ay|**FSXiF zyDU#u%n{25_QuP53 z|ASiK{6Y8a=!Hw~kz=`{u5h-rpAUY$Zu|&)ww(f$6%82-v6b;I`bpEX<2&__kE9zT z%>`)d&~{nn-S{ok2jhxZh&5nHUgdb3k%;|$zRH+fxmVfY{dmVx#uv8|O&)_|7pnS%4Dz3cCAvG~m$+&Z^-n9o)wwmeD36X9uu6xHwGg~m zZ`EcGH071n$!-U4Mo_BFBqp*_GFqHtKCe-X2Y{TS;Uo2;agl7!_MDhAP0b#3O+D}S zQDx`Iog*3G%_fjE;-(BT;$h2CkQu;F_qhr&=>e9Y1-^U!gI~PP3szU>#DRX^hH{}d+I}gW|J?8k!?By`zOmusY!2%!E=-*6 zEW0W?@VzUDz$wOIZk+cXO|t2&>D(9zloPPcNMJd!rYs3u5x*!)sE>W%bb7YA*|J#I zfP0t@PfU^>JfwGMhC@Us+%aj7jcxwV`}&C$u!hyF14a~P7c3{dvUT*#U#-2obPFNMX0$eyn@t!EExM4hVH zcd6`Ji0;E2-2mywkdrm{ZGIF^L1%zvY?l1XmnQB`DaysU6?R>$yRZ6i(e9hY?uyHj z4%?#m-O=V!;Xle7E``^)Nnj6b_9Z^5^Pwi1vWj}0%D*;xziU3xUkKUl zxbN5k$gp7;5;+7 z{ml)>q)eL1vxR!v^!=I?ng_dIV5El;8NU$?qx>W++=7d!zOy=-M+C^%ZCE zv$ATYr7sI;Ch@-58As)FPB;|fqaAZ7h1sIJ+xL`8ju#%TKX*OJI==Cygpi!`E8=4F z>-H^>{4dvN;H-Bm z52P{AEe6Jli*EWRvoGIc^=Cx58_I&aRrj%L-=?I|9le<}!O7s5akYJq=r(ITlf);W3L?|o%^c5&6p zjOd_~zKwMmta#|*&x2+E+Teo4emAdy^cMq%Sf?2{Jg`?uZD zZ(3pc$|0>}r*-!~|0?Shh9dLTkD63<06}wy-;i2ENOaI;OObu@<@kfz-Ul82(i%DR zdIo2q&V-=VzM0J$xT)Xh=$i$53W27xHF@(~B7Pm@c;v{}wZUs;AA&xUzJvbFFU^bI zr|-@-ZU{)4#X?QlaT4P4t1_W3|t`IE~&()kDAnE@DudG*=%j(^*dM7Bhaz z;V$S$f}D`4OfHiw=|fn)FUa>|JY=7<*e2Ie=Hjy!Uy5S=JFQFE=Jy6&$RG`>V-{26 z%CGug*&q?F^kKo=3%=veCgkqw0mIce*w)2X@0-d=E$2x-lF{y7C^wI#Zo*_=1sZN%jKGyUuNf=pQ2 zdWSg)@9|pyM}rxC4{)`(FGm|cPxFvEt0(4OJ+f$f)>;LOND#YPfDlj}&R@Yb*2@uk z=uOK#XGBUfU%pB9I}}@4e#<`?lsas&_TkAM@bqOz^JOiQ2kYz2YvzC-X8<`IEt7b) z<3}y&;bHF7M&;dIN5E;yoa$=cxGT7=8hoCO9a;bROXi}@+i&SUajW^)fa}79E}~gx$OZOwWct*ai6s zEQ~0gBUEc$-ytWMvWaLrqxp1BiemNya1l@6Y}`25d=vbipuXnt>g7bwSNoaphx>F2 zO**Zr79YP+yzrqo?EJv^KWPT;-9z{PD;YUAP;aUD9y_?>&We7qydKmuPvwaYw00@- z`bN3qikiYS;gAYZ%bl%gUGo@-Fs4fcqo4o9k8zRe=BcY|gmIn{8ulH|m2)JymX^}o zCwXN?GKc3v5yaSAmCDMo=%lsi+x5HpNnNqfS2v7(yK|@d%$I9w5plnbQ#MHcwQ;oy z3Eh|D0?tY0vT|)}N&~y&doJos`*+?lp(s|OOH@A6FM2%bOIWPD6U;GtH9c;)@hQ0e zNYTo*VfDj{Vm4ga^uPO4N?$C~U-OTyU}T%@QZ?-k#<|_Y=i|A-Z;)wR%wBIcuXI4i}*}oz}Q+EFK z-=Ck}3_jcO>CLPbTgEUOg$bdsCKKX~*TK;)$V_A4F~8WmW`IhvUluFpQF6J z(_jYnIgL#wdtogh2Wn$H`rl6ITGJelgP&$&TE6a1AzL}8SbJZI-T!^ewQ1#rHe;stQf!L~GN8pO1YMQP(uj ze-trVAT_)8TgFSM+-bE5F}i%ztVJXyPUve+O;yRiwTqm}eDTFrBsMcFt=Uu^N1RJt zYF(Cwfljog%B$z7Bv4v^zUY z_47$3Xjf=}JO5}9ECgiL>rSvPH7h{p8-G?jZdEZmuCf+In^aH8o^?^y1J$`;{P8Ul z)L1;r86$>HbTo9I0+%PCT9MK77j0dD1#%z=O5Em8LNNj6Tr{-L(QNi{9uv@~mdKK@ zCNS0#kgxS6O&3qgr7d=)NIi(=JiIHnVnW4Xt`^er*aZz!`l%U;b$ zQ*&WhT;q>;?v6%de-0+3^r(zMD&FUzs&6*US$$u%pNqP^j#@@C-p(Xusb3z1Vh5N9??>hHOnYoSkUO!di)nK;rhl4X0V{XVOV13^j z{gqFUd(>a2eEpXA%$7tR>8FYPM_9-)p{dQ%UDd~U|#|XNu6YegSPspWAk!qADImU zbQT;pLzSs!wkYWYIB(i@Smv+XPBtj77xn-RcsBABK+CcDoHIH`uQa`b+;UlDJw;Q& zoxMJUV09Ea_N>Rgze_vVROg#ouZ2>q9(h##At_(`5ThuO5y|#tg*{qvL)pA!&`*Lb;$03%(-46|>VN+-N zmKC@<#XG85?k>0%mHYgBmHORw7sbm82aD7~)nOg#)l5W?n1s$*W1GguoC}xlaT29B za9!X5EUMFwTr;nZG;NLZ1}^eCVcS*UDx+g0J+<9ms4e?l~_kZr}Ik{Vc-H`JRrH&69)W3oH~o(DHfZ;XBZg}_!Xy^K^o zHUBL^)`KH|y~Q_uOj=*%kG%uYsJ9%W|M_9xRQ7VC=TF%XRT;IB=CsWR8r{IRn|BZ; zv3O+Pc`4$NMJ`(R?T@iJm*^~7D-r%l;cLq=($VUVIevfq%0|kLoIAEF`4!qN(kqT; zc5=g^Uw`Rd(`BjCrzSO8g#Ww%(O3WG513sot?<%}Se2$Oq35g2yoGWr@AZSCLRYsS zr@Ybztp0FLXEx;4Wcm)B+upXgcyqE%FR_dch7G+^3yxXVczLj*3)uYS**jb|O_gGi zsdco$=Rnp?)#~!}AJ)zOdwv*J*gkr+ah!gE-ZwV7i={Hys5Vr5=xbyb=EY6^+N~&w z?D*6b1B%WQ|4ZfX&%Vh%7Jor~(cthH2b-IZQ(5lZ^?cB~W#ykdZ@U*y2LEN4@$K&qYJ#Tcu)Xc^-4O>0JYOGk-Ymse2QN3)xPleEmh(uwsLIsLrE^&q7uk!D%o1O~VSFUNa*LVlK81kcaw2*^snym|z7SOX^(sGW%Z zQ}#=+^V^iVZ-05MqSD7Ko)Gl4%#PqERW}A9;zY2Uc;~h&TR(_XXmc#t{Kz-h5uJXh z(IZHxG#?r!gnm;kqJ7QnS62(;7eOkDxS`31;?fM$!Edt)k0S!wV7cy2D&k{>S8e=L zS-GIuw7<-C|8qj^^n*IA6c`^t3mveGrF{}m*X~WC+;&UzCU}@C& z3vXeE%=Hpy{zqZyy{6WOk6X-+j3boI@GPt$+WQ#?L-+(^2F#bdkFzbcjP{sukC);h zJIIh|zyaGOU?ek0ClR_QR^g{maS8yY(-E6O#qVS!4PPp218a^UI~+AQU9smPK;bM9 zT%y7mR*8}2Vbh}1A5>r)EA10(pi(N-c!}eS@(Ek>ivCt{fDMfmL$_VS5Gfhr3xL^D z0gxrYuldXv0VFG0@w-rQ9ss71k>6*khf$D96|DvWf?$xe5|FrUt~}rSzvfE5q5s+Z zv5NR+AY8d9bkZ5}aZDrNO$K^?n_oHbHZF|6Y<#*E8q9>)gaPnm3O*V@k+C>-izbd% zT%AGE1W>;v`ORpB^ch!6IBjaeAX!9)e5DO%!p1D*?~~P^)Eqkj2+049MC~gg)(hS7=KDB zzEZu8tiHTSsf$LqqqT~m&U7kl#5(p-uR#)?=0k>`xf%1}Gx+0bi=(0UqQ@za8N`tp z6oQ93F(I+cR(x-Jq6IA8(8rSjspj+FqM%99+oIFzyC?|q9NKk>yg)~~kHV%=3J--c zN6jmvztM;KkJb??4BWIXX@k_HqKsSBKy^VD@HHy$5tf7Wv-qwU3;^wE00#?6^3ebV zVTaLd*!=j+LRPJ1faN?_{PtW zw;Y30z={OhiiQf`*KBVsvBvQ#(C>#pM%aNj)uDENb|+?bS{GIASSoR1R6%CyE)^Lt z$;pY#P_Ki>*WHmVL5llk)~$PPnvJOJ|iv;6ReB10&*yp$M+*J2CE@|#`- z;oc6T2J9J6ojFqnF*K+byt)p;Jw+W5KoN)Fr)ZrPwny?j02cg{5vXo3zW!@aXlisz zI;!_dhNsjPDVEX^>1|LNN_LpPod`Xv(gI1PBQF6U`|z+*9b^+ZY>y+Xs7f!18ZTv8 z@RaegZKif)sLn%(7bhU?_2p;D25{xH2tN4qZrvC$)B<2ZJ!O$PLs|SjSZ!@l0s(vC zmA>KxVSY+peim`jP(yn2Jhau}vul-e3;bZq9s(xtj{rXw8kJ+Mw7t-`KoOC!s@>>= zDgitrAGv;um2ZmHOFlL!%2oonD__046AmkmiW3tDLUI#i^y8ir=0qi06!@*C<$1Gd94w*1UvBKLW{9=vVC#HNdU)7WO=XC(w9tej^ zuNa;pxc^c!kyj5%ihCOXeIy;9e(v&(Ph|cJCfJiI!6(lEO=7LM*xN1OR&} zlO4(oJ(z6Z-f7^O0UV}5j%OJC4uJhLjf%jVG_UssduXu(`oL=>-zC7F1wb_YTvR$X z1e;u&KPpLwt&;f4uCEJ0a63BlPJ>)?mhU; z!F2}thA!{cZ`~WMFh$1N5~4bUau-o`F?d*EyG*B>#}}JFsev$#j`xMllrO=sQ##ra zYu63vw>C?*Pu(D0Xm0DIcKts^_Zg7#LqSagd=K_p$a zo&u=N(uh@yyNj6U#sEhMj6rIr&*-1%I|lVZL4#&?<~?xGaY8RXj{c%I;ydFPW_~8O z?N+y||Ku@GDggYFgaROm4&9(D#jc=m(T=mkCL32(PuHBv7Hz`rK=FOqZ;JNoE%EKp zkfoB^#S+|T>yZ0{KOvCb8M!Q`Kb0Xn#VmEK*i(m>Es!!T6W<`Snf^(Hfn|*It1WGx zZ4+~wzO#_fGnV1v01btd&(`bhl`o3MZ!a-V{xTEe@sMZ+rEyTr)&l0}a76?^=T@Yk z9|N8u^ItK+zRyt9Xh^#dcV7Va#@mm#$@w$FiNiPE^~V=^9w#Q-U4H}ppG=n)OvypMEPS5Y+pIA8(0m3p@wGqKyb`8514 z3p#+(RmJuOP#VBoBATZQ-*@X`(>I40DFfUVUHu9VO#qy8wLRBehN9E|c*vK>>0E7G zGr7*3ND6J><{MOBxsl5^pz6R|JYYHgj#%crRA4&$12mBS>|3<~_0!7>I(HPv00lfW z&j{lD3=oz&BzyWLL-_LHGin$Bl0!!N3pL}T!PQh5SBCM=r%mTh$av432@$(DF~BcF z+g}V##~dw z%K|w=fx*1o5HVqmH|A?iy?RjCAsfF z^xkTVL^CP1o~DI+PPOWjeTA1#T{>$6kb5&D7b!S#f8=QOWi|Kv?$-r!p=TRPmSodu z=SKcJv^O8diT5Z}bUSqt`bh-NKYB124>RV2?8#P`2Z8Z|>9-mullDNSpPgh^f#m_9 ze5t?Kepr0xO@6@L_Pf!g>p!)E-{$WBf*`;~!Qg|Dw%Z)9UQph>xAeFhV6kREgAKs*1JP@HX%zPol=h3cNi!{aa!Q z#2Uj|v*6yp8v5cqRn6nOb(YO)OTCKe+bzYSH`5VSVPd(d7HDgYrfrX~Oae<$80eV2O{54HMAIGKUE-9a-`0qTF;|xRTb$kF8Kn+PCjw zuQX9vGtSK#%Z~r&quv)?k0M#!vy`Ki&fEf}sEZ;Uo-L}$nA8z)f2EHuP#a zW3HL>Q{RukFVbxKXg{4b^ExmZFE$r$hq!yxW>w8LAD>pBZq9>kK;J}ha?Qb@F`moy zqPH4hDR`%oX{|svtm-5+PE57V@ETNvJ95P6Gto|b2T)9$tRYWC<;rFW*v0CWt9Y<> zV`po}u0i49lLIr#6{R0FG0^~c`wXZQhHy_eIT`Btp&WeT3#y#7RCUR#=pGYT|L3Ne z8?wF;`%ps@l5%9b>X4LSF&nu%uHndagN}l^+W)bRr*@ie-%0=CV=WMduS>0+kKJ?> zDKNapiVS(#fn0-&TcF+602$}?*e$vk`zmyBk_;-}Z)*GMjM?QGr)pm|8DTVv96KD**|&S! zz}L5OLGU`uy|vi<(|fDawoLS88!mEy8m|zTwCvbR+NGg?zc9)jBN0nU3e$LxX2g)3Zg=#8u-Mem zL%Uq(>R7SyS)F+uUS~LEH4nG>2w#soJD*rmbMQ9rq|=U9an!nkf2D@qJ{K{qhS_or z&keihSIFo8O?ZmzKW-h7*juwBA}Qh|#-%Y7kl&>`#1dVRvq3H<|63j5zoHc8-m-}B zkDqNXs#t$+XKMLh!H4xRdZj&4pO-xBcxhLD{5E zZbim$mi|xgt=8vqliwVR?(O^}E-7mHd%yd1?|ok$P@uUYYgAC5$NaG{-TG&aUHlw7 z30|)Oh*9}=v=o_&Kl@A<42zBC@Lq6W=%E-n!z3BGRE7-0n<&-1NT;ElE6Uyuv60@q zrDBB|M>Pi^(l`^WLf4_GkGi{BwvH(<+F4pEEp8?RrxWJjMty`CDk;fd0ZC?pUW@-) zZg?qo9R;gHCA&DQtO$fNy+E9+j31L@yE&`yE8eB_llW$>1a-=;`jA{Yz*(bL2&uED zDUJbdSs<4oMoX-H_r;t`k1+_l_4ZJGp940wgaZMdKnWU5ZUrRNVGxjqBcE=`b4=mgme1I+7071s2r zvzfQ*JF@7-@qh0`nD87GKlGcVwjje1SnS{o*CbPZxBAyGSEC=7@-pK+cO31yLr>{z zc#$HLCgCXiu8iGWQ-YC04@~}bbr0J<2CrxF!7*$MqS`6WfrU8+l<{|0uWcmm!z=^^ z=-sS-#6zOaJC^Z7CfdV$dZa4|OlK1Rasewb)%HAX#c*fO76Bc}9mBqkrgao^>#COu zY~*GkmVg%2vn81BT7fD>5@UERIaP`kjn(Q3X=>AqGWI>jg8c=kZ#w;P;!7vA4O1=b z?5}ABe<8=Hx&vvyI;yaW8LVX-x%4dk_F>udI@o3LfpF0oxIG@4^SD;74Epw{)@{pi z2~DYpM{xP;m7aK>TKbb(__dx~Zq^bfM=bH_9Ng-rK5Mz8Z0jgr3M^N^jma1?pp;M| zPuJOn{!jm1qA}I^=vTP{v^m^! zMvY_nif0LgO-o=h>eA7`Fm9X10tVv$0N?6_MOy~{cSkLZ2Rk{|305Zwm9qJ)UHw#o zOQZ)xF?b8W8bE6T|_(5c${E0aADPIy8rST7TZ*zJ-yVd^?q{C3zz z@_uaZUmJ>2eM`d9?wSU2*FlsSH%2yGaPAmWBewSAiI-8~A;LEq1-d#=?XLB$F_S@m zv2%&ctbf$yTIS~ydS&r(i#FKlC9XL)^R3kZjj7}m{%2wLyF+n{*HXW7EjLCN4Xy5= z#}9MP0E=Jjbt;+~R7&DGn;<>2Q|7MoRQgXX}#Jw%w6T-DIV0#Tbdk9!Mzy%xPa)X%I z8>dRF#G1wd?_pX|zU#ympFEtwDM=C@2$b2c&2bd58!^SYB#42a?F3LS^-g1YH;_hx zoc&p7&ICG;xEhk$8S>-{!0-zSre{k{U&Piyi3Ug_9ST^NH&KL9hfeVxHzGL_1=B4m zGx8j(8hcEqAyspCk>Khs0ywv4w>ib8?j|nHR!*AEap!CUn?mQhFOu`XDGmnQ7ph)y zr@HbZc5uPf5~G?pX+L;Pacm5XtvhGw9izbVOBPhxg= z*2k+o{+@zBY<-wrR#*e)a%0KQ!W-Gm*OI!n<|m6|U0Xz84+^--cJOPc8lIP*wFa|A zlxbj~ndCx8Qmxfh@Dv;Q(5^b6XgqN(KW~*n6#cL7b4~U6&tW^tIWy92QK&aZ#MVLq z)#imuODv^q7PIX_4c%ta@y>b5;K*eViowKY>kroh;WOlhFru>|&rEz<&?D0J8hxCp_TBQptA$6AJ)8>$$M@!9q&B zXHwaq&*V7sxlb*%&4u@iA99`>7s@d1{$B0X3~&S))P?x9m{EOeg)H0*!`5%~$h)3qCEsncRp&{OEg{?jl%lpMubSg=m=*aP7ResL|k?F19 zu_yCTpg~C~C8t=Q;rQEI2q018yP#DPjPDKMF}nPBrx|5%F{O7d-SOoTlAH9Hvi=1f)UY9;j3c z8UQCb-s-xE^r=6{{%7${v zqfH)PMR3Set(-m(0S_JkmL4SpSBFjp{81F|-MB^JJg%(ExCZ)?dg_QWGF^5^e_m2# zjT+J-JR3^7zRTKYSC78(MUvAo-$*XKpXJkV(ZPg+!i zD7iaapUd8ZLR@f^)7$Dw?=LEwvO9lOT|LE}Ct~9mhB>hdI22y4l7|z3i1j>eluQoN z$W%pyqltzs!iuR2*8t#wVqWW;$2UoI9*J%i`m`Y8X=gnIVZnQ5?$tuEO(qrk;PvqU zSOyO|-mfs1GVpGDfU}yP;NH|u2Kj^*?60r4ZGh65U{iAlr=G(yI;Xe9di21+ocdTL zn#Ht}vqp?uaRNVdG$O2Cz*C%dD_>MB^@ykdDU*S>pb|70s43ic1qE?5Qg=|PKA#{n z!7ngNhTBQ5e|o6pNwtT!sU{au5x3oj#%8vkmo8M#_d`_=`E}B``YSvV$g(rYjX*XO zu}wo2KDV=RK}9T{;J1^CFHqiWl?;-Q3;WqHu@JVVfQrP(P?%scD-X>r;5e83mgm+NmL)39Kg7(!v< z?C5@j^imItaXb&>xvH2U0_&1wL#l{u#N;83rMz$mKC-};s^Ab>keUtirR&wA^1mm@ zxPM^Dk${dayg(J!eY3#iI15`rhmHTNlr5YCGPI8Q4+1g%S7bOC%u5UgjJ(NOw*nrC z0NJjA^~E^LEw@r2$TJD5*;!OL#|fPQ<(4)jubigo;T>kUTZ=-XJJ=t^jkH4SB7wF9 zoPCp+#=p-d)YRVgP%k6KWgc=%{@gH(0u6(~1Pr^UUCV4+wZ4ioLx41y^LF*T>OW;n zP^Wq0r)-BP#}b5j!Z4O0M?>Vw6NVMh*$8X73S93+;Iqe|t96T$AEOOU4}(5;>N1;n zQ$d*h{;Z{XX_8H%HJSp*oeZf16T#ja|8g8z&IbFz(y}c)|Ij_Thpf74T5`G zC)OU=T{ngA29rj7-=iuw4i#CDK_OcO48UyXEO+}K&*7;~3rhz(i~i$#p^6CbRx2*q zNX6wl{Ilnz{P+u4Xx+~kZ8%jc=3vn~K3lDvW$_pMG(z!^F_>Vid5R3j ztjcKUp+0@|J<-u)Q4dp^jv{ul9@WDbDCp^+dYM`@Y-CCEJrFPPuAOJA{LuMg#|N45 z%yj@#YdIggs@B3yB{M;s!z5_GZ;VXn8NqQ-=i_Fl(}9^ur3cr1daQe$9^L@{F0>$l z!bHjmt54kTz+k4_q+kplRsJUF(5yQP7zexp)7)iwdKP)|jyW3csMQqAMU7PLbBZ&~gt zTWg;6uYW=XwFr-sd$yF^$q0W;n=(Ru2z7mT%?{L_Hjn19!i(8>A*;9mfsvc7T3zaH zae~FwYR@o|hgdj?`xPu_7nz*v!!r~+G>ns~w@#5e_nlt;oS${7Fl{w`4|`<2 zS9|iB^Stfh0;23#M!w~R9TPK<01JZ0E)G>|&hbwZG>QcxzDU=$b{Va+vqBgM0|Rr; z%>*hXff?&sEFSfMj94w?3@?!5^hE=OJtQ$AarJMbw#iuB4D4M4j53opxJK9|Vwwl= zOeJX3f7r@rcrcAw7X86SY9*EoAOsmvZi{__>PeKBDtl5RePfiVsnWE%gSib(*0QRf zCP5Cod+&RI)^yhQ+XczniIq-zzHKn1?U)(;1;mJDE@8tD3h%5|m#^R7u)MpYF-*+aVAW5!^ zK8B-*XDhA78j3Phj+NN)|1gL;sTnY+M!%wy4oE5tjhF&Wl(XgtX`iFg+RjO?1RSiT zr?+Qr;1M8w@q+0Ob{|L5_mds>=vxKTwo`D<48b|IP*O1b9@whA_B{8x;z6r3?<$!7 z$=@lYKlZm6fGwAv{2BDCPyO=Y|Ex_`NvEgS<&7uuftmMh&P&_ah_>D7&v%_`_R)$s zkM5&Lvfp->N)*~1p0+}Nzq_BzFE1$%u6>s%%NWyqe3fmU#NI}>)ZE#-7=ISLM%n<9 zg>8Sac{@>C@9j3fU@2OEKl$?osdtJ~vq(PjUA@SVQ7wY;v;wCiJ&rCro;3CTZT3GL zuo{I0dXD8lWg8t>+v7>LO9=-AwP!AXU|b2%Uud8D{yNRE7i6)lJ$2;XO)4jWhUOg!&_CVhN}%X2*{9AvCdqMA96o<@`bta zg={=E8Wuseg`tw7*LQuGvs!Qce(QlbuGu)~;a`-uUg|pnZt;iG^AQzhz7n|!(O2zM z^BvffDFOufMQA%XcQNf+%f!OP{zEr>Pu)>B48m?+^nZg~Uy%%axweWbtudA#2nD|S zbv=dn9$W0ETjFn0&Tn^zYA{1)nkg8S5 z@oZ00GXOoQw6j~JT>^aDD`P06DkJeGPqT^TNB&%f>6(qD-*uF3R1hm%aNqB%$Ij7_ zMa^>zooc_qdKXL(J%Ov{pE9Id7(X72uak`_4%4WQYb-iI1^gdA*l?Q<{s^f2zxZH; zvSFk|xOBPzMf?rc>23XAKKSzgiv`>L=JZwIYt7DNZ03 z@D-0rvOmnsEP~#y(s#+*L$K{%oox>l*x&VdwBpZB{%qgnnIVVre9^uzbX*U6CDhSN zP4^Ydx1lxknS@rA88>To_`O;Ju~1&6CK9Y4FAJBS(oa`uL4Q<2T>bOs*9aZu&Idcp2dqG5@FAR> zM$NZ@xL3{@uJ=yU;tZUgT7D?)cDQ{s>d!33qUaB)l-Lii`ueZTbHL73*QI)Ve!Fg* z@*5;J`a$?Y=n?fxIige%EyOwZS4KXKF|>ZbFA1@wo-@#O_60S`d1W#fh0C1tbTfNX zgCsi>W>gKg?N50r4jq+#UcgBd)>CDDJSSddc09*;Otq#MYp$ny*z0wL>q)(`C;ox) zmtU)Dv246s9m& zsOdG*m5_L>J#!+7xoYKV`;)AZ_PblnZGQINp4I5H5bK|>m2VfNOawK?v{vX{It5FJ;i_}(TVa~} zRMugGnU=GRVf{x&Cg(p~t?s`3O4ont`jOM)lYK_5qo23OA(h?)S3WvlMSPj<6ma6b zRplLqnWbyP;nkRNOi0rxLMu6@VzQl4vkYt3Rj+ncgY=sDJ9lICW|Y!&Kt~Jc#(wH0 z;3y!cNIWYSi?vi8fcP7Ime3ytZb+jhOWiuD6F%X=F-ze#&$F}6hlXya=|K5tSC{uG z-}mh-RW5sT+tBQ&tC7!snuTuf>bj1f@wMFUq#Tp|C~T0<`Yn~9>Sbs3Ow@XQExepG zqvHJE7ni;;DX~C>h)2VogpH#(YDyLBebjw|3d9AJYyPf_$Aa7@G1it~EZM4E8*F!z73pz9YJnSHD?*sQ+GEwyZJpJ4O03{T7s$sj)OCEiNb39F*XF1fk zk0;L*)Iaz*8a&&28x0sxO!bCgpts?=X+lzIH2r{=M^IX8A3r5Z7G1XHsCtp!>o&(i zO5=DK23ZX8^aUZDnHXtK9lt|JL(PV(VV6*}8yoJH$L2Z8egkmZrty$ZNp41LK9o{_ zbH{_ueF4wt6RlLByq}7OQ#l##rP-?BOL9_u%0O7jwaN_NUUt;s10WEVTr7_UQX;d- zf+TYKywi!xfrS3Mf17%TdHD~bAl3o`0&nZ6vJ?$b+_u$f12wz^>FS<@*D!BNK=ULW zLg6jTMrJt5e0Ap=MG_FLB~2z14EOvdF5ZjJ2@Zd(&HBj0+c1GLQnLcxc>wHA>|2Y& zWIj>zmOgq2^kNB=52xwG1=6cm8)s}Jv+0Bw6bA#TgqpQirR&^wYEIE@9Ez4v2o97% zrNv0gL&ZySR3_L)xLlyy1cZr`;0DzUnC>c2YmNe*dVNd1px0R;Fk>6V|NkVkq$=H~ z)Q${8=j~J`Q)P#G0cN{8TE&qlU2u1>b#ARIEgH*o*FDwQiLyK}b*n`Q3OPb`#Z8yy z@7ZFVbkvNI`LqPz+u6bn({{H!-K(JXA%Cn$tvx(1dz^@vg+@GHQ*txPswLx&$aXVtXokh^mbY;#HVBYSc?wwL8GE~C>PBFq@-x?N z?p&phsx@VxU{G!Ab72Rro4yWWi|BcU^B=vsg^E8E!a7T-eKslnI<=`syR`oQBn<8?;*^t1f@QU&*Ol-rkvJw?( z`lKB`qzz&_rt*Ty+p7YUci93Hwl5_c2|`ZVIRila=riPcJWxrJ;4~e*|M#|?I$ex% zcoKX$FMb*3x}_>YVPh!YdT0g@a54S!@WB$y$(blbwrQJRGRv= zAe>9h?6i9B{h{ETzQ5ev{vrAPzdbGr@3j8W3f)xAs0T|?#fE`)%os4!U%RBBvtPc_ z@8rSP)+2G^#J}em@NVpw4-+cHprE#?0YSN9p0^#8_>p1lMFCyop^uELG0aBoA?)Uv`oGQ*LX zS|Xz23`gz?S8A4_X<3=!*0dtEva&+6vW@Najl=Jp|BZ9b9UhxIQl(7IE}A(#`<>Gz~!c|zET1X-2O~&fg)~7 zL+O1iaQRgh)Xv4dgL%^TqLOqoYX5J(W2fVJ(=0GCQLFFwv}F}?-gkK^+~hqfU8ai< z4pO)-vnTw6_CEkSTDtKA(bjF-jFA>mmAQ+Tt<>Z+kqr&MTH<%zZU{<|q6V$%M=2nc za;|XivcNN6LUp%;BRj`9t%e(5+#e5r-r zLG-Qb8^N$D$!a@JJ&E!7W?bu_ueR{XXD}Co+JYlK0W{JwUSWokernJCId}X7s@m81 zs4V9=wNh3Kl-2tC#Nu$(5KTP`;is zb2{iMF|*-d^|N*R{(4M4IkzHvd=ZTG$;kfX?mJ)>BD7m4 zP84`BFrzHrw~nBQR*G-*fE|Pv*I5@gN+FHcN7EnTf(3@otHq`F3g(mb)vg?FWny2_ z5!N6G@;>_cB?yCwy`~I_WvYK;Vi}?g^CJgOxkWG-aHmT+cjxRp03?s4O7NH&mC#PCYwiCXE!n zqG5A+kpG2Rg_!|VSSSOw$jdT`g)F;bA~kbzUZ>fD@-KX;{68415K;*%FMzSE@?$uj8^UX$JiXGX@yCQ98HG@g11S_4R---nU1ZN?(Lh{yG(>` z90B(qks&iGKSwr%uwsHgYxyz^YNXIJ&4llH3f2Mrb-xh%UDmCG+9!pjURf@_fEVGy zf>ySjzvs}Z3!4rPsR|0@hGVBA;NKXb0zgDBG3Y0=;D>9jKN4zKy<@9^eT{JUA*ORG zvG$|lY1100QxR1T;9(D`PM^TF;zK@ywytUt0xAr9a}QOvF{&pP_=O#*VEm4N2+&p zn#o#}DJ$m3xWonhl=T*5&JgwZS6r)prL0T;V^@YQ(q!kw<~IlH^ikcFuxIEC%B>&!iS$^z#8kw{Pok%*idPz(3&de&uH459&Swr zI+)^$rywo;dLKOxe^zj*LFbz6QIMRRh%$5KJWY$HKJ$&>%KSU`8nQP;TPUocJFM5%RBm;C4iI{mJ^gUspTtsSO@75(79Jvy9SO}Y$irXiK<%R^4rOJ-IqS$c&{w9VEvOuq(zrw9=exLmauKnB%zV!&v3xd+Y~a zLq5JfruyjkA|Iml?)2bDLD&Raic{8QI{VYkmhrc{GSXWo*|8!A<2GEy1FFN}gTEqF zlV^8j)B`AF*gr*=*If?hfsRE2voQaJysPln^S)Y5}-2i53*xX?xb#F8HRvG)3w z&W<0G$J|v^w;r`CI0{Qsvdm;nH5f!A{_MfrNqC|M%)fuDmR(c<7yE;TF?k*GjUfw99eioI@8c!- zQMm!oNL(oc!RDJ>{sJo$w#=`4C-ULx^i&4@=B?{E9nF11DKW)tXzLza2rmuE09el_ zp1f>trs!J2hQ{&`&9BZG6ziHb;v(pfU>ZWzO2e8C&*Um;SF}uyZ)V)n+pX36`y9@n z2H7cux&q|%?cnYV+q(7f1FZ4b+OY%4b?{^;h3;La0`p>e%U@SBajCPRk zryD-=nb}Ym8m`>dPi&feu`7SvQW$gX>^0meywGzxn6+`Ct&)Bgme`Pui)G4Qd4RP~ zmidn%`;WRUl9qdEWjJ_riz+7Mw_N7v5j&0q;C$B`nkF*n2?EC@;O@U8d)6N^`@lkb zCSbG;WCn3l<{khB;PS+x93UR&Zur?r<0KJL(stW$%_UNFaDMeJ5(w#?l)Xv=H&$c+ z2|IOMG+3fLPpbUoZ{JU6y4)E`_v4$Eaqs>g>s16bxqM^L^ll3EVRg3t8P}z>Q^J9@ zU1V3-ZUN(#GaF&L-44Lt)3Y=*#FV;7r+DznJ^dgd@lOxWy8}Kv>U+0f%lKv z6LI6~7WU#>o+xtVDaBx?t)c>p5mk)C=h@FRkO zz!io56@|hN8qol)@l;r@q^clhZ8~vm>UDy`BNN;nq4oHJPw?4C>H*Knv(rzu%9X0) zKaOwiRD%t5?Xmq1K^aaW!MZs=#${G~(&=CwNAoCxWyfctKTz)Qi1AO9?h9L(lz84#D&S^stG&}Qjg!ODR-Q?4=kF6! zgh8@9e=F_eod5VU>xiIWRWbYXg6`+&5zQcYISjsN64?^|0uVrl9P?i+%zUjVtpiS| z?P^8o;LqxBQ< zqr9cEu@RT}5NatoWl-b;uj)3Tc%FE6*~!(>(9Izglc9SM3yto=b(QRSn+ABP_5x|z z@!M&Og1#EyI6mPxJ9so`AL_LL5Sn%zVok(+c>O=Px^w=DzT+FFpT@7gt!fT=GRe?r zVr}GZs0+aPPb9>xihZSJtm<2w*x630I})K23}9bBiH2!AKr+O8y5or;8J+epXQ=xyCW)U z___xyd?f;iA5+gL1{_U?D8KjCxo+FYxv2B1Qf|b1Xiekrl}VjQ1-#a?S5Mg`qw+1E z<)?b5%1Tvz?@o1UDrUobgWWjqO;YKt-yEzKwV$0R%f^4|kB*nk>>o*&aABu?6cWSz zX>`l&Mv;f-(N_W5x7*E-I!3!cg8AYJe=ZldBheiA50wJk1cp7h_uI{Jp zDD2CV@^o3nLRoy`0Z{leKT>*eEK4_5pK5JUlj z0@{yn9@*w_|F;t2&k=^|C!d`W?@veaU{xi%{K#;{FApv6;(Tz*GirAiHTIp((jDCn zE0x?%L@U4Y7clax7g7Fy!5dqYSg&vu)ldHzU-|5S(JcRl3pE;qBr;{a?_+h53qFVi zz{;x`dF$No04-^ITRksJ&gqx3|LQo$?<>*i>vSc`uvBAH=GQ3?#bRBF&4^YrO1f+KsnfkN5s^e34sGLesaP8Cn^5y{# z^>Q%EbFy9CIMS=d;3&+^{Mhfx5ek^yur0ecDasSMYo*RE>mz%UkvvMZHc7!LyIA*D zm30{w-~73)q`{3{nf+@tNV9Pib#X9xMo;e{C+hbzl~&q&jlMQXJW@M+9bpEatpegt`PLC) z&!E%QZ+e-mGMBSEdz?u;hBVDcZHsdW9a4E zxi4M6+eACG3`WJ|fbIW|I{EB4S<+&hAnwvbXx$|YG-wC@c}v;#gK>Ym-FJ_RrFI`V zn5mWpTQQd z9^v4(agLCqgLB>wDHoOu-pi~l>~zS)Z$svMK!n2aau^IoNZIJvd<+$OQlF|mUnFU!exz}DRCLP6S5y%q z$XxdhEf2F14y?_ zDH!Tg5;s<9bt@!WPqORKe_z8aop)d--7wDC#7G6hFET)s3Gx z{$I0ySp=)YAb%v?J%vu-yEhma&mkq#;Af*(MogCgk}Z*axfphTldM6J8_ko5++J!Z@qDcMupEW>8ZMXS1T+(TZ; zC@-VD5LJ9zlS`Jcw+|gzt@3vOqvTZy3YCb11KzksHEK`K?*b{1A!Ux(I-aWjllGdl z{+Ak#Aysyd17xknr*)aMkmq3m)@EPVVt+@);J5hC(wkZkt|8;58OdlG@3twf8>IMH zT*0N68U-z}d>L}`jQ}lu->;jLV!my)@i{1Kb`KOh&dXmWMQ^9XJp$@14ds0Oq6bpB zqhY9tXgc?0XF}KHy}8^x^JS*$eoA#PLNp}a6=bI z+>r3CZi0wyfRo3kk)7m+0F}-e&8X?@VzWaL@ERTv7i{kRiPTcX%EoNn{l&;CPp$xr za|OxifI*xHR{dMAL;Wm-a|J|3*YzZvP+eI%aZ(Two|l#~GvAJTFrf(OAa`n{>|j`Yq8&^|d&eZ}XtkC$F8|dq1%a7g6;IbVyO+3c@nZ zsbo@kQ?IluN8Rg=Y;(XQHhM%LZ$s9OO{qqjg?LlJ7x#_X&8P)tXekZ@f7~MI>uq8j zcQ$jvuNzh9aR>#jq~wzKoK@^5?y(tN3{4LNQ#rCuIw{Tb=hYM{bhqlxXNaL}0x9L{+Wk1zN%t1-`>Qxh=`Xdp`Ce(=x!DetSpTF6LriS_

|{BHQ_y(l<;p={`~4IjqSP!>m~NKpUo$BL4b&A!PLF-zh@eSUY2Dr zZU|b-&2ypnR_#w$6J(T97Q3ZL3iWu?{Uwsuhe`Mj;P@8X{g6$tyPP9GcDgF&fw+y7ga{e=Mc1TuI{rii3 z%EttkM9D)DnuU>!!x3X4og~V9LE+_GlwAAzgxPlm!^GytHY(`LR}a4Duty*!k%@B! zpZg?0nCk(!a+CiyA-vc5&fLy`#rF?! zmna2WAV7#N!by3&ZbH3A#GX;8!hEl1=@#2S0VP$TxxDU#Bt4UD!Bz-oN9N9PCU`=N zih|}8$BVlnPDR{aQScixk+xhFHZ{v!5$0juS`@sRyZAoM_D}BHud+nJiY$Z73M~e} zebYt|;B%}e*SXJ4Et+L=ma@`)L7QGw9{YeT^u5`rN zrStWt%ui_PcG6u<47Z_^1jD)1u3wg!|59K9Jclm8H#q~=w-aBJZ2x_F%JQ94{BD9L zF|I#YnW)rR*p4^$Z~IT)V7u#Qku*G(qnB*Jwh{IsdyJZKi&VJZ;PvN@n{0unzfh?8 zA*cEncv>CQmtK)W1Hq#phGZGt=}m6TTwpS5IUZcS{zcbzuGiofG2E~L_5{HUpKN^*F4^O z(U^9=r4wU1=q%lVZc5Hous7CK1yavryL+!m;nwL2@Sm(=6R!TTPB?`CR`e)zyj~b2 zoidnqIj327vTn5825gASkDTt`V+NviwnubQ4LkFS;~^F6oZ_R9%Wt;!@N{zKkq56M zZT^m6Dp@rt*Ng~x%_Ni=P3wP|J1$_zG&jng`IcnBXUI_qR@Wk2swiONYtm)#sso(- zOhIAHAn@5Q%owd~nCvd0PCamRH=bran1}A87(F+gio}es>-#Wz4zwXm z2vg?dlbk`|!nNG$hRt>x{O_X`1MlqgnbI&`bxsIN`k)WkYWW5 zhr)fXXW=`n$sj0IS|xH=`~JXv{98EdWyYQ5Mf6I2N(D=2CWn$ou&FesgM^Wr4UWp| zj#LbUagA_ty3`U)%_@9Kg&BioCfs^sx%JT#7HZ_Qz~{!wlcqP7oM%*@;-5Dnf5FcY zW-FO81eHoLQT3G<4{)@yy>0W)qfPxSW=dLM-RX-T7pAnR(k}z6Pra>$n+4e+R~pIB z5KYHty^1e&`@XjSALf=IyM@M=9L4rGecjpi3n1*Tg*45+BnI=Yz>8-QUhg<}D5f zh$Q6pj069v_pJ>2z1Ph15Q85LT~i~2GVT=~kAuCGu{b7%$4~RCiVSb&f>r&Cx@}Hi z4v!Ao*+R` zVt>PvP)`6;I87q1zZ#$*<4s`#6R5^i&KASl&uJe@Jy$b`v{~0Q9?a_+QN2j+V$(po zf9LNfuyNkd2-1SYH_|mYY9M3|vAg=7%D1r^UT(h8u`IIPJ>nH=Yess&;j+9(d<{CiK3^&;3ISP*^F#`MW+L1FSRn&x zcnL*CzT}vxZpDmQ2un@i-S4AaM3N?2SvS)vhP$HS}p_=vP zYKyKF(LicE&gra~%P!@^=B(xqa=K)YF4ZWy)h&ch)K9U!g>sK7ERc@Bt*P>}^MYwB;T|`Rr;VK6}apHLiB~ z;Y&QkDuuW02Z;HZgN0E9cWRZ0c1?5d2uMhu#(WRN#e;lB(0xJ({#;*%LjLu4CYDsT zEtj`7BglaQf=@orSpwPL#>fM}GtQu8#Q2o+B%X36#sc`F3?ZZi>PLvOUtU>R%yVJ_ zdzL{22H1-U)C1h)n#o3g*i}!;Q?1Lh861AFkmuN$tJ%epnAf$U-dxwE4>X-$=|JQW z1-bRbEF<0vgbm)Ox21?6DnjV!PlGiY7tD!ZJ&Jc|bi~C{&wBejeLiT&7_1kFB$S;Pg-Q;-WZR4$UzvJzRE4=Gj@xP%7Ucsg&2Yl3tH$FP4p7}fJ&78VC zj*!y!_2pb^j5HnX@w2`c!fL@=9QSC*p@WaC7ar%q6h&*i5Z3V`H37%jnAsg67%u9} z&BVT5d1sZ!oI8GweN$ytZ7}~h$4YUDZ?pYh#Fl*Nr%Bv1RG$#v;7h`hh5? zygEa_6{M%A>!HPEBM!?Ut|L=8XbJ$O3JbFap)IVl_qln!e^6H+6&Il1^oC*VXr|Vk zZ1BNpaRA7Q1GSqDH9)XJ$n0GoW&2VUKJ%4|$S;t)A-ysQmG*S+Vf^;>u6p7c{d<=w zN9K-NW!k7t1u@*bZ|ZkKI$>VZWSuv)X>$|nLpLVM=Zxri>(v}x zZk`MM^h*-hPQa$}+pZoRyP}7YSas&!{RWp75QIS}@@2mpZNrSh0|&P{f?WZA zRT=MZ{KlQJ1ra)Pr+aE&HaeUl-Oy>?PisHAk@C5E8kf^d z^-e_oHbOcUBwnD1QeF}z4NoCPClCZ4n_u$LEN3(2N6N{QUy2E9fx99eVR3huip7cz zx=e7IpfH`;u#yPN?u1_#raWH}eI>aYp80ZX_k(R$>{EBi^>W$kL7Y5*Nxy-d+8XilT5>fXG;kP1KKtH)jYEl_rs|1R7KcElcRujrG>hXCwT9_>&Z zvb|QDyAE?LTuH$=>(!%Ajh^^LQ{;V{UTpL`B8RJGr|rhJx|IPmmBTzgU^T%eORR)J zc*0;J=SF_!G)2na+$h$2@1qn3#P7QJ9eJI_kZ67AVyAwLhE*Q$vt>2j$Zc8#Wu&~r zJ|fqt|HzIVml(|LMqkx&>oN8U_~hk(D05Lx`CSSp_)+7|B@3ojQQWq}TJnmt+@`&$ zFG`Y5k+;9vnaJHdo6FsPid}3f2Dg3uZux>pB(W1Z3+nXxqId;{neT2BH&pyjy*!%H zaPho;ztn& z#dQb$t^w5u?^zcgXzTMYM|rOw8Js|FdGR4Ly?M4$$jXpy!DeNCxjV%C|D;V10G0u* z|Npe90_E(SiZNQ^5a#iJ(x%JPy{%LE-id$nM#PhHRhxI73!CX{pRKw77C4qX>DHZj z|CY;jev@fXm?%k1eJ58TY8{a7gQ*on>8h;0`} z?5-d^%JzMF_A&rpfBDPn%~PEovHj05YQ3e;jGPrTt{=S-xF}(`Z9Q%JO1RKHRcE8L zE&B>H?`7}@xA;i$WtEhO7m9X=n+W%oGu5F^L|O>lu^?1JS`uv!Rd06JbQHBi)T-4T z8{}f8#S^aEz@MW*P5-TTh9bsQEV&UF zGk1GWJVIj)FsZa_O$0=A&veNtr9i*Q+0^Sksh}!ml;}Kx=`p*}44_PxnvJS7u zgE+S0xl7B;jS8X-RtHga)>%B8I67tBnUgqC8ux@oA zr2wC3oKhgaIns2JWqPTR7Zi!m%vbEq*BtLRIndvJJ}+j&gqX$b3Uc`80e1Gi|8wUK zO?SdZvF-cL8HoB5;fqqH!BdaP^Nb7$CSQ$i{$XQBXvm5q5X0EmaT<)~<|*pLUZ9O7 zLi*f^KA)1Ws?Y1bII-;`-*GYP-!jM<^F;6kYonR$bi($NLTzPfA|mB#O~`Wc(F+ub zOM#-3#Xe^DE(#d{#8M2dx>}bfyA#s`kG8*zi<K!DJ=}^ZZTWZQHiIF#)^cczROH> zFr%?SCneAKtCOr1zt*i~yZ{)Hiy2%Xs4h`)W@%jAPy|>xh6vG*YG&9>k92Ptg&lk8 z?Ps}rbV074&HgV^hD;m5OSYUPC{_beks+Y)8Ub!JiX2Z9hR?ZK;S8-1GTw+sUJ+Go zxnu)RReKMGGkRQ&Rh)p@}df!CW{HF2{Y)k^{*rb&*nZ6V`|J`ji>cNOi8&~~Fx z1g32jZt>NpSxbbQWUdn%(Kecr61Ejl?ONl#SMEk_UE^ukg8<1(|X`>(Tw*ukBTtIz3p z6i7&#%1=aW%pHL00m2x+^w)V$)%+mNopVDfe=N%j$ zvv;E*KNtt!&JkZK*!*=(qovKJNcF3>Pl7Zd7C*34QQ)W89QT}6f45l!(fNoCQu#=S zYwJT0UgncN52GLf+%eTmn&`|VpwJ;i5tX^&`G#<=0;`HN$cx*WA8Q z75L2l{ACM&+p>f!4MvT1p)+?mK&O0-C@w-(a{^=v!ZBxY0ajD@#%`?cx)Bs?_PhSB zVo{mmXIt)2OZuQ`Ra%2lV)y-LoG7lPhulGN-6Z;;8D$SE8h=}N_Kvu@{aN+d?@s`JtJdG_5&M?>xnRc(7#zBvXL)&rYITF9K23bN>11!I_xlHk_KX7K zpQ<5W627_>TpK&BwpNg8U3$)WGR>7LVov!7BQSAPmESISvfY!x6w=3vGvsdS^vEc^ zTfpVMvD@N`n*F`1_B_K4Q_3$&jC!HgK6u_qEW`2FBMHcoo+i?Z%)$eH z7P_sQSY0rYA=yF@XhL&xZQ*-U*X6aKwRy5zf3uS`vWJk*`A&q73<4=!zNy%qnZVdM zgm@w2Ms~681D10i)~xAC;J5x*gyv}9S5JSmQWVT!g8+dnMq%| zH1s;~(;Lu5poYka&@cFuGdNBBSI|2TDxcBbd2PNUHF80f~UPzzy<rVz4B+L>Vo>i)s_!CF{P0F;W2L1Bbzu$p`Q7 zkI-MC*TjC(-MnpL^esM|+Y9Lvqi@i5R+(p=QO;;7WbSthYHH1a^+M@FkUA9c=C5L8jkd#|lfF9DxYm!l$CrHm=Bj2;5&>nEzU;#nK?N!u&oO z*pZLe{18(@-;YT4ITgi-Cy@;FN#->~XsvG?4`&)&c%)7zbGp!P6pCfg)8%08Ec++c zHksD3*Q<9-r7~h8YA40F^aE@7|ADh{k7u;gypxk!5Bs zKH-kO@4*+ld>F@jzGqqSwcG*Vq2ThE&g^FovoT$`vx-blC(D)y=ywV(l4o|NCVSJb z@*XJk+f?>9>rAoB0WV_38_AVqJGqJ><(yv~2WlRW_uN0A1Y|-?E4^3KjjmE;PU1sw zRj2fhhvY+DrxQ1`*-Fh2qmwdR>7hwIhz$X+ypnP2gCvS%Rzo1F@wnp;qrSa96!~42 zLCn~3HEPZczcCGzj!uSBL0{H&I+XWzcWnQU1RLwbebCFwy2RXaROM=_Z&sljT^@nD zf_qghbM6Z^aSZZ6#4zNQ?SW(4=wMf(4B-d5bfBUuBQ26wZ~e4R5>ty*akR8rCC62a z`ZR$}Oog11#9RAaK`bznTSLJ;j0R`9knZ||Ef4qektO}C_+WaY470Iqv=K*yNB~V| zotmV&?$j@eLOAqJm(9ILzLLZKvsP3+N@FI?Q{;>d>muco4^{&p(KK+ib&_W^H0~%8 zlyU&R;=S$>G(C~@F@5KT8~$dMbkcL11P9X)0RMpys3q_UpI;eJ@HvPLJ0YEMLU>(ynk2Hk^7a^>G8@VIiT=k6E#kIzvhs@3Fyxi zZ#3n)U_0IeAp&I;1r-&|>a3^*Y=e%dun`O zaaFAeLpk61kh2J~I1t$NI&*%l1@%QXH#P{s#_i^TCdslJe2hQ6=H!x0%{Np83ELh5 zzQs(IO4fsExUvz;ygvCTafI~sNu#Gx`fxs}-iGE<$wj;ou%C30Gzfmn)ZAbC-w; z;wnnT>!)s^+Jn}hf*ov{X}TOLx2tw z;$4r6WIzom)XeXlFlU%MJ=9BNs&G}?n+9Z<>cW#m&k15~_W@dc zJYcZ0&<;29Jzn!Igses-Uv=)-b*eeyc=beEgYA{fw+R^y`*JO-=4xY1kk|HS?)HrD z9CxcMycVCAmW8@xX?g$`8jHS2+ZrjHmTuMSs+S;{LO-$C zFX%gVgMrOtKwU*B5deFOVdVzseNIFL;&PVX!puKk5cGT3L~892pH?*8ZNe`+#?e<} zGqS7?a=~!=Mp}`s+?-^yVvQX}mmI zj3&I6aVf#g?~HsD8YvI;Bj}xKkPptE(#a$M)ft3n<{35a_ApT-bvGTxuy-O~M&O}N zrNzdtqIzW@(>&~NASCq?=Cufo3Ix}R(F*`U;=Ig)7+u02dxeNmi5{j-BxY6ZL^=iS z(>n?Er#K6M3PMnjOx~~oJ5&N-7e$^369oEMvXLt)6w9bL->0gL^sVTKT|}ZY7+OGs z$eCNn2S9q#!7SmfZ7MXUqplhdJfq#Zj53p{yB7?Eg$bbh#hHSgO+Cu6NM5F&CoJ`q zNhr}zr?k?G2g)7CSy9V-^fp;iTWwlF*9SUZ#f4Y|Xgk)2U`BU;e#JUFtJV4E40xvd z`1BS1TiG`o<{+jP)eK|?K*jkIqKTf-ZVIa_1_r}x5&gf;dz#Sg*us`V)%3eWG7)=Yz@&KKUrB55MCA957%!fbz#f#)+ z`Cn9D;AP(nusW--r$Wqg9{Ry~ zvNk1)h%iFLe4B|)fCFXt<2EscI%Jr^BIxYucBvr$%{eth{l1#1LJ3zUpXcEG1$9vX z`<9~FE=Ezs5c30w76CGv!rI*C)-wllZ`&Cy@Tk|x!kkYx5sZ|WgUtc=Ld6h&3C`K0 z%E>5g;;qjUFh`)=Y_a`~;EgMS6{ATsij z`t&`uyy7pi(eykMM(45``_B@<ZsQ9}T<1lQ0*g&Oktt71$P zWvRIYnqX4z)5-bIYy9HUZquno8Bvd{I`F^xMk28ZOg8aj_F(|9BuV*8WODnd`txog z$cHS0JGS$C;3<>MNRw0lBc2~UzVg>a5EvTy>N-0MV6KU#-JZ~K#`R^L)-jsFO1$TeR-bF^N0nONeFC@M#1C{6EZD47D_b-Qc4eaKdAI*nurO<8Ya# zW6C~iilsBL`R3rw(x2iN)@CU`n+q|)?LG8e_Q9X6Dn08?%@B7SB*WYS&psZOl1oX2 zSo5K$XFJg|?NyUPg^e5Dzi!;Bg8GS^9=*)GIREiu`2#PPeus!IbU5V9BlWwb%HN;f zR=;`Mxi((HFx$75{u<2%XLSDfEmkyD$QN%pt)4u|N6tx7uKy2Zrfrn~l6shM;hh?k z+?G96Lm8!Rb6E)mqeHCSls!U_xsV{81k@4T*t#Yp62FyblP{nDte6azbHZ+jvA`5a zH4huOS3T%^^8XNKhB~1G-Lts6v#c3Fdm-YnfSu>JXaTv>|VJ~!jejc_tX!5%r`p_h% z2Ycb63>AcY^}73vPJ4>I%FyGb5)oO!45(UW3PF`}yk${o4={h4fbn>;4sJZP0m`%3hEGR~W6!Op2 z#awT7!Zc3HjqNnqI#H;rw(pm<3xZH+Gsv8&oG7l=4Dd@)k%P8-o_09)52Bi;JyW7o z1p9!@o0-UoY+2;=@#7T;zLLE*;I@LroQNa=F0Wd1y3Ez65;C)x7}~Z+5b|hMd~i7@ z^j~lPo*yW0lZgNRLH~-4{f$*0!M4~;A`~2~2!=$W-lmLD zTE~T#Q!g@`O#9X!nFm-2qn;n{LIj_|KYgED_4370>oboE3ocESJwB6^$`FwuTk6ym zwyi%OEmnucF-vm#`4I&`d#Y3E5I0Y})%YU-g0s`oiag-}ivPqxoak&;&RhzOmA`Pl z==G`8e>SbK{eqboRSJ{vqCRoh9|rrJagH>Gd71%2S%DrgbSyY%HimRsn)`4l$ODnC zScMQl*vo?~8I)EC6GFZ`J(>$d#R1S{Hi7Pg3n}K`=CzDFl~X|#;4udPzU_vtR<@yX z=4$xVxN1{#p+*WnU_?^O7(VJIOZ<2ARU@O?ABf?d7HEyxJY}w4L4i%pxTt&U{hnHd zSx#Q$&M;qMyXEHJsaz0B3@9}c>M)rq!{pn(;aOE4SjsH`5@WMW+2UkYEgT~p z*q4jl9owWifq0MJaIN=Fh)c%r&koh$@R`M&vgpEqD>uHa(X}nCMGoin7Ym5td78tJ zNDjthNqJV&Ud)uy-#6O~#0@URhZK7MUN@dMluJkJCIFnK&NBHUoZI8l!A7m=!O@8F zGGeP{tLiz@t=`>wsF<2#&fYO?QD*X1i=*U)EszWRh>lYulpo=(L6e}J{gpk+qo#@c zmC}OAPDja;uI_D-`sW5*i_W*7)Ofdu9eUlPpxW`f0hVI^S{Vyz(Lt{YkiO0rQD)=MVM0(BmLEhDp!Gj5B2Z+cL{FDBPEN z@MbV>G-OkHcrP>0gKD42`gWRa_cW|<(|gX8RUiZE(3H376A_N<`%)H{?W|-;%+t7r z$1rH;B-+fM{!h6OouW97^NtLVn)Gg{i!AbB(ZQ(3HcbG?Rc1d=4nm|8$y_?{&68ll zxCH?2v0{lKQX2xk6aRCZwoU|$|D=LkZJ`IOmy+G=rFXn_0?>71eIoh}zw}UctAZ$E z)QlcjJX@NZC3*7fYi57*yGLDF4VeKSKCkzkY1*-C^G~?S-$ACV@i>ZD_grzA<9)zhlm*L%=u%f8-fQ*|J=A*?h)BrNgvIEdaY%p=+2*}Wlmv|VSGJ;>t) z=1mi+D~;`I|0=HBh32C{2_x$YwRuX_D-{x)5S>_=AO1?9SE0VkrH7^zzq`V^Sd!N; zI|+bx`hGx=2OZBv?1WU8MWdrU>TPCd!vn;!2*awS-REbj_V-;dh{@zA3K-Q!L*+%n zwAFAv*|*T)LS%ry&y;!uB;{->dTj{pJWXTg(E2qM21xOpzwjJJnz4qW_npry)ok0f z!+H(|RP8`(>mfO3lT-Q;r`=GITqmS&FHk=rb0LScBGvgn(fTO5dX8PxRVjcImq5=MG?O&gX=8o&Qv-w(ipffKD}<=v}x`IAVr>%dIv^P6gxU zws3ZCXw=LpA8erBKBy;JQQXVVB~&j!eMOorP9q+1sHzHK+PJwvlIo7#=HSRl7b}Z9 zWqINH1!LmDbGiOunDg`19Vg$LN;-2DaT3D}#uG({II zLG`-7e9lc%Kfn1;yPXw04SoX0mAcx-x2pw&z_4H z-vUEgGs^W3t62?Ju$9?7qI0Yy&;KXa^Bsj8&9AYfghPDB9Cx=Z-I7}(%0yESHO3OZ zsVo>&AAM@F_bW^N{Qjq>smC4Rnv7ief4$H>FKlN&{0RGJtRRZay+fRY9%WdiQcO0Lo62R&gE!pycA{2wN0~h@arTA`rlvH3?>}A;8x%w@C zv%Lt27LF(ni@;gtOjsZetUP~(DS7$N8PTgXsCetWUh&r*#jon+fALI|^3e${pGa)T z1>gzrmKG$L=4O?69bq@CrT%n!k~qv%FrLHVHoP<|J-(^wOyFc_fA1-sE|lU^&Qf2y+q^s+zr3Y6=NEJzj%r`{8PPcE|g5?8-=YvWCc{^CZ?_w zy8t^a$s$SOpJXAlA()<5uq5Cg7h6@Js*3U_R?0T-xpW zX6~zrQwFH`#ej^7R*8;`-%r*^6W5PSMq3@JaALO1?(bjw_vLuk%m0h4`*2IT4fwy$ z_<{@vZk&ON;s$fzD%?A9Z^f-;g(I`gaNx*rrfG#MM_OoFT2{EttkA4%t6AB)vTWG& z;kxeoc%I|={r&|H;n4H^oUb=8Y)=22`%$F-m7=+7=AlOi0>?IeJ)Ckm5*`(C>i5RN z=W~8>`!0tb{((7gZP%qZz-DV#>sM1pg-YfTf^)3hfq#%aIeI5lsC5qsCw>%G{$Tf0 zkDe8&L=B+N7c~>(YuDwA8y>-vai%X9awVVSs?j93(cp>LTwMzEd_aC;DDaU!P81eE2qiRvgNy&xxzb!1LK%&235EGKKBf}>I4 zW(qr+E|Ebh>zst`p-6m6DHGeaskpp%Oz^+RZ76{tDSTTdGc#%XsE~W@*OltKwnqi7 z6-3Tj0|+(Q0jgzX*0aKM&s18=B>gH_>*st~8>2#oj)X$gNPv6=N{tBEV{57ZNwyQz ztymGqalP}Ok(OJ2-QG9sCBg0D|2sGCQ8i3*3eSi4t;W{w3GaV>vq-OP3oevh9>{)c z%YMhhe7f7#g1lb!2`%0g_v_nzKXCn7|HP?K2qlxdzF$&%{(40ks-bx+WT}t~Tt6yy zRtHu157GDMi?1>*x5O3kp4?b&WBKR6V?=Ia|D(&&JsPl_HKs$abMf?*p}LA=dDw{p zk;TJ#khJ@R;Uq+EfvJMv^yg|Yp4h2Y9_###{`mqZgGxO4f0x!khX zdaJtgX{ywwA`pr>_@cZDA(B~{J-u_PQ|}?+Hl*s7&h)AO%-7doiQb!~X)A_e^A%)X zm%#mg`!>ms*y+-7Q1LfRX&z^WmwJ3Q)po-mVe1UVrE+qn*RSrZ!0rkY9h9qUcHxXRmopQ~B_h}sYh#9O zEUO(gI$hwi3Pl9GBr%VRtMz}-J6Z0i;krYx(qT@$&`4wg0ioydQUUHDPsd1hbSQkI zNzUM340RQQ^pRfUK@-TRJ?VXQO~)IFoIT(YrFqb`&SKypQ)%A6H1c9ns`U%TtTqz} zX9n8Q*+e1Ky$j}^a&`Rx(Zun`A zoT~wc?K3*03NZ;|u1JayW%4$$1_6FP1r)Y#TV8x#E{@K2Ysm{=2Pz_miL`$K(|Ivq zN@9Dh!{^Jps-Q*W9QNOa>E=&eweh#6%^P;Cc@^XweHG5^TspR_MQQzIAoY-A+s_3# zjx?uowS}A@0W5%`OeVp?Nie$_d-Oro50m+cHBdbUM9h_X)Sul@_)vJe$<`J*@mBT0 z_d!h}@80N&GK$HR!D^VSGw(zq6Lx4ZDvwramgqoE%?o|*k;t~W09SFlI3tDg5uO> z*3a6!)8XO*v8Gw3b+DF9Ib-sxrA9<1a@pmK*$L3BIkiJeF~Vwd&lz`rn_p;RS8b2S z39xshaFTtMu4c*+uG`M#^XGhtz^Nh#nF(yZI#A_ zCw(hhh8fThs0KcTwW2;}-1anY@=;+^pnD5!!_K`*{NqVD1S#&bdC!1(%-kxN{nrWo zsx@+YUN>Oi%Iz!KV~sW9h#Jqhkf|*|aBo+}Rw>Q*9Z=xln7QF8_k9@<&!8BNB4_2$ zwGVah$Dad_rJhO^1Iv?Ld=Yn0EreLpaKG95)@Mzr_KH1K=;fj+DN;pb9`jBK+P}|S zw=FQD4Yu&7fP{VKWgP8j$I;^Dnfd3N@lW{om!%Sc-lMkQQx$Jvr9pl27%jzOQ8Z7g zh(Nj=3XbXgBLS;Zgq@-s(SS+)EtviTxVwis&TSR#sT8!aW(kp59#79CM)fkD-boQ( z_o3!65V=)WRRz){h4u3DVy8D}gTgn*k^CJMIb?jFcD3VkQdfJ!q%dns4j zYvUFbH=f?ulEb}X5uJBc|DUxdYu*vVZSJjEk1ytE-1Jh}`{ahUh@(Jplt%+xgNkKpsUX8jynUJIFf%HWDXr*VW^=O5HQz&Z=OcG` zQGIO1>4vFJ9b~f{$0^z|+=lZOnkK{`<%4U@1eK-!kBicZ4R88Q=uT@duqoW=i@NV_ z`}iv|h}w(`Hl=3>Z^jy_4cH6Eucq|oQ;)hf|=_}oj(~^;=h{bPl6;F zuw8h08=|ji9w$2N{x~P$Ka{6Ln!&O2?ijg+n@@vM*!K5*1rRdvetZk84!+oxH9gqF zGGcO)5d{mTDn&2mL)(lvF_y;Xwq5&Qe$n9y$hdH1U4uMIiQ z`;5^YCq|qHQdd_j$-D12pCk(&=y{~_NoR~_8u0UIx%KI=0XOM!x;ru2EiaHY22uJu z_@1~bXT;G)45Y2(xdKfXVQXJ9+Ay4& zJJ%0ZeK+YIs_Nyxg%23L5;LvpS0=8_C#6In2o&Gq_RHi+HWB+p>FCM* zvG3~|BIfQxNFlT;e@SCLpvHuZ4M3QKg2n`nV_T7j@>f4)s5T!6rozHV@`facZ+|{* zJ@*m^ybY0;I0+bOe2u*B=0Jt`ivJd8=51S-Fj)aY`{AMVy!YwQnEw2v7~u2$uPK*= z_6SH!L0;+#Kyrs}qkK!H!|eLe!8Q3is4!1=&XEOZYRLCHXpSxu2=0gbwm}-x+1~x| zU{c;EJ|uwo-J8#jj{45ri#5Y=Ol!VtQQApuZ2pe5Bcyc$B3n*YalKHY4Qp@avKvv{ zy51>?`2SE&L(mS;JJA0%ll)x(ld3g@;LBM(g8xA||C>o3!%4&qeg0S|ETf&`N&Y*N zJWh(A(pgE8sVkHE-mhZ)-%OGdt?mIAow835@T^t2x8#Y8Tu<>#(!j0p0OW%TCvo~D zl{rssNa^c*cp=EGr;Gzf`B__e#H9!Dd;)tlUShrD<<7@6gq|{5EQC$TU6R}|_Oo8~ zcz#{^0_6uJeL>kU0=MH-7}h7EK4G3Qb|a}V@{XOA-gKPHq@)Svd}J*i@K(Cl@6=(h zx>p}(O<7FwLFGy99vwhOFFN9f3s^czG;G|z0ea^dDU80S!as=muw>pJwQ&KGQzh{dAl50GO*Ws&Yv}wfzr_>lks65rYj6 zb#MgK8M66%;P#Wx4?7daFn$zS3st8Coxa(agi1enfk{&Jm|`LVKd#uBhX>N2E&WSa zt;5`?*wQYA8c##({AG8S?XKg>L4mQ4w}v?X7{hKPfX9{Txu0YXM6zeF<&ygP%X{*= z6p#BeCh<#=j8Pa&HRC<-u)?EWz{W&ZFFGQ&FuU^<#i2|`?0YE(2r@F^$1%0EfqNMB z>{IQkAzmjRC@H*xLDZEJL5+&RjYVJQ!y*D@Ay7#Xs0G~_zCp@YjHIqcOUH(G4?(`O zSTHp@-oihaS=rs#awN7THFg*VaZ~av++Wb+(^3%9p(pTkl8+Gy4d98Q?J z0FszvkpUQbnwjDf#v|iA;V8BBCnol=_kQujTXSc!v9M?L&wai;PzubY_OF7VHZ;pTm?RyO zN1btC8e%s)i{8Bk5>MUxnwfgfbnTW^@0oC!#oR~ShLea;)hrcvl_#`(?m-8Mr@so6 zI!G|ptXO2Nz7slsq2)+#D~!$!a}hA|M3pNcYfUk0-j{~tG%naw#&^~-eMS*#faVjr|VtWI=A$6fqyNi~)X%VURsKIbPWM=7DUKmYON1 z0c{?KlPzD(n?8s~ZY7S$_gdy{0=BzuOtNIgCo~^qEuzB(?()f#81p%FAqgoRy7YOI z?+wC!|GHBb_=HLW3?8cL4p#g-lcyQUhep#JFNN-5oBnQ+#0sO7dqH;5u_9E(0rg`> za#s%{a?++sKm-#R1`>SxKUhrIJ;MR%3#Y=KZ|kxltdYjh@=<8J}w2 z3g>UYl*AP+tA?y@v=4?We}XSCfp<#oHpitIXcP6hsjfHmqn)n!J0A@WtYQtY%f{oH zh0WvKpnYM=7hVAx*GQg{T_*_=%Q44vonCzh+Wz;DbK!mNWo za3lW4D=6-n+7&{De$5?gU&FW)0~c6ua~gz@)&cWm}l8bc2Dg*r+=3Car^PM@UZ&(M-y!CRCp$t3LonEH~=dB%#^bN z2pqfC8|B`GZWDR<*?=#;9jP*xm&*&^W*FY1;I-S{AD8v>we+rXFQ5Cl@b#Y`^<*5J zP@cGObF4q0Kdvrua{zgLf)$ok+(55Qis>1Qz(V$CRd)7E;zSp z%kALq_!%HufYt3g>*#J;8>h$pf+m%^%j-gAjUydW)P9yLW>m=D~O5QyJC*;iCjt-nty1I;^3aA zACt<(2X2m7hScdOFJjbC^;E=iTK%s+50}i@Ova<%hWoCJB9G`o6ldS&$qn+E>3hKN z!>ds&{eH9`k&Z?gv>8e^%qBAeFN4>HWOw(DV)eWWNoM(_cgrL-Hn|s_<*BH5^qZw` zeC?UmX$SrwjyA-9yEoc8?4Y}r)mjzSGv4q!K|ch@C-tG#X`(t#f40MC~-H9x5ANR$4@T7ZN**zrZdp4f$i-fvB5rLA!S6onL`*UAjK2u)*@pg8^nVsGr*>#_yB=@{+hvaE!V)~1-NuBixJ%&XkdU3yIuf0IqP|NUMWOaa3CAw z^qPA^xiFhrct`n=Dh?7wg4az(nhLTSLMdA?@E}?^R+QYzE%Go|&c?YUQj?p=$vc*; zGJ<3FBpvk+%>G|(66EVbmB^(@+-L1(j_1R2_Fm!8QS*BTGa*I8yX1$@S657tO$vcp@&TwU+lQv2pPieuH<9ShcCyf>HRkRoCIDn5Q-lpvUmyMu zr=Gim3pR#+r^(rB`}7#6!ZhK}Ta zhZmbm2r0QI@(Ke;@W55b$r{M!>Ztqo>>npZDPeLP%V4qMS59J@n+o4OZ~}yZS`FJZ zHYpC}!47*E+?&M=#ToVQ#esWrvN<(FL1AYnYv2t4ulAt9s*4bD==ejh2hFy=#y!2S zq|2ZE!pvl<>E9 zi5E9~`S9%|gbxEABt-0f0P|h7IAZDj`##j3L1}Mf>fvC4voPSIaV;1dhk>RS0gKAtIlOw-tgtjrpZcYskVU&x zG1<%xDuXRqS3>ZomfptAPQP{Rf278R%*uI`d7Ocw|CXC7bq z5t>({c*R1TY^|w-8+Z4*6~oSYq!;(04!#CwD=h*y!z2PRuu5^6geu{b<32)xZBSuG z!btsvxSD2Tuj9az2PflR$;V=#XaA!nH=$1Xs+xtCDP~v5PgUqXU#xo^>*d*?$fjz( zNT@r6RJxrH+e?bf?d3*fBDli(utEg*m&DDV?kbp+Kw)9cx@#1TB4~AbG7j3pP=R!V zsCc;cY8ROSixV@|sz6$i`L6L(Z}cUaKKZ;Yge42DJ`PCid}Z}kWw#}Mo5jYA&!h*Y zXbMq4MNI7v-_1aTyaBe6VEQ8P>6&0?(YD4t;pTMkuQni@M^R!x1mx%}Z5VC-TwHPlmdaN5yx^CrhRdC~*iMEggYq^7v~FNvE+kkK4G8roWHJCM zNXI0}7ZY0&MS=z4HcRTjqI6UscQYV(qQ97z#HsyOfO}#9?V?j#?gi*}2cT*L_`d=I z`!cy-2Xq`NsO#h{SXk(6x+$k1VHF_f7PPv+JahI1^0dOtHpegvA{a1Iz&VE@{N}9Y zSDx?`p`zZ<;HG5^{KjBji^8o4EsWVZSoA8iw!k{%Q#BeIX6!q57jhK{!G+pnOs3y+iD7*ybt$g!J+{XfasID}Ffz*$ABsVj!sNlq|O zu6&D9?yv>Ze>)$=Wdz44c-sqMCkCMBzCmJM0Qc@0=p3iquPQxaH2OGU>%ARrn|ht+ zBUH;9&1uV#r@pU4i~i+3Z6F z>=@zU0dPcbe}XeqamV20C-M590$iZxhMTn#8qGfc#(JAwPLK<;64fj3hr940G=yy+ zqaj`(hD9$yWPO|VGz@xS1Q(nj4sa9s!H?6?G`=b16QB}w5g%-mL7vt=N@(w%Q6tQT z#RHxoi97WcE<$)34Y1s3s=bn#JNnC2qs_uc1aq#jaGr++G6}v*S}{y^5Yr{Cc4oCc zIqrKBl$^aMJC-gH{KGmqZeou}{6yLT?utWP;G;`uFvuZf?A2^wCEH2Och71zLjXjq zB^xma8GSK6XD6^2$c{pKk_zN^PJ{PO*}}o|qrnO*;dMRDT3kINUy=TqafRi@g6x3F zu$e&@25N#NImjeXN$4?>Ecd5kL2; z-N#*7#`BWkeL%+ca|w}Oe;)AV)iG;@=fe%2;klZUsM;B4Y2bLDgAzoQyFWeKE*q@9 z6l9nVZ{?wmi^r!FL^}_~2KkB!g=(6_mH7N4bmUGt-`qdAQ86TH6{3&vIJ_5fxC=mh zgW?4cf7&6)jc0#YtblN=-i;-t2TSb@0o#IE@l(B) zb;m&$W&u(oOYx-BmB)@h$yvoaG_rQReB4Xk#v!Ze-JQQ_syoo?->d+bPpeg2Jh*XN z-WP{z#KAPXfD{m_gsPGdC;@+W`ClKB)L-Hb7=f-+v|AiMF|zYk6@y z=dhgY`?MFM=SQl~^>EKdeNw!VC_Hu7ZLd&KR#N?zkK`Bw^`jMNr%I0EP&>B3w=+8% zUjvzEzvfcY7MV-9KCpWbk~#;O&RE=c92I%GjB^1wZ#I{FqY6ppD%d ztt&WspwM3KLBfy=A3cJR99-qFh3M;4$@bOd{Zs+uCL+yf|8Aow(+Y?xXafEg=!y6K z_60Vu2EyVFpFfN_a6uxf6$kjMPs~JLF)8+cuXuoY;ZC-FW`=_8;!xuTZoH8WB+~&t zM)Eozx#KplTZAa!@AehJ?rcLuesLl2z)%0md_zx|F5I%=*}gp){Adki&Y)`?!#EE) zdpaGutETgp)f&6$DxuMwv+HVH5WpcJTvy4_7Z3^aXM(8`0aRG>H&`-N;!5WCC@Qe! zt>uAtun3W|%RA^HSHio|V?m`#uS#_dp9O@d{vcGFA;SW=d)9n-u~JchZS;)b1t9yK zOrydyuWFi9SV&z3BrKiuCFUu)GbwQxo$mGI?wQm~Kf>pk-ChAop*B~~r<=STVldWl zcY$o&@{uc-g84vl@N)CDyD^OHtz8!7ls|5NTs=zti|f>LHdJ8Rb+BEv>Q`7jrteO% z`+E9sNCZf2`~D`{GgdxMv(1?97tfXS0vtm{pIW@#B(aXwKaTsq^sF|Hx|XZ57K1^`#pT{GyP#W2 zwoVk!Bm-Z{8zp>uk6ebM6wH~tMiv|9gKJLX+oe10kx? zXwDG)wrw;F?GAH2fkl0Lhb0H5ee8)VO7m@+>f$2jF zLmYk2Yq_Elhn19B(+gacbn2eUO1VHUOh9;cYNP80lyLNs0u9#|It7B?kZ4@L=$UF?Q)$JI+uFq9P>i%w>*=OT&4Ku^XL(2@x zO;c9rDx0BjC8Hy+WH_ct+BD*vxOUNZ#G3*F%cF8v_4?*{BT{|&XICAKh`pI+A+E$_RC)(b>vF}b8)rz$`ayi}rU-kmOk8&6@EX}+asmmDejk8xxU z7n)_e#}*h&2^=Mr{1+C{X7wv^d6>f~jU}dMD2ut9uFY#XT11t{0rI=1^bzvj!dM^M zu*;;5%F9ccciO%f8FuJ>8(k{eVlgMb;U{JBWHMj32&6^OEh4dJ$$w+nMW#Rf3sKr_ z{fz;7ZT)k2ACEt7XhKJSNy(9mzlV{=ADh3Po-YY}b3goJpkc?Qskh>kDpcd**|yXBKdtBeZ}hWKyEgQ-pQKxNG`3c{dOm24x@Whu z#c1hJh)YmtQ1R8uul+Bq`lyng^N0v7RXTNfGd8T5Yuw3!E~!r9nhN!? z9_%8s$+ox`Ivv8CX^k^Dm1UhA>cFy2*1~XM^4XkPwE4TEq+%?C>(g@bz8>Zo?@VjejVU(8vb zsV*0A${I$C6Xs^Izg;={<}Ar@?y$`Kd@i~9M!rMg@a;gke7hxK)ZR*752CNr;qP|8 z-G0Txs9GaKM?J#P--?c6uCeN0u95#j+v*-r)kcmm94L{GbU7DP__^%R=0wkHt9ir{ zIi74IG$#&dLrt09l{1?;6L!f&rVX@6d1H<1jqno=r#+yP2o&nr%!1=aq`o8O)K^gJE zJ!dR1!47BNW>ZdC_%%pf-QkqL)U#V6zskAMG%UT^#L^(V_Y(V|`FnkNA z7N$Q+b+|ayw1@EEY!!(T#s-vnw7lKn8|4R;ZnvB?ahcw|vjK6>!^7z;KhLi`7VT3r z-*=9d*BFULE8JLNW?G!Dn)DxXc&zSM{uR)G7EfINO>Q`xHi`SyKQTS@{G8SX^wu_) z@u)I~duQLuCk_WS7#Vi=l*DMkBVTshM4L<%Zt;SX&$dm6+h*3hq{3s$!lcQws>LSe zS_+BZwn4f9Z90>zr_(MKR5P#4@8uZMJ5hEkL(=FQSySOR>~Cm z)4r1Pn=zX-69#53DsYhEDEB`nlYpDmLRNZO z;PsBUrGL%2hA%zBSV91ejvCT;xmynw$rkK$KEQlbgQmJ7?Ix)bCPMbcgyt{3)_n~? z!mWNFakryes;pY6zt(y0!H|@i{_`YFi{Crzm()yERp#RwRCYQNEY~N@-7@nHw++bw z*3ihvQiK|Qj!=^q_6`?NN8bQ4Qy@9RV!xX`A+zhYCpA)z0MY-o~@hgsGxvLrFuvCuqi06bYX`e@% z;o8$T`>)@{x@O#UlfE{Ze_d(m`4&~!^L_%Y`#2{(HF=BQU*FzAy9*~;I@@C?Bik>> z$%?43(-emV@R5sHKLKRer!Q` zr&BiZL`0s)O4@n&o z8)~~3__)mjqsxTqwk;#p3bwMmch24!k}(=-K-H9^T64}m!3pIWE_%mnG=8dTN^ zDq7r7*ta9M;ZbGO4#0Gst-IbQxpL_m$v{Sja@KL{aUn#X%9G_aD4T)nC)r5m5VBuE z>Ru7PW<5q&0U!YxMN}^kPH_568Wr|0Gr-20a3`53Gs}rNEU#rX zS75}@OUmpjXwHE9aDP}N$v;ZF>JNf(Hr}!r~S*?@2W-^p-?wnB7Pgu(=Dj_ zMPzKX1-RS{t5Vx7E%pRSG}bbB`NGXx z%=@7f>}K20&9;M3N&uSD&v`~HcBnj2^bQlgSZ;*_Tm|5enJtbf(8vL{1_rFeJ-Ty= zC6~iGAKzR0yTAwwZeFYX8iD-Lw6#j)X|14ohNe-uUBePrL}m!_foN~FzQ17>4!^JW zu=^LqstVuGLZ3tQuCtz0kW7;?9X=-Wo-2)UFyLCZ>u^Y1R-!FPU!b@;V5B{;6+6nh zl;d!tvhN1#<|VD7=h(9$vBN!cmaT}s4O^>cp(srw;q(){qKIUW!x<4!uMA%@T)wni zRws?2m>Nx&+D*@`8bo+ZZ%pJCW9z5e>zP*dOkQuxJ&5zU{u{5p@TR-#i<;Wct@fk! zIX3ED_Nz{R!Om{s^1M%wf0aN4XXgoLdkR}`1yUj$^(y3QuChsGQ|;`-aw?mE z>qwf$N|!*aREY-eY!lMOpT8xvk?iU=`HZRSmGnE58g)CriT2FNoaGq}sgY}5g*68z zA>CR#{g7sY@u$mfdg(1?IAx`sh2xoa)hk`cbJ$zlIX4GUwub1QjLTZ@W;O3BlL`7g z`$?vW$orAV4U0p^#Vl17T6tL5GZ|Xwv#3D4rC7FPmQjAWiVoe1xFJ=Wi=R9GO1|+N zkt0dIaQq9#)fkOhv_B6jLj?s=A;(SHpkD4BUT-#gt#j0bHR9MjG5t!(C$=~?e}3fd zk(yrIib_Yb`MG)~j-;b6WGy8i&tP&r5x~td{R&5FbEt-Y!0Euu(q7`(r8a%KhQfup z)13aM&BB{bV(U@V=hh}{{>hfqvZTFX52{dxM+21VJ#UtS#z!H6^+9j6ZkuKzEa!u6 zJ;4wnsSk!WUBq7M!B|ld=(+b&_|BtuO2+se&u(BvY=&m+{b9mM_Ds^c)@RJcWQxn1jQLrzw?{ zFPtHvqZI@mbSr}$Gi4H9iL%tLG^3XTQTj2<_Ht%)p z&>vV7BBBMGj!IDD%6aO;67XMM_1I8?^(~S~+*+ z9#$cfO2K0%xg5|tN`S#X38MHm0TNGs*4M(CsK6>^{ z>O>I(;+n!SAzeAy!9kn#>d?XYkIGHv!J3n7!y5mWKGkDir{tH}E87KT0;u;&kn_)8 z^`g^8g4<7tU6tF*e7#P*BK8$Ep+a_?`K)5U?*QOMVPE;p5i;vSYuPVqkLmwga%VE~ z!vD6|@9DcP{wS>%hG;7oIszw~79P|#qa1KI_i3Dk0f4n|Qr>m_j5KL^Hjg-2Y>MkuJ&(7 zkC^v1FIa9l(S@DoKcuI9T`(h-i0@^rLF}Ek>g2CgDsW|#sEa0+L!~D{r+L@$?k;+x zMb5aIXXxj+M}r@}wwTfM!hsm4p9NZG&7ZsG_kxcXggt*22O+Gt_W2Qh5FlqS&xvd7 zMZ`$g((7Hl*Y)SwYhFmJNvK^|QKW_|;+nwlY@qeS0PZ zdE5Y$6g56m-GB8s_7xmDyLUTj`h#E2K@#pzOBthlnxvRCkEsvGfLjEXQVsi@i=*R8z&YiVT8?#2=SImJHhO9Drn?{Yfa1U5b-LNX zGxo+5Ncb?y1e9dS&2?rd9blSPGx_GFZYd+s0W6Sw0^GrY>Cm(B72 zTz|DP)bD?`kx_)VjHzFg>jg_*E3^s<4K-b|Vy_twc|S6lOmt0xSY|1?{q?=y4meP6 z_A%(M79394IKs24&EY$AT%`q(?|`)75F5_?cEGXiKGFQxk7cTf4&{O@D^}cE$EkM& z7pi7eeXIp}XinItb3FSwRlzq-)NiJU!ZzqC&RY|TY`Gq`ohMejJsg)&r_UY#84ft& z0A$a&i6GZ01zP)%O`uLG&|`3Twj3?|SnLP;Lhm5&LShY5UwF?xotw4Ieb27TdCrr$ zxtBv8vDFqzQ%}fxPfePJcJGMnmiql<^>ASkR(UpMBJ=i>s3PmtgE|G{wPqCP^)0iA zlVb(Dp4U*04kW0QZ6Ik=Cd zn}c{VdaLh75^tQ{d6IcwIxJiYr84m1jt#o`hkOYXuw5|OSsZU%VE<(JSZfzViF-_0 zz}A*{gLVFLM99MO685^ZHqxQ5b0ePJJ<)%tHR#9=QeczG0;_LdwP8O*3&%G6xns99 zTbn{6&$B5tU#sbt-QpO@4(^6F*^qA5<>^y9XDhX%$h-dT*?rF5Yj@$PSZD3kQMDJ@ z4XHY6X5A&jHR-$4?e3`t$9&&=gkZ!|u@*qh1<5%R-<95S?A&wRSHB;+^PL%@ZpDB) zZ~+%?wAFe+y3%^S)%ktrzsnJFq6=ErC!vEy6YG;VbBxjdznLTh^b&OX|I{SK?ed0^ z0*w4HnG5$E&C8IyJTyu2uP(+p6{&mlBsd!RR@3qQz?5eNq&ruiveqOt+$^zVlry$~ zt)X&I8b2{;C9|}WzniD>OT2307$vwh)8ZNSOL;49n%JqYN-!(rKbv>ZhtoY zkREN${PtcYQyiza^8Hd&QjVp@){{|CtgLHE;g~MQFxrTOdWm!pte46{#Z#M;6^5Gz z-0(`)tw-b1FT9qH?t?+CmkkNxNg;i*WWyQ+VpST3#u-`uHRa|)dk6fLD6jG{c&qAn z&p)mb->?!E`YQb%c<7x9k4VD@v%@97_;CRJ&>*bC0(D$*sSH214^oJCQHXQF!yLTT z7Z+rsvRLXzj4o1me!g}M3Z7=?Dnqtg&bBFG?G9JMj?vwf;MmyZFL!v>iL&D=F2Q>e zc0v{P^AqBzsrP-M-7^x|CfT*>EJiwhPa);XZz%2*uB z5fbVBKm=aSHOQ#ndK5X~f2d)b4B7Pu_P=5urw-F1q5f zRV>Cevug|UT6Z~v$0cEy4H8H>ByEw}>9_!}K@g_M8SA*J%4~c(;2MElu4)~_Iv8bB z!~6ydsPUnZme04k{Z3js^W@?^{dT_N5WM|BP0?G;MC@3{S?kfapzcd@ytDGi)f1o! z@@faO(G3Hqic8jb)(!+$Zw!oZC&l$5pphSTLlO-~0dMZT4`Wo>m3*~kGT~M2uIAW< zaY!_oBQcPaK8C?f)2gwNd?utTJOK|ynN3=|O3Kw>`1x`~^@XkE5>ZW%{}}E5R_{O? z8YaNKL3KQ^4rnSNk5OKDZkun*Q>4!;j45vb*7#$tjXUr1=)V(!usIYwMuibSA6wz4 zI#7w-ZoiQpevcV(Xs#x-q|8KV)76AA>UWjG#L5k#O@o3vm57lm-xL<>8|)&>34$*2 z?@|31Xd>C_jTi7P)+OoLtQ2PVrN^f#7uQyei2p^FoJ5=RA%<6Nzyo@YX#aSx8ysenhT;E$+6?zK$5kJfnF( zjEV@xIHiGbEW;89R4#cM>)elJ_PIe2B!@8t_gd}Bu`TkMH~=gGGiP9^K7~l7jaghz z%NLQhxoZi49zN5u|-s}ZFE6(iDctW3cWWK(hB)H+_#vL$%|Z^y}^Rb@?HV&Nua($Y@) ziJ1AN8ZG*sKMG_3txFb`x#*;L?(YOE$5Y67 zsB)=r!hJhR%vc6}sE#WL+}VJ_vxF|$icD+?Uh*%O02yg8dbqSQvk*vAR>4qlGI)~IZN^j2l|xv0*^K)%(C zCAfy)7;(h(CRQT7jrPBJf8XyPfrM3mg3Y4*ovq~zS^a}dh}(AV6b%D{m8_u1G$tfr zK?kV=0z2S1h^z7(!xRVfC9(s@8QU9fhClFSXy_0V<5yDqmH?FBR%*U&XY3TZR4|K}PjM!-}VjiE}AbO1Shh-9Vl0xpCj! z@y*b##u2b$vrJOLyEBu4IJ4#(u66rFr+y|VsxYbW;B`dfbf%)?7|BDM#47BZZ5#jc z%IvT|QQC|!ZxS0D$r8{P{{fwg-}MR|i;X_dUTFBaaY%%W#k2v3+0g4CAtk>57P!2X znym6VR$d6sn6w5*SKse_v0X2cM)2LgE9vylVWiwb@^z+MrzLsSnBl`@E}j$cOOQ~d z!<$)L>)wILgC<9sp#}EL?FSDqIZVon+-Dz(&k|{%RbD;_z=53}{=OZ2fyfH~8xP2F zWiECq+u#|oU7t^WRGO{2X_hv0D$Suhy!lHx8JOG^W9)xWYW4w#zj?&?GJDSpFWCNb zp<5%D&PunK^O$e?aFK7J+v(m3jXGisRNe`Ln)W<3PIvJqu>i9^8gMupl4RUd?PeD6 zKrj&_PB`yR7dS3@3a{4a*Z1jymW;22ZB%Oi-YFDD){(Wxr#FA{`8KM~DTIBy#XRhe zb;XP}wqqDa`*<8|-vpxewn7|_f`Cet6axIM*aX4=s0 z|1s={8EtWXQZpy`hbCE5pCC^R#rf@84a%{BAQBhN`qO+f3^m^Q#j|c}W!<_CaeW4@ zf9Q0(QA+8^g+}Pbf%#pU(4I0}-FWWZhgZ|9NA3@r7bv}^%$HiAWLJ-&r7nxEmVHiA zB!XLz&8fEzoxogX0C5%jB|%5(bD|?38BLngBO@0}zXrGD>5!zo+`m6LLCe)LXB8`& zva1hyV@gk7esNYw%fWK#MrfS?k+mUmG5EsIB`bgxE@SfKMAU@iC+L2D`XnJmEw(NN zJbX&gQY9WTj$5}CiN#s9TyjY~lZ|ricP8b_mN;M?u7$c^+#x`|O4R7gGgPO89~#1w z{^%lrOJA_(gn3~KBX4M}Bc}PE&}VNdTb>)x-3Ana&YLEM2kn1$0mu*nCRuSQrWcV% zN!+kzh>RP?N!Gam?HUM{@~Pn-+-VOnj6@)NlLB+W$XJPFuK`2UFs7N2zE^rd`KV;H734X#v!Q8gU2mXZugiYTB6ZaN#^FjheYPr z)(nP7KAwRh?}eJ{VX7Bkm%bnKWZ=!VCA*&&^sXYoI38VD-BGQYVhC5F?2_&`2s?{%s~5NY2CP4Y4g94wXpmc&C-JgMh`|3%SGt)Ry*AtqMQpWR>v4AdA_@_^u=;FXd18x`S{H2IZP zF_SFioDfg@&pZ>uYz(-C=wJ4X)ennepsw>!$vC(V32|A7ZUh1P?%VBJc5E;MM#j7d zkiZSvrtf8&u9?G=1=&fm+rPvD`)LRlVV)HZ!4RM3fW>wYf=abapaF^ERSu8Zbty59 zX#*pBLBU>OLLdqw@n$a1jY$ws{wxGRpjL+Lt3nQC62)2-L7q?U-Y;%~!LS%|4!+0-}wSEk>51B8>gQg<`R&zNFq*vZfO)VQ> zMzIxoIFtrY7ao=|hf~FX8A;|o6~45N`h=006qUQ;{$tDpdH>6p{TtQ5jPQ2p&KcdV zrp{9IUn!(L>T!BJkN(7${wPFx(xA67|FUKKLBKAN)YDa|DQ3lqRjIoe=@t+)#r>es z8BOsWBIL!9NwUgyGGU}FvL+R%<4dmzq|yXO#q{XEP8k(WT|h6a7JdOF#8lZ+0m4$m zhBiP(lVSJRBsr$K(MB#vdsXf}#7~|CI2F`d3J?P{gey+db@gAIEcgceU!07Vr>Kvr zr$IN!7)u;{cS<$gxt#7C?2Q4M`vCpVWnvw*t_|YHBqUQSBs?k(|HqI?y;14)klzN; ze_Y{l6@N$pdtB}YT<*s)3zBT~4;c%-gsUhcJycvmuE2L-A{MD}yhLrA4A>(ZiAm&R zfz+wmw5GW&?rL z7m$qD7t6d+D`xxt^~FR|4?)uBm?dI#QA~^-r$HmaF~PA(+)sO!t>vd%>`{BN#l0nq zcs}I5;P_)Yu#GSA8YJ^YgtovHW&f0F5vQ>ENLH;>m`a<*gEU>5Qp^PQMOL;~dd{tT zZCLq&yamboG=v)i{$W6BT$mB}KYSR~vTp``laIWe($NrqIHgr5%p4*JOiWUMQ7{%> z?VCUa8V@};c{04B_c2{+xEs6*7rwF^0~+!FkaZtSO|}iUutORNsr1kjdMETI76P(a1di-4f0SkTY}6}?eWQBij8=Y76!zcc#>FcTOi z$$74It%CxZnhHb>D)1y}lL6egR>0_8sS^XJ{R?vd4u+kjsp8K813<4-+6hxxwz)Xc zRgqw9bR@BHuY~(9j_e~rHEx5G@Tlu#&`JO(lY(qyWybWuxRYUk{=$D3!|><0y5%(* z@6k<`sW@1UEqz??CVJnK5ImY-(4wN{fci6sc|rvtUZVHdm`Un?X1TDKOW|NU68t@@ znk$3blKA>}kx6Xu>Spc~sdOq2@)%_1afrqwaQ^j1{{a4x)AF(xRD^d zKM7B^XA$y1?%To(NhX2aLPt5gAKGsP0YEE!R3bHdhaaL(X8tg}evrUq{4%=F2eJxp zn|d6L7bkqYr4pS8Qg0SrYU4G;M)SfTNsMbpjG@BLGTag#|74~udl1lehdw8ffj4QRhu!q}7?tE+*1#G^DyvXhFsSF{z zQs*55B2I$3*qGfp44Vof;!%Hzx49zosy$|lh4wfKDoN_!#~002qaL&F1#Khyt8yJW zM)(H(?**K4JHTi20K>*#@8e+pFff_4`;#g)0b9r^2eg1=@A5XvXWz+_jYGHl7E=qb zXD0kTwZ$yiq|?(fzC`E@4Sf#_hT1`&(73M>EY!|BMnPSt4JUDsv)f&@VXy%P@`7qn zJ_j+tf;9?H!YrV6R567RnLXP9A`f*o+w~|7#85RLV!>a36<>jaAN?*S&D|!bLm8^I zq5|1ZB(L0^#`-o}VR&y^y30IvmNB5t?pMtk{46yN7ctnL-C<^abbffUyU>0}`~L|Gsya8fj=i;AcY1l^`0h%8T`pL{ZESSJ=(=-3TM0HldJ^7tII zi4A{$_u;t_2Ga|A2RtYHx%4(2^Ba#6P6Dy%n4kN2lyPgHjYM}Cb=2l1QjnE9!S1eU zYo7&R{@Ld9ukKwT^Qlsy&J5(6IaJLyQ$7WI7cM!~pfP?@KjKqfLUPV+G1;x!(Wt$WA2gq zFKxE!Pl6v{tEy?BwY{0cg-&J6%XgfGyo3>KI@A;gv14&zL{-JBklS=bFn=}`fMk=Q z8hzlybi{R&SLQu8YeDF>Mbvqzb`*klCpi zDPl+*h!q6e0-R3JXR$iaqm5pCd)M8_tGUA8#`F_1)Kde%Rj^>qQ9{ zE#}gmr+`R!ksoIFe`wJ6aVuc{6}ad_?Ic=?6L#!k2ljQnz+Y?%Q6RgDk?$?`Z999pVf%?zVOiPI zTRXMqf2o+i^l|H1Oq)OIOI!7O0H&r5I4RcK9ywU_`r63^Tz+1n>c`|6GJ285>x|bN zETf}q0sDWbRy|h5~=$g32woFB+Q}z($OMkAygLX^IX3j1Dr(qv_@&@OIAJ^vn$%$08?(A#*JYt7OzDnb}Z zmD%HyN~Tdsd`~}o!tz6G?POKYzT}I(_sUKtCU;2oH0ZcJ-H`g_Pv`v{{`>pNUuf@3 zwf28z;*JaP9u?Tg>%J8XGI5*v(y#IS&(~LNz%TghouQ;fzIdB+p_!S!!aUQB0iQc4FbvvRq+3>WSPq+AfoM3>d z^r=Qb3t8*XhaUnix<}mHu$l#^bqboj4RJ8sdP_(8Mu27qFq^DQXCk`15UmIWZ*nki zq`@VZe*Pt6>aGLFNEq(AFO|k=IR2~m7iNrv{eAn#6A!U4gn%85_cal{K8Li3f!x0G z+c)oL)N8cQD0CCM_hbMK=eP-L|iCk zq%HgUbCjNe(It;(hzT)?{E1epkk#ozi~R%QKY1Um+LtQ0T(++MZ%s0|di_laT#!on zoG3q54iBW1`o-8zmy|eWKtETlk5%iEY=MMy+gv*h!>KyB&e$r-ATlcKryXHx(Qo>cXZ+k)XehiA|MB%`?d@yRB|f+IhI0>{oYD?rAio>EbyzM5tt5U=%!037 zC{l6yo6X%R;QlXufJhzL*_=;xk+vvPnwn5-1+Ty&EljBBjfur5s}0+fy71TIBtE+Xya01 zhf0oCuS6)!cu&8z2Js5h_q1^6ua|Os7)0u{t_|C#XPfho~eIK7p6x)9ala zuhqM;xB`vXv1mrTY@AoRWT|LUFPbp%JXjVVgXm*~8XY_q)Pa|)?IsQ@l1&=}Tvi+^)hxcVCVpDPNHL~!xzx2o2~vJ(Kqz}$~I zGYx9?;_3b)V~dA%b%Z3tkzIJ#0?LH-Fg0%6+A+5-V*fSULM{& z#u~KYE3OQK)E>Vw+NNT&3OFa-bv+c@0)e*QIvYD=*%Dls>5L^T}io{%0%kSJr9+MZNws^ zF6^}0VH6`q}PrIM8&-8lgzU^8aBW8MaOFNrR3>pvGsLJ z%Qu;tW=GyM*TKhV4N~GS`&RNaUho{c!kbPUmr35ug^+_*0_+aN@T80Hq)GE^WuhX8 zX3!87)AkmK{8JIA$J~k_H2^4Gs$CS!3D{Q+0%RH1@W2&vn#8_`@hYT|_$iCS(w#m8 zq`iCbIr(8#oB9C#j=&7dNGqvXe0l(PF*x3bI}Lb}B5+*}ir?bFdVHP`{F}EHY0TC@>)gvTis1PZO zm~aooUoXqj?Bor)^`a_B=W&%9xTNIprg!iJv3iWYd|W=7FL33Cy+uN)o?TA*ppRh2 zvo&kCWbLZUj+0;_cfWdFn_zk( z4}Wx#Rv1&hD&oTO(s5lV&>~xl_ngd@3hd5*v7RpAD3NKtJBUf!OGka$v^&_sOtY_l zTwiZIv~B{<#S;TAb+?Qv`9tBN6%ArGK4J!bYbdpmOof?VBd6A10(9M-qX=isH{k>?+c{Y9c z>kMAQd_Vp;UzDe(Bf!?I%)K4(>?Yfd^XyVY2B?-f9B;*i$yx@B&vPYDC{LESU|Mq3Zo;BMzJ@IwfxD zd#$NN9%hI=;upoq7_=t93?>}ib26snu-Icqa}^qmUuBnej49<-=PDZ8*3*A>)Msfs zPHZo}m})sPa61izf0zt?Ifg>T{t^?6h-@#(=_;IE&I>SJ?RMeJ%MlqF(jsp^EG8A2 zTJtDsjD0U=3R#N32G}~8l_L4Yt1>kUGWiWk4bR!H20GC|CfoBxynlFQzHt=&`dk+F z&!jDy2E8X&%{5+)&iDt~36mlgY=g~uwPdz+VFn?=WRoS!3x6kUQ01gtxzBP^zO0Yz zd~t|@vT&nb)-K%$_ zWgHsCm#Kwin|kBY1@&?a8b?r~n`n^yskyuahMZX#U}*ORAzCLa0P&=kSATJC!t9Bh zRG4t@V-3Dax$-aY!(2>ie{fWb$h15H10Ksim7%C?0T-39!rF(YKa(Ux7y`sr^2hw{ z-9C$yca-mx7#5nLUzYa~aCDg6elZ)n3vHc+GfF=w3VTi%-mXje5P!Pe9kAaZJkjx4 z^X~7eVE{-XS7Um(iwD{B?)A?Ljn-y18|4v|!;&7AE(ISmX5{dTgVizTH&Df2jh0uS z&sD~ApLbu6SzC40hghlwOWxVOE$zLtV|$KAspd3JhZTwi56&J%8-z8Ckb$Y6NgFI4vpLZE=HRv<2*=4F`(!zD z?@wBgzCKWIT83iS(7z*<$`DlmDE_GBJp|ZrJM$!I*oFp@SB4bm-G#bs=U9@nPR?bW z*agRk4bPT=h?LCmUZ^Jn%)Ksir4IW8Kt?n$_h(Mf!0MA$_as27M2L597I&zK2m>A1 z&N#6Rv1b6)TGCu8nWr{0v=~EnTX(fu(o~g!FZ+QWU@J8WkX&c!p)TPmbZ`WlPOKUt zVnK>wY=1qHU&ldbN!vilLfZf09*F=d;3?oD007$u?87DPS&YGSn4n0;mxr??-S4^U-Ha)YBrPA0OZ#OKBhLYWs{To1W#(WM$U{WR4_py{2l*Xm^OuN?&h zFyoQg`OUQMr3Z#V-a6+1gOjCRt_;)Qk^bj5vuEt}QkOc)L9i~8VTC~9yOW1(OwRv$ zzr^B4?A*KHX58-oQIM~eR4{(P0u)xv)#)$e(DGt=5{u`+rKu>`7MC#>>N+c1{%x?n zYkT>Qa0a~Y;gcx&gjq8=eEx-h0Q)f@1+_X-!Wbobrgz$2=gjxsc?aJjl6t7D%8OTK z0hMw|LiNvZjx38w{(wtN4k<`|@l8Z9b(E3u|ix*vv1q67w`SQGbEEv!kx@K?77wl2m zml^*iGkG^`&VkJ+Lx_Pz{v$npekgX&=xZK-=mIHE|DIof!ttmH9&hh3wzfZhAJ% z9Z}YbQq9fBiZ!}}3jFQZ?kF89VDN$fNDoC_~$JdEkk~hYwS2$7-A(J*FP?}-is9~Wbw+ugW z?bc;G*BcQPNCA;V;N;s0>>+20m6~lp-N+~qV}TuZ3LMPE_r8PG_CoOQTfk=YKz{!{ zUaXNtp00Xou6c|ouKh*@`p>GGk8jX}qIV|B5ufuFZpg|r#pHw0)_i`Z4!YmFFcdZi zR?ZqXpX13^1Mo=gad?SQ)O7F7beWIrs{$Psm;~w&%pehRU}br~?{8}G!+yU-Dk^v2@lwn&}(obn>=d&5Ifi{CPyvEO@%o)GPeXpsH~0yK2% z?rTJpM$Qw*RP>I=Qjr;@&`Bmw6uzCUI`J!{4!_fw$G2>enxe|Z? z!8Id0&FQPECZpqSsxOD{=_F z#5-%lYK<+0I25p9I1iLc0u_!?!7A)!s2LD=C&`|nyU!kkX79|E+b77peu^rcC=Kv3 zX_f9qo^gCI%@?3K(j&oUM+PyZk@QR>9PW#Z6V*Q=t0nE>D9n!CU0RwUE3cBDWy_v@J80hmDkVKTvkQnI&`jE24(IgVD{wz&hVJ%Ri zj%9H{B>)wKBk(P!(5H4hZ<|9@TqPsQv%7#RRXp$WNNW#X*|E)_OD z>i)Ut!#%1?yyrrn3<9&xKt_en66Mve?d0!=BsW?Ye$~#C0H;bE$XeAPH56L{2z*!G zWjp#h7N21S@w>1F4OaLuhrtrHkyQ=a)6J9;EPNL=kG)6zle97QT|}@&qCxkrkeVx zjf0^=XV02rubdGW2>aRhDNb7VtAJUQlXkW-z(N}@-yp@NQ;+pVz~Hq#(lcy}3*RV( zr@-1S*YUhMeEv=+)K>)r3@lYH6A&t|4k${+r1xl_d;h@Nlp2%x*?tFYOM(yFI0I1c zGgj{(W1RU+2(el*o!*TcqBZnRq!u&B;w)Ep-{yP7~DfQ|U=*d|Akt!d3+^ zU1!!)r+F2u)s*i(540Klx^LcVA!>Za9HtMucXg{jw|8@Or?oj-pTfv+p{q*&=t$kV zPbkpB4Puw*C=UCaSOWk3&=W&v+3(HJWSMdUB~ulE?o~WyW{^hstCh=3^3GCY&nG z_Ho@*DvaU1s9;j|%%@-@WA)Z4?XqGz_|&T`=wExnVOS!l^~{--gG4MswgS`1@vF*4 zyOKqt2Qia0yOQC5Z)eRGG(K}9+lz=Dc5p-xXb6CQ!$I5{hrgkpySP7h4qg(%mJRQX zvGFo67hFu0-btN(rr99~%RZzvxZ(L=-m-^DnB+~hg}?-4wPM(kA7jmJa)2PYYIGzmKu7q5*<$Giw;#b}Gx25r!)Eq#*-ZQi-e}31A4Rk1|5G$^xBjbWzELu)A5JV3$b7dBO_q+SejMu+C2BXWgD7}bf4>Kq12JQouK z-fFbPKePRo0Q%bMB+)NOU31h1+7bBdbbnylU<}9Q7*MvjYMZw4Gb(pMre-8xyR5+^ zslg?*;qpiv8+Uxhy`V4g%rVc#=}pOwCwz|p$N+{w5CFM2$M?vHZrv)J4XuEm%3?5BHJnxNj*hDG9nhpx6yW)PE?>F<)@tTrt1#slpSy!PMv{ z&(G`wPMu$|K~I z=N>W$Uo54i?M=Sv_#FH0nKkK|$qea9x9}EDMx~~RglYEkgj|MNR*WUf1*oqDq>d8g zH{8Xpbc-`h+SX}^hAuw&O;jQa?9Ogm?Q4+cq0r z9t$3NVZ6hoJBjBej)1PQI}S6Xg<$6MQ-sH=6?}=EmMWevR6}ra*UWxm-oKBXyNF|m zSOxAsy=HTwdhc_`7D)22`^`&NFDDNkX~3gy>xDIE(^1TJdie z$CnCS;1ueHf!VgGq;0U$JYsF`YUv@^2|GB64ArM)#Gip2ra+RC;QMcFQbo^}y&#+w z2wZ|YBq?1wmPkMQI}(%&ojoga;df$y^5vh4fl1khS@}^pytZ`F>+J!q$GO?qMwW>% z&+~gdrdxi<)o-%xLF*OXhNv=aP zqkK0UPw)N5 z1dXi9$31fx`@py>5j`f6>l@wBZ>s<0L(cy8z$XbNUxdH#d&z4&$Qc0KEDlWHZVcG& zGGL_Lp#^XgvsV;!`8JU~hC0LsCubDSG-z`qL7S&y6|Mt)kU zJKKCIWa9Q2Vu?pf@4nIH&8s@|4rfbxhF(_>7d8bJq|reoy$AgW!M%-j1Ss4&?GXUV z%s{P@uUnABW8a3FjJdo8aN8Wb-&m{t+rN0YlwEnC^X zsLw#&yp1Gc32$#o=Jr&{b2F0g&ii(z1D4lHzgrZQ+!ScJad>~d>a1V2dv)h{%+0jt zs+PH_vv#=GU#kN+l8$vq`5crt@j5q2QxD^Y;3c;bLVfOLWzLQMr6UCa;3g(!mj(Cb zHi_m+Ujlf!`#?Xkk%^vs%k*>nP|yQ*2ayhO?Mu#mRUHbQD4!NikG$#HdSdfEjp8jG zOqLkotym2rB+#p;EmCTr11`0M zFKl{w98KSxgDBx33uMeAZl8bq>PuFw|3$`ybwtiPgIY;ix+k4c7|01S_CI2F(f1m0GjpP`pHd57uf==a|C*^K_ zqkgN+-IdV&cJ%&jqqv$1XY!n;SQ2PSLXJc_*3onNRM_D?{_MAif#>ZIllr{ZP5lHV z?E1L@^&*+N!-*Lp&01f z0$QH>4Pu6cV!4*4n&qN%^6q?yn7NO{C(|LFNzsZM_iu#U`BFWp;%~r>!8xe6M80ot zC)YWs00uaLf|1KaT~}r4-$GomI}pt@)87`8p9J3)?cz4C4AYRGxnL^!aM2|!>c&B` zf|q=d`C3lIQlzJbn%5z?+8Qo3m9{JiyUwZeteT!Fe+x~cdQO~iPaw_~CckI{@=tP5 zWO1k~0KP~=_3qOh;gOh4j@J<^}50Y`B$pah2XUH~YI0=e=yhD?Fk z%-!W<3Mj`xN1F%=Bg&8J{1^U6Thz~xOaB@EM*SyUWW_lbjs zn9Te)7wkWNj$Hz?pw9;N_kc{WDnk~OT8H}_Wkc^5{wL4l&~c^fjIZ%BeM|@CgZgTi zuc-a(xbkn@Z6Q6?gI^h~>TVWrU~)EU51zyz_ItuQDW%#s;Eg*@W($0^L_CSX+qM1i zW)*)NaR<}|i=!|;l@gRQpbMvj2W&)CK;O%MeG4dt1|9#$-+~bKaET%#AIx)JC9%!B z1`;`kG>baPk#~KIg?QXS$UQ-}#(@^*Fu#bz>=)?2+lNT3^;7&v;oxxEs0AU8UR`}g zGsC~~xQW37>8`IQd<_IHVXS0>-GQSKuZe9ltn7xl)pb()OZl}1;;3l|<~xIzS5a!a z`_Sz<%nuIcb=DJ; zK#*>C_#$(7XDH}ZJUiu}YcMHYN*G)k$mt`48Y<9#$q!mgh3NYjk`?xS02#mod4Mxc z`%WKB%bb?Bh#8}#4k?oHhVZW5>IqwXWg4%brcm%kfHg@-BM{uE9blKi_XEtWCI;h; zd|7+L)gBwJ|8kF8KdqDTw(x4@NZJx#>3TRb zxHgK;Q)6(7U)?EDF*yD0TRVdj+%whi)%AnwVT(Q)Y8S6t-a9k7d2jNW7DYXJLqIVI z*EKqt{KS7O`D_7Bf)rB(PYY6;)wQJ*{5=DO7Cb!R$zHVlm6Lb1djHgF!AHRdf~iJ= z<_??Z&QJ%)mp5N6og;3K+|RWN{`4D8eY2lvD0A5-Was75X&K|8v9IpDS<2N#Rb&hxLc41n2ivnBroI3M0;3zgPJ12I#FZGMWRtvYi zHa*Dq(^8p)Nj(BA4rYZn-IK$YT&;FXGaAl1Hm98}fR}Z;Di!%?BDW@~%{Z+|aT-Ci`vzTqUs5Ovmit(pcZ zBUNOze$*VgBUda5$~rbJ7Akq5GRLweW-5Fv>jEb%lp7ZF7jhRtzC2f|ep2(-1$@Q1L|$7KS4EuLu;9z5}eUDRF$_i#c0W_UL?{CY8JaZ&U{A zHBmsAsYLq*%QuaHL@`TS{5BN~>bJ{XC8$3iOB^Vo)>j`aYYi;WozwQ@_6wAQ=Tm6D zDBOAZrX6TFG2X6N&7@GIMR8>435qj?)u(#~X#^RT2j6oj%8lrMS9Agr@$`7AyouLh z>eA{aXRo|zbLIRM;Rb)qofl1F_C+K|YYLvn5-E2?rCHpt9JiX|Gwq<5qjsy8P#s4r zNh^@sVqBGSr5Fvbc1x>Tp_PRfN~bbj^~T7ltiyKq<%|ZLVW=ja$2F+sSM=eNJM7o_ z1??{v#2p_j!fK5gc#?1BTR<&#gfDqAP(}>Ju*?Lc3o>^SZza z-C;zwe6eKxq{1@?hFV7Lo-vQsLpRs4JEnp6_XBUGuGP_Ksk!@q`%-)M1!DP>lzr5a zcEn8dxxbXn{e)gj;sL33E@|GRejXW9A-n4 z-QUy)N6cG%4Y%@JT6UZYTOL*%*yrwXm=8h~)CFOQyBRoxixB)~fY2c$j94TI{=xTa zP2mSb8ZKjjI!w6(zlIGhQ{wGfkz}C_IM`E@nwj_ z2tc%*^^^>ahQ$uyq_tbFrBio#mly!Bkss5HkhzgAE$5ZLaI+2UnB#TRk)ZC!j0NS^ zIXAwq?TX1s!JMTCZBzJ;aF&fC^fOg#$1b~5ti&^k?#FCwb?|^;>2-T6p}#fDP_l(VJFALscWvYC)etBeJNXQv$ zb!#f1C?t8=OHglIvtS!zwkYREq)nOQg!3hge)P4T4H#ok+Di8j*v=S#A+wmJoX%j` z1TwaR68P{UPA7o(vGADQ4QIdbH9nWSRIz$2bV-8;dDRCZU4uVLoe~Wp(X4e`Zw29# zEhiGGz;g-v+UW2D2$UfJ%IKv+a?BH}3!lI6TfB9Ub?m$BsgqYE!7cRm<;RiSr+FSB z8}*I4!yknG8L#Adyxzw>3a`Aw3Dt4HKe=2Vsl`&bk|V7_c>sO&xK`|06+}|`#nfs3 z97nm%OAZ&JEGqBp95y{et}(ZZojGeMvZyBL?)E6mnLYXQFMpbU>^D?Wzlp`Y zSzV>%xb2SBzBf|iXNEsWIXdJ?J|MU?VclDQbvJB%%iItQ^=UXl;D?5pK?FMS!^!6} zK5i()FZ7*91Vi<*Cg*J0KC2l9;NoyljS$Vl)HA@}8xndj#jc3VP8E}^(?_a?%t(w8 zqp1?)zLHS9kf3vxFctNwp)l2ZbZ8xUuzuv|fVI5u&E@n`94suaQqiDwd3c|;79RIN8-1F^3_{+Y&iLJQU5Pb_zjs5BoCmV5 z?)$?l+qsgzKf)R&J|}19xYxI4|{*I zf1iN1?cWph?7S_9eDRP38;YjIr2knHhl*8%TjtL^D)&Cf^q0ET^<1g{TE9m9R<4z} zr`gf(uAdbrHvVkhmU;Rh+VvN`%;UG#v%eL5z!9X;Dj84&`*+vv3nWs~QFhMC?P@2~VjJYo*MpeW)N?QHc)q)ndsLWT-J+n( z=%UeJSZOa?O+?JH{+=3WB37=u9pbl0QlO=ErFXhfS?Dcv%&M@AYQL#tzyETf%}|3) zX+Hc;!*SmVd|KoX|mRf7OOYzhUu_|k0uR|=Jp;-YrDn(6Gz~ehd{k*Rv0F7tXHWm z&w7mA+)=N@t{Q1;8%gc8cF7oVa_$iQknSzmY(woagXVTiKjw3z4 zGKge-3YadnS$Ua;AR_Fv-5Wc_kjAx2vD2mMN9}qh#r20rzqNL9k-P?M`q@3O8fOf{ zOjo2Ud#S)H7JKo5gWR4u&AC$Gv8c!gLg71REvzD|V0@k*bcAiO??KJiog;bRhf{W{ z&Ls_vDa*^W4dqcSLmehA&WY}%r3(ql*M?P9*4d94^J|TO_Do974};Wpjf=O6^hiCI ze1I7Y1rukOkB*}{$q|&=WZhM~)P{l9zfLB#w(+$} z{&1q-0IKckI<3Lmb1c(YadKlmPE%(OzLU7@(@}IMPPuo@X_~F)SUXT6i*-$had(Em zB{oy;tpmZ%S19R9XORlgH94$wDaV@zAGmmCjsB}?U0q#PNq&2z^T6F^%P+z^M;r=1 z6E4m%7gV*wOhk%)qkN2oAp{W}?9BX*0~hM@vX~seP41Vk8GS8v*$xyo#ufPeYIsAH zPtCP_wcxTOsn@iY-YBWqP%vfcDc?EV8}#0FM)s=tbVqf8tH+kr4bL1_-j!kbbZv6c zZuG+u#*GOqm%LHVVYz)#cl%m*5E$^FfA1ln6Mfra`j4bbU)=pVws}Y3!9MFb9-E>I zi?*PT4<5Z>X-Q}+-jG&_TXes2VCsEFnc1A{ zcxlteNW#?;?kiV_k%t{iDrnlv*4Ug>*0%v^)AujDSLF$R2<1_}7K8m&UUzTP3V6&z zuj0_p_M6~u9uM&3X{Hm;6AzU_>32rALL$+t^s+$fq7SgkAq#LDjfE7X9l+8iUjF9H zp3a3lUF~xP*UlC+KEI;-GT-skh$8Eu$jNzWAX=GNwGwyNEHOuRi}=*KzkzK3HplDe zJW#{h3%}(qA3Qn7UvVVRb*pAbamS_6Bge9I@^fAz1!CK5uXwdUfhTW@nAx$v6zg$f(nB4ibemHx<5h>RwJKHPlwsk@@#_!GJMUju_W)KL z)Bu>inE+}`xSWUFenT8vTZG$wlY$#B)Y3iodjQ^anMWqXS`wl55yI=Zd@~8W` z-$~%po!JXHPo4zdRdTF9nnFkmevz%d*wEuy;({%LApbl^K;5r8pBU!xG<{75V6G5VYwT`36nSLKQi&r>H4qd>R#@G2w^3Yq62&)4-02gtJEv# zxf71;nfJ~QzL-B*ce?9x^hYiEW#`;2p@sB2-;TZRB-?pi4t-S^c3|wDuz%K3{GZkl z&A617de+tSz0?j`|`~` zgIpQ7oa5mRF9m?9Co0TfRT-IY3Z6836gF?P7>>a>xBt93pLxIk?!XHd&cL?;&bKAb ziQfO+OVZ``k{cRiFmlVOZ%@2tb;ROTF-pE)!s7|gV!T;l{sb9xQ zf^_8_^}@UZQzt?SCTqCEA&_bX`|{MFUi+WM4VPHGwyRAi-rH$`B3LsTJ9BeS!necYl**E_Gye% zv{7^kPn|{)ETg)GVzW3^+LtsADGXDUM#hvT=ltxm3Rcxm%wY?TDcNAwl<2fzY+)H)fUo=Au2wLKX!LJP1L=79*j}hBH5f;wrSxPF&qhW zHD2WKfF)m-d$H{7WE?og^wpPEudmp zi%}5)5tSNLyI)Qr&XqO4Y?LV3ge_30PZf|<7%G8SYreK*a+^HnX6soMhN!$3-o8fjqiA*c z((PPPaxBY^;UG0K8Nj5$Ch@tn{LK_emvGXKNqcXd%Sp7Y&(5= z`E#Ti0|FMM3yMnWE2E%Kq6B1v*+Ai-^3Rsl$E@eI@7?OkwlkLc6!Yrdy1ZZ(>dscs zL-Wjz(1)|@Y!*b~^s%E)q!sH=@Z#P3goVY_qI)31S^!^5VXwq!3tmy9UY!Re7SXmk zZxcZdLWbQd1WnuL^Rwogi^~}Ti(6%G>W1_HAAG^b{qhxQ;hWs0j+~O5Cw^Yo!EcD; z!P+($6Gej7;$@T6an*!JaU;r|YazabNg>(OLWcm4`OuG<0dG8l{Q|^Yn?4I&^Yg?G zT8X39G z{afZ^qR$Hn+*RN*LFIJ8BZiqWy8z_4Y&sAg!)E3% zEv11_>}4(}K!ITd!^g$yXb^S&YeaifNs;}(-kRz#O{`>@)5=0QP?b9wYc@yXz01hZ znxpX`jZ%M4(RiRf46b=9nERcsoXf8nq0gU=s#zvPX7Io=mB)>ywDYhE@-pSUgSh%M z>u&7F@Z8+_0tRQ;EE%QjMHwu1WSeUR(@vt>EMd5903wmfhnZNzn1nT|?`0QrmK!9u zMTPLmK#9e$%#INN^0YiCQ!qE}10yCo&n6gyvC5TL418c}4@t9XwG?o~r%CBqSZHA_ zFjqMlm_RnrWOoR6g9=1skPz3>%iervG+iL2R^H%ubf2X{egC98R9OaD#>LcpRDkM# zeD%6V@@uBX$jOvJ{Q4CD`~9y*(G z7S%WPR5=q;i3ED*Y4Cn zh^*327|gB6wD~Iqt}8jDr>N?zss2$zk7s!F#(Pndj!acm<_PHeWPYq1T@FBiRqbE1 zPd|6JOhU{0+Rd1=4>aD#RQd6oEJMTy+bUzRAUyTc6b^XOws zM=QB{+!6mG{a$S9ry>bR3 zb_ap6>rF$QdoA@A7BpBU>Uh(_`<*yjL`l9NoSdb0J@6?}zY4H6l7(3@bca(zDq*%Pm~ zNVx8YY3uEbvhFy!px{cez+_}V^#*@_#WfD56g#}ZW&jGJ?NTJPy-B1P3&TJ@rD((k z6(efOH$ij#A@-Rmemy4Eg&yljjdtRQ`*LDs=1uGssX&~7(hor;QPFw}_3iQ?jD@@K ziJjYu?F=KjbDSt zKjz_etRna8LMj>1bO1P%1i3(hou)#ou7-T9(C0Rrem0%fB)gRc9#>j0vBeRZGQ+au zBa??En@=3JD)&p+J*g1Li})PR1=WhTVO;v|FcFeH2P@v@wcV#ga=8{+wlkMiGyVdU z%W^2+0a<(dAgMlX__Syv(O9E!du97+i^Ki5vr`tbV{Ec@m9ermIaxV539OvLFwmGm zGS^hA2s^69imfVl_}5h9N{)=P6kKi?lZ@6f`c{`h>X1 zXrXH}Sf2vwR>X=fa{qP#xQPJCs#GaR98{FnkO&UP@_LCt?C_+j(Lx(oIz=&}Q1q-h>}fGXS1hT~SSXA-lN z6%m)<(6YURi{Jf<4B|OL?TFXTHKPTGM6_gf@i9R~mR@1tyoNzC(2x>2?&h@+1iiTz z7$}DB5>$emWe3GI+gOk!FWCV`t@)T)W_?zPZC18wLe{Fbf=*p$>dp>)us6RhuM-r( zhm>^{mp=m5Y!nmtpkSL46cwy;BSB%*cg~*MSt#2nz4NCT`t|skp~%*7K_9d2w9XVoQjQv9DB6Vds817-j?xYx+2wlepK%1!h0l&b;5)pXErp*Xi$LlG~g^q>}z8ZbL zW&nV+0U^Qu2!{-eGiB%QjjW+Ty{yUF(2I6ysnFAxvKZLlZKB3hD%5|zu5=!eBB-DV z^ecZT1dW0Qt3lZt3Acumy@>l_?M}EbEj*)k_J-E|TY&ZzBil1hw8nSIzQn#;_vqns*hZc|wv91>#1jqqhF5uCUL>IRF~OD6IIgeK+4Lv_GM0 z60l|dL^zYiKkZX=1G}BykSl~710wqwGU zHiC#4={;QY)fWX{7K}+vf&jBo52(@~0(*_nbRjiNIdS=}sZ6Jq0?@`W6cRWOb)zcU z*}?U13}lb{S}qs=52A+NMTZ6wptNN9kAY9+abK%EQ8I$(PpQ@c`4`d z$$CYxS=8TJE>CxQM%oAY^<;V}FgGiG*_{ zg8UuM(&Bc;@yS?H5CyKEDM-M9pG_VK#f+M0y1&>M%{ zA;F8o%`8#aTru+Ulg)epk|91{<22!V>oK3Xv7G>rO+LLR4`QSvS|XX{ESQRU97HNgxw5%aj&WV zvLdZ8s$X_%Uq!(4$l=QFs84n_ogGF#d|r1macc+jkuy3l5Zdhw^B=vmoM@~tcE>ak z^4fsvPlP$iD6#?~8f5wrq4>UGx97ZG?+fgqdOIdB2 zscpL%;U5BEKc_gVy7X`MDuv}qsP(%<4Al82l1W#O6rMOm&q?w(d*v`HvN`$QfZ>1f zq=W>2QeYN=?~@6DGlonmTK1X{{dNxQ*%WqNYN|DnYZ9;CDqGmSMG3Qt#CE=^X*>h* zJ=c(0ADRq=ob`<72cJ(XNIw>>?XG^_0Jt-4K7Kd#!f|1p9~D0Q3y~r&prH%HeQnB@ zfH8EP78TGFf7pcH5w~+nyo<_gy2X|h_=hmeX0L|E$B|f{+7TZWwo0gRK;z+%cr!~S zZA1sQQ>DDRjONyY2nm&g_hH9G|64J$@~6EW0RQ$aeKzc z6*&#vl>7gDfjA?PPT9g}_Cf!Aa)+}PXd|%vEsWu&^rh5n4+EJ>jM)7HUNa9<#+i6b z83ykl8dBZ#_0NYK&_kxsCWioyf7{_>`Zf7zzr zkC!$(`p)~F?}7dYs?9UCm7zPt9O>LEl%Kqf=&bk?>Mw>8_OzQF976Um{KZBZs+yAU z1&g8K52f7WPwp^rbO!_}iauYNe6>SX6HkLe^#U@~q*G7Qr=6EgF!y_HSNxwnIV^`M zuIQN5xjE4~a47R;x1vSv3rL{UJM1!Yqrg)oR5*ZVMxz_bn+BBrt*5R0hp0V2yKF55 zldjH|S!(3ny{(Rcc2H|s_0UK`7oP>Wa#M-If<=v{yM@PdQ8W(q$>(KlnUc6IFI`KR zf&2K~WowXRD&jbQ=GH1SJP>qa2E6YsI0hg%nGQ19$exGgxZirW33&eRWsJX|VSv?j z(XW=zpd>egdU__aRBy~Bp6@wwkk_@#FDgG|8Is9(6yysnVNI2FPF=3nFeJLEvQLrt zUPiy6MPC7UYUbV^LQ7Rq_7_TD3Fb#w!|xaEr$(P(E-4M#(%4n_k(A!?H2YJy-j~X~ z&%XNjiy{93YDC@b^U!PC5LYFNO;SPa_Fsk2zA1CMIFG%}sxAwk2^i7?DHr92UR_T9D_wW}Z7>}X#H;(W~Z8pHlqQ=3|sUX$S) z1K)O2Ax66__enK1c0BhZ_?04koOT?v^9dCQjbRUV-J_~oz>WxJ2btiTAiVis(@kTn zu)iw`zzU~V{(;Gc)j(*F7}DJX#eDE53_{XinuPC1lwX^HmoM!U%q~S|-|}YqmSJ`t zTJ%IP%?}Ww_7fiU56Gln0k#iHO|>afX~+m5<}L6g=J7 z{=dGOIynEhnn}pt((=B1zgxA^U6RyS>zpNqEI}Uk<)f6zN&JsLZ{Tji&s8_CQR@6oxj)+|SfEPl|8lssZMO`XCFQ|? zVhwDY$Tq22Q=q|jOHwm#JjKR=&1tYp>kg7x!*ijdFy>L^3*#c72q;UG_7^4-MUh`y!}5~ zT5G@dV_{pVrGV8^q7ksvTx59`&CA85|KOqwE`^YCv>M1SiVe5fFXyk1;<-6;c|z2* zoF~z;_|L9!5EY0?sW`27`ssy^zk@|G&L)`XA|JCp8ok{N{yQIOG$I%;tnQ?6i;N$n zaEmO0F0J@FNETcQjeZgQuA4U%te-MD3uvY5^#ODwDA(;#MPB4!!aeII&t`>bX8Hf2Yj(kIkEHkI$9$VX7&%wI$srMDJK(We8l!~_1Pm|nE8$Ec(TP))(0<> zj=O~hWj25D&ZocG&tEH7Xe#Hs%X_WJ_98NJ_%$ayTXJN*Ma6qD*5u}5;}P)~2%$z=F|G z+c)70ZuNc! z!%o#zZm0EG0luAmA6rl-UpJcId zF&t?3HtPxCo;e$)xF&{evR>AA6S!)u382;X9E7=;iwXGJq(YCC4WmAnIV#B6^OphL zA{>u9O95k7sUc8_D^|g(l@fG5r%K^W1o=}O*s=;}to!e*!x*yW<^2y$dae@=V_$Ex z7RKxs_PZz+u#{=(K>D6(D)lNA|A~1+)`O~b7m~b1i@cZ=Jk7aBBw~;I!ay!Uu5Cn1 z{duyU(K^lh;-tgf>P`X5W2}gMl6{xDIo|4M76>PNWk)`na!@wXQ0+Q3*Y@mt%mHH4 zG8(QjOu3yHv;<7E7J`T71&*j8f2E`1AOanTG7Vv8?xK^=Zo1X59PQ!RMAErW)@|D5+#nrl+LkEmx8y>&K+g@C zG9rESuMnmik{6b}DnI02@Y94o_#9kf+g9;FG2K94?w$WcL!`Iw#IKyc{W*Ly)d#yj zuAX^&b}6o;L|5lIZN^;pZAEoIsC82l6Seb4nGcD_#dQ+BF{<7$Zd8@7WUUSGmxrOm zeeiyo+M*HOynBa8dTw_F88Vnz?Fz1C#ZrQwAtoEd|A67!7f9vqF~(>tfpv07S* zC_&*Z&5d2B+C>g+A)S6FJ)#01`mT}ZjKNAFE+=ZU$7C0}=IQ|i4bAX_*`9sV3;f_6 z7Ob&&*`>Eza|D|7Fy@$3&>o^ld~IoZtRS^xXg1ws2JD# z+?G4T;iG2WB4^kp7EqbqEVC*7jI4>q0izse1ctRMhW%yuG=~$y9BVul>A?)y9#30; z3icaGQc8vAKLdO3xulh@WFO6O&gwj@TsK@{wN!?L{3oLEtt1AJY|(=51kyyf#UOlH z#-KAnrAds(QrTd<9ui4rty6{``6qaK_XiV_l4`TO_EZRJe;^DcqwB`Z%#4}#_c^N7 z7JA#_TvYxxcW}^c%Usan$SC;|Co~`>K&;gI3TIK>s9q?B>bCXjp6mJ?OgfizzgxJa zDyfECig$RZXW^1Jw^md6qkD^{j{728V3A(5t21lC_X0xH^bX5q3yrUK8DY7K8KyYE1x;ab(kT~ znTL!kO=fdBHs9eS#F&hiWsU-B#n` zr8yD$EVbnP$s_Fy3e58Tfnzp6yMKnk4+};vC6zuD;+(lc0STc6I*qAjy$MC=mo)>Hhgx5cQF zVg{L-HTH+fTbspN4)xhvPMC7IY0OO$vgjJN4XZlL)g`wsj1KGCgN*}_8s#9$B~aor zH%FjrCIYoSIq$OARvXsRj+pR?ztkBv>=~_W6divk zkHS%wbyoII-lS{S6l-6}qWL`19t$jVDxb0h;SA{5!^2ZP(pAn7==#4?5i~iZWzAM^ zH{V2X?=T@lwmLltOmXHpvcbft8sjA(hQYB)R?#GLROTI`e*sZM0(n|m;Q^vVvNkJR zIT711!3ry4t0H)0E9cyDcfGDc%OUXXtbwS>5;c3lX>xb{zOHQFEr&N6k1i?C>naPcpo!x4~ky(va*?o4RM_>p3x#$FAa@Ux~&Ep1Z+&sXzgN2kQ1F8Q6=}!XY z;>|RK?4tDX<81c14JDEYAVUPI+$_<5#B=N+`kG_KjVy>bU0@RpKht z(J7gxNkZfMwv}+V2NhNkr+j|pm$Pn`W?t@kGW$fmTC=!F<4KiVV^v+z?dG^1&r7n` z-WAWyR0A)o*L3QBhVaZOzRjIoFz9LBMKZQj%bUi;%*ErZWgyPK zlJ%c820T$&uHnE*S*58UfLd`1)o~m-zK3&thg=-z>rE7(9$h`ZT~xfiJ5ff2=zlWQ z@E~38;+vuq;>&uZlK0Klc5k>Rn1h9oO=#7{2JPA;386~44AVestejR(=&vdvM{o%2gTfDgbfCG)ji-r{nUU{(yEQ8``)0sw$a(Mx^u|cLflnc;Ti`;<_u?7lW@Sd z(-;+^cl;dYYBpQ3fNM(t$*|c9LnN~w0DknX%Ck4rP>bnN=Qe+6j(t;8rNe__v_BKt z<)?09{m8Tx}@_keVA*ZA9lXJ=yXEx0V^(Wk)1DdT30&wEgc3pyX%Jg}FtCk8L6%GWG;y7LX^QHx%XRT!H_@)QX+#xpB zNyvhtBgfAOOR3PVLCd?}`H1WF@=E`Mf)Pp=i%rUN-jIW$Y|Ws*Il*g@#6el!q+V^b8JljDB8sv)dVsXa24m(37y>X zpyP6694XaXW(Z|AS+oT_cx8R-KN*cf&QJOeAe#>i&_e?t{W#)i?TOIG4qlu!22g2C zU1pJM=1TY!0@@#V{Os-r3z5ei`{Z`+zmRU!pE8R#v3O$887`SKb+;W2JvskKzZILk zzNDU2&3^{WO;^&h4=q%a>q-I|q=b@)K!bj|Ssdrw+o9qZe8AgzNFpBeI7A?)^u6NY zpHXe!pz2LsT$7Yqr8+lr z;g%CD_s{&Ku6ar;@}Ubjdki3J&si7IiVCh4UOq#<$@%)ZVC)Oq3awZ#@|f=&Q-5EV z)#y%8mia47rQVa<6%|?GQfrlKWW}{@b^sc!SuZ$;# zP777s?Z$fxt%Pbjp2%!+TaY{Ru-uX`Du+V+0cjvmFc#3Euw;g{b>XL{3?6TPv|`KP zvrE|0Z)fgqeh?K8bU3=$?I=d&kh)Zx5n~#q=KMuPGS7fds3cZc2nQ7eY}ItdpYO)i zaWR&n@eRN0>RX=2P1RhUV*qzCyxz{5|EM=P+xB3Qy9ej)1!=2FepvNy^mLT=;nZ_U zMquW>>O-)aD5J|J#Mqi?rM%^K<|EyMxA*=?zq94iLz%wwR^^t~U0ij=s)(~a=O-iN zO0P9k1Zt}7-ElQUdzY&n{vYnP(x61?%@U}=SCI%pfhu_L^V||;D%Ph#AIrb-{1$fk zPcvj;>F{1`>sn`ph31YqkhQ0=zGrm4wy=3s-dp3uR}s5qjzhY?YZ2I0v-0dF^i6*Z z_uu9&VeZ|}k0#O&H!Q&G8(zk^fZGGidEC?3Hp*?@7N+F4@DE0F z`^X9Pdg>=S*M!e4ty(LKO?waoc5}(U>INtz#0C{tP{C>+WeC5YNWKzgefN>+4+qZBr+g&*FgUbwUps6am zJaTf6w>%rR(HH@8_0faHzsmP`SH#c*21UYK+A6}$= z{0-o`@N*APV4Ht{j6=9)M?Zdm$v9ED;X|;bp}cJj@D|a>&oG(IbZ&rsevEzoHUQXh z2>hkvQ!N0znF4!jhC6cp)8AmETgF~WL6~IA$8F<1Ryr&Y{M;U2);+}k19?f0%>YFI zzdfGO|AD-8ysM(-OKH4HVffSOp4J=3iLOSI*bc^w3Az@)NbYT)tEEJl;doJy`eUJ! z(W)f3(-Rg62W2KJ$hQ>hJu8iNUqZ{=f&ku{aOHlU~WVT5`StT)?^Ax^4+4g|tgIR8BaS^zEBP`TN4MsN_NI9GT7G`!L<5Y|q895%ZbsR)7B8&}VGF8mgM zp_**lSWS#1%qo&iPH4qEBg`p|5qdlydcN|hHe%5CNPhlp|8n8~}t>SY(i7J8ayIJ}P9gu|+{ zY4|}?8jO?u=W~vFk$|(9dJt0a5P$kZxr(X;_+#Oy*<+xFDjU!XCxiuIKw#9o=!7h7 z7X`-haenXs@pgA!{XUe_LL~9j@{SqJ?%^-$YG(g5YpGf$g|?PzEEl{iivfjBA!&E# zCsnM`h0dzJMmu(dSrm}+AO}e7>qyporKU+);W{(>#h|bKV?#cdY+BpHgt@2T^a7q0^DBn=7H3qx zOjFrXunf6mkxPQgr@h3vp&Xo7yQxQ}n=4vPkLE&~GhgQCs&hu2-yPlJ{ky!sJ=;po zz!~@Zrrr6Vb+LQY+n3kdSPUOJ9n3K8iLN*9e+(KD1HhZI6Q^*>6gKD0o??s& z02^+RhYMy7M7#Po{!~yc3`&Y;$D&tv(dU731Tz~c7F-~w2b#gR2y(;2S76bG<9e3M zFujmZ+SQ-$aHi3?KjF)=n-I^p_S16>=LNDp>AQW>6v2vB2`GCCP`+b@|3{aFJm?A8 z&}_*)w(3sww;#ty5TIPWwOI1JOADrtm#c?x*Nw90E+74@V1d7lFv^)8l<&{+dS)K} zVuPvJDX{K)@9q>mgVZ$nqWLSXO(A~VmGo3G*GdFb@W#&q3?4Z9YaH@D5+uNU5fr*D z3e2L0Acji}=k5M7a+8jJL`gY>qYgb1i{ati#iS|<31(5io#jS)S?i7;z!riujF>^77hMdCosj5yt@uu@eWO@Tf3R; z&kEufeM8GpXA_wUgyLj{a6Y%hOOArR_?gJnR7!qbRYdsjv2$9*V__JuzlS7{rC z0uJaSJ}P?R&!cnu&2+=SpedU`woU1^X7Uz9l7u4)u+23KdB$p7dYLZU&u8)B( za{I)V1OFk_hEa$+3(s&l`cPZNWO0su#%+mXpXex{U*he=@#cdyRj#^McJb3^ zD{CyP+YPy51yAy-Y$!4C&X-LVp=aP9M44Q7S#_ zcHEn7V$YTV>|L_SiOWAVG%?o#d%)KbE-DWQUMl*IdGEaRZS3^=!g2EZmeYo{I(N09 zR;Ph*A}*PQxXPfhbQkb5!(0&;lhEKJUItU%aR_#7my;Egp?cWCafc?JMZE; zMqQIVD(-iit;we$5!Mh*bmdu;Uu)_9e;B6i|3wB{AWbtAIJ7v6i*f zp)QkXdHSa!)}p3hv{!lH2L#;$KxW)sLA}}H>6Dn)Zt*p4=DTgdMhQkCGh_lr4UwX! z&I$qVAE>CFe4yW3UV5mi1-9!!WFgNX&+&^{@{Z2R(wmuk&xJs(8r^uuL1QXp@n`w> zcf-v8%-H(4Mx#1}&=VZtwpJaDN;qXmMZxzw0@J*3R4bGW-7jAdu+B(G!-6m z#YcEvSQ$1repXy$2=P4&EQRt%o2-qbY!A_bV#*oBHE`eJ4J3E9&nee4;kSPeG5kOU1{H6!M}V* z3vs*E-BUWmNapBKpVgyoHu|=3icZI7+-np|Bt29ie}T2fjVeq#F^UPd^K?kF?#{AV=08 z62)+^Ov>;z&|kNNy+$iYgIl(Au#|}s3*@WN5L+TjB$gYYm^O*!q7NhEUK{FNC;#&I zyBGvrTEz|R+gA<}FoRTN>Kuma~g`?A8;YY~!NI;SK6xxjl%RFsYdt-a5 zRpiHH`Id*WJwIgn)8%tVA#Os{WwNXd8d6M8yAcic`(ZqlPV{{ZQ%>gIBEvk1D$i1& zI|H`eUvvCB=~JSO2Ep)OYtY+8kXE6Lv@R1V4v#{> zq5Uckj6}ST? z@nG!51pls9v=_!7iL3zIBFI& z=(`oNVzK-usbVz>c|cEnAOJ!8GTRtnH=?X+-u_cNHv7FMSgtr8cPXC?~d%$oD>23P6i`lXYa|bvYMg+kX(s~RRw^=(81fk zCN?smiy6qFfo4aWPCbug?O3b*sYyQZIs#izuvo3(dOUO9)#0%E$DL%G*m#pM*!72v z$T8>o{9sKeIzt2lA2xYXU(q;Q0p}d~FH1#7P}zIh=!rCY*nedzbfPyMF)Kjj zQFGL0m70v$Cx4ysj8DG%{h)PE{PnL2{%;h)E!7?p+?hWCN5JclqkKfIa;Fvt%tZSs z+GgyxjEoh4u2U4&g>wGH6Cd#kSA}6003|CzL{BH`Wf8Li zh#~+eq!c@~aq|&mtyR2@GV3L=0w3oj=F zg=;l^n-6CPZNNE6eDpwF(-TJJ>lo=(NuD(wa_=XqMPO|wM2yq-Y&6vFSBl%Bmu%p{ z6lD<77_8=EeE!g}590;CkpcJAPMwxKIQgpwUd@92-Bq=Hn)b%A$wL^{bN9S0dzTL# z;x-TQU|RT%?td7D*2Gcay{c7(HNSeGs~O7eL!oww?w1UB7eWuc86?Is8}c276pV8= zjLxb$Ui-Go>5EKGZ2g5B&S7cJ&bL=~)i9N+>>2tEKl4~c==8pE~!wQ%^=8<NoZ@(Chd>mf!BSnG9t5y#0e-M3dNVsn+vjcn&WGnJ2z&+o2VQom;E+6){AY$-^!$X(638TC%h(Du8VtoQ4Oiiz%72b;F zn*?G1%RiR9fIXX+L!~Y@5UrP`7MUoMGTuJ4xiuoqzhgI=4^)EF_m+=s`70?zd-#{K z`BAIJh(@eps6R|;plmxmvgpVWcR=QUC?repg{p8}Y(Zt)KSxJO;V-EODVd&B|K%8N z5n$a?^6A{Mu-k?w6gN=$O;wR5MsaNE(SO`$8G;W*~~9(q`I_w<_g|>5x$CkwR1a+apC|+cfsA`|WhLoM=+b z-G=rT{NpqZD|0?wDc<{)1N-cD1c{|2%x{2_wAv&aJyMwll?fxtS7r(zuXoDKiDdMA z!&lpptPkBW!i_C4)t^c~f|wu#Ri!#H;)u&h^J`nbVUQe-`Tbq{pSrx(Ej{8f&q>UH zx>I}8?9KlpDMe!oMx#&noeQOOgt86a_t(EGQ$)8${XZ>EUCYDo_*&qMv7Cy z@FO+1iQpXmeJy{Vgn7r&(;5e<@B1aaK7ZP@?C<%60PI)M3L^*phpila(g=VghNs;T zzSotD`f=O_E9Z>E=tKv|BXZFyY|g7ewr2?0AFDtx*}l5^l;^glaUv}za$zRPS1w?E zabYfI0%4H3J*$hpEE|3?A&>o3{M9eK-_LgM$w?P|Lv^xYGAyz$*W2$>>UMV^*o6v! z2KbAj$oyJPr5jo8gr#ZaKNGMb zy4|LXGKZ)S&xZZ%BrR*C?`2JzWOrr1xsJ1QTh$tdesM{#r1AS9BJrb)pxY-Mqo=JO zH92J|8(4xMRE%5k#3%A-Ni8Ei2X7gL*7ZbBMEj9Xeb3P>(D&E1bs2bwD?**z+gnm% zx#?d6s^x90jGSe#nroqz{Q|ha;yQpUw@oBu89JFUR|+i7Q^wKT4l*K9mk8N>>K)Cn zk6Tr@%YX~GH{IMR+dYjh00=YNg2dJys|%Sn{M5ssc9`30m>}H?Kjuac_$( zS~^KG>KAjCwUjQ{g9`{O+(zE&d+eEE&g1?KF9#)pPKik`9(Q!<8ry?H5zyD$}`7&9QC z{5JAL8FFzOr$Xf_B1bL-J5C=zb~5fh(ZsV-=l%mx2xaVnui{&WdWy*;AvKA!jM76r zdeyX(Z9j1__9STvW_{(zs|xM;{x==}(xMJ1)K9atLxTMQ+lw5H&m1Ni%6pFHkj1#J z=Ou4lUX;B>xad?+=MPk0ZF?FgD@Xl?fRx^!Pxl!x(0|hEq?Fm5eo*>%;&7Nb!GXn*b|+cIktbhOe4im)Qykr#{|!q;7>wgN7Jx{!4hp%+ znR3?B*qknL92%w3#HdR|rUtDc`wjrFu>33JW%e^o&U z+B2yVp$x=&KlSqw|FSndsb4+R@GIBgQ*EI|gd z?yHWnTRTsXP;oLmq-jW{vG@>ieRcxCgBchNqqha@la0R40IM}|h(2EbDD3B7(J72C zh$U;YkH)muTg#`Z-MpO+b3;4-Db$YqQR(ixQ$D>RcC?Zo%e`mK{(N1Cy}sMKyXa!vhX|#ar|I(Z7-U@)O2>lZ^~Mqw`LT^I zeU76~ad5p;(o>n>d0+T@6T!-CS!OsLsyLYfu_rzVsOGv#%*~c3EaIFMTGn#z2UjWE zHZ?mKY3P!sGO?!9RM^qs!1x#{-#Cs5d8f*AZ((rpam#H6^{X;H(x$WtsU)N#sHp?@ zl)SqjKNqVg-4jpfjEZ2E{Vo`zX?@Y2ncP;JHm@Ixe8X>rPCdUq?&bTSpZ|@zGDi4V zouj5_*mF2P;AaJ)CADTVg-6puySjQC^R#?uu;ul1D1I%R^ z*=?=#*--|}8Si3C%(d`bZqrC|nb`I#A8SS`X6>FvwDEKG8~C*T^t|yuJh9@RIdr~& z2ve@<!tY{dMKX&N|Gwl4vhm>eErsB z)=Lv|WD&(^c&$0fr@^|Q8~p3$PGh^MTgasT}QF+EyRx>`miT#S9%(C z(Ayuak|!}I1#l+&g=#K~t0bo1j}?u%Tw5K`z)x*rgu(AyySOlL)H*`fzYT@j6B+>j zv*$lFV-E{IA1hlCcvuWS=X@<`_54~Sq1WT(+dAiS8`$|fQ^sJCqjVK(4*XBeu=8;O z@7m`hAM-q&VX2pDZ?t~<=n#|b5al^}!8&v|!F$&4fgiu4hD)~iK=*0*}RQ-s`;vcEEFSiH%Pi93%J^WPmpD2UodQbOgvAMfjd7|G4giwi`OH_p9>awz7(CC-{K|AK!b~ z@_MVTzUf2%?uVuGPrJo|@btWdwSG5*V<-ZC9-ou!#hd2a_`f|K&|PObKk{L&a04xJ|7)+OCdx^s=kF0ItA#+4=N^>^ihhbjWGt{|}#qHTp$$Ji>?3^0*uriTC@(m|*(xMl!u`Xh6Y|Aif0F1&Q5 z_OMHodG5OCw+WX_2So&N$@aCLG=x2pxQjLwq&^IY zniR~~eBR($ueGQyoNyF(A7k+x88yrv@M9+LP&TSrJNE!9FKz<8jdJ60oMj9>&pD23 zC321l$#X;3-bw;HQd%2F-IrXY+iws~?7~G)-*>sD>I`-eXmN==PciTGocsxGYyVx1 zR9>;9xW2A9Mg2q<&XoaA7v#4Rz?SxKeo7ueddKTDVxjYl&|p0}Y%L3BhZv{?a2o+d zP{RT3)}|QU?yG{n)>f4Q_CRoRcW;lO1qb|aOu@l|%gm6y!}WIdDJ;psZ+_vaBY*(g z;8B9sVctF@w{9jcHjZnt#63Nm7dHwTw&k#>9+@SxaqSxZCwC1a6&d#0=+&v6<60zQL2AXOQPxh}5sLP8dLJx9) z(id^lXK|Ymp7rv3Gsfqsw^}ADQ?fcZ^B^?f__1Y+MfOzx((&l}%Bz;=5k;~YX zaF7}WQZ#{4BSW0nM2E9LXL643&wNWZ(21O*kD43-Z)*v>oHq^9WjPwqLAn%o2Y`LNw-4g#-9-CVRME$lBc_A=AY8rC?RxW*I-;5-A6M`2>+O!09A^~8o2P*`1+N6y zpFtBIBptO7(D^45FMgAB5bl3)iYOb9<&(33ueU!~6#|MIK5|>?J?U?a@X?PP9p^6t z%B5q(lBp}afuC?91(sAG^Wtr8@)|UBS5ZJZEaC_Jk2TjP9TvmqNq)CKSn@FVdgE9M z0!jrg?z2OWa!P*qsFF$rgaRu*JXqNy&EDdy#5|P z)5hmrZ|?37HFz{Pvo}Ll-*x12A$(sKkY8`maR%tOq{pJTJfF^^1m>yP-_abK`K1$7 zFgp@MTf|cd9)61(jv&pjE~kPnuV*|@fZF$`@~Ox{>8DrmEo~)(Thf(v$TRxsddp~@{y2R#3t=!79t;~rc2g|o*EuqH?v30cdHp<5{4%ZXXb zjg$-ZW6C+yEnI%N87emoL30f&I2;t=X-}Q^zH7oB_t3e*8wG02jWZX4H5TbjCmxaZ zi`4cbxc}&kh_a+#$Im2$1zlm)y74hJO@_+&_Og+zvc-@p0u`3= z%fC7Unwk!e4Z&%a)W_6;4Ok$jki5Pty{5bA|Hk>kHNBv>KooIVW@zYP*@h;}#q)_g z?{v>fzXE_Nf92*A;{|)|+ik}fAhqxuZDNUca}LX}MQtAJm+r;4=UPjkW)6^^^oqIRoG41dD6@(mpvc!}?6?xgb#rHYnxkRF-0EgGcYhCBanh2;?N zvhmb6>}3Ckoo>EUpc6gA{~ulN8J6T5KW;N_hKdSKoB=Le1#V3X_e{}DO|5X{$PCR& zZLt&_8III!p_!Sb;VLyN+#@S2>#JpjW~EIm+k=PS@Be>}<9YMEA+v^AH`2NXT|mr1B?0)HGVI%P{}g*}J0BnCJ<`Sgc-%>)@%Fp`$dc115L*D5&B z*`jEY?@3Fd9NwbCTtQ)te3<9V!b6>7k!Q=JRFcfSAsT22qmtS1*EI5)z=Y5CV!Tv# zfzEqBq*^ovTq?}S%pbh8<>n=seHP(Y=1=9#YeLMjLmT0@*GznK-ymnrm#xUC*U zBoxo%)yFj&E$t{2ym9`ST$HYKnsLeD+G!iX&b{9nN|zUHiIA-fizFf&cj9C!k+Y?- zA}gcfKL6Bz;WsS(9P9Nfb9}%%i?++HUxk;pzes$=dgZEJk<<(FiD^ai#Yvu$ms)yS z?^Dr^^fXutCgJRH6C@;|;KaSduUHhQx4@@}Rr#S%;|8gX0Ak^E*m|NT!6S9mH@w$u z*t+?a+$uQ`RXpO#qqOycXE2zceQIHc%oN5|YV8wQ$mN6nQ-Vu3CVY6hGk_aOQ+56o zr%Pq=?Y)VQPAik@>*q0=XE7&S7LGDzT~ng(sgNU`{v%iTZlVszLM|5{i0{`r5s6^W zn;&jG(RCN_dp~!mf6WusbzL7Ui9o9pQIp2j6~ou=JsF&F{71~@4+dMTgel?gceto) zB&&hIXSe2_sz|CQQ44Mw{yJ>2N+ugM#)a)y$-6G7v(g+1n>(dfP_10=DM%-|Jw z=8gd0xc!vExF6szHGTRVe?JzUGsO3fDo9>3vEi|5bNIVjrp{xbPE8S3VwUQ6fBE^| zdj!dI2h+yi-_0Sh{f(SC>;Uw(pZ^dyK8iyXSU5V1Ac)!QIt+%9woO$GWO(Vk$*gu_ zJANFxM_5w5kRW<}8Cy4G73G!m@w1L?7Bj_D5^A+xF8_0dtuSWqM^FhA? ze8OOth6rq>SPNrkSV`I3%1`%JAFl0SS~1wkNbW{^2zg_nZWHS1`eXA3bcaDmyv63U z?GFpkkbb{U?)Z&glv17XdSh`LzeCfMt=LzDb_`uY@KR^h@~0o>7wtFkf4408+&}3i zWRI*U?DK$bfldG-IpBKt6NMkO{&B7may^f}{zvS+Z_2GT@Ej|)k&`HW3HG5uq4h># zCs|qhz5U)(B9rs6LsvC9%+}p0`Nz9i8;_Ptw zf!*Lbw?b#)hOazWQIrYdRF;^yYq9yKK$JJYtYL{A^nJExrXz7038m^7r&+s7)^<=et%{s$#ZlPYL9 zFu%Rm`2r{l+*mUd%y{SJ|4I)ULw?PCQNcM<69*I$ljZx&LFZO~zDbnZ8h7lea^JjD z5@?6s*8BBfxTMM^2ENn%^zivfvVGFG&e^Yi`tsnJk8_rB!1fb~O+3>t$Ad6ao78M8 zbsm^jJvNmw<%=Pcx2-z*8L4wCyWf?|j@afy#x;z~L#2m)CI0?0YMD^f*|v)CJ8A0m ze0mlNTpc(|pVOBOFZifTT1D=ZPjhxE)!>c&=skB=taY6;(n~X;7g0$Kp{LygtveOe^3}r8pT~@LQ|GsN>}k>DMNqpje&NS5!Tk`-B4|WY z&q^q_UN|*jbPk;6!8NG7l+mN>-SGlzSa~JQn(q|%l8xPs#}kg@7KXLMquS%RYX}+( zg~lHF3mappq6Kttlsl`$E_y1al=(htp)hN;GaTO{$;`)&ABHGk<4Gs^dT7m+QN5!Y zp#^H&r>Ee0!HK!lkc{s6$3Y8m% z4Qeg}1O7*;dZZq!Zmi1_@;GnoyddYu`o*8i`r-ss~0=#CB zCrquf!`e#JkG`*he~tR^=*@$Wi&dQwrvtq+jg2GqR|*F@>0fnps3myK5&TKwmQ5>! zX-lKf4IaLjO=w7x!4{_{)9PLyFmE=8esC|)jP(){j?sqnWCR*{r?D6s+9Y@u<#fKaeCM|DF z_TYPBX_M&w67W0y+>wNt(8?G(e&4X>IgQWW3FGc+1<57%hdysKKc{HykzhCPt(S)- zk7y>7Jh;m78;f9iZnwSRn=V#Q4WREb%RH56yeBcAo676nhJ_8`hes&DN=s0nzMguz za_FaBIw810OgJT<*HUnF&sLAlPs%cWfN@H$lR62yQf%}2Mwl_&J#Hi^F+*Z(21{fHSr$$F*hM-Q#D zF>#Jlyq#Z}_sVbg9x`U+L0Ffs+cG9iVIQd_ohc|0}i&FO&G`K~+VTQ?ttTm$<>h?CN~Oo+_TK+;SN&2M6I_D*31%WkH@J zB!hL>iQK9b=#`=^hM9HYxiUUP!9fJG>`q3mp}g?_2IY=5OscruxQh%D39Wc|xGB#a zu{TV3t}-jITrbrpD5w5XXUXyJc79j?3Gp7;aR&fRpmFL z;?t%8|F4baRgKwH4Yq;`9i+ahfZ(`+RGjiEaI|^U!8y#Vq~TGE$69n`<{j)Lq)Vt} z%s=Kdr192+=i|!4%xqp%Z@6|n&+V@A-V+!^w>Usi)|au*V7|;WzrOt(>BAaR3MFn7 z2Om<4Xm;rHfBB71uAXsM@tYpck~st{tzAKG&Vk|;^WpB8dPK6&!^zPB?lcF^Pp7r| zi%3B#S6ZtzaPDJyFV&o}-jx%RGaKnNh=PQMGvbSojTYNZR1JwNZx*vZ+HC)@4c)KQ zU#wm!d~A)KSK8v#*e5a9sYsbuj1YQYbq6nzQfh8ld=QRcpAIpC-&sQpplBME{c-vM zoWyXa#l}v(G9OX^hKq$wRL-K!qT+pxSGGy#PcdEJd4F8Qxaa&ier$W?@I=eieR>BF zr+u)<$`s%As5rLm3{K~33S8y&?=yM%8nT-Q#CtdiP1{_k@}tKM=?#DkxZU%8<>qYt zqBM0iklYpa2NZIw@6pBV+|yaYj1vhsCRU$#@$Ya#aOtqAlNUbeFuU+U4Fa0>V{pwh zf5lYVuX;Egg7k^vDNY=$zy1+b5d${X6h20J4Areq-FDd{yLk3-{Ja^~^Cc=u1B|b! zfu=y%T6yPfD4+$RmjXv$K%E;}V05$H7=Z9fdBW_yq|ojwM!tvnCoZbh`sQTcL95WA{3U2bk zB|jQVeERU2>HDLwz$gWDw@I{2OIy$I%mA5Khh9qI;xg!PEa<#pPs+fvCnfp(X4iWg z9FTdvf^F;igbKMw*lO~>(QD76eK{k6N{rllmY{vm^w#6&_c|5$`M$n%;`LpO&6!G- z7d9iI-OMK|Vel?JyrQlnuSgXYmtO)N^Zvm~tEJb9usI(g3M=Gur`3pF%p3^$P%n%% z#p28_PF(mLQ>E{s|3W~vxyDp36-#11=X`eG0irDxT z%pEpggrC|+(Af-6g{q(RM&En@*Q!OSk79}Ywo^fcdJ==Jv=omM8Z<{pUmXl= zx<#<0e&Hn?4`%mOqd)p6{}mn$l_P_6)n5|T2mFMw(X!nh>FH!^CA`&{FUTsH+;b^q zV4?tJAD75DMp)vmIM8k-F(jV0!O8<%*{Pl&V2ygmCiq2tIUh@!HAz)3Zx~^JMFW8X z#7B|pKQT(33Mhp_lR*{hvtVJ<(XYZ_jwdT3X$W*Tz2HIidiBbycyHN$m``D4%OC+Q zNq@P73Gt6Y(hK6y(88~U=5Zc(&CpM-d;L$zlX}Q58EE0FObZb23(!FigYJ48rY{x2 z+~GUKuqv8@zZl5zLGGj0n6&LP3E%#>%fVR${%nGdlYqmo7wKohj+GsOGRyvLp&@tH zUQGcU=+FWTK%qlBXV9Pvd36WS_amVWq|Guh@O(T4S6?}t5VTfk)HS0@#QY@38j$D;(bRZG^ zza>mz6v|y~vf7iVSwEHx-7bK)PXozRScxEc8~yO-^6kHtb{;p?^Av%ra)L7l!FpnW zRbAl;hxlO=u&H#1AgbgcD-qHKb0mRDlA~1zaI^-K1?OXb?BLgsfJ_9eJ^`L|uZMwQ zb4}+E5gs>wB(g`Xg7EOo`Jv~=)u(>M8%Lv4ub+8dRw9oaUT!Kzy+gkXgFP8LAQ&ua z{(jb`O^B#E7u2|6X{uOVb|>^$Tx%&4zR*Sq2{o50pr$DbBoaIXulxW9yFartU0|^` z&SJtJeZLxBlm!n#(=x7XL! zY-o$F+@hBL*)dsgy-kz#CK1NxR7Nzb=jDN**LFN_?7+@PrQncJ?u3%gFcKg2kG6+G zg)W1-gV4Li5KXcI*y#(UbgU;AWKu<;s6$NhZQvwg+Ah4NZ?p?tLchR*@a#PswN- zZ5k16puscTD}2v&`F{$A*Tb_VFtdcU*?eFNT4!D6rnO8D)76;c z12LepL7X6O#s05h4$J4JyauE!DVdpUPLT3YQBdzYZ|lW8U< z4-K@9!s5Mrjn z7b-Xkul|{UH>5ub1d1OGLQloQ4#cw*9M ztljES)_>Hj_qXkC)zKRT{VzVZlk#gU@0 zL{$wbfZEg&=5TmYNmNUqJgNXedhYSH-QYx#uYTvB* z_x^$ZV35DaxT0*$diw|G?=e6(QxnwRn1+oy_(c9Nv}y={}?{>O0wYH_qgTr*!waM^kqkMH=$M)8()b zoT5Cmhd5bZFGAALFrgD{AFXkUjMzs(_)KK4v#P6s@IbLjSS{+tT{H;me1J5apkX!zRveeMH z0dR?e8p6rlDDVUUT(dqRn1s+Jn7l2&UbWu$Lc-k)%Hn5Z?_c)4;6a$U(dD=q0F^Gr zN`dt7R~1J}vKw~)Fk#S2zkhgL`jxt8LpPAlQ2ixR{XhbzS=s*=k-u5ppqGT|7b*Sc zgy@qh4f7QvWpXT+`Vu&1&!tuGz3Cgh0-!#;+H9mA21Xtbe#5#MnVJF_>i)J=P)CSq z%a=t!LIACJ1q<8`%Hy%|7bR!dGW`u4Z0Lelk*4+bA!H`1WaqC{6LuyXX@B@f{Onj0 zpmdUzrQ+efS*%<|_V)Vw%Vc8gBtgLX`ylZ=s>1P@3a0LJLvgJSr~DA!^YuN$YGlGk zW(7=1!@;JF*0a!vJ9UEQ=fxmFCvRKp5vbU9twJ_frJ{Gytp zJ7o97%L^QbyZ6r4F*3T_CnGtx$0^P^uU??>yVksxKuiO*EW--?a&z+U@QD+$zaQUA zY2hQU?w-5ow9|+`dC}2kd`?=w=jV>Hjjjm|3bov%B5dmM66+@V0*X7rAYA(P-qWwI zh3C1{&vmW%w1#wLCVoI^jZ1pV;J@*OqOQ&wbdTf~8||hUIh2Aj$q;)g5cR_rkZu`K z1oHh6TTSYE?XEiT=KQ-YDgX7Ht+%4()G zyLeR7icWfO^gQAM*MPjC0A;>!1@*j*hMC`0Ev`}60*d0nfn&SJXC_{-KqK)u%15e| zQm`m zjQEsx!XR&Jsk7+`)5@Bc)wEK~t0(5@)Wv5xvJ~S~mm;ju4hqN}DpRc4{TwPe0tFkt zy9!qvQi->m5Hlf)Qc#H{&XmE>xi!Wzp?u3?d4XZh!)V;SCU^D8@3gB5K6y+n+uZ#OSyp=3rGxY8s_;=t0l}_LhMJhADc_>PxqXF-0l4{%K}#H1 z+`NKvkywfS(gXS7DpO;YrP=U>um6$6{t-hfGIa9d&Ed4J^GiI_>BTW3Py}`brKjPI zHz$}SC)0)qMZ)~k{rF;gUO*+b46vwVqPElwU@uchHp04qQ*qFKg5!Fp0yvq5^-vjG zRo(hZr1;I#GiOMBOi!(Ck6tQ#yg3tUM=4IcTf>0a)>{uG7UP6QgH{DAN-orSMS2a4 zoHON5&Ss*0auvnM734)qz6rA%s`njz&0=^lrt9>Dz_Tfsw~K<^sZSx;oni;H^qA%5 zz3jp{ao526d;ID3P}GC@vV%as&qtZm&uxZrs~E&X{R(It&e~cLm~Ml;Nc6yHWumq> z>`L{?jnr%s7x?NgV2(0$^^gQ4b$1Ky%t|s2XGUsHombLPfNpzBfGyZFK$znD;ffE= zvOohWltZsq9m15$PeKvN-C+A){iAfb*T}o)IZepr8 z3In{v?i;rY-{AX%BawN^O4n9(gLbAOSaoq32U0?=P^5P(fxXRuRJ6uB$u=xiDWPC| z33^?SAJfND3Z!H78Q>Bd(Ax&PviQ}AFmEn4PNlvZ_{G0~2zA}$7A*D9bLq(^hvS7; z3Pbdce<`;eD)UI8zmz2y+)yjw`$gD_g0-eA*!nbI*L0jx6-6(?vkH%NpwD8jNv*8C zG>cT5j~A*maCB=%@G-&&^(XSTRQouVbTh<@_6|4e)6|Xp8HzWnALPa2H{Ezw#^(4% z-##`Ecj$J7FSTe~QQ4qg0LPP5cxs$3jeWwxTJ@(3pKfuk3|F|N6)=FfvP6)q;!S%P3NM#N-S9EKU8Fgu5Xc1K_BT zHO9r>`^hrMNWDkv_~M^oQ*8`jgz`w~?*>q$lFqXZbqZc|Z9<=9V(Z5`M?bf{CzJfq zb||z_+}ItEp$lhSR2(wP5Ok(P63*&dZc2;59bdMCYk~&Xe3x>^GsKEVaJ{-_gFHni zXz;OTyQ?ys*oxTxdkHgv+XquF62nO$IoFtqU#`4yD;E14W~L={ELLwwp4F-8%sZ}K zwgqfl#dcBMd@rq#B?2sJA`sEyEZsrOd$G!q2DX~Jc%c1nnabVVHw3*-w)ZO{mwoAt zQo+p0wE!3}L3(Hp)eP%bNjMjT<;qQb--E!pE1-jPd}zKSpB}bTC29y(?#Pu z{O*$1{sVb!u?-Nckn3|Ovc2@IxL1NQJQ@%N{%=hfXUO;KG_~Tzr2`1qF&Ovr4`}fS zF6*b@&NeP!RWVp;cDDb%a5eX+3tBNwB|9DRGJpu!i~ALf8l+vNo26e|Do&CavUsgp z=?%3*_mLKfBVkoE09C)hneM7njQOGXWofMMqz3m_*3At(8;?G`od7n||LBt|F2AAL zU4@RD*>msQp6RP8C<=wUvC)8&GV)^0S3iOegHlkFyL;E+*QYlXUvf`@7>POYGYx^= zOahJ5;0_S@7jsi}8+f{{b*DB4nlB13947wQw{>34voE>S7O&)9jD+&aY*m+3*5(j9!BCmCh*ez1eyjs6 zv_a~GV-kDv4|XFe3LB%E5QkFWJ`+gylSTCCLXT;K8xLUHo$_tz7`K}I9VtU(v3a0K z1M1Am@dN^$EE!uhk9QGl|H;b3f_O*z|_&v;>e%!Pf$a*H2 z=7&fVvLz2tTQJ@C`Rt}?-=c1aO%v3f#xWWzu^F3ipqCz{$)U(wOC8X#dByd}D&3gd zf_DaZDFcpW&G$fzd4U^U(2hd(Ko0WeA;;Wlzr;|j!%N(q45r=>@?j|=71v$@@)O4K zPL!W)u0(!k4)~yLf0T)QupLdywTDv;s=7PHtD>vzH9ZPiPdkt#DFcE7-M|^5Ner$B z+I)W!oB2!2lI1DK$WRiZpLx89Lp^-JMTJqE3jqLx!VRgbGOOA1<+5PL@DR9%5cf%Ufn}2{#;6 z16UTcy3=tiVr6To`5*cl$nQ^7kCBF^ zs7-#DRM*Qa%BMOT>60|B?OC$8pmwT(w^1>0LpyqYV(k0d2irPZJyN*YGr%_|hyw|6 zfJnMawFqB9*~yh>=dYB|t~=rYA0g9mCBP#EddnTfU_NRpIeiJhCJ)%7>GJQ)T1J~9 zK+I>1!YH?rt42K*-8FQzO{BRt8-DQl8tC`g z$%|8E4=SPBi@F6A6zKDXYb!=u%WSWgm1eixA`AZ8)ir2Eb2v`q7$G5h`C3PKFf8`J zq9&$Hv9ELN=j4^9kzMCmj)Lk*FZ%}4%X*+Ynp z=O0wl{Qql~KHS9yhc$5z`oVX2O`h9k{HPOYh$#-wK6A9aqQuE)9Tn=;#3td`>%>Ej z{{z3)J?-%B$0}LPnAlXZ;4_-iI}lZY=340q#hYx60ah$<`HWk%o|x^yU|R85)(o&? zH_DV0!H-ceGl81_eQ4ptcBhBe#z5X4@`*5rReL$bQDEEjL3Z6yQvJ&}`%w0Rg6`QD zWW!MXgM;e+J^LqYnv#imYQ(msLi__zHbki7i5u4ZXG1lm%})%hqaM4-+tGG2vTdDU zO>E@5g&T%_xPgvy6EP)k8zAL3S)-@aEykt~X}a;~HNSq9KAv^G`(>_3G`QbS|7$lh zl!8ceg5qG#ueZ9`G0r;PMA~$-);2){rL5${4S_$PA18=!(U4C{kR4Mhl1q0}_vy1T zk;|ShK6bT+f^3eEblS4HN0tz2RPcW-Jd>Q5R>?sTfax%A&lOzi1XS7z^iJR{KS&Obu8)0|;>h!FA@MNLw45r~C4Yp)Dk zWK8nxmS&EhVVfbhT7|oMDngBOh*#1EIeA0`v6P9$YO7uQH9gPsyC!q1Y0ML!{%(sn z+|7;o(R5vHQs0!8Th zm$UKgC?V9~1PjN5dDhHS6xDipL!mw;)+sDw0o07DV#6!n$Y=29bH)7oUt6c!>RtJFf>pqam*f z^)>DU9y#lKBE{z5-{xcG8?yx)vE8uYE8MF2#$8XFPfaPJN-pdyfnsI&h-qat(4y{v7`(4aZ z(ri0!)b`hy@l4Ys+#?jOpML;uFSkme@?=4O!rKnP!)4zT&e?COg4T=9yi@{#P3mqw z|Bp-R?%)TIXCW>)E)nR7+ZIDJW0&H4qzk+vpcSc7%XSv9E z1(kPFuxEt!)B{{{FVNq|iQ`G*=n|on(&&x<%7o>R&XyBN&))UccwdM=5jR{kzu$%2 zoyNu`ut1#tEll@2vyXEjCk#Ab_9n7PFV5PW=Pp!OnKi4|!Po|E3gz1tnGf=EH?acW ztu=Fq`XWs@-+OR9HvQIJ{m2qqzep#F3R6t``Xg&J9D3grz*Ge{tU%TsYy^L{XKd4R z-2=Mieu?>0WvhDAM(s{rPYr{Z!Y#}*@rAeiswTYJD*mV5%qmO>+d}}_fn*t$RXeBc` zg1R8tu@NC%epM&BWv%<2;|}aQ&fD>x^)dR{TBn8N2Q2Fu*0XWQ;Wy8=WgNKe&;Cs6 zQ**v~d{*(*vAV4N(LcAp89NV=C8WQ(ujk2CxWjqzBwzMy*Y9qMU-^S1sOIIix#vF$ zi63WwDm#)gaxV55H?dv#<*L894o%QQHrWaDJJ28|$F;<|2CRyPAQXOzf2BB%Nu8Y` z`Xcb20*G-`-lqo_?`EWl`+i>U)pO`j)0!+|_92faKyzQFp1T&Dr(>ZpazG6*t#&&F z=Cf|sTu}PM)t)v;C}b%J59-fE>kEG?NM9HG#RohHz6eQoiDR|&+9}(;bMZnArd99n z_c4;r^c?w8Qq;lA1nmc)tCO~tNQbptHW7VME+hLQVj0c+R>(o#&}JzhSq3l5YJ^RW zVZlSKzbaTCHcwK9_$4w^Vv$c1`!Ai;fCtPKF6)10TssL?U2EvPi*e)&1-j25vG!oX z?C-}1kor6(z6P|z&F5Zs`O^A4t=ST)maj+qw6R~3Rz1|k38IySS=Zf@cYdw)7#J@t zS2J-z%$HcZS!@G%M^#VXjvi6N(+fAYpTea>w@1ekr#ZJIFl@| zsD^Qh4YgLFZzK(*rQ!!UjsUkHSa0rtH*EV!&C& z@CVt;HN!p;AgYfmDR`i?8pS8}GO{Xz7_1^|Km=D%ZC-Y+;`Rs9Hy#JN-vJp}ESOY+ar9 zOgBuaMjwit{P8)2$CkSpv%Z>}j$Mq7xNp_Jxj4ew)%Wq+XE#WSHCg~NM+kv?F@+vi z5?=+jn_I{78^SIm1(?0ObMSi(V4Emn=+g%1nIsx%XLaP~CwSuP$&JK|UGaE!lH@(v zHTgfSoE!T!EMxf`e44jnxpiCaT09ompLH(ktSd82FL2fD@eYrZ+yCZ$J8Bl1B|~le z)ARF-Qj2Gt5%<_Wt7J*H&X;Ws`|Psj`pk^ZP2PTj%K<&nidd9@k@13y5*E~(3DZ3Y zf*^NOXE1)aj~}$k_a(f?j2WgxAx85ve%O100hDN1Gv>56CBB$UG?F(cf8g`8Vr%C8 z^z*uXbqM84kt#$N+-a?~ikZVDL8b_pZU!gCKqq4+U@ruTXJt#SPBPj?Hr+aP0`m13@7>`S{ds(_Qg}(|h?4dyNggmJB%aZ83|_|TQ4{0x5imQ^ z@J3jkX?O`X3GahK=rcTbhxyS($UX;i13gv_55Dg}&eDihcpu*#ZW11vudSU;2djox zmKo|C{9$Qu4O0=9k3Op@XwYoHNI=*}MaG}{;(26`8;GVY>)5yCZ$*a(k6`09y@-DX zw6_LL4Z;YfUFUDJ?d+p zhr1_qXBO<;wP}2$IZD{JXZQcjolgyEtTzsYH7jh9y}7nm^&{~K%EPHF|GM*{a50#i zXwAnu4e|e*Nc04=m81Ucg`y~l_fF&mCPpu91Z{5nu9-nd; z`pDgVum2USUqbK;^6e^R&_-9wshXU0@M z={%W~|0v203`N<}z&#g9zG?Q=J>)^^9Y`jZoO1`t44oSucmN7GX1pE27h$IN*_3yc zMhbhl8~!j=up$ulpLo&V3ORs5m6aY0hr%fVPp^KX zU5NWIuhRMd#?I?dn{t@Qh6_M}hO)#ao~l@xiAeFy}Yi00u2ac47nJ#S=Y={tLLLB&Gu8<)goAxfe`C0(e^D^Zj09fyb!GJOvg6*W`z_ zbQLq;0Rq4*yAJS3s@Z^OH#jp<=U~u_)-8fSAe?upJKd+yO^pv)q+hiDh`AdS!5m^k zLgNy(UrQ`Haq#e1RF_WuK}H_4E-OuOB06eNtKA?ST+bfUUkI0})u`RG@P>huPxUre z+5mOBANeE76Ch4R!+C=OzR8yn5Z8@z^XJI2hI@Gy zCt+qX;$5(3H^iU3%pA7aZ=MM9KxYUlto7r%9fg|?KkumcnCP25U>BthguzXI74A9A z&S*?b&flrhaPs?~579LAy`!{J>W4!aQ?0`A5{l;rK4ErGBMeKJ2~ekn#bL`Vk35 zkI4{$J@A*%x?+Y6ElE^UW^xU(GCk{Mh5qdkW$NAD#0KYs~d&v(C;!V~U0O^GAe zy{DPvxbLfua)MB&vulUJe3zqp%! zyvi0o59F^tZamv*RPA>1%=V`>xwEJ?@NR;El@Ax|;Efx$t*mpEj4$Zi6kmBag5x5t znhhMvdz^ZSF>lyFi*__{19ZaiWk=tz{dt^`;BU9; z`c)!+sq#i!Io?)-+F?A1G;am9sY!5P)|*&=4*2!Vi3xKP+UeHv0p$a63bAkQsuPq= zt@LXhj15>&3PaEOkjC}c-F{6c#^LL`FMhcVci1~h1N3GDCcfRLWf&eM~4fJZX+-!jd%R1-hJ-c8ly-(d#d7niBe$u|2Q*SB7w!~-SF2b z@AuKaUNhDxh(^4mZ)801HpS;i zfJ<9@QQHc((MUDcTw|gS#P=|IZ$|qHGf9lQA=m1c`y>Gdw0;(#UV=N6aK9Pw7 z!5{mfeN$+>s$yAP(A%zU@nXQ63a!e7*;D27II{$i<1PfTtFd$-(M6>Rm@i2G^C}q9 zMznI*=MALa={ma96!iX8+VAUfSuOx4%IQ78LF{)sLH-b6`kSi3R^Z+@{=F{7^J_=G z!q6p$cCSehnJgZ z=kiP4(fjPa8D`nTEu@N$W-13Fp%bF~J0NHP3DJi}jf#-rRG>r-eMptE(5^*I>ctle z{fr@-NpNsSfjMbgf3iVYYQobnjnJ25%W_zBfff;5KswLc3aVuY*I{9Me9`+DplpNk z!ky>;$9d^Asvy^d-XRr|!~k2WRA8=XL4nm%QO9QYoO3?8S2H}Q5(ro=G)EuWX14QI zm=$(Gv!IMH77AC9p|P=#O+txDE&lMiaqA@>XFtwg(SdD_q*v^N7UNKN7$wPqnqIyl zU1*#@SM0?pI#Tp*FQh2!N1Xp^rt#Wq<|Ry?Sl=kfUY~++zC=^DhsQ`V6Y#LpQy`!E zwB;4!1N@2%s=w*=w8wEpuemU_ZUCDK^_AMod$}5^m=7~$k7`UbwgQ3e^`E~Qo@&5< zzi=c*0QiW3pGjxeHXr`im9f>v{F`0MnUUS|n=1mF46S<)lWNPl$#CsdC@^2TiSMkh z&zIXcXRILf%mY&5Af_P;a?LsQrbJP$1E!@R+tKub zW*}QeS1cxl%4k4|L~*a!`M-sW;cA3QFJPV2ob?}Uy$F&lIZGFVym2ZQbvJUQ6tUKm$8fCpO`ICIC!i?2cTE&z+hE`gl!Kl zcdh{OHN_qN@HGVFtgbDleg7r_D*HMri~>)RqGFen^m~w_QYEgx9JW+c)k94{$%YUF zJUd~pH=s}f*7AX+)qr>UH6t?N?lwGG9O9%?QcDeaJ_-wGU~$@J!7?8^kW%D_+RrZgDy&yF45s1oRGaDrFsz1iHX)aV0}#qP=%dCaTP2wb9!Fy({sONH(D{z9KJ{n44cZj;EIdrBX)nv8BE6*- z9C1iGeLIx~c>8N5Qh_8A!dnW+rmnm926o^zosoiBTUh;A!||PZH@&Jn7+ie}Jb|Bv ziR=08&ii9#_WA&92D~L_E0i}1SkUB$OOr87nYoW=nxi^)aO;XUk9qyMO$#N8qD|T1Yknj}80=mLxYU6%e zWHr6vCI@aZg8#hUL>^mzbe@g)0zF@JhT{Q$_B$4oZeUFY@&|*$NPwR-el+}c--@fr zHBNhHi~Tjj?yY)0I3)>R`2vmcf5n@0=){E5C`qZHxn_`p5>OpGe{Ky;u^J;lv_;X0 zpl}^g!NG@BYb$8Jo@=*saU+D7z=w9NuUw93Ry#u?y^(to=pA{Eb|Wm7+{5`oAmHRVga0|WH>$fUhh?=JzZ~y_r zxdU?Dr3J2Kl&<*Iulk%f{im9rzkno9tk?8FGrvK6|B(3U2$Jo%S7$wr%H3Q6ixJvI zY8_rCCj>2@{0TAM)R*pUyCIzoUtbTTQx&g*fDjzK$WrmNa4)V0Sx-VZFt|QaM6Edb z=Ay$h@`faeK?0q$UU=)@6p+=C%7ol)HN87qS667OQ8WPKZ0=}1fA0}_Lv3yG+xb2j z-eBKBxZEk*WAi^6PxdL3wxJu)wsQ_idaqW4C-eQjK63kisJaigq#OT__iPYRapMg4 zHr%+uohvlUks7WtQ^Qf&uo#M{s5mlb;>avVs9CNG_pGp~O&pc2JKJ_!ak#&~b6w{; z|APo0c)lO6SxF-DlEAZB@a3vn=W#jG1N70+1@)>6nQ|>85q5Ye=s(KyA)?ij3%B9v z#&hpeux0N<2=6 zNvJWLr2mqZ$|1rt745VPAlMyp8Eobs0t;ADP98S9Pqdi4_t24fWt*jz(Nm(IkJ+{9 zW5#*Vg1xyfNl0;)Uc(z%+Gz6xAg6GsK@p|IlY^Whpn3(6a7wL5jz$6{PBOpzj{U33&5wJK=9zThhE(Yk2_IK|`{jy_+7z7rwY$rX^dIsWKjL_UhpHi!9-tsE zQ6vbwlMD{>5*CqA0M$MwED1Sj9sxs7;Pw(0jQ}tIp4_J4X(%xPa~aXRSw*^fLX{wI z8Ar|9mpJWwF{+O_a=2 zO*KbqY+WxoC#zxRU&>yh6&~HyERejB?ZpK-8l!Ewpj%&avH8aRL6C5**XT=v zEc!5&?i@mT=^T0>ao4bmi1_+#+j`9TOIA^^RP+b|EqPna(t;t^IjCg9x=2m0+D-2x z+uw#F(L+W!CP6L;ky#uzxY05ZfE1s5$h=)Iuf6oc4`Rx-`{`q4ii1v8oIxDP-X*7J z@lkH%j^FvyD(7x=x~6Y)={ahPmi)z&S?9xI1zuY`nN=#-p%^{x03&!=+aA?1_eN&^ zM4jM6yytRf0bYpZev9AX^U}KTW}F_OKIIX?nFL!L4+WL#3?bEo=2kCO4C#y0VPq}f zT})#JOD^u2Cg|gBp3D!9OfwgPqe^daWPS+p;0rl1*Uex#o&!db^>tF7$H6x@q*l;U zI;YTdEP7l-F#p-v{eEHca0d`MhSP5Usv?N^5c2iyOugQUTv&SCzMoh&3VORk;ry?7 z?yr!aR!Bux>0m0%mM5wB5=9hzgr|W!ckCb`{yF2J#>Pu6aZyp^=o(V)O+p7es06H4 zHaP`faoLejV!)^XZvB<{ejd0TJACRwAGYaY?6wgp{iWk3+DGpm@A!d@3%0)NP6OE> zgL&%lWN-yRVxkw##G)6!VUxdNKaCtcL6PvMybk5|*NIPv-ucA-N_;NM@B0jW0=~85 zAEUj1M^Rs#S)aBhUXT+u2Dg z*FHd0LN)W{>_tP-3hRE{%)gGbhi)9lg&N6$i!MZi--?6jF0vZmgv+>fbvf zM*$&Qiohp$DupLj&jh!e| z*m*NYrMwYSZId!O4uam+bc{Frr(*T%HZ=Li?1g;G*FKgfU#xjtGPG*0b51raYfSpy zQ0jU2d}$Aj+5Xti^UmV8xBF%4Ocfpuj>z@Q6-t}lWDk_-=dv`gDPA5KZvv|uoU->1 zREta7NmTbUAY?jl()lE4#5s66`eydMcjp6~&t( zenKq_K3#QS>824Q?b>UM<=O47w4NuHs-_{V$aO9au4rt^Jy7)p+Wp{h$EQeZX?RlH zmsc~}@)3?4^;s%pB&z8^<^hbI*T+@$_mc;!*F(Wi#%%B)iM1iCqz%2g!{--PuO7H5 z;jN-5;Jsz9ATq(odTq&^0b`bcz(BFung%7U*Rew%V`mTY2_JZgs5x_nw(-~0@lsDy z0S7ESn!d6i)i4Q&J(t!Jql2_g1+>=f@9(FxYeH1Vr0f^lg0%5# z(?m9uRM)-mt(6sWxjV>PBnxJ#k`3u>lSvW?p~l|)dPUVSVSTsSB?`SDw~Msun@iex%KsPHayjeF>I4ZFc+4`%{ z?6= zA$W#F!p*l{<=QUAMsbc|Y87lpVda2$mAz_I!k`RIWXKKnuSjk)C1Z2Ud(d?oXjp># z+iPVRrxIrlxm`I#s5%L{_NeNI*VR+VAnn4VtzJ_})s>ty8NymycmM1MOf$>#X8von z@Fc8zNoo_&d$cyw@=lS#d9pitZgFvR;J;CJ_`7IA+PMB@3Jo}VrfsEAzT=D#UT-6_ zvCZ%q*$i#j!;4M-9sojdl$8_4vVYv60;{rrSa=s$q$a*TeVBsN@Yi3_UQUy8x3?d& zy!p8(n4K>%*B_uyA<0#vrz}sB10&7X%eU)li5xV1=<+TK8nXUc6xS>O7$?XzJO#`( zhSVjko$K7}giD44#{SJjlr~7sYCCtZlv>b|N2zCw~;b&T45`s`D`I? zc^{nSzTG^n@_z~_Hdpql;BvVs2wtQOR=dN|Gi+JNJNc9-_s_Qy<1DS>)2a+%A}&|I z?yiLEV%)YrdJ23VP{+|DzBxqhY`{|D8L=DSHcerusgG#cQfW$*vap?#ipi z=4$hN^>IGsap|$mJ8e920ylT5RFI%ysV0=Z_-W;v=-iX9bob>$TKz~(a(Se5yQfWS zQkqTvN@iuHqwy?R-(MFORcP2%(U+Es$sSX0`z|A2Dk%A6{(|PQdv`C*>*F56b?q{Z zbUw0YWxceD!h9sHzpdTfcNB8htC7|qB8}?B11s4oG=(04hrFTT+3dkx2BJ)mY_t%n zQ?a~lAIC8N8t%%r4k6r^JiRSc2sZJ#)TnUWaQuP2H8v54KG!_&R}F^T7G6A0SR7CM zvQU78J>LKpj@r-lr9trjqK@N&-oJBO{kTf=-?kK=tu4NK6(V*-YMt zQZPRpj{(OomX}`t4#^%;R3%Ga5*Dh{q`IjLSxZ(WDS4J=KFw7>_Lo<>RXVkL(hMk?vqjEvtIq2-v2h;9si*>n3oX?`uoEX=ieJQ zh%R-qmxLit9mb^2f57cC9|(tDqA9lOF||F?BUgG^#(jMY#_Uq9_(eDQYa3lAAu&a9u#Ur}mO;LZqX)jIR*cnZSdpNc~I2IVfrKc+rcR&yoLZ%&R0b(tvP(?iP}vTEwbwykq;@{?(?WK-!$5 zkkX-bo=aym2cVCh&UZ^c0288>^+DWbq+6tYv-7a#&$IvxRGtCIFXOU8O^ovs|D+ptbCw{QB zh{*Z6{VFtPx5Lv$vr`BM<*H)2EDlXNk_ruJqf763Pv=~DzQ=MqcYc|h`)x$sd!cK7 zd?Q-X5SOC-gEwV9e1s7Oh~5}-*`Y$c4!4_lCC$FVlC}NJPMoG=1FBBhok|1Ogm8RA zV*J=`qnZOPT(Hq}?F;{sf6L02AxeD0?W3pZzd`0^CjtL7Jt*5c@>Eps^tQsMw}-;8 zs?%y9h$Ah6Z^BNwc5VND;<0Sxj5$E-*}P0f>6NDI=8+*`;<5OjS8jbZXN}(v+;qE5 zQTZL{cK@fH??qd+bl8LJj%1ZyB|qkowO$+%ABr#3BRFZu>c`smT5`&d5&4#z<1ADA45Ax`srf$D z4NpU<{?4;)?|#1pHzt51E>{>=Dc1t?jRlDM86}0xe4Qb}B*{j*UCxnLV1czgNPv_3 zY4KZm@r1m1Jm^|!0am3#qajh*yfS`@#ezNsaQ zUy|LQtA?Z3^aCp;&YK3+H}62IQL$q7^h6LS0gwkx1IvjgUj{uI)=jG}>&OBfBi{C- zaE@X{%LuCu!viBMy~K|K^`){P72Xupi&f}RJ58U@mohpI>HzcpU1~oeZgLmf&&vI(`O{ zJLY$4gV*N#Z|CT*zV~N}DNRA2;FNw02xr%8$eGqL%?ddBi*8aC0J(bmPn_P*v3W&D z%eaFqk*|0u@#!`!Ch$XZ1BI^0yOQ4G5^B=|Cy}(arY( zgdj<$5Gk&1Sy&?c;=1D&0iGewH!=KjKK*li^JJQQs!{HNjocVV*8eH04}KRKe^#x; z-0gIdC>{lj(dd@zTr{6*M50GC7>?MUU*oeIA4)Wgw%sVVx9tZRQW>`w;fJX}*tq@g zQu=wPe3KCAg2IN?Wu?GrW-=geE?5kz!qmP)7310>=dE5*FO4tK{~FgBW55OoAZ&WO z84H2cXjmkG)$a)!o7-1oDlL7y?fU7P*oE{ess)v?@N1x6e(>6Wndv3GNM$!LfS^X< zUy3tgt7V#XNv6C;e&Z z=YhHEyRRW6YAJ$C1|OiM#2lVGwe#Ie`+)6Z`U}aS`)<&q53O$~v>AIcB<(j#W8UW`__WdQiH%jLpYM}$4F2Lrm4k=E>H~DoHI;s= z@@g$*ZXJX>_S5}`8%|BzlqSf2$M8~gInIWQs+9W|A|Up;#;{;ohfTf(ckiRHN)g_{ z6}tDxJ?tEZap3syEX5{uu|2Yv_E)9o9;IsPY>`rUh$Xiu8j&}p4aMN-ew)mx0@L<( z?vD9M>_>rBz%!nigA4z19Z7OpZE4hM$N6EPFGfR@(a-3)Dq%sUKRr@Du~*ghLy_1_ zy|KVZV0i~(yI=0u(-IyTlCZG&P>YXI*=-D-cyHyK2vz4Qh;3767SzngAM$)jBPi7R zo+Gm#=q!NjzL2lu0}e*#WV|X~dtcp;wfuOtoo#OkI;v}C=y}&kivL`fd8DNi$4W6` zsD;htJ`XLr!57!X{RNQl|UbU8~Y1S~NM0J9$N|)C; zFymYXOKsA>wJ~QuCKp?UbMj&CWoc*EnB5pc*zw)}Ul)~wOSLz27run;2ipmG*`tqt zX4vZzfGYguGaUN%)JKkc>7i;xqMgtcQ=VOVJVTYMe(rMATel9T1t^q?b}Z5em}XK0 z=6gH1hJB6Ko75hDcQzscfCvEYs684D01|*E8$!vez*|pDk^$DYt5h?nKwF-KI)X7a z%jsto%^<1{wsj;g?!Dj`ML|R7|FwI0ncZA?@0HJaNd>SLn(9#;Z-xg!5mW#PfU8>j zc@ktjS@QW0+>8LflgJFbmM<`p1`uPvi_bd6UTPRN0e`vbTanmHMM|$x)o?-}x-xv! zgh2OD0(kv}do$yAba{Q%fNpcqq26QcU(7vO{HmXN@hoX2E}UqPimqv+8C3>yf~4%; z8feA5bd&^dhsB9}Bj{{U8%W96O|d`b$?|I*j)GF$iYVzQa~;@$HWz7B}1{ zIk4D&uTQAGib|2BrswWCd)elJ*kotU`Lg3Pb|mUBB9F+c#9zm8fMhQqZao%_phEaO zpHm=b?5_IeZOMxsz8i@F-C#iDtEcor_4>gVK{UHZ%nP$pn4<^)gFRctinxgnyGbBR z?-%t+gB3_?N4pNb+*PzNUo$9f9BJ`bX7Z~ljIF|`6kQc)GZ>(Ubf~w@;NAmJ%3(7C4L|?}1;0D%z|t4P!J8}# zR)rxCh|#nf5B!xSfTG3Iw1!8f?6iO+29Ix&hV}>FN(`JBfWFo~QqX zovQy)bs%JF#0Gu%rW9`)gwJA9c&RzOd{r!JAh%)gyTthS8#pu_kQIMy{{b|*IX-3p z6@##2<@g{9YVoV-(|L0?MFNbJ|M}Zhh8^)yGW(CyBU7ZF0BR5N>QfsRF4ZzW{gr&& zol>~2+I2r=Cr=w>J8Hf=cUG<)?xsb#8my5Tb7+4RCjk8|DwLlCo}K>Lk6IQ0H2f0Qs}2Q zyHu1+$uS8GkG32^ua|C9P85gX-OLL!gq$DOx6XRGZI;{E0Thd{Zee6B0UX?)Yi6K?GaIvkZI~9@F$ot?J0i7Q=qpj=QF}om#5J zIxJqFfqpE5+REbrvy)xa-uP-}N0 z+p#CUdFFrA>P)(@N^Rytbw2#M zRIsx8{rN}}^;oJx@r4|=aEde0L@P~xdGlx%`Kocv&bxP}x$avE;JC-Z83}ZfcELdR z`eUBR+1_e%TTOmE{X>#|n?#LTXG@Uf3jSJ}Ai+!833PO&%FsCE83h#uWv@*2!kJ&* z?i$nKxa5jHZwYj2llXKtZL~Gq%5LY?xhp5vR|-)7=-XkH?C7t0 zm`cp|rPxBFKnQS$*;PThhlhU!?M^U!RPfN{9$&zr>w4+IFjqT3UXeRb#UeG+h~MP& zK4z6Om3$TG#r6&{p(`aWMQI-Dk$4LTx5N(rdl$@Zt70s-q!ngTDo-JSV8pDPn0SvkLz=gV4}QT^wX;7BQaid|GDy9_ z6F4Ee+c(o4Z5+8Jqd?>fO0RuzP=IQ-Rt3Mpe0G^NMK^PI1*($%iskWreI^tlY25y; z{1MwEUvwC!K!Cwj#f6`+%{;r)(JS6!V=}aA1$$wqf0n_Re<%-%&fOe1tVGyIlF>_lQ;$A*^1}$sC;o#hLOszH0$r8>P^g%A4;la< z0ihi`ivBdZWQgM}+zD>F(>0L%pSO!mCw$J?XeyW8bPr-#fB?LGvR)`27)QtCO)@DNuEUKxcTU)B(vxdRIQ>ti`-Mv zG!b8x$FK@ z_O?8t`|CXn1IU7bNr>D7_G7o*lLlV2Ub>MWJBNe;L(1cYgwVM4!J`DLRkZ*c8KN7L;j#x~*wKGDv>?oC2?a(L=m&l-o3J z@R3-N&L^Zut1yt)fF;K`aT2ydi1UNb#R2|Oh9pEZ_6G%SN&rfoRD`JAu|H>+Lp<}% z3bcIrjhE##F>}NIMKm}_y(16+|2&X{(kHo>YK};sc7tm+aUsbHdP-BKB~m9o7iWDN zMc^H$oUSeNsG_El%dQ#>^&buo1~G~!6aJz!rdo27@(IJnkiW=&dgV`UW+NHp zk6o}3@*ylEX|+wITenK{B=C58*?DZPQI54?=%&zOUu^vvq^nLcd~~PC;`(|;&e%ff zm5`<#0{%hFtzSjUS$}DGr)P(Ub8IYvCUDx%GK$v4a~E zWm>{=BK`s)ft(eTU)FxVJ9$it#p`UEEJMKy?O9}@1+&PCD3!1z({bLp@xoEr{$KL` ziix6aV29Bp^9+~)S*wlO_9>bERgQb#W{xT2u(mTUXad84Q;Hy{cW zi*}a>91CoG+J3ehJM1L-hN#q-&Uh%VXsWJ7*y6*KXd^1VnJpR3bBC~w-b|eau;#Zc zPs@5)nXJ0iF5t&+n!kOS7RX9oM!0Ek+`7-h7@6!Dc|=E{_l`MDEsA`bx%B?(vL}7b z8l4CQ_4yc?gNbFsr_7q;er~wye8w=hPHgaF6!dmO^`q7nj`o(EwO)y&_sE- z6f;6Mlbm(>+I_Dx66%4Q2K_r3Hu*gG2+9TvbrLofUw^>A+ohOB5Pu36Z#{8no9Zny zv5WitghqHD4FEbLms>3D+y2sBCF^gbIuH6FEGmPv-{ap??AS;H$psNcEJYJ4K1)+E z^%47sCC7MivH`pi+Z9=v(Gol-Ztc=Kto`VK^_3-r@Q63mne|zw%K%P>gf)%n#gW71 zv1sm|s5N;-KLP3o0OhrzRza1v@7DjjXWx}fcmbR^Nj~hw*KHw4KjOk)%aI7L>|H0s zEpEaQ8s3Kr5I?yj$-?wWuA_>2>16ogGVH?-jj-?5cq}9mmq{vx+L0l&(U^Dv#8;>a zd6=mOJL1L51;;=Lq%1Ro44IHvx`igjL*t%2EDvTgFQ-J{_(uiH2Y*$dea%EIht4rF zZ8+kaA~COdiWrk8^DVQ4hTmt0ez}%;qAc{#E_AjCux+2s&evq=h-KLsfi$0={$2;J zGj0D7201~NdMak*#4*?ga*c}0yDkTL1(Q`~BvRlljM#J{(Rq3wOCEy9c#_6o#{^l$ zM~;JJA?GgW)}7nE4+?JEBaO$MX!)5Pk9BG;hrYkR>t3GGBwFShSxVd$74oI~y^z^K zNyCpr(K)9_rdVf6DYK!}E4{9EKSLy|Lhn2d)rkp5t?sLwNYMvc7>r2~h3pr{z~R`U zUW`Lr2yD?u<}+Ce$A#2#rE?}FYBluOj&2!!u4=x)mhpR~-0S281sXNDtvOY8Ug9h4$zcNHVsdC9$B5g#z^L>I(BX z9S8s9UKmd#>fnxta-d^W@hjpvedXb?Ak4l#y^-%#;~K?q!n@T@!? zWvIAF-PBLC-H3@rWawDJPVLal4wntbGf6v?WkcNA;|{oEM`cRmMC3}>5s00j$h*vc zHys)(ILu&Gi#YzKQ!&0A|LR?Nk#9n)>|p`_+Yg_h)p%}@<1(rvyv4Ve%K4izd2b!x z;n4%X2+&f5(tsQZEA^3sO4rE;jFsQqtf!`(!?QF(g2G-`TXBL#kh%IMDGqRIXE^NStHd}G0Q3w%>x3|#ZkQN@o zD=;4ngI;;qX&=-am~bqdy!zaTnTXiyT?wp z?r6iG*I~17v+x+bdsb(E?@psojw5NXz$G*S76q1txCx-%xHdB&B)HiEQ(<{_2a|pY z9ZrGJZPEUKnoPq^nvpmphI*nCL}EIVT0`BzJZz6noQU1agC@fi!l@K?huM-VhAH0A?dny6mV2*_1hLVk|6V>#X0cj>gWBPH7a=M`|7r(U=gJzfYMcERFm|r zb05`4Od{{zfWA-C{*hGs!LCvW^b8HVm z8H5pnf8OtLB2p^y@OUbt(4)xPF*@`qnjBt@M}vvn4&yY)9&2eF8sa^u&?!{7hfjWp z2vrERJ#waK*0qRAO7!eoJID{v+b@MvBw)H}| zShn5(pf&)m8=dBS0E!As*noU`BFFS}E>LjSnh7eMJ2UO>1zM)Yl2XDvlfq&>p8>#| zZYQ?T{iTD==8t!cz)xPmo%}$(;4SFK?*<=04@8RS7h6w4BXN=w+<`hj_$?gj7Iv`3 z#H&>e-}WBTz6FpGf@4U~ZpWdiBSWU8LxNsP41gLzCY&@rq!AGwskm)CENWV<+?OEn znj}r*LK4Z~Aza-b#`&K+NC_K-+pkBg0j?VEMl`YP<9X+2Roa6l>U%lJ5^b0#?mU|W zy)}ULvu|(kE!w*QwWb2CH=qeZNF)V>!9fFXJ;Viu4jGEcWY}Y1>Sycl>S=Rn;r_Tx zA`TKvy>2WE6(9ruKH2^(sXFQEP6|eEEh#e&UlS|VRw*?KwKd9qvb5^1a4sYO+hckZ z`tlvb?wMSl3JiBOK5m+DsQKs~5g#5T%kwlrbL{iz18AsY@Zqd;r(@2Y26iWncY=bZ z8h*=oQMxRT<*IE#HB8W_e?#Zo6!UhVulUat{6c3_sVV!x_5+g4W8z>^>NR!LI5PI_ zOosgm>M039pwchlZA^!=3J%mUF+~gGd%)5GO60%Xz!$yRjGc_XA34P%24$7_1^Q%>^CcQeVFb?K%eE zYVk#X43!I5_&x`)7JtdjUHIV$4HVuIsll{ne2zTvGOXv{t2}KQz@BPHhuT17Hs$@W zbu)nJNtOP{l|rY&^LuA9+=ebu4}b?Y>L?t8B?)@*!;yAFS;&#T-XwUzIcRth&;Sd4 z^AH+)^5Ju~+^77r%N`AWUNCmHOL37#XhL?;48#Wqss1Xz&ybf1nk1rg(Q`*g^4)I1 zM?wyri~n7@->Ft**|qyPPl~3~W{Qs3=+=7w(Aff(NXf`+j$KUS8P%eppCPYRxZY?U zWTd10_KdN}gL&KX+-cfm8 z_IzSv=Z&1?OOU&LQ?cm_Vf#7|eo*t}IdG;47wp(A z{wD-B5rSh&DRP2qnX#bZ2YAI7dZ!t_k}<^Po`wPXkt3N{5((k4oK5*0LZiUl6FA2^ z;MZX?gZm*Zf`~Ull{#A|?zG zkApdF`b;dh&h>@f&x79m{zyd1#vPY)i-r4^CS^M!pI?`J*C;sn4YJF|tExw0gD?G6 zM0sFCMSbQ;Z%`YvUZ2d#dE{Fsi+E;#>MMlkc}OIH{+I(85TN1D2T?-sC3VG^4JV#F zI8@*RG<6i=QmDF!lUPLLy^CSFHuA!yN;kKfcnsB!gG!KQkq=uy$Kl5p`5p zjLy$v)6c9IKkDpAe{U79a0BYXfjANuqBg+02;I9%p=4Xf2&J~(RlD6@Xq|BMeD_QO z8vbcs?yHBwYk?+dqOLq_@fkjt6BZ~!>m`QJx_;R zKnL0=bKx&9Pwt%g0D$&NqKm8CK`GIxi-Zx&$v~oI96LGK?yy>|g-!ZG^MUyp zSJPBbch^*r8T(4Zp5`~xAU97nApqp}v9-r=z{2BHD#|t)*J+CXYvJZ;`1_rC zJEm7X$X<3xzLc#s*Z--(^z!;j!S-un?BB_v1p#iZZ(20EdmmSmq4UT(eYL>D>O`t? z=6oZB^}6gJyw)0*zFIs|QNCK-KD-iNn}QEoVXH=KO{w~(l1&~yEX#;18JWg`c8*T^ z9NGP8jpu&D3_FU=*~a|smX~-j5p*jczrc+S@n>mET2Kf8p#0HMkko!z%YUTttw~aC zNazu%JTJQmx&;2o@mV$X3a)O$sUJIFFdIowj{o($E&|Ju1$l{@81xSFY8! zC+@teh<6w%#Uf8|%o@yioom9QuxaSa*k+WZW@2J@N?w6BO5PF-fLn~?vAvLrO~2v? z|4h$eNA^2u8=UM$XkWy7-MJ@fvJxEkt-(?aJ%rg*8WF{j`S;NBUZe zw7m1t)|zoL1W=GnL7CJ$~hE$R3igJFT{U1+cs0L@uJ z8nUH5qzk_dK9y>{u-_y}OCL{vXL=*)LS51`QY>31*1|vqQB>}JBknl|+-gx_IIeOC zDgMl`e$B$GWbt}=9PZ=ddOb1jX_8WVN0!X*hV89*tsJ8Yz_&c~p6TEBCUY%;G}-ZW zU!(+@Mf;fL~u$Vmbd1LNrczZFVu z2j##LazgJFN)-K-Yql^YLKUAiBB>Nuz;jmc&cSN=gmJ882+-x+W$ja$J{4u;9GfWh z1=mgGNekb1+VOljHS1SyjtYl#-o!A(ZuCS5v`1T)~!T&=l8g=>ZthE>8ydPD^zmN&WC--tq;(q+)8jN^Y+ zk&)zAN_V*q1B4MXO&#_^2OX-nPE-G!1vg+*Aiixnn(r3Jr6#G&;^#z8a)0fcYq`0W zne1e$=xx=TYb2;L_BG_e?@5$2)i=0Yyg}Sws^1La`U7F;$AziED^! zzXVFZse2#1o;h(d;ErN!1VbT8w^h?p3Zmjs<(Psb%sJ|8&)6(6t3!7_NEzjvsFgMS zJ%1`Rtjuc#s>8aclyqCy<5S&~2}!_^Vyj);Ji!Un{y<(G^Tj*t!viiP@9f24$qK7br)p})AL?* zGlC>`F&&=)rA7lxBmqth=rF2wMI8u+Bb1tPEJxh57*S?w4GNDxZwsmg#FU8G@_HBh zdd!#F0`5MNJi&|8s0Fx5-D?ebACxJR`R{=@ql|mfyxiK78zi>?kV1tZ5){dw&{rYq3=@1*Tf%G7z8iwaOx9f) zvA}Zo@RG>Dj_V*~RsOzv157$Q=xrFWx6stZ+-_th33|3%hp?D?`cg(fPb|k7FONJx zhC4oLrJD>FY3wYLSJ_{nSbRjfUCn588=A)Q8m1vb6329;KeJpFM8J`iaN45y;#6BDr7kq6Kswl477y*En@s11wxO43 z445_OeNcH;uyn^3w}^FXQ|!_uGKg8G#v62*4`rNYyYKQhi^8PEjNm_fmSI~F8!wLj zKn*p6^XYafJwP=w*J^1*d8EH!j$hP9)AuRc-bM$P6>jI!KlqFUs1C9T{Sxo56r#&> z=1gVoUDNQ;zCvm{8+XNYSWNQJ^~r-)mhL*IM$P2hMHU|r61%o1HR-6wv^boQ4xVoQ zkR=^BJyz4)e6)Q`i+xR>%dq2ub#&bw+Q1HpWj0RRyc{~tw2duAT+pdfZi~^IJ5;9z zKp*PqSO7pu!wnZC_4WFJfmwOiS94U?$LVd&$K!q}Xl4u6+F$+Lc z4H{LThJ3a<jbm#?dX-!*X-4G!@Z?{1^*$U1Zi605K&SyR7aHQP0tF_~9 zH|up_QLBnr{UR#+N|#}^+@rA$h=2c8=TcT^XUA;J5 zjdd!LDboyycc)d!svoDTSeWaPXgZeWhU|+?z$siM1T0Gj_?VJq9{$~Yy2|cyjK*pO4G3w`q1!)ZgNFJ1ag)(gNExN~2uIsO;^KBorKpc=m zG+)Z^Az!^e6eylC7VOQ@o}Ratud{z2Si+?{2q(P$PXiWCc(Yt>l6QViEbeT}-&NaN zC~oyeLFavY(rb|WpMY)q{S>nm)r2`2q`c@b?RBhp;{x{UOYxa>@Ov$=<^+9mm=#_l z<44G`qxPv-2m6WF5voR|CL}A-m%(X4>_wBsewGf4W+adRca(!;cz55**;Wzcd}Xkh zE9lvBQRBFz#5<5hK?&*|NUWzD?$#aP%YNi3{Nq+Z>hFsf}Fa zffIo2gSWMGu(>G|7z;uVOJl~*O43szUIm%KKeX7;!Z-gHp z4}Ed0SrgW6w+hwIB7OVdsqb|6+c)}lfgnq-z$DRmAx3g2NUDSCROe&v+}rrZhnbFn zALcX8P=So^%ydJD0eep((wm(gmShd`H56P$v{>Ntjyot_iEQd@eScX1}8PojUe5Dhkm(HLWYG{xaskJyv+lg-`ex2f|5bGNcemKa8USS&bctCeP*mi*Bcn=Ke z!~?23?GF~ul4dP^=qGEnbjbfHzIy6W*fExy1E(v@JR!5pk_FB#duU>4z8V3N8Z1&z z!o#e(rn2d!$DiqiJuuY`88&1Xw9zg3GKFjXzRzEL-rOxo17TTo9i9VZkMOBbOYz+Xjb_xvc6p+)|zte5?aXKxbh$63$Q+Z87!uJ-|ECP@^HoDEUsMa zsk6#v#TTgerOun>1pzwT2w@rg+{I@VqD;ra5ZzpjQ@Pg}d7@B0KCh%MufQ zvld+HyyUgWH+odYc3|DFnsi8VG3{LXV}yT>gCEA_1tH4a0IN|vTCXnhoyXOzO`a;( za$)aKLXFWY?9{{lQSS?MJK;px#El*^ccSJa6P^(PTV_C=Z1jx>viE*XL5thfG#{9g zz@5Co+)vGsTB@+b(cKndM<~p$&0*qopI$ALt$GdzMtHE%0E|g=asqpShkbEZtMOT~W*b zn$O1D7wAKR{A;Dqp~79)g4OzgUu9pY5r|I9%}N$e^xA;8hWm$3X^-g^lsxVKL-4QC zM9!RQg4K4le+5Us*75aWMkSgpjeyAjm=lH0(RA;6Yr~2J+4B25DZa0}J3MFW?^+C+ ztkWHM;`c@F($ySSp-1a$#EWs+7sp@RtO1->mo>r!Vq?L{hI#4z&|*h=JYaGECjDHO ztQrq?mB+*;-g(2mqqkUm9q%O=sU7Vvv|3zsU#DB(c9vZ@1i1g6P3S9_3p`5f;oBB@ zRNmC1LUPRV_LB!iR(x2_cbEx3zG)hio;8#a2HG2AeT16#{=)}O>12>?M57NQB>I(o z7Jbi)2|{WLTjQf;V@_I@dPwy0y_UfX)lo}_!_hKIJ7Vg zwypkh!`1e<@xsN7TXtyhg>Up5y*Zo@|Hv9$){N4ej#DlgzzJS2q&tk!PEl9J)!99XQU!7dH~mSB%|@^);lX>5GTVAZ4qOk{igM1#zjrphZZ$XA|tg$NF2J= zRH%br&&_cQId7}wmB{!5Lc4WWR{D+!IruaL_V}A@_=P>AAn}>TCD}eh z06hQ?KY`GHNoLF{xn7e;Qu>P`as~e}y@I$Ud8bkNnPU#OKAZ$;U3mKcboCy7Nw$I8 zH{)W+5OCrQH#rKorY7RvxK|mjw6emPWhL%yuFM^d%+gHF(n<^WE;Q@bvO?3+CN{0R z;^qE5&-*@~=lvHrFZggB=W%?$+oVal1Ytd1F?>Ws>yo(#I_+q4c3e)j{6MO!Ny`Z$ zy88RL9vyn`NQTL_3G(^CcKW!4i}cL_=LcwV=u46jJAX|}RBz+yZgGz*TSB4I@nE}a zWPE&BVD?3?vW)gb{4=Q_`-l5>r!PJmwXTGUB#sE2Zq!Ih5*`o~PK;~aXxn}-S5kXN z;y$fz_jp+cKAxsgWNn}2+1Xsv)vV9_x{D(wtmfJl6zq8uFTYgeei?J2ZWx!VQix2D zsZCS-Vtl>0&$*;dmYh~MR;EHuQ_lI4AC*=p{`2^ej{E+L4Sio8^?gyo_?DZM1v-lD ztyYt6RQ*m&?mFS(k}!OiICQo=edyn=ZZ6cR6a0kNl(Lwi!ijmKnPyrE)uayZ>a@I# z7`x91#&vJJC>-gpEGNuCc>Oumt7+{oRbS~EhA$+KM0y{&cGj(51b^sk&`dsb9tC!DY)jS_?^geHL;MeFRX%Cdm2JV|Qh)j#d{|FCR?qlpys`@D2}XF8 zlyFFyHq5?M`%w3q3@PhYT{0|eMpA8TK_*W5v#MKZ#8qu&o1CH&eWyGAdltqfD|MV> z^^U&vW=Ls=zkhG#wY5XaICq(*-vsmU?eERQCx~`=QSM=AN zWj1bljPJ1JU3d{)(zODYJ72PrB^S=G@Uq3(IdIc3*mywLrqIPpI3(qe+>C4*#!bJ@ zgcYEo7kD$~UyI{-(MGigCsoe*$J)qvQ%Y5ogT1$4xgw1O4^lMMqeMOxP)0}@uXsPT zWSShxriPo|rduD|pOKy@5X8sNW!shl!`SA|CQxRawi- z5aDrGGB2BO1+s!4wm&arHZK-k+?_*+TH=W84Br>?HrkPG5BH4c#sHpMC%5dSxo6N- z-cb%@dU%vStdbM#IGPm+fyLNJKy$ln<;6cb7ZWB$Y~Vr?ho=bjkriJ@y?CHe_skRbw%32q@coB!uN>=+reL(# ziQi=tALg8|2NI1dS226)PKS(IG91#~42w7R!*pI(hN18w-e9=VI>UNYI?!Zr?CZB@ zpS+0--*y~aAh(4Z`_;~G*v)qrNhS7!T>>VVUai3~aNKXqg=*Zck_Rx^OpBQH*Kx1!qWTO*6`-38k4xU z%OZp|MQSSd^lzDoS@9b4GR^%{2BG#QsoxhyR@F6Sn_X`lex7$jrRoale&U+bt@fpS z#Rhpvq^-`A8_ZWjmo)9k(|5ww-#&k4FkN<)^}XO^8l29nJ}s{GU`cAWo*LV~_a5}i zht=s*4eXr`uXo7h={{%Ks_fbQ`cbm6nap;$h`qLRMZxI&ue^wbzRA6}n>KPe8qqvb zVqOGB-bf+fj&9xEpT6X13ERM;Of21$y$(P|T8=($JX)78IR19dwRuxQ*T~ zSDsR%au&T})YP->@{YU~@lb3#?5&5~QjW!Oki%OAY{_GG&Fmu_% zt|1GRn<-za>bZI%meIFlefW^H!-@TnSVUaa>)VIa>bnIJIYl0zr>YY4x?d%yibI~h z&GUCbDES=oH&vEj=(1s7zke0TwtDz+p=3t@z6U4+58d*ua*uu%?fYD6P4)&6d;wXh z(})bbGnpWv(f0E5f--9|6S+G-Ts7^5r3vJ7n9Yur#dlsFO2q5^I)8h@&IOmEWtsB| z4*rZ(^TYV8Xyj*cS)Y#$;Yo;38M@`^lDD!+&M&-c<0Jja+4n2Y8o*DZA6~vXsPsma zMEXXEM!4Ln2Z9u1`vVR}-c!$J`z5{ZXT&g03SrF7Ya!ka$F4p55dHk%#@DpN*I@Hc z_B0V3TLn>B(UD7~soE|PcRViqb0Ds@N`B#wewG|_pWrQ%wJX$9*P%r=^JrP(49fnR z`#e(oS;9+ICjIF8;qe7o$zFuICt+{fX|U9b#rC#a#FKueo-fup#ZBSCxk8pRJht-G zx?T6<+aZ3o$0Qc+HrzUE)Nt@dkc0LEGT}+~++mo7#?rFyHYLkHZ2QEq*=G_)H>8g_ z*L*eBQL^7LoOg4V)LE^gTh=4bXvW$@%pIL+as)k^VMu{GD3QBM5aL(<2qWolnG zBuy)F3nx9q$p{+U9rB>8r16#XBnj#AzSSl7-7;Flv;IT8Mu@@cT1(@q@jD4ZNxsse z-!|9+CA+!eO$@rpnl6dDu5CrST->@3#BqfB>@Lsw;tp@rUdO%ig z$fy$SX`|vfSGAbH+SLL`%jbKprdXlh)`{!nu6T8J_o?xYeA{vO`x< zBDze2f*i^5rMqN{>1qr76KrBzBV9f+r*B1ExEkFzeAvBL@>MOu=ZS9ghjJ zzmj)>&&{j{OD~w$z9oeSPC44`Rr33qd0l#`*Wa|~n=Y;7-I)X_@4Y?KmRH{&N!0RE z_-NNdnpD#CQP}eWRyK|cM}Cai@BFOwVB4*mSnpitpk6X@4QbCi$|{(4kc|t!-C_8V zlu&S!kesCU*HKEQ8*RC2;?45zVt&wWdyYD>J#H4VT)ukbst+uW{0;1euE}Zp?({kr zn)TUjZ>XMn;z`DmGU{qQ;Cs3Dq#)$LnIn~>zk8apo|rtHt!VySvGyEX)GCn}bz-x> z{GV8fTMni@d0|IFX&R#{GuYgtS#q0tTPE}iW3)>Oe|q#z_Xe*jG$)+@zDY~4(Qks~ zA3QU2sAm~WW|H(r#pFwxntSt3J>N7kE4@>1+A@3XBPujZ!3ucxBeX;h(;;~x#4Zu& z3jLiRnSM=AJzcH;cYIvZr+tT4{SyO(N~N0#Qa-l3pC;}6o_IUJ;@IMozPY&h_~3a3 zwxe0i=!cewKI}SWvI>X!}jzk0*yp)ky za+mnH{teR76~@sE`8SYe6m|M3Q4l$I^;=}ihWt?bU?A{v#w8p%^Qg!N^{Jeo<&Zd-EVA4a-_*M^W_HwY#O262ChMG z5V;2ZBmKs9<)p%ye^eVOrA`aK^tgj)SDv5vDm7cxTj_f@LV4F5P`ACImv`CsV16|{ z+uk6JU`Vu<(ca3jo&h5_T>c8|`k|M$|0=9E52=d_p3yYo!GxTs3^i{mY)`y^P(ZiZ z9=%AIM5g_me-o>rV#~BwcjLpKWS@!P!Va@hIXsvxCxr%uMUw14iUkgPIeCQH>#PEi z9Hcq^bU6J#(Ko&?MGWb#+XFD0jJs3Qij~QRuXTc`Fz-&7Q0VN;KBZfpM%INJQt{E9 zBbBb$V}~q_(};iFEHrKM)xV5icGPK|Pbfhcoe+UQtqt zTdwcH)El4mKO$1j@!{9)5rtgjIV!>qlpf(9b;Wbf6A2kVp}>@y&Gd)a;8O~zh_(ya zC6dNTE0VGTqcgz_k%Z2SNGdFaA##)pE54Ltxu^#SRnyGlLlN-}2JruE(|lN67tDwb zx8ngx6S-AQ#zL&$2@|{_8{)@M8(9z3Q^WhQPel}`n=NK^Cy7&&{-g9caqxC@R0j*u z>#y+JPLjR`c+n9l_*7vZIgXBq2b~?S6r(bL=HmZA%0k|r5Ow;JkDVgHj-1zi*&~0q z6&|;ZxNd^T;3IKS1+SvSG#+w`tuK)m#Yq}0;hOcU+iH8%#>#) z1>gWNA=OmKRsN5H$Hxil!thNrg#>@RqB}V+RxAy3=few`NE;#d)t$pCq#_;Jc{>h? zQCkrggxo(0+>ZfdaYT&qFbo(LL5HJ4G=`PnzEp&l5UBnQ7D+`oJNTUvFPDpfMS_4O zV|*wRs&iY&Jywgpo%q``U9mEq&MxaW$x|vZioJ09IZ@t-gAZc>gE1A*l@cfzfteGY z3E;(mIZ^$DEJZI+rbLCZdTfGM5?uKw=AjTU&4Snb#9W{Q4P@ap2ym2z4E0xYq9d~T zaCL;Z)(?rCAGiagipqH5gHyaj!7@Q-AF_&s%-c&c1fdoCm_Op`55(VXWC}Cg{j-0P zhGbT5jS#;Fl@Z-+MNs*;hkWb`TPQi;pR~}0ZT&z_1pq0O?1a8k(cgX7{3yc?&?hJB zoHo%@Oc6tNO+F8OuM=rSCA0|FxO7A$*UOd*uk?pYDjWZP%^r<`d4W!u`QarG6G9mk z6gm*znePPp4+ia-gLk3A4p3odN>5SQWza2xnDRaqrLb^gA*ZOq)W4~#HO`O$M0O@p zCz_(Ra8A6E9B}?Ue|7si7cR#^yO?Mzkh&2Q-3x-6m=G?Dz%Eg$%`O9xbW|+}Y8r?a zuRis7Gx}0r9y6g)Am}{5WtIXS-AO?26ul%YkaB=2KK40VBsWLw zfUb=7SE8lYr8vQO%O)H5i;1&h3ZEa*;y_$9w~pXZl+VY`@v+@>XgC}39FOIZ>ZM}J zHUeOK{QSv}bRJEf^d==m2V##O7BykQjj7l_9NYr6Rw4#I%`dvtdC{d4BLvS@v7k&5 zLfhOqNC+@EE_2javdDv?LQV>!!ULJ;+jzk33cv(mICQv6tc`*?TD23&7>IUra6lf6?w_yJ4u5M$vF~1Ag>N2KuB0>O(X`|;+K*|;IKZo(E&yIyLpx3C_E@p?lfO4aY z0o`qecVZXR-;R4tMptuz*}#hu1i-jcL?}o9#YI_xfN~b@xGdV3LNF4JJcQ`mVr;z# zkWUf~N*0+v+#}Uc!QtV4@NgVZ*EJ6AP!QHolR#lWFMvcJ;YB;x5FvGWiG8z!(iVP% zQ2tc(cd=+W9tdP0KJajxtYX`IygM5)1QLBnN4ha!Nv!s_Q3k0;E*TfYdr3&+&NzE6 zte1_@I&#UCg}Baz8Ij;&AYeaRB&qmLZC@OtDm|?Du4Ka*BVIWKe3yc+82A@w$bk8F z-?ilc*qYP0WT*=T|1h}&auv`7L08Gm{{-EX8U!>M`M!c~;N=nE+`IHJCQw|A;jj?e zNkAt1UM4j|%%dWcA-d5i($ofIQn4Ex5j%Pdu1h#fK~GUzb>rc{zIHRMlM*@Db%rR1 z58Jbd!PR1PH-1k}ijxhNkl|b0qYMD4>RqdCo%{bMBt( z10tED=KqeXxDW!F&H;r#9SQ64u>}5Y2#2phSo0uuwKI#T$Ca zgFDPfyOH2Q95A{QB!`E;ahXH&!4K9Aj6j&*EZiSZuMz9vHV?PJfDXz6gH_mvTp+9y zHe8LJ6R;4A?b2>|_&yLA-#OO{gUjQ=Xb$*Gt$qNzbAgT95Y9(VLg(4IO<{??_%g1c z<`M<_h>G&ULYpbrIj)EmXEM+O&Y(brtOZl<17F4y2@2HqgMl;XrYEypfQK1VMZzg} zB(30vBxELgUOVc)9GKmfC+tV+avT1r4VGuMbmxOju|C z($`vjpX5gZ>cGGepnoQmsedHYkS&si5{=g`T>{;jVnT=Hr9(QwXb|}I9~gu8+`VIz&!|R~(Ag~Vm35^4mph80M!%9tnA%Elw8d}b}!=8~GnSs%`b0ht*_xoP{ zgy-=h)!dnIdrp5x`ypUZWlpV0yer7KKIlLk?6$+bzE+4Kn^Cz1vy32wfZ&dQan3K+ zlx_e*wy`z3r@9j}z=>DsQ1WC!L`Xmg!$yw{(gUr}eg@wCDO&18&i%PLay8{zH!Oq& z5$au0ov;8rT#qC?VUPoR z5c+E+@f-R0+Gz^HjZreqo3G{Hxkj7O`md0D1-#lDA<^HEdBAGN2PY*sjqwJ;g7~sw_M}ZP8^qv$@Q`9wDSATu~F0DYECc{N-F zSe}0qzyg#~2%*I=6VBaG7F0`M`FXG5YcLBkzWkPi2Z!B z@xMO4d3biS>g*PR01KsmMKD3SB)IN@ZwLlN=i*l=0sijA8$1r4T(tRO7s2cLH(jom z3HzH0_gnCFm@n^b_+PI;7R30ITvri3fC2HnpBRdV2Dv{CzWC;0{o1_fH^Q8k>x1p! z4{qha)@;#)snJ%9fu`?t(rqnprM_?7sh_SnxrG z0&&;@Rq6a*{b`NH+H^ml^JW)_M7i#(iC1TV>~{309r(6eu%yadxD z0os4@CM;;b8r%~P1rgR?Qqy2qMVm_c3Qb5I-kU-6SRJNFqO-tZ5vx?)P|;J%M9(#c zQZ@0=${$5o259t23svIw@vXo75aUTBzV`{yT|5{Xc21J}3di1C{`!}m{SqOsQz!n$nu28 zYK2Y!{OrPf*Z-uwSGAEX5fj=vgYC7BH(F+e?VvT#jZr629BE`(-l?b6Bi(~DL#8r7 z7qo)pDUz}4t&iLMoz-Ut7r> zOzb90t(eGjx}i~YY(w%mvLsY3oTzjlzf?(|@3_O%*<4&cF5S~2Wu8&nfAp7M%^gkg^wnnV9>xrG|Q<=UlFYh$~}VP|!fr`@8W< zRL&?m4Y&92G6Z@`dS{nC1`}_N3%u0#PQ{d&n+-swBi(YqB{e;{em(#w6A^&?ZYPEhn^w80y_1 zqGId)7%z3G&yX&2tbC3Tv2TWyAs*0r!CEx$MFvbRD(d?~v16(b4OS3`Jw#B_y_|+B zjTIQ!VXx=Kj1mL;f5B{g=nZ5UH~O5-Md{3ic`D^*PqnMNxh|b?24un|PL2*a;(Zjl zCUsb#uJ^XrWEv;s-F`P^5HD~&GOhjgt-uKT_j%Y!df`h(q=U-Kp#cz)5~#F$d4RY~ zbkq+(Hh24iO5Fdr)2wE$;4D8lgaq38lS7cZM>fQ+6E5S$3&@(Mlj)K+;ljHo@86GX zankWTTk*@j&Gm?oSk2Hp?7l>C8Ol@LV!89GdUmr14<)*v+u(qPwO}v2CJ3^bKkO;~ z4?S#U`++zYO>blYT~a%$*h<9Bd&L&6u&)y;`SWl%ELYKg#mmo=f`-YZ^$UoqGE9lt ztk(L}iW!T|_g4V556fP&*a#AqAmvtDg4%sKCk9^LztQc0$NH4mh$z43+Q_)}lV~_E zau>lx--Hu!*TH}SLhgNLlO>;Qk_VG5sl4ME!mMsDmZES{$FN}qF&PrfWvZCHUq%B0 z?<0vCm$5U?I4-H0jvLt)) zy!E}#bj74W)aKc28G`n2ty}dLozmu*uOzrkGH~v<}|{`w2+cXY%o>` zly}>pi8xI{HJiCg6fhY4^p%=YP6RSMFh}H*xXLUD>w0V<0t+SN$o)yjq;hPkgJlTX zi!8Ae?QwDeGyR}Mw~VK^3g*}#?#u?%%)`N6b*>>zhn;HZjUUw|ha*UxsnWwHV>`XM zqv-{oAuX!I(k&!G8fG8+eAf`tB@o|I|EFaqY%w=j0sT3jipA}?s*!5d_AxWds#?XZe?YuN71CO zu+qh8rg*)5VC+t^mDU_fkI+ml3%yY#-o3_B+Lv0;^@T%A$jyAdjzHgiui&rXnPoNs zwm6oPA^-J6shTzz*%&({UCkTHDh4C1`ci{$F*EvKuvPt{XoPC^1#RLWGX9Li)2sM< zDdizuZrmmtT4<(L4xLmn&~D9{T1sIiwo8X-Ic*~{GHF)D?6{l*wPP7WtTC3&wH&cL z7I9oaIhfYp&A9h9AXBrvP4&VbcUc+8lPt03h8gV%f~l8ZfI*a;>zXA8;am(-_peJ4Ja2i8ZMZdsqJu! ztR6nB@B(=9yw318gwQGXz7pAV(?>SbB@4UlKM@OjKEJ0i%kuP^G%P{5aXvaBK*3!`qy5{*?lX8Bkh;40fr}vdqS(QG4x@oYw z)Tw?WKc%&QZdqTp-WXSODKfo!}M%IBp0Jb>yWJ(G~2VL3F=(ZDQ_tP;utt8>)rRHi0IN;&@;?cOaeFeYlOMb8=X6%am> z`8LGeB?AbQ@)v4L9KXz7s6R_bS_4!5dBdZQR z`a`6Hy7^Yb)Z|8z;V>a|L2u#274kbPRG@U|p(_MYsFb9v`c`DNNsntHnV%n;ktxR; zl7B@+C>Akc(Kda$xzR<&KT9w^KG{3Iv8<11E!AB&9TZ91&Me;*A4a@D3XWh^J-bTJ zij&>1?A~|oB@mk3I61L-+E>eey!Z{Ze-nO<+-&Uh7f^*ZA)h+7TI}cnjZBM;^+(T%ZL0Ex$kxGti|*&erwL4nl##( zpFU?21UJ(*@e=fX)cCjtY(UbvbGwi-Ma=y8Vn2*M3o0;tYL!cp7*KMpwAS=&KxjYZ zUA}03U)-My_4#2S^6!TsF^L!drZEPwiFkTgG4gCDfc(DW7(b{U76<_YRGy_D9~O6s zh3SHw%~S!!LtpYcAazrtvK zTxENfA2cRVn5N)`6m14{ah_$hVfoiCD0d5&_Shdb?mv>sEO~syc=3pOc;uTgX+H|J zPAMHd2tT~8yhhJe9QQh`67NOdCD8DN3DglM@S2#7Gy%vyQVoAXRiu9mPiMhX=^|;o z9qvqZ78Bvm1d@2z%pNpY0-e&FVAp5u@dOto4WrVL&QOKU)e}6SMURBp0#M#UIU61` zjK`#d64Br=WiCt@c<*F_rTLIyh{52S9ip}_Ehf3Uk`OF<vuFuI^h{g$LkMY7kClDj?Nl~mK`2-sgB}5s?{u>m5fLqTq(V=Vw zk|7E_E<`@S7X-Z6(u07WEjE$j9c&<{e*qPw0e5Of3&;Pc?8D!03bzOG`>Dhm2TyC| z9w~Rg-@Oqd@;dTs3%)MouqSyRl@D9g$BS;H$Atq%d_MsrH4Uhcvx2*m{2fjFUAEI? z;?o8sGcT%Ho;i6Qrke?E0Omg9n@bVei^?u6KXiGz75BV`#yK-$M(IJZf)am-AMp8c z2EsU6#6D98;+rN?i7G)HW5j+PR?h`hK#WY*#^4;LC&|y#W=XOUH>0 z<+slP7pRA$sry}v}0Da zy-w0FXgC{JH$P90!k=DimAT|8LbKlI+>2P)gx~eGeEbh)o-dLC2AWvd`O(aaA@zxi zFndPS0v$Kcf@Xo$s4#?&F1$`1b$STTp~1g>GirYVwctZf|JWJ29uOvA#RGQL5O7OB z+&7sSGXwaZ1t~R};u&<9s0rSg4N&<(jl!cW&Qy+piVNd`q~pe&R5>L$^a9b3>7NTB z3}+n@D)Dk`uj=^k(?MR@1HgX&07}KG%O)%hf8s;SlL z6c3IPCvm9Qau77E(|DeQ^(@YAZvf(jnmm@R;D2fIsLkjYm<=Bi%sJu5{U1jjC+E}E z(mG^k@tyQ&9(*GemdElyZS6c`bS07Ma$FFbe|8O9%(1-7bj2A&D&^AdH<#=ga*aYD zWGc=raIf)ba+06XZyRlfnV~_98X#5JXJ`NC#$&nfgkyMqa#QAlTOT|YCwC=HXyo4gNsg7R|fKekYXa> zn!8ev7dqSQznJlFBt`M;!i&%H#WD|nfvUW-JKru-u032FIGLD137}XKb48-I>|XXU z9#}iP;$#JI;7``Di>W24bbIiVsc&)61upIvNLK(te4wh9GY8tO`RlQ4mr}{3jig(VVwaqG*sF_} z1q0OCAkk|a^R!+B@t-?~8fDNlUAH*&A13ZE2m_ynw`ib7xrXt4n0GM>^Ar7Hp_$2u ztas=Oq9iMT?%?Yn(T~9U8FwhLbLsDzqn;%v!I5Kt0egdtnDddnG<{!SpKv`|biEVR zk&c*UCAf|46(S?BNMUDr|( zJ#^&jH`ifb0+I%jJU}(Qcp&yPG_x3!+^F!o*SbUt6~}43`3q6ab}YeYo^_-|a33GO z0nKxfcclX6e1G)D5_%scv99|fq}HE@IKiq0R>&Vx&%xx#!NMQAr8Q(D%>Z1d2D7 zo~a}U3TmDqSAdh9z7I>sAtBMxtctTr+o2~ZalhKvD-wN%gQ{{Fj!zGM$;3Wv=W(p^L z>~ng2|1BV?7?b;2$DZyv%NH5bV)Q-9soBQG1!7~K%5Mn2u`;H2!|K2Xeb-Op^OcY{ zSmi#QrWYvd@%ZG6p$N-eSHe0Eej9}xAcX}sdj}rN{R{Tp`*$rs32s6Hi-Gn82vbQC zSe;$VIPBuPjQEpkP}hfedC2CXUVRi>)6RC`1q3CaPGD)p)&iCz(x@52nZw{6B zPNBFXjDF+xOh6$5@p?=;?ifTEjf(Mcp(NO35l96OPjTxzz7Q#UsC2(tQA1Q@G+r2Y zz}czjZ%Kd~D}0g;vsbx=&ML{6wtn8TNl?N5+z>rWzAt?;In= zFt+v+*&9yGgOS6G{*wZBzH4qfB%nrqliN&tClktmAekU_w)BJg_riGAgU#R5!mT4C z%QzkmDh(x+D;Jd!v4Zl&yQG?wI?PuT5Xv_@I`=Y~^d+?mcDhCs|H?d(a<-PFuz$3a z_~Og4+5G}0{Bkks0tm49W+PMx<`=-CSKuYfxeqj|Bj~o*dSF++LUw|->TT_}^5I9V zR*$Db)tPU?s4}sZkf3j0y8lfn=^RFs9BYyxW_$tMn2pdCKq;f*Ouz_R?W-pU`s<0M zefPG~i!|dtE6k$oW$Tp{rBpkrd5YuDR7sc*UhG#mztZj}QuN31xyGsWltTr%tB;fk zelPztjnvg=6Q)>p+C=y}BAr3)Hy&%K8XdWxKDI+qLXk9eK>hB4k+GD?eeDWgR<%CB zvxe*D4-&*)3r7D;*_!Bm#~osKnD$o>j9nLO?dzqATzn{B-igknUKRX$d9nNB!e`uU zF*=2&bBcroZB02yY5Py~S$TEx2KDGDn$@c;m%$YO#XgViPq}0d&-wz7G`K|5Za*pI z3{S$;UceaLoSD!F~j1p>*K;Zpp<3Xm!%gf~(dZgs)RiwbM?l0Wg{U!l_m)K9PAGj$O zUeWVve78)2e%MFg>7&va#R>5)cEjmNj1)QgLzL0q$;T!+L%{9=$VL< z%Ptcr4R@?w8qO4Rto2?gv9dm==W_3}+O{E`WGs4NZ?<9`S!$=4sC?2d+<1bB=ih|C z=H-Qr4#dLHE)~ZT`Rs`A^syvB>{;yH=*7i|V>->Gsh1k3X}2uK{2@iBzRqbV7*#N! zJI-t$vd`4xvb6C}ceQbaJ~1X#kE)#x?Y5Y}yIu%MTe*Z(16J0hLp{5O*gqht(7Xql z;bCaaBrd~Pv6Zcysi?m(l)Grt^WK8`k?FQap29P#`A`gEZ)DTq2 zAxmFbOv^ueB|5GC4BGSQ`-p>q$Jw8@5-LI(N;%`~+?t{GLU>ub!z8IGSJi2P)t3_c zj+8EKbYtUTS_kvh0J;JA?x@|<*b{jPV1E>%bl5?It$4pyy^7Yxf{UXAL%Fv%6KR(#eq@Pi-p~46(^{VM zt7>BdBY2ag|G*@)Rb>(X3fb7ed3!ir0WdpBFI7{;7&_uY8j@PIs3 zq(^j<{)de!tt;4FUfGC>pJcA)Eziw`{`g`z7Wlrp2{uT9{`G+R=tM6bA$7^p#sw@_HcadKenQ{9dTg~dS z2V(DaBMSH(=-nG2^gT+JRNB0?Y0mOuuet^rqf44zN zER}yCzJpX4yDWk^Br|R@1ul@yN%frRBFKWQs`8geQolL&maG^k(P4OpXroQaB1`oF z(m_q>6t3eVRfgNlCmU3iWE~r^)~2T-r8ijcvo zX;wKZN~@Yt6`PaS&>ak!C1;yfZ)Iw5LUdkt;-oG-s+|U{?y``#4c!J~h#Zpi-;M0O zD31$jA3IMgp+*!?Lk+@JGdZEzL+WEox&9(N8y^!+5(^c_Mv}Vj zi^p=3g2~@u06}GmRQO2s1DTjuB${4tW8t6*B^C>!(ugd+$dT1S2dNUMo#IdyQ%V&b z76spPiU9bOHpp&FWQw`y!Hp+YXbq|9^6*6bnZOTKOqOfBI?XNSV{@%PlO~f`oTe}` ziwb2}p_2G8DEv{Qb%`)i6_#A9Ie${%aAJu?kE?|-w+ zwAoR3OOHRy?zUF+puUE6WkIJz> z@1`b5k8k}M-X9&L=9|7`*BGAKWh>Jr@EO@NAV+PK%py!-$uUdi{?XdgwBg9642gWT z@X%=LaIntM{d)HIlTHChxrxqybSDy(4pa__#*SarR82+P^?7f51E2mLli4@b_Tg52 zah5)I*B*ZmL@m4$qhWJQ;)tVN!5-+2%+3%TE2>EHoO0H{%-CW2Z|zeL(K2(pG7lxl z&(Re1m7fjd8Arv_#BA89V)5XlLD*~EF6i#CU=1_-Q1Rh4R_?Y_q=-ET9yGQhB?pR? zf5Aw1WN$a5^=o+U3z}LeA5oMU(AW*1q#r#fac_fy-YXZHP9m47><*>^(u?5YV2Y}; zK?4dD+$7bl3f6Mn1gS5I$><3dBxk&7c-c}nB8!WXaZ%RTrIbH_->GDnH0_OKzC&4}<)-6NSGi{k-*1xh z*#XfH88^=_8j*iKPjv~tP_xggXC__LS0cx(oPv}?q=Z#QUoJzM7VNoXWkPcnZaPT? zH?LJ#9~P3=-+W;VsxFRcJ+jO8ZAslG@3npUWFGrOb8+^lQ`Cvj)cxkV^2hhs#dOf^ z>OO7IgF=g%zQ^l%E(jV&ByYWh8++u@)0Od=D~6OGo~3roMg#E9Q#HM?ch~ycpZsfj zvhrYjs%{?hlB5`CJL80=Scz|P%{sw7ZxpY0cY0=Dq22*Qo9Ox&hWn*HK@Ql5diM)x z=g?yZ(;)(?t0LyKGSb=qPQ}g;z!uW@IR4{GTr_vr)WYp|5k%{yZQpcV23$`^H~DnR zOk8{7^n`nfQ$;;wddftfaGqEae~gRz^&WyWCT5O#qtpUIv%IV4r350^Bzr#aW^ zN-(pUbQjoZH(j^ZBHLANY58JwC+6YVCqdS6lh&c{3P|co&SzC3+Co8V`zpCri;?FJ z#rl^<6shiPUlz;_+`Z@>kaS=Fp3EUkU$6Cgy^ND@La?wBoSNXm-s|FQi8`w^tNfh8!mI`39M6s~=Lsi`_NS2&l*{b^|R$)KwvHG}wtzH6(RJLFN5T6yM7Xrzjw zE+wZ#nW$!Cb?aYL@?jnFvX$bR+)jS0@I_zick5NQhH2%^=&f}9Dw>9ADHVk6_Ak}elfJ)~k<3W_FlLdojOapj*_>345HPli?LZ0-6bT#hvqssl!F zRH0o=g@3z5x<#iRijc#4b`E&&&Erx?1D66Qu+b15-V)Xl#K2CQqm@>tssZ(}m=>76+s|ZR4TrtHVPZVn%c3radDS zKOsJ{UGY_oYJ-sc{;Rskw0BgNX3Q0Bt8Oy8Ty3!FlD3UkMrkI;BF0mH?}qpZ^SzKE z`2cS|4bP;^4HyRIE(KO; zG0s2n(he^ZzKRTiThsN<`%0z*Cf8~v>V zp0dlo?>Fsvz}ttSbV8a*ZiEHw? za%kl5`hw5XF9v4G^|k%^2G+P{14jnhLA`Mjkau5IN~h$2EzCima_-uoq4Tu_qm8`x zZ5bANvxn{|nX;_LnaviI%gzS5?X}3-65WpX?g9){Teq_vMThPenMmq}Jx_O7RC$^q zmbM}3D05k`@xXZ*qu04(;I#T)k4r(n=@q6L;WFU*J?i50+g9!6cSE331May&x${+Z z-00E^&9vkCISunJTfaSopuZ+1RP{>VNNk!p$n>bq&gb&(2DXm`f0ykdfQprZ2km6V z-RV|?S03Tk3(R~(EIznTLUrWSxhVz$Za+2(yipw)Fz0R+&s9hLvl)zQ4a&3d&X>`wgPBVpA9NSRNq4J@Vu2=I&J=;qYbp6ZCHK&;jXUY z;Qe_@P+!ye(t{T0LVsn)r0(e2`VWwq%%pRC$F}hJuDv_E_+8U$-hL-%@2Mt;fn0m= zsPvt>;OK_(wP6+G){Ih#hnfD;nWOS2B!~+;D~$$5vg;}Z-P5ufB`EnmIb9?~o(uU$ zLazBI!jjcJy=<2}@~F(BYKO&AJa|4&qXOb#Q&G zA6_xlS+~`EBRNzZo9mVQ6A`Xtk!;p-6BuHofpz%>(pp^~(y0!GSe(|5qt|?IZQ51X z^o#0ub@v2v?~01|4fm{xp6em24BmM_Q^Q`-lGAyX&B3@|{YLYR>!*1)vc=#d_s{kDIq7JeSO?p%BA_tK7; zRH)Aa;$Px`_<@Q%ukOvk|QiwiE9^yjY8VWcYj@8`ELF z{^-(qtB#UY#d~B;H)9#|&=v(^-Mi<`<|4ThIr&KoZI=d+UiwI5N|??q@bKz z&guU4CsIj45&;$$_Q#JO2+~qwDnEXJ0KV@Xp+Uc|tq>?HKYk$pkQNhG^UOZaf%3&) zYWccaypUg8s`SvUZPYv1aspdV-%~=%8~_o)4aC|xJfu(n_1ewr_W?nbk^&|9Z3>SK z-`e1m;?uTa_Ru9A6gD;W9G%7`Pk24!_50WoIAmg@^9my#$1WuwD) z9p+F@bB4i3_59ynXn{}}pjQbgHpbDE)->Yt&;YpL0i##`5abf-u)<>YNm}8*$dJJU zu*Qn!$BivX&6kVZxdj2^ZzhnnbXDk8}F}; zLxZ6Xt(RB>j|dnI)zv5Gl4A>uu#K5DLFf(A!4nd5d3=_S3*Xs0LQJSdkVAx&QgSK? zn2CL4#m#lIFpQZaA)_^uSOirEp%Z7PK}QXDBGptM(Tq93Mg~FB0t`|l!F?NdTc=V5 z3j`99a~@ZdLUF7!<$8G7_-l&5ie;Fw;pG`9V=INT3P1Ov^`{wtge6v)iELVI+3JZppIzn9>l2QCiO&$Agde; z6NUYRXpMW_j_wP<*w_$gbYdY@3h|-5$x~#YFtKcYp6WwYl`0aom>jMQ^lN`PJs#{9 z$-)_j9)+r(J*h8c8hz|`mEt{Q*75~>7!@t;7SNnFyxGr}n8)=Ja*k+5%fLDKsbp zJ+xu{_efCNohIc0IU$W)a1*(nOn^o4?X|0KknIM* zR*c&j_89lA<5_WN!#T&AbczkCaW-FYDM5@3B`%;%A<$19*LTr9=7OW0pNsHscwYp!qLkwtGCMxy`KC{tBg4Ko?Vj}4^NVtc%)Y_Jb z-c>lxq}Vz9+S2htple?p!9(}c^-zN>l*g8-E=2VH&Ka}dsXVBivjilSTIcS|T>u@) zLH**iGjJk^n_)AQ{aQ1^QW3S3$~FO6znFFPO?ZZsLb?A~rZR@O)lUk%+wp=e%>gR- zIgXe-iv$9g#mmksk6Jqpcbfeh?U^Eo2RA%-oD4p2a{zieLJG-m{UIH(_C1PDGMbf= zxHu+c)X_`Qg`#AbV#@k2!X!b)j*t+FJGari)Iz{sYb+bvHm$X3kUUOwP&8)9=Xm-_ zu5*s?q1~sq;6Nd2Y}bw+epnIs&s_)k;AgG0QLIQu!^u3}6>#h>~LN3^m zphruH2%&=VA7N5_2Iv@(=9fj@UcSEJOTZg%>L?Q}4tzv9^xH<15~F~d1`srm@J(Zz zrgVZMv1Nescv6=oY0&#N3T2=EqaaECmIT=?lQSM(?TES}1u2~CQ~ zn(>pXdgGl?iwX&jK@x9=FEYAtIvzazcgQ3G?`tC*p&=sD-91B6f-ro^^^Kk6Ku&RPKDixLYlA^ZKTpjU~a6wwhnDNHR^6NwWO>tO$WI+Mx4L?`3+kA9Rw|4qU8p|tn-geji6U~TL}TzW*_`*SK(QVY4WHQBEsOD zq=q@ElsmXYyHsOaAmV!-jwGId1ka|NBvu7mU6r1lP4EhlB~s=Yx_1odW_Od1Yev^` zyT_JRwuS^7VivP(Cfs|PlPVsvsH&*7XYZ)OorzOrm|_ds8JuW#3LXJ)ezgqj-qvio z9s_a6h&p^Aix=6`kqB*nr^K(EYdb&PuOFpGNBYDsx;qf?a0ouzy%jx8b^8nq3-&fq z;>tU&=H_d)OGE2vwO_Y$x5LwjH6|1wrRaT9GcJFBV@FyId2wz#Eq7UeLZsrYGXB+h z8uGAf=n=+HqDT5|{q%>UOo_8QC9T@XFkDPbFp4YlnA<9}%Y~)(LcspaZP?47Lc@7h z0-l&tBwze?MG zjn-VIHtn58RWXip1;j6$-#WeV#200>nek!5>n@1ZnbCv}U##*PN3_Q=@Tb0)@fJ#WYiy zztTM94wBKu_z`IYJ!}pk^qv^vAh1>@r^NTt-7?vi+)yS8DWnGUqT_lM=ic)uoZ@Js%7U z!GD$Am+K=#azzT;0IDQ-a4TX#E6B?=$YF@X#Gneta9XOIxiWit>$c$~3lVAvwU8lQ z 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 yY&hQzeH6_X(T^WrUy8y@=ih`jH|a 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
  • 6^2o`_9?X$fC% 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

    L!}2FCa7m_;mFV0L>FNI@cui@6G1x<5MD6P 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 literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/AuroraEffect.gif b/docs/assets/light/effects/AuroraEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..d739e53619b102f503d254afc9287beaaddf3091 GIT binary patch literal 564434 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�o0KL++iCUh<-h&6ftA6Ezjb`}Ta z=u>EaEDuSKDl9#-|B`mTdpP;yvEp0rn7vz1DNF+ddBAvm8KJ)-em=aJcvGb z&M_+b=Q#sRjZAg4wEQ)#&{WiheVQAx@ZGud7~YeO{cjdF%x(wT0KD}w*WFSf&$6v^v@9&GKH^_!^&iqOq|MAt(j5q*9oRbWzgxBUpsMg{q(_E)T zp*tr>XG~(w{CfQP)!XFis)kd@?_#f}@JhFY9w~zf?W){c_?*-hyFOL*aHefEnJ;d@WBb7&gzeP%myLojx z-uqlz@~op$25dFCPx_#*kR*IrT>iGPmZTup3-laXO7am4?3E86T z`)wZfwD~OWh}gY*(Q^W1UPmkIcP}hj^{Xsh$H8;cF1o9QLj721W{cqA<$WH@3=Q&4 znkJk%_n8SNSXC)6WA}S4efoRi_)E7I59`54C+#C*O^nvUk^35Rd-j}}>pi)JawOWQ z-2RHmfyVRR_JKiWvcEJf(Zg6-Lxg|@+=GItvAZts%qYRz)JHD2 ztqp^qcI@0;_P=<`0F|hY23)=8udpkpo&D(yGUj%`rSEyn797=n=8eQLNmPLE%>m<&9Y-Vyi`tLu0RzV96`q%c6<1wOpo&ZJv_d+DeM2cyhn6?2TlmuV zRcG14+1u9{1gsksAR+bT4^7bDN7vqRz04c;k_7PD_9e)NK8S4T^Y%8AlE_e%V~T)& z!7!L-zeqzmep2D#Ex30v``E*FM^d!lYe^AZ-n?(Mlw*G_C(2_ZHpP6dlglR+z3^v$ zMNoO$({u0)uD9zsZK=PaIM=|>rv&;PpOGQam#mZbS@-x| z_A?L2sx+J4C?`_^J=B7GXK~`#%}tl-dVH-$juqF3jvvHl=*xT!9$gaKyzQz|+W=n| zkquSUas$Pe_SZCjUim^|u=|?^GVm1WvF+_b(GheWpVCI2EF7RfO34MRu~+E1saMp1 z9`hvuniM*!stXo$I?}~@lM^p0srcimyzE>>!4Ud-i-!D+D|+Z7S}d`UL`v)h&Cz!3 z>@SCnR_LbbxrhAeFHU<#pPlsRjeXku#ipB6X1zdfxE3E7oaU&^POWyuIO+4$Y`0Ze zAaCmy2ej^HCh$}JiA(?+m)c9_%2eV0h#T+K1Qv2JQ}56LMmR7qcr;;M1CQ?mZg+E!~ z-tTkht&=>M#oC3k^?C6nf6-M})~lE&PkHG?vKWipwSH-Zd>`?~&>L^$xjfK0WM-+_ zP)V6PM`)@Z`8edouT9Bbyv#a9&3oAWkC#*JGNXdb-NXs{#(CS>_!*~YLtKqMVH!7{ z{bo0|O|$v8vA#2W(O$$r2v^7@_m-@J?<_~bRmJKMMTGcXt*ZFINU`Cg8~a`sp0u|W zsP1?};k8#^yWm-G^43a6fR&$T>5FE+_T`7XtNon&*nUWVx8K=5kG}sOU)(lDW)nF} zwU%5jh4qQZ9__KYw8>-PwBu*zh2J;~m6I|E_IHcMJ~_L_ByxN;V3j}DBcb>;d#+~I zviXv-Bx4>nVvEcTW#@e*AucRb9o30%b7KbZmqrWeMgjo!pI+qGd8^_(SL)++fM*;W zg2Lk&D1Z%_Vg!66oCZ}x2B6g8(=SKme&o4v1lzB0+8qgeVmC~nYn%dJu}{$TSmqM8 z%n=82gG`59uYW?VH|;m+pG2Ed)gV*=*-RD;IMycZDm>YD$oN5KV&f+xEFf~tP`g|a zK*u~-c=XBbZrEU@_zFQJgxW_9XP(^gGF=&dsg6#q&poynrN8POeL4Xwpo4z{o`Jv7$a?EJv(C~0w7Z+`B2#;p@h~Pd`jM+ueGZ7WqLCW&)DFax zz?s-9V49Cib1!ee$j3To(B6xf^nu>)KZ6NGI(?&6NDxg#R$tNZ%c`Mg-Q13(`PdMM0_Sdv+rUNs2iGXJ^u zVYk#9=Vmv?#`Ri?_w-c3_A(X35b$?zuy7->VgHReZl_kRpSLjHsNVYQ8&UrrdbFuj zUR|7hd&N{_#Yc;4&s*=d1^nakIXNofv>HaG2Hr(Kb|i0Cx|My=V3+3dh=`!Y;}^2w zZik9MT}{n8rNNZ9+qQ=s^fuQif84j71jz-)_3uQMdvpp=Un`r-oc1_s82C+|cjJ9o zw#G1}X3g3$A0fu!(v^c+a^U3!3E${PUR-6msMMb+H z??QFf%H9Fsg>P64G!6ehXKi$xk9gxr; zKn*HPQ_PVSXtqX1>`c|+?0(p1BIM??IG1-u8ZdLyf32M_msed`R~5E%{}(^W-ZmHJ zc2o67l_&QP*h}8$u<6f#PhA{BKfV%205bQ`tYf$S>-`K(R=Vx#K)O+H3(IC6-h9{{ zbMV}mJVKUy4@xFCoI5S7j-tbrhc6fXnX4jB%B^p2{2goldCC4O?y@84IYWGW%jcUp zf1Lbs?5%n0o4cOtjlGi^zneYSdE}h+FGB%cx`Gk&&1Rb{e)-9jj8jXiZ_1(keQ6^P zt$y$8f)@-KrQ{7~h90-$>4kd(VE?~!4$VeKuUVPzFr#k!jcUP6-*vVIz(oQ^DgbUD zeA>ePgXDo}q2m{^Gjw{|t%6QitI7Gz`O8(`1vv$`>ThPDu8@H$5}>wdXR-NkiVQ1I zVp`<5U<@iqz*wPNO_pP;akwHD?2|$G{es}6KPX-hjyfP%mQ*A>ngy?wGxDs@y*B%RqG5#qx5X+4X#io8zCi0bw&wtllm|S@eP>YBU-J#**m4PR)Ytxear9wY?%0 zPQR|%e>_oMW?;Vd_rV58#6G*q!*!*rP}LX+%YMhm!XhCNK5t?uaOv#7yLX`N4Sx(CcCi~ zS?Xi-V&mnt15VwF|0LAGq|EBs(FL4Q^K#$)QgeF#?qR9pp~+HnyF=6A=A>^g&=#*K zd1yEH^RMxlAA%D)pJFx`>;80O4F&V`XpR&`24{K~f% z_eM;Brz+AlJ*bG?K_3-RPst4;xob4kST}l0g^y)gEymEZkVRMv6|%0|mFq%2V5{gC zhT8ddOt7g&{T#d_u@0aH34!&5Q*mvfhu~WFS+;|5-B~uHjeZYfE4VBiIS_j5INq+1 z%fi`n=_W&df9mrP9@Ad}D36niMqIxil7De^W+OdR0nSd$ju{0pX)dN-5vFx1b1|Vb zlsejf*f$=4o0*Gajfq*>66;M>bO=0@^m)V@)u@|UZV6R5I2$O$rgcSWE1ZsL|%k!F{C08F1^j4yT7Qprj@lIoP-mAc8 z0q_aF5gZDDg!K@lld1?RWl1fUz7DkHnPWcb8{R!QdPjn3r;p6FzY?sLMtJVyiXu!h z&7A+&Z)9I22@#-35aF$pA;;>vwPcI>cCJZfovzWG@e&)NiRzn?pDv z763-xGKX#XNT?@Wj|z;1;8^BSYw5cgo5vIZN@R~m^lsvJDLm*nJW#!fDS@I0H@=+0 z&3H1;e>z}^wa3?J(hWgmD5c@P$Uw>VvH?JYwTs$K^tnufbB52(}T3$R)z!J*jM*K*>J2NE_g}yS;@bVBfFkz+>2g>{mkr z-@kM&a1MA8|9FCg@r=0W;SNCJx$%_si`s1q4Hp|JIJyKar76D$eg1Nf9Vr)uE_sM*1;v9p$Mi~z1q~=2 z1V;O10w~C;1c?g%48S91$vnW1A&=5uImT+(uVmeOm<>R+zHhK!+ts8*(p;4 z$uL9}0_}YXnSSx6Vn8nFgI{+$)H-|!tW!ta4hmWQlu)E~f@7U6- zSk7>uLTUuNA?B^Tr1m~Nxd*!h;TTOQpun4J>;{$G3IU@3@MbnzzO2Z&h(NIg#M$E$ zBA^Df_0s2L(|(r3)_ND+V*NqyRbE+s8FcV=)PON_&2sahGXz`Q2f<|O6UCSJ1gimwS(0Q zH(O02<#R=1!)&?nRo(!}TlKkEK<7y`{bU}3_%n(vj;V~p2iSr2)kdYU$B|>3&Vn69 zz;&xh&~8%A>MLP`;k;0T*yoT_mT%gYtrctl1BL4{uODaZ87YV%8#ZdLPWcVJdQ@(r zch0au0lo{C9jzxevaw9no>#Se==92xYk`foNDBQ=VfRh+`sPy)t*$}+k4y{B>0wsSKl0Q+e#GStS|3^@NDpTeIbTSO)2svV!g>xeN~Iju$BRk z`B&gj5C9K77}8an(}CAJ0008mriKHy2)7cz6RiP9nG{Qb z#A)Rm-$=^-&jE>ui$hsZ$`rsBV$h@WccKFJB>AwCh&d}EYaw)7K6ioqj|rjCSGob9 z0(Va)`Dvx^J{dLFmZLZzjfGkeKz_$0>$MrZyk$@JJ$oPiK2BXHGbmtj#AAeNVWvwu ze9DRJr=j#XQ0(R4LKbv2n_?t~=ELz{F1tI}}tzQwYgJz&bUd zKo00wK&p!PEMV7~{j~;*VSjB6+<~%Zm4@k<;H_S7Ctx*{4t?+@5B`@qJZHfz^E5kQ z9YF+?P8r1pnvf9SY6O|Y29hNv152q^av;s#%t~7agZoyCfQyrboPBj59k8N6sQ>jy z7H}wg!X77lIRAI=g#Pee`RlI^r`Ek1pj0LzpwFyIr0gnLrV zU~5!llgkN#FbR=>jT)TzC6 z2z)I(+b>M9{oxdiDOd~^7a+Wo@5RUhsdbRTOM9tQc z{jX_O2U?b<)vmx%pq@Q)gZRev&SY<)cz@5bQ=fO;;-XHrWO-?8E%jjNaRtj&*9oaW&!6DD)A;E&)$BPpm!QkiHFrF*t_N<0fl?be)cDa9xF?*Mi%%`0ea` z5A&+M8I8;3Nvs!(&~0qA{|TY~Z^C@DmXNuWX%n0xJ&;2{46!8N-_L za_4oX(b>2ZU?-YSn39urD=$qH;JoZE8|r#ozaZs}eM^I1ctaA9D_{G45r8>ZSfExiUw|zBO3hR9 zyR#=kc1x%%e#q+xu0=K zOlt!UkPRX=;C)nA6(3?CrZEl1E)fI;0B6k@h49g{FM@uEVpc7Xz#^W}o)pmuXfxtF zK0&d4?l@V$Ra#Q78v;j;FnKvOb}Gbp_{W5S%$qi8kA<5{2?{zH z3v}&x>cbKePj+Wm$lDH+F{$Ol2lS01a?NtUe}5+0>zy~AO&rk@kFfw-a?WWa5v1e4 zkd3C)C}RX3*OLBK;~)W)|6XLF3X{^YoNq%1q+s2MD}!ZlPfpAgHdhOq8mg|C++)!M z`Q{q0p=HAa7Pv!eaD!~H6$M|{^GKTEGA%yF5y7uJ+mq zHO^R@O;O^T5$MKTN_jNd>mO5dJ~(=_;O~Q+Di$G9)lQLP^t4-zKgg0}(^*s-ebrlr zrwbVQIjCrqFp3q>f;BiK(=QC+LRAk)kAc)$3-gr>{;i9ay$mOe$HgC zt%!&6>aXOu-xvo&a;PCy=PBS=NPf00P}fj*-9`Xlgh!6%Jg#U4<;!@Mg2(;G0K!oa zCj(q-fekk)Cc=Ft+CHXeADfuYiX~IE=$)q`fXGK24rGC+e!Y(qo})2@vZ>H#(2KYa zBLSZBr*ASq0+Big$=6Gbk#fwHxv;z+^kKCozwlz|9AY)tm~WNld@}7x8@yh<;7MEh zyCzPg+Vr3Em}>QH+`Wd^NsYfUj$Or42lCS3hJ5<9} zvIhos$#OeO!@eW4l~7>rrmisgragq4wcs{zV-p+Lbpidf(W5aaAyT8?I>Xu@G&pRn zNx>YM*n?_iz^lov&`+cL#)gkwUJ}xo9&cK(qmCzP&s^OMGX#J_HGDznXfUM@v!CVM zb3Rl?v*P<*3S$lB+9y87T;&_I%b~~Jx1}l09{$*gOET`SxvK@Mhbc7yIO3P6WVWCW_Yu+>?kcwY^@shd5`fHJ`1wVSgS*PZXT zET}ecpBK9z#QN!#735cOq4P1(rTw7%{dpW1RTzIf=~M4Hy+No+*HcN1k2OAEw1Jkl zyVJ8RrBCy8vFy8t3m?T+=hMhokqY&d3S1_WdQ@X<63SL2D)A(@0t8ft{=*dXxlGR2 zVEIDxV{2e~ZN?JaU#2=f94_c=`iRY^yQ$BkmkFJrDb!9a>e2XqGnF|*3oC9mukE}w z)5?A6Q+_=^<+KpL;XLMxz-XF16ms>W&mD>AC1jzRxTPdk>4&|wiHVs#C@sqNBa<@~ zkRgZ8XUMk;f!|T{muTadEWGV+lq_rfsXJt#gl~J{JIX=BH(+hj%NO%w;`-ImsN}_I zIs0YTrVyiV+LtR9k|hrg{r35$&|7axtk+bc0s8ID)(yAgp$PB!8QL_8;J;jy|3~@OfJH?{YRhJkIxkDs(FL-ijlL;bq_r$AS4&Bbzq8P0* zpaYFADbgJpyBV+UD>XGE{C+Bcc@>6Mwk!JU<6njleY$5JD7{`{uq4~0lS%h8dH|3y zQ!H#*i9kl?WRv#zSADyUHvN89kFbZt=beyU&h&ER;vr-BDq}n9*M=~ zDixqlvLR34mJ|Qe6?~7Sc8_U%s-0N;edi~6h0_iu9_MsL@gb0I zu-kKY%5evJsez^H0c1>+zTzxPE%5{yyQ3r)OtMy>+m}&y;0OYbsvP$v)dT<~rXKiA zG4}HN-U>tNSo8iAoV5z}D6sB@uRZUKxy-GadR0Cqf2z`_VoH094QaRtn=K3%I}{6zsiCR!bcfpN5m_Enc6) zStfVZLiPdnW~tsBdI|1J(iG18m<=p73}D;sO<&af0>n$$iLvV(AM_I;%}iNYB~Lm1 zq$mUDQEKaYj#;wEGQ9#$Z;Fxw-{Pdj<+BdlZpWA}(YN(2U0tOpt3?7okoh5-02`$6 z{yB{MHkJvUY8jtyzGKg^7m}Nv(_}U%CMk-N&>ezW)y{SExtg?7hv?TMiW8Xt6m8p*r{t$-vDh*6_QYz3vx13{?@LyWi64npkPP^ zLo#(+RWhE;HNNosg&f7aFUf|@SDCq^EnI&d18~vc1v$iUIZ}=eMdYP^^x^A`1l*%f%djLWROp9S zh%-xCK&RkUI$`1-u5n?g?CS!igP#lfi`)U=oP23#%@fVhh)DAV8_cybtPh5*jB3lE zI%*L3kfX%1k%3-N5sIVsk^Y!;pn24CjbCy=5?f$8peem2SVCFmRc>!oU{(|tD*nag z2*01RJ?-IzP^ z0uKNxt55YWAa7-HT%NsYAP>P*uq4Pl4ft&h6^|1e{qdpL2EYNVZ?%rWC^>qM&OO4~ z`t|;stTjYG)=kz8SqWo6Zt!MgWR6Pu#;)eFY@ zYzvaupq6Y@7!U^7$y81S9RzE4c8w_*YCd#;Va{zP+&j*r9@jQ8+BbWz`Uk{pfGg7a zL($eU2Y#r2)ScL8vi3mSmI6eCom83M3>Y9S&ce^rpR}{R-|KFx)|N6DrC@AQsaw4Y z?Dl_YJ(LY%?Qd2lcYd0+fF0rcTXZ^A>0tfWjt6M>UNcLE%Gpj~Y{uk7K-EJE0C*poI_1{rFIUDma+r~IW>MqD;y{HpZy z&~C(}pp*XLD-dTZ2Q3kdJ%!A{UTcZ&mSD2ZQotP*pAa=QE7ZAw2d?~y&qPE%&o$q5x;EWQ zG2M<}t9q&|8FCmBlm;bvA!j}y7K8Pi9R0pl#ta9rp^uqep#RxFDYiLM0Q?XlRjDOr z+Z}{rkPFnBFkWCA%KIGa>EQA6Y=bb>X`pbbnnNswF~VM)XH}am!_KGcUKmX|GRYX> zu|jyz&{{L}*J}HbFWOvU_$lf{)TR3&~#`OQCYS$}n{IeOhpOdhL z>~W#<^iwdTeQ3Av>rdu`$HuIO4p(-Xlt@(7>(D z5dA2LbB!HS3>YQ1KxpXT9W3{|b5f7~30` zH0@V?B5@H)tqJk-Qm5KJq_lK$BpKEIj6(UzM?LRMZ%Urx87+T2#ELoD(ie{h1r5jn2 z@EE|g0JBa54-ksy;)+M>s~A$Kf>*UqP6*ihqBGD1fGXiM{s4A8+4S+^1f=}u=PX@pD(Qi$cMV8<(G5`-8 zAWnz%&_Od_yPkmAMEbx{!P#HE^bKdLek6zAE&w1llGtMa(woYL!d|NZC!aH?=;5o9 zJ2c<1dOLnr)IjynK#@|U!--!{vwG7xRP8AvSoT*o!N$QLcm#Q&{Q5rVfKEMv1-ms~FqPRtO@uk18KtGFv;^^w&@gkxZ~Uh<^yo z{$_RK5!DG3ZMI)g1P3IKJ0wsZ?i0?H6ZmSiRdi0U@L=?8mp*kHZ| zq(*IIVJ5{=dwOWC9=IZ3|KWCGtqYDWg?@ll459xFrF^MCvh~5<2p>q6yU&%`vd~4u ztuJ{_2+LKYAD=j6DTU^w4xN04BdV%n(m`VyvUE(cUQwzqJ0j+sqR|Ja98|Yw4KX6RY`ENL2(MvyzE%Ikz|5)t*JT=1Hy^|0%MqtU*3W z)+;gP_kePPP}52AxtA6sZF_=Ne^en=+sg`AE>(!Nc|cH;kJG7=1>fEen|>cwc8)Bk zaXS-kSy}=aT~}5Eh%UUi=5luoRUNYlx#jl&P>q`QxZmz|$BaddZ1i@r!p(nrLdr~H z_(ly?DUStCV{WyH1-rWJP{(EFbOO;v|~+`{4N zZ#EPnCQ?Y$e#n-2{6o3;aJNCCK*D40^~`dUPWM=9PI0v`ogjj;(d}F$a6%uIb^ceO zaeSfl&m4kbeP6Q6S-VXBy#6ptm`Z(bbGa|<@B3#yuouaMk>4D`Z>bP6{l+`{(~X+Q zdN!a7B^v4`7cIL5*tX#X+(ka62Ud(o!OL{{Nc8s3sxH}e+_ZK5djyZzJm!0TH?EjJ zv2bT+MT)*%!J`Jc4m36cuG^&t)C3$WvbL+~!m}G6G}0Xji}q#X|4#1U`ySm(2k~-X zPCK>FrDE}`@;S1>U!8}TQolMSf>8pWTg;a!(S9s|q(!XAV$-C~FUh5eNyQiIYnFFW z>{jlrP!31>*fQAI0(A*U2OR_BYXf>rvT7iK{pzG$kJ*xpYzRZ6AG6@Es)t=)&8wfd zS*lH6+)U<}W|SEa-%PVNFhQzcEWUuqA+lG?|UrCc>FBQJcK)>kPHs_Clmo zwMSnOC25S;BuUbwz%gUU4k)&g0+>mL`}nzZrpaP5uok`h)}+4UFCqcJDos#<^qjYy zlSM!)z8H8ABg%eP)_Tf`RFB@>PzsO}WprezVkB$G`eD|{lfGF*9KxTTpDVP$)uUHR zB}YB3d`BsrtnOEa?|ayEeMFwKK7Dw9Mrs9Ge7UtEOS*A@E z)q-7o*@Z_4V69zh!bIv?{odd}lm659yCtdhriR(*EL?6;^ zJLB#LrHi-BT|9YH|BUi>{*Bm~TH7Pz59{$_TGcEk1OFpI*QVmGGqa?!$Zxl#-(?QJ ztTR*ov30$Ji$9dwRClsS0J4(A=K}zK5+*?^8q)3~bOH5!xC>q-c5+{FZrAgSR_A(D zP?Fyy&IeSZ)@jkE1=6*jU-jd<3UFdCLj>O_$y_5^)#UrO9$qt0D-J+sNJ~z*;^ryf z){aLfQt?L0r3r`B#!59`2Aoh8uVPD_ROL%(jv1*#yOnn~kK3{o#dDLyCVFX0gUQxN z=CJ_kWMc4(=ejC6VwW9sUxWO43qg;Gq9%_xYgp@QNtR=nO{}sFUx7;h5?`DWC@9-0 zbZQ9L<>Xol$dSG4pNT}z;^Y;9G-j9`f>*#X>Yfg|=qD;g^Iq(#IaGGqr=7_C*S) zGZY5g*+Xul>K%34O)iUF2H_HciqljisM&)`R6q%8@4(?Hl(c% z0xlG>SDON)S>4gMrhq0Qv2+5UurawZ6e^{76;5JC+hgKdYO^QvHreCOhNinccupeV ziT+F6m5|}f-S2*olRu6rvkK;#8ww`Q*Oz}59YV8SiEeU@Q%3O=Zp?3NSd+oclhOqe z);(9?KkBT1A6JMK;PDb=;OoWpECiM!{rApPvbigKbBk=fygUiZ3vsbu-Y6zLb*cyF z1=kLf`Lm!#H5Lp_jr70KFSyt-U$m3P>FEU{7m#ZR}D>6y>^gU|@D)YjtZ&&R$=M}d?fA6{?kUE#e+q%I zOLc-^B#l;<8-Ri3h<-fYocTANx$JH%^<(Q;(KK~w0Ke)TX7^h0QvoW0jgAlkq)BRJ zCH!Ng+{<8_(uK-18^1ry+)2YRF_+e- z=&8Nl1c@K(jGo8Z)P*4zJSl5_>~r92k>V>kM3NeU(dlpIH0-y2oBU1(ydULSMF3d2 zxpZMh{%-1ZoHRc{iHhvbU#fQ6apw9>r8xZ4x7)yfv4{jawI3gV$wnk;1x-cL(k(jd z$A`s5Z1lI*|Ng36KqWuzSl;2M{V#xhwTNG~c@o2aw^-;QKDwlqg&>pLj;&OoU|iIv z<)T8+?Z>Z<2#4Oi9lCqt3 znbV~LH=G|G9l@7||14R!3khlmS^}ppT0A)JB1siMdqqebp;YK86$*%B?o-aU0Nmt@ z2zSs$N6{Z=+q29<*5_7DZo;hN+E{(kJ!tA<{5|Z1-HnrdqSB>pvQ0LxacF^eOMQ%t zDSC74(^wla@SS4B0_kVCqwwH-(}4SQwq6(L!#l|tBqn%I1=?Y#XVa~?=8X28lC23^ht^=_B|tai26kHE_hpL z*}}U_8YN(+PtX&}F`~z9k5!0@E$6Z5%-A6WXH8`Ine=OSO;94zQy#gy#+MzoVN`ps zfA?h#2a^k(r{9zh94+#Y`~Rht->CPBvfq%j=-3^qF`-6iHD|*v5xlm>=I7oQv&spx z=KmjIXZ{yc|NsAU&g|1vr)H{YpK7Y9$h7awOp9qXEi$E;%909|q{8LQQcVk{1(jl2 zB!r1vLYNjQ!XT6@6d^8LapB53pLu`(f$twMKg>C|^SZrWkJs~YzsJofz`jx=%LU!^ zFaMD7Y8}1La?Ukw-@O(pgEYNnSj7^RF8Ea;2eHTbU3(Z)VekNCUgI12xJ!BT&G;E| zstmrq&nbGLmx0s%t@-^p-RjCWscXepc>UdmVeeB5J9@V7zZ;ONlsvs`;h!|_SJyAx z)xkCX?Iny(3%9UwY9w7h(`;zLG<%%1zF%U~#hWI&u|2_Md9DH-joHOa)D>xn-_+7L zcZYC-@xm0PXUm0y9D<^Qwc+6GfrJG?3L$hg`|K!5H%R_$QGMm$lT}6qGeXP`p0@XLnjd*(UQYWtO;A1utV)lv#(-C`!W!XLSw} zhW4vj-5^0%_C*)p6fAkBXBWg$q3O~%m|#p(={I=k7xU1@lc6e)$R|Kp{V>G5DT+{U>ups zjA3J`z{_PYl@`q=QU#f8^PlTsG#vD&5as=R-$VxlAPgLUXW5mIf4-rB1hXI|M97t~ zE})Aw>G*TQTJ}Xu@pdb8)0IRx$f8GPmq72CTESl0!4{o8a;$j>efu{`Y|>-chE=HZ zl#o`-apd%slHXel^r+NtcYq!Edu+&}cEPYE3Lax))e8{j(O9!|0HeR{mxQBZt5|P> z^S;lD#iMC1IPDL)3bBrkjP7>p1GMeqW!$khV9xS3S&Bhw@EWDXJr?Q)$Q$a{_A;xY z+;qKa2D&+4msNAtdm-SE_SfJ4BK3m_Rif()ldw3nIiS4Z|1Z-GL8F;Ad;L!X%)<#= z5tZ->!B)mycy62xEc-*z?rEev(A2l&0Y`n-m{8H?VBe10HW)PiYStDYv-FmvMbN0)tiR$ zq4MnC0cW^bV&lK&#eks(#WW1+=>URPMQr8X_a8VKDpSs>KS6`MX;Rv^QqZ-FlwR47 zzHkOJ(Sic0^7qtCu~P4G3DG8!wMoEd4-!RQx0Eb+=d(NYoq&A!wa0whYkP1TS^> z(BEvD*#{>o5%sPG0^pDggK-tO8g%rN6K9aHO*HEbR&7|!Gz<3*z>I%>N5DW)Sl-m= zCG<(sAr%M?4+_m@01RDY3Vx-+qM5}KbQRmW0;)>C^%lJADm|UZ(O-SRQRC&aWq-)+ zjQzgI$`sG;BL z0cL19EhHc#EJ_9;Pd2W{Yq%*9@-u6M<+w9yT=6jK<$#sw%wBcAQ0t<4fo0j4hjL|H5gm63{8u474yhTvr zGRnL}@)w5r+HiGS0JK?Cs!^4=g2n`X21Tjc%P^XKp;XHV4g82icPDWqT} ztIb4A4B##ztL75d>&OTfr&2eP0kOqxePQ!gI?&80^}Zo2#h?-MALF>i&RF3VO>+DX zg2$TBripb^M}qGHK>kPV&HPsMzWWHgO15(8P)WXebZ*G2(hAvCEAY?@La;HaV&}>} ztbZBWt-7jmm-Gbr+-$HTR|(?a^`vP2OyzZzc$;V&D%cZx>PcHglmBPgmR@NB34oB^ z6((&X7RgyIHH4rKizEA3fC(tb=@fz>{<`oZTez#&*z&9Q(qiicDOy3weMVTNljqOM zP;;~=$NMw!6^fR&M+P(c^SiXr4H-1jexCTGKTj0#Q>3S!NU`Hh2UraV2;oRyEb~G6I``CwdTm@l zI`|lvvND@a=frwt3yFLs@Y6$$$HmN*PsMv#SqS=w@q*zFAM-P=a$YcoVa#3|bBuBS{xXP`G5SVjLW37AGi7F8A(b33x9R^pKr-bjqj4G=eV^^ld?=#RP{!GbSj{l_u>U<8 zVZ7z;o#N9ae!cBFr4HR6e0|L#YaMjg-pL;$EZopMxx85$8F^4FjIx!#?mR`vjXx1J zZPvC8J5dyd2Y~aZGEcN7vU&wC*Y8|;?3`Z8nfl);DV*sY)9cFF{hKwcNbdmB!Rlds z{+x?0O$iyXexTGzbK(q8v`4s0xcgikgXL=tjlNMweuhS(4gLx z&j!0MtDa(TY`BynOdI>pvA$v#v5+>*1&w*S-cs}p?Dn3FmlcT%=m{LkjiUizI z0ln%0zfLxYX8BK{G@zjLDwY9dDp;;W+C-MwIdoc{K%liYTK=G-K4=K z687GofgAEzGYVGtn(K$=V~I)Ae93-#Z=k<>U@V5k98YlLv5G${D@Txq?r8g-L(#05 zk9p6Ygj7f;FBD* zBOJX$i=SW;{okFz(+3#QUUJ; zQtX()K>bV42Gz2~!Op*xv}%@qT;F?#wOZ*yLs(ePGNg_M5#!ku(#y;8(4?nNvkCw( zor8H0f!mSj`VP|WiP7Z?7d8+)oF65gdb!o0^jlBt5}lHzYp7N}lOQ z#85hE%l4Ojy(|#qTnpcb@{wt)OBppRuYv17`esa#z;`0w4<%Z`ui_)cEEyBybHt>nd^dpnBLkxI_2s3BcM z0`^?gO6byB8eDOBW*$a>%uufJhT*tm#`}hGPUJglVh@V zZ~o3XpwWOZiR96wSxc61w2_3GwBCXbOYqGQv#VJg3mS}6~DCm`Tirn7w4 zMv+lWMsp6*Z1UFER%nvnS0B_@xg3l%*h>u((yEW||MdK~i(u=aVD%an;WKB?Ew=pe z+Yb2cF>6PD-J^O+O8cR*Ex%bO^-suNg=>!v(jf7a!HV9|L8x?fEaDp@+ijDZo> zm3@CFwK(nm=cW+PcOR&rF$1{#$KP9j0ga!ilpu)GJDI%U z>9D4&ea_;1HlmXy)KRo$eiSYm1;GU`3|aK%^rwx#+x|R>R8kiZZ`7gg=}dTI@WnSonCD0he?-v|@`~4$TyAhHZ?B?)pby^QY-PBCE0ddVq zFQ03f0pg9HkY!_=CaTe^ntA$TW(7IdwIqGSNvAhoUtkA;x zf}Hlt%5byl;EZEwvZ3tT6V+ZCNSAcsBVq?;PN5r{QJb7X%b1H@a~&6z92RJd)#_zE3$wzg#Y<_*^A159kHlV?r$-b@ z5?|&lN#&lI8=o~qKf*e5R4xOnPFt^^si!>cuV(JO6;*FH*ofX2i=I+BRNYE;b^Oa= zl`$yz6$`ynI=zE#SCfeDk1T6XbLy^XXBYoH+-KM;Ss_>fl{(q3pRN1sGi`C*p>(k+F&#M}C&VP?d0*eh+V_OBe5^Qx(Kd{2 zkK0^USUz1vTsGAee5sp_gpE!lPmCn73rZOO(GjZ0V;A%6na#Z{R?o0g_|+z@pg!i( z*~|o#&tUV?F;|zL!s6mSD+zeR!~*OUd2~R|iw2jsT8Yw?hQn+fszd|Kb8zntK2c_H zsyUdr$76WF^f(JQ9^-x~L@%L#ofPkRfbgPvz)L1Baz?MRov=A`8k;Sc$X7oGehRg> z2i~Z4C$Hx|iF(Dx-}b_L`bu8{EH~_-_vrD*sp`2XUBpo)*8JEJKsxZHTIqI42lzm(Z;?-@co7L8^geW!yp2K-3p0-Se4cdxpv{-L&<{7A zN!1{9M77GK&0wVD$f7v$BL8*E!*9hItk-Pev=wYn4-MuaO7k!M5lHUU8^55pepj2k z5?y1Fn)bOQh$p;frHF1QiCvN$R$xN-7<9j+_V;50NOOdGW^f_Op>@8CP^V-MkM>05 zW)`yh8XQog^9g>}p0X>#_V&@~kXgPhDXxnGAYMlHoYmJ0$-nl#HO1ym#$GFSOrZn!rUS$joaFL^&NXm&RLMU+U}JSdZr&VvAFMDR_w$kHdk9oQw9cf4(L*j z`ppF{rVi+#S7-BtG>7?)SaYp^s zyX@)dB|=l&lyt<*r^kZK(L-dHD+bqfcC#w<3Ya@D#%3<}!;;ChM(By~O4;MxSm3Ge zOK%Q6uJWJ8**FCp<@9{HIs8LGlF!QTqN9%QMB3dR|F&C* zSKEQmom*)a41A~RDG9p6K zJza0raq7=^#pt6{!CQF6*Atx8^>5tS_^UZr*3AV~Xl3nc56LvxDE5=1e0#RYs=uDl zKV7dcr^d10+i*uuSg{5R6w|9UY^b82HuHN^0!y~ie*dkS69;NQRO`m1IRhx8iP9y`BLLe+>Zmncd7$2 z#%AU>hhp1Sba|R3=Bb-w+GEUfVYaen5sk2?dQxEHINrJW{wc}dXKg}H>K1tpX6E!u z%C>-7`wr$QhCo0+JDWfMOmL_Ywe(8*irf%Ie&+G5H_y0E-OSiojc?{T&9)I8T0itQ ze0hMg`FAmmZM``}*N9n=uFcOce{2?8F#CA>k;hfXw%M=Plryl`IeO0$S@e-|(lO5O zgta}-12OQ$12$jy*UER_(r#M1A2%Aa zoCcluoYUi#;-7RxkGWTLUkP?NITj;|$&8B$_jx}mUgo#^9f&i-KNx$k>Bn`*aoN@} z3~e-X`NI>A8M6>3v&n-|9YgCHe3qyEuqCOmb2uc$d@D=Cxq`)u*EDZsJlX|!Ocm=o z3k)WLz;~&a)BDch#ah3k-IGEBqonG3L`wCy8*S0BMG4c!9P)MBVtD?6{}r3=H)^djXnYR%kyX z3&d4*IU;4t3ntp^NezXs&HT~XtaZ^rWvy{&L5Y?a$SbqANcOz~mF<5y-Y;#bdfY}` zRh}@QAGddq}`%6z< z-DFpG?55|XGKY7!Zs3>B0|O8q7XMk7+qTC! zctawTo(}5F1?;rJQ#+EU0193X{E>M+IlqnDPD38<(j83`Rop3G{Ris*!^6M@!k?$W z=7CZevuPau9}hz}kYUzQC0JTX3oLKs%Gv_4B=45VSs@@SfsCCcKDpM{c6n~LsCAG9 zO7Ldb-;F-1bTt%#GhJVeecjdQ|E=gr8lEM-R9e8LrfQNfnfSXq0n8=Su8v`3fN(7W?~ zP%}=;io+jN^gSQI8G0lM8b6-Sf49r6Ql4$X7bxo9HO584=dE&@MzfQW$mZEgp2Ra?scP#tGMoW-Cf1`I=5&j_=T~H zX(oNs97}I!TyCk+n$OWv>uoZ22s;7YPq5EkQx)uVjdFIxG>jQ|+iQsNaY$cva_)|) z(~h}*4JbocRf$kyxR!B=WiKmH$sdQbRSR=UsFmHYI|l{E9@Y7i7hRnY4Y@MOihbT@8cw@e?WHOdSG*e(bNMF+1T zE0+0<4VYq0*ReSl~ALV-C-`hS?(IiNcL@|U9a?> zXd-{f+SKAS1husT%6-xQ}!5&Dn$ zKwV7z%d1xhbsZ+K1-KsJjuX&%QBzsc95y&kqlcFEQ7@`6r+N_4^cE%NeljuHZT-hG7J zY!QAHe~Flhq5ht`zBmg87~caeDfk<~NpdzRHzym)0nzZB(2m{yhmNA(ra(|*o!5-> z)XXF!G*2Hxq4mud*BlwlE*>Mzutzh-8f%jrsh2VlR>F7*XyZYgY~ zb#B`W)t1& zoyvlMlX#!KF;R8n^0HlBkny3inv)VO)XEDZs2JLnvu(kt7C@h|9{?FrvQTvRa3mK- z)$rQZ6dt6KCHeb3@R3#|zBm!hL40_^v`N>)F}j5Yb^9syF6PhJv^n-6jsPr3=ftV{ z@0U;B!o2MVLc#UM;z&9c84et`p1?Q_=ZQBT5ok}2pjS|EjYiqk7?V#6tR|;qLnbJ* zlm>|l{$E!TUgFgFXz5z|Kj2N9Rb(m)SjK;0yf$0u7}~8+-m6lS>^tsc|7TfhXA34` zL$FWBT{Iql&)`(SA=kaoqcXLIg_0~2+8aB6STEjFoee`D>r7n zFo4DvWG;RwBE+W%$=wjzDh4rxmtLVDfX86;9-d~)JiGN8-b(-0i?_GIU@B@ZKl7n> z4@+;oVgz%-OV2>iOmtn&HaHHWE}r7_>(3#lRw*9s`uqj^$hz;JDQS(hbQ;%U%S|=f z?nsn~3f!|d+DOG>7vJZ`qjC=Pd1V#jXN4je`1EE6X{LN8$H0WZavHo_sk;2IP<83k z#;&Q$m!`j}k5SEMP2*Gsk%i^fHU@Pp3lL$U<%!y?b4drXkF`+BhwNYZaZ{@ z;K08L)d7&y3L*Nj9OF9{>)i+UHK7h?x2-yF5EAUDzjleQfSoRC$LAA77f3VJOcU6>kBwB+A;CXs$ zRq-#Ahrw0JRz)fUUHbHHubftUMf(Yl7GxZi&_D=tEyS0TK7G1*Wt8*|tajH8vSUslWlEKLWnAe)J5s0uu{TR-DU1 zTfP3P`1^0!ScO0U{u6GEyWs7Z{PLJgcNT7cDe!l2B7n$ETU<# z9pSOrrBm-aH%o6HV|xP-9QSF{ka}C7r~Uy-mIOo&5jmeZ?)0B8CX8GH)I?X{_dl6( zbcFT|ohV+GjHRBxYh?7Y^Xr?yM^|S$zg>=rr1O6N^DY+kuS3#$SZ@j>YbFSKR!+oa zG~adq@18r>3Lvn6WG~@~kAN0$l^JiNagWJLH|7}H!>VWH5*La$J92)7M`9H^@l{GF z4?VOL(m*n@zrv<~o%h4&(76Px(C`FIjF^gyWNHl~91}g_u)_Gjf4WvOpo*u}AaL_h zU{>;=m)8?qWaumjxwan_stWY3Di)s;iN9>2DbV36s`p2fyEHGyFliuIv(l!BUIH6R z1Gl*&$7?{975eshu*xg2)F|PGVyULO{+y;WOk1>Dr9GjRlf0SPC?PaN3);v8%xE|% zf>$em)7uPQ8AuarMEQY`*%)RfwLF!EO_~9PjM8hLjmQdg<{3134#+s4vWdEW{n5Z4 zX`u28;A+pm#D`63=<$6ZMd)XM_Wm%2za}RgMD%y_bM^9?6dP$0cCxq4U5> zMVYTk_~k5EY_PbEUml;0y}ZS5EN#b|^uXVqpqIkVYYIH&lC%xIX^5-gUaWMvixP14 zJd|mad|x94v_KK>Fo*Kk3hQJ;LKQy8#bCFJ7+F%)%uEO$mvFO*8o+^zI&EK+q@R|#DWfqUg~Vr8l%tvmh*2utl?fH{RePDVa_o!USNE*b))_? zXeaZvi>bw@@cwg!BVDpTS(jm|0DvV7Z~>kj6~&a1mpbf!ndiLLM=#VNaZhv>JCwJ? zK{L9N?!rUcZuJTl1a`%u1qECu0r)!=G*FV&a0SlAF`J2AX9WiU=w&NV!93TCAGe{S zQOm{7!8Dl$@q!O^(7+vxZ1t9?){?>c%(WhlFj|igyW?1C&KobY!TeL+Y+HkZROU7d zTC)2PY$&rd$VLpJH4XxF*uM=Q4(xfp#oBwO;>*7d8A~hsy^}%&2F$K)x1@Va+E@Oa z9`B$ikLNj4=vYs+J1a*DSg7ci>JMHS*?`g9cV*j@e=8eGfOpuHAI?qkWJcf8Tw}4K zF7W+MT>#@1<<(@V(&Mo0UDR@UQ&k)$0C3z!##9x0(s&>~NRKLLUP!CQS%E>>gly$f zqv&ik4Ml$(lo*X!*yB)jjN<+gWuKVu`{#my_<;8ZOubWD{9mO+E5&$U-roOo^E=3| zXTt1Qkh=@0+@Qy>YB}!Krg=g$ah0|Dkx5HkgVry${MRX)pl>n<5ahvR7l5G9i+>!I zTSW=}-un5Cm&dTH(UdPrXk=CnTfwMszP@wz0UJyWb9wAv3HdHl>s_(Nrf`uB44Dc1 z9;*utnh&5%rm{?#I6t`E++&v-*{sioppo_={`T{4La8dcfnwo>H}v&`Ci@2i9v89) z3w(=lNkT%|77l^@bptY|JRnkj9%NY?LZ(V$5&N2`IOGSVg9F%uqY5)}`*Sbk%~ z_t-?d`_@2xwHiZDi~0l=3V}uP6?VM%NCS-78gxEmOEMsLWwO1lua9(RnZ=>-0_fR2 zz(5Xa$#O#TAm+7z4(<`ZD$qw!CKVK0F-e0mlFc!&Cpbx$S#fT-;P1!rhn^qnE?(J` z2)BL*j}&=ctUrDtC6q#sE!uWaD{WKrwc=YNoe#F0m~XZ;k%91k=s$!_A!?d_pYNWP zh|^F5N$Wh2Rh&v?f;6V3T9(%HuiP-RQqZ+hI|rm~G0MGYvbZe0I@WpFR$td6aS0bq z+`$-w?VbfyUee>00cX$I>SZuwsFVvG8#U`QZs&Arn%CK5n=f|%jn+G61Jm#SVFfz= z*?#z85Ra-cvAJYf=|%p24nD?`O_*R&6`-Zu`X-L@E>90VSNLpc`{74D`ZEhhUI z_xZ(c9J?OU!+87Zd+;!xG*4$$>%j(eD9eZG3tMF117$}It6Gxn(hL+30S&ITHacRA z35ZKwuGr)of2qO~UaKTsk_nq15!$B;p&ZmA6_v^~%7Q`MO_93`$i%RRV zih!B|XRXlqsb&98_uX*d{~3(i$LqHvZE|A77KG-KKcZNQ^O!y`NLJ?#qWuBATA!HJ z1!Vl(fgHA825+IBU}cB~KN<+_aPTw*(2LaHKTuz2`8nO*rEte~=}w8HlM8vsQfnY?}vj$Lc(vR^k9^3tQ&Fu_C#NL1F^ zkMClKw&8h|Yj8XQ4OrUTmUa5czc@0 zPljHYU3}CAwP^urMa4DewN$1YYs_PsXQN|pS}wb`-uQ3u-3~IeQr|(=n@PrbE9y*@ zP;lS+?4jo7grU&sw32OCa&n-vb4yDGfk464YlRfy5kGQO%BEn~1#=LGnRib_?3yDm z^|1T1@w@L9B+Cwq&Tc!S&OjF*fabsJHZcjWV$TGtoTv)o4W-uW#)7Q?_HGe7HJh(v zuBS6qZZ_E1?q`rW#lI^zr1P$pz%6@G0-GOW+D@nK6wppQSgNPgfJhc?!D~=HDKHpZ z8W=Kl_?@Fqypk%6;`GYukG{x@Jv?%S2sUvNK={UEE$?o2>a+>i-v>?{JB z&_Lsjc+No3ECai3jrE?m0Bdb?LzRd19HC2z*PaGbvhhX8X4=+AzUbI~47$akfcX(! z!zA#O3x}++0kHFtt%>VxEVt5(?v-z#lOjeP4}liao~&pO z4LCdLqOJnhZSOV)P*tM~&6JR_z^yc+NWTyCS?+wHQOJNdEiNNlA&Cw-zIwfG7Ro2? zlVdt5rB8=;C5OS0IVO-5NKw=+uZctn^|`UD){oq9baGP*0O|)paD0R6(-nG15 zxgm*n_g+CocUb8b4{*VgdoC!{)ojvLIkvnR*Ty0i34r|;Zx1V>-pOl|rUe%U25t5D zX@bDl6PmXkli9Lx{n>4zV&gwPFQo!AYe!cXt#ZD2sIj>pDB$V5WzM$d66We>SFl&) zza&P`z`YjQH&l4sT-iwIo51aFN~b_Q`J2W+(C2hCm?-Qzb8Pdfg+wKIT<1|9AI)x{ zxVD*}U3KqGa`)293sLCGJJR=O<$%+Fx=Ua^oEr83(2`!(nPv(>z4M5MA2tX0TU-y4 zRnz)j?HY&$H<-x5-GGE*1MgItn7G?`Rb^>McoS4# zR#`>6%|}u9^Ia6Zh?>^9o1~G-s%MSt! z1Z~#``tl&Z1lU{r)KmPE*SZ4+z{R#M7_|WHuIMQHI|a$crI3sMK=3PRH($Nj8m0X6 zpogAk_I;^gq3*>Y(d%cZyUrIr>rkd9fsf0kSR#zJ1-&OFu-q}V$RFmfiO|n>6l3Xt4l{H)S?MWPoAk4{>QOBeFywjOIR-;x-yWas) ztM&>l63)20yq$!@=`SQ1n^>pJaEpWSUye1W^ce=N)iO((8!R)kw-)_Adv9%vSc9L) zJNA59L*z?K^+&wnKqThZ_xDZ)$UywiZXEPG$LmH3&UuLM6N~DTG;e(yA%*P>kMo%n zrq1*dKrDlf7ejNZ z>z3OY{7yfN?#0s=s{OgCm5wn=n#gvKUq6T!urLRfb*FY7)8^?zXkBIpo8*!uBb237 z3)db&>wjBVivAqV5Ldn(W}UVef?G?fNsfa3S+xmiAVJzgr+C|Ov-@_r%LjafhN@}8 zC!KpViC(TZ*!)itGJC~@!nuznV)~G>e}^8 zYyL(#pe_ku%?jv7`cNN4zFW)2k|<$78F$V1*DBB4VY%E_?eGChjeood+YXDSB)o@$ zDN8&xU9{UD7dB-{Kt2J&U07)@BGT6+FW+=HO3=)!Ku7rtrsiIKjV*FRfFL3$0*KTv z@z>kmlOHd(XCjxP%$Y2@i#bakspHSvwgh7>Wzp)fd;v{c!(QowiFia9ZCp2%=&8k^ zJrs7@GLT)Le&J9CznkTe4zK6!OOi12OAXvyXY=K->w`8DWY#*i*fUnvY+cNiSrr$D zHwUBf905=o(g2VD^}*uFojY}4e?gw!hL$j)JSc;SOC^ zH}@UfdS&AMxcnj%Q-ZbUxb-{7QAdq;{cN@e2vIz{gXseE+pmXIl`U6Dr12MZX|6)& zHR7=6nU##5zgX5T3l=`skNFH_YyFouB@mk3zWEiMapTQ8?TvvBM;qgzaiBD{)}g&+ zS8mxKMZ%VmSBJ@-0_AY}-2Bq~A?zI5e9NKe=?{f(FO=?EeO`Foe9LbuL_6>IHuQCB ztLzFz=$zjd9_+7@x$qrbzAqCD1orMU4l}fOGu520K8fC^1ZiiD^NwOmg%;d{`2CV`zb55HL3jowZBw#I52$~KL z!3U=myYkX}{eP6Yp1Qj`uf22`1XP!uR1FcBWEqj zqk}_9l418Hb<@x$lQd4)8KGsK(Au<4sh1_J2w<>w zVjRd@5cy%hSJCUrQYE%y^3Lua9H#W1(Cp_NTKclZbU3~5pb1+$BhLkGQWxyPak&Dx zx0sG82NF6TRqkpm0h^UrSM*jVTm0Xa)@t}6u;ZK%l(E*WFhPcLZDERj8|p<$4VF6v zx;sdkvOd*tylEngCW(#vi93lN+_&uvp?K>`)y>A`r%7X(PA1&FtQ_}|X>S0v{OlvF zuTqG|?sHCjVyQ{JZ;Ui8t&nW+{$u`h?)#YL4o38VJ|y z$DYk_u0YzC>DFZ|MunWjFmh>{b|&^kxlLmHG4;PF|Z@oi7?EzK9t>Yu<5yh z-!KyK7|`;AX=pQfpV}dcExJZy89Y--6nF({Gv5a9ZI0MTKbFc1<@hDpiJDv1_Na3L zvXHj|Y-H<(7U=2Z)Kzn`WD-MXIw1h)5be;K6!PVe5%U1sU4UCs3$&`a98P5gqQjS9 ziZqKM_nX*Su>}Py2NsyzeRMbr4ES*@g7U##W=&~sB+*0+soVhHlTU7SWHB15BCc9U zP=0km_IA@X=tfPNi4+6+tYRZu6p=tvI@I-5#tIN%o$R{C*HQB0Nvp*j003X{v@`t! zabD#rDgv)C>KGA7e zO{ESLuwzT(>!12A-OOvDN&q9BA{vve%1+=vJEop1QRhkm%@l7>Z_8^bU#M`4y`<@) zTF`2^pRM(&RAYmpt_pL_jJ^&t#BaylTOjHAuGLfoZ9z*}7I6;~J@r2SM0Wd*4~67~ zvlQHIq3-$!W_$?}sHH+n>RTPK(X*Sf&Hn|APXeF!2rrS;9y7~-;zU@WR z0MPZz+ufgQ=6}t^W}~uiEMi#5BQdihy^vTZ@)_K102w1rs6;@0t@?@Z2{~ z1Lvs1>KirM3ZbS>9s0aA{EXC;FESnP)%PxrV~HF>5l?P07ctdwJxS+*#mJ(C2&(F> z4vlsRr{NQMi}(Nr&Tc$8E(%3NWtT1;G?iNLPFFK@G$mwGdhPlQEQttej^E@R2;2=m z9H{wzqc{~l=%0gN()X&*v4r#4$BKDXN92`mVk=z$WU2x~LJ{up?pSYsdPni9Sqy`_ zV2E{M7#3TlmAP|KoplIqjm*#S41;Atm0})EpislU5-wstE8&fSXaRtb-PfM2JRp}5 z_|P4`h#;45nk~uVc27E-G1zW0(c$G9C+ou(zhPjBJq9>f_*GD$j|?D*_zC#{P7z4b z3>TqMi$4#fcw-oyC zktFt;%`Vmzh?XN9p{)O^jG^fqI}I-R^_;T^9a!m4UKI!HrVEn*O&djc)sNvT8qVvc z&IDdwn`3V_0t}e;k`M)BV)6T$z4_$_UuD*uYaAS_Kv3gX7l&S!Tj5_gDGAwE6lPK# zIO1q3wKt1Ad61=c8$Ca4Z#gWY50Xnoqg6diK9}#8UKqXTkJNrI{S>RSQzNDfhw-o( zsE?4R7>}ej!(a3On2mr_2jZgZ?M(Mb}*_a#U~KaOF~Uq*<3v zikTFWqtIn^hi^hg!6nLkzuC_{4A#P9Wt#9^jG97pSber!r>e5PWCZitm$-Tk8&5-K zOv>Q7eVX?F(z^B`?joB4`>-2a_o~}lF9d+0bg+skiG+)-yjkpx0hP6lzk1jQCXm)vAB`t9 znz0*SU}VS_88GalM`{xRUQXrUQ}j{ zETNWg@doAJOQoh|&~WjuT;R*G+iK*&UPI+2(`)s~M9j%?M%FSLDgOnh$je=h36Tl#91FM|u{T zRospAyAgi>U;pO=PL`9px3sSE9W+~Gk<)xk-Anm}w>9Ba0bj==Zm(H(voicb))kDN z@O*&bo-(5waClpy;h6`=KBI1>g(l+sN2Sv=ar$59*B~T{Qqz*6l(YBXWixg3Pf zK-X+c63abS+QePR7TVe1^?3l5uK_Dyc}z|I4mf85o}n%_Ji{x%v*OC~!D}^}=Pj4j z>0japX{Nk&UTPi57Vi8gSz&{v@XH(-XG*!z%h&AxEpPN6@v@$hr2Tsys4Gs0E1_pV z9u-*9_tKTN4}}G|A~`N=m}cZH=6IuA!Kc~{=d9i2N$Axd4e$<5&;E^EjiL#^zH~(k zjyg6yyCNtD=C9fGt#Q1-n|3SM>Jo)=*tch zo#g#3KWFH(M^~1i0_Vi0bU%P6wwP7N|5P!*i#n09Q7a{|4B91?z&t`rJ7?Ry=Sxb2C zji^zQQIW-8;>GE`?}LdHX`ihZaFJq*3CAxrVn}i;ws2Dpfz-FCiTl`UB{o z-6@-0Vm0n+>u@OhuS|y4YydthorhAXP+R=al;^+%6@?q}m}w^&orI~fcT8Y6Q}H2o z!|hK`vI_in-}zlEoJZeNpkL0>F33P7aNW7!UgDNL&kZXdJ-qKN10G)y1R^1%sbUY? z%BO#p4)Xu>E0BzEHwbALN51sa#&lmC2MV7fEBRO+qMv*7jg2?*OF8^xEtzH(=olqB z_4{I=N*t(%S6qs}U$rhoTHIJkg=vqXs$bd6OCq>BPf}mXHzYTNFFJ6WjIF!G;#b1y z!ZUVHg-XBVZzgM`xQ#HOSOEny{QTJrwc&Lob<27%U7gSs{=rOIa=Ul(MdW^7dQ9_y z&rGYLzK1&FqxySIg?2~qJfzUdwsmdUcv~f=*Pzkom{7ie_Nn*&-|3|;b*(heeQtBo zM@RoRX>432MgsV0ZUYtJ*S(cGbDyiGZe?{DZtbf_$H{m?`ks<4hxUCrTTb5-fBAqd zJ~$Td$`kJVut$AHJOw-J&Vvn?bZH8{9|$cryh`fHAS*^%jEe&lCdU15StpIOSz&?G zL}NfyK7U~KCd_$7m&b5%$ZXh;Eg((WKq#Hyr5D@bKl^i``kz~$0Xjn)D`S=$W}Mg? zdg>fIu_-#cDO!qX`;@GeVFT&_p%RlMEmjZxDCJ8FgtGv1jua@Q-%x1%b$2h6Ub0PE zngjzHHdqENot5xf0t94Xa=d-r9Y8|aqI$@DiiXjQ%+SXwmuo8-5B_yE}a{R1= zgs@cPya?rR-{o-2jeEa+AHTn0*JIcFdcR-K=WEErK>L>V$E3F0wUU>7jen)Bc9Y#I zzE8!KYl=eVfCs?PW560Kmt|b7+bk$8sI|l>kx7M1F|%8Kr8F+u_mfY6h4h5%9;%)l zf<3M6;@r@HySew{-YY{^kDdZe(lv(XB_DILQ?wou)-o(mOp%D~Dd46xMV<_FEF_ck z$$W+45;9@p0^+*nP%KosUXEHXp3q{1j#mym??6y@|9a;L*kqREWTM5}4*SbLYPOtv ztmh4Go1z~Q+fI^AKF`!3VUVWUOrrN~jQFw6LH63Nr6pVjssF9YM$DYupH#Kgej9vZ zmvNa9mF#_Riv#Y%sdMM=AN05V^){u4iF4=KD&usPo<|)UOC_<6c)pPL-MrtRNo^kbz(DFi=Gzxn zil%TuQX}UA`W11J4w;EmR~4mAMO!*Kte;g&P)}M-dk~+09ZHvI%;Un-?f8meGhMuH zwyN>XyTE?f?SBEODu+jV{VropX8)TPM#4WGYds*d`A}wRF$B4t41Kg<^}tv`yEYob z2%2zU$?l*^k=d(muF6v%D>YcKA~AE}uiOJJVV;>e2Ky{rF$_L2Y;~rrs3B}H4otl= zg?X_meg3~oH?Ds$zfjT;L|Fyfye#a}0U4rp?JjUi4rBi5czhuKiFMi-(qrNuZbHDP zkXJi8wq;glSB)Ve9NdAoj07^35n{Bw=W$cMZh=xF3VKc-3A{zkE5c$~dO8j*N(jV^ z?i7G%>pyY*w1hmZ4;d74ANb8_{fn5aOgt8?JD{4PX|6X+AH=c@JF0b-CsIygP!lf0 zyK$fw83s4Tf6ldJUNUp8r2g2KH?|G#-D01&aWMbI2zQB_zDTV^ENn;Nj0I2!36V+CSr^1qSeUt;8ck7~3I}(2V zvoQG%IJ)DT00qH$8M?R&`r!-rtHr4VPP$-|ZUFB>a9!i?Zx~a?cVjfQy-1AgzH%UQ ziQVMbQUp?zBL@KgW)5bLaWiM^SQc=WQ}&v9K00#r8U3Ma_RS|5$3Ew+3b$;@mA|xz zy0ITyoVH>D$tZ%sFx^bx3Wt)e5(~SM#zv70(;8s)(kv0;H9AW;_K}g(e)@B#$Nf5N zB)GD3^5*eJTmyv(ibw5fIKrbgC!+%rT0WzA20b2xouqwN*#X_Iyfof2O`fPN(A8;sn9APA9o(T1#wweh zDF!gBrzJEx^VmPB=>apz^#f*t7UxPvaFZU_fcK`?u5d6?w^n<>r*jRVFi%~`;COhK z*r7YZLy#He^oa%QMm6i7=HFx*wnIKzqs9{YiYE6W4z5A4yj4m!T=w2huRN>B`S6|+ z0j}26cb(te?aD*RV+XK9wuDB9H|q?Zaf=}{YT zOxeBY5aV{u^JdqD_L(Pk{MRU9{#ImD*snKX)h&39k>==*Js3vFH3`dr7{ZS&U6`#$&h_3t&%SmS*slb%xp zV?X!(@6YP$xnFP2pX>uIefL^_F+1hG$dz(2V9GYvswHgVVkbUQso438IGK4fs?C0m zOA2Qe7BuPKNaBg&N7hd6{pZf2Z~BdKGcr<6ySLsqAm&)(X`RJ2uAj@^VZ5}<$;|B0 z3E@{fVPZP4KrxDK0dQ~cR_bh*N4STNpP(4+)=p^!n*wkYRLmhW`?NNk;oI`U8#L->aLqE^<@RNl-}ia6B4QUy{uSAMzT|dU2u|K z7kNwxM7t1Ijv?GC{|qAwRF*SfWAJ2TkWuUG*rBG5V8v4awI0Bj&N%N17A*CSvXbac zjN>f})G21`ZsNA|R!TRX%Uw_l_=*ob_CYVQy$aV@?x#L-uTbM zp4*At;nY^aby5qR5Hqws>Zq!Wms--nfRh}eLGDRwN8zLoQ1#9VSvvSy!LeaH`7SG%wXzM8~;QJ(oflS z^yl-i@w_IZ3#^;}y$(%yXkj8eX+cGrqHWVy5d=v&l8xH<~xpgHh*$ z_y5|55<+`Ie>_}>Fd9r~fcI$TN|u$GW_?+D;!W~DuG9$-ACmALnJNgEPSp%{T>(=F z2++WcGI*&WMjjUpb35P@Vl$lcrk!>6|DWwlWLwZ3|)U_C68f_oO!x!YwWu zWm$@c_H0mg+}?TODy1AG!-|lFu-BeGI_gqW;R>Pkc;Z%lK@OozdQLq01Qk7xL z{~F@=w0_-3#HEpiJwSVfZiL<#@G8RDZ`H|}zqf17U~Xr0VIf!~El?vuafsNPH!dC( z{bFdH-ORsF&z$&TenPTj`Q+7|-PpDz$k|@hk)KHF&LKsNE-^)Zy&m(J*lDx_n5hkHv~mW2OnR0Lf)+I;x`isNn%dGoh6NoF)# z{=GH)b0mKkXyvqfi@mn%xJGB^b=&f=Cmd>0CIGY`e1)$T0?Ik-a`f3SrJ|~F494Kt z%-RKR*FyGppE|0$Wcw=J?xc*u|SLBj#t%LT00T>Sh=Jz9-rp&N>;KEMa*~+l+O8nw&C=gHrEw!U| zrd;D91NYb0zQJDCvDhhCe+u}$rV5J#7C`+A<#74gG$ykJgh&PpU@nbU({SX`iOli z+@dLqU7@ENjH4?bDoe0Aukir9#UB8g0igY8*!uY6RE|S$I_28F=0r9+QOUKlUi$jz ze8F?%PGdb9*8_(D^8k?E>op`@1OT^xOTC8s-2k{1bz;BIoAn|U(!GKvRcqd2Q`sxwjDb(qO(RK>K^6ei?<<%3q?-YS+|{u*T62?U9r~& zqx#UdDWMTDJe1Bx7sBWk(ngE22)&zQTY7c1h0a94GzaO^B02&P$D4zBw(ZjKt~uy1c*JH zcQMK}O>2X;Sd2st6gt08I$=ZaD8lxj+ArJ$J`2 z`03JNOp^6uwhz0jg>rU&`r!S^gg-owmxD_HOR$^c;m`F@A`V9%rDp}Pc}i{(VL8WcN9LcXGvYAY(ob_bn?Ytt`$>ijEEuG@!fmx z%2Ctbh&(oc({@UKj(4{hNI0l`IB_I?;?;S>7ae+9HKJX}N$dCD2M(F1zZJjS;=aym z1!|J5vh}1+%2y=&?g^&ozG~n5Eb>iw8?nceYJUUmj6Y#-v7cl277b|D1bu$!>XdYK z*C1K`;7+Ap^V0>3e(Ef|TwUaQ21`i@@&U$A$WuMx{uS)<3@7tb-fmN>p%oD0FypP}JJJRV8g< z|En2p9M4Jc4!eKRigrQv51ne_6XyTu1=gL7R;HCKUuFad<(6kRs4%0ON>21;mr@TI zh=#^7wpHg8g>`KfE6~NOl%|GlR@EWuX62@+MDMh{Neq>cJ@lppxOO2PyahX=TK7D;7eb2@{(KYLil}u;hmZ+h5Y4*o|WA~0U{^pOr z%61MKZ|L6zR|)}qdgyqQ)0^n!HXcW2GA7pg<{){M$hd@jSipsZ!UXzJIqb(r#pJX+hP(_DBqS zVU5&VCjH|I=-VN6H%QJ8Eke=ytlLC7S49}ER%^`l?A8SR3SwKivj}6BbFl!07DR_Q z8bSyE`QLw@>LRIZ!__RbAj)8M`}=Rl|0-JkPxMRL+9E{CTujbDuQ%ya_)G|j9h_M- zfphue$+0WyLz?nP0B72ehpr{h8L}5fa_u8aLe!w^bYFHF>uizIF`er^93+i<_~SI` zug>PSY@YomLV!EM+^g58Fx2_?Q(!gxUkFk+v|meAU}WL>J-|}+dbC{8781sq=-=9n zz`f!4w{ZQ1NJQI4)TJPI9@kEW#Wa`EuBo}+j*P9Y%L_yORcuZ@;5pFmH@~U%kuxe& zY0{=OMh6p=4|qJs`ga@c{aMA`Y`ZoMr|F>Mc7i@KZsWH{&I=3x^EZ3NDCI=k5lO;^O@=y(3((eukz%1UNn zZNKfB(A{}e7$x4F0}SxAAVVJwt&PH(i~)$E`@flD--y*ZD2W{^NQWK_4ru3bgnlGO zD|CqYkjL?6i*Q=OFMzO9lBRpL0*vdVW<(BR(J+GYTdMs%tm^xHP+I;Bz|gr~?pz)3 zsHHzZ^P)kj9Hc`C#*~;^J7q8+UMQ0+Z0j{h1)-iGVTFW}+8d|>8B-p{k-Y{=Wgcm{ z0ktS$K_A0T!|AzjJpB#0h{|Ait965=5)D^+Ze%CU$GT98@2^Et<2 zs@D{?1_CY$-8gzQjy}%QR)&Dgo*94Rtd9U4dSMaVOQ3-nDUytS_R34EA>5_ReHW=H zF}eO9Ked>G;@A(1e5U#eOhNOhUgHT*!~mNLrF=^yuZhFOGchZ8nm2(tu`@OQ^H z0-ymL9kh?<+3FAncF;{O2Q* zTcQzIiH;S-pO}rYiKO9(S^^rrRfP`MBGq3)QRQe!{_hRnUO#NSYmq0{F2)ctaCXv- z{#WKe>*n{5*z|{P>-J^{W_kDPZ3u4exnB+ICFi&Qh>KAO9Txj6m}g_sY~s*0Pv!h1z*ec!V{&sz5|M(VXs%$z7*?ye7^aC zr``R2a^Oe1xnPT8YBkn4{Tn6SLPOm)Wssx=louT-n7rwD$Ik6;U{X%?OPj>Lss(0A zslAk{5W|PqI?mCbOX_wqZ`)MScUAEnPUpEEcUhQxyvT@scm{1u$C$(-;{3lxlJJl+ zq%4>y=NOk*a+H8{2uU_X3bM7LS&{tzgVC5{CI2b|PgKJoGOEooT*s8HQK1&yR0AL? zQq~!+WAb}cVwl`5V5b@<@enQ4Tv1NTpyjii7WU2-4#GO`;cZ9n{V!2!Xpc z2I5$G<{;6L*PZ_iu?;}r5-Ju}T^4T=^y%6Hn)p0pyWwGwU|rAdTCY2#)jvzJ`1tZjWa97mtIz?NVQ-Bn67g(u>gZ)sO?P-%&)Zj4m&;gcDa;RY?&bZ?7bm(8tszZfxOm@G@lY8fv2oWOf1J! zdy??`W+^L7#Io#Lf{X?sBsPamSmiAx`X@qo+H1Xft$LLP2Q6!ngH8M;W_D`ut#(S& z1~|U0S8F@8`?jZLz9ee`DVTC6kQkI0gknK{kBy0I0ke=r!b#v-8`Aud)}*)z#_{Gs zWY0(xHb8|AzSfIQ%QM47rxE=e+4Nz0>7tBkU@3n+Xu$@K)^dQOg;oou=WiiAXSF-5 zNlWrH$EXq>+MUSZXcS7w87$S$RBks$M z4DQaPBM3t)QFKTw9_Umcd@_f0Gpewat%nhlY=ngz_}_&AYg1frkDmJOZK}fF)&(!6 zJJd?j0fH~Tj=n`9-K7T;*0k6~V;ak%Z#EMTx8F_XtM2xssSyKTluOF2&o^b{+Bpjh zV&lJenkroz9kuHlXT3W*MQiMs1~Q$#PO)d9uAK?LRq&4+gi-gp{um~BbR8CZs_+E7 z8Ze?%A?$#8`}b z^o8_Z02K*VBr_49nVf6%mMsSBCC0-oXzfQVQK#>?ZCgvJ{}2f14hgkSZXZUzwqJX` zsJXL_gNjvF#bk+y&Z11J=QM&Csn9()m4^B@+t2b=A`J?9u?Y$nwaFCd*Al#_B*us| zyp?Fx%%;O$C<7F1@}VGfAwr&vJi|kh3lI(Yav1$dSz&J-=PKhw0z`!G4Q~lB4C@xm z_t`S}K}LED;|7z}z`pAYdGHshGn0{2PBd8Ch)u>lR~~Sbv9p#e9NQPiv1ZQ?b?Y%M z>*cVK<^Hai?rmky{<8v3Xoa$~$~5vB8x81Z*TB~9JM}X6Tl>nXk$|$80|-GPU8(!K zEs7+F$|YoS*cz9B;E1=`jHTcs96`F9TGPM+IH(o^0yX^As`L$R2gfqTE>F?K7Q4sa z^sMu6X8?p=AlUa)hCK3PIznuGuB*;Y4C{jc)Eh{r!zchwH8?TNc2|K-lIlk{w@sqv-sr#NEV8K`n#Kp{0$@|8>9GsZcte7uc!B?Y-P8Oc zOb`oL+1+pY34~q#VvyY+#n}rmIm5FcY&f`POl8ap`)25OGW!&Xj^{MQ~ zCFZm?oCOb36Vs#~^t2GOc6g2J*GpdrY`Z23X-yFws8(PDUdKG}Xt`{9jJbWiH|tci zLcIW0fbm!LmY{G-)6-|NFg?#JJpI*m#vOe$SM6T6=dV#zQh-43=l2yWre33acXC34 zCEAK791|P;|)=awspFZ=w7nBL;(EPcE$`vSkZI6jPAjH>?2Gr?04@igffy~`6KaU9>odthBw zII#T;we5|y`KU%OYn4Z52-Mk!y5yP@1!Ha1>%H4CmMZEpI(SzE+c>kP^bDI+2jSb|6cwWw_(-yuYRis$|xYJKq%7$8TvLWPDg zNUhV|s2AXAYm0@fPFJ1FfG4Cv9BId=yjds$uni1|3*opLwJ~Or5g>q)4E6pAfzmU< z9|MSpc7(mCpc^L7z@ROh@sCosn#I?a(5{yiCrucg7cmA{0CY%;za}r3rC7uztrno% z=a;XRqfF)Axn6$j#&@g&R$h_@+4B%YnD|6a>e2?gW|?PTDo^28!Ungu?5TS1z3D6B zHQ&V;SUjl@c(;@PQKA0*Y{fI?LR}!BdzY zs1~@eFl&KAQ#HbrS=o3HwN`~bVh!pK;;VXrE@)391l;(_JOb}2(I)HEl}@bc1H4!q zeeWU_^j5~BE8+R}z4xKwnfARi8VEoOkQs*(=W8kc@}i>(f;&)rGDYP9*g;-9*Qbk+uQwM|%XK}Bi=*ValZyRQr~~ak_U{{wLZ;;aN(p9Cn+?m22=ff#)FHvT z5HS^62KXi=j7}OuP%(510Objzb33be;2+*0ePE;ZDXRWXX0nTYZ-at~I*AwvDXYb+ zFsFcJVM{T?YMgHxRP+s**nz0ds%HvN+q|Gabq!(!$)45U-V#O>g+;a#qJ&3Q;IUkK z&KJ!Wq(9q{CO`(NsIG909yYZm7%~G;8lKHqcsVz zA^|Bd(4m8*gYYTG7*RU11F=XEYdMLChwJGexKV_6=yuqs)Y+qfY1{c>JX~r}vY}Qk z5F`gJSTgonV@n8lsvzH|1M=yUC`xqrJlS=`p5{{dE(2i$#k$k<4s}Z@)}XUpQB|^Y zf6LZ4oeAk9S`iC^(jnEE-D%bi#3d%g^IKiiOOPWATD)>C=*a($>zT68GAKsht>F-B zI3?VW^knI28{|-_-ZoSmsVc^${h*P!;FtZP2bVC%!&@V=P`xsP%lz}J((oHtlqPg91Q_ruD51Cf%`|1e=t~*Qe>D2hH zIA`0?`+bQVonG^Od+8}1;*s(PMmzVkw|SdxOo{It&!hbJzHP-bj}eoN?}8likyQT^ z7tBC`ksy4eGk!o)kn^q~ihh2Xj$Vg}7mJg((3Zbp`x3qHCu27ja~VB|Nx@Yg!;Yyy zrV?Ck4+;2=jCSd(przH?f!W^a0E0So?0#kBlZVL- zU!9OMKvYd4Ss-67K)*d~K(*T2t?>i(Sg4 zeU%*Hv@CGAS(48p-WCx~y{G6ZD?C{auJX!*zZldmM9?fk%QC-7x$(Y2NtoU~yQSx^ ztB|1pOo(4cmLoP5P^4Yx6x9+@Hi3DNBBy$>p=)FTGCPwRrZ9O)@uIgQj%GS?73kF% zs;eC3pt^ddV6n0PwLXHSj-VpB1H6)@_aq3&verMf4l*jJOLMQp(W#M@y$cwr&?V3Y zI)dPUp1u%SL>u*_1%IN%7hg0AM>(}$M!T#SGjVlM-C%44%~RJqE3f_tJ;$&@21t7x zp*0&fgNIY7E*invt#gG0MbK43R#u+yUlnOcTZgkc z9n|>gs@0BOQ)M&u_RaqMijyZU<7PXaf4sW#F&g9|R(fFqMVArJ18WpJFk=6c2K#Ah`EvHa72<>E z3F+shdMitsg6IK}X2P=JJL`>DCsWZ5s_V+%OK2kC(52RGJ9dBl2sx>|5Vfo`t&Yis z{vjJXnHmD3HaqvXYcA_v?w#1P#Hzqezt_-I28-i8M>7uiy?xlS@PQ=eCe4MmtZmSk zQ#>)Kz76TQnoTX+)GD|~Y2W5@>7n=9h};RA zDiF7auHT7W9QAKAsKWgXkw2(VV#_=8+J?^UqIPznF1yCePmYkiVF^`a(~heD~Lj$>joV zJJ&ImTRLjRx1HB%a=`K+;UpwpFqV&Sf{ox;i-25Sc7EUVtC_hlI(iBEufg8$;jgFqR$~mko&zM$9BZS&FeQmM+T~Qo5~MHYUBxl@Z)7^NH$%? z@4Ni^n#umZDAWTXAL;{>19lwv3yLdP+Z+alUmF+gEJC`Nw?{$dED$4dVH+O#eG1rn zU>!=n<#I+29-_?V-Hayb$0j(Q+(muJGZJ!7+X;ny6W6$0<@ye*bMaAwQGq7A0Ny# z1`rqbBg{lShMZTF?;g6F5oOWQhP|#flfZHodhE=ZTZsFm{kunBwCUp9tQD#EP;N`q zsA$o)7Oxd&rJHp3V&{b9d-M;GT<5idxWMc3)JsIP9#&6dg3%)1&#fT!S**5oSqq&X zlzXCPv9Dm=qin!d4qR;~4GPz~*?OrrBQe|^=by*;?w}kI4?DQaqC4@JV@c=VfIC%K zP3xI5)C%TRlLKqg6MKSXz-C(|h*8c(vk+$TkT;SW)ET#n`oJhm{w5@Q!+T%INv{PL z=;Jqu5DvIOpsjTcq4mu3`4MsZ47UO$EqpY+PycndVMTf8Z@30E14QYdn)` zJ#4fo5Me1#)>*IKv6A3iK`K5;e64{dNvC(W`S>_2%I92KFckIDBI!J zp%7S*ru&fkO zVkt)MkH5y-Cc=q?(%oOLv>O zSJD`L8F#53p6^iMEFKW1jHcpxfzTEkVh}C(*Am2j@7RUaN+A?fYlYlga+?hyuvaMm z71P!HaVeIer<&!Vd!OufSv8N^_(svc+aq@1Z0%-bnS~=>tD;2pt-WX~xY%vB6^Wqd z)t)SFs6!d+Q8g*PBEdIM(qt+!+S5Sq{kYr26*@n2f!gQWNXG_OoKj(l zQe(n1x8f#&d&ph*d;oxfI}rJy+kZcfs7r8^?M6by&trM_aP|7lu;fGEzonA$X726A zC;ayNzSx|C;};L|W9bEWNM`-bf%mGEjih?KU?nH-7h1kLhr;U|;s|7qs zxY{?Sd2Nj#0+IhD;|L$8Vi!9P@|zS)%T0_i?{fPL1A^V*;JQ_J`q(O$?IKu9Pfkwh z4I_*_bZ7sYv1wUAZS3z0*|?ou;%{LuK@wx9n=0JW3zXv3S6d{lGG_S37u`51zjD{| za&7;NSO=#w5HiGnsjea)&FsS_oFj*@^1Ysj*j2k>F`de9yu@wOIdUZ)pRXc%|#T zP1E|KJGzdU3IviRgV7<5_&31$tcL)?r1obC4dG2!>Sxs2bLo23?M>Kni|O7^PahpF zJ`~bCO0QX!;lq(Oj2&cLBB^^&d%I||)d%8h3rKaD|7^A^Sv=hn{+Hrg0|LBi({Q^n zY*7R2*Z<&WZC-9^qoQ95X8qp_C_Zwa6w%sGFM{|b_mJCGj?xim!E6;0H|Zp zl9s$(xZ?)Cmir~X3Y{(lhc`}s18NOl{k}zCjEd{Oh-i=q*RFcB4Y*BbiFFWnKtD%5 z0>gsQC5puz55u+7pcy8w!;+|YT3Ai1VP=!+0#9s^>tc?K4R>uoLviq2?FocbMmBdTYS_r}y!_D_eIDV+y|?OZ)P z4n!ShRS3+gLMX72OP>o*eHRa=Y-c>`DhLFkwIwGpj?GPgvW zWmrU2`v9H7zTSm1QM2(-#{)g@w+(^(DxE8=C605m;H@hO5vg#uLn^w_Uq_oP7n8TU zr-2N+64x3^Ily*t8uTeTvsVESXMwDkp67sn2WbQJ#?caY+Ip`DCiM6G(M?YQScN98D!rkIeyF7U*4zK z4vPVA?t=ODQcbW+Yh|Wr?06<;P2|E-usOe1+kI4Ld#yuzX8;haE#o8`x!CE`QeET3 zim?KQGX~XX@FG^_e-l2BHFL_MsS=is&c=~{wmi$K<$VLDM=U#k@-FR5uL8I!d%y! zYE-Z;+v`kJWZWs`RQqgO95L9r|CIl|>1!@1!SdtZKIn^=Bwe=A-gH63+W-Aa<%#?1 zmKgO9pTHN4Fu0%h92lt`%(_!Y|HNI*X&DT`YMl%iv~JpV{eIh5?ey|Tq~qX)%&>hf zJKr41;{Y!>627u#t0kwUqRFH?Qiwpr9m9IYLV5ytl!@i)&D!$ zL5Nc>CS4Ij>xB!*?QC2G{Rz}`8(4Xft&2_0NY>~;EH=2v}& z6MxG_{RO{7jS&iPIA1kbe9aH>fVzGkQ&D{KQNfB}^E1!Q*kIEsjt&90e#BS}n`jk{ z_n7}2f9CPP+5fp6WrH@~ESfu#UU*a;?9dU*TXgB=zaOcyvfII5KJOMau~*)u-|`Rn zde~q2E&wZT-Ejj&Wx=PTos_C0t!RQb`{-`V{0AAIz9D!GgH$^<=`Xfy@7h0i2A!+6 zgtzBV-A$dut%%N)SX6c(9rM_8Q?R=t*Bh1Ur~c3VrzcBnn5X%)aoP}}ld(x`-A3P4 zXI1d1d&>p_YYpGd4KUm7zrbE-?9F@#2Djk0}@T;sye(LOp!$Zo5zP<^DNL z5-3q=+SaUtLp-a$uh7jWe*T#|rjMJiqo3Vnm~{MD($%*4tDQ}9w+$Zy{VK>tbmWXa zEf{G)r2BoTV!Je52(M_Q2eC1~OYKbn*FL7nZI9zX*T$J6C6l-%OOJ27P5Cyvu|-HHqqmsHzI zmJI=17lhR(ubH1G;xj?Ki>HyBznX!-&stluP~M^&no?Q&L12%1n~9{hIK%El7hS?` z2_PBwXMT0&_uWu$+k>q@T-+!Qn!d(}8#pp_$fCWj#8T!UXfqBE>~*Li3B=OPtr~3+ zDS*gc=s0oY$X~HRr7hy1;XSTJQhkLNN`}gqEdu$?R~s+3ouS7-XtN0%wjf~qmpPT& zzxL@x)DvKJgns{M|8snWAhRSS6L*qsLny3S{T2V{D^aEDcegz9cPEM5BlS{~4#e>m zA_Lv-0yOt7C%@yD*Oh}1fKVzrMgjX@gGXio{q`;+rZL;pDE=zv?q|T66Wm4u83m~YdoHqUj3;C+)d3~l7mgQ^)}Jm zmRr>g6U*n)h8BHj(kwZRpRMIs_VwH_9#&n`4|1eDj_8X&65gRLf#jm&yd`-0|HgN4 zal@y0wJ7tUzWlJhr+GD_lR^LXfZB>~ijUSjEPdu9mf+A&Mk;pK7Voyxk=PZl!(mqc zTbepV{Pkt=TYvYy*|XByby~mC;mIpc1wgD8WT&B#wUj>o&0S@rH?z_>elf2AAbC@p zZ_Cf8HDoo*#C64|~|ja%3f|6o)r?W4C0Y58D|@_-)N|41|;F zxa$blxTbiDcztqeLwt-5`bBn$7uo9)1+A-kFe8@#2ti~V%86qUv+*BSNXNiu5 z#Z*=~J8J(#BA_>W-yHX#`|?2Ec2>3&{zgPXv)3R6fLvER@3=Rrwm77~%4~j#jcosJ zWl5^yScbaVXr0ZM-=kZebRJZ8-R0>m^^|1+Mg?#P|a`F_zZEPS14i1T`qO7;kqZsjMea!u2lltp!Mscy(gQ8ex&%(38$*L~Ro1 zIb5^tDUJ+0DW;JjK-#?qBms0{Ef9dSKRpgWB7-|V0HGZwtDY(Qfg%S);JqtHvwR1w zaFf3MTAq9pRGK4TPAuLn0Fo*Pr2$XzF1M!L+ME?P@v8QghLf$=pGIn@(LV2e z&x}i4PUnoloy#R%Q7Np%XBQh_U)s_D7{Dn~mc_)7hf*}xuLI_kHYPvxK|gSFvu`Wq z9Ah3k5MR1FM+=Q%_Z%+Pe&-q0p1Ko|e3`POZCx2V_!fz_$F~JZtDQg!i&nCWjWcnf zr^DK;aP$_0sY0epU(8VXlto>#Zc$2V;kbuLLl&7dDjikA1}%V258+q1Z?OBd9ZTU6 zn)kaSCvDi6Y`eo(k*7TI=j{?FYNp16hv^329@Wgd$`Ta!9B9#n8KkBqiQ@K4hGpv^q2)jD1?16&ZH^ z&$HLop0AWR>73Dy88MLsMN_E1^~?3fo5sBtWx78XhI&?240<2NguW8qdp2u9Rz^o%UA46#F_MyH zyvc`#&^>mNVV?`VQn(*3Xev8d$*}ID%Hq6jKqI@Bdm?fC(ghZEWh34Q>EeAvAqcgn zN%&Le7VpP|RG=rsE%d<3U)i1cW&C)%D=$}Aj!e@8jz>du$lit>O$6SI_p6;^qeOAl zxb#CD60L^!S+8tBDzZ(feOFA6^d2HEht1eUYwoT~ivkzY4STA@X>&O%Kbf@sH-oj4 zZ0nTNC-5Fe)VQdfG@;b@>2t6_!6&2k8^o6Axb`BwcAqb2kx7Gitf0)9_H3Wk+L?YB zh4bSHV|sLJUhD;X{yl_mT(3OvnfiK7^G|h6b4}n}k6UJrPQfPw1rDbzwohDh_ddX) zuLNIy`pbq&nmZf*Ukkbb;iKpowOPI02f0W6mh;59v!l+-c>~3wJXJSTubmi@cHYF! zZchi`D29mwsnzVOAxL=c?Ch5+Fl0RxbVuAA($tDuN31IgO`F4GZ|TKFx7t|IV?Dko zn^x}p7-||@a+~<74SzWt2pcpD5tCaV?K$~qBlA7StdxY{OX!eK|6bBRV@G>#D~>Dh zM7HSb4tGu7znNAMFqRF1>CH#@ z0CNJpdLD`8uO_z#t!5(}>h3s9oa3(&_ME=`RWHvg0ya~t;$Vb$;+y%cmudKbCrEhN zM9JEM5@9>2WPw!ux4Y?1P^NW}9i*0A`#+2TD4jEpG z^(N8ar4uFD!jenx;I;Da%UZTvG?o5c!cGo3{Na9G*wm(;NWejW_M2FrZtMAe!1IV2 zrpiya+O6oHN3NbIcFI1=WIg>dW`%!J#$?59!8T4p1<%If9nRw>CrI58ph{AhXj(M7 zJv}6v-wV}INhoYQkN9pskJ)(jbVz~M)$Stzar8uGsz%4&^(S%O>@a&<4-e0keqcUE zh2nnhJzr*`7S{}mciVwhT}VIv>f<;NR7jTDHGmR?pB;EQKOI#db*}wc6j+=_D_J?S zvi@;d_nEv0R-YewCLQL((bL5%_^4~u2T*p>wTa&a4*)y0Dw+*$8<}~3SG$mQoKV9n zSS9H&8XVew_E6(M^4flkA8#J}8RLY2i<75|Z-ESLaHXkhd(y)G&K? zu!{Gfro&dYBL#YeA#LLASwGrRU<$vmz7yZiFG_AHez@RYw`X8Rdx<7pA;!Xh`E*fS zEeeDG&Dje2+7%s@8-UYDrtJ6Vv34rEs@z-eYX-p_epD`tVyeLXw!;!OK&_Qh6BW8# z31qkVh-mEa?3Y(L+JXeJS0)7gL7akjZOKiag!gsX5u32G-6;C+g^4T>OTu_CS()vP z{ktLaO(I&*>zguNmmC=%v1d?@)ihADzA*39I4tx125pqy-RrpaBvbUdsGn#@GpU)8 z1EixGI#V$RSjHTOd_-)Q4$E>Pnd`l?rLmt!rm=b)rzgt^$87XJO^@O4@D67`?j&92 zgdAWp2QJ2^oLsiZ0Z$8ZIm2xogiw|)UoRlrZ8aIE1ZIWbKON}XZKt=T^Q%HDHIp4> zM#AaKIs2i?TbE2AynTy&qg|{H8%kpoV zT~y}U>+#gsGgY%oB-^JuBzQX~SYo3&3K?70UC*6m6T<+PWp%d2a)5eDDH#Y%oRRY_ ze;1E&_Fkvv9>vrp}P2hc4_@?oT~T4E~aZn_QE(A zj?iz1N=%&cw&)?kaWyeVvO5x02^kh!&BAHjbpVKuoLYy;%2GCA5D-hrLz-Px0c4yS z3c?u-a4bI3Mnja?LS{H%x zUnju!`;PtHmWZ$DZ7Vf=euirTnN=aR#_oOtT}6d6)+g=*MB(w3rXr7KU_*oPb07$t zZlmbeXT~upR82lB9s+ZJyR0MHTdPX;>5do12IbRZ8n~uK>W)a=VRk9uP*kK1HpT2G z4`adtu(l--N0qGHCLf?B^Z@lC7BC$}3xXBn#q4OWPxmf-dsqhJe}gaWQ3dpldsXTK zLzVVn!(#jEW7S_HG&#yG1}imPTdbECUURPtjeZ@9V0H_KtZUuWtf;lEstcug0soJx zcaLka{~!3T>)N?iyS7%X^H!_Yc^!1dwOZ$cl_V9`iJaE~iJNQdv`(y}idcjYhETX! zCyKa>P`KSih#U7JOy@~^5E?F7ecJlqxd!Gy5Wv@1x1 z;UgDVfys@Z@oc_pu%YwB<*KpteU%qCJ-Q$^dHQHv{K(GwX919+9#U2V?Hp@3&&BfW zp*qn7J@0Jq3J<7eW-|-Fm->&@w5s!sb&1`g0kECR#aiw-cA zePAe4Tsa=@xcX3p?(JOq!ORJcQjZ8;>!htbUW7@1I?#T48pg6&#PEXsXYSE%9%N`I zuI4`vUYlW~_*}SW#kYs2C3RdI-Su_YA<){llICVG3VIR_g!Df#_sX#>BNeF7*6@}>YGZ?L)`+Hd`NgDp&S z_No!hYX18~S{+*p+FNGkIAPy@7$%q_nAG(JMhkz0kc6(}glQl%q9Bac2jeKYSd2s4 zD*UTD)5VdY#|$3~?1f!@cJ_P(IRci@jR|r1FPYYJy}CqE71s0u*5C+Jvk9`dm1HjchICAQGTMB&o)<77e#@pUH}lz@up^(<$HAJ1e<8cvb_(pLEkZnnLsuM z|2fa^;RFOKB-oXVUh-L|vi-B!J#HK1gs?X8B1aWPJ69E8$`I=XD{9=kn52cO!->xd z3l}#$=cYMHO<`7vlN4>c##4GuvG!~d$uSrv-e+K@0-K8fN86TbIrcr-wT07kd>gnk z>C=s89{r@>e?X82BC)UF$xEV2!)vn2r1|GD*$sagcuxF%xs#1~g%bP+cm=!2sL?-j z#q*k^2VZ%=IiY6dD>3=V0@nedT&+AaZ{BSK-CE`K->2$D(#6>8_xO2(?ft@tAJ|26 zDOlbOS+$3F_htnI*fLRO;c+dj>bTB81$K=q_P#T{#mZ!QQv1WDC(p(byjFkb86Hxd z#q8tnl$@VxNC}harTg%)OrBO5N2V(WPBU6Q&7ykHWl_45+kyD4*5e`5C;D!0O8+nU z%#*%d^2y=$Q>^x62u$c-cJH6j0hU!waBnl;X2IawU0X*Qg3}C-uT2{TZ67|>3BrnvCgO>h5R`o@nOby9(^rboqcL5YFAsoU8KU$ zJIa!3J*K`5ZJ8h}jLWn(h5~5Uj?QE9Tl$6n@;c7n659?;l3EK9LPOPxRUS{q4IiVJ zIRE{0Zw+0f4l!6Hi8do!84YoR7!j!D!q6a0K=aco{f5+!n^TP~nZ zgsqBCvN;j|!sKlfuld)nO@yE53ujJecaj{ym-M+0istNK#F%akK`-m}TiBTPg`Cd2 zGw-$Ro9A7Yk*2z{$a|YEQ~Am5&(D;9#%?h2GC`xuhIPwl}PWVa( zKDnLfPkk5q@vZjGSNhj7|4NEA;V-p!x!}aRQ{UuCyFAeNM>c;gd6Ty#=*$zR`BQUV z+8!e;0i54AniM&o_o>#@s$CzZ?B2AV0UVes_PWX|0;>;30(-j$T$@_WLUvbn=L|mn z;o9pfFDPCE09PR&4FRkG)t?X6`ye{|!K}7@LoE&3*torekN+4Fd&w{kGIYIb!Mt}8 zqOcNIO(HQ?5M#|nvq)1>&<`^cU`Mx^ERje=2?AcmpUh3T5Zx7{jqQy?Z`5TvKeYpM zjj8we8dJ48vITd@IGlW&v>bOCKxqQy84Y6n9gpRrM!tnc7bDaUnnKfobHJWV5~^KH zgfzM0%pM>)4D#=0cYr3lSyB6yHtmp}U}RyRnA6^E3Ox^;Ei#*JDpyME1WL;w3pfi5bE16OQZW*Inz*pEVvB0RQ&o>via z{Vad`w*bF}0>3;67}_Ue_W;sE^y))yssPsxgeU+UE<-NL=bt|Rvl-z9vWB;MKXsU1 zmdzoV?CAAP=p{3;TA?Afs%E!yd}8|{_l-S4TtKf~tzpLk{CxSoJpuN^)%g7ZIsT(# zuwTV}K-7rAGdIVT?01wxr+Ox`+ zMj6RerRmiGqtH4bv)e%>K3G)vAY)2sox!cru;L}@(zi@D-6s`8h{PyXY0`)DT?`rw<{Wu+YNWxXcVKJ{UTuqBmg@YGnv*ilc5r0bQb_ zjJ%`3tF-NvuO7V#!ZX3O`2{xZHc1zbT5xa7bQl{l3QT5Y!ptK!6H!6_-Fh4(AyH1~ z0G6FD!+Z4D@KNoHFOwv%D0hz-dGsy6CSm?;;pH9KD8=IG1_1XZMi9>zAsq8?zi=R8 zEh@O%V(i1;0jUoO$*iaStX`qsg>>YG4+7_buZ8`Xi9*`@@d*3F$!qxGzYpktqcck_ zqZNkNh5e+nt(%qF1fr5j7uV?b0Zfp_wt70wU!GcN!~$1VvgXIz{Abj1{0M&OD4V#y zlB28CWr`2>#~VGRiVh%-3jmS~t@scSHg0e*vxmD)GS(&a|0X$$({-FC$?-k*u;o5{ z)jwt{qLv|;iZZ;C&-+tpUzrl?E7`()wRJtl6APz}tB zxxX`*gACPdee0MEp!fgh#y-Rs);cMFx!r#b|G{= zkLZKNl9h%^X`J-|T5#Xdq5uv43RM`1T9uSpV4swaHRUl1#l027w5Pz^27X%t@S2I@ z+L3k1ao!uc^^*JiJbBL8UgPQi7RuC0n4NXS`#veq5Q;qud!wp%j z)oUF=`kBZrOJ?rsqBiK5*Zv-$Fv-p1DVKwDWMf>p1!iQx=n-zvW_5NfO28t{SF=1l zcqeHSA~GS0`WR~}wl`z6e0gfWop&fF0lEG?UuIs7F$dP9%coqZaN1KZ5z<9e`y{ z5pLp`4{p(e*gqqK zJg|4CcCQ`-hnB~ILZva6XW*(d_UI9)4rq(yTC0`Rp&J%w0qs^SK3S=|9k+bp!=QOV zx~g?Ne*iB(LaaE0e|iVzpb)TLHti6>nH-vVB?IK7sxgm)&Q64*mPE-|qmT z-8SimR~m<+n|hZ66NnxoEB?<6(GDAehL=#Hk9vTfQ;~C5kBpHo^7u$q-uul(Xq@Sd z4;$|0U0Ew)?pZpp7L$zJ`K|-Wa%=?z@6$0WnH>-pNpg;^G^pbD_o!s z4GkaY-RX|UBAny`@7kVU6S^J0P|U0hqoJ_byaT@qAf=LJ8o)?aM=(q!<_e^XsUc2z z^ge_#{#vUYPn_z6YInm=QApa!->_|2T;6WO!V_f@KAm4mkYJg}?!Y8!CIGd4du)`9 zqjyJgc(tvNerI?nwmW2V0PSZ1jg23+>(*Bk(dm6QorfI8l=_jN(^#PYSfG2lm>$XV zY76v{2J%9?O<+iavm3|x8o|)!bsjB_w9N+y6L&!kKG4P8TMWAL@7Ue z703ASQ=jG?R{{(DeyWrUhfukDfh|@{9aRTWq)^v$lsX4ECAiIJ7SI_ySco}VUT{Sn zXgJ$#HY?T#crd%$Y>H<-%!4(6d!hJ5FG8pDJ#K#QRb$M!Kg~K~Xz%jt6ev}7MN+HN zwQ_IQi(nH5_WY*+=G7ky*_RzWyXj-h-q+nm*d1#brVzg~d>UQG91auA>3LvFTxK1F zz}`LHdeR>IzV1d3tmoAN?@0EOR80oLdRDY3OE zT2oisl)%SoUl_^^oDSX+-oPTsynahuG(Stw5m=aD$ z#OD4mnJQtDXjrQS^Z}7of2AfjZW{Jcc(a7%%uuKPc19$KGpPDt>ju>nl+ zuHB};w)@HNn1X5#K-jOP#Qb@{0~AO#-EnM&jyiCEKo&Z09Yjn=3d7<~H}KpRT=8*y zNcE+qn{N>HVvLqQ1FBfP117#FldiA$wdld+%?ExT7rfLxaDwb^>YDcD^*_+6pL5?N zyzWPTZg1!R%+X1@F*^<|Ke=V*Ox3x}%Jd<%v^Oly)Z}T{o&zilvDqtl>`KX**d4mI z+1W#aGtY9X7SuhR#2NiTKQv&L4rfl7rTsi#>Gy$aHSG0qVDX)W;d8Nf+!c8({P}}} zpNeQ7rfMiY;XA5ASVdD+LUGaT%pQrWR&9jG$k4|UTCp*EjiR4M-bg6ktJsoci1Z zL*`2TKP9-L_>}xEkQ5Wg; zQ~5-pp0#LV{76y}3K)4Z)T&%5%Iu6Av>2N%KxEX_v6|B3q)9PV*Rf%HxP>CMt=a%>Io2U-3JDEqYr` zu+NhTj$6xzH){G6;sD5)jY2d+i3-puc!!__%D!$4G;(ypCB!c8$D*4Ur^k{&%ddTi zw$p3}@1|>={(pfcZ6-BCTK!i)@XVPa-sNpo@}Aob`9e+Mo89_`5!OlXXT;2%6k9Yi zQvkzem$(~3N%F{{Br3MBRZe{f@nOxNzpq~a*%_GSo7I3D5xYrVJ7IBD-fh@{s(%!^L zZNs=$j0719yA=6`&TM%vyC%1~7sy!uNyjJqJvY*AXv`HQexB-Gw9=^aQ}Rk<$N9zD zD}5=yFn4bXyPKPpzA8$anlblL04YEQ9F-FV!Gs7 z2g3)bHDlLAMoy&VZM-&5Ajr<9kC>o1gj`nb$>*BIF_ckk};) z#W;l__^D2D;hh+dp<8-U4Y*n|aSH4&3tKY8(8EVEAz+7A9Nv;jQD!+)nW2{}Xg3Pm zs;t%wB}RBC(2%B?WOEdK)zeAqXHGfP_b8W|O2E~1Sr}~&PuEQ*OV|zUzWTh|f*(kC zRs`T$?3d^Us6vYb_iV9U0MVBV+jO8wjtNJR29hMLx|->#YS0dyfOV(jSk+_Y(pyJv z(KA0bHMFD{wogFTr%yLOPhPIWRRCrKJl#c{c+!V&YAl%zL_hTIj~)_HcD7>xO9UMK z$!wCf-iDg5C>KMMS}`3c#;g-$6mn%Iqb<5>DchIQb4O&X@C1Dh}gihJ8vSrfk277+1p=?0Dam7}>>sqUpXlL4(} z`QN(6m#Kt2`7Vo2C7#XHTH0wTGE0CMN~Oe2GI=L9~`?d5h^3_ttU*16no&tw9 zF*`7VClah@PmmPpfEa1Ye;gk>SE{vInyT6{j1ygB5_T&gRn`*zpByT^0HfF}gC~R)iie|KSuCaJOrsp`qByIPZnS`O(v2HuEZG z8314vkFf()CvhX8QtLsK|NAh;99|RZ2aCb-(Z0Oq2M91IF3x7gB`;6AbF^Wix?>Ad zXDXC(S-GI*oa&kbT@U=NBCis#5^@wbJbxqTF1KFeCRmADe+!Z%fGl-e4`MkH!wt2C z)=F{qLO|n}m{jZ43&j`LpXj@FSs1x$tk}y`)2n(181yQ7p>wz(+(oQdD|yo%{inF* zw`xrwIDH*X}`T^pEcDAg*2wdRNxbG-#8EV( zJ&(_X>X|sZSs09HIj<=BC0*3I!Rz+k0(x9Z7qOj|a&C?Zr#{&x|~LYD|JfR!>1h2#n}Msy@O7;Oz2($|o)8`)!EhnNv)(K+luLm)mD?5hjuI2s~6a9s?sc06aUhI2&TKK^d@74K?y7; zXQ=Ki{9RfIiP$SM`|<~Z%xU*`46>R>!vjuKOdfw-%JfT_f{Z3^NP zvEY{10|}{a^*P69l7DthX`ChKfw4lHgQKmF{uw4Kw0yyO()`PO(9J?_u10skH2`_^H1 z-^Z<%dCXJ;{=>STgt}~m`;0f~~lUbE&QK%7boH%4O*V>|&pQ3E}c1JX1{D+&snJO@@!!_lsAZgmr!(yzfGSAx`o+rSX+y^x@+tni`2wGfWjS1q~C#GU=G(bUcNg#+Ven`_4w}VG2 za4A@%hG(wOJ|J)moWZ;2}h-E|rDl_?$TGVmn~=XXfJIy}&h<&a(*;1^`DNVK$9u%^;LfIN|ht zPv_A*V^w)EAbVO1rK*|uc+};j6@IXDbJ6D5Zhd!0xayLA%3|KG;Z+>ry&B~##YcaQ znNO^%in4c=%^5C(hr@2F(w>1S&nK*11>VaAu@oXGlH>TWzReO`c@69)z|B_#TTX&O zGJfD$C}24L%`B$6Zr-sNToxyK$pm6OgNYHEVW_wzT@7*1LCFC58iE1%P#7~1mh0aU z>E;Q5qa&F5BQh&}NLPj{*F-uIu$&FA9i?vfs!MH2(Bpz%i#Ke)NiEv!%-|ZB#{l5O zx@%!Dtde3z_8jQ5Fu%A3YT@(^g4&uP5>m*t6-b8lie4t$77*NoseDx=rrYdwYOX^4 zjp8cO5XF$8U>`l~KtxrpK}+TyF+oeFXL}xB_FRvFV7)_(p82pfQh$u6Js*vP#Du@% zs6RKSsV(sS>N z8d^3AJfP6bpALG&Qq@;iV%>&tX&u+Ny&BFhmu7T z;9}nv(J+(~tnWDOX=Yr-ENcNfqI0OnMr1m+#&+lBjd6V8Oav3c`uc;VW~_J7;yIFp2qOo zVF#mzy=J#T>*Sj4&yGI<1n`WA=+VY1_cx`vwunY_PK5z*ov@`w>~^R_9usaI?}gKv zp!YQz9X)GLWi5qgD6srMGF9K&(+Cy-rF7`pn{}|Lg_Wa7Wr30$JIZ$F-Y&Wc4Ak{d zPksvnZ(ER+*h4VUR6!3zjOA*hlGkgFGA2PL6B~g7^TUl78xu|{NHLROq@W`@Yp=(J zhDtj)Mp@Wmg^597I~g{J3$sLf$tMbNtX1XxK*me0Ea3Pram~MlR3l-n7YynNjyec) zTdCnrO6{uxa(y>&Qb6v9iS!9z)N7a1zkCz8F6W!(^YKdCi(R64yCiFe#j+)Gc%1`w zeVvn+u**TTG(cnDS6sTP#Ez0Kzi{_nVBIub3zuAwe7>~cR%fQ|Vy$(8oF$f+Dnon! zE0C8mk|6^xM_4az>R6`&Sg@T&A#yTk_c$Yao?mQ1EcQia?Cl?@xeT{F-|nMv}(1KMi#B8z&4-h+&pQ5dQY&WrZ?_#SRHOe=UyE+XjcpcD3z`)*gs99MbQ?#pZNpHTEhI zz4<3<7P4+E{1sTd{53c~?E2)#Be-RltAqB8VQ|xtB%2A~^CR4n2~f|mhir(^-Kt-I z4r)$YX?4@nBQ&s~N<`?E`Cr|$_g**arJm2cy~t0uxt{9;G4RNqR&Z~DVR!i6P@1{& zx|s~({i|n^Cbf6Hq4g>RW8j|rE@^>l=d$&1(dS+kW-GI5-;PW6WO>t5H`@Cjl>FMz zHR@a!Ox8g0j$k`#$9B`LlD#*RTk=g}Fj~R8gGJuq>DW(sZeoo^MD(Wv8Qb3p8qrDD z)$ZD~SK+kzSs_pF<;(fFGL)>4xTNoJz`HauC5)!p75QKZS%8~fn_ z|3!4gkeCZbeIL?k#HIz{V&gS*t>?I7(8PL~WlQj>b(}xFHTz5arFq$J+lTY~hm?D1 zYcn-T`by_22${H0MI(qOj$5scU8uD4ogthNZB$f9H|!t5whuxnxv@`ZM(X!HCMj0F#G$40P)$PPn^g z?<$W{w1Q?AzrWFLlfjh-6;B`Vqi7F;l)nyTzCVYdpm!TuHBrqY(UTe#mY$aep4NJ?pW^vnL5b6Qb-3;nA(L6Fz`BZ>JCZ#*mVuOsYtk? zKHf{{zRJo6g5bpX%x?-2f28nt5J1|oCv9(%wBCXr=WN%dd5}BLO zYfM!)3IiQZn<#+SK*k1K3qh?Sl_2}f^OFkB`Bu6AapHb&)H2!d`4yKRD609OUegg{ zk=v@Ei*x`KjQ)e3^i5OVtzSN*n;Vp4)la>+=x?V-`fp@TXFZA!J+?QZbiu&>PAVh% z_$Hp{l8$4r53JoF`^GrxJhGU!93Jv`dMCq+FC^|)wW&o=Mn=qI%i8!^?@+71M{J`h z`(aP`5P=%;tM$?0^O8BYm&dWuON} zAe-*H!8tiP)A(a1$RN}2 zLILq!*4lp4o}!b!&N7goAe^r!eQE?NfYn@?lV}}u=kkV(S*_j_LYNb*FF*Wdo3XEc zPj}PF6J}a}59^#c1!sJwxZ1<3K2v1s6L)Qr|7%Y*4)A}56G7h0nm$XI5VAyXclJs|&20rxwLr|@=a=aE0k}o9Xs|KW_GpAShxdcC;$1s+&I5MFd0x}V(OpJz~bSH^&K`QC{PTKO8;HNlxkus#kyGC zblEv!A&E`MZ-B)U_t4Fmnt@to$^&5zF_a~ec->{iubaW6jRbaMYp!^PaM z|Iu{|S)T{12|7k^uU_wV8)^yMtWmD>bj|&FkbmDyG+j$8({kU&%hXD7RGx-3*VR&X zD>te{Of+71e^HxFS;kQ;Ii@7 z@m&w)c$0PN#*TY`$4Mcs$MMmd7OBXQ)m6^pm#&6VszD$&|=|Ce( zEWXHf0H0TLQ{RUgX&CwJaqDj4Hr!)*F(+Sm<^3ts)Le2%gx4>Su#*v3VZX(FV}&_a z!9B3GuRBF7*XUTWv8km&l^9N9C zPV3!GZ4d$l1~;Y8ooJW2r;8O)2k*9guFR|bElK{5_2tVyCnSs;Ld??(mgY0?P11rM zn3yii>-SUMbG~p@qM#akb$`SFs^E;NbV<+3R18LhzsN z9~2GOV=0Q=J5BPE=+(W>h859FQy6r!@n|{(oY}NXdw-DWx$+H}5UE*{4>U4oDfxj_%*y?dniGge>o=5B@dixI6tyVj|tg z;F!+`3sV_#Gr9{6JcO&+{LMIg!42mV6*{$Kx$Ftni$GZbiqaCjqU(#{OOD6QmjiMhl-U(KvT?X#h#DO~1o}--7=y zJV{GHBgEZt+r8p=lIw*Yaaj6a6s%0X;O50^5B^+4PL*|+ZL9}YHDJtc04U)htW$Pc z3>ql{7gBjBu2z1qIWGWD?_;hI$vsYT@Ll0?1%ah0D`GO~c#abLU#DeJ@|u?St84^C zj!MdJQ**Lr)IpyyVwLIItI z6tXjnU_i!Fwbe)K$Pb$r6QpBMif4SZjXa0hq|GBfv-JI2w7Yzssn+}#%(|d2vfN## zhyB3q+Hh&sL6{3O)?8OM zLS9$;rQ&*6XmW?V$RJNRuO;(_V_!nkGJ5YJY)mmPd!#b{=T@Du1{vc@fY-!&IWZ=5 zIEjy@EL}^S<0d#{E95 z<@{FcQWFe%Yeo_hRe<;{z3i}mgwgt9RPaCNf#VVCTkjHI6|-)Yslb#rq4N_zt+}YC z?5zJWy|B4Gm~%bzR>)j`-TA9Wob6_Ar^M^yy+vkLb!9AE+Xg0pe&Xin* z_eM~JwpKHbYEr3d2Sc|QxejmhrgLi3M%0-e(1x1(SI*7egLs7tH=lcB@|=6XWCAV7 zsw%x~icd(`ru}qF9$YP5i#0kQx~5D_E-$-S@{La@8n^lF-1IJjuPZ3}gWXnklf*K)SieY+c}P zukiA>=iOJ0D?aEEvN)PQO3g-L4ehMQ1sd_8gXCnw_5ATeXNcwLk}CYUq70x2!?iOI z7A~7PsU2uyMl1LAK2pd84UlVn+qF&FpdGhcwwBRrj3gcmiTXS_L$0%H9S*f3J@Y5;hxeNtdzHR8OVD$w$6lA;WjaRImYvcgwen}3SyvZeHJXhrScR?>e)7-2J= z`rG^i=)3hbMoyWD&KSxi7WDlf;JhV~!oqqcQ9vvp!9#9{lBM}x|V<$6X1(|S^_ z0vj=0P*Pfy;a$A+Cqdv>ys~XRMFC9dNsc|~Upv%aqVU*zh_s9qT&7w3I?u%r>vv_| zNNe!Z@>ViCZfx!d-sBK4Aq2k@F^%3p@Ek5_LK-ty6f@A!6SzPdW^AE{3UUwDOaKP~ zamftePA)4@m6C}A0yfAzuJznxKwWOSdwnbyf}wy~HUk*W`AMV$yWoQop;%in5EL#h4?L~gP~e6d*LmEk;yXM6&Boq9j)iUx z4Tj|^G`E6cosYH-9mD1oZBiAxQU?!XZx;)z0;%0PvJQ5hlrh);u*SVe2~0&G6s5yy z5o#c|IC)6CL80*z-~eP$fgKX(p~kS>LeBVFV_{k*ahED@x-Ve0-70598V(*Kj1_H~ z!!Lr-GvuMWtqqJ&PJNZQzLi016Vn?a3K5!tQ0yK-bPso%`Upg6Y_y+-p8O<)>(M^B zm3BxQ?q@Zt8H1(Q`|g}V00%DgezD)EBssK4gF~|Shp>^e*#Op1fd5N@P3^ySA>rtfGl~d>i zl>hc`epK2#K4`2#**0iQ*g-^s0z~BAgeBUPIdNx-S!!Mpa(K94c!A*U;mr&m#sE>=KbeW1TM)v{q`<8m0#?38GKI=%F1^C8E2}`a%gz zjIVrTae&yC0X{E0g=2_qxd2CJcTW;%FcDdhhcc$c`_iRYL>#Ipc>27IAOM*OUh4Nh zV;N4DZ~Tiv@@xfmwAeKxEAIhzbr@S2X339{H>!}SD*&zGobFwOg-yfHckq`{*O?SBhDW1LY2?0DTY7gpUcSGw2cSFef zxy<=hcaG#&jdgI1L+$sO?6{M$nY3>l9nX#u3l{ptbrlHg^RuE$DywXM44fLfVq`6i z9bCM#(aCrs;m<=OvJ3a#OrvD9_YJ2`S8y6Pjmql=O^=Uvry9N4XVu<(xM@e|kMO=e zrqs9x_>q{HV=Z-hdBvSsSo9J#Q|g)x#~AtGQn^J{FZa==70pGpy2?81hNSkflbKF+ zxMA?!nAj&3)^{0mt*N}T21WN)Pj3N#79`HTgoZvL!JKn##s z36PT$QL}YjFuP|yfC-RFE=&SGD$G0d5_7!DGjmj(K8L|hJUOhd|BgZ2P*h83Kuy{( z+%}8>3g|^0z$usi{i_5w2JwfNo1Qp1dwBeORYwoBlK)0rf;?=Ejd%f+lky^2fY@=o zIxw_C2f1b#x_~^5S_1_y&byco-5q{|3CQ$&8-yLQe_%9DwGYLw3dQ>oPm~QTjv09- zd%2e+1YhGYPIW7aq?%h93{@$8_h1FAD^Ao{9dITpedf$O&c!~U!@L(!s8S!&V1QCoAd zva&XbN_LMb|1&?etDkO`_uMQ2QGbbq=JoH@uL7+AXjH42opT0p^Mbb(kYyHHvQTvYjlHTGo7=AkadnwS+ zP-R;AxHhdR_+zJn*jFVSS4>-1!P+N(gzHEd*Yo-3Gf1H`lC$ztYof}@-@_>Y3MyPu zcDG50u`5?C#Qsj-G6K*KMDKMyQ+KjyQTE-VQO4_68E)7jMeQGV44`It61w;EQ=zD5 z1BOWjq8NGysX)8{cfF8IoWpE+aPYv>vfajFD{7=+!~NDQ@mP8jx|@2BEhP_t8@~?~ zSxdFO|2}&GIFR0`mR?khv|1Ey+0EyOG4)le-2O`E;xxkPm6?RCc}1W%2;~)T?<7bq z#aM6LDq*o(RAMLJZ+Z~6bWvn9Vz-VITXo}3qm|3zpp=6U>j1`FU+e)@0 z1ONt&nZ>v-xaO9F`>w4SyC8K9d@%pcp`hbSj)LdI{;-=XU2rtT>-6&zR^#a9{Dn12 zR4Wf`vjHgxdSWB0#T9>&yrr}OUGLsv^CaeP3a!Q`+NV)aRfyA#?@PgN6%o?BO~E<5 zx_&1f5QwoTuJJ=5s93VIYt6$8$lmc2MFS50k`*iLs}l8J{So1`C%C`wd%k%W~_ ze~vC^%Up=^Q*|C^LaLltLCzZM43i210IKq~hGbdasqZ2^n>r3Rxc?E;>+4e>JRSMl zY{Sk#?cSDKfis0Fk~I-xPR`W$oBi|ADITYPxKRo{qQ)1U8aEy%+kaAz=f}Jr%{HOs zK*W0=-yUhce8J;u?Z2gkwz5_%w_x#Hf%$c=;hY$pZ;ZH{x+D-IE?mTLHpjEbvoqEE zGN5N&&X+^)BTzRk&Yq*Ci%R$?wAjsxZQ`l*2jbd_66bPPWZ*N; z6>Q0nD)J7F#l)-T*Ooi%Ua{4JPc2}CPNZ=0shOBC=cD(o(a*INtw2AIuf?QU;MomM zW*U|pEwT-bSy`c6;<65Gzzoge7u&8Y)0c0$xduWdiDN~HZJ%>?;#aj5F9uK#HzmpgG0s_BnCBwj{pAYx|$NS#3d-a*gR)E?M-IDhg3LHeB4HRaAh7oRk7t-gyd_WP4MyMUnjTS ze&g3{NTdr#6XhWGx)FBxomMAWIB;~ahJI&O^x1#!Tmcw!H84EZcrIBp%j$}ZvLgX@ zUhyVjac6yKgVqmb)xSIrIJFI+D=@~YoHrHX>sNGM4gIimKYU&9zE7w)#7ji(L?11Y z5;$T{Z*XxqN&|l0ly2uBpx`U;w=}y@vB_9eIJlQ;dhRE?UF?$AE1pL82Im(_m$h%7 zX+F_#|1SsK>8!E;&KX$j+sA7M1(o8kZR$l8weUbzN+aXPjT!w1S{r`FlyFO-!yU8t z8gDH_|v^cnbU~g;=xB|MySvY6ZCTedjYSG@5%* zNt;gtAgj)?l_$`V5Z+U!*=u#H3M;i_d;Uxkq~5Nl!M|PCPpepcQkw1WPsrV7zf}N# znCrFa*?Ex7sjlc`4K`>x-RngHb_Ttkg0{9l7iSFa_chx&-IeniPg@@QMTDqUht=AX z*2=61BL;-fW3fAivzqTXWVtzH!Pv-cn zc>cnvx=vQmV^^f&%jVARz*=?35>HX)+qk(M7NFOPxJ}9m?ig3wKEs%yH03V;BGe` zn?})Xf%V=-m#;N0_xqyK+ZC8TSnt1r{LiIzbH{kS2{V2^LvsNUu;@Kp`m9Kdq7}pXp2wJH@;&%_sM>!cBFWW>Ins zz2$F=rbi;%qPAnF6mHsmeJqyVH>uSc$>mP-gO8v^3`tjTfPUjfyQTVerwR=#OJ`#voCIuzQcueK zXhYB)ncsViLf z(0Ox0Vrs=(Ayl=$>FtSA3+e*fJ%@dZ$$qbVQLAZr?=T5F#MAXXK^z9pbp;GVZX+F* z5AaUd=i$t*Hy%qVYjr%9>WIGGh$Z)Sp$^L^??mBFrK5At3l!TPN19j{UxEDubpc!c2$3(|^>YlUMA_3jT18`^v4 zN-BQ7di`vaY3cnukQ0qNkaE3y%<#VF0(!vqUs>-{9_d(XqJr)>%??N{!-L| z?lw3V3q8dy!2IPqtx^sWuh@~oeia+-^?YLJTDp<{r#oKizlK$N z00ld3h#L-De5)wZnfr(%Gc??;e}U-@Rpkw7icYFy<<37yJn-Rg#m1?CZ3a(E3B(EM z+Js&`%rpYE3CdIWJsUq7kpcmk74-8k8LO# z0W+T)ofvKfUI{CfwoV{HZpE(E-eKH)Iqu{bU;Ets0yVo$=s7Pm;L68di1iexf*Uc8 zmMvl1=l3$yqBOpT3TrE8x|!zn7-Xw1dHvSJt(Z4Wr#%VVPW2XEK6hi@N*=1mM2$YC z-hkpseK1$3-_N;W&mOKfA1!3+%DNeS!$owV9HaTl$TAqDB+9fNq!pWOoZC~bEMNd= zOQ5JD(ub=T;v=dv%~c*Xf8S#|mr4ZvQ|@f>_Q0%C6?+Y|RKcyl{;9cQ7n2@z+13At zuk-Lrs{J4LIcyLRaN))onilR^9t0IfhNCjG!jYL;p=p^758^f?42hC z;+3kqRGfP^ux|GLDki>^{uH%1s~wLSZj7_m;1fp5@{VQ!s9;JiB?{izeQC{WQ7cLt6!DhFsIrrODu&7v&i z!vAy;$zl7zwZox18MJlB1VGuqV}N8_XQp>Gz^!!;4r{l%>`+redb^Hji_+b2=#|5+ zDG~$_6lO#WkV;CEw_|=%e)y~9n>EFI9|bcP<~n;V3YNe4`h;SYF~CxpbjqoaeDO`0 z0`DOqqG$^I3K_gf`M6(`B2b(~1Da=~k+|`Ryp^r&RJ$4WB6YmjBrCvNZM8MnBAYC# z8As?vwJOK?eWU~dcDuwbFkLPkaDJ#|a3?f2Uzyuya^7Yy#3euH09VSybd70X!D#z| z&6cITSK>BWoF64^aIOU?Nx6QkPj4S>AcxZ#UPU*KVJ~5ZjKP&-4Q?4Jmsz8KqRZGR!im;9{@v47{k$73R zEB_bCcK8l`dd}Ys1X8^83HlS145oomajIpuZuxnYZVaL#@8a~>TGGTf>Qd1R3j&U4 zcf(j);2kCk9@`%MV$t7rQo8coqh`S+)2Dx=cg=l;Cm;JQrgfk1je&5cixc+HS7|T<{bB!n!m}#kqIpd z-y%cx0JDY-2E>MVnmPiY5$S*?Y-p&m_+>`qHJVYNHnD2-)|bEWB?bERTbf)z4WEWD zmV?S?2hg|XhOBM|Iq%utP;ZD}#$qUJn0gk5vF%(WFlDg!G`+voC1J)Zkvv1{OL7W5 z!6umB%Qx&1eYjy_9`#AjOLJ`Zm!8c?1I6hVj|S*?8<~cdI@pm&LDg<6L|Muo#{4yx z-Sij0NXU1X>yKbiKjveR>gcS5ROAerpya-74}9#R!A=}1jEhPDh{Giq@6{NgDZ)~q z9SavPLE$3%#&$n9kicRzq~+ZGxX9#QmV9{H^d_B)e}&5hKt1V7&Ql;xBwv;a6C>F= zV{mZ;6bE#tx~o8~IsmIUvLIFL!bQAmkS@0DwUJaMK^p3mD7AzKRQRe%Ko%dsxPY!* z9H)!&s8lt<=`S96W|qgso0OYGAuO1O);Y`3&SBM}Zi1YG`C3iE#hiVW>&{1-$an+& z%WatB;JRFiHXt&61z<)b}v5;#5^w|KA7W~n-s>&wRUprkx^yLj&=pa|eN-{f>`fPBe* z)J{DP6L8C}hx`DI5hI&Cw#QzeskYwpkU2f(2p0FyrW#mMP`G5O-hKKd$`^2{5PR~G z>Qfcv9mJ-AXaP(>-4syr`j#|&>M1UdyK~>!B0>FsSOYI?4Ll& zM0=aD29*0bXA8H;Hu|MfpJqTh8z)~P9k31m6 zByjgSU?76S7}v;_<%NzO0M6gYDcWf8eoHNZo-ZCZsru7pEoB$wO*-mo1~gCG3z2lcldC&K*KUOvSqS7i|98x8-@n ztpjY$)Z(Sx{k_^E`dkH306eG-Qdh5XLvo*l`tJA?=V-aY5?H<;137TTj+DnfD8O+< z?AeEOtg$gEi7~ewN7B3LQEa_2n(mU-*E-%0G`$=qj17J7BN)*z4BfboD(lxniFbN7 z=*?A7n{d%xbyo(l$B*8pF9(<3?Tm z?>CnWug@sf2^q#n&(L>&Oc@)BZi}*&5wtr4FykQe7x=^)(x>!3{RAYQk6<#3FMqQ) zL4ER2lkg0jqeSe^w-|dgbU7)WesSTo)dm_eJ33=AB2uogTaE_Gu#`B)$(MiY>?n?0 z+H}N!chQ;>5q&p7k^}=6yIJmQ@dWzz^{JDbiu9 zfX|G#Lr;lP5$n9(vFDM@dp|DmCNe(npuaFU6Slu5egE10`&+PZ)%5ZzQu+1`FH);s zlpMCzVuo{J0uwxSW!eXZP$5TlHnj($`qwrr_>wzD9)W@JCya8KP>9cxq?`=O!!m$- zgZ;}&WSj~?`C5jfVZj(n@@LkeT+!!wTjfVUO(talPUU^Bxm!5%5yp0G#UCWX9l~m} zwZ|YRI1edNJFVoIf*DP&=cf{bFQWPQsqH#e^%1q5Xj6pdgB!hyE zd@d87T?hNCdeJ}|dQQ(Q7mj2?h!-%D0YN?&?_w?@QHit$IXfj3N&(pWjzta>AKJYQ z+Lgi9%RKUY(rlVdVRqB=x`$0fzy0#GpMqv;{94+r&Fj;C#g0Pu=*)|?M?_It2xFdz zCIp=zYo`y~)hc9Eq08!E(4fo3IHX%UhHcvLjT^(J@Lq3z^^NcWO^oT*kppiRv2|j) zwTDxUQKAhhl?#K?W60|k>~J;v+8r&vtF!ytnw;<2Qc={z%{9#-Pjba9g}9ktf>mLk)AY^-$o> z7ozkB-I-$Y%O#g}N_Nn2S*Bg0U8;_BO}FfqU#QdFW?%1TCdg@DzgX=uVBePeb5KEr z7daf~Lvb+R?z{MI_lY-sO?#X{{d_>U!$10t-Y9Bve{Cj>273i4j!M_kd*d65_@5Cq(s^PmFlSh?7{Pmw-2+{ z6yPXwOC$!hm7GCuH(M_9UXaazWG`=kND9qLKW-)vM0nyXK|o%l=1yF#WRsSo2RQp~ z8U=T3xOYBj?cEB?W*EYRR4L}Mt3LT)$>9z1eXABDusi-d*HON`=R>6b^+?Z{I{~{U zqHw#t7uaBcoH;-)1A&Dr0h5?@T@z_XUCR#MZQfm_GzB)r-@1EkRmaDCr_9m%RmnF? z-0NZ-+Gmd*KJDTZL*L24s!Qg#XXvG~i?5dEXglxxt-I-_&&p4VovJ!kFZDt~PUQT{ z-jWGZJ#Ft&i&KI9i1_(As+cX(@!om7iG|!XsGRJ{zUQrl-~M=KJsy48Z{R-B5n$gk zd=SW-44E8{zvmp4&|b9gEUL^;w^rG6+j@1(sG7q5AH2O-R~<8V?y0&(SFt#E-EJ~x z@2TPKFT-kh`~LHVt1N#Kov!V!?Q?ol)mu{W?Uma>T9DM~p7#^xY<}6W+`Mt|qbLsX z@bGR9*(oTicCrS0CktD$XP9?tGg{Go*DDJJfYdt4eFTb3X&^8pcntBP5E1$aQ@Le% z1;!6vhf1aRhBGM)3TT`mmH$Id{iTUTa`ypPbAZyPiImDkfb$3g_QhAp&Ox{;Nc@i) z_h#LE8Z__#33;H>Z?%gu7;EjTf~6Wn%MKCNCQGh0?C6Es#%F$zfmk)h<*V;(sT{%c zMgT{YG0r>%N13<4>A`;r)>aFypD#+0{C-gfZec8p(+g?u#*3u(MK zYp}A99yaE^lSGV$rnCi-UfjuuOjZL$zcK6=VuZEz%G%D z<`c*pp66?jAIh$1(A9&FBJM>yDLpA*nynpg$)+4UbK4rE)(F!FYtbGGU%j;@lfLWZ z2dQGDr5aS4HOeRpvgOl1-SPaCl-}a-DD?{#1comxOafk&tJitujDC9jfY9zk{FuQ0 zx3>Ud3$23q*Ye1HER6Efv&C!TRB*4=)QGb<6~L`!B9>=Mp;8CF=;(RQ0$LbClL+g) z$?_*u(~36E)uGJPaPOzd1Lk%I^yixjX_z)x{rwS6PBSCADROPOX6QzXidt^~QeA1# zSR&w2Rq%8#E)7siMuXVaJ!iMOyaLG*$t5E|)OsfcK#Z@tiITVGXt&y;a3HZI{5sm% zvN$9|K5&=Ue3>s;v^*xBs(&7Ixu3RX+x&V0&iqzRNvgRf51dBP2H2i?s72F57+jm! z2U3{fWo*L+M{S+9Ivh?31C9(01|YLo#OUV!r3P7Fh1P5}^VNXvOCt_A9>fqgXdcGh z{_Vj<%TI$RTUZ4qAI={>>YMA(kycDhRln&8ZrYf92C^DPFq(9^+vhM}R1$#8Kn^1J zvI=Y?Q;2>(vlzesOu62XGDIfXOioM^FE~eMms$vNUsQ{Q(6nZ7L!C>l3 zllN`xi+e}%EhV%XRhO;iUyo4pn7AGGr)%Br<=)4#Mp_NGTmD!e&%CbZ`VYb+mF&B{8`XaG#MMQzxs{CH zjuyh@4_A{iYZ2bScW{sE7-AWP0W_Yi}ijIbJzH{ zF!~ih9czR)z5x$zb-pAXW?{4`6!AWH2vLAbdq-#Oi_^9sTWm0;OnKe%)McNT&w$+f z`T3*-2KLy11ED(8B))=?j1CQ^5`Dc2mC&|t&mhm)eIj%Te04bm1pU#PpNjx|pTOTf z? zaEy-HIdLqqB^o(;dsE|@T#@rWk`oWYnaGf~sLfUsIW%KYsI? zVm30`2zN_%OvLa1WwnIYCUClYp$MqZww%N+HiY%NV)v`5aWHkRz$*a+ ze4Y9-gc44icU!@V)G5AE5@>WcW$WQBFg8#+gNdVT*}f=GE!^gs%LE@&PBk2GI-85# zy#RBks0`KpKDUX~bKO%zq5n7zR(g%IMz<#NTumKvOPqPIk-69; zrn10iF0m124dgT^u*L=NHJ|>7rqA`z0~p^ClGyz^H|I@DO(leE+3_4mhE8K3uxcl( zZYrXGpK%XmDp6>FV1GWm{w>tBjY7(kledpgoL9x^iroQl$?m@frtWy@n&#)IX)3+sPBzX8(iag*{djdrHIlboO)Mx0 zA3+TS3#e`*JyK`@0)(zC-&6st;}IH!sCPf`iAlvKZ3Svl)&Ndv%U~EvQN|CE+ts&u zOnhbng(5Gs66|22QDOX@w78Wk7|74Q!0|THIVoTy1vUd3$J+Mb+mP4z8qP4+s!d~% zk16}Ec_IrG>433H`~vsf03|*fpqU6k9X{BzodN-CQE4ULcnc!*(0;Ng1h{^21WM^g z>3f@yu0*v>bJVLww{%=G$5OZD>eX8U%T_>|koM^f?kJfbebB)~%AGj{P?e=rhP|;z zQ07=TLZr7lW8cOM>E*Pt5R_lyOGndqjVpYg~rL2ew+i(;7Tz5oUItKYkx3djI#I;N;h`pZ;RcR**13{25U}&+sX^! zBg* zl<|V3dXJ^0h^^KU?2IeI|KwzA6WE|~=h5j_hw#_l|kBsyGK#)Bq7Y!D~5IjR5K#&Gpf z-(7|gX`u?VC_sR%gP+;tUK6co$gCU+EAMzC%^c&9HdWh>ma3pSWVauPjL{UXvDvAc zG`6}j9h(8y{u!WLj>laK(Bra%tJ-PKk?3h_%BLvM9;%1t05#e^^(g4qK#qY{Cm^odt#k_EKo8H;7jRv|gPy!(mc$d9E zK>j>Jt{Vd9AL5rw!9m+3G8+fUPGi_0!VN{C356_FutD9Mn>*hofV#31NwM~C3Q7ti zQLEo^%=oR?QZ7=CeWJj}TCUwIP}?+j>0SmCWMW%(s<02F!Q1WFds4nSMkX8LC)&Qe z^`WysYd%z7>$faS=QNrHz0N>~As2T8T=h*ICWm5$YLQ% zM))#`hg{Z5+R!n&m+WR^*C*nlWr)Ygx^4R29lVZ&*k*yCRecRGlM^2bNI7!9M|`V$ zLJv*+p3&T9^1-MNt)b|T#)x7I(R7Ku?_9p~wWi_3M*AVilQB0O-{wPKLLu&0dJX>GH0ZbQ;90A?e}^-pM#dF>ss zN6&-h8@km{=$g*_)bZGD*F3=>E|8uF_PSG*5ozJbZq%mZe=(+4iF!l5tnx@pz{x# zD#59y^LlI>_x!>wyD5!Ygdstkw%`&l4fwbDEKO?sZIN!v-et!?jSnM?S(U$fefFUI zwmm?vWM%$#I()3=w#w<`KQW+Y?ODY&@S8KnWkZHqrO>bT9SF};W&u}L;rA7pJp^bx z^<;>lqm2NaHFtMgN1PMED+_sPns|dD0FOB9mK2tt9eTfc53MnBbc9FuRv=t~3K!M| z73G2`6FC({3AefbeU+rGQ_za8F>L+vf3$KOg3?1ADEl7}WA87bQXTm_D?gW?A`G8-b=J{d{XY~|{(C?V zK!i_H^n_r&wq93!MB=glOTnX)88RDX`Sphnz4kwB(K!CAAvinGEwO&^>sT1^Sokx` zpgfyRA=_NUqD*$Rc!6F=Hrel(4&FZ;Z168-d@S=VaeUk7WqKP> zSz*Yix2I1p8N1hdGy>~=qMR-_s6Nq@KQ#^hGY{%0z{?!-IvAwzn?7y}chxzXfvc`u z?Je0J_9NqA>)J-O68e2c#9EcIVf-JhMHKW(*;36g)C&0a-A$a)o%Dxl^)B>us?#;! z7uq|9TnVo{m*5IXUpPic!h|Is<4`M|yyZT6K zP=?(iTZ57i@Z`_B1wmuJp**$JZe`16;`N8FQq-=5C{lnf6+mQCFvG;q&@HZS5^s}c zk-wfDuw|wij{Nf?Qi6925-MG-4q*FX?DP}}wH-8fdj9Dh#jh)kW-`E(*Fwz>5OODKND{xFE=Q@OP)opplsZg z4y}+09b^YJcct}3zh=mtOaN&h=H807aZ3TJmuI6t2kOH9B_1W-VaU+r^(rA=q`Z!( zB{nV13{)Jv$=pKz?_ld4txrbdS2J~e+M^`w0Q0CRl8C;jW!BKA{$~%@Ty;z0K-K0` zJv%$ioTjW)rrNC9hm3tM?e5m4C)kH_^_)eUX57Fd!yyH4q-=X8Vz%~nN~*J{edy3v z=h}PT_X503-+z0DX3OqPd|bWe@_!T0abpzX)oegT(KrGiwAxVuMgehDZR;r6oqX?# z5P=>e)C~h^Cp0do^N;dVX>A1j@Tp}maX_FK5{(R_oXhtT5^j9!=)Ung(n;Ood(9_2 z4yCL{BHNW3x7x5y*~m=FFV$nO`@=qsVq)V`jiG(mlP08P%GwK3(!>aX0O;9H5kB+- zS4K$BSQ>}_i*;`Bp!+p{7Wb%SFE8KCwSzxDUIEM3llL>g3m2o0sx*%O2g=rC1^hI9 zRrIeTJAeIq_7~WOIivbznfUJF`b9UpHR4YG?)vZdCnLWCUdHes<#Ro{rVSqrbPeTn z0qr2KLR<5%gPdcpSCB(8cJ)>+UTIAsdD(%zJ-xk!hS}WG_E-*RJ&+hn`MJ2l(HrfX zl@y-3l7KU#_pR0m@Wr9+r8>Rs@JoK7VKTS5UBnC{P^a=7WwA4nEi0OfBa>IWUwJmV z{iOE*%zlWZ8fI6q%z8LPqT${>x7BwQT#%W>_=yzE2Pj5UnbUwWvURJ*wtULVkmqOj z|Fbkp`fxU3DALS}7{-8JoHg-GP0d=R9)@jwQkR+){drSi%bIIeF~445Cf2B^veKB< zKT`F=%B17QF>^O4V08Zj>)g|YhQ3>}+9nbnwW`zVStXxe+T$(4VkEm676fUlVKKKz zbm_;|v*S6hOiXUln>6`JTPsDlnkW4N^AN% z1@a-p;m>eBO2<2?GO1#9e;y)y+L!1MP6_ODDB~BSv~Nj3M?-(Rum)y$%qZjbx*C4T zf5RWzZ>d4zI^4+P)C(s8%bgpm5rPWIB$l}6dZU`yi8Ws@jRQ~67*kN zt`<&HVG+{RF#Sq)I7tU_klX9yW19vn^5-?e5`9kV zxxO40rS7ev=fJb9%QuGNVD2JZSObCu6x2i|!kh|%m)$^MR|ErgBrw)v+$BQFEt1`FhE!?=|PazU-DF|*obble@ zjX!{3Kw;baVT9~mw6+ZD(3SxyY0#pQGzj!RY#XM3TD8iTGx$g8)|$SP6-j08yY!a| z>aKge>YDAp9A{SV0iqx5)oT{pSJ#sxg&n%W8Jk1Kt27Vr6HR}T=SvtqWFv@l3-H4* zbww|bD;gNPNFt;WQ-0p9e`aAoGkC4UJ)jQq$2h!0 zRGP4^S*qQdx1|_odMu33>!uYB%jZ1n8nyp9XmRn#G3uMcrfvD^F(nIS9r0xVYgxP0 z4_;q=U%bTgkmJ6|qS1<^mw}HrD1aPdf;Dc_04EpNcOg)uW8mS#dxQ;kojQoIZHC+F z=HI#I!zg}C16cUjteG7EkEhzaY0 ztFd*|DYF8;#qEo8hOJ*^gjYq0OSi2!9T)DAwO=Mr+(qzpXJ6OiY(`+wvzP&+as^A($IW>qh59Ft)ei`Q$G(QNd9SbuUm zL|*s+^x`7W_^3_%#nGM1az)FI{~-hvJ8GLXrLy>K4A#RlzYzIVo&`cG57@m+e%o2h$9mxa0e znBv^%$je&l2kLE?j(QP`bk44wl&9^AEd=?g*WTWFfk}YQ4GG~>%lYJN(>T=6bU)@jU&v% zi6WnmcQW~pPF45_#dK)Uv-`@FChqZLpsu^G z#=KEYVDtvis53*DG%eLXzY@8C-w^4|+VpZobivW9Zvrws?lTK~FBY)wAM;?>Bi3^Lv2-aU;@Xn$3Ia5@k@; zLrfgHV4ML&Y66hfuzJIkc?ek6RmXU9Y#14?L@Mm9z|A}qi83srdW#_MaqV;GKfY7l z*r`D10^P^XW#$>$9grN?M&7`M9$ET8pf}9(H!S-{9GDSD^Hjiqx7op+tzry?;^8q+ zN~C_+?r1m?UJ`ke+Hj{9M+_ko4#57CqJA_B`2;RYb- zhxj8|TOqW|dy&zN5ZHqiPal?`wr?B3pWn(x0a^Y_6b_oMormZzls8?Q6c^{~?sHx| zlt&ka?ORu&kguU!K+vM|nSN%?BQD>J%CCRbjM|9^ZW5d10i#3AM%>yaUz*6Ok}NmZ z?^S;E;g8G)PVWX%g}1z~kEVm}aq2L3|Cbo!X3Gq-b5%ir_T1iwOW&#l1Ir=cOg78x z8X>`VZFSZ)V(4o^Di_Ir(MyxH7&dmopSk$QmB!@&sUjA8^x0;zC$t4*uqiE@dFpo! z40$YitxCv_FDiqLq1X%IHr+Va;G=4xJL}Q%rMEhl4k-atClGoRpw1zPotH4%d3$-xE^qgR24O?bMI*ZghFLh6pt^@_=LeAavP{A76lRDeFmb2e5k|zW#bjd^yG3*Sy)TP|`tcvq!WW%?$u8@e+>- zHI@N7S=4Q-*4`z~jhxOi<~0!8#GyQtc9J{?$W<+p=w&)o*^YF$&f@Ikr-m#UYjV7n7}i6he5uXCIbMJ&X}5jcoA_Z;qZ+H ztx=itrBq$Y{Gv|tngdxKj^cy=c{&u zA&c5`VM!}bD=p7M=b_Z9hCuAZuM?uzB`qlQDo3r*(zh>WR!MEA`z`?C!{QT(=QYI) zQFS0<=9l(k2}meHXbxQCjbpY7FeID^V*r$wtR;1<+tcur-y=9v+RfWvPFQt0a@8cgnU=C@<7-(7LdTO@} z?WX7en}J!z1IS9XoD>-kME%L4W^apV8K_X@@tGRp|JcE{ z8(&kzJUF*bGJfP}y<0QFPbMZb`ozgQ3mAYCt8jZ1HUNUFtnO`B!~FbCg{0*48r$W^ zhz1X{bhh6g5N91QR3b&8vuYZ8bVqvrR=m8@##jG0dXB+s8M8v`VQDv#Pe6SgGs~SP? z!BHkf^w~w&xib8+gS(8xm-QF2UCyA|kl``6)V@w0ui$7s;?uSI%Rec@A1g?0xdBZG z+ezSET)|ofXLMJ=c4dL-0F0G^ntuv9*7T|le`#R4KQ!?G6C{{~B=81{{#gI{0VVA4 zvukzKK0sO>U+o#w!o@YdHlq-pqR zRQDuh;W-Fq%oQq*?pLFfgAkzp8+VTba1UZ$t`NPV;t;Zb8B#3$PHo%Nt8RGX?WxIu z!)B9wV9uVC7XDL4SF@=q0Cqbx2pCK9%DDzicXY&@&DxKi@d^=kWQ7w86R$v^=suQN z`4PB(c7KM=V6ho%P&Q!H9V`U=KZ-dT7vb3h;OPhs56NNVHoR`|3ZmZ8YDs{-;((TQ zM##XjgI!+e5<|@4-TN}~@*{b9PoIg7{$7XX-%!_~w+RY}?vYz@Z#U8baw~dMqHBLW zyzcvJGZ}2*q+O?9BkKXkGVp&Yh=Kch_FegRu0`*~tY?Z`p2Fzy+_kKHBc3IKm$$Yl zUv&^o->SqcrK>q2U^(oyjJFXnCyr%cyrN*2ll8hIh%9qg&8C0W(^`~cdC6G?K25F4 zrrZGT+SBw_S0%b_;ieXxNDZ;+WS#j7-XnGT>|6*HGGOhh4H~-vZJ}UKb?xr!#X;J( zPFK!pxr3?bW(5T3NukqnKnFq|ep$)Ki!MjMoYfG~tYf?Gr+S3h%~ zyr9f|ZNR`uMGGY`4hPoos#%>(>pRYuQhN0%uK z)-@f#9i!M@QAEbsB8xm(ogzGcW%f6mcid_(=xlTn5;dS~9QohF&7x~ABq`E|?)a)^ zKarBFHY1n`+KD62LzyBi0ElN{JL^U1xBuJ9Dje1E$e6=qj88N_E=V57L;yfCM%Q3% zew-pdE@?qhU;WkgjYqoy!ojN=rfF^ya8iR|v*#k!^%U{Q({VCuHc%-Bm5!oHq;a`8 zEdGdjm{?sZu=Qw<+?{I}0ywF&f~EW6kca zW)?s)_`P6eQD^V+{}vME604>y&qN-KkH<*UKtxkMclv#cI*tsXe3*`PQEgOS9&bSO z<E#DB_qr`E-+t;c zP-ifO6W%kP!@aw_cjemBAB}w0={bbz<}BFQe-gEty+Vh}!I1Y(rPsuTP$E3swi zb2cNLyDsGX6py=r%97P86T+3+eoDa0}BgA?nRuZ9G;^q3MT{M%n`1(+V+r9@P1(RYJi; zQO`k7vk}}iL$T(j`0$Xkz!TBH3(U#_z<~bsF4mST%-DB)^WsFk3dF)@Ice7UF^ux?4sk#s6NhwxKsnF;BqfWGd9x^i^J?Mo=xsyaN+RT=Q9LK-Bba|rY_^> z?B_U)YDwW&SU%nDD<L!!*QRxf_jTYTdVHmXzkN^idONl&#-)9Q;ThbxTk%mC{7#-y^ z&}4=v$<<%N;OG3=dHl0TBnUl4DLlA4)+K0*QVDCX0Ta6d<&B zN&(c+AE#J^F)^dZN8hyp-0*L{oDwra()I<>QBB&(LG9xdtfgzhF%If+78PR_MMt0v zqB=pz<|}goe~pWCaj9gfgBXd-WQn9f9wR5hO<26r5>)=2CWyq1@DVDcB}teW5h zn_LsDka5DrkpvDkgu>>m^lx6^rv>eNnMrA|0jrZ;zs7L3-fY&YNe|sLfpO7B zaBIBV8GWRzElQXWNbg`^bRyyI%1Wvd>rhIpg30CMB41gWq_{H^ST4L9zrmKVkPrDMj5gT5&l>XHab5T=ullu3o_RiLe;0Z zi0>TQe10T{=D^=MdeWh*c7Sdp%@&1Kg>u!!oRV2ijY%YBbj!Gvz~ALjl-3|%mLUkT zZJR57y5@gdn~S?Td-71|*3mEz#ouj+#r@hB@JN-Y+1Z~~zoMcWg;lFbF(xre#68`r zwr&n(^$6JfhY;&~Y0IQevE!(+46&}UBI1C%`a9ikaWBP!e-}JBDjwF}{7Wof(W%DT z<60YXufnnN-hbi;)FAO;gG;%1dc%mH9_yCAEteE^vb*___k}w)fV7QcyMKoxa6~^A z0&ksF_MostMOdiY>x;B?8W}nl2t4=HqBeH4w3 zS+Aw8yTGguad1~WEcQGm4u%W|6aE|o3>p~zFZ`PRo($Tp@fx7SN0}860}!rbh6hoG zQJ6pH$*F8>CKn>m!S0I#&f{zlum;U=|XQTCYuPV<7QgO0KnJfV6dQ zL8gL(XIV3t9~izHl0mI0b1A_Ef&GdXVXH>+(0O?h+bTUjb0F73Aoo=FY0w!?lw)aO zj3u$6g6O2=KGrhE3@=}ZO+U#s#v`-(%GcysnI$)$%};B$I@rUZI@u1eyR@H_ z)~wb?g_z-PW*L$eWzfovSxhh4mz!u&yh2YY#7V zsa~+e@GJ9}u-rTXf}EEKu@;s*8_Q`Ck*8f{_*4+4%7Qhr85P+*3s5L#@4~-oj{LJz z-6A}3!7c^DJG>8Z*WeX;C4<-405voX0vs>fu(HQauFyVa&Xxz^debPR<1`rgR|Hr* zt&KDbV{6-{VU}%CY;d73$8G@%>c`)J4*WIROCS68RCXJ@QWp4c3S4ad-Tt%)91rrH zkbd@7VPf?j>)$(>4_@5PUblF)y8I)x$<|3DCe|k{+kqIpo*7$bDe0m2QN-cJXE2E1 zTyeOtAc!m4Y?cOT-jzw5<`p1CN32spuc~{s0>@ASm|{kOZ4DbkURI3(Wcc*dmxkx) zaFqS|W=nWG(WNS!l)WbJ-$wxq>r?=tNCF?1QtI~pF?i-EUB$9vGhXbDpmr_5jG}ax zZZ&_xOIBLz*Th-|bm3yJyWPjmLl-tqce|*+*8)nwy?VZ_TLT`5bV4%mE0#S;zVyrM z?4$37ISloLO6+>+&kB}BbIQ1-y=?mrPu0

    ->Z{zaE1l-E&6*v$-g)%BtV0?!qXKX&=|JK0 zQ$F>BQ&6~kJo^1gR$YhY)m;(Ge@8v>3-9!eH0VJ>Ba=a4E<+?|)F;oeSbWd?Eka2d zh`B;{-uOIn6H#lN^i@s>Q(96_3-TY-T(Wt4rsOVpd${AvOngj;Q&Jw2-ouNr`4rsK zJ+Zmel$q8bDgu+Z+gA2O9lY(ryCU|6uuzS)<*tQXlPvj4vkJAtwn|PTvz3N(f%*Qc zdr)tx`ySR^*k%6wxcT9p%MNt2P%>oqE~e+7%G4eAwr*O;UBsa1hWx-Jd7$88X z0wRVgD9VHys-Y<=YA7lyYD84*lMo>EP()P3P*fHHqk@7p6cJQ3cCZFSMc3VpWnEO1 ze?H$A&++`;@h%)3B)R9huk$tOY`d=fdqtm9P`;Wp z*lKt4;-K<&aVhO7cj5a(n9KZeMI4?wO$g#yEp%N>_o`^_!pYm^)ZipR%d>#q_v`mjnR~*2fF}RzC^%b!JNcK zfIlgct=AW;ivYtDha6u96I5#QbAWjJm}m+Rb_|dstQmXjrJTxxpMq&X_aWRUG_E!t z2TaI)JpV&$0SWE7c6U0O$#~AxhGLy17H~~WI;^jRKZ?h%`&zs?{^l*@@reOc%{ulW zO%0_>I0F*H=PRE!P8$WJB6+QdaHt}t=5=_Q{0BVrl1Sb0E8EX0XWj{;e;-xO|A2D1 zQjTvoB!6_o`*B#rL*(re_QfFcbQ?CYkbp`i&LG&-`iDj}zFk2zx2uhc^ax)-+VK}B znihxKTZ)`f!@dR%2OzYph`c{^Ji>_md}Mizei}a%ng#4Pxo$ddiTW$&rTKB8F95eJ z_Sux04&O0E8ae6Rfj5KyYkHEkZpq!87kFpTW`ZAZ?>0@o5}d+x=8sPtPi@$!er;qq zU514lV;Hz$c(z*qT82V(SEE`G*B!V;&E%~(;qZ!H)_1Zd@EWx*DY|rMqnbW(JZdjJ zIr;b>2d32lHzfv|GU>l>{=Fh2JU>1(@}M&bk*m}+1hHn|W@n5g3fExQ@v3mnc)?? z2cL9bes{)ttB9IgRY0BerTi4XK=R}8MyG+vN;b8cNYIAnMoq*_o(M`sNHqvv{O})Q z|3ZW72fLPMi=OSbk0c5Kd^u7;|hAKpH0{ML%DSz68H~~EPUV>w7nGNpAo3Cbna{gh?n@Y05U$}{-fq@+FZA8nmT&rMEFWfr=C?nX>w%jEJnzN_)vc2zhwm_v7M?fBgG#qFv^AMDJpU zCFhyox?QvET}~byo@jkkA;zYS4;vbvl^ZqR>aF^)9oCQS!;M$A^lwVvs%dNOu}>*%$RM^*BRY_&@JG7tV80lYjWHFg9;ma4_Zf`uNiR* zL;?E7v4|}9wRdGywr|ToSyONWE8qUj1Rq5WFa#>`d#TgI3jW@|`){)CYY(k~e_?5SQD6!UoY;LM5H$VMaedue81xND#dc5JU zUlmpXGZySVzGiBc(VUfzW-N5%+{r@!Pp=23JqwI!cd0XiUuvdZty6+0Ke_!rN+{pA z_q%TMaI6TosCMR?=EtqQQ;Qy)-&oQl3b1*R85>4*tE|5>zs})_-0hyn=TeILOt2Lr zw~-%6XBmw5P&cq*sTS`U!;ubNw>5Hae3U?ww?)?z&SBQXTZJ!~+G?j~uyPyne+fj+4uVLX3Tw<3SEL z9o*j-b!GO>Z0xFxjdE8o$H(mtwE2Trd7EvLZ!k-Z+WylwoqZ!Rt7dDIA+FCT)sV_U zLs~BTYXXmZJOBUKMD8i)b9Y=W{a-qEcE{uOI=b0JO9d7psrYy1Cc+BP=&o-s2Euvp zX`Y?G&-K?vIs@SU)n%~4N5q=qGKd2 zh2zyc&C=8rr+$%T+qxsuqFBSM+Z;gat)|Y!TXk>T=I^A?Y(8g^5Eo4@iw*1=A1YU} zn0CIEh>3vrYY`;)$lV3S$$rzZSY0>%*`gy!_>VnpTaKtM>wO56xHo%wBq!}JV;x-& zGUoN#&@T*a9@60nnLiDpFMZW+HNgGV-*DH*2|+RQzcmF|;fs3iNs)Tp*)Ynznelz> z$D4EjtlO~AZ_06C8uQx}h6j09G#~-1rR->VO~-Q4na$lrKDH=uQh)XQTLA#<28(}% zIdOZUOLwZ00jf|jZyBTVuT&cr$OUt$u2@o0fUq|)DV zQhB3gdY_!W`*s-fo43LG#c4!qp%T}oU>Ig@Epw2MQr*OAd`ng?JI$4x!p^2x=m1{9 znf)quKkuoKpV5i2Xodl>Jesy4Pzqo~{d2EwDF6YH`G1{xo&XQX5Q)w7o)vfFK-!WH zYqJqyFks7*1+U}d=8Pxhkb$5jojoZ%6&Bb@BZJ-EDG-0w8xKg2j*7A^hMO1|ClX;q zz=hj}vHdQeQH#uOqR~!-c2OY{8Mu?mo~d0!^%~IOx*30nyYYA}DKqOe!9bw4tmac~ zeHHY_BK!;(iQL(l0>^B@`aYFJ;kEqOatBn!O`XqdN2AZYe^N)3PU9lmazF_j#C3ar zSH|Lof{MskESH_X1*zS<1wDoBktki2d+~!KnD(Z!;4{C)7?YYh$_lOoldRLaG^#--RK>PL zvX?zfW(&D$yu7<;ZM&7^Zj+%U44}J3PuOllgzZnPVzZvxSia@jx_%p=`qWBI28RBy zf1FgZQ4nPK8724#p5i?p`(yQ{F2ae+U=e=uCgDu}mI(&-vCo*}4;Ulaag)|e1Nhm#+1x98lfTchQmU=f#SivV zfy||L&&Es6f<}Ad4jZkrV;x>sMi3^ohR=7V!LXD{6~T#YfFuHdc`8uF0Z@}pAYr); zNXps!)L>#46V!+dpe8byraz_eW@Bce{;dHSl9!T*c5@?n+N#L%XO+kI6S-TP$8T&{ zV~1P2@EI^j^hcMKx=3IxN}M9<-P?#J_B%23^ceU#<~oKVP;d0m0TA00OP^*VF;=`a z(%~cN9{&n%e~)Am+eJo~(`3Cr*R58>%a$!xNDf^RVruL_%DUfqmh(pQa9`)#O~Rm_ zpQB5y8~>vZ>T(R0mE<^y%E5^0AlLN&N{!|ItSuAE{0QaPy_9jn21~io=YD6pZ5?IZ zON61j!#Hf|3><;){qR=QY94coLWk36ceuF@=vUnel|PxO$c{=_NH7ub^IKgB#|H-OxbO-n4#AK# z>F&TrJz&_FGLQ9%?#P8r(fMSxM*@ z6V+x?W5S4itniC52?atVY*Pj+Ngwc3csV-22I}3O)iUQt_><^L2e#;vr%$jDix)tM z0;~Q;_toiRoXk6!WIYjR3jlp8gWCXxCE61z#12+MK|<`|23LL9aC(VR)TGfq9etj5 z$Kgj5X&M32Wq>DwzJA#g?tqaKVsO)ZAdV})0w=o)>EC%P05P=2Hgh#A7*V($;o7KX z?%tgShgFcno`|Q6_o_tHiV5-QerGQ@*bfPI<>A)?SdVI$q{MV+C>^@R6s>{Gi+HGd zc`}fmpMWtjw7IMz>6R3@-@{KU$lH|}`|_|Y2u?*5>C>|2Ntm4{BNiwkpnDj17DNJY z`RZbGUHW4#Wp@W?p~1L`S)Srj41*v+panCFZO?!kRXEJV4tE{SWbW=lK7$Cz0`Dop z7$z2@Ax;EvCO6jYx?~~n0?PLa(MTw$@NB~P!O`%Zwb~Dj`34uPHQlT z(x>4I;qE_2CQK z7Kuf1raTJeOKC$W!%cB`M_0|NPo5apY`!3y86pp!=4er zV#AxHqtpLNKa7}OyRop!CekcA3sYuc$_KWJ@C66J`2eno31QTj5*`LpmQ?YV*x#Ge z&T#!JAC4GSPWywi08d;AE4vt8I316VQzjh7;TCjm+9Q$-Re}2v z3|1LmbQ6d~wr^%Ip_3bkpS=G_mj8|ef_XTzE~asJ?Vq71&ffD}9&oAw+k^p)7>ZN0 z9Y*FN$<=1Po<PD#3}3eh+|@?S}0iJnz4jr~Z&~MxzVEm?VYX4Hj^XKoE1mNAuX- z>y|Hk4Mi*V6B&fG8-S^9cdq{OqsjHTlOC|e_=_8a zR*9<$1&_Z0=?ciyE7(A>JVk^_osRQ5S{Y!PLOiG@1!%#!>knBA;!Oa&KY%xZnf|JF zy;)HYlFiXUv$P;ViNA(Y&H$MI!9AJ|XBc!mg4eTw6gAM8?1&RBDlW%!k<$P4C)^9s zw%)TBqkHgaK})|k*xvIyp-sxyX8x``drD0DUdenAbKw40;2(Fqf1cE&;+&}(Wb0#& zYJZmSkaJ%=VXNNI2Zh~gXJ|oVxFdFXM<+^YbiGn;qd zPpu3HveJU2H@huE;h;3xU+$nieC3qkMJxj}L|}pl@R?#5BE6O)o~Ar-7RPhWlo4AA z+$6<}`@lAbS$Pau>qX|!xR}E=QoUYe`T$#pZFE5vWB8E24{VBH=f%O~r%)izD=Eu0 z)*X&s1Afc(g+|@5bB>)*zpKbOxLOXpGup}tuXLo%%zFl5;f_dcwx$y&P$Xgx%x{FGAkT(N$j~ny7eafFknL{;un{mo zd2^W<>bmWmUyTiy4_Il=)o24-Z?_$D1{Z&8Z!ElI%v)`#Q7s~YiO)L1HNDs~4cmP1 z_=F2)=Yv-8@X;#ywxzi2GN!2tSgyUDp^2CW6m^J`5BGtAF!6})+}4o|@fw`}4wwZK zn$z7|r;Ll-uHYSk?CZrBKTDUlHR(?4%|79K%ZKMiq%fj3vE%O95SDKzb} z)81Yrjx|+WKB{v)oGJTbT@UCp+sl!O%RUv}0M6##B}xGK7Y3Vq4V+x%GGj4^dgEgu zcqI}3%6{axgk`IIY{7eM-K{6^q52AtgJ9PFwTQ2MXnQ7lPb6#^3VI%_di-W!pCQ%lla{>st?vfy6vU(2$fnuF2Hd*jQ#k#8k$CoL zz1z%KyGs7TS-I}O=X0GwPr{Spa8c9i9=n?3^CI9oGx1l~TyBwo7zI(CMz%^U7>vZ; z`XyO;@3f^3vgEy3f}af*zbG&ZezrGD_vHm|FL9grE*2MDx2}6<#nHPDDMxkB?>o2# z@UVe!xd&tQEacXrM;Jd9!^s5WT>&i+maw`pi0TaHOveujL`>S_ry9UL0=FxO%TLyZ zc!#!(f}OkNu^*qraK^3gf%d>i)h}b5HV&5)V*jKz$)>@^dv^Ug#+3)o`=%I92=n8g zV>@m$YE9z^E6T z;W6NNPu%~VzKRQJYGw5wJ+F2Toq7OWtute*A!i;uXBH-!mYZ1vx#<2W^(II)5g!IN zl|D61(qG#kxOw7X#NkA7h@P=XR!6b!Y>Px#idt_HCtE0 z@;^x1#wc^AbD-NQ+Fc=@u6yZRrlHIx*l?kFexIhc4@uON+HudLFC!P7xdfCy@@`n3vyp+X^)XOfr=LJfds){oj_g&k0e)M&{b9N}IEuR1w~}gcf}?C^hgDbU=?n)rygl+)zy6adTqrt zrew;cJLUFv@HW(e|r)mum|;}ThrA#=h5HEWkX6w;GSLr zD#cAFY0B+~U_73(tI2ImQ6bHYvvTS`K;CC-#{9@#TT;WtVpi_``E~<}FT$G(xXJR0 zI%5u}z3))$yQta)d(ZFDj`k4hO@8N09%>iKp~(7ehBKT1d>)7AkT|SS=Iw{CM@+4C zeTN|g^~>}1^8)79jh-}KsEZv~HO~<~G?-7s9pC%wH!fX#oj^&%{G>9J(d~)e79v~M zz``mC+j5`@3jBD7=2#wB*Yxec+yjnGZc={>71Y;1`dmF^eWQ&_rqf=%e9zy(r(L0a zYkS7b>Ml4!PgaI0y0Lium5;4{8yR!eyKwqBZ_1L;i3x-wcqk&R8K~HxLz2%&nRHI$ zqWxd~nkpQeo~>S`!0a>d{%_7isgh=q)xsq?Xg+vTy?V7E-n?^g9#s5norG$fP=J{r z-fy$}z?@n;4>r%xlFeY{Mv3{9t|1$EpM6G&%TT-~Re2*x6rZrHdsei}he;A}h1~y~ zRNE;d;d6`XGPUq2#HPHq>iVR{luGafusc}uAzqJWZ z!8M5T?y`-f*H1R%q21o63Ta!L9UizADA&`n$wcnKO}`J>q15dYh71;WSl!}^ip3`{ zEqoLX;h`Mv*|uJ#78($Huu1e0W{R+LO{$Q80)~iNZSPzzuLE8YYdXt ze)A1h>P`GYvYN{?j69ZSUq1v93${*2rS(2l7B0O1up)bogJN?kd$z}iwBJ*PeA$fC z^Or%ZDQ=5e#%jGvy~iD7zm+&&J zYYu1WZ7^V<^v2(3Yh1^;Qk#WI*xZ+MC#?!hl^gh#;o^xo=;EezI7ebs_3A25mY{{P zKBMl7a**9qEb*Q*^5-$)CQXAuubZZ~+yn%@Si9j(fHptQB-Sap zj(|x=^vOT9W1+5eB=iVSq#ri5_maLCJ%AO)O62&cz;ad0}ndi|9!_GQnF(2J4tMv*T`tw4(xk1R=rf=`1}OrX5w2}dB}yKk>c7zua5*g?p5x} zJJMwzwEMZ^EJADQ95_O~j8-qa zx68;XtUmiWUVoaV@E#sF7(q|%LSvrC+2U3VaD&LH3YxQu;AtzpUM&R7mZgW%d&52(VVRs)x0NUqxU0*lDVJvWLlGS8v)03%Au&*iLhZ!_U zu71XL$yRD{NpKJDazXr=ZEwStY`cpFu6HWjgbLiBA)G+IY-C`w;XxvQ`mh)G{-MQv z7-0-(6!I3Na3nbB&8et)aj{O!0j|jakhb%+Sq-PnuI&YYdFbAW6Cj&zw-6UzH*R`0 z!fg)?MWCC;!?=yXb6X{9{e0(66)f`g+4AhQ*k9Un=I_khmb=Xv6rZi8SV~amo6TFx zf%%#Bw9Kx^1NA!0g!mh7@kR@3I-}4g0xctX=eYjnq6SDVaT#j)Wf?&5);MCR!d0`b zKA3Z2#X2ucdAH!dA2Z&WTT_(}P}8sCY?6HLOw$2?72`T)K0MA_-RwW3UzjahhBnVh zP(aCgm0Dj9FykHo{uUOm=cN!x6IJmlrfA3&FgPa7#*(L1_$`$I<`B4%Y4NS}NV4#x zYXLxUz87E&xKXQAGK;uBlSb^2KAXq<^^2Y#YHaJgJ|`F<&Jz``Mtb|tyoNzeQt?_I zhD@qHsxb0T?JUzW-6R+Sgyv;GH43#6e9gp6dE1s9^{@>vPd#pEqD@h~# z3AX`o^-+FP_?`VMbn)<;_n6E};Pi`KvmkO)12j*U`}^>+VBiOBL;i*u{74?=&g${? z*%iz2M(w`8sC>Ua+8^99r|+QsbJHXO5Py0rqWESsQc;yf<%3BwG&zs1tq<#BXGKhI#Fv3xsp=xk9PWwEB^$xb(ko$QLi#bxaAuO z*!~yC0X%m8z^Bz?x5>UL0aUBWkD59(^Fyou?u#y2nNol%>I4aHJpE)8V*Pvka`?|| z2=hDW`Pn~jZjMnu7??Nh3OY=v#XhgO%#U9|q1~^j_O!q|xKYZDsH-uu4GNttviZ@f zg01@lKCkh5;ccMZ_jODC9jV|?s%D1Yq8|;}9@%;L{RjjqGE5h0l*q|CDgKUmwbOC# z)cYMoeN! zHa=Mc!c$K4v~$)I&1~PUCJ_4*MdN$umOlQE{03gOwqClC zOPF3mlyC}V22*PFQ@PPBKH%G}iskDmtVNwU2?~oj&q?tY1CQVcqr9Uk^Q6 zCAkug`lv95q8{n+f@4iY69tpMhe+=P4KA6p)v{E7Wy=F|Nnx4xeyM)e>}^B*9|@;g zC`J0fCQf_=S!cH3^p_f7R6kXdS|b(>M9C<*Al?dKiLQSaqXyMA{)~k*Z^__$pmGC= zS;kjKKtG^_wXFMz@SU& z!bMgPNf(kWK2XBwBZw`+x%E8tQ67Se;pW&R46sN6u{sR$pgHN@HFK3;7Ew+HvSAzO9tFaF9D@PMrS^qQmCkYcw%pM;AJhQGC{3PkwlapqBOU+#LEKz(Y zS{O@KC!NUVdXEhNkLFX!TyWFnnxSelHp8c8@*3Jq7q?r!bdb!IOEi7?+ySY>M^a$p zbuA1mOQ&56)fZYL!NH+|fyj|9XyZrH^rL&E=N<-U)o1%3D55`M^5Dii|*$o z`@J!iO@o5`Y)_!7R)^|Ca;vmb2=q^B0zqv-`A&$X2|V#0lzgOeg_0ZWa?2*KLKV0C z2jxZ#Q&S|dK${24ZGTJv#t9HZfaIyrsvjgeATbk3w%$BzM-2SgCE+m$)*C%cdQGHyfsxilEs|DDt+82_Z1RKv;p% zkq1%RYv%%bljGW~L#`QS|ERg-(sVv>Z|h#)n3Zx2dBV8s%Y0fh(Q#`tp}{K3-PeHP zM{Po9Orm7?Y7JY%y8;rqzP)A-=DfCQD+0oK^TThUw6IR_da- ze@oB|T&LAhE*<;Q*{TBS6`r-q0&0Tv!6mc}0B0R7c79zqPjwnG#R)Z-V_FmvW2QO0 z#o1Z|Q!R$BDD8mtgVj?1dy)$>$KD@{dhZ{4eJUEXk{mFP$kqdcB561{RCU12=~l}# zjTuc1w6)x5?F3Gl)B@V+?^kiZ zEP7o7T>hmWjV*uy?-cXpW9o;s0~fIm{qlr&8oh-VA`v42dBi&Veki(udSvxSRAmB~ zdV?TZsowicKjQx1^|;{Hv0=xdr)|doJ7RUX!?OPUL^EpIA*$$5$DvbFgyHfDJz8Jz zETH6ZrxU$XT9b1NbeFZ?2MjdeouB7ge`P;Zs$2iXX6o=R2s&*5qe~FN2C;-d)OR~c zDN0FyyghLkyK)#y?Ofn6@1>s}Bt%VWRM~p6Ew`c8rP_qbrcz)ET_APptgUH6_iJWJ z*#%^W;r(o(Rf3c<(Nm}Zym?qXFc%XBTn^6(bue3_!fz1d;=F161B4U+r75M`(g<0+ zTo6Xr+7U8!Sb%4GH3RrQid*TB8z}lI5&A%?1Z+vz05wo@RK^IGxw+#v595=GE~W{D ztZG6s0O%*mX$M3A8(5e|$<$z{fyrgq&!{ml3g@=xNYRyo;#fGWQ*xP+opb5|O6lPm zWsTKw3)+U~ajv{l>5{niax%AoTwQE^=a><3@ll1PZ<@?Xb7Dm(cKdC#^=S5rVVo@+ z?S6#aAj;(qFURVz8+f@U>idSPbC(DuH&-~&<=OG@=)o}53(bjjkR&`R^{U3s7v5D( zNNiQ$88tvj0Ba%0CXMUVg|6AOsx3i6Ca$0jbeApI+j)J-*`UndBRT%?5W{CI&Yo7o+1?-Y;@-mQ9(G=5!0~GE zSW_woh|X3AEfNzKiir@6T_gZLrDywT-@VQs@lNpiQ-_*rM|1pvg&NtFp9Cl^+b8Wg zTjcP)3o9HYYsN5oB+}W7n8np^lk;A@1WHzDKiYY89B1V$?Zj58Vy7b~ z@fpgqgJmD}j9xsdT{~HV)yd`sqqeymDpz7W@S*Q*Re7YutRwESvDuYGku z?M%hGO|P12vzLfv$yTTj7tinXTgb)x)4=VGz*TUyB841N^NBAw%w0%dO-H=B+wYP}W5W7?uqyQ3KVi=JN6VM1PAt zInuPe%?X4>Z1luRLPi>46*uK||JNlbC6Y_<>J!9T##|r3uO7fl5LL!NZbn+pAM#m7 zM;v==0ApqRdtVEJ8r{=%&s6h2;B!F`VWIpJYK=~V9}GL6&GshZX5L|bI_~8Bi$I*p zU8_W-S@=vvI(8T^ZOYv?jCZM?%M$El;;y+(WjO&Jna?q_iOJiNVT}LBL6c&&?9N{g4w*{Dtwn&}Q91f1>`wNbMeAb>?$=$lrXCryyi#a`y3xB? zS(tef%~p(C&OWiwFMU3{fDFjVY~S?B|LBirWt$VZu4{^lQ3H|!c3+c=1{U?u8FZZUWkcSt6zwOl?o(8T?Oe3&Zw@Ng+J zDLapBxiF4bH@d2IdhPV~kv$^nQJ*!Azx6bl%US)tQ_&&!C9NsT%h(Qmqp7>r11o;$ zMtco`Z0e;IiDJ7#s~$#7qtHAbwQ9uBXW;j<*SmiWp;DL0Gu}ACIs0e29LjBz1e{L2 z9hEe7uy0fOnN&|(-Ge_KG~xzmZhvmevdwqMnP82C)rZY+9i5-5efHn6guZx0<9Btc zm+HzuL_O}~d(IUvrX;*pdU{M@(AD%Xm4%?8JIQor6Rx3j!DQv{!kQT)V>k!rfoyJr3B1U-Z0MWa$c$}gQgwudX{CaCSi5&i)Uh- zJ(`?|@T1p$%y#jhorI-Z1a9a{S>*jsnIdpTR?Z1NzGzPmk@!!sZ32#%I_QAeBDW?p zm@*TU2-8-f?^Heecy~w%#H|0HR)~PE@!`fKE*}7i7fk*&Yp~+$ zo-K=7$2)bwHcOk{(PMp3f}h&rogIxUV;Dy2 z$0sVVD#7~{M*wT8^eVUh%4Y=02Y2+tIo^@lt$VuFc#fieX3iV%%wQ?yJQL&E(u6li zK=l3#LLj#gSltxtsSiGYViDoWK)fwcTpjnde#TLy73Q#&!4?mjRd8Cc&%-UnfAB?t%$M>01Vu zc^hFGS#W{H?HKb3O&<_(y^a>gr|!@T;)a%B{l9j{TIJKZpB1uw_i|+M)ycSD6%y(u zAvM*lqM#qnZrvlMF7QqwFPX$ri6Vo?S^ZusUD0XmM-h8&QQ$>ipm5p49+reU1|M;4 zwP|kPi~%#Sfnd-|0R!`DXN++`#t|N;zOasBv+DK@shc#3WQVH7_;XT&cGtDi4fqB3 zLvO@BFEiPQpunCp23uPigfEuU-`0BIZMZSE)w3Y(58fc8XLffCjN#+ZW2WiXG0xgs zG;eMdOWeFId8CrPPuyyq8J6%rf!BEyqNQoUlTEpC~sLKbi!1G z*qkjZ4)&e{6i?)OXPN3<_en-=^6VDgyGD!j)wbjT)WU#)huM8Iw@ng={byyHm=PgH z0RPpLy|-_TjYW4gKuGH#dqk6BQH1SI-;e zZ+`OR?4BITN_~XwHTnFU21Q*;n&Lj1_qhMs)avCHT*dP?J7e1ICtPe6dg)KD!8Ib)BVR;F9eJJ*x#wuS)_ig*g_yo1mXE+uCL63)7}1%6`v8 z0-`-;)iX{h)>o}9nzA`9;x~*u?XrH_uAx<7z_RVo&Hn1mWrgU zXHf^&4X^)%&ui+nx|%TFouKBGzrDpAo-FnMyW+{lZWJpAtgVUbXxFttu49PwTabzHgOlX%Q&DC_w-7l)H5?-gy&CK8tj zir&UaC~#jyydd^avJf|`De82)ZNK~WGgSs3r6yM=KORh#o`4I2@Jr~s(n=P@m$#ri zF^65In>0^9(z-wvDpst?=S>BZ~g# zYrHw`k(tPar#R#MM73mAdhF)0`A$U}JLyU(bo0&Kwk)l8qLt)*nLC)bea_bxZUU@G zVc2_I`OV*OCuQXnof&cZx?ml@@Zj>@b>SD3TG~)Tl#kD|fgj`6m(HY|p)e2VoDwT+ zCN$Q*f~BkcR{yvXTDaurg~{X#TO9j;|6KbQdSJ$C$gt@&|7*qQ$5%H#9&6gd7WksT zV>9sV@()&dH>-!I_uj^cN-@r&--EZtMF8GO^f(os9t|Y6-N5uA%qeyhS55x-EJTcc zQv*P*jBr%jk(CoX8cVa~tAvH5dXc|fH?8dkjmV#H=$i~=bu{U@s_8o+3WNa*@nKKs zY`#a3MdWZTFoISDB~|^QE|BvhS=aTA!Ow33+2VUvsfea?F?mlNm0M1TldJ$h{Nd&4 z3b?wX&gzO4I#B1h^hx0qhC&3bdO|lvnwl}nSJW_<1PZgnN#NppZ1m|}lk$ehxP7Vt zjQ^N`TTYcrjE0w)OZ(XS(2zjHTxmtEGIT8FJGhPAX%#Sw#t!}fn+r|xlgavT1*-+2{adU%yw&QQ9Q;24 zXUifE-}8O|wh@#c#(4GO zf{|5d87sQ>SfvP53QOox@ynyJsAtLkU2s zXchk#@NBg)IUQsPI7`PLGvUT)*7TZJtk+CUqc}m0Q|QluYEeNT{v&EWu3pu4q8J>Y z59gdzg?c^$`(dS}~B5UNCd#LVoVL>525msBuXU;ki2Q{ZO*k3BIp=LI3O2+HoioH6OUMOKg8& zEHEjIL~#bwK2@!2E{(`Mn)?`DbM{zyTS!d78`CN~VC;DD(De{SNO}f$>EtSE*l~{o z71J-?WDjz)z6q9vB`(9I)$Cgbj-(-Bh7Hdx34-U4$Ggb!B~x9IC)ab2*IIgP|Ij;G z(!K6&gLU3oQ|zX0R1H`XQM8d<95MkAY;QxA0NMM)OW~vFb~VX+6{X$yf$uW@>eYBR zfY7dv{DZ>OAmu04cVkz@9eN!Sck1-Yne5AJ@fiTQI?rM=1spti3$T~u*|4rBQ$Q2R^EL_&k2#t-%TbI~F%0fKbRIDnf==_H6EJnHd>(-En*<2Dx)WVx`mD%p|9lX3wd9r^)T# z92n0QIC?&kByWm+**dy82epiln%Ah4E*mUktEW?|-qn2EtqJ4W9*af)vV-}Vx=2Rc zw8VIyOlbr@%t*S^)150EwA7ELDp$SCAZ{8p-aBZw*T`u`2D)hAGAw{QF>$X89uth-tztMp=G6vE29SNe$vVBU!jk{} zcfbpykbBOlPyNl9Sn5{AB2t3&BCMXW+TEAec47;5-QdcLD(YodRqD9UOm*y`G` z1Py4jPe#VxN_Za0)->`H(TTms|9XoUD4REQAvj6`*&(AQ7ck6HJqtW{xE!G-G^R&U zOkmcxrUGWjr7l)Y}PF@|t7kq(Fsl7H&Ti(jYV*WgMwEb1=)2+?T zvX;L_zSU*aNavV3+}uXmlGehSjZ4M;O#EcB`Og9)j0pH@9%QIq5;49JxW~7IgD$3_ z|4spVcXh(~9LI+}juXg%x5rM~j`;hvzj6Q!JwmwYL`Z}}DxJEABRn2uXOrn7+@t)tg|E)or9* z>KYi}ut#RamKl3UX81O9-h$>>2?OB28RuJMg0L(Yp5oL0l{!uZz~h#%09^U5+bq-5 z7SCsa2Q7QP1TpXmJ7>|t3~U8_d2B1RvLN`E&4D6dZ@12sa`kh z{5~IGtK6T1AQv6fk$3$m4geH!)2~soXy$OS6`{lzz5XMz@8Q`EW;qJ&%joBEg?#k0 z{e{d$|1DYQ(u4p1g1OCKnZI> zFvmyLfK+f?Hzf|1uNEjQr?2>WpF19TgtW?DpjH52-n1_f2EM+ED)pR|OH?DPiTKDx z{@dmmtr@6co>?|Tj#(d9LWP9Ce$YP*RfU$V*;ws4v$x)Cxc2C!Exni-j-08jh%({` zxSKFFYNOve=-!VPX(>1|DADs^D!;furK6VByI{+B+@+OFCe3G@XP}e$gnrujYj=biSPVD$t;d z>9NEh5qPz3PKvA{omF2oV%vOZ&(OO?BIflFcvWs>y8FI7jVR3Xje9lb*y9{=*y)24 zogoG*a^7K#wr6@}^7^v!FvbQuRZ8N<-%$?Dx6Uf9+EZHKKB9h;GIgIvfeL44oF)Tw zugo<1W6_G~VYfw!TZQvRwTVi!R}-p~LP(SOF(PGCz&;vnLMwFS`-kgcw4+tmAB9F1S8#}ym7|CT7fj% z0=nVIULs3eXG2yO0RW^0meb6Zc>) zt|i;wylL2QT&uU$n99IKIgNVOli_ZY*?VlbFwny<@;IOXuo4Sn`mdGt-Sl!BtFyS| zNk6~^=y&RbS@ZBmNyDi{(M>2KGghfLfk;g!Hh3pC^Zb%k1wJ-?m|ZQRn^IY!JGlpv z4@Sal1!BYSH);qrpeD09Nfd-yGqqb8ITR8vBaWOqvs zcO(`9W>u7J%3eCa>GgU7Qp2?r(p`lXv4#QNutvR&VE}Z8PR*;a0Km>duLmReW+lfY zBe&5N^*{;;;Q#T_WGx>p+{3GQL$;+37lg&mut1VbJcrg=ut%R&AE{Jg|3Wl(Mc;uV z6uFW{Jc-feaCw($1!(3}XsXsMw%=&rRrI@(7{R6*Y;o9}n=}ZQfII3GiFds|QgS>^ zpjX?({Tbg-7RNy#G^gLIu2nm>$T`kH-pxJSN-DFG>l~Vbh_#KS+Y-cUFlhxI2YOtv z+-9b6&U$y*NdBH1N}|=cGN$c4%0XL~{r|18q!LqQ6z+?u2>&~#z^;CJccd`GZ}!dd ziViL*p6M5{>q3bKAK2N(#+q-nl-W)77c@@VXU|4r%xO);d7NOB&abgKVG3L#JD<(# zuEH^2&cTcwz{=lsk6^hLMl>#fm5Fvs0RV!z8J_YdM>T13091}I3c7_9?!wxg6%(QS zgWBCB2NtEX1WLX*K1SRC=}HcUd2oP6d;qj?#@`-+O1_yuZCHsl9rk8sd)q+$Y%=u z4*vPfW2%UA&x+QbkuUbK8c{53?$R(Y0>J$E&#<1lHD+4ZR_dgvVl7|kI<36vj#7#Y z67u!3X-^0N^pn<0(fBpNexwD!JLJ!6@OKL;7BfZMlqn{jd{*G2?!g_&Z8ZBJ>{~NC zeRh!t0(o)K7KatUg*^?p&1bGN|Kcbr%0axvS1a1Gt*9DovINa)^El5IdDJvxtngg> zp^@@=eO>e$YK)%2e-G~Lj2lkWz3KU&lGJ=zZ2m(Pw6j4gykjopw100gcLd+V;%}QopL8{zbvt7{#qSmjsxA zWi^HYxz1?^W%k)QQIPd3$tp-ij`wu~PP2nt42+OCt^>mzx8P9=bC1xS2ZF+{-W-2* z?&YHgHaQiQ>cYq(nb`C&6RCflR3YfQNcgB&?56!%FhHY5Xp?oVbGdr3v;lwd7the@ z5N#MszI1A)a9*VA9`UY=tQcUTwJ?cwz`(s&h%)SejhyGviCBr9haZDd>bw{_li`wX=)!gPN-Cpf3 z=tIBheTZ(BN+6{9m=4Tx>U4@3WT)%k}0yg8aahfULa_+5;!KOyhU(i1X!!qc_Akx z;={(3r5XfPtRk$0QK;!SbR-z@n)W|XQGvqCb!$54`#b4{dtI3Tu8@Nc-B&awqW8$x zzD1xt&D0r$Dz+xPZKjI1pnf3Kk8Fd_sxZQFaMC6h6cinu0Gwz+`fmX%J|zsO1)gf`sP-^J=rR?g)V$n&Z^BTo8jm({k!(jz307nc-6VV}T`2lyEf&%B0_9 zf_)zD=0L>5PVjKfc8E(pJFq?O9p!_Jxra%e=C3=T7BJ5aHnb5cC51lVAuo<;_)=IT!`vNWi(rvuB>(4|&}YGT(&F?}}_j()ik8sXG;R#4TeZxxtQ z#`HBBE&ypo5_Hrb(ewqETH~C$SR4B!0z~6TS}K2KpEHl9@v~LLs1cw$zsZ8 zwO&8hS-YeKa4D>!O@KnXR7(9zK2e?by6hs6@Y0Y0$htJcRzXL0Ga;X0bC?px^EhFERk?S9UegDI? z!s-s3d=>}2d;m=ZoVFEl?jSfluA7#JI{BZkqqYqP7dEJfp~ugrPofslvZq2Y=V0yU ztFOC|xMvEO@`U=7L^~M80iba%Wic0IaDZWivYG>&J4P5*W3`#$UD?D`WfK}fpPSN3 zYZ~^SqRmr5bB>)|D8q#Dl2jT-WDC%Ic*<6%!^_F#yI*FHIOx~>&q!0(G%@|FcjU**u<^=V zGJvZW;BDo*{P~0Fq?`5)W{EKN^@Bb-9ZE`RG*NX=8XF#NigUtk{)>;Y1%SIU>Q6br zG3fHETLayhdd7TVI)F=83hg(iK6H@kSZ45s?fz1b=+Y(#?4b=fS*(=zVKRl ze#T|m-6eV&^?|R}My;=h<5)&rPcH z^D@CBCv|}$=NNit!%Dq&L%oqh=JXr<-1JDZ8_)OZm(q0!NS?|Xr6oh#A`L!oalg}Y z%cm0j@$gVOYpcc|mm_=tRiZJGRo!MJ7KKs z>h_hSE5b`(OqwUcK)f}vSaTHR^L9KW>Ipg$by7vT!p&f+L$3XJQlGk4TW#Jr&ycAE zS0dwPdi1&6>`40L9aqj5kkzePQz-FrOB|RU|b14xxxp9pfav5(GF@ z(SKxp6I|0J!up|cU30^U+bJxeZ3lpP8u;|Wf@&s&r!J(yc?Q-B%u?i}8%5VuaExct zmG|ucmsY}`L@kf^jLuU*(-0R0S%VN; zg=lL4_4&jt47u0*BxZIN=ZIZ` zE(Rn_fO;J85%0Ht1DF><(-Q)Es!j_T_|Hk*r2)B#x*(nQhp&0sn@Cb^pG;|^g)D8w zHt;We)yIjHXv}(=i3$puy4x6yUNr}IP`zTG0ThU2pgTTwifu;D z2d?ae`&!b5=40fvqJ8#}ws7apDY(DRCDJD|ctjV1Y%b@X@nW@=*160x4~u053{>H* zw$zphU(1g9JNVGXZj{AYp~=Q`qxws)-@k};LwLiDP@zTiZV$F;oR(7dZMNx|`*QZm@fu`J`h5X^m8QT{n?wJoWy~ z2g4}`OcqJoYv`P=GpCrR_0LwGf8$cuwz1#;bS3|AgK-0=nH2%sU{+_1@geDL@uGzO z#}8&-K!)7)>S1-EzUvg%m15yxQD#C61qe|Vt@wO{`H#^!9mSd?f&uyZ`yz8<3PJi= zI{?AL%cL6u&SVZ)ASe6;FaprD?d5+3Pn23vN{m1Qv3~1=#OzC-(#Jt>xj=k>a&xf_!(_qSetXJjz}{*PEB1U_VqvhQjw6RZ3X|EL z6QfJUwrqI9fR$WF)^ZLg%D8Cp$ewt)FJken?&j-a3u^btlGa9P$;z}7$3EGVFE|F* zWHb|o#Ai$5j=^M9R|h6}cQqo-?T`yP#1~3lk9vH%e8zjmCl(~Lvg+iC`s?fqqYv)e zdy4elwR|brB@_9qc`ccr)2OEI=W?UMZH&`dq1Xti7`_e1MlG*hZ=L+GZdvoo zQ{S>W)vDdmGG5eKSao|7h_~mg$}6^mH*dtlcqs z(H)VG)G}$$U>td2uo!>dot>W-BZ&;Iz0kxI6>B147R8|1w80cwA^jnyHGA3O@xcJg zEIYoqtk?0GykK4gM;dDpA3RV%*PCa|`bV#%$J!uva^atDA1PAEF}=ik-u@%nP%rK|hzU^do?URy=k`!i9L)7OEPdn#LX+&_-YI<5j+ zoBt(!y#}H-gK>zWN+%$R90M;$*Yb#V`6cajr@b;y_VDV(2 z<42i@^fL=u#7CQ5n16g*cCvmUr{};ceS2ao$NLi9c;)Q0@9B2~_%+Db)8h{@hEG4w zad02FbbQR#I8Wjl_W`vt80bHr^3nR_WT0~x3$a*Mh7JsF%wo*c&cj$R{Mp8kdfvHx zaglE30#SUd(#!soGjX}9oL9of47W^Rw*cbA&_>L%T3HMOe{wXz|Xm z!sw=aB4N_9DOrW{8oRxWCiT!z#GYgn&wZS$~jZi{uli+EMtNFg|J?}TG#pPdKm zfh2)(QaZr8V@SX3cY6E@|d(*7k%>{4{AAgCvZ^b0VGZaB_A&C?H>ahaKt6BkXs z2tBIk+vlTX^m77HDZgCiiR5-Ya^zi+{B+*Tx{edNTBmY z!~}sdw)Fah4@zR{J!)wtozQ(!Co>OVRol+X4^?aKLoxr=f!UpXcWh!H<~b|S9l2{k-3^^&OuBB^Sg$T}JN<@tYz`?Rmoqia5x{1B%oQRFB zMe6k3>ym$iuPF1!L49}Kh9 z+yfUCYiEyB?KkfETK{3^Tgk-sySuK&?*tC%q4A*0g4{zU^ncD#U5z_U_&rCX+Vw3a zO7H!%>_vN@JRKBz8Fc_#tU~~)Qw}=k#BC54R`$wKj@;O>C4280*Vo2+wR?NNPh)di z*6h<3VV2PRF05WQ!F)Q=R9l`v0A>-~|qS0a2E(r&P?>xk7( z$C=n9x)aiT_gWvwnCYQzFCdhSa!TXc;j#4O>vqd~Btg%#77dQyo|pdP?2iU0_S6kG zcNavDtfaqCV5xTqMN2x%?HdOw-g*f)a+K=1M!DCme!~l#O&;G2`v96TK$8ypC`f)p zGI`>Z%w6Xg`(PcyWhqLU&S+lEIj?tfk#_Dow7eiLR(OEy&Ouh}guWOwfS%e7z%_up zSjP&F4rpaWl7m=!u`G6!4AIq|7@bt~0-Py@Q`py5_%g)0d_T|r>cVf0cMmODzsNXM z;><&J}w%+x*uC>x`imu|zAvK~KMDL@>DdT%F}hGoSdbUPYv$E?=RwcXQ=PMZc%%IRCL=ubtupi& zrzjrSf9u?SXx`EN4WS8#9=!7!jVm5+1>L#GVd%!kV8o155QTVWZ6~^p=Pz&a#ikXk zO~W+EWHEJ^J(F|A!rpZufZbR@A{Uhq3V2US0z6LWaxk$|4j%>hB`SzEh;Te4n4fqY zt;5qHDE#IBnqjLZC1CDh7Z(>saGNmW=oxJrOAzcM1h6!&LfMvd|G*n@fo5H9VPY<# zclubgHk}3|0n9?!4%~IC7>|gSYEe|Y_$&$P_CULZ%`x;4`*}cl<2UIpXLpl>%Sy}g zeS#^$!G{F{S+NjCfN&>$-$&w0!obqL;MlPN-Dd09+zpaF$G6wAo&@dDC^A>;_qS?xPg2?%HqN(4-;y1Fm)2E)e1SCe!;q;fP;E zsW$*|kcD>Vd?ULLvW|yKYW@zZn0#_4;e78$&H=z55BlTh0{K<0cT(+Kd0(XHG;yL7 zoxHQ+`^O`RA^Bb|h_6RsBv7ftc0D-2z{ZM`)6jcE^R3*R4fzW?z9OV%L|;hqJgwyl zb#PK%@RFsEKb|(zZPsHJri_(du%Mfiw4fd%&hPcr9{H&VHf>A{4FE<0-d?FSUMWfj z%7XAf+RFB!?qWu6n|%Bny{6rQA8GKW(6D^Ow++QO8L2S^$VcVK?=^O(L-Xg{aBo@WZJj8}=mxAiTD84f z?_Bg~^}PzU_N;;Jz8wjkEGU78>jjRdl4`A(XZLy_VIGCCOtMuOs!dTF#4hAd0%q-2 z)*t7XurGT|)MAgd@_ynx-Im$R^$z4-;*}TwnKJtxdgw!DpNG#7E@ZpZ{>SbfD;7xYNNq-+C%P zdpUQkGz+Z)2p;u1Fr-hry{kr~H|=s^Jl`}e`gSnl8H_g0MWh^XwE$x*k16+*SqdbU z1G<66`39Y|nE|nt`krR=mz)WgvSas-&kbHAy<#iqTV)NL`B)GQ)Sz<@x`%ROadN)WB?%)BFKuJKS1WekCMwCyoeuvr*#ERL7Ppg(JE22 zHunbuR3@+##%+|NK~8&1Ihig%M-QNB>f?Ghh0051vQE0kAZK7 ziuVRH{+U`Q8=_>QnWpg`!J#%*GdcQ^~QptRF)tWN29Sl57wKJ-V@jL}yF!kwvT$}cC z&Vs83Xo8rWTk^`qdL~zUQJtF~3eaQAX;T0oY^DSQ+Qp|2f>UOoZLE#r!yl$?OKhs^ z0lWwBCmWfI*zU2D>afi!n1C^Ru5AMd!en%(tK(m#xaQ+WSgVR%8u#&^T!(>D`I1=_ z-M1L9s9Gh)=i4)bQsebJR45CsS4=K;wMYFrE^ZA1V$*1Aa^;Xh|zQ8$R-& z7%kQIO7Z_iJ>1%MoHK(CLO_o{l6UtI(|7qAzq**k7NBDq?9r)L00VZyg`4>p5CB%! z;kL_gZexlSGb=Or+HYyH(H7(Oj3xUxlHJYe`7M6Th-)iH>wdBBdEEkPtS~yG5X7x& z2rAgkHvZ#?c0KUUnFV?bOoINXjasBvxekyOR23Gv0wFPQ(Z<|DGq^FTJ1Kd``r0%& ze453MO+pz&9{Gw8b@fc>!jCkjdN}g=QlhXb&1THyWdHY zwg*38O-AmU7O#k3E)_VuJ=A=s4!IFOPYTM8e8mDoMgRcUNVA^5a@}|cLG0qX4!y1= z4O&xRfL|&-_1fT^Ki($k&_n#&nC;>%>r-9j;;H3Qzk3xr!2nx|HWRYLrwW*Y02Cjy znlD1a53k6@(8vD1l8@M=6-+a$7&D@h3&vXN-W%}_%%Rz-P78nF>4IVkUUnzbjERQ~ zy`<>r53EPpn+#yk34ZRcT?n8HOq%Dt1p&EL!82bw zh>zbyA_h!i6xCpBgHe?FtjlHgAYhy z6!>gM%#eb>K<$@0w26aT3(Kx17H#EVMW#q1KW_Qh_^22W(26pZVhsu}3jB~Ca%S@x z?UfcR@p;6?kBJgHFLa?@wOo_lj5Nk2XCJej|DTsH`<7Kd@G>^-#v$a^Z?rG6kwnYq z#Dcr}>1a7LK8r_^@;z9ebrDqeu5-K9(9Hg`T0f{Z54;D+S}1_3C!EcC#5Q>3@$xzF zosBvwkfAz_=89Y=LwmX3?w!AAb)2a$V~7PHDnv@2=_b%bmh87A5%_DKE`0{|?E%5L zZX?B0N)wn!_;1j`m1!G&P%~Z>ShP4`PQn*YL*5*bUAF#6KydL^!xG&qFB>H4e?}{h z4aDwUb>umN3mp_y(CX^i9urUcgLZwzcQ-CYjfpfE<|lhg#BaW!|In)+X4cQr7)8^G)J4_vXBu7FAc4joRJc{|1Glj_g*uUaWyOs>4eS+X1HuOsuOGW*oSQ8e zt8_4Oi$c$O#{YZn&~XrrKI8W2PPNvzeQvbUZ3UKx^*&_tb^u}7|6R22V2$?)r�` zZJrfUbt>wVEjnP`oy#D-G2|~@8t3b66VDiwd(-5-)G(@+4;|t)S&GEWHQmzeX*F+z zvgB00%d~U;VgK6qxhkOXPJ@3EBjp+YD7C>#aAS{AHQIly{j5`@aG>SMg(%2F#q4+3 zKNsa8p?LlC+Y&(SY-y9*LS*@n*JPb#6n1I-Xb6R*7&Q)IauKn|`{wFf0mdnUc)OF_ zR^y`m+3K5C)tNjL7_APXBpb_=Pnq-ZMYoZs?y%3{2j~!QogB@DYWLBUu-#ke{195s!6*tWtbCLbf3bY7m zO7c}2Lu9^^8(~7@DuFZRp%R&jDs(9B?@$P>!H9v#)!NCU_qLL#T_| zML5mfp`m+dv&+LhDC7DMDgw0tILo6{ss(o_1+WrW>>J<|ekS!`yT5iRvpv|@BwV;% zlUdgW-1VxNI9ud}Opnql$CGcNy=B+UoIJSnTZXax`AZz0%8?dQnan?y`sd}q6AE1| zwb|imh1eXxPts5aJifg1-@xTJY|n*#k#*itO3H=l99Z8I#~Z%?L-e|&Q3m9XQluOX-l~B9^s~eR!riKn5f(K zQ2i9_iKYwlflCgtyKwj!i-s&)D_O8}NBhY4pvDc?OYQgWmWKPhS4VQ+YV?v+A4q>b zFY+p4yryiUtpTiZ5uH5&H4isPph{+t^G7bA2uFJ{o0X)6LU1IhKWR}eWOYi7!Y)*5 z-?HZtBGz2FPzI9SvGt`befnhRm;pLvKGsh&6Q{no`=o<7S zysLLI;BwIUYihzqjE!J*v=tldJy&nD$x?iOI3f!mEROvo8H=)a7wdy&Q6)7uU1 zqX$#p}vYOLP4&Mgz7upN3+;t`F#~X%OnmMLM<}*~DrH z(c6^0s35Cv1FV*FLM%}9Tt9t_0d8Fi3<(Y1fMy?^4aA z%G+uEU|d&v=1NQBfT4NFS%QrPc!`P8RuXOzHh`dD{jV<_uAb|IPDS?`K2Q)VLDQ_% zamFB3kHZ(P&6geM%u0k%Q2Ax3F}J0gBvzL#>%?Ho~F*isX ztFB41VCX*B`%l`24{;k|LTVh9Q1)jpWlCnL@Fv$8n8$yRh~ zVMI?X@zeWq#(s(*E{@zxJWhJ*WNS8{)R8|pqthq9nN&P;%VSj((x9eV(+qL$GO;ex z4vm+KEYmo#7q$ZvpIUwn*t&xBl*?<{FL6D6Ye9n)V4EqCr%eeEXdD>L5&#tA?EK@^ z3$C8>{u~w}{9dpz1)IVJK6M+^))!$;IQJ?uKOES)?QEhw!T@k}$D8jfGX` zIAyr3w2&Q2519Q#n_P<>{}UR293}j>h<5m&_(3z+eAVwr!;7udmdQQ)BokJqwe(j5S%m>q2xz(C;g)WsVt1D|b7eo)x1R%}d{{3(Y&_ zIs8rZyGTC|0b1G?U;^3Kd(F;E^oLE@R~r|eKSF&mW6*=2TjxmVK9_%WV-r-&!7!GO zimfuuR#>K9z4kyU<+R^|44M(l`;8*~iQQAKi2m8MeQeXQ(s`Nl~J;djO1=bW;R9Rf#Ro6fivx5FU(fl{%2sL;^m^9YTUvkoPz&l>Pc)4 zPrqfc{!9?VrxaoyG^SizagclzPm_ zNHP#S5gkW%j!(&`v0!GKsrO2hKO+)-4~IRQNCSq3zD@LZ;4!yf=jo)5F-m$j;W@YPeFn95z%wwmEQwMsQ zo;MgrEeoHq=57Atk8M%vK1GfT>S<4r$*0Oy&qH+rde}C_#&k9fROe z#zE><(JlO|zs}#CjRlD5dU>-|qb(==Rg~&K{ZyZ@9o@KHL2?VHBBt`ush@8*KRv-@ z$AzON*PT?Flqa8a(Dbafsd?xCGF!Np1W2_LuLIy2HVNv!aSa_-#%jU4tRwqoEw=uR ze5I|}&U^jvU4)^BZ6K^9#3|Ra5N~XhS+LSS_T+W5s#>Rm8C%z6<-g_!r|9M$&C;E_ zeY+C$4Je6uQJRNa`3E|hr95@GCbL#igFRdc) zz!9zo+n&6SeD$nQk`nxU)!D<3QvZH-8zx_8pI*8wpzKDS{RU~ovhoN_y+32ugz{HyrhVcNbWSi3Ys7gQ(Hq!G!=dx`*9O+Mm^Pu>=1<4w(i< zvu^O}kM~?HBS-fnqf`dm(A(-`DY--Hhaaxg8fHYWq7IDdHjk})nAY$zH8=KpE^~;W zv-Irw@_mjs5!T=0Apkp8PWI&ug%h!Sz*LyeO7J5Mgr?UXf7r)9;5%%GEy{AeTi??! zvqB2wSbuy~j@P>K=l1Qd-V~<~8u^wHebR*AO15U+LBixonqT<5`-6)f4XB zs*_)5(C@e4M~u&~+PRk;HY9Z^H`R;WN7LfN9myk)t!OJy?LFyD`RF9>ZolT2vq2e8 zPT}MllW2U8-de`tg$Za$4=dnCX=5633;+BUUd93S-l35QkEJK_iT-Aerep8o9C{Wx z@Ot}RJIyNhUA4#6a62}L8qxq_n4hf`irA?)wf0@@o)?$$OK>epbLNs4L4q?u0GUfz zBT{NQ3+o2f|2%w4OOAgni`dnU9P*M3Cp-viwR>G$J=875egwLm5d5U_Lrd71h1@fK z_LXRnwu?Bx$qW#3IjxofPn~ycd2=!AJvm?JbFpNV^#`Mlsuje9keZCK|3{i1j+x6d zhkvZX-IO&3kmqig+56sev|rZuIj{xISN_T>|3u%J`;|916`9!Ro;M}yyln>BuW;@Sg8QnM&3{Z)5 zY9fNmO)D|~Ev`|YZc2U3vPI0A@D4tr*f+@QEbW>;^4CKi{tgT=&alv*usL7m`ekm| z8{ZJ~89I92;f$;4CD*^V1EkAbW^SWHMc?o$Co^xC<7>)qo#5v@(hd)bIVevgk>vl zM;-i_wF*lR50Mv3Ky2ItUmsoDk8@Y*CKtNS_M88WCe+6ns#XMb zEw#g;F!h^YhQCY8^;C82PM3>Sty?n?#0)haS@YUf?#HZAw$+abVMlOUajNVZPk0L z`d9L!8m<5GQ*iCFOm1VbHz(6<{bdgqY3)<%Ze*9f?TlHsnYuM&Gs15AViQb(GV{00 z>3q0zYSS;lwxzktxd58^V(lZ$rdHCI16d34`?2^L@ z?|Qczxt)qwXuZiX;Cf8kC%FNb`8a^_^i4qfrw_!>XW~lFx^-pT|Kv?c(&z6D8=q+O!JK^OZ+_04FHzNxo_4R>8FC`cMb_)k$fPy7 zE@Ydm7fAC7EpFB(y?6B^5x*mi25DVqN-%MK>T9n*&gfib`xRl0L&#?zLnFVkpI%Zv z%iQdDCTGvmD@eb9@}r4mv=Pus1v^pF3IqBAp& z8>%XfG{4>KsL-8usn(xS`mJhNn-vuc@V?9~Rv3y#eUM7*A4!Jx3cYS4>BExc25F+U z;L8nH%T~;_ep+3lbjU14pI(ayBT)8u!_(U~0vEaZ=;q{II4^9p`D*85=*71QOtVcv z@X>#NujA=#z}!!K7qepA3dhy}x&j`M`S}B3wSB3M_GZo30RSzWyU%sPeqt)o_3nue z7s+H?3cxGa5M>IoQ}Xdvmt0XjDW!wdZ$KpOp=rIJl~p+EBVt>hA4Z-%y`4+_jRc&V zjjGyCWj>`TL6mo&@ImOMrj2Lhz~H(XloD|??R6>3pYztLx}(UgkmX*9)g7bN>xZL! z#@#-m`2WT3sl{-A|N56J;E8c`o9Iqil7A72kR^3pOQzvWW_4WJ>Aly;p0w}-->gJR z$4#^i*;BIAB^2BP(_dSL4T>Zt<^#;A)UXPiNwDsvld)H?6=*+zwl&yuXP5sl!1goi(Wdn{Rj~ZFqiipwkyEW-5 zRy@DPOnu)RW=^>gb12XutNID*sLNCM5EN%_Y{Ci6gr1 z#`lt|A!5MAEegKnU* zHL)XdNWk|KsXV4=g?O*d?1rOv{yTAv=E?;NK;K{(v~vwsLT0VQ%La9PazDxqkn3y- z5Rqnq z-gqx>yyK1i_WAzz`+v9H_Q!R*c3scc^KpOh>}xk4-54ZufH?1n!nDpKhnM&avbo;L z*0TTx0)%Btzi4=^X1E9Zll!+q?}$^zUkA*RS=EWW5bYc9uHo*WPKm)&1NPaG8HC}oU>do_HGP4P~K1gpCxfej`|8SQG zQH=Q#wB9{K0t(0FBcQ9nyx0NN%bdioXuTkhucc^RC-ZjwcA*rZ z=4UdSrISHoZBQ!ICa^lWLv|B#tEKgGw85aKjOQp14 zQo82q+5Bl;qY57Nvg*+?Cc+N z6-T|n-#CTHVP3&#E{UCbG3?9Beyw@H!r~t}uP$M2<(<48AF#%HnBl>wou4>ef@P-# zGr;8;k!NvFJvt=p^Xt(Q^N!3c^|P?`bWDHzX0(h%IzCjUy&qD~-2T^SOYkD?8>-aw z{j)!-^$r|%w9%$`#Tru&{S!8kb6-OJvE7!rC);pYq`9_J_H<6z&v|I*mZ?Xd*r+$$ zT5N&>S5sXH*8NoPaYZjVNX|w}_{9l2#6ktuZ^QU)5Ett$ToFnguz1^OlJX@+VzX1K zHzf_VTsdR`lU8yq*E=dl=D&a%#rk)uMWr5#b7Q3CyBP0Mtdfmm2{kD|a+=kOlnX?M zbC}PEOuBUNhU>~)VX<&1w+!p~QgZ+8qIO5gTch<=D+$aZ&$CU9@-;Je^ljW{1{b*y zW_tBEL^@*_b>-PNj>7tw6w9XH+rsS-#@)t4YqPWfH;CQ@g&MK~cz?BZeJc73J!ibA z1xNfJUBPAXKKMNOi6A&_oHZoxebWsRW8#wBEMz70TgA2Ova688%XAkgjUL zYt*YA`ExYnem|;V#*?f^<|A(BNWYc@DS9@mwpzg{7GJ~C8jd|X3nQNE_ILM?3jLy|OUPOnaK*wsQ?e}BD zB6J7)6&}(&e8e9DRH~ksiAoLA+6v>tQm>B1m}LDj!V!S4^n~>yAZYXccXj2#&Q@t? z(>qlGhleeDtVL+>G;$d4oU7#@zP--{lN;>COxi}Es}wjYVNXh)X|dI%oMb>ry(axl(Qy}^zKnn8 zU21BPstT=5W*4~UOuAWmHIU7v{T{9!*f8^83M5CT1@xJrCKdCa{tuc!fYssy4gi$* z&M#&~8tXQCgn?f3^$_X^8{<%*&`tY-)(B-V&>T~`b*cftriWRHVgMpT&S>E)X!M2_ zv*M&by33WejWQRTpz`(ITa~Q&komJ+YLpeh4$oAh9`E(6u<8Wf=MF8#Crs)E$RqT+ zRp?rvo(#)VO^W!3EkA5U+a`s%g{XyK56a>WPl>}RNI408SV#p^yQN~q0~slTF^)^& z=V$m}YWEiwTdN^|Tq|c?B$ID@j#J|8ih#M(IB$)PXJHFXdbn?G4u00Ux%4Ca--e0$ ztxVD39FE=kB|#>+UebJhag}nV67LFEh-e`VF7Ol1S+#ZiAPEfA1U>cLWq>!_VC}rR zW^qn_8O9X>OlR?U9DKjl$N)fhn!W@8VV$e2iNSg7tW^S}gi@y+D_^4tox>;$6KIL# z>&n=TPJh~#PY5JE=Usdt&RK44ZzqY^rXMeK{M+8ud(+ZKK05nuu+fWy7^!h>)J`V$ z`Hx#`vSM9KWF6-nb#G5$3Q!0E#69wNfK*nP_*INMs!@#k%7o^8nVb;lj0unz81o9y zA(~cL*Y~AARf(xjRRoQ6;f9exr`U}_={~UrBCWZ%wdL%F#ifrqS!bI%uDi66K9W4I zZl+jM(m}oFq(?^_SvX`USe>H6y39T}xA=ohZ<9=_=RO9SI|>b^*eF9LLb}7e;i9Wi zcCK!;9MRQ4rt_(}j9?6EBG3FXlK1)Rc|-?#l6^JTy_)K=r#^zer9PNoMsFeo;Q2gM zxd&9dGBTW8~&OL)D} zJ<l*q1)y$`KK(W)a^O9<*3nT*GgKqS_n0uwmq`k$(xqqsJid=}=#Td}&*P6N+nYsZ z2ATQ73XU*(cRnW4)u!0un3+CfhO+Zjw#lG$W5Bi_AdT&LDCpNvqW|tYd!y0j(Sqd` z|J=vs`--9hI$u(o0rK+BbELC8?6Xg1Wbe+_++!Lso&^v`GzHGOg(%jZ^_GJSgb=GJ z-l02dG*=`0uE>xA8b;BgP@)6aVz2aiT@DwZcf;2O-m_1K`_MhryvfZHG+n(Z=&D)F zCC6s$$xtZR{rd#kBjxbGSjSUzrYhfYI%@DkX*MO-;??gm8J4#8T+1=CiIIAgUwN3} z;IcDze@(pgZym1o9kT#+_O~tQm5v5|*vpJ4LD#Ig2mxnsKl3j&SUoVD-W0o#-XY5^ zC)Yjjbr9xb5MtC&WM-}45>$Nq_4PSz5A&l}Utc>l8L^*$vp+3eMa?|P+R*X0nbr%2aVR|p+Voz7o^f$F10rQG`w|(=pm9Mc5FQ{hO%t5a z((LaRnhTiV0^d-#$IxYav8`n{0STAam-2_SR=B4aTodZoa^FS&jd|%k5l21t%8r57 zJ4@X>5HDRMeOL`c2zr!BYh!Njl2VNrx--N*LiXNY4k+9|bmIa2d%gPj<>r<$-lZ@4 z6xD{7u()g{>4*Sz?QO;%#`qpJsX^se!gm-}VJHgBIkxz)9%^$u7{$`pUSA1cmOp zvUmY$M4veR4YO(%V=4uBJn|(e0WCNE8>Wx4IZ*=I3_>OF05_gvivVTK=YsaAQ+A6U z_a^r=Lq3ASZX>i+3Yy!F`xztrWJCLk=laSh&!l9*-6H>S6gfK_wPUqir?I)A>(Zem z87p*wO*|NKP{1a)$g;1`ha%Kl&<4Uyh!^QDDpKR+WrB)i^GWsKCb_?}$By0q&~?Z_ z9D>0xAu~C8fjo@?9JWf@elb*Jt%ZOn)k<^zcC+tZR@taXDL8E6y5Tfb8SLla1Z@Vr zw0wW#8NW@u!xRB3AR;d4-O6XvWo`m*y$jnR5B=Yx}!4#29)r8j`qV6fF`-oCEIXH9Dq;k%npSMRUc zwRWXxv^QjrO?JHiw3?Xc>ffg zaD+V0BN6%AyR{Il3t5Ln@I!2J)wbhrWmE^1zncszkO5{)cOgU|80zUF`6oRJ9d&Gl zJa0!O29`xR@i3um_Vk9(M477>pK?b{n13HE6OeX5dJq#Gp|FkRV2(g|MM`wLigfHB zzaePuz!hQ(Al54*kE&smo+z8GhgA`7-}Lvoi^jwN^=xv9=7`_`dWSx>gb6+4r*|=- zQCWdf)}*6QCe?9Dg#Hbp`$9koME_exgC*!0ST}7DTf@|E-x?u^zVs}$l!(WD+WaJl&3BL0!`G^I(8^GYVDr5DXsn%YfMSih9c)#T=Se{u7&xvbbEJTU z6v%>zJSniSt7W}60=Zu~^2bKAd?%yx#6A1obuF#j<+rk1FDAUm4|=m0it>nCYSh(n09bRW zdVi>qwI9UH)xT|m5_{o*| z3-~LD9i9)>7~|pOUG*tP^nl zgs~{iWjiS$3ox0Zi}NVfpaKd#R57SYrZbYLvwwn_3V)JI?ZA}=!irI(^**~GKR5ks z7w!w9yUwpg3HrYw$FvIC4;lTN32+}8xUY$8)6iyA6e15Ohv~~7|8ayo=h3~OaIx0_ zOuZ||8L)vtK5a^#snwAFVbc@5fc-MNJL-AUsniiUdh-+FB`Jv~1Fw@k5L0X0pRWMRfff)C_-M=}Br#F?DGr zc@vjv!#tbHICXKic^4|wstNT+0cFR%RcPtjHyRRAJ@^lkK7}mHLuhaKR3Z$d@u?3q z6dnvX3P@+<`!wrQe1MFFpNE2(V0j&zA}0;YC@s>f*B@ct31~iQFh0Cx@f_|9Om5Hv zx`C2yX23dg+Su8ozcsXfKhxb*lxOgEKU2zA^Z5Z^08hECqA6)uMS5Niq-rRGvia$M zQm527r&r|XOaev)($&NfW^pQrJtHL$lU$xp+1|wB1**P5ZCPTwjGXXiHYmjkbt(AQ zThIP^WDdK#@Jvr=;Bu?GN66}}r^!ttjh?A?M!UuSbJztaz}1|I0yLp3J06IW5>~I7 zV~#9Cb6kIi>K-Ik2Q&dXN9M?f3@ahJgO56Kz`q3cw-TPLE_;;ABsP>Cj^dGKQ@2~I z2oAi2k6Rzb&zSIUF0MMP6OC3y-X$EH(L?cZc~X-=WdchI1PW2D3LL=Jt{l@VPZ>wN=D=qjSuuVhFE(UIBzfm>NI&&#%T1x+ihe0@$&njA;PB&8F z&H&`W>58pR2KqYY2%`2N=!>@&pEskwMV|RP(Li_IZITKGk}HMOYd>hwcEn4GyZ&yV z)R+OxgBKJ(c3j7U3^gAWXZlt)aMu^;XIegB>wF19askZ)PSx2YKl%Cp1FP8d^P13O z0Qn4`^eq0xS|t!AxV@=oeDtec6rxtbD8F}49w{)h_in!BnL$kAs;4AFNO-S^x<8OS z!6sYQ!*5m8Ht*Z#1_5eV^xm3*@lgQ7!##&-$JNicYU(FG1;a!+!?f>e8b=PG)#T3z zO>_ZpjvAuFFBWQl>+8P)>jl&<1Z}o_3JYO6*x-ubT_vhYd8g?gZP)6+)f5C>&fK-{ zPn-i^@2%eRM!@o*HzVt}mkVeEi+8nkHZ%x9 z)e5tZjJ^80IynAbUp6F^i_kNety1)ZIcsAcg46rVoej`2vc~!d?4KG^uE-xU+qYiZ z_;wHg=E+jO!?byVeLB4CArC!S1N^C>Y*TO5M!UH4u!{szv$Y@ZaOuxh!JF+#yDOOB zAhJyYgS_Im=i*6-sRr^2+f@poF7jA!m-$%(bHi0Cp4AY3lhGc zze}t(mvlJZLI`>-ZqbMNXOg(&aS!dIhsD;Wr^qJN8#hZiy;nx4PJ|y%)tmzS$eiTP zT=g=*DvJC&qE1rvN6>!rtqvMkh7`4YT1V3$(fJs6qV!ZD=TA{ z8Xi2wFd^x7)q*M3L8u3m$rM7{DmFx;oV#yR;%B@ri)mElHPvHfEfNS=B?#YfLrg0l2+#&w`gnJ+K1l< zbsYS$_@pZa_fTbD$3rD-tV&OtDHK}!dNk$lXQWRmtXZ>o5y4aik9u{aTcfBBw;~GM zTc@)gP!Wc0q49cW$9(7RX6t^NewEK@Gj60ZY~DlR23;na2Oj%l$aLd_6TUDUyS0cb zi-^yE?^EQyTmJ8hQPOm;q)G7OG?BpMI*W~?9sfFE%uXr9P*$arP8oYifXDlv_bu_Q zeqMWP>L^>$(p6Q~chIkj_VVQ#I)N!9>zO~1+M)De8yt#q&egB7@L^=pe*c1-qixCM zh)XqBeO7yUe`kZ@h3s~BmZ<%C_sHddjh|&7{=Hq^G9cGRsLxlj4EP^pmI8hz4JRPK z8-D-r&x@$V$}p2ttCNT?_oI@CUTY>LjZXYa)ol@!0z^bOllNG5z-C$$F?mMlXp^6p z`WZlzonhHcdk?I8NRtlzK4aa^C}z%{2-rWpAh#(v-Pv;YOQr3p^t7$I zJLg1G3EKCP3`W_wM%rQst-rI-MrLijYw#WJ* z*lNZ6dV*=BkJ4;~Uj0^GS`#Xe_V4H3-O2`gm!<&X=VSfoz-i%hf(`oURH@ymcDTL4 zNbGL>79YSLqDYh!FACEO_IR}!k=|f_D_gu!v6QJz^1U62Bt%ROzYdE(Rn11g13&SP zH`_$i27FjaKU|1PZV>A0IyTIaYWwy7v{MBL+H`iwE_>U>RjRD$ePX*k#p(j`EE&Hk zHzEBYV&>>mPqg?)L99lE|4L;!Z7d;!Q;kY3|A^Z4UpU?qKvjDcVokNvz!HA|1+hF( zroJeANDXLFAqy}EU_D014m9qtijcP0}R>&Gn^;uB}GTcsQD`#(A!H zUc7Zes7Ji=YM0@Gn80+0=(<fS@tzzQE5Hs20ydg89vT`oF`MHpJTlFJ<_^JYi*GbFleKU;g}t zyCv}fh-z+Ne*vMLl^6LFj-h4}}yrEw%xm z1d;EUu(+}gFpXW)hx#mfurgbQZJ$2-P0}t5Zks-^Wdfm2Ju>)X%@?!@mqu0q1x7#V z&D&+C@Qw%XQ61HU3%)q#I0!_AG?-jMdU3iZqCFbh12+8TNC`3TaGrHfP3ZYZ1{^lu z*AB={&nNi6J^RJU)Oe+cvoaR2$Dr_1*81QzDuY_z(+!WTOR-^t<%C2vj$H%eHUsD_ z&(*ll?>E3wIi92qM(bu8hUR?$(A>)iXGijEfV??~I?!7njGSfkAKAlhhnkE2CLO3K z?IOA8^wvXdD5Dlb^~JS+ypFu4O*4u$DlLNs1(P;{iTxo+k(P&m2@{vWiqs3ctq=01 zcE7ee4S|khPgXcz7IyND>E#L#llVX!_EW!TQ-UbdT9xPP#c_sw!Q;VwfIYh&`*#_~ zBuii2-*#%f;{CP+ZT;e^eqVcc9w#!6jjo0P?0&XrlAtEUe^IZ5L8V@TdhT1tRSrr{ zyV94JXD)+X7DnW>ejPLosAx1F;v;pn)}@)P%CdSzhRe}=dE#!AHwE6|WtNm;ugNoM z@dYdM^T5<3_P7Jrac(ty_OQG4aK&8!+>un0@v}awb^4P(Ab4Jr0@JH}F+NtjUXO96 zzY}6z&#({B;zw4|@K-M3Y-(z9(29e4lCv5kWliBm&(YWakAO|D4 zS70SChj!%<&R8lE-Kxi|`W}CI_RS4+vaR{@H4*O3!s2z;&N7A-!OOhl#I=$j?70lF zXHn7z2&pv@BBN(kL<^1M(i21}{{^-Dq?frf5c{MsPpMQ0Qf!tz)T|rWtX~j3R=BUuNYbEyji%#9d|{a7*W-8B*aJJmD7P2$N!`$8jV?gbFx{apuXaFCGI1vP6VhUCUAHwz9ZSn?yWx zeSdbPcXht6iX@p3M=6AOfsrmK=R0)4m>`DP=Cs_r2*`t~1`IXm1?dZC1#K{beqUQ? zlmPzNrk`Gm?KUWiJWNz8U1=&{5f`)CMZ(~sek3Sjzjr3jI)^{TuoCkDDPS+icf`1m z2$&UWG0aCqTPE*iT@scH#|mY@l$1yu>4wn~otcaZ*eBc|0EXCUqQ za+E?H(tUe=oCb|jBeU=7>yVSx!3C@oL>%iFo)_fQe_>t^hQtLdxcSjstOXar0)5f5 zeKtAAmq>yGzjKO)8PMN_<%$m zxU48duaI?>S?4VwU>?unX>#2JUw`XSafnK2-$Ho+hZUbGG^y^eX(jrJ+(g~BE1C=} zs>KoG!p}o>&P>MU6r)oUKzMf@Bs==mWe(1fOy$uRAH0s~?8|ViJuw?D65gnVTfA9j z6qq{<4_#P^P=)}^)2dxt5vB%p%9N{h+}ad2%&msGZSRKu<8o!vTB7g#*-q|U($Knz zq5Xwsl?Mw6nx<-YZAM1u1(IHZjaSUL*cf3D2;$`uw07hW(yTW($&$%X>u zJ2rK-q5Kw!kglBkD0Wv^4p#0tl&~8ib_%;!>Fm@Cl?%Gg#rhc~pTH#?T&_7AML-mB zLvQ_{%sn@4;r!cTkg7q96wM@d3+S4+z|{Jo0d~Ad6kdduHkS0{gnuscA%5|BdoJ#N=$H^Q*`^9{_qYP`pY=NN>UWMlq6Z zoXZp@60le%hnO2h-4jlU9JCiAjbm_j;_#{BLzT$lGfj)LE)Gj?4j=nzay}=5CPCQD zTbC3_N8+s-1^J5j7V|UW$_8V$R)$|Jy4clvxW7;LnO_G>=&!1tG!RKw-K1Trf7S!# zld8&pMtdhLUr2_i@{2A@ZhmsQn;2=n>})mB&s*Fd6_AKn>?L;uwM+YnRz@vteME6w zj5U^l%e~0)zgd@SY)p;8wO_0qDy(Il)d3<76auDc?CSc+u#s7zBU4_E64~*E4YPNG2_mAB!Wp$!OY-hC zp4JV6`~-OpjHB)+i}hQ(&D8*2ePs;8t&^Y7J;-mWskf1o1`DmNe#GFKdmULIj2>`_ zynU+HiZYG7T7{xJIxSH@Ad_n*?>XwjhLYH5W?o!`1xR&_UviQd8Q5u_07PFk$l@%k ztFDjnR(?b&H(@p!2~!?HFUZYCjNf zYXiC<^@76Yg*w^1dJH`jlU7Nj$-2$ib(@6C%05)F_-?w4wY4H+p(RSaS&ij0f zaf(-9T{Cz@L4gwT`dsZ^d&b2l7hY;=bDTcbKmyI$D3n|zZ?srqSVaF%X0c{o-M~tQ z#WCZUyIWp!nR{$A3q{oy(=Al56` zrDV#OmC7*O%_25e+k4-;;+sH&ghdfZx4I_T<8j?|bi-$a%;ZrGX@UWrA+Lot~O(WWf>EH$Y@)M2(dUM_aKU%%UIr|kr znI1dynoB~^YjtqICNNsw`>^8SrN`H}z4y4@YYG$QZ{ikU737c$!gfb%`n%^77B!Er zKHI;yJoe)n839yBVJD+TCOn^qMXZ%IUp|K#dHd|ocNT{$JD+!%=dH9r>u+4vu857G zz5p5Pl6i2_#}yqJ{yRpWBs_l7(Xldp24SU-%Z3mON!Z^8q~MKX#lH?b$`p4I*7%lO z+9`&770~Uki8r}4rUYeWv*tckSlu98!zidw17T~z>!z25Zd(_qT;=?IrOfvvTU6zA ztq>9@sj7*LAMyq7Up^-f?Tmw-`o|p21+*^5Yr17#Cw@)LJN~T3i{bja@O<;?5xrIU znAme|t1;sTyTAJF$kP?#)?5K%3wxs$JZDk2Kbd%}qPa7_o&m7`9jV$oA=8-!+^Spv05hpPU)^Is>OMuu<`Oy%v_IM%hS$y2pQ0~JyUp>-Ns$OOp zKS;Yw3>3dfKb4l}N^{Yy(@sa3hD?HU3NdL6+(7N>t3Q_I--+b|68tnrbWWkO?1 zztV0x=@sSKy7SDb;}*1|ud6OUYeMy{{O*!+;w~BFn)fmQm#RgHw~O05*P92nIDFh# z8j|s)eBE%uhw536Q;C&>YB(>j3ZLL?3;K6K|g)M#=uEp$#`>gNa)4}_U#ymjK=8wBd3g` z!=~-OtrjjP-!oL(j3gYhN?-TvRIyG_5nM)J7NRzu%YS1FEZ5++X!4&}KfmxYdehaz zmd!6RRsj~x-7U3i0>`FSak1Mxfj|W|k%6sF0Ik`&nl1n_FtqC3vef(U5x^`vt$+(7 z7_RuQ_t?liz&cGq7Qf)mabmY$6rH$epWBJw3mebeip%&AOW`6uNd7``9)%5rC1?_+ z?J16-%cg*VK#{wzhyk}4(@#(i9KuL8Bq%~?zF=&$nC4jM$1m8R!GO&7sYNIkq%l3_ zs+QrVy!!-Yv@?|82rh{fSC;^{i?QB3fX1`3&IPO7^4x(pNKAMq&8A0XuwkL3`e+R_ z4(|J6YA6Hyt|jX;YVi=wB}yomV!b<8m{VxC%+sNI_7rV(n7&|$zt8le!57Z{ljk)h zT^6K8`;cF?832Ryy=AF$3Crjh`LrX@+S%B(=3Q;|Y99v~US-Df2M&oN+GdXKD4%g~ zF9q)vnU8}t)o2!kRQ}Im!I&|P&hEe%2qwz!v>Ft$V*JF0X;0cX zDui&K()m|SRM9pCez&GwG@YN~oB!t48ju36XW}<;3rpW#3ua=MbpE^N?eaiC_@>hM z$*NB{oL>5)=u0p8G(uk-SB!^{MG3i^W)Ix{md_I6Iht2l%?A!WFQrM*B`@;cL=6Cr z*gs_WKUDbu6A-w6_hBODU*9a6Ey$Y1EoA`JCddEG6E2mDm#ReQYJ{zRu(VT-XOwMp zlI$%hw@D!U`}HV%p)J*G*1?gSoRI6Bi)`PFm)Z+yI-sWWz-~E?!7DBf7dxnD<1k** z)A)d)Al7(#0=({}s& z`y8u59H3A6NyK@AB2X<_;fTWcp46R?#8(UVzEPSF2@jAFdjL1Kt}yblNH^0d9|xDR z(WuVtRT81;{W%0c$mWALHA{^N=$O-OnK*)}htE%!bPcmtOfvCI4*hYRi%Ka?4&J;W%b?b{m^}?XM>?NN7`rLx7sUHjr0~8_(ggj+Za>q z5vCt+Ee6q1n%*TI!fMSS=V|HsXj3AEUmT#3EgM_}WTFo(n4;)b*j^;g4g>e}##K0X z$=v}4`ht&z(M`(XNDiteuhegfR|aQdH!3&|XPU}~(Bh5x9L#R%=R!N1Oo77TLVwU= z%p9o-TcQp0mBX~HOq&}9rmpNf^R2!fD17v_&U?5B^K@|@-ebI1)YI=#@4z9Qsh?}n z5G=w20l_bQFf3TK`AstlAZ_#P5R&+%7ao_4SbL0=W~EOP{f%wPIAz#Wc42uTi|G)} zdp|>TszP#L`&Iiqg-4c4JPNAKrv>&lek>-cws0s3*j06LDpfDEN#%seZq+}Kb>+jwvQ_6@Y(`=@hwhp42xDV5(o@a<|={<>*BsD$HrCiVDtrzXv}S z;S<(E?;QO;3eoA~z|N<8PXql=V$Nv#I}0Cn|2%hI=q*CrD0I zgx*`p!6h0B=R5^4cw!&5`>>F0o&@UwLd#M_N?BWg)oS>&GAY5(>kY`u?Y;XZ#YjIc ziL!>LOiP3touvT!#(xUDv&Q31SDuNGZ3ga`DcRDKr+Z(9y&qnnEhoTeF7rUZ(@8>j z%;cQu*#c92CJ-g-vv?s>qK!4;=$u}9h$*y0H)-6ac3pm-$N}=||8K3-j3{JW>xYkyAP$jojpD(;;E@Lv@9>$yUz8*fM#twx`)k40mwnEDqn_p1)E{|R8hrER@^)5^u%I?6 z$)sFfGiM(k3ylNxHF^XR^xE*rc!9%s5U?JIkXpk^iAq_3ff3w8_6;BClKa-yJ~Q?$ zn0BuVtKYAEzj4U-fbUD(jd(@7VNMcY8Ojlx?NFNyz}~*&xkP*T(5az}P5I2Tl9Y{~e>OECtY5 zRVgMM0FikLluL;{Xb1PA;>tm@y84}j3CiDL?Lx|d(rxwYflwbQaMYqdM(ciW2pBTZ z)7+fGtolM+eDt*tpYn!zIpE-e6NP zQtjQ8Q~iH)aYA5?Cdkk$VU`&mQ?uf8S^#G1;bnttJv>){n#dSO|MWY!ml9-R==$2n zA@^L}0ys$2e-iz{g`1GP!^gt~vxS%wN!WwBVIWBzDtOhN_&d?C1eqv#wnmcDbL#M| zNYf2rf8EBZ)TkZrzku$|L58O;)iC0$iD$ndSg~w;^eO!CfH~Ft9$P$ri;NI2f0WLZ zik-*Q3+<{y9ApT%{X&b`9=1(UEJ!|jc8S6BT%7*GUckojQcvSMEofW>ylHde5axH9 zEKxfaZmUDn$&8CL1a;vS{sOeBh12qJ+j-r@Nm1?oFO_vOArO-|tbXc7<=yeTu2j?XkmWhN@dQ$&GXo$AE z|CKpQvX#?g9i@=u--E7yGC7cMn_X$2*~wU1Nm zjE!H?0u?_Fs?!`Wsfm;g&@%p_YkAUkepyiN^k(gSK4H!I9^Crsvc3G@yN=v9zhpl2 z-F;}LB%_JRKMi#|jpy~pdaMWZ)0G}y$Dhx&nAXIu^C3?~eJ4vsz|+oC@Fu25t<|`>E($Gfs6?Qge>Re_>ei(LTBcRaSqN zFKQk`MBUSm9zyg&@Ru@$R{h!|LApDW4og6Icm!sQfn@U<$9F=@#QGN{3gb);(R}%| z3bg2%_?b1noX-fA+zwXP;Wb4ocnF3EgeK%apMmPiehU>*qzARtA1Md zumK_uaa$RByqWZ#J+XohoN2?DD?{i%*4#4hw>mCak$~Ofguz1!l-H6V)uTDbL*5I_ zf&{SGO|hH_({q%p_l9R4jIPLmG5v$MJyB+hlg;jp&-F=;fx-xksF!dQicxddb;#jy z@?CS_-T1>5YHGu!5vhl+Pi1sn0*!r6Jm=<;vpm}mOfk+E;4|{|3BcR_Tj*vO9hOfX zvic|o2p(E2xo-7~P6hlWiqa4Koe5J~2RTEqhKYIFw1mY|-pLH3Ho+^JB7+C{?-VdY z^N8asok0-nxawf$6HBFJVZ)s0OdMw)7Hn&LoePKf&_E3`SE2+$8c+5UN+eIx`{Ag~ zgP1WhMk`Y38*AYTo>wHANQ7526X*$vkNs{Gk138ADT{}IO%z>z8$EAaxph3kL{Nku zFEko^xL$$SjTMEu$EH9S>(|m4L#rj#<_?`GbNTYKnF&ALX@_lvCrZXO%jy6t7=1XD~_em>q@3 z>591py{pgh%fxH-N4O>|>OHBVxR|4tn{2&YQM_h+`f`LD;>zx(3Sk+}(}x>rA3 zE+Ui&OQeV}^R+POrsLjT2e~4JavJi5V)iQDM&hykLKi`=-O%g&3+6i(H?1u$I40px z$4l1jL$I=@tmWyHbcMKH6fo5HuOjkk|N6QTTp4O2aH}@)Rn80Qp5lU=NZhI7Jt0mZ zVP~=)AeGJ-Oa;suQ3jR6RKgT5|I9&8Z0JRJCqHFBl?Ptc)n#zZzf=bg-B{qBM*Xn< zIs_Frr_8W%CX8S^07<@0e4Lozy8|}++;H5mu;M*&SXII{E4cr2!1MU1&^~0}vxKA8 z;%VQ4yU^fs)o5qd;C!3WBhRR%W>d=(#QGzElRtU;?g59z6OSsQ+ss1nQ)hSjpKbp3 ze)*pFoW!X1e&^t!sYhO>B^OR6Cq}(UL5?OwQ_9~*mg8`ae@%4UM(d!2{wcRE1zr7a z<4*)O#*jnmQI#$xzx$lp;6T)=E2W!?B`%>o+P_YoEh2C@KPzzEpBsBNhoYXktPzY5 z0>HZ5fj_G@9`PGQ|5Um-PRWiAPV7BSE)MJWe{)f&2zj7(iW)Pryz}qXxU&hNr#hk2 zAs@(D1vjrzH_G}q-i*6^Qnh&63qiyJljJswZfskIG zfIgp};Ogm$VNhz%Rv}J`@|=VfYKxj946eT6#+SP@wCuxko8fEv1WrFt z+h$g~3&wf9OMxlh%nspn_n4uS#f!H{3b)i2ZaJNzAi^LiVUyFs!LQ|tlvcC5_8}-4 z@&oq)l@8O)BZhO45=qMEp#G#d6qS4QCjZ#jz=oil$Nu|Xo!OCWmOR+G5y1K0oXWM0 z&N2JXJ>+2~4qs7YrrQCUO9)EfQ2Redeky+*H?X3K_P)84(^MMy`6K7Uy%inF)D@b= zJOHbSqAbGcJdNeK8E4an#)`ECq(k!frqY8I>s!oL^d1lE=&vz+a-u@0(02vXy=lgC z!MyBj;}Z+Ph-#cUlYg{u@JXVSCKM`m-fK>2AbelJz@@Kg3eZ0Q9rn? zyLavOtOsi*A3W45sfPKK#J7`CH?Du;de-HMj<1QPedZOrGnha)qYnxUCN+E1zpORV zr0T8W7;#VP7(nXcm6`|H?!BI2^YIxuN_tMd=7-Xlc`m3!VJGROmxSTcKkNIxTO6$a z>36Um#^~>t{fX7R><>Ygv%=^JoU^9eUKZ7Lg(|W}l=Jq893Wu#x7$3A`ht?x_-V{L zLMTp3a}a($*`M*d0SOZ20xDxT~Z>_zl-C9)S`1t3yd!uqo;WPKv^)Q_=LT6#o-8 zmsYU>gVtVWFQN2fJTo!xN}JD;=@rKRtiVmfHj*1Hrv!6_5!01fG1sCb&(kp-2MP)} z7^wp5g$P%}?v|m)%q8ht5hsF$t2w}xEz7M?pmYCub9;R6pXR#%k&)-0w-3Xc{RfFK z*P}Hrhpn)yo3=}_{o}m&ZQ7f6=|D?UFU!^2?fDf(Pu<(QT#6tuXrj3yAFPyWgBX-; zLaR>HhwU!}r_z7-{q-QoO>qY$Tju``M)7BtyxVZA3qJ6u&Bz%0_})-)-u!*}Na6Xs zu;$s-muC<5Z7&WkCqC_GDe^``zy7q_Y4Y@>ybz@9&R@6HVcAHLB|in9fC#OS)IVze z2Xj&S6JcS+6%bYZna1p8H4zz)E==U4nvA4z_}RSYGm(G03%?|o2Mn1RBDl<2$Bxhc zTFJCOnm6+nsc)$CRdp}?;9rvc%C?L;qkpkQ%8>Li~#5_pKmKpr){U0 zVH^Fug-jd#EIXsor{m2ZJ#jq`nf)l464m@?{`Vu0;9{U>uXRFkssio{h#-H%?4jYAU>YovQ=OZ0C{p*o{R=5i}6d1eD+A4@2b}mI_(Eh(>LlM8G6A zF$t6Zyo|1h#+JKQbC?H&);1w>f1Xx^JLOxS=jL0nVO+k>V=I#**a)6+y!-nvvwxW} z#kAkMluJxbiVp9!sJpa)ZKK4X^)r9n&;|Yn0D>z&8_cM`U@($xp zq$B;rylW8j3l1%}S}b1K&+2 zbrS-Fo)}2r3#o_JF9U zsIeRm)_n8%>6v-{0T^a>*!#ZreZAh<*PHEWeCGpuWH0`)UaJNiOKN-IKD8rt04`5n z7QMFyGZxa(5Iq5_4>bi8!DT+Z<01Q*=b%iorT!6e$){LxosBQwTH(p2@s|8>Oel6ULQTSN4I9;qb`{fgCI z_z&0bl;YiIu4WVEI?NT$OET<7Q_yMA=F<*Un+X9#oNJq7 z&DIt7&pSSlUcPO9)uZ(e)y{OSkE!#9mrPss#C2?gI#E!1bp{~8*7=FY35+nqsItUG z*treOo~>Lqot8F!>>eepld^ZCqyM;s=@3yNd)?pED1+o`(UBYGFb7Y0wD!L}*guwI zc#Jo(M@hDECZIbn+0H&I`O7YML^=Z?hMu@lKY5^?l=vvSBqVgXw^a03aUXkM_W_%3z1+$vqH3JZ2Vvk)O|_6_3{*xMuHkVQOu0 zCwP!kmOC<5;ycWtyRKgM)TK8#S64y`jH+*3^4G&q@X*$xn1%FqgNoG~ws2Y}8WkJu zY?;a!7XfjXe3tIC#g#8d|L#|DKAwBs{%rlpbs@~~S}v;x3e~~#myE>d6BN?(E2iWk zHOfBKxF)Wapk*T#$JJPOc|AB~!yEfRcPZ6!rz3%nc~YA()^pV2qWUlQ_T%4$61r!| zj<|G%)sAl*!o6J|%onLEe!kmN^6KQ3CK$#NQpkD88eMgBpeqHP>xy$>`ft0qRO{VR;-ZOeY+X?UFt}p@)5#uI}l4@xJ zVXW=5hFt2DX$2#h1PA0yIydzA;UvoD3PzM!3@X8T;2{G>p8am$_VAanPHp5=pDTcx zej*0b|K{*MCoj(=(25M31ar5fn;77Pxf?S87;p6`c44cN69L^Ugm5R7CZJ+4xSD_3rECN$7D@1@yYZgh zQ&5qrKA#BiEPAe}!1Cd6li~0h1;o`c?-%vkW5i(%KUSL=Qn6G%TMO$m%wlx_j)mZ} zT^*TtCjqI9Kad}RV9Ql9ryeCj4%1m&;g@;w6(CxfVYx2lGDw&NHAh9L9aEVQ!>O$1 zYhqHAzCYlShI}ACrLM-cKYN-6X#6ZaaY!FSsH9VF1+)T^3-)xD^6Y=p#~`Jum*LEN zu*cic+)nG^`lGnIs$PeZ`s*-r-vGVt?xEOQFlwEOGGNudsqtxh$drZETNI)byLJJ1 zu7Y&Sz2u}MwuEEc%eZ$mfV`c6Ca0dZUZ@M9;B){+Bo2>ggj*$x1V&iaI2`m<62!ez znb14d@WB%sXgy^(T81ZLfzz!BVYZXvFLwd+$5v zE}1p+UwiXZ4HorOCX{7d7WGP;0GC+th?Q&Pl9c!cG!{yF- zkuuU3F6boe^SH{pz2ynleBc^pF;!8K?fJrjhrn~{)>r@YR|)~UL}NS1FSEkr)F%I6 zfDR*+RjKWz2Bl`|rB5~U$nc(ehiKgYdKNt;?h-T4Ps#~jZDjzHNDu%gkN>@S82tov zExrEVNHy?;Yx7N2&PTyg;AET4TPQNF|4`}2WfH}tmmIzI2hkYGwe*|3M*l0l3bzh} zI?nH(vbEqAx^slpJ&AQB!zkziOvsM}{@xw$V^eGV{#!q?^<J)VE10O^JUmdya)Gq`fv92&i<(f({cW*vzP;>^2Ps&9;6=bDqGR2U^sbxqR2dR zMQ;TfAa5Rbw418-vD2s9&zb^+v4I^DyYW^_S2Y@?r1!Skbb^PVw!gO4qW*ARy32vU zR;vr?7G<&1Qk{0;P^elF?Xn)F@*N8ebE(G)F zr8>S&$<{qQ>d*=i(eF@{9K8dS)eDP`rnv=p=4ANwm@cPa898o&K*)egKWhACJV0Cb zK~1L6_{bvz4u!{LxLF+ma&A6ZeAGmY++rSd79}K$N9?~LY@xt6{bgArYms;z86`p{3a|@Quc9p8#WMeLb4~4b#SaHe!o# z0DYUuu*Pn9q>c!%Mn`P-Q9!2B_Di}dT1Or)*iyA=b2_VDLTiMH(CuYiWwu{6c6y1q zyxx4q9Qz&(p;1J9rm-96*tLm>9U`m#L~9jnQqQ(C|7_DCA|4f4h4|VT3MH;jU$Pc= zE${_5)JL*K%1>L>g#0oW1fhOr(>|yP)d1lf+xH9d;g1BrV>Kf`2Nx*VSf5UnDt%7e zUKG<{t55gO)8IELnWL+5e>j9^>6{l5pUrB^{@a$z*o0!W_xll>O>Dv@rR9$<=0I%X zjRM{+-lcqwDNzX+SFZoGQ(-n`V}@Nj8#i$a)F;?~%1C-PW`8FSFVa}Vj*#ahC1L>D zsK&0#3t#}RCPr-aFkqtuxUCKgC9Ux~n+c8$4=@yR>~4T0I`UX0u$6+~;fg7fLI-Dn z>S#PO6i%1XSxwG9JRi^wK;2yv^mmw&>;v2uqo)y8XixX-CDsLEhP3g=Q&5O&Cw&D` z2Qr4%A9f(ewJ#03yGK}eZB}Fy31w~a*6Lw~Cd`Qq{69;~4Tu0f{C}1h!PNbUO2Q5; zg$$(xfq1m13~is&>nhCb{hJ+HX%pSmG1y>hnUOqLkVQaY{0N&Y*Sv_R@k|;`-fn!E zmf8hEWMc9-+!oNVkNL)Q@16Y)wjEIt-5&ITs)jdV=>^n#NMDt7jZTZuUD3kLx$Ow*laLzl_cvHRxt0^i4Zj9 zu)eJPTE*}PY`Z`&kUJh__mZ4n6(}tX0|V@ufNz5Kka<}?m|}5mb2%K|y)-L|mahn5 zCMXnR^>NPM=P=oM#)L>OR1$`o_rv!()g%{2HE?-;ISo1W+nsk?{miHaa7kx z*(NP6x>}P%&rD8ug@!vWbcI+E#8(5Z3+vRt`NNqv>`}Se64s(_wU7dnE`qlf_453* zzC3QIMaEsd2mNR_1CPG2(zTv-L#iAnhHUV{3>)Ner+44}U7~5u48F* zF~B6H&?kaS%{M@$tfd3m|DG?^2c3bf$ck$J$G-$>;Mw6jwJzvf=s%XfU-5L>j=z2S zY1Sg~20FPl|MM|PvKJAH+c_p#I|YaRN$T>5IlriXvrdBcuI5CToxj54eatMR`(>(B}E)gyGDW2XD>_{jlwP zmYMgjt1{O%UTZ+ieFt3|w!TMATr5Vb33{x#$^z%kwryv&l7fck3hW57%hTs<7+jwG z+^S7eUZ^OUn`e^2*Yi==-`Qh~yQcBY-Moa^G54e+$5^WRMQg`g)Y3|!!l{vJ(}(^R zvlVX;6?x#JRP34=ZJ_~3Ai3-v=mtGHa^E?8s^w5@%nRjre!vvhMmD;%7;#pxfmW`F zI+G2ATh*iTSE#Wom;{pruuQ^3OqLVWM=)JwHnU0{ptAsBQ};hXAL!|hB?Mes5#MFT ztLPLXFV(~xjP5#u&vBoRttc$x5}eQ##!N>HBn5eByD>Nf#}HR83VwnsTu%hPzDo1DV~Itpmj{Dpo`GIxBXZb11|sT5RV92}H4}x%SvZa@J%bJB4lX z0M57`!~wE|$5Wqmj9-^l=dy>1?}DMcBYdmd3&@-YyKc|$YHFPA{9LbArVmNdKEKE!^Ay3ymFg485{)0ZvT@0*v+Mit-@>RsMW4Xl`1OjTn#|_rGyIt(t z{L6Ypn_ngh%*MAldkiQ$9FGW|`>C+g1Hlx73KzJ$4m2UC_dOPZcwbR@d|?~6B+gIvDH%9ZDv=&}2bI{Z4CW?+TJ z6agnaXB{E=N7a**0nzbQAmJ}}i4AldOXec@@n-yVSp=|r0ByUlGS8(@0pL1rn8g~8 zrwpr_bYCUCr}xp}ISXz_p;|kXE9Ll6b1eQ`tm9m9<-xd+uEwTAc$pG?#a9lvDL~LS zFDcC@#QW@M)#B`))RBw2@f@+F*0&`L1F8fHba1zNADny*99u8}z31@L2Yj05BaTf7cB#<1pc*4$aq zXduV#IdT`RSsddor9XPK;oF)e?7+!c_)O7{-Hyh2Spj19S)Fq3)B#c@jE_1!=lLmc z-dP}T0Ke=IRPi0`szmJU0A%+U^ral)WgdB-@phocw}7N+j-g9Dm#9$e1rI9>LLDJ}?|y^7^OHv@0a--O}eTMCG2|KXn-MAShgYF<70 zo<1ghHSwa5G{g8{DM&{2XgRd>tgfV$4H~uPP!@rKfZnRCXgzn4HhN8xui%a=EXHm8 zvNTmby(YvjwjUbJ^3BP>F6G6&U`z{1$>g?jm+A@q-HVW|_^D8lof^#!@D2k03N1;D zzk^=YQyHY6>!wA|Yc$G4#au-Vi;h|cnN%mZUfG5+(SjHq;TVEJ!++<9iP`WbV-mX# zz?S?Acxj0>5XdY*9T5_P} zW^@uAQNjpG_d%4XE%T;%Be*b^`ThQD3HtTc262O@1R&@k8#YJ+KvrE^*WQME8I33( z0If_*KLfagty{*WyD^)V2!M5Cv(+eY<(buI7y!PMo;M=M14C)z2FvuVwweZvra@K? ztn}L&uwiX$NuyJ1)AYNFt1o~=9+%7kLjk;t8vKxgd6{YiiE6@?H7p(`R78`nnYLxE^DiiI7E`LwQpmG3uPS zAfA6Hp*f~)T8d(Boguku@5sy_;b3sRU4ap|QhR-P_+WpAu`BhK zIWWMcjzYv)w+Ig*%DVo_qq#o1@6IP({a9-m9qGt!)8(|Q%#}I*Og-(0g7Q#HEOGL! z`HV)ic;$<2p}Bti>6>zxFLjGXNfw2kmJN@!HQ1z1hl=g)7v{OXrGojt=t6l zen(Cqz96y-Z#0kpAS=C>?|zRfYY$%z zk0l%jmg6IqWri{mjB77ENR)QB%P5;RVue6YAGGix{n;{JGA=Y$#`?6Q%)Y=Zj~|Nu z9gu^gh@Vk=!EDWk@_q)P01V)5$Kz=$t?Qw~;hzMR?yWBN+* zqeANavj@r^lYbthOe(2y>|G;mAQQ&4u!${N)V!Ip^&YYo2><0a*{CbN=CO*DRN!rD z5ls6C(e|>T4fiRnN{^k|-8&)K%~!;=hD0cK`PqjMv6x9X;0l6T;^1Qn0|pC({@Q+k zqskroy40>Oivb&4?73ZtTz>7mS7NFC6dT4~8&5#tZ^ zD0n=(@bT`09;%f&7x02z50zv-07B~X2WF#W%e(JeqFj_`O7HpROZ`rDoVW^8YLvZk zTJk6$BR%j{&h{IejOcF&XED1EEU#Ry?O62yGYZlCtGk9pvPc-6e)A(@+J6z9`%cW>>%m9xRFR6KLy@jPhljl=$D>XqL(8sSVI-vXPB7PFE->go zoH~8*38r3XE=V90K|KyrS@Yn+*KbWJbwg!LI;2|t^X-vk<#fU1YzAlj&mTiHb zb@!ItSa#NGr4#2#>$@f?xaMg}fGFERp zxvKoc!oemlHdX-K)MfY-!gxhFc?cdfh*6JV8ru_Pv5Bftc|FyV9T563L_O&V-GOOp z1N;xjHu=h)o3xGN5(eM4v(-MRsztEeCmc#pn`XrB=D)lJl^)+-!D-Q_=z zINq9G|8?ma7B;#K)t8Co3IRU6bVld80U`CRXqRfR^{T!rPTl&@z`p7tBwsjbf^Q-* ztI42vg;hU^`Rx$l_&-h8W^=31Lkh}_@pbvLY35|I?Jw%YlPg?PFjT6ffPLoYi?Sg z*4WUFz)!MRr8<}Fjon!<`%exiO7;gndMkeVCQcbS0cztYMyu4g=YZKu4thomrpmAo z{@um2;v-Pw&ZT`~)S-%!hY0@Jj_1cWYmRQFI;+oo&=`$T0<4`D(?U9{Ts>$-p5P5R z*WiamyR22KhhPW`k%zUTPB*CR!0yt8cQ~+Oz-TGnwRk~9*SvTTF?ba-pe0aMY3Fy4Jg#3pt3Cc;D`|hri8vJzUy;gDkScGSd~llB zmiCffu;PU3-He%UcagxaHRK3+ms&v$)SeCaW_l-lsN~)3D|;iCZ@Z4t+*oPR<9hyR z$@!+(LrtruK@Xn|KAbhh203y!jj_Ra$2!Z%KEN1!J6k&4d$AyN&=VN1OdSnue6u-C zccaNldyM+N>GG+gD_*ZVI|D2f0dJ^>bK;=|2S|53p=pbV9@`W(iWApPfi)^zp`@#x zZGwVM6)8!U&?&5z$lVyS+GmRD8R2_;i`T>6MPMiETWI5kHQRJY<;1F!j24{=Ti%>5o_} z;GZ&O$MXxbZ)u4{)sCPj*bHObp(kLqc+#P1>T$WMs6YWoh#=&!XPugclLDwmw4Sa)qf4 z5nPa6wJ#P^;{UR@X*m-v^;`KOqecm|zKGv#J?&Sf^zi(46Rda6PYZ`IV8xG#k@-S6 zF|ha?3eHXNT;M^Tz2@S(`?63Z@#}a~1^`9|ZhnN4xhjXA&18{T&`4p097Bk!bR+dC zUyG{Aquq=?8Cb?lId`{6l^)9Q2@fb_DJxt2-AxGmW%xPwkS#9Fb&e6b=VkVb+7yb| z)POmRPy^p`*+}cLuH05GH+=5VhbSt}x1eENuT1xFXsRziDO_{2;}A)P03eOrZV1%n zCZ>ipP-aYL=iZhI`~$$FjXr?m`Kha;YRp|d0bFOMdcYa2KrU7hyFWOPyRH$WAF>{+L44xf zr~%+yiTbF^yq}TRs{&cDamRom2Ruw!#`dOpYZ@YhPpknPr}%WsgW3rfvnME-s*=1Vv`$W^Iii^et-;GS7FG)l}x* z?X|Crk{Hoyb^CS^?uoKA$?Rt|u3E?JwaTe)K2b7noevtM@QWPiGow1F@`!(i2oJLT z6Ln?0l>7x~Yj;H=7gE?=Ha7Zv_V{0I_`E&iwn3XGh&1pNT1p7bw(Io&h-` zv+TJ6Btd}N40j2RX zqMgdge$CylcR7eg6rpbs4r-5o{q+)W_cv|x@JD?-wiTCX9vJNCM0Km>mhB>6sLnfM zP$VtT##olkbHim+{C#wCwAyhE$B|4_I@_&Xkd9#L;}*}%1`elhZvsW9bF6cCI`ymM z8Mn5-Znyu3Fh0Zg09r<6-yD$G{Sa$3Tl8?mHq*Bo+0A0EpJ>l1VKI(AB$;pPz_%t>eTv9_6$cm5Mc8jiA?VfzG*;MN4^V%K~ z*MlaG`<1ow%ZhuB)E7DIn_vW?K#jt^_6l5Q|)L!&H_vrP(`{LMKlrHa5ZKU zN2P=L#v;xuuCeCmYb#D>AYx;ZKmYBoE3uo*jkvfYomMP!+_83(am#B>v=5k0R?3VL z>~x%ED%XVJBW+$L#(7k0uq*{)o;+Pv`?AgEWp~-qtLo}>o+ASdAyW>gQ2!s>X_G2hkmN7jCDpouj`KpAD-p({}~fu>19^zg3|%&9y9?UR;> zA9ex#zczB5?d`z|_IWGni(aIHtB~aR+|KZI^Ki82R#zs8Ufh$ZvActGR#tQr{^>WGP^$m}4H{x?F&j)1 zm0J2jQcR1EwuUE>)}4MaLB*jQ_$cyym+j08t&DKFHdrC4ufpg&KEeH9fw;D)rQL+! zmpk2VyY3!Oy}X5u!bicFlx69Clt&1;S9BHab1Kie2u_%C)~BXOY1HKqY#{r&$x66k z(WJ|va~x_G20**$`=&PE!chU8N&c=F57HJW!vjz zTvU4JWlpN-jGQ z2sk0T>0p>mpPe$=_#j>XXcJ0tZySvJ!^N=@?Dqu=L4#?Bg=5`;p0GlL57@>P9&cCoJ1o_{0>A06rH!QMNr@+o{~O)T|*DA7L|!ySL(vWE_y+UEE=I zYoPS~pId~2mKT>fx&6~sn%$hWFRXkX*166-ZnE3*6=U15!^e}#QchTRn43JrY?(Hi zT_|bzxK?mKe2`8{73rpbi|#lCVYmA#O@;;{Jf3|<=6^6Y?Er|U-?HlYRXXc`;VWcc zW4=A`h2U@1 z#KY<;_B^!Vr5qQc1HbKX4RGpN)hc`ih8!_83teYIJ0DHGNWS#n2W~w87*{j_HH^x6 zuK~y{fT@1oHOueO+h(rrofgg}7~r;>0SMp=m>A<+g**KnoIK2g!idrKpG&eVc8l4d zNffUn_*x$AYp|oK==2sXLf|6+*>u8`{kGd_2IC~3E(sbzKxI3+vccrSrEf9+)Qkr| z{{njQfLS|PzG&H|j0Oi+>BIu`yn@4hAvlzzDuPvcM!h4gxzu#vScEGsP(?eOI>X_S z+%^gmJZV>Hd4xL&zI8osCX!q;5>=^EYnVyZmKcvW&;|MZ;z!cI5>#X2|)9@L5kvNs=Rd0@b+5Q-ZdovlUKR`DfQwVO49k~h<%xCT#mT&&u2^_ z8=s>J$tL!m`P5XnKtd~$nCXF>1!dX%GRM>d?Fnr@VhhiZJ}$e_KdK^kvJHsp&2a^` zicJcDX1tNwuNiX8cA4ZwEAu*W-?QBqfBhc~e_gHZZgw=X9b*Qc&clb?6V3(JOa zhdhzFK=r?_fHTi>%b1)DOXHhmOjU@s66GkSQ+37?c+gyDsiaGt0FX2YM6gSFteA;A zNQ%xGr|og!mqrW0mNrRNAqJ&87R4@08tB3ggE=bPEEW=)>Fu;2rs>*ll94C_K#T+s z@^P_R`t{?WRnMizkAXp7Wf8Z2R{K8|n))dTrldzhwFAiW>V5;`Y|uyjKUGHJs#i`B z-T>~xrb34H+JT@?zv z)>sy34q@LF(DzrNHRCisLH0xoB)84D@ynd%D&;DXOAmidmG@K|Li0#%taHR4q7tSZZL%Z;#zYCkjgl#@JSwC`&3-;?EQW=@knl+{1PV8>~7z{y`s7Jp!; zxp1%F0OjLEojt3hxPeUO$>!Ojh@xY=T`d#XpmDqY^i_OL^QpEvs+c{^V35CgXV?z&%P z^u0>3s)Ob%GY9|M9QbxbLgMM473W!IgT4w>b7CKh7uQ_AN+<;(koB*pQzgphw`V4d zpMyBkT|xi%bKs|F{=GT^0M5ip2m?u+;XBi!QNfgXxfdly-p$WPVmXP;)2qYQ)>7Cd zOoVL$-hBK;^L=(zPxsKY>E6`?bI=rxev>ibLZylp$sj^^_<{#!@o#w^nDYdZQ>|fb zG@UF&7)}Ysxk#vW{Kyj%>Tv(mQUuEbr*@;!1YjtI&XJz{dZ<~vcMdwSVRGivfC8X# zS2Lxs_F1nRy-1B4R99LWkGvk3rzT%X&psSpa`xfkZ%xN0Y!i(C{81Qd^Z*Jio_D?A z^tqvn8Wt*)CAC{2fsq-QbcEB5sTUpXx_0u|(@REyFxhg^J9p{cf7@N7r2p(<^VUAO zCw%01;pSe9Z;cjUu}V|rNpwCE#K$dkwKDUq+wfL0|2+Y(1RRP|LbdKDlP6}gCGja| zQf=KaP&cV4O+U4|em)kLu&+{|vT>$D^m}BWfgBwt^(g>1t&voYOf!@|m6MGe6TfVU z8e5x&TYJ$2cJ((|Mlu??e|)TWCCrL@I+ zDsQFEeV63fSdyZE@32u|1xoM>`3lS>_2M(X1Zrbf&|9F}R zlMGy$o>Gzt;q1GKcKwSUA^?@AbovuntwjDZlGg!CGLGJy^DBP$czmPR(kIxbyM|vs zIr19wUc2TJ0j-vXf3J@=pT#@-`V0D>8upU4BhO3LJU6_8m(&)``Ecas+QH{0F(;~r zUp$x?zo&fe^40`}(QOd|_Ixy2`I;0s(%+Z!YV|e7(U-dh?oNsE?06$_S9iS50E`|e ztP)hsy~=!sSjkbb%cy%#fhKNm_t}tFoer-}Mq(#RV{`Mi{lWk3g=$GrQ54DS19@lN znltz;s@&f9om4)VRSRL~iA!OjSw{h|^ZgmS#qV~!tEhB)aq5E&UU??Lj!aRNX7X{# zu3+^D^Kp}1ynl4v0O6^21@*_=kGq=@Ml62O*CY z)c8pLy&se}Rrgn6o~(-cx%6T49m9%qfLiLnN3zzvd1>yoE#4wYUlJDI;-x^F!bdTP zG+I?szIdCx9F_BD1@TiyM=j;7*UAa&4}ZStt!I_R%AK)5X)0fOH(Ve2CZAaFrcPG6 zAQxS7=crfe{hZ(BjPC6%gMCA5k*YT+!~S!Faj)_#I$f$B4s-S>@o@Mx)@QQz{mSH$ zCpR#cYq69|v!*Rs?s@xd@?`mfNqpT^0>yQH`WWEdYw0SCGTVUoZdu{U$UIOeHuq%uYE^08gp83YcY0-PJ$8py7O>zCn5J2=uAikcDG=(nDdXl#vVys z`5mgLU6?Hm@$`YwWXm3R$+S2i%&&5zsvfWL}23=CIT+m$*hl4fMf zf)L5#Ro~~#+n>?|l2Z{IBO422phu-^Q}H z8v%lce|jPM_@5p7ZeL<=EuIc+4(KcB5dr+7lzKJ5bbV-}el!%hM)s6j4Tm3h&Te=c zv5^0oz$!H)<+OaJ8|pzNk#|y`XS1 zko(}|TTu8M9kLn2)b_SJ z2W)&&UkNiVr}tX<#i$X927YKmZQyDiXRiFa!DGo+o&Z~oE~jC>x4}M>dMkT=?F3M= zvYy(xO2lp*ML^qPG@EBwBF6yiB4{`r0QOS+0PynfcDuFsqi5=3m;z`q>QEj=Q^E{~ z1mW~2>vcF%u}o5K5!V4E83Kiu&2Cnl$tX%Xt9T&ccEb;oVZDZA z-YnL+4Sv0CnPS3CobA4XD^f<-geh_E$9d9L{4`@zEQxl1nQL36Z)N80zjnNPjayWx z=|t0dMdK`A#e>VNxrHMr98;|sbSgV(^y4p*r(Sn6A?pUFJyx_=7~!Un+G%6I1OU*l z{6d-T$3}Xl-b{T#0<119?_;gmmHLt8Qy7(yXCPbv^0Cg4wx4&An;F^V+EE|lRpAM& zh`?@UklZ_e-4Wm(OON+rSRGpIU{IhAA?y2j|DK)y-&p}&LVYV>8iSrIEtdM71F?!2 zcS+Vh?$qkT)>?J-^kD1N6Sdm%q(t;F`mX!#D89EG_Q$m#3~t;6s~O-zK&;t=i@{{1wHyEeOxsM)rV zjx$fwB`DSz!?fR-XW5tGyi=br+YL71P?;4gF!u>1Rm9$ZSB>>A2J{oj=dmk0LaFMw z^A2}7Z)E`LHK(H8)yxugZwmTfx&rTtbCSpaSTCUz-f!4#;yXSYKdJ_9cPLlKdCjq6 z!-pI$ACh$DvgtfH+*!n`Jn1pVw0cRnT~wVLPdkUowkVvC322S`gRBW4y6_7EDa*^v zZy_egK8Y!C1nt7kz|Y#RM!$y~gKP%MFrNWeyYVS3tAW@37Sm}Wr2tg{5FA8o!f--) za-%ZKuM3U)RX5a6# zD)nKQP09o2dITkciKXTdV0w`&nT>$#YEJt~pOAU$?=j7cmBSedP2_W-+(&JY?{{tz zFaj$zR$TB1*Em2iuCJYgmDrubVI1dAtxxj0|RZ7RYXU`X0mOKgoI^x9%>!>j(ofa%1jryECCAqA=FXhkxmtkTBh* zhfSNN4IN0tcE8X7!Erkxo^S`ybhX;n81jF?cQ+dv&kr?#U04+P8H~dBoqwXQXF*kH3LpoorIt=xn??I28AF zR)dET*V>%qb^Zfyj@EA!EnEw3A3u?w6pR3NnKIy*aSd@XXU`Vh_6CvZTkAg>oA+#dXF&D1)jc*1nUu^t6wN3; za1Eh~PMT3=65@r!sN=B@&eiJxBGh^_4>FK&W835KeB@Aec=Ch0{)}+@lwI!`i z%oCyZ51qgp_k*WANv~ady%k0hx4pAdU^4%)ytwyhh=uZO`dZG$y3bVe8bq6KFnXK| zazTu_WvO?VB%<mW)hWb(jhUf*x}qAacgXo_kUCGH;uM z(?ieXwuvrz-23f#&rXNDU9dtZA$&1Sd8Q`vJ~$n3*yS7fXs3Uo0;F^Uuh#6&j#~Kc zGbf69`~Gdzo~!GCv^6z^qG!Uzk-_NK2m5e)s+|LJd>T|7n_+WAFdA54?Ce!sUT z|MHFFY1Pp;o92h%PTE^oCa(0lU1;*)$E~`&{O~_n1HiLL{Pl9l+OP$RzVhMwUk2%D zZ$@O={PdwnT(UA@e)R5q8nI*0oWAXgt$YzzLi!iJepYee;dWT0W+-pm+t8boELr3f zlh$${*9kMjG0#_pJY1S~H_ACh@PVtQcAz{1HK;UPnz1fA;{J@^z=m!hVDEL) zMd}Olue?Dt-u|UmE8@($!_UpvY$e;aPsTIZI})C7ZVqcsB!>k(HJ!CL9`i)axvSxH z#77#v+QO0SK!;oOc^lMEoIX644lYdE5bZ`yc^jx6TnlFL)l+^vb^97JrA3Mgn?Ib~ z=ylZ6L_wa}*D&AGp<{Z}8n29m=@}1-Qp&|mt%|B(Gtjxr?E6!WXJNb~wHKpO3y%Zq zcV!$*D8-4@=4?ZVMI~IG|6=E-VVunI{J%u+zYy=r4BPI^*=w83FqyO#FkrCOjn(cJ zsKAMmul*j87$G*^t_tlvrviev*I}kIs zl3FNrgEh;z#KeI1g#~*Gxwoa!dj#_%Gszb7ADKr>9;|YTLbXJ!$ikGWo`%>^7RN-M z%z|-uor?16{*SDCk883213!LUJ6=0qo!3Eawa&>ps+6wIMX_|0uo7~JMMzH9)~c0a zrHCA+LJ^i@61GZ;ut;*ct;C(gz33)!+i&0BKfgbIfA6pDQIB1p&))Cn>qqSKT_2x| zVo-wm{m+18k?NEfGTBEH+xS{-A0qq;NHR?SuvnBnz2!retyV(FT!u9opv_eX8co9* z!T@ek#*tIsU(m%T7sheQX=_lRR2m^KM|@CPs&Lo&7r#Bj1+GjA1X~#WU6YGs@7`w~ z6aoIX!tC@y@2*Iip)uz0!f-BN;3>jR4TOnnq$i(mCU;&A#Tdo+2z?b)m2mIF0SC~c zxvGj~`H%();U*xXa`@V7;M&L=N@nU)QfTXogj~R|>lUhc|FYKb7$Tv(TrA%DHQ24G zJv8;rj_H~W2jg4sq6h-GaIqd&g8aVE(~rlzlbjmxM_RW(jaQ_)q$_ZP_Do0_dgaMA zD9Gqfhj93B`li!2n<*uBeKTMDeLhCv@a%zUzZST0*nDu8J$8MtTV$pM54G83)Wccn z^e z_RX1jZ|gPm_l#%q3cH0vW7D7iC!b;G!83Gi?xx0p7Q3AIP-46q7ykBy)1q|*X4qur ze@*4rS`W>1RbbkRTT?y^m!B(#wSb|e5rz{4Bla9UyEN-0#+G#!Ya)NWG0D(7oo39; z`e{W;#9=+x{|Io&(>s*lu;@liP^`?P^!-?%_!VR1k+1>HpzytE9M=2Q*{!1)X>3;x|vxm!HrSDcuN7X89L7S?+v%PCqn~SW2?P3-#HOU}{xhu- z%8Xis6_y)rbCuB(!4^lg%*&+v{VGb2Vd|@NT+J;7pX?pY$->*kR(qKxcSF4T^J3kcpwoWa=gaQv2G0V`Dop zFhbyb!YsbGH7k_1U1td-2Qm81SI!%lKOo6CTrvG$Yyzrd1A`K0hBG+Adx`hRO(|YP}#=j`r;xY#8WrI&+?+#77p^{6(q3la;mxj&sa% zN4uS><5=hBr-Ug^ za29@@J`#VU_~9VGQ<{EM?xXm-HlgOx(`C2r`a3#)T6@M>n&mtPx#L(h!$#z{5hSjD zIMZOmoafpSx6AQ*ufZQ{FD;tyqzsmH=oaKsD+ z`SstMo5Ff0{u(S!IM12^ICt5p;wkce2E25ci^8B=XjO_Vb?526W_F*|JODlC?^D{q z4l5TWm5p14ND*9(A!e<3o11Pyrw>!ZGN*`fm0cxU{?dJ#xX4g1l75b(ev#CX)TZ2+ zlJVQ0za|qP+*@BbCVhOGnEXnLT=7Ue0GPHsvKlsSU)GJpM~Qh^<_TTniblQbu>(8z z^Hz^q{t1~kt7y$6sjy`-H~OkYfyT-&E`lz$6oYY1Q9(O^BzwfXzui%V+P({)KcHQ- z*-**a5vpflkmDCe%UD;-5jv(-==E2ut^^XtfzBJ(7D3tR84vWE6ju(`yPGPrIAoSA zh-m0_A~l&!zaN+!-0`0t<;oG;j5NYH;*K^t%2d13;yD$#Ft0JJpo+;?Mm8lCHB>SO zEn8jgTmM*LV;&ap(uSnUu#ax%R4Qy72|3M^yS-z~rk`HOMfBicE5snLuV7wST>$&K zZFh>JSuRuHs2@7pqgn*yTn%r#&?=?Wo%&p`=X&19&#lrQf*ok91pJpi!{h9AzXw8S z1Gw|vwiJ|D`f~P|dbXzB!ec?09uREBz4$F)hG#ZP6c2R$iS-~>l!t0X&1i|(YH-Q# z%lAF$y|j7%ZWZ>AJRbyGZd9H%idT*;8=U)K@9Ggn)CijJKgv$Y@dvZ)3$M9=W3hLO zrEi#aD^=Rw*~b(L2-8Ea2Mpdmx3E1?oQv-C#pifGN~(L1QOUocm*;W_ z5pV#q3<-WZo1lvl?EoPa8GG7@Q76P{1F^OBo8elb8B(U*kqv8UX>DR&AQ{ z3ghao@9g(V{nDN|-x}Dzy52W8^8rnwDF}EvGSl;$cadGA)+?N&aJ6^@Ohym}gY0vM z(=+tfX-~$9ujziu_c$8jm^>%S2J`1iwnbAgt1ZIo1!Cl~6_eZU(bk>_h0-&^PP9!u zy`MWd)X&7d7LLv)2orp~Rwhu9v(o%d2#ES8+G&)Xo-u5F@#>9Y0|E|l?F{j63$dy0 zGH9Aw6zcF|t83%+3$wA$Xt7G~^&PWwF+k*2lUm&GCg|SA`8~^y#SKz!!t?A34{S*F zF+2SsTG}zYI^P~r-0EmMZSh}VQ``?rSEq@uH{ScZtMdIiLmUkiu}waIS|&bRyYwnQ zBKPqD>T9WKZob#f4rc%$$xsW$598dil3c`@1lAnV)>DTImJAjgyjc*4_0)e)WNfiZv;CpZ+LXiO1J$UbU5f~UiczuZa?HwAPVj0>ZP3tJMaL?uI{t*d}1(Q(MlalfAgyO_nedGxc7!mtW7$6ycf5t-JD+MsC7ZvqES(hsm0X2e5WoZ79#qy_=naWe-Ty>E_l&pwrZZ5>wv>@?bsXHEz(5F6OKDuW18nS=G!>A57Ki)kmbLs>oYgfE;q(x6`eLsK?~ z(+W?Du;3Jzcxj(2ezo@Q5Y2)1hu<)hZ>SId@EYJsH7UQe9cHL?q zT%ZiQGqO)75(R|6Wa-+qk?r|qk&(4~9V|T?B(6=sMJ&dDd%vLvUNCZa_1Yem?*fwc z^rxo9iMEiBFECu!@|n`#54bYfT9U z^@DTK!qo#mPm?kA_3)*ns1 zbe!4F&mQ`4+`&=I84DuE%n0U}u$-bBnySuLj00Fhjh~40DCcI9*g^}t>VT$#H0#*Tk#+WWFe);e?7*Bc^P-j%O!A0r|3$a?;2{xPW~k!xx%~j< z-x&z)uunT!VE`J7h4@4BqiA`WD`lNBBEv6|kRyd0+6u4^@(zQRZ&%Hm5X@gINZG+K zm2U|6X&n}DuN^R0xMoF~duNB|yuLaSpAUrq)HC`j!WO-)s(9ay^2xG_Qg7vD!+%=B1%H^jS zjDkI8StuyrirH#z6zl96<73iD%zaHm27k=D#V_CbktUz$ufV6v+i!ZysuoJqb@^Ll z&%TMhE60_9WeaG=Xcl{sZ8IicO0cNf-mL|}Vl(qC*QF7=KLXNY)wuYSE7t6$IEaP( zZM_Y$+0lEzl7pf;i)DY}kWjaYMX>*&=eBUjCjMol6=6Z~yr~-v2I|)=aKS{w>S_$& z>l{Pw(n#D~9%5q~Y8PLTki+@vy*r?Hv$`WO#z)=Co{mG_9+hIB`!Y(ptd5|MEJz;D zo@u7@^%pf4;9cT<3jFI~?O&wFdzwZqE*uHpk5QG*KdXp1aYWA&qhat`&xXSe?;YcQ zGCnpt1YAYK?D@u_tByjXrR$&zU(}d}?dTq|FBu3D+<*+_t4SG3{nEn~W&H|*<(ij_ z;eQ#_wE{k6R6#7hUpw+zO(=;!8_h(qt4A@QsvO1T^p%=6T>wr&#KZ$}fPZG4q08$u z#^X3SYZ}BqpAYEkmS*f)&l8iF^+8-so5%qHFaNq1@AQN5#aF&txs-Gu`;^PLGplILr~U0K`85n z!{JgB^LFjc>3|=s5apM^4MjI`0#+k^`^EVR=cB|~Be#z0Qm|WxgC8I3wBNNR60)At z3R_HB{R|^vnz#jXjm6H#q9j<8ZM`1SS^ua4EZ$IN_Torw@y$~v>gf~F@T_=Ei=T(38>>e zA1V3WyU*~RBy6?a=KPSeZcgUSLZh>4%w_+2-06k_M;>}SDL&tHCyeA%o`?{EHH=xX ziQ<}FjI^2f-H_<^z4`C?oi>)fO-=#hZe_UM5vzv|5gxtY_s{EkH^b}qJ+poN5|OrT zTVhRSkYv`n3$BLN41e8J@7(6Q3sYSUHkaV9QTb1}``Q6cHwr7HSr0CSx;SP^nHgj7 zQ9E5Fc(h;!bP2m|{X6qc0Qt5x67&&>{>qjqlJ9h(QBP~2FIl19x&-oKoB|soA)bA# zhZ^A27Sbyb20k#F*j8sT)_r#=Cx}sY!e;elUe~?-y=b^alxa41^MBU$lG%o1te)@! zTk@rut7m@&p3DumgR6zM8Rm_ldJj%=a1q&O&b7)Z+K(Bpm5<~j+oK;E%8X6K&~^X(n7*kJ&lxtwh&h{N^nFl1yblbgHkndhlNt*|#* z2eKk7?Wqgh?`dyk4D98fjXsK>!n4QbFArXy@nCvCSnbTcg8BaEQC0?W$L{anx`sFI zbeILamfGuJJdERNid;1I8AauzwK>%e_MUR=N=(~4BG#LV*UqxWRfX7AHz?vo)AK?I zi!rqIz*}zsT(9G+id=46+qBf?k}-dYZSs!)eMD0RoTjh|0KmesndmNNFn4$%re5w@ zTf`nL`h)9edtwKCm_L9)|2VMz{7IuYuBR>^bCzp}XYBK;33QKkXr+p{M#Z*Jlk)(u z3$szBrg{5;pgh#ZubV!O5dX3U{go!3 z;5w!ZuV&Fb@z`O$L01zi5{2?0r{4F(Jbnh84yk2tx0aE-*>s;$@CeH=PpbT^S_IxJM+FJ#(e08nbj??{Dyz(tmItZME? z>~~`G7rBk6nx>LrsppnLCmF8gNz)nB(a}7OjWKME9b>T$sr}D>vCUl>bd=-ef(z+V z6D@!A`Qi~%XIaLHe4q-V0sBv)y)AQ&TI(RdZmU+YTJ$5UBN6z?x=NIVQPo+hh&|)hHIG~WL682HT z=>-_?G|tkKBuf-i2-rU5Llywm8W-D&Sl=G2)OBmB`JC-(Pgwx5Hf?rY5Yv=pIJUsl zjD0SJHRfFw=_>romHnx7B+@&mC*|8xr%v#Te(WM_(v?PNH+^YSRMVv%^0i_Yu?W`^ zM-BgQJK35%DuXe!UnPj%C_jmQ>2&*f))%Z19E?4Pu$HcM^|p4)8k>1;volFXL+>+; z`K(@<`*k4&R&zc)gx4=xk-5llo&=YIPoTx52XS zTQ3_K^1}|xm}7LJ@#?qZF)K#TKXIw|E*F#LWn!su)I65|2=uzMnQYbx2gFlR);?g; zCGa0GPaU!sAS_K6jjHv|USWKc@#cl#(}8*IieRP)??U$JwIyW6+N87ar$2z30J1T0 zz7)|t{S`?7lf~tvY9!8IhL_0j)erC^WbzU|B*}QbfJIMHE035zp$3ZFjm3C|_&b4#uO@ zLQL!TbHIK|vJJL%THwHf9bb#s{t7BF#GRv#cB^7*BNbF%#jVpS>LH`=M~ujapQY>( zDblU?wHwXDm9you%xN8Fo3|w0!z`VJS)c5+*;v#$x5MtkitCtCc49v}Wz=3$%lh^V zJ3quGU7k!E;1j=RzwBdsqtv`j>>QW|Bi25_CHmI*;~&=bH(NL-5<(E}e082b->r=U zb~9|lCvY1!g@wps4FrS$q@?$8`ip`U?2+GV4<<0$(|z9uev~o%`ExBVK{~)sJOHj` zkt_Jz#hqX(O9$iOUx#BQ2X#f3e~tdKa#ar*kmC{#%LS_@Po zhKWHD1}f0nmQ*VvOg;c}S>&_vnc6sD?NW8-9$9AoJun?u8;4{zdXt-s*DdCdzsmHd z)#M8ZdB6aMhG;r}uUoN+#Aei^ai@{ZzSkLK(I%2|Qx7Z0ba=CtZEa;hYC}lLX)})A zHK|mSCBx)Wg;8#j;b~-3$N{?=V4Ie{?VCD>1k&6OQKg4;mn7R>e9h@mTb)MfM}BO- zh;II--gZh&mzr!&DCKiGj8WGAB)>;2M*nrnS7*`}WY=2&GAoKJRqyJVeFsIU)5xw< z02E!y7AdyONh6--6XJzipDRs7ET;+?Dc2yDQVY7miTGXuJh_WOGj8$-vxCMSj-_}ZN!EZ$j1C@d{}{B zJD7#WXPaJU<*3gfqgFT+TRLQ3okk$AoZ6h|q3o>Z*YK~s;d!Gg?GI+IQ?ISF-+1my zFf7|xr{1{DM=;|_=?AHvwYKDc~u7fT!+E@Kh{q- z#|pgv|5?A(Zb1h@L?;zON_p+wy-bg_ue+P;?(K(t1-VljLqs@i$kBQSZZJ_~>7QHr zKN?r$&8`TIjN>nq68B(c%rhJj>DjpZPelM^LkxygxyD0gOEK2N<+TWcK7`{O7qMUm zAyi(Yy?@*YN_1(zMjzC55prbtH@18myH(v$d_WKLs(#+HRb6*t@f;d5F2BHq?|B|$F~S%h(;O`-%d+2npA3sqMUnS6CZ82xi-FxlZx2XZ*` z*2mKe-9E=l4~I^Vs216N_BGsZh`{e^3NRKZU5h(sb$l6c9QaHX! z_8@{5Qzemfifr(1iFv20fa!&cT8uRgl|Q4*N=DifgQ4c&XsZ(Erz>Ys#R}r!R>caV z6+p8gNn<=Q5SeD4qRRrZqq$*nADWY?`GBQN;Qn zqHR?%Y9aphZGJG(MeHoTW?NKa)T*u4JicnQUX4&!OY{nQJzxFiQ7wCX%+^rl{r{+f zvRL^>QModZ=*zM$B3Zzidmg>4a^R_CDz^O~)3-9%FrftvBF>Co1(dMjHJCG|;s+vG z7DXv)_(;#F#m~x;hMGJ(sLcp93DEr1BMIb(jQS)dZ&*Y^%8fMWZ2j}`K&V*cG7(Fd3uh1~eyi2Qm`WQC^nNjc+VK9LW zjY0aD?oQBfPVUb-O4A0Zh$3CMP#-%J*86yfm8!Bk{Fe=GE@t&ICn)&PF)H=}o%9XwcRL7=aZ%9o9YJE~GkepVla&5fD8!U{$qUaLm+^AytDd78m*f3_Yl9DJ7Fi7BsGDnrnWs_&yGURx33(@DXBHzAa;=8H!vjGBaj*7ufc-Msf(y-T2#1Vu)=kfhi>j4I;!rpbx;W@ z;$9r5B@t^Uvp%1SK(AX7a=(MMzQ2a*o>{l74I;)$hV>`ku}^-nFSK@;36?Xv9CPF# zI4-gnfV;uCJ`&)rV!JkoF0`HQflkZFOQlL$m{M6&e}2ie4#gWf>x#i~UctNRifzjp zZdgi!_INc>2pp9NxsnbE4M$}4CVB@D5KkIJAp)OZ2BX##m2PjrT6!wC47c;i;I9QO zc2s}dj+sn@vu*ky{t5z8T_laK8(J%1$3qq`*uhKzW_C5NI`-v(=~kRps5@{1BI`a3 zq-m|7a$-2_puoPbQksf^*<=PCCe#WKIdHaI_RIW$iu}ZxC@xcKKi4GV;jMpBPMD&d z;jIQSZM9~dKK(%aMA>Q;3pDdNvcEQ=z@hCTzK$*WJ4H@j)+xkb8-s(IVxFx&l{lG(~HF!a&gkBnkqE2(I;?v%I(1~8QpdW5c~sWA(=>J7+qKVK4f zT7%eOS!ue)8u-!X6x}aDVM)9^_EI~OI`5*};NDZfUQx6@Lfy#4qF5HeuT3a+e5o&@ zH!HEk#Do7*l~^htGpj@oBH@giF|jMLPMVZKt^R84wKywMyjtk_`Py}4I>OZR?@;|} zkaW->k~~r@d_RqgmpB5LJWeKPp;kY{s97f6{NSBCOd;z?*&XZzkEsCin=%kasZTKO?B3!1p3t6sTaHmN z2XTi#`y_E-Mc~<>5qAhBj0lMSQ(OS*PpCBHF?Kk>=;E9@^ZNn=z0{!+w}C`CRISjb zXG?7B)j*yE?=-huhz=xcqs-+&irw;hX6X?1YlSTNfE~PQ{ku!HF9`kvZbjGa(x~b1 ztHAyh5_TKM@C|&=Wqmu&l_#%thC5#+S>89zX9f$Qbd37wY=C zjX@05{Jf<_iFMXgk!fu^VMWW;>y}eNG>c1hY$}LfFoHOwWMhKdP)G=YWuKfY%*8@i zJt*HYUa`Cvz7ImG70(q9=L$CFuptDUeiCCKc!~qG07_)3Kw!|^iGx9b@lYW`KtXUN zfFJ&~%Ko4NFkp7$!nwj4e=+q=eg$?dPb^v2neLp`K%b#CPm!{ z_2;MD;DekFH{2I6Wy^R-yvl1YetZnqhXSVwaRx9-)->Gn?-l5;lD;$F%mlEaG-)Qp z0RpTfpMChnx34E-i>Ac3V#|==k+ciscE8$ltS#ae`n|84Q0m4PQ~5rP5a=8{?%;<; z#=kS|kqH3;dw*VkhaS+a@VFhcFEIWt%QvaZ#qP+q#|5%~4x&PWzb*{9(^|(tC0hYO zf8WQx-yO@<1oC3wL5nM_mKcod;uPG8ih5#P7DTGIn&41J!q4z}wT7T>0s&qDI7(l7 zY-MBUs)cW`j^T5J@HMkJfv<{q*b-}jIAoOVY%T*gN{OEnOdySm6K2`gAaCJGX!#H!-iLL?Cy79Ylsg+^mJO(Iv8+K;`&dCqceB@yFy&C30SLB zPSmg-fQ>-GIDL~GG-hkAUP}UgztqiE7&xH)0h~C6srH=NQMd&7mdpf*I@ZKnKV$_D zUoi#HIRx@|#tBb?vytIc9RAkk#%rD%-mIvCiGrOSb* zO6nP12^rbDTlWRV_3BmVDoog34fPqk4HVGc>!dNw#u^2sO-{}j#{9^X%HMPTB;!o^ zK%Gv15l|r$f=GL42Q0;`;6WP&1&;?|=qF@KEcVEllWdasPi54}5ja?X7NflQC_rS( zL8dIBW)gVv1n(v{Ty8^P5qG(B7SHe@_He121z!5Tn1_j&R){ixXc6}+)|3ZyI?&hg zMO9rCEf4U=a1p_*sSM9apE3g(VE`igK-f~vj=!#e0UBtj)NTuV`$k|-_2ityk8^fD zN!^}aWeEqRF)^Y1vv@mvX>XMOZrQOX3n| zhv`vKVhrrLCflsM-C8d+W_9h{{`$?2e;n;2>69Y7C*S6B_&|h=&~ybP0}^5Zuu-eR z{#9uL!MH^No_mKq{4XHHfjE0uV_JY=3nm>M4r2wlAMm#qx>tSYyTh>_zFHVV)ftGW zv85cqAc5&c22NAEa_{kuJ+-Ivj@yFEI499(hO+Z<(b^Xq%#-yrq}Z>Efem&TEg#tR zF_a(xh%%sD1pH-hL9Dfp;_tFIBpy=i*Q%gl8RdNs?wp)7lM8nXXr2EuZm{U55CKA_ z67J$^`So`~_EaS6d-3qzYS;qB9g{*jrq8mF+ATda=Ve`{(nJ3$;WC#(R{LsEYClTs z`pJk5+m|3MdD5|K4F=b9$j+OGuWA9Ec=+>O)=%yg1ZrV#Q538b6F2$=V*1E$R1heu zJq0tK3NRKhD7ir`)N_2Pp`VhAb_~Hj2XV`A;pw=7bpraBrcR51VRus^t0-eK`WqJ5 z@smC#p!22}m&_RF)poXxrG{MTW&+y|Q%Ec@1P(uhf*XvNP`Q-* zGHMMU1Io_5M`&mQ96h}Mvt)bXbn{Vrb-e9xjkxmyyFaGy>kOlHn0+G0G z!1ucMI$%z17XveNrq?MA!-hqB$E80|)MC;YZEKnIM90T zp?dc^8GV99w`MuKff-|Pv!ND->~568aG6J^b;*{CWE;D^qB31oMMqb7t2qmwUv9BYOcXfe6lCfo%!U@ua_7bS$F7v|;k=X*F=m$y5NAr~ z!zlI~Om_Au?dD&9f#*2#a0O!^B44{BIJ;p<8dAKZ`_l>Qq$+wWHcC-IjRkZ)g=qK& zM%zctMYn+{aR{d3<)DE8_dq~Rg->GoaCUGdO}EqW4jwu^H*#h6*TpBEkOE_tgy zqA&xz`p`v3fMEl(Wg;9AbQ%>Am4H)A0F8QQmni@vdh}-CzkYOXEMPW%;(9L6xLYwW zV!+_F8-pjb;d(A7mH2rkxqpLpQtUzv1LOf5K4!5>P_-DFgYq~m?5zZS3j`MpM^>op zKow5G!r)9Wr&PGZo6q86$v%9M&jgI;kt@{xT0uO%Re6dV*#5Cld6S?c9%FX!R2}w> zw(|p9thC?(R2J!7&C(e|ULT-!GdIn5R{}y-xScmV0aIt|u8m}je`K{7y{5`M zc#_W;LSVBU+mw99q>Q5d&Nz3Kl%-Ff)X=xik-yL>gnWZs741Dt6%5X^_=Ti@Tc6e+ zgjeBo9%R1&v!S*)U@WCB@;I!*=^(jo*&K3t&^m}m&{sD0p^bq)+1n9l`ddPp7vZ1FK{b&pAHpi^Ny;yjF)cW2I6>D+ zH{*wFr&zt%i3d3*z)OvM5UJR$wcRslzyQk{*)r-273~HJ#GRvmbh__K+7c+Af6gUb zpLhEoxT3lw#5WX#q`Kiq**YmL`3>gjDwrv~)Sr5^wh2xQxWG6sx*yGWC@^@+>YbE> zL;>y{a-ftCILfHQEc$t%Xwux!Qc6VSN5hfrbR*)$vB$Z*Myfeu8m8N1KN!|9QrE-V z_tF+jGM*w$G3v*sU{wXWZ6=p;S5CsG0D}l)SdD?7{SQ@Lr!%&=kKaq5FF97(x+%om zkT|;!^N>|xqXb^%k$4i&pmVl^?(8Y0T~-ZFv^{z#xZ)tz%X&h-WU_RiwKrD=&{5() ze1_ab|BjY-U@i<|&(WTvU4arHiI3BiF4?7DI8)t-*K=?Y5}i`23_+~_5D; z^Ay)PCq704XPgCMq?iqbSZV4#dlil>T(Y_ywC6Sv%rG%Lf4mvypE6@6|H$tbYI9AO zqaG$p-;?e-%z3GPxOH0$iUr@N9sV3@zyc$<*a=&YST4RG!4Q%j&%3lNFz5s>NMKF9 z12=ULCWg1ohMihEB;yLr(-9XYV4rxxsL6KXr;S^~+}Tg;)=&8vS^&?ymUH?>X4r%O zbt#Cy^}-(AH7PYVX%n6B!w~pD`4c;@YLh56r)ftTr;n^uL0CQNxSCp!aQmeerEOgz zyMfXwcz{be<)r%VxIb;3LZO7|tx|yY`i7Ew`fU?!h=0bg{AMWPPgS3G2!Q?1ym#f{ zihse%fmW}KXF4%=CfAxRC)H?fWxRyCRpf2E;nS9pUMjs?b0|0Dqk(>uzSoLeDdjwB z{dNuIo}5VF&)LBxua!RwY?!^g$ojnCd7l77QQ@ZLjA_*iynxOyr#rPYP6+6m^=V04 zOF>!hcL9w70~P-leO&Zfe)Fhq>x>5Mq5l_-GsnHA%D}ta3pKC<1>|gbb}IXH*u^K$ zrY&fSbNA1^CtLIHg)gDs%Ux(FKY!6I+Pv@C4Z%v?BnYZ)qV~zC_G-{x_2>;uj!2^z zJ)qfX2JUbtJHRiAMb;+;&mXEVb`r)fIpbb8FeHECv1{`L%yxUYh2<0lw`%uQQv`Fq!DWf+S)FBS8_ zY<1E(0mgFGl`dwi%jnrR_rIDcCz2AW*ylLU<T9-lIE zAmRh94)r(y(pnGS5j1ugsF*Tk{eW|IZxsV_@TPpAbs_n&-Stv*1jI<@NwHc)d|Kl{Ivs`YFcD3p`k z*>Yn*PnxW1uJVYOq9Lq0yRXm=F^+9x*aPIS~}etk5Z8eYofRScQRw|v^bD#yGd zK<3qa){s1^2WHtCb)}#^{6cC9x4Z`q-fOJC%6m=v0cEk5);gj~rNVX^CV%!`_4VV!Hb1 z5-J~I#Pga*tegY3MAjL$GV7o+F0jzhTf64HRUT)Z==iQtWg19N0XNeiCQD?Hg!xGl z@rz|FG_gPSOx5KhJiD6oCNk}L@t+s<%w>x@6!>MrmhOB`S8{A@La*Ds1A8oy_G5Xf za>RyuQy{e7vYew7na+$1650rS2}VXtztag`bcq^@-_TcwyJ);&6f{|@%FKT_oSEjN zA5M1!{Ew~)Mq!ppR_@hSffoC0Iy;NL!F*l4;lm@DBe-g#*9gJZOHy~aG&U`2XscFz1~@ zZ=Vb(j4aiAIs|O~F2ME7TtDme$6zv-d)hs1FMBvQ!uPN5``4(kS}SD($?~tD{hMYAg?C*-q3EH2lT0sLLaMtvdl7rk(UnW1ztPlYgym!P?8!;D4 zWxk)>kh$M}Mme;W(^f_TSVuU-Vx3C3XZ?yrpQnhRR8C8IBm~S_k}f)l!sL7w#%0i& z`QiKig*wacpo0)}pRn0r!Nxes@46pULfF)b3^VOdp^;~&iFJ2T(cp?m4>R}3yh>{u zpV6*4N79T6HR;CEHIZgM=_lCrK@?b&c3ellI)}3N_>^|oe(eCHEE}_v@?OGj6`oeW z2lA1KImvElWL|_hwWBs=4)%f)CaNKm%Z0U zQo6;w`u;Lz`z;#E0qJ_e`SM|qp;p+k%Ml9e8LTH(%rny{NIs|!RYS;nQCt><=`cLz zUATRjF2x?o@@-fP*qBMlG@MM2&Ovn$+R_C9_(u!2v#?DWk+{yWYkOKY_}MuMnR1QK zozGA51S{wLTvef8$h4P)EY_XOnOt}M$&4)_jgY|Q>-ApC@AD$EA~6R`;y|imH}z-Z z^XRYW{@V^11Bdi8+~_0!em#^PF|*UotF-WSqUo;D4= zS>n_M+`aF{yy@roIxO!cW+wII*)uP6j~Q^=bIwU(oArUrX!m1YRW%(i&ux#vI|U!Mf6f zYGD5a?;fEhwwwRk2F!Jc@a+_0uRO#=pXUMC0hRr-jBrf31qS!kw4B(FP@P^v+qx9k zf%|;w3Q2I{46Q!82>oRC_TLVU-2|?1>eFp%R9E2fiTz-vj1aLPc+VYo;enK3#+==H z1iC=H;>u5G1{a+vQKnE*MTIH04rOI;=3p{f_YeDk;La0Ok`C zqPxqF{f2w%nwML{5yR>W>0BW=d&7|K`2L~DAB|dYztJf7U+k%!Hz)~HF?)|R?b{HE z7E7dG4MG8+NS*XR3jigV)fsLPorm&tSBCWLa|@L5w6&=##&;`eYkuoo4|bSK_{4s! z;he&NhW70VUAS%Dpe+Lm_s!7@JzQL89wVpXHuaUIXJ>R>&ZQI0DuX@sf+#;ykA!++ z#9Akri;bHkSZ~vq&^kVdaQ@$DNXn*1{r1HAB4R79$a^_A6rgX%gA?hvJ;ASCd;2=r zN2A>F8N()reHP_JZxNGn5in2w3Ph%_|NEx{M*+)XH&qyud3=!An!2JXy`?8_WeR7i z>|d@TfEFK+6mY_C;pMrNYfSHQEOK4P^tsx0+6{X3qN^efO)_5GLK z(?>f!l&1czn+xRw>?MB}lheFsR(ri+7jEp$n6YSb$xP%5oK`|y`vrb}W5(A~uPEKq z?#n_z@vS*V=Z9&Ymh!~sn#z6!0)bbZ7mb`fBUFGsg?<~f55W~v5gUKbEw>ESo?J`4 z5z6vumxgO<_1Hfn3|6`AwPR)m-iHc={whptQ|-^pl6;3@scYm~VT^82)W9ySXx`jT ztP9*u_O1|e`-S+n{7Ba$eNZK&X7p;pG=G}+?Oqx+|$aY$0dx^qyv+gB-jX2QcOM_z8gXB0rfg)^!(vbv6B;34ry9 zFU6G^>!s;1o}dQCE*mebL-Q`#+q@QX#>MuLfam7+$zM0jeZ(OR`Ba5LVR!omNujJ3 zTs2j=5e@<51drY#-FTM4DBe4#<8*PT@9Pdf3v!uU9-pp9?W^3Y>F_taOy#1<%+BQ+ z`JO3!+zTu|Ih5Cs-|#BnKm+*pspJGCMi8sV4s)j|AWb2B|EmZ>4um@thO>k!Y>PM=~?NOQH=L05<-o!7gC zA4Kse_!tW?r%0Eg(f*)04ZS^;LpP2a^bYZKWgekT4|Kg4t<2W>xcOs((1k$(jjx(7 zS2kVljxHK4UZO-}H$yZ9;M_!^j~1imWZh}$v3X5%J)lEqyCZ>tk*4RrOkQ1~Jbz&H z>S!+{4N#@s)ZU2&{HlT8?e~kOgbqHliqQPDpGBX@IL_hH7=!Usy!&SGaGhdTNu2@$NGS3XM<@eU_HePQ2-2dxMwz61HfmDQJ{rN;sk_*4YXWU(?Hh;8L%fir84 zWRy6DS=c2P80OU&4B}!HAbs?@4zcT&pm~e-EeN`^r==eD5h5)-tPtY75Pw{Z8USce z3o)060c60FcQv}L*_1^hoev%O9~m=;z;m#sqLo>j&1rlvJTl@8XP`Ypa@?m)`QX07 z+|=t7nzoX;Dx^)qGi90rZB+dyrXfJGbpt0+?t`*dN^V^C$2*AjAm~^B1y`a1YDITc z=*egE_4oXDv+)64ZXlHJNYKlyqfK4d`XBkl(;HVe&%reawX>7w7i}qLu0hF&XK9&a zeprkq*k}2~U=a{#@dA6>PZT?aGZ3L%-V?)_i;KBW3G&61YV>Q(3n)O?(^+qG4t~8p zNzkkNS-5azbq%fCJC!dcjWXw>FRN-^xU>T`S-{a}i%ZM$_efNy=T*=eFtWSAN!!F) zuax?%-cw=s&)^Fdw&-F+FI`$uasz;sF5bVifHs|CBEhgUFOIzf;*;y1vrk7i1Q$YB z-XL>l*^(j&dh?t4+A8SWFY?`QhCRn#k|IwJ_d4TMw@Q6b4~?)XD^=0}UAp!9?AP-u z^IIzYTQy@hS_;ssr9f}m&07eHnSS-;;eolO80|k&==#}$r8423QQ((HVH`jBuNZTy zGJL!MJj`v3Rpmby0s(xSac=yFH@fIWIij%R)xrM9Ig8i?+RSkr7Q`l$2%PNGx z5}(4AOgvWiMB-+*+TF2XrPyQF+qWVcjn~c87x-1&w|ya)e^YPs-jr!O}%plCuW}B>bhzY|;In(w-z7x-fS0bBz95PHGQjK~MKN%kOFJ z^#jdKmPOos`*%p5CrIh6)Z%KV-p(rR;L1VE1u~~)H-G10_vH+=a!px0;Vp+6ONp0V zo=6W7{%c(buYne7@YWv920r*0L^!TM&0B;!W|Zj3F1=q`ZJE5FBobsH3jc}N@Z8I7 zWNd)iqm+NgT=UYmt7-0tQSyppCnwR_VZdIB^+m%lGR!6}ann>j4h9ksVvf8}5ee+Q zR2b)TtW|-MT7)xGFo$*5D*{obH=xH)H@P8Q(@FUPWA|?gU0$oUezx3;Yd61TA05hH zk}4vEtnBska_jC&Tj9L;VE)XhMqh-u2`MV%7H-L`O!fn@*9ucquP$nA%Q09sTA5}f z)RU~TXM%c~w?it4mK1d9l$^V)`Q!#~z-y`?d8(kS7znR6S|l&?Dv-uIr!JAv^Wx-Qr~KYn(`^>$pjyfR%*<=9#@!#y(4i&cf1jt!+z7Spm=5$<4hG zW)L(KEWZiIEN^Yooqrk#7cb@l`ZDK%siFSOC^ZK?-0ys#``n%u(ao?=$D9JIK0*f+ zAOC#cS^wHW<8c<)p+dNEBRdPG1!3zdZOlX2U#P zI{NwegAMqJryXfvoEN2}KPV5O6kwzW=# zbs`k&M4>D~5}rF$D`A}oVWp@PE2o@Zwn{=+2|2vHCV2^Yy(jSsz3j8^_w&Q&AK2x2 z+4FhX9?$#XdUNdo=G^~Z1-}Yz~e$SNkj$<>^lR0fZut zDscW+8Y-e7pF0~AJQvG*6Q$a92c6I~@)ErBN{gT_?M{cmig0*IMZqB3gaq(SJ*~&?c`<2IMuWpsTdxA64 z)R5_bVH9{QH6vo}hp8#&&$gny=^x)jA^uT45TjhD$ApR6<;i&QUK||vt2w9z*5^=H z|CGRu=Vg(;7KDJ;ig)W3m}T;o-1U~&fo66##W+i7R>jzHWuIXbI;o|Y+wE9zxYFV( zP`|g*vHNz|#6P$8Awf~|nM@&R@Iq3{>k?M+-ccGU>-}PTAbsXtjtlF__8(<}JmzYf zqgQ@J`+PsIMiQcmPyEkEev)EoSBSp)*Qr})rAa@7SRX28Hl!0QO6qDI_HSMBNn~IF ztettsUw%_@ILp{YWZzOyLKjNrh^}IZhHBx`D3n5hn964^rk?ozIBzFb$OOc?4;djm z@Q6#}syAo5q9GJ1)m%?VYv9z(*&Vv;x-#XfQbmPLqKrgeEV?7Tx;BIuTXpvr0Y^`t zO^fMmoqy$&v@^%!!F>c|8rnzv>-lWuyIVQlCP~X&?G<}H6<1!N63st`)<4!FtMNjz z0C2B=&^dpB<=XXD-O7>y#Izu^1CrW$`Oms%Y3V%@g1HZuCJd*MDKw7sg8q8M!5he% zCMw@l?q&MUI>KvCD-%IhC5qjri_9(n|N`~ z-y=F^O!v??_5Q%}Ni;x%cRXw^0qTsXGsp7x;FF|Ns@%;m=wcCoQxvcUFn z7%cRuxO)?lH((RJmkX z3p7_z4h{GXg>G;;QvzA#^HpojYGkpLuUGYhjxNl%59UQN6d?Y(BY1MRt4|GQH+rW4 z#M!n?A0*bc&KxAH%$9*fyUD|3tT9u?P0>yEjm5b}0Afx+MnW9Q^CH6AZ@7AD@)5+Ou;toNT{94OqO_PRZVQzEhpG zPTb5(G5Q>&MM%w^pY*+fPOW~if=9+W9~KNlFpc3Iv3acOU)Dxr-B%XrP3JLkn{L^_ zmo6wd!Y*P!X4#jDZ=I;e-TY>DNl5Uuy1e<80iDc2o!jQe+$pY99@}Q9Df4-d-c5cI zD(^T<#{8F8<$cH2;obAQ{3`3tT{d!3S3$w$*)D7EJEbFKnSTwk@yGS^!8SP3$9ZA? z49YpSSpr|Rhb{s8DX24-<4Ms#>?V$tmKn%%Zx_H}L;WC@!k}_Fln4^_lflt_xfw>$ zEmz2d)qxFRZ66NpDNMqTYs#F1rU%tjT&lXXD2~ z{87u+*{>(=nSIn6iftA$GwIBs&h-`kr#nm;d5U`U+wErL zwH4&ftn+K2`q(hV*XydNB^l@sqF*F?p;X>hFG?-))z=B{FW{Hk^5NIybMR;UemrTo=9|72xfpFfI%_T5l)NP*bQWuMB#zvYuaQOvn+Sq6T-}=8>V=nA-p0pt4;;)=Qe_u=PvBsm zocRhnGEZr!6#$=#vzb0Jb|eBVezzau{mL;5O@i`M>H}T` z#eeN2RFj5SD3_DguHlg928x|JW>h%ujz%c^t=B?+|@-uDbSYzeGTIyGaM;p#8 zSn(BsBjmAo^<%b~e5k#zmHui04&y|qKWHg|ogPd?7&HzgJozLSKxcL*YsIy$8^lr} zhw(zjFdXL-=L1i88H?hJwHc?|u0D%d&?BS-r=sNdSj)EZ7$+YjW|(G!*i^;tOC1yf!~qq9>|N%W0kl+ZNXp1j zC?tV$Os=&3GN0CZDN*HXNLJx~f0R(_>EJSYdqTqtJU4#~4`+F7=^PU>rcW>I7p7tQ zSBc_Du-Vt2Si&q5A1YTC9dJ}7G%8~xGEMr}gHN1uewefz7VM(-Bpj&z^K-xX=EiSf z_;W{J{pXXx^maK^k*fqTApknZh5aZ{Ewq*+&73!jNfA%h8gXeiP0k6}m|*?101Zv@ z8is<4p#P?>^y!k*pCCrYBC=v@2*a#=lY#NuqRZ}Zj`!!h36Yca<=f2xtJ}+-rMnh! z_yE8^Q+Y*Fiw)Eq#DSR`>TY-vfK1T*rrfG|yMvMS{~}jn2v`gg`6~|r(ha*fzB@os z2G^)izxSO~AzCrhc)`v#E2AYWWrNp(d%`)F6+tJWmiBxfdSZM? zYwA#W4)-mZ^*Tr>@qFV+Ihxy9_WY|T_I?-rq(b6Y#6{va^;!;&f>@Ncd~?w$%cudQ z`ppQ_+bb@A?bdMXpb}{4fIn>MLW%3id?PQ=NVg^F_XEiN-ZK42wkFMudl=!ex=hSa zx-IFyd_I~N0Q^GMB}YD4h??xNd{lrjwPgZn%ym{dbk;dP*!FJU_j1n}OXuGzq>ud6 z2v#dqjQD%hFBB5HNSW|=@4B@dWAyY#u4n$bB*DDp`KKPtmD ziQk^U*F%L3<8oQlLgFoZ6qHxCSipo=kDg0hxxU!tVoPvzm_0G0kLjKubnqzQxNQIj zZP+2E$|CQ*nG!$qJQixxi}=k3ob%Md?wI_W_V7}K9G_PZzaG038}l(Utn4P7zReta zZ$H^res#-kpMgD?Oit2w8@p>G??Mgdw1GcKC+!dfL!Ntz%(w>^y)S6j^{jA{c-%gY zVv$;i=gFNc06I!w0|Y<_OjLnB!>>=?JK=QQG-Fwi*T8$zAQm_agY(uZO_Pzg?zwVI zEIm0z(<3E~eppj=A$AErk3cE=!!B)QugAL162KHNnk*<~7_)XdZAvpO%eN#~AxrjBrk%5dC?WKe*^mYF|nbR85OE$j7XC@)vW4 zW5uw=9O<6QDuj1K?9)Asn} zqX!IN+(Lp+Jy90&`mTip=b?Ww{S#=Vk2$`^NHSCm)Pc^r-{1+(^MmF|jAYaJ;BaJd z1OdYxk!xzLw6arehuit{fJhwsg7?x7~N+`mVRW^O|wi#kpaej+oY$l z?04B@)Xk=zGd0}*KKHoJhQ&eHV)}t{?&2TbLUFM;WTFQ^D}6QMc_;uQKjEb}AyCSg z(+$W4N zqg%3*8$OhbU%A54>fZUjLR5QJIZMZSJpy^3zK5Ub z31Ehm{MTz%FS=sU^8C$P4i~@`{P{L3J#teGZkmK*0LHJ5*U!S)qUehSkJ(CKli@p$ zID|oEffH4b2E@P0ZqHCcO3MYc!ifoEFoCV5XYU<)vWPC(-|^>Xi*=C}(Wlxnw*90n z*T|M()S#=;SO*O&VW3Ek;lIT#w%pb>S|fC)$x_0ym6!)A*IbJ|qb)vFD*-~<44E7BhrtpW?V3zd-0#q z^S{NlN1l?3gz>|#;1-tgtnzmO0A)Q~QFk|#+2i7?TbjaE+R8HJJgaEvUp0A!mDfP6v8zyRxMNU|RzY*1dE4 zAkro!IH{Uz4SV@M)P8t!r`;UhKb%njY#(I%)SH^RP)(D>0R>?U{cLm7M|R8mwX+#? zfyf;tg6dhoxG1P5EI^8+v^6Y@;sEt&!LvE8H~=->5~2y4Hyiey-}_e@d~>ivU#Rf& zWkiMmPvbCwJ!@}_EAu9RSM@sLo#-V!9fwEw%I=#$G*{^|3wg~#_2Ga+%Rl;BCm7Sw zInmhnnM?apBFC{9jIgI6Ui>V+mGLo>iS%a-KF0t)HN9{BRUa=o z?K#xLTf_-&2@4+QuziKOFTw&DYry*61vkWj(v#EWVF4N9V~0wuc9YgO0o(PWRtzW4 zQMvvu+g>l^U0ht4IgtFN7+qu?YKvI5=Q>TBibi|p%0)Zoo9);;M z*%Ja7(0cuuy*C?jUaV2BO#r6+=k^OY*822I6w4vl%SVsgM{_Ludr29}xcso-`d+tO z#D8L)tIYn-HXY2=W;0WzNAw?48w#86n_EQ_80$U{v8;;T-<9hz<5Tz*&QLP2le^gdW~PaTT_s;*qK3Y* z30URn%~cy*HQ*;U!4~JkmcI_gbv?h4=WC(I=74JgeU%q9D*6-_k?>k*5pXDBNnS$a zC3C||buR=DPTQ(OccTnljdrFydHdx95Ta}~<^sxLj7JxHw6*+d^y(WnwqtkOjJf0( zux7X9e2^r`?MWz22_}24#)_tl($NbZUOE2YX@Dh$g zJs#!Daj!>OPNcc}s*W3P@$!Y>(K4(;V*Fq9UX%z&CEAYneE$|r80ho=4$OUx!wj&D zMh7r-gz`$&5~%*o&v9MC_24R!+?15r9v|y4+W50jd5^a>>_B6c^du5SmL~=u%ne~j zXCTbe9Q%3%OGX@IaL}gSj-4#xNQry9>Np3mp5oB!?RMA~Q)G*tUDPSRo{MDHOooUvvS$RA^XohhzMi>q*-X^9Z|~Tde}E6 zCsq?G+m~A@!RVi|RkZ*U4hnAhQi$vwc<)4eS25M&CT%McVBRHEIAvB4&HW6yz1W8k zUK&2{#@yL+YrHOQ50LujLObS@C-&Vy$TG{ak&+xHo2~8$Yzd>J1CHT`%nVCR1(@f0 z&uW#hAQ*UeLTFzPqRk#-TEf@q#E=KmYaFe#)~S;3c!l5TNq+V%WxebE6=>kwrN1(e zITJC?QUpsvoa*49g5I<%NYNB$0ymJcVmprK^=H=hi&=w?WOgO8-S;B&sd9TjKI}7+ z3Hox5U*G=0j~y_QbNr}GUD6*rk44vtRt7I~nB6YGMwKNPdp~$U%d-3Iz05!gUMlu; zeAj*G^s~?rBw-EOp=m1A8g#K1LL+Cx|0moY^fcn_(o)|<{gHS^l0W(%tos3(U$l1f zX46~p*)cqNABY}|;w+HG7%f^70G(7;FMU+V9?f!Z7se8{IglLJ(l7BhAaQ0s&kOfa&J8X4YtgLz*6Y}OfH%Ii^GY~4WHjwtePfOUP8M#s znbEI19(HI^gl6=VF&bNQ3iIl2D^UD`fkayN4bf4Cm8|(y3&PiZ+F&h1Xlqh}9#LB* zQ}snlf(|ZF-SNIcX+?ptUv3;#pchu5NOey^rP8S_B6sj@Mb-znNtqSn!|nnB>7SuR zIgc8vYMQE)$B}@LGX0l+dN#&N+*(n&yJ`}Jm!riNbxSRf zOXnC_bN8FsPH7}7%d@$ll%Ca8x00v4e|GZnE}#)xsDPwr+RE+9|2weQuFNeXFjs86 zO!84ko7Pz^@;7d5vBy{lTN<(7q>Q+J=>dsUjI%BLc+%0ijxMslKBk0wWx-yKq>K9f zUr;~Q*+?=TKmdjB1cEX?Cuu6()FeW#KT42Y!Up66gh?slET`k@Zz88ZajT>%B!UizwbkhvLnsS-}p}V?CG1oa`y~Vx9BdUy)`H& zhgCFXHOq@1u9~TFH}06*c>7h`=!|gHiJko>sD;n^tTtD8zd4DLjn-SZ+0veTx_(P^#esoqpCx1 zh;DPn)4U5cpti9^z zu@p){ONRh~9Se-B;$(r7OiER=Z}V3IS-;gU!ud)Lz@vvHE`5OgHGQ1T9xXYy83nq? z#B(kqqE&5Kp|~0BuX1v+CGBg?gM6p+=hSd)caLeK>>-uD148$vw2*B?Jrx_zn8@C}0-aPr8q-4V{XXt~OFzFrS&!QwVggxUVXm(bPD zMmr~93%!d$4`v^iB0ZdHL21b_yMYzh%l=9)mi|-SnMd>C5Gn<=q==i-cqsyVOk@khl}huQU4cAp@)?R z57==e#kxf&#s?5p?;-0jMwI-^Nh}Dty+ASLVkH@c8=1Y5+8ZSf$2*1GyVx2pqa3g< zqid0bHe(C2T^G=>+}_yV7=elrm;_j7LkQS$`cedTFk6475K&#pfj5sm^ICIr8BDYd zK2>6w&^gj4?Q}Nt@(WH5&QBFbS%z`fMcGCj!8tGGZrZeG^z`x$f1Qg$f zPGj%hp?T}}CJ!>F{@!1?cV5K9I&j>;#-VrLFWZIPSHH^E_95k_`-UvMPYK?1?QuNV z>%J1Q&@FBOArvX&5J&`pl;FmUK~!Nhs#;`L!dI%w;8cK3Je)k- zv(G47h8VUg8+##?LTDJ2oWVparj)(60SkI%g?AJ~YlM&GvY}W9)9~h6E55=JA7PVl zyEtQE=7?3u>?wA%g%n9d*>_*1;A!=mVK(XFHfOFC1Az!}C3J-3jgwKtabj!pqT=k<)0hrd5Ve&3lXZl$6H$`vv#21BnIWHO^APCd@m#wWmNVzl zn!AUnylOmzC5ag)ad*FdY!r)*;u8xtIr0|~LNNc6`rT!NO3 zw$@jf98OMDszNPB@}#yeA{ZF%*Agz`{Dc`_0_(`tO>~GXFP}fIt(*w`wkM&6m?Dks z?J@WlQDNM;vr3F>l6Sw6`5E5r{!@j)7_zy3rUC0XV0Xu?!oRkU7F$66a0T8eP!Sgw z0iwi{MQL~vMIjhadvN8@19UbM@qUtEf(HS)!=vEy`oJH*zvZXysq9l;_0pK3T9yGn z((W=TbDvGv3!`r3<(JGI*I0&b_dEZIHEdFco2U2bG|Kj!08be^oAD7*7KIscNNB=kozM{DgBftbYuJ*JdCW*JSE{5q7<#namIaoBj021#71^ z=}jYQF}zn>A7QM;GH~c+p7fsMG?^;IbR2YzN*P8C3rPx=vttJPzhGt1lH1DFSa3~U zAQPfaZ+7@%{3evlN4t|12up&)=z*#;{U=42sgOEknpQt?ywmBtSPg?lA*{QAHXEQDFYNXGAsUad4qIOK`m(&S>> z4b%DNeH{BfIHE{}j?o(F4GJp?6>+#lDFX!rn2PikXw=3_s@Cs==f9-&k&AErcM3FU zL4GCiBbWvBtaVfoj;^_Uvz5Mi*8=fh_Fcg1yQwI9mp@0RSW*|wkgWI>Kv}C05gDE69oGHU?)@epin$_=USMxle0&@CN7 zh*J2zMQtILR4L+ce7*|Bl0^}j!yM~zi5-ao;hOlQU5h~+dvQvY^r?}f8UYT?RD|d8 z58k4x%8dW6dep~;Y`Ou#3Rb00S7pk&WKKANh*?Q!lFl7Kuux%5W%dC1FcKE-ukET! z{8xz{!B-jQZ6XeA=s{|@;1pBSXdSr1%%+?|ZLs-M5GH76&9 zf}m0u%Tt2W=E6VInjOb4tUb83LTymtiN64sJ4xT*vBTSR#MKJB{&JqgJ&$ZC=pHg$ z!4nb(pFySyKvPwk={E{d$u4&(J}N!o+=3R4N-$+pVn#QAFvF_}-r$P)a7bDCG7AQm z@56D&=`c+SjUq^Npo_Voo#HvRKO8#NFa;Y*w@gt1ak@vC`20jN_(gR`j7(DngVM; zJF+M#D&1mNpi*(^6b2nde}4ZofXbkkcn`$Bc%1vv$jb&o@!ptjr6Y|zt;D(gtV@U@ zCANfITK2pTGShZH@X*A3YQ7t8qC-HJ@A?f|eRH{x2RDzAOHG0oVL}w%J!d`xsALZ> z=<2bWgkLTwIx9Z<5UVbje#`OgD91{6f)xk|DKt7@`2_(<>WD_hd|;U&0H63{Yg`Ts zv+eg7a8I)@RQAuDC?uTW^$$p&rpJ(Ikad2J%$`by={qJvsboxuR0)?qg-NXDS{75~ zGLO)=^X{7Ogp`WZZPP4hyS73d%cl3W^v~mV25ITPyib&Ezap4~vk% zgkbgs$v^X0n`2$BqtpMr=`Kau?>Q`~NmKZPE&TmC1-&Fx6!5r>l4sCTNHSjh-JB{vboq?;Dzc_wsd10V7{le7!) z%`HIDIaGT7LH|m&lX6FBMo9FRFx_L(cX92%VXpV$LqD9Vb<0|ZN}#U&;bO!Du9`qF zps#a~y&6LG|G^7eOdP+6v09hw%_go%%V=oV)HGBimiztU-tQ)GqF@L24HU~q9gRc9 z%AwR@I8hyIUJ?wLTs(M*oXl`|pEx_3|4|Di$VD3DO zKi&V)x)|Em(&c~?gNH7PhyT^37t${zMs=0f0f32` zG{!URAOke5U+SrP{kWScpX)A%Fan|;=y;_+R45m%8-b*U4-UKfKlyOPTdxAp4?cD9 z7o0kt0Hw5k1;$-r^DzHyeV#?}XrH%Wn-j+ACooyI`{{u5+@J+UeE974&^@?$kD}oT zrqPrZt2f98c!pzS0!ah7xE+Kx*sT$*HDf^-fIxg9H?mx8&!axukC;NT)Gqqf_;8gGx;}8XlbAwrsB(Z9}ujTmi)&HMSR!hM6#^S-qI&yUwh|a>b6r zKSEhN+)=5o$BawJ3ZHNx5Pugy%c$Q?>S8`@{VF|sG%jP!hqGL}_KO=bcH4`gJZK{x z*fFn`JGAxa6cBmFwfiS|-xAWPS zu|RQ`~}cAfI*gS9fraXQxgTS0k9`F0J~(HGjvBFNmC5; z>2N+Djxd|Q>u2e|F7U3m;mpMI9)07S5A@4a` z1uj*w*)q&3y1)V<+#(a1S|bcX(9kwn2+B@;08=(Pa);n@7WOXwq80hL^@TJ1QwNOb z@Om}Va2Nh08%33EP-n*Ez$wd>o>xZUf2&I!suxZ^XY$9uT@IMTB`0o904Oc0TD{zb zRq>5!^smCqL{1u#8FY}ZOdct^g-=P*KzplCjLomT^`kUJr;*?)7q0CMIR1+~nbf^X zo*Ahn-V%^DkU<9piMWBNUy8j>TzOe~ZEX#zScV<@(eyGdIB~JJ=Ex_B*6~J^DnH{2_t?#iaZvMj6jAQ-nrAf5ge{bMsm0))8nqL; zBwj>KagR(lIr;uq0?OZK*$(dnpJiX`m}u{X1iAjz1_dgY$+bjAmMBRv{IWo z@=Q>2C|M3c1sQ<|T=)Up9&_gq)PGRqu}T-0h_&nYj2ft@FQ$PGwsOEzzS2+zGI{p? zseoRy=;x%{X%4%}DEjP^IJr~8k%cqW3nMV=1V=Jb{mwpaTbLS`0W_VvyQ*XL)%)~I zhs?Q0H?5?wREOfZ_aoTte|V5D&KkA1cid|mw4bruWehyk11S6lpf+S%^f`zPEng4( z6-NH+0*IDBuzUl|6QDz_0{ga}2^XFw-en8PxWW=JkBqa-Sm(n>`O60K*WC%>p*;H( z5&YW>0F`}|s$b{uL={J9VW@NGc@0thY_DGLYEzr&38{V!(MKM#p_u$C4i(D36Us;Z zJ6ehjIfxljdu!sew`9!G9a--(q<0o@#WU6_a9{OEfg{|azx+dKKl^k??I@xe2iw?271hK#&Xk>d3a|4WXQcue*#bL)=}dH ziE>ASu-t1ePmtl1lv(f5GrlLZ22%Z|vj+E%#!$;=qO_#2F2AXW;k6r{83FRG9Wh1K zH@64+pBh0kx#8#h_ZgFc0=eNkwSj)sU>Y%+krP2aa7!t_&jgou%HOg^0{KRIW8(q; z!T$%<2n-VsLF=`+qn~fv<%PNs8t1@IosDt#BA%{#L(uE~f8qTd7M-|r;W+b@V^L1y z>KsA1F4ns+g<6yX?=cwtgG?<_8)`L%6lb8k!w*o8Vq*V1WcNQ3W};~_PO=V7kP366pQf9B)&MN_VQ}h zKyt?A@(jKUxog%0O}_H&s}Y)c532lNYrYMwPQNxdcr*Dv{08WsHQ9s*MrYgOQQ-23 z;fvOgelzdr7W?Dp?B2(aA61Yo1s`&o9wgiWUy!yR4~DRGuq_){UOG9j<{?@BV221; z!DQW?SGB#OtKll>r9y>eP_0o#E2XfdI~gn0XVPx-y?K7J7Zv+d1jiQXb&(5IKor^0 zz5t5Rqbi_V0nlqA1PsQ>w8x*(0;m80|8n>Q8f}063bj#f3WG_y{zpTd94cv!_WD0SijIlK(f|636Pav(C5`+z!j5o*PB43< zJgmG{`GTY;RF2yMDzed-8kNFE-HRxK-h9oliBAV6;}?>8nONczXyGmVv>9+!Zn)$Y zK*sHw&Rs{Yzv*lYjgpNXC_y_Oa8)@ixDONv48N#Ph6%}GBd7uTO@iz}hupB~fwoHU zLdEN`=M&X@A|Vy1P|D+OkV|D=6z0GBKl^DlYSDXew;Jmy@nx>O9v%^yB1643DZ3$% zc{NlH-h0(iZUx4>idQqeHb5&s3pQT|&0CCkE#ED#XPD$ibfH8sL z|HvfbCFsI;P<%SrP*&Qid-V8=*6@FFcA(WgZ#G#-ui_oxDlc;Uxq%z@_%w(W;x-P$+3Tk8Qh8w&%uf zt0JIWn!VO2ps?07oRVw7Yaq#5-AkQWU<&z?sTz1|eleY?_euP6lbv9bB#)8mH*1Ak ze@;dd5IeL@xS!59?)LFxA2CLLaltcZyh|$fTk$bLcBwE{Z;M7{-Eg8}adw3I0mtV8 zYp2^f@3O~GP^6WP&g*#Nt*W0-3+y2+vqxb`9a;~~#2XRXXwJ?pdXU57710jy+mbzT z5*?_Ri!?x4O;pmu`<^IFQ?Fd{anjwRJq~F&Aja_r#-(r|lU*9~ohcOVjUYL|MjRPS z!siq9*MP_!#QXKV=%@p>EX^H_wLo*nz(tM-=cF_#2NXeWOayT8(42yLE$;=n8xTL7 z_gG-eLcGQ4NRQ@^NhwI6YH^T5z|1HAxeI1XVgIie;~o$?VlFtie=)gt5C704Pltjv z`HvCGx#=v(q2tEqIfO3evZy6_FO}#qfWa=Q@$Ery_M%^RZbt~B_?Px(RWgKM3CdH{ zPdoNN{U%!%Iq*#&cuBU2U6`ET|PjPmN1-%9wBmEpIa zv!u)+D-rm5a!MpA!#nl+DqeoI2j1Y!f@UJcr0=6J1{YYT!TIqufRedp90!q;02LgR zNA}k&ne#oW*)j>@I2g4BmZ3-tsl%B-mx)%ZyrbE|rQ5&jv$P11jA2{YlgEOePVRiL zi2wb0>2deGf;+Z_TE6n;feGXH$8%Sa8<2Gq4bF#wgkM==`~Ha@9r|Cb)alsDw`^*mBQqlbGB%kmRVRAd1ab)X5NG#I+AjhwJ7A_8BiuBC7x%_xf!F@?HJ6`EFe* z>TuGu3p>=#_Pt!$_&U1@aD8St1?uNl8wva4fs5&)*+c ztm0f25tP-(!;;+ zIvt($nz;rNTL(?kw;qbM|` z(8Sll>Z+0@6bTO=jh5rz6kvUHE#3D3AA#+&`sa&4 z5p-$H=Dm^DD345c+fVEVzEKHPsaW;w%QF$ss$2K^l-+D8r6aE zsX9iiEla<8S`z1iGE%IGoN0X&=op>smYQ}ts7DCXG{?btN>I~B*9%E#5@RYzt)|NxUy>+kyKDXMl&&NLLq) z@KtA+mFl7__6Sey$9FJ?o-DD}y3E1&f)3LE&7g^n_m{nW;jb0jyTk-|B#J%1 zYk`kajoIbESGv$1rIZ;}Uge&|LHTxp#C8qzbk@~n4)c;XRp@n_7vXJP*tI9CH%#$3 z(nKyMUCYTScs^l!aumE#24L2I7qG|2zFf2CxK!M3iN?9njLtMCFczhj>#Sh#ldhSjXKwBNY}qqqs7dL+@=IAtAn4Ea z%5xUWH}vJ@DFF)3$u=lIH%k7A5bH5m{3i|_zK7-Ko>Z|reS%%!edcOwneh76yR5>) zy3TP2E*-iRI6imLR>{xCF&sgwe5+JIl!^D~fCBbq)S!yWO+C*w2=^X@4%rRE{?Yp2 z`}(0a4_DaY^{~?8=$A;NA+b$N=F)m01xP>C^C+emAS{n11#{)BX7U|hQR^{-EIPSS z8Wyns*gms?yKuOaL-JoOc1x&e+P#EBZECinSkq1J0L9Qu^XqhL6^el%whJ3DdLajO zu(~qBgN!lD+CFIg$^)Uvm$E}fQkR!kFaPv|5`stUA9w+cX8g~~6Yrx;0$pH&Ea#Xd z9)53@-G;Kf!is%-^sepQtLZna3g8a_w&4A~MNA=nd_6>{bKM-wAJu8{SzZ<)m$TkW zax1yiWk$^eJcDU_Am)_=L)o25M;HeOUOLeIh9lm5{Ni-tuerlyk&@p(pTXf6jMfn zV#_o@Jfx89{1nfPRNS6>fC*B(^=OL}*hao1wVGbtRfvNvbwb3nT{CC;=X`9yiq{9! zo>m0|&Hii54=jI^x+CYqn!s=JIh#vf8AeThG;yWD zf_-UJ2SZ~eFm*?n@|r7j)clz?bzPluXjTdSwf36xkzVkw#Qu|9}onEgMX9?l5Xa04LPY2kH(iIPT*cXE=w2+ zdHpp+vlxB@hXSe-hXVf?-vvibE3YF#dr zKX13?U3%bl;g$(r<#0pt7Cg<;%hlt3Z8# z=}i|@^9~bR=_0^=XJ8gAYe}t=9yynt)&d8b7`R;Ds{~|jS7hlx`PM53)QBGBnE$H% zrAvQp?^X4wt9UI?n(BOio?cq-4_>zxKr@!7Op#hAO!Y|%y+&Yku&R>uoyCB9^313 zZMooJNDs#2MMGR5c2l4bQ5otovn09KWGj=3m%fz-c1vO&>w5v<{87jTu_Vp_#4O@# zrs%3kC6mU;844qh;g=xTtuCUS)*ikc)9HJ|-?YFZ^+hr_;FX%HQV%>a%RW}`FJiu38B#H3=ve^^=3fl3ddr@rYVml3t0 zg+n;{sQdirxl6f-^>cugvA{^rvSgKR4ul9~Pq>1{F zg97Ep+y71$z56*(_*}e~IRtrzZ?p_RpvX0;;a^8v=Gh5XY^vV>v74lp>o&CZ7rqTR ze)h@%&CtKD5$d)j6xEgTu>ilFk82kNC`X2Ob80JPfyQe27LU69K?%Mg@xt=On55Hd zB<{I=;U$abJ5Yoq1ne%iOd*YwZ|N!`KItMR?)->sm`$jvy1y8QY7ins12jP)bE+#| zIl*WySWv1$mLwG)+=+K07qhfcnC@$Kti)G9tA^XVrtUk1k4p9AAt*+yyvt%bRD5>I`P$M4zR(ZN{RBi(lqm^@Rwb`;h_oWMJ& zRkG-So(h|KDt$uDPh5dhb!;z2b|jV*6e9~ZEi|Y`b{)rWd9mWO6gHxR-lU}cc1hxt zK}pJJNqAf}x~!~Yl%hgcWY*6XElH+AQ}aR(WYL?7X&64Ve2Fm;kFKb&=8r{Ls{vw} zc;zU{wu#!p#CLx4tYh|Uf zRD`gIim(Vdyx;GwGr}T-5JGYa@x~kb?(^sG_y2CYZM*Gy9iGqU<9=UUu(vbF-*LY% zp&*hpi#ME*dZDV`XIa|?pOdo-68igp%Q91rWxkV9zK8UG1sv`e>x%+z>(N*D^cFc^ zti64|>g@2SrCG#dK-=ebLDp`+xc0H!@otsR(jDy1r{{*ZDJ2}oC(mD2au7is+Rd(f z^7oSPKg4>9=A8YPb2l;KREpeDsi#}OxGlv4*OoRt25e>I!C#lC9O}CpOQ(M>j%#Vd zXo`~%Z0S_upUq+;VWi1-j}v=QJ0|CN?y|rCihLUex(LgD<_W7+Peb|GU+|AWC?DE-oqi-^TW|sfN1u6;#j~v>1XD4Z@EgkBy z9+CYaU?Mv?rdBgQDxIdj1ixC+SqrsxnU`(uu~_Un*TtB=JI8n5oF}JW08b`@bHaBW zo`#cXtObth_#lbgx9RmU%foL@E?3d9IYZ4e-@ z9WxgJ*;i360YfWvpb?7A$B6S7FWIePYv!EnYsH-UzJMo+=Z;)+bj-lmlEj3@?m$?% zVFMTTQJ}d+fHrQ2^kOt-v-MjK;qkCCybn`sv967_( zr`X-6m^_LXAYw}e(F;g>T}+5q4<0mm0Yjy-yWk-(y=t8+BP-PQZtzhD0Qvm)k0tzT!c zh?h-0esJl{0QM|>m&PEHcpiQ%K~C$fLW~tgWvk!JVuv|x9Mplm0Dc(2a0EMV>h;yE zm@Y9f@O>Bl!`POGT1`O#R`2qrV@JOE>WON6_qxA3>ExW6pgk@_m%n^bWL^%TeN>jN zgJ;Yh0*i-?4(S#0n3_Au_B8O&wVf2g>Znw4 znoB*!2ikDl7*s$!g?R40N-DDYyH%M*Mg6;Z*>9`%S-yp65dFkVsh2#1^#-6RU(XSF z9nJcC+@g#S&h!mliak|qt}zb&zKqHJ;K{`oDobk%U+>HkZ8$S^C4Alr>=eu3wsnN$ z^*jm*E%s9Wg>Rvbs!;r;H`N2ltQ{_vO?7nxB?O$_Z)Ny6`NOo1K zU*=(&S)3kfa$rYeM03cA(DjiQOb*1y@6-T>N_z+ap{xzBUZR6Nm7?1hwZ%a4g0riV zQxQgv%xRgeX4S@jmk!QcT|Izm9qOflj^gzu;q;-WB3-e-wxp@(*~}M&7*=UKu*$d! zGS<)hTDc-FutFd!+fKC z!O?B9k_x*Lq7L*kp|VzzI6_=TVQDB6%^jB6ka_3ACL=Gb)LZ>Uk6#g7xN!w7Y45T_ zZ!!OE+4r+y_2B~_f23i4?yQ$4Ou%znOo|Vp{xYoA^68IjBe7gy&7{hz<>!fQrSlQs z)Qm509?33ix8rG>{r~x*ohugj9PdAM0|=A&^fc&AT((wKay7*Xcsg|eoIi!(59#3t zp3&D3{;@2H6pCk@x~$~@P`3mP9VrRbTxofxXN+CRdhlb;M9-le?E?lauPnF7vz9(Q z`dF?EdgmV;8IreYCViIWl4-Y31OaLn^5o<7*<+o#RV-AG`*T^rgfW7<#K-q0+Qr8#=dLv@P~O3*L-kEu zbB#9JQj)aAsl%uvv%R$Pa@FPm%|*{%eItF>3-A5tx@^Kqsc}}m`@uPWw0dKgz7r*I z#X%!`Q`=*Gn6??~SKkE=Q$;kZK8e$*=|&t>U8*cF4ngG?mp9M9nVSMHu*bGe|G zxulczAlJZs9EIIv-pL?#Ol;<_hIQGIQ$}BEbLs1OOXyU>`A1~qCa$q)ooi|r9Kpcj z2(VkNh3nv5n_W_UKUP5T@&Tnm;JJ0F2XLlMyTaWLxT@6Dn0vbh=D+)0jN*+||Ed$U z2GZ0+cC$G>vaN@P8NFq(g`z!1jyF3r8BUA`#TbjQ&P<*eLQ6IyI09!UFB>XB=ovf#}bGmLlHBoS)!Bz^CndW-P^790L9_q zIdN;u!)m0a%oLBriKfHx;kN1oetjMZ7Ydid#bXWn3T~ICYF0yWVNw9BrX?*2OV(#?wtFcyMNk z5&^UpCJ;to3a^&ypUagGEHqj|(_q&jz%oDI$jq1rPQ&TAcN?3IYRHWpnjt!Sf?0rD z^y^ke%=J;j%MOSUAMlaM6L^#c)mdJ?cKPkx$8(OYElYi$BgZq-HTihS4nIK8!KbPH z4tc-j(0+%N8a0HgYv#S2+n!9rrCv7L$g>ckPywq^G_^#r*}LySWZ4;#p@nkEwYjgy z41il}rp|;LPI~I@v7&}CQ*q*modGc{AvPe;Or_{&hln`!G`p9U>uJxbBLKG8J_yw} z8!oBwSK&M(L7cq;A2HI*GSpSHj&D$H8zE342ocbg_NsM$%Yo!L1H#`O5@M%jMbMl$ zqqBzHhDU+5(*aUzud$#&v^}RNALu9_hX!8)2Kg<^aH=m&(X}Xs`u$ef^gTny6$69C zV~3>f^}N`Y6FP*y?mmlIEJEcS^3OvdRnY%C4K-*R{hP76zG!|csAITb>X=@P5tT2g3beBFYi~hUZ)cEr! zBF2-3@min?_PoZ%TMR64p2+IAYT(uDdl9VXdXza7x$!AkYI|=UOq42sN)^s~)oT#f zmTIIEtn--&?9;=Gi+#hR*KaUlF`tDlg2Yx`B20}OfL)Th61fWSbQ_Ab$~wxbS68q^ zD|Z_wiLt*f($LSUR1(Ce7hOc@xoZ9Yx*Mp;$&#k8t1&=jf&d0^+{nq!kQNrH9W``0uE8Z@B<1WD&iA^2ot z(6C91gs^o^IsgGOpqrSBwGYouP42$In%HN`d_LcJYT>P~J5Q6UEwzCNU@)~B!@bzV zvtkX^=K|b?Eom_pV_5Tqz&O9|$2UpxnTd-yp&n-~SXwc-&58vbtYP2*IcT|}$L3E% z4KMwu(sCm!6W5*%{@n9-t49>u5rXXmSlC6u$WKYKm7ZmV3f!jYMBC{e@34u( z2f7}IL9c+eZydyE9~0#tRA5x|IH034pznMjCWe)|CN_d+WEG2j{Kp&6R!#)_N}d7d zXFa$0n1vI5Z?epKsB*R_?1I+#ks<5%Z4Hh=lGOjyATC0I)==?B(4R70hW_KA!MJimj??Kq`d4W@XIlnxB zXhX7ha=2y2uFCg1g3Zk-ne&8K$^00$1%MR4&U4icECd5X0)6f-FhT(t1w2^~WhwOv z>H`cRRdTcWu#z#hsdT|^K~5oCq6h2fx0?RB_auv+?Y_nsEDJnz#bf72Wg2jQZ=ge5 zD&n(N0kB*uaj+TZ0;CkEvFdPgQ`TI}a8VyPQ3?nw4vw^qy}o?0af2 z1gxICjXLw?MvE&F`_Br5<8t`y&6``*}n47XMN`@(*;mp>`Pr@9D9E5Wo=bimyN9 zE)8&UMF@jc-UY1NDJ(k;Ux^vHsLLSBblq} zo-;ny`I~(xNN&!CNS*zA7`QXf9v^89aEB4ggRy4M_UVlan1Rn6D0?xTD(0Bk!P*)e zfZ7*!&&=(%_Ay|_!8ie6SkdV6JsF4$F#AwEGo@}O!F*mV9|%Q1v_Ug^#JAoBQXd0W zR+7C_&wzSpCI>SU0bu}jR$=B06gvP2RM_REqk<4r5KUwL2H2CNB9E%bDafUb5d=YZ z<8-v^9Bpu3=Of(rK6VjgJJDEM2F{D?!MsB~asxcy0c-ERi0eQdJ0*@C09;$@{|@8d ziIleS{3ZhY1_4}x%%i-Ec;#UzE5g!(Zz)sR8C1;R2DsHDE_I-9XYnkJ3ZsK5Q!o+x zdM2(68Mizrm#Rsj!w;q?I4{X?*ddWyBn7P+u@uk$d_Qhp6jZCS)~I0TabE-RL-c>V z0cryE(HP*SLZP+@GEM!sFc?Nv{F4WZ-m7$RQO)e^S>LVF#P)GmeAV`hbGE0CKed2zgPLw6ehyWK=8eXFYiTYV0@^mwmwtq zo2dO=%&@4Rhm}l?-4ItJ225U8E`oDa(Jl``b`Yuc~XbrE^C%0ene~y z8{LMxoWJkO3{}yx)HInD#;ePAJfF8 z=Yfmd3=)H95V+`8p4f2M;Pb@9)u!m!I)^h$AP13_&*Hpz;Dd-Oc#P0KJ;rugMarI{ zt7BPsRItcsB?<)cFPaWQe!QFO_*5M#Xd)U{9hy;%mdN^OMFVDzm;>H?Ad4_>+=)B7 z(r^M}7L7S{JK!MX49jT;O8Fu&uE7dO4=Onigwp+hSA>RRd!_&IR`M+@YO4+vod~E&AHNv9=)5yE5tHKQ8f`)l%!hMN!tGlk(A${zT@)ZZj^j3Af*Wl!}K@?~wq%dRL58 zk~1AmCI$+XY#2PY(LX$euv(WDP7?1~cgsZLvlfHIVX1O*;L@qnJW6$*{E zTu3KJ)%Ft+{F7J4&1OC3j^hVu_ue%|t_p)=I^Zu0?&cmdZ*sMN?R4ypQ%3eClg(vK z7}AF}r03~FEgU7+W$;c73hHiu2uxyB<`_jisK0?)o%u&R$ zzAQ<~<6F{B27*Xyf^`$F9Z=wBis48+c_eeD7pCw$(t93BsttB$b(Aw5WLAK_rJL!fOuLryGv=gL)L$){lG{;Cjcz_XiQJf<0B&HYH`^pRXtaym z-XXdE-Gdh~<}3t|LI;ck3=tK~wVj@5glRm|nl73E(e*#Boa5h2I-z59xyU1IS7_{2 z5d=m39IpV-k)X%|?Qw{EL4bE)z{}1P7jkjL@1khJnhlY+YAShcu8{^bzIEaD3xjE_ z!KtZ^Ah>XbXfTv|KZN0zmZi+u$cOfG;K{$yzqFk43v`!$1k zugu}a)yIST3#QK2@c>}bJW}R)->lso|}TVU6X}fxn4h^6+_=t%?H-53fiG4 zbC0Plry^HR=_cw#V&8#)6TNxlL5Zgn3KjtbshaJo)}{d#a15ChS1F#DDXX3WJ^y#7>YeM8mFWR&CC}2(j7ISrAu#(Yv0D&Nw_!SUz zIq%%e|_3>2xq>V^S69UjCq7)4E=n`9ySaxs2?%@M1_ zniVH=ek>g>I5jU*`ut!J9s$6}GdBkfH){r`J+w}bo9r>6s~)54N7I`F2~VPAoU%7x z+X_BBHHJ;EC_O(1ekt$$_Si8zP?c0IUE+IV`M-IiZRfUZ4P05ScZUG1x$q<`T_xK7 zEz>+u?^gIW#UQRgHJ%{-e!wbshx6;iy{m0kImVCSdJqPKH!--~tp`d{z!V+*#{#Tw zO~lf&j?4q}6V#v5LnsL#jdg0?O3*^6;>MQw3?X-EkuD?%EKp%Is7Fz;!}w9$h?+A| z!t>&Lcu7|LYrZv@*B#hHPufX-8l-!Zj!|q!0_d1|K{|qNITER-@VVBBush4f63sRc zWWPqbJX`}@X^Y?V<#Dr@36jD7r zg6To30bb)G8M_Izpp@YJ!o2<6fGhM}=ZpYm@mvLFj*9o+l@VWlZgunKmjS`ecWk%>t zgO-Yqv%1~>vH&P56)3H`VJ!xMs4>TlKRZd%(cbtyx`WNSiO5LeFXQI|Q2J&N5S~l4 zt;Dr_PK*brK1l3^pjGeg7c2(|1rg^*r@K46ne^WpvcHst6q&uk=iF$07Sdqa1M<+< zxo&~Tzio14q-W8HqYtDp=E3t||DJnqZ)bnB&zYUKVZ(;$gIk_2?t4XCc(APp?tB$( zp-WMX|B{9d6xhEA7Vaj$e46|#G9ZZ(G8(As6Rdf4FZkW7U}59(w8qUJGTzRQxL|T` z|B)d+ZT;cPJFC`5L`;aSgg*nheAjopo4TC&2xKdqx17rR=SU<49==miwX+mhT!7fr zOAb7C+iENxS*;RJb_5P1;Tu(IPK5O3<~nHBwnV4vrr2L~}0%#7hq9dLmZ=ws>`D1}NHOL{7*p9#B5E6L{v zs$WR?1gLD&SIGhh6LQGHnqz9KJX&lOaH4Qz4C!NfEQ#yz+Z)$ctY>wc@>`v+EfyS( z5VO8c)#N^?G`AWEeGpVKJhS{}!n&2aKa@HyxscmSl_nMg`c_wTJnib|r1{I!o^G;O=Zs zt?Rkt5!7~S)$dJ_?=H4h8^SvlRa6{}BLDSlXy%Vwc>k$yBP!nEqcNLUTvrQnFrL88 zHJIlKE?+01Br`9;%_VXAVV4rhHu=4fICvgnA;s`R$CEYKhig9`dVA)q4u8@%aagw7 zJ5+p*Q+tUt|9A4wX2O*;0`;={CXt|&;E=$*NLsWbt!-QAchLPo!gvKl9Qsww|KszRaYyjGqafV2$#GWXO|SB?P8ED(pqRmELZLso{#3V9 zo-69u_@byhC(D`ns^b+_Q|BB*cFg&<5bqU!e(0!INumzleZx_fV^Yw#{kJzQVW(}1 z9Rc?5s%P1fT?NA)bS^WEKxC$|s(iS@;Tu*>DclmP6xR8pRt?(4pO$%^o@~S|S)o~V zYD+v}6^0JXTR&DZGcT#td&ze&dKE8m>U`~Cxf{e3lws?(4gc<^CkSGfhw8g#Da0g6 z6B*+ZXm;3hv+pyGj#aK~+u;%JJ@bUS=3RD+mF!f`^P>Tr0a^3OuCbQW3cpJvr!d)J zA20u+OGoj!OlKl#$<)sm@@MPYj@tCJ*tk>d1pzBkm`)ScaiP54U38x*1+;&@@?Klf zi->NT&nD6{dbIuOXV#QmG~2Ug6(@OLo+|u_r=8!y*KT;6abA;lLa?GhrX=6dg@A_Y;w-<0+RQK7YiaHDlSF+aafVCNz0jdS)Y08$E${`lPg~z z^c|R8rP%JC>^6L~W2%+5_;dKW*07f6MQMNiRI5)e*+#RYHm?sqwe9)*{eR9rI(G2_ zdnf8$4*nxM21+IxS^d0)ZG6NFz{o0h&|4O>Mm^g@WE{Y@X#Rfzf$+uVL8}sZHr(Q%VU@cOMSH7;vbqax|(+Dt= z1q!eZ@$+-<&`qR49lx%YXZ>h2Sy!@~yZ#fH0vgpH8^PAo4hm|Eof{sjV@ZT1J){2?4I6{8gfZ) z99hz_KOU+|KNQ|M{-VF>On19#LDM67dnJ5x}V@Bxx~fsN!?nw?AgM!zIud_nx>Wo9ppOPUd^XQ^nE<_Lfm zjsd1a^;pbqoAbX0`oL7))vk_0qczW0xOUGq+vmQvijogdzpGxXnyiL zE=$ao_0T4yD&okSn}BX#GG~xw!T0dtuCmuNl@cf zo)JgQwvTVWSzCGNQvCKROb|udyp$qxu@1T0&+n@{bt!C1KEev9Yhx^`3b5&bg)Kmw6>6|Bht%&@M1vWyq?WxvbJ=>hC>Z5V9fu=65< zRKo6Gx?hIDKCFdU)57H#^0VeNKuVYFzECAb$c3>LX>B$KPDEZ8)Z>yQ_1@GgB6q{j zEt*Ck(`mjBX0rDAu_LWLr~dl-VSeOg+%w~16Xg<4^2F}FHymd#+do#~QfMIC)sa__ zc{y47@HsGgQJ;|T`@=Tk8Ett6E8uVGg7o|K&7=Qv)fZ0)p})M5*&b7>K*vRk_YP*3 zN&up0@Pyy)PLVM>nNcvM^$m9?CS|Mj+bAf&6)AKPv;nQ zM97Ki9SeM_QL2bX--Vpm=15(o`pILQhcbZetj@5im^mYt2HQ&0u2eDyKB0;?bH~~G1rvr~>x1ocr`4p!V+E`2G^2}p zcxN)Bzu0pgWx&?sUN?30YRrd**9#Z!gDB{8!_!5}p?&Krb?U@S4D|mpbKd{|%$(V| ztQI*7PbJufH#kl;2FNgO89kxxNBVc_m^l_<^ro&-ZM6HZel{PjayLE27(m6560$LE zdW`)-HwNwdi!!Iz`DjO7eEbgN?%4jd^Q;U1I z>$_&u55Rh6w$}E{u;TL$eV7f7zxvUeGhy_u~2? z>ml;qc_oa;?6vc?2V64KyAD`oHZ*R}NiAH1-C8ofCdgRSfe$ez8{Zb1Ec-4V;A}1W z)JN(+iIy_|5p~~~QPA*->@_-)U&`#Sm)RIYeO&{l=~A)6MC-cd2|ZKy_hmQ0yMj!n z?OMlIpo9)J#wpMMOO&>&uW6R~(QO^9^WF-8Al@HCb2YU7W!7F%zv z9Yb*@2~!Y`=6HV4lLrgB46a*XFc?D`DGMYiRd$pWXLK$H7BZzz;Jd0NxNNihFfvxC z9B*kVWpvF?ACcd#aUjBK*ixoF&Vx;L;|?$j6}e!ONP%6;{`qqbz?%_j5!f;5=T1DF zuBpM>sQ{fmu~3K-?&Jd}I}H5-b8tet5-`b9S8GexhEAav@1Y*F<>;JNTH2>7ol#@; z0D2e4X+r6gkcn%&i!7nWFaj#O2IAb94I;8b$0Lw#m(G&o<|bq}uh@Mp5KGa?u7 z6smIM#w)WL0UQPHy4pOr&ok0(Zn|7-d7watDO$c~%ld~I4oa0_{(y&skgHSNnzhLD zrI3MCn|hVKIf90taixa`Vk!d-qa4XxMCx*?=aYM@{?y`LW{_fdZIOQGRH@AZ`4~c3 zUND3umj9MqpOM}!vf5+`|F@G&>yY=o4}g&_y9N;-#u8PYk)C-pm6~&)2?~OUtkZs9 zZqE1z8O`6JDf%2Ul1irjg{qJUWFe2ql^(~cwybfam*|(wp5ybwQ zBQqk}hYw@}pX8G5hMD!)gjDVW0qeD0t1(~T& zFcXl;t5hl1R3+=R0;=^~Re7{$2#zifIpr#>fZiZc11&WGEwIvS?efcip3Q4LnPZ=) z<|H2EpRV;$)YuFG4+mtu#ks&d%$sWqZO(=lOIbR9eIWSf(>43ru4*$^kTFmXFy7H^ zn>`2Ae;Pp(xzMiH?-k!ij$v?wY~Od!kb6p83Qnk3NDDRJk8WSIs)opXwuhW(6P>>c zsN*amUWwid2_)&@9G}HbPM)W1dk)Xd7>&!eVQJ586S9CppAbLEC)KQmVygiHI$&Q- znybKKDN%5U&0!j=A~ihbr(Vrs*4-|c776QOe7GP1S7&mJf zsuWylCth*vvwu=2x&B*`pJ|4n8S^C^!a8=h#nqZk%Ghle*V;7P=85vTLmSP;L4$!n z*EC&IHWJZqLa?@{g5}$G+gN>?z+oW)X>-pD3;R%j5!ZMg9Gqp;I>LkESk>1SG?JH# zz|_M)l8KOo*;?Pj$(IAT+MOn1IReOs^uDzkn7(wx&w4UazN#R=bo-8C&vNw+py5nG zEUSVXzOcmM@&$0m>jmZu7e?x=dCw{*p2{oO5;vYs8$*Mz%QSFM$9M_vdvW}iI0j)REAjc2!QA4 zR>zTajBl>QHm5Z`*%QD=)xVt26wW-KtHL<5G6{v}o!vuTM$N7wEL;2EPOL(ahUFpL zh!qA6cVB9)y~x*1&&_=;@iW;|>#D*KcY$$Ty|)?$Nr8r==u*j{ej;~Qqi0`R=! zVq*PkKUO_@#Pt)=IFJQDH;q5QR*7?EM=VYj3jL;aon2Vi9lJ(_TZ-gg5h~7$wY>;* zO=na-ZE?CRE7#?)$3rLms;3{5Pco(VE}E3w1Wy|klaHriRrgevKev8j_Gn7N4V(6; z_x2bXizJ_oY-tRd_ZD5NKDr@|Or8J;TYGjX+PadK$)f(}QE zHiG$rjG`Wa^b+F+;p3m}rL;y5dM;#omh03ST?e~2gn8RIgdRh7Y@%Dsb_LLhm(YYF};e z^PoxD`H)A*t#nry0SY=mEX^7A2ulUQOipm-bl8(~?u-`G=>Vn+j~SnkaX2{4dIS20 z0msvFbG@O(Q?S1`4fLV~kFA7t?Rj8^nntY@p;)foM+F%xPrErqy~%Q>p?GBor0+ww z5`soTaQ1mn2mScEK0FM7XYU5)3Q5NV9>3z?AWa#|tX zT~ON3nAu3%>|+S2QN6GM5G#^aj)6Ja-JGUie_O>i!%yKVUF?2}8lFh9Xx0zE2kWx< z{|TZjkod=P>CToC6AjQNGhqv`=VwLh3%o8EiCPg#w~z!WLF09?GBw08F+GiOKeg6s zr@;*B7^w8Y`LpsB{S{gUiPu58yqlb5N9C##r_sbH70~Kv-D874z`|P^(ldheziIUB z0l{~L{x=kZWkKJS`UkTN2Uyex+(1F9iM0l>mRFd|;Y}K00RP#QmN-JN5IOtE$(2fgO{>>AaMyiXZ22kt&6xfl6*U{CY&4-J zb;G?#a`WfP=tkP^g>#HDCykIMU;>6z{NQXN86d-mtF*;^0~d)oF#V_H6q>Beq0YVmy!Lq|R0|mHnH|VNWx;hNCpLhfL-3d0{&wVXbTB;p<6qM_eIyEKc+nD}OF2=c4 z@3%t#g4E}MsNAQ}wC)8Md~TIFu&Lx@LKXky$MA@jlk(m@LymFvIeEOu4#>NU2I;wQsG01el;I$zJk$%!SO$#=S-wJz|^ zc3qqyNjtT$-mtQ+PQX-LR0i2e%?)TGD0nWJp#q(i9p7p2`qz|cLM|PROWc3SuKHZ? ztOTQV7aFt@{&>B;9d`kf+bO6%pA!+YM#f5Y-ILnE3D1!^O0P-qFsfktBl!IKZGm zqEq0gZH5e+n!uXSvOnp&jT)IDBCeGRbX9>TpF_*)>4|LTM@>7O)jC@Oar@6`A-=Rl8Bk0(v)RTNhZHqND)PK6jWf~2ui zuIznB9_*cY*?HYt=UaE(xBf^mk`?eR41$1qEsgq-712zmycUp%G>C)1$y|7YmJj6| z#$I)#1t_qAz{vm+F+h3r=~v*$rd6a=yS-=Wx;2$+Y-9nR(#AXjgriT?ItypBvUseyE4 zwhJ{)APY>WX(F+}0FBj37L;($s#KWH=Gh%2CoS^cq5lA5mW@9rCmjL&p;su+CKFqeTgU3>vP%_St$JlqgYp0=xtzGg*`Ezabpe3qgyPt$k+ z0h%fxH5+es2mEgoN06uB|Hq6YHwis#loWf3hQ=jP{=zRja`7Lsz+_L(rxD7efVysb zzeOJH%2j#=Neg4`ZAGn60r>76F^5{*&cXxr%)E?2XOj4*J7-4wja1>qS!@VP>KLd83q!Fehx*;_T7cdV7 zphyEU7wC&OFm*IA6at+bhOHJo?JWlXoeU+3NA-q+vjg{E$-84N$L@6Q_{fKoFq!5W zLXAv_K=j6`5p3P@oQuZDHj-G>Yyyy3L|zx6vm zy3wy01)f#7p5-PxaI-w0L5ZRSQfdP8tL9iuV~WY_7_`GqNIIt>%Gapr>c&>CiTQzf zM@oux)GZyrtp$Za1#ZRP6kWB#+|&V-lW!MAa1;TjXp5ZYuGo(x=ea#P+Hrd<5~hnF zuLaaFg3*vRbnP`w<+T%e0lIeinEcgC@WApp;+G50f5k9GtA}TX3TU^^iSpRhfE_?? z6_CrgK+zj#wjz(802r$DR@~IHrCnYzk1CvmA~)bXr(*7-i32pD7?_{D=gJk7a!pCx zLvBqH-!294Pnf_-7WLw{6&^?O8qqWwtMV+%nW@_S`F8vgWEJ_D@Izm2nku%T>r(y{ zTp%7+a)}ME4AKyz(G{e*nqK-)@a+Mzy-uVDkXBR?vkTxAf5=%kLF%iGr-w$Bf^Yae^2Tn`q!5-v+ZcvB!XT zAxs^6{bktjfgg=H@RcQAX8k?*$?@R0M8jF))Gm+0OI?zCG+q>{Lw`?-Tb`dPMT9|-QU*4^!b z3pEtA$T`87Al3xL&`V3Uga-*rT|Qyxsh(wH_}3x2K?MBz;-z~R)S4-%6 zKNY>Ybx4)+kxPCM8MmRz&Rv5|Q{0K+??}El+0)Tj__dLUcmvhPYj9M@I7{g+UibV` zJ`m{+ z$^5tcfz1*e1L!BpogOu@kR!Q|YfHv_6PyDmlzK+@LkPmJnS6fEnZ?%OboMiaf}s_W zdl=?c9N$IDGX;7?x@B%LONUO<5ym5r20R;<8M++zQ3OBitK#l1vA7C`M%P7Ms=Hpg zTwRv&@>f7u~4_kgp7Y;F;ar?`^);}-*hCJ z<^1QRl5Ikygptryj}|YgjkT|Z9A(9Z0X{1mqxbAQnV5c+{ZM$u{h*FFbPh#t$~@Y9 z7)c)E*E-6FL>A$-d5cFBs81Euqw3Hu9CI{HsipDSAT_11OF{>!PdUjzYcWP zZ1U%6@j;U@So3v_2Sp@!_5gC>aKFqp5XG20z&Pg8(9#w$)?ft1*=S_59EA=NGf1I` z#~4kJK?;%n%l?86Mwk^s%^Jhe6sO&Iv0(&d4ddj9t??`=NO8P@QI5!M4TOP<(+3y< z<2`>61t6>#(jC3*@fGcC@`TMx8??JcE(|ySxt-9&01m3J={A+>a+S;$CqOejBnWKv zL!T}O)59qbqT^T?!k++K{o7mi>`=&b>?&3xp*qDQz1su(u?Grx4NMzMZsVAK1{(J& zg{F$EJ0o_Nt5YhvVf&P8_JJ&kN9GTj4daf(-trX*^s{(_z}2g>wOMR@VVA@_>ui`w zCt5TP-)!-tgO=a7V^XF{O$7nbK9QFO}7F`yZ=T>7D2zD6k z9+zL@cAGu&=>@#d8sSAdtk>KCJ-_jb`&wJES43FtjCz`(kB%ZDQm70pe9^Ml0LN9+tITlt!Z9fFx6VIU`iRt|!Wb(i$pwq)Cr{ly zu;go9N1N&*A(2hmu4~M;0lsS&JzKu7f^Rf_+nQA%_QD6x3O3Hq4t_ zzO1JUdwaP$cD1UXR3yYM{rMj6ECLU*h1eNMyaV1eoePxLI}l|U!&l6I%EQNlJqc*q zFlWnMpB*)$#HuY<{Pc8|PRmfFg0CGDhpcek5nVMv+!ZP@Y(S-dx0jie1&n?Fs~$rN z1t=6?=&v7b^9?jAV!{YVubySYRH-<5pF^GgEGK12*GLoiAkon|#CzR!-rNLB^Ew=6 zv8#zoOu{~@|1_JRi^W*%LSe_VLwb?T0jdO`w6lf31*!>1J0_I%w6Smh=R{`<0gNNc zX46yv=YXyj!nz8>qzA_o5Bv;E?+i>mCqm$M!`cX3m@1{Fe5x3C4|wn_N*6)$@5%fx z`l05>0=j$4RgR$9!HT7_IQXfYW2d5S{m#1ZmwzKv+huigM6==8nkxH2dtetK#NFqy z+=g}x6Z{u%i~(S@i+`ozNK?8``H2$4@dYh)-0`fj;ccS;#Z|smRsj%ftnpWiel}KYjxYtdbH#^I4^vMnU_3rfL1{9<9-dG>p~=oZbM9x z%5Y9~d6-P7a9H$~7a#yECXQJDMmGScSieYl1Z&|Vo-@JI4|9C)b>l=gds2kaK{1R- zmrFo`0GF@mwpf7xP(`e6VoU{_&T}Sjvbj7nfuGd>)hFiTYW`(bDR9G8 zVf}F5S?bF#D_^)Kt^16=+&tB&)4=s|%)9l!P12||OUwV`>%PC5*uKAkPf0IiLJd7Y zfJieSNKlZW8l;7yqN0W>3Sv-H?32&}f(AuJ5e$fmiW(FZ+clvmC~B}`y+K9MYYA7p zV$GA!_YZio@_W|GT65-{efEC6kD=2RPa7mpuAX`_FE7F57fkb384qQ#N|%Ch*730ndd z;aBKNK_Lh!q)Unn0yNMnKaqco9;!M1rM}XO;={n4>ajDe*p%OD)6nj76YG53p6zrS zudsIj%KLy>XF}H|GQkvVQ!a->+WC@%kx77_8&WOUhv{Bnd=Cj(MmAz$fo+Gk7)nqV z{K|Bg`#)qN8=fB;N)E9VM6qX>_{~{K#c#EYq@H4tr_G{OI=t&DOOd%84_|X!zA34O zvQ)+m-x*X1aHat;ANY!4f%n_!Y%HaChbgYdNPfm$2`-u*epJX#U|IPsm1gIZt*3%y z7Uap20uG>4Yw&rwgqz~e;6j<*wM&xi?gQt8d1Z4Iy+=tBfQw%*DtFNWPwL8wG^O&y<2i53I|C4heTK{BxZ_$1??VT0%bqHVN`6{x(?Wx(z-ig>)EcLE?(KPR>Dja z@UN{r+6`_TD&I^hr+@@)H!)CXb--O(>{vz8z|qPQ9;vQMBQtjdvU$Y9(Z4{XWK9ln zt+)i_O13CV;`um&4nPoTJB{A}q9}y|72Q-B8W|k=QO9N|( zTy(`#@^B9`xA4GGl7BiM|2(jIMJ=wNM6#)#u%3&DznAA6+)V=OifJ~IfU+3XOh^u9 z8%T^IJ|rw%!9KtKJ28llWAP&z=k+B$tMD2vjy`=$G11H#_AzFIqx-!L4e}Sdx;*ks zt$&ieJ~WI3`q9aNFtsN2i5Xob{OgABfX2Z$R~9r4D;w<&tfD}uacoss#0Q`-owVAq zSoR_Q0K1p9H^Fb|AwfxPTu;KR!tj|JNVJFn+pRsXel&BAB}8P(@WQ*C%HEi9a#GK3 zn2#k@HS)tboaT<;%)!>tNMaGZymIiUOu-eM`y)HaE!sA=v`n9>p?s=@UftNQhxgiJ zk)yJ6KmOTn#lAOEaE(ivbYm>o$xtbtsQw>!Q`a_wT#4^9h)Pluu8}E*&ybaX!u#c{ zP-A(cld?30FV!Xek4*}{yDbSTol5Ge40GdUks?XO@DSO8Tk?c!cVQ=HBf~ItLfLGdWYbTw zlnaK-;qX4mjKI=mMTG3pYaJIPVZ!Mw4S-jcvcgNJ1xo)4DK)pkk_2UGt)+PM(!u$V z|4(9~h{O`fxWba@oe$@Kv^5q#6gk#=BgJ~{FqS>>K*-<9QVh8X0&*X4_T(POqPNa3 zm}7x*W%4;^pX^%GJ|{C|UbzSp3d?dxhV%i7*mmy9SO7E}(_;zdW@nq1&3ImkrO4C? zb$6X~^&34UAg^?DY3UZ6%;@Itopkb9%n5lOZ&l-Z9<{dhpb+T^^u&FDZtpfMqC`KAEpa}XZz>?Ty zQzyF1WdQcizVj8O2^jb&MIBFqCqD*E`K3vy)bSm5mJH9$Ao)#{o4;o;I*a|4PUUn8 zp`q)pjO^T&@H9y1KK@*PfPXjPskbNYE~5dUDDG}CSWl$8oP~*;A2t1(NJcs==!a&~ ztwUP`FGl+lwX6Le{3hZ?C6k1Uo;a5S@*}RjurTCX?pIN6!or_FcF9J4E5-xxE*VmFvUCFAu*H@s#SqNq% zN}gGo9Fty>zLoca2>>!$%h#jC)?pw( z2Zt9)ae}{m)mTzRsbB_FGTr-_vFDz4kTEGJBI;6@@a4TMYu8WdYeL+y#5OaN$0J(I z#~e=)VpqZ+*Yhj%<9>F(-GUx*{|jJ^Vb(*%PNEm9vMo~6e81Ijta=we zebDvdYsL5Hi||I>Wn!U`7J#&WgCv89t}*oxjXW31mMuG+FEf&Lzg}%@g3RB4?s?+a z4py2BlrCMcP?-92>dy#aq)G0JQkgdE!o>H%!*2j47B5?=Eo=1ylt)K{&f@w2m)|u> z-MMAjrR9CyV4b0}!0bRi$z$~VsYV-WD?sgJUnBH@!qU|_C@TtxA1V!CGmN;Ba2;%_ z#f(_MOc5boYnz1OxumYO_lwnidAWu`X6*jyYA7gR6s|JY?l`8m`Zv>ScV3gy^O;Z1 zwTIZ<{pBIq_yt>Wx5Y=pN_43l{FNqTNcJcSs-mWj4NxrxuhF=_C9++tMfg{zq>Dm{S{aEkCV#m|C^ z@Xm7wOogQj#i0IBi+$goqbYy!gg54vBZMJbTMC}id4I{>3p+`TTjT+OXDUd1sHFq9 z^Th)C(Bp_TwJkdh;edvoELpgbb+kW8Uor$3cBZR%<;xXfXlQyNn{ento_ zh_IrFz!?I7BK)W0E@SKGDg9>MdbVio+lYhQvUzo@6@2D@-d7sXpwq|9X}Y!83WsK! z7d2{a znaD@r&GB2`woMO}{EH;4A1pliryNvBY}t8bY=F~By}Jdwo3#rRfL47y{u1EMq;(YRe=DmH}YsFZUdsg2*8H2a3hI1I0v!t6S=jPC=+Jabj}{c;O{5!z5E9RCdDv zne=D+*b1P8?n)#T@kJy3IEZi4!y9`WZavo*@?18~z1uR&)koCD!If-Dc+{3AybsH$ zEVmhgVMCh?gXHBgei8i8V}wr=|0@3qNh=LR%`md7xXfm{v1tri%rO4TfyDm)WwK;I zkIQ;vGvk?>X7-n!ufR^Po%Cj4pZ}^qhTen8izM6=QfbCLKIt7nv#y<5#@*!Lk* z-VmQ0Ob_;L#UyDTz0sAyZL3D*$!+#ClKWJ{m{n>gtKhZhNYXJ^9LXo_eD$m{T=KC^ zQ_5c2O9T(kU0JVjP#;}($B`_2dUTGP6%w=N(`S8fHjAf>$~oD=R+9&XJLx{)#JJpm z+Wgmrx8n)dVxM5wwIZOBpV;%;yinCcjqMtR&AlQ zsF~#&FH?jN?2d*nz>^6;~`n&GzlN)=91%`k% zoUlP7aGC?|YQ?jYJ3?qaua}y(7yMo|=kyZrP&&(_Bf^8U?6*k>YZ)efM2JU+lSt49 zMWy9adUlzsVX|f>htpPz61V*t)&yJDipq^FbIiL>L`RtF!i2x!?4?~+9C<$3(lj)z zjadTb&XCNLcM~EyK7=uqyXEC~EX4>B$6<$t6hkN)p?AqE44IeCyvFSkioWr@l5}=w7iB$TU z;1=S_oK4b7tDVcWp{7wS$`Inak5IG--;h4w{%f_4;@voY`7t3VJfY;}xgU>x;8 zAHbSRTqtC`Z`1ARV>l;_z{U#nbUl+~_^a{02jc=-)e>kw+iqNW-48-Q^ZQK_|2lw> zE_d+m1YpzumFo(~M-FANW=|{qOfx1#%XRY%HF3|p4o_P6a9oti5OIc9x$Tv%(9072 z0tZ_J$p>di2KOi0hy&@>1^{{Nai|SC!#i2M5qE|yNo}VPOabCs+04L|A;CX~<0Ax< z=sx$Gwq=_t=6>djip_^q2CNG9;?+=axN_Q}m+71@y+k69d7w&O!qcewHcPf{F~BiV zok>id3bZPcTQ;I-htrl6)H#i#!(4`+;{>)w80;N~kUVmq|< zGrQrb^1%}Qu0ky#x>KDv>kJ{YFL5bFRm|VVEPfEKUFna`3%TqHSBL?)fP`b31GU7C zCiBB`G}+}exNX#dX4C(M`=dGV0iso^n3+aU_) z%!sbP>(&>n4{I-$vvGFF91=w?fm+^i95i!6xNE#Ctg1nB!u${yR6@q731R*R~qGWHe=m zP?Gt@e)gGt?#CZ$q`a?eXzwyowwrg+oDU-EyCu2uW{{Y}_J`dm@ko}O&eN-!8TFIq zhswdFb|o&HXkg*@y?c$mqVs@Q5J}YmdjnB?aLS@BY^-<=?&dBqCzL;{9YZ+D#!uwo zGZ*jO>Jo^tX`~4Ea4jfB*(|j%BFF*a%8GqjxWfcpj2=HVx8M%b?gJKA4}aoXC9CjjzkyjcC`)dfGcI9_w^+Lj!} zq^5Zh)IdyPHRM9}nWr*$@viXHI)i@=mHEYa1D7Y#jP)|%NteAp&p4u8_Gs0U4UUoMssPh8GRm2&i zX^EQ~4^bMcxeQl`1 zNEcY)s*UKK84%69C@ej--E>aICKkIclbyq6c|E9|t&?sdUdp#9J7_@n z!8`GFX3!!B`yX|jZkfU9O3WMGby0Et;fNkd3sU721Gm{9eP@9WH6;Uy7<5Rf&eXR9 z%vy-R%0f+am?ZBagOOO^VK*b_foV(+KHaf16*x1-ja2JGAcnrxK&o zS-=!_lgm!B#AufC*>Zi`qa`(@l(;|gnztXh;OOj##V3=EG9Tv5-kGu>xJ&pjCTYs= zSKqHba!XvBu-++P>bo@syXO*IF#y@+f7AaJ)2Q^F2Lg|Z%KvzXtvT@9f_KmO$XBV{ zlt`1^82r~&cUah&u!ziviM zoj>UQt-ae$#S&cnJB_iB#sPN7%7ZvfzS~lyOa{(q)ZtcMQVjHOe-AXlGl4P-51JiM zGmQTXSNeq?5+}5F`JA}){r$sAcmdjD{_87XdfCykMk6Ec5SBh%`KG9Z1wWW%kAE5t zdi=Bq)0-JFe`Bz)OtCyX$ib8*Nsv;Ry_5Pf*?l8 z9U{{%Z9|SjqDJJtajw4>zzI)0U zq{H_riP`wWMP_lv26cgzVD=~cjb#W^)<`A2s$RFq*pNz4fErDx&3#{};CZP@EZHW>?Z3Aeuwss)7we&MGvo>knzz94-xodxC# z7JG>fy063BD!Q!NA_FYJgISB1EHJ&AObk?;2daw;F;^9|3Bh5OVBUiRL=9+L`yiY1 zbXJh6SeE?o!mX612-39jr}A*9%67IlI@2ut0ZA3@wF}kZV*kpFj71m7?rT0K6BNl^ z&JBs|UC~xOE^lnmr46~ZFSf`QE_yHk4{6RAE@e^&1m<``YL?G11>}a@{N6u{oN(ii zX+VFhsj(?O`Jnq*v)gIO5f=`*N1#ODdDt)0TfCvUzhA0p$+@XjH^>W5RrjYX-F8k{ z_RbTV*RUN4>M`@k_96pj%Fvr>w1-Er$un+3qbid;Ref8UwOpSZA^@03$TIIr`dE-<8&8HsuYlupxp@dU&TuwOm>X z4*<5U7}u=yX02ogrdlvcI~%lFno`meNFX$0L^18T5+%p}RQH-*ta8XM_;g z^UHeBM%jG_&wa0*L!1jkLLDQBfXb_=d#XWNB4M@;`>GOz)1F&4R#U*j(8;nRZNG}m zS)o=ciEYhuvT655bNEyVw%vfr;4p#~^$pi6d`jq4rGSMR&Q}RlX^+J092IR2w(joS zK1;Ltld%05(HZvUVor7rKNeDG>2rcgE<7aE(V`rg1I)RjmojE|lZTIikx%Td!n z$oAP#B1y$oLW~dGydN$t{R@l&LkzbJ#14sVOhpKyM)>ZJ(*R`-8dZZj^?>OCC>4la zHv8sK>2Seew-MWTI$xi#;_|=#IlvHg@ftPy@cxWkb;)H3U49^UFvPfaUZMy^ zxRUD^65~(o`ukUsQ<*lTXx6eQti>FkFx70qb0Z?#`LRRqJWX%QhesT(!Yp1Zf}Vud95{`WWJY_5OG0ywAswjt9H1 zv@Kc#JV>__j%6k;@=UTSO?+RSoR7|aLwJ}Tb1gL%mlGQzQZM6{O0PA$C^De|wfisi znmm=2OQ^Nrn$^CpC5NkwICJ4;1Q-ErcQBgjbLA38jtUqE@fi>G z8B)veR>m{xf0*MTaWkPH)JA{_6kV=`E66==fxn~HRD-7)?(UUH5KP^4|3Lm%y_g;z zUR|M*s^P-@kXCV7f*lhLF^tt z>Z})koWaheizqAm^2f{Ka{$_?#Ca5Kkgu@K3}vMP3;*2?44}?R!zEeIvtJ-xM-Nk= z)-e?^B5dksj9!6}UIP?del|LZNm>-b#jdu*YKu_XxPD1uAxco9=Y)2FNwylrvD}d} z9fhRetE*5~lsup&3nGVgUuG~GQgR|9P=I6u5;{urCV@uE*Wo#adYELv{vI*{4Ezow z)&c2K{DYI3f9GHU-NWITs@UOyYmlie(J1hN^Ucb;F&4eCTTk?>?*%ucCg2apZ#6?A z98Tl`DwmPj(5RgC}6ky3-Sh#3P|w829&eB}8Ta{PXq;-H+>kMGlkKGBau4MTSr zF1SH>Ru}JEqVetN#Re)J@TuQ=u5nTqJ+i&ivj2ec-D20lhPV>acGhhK1FF7i-aJ@b zZ&n%8V_H%Q1~8{&{TigI+MwJ8$is~J&#ze)dy6G;y>j~rwb5nY5==#D zL;r~cXc#ofCM23pML6Kf^vFrhx6k}K7nz6Q4cMn9d({KfSQYnt#AKDp=t|ctn#Xy; zMbuau`Nrko42y$4UR!Un)syPF7JV=+I?z=#{iXRt2pOmyroFo2Xqc7k4tiGX2Vf)( zI(^{VR2oXqr~+Sy&5##waz*_NP7DtQo&v@`|1$%^q zVCtUx&1?Mjzu@(j-_6@E4KD;dIAK2frBPzEB35e8j;z@Ka)WiRLFx&-9~Pv5flR<6Z{415 z3=pd~zBN34Dku~4mlp>Fb_2Q_9MN@-@^#5&V2Ksr_Djl+D7BENgEjpGk*v&PyV1`I zdS)MsH0K-lhtE2+7%@|YYYp*;A=<(}<}YnDVTG<0=7Bm=Ua@P z7C1j~hm)Jvoff>CKicq&QKYF~XZiH1=N1LFm%DM>0oV+OVWzwa5Fs`9pKlBR&z*K_Z}!$lW* z6LI%~y*b~5S1YgTP!c}uZ znlC7`%Tzu*+AoO^Y_0JD^ER->N&q;k$ zD7?1%=EH`>=F}Tm3vb^EO0$f(w_4R53M{n`H!ahg%fgH}Qv25^!IxpSu{eOgfx-bS z>WTxEp-^EEeWGhh4zzewz)?wUFL!*CZwR?Bnd^6BvZ9NIsvvu{D-T*QJ~LqK+&lZY z39}wXIQV-VR#K@($p)fXgw6Esi z4z{ErvwKHEh{B<)&MRYC;KbTj!h2hoMy>PC(X3hxGlz;$vuJ%hnP9KZ=lVp(m>FB! z0S;T8dkMs#YlZLbK9p2-8txRtX@ylZqIF`Q?Y(aGRnwH7DzLdWd{t^A(4{P$~Nv-`5{@Gjm&Q2wh!q;D`+G~4%O<8Y#7z(F6JwJWrD33hnSQMVvc6@HU zov{({aAfEAgKuuFc+-lowP)s@er)x@?&FvUy0@kL&m@^!_4`&b^K|}$DH2@%HtQWd z4O^%Fm3lGwHKS1I^r`N$*N@}Fr><=KF?>q3ZPrUrg?l;xU+7VOuphXHI92x9w4SQG z<4gItYk6b)8wNW4Bztk5fXr{8g{+V*~PS1PC3NKe&myqGO!C1bZZgk~Ym!ALtq&M+;II45l}ssOE7){` zRzd~%TC@br)}~{$7)LgqL+S&XwyY7TW(5TFC=?6zgKVjjK&Fiy_mL?c72E01yX4QQ zyf{@{>9@OldcF9?2I_k4bAFT#J-Qjz?_LYj1ne~JmM6b0W6BIkx7=*}gJLbUdF`l4$V#>N^p$Q1=R zKfN)m=XM07WE`gBNZO3f4Rs*9_`k|*a-v+yEd73+yKQW1ib@1C`+6p`i%Q_W<&o57 z0}19yaxN!(3WEpDoBG^@W>TCSL9txo{o6^HW7cHHPAhVWb=_xn};qwg!+H zpasA`%If7s-6oX>yO676l(Z&oL_fc`>!n3+2U*J)Kx=GCY%HYpwcQ;+^|o@ip-;Zc z*z+mi#-7-!3m2I#4eY{kN9_W}BBHI4fl|$my|W5bp3B;|FIXlnJNV1hYYC#E6ugp9 zE+gyh`t&OEW&8@8oPWsE!+ZX_{Fa_u6jp(&>-Il4MqgY~O=!0yczC%)%>FNzs1y)9 zW+4z=A+r98Ubi6VF77WKHaWnTLX_sR6m2>~W%Gz<=?yNteS)~}WpZXF;Fb_^4WD2L zkxY~yu?J$;7E3L5?+}}BTc?H0iX?bdG8D{Cr>?lGG9RjtikGS^9tsHb!Z2*Efltn6 zqr~+uw=NoR$vs~CvWIi-ER7~YsJ8P4ht4rsHW=GRX4n-Boh7!QqJn=d0N48`O=%xQ zSk0a*?|VJNZ?~@V_9YPwLUMP1B9T#K65q;(I>;DhQqk-XlA_p_bW;%#u^>br*LCRf z(w^oyuShYsdXJCLPpk<2X*no5SF`Ki_f3BF&vv`)Ikv^L1AduQ|05>xe)DF(RI38j z;-Rk?e@2AU%8>`KcK)MkbkK7h{pe!L!?TH~_hza9JKGWI*x0^Hymj_J8NtST?VoKE zPDMx>N5$bF50f}Qfk9cXz2rEsO&BDQQqIj!HhPV%_b=_56f-PIUTKiM#i3+&{nNf_ zl|Hja@4_F_YfU$Pupob6&6iF;aQ~s_j9v3I3)bg$Twf*vr=dL@&Qed)`;M0VvL1N9 z)k%C_h|x&H@%+I{62_cX&&y}KSm~Ig71gn-h7wO{(u=(>`x9KR#5TH>>YLi-;tL7) zv1-Q)SBM|jQ{!6bIoB2}3Q%Y-k8biuVd$$FUgt zv7WJ40OjF3qHRjQsh43uZRp}5X6;&P$yxFGB%b_Y4SRCN&vGm7+e?mjZsFZhh9XOU zWt@5g;Q7(0Wg)M9n~H*WLL{~7jeFZ}SFr=mRTnNu_4Tn}!P$pxYB?4GN)B}(@tWoy zVZkHHQ{qyRGmr5*Oy{duv{FLdq3U7aNA){*TWxK+!19qbl+U7a%$f3O% zHe9tyr0Q|__G#y7l{cs82cHE60Kpl&(2B|TQmv~fUKyoTHg<_%cpU@_+l%^i)EcIrG)t1wKCunwctDrThFI-zbKYIR`SQO`ZYJm1;vXL-4 zYhRGV?Cr-M7$2KDvhqqUbNtEEuWwQ^lXY+$_~EY4F$tY-Ybh{U2Jg!@%?zTypZv6b zcwsjN(xu>Db)M3vOLa;8FYwp0XI&-v6W6Ezx2w1WGc=Cpg!Js4{p;UbD=r-J?@PPQ zH10rQM?DdquYu}!0giGuWjRO(U|#QXgG zmSg7fqB+`z!fLxU)C>#?}PIY-ylepyyxU-|0*`U>$Atv?%Pi=OzRmLhda02g{s-RFLMqc3`e&k#wbYJ}uuTv?E#sOLiySWl& zjso}i%kKl--X2-7z2?z0E#bY0u^Y{IEH>Il>i+V}nULs(BgTUwlq^==`6HqA(ey4x zgy6||T3EgfYEYtY>9!Mpe*U2Wz>BYw#n(v`cBeqxb)~rlmT^ zkezS>B{}N!p_?VvES`2E{tarxbQHc8YgM-!P4y!&tWcM0TdY^Ee5O@*-`!%Hv-yKY zBD%LH3(6oS^e1$(S&fB0FmwPgCvG~^a|Z)3FxvvPZcWFy|wyvonm$I<2&}=IPPo%WIlK(2amEZ*0cbuKX}zW zE-KV?(l08RZ;f3Yr{*EvnWQ3`UyGphXj=N6(^(tRdqm@b>#MCrDrM`~XTyM%#h+Vx zSyEfdey#s|n~MqE1gb-5%D_bV!VT3{9;c~2ljT=7O!)VRiq~p?zY5JKQNkr&KSp2C z@GiiaJ2My$g_YCZ*ZM4W8mUd9q?5}g;>{)Et|;~*d0&NtKQ>&t@kF{h7y5-Zp zKjEM+zj5rE@ng?|GW74?QzFgJ)SjPZt{-h$#LASn<2HuQvTQ+7X?u?~{)&V1t_*p5 z*IM`e1*NjiH0JG+@yr_h^xxwd+w0XmCXA``ikP&rTR5%dzN|wCles7LE`&omL?jze zQw2afun{VT3T(enX{Isal0$WFfE0(a=2GOd#w^Yo*wCA(AP^(WF^GD8VKTfJnZ!4#!aIz$>TJ@kt$EuB}At zoj7+7J@hfDu0E8qRJQq1zqw(xe&LJ5K^}6GPSzCptpRqkndszvs^(Cx?q2KYg zaoKFS-GP)HAtYke>48I5;Yvd%&<3ORiB&z)8>vj5G}?ogCq`Xv+U&F-n{RxymuS9G zr^eF^^4;67&k^v`6g$`0H37tPHfLfM*{SB2>zJdHe}OGByjK@b0xKYkPGMO5<}sT{ z78`Fiu?@d3QDU)CB-Qubr3kba*z^_n-UT4RPFL*B_FDMj<}3=Od#kyR1l%?SIXNz> z2(uXmCVAK(7lD%1AC)9p1KQmGAHBu`{US(x=riYt|mwok*fvistA`x(;LoL%|X}(b2{XU zEt!f!NmdC{_O?WM1edi2`;E9kkEyYCT409TX-66tkjc9QWko2sM0F8B8R>Zh|y2 zY*7C*L^e*tPfEEthSzOMO%tS%NW^@G)Yi_qGDjOMs9<$oMA0 zNH);snZl|+yG2r>O+GDhXe%>@ReGgXUa&#pzO4T1>=V-zq=HzR+y$4IW_nS`c4|V1 z*)gPes~xx*cR9oKqNupAhD~0`S{fBUtz3vg@N4H~zEF=$&ApkIz$59tt*bKwM#$U+L=bw8R=- zNK2r6$5~@&x;Ic6lr*pMbx)tY^^2YLM^1XzTV7{}3@2VzW_?K_~vnn=18W-KARsbtm?NgsM z48jb4Ve^rF*I9W}D06hjP*O$qiT@PTC|#9;>P`4PZEKBRAM9ZD7PG1fS*J}>e^11+ zQh&X)@c&i*Y0cYOH<|k2m8z~YTQxUvHLAx;`m%8|m`>kow6L+S1fKD6~O zbqwgAb7b$ag{&~T4JzfDN{zn!*Dk9IC5Dcxj%5g>)r>tQ>}@YCT6vDESD%lk)ry;~ zwG!4v(Xve$S#bLDXAxg9N>okz8ZCI1?y_j?b%mN>syFMN>G|oCRCbo4`v^LWYE9pI zhf^|9%yr&TsG5iWOTd&o>MV<^idlVa=C^fHs~BjT7*$VagbZHz@7(I%^Vizi#zHZ>sVMA1-i(?HyjaCpvM7|r*}ms@4o9gHUEaw(-*InJu3aASlR*;n(OwQ?uBU+ zCQct4S(g}_&sB&2dNMd5F#U53`22$iVQl;v6R*EE^{wOT$6zTbRmj9Zry1TBvJ?f> zFi*hPAsnOMXOs1jmDC-=Pj^Vu$j5f8gYyjC7_xK|mUtGWQdn}>5d74J3pF<4Al4ko zIzf&4%er3=Cd|{m+vP@h8JR%D6bHtJT5G-gB?W0(C-#HTkAcbMTVuGu+P}X8&8h6N z3jYS&*r(8Y{@T3p06X{LFS+T;4DWHqr^KMk2+`DFV?WG?#{lu_P-`tzFdI+Y4VjeB z*zjonwn5k>8Q0FFJeJdMu!Fo%VyR-wxpOP55&U)@VSYKn5?hd7qgms&W{8jV4|HTUsIz8hp>;fX^t|z9e*`fkJ}EL|(m->R$NUQG%oYbJXSR)(FRjb= z(!p=nBBo-fUV#ai&^LXEiJxdmsuLU}T$S5bPAjM=m$_^dAPwi&(c6)l6mOb_)P%vw zL_>&a(aK`N?j?vV0DWD6_O)w0!wR?T`aicnzTqIfHcmSD)klBDyuX!rd zu$?vYl>j%n$Yp`aW&Q#N23WHkDLaAWDF{vuoM%=(>hywYrd+DSyXeec>?D$hK@TMq zy(@h^&q7!OMvGx9g_j|m@jV0Y4Jb_3fH(|y7{xP$Q(}44 zYT;77hH|&pF9^Wlli&!f&`X3{Zf+fcxmX)ox|Db)EJ&}}u>dWb?#MZBb>M$o=vw)@~kF=9T1;WrtI1yUgw07QZW$i?rtv|5rEdlq*nB>W!G=|_@ zy2yIfwv;9iry(rbOEIdzUE$HX4aX=1yn)aki&;zG)i)^tmbUhEgkQZBHc>{} z;k9WJF&+cRN_@!$JXO0tJ{$j)xcK*y1e%hvMgMi@o6|8iVt8!Kd#0F_hFUN+?$Kyj zn<+j@Q)q)g^;$|SvhE5P=P~NLCW?2M_i*6Zx)n?_e2_14 zK|vJ^&OhsmP?VXe#ayq4MS1~f%8NP84D0V)$3Ox6aCKA1F0yhR83lHj>?HGm1@lc( z$NXq2GpVb|k~5i0+_q+g6itz(6Sz^{7eF$58>9xQh7{1H$S31<1g=SRdr?&;JWsfn zUk18~u%2+}KWA?ry>5yPiX)MI&x~2I9Ck0)#_4r(AqHJ1F@;L_daJikyc=oplyVQ+M=Bti;TC*$z-DAz0ABC3DT zg2_$XNjdiUuKRo+kU-)z8Miq~3f3&;DUj){2j|@I2Fu(Me-7<%f4>&51`_n|C>MS( zVl<%=MPii9tw}*+*6%uTuIy?yKIv<21_Iw(MJ`j3!$khKP{!JS88AZb$LgIG$AEf@ z;s*F*A7z0YbkvZ6deZ!9buujxLFx_C&RIE37DFRU`eak!zQ&;s0c!fGCzTW`GV^i5 z?S}BPwIEdvZ=OVSMmyB!Db|D!BrBuik2&S*??Qm=q@R^+x_q^}pv^&(;ekL;=fEde}0 z#WPeOE>}rafLw*LLS-H@oqD7TIK(!3t|U+mw3FVNm^-#N8aQp);#|-@B|Qrlf}7sA z+hnG4PMR37abDs5bWa@nvY$0^%S{}Dg464<^~Wrm3?LB(h5r+Thbxg@Q;d}m90tj! znfMhGi+G473NJ^FU4!s;;;QpIV6O6zr2LJ+?H55R zcD(D-akvSzQXMB(Af*qP!{yv%fS-8Gckq z>{RDxHi3qQP@7dz&TzJ)zTM)??3mR**2G+!oPKWWHV$H}1g_1Ug4b2S>hpflNSA5M z;45G*f~(&j>Tv-dCxi^H*cu*LCR7cS_N&{G5zusB!OK~ngQQ# z^SXHUV1a?m(k3D8&=}L~LkpFfxzh7D^WBUZV4P-zy6G3YO8dNy!MMY|)Wz)E15 zek;iq04I(F3Wku!ANG7nf@Ex>OaYTLU~fjCO|pHo%2fIlOfl)<)!cI%1ye^7-uqLY z0rc~VS)*k839NHl6ucI`M!gE~1o-qwLqNCjrQ2;g+FH~;E zptel>)pPgAgZJXZm$~fwD-|%#pv+|k?rFK-?UaILUv%EOB}0V&xt5<)suS z6#NX@r=F=3zXG#1Jv=@5Xssh4l3jYK+2^XDJ+mGJHMBK5sB-;WO6OC$DKfP33vPh| zV5tqu45{S@gA##EdYl;~+(=8Pe7g404waEw3B(pdr^J*g!$>^xxypKHPuFL+w zvT8R=H3>TR;~KyQGWQ=!-&yVJJvCtwGH^O#>2+|?{H(A9!Ok|z&g2r3wrFPL89Nc+ zB(kFGqZ>-f>05{rldR?~8WR^f<6# z-*?6*USx+lSZug%SV4$XUhr=#f*{qxOFL{W1U!|5p(In5hP1xh@75nbBRO>JKZYkl zbX6UR75Bb))x3G{lfBC*-C8PPpLTOVgOzZ_nu?}$U{!MybzH3 zcHdAQD1Z}h6T+c(zImqnoMzWq4Yi$Cd3d&j5+;fFdsDizbL>BuVOU>hQmPby!QS(COrEA*e&irP zW35QgdgUVY5oTZO)B3X#Fx}5Eb`W~?A>Ov6OtGP8m4Ucvfg>M~) zHwQot3eb+dyzp^t)xE;MVi+gbx>yC{kKAY)5j=r?=c~YiRm&D?w^P&RSnB7PHGvHp z>S2viq0gCpHCD7WY>%Ti!FCKTDFgQzPr|j#xXPxt^3s{Ag53(pN|Su!-U5yWcUeKJ zMhsGBdYF6GnfZAt_Q7Z~GwZ1>vb%?fWn1)9$DWj=!KDtzLw{!o6J85;IL9^y9tH74 zBQp~XTBC3z(w*o3StXEi$P6PrKId*pSFjOPqy-b$I2=7TuEh6(8YUkI*!1$(ku%Nr zYpCHLNDf~P5EzdBzv|bUza<=7_Pml4^1x$GTi}DpKENrom&_B1G2R-O#`IiOrs*6D zH=!?a@G$y+T-|$Ii;e$3@ax)nwY6)tYMs}49k7l{r)#xp9n?BX2iAc?C_>KH4y|>- zI;arV0Yz>hmGe4C5f&lGdl5q1A>_Ek?v z$qTDcsQKw8hQ!}qGjE3CuGTD}3Q?sTdwLzqO(>v(om=4lSmKYsZEfGlCBJ(T$Ik>m z{omB1RFSrJrG;13-!=VA1kodJG{zH zT9k6f&sBIS)63@M9w!i#xZmu5$U9iQSe;B(BVI4f*Fk7KLl7N7@Ai6K$1u+s66!lo zGtPvpBObxN;T~_08sFZcD6%PNW5Vhyn0o=mjr7cNEAv8z#IEDbNvo5~J(wlof#E87~>!)}^M2pC|uZ-Tf#@QF%bb)yZuWqzZr*OCH! z=nV;3_(Gu@w@0c%mJJvcAD}Y3Rp`a+X#l_M!rP-2z~?89Sooy;hA8m5*QkKCC-~bn zawSub;GUMWKAxnizITW*RbG5({nO?Gv_5QBFcxXS9gTdHN)JPaQcDUzGV>fQj^q86 zHYy46cq@x`P8VR%iL1ZfPs(2X`9bO?+qahRiJY=w7grC@#U=IwC1Q*2f)*SjHHl|K zKoP9WHdaG$Yoe?|EPybh^t9qwKv)dGMruWMt{^%olzVP^94e@i3gqTjc;wE~31kedLy;08lzdPwt;*J@XX zpo`zt8((~wbI;WNv6f#HerNRRfbzSy;#tr! z+8Tcc&@6mVl~mV=jh<`J^L6)4u zcEaT)p@khr{6=g`@|%G4;Ez%5r5SBP)Cs2{ z`tZ6|8}Xz%I*rE*bJsk{DXjE;@*dVcKcb0_rfYwBq&Rw<*HPica6LO1;u5bApjkqb zr+f|(l_y@7ht{{1!I)8~ELs7l6?$FwN&eJL&QscRRQs zncY@RLV4gON^G{~YZhgR`9gpjXz_D06f@qjXZx54H5(V=QtIL}cu?$UGl`OCF%H-O zHwcef2MKW%rO7r{;4Es_1x?v_R0e=LjG{qScDhg7ER9D72aM@Fq1C!fqsk}f`Et$B zQT#@)MH);OkCpqjiZBqDE$?q1Bx5uX4*`QlDNEOInoJh*_Bk~#R>U02UwuaX3D`H* z-!kQ5x%+_Tz~T7_Wjlun+*ZAGM`>o9(~WeT064`9w3CcCr+Q8%+33ln$;~J&qr%#q zOd%?20o$ooE8$2;U< zrgshryiDD6NKC}xqJZ?Fd_+IC@|ef{Z!+`vJvOsteX&*|bT)^(NdZV+THOllNuqTwueFfvdW}SBAB%M*9 zPKpLfyFfxc#a^?6SzEB_ap`2pR<#^9fDbG#*)SL)&u430Knv{LH9VzeS}RowS2k+9 zNAd$Vc`+^;Y`b+i<}E;52c=ZYb1-*LM3Q7(0{S*XTUS;dxLc0X9F(J}NRRn$nWs;f zm5aGTf&Iszac8^SXEvpet^BsfqfId1Wlm9wC4vr92`&yDA3fSHYrUPAm0SpgdhZ8Q z=QLZA=P-fghT#G)uA7cvg@8GzW=>RQDJTag`}Jss#tYZ2)4uft@N4~yEZhYiZaV&g zF4-rrG|Mz#b_ai*bbb1#L z2B&3n^5sszATQK=8fh@x8Rl7QEIRv7Y2}KdK(iNxM=>nTON?X*(A~qnxX@vmM)9pHHh#kkby&A(19`1O#Wp606;FK#k$k9oM zBeLx~DqF9FI4QQBn?Z{fR&MhW!^-!$tjl>F@;R#@?7p|T=j}#L0BU@NE-5>h&Tpx1T0Cd+|(K0Vqp4B}YWpo+jVl3OR} zzj3||3b#^X)O@yWNRlVTCAjwZmzSEi2!mQ_QmOFU7hn5*4yMwR?#EGp7FBl7@u4Fa z$1U=d1yrL^I+mdIn18PG^%zS*iBOV~bB@TUTsDSAGt2y7?D?N~f)6HyFVHD$XK4_n zJo2iSZpl3tyjWsOhG0;EUYUc-5+jN2vdwV=>NPG@9q+4pxgMv_x{wAbyQcie1ZHf7 zUtdeW3+3R?t>j7))4Z}?^E=apQPY#ABpyPbUn%vv0*wq2c-j;eI3sOt<(*87Fd@_- z&Qd{{DLJr>@Wf5Kl~&R^K38T+B=C;@X{Ft>22e~g)hg_TJiK_a?w^@DkPd*|WE6ma zG9rbKpk<~l%%PK$z`+9TgEQWTMsJ=3!p=#{6HSQorUmT<;o+wR%vsmYNz!?*3mG|> zDIY;1Q{pjr(78mojz;_+5X3;T%C**p39abWJ0}H9C3~9yNgKmO(*a!u;yo?NZWmw( zf|3QexJxC`bnMkKL~YU{GMOyV0R*-!XsGZafq)JnpfQkieb&{pe8B55=CJ@VAQUCE zwDr&Q1;n#WHUkV^b^l7#GAT~l*tKGXc*Yqwp9mIL2&iX7>2zFD-dtL0zssy(l-I;* zY0Zlis6ubT3Xo)I4nzj^3ex#at(>5t~r)ax}FIBQO(}1z|_(N2HkAg=8j3S>jYp<^_$9RKSx5shik#|qzcm%$hOCGyn^T7`TBTp`n+X}2# zEeqQ#zFWZs&XI1F@@|3%_~Ivi{FnKmr{?kN=jy2HuRJ|e@2)MYKK1F*VU$eZjNH#8 zlaH6*Fh09r)e*{)6^q_D%{i3nU!hvmF?Gse1@YA9y2BG43QQ!j&|iJ<_r+=HLlWlz zN{-f&$8RU=tsEmAOBEO@&wiDOHxY{Mc%}c-$arWu=jz*;how2@0ke3TqBO3h$XiCV zU>DgfILz`Avt*0)C(9d48khi;f)$Wgv$lOgta!J6@SMF6v=R2vydlXtCjQtqfYOc_ zGEzE-g7xkAtpo`$O^sy~+1;(@r&Ryt8;02;T#Ym}hNU403C5<*VnbNSPKX=fCEniO zyl4%68E0rAg8KJ9QLhiPahW|w@VZAP2UXS~8u}-6im0PR z#dM1;2cvKM83eDAEFQd6mMYNi-v1S`%55Kj_)!sF!c7%g)=c5apppa6gb$I?oyhGg z3~UG_==zMXl;{@>!CjK^halqtZP7%*L-7v*Ge_FS5QZd)(8}a@X5?k-bSm7*$Uzk@ z(Lj&A2Pi2Q{=whQ|ED@WOvxu+GtqukIQH^d$y@CBIr_oZ#wsy&=)*L4dp-Z}+Zzv) z9^7C2;NuN@_n|!~IJ|=CORWq4h#oeM06+-npYoG_(A#zH^zMp>6?qx=7DJdi!8{1r zb8@^dOwjxcupckl(;_AA$NDD0YE}bbYZ(gAB_2;}&RZo}o_7LUi1MC2RnHX`*tB~N z)V9loSuC8RVj&d;hA@^Qz9pm00WaT{qdhfQPO+?)7=n$zD;1|nG4by+vKH64x}eNF z<}XVU`8apLu3*%+zNq1z^7QB4&CdlRTX#iL{i(AXW_0xjm z3CUNrcRN$(eqOtJ7+>$Fu!TmK=rZz8R%c6@5Eqhsmp0JNFu9-tWubxn zve&e|1}i-Ezx=?fi$P(oIc_;aVn3Uh_brP8yv#FsdAa>CPgP`>Q<*suc{{h_Lse#$ ztP)B>O!I{Hva78}9_g%z{}ch(uyC1Ug1{Y)kSzE=c1h${;@j$h$5xMt>n9>?$v!Mx zXpZmhZ&}2@O&{(8lgV%T1hKX8etW9TYxwE4@!F?Ch_4yI#lDNL7a-egcV`v7uad%L z2gfQ+k$H83B}d<#5Z!gS^5AyS-BZ6w0};Lz3;@hax;vd%0l&Y)%|OBD`a=kpZmPPM zXy2<+RWWWnP6pPc8QBt0;Oy(mHFcxztX1Ji97_@a0SE^SkcrHUEkpT|IOOC`FF{%% z&R@fo=!~scI$dPeoq(DZX$-K}zchWAIDdHV^~j~s=Mh7tX9bhLd-J}#ZKcMO_Y9|W zp|K@UVJ%kGZK^;vZAQ}gIL!UHyPX~CZFk*%_5`#@viUf(LL^m03*aKP?UL2gxP^HU z(JbX!Sop{8e=JX0Qifxp?$=)q&u>z^ane%ZtZeJh)Jpq)2v*$h#8!> zb{f+ak44)SuZcpk;Jge7z_8G(S|qEb;&Z-5#GSZ~n7fhd0g80Znajp%%APl!giiq& zn$&?v@%p4Q2<*O@4I)KrXC>K;hsMP&4F2%`g$9I4WD!@w&AW(If|_-#S)L(gTAYnw z^Q8nUJaw>AFu`a$ZBzIs*ZY?x*k^!8H_tk;F zwT>pWj!iwj`7L~C2k-pZICaXs;!rD1&*A3K6*kjs_I9K6H@)G{gWcF!lv+#vX@k15{B7&Tc}Ofl zV#mxPbqh?8C~`U4YH$yovES?zouPCzUm%S15}w!+uaWRxdw-5oV*WKKnKKAJehjqd zZy4>bI~}vRODfpades<^t@c~xBgL4hkai{*EyVy$v-5h8x%Waw>S_`T@f#*_`h;>@ z0L|(K@v8(8UPo{AA^}EdNjkZ7eVwraumDq2m1P&VOR~qXT@grHi)3Z{hf=SFb{k{FBxjUpG1$B?U9tWVm$vlc2%P`xraclR=R_|6leoC$tRf6=nR1WTtu~bLR+WcBa^Qe0 zIkImjrUdR5!%BZ zUCpiN58p$!N{esR4VsWxBvv*@+C`2&w{nt@+SMx;+Lr#~mJXsN_62Mp3;J1K@zT z)5KgZ7a;bav90TLD$?i>uGXa#-u~J?HYcsi#L9km#9pAdXAKds{PNIoQrQ^#t6!yf zBdU)HVi9!?XEWbV@|Ao#_-F@TX{T)dTSMDd}= z#|jRP%vrQuIb$Kwl+9PoTWh{W%kUodLJsl%d*iT$OVkkvrWB{MBuLd0$9R`Dw@{H5 zPetFwb@Clj__ z9y$V>0BrjxjVczp`%Rt)VisT**c*Ul=tcX6EU=B$N~^CB3z>#QG?_QAau+_j3*q=+MAwKM+T0;RTf>cog=7+UBS6BhyWZ0;PSuY!iWAzGNor(k+{W+csNe?8}+dfjG^=gZDM6XDxi`GJ3hkzC&}jhr7NR zseKru8`IKNONyaaybkc=SXQm^Y8UPCBo*H8_n86CDx!|Gf7xx5QFL;6AAyFzi0#n1L)g7Z3^ZDTLZOc0nr@Q_$>uVXXD z?uI$vGl8kc!%SL)1A*63mYQQ;JwzFx<6^t+zSaNgC~>-s>f{39A{)f2bAc7dguW^& z4MKkpVP01{=aVAV5seeP_RZfC8KXeP{cU0pASct}r@WZ(SM$zM1%;9zqVZ0KnLgpu z7VbK@ykAoZ9s))+Tmlpq=LrSk|YFod#q8-|BxTyuBG2#<#s(S zahYo{6LmqgS8TzYmm4-ISmUJ-tQZp+^!zHub$rrECcx-_wL-lfw0DtP_;ok7!lXv1 zSG`$<52HUyNM#MbE##NZ=P5U>LH-%mbX&Uf!<;g$0E~B+$xTPv2xrzV=(tB+gfrc-F4d-gr>c zDLQg3!lioma^0XVUkGb-o)JK9=IaoGFpIhaX{UaLI*kSI!kR`=THqpcJ4M&+Ef4%J z(?jNc{FyYezY!xnx2Svoz?=lbNgYoWE8oXkzgW2pD4EQdQy>%EO!GvkgAhEC(v!kF1tyq)8Fj5zPQ_g?$xF z=v@ZtbYMd%las9L<)}T@Dy06AytKk#wr7rC8j3ER3xj>*RL+W-8^KmRF0rt<^kBHOPtom%Gq068LKLX zplqMq>cd+AW#Y*GEXHNaOCLFC?z!RTg}q=R@dt-+mXz3f_vr6GA^;Xgp}4;fY&|)= zF||eux zzBFQHgMH|<%hd(9s7CSWNXg%Y)b{DdAqA$PF+@Y;_msOr3g%8m$eh_n);_aV`rj{w z@AavBPyHBhp;UU*Qt8uxA&fiqKu z%2SCgN#n1{GAjd|HzFH9H~v8~kmPdX)sl_op_-y4qbJh?b8(8Mbd{EYf3OA;uPAq^ zFs#kwQM{Jf;0%%b6J1vlJlc9b@0?N?|2sS2gj4t@J-y`rpVocq$X>+0`}-TyXT3Id z4OBAy8N?0!7NFMB)sCo!hplWui?7`Mqr+h#c_ZEjF<8IqMwQWXnK!^yfM?v$1}VW8 zAAbNQ@mXP{E63J9-A>tbG2j|n6KtFte_GVYVCeQ2Ub}9_FOK^CvQz!O2RXxERo|FH&U-v zr{pP6&M+=Z8_h#7UPd`nSaMX+inhmZkSLwNYlM#+0))I|?1}zC;{y$fXVt{l;@55J zB{MS;!{4GO@kLsl@wpHHBpt>Rfaf#)&qfD6H77@V>FBRfXzjrF4DLP}JVy0QY1|C7 z{-G?+=g|Cv7kw4Skl@wyYwM@`1NYL`^32Gn+dT^-);255;PK56!YB+x`3?XCp&jE! z*B`JEF`zNDP+mf72C^g<)|mi)O>=H?=!XjdR1!eorI*?uIvpTxYT#2aD)iApqp_a6 zYrqOI`58O(CdulsB0}G{*KThp9zg8nK|XZ!e-L6{C-R={1!RDmf1g`@An=%N`1VlD z6v|sBa@0)R(#56|iUJmO*Hj4}fw9{Z+I$2rdr{)NXig*wo272Bj_>oFLj5u=db|&{ zdN_TapMqjaW#^Zd*JtWw+%l79o z6utwCFVKW(dZhR9_(GxG)WE6jRu0P($#vufOAu@-(&1ZUHf0q3TVPMx6Kta}9Rtb0 z!ns>CgR5JTQCN2uZc&{SP4A&?8<04Ur~eg41LNo``N9s96tc@7`=Z()SRmPAV8hH_-cJlG|*G{bNr%| zV@_vpn7Khwn)P-oDCO!~8oSD10&oa_<3#A~F#FeOx+i1orRSg!AcUfF0&51IkGFu< zEugp%$zP(_9HqUG=1{usA+8@d5Ppp;2DK+B+RmCo)4~1wZ=IeH;7m+%})dS9Gvgfo48N#Fadp^fG|e?2bI_X0IIIXZ=%ny9R*Y?sK15B zKWh_HVf3ZrQ8mNd+@XHi@~&IQ%R9ucn=Q0Wg{OMq6wQqHAs8YbvF-E)) z?RvJQQgDzy(!!0^NY*%KSjYYN<$T4b?II6ZpA!JMC5s;J>qP;8(?p-|gs4>qv6~3; zn^0@06d0K5aRErybcC1$qqo86{*^;sFuA*@g<YH~%TQpRBB#uS`WqBv zk`q0t0xrGrH2sbV)N3@=n6MhrcRm4M64N}1#tps*WW|*>eY!%LCF;s zO2v8&TBih@ej{Ul7%!{@WBCe<6ft(+m3PT{-EpgPSvAi(9r9PG|9N68^<{H0SsG5M zC8ZGFv`&my3I-GZhmaZ7t=a5(N2ip-442@02Lj28)@Lnv0G^x@o1kFSOcbFGCUSs( z^N`+)EhbKXZl0HkA%A-}FFL7*w6Whr z$=;~M{ML`t`mLK*AjURvu!e%IHVU25dw#YU6OA21>eYW-9HY}4G#1*eBOKeFNFN2Y z`EyITj5kq5*XH(U6)t)0ulNg8;j&qme&5}c9E{IWD|A&3JHN$hJUsK?$b+^A(0MV< zqMXZhp;F6I9qkR;P%;wk1 zLmxF|XfX$$PRGG*?K+<^NoPv342n)BRbGmrO=9eiO=Sz&W?AbU&m@d7d+E(32a?!9 zjU2M{Y=uUji`UGghDxPpZw%sI9#IFHK#0lNK)+Fu3xH@ToLmE68pWY}htbKE3XB4= zDHaH;8%yj-a} zT$}~GZtNi)2aF21;q$+Ko~V9OlY??b-Vj4^n){$4{)6y68zb+(TYYYG9un{N<;icf z(d%fgV)ramP-KgLwMN<^B*roO>=ihTW&m)#ZL|{?{q@*_qg$kpI9<1iv)JBk6 z0aLl2;ni{Ktg=5GHOL0Jz}}|;auibm2co|bmKi`Z(Yp$xv)7BiBc1B!4xA^GY8u;u z8Ax?LNL*Zpj<1bxG=FeX`qb#{Mfyn1DE#xtyLqN)>xrTjWwLrq=|2w?c`0R24~nf* zg2k&9x^*XQqeEywpt+48rQmMq!9!HcjknY<1t)6%re81REu;M2ecU|AuKL^h^*ZIG z`EQ5Jc6lKht?owF{G2QV8fDW7Ac220r5Rv6W&ddb>^Eu8j~VOT%rSJXzhBC(O}$pK z;RB8XSYNtPJ<+vTv`KQRytKsh;s$VbdMLD5U_Q)B@B)ly6xrS4jJ9(8)a;GPN;vn~ zo`DKjp+-*cn=RRd`Jj8gQoSMm(#Jw1L_GIvxZ8$K&feII`}bJ=AZ45v&)F0Ib~3(U zaPvQ0H>aBxc^xV-9dYo zfb9D!>4TWI{u8db%dX`1{rirBH{a2@H#cXe$r(S}FO76)#dOtgDc%YgJFIgM0{X-r zGHHyX-8E-n<+cbs<*;PskLRqKk}YKzy~}COJbqqeQB93(bdQ7}$9OAwUFVNItjQg= z|2M`#sIJt&ZCcJ><|VH-r1xOaY(u)~rlg3lREk&YdUj%A>CP=(BjN?cyii^e-upnQ z(Z$aHeqq1Eh8(c5>8#h)?}xG!T0H81gbh^@A%8g6Qkl3V-)A#(@=mVbJW1a_nC(%u z_8?_Xd}f<(P9B2c%y19?DA~VvZ}jMA;BwcZn|rKEf)0*u89cw^5Gm2)RnoO<+BZ~D zjQe*;+vk2hWjZi!YOJkF@>{_IsEQtFTD;_BuN|xVq596RbDr~0#)XY6r5^i}(^B-x z2t`#~BTfgp(E99H$kS5?jL!{v>s~Yqi@oXtUytv(t-c)Rg=n%eck@xEJS2H?yGvW| zZWs06g#KqO?IZF3Tui9pb*}n*t4lFr)JycO#N-CLOb43sfXC|X%UhEUO>t^A2nL!Y zB>q@g)s+OXf(WtSX^Vr~Ks{$9XzX!m- z^}J+!wg``3!yW0nh7(gPL#n+hGJ?wt9o7``cuhUK=xhn?hoXU7Wgl~tv)FYUS8JLu z5I+>VeBl9%-_zl`7e^F$2ky4tU6z>WgP|36364rMf#h9l;C$Csi&#rpshPIERIe;$ zrtMIcFR00VRO}=sfZ&GK0prXISzG@AZG4-NFv-7jIKjaGQZoi~#$-#p!wX(h88arn-L9fJeAgj){u>>m zaa;yokam}JdtLXMm)GZPK_Iq`gzkFHs&;pbNb;7l+O)pGrf0){0&j?+829OM@`IpZ zxi!^-HgWTM=mq}u8v6$~*D5s&mEua%@JXA!@w#t6&i?_$znxE>fH4(wTowN<82!nx zA?p4e(KtJ?0^7Y&W8u91DuC0>_I5??Tx3o%o3#wZ;aRouk0*2cP1x!ed~LnMgN&>6 z$-=C20)~+zDu6D`42K_Vi%{GWdMV{-7s?Ac`Yb^XYNP5t=NDtV5Vxo^HVQeGSn!!4(A&r; zkYhH^zPYv2s}8`>>qJZxog+o=H0ieY^?7RiZ-E*A?JL?`!-e6XRR=dy3f!#<13`Jq zky`GKh%_=WNB%##;v+B!00cFlCYo~F zfSPTp4f#526|d1AcP?#VO0qX zA^=4GeGhrQ8y2nIpg}DV+qA>xSOR_XhItDccdq?t8ab=l??J-3{;+4uF;;W5ey>+C zg0(Q!PD?lDv3e`4sek>v@;JK$c(re8H}um2Wbz2V`vADg8ldO+T-Y`KFXFix^ZOnz zMGqkNC$yrbfj-20y;xn=zF;N$zG2(Teh4v`188;EsvY%#b8K+iEJ0PiWc%`))%M5o zKB;oXfB9s)J08v5Rc@3oeNhT~LKPv#oI#b4x>lLqzmv4UOT=~&v$Y)3Mo(tL@y+3Nks@e0Ly#rtx2W4-LZt`;XmCr3AO%J&~^4x|JDzU)x$ukxgCw` z@A$o*bfg6Q9&GA2yi)j*>=xd9;hk=FuA{QSDeKYkPN!w;Jpq3wtAY*2C!6m0ET(ZJ zy8Uv|ZjTECWw+hJ3oGzPwimJo%=Q8qob3XG`dBb>I+jGP{IkAuMO!K#X#`VTcC@t|jf`_rj!!ny~ zlIj&09O-}H#X>K(`ft9bc|d7t!WG~pjj%9PJ|8uXjO|9Dit9O>*7o;eE*YM-5abmxlcDog<|o~{_=LM&Whck`MHpOx$a*Nfnkvl2KPghtvS{Jlq2+dK2k0->bGgO38(c#MHLDw zql-)s?+#&ulX|2v{dZ?;BVDTujoq&}{1+p~qSj%l%yvQAAvR8D@~B2xMdM|1 z6gfwM^@IcqOkY6rXRl-Y1*J*ibd-*?mp;Hyi}1ei;mj8BHE=^D`1l1c#N<%3Y6wZq zje2{xVV_k}4HA^QjIO(wZh8PSm(($UBZ^|b=b!-KTA9Ct@H)D%t+-nO&YcuSrXfh9 zt+mmJCEJkpNm6U4$AkEYfh1fYUn4X;&`m%G#+38wVKj-rW0<}`%nN!5&}Nu?K_)Kl zJ`L(C0nQp;Xi3tbt`(d{IxZ8tui>AJ;r0Zj@`}1|pZjOsGa&8daRF&UL2Fg^;B;YZ z`X2#6VLH3%Xy2$W=-0vua@R(&$}-%oTi*JHAx#hR1jKUz(2B^q#)`_X zAdkwSG}Ul4cn#1}^Z4tkn-0wpH40>_6(FI`^mT7o1s>YuL}6KJnk0op(`6{Vc3ZWL z9YiY3W9rOSZOAY47XAqWwF-f_nyyP&8x`1ipNO&J$tJCKZ>b~-P+BU%kUj#g>mSOq z)?8lL$j=cNLHn1NS^SR_smcWO>SQVdR`&(0K*i(oxcdu{3P=Fsb^}7C*qLOdIg;21 z4;0G)*T8(KHjr&VyEk#I�k1GxFuYJ8?m%0$%kuA3d_U*?!C@Y^_0;uC$|L09!Ff zfVcKrZk5ziS}MZOoaJ6B1Iw?Up3t}OU)Yq7cc6x>tz8vSA*u{oUxgy(+*p@oGh3}a z2Tr5hu0y>&|0ts~^)tMs3iR6+Na;)sH1k3Ayu08MK|l^2GCWCbFz0G_kumcMElZya zuww*FxPkIH#i*Wr)Fuxm`IEVKWWqzCUW$N3NtrbhL7%8|*ISb2f^lIS&QRHxt@OhX zn43oq{Seza=VQ?Aa-ENtz^$j^H1v!DWrtWb9a|0kJ*T=wr~&j6Pir|i&8Fw)Bn6(S z$GGJEundOKfybKgv6F&fO>woetEOv}n@o%TiX0gCH8C$}(Awbd(s`;a+y8x!Zu;ad zJm#{PB7pRs4PFbL%3kNk+8Sbaw<-`iQlJ=k=)fKHKUUfQ)b#E5AK=2aWbr@W6A z(2=g`$z>Qhj>?gpQiRsc@5j`|Vi}jZwSr|o6RX-4}vJf)+INKU+xNhO+M|%YRvl@0{wEawUp#s>-)St_TK8r@PYrDQ@ z>wkND>~hL)km}{tOOY)NI;C1RZ(4y_14urGwpm)Trq#`9BVtrF^lkPLLLE>>6gQiw zghmHiGkc`ya%Y317Y2Wj8$&!ZZtqFsac_sNrnA6wR<5%W5+aSDU=zltmc~Ma$LA+o55hK+0u+d50RAZ;Dr3Ef zfo!C+AzcKVQ=9F`XS;UmJ$se*cV^Wr6~yxaA5Re9Ug%UIMyIEa$BR)eAXTvu=K`8d zi<7;e#IDRtFI_ek)U8STR9w^)jDlqt)GWmhD8B1S7t|8V0kn%|`7Fo()2ZvhD0Ux5 zg#j2B!lrGVmCFL@0Jnq5Qv}6rt*rLzDEBVjqV=I!4__L_E5SCL_Ndf8mqu-gD5?u z{MjZ=0|j_&5x#ZN_IQu%OJeWl7V6)4^siC$Um7}%g-f#yrncix%L=0k(Y8%^oKkRp za#;pc+`b5TipNFBbA}1H-I&VX@@EWW zC@Pt1$kj+u`7viRb+cY*NGSy|@)Q__HiR{K84;%KgIcrLAcyJ(;*bB#VD$}(;(Jf4JIa&8+)puV@q?TCe*6qZsNQ0LFX z#tcU0D7BUm!f8)^_8Da$H~UJBdy$iIY2Tu0CbFEyTh*QA`8H~UdV0N@CDvYqZ~4wy z-?{8>fteu#GyP*PPEcv0M2ltkTg6308(an-YiAdifz-a}SQeg>`d}=90>#O{1w7(} zn93IB^9)B8gLc!au->@igDwt$+%a$4`4Ed|qr3hM;|uH$88P-pAi0`o6{S67>GD); zddai{=262glWFvJfDiy}Soa8>Ag`!dgnd2<8KLXykJfJdx-&qFY7Q~-kpK=uD_>z` zj%eC4P}V;vr%T`f9+vSFsI}*9!Y(J$up2hfVtCMwP-s;$%PbFlcXt0hc6kH>+sH7h zJrMIebZn#UpL-PtI*1RnT#!fClVg=L{P(55u56}v2|3WGEcaLx=p zLc48D56a9Aq7I^ttp|xxh!u=CwLT$g*t9+oE5IB*`!Jf=vF-gg$`a4r&98Q@eZ^g` zzdPt1xI`i|;fLhRK%Ouc>xA<}4ra>Rmvc6U?bDkdo?Rr-O0g8QEK0kT2pXQwd-l*| z?c?pl7USvjD7*F*Py-mok8E^2<)j`5%z0Q`gwfp6()GBN6nWg)H;Jyn@@KT&A+XWY zF>H)-MJBWx(IoVt-7}w}$CEIBvqB=@N6($^NR&53-;9=q)7dE<&%1Ng3IeWu`?bP= zq!+m!`^&8!Y~P?!(Ny4Z)L}g!`2GT1kuuJA<=GuKc1?c=RNY*&vk}M6?|8{9o?5iI z*a>mqVHJxl2wMd@r$bEcanodrOtk9ljz;spQC4v_W8)5AszzPX!>JLie+H0SbYnW} zj3Kz|8`IN48|U=vkWTl`se9->O04yQ)wb2AgF7=WTXJjItnF28>%X4Z5-cQg*6EC& zFfb^7x{~Jf?Zkt}ZK0lvJk%-lM`e)P5NewMq!iE=eD|gn{?iJgUTbFt|G@bnz<^H* zr6O%-e!-IksX^(fL7!4WEfoo4hiX=~{JoeheVpbAD%{yEvDce)RJ&~)6vCd3ix=gX zO_%SafY>-sw$-I9PMc&sZ77sC8g z-_p@~#C-YMYKF2SYf7@mcr>YS&{pfDZ_o~~*!xm!tHWKx_T3r;K9TYaJWCpJ}mu{tRKUX@Gdg3}<>4g@uXzvu+Dr`P+Y6@A<4_34x1TLd+- zE}M>Q_?2=z_WK552jF1G{q8}F^@ff4s7>?5;xMHLd~#9$1Q>3)9j%L|T0(d{$D0FV zcJjQyAg^DkyyXvUtdv5$M6b4g+om$Be{29hutl08;v@gNwZ zL1yw`5aZ6gmWP61R1lxg8PbCjdAl;=Je4jtkF|%$OE-K=AhQlqy#)B_yim1A2u#J- zD~NX-@>T$NYXRw*oD{$*JNUb}UpsE6J8pAAhmY~~BlWs}o1-I7oLJ(sF8vAm=T-|% z@mmnaZ59B(h{ABA>e z2q<7Z7bpN-)$$wLsSB0lM@sT82++jQZ1r$>W#DMyGhkK1bQie&A@-;7!{Ug;3SXS} z)5ix^9XOK3m*f$HhEjuHGin4+3 z2tJGEu%P`C^zXCz-}*$eHzy5hHeX29YY~AAG3YUm~w3+KkC8@Ig{em8l*^b>PL;Dyels(Fy%fkdfSIRwW z-#nQA`q1VEnf5Nm8Vm?}$+XWaFuDpzgL)-;8m^LQH!$AJX(t{~@GW`35s0))^-AcY z;enTB@-a}e&VLLYn{o^K{{dPmJVpU<)N*Dc!lwf~y#o&=XTh8HIJ>SLF9yvDmE>m- zd12mqP^SHYp>qSG&0+1(9Exe!6AyE(M^}i~+6Cjq_!k;1DR0JNt(c-bxWAtM4x&8c zi!%E@&!v2cf2~z7pQbZDXJ~D@RsTf)Vhm^P%#V8{3>7%rKC@%)j(_C;kE}C)OJaW; z@XRo50y^M^Yq;Z*;gX`c46eA8SXNe6xRsTemUYam265j)D>bvirLwZZR@=cP&8)Dj zY)7-QvJSQ#Th8I-`}6w`a9vy%GsAqI=f3YyIOO{i;rG~u)FrK|7nxd{P;g@4u-y~f zPgi=Ad`hqe@ssF({tsT3>7lLPWFe$z>0gd&obD3l@rW8%0IpbH)H-H#bdRh zo4=*tkDE3Uy65o3kn?#o$z!v^AdRoo&LS*KqI36xUwL|N3%BI&?XjyYnDpdA|Da%_7fHS*ed>SgZ}?W`l@iAz;d&S)X|?tOl@#EP9M>~L)to|M`Sw!elQ|Z#uAR(3yT&@AyN-a^j+g3`_#mBV!p9WqY`R`}*;nccNtdQczPZKf1 z(53{FDy@h>dxFvin42nsmn26WtCljU8%2*-ERa|Y*ZF0Nl4F-o4BIgv+`81<#Fvt@ z+y?onV+QFjh3^uG$Db^fdOsa`U+=gP)!=<|c8vH*=*U>1F)FPW>PBV;={n3~KaSRO z&Eb_8BBUlDeJqx!M}X4oEOQ&0&a-~6XBDrM`sJI)vxsNkpouH; z{e?}RPW#J88~++x^X3rnw(8vhApOR_;4ORc-|mC8D@pYT47>r#X4c zSh9L9v*0YHjNdP~Lo6H2n?JGf(}pvzQ@F2x6_>>ypxzzx{n{>Hue@@A;HiQg(iMN@ z7W18)pl>8>-_#haF;=Aq3nP{ln!nDCC!h%Bfxp`TxCHaOh`}#k& zGs%labgp|T$`>{sak7E;gkVDa!0_4vXmT%Iz^#y7VAJae%hI1?Md%bQK}G zB`TOAAcdY|?uE~>aKiCLI+@y2i`Ie_ZXHJE@6R_m^tLWuv2_Mbe+-08Q*c%!(I=L2 zH!axYt0-aj_e| zK+2PSTvl~o>~q|;FTmm*g<2jPW&VA0V1=8Mt*=05I&5r|PS&sx?qRD-y#p_%@3R(n zCfj@b6rV<=^s}0H9B!YXpQ`nFc!DDp(Bcpv|kw=nAxDupqzF<4QY!%gZ z{e5^%kk{EF#IS{IP6GUY4e70KXXuTwiL)bZYiYx)sD5epN}qO%-8>x|C_{2Pu7ZsF zUhO?J5$3HH0E9^y^Mr&#{-bX;-P-H5U;9}#PvMnst&g2m+vz7LD2wAx9fP5{;3MEc z#&FsZtHN~)n6jd@f_@Z~^+k4f41~!&%^WgY#=M01?|kW8(2dR z>OOjDRq%<*_&4^1b7dCQfL9Wt`jfk~pnC0jvvni@mNYF)X?KrGe#pXw@K~|R z@Py6f2(6K2(3=(lJMk&ols2Ty-{G!j=w;W*UW8a~o8_z5BI^)EDsA5bI~D8fwjFII zXSJy_-?KV@3krw}CDx($pL7KhSO&vs_~5N#YHG^aCQ*DSi_N0jw+9(;0UhE-y6)0H z-Mg>cNs(5)k6J-MSCU!%PM@AgP`jFr4XufVhpz||epT9QrC19NJ&aySC_D6RzEr}z zs%7CSah-#QXV8-JX*MHSI9n1S+a+@K+nm0fIODv`Nr{yWj0?>uscO>v!#Cf}b=x)E zasKIpz4#Q?eB2VZ+HLKrs}9ywvPDM#-Sp%w)<< z4)~XJQ5V{k?KC=kV4>i_?;1$~EmcL{F#<75y~~$m8m`Rh|9eO8m9mANO^uqgP;YD$ z*yGt`GOE72>{ecLWAu0XJ?rz`o9UJ5KeD)=BJS>Fzh#!$_8o=OcTwKj9JTmjjU?vk zrf+fgX9-z6e-RMWg) zj)koQ()uMrWnsWK{V&7%VXv_Vo0f)}3#?zx{U(`7WfyXnR^O(1CYp|>1qo;0o%e{H z!xDdcV{c*nhU4T@b*@SRQEJ9Gi|TLBxN!N2{{ZOuh~L%xO>RUq`KOe-+tFTC+jcbL zpyPv&V1gCN_0kE4lv5k6=+ne8+M|DVZngtqrZLZ50&Fa-o)WBZf4%MdU-=b3S-W=q zK}j48M5kw%u>3)85H^dd8sB#G*QNy{1~bzVdAAuR?hPGru^%-&y+kgMCrm3CNLLYK zfjANaD_A}Wk$I7rMf7NKMN}jqw)0NN@$%yap(3TL&yK!`8qA^*G7{vVM3R)e>MDev z-3+?bkCLFaSM+DXFlw~k@2m}&i)a&|!-8Np+U5tQR~?HtrV(h$%STEujtq|C!gMKV z|F6c|qRLu65HBp!LXdz8V2@DZ`$eoNnSmVoE)l(!OS+^az3Cg4+^TW4UQQ&5hF}Y{ zTz6Zc_F24EM$kf<_qP>pP;2qWPDD-Egc6egZ06XF;-7(LBsmz3o0$d%_|mB;icd$0 ze)%LnICV*d+=pV^#`vYR*yI#ybp7z43a}U{k3%6y-TKeZ8;o4Q4BhRdZ2a`(kY_ft z2r*v3EK0-*A=Zu6|07Xht#Kh{x@bdAkp;7KeLOLH1P?H;vh&W;u%^vjwN^^#)>0!9 zSCo)OXx`^&K@kUY^HpLj`!cO;B=}=eGXulN%R;VV&;ptGvBz#ftFhm<=0-lmVqZ6v zhsN^21zddU1B_TNPT>|ZKVn{v8KiMcOm>3txNuW9QJ+*vuA3*@)e>a_p}Z z+Y{@`X8a~9J^X3hs(+XD<(!ipzaq<|&)L;{bq#p!E7SkMGYsVB&jK)V+x3mMRXr;G z+*adU@T%stly4KvvT8YlXZ2w)|K8UtR@+)be9wfeB@MJ(-KFl&7hbvW8mo^pB9QWT z0zk<*H$DYU6?uH_ZVrzG|9*z(_Ja;N5M07f$vgVFwDi+ij{??>1=8RfD(zM|JVy@f zR$?>J0&^8WQ(^QpmVwM-4i~RogKQi=`JXjnt+J6%b(@;$ma&6b2*ZI{;=FCw-|rp0 zeM)i_k~ho{sWlKhiH{dx9q$VwCJJWuYn>&LDb6B4N3*jc5gt**X*CMdj^}NqTi1v> z#_$(=fX+XCG3`;bO!8H~YnQUI_ft`U8?ku(14ZnfM6K*Z%{LGZ&ch6XDV>^Ie~Qnn zk!I0(EBSa9J>p)15qaV?D%&+wdiH_ArR=rTGC{4m|0jWA&QU47u?F{1J2u8 z2n(;Q@af1gZ~+&R&QNZ3;39CpJ976yET!N@kf@_I_H77hSP60agJ=@Knp40XG14t5 zh~wbq*am7}POGPh%^{wb_y^v{ownuV)4*OfdUnf~`!SaTJUzlSAFr0tI%2R0 z#x?fI+n}*Yf%R+>L(K?QLVjyRQJjMQ=6Wyrouwlp8aw*AXCYAqybQUZHCK!abRC;+ z54l?yrg$6skschY=^4`B@09ORpzCu&)bfQjs*0z(UFM;>;@Zyu|B3iS~Qn4@%u2TZD`wML9pBD6E zhC)#(AF$xVryEO5CqOqlktOz^41nf7nKM2Oy1l^s`1yAejC9pv{@xgDS+qqwW<_(< zx^QI)o|&dw zfaHHXj~Vo1=Jnm82S7lpWm#Iad>_re$tkhoMDP1!T|7!?KaRWEA_VmcWY(Ea6#U)} zeL=h>`{kLU%~7j@E^0O{?0D1zE?^DXEv5Ne=zj@qHKMy z15bdnIM4i>uAV#Q-t=N-x*O@_HrvWF+4dzRomsa?9Dp<-SXOI*`?NRB(RiH|bN>O~ zMEAO#Eb*d%YVI&78@#_$n>FX#jVutIu>p-qwU@fY^){pkt+!Z(k+{%oOw9bRK4Yl567eezB~bFfzpaDGD{TQKz2Zp zCRJ8gjV;eFVK9K(7Q*O2z~xW6gXg}cyhr+3j<4e;;L&e5?OCJ`2BzJOkF;}nB9neX zh~`4TTi<)_@dH9VjQ-7@qD^7Q*5g4?fo_vBAsa!RmIx9uenQ^>W?G= zX%QA_l{ObWGIw`67LxAbj|s6gIpql)_tK)Gvd?RKCk`0^QQAXHh6<3(E5BcT`#9k^ zQLCn#zeua=8N-DEqV?p$W1X+u$O)rmCkTB48eM{g_c57oaP#mP#P_r4gwF+q|Mg z7k&Cwl0i)y_ddQNEO$dhV)OWaIy8R4JZ<6bzvA=9FdZTIt?G649FIxr{h3UWz7p7~ zQxFC0?s+DTNAVy0-#tr(Z)A=~m*B%jCdDOyQGC9g)S_@g*OoL_lj6jF zLl`22cGTKuX%k9MY= z`ZQR#@J^3#;f32743=nRv(WKXD><$9MhV6!!EoFSdMpq)ZPUjsw|n+fRvGly-G(pN zLy}~pzsYob^Xye`=^J^ga4p8K-vW1UcW9oisE_$OPWJDy$3H%?&+YP7gDzk86-=l( z(;L1j0fZ#B!QM6kkYVPoh@Yav$0CO;KVR;BeQX3x+dGAEW(C1{jVOrB`*7(`66G3#SI**9^oL1#6fB0XQ`e_kRt7uz(&@sHY7 zZo^EC^X;awv-fOYJ``&;RJEOHl9jpff0FdRV&CG+>)z{mXN{Xrq>cVZBn`fJUHPyT z{C7aO+f{x0;LiHdKAXX?#h^k!tnm|$w5e_S zCD!3JE+!kr#WW{!0RIxtYGAMZ>Y@tuEb-ii8Mh`Tm+bCkSaE#QC*;r|!-yXDsIA8K z%?+CWWdo5Dqnp9;_O&13O)jy8EEp^|f)|entva~mw@ocDW8=6vjWjCiEjMHleocNf zeoHW3*xV|(#4B2$VHEARkNs1ZLPVBqh|Wphw`x%<(=P>hy|t7~w7r~d^7XX>XPgw- zm&4lFMY|_N8=0zG%Vw`jwWO-g-!b)|Sr8DLf7Y8-60Q0b;)^t(bZ5|t@i)pT_aD{l zlY3mhps9QBM_fP3^1pfWpGnv)I(~kiM~Uu-cbe{BOS+5h3O_tA!9)dy$rVH0e;qG% z3tKm9d(Vn=^}{2j-p}HKLm}KG!^*>)`mWq(JZ^UoWS(cU%kLqejv+oEcLZ(!HdH*{ z5Yny!M#hpRUJ%|`lvr-3UiUUz>AGUoFe55K2@>eQc^GoNr5yki`3r&>{%r1jTGVqn zgLZm)j09;cQj~{h?Ue2X46iej!ysEKhnShcLV}3K?b5oupyL;LYa@Wz`bbx1?A}N{ zKXSpsuUlD5=KH+&VL%J8RuMtd873fFL?f-lhA(z+_P#pYcYiOuRmDq%7xFPcClv+S zb?i{Nc1OEM0pI{h^|7ObC;EqWg>AMwROI*#ATSFWL}w^PJuZCZjy*hr&emV+wm7U( z!?BlG;^<>T)ZG-f1QQ-JoNKC}hqE&eTcis1$Z@CB+~qxKYwm}gsB4N7CkGu_B#ved zy6hg90a_5cBF`XS1N~-HzY9dZHR{9k$)=ki%#({u1CoE;qq#`u&LEE2R*7A%YIWM0Soep8%%f9laBmm=I7xJBYjbnIcSw7$CXpL!qTRQY zT)Cs&8HVK7dvYE;YTUIR&97X@UgWf;c=O^mYIoiCV2ffGg~`2ENppBA-7}~AIemgo zaZ>L5oX2DYa|Yb|CKIRrxuJso>ACf_c>NY@CK@^2C!Z_V-#u~~w^Xx)3>LlApGYjV z)3wS+{G_C0c|ziU^nB&DeI@BR)UuvicfmH{O{#eZCD1%m2P%defq zv$cMG)A(-Fmn;JC;h`~cSVaYE6o-F|W47ip%FtE-xrs;(Y$LXB)|waW<)r!AsGj(C z1%e7LD0|2B^`%m~#?__QEk>Dr@i*CH1aZ7-%(#^!U#?qymBYFnYPq1>tu>Ltq`DG+ z1os5~y1=zB#8v~t;xlPEQd@)LMDJf!xE+}`d*f$iKRs&+TnU#yw6kGYS%bbwePy5o z#obaDd3#y`XMTp*Ig$j%!0Z_T4~3G#wQrcDtyeX{>|L;l`q0;Jhy^WW71?gW%qEFW znHYt$??o+ix!zC0W!D(IeHQ%MU2-+}Ikx?SkK8ioW*vS)MP@6RlnjZ;Z#zxsCT~d8 zwZXNug%CWqk@4M#c0E%V?=ODb^PjMI?N$_UV->j=vGVsT<@yH^w_X{^Zt9fm5UIbcyM(Af{>+dXUb44u{A|v+L0e&IoQ~5D%4yy^BTU zL58O9oNS#6nr}RnU*a!muWQ{M?`~B>$k*AuX*&!VxGf|A(x4?|)v@`>b>$rSsiew} zaVxel7u@(&-RgUM1A(pJYga$;J(~3idas{>$JH|n8&4!`{7hEc&NVQbgPe9z2+mrEDKmnA85zP;7g z8+i|HzjRy2RgjR+dVJ}o9m%+^gSw_-9*)Bbou~ppQl9r!9XY!7CadWA=Tn|Zd_nFN z`BU?~Vb`5ZDsz)1wnlBc@aCnbb!uQ-RQ3I zmy6+21h3sx98SPz5E8b8t<9ASf@^s-Re(Gu`)@hvLIrV=TxA@OHF-{9c-z5LJ(lXW zks!A2c6;Lc%$)QMo9SCOSXCyQH@TZdyHRyA^}|#?z?M;~#JDk$ZHbjK7X0=%A4}uu z`zp;Pt1POf8KJwZbjnJpg|Dq0xF5Wk{PMnViPL{UA`lM7V@{W%vpyzTRCrY}GE#$!+# z&LvP2&}aS%&4r7hT_#59M;U{B838RLzNQf zMU9jcCJ-g^0oZ2n;=x?@%%d?c>$>B}ZO~fPx&zBbAb}l10MRG)LxmgBYw*aS1 z5hZM-2WOau;+&N8_x9Z;K{am(Im{@csqB8CPEuu4bFuvozmF@uOC8<3i_EtDJGH~4 zpPn@Zt}yN8RNK|({gR(^Qu6uBiw?qo24 zwZ>Lxm^bLo%dXqzZB&5wx~ImHie3TTr#PaEG%XfHTUwH+4dYcLw+3fw4QI}G+v?8;JGF_Ui(kcKlMG7NOfLuZH%M+vVHd%?jzkp}d*j@-0TnYB*i*kP|ZvN4%ET* zDC`m-Iv;R5_}b(MU;zX{`$9-m)KV=xXp533H9)A=BJ=)f%Q$J}r+K??(QxNb3aKRs znc-_W9?e4a+V;+q$c@{8CsHbT%9#gBIGArg$v!rme46sOyhjEequ_ zi1Ta5(Fy?IYW{*QoS7|3`EO-Z0`QV%SHnz=zQ1^lU`33};o027bJX(rrrmy>V!uBM zAm#9XKA2$a06q+mu~zCq<;#Igh4xg>qYXedT2C*OS5KtI zLp)BzzFN(1m_qlUY_AK_D_Yx7~EiyQ*%QWGK6!lwrY{-)J^&EWUfM=izQg5Xw@T5S|q(w%=%Vtk|)l}=>qcVLyy!k`{m(V z(F%2v;lZP+T!1LW^!r8n=^%LSozD+_x51-+Z4h9K*-N^;w9Xg+^SRsi7ikIhC)M`m ze39wIN)}tE9~Aq7G4J0PHh{kU-Co0T9174l-QMvyV@^T&Uvyf_Fk;VJuOpG)E=x~n4u0;{H2vFk>>{)d! z8{M7Tx_(9LimmVKtWyw!M&SAT3CYrKEibba~_4-t8?F&l)ddNxQx4#o7cOjfwNH#d)y6MJtTA z$>b+b0q}?8B3}Sc6Natk0%~hEE zWEJhAr6Y{+Obha@&dHa(p_nndSsYsH_54<^N`heRi4{(yl(jcLJJD4l-HCmCRK8Ca zO*0B1jO*~_1BA8m();1bKk-vHJKi>j{gsBPt>=^T3a{S}_Sf69A||bfqqjs?|&@0KWpD9y3AY{C`=7@gMYSo~$r9 zX<)J#@C0?!+E0D4+4li<%L|?@S+z8$%PU8`qbk%SzT2DGt=*FLK)Q8v-f3Ro#Y@n+ zsdAlmlFjkHA+LP*kYF1a%eFk0YPxhK3Y%s3`%Y`1Y+Jckf9Px%`F!`_V-2|awAHgY z;@R?`gu7B=G*P^{2X=8SULt4xAi<5OXGpLYyPJ$+O6wG1eK_4^#@rGoA8GKr9T~H= z?g+nNf{UHo9w(na3jTiz4_U7x-;wm_bM3W|PoJGv+%LwVD2W~Hm4b5@qCa!r6WXw? z-^Nz5FeeGl1LlPw@)_fV8I$koIb!d&{6qGbLyuF_7Sl~@Ol~~t8(Vwgp!p|Lw%EO0 zbZGsDJ#oB+(&yT1_+$dLU0K$ybs2@ww5zGOoKN=u4WPEN7|&5SFYVdORgO>OfmBIQ zBbNT?Hn|=p!V#ni^~-EIxl7VBudN3J^1zgnLHxZZ**%#D`-5$< zxUEOymLEIi4&XWHQXUGx^1jbD{Y}Y6+Gar@4DM05${-pi1Zu_V{%p9^=+an~LP@mD!074^0XRfci!4mnXj(W>B zLd@<@dBL_l$blpcfJa2m3Hi=KYxo@c_m2!aXOHo{eV?pm8LUO!LV`WwWOn)?S$X2t zM@0_k-yR%;hMaDnzdn)M&-&DNJ0mDdqj=$tqs5&PZA2*}XW3dZBINAfcOjm(`C1}k zBK@3z4A1CpmpxHX32LVX-}yI~q(S6AE}#;#XMtB))i!DosbUx>5ZSPLtPicewBxvb z)nii?NPs^$^#bb-v=CsqsUW`}3(-jcM~gNsr3-FUq-Ob_B zUFL(E9fy|J5e0JNoG0N_>z$wHevtBq?6JEUZU^FT>zR6u-b^8-efQXq%;*Yf^l}rj zH1+p&wGvxV13r7+Hlv>Fz|r_|V#(&nfn` zx!8txC8U>ingcKyS$32cVk?_xD{$jc#X)QUY=f@d6#;AvkViPKUcc`rlsO6T0L*5* zs8Cy8*@L;I<2-Vfq|Io>r9-pYA$?l_;-WgXJcAx|JEas?K;H2f-M8LcFGRs6OmE+{ ze7o_)&0drtT!k$&^Y9Cv%@orUKpv+%&=$vw24~26y_msBg@Rh2QB2Bbuz9WB9N_ct`~btx?LN&;gJeMPoCCD;FjJM7_Bh;rU9+YeN3W7t)2Y_bF${)GuVH^B715H{a z_D*LIl>azKb7>@iK*fG66+0l?LXhs_a&((b3YgyI)E-2cSh8DnaR=qLR^5o{7ic@d z>>UQs^S=x_R zJ~~g7WUahoTf1Vs11wrKBQJH%=itudp1=a0ZC2a7yq@sQy%~S_Fbr7zgz-9n25@l% z!hrvemS>DeWQjp~mZYFP%q&$%xgoxW%}=rk%eM+b61X)@-MiVunz%KL(MZv(1p|%y zzBJ28boQA%6OSXodN@KH>?CZ%KnpmRg$mgK;NTfh`D<6tf?bQioIicp!V;Jq^4|lA zm3EmLKQxe#Q+qP%qGsemYsAGeat2H@&Cm)7qo&6`RB^4&$D*x;s5)kkUKb~tT)zMtS?Q$|0RFQq&rqxL8U*>tR@YkPj(sMTWlN=rJ z6Tyj#{)~51sRptnD`%%cRlmo*kQ$ZwwQu)}C>pdn(#hj40O$Rh@>WuPuTK^2a90-0 zum~PtiRt{Oi^q4l14FGf^X-3*Z;AIB=i!}6iJReQ+l4*A4u`^EMmN5_E#|S25jzmVF6-Y-@&{l*kfFhJZP+G-xL!t&YrsG_ecG@ z3jLC@^j=^jzd_G8GLKg=`w{Z>p7BxYgWHZP{%CghS02bqTy2F7Yo}Eke}E2iQ^tpm zoL1{X{UnDga3qev%-ASczIrcwPHj9{9dt zP94vbDi3Q3L?oc`TWNREwS@GuG-FZ<8an%t8dCsb(m<#{9A6S9SUtWe#*&xiw#zR8 zD}+66v8v^`IdZ66SJzJv{J~rm~ zh(veR0P?Q#e`RnYtJk3m+if=7r0cChfk>X-HlPInfug`a^eTXaB5DcI4M2eaX}867 zrX1Rm*%E@FTS-2PZ{Gx9pGAq((D;(OHzfrFp(#{6*cuVgHV1#d5Jw~hyCm^+nC2=% zt*pmNr~-_$M{8W$#_jqfw+zzV3A$-ZjBf&w#XYx8e{SrFy&$UE9HM;y@r!0(m@2lo z++u0`bkyHHwesk&&4PQZW}mmQdaFo<^j21(W#*XzUvr3RPtvYLC+^zBVFB+)#sVM! zTRfO-Il*dnQjJz^Xrt@M_=S!s4dfQS930H+cAGTc3q?WIVSscqQK_$Tm?X($#{*!f64hR#)Zh$p>{L z1p&W!6de*q8BZ&AAV@&loNn`FZ{)W!3xL{xTPS$miFY;1LerePq~#Nehh@m)s{1K8 zGrJ}COy?~)03|Djh@mv-lYE|CF4Q#_8YxVV=8iDEpD3k}fvw)0^!ix~;)B~>M^6yJ$ zS$4SP8=ur945l7+9ent4g;_IZ!&ZPdQng?>3ls_Ecr2q1Q& z>Y@hQkcV$3gco6H?LzUQMQn`F%hz*nyk~!a_=c537cr0vA+j`!P zsq$oPM$Dw%Ah3vpE&pr^P}JS^hqO135FRyoS}{a&7a3xTJC-HD)`JJ~0nZ?dH=P6s zl2UelOWwcWd2xW62e#A_sU{dkxtSSZIDM9~nw`3|nGNfpiw}1JIszGr!d@;n10I!8 zd0VeX63Y)%HAkRX*Dq!$NO>S3VidqF6{z=FAPOI`TQpz#nJL=TFNY3aLl{OqDB4?>mGt_vAz5<(Q6b_4ONnUMo01`?}nYLf4u< zZdnsi+8N*deP4kTux15^Hr@nY=oElvnf`AleYq|t+ZAo4UvdMZuu)eO*iA1X7y+WL z1HDsKi(nS)&>!j< zqyVbZo0|yp_1}A%+YcXDM2%MNcu)xHXX1)8Nt@A?<#DMkv3i}^CT<+P-Cu$a7w4># zQhTM;bqL_1CLcm|e)s)PNI?^V`W!HWK=4KbY({}lEavMt;E%=pW1Pd=4NX46bG*>e zIt0XslZf6O6vWHn0SWCa0wI}DqvnE+sRIGpygj^Ea5Gq^LrAulfPO07e=uE}P~a_V zBVQdh`mSU^PH|Lu=At@21n@;-5s`&>t5#L)HF8tpljOMI+H_~$W>+46XAZ;K4PPUL zEafF-7n8}4py*8K%s+ZbO=u_{n&ED2D@}wjSd8L=szDDHY0Jg!KW_pKa+s^!VJY+F zNc2rHaHa|%-2_>PF|NZfi^p{0F>?!dIg)b8R``3pn~(m54?qBF*4&-;jFXRZt$7fY zwS|wPgL{i`Ab6HrKK0#zZ&fKREM7(g_iAA-E;tZe4W{bT0dNQ1tZozYwvm}zglEL6 z_*_G{R^u*?5a%4mXbKi+R75>1SspFZ*{_8EegFka@iSRFpMp$7AxL5wRS0;daD(j#GUHJMF>(L zIxa$qqfP;?NIkU!EF{Bhf`>s4LKYHB(R6sp>M2z3n?UE?W9pb{)1~h_24rMVOYdo0 z+fuwfYu&S0aE2N*lF?6+F#Swmt&CqQfFKp=k$^TR!vS)geKmS}GeI_1TQM8VMIwH` z1EW-{yw%35t>Ib7`gz|%vUpI-FrJihAc;lTHx4eu(*0HOSsE^3)JH-X1<7jo+f>ch!8V(E!4{q+TJFy0&(+O?B{?c>&icFw$iuy=J zVY2|5zI8e>yJw&9rb)zlCV2P9Dp?w+yaXLvP%1>|wnF@BPRvdbZ}$&9^I^Oj>baRq z$gq>*I{;rL`3i?@nOVDcOKy&eTEmG)l<-L<$tMl?5YE#9FiWl$uz204xuk!+^z-Aa~angSpPdE9eoU)ixKJ8;KQ zi_^R5mhywJ8${rM^K48*YzqPLe|a~ z4ytwLWaa}Z%10qyP!0G>NIpR8Veg|kPc57Ui@Lw+MG3c#o`u)PBOe=tOB*b-*t~OQ zemfl(imYG{5j&=i;N7+yxJh~b06HP3oYGbwrTA8|RJl2PpMAd^V0wHGDnA%jJ0YI%S zV>K7NU%N@KyuPJ1hIz%}>G_U_A9Pq|L<1>k`}+`>yZGs?VrqxwEWs%qgyL4N5hs(^ebx5>Q|c=6;NI?(*U_VL6Qkt-yKg-x>dQf)TCZ51ZI7Kd z$^^nERs~5a-B^UW*3F5_j1d|6s*IqAR7aDCpwu*=O$6SK$XUD?zqsb|7I16J0BC>!w}0t1=p4T@l&~{POaFoZ2ADp% z2no&2tLc_mYiIN z!VCehgh{KEY@f-Y49IlsrKh)aoH3Mh$!h9%jZ!y31&~#whe~UR#kt0zR!aaxh8tAV zt^*zv8NNhCw8OyS@(m`Ljk(y-JA2|xm7VP-^cQ1xmP2+LQz*jfQtj$;v&_uP?8RBp zjhoC#T2MI{g+LC)uZ?=LuJAzZ_9bUP6V}Cmb|`mvhh6)QMML@nTIBDfSC4jumqI->#0zd%7Os@{rL*OyFeEe810nq&%=Q3SW4~WY)>Ke zm5lQ7*R3YMM$@^;M>WyB#ELkUavuwxL-W`M^A4K!tdqM6U)!Mj!051x)I%I zg+j9@bE!($_m8oIjNnXW#BT)GU04RINC^O7%>$l3V3K7xPJzFtnrP1QGsk+Dn(sKi z3HOAHxS%=w{l>2;*YUin*Xy>n^B`B{U7|vnb}9MGL&?qE0m{B(ddia?RyCHaZDwfL zr2&HheZ`Ufc${!?%G41mCtm$sF)QJ?$&lhy>MmP9&_Y?$u616ifF*ZKt5O*x!OqIW z8w_?OLk>41+V9_emO}|}K{5eiPP;|>?d7ln2gl+cMfZG*EK_-%61E-%;ZJ&3NFuodn2vFySrM*sX8Tw(1h*9+Z9k`4_zY^6ybA7rHGmzmyz7pb)0v=bPRm$SYHxB z+$(rZsmh5~wSHO*Seof%j2y~TLXt`b@Q8Fm{_fdOy;U3%s>CH|-hnd#VsFBEM5|5t zbo#}z^DZ)2v*z|LHFU#8$34h|GDbOE@Klhtz!04BlT%ji}t z&;ads6oCy--?@*P+lT2MQdi_!_B7BPkho>EB^(94r7!1H;3@^%uWZJ> z?v8h5{rxjONos>z`pdJBb2<@bh`TIx#RRnSzTBuDPNvy?LQ`x2k9-PH^Cv?C?CKxj_ z4%h$}zlSgh5qSR(lv?$kf80`Ln0rq9&l>7jxyD>pm2(nES-gD@2pM1fz4Rg&bBAFw zzI@ns&J`-OyUJ&mkugd3%wy*7Z2EJ1jR^dF*5dQ5M5^Yx;JZWH<8&_;g~-hYV4Nebn|(`7AJz9bHUYk-k7NT^ddgW zjg8*tE@GDDRi07qJ+ae)mDBd+d>@YJf8G9xgct5KVCUY}+qmTH!gg~{%H-15>qcnF zec3+0mz)p2kTH6s{`dKT7sy#nvtxO%0+jUSYcA=4Rv~*%&t}fC#Q7-3mmd?f7g<^) zHO^hfOiLXJ{y@;1of~(R*-}E8ydSs?m34Kc?svz`Etnrx!u!o~zp;4VR>tTWF9154 zSmo){-~}2tr%T_}oPE!a_+aUT?|$aGevr`eREps_tp1>LmI-%obd!xja5OzvtJ`8B z>KQu!O$}O8h)?Ap%s@)S;GTLb@E!_pJW;||N!W&4&NvqSX-<+B8ZntAhY8~6I%1^C zyzRI|nld(n1UpGf?U^KnJ%c%h;VfMANg}6C6pQo;Kf^9^yH%1mQ zSz6S-WI9VT?~aSLsB?xFNhIPX&EUdYdunQVU=O2snb+jsYBRtky zMfDVTE-JcQ7F6MS9QfclY>Bp)yXDrq*%J9!w}8u52^O8dT*iBBaNQtP#%1!oZrks< zbi5k)k7wVIzKX2s7I{it4Ch$#S=B3YeehuX-pbAL|0C+$<68Xx|9@TA&WF~vR;}|^ ztJXo*`AFM3ScIj65Y~w#Bq81o*R~F;92S)jRzeXbMRM9!62g##uo7|}LWq6$`Tg_z zzrS|t_Ih2f=ksyDKU%Uye%?JfdBoWbks4UcB--(dvWK3nl+v2%oiYg>o57i3r&(^1 zSr9zrfac$D*&mIk2VIY3KL91jgZgVVk<@}cx{?4H*pV^s&hAE9ww`;{x+i@X)=}{H zO>A|->$wc<5>g#wXt!gf)&Cmdi)x~7ju=uXU@?C5KL!?3EKrciMq2f%KLf}V zKR0K_UBWo>ipw;!c*V})?>60#`7M1~R2{sF=RVXg8jdYrAalBZ%O<8zmzC}zm37b#eA%3zzBv^V3ogI9gCTG{BD^^X<3HTtNu70Fap6&7L@fQaMZPtscGOpCYnKoY?XSvOS>@2xVCrHzUQW+- zZrnK-g}5|u%iV=5jtTBvCF(Q|jgrr}WE{46rA-3HA8pUc;%>n7Mk5f~vTe6D2%-wn z*pli-N|Bh=wj)tj`pA?ZwP_w*{BMb?+|j78An|S!LX0 zHZE(tLf|j4JgdADKA(Y)Lu%Z{;*+lK6K-2lIJ`6=GTO{I9`>gz#hKYretGvKg0*w3 zp5S>a>b(ia$nU6o1lCs5bS0DMT;y^V79YB#f-Ecdk8;AIf1f3L6e;FUlHieEZM~Wa zJulO`#w&iWvuUkrEy3`X`?4orvI5r-L#I3WUQPfgTF^Lob$Qw3Kf%!qZx}jtwiJOb4!XK9LuA^RbdM2oLd+A@BkKSJ zHS=D22sdR)jpSnPFR}$zj2im_pxs3vW|N$WO?HEBHi&KdjNxb9ETc`a^nEhR$*C)r z5s>P3a4!b28jc{`L4uYn@uFb-HP3yj`U^o-E6n2FOxwaed?7N`$>JWD0g1u-E(XrK zTtF#Pk}-6UEVf>@c$OowqebUn-^fK+8_6lvZl?LT%9wr;V+VCcZ(Wnw+|}j>(_pXk zMu}m{k^85E^b*SxoNZE$s&leNTu^EyCHywW3vWy2V?4^U98~*9h+iEBznNzT(PWd+ z(7g0B4=Y4L*5wU4VpStlFuZXt84D6!w!`SJ9gh%NQ>8;AjKlvo5K)^CmQRXKf9n`g zE%@QK|D@;Sl+@exrx!ps(#Gr5KT`aNjdU z9AY$P*N9#t_a{fKylHd5LN!E<%)Mz$N1{SD;xN=1Bj{{l(KKf_T%5}4fW1L0bte{u zPAbSGWG^}7LJ*+h1e(_YdIX;iDptQT!lrs(qtOM)R@|NP{;?%?)OW_;6q)z-y?eJz z*KJ@pg1Fx?Mn(OyERwrKmpbc}!HG@#z{Y;>_1UIiOwjust5W_22SyG&RU zPT^<_i3`^ktsoUdY)!h#W)yq}k9c-_HXgW`t4p^AWi+$M zGi9#JMBr?Br=jc|yc)$!#i zzT3ErS4n82d(wcaq@db4qnQ6ZP^!nsTU3;>D>K;0!u5cIXQi_QMKR>7H=e={g`S`J z`;i`!EveA0VblyJ5O3^tZ7ec?xo$)u-tz;}L;%nP#j;S;XnA3_Fo+NfEazbIMQ8vE z#3(Qul_kzdc&Qvyz`!^##i75dUTV$5%b+M@&Tm-VB&zn7GaXam6rf5NWE(S3vPFwY zKMcE!6wTDb>`D!(tTRDS==YL8xvT1hQ-^nDf zYDV#@8SqkUWI6z#Ib9Kz#>gSCB&%x`10XR#4}H~+v*7G)o?n@TVI0z2#_PdZ~@Xz0Ee{fEQq8ue*=tN<`c5YAlaG8 zyjDXzj3P{6u}W!-7Brm>u=GW9x!{lhX#FGoHUqF1q0@E7T9w*4L70W~s&nbZD|C{r zY-`J&P|3KMjir5Rmj>qAtQ%3^Jd10{@b5fx<=I7#O;j1N2cG{DZW`p9Fxnp7oGxQu zo=Q0T$V@g|eyQ>v(3C&D#O#(5d3mcM;&uGg_ck)3VyZRIZ;tn6F&DOPht_-F{Bq** z+2)%>L1q6ROjE)YaXKKGfA);6>}srQV~SPFKJ(Sg*oMfd4ynC8>DY#hTaod#Jew;` zUA?cKUJ+^hF-p*n+_a8}BMm^|1rkh;!pQK3YsIK`S-yu)Y%1)}MK@7x4W>#!4RzKe z!|)(foGi8!i8mZ~ap*LT76v&*sUpi8Qu)N!E|sy;IyqvA4EeteCKt1YQDUd6m=6-rtHr+TLSK02 zk9^tB!r3%|8U6$EPap6He-h^`URhdiAZk^P!mdy)a-r5TODo!cX)CPt60|fmY6%}v z@e04*MoRrRAvqIGagIw2y0>aT{LE>GHvpXpLKvcg5Qw^a#XSmFz0{WL_wU4QACsL2 zM{c`}-!8jwVyG41&}1)ruQpMz=Na0aDjAzYdOIkN4=S>g?S3f3UObCEqDRFKOfmAd ziv3D6J+$5p>oZ>BX+ljkp^}(0?y_XXBbRyL4Bqmv=1q;|$4zgrrl=10 zixQ`l2zH|cwCg!$ZjDJ%Utq_eKzmj@{Xfd5Aa3|O_a7-elrkBjw#BRO!NZrplQBf{ znX9(&%((yhpSgEjNpZT_fiF9QbE2CV8W`dq*3#3z)w4HEs*k6CVi3FsuuF>qNs8Hj zQUE)6c4YfZ6BBB;tS)8Z;+AEFvdn{9$q}EzGO_Qd#J7NX{Tc9=O17};+!`bq z{fneVz*pPNc;>Q|Kv4b@Y5F(@am6*p6WTeaPAeJwW|HLcVE%5l#7nqH`Sv)MU*>!Q zI{DCns6`m*$_2ljJai!MMo|tIT`VhFOfSM=ZR~Z2FM2>8?ILV330Wgy)P!9`cxAcK-a_GX_cm{;eB766K@~Wo7gyR*)L;Hxd5NP^AS3H0FNp_te^1dCZ}ND zmf_VQ_*ASR^rcZv0At4~pK4%?h0ODBi?vmHu(-EGDW1%k+8dN+oPK7`1ixlcEC*`+ zr-QR>GwMf89kalQDQW)gP5(v#vPet>MB-eq*@%9VFH}HUf~u9KgMRgGbDD~zpuK<0 zJhb-Zb}zUz)TO4Jd&s+>Qbw2f38YLB+_J4GbG*oj4PuQ;2SDnqBYTl-q`aE{;+AAm z?xJkPaUC%vV zaPY;je#)_1x3`?dl6qb(Tyl#z{wh5P+T`^*9W8GEc=G3V$hF(~9DUX()Oof-8m~9z zjb1sakSN8@kYC4t%f&AemsbBeZXE|R=@P@>61u2xw?()`yO=mWtG58&Te>g>5)ww~ z&;Md5LSQOaa<+>|R6$-@wS`cl_2X7v3;Wb4{qZI;JPZ(qWE<+?^^cbr3F*L3Fm8N= zrtX*=Uw)^kEF*?Sg@@EBiN!+6qu<*QSZJs2tm+4B$|G2p!9-)+w1@165&=)1cVv;a1np+fGP=(%v%GvGq zZwKt8DoR$N{5ddD$aGs_jHo^xcP z8xF_Hzs{}!P_Q^Xxj0jsht=gx#(WDmYIzFK?rh$_B*34H_9w?4x{u{C!M2c*lEx;R z_9L|GS8ds5rY*0ZZX=bCi+`V!IrSr=a~C4X$UIRoLlN}jZ-SE4`8Xl_9m-x zJXR!*OqXaKBAu?PZeDYF zO1|@Q$z;D`2ds>`$8bK%Z-?A9&!4D)~gN!)4JEW>B@(q}POP7stp+?Iu|X8QzsWLG~B zT99SCMMi8F+bB#mdG9#z&@Wib$+{yJii?dhp90ALHwLLk&MvUP8Zr|md;jy<{y6vf z#9w4IAU1@XG~-33`SbSdzM+^@qj9B2la+;5;SdT2=-i@YM$vAx5ZwIGTHw$F*Ty#% zXBQNu`aO<6BYoI9adAGBeg#av0ms$oCmS$ig_i|`8nh6m3@}`^fGHXHxTk&eX&DZX zrQfRl>!TZT&=le+A-UT0*gf8EoJirfx5L|U_U@ZTW#p*i^V{Z>>J+>kwvh{bY=ijk z%$hh9N88dO_v(EJH_!YDpuV%%k$ka1%V9h|yR?^_%f9#aZ3D{IV$R9z@9zE0^V^EK z*w^oOk^IuHY1*#yFc#IMd3aw?%{Q?<7}OLh=>pQ9Hhb^ySj#LyD5~wA#!I^T4JNGP z`7td+ha^tbQ{VDN#cwbKgC9%jbbpqFYd z7sRHx=P``Z@-PJ%N%w4Jl?bD!E#})3YlP4(w@Psg?q7uSN`rNz++pR_iVM7z8O8D= z{~^z{JJu$w*3K_q^Y7d1!g&?TtajpWw+fN{3(fghH@y2JOBVKBiiowzo0o5u!F`3; zd0+#1FNHC>6rI*xMaIl@);sK5A5yBV+3g}*(sW`a%-iy`NV~MQZIL-ICL!Bha>}X@ za7naUv_XiT>zI(kpH-}MO(awf3_~j?4ri_r+cCBFm|U%K)8D7otTSyFM$z1ots~51 zYW}=3S?j5OwIsFA7|@%$RvR;^f+gTn6Z_z!XhvV$w5?f3$x-Ixbxp=xD%;bJK4T!{ zOs(JL20M)T5FfwX>ICm*wmj*T8b7&NyA8bXSDh>1bGet%UBJw`r zNeBxTn?%g?vZ5(*)T)2q61!UGbXrMZxdz9WMhg%+Ihp*EyFtvjxm%6Zc%Ls97?#rZ&`PtcLQS*UuR1Q;riUefk~v` z&YyE!52A9^YxCqPsJ5ki{s0J`dw|Ed0MZ56bW<~i8p%}_IxB&AFAks5TV-R(0)l*Ou4pcO%C86`hfl(Gb6p(mh|l!Z20*Bu^>q?H07%56RhavIQBSa+SZH7*#O zlV2_t3NW5@1@PzV{1zWwV4*SEushZo&+`}0Tv7z!7+n6Ms{I*JA}C>_IhrAIOE`DD z((yrk`SG7e412ZH5JnaQ{OY$mCG8r5#f{~=XhHR_uhW;MC7lRT!kNEOQ+Ps2S%47s z=oKZbFM~l^p?sSa?0!1Z9B{i(MSc7U+*6xr5h%Lpd(y00dUh8-NPnv!$>-pe-m={! zC3&;Ek>Py08!`Wye9F8x(uH#Bn(2Eaq3sMse_A2_T>8l=jqXfi>b7}@uG;jS8`@ib zADsp}6bkc3wfa@ zj)M-XzwNYc1nSIulg;hpP$)aD2~=8yz0y#;*fyPJmi>r1YOdi3c2MxT9Z7i)q>Yaa zqO#>5`6lk>VovibG_~P9GwJtEXX3UU{?cV@@(M4QGh_kMBMrn3MzN#ft&j9o6Q8aQ zik?95wy99F?))~59$+=LpRu`ZpMJiAbSgi*0KuYGgNO_X=azOBGI}+!yQyyf^QMT* zKr$Gu(ByJtixanW)_BF5%)CU2c+vXfK*Z<}xcJYk1vI7jwMp|b8Pao&y-2dF^puCf ziGlvnU*v9d2EW)W=I$*doT{%!630sn!Y_3C0Lx-q4IFl|x)AQr{Z~G7)k*CL6vB4I zv#`DP$gc#tKFc&^J1W{W7ja=|J(Ml4b&iGmTlcLZUg7N)c54wA`co$vQspbrWBLOe zTVUpliy-1(*|U==#bSBh2ZB4Sz=UNGKmM6{Bi5z8Xq)83Ha5uj5ff4dC*R13i=YQ` z!o0i81K*o=uy=xeyV^uoBzI~Q&&551iFwnHT943}c4QuX zCG0lyl@&YY7O;;Q`cl=OQ0*UOu`fd?y;Rk7l-_1kzw1qZ1_4N(c_rkdDCUez^A>#c z!%h7-3uBbbMs++uu52Qsl-3DJPaebu9j~H(#3jKYM{2r9vN^#q)zbd5s%;O!)I9cO zeeX?hyp$Zdl8g8lD?jBZJ^>TZrS$1+C zDk)dIZ0Q0_X^;A7fKK8d|54_tzlF};2;P1@x?^)1UyXTB=f;$!rs*SvPO zep8U-B?OV$H?JDnZgxK^lGAf1p65!AJC1THK91j=R6*(SVNcur{U4OhPz@4XKD|HQ zlZk1Wfud23!|%ujf|mkIK>s+2l>?wj!JlHHM+YGbcy&rw)OkF_3pNkw$q3m!69!l7 zuDKVek!bzp&tb*bs?#O4$GAh_g3kv(znuPGaZ2~NS+3yob;iG<${jxw>7CO~JN(0J z3!jzMB1yP??djo+ml7Mg_P{@I7t8Eva0Thy-EhpQ}^p*7Bu_8+tmOpMOg= z(RJd|LKK~Qx~Z2CghRH%Y`uit3M0p!B^CgE^x5&TeAieAuT0^~Rln(Xds+d^Mn&2n z19t9F)9%6pqA$76*A&>>HQY(p8}{;R$$OvO2#)WxQtp% z7jQVL4%=W=WeZSRt@#XqkTn#}QQ1YK&>s8z?8lop%L$U#iEv%S` z&iX#Y9PYNW9$FKmBFaH%47YD&PI(Rta^Z6*w2P#yV_{S&yQ^8Nh;MqprvZpf=iF4~4(GVktDW$=Z9Csl!`Fd3F=k ziN-eZe2E)iFj@Kmo=lcnwNA_3pt9$c+RaP}AhCGp z&(TQO-st`sReR4WckAO%u9ZLv6)>&|G;)kclaev|hP`v;MGAxkE4G{U=doz???4*6 zI-Om-WlAxcKFf0xv_6>?ZLjHJL<+Wb;R*o2NRbvq_%{f0ADfKV?tyz65*KBjxdA&0 zkk9&Ha~APLL8c}QzCKpHAoeC@({)Pz%LZqzO<|!Ok&7V%4hd5K0>1Hoq&HG*J_bi< zo)ZRWNu<|_Au1a=*RN&z3HFksxiNOB^@XCSGxxNI(_d1LNKL!(jt^4dV2~UuIxGD z>WpM(;wJqQC8-|Fxc^#oWzR*sp;fg!dv;wKoku%^$I*D}LNH`!%~2y2%IWlw1IT<8 zkOldEkPu}D7HA}Ho0u!LLZY`LoWMn48`j)+L6CV2mD+atQp%Xvk;a=Vu=*0odmaP} zW$J{#sHLso6Cxsu3_Deh1QtM$u?(`HGf*yd=UgL=X*lEv$HMOL1obO(a3y3jEx&Nv zhht0ARR5D1sCcgbqD-OxwQ^JWw+oJtn(9b}>$(fyE!w!n&>0}_^dJJ@gm~AMPA?;% zI|~0GB3A3r=`_;?^RGpZMJC>4r&d35?i+RPt>4j2WDJUlMK0-G4>cdQFAkW7so_tq z;U8kDyb7e=HA^u@PPhQ!tA`P}(Z)C|)$=;KPgUS-zWrhJ62D_L7AypjxA&YX`dukP z!82uWkNu)n`dQ${mLzT~BgNi2W5hdijZQ=WG8RJWolblL@L9Nr1@I(eZN16khBRkH zD}YukTayD=`z5e{Jw3ByH(!q}8}9MFb2G2!s7K48&1gdG+M=8v?~>T%d`9%SD^}LE zrD-jTlM1IdGLRdM7-tr4W5Jw?=2D*}NB86!Xv^GP6GiDKIRJ8WIlpy5KH8%F8ViZ! zf=KScQID(Z>8vaxD7$P#@<)9Y?LKgmEtJgs8p{y3i})730Urq7RQdr z5qAr&lQ6YZ2k$5S-k~E4YA!<-2tQt6enjvHAIP1y zH&5d%8~V#t2wnGGtt5%pDiEOjjUeG+P6 z5HGOqnCm8KU=Re>a(77@0oiFQg;Dy@3CLX50N`reLc7=e0KW(`<&q;;RuF2JB<91U z02oyuik-?e^Xm*1MwkW7!S?d~7zneV`}^nZrxghIcJ+RrQ)Frd;JKMtBZRMo0nvNl zgHd#+N|31lEnq_g5?m^YCL`~Q0ffi{2b>uEhe9G9AzRgX5(~*tS?9ut&&$pF?DAFD zzSHN1x|W?+0p)bA9faIlhAzW`~JyoR}-5b7SQ`6^SX|Uz& z`IeuRNkM?s_??--z)1CRANMZf5ghJVXgr63O;`ZyT0Q#3r+>9J;qYy;3U6wSK*H)L zH!oMsDnFIxc(>m1(aJXuxlBMD^e&n@QNAY2Xt36Z$ud{E)QJJq5nj8AGH~x}jat+v)%-xc0fzkDvjegdt^wx|{&qj)>iA$YO(J#hh3;ABn zVk<)g*vj|ylOP*cUwzwclXHYvap0#d#VN1Yu4f1GU&Jo=Wj18h?hZtl${=+IU`&H5 zuw5ETMgU#My(=5M8SwZONuUvcuH?R)vS{RnlcT3!_c9>R><&&C5!k%qX~?S0Sj#V> znU9}L$0E5N8Ajg#f;15URPuuxBZ76}Ar~}SuL|5LCL$||GV$lsmd#VSj+>s5a$(?- z#%Q?+4w3*^*j3dT(j%R^)QEH=LRzK%AAB*KBk`|~03S2~1I|>kY8GP*OnA$8lH~Oc zyk8gbySxUb~N0^PQ@M@F>RYtf4<<9@xZ4(BC1oS^o;1TZ5 zhr-k!^1Y4xzpwu7ELXr}&^NfiGt)=kOLo4bXXA^Mas~hzUN>c z`yyi6?snBGJ2cm<8MK^jjnHwO*lX6v_cg73(the@bD{&URxxP(De6+VF7v)I)I z8jl9JnrKv%XiRJJGC!&;8cmXNxi$l!Lp{df65nd@Osz;oCaOPWpD1I%ltHzFy+>z) z#;TbhIqqkYm&C$f98M>v6)f{X1jB4V)-bs_B9zk!$zdQ%65QGu$l#$_KLT5& z!B~x~7WS5R1~&448O1L7UcM}Da|jfy=nVMahfx5Iu^LvN?Vr8hK4bwK7qNqrBkCn5 zEgE>%$stGMV|!~2Jm*ODFmt78t=O?v%r7I%G@F}lvWHGw*Mgkp)7;@E=TLKuTt31V z;Npqgo_&bm2Ch*IWRivA5^HB_IqNMDn@slQa6C$KQf)7`- zaxOabwex9xx*H_C@rbwt1$(}AAgVCI+zn0tS!aQ1$@v%04kISu%N}=~Yru_VZa@tH^o4|k8IRA?uKAx%Z{1~;5E>Gsu|EX(R*rc1 z{qf@X`^t=vQ^$ji5%mGr&aDr<5L2+U=MGB%V}Rc!`z{VlLaLAa>5zW8=Ni5BS?Fe0 zSp>&WnYK|?y$8Rq4>oCC330`4Lf(=k@ZQ6}0!rb1ORYAx2U~jLHY&jb)0RUGs=doq zTRq`|D|{k3MDdwVpA~3 zGZ`r5N@*;5Lc2UQqQsOLT^U3fMq}pw3(l1RJ?7h?z`{XMZbna$vq`p2f4Y-Tnq*SU z)vBdx67JstC5|bcC1(D+jda($%-C=1qnf}}!ssGqF6r-^O6h|`1}b~uO~4@OGeJ(9 zLkq3WdE7Er5;O>_ZqkrR4sym9U_@%-7W+=Su23*Gw|9{s$$u6WM5fA`LM-k+u)KQxsux!+ zzXFlhr2?zO<9*8i0;gLtHkap@^3$Zn$Q2<+B*Ur@TJmMby78Yd+Bfem{y&DktTu2O zVis2S^5fGJVBoSar|Z2@kC3O&ZFp@8g)meVE8f|tq{wxmZku$0{&Qu9Oze09d645= zW~xX#vqr0G3gRkK2j*K2%nQyzv2Xfy2cv~ig*rjdKyHouvf8n#@^yj~lQr0c3C zJ>7r;Nb3f=ZSrKGst`OF^T5X14-oD7(Q_{nfL@ED@6AW+0F-O|>M}U~V9e{i0cb3+ zv!JikwFU^#a|QP0?`L$!#~sN!?M2&g7=z&(1E$^^Td^|6MPXeJy=ydW+uXnczbaSD zQ7$Yv{virOMdn8Kt_`zdfUNeMlD)(r0c@3jzrj%qCd|8Tn+0OUXylDAQFp;}{!91M zW&yBy-j!e7+V`|fw8bsI+!iyle@xZxr8Gkk1kQZ%cI<&Xzrml?F=u=7a7n-@uYx`O znW~6g&+uWHmI>}$D?7nXYxorMHnIfiS0E~h&ps2OByakK=40`FT{g?x+gCkVdg3rp=$DjtpvgcFYj?K40)yQ#}KA-Yakd+;qu_r-z^OV|wPZz&G(QSXlr7r8f^!3LAM$XyGo}A8qH$*TI%QYH)8&K{~LHj@% z0;H7$>5$fejbD&Rj%;kb9M-K?BYgm%@D778eu$4|oRp1!_NSDpkS>f0 zAU2oHtkJ#qoO|Kx3L%5Wl|`P?B9LQu5LpG%@yPp9hk~5B+(ur^r>|0b;dNF3Ai1u* zUo2ojD-ELi76*mUK;*FbR<25y4@4dcx=GqHz(d>b65HjZ65IerM3_oqKB(Jhx-5!g zt%i>v6|@J~ZZty)PK#TOAi$n^9CmEs_=1N<=yCf%tB_UmB&}bT9I;O--orj#12FEff~^p*o`;$e%+qg}v`*Cn$Z`C*6wqsZWlNjzW-cnM#z@|M|cZL46ClHsVtQW+{` zHN&i3Ocr(&;tIdHfmpQ9LvaZtzh{4^D;ls}doN~GQ8G|TN3%J|Sp~a6&qSkIu%27O zPf(-Q{+ULh@i10lvFL^52Cg_r#S<;+dlIqM~LmYw^29J^| zk#=-HzUZw$MP~8%eZ#PoHZ>5v8piitG#(Iowdbgc|h`xC1@Gh9RzwLAQSC2cC_eHD?GbZWyj#mz^ z8`wmw^WJVJd09LF+kuqx($0BxrS#BBiN`@9$}IQI28@5f|c&0gJW- zIu87(C>Be70+vJ2NwQhsOe}XU@qS@oH)}yCws&V~?|w2Zu{Hb)@ZTHTy(l_}(VLVK zMzt7I1^^Da@o8IfBQabNc9|BUP=%u;+YWTuKa6R;5P2eqfr=6EiFlK%4vgPUtqpb% z4UjnZrQ)n|fjX;}h1oJEI$F*3s1$G8YM|*J65;?z2;7>L^Fy}!_4a64Zt0A!x<~YZ zLXXIM5@e7OKGpKAi-8wgBblaEqloARMFN*RY!a`BNcZI{C#4MG=d>H!!9c7}EDyg* z7Rda>DB2p!G}WV#?Qe5eg~X=fbGtN@cXGXxXo%??QWC-vQ^GQwtRL4DMKmZ11Be8R zbwY{xwvYSWkPLgcSQVV;rKMF_Q1*@ zy3wCd5aIAOw}dr;z$WQ7*x%8cIssx**i|W|=6TVvogj9=Q)5D1RAS?KnaL}7+vz+c zZH+uUY`I=Qegc#ybsfB7L!ERw`oLXYRYsR!DY za@lzwxydf|$jz5S=iybz%kk{cx+3`v=o3ey%VuQnCMb9yj!_ zVmcnaj@APR=>IE@yn$%o70?3!SOZ|d*$R{jwG?aSp3t6(P#2rpkqU$2>bYf>lm2zK z$Gz0-WJHwN#rYkIZT7Nc2cLwfM+CLg@F!Nl57K(YAN3C!d~2JM@fxMazg* z(a*JK%I8jgao+dqrz*<8>1|s#yuZVph+ZuU*|D9A_BpJ#ajG&)U$SY#nb+62V=Iei zbmZT~MEy?acv%#Ch+pNHhvdOy}b1u0xIg^Ug-QvAXpaO@KTgujW`$M>hG(#k z${b7m+iKz>In&uMm)T!pN)dmL0F)9-kq+EQZ`B=^*=Q;?TM>54Si4Nz9#`zPaeJ%X z7_z967HcdI$gHNV4wmnMGJ{{%uvX~A=4FvXa!lN|ib5_uLCZzqvvTDY%d&>x15O(- zUG&7!ag`~IpWbLL`N4>`bkBjs^$XjzLX-089pI6LU7WY|K7M|C=>C4R2unr42-H-! zGWR%r%HT1mX-d0ckHkEELTA6Xy~VH3rmW`;mzbV^4~4T&(W=f^M#>?cZL7TdY$Q^D zSP*nBxR@|9ulysTzgzy1p5CMXNUzHyc$q$*_eXlT-{PK-qKjVbP?sJ#w8-?!uDKCc z^1cvqE|0u&*YilpU$7k}sMIJ^(lQYbVPUIf@`%KWr2xv$eAjya{EDufdp4#hh)J71 zEW3f~7DdtKcPR62B`R~WdvBexJVc0lKG<+)Y+l{6yW#)I3(XIF_2Znvj_FX)x|L)e z(k`29ESzN^c_4^Xsi&Lju)81Gi7y+|=_!Ta<4Ffhcu!_`Mjnh>wV3uZdSS$f-GIr^ zWpKx|pN1)9C`qm!3#Sk7m5p9 zJ0-wJS{|`K(!f8W>R5m3YNX`I-+9L!?riyanMZ_2yf?h5PS$8zkAC0NMdu0l zjV-1Ah*DtOs#T2dV~1?*dGwM|H6Lj|XjI3)2wZtw8Fh@2bKEV#8{PT-!YYr=J)x1B zFE2c9814$7gzPDb#9Fpa==_P`P>9xG-t~|AQp1TPVLt{nvzWy>(FteeqoEadzr0><`r*WU--Ml7nq4v~-DA)W;Q2f3KwgI{7( zh>^gW0<`bJduUJrA8Ld75P5_A?Do^788R*)uOqF^mqONvQfLJmZOOQXCpYujx^mH% zr|Jqu-tCK(&IuB3qNy0Qo}Cb zh$fs$hDZtq#;?7Ka^v?-5)2^MX#jM;viR}A_463c0*T>F+sPG$2=~!Ux4o?g_0cyp z;xO#iUxZ4xltw=rAxtaNR$hF3a%H^Z&Pg*{dcToG#$C`VXptvSn4`M}2%otaykRRR zuNqu#?o>-<8(B1IIg^vu4+#UXqHQ;fOK+E@!LLqzF=56}ovwndVljxvY91(|{ZpqN z3o<$Xt~Zrh-FTcut20bz8S@tP7k4?-?g5r4(Y|bk1ZlLLoHjlxj{h=^CN?0BF^ZkC zCrp?0q%)9Oq<2`{Z6vqOtW*FZ$KGPX3t$8)iyt&#{FW}AEC4o-j@^~MD(9sY;>NV8asL?1~7Xr6n`&aP535;!!!k zqBQa&MAt&ZX0b<-$D$bMAk(x!S%1AkYYb?}HR4JxqhF8q4&lJ!K`8;Lg}pDunYc3; z-~o|4je12tOXmxyo&sQ((xvCO^yLve z-=inXe?>1!JZ+N8c+)gmi2m^BTg(TbcgnoGR`zu+b!BXbqw4w@c|$sD1q@Cg+I8Ph(%0Wj z=Q&BzndIOkvL=%0T_Yms)A(qqqjCm^4qT)GfDsurgJvud8TCc+XwaDh%FcphIK?Iv z%AB^uAcEq@{SX!4l-D9tZZ1+RnJNY{IQb0~7z7hE%6X2?B@-FO_7GDVV|o;0lfw{* z&|@ybNSxMqL1KCpID`(|@|sX)7yw6x2p0jwlR~hUONwUXLke8C9)Z|lqTI)qUXm4@VGF8jGn;_vk-xHRPZbsT5fy< zMvz||cG%3OF!hKTtrUMo)VV$6+?usV#KvC-dAA;gP!ldG@vbV6u0R!wu#d#$=(~!gzp9|uI?{U>iPUDj(3_M;16^9ud&YdD{pC+I$$J$08YVqdK#Gy6Q`$?kW&SE@D(i`Y1#rbzr}u0^$O_`ifqoWm2(9FHb+HB)!&|Jg=YHP!Ij& zRhVz6fWDiY<^l*E!Qp}lf(x+b5t`)S`GKT&O7xQiGSiQrnhV%7T-OYP-PjG>c{5!K z!TMjOBfh~gsufdoz#fbjSL;7M%>U0RUULo1RiNg&k;O{CJYB?q?ZiFaclgckAB0%-*xcskN|Ee64W91S|ca}L&!3+2V3npyxS z24=Pb_?C$76%oT*0G5jQRE4^mkdPn;nE-f!K{^5~M|*=DA!eM^FCo@nO(1r8)>E!!69%(y&R&+HAIg~*Z?zM#r@2*?4ni=4r1`$R@BMsuPcR^|i zf{|fRu8izo$Eg8rxW(m)q`G~COzH7 z$P7p1k*_({(Z8B{D>fT#^GAN0TIPb$k>oQW6nh3@e&caL3nj9yvOhIrrk40hPN2(= zo|K#1)FP7~;D@y)KhFCby<~>m6214z|FX%u9-@^(0(K9ODKZ(+aZ&^HhMEHU^)8RJo8%zkv?@ zdC1kCg=Z<(cUOL%Gx_amw<_w)3&Vxm|L3PN=@>v7{b`T2*m)0#!$Q(Y*l0W=-V_qe z2`shvoxZuZ^JAO;Uoioo^6R30rh!=Sqbw^ea zWWYn2Sqyr>%DZD6^IVWRq~zhwV91b7ZrJR|oa=3rHL1~lp-$0Dkd*-BX265Xfjom1 zuw09DcPAI%UF}7o&Bs%5aztB?i1!E6J!Wdfh1TRkW0^JkROw_iAmv~KH->WVUGa(w zzVe%f=OR@LQW&{l;S#c~kJ4f_ct}8IFvxQrKnC(<)7MuFI>U;(K#BMl)2=f0jfwGI$glUId$ zhx5Z8HWaP;a}H6#H!cL_jYmjiP}UmI)mh(s;c|Z*U=-k8U`UMOx*nJqD-573_s5EM zASf6+K5`EkdvBy}J4D@rCLH5jHIQ+si84q>_+&6b)d~oy!+qDAa6}@5-UYXMQ#b`R zg+sM4D%BL%JQ>JkN5VZ^k!dV)<$3l0k#+B3E&qS~_+PJ`Pi?DKt)q2bN9%l0dbQ4_ ztQ0H7I#3~2Le8(PRqI403Sk|U!b-eDSSLzh2jB%h& z(W7J#5SfQ*)c?6hnbi39*xkfh5XmF-m66IN4TUVyH4f1n2I3i%FDyzt1F+&#etsjh z6H#aTFWvfF=+&}1Hm4gGhR}ppCpLiGFl#Hms|xpPmSD|Q>QF4GsQ_H3S7=A0Cob7J znSg_GwI_0%xgKHB5@OGuk#kZ49avunp?2Z!oMWMSE-o%Mk5*+~%2m1&6%Tn~uPIri z771b>hVqp``5BD(BH41Ck4oAdgyY+iewkLDUaiQzxA^ln zttilfMVoMCjCZWl(AXg35LUWtpJfqCmz@0{XeI*;dv8&`Q3O=gc{4IV+UmeT;X!b% z7Cz>s;dUP3$0P8#J4fyTlaFPnVZ2WzmZ^Nn@?o(-YA@=XTE1=r$nzFRLw`_r65L>cC>Zsu3=slTY%jTa~1B$ ziHGBeoVIYP1k98^R?18L=O!?bNXs_s`-cH@0NtvCz?UJ~Wa!BuACer=aJxs3im7+n zb^gNs`!vM0BC3HLwNbY3OCz`)LcYGZq~)0VF?PbbZ3-2*Rws2Ksf;oO!7c>h2OUofhJ?r|y?Dz-^Ju~SlYQipcGifVP4l+3hl#+&c1>*H1 zFyzy__racq0MdlDsVVi=&s=bov-y8Lp&i9YjY#nl*^QQ$VBR!%wTP;UCs|c5A;CHA zh9mgEe+i(Lp7MfQ=2yU_x}Jr5#2OO@UHD9riyYfr;yl5JQ&cMJ3n$T;OYfG^a$Uxb z{9@7s8>y>UUy)lCDnKjb5~EZ~sB8f@UdLz7RZ#A$oV_VrV(PoEgnJ4+K4Sl?Zannpx zOELC{ea7?tqneh5+L=>4esgUk(}Kii@idrZWQ`--)tr9eRv+q2iAShB5m>bG<^c{D z65gVmSa;`=|CRJ~9Az0hgFPwF&C}BH8kq#C%3PM z8KCtp-J9*&iKB%gW72)qlIRID@Mz#%vgB~u`g9PnFsFhG9nMtW^HTdg(@#wk5;ROcOAang5{pB8l-YQpW@Vwp@s$X=LP=X+k+>cU=5(DtxtpsC=dQ@t zeN6+8pqx!9-Ogsw?o1qmwyx4DAJq_1+SI%_VHYg2zCy3Z%*5U16+~FPoyHGTNVIV8 z9LFWZxYOg3d@r0;-MxrYd7qkBb_~4^Rb6n?jv#(-d~<0cVo2 z5X3xocd5j!Ic|O|iO*BS+_2d7@M(cNBzO|SQOE>FH>rIqJ$~3Zp*?B3B}=m{ml6>; zy`FlY0GDQ3fzw#{51TwOHh&5=t}3=Jcx;+DHJP8bqictLAt0>hr#0Z~#oKU9{f02t zyv4C`K%V9HL7t=T!lst<;thP?i)vIrs3ha8ZvOm7Uj56`HJ`hTaY@ri1HM{d1VK|i z&-MoA%C{e20r!lG$R?fj*0A81Q7})iAInhGzP&w+1Lw?IS37D9b~$al%$0ChDY>CONj9_PSV2V=#P+ogdJJ z2vW4frEuvX`pfVq5eWk*oHL(I_Q+hu%)t;!c(g@R0x(Tz@LJvv#09p| zOhM^BSY4A%WLgd;GT|wKahDWrB!lQ@<+)iEpV^#c+>;S$YQ(Jfb7u%aF@%2fr8t}MnG#<2 z9_~++z0LnZQ6p1L^yXw0u2iABcR$K%&a~K_k5Gq#9T*S97Kcs2(DkYxE^$E}&(n1P4hQ!bzSthejFr$V1Br6|6w$D+5mvJ+7Gx4y-a`Xq=Y& zVmu+(an?lRAl}zT#WOvDcxo5KNc7LG!gvM}i(Y6_6md|?kDw9$IFzaZbVw}g4}V{d z3)lw?l*qP_pd0`b&%iiv6PHr>)`rLp+M8}mBk*Wi_6A7(yRoII-dvhvMP?CVdXPTC z3)H7l;g#9-`hyUFisLjUwF!{mV1UQ%@?tc}u0<=+dN*B;h~Q6YY^iKg7EX++rh{B6 zl`2cjxvi33r~4l& zOZduWkZZZQh=vyR)XR6*j(JUZXf0GVFGV32X~!3+cM2%)-!Iqx#u5j_YHYIrAS!|U z&O+u|FkK3M8=Y`XDA0}nTaQsqY0|t|(@!*>uJGFzjIvO&7K^E|*IXw_rIz2Sj&+5( zXFQZubd0oU5I^?W;z7I_-+;WuseRoiHkD6GsmTFAt!5ax%c+XMl_1GGx1#M8S8)>( zvRm-@sG|Fg6dy92N~GYYj? zKa9iy|0%Enu#s&Da#`R%Us%8!_38Y(+dn>){FqIJ!q!jky8dM+*}M4H{F}@JH)XcN z6>T9~Jn=`4$f))Xs3$uWZ%&-^rD3+J2H4GLWonnhO*ldvO?PNT_fL!`YxQCI zPlvBH&sXTtKCzizW<(Dm6H<=@~i#t@7GUylbuu?dQs3r zQLOy8%gLs+HRJj&_fsvdL`r6SLU~2emCDIQarZ?o;#wiDR!09*bak=#n{#r-!F&iCYSo6 z(@OhUyUL45^dbFK^P=%NbT(A5rOQcgA%9yMHc8c)H;&mjhA~s9$=UX|#itw=T+`nh z{rIxfqEOscS7w1bg|j&;A@bxCVCN(lO^OD_Mys@!nW;m6t7&Xaz>sX|rwXRSgokYA+>&zj3>h{92e-b}4bp2i z85Em{g_fQK3obg+U2yWJ4s9+s1UhyBDmt*bY(Eb+mJ5vmg6~muinvAjE`R-;e}M}9 znL8Y=$7Ga|l{wiy8M6?(rtN0t8Hyuuu3jZ3)kcjK9I6z#JT#y*BZ>wG+w~4z`lV7VMSfwuzP;8Evbosl6(JC7mHP zUacf4^5mZ26B6n*8k(YjwOP04Lv9OXplY6JGaTB|5ZdaGGUNn_$3o-U4`b;z($V1m zei8LqeqQa@%beA%x{GgQVfOGbAmiqRN&DhGI0pax{s~lbpVr>_+dk{W@f+w^Z0pg-~0sOezVBc}a{geI==XKUZ4{>SBAJ7A9 zSb-^C#CYrF1!eHJ-zBNPv5&hPBZcsANkG^vIS@s|&@V7QpIkMs7EfyrPx9~BeXxVO zWMpvQIZV;oid!Q*xOU?uF-(bY=0NIK9;pxK_AUMXue{A8+;_Bw{d?qOEnvd8ji8?4 z|Kwbm40ii8r2S{9oXs}vl{xuQGX3svG!kr z=hpV!GAYF|R1JJq4sGY6xP$8AhL%HxeR<;5t_o~!HIE;^8#U*?odFV78-schK=^4RS(11^*578y z!l{rlfGmcWi}SehTnz@eD(oUr49B8rWNKcd8tUs0xmeYN+o_eDQCL)e*s`eBIFFG2 zK^FJtRD?t@3FWQ%gF;Gx#Jr10R?IvPc9&k##yzymK4BsiT1{Mj-+~Au)?1f_>zbSS zbs!Nq0d5Q#%|O!!8*$ArhA!+z(6C(y(?Rh-9hI{2vGU3NdvB!FV)U_x6?Kb$SZE># z_74IoC4?|*51+mE zC+>)m?r^IBsMmUW=Bl0=*YQL(=m^9m8H1iMbL9rmgzKcu6VzUNFmM&Pn&zmZ7<-Z_ z_?%^+HVCLHIj+wE)Gk%Zs5mZJb*WwY(@SVNL&Q-9rm!IV@M_XbF?nwMAs_U_4R?lt zHqD|A!j&(&!bve~4&?g0e<%$g@4Nu47cP1@-gzXY=XI>muNg^|H4<|KI$SV+=7OKQ zh{XpI?ugd8=X(dosqs)zQWSmepprOqkpL7ey*goD4RFg#%$iZH<7eK^2;4X*mBEfr zt7Q(Uv6#KV!*&1T^~J zXSw(^@v}cD?S+Kx#hO!RbIs*zg0jSBX^an!L=+3*$=B9k2#seRlDa_cg;ASEJTYhO zhgMLFQI6#ZlzQCwwxfXkdO`R#fS9vd`|SmN=oxMj_8vpxe_<=ta!uWV%i?6J*rPAw za*5cWG$+?g+I@i!Td6GeGN5L_?FC)?nvE%b-;obZyF&tn$hkNac1i4<{M+wOCC z_va-nxM8oD%z{S(I*xH)9Sb%n;Fg~maI%5NN)(M|D`1j4j9Q{5ec)MsEG%ksAr5*y z(j_JyT5&{tIBd_8n!zIXkwP-(Devk?s;ea#K1jlie2117xF=JFPh=!nTq6o?(xwBl zLG}#7AP=AqqN3%|zxwfS$Diz1o19o&9&?5pi%iJLgf&Lh%PHR9ko(i3J48(D7n4 zoil?D6__`wzFyj_c?wB#$RRelO1ygZj{?Vet;Rp2W~&`n+jVaij-Z=t^VB~T_|D_G zN9=vuj+yH>(l!jV+`vWj#-*owGDU7Zk)^=`2h|IScf14a-Te0W=Beo0BcBE~7z4Tg zs2$Qh^STKH8}42VKIHnnP;9DZ7rB&j2Ezce@NJk4I*&sKn$Dfy2Ndcf`(M9vV7yP= zc;m>vTs9q9xS6aEpw1>ys60`myYTAfA~Wulnrk3zbf6m$7Ff@`X#JqnmtLcdwN$JW z6vm}m7&nASb8EiA&+|WIC#Q*~AWi(o7a@r2d_&!`4?|r>P#Ji0=}9;4dt4!)mi95Q zp?}qLc$wH(=j`rekURq*CNxqncS7X@Ur+ zn_`?i^MzKUWe!3p5UUC~kKkVFE0P(0fWzJNd9giZ;E>X+>Huv4blQj0ky3Smtb&|e z`?<~UXOWP&`iKn1!C;ga9i8)`w$S*_JEHSo89asw#(gK+<+oZEbCN zRuq)Coc@$FHslAAI@9j4GW<)Pq@F+a{Vjjb7w+k^Xmj0G#6I|DEefHAQBVmsXJRP*P zfQ@Sw&wHK~RIPc-e+Z~ApoD4@AC775$i^wPp?NI{ek%N(mCKP;>o#OB)})Aq_R>T1 z`GUMuQTRP@%_k&60o-*yGW-qJ3dRx3PJ}&xMHxW0cl#pN5zC4a6X^Thr#bR)bDf-= zCm|E;!7nus;5oCoFmbgk??d>KoNoTVPwGf&_i-1{$8z6%G35u4$G~B)VclOWnLEDAj@Z7N9GGGq z@mHrw%Y2(^g6u$%PpRai9C(qLdE-{$Vr5Cm*Wdl$x3u&ubLM|f4+WjO^xRD*3fzHA z`~Rr+j`=gh&lvFQWA5_IPgi%~lczla` z2`=o}=@qwK-%u41&N-QgudowCwCWns{~u!FO5|!W+UQB@w~S}`V*oLD{+o(m!y$7j zR&n}@_k5Md^{ug9zSf%u_Myc4gUD|a9sUn-q~o}0X0Db^(XrmsB~R?b=)}}D$QBll zSO(f^2vg=4BiMoM^mVvT=l!ZZ6RBPEoQAN2BBP4vmUeKewy@fxD}$wN`T84}Pi+iYDd#-@!A;tiJZ`H~=)l1FcKZ*^|mV^a|&Lm|`hWk`A|lVfiC zqOc{^9E`w<7Sp(DC&WJYD?qNruE|Wd4xGQ{?29V?P%xXMXHdE6K)MUZZr$TMlEJ+Y4}tfJ#nWVq1JW>GHbY%jIu2l=;%bR(3mcD9wNcn?ABB>!E$W z;;nkn%=fNS)a&WW~LvzD4&{@j%{XZP$lQ;`W-6OLRO+IFkwoGRKw(=e=q_E z0eLf7Rh}&?_0)UeM1pQfL3oC;b0pffdjumu5QwjMPb zETJdKj?x&T=r^85pQDgX8rOvQ@4c{Vkdi*yt+>Te~&(orL!P9Khw*_ z>^*Mv540&sHJDnNpG}}PL>|8~n&%}09qGBE6bXpvR0?!0T+o09uOMaKM7Nv{<84_+ zM~^wh(Zqe>9_m<85;-WURip-$}w000&2fGYBW#j{;W#GKFl2*$c5b9z>vnMFx0{)`EfxhsIl4*EN} z+IXmQU+oob{7q-hnM?p(&ibFrBf!=`mxOc(yZL=_YMKxT?*LBG3oXedGQ6pKj}My) zbDZn7(1Tgibh$8mlMpA$b7tn%>+Vj30&RZZB3zFWC^yL-(lY_<*S@lH3t^*FHOq&Y zBW$fs)(=(yz?#Ve+pCdyRIo3}{GkxX)HeBT-Kj}3+ctN3Rhh2V{W2)sd}J$s;39fiX3`@GVI}|Bo)li5wZQ?D ztvEe0Ns-A&@;6P8_7wR^qPU|b>Uh9G|Kz9A1d?jNkJslql30R{Z%3E6K(dBBVagH^ z9q%9Lc1$o+`o;=H688;YTQkla%DNg*n9`W_bz639{!#O#zG6+5w~uN6J!b~6*F*v% zSy@fLFD4!Tb@&9LMgpvU`BSLszETec=9)Z@p1x@mRJks~c<1Xl_Ggmd){7(YmDs9$ z<=VQ*p)LE~>y6d1odE%L)3Z4|p=Tz1vE5zwgI_(aJbr)Scv*r4@47KvhSXpHRU#O` zi?o`A1)ZV3`nBdOkpR~%IxD$C+V-!vm`$0FLC)z6 zWJLnK2OTw<-&#mWS98!B8gqM=a$oAkm-&DrvXaz=t4RDCa^MNv&|qgdY=vL_}6qgvXkwO@*^^ zzA`>r9=I-$f>L*wU1X~`3T#qo4!Lfshi&$M6p2qR$ z<<}4%{>EA}&lh?1gLVffmK67@%ov{aq-oBFI+Yq6gFy)JC8Za**oiCch5@Ebqf zC@~laz}g)qP29^G9QpGb8lIp~`61Y9n$sxzp1RC!R?mYZJFN0VM)lREpIb2}S^X~n zYOWhM*QL4#3CQfr`do8zbO~6;DGdyx0xUwx)O|rT=k>^P5qn}i5J9^Djlmoxs zbZqshAB*VZT*C>25QkisW`t^d2BR8Eo;A3isRYzy2qzgrXB%WP%C>9(wtLBJqH`C| z0uCQd7AFCY{YY0<52Et9FeX`xM0;|P^zvd!ZaBq8w*X5YR$e=CL*!6H8EcUlv=u{MT;n>;1*xz?_P>_twm+g6Eq_MDwjXg*PdQ4b(E@7-O*epqChW4?ntx^eI1Hj!q=Qra69A&$Yl2 z&|^=oN4K!dSfGN7JQfiDW*|K!eNHK|&zW^@EY&Fwtonhly8k8fDT^He%`PFctC!~? z^Sv**mIfPC&S($nTK43{x5cKU189=3UO&@+R|Rnb{v8W5Yzo$z zATA8vQp_Z7PEnSLcCjsY`60(suW6~cYDjnfv^*0)mC4-9nqA6d9~}BzH}yGH%06vl z=Y12B_n5vWrf&1}oR z0-y!}(|X<9txkS8y}79t+n;Pb&o-0juxlWOn9b;f@BW5elKK%|0t0se*=%gSnL^Ee zfiH)MxOY@qy}H-S?DX4C`A^sV^&@1P9ViFztXq3#i!NUpDN5iWIH1PV13)UkE+`vC zQJ~ta5nF6VS!fI~5db4b_y#L~2*y%D6yr5AyWcoNhNuJxJSH=7y52&JQC-G%LOb3K zE)TJ7xLmPrpY4icCF548@yu7}voNntsE&bwS3BW|#}Q$`Kz_!Fb=oCa>&6^2^nJ>s z)){GT`$NAnHvE2QEXMZmL3H_zX^sBBeE?l|ad-=xAp=P8w}4W6Pg%dYs1hxETyy)1 zwdlcv2g@sn4=}|0fsZl2A&s2(m@!C$yJ2we(6wa;)p1j)`(mp;C7VD!=v@dWcf?*Z z*&=@hcd$m6+GkS@4TvDHlI=dNN~nkkW`fg8MVK+cBIn7m@rv=!%E#A6A&qR>_;vI? zndRl0m`M`BPwiIn(KjO8*_N|0CJjO#i*X>0y??yQE^>Xp@C z@1(Dn9O>;pksUl}bcxO`8P(2K33I)lHrpTggo$%mzUU^pSR-clb4-H4%AgZ5AKf>I z|EBTV?j10LOk`~926hAjwk|XIA9~ZRsk1WI^7ngkbf4}|1dwum00mje{k+EfSiuuN zwS6*86W9&R(tYJ9wkv`?T#nx7trSPxb#= z+Vk6@7c;*`m)qyY@-t^c_}N&;l*uy zfG`5K{0zhV?gx1Cf_mVl3Nq?*-|Gy~jT*j(Rs3^=&rF zRiv5UnDyg%iDzS;!$|#oTk~H;d=hlhBxUeq*7uswsS|dkkAh;$Nw$Ybqt^a~j|wi^ zHd;Fc+Sx37`qvLcK|4-n_}K!WZ3f5w>^JSxr_MwYRM1;_CIwPsk3y7g^}v3JG8;*# zJQO8?OhyFl?m@3Aiiz_8t$f&-SlW`NbaG4WcS{yMa`ClS2oPPOb@5J4>mc$bfv<^w z-_jnOyCWv`={#JS{*$^-bO6aeuTC3&C0(wR7&*xO7 zkx8zPGB$X`IvIKtsO9(%|ADG6j`-}<@VF<~QtzZWG~#xAqkG@ht!Wo>&tCY)By*`I zDL8qnAJ7RUr}-X~^^dy_RB9YpN4;uxvQPZohp*bnkcMi$TdIH9Q}(^o*xzBt>CLR0 z2s7Bp=jhwS5A211-u<|AprpgD{?)B4wULG@!K$WNtp_Bns9a0`$mc~4;OLvP>Inj zB>#4!Fg^rtHlh~_5qZis(ME_!Z)e{K(&DDJ^VjQ?ovu#X7&#^zJlZtkymMwQO~cl7 zgq5dN+4OHt&FQQkj@ko`@S-h5$O>1$?c+v2dQxGi$@p6TXmUaZr()IBGQiYzKOt$|urL3l`p z!QHAmzpFJ>iEP`*y!ok@7pp=Fp5YX2Z+%rPU^BD114R-Tle~7=|C+fXmS-*E-l6aFMM5W$q~;h(AAqTQ)U|5 zgrou3*_^tbbg=n=kn=!cJbyDmH_2$$XU=orZQZ>~pYL0qbO^|~6ZiSSjp~ude2!U{ zFxSm*aPP$FZOJ3hcaAFgvp)6_U2cLZ^|;qU+B#VZ@59S$EOpSJU+^s?jzMaD?Nf;6LXFt~aatWG4LxVnqXEMeZWtu4 zyFJ+!(`Fyr_c86%qmW|VdHah=Z-S&V;tMYi`bkjq-$;7RKoslnaxK?bCoE*9>tr#6 z$yHJ<{(s_VX}?S|U>;GEU$%fv)Lgu#jqXW2 zWIa7w$EMqK9g0yGZ%LEbm%_c;Fg7P!zxKv{-6RPlIuzh;#^~g}x~+9y+rW#PHdiY^ zQ`8|?9kIR;BjUZA0sHEZynK>)M)Yv%R1Y)hO1BHnzl6>(zP4Sxex9c>=6Gf4Oyt#% zeQMzYa|-?PP3if&8;c6-wjm3jv|ru45UD@7^5KgfzqYjYH~mm|e1`ShmXsk1E;O0j zQGrI0)Hjdzn2G#y@@R!=0#HP%@I5c;&ho8QixT_VAl$^pd9UKO8e{%5a2!PIu(HJ# zRFfo5elBTT2L0zeE%j4!f8RX~ctc_&xtfPSR*fl=QT&;@GZK&AqZ9_7o~5+TJJdcSD3mhiloxgi)Qh%TO!#N-<=zZEd| zNwuD=I{GJw=$FsZ5+oPPd1LM?W6jCVniWX|N5EKA=GBn)c)}*w8jo_kogpT(d(D%J zwoICf$OW$h>YuxHyZrOCW_$1CDXZsanyU_2om&W^&96*XiAoh+rU$*A1HHKY2^YDJ zhyH@SlTJUYxda9roHVucE;KWh2TSV?F8MiQB4)7mxmcb+k?V>Jzqp&?OxJSZ_jNk^mcu^?&!(Ryj0b#sU0>4T8YHQt?Si_oPwG1 zb8BN(L@-}8b$s-=AiB!22*@i7MVRBdw_L;D>TvNUF8_TM2L3N!VXNXR-v7URg#q29 zzqf#D8d?+FUN=xociIq77lOzFg!ks?nI2>hPCf8Ud`KA*E7WzQE-T}$4?p7W=E%K} zFM#m=;)RhPixI^{LzJF(7Tmm|h!|Kx{iIkcH1N=f4hPT#P!L}`u_tt8ZSnrnBCFM3 z?qSNE)5Rn1S0Ci5X|qMrg;g&HYyI3dR2pvL+$>R#sF_}HLx!G?SiWf_ZAI&m6S}1< z8aL!Z$jN)i3nNiYw$W9#dyDrCwot$ShT#M|PE z;A^{1{G2k6d=-KWo>_BL$UwbCIM8^#t@Hy3Wn7vvBo{N8!QE>>ocA^!)7|I9 zrk%*bApRgH=|O`b@pnDawuRyQkbJru!P~3uEmct;9=J&#bdLWbv}QG{5=-a72@ysN zSP-Iws4GI1ISaD6=J zgX+PD?{O<5*i2=w*@hGVy^v8nEIa6t4had!Oo=akNtRqdHXjYvsU~Dl2k4Q@xEzga z4Ls=hiu14^L7ILL?i|kIpQNwbR-S-z8wGEwX_l#o2sJLtH-^92%&-oTURJGnGMyJ{ z*V4dS--K^ez{G^kcfDs&9?CLyYjPI{(tK7~A7Kje<;&cr<_Hf`>C1pX!)>FCOp z93iqfstQc{u}EYuWQ( zAp4LcYjg#rwB^1PZ`ZavHnCR~KEzo`A9rFi!%t^r7w4lNoh3_f5O4syFbcx=^eE*w zD^SbIOF7o}eD4;HU#np2oeB(b8pfG;bT#A}s5-IF@pj{xK{WCZL zIv2Mapx@e8Z@x@AbMOAN}9*0F9_q{|3;Wevt=!TEBm7&a7#=Oh7JvF9lS2tdoAF{Oi7Qq*WR4 ziyg4vz(`YaE0+2|nRCe3s8UF!r6cJaU))_knOWrdeboqsk4f;-W{D&mF)2fv->Sm~ z2W1%?5-*qeb?j&HQUZ@DM%^#5OC$e-74M*((Kl-=;Nb`gdwg_r@HIk&KN9c$$VWM1 z*}n)qM97=z`Evbh*?|$Ft{p4U>dK_0pZc_~bu(LQ^b)Ay-$Q77pQLexgT$A%W9M7? zj8#p-j93NQ27+*Bdiw>l?|mJb*)&9zkQr@^x%tJIy$|*h(jJIakdG0r=bC>+O3Krj zK({##Or1VsaCzpDa@IB9ETs*TJTr~d*oko%wJJ}B^zkN&DnG6eZ8#_+uHOlgtwdS1 zW~;i`v8R9GKUcl}3>f0>Bk_S|oZJlv6e5P4$@!d4@zmEf?6-E9m-$*rd+FIBLhJa= z$anX1&EGK$DQ&zXzGrUJ2_1KJ#w9WE1f(h(!04ksFZwVd)^e^;F6XI2fKd#;RH~x| znT$f{@uFfFfWYPVP_TZm?+aM~!nUzl67X3<$ijhC8H7^Lp<*DG3117f?`g{m(9|>X zT}Y5H*v7KzZ)77a0@d`_f3Ql(;^azD<^(GM@8>w0Tk<)dJ{TXlZ`{SBb^LfIohv~H@b$886{?2{a! z4;HWSq6(IC-AI}T+7#;!_w|HP2qI>pPsm2%# z!z~+OGik5xJ6eN>)L&=-7nRr48-bz(H2o zs#@5*#F5_Q^eS5*R;93EY^ioAo&@XCkb=}zl`*7fgztWQ2^+EtChlTf#9vWhTehZC z;$>5UdD+Ruzqht3)pHl|Led~yynkZGNX=uIjN`r*CbiNQG)iwpjJ=(Bn6x6l_ zkLWAMoK1VFAerH;SrV*)>Xj6b=<-d_;B%iS9_os}GtSAKhjG7ZO5yU*Tb{}88xMzi zOBo2`U_khqqs3YNSdw|pSN)iFu8GXGZq2FVA)9#T@)!R^9-e|rk_E-fmoe%ZT6=T7 z6yb|cVaYWLe}gt$gIY7=qyLnw9kX5|Od_NO4Q{YFkVy(OU?36~`Yq?>YgcZ|%80jT zon0bDv2e9Rfo@w4?BDY|rdOtMO6s4s94JmPt5;han`Owfp?-;4{-`0@so=Zo_bY2B zX7QgO^hyO+!{0!s9m-47w8hw@T#iW+gD5s1AJLWc-$hrQkE_iul4f;K>Wm(xCHYf(2hiV4MhgXS9&>94KF(R<>vz#u--j^#*|;ex)UdvVbDf!;f_!!1S;ssQmrj2T6a zG+Rh>n`8R-h8}VQH(-%N-&g4~5W8f!vd;`3X+ZWijy(q*$T2%&feMpvqC|mO5DU?c z`0o{HAO#b7_(VAkCC6N&;+b<4b1cStC3P*^+lPu?i_Pr}@OGr4UHJk!&YliogrL19 z5Ive~tmrM!jW*`$WQDGap|VuB*D(eX;Mun{-nJOJ@(Yhj1(=m4AQgzt+dSIG`Scp3 z@wODWQ&pZFnq$gxatT>)sQd=RxlkQ2+=K1~Zf46IsVh}EepJ1qzZ|j3o$Aj3om|w< zXm7;%BjP*3cIOQ-7r7f`xwvVB_1sEY3Og(d@zB!o3XDDGkGRYld>`QtvnA_` zcW*;Uqp4;|TsMw6b6qiOMbeF>|;`o`azjaZ)EvgN0K07T0E6>-c-MdmK_t zF^QFk=krKwr<@0$1YIy;e;(){;pJnXSDA zOq|^3ge7VfZf64zzs#7r(>GR62_VnWFplNmiGNV@4!K_*fo{D0(n{!g=W52vRR%8+ z*&JL#8N%?@PF`8MYD=wjM;XWffr4<3LAd0s&Kn4MHwEnP+iM}T-3IK_Kq5PCn8ddy0%g8na+?5B?=Co~}A`;k#mw%^}Fm|p^)8NTX zHOumj@Nv3SkilT_sL3a+Sm8H!o;+=f;~$ApfOdoNln3a8va*$p2iawyp8TM4OkgBK zA$75TwyvPCmM2Iu)nh!aUIfE17|IZ?3nFOZYvNO?mOJXz!r-h1`45lcB;#2e#n?dz zt90f|2b8w59{h=`{I0$8{51HWT*n)QSQ4_x=jkRTqmnVVKd?n*i+{iI9R%kSGm}Fms zoun9-$n=M;>>VU;#kH_Gb*$$o?F@C=ox0n%pnqYdQd&toM%{(B3}m6VB8@a<0Cv>% zYPE^QBR|SFs)3W(s?Yq#HVDfH)V@tFc8A2=gs$Eo|<^sUBz(sC}h8gEAPSu~}bbVsh4)|^jPP60dn zk=SWOWSJ=U2qFabw!VO{d;)H`g}WrfZLxHYl!U349KSw0fE>abDoHI8Q2iB;r8i^L z(Zbg&Jn?Z%n!djU)hT$lRpe2Na@sa3=HL%XA|JQAcKdEBv4jdjDgjB3cj-_S6y@KX z1{2&#C#m^I+10A}Hdsb{$06UL0)Z=dEg?Rg6`o|+GMQSCgMXfi5KrE_oa zNjCsh;j8C=?-)MR==Lc68}tFi@bceEprl?Em(w$%Lj_jaW!Hc)GeC_lOjKu{To_Og!shr#+J-A*fB z)e2G16`~t)w~wcxSrN9iJd0XJ?2#j|4clV-9IVSw=3@Z?(s(71hD=<&7mJ#%qg8B+ zGoWUw2myC`WFWOb(@~1;vCo0k&d#aRSmTnAudHS%0-_(DemVwiP_a65Ys+m-KAA6}p$lQB?ohg#kT9j_NJM-gi-IJuWz zuLJ<2zr&4&fE#(gK{sRaJvYt;yzG4cvSgK)?LDNvB2+WJv1^=u~c#om#&<^;LT*&igRyTuREnR?8OPqg_egb;})|?CnoTVKU*rL(C<6c z^?g=0n(kOFbVk;H1rUvtAW>^LtTsT@ex4?3VVN58TC)Q z^dqQWs`eR6C?Q-oKt1T1ZiDw~yHL}ISHT>Z6gTKwHXo$7eid+UyehE1#Tl-Dn z^n(mLl?$g#-yiKdxo&NI6XK%s)#DgKv|OYVw!{2l(YmEC!EEtfGXcX4HG$hSL`TS_ zH=Yr{*J@6$?`LCAIxzCN;u*rAj-vpe(@#f*64bpHZ??n0gy4BK8k)OidZ;^e^!a75 z<%hAAGT5s(=1bV5T?&7~25-`IKPnf%*rZ4l&_5$=DU`*aL~*y?3o+QKJM5-2d6P_N z-?#AWLiYPt^YG{divn6(^k18Z5(4Po4DxMtm|GzKFEuFs_9 zZ0Rr55zy(Z1Fv@1qBo_Dba^|l1?2TsNUMTz!SDV^a9jBbE}{h7w!VvMKaz)eZNj}1})IK?&otfM1JD5lS#qt75Y>$X*m{)OKo ztcU1!Bo{82rLsC01MBHIN@sFVjL^{c)O3RlDPm&bGj~MS(*q1{AGbON9?{EQFWFbR z`Y-y!M3)nv-z|uru<0+WZ72k5$dc7YY;@fNo#Bv*O1LuoLTg}!50))94ptxTQoem- z02)!_Lq@=WJ91<-+EBt&b&c3%?%Up$eLDIb`o~x)qi{0cMgIg<@}-(>;%z~~s~@gA{?+$a7ApmUwg_JBOX;zYhBh|!sv+@2)s)=7(?3B$hb3`v7zOkmSCal z2Be1q&$!~^^@&i(o%H%JvQUZ8moT?|K`zyQ{+!EjV^B*qA8mDnY7I#c#e&pN55^TH zTEk`-1oinFi0!``1Wzc|F53Uh=njNv+D#G2b4&ge4&&V!2=M}e6_96Cd)S=kUk#a| zeua-?=NM-`+qe?`_^jSkAEW=v*C6Jn!h;OI`VP;PM4Y0^2!soXI*V!|F~~|RRBXrWnoyCvW*d)zd$J-=#!A4OTF{M z%J}+Pr_Xcl)U_2?dBd)N`)b4OdpL1U_14V+*m}< z%W`shd5FZz*V>MXYxoGkIwX;mk<>0c9TAeI<+c}=Gj07_^LXbP7xt0^*x2BN`Rx4% zXC9!psUiZiMivk$49~?O8IKdLfZR$a)JghhBBySAMxl8|?ynws4Kxvx}sc%-}bQ2+k4 zBSexwi_0882PtM3P(*xlKZ*{MLvxar;%-!xz}%Xl)At%zmJ&%ci?KJxvx1aq`n3|Z z^%|xsC1>v8*0p&Qqmf+{Bcn3!#OFZ@jnu-3k#^gW#(VeJ%=P#RIWwBqLtJC?7?<0B zxH<>;`PXO@qh`jn8JM#oC*pH#l2P#7DBB$rh-IaTG_NV5;7=hW$otkgfAybmOu7+V+>Pta@*`;M=iwuu)XqmgZ|u4q$j{^) zGx)X%GZYRWe$3l>gJQ?OSA_sjQfV@^8p5}$QX)U|x~<^^`tAFMv#p1Bt>O6) z%n88C^nKUyTd^f;wKZV%uWN`cTL1OwN@Ol0iD|pegkLsoqN$@KuPa8T@64m5IK6aQ zB5J)!bYg^60^7BBb}sWzf*5GKi&v7DLXLu!9FlkV*IlN)wXB+!US@gAft!T_Gl>c( z6$y=2W$Y!GcGm6y8<%2kC= zj)a`)PwT9l1}egAcUOA>#|;5`g_mAvLY!7Z3s6%SjoM1=qUO->qagzaG>^^0*+dN= za_zGDlSU|U*K4PPBwtb$PS|?*pQ}7BuuMgB-QEF1Ql^p)w0d?T7PgEltE`<6aDXkz zoD%sLqYA5|YueneTBz$w-^iF7=^DlUOGg%`A`1mGLrl}HQEVnGK5-xE-{U^hY3R7X z?=c_M;BQx`P6(~BXFRNqkRvB>5d8Y-5V3et~EW~T`GWQL;oYC07U7#+U+4mJyJ<9WNt-wX^ z+v!xE1PrK+R`!b1cVCU#uH_QCKYt-dwCq(hfF0ZW=OF7vLhAbbJ#5vr1sDfDZ2eRD zCoO5Zbr#M9vCO9rBCA5FB`apNJMj9iA;g3*|Js^j*WnEFtDG*^v5S__m|$N$ioxuw z#Yy^M*DiDVl+Q_YpwN(>*?rvpzT>vxs5mNu*Uv30Egp2$7#$N$b21T14c4_SF&=BH z#MKG!t#?gXkp_`}1(ljr)tJoHE?U}Su-I5}p6#yPm3Ws+;7t--zC#(A`rKxTeW(zD zx%mN&V#oPu+Is=C2oUyg8`$UR>Tq}>5F^BctryRH;RIYx! zw@lvQ;uFZUtdhgm4&Pp9*FNYMl1%sc>;3Dlw}B?Bq77D#bi)FE=R6;rdLrTK>ID&a zAiKlz)uS8k`TYH+Kx2A4R;q5!C_BhuU0y7;x-?9HIY$km6+W{aId8rqF- zmBDjAe$j6N_e9$INtP{t-Qb-3-w`&~ue{Di%)%!NrKfRv|4%2@n09{srDM4t|9NzIYd7h6`GxV= zj?KK4E`S$1Sp6~sJYW6&eAoxXcZ2uOIBfHKK11XCWN!A0HB1oo^6r|Ql@;LF&ueo7 z)0<9aXQh zdTk$4maC#fh`%z|Y+S(Jl44iE(Cqz|D4$zC=6_0@pAFp45wMqL2f32=d>o_JEi>${ zBpO9^>W%Fw1uLg^BN+^$jsG4ft8y9|_fU!@w$B|ng4nU{f631jn;aaLJ7mnv3EaiS zzSQgrTuZ2$IWaBNtARb=zx$A@e-l%`^nQO)jr(_8E=xA)AO*0aW^Ebou(^*y8>2t( zn=@K#d61_oCbOTyvF#!vnA_AHn3UcP9XceA$;8H6EBKB2}&sSD46!?{&mwXx}oNnKp zyw=WpJGP5kvA#3-6WnVU8Hi|jo;;~Q3-&$Y-|IV{kDm(_T2g_PY^|c;OYw>@iV=!K zjKJHx&dtt&COwnNRh@r77Vei!D*3@WuVpp%oL?Iz+$RxUE^R2w1ePfBEqJFswS7PE zI&D{0Fb4aU zm*ect&XpaL@e31jh6E$01GD_8cNz z&?&N@7D&&4ptL}Gt0J>ypAAE5(?Tbx;PGW#k_U<#b%WqaLU4?Yu{b0)!O4eR-9LOO zK6h9ByB!t`3fd3X9&<^hOl(%b4j~E$b=aa``z&-vT%^uNcJx?};^t%c;lv5nO71c) zvGVQZRT!=9t}ne3w^7T(cm#&nGPLD7mqoJxh$BEOFbL@KUZMHz9+GGcmy?Tk_&LO~ zF3JaY1>{~aO9HkR40t&G*BN7r9@5vxCdOEu&oFe=iTy!#wLrUTrecO+%ipF8)zt>Y zg};EY2scTHyqk%w8OTo`fQ|{d$6KMs-s{WyWnpTy23E(eW4B8%=>tc2qou615bR8!Dvcah_HKSG*E#eM-i$OyXh&k*G#{ z>cHOuE}5raHvEPNcr*}aVUm0vaapB|$nE(MBx3d5qKKhT3c_fi6sAhDAj4#oWUa0s z=Srh(J=J{s%uK)TkXJb01(rNsR;;~Ls^W#Zy)19#ZYzK z5sZ;%_LFRa!UispLI|Wp6)K!s$!3y$@I9Txm$*wxNS8d%~@mwfQt%Tc-#{0=@ngdW8B(v z+O~I0{T*m#_T58{6V9jI%kEbQQ_ss-SC{mktCa*^Zo3ELI}2-Or~7qn2)?%Y$@v86 z=p?(d1YO=SaQ^csDVs$g@Sw3zq!gtj;A-rS{l!emdHmkRa0OWNsWF_BA1{t8OaOLD z*+dR>13#3ilee>~7NPl*RE2w0q*R9FBrPwQb%?3E5iw!@Iu zKAf(wM_ap!iYcYj3Gej!8DT>jc|#_lvWfHtBQyV}D-^8DESLxIZ}ho()3qQA_Gzv8 z*PRq`LP$xI=$MBc z3>En?deC*O=~EjZzmt0JQ+P0%BC{a_rtAe@Xof49s(DXGaELW8dmRB%gsxiz`f?wx zS3Zn0oU73Fx#5fu`H@9~6X*&XNx*#P-~?gi{j=!_1*?#xs)6OYywT19QabT;QPUw^l0GY?P6k1x2thCZr^P( znMH#$32RUii*-(O`CJbNx)-@KT$>jz-XH(?;qW~Qg(I1tM;8^!Q~L-Lw%{f>aS0B? zxN{CI|0O3rBzO1Qd-?x4*~J?YNds2K-R#rPQ}v#ElyY5E9=9l4fo2%D!ZQxAcFREwYf!zFgxCbRBZxy54sM2={H{bEXd}L3OrAd|D05L)1 zUy;!5tj8NdhkvKnHoj+SEoPv?pqU3K@_#$2C zvX(9@(yI@j^OiS|Jg&?)(SmVAO8LK8&ZGwPDWEU-t;W*#*u_qOVxRkr{wdVBM1uwYg(f@kbF2L z?|q?80v zxH>Ni0||U+Y9)a)u!GnwnLkl7@8EH03}!L#d~N6IKUarE;yDkNcKM6T!X~uUzVKeA z&`+gxD-=i!jx@AxGWFc|T@`tkEp|q-w;4?T4tHOCPN&4RN8)In;!`=kX5yQIzB|j= z-399vf*I;c?tM)wg5h0L)s)p8KbZpd4pM%tw?)h2(z=KDyI%xUGY&wId9%V(+OdTdDb z`Who3xpZq~C{;EKCC<>?MzFl43IB(Uf=d#{@|LJxdGDc+Gu1Z-aH9rUe^fWU52DW? z+KF(g8b92Kul@d4Ak148m3QWYd}d>Fl9&|C0BcqRg|!g0!?!NjcZ?r7C%<$q{fcWf zMg8uQk!)i;5{G734C7QD>FOUMQVDpkhY(f9k28$j_umKcmW-u`$`l4ay(&x_=6z%nz{NXzxia!<-MkZj1<+J)^R8dO6 zz))z6jv^)`VtTO7N9kv`NMD6bgDglhYeA%(J^@;J0jK3kHh1Ez$MP5!taB-)4@gW~ zCbrXVmbc?;CHqS*y5DZlar2{^oL3vhtQh0&+>s9%imZvM7gWV^76VG1LK$?06ziu6 zasnBdhtEEikYg%KFpDEEB^++QWn^bT?x7i<@Nr7zjV9XK^1*+HK^^LlZFip$^Uvw) zG9W$?LR4V|?be;26=ye5R(h7&H%a^`YX>6~%!Vxam_ENFEiVELF;wfi*FtmP_Df*b zr^iSC!}Uk@MK@5oac5P|J>AtEI{nPkiN}6r&w;ild01-gR<2mL#{=RFq#SyZvp;a% zgDBNs&HQmO=7%*Yub9 z6inh{k@ASmQJ9%HE;>LVcPP`%znO6p=HGZ#(v3qmTZeWkTqrXb1D~cdAxai(mU}!2 z%{R8fkNe-W(LSGvpVFo1p=Gl1nE1cKS07xi7+h32Z*U|2w(H$2ii`?2;1LEBxV@2O zkhc|*z7Aj;>+o0upO`um_IG;?PEc=vZvt3E=sh6!83hbI(;Og0IW;+Xuo6v=J%hMOtFnyvUeb$)uEe3kJ5eKvi~UXR)tQa_$!VYg};m2GZa zbEe^MYpn6iN7%d%+N^j}*uaf-)8Er83xoZ&WopJlna@DK=GJoXL)FbY^n73cr#;R z9UaZA5#$*-yZxt#8%iaG7PMny%QLB!Hg>MA_+9rqMhB*T`?G`bT4~R+a$e0y-|am( ze%UshmlfwE%O}qI)g4hYuLfo{l}Lgz1DmcH8f_|md-rOp{N}Zo-C{;^d{goPnmA!t zE7^HBIZmuw*>l&CMGKiTrmJcH`!RcVrTsmmL(Vwe5OH{?W4L)kO?I!( z;oJx99!;y-HJhlRXxNIQUoE=U6ky?1S?0ylOsI?W=0ro5ZDwcAA$^W{{SyhlU1*(C zM)Tapz{SF|D>A#?4ykv)#BBQ2+7+LmLe|!=&-T7x&-&HUw|z5(a+66`=!S&jHeZ#5 zEw)jhgL9Z;4kJ;Gr+cWYBI;62guf5-NlC*=&oC6vtBdqy-;oKnyZ^I?Jj1iCz0e>_ z73Q{0OL;8_U*YnmD&=v6dzzD~ZvgfR9l2)V7*hdpu8EUDebw>ixLJ%e&?cs18cm_v zqhEi;kkt1;Y)^TTrnE`rNyxGbS0$&JE*gG=>at#CXC)knAy}s_Tt%`ikR9 z6suI-KUht8Fq1&)OTx~){NwyM67gAy@1;@?Xazq#a-J>6U0F*AA?`zK1P|Q_dhS-t zjszG^w2)vN#}i5tnX@pn^|P0MTjGD&I!y=nbiz&%yr7PM|MY7YD`I0SSh?O)k$!oN-7kXA33Jv-$c9+ zguqVh!w_?hsx56o^*?)vUGo`bq)orNc5C#tbpp#2Arn56q>|E{&u&z=8+bQz;|QC~ ztny)7x!S<5cYv?yFk6A)cAf0mGoqMJRnJUJe%)&`5p*6&bQK+YshMh3Y;xn~Ix^Lg z<%!|!sN#TlnDkU%R?fL0GTpKKvvf$x8b9_;_k#1(vtwtRNDN&M(8A12%p@`;PbpUM zu33plMxSg#ZB;q6EF8gAHqV7PvkuKGme0NPcq6v@%^f5xO;eo8{a>rn;u2D3Q7R*a zwJV}x{Rn^!b2OVC?7#>K;7S5lu#lT;$23$zpSIQ^o&YghqpnbRVq2qG5{h#4&=OIK z)wMnwrFgg8%U^_;^4fh>pA6b^^Rmsk7-drGeg}Cca_}ck3?GEfCP-&(-ZEh-Pv{5_!qbo=@um@!L#ef+w#s zFzmlFXN@YE_|lEl@zum4Av1)-YV$O`3n7H0xzIn$X2stp0Pn-x+nJZy9w$7&Fa0yfNNBW^sL{!}o~kYn-C; zQpND{%zwC(8Pg5lrlZ|v{NH~hQ55|13Mq8Bv2IVy&J1>KW7u6%=Ei+wikNKBJ@mjn z<{Tko+z`t40EA3E@VBR;swa?1+G6RD6htLCT8*@tyk)zFYYjYNutooTIn5Ea9dKO7 zH?P$;Q{MBfuf@=A`Zg6Oc$Om!F~Q3hx=>j6k7+uFC5M&kUBGPzzQjQ(c9+h@wxbOT zoJk?)YNSMszexv=Sb{3y0P%yq@$slzbiN{?{aG01YV=^EBybuFh#cqLio9j}56S9c~8%&-*e`LoX~ z(GFT>`njwRNVR?cIN_a$mHpDY{z|~sq}YGe_mqkINHcs78&Xi<&|9-&dMD5FQ_Qu% z{h3#6%ZGW+g_(P0Rn3Nq4~&-q*M0Uh6^CM`?k#=$>7A;T?-pFpGavfOj!0E|t!gMb z$7M|i>+#TEgBE5KaOOWS#WG>%>BD0AjQ$gh0Im~#;lXj!-ZJ#e?mG0*gnhukj0ivZ zgFuZsl3xiXITH?Blv3uC7q`*pGEl-BgK)n{$GEK$4V(n!(2B%_qY(sn^1yYYOEv~E zlxwbs20BdM1i0EH&RgtnfN(G$S>5+kT3{Ctm8G7nxO5kI?X8>b2D~$-X@Kz#ptpko zqOI8RMf6>S%eYgYoa&YSD(Ms80^lizkhixV>TeBTIu^~K0AzpSM8njy1kMT%?YaA( z^`{L-7k#(3)a$M?Ze)x02bt=M=lKbDdo#M>K2kfNdCCc9W3NfQb4@q%W4y@?o0mMT zXTYNi9cPaBL`<#ym&&7p20O~TaiEk$e76C{%45e!I^(`2TSq5ujE{Ir%{i3#ZJ}^C zJ{n`PanEep;=SLc9gGg#qVXkR(xcxDF4vvfET)tmcz8EmwQ9kQW6L(H-1;{ewN1ia zZVl{)#N=eCi5(H)>+D8ajRu^o(U>k9-aw&XvU!laKMkaT2fEcB?C z5GZwM0BgjvMB@)JQG#VRp51?U;;Nf|s*cIOB;XffsFa1MWL9c(^DVMqCGvZswO>M* zFUluzHP$(@pcupm!$`v#wva|^5w?V2h7H|GA`K%)%jlHbZ7hih(HIZy`s_%dECcQg z*0Ob&U9{9F^#zs&h#HBbLh8sxiFC*r4$8dKEysod)!_1#RgFYK03| zz#%QNkYW~4!y%PONSYKdG!6-fUxv&LU|>iZqzDW27w8|F)(Pxhk87COks=rVpB%|4 zaWZ)dAZK7c@nB6ZmRHJDj&?B_33Lx;U6r8Dzj_u&>mrvr;$;K|pKRTZ#o*Lh6`}|? zZ0tr231{pOciY*&GWI|sVCY12)+ZxUF{d%H6X7M}!?obubBL|LexC+oD_Q+OB*u*+ z?mWmqf|Pm&q5k^;1$E1Uc`$_HRw`L=t|P<-<{`3x5X1}xh?XB%5jOd00%-_y%V}pn zeRSW!#!N=4`8b_MUakC%-}-NdDI)|I}4!l{=Fb)$Ua#Fv>|3a)F_i&l#~} z5?<8(3QG+Fs)NynmBQ>)+*v|X#0b%oB9 zjLabCR46tPt}h*@47gk?nPT_q{(X6o{cE4+!83QvN;o#7>Hbf;ecI^Jl4T+wU$JQ7 z3c)hUH;&}(Z{Y!XyETWbPvN>YN(%Nz(|%#Q50)JKk4ECoq*uw0*z)K8?jSY-({`78 zBDDIy6=k-^^K}w$iuC7iMBi}Wlh(dV^TJ^ab|C1rYCg(^#96>h2%C*wPY!9LWF9|( zVeU~#NSxD@*BXlo(0GpO-5G8hgF(%jlb;2DN$=mND`6EcEbQ3b)Nhn*82JG2Z;?u9<(9G}p+ zvcz+I!NgI)M6B&h0@I==O+dog1G3OQ#GZhil}4lv;kIngN4bOpof2O(%*S5fkf@=|$EmuN!l$=cRT(|6 zcP$Chl(D1fX_}(>FM}FjK+#OlbOdQSyZ`_V(!g9TkLn2%pl3^DiVAO4_gJ^eLaUIAjT1Ltm$+xN*&SbD zD1wbBHb@m_TLoV1kET-|v}R!R%Fdkmr+jwKA=$Q#QQZt07ba(Pj#hU@R(Nl$UGw7( z?%D_P{yOE_34Re)Ktf}0lk%f{vkD} z?lSN~5AG4U2F^)KPQudHskc;Kx71CenBm5vOhM}S!IQQ=MBOuD4~O(9zc~H#QPwo@Oej53M+>3mRQSiHYX`ezgt42GYUwv+V06QGB$ikONdO>ThA&}gc zC5ze?>sE7z1P0w~n_B|TFP{Sp{r!9!HR|=O3L%rV@LCq2WwcogV>6C*4%$DB9Ez~( z?atX5aj05u7X@EQzv&f%+!++X4X|Hs`|mQLAsf1ObH;3fz_!mbaK46?fM>HcwgU&e z7d#sF!AzUmJv=|Qva6htF9PxOmc9pjOs8Y6_@q{{`hXC#TT{_$WZg^^h+UW0H2?!Y& z`pnY)qZcBVPV(=tZXqH5f~z0abu4ao;iAbI8Rl~&bb8`NG=mxMyV1nieqZN4LcmAm z!n`97NqVkQ|9Fy9^VJ6lvOsQF?i8H1Rp!&*99bM|lCcI&)KhXa=iQTDmB^9Gc5c7a z+QaX_*gBv0Ut7B|^8|kK!?UeiU{{A1gd0)Cw32mx?{-^GYZ0c(^P8%=b8Y3{*WZuu z)R3Om%&gpDz`(keYT$tn>*Kw@-ZCJI)xuo-eM<#36HnQd15pg>HMFc7Gghhi=?BmI z7Lamo&-hx~iI)onm60xf!zVhgm0h2+Erss)d-A%eyrc9cdZJ|I@WDB}^YYok>7ZI{ zWxDOm(<}awaE|67H|<8l*v``tJKVC8d3Mb?V?tamdT9933GoI0eOM*syq~z!`?LXD z;=E?ObKV>PQ{pd__C$tQCM0UY4Lc`{3D|T^#4pT@UE8(vf}pd_rISCGk2zDaqk^lA zl-Jp$?+@=|bJJ{0ds6*!WIPV?!UubI(d+&33nXKqd0Mn+&;G(jVdY$Y`8)sxY7$%9 z{X)Wgxdg%n$`&3dXy`uefhN53Fy(~#a5`LL@bDLf4#Ncwz2|+W?zv@j-nYCtqCn}Ug2=uS2^X9GRWry$q#cJ|lP+s;m!ngcbq zMHWaO{~@s7ke$XP+x=oiSs5b?mpo_60c~4AA`)_%YTCToR-{>Q;zF6SG{tbdc9z@S zyM%9U(=mgXTMY4gjDh%7N;@+;SxJ*L8=ytW7@G0LVb>gvS%;@)QgS9{G(>i}{Ug#g z*+hIwPS)4}N&d(p1L4)i0unWou+a&RfDV$C*bN~LH{(|dDn3L;eY1PgyL~ox4x?|c z=N6!8o`9ypkCOr~lpfpN)4yr#z(;w=JSuPF>NQ`F&s!E8`mXL6e(6HFI)cKsD3~1# zy_=lWa$)zgqJ`q}lNp!qdau}SWOv8PKr6A^X2YAbZa8u7j&h3Kz|X4vuhL4^J3RS4 znb53p9bP4&pfJ`^zF&q!>nI2ai?2S!>yZ9Np_UC&x9$V9W?3A45Ki$|i z`Xs`?-m|wduYa;%cO*x#B5j#av^=B}39V>vE*Bo!C1E~oseZDtwMdZo%}S=M+UBQu ze_J|13&@q*uUd3`aNg$cK4sn$yes=BOT3;o{C<9;aBZI@mXXU?8nxHMb`lT7sb>@! zj-%nfEHRVI8%DE<8q~+Bz++LDaHGB>H=^7vw!R_(tC%paHkut3*GHq4d1TegvDEm# zFcU#;T2s-(`kjHLuAvu_WTjpaA>3!6ZiZPw)aHa^gURDVB&)f{yN5@dB6r)z%@)4> z{K|DYWn6vv(t|pTQf{*eUsqGH=EZh;rNYF#fUhuIacNZdWU^4QeHvHk*(+~*a&_-) z-^;YvGyU7)*|{w0Cx~itn7B#w2~8fl?{2`+%vO0_C)dnRd9bRCzr%vgn;LU)^M*JA zGmJ2?Bu+;9J1S7{w|i)9|J!O8!8|Lm>{;)ssj?;2CLOUQuN{+hQ|y=Gp0-w<%Wr4# ze_x^6HE&fe8QeB_$c{D9iEOJ)n_6{!N8_pAod6P=k5WZLm}kD_Vh+;lGH+0n9b#zF$1m|&tJMTnnfyp9_BpN?fvmb1haGQT zWTeooK0i?v1#H%SywEYydT-WllaZvGla3aP5Sl{UdB;Ko8Y?3%{W_XAVaFpj{`Iwi zL^898Utj6Pf9lJiRe9c$m|PPM6%uZ-MsCi zDlk$MsbUpPbZRx5A}w+^F5?a#H!K<-ZZBHAy>|tI6CW5IB`2$EcQ~0Wo7FIbcOli; zC_3S4q$?XwE1&RCgwM`3<+ks%=*|O(>$V$x9kwwE_^FPT~M`4Ct*Z zYO60gd}-(M^obb~1>MuxQ67-|hYV{f)%)IVugk<|Q;+s9a2oa95gk$x7>y?N0;3_ z#{D(pibAAPeYo;%(guZv@2*=i`&2CGsF82NAf-7uzAiK#7Dzi2Xnujve1sB?b&^%_n#@>`7owjyuHl2g9QBy@+b})p&Z^&HwjI; z?Zue1LgF@rr5e!vxs!MP^wEhEq!%+^awdM5Od#iBa8@SKTga6B&8TttOEKTTD=XBA zwQG~nX$#xGmQ$RzcsV&oNd7ur8}uXxC$4KizMEB=F8!T8D-;|O^0?lC?*U{6#2|Jq zvZ(N7f=OE2@4KqJmbYEA4RcU3hoRV;SqK#mc7D~WF4K&9HVu>~lP_F5YWd@c(I#G} ziCMvvuRX`Mx@>&WD%2T2gJL(1>?o%@Wp_AMtqE~#*)u~}Gj-x+;U?QOiDR`$er={t zSnbL-#=QqJYqRC>$>4DT?cd$fM=nu%-^#&_Ig^8~{dzS?BU9)Um+$$>PzG=?H*;S>B1TcFJfkNEFQawJNgn&CLvZGh;vrAbE5!9l60 zi~AZ(SgQ~D-Agq3HN3R`+=344YCW0OL@isyer5hfhWS0uDhV)i1sYXBXik$mN&C|J z4c3Jg6hS0^i6z;LsQr^9ypG=WW>o?M6)oRI9DvL{nNAX>aFl%?=Al_NxteC8u+y7t zm9{dVGHK^LAV&OAl3!($0qjYW#mna1|YafYSkkSXOkFsT&J`B zs3trw8Z+LamDv{?hKKam7=>ta8t#wWgm%Q~?IX;%I>Q%JV+_Vg_wB_9EAu477iByu zdgnlBg+Fpz{lPCr z4Z)T0gyekAIChpHsxj&qAe#HeOdVdq*njmU z_;oG@{^6pb_vUsv{J9PpSLun%IHh!5jZsD)di2%K0(Sl{edU|X?g(SyR=1o0b(YF^ z>mQSN=g&9Sl$ZuTI99pA{u%_QHXmk0V5HO^HF4twH`7@+InaZ0oZSDz!CI6ECiO@_ zi0SSR$D(TYFEF_@GBY;o%bKw?tGOs3)*Dql2&%@3UifR_)d|ePmUkIYKTOQYd{6SFgH&zGQC=l-31=9Fr9|zSIMT*A%*GC4#uCPxx{1@>@bEA|Es?x z9IdrD25g}*tzq_-FjH8Ek&D~rCD645SmoolsR@~XTViEZA_rAp=o^|}S?TpJ5Yn`H zO=ksII+h>UTSEh#JVwbyVK%JVv9DL?M)%FH+p9`_YY8N4IEzNAhg+Bfx1vFl%};>f19cL=%CIs)ywgUD3e--gAT0};`TrI zGz25SDC@xvyNtiC>;LVwwLC6P5iJ)eaEj-v^s4&0OzHDDL)csI|9s?(sI*iOo|xIk zRDuEadt;B-cK>vvXv}7V)>x%_z{3c(ZA^-GVrvP_$&sk-d6$NnUROP+bh3h?kLJ`+ zrS1d^jF`hW@kMw35tw*Lyfn%*qYu8R)F~W=o|kO2A?1F9+rz~pq`;*Qcut3X-#{V0 zPACR=QBEdW()86pSGZQ3rVqoJJIs6}EnF+Y>7J*rzwUS(CAH>Hbm^LSKpMw+MLkn= zk{txj2*jLFlw*@}=*P`Nr;qup{&45H)~zYdDFi^D-6qU-Le>NLhmI}KTgt@b2ge*| z3XaYJM-}f0uMO-SRp0>{*ME0HQUv6w`Rav1;|#F=bR69$-vD1w3)}Z`5avvGD?O}4ZPqZ9Qnr2RLpg2BY3QKLD5OUe1eC+i~cR! zMK|U}0grb3Do4Ph`%b^jx6wx*#-SkN{{3@K(x;XqM!v|Di8oj81dKR$SPRiKsoCie zP5kChG8}@7+&cRg=R_Fyd;V_sDm(n*_~$$I{cITizicrN5DxzRf7xQ5ElC~!V~f$~ zOes2ThdFt1e`Rd#wOy#&dV0j^)Si4pa(xBMQ7SODr+6i(_(wVl>8w;b6V=?Rp1L)f z5X60h8U7DDrs^MR-woINky%TDq%`_Wdgw4ZjYfbkZQIF`5DoT{Z!8{0xv~ z<0*M+vV6=n$n6;WbDpKRKKZ(($F|o*s|{%b*YTU#;m5PPA)eq~inTJ;Cu!h(= zou*m7;HU9f_kMY&-|b9((xD-1_Hg8z=W-}A)g^Ba-=1xLZ>m9aCx6cSKOGvX+nla) zil0c|T42x%5Rzji18C@&>LZmmr{0^y5>;VjyR>|mHuFM$S@W1QWNw%=-dt`1lrbN! z$8J=%U)#P(oksf-Ip+(X67ypg*%Qw^g}FD_?xx|tdC!2>dC^Awr-AI+`7lw6W>nfCRsP=xWY}IkBz(#ynYb zqe>I$a6x{h5wK%rav-hOIdnB{{R zm;PoNmCi7y`D&D6F>E=o@Qah~K#<<_?$sbTYi-g-g}omvn4D_W`3JTTadQSAjar;Rx>#=gL2{HOnO+ za7Bm(_(-OE&TUMT3fdf8SWHp+Ta#5>T>(nObyJRPAz#1n% zIU0}HQ)Jl~SX=O)l$RWkM3(2b_A&F=9C36TX?QYZw!YHHsmWg_Acu_i7GlCg+V|^- z=?kpUMM?%*u#&mRz!RPSJ#u7=>xjPTu!t7J24?SdE73mC0vD+z+30n+^+3h$G&d2X z4i7Y0G2*^2LZDsC!T(q4UXGJvI+70%Izt<2se+6h<0$5tmSonvbp5p{0N63HXS1x| zxi_cu)qtU<(0NQ=iRsl!l+p66&OSS)`Ze4s2B}pWNqGZFnE5D5lkH78bBi_qLHJDv zfj=(s>|q_ZLdk}dd=p@ z2ST6gI6J&~z&!VTZ+dze21A4_@rno43v5t_^bd zj1Uz2(SowqrCbh=$2GL%H!J7Hq`b%f*e|KgVrLgdrFt|cETwd@$#`Qn^N)>8o9nV< z&b(OA#)at$6)u4PGWc285CHSUAxesJ%Z^#v>atGb|DA0nL-YyVyQ(zJqN)5p9xT)yMsuMY9=h^)<~ z2bQy5D%{NF6U5rV87U@06l@^3|}}{hJ9t4%(r! zqPixW(|6Mc5F50qp!@iv%<0jg@s5aO+%LJnO^pd>g;n0>Z6#w{H-B|yoV zT?Fh0gM`|_tP|d4>8o_>He5_p#C(cbIYjWG-#&fZ96nh4P8#iK)Z?87te9ww!?H0; zROV#7oRlN)*A93ySD$%^`S1|QHSC%uM*wX9Cup8uR}5uHSQPi*>z04ZUq6HDBy)2n zQs}}%%o|;z#e3`Vk56t6=s9_kuk|g@C*v@#ipwSmD6olLJn#GjlyYVYbOtJp@&uS% z`T*pqw9A5i?KR)A%*uCcV_=s0ZL^l0mQdzThkgSF(+F;(<_SQ`8yRnDtILkOKGQJ& zip(PI7rWScxaNOBN6#E#>(|d1W6@m@(Z-RmBn_k!RKz6t#J%=Spvhm*iNI#pF?d>Z zhbyRuGQb%Lvc&MBj1a$SmS9cvI3e+Sb+TDGdE^)3J)+xbjeIg)H}5F}jXztw3A5IM zIClNvKBE^YQ_%a81V?KW;N8Mt_(v04_4^l4J%8 zdDz9WvY0xw&6yK$XW5ZFR_cXUOW*g_&C_hF->CeS#}hAXzJxX8-@qWsKdVLjv$y}- zUlXFJnGWM)Yd6gPS@ywydL|l;VPo(hPo!C+@K3ucX*Ae(Z5dC@0B9_)pb4K`>Q_YS zxdFkS-286R=?iJ$4hPKjO~kbf)1he0Kg(!ug#1^7aOEftjPX8SwQ4jleBgCDAqQI{ zAQiKr#{WpoYLX+MH-^PK3L-1<8}i?z>sRF`Zkm_#0A8Q8kj_q5JjxpB7aYB}>N8Bg ztz>FhLGMtEjyC-wr~g0+I(*=Z+NMVxm@p0a0mPlKZ$@gwG6iThmVcE1-PlC*dRzl(6xKyF`!-6+A4+lOSe<)mr z1>b@pTz?Zem?0$gohVLFlQOs_CTh-Xd1-zn7I1@uWmp}NXIU(FR zwwo1Jog#JJV_(qebVOneL65cpipfaJaB=#Xeo~h(2>fw-5_jdcncd&J0D+j>xUf#-O)eWtpZS zaJae>mODEbbH40PO8Bz1p&m{=;lApjo?k!UYw1>c!D#)m+&IH|413s>n{ed6;{U{; z0}_U@bTeUKb}$&xL(qs7&v8T$?Fs)^S)JBfz54w|7bR%1FVt*gTWY&qZnQX~8XP*I z>%vW_ITi{<8e+fLJ-X&zewO2`5D*`4B(%@jjeis)Gy|zk`YQxSkmQ%Hz)~ z@SjnDtlpl#lu%zBI-GFG;D^--JI|eitB12e8zpk%Ta<%cxV@Xfdd;iFQ2naMvz%rw z@PJ_0j?X_UgnT8G4>BrGshxjpc!CnhN+45CxhL3wQ)t^!Yn?p@d0kRG=9@-uqGtl7}o3Zg0)PnYf9oQB~UX`TrL1i-7}uL zV0KSNjgafTWYa##jm}n6{}HYPVe(@aoro6MXEiNTkURUB--cHqdWwThfcEkDmu)Ix z`={(r1*zSTKmjePAYJ-NCv!n9Wa_A(?6t<4W3KYB?*z@{3-B=X?0p?K8yrpmH}3=Q zwYZ*mvV2ZTdVu_}o)D9#D!drGx`=ZmiMz*OYs91>rc@8}(W}OC#QJl~93Y&^13>Z! z@%HHP-|vrRN@l-<>BB(LgEvs@HY^u4%BX;(?UV>BS z!JtuyEZol$#NBI+VapHiybfuC7h0;8)@)t?fne&F8XF|l`qdd|qOGbU+8e|1oB*5@ z_+TTb;U3YBf8bZ5;BOyr^!*%g1Y4=?l^D$Wjs~ggjEf_4jeDK1m zIbjf4b1=i;0VQ#qjAMg=N>UL(&{xEntBOt))}O4!mLdd+KDdzIxbhu?5KFtwz1XRP zHx`k*V4bZ0FkFFIn)xt5sm0Ty**;eIfti&5s@P8uibe)Ms*=Y~+_M z1faPJnAz{Wu4`3`F?e8<`XdAi6cFo_S6*XU@9JG$avqc*$L1JF6NF$@F^nKEMYS{E zqng~?d*nY-D1UCtayU2w4u%bq22yXvVt;IfTWq?;dLUa)@B~_o71$o)92`T>r5!SQ z3>zw-j_Kw1LS5Up@=Vd$XNCNOURdD>w9(D|e$?8I?*3$C|I*$|45SCI5p`fAb8Q)* zu@{UNW@4{(H66!P2CZHSb_3!P=T8K-mc7uwB;~h{Ax7r(k$#cD0v2Ms{Fn z5D=0XB5Zs zC=SN=-LPN&8_ttApH7b(&c^tb0D~(*PX7IVmiiz%X2SfA2)o!FtPxi$Q-%sS&%f}W_82!oEjvv5n9oCvRVCmWQ zr#H_FK>>X(_I?wN@`nM-z@sYB`Q~~7%8JMITF5GmzCk3gufj@D$~no)QSIyKg?rv7Qe{soQ5409x5s$6#W=8>}z834RA~>YK&yZ)O$0qDCHD z>Y{y(?}riqf)McWV9b}~`b-SlfY&R2)926cr1VzS`q&f7UTI_i#0746Xlur+e6S!6 zxLf`0rAhePrR|-wqwb$fOYQwm*W%8yh2EQoc6j`|af_i~`>gFYdYBMlIa@GvLK0Ta zC2yAl`pMXPng@Z4VA>R$RBa6O!Zan&&W;E}yHCLXak&K9jJknF_wyt@?JR|Y@s zTMXn}IJvpd;lzp!xvjDetYr({@|R9!2UzJA?lVF8-w6Hlh~6>8W`<4b8oa6p;BU+w zx_aPJv8-}9bGL_mx*s>fT@XR*>ic*c#Hw_jtEgAF09H+Sp`t#NWp)0`@J=q6sDak1 ziT^W?m|5%_DP#1no@$qFuqSd;fe1T^wE4Z zmZWzg`ssjs_td}@y8K?$M;q7VB?Bys||F|I676u|!FRoHeqxD%`mbels z#>_jbxepUiXm4WZCexw*`_sbX3f--ao*OzF=z zb5)EX8`(NAL$^{v{K6j457(CNM6c`dMsz)PeI?N6N3+byQL&e1^%auLat?@*$=LJj z%!&jf&CEHrlp)AiuP{g|dU?Y=5l#%ObP0AIhnEgo-4)Tve}``h1IwLPCF)NjV`@CX zeJDCoWZB1vYM+h}{*R847@jO$*C+3B3a6gXRQ5Xb`eWWWJ11^x-jr4%&1dwnys_3$ zk^Zuw(OmXf_GhLEuZp*9HUm6hqFcM|?QK1AzKQO`gF!y$rm5z?rn_(D{`s9RTy^!h zN|oTRo77YO-tv6>sQn4!nq>8c@}{<#IV3{E_DPYxgQ;~9!CV?p?%X=20*!uuv??U{ zG{3xR?#e|gV)-RFeAT#?SsnwYh59LYE-9Jq4mkz>ujrhNH3n6QJC%sQZ zL*uwPA-3@=-(ZPCR#}s-AmO-?jroYO$mK}C5(A4*_BT`e6t88bwo23$uv?T?U@`#r z<2^P5XZPWHtd$k(u56p-sP8R0wof-eu=$EON*>5q^ya~)%T$}*e&^zhFb|1IP<*;y zVVWHNi z9U`O$#MW|$*%ZSa-6eC%T7k3aF-J-6Ul@IY8$p-abM?1jW!BF1V3 z@v(!+l$z&A%Ng$V{u?hO7w9;r&3898{|aoopmLf^;PkBh*y^{1`3*F2bLr2$`&68{ zJFzP6jYVx~Nyve`RoR1nuD1IKVfIV+9N@2Zj*_@Y{qeYL{{rWLT4z?!mP8IE)x@BI z7EaP2dn`qp8qm)6Fo0GRhG9UMmGYFkVSp#AL$ zyU!yEy_NjCSwucQHM)RlHd73gC(t(jP5}6X5sv#zGzoh#Y#6W8m2X@-jYKQk5ARkmGqXg zj>Xo>%2I3FE$jJ1j(;Q3QY~gIyUR34J3Dm<60P~QP;7t-D@@!rx!7o=sdUy-WcFlA zd}MQ9H~V4X;?2W2Rp*GjRZ#mgOh8OW3&{NsW!Tz2qppbsTKH3mU9u`IxH;fN-bN8V zT8<;vE_Gg64eVSDkpm7bg0`r1QtPa=z$4V*O2Td%Hkv`+EQJ(&9F7vi{nhw1bg%=Y zNK{SOZ2OZdO5Oid+};|Sx#a5lQpPR8I;*@&Wk%&sm^MwpSlm?Ny}75xd|Q38=An^8 z_oJ$xNAvSO+_*Ci?W^^bV=Y!5)2&iP%I4c(al>NzeA^4%Eu&5p^kcYcfhUQ=wKN*v z`%*X5gVN-*#VGL>X6U#b#f`QBo;8d->ND;?u5BT9nQGQH;m30BwK|DYC02?-B{a^$tf`@kR{v;D^2YOdVrt>f8zQzm} zKO48%RgY|PWJzWO zxxx5wu)t?TlIn(`x38jOJ$iNKek~-ORpDq;FF{^Y0+E3V^ea{R+Yiqr`4vVR%%t7n zF#TPVW0t$0=st4xrQG-*fa2duihtofx59sR7`;`YI)PXk92Xp&Jg+YGaEqy*ukL#m zb?wL+9U*wKP>JOTyy>-QgjX*by0J;rSY7grbPply8QQn$(7gKZ)C+-qzIVeDY_@$_ z{OAQ!0a#t5ow&C9`lY9d8#MWIZ83*dIe}NWn6+!awE3%{CJp#_IBJU{F4yrNCJ@)^ zFE~w00B}VndbdbGA_-+}#asRVMj?R2R;HR+0mH`@LRN%rLvPH^UtCdg%HUmhhI$cP zW@Iy&Na|j-JTIqg|A~KGw*3cBbli+{^Jl}vK}VCws24pZ>1$VEJQN_O3z(~~U(2JV zx|A7WLqe|QEbnq-Yqv<&E0@%ZT#mR9pgIB2CM3+|C_&l?dtTg60_fIGO-e>b){`Wh zTKFlT5}EX-fdeR9I8$D@zg|&xwNkd~$TXXL^548G5~`W*{B6VqFP2ankSVEg!stWW zO~e@^s%A(NY<%^a2vY1gX{B=C1}gEslOk%Oho$Kg>5z$!68L)u>d**rCKmUH>#KWB zp3e+fq|FcB6kVX*f(QDJe%86XO&e*N48F}rXgQs)3;^NDh(!Hjw^ABm6sh79QJ5=t zW_Q&Q(LhG=`ZTC!xZ~y7vp2#(F;|i9Ds>)#qi&M$Y>1Ny(uw=qwMZso%&u*yN5kA$ zQypCnKC254PWz^C@QX~Z^rbmckSn>dSKby}nY2F6pFFyZ3tmJTf$=N#_2SRpio6i7 zL@r@dZc%Mg!8X2MjGVPJtSEV`Pzx&6mtWn&#{trw*A*3i3s5a)Z4-=86xABP03%kG zWMixnKY%)JZzR5!6SxYer6A?CyjBR%rj-V*CiyKCm)KgpOV#?(T8f_zi&zwofSg1$ zydSeB()rAT28cK>OVM*5Iv&DAi2RFjh-l0K<#kDTvJyjLDJaCI@^O?A6vqcIzY>?} z0?X0}sVGQ_1@wn$dqtIl-wJOWpcAE+dbFLxSWL!np&_x1%Dp^suOUATmjO_E`KNt; z5*{qHdofPgNjlNEiTHS-m4AirM=S8@17!&Is3)^8*hNH=wqf+UMtga?%T5N19Ct+= z-_=IPO1-2LC^%dvQL=#A8mbD-yy(j*RZFhu0sj1}{s3Ac^IiQ7uol{GnyyQ&!fsa(!edcE8KiOmSV+-o6XgXR$rwj! zrSd^di9A%>1!zemOL}7Mv%a3wh-D&9?YSClT_UV8{yM-F+%c7EX-teF72uR+;{<#C z&#R*cIXbEWe&_AJ_OjtcrkKbCHpv50<*d15MeCZ2ylM@%stCJe#h}`Zk|U?B2zvHl zA0#i{HA&b4qp(!2AyTQ|%2H?MOkvnDIRNG*+%88g)d(F$t@LqZP75(I2-mtq&t>6j zvbKGUjnKo1WAD7(afjCdY56{SuGo)m9aA;~IbZH98tV#~xokWQ0PNyzwS?3W)9;-{ z8Jq$|Z1Iew7=%Gx#oeH3xt{5<)a2q_YQh$^f|O7ra&fb??yxE^_?^~Is3wsol_44P z@Ek39!$sq7+5UUl48M)`YVKmJOv2~a9}$QyRJCrPET*S{7lTBn(wtV$-2YjDE`1^? zH!k6GitwY1`RwAgJTVRy5rlrTzs_@!5w;PBT5-$vPEJ7>x?s$zJ(g8r3 zMa>S!2ff#m6R&UHOeD*Ji!TA~H8tzw$stSLk$@N}0=U+SPFae2dcxOL?>=0$TVq+e z`xA?pZ|2ir)ruAR6!ZM5Uy-HJ$1`Rx92)Do*zJMu3a_a&`Li!(^KHjUGbu(9C(VAe zb~BM4RsT056$)P9)z96Y4ZM_eD%#k|D3RqgInhR!4GtNk+ z2k~&%qjhMA$Vmv9@ouM-LR)lo-ooxhoQtVxg^^jimkA&eOyPeYS`=Hz8)m-f@!fgA z_Xu;Ponjo8YWY)zv9%(~LrfGOQ>g~9%_zAGSYy0cCuc>zvd#?INs z_3Sv4HCePi7PEJs&g!sgv5*GzR#-Qd$xU?ivhe6R&Pv< zN-Y7^x4|#V&~rZvQ)ESvT=e_87yr3~KTiRe<~5Tu{9HG20MCfR8>hD&O(Yg>y!otH z23ToREvg=>e8t&^44X0BGdT$q`YnNhN@l!9Uj@X>Ui^M?NSwP8q=-(BJnb`iN?0rLK zba@o>P%Yk|HZQ8LOkCJE#oVhIyqXr^NaR0sOJ2wBkuD~8MTO1FHj9{q7Lxlg- zaWqe9gSU5FiuESK6A%4pd#7wP<9(J)9E zOGrlwE%2HDeWwlX(sO?VbjExMspJ-jn@ZOZ+39aZ*KB_ub%{tp{7#J0sFaW%I;UCekaLc8yXJ_lQh z4mekrE^Ax&_WHT%r8LgFTODgZc6l6Xz0l`yUBY{NVAs3D)uFBhs4cND{t(X!E$G>4 zOrHTinv{7V9;^@Q;BG)ifdUpA3;^+3E28m?Xvfc?h0jq6N92TxUE+H!i(z^fY9Ihz zOHhsPu;jm0rZBO9%M;ucq0KQxA#7W#F6`ni?CM|(oM~GN8}%CQTRptnGxSkw2zv7L zvxm=5!(aCXY1e`VU2&Qne&2@C@Xksb8 zH*^TK?K@wd_}0qhEfN!I0YiA*J2y0v`+W_OtQyAJ{oMSEbJ4mV6!Anzmjn^$kTPxU zkCIEog$YvZg9RIp{c5s$G<{bLvx&{2k$!MK$lsfi9KsuKJxFZ zk-hg6g=+*7(lAQu5=96k3H4mEcDF4w+P7g|-K><^_s|Esq@*0FOSngF))DswZ6Ymy zjt}U|=(R861_D^V6ZAUQ&$E9DkLZLHH|?bzknY2ZXsQz8Fz}{Xdvhw9J@enl0Iy^z zRkB68?R=@kt>xf$qGZ78ml}v!vU}}ey(oOp$c{2Bpk1rWzRf;6|M9-0YyT6EZ4X}i z`Jojt`EMSTi((Wk(*FoJ{yRqpEr`?X#81LhiLpKk{UDW{OvB`b`^<+W2T5REEoLsS z?kBv-aQIg-P+|>JXU+MMT=Bb|2x1XvzFf4w5t^&s!`=#N#_sLQ4>vk`g5GWha!rg4 z1tNDtGX@{y&SBwTFoHv#CZka!y#gi@_JwY&*t2fiKC@ULytQc6BnjZ-a%F_XE-UO9 zZsSbRO7A~J)sIi+YtO?}CQqwID+q2!=`(;1AkEi!0LIoKLj_dGC?gC_KID~Z697x6 z+s0dPI-cYR*W=_8D%q>jG5xE}jY`%6UV4itP-0p`E8M333^=TR=4vdHPw1VF<+?RF z_Amm0tm)@1jV>b#j9kLGHfW`TL7SZpF*mQKJnj${IC4Gn@g4%C`}ESzBs@DPlA;%b zGOVzY$nJ#H6+JG!frWH2LqfcF>}IXTiWcI^QkB$sZrp>VjD0VEa#q*F(|OCi!5g(E zbPrRfb>mG1IO`SO#+HfVBY_>B928viZVpCokE*AztOC?M5m`hWDK+;^whb~g*84T9 zbg?4p{jeG(r>^061Ax^8;HR|K~am`&&Y=E;lu0h1(Pwp4Z7L})Tw8vjhVNEv7X|~%q5PniV5QAEL`-$yd%Y@m zts4*(Scegbmq3*+6snAWqhJNaG`a?q_DhRUU)t5hY-HSbIp$ zgk%m9)9mp#*bo=|128j>ZMzmAH}#&-*^C0f;hyj(ZF1)-5$1P7>3huC)Ei)uX^`w= zfH@PcJ4TM4D8Sq$%YtAcF&Y6DVHJFc)Wk*+OQK*Fs6$2j{I-#ieoWX#nLp{6*2|r) z{*$EkGftC z!FXG{_}1803lC{*?w6Pat&;`lMoPDEbvBRo2AneXnJBi<8ps*`%ckYB9p$kNAy{s^ zVnEmNb(e?|$*d3u==fM(GYs-Y3S3^yxS~Rv6j{Gb$!i%Hzg_N1zBxA)4lzrZx*SQ% z{fMk1c(Qki0^rFnCFZO&g$T1s|Ng6k$4Ftpu4|sSAV80*V6X2nETFW1&XopTyt^ZC z&q~&a+}G=hHiBvJw!V=J7>{Kya|q2)7x=TUFAL4u93cb9nthX32XE>4s!+-h$}}1d zrZ*#lc0--o$U*|?_Y-A;?!JR8wzl~$T=aNcv}X&?%6Ha*AiJoEVjMinuxlpRwzJCn zfi`;C;T2R{cdmjm6OjOE^05Hz-K+7H#wC2Fu^fjOkbdcb? zJ*)u$)B_%EUnrKdP~+F^Vi&wZr04Uh>>?8lJReG1LKJ}O1TSbjRAfG|7n@f>Wkx7L zeRe?p5!Y*@TQ#PBXq z@2{BQurgt_t+2pI%!XW(ms9N~iZxIU8#8ap61zuDvedmN-M|@OvX}cb@&_mbLhKbb z9~E2*Gy=8jCSOQSs+|BE8bIwZxe%MH&D?Q|=0qbsgfy{nt0FvbYNW(N@-YDk>(kZr z9-W1TvvtNq7UxIm_l>ei87rjb%xtXF8#tS-e1eabNi3w{7@c7eYa?Jm%uyLU9l<_a z@D7$2M-s8B6MDqIkHv3ofJqr>+YOol@QVJXjHUnqOD@h zDk(9hvkjDLfSA;jh|a&ky6Kni+Zb$587z7wBFW^NHvHpo4f_Zr2BFLKmrfuo1aBnE z3Yk9)-F}AEcCWs1D$JyKt^zdvlLQeafwc?OPj7ucr#7_ zm)QI*aJUGlfjf_WaCZM85X{v#sKZ;V@xW$nbSZ4Dc%9f7{d^y8(YGHtXBA(1^&fa zS@^QRR1IfkIP*WxA&Di$K|h?H!L9WD&c=Jx6Lo#=72O_9Hws43TI`bonPU@PqvPBz zxi-Dm^qD}bcnPo_6`;Sw0+P4s(gR4=!9tfrI(~a>VexxE0|49zT>)z;MW|PDWtz5!nJ1GGNqju@3FxB07ZP&!vEGj1f4H$R1K9DU zzGyN->j``JTQIlmQm-HZElc_xKqaUF;_Da!jGz(JG;O;ltBP1Iepuf85Z@qxCHhNj z91uzv?fi|vQA-=9*6|E{!91lEgD-j4<~1`=D6G$XTA>M@%i#liv{|p5pa`;K(OZmp z{n?|;xeji!&Q&&N3@86V1@rkJ{kKg2;#5jxZQyWD|J%Y~8-D|yldf)%f@s22TGW22 z_TveFgWPMLw!yX*O0@c_3TW;AQWrZwHf0q z7~7`|#@PAb9Tq5nyX=sA{cab4K}1QU{DR%CA-WA_ILi~-knb>V-W|)!us&k?ye25+ z=lK&7!ojXko;=J;OOTUW8Rpdj!B#Hi$q~Cbv(uCW=oT2V}zv15nR{^nKgQ3Jjdv-?cKqx{%)QtZFFvwmL`og zC`p(=GbJ0M%HCtT&c{azDofUM{sJ7F#KYUG1d^@wQ>!a?O9K=lYr}xP=q1;?zHtA| zM-WV9THo|{$;Ov)M0_ZBKYDpDw^;CbxmlOeA9qV+J@U(K`^&$*0%X(KR^_nwMv%lS z7kg-1btHMOMV(TXrNqckwR;q~8O=O~kh6-y6i98B#N=7f&J;k$je?I?rjR5$O#^hZ z-t2!Y_79d4Sb}C$TT!K`hn1#mxe|;zgrGoD8j127(~KbIt0!&}Ck{r`pO&s-(QcSWmcs}yBo?U(3msWzHTs6BN(-_C8xIOamZACt^MSx=EK1Z@ns5T=x&@4ttfEBw z>k=RA=}NTxH`q*WD6H>uEf<@Uf^2_>5S~S}J?v%tex!xqYQLs6s2rIF3?(M#45$I= z$UW=9x`uw-m6#z#f8yhMepLQ49&rvN>o6Kc))T;A62{8Y6jgLF>b&$KW^Wg zI+^)mEu6!SYgd=X%ct(Y}pgl`f>_i3vbw7WReV-hpnWsPA6dP)Ob z_)2x~pfUT+5p;+-jSeb+ow0okL^&RgaYOpeSxRsU{QO63J|xMyb^8uARN)o+q{1}7 zJCv?H<5CI|*Y6{CzMf{CQ3NkF+44*8$FLplQZY9UBlvS+AJj#O|OSg`(TiaN9A6 zlWU1j2CU2b%w-g!V$T}EjjzW3434#A6lFvlTKA;aeppYKuFQC?3@aI+GyO}egCJqF zRm8z`Ww|^>Y|cL#Hm&E;+StYtnGZjn6QzXPdQIS7Z0wt5sUmvTA%us3`byJ-1IuUC z@8L$CiU5+DV~8|KM)m+U0u_1PDo8^+b{NFpZbEE=bo+uemj>|cm&mi~%=)y8$x7>* zkUc{3Iu3Bl5nnx!nx6dd%nU3gW3e2RF3|XcfIWTBN@|3~<5N0ogE=o8ha?R4xwwY~ z@udcRLD=afn~n`I-j;==SthJ*srIPE^OT>P?GL#Y)k+^9;Kik;goSgF4MmpK<@R#@ z_W{EdsZIl0@XbDh;OsWgNrgUOW!QHj2V4QY0TKU+TxS?%#e6sz!S3T8{1{}7T}x0n><_y%domFSj82)Pmi;!y%|r2$co z#Bm(9e8#kS)$b;94GMILmNG;kx*V&Uv8${(1+J35E?<-?^>270d0FCbG=@gKEkvgF ztaL!ba)S)uCA~3FA&{Q!7U&b7X@EnVn=u!@zV*Y3XG=c%@!#idt78(E_HFJRO+i6< zK*&o7t4`ooiixkKtBAeiVTPpbHWS6eJgxF+uOmbGwPmVXS57Wpx57Du62yPvjZo{r zG`7TL&nM$iAYT&T7Tq>|oAJzM;AUh;>!JS2Bi1T*i`ooTUt21>QZn+y99#U^Z(A z)BKO0`njEY8MZUiksB~EdU92pa?O#FP^mvv7UB4Z@riVZ*?j#7@sRE;>;P?Q91Xd1 znwl8v-}9&69`8)c-M@eLvkBc$066V>tFPyGK|cH(aSOF!yh=|te6dr@WdjH{Z9rV? zkNJ=pyH-0oGvyV~m4tYe|7?N9_cvjzPV|09!?&H)lws6qyk;*0ht+}tn?d9CN~%Jc zMw1ZK!(mhR^vV}oKm5?H>!@SR-s?DyX+o)EFUF_1=;Nwim)RF9e-cv8PE+cI4>L$RHHx)t{{QB?rw`^=`mHTEWMC-Cmf|+vxiLh(8L$p9OY>gB^g^AF1zkAuioAC-?x91ehdNcDw{zZz>}J4)5~<20VYgwfYGc( z%9J0s&L0-WE5~)7Wqx>QfR}}bUq$a^cLI#P`?qa~xVk(X?&LJh4R4ypypZ!H)O@NtCU*FK%tkiz@VhE2Ubx(jsLpyeyoesu_2>b@=sU#U>H;OX zsuLrR=?`%nHfXy(II&^j1z%17th5UYCfp%x2#z({k0zg}zu!k%sar1hHr#B)=^F)G zAZ>Uz%{-ou5Mh5E;#^W1z~KDn7Y5)5L=TO%NRF+NJQRY#PY0G!MqeQVz*fUxf&d_2 za0zDvI+M&^kFJs{n~Jvs#Y+!kpKaZ`buJW-p7y2uSn;yx?$Z1W^$^xH=FKT`&oC;9nb z{bZv5{V8BD?H6DHOtJ-r|ENusZnO!&@sa+jmDMYpyS?JNj|mHGXT`ghWnMq0ne0Z| zysGZH;3q%p_WV4e^Q(~G(Fx~SSFfx&Au*^e3gGrSNCNI}#L}|x|If!$0j7Uj*9UYy zwESkv1@l}G9VN&b`JpxtF-E_I=PKt7K0tn>ehHiCHlkx5_fP3PMV{rIslk#cB11~= zfysB@To&sJUd^-H-e~8fhYesi=Zzgl7+Gu2p5X@?_1i|QaR~}^lk|PA1Lj0$aS-6K zJq9UCxqoAeOB-}XsqqiV1j9l4-^GU|Kh}4AIlZZz<#Jl?&mTsxBMbEe|I!?*1t^x) z8NI%9zyIgj4o{ol4GBZ*8ke{)+hq76cYw+4J%>3*R70+v+n2pm`f>XGBq^W@aY3gX z(?|rjKo4v(VDqnoT6{ZGvi`)mCm%@jb@&Ej-|DF>FfabjkBgWwRABmVclYkV)d2c8if(g#$>8y;{Gmb%Yj07Q>&4$)#@J z_bFUAR`YkcLEGCyT00VwnJJ=xFNWq@sBxbD$hzz#>5DSRj+iYrPSO(k!p`hWpPVsm z2E-=zmn*lKhBWUfLy0OLX~$phyUhhp1?P|k>ivkCgUxaFFTTC!<(#G-r_Pv1s8#~(UIVmlrltFrHfNyHpj{Y7Jep*oVt zBjkD&MAfPM6>T~fwb?Rd;siViI>ZY%u~Z?C9M=R>k_d_)@yY9#F8~W1}sR@xOU0m z(u(2H>W?*v$<1l^s@zG&#mn=pC``6^A82;d+2>FtGpU>t`=CYYGSDo>9zju9=O#;< zg)thKOr#jIWNkY1?ZhvZ6fIz@a=YOt$WZwkL1tSRT`Vk5g#vC+$>`0}%4m_ll1g^EfJ2-sH9u zB~%DK!^&Qa+?}7&kRAY%W;PWX*#_v!5HjVr?pcm^d13=qmvyg$VDbqHq^@H2_nQQ~ z9_hD;2qG5Xw#2pvA72nwWSqJsTZ*o|^7HKh?3INaQII$yg6f`Rn`O|%T>PvSkQjWe8peOdcfy-iQRs{2LQA zIW97n6oeJK5heSO;mRK;^37%Sr4ET{GWPXW&13`qZkV*8%v>6kSzy%@)>lyO0a(2( znRP=|5^npXw+%ZLHdN~YkKL|taJN(z+#}yWiWf(5U~gK zOZ7U-NGHdFbiRJ~qh@Tt{XeXV6II|)hj*n2#GIIWkZ!ULMmW-!ZyNx7%Tai9iVE#o3=B=owIi0Sz-aQ%O z(Q{7H(K4GC=)_0YL9()$tbk=29zTF>oo@vQ(?Up%rn1 zOrpCkn}xhI-d(O401N?~;jxz_<1j!sIePa}m>qmMEW}k{$f4?qelfH-io1ny)wOJEmqz9;R zA1GQgn7^yO_(*r3!MB%)iqs;gC?k&Gb7Ec@(6w0ZqA%gG zvO!F-&uhe0zQB$Nl-@|bzw$T(pvq4gzafSYf8U3aldX+X9)xj9U36Hvp-^!gPOs@i z#PJFMyE)$9{}`#=CSvj+J^^9Hh?pb+8<}81#CtK&8aerdMjdEp8)-MLC2ZQ0zsOWl-Lz3gAf6gCf^f&P~OuRhLYS2TJXLy z5Y|dzb59;#^6Vj`fER4k_h0;fRNZ%6QvLrw{&Nn8jev@Z8x;3KQ*#GybA+a*W`*-I zvo5SGvvmLmjuOqxHkz85nVFT%3ujhVRAyS%8_T-1sbyU@`SSVw_xqO{H*WlK80YzV zJnxSU?{5mR6SfWm0si>L&OT#>a_6F;P@D%9q{&{Nfpg_LIaHr>$H=G?=LzrPUtX_m zw}7Ah#9|_dnj)hLi=I9is z70twBBQyv%`5UVlI7b<%V^f9vrcD`ARiS~vkt_@)aYH$<1Bof7&H=di4oF>j4e4|v zTkKBvjIg+_XeMM-%swkt*6ULqBBIz-tITzFF;vGM| z%w#-WXgb^|4@d>7)|rby0#$f;Q7wQ^l45KqLf*OTX6ot=(Zd2cWIDUC_QStcEw92hh?!bm!SVvPiqCQUHy!awFG>IO88cx zA|4!O)f1yz4tGsh5TcV`!s_cE(1iL4wF6EL7xWzE;FCVqetla(n5F@1;={F~Eg( zZu_babIn%QPrifuzGXVB`*_7V;%5I1^tR7wcQd8u{(S2{7bF?449A#TpM8zq_A$$b zBP`(|s=UWvP4Uy@Dj_3q$C2$<-z|7(VmGf^v-75nxC6*{8yMl)}ik2E9!!moDa4gxXf_P+q=~f`_OH7e!gbn zGmf$yT&E(}{`hMJEMkM5Uqc$~GYq`7UktzhjD35?i8NF|3L7gW_J3N>7BfuxAJ$nu zzH%S(LaY`lxzc5(-?*l;0BaU7{ZVg<^q4akM)RO)huTw8HvI^YMwOerKMSgRNmMlH z?2Dztw*7>D;7x2e^w9oDgjyDfq$Stquw?(+aQ8|vFw%uU?y|y-xlKZv&&sYc@oJS=r;GXMaoNqrI3M&K?|1{Kv2I z&h(zOCWz`+<(gC((X8+cW^2U1@>o%!|g+VKL$#U1yu{p{db#%D}3iUXj`kW@1O<}jR8>i=tMD9rDp&H7$Un~dNkwn|p6 zp=XNiWj}k%nXA?BO!lNp3I<545f%+VS=Auh5p83~!c1+XsK*=LaMRxxHjW8_M| z-J8He%JTjcT@Dqx$2ESzH97?N9%7nYX>#{Q&>xq(Suu9WW#r<0unQmRRZ`hCXiL7| zVw`m-KX6cvv$l*eY0BI95>j=Yhd&Q^tLpJbXF-$nKz`I0#g~UZGQw?p{KTT**N=E_ z&vU<=$IDv`e=Ul<2L~G%c>A=W;aJR64I}0Y zrt<{w9;Gi(g7FaLN{^%KEPRM-jP%%4Jn~zy&(aK7n!-W3b5I-^nay2#c=@~RkS#BU zKpL{uOTK*5!z~}1ta|nhF@RJHshINcg|yK*DS>Gy)De!W!UPd z*N$??QTF&n-1cMu7nNo?^ne~6fI&FC*LE00`5!^_VZOC<@EjIV+FLlJ=eeMF$*_L+ z7769(&Q}?c-z-BpY1lbaf2N)RXc63?DXP~|Z|xVz)3D7LMCOy$NniZU(p9OU0BmNK zdz;R$TJ$nlr*L^PPbXJ2Y#)SKM*?&j`*00E)%IghnH7Oepr;0uMYwJ-BhVUe^uNcd zXpIC*%l~|)0wn&l-<0pSxqgS_tWl+rv`dF?zrktaLq>XVn2bOxOxe(Y{ee*9-&%Hl zaW>?yyQ~ZN28Ikoqy(oI87a{Y8s>TfU^bs5i1k$oiH1rbXTMo}2a)fnV;A{%X-;5+ z+_#SxoVMp-zYOO?Bb?!wXPq+Ifu}H#Bq+-GPzvaRA`I~TV;*e$;Et9)QGKi>6F}!u z2(ndTY~@hF+tl(W8x}>As<&Fk03oLtMi~ve2IK^E%* zGj%XlhMt&D#ad$SRjWVYe2nG#R1R=d3UA4`^a4(j7+Vi!24rsL@5o=zGsg_qTE#G2 ztLloQ`y^@YcmohS7z{5>(TJ~RBr7G`;xS%dEK?c6zk0z;gk00Deo&)xS#g@yqKki_ z{9=Y215jky&N$t7exF_5(v$OER$?>XKFz2|wgM9VZFl^fr+ayaatuGs@_f}w>4wx0+jXg_BU<}E*qXB% zH$z(nTb=H_P~2t}27n3~W{kXl&HCA048ktC1=b1k!xgQfa^k{m@4(e;V+7kELtf`- zl-1Ll%>!7r2BMyZy{BEv)N786L*5L015&pL2CFaQTp34=WvCwrd3dyLQ3T-yLIs3W z1&7d#kZ|>~pGv}?9>T=k5x$Jrs7%E^J&qTW8-e=ro{AbKu3bq;5-wTEB${|x!iPwI z4pKiV>zf!9f&q1iPgqE7nBf!Ly(qTzl=$f5i-uEwD9JzM1cZUBR+2w6DANp_NRFG( zxWnf}JL=+MyeK~q5~4J%VCc=Bpclw-6*Ah57Q>_-+$hvibcLd>qp1LJFZeB=7-ShH{A)wYi|w@$u!>G;Y1G+@GS z>rK0G>#wqa@5v$Fm-2p|yS@Ly%Y_YHk2kd2Fo6F*!uTE-0sx!}P~nY2J7hgVrav{J zn>Wc-kF>pZgq~{{D90?$VYF1e8Wb9HclC#MHr^_>THZ|JB1k~3BlF^sIwq4RD0g9$N+rS5pblAObziv8#n60zKU^Eokgy`+uulfNg)^hzMr+vR)?mi z`a?3$3>o+*X71(wR-w`93jN?0*FcvOO49qy7q_YwYne!T=AQ1s4gVP&+WPIS3fvZO zb12XHsF&}|-Zi`bGuk**)kksxG*|EFNSW#-?MdGkY3@Fx2z7nn+8ZZg<*@<#t4A9O zwfYm%?%J7t>?JKS*_E<1w{%B6Y=4Wj>9$^CVF1N77r0 z6zS-5v@{ySqo)m%i7Zag`cP%y0Q<&!sT}f}TH%kOFwWg^^kT{62LHAM1b}oY@)%_( zr3UG+_`H$eW5HZeaMLlb?32-TW!a}&n^jkO)P`Vm5W#@O>t*dzDCMZD-wpv-Yd9ak z9*m!Si`o)Xs3sZ%A4Oyn*$*NXMP3_i3o;=|2Pn|3QIN3lcK`=(Jx1$=v;$@BfVTaQ zWjL@A2>=OPCAS5dx#JWZj-L`@&5CG(;1G+Zj$RZ_9T33#%mUaAYh}VXl|Y6-^sTqK z(a#KM5X!1cwjK<+77YwB^&0K;Tz%wP8llo~D%RlFa)7)}DSvz~f8iGewm2?xz&O;| zQy(rp(0EF&PUi6l%P2u^cTi1o&6vSN+)>#5jNky<>!|xMo??F|v-VoXW#fm#L zXPF2~%~4z7`7J5|^SR?AMYv1HuYG_f1T$TilifT7RDX|e*B%vSAMQ3= zN~E#@tW|N>Y~}QkNh?v#X>@G(l*1iMX-yg8U zR|`Aw5ooB=s zr&0_}X&h14HochjJ;r_%S&d7)I5c&|D&6Oko^UA|Qs$@oQI zewAPo07!)IN82cm8JpWuG1U6CZMk=^C5W+)e~BRnzW?K{H&No)_0}fSR#dA~RnV9W ze-KWF-Yd$J=&g;I=r;y6^(3O_tl5#zBlH4JE2{#;nU2Fw?kQg698hx?N4OkkHf%8h zlGqXeQ@}1>Inz#D6)JQom2u1@+LWB^LM)*JlY8WZ4#?mV<9o_EBM(`n5xx3l9S;pN zThVLT{ZzVQg|~%Fx1S!YnVUq-C>Hsjmsp0mD*^o@U>i%oAvqexW7tAHFdahi5Xr+g z43x)Fj&Zy@7hrVLC$ZI5517!wJx$It}p)9kxH>0P<23&;#4i@Vx!CJ~8tbiwW$>IH}zfU3tI(PX94Yhbu5rYlJo3vjmfqK+|fLa~_WAX&`Hf8*WJS&qRorYKe54ce}OY+(5vywWux!f70u8I+Ap=7{JT?lFeFFVEg+t)AwUx9`p5-0+yH`G-6UQOacuV0xu5ZYtE0Y3fDN=eAwWnl9eCx|M_yoU$4ar}kWTePZ z?sc;gm(=2!3)+<*)2#^g_9uJMAWr$kG`J3e=8p-Yta@p=&S4b7#_Pggj5%HKlJ-W< zIr0QYq_brs1A5SP(Yf8MDXL$)8H!r*$lR!x%(0p7AzxCNqk}^IRiE4ysJTtI!T6zo z{W`~oK~_WaQ3mJLsdvKrGVd5V6{5=pLeu3smpGS_S(BiC2kQF+{J}}yV%TA!gYuiL z;oU?2qo7Pu*CxARcDx3XEiln+J4cS%i9$05cijpEw(yA8`Pi1Y?E_kjm;o>xz;wRa z{Wvd3%Mu}6vOCJg?+`^%Inca<@>52%)g}K{QtrtXxe2(w3}+W$<&M{>YF)>8EMwmk z=p$IPMXF}wHw4U4l&M9#gx1Ss8whB~j_rN_i4&cQ%~fVuR)Jm}XdYX~MzP&*61o~f zy?Ve&r9kZobmFR&q1i2p290~_b=h;Eo4UwP#i6+WK6MBlEPNuIccu76T^F5#+hsO-1iLSFopw zZkSt^&KAWV05;7Ma;xk@X9=6A+QDz41?hKMxs`%+h5<4GPj%eFf$CeYtlX_l&X=WbiG^(++q{&7 z)x-r?*9!0me8HJyBJk*wlWr+6U#y(<#tJEGt&Y5eRBGvjk2eRl7Mrm+DfW_a^cjds90rXpUnAN{J6NNw(jz-^v!L82E1pWnNYjH=CR{ zQtiUuqoh??Rg;XRfH%)@n2&{J$euZXBj9pos~Fz_7d9r9ht^q(e9uiX;H-3HRG6|h z8ms#xkicOn4#nSpaSZ;fOVRBG$Ee0b9ojueo$V+gY@F2mg|g7G#7i5BXQ*Exo?l&8cffNb@QV z5o3djlds-FLthUQ!AyWcU9#O3kadBC7R`S;V^&UX^T>)o)?W(BCaXbM3O*2n z`#~-I)8hxm=w!iO>0+hmNQ~!$OSe>JDMPXz1+)$fm)MKB`F|OY&0`tnIQvJIhN`o4cSuTZC?ZZ zPFL5SpvW|oxkvQG7r;i@_>l1<(^8)!n!{;6lg_Ptv{uaQ_d8E(B-*wpbCQMa`4F zCddLHz6GWgiVr9Xi)L2`cgQB84b$$B83&4ISLY>i%@biQ?b9j?=X;OQ@f;|tbiH{Z zYJUoRUkBYex9hrsIMs=AdPel_SmdK>B>RsCzN99C3c@&5<2Hg?8B4mxBdverGt0n{ zm!l1T+8Nft|8&-xg?GO9w0m7)GH;&r6WxTCF^ z=Z;p^jVR#yfHRbrOP@T&9j*nR-H!FVO`4t6aFu63!G{edFQxKO+zf7HT}v4udf3b` zl!I=VljzC444Jhs2nOr=a&2RhPb|CmL;YPy&+?>Nv!RXg*A`r(mqxd&>T5zx@&*jA zuj%vm2GBR=0b>AdrDEuvDZ$!YG&ob=kk=Z0auXDxJoAJF?d6~vCR4|~?H-ofI&I7P zX0z7mho&Z?t;wKjcBFw5slW6y5#21K2ePi^azb8|nrehKL9$Zrbh~wnjk7s7@yfg7 zD>4t@k$vlf%gnWbJAqDjGRhw`E-t)q6$XHVW5+SCdh~Mg460zjJ;!|upf*;w^R+bv zaD@zOw?GM^qW=!ijP59*fNsR|D);{XAt$gib!{|?c*9;5pE zNdE~a@06v^OEnF0g+@Q6MvB`l2=SZ%)>Ma&)FdkVR^fK81^#Lwab;W`*zn#<#RE?s zxxL~5SfI9z<&eKF&GF5>%4txS)z;lOro`pB zrhNz88F73?&V5=HjH(Ch|IfF~coR(x_ocb;Va<$xg4ufsXgF}d-;D=Yrj8bl88q-=9s2B5ro1eF$6;D=dDZMDM zK}7@G+^L#Dm*H*WYEGd2*G|(Q{yD@WJQDacnKRqQE>_=LQTm zS^47R|7=?oQP;JWttfpwRkZc`ve2cPumZE2Z7+O}oBT;VDO{rS7%q5Qu3|%XzpHIP zC`7t7iV0;)!^Gje7qH468O(P8-QIsC{B8?-bpN<#A+Q0JB72MX7@z%58*d38Stkh(y z_oAVJ(-+{RWV=*kRMnwAl?C-UPIZUR=v)MY6}5S>>fcSSW4!N<3yY_C6m_YPna?v+ zRidN7JB|83h)jIeq0!F(ASLeEEa@>H12JmzCs$6Uof+VC8Fc_hF%R^W9JLgj!XX$Q zi_-^gbu;ea;`GB8))c>2kIQbisMTqGiH)|E{%7<^4-N~;;_0LXfKcQML=m&w*;-a5OVJ#%rwm8zX_VB zNS14y<+*zd02xW^gBb+ZZX&MzZhpxaKT*^sA4=Z_0u4a*}Pjnaw*a7_R98v^B`Lh&OPU3SW)5m zmg6?bGnRr36!S1C1)>9G%D-Zc2M!dX8*3_ujzE4x^bwH4%Eaf zO*JGta|U~Gb^sRuEs;Go;C5$g(DDtc{QZL$&X0R4LP6 z|A2N3Y6$h#IRFw^JBLez%!BO**Jd63F@2n>(w_I)pAFi`gnG2$Wzkp_4-4d`^)3;? z&T!UV>X`4&f_x;Eem>nxOE4zFJ*Xu)?ex1lBNrD@Oylzv0l!jEeTUS z7`;`4n`aheR>e5B-_Fj>EK!M$)9M8F9Pqx**3k9W=}j&7mQdIf_uI9Ri2-$5<%Pzl ztDNwqjG!dDwHxHne*0*SJWSCud?<+!5Onm4vUs;|L1tZAHhCS+LUqiiXLd#2TMe9j z0`Nd6GYAgxn4VD9hg9x0H0if~+3@)hE@a*)nzPXRi3Bem0UpjB|7h5j7o6p~PD89X z?fYwbQur04&q=PZz!fsocX)Na%Ttlwr=g8|;4Qs;2~)zC$^5p6XHBsip8_KM)~5&p z;;eBZ_{uYzLNz^Y>o4;0&`|RV9JPgDRQECH7q6Uw-~^xLg}e7^Yd~MzC5)kC5DxJr zt@$+vvaWBRGsXEN0Dw&p-3bIerf!MNh=&vy?YKT>>F$ItfKbWa!6>3_HqW|C)t9GS zcY5|K#6ddN$h&Lmo8@?c+9Io$kvYJmD}~+7S4BvyU)dDuCS_4QDY3v>G0oPZ-jj?& zz)~97=+p7=ts(%jOp+>1HBU-ez?V0HQ6i>?b7N62wMFST#kLNwpl43uQJ6zn&4+n} zEXt^8^ZS_ z$6=`9mdKwkD{{@w7NWK~mrbhdyG#~Z7#8&(ddoD(5t;O~_wr6F-Ey1YgOS!aMqU1k z8B1V~>9@VGN4#c{dNSIQjrO_zD7?Zs2hinWMu(aYCss6Ww;LH;T2CmSI&sk|^@!6>vCL@SlwByp*eZ*|Gu|c4}8!H>uHlT@sP?7GUy44GuYRIcw z=}*ts3RT~D)Y;=zZe|1ozJCI!)l3gG2n4RzT-5f)moT*Hpy~VN>p<7REVk;|EMrqawssAD*jRxwEb)~SeT3iYKj8E5FUz@02}xW zonj>JI7Xbkv`=f8i`C~x!U+Nt<=1P_TZz)SvJcV5y`(r!+|u3d54nD8l%|#S7}WO) zb*W$s69LF9VF~k)wWmE*M2%-arTs*Qd#8j-!IPjX=g=7S4zzus48#nlGV5{3)oaVW zW^$Z#`dZL5_pPWNdm*fzt=_9UCsvEzI&at|wg7O=Q4}NaZ8(L}tV6oS2 zAvV3p$x{~yP(d61=xyerr`KtHqa7OH?(WPOBaS=BONvqcJMbjZkg zGV^s?dPr-I$m$M_4Z0gS1Du!5ET$SWj=s$)sB2Q>H$ z_|dj7TtniiopG(si6>exPaA;eYzEpyQqvkkJv241ZD}BRquS%I^e3|rOp}2&6vGj9 z7Re*;6XUW8ea-)LgqiIO(m;&`fS+g#e2hc}Zx1ML+=dPM%*3Irr3q6WND@niz`#4R z#4YDm8N}|#mrjj3uaa094ap~P48*{a4?y|HvX`>}fPaYrXSHOz#=5_Y*_vi?h6Ycd zVH=Mp+d5E%ntWE3P8$$BV=@nMS@BCy#zgbXXuO_JDr9CD;1;v{6oruv;58m|D zUB_xB4&DraRs2E6m^ehYEmh~Cw-AWsk~8g<+b!5Zwk-l$i;rCUmIr#dHUg*812$#t zx{ZmY7O^BZCkv&2>#gS$|J*xs5nYAATIFE7xbWRaGZ1fPQFUdse0BQb?M**QzjbZ@ z%gaaxpm%T@MOS~v8Bv9I)rTMO{O_yEyN;-+EdlCjiTBQbJ!4&g)t^O|iZ#uCo>ni& z>v#W`a($*pr*+rYiPmrFS0dXstc;{yvcxCctJe!&{rX4)_;EhX`S)8>o*4$_0O!6E zI$V`KYJ`17+#QGO*`KBoG-zww25xG9PAMvwy0+MJb9dj)#eAWj+-X%r!hq!=wlA)q zOUqpdeH3^Ozw&ol!QF+BzGGiwN~fC$zl^l;6^i+9|LOg?Wg`;a+OWHGJ43~Nfv8Qk zo#7gc*|X<{B-T>hFYKaKbz+z=i;-gsaH69>N;qn4jDFp*05Ft@c06#)m|Mb`78~RP z_2-B%&>hD)9EtO=6co{88JMv`I;|-FUGeTA%!Xd1JW0N>wUcqRrSe?Oi7Ney?k?*( zm-8Ge?1IplD!w7b**>$XXzBXYBC+ncVog0_kl<58JgjXE7%57e(@M-rQL6>$)mfk_ zri^5(jXFW#8i$Mgt$VZ^{jTE3WPVSofQv!6`mqkt34I)ZRTO%_gj8-r^e@f#FGq~b zuTjcx_gWZ+_t_s00cfr|s%51EWCT0d1l4XFrW!CFm?Lnp$+9O_@J@?5o)3KSSBpTmOXT zlEEpf&Z~pJ%hfT=e;UlZJDv_Q7s(HX?E~8?V0KYbJ_l1>h$lhsMF1%s8hI%n6$$k-Mse+ zO84<5@5kXAcoIdipZ18rOo_LHl%7@k~dLGmN!~hSDB98{LTaW+ZMM+c-1$cg2n>1 z*u5q^E-?!ki{;{4PUa*S6;ew!Ok*|_5UNTsFT+5Uf>)d+DXwb0a9%EYBRTM_3a8U? z=+Wh_N@kN7DBi_bY@*7BtoaSzn9Q@$hz>+X0|x>%-o7s(uZQqsNVpx8!W4bV5ni#?%m0bhQk+~fZbzEcXD0}+bzHDL%o|eh z4(t$n%N?4^McZs}#M#A@0>IL`INk&Nf-B0*f(PgDI1gcbU6Ccf5=s!K(ob!j5uyr@ zvJyByOGUT$HJGuX??Ye4b|BKW@E>^fae4N8Aqru&z!^^I@~WU{pEG-?G@+o*e?lTS67xt z#p$&7;mHZ@v8C5$hP+;+db7;p5-uFWPa`Yvai`L6c^(uUO7&g&{PyO#F#f>Eh*|YM z{M9W#<1mUVE4ZO85mk&^geQg#@fJ8tlH-vfB-{nQDqJYq6C7 ze>y71gKVvVUY$TuHP1zT{!)d*iM?wCF--RVi$uvAXI!`<~IO*Xz z2DyWg+7V=`+6=X>*)2hQ8R%e1Jls;g`x$UAd6@=VZ3P2@(qYMh7OorgU3iqa5xJ=d zw8@T4DHYQluCc%rUdN%LBmG*JzEJ6E`x1cp&*{50H3}-j^Zk z|4_1M3K`r_#v;k1O2Cr?*R2AEeGTruo;c2A(t+m*)KxT=K`HOPVW`XFJ$FYVdlwyD z72L8a_p7BUe7FvZiF>d@qbuQnw~*pb&&CzIN9YwAi((&?Ufd%-V11)>Jw)jkn_HyM z7#}m_(|jE6ih!^ZhjEP8ID=|-eJo^bx$=$Lwv>vkWOn;?VlPOKAC7c68i$G<6XQ>v z)@cEBTjD6w5$>8XL@N1CM1=Nut*?hj`nBtd|E)`RyvR`p+QO@NAC#J<4k|5n*fHGb zoaCzFk)w#(cDY;o)xI=ulgiA2tKBEO#f-;S%;GeMM!hv23(%!FM!hNiDh>a{H}T1e z0ff6Hbp2PaJ<)(`3wSo^>IyfUWb=Vc_ykDnN5Blp`;;9EuXL3w54f-ID=QJjir<(Xu+L zqpxcXyB|56Y5J@5(eT8h-N4!q)Nfa4b~ zlM=^oOaARw%*FByx_ZoSXEMx+|6ahXk=Gagz-*+uQW%iowPrw$DUg+{8#~~Bt#E5C zaBpTMRbX}GM^S{eClwH%)WVT~a_b|NA7D`^4dv`{w7Ff>+hTOOsgphgpoZWqq&Th4 z3b#;{k${O+2mue#89Dm01n}jcV;A6Ut8P>_cm5QtI_YSWa*Df}T9n{5b0oC*K;{fA z6Rppm38hNg@`}Q{Lk_ z5eW-t^uPLD)w#Jx5w(RHdTuE_bsyeCtX1uB)8Ds|l)KD#xu)%BTC`t`qvmwMZGP$F zsC%#Z?FZUkq#NI)N_pp#woIyST>TuhCB=ycl2_8^_cdN4U*w=fuDrYH3PK;k_P|(la6*+=82FQ2c`5;fyX{Jc#4K5t z=Q#4ZF;RzIzN~YTcowmgVV);bND{E86uKRnx9Xj~zMF8g%IId3zD6iw#Vd2DQ~od_ zYDx6g*vuZ004v$=BG_s+^5l7*kaeezkkxIr@qKE1Mr%A6`jE)a=`joy&hJ8SaJ_77Y23v520Uhx1xXNfYuk;ww% zjNBhf@01GOAvt+Wn}&m14Bct7@s28&Q;B6CG}D%0^zJ>te!_KCs|CGE8p!Q+7_=7?#b5eSVdxj_ZL^b^$^LIc~uH_zQqr& zND=P-*{Qnd0Z}>1=K?FbhiFIfuv_-Ms7-*LOq_iBUBdrP)))~fh;Ed*Oa7}})t-z=$xPaBb|)kSN6Y|h*L>Cq&Ygg_|?ofscL zD2Z$K*I-E+x$rtyt)5J3I(1Op@0D3aB%5vS(|A=i&mrjV)#cK&)Ac(0wAql2x`jm>av+WN`$Mu5GKV?SeHk_%E_DMVAiQqNk;Sq*S$c&;?)A;X(NH62TCaQ{$IAA%TiI% zyQ3pBS5bLVuo;e&a^bxVrQm7e=T^Hg&2)xs{Hti&kt{%bMMx~%%vEB70w0KXvqC2< z{)%Qziq`wMiH8je{wz{Ydy~Bt*8ik$Y%WyUur$#(Rcub7wXjRxigs#~(g>xSQ$wJM zhK?d5&jj^av1V*C=%u5Sk zo5Ho=9}#ACNinYj zc)+O3O`}bPt1W|c`Rdv}b>y?5TMLUaNS=k>={9oY+NXxv10Z6KP-3+42rp4f_P}La%p@*rhS& zI6O`-x;A-ruS_ZAFkN5eI}#Y4x0_OMM7G?-<>#a5t?N!8x ztyk6wkvyjk1djvI<4vM17X#prfjoVzrI2-wxn?w3S@ZprP2>+d2ou=r!=6BVADr*s zrpUP7m6cKS_US&*Z|-_@pxhrM(GnwXU@zV~P(U`1D zJt&ur4@6W=E-}CwNhHg0E8l}5Ydh;EFui~!Y(_2nd2?$#Us#*PL2apnX`;+3ha4tW z6anfT+;3UOTfZXe+0dtpV?pKl2--iPr}j@h)weLEr1}R|C(gARFIQ?Glq}0g9z}_F z+TdqS9}^iVMXJSu!swn(i>A~TgMVos~j&NcZMPQD+H`Sh&U;J|p zAg3dYl@B?W1&N1RKa?H5NgL%@@))H&RYARyb8mS6|;?OSL$}l19f^O=0-|;I7_S^uHJ=zsd{KO zf*I}ivc9z5X{vA)$~__LU1w7$+e6I&`t)=4 z60|5S6lL%an+v+|XfbSmkn;nOI&i=uHb$>N0RmAyq-nEB5RVKjs_UuXv@X^;Ivog+ ze5wx&$!%P3Ej?h>sad&q>YtA3ASb>MA^!@vae&4o4QdgC)dA%~Lov~n@&DB(JznSo zx^k%ENjR5%rt-*F9yGseOVRvFK|%A-rM93pV%*SEE?rTWwHc-Fun+>UxRmXMCtNhQ zEzMr2Da{Bq*UtE=A=oRwuhvyz6NbG_zZrx{2k?D-jD2+=vLsYr7w-7m(5tGJ5g!t0_)mLN z>yrUcTjzmhpuieZ$TTSO2Pi2IqdrIiy%b!xW&Iti=LnA^GrC%QKWgrtDI9}iU-st^ zQoY;G*Qb>i=EV`2E7x&Z-KW3Wze3}mZ;Z0H$_8a#Cw+7Zqb6vNJ@=*89^Lo+ErI{# zh!+2$sAbg&N4G0sK+~~3+4Dj!FASy_J;)a%@4)K`H~z!#H|!48J()>FuTD7 zea2>{n^})sE6ZAnIU(9ZkbhrvaS{*Jyx12$1M1p#(inW^`W=h6>bUzKg1hQ<*S?nT z{@uftLmC~&ej4v126DUN68b8*f33$pp8}bI!bzhL+QP_^VbO+R5k%u?x6%Fh0e~7X ztT6D)>RWP#>uMd~>MANfr3fSqEvdnNsnAF;>T~+lt62j8Y_X@b&z%(b=>zq^wnW0V zgMYaEPZAZECMg67lSk$L4)Y?L92$*<+8oq-&RBN-GDds#Y8_gy@eca`en*;8{k7;( z2#dUPt;|Ir!#+g$O$RLcwOo6M=@-$5YX^zJ0Wm2E!M-Z^SJ1WzG%g2#CS~N$GH03C zGa+C&ml-eb*P7HXOE0ANbKRKP(;PAo4+-?=N!zjIU-)J17PhD$3m3*#PE98Ui(6Sm)~M_t6gkj zzlME}hQwGs3AK68P1G=Uri&R=B>mJ&%q-v*Pk+t=DT;lMbcC85<2C7k&SsTAOTocx zmUr}sZ0h9iPo*AWRBN(z&yF=LYkCpmA#a1 z-$lrA-+jKnd~e@>q1&r#uh;W%e_Ss+!@`S!yW^xo+F7J}&JlYJKtzX~dmWog;18kd z_Uq>av>5?u&uuP;IiU8tD?-7SQzqeNB;UaEP)2Ge)2+0u5MMWPw;G#6jIIcr^s2hL zGQqZI!7>aH0S)0;8>a`@U|O4v{z|((%O&)JrmUfz)DW$x53q?S#Qaw~;NRKD>?h4( zhwNb3he<7+9|R& z!f!}QIlzHZfD6@nVtF4iwJU;Jcs2V}1g%LE6Z#ZrFti`Z_z{aDo2VtLt0v=6yK1?= zSNF1FnQv*Z8?k4V0SS}HY(9j)!aDmpecEBk5V-5q|Cob z4||8BaX%LN@#K;!1lDvqNFYmKpu*fK_u72hzSz9ob@7RZZ~@|o%*{BPe^WcJ{-~T~ zv@-1v627UtF*M)i!bc{;0cbiY$fGP+s0h~y`CgrYJj(LjK}HpuJG_FN+cglj_{=(h zMHMzm06Z0B@$RGTokkDlFV1_7Q#o1VuHv!@={#By_O7c>Gjadx!uB_GQXyv`e){3d zwH@305$x!~`nu&$Qa-73`c!X=@SkxgnHnA%zbJwYSZY53?_HO=wB7INxQd%qaN% z{*Ej0%A@ydda!w0F87Zt6-rtPP{1e$5*%o}eky|E#dl&#+mxD+Oxq>B@HDO5o|J&jy-FQbqm@g8f9reX>yN{450S;!9Q!#p?;~ipxdV!0>t`{7gvV<7&`#x^hRgf_FW`0 z@@Lb;0IsL=;mww|o}TCd%|2DpaF6hbNwB3zqqzU^LORMTgdY7YBZOaub^xS8gWDKv zq`6D#5Ax#3RY8RtmVm*3<$MDJ){YS}0U9&-wXIOQVTCtWKK^V0M^MulK_rdQaR-*~ zZCt@FClK0EUiH!8l;WlJHbKu`xp2C_J!<|BvPZOlX*=NeF_Jo-1y*AS0`r8*j_0499EE>8!@zd_=RDuSyze7|7t{b79JRdE`?D!m!sBxu@t(>!Mc zIOtgOp&*q2vuN2SU9 zxF*r$(2Nr%2wXXOM8o0k#IrO)OEKX0w83oUe`t%4OLA$72=Xlq-V~eb=>=O`ZU)qy zJ_a?5sUbxlbr-;%fIk!p> z9k#*jw||)=+1W{@zlmDLvUnc;+j>acAYQ7>B(ZqtY~!sRmA<^-ww~S7&vyrwDt&u` z1FB(Ygy`Sj9iR!OVVk`TiAE_fP5sHCVk=*}%ytouN-mw&{c1QhXqTb!l@oEvY|hk6 zt~jcYuj$N42UebajkAp8X9j!eqz4c{&{FC4JI@)&o`?V>0CUyA0qQP534p#`J{#mt zh&fIm<@cy|`S{7>6%G47hrV;Qj&pZU-xPo5@ZwMFuBjZKE?A9f zZ1su_zm3CZ_&lpG%eoS&X5Y&)+67#HAN67j+z*%yE7X1OPQE;8t{=-JqlDpkC#Wc) zy57=nOt^<&!5i$WW`CUhSh#>j%@4H zEJ08A)SlpY5OZmP{aWO9L;%c&m^5ZC>B9I!#!`A0C0QI6lIDXCwKQg`n$2Fcd~VrtMI%hQj^2zB^vR# z`0LiqJ?44cQ+dJOF&{lE<&&fT4a@`FH*_Dre%p65bVQ(Ga%Co3T`yk_TISX1*ApzTygtMW_UZ2uJiY2mknK&p%s}-&-QL$%sf3L7sSd51 zyVywphQ{9@frj7);Qjl4HC_* z-mMBoAHB1X&iy_OjDG$j(Q7{-Fh=$*&WSIccrw$xd&d5=-=0Qaxvq0|?#@St=bcO8fE|fhDe>$|`TXw;reK*f9IdmeGT~@eZyn5^oF*b3s z_jfdN-u(-%$Hm-+KQoN`htTs~K22S<_Lx(?d~zv35I?pYhg>Vre*)LzT{{Db$(84# zO_C~mna^cosPPC^lpShZAC{H6Kh>fY~!nknU*k3c{kKxWD-_CqVK1Vmuqz;~R=HO;88w_)G(x{VQ| z=#FPSs@k2mo|^!4-JqX%CCLBpa{(H+xLeT+)78x|r_+ildz*19q#k>>6!PBy`#;Ht zDmxj+y4?VP^a03o51vHTJbOQ-0P74K2}JY84XsL{oWPhqe%j_*rQ19oSJxp?w1UQ> zOwSj04^~>6FU|Wst_i(jYeDvEEn!TUO4VC7)y??Nl1>M^2KPOz2Z9a;O6gB@gRuw9 zO{dg{-@*0uB3_jnJ;Q?22==%vo-7ghE|Rz=S26N~hdA}qjV4{40d#KX2P zY_GZ`7l;FV^A58vgr2pxk+#p+!*}s1Bm(``7ve$Ap7`&vvw(^n&u%Xb1B2$?qOiiZ z2Qd$amXkaxB9vk=1Z4#=xxZ!t6>MbsoBLbT-BG8`ZJN##1`TQm*72P0>u$Ge>rIQM zXI~VcI~|pJ=f+k?pk$Ldq|+E-;K&JL- z|Ft|2sQGg1s9d03QG<|Vh971BecNFA7zKnr{GO;i^VjRiBq^9;!AC&D_|i#0H$R9~*LeR)^2HDXO4a7DEw+!kN%Q)*LI_s=7&&{n~dp7#Dxs49x_ zSu8~;!9=`80GUgXg(a8CptoIqWDSIhc=7~4IeTN6z7rf1? z^ke4(q_yu3mzV*GJl(#6*FW%hB3o^@E79LsD&I41Pdnz`Gu+kAIm^tTn%$>JUMc1Q0RzI*6;N?=?W1jOwf7&L z{io@aqEn~OJw@q(T#x)ae~FnR8zM48tk=D>ApopIbdmMCC%1J63G5%; zvSGM1ZVEpl>nnTVaE%LjV9nf}giLJD{zXDvA)qdMW3{@fWAV=PeCNxzfyjs{2U4Lv zUQy;1-?z3CtrbJIgr<#swgfDEHuY?N&Sp6~{w;2|r3bN7y3FTWCdL7HVb=NOW>_I| zVBCBA@|f6Wg(je*Pu|e1?mI*vzn49iw)d_xeCmjqZ(%;ZVOa@zrQ>$Gn)^4m(Tkc!ZZ!pD>kkB&Zf0 zK33)uB4X=VQW7;zVTJ7^I5MSw1+9TbmDqfy2yx|OB{)Bbnpvqt&UcyGjz1413J5cY zc_9>jr%4_rw4^l<@@!&gpW6aW$5aIqqJ)f8QT67r)n%u(Oxm*K{tyoVKRvzHApO-86W^M zqCc3mmDzb#x>K90W9X&IVES0Lb@Y$x_~Y+|Cu7@~rg>@9xNsh6>>lndt!KeBp3RHq zSEk{w!*)FSsljERF||v4Pne?6u*W1s0mrRk^~f97DS*rY1F5cBA}HB6;B&y+XS-!PsfF{R;GsD zXL*@!BJo*dn~vCq+etVcM>k$@6YGCgQmefMuM=%%*V(?wd>;SMUhviP<3O^*sDH>N za4>A%jYU?C4`yy^LpPtZ=TkVCXqkH+Z2r}Wd)_lHp7^46_wN!&tSUC)p5~b`L5rl3 z%Y+AMTR#tC^pU38XK83GuB^sz;by;y*(^PQ5fDO@S#z({u@mHj*fit*0P!Mf9nGK&A(5<#F z4Ki)QMos6uh@X+`+d$ zLOK4jecZgJJe{9m#2K%inA%B+t8n+X9CU2o5#)V;e&LCE+7{TcD`w8Et@}bdSonYb zEPefH3GdgviQMIak6bdwxR?LU8L#3kA%y@hz3{5)M*3dz{F{b#s=@8MbvJ0=)QGUA2smIU_Qq>gwx4gn zCy7^wSgU0GkWO6WEHPifA`?n5cx6fvzxb~aFEQ-`W${_D(sp(8rR8ua@7Ld|o9|@$ z7y5tyn-tEqOl2Bvn9+;g1|Vw`aGtv#m0jix>N^c<7)qEua$D!=6;hwsgjVnPZIY0x zB&t9haTJ>RQ9k|@Rlo2}S1!72yYgwuKf#vftClYmGm!^6GJbSuMaZ@j^!$~wnBOKi zQS4%i)#H<5%(Z3;<@cg|fVM(%3-!=k4SVx!E{i!#3y)w@T6EBJ+aSv!3@i$6!=u>A z-ER$!O0l# z{P2JMwKsi*;2>|jQc>DJcI-@L|06U&Wl%D#rbknSkI+rohD z-KX#m-DI!u;R1wDu3xXcxLN4}iFvTCs$9|kQ!i-M2{6WO*95Y&_WsPb9C6)-w_!~2 z6akMJV#A!H3nQyoJvatF2%Lj*Qf-*W;>tKEZTg_mR!yg+&LE^sa1~po1>NSxfJ_v0 z!+=QugzUIri8}Al;4a?|Gl*aB%6>NL$YRx=J{R(u404-_l`1t#tzot3$mOV6g^jtw zhElI1L*UcYG}`nP>(wYpWaAWQW4Dxn*AJ3g#CD`5B(;v*sDkEWfLuootLrgva76Hb zZdW5luie2M);WYuChkD_SDOto#gq;Yx^@eANJA_TJM03@HvEt7%GEBTmGfL<9Es&R zVz`adq_lQ?m(u}#4e|VE{NGL@1~`)>_}6Vc81_Hz>yy~6yV2bsGJNp(&eYTtkPzN2 zSF+0T)~JI(Y}K1ZBLg6rXMM}P`#cV^S)e;K|rr3 zVZrep2>O3ymopFseEk2&E}_gifcZq7mewtY%=`=gFWJR)FD7npt?S)_2x4BN)yVT=s+slj6t%7GidmYQJz@+c(U}I#YZrNh(N-S@3Q{hYgBgW(Gw7E13zf&O835gNzZ%QBE;;S@7w#Q3 zXVqG^Z#iEBhg=SPnpZxKcdI`2_J#GvFYCU!vOoG>d*^RwxfOxuG?h={q|m?Y1E_Er@KlD6fX#(j-XNY_k0) z1T}k{V}yW~!-A{!4r0S0&K*y~7CMKpa3n?!^G)^Y9XzM~Yrb(pg`3O=X77O(D>d|f zfxHK1d;knL8GFN8oOoa*h;WDf-ryPeV<@<^$B1D~!3u8r#c-IY(V=78_l6p2^x`tZ z5$uKdDzz4@F)ac#fssUQXS8FUW;dSV>L80+9oe%ucFLa@AfD#E^ez%&RlyWGXKrR6 z&)6&On!S3L2s*>kv_FV-8ck#oI8BCKWyo04MM`-1o-<=_0njN-$pV5v8;J^|Wm{?- zItWFEn7ta2PP6H)2l5C)p)EnYSp+gStVH~>^dexNYw4@Os&MiaK!%b3Rok-LG zh^Mmh{Ix?-7+8GWI%TAjV481;xlhll3A%c|d9U0uH=t9BcgwR0V+@eJ@WSN&`HRR& z<)iW_>#V1RzN6v<0BJEP1CdFkLkfN(ZGi3CKNi#tn_GS^b1=&m`y7w;{(RGK$V&*a ziYuN60ZaKtTRfHultHHR$_Hh0N3Jsr#*>%kOi*0u%3>;G7;R8{g7RopyjUy@LQV$~ zLei)i0Iy?U3>mm;19O`|q)yYM5M0Aqd=Ss5wk0{#xBv~Rk{zkN$gB<}3CDeeGO@x; zd%4*v6l)0+D(uDyi)2giQ}uH?fvxA45vfv?UvZmE5Fo^PeCX;w7|yvMdX=%L4>rs{ z*m>DQ_h&wXKMgR8VI(231|Szv@J`xFBX`r#K`Za1hOT2s*rUkXXp*I z*t#%|VQGk#$tq-iTTM;Z>EKLY!4GH{3x}|5|CC2X2K9LmKM7bj{E)a#8O*Q|8h`E_qVIwpR+g zuVA)QwXSVmSZ5$tJ3DTJPkS%#=wj1q%ws%V&rLMggln{AiD*p%f27+vmzO|GxSXUX zxnBcbW3_J`V220b+yK#SA)pIPohVNPO<3KZZ#rPKh=wFy{N9kl-4h#(PAKlj$Ip0~ z@u_+7e*zWkH_H*UyNt8ktg?&dh$jtcEGQy&@JRIQ`1)rxRNmy~9& zvN13i1cb*VGR1p#cq)K;GMMX*oF~~dqFsM(5-n#oei*WftzB)jA3gHacjemM>t!vn zk@j0-cOF&RsBX*7dw}o_%?bU9SCdQ6KG5?EX=9%mPQt?LxevOw5>V>!W!(g5q&MJx zXOSUg)9Cp~u^CYb@-?=`iF!?zH8?D#CVs+4bz;myHDpW-VI0(UUlNEjC+9Zf=c$i~ zpJ(5p^{B{kl3Y&Whb#OPuoZsW73hBww9D&k?IR@$+wRL|kJPeoP30z3cVwd}vYFhO z(-WtX5(ZSv43T#i1p;X)qT9C08Pnd?kN_q6-*+*7?olZ{k2oLMUb@v8F^K7}zk&ag>_8mdPm{tS3rozgRiFNQ1iiahjx8JLw#pH__x$9( zP5Aq>@vxvoA2LBqFnv7u@aTFgcV}F&@e?W%l)dR2DlT)DY8*D5dkBwI`Nm3*QHrwQ zniDg^-uU}ym~a1ub)iufDyMZ0Yu9i0j#e(*XZR1%LYEHVj@j^K3836|W3C9Yz6Teg zgzNZ?CN-dw8s?4|wh*8V8eAS|B-h~cZqHdL!e49zr;1HjX-o8?be`H($QPKYm@L3R z)I*y)L1(qVCtv;**67NqvAXf{82oq@TlS~DC z3ys{jcj`O=F0EAd3<1q}eukq3@PM={;D+H6$i}dLJP}&COu90Wx;CI;Wq_3)&9N4M zxI8XXWM1ASVTeup2V&NYGA+d%k5$ZDV;ihMkSYQe&SI)6BEHtHun;SZJY#NnEU#v> zj)pQ(9&XKWj6Hxv=%D>9=n<2#QwZTywEt8TWG7Iiqa4thk+gWVg#71JLC1p?GaQ%( zi@`)N>3{Nq1oldTBe2yQE1*yj;@CS$uL1dD!aquwa)RlhM4H|hIWfs6M01$#h(v(Q zO^I<6ZS`|kqN2PhU#!mc8LznwGZT^6LFz9R;~SdTpki?xLPnrgrkT5~hMG%1^c7vIT9IGJc7+8_cn*Vp_i% zUKB^Mdnf|;&a>IQ!&p)%FyJ;4qVmO*q}q6TT&k?cXzp&fb&&9|yU1QSH3_J++U{N3 zKsD4A0@g@l&PeGsQ|2+@@*(A+J!Nx#7)?_%y>%(uIDke#J7x><>uEcffUOcpl#uQI z1xtoVZ>B8Q>nz|n*c)ZpoPy-V+%y&HCWNMm<|8#$ZY*dTFC4aky)nZcGcp&2zxXm4 zI)i~xZRTBNRs)jtT4D_fKk$Z8b=r9YL#K_@Yxny}s}nCX0|b?D>(mQBU=J_mM3bua z3R9=;ri|8-nXEPOafvbzK-6A1P4b7#Shy3UO6D?I;LZnIO`2DbC4gD-2dz8Mb(-)FWxB;7UQT(2RKP{=^RJ=Tz6)QO?lE#Spc7CVh5;HWmcG63vKoncs- z0xEYA1``av)p@noyE>|`)_ISZSdAh}U$dCJiT}c|ITIMl!JT2R>NBvS)&QKS?!lfX0ZiMFW5%^xOJJR1gJsw+HmjVQuz1{;YXQh8R|r zd2JtLy!D3{-DbRKrc`W4zC`Z&wRY#;Vddy6Lkkme!&8p#hTa2=5kan{j=ug4|VJ!hJDFa4JmC1oBn%2TI6J;YC%G&a3fUonVWIx@E-EV14ZY2$f|l z>7B+jF)2+2+UL>x)UG&;@E?;t)0rvdk)xFgX6ybW-r-6U+%A7+K@#(#G-goExTyqe z)d1U!zHF&e)8i?dD)N@5Am@LTtx=K%_d!TS9!9CK3YzeSeqYiIGm-ZgJyNNrTvxBO zG1}kJV8pEBf*?*61M52hYt;&>2H3Km)$GByQ2`*&{CKj;`q~AYTwygDb0hPTM~#bJ zjSI4BHpm0qn_Uczit)KIu^}GM?fon?;GKJHSXA293r=^L$L2w>1X%z8U)WWnH5%8X zW%k;*ZH9|Uexkh&N@hW}Ei8j1m*P+tqoUZNf^Nf9fp%`jed5QRTf&mqriU~KUkhTi zL`wjSlf!2v(54QcL5=_D8|^0QsysF0kR!aYJ1*3TYgqiT_~x(yHN9Af$VSR+)PSdm z6wU)SR5cgB@|VBG(1omOkCb!(O=_IV>{vZLiF!><;)sA4!!u?b6f0!B{8>fSlAr3e zw2wR6=B*5fL1{xu3f(X?z-0U!p;u0&eG|CwC&D!uSNLmoEp3`I{WMtO>12)q&0_k? z5yDh|!s8KIGX}K%puSX7VC>{YlsurXJe7aAUGMv+Al2Pj+l@)bmhKTeEx;NSA#^cpwW1;XR5#!rI^na1ifl#bmz;V zzI;hQoE=mUBY0p>$_R^EF<4A2TAqEusMvTmO$e;g;0H_~2*o)(?DazL>DvHUL<-d1 z{ri^r{a1`r12d%4nR+NHmZo}DX!!MeoOl0Oq! z|GtaXodgkdW@>!9+jijg$DQPB4(0gh8^Oz7=wAauCSta)nJ&poS(Fl|Tg9yLGlW$) z%)Mk#-w4BOHzv+}BkPMXF2#lEL*U_fA!1YS>JQYtt)Pqe`RHCGLb-VSOqxMnx~L^_ z3^32%#e9_7FUF%)M70)Q{+(fZ`jOS3pCYt?&T9|(b=2lm5>3} zi-P_H;Oo8|WtCRBjL{>XAlx!W{m{BmqvHo=BLkBrF+`BHHz<+j+;&9(}sx1y>Ht{R%d0XZ!wbem{<`Zdszf@j4~nQhA%~QcrhO12N*=<0Jp( zd^&dE2mIQBX{DpsnZ3f<7|8lRw96xPlkQUvqp+s`mBT3DqC~zt-26J5X_E{>4QFv6 z^49Mx{3Cv5!8W)x0#1X;eyg3uZ+)ci;7(Y5U$IVxhqP zne7ELUPL7Vls9|!uP6nM>nH(Q8A(iN1a|B=zAPk2X3F4KHT`5+9SDi3w|dEd2%5p9bZCey z%?C+TN?)!&YtJ-#_ItOLzR9ALJnB@eW$sfQq>n>RF7o<<3kzTp}WrsJLe02~A8qo>y?(9M`tCzpUX_yv2OFZq~7kcxztkD+g$C665*E zxAg`C5F^`*kF56C8K`pP@d>sV$O}oK^LCBC*g)6L?}-koWiy;LD}sK&w-Qs|>%E^@ zOHcZb%sH&ZPcQr7kft+vYG%f>BWfF$pyc-SL^CWrz%#7Ya zv%;&ZoMzqyXfs5EcM@csfePaZ1Iz@6B0SyUW#76T!tP@GbVbhi+SbjNX%?w@Z{uOO zkoj~dCShbn_cph<@b^(o(2c$8N6@(L zOGfnZnM61~HzKiKR~u2%!}-ybHFwI=dl$X@?VBF2`FhFugnrrcSpT%3ISQ7e zrS51aCWZG*@Rdk7KW+mzf}@xH-u68Z9@rA*E8+P=0DuJO|FuGU5g4C(U$y>h3GwdZ znWcYEZVY8mZNJ}~ZgpnKlNoaz^TqZG<-{e;G)unH)}n%_3M8C(rz>_?u5^L8W7^>Q zO&;P*j<@1SUvZtHskAY*%Gm)J*)b=b#Ld5MzkAx>L7vPm>?$IsGf~;zMR+rfYSw|c zQ0(6(-(HRpdzdG8=n~hsGnS`x%5LQtiaH8kV%=8L)orS4=W;Sb7+m&a6~Qh&d_=fE z0H`hH%=vk!*mjBTxGno1epeCUuT-@?W~ie-Civ?BPcQd3*}{gxrvC`p_I$wi^`4ZQ zzsp^ykjCyn{>{Cl!vx2a^xF=;zUY>$`q{60sgfVBxM5*{X3x6U4=)GIc(n40)pR6W zY`V}ez>krZ`@U5AI~tOzYz|}zG^{YgCn-zonn7ORcx5N z7&;WNY`souYZ$sv?2b32d``?f(I>SYjv1POuhcbg=g;XI69vzW&x>P*Pkm_=Zy)1* zKP7}8lMws7Y=-5eP=|Yoq`z^-RT=d!c)L@+R{}utyS-P;0lY55YV9L;Sc)t$^VtqI zMw?I<3iFdo`F5)Nb8>dxgF%J>_%5f^PyDWbLb6s$pSg^$7R;C8&rW%M^zDc53)F_x_{!$#F6rdbW-oCX$)vstz)$f~1M`n$majJ!qU=6V*UA1e z7Zv~#lY2m8W-QL)&Q&;E+wI%hvwbsl6{VFg4gb&hNb|rUxHU99BGVMtP<$;j_b= zQT}Oqb&t*bo)ASL4?M2EEGXb!A=G5fN3LFreRt2qu|;OOQfy(jIvxoc17|YEO`|^> zPI>0ixaxYcY~UoDp;FrJTT<-XBc$Oa3C=`5c#;=7gX*QJH4%VdpZm6g4RupnI!XfG z4HAJ&z~sVksQvglSYR0S_}KZf)@Sy`?1emNN?)Tx5Y}D&t`oq2G%-HVNnP451zwJ2 zkS}X-?#x&D%YP7}FKZ2v4m{?0T@jx@k~n3V3a?PfX`|l7JMD4sl%)H#0}G8+FDb-K z`CMR5jW*efKaqVmI8^)t#N}(UzBZM(NBR@i4s=_3M4(Q^w<&z2)KGlw(jz`fP~iJv zufDXA;0wruQ-T=tYhK$RS7IviG^Y2(VeZ=>9i-)pcf=XiW@%o>-Rcec9xvz-v@&#E za}gco55kGqA;s8e5#UWcUKpJiYL3J%6K2}ZS+a#IjnYX^*Yq+%i!^c2Nv3yGVtHq|w zS!S~}P<@A3nX(-mSF&Z04rS*nk0zb^u^We39C@znwn$p*Ly&#jI$gy zQkR$4iRMlBrun)Mfoj#x8!lD2PvHknYU(L&+$i>N67s+Kj;k6!W401olK;ZuA{Rq) zb%>vD=gSMPfb%qvKoX<)MOXy6Fa=SwLk}EnfO(l1n~}oXeQ|w`2YBrQ6X9{+4Hw(m zY~}n*>RcWcXXX+;;$@a%Lw3^w;6Gyex&XW3)IU23$-F{i41*);!&%L!l6BcolP&EG z7Xh2oDs5LHBR!r6;_wET6c;P$GP*NyCW)E$HbktMvqM}o!G1D+qbk_``%(3wtd4Rs z&3`!^3yrB2`n}M$n~|B&vwfr{w2knQlF$|fSpW9jzrp(N?%YctRf}_LyHfW?8qET= z;%#$>G^DO@vA%S6VKNCc+V_tv`egk?fmavDQm~#-)VAGtH0I|qkFFoLia{{E`e6$F zcgBRD*^CZ8gC5>-SOn;JPS5+ecqQPt*|bh$JJFx~g=y>vH6nZtbvW>(VRd`y*7EHK z9bGyV!-mswfghz9JA2q)EFDgt$lyafmGB6LiBNn1AH!8EtTmUWaf|H2DGWeLGP^`8 zMN*i8vucI8pKNA_r2+%I#f4^1FewX{&#sveE;~2^K;!Vjk;0&LxCN+eG)keTkH|yR z)cq2vy`=fR!iXP5Ho975(oqZWi&pWA5@ncUcJX2fP$dx_$(NGFjOh5?X3;0Y9%1Wh z?Bn7UF^iF+YsHS){KpzBu@jeCT0{+}W;V+$N-q7oD%AMg@!~)p(Eqr284pjjS0ie9V!i@r7*HrU!}gT-~>Ekx67Qe=NvLHUs|zQLs`_8#te zr~%*yaMT&YC9EZRq7>wJXO7^k9!zg;VsT4xDTb9r1C$a!UdUep&i~N6?w6@Mb~Ml| zELRW)vogq>VE zW14emJV{PJryzt&`K2->_)@B>SVYu3=5LNhi>7fcljq8)4*;4Wv1S-Il?U)zO3mZo z#6D#3A;1(PQN9q3D1FZ=LIr0|3S{Tj0}P_o(h=OENWh$jUswr03nJ4WNF#<3!5xxy zlkEPvJ@%E6)#q*T*-%z?vEvBfv9vf}Qe4dk0(=Q8b<%fH*Xl=rQ>txGwSlK1t((<7f!l^P$IdB^*!TJp~`NA5yujUB9g509ed2QYM zww7Qv^EbTp4RY(S5_{5fiQ!56cc5(4i%jGKK&5+t2ZJ+&k>_21>&k(c7_njd+stlO zkjE$vU;=A0>#a+np|kb=x_$Q|rztSlcbu@cRmxX`Q9X5w z+T~s@{fi#pJ;Sld?-{4^uG@E$eYMcQ)FXC$BcFEQuvr<+K%elT4_}IwjTG{1x@#2D zkLw}7K2T5BVu)56fd%`-05f?eQ2rJxK~bzq8lH)nJV4^m%5&8d=MC2iLy8vyedltJ zETUnHu0tXwOh}9hK0{oy*wkuvMQ{ql=xeW20lqrJ6q5W<1n4d{UGLT8a}P{uDw?AO z4J2F!M#xw0-L_82#6oxdz#T7~xo9V56AlM!p~oN?g;fZA0rrUhX7kOoar;QfFDZqP zCm{In3}t3~9!kjIVmS2lHm#IOY&^eI#%2yT@8` z*;1S|t0-yq>XJFrDpLOxEhsHz?;}&k?|BiE@mhc-xIYt3&a&z-kX!DRF3K;3YgEZD zzL%G1?`NeN^e8w)DQAy39vUvpo%ZjNrs74I%yu)fwrEzp=wXbcsO57+Kt5r0DPfN1 zxm;$+rg^^7Eyc2B_`<9bBkcC62&2Bb((|piFSb$+6A|BR@cUt@neiQ_1hBmUtcVBg zk3yg0E9ZpZ!o<5UI=1gw5K=s|I*~ojxs)4`dW(aFT-ad>05|n+cUz_n`d=5Pkx}(LknoU!ADoO z;UX39>$g!iA2W&#T;7#-MMHmv0XP-Rk&90QGX8_Ji@NOjXP(gbyDY}bq_c~XfWAOG z@Ot|dj!RMN>c&S8p};=rsi(3CVwvsy))*a5zwuQm+o0}kczpl5B4k~K;DN6qMYai$ z`uZ1Tjv&0HyU9&J;5o&yBbc$6?00JSmd%)eiwhg~CWdX@uw>8fKKq!WE71xzKBdUu z50aHfUl6albZjf$Tp}i7)IKmo^oorErZ)kr;lkL;LW99Mf7xkY-OKd+R65UJ+kIhA zpD9|ao;e^-L2-%VyPG;*WJdOe=g( zKK)FwNBU@wtn@+D?kmI;EJjqEo`QSI=~T9#-ozx#yov+Stfc9WGS`&XY4kfhqCbC7hrMYLL=>rpCcxc zR<_K`G#-%lj2F)J-DB9252?8A`UzlG&b`_pO$fMXQkiZko-s8VvX}z|3>S+_MYQm{ zvPOkdWnoj+sUvm`Nu@BUvc(9va8%jGt&ICg@trn~*!3Sb8C4)1X99@ZIq&geYnQT76(9XHo!8GoNLwC`hP9#%r{3bx;675 zdpB~yW|_e9X5g21ZMCeqSg}E{Iv8&FhA&|~dTcFFumwelDw&sUaK-~1=fU(P@$%yV zvMj84TK=fPUdup>%pV+}a&dD-@^6RZOczrL;j$q0%172pT=?B>d}*s!Z=Xz^Eh^S$ zYpqWtl>C!valD~Ktn@IGJXkv$-eky6dymB*h6UjlYYk0F9_A-`w1oLK@d!4WrC!Z? zwOe_{J^x5vGgRMIZOg$Z@b2qT|scflNfsrx~Im{9CV=mYw2t3`w* zO{K+kC8Wm^N1LYz~?S@ARfodsZt$4%lzjmgi~>YrlLEJ1FV zFUD4XU7-0Iz2w@wKseMFKK$ad!gpS4HD=%QUw=;FpZRgX_fDEg$zoq=bv`yBX~dm^ zg=H5f1A(N#o%e04jG5P&O%49@+zo%Dr+-d}zg)i-K>E3=jGsS7-cpn$84XvA+G8Ha z70|C=1kP|_LO!%S0`n2zQz|VLA~>qUgeim%vi1ZaOC&j4^F)qHm8cIP+1uVe7< zH51JEh+W6)^RJ0F=DQ<*N}ded(BHlBdW2D3o@TPkaldGrMPuimtWRHW402T=nw1VS!D5@6sin zeB%|g`PBv#xnbElHsSlnPYNZ(LxIx^?diNnlT?cJ)uU}NG2ljS+W7Zv!s?`zd~Qy* z0D%n+N8@a6GuIk#W10J5SOSx%b9C(^Dk-=#NovA%lu&Qw86hsGk z+S{9Jx+Wz)`M_F(yF%H{6;o5ly4xEnW$Sx|eZYoc6L$=jJ#Qai_(B@2%BQB~=tSGw z-8)@?*wt|22(&plfazzi9g zvsW(;U>v}o=`w_{tC)Ms%jkN^q6$J0f>?Lg1_Z<{t_vVh4hN}3&J}q)BjTA`n$zUg zyA#n&|DH=y!?N}q_R;t2+5r5=w}sMhn$!rbr}J`V2eXaDXay${Jn2ra>BtIRKJ#1LA3r7y`x&zr0;?WyP)fS92? z<9bKSt4)jX*|2)O;Jdqq4l`$-(Yx6@YWV`9{d0%zO*RNH$cXkG#yS3zr+FxU^9FoG z4V1Vq|Kybxhp{v30lTAhjKr&qu<)QexmG@V$w&`xy}-`%LMc9WyD5QTUU61xQL0v` z{E3tFQVW^gxPBteMk(NCi~fz$^BrCG6>F5JII;MkN;&So&{qoHHD7iDPdT+y*hM?L z<~O3}KV|Fv>C{{x+VJ*~t<{3UqJSrk%zU-X{#<)NPqBHX0^wep9=r*0taEPhu8mYm zKjhow#?z?IHK8t-kV^DJ|HI;uxA_Y+Af(s7lTW};e!lIdZBNymj-~z5ek1yU^Jlh= z8SF>-c=VsjzjxK)vjqp&-JlnKe{)VYL)1@XX3!}ZiBW^Y4U9En71^G`IdB_wXxLP? zH&fTzV--2HG#Jw=dP!P`u8q2RYy1$`_x*Y_xkG{_y&&%RvI@nDBtVckyffGbz`te( z&P`S23d<1|=|`zqxMrQUg_H86r*apzl_YGIeDVV1jw3x*^v{N~hm{O@$(X*2r0lCc zfc^5A16rU-E)ppQ!yX6Sn;`LP_tMy!dd#93(I2NHU6Hi5q=O88wDX*GV8tw9`)S0wAp%w6drH zD7I5g`&Fy6ny(%abO3h~23OnOUrp$<)P>-3LqR-yS&Y|>Q`DM@7$xU9ZvWd$g!ucC zGd<)=YV3vJjUOZFVx{Kwd&QoOvpu5ARDox{FT6T=m*e$A=Kb&Ed(3wB0l!@7vfm)X z+_THmEOU>kL~^-NYaA(gP1S)zkS8_~k%qq-HZy4oS#S1( zza~o;D6a*~KKt~U4sXURHHQstOWw!RpJGjPjGtqwKxg?asjYpc5hp*%?A8H7Lxhu2 zD*+C4W6K}QB+V9X4Tsiz+e1jLFHL@2Vq=DaPfwF6#Z7{2H-+qlO|sRm>3&kiQ}B)Z zA1+%uDfn7l|4gYWmp;G!cNuWf^_i=vl!#hen(c`uXn^oM?m@zeB#Jqr*N$LahjbW} zk|NK1F#yhsB7XsO6lEmP**OZrwIBou9Wo}uLaSWe$GqsCTTn7U)Jg4)c%7jJOwh>u zAG$WI2EgPz_>)D?oNd{zT3y%z(R`5J6_U?MycVUy0>1CdUW0Yqrl)$WAWGSGgxtZP zZO|lxi#wM)Pl;G;YoiU^@o49x?Wk=|BgX{ideUf@7H)FgruApREAr$oUQN z*TAEnFGxfC0v~NfF2*x7S1yiaLfm$cyy#z)IRu<@y^CV&ueoO(3*oaQTG*KD=e>rz z@+A*=!8mJ*3lA z9~}PD`)7*92l1c(ij3Yqiz3`<^?p=(XGopXo)x21yRFh~e6fj8M!p39;jD66wP=%D z7%k5f@V(k?sZyeGwp-I>X6~e*eg{lf4#AHyiIKJo&CeOxFDkv%=_KjA#LX#~CzoPv zvPp#c+t5`>6m1K@7Yr#v8OXKjErYJ4>KB#9iL3_VDAC0&m z!TuHC{mq&r@|N5jKTQO7JIRL4r)9~gBOI+FN z8$0va9T)wU;C`$gbA6i+g_YzE&C`cs8^7$0=U^RwN6Gl_PRw36vSyF=MeEz08mwVI zvX!+MiNQXH*{hpxey5No_s7Y5TT$l;8SlG zMiF?(Qw`?KzAppakW|vREvG=pW>0jr*B(d)t{rtG}vHAUQ70I`Tp1M3ZN3vf5 zQHwf%oCsUK`hY>h^4+b+esvy$S)KA!eUd0jLeUm|r6XpP0=H>M|JkwexfNtZ7ggOXT?u?*NF7Q=%UF&=xy@PmP3)P=d-LQ~a%BArGLi0q(fLG3+LG+sr;V~~r ztS9~%0D0;NdBH7`b0^mR`Gg!CWIgkbmzn-JmXx7_Dpa(~s(aUNlVXvUYoQEg=f@nB zy1LV7q!uTX&2HgCIc2@cdXbpGhwX`Sgp`$UeglI9&U9mR%&g|acT#~K2@2QN3dAVp z>eE}(W{(o9`(Gz!$L*s(@`$ zl47|_;IrV#yUS2qaFdzvl=kVd*b&ucgTFS!U|6a%COz|a-G^;rIa`GMb*S4q`PFMy z3=Y0S9)Dx95Xwf}FU8olh9yagD6z?Fn^d&dL-9QbE#7$N9LRRdGk@KPXIe-=04hdM zl=lEM2jlzqzLGB|RtImFb{RZ;PV%Ye4*@h!OBcOPx+sFSIyJ08MeC8bTtR4gOJi7X zjyU%lRYWgzMybAhBC}!q{vDmjU2^IsCXn>GMupSa9Y+fMbeOi)045Li>nU)>ppZ)C zUIBYgO2L_KhBNGG4u1_qP0hRAH8SyLmEORx{^VVlJq$dFX>bF~@DLSQ?6!W4lekte~5fKL|P26K*4f}X}wa9X7FP^7B2EC`OigV5MD_Itg=aFx=^_> zt3SRSl^#uMU>3M<3#!8u_^AcFZ3&>K!1ro_H52*M9QGCo&X@Mie*I$H_pw_~0BHs$ zde+cuPtN)T~`?!W-0Nh)%i zMMy*={u7WIfcbX~KZPGU*@loQcfy;11^4fGJ&u+qX8sZflXDDZCFr6cz`+I3#S*Je z-_G9#UVI$A*7pJYo}$j^5imo+nGgcAEYh#X-(2Ny+5?Ino<0#H=N(Q>=SGcTPeFS4 zXMtf^IIqxfuQ&Qhq7^b{)ld#H|KVWkOt*>ohwRN0@selW`)c_b023?k!y*Puw0<(o zKz%!YX24=j&%Ig|??};lUjzAo`PXk|gNd<6A5zBDfPt451}VTAdd!QQ3r~=)4H}KOm185NfHv+AMWv3tIApkuCQR zwngj5KSgidiK&G=tYNot;O90uzdDKdTcns#eVTf~ngQ^mQlHcUAC?fPmMs`5SfHcv zg58OO1?G%npW}k+*aB}I>rI5}0B~su!M0vK`e^5^dM2S~L{E$*ag~(2dd<5nu6OLIPCp=KEY0Z( zs(ThTw-b$w&Qf&AR8yfnyW7836(mPJY70CFh%F!C$puc72yzdf-6O@wQMe6p)#WTC zH%{7PZM_QFuATZ4)ulY7;5jhnb_^SfV%4jY?C(1K=+ey(jt@G)&0y4zYW3Lcr7d@~ z>B(oi)+Vu$UOlbKkvPyZH~eX=o-WAz)VzPmTm&Ehu3i||pV46=q$a&~Fk@A(`HHM3 z59a@Om|qfJ>wc`IF$_mRu8;O!V^?IOC1;-X-ncrOv5?=P+M_>!J{WL%sIpQc!0pzG z;mp>nKk6H$6M_+|Yx+Yc4}BUC5#fA;kRaX0B6Rr&eQr9K#SB3 z(+RA`Y#Qk#vLk~xj{f1!H|HgVwWB9WvmL4f3g-x|JfYwo(7;Cs&Rj4O02r3X!T$<) ze=XJXNsF0`HjfYLm8j@5r`q3V_V$>%<5#_FaAP>3B+NdKVdvPkZeK+K$=bkh2%-cY z#Z7Db4ozbMX5KnJYvTOZca~Y^+Hztk>E5%;0T@JRKGJXgCgAhsu9N>`2*MxN-15iB zbPLn|m?+lUFwkycF(u+f^u=+*vW(PjXWs2M`RD+bK{@cwKNYo%@8W1IWVHa`tD}4s z_-1qg6y!qtSE_PPKBJf{0kF+oYrg~#Vk79K;93On4IiIhodwtnyi)~Ud0!pv?>SnB z5(cv8vIXF3fQp{=5yOA+q+i+t*uv6bTYlIEN@(r300qFPUAZwnv91mJH@zTJbTbFL z7^Z*r-c@6hDzoXYdp-IA$dLICbk7?BbYE>|BARox3YP&ShtU1JWq!Z3F?vmf z2)tnCtG^B%rGqk7WC<4ru@iYPTd?A_Z1%Ow0;jgynbQHQ<>{Ai9p6?K^ymgIwr@j2 zdV|z6&RCFe-;I2GAr@Ufxaa`~mDvbuWPpmzE6}$_HRDlS^9L@Amx^EKn6t1Cdl2I- zB)CoH>S>txdmSMr(7XpEim`EWh*#WC9N9EG%)o11yPv);nmm~`>p4o94RApZ3~3ZRazvg%Ie|t89~$G*+yj@e(ruL ztybk9_m-b2Grr@&h%#RoJNIPyMO(uDuq#{-6eBW`m2ZpMZImwWkx!(w4zq7#^RUKTRQ`>}P@nuVE(uu!NYu-Uf-a1*tQ(202J! zlfbvx*mVr_3vaTv2ey0^_)qG}4F^9>fnTaf*i_KAQb?WOdf*5aK-gLo&Y50k|>f>O+0?&dD9s5$p^z7f5VP8;i zP73w>dFM6nrc<}AScRE<{>MuMIzg^%d-36g-u$uNk->s_>Vkk6Rc0etZQk*YwBhrz zIU7Cmr|cihdoA#L1_IAoy07MT?)o4_6ngre&;QSvb{xhUE{Ud3h1b+u2NrG@F-vaGy-a41~I`|>2_3Hlx zm-(cgxsw4_$a#`q8(kZ;^JMud03&r)g8b zTs(TRUHaUvMCXFg_ZQ+DBAI*00Y~%MW89NW5`N~U&NA}T-~D~9(Y2uuFUD?$jMd@_R)C6PgYlw=0}>TfY-a95 z2%*~)={aemlq#u>901wP&N&xR0fE9^$KtU;A;q-P)bA&+OHK%>)8B^X@#78|2qr1& zuiE7$hrKy@|CM=UEx8zTtB5`I?qI74aUPxb>Vx5~Q)bajhk!Agq-)y*mr?j+VewAN zA&g+S0U5R(X&WWdxs#1?;T^WhT#`{WM(O3+Xx>Ii{_ow>x0g> zjkk7RM1-q1P97SG^sD{hPkXAa^YB99vec)|oe3?Sf@-%F==7xpjU}PD9EyqTcruJh z9qVy0XstuNwtVl2^0|5{zBSIolfc{OeDJ)!*3+KqK(QsfqK8rEjyZspS&`Ja^vzr; zFsn<6+KzYPk7bg?%F^vKpNo%Ree6|7w|`Hz18_^iCqUEdA)ibDp)OmRby~}@mFkJc z>&xA$2$=5=V(xAT>kqiSP$n@_*e4Aer0bd z&xcLHxLiq=ow{35QlM`sOeI6yE;ish*@{1wL$?QLJAZ!eI|^8{!CBkC*VzHev5IOo z4U^wnn|&A2U?AV*qJwh@I?9k~b5mELRq)v^oqnNOQZiK{QJo2Dy4lDeUUhtPWYfBX z71B8!Ivb;&zWs^=$y{knbP1w`pD6 zDt?xIVy{BVVy(0OYWqng!*2vcQ%pv=% z1EEFsDE-?6qc*<_rF&|S;z<3+oWDH|G`%X?@lbojm>3hzPtko_qgW%y1uJy0HDNOJ zh}=p%Sq&w90ZN9=w088UF$HS#WNmux7powXK>oPZ1X`2T%&#EGCBWPEU_Xsp0lq=E zZ(1^TDL)KI%ubH{WmIuHF(@~_|`o*qS zWW<=$eB26^mytyw-1MV&wzyJOA7~BUmF{*6MN}Jyj$3{~ATV65q9JsfMN9!{@O$s9 zUX6$~qubZc>12G@fHb;xbk7cD0Moah7>R zV`~~pZc2h?+cpT3+Pe&`r%0E__Iv(7_`8l*81422l>m-UcRzyhjH+WWeB&p4@Nih{=a1JW7WCK1Xw~6k7fn zbZtq5^|9QN2m|$_bNMK^Gdp30dZP#D{Xo*UtmY+Sjh9$6-AdCC^kBlTJ%l_7lreu& z*RnQK%8b5m~!YN5;j7EeIl z`qxT?xq<@euf|WDyJuX|4BhvwR2CS*Kh6L(;GQ>=PLOy0TET}CGJ9)~H(4QzJ{2Rk zm$&|5V6w|*T9WjtMM87}z`%KQ+jQ#{EKiXNvqp^9i77B1<$U*L8i1B4*)xl0hw~L< z-6X*_-JJavp6?G{nzA$5$VOA|j7dqJ=)m<=NdaqTo)>QbfS#IS-`ArAkboNEoAFM7 z1TvyL-b@!||7`Hp{fQ35N2Oh1=78L-q>l8Tg%~55DqX1HQVdFJ=yIUQaHx4Fj251( zijq-)CH)&De2nhdVq$;r=GJZQ#OA5v*0FQvEFMlZqa&zDn=@B`x$W+nn={hdnO6fF z(3~!us$%mt9TXlw-E@26TUju`B)GFCTI9rr;pKi+mlO@oMfN4Pz`{>5!|w-~6d{Uj zsA)50suDQzI;xWz_#+U)rtn^=wBx6@9#HA)H#{KxdWOJGE!_vE*~g+H^e~}xfq#EH z+`_^+|6WpSqpK2k{^xZ0-p1853QB&9;ysZ4ph?XN9eBYc0!T_Ny(*85W4{hd6c;+8 z>QlC7mzBS%2K~0l7$?2%lDggAI@X%R`8EF$1G{Z zC*n2(pbI+W?`-j9#ilgCQ3FN!AP9?6ueDzMK8xTxzY?#Iqz62iPc%K?MQc!QkGc>1 zY4etj#f;8s8x{qvzVW`d@_Vh$*Heq;)3>r9)+w>m&0@@BuoB&caY& z+aIng*8bAJzt^kPto^K@{dvfEplVIRikUYyT)5GvH@(#P`YW?N+d@w42ZT$0ZSEX1 zz=dl$5Bz`mV>FY+bk$>O*x^^+JaEiz(~NV7b+|8kM@f^GgXaM+xl_N3do+}jZehho zHr>THv59|Al8L{$D|fJo05Q{ttuINw7N3e;gko73C`W0S4&pVhG0s*#=3Hu5UnT)D z?C&&oJ+OeqoyEY-IAc2`x8i$Yci@5N9SmCu-(9WS?}Vu+BL_520Wm%rV2Ev$0va-36YO>k z=HCmP7hX-}KMfZR$ELvH6VK#51b2dBs5$V%ri&a;B*md#>jE@Qs@tG?|32YU>;ux;rP!4e^Vvs53(`+?o(p_Q9 zh5jV&(GC^%oH}^NCs~Ti{0iLGjT{pRA5U*~jt3qr0`!i{Oay!##EaP^g3#Uts0>r1 zNWJA`rloZg|9RzLhI1y+V#5eI!>964!h)y|svf(xC&)O8lR8SZ;mOV8ES)Y9i zhDxXxP6vLe;_pb)V`E_>l-Se9xmrx*v7O~IjIR{WD!YVJF-9Z+j+-5=1pdPgu2E*N z0n8c%12xP}1bDweXe8q8xf^giinW}aMFn)iA;=yxxLb9mLJVF92y?m!)&W;6Q$n+5 zx1xJee!mUh5@tI`W^(?X&*iV}JBnaHHO))`=*X8tx0cUCucUt9r2hTA;`omC3(IZa z84_i-`F}e$S`%9kE4qXv)69un_(gs9w+8#KIE5(qJA7o%493$@INN^S`;|e^YD+HM zf2;L(_`fx$Du-!~o+x551|V%rJ+{Q0P0&^&fa%b3Uk$Ya0By0Lv#K^e#j{K4CFrW$ z0?aXP!lUp1jem_>BUz;b+^x|qF?)I%Niav1nB4&`3JnuEv0%Q6dQ{VB-c`8+m~)$J zy#_I{g9f`)mU>0-5TeJE_&h`z31PqhYN$j59>?@Jj#64gtET&F_pcgXz^AcJ7TiFN zRZRph_+l(&UiGC=_OoA%WcSMfj0l*2ii>9psiCN@(}l0V}4KL!*ODKNQ+PKVoSINdz5cQW~v`w7V zqE~$94M`g%DQ8A$svy{wQzVT0J3NlktQxIKiCg;cWzw8QrBe=D=!SY;i|-K(W7#@i zj){m)3WvDX<5bE6pVaCgFcq$fOp#mTwy>iMh1eaM*!auCo`~o{8@r;-t$YQTry*+N zFF2KaVg8n=j5L^Lrh}IXd)YJY@dMs|AZ!;MH?1K!#_CbLoOuX19E&}NYkx6B$#>Kp zgCxoOI^Y3S-`>bmPPIkmewD}O&R!UFZ^Plt%UlRDZA-V2E&rL8gagh_HO6ht$c{el zJtqbFeLUb0#1(pG=p#gC1{YO+{*s!zV%3$qUw!Y$z|`i<)Hf@s@cPRaeS83jjqV(Z z@zdM0bDq-viz|{<;%7|W`pAasu1Q%^zLTjW@0iV{t4L~Dfbai?xGzh}9#CnxnP}u{ z-=yE${n-9>(Rh#m@V&xj#Q7)PsjWO?9LY3AtS; zz}I3-F1+SV@U}U(JBLQ;i8)4^k1p%&Db);k+{N<#0j?)nSgXwMXo;yArO_qZU2d_$ zlXC*tM@5sQ4QtYN-9Xg&ew~_GYc%Ke5qx-Z(H7k44ki5yif`Xx8zQ7)ug4MM z*)zjE`jP=4-h1KIK0}{QL#VTqEz$YeOb((t?t$SD-+ZXfa8UzxGRJ^vH^7| zLt$jDa&!MkuC5?Cs;tuD>dF72CM8mmB?4Ol#4IU`o2*g}lEU4yQuk-dSU)y-n^p@|*y(ylm9rMpmkEJ`Z|6WN_;V+;E zC~uuix&M_MxLmRcc~BF$dd${z%*k~GK=Qb@8bGs_zv{tHinq;}m!rJv-)&2~cZs`n zB+M<6yk3Z=m4U1rrCW`)v8;|^zU9Uu4Q?#r^17+8ue&`Z;^;;eOTl-?)dQiR$=%?~ z-6*3>!Io%d_5a|k-d41h{oeT^c8pDD<#Vb3;CFoLT6PAb&)H0w_={Vo2UI`bubjPV zT2GBS{W%uU!?7F#O;T+Dne@)RI-`8nF?tZ>P?pECyL^uh0sJqcWT#(Vt%r%Su7Z{1ME@1x!Rn*_}R z_eFLlSUQ$$>GYV#hFk7zetVKekoNQh=#Pz>zZf;gnVP-eTZ|>^kt9%(zU^EZ=ElB$ zZR)CVXDRcUwR)vHFq~-dqOKeQOt$!0%J{k;1XDCjf6$OM3P9}vcK9bd#o%rQG{Lm6s$+1HttQUjvm6BwS=&J$7BUeqrQxw5atAvj)qiN!SR|`#1!wZk>RbYmgstdQ%XjK&mHYSC38ISvects z7IZzK+=nkI^3V_}&Uukh0?)weLoasG+V^kduo57Ne43viL$+A>dK<@Ff*S{>a_(Wj zZ{2#3VW%6U5V(GvuDo7_pGo<_iN1h-ZkO0Lv#QJMV3;2V0j+Q6ab!QM0(Kmu4GjL` zB$2t6$eE0PI3koX7_rJ;MLrrN!9aiAf66TonE=52BCt!d0Z?m_@Y^rA2bDJ0^N{R=t!}hC;P6Mx6dddv~CHO_Bz2KQo=$y%+ zg1-pcwm23~n}R~+nE)t*7v_Urro!~N%8Uf*%IA-uBf`Y}HnZT+NQ-gpVid232t z**>CCj3Td)nMa2RoV;*1tO-$nP}|4ETGp^l;N8}N{G%o*C6rYAQIR`$%a=Wd?n`pv zRRQMG!qSFq0k>8g%$cI?(u(*v87ZkL-0Qw@Z;!vRX>e*~;81kf?31kfh5F~MJ;L1& z+1K^3U)NludhqiZJ+1@1y%i?Y7J)LqH;=zAq%V*kf3e{14-LHSzy9E3v@Fdg0wsi5 zSG2R0S0$udn}9;&&F1rPbUrJ$uPzVZ+na1Rcf`_>XKi&Ho&A?keKS9$fZ=Xa$z=t! zD0)sDQ~jVdXybX6gnhQT8M9V0Q!(xff(nZD7chy^kC4<$)X>V1y{hyVO(_L6lAD!hph2k0~Au?&SvbvLW*08$8#=WWm>}xk{1=n78 zctC(V&m|_VJ0%8Fr*e83-`xwa2uQDMkC2N(J=hii1`!Dz3;HZW`CPUI z0+4uqe2ir{uTo%|7*QSQn`ZreB#m|ggvm3<*YU~LKxeF=k_}?WQJ&zVO1KiLdsB0t|V{|iJxE|GB}2#SqA(LQ=qz7 zjLnK$wIOcF{dyMjnkLmeAqrS*hYao8j^8=#g|)O`aiGpdLfr3PB9F#mvT-d*4y8$C z=JOI3S%evJWlRS;p+Y4qTvW`0svQkA%M(NLKH^jbCjlIOWsGj;jdix5TT0WG=e+Kh zUJ8Cj%9G@;BN@|fMfzrr_L7Z!e_smOcY0UZPO)vogrnf%syiOP!Oeoc{=ZC}RfH?a z0yc~H$1;pV6M5ExW!muS3&9H)e+U}u*|%=Ai*UsIvUW+ItKh~)D~}X&?Z2rG;d-C< z-}>6Ls;m`IN$ipt`G?fIkJ3isp!GCQwS)5X{L@p(HM)7a>24ECgYSYHnOW*ps$Y%YJS zRSIAw=%e94we(tb50TDua=+=tS#9vALw3tKqPe|iGm)azQHhP4|CGY+%29s$SH}%i zhGoJ!5N|Jjd=oO0(+gQqlTXC@D{4a~jw2OOSmHOop9RCa7ff9;+>N_tMBXse+Jmu9 zR3osF5SR{ldhTDdS9@|^- zCs&k2^}cnh810a__P@kVUZ7z*u}81v@E_~FF84zHM zN?I-RlG(Ht2_qndPZ?H{cOCD??^U(v^{YrB8B5f*SXo;u+lJ7Dz^*xH@)8>4qq;GF zT-KfAiMMw_f;_bWt*GLT?tLHO)@i`r0zl+%b=r?RK*8o~NA2tlE+O!ux73r`hHpJYek-m>Pwb%>=Fm3fxg1yFtDn%il7?2`LfM);N zU*7~xaCl>95>f)AxN|lUHk&O=U;XtZzHg@@8Mn;S3~EM-cB(^QS5c=bb)~M2*|_^$ z9^b;xCahevnmxzkFv3bZuxx*Wl@@sGKRr@nOF02l@zSkhLPF9Vdk@51p{Ns2L1w?Z zNs9J97$KeJ71^HNd*sv5317Pa=orSz@_7b?hjO&{ z);Du>7GH40@>{2ClP1e7~uXu@??p+WT!!SY=Z|Md254ePLbJ zY3l1upTl=V9X=Uq#cf*OWMz4l0N{Ia|ENhvj=SerJ-op?CjPYgbrLctW)k-d~OVwFmGwn|8GN{c3t6y=-5f@5GmcEMpbNEuO* zOGEqdXL8g@Hf^N%rVsOs4=FtC>-Tr$0T!`SK@{hKq5=;8TTvhsTE)g5%&l!mz2W*M zBF**>b7D&OL?xuD!>Y&7mC1n1pG~U|Q1>20#;5Ju!oRj6>rv7R$>Zf(HxxsNF0u4h z_V46XfG~LOuj}9J>--$8UG~-lIAHFDJE&5D%BJGYerOI3Z;;YrHIR1< z-|#dN8Iyg9{PiGdah*NgA$pqKc1vphT3LXlGEHb9ibUhxfQrV^y6qy{;n2mVke zF{&XG4$N8p=k<+$ZCHZnWK+RDoW!LY5|Sw~ZO?;j7GD|&k}p~~l0)^G8l6~E-gmVG zK9t~HG%NPfEwk4MQKB0MQqtkra#>H)_gHhgjOLK00P>D<*tQmExA5VUBLU4$-spw6 zH&6ahNB8L^>M%{E>5uKdj2u=VSYnL1s`A6qBK7pVXuy6L@nezGY*VJb| zijXJU*kloK>sr@|x0a2UQy(8Z$BG7U0}=0_kNE~7ZeHZ!=2Ki*Xvmcv;DeA~_c=$( z@YzbE?JMa4KJ>-?=~`fZdJMdT$Kh;VGU0kl(m6xJl6dw2YenC zQyE}J8_QE$T=KJ9-}`>CBfr#du^aJ%2Z8R2GF)juDH+sdIg1Z8=^tU~qo0FFd>qDS z_9h-3q7zRdaNZ3kOED(Tj_$8n4MhPeRL?=Z^zhUgN*u;uj-fSL?r%p=ZozO7J4TLf zGzl}*2|-BYguMLa7>I}q&D1cWS#_{KA`so>Am06Oefc$zu}2@?@+kI3hQZBv`07QE z&1&p@Lr)!wa;J)NuZ4Wi*f2=F;A@?4ZXNl%gf=3kpJ8v*sv`gWhxY4{1mgyJ=MakN zxSevZVgPp;U->a$P6`q!=#5#o!PlVQni#b`PUAygviNYNxc%z_B3MP_RME8GcFEDG ze}6drViE7DC^zYhYb(;kCyo0Rig!8Ae;2KcVL(wgc9J@`zL#$|Dy`fghK%0(ngC#h zQCdiR^)+u_@$|02#fhZoxTwsn=hpkve$eL|z?u7Znn|#2k6dFzX8Eh}=oIXCioG4( zejcG@BOB%<#|0`1i>zf&rl=^FF6EJPRi5A?EOX=Hs~PlhecT3>L+X(4>}h*<_N<6F zY)nIBl%h&2#^k2Wdi2f34>?41JM=kK-y{}0H#1=W25IWgg}#bL8D)cEwuaAd*`xxu57Do0JLJ` z1F1(}jvck(AI#MI1572XHBlC81Re z?hVYB4KBi#b+*>KuY93BY;ZXM^2-c1c`@LQ#hVn^hM z6n1{v#aeN=Re;~Mq28bpnBPJkm?C|y0?v!|Zt|2bj71#DjuH08nI7{hb)N5AQZ52& z)lh;0ClHrU+VA}+oaJ=-{_PIAHd(H=?G z`*R5=&MODuJ!d99E(qq! z96I*a39p2(-37ZMUO^e!!R4pg^3K=!=otYX2-$-TBo>519wyji!ME0P*0&N`dlKyK zOO{XL0)Cv)cVqR1=rsOfY^sXq+@D7sQM#q&Qme$qbULY5 zO;Fcw7*deCx!FtEcwGtFZDzFY(qSMA_f$m@1jEA!wLsOXRg&&$2-+M7(hy!E6i4T98U}!(OzCB7L5sjcFirgU(y*3wCPC z8#c90vBh!*<8U%La^@`i%ASX6>IW4G!vmUmw686CH|OGCOzGXzw!k-A^>$1WAQk90 zgYn-6OIq*&%C?%VHgdl}4G z9swQW8Uq{-Q@sT6zkdNuW^7wUFBFz6dCIuw0Jt0miM&Kp-R9$2rYReM)C?2xJ%Jqr z0Nveb#TcFbBH`ZfLC|4z5qOfxZVA2T+*>!)uhWc0xTHl47U$p)x_q0^}e8r#>h+XO9rbUNb zZx2Imz)l{1$uF7?Q=g5ThH~X)2c@0}UE~4Xz8btW2V)>UUGvmYq_}fQybzY?eNj`l zu>m5TIH00b=G>o;n3kf~-A6ZO+QPZ_35~@R%r5wM84cxvKW#`tjXNoBe+~z%JADqy zJvGS-I;o&s2e1XJ@ZCI0DcU{}1{~GsJ=G9l6*y1%xTPvPG3I1y0~pDBUa|=|m_zwX ziNi}qUjA`?r&g@D?>P=a;BkQVRY|%@Y#88C0*dD~fLG#Lx3;gq%9SLf(y4eKnV;GZX$ z(6x^rUqs#e*MKD#CFPC|?epEVgTAGyBdK-%dnzN=7+#DP?M{N*ccZ>Z3nmO*iyk=aD#rM06^T}}FS_$KRc_erubN|1 zKzTwxVZwlec$Z9&jitZ@)VW#zGiIp*eiVnPximjofnU08nM0KH%LCW$7)&A=Yd%7> zX#rj2mCih{u`4%vxT<{&SZ>ugFpPES{y$XR`9DpWkN=lv0~xw~S!iS_wCl}Bye9oc8c{S7VP14`cj(+#L}wYIN|DvVjM>ow&6 z5WXzKq2NJ-%YX}lC~O2W{LmycV(Vi26@$obvx>=m?y%&t0vP;FlquDGLl`EP;ToNuUo4e|KM?#W;2X*p(@C*kg6 z0+=IYm3F{{^J8n}`;+pKF0L?q+eBJt^Tv1H{V9<9zIhD+s3HaDO>K<(V zUIyy3;TpL8-~aZafONiZuA=T3Nbg|9Uh4hl-P1QlbP4*fw#chncSd)Q-rYr>n>;#7(wQ=%^- z2#F&1mFQl2gKBYdvVY$UgV+{5inHh%XeG@jQ{eV|5PDX%SwG{X64xx}Y9i|QnID`L zYgAA`nmF%D%Nk`>^@*4gdSBRGC$*TS^sAqfM&$-2RaKG6!+3uV4Iyy(L=x=Oh*!2B zNUl+owD)@OjJ!6fGoo8Y024ko-(Ur2F-k3CN}296Apq-9Yt;Nx9->R*vhZNQU3abK znY#NJ{fzmdrs>U}M_0R;vv((W9rzhw(=~5w)^H!6l{VmN%zIq&gr2jaTgWmxQ!IR` z?WeMYgZ$VX3H85J%IhwZ-a0c1o88+Lvqu`;JlnE=K2B0~9N?by{&UU9C5Rp8!~K>D zc;m?-bWZWkp-%~bs-t;)AtNUy7^Sj$aZB0qtmX@yij*g&f@us}uU;KO;C<+4?lR3J^t=^=Oo&S;c4o*!wcHos zeyp`n!Zo~E=;h1YKC@Wj`br5^v1;QmETmPMgUI^fAA`EO29jND?XG45pR~IQt>&{Y z0J*W8TLY_xo7W9@~X z(sn9p3TMw@sRq3zvrwv*e3uljt`Y$DA+UsZO=X( zgs)siZ6K;sT6co_^pq$J`)%7>)W#cZjHN_syWK%>~LEf)m-%P1lbN= zk5U=hje^MLL0r`QPk(-EvU-rm`0B1E!Ofkm1Rf;Wc%S)-JZ5dyp1c|X`u_6e%tBQ0 zkJIX-Rlv*chsLa&N$aw@v!tjJSFsNCkLce?x}sf=9DCsnuLeH4Xre3{t84o^p{mNb zAjNe?c>V%3jrG`Z_x&;z*W^CZ$cFQEzp6CqEifOpeWvF;PZY@wvC(udB`VqIloZ){ z{Yxz6rhO@n+7dfNh$zm#dM5W!p2PpjvdTM%ihE|c&&o_LCO}k)t(!5_R}2@zO7oXp zDu@lG-j7}V#ma9X$@{<00n|Sa>Wa?f{;xXK&e#Z0Zsf2-7xATo^qle(7{e!OT-kRS zT)9CBCASk8$;KcR=Dl_PQBOa_C-$$XWnop*fPPtqJ$VjKT2&BvU~pf(O@cYlGRCn9 z9`nX!q6Jn%lGL>HWvCpHhE=c+G`KhCcO$&P=0TC};ctZ2c6#V>;REn3`Iz_Dc4Jip zV|VHk5%57`__lib1rjqI>keYK-eYVt;EQ7;_zm_xO70?s7zkAfKl`K(!BGgGQ!DuAC+b=i1i`ASqL1V4>Dhs05f8vfQepUp$9^RBQd2=24dH1Z{ze)~q_Ru6N2S~InopHB%LB*|5grFum+%4(@dis> z6L)Or*rny`QG z`0w*;-^AJ?UvJOk;xh(tQJmVS9bp3FiB>qUYRZ$`&eQDLo9__N+tM0_9u;uaYzQn! zEFndTUK$!L`Yiur1Ds)_(R=Zzd1t0z`P-KcfoV@XL(=j$jnPp?oCx){h)P3-kz?!+ zmRb(O-+1rwb2h+vFM9y;n6K+hDs4Q-(+M&yj;jb6UaM{XmaBnjvJ(%-oAm$ zt*wTsKfe+tBl)yBHU>g3=F(M6FpYagJZ<;#@d1hgnz48#M>0=iLl6oj6gV_b7ihGe zBfeZcgw0~NG3*@^RTs-jALsWNU#qlQ+OM%AE0GW+Xthtu$B;y3e%bJFKuEf@a!|f# z`I9(}v68_wx7qSYgQ1jK7ep6Jg7760J>pXg@JB6gE3=Pk!#$IH_=H$57=frG#v9xf zVUn-1zEk85o7D)-^=xL?7G!$OSQNtsU1R5)WK&iV{2=yF{cS%FXhkZw0ND1uE0ny} zH;bK}+x8mz_Xhm_lKrq{OwfhE2Yt)hCLH{u6fcn$Mc~*JRtck{na~IS`od6SCTv9T zFpvGKy&z$Dx=mgA`(zn8n{vPubMM1HNm`vL7n`acQt}YfZvfvYa9-;G8`S6*e z8h7T@cemwMxpO9VZK)?`pB?$xM&Klma|!J)lhs7lYude>T&95CHGB7|7XpuzWx`&k zDW@>q%=hPXrQL=X?i&)2aw4VH=KAiPw%;I zyK{rKPUyL#W8G7dOk>r|7EC6RyGz7Hlbv3nF6D{=awqaekM}kRRWgPwJiYnB#BkxZ93>Q%bY1?KUR z?#wGqElT&VcUK{(mot*?N!N9Hy%(&!|6Rh#JM=JO5%-cE>dF`5)gT-7F5sFTSzUZR z_922+NScd$^@sM71H!FV5GJ(4d`P%0$me6A`QU-(+k8txRgW|Kq*hgS{N#<%U+$gM zl^)J$kI(|W`I6I9$clOXhbgc3f$GXsTa^-^DyZOcR#&uj6K`V+ne7}?$SiFjKmY>L zk@CKQ&Uxj$J=)kwCly7WIJx#PsyRQPtF6m-J40!6Yr&3MUqW*2!DH4@87+5efRQ@g z)k>GX$7dcQu+Q-}O2wZ?JI9S|B#MS>AC$8Z40`g?S|;1WI#B>KWSJs)Wl# z9DIT2I!!<9tb0omQA?k#o zQs+}kgp-L&5Fuo9!~vhXr$kUDp~vF0HJAhi3@zE=u5FH9elYMvn&d}X!=e3(Bdd}1 z-Fl;W%M)z8t1S^HwzbYY0VL<_Hdn};fFhdyIS9Y@i9Rk0q5VI-wd5K*3mfHJSRke9 z;~8>4^JAfzN>qSqb?2mJn#s%}FxHQt=F2xf(7*_@w@|OEWUJm(>FU{4k%)HOTjT2=G|E}C=PwvM699NqjwLse2rM;t(~-l}}e`dS*iX z^G<$C0^m)(NxQ&fsYoS?Ybw4m3-RWJfJ4=~M^$B;t3f>TZkTg!3|R*&0aNg~4jiB% zhQ9%i8PhQfK7d#4;yb}%7wBCY?xATP*8rQL(&cLuBIv||&4++TMtZu39h;ZmFF zm-pLgJP^1e&O5_*zT54zKS7m$J^$Xde0534)t?1GJFzSyVtf&}Y8;84=UOd=-;a5; z_U*v8WS5jet@4a(8(Ld#O2kgD~_+(H)N}|8H`OR30I~AZsP0!MAta3|F5i|Ei+AP-r3*YXm0U^ph^W+(Q&($Ks0>y z#x(>h2F~tT9oVxv3dufiKlrU{5;t$`(2fabgI^`*tg0Pr58`!%JpL1fItHdV=SGTv zY~fT(eAFXC*tb@p#&X`O&u4eJHc<;S@X6fIr0gRl$i}<%T2!Nid2BkI19aVurRKyX zqo6TFv!DuXS@~~&$LCoOopt#tWMpSm?*7aiuq2={jiOWq?Cp`Nx@9K>V51frF9fX3 z3oY2(J{rnIp3^11()*^nSE-Ba^dty?$1WD;%14yItC|mYBpzG$mbZoI*;TYEEer81 z;Ne}sL?QNzHJ~ng8e`0bfM==ZSfV+=V8--E#0(Z4yK?B+bz#iKybfm5Gf?tuKPLwy zgPH;Perjq;=HP?Nw&RI84&j5C-p&l0j8=Z3!hXhA^xKrN>b+2!7ZQ(v2$$npm zqcH=2WZ2|v>aTEFv67~zM23{imD~z@R-eSId=&Vnb^?-c%My7IJmrXF2f)7SFND&d zdTc&4INP-BMw@7CgX2=pPCO56zkHfmjHU8!M)ms*Bl_$o>I#-8-R+a`Nfb4kGDbW2 zq_S;YpR(*p$Sk6foU>;>5+0EB>}qA7f7Ej&9x72K;NH#s*IG{uJdq;(Pmqnv zhq5pcx$h#jyq{ekAxti{z=X_0x*U(HH=5Ak>jcLR*wq?>IDRzyRAaqQ6=v&QVVE}+s_sQr(L^da%~QWu2Ye6aXTGlD2tvh|X0!S?KaIm4 zN~+p6y5$WwTffD{RVy&qR{rhj^T?>)&Wba_q%(Rw#_nM`8$>6yB&MS&Nhao%{~Cj? z+l|jSb4&lUXt%BciRH%z5sacKw;H{7HL;CZzr9Xu{Yy0*XsX_K;hZb^zomS^KI>=t z5E`>5l|I^x;23O9mK2oJ`$M8yY7{LJ>Zt}?95{}9QWMF?PnHWk4E?L zWKS@^aaV(mmoCR1yRnt2xjMT&B|GibhANDiF!JQ@D6hiq?5t&@`~IfnprZSM~rvYSYQ1`)87bAKs@mB_qn~;V$S?f|?4MiRyA%}uqao-VD zg&$gv`8r%1NF03}{w>e>tzXTO6+wJ5@dHtXt^EE)E|*+6}XTTwT`=0NY8xCSCu^?B}_pME14`|PXbmyrPWstnT*Izr1M(+DfLIf_(Jcf8?Ab;kKu)WkURvB%+~J=xYI?V% zaHK&a&3SNnvfLy{%Vx@)rZ9lnswxPI#77Yq0je|F-wjIc$jkqblL}+kpGQ=e5TpBx zA3p$=wab`qZ*JLt#%NfITSV|#CUBkhovtJ8Of$lEN%Jj%L`_!_*bGj|OMGt+f6 zq0DDnnAp&u+Y#dHRTXFEpp4Ao^GD~FNcmhqd9o+Eyo<*fI6b6K zcD5uWgW&3;7EQIM@nFm#7~yyE4y;qVx5#4K)m%DQv5b4Hxk&5N-0{!(Kbg%sUA&6z zs`w!udzJOxjjiOR+vQ(=UjDiM1P3UuR@&P@JFR`PTxkhU?YzrY`v)ri#sJTynR6x!v=%f_y1fn3{A@plAV3bcM~>27j4vZPzN?ia0jb$0T)oY1;7`%&ru7EjXn+V7=lRR|KJ z$C>@@Mn07*w&XiclD8CA*f<#cemDQgBp{~i@S&eudA=vho!ryVZ$7`oYHzaro;mi} zbhOxJYjIQcm)E!O{%oCzbv%$=ONtiO?7h?Hi3>aza_IlU5}U$OCQIt?RWnpkKws|K z6AJ9IH)jn z>*_EPHIJ|K93%IRFArxL$9xyFK;=OHpo@PdD}0J5kxuRbq5OUkX7!4VY(~n^ zpL5d^HHU_8Wpvwq>9aQ5cv4cV_rRLw?Yw=pzzkMt++at{3*dU@j(01Xubu)>>q-{R z*u<2E(LMgOX}07dGJ2-JF`6uawqJXNcH6u018B1Idf zGZXxE?BA$mFPm}HBzTs}$l>}PGHFtH=+cAZ@=YNQ)F997{q+JET?ZHKJU$`*`PxhhU%mX@9t1sKB$yv}&#{>#9RPgPSGbRD){xR4_K)DipYAO; zW=dE%C+qaS9{r}cJ8J5(eyK`HJ^3Ut@OOJ!*q59qyq=Y7(pVU8I!EjqII(CSap_tK znyj_XVc%3$-xO+QbrKnC=FchlYtk`)Dk5l89NCK}H&?9MlSqDE1PvPf1y-$gvhE&j zd&zo#CG-1pMU~swy&pa6M3NCrt>Gsr%VIx9e|fg?){PLAm}#j0e9PNi`3ui+GoD5i zCjEf=u(B*dqt+b6$b@6!t6^3C8C=X>i*RgYK9YOOi9!S&{06Nc3a5&$( z6=hj6)R8<}R;fQjj^l)D;N}rV@&M5(-^-^Spl40?8N6P??Yb#G%0a_WFwk2Y4?u> zl;9gxaydTwOHsk%J9J}ogR-h|XK8VApTSrBtf$YS%ArY=suBV#MNa2O$YdY`0QD+M zw5hQ?jWm%$&K}F*Jc$ElQw%Y>p@s4G#sCZT6t$hKX24M2e(a4GLk_mD5WdV(>yjGT zb_f_AUzc4nlB(VK+^kH2)rq?eaf}B73>qg0cIFb@07xq($znPDq9>yr1yR;v&i?S% zr~%Zqo$WCGv~|IE6<~Ag>tz~jP`4_eN}36-*SJnpwjFhanFEn+VgM_4A4x1M0aP~$UU5V(M6AKT44s=!L@ z1nS|s)aavBa_5%+a$mddejwa?;f%J4x6nNe>y@GrMWgbJWJu4AjOki~yxX3yc3<4U zwg>d3QtQmpbHz+<*N$XER27{V$^~&psy%1#%qrDd^@e~PilM%-6LH8NxOT9trm@q-BfndM^(knWG zUH?n3XLMDY$4nDL*|MZia#Y|g!sQX}~`YHw!58JqLr*fp1?6YM`K{j-!R!XBav z{z|0j5Eic9l1FfSn=pxp}uI}hXTK|7e<2%m(z2{dv1 z@IAinZ)SiQ*)==Eb=piwj@G75M}`-GuhUGq{~H4uTB;F-j$aDjYl`vhDldK>%)(`W zc>IvwLjS^zMkWFs`nFJ6694QiivwjGVjeIf8yzi?pfnawghcPCSb)WAF1c6-+l#pW z_WC?-PAvjXQC7umnD0cF%Yk?7H)SBOys{Gf{m>zF^Y1dldY=`Qh;Jz*l9_ukvs+5D9HGCPhJq zqU&0sbi6g&h*!`st4c`*pk~;EYZfAw>uUC4;tXs;t4aw&r}7=%8XeuAfrj+%2|3g& zfm-YHBK2guQsqv+R8#uB^*5f+!rd+{9+V0o{7fEP&e z1MR)6!YL-N$RsJK5q{t7rS#Go4Dj1~)gsEXuws3Hz|oYV9?o~lR6KkEI67Z_>zsHyZa9s>z#iIVa1WJ|!SjvvaNR;qWrAsE7Gq}$q zQoHazI~ar-$F+?nJp;Tfro2t80hElTuudIYr8h#!*hT8f%kb7SfWEueGt+FsZ~jW> zInNY+{O>+$)g4q!|NTe6=W4D~c%M@b1WZ0)PV_Pvy#NOxN%U_;W#1g@7fb+)Q*b`% z)%}sx%?T2Xj9x}?ua-3cx^veIHtH!S`Ay0Z6hdSZrNk=a(<334ge+4~rs3WU1!6gN zY?U=_)tG`rg)Fn7$bH@lHDOykNujXP?x?8+AgCdU9=TViadvGc0#K#yiweh(<=#OH zZhc;pj=_x~Hkl|pIu|_E%alOGuQB`2PgS2kN%c__)nc=5VwX*6ha@A0RY63wwqozW zupHQvkbP)mAo=^INq0b*?Cn6}<7JyP`uVH+`$!xZY?ZoAqTHBLhytkCdpnu)pE;D` zF2O8}mlFE!dUNOmh{1*DsaMH7C6dTqfo~Ma?i6BT9r1B5tXD2+%ZITWXeuD&=CJqg#j6o!GK*bgb=K|aQ z^EPRe6sRXCky%Rgrx9aP$ZVi21FZ-@|C0$5MH2sci_=+x)7Uk*Mi{am!&-0YBpkQ0 zY>qxD9G^qqu*fsS9uJDzHYt+sme4+l%u9_MD0F1^NVRN9~b%6wE-M-Ko z_ddX?{VlHDQBB?+k!H>!J5$)1|GU`nXyvPu5dwfL8|J%Fxz`}XY>4lcCIxEch{6qZ z>*DLt0V06VhfwY$9*{;LP*`gCoc*;mDLsQt*DCh|T(ybgKk#>-cWvp9kCwTdGmGNe z3`;t9hP-};KLbjuUBb>_ntqrYH7>wQ7In*NA&S^Iq(tKVnePt3*hPs4+~`h%AzAAv zq=>n}qvO^8quF-pA$cV+)-pn=?_M&9?MV}{0LjS!SLjv?* zhUbL$ABJT3F=|XjGWN>*kGsY<-*Id>%RK$g9G9{{mk0Y~P9q_b$2`{GS4MqSqZL;f z;G)#^63X4(yCt8Bb0j?&!M=*$(8C>pN`ewUp989TnN;uPi{~l;iBrHp=cX6j$+_N)p&-0&kq1B-xUfRM@3ofUXn zaIgO9TXvS7*`+=>yL)1^$GkP^>FRY^atQHr@0*>D}&st$WX>lN1t?O=4RrGuhb}C~w=qpm&z6Z+WIZ^vs z-9H;HLDpk1BtX~)z03sLnm|aGLU{FzWOuO7iOC-*;g6o@laO~#&-y%u`$!o8umHKY z_PMeZ6{%(hXP_r)h>3{rBH}MokYjE}@4ut7=SaQ@yCFvJ8qcOG?p>VwUVlnUSV?IP z1|p=vN>x-E6F}D@wh7*j!(RB->57VS6uq!RqT*P+LE4%hnf%b|H4$WUgZuhc00_Dk zuyf}-NP2-x1YhE1-QT;6k%yyzMqgQ!O^@x6uXdb#<|yiatIPo4BL3>mb_AB>kh{p+ zt(>(ch{HU2aeF;V@&013q<5YHzUhx2ewM1f^!XpOhQa=rbsHt?jz|e_sN58O}|v{VjD&K^Y1u>#p(LdwPLJMD~hiM}nt!OC4MJD;ehKatWh~ zXJ~&a_5|OCnf@wy0{AQ2PiK*x<%3;-nXD}#$#)eGih9TWUhJf*FcBQZRn!)l6v=|JfflWeFdiY-< zV^YfR%jtNDipU5@l91B4BWB5m@3nxggbbT&ws8-Mt42%Kv0TZ`N9Wu~_GytTErh zgmynX8F_#C(I(6Y4+f4o0}-Kmu@7wJi))QFB%9tpGI+Gj;OfzfyE=K#PHx*P@J_yu zdPV%VHSW4%T(@AXygctxAM@%SHw|fh?Nz^)Bl7lbbGy;)qgR~Bx-nY*OTBi#r9N_R z;*yuWY9L+=+12ti_8>{A+`U*`kZNl88$mJB2`O9}`GU0SuIqVQ)o||b8UOvhEK2dn z{+CPP)&r(!-Vsw9BHKMA8cPnBir-{6rBN0pU`=wce`6_`vbv~NVnOz1jD0o`@eC3I zi=H3cd<`}V&I0SM;l_P7gTKY@6U=^zoS9>j(6U}vwOo^9a6vU3k$%Y(LAfP-gT`rPp*2byKwn{ zve`bpv)u}`H>!Y)NQuw3?#Pe;KJs2WCQ5M*15=b%^g}BIEP^$%(7Y0|g!GsCg8;zh zVBe;37!OFSzFu&t0wEG&a**$Euy05A+~1p%np4g>l%QNvP_f(Kr}seP670t*wBwHf z)S~1jGbwwvAI0Ek4ril+6&PPZc(TNlv}#$V&A`P&1j$s!QPwy;&0$IqUp$El29$#T zj2?+j;M}xGIsE#_Dp)MlRI1cP5yA@J>^_^zKf-7R?tbZ$<{Z(s$yr+eYRWMJ?amN= zUeL2qmm4h5lSZ_QaB};l>bY|Q-$JSzX>o4n2@^`C#RBt@iW2^WxsC5 zC(f7Th!$<9E@9XidG3I+MSaE();9$VOcJJbQ*wD&6|X$4$wde2l52YI)(*S>-CQbW zSZ8$^`QQuiNow+YNMmH@dNt?dp%RNov%WoCpEc8${R~~#-Gi29l8^y1{T?~<$4c(d zV{I4fNl=7T7!Lk9yPyta|E^Ng(h(}g`Y#wDLsxjCKGLFcyu4fV14dKFjm zMKMWT$pZD2IYaO4FW&P(OlC5f9>1EK$$Vv--j8P3knTV)d6$NbZ>J?%*+R8t9Plc{ zlc&Y_Q}P3)mbk1gyl)G@=JC)>bpQbDgB53h;u;RmP|n}&PL|gp5H^)a2dtY~-*WR) zKf}Rfr!*kAb(nE)c>ZpJ-N*@=>)W8tn}wr%!rSW#tsI-&#z(1Ssy4W7^|`~HPokTI zwBQ#9Xd3{!6a|L=$fdX3Q+FIWrU0F z@`x)YnN7y|0I9_=`Al;TBYtr^pIRoCx@neCTYAYynDKV4ITdjZs!`+_tlTR=LW++y zn)bkRI07~5+o!S|(-n59lhnvrwGxARH!=|Uw%Xso9}6R@`(IV(YBILT171~c4bhLg{G?uHC>1^%>Ef=FNI~4>Kx1Gs$QQBhOYlo2cR;5@*&rZ(j`2#p zdM;GIB#va$OX(crJQaaaHnb8@P;?$Z(R zNn_Y8PI;wY0F?seZCpO!rM65jU6;TKCF`4e)vX9{c6nJ5aVCv#**$NZUz3=s&n!Jp z?ZZ@Up*HN(GYH6kZIeHL!y6aB?8dM`hPE!B5TythGgIY4ByCsgr@>0lei5OBvwtKs z6Gq!=vQ^3-ZzAd3ow!!wlsS|>22Q4JHQ3F|q?_)ZW92GC0hxeSQrRaQB%ni1;wQ@V zW%>lNG(L^4sB~`6Ny_lnS(f=Y!+?ykVwy6w*&8tAlI}_m5$=40_6NsF%4{RDH>^4+ zwwsMvTsot)n5FeJY+ked_ki(fHw`_!N@p>EeX-0R@;+k+4!ElL{`Q7Xgj z{_-d^jE*=B@u2Q$z{_3ng(@UMy2&VYJffim*l>s9U?rjC%n=^|SF{MUGQJ~}XQ^y_ z7jlm&hF0nNALZMt5K_0cwgwMasiw)fnPvQdW|?WJwvMKft;kY^EK?1KC7F~ofypxl zMCWjY2K2ylbeS@|^lS}Ngf`85Z)`LM03kVQ%4C@3WD%~Xp<&ZHq-KHyuf0?b?GsW^Sy`$nzx*40h>n~ zK`cdVjoUSvBd3e79%7iSC_qUU+H*8WLn7RIA4KhgWJt|{rSpKDbDPtN@gXOIx*V7u zBQ1cJ&LO$ZKKk|BgKH1tQ7z^<2^Nd0*h@3Cm#|-s@UBv9YduE8K?$cK!fg!4qNlD) zl+s!p@rX#}`1zKM&T&i`Xl4=04lwm~%4rh`!U>B5j#nOB)*!)}8@KpD_Oi#}6ULfu zndDuE+`xkQX^qoMx53~@e)XZ(qza+ed0U=KpPvbZGz6#GznCg(C^ zzLO&!wR+f;L_cct5*y9uIMWNmuqiz4(xSfGjo!Ra;c~4OFP+rQl1_X(B8iiz?Y_%! zwG!50H-~-9KQ?y#^yRh$bvvnDb6iov;>T3?4y-zziTI>l)!Ih|HU<5@bL3#JdhlRC zROG@V+;4g+$z@$&MS4+E>oilBN;E!&Jiq<@FAc*miL!OU)bZ)B=C$9fS2~u4Vdv^; zFOvs-iDcZPKkKV56agmjY6WX)gH3dmIEw=tIW5L!eE8UO487B?dncT2i5MC_{nt1R9kpN{US$F_g3SVpAaAqD=pVkwJ|D zLlglEpy5}p!P(`&D9doDow8^_onRaG8l9%%NVHeRW*mw2jxTS02Q&Rh$w@2fk*!(S zq!Rxw-5I0kt)xO=x~yR=Z3pHRgi^fq&2*HwUM2qyhT?UNhM-o{bx2#O!Lsj;=XI}e zRnZ9Q6kXG`4i^U*3#^Ei^|gMl^Gm!@(Kedh?+O+;)a`N9Cv=dEC_e%9Wm2j!W zIm^&OY1%%}0}l&ZrMgcLKnoy7b>Il}1I_g0GLDw7|GwciOJ|Ncho!v@ameb>&H;&n zQsUz{{bC!PmU!sx{q1Q!81)AgK>F6$+qz0ddMhDtH&?&Cj!^qyYKCjTFuFt(5hkSu zygEmSqq|^46BQ#hxtqos+}|Q77gZ|-?^us?sk9SQhMW-z@t|V0UPLUDJZ_xri-dQ| z7iS;=2NNaBTVYIM+W4f1i1~oMfk-(=s-3Zt#g=HFGE#51y1pRN_$_0kEhB#Z>{ccs ziql+eIXG7-CBN6-wNA?z^fi!a4o&OiBkwr`a5QP7-~yJiE`kYL(Z;L-M0hQ3Y^w3w zPEHWV1Tg1-bMqi4dwNCvEd8UgF&v!KC>po*=}L8LdgIb+v0G>s92-zcmwf2qTSm`< z_N%FelJ8L4>%na`!B`)42}p+l`0&UEE`W{*rzBH4E70+RP;9ywb%JEH) zhwb}Ov0p1&duzmRs+mx|BLJqzhze+~Ud`lEf@@J#y#y`8J5A4+fKTXZPb5a}ik1ci@)?IE&Vj)a?W#C(j~N;* z(Wv5T3j0xb5vh<%Jq+($VXPh!r^3{#%2SILu;L>Cjf>uCMp z8T)#CKTMj(@E!vx`$0^Wxty{*5^s|kF>kf{^8;&RXtM>Sr*4G76iA~|^r$wJ z^hA9e>QI8xP>1Q6@4e#HIk+oUni(<{UZNZISX+0!mW*X^Q|hOVC=E&V9~%(@IY5nr2D%zc;}|24_`YQObGc_nN1o+Zz>*U~O{1w_<{PVH86m zKvf*&#+~lAGVDTVe8TytRr%<6iI$BF+C5Vn2JU$_99KfqA|Riv(HzD`Tvz z#hM0VhG5@Uy@0m>d=lty13^^DWn*Bv8b=x zQ=f%2tR1s&$iMii*cj{y4`EWgLywl8k1u`~ReNO*Yc}<(@uiW4H*P22xLv5vSgvK^ zimvgo^0D~%h6q66E`E%*jl^tt^;g3X#33mmjyU&bky5$2@wj}smj9Xw{|9t|Gupk~ z7!xy>U6%Q^?0iiC96gZG7BlA;c+}T@S5c*R#L9Y17vtpkg*W!bTWSDYW2&q05xPV+ zBs3eki`4rKq$YDtFK=?V3xMiyL>aHE&86lhPqyf_GU7I7UZgOyL9zt27b!G{4R%k! z?GigT*)f_3<=l;ZJaOmdlqFe&Dx(wQk$D;i18JaXoHdD0z{8@3AAP~`61#P>W6?hw z)%b)+spgCul0+oUgfqfXW74{?=tV*qzhf2?i? z69AJXx?@t^aKNO*bfryngG&vrRkyK$V!HqfFWI1bGZ5 zo>dgW9N2h)Lp&?f)%exPx^5X6cfSxJ{b6ap7}Gf@Q96t04a8k7^(LI+(r$8T_N?RX ztR$5G@p1|EWt={ib-WNX$QY+4ydl!uRL{zYjO&;G0j}ts===!(YNV^0Kkck|>QiK< zIxjOU1n{GD)uro72pwN0Q(3xR@%fkXPrB*{MODIY!+>c+_OxM_K1N+BKp^_Rp*58npiv)npsfQ#8DNPH>oj}d-Cq4~0C z<;8s(Cip5Yt@Z$!N5|W<41gS+Vwji$9I>ucD&$}-|4KYGjei^{d9R26eBjoPjs0?N z|1U(sl_@W|N#)!D{{SrVv%!ILZoecr_2;>7KhJs~4T+Lwr$vp?#G@W=f>>9qZI+iw z8palA&r3abgzkAb+R`?wG33eEN*=){PP0n6&V^1}n5J=L+fSdTjn?g1S{s7pFx+R1 zlZ$npOzWLhV48~A4VN~?(gZjtEPy>FrJb6_LqMdKhghD~@au`ujQfR^HKXro_b(T( z99>sBYPV`DE)jBtOFTACc?(vrxAi7uyqlalz1`w1gY&oY-0a!q9ybFV`Y(CLaRQSC zmB3d+Ezx6;DU8#=7>1VO94%(Q|?2Z$eKw%8g9P z4uY`~8&z8l-3A8gV;zcXU9=K6`{qMGsm*BX61+ljJa@%v%`< zzDDx9 zVIMCk|GxVd|ARFt7mEb)gsvi!PgAU6=J&n-9#ygB)K5oAZr>+2m-r3AT$4xc8h1#P-*FtigP0p+y?uhyhk3t2##i#WOXuftw7$Y> zhr)N?*4$;C{z5snr^D-ba?AsNuPx@R;OzFyPuYe)cXD&o+ZlGl7MsmGln$NCj63J> zc&T1+@=^H3dky_Qu1)I0nX}3^M{U21I1QSA@)g~Y)C;tqmrncAt+1a5HJ^;hz1KQN zC2)ronZ#q+wb_($oKC{rgB^ykXt&n->rCCZ+83C|{trj@;?VN`{{j4S*}bjSx~;2K ztJX!)(4@PmhU& z7Jgr-2%dLk@}vm)GKS^o>`%U@B}P3z?eQzX@Bo965SkM!6ybEIl0!*)iTHK(gsa0aWR|Pu;7nN$K;Z^c z?MTX26O0mBKF7eP+jTUx0FmkQ?XTxsb+qSaPr_joFZ!=Ch$OZ}=jT~ag*`;f>?zJQ zm>8;pOj(|F2s!y~906=q_atc8D2O9V*)*a>?WTu`4|8S^5-Ve&56Lp)Sv-!dh!Vpj za_kv^Fe&|S^z>F#Nw)Dc1V7Q``7QWkMj1wwEEQseXHBc-Ut5q5B;f64oq6~LUF-Ef zV5~X8Pqm>#Dt^KE-}7k;(DG|C2I3SM$*@3zuG50V%@hpCXj?&OP)W7GC9yyaU`EAa zTI&*~72Pa+#J-23qF`B!aEOOWX&DHNVSz?86Y=|Q`RWDD;GDiUqN-MTw(6t~q>;{O zjmmj2zpaHEk9!UQH23E zt4gCb)vR@0{a=g#=5(H*G3e^Y?1wLcs0j>N5WsMJ}BOLwEH>sm5r(VPL&Um`}5RO zHI0oPR%`)aK?%-=fkLCwt1y5P>Ju$6en8x4ArWUW5gRN;P37O?z>Tg4zrkxI`w+IlV(1_VWl}J<2dx&OTVxCC_FK zD-SHGMtvFG8g1XZB-4!c#$8(Auu%bsGr|h|lBpnP3>^LbsFki#WZWS( zIjEh1y%mw=jezMZLfF6F(G_ux07M^T{k5ZR_)HF>eF*4&pQb9;-sZ>;t41seT8JC! zd-WUQRzjO)Wy?oFzarg>iu4K*k@=57T|EHTD|J?Oi7^+OZ`^879Ndr}Y_Wy_oZlK< z;loBT@c|NYfqCJ{o9dD4iK;mS0FB()YcQRK^BwHw0siUQo$7TSsr4l*zuFjmo7-tq z^lPsx_2-I`B9Yy~=As0@1{0ASzzEUG0>%-*c&N~4Lo@2UUTku5Dyi*?OnNv#e%Ve_ z-0V=#A+yHaf*-KqAj@b~k^`#uoN?na@m65sYzsx{{neacbFoDO=l%@19Qis%_R-S9 z&U?=gCPXO~)$SplCyLf@JI|>&!#PMzyol*6714gk4wxZ;;b!#$Z7|>i#S{gDD@>hu zB9AX#-In4g!P)M9Cfz<^r(*Y|&#e;l+m2%a zbbF)<<^uWtdjk)TZyfB6KWIc6mRwU^)CoYs^)CZb{rG<`moFORrYX)Fc9mn_Tmt@$ z`4fDmQ|X#?Hi#4PO>b=s6Hv-;_zIOGp!S938$l3QH-J~{E}e(5xB$Je z#$B43B62skyu3jA5Q6^3i zib}JotAp`U>h@#Oh;TLy@xTT6(8A=A0blhH8P&EMPE%psX12dc1+OpK;jNIqSR_eb zW`3Wq_X#xzsbn{rhXoaXnnB8=0(2_8rw<-Xn8)Q)w4xkF?rkW*#3xGNJg*o8C$Ob4 z<&ZrmDC1Kw);a@YZ7~Kz45Va5DD8)bNs*=`#aagS;z0)#KlUiBu5C%oL+IE1$ ztHhc06*mcrNg^O-Mo-{D!+8hcys4>@RGNa{0?)hi2E3af_|?BcYfZR$m(x@wWU9Dw z5Det-$qX>rntHXKO2|x)&Mxz=hyE0M7gS*a*~YFiOen7`Tn#<-zz7k{trBVgLR}cM z`w0Pqgb2t8W;q+<{6%jrfM2e5{hEf~rGWQ{K#_tNqAKy1Qy&%Vxi>}Y7{Qhy_@)aW z(Fb?x50FKux~~2HsKpZb1haPVQi06o6JY3rbEkSs!@%WyLJk{4<5%a%s`XXzhuB1g zZ4onZ53xHsP9sP4-&S#_WPAB2?SR;J>jpDyxcBC&5P6kQxXtRV#}E^@GrpLx2o$QS zCrhg4`eLl839lycrixr9i?nE1-&__M$*uM;r504-2PP%{4A@>D3gE$aGT`_{n9qV5 zyolyF1G_0L`xB_H+7M@!#7YGVa|9OJ$3njEYYSLenn0bwtUzJpY_3QJZ99-3IuKFf zxG!g`jX+Us&fpdOtEcBp#WFn1Kv0``J@~ksAZ*Y>fr|nYWpjX1zjBM0Pl^vTjJ4s&vZi%cE1 z8UlP&xqoezFYpF-_mhvY0q-(7Q9q%b7e%51YZx)_givA~<*AA?Q3{$bCm*B&cScs3 z+Tj99OyVD4f7~ybmzU}-j}E7LyUWCJ2z1r)P|U;JtGrChW)S9+N_vhg9Md21rT*BVEhu=;qy0Oq8E=)jj~o4IZ*S{J^;M1zFg}GAZ_tK#UATtf}n>8eb&>PyXN-8y7%X#^=ZK7eA_4C}_I(Jth4{ ziJ@XA+uG35SpKvM%l8({PqeV_1AS#d%x<7Sfjb*)4h;ufnv%FHBd<6FVP8V~meUqL z$`<8;?1q94DHtO2z(hB_D1>;7KzIrX{C-n0+?|1M3rPN<_v0mQ3H#J&s6{)Mx<^F2kk>)*T~>6X>>?eY@&NPJ zO=NrHJBe(;R_bF-`q>!$@W?F<3-4d!$25GvmP;LIR0f#Qy`r;WJ1%;at>>~&=6_D~ ztopo0pTNd)ga^Io*revRT`XzyfoK+v4B5Wb%#C>R^ zS^+!WoZY1*pc9TNtRKVAZ&_}B6?(qrXuwM_PJKSLCR%57)lZXw0FSG-pJc+wTBIP= zRkhny^Ph*WFRtkyV5m0Y%6>emk}QqPU#D|yVSZeke3Oq{^i_QvRQ7*W_tSYWiM6aF z1N$psfS5O+*S0l~g|jgn$|qhSo&`2|CFH>C(s})oMse8C4f+?$_KKD*iFKjAwDhqX z6}2}7#?^cMtNf;*d>*mR|3t4dEdXgs*M~!AlG-HrF}V&u40J*%gK|i*9DX+K@q~5S zbpo8PfUK`B2z57R@-Tnjuta8HLM^ydjkl9;t@v7bvM(YO*}oCQXsIzTwD-53TyFErr>)S^^r&y=@KQ=i5wNkv<#i z%shDmS+3*e5%i3-DR6_q`a7$hIe8z8Eu4sfleeK)meEX=P$}21Q)S-hTzN9qbDke9 zl!062QL|r3eD=`&F+tp=3CI)2-u794pr(?LX8M^-H$UJE~zEy|*>hU5L}R zMh7@oD|($8g+xOtP|460I75lXl$$b2GZlzEfGbkhCt34%yDT$U5Z?1IP?>!D*9Rb& zJ|MZ-d{qd6D$Fc(qUkGu$fLtlt1R6_2^Y>dnGO6MV`2$FK>%(_A9R?}O{yTz&OLMz zJBmC$4m_nE^Wg!C)O|GB`8BQE7qqP)9(rOV3(#XcT^0Q2 z@DuLkeF4^r=7TC4mQ9&O^p>C=uF3)1oWfi~*E=bNp|;vS_mN}W;A$I;sXlNC(VIri zca*0@KEB-XwYWpta@lQ(fykpBD9O}!D02z`@2NCn>J>I3T$T+J3CWaM|*VWdAV z_3o|vtO@X@y@?)r&3NcONx$)%6ODTf)O($+m$lW^nzu2XI`)cRdY$%Zr1VjkT6xdxVy6`C+rv2cM@5O+SvjQ_atLMe1c4brT z%<&@G>FwcApz3hKL&A9#;p{S?8l~LfM-t00r80upj(VS}`}|ktSi4SNYD6ft39i~R z76rs2b5fnCCzRv{HsGKo$}~#ybp&i*Zo*VH?WiK2Rp6f_3+M>2loypG?NZDFZq#MI zRZz$DpdK4sdmXc9e;41kXs%Gc#Hy35zzwVZNi+e>1bRw-(b@*!kV@ye@$x%zy`i~~ zA*uOq6@iF?2H#Tjg^yt0Dki!gSvkVs7`>k7G6?)sQbO_YKy=z~Z=^-7 zOZ*yEn*47WXyqFQ~3E3<_2xqP9FYYG)HWElXj6}Q5V}4Fer1l2a z1+M<78r zx!b~!C7e<9CU!*6XCnvqy-FbK!dKVQU#vx;=sAK-gQ;3bDPhjtYnM6B2`y#>ne>46 z^K_E(uWo_a#=N9rGb^TSHJ@4y>~h>)SN51(iEmm`J*p7(g7if;3i7b=*Io)!6VvMY zeQDv%B7MHHV6I7Vs{uCXXRi#pFk*OBV~2<_8yArye-?4`u4JtJz-wN-zKc_+(_@(| zYisPm3Upcd`GsccCNp?x_H&0H@669z>Ui>>DsgTnxS)ivNAZdtMn?1k$0APzRanK3 z$xGa-c^{BiUbHQw+fcHoX=AJ!kXYfSqgskwBE^{A*W9dnZ?;bAzO?u%d8+|2a&Dp1 zK-&b^V|I@r3OtNA7lbFl{nYnICkAPcZH74!))~o@|u`&5yuE~RH)OMF| zRxPoke<{~Q?II3xILQEE>PB`%um5AOYK$khyUeYkx&N=yyni4WQAYmVa+Uje==9OB%b(?7v{!CNPy)&PO+C3_b zWh|}7P?bLQzlrFbYKCI{MojBHV7AyQG374|tt&!8j`~+eOqjmUFCNl5;<_^yCpcer zb7j_{b^cvyi0W71idpoVie@|gW>8L0l1rL}EwkBApT(-F&tEyhE_~7VWHt0A1GU4- zLL7q_{`7GGw|or1jV-D-9OP@9er_lH_!@iELXNP4L_xZzUw~AFdZ$K#)2S#s7-GlKC9Ex8iq@w2VZSzZBMFf z#^Y8KTz^}ON4|!WIT1;iI$p8gI3J=HBp7GHIPc#_U{Hk(m=;mKXQ-)lJ{ZF92~fvy z7+T*sk!``V^Yx@*HChTZ`I{7*uZDt@8He3P<%!Go^PD)eM&IWRm7I@OZc6Mi&;I9D zk^h$++BSotfT>S=jM)Hgx4(3aH&0{}uf(K&YQ1YLlZ4$&#ha>?=VGb|m`D^`Z`gx< z7h1NWWVqlknFB>~DweC{#V+kUBOcC(EV~bJnW)3vzM{9*-6pr$Sg_H+swSkFwA1|N zF@G}&e%b|Ys1_NuAXY6QYFzG)RU7=rVC!G$mHa6ZcSK)r`Cu`;%|~j*R)99~YRHnG z;`g9MGC`}@N+A*h;@gZsXZjF8VMLrE3%4Nov^JA90?HkQmQHwWm7V+m4PV< z*LDK%;^(B5vFHR&m__xK@#cN7-Obo_mtTNn0kF&N`^jAY8LtIBQpk-f((L%%e2r|e zS=Qd3ns{KoU3Q!|M%SVh&oH*q7SfX%PF18dZ!kF}>x$V@)4uT9HbQ9%U`JrQ%}y zUKs3LqOkkz1_Es_%*RRK=fiJMGau97u}l`RNLJ)25J5+4@7w29m5z6-4VqNv3Wmq2 zc;<9aNSqs8s!V&4hF-nZ&}Zw*FEeux1HJd(%>dDe)Wn@W!C&7Uy|^2tgG-->6x>r;gMNP z`M>_Pdwy@RvrxXHum@=rgs*d`Ac)`s7iNAyQ!)?mZ7&a#Etm{1qc){=jrdHoQXOc; z3Np%=Nlwl~^_vL27>fdF?0zQf$r$jk(D&42)hG$hNB=$d#}jC-pcxzO+jI5<%P;_K z34UG|W0FO2)#PdC3r8bxAyG_1>NxwDnsH6Fa4&ym6F_40xC=u{NnvhqOByHX5if61BP_ZCZtj_q_{ z!52^J`P1+HCn7#<6TV&Y*P<(;u^WU5^?ZF9MJp|~l zkJg(X)!+olI)P;18|86rQ=b|lM{4-Q`egB8H$;R8#Reim&0#iB5bU{|V2DgbDA~Wv zL)2iVaqp?TlUV`dRD61?ZA3x@!o2 z6XhwR6T`rZ+Q5lx#6*y@0yIr4eI9|4)MuS$mJdQ`TprI25@RP#a4LErT`c@X*+u$FqUmkpDkXHej)!RYFU6? z$^yBPGPA)e`xxML=RdV#o$?BX!o9x6&EE%wzXh=ddJz(FKZ|ahoZfu%mf=yORbS+E<%bE<2a&JM0bn5L)a@2>PnTh! zMgQbPh@<0zEYg)WC5q=d6J(YFHD!=$ZZXfbk5#(ZZNZgo{WCyVR?B>?I!0m{XE_f% zt49g5A=-8HM!`W5u}C}1n4;U6DlvBkt*z2~!-SeD|6q*M`I#4qSV zw-sj3V5-@r_h1D@d1VekPqLzYqyR82ff&k4Quoz;Z2!5aBtECaPN~!#_s@QUI-bXP zC0c0+DEM$=Wos9B<375&bKnh8>4um+?>)XPTx5))`HzG+n8IRAIM)vinAPG;*sqCU z<6>gQRM9#D7Dopb%@lcTJx-bNFdc8=M2p-voMTPtyPyW9j6ZXnIFl+Um<#*JQDT9X z_-vvGhnQ2>Y`e}c^?|S@sQFLKBq-9k3hMEPWFvD-1l@UWuR(pxebm~oHKO`)-N5(t z|FN{}(@?bb>h350@Yir00xTTGwfMIi7*rb~f&VP7bnTIiQ3I=?09taXLDx-BI`rT6 zc0T~7@=A|*%CwZ^f(7FH_u(JQO3A`o#FE9AI&5sGZ=LQsVF!pb^ahQs;f?JhHuzFN zpRZLxbvHLM?2)1*AFzT7Eal@C4O+Cgi*4%J_!4j;veHJzt!j|{{&9no=HpX>u7Arl zu4mKK{`*v@W4e?*O41$VhIPp){Hu0dqTAg|e#$~<4AG;8&=)5{_-Wo4%d*5B^Kzsi z?L1T)f2&_WKI&YGzjFyc>>F;;cNX^hlU|+{9db=<-Pu9TnFa{6gYETVji*jJ^YmG+ z)e_Sak?qkZhFm-AdF|?uApkhf1**R2)SSQ6E36~8glsb(sP2lUy8|%W>XEJd(x8r9 zCuB?z+A!jpiEMVMwidk zn{wY+fFtn<(ul@Pw>FznX=({ZZ!uuzQ@C8HP=7t`6anstDN z+eW}mm7j@A#M-k%n#!*}Ws(S^(xg$$X7bRl=o8c zG$h@sODoaxYuNAuWi}k~CK-M!ujWV3K1}_!khZoARkOBMsK~Tvxnl2}Pc4f%EIisB zXkO+c!R7ei=rfJ!C{9pPs82v+l*L;s4RH$nm5JCdd4wdQ@y3i}zH^JvOsHZuM!L;} zzY|UBcM$xvb~zzBRU-Nd8}?9(HP2?_s$2V;8DN@Md`9Ns-Rbe!{}`>dMRQKYTROq` z!H3#Z%Isrc{jZiJ19GaLM;$vsz)c|VfX#)tST#9Zh2Nnl<~E~C2%~ZA{>9*h(k04E zj<^h7k&j#{K1vadgcU2DcHX-xnxv>!EGt%mICjZL!)2p#z(NatqVXN7WlPxjECE^i zqdU_Y)MbpMlt}Gz_AW!QZwCn`bS~EG=)Esji#VBe_ zePG{p?_~FY`1_SGLQ$A}%-@1$dLdd<6+%FD5;daSfa2txfCcp| zAjJpIXAvAlXncL4mq7g!E5lD2Y*?ZMsDI=R;%@f?4gF@xr?ksC6YCTc7Y&u4?BP-@@Q@`N)-fmC4&MU!XvT)1tC(cpH z8jlSTEj@j6E~Xj}0D&uBmVcN42w28loJH52D=nzaL+F}?p;cG;QLMr~YN!p9U==`3 z{jbpJ`itLdOB54n+ktcQUPmw3Q?!PKGf+PFc-_U_=ilNZN)i+`-6rs?f^8$0Q5c!a zHd9G_pJE+7^EOD_d1mnb6(>@_3fJ=1Q8;!Gga2`tRsV;}t`Z`tXp5kz{o3B#1K8|D z2|<fA>1- z6(LqkgF*2`oR9p=y~c2##TGhW&aNCH>2+^Q+4)aa_s){{X~(Qnfw$FVx<0N=M--a6 z#meb2%Hod}=juCl4??qv-d??msNYsg@<46%Zjk~t8U*y}<;MfsXNQ42xI~nS3d?i>5xWai(exN44Q*W_I{~%Pc=giHs5$R#5pZ=$ ziNs*$7QPkrT62Eq;l?k^=wIvOsL5bG9~G*O@n=TWPUjttP?h6lEBfh}%JZ50_-)?S9qDBz+gbEA5D#*3I8cb7Qohi9&*wkM0@8tW*~wax^F2 z2|tzYy;u^sF$Km23OvFsD@lUNalb7UwwG4jMk14UKZCAc&R-3lV`1z7e(M+sV#w#G{N90hd$tn2%6ft{}d(aUCL8=JU>?A>Cw7;pP-7jUdV@z~>3XRzGY5X1STWt3TV9Mfw!& z=FYrq({iA|Qv0&S=TYtcaFy^=%Ai zNZ^SYM7Y(dXc!Nl$J74L9t^yRXhgfqw&E+t!_VcX_UJJF)l;Aw-M1|K0&H-y`AY=G zFtD+Fj9#g7F&lHLumA2Pl+-1%{edU>d?fr!z_B+c@bfC-|9;=wBCJ3Y1&^X$0v7V3 zEiAn8M|Ax;O!K|kORqD{Khx-Cm3bO;-Oqx~%bldzhE031y3s_Wg z)#+iCxdqeI!~P}?w`A&Z?;{sPYO9jx!I|pkhtvPu^Q&CR*zc1!%)LGRW0M`uTAa|T zn%cOgO5>JtS(@m0bKl7&q@Z|xk7I-Iv84GMe}89uIKH&CCsL^vM>V^eo+;uh>{oQP z$1S-3uyk|{jja1}AH^8y*3VhvVd^6f`*_9{PrprjG`FGnKX9GoYQWZbhl+osQ1V|80hwxX|-1&MqL^SepT^i2%;GJxX+fycHatUR9Ad01RUMBqOqan4bG-}p2Oj`fAj65 zChCp`liwE_M%uc2F-yG*FjVofg4_4{phHFX$_Q5ZW{WJatz-8?&L}=Vzwq?oreHcF zgi3?f=T9K&JMpSTF$ zcb?0T#5`e7_?3$-@4A88N_ejutb9ASi5?>CwJsj%Ho98LA=8#Z|w$NcfoqT zz>bbhdu)oMKU=$mpd6aBq;TKmOI@@ZEsrAD(yPI2#$=kd&1$~a-z8s`0#_!2mm1Iv z6=9xF8R?lo<)l#sbSnIIxW&in%Cqx6boP?K^cqV(#--K*2UQ-5=TeN{$D-y->Q&4p z$2P=?IJa}=Q!z8+VmEZ|1@9=vskTMTC96?9u5*F382ZOuzF?KjQC_u9Nf{e8&7var z{y74Vf&`bw*}bs)RS}Ra;PE`d4Tm=~;RiYd@SrB{^_l6t#xX5f|%|SVc(66BT!Yi#H$dIh_*yo z@g&Tz{H1Hkf*B`59W5{tv!m=~CcV*R=}BvhFUg-oM#W%$PK9V$2eBh9TD&-qfsZN( z(vg++f-@7Q4}}uQs9~ROGM_l-?5gZzR7{f=xr4fn;d0CFIBt#bNKHiunop?M@>YcG z=7`3a5d^-{EOj6joLsJH7GX2gJ087I0-qy*3fwT5WH+=bm?qMllra;OWd-L{u;?T6 zq~%mBfxrfu$8dEMXQ!WYs~=TK8Ru(0cW`$-GN2&g&KMLqaM}*S336hpS~_M4{71W! zHx=rk&yDC$Y80J--pPE+a16hQTcB>RYcGiynH1C6nXud7V1%~}SoBl06RPfB9U@NY zl^(}Ez7_#R@QeMPQCmP|uyd@6iFs=S!iID3o~j~?MuB8E+B5Hw6AiCzsBxN&4KG-8 zVQ~Q;-s=*cq2Z6D+>T%3H6^Bxc-WaET}PI^6Vdzla3xc1^n9ksfuIsm3{$H$PD$Zu zml=|OT751B4kNBhqswEb2gPHau7jl*q#TJ2=*SY{Dsg$sfe6XFe%E%b5J0(A^6HnNSzc*gU3ONox z86BAK_YkBFZoT73mlzEI(%Uj+wl)CB(`u}yPc{IEu8Ihulnnzg{%3Ddz+hU(a1s{V z&JCUG$3Zc*)~3DO0mnuQz6n27KO2Brjtl}e+AZt-s{8xbIHBCcUb8-QEms>b(_T1% zPcPkWK-ESJsRMX@c3}QWH&lP=ar~cG5-1NPYk~I|*n*|uIBf&V9q4~7O)_%`=n;uD zQ{vh;3{Y{UUletFRF^oIIk&FkFNZZ!OmqRp^2F^L3QJC`MmSfuwDfURj7OKNMdXj2 zV9BkV7elX3*xN*})Ehx?KVBAmQ-nZ&Z#d|1t`jyy1_Hw;(+UnbVc9~J-E0f+YI7t& zu^FBetw(jk6@ zZRY#pA8La$_PzhL!h7D36Dcf^NS9r}{WNdakjFQ*=}Zm#>!ZNuC!-Gdx+0wt=N~9w z_zWi|#=aSPZaG0oa#6>a3%m8??>CKm%y%yH?zfn{zT(-N$#0kbCRWz*_UE5UHCRKJ zV@lWu=8o&P6FuK|3ROzYZ8yk2Xs&o zPJB}f(k(WG3GN_92I#knh!+83SJ?axwVA3yho`Q+Do=}*lay+VQ&_qB=|fi4{2jgC zog8@cK=LbK-Vlcan;_kTYnbjBPl)3i}6RvBNKE(B5o9=XPNVal}-il;jKLYb7HBB(!j7; zcXTv07tz6pPfZ}AfcxLAyZ!!`sx(Tq6KUPXC68|AXNWMlzC7PLm?qtO`%CNo{9ubbFaj&B6?8JwHYAMVCDr>2j#uqEk;qflW zifcDh4V8ukoMlCYEoyFo4_XzH0Fku>7Vy>7Kn&K6yJA5?)Ah~dl{?c=cf902lNi)N=QNg zl=TLT!+tz~sKpYeoBVe;0Cb6em&8|vo@mxYz)4EH=Uc1=M*nlQE))H=m0^GkjEAJE zC?%Ey6QXw*53R06mqh2I^S(BCoyC`K?SGQ1)cXoD6i3$b5i?9rNrMvVM6XVfGmRUZ z3-S0yGmnv;@@gp|10n6uT9=O1u7LkYZ$KAJ`O5N}obqo&*f|w%7$U*vQn&!9@oUFr zAi7#hjL}0VLH4E5>h4wkG93b9?)h&j`ePVbxGUJp1-R=5+uBL+%<;{$X(qAYDt|{R0uZpzfoR7j1oB)3vV<9h|4z}#H%>?jvF{Ga4w(MzjYPP=+G$! zlCXS#<=9=I1mQy{;kFVOS(#CV>NM8vni{knlA+%)c;Vtk;j_5J(Ckvo9h($EGeB}l zAJJ_@r%hIkzm9AJ%t{7to!b|+4#jyDWyzlfHX`uO3Zg%NAJuyjbM$%XgCCrSt+hNf z4_9H@v9{yc`gdhxsn~Ofa+N#v{_9is)}fWwnY(fkf`z_pZQ)7ASi;$mC3iEqCG}%D z8q0ynKJA(bv9XL>;tKFeYp$hSPHcM3CN3U)6#=B>?2#U5{}3k#`K?~}>DM04x{yQP zQ}TCIJluq;u}^?TJJ>f_U=3zVjl9Q=}{3=E{tdyN{33eOEW zvnBQnWvyH}ySm4~t8{=3lSiKY58L$b{qJFoMW{IRT+y1YTEfLJgWEmY7UNsH&J@0w z;A%PH5#_^AMd3 zmAtj!);V?db}jFCUPdOXA=jVU*@G5p2AulDK^6$Ek+m+d5T_Jb_niYvlMR6&tMR_D zM2bT)MDj!RSz#tJpt4}py8t!{Ip*;H7Tz4~%YL@U=(WVnf@Aco*MA)L001(=nOBi# zQ=hbqjktvbdom=*wX^OlNe}5|n)-&NxjFlaMoDcrVWHaptG~86Gpr*9-#E93K5`@~ zQc3cxp?ZF{{S#p>>X;|*onJ3uBtCHMfPFh8j;8(hE=tWdWk_meS7c;HADGP|I@?7~) z634;%?Z5EuFm8*KI*!b&RBlQ{d#C`-ANIW}E}4sx{9!+OZ^p{dcsIyZ29XPZy;B?) zS&x3CvbJ+md9IR%3t~-a?nLl(@i3x5iBY25qK60BSd4c2k$Gy&&G==J(c^P}881!w+mMvif1l7!BigZ41uEqT09l9%d=yCJYhg19it`5=N`6^KOkt@ABIyz^s zvYyLczctSaHwc(9tcxk_DYzhqb);rM3@E zs}T7cAf_dbmv-4xcEEm}5;s73kPUZs%kT`qqvGWJE~I*0(Z0_?)>bXS`N6$B&7PKQ zEG}e~%U|Vn)ggE$?DYZK;djt0R^mqQ!?B(ys*wP@p!ts=!^Z8)Nx+2-6j{k!B`cz8i8}F{ERW<{b)Sz?AUYx(O z(LSbH8^HnVMZPj@vz%Z9$t%c`)h6Q@rIy8(#SGq{>FKL_1nUedSNT#E_Bx? z^}1G=(dxC-ZLn7cfX`Q27hJVMrGw^Z+V-#dKU43nZvi)=r;Ih{RbQgY#yM7D(z=_oY;%kbQ)-r z{yXmDaLUhmI)aR?JrM5s;RR56SP#IH-oRx~zXRGrp#w902i$vG9h8p#!S1!95+dp( zlg#&lT#xp@wLqJcN{2qkwqPES&M_I6p7K{ZCc+5&WsrJRx7eJ@tr8=>e^T_8`TKWS zzbFzD3EFWTqc2b&9#zp*pPJC!o)*7#-1vAC0GB#Y>stdFkjZ46Kx_*P9S9T+Fo%QS zyG>?PMl)w-&OOTok;XgJ*8Q*q!<|x)JT)A#yEV;l5)$`zynK{s z7x^6@8vk9&hak!4rGCH3V-bD_CSd@S&Gig;YDY0VeQuqY__3Pw=Y#89 zhWEYY#N)Mxqt;*!@JJe#_PVlR$WA&!64*2fXISbR)MLJjsx36uD1C#!DJrEBgnjg- z%%AHebEmzG-AA^cpleyr^l5F~J(m`PyB4*xnyN_icN3AX^4n3DV8i zUoGvt_`qT|RjXvq@Fn;RdT@oS)8+dNT{0iDKan?tXt7BuM7I8IZ4DW}oBFqi$cX)8 zA%&)qrykn+KjqShFcWro>s3<(3sh9$tv1FchS#jW{^=MQdT}mf($-Kr`iS9`hVG?t zr;xqDF74@%p4E(TGHq~#4_ey4{Z8B(M`F|$j5cdca=M`Ppy2WWY>t1Q;~R_BkXnx2 zR(&CR1nTL&VYOpMtNHwo*tCiRxJrF(SogINaFOysWHT@oL~fj;NF_TDluUr`n)LZK zThc|Km^fzGbBFTn!ykL>A`_RXMMDkv!&@(c2nKp6T4c4sodKe2)j7v4nLgSS*@m&- z!S~EvM7|Z6RHT1%m`%Zy?CC$ek0R!~u=&~0hWftRsEfc@qW|60 z#O(@sZK1_H)l#6b8{d?3RS(&JrZ-P10daZRRvQZn0LZNV@oQ5j8gFhJK5eR{+{P-X z$|>KPn77OXZ%8ewb!+h}GYG=DRD@gILCsIapLM15m^r8D>}g+z15Hg6#gGY_Zg7X`o{tM4EB)W z!hPH`#hIDrapMfl%1jH*%E}5`*K8e75J!e1Gb=;0vW-pKI5IOU+P2Y_%}ZrnZ@1!q z{%?G#yb#XA@A>{dUmrJRkEctj)LfICiLnxI&&_umfv8J0uy3rB)^!bqz;U@`sYEoOhIi|77H z#Y}d&1U{ewb(STzyH~ZjDty}#M3GqL!OEn(0j|*6$&7fvETZ%Ra_V#p1ZvdCCI`*w zjZVO`XbrYwJ;!El{f_&D9GZWPl*JXs{usN17*R6THZ(T-{h7DRFaGu}Yw_TJy#ys` z=e6=&NZ9DszJ1!Nedq9@W7bg?Zm}{mEDu^T54%O0EWIvmTM2Cc=pTS$&Pi)tG2(+? z1qA04j~<>@Vmm4WizrvVOI@f-2S)>m{6+5KMG+xCP|^L0QA25HeewPZTJOwcnWy4`LZC8FY6QvE{e?@UPJfVlF#hV46^W!s=S5O1-kt^Q^; zJ?bt97Ufz!;K?b$2#}n0(`Esxft4bowVgf2KyVkSN`J&o_ZDomi85Kd4sNu8NR}AD z@QSFII`}zol~oVR3ku#2xbg;$lY^RFsx#fAvTS*(XK7+X-K^*+i`%2N6(*vYV=j!*8@~3$k^7U;R+a}vLsd6>RmkQ6KHkc{N-sKI*MRU}s9yN3SnE zn@S@t?$(wpn})m=Uz_P-HB>X_6WI6Kt*5JGs{{Me{8HvULB~LT0pQfax|Vj@; zhYR`f%?IQ5LI1Ury|g)O#LeZ%25Sw1jXcWiJzdrgGaS@UJa&FKGx1M3nIfhw$tdBu zWt2PGzNwz%1e_ZMa#rJ)BYEtwOlyJIH0l~JqYnA>YhXVgco2w@({{?eLOI4in6I&g7dO)>mb{FRivbb$Fd zL{id*9_;xMKyoasFqLC4Ra=UZ#M=q#E?zaFX}8UV#o^JUFyRvEkjKmt&GeC?)S`rs zW9Pko^|*!mv65_+ds|C6ZFW9_umd4S=gHRx{LV@y&}iRoyHO%u-bwbGX~jQ~lmg_* zt^se1cgusWf(PeMN(#kNOOjLsKk6i3jt=(W=Q)6M)zpa?=uUgHxoOu^n=ff^j@8A# z<;5{z;G*sK-rncv7i@7n&^%Iv7-R^!1PQO!1R@Hmgh$}4`;f=X3V1;6USLzvxJwDCASOZg-SW>oGH<7V*2grd zj4nOc#U=*^e`Z^xx6lH|tzufW#2l+Oidmn9%>*sR%F=l^eO=*ie`~7Q1(agOcNUha zM+wg~a|^*s`fCMKinUSZVUKQ48oAA&^`04zFB*S^9;vXoB>^OhqC6IN?67Rrumz3V|jYms>@w_K}tHA7;Xat=z}XssGvn2J(-OJA&_0g98}D#+lWgC0X9 zp8fSV2iVNWc6JRhJ<&z)eCm&6&U=6%(jg5UwB}E)2PfD*2df$dGoN?O?A?3*uxOk@ zz2`7&Q3X<`ID)HmCTT6qd!u$gm($-9k`8Kq|1$DvEZl1}K==&&{ndM7?92D(@O-0a z_6Stp>Fahg**nGQn>W`@xeusnL)EpL)S8 z4Sndd)7q~{_ffb+biw ze@sSIK3=oaAjQ!q8*{x*{4|rdWhO*MeKHiyP_!{qhs&o?uJjEiJ zBa6L(I)Yr}yBXSwsmQT+>~lr@%TC0Nnqg@Ndm>80RQtJq`(5396w?sR=D|FS0_9K! z1^~Nn#M;BZUxQ603tmnk5 zF^Wr9{3ohT)FS@&f7`33F~oQ68|%!^znU#_Q7-x?4}9cvXa6B;L`q02UUO#0#9U8Tn0D&dh2)CxU(9jtqqDGHq= zp*ZR6tI`>zpC)~J(_I@NUc5)z|3SWH|9_}HgU-O7ZNH^;ir= z*i)Iy;am~f4%*u1bm@6L<#4{k*h#;2i>EF>Otfp`*9>tBl@SJEZw^ zd_=bfE%*B1cRb*)JNtuyPhKnBY`*vXIsj`{oCek+wh83+psQwr8Dqc|w&k)o_KdPY=*^Afa;8+Q5Mv(Z6N-RN_SLT>f{;>;^6h71}-=Q&$ z?lOgjX_PZ8O3TV?s-5`~+Yy|*1?iM+lo!J(`w-Sh!~fyIzSFDUsg~`>R=)hPazAF2 zcV^j+QwWCA22O+C2(=1XIxmj3UgwGrF2AbQ-a;rea#pGkos+C>q4feKuKC55+ z6OQSaO%qvd0A=Huwf|uZOhduYjo)-eYV(^WopjZiznHE6hev6x!eRj{L-%FD2{;OMl^A(6acT1#k|S--`|wc&08k8ofod&KtGXoC!PZ&hKG6y(%fj-h zT7tw>nv&<-YfRO}Zn0s7)C-R1L`!T#MNW;%y^*Cp#M7l`SLg&gTod0vy=IJy8NT6` zj4mu9x;54!R-r0f6kB1{GDSx7^SHk$jcj&m*4V2DyDTYe#ZV3gY|S{fB3P_@{rI%s zqjT9I6T7b;X2OKvga5orle({?J-^naX$~XX{#vPYkin9qS^VEuMK_uN$bz5KEz<4W z1S2PuUQJ^oeH4NNdZg+5<@@ewmt%kPf}~eLuX%sASxp5cTm^fUdZlLPq!t6H>sbhp z$fs>W`G@;7Fhl-N#_prB=SL`U)ky}D&!toNnFFf#Fx8za{_!I2FLdoN^tfxBX+{cM zmgVB)PxwNzK|6&o-G|Z@$@C9MOY$x1)lap)py!scOekYjXdu20$fK_rA7(NveG#_b zuXzp<_oi_Y+rNFhuhQ2tg1p(|Ii(aWa@&K4mio1VfZG8MY>u24*&FUHsCTft#W%hd zZjzsCG^tt0huQv?U$#)Ui+hq?LL1fOiQ2rhlI_~IS#LP)s@7PBZ)pV0J!f1e-MpOV zTS7glE1AjB+VuS1nOY136kZH%qV4QBuiUcT>` zd3nB-TUxSeVmz z3!QS}X07kilMm7o<>n{YlM>AguWFNn`iq8%*72m;7;`80j>;pwZY>1=QPsC9?i}>V zRny#G-8X_SYbCM?xwb3&EC?%&`DRrrZlcS)Rk!&b+eN8fr{2i-Y?<;UuO=q=zmHK{ zuI5;;P}nZ~bwbKcOjmaAC~{nwsAA?O{$G20og+oB89W$&saNz+{sWhA|PaO3@0Q?!Y6{C0Ln1Un=l_^dN4sL6ho;pF(l|DMtX?iT9O&t0C%YNZS0#76i zoB!Xm(@(;wLjZw`_(Q)+2n6x&bb%P)X+#h^qmp8q0T@N21cye=&%T8b{duYqtNuAO zH?9;&;sfvL7_CXvy$L^CLPOWX`Fz+pSd-RkJO~LjGA{e=5=RpOWJthuKPOC#Z=*6* zE^H5s0Gp#grXL{HuXQ5Y7SYU32_Wf5jf2l!0ZpK}QYBUqC$M)8YTIMa2excpqUl+N zVB{AJ0<{1^W~{*o`*UOj$3X!(N!Q?gDQ{I=KSuJRlsGC-*ub-6*q#Mhhz@%61f_(E zAV0YhG(kW@q!6$cNM-gYz#?_@?tCS7rK%z($O~y*YZ2N!ffPsuDswatk%~%untiKG zLRIjkcDe5w-AUSd6@+L}@*1LC9|ln7v7eBRZok3tSipeeQK#Zmy3Kg1BX3l~JEwyx z?umAJYw$-hzJkbZaT`nOVY_JznEm`c94jH~qqJpP8s(q`hyZqj9n~{KZ!w!@CUw(s}Y3EePhvFR{4Q2m|fF zj3vJ!0Nyy3`RN3>IDrJGvU@CYbr@5(g5h0+-XcW;8DqJ;rF_ux3_%^}RYrnD6hpKggDuh%iF5sDK`duhjgtPKqJxBMgAgfhDm!w_$|# zRIk;21F*F!t|AnvgeGN*jJy^~KCX3S0oYPdsgV_+AyXw|;fPK`@gP9;KL97!?E3fa z2xQx7x4<0fWb}$JK=v3wIDZ3d=XkDm?uR^bBlcCfLT5M%QUJbY;HGt7bo&s*x(FJ1 zp+3Z-e&7-+0o&K!Q0GN)#lW}(-USk)B&-yDhYHU#?P)Oz{6yQ7Kc>8n$^Ias%EkCl;3 zV^jtH=qN&{3*De2yLALtuj6mXT^hm|RxwrK3gsZ5IYt-=oTziq&fov%fpYV*0EZ9b zVmUD9(^r`o;OrmmH8TVL+2nu{rfaep#pk2w2l% zJGSA!9_j+Bu7&|o6@ByXm$AFpl)4{} zAtk3#L*S*J`xuT;Pd+nq~Ztv_34U`8vN zVIwv`eRYqNRA!f}D?#l~rl!V$rx&uP&t!xj&mB{-9Va)eo4IuQ5wrVEK4K+$xJ z=z-yS0O>YE>CghDrIk2(fi5u0EV^GH+pV`a)P0NBvTf zxHtTF6xWgsGWZtODs!JJeuhHR9S z10wSAj&u(pH--f5MqDdbK|^d7Atqr6Wj)5gXb$ZPpZ>@nIH=AHP=m0JimNbL`s#Ec zT@4Va8ZbmjJD^>vtS8v64zfVz=V%JgA14?i>}(gdvkBvG1I7$iS87n!TO|FN8^@Xt zP85>uzM?Zr0(irGjVh>Um-y4u7Dd zG!8#|jLmw_hwsj3se5b-_eeJ5u%e#9cufTW;DOFaucB40p=EBR5ct3@e9WSyibpxR z)T{<}{Mm2z4w|9|cM15X-I$gJV(^3@H&C=JVlCSi3G7}m+jng>F_jR?G25iCUxUe4 zikQ#Ev||~h`#R=%K0p^jyOgwY{77V9((`WuLWGTaC>%AAEH)a$n7btKTM_GTF(mb; zcSvDdK5z*$dM+a2FYA&)Yc#60ri#cHwe+QWz(PwpAf$(%Swt+_d1Wuze>-@=p@{&3 z^aDo8LX#n6+wrIkd)(PJXpA-A&K8ZC(aZihi!D+Ra9#814=z;=7pNe@y&WOKLN`t< z{R^8=VRv99VM|0pFh&mMC+sRGCo2nx{IXz?iG>ncz;7{N5d|2*=L;|-ht8bB$2;u3 z6o{_`ExJ?=semO$4$y&j>d4E4Dkn+lF?ng?B6hKCIoV#0zO4va+X!eYX1Zrk`9PV4 z{3^wA;lNBPl5wnUga3B(;+(o-4)CZEpd$dm1R?;yaXb#-kx}jfwD;{Jh+0wwk?iIdpkD%}vE~*-mr#m-XQPG!cE?Ir?)w^AaDJ z7H{-IwDoC7ha0fI>f0^|gH8l6+${Vree;i0g-5@nT`=GxqZVhk{50CtYH{!yaijHQ zY1zND=W6C4075$IXPwa-q1;(?JR`Wn^ojACw+$l*1ghv#ZaSQ(E@_$Rt0kT_;leH8 z04(253lYluaGgoC#o|%NF>GJ8p7~0>gANcy@emay-cn};!u)A zM?j1`tXc6m1FF%JdD||!0idN0s8P|`e|*~UY2r+ZK2gv2|!VD_ymBEy6>C|{>iZLz=LfI9&bY*ZoAe3hJ=bY zJj(XY>j6Y9`80nH5P@@?puXV4U;CveKmgl+?!h+0%N|n>H0AJ;;kCW6FW@uCE}PU4 zBq?B}Mh4X#z(+ntLO4bjZ^edVv?(SvPz)O$dS;;pNdv&0)^}0NY1{cVp{Gs_T)S4x`WKS zqGQAajvqprpSU7#HZgEIk#jf2L#hrGuHP?WKG0FuH;F3CLm0|i2Y%HTJ-vNwCjid)a@?=t&YG#RX=ceg&P5NF?<@?j1S>5z_^OJO#a{Y#r zD=Ak*TzWSvS9Nub>_(Vy{V^f)foR9uS@cTx%=Mb!I2o>uF`kH+0wm__zsx55-dAAs z24!IHsXvk!h!wT_Dq}Jqn6EnX3bQsSX%+6ZA90y{Y`+6YTu8dD@!kcD4VFe0EP*P zet;=1L3&|^X15HQfJW*XnWuyF_FUQ%du2kD*xV@zH&aad&(paGrlG5*%retk{7#-_&M z>?lT=s#K}ZG4Y_`hbSmsn6u#e#Tp@fsYXp2c5b^z7*iS<&Xz~~n~xPOXHHRA41>dK zIU7BIY?t^R||G=YuV2a9mCGGSBuO{w-q|Yxo%o=eMfVQoI zHuLvH-Xk6JltcqECv!OPEvWZobJHryc>(U|8)Bi|>J9GtY{*)#`b0YL{H*1!bSqg1!Y>etEd?-8STT*0c2J`{Du z7|$@q1OP4PGfpA3wwO~wH#qy{js8#`7I*r{v(5khL%<1lM+AD>)coNcn5<=t@abf8 z=!Vefh6*_ThqZ7bDOUReID7dE#=5Hl9xGP80J>lBkEQ&Ko5i!21nTcmUeIXZJv09Nf#U%X(d5SGGDj~b-t%fPYV;|&; z(wFHj7-K6-?P4Goa>dT}O{=`4L$Ey$O5i0ba8GZWcy48AYW$i( ztA_aFcHch>IAy2V40dz;aQNQk6>v=$MlzM{Gp_!**alnF^UWGCB=C>E+0ToT?%kXn z_dS%eB(#N_pBkBeK^>v7YQD^#&Th>#JoEHmw`l0g12|kW;@j0%aWl0!ooi#zK-FJ) zsnf{C0OZjDh6{;pAx&?lK0XK${p46l4iJ~ITk4OdZ z@y92+If5Q4`n%V6)No7ekm_;_5>o68y2VoHpt%8wPLuzchA@WpZgkVB*k@XAn^ZfY4!`F!`vcH2lw7s_<^ zKqpYlzG|Z6)~Kjt)E3p8_!fj}Kx6Y28cDge0tuD7H0pZ3nFw`PWNAl3$BaL)4FX!p5y2iZN8iL(#3ULqHu-}$NT-H6oDt0Q^~d^6F(pL?2~7E;$M z=)RF$F^ty?P}K7pbGQ~*iA_knbIs-ElY-i!(M58Qg2(=B3!5@ z&#^ZTstzl?Wvaf>9B0QYNE&vO9gHyMu;RNwbD>So;OtG6w}`&N?|{^-Xn1d9@*jJo zwmrojUk^;{T2scjaI)Q^c(mL#I`nbHevY)(&1s8p_{zT*c#F3#Q*S#8M^?GXH=uIw z!(z!$S)amfCeNtDsfuFe0U2i5T^Z8e5S@C0Ns^0Z?Ip6fSnIYqk2Bf{1-~;y@%sXM zF);Kw4*aM1=DXM~j#l0zqF*T=hj&_VcOI&hZ$8@gsft-(&q!n2_sAlLs`THSDiD~L zVDsZjtw;F4O1S`CA4A$(A}TTK%{yLdQ;`73xRImB$7F(kZo^L&dgutNTuXrx7ty#f z#=Q+yo$b1s_3jKg*C{mCZeBfSny1h2G6Ky_q`daVHBDuI$8%dsanFtLsXxtk&-@Z& zV{R$J>b4}}ONs=q7gso!x3GS1k8H2m90`ChPX{D6b(xNxxu7Uek>mMymsjEcZAuj- z#x0x0i!{qr&ofy14Wo3qirBGhKRH$*(H%FoVP&Wwvqtnq1yI^|BQGRoJmPJT9(Hs} z4)NtjvIq;y;)V90r9flM%^@>*AEbLvNH_)G0fg2eE;`rs7l8ossz%Hf^8x(Zd1+{y zQo<@vWo4zwETOkxmu1PJk#uFC?xok7JsS2MC20a);XtP+SjnQL^ZS5zI@tNp<$}z z8(@Opv71k^B1zio#3kz4Ekt*oqf zP}(zjIx0z}DPxOe7G4h;w&C7QLwP5p0tzy!jZFVdTz!b$w6I;x6lx5@;?apY)T5Ddm?A;lc=BagR>f( zGPKbJGe=IGNcux`>@S)tUD^rK_N&#|U0BIT3v1~w$1@!|c|f%oWsSA4Y^NOQ_;DX* zFjU41{AF-7U;1xI7vLc7PZ)Bqf7-3Oyt-4enP=cmbP$hlcjklS_H`z=oIvMTMJn^A zNG3nf?&v?}*sh3z(mFfdW>jHNU_We+ z9G>%z;5oyRr?D>fWlRpH62mUJ#y>CRA^~6Q5`#-Og|S7Xle%jXwm2*4HP@=hg*aU} zU-XN%dsfWx^5ju@NPCxr_2djGmmTG}WP=Hr0N~S*tCK#rVRNfs%f|7}( zm?km(9@hsAn#fgXEN8saae*K zVn0RKTnGDvXkLBjSH!Z2P_Gs?gG zI`x6Qb8!ucf?&y~x5nI0e32W*2cO~iCWm4dg=m-UQ3*th{w3?tOUgHIOdY;g7ObKP zf!yqYw^}P>Kw!Je$sS3qCRXEv$S3D5kyoUETdUOjLU&RJPSY*YqjG`WChBX+yCv@m zMPitjlnf)Hb-SFh*7PPTs5dLBU;inT1|A;XU~~w>}k zN2LIJ3awGLWr!zoj=6o8;dE?OUl+Zl9vd$Guq3F z^UHYRiaB~&USn7Gb&Mh`$2Jg{Qt@#pFpBWm~K)JLBl4M!{nWN%k&snBwK@)`6HYllw2et0c;6D zQ94IJv=kqCbQfcfmuB=6*yCmJP{~|WLlv78bev`f1F_>}v&YK<(xbW%v$B#c$Qbat zd_rzHX4DuNI*k7eA7?ZE%harz4C1p(;pFN~8i{d{-IA(m1|lIU4j<)!)=I2*(Vmr6 zbtd^nTpnPKfcuwJFd8Lbz7iHcS5o@x4F605I0$Gp3pkj;#dmex+aaP` zT-sXOFYlP+|$7$LZJ+XujIEq1vM`0TrLTz`C%TF{Vdzx?r`fwPBz{zGre>&Uuu zlwjbsZ_V`CioO+Gc6s@mex>S38-4-=u@LsKr<{-2TsuP5#W$??lJg-y;jwN9ok5>IyH+7U->NvU54S3od?t4@6rf&Dv=cNGHEd`VbBiCc+g{X1znr=KAx&1@$w zeg~KVC7*gR4d#f50U83mDFC?`I-Ov)x(Tz=mDfE2q80;m1!hL8G#|yJTJk16c_9UB zjdwBrvfWpS56NS*@I6&t!^={IF>ag>$tNLLZ55pfU^7wjN<ed-#27Z&eUSY{$IQBr=bjj6*@)HkCM?EBLc{Vw9WSA5V9~x4SMtg8v|74O%Tf$d5n^665!Peb!&{vaZ%<7ih*#X^7fI;B zN4DSHW3NA(_DKz8Y3fh^f z1EhBR%0q3MpZ;Iti4AJ9GX==By5e37Mt$^Pk00dgYPaig52kcskxWgf{tuNdEFuLV zz(5Cvi%LUHm?J97pm;ufOq~*N#d@?fUM1M%yuBhX2dgCgL z8SKWo`4pqkerMmuL|#ZJczu;|jpFyLJ$C@AY_nSzXS-u&yR&uqcTSD4nXH#0jp;Cl z5z-0YwcKT0=Rc@n$<(=S^N!9;)NXj!HesF3+ zi(CW@o+wp3_2UJqZ-nL$5;3qLl67gdF_$k*3p5?fR+v#r6WwmPK1xJK;drShS1S#> z1JQu`lhQp->`5L&q~&T7Wfx}3hU_yW*-KQ0ccR7~eg#q2@o&Y+ zuytm5gW#2j!Vx?Y)F^hZ@7*Sbz~{x|HNzKXH|Q00ae#NYXDFU5c{#8#T3s)S%cSxMs<%L<-U>+9SS^D z(@=>)i_hlPKa79y%J^FRj*GjR#+Vco2xt^}{3)BDEO8BXFkrGwz5|e{!}k~n?HEmw zbf)lK=K;+6c%Qb zG2KyEXY(^R?tO*9%wyr1>)5rJ8AicC;5hyUyCKs)4-;cgbHP}x=0Ks!%`ItOy!1>~ zotw5=7A(;oNnP@1AF&^d##h?=LHuSk1FOj7_3V#m|95bPQ6R^tu{3_Pbb=B9M6z|A zWo!8*31qj zduS31#oTvcu(ssWZvsb%XCh?tmGY^AsKCxhuPjR9cDB6w;T|to3yyucVe5&Of4g6BbH=<|%Z^y<-Vujrmchgfiu1PFI>&ZfhPcJ> zlMIZ(`}<6+MWnyP1X~xtzlby!13Puts+*E&wZtCr!>dk)fD5+o?6br!3;+g(uG4f8C2Nj?>ITAs z2b<89)pxN2Ctf99dYD!-n%P~W&YILvS)F^SlZD^4FP-#C`!%HR)sbgrYd+?A{I&D1 zs(I)f3blQvMz>J8$S+G^E0zHJhjOr7E%7_10>eqy8gd3Sz9V z?qb20t}2O}o79p?s7{Kg-|t%XmJfw z>z?f#Pqzo)REOwo8b7prhY+`A-AE62E!imfYtm)Ki9R_&*ZTQ6d|7$&@6wy)|B4dQ z_HEZ-RGkk$L+TLKH+KmBd%9!GsCBwkNx~k$MJzkG5L()OQT3uNI%{sKTZ^kFzZ1U( z5EJL1(Uq6St6bMjhyd)1BwMxsp9rwMUR%4#Qs#1p$ZC+r&@aiDe%tv z88DaAOrEoQs;4UaP>avcJ$4`4;({2!w4mDRn4jR--r_@VCtNo(9or12WX$Ce*TJ(X zC*Berl-OeLHInCqRLyzu$g|6%SpH=RWpuk?@r#vSRN~UI%69@OR#r>Q2MaXvz@o#O zPs>uZ8_wAL`Jmk5V>@{9Rn{KmUyeVt>u&vH&0!!4sK|192tyK#6jAwRz8f3aszsfn zCli4{xuPUX1INexr{JwgBHO$gTD6I&*aS^1C_?meDKrMpx>qOe=~5Violr!DD$2=0 ziAv}*hQ8Zc`5hyU299& z=C}0m*xN2LD=8?z?fCv1+XIP_ru}I5%@S^CnyK6H$295u6U*+ihd-t5VjGd#J^8)T zb3D!irg-&|J2lX=Zc|=;SC-)zoxE|?`*Gh_{k7|&3nhULu*0^I`pqlLDdlb4fUAY< z#^_onTOe*wGkUj%VjcP>tLM;ds)V@jqNl7wW4Y#SlYqierBBQzS{onc?CpaU7TwlT z-)&&s^c|Vvev7#DoehSdBe@R$hW;E&**kzweG@CBZWbpyd&{TolobY_9U1fa5@Dp& zLYsE7?YlCA!i2rNdAzR2;TAkqtXGE$iXtq@(V)fyMMHvY&Connm_0r!o&0lj&t`xY zP*@%EH#TGv;dH?@mcdJ6%bgpnAt{M{IE~@6!>hN{Gv2RDh+NPguP9DUIAFW(b2(@C z^sL)|*=_v!%r${-02a@hTN}++iXs@*HH1>`=hPf8uT?60cu5g2+1iAlWlV7zQKR%P zx;?nKO~B%+-Uo1JWV$PEU*QFg_Rrg55v{+ayrO7j*Cs?F5y%zfWd(tqvex6E>rx=v zBq%HB9(x-h@;*sYK$0Bb7MUp)9o)x`;krA?K+1Mys~kEJUq8+9LaDSn9M9~ggq|aa zb~=4gmy`j0ryNrFBfc?0)^q@@At9rM{T$l8(*qt8O8ZdjqXfSP;S&m46F2VL_tPZ7 z;MAzApBVV+_Dn7yfG&Y7Swostp0aC3+WdDIB-_>2MWElR*nnsYLCbSh$76vjTWIW6N_vI~{2i;N)v>&&wbJl7jZmuG#ABJ06vm@fNR`0C` zW7jE9-t(+$%b96^!Sq{p_8x1jk;|!ny~)yWf;*J<@MHufuU)(3R*J95RpEqQ-{@r_ z{+t2J)ep5Wl@Ni~UFGBp?-D(;l&e5Z>D^w)<=p8wlCm7pzJcbeA$n@K4q`X#dJx47 zjS`pIBBEzeEVjkNX#Qr!^?Sor?S=0idtuFEaNsX?=8UyYoYl`#EOIH<8^|l>Ze;6( zReo0v7rr^b8`Fw7yaKkwHcZZukdX`GKSU>ju4>AE+C322a=n!9UBy!!o@cnO%9Uy& zFCe8vHw-jKX;Z%X?%-J7gQdyujd$aX0B_n{5D{AZP*~OqsRGNRb$IkPiW({g`M7Df zf;Ok56{unULOE*%Hn(aQa)Z5Yv8_~FHUx7hBw#=99(N63sPMQ<6yBVNsa z6V1dCKz9erG*ALMv}=9*3bDcX1(3z~ZuSfjo*vPJ%~LZ(Gk8Sbsus$zCKGqBFVsmn zDq2AmM1s`v74=azd$p>0!qk?jJPqvSX3xuDONeLp(*ivpD=Q4GnA>( z9^vM21#T6-m9*Byt5VycRhQy+y&ojPo<&_W4<2BM*TQx;GXSy!YM)-31C1{k@X7kh zVr8I|NQEl7LPVVSxYx1kP~?0qo&nKdoCaY@JSjuw(F-hN;HYj>>Xj$X&d@rP=q^(F zGrb}xiToR+jnidAoL=JE&ZzZmuP{&Euw$=rd9(?)MiuPjH6}qHwM8rMCmE9(4pOP8 znEkR{MFoXsfiZlEf>P?yG4-^La0oR&@X^6Uk$+#cvzOIV${*H}Ga2K3isA2T$W?aL=Ijh8y z=_8BIEjWkl4w>9#>D5#Naw1SpYQ(Mg+izuci&$~M0km30Vw^1{#wlLRXVqd{VGcQe zbpnMehLS0{z{>ao^pu13)v@JZQGRK+wg2S!fE=HSiwX0Vi~#1^h%=+*`%OK%_Ok z*md2-@Wi-;(fVzRQ+hY8I&2GEtS7~!gNZRk^`e}9tzxIF*R7TE)MfqLf zq}gibg@wt>ihU;fwcJkum^y|nz4!HCgJryW!&CXQ*2-AeAVvh~e2sU9YK zrq{K#&1C#N$LGS!``waT^ip4i{at==U$E|jgkqgzp&geIg2lk^)=1WcO2s0fvH~;@ zz84>_3Hn;dng;+RhM?Pmk&!c2d!4DN3rG4;Wc?v{h*rQg|B6gSq;eH9Jxs@cTDz z5)3mqf&prnJLh^1)UGip zR}u)(*YJsf>(QE!t>u2Ff}>inwNqne#=W=#^77+g$m4 z0SbwGI6u*Si@A)Eyv@aS@1Jd>@y(I!`d>Uk2Kbho)1I56X=j&;Cah+StfjTyX(9mR z#JkBaU^S*#wd}C9TjKT8BOv1>^E4!s&`5~w`kA$!tI7YJGF08IB@3tQJ(e~#jCz}B zx-Po-L}&6z&%bM={Rk~qaf`GjinV6dtm0u+nSZ|b#Vog;+JlRKe;`ICWvqAx!@82d z=G55(hngRq2qjNOojx&z^6f;cY;#&+#+`{yK#N}KCl-EvV}AM?J+!`J%y;v-(OkQd zpD)7~)NC$rEBO~*w1Q);i5_#_>TZjnlnglJFznC31c7twc~>V@^-r#vTe}nhBNE;h zS?652%QNY=Ld=%DN_8v}`09W??aw10-R5~ImoqD-5a9pb^{52WxhEroie_rd3DiH> zpKR1P8#M&RkV1O^OBf8Wg__F>OM4VMd$NiBq;>Ho+l$xT`Htdn+U2~6& zO}!n#cac$MX^2lBuN^eVZHBrgJ`k`PjUw6rb~}2#>LyFmoZPQjO^s$IrG0ys%g=|Y zyqTV*kv%Fhm@oA;0im5E#-Ux&zsR&`sg3w{JP_xt>pDe{M|AIs{EgZHQpe)nkw7fz z=1b2%nNEx-pJ?g-m^#nDCek-vPe~^s2{rT(LKQF+5dmcqLPrcmL_`fmKtzp*h+vt} zLDYbVfar!QDr!_z>_bOI4K6B{)u5=@u`cei|hP{0%N8G;wErP6JE zP)0X5tjC~l3Dh8P<@#|MNc;LA-7LQarLcKL(_;+`k^7orAFZdC|23#-Y9$)xf#R!y zJHZ6vWZc{z0td0d^##~uZG^)m)M#EkTw%Pg+q~c^v8E%!&{M7Rs4)<{+N(DXn>z|U zN(($iFgv)I0AO>5{k(??YynKVrjRfVa@hG6a%3yDH|}9R7}8h#vC^~M&l!g$tn$yj zRzmSf$jv}#X)hAbRAA9)m@&$$kB7#(6N@K4p+cSQHXnZ`8w$Z9>o`M2FuxDWYY63! zVtJy3C<4H15AqbDcejVm@9YV_{02~fURbY(IHvu~Bi)a0bh#*ji`p}KdBc22m4Gio z+^XSu(Ur%$5dAEvNs&zy8!#I}9|sq%=tLn>#L9dZv+!phECY;bLdvtW z$W~;qHRdn9Caws}%s|bTR||*bqo35MRSN)>5>xg(&tDPV^OUh=iXuiihl zEA=We^nCPweE1j_?OW65?MiskK)bA8_%axO{b!RwUMI2 z_48Ie772y!b_K5ZM0qo!TwARgZ_r*`&E8k{83S0tAj~YNPj5-ib3Oy1$kB;whaXQ2 z$K;sbt6fVj@(Mx*$nojM77=jIKXh3y zS=xZ};^j5dAVsE3Baq$hsczyG&?$sVMf77|r( z0SphY191Q~z|TE;1jAv_{a$ZXi2PCsWhsl0jB2+)_n+{gYC8ErH?6C>ECtaHgE(OV zO*>-o@$w}B8Q+(u7oIHZbHMli)1$!-`c(6I8$LFV#Zs7kYdnJVdC~La{{xf(q=Y?F zvE=&VJ$A|lGhsnwH;=l(WHiHWc(uC96tT{nzAA0@yDC87LAZO}zp9wG1yy>}Yhv$gGLO?0AWlW$iWy&LbK)w#U=Ia@$ z3#-5=>%+&-9Dd#5oz#EWwf2}Z24(n@MCz5V$msm?LhV;m zk)?pU`AQ)dSWvu2?>p}AGw+0T_On?iP>c) z1andCF@6DIU{dupOcB3?3+Q$7mvb=-Pv{9YDPlzQ-L6h;)8z!8|!o=NwAw=HG1qe&&=Cm4mC+MczJDw)zs*%!(^`kD)X_u4rYn ziJxoGxpD$wvptmiSsce!TaU%Dz>oR!xmgSy%p=~-P48(^Itpcgk$IZ~Sq0%2U;9=g zb34|U$bU8&#OTj(3(-z6=O?KYla^;XRi7tMy4@Z{R}CCplQ#0Z)a62jXsLoTQ>zWUMFg0(fTxnd?*F^2{Tdjp#I(lnTVO z(qqZVnmwF=n}g0zK}m|9e*dMBa!j`Z8TD+i9q#6QLAauBLVpyk-F1DTCYmG#A z&O2-RA2!sU0|5cPPPUuViju?b_?lXwq}xzmJ(7hvem)*;mbA{axhWC5JFjqLar8*} zZa6QTWSCw<$HDMt#|?PmOckhmIufZ!7{!a_XFA$O9Lq~cbCIW9REN7fnT_fJe6vG) z_6HK43WZSb7y9W3PfzNv*y3<-&SIUWFjCKi#TaqYbsK~T{dEf1j+rJxNYA~?h6h)@rGhz-n+WP~8@!^M7ghVso;p`RMXjbG3&{up zk(%kbZsx{y6>Su^J04rBieh<_t?%R5fW8d=%S!;AfPAm|%%LLZUlb_TLVzP+u?Th> z2BB$#;{M*I=@^Rxy+666w<|Fs_rF)k#g&#u^@td3WP+DUR+u>5Z-ew4QS)X$Z+Sss z{$tfINM}mH#(Mi7)|lV!eN4x)zx9o7?Qqn=OnC)&HTwB9=&zlxVMlDVrgdO`f97H7 zug4prg8ZpLu`QF5$S?q_Qqsb(uZ_L)JA0iw4$QmiSD#T9_i{{b&!n&43J9Is(K}xb zUv$QFv-0h;1lp?XzF5A?#m(Xzq|jeFI0ug;$3iJL@pN*Uk6-G^pkgZj^Vi!)lQES0 z`CIp^e3b=l^}X${ho(;ZU(9(ak)XAa~fHM@GHfBB*@*pm96yQmw9MdTk`Rn1OG7KH@9Qe+uBm-E}gHI z*g)CSujHqv{_Ml;on0<32nj~wI*jW;Fpqb_I=&#m+6qUXPv z{fa^WNp##_8^}QhUXj%DW0!!KYI__hCpp5^=-*}(o(*cTzxnCc$1F`EV|Tqc z|8DIM-C^(k>US5xq2{uYIyRshsUx73Z3~Nz2lw7H$M)O!s{1y$@ZY3O#yTg$=1$%wHHPkpZX^kB3sq(aJ zqea>^k=i{bfkNvVpz$0nNa=yUGvw4$s^=3XCax}Zu^QZ4kx;x3^g@OV^S&0T3YV3R z`vGn)>QXD2<*D80O1SC3D4}>z7+K8CB}v*z8-V$)bYQB`G$kcSg#+Awzp0aXGZ4nQ z+B23?`?6d%-s*z?{HOI+FD4nfS@3Nd?4{KkH z8R*cM2w2TphF;YP6+O&*mz?PaCgvc(_MGB*;a~T4Pj#ET$nmcrV8!cenXAci$nD6c z09ue7f3OQ@Dw;N;a~rinpWZdUqCB6ZZz(%CuJsU6N*N^7=o_LgF(Dx)Nkd6y1u`1A zU8y%V7W!`tkoXO+TaM?FghSs2)E29Layaz9iVq5+r!a?5Tw+KQk3T z^itJ*+n!cC`2+yNWsuFMe)v{HFytwN68e=n>n6$8#H zpuiJB^%|mVwCs)&f1NX1WplIE^q)6w-hjo6Yhaq5*ZzHXe^^bZpKOMRIO9S*GOE~3U_7?W8x$IhEi7_g@L`vP^KEdqSqyB3qJ-xSlZ2!PDVz@(S(1HyYRnfkYTOF_kiG(_-Jn=-x%7Z{Cj(x7Xm7X33`0RRZ&yHf5# zKmd=?SLT1`5P)a~v{9a9#`+xgF>!L<@ulNO{BC044~AB>93n8LJ`*JwGLiz>T+-Ez z^AN`0toUd&g%TGyxTDL`zL^9e7_LT6ymN*Pu{>2@<54NOuv=&4qI}3p0-El^ARC3Y z)}RtjS=uP^S1sKY7mXAA=-!7Up`I_l?%m8w06|j8!bv{eROQb4Dhl*@sQ6PEZ>-O@fxP#yr~)=)@JoZZ;VM zTx{?T*SEhiRp*HZOO(%O0;}ZVieclaG@@6K#A0>rE0YPirsmkO;2lANx?&jE^>Gbe zh75Z;yAdL>_wMR4T$)GEp|z3D$PdkoxcZ&%ltg<=XCi2-fi*to?-TPb0P7|Pyfv9^ zS_jVPuiAdGhXl(0SYXDo!w3|GB$u_ea-f#z)rPj>Sk30&6fG1TmCHsF6iPE~O)*zN zHpQ+2GgN9V>L#7ysBGp;uFU!%Tbz(Iur!}d^op%~;vVzL4Llzs@A0kB3kTd>7q+w18i1BqH3Af?M;lTS$zOK1Q#F=eYlNokt zq>Sa8zPfCX%0W8rvJu$! zK0rh;p!{>g+`k(^9cAtxdY*N5%prhegIPYkJ7w{M_Q4nDY-PA}5?p!tL&K1K+0D*x zf!qJCTuclR^5zYm6^^d~YBp}X)EoqOWTyQr6G9Ld4f@HYTt>6GCo`i0%QIewltAtG za!OjrY`~xHx-{;%rpCUzBH%#2-}V=)}>sdwx71 z%**fLtffX;0IfI;1>RfC)&wisoM$$wE9~2@2R0O2f8RjwU|R!f9fq5^;yCu@z$(RI z<3by+jbUNRSPq-`Zlmpc2;yMGPiuoS-yGaYz8jZe%lKeyEIptdYVr|e-Ll2SHJZdV zZubzE?Zmu&kl~DQx9kq>AMDD9ly^VSThR_+cDJ!l6u0ipo z*6Xzm0@0(UZ0OL*d8b&U9O)7?j5TOdeaGW^?#dgcYS5-RRNG(Z%S%D1+wzf?L2|pCM2vrzbG;tMgeIe02`>t z&aPIv*eymov9kgXxlvsKNQ~-jxTE6*Ln2FqJw9xgI{9Rb`N; zLtx2sfW|cCr!W>kS6G^+NSA#6WHx1Ky0h@JtkG0vX?+1EQEvJkKLt?}VLkS(?HQ1( z7}_f~*@(#=77}YUbVh#j$3oXDsULFLrFuh~yik18kbnaaSlv25*sh{YCcOa8c#f%N z?k8?Kpg2`-JUG!Yc}QVRxh!^;-lQ|S=~aa?olPfuut%{dc)@`hG_D)AiQ6L{Q2#q$&hWhd8Pl7xcqsmIedCAONr;Dv zH2fYh>K?+t@s_x{i;vwB|BFlgtHIcJ_NBIFagmsmA{%rg(li zz`*_}?pb`%Dr)+RXkd*E4}iQj+PI400F7ky%z~F>0_`j5Q%`W)Mw<;wg61(ivu}pq znh+(*mj0Ur4&ZPPZiV}A=}H?_r)9-#JutWYfK9H-BK@^nX^4&5;G8Hw%x!z?GNn@} zmj~IXesw;8@hzT<*94vI3y<{=HkUKzwJ?k{0lt0kvwde$nxdwyQnO!+PHpi9(!!2p z#n1uHh|}r=^OmG?rV~S0ucQXsx7de*CdWmqm$J!c87pt$Q{7(?Sxo=j50KJdccXm! z1?9!-l|SD1z=#}*kw>l(TtU~{q_fF(C3ZG81_dx(W@+eA2#ds8GXVaXZkoGQqV2J?d;>G5~k#o)|Beu7R^Fh9uHOwjO{m zq(z5idkIlZCtKk6Xc01~ksjWl3I~RvtA)w@S2k)%4?N&T{WzlYW9g>YPbEjrNRlyd z#@ggoqbcbd&HxkGcGGtf(tP^h;cV(oba~>@b*6IHrx)CQxXkT;ZLwE8kSNu612!Kk zwkslJWEOLF{AuftXn4<5y>aTPA?G%}#m5ATENKGG$y^4`ITDdsg)ZlIYIR`V7vAJV z%7agAc*IL_*H<-kxo-SD!gDIQzH?1 z@h!IWsB?c|UgR)%y|`$@+N@(Gcpu zr;YV&f^;m#8p&K07>Aht$e`60%GBD#*Jn>@IoND6&T+oT7|iU6b`zWYR1KErZ(NX_ z_et<*>Y>+U3s#&f>*E$(dgyEb;B&t@48101UQA!h0aVF^`=|JboLMhUnAeLR z>-YB1L~IeEyA|G;=+8id*WfM(BoWo)5LHle*stpQg$-Xggy(Jq>dhrnVp`g9ewKJg zVaM`}6Mm7Z>b$v?k0@{~JLvleycY|*L6?0fmwgFI-F2U$9;czmbg_U^Q{~^32u?gW z5`K%cWodc}RO{FluilXwb$IA%HJZWh<3t%bBXsQ$)1eE;%gZj#uzp9}HI zLu-3Th09${*;*CInlHGTRKaPli8~$VkIT2&XscFl-3xg>$SmJn@;zHxEsQ^i3wpA_ zhJ-B6Oj}ai6qR*g`E~k|fx>UUE-l-+CH}8V&iV52kDP6Ba%Qb6Zm5;mu{b(jP8`xc zkjK7VO9mZP2i6K`qll`o0({BV<{@^Gr-+lDr+66T$d;tbiI+FFR*pGSRJhDW{jAS( zKC*Sbz23?blZx3<*`#CFtX}UFe^9g%W5Zoz#rXP8o9cRDPnox>D{^Oj}4HLduY~y zc@C+5_5ACZjmLD^I>iaBaDLwJM8EAES~0SEUF7=tXV>p)&!MJn4Sfg|$}d=1z2?5P zS=nyihm{x6;9mp(17NB!Tx2-ac+AqRpj>mC%ldl>X)t5{qmAl+@D2!mU_Up4Z&UP9 z=Xt$u918PP4~CcR=KTX5{}*4Hzi;MICT=K0-!4D*GWq$qvR%4BM{ZEuXqXF991hMk zMfctpW9JcDS@E_VL1*uHY`Uj)X;5|0Y!Hq?NUIQ1{V2FozP?|c;4n=ctJuADFIbA` zsZ;oRrO2tOHUgF<>6c$(hM%Sf3TKQJQHWy2ekS_(E;N3U`L6{JAyA0ttY4j3EyjDj z0$qLPI(QTI63>|t;r4N}mzFFF0x$CJTr%zu5aSx2N76&iJ}|gg`S1D19a_mI?lxD4 z0-=kvlHnCI!)3RTS2duq4sz$& zCI5X$&&Tz}0XyDqzNQ+#eovmDG<)iB%GJwa!KSxdbjio${!ovN|KT`R1E87`(U^1q z==>3dD}z|HPXT|$pRZ9~nspVHuOv4}-#G4i=d{^o z-$!lt&VzrsO_&`AXO1fs;?j zc#*31w;-+~$*vwfo(S25PaM1jz4-JfH1yctoSk#KqT@RH$6X4DKtkZXmC-em%)bRG zTs_^D&+pf@-#_z;`0~$aLu`JaY9>9Aw6jU0l?4TjCheAb*PC{1;~NS1cJ5-W2}FB) zaL2~io~hv zyY?LZS=L0<>&`oCH2zxo;c5Y{3NTo6qdJOBZUS`vO)R^$b1snIOR^0QkW82G8hb3) zcFuTfr1P3MH*2Oqk{EL)KrNVAF(tffK%<1#`~2S6TfkacB^y%%`-RmGE*|V>KuZYy zkj1Nb%4iRKt5LYyrttS0a7nX&LXXe;>SLqF><`8G4_U5z*rdZ1u`6YKkYK&Cbm2!F9%3v3PQ%v4kwpT_jNf?jtxH$rN{|QDdvnvzt6zFU6q8>Q#d_ zduP^{n1pV~%3+NMwT1CG&n_tP{fUR@@xZZ>I?oc@>?2h5Rq>#Kw;fxwM#<4`Fu1Wh z6Zx7PN`7pTyq*3>JW5GmfLh|wh(Q`NO(u1^?dYezg)_;K^lAyN0{KK%i?W}kS+&KY zMm{dVw)-b!VDR?J7OBPItd}KugD(0c+Xes+t_gEe;5nH?BOuY?+k=%QNkda88d6`_ zjhjCT5?J#yFw9^Qg~rSLJ`Z~?tF3!X$v5z7AwSNxMtJMVK&5>SD@A^ zjw)I&F>72<1q$TwVe7tkEaJ}Ut|Hu*{sb#iJrVx?z7-$a#t7W#O~kn(t<(KA`& za&>#-Kt5?30BNy03Hzz`rXSRg2}ad2Kk~DX{uu2Az?E8pkRkoN*J}dcU&$kz^j;Vu zuvX#j*=J!#k8fj)B}9WEdPF1n3F(?zYxiV1C3 zn)>-uwhUs}_VIBha&PB|pN*rub{twSB9gg^jRJB`mR@kp`hjy1oA~D+`?{=SpH4lw ztwU+z%!vQ$`!tU5m2avs`7sINR(=*U_V48+gOR^$h-8vDV1r;A51<7Bs>;V?_9nLr z_E%dT7yhcr5(pCiQ0AX(SbTUsIY;*ZNU=-)SSvDe-Z7U*v9lE5>?~C%!C&|lhRDYf z%B%xtUTF#^VzRm%BIPW)HTO)~rOT;K@thF0cFx`E_jVap`xe9lCov!Rny=SE; zWQ69Ny4FH@CJ!`Ah}}>%CrGMY1mG;6^NO5JyLJAU?z2?Lan5}LZ`3aFEHq~@Ity7KDRrp8;tHdXJJT%vL)_<^uPTW3NizzR<IveX`$odB)ub{kUG~J2 z9`w`6atPC0-cV4_21n|8JnSVnw2Q$8w*(I>6&&dcSy5txQCxg^jLwA&y!*-z08p3B zByC^pu>!1lFy*DE9V7-hW3+qUCM$g?b{hjPk;N9F)hGb`KU(!14XyekF!cY^steSf z5_Y>xRZPQMYHu%9H1+Rh;UgRDTwZnWG4{5Jk7Z8y?zi(d4tsZ|^>z)DL!Hq4u?E+B z_-)wUwcj?dgrm#Nc~^B**zCKIv+!Mafl%8ecy{*!mp2h7jL*4l@lw3&YYX(wnjETX zUtVaUZ5ok;b;EGp*rFT>vgg?@?Z_4ho41jI+wl_`nBzIMT1u89M!CN@`8{fLi@j8% zW=+n-C%#K1J^jRrY3@0_9g`N29Fao-J0>v1!13~iUu@BLd|loAz*t(|{PAnjl|E@< z@nYP(F3GWD2^?Mb4S9)u;?9iaSw;cRl_2NU>TIuo&0n?03AZ$4=apW3yv|2NX`HlJp=eX0lV)`vD^&g)|k9NOENezd^Y#9)@XPc&{B zIILk=i_z|UDsJZ#m~U}?N|529kaM)m^GO3VpDr=Z?AJ~7FO#LCy!h?HO=8UM#!S^s zqeRnQ+Wd>+O#@E1gWSql%O)a%EVt(H11y%k`FgKrWfhoWxoU4+pyBG;o>g4L*geG} zF>^VoVPpBWky*A-76~_;V;m0654Htc zKL@k7i$IdbuG8CiynBjl?>Ir}wJgD8b4Wlh&`n^IKmv)8hN4#ueQ<(yCkd)3XQwgv z1c76BK17#^{Ppd9u4vHH3X{+NT(%rX)vd@wDZDYEE_L3DjI%;-tCt;6_`FGnqgjYxXeTm#Gjq`=0XE&0ymAQBz2&Dei3qP^$5ZLf7AuIs*m zwxB|?QPy=oa->mp&*fD9?tg-F%^qA1;I>GjKbkeldm(saik_rV>wwfiYVsFmqZ;ND zc%}a?Avng)XduibK;={WAoW$mGHXqK7g;GH&~RBcu(7$1_q6}gD3>LRCNpTgb8n9& zx)38Om_@IH$M)TrWxU?^nc&az(+|=FHER=D=g0U2O&L4^6A0ob4a z!cMKNknUPZf=MTOEqheJ{^^3UFl)ME1qA=FCYc*nK6oIza26mK*6#2 zyPasLtst&-e8mbBAzD|IctcO|-Xuj5Wzw^l<%uM(oU~fq#4dK5b^#Tv0M{o7ApE64 zEVEGD+sGS>?zY;|+b8I6Vs3JLxacpxMEs|}JIpIAtBrEf`L~b&PD>G4;tN^Sp}@)$~snsbT4*>1h$Lztl$2M4vjT)o{Ixp z_f)d&kimr-GBbv8z zfgcebQh;(#Ov??M6GKl75C90IW+O&&1dyu582;?{#irA%!J{Y`_yJrcfBruNsI* zB}obH3_`6F4hkHLTkj0yYYQ(XlceLHYU2nQM{r=gJYRd+ItE>{EdAX+$Y#h;UtUrr zS&5nMGl}pzrC>i1^jKM0>Y0slj5PJI03e4@as)?83KDECa}#*wj&e*-_ONp07tPx3 zOHA#$gVs(;4K(Qhi5!LM#q?cc1&}F^xFe; zuLJL<)@F8Z6-TVremGkAGK5VO`XqpN&0YcTEB9^B&@>FD@NTuBR`8p-12IJ|O>XT{ zaLm$3JN`p6Gxl=9M}PeGPAjtOe~-?IzEz*UCFj54z-t2dD@3TjL)bWq*IesLWiZ(e z!G*J4>Nt@Ar%KGNK%Kre%0TtVMR@Q~uYHF>lAT7KuS!PnB|!@hOBd zS+X<}00!8^1xF&roH`=GZRQO`f@*i(@GC7C!%VCA75!-lK2|yD7tK3MFX#4^h2cO0 zMS)QB;U>%m8Y<6%?9%Qdv|ZDFQK=DC$EbGp?E=Fb`Fyi1j(&EI0p)N%P@1Ql(6Th`2zh4grU(-JrxGi!dYtHMe zCg-v@;Z?xXx{Yb@ERie_onaKBke(f$WWc^gQjJ@De1OIY*}7Ca6wf1_NXaF3{<(#V z$7w(<*%%9CODV7YQ?>nR4Uo+U^^zq( zBauo!T$~&)#DMT*yerR?E7QzStmt4qWXHHNMZJOmcQ+fz|BjD_^KEfV+Z;+&HCn2` zt8{>IIsJzmGGzdF(f@H**IU8558|E0_y|>mkv_~)f^22fe8j{Y$=8X%1zIzGQT+0L z>UTt2V+>No&_82%l5F8jAR}oRd~XzQuW-s_lu+~_*Osi}rHp;<)Jj2uuDS(K)sLsq6mbhS2%0<9d0h52ysY+ax61N)<+A3 zj^zwk4i%s{NHmWpA{PLFtzkIQ z=I1g7!?@0G-r?8FiC+Og7GtV(y%`l(v6c}!j}bgY-@1SyF@(C+4DCJQI^H8%D*}FM zrA;$5Vk-bI*V2$kog_Sa8SWd&DL{m~b`5IT@BfR3+&IgZTa?(1=n` zDj0Z_c!{UwDO&5a2^J{lUa5mKC8;CR^e;RbN3!Z$opuhkiYvke$X3t};+!eCU~Gk2 z(`lYcFk!>NqWtY0%;)BB$mJDBB^SvtI^b|FJD(~?-9To%7z{G!Oc&ZGbirxBE ziPPYf|HIZXf}wwu^ma|*P##>C9pVo-@6V>ZXd_RGwVx_rEd`-pbTkYDY?ZXvBJFh; zK$UBNo3z)L4myp1XFvi3`Zcw~f2mXH|4h{{enUSM3&?+j>t%)Po(5VkguT%TTB!++ z*bov`5Ca7rI1V;QyTv%r)>5Y3Mt&pKej(4!e$?`s1+?-q{$j(Rg78IyJV#+IIrOh` zT@Pn&MvSdAocMNru&JfZodN@ULK1sPZHn)kM0~2EG&;)H z;BR`%S&l~;qa{G$&wy||;tPfLLph|Ca>8k3RV#zKn6WyhoXXg?s#B)jDFSSPjB&Y^ zpPTbSwAn=S{%cKQW;4k0KmW&FK8@km_5)!Gau^%5l+|34H6edOCzYgAYYk?%z-KBM zUJAUIf^q5??Xs+WF+=+<8~Cdq_7UsNQ^I#zD}6;yw6!Ii zrp3guNdppm80D?Cnr+;((hz564))`{dP-D-i z4sP3Xra{#Ov|M2v80h-<$qp06uKof;l4zy&)MewZz`i+5)>IeH1^o2(^0KAN&L8rC zr(APvx||xN5*|+LjONEkKE!MAmFqV!7=B%+8E^6@AOKwg!1`d za{vMnH?Q>PZMA2ZpO0e(pbKA}CvQSK|1zXr68Yejl#^3dkcxB~$)z*lccEL~ty>x$ zh4bL8#9P8IJo(VfK@Cd&!9g%vNr?BmY6NbTXjUgYoDKsxBszKs*;$;XkoJYq8k`K6yzlcu0m3z~C2E0RYAZK_d5k_o5?yyB#-ttJCVGbxTC0hMekoNJ)M|$*b3* z%FYZ=QLh6Yhis7j%{>9ckVREnkr4sZx17X;=O%A(bHB>UVD3HFZT1ml$5U_ddRWTi zq94HK&Ys5i#r9!}d2*00p%erZsQ#rE7E2C!A&>k66Xj5^njf@nbZsgKIsvBws4K>J z86h+DZpG1|slH0~&`l*+@{BJJ3Ec9-F&I%SR2g`_0bG>)ISr{NZ8Y%#iu>sGeD76e z&!Dw`;!Y?i)`vX&k%-&}@KUzGBpMG536?5?8E4@0fY#5;pf#X%9l#rZg^hnY)<3Zt zU4geTvIxG7yQ&~BE+f7~X_to$hm_PC&jxSuh+duGbf>^78t)@^y&Z`Y$Lr9MVNNph zg(eV-LS=F?LA)@vB1uQ7ck{}Qo#_p-b;f21#uqq;KYIZ<7XZRo+69us^I~jWJdW#I zXs?W3{b0xWGXQ|jGtrda7R=kzb^tE~($ulbtp1B{>%N!Wy4_<6-(RN;eg(QH-7RJD zy+-hs;K3e#g^q@utRh*yHrM5OPXbhPIYim=6dsn5b1pGN5-qAZ<^v`uuGz}#I0jcau*7HNEQ=jGmH(aCFy zNV4p)-9X8S*6pUro6O$u7uuw?i8K4AqE+9XJd{y`G?@-D@%*QeIl5!sDXt5rNIk4R z^1=n12L%nS30saiYTmBMN^qAFj64Z45WG9ax_2@=Y|Vitk80JoYlu$7iKL0VWR`c&Snqw7g7 zz=cTUs+Hai^~L!Pc8t8FU8T$wtS783Tejns_3)V(|K{zmf=N}3MEpy48%7Pz%)hdn zxqXw~&%y1LCvb@5DRxH?p<1$xgrc?A4^N?j*;?}OdBH9TyJ!smEeTOAl}Dy@pq10=rtP8D&1qy)zwygkDp ziwMJ-Z-iT1nUcI)`gXq2?xV@@=8@wO3h!uM+D(;H+y(=>5`3@_&_V`w@_NAsT866* zlyjf5cg|U2O!-Sj8xdbW6cG3!^O2u^j1E_sGi ze}IgE4HHxUb6)5*P!vk?M(xpC#E^>hrNNBEf&l7YV>Sw4?S*T=ad$rsA-lLbF*Lq1P*^)~p3Vb#qLXwDWNbWmWD_eQF z;FbK6@)L7S%bTiej7HE-L2g7LZB@*WxpepGs;VzeBXv;A9}lljQ5a_!*%&1={Y!<> zCFaSvW5*7Ctpwb{7y?WEv0Ec#0GQmlsQdR{m3iBB{;NN?fB^wO(<)}U+WZ}3&rU!! z6Lk()4NOaY85SwbL{n$Me}`SffyR~4Y;lb(gGjm@=OX%ZLGA?8zZsB9g%vcDS+kB! zqH#enW!}tp<&>(JXiu7bih=%zbc`s*)vU;gpepOdM}&2e34Ftt0ib(|USPMZDUMfq zEb?tPC-HcT+^#v)(1h;M((c+u8aiyXJevt~t;)lXc{QrA&UZ1VR$dFqQppEuog)N1 z@yie=-Gg5~fgzZ0$6mXk_PIi|vtDP6B7ukdym>f@je$BQDIjMxp zs!fXL6f&CneF?;*;#ktcqrp^5^U!BeDV&p4B0N{%2i}xg@JXM_PGY^6;h0>_5ZY zO(M|6^T!*UTNZo>^V=Oszb}?9j5<>QP?LvFl&hLpNy7oQ-<$(SNo@8aZjxiPD{< zGL9kI-pziMJ1rF+HV?XwFJOx~)d4v(Zwoy=)`Cl_idp%k0QZ(0=Y0VIn`!COmLWB$ zIKtJi>MxAIMteFh8eN@Ey;$Wz(z;R5Q@`(e^6#o|D&j@Xm~+t&E%C*3ke#yS+-xP_ zRmKhyqd&DZ@b2Q@xhz+sWnLKYnU|RJ=(!HUDaT#sO8fGupXPJ*R}E}{{fz!OWxr|J zQqnt_+#77(<)i5!6r8=^s4h5kxJDE8LneV{lGrmJ#xDxtE2%4X2(%Z3sF3uJJW^Bz z>)GO_+xvq|UUmA>zR5qg7B3|q%BeS6es`CK_gHh{$&n7&ppcPYL}R1fHEROKwKrbN zGYEs36H{=dt&S+RMKSe0e}tHJIP{4ucX2|y%iflcpdmGM9NYxbk5%V9FFRTUg@hm_ z{gHeQcoAPpWA9(Hcln!A*i&|`qgF+Hr)2^f1X#(b+w*@x9t2wQ)e|k#VFyf8}ipJPOYNKF>UW5RFJ6Zt{r0+ zSy^_|xPQ~NO;w}{2_Ls85!SCwg-Nx>dDrFnnu=KQ?+DQ*hJvql>;pv~DLriKf#mg@ zxNj-QxN)YuhmQcuHnXD4QPg5@GNe03Bie`od`HVZ-E^8!xrdS0#|>O3wm>Vs6yz}Y zdo~73sn_@S77x=BO=QyZ!k3_7nvOSDCjD@Ei_ECMk-RW*2nvzG9bIz>M|{e;zEDWS zaU5>`5Rm2S3NHyzk#UQHluN#2LVNyy>xi3@aC`Ied?BgJm<&IEPbDBlYp z40&qJO~k0h+#rK>Yx|dXz0cQ5)G6PU+h1oJQcY>Gey>T5hoB$hhIc>)Oixm zS|hvM8kJ%-Vn%u|BJxlSW=*Hic&gC&8AzXFH$>Otmr$PX1D#aDpfV(%f${4la^zju z0nXX6I))!J)2yGCxid;barujM z*!h+!1V^S)or4wmzf|>A50+a}j+j=Q)+qA!&RV&(1e>YT&yGQHwNblE2nibmc}QCFPm=CFKe`0^X2g>zc(jjyMNl< zc$oYEZqq&UdB(4mySaR&=T-pe>A0aQ;#9T)0lx>>Wb+KrRHYK&^W-EX=kfb0$>}2Y zI*xkmMD~f~0xs^2U2yDu-&|$VS+MRR^($hRqPFzgZ#Rd0$2eH0{1wP7lUY`X`-GCb z#8fGp8X7BO0xs?jM*etFur0w3D3SGyH&z?ju5{OL-}!&2y7#{p|Njr**LCfDs9mko zI&U4<(K<+_Sm!e<#UiXENhm^cy0%X1pjMI`Vil<*%ORz(j-oJxoL7nv79rlT?>;|% z|AO6ayIr^I@O(X<_eby}7(7Y&y%(a!9^~Veor!+!^mGGKVGbPR1h{03LQz{HBPV8v zao-^HtKe*njd!K*x;G-=r zdZA=$jjnfS?q0QGMNa4$7*g2v>wAiy<=j>^5v7H$FXL^+>!Go=w4CfGueM}`sRWpu zF0}eLl+SQF*CdWe0HWN;!?F8cSr4QqFN#a}FWQrJ>%!gbYrdb_^TBKY6cyLH#uC+b zzMsv^45Gte5(RcZdpTHS>;Kl!laAn((Y%WP6(LC}pF zj+U(jcm>O^)5(QP^X|v%q*S~0#>1F~&Ygr%o;TV_KIl8?J%Ize;||7m2!1JJ88=39 zt+2r7G7&q_mvimW7EYc45KhSy{#|a!&U@vNjM`UWqx-lCvv6beF>5$0wkdk^8RnxU z8}Yg*AAVg78t9JhF8fKwWB(j~Z;~hJwdzhq7Ef3ZAM8^*PwdQ*0RSgwhf3w;p&+(r zDQoe<2=m+l@`aVm92qK9g7!-7&;rqHmfNSEMb}^4`10Q(7lXx}%*E6s{`b(EKbGbG z+;ek`)ml@z_zwxpk}eL#XAvfEc7oDxT}5CzUbRrSGl*@&V>d^7>)4h2nZ*&&=Y(xi z@=K|H8_EaJu_^V`G1DJ>1pSZ-^@W1eKY0)Scow@adbp4u&Aq6^2VJil0d!R*&E7>% z3svPgUh@I|s{yaw)mNV^%*Tyjw#u@>4BtbnMGwq8@66^+bbwik6YtkuIPd~-m_*&# zL=lq+>Ok>vRLv4kJVjRW$<4#wpeeFfsLt^h2?5Mx?dcZxUEY0Vs+_o_FYudRsR&se zmEUNqK96DP6m&J}(Zbvy59zvsxp*R)0k{=-RCaY-TqZ%s9uRo zTEK6-+ip%$y=R3uqTq1JkOY^Tych!mt z?H;IbA@thGoTwlWFKuv?8RK|HcJd>OP>|XHVpw0WWPqO>n{P{4tS42?d$5_}yzO)l z4z&Ls(P&+so$w|bu9i) zqFD%8c!h5|cwprnzsa1l>D78C8fo=5-i~*S<#!Iu-Z4}Zb+v`<@Cn_+9VF}?Y(rC-`LyZ{+3SZL!A<=2Nv>Q6q+2_Npw8UWnN zgrihi$_ZdLyYFx%yz{jB7Q;$XW58z-pwm%{&p4{qW|lt?j9J*cx?M29MC{y7ofo-d znJ3gFi@BZ-b*u7Ca{?|sBEm-b>U}aYAUkIpOp!b+R{%{N4|0S6N^X`jLixvhP?{mJ z=~}ox3a_ftRHB);$`K^IGADeXrfQa{P12njxm_r(5FC$~9$IqKM!=-w!)^lwQ-|)Y zYq}@)@{)9D&myE$9sP?v>IMW)Pr=&R95asl<b&WLZec!eNxchL|NOQO-@6a=R%BVbgeMe zbXhg)W*ePQt#=^0vxu&^gw~7b$3n1*QIue|Ah~NYO0mhae%UiVaFJ8kWA=p)w$ib);du2I0{p)wl zXYM}CuFx-7b<~CBj`DZQdZ`zXo0QEHqV{;^>$NP~lQPh=O-Gw|{TAn*qn{;mXk}P1 zVl|mu1RCK|& zI3>HdkN|8x{o*hC8c_M@ss_b#rcVtI)@-jh@!xsiHf7BT+Ls?C>s!+x<2@Ynde%xfJB+Hb9sh4#a+`P%Z3W)nh;0Ime*s;WDxo)>~B3 z!G#6_%e`;TCkav}bGId-kK&iNOPp$@jo%yx0Y%lDje-MsASE?CMS99ojN2p0JMMLP zi>ly&8AtFWK64x-z#Q`FGXn z`{UExo?0UDd-1t{@i|)ta#PyI{;=58q>*N%jw3{EaUZWjiaALt`u8288J!cc=&kdIZx)z~M zaMv#UOvdAL;_*3)j+MrU?h*I{Eh?=yNncQBjko2Xd!YmmF%qzcbjxOq!*g+EW$~x* zyQdqd-&dAENgXj!tSzT2cRn8Y%M_*StjS>l!1Uzw!Kg;mX@Q6}v@Zb9`%u&piRC#S zThn2i{OW`}T4xVHWoOl{SM685TAT1Nc8H?r>z@c;QxIW)Ua_&B5jiiS-SBb21~M3( zeeBcU)xTqec9=l%B8RGz!m3rTK5%Z~VcI9D=Jc!Nx*NB&e)Hw5Vv~V;ZfGdfL%7v? z6h;6;8Fn)aZcacf*}0Lz*H`I$SvL8?X@rJKxOek5<{& zZ%I#g->5h+lD)a~P66^+S#h1u0zhE^qAfvgu}KDL45uv^%Z|W;S#1&RF0MO%k&dI#}8LH@~>Q_%?FfqUWn^a?k7*sN8bWD`$(~yH0&n?bsW2+kJD-H{{9KLIj zA@q3CnEo9h&o&xVB9E<2&OHaPBiS|2v-7qcjCH5tKRj8ws{T?lka7h$x(-^yvVr(- zQ<%9i*H1OrFl~X-rkcxcdkmtqc~Y8 zHbVFlgC79Mb7(a`S-#B@hC*n2v~aI>cj+XMqoVR@3S+mdC)S#3^KxUDBhJT3PQCLS z7G>v*9aA1~d!`NdxpA;-IJtavBu0o$EL-ePI_y%X7kc@@tQA z`@}gw{S=Rrw}qQ^SBKCS-&8rE>eoOA05UBhWGlN0c%cL6x3!Xkb=<;qM0eEWU{7XT zIq$p$3>Hn^l3rXhkggfiCp2+8-|vAx5?gOTS3eZJiYiwnDrcg(8;6SD7pH~Uc2R5{ zuMH=we=@BBIDE?>vs=#xsvo}S4Yl8q%|C3ti7G0~8_^Fr|Gi6w93wdv1f4%G1YkKb z5&tvaoey*U-WPoOAo7}VDkjU3TU?~14Ee_#ao@jI>Crr!EXw7rQR4Zy5xMeHcYp4Y zm$(Kf#= ze&?;-M}v#!bF*3vbZRG$JGxz|6`!ho6|_T)OBvazWi7nMHzCXPd!ugHJWVXBH;C8V z(fRwV$b|B(x=_H=TvA#0p8#+_@^)M8siAekOZXh|wzpS*sdWH%PfJ7BMIYP){`s%@ z#hd)Rk|OWH1$)jndb4h@+`}Jo+cLN za#9zs3@$KhmkcbqoK%S+PR_li?@1p!;=C|x@jDx=G;5a_m&UtXFu#~Nu+8b{w%!>$ zs_~o0{h}Mc_rF24b>gjF+%)LAsfFb^FA>+BjhLhMBO@9v1xffHC}GM2eQo^oS9*6g zQP)Z3PRp^>`H`L@imh3N`sQ|v_R>s&ld*0(w7K_Vqq#y&+bu%rSU|42;ntTy&p2la za7G$+FX?6h_p5yJ*1Uv$bHgb{xo}*n$h$Bg?8KG~kx%X29N5LBdl|yyR;#D`yp+>F z-NbF^ahRit={^@dcWevW-TLJw!Prgzgm{#J#nHNtt-t+K(yeUVq!B3+!9D;sYaaGp z2Ap-TObMZ7b4v>}dU?w-MXQFt-Mn7!pI14z6v9%MoI1$^s#88(GjJOShvR((c}7kd zv{#pECdV}*)+wegyZSYf-LUmu|E>L=?NJDGtMR>e{Yyhmj~A0& zYQh}C_g;Z<%vr}^1H2#pq$<<@z+czke48egqt{KaN*n3Vw(V3d(v&O;3M9fNMLe^2gYT!PK^cbk<>4MTPsY{b|3LBg^P4Z9bW-m$G3N9gAa zGGxBg@{7+kqEe-4-Tu_xmSDP8?95WNU?6&!qW1G_k9od~x6(&LE5o;GRqhJ(nF;$) zt=i*F-J^@co2W$ftJ;zP$MYvdTYLrLfQ-bYo?WxheQv|jIQ^fp+e)MJA5-J&bB^kxGy~sv^%~Ca2c;~N-WN2S zZ~Bql$-Bz|0Bv3_1@_ydTdgL50Fb=QDhk-J>`OTSp7J@Zvy#GUf^q2Vy_yejF;hRh z*I8fY`s_M3|BW|;=T-BZB>61W-FUsjo5*fsxkl(b<7IU)U`dbd0dggvT}Ssuo~V1t z3+J(daJCqVq0GhI>OsmleT6pWp2H}1#&1;5?uXK%1uy0p zY$%A_GsJ4$@P>l}JeMu?Qa%CbKG6LERLML*HKP-n8GlX6sS2w=Ts^HrqCfCy{o=-Q z;a2jvYJ47oE?hGV5h;~xLtfpUkZmk}hsHj$ru~fM^bBCCt;~uRGe`vP%LU61`zS;Cli8^ha!F{oyAW2e~FcptGoQ@{| z^1|IiJv0=o>Teh=-kA{(7^kwG$Eu41h9a4S*~3)t-+-QUU~ zX7l#CM&im7$7qjEH<{Uzzyv@?fKKs0x(3!4XIwndOOT?10L0f50Q6O}pguy14}_@7 zz4|4mc35vo`1#^dIhH|6t&Acd0!`1KmW>a_wlT^o55OVkpILMb7;YDVVZZ7n+Rw2n zI{c}9FAB};@%%CxPKf<(0?GUqed!{Ctrox;4$k$76uIM=fMQF#_t7KK=p$AZ=0YEB zn`?Yb5hAo;T0`%oMG2MF*YX>@waeJ`#$4}c&4+QQ(8nptQCMPoGo2TV@XTWM%jyIyGk;rzHX#t-dZ@uF9OgrmmKJk{zg1&+UD$7 zYj16{1*zTkBM%#xDoUuerLgNY3&YaSQj7fkjwyH#maZI^|15y1Nes1(GM^%xg1k*s ztB;aSUu@iV+iGVFV{t&9=&K{}*5R{p$jMv(Y+`CHCrgdngT#ZZGIPgXc8WvhgMgw~ zov2dI5NV{FIKfLyOzAPWKx5B)(HZ2nA{*TikXU7Afpw%cnDvcbI(3ED4YE*1?=o@$ zxN1_3ZoBid5u!29B=tF%A3s*9%<}}&z}&s3wT9UNFoA5GFfFw-nB{9Ei5yoL`o?KEUMYHKT1Imj=QflP(qA zOe=&Bkl4-}P8BY?eK<^3V+j)K6CTx#>uX~F(pR{xf26IG6?w!0yLJZ!H!I7ny|`R^ zFAeb~9?e>Gc)dkrR4=4+D z8f4&d=5USa1HU<2OR~!=&XbxHXFgf>qEIrl$Mb2jMuz-Gwrl^{y%z@v9_gi1tAAohAw=YWI?d?>k>cd5BSJ z*-~IuDRAGLM56Q6VyKDmuZjF?xvGe>(w_njZd&jjSU?_2Gy2CdlUzqSo>&28XKd zl+ME{yZqlsBYScF6P(kBP+_9bjQ>>nbym6f#o%|Rl5V^Jd5r8Ta-M36_Ele)%d zb1$OD{d@}SDBxx9x4^_=bHD`7qE{}%|CP25Pq+$dSNG?TgzL?>1h3t)4jSTHk8s}; z1oP&=78T3pm>B7?np|$7jjdBycpD=RS0p|$FIekW1UF1530gCPq)b_Fb*6?AvXly}wmwh9$xwSAQ zv*hIUD770wC4Fpk-vIkTmsu3(m{^A*6MhAa9B!|+eAdMp?q;cWSIBJh6x8{@pej>o z)`W6bsgZM8_+doti3k--{Z)Q!m)o#SgTGoE|4;PrcAd(qxG~x=g2l7VMG>Yj0CYkg z8CmY0C$SmtX#)svM5^vk|6qIs1u%rk&(x`_x~_wa6MQ)F-O1_@t*K%hH%{v^iFl%0 zz&u^UbpmPpLY$$0MbO!bTr#R0iy?Jk>G8G}8|BlP2wI@%Ky57k&;PjK|ww z4#d*CoIMTHfQhVqx4#rwSI$jL#C(|NRf%uRJ#G!@wAZKfA)!C~$Wu$AX*T;aV@QVvJonm8lC_+HtMPwg_^{yra$)dBFk(V zsdi`b>I}e0YjAsJV1qa^@qAcFy4uebzoCt4fL!172}&?zOltHS;U_gTsjz}kqp0jf!Dh7Et?lxan~#SO>pV`_Pf4eQgl*q z?91_8^*I~eic0hK8YTl;)x(Wil_u>Kr1lz(){|w8EjF2F*eb2LoLGMIVxfNqfNx@B z5O)7G`nsNXv_BdiIUX)XtWWspc}ll-9&e@Nu52V7OMak+bg9{;wDhv6=9L1Kac`JM zG6%bVWRnbEeqs5c5h>LU#Lq;crHJt)h_AHGkQsF8)SA8K`SO5s&&Iu*q_|EtX85VU zo78weZ#E-XyOIO>b+gQU?TZGjS8i^sI<|v|!G=lIhQa3-+0FKYF|)^xbjJOjj=PXX zF)72o>KAp`fi$Fxnnb`&@-4UmW3k4q@Xxm_k6k!SwGHUfv?uJ0l9F6L-%t;qwGUPy zGDo5@#p=HE*hrxT-;FGW4TI-i<;VUYm(1u+M z!)^`We83&)w>!1{58e&Y27OlMhOU2_JTtc5f5JZRf$8 z`|qHxZm1uPf7Okv(b>{6C(YocQlA{aa$qZQfZ-!+&k8XVg=NNv*Im5qr) zFx-AMI~7SDpyt=r{Z~!iJH0}0ir55@c<&Zx^8s7H=foEc;kIPEZzjII=E}8?_8mP^ zE{YivO*F>8`$#_-jowiVJM9KYol??l8j&ac^knk}AC1r`Z?tw-rzsYzn8tZJ zEdfV!G=f4#ZU|{JBNhim2h<5#UTf#&eJ55To+Yw7P_bJ77cBGP5xec@+`c<6`|7eb zxI#uRbvxy{wgnaCuo1cBwug-_->xvu#@Ts$m~^Z8A2ZVk6m$+1!#SDG;8@aEXI z%pKlTk)4>kRd-I&A?X;`Qhi)Eh6C7&mU{= zKiL=+zx49pJUu&|OK}`G?w0iE?b>(NjH}+MkVHXp{UQVh-|6Qm0sILQvZ^C(F01<; zYyE~57N*B`aU{tr&QLa--XbwspL8Z=#SZ>PiBHpJ@=XO~wKK5XQFVi$SmD2I2K2)e zOClxemp+mWc3l}GFO4 z%(1n(23MlNvC0s#pSQ;FmDw*l$^-bnVgoQyzz-ikO49-_tHAw!-fINgL(O^*Tv{NE z{?>JQm)}IiOfwQE0iM5mv(KOvCk*^#ffw4(xGDi7rhxVN?CCJ8(#Z=xsXX+9QSbEI zN9H0I+1}P%C3QX^#gz9iE_|c^wHMVpTUP#=IMWO>Q+9n*ZcmB7)VY4VoZ|^gD}v zYjfNG!=)D94*ye{$IKoTAFr5R4&q$4i&h11`1)S2h?8<7h?2Ye+9D)R|I$nUt&jF2 z<%K^(p7JX^XC#MZ_i|2Yqo*!H#WgoawG9T1#=WQJ(sjqH{l^1!X<+?-3;xz&gyHh; zUgT&0l9~7`7_FRh$7y0a;l9frcrGEV%{|~KH$*&g_@Qga(BwJFqXh?m1A_x@?U&btn*@Z`DydP7KQ!?{By*paYL2vJszEnCzfg9~NyTK0^Ww4}@GhbPQ!l_otxNPdCo(mxhSUkB1!ZfdG z_wjt8=z7^k9(4VYdJ8Y;pe_(iMywk@XrNc7{)$t3Yl!ULDyA7YuA}JXZ}gefwNl3w zop5YA6LVDYCcnu2nCmrf|MHLxk-XyL2}6~}Xyq#al^8tKVURiO5Si*-9DE3_R_vWI z+5Cbw7O&k`xPnfsew#X`h4)A=Ar%gPss1yXC0|!FU|I6OyTrNR-rT@BkJKX$@nu1e zB?(tyjke?C^Po@E&kh^AP!;%XvPJl( z>jwDdy^?uXs5e97iURxFgnb8U;H8cDS>@ZiSKC}?t6R;9nNw}!602{Ov&c3-A~SADCM$v{cbws&2~P|Vv? zF!>vDNyqQe?X0dQztCLcppmjO#?6XQYpm6CIlt3IXw4}x-Vv0oI$`?2sGcmNn!co& z^7$AK0Rj?TYDs=epPn0LEKysJ7q;!3Q?CiWY0!{`!%rd%PeR7z-D6RIlB^C#K9>$1 zJJ!A9N|g_Xbf5dRKr5G=e5RrfMzaNK0GY@baiRtx)##n5LLeF&%YG%#rlzkD11lxy{n3z1&H|gw%!j|9F|s<`G~M3<9QkD;+4*7 zO+bR(v^@%_(%yE1aZ3ZO!~Ac`@81JnmVO^1i>QfYcH$aX$WcwVm9w}k#gwKs_SKn- zC+O5E=Q&$^z0&%uVe-FoFSqBJ;@`qv@Xdcu!4Y89A<$C>VAi(ow&1E!lgthWFHw-I znKiRiQ-emP;Oqe*%N#b%7~`8pRb$&6OSBPr6V<+sxbOx0vO-2qmV+B#9}hyCuJ_I- z^8hpr@a--`czW6UNCVPsA`62A$81%^VaR8B+lBox4!KGm8zf4R(;F2QdTw#PZg6jd zb|J&at&6a?Pehq-7aMf6+Sdp6k9Ryn|G0Z>xQ6L({N#+?ndAYGEOXzSmc|%U#o6WS zMfjvMmTOAYP>=+P((64K-B4TYDGDr6ZD{X1@%D!?jG~v<(OI${W3EIytKORu2rFx= zUFj&gI4m}C1Y^6CWhYFRV^u-1&i(BA(|()Os*|#JbeF7&<;?vG$P zRFZk?MesfFfqo&Ltyxe_Uhm=qX6RdKEdGWl#DU?&nIOy}1)n%v#;A_Ta=TMqyd2HT z^D=uzYgC-5v^#WEiLlW$e!)_)DOpoyZf*o*J94{R^FaSH0o;9t+z^11n_m@95G(vLmbk2 zpgOUz)o_EX&542&p3a!?^W8R@Jo0b@1kMd<;yZ6cYc~V5&$Mqr!rOALrUa zH|9r%-!ZF^3}nIt?|rM{mpj#q_t5!`v4ZAWE}xcp9T+PmuK3JRjCNiYK;83*Ox(rY_k=tK1o*PDrJDi@C3r?O>h zYm>zI2ssF)&xtN|n(B3ofFcc%zAP0|Oz&KIA#- zctx+gFL8ds3PZ&>Q|UXjHHHr_Pvu{ri&6W;sAMzK9BUB>XVd+RPp9UX7mew*N&7Sg zSh;2y&SY+-Pi!+C;{n&)PsnfyZ4#ryRq*$Hx4y+qsX2>g_23ni0)wXS(zZ*Zg#5*zG&wrF`>8z2ruEbRFx%qDKswoj!_`tq|zG6qA;<`54pjlPNU77Tqf5i?yJlFGCFza|p6v$(5=AjjFetM(%Z)e1_!|Eh@6g{%_lz5`!;A$NdZzCUg`oeB z2fh1$c#t>Wz!eT_W29E;mYawz-)Ez0J27R&Fw?XrCSuTuF(*R zgO@a$={&*Cb=^*#l8we^%VTY-0EOwHOjBQ=!s5Vmd3W)fFf2sCuds42`$(n&Ztz5^r)@0oKD{V z_xZY-{(~NQTjnmMRnKnM;YkNh@vV+s3_#spzM33pxNSgV{{Ix9t+eS9GMkl@O@>2) z80qetSzW~6uh{(twu+rSw3sHDN_Q4dFEv4}22Hox&TY>LP7pl^WaNzVtNpjyG0?Qo zPDX%beQ#Mljce$9&u#ETTK~K^MsLlTAN$4L)M1Lh=sRdIz=pGy~lg$UF4u{|Htg19u1%$o4Bz`&naaI|ns z{b}q<4IHs84uyV^iSW-5o)ymP)J#YCYz-!Fqd(1jysQfqZNVWPX}5*(sy-D6AD_nJ z6P?2(0Kq~ih9dM0Mc&xme<#>$ewO)bLrS9gV*(k@X7|7eQtvetb#l=eV_C;$pGwot z!#y}vXb2xTgf!vw*i9lFo;}rdmt_c|I2uC07rP|<@`tb&PKFOL_^=<8XNj6#9O40j zxz8ir=+)aEt8HRmWuLvsS%7DemBWV`p@}IDS}*1LHw?;I%?EqL`m|3E;SBqWEZIy& z0ab{)gSzwvTC<@85q}_pegbdM>84Z+;PUpy2V+M9dhOwLQQlurmsgYu&ZtiAA-q!z zC${Iy&Ir*oZSUhzEUrFn$m!_ZX{^i3A}4QjpeN-HXp8`FsKz5z6YJ2PUR>;JHxUMXlG?53%DH!ixQMi`5uwvI%)UwFw5%Z&4D-tWjqW#k#$qTMl0 zOaew|_3BSM_!dgLh`h?bwOk&vhjH;J{{5M#-o6Jm!Yb^wYwazJ!2O0iJC9NC>64v_5ap)@@K>)FB`pe%fuqwu#^~# zApLe&-;TnMhG zV_8!4cwV78`(S@)6WrH%L(pQ?bHl3%o?iBluy- z77Z5LZnE-AdVVprU2MkbK=ActpiX&jk{$VZs2z;qOx{Oa4&A?INCvIR0Q5CPmU7=T1cQ{OCqV zvGv}WH7?RX;-!Wk6BjS6o3-`+m%}HT7gTv%2^xR$D+`x?Ut*gS{5~7G@vwA^c4~40 zOPel?s8=t`hhC#HISZ=}wqEvq#D@NfiW1liP(KxXU}LfAidGgI!V5ThMb-Hw7q{rvu-h*x5_3{Qn}W683LI0e zIz`U`2{7|GnXRC;&Gu=~g@xR?8pk_h2QguAH|q|NZD^Q9X3dAy$bimmUVs%=#Q%4Y zFH&cA?`YpN;0X&l4m+=;Z5fSuSGqxO+x5p6ils~6?}$uL8;#OU5nEHu!6Wwn@@PcO zYZTx+V=+9>k80`=yF7RQJPG3Cq>6AhA!x$^;ILE6H9QN_JqmP%nBH!Cp#E*A>qzrG zEdi#}f~Vd?!&32_7dAXbcF9o9W zv1{#%Vp%@`syLJ(%0$)M`~tK)!C@urE%oqmBL7cE} z2B;pa{*vBJth|JTWI8CnU*moV@)H9XfEE`26inFh*^zPd3)D$om7Qc`{uMie?Nof! zSy>Ic27M~RMrOx1qk%UAI8UaCFEIBLo$Su9r`8B;qWG;)L-%4ADW6(dqqDQ}3&G)} zaJ{nj4Lb;LF(~}9>Zh0oDN9j7naDu4AKf(+@Ww-&f{YVAD@P3C*Xp$2nfcL%rO6R& zD5-(6@#m725^gK9q|CYl^Bn=^WW;zfio+oV_SXa zC8rhO@ly33ZihN7ha9t8vRyV?U5%CY+GOxvZNtwkb`n9h*)7-v!lC^kFp{eJs5y_9 zg6iG{ODFl|+_EwB65Cvx6dvf#&Nfu3cBfRTv9-iwtS=hxL4SR9{S1O9=n2p&lJb`v zTwNeOY%*drwz3qYZDMWeT+hZy>itc10KSp5Mz@Z846j@O&)4Yv!%v=`N;Az!3?11? z8<8o~*{K2mon<^N@&iKP+~uob=xhFch(&+lIERceX@7Nc_lfk(P9L~-2=-#*)5V($ zmd{)DlR}U~#T>NG6j7-z1>&su~*GZ znaP?fpl5Z^czh&{<+%GSm?1;AXo4&NwX7wGCDPKFr7#f40$#Xz6tb34$qU?dA7fMq zNkDy)=Hnz106eIpX&naiM1Z?#7)}PV8H8*l(AEd(!E)$WH@K5U;7C*IGl-=emLY)2m*a*i01qCq6oHgdV3Uk| zSB56h1&cWa$P-ksDzBJcgk6SG)yO07pkNi|P)T(aq30v86Yt=$GSFR)TPg+#;K7G& zph}$?m8xgJTdZL954wOM40R!D2PJ?-9H^bTP6?yX(|~NUhⅈ=3!s6)w5Ut@2&rG z5l;F(|4baz`XDIDdu7#okN{vBM8qlyN{@}Y4ks>@=2WGYUid+2kdS&{g6hH@fGN{5 zGKhdre(;{{Sly~RgMEyNS0WDPz)tgCdsA~>K{a*a@$OS)(9S>~3IYic{2>K8;T_M3 zvwu`V`6E`_NK^kSq5NcnF1O0w^Q`GIpwn?1%ia}>%d7WD$XxR#Sbx_5tvfYh(o$9BUu0o8ApjKA%-L)q;0^Vr9iv1tV>bm z$ii*_(8nSVWTUyQwQz7Mb~SJ1Uo$KzM&tNH%m(<_!u*wna$M+9)OQ?u13f^c>pT}z z{=j51Z~uQ1%9IEoBe;(+++y|-Fsn`;w zbhX54jVJ-c9D$u=s6&T94iD!6EL3R|r2vK^Ub&Em<4E1DVZwIBJVQFvE+Xl%=NWKN zUI5zwMokf192BTJnmhbwi>mpneZA(~h&X3jtZ@ynkYL=UDYkLd#0Y>UBi|E&7~p7^ zSnUaW$%JeGFNJk2fY>&B z3NMG?xE)YX7HO)=c7ahHD3=B->N(9A1;RhV2}GNh0zhj=#Kyx6{B%x4$Oe=&hu}RA zBjcEhg`*W`v+DI?kFhMJK-~s7EE9$$|GV4^hyYcopx`l%0N}th{F91LldQmuHazqIvLtF3>3|ko*{kyRq$%nm z+-hD``L)FXsjGW;t>kN$FVz6bRA?7MagzX6Y|0-VB?G9Nl~eu#WEGXQnB~(x131Q@ z``)uE%GO|N!9%H~?jn#zkAt2#Jrk*2q6@FdDgO|P7VkW!%hgyyP#w9YvB3xK8pZ(S z7l#td%N^pWkIV6pQVgOhalJ>HvC}j#x1!D2=j5|G=Ri_V14SxC{X{6UvI{m6it#6M zVN#3wEa1xW2?j3sJ(9fH0g@5u;Kp>Coad^TcS+Q8NvaaC$baRO|D-3h7(^=ryq2s^ z>p|pq4&{dw_cmE=oUMK`_0nP)4v}#^3u{k&Yj|Pm5X@@eYXXlDic|t5lgKl2^7>1_ zWie$+WmwS#!Lqic%h2z~Rz*lrXbnu~25KZ5?!LrqJdCR1;pA=BjU-JNLG>YIHxZCO zp#C451hKTKD_}3Vlf8s^Tn1T>f+#8Ro0QC=gXh+(-C(yL`H9`l%gYPRJ0OJd%86A4 zZZJj!94G)G3BV)XxK*LU@CH!4OqgDeo<3W$3UK#_-}v#oz9*sRz(P%Jdo%Furbv(u zd|E~OLb{uly@@(-{vXbzPuMTf!8&UrW~9UM*U zW*Qa?`b+BEk{=XMjp@K%F`*&X{?AC)*yF|3?O?mJyCZLxlNeNqHTNZIXIX%`4BFN~ zP<8_w&XL1eH_waJCsf!PYuhm_Do+%s$x}VHfU^>{`$`!WEeF%2q-N2@iF(REsk)vB zjwdH!3=n)_|6~C*ZwkMA6Zr_ff9!{~IS>%fa$lZTp@cDU321!)I4M!(KFA~~P%=gA z6!lv1ET2iRUC-3si`56Dz-ImZfh@l~jyV5`T|ZClwVVJ*0n0&Bjp*zsAo)v&U^cXK z!;$k(?$8rj*diT|QuL)1^1MQIK$2T$x8_qw&FZ^z8(mw;DXwB%RI*fj zmmaKY$73Z16!ji#Y|UVk(28CLVE8yO8hH}gkwpc^L4bwBxJQ{zJ`_NkEYqxeF9GVQ z>FGhb&~(oBWcQi>+SGpN#y;-$GvhvnmQep7C+-;}~5r3&(WMZbP(|G(NG)AB

    (uFrg%Z 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 literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/AuroraEffect.png b/docs/assets/light/effects/AuroraEffect.png new file mode 100644 index 0000000000000000000000000000000000000000..b12ca714113fd481a6e6444d307e2e056e620c1f GIT binary patch literal 29733 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 B?fL)! literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/BallpitEffect.gif b/docs/assets/light/effects/BallpitEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e7b0403f56759b45ed2d2d903fc82f4742b8d2c GIT binary patch literal 35033 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

    EU1*MVxlazJF6@PV}poU}03u`I-L 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 literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/BallpitEffect.png b/docs/assets/light/effects/BallpitEffect.png new file mode 100644 index 0000000000000000000000000000000000000000..ac315a5be4d843dce7a02bc926e2e37d3ac38c04 GIT binary patch literal 18364 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 F1OV2TcGds@ literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/BlurzEffect.gif b/docs/assets/light/effects/BlurzEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..92bcce96e56d1be31554774703a83d90df64e0aa GIT binary patch literal 584215 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�tV*8o`VzeaID*7*cc_W&;!Nfm}Z_| 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 znTξ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 z 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%0A1uQbQ=b4PLj+E_8u{V8~nYx z36X0ei*Nz87|bY+`U=jXN>q`MC2{7?_sG7W0h^DA@Wd=GevXxGZnEEBVY zTR139YV;7FGIw|XqNm|6QL@gj4qV>dZD4OztIBLgdHg&D*~%zz>SY!gg>yAp0kT{3 zypMtUyzQUwte7xAobUIz{83d#XsCp(QpI}s{W5G}0EWAHV9Yx4b1x`$ZQR_Xy* zh&S6#E7NbGrvU6{oTtxP+a1ixs2cJmo&%sJ${Zq;L7H6){bFD!m%{e}piEAU!7xba zo?UpuDxb#T`6^&Lr=TjDOhpa)PYFU4oh2Zxo~h=+uybBA^&6RP2SW`;w+R>|u)Z_c z6#+3z5nvd_hUuX3LwpBwFv)q{^EMui)#5DVUdnS1Aw0YpYx>G~yr`x5%gfU?Pzk)XJOIpy;XMp}8NmkYJEQBb> z+BJAkzr89vbOUitj!Zv7Y(7g6G02{vACj!YHg$$@ENOJ$y4yGkm|>xLi9hM3ENyIKklBH*gimYW>53sJbqdDKM& zk%7z`oGb)=2yr;pRuy_rF>L%x^g`EIdQX z_{&wM)fN=OLo>Gk9oL}~#ZK46VE1Wi59wJY7aYlkUS|}AlHh6GE;>2|2V}6-Xi(Y| zIU<0!mQtAISGuMJ6exx5%obd;;`uQOHq#%(S_yIw^8$2Y%DYO&Tm08b!8aFpMoZkF zDDZQdt_6v=Ivu>Z6ig=Zf_L$Y0)T{Wu4NR?K*S*kdG>(km~5aPNB5+p#l-wtBQ@p; z{b<}S#4kB_k!zLlN3iDL=MY@|HT`KrA06IBYJa-NT>-%XRx?QFY?U&>~H8(xhHcjlblrh zv16#r55iBRqT+7qKoM16#fY5;U7Bm9N!?+cMTsbf@ZZzd(L-G2; z$f$z#QKLpt1uFE*<9FdM8O)*$#8kjCp#0nT*l=NK@K-@{3s_0RSFUS@9NlZ&Hly3N z(Bj$xMznz#QDAQdXyOED6&ozv1-=l^CCEXeNi;nX*A3icCIgbPhXu|&QH>UTSU0Qm zIPEQp_StEtgYiU07ng;-muhzpNk}0k6mzr&###nrXKjKSx#^<4fTNXBHEAf&>P2{F z%N0u@{75%EP0U@D4arg@g(G;<4e%^K_{wjPTXz1YDTwq`sOKEYh-%A?;1BCc7z}~W ze7KbyWJZA)N%@(5UPct~JK3Za8EC=dmhEyRse+2ECT_NMuSKyV$xHOb#Dj1S7=QPY zuy{DcqjvUo$VwrWJ@MToDL2F{sRMg;7Nj&M<$wMFUB4t$?5ztGKg=N^4s&>x-QYv) zf3g9wE>nevrwg;h>$nwKalnMxDXufCm2q-;vyHUUBXI!Ii-(PoW1UA z)Ons3#ak;1e6tKR063~P2Hdh;F2{kig#0GymJO_=`4|O6o$AP+b3!Ue6 zzPR)>4_^}~%6(IjC!I-DHpOaQ-?-NB%@RnbcF!N77}JSN-ysyWRDmn68BCp;kH*|d z8nqQ&QR&lE3&ZPLw^E&`u4}7h*!nOr;4Aq zeNDb3{P~O2E(Cv{MO7@fH~R5f_orE1yOE42$-opIoPv(E@O;Hjj>jhW4@2Ep$FrCD zDc6uL@>Ne2=BrY8H*SBnbcXn_`E)7hLNr)q)H6IZ2rZtHN|$jQ%)h{{5G<%x_oGrKJ;*4+wP+iU2<;n zG`!}j0KFTQ+g*4_0Xf$N%VHO%i%V!zsVTv6n`hOtt{}Sl)hle?r+xNa#oCd-3T%CeNQh7o5 zO9Nf_Yxu-vzPG@0N@hn9Om61})=aVXqj)<2D0XFD_Pc@3x>e4p6|#%cX7R~qTm9Q??Nj~kAmscf(t!i zJLQnN7SMXRAUs=OhOd0H)t1ULb_@U+NP%k+;0-5OxAJ}IwY=2;A!FxY?y`pO5Q3Z} zPXktgpr!V^?)ENIW`uQlvBzZD>Te8dtpc+ZQC}~O)i@vd+O;riAKc)U8n>lF)8XDf zC-?o4XViT&lZ!nHHCFAIG#|Bc+1&WCb20F^Wx!t8vi98AxOnS9#PT^psfglnkh6Ro zRvblhz7f?r``9Avtl8_ga~{opm9&6Mi++u-{hwNe34&U`J}5b^v@gCkmusJ7=jV`g zw>IN_b3k2QczR3@$fSsPZp*@&?>S#l0b<@a zHxVSGbS5M#Up096qQ9ehI>b9}-yrZ*;Jz;4DI$BaV^GsBw4#s@lL#9kxanzlli3_* zzE-FLPa`Fz06h)f)u=^a%TXWR)JU?Rv6y z2BK1E7<{wnTMeeuJS z17(&w{#K3JTw+xY2IbJ~{c3HN?RMyyUy1kB-0&jfwq_uNhcJ$DW75b1ibg)UTSJ|v z6;Z41jZiC93=xxFh(Tb4JpQ(Oh@VJ?eihx}1taIq)#&kQmGH2Cj|6J!zx*N4&@ZBS z6z1*hIZ;DgIQV=*d;jB+LLzffz2)on#pOI$wkx|7?1o+|IQNn7^9zU#OSv z_PGfQE05d*?|WLBzZCYwZ&8PhZBQr%wcLhZ4CBJ9zkrPd_z*ZTJaHPL9vpNrZJerL zy;8@}#XODJ@C+~rk;{N5Ol>(jOI+ypZ||AzeABzA6uN$X_VkXAc(43xUm>~l?>C5P z^Ii3N;`Xku<>Vt*BL%u+)|UqbEJjC(r7|PDquWpq6@NSWzO2~wZZn$AQZK>Qwmla} zuxFlwbcFkahCx)d)Y^XBV;0<;6K~`s;+D-$Gf7?&Dx2;JOIH+>{yBpRaR%WA_ntD5 zUvkVa7j5jJ!1aog3wy@nTf5A>BvNmuIMv$NzN!K%z0!3DQa44;@v9tjsR-{SP;O?Z zfHH^2uo&Z^0h&HqIVQ-BlvAM-A_y&Q$Rt(lku9#&9jWbeNfq5as5n+&KR<-txCHOY z1f4gFduNtkT9&Hd>-@%aRKx&B1<99n|4HpYe9hRPIz{Ns5&FtvtwEvlp^TN2UxHnp z8td(SU2QM$t$7ntnoH1ZQi>CY%$pqEn132L{l~fUIK#y=81oHh?q;M_JKVp~T2dN{ zXeL(V9$hueMO|)^z+0q4^qyJs4US-9f3Jtt)$wAAc*Z1$QstsOPjs8276eN`=*MD& zrE?O>nms_8f9jzno`!3TW6+`L{8iIl(T3eXbe=~3y+3^P9zg$mtr0{gG2U|5sAtr5vg`j#L|qbyuFL4s&t z-)VMJshFxI%r8=3tAm_^HQ77y=u*$H*vihxqTt-4OYryMcR)tn_pxoifuDpNmgNgE z(95%>^Vn5R{#zvksL7Cd+)%(wr#VQ+_dNU#Hcy8}r3L9n1U@4~R1Y&Z^ARJyPqZd_ zCoeW#%=Uzs%ntSRD(a#J0=K=!hH(9{*k3w3Zb`vI@gDZ8y-NEUV+%KXh2LY5Z9J| z5f?NK4$R)8HFyX@6~j=DEkHGKdcytXnYEOe&W+DxN#LiOHbf2!%ky}!AQ`oCBMWb6 zR415S1Xia2k|G%{7>4<3HE%KBa)oZ>{-95bH$S(u#70AjEUZI(fR5h1YO{2vs^Yup z4C5NaGM(zbj|8TysiHATgYhyI(e0Ja;RjVy}!SG|ASqgm&>-t^ZvNquQ%J9 zo85LwRzuop&1mKqb9-G&9E71C^<$4*yl;)w=&6k#Xt+%& za%Z;_ywkgeWHlc9a3xJ2NUWICj&X2R1LuYRHGbfLspH&~duVqFffqZDI6F40Lw3+tuZ~{;L2&c9V*?)MTqdjPQlVQ_WRgdL= zCCHyL)wMh8jh08WUeJjYkini=UBDoYIEZ^8WSc~#nTfK{(07kxGr4i)gXnX$@G@tXyhYY z3D79KAPPd)l|Kj%S1FZ1Ld65!M*2$~c{g2uJ4TbRSP=GAyWE}hLZm&veqmhc^hlIUckwK zwyNJh!#%*J)xt3CfX?}Cg!?{(l832WnaLDff350XKa0?cB`DOH)B;gBPqYZhn~n`- z&xVZcWhu`1d^R}V7aJPMGa!I^Nh3VML%(k{18H-V)sB#Dp*zfg&GX2BglASgOv)g% zGn2QMRUHB=$PxnY{`S^GT%c6I@5)+2i$gSZSYFV$?S#?(*WM3wj5QW2O!qJj8jk3_ zDEs#-W8*ie!?2etHOL?Z;a&qaGow!>@|`0E=F20@3k(~%>@0?9yh>;5vG$gdvu0#Z zJ?O4yqlpqAJo>J_NT%=f+LK8~U?5Bu5Mu@@KUMV4F&d#bB!W6>UKpyYA{()-PyM;{ zeGMb1NSbQqj@$#l5{ls}vax>A?+D#^55tmsj}y*cOXnRf7c89xQuc@7`UX89m75W= zAUbBNS+GH?>`u49*$JiHI*1Pdg^TL1BS72toFL};>CEsx7SN*%L9irV7!yb;29a?8 zsuN5!oX&r+JI`1Ht5eY6JQ~Bu2cH5&c+((Unr1p3TMXbmf#;QAV%~DWkz6Q*t}g~+ z-MK;(Z+ks07y#(MZ$Vg-neSoLy>44O3kQ`R!Oo3 ztzK@l18I3Yv%Gl=8vS7TeWJU*=!&-{_do~cv|6VU2um9AG{f)g0U&-({Lwb2&fJL# z@`cgPL*hoR#QEf}ztPR+aWy4~PS{hk!Lt8z*`)k73t@l)ESKsT&UmsVNUNfa*fH}U zMxb}`>-l>j-r)FeG2ba1$5k))NCr-2IynugDh4dOUl+D|Q4{!4;dHYU#^cw%0T5Dm zKONVL4(N1be1ECI685dhtJ~?!~l(Q0P({EJO+z0i!!W{q3r zR82BmSOVZzqY#I)D!4vO_zq!)0|i~uAl16s9x1qZWm!1Ai?ZAp3@Cs=OD2J-fAWKe)QM~@JStzK)ISD!hWF!m#7RHSX} z{XGeOc19%f3-(T75n!I0KF7w2_T!hLa`(9^%Y_c5d)};lKxO zr7sxO{cRm?m0@cAP%RnsWG!8H2c4tsOVNSd{Q<(TT1Df3Ja5EKc_y>oA?mT3A(F%$Rf*6GZO6afq`>6pz(o0b)UpH z`m}`&?j4btP>i?t@k|uv+k`;&0uX-Zo<4=Kb>5rMEt}w0>5Oq>wmuWh(Gaat(Wz1F z1Q)U_HM#ApY7>EdpxK;*V2imLH1x}_|DTX5+JMdEA`(v5>jPn#G~KzBW0|TL{uv)lI-^I_)`*ad`dE}B~8Bd?sUqG)~_WrEb5G7i) zDd{*n30S%jkD$ZZ0KhaiEDi`mZ~>Xp{NG-11V9_U48SiRjRS&CfJ{2yd6t7+8ojJj z8oxv6Z;sS%fbbNby@tmQs(%0hdxumUIf$PMSd)PXi#; zDx;~=@H#uw;c*psHcbaCU0+Jn4;nNVKk`(>n=78`Oz<4myfzM>!$EnLGecWNf<|3B zS@OiW52!2SIkyU&S9zR0Jc|^D%~xJ6ubEiftcK(h$7DJZih8#)AkBlW5hpe1qPtqC zKu8YpMUuW8h@#36W}u7dbQDX9=+@Dca#0eg24-h+y$vD(fLyDSs!6nWk0kDr3NvMT z(=>P{ZD;W%#Bv6g@>?(s@4qT5Zs&mpFF68O`_9jp}!)kzrYuw%1Df(+P0|;`r`(4e6 z>gz`M6o9b<)N)&E9Y04#S*X~bLUs*X)I-p9<9hJ*JXIfo(Jhm4`{z+#H4P-Y~pUidb*)hxjWwPOhVj}_Y!2YO~EUDXddm3=Rx!E zwhfb8&*1Y?Si|kdqIjeMVDB-YHrI|d=WFU(6msUypxz!GYNPD4*Cx{NIq?o`>2AZSU$wL##NrZWXQ$7>=tgg^7XLZy;&s4(8l=@pj4DD0A@g;&5X) zgG798YIm5C6k^*4b{(JxPt>^7cnY3jo9AA@(?fdQr<|5MQi5<#q+h`0+vGwF6Z*9ITj4e3irfDP>yr~kXjnUPG z;J5t(oN%urJBWG{rR~i?ocY4d4*cU-%ukOp)aCJU+9dR0Y4&)x6^`fmI4yF1SyMX@ zY$ap`a6e5*wZoS}*QzvE4?yC~PCud5x5;1-8X$$cy^)8A+yrB5Tu{~9AZXZnnVy`h zgXSXFy1zTAS6{q_U*@gtVCXKx;uDSW*r~1B2i!YphHGFC?;sCcv^v4d_&h?J#Xy{A zo*CYm@Risogpse7V%=4bhHfDbF#Rz3ELBV&MPBjxq>V>Q8{hFoi|LVG-^xhE}x0IH9>#`cnZ7o;k z_iDv3+evcBP20&*8vwvRlA3g_;^-iISExxNj~^w|Wivt)z~oZNo;0ezNj-x&Na@DC=gMI{0#73kKKau5wvwYyiGF|E<)oV? zk+8?B;D37IyuWXhJ?MQM(s$Y%2n~K-#OaJBZ*yT|?C1{DelCATVURa+M(>RK(X)Y_ z-$#zaptD^r$LCUJgNMnti(K+$CQJ6geX?cnSiq{^K{WKxmN4~B>7uR-MbxLQ1%3(f zQ+HD0viz%C1M7r4JDu|CTT6%Xqq~Uo7!A^(jnS51pa6$CWxd@kwyA9IX^ZRp&vGcH1R)F$5)>};r~E;VMs&C>1Ya- zG0gwlSRy5#>uh>BWwEV#%Z>2R(9%ts=1x2H_m+6UgNE#PEKSRXDBDg^Ts~x1Mf!|4 zx$jqQI+`p~zP#Dq?4oupT;I7}bSj^fQep64bo^I|N9{ka z{5FQ3y8LbVAFs!HmCjiovY?6Jf`=VDFZCu^Rnj$owESf|Cy&+efEm2S?R4mol~dQF zObMYg2yoLTZ_+Sw!+H|~?NCev6*;Iens~4{E7NiZHk%8COi(@v5oBc=$=W`F+Er-V z#WXDj6bt!R?I<`JSHExpBmlw`bLAV?HR%3;S&F)wt%BKl(tD+Q0loE#!G-Glu6pp9 z{BFIX6SjTjNzjbdXGJEv5wlQ})dp)aGH}Mf$SAcpC{|0k_gV|tQ{-QgPJ0h%e!Tg4L=IkrU(c`+haFJg3y6S&3BZQTnMFslSM7br}*IeP~a~(OTwYq5AT;bZMymknGuU+xUGxml^72AdMq^d#j zvKBa{I-7FRA{PNJVc|5)MV14r2QUox&R6Gcn$wzxwWhjbggU!1v8DJpZ<@8u;Jf!D z2qslf_Bs!uSxzc*cerbQBtvstZDKV>%@!){wbZ9bu3FezhF)!Pw3+wX{Ie5el!T>z@3*f5ui&v5hCV8tC$J;OSsls zTxKcH2aSFCqZ>0OtCDlj_H%{_D4Q#rTgn|^ZndSquS%;NR58Nb+pM=4#%jUD&IdTN3v=)YZw8b6MB$j1^b`9tDX_ zdCTNLGQ5OTsA(f;=$Dk%YciOIw)i^fnIdVbOpv3GkxKO1S?5}($GGxMPdvp(t6tt| z%X_^YgU`iZb?m-_P9>hh%MqFvsehqE0Ky$^E6}F69@B@(Bvt?J3BRvwVxmH3>R#o? ztGS~U&IE;3bBkOJRV#L4<&aUUUxDp3heUJW7_Hz=0oU1FW9uRH1*zMFsuE+(YYfmL z_y6;UIqkKVm!^36xvg%rH{9F#! z!k>M4Ub&X8oW23O$jc;c!Mwn03skO*oI{{|)x*g>tD!O$cfzIi7Ecq2xtks>t3 z5;zG`S2b)UzYm~jBW={7aVLo&E36cpmR3>?0XUy|>2y(52Y&RXyvtEcM|{>FZKy;9 z1%B}I_#dSjHwb(jXx4}}xzH(7nh>?x_ zDr9g0PvhwCQ6oDBA`~}YvpL~$N1MEmB4qoRQuys#i7n6 zb$h!h=%qwp0&vAiv%`AbBzhNb;(!2)W&T2ku;dI9?B7M_)W4^}a$iaVMs-6-d zbC)|psPzO;zX@w3-VK?PJTS5Ir1{6|DxA-~K zpM#lsREeoLt`Q`7sUKG3II(dS{DTj>FQL2ghtYbC^UoH$8(hk5A0d9Y7|Q=~=e3@( zcufcE57IoT=|Hsu346j9iSQ#w%`m!e8HSVZhGT&@-Ps7R^gJBqRw=BUT8i0wy?A6p zFtn_IY^-~2o4Ib%pQv=e@L!sIoGGuh;q}Kc6r@B%6uO*?@IA^v#% z`e#q>i3GOYzmc_3Mw@u>gzite=jfV^b3(IB5!GJ`QeA}zkjg4ds+sAc^n=X)qlSra z4^VwcTI4Qj61Xa81|QSln{)ZN!)pSAGBN0sc&g%{oR9i%!N+->jui!g&F*WB1geox zp~OKg(nAoL;fopRE}~U~ z`@}g6-y3d71lWmDs_GDBJPJ_XN+MvuZqo8~8ANm2RQY%gil^nm(K6$pON+Hi)pb!# zi+%GZrIbgRVnY?C_d;e6Ax5!eMx7fCBiO%s>8Sf8O}l1;fhN=If%>gHyOYf$M2tE?50F02L&L1pzJ}90F0NfL~u>k^lfVK(_wigK!j>HVFo>b#mbKu#5ju zn>3d$!mWVXY@XJVB@!jWugmnu78H~5YN9!lck{+GJk6v<%tP6)tR@Vz0Dp6%USkhJ zX*F*$(L^W?66EppTRA#z{@8VnelH#23-ZPdYHbDmsD-Ps$Z>=wZLt`o$wBaCNbM$! zLX3IB#e9_`dgn~G(xFx~XbO*!(2UU!H3|@G!*IA@F0x*#Az@D?%xT)1OERS(LpB&R zhU#UvxzV(|%67F5e@I~KY?&jwd`t;SK(}iglM*f0=ijqeOjhSiZ0Lx>c#Dj{z)pam zT|-MWN1PDj_L6i(Qu8ZpR2WBVLTX+KQxE6tcVnpO(zU)?2f8;Q=cHR6vQer_COaS$ z{>fxrqhxkYt9Bl{PEs3zXsYz^1?h%Ya~di0T813d(nI^Yc`YRdXr4e;BhG8pi?!Fq z=P?}kdat}e@n{-u`m+npe&w=G`gU$oWtYJixHofiCJ!|0JLiy-TsYO|*hBae`5RPQ zh23-!*KIJX@lD5r zydZ)w7&-)QSv>4>EYeEya&&Po85>tDwEKWs3#^cW)KGmE(-j%H;eEKmTF8mlwp9RUgjx@ zS(0&0sdkIy^|3wI70Qs1TpJ>0@=hYCF@ z(6FATzIq2Qo!67j>nLa#<+=*%1R9nCNeY0zblybR|Dv3;Hu4GUP+~O9Gh%RXU0?Md zl8hGS5t=gf6q2#w4wNwvCvh^y#b^d2!XM9Tu@JbeB(^0GhXLX&=oj610Z3iWH=P2f zYOOm`9EJxw=Yv3fHvx%F0X+6@2`f-dcR+`fz*U>oCe?FxX)thnfNrIZp^J=oUKXYP zO~o^7OJzp&P1?*SZCg+3yYu2act%N0#>Jcif02w;jOA9IS`AHO0k}{7Gi4tLS0mM( zro#X$6$?bRXOoReEhKX4?dNxVnNzoz*R+@6R*33rQV>WAv?HpmN!4@bqWDsE+92fU z_e!PN{2~QLIw*540+W8acyr$p_mYA)b5Lr0O_lDL-QznBP$7$iND^`qfOKj?-}@ht zC<`r-HQ$yZib;lDynV!PS{6qzy>qi}e5@e{kfTFVl^?nvA=CiMBvKs6rAFHsJ6@~S zE=3hT-N8AP{TC5I?SZd@n3+ewYuMOduQ#T&!&jJ)$DwdhNJ*|3-XJ87li$93?Rp&h z2BxsMFWs_-uRhK`Zu}=^m5oZMIly&xD}Ij_Nx7XwL@zPVtr->X<$BLbtp^HyuZVqJ4x;6>(o*JsxR};9zyB)Dw;n3q(7SDcHZ8x+W>lL78pB_Oo2xbZ7T+u8 z+YXdP2!tOc!q1>!qQvv!iN_R>*}J2;tyH&^H)U5VE#$>?>x-!7c-Q+06>@}k`gFOO zJ+^VRi&p8!s0C{{&B`6mvLgD#M(bbeF?*3y&t zf&~j9?ngCA&o0R6r0cbl*lE#5y^|g}HU8IX63I2{&uVt$oZ6;$%II_r`2VN;r2zg1 zXafKcN`Mk+$m|x&1PCpgJ!9QXUc4Qh;d%<6g;PZY$D|iyJuRarh+euu+o31Ux`jyh zTsyq7;8R73{XgZ;VwB>NF`2V696agfGcaQq&?lK{LH(81b9ro}(bhlDenF;n>2Zfj z`3w3IS7PMu-{tOlxc6P4AhoYOddv10S&73*X+d!uv5steF6|m<>24`GWRL#MnSwv( zhYbH3E^+J*G;mFfsl9m;LO$naBV);~nO%t7va9;T@1t+j{>_hmNV6{==uZ|#D=_-r z7t3PlB`Y&(Q5P!BJhF$AHtCEPp33JqY#R4IHQq$yefX-#7%e>Kc1pJ9zj)xk_n*4{ z+M|57RS_~zEs6g_nc(xF*(W!b*rR1r(?HpNoPwGjQ`0m%O*_g|-!omcJ&!G{dPz)= z)X>Yu=|3qjynHt_Qvdl|i!lFOK%GjARW%|Qo$}~`nKorU86xoF!u-_nZ#iIN<({bm zlWYI;^%G)#%S?mVxM?VX-5tNX3IaVHYM{QN<4fSBPd(NQ`|b=^=V(to)pBQDz|(oq zyNd_CwvNSe0#Mp|$(~tpchW&e((jz9xb^m*Gih$&cg}%$p+Yq`$oCLUTLo^~lO5DE zs2#CfAZ(6r{dywL{n?cRI#-@$8J^L&o%5veK>wxCl$xD&zAe;(y@9&Zcblp=p1+jlNySz{C zc@hz8cs$$I#&_Xv6_cFbIzK~vGeR=1bal(>B0e_`zhhJ_h3_X^9s>nw?GH+4Qe+e4 z^W@t=>RrgW#q?7RukmQc5$V%$rzTO!iTaUz7S;ge~`Zk9g9a z6-=1y>v?sQjMj|9KR@e!U|hXwyuLAgENQoXPrEIvo$_zv@c!(tX}+3AI+YKH@k$nN zl+*+;_tT4wa~RP+me?~wI(sZpKnt^{r?T=c*&Mx9w9P8HB2_Z(It!kP`q`hJtA7BW zb*^hg$K$IQzb|_mNrYE+cJuX|3wguMiOa8_qIM%5fAEYSv)0v&cd~hN?mf@);#)~* z$aVUa{`s@9%yDGl_w;qgcupnnlU(O81?{UDF+=y$No?hHSb7jkg(g`8bSNQ$*x{p> z_;XYjlHtB7e90t7KRS6@-_(rWr&#k&aJ*J zU%+2RfC;JtCI{h#-M>0WB=E{;lr&T_u0X4gU08zQVU*N!+DcY;A#sc=pnarFj+PuFi`Y-;R z4@KDJe59Oyr37s5_{|>^|2Yo(mf&gJW-*Xkgd$L(Kc=#MWe1Q9rU?mc3h--Yh1ul zo=0(x*;;w&+>|yn?s{bJyns~s%k`fkLr%pS;t7j@+bjp)-6uY?-8jCtCGkm@mXewJ z%iN;6@4gz@Tz>reCRjKG7`k0DL|8`_+Q>N=&jbPfCab_imG1!?BGf0iH%wR92f!Sg zndShTtGo05OR|cYMd3DsBR%^K-0KRi69YbW!~6te?TppJ5w|oFa+l=J#<(i@u1OGn zkaDLbGHulNLjsCNglLS2{dAQok>83UsAhMGgG{}vO2~apnB+8u zse{T`^5$W*$IJ~O4j`8`Fe>^75dA&L6m{r}v-T5QyF=bgdQ-`^=s9bqhh)R0q`-sw zeJdCbGq&80qbr+0QT{qEB|`IJAaXCYRu2#=EXi!b1QrYQX4CAbi%s@)yCF{@OV3u} zV;QQ+B*QI*$0NPYzOO9eiM*7Njab> zFY>+RX>BHNV`p+4q48;9nx3`#aq8!w-m~y))=TQ|y|;B-w}gAv+w3L)jP_)4kRR?tj8a{Lj^*=i z2ag__E}<3L86Jj^h+s8-J-=?DIkELls!!K}8 z_VSR~!6B3N=ORaoOWEIVpp&Rb!RgVj9i~%?}Yl7-{bNSdbC3o%`59;gp?;QfR!`kNYJy zo(oCSG>a!DXZAy@GBn&dZaR_;I*KezkFi<;j|h#QWw>e05EeLQeoUS}!E&@PWui7I zJp$q(Pg?kFY3rQ49pI^)gWhm~4w$k(^&cwkP2QiTd&LW?PEJ11V~NZZc03Z2o7~y3 zy}=2>Mn=)34?Le1jK!zF?kiH5#T*}tgpb+WuG4qGBk36%ZvxQglsHHl3(_jWHg!W) z_6eVY?q|cp0dV(==+oV%>`@bHp-C(a#-l-9VxT*&QWHOet%%^Smbi-6d{AV1XH$_L zUejv!P~Ink6@XnLK;8&JUh1Dq2(G9K=aQaBzy!?tBg z(RTpY+eC;D3qCE!KBA$zmr##c*uQD;a2i~e7T83|QMJAmFT+FR(4aS&S1#wQnd5d? z=I&=hca4Jnm_KrD$|~<-lyQ1R^3JFdF1_C`Y69_x^N?T{F9ZFsyvNev;Y`)z`m8q( zjh-f_Bl+Obc=sCq(OlksfKJ@MytAS_pxCyQj;u}ipGW6 z$q^}R(}C?raBD{aZrgf=M;aYTlg~Xw6p{Er%ub439 zxer{S!`8SH4p6R_rf*4M>{xOE&@#^%cSY-*SpqL1>)fV!v2*n~-1xb7Z}*SAfvfjA zkJNkIUi~9i!6CPCPRFF`epgQr!_SBhrLrIr0QPPgd?f;^+J(A_gQQYS`o(DO+mbdM zrr?rZi4;-6D&0#bHaRaPFirw;VT9nZ}~s9u_31P&J6tm(4S^!geuhg~k2 zDl$ej+|X!#>DwILpp$#mVZzFCImYPO%zxp9sp+~e?H4!+d0{|SB zc5J8ITu-j|p5gQIG@(wrDra-`(~Lh#=Ir;wFS13s2M${#2UKP5%!;|%QGLhlBIKfy zeKA@DsRE!HyOC{E;JeEgZ{oIOu_TYh$QxHA|5DH%Lb%&Ah;`(p0VyJe4L!<5Y}*WD zrqx{a0Uquy_@5t)LZrD9p%>bn+sE67Z94usU~lU6$D@K%(Wg6(4R)kvl$~iQJ6)YB zppp!JrVcZs*a2oW-4!B&&RuD>brqzIh*eMzNdcH+bFuzui0f<=d0~Afu|daY=3G{>P&1&ZY`1Afx~|RRq;%gacfK_y zb(jr2$=#v4O=#8wf-NI(6zJ!@kSadF5;y7{3M?)vOEwUpZ@m3sx^KM5=w}h@*M*Y> zHe&x;j=$zA=uiK&mXl-X1R^^VfSsnH+=y_yR^5&TVUyeU| zfu6gwLnkWhtAm+Zmc!G*qdpnX>bcHpV&yq0Ha{tXNkbO|U=f+{>rzRd$`h3{?BnXf zafoka8!|d&?%oZV_iwQ9ioP;lg?BZ( z#XeiZt6xMCP``cW`YdMY0u{OhLo)Ho-}2Skpa& z)#D}GMaZpp5kDY^h5*E;H(iaR;C+-7B@ujc2<#{ZIi`WbyN5iK81QH7Veb!wn*(k4 z5YY%T$Lr%AVTLr)P`BYb8&mxr{dcK@_=dgUwtYnSkB9J`To|((@r>01vVdGBV#|oC z?=bY77=1Yn9+GyiZ5f@+f|-4Wl}i!lxe(4=z32z@N)^PKn7i@2dMFp9oV%1Nw?oJ+ zLvX5RoogQRH)NVd;^pb{^&8#IaCN$GA>;dI_ushMANBk!@v+c#Rec`-nn&K6Pu`;P zI+;WhuIY8=-0fn1HdxPdbqDO1>DC`V3K*Q4yU!zt2z)gA?7jgWhqoo>Gs)-M+2UVQ zk?4mEvPb{!GYW6s)ZvGRm^caSfb(F|FKf1P{$Yc13;z41B%rCd`JNS`J)x^kBclBe zs^;S;z6yVdKfCCwl`YH6&#`L^^ZjXpNkfD5{nKpmoLYX8=qM>!#gT zbQb`=x0}%Qm?Cams6xW7y4m4{nF;9CWTXJ+IG=*3FlX(!Pws9kyRIZUTDLEQjKA1^)ZeB^-!J749c!rry*Z%QxnQR3X%^@2 zz<_vb?$g>Bdv zZb+7rc1n|WS$Qfy7erPD8rylzYgr3v5Zz2wcRr{-!^b^FYeS!LZKYSNY&|a zaQXL2ZR+K+OBunh`)VIu3AQeT=gQ$~VbIiW)J=eHs&sQ-cio>|h|ApAs(HiHY~(Hm zG(&6`@>%_d3>L;d8|QQX;BTXyI5)jFuHpM9n@X(O8R1RaH%k>Z6`PPd3w73SZQI;C zgL&bNk8q?rRN!MARP@t}=so|eUYs9jeqEvFJihsTB$is6eYF+sOJslf?H4bGHrSvb zuj_y5K+kmPx-=X8dnZd-LE~ICSgzhidiz}AfXk61>nII=pY72L4mIB0mam>)PXA~B zW$EF~E7|Wl8!7O;EXeKUi*h9qV(*77ut9H^GMp~Wax-?>3*kOQ_`6+R{pKid@#v@% z%v%od7Wp-1vGu*@C|VgW3Zm6rPJLMM2@lygeH>XQ>f0&%qacB+@o|nY-t@aJm`_B! zv@j?_s8Yxy4a<-O93)GGo#a-^@1Y;junjDTz!LokfcduB*iKR&H4P9e*`XF`N&PqzkxZ3t!;yV*NA<@+4)3lW&%KFy4>Mi?gsy z6l-da{oDzFW~9+b!!YoF$m2LfulLm{Tf;wT zW-}M=`By}DMLrwoUG%Nh|A)Z04to=PBKqMl(D5?5o|?$YO4RbZFrJ@ox4zwf+G^PL z@K5pS(~uJv9MLEHrs58i);ak=F0~8HwmowzHP(qL8?J12+9Ab-e{Ctp^K&8-=Ep!d zopS})GH-p$wnw#|CYm?N-x9)VAZMHVG~o~b89M7{|MetO02)_25=$a{#dVSMH zgM>^uPy3BL>Ozrq(2w|rqz0>4R8-n&-+FUNBttti4e5Pt6C$0DvmUp4WkPNwE|?4w zA&*+>7(+N43T-0Rg-WZrU#juVz)=H3a=T3Xh0<)*Vk*Y0gU-bVzEXGfPi~=2M~pvE zZau|L#H69qa9LrqzxCKN*M+r_)#Msm#y|h+dIoNZW&-FjQv! zfpSOF?4~3J<*e2uK$Xu?<1mhF2D#K3krXS=kCV0_4&92r+M6$rwjsOK1pHZ%@yX!o za0N>juj$!NIBj_6MN(Jna{YUmZFgt_g=!$J2m$7=XGr&X&-u_0P|J0gxm5ejCtA>x`s|0$M_qmVZpx z;W-AbK|?Jy@)c6`#Q?}ouxSiB{%kjhe<&FZy6;-Y>VVbzdXp+CWY^BII~zy4QkdB6np*8VWz;L z&EMQ0Jp8P_bCcR>gwIL0A-!-yWg1a{VyzZYC*~`oXS&rs0*c%tctXRb7X1sF&9Rgx^n?>4aQm*pnkp%jv!@j4C@uf)#Q0M6Vk}XH!@~sHCJgkr62Zy)CK`DIkQL zH-9%RlGN4W*v4%RM9+c3gv@2H>+K9=#2kkjqLdEVXH|Lgvl#|AvxViQw9=Gi1|oWy zPZ;z=@pk~RU6MOw@iKMG7#Vkt7~)Hi71HD4O-p|i8Mu5uA?aVCWF*7~ime^bFY>Yj z69t>@KQ4@Ks5t$}-{07tRCMe9ru|m}PhYRBZupfVL+xRL0?wtuY}eGVK9tjVKC#f4 zrH1kVc&Rr&>2|UEV6qQzN-yAPp~J9hyK?uKr(9$%3Fo1rD3Sw!r`0F;HSJj)NmIw; zPfOZ_2XcmNf^1%0ZZQL*;vXUQP(jy5-x87WUmDd=Z=3?EH;~!&{0!m(^tRCc(n}lg zE+waMLz)oHuQ(wL>fLdU4mq^t6+-FnR9$FE9mGc8VtAW45#2DAm*4HG1pWnp2YB<- z_shH-on%yg!l3>+1)Y(}Ma517FZo15Hz?$1>*@!!?Vy5TMmoYad)~feY?x4U($Uax z9+mfc5YLqgX7}@8QIYEP3T`N5)3jwK6F*w%s?}+9*&##G89?G`2`W2i{DFJIiR^yw z3x%Oss;#=cpG%o}^QfZ;_?F=*lvVMB(F&!=vYiXrF$OkT8Uqvd`q&&mG+k_18?iHF zKv{(h_|Zg&y?1)?bk2LImTI&z4yZDv@Q_L-XkQ`=ti|40xpHmeTmy6fYlFkI@m}fv zYw+*m#-**91HEAITc@61A65bk00Mxg_1P$joz~1*5fQl_}DAs zmAN~fnIcT4qFXK83hZQutPD1z!~d4}I=6*x-vIF<46?oTCIAR)7@rt6gV^q|9fmYx zgCO)F%{(sH0?~nvq5vx@qy_6aZRiN&VS;Cz~bO)@guHaV{f^a=sMq|y8Ly7 znh#DuogO&&rv%7hhJKNWQuZ{L?EJr&(p;JIj7DV`q6x*v6>XW}l;ms6wEhwKxy*_R zjh&kGSLzGY=9XLBi(*g*X$*_?Ak?>L5-u1;#w(-htg6nQ>$YR;;(Zvd=fa< zd}w6igj8>}W*!SMN8qpb3N7QFq8O|2Aho@O)@+P}86MB_-c>VuEYFm5Ue7GeC1~!S zkL{a&So!-k2w!Lnqdn%(qtl%l8^>gmX$4@N>5EmJM=Z@fE)2#J7R)bSq)*{c2fZcL z1(xn4D@awbFv;)e*_r4)k$=8>{2|NvpLu(W;Ij6&BS`}i;k2c%Dbn!&0@W{+z>LcO zF1=YyE8^#VR2#nd-e^#)%O}pO*X9=Mw8uq3n9^iwY|HP*vw^(W<+LmS@g?SQbuO!dV!_|k zRe>kv22}y^O88ruW4?ul^a#-E1d^bo;2rPzW@5;O_kzEl7brKz7KO1cr-|T4De#MO zpzFz^gG}LHs^#rRJnAyYy`$1W%y(OL+%pDYtieO&YA#~(p%Ngp9)RTXH&VbBRy(f;S7bHO!|vyI=8#Pw@ILIKcXo-IW;XnL5e7!JYQ83cj#DZuUJh$>Vq{j@?!IBf;Vb&jS1oq;Pd{ zlJK`Az>-R;`-lpnBm##tfpr3iJqFoO z?7oH+2H^xxzMQnl7T{L_L`A9P3=rSJ3%EKAbLbQh`m*-w0EOI zdT{siBL!}RvMOtV)oPJ>z1v2Lz-Sp*yU?Kr0ohx1J=F$XcJg!;tKwW!Q$thdo4{0& z>Cw}j5i-o?ddNz;k@Iz32~m`sUSjdudEHU;3~=SiGE#+P2V{4cCH$X5l)6hlwSFjC zdMRJ(6^6TNI|fq*hS8h=VD@TZ5=&^^&3BhT_aF*gzwzA>o4i+fU%sBi)Q{$BhY+oJ z;4$9$U7@NiMJ=n&d;iB)@sux0;HVhcA?G>ag!_uOJ6nORa6&e_ z*@A%HKrs(x^X`GQ>?s1%`cWi>??eHcFrOMC{@wuKBZ^g3zi#@X>8|h)5oi-Y?x9{vT&K`%u*a=^rS9kZ`|tPP@4xr^{paibe!s?Z zJRW7i)zKQYjb>Cw2F+_<{oorB(60|cLpAiOl!n2fMEavniiIB3XROn(8RV=7wbP?g z@E{9D@F43zYYDbvGRVW^8A=HzR$olp9K8ip$plp_0?}hS130j<9%#1qVKJ_Hs=2lU zp!+pgstrheE%$_b`~#>yTu!gFZDH*2>O$B2pW0Ca;i(a!Z;bvWG6fB&Y^2oH0>GLa z;Pre4X4z$cfxy;)ezcUUO=~_PfqgWr_Lv|k%&4{=Scl19k>J8Ba^yQzZe!B*Rlt#- zverdR3ZpS(An5jjru1lAeGlQtc+{0im%Jj!#vL2b$3`toU)b_czuum$Ip{pj!u0GeAtamozUlu~Fq4gQwTl&xGDj%t(1t(CRU)7%8R zGH8l16UbcjZ@68ihzAk!EyR|>DL9ixX)-Fz@+R@4wa|{w!I@Oe8od2efJ(_* zt!BT*KjQyMS3vWl3QBYtViO7CQweW2ZsB+x_h@sZ;w7w&u8ZAL4RSuYD&2SSK=&3SATqF8fDqv`JB0=e81(4aaRYor|>&_x5+~+r1xNNW0 zcm?S*Ds2Y1ZJ@GQ;x3FCRLM3G2_58I52!4 z2-`PVu(at}mFN4RtZ$ec*G1su`X1pACp z>qIR*_rSwr-T#Aw;y@-U!A8?miusWK9{754Fh+!SkPKo)SYBiv>_b2*Tek`U6qT(z zI)J-!B#k?IrpknSU{P1n624Z<(W%Y{dZBdC8!{icc9(r=< zqSqrbj`HF|&2Mdn@g{jBpJ70}kU!C_n;cKolVVd!bek#n^?J1(!9v><9rVi1Ez0ia zLaNQy+WOJ*?W1O%2%BLoKhK^jPJIohzLYmLg=eP?J=-!uxfdmO|Cih#r9pE{xQU=7 zTT7|syrK6tQfm%0PldjzZ%dXzES*Ay%Xzn@Qn};5x(v=2-UdRA8L^leFmSQO1Bwo!7EVT+<{-e-tzk+nz&9X*OPliX`#dW#kmH1yq~m~lj? z{z#M7dC-#z5>2^MgE^+0bL8jYuHy1$N97_cEm@KzczEm$XZ#{ zsACkZ0FZqV>G>Mp=`RGE4MbklM{abUBjfsFV5>@yp-h27Gp1lsa>&TWOu6KIeo(#m z-kFMXJ{b&yd|d`zERTL`lN^GEpNNH7E>qB!ZoK7tT26Q z7sgq-skvfSVBwzy(_f6Hj(;VhdpGMWYH046chWZQGA2S8?^gC@AW%;MM){@Rq7W#B zV#%QUV`*AAutqcO7%tblMDp#{(`hml&4Hv1pD(*IlaL1Y!*(6og2V&P2k24RX`kXs zpkh}+@=R!W4U~C^%C!oEplHPU{**<7m7R) zW;E$8Fm-D9_u*^}6{PBDU7?q0;jQZ-F4x^lYMbu}t^ci!_Drq;YF7imJ;TM@YgCa> z0;VO@OP$qP0E9kqbpMYZhOaRvZj^-IQ4y-t;O%T5@oFd384}A7Jx|t;R%)F37oZ-y zpqQQ}DPwMFSl{PbnC?}~^is#-pgX_oL%%;CvL0C${-!GFuSrjX357``m_PIPe0hNS zc;_VC-%{pk%zuMSlUp*4go~u0J z&fYQdY4Z_8I&@D55; ze(N<9H#NPMk>$55?5x!(R_3d@KI-MBV=cDAb7XgcT15CEwopjeSXOp7)#Q+A2Ajn3MW$N$U}?==g5y&kwt=GW8oJLlm3aqQ5)0L3ubsyDcx|>8~jMdhX|ZC zdFt&2KQR!cQONX)+Ue9Ysx;S+B!rkDYW-Xee6C(*&C^^3GZUzNMHY?@Q|T`hv6qNTB)gg|&TiYvIDNKu zKU|ENd!h4#5lM8tHSATaJTco>ZaEVcaWiyJUmTUE1~V8Yz1#7goQzlRgVR?AU4z;W$uLCsJn7i z|Al9Wr=e(V7jsK9*@H)-r&+&pdL^e$F${lWLQKxsF4912dgNaztqU`w=|}>JSd<_5 z4OX;&-m$#wxq{+n{&CflN5d6?DU!8IE-?mgQuro! z&+OfOoKp>CTdg{Yw{=W^6{@Dn&RM8c{TNhpNFDURe?~ma*&PF!Z$+dxS8B{Ncp_7fOIK1mkfAE$ zegr4_p;X}l-F8KuwZ8L5Ug*Q8)9GS+$#6?weY#S!wfr*fynZ^7ZtgNcyoQ|!I;Yqf zSOXOF0>E^VxA{!O*20^gfV6Z)$&`i`m~1i-Ua=*rm>33@K!Buwrgq=!AU9NevaYz) z-l3^tjXW{8fesYYyl_1&`bg%Jw82_L+(`rB)Xdpwy{hiO*Y|~r$u_#Fiat8n^~Rr! zdsh7KQF4Yh^4qJTFE}YzqafkD7q=wL2ZU)iUAS%1Z#k2)oMv!Hl!j!Mzb6`91vH4N z&>VP$MgE(cD^6{OX{dMVvij!B)hDC!4(yWCPAX-#GtPM7_<|ndLfcO(@yaYQYL6HQvN~7o9H#9;3=97(x%<|&@06v@MH^o6aY6$ z)PtI#!%-$kHL{SxBein@avdxQ&DOmZ<`YCQZq}7|AL_GeyfNcEj&SBmm-r$ zVYM9(r-lQliIY!q^@fwDbe60i8vcYn2GAcdrJB7SnMQYSjnHhu+xR=J#qbY?(J~{C z6UM~lA!q&JH$8Yn(wnJQ*6iV4%^>^}9MoAEc<4dOHRrwiW!i;0x1pWeeY})hjRZAL zWT~P*>`RTF;N)Q`MW34evEkc@yqb4Xp8nIKcQwP5P{oVm4*6kxsalbY2H{ep@q;er z(GK3x>8V$TC=gH62{DUWZiy0UB|lj4vfwoYO(lOb*G11-_#xQH8Mh2}ITOxDK$H0f z`bz2>O!z*0u@*AcE9u~{ga$ncC2QZWg`O}I8uQKTbDyW8_AADc#%esgz_9A$YL`kv zP*rb0bjNlB2|8)KVL7fieEFGX+TMBngH%M?9*Zx$(k$0JK)?oXB9Pvk+a7!n%Rsk? z5AVU0@1v{F3xk9MC_{t{A_*jkQwbmefQV(#_2d?)EE>=Ef&!C9-!PB(DDqxMr{mWR zZ-P0sv%>P+K~mgV@hPP0+QdA)weI_>WLj6?>5Yz#;6!E!38d2ARp^MpFZo@+XY9L0 zs2ToF-sB6EClSy%4uy3GScr=HB{9xfc$;40=Yde>4R7d| zB88C<-XVqd9KbWDu-u{K?mP1el~-f^=$5ud;>mgs<=zMvXDq^*+O^;puT}(;qQb2&ZsuB;QdL|y za=Uy+%^-$1OUrx0kcpRyb;OQde9LBu6#|)%ajAB^6z;Y7ekc$*CgV?*@CWi7(A__e zNgeQpKI67Oc<%i0bfOhUC*3hvHTt-I>@%a^~B)&hGFDMa>NlkS;+ve zK`vS3EB~*SDOs`ck}GUky}-yl1r3s|L^BYzOxAED+7nq4OpyF8ju;F?VJT`+!byu{ zB^R>8prc$N**X&l8wt4G0YoNx;*(jtIxL-&czC`TNQI2t51KDI>Mt4YpN<#FoeX`o z5}I97X6V$(5fzMH72tsaoIKK-@hF54G4r6D19E_J7wxo7j19oEf#NIfVcEa}Tu9_T zq%n&nxfD=uq@??E6`&m;*pHkXd(q=zcV%S`g~P}15|Lu$#_O+Qyji@P09XgPJsg5i zWbqOq2o$-))n3}0-0}LN@0=2UCrzS;wV7#uI|<*_8F-9e`jF*R=^VE$GE-P|71p`H zD>wW6jC!!(Bv5Yl5o#8wy2Z-Cv1Avm)oF8wVpr0(#&r<*`Oi}tTjO#V@{LZAc7u@U zafaq-OZb7PmNu@)SPmkx6nn@DVx?vj;GKtL#J>q~0FZ}`cUzFr$*XXal@}mJdF{#K zx}b6#eDUOc+)Xzb4$Guy((sU-^e#>a8J<2S*X!+e6+3y)g{L%=CEEw`e{;c8i)xZ- zqlF;{CxVacg3X%Oqch2}?bKN#8zH@FeMy3G4IcAF)`&k$B$j0;<|1mbY=v7eiLy@r zJ29~gQqGpprjUS=03OF&so}8&JgF-YFHp10BT2T!amhTHq=T-=Ku(2OQlSe}bZTwE z0sH8M_B-B#@LCTp!nOkn8H2qFjf^eq$(&JGKtBrOe;>?qRTd>C2J#;OsbV7)62Zoq zHilwA>D{rzh0YeUEZ9lAcUcs_5%6IKFz_bWl+BmBiEG&}SNE?|*IPE39`E>z(;E%d z%NCb31Syhu&97yLcCEmpJLB>WnUXhtiFO$y4#jh`^7sO?&`2S>`O~e~ktOtzag)*r} zHo<0LqJG)5;8h!($9zaD)zn`^y?MeUol6xb3gc0Q()+G5l8t&%)>6ad30pB`J&1NI zUOE;Rb&({M&64sz2E>uF7K11kaRU30*nHKv!1cIPr}(M+@#h{*-QI9uZzS%p(_tj& z+6H&8;f#fy$Hw#Qz6B)s_YOWqJX-!Mtin=FwDl*W?z zB=K$~5V8IC&JT=nJY7~&#hXo#=a-S(RhD;Z6Z|aVxrx)bGcELkbI6i@M4TppV*yb# z6poC{%#DMPk@)kro7^#;4wm{yl0C?-J*CZBj3pK|-6wC~J}D?YuBcU~+;joj>61J1 zOj3fgBtB3wWw^@r>|qZGS5xTWpOu3FoJJpL#2{PFSE=fX?bH1Um=OoIlps9D^8U<^ zYG%FPw~?el^sMD13rqVYiEdqNiM3TeC%W#}rC5k|ySR@QkAL9;B^bQ+>15kQpj@qT%wU_y9xWz4OuPYzPiIN~ zl8NRoZTV+MA(N9yP#<}E+^l^WI%#s6e0I)5zo?49xrZGCDyqLUEws@bwpSmWum}T7 za-@#zb8VE8bAy-h=37++3|XHka6r$S>$HBgMLEBM*Y>7ry~6*FqUddo3nexa7$C$4 zozZQd1K0>p`?Bl7vVtE{HK2SChzWS!xBN%X8 zX9{-UpGF5tAb<=-!eOxAZD7ca;9Bjy#diSrio8Nmlx%<;WZJ9Sev)!|7|$+95~ zk7VqXBeMlM|EM43?ZjiLX8u&+gWk0sYZC^QmR@E^1godlxz2LO4TmW<#AbB}Sa}zZ zA}%A8$E|AcL;wi>j|#IT@ihP?n#mF+0ALBpbB`^^58#mmx+mksH~WM+krF+C2ZfJ2 z5g>uDvkJ1`Gcw6e9@`PYV^9u6LQC`b_CYak_@q{V@=uP0Vb_Q%St?BbBM~obK}Nyw z;$lEy5uwoxs2JiTlCva?!i$-mOx0Ty&P$F)vy>F<7gg zCd}*6bgOdzEGmZivnD9M7e=Kq{!`JUdtE-0T_fz-UP!O?J=tk|#xtTiEcf7Izwc_e zXqwz4`C018hp`VLb65>mXi=XoFAF9F!jb-1u5l!8+z==XJQd$0C$G_KkJK`X8cntT z0VC=2I1d~16xH~-uy`9FTEBXo1_PWI>do&ccivWx-OP|i!ZMIh=Rt&o*A&5zKXI9*>S(P{IH_q!RUH#KBsr0(JgI}3I1Go0#DcW9C`fuF zei)?Dcf-%cns(O1djGT49!Y4FHPHp(0g$y{)bkDEghbgApK*L!QFuvT0kO%I18Q;b zH>=GtUdI?OHeMdE7L-U5%%sOPcY7Ev>S-2BDV1V?5c*{Y3IM_7Z=B1deQ98KtvP7lkF)1QTW%nrtGse#x zvvOg5SR)Nola!fle6}PQk|Z=NB0vQ|NS*G(BwHbpNV^1VkknAn5c_6intcp;J~j7Z zVeDcm05M{z%8hKX@t1CxFlSDfSAY^ZYpR2p87J_&%=f{fnIlqrq#6UV0=q|qM5@&!?;OYTSmXHGn~xC;;e~S!(`GQDVSny1 zs0DU&`q+atvjP5blcezG6Qt-N+fl1)$i;EP8}ME1e%FOnoalSGhLB^t;g3#9%Aprj|7XICwSO@BqHS<+b~Wwm*(#gQDu^(l}eso&$F-8Y$A<}cfhCA zgs*txm4&0FE0oAEl=J|fSg95LhSQ;nxcR*3f0gQ@F&dS++&hE6$}Vx6t0{a^r+EUB zm6r1OZ89wCpT$iZm#orys6P|}^Gwbxn9aYtkJ95V+wv-9L?BC&gw=dU{q?;W-tV$Y zU*!r`8Xp~r8hNswVACdQYb_~wJsn^=L?2`x~8 zQrSn)r!lsOuhWX!Bj%4h&3}9cr-h2I5tp<>trLdw5;qp(Cs*U!c-z^l{N1{vzvHjb z(H}p>w;rz`5|ChdkL`$a_-! zxLl{0&`7whF~vyQpT;jiUF4bE)<8Mu8=svueG!43*8R?vn!&FF6KkLKyuOtwao{bA ziC8oa8o5+juBvl%Soj^}(SzZXC7pB;0bW@(wFiA}ToT?19@9`z2`8U)xoJ43L(yt0 zve%Rv&shFIvPgIRKeZzm7M@0fSZmX1Y<3C()|DJe= zymefBv@zjSMHp`yxA>(`&yVj@Og1h`?y$eeS!7o3#rvoY`Hrv>$i%G(F}$yf^P zEYbB=?HY3Ff9Dm63aSx7xn-rB3+@fS*6!s?pWE;&bPSvfke?9#&&TKssd(%_J3K7mD-qkt^FH|Jb?>>eX=P>`sI#*vYc3%t z^E_o%1#ZsQ#~}!>PK99!n`hW^U227X6|FA1^lZFnI}1+eN8lmCVExR3*-ewMGa3z)WXgJ^h1~&WUB%U7g4qj+Az5se2du{9?78cun%B$xD5B z=$ndpARL{Np6zfiG4I#Qrxm%{zPdTYbj^hZ9lKrev+03}YLh#qr?%_2k0gf6*g#G7 z!e0CQS#3^DueO(Ug-JTJgiUV;`{z$;>^zcscsM@&(dpj{L+Ur!#|g`=3*`mEEt$2w z77iht)59&!B5qWR>beWv_?NI?6IdPbPo}S(TmPmF%`y0V7+zDK zY1P{J?nOuq)+1Rxf5zy>(+V(SN$2XMd5Nr10guY2JC!=Tih@9YVNGl}u(( zTaw*XYIBACp3oT$li=hBHm7#N$`DuD@er|Rp&!MoA)r1?7H(PL#`xW}((@KeBh9dp z9aX^$z4Vk{VNf*{^L$5|1;Z?axBA^pRKAXe+Tc77{LqB3Y91!X)X87g@G$sy!TFG~ z2?F|LnTk5l$ySCWb(##_dB&=wU4kMmCI5!K#@ zrtbnv@@x&20O04g(~=%VB-_VOyFEP8I-c4*i^iJNI`Q4s(=oDGuaC&Q={`_KN1a*c zbH!FkS3NQ5sY6H9n2yN`UM;B_ZKPuICSI<4l3ldCh5uGoTEBT>_>t$ri;LI9K($42 zzJq~&cZN~lK3ug~47&Iv7uF!2^xomdFZh>>A8J0VZ#1||c^5c(8-ZT4)$FZHQ_DbH zH=B$U|FuG@nXc#KypqDk3oHEkd6BnwElO0}t;p+~S;& zwah!bTSQ-Z;{uxCb#n&UI+&)c@<1y{%3NY#C#iR^b6u&->w)^$B=zhd7kxIzI%7BP zUhoA1|K$!4<(|+5Eme4v>5P?LrGeWQUT>pWla9Jxb1$lkry{2eoy1Kez1E#gYo3PhT>VT;^QdD_f>P{m9e}FTQbs# zJAsw$do1Sp!l-g%jf)q0^L^~;7~2ZOrCgo&E!`j`X0E^IeZpi%uv7>l$ozg0_e%w} zo%SU$=F^M&9}~@nih_xUYvi6bic$M-Ck37R_~gw;RNLgOC^Cu1Nju9sr~0+vtIYq1 zv{H=_OPAJkZvWgD)BmoYsyr5WZNyz~;jz-f%aXuTYoTngVMF7nMYxq5IM=_ogoHM>%D6 zy{qcc8HUVVajVu8S5`2?%{h_XjY0gwAHdR_l! zSKOaW5+@GVSn77E+OSg9dQ2Oq{&vC6=8-s78cETP3G4xWm%?ShqKVj<_!EAf;@;w> z5ungY?|wnzD;l)+S$bab5MP7S*2j+*f>|j^wb#PXKN4T1>ga?KgRg@#lD;($Xac)` zsy+N9cg&<-IXQpe^n!MfIeGSSCdKR4snbnE9g}XC&Yaq`J^l4Udh{_=g3T-l!>mSq zd`s7OIrfgYWva)!tSxMsB`M!mUHWqQ%GV*h>Gj9A*xj#(YU`Vn z+gqJ$!^i87(l_KDUkg+pJTe~fcd$^qCtd5M@<^+5NT9@@u7)z-oej2;?_0;E;eAyz zetuJZFnFv=^wPJ*MvI(p19ko5>xkD!wz$&!uinf4M`u)|i=}vd`gvvTw2i#dujB6P zDI?) zHTg%OzB>`9YZ~3{JJAt0@@smDJT8n^0Px2~BD-(c1UK7XCzog!32U z6BQElrEp=@^b;Bw@lX0j4w<2R1}5BrLvF2^pj3mg7QK@2+|Xyy>|@9D4RSB3!Rhy; zVi~za+fbK?<84DRPW^@x_%xb|QbdKaoS(a{gBzgIl;WFFL_d0}&DD&Xnu=CJo?bke zEPm>9wWt+bhVcH}+<2Ue#{m*U^s9|kjpVt@$HHDy^FOlEk~@rF_8V!4I8=ulf1c0m z0cpDGyJjy)zx0r$&!?KQOiWjF8_A3z$JmL8L~5(nA4q(LLE&YiLI&QHu_wf)XaqS1 zsFxeZn;opb6B*rs2Alu z=HsPh1^&`B6pMo2QgeM3VE=9j!saizt| z;k`tV0p_>incpo_HP{ z8prx>174+oQz^2hSQtnH>nL(#UM|SfDenW3{Z2jL35sT$D01>ZcrJ6}nj?Q%)nkZ+ zH^a+nu}I}2i>4u@#RR?GO052DR{iF!9nY@PP z=MC^*4G&P!E_@?Q z!7_jWbF=xxbfb(NW$AgWRKc7kd#dU5hJTbp>`Q8qm6@?7-0(KSa8*%hc~be|BIEJF zc@x;OAZ52t6UC?HZ5|T-N^jX2)OtzFqd>K_JdEpLM~TlZTdFF5QmukoTBkwzfpO5p z_hIg}qSCpd@2s0>!za@`jPCXOB{;Zkh)O~~Dp`S>&ml|;a}8m2l4jeM>)uCx)Sk4a zCd5&?PXrWJSvo*UM=u%hyY=U9ePw>I!tyb}5-q1!a=d>IeA zFI)u~-mUGS;=0ql%IqEsS0QxtfE2qU=fIjINLL-qt{IFUgCad3M@k@^TxSSY>)hgb z*BAbdgx)WQdRIQS(~SLHc$=vwdk-e9SUaW9=4r0xsGHBhf_+!L$DnaYh&Zy(eM@LT zx=(z$q)=E%EkC|qJY5n?j8TpwJhz-v)PhZgiJsBw9PYa}5GU;{5}9TxS6{LHJ_Xg? zVI6+Zn+^K&5n!GSi)#kMf*_EWU~w)EEKY>PZgp*yDTS0tX~GAW=S1tan+ zZ^<1wGuU1>Xj7o$@={bFu-Wb<%KPy3A2HV#J(?HQP;pz3KQ}?g#-M&B2jp&$XerF8 z4`|;EcIRCA3zS`Kv7!Mpzhn;OmJVg}Wv=NXN z7K6S8BEuFnk-1xG?JKpx+*Y$v9;)lO&6{7f@z#`*);p7JC}4SQ;6Uxb1VzcQmI0C7 z(Nv5UhYS2L-aqVN2ZYM>0qy#%V$ox&NJ!UdD3~8Qa0Y6K13PWqwi<8;NY-qs$^Y|f z%FR_W4m>An+_AXEvbR2RTAldH#xPP%$>q8K+!NEIQPn?;G7NfbY{)Q~WFRmZxRd}A zIxq*J_06(@G92w#4j4QNELt&Tl3VEbHn%vtJD}80bSvT5$-nFN|IJh@@U{6s`sX~| zd}mr8i}VkeoJJEbp?5+++5 zB|D-jeSTD#&27;d`d&W#)4Mn^pp;+t?w%_9N%Ih6hUQgHOS?W4oA9Z%P-0FBYcCeZ z0h_ykOABDu=zE5JP%a6EFPS*f+;y!7(zSnEfXB=%Ht1r$8Cr_a=hP?bL~A0HX0(>p z6U6?cLPPs*CsD5OkYV8^h$jt1^35o>sm{cmpc79Xm`OgO-keo4>UwE$Q|7r$YJxbx z7J0+TYr#0^7cX6o%xE>y*Qs!bMrGcd{xnghNM&pdRXh^Gu5y00?hMwSQ#Q3dG4J!Gc8=;<=NI9j zvofd4T@{Y&1Bv&6p2%JU_5p+XbPxUr`7n@(=z@&^R8;Z7>EL^ZyV-uoIR~JGM1etl zCYcD-`njYiFzhGwTbV;W*GoAkyjO{q&1qofq(oJ}SE@G1J}fst@?KKitS-{%25TRN z_RBzkeb3F8O^HOH5D}<~9N{7tQOiKuSz!KcAg78gL*nddOubL*7XeN^vu#aFsY>fN z3=ycjG8}4jdeZDasnF5N@WiFq(Uz1!_e;Jx_dyQC9^y5%4y>PkS?$d40B}Ah+E(`1hzBGYHZP8>iWoLSioQ#-`@KRy+0Vq~UmaT+<$=B0Gmh(95uRHi*q@PW#|pd2 zi&|n8F~`eA%Oo!-NT0*pyq77*f(C`bg3u2WN+Fjukat3$La(6K0O;VEG55dn&l4q< z8aiJFKdS3`NRT&k``Wo$7}R3^$o=9YlNhAKqjy}u0%T#87^enn- zBdwQ#DCF`V5Olx|Jn#uR!GBjox z2*ACv-V%xl1IZm!R3IUb_g}KF+z$ajryCz+hFgA!DKZ<9yG_yJzm;wp5mw!3C@o#% ztc(an=d}30Xkb43@*dh}TKOHG+O)Uz+F(HVXrExod>sgi<7b1p_*d+Q;xWtL{=4`s zE$kck#BD>|cgWlO`9)ifk7QqJXRDB>A24?VQ8Tr{%1!$bTd%Wsn|M*@290Z;=!ndEeROp8>Ax46;xS>bASqmjb6lD>5|CoQY(?R65Nn=WZ*g?^ zoT2S^;)-oPN;{P8-^V9sm2z|cQ>xts1#^X4>2c+1k7vrmyeZ*JD#cC4YWUO&(X=S1 z671ies1JvPT&iRf>e!v-?M_W9)H{V{-#1;Y%mTg^)<)SBU*tB|FcsUEC4}V)leew= z5{qb|9L^@1a^Gqw`AC#HVshg3AjCBjSyqBB60o*BX4~N3KW&=_lS?vS_RDI9JVC@a zTuzm+D*D?nSa!L;*-&xa@LcwxowbKGqH{~H%u1UyL%2O0slRjgfBx)hXBm=Sci3DGn+x8Wv<|Sux`l(_cY;8ApT;(!|H;BGx^}c z7uH{j(NANeG>T3}=0Crb@h6g3kc7Y4T68vOfS}g8EN9woyu3BEeDaHr$)$|9uF3+6 zWmpORqHCNqMQkjxqSt`NB>PjA_r@WLv$4vN8nH-_mF^u;>mJH|F{JAD>Pdl7O&_^P0z;6|of6%>u1gH;Up*dYGJ8^igzSgMDCx%3MEXq# zcZ%f(m#Kb@fW~vNI`#dK1cWS2i&+ zH%khRv1QjsFBvCslM7q?cP{fiUE{@{7I?>Cw@nXjV(22CGWs^kGCtSx%|Q#sx)pVt z=1tyUJ&=C{1C}lQq~z933Lgwd5tVGo6*X&7fs=sm&#qX2ktC@*%Bs5@v|G$L2|kRw zp8y;K$6@CiVBRGu&~R5N^0<_}aDm5uvZ6I6VxX5~t0e7SJ!J^~;@f8bA$>)tNYU-c z_gLu}1f`&CMcr``EBbge#W1+x-RR<8%O#P@;@ET-nrV5htB+5?bzUCyg!L^=#u!xl zV529JMF9@uwAK};0fk`}iiqX1V|yTJV>6QA@=3vFey`aVV;2oZ^!U27-2>Owt`xVE zVefuZxRl>W9!nB{8^|9>6~g14f!?;=P+!vn?|bkC=LRPf?QT(wweS5r4zv~Tbf zGbd_bcp)|MuZHe!Kdj2R^96Jqim>DYtF!m6c_ajk(=|D0KKBwo>v$qHXOoBbFp_*= zpBoj&0yE-FeFa`@(FYNVI^O7S63j4)U=-fS zDq|5hq`Osh%d$(-xLO(L=${lPdcGyMIlvm)c?qJw zERZQS7lyAOYEiP^E2L=~2QJLtHjo7JzM1iSR48H57!DDjroFOaCll%3t<{g}1yxVa z@ws>d1^hOthg#zovid}lpj1}p0>P>Wv|jh4-nz~NJrt*hRS8LH;+fTK45MNb@Y!< zXO#f;NL6r4Q;N_bJqi8kV6YnLHIEVwAb`bFA!x)FqVEsTg3E3}_C-~XwGoBJ!ud`f zaX-3k&}1O@m0x~y)9D@GNujZOyzg$}w9b&aj-?(x>=T+UZQwJ(HOHhg$;ce1=_y+jxhC-L`FXOriJ;w`Ib#Hdbk zkwU+~+&i+0<0X?VGJhdOX_)d1OqSguTTP5C%>zml8L$7G7hj|pNE*L6Of@8d1xbMA zYs{5v-5=*`z9UI@?n`=sNYlUJoAW}dSq!rP#^9JG-iay?C=g&CzSjw<`rWUArKP+B z5A9LRGKc&TAiO@+-+yRylN#Db|6s-=A3?Wd@R%cMT-tY2172P$B;*P~%tQ=Qhd^2F zQ8zd9T=Y%haW(|?nuFW3D?^l^3EYCRHKaz_4OOoBI3OU=+F z*cU4!x6~2KpRTXB0B?OH{n-N;yu z%D(-jzM6DzhjjL!!8NwD{xvm6gvtX&=UtG@wf>1k?5$csjZE}svJ93~d+@|`xWAC4 zDa9vWL#8hOf~Q4R8;}|roeH=FFjps;=39?2??b32Oy?mbmCFsz*@Dfk)iKaBjArSQ z(@I4|Cq}H(nJlN;!kMO8r;_0ronfbj9;XMfjYQ>q>DmLQ=<)r6i=_`(`uyQypsNd0tj;OT&Dt3{h#Tqfol3gv7 z`xgAV0QuMjM$T|!Yl@@ji`tyM#?{&zP56s+vAS*PRAx>DDnkf$! z3vp_uX)_BoYp9?06@~I31O_B4+l|mnn>FV#40~+tNGac=eD8s{KCmVrRfP*^9%Iyp zdlYL)y5nM@CJF4!q!Q+fu)}1m9$4@N#l)1N>mky_a@HsmBzv$Dd~Axpzihc<3YD{LL=G_b5_V_C95EE<%kMsGlfN-08bf;gQfV$H+Xc5S`j7_x$J_kD&qK@C|U)cz+_Bu3CRmye_0-*^mEBFzfJYDWQl$4{n=DpRpeZWI=OdAL zB@jOkK5NRe80T07fQSH|hmM072jXzN&Uixv0pY0SelC;c#8hG^wHUmUNq`9;pjpxz z)lt#`*a;}#C_(Ez+DeQ>1w^satbfDl1O$Ejlp8=`_f-%(&n3_VES-Q=rk~pv(GYO= zbHZD(joV40(s?+M#cr3|kUS)JX{tVT z0Z~&KOQ!$PhNxeh<}ZXcK+-h$WfFd510?SvH&J>oMFz1~aH)ugi4qH66*wVEK-O|S z6hLb{7|)`6GPo8@Q1i`G&H&Cn728^?f=&aPQRnvII6w^mNFT_(WNb*8e0>xPpkr%} z94vg-xH+869j_rG0QpbY=6&ozIeXE$>O1v(?*OnX4a(3#=^7quKi};uv?l`WQy^p^ z;Jbdqi+_t)a-panw2T7VBp0R-5Izz}9sp_+#Um0@I8i6V4njDYcRk8Ll$Veg1}BgN zs(zB3_nhmjx|=8&bC#(?qyF7px#E5Om`hWGdGnGEbUSU=Bz2K~b#tj@8 z@g;LMdjW}UVzitMKyaOlcprSYW(DVJHQ-Rqq}QcmjHa8lWL_*yK&AKTK_Hnq0w2I} zH`X1SuhfHG5Tg*DxAr#1$7h-JOj%y?oBh!fFWny+JaNW#jeGR{X;`UEI*tC*=WWvU zoGIvPcb$}p&f&ap?eu@~pasluuY)w(8EAWb zuGf_Wdh2UHk+4F7$Q)8thxIWX{riY=jWdmF8vx#6IFo7cgg8#{eF3_j=V_ATSrqBD zJkEUk)<|oN!QoCj!@g=)b(MtF=M&MF;s^eaab#F?EYIzxP=3^5jg=eyxt`Qebyyt0 zg5+%iN0+rGeHZ(yUzQ$TDef_d{za>zJgZPRM+-f*AYO=9pH<bzv`^s z8QF(STH#pf)Oo?*$?>Qsjl1?ijMe!rUzyRru@)@yQ!G8u|tl zG2i1C&fO>H+mfn%NuVXlo99CI>qkb(2+)1p%^(Vh@msVYCyEIQ-i~vgTpH*E5ZtZc z*)qFpVBnDX^u9O1kS1_9!EdVSX4p@JpgS)K#a*W5gShMycDNSObp`0EA+>17yLkfVdf z&cC)*LDmL9H>6rJXfQ^T)I8ZCbj=%Z9u1Z^e&$L!bOY&ej*EUpgKfayf;@#5 zQ($Y~avey5bp^r{5(vBjypj%C*|cr}yoPJ22BLiBh({d4AGlF}5tnXx_84mYHo!Xc zlfCBva0am94cCkXfRjKI37f0N&+RJ{<_73-IR3NcFfQI-fIqJTZdoUWPzZ>13PInB z#vqb#jbg)OQ`#?2n9W{rj6(49n;@_tf}s)SkYKSouu~Zn@)}m;BxZTQ3Y2`kpP@tm zvvERfQYPgoAzZa!yGmG0gL>(BNhFc!GXa(T>A^Qx9tj!-fY9iAJ%Au?983Z54K-T{ z3NQr^aZ*TaG@LL1|I^2h`=p$FG@C2s0me6@2#5&f$M@#kNPRzkeDhn+dg5!YdQPwp zzlE#yTZjL$@Ohc=i#hl*{!1R27YP{r@&|qm2>reeM#rC^DL!4g$_pC@(UqUp5Y+or z5Xdzs1J@rwWskvzekG_cizYFZfy&z3(bCl))jBKnYFnde~g@64+XATfmYXOY}4q zwjctYX`_Z*Yvelw@La`^vGWfudV%Qyf(rsJUkVv3hrT?XRzMLR^W>%IpqnI+g(ctN z178K}G`w9NyaYKcPszA-hJSBa*&{Drx*lnvNS;8i*b;EZ`zPqhH+}$X)Or4cAsIB` z*JDNaOenL?U4qCTu{wJXNZL}c{tWj`7N=Im^-+E_lcmp`FWNb|-N)n|viJQy25=|D zK*68zkyU$;z&<3Ne5QY2dHQGM6I;z@pT3L<5AKkZ>)piLNADXt*VFJS{?^9Le}0R+ zRkx76J(cj|7d?2D(Q8yz%&WICo`9c~e{-uIa)F-tuZ)?CzKng~bNzMh*n!c>1Lvsb zUdNrq<(~eM)_j87-p<#|{r(nO?;F$y$Eu%m3s)GE%MiUm24K(CpDfSzJblC5Vcq)| ztk=0NZL_B(+3$wj)-+#QQ*SWA_3b zVUUls@XkZLY8h|?U80{+cVrK^SuNc>tetfnmzcYGUdDeW-l(?=wr!VvJ~4X8d;PA` zm@kW09Ck1H{Qk`sXO$EP1lWIvK#_n2fV(?jIp7W8_Wy5dvu;|99uT4&W1DF`ts|BH zv$e@)Z!8 z!nDHdwB)G!`SFGg_hChW#pn4sIjd<^%^|d*3Y)kG4$`!qr0U|i(KQ!#r~&8preltt z=qvmOee-4)A#{5$jkjsBUN37>!PBy&nB9DO8CWsiD+`vt;rY% z`FNvGdmIogYO^PMcP&KReI5T!J$^8^rs4FVX@{rp z&+SfuUYv`Lk=Ea6sKnNL-WaM}h+dtK*^w{kEpu7F($1AgS6_-Q?nw8{KTyZEyM1k8 zG=yu|p6S_>mw3l}R^l_pF}O7iH9de6!|;Dn3$mjc(f>snH6KXfV^&HUVa7qkL;)q0 zc;Jq}{X7F_TB4hU#>C7e#u{hU&(YHUHk+lnooRtY+lOB)m=SP$24n5l5@!+qPfeTn zP9L;=3E1?Iq?(3M>DJ}$H|X5a19?9VMcMPK>!NU7WiJwZ)3xNuWp@(ookM5i(<6yD zSpP(u2^(AriZ8f46j`h^HBP9fhO~5qsv)x@HZzn*5sR4pbtt#D=(mOI(oE-|)+LkT zMRrx0z(+P6h;T>irR58GBj$VaX5Vxj+L?%}vFyZ0Zb+pVMHZza;x_h-O?RGQq%#MR zi`Q7Mn+Q}l&#p8Yn*4IhF&*Mn75c3n6lHw8-=}tQ%pNazNmHKU{iUdu7NT1Tf7h+R zcaIUHA>Y+~hI>EEy|^8`D5M9in3>Z-Ph4n!?s*w^X=a2J%RMyg{jTcnm{}C_;O&qu zqS3JbPpwZCE=mphNDeQXg6}wkXxT9A+cyWrmoR?bK2y8#%n_&Bkd`CPjfm_KvjRp= zj1l-|;=4(|=qrgmbjE{CMxj;rBCtVK?L3Sdy=gg?s6Vs2nDp1N0~RG!caU~n9wjSI z7Z7`H20Q;#oe-=RFKlJF&1`fWo7y{kC$_)Hd0CJ*Ll_)GcN46wr|b` z^r^3O(FgX1I9y@-9cQ=Ytd{w=23{Y_mK4FVCqlkdnM50R%-mhMY$wr36#8e*k!GBB znfJOntDxf9(3z!SIEyAGceKi7$rqZ@CPa4S(&Ks=-qD#d?p|E&#@sk#=C9>3#Opzy zmc*{ddG zk3Bk72@Cus(RUzftQ%?EP00VmbSFB8C5~EhWbp7-)yF+SYS^ppd*F@pxlF1uGo;-| z_St-&xI9D{*TYR+bYma2NwKo*nJFK@>FwV>E?i1r*TZi?0oVf#oc3;MhCW~ zsVk1C2#~llxr@HKI({%dz;~aSwwcvM;zATv+tsZ|#eT`$Rhd7DKsKNjBs?jl^G)_{ z0S_4?O#P)`Qb0R;ZQRXl{^(f$P7Zdxx;FmN%aLDb(dgVw@<@PCQf_)@nRw~%nC zNGZeVx#0J%Dn+p=T6S8$c{e^5P_pd<2c9e)VG?Qbfww}r-V-d$ObB9NWIZ3h+IExJR}*~wCoP@Dec?><^b-7SSLr^ zV$v~{O7M?A;esH|z**Etg!q`@L7%D|(+0V@=`JtKMkY76t86T|{=n_%%Z_&Mq!BR= zN3gSI*_N|arl#&j*japwQ7dzJJw}}fBnEwx^ zfOwB%A(cbSq-;@MUap0f2U^lRU3p^J04CsU1miVjW2lA8^N8s|ONI3G67t`oEPP%Sf<1Aq%-tKeR;8_1QK z0UJK`Ihj9gu#$RDe z1L_4Bo>YM|B-xcx_zuddg+oR_hQTVziYasSQ!n`LbL<#8eDCB@Py&gfb8CEf!il8zhmWZ%$YASjKzEDOU8huS7Lqdm#W`%tMyUg%2?y+Zy0E zHE5n(yk2g2Q))m5z-dy0QMqBsaK>e(;WjdqNr0TzAY~e6I33<1M~3A?cc>smZ1@y6 zyL>U9_ezXx2}Va7OF94vm5c3+s_&2%B`yxj!tJnYadaZ$VhHdK z0=z6Tr$bsooC4Qs3|wDAkF!ECTZPYyq1s6J5#|9*I5hI0U&$+j2`DT@1KmzQ#Eq_B zy+DW42nU$b^@BqFB5FiGNmM!Dsv5VxFfII~LU!GQrHj*F@X?osVin+!bPzn8g89Y7 zHUgkgQsjRuY$pYJ&;j#ViVg?Vo@Qe{N)5v4P(9H>OF=m#LVI=Sb8>?2FVsa9B%kcM zOAg;9fg&vHmppfmEr!uq@TtX{s4DQ3)Z>K?TNjb}ooUb`5*UB=o6umLBH*3pu>UEs zLrOm#TmJ(?WkX~H>_-iz3kTW3#FP~nG7svXDcLx?!bog#b z^RBceVIYoYgldzzt(O|!yW`m#5j@0(q%jMB=r9hy*6gVz^|RR7^2wfz3i|D7bXJSZ48o zP|D8WFMfvEH7U5bZTY}M4!A63*aCzSq=NkogzD>PKeQ`@G=OD!bsHb~(HdZL$uPwf zELjdpX8pCtO5y{ua^mKtD|gdZo9v-mUtFkL)TGhNaSb{Ev5F~pm$XEY-O`1F2Ns*O z&*T@74cpq>Sb>J>sr*_gvWw{^;^=Mf2ef>6yDIbt0^aQkE4#P8oot{@hGt0-+bKJ# zMeuA*dguj+^MmFIVL=NQ#=L{7IsoZnExAHzQu<=w=@4t^5ziWrJ!-*@)x)j7V2&47 z_9kP0;jm@(kZJZ28O8q+8@s;Hx9@u6b|y4PiPDk}1xZ+Ub?9p>csd1o7-u*jMusDR?Ne;xGhJ=6{6u_@LPH4|3T>hTGO;+V#-5~ohE1AohX znQ|=X3&vLpo={@{EYPt{-w|Im$Ir{aj|kX#CT102pNAN8S?AX)KdY2Ola(i~o?2f* zM_nVM`}E#1DWY3q(5(bVDWTh$;7Tb}{7-W_6K0x>pyoo)$f@3U0#xQc3oMvg;#Ilh z7{L*;Rs%ou3T+X&_XiVuTw>FK!~SHiY`AM!RA#`QG1x*gqygaTB!(X)=p6u9vJ`ob zjCN7Ob^;7jE?L1kQA!=Sy$2$~Arn;Ku+{KglryfNmP`P`d@*jV)H79QBrb+kT*&SJ zd=Y;Sww7RwpMz%2TT*rK96IE5qF=ctCv_H{a0hqwAUycHNhlkhwQ75m#y38KLZ`Q3 z7h<4s1lXT1Sg{2xikV~ID%QR*s(vkw(IDbjYf?+BQx)qWd_N+mLmgp!_%HC^)An<| z#;H2Lbzkg%@5Zk!G0rgA{dc1B_uE~>q$`ki?w@(c+FTgPD^(14zv@~|C*uVy>v$kM zu+`>r|GK?ww3@kSo1fu3oG=p>KcmVly@zq{+n?UT*me%}hK&pYz-NpxqZDYUcWEoB zvQdKWCPaQ(k32`H2wx5F#UblOFcA(BWC=@=%5!xW)1}biBV`L?{$D^#({U(`DQe*P zs@G)9hop#p9y*2W)EHxvhKO>?LCxO7?vt$2UdI~T1kfJ5f3%` zc?Im2{On0GlqN?$qoeQ2Az#!~InkU7y#| zqvQAk$UQnjku~}X9isR$T4IvvIfr>cx496JxfBE)y@!2G0Y5bkInHyO(_nwmh4(~9 z{?m2Sn2qyHG^q{gp~b{epgReNN?dleNUq=4tlo?>JnN?Vto-?%eT|>11I8 zkukBess<(w_JEEZ#tok-#7qMW+IyhaRcM48JZM3VxTn#J$zt`wY&|*bGALL3tha?iW8Zsbu&63OX`g zLLCm$e)v4Nzo>mMDJ`Jk$`42Pb)?jMIt)IuGDS6>pASu;!`7)}PK{S>2cU=j&YK1& zr8yF8T4{&3DU0^v)ARk;bX@lB^#f)khTn$#SoQ>dxr_zD->y&$h9w!&j9ir z6lf{VP@zNXeSe>;^i(3mKHa|@HbP8>CF4emR1kl5-ojF(TfGL=ZHO+1t^rKHCQNte zFprXuDTK^N=P`#FgEzG4ILl#|S*F zRGQ3wai4mY|%IT1XKEpXS`XmCn6NlN#f2SAiJ^O%LD}k#B znC+Sf8U?An>8s~>zrWcUqk>$M7{nIAa+uHb!q%;1Xc!K$L1W3b(5xdQ(WAH3NT6AB z&{b@i;_Jl{G&KED%GlP_)NS|^ziH}uH_vUU-|xb*_OnvgQ#yWQX%b!6EQES>eRvRb zUySiO)<5fXD^qk3i)X1$-wwtUxSgpmzAu~2+KZ3UeA4AoEWSO=OnulLErA9aGm@`t zTZr=io@`8X2s2oFwNN#l%-YrJ{^e{YtS12qD5Qeppb6`s5BVGE%e}lmo75!ZK|uHo zHo8mq@3j!jjp{{HuODw8NniWO>l^(zlMb!L1;zX-d{4(bkF9y6#GEEWbu#1~3ECt9 zbx(;Zf$Y<}S^uqu=-sS`<#{O*L}SgfAEA1+BP{q}UM>sKmGLc(4!4y0IKZF{!Cop!2%~=zoP% z&(aq>eeOm?~AFb;`9kuZR^bpKM~}ksY;=P!+P##WR$GQTsW8Og00IBBOoE|GeLS z0VK2u+jDc5mf(av5g125DUJ}`S}h@L_fET8pLgTTmS^h@pW-^>J+l)g>sRqm7LH!2 zjbtjZ0&46NM(qjgpSj*(x4m3fmhC zw0qW_jc)|#s$L+qO@}PKCklw*K~6-SaLMx07)CqI`#A zG&sR3XjI*D$LKHd;;q+<&igr4*Vp)`yaj+C{6#xT6qO!!H5rRPPN`Zbk1yo$qojT@ ze^wa`KBvQ6GwS%K+MK4-&)hr~CbA7JvN}m`%Hq@sz8@l{>{)WIj(FYVWQvS3+dEe& zAw0XrGEBM}z58vJl=TZ_8?&3dpfojT70;DNv{K&wY00T@0sItIdP}6wE0@G3>pO&( zrL72J{f{p3?D!>6FqvB49ci*Ma;lPO9bVw_UdsGvH+%Kx>k5YuYqCL2C$m#*TfywE zAe6uF5!sey6pha}#)9_S;^QMCh)tJTDMVQuuL5*R`^gS^_Lry|`4j9o;1bXe+V7%> z*BYR&gRwEDuiN`poV+aKH&7L_tu|N|OQMSe<8h5@LP$Oi7(&{<)o?2DA0n4N zIW5)j%yytS4*MCciOUav`GJ4kT(ZlEdT-~`o$#k_Pp?OxCT)! zc8wAnsplC*H4MOSZg-OWjZ;m>d9g6jwY5L**tS3HRlTyODo$aYB+6bW^uT3rSR%WY!9LMhbp8*|bN^UjFKKB`r3iqM<& z#?Cb8VC62l(4*AFAPh8RGE5q^+OMj5Q)gltuXUImCK=dPOjSeLqkixWD4~j5d(uo! z>H*T|xG6dolLB@2LbyYFZzc8fA%S|?eW}aP5n1wLXv_YJiDaV5&k}*xgO61ws&1Lh zlacYd%`P2U=wfR>|NO`oMm4cims>qmflW?`?UtjbW>kk5=UU)hVtC+HWut@dknMyj z9RJw3W;-LtFNzKgt^%I)#Yb3mE=Z}?Np)x@ott#+hrmrkjwJG_79u6uOmArSXacg` z3E)MO5?j|Z_K-(O=GY`9tc70*4^x2@lt7iXY#{TDEE0kWUy^UC&vNfs_)qHi!E^bx zLlmmf#sk=zWv$34f@tum5o8Hs&=$L9IeX*4-+Rj(41(maWx4~H^HT%Xb|r{Nl|7cF zNP#QI#Xel-k;0T0i%zNrOfmL`8IZPPsVYlP(3Fn{fs5ng!Bg!Nh(o|Mx_}*nph`eb z1sv#leKYU=qh`0N9QU?ykSRI*YytCm_4VMffJq5|8DOLBR1@}VK<5qOWj!odKIk|% zOWp`MPxz{fTrex8WA^AAZAxW>HhOC6PJ9GBNIkM*N>8?pAFy!+jeYnUCn|Wezra*%22GK3S8Y;)JX8f;w{OPU=XfE>?dwt3 za-pV5fS%DB;ZZVGkoA)VU6PV*{Y5!i#AWW^G0Dr`ifagcIx8fe5n0cvVgFq|R8vac zn0ARQ^8Y1`$UMxm2%iTTzbBvzNjb=DEeDYA^>m3c+kAiwJ$*yRTkhM+EhP=vH{--h z7%j+E6riQhT;#29yO5-t6#Y7$o#Dtq)yV9Yt6Vq#&aISY;)^ZbGxlFeg~9KQK-;<( z{yF=JZIAF}B(3?@_GI5>X9SH#G_5k_NB%(U_oPyZHc{6^@i7M?C*rIa)-i!mcPa|X zVk|Yo*Owk~8{4t@hS@Ov5~nS*w{ScNr3?#vk>eJ&AXsZN{j-W!*dx^rUZWUlqv3xh#ObF>w4 z`{v&Tf=1CSdH1|M`rykofn2%8cF1OnAOzPnU_(tbQH{5}4%=M8T3u=#V6ct3$(wwcpr%YwGFzmo8SC)=1W%IY4Q`d8U|4B7o;U%-{(YPqTiM3gRa)XG7!jy7!5 z6ASX)?uz!29k#MOFk)K%wfaH%c5`J|9CG40v1#(l4ii~fETfU&fw$1FS*`Y&Wi2I`5^rpNevR^jk3aYU_ z_1-IqxHcq(hYG`aK1879S6Z~Q^4wLx23Lek3){gExaiEXnqWmLzJuIi^TKPWUxO0v|Iyp)g88HflS5K=m?Gx6X-t$GH)P~^*kmOQXeh2uDCy13?_|ZNjPqWuG)P+I8Mts3((hD`C+*Bee!`gefO=R zZV996EQRMV4h{hvT%rZWNq7$0+S*Q@1H*P<2?gY(;<_*~M12c{#0x6|pKSx}aIJP# zaY1)l92i_D>44Qvy&aDG_wIpn7eUc1UdX$1CshYlo<3mrz5hI|%b!+Dn&MDV2SxM! zM!=wevUVbaqg_?;af+ii3m?4;Ofo#^#sCrvcxOq~X3W1+nn5;ARb>6Bsn(dR0kwYb z4|#u)+3tXg4dbkiJZH5ijy+=ahDV+6KdXe)K5q*q38Lw~e-{XX=WFyeoHQ0M`8#}# z*euu>vWB(T<&l4iX8DeLkQ8S1c^X)sCD&CLhwHiUiaOFMaFlq=mrjn7qDsJeos-nQ zl^eqBe(7@13<7a$a&7I;;y;l3T~AWlnE=c+Do!w2|jIZ%6wzLf;qTL`rx9^JQ- zZ`#Y>sS<6|>H9q}!9&=llBT`1Q~MOW?HW;Ir*E80bhy()^#h+vznG^!m8vif3g{}N zDP3i}!g=B905D*+YX(bjU&_5@4=L5VXz(B^g-_CO^S6Q=@W3Dd&zlMCspGm!y!v|` zYC_s7gJs>{t?~oF=PgBh_6wa6+_WaqHr5j70a(oqQId>n%Mg{T;CpporB<|8C)%lI zJK%-V8BspDZkpB=A{|;PgOxG_?cRbdq|U`+;wq(} z5C>bJW`GiL&{Gaayan_tRHLS>WXah=aPhB4Yw4 zh=@<1<Nouhodtt^wZMb|VI;x{cZ)cnAT>0JePn@j2Am}a>*=&E za&WR7LL{Aaq4Of7yvt;8KmgxMyp&Agk{CQ>5zn8*TO$@bw7^V9zq+lgw)8H+7%xa=b1%*l0Q5W58qvhoG%{w~9ktgPac<0o&7U z@DkrLyF0X~;z%tC&LM|DI2WO);W zbr|GN;894+j?#MkC=n-OfTokE69XJCF}Jvn>(rD|;q%aV>c|e4mJ6L0A|z;y_EL$i z!j-=AU}bF}>*&^T?xus2UHz z?iQzxBTDHIKl}Y#q_B=tASTmbLH{tgvcS)MZ^0ZOiOS9wGp-Iwpld8}8pUzPKlG9S zEt#CGFWi`$fOh=jpzqv|_YMx_lSZlq+s03K2QE2iLJW{)*we2a0w;Xm(^M`K+Y%7v zQc>7E+y)`K5ev5$4;-x%!LD$FNS3AK)yFz-u0IS)C+%Mw0Ji*ma|;u~=b(cBb-R6y%>Lu-IcU7W;ySyXP7?BO=lodR0!08xy@@utY9$Yl~ZUAT%QN$HRM8+4<|xCLTWR;k&8fCWy4WbQ_6- zMPe$Wy;2QnIaJq>;to0xh~wVlkaiJ?ny8|#w7`rC+a!sn(ZPa~L?6m%Rl+%M1#ZFO z;SesnM&F#>QiJi-B)W3IX-bGK59F{Z+R{~!Pw$w+`)?Gdza??=m9QX$ukAzFMiu5F z4zdN1K-M{Jj)0yoKGR4FuwQSGKbb0G_S@DDE|1QBwseJ3|^ zoPP%N&_xCES2g;ROw4JVFyaP9JE@xW1b15C z5nuBo*ro}7{T`e&?!H?&S*Ah-szrM>qV4olrAus%I3YzM+AV=+&AXp;KO9uxH+34u z(((`efIc`Pbe!TcWtJ*0Fop2+)De&iIgZL$(f{R2iwoGafQ^#^PIqy!bdF^c2iwlI zDC1z+K%x%&K@Ussu5gn06oIyo$I`&J>may2kcF)*_;xnLO?i2Ll%OvTD8v^qDa;B$Lzd3RHe8H|_kT-#AA21ymHERlZ7@4{m4_NM_;9$!* zi!^o1kKc2maZlf$?UaGyG`vqbkS_`HHn+k@30WquIj`X*N#CZF^OF>|&b|D!`SU0a zXeE1fwA-X!fld;GQ)rO$irc{y!TtJH0!@EBUgPG<3zCE7G_bEEd8Iu0Eg2lF;QuI+ zc+mL)kX7M%Knklsuds|xGbc0F*(x|5D#nTZAm|w**QR^a_-k8$7RD}LJDX0t)%3?X z{>MDt@AerN{_|=m(qzH&m~YnCwv=Do6(N$<86!U=yhCr-2dIo=t<%KU91w{GfL`1J z<5kAxSKhdDDSD5f;pidKy!Te^9O8hphHG^F9cQ5;k~A;bXn0clyk&h|plpn|_5COL zfn^#@wi{@3UJX%=a;U6xD}#jew)rc-Ig4q5+Fhb3Zm{+T`zntNIJl3(4a23>9pi?M z64Q>-JO|Qjb?WL&?n^LObnE9?9Y|yj=7DQ%-hWTBJDR9P*1zM0C3YNihbq{I&Xb;( zly#82K5e7apH~VGPx2xSPPtz54Iqj376>_e`79Z{ts49_4qifjv}y`cs1+WxObeC@ zH!CvNCh`^vRf3r7)e#8cYJBsZ|LaH&#+}>cz@;D#%}{~P4Dg5IawMDMquy;x0hkqJ zk=5L#?9D5&hn&XQh5^%@6G+=IQpSsbU2g=Rl(2!2>sO1;7O0uaP%`DrfunBgvWOJj021$( z=*_zF`IDPko-DR^JoVsM<)~B4iEUqAxwH** z+`hc9=ZDRwRkkmC1TNsew$yEGIilfN zl2?{J)^>gi`7!tQ_P%MK3Nt%W@ppv>1e#zRf201wii7R<1Ezk>Mp{J~_T38Dy2mIQ zH*vWyVNv>?S*Sl22^=-cD!Y5jdlefv;yA5jGiuIkXM+qE z^82$#7unHRk!5S#fkUW7!p;%n5S@JZ;Jb%AosVz$-DktFq}o4A--k?eE~i2c45w$! z5%di3KP3g&tlwV*II32sKLK#JdK1RP-yq=^+JRBHs$Els#^JIbwHBM|Igwae`|NGY zJ6*(oERqpkP_w>2JV<2fo^68eWW+mx#re&%_e~}ndff5r>a&HG`_sHOon2teLQG>A z2b>ktuf7W$b29Z+m4ZEfMYv7#H#S>+GN0mIdUxwz7^84b1-53M>)CQ`?eB>t45pUO zxBg>mC~7a%QlbW1vm&FEOtx2)(foF#Q{7s@jSaFzXHARKZVMleZYykl^u}Z%pWV}I zk;bz3yyaJ ziXx|r>sHeSz|ZpwfDyJdZsKy&0C%IT{t#=UQIo%l?MIFAk3xdpeCZjyL3&F~6nk$U zX^3=rG1m~u>ALKL^wM!>|-`Ih-hz! z9*7R`bV8IUz;^GM_0FnkOerw}o~4NJQ*vq^8lJLR*F0h>ks>nU!4@rw>v)z|b3DO5 zmd^sM)X?}aTsC@X%s`?Q&gQ*48@RN|9AiuXLh_V`Sp;l4#&0lp@}sT`x?dZ0Xoe0p zrypKc zlYa0w-O6wA@uPf0%sN&Vu_Ir&Bj$A6yVwXz|Itq8CZOBUu0fM-g3C3Kd1$(JkRc6j ze0gLfYzQ=QLUxq@;gy>~6zP5X)woOB_I^A3?QOWxpfP0bD#{>=arDaLOTBBM;c4%v zpz?n!pUE{A2KI472`A-`yvggYp4XqTgf8#$o;_}4R$ahewA7BPcPTH7Nm^=Wzfljx@=eEMNQ^(_H}X{yuE}TnHvprKHeW; zD1}~h`%!nw0Cso|>nbNem#V2&i+Av_k2M2n4t(2NF0McVeVf$eUOXOQ zP2463psc=_rW+!9{+bSK#w@#WY^c07aer7Sb^B}5h)JD3Iey%28YLTaeAQCBNB#U# zmkOS@8YplmYqk5MhF7O%VsB-fM938I2>NtpO3IXtcPrOUSHw*SPG1O;{!%r04%k{0Zl0Equ+)h z)@05KaW}`HNCKJiv(h_cBOHvq#Qvqz$YSw4fqGxyPkC;_RWVkjjp?DyIa7jw7Vn(d zRf#vcEvkw}LLe_bcf5>v@In=i<%>3KWE5FO%!w%ULR@(n4~9AgUnc#Fml;32I~f6T z?H6Nm&oGgfDPz8>aFk7aw%N0$(WUnQWAl55Y7^@mJ%2HT%{Y$p9U#)~+;BZ*kg_^q zE8&Pb2xvgkAZ}NHOltJsGDIMnN-0D0$$dgm)P+(>nM2y!W#ePvp2h4)=LKV^_x2dbK)?-7Z+<2VL|s_gUw# zVV>PLMP%_y38q{=gx%L088kD1ndXuF-v`{Wn87V7)J(73rl|IG4~P0Ns1^#<$bs`L z_)k9vtoL1zBO)B;(bR&369;hs&Y_Sh0w+!bI!pwBCjryEH$hM49ApTdl!+f}K6BB;x#weQV{EKt4L6FWEv?QgOHFIwB?}bqYEae~* z=nd@(oK#>2*_9wXFNVY*3+Y<;T+`v*^r7GUWhY#JU|9evG{Bw702}#XWu!5 z+2X-R#27ohq|G$jiomg!4BBm+Hhs*on%8{yZLyl+?8~fLRK+nHMVYw|;1S#jJ$tWe zz<4~i&YklzAgSMd!00mY$o*-wI6N~n++3%WjzcZjcg!LkU=>jo?HucZM^5W7b4eO*#A>Ybct|&xyr#%mG}(H#ABc~<;qj+ZHvYWuLk>3n zf!jB>*_j8H@f_BwNz=#GWBgQa5X1Xb#Yov?7@=k?{+93NDgp*&%90fCeX%XI)ydnc zq-(+i&t2Wz)Yd!!t*h9%H_G^Z+z=(Q?aTryQmZU$X~JmQ&OXlFb@=A8Ke=}x?PoIv zmc^!3eRyF?t1u(Y6ej@x5k#>=XA&3>66!hB1PsR`tCu$R{5P*Z1jPuzM{fq6+mq+g zIzwH>F)L^~-=FtF@H`9vvSFC7>K`M`S3$moFBzutHDivEL*!x6KE_}GbI1`V?yRm` z-yd$o7z~m`xRebi*9`@iQ7=If0{bJ}5aEjoIx2oKjUR_sNU4`nIM#TcPyNa}<3Nu9 zuuFfO%N?r6nL*=Qt4Q|-?c;%0=>t~e!K~F)YcT`%6b>_X07n~m5|1&IvKvcdEj3C* zCFN+;gwY;=2_I+?iNcYACS?ni78?gJ3N}g#)GNSRrvPZOwG(H6nfN%YK(iq>U4OUj z-p6mG4iecJt4be{h?dr>s2hPdt(ilCXL#QI6DG|=%qs8|)9?>(hJp+m%-$czre+yW zM&u8JN3@i{jl$5p0gqJ?1^2)$3ZO0R33GPrilP>ZSz_o~5r zbK$bDpee=i_wx&aj59pfosq_uBR)-n&GZ($NpRi_I6IsZYIq=Yo-<^6B22|wlo1(7 z9uB1pZWn-;DR{wUATuq+|BQ2hdcZ=fbg#k&-Q!T3xIgxQf5wNC_(#d_Uz*B+kE+AX zbn7n}4PFk6ejEcwLFx?2a7+LctW=sdg~Lby;d6i)gJZ1s0M!FbLMn|V1^b^{ni880 z@T1gBARNOb%*gC$8KZlnx^5K7GQw@+2c3TbD=S7U`UQVYN4wN#*{1-@hX(_yc&O=U z*Di3i*KM-lDESu?r(3ZM0kO_I9XdDU4FU504_W6KmSq3_fA$t};|3>gG|Q1GxHU~2 zspSaFot2uInI$0Zg(EdvI5IOUGczme1~o^Tp;_6+k!izl+-2jIKi_A+eGonI%=CbLNpkVYs_QOw5?`f&4t=3W89R)8bTvUvb#D__$=@GgrF zBJkytSnOUVXn?PtEL0{_vGYuMhY^J?KJpw>&UMz{cB1ld^it@#_DNuxZ#@CS77oU0 zD1P%s`sieV4C`}4T!%xF1RLjpojygF3xZT7mXVTREQ3|X2PPb+D&$fb{zd8qEZo>* zsrv>mWF5clsXSdBLi1KG04lco$VF4Vu3+%fzVn3LH{J@aKH7Olbj`WYclgxKuD?0j z!+~#YG~*n%a3e`7pk9^k*;?-;4H(X?hey-G(juolXmmo@>^tjq-hbXY9L; zajk6|)PB-D{SlDR-UNxN&EiHW3CFhwQ}3@+E((i5Ic_VY>W5u|hOwfD9XeS{=%NU5 zf<7y|5G7ymL^e|J;kqx}a70$8sZ}o#-{n{0D?sfpRq7$Tv)xoV0*uSTe5(aEaA&La zb;x<|_*0{u1-ahuy}oRdMB4p6y)*NX{80SGzd7on<>sCt(%+KsF{+5sqNy@^k#bi(RD=R;je|*Q zw}jrc8h@!;Uk_<)P_>xUGWRv>p?LLh_VVg?r(XEy*3s~DG>b86u?7Ntp7k)uuIbt`&;is&uQ!G+X1MuL9p6(_*>mAwiD$zaQaa~puDY%XL3$R zFl&Pc-uhOcL=c#Y2CZ>I#W80)XpZ!vYIs~hN>ks3lg5#)Y^zpIEP#_Zl3|MjGl!IW zfqBLhY9_N_x&GHxxK6v8EbS2Q5ko8RS1&AV=Ttbny^ZT4AKSqTthS4S8PqO5imeqfQb0ME0xS1}cdG{V?Yn z)fogFl~6sPQUFBZ1PFlh&r?7`0|hupRqf@2a6Hv4pi|1{bf!QVAfe`i1j<<~rLRm_ zJOKCC7O8o(l2u%Sb=C^6D@murCj^8IV3P70;V&>L5?Gt9vCXefpC7wNuTO&mRjdPQ zpQ}@G0BXd#Y4eZ6rMHetH9 zUnJ18P7d9{#$Fp$O=OAE9xKAIEe@wOrUdXg9VHG+Ig~YDvQLq_aU~S^k<|EDT8IfB zZ_kn%b6NN_OofTyBWFyxfF;LC)pMo>T+Yw+KbL0q2bst-C`$hN!|QE)onF)az44(c zfiJtiAL6{75*wVpqcXhQ!U`N5y=NO^QB<@}|1N$gQ5zni%BNX`4g*tJ;d+53|D^eT zM3!7v`TlbjI}4nE!hUsG|2P^bPV`WLA=U?ciJ?$H)7k z&y&>iqe>2YG723+H6HiA8BISQ%F22Pz3i>Tf7v+XkWB?TXOiJLC-A9as0z!$|K6S5 zz)R?pjo#jkS|`!_ienh_G9gV~j-g#iEUzf<_8}WD9_(Bo<=KI3PH1JdW7MKkjJjThOoO(qv&(_6>|Jy41>Vnl`|aj|KkV}`TR#Sl zyEt??2ai+jggIsz`bB%B&qC+>9LAP9u*I6LVQLH2JC@DT;0C{k(l z!n#s)S+h>(m{m@p{&)CTjHMbx09$89`POf-IidcSrA@mvw85&|7kY40@a%CbK}Zc1 z3jQ3Z`@8R#xJJ}<|G0jd+J)PA3Mp`KXlG@>CtQtj<^06`V{3U!8^_`z9Z$}&yS%pC z*!RzIXQATpPfsuIa0-!b9)7xU!O(a|{mlJie!Fpc&EmWLcM`qjf>!wrTUwgD&nGMj zpBPsye7JG=L*g0M7AW34{GYd+GnGh5Ey;gxw@-yMVQtWkY5hy+41Qc~yq9DhPiVs6 z$;Nmxm)0V48jn)+;jKQxRDt2%q+fR)xj}}ukDa?B5J2JjVUvhg9W%~2>yXzNwQ7=I zZFT}gU+3VxV(sVI_tI`wdfXDnLW;4DgFts-Hn~H~1x@*&+?> zc2TL}xUJwOf?1H%`8d%QT&lJ04G&Jv0$=Z%cilNqz8J7`zWhzNf=o$vGPumfWFD}~ zc9yx_+>UB~ci#3{;~%zcaMYFP9@B+Iw=#Ak>NUah87>N&}%@i2%d9wvb1Mv)oJO*gw$Y(J@C1%wCB3q$bq$5M#OFDyI z>?Livm%WIemwmsv)EGnM6q{kGkQDRoZJT&b+4Ma?e>v5Ai%f|FY-MiOBKJpA>EdEf zw7hjx*sqIvn;Fe}7Tc!Tvil_~pdvG^o3nR~TlkPty}I9*5z_xN+lb8W(5uj@``wuD zYPtk0%64AuSJ2Gc*@Uokuml%L8Crc+7So&XA}xms-FMm7g$-Djmbx&wS(gx4I^WXM zR7T+KY{J;uQ$cp*U`a#KiSIsh@T1?mqK5T9_hl8?)X+oijo)YVmn@DAgF34oOzRYn zc1xJMymc?w{_3)}F1v2?9`{J2#QMUTmhX$}o=v4D_r8N-7ky6HpZxhs@=2C*Vex(9 z)rpOykJjtu>G7@>*0T9^f8f)R8BXi(ZX~W0t18`$-}>jBte=DoQPGDZEIG0$uZ^&@O$83X zpaH%Eq3xa7v31d>6)|&`Ci^!8qKPv<>NVY@akXPe$JOwNJ;iy0+u<>P&Y&WYCt>5B zQJ|VWK;#7VjbaN<(}bRiD*o%CN><&mNMm^f6^tunM8kAHU&jo&M4DXtDZ6FNswRx= zG928UYj%zi^Xt|JrLk_SR~(Dj;12eGB?(*Un^tubDLF(3RZR;;w$jN~P#TX}7+F1w zyzB)sXk?%xqi)Df^YgX}UgjNaZ&LK?3B2;2fiAs7MD)kQw{iGAI$e!Y(TU5iN;>jj zb-(;_J4mx#4(mI=roCI_w#}0Y9eg*S+9HZkmuAHDo>^O&t5RtoqtFmHA#;Y#(cvav zHg0Di_DkVet>iqp_J%!*_kpPB4vwZH3$E=cP)Ef=Eqg`ahjs=Z5+MCf^oc@}|eqQUZ&#TKDo*RzMt-|}V|g%yh`crp_o`_ClZ7m; zzaqHZz;o#o7OedZ*Qb$2#~dH-*El5x<(lfrZYMM#(#1IYzFdn$het~GOt5?+tN1WE z>S&k%O2iQhvI}x?jfB2Ele5w}X$+FcMMw0}V95CxSm5w78nA_BiW`LQzBj3yPGf@b zyq%LQ01zQ!FQzm=r6+Opg=DC;kms{_-}z!%zvO|iwI#OIzjSjH?6${W+a(r5HN_y!WlFv=mkHU;nrSic2P=&v_ZA~govsCk2@jvy1~~6f>W+P|RFxu(o0(|8 zf^JONlhjT#M2+TcYp(IVD2)m4NgPxBAK;-DH|L5Ez8m`G+e;?ySuaL z=#Wxf^udkstoJK$6KRgSLMk+zgyyDpMB{xA4f+)LL#8VGG?#_$w<|=2hlcxAq1XB} zn_1XIUL*WqYoBSGrOei9BGwZDt#`4^we?|OB9Q~CK|jH+IF_742V3Pm8KT3TfhS&f zMy;3R+^Yt{(4l;^`*IGFM1aRp8XsY~;6?v?07ypvqiYlpfvkh_amc(04FuPy0cSFC5+0bf=w3GwAT`V1te1i-wsE ziYM{&BuoDyEsB){Q6BH6d>xsmhv-vQi}scm(b3fApj0o)BN2N8N|YuY^2A-e{!}f# zKTx)f3x1>X3%Xl0<5Snf)^T8Q?miEeJ4D>2`k9<}DWgFqaHAjJNAM>H&7e&)a>SDz zx$5x@qld-LrH|jkw)D;*HrZvWB>;$}1M5lxpijO|B5Mwaxcv1ETh3hJ{B5Kl^QM=J z#^lRfRnU`IzYmdM%a<^*f_&c6AGqEszSy1CIVRM7)g${5O0)z>q7Bjrl>!n&iQQnG#GKR7Y&xMu(>HSd;YfWqmeR z8Y399*F7_Y$(4=Bss(NuxiGI4AO+YTYoS#0bWg_*WA-K_)L%YL@RVXh>thqpU;S#? z3z(Bc)v z4o2rgL*#F|dfrS)-hS2Y87%n*B8jDe^1kRGP*d~MtrTH17%HK1S&~Y+H1xt7dMm{@ zV7WXQavL_hVVz!tb)LbQo6EE_QCNn|UwSj2jtXVUm^T0!hNu^GOh6lB003(yAkCMx zF96_l3MTS#OC14)O5LdAJ*X>alYYOmMUYu0uE|AyKNuBHLA14?#UJBvZn2914DON5 zq9|+nvdkg@+XvUX|LGs+$;wr_yw$;&(E zOl8ZKP^m7v@LxZJ#^N`b{FeA_d*-%%&|}NbC`7iLNK94affc0Q`pg+j8wKlQ+R=U` zXn~=*AW%-@A@YdYu}K=+05V!s?RA0fHaeEgfAgEA<(&!*ilU%g;psr_-cHp@9>QUU z`j(|R01&?gY7nBk)A*`FBFTqQ=|dDfq$+DH!P&qkY-$>xCs)5yu`vlXKZZ=>cw|95 zU+}8lQ=Y2PA!=NdI0`5UBA|FY3?EIdqu1cf79Im0OpQ)-GSLqKpv3Ed&hMwJ`oZB< zu#Ar9uHbFaE-zeDw`rNmoyzm8>530Jh)V+7XU19wbqdT&yeeG$LmO0*R#8FiDvi_u z!~r}`N6mE*pFi1;>Dygt6;aoz+f5Bm6KQzP>ITQC7L;fa8c?Z^Ouhq^UHkSEOx%UyvMtt*wbI>`7*MbpqwOlR(3ObR%$;UQYq8|^T+vqAKGuZh-bS6b9oRKVI zUieDT_|<3uBP#kZP&6^BkFL4KxA=#Nn!UMCH6PVTfQAB|sTrW70kCd9>R}ujl8XE* zpI*j9T8S!13o^<9we_F0TR#_(FGIsAnCl~G_aSHrMScaMTe~%Ok*~{g$2wPL%@SmL zhE6Q)m6O=!xs6GV#l<5od!9H{dlKhaM_G{v3S^c)6?esF z_Y?%-hqCK)Wo`h(e}|IE1-A8B|g5&~ILi&Wwq^G^c z$@W+tH6FqGoHnu-Vi%d>_i|}gMs{jzra!t-FZ8imh55&s@J!kC0RrkVAZBm+%6o;U2f>70g&HBviKzQQ%X_eECW5M1S@LdQfm4RuOLxiQ43ep<)A2oghP_KCxc0E!i#b1maQ}6nWS{7;kU}zC$%Fi;i7pX%yC8g;Zt$HHD03ka` z-Lnedl?XKNNi(25qYracCNH7HJmog3@-h$gTStLIRT+229)ifZ&fun!B8HifUB>zA zF^EJxtfx7IB;~n0$28Jm$|7(O($0|%iV}H~2H_I(*a^g(whj-li~orShHL^s1N4f$ z{LoLMh;#s=nr?I-AcF!bpom8+7G$xcZS#P*Gy}U#*tN}u^9%!w86U)D)?SZ=no@4@ z<82#fv@>U{*??D|;8s>WH!Axu#;X_ZmES~}or<(u6P|BpE>H$wU4a$91vbY8l z*BR_}I%=BWkscjUK)Dyd!w8w!qGq5o9hn9P;^{!V2(h=&3OEO~8VQ!wg%?q-+CKxJ z2>U`>0KA;qbS%h|ajPTe6dcq{~}Eml+RV%*Z0%JZFSQ_N~b;FE_$T+OtMT7yaD zfxGi#cgGtshxp@;X}RqOTuTYU)hOU09;S`it|W330Jc1PU2Xg9+6OiNsV~|(2PeB< zT`xzh)vYMeO>0mH_^eAcl4tqdBn9gXfGE|j4pbx0p!!t5LcP}gwwOTI8L~WNA z`4y)Y(VZ0aF@ahM^WRLm(mkpM|HS5s~gNT0oE<#9zeORha(Mh`2e zICH57fCCATF96uy3hBXNAE1HWDuOvvpyMa@*HAz~0CLi%#Lx#Rm0*l7G#6u<5vlBh(auc zDEm4O-AacBi)wZ)AcI9WQ(q>!$G<@sm44Z6Kj>aYHXfZ?)|M6``~Z$H>^P)K-)<6%_k398lpSlF`ayR2&~S&;`6i3AAXkh=>m1WygeJBG|W(G z97;BAP#q@9QyLr61!{SMEsIE{_6F4j0B;$fT0&KrDhNs^sy2t8KxY04XxG|J-N^O3hRswm3Sm>oy~HuUw+I??U9NcuPa70 z4YLys;}h%Ff5bCuaRXAcrMxdIW_|!}@?gDDQz;>+Pl7UOss_3#rRlL58X?V$T&S`w zb3iq;&@HNPiL)kKfiFU1l&e)lhw((Z8q~C@1KCNqoa)DWW<=KC2E1` zz&%g}Rau}BOqg$gnj{Gx73fEPQL>U$f0QUWtaq*X$%iS*`<31$SiLUkJJcH2nA-N4y#3h$h2QYM8q!g|5Y1KDjswdSda#b(3Qdp?&fr?zBC7H*!avu=D z6%<_CAeS!AGnWkWd{*)^ujhRln*1D(i&XYDo%?Kfs=C6>adSzxuLa`%Y-eY+@i09w zhTbURq-0GD5(*KM?kbXG!D(nr(n|S*>8RpC)|J2D4X1=Us+W1z*Z=(WZ_rW+v$6BD zJ*vUUf(?^80?S<`R&mwa)H7*9lB=@iA!tx3qM7BY+3cE1Q=@SjigW^d-b0n@TjkxA zButj8PP32mqc6e34W2F@w)Pii%|)oqC0wp z#X9>N^lqLDd+_ZbI)>b@(3X2z@2@T<7#|+G9-Aj^gqTP}M_I=WITHsU(hZRFz9%_P zrx#}uA?kDDaygjv26QmR8Ru*>paEkYi=gDFw%`Vcudzs~YLp6}#vy2Y)D86M!zoF* zxuj*?I3`HmbP;MHsS_ZaH}auR=&)}UNrynzkQCBxm@b|jCs&fA`*oUcW!opWufK_i zS;>z+SY%uLw)%(Y&J|N(J1d1-_}bLdsh`aFS%3O|0pMXr}pND#{tsRbPM zVEkzITcSk%kjDP6fLiMGJ4U0*FHiZ;{K|F$P}XVeG0JQrhZYP()@-nyj#@#TFnwEJ zaGX!_^G0aD81^$`&dSm*%Y_&Qs;q9m?PVSZym};XuWy@n&0{}OHBjC+Ax9N54|hZ~ z$o%Y$1Kbkl-g0i>N__f##zl%bpZ~4Cu>s%WZ9Ex8Zo=o1Kx%0KRBUpN0`Cu8AM&Nx zjwZj~4`oPg@JJ8Qh6xQU|R zQrhM$y6+F%vNNSL;H|RK%lLd_4jpDJWT?NS4FxE~qmQ=sD^vMZ#O?-c5{Xr{M}p5w z8}TN3dcIUXS(0Zz*l^Jb(V+A>G(U~>QOZ7@)9_s?HG6ThELabXD#s7mHCC8PMPwQe zjQ2e;wnV`K8t$ApNG{~BV0`eix;WU7Q{)$9EEB9TCdx57=|A(Zh^iD0^03_CBJ3$S z{ZC0yLT5*@{DCjJZx{1QbysF1dR)}r5!`~uh%!f__v5rJ^Xvu~SifGP>;-zh?X+AG z)n`L($(MbVoQrQxyYwfBQZo0XJ9$9z z-l0s>c2+yF=8y@7!HJ*WueDa-9xUm=I^U4?6boFe5fO`~fJVjDh#`sXV>*IDAvv?x z`!8r>K9_e*_38Zww<^2I2(1&y)(FYAJpwot0#sIq4H-DHi{c!>8bVRO=Idlsa!-!x zr3|x}dq8Y-9Z@!i1hX9z$n2b_BCamx+1* z8?^>_(qMfehCTo`^rpEwEI(*>uHUYvb_C$tO-wRX4UT1 z<0Uz)k)lDn@sze`xA^th5tApH;dhNZConN|(fjMPo@n16x|&(%77CtH66GY?S#{3i zk`&%IA5EE{vBviVHpf_ThIFOL`8vC`M^AAEeMYrWi7o!GI#_@J{$}r*%2!9fLgqcNOzU&`t#B&Mg;Ftp{}@`$WnAV-{n~pO_lYR zzjG%fJ{jgX;2b7o1rM;|gx+yN=jVOS{acg_HXvq7wgoO`YH2&~R4d(Cw^yxJ*f!u( zRAm#H;ucBC2@mp-totQ&`My#NIr41h9ZvSx%&s!XE~QYv?~vT{UAv21cZK%&2K4Ou z9<<{vCn)YTOtqC|9p@Ie;ilHi3Ko0oH|D|q&D&Gqz9nPl?&RR*kdR2ryf@LiDhBf3 zPUY@Kge(mB?RuX7Mse3$H?QA8xn~DF>s)QzLi1t@^5Sd@Yw?K>=1)-&96E!u>gw^% zy1)Uv>q44Gi)Yd0P(NM<>v?~KsG6fZf6p)OXmDjg;hmpucUp_BZF2NdcfL*wez)%K z(C>8?BF%lN!#%#-3|3cxZ-0ib<0aqNtv0V9I}%*;?zfh{87`HH;scNAg!) zZN~A%aWQ^Vq_P+I;@8azqMpKO+x&O&W6%Q1HO2|=7k%@vyn&VJi`_M);oFW$weo+{k`1Lbo07`!DRW3 zzVF%ogU>V$>E2~T4-{`X(DK<(?rqs|c_c{Jc71WOQG4I3v3py0n$RIK-g-mcwN8cc zZw9aZNnf@N3BIqjt5@f|EBJ;`wK~5cbz!{rPod**`TXqkEfdA}D@6xK--GidhJPdO z|5^)qJpjC+HLpbeLhX~qxbGTX+sMD8Xl%k&vHIEJIQD`N(BW&1jIjK#Lkumro`d# z2ipg^`*ZAK&lIt4$LN-MZgS2X(YqN_N0+rz(XaLjMh2;jS{B3{O-Sp~2*->NhqcRP zNS;|RtWJJeaQB%2m0S9&(@rU%mry2fxh71jJGZ8QgWDWwImnqHZeXdrEm(CaAEvP)S0H5fw`0QEqg2I0#)U62SE=c-uOIG?kD5+ zwgr2+lH(gUFHq7pP@x?^EEP@JnvZ5YN)MWyXudAQ>OD&-w2p(`W;Zk3H15hctKn}Q zAH`irUmg5(Yhpo7Brjs*o)?+%i?q_o?%kTJOIt8sNm?)!alz0<uGafN-)Gz^pAGzla z?FTr%jz9FR^ZxP$(msVb=dKm)Zs>V46tyaTp1aGF>*HT$ILT3|%_m;B+au_1i5QSfG%>yv27O>8 z4Eyh?Yj!_)IsBjHZw8#7@>xqSpO0@`ZX7~3)@$6Vcnf1<>?1E7I}cqv-^4}?nq?bj zwuY&7eoTNq!@Ga}=5)TOOm{wJkQjC|K{S{YFOC{%y`MO%uY2#_ftN;t>{0#1{V0X3 zj1N2Pe^w5zSzbJ`)^0i9?fJf<`Da!7{??oHo=zwI_b}*Cgv+O#?p2|Uk}U)>AqtRNuSNMCnnni=i*o?qjyX92i^3YcTrx{w8Yb1|amtDBrlO8q zx%BPIZZz=a)N-1Up?|W)RN~$#XM}F%wNI#1I%U36dRogmv*1pf!wf3x3b%qqF6CdfF}39q`Wn_3V#6=hJjMRC@gU^Jl7D>`R8 z?d6uIUZ_Dh)4mVcA`_2(#^0niJi4tPYrF?k5G4<@bO2_-?rFq3C~A-YJA{g?lZs$1 zi%bzPg?9QQjp@#FijQ{gZ1MNC+yTFrpSEBUOL4$X{+&uc$W{G~ci(yuT+eze&O41XoR-7#X+ zrSNzDCEHYJQY__cSn{Hcz{6qG)Z>Wp@AFCz`MD8M&Q>&lfeBxn+r9$N=)0v+$IWkX zqI`;d^o*9}_*2K)dmj02UJ%i9=7}NZb0XO|K<&C=b6FM3$?rQy0)M^A!(ffT)saU=>6dC1op zmnrHaKpGHW=^gB|viw<$m%*ZmtkIC+!yf_}J*!^{&Wc}h4XatGH)A6)PYCDCGHM9n z6!1TdHTe$AHgr}iM^*0#)Mubk5#-gU+jz5tAwdl&PmrLBlO5y!ijB>^R@dBA4e)lM zmefo7&lM(u$+5d9Vw&}o+Y~2#53;2)0lq-4hG#?80K)w}K?Uyt5G~%(GHWtB>I-T_QRx0`-u0-6`lH+_=W~RO)2YhrK;jxT5 z<%!7S^K&p_W_u9eW`S2$j>10#2|Ap9Q?`u9F=P@4w_LY;F}A@qYkq+V+lVniOb@nVpRSoR|sWGH~vA|WPikE$Cc#4QrQH*nmj{e8wO!!tz2W9A&QlGZ{>cUeDJrx zb6PX7*XwMhhX>y2nKtw~i$E$o=>RR6+Ic3?^B1HqS5I$-n1Tc;N*NlO5WzLcB2^YP ziW6wPxS4hY`)(oj&ajpNSMzvM&#iZI1$F--7bBBYAM~*jP~y>(zQyU#miFZhA)c&~E>jX1Hp=$fK*5>&FJ(MBN?? z)hO+d1Ea3+b8LDi(P0vVi=tRY$E25m3=)GLmrBKp$#K{3vJdOaZWSQxZ|O-Y9tc?k&feIY}p_K9>B7Wfjn*jRA}jd5~Lp(GM$@!>1;I( z^%dL6UlNlEA$myCjgSD6Eh-7;nj}pqFTVRTh5vG$*BezH^zNB2xzjuS7pYg_Y$Z2n z+5_~pSFm`&a+j%q`ioEO0l;FIU<4Q7L5IB^$g&is`p`gfTp+U>{PHCzu0xIE0Um{& zGHA5PqQhiXpb|isgm9on1x*t{6PTwYbY(itvRjCv5>)+Yh&lkQI@CQ z8jtKh=SHW%J?gf4k;pZ2a(-N>gUI{6AYC_adki;X>#+!$2<(qLBB8^)JHS^5{s-2- z>+Zc91dAn_4YuHJOo5*&K)%1!2Q`4vK&UfWUjw}7-3t%Gibv^Dd%q&tVg2)KQ87;`XK&~U(oqx%ws4`1LTGnw)L*$Up2a|;#3yX{ zU@vl(bgxKTly#T~NJT;}oCcem0mn$2MmV756-efhDjgd5Tb^F2C9;<9xfY59Nb6@z z8Mzg#r6v567&}e3ytX?N4%5A3NO%e~2+yJ92WXyNhsS~Or+AccfnB!P#5_Rvv893c zX$_f}SnI-4Z30kNS;c}3wCqre1wiy^APOLU4*;Y_0VRu|;dF?NQKbDDO)UsQd!~qZ zGwDc2IeY@@1%SVvhDD0lN5pc$QtrC0r!5VtT1wQ|2UQLHSJ$o5jop7?(F+%u42_S8 zlcL(`1XvKEh}HqI1;WC(&^`3yk`8D%0hV(d8qN$2UWMfGEE@4SU?4PWF<*{|Kk=_z z)JNy`RY&54`^bvs@=QZ_6#mT%%?{8Wrkshm%A;pLEQaP3#;t`=i_R3JGGTkenGLp+ z%C!U{7`U%77k`^1&HQBg2g1Ithv`>Y2~xcv||MDHr+677I6$ z3n61mie&6*+08G}-pXxRR&6?cxP`_mJJz|!L3TMb)dj^Gp=-_GTKixetj##fR#+q7 zk-n2qd&|41I}@PKEZc*tQp07$)2nO}j(A#aKhG!JwJwk2L;qDpPvg*zZ8+%=^GhOK^|nfi}7CtD*cFNen5TOv#op9ZxV>`h(Oi-E}e?(`Yq0#58`6)wj^3e zI${qTgD7yL?zKSdXdu>|bV~BMWZ|I@dR0oOeqM)%z+Zm1@Zx`YFf1IZ+*F9@cGM-x z6EpFCR`P2|)xGy`M;2e8n9rav z6HqstRP0NNayvL5sOP&~&-aV5*=tSUv7RDz8?(pN`7M@wd_BZ>U_cJ zfIO)|k&X%873OYM*mtdEFVuk!cM^jam0ro5r;kWN2*i4LI#c zH~=Jv0~(4d$BtL6ub&&3fuH9+T>khFc>=n+9s7WnCK0Bg7|35?sIC6ojZZs)z1hk^ zD&SoHj$8a-gP3Eh{AOc8*9259MvyK9r{saH0AST*n4B#bMF287p!>+jP|RAR-b#IX zYM7``jsluDf-t@OoKUb@Izoz(&!v^KU{J6P<_OPbtE4*&Hgl(&lIAIb(vt5V!nwic z-5vxOD6ZajsT?sH9nrMh7Sn&T&d1=f2_-^!Xs;No`&V{)E9}{UB3tI!-+Q13>cI|x z_%Og_M?mPz2~a$_?x8V6ccUqSj?i^Z5-I0+@#5qvV7sL*O)+jCg;%ZE?b3I9-{@_| zo7-+y-EYTkufcXX?oM(`cO>ZCOU*ru$m9*ivMh&>okzp&{W!2(upPW|-aHgH8Z39} zQupiQ`R^DZ25lF#i+Z33dy04J&nw)`)5qQ5K!V6bI=?W6*R7q^tC$d*^iM8QZ?9J+?%iPbOYpe0Z8tc1q~ABUj%02FsLQZ#5M z+C%B6gyS;8C?E?AsHPUm^s2Ive|es)8Oek#zqtouwcbR?1>qoXxU#>JvFXp@)6DW} zE`)d*bp?n1KxGIfxWeiyXvvS5E|;zURJh7j5}Z0-eVBhm;=`uTfQYo$$B%>2Jdkk* zKPeDVwG~{Bi5x{jK?{mjo*i1`X~Y0qLnlavj`i4RQ{ELq3+9PKvfxIujTI9lAwvUCf^~VI zW6aNF9!U3i#7^7`RVnXZe0DMpa(j6`ZHc{yciHO;VapVf+o44xw>FW9Glk_hDgP)m z$a<(A6kM16A;bpJpvNfKk3#HSUSV$XyUN59C!*9*=MeA`GeU(m!ic{J*~;L9%$?>W ze9(8v4iG*PMiK&KxFEj{>5uRloecRh2uZaA&ey^II|=ZSS{8oysdXGn0Ca4n$LUvU zafL{|4>*{G#>5V6g~}3&3btJoU*mX%g!J#e70lrXG9*89Vpi~M*F~PC4?@_oH{YG8VF~hv%u9`Uj z)ISpZ-}1@Sc>NIbBO{C@rIcpPisY|`mXk?;##zA$;{|b%3mbmj_=iwGS~1|}C5+M* z$>wd#s$_JX`M$?`No(KHr;U(z@ozgHjh!)(OrD$Rd{j&|@#_g+il=?_t}%;v$WaZ9 z9W&f=uoDx&i7C%Ey1%%-abr}8M7x(}nXw)}*|0O$c=szsqi0tzq#~8&vUDca@20mRslouyLkY8WRG1K z^>sK)!KCKg)ri@@4Y#_`=bcij*&}n8OD9KyJBJBPAFoT1xGuuv)GT1xaWr%czY`Dd(;)}bgtR!>& z#>ys+o+nDxRb*sl#gfXd&Nz$6D>^jqj{yd!vwIhvxvugJV0}Az)oAX-_2D^+QyIvG zOT~3H7DH8i=2{U7BXcN|K6-TggRBwW-fMaue zlb;uxbSK1}(Gd>MmIXx}=a@|S1RBeZRVVhBk5|u{mScA)>TPknrYVCl&Y(A7$uxPF zJh@Pw&V6-v+DyKcK_4|&c3>mFSU;+cpTA|`H8CI2m@$hs4+qRZI{1M7+toHtZk_Gr zdh50o!u|{u=~Z&4c{*G`Vygws+55`X)>LofHscd0;|9;*&xMASi=G47!;N*QoV1$O z0v2bL-DpMmz5Dtd^5X(?lXg+#^RkOIMpzHtg(XRm4jZ3DBJDb~=hicCM>FG^swmYf zH*dAgBCFF4;xAbRgK~=VgXB#bPAjU76n6(F)|=-{0%{Tkk}HtXil9Ed;_H}H(Id$v@q&U_5hQb zmp!&ITWCY)Td!MLWdIAdc&@UL`Ymtz5Zd7dC-ijF$$drrIXu>wVBdeU7yaF@L_f}s z@?X&Q83?(;UB32JpnhU;#hqlEIij!PQ&KeNOvQtyXqQ%-t0K*<5w;k8TH$mR4NymL zHA+MV^ZI1-IvS_{bAgeasmd6uoSps*3EE#YrG9}9)8-f>r+`!lN|eKnmhQcXnDX6H zm1hz^F9i4EN9688|Bgm^<0UtXY5_`S^Z&7Q?*B~p{~zCb=Yzw{VRIgaIm8?ia@gjy zq0E^gqZCDrB$cv*!yFr-i8RNM3Q;Ou*XB^@aE;WZGg7Imt81NgU25NbZny7$upeHp z*ZZ~S>+!hXUmDrcM$a8)Rjmy|P_Zk1KWk~I1lT+J>Hp--Ri6;b1As$NO=JYy6t*D&~_BFdfumN_lB}E#Dlh1S>h89++y#-k=5D2wVTy3L2kVYH;v6};T z{jvadE94){VRTe|5ot!gV>qVFATIPSbE3h1S{XA{hX(1$v_7z1wpO_ZR=A$et$+PX ze*UqXhAmi0z<;73)84+)6eu3*E^|Wu$VtZN_sKNx1z6}*P~kg;NQ|CJ2&z+vrYKo7 zaBE*RMe!FbWSFo2oW;kjE}&8XKHOE_p8vN5whkoF6{d`tG?n|Dfc~MI_x7YC)yx)t zb=UX`2hrQzURT#5`g5th!H)aE=3E>0PlLy``QBz~%)C+7`!UEBVuxDJ!b)uqrHCwS zQDY+wbh)k_&r@lrHCF*)fHTq@Cqr7%LP>8gx#!1Bk)MPJbPux%g(LPTsQHsxX`plG zj>$cnH@%Cz>ZW5md7sGs(Lh@g)s7sZ1?5~Htsc4G)MESrle?7}80Us}d00UAFb|0$9~DXIi8KD0g<@6{@V*urHJQF}pKwzK!y$JIMhJ z!0d!ste}r4OqZ_`A(mYQ>YqXdum@%yiDds6;>l8nn%4Kf*zGl~AXsj!h2hZ!vki)B zuvj6&@zKZx3IvH}agldiF<7}uYY)O%N<~m}_73$-WnM6_;gHoqa*5Au4$KEc)(z?( z1zL_spcAF#)4FW)Q%`)c0p+)iJ;pR~Lxtu3$$T<)Ot%vR`KJ|7i(Zv> zks?q7-0gS*=(m_vu)#_QHxhLY23g<|dO^jcjD_kq+1Z_m5&c2-W3lvZx~aJnqHvnF z{%o~imq~ERt+)>LGk#yY>r&o{i)fgTywUb*5zk3M-Q|9hr}HotYZP^<#Wt0$QwA#b z_#j1yem>C81$kF9b|BunGW2#6$6ivCFW2;Dnz$NkR|U)x)3~GI=LQCQcBJ;ihm)g{ z>RY-d_uGtuOV=iPQPs;qJ?gCA-->)v zKl;Vr{2NErZP~#BJq;@{kK>|q*LQ71zX~pv*Oi>dL?a>BlT03U8=;b7k3P98U3y@d zHonp6z^bpadGX}UiJ^dkkOYmhGt7t!DR!uto3XR7s_HhQqPI-blIl$ zjDW_&E$)=nQVsog_lpR_63ihboQ}ZxPl3879BQ5H%r?LDJtk?ziu2G)t`=-up{L5<7V2=Tv6J8%)m%eao2vr+cO=({A>07+^`ZMh=AAyfKydR;V6ypl0Z0Rc`qAe5 zU)w1aVfp7JZVMnF_JJ(0)GLqO$r3>(5fMi0nNBZ?o4326fMhnT_a&abtANDcxAa{( z=Qas>&{D5-e2;a=13!|3o4}B#@=9SGUuU(%unSzc0H7E=GFe42hY*E4JoegifN!J# zm`{vxauD9V*@XiBenhZt#l(UG;6)nXw|0JYab8TxD*E{)z5@-c^GZQA2~1ki;;z?Gjga@ykD=UAn+7?izarn)~wj_LD>V z_v0>?mAkkLN>2#w6pg>3CSv>f8Bh6*d3JX()=kI#a*&Di33%J^Y%3sZ;PXLeF=J=(6NfEi1?#0o2nysBRdd%%B#T zuVBf2O>~g)`i!BL`KEhXXb*zl!yl(+Jk)1AE}XnHq}@z|lF3(=B z|CbD~5@X(}M)T|z2hoW3JP=jwg=6u7sgnjAo_*J42Q1iN^``JGU@UHGr|^lx)1d3% z?8)P)D?C^6nSaC2P#~AqXc7&xOHTiZ)?p-cedvQ#1kOgwt&OiHmT0jr6%YjQNjCu( z(2FX?&;R!3KZLLCw7n2yN2N=^y<>%uELa>{ju_j4<+Dy?04 z*t5G)kVmFuuK3 zuOiUcJJu4uZURU*4>H7+p^)yDpgMC8)tO0yfOv%*$LY}NcU&&Od5786uUa%q^tWR|F-a}ere@u`!FY%yVNaX-qk$Md|+3;QPOboqxl(zNA1?G z#4n{&Sq;fB!%F;VDc869Q>qsifwq%_^(MJ4 zV)Oyo^=nisKM@8L;9UM6idA0>Rn2nD ztotuss-y&bq|ln$2f8a-es}kUVcWWESl=!+2k^b87|G+$eJ3sO0Z#X{Lhm(RE%j*x z*}B{LmR0S2=A>|iP#6NdCCOHF2XF_FX@CoL!@uW#pXZ-)b-(emTxhp?anA6HN#3Ki zKE!oCpOJPVVL@;e%Ci}hlmo9G+toJGti8ihimorcBbwps&uuCKMtdWqX<}UmT z#@ir5y37OW?!f1bb|P=UX@T!3a>J>(CzPgwRsXYEO)8PeENPa=;#(4^-PifV1#!&` ztCbj&^0&dZ<%zB16BkwkY7X&jB*HC4sCP(>KC!T}%guYDvDsbVfxNb7$GQD`PMtV^ z+?6dZdpdZo;aV%luFkA+ySJgCAL&sK^~YyJyX%ZH@b|u;yhWmntW|WxHa0Y zFsH0@4=RYuw$|>rDV($u7B;{dqsk{QL!P%u1a{9WMB_^d*Z6Ky0Y$#SRuv~)xq9{` zPw6y&dbp<4S;BPc0@s3*OsO4Suq5VS^YA=CoDXv70y18DnMtjqLivnLhy|BloH5`= zk@hc_+N~Z>AQxG4wO?*QzpP=wtB00ttsb&P=pl%q%FL}YF}OqB+@U6-h5`cM%+^9) zD^**mCJ0IYY;`PM?~3hfUIzkCdjZd#!uq@+;J0@Mbem2wpV0Nnl%746*9E!ky9b8_ zN!6`!^Uu)f*mb)h8&L_Zx|h^SA$v{AG9P-MmqHAYuRIsTrfk9bIDsjZuhOER31Djx z*m&}412y#Tjr_8{1WUqw?bXeejEng57lB9M@1M6=HTwSX(WIJ@V|AjlAto`FeT2__RkUoxoh3*p4-70@AyD9xyL^~w&EYMln#&&A ztqSyGZkRKoTIR*iEDg6*lxQE z+71h>Zb6cb1XOVmHH}Zq^YJG_{MmqjaX|M3Ska7<{6bjG8|%V!KYr%@H@DiPjJ|Tmw63U=X{ZXZCQsE ze66XnW$|y#fqv0(NHW*JyV;)OtHdqbEFjXgDRXD5S7t&=ga6t+q`$#-5auhNbb18| zUVsF5UUMNAa>6`3C?4ugS6w-W>`&->i5jX_cofP@6D|Sw17e#7Irb8`NGMg-q6EJD z&hdu@Ab#^_{-tR!alx^z-Jd9$K6`M)02^QS;yv?lg$Y${_9&!cZ$RKSlq>T7rIHf~ z?H}+LqLRGKhGgyL!@~de%knRmm#&~4B^o%NGDrFS>D=jd0j8t;oTblb_kV~WN{}{u zeLWT3O!?P=T-LqiR5wnmG?;JB0H6ExUKJJlVcc{@Yk1Q0)NmX|fGn+K9eG(5<0qnY zU-GPz=j`c&N1jT~*auezySF${A;FSD*jT;uoSG-`SbHDevybQDRch^CNM&vBD&^Hr z0;{Jr{?UFRT%Ff;=h605sVJ{qInzDu0M+;Pzt3LSsc@{6!<#;r6bMUd(~1vwmE@## zkmg~TNW`8M$SFX`sEJ@MeV#y{_AiC=-lhapjnXo&Ma{H!GPO;%{;H(SbtI>f=;l6Fz^9xf!{$FYl&)$d2#{hTC2b z!)WC$VV0bckg<%dPUBR=2nq6Un)q17#8O;(S^&-BRWFm%P{2N6X&)X3?QFj<%a0j>c_E{FpJ`P&}rw@!^UbuG2m8sf?6V_@;!eTfcn}iuZK=Hsfo~%dF84G!%_l zq+*ZeXmo^rEW!}6Y7G6%&}UH({ySVg1OpxJrxlO>G|tuPY1gi@Vzq|{kQ$fyw~AuN z%_fNt>oFUR|86}w-}VVMJ87`h{a+8}E>Q9p>-Zh2c9lmhyWApjJb4mD%y$mZOQQBi zm3dt`6{tDFd?u4d_nO@{3K z5eO~`QgxT;c7A%(iqbFwCoL-vO6=NI96>YNT=2R6I%BkmGH1;-+3k063+e2|b?;bI z&$(a4k=^Fp#XYY+^A`(aZnXSpQClCnAjgsi9ouCXZ`aaqUgYsUofdQeq4v-PP|;SK zp2A^zt*(laZA2yHt@nKyfwNJA>Jlr#DWjFJ4c-&2k8ZkR~_y zn}0Ajx=sdbwun4~+wC+8CLvwJFA+J$HfoAdzu&L}@W2YQ-6m_A+Sv;b!FV$I-O4R! zaEl*t)lLHxBGB?=3CeloJ)M}C?>TH6?XT?8{YDsD>P-!0G!Z}_b$?_>rrA-X4qAuU zOQt$YCB&If_1%54)88H9E)2{D@B@?Rzs65#G!I?9 zch^k#nS?Uxt=8DH+Jdf|9k+^@L2Nm|(-2^x*GDZ7G$dW)(>bu_Y@66x#|-jMJOn@7 zC;rqR)0&P%EUT7EzAMqxnj*3AkwN!;Q1-!>?tsro<=&WKmpISK$1%zofdQcfktTY% zDJ%jOTuUlDN^H3Bcwt>4uO%XC5v)6kEhf2sF-=}Qv#I|p%%^rqdwYc+#-~LC@6}qI z#W-hG@(t$Lrz%nRfn6LqYQ&F;XJL{^a)SLjP3_vle)%kGF9>F*hyI#Nd? zP8;1$Vyb>}405yO@VWKdnRmn!(Yn@`lnW7v{f6};pQas}mN447sYNevQ|KrOzbO=) zWOj^qb+$5D&6rSPfKY0SQs+t2u4E42(`)2rFXH^-0LrNEdypU z3?g}~@-&8a3rwe9V*MVQsVT=$V+PJzxPP}WAxcW7ey$X1N@%@GBGM|o8;bN)E{jY0 zrCTGv+|XSip5A^HUBsN#{ry`E(v@&V5Y}41lWT8ukd;E>ctm|rv(n0*kHSM+u%5$% z=(ip_wLo(Of6CHMpqF14%;pw^MphUI$=a0UVeK?3#G0I7xJ6;0VgFIh6+}f)6nznJ zDR4kH#4u)o%e-B3#AZl3;rzOe2y(lUxx#b$Fje)>bJ)o|Ns7@g=4%#ePP5V3B``x# zNC`F5&e*ooz&nm#uqxqH3AvxdqAl1j4XE`F5ICF&0_+z}cVPkeI1}Q^(d?+YpwoWW zBOTpFLjdziP@;?r*M7i;u&SIlS98k-%-S+vJRY};2)|GKvDo!?8uGO1@HJ1izY|*y zUHcwSbkN02Bvd`$m7mqc1Ht8BI~5(Dj@^YAplm=N@-CGGw^4oD3RcdEJ3j~G1FC6kPWTh~^A?*;SH!-O87luMDC8 zePTRU^!&zK-5lxibLZ0V{N!3cRv63%eOY$q+{L5%XQ=uyCx73*1~$0IhT}B|VIXjb zp?k6Q;_s(dquCAFfBV!VcJa~p-BBbm@Fj49r@y&wfO_3q5E(@D%) zp8hZhpn`zjB*QuB9x4dl#KUs|I1&U`Gyj$e!oorOeomj&HPdO<((#hQ;#w;+sz_DH z@0_Zu2Oe(%gl_)q9cuNko=`m1{|-0UP#FK-h`&KRaZaL+#eaJitf|V=Si4)X~&A(!irU zeJY^NrmDY}`*LZ&{yu}xr^O=8f+YY54YXj1Yho?%Jq!~m!wGqR1;pl;|&T6tL}r+VpwX(oi>&*M&c^f1i2nPwJmL8P=>W zB@4sBq}+z;MxBxkTUsuP{qxda`L0ATsWRg`yyxrD1VZAzuQ%(QW^`GAiBR@$TE~Z< z0_(rq@M0dW0;;LMLys)`P^X;oCD39PnI{sSKl$mmVRth&L#>$#=wOpf(ozkhWX3DC z>qU=xSp0Vjv@1EXzts38>(NFlJQEhbltIQCtLPGDa@d&fan|FF;e+^z2cjr+CbH1!Qyw zaOj|K*g~TiM`J8$#`b&@d+@#pn(+=gd3e-pZrPUtHdkFq9-S_8MFMIdBi9ZPRk~-6 ztM6rKjs~e7c5$vta4GFmwYGtni}L}ga{vQ573Kvxf@^j4S%e``u^Cd|3{c?Xgq2C$ zx&wgGdu8NY9B_O5jzP4HXHMQ{#nW@|vg@L0#>Eh$(kzA>p0&_+x=n)a@N}gBLT3Ub zr|LEVH`g_$wYHZHkb^lug>7<~golmdHhaP{6=}yK0yM?ctFNMKZDL&7{ajcxo*gPL zO3>9+nW?*OQwGhLK{x&a!cPi~3snw=`c7xC#hUcdU>f_UoWboP5GVBH)SCxD)KART zQt7Xsf-AD7DCtVYZ>K9yNhcO;bkH&pXyH+EUNVWe=qD8YIzZe|-c_?1b{Bw<#;`e*-y-1s;WC1(txN z6znVoTYk|t;(#5wqgFdqtTezz2SOo1p05dv8Dowtf%%vFzLR_k6tWwRF=j~B*2XXj zz=S?Gb4T_+Gsc$&_!=e?3j-ztzgz|hYq(lDK%>JG&>ToCj2wjRHCW+7x}vVIlTJR^ zoR`5RMa&FOtO#Av7I5im+MZf7n!6aXq1}(5`Z-V1 zNrlY@EWdSYs$ZC4yaq8}8*?0y=@}XIgwnxxxahSp9Rg23ulAEWUw=6nng#+^srp znvs7X1?#B8Njg>o%S@OHB8lyR+e4JQA&(vpHrSc0`%{h9Mo*i?Cw9%Cy3o7%&(^}v=o zqq+Gsy*a={tu$tiXDmq@`UTM>(-Gfq>b*y9p_ZGugSFQnRuWTFcQBT;DVf8=z2_cJ z6c%^yUugcMPgc^@xzqZkK+=u<_}hR}^G0NxO#Ji-iL4;u2jd?Pzvr z9#n=qEvgij-AylI2H*KTB0MFA7kENjm-rV)qGH15Fmq`7cmAwgYp(3w6F1H?RR9&V zZH9^+MrnWQaRPlCr;a1{%E40$%>V(yj9HvE@D8WqORJl(A+XZw+QOdIS3`NXV~olS zQF^hbn%>Ms!6hU=K6M7%zMPk)HKM?O*9q$#McZ@T>OU9jK!IXB|Z0Bw#|6 zHBxC>{`{j={@4YX*Q*@`4`RQC16P}~^_~X%wk>OG>54>?d-PBjp;N7{54Cl3u9AkR zVame$!LSWFezxr0nrWk|rB3F+PfF=d;w&v{s8hwb&a#1`>4o(g#3@vJ|AY*z`-gTE zPnSUZg_7x!roIZL6;`FXJA^1!{k|8@Z`3vfB~74NF*O{*wJ&a}kF9A%NR1a@ycTZ2 zK4?I-J@`lRuH)k_lrfizLbFw#BL|WnG-@j3+2*@#;PQzT{!SpuhPctk^?#TWz@#;S zx%L=|0464YHS$OK|MAR(Jfwe~`Z7RNqpRmhiyV1o1in@R=o^xLbaJ28EI=gCHRBqw z#614NQOg7{5j1KV3NAm$w^)<;l143a=+>d5rqbbxEAD)yjC*DSGe;??K3-@#E<1vU zY>495kMNHQ=p~k;zBv$=H3(F_+6*i3?1DIvjf_LVf+wRSIb$g}k5D*YWcLBr6r$%^ zgpf;(o63brT*Iai&8}JqRA%}^MoJhZQRyaX*DOH)TCUApUHf6_J}P+wkU*ZtHUIS` zc-H*~L@6QUig7ZFCkv;i@8|E_%iH}Q-KPLvZ|c0Zl$ZyR-pLFWG0 zF#G?#^>h(j-7F1?c2Z>;1M1!Pzk6EhTq!bGA1dijH(&8}VCUH;P7ij=8fYcI>~@cK zKRBoPitt77bwSsGo>q7$+co2EW8!_=UR<`M?y~g>>_|;}@Z&3x-}fG>iTX!x(DDJ= z3RS%Mq%`|6^ffY7qj{b7%tC`8ch^!)qC~p(CbhiUn0dqKSu%9sj(r_sT70x&aBraGB{c*;Bk~?n4Gd9#d7Ff zN9;0D8K!e9*nlR$OXEpr z+Tv+I>lrRgrRWT&&+C{)rmN);2)v=2EmSrM7H$x*Ip?NP7-I(vA5~+?G7P_vv%_Fu z6QYRfa4Z>0h{>BdtrZ{o{ef=uFUX>ZeDvcVc=3(8T?Z`_d4Kw`pq?z8=L!*j#Ct_P zM&(r;xU1n*Zd6A)?UAK%vHi^&e16pEExnSV>L3$#jnY5J z9c6B^Z1xu zIsHXA>s9ILw7@wmDJEv6k1r%yJ{Fv?Kadq@`Q=l!KmMX+4dTdBI&!Ds+v;1-=_Zfy zsFrg&k!p@iofeeq1XVjwmrby5jnVIa7-&8@QEix6`sG%UmU(RkY=?nAR;IDFDT_Z% z5@*4uEdMAyp_{qF=BWr$)q%K;TiHFqpJ(^L@rkRlkH5u^%RZV0p-1~~xg~|auxecR zSg6tNeu<;WoCC6)4^qRO9#%tTu$zSRrfu1#`|X|YnlIE1z&B2=WkY>xl}_1H=JR)O z_dGZDjp`?WG7Djff$@Nzd~p`(Ldn#rlI*J!v~zyG-)T&eH}N^brhS11Gho^elvzz2 zUiC_SH8@Iff-vn)9>dFqNsK#GKlV z%u^KV_DFl}7Lt8%-7kVN@OCwWi*6-9=z5F@nFE=I>cugc$`S6VLHR3Gs}{p#oMlu; z1+=Gya4QLmb~t(oRWijY&#)f)<+_aKh@j*z)FL+`Pv;q@*s6?Gc%bm$WU=ctS-EZ~5C2U3%D9Vyh|O-*2uNEB zIOS&IIa1^%5Z-;UTSb%iC#G6Y)|zRi7rN{KIJ9Y#Fn*_?{R3O-q2Ph8xOGDIq%fS#&+N-|Nj*)Qycj(T%FWStysJ2ye zexsV{>Vof+DS&BNEx2W}G|EusFQU`QqsCF;B{qXH-&53yaq)o?M&TmK;;LH15+_=j z%G+eta8KhoOJpqM@dZp(dEOsq>}hM!rb?l?M~aN^0fsN7aMNBz5xpWsr>Kkn_bg;+ zjQhSvod>o|=q|C1TGWuQz&E_77Mb+68giPzgx9P;HjNKitiBUBIk#V|&I34*#!k$y z#ct$J`!pw}z;XkzaN37S>}3boqs>B}RlJ-K564~mwz}_TL{M(QBYb>*K{k>niu7m#^lbz)2K^@G0SK% zdx9*qz-H*QEAjIz_$>X$HXru!7J+CNeuXIX&Ec3uuRtEYqt=rYe8Z_Yuz{#gn6YEK z7J~sX$ZJD5FYa`kD$F$cMGAl3mC? z8UI8m#e!bu>}eB|^h@U-y~oQa^`%HN&3J6MK^LfmVpQ)EAE!x^v{xrxahu;UfYS4T z7CYwTQShfQw98b4Z~jTMXwLZN5IgMEI~~coI+J*6slG38^!6k0{p8;*4TmV{EAOdY-Xbpo_ywFt??Gp2#|+Z{O#HW`?KP!h+j2jq zOBtcN=bETEmNyl1O#HW(WlO2;&kWrux$5%E9o?ZwLA`DP+s4pV5UN>AweVR$hV}XD z^^HA=li+i=z8Ad{CLiwk;f(t<02t>u+F#fy#NSgq4_ENKds%^wDg8TmP1}vk!|0CN zo|fC^C2OQw-^=O=<-8l3*3izKs`N<2D0x1+=cn$|7}K|evtpoew_Yy ze_x2ry^qKD*YeSH*3I&^>O#kb8~0SQv-{&GOr&;DH2hVei9sTbo=@h)T3I!*y}jcWGsD9 zq<(|~%aTL77SyJQ$h!yON2His`7wufM6DE--x7(`GU0>lN@lVP9j=XkaZSe?`PtE2=qr^({_`we{6>b zV14OWX!66oPc5v&L{MK{zmPY+B$_Zg!Ui=+eUYo1>5ffPf{s+J3J=Y|N)_0FTP>|)3!xVnTHRfcA6c*fwvU?`y<#Gk`_a1< zSyG21i28+_KMF5?)2tzsPINgEHem04-$IOd0dM)Neo4@mWnk z0cG9!MZ{76!fl;NH+U@ND~z1V-Z_Y#rD9Z$whKf|E(@MXJanNC&4R&eC5W)EJA%I; z#P?kb*k+d1h>(>8$#>B*XJo9aobvOapx!J4r48v8@At%{mA5;ZUn zwZ0S;z&+vm&~~5Sdf#+kuYg*m1Tx5F2T#>jm1wkcp%EVHbL_fD;l~r=;YnAKHGN0B z!|PjbWv5M<=)|O6T?}^>1?~G08Z1BLMLU^WdXmkBTggx2StORI$(y(nGyvRWVv{)V zehT`JRn0JB9yHZ#EuNJGOaWs7acJNK*01dG?oXw_IJv@nJi=cUO!%d%{``K!8 z7J?}{-a}L$5y9Afu!F4Q2Uvk&Y{Uf#e5Yb-0t<1N>Z`IWZ-6(z<>CbN+_{00cDD@7rzKM&l zO<>1ua`=Q8&hFzTu#af;`=wc0^CPhT!D0XIBuR$3SE~3D4!}Xkx%{F#Vm;U!E_#g-7jb#tkLK$523RktF(S^>K7YcPL3m&6d#zP9s?-FE` zJn%>#qMTyICa!;%MfhosbiC4-D0dWqwwin`RQ5q^w1HsaNslb}-A5;D;4oeJkd>6` ziWOHmrwpCMy6a<}{4nJ7^{H>o-)Eg2OX+_p$Iz*}4!qt-)HXb?MTtGIeP=p0Q3S09 zp$|k2c#G7KH!-ibBi3zI?{$GW|EGS54d2jsY2((81By%KtcWz~;N1g*zb^IPUve!t zNC>+f5lk5hmPC*jP4V)RCTx7dlOb0rOsOT-$>O>y9R6NZbqdkF@|tKC@`e+og53#BOpIoq*$v&po1)U)&%r0=0B9*sRZIHd6$yOaaXnp|f z07y+LM+C^>OgVIbiq1%dP4pnV2BI75BP|x2#bY_h2Ez}J65IeC^G~ptGz;iCog_9G zPlN`v8k?}e9IeYo2z`NUXbB&i_$e_K1Phqkdup7#JzLwN<}kyca~rz$nH`kQ(N-5g zb&_EhCc9L<`bY{)KLH-af|ec*dI{;Y%g;>SvM+|xIc(*J@hh5CIoFMN-F2a}# z$P}uUS$>ef`~-BS)Nk%=pmSNnDN@s6DzATHLpYSdf^Nwl3mC{aZeWlxazJ}A>DdXx zB+s(vem4*2xBQOmnY}L!PVNCGPu_H&5GngAwz2y($=3Vj81203^VnU}X4o58_46FZ zzv5A~KvfP)7(Ab_m?i2T*!A}*xN^cUEH$uQq&|Yxj;111YV3D*2!;fC4W!ojxk}1G zp4B#Kh;>`ueW6Zp!N8OM@cJ(Dif@wQ!t=|JhfZfUWnH)8l-@m5aFYzJ_rI7(?DOV! zLtC;CAv`7)Q^ADM-(JSAYMy7E$fx2`57zwSYBHS#Bff0(vr7#rH`>%_m@8owV zvYv6#G%j>dJ}}3vJSf4qgkbDguw2QdYa&T38{vBn5iiYdZVWII43_lwBT*FN&$>C< zxJ1g()083{3U>4dXsCQBQMnZe{;H|}1C)CEZhek}{w>5TVFbs!w|ketOVEjaBDC>K z%HB?{NBs7GqJqDxIe$H1k}dEJEhlZGVq_prDt;Zg~FH4V03bjWMezR^ueFpy?0ARrZH|GYIf zPIYkWhs}n9_bV4hLz3@a-w8IMLc&My{+Vy%ErHUBH5xM5&OGfS{rf)WnnONzbJB!? zTlNLnW_*6#mMP!oEwTK=Y<0vqBY0d}!$v$!ZCpRG&Fr2D za3nG`t7L6AQ)hZbPb)-^a3-$(aDJ?vy>;=5_sjgV*%8nHk*r$?eetRbvH@E)U3Rdk z+&+JNALHig3DT@Z=tOc6k0`4qHx!KOow5%;mcW(~(F zR;)hWjfF=l+{nz<vJM#AhG>6;C z=tK7_e{AJQ5Qi!2;0<;Q1nI}O2**ERAySAJU5mN^@iI4ng25pRHc^Bv34M@tTw}TW zPOV2~ShYU-0?>bC@<9Cc9rT@z3>xA{P1}UHh-fedIx$bZ`sQm2GxN%xV&6j>&HOiB z^X?|B-f=oy4*xoiss+J3C1|9T`hyD)seIrb7W#gp`U8b}rvwryhk9B+2-w~a+b4zkNZ+c;<=jNDHQPW-p$P*)og*Pe3*dDue~UoK?=xmX z36i4Cy>*?jTt%YHWc0ZuW{8PEyN*{qfIS7<8wjKdk)TcP_cbUT;(%=m_9Uaw_51D`_4m4E1M8mfib8o(d z74@CoXN$#6qIX`pH?MfbP2D_=opu28?;D=c-)+}>_rj9Wye()&ep!UhUxl~B#pL9R*x&74L4W0Z)lB|t9+MgqtmHD`PCf^M z@!M;-M1I zj+xKB8m!du4(bQLWe5Y){Op`%3v1Rlu@UXe8uy%)SD3M4g5~ClJl&U5C9&#sUWChC zU4Hbeq@52%Jtzne>7?J6pMO*w-NPB$opsL7ZtL|pCqGzg(8;jgxxuMVrud$%MrW1> zU|q77&~=EqbWw8Zbc3O1*~$>?Ofg>bJmJ!yruIF`C@BYeXGr`Zda!|GU}9F+WR@DAN_YZ z<<|~vPZ(&wh_?%=dMZhghw4~`H|HOk>L{os%1Ru2<0_=acSOQ+gIo&VNpM(_JaC)C zAB7ss`uQQX3nl1EVj6Xmh1ua@^PvLCYKd-4AfPz2t@X!Q9hYsR&@$2%{asCI&F@-k z!UJvE%N(RwQZ&YUIlcdNfmIpDr z=83#_!EC#Up7u*vP?mV71XR8AAWG~C;Prhw8r!05=hjMb>w$yFCHxEFV^sJhffY%a5#gS&1lb77LEQS*NN}l{(nw6#Q~g-LtR*zB8%I7A&M6&MTsG0v!E%B68 zy77A~;?gQk^PsYeiJ!%m&}U}rm3@3dy|ieZIT@{odaNEhi;b|kNnF2@>=*Z?CwMOo zP0uq=EhHAkqFTx>_;AEfzRpUfelmbLa|MKw_^ zRC~%rggpXl;6z*tqEjRsz@k*WYdy+}>4YJdaA6716fd0UvptU8c>n+G+F z9HaLY{;tS_kYj}U3jRN~?)xvvJ^UXy8^nbO?tzAi8%Ji21k}Wpptwp6O-)M+Q%h~g zR2(Ia3P*)|WJP6Vwm`GUtkA5iQypwtS;xvwHcou`e1H2q9-sf=zVG+@zOL)_ysS;u zn>n+c4T?UDhPc6fdt`U#{v=(^HWp3+C2IZxrf02^S;9TxPmkByK`*!OmO8k zdpx>$mb;??1&ft*AUZyfElX@BeM-`iJBb3jhhLyx1TH3@7)gK6u5=*2q9)&+z&??^ zu1RS}ex@seuHq_w(a7FWr$Jb@Wd7(9|04P`$hej?P{AT2ya@$?{vo_QX>z2uM1Gu$ z<41P4S7baauXft-FgvIb$q8x{EKMfy35DJdsWaQw_?mo)Ym zW@$FpWy@#xG_5WmdD@^(Indnot`LX=F(f-zsAP<@ei0fAf_6%!(%hA}(SLbM_uQO$7A9J$_wx zjaKOr>Otn_bLQuY~>xXOkUnW!i9hn%(SfeE$uo-(nm&$O;}n^ zoreGQW8IM5ZVYw0Ud;o3+cG zJ*vn)f9?)ob`2Zwd@cIR+wzO>3VRGe^?rA^0rx)XS-b8~e4;bxKhHFdR`2hzr70nQ zPpek0Y30L0;a2jM6+e#uDC@gghWI{lrRqhWGlCbbg3$VSnv5_NcXb=d!V(9)O{pBw zc76Lx;KlY$L{w~KK>d&D?t;Cb1qB|{3&7o2>{ z>QGKlN;{BUb1kjesu^|WXJ@sOkgtgqF3ob26wpgQ&zCDet7#SK^WY}mk*-bMBcH+j zmk@r7JhgKqFJO`9t3b{vcoavy01+h67d+Jtil3*_uuZC9e%e+G1#AGP6M_FfceOE2iX8(1`` zKj(?Fp>ZdVBUg#}P73=crPey7$o$jiTwB_!X0>bkgeM4{mzR;2N$I_>`=ZHH5^T;T{0^09S`H0)mn^)H;c*-Gy50vnzQlUL%!@qk(qW zYTuP>RUx>EbGG0YHE6GuBy?vZ;CvlP_Y=q0QljlX1$<3J)ZFLn`fzxL%2ii*UmO_r zN%2>hXRI#5jPAPBRal5DMGBi;Xfp40W){h=FNcE0t#@f$x!3mMA$sRB-O& z3c7;Z$_7QrDtKl4J1-r&nsds@aj0s7H#mFc$8^t6q%L6??Dm+iB!d{Zt9fFcCb|_z zGTe+a#IvApTcP`pbKh+c1V@2Qp7yT@NB`PkNB+^@?lhp*k*>19U3>0#^CD&?!Ne@} z9V(@ieH~-a@t8gHRm%ntwMPZFQE+qiZayzK|L zcKNt$y-zXlfa@GOf(^0+7`_+-Z{@>ogDTfiL6*w`pXLgyK9DQU)o2ogyu9Y&juWHR zw8ztO9RS$9k84ZjeLN+m0oR&q4>fW(nxzq|T63;3J#OkX^ z*60gjP+U$Uje6cKRBTW6aUO0A^tG!bO{;^H(tls|RpJJ8k|KG-KrIr$!naGmcy$YL zbddx4=QF^l{<5}sU7G^5VixvE2zF-GQs;SQ#fZPhAnuF88k(I}snAF1S=4M-qw3iN zY1+2lfG7jkQ>q*Zkibl#4~iQ}5=>}D=Eb0xKK}|S*GUSd62TQJ+W;!=N}t_{S^G_p z(9nLyp+)`TnYg0H>Pug0cO#FT0vL2Hay840eTCpK3fPS%Iedxx>(*&E6?s2?cu=Wb zcutsTsts)7IpuU#$X4JbM~Tc%n#Kx8*wugO9`Ic|C~MFATJ1mt(^DUQy^n9E?#B(a z__F!bfy;})nB)CsOvaFUI;Wfa_1Jb#OEzDtEDF4uwxXsH4ENKn*^0vpsrX?Yk!H`M zB@;_}%8s{e|7~B}m;49lLqvhUIwvU_tG*zrotG~(cV29r=cP$+b!ak_j($3hfyZ`R zxl>ys0K+RS_}BhA7BIXXF#SaM6YeYFGYAl3(gFWjXeMHfH-S4^0P}J-^p{j@qpcaI z^KzBYNTD7+hr3=3bsg^aqn$AMtlQfvJZ~C6Bw?&bBG(e0v50LxY_RKnGQH*+yu>+t9<@oPN3F9T1AQidgUkl*cj{>*ss2ocf+DGZMN&tn2|s#cc~ISK62{TWpb4e z5>D0B62WTmGw4P(G;NmaqXcdORBlsMu(yEslHr?`oIF>WxCNwv3;91ZuQB&bq-)?i z?kBI?AAf0woObo_MRuRLUoLujE40Je7i?(KvM6`cAJ*YKZgM1~RRMr~IIuP_f0aGzp_wl)BNuNW%+~HQk^W#bv-@m&X06&<2b9QWeU&cnY z{vG-5Abb`OF~MC;g>E1~cKfY=B$#oK@lW0Y=ZBx_@>=V&5Ke^QJPrx(cR?m*x#~4E z=sF3%@}k8iDl9PF#~%R8k%EVv!J#5Savxa#C@7RApt1E%3~F-Q;9E&!-ZLSgSA`DD zBepynixME!G-LP-Hy*=v{Rw|NjcSwxnGFZE&C@=a-uyFG^?JBBZ$wz|Ks)tAb*9Tu zBTI*KM%&WyaoLPyVk=KW!ua^rcoBHa=NNAi$Vm(uk#h0Ep~%uKKsAC7)@F7woFrUN z-@6g#Ya3KL-jeCUU|z~-mDz(sGvih3EW6)MA*HhOC;O06z=$`3D-PANWc!yq0Pgu# zwfhiH=$+=&XV#P>otK2=Z^`0*J$K$4MMzk#CV@E0=ZdJXqk8OLs!I&fZRMW*w@nep@Q z57KsC#0e`3=j;6!|4tIZvOG>06&NHaKs%CS)Zag*YU@>bDJym$Dzix-w_$Jr6JAKI zw4DdW04j4u@J)br|2`PYcg|7Fwa;mE`DpBK;%fR3ST+CLR>ghN`3%<8_xQzv-SXVC zYHont$J@)?cE^@C0nQuhuYEhw>pELs=nLQSc_>y`kuwj?|Did<%%YT*&eBOrC**lI zU*675MZoh*1bCr;zVbtAiKcN{c`XfE8VEK#noeGZvgtg}We_>XKUH<0lTDtVzoT=> z-TYLYYH6-q0f3O$`luH_^vv$Bsd1LMefa_EZ9aO!O^~FzK6D)tWujdx(slgx-1#im zOUQo=7;EF#J~$Bpe)J6;+>Wv-EV86SaxeRSd(sA*vd4 zz?P*|LlPuk__l?XV>xTZL-oJ6>){P^t$guy#H>wAH7AFWA}Tknx-06^fzYrHp50ra z)hM384IV=DDlSwK@7;@kE3DmI7OZtav@-|EJ@gHIjz&F4dR#%P5q}K4M6x*$zm_#| zE^GypS-v_7UA=4TuBEelvnqo+VMW65;l0j+bb{bg31W?=Y^wOSM#%@@du&O9Y?7c? zwt^vr#UpCUf(7bKnm|6}8_$AX=V)DQ{d!jRfTlDYzIaJmR8=Y6A5eEcYXb7|##S>-NqWx}#B%(t@GxAH#q)YFH@oyELF zc3A*5JBAA1$*fdqgBUFM9#-Yy9?<++c&T_9PbGRc7nW;@xAa}QJtf$vga&>F1yEhh z^fBhAKHL4M@r`bBo7Mjk%wDD1-fVmkbp-q7>FLSWT=Erm4Fzaa{MJgnN*%It&R zZ{&~D5B3H0sw;Q-!fV950&(RR{TeSB?9MTsFo|HC-tElhF-oA}B{P?lu$@X68Gvx6 zxpX()yo<&V>blxD^$I48SL<}og(rnQT9taJFUbJ^;gL%~_=qHVXtROXIaRhCz66gt ze6Sq-gY)=xWJMcogqHjTD2MxPoc!&)Wr;A|6>-=ze*mM~1lNzk|8P(SL-lFZl#8tN zG2`Bh8vDmz>SCtc)T*KParpgDyt?1uIoeR2V?Is~I;tR>H@DcbXwOPp?Gcvh_^RjJ z_USO}QC!Y6u0Hs^{!7PQGXa!_p3jz{g7oL(hW59fd+$))Sm;kiqXk>bmEfayye%4pt=7ZrLq$Ymi5_Fj>D3qNz392W9n*! zDk&bC6sjMH5i%*~ZN!i*;mN*7^wgO28LZztJA|)hw7mu zbU`Ho*a(FGPad^@W*Co0G_UR{dE7Ov+8(btRO2R$PVv-Zr5V~gkMVRar; zb8yRF(d%=g5?l38vDVHkGfbx@wm=EcN?)9SU|%?Et1&<*s~d>VeK zh4sr^;p)3{Py3k5JcFm#l5-y+1XE=YjyeZP442zC*IhYB=TD4w| zjX+P7q1XA@|1sp-zj-8<;8UfkR_@=M-g9Pr9JmhVnoBje){`piV}y_%_*7t4aO>Ep@o!^P~OC( zdH3(OEyd~Mrkh#2(#>;8kJh4dlu(s1C9}Pi9-2vpW7WAOKp1-CE3%+?T6ArcK`!@i z=he*Y5L_aqyL)h=w=%!hxsx>8W}a|ON11{S{ zi*gTe^&B%=f4$3}FNU;!VuT+^4LTs@u;^4AB z9Av&XSRWZ2>L;12l3{_^$BG+H_cm3k^L)Xn1)73rCS5yziK+RWg?3C3FS*U88x)st zm**ENBTPe^CoPW6mWXg(PgP*wB#Pm9$Axk>6OQ^>iCzcbSfajIYfKoeEyV8FDHX_` zHXD?q0vdXY>dhq+@J3~I${o$>%SDO}`+@dYe7pXQGN_#`zp{vU+%&=yzUGy|0jv_J zbysGzicjp#W7e4MDtYKKu~OGH$r&SG4s~_;%*WF*w(OEtUpaH=lv~k>jcT*j?awtW zi7V{us<0IJT|fz|o|?w1uO*)8cUeR0yEo0f4&D%$?Z< z1FJV|cJfBpY_pd+VVrixpL_Zd^dTk5SjBeEo0Mz6G!K=YS+tJ0Y>SnIj2Z5%Kfua+ zWlftE_`h#QI1Q2EU97NG3>%2=yhQ8180I)!1M&aeVaCfiW|Y}p6A!tIEL4tJEi6Ku zUu{E`&c;~nga^!JG4cE59LO3e-&NSYCd1=4og)>rFK8Clu*kRz5(v7s&|TY04rYuG zye*ZTQs2pa3-vp{>Kp-b;QKpt=k-V3E+c)2I`LSQy$OVh(6nR1d3uXPEsyi*$T}&% zZoJdf_4>Kh3^vbbg84Lpo34k5?Ld9MFK{_7peHZWcl9mS5u+BZO@7@(H+3~Ri^)0> z#If>85!5bkj+!=0F{)*CeM$n>Msg>N#hndrMJT5OOI9hr18~4|tl$s*NUfFdd*upF z*o0HH#nDB+=A@VUr05$Dn_Hd9qu!>bWb|0vX{8&FyZjY35j{wpd$@n-S`_#_!9j;V+7K><9zAg_D-B8AbU z(Vf$5#%^%1qUiPF#&5P+sccZ;{$lt!5jS~33Bi<+s$1qZVdHYT1Jp8(-llm8vRDi| zpG~iL_q!wIoUbK1+n|;?^TLZNI=r z$CPlDl3*W*94nK1GlJJnl8xutE`w>Vml>KBp3Z!(^CHOr&oOct{aAJVQ~JY4%T|m1 z<1qk1OW>@Q_z;l#_e1hAZL!>R0RRy;E=@fQC?ypvsBhphb^rMdHWvQ9Tp%}1lKp^^ z&?RzHTGTfg(rj?!xZ>EqdHM+-qfxV?{)1z$BxIu{;2Z;FLJGB}f+$DAKjsGe;l{pn z$u0Oie?AXatBKk1{HZ)U4B27{;LZlGoRwh|K=j~f=?Si$LNlI8ah*&=@qw5ejw7F9 zxFjPcn#aKokx^}bBVCZj%)c3=o5r&J2_}LYtlIBGoc-VA zXXB?e@F*sPnkNI^s$FlKG-}+XHpi5VV!yE+6l4`ns5is0iINwwYK(F?dKO{EF3ATV zRQ;j^I*Zc-CEspeYnT5R=}~Qx0`$ZRVt!y)DD08Pk4=X-XomcRX%#x^UQ_fvE=&c1Lmt{L%z!(grh2 zX)zv_C$L&96i<3T(@+M8f4d;u6rj@*I!A7$=d9qMD5_zwS`A zoQ!_lVHuh)&5{~y*ytCjg>A(^$@-b_L_B{d2`H3ixkel~+lMGKfuj4UhV%+OmuNmh znRRFbefdT;KwY)gmXlM_UDG$!m&_T|Y8Y+0zx_Ht3N(G?R_4`W&WU`^#1PCZXPV9? z|J1qJxSVZj7W#v#*lrfO%_`-D&e-aq(E*Dz8>xnrgJYJ+PBf4OA8v)?c?599n#f&J zux}1%-3Y=xGq`L&94+E{i9tVXIJN+u=D!5%z1DJ)Vo$23^C`Gl@_}Tz34c@{K((9W zSTgpDgg||l)Cci$w2UxawPz(7B&oq? zn}Sgac~Hphp=FM-uVhGa`?jvGA1%X730&D!OLl z2&fHt1j`40dJM3_$RhyOCStiZ>Tm5l`Da%s9}7jvl8sO@dOh2e4K!w%Kv)3&p7ej4 z0qml~7&oW_5OfJR4+r$iM(aL-ln5G)I$2KZ^Uqe*{jp&l6N$N(gO z*3gUV__?|vIg&buq0Rk_zX$88L)AI~N=WvKj=hk!6cWPR#k-vtW2D_7LQ_^-BQQkPS}Zqe zV+*kFjhPPsZ6s|JT0>L>d`q>6)!5d}#pC-?Lx^Wj4J4VteMpk+30)*I)~yIpf@V`u_}%e<4Fk#lDP!fo+7s^8@;fX zY(M~wu;3<9WJ}f4y-PCmZ;}bNs&`RFcnC8g$oc|%0zx*>WvsJ9u0{9C!WWqpJKCEjm_y5q3HGt~J^ z@+p;>&Byi5X6Up8bdH&z{`c!l+_>p{9o;1HflccY@gI16tUd&I+>RgMlr6%Ot7`v3 z&I5XZ$#1W~(SxKv7{Tf^bEW;E)}P8F>ki3+LfkQuQ+0g`j^ch9M)0$g zebgrGaY2i*m>qB8(0?x4xGngkPOypuvQI;Jas3-r`7&Y=8xT-S!0AGhPH`g4|S~6%62ZDd4{6XwHu`!+;?p z4DjDYnJ&SS(hAgD?!Sz@X}XYGDslaWZ8um#3}hbrb#d+TY8i5V+z2G=qX>Tj0Wbhy z-GHEXCqTDPs(PPFfBGyaMF#cKO1J_}Iuh)jD!+xg+eo`h{s!FMM+sbf??#fpagq2- zc_w(E#W2`+20Jn@3(Y<1n9}12`M63kI{lkO6y*{v@Fw0M8=;1iCMQ{dY&E3E;z?tb zJb0DdBNb@!Dr6mDGG>pFzVb{`Cg-G$Am20o+9!62^2G6!7`yOxXw*$p1_{nkNBw=5 z1E2JUl>kOTBzV9=5rVU=eM?D-Y;Q@_%C{4qO8^EgQM!k7kp1=akRz4`3J$b7^*flX z0>2d)1a$Iz7ieW2W2=hBg1gqON#vPDaY|=EZiry}CSVJCh`gI~hOm^n707kr==PBf zL%faIWK5<^S9IrScF||cum<6{cC^xTm`#6GQ}OMC){N}i#fjq7^^ zY2tam{Vz9@;Pm+z{XVX92}o>JVVQJ>cn*lwp%BEB#;Vs2Z-JCvwH$UrPJj!0X34!e zmh7Q3C)3D*H@>*vv%>=9+M+l~2Wu-{Xu=;vIFc)mW)hDLfeZ>u_Sgi5=9v#3t2BZ> zduWX@gBGEL$2=zg-L_EPw0%8;EFA0;V>w&?jOo>cRed0(K80i8ECUtQVhM?gwr3}z zu~EPqQ$0Ha@Yt;_n8WqGkk+V-0&}+eRyQct=jJ}~IQ{$!qnTvH;m`YOE48nQjP3&Y zB9w*y?X{P}bgaG5rL%Pxm9e(a?R%bdo`C+Dp6cCO!Nl0r#bj~#95d7UlD_fd#qxcr z%|AR(Km73|i8!$LdI%qaPNU2Xoch_+-+A-ds!(EKOmp~W34ZfcYnW*mL=1LhfHO^ zwh#S;g#KeB{U@Tul$1)2|%?WLpx*MT}R z+0*-7raBuz1evZ&Eqvv{Yqp&T#6GwX7#^U%L`okU8G=u)GaFuty7~Gqkq_XNvt7M^(Y)lHsB`SGJhxCeFZp(2{mPY$2?E-F zVS~g|{nUHZ4q1z9Fn@12p;=^DI_gnzedZE!E>5hHK(#b9TH7*0Ro6%j|vYya3>9JSM`Ss8sO;KyM;T+cC}?DuZl zH&9LJMK=53z>Y0bKzwc6=TW=J_!Y6eEhVH*ev-Zaywd4Pcyp&`NIItJU1LY?HoOU$8}HM)p{M; zLZi41&)-G5;avu5yp(KSM3d}y$NrAH1EBp5kDq>ua-S03@AKW{^8OC0rX^U=6FbxUpiqk8`V#qys`3HR7$%Ws zU}U#4B{`HF;SfF%g5Q@E+)Gmb2(B*2B^%ip{rT}qd)=+^xnqOt4}Q9}_u%a4OnJyM z{7N~W2y`?IkN^)TzKlmkDSxQ@p)%w(2k>Ampggl>yi^T)xw zaMCdXp8u-8vej3mFwrkLZmglba+oDjI0+sl#LY6&;SVAeeD_g^!cC+|8r2 zI@~0^%OIZbTe#l_ls;D1zKxa+!LGTLP-|i@22^_D|8wA$lajd40dSII&0MXF^rKvs z@$)M3jas6ARS%%R>e@I-j>6o0yxX}*D}eU`pfLw}^h|4WMvWJV3^S!6-*q6?y{gD+ z1gX<2%?pRf;qZc|b9#j)dC*&;uvM=#ej-kDi4?*y)R${_%v>^fQH$J248fTIYhyCWv9Ttjs6S-hsyj^Jd%$SW zB&yO_vqNRgUx|>2#X2kYTx{`UimpV#X&eqKjegf*6e#QcNjn94e362_v3&4sUoXgB z(r$L_dL^UQRx9~um?^;n>AOtOji2Y)Z{azt$?L!x{;D*tW>+V&ZNjGqz>c=S4)3nD z*lIDQp`=4Ao;|4jI2_`*{)VBm3v#8{_K}Gdr@>o1XK-FaG$Frf^&ON)?OVR?z-C=< z*q4D$CdOgUFIHG)&S^c)6{l9)+Y!CT2?4h<=);%jx7%@>-UQkR$;!!?EM79sWZ0rzm*=^VOM zLCZ)P2U#VdxTz`7a5|9gJV80c-<@I*h@jb^w_a#qsfqtR%raCDhlZ*>;2WR5z!XYA z#vO6B8F?M>Pkz!%e>BT-awwW<5TMhrTqmswNL4RFy(FLOaLO8U;dR!Pj<5PL5mb}Kxp7ooQ0dbKviQVY>p0Kk%ZtGl3SzL;9^C_%lSfxIM~4MyXfQv?3$t(M zp+|x3!gQ6)sOj!lU-%V%z%p5M(D32p zcyIo=D^p(SzyfNu5pFp0OB<*Xh*7q3VvIIgjc+4wda8mEXc@3I%UpA1ALO7K_`)dc z?S?IFpoo*FYkNpG+60>lgK1e{*rGY&#A}dA^&}6Ml-{q({K9$C2~L8`$%%cSLy59R zr?&Rn&V*pG$F`=!d(#yGG4o_G=Q`Aqw(`c-j;SCs{|9)#Du-}<1AUnYb!wYK<`A~7 z|GL558{htp;;S85hU42Z+I4e@hFj8$pu{#{IJ!Dugu2_vn>IAn>Lz1`R~)l$X@_* z!mo&nYkDKf_p;WvUw&5p@yC?)i66hAF+KP8eV?;F|KZ-o-=B>Oe*zgPpJtD#zd4nw zb7M{eh@U{9|BV~X{2#axm8h%1jaIlV*or!?|9{+Q_;dA5XK>ICi;Gi8g-E@wA?4N? zyPM91-t-rR4Y32Ool@Vsh~LIo)D%Ic-enZ@PIbCnBAs^3Wf&3a@!b){_72kr6X)?} zcp*VdW~z$|O3n=?SEUZjKE=G#nqkBqOIm$9c3nqEx$uwq(7}^`U(-6#*6!`3qj0Ft zri6>(#4)$zuS4y#b_b66CRY1B-{Y+%cMarAOod&QqeF$OS1e?7SEqHvdmc-O{$(2# zu=!7S)&7APbY;AEY1x^P8Vh2J<;JQN@UFzwP2&@}o#+S@5j2%@G40YXikRh?ubz4q z)q0Ma%F)Up^9)`_jA4Fu|I+7*8LUurtEjH*jRFrSfSU=Rj z6cNrMXGyHeKpQzKO~0@D>i*L6c4l4cDcYmb>FpB}ehvKiy1b(5TqJ$sk!X;}5* z=g`nU@9dPvHvZvRWF2gIcg(nrLdJ($0VCe>*}^#iX`^stfRrd!W2S4|$@TmQKaGr( zlMAW;KuW;ZU(W~`A3$&I{~=h|dSgd5%q;YX%}3Jo8z1G_-ajv))(0`8P8SXqeRi@u zygDq*DmWL?Xy2kN3N^o!#6x28m)O-SFYN&)N3~!;Q2JX+7{j8p>Bpny(%&IX7W1(% zsBR#h^S7SsjL6)0fw;-8fk+#ulZFU8p56K(m}^^e~w6E{Rx)W>QF^#~^# zW=_k0fxjXQUD7q?Q)A9c)h!wd-ow-9O& zD2qKOAjY})`4two${fBB25U1sCp!BkzoeGtB2_rgP3k7Tec0Q}h4=FDpQ*k9`uE4M zO{^VWn6#mSZ`091M-I-oCLYO{+%zRpaZ?)?i;Yr#gMGBtCQVhm4dOmcwdr1@mvucm z0GDRo_0UO`6w)YK>rz~g8*&>2 zzo!Hn`h&(>EM0ku$zEbpV%%bD1^{3{3-AF_2wS%Y% zqRw^gTm<+xvH{kd%&%zYwvmQeP`k`Io#QXKn%>WeCd3?rMu0dc$t%nM18-|VBRDhO zE3SH1uJPM4MV@93MQa+Ep`=j1X%3S5Or!CTZkV@cc+JP_lQNz(q`hDnxbx@WJ5};u zf7%7sGd4P%E($S7OA4wAMc6O0Q72Ub*I@t%uRt5`B(e>KxK%Wvoo=>6ySr>Z_FzuD z-5W*q54KHMQ3<^kQUtxU*u5Re8MVy&7r8VKXb6m?pmy31#X`t>tx{9F23C*RiSW?! z%hdHlOgPPcPAjtSt$s+ex>uA`i2CQ%?E{*=lYWT|k~qsn!-xO`Azga|4hUi8R(K=i z5_?p1y@XbkChb7Qi)Spt=GuNDGCbo7*Jn>J!Y^lTw_)#wwpUBFkAAd8#QR$K4*_BB zCLggStY{0!mYze;!$dlA2f{hrVd9J&R-D95dCCsDGB+OOF{)$c_MVfT2Gl_Zatt8T zAcPJ8u|b;S5>1-4Jvh2i>i5_sYyQZgHi$Vb(HzBSvhr$qTRPm| z43Xhb5%I?<(+vj_j)yphC6XlSiJ9RA9h|9&z$D~EJ4k<-xZ$MqQmn<)gmNF zTPv<)H0-FV-Ie_c`S7(X0Zfn$yuqn&v=b+QZp>~=m`*H4Q%|@&ZVKKey>n7-6*RI2!`=O+; z=y&(6DD9nl(^oxYhWUBZ`L=!B%?h@K1)hGZ{MB{0fg$fw247APjX* zosgas+}iveYBkf?p90{~>pNdLOEkNU1huXXBRoT=^bQL#kMz(9;`#3|>a=j2aCZ^9 z1`(p5Nhy0X8CT5G-&jMY>%;6D_|(}v!(Eb5OVmxhQCpyCKqMS}RSDmA^6U{HcXFR> z^h#9+o>0(T<-&GhOKZ?(2g}8e$mG;V;f{ zduJS(?Dr%;=s>958JsAB-{o133Msta04JLaws04#KInWA_|Md$mpXF&hSIg1NOHqD z6{`BOq$;|LySqU6-TG$cKf`XXw00hNZ%DjafvIgrFjb=_vp6v0#aX>yY8Q~{hdXwA z)N^$SM2=RDs{T>+-Ha`GIbgl0)lErygKkt}zi2*5dqgK^&Hw2+*%w@~2dn2`^U9L@ zs}4Ujrzd#L!m0ocG0%jt8{fw5@Ll_4!!tvCxPr@gy8~*&IyCmr%TYtc@N`G*cx;N4 z(sSf2bcJYJ?Pf%%2!^B-HjwVxfluWivP~MzgZp5+$p(5LP_Hewr?&JLN5Cy}> zPV_y0os;4vo^kPPqL^aZM;oy_*shazjVm46jlMPJ3??1mkkcRo5BOwA&@S)TWZTsnJ{u;Ywye$O?upwYjrBSu(TZWZ z2N>!dVnV5?tOZtF8XMl*v*-9LZ~OYyp~c3*bZ7|^?8Air^A%DlgKb>|$IxIdBw!{H zl+A)hvOzW|kP8i#CV{%hKtXIvbvpm_v?r*;^|ig(23i72229xmd6w-lTS3o%U=TjG z${`)7mV)+Wp$1XfH#bL-5=>WfO+rK19vi(t7uid?_%Uhnph&xPK-lw_KZ(O2jODcC^?YNTv4 zJy^NI<^X06Wh4cOdr{K_BbM4T&F__C({zyz9oo@>?zu^Fq-VWYwKiS_b$;h~XtXgZ z+=(VFu(Nl$u){>N@1CJTrO}}FU8yCu#>=mp0#>ipZ?fFXhUE`I6G&0=O}ov88~q?Q zp9QF|UZ}=14HL$mXUf`;Vo1e+fyLj^YLw6HU(ZT za(nO+jzk#b(zdh$Sl3G74@sgcXJar7B}P&RbL|%pSghqYRi&m)fjHy&lpa;VLc4 zm>%O_sK-I%Putb|FwX4{u^YRqec13sHe{0w!4YZ2jzfdlh;>BRDF^5}62yiHi^_pEPFXByK;K5WZ2_zOdL{xw4}L1xY}~HHbPE@wJH$pvg?Qj}#H5 zUJ3O!KMJgNzDc zXeclsEXd?wZXCq^0m3xP&nRc0CvGT8z+QhTw-wOX8gsq%R4(e8saD?S%y1lhJXb3m z0ROk6?P?{yp9L?;8l1gvcxC62Vpfb=cBEON!G~a3i(rlvws44+M}!2Cpy?#2DH~)L zW^rja=6QVJe~OgpuRF3EAYM1urKzAO0w|*ZwpKHYugn4Y6%u+3U=gPGHXi^@f%l0A zwdUf+xGmAE4`FQ#)<886GAe#;N)E9pwg}pBrfJjaLzSlsoTk9?uaM2^MabFB1a5P4 zJ`<*)qjt1Y%r`ejJ#K7@J=8V6+uD2W24zeaHbAG$%rJ9Ex4s2haCo`%aPqIx_1aAG zYE&o+681ws9(P`x7*y3S9`6vJIeeB0SVNWU_`^w!6PYEjo833TPF0c*grg)E&v)b+ z^jw5qhtSW2I^w6!l{Oom>^}|v3>A<(GYjki{>0ZNI|BsG;8pAqrIx;~Vif&@Pf zf-7V;R1&p>h&4QX@#dBTmp(IgE(Y!rX>m}e<{Y8>*`T;yKLQCBON25-CkZ0ZuEqH9 z3GkT*`yTu__0BlTH968>CQbgLpRCfH`q1MU$LPmVZ{HgJrQSjWody}9icmJ5lSA8f zfsI;i+x;o+7bhgCtfbx>#redJJ4$dMD=RizE0hWCSNXP(phwo`k4y+f2C!(UEJ^^W zWFv$qL|+qp9SOn5L4zV7AtYEN4Vo?!$c}?kWZ;NuSYdj;KlgYQ$#Pc-?OIqRKO3gV zNvM7Ujg63?>$xQ_u}~h4jd4r$pLzH@2)2w5^=K zxDmi>BBk$|;`&)o6D2b3!OMP&GK1Q)yVwY$0N8*7)GP{E$b>Rw0vjCEj|B@*)-QcI0oiHb0uI>p7|cys&)LZm=1^F>2i8l}Ir6IAWx| zy(RKiKgJ-UndAyPyx^j7wwoO0;>fIt?I0+FUAhsFhFdxlkPG#7KDopALg@?WsZ~&; zA?T?@SRgdx)M1A+4rc=|-t#vN;A+z~24q(_%5Ak*?5oquJXmJs-A!X9d$de<|0va$ zpRop?&+tdZqt5?nM0cFIw?+M-^pwYtm4T9*8_Xa=i?vg-h)@QzqBR+I#5CNA@?KmQAoeVbRZG7$cjj!uZIm*EJ>}(eq1NZrgONPaN z2nzW9?mwoSt2ZOhKJhRuZZrTsei3=`l2?dV)%4?{s6qC68G#>GYyIi=V;In|0l{Lp zWYvi@(R|)R37E<1eKwQRd_SW*!k|P6*`kExu7$P(zHhBmMSOS1%i$Iwu zkS7h6BZatV9t}0FI?)bw@a5)|gY=svkp)8776_1+lEc>NIdbF)=LB{k(tvasWOD=+ zFM{62tWw(kO?$a6JSFpFDoT1{od!KTNXQ}=|7A7sSD`GL9Gdwroxd*FAV4aMrqu^Z zVW>7OiiYE%$@xTB>#ZB+lVHdZQ0lPeNr9$Ix^fT2Zo1)}GaPU7x?+8GB)=8WC90 z!?sR?N3AZ$QrWN=<|8yO=KOK!o;#rZGFV6hvCe3R!apJZ0#TQ0xp4QU+b|w@c#8$vce+rwbf8;Z2Sn z_d*lNh1jXK(Z>AUJG(otJsF4Qkf5`no3hxD;1kWd`z?bVT>O5V-ud0OJ<&CVXh(W!WoWF;G~7 z0_-n^9tpg?b3=!&*MZ^QM;QxHZ)2^HIoO;7E)0LLW*GhSC;WKdFsK4X_zRq1n%PNO zZ-!sn!jbRfAXA^fcipz!5*=^>2yIwK9i|UIQn4Jkh+CwM+J1V`sJ=981*aUHy$jF{+-OtdV8tW@An5Gc#-{lTUSo$v=#-8x$Mkf zu~fkJ-yj)J!TOT+SED9%0Y+DxUSzIg=yVeDRXP>0m~ED86XXl2+mN?dZye_Znd3i> z17PbEI{(OHLvrBOd9hV-p>-*HcCoE$_u3PHA|EEa_(=W5)KxMU$6+g8*o( zVus8E#W8|j-JdcGe&e*<4rINC|MAoP80gdwC^iTHnC^`*wl?3KL+`aYr4KivQGOnN z_a?9yZ@0PWbcTvV*W5vbRZ+{UJv3&UmkZllgU)DzJ5An=kJd%EEHgg#=0~-KrL8+O zY%ShUb0$cW`2zPb+{EEbcjouF)<{hJwB#p$2C5em7J4Tq^X-SIhHJ@lE5oPTN2?tV zWle^H+C$DU_$MOxvF|0P8QVJIh6RGsD*JsSsSG|#2TxDvURnMo+Eedyvf#w2?+>HS zUQ5cTl`4O1Gcu-ZuKm{4218=k++0~7+Y)ff&QNo$L#}#zVZ4~@FnU|C>40hRI@+9M z=xlS1%cG*z@1S?#i$&>;xlL08#rStdS2+AipU6s!Akyj%lh&b{l6YzAxt<@pSFS1l z^b4)jplTdv57ti4SoXEoHlvD1Y6YEDW7L+?7q*wKAXYy)j#{JMzTJLz_D-&LXxJFu zf^t_$=Stl{4MRHgg!!w@Hw2^l!Nn8O&VgcC3*v%V6ZfOed{!x<*x`hkioVnz-q3NgU&6-_nhKe3G-` zdIM*_D7SL{(IFnJF0Gts5jUQd1(P&NibkjTYHn*y$h~@5Rl<9E_6EOYFAtkAs=Y^1 zNIf(E?#Vnx8!@U;?Q$yegWN!OopT?p+>4ttRz`1Bxs|Tb&(tloKfw(^xjUPH^Y6Zp zTa~(Udv3JQyH%{N8#9uFe%I#!Ei`I|6sTvvh0|POc{rOHT^u+?)|peGSr8NPd`f;# z>Efxf*{c~XFIY!aOx4%z(XeR8+)~)t3{=t8s*L83`Rf{&bFbX}=5gd*b=>Q_)@FyM zqM=1roY2B^+9fIwD$L=5*A{n;^PUA;h2p)44XJ|_sbOgT?9gJuxrng&IgWc&UzjP_<*W29& z&eA4p>oHgg+~Fnw1VWQI+Y|M@WM_#lND#o>l`Z=_82}m@;vpWfGW}SOze*}p5A!KK z`-aY!?$3{AeAQTP@&X{$ViHHF(6b%#)7?R1`!AD%JVx zGpx-YsaeKS9-R1$kII~?C#@>#uFa;PAG}pzvs9vWOC()30c;I&?e^mE^#ZvN0~rTu zp{qnvslt>KJOM_|Lt(~2Iw#NtPLPL155BWaS4mZB`6$E|4LbaQV}ea3>uu$LkPJ1* z@0e0IYw>qL3~zP5H_JK`~pX`%xKa(kPC`_R_V0+AiwU#ZS3OmcLU0TT3XuLM_YO)q@PPnA=bJOs~+2>;w z8z8!&R95y>FBFu|r*gTOM9*CX_O(sc8bE+>>iK#2CRwZBaYN&Kc*`lNtzLg7=fDf; z%O(%NFdGKyj|Dc7Kx!{Jbr|>d zC|GV!7h000QTuqLa(56`Ed^$A-x}`TpaOZ-reHs5hu8%vBDZ-ifI?tsUZ{XTE(4G% zWaWe9z|=KmRtc(oRZhR?fK!RmR)`D&i6ty0s^$;6YB%90#MJzT{&YS0Bdtd@Bw#E3(&qv1Yod`R;)r1E$E? z9KG?pC-<^ns2Z3w!-6`ODq-&-U~IFzz;dWtFRh2KTToZvLP^=RUG~UGp#WP*9lWl- zSl+y@(WzVuaq=C~0$Qb_6DP>}Wn7krnQK0+ABbL0KWt>SNoXR|xy(fLik$>58TZegYqKA`t@gAZ>d-d8Q;-)RcQQ?GDr|n_ zrZD_m?Q3%EWOnzWt$21H&nnbT2??mZ=|jDi7SS+kLOWA$^WlsSoOlm*H}%_+aUS4A zm>{b4i-!BhUk}T?isLlOUDqSQ*cYV2ZOs?phvmH$wjijNxSht1OHXZz%g?f5dc?}Q z1y||$J~(kOcQcFF1BSULX;C}ksJ1DO@!NiO`|$g*O^@Z1BFpus3NGfY{vDOC+PWCU z&bhx~JJQU)*hMC)A39egh7J)Cug;3u;(Ruv++j|bJe8lo7I?BjQL2J$FT5A}YPK8} zPO_bS0g2?*+hS37uq90h?Og(B+9RYj30x7P2$i6x7UW41G7#q-5<$vDVTN@JjsaYY zs<7edS}5$Vt4en^gPA<5xn*4wb=gygQ|4;BB~#wXT%p^LVBHpa&o>N4!PDn~|C-|I z^{m&lAOw0nfbDr@Iz7DjX0e_e;m6JQr9r?-QHB>;H111Ph~mWgacbeK5$JwKK{{2W z<>u^>73Lw}BS%D%l)_|$z++B``&{fSmDZ3;9EXGww5YO2VBbY_MxPJnT6n4}T_qNu zih^3mAhQg~nhX=#QN4@PZlC`Zzebj6>vZvmrvaV6AThn=4YZbecawRBstXWP03w6$ z;U@4ak-PK2Coa=%$&B2~a-HQ0cn=Rg#q*%F0|?cX%OKx*Xu@280NH=V!IkU)2`J4E z#)7o#`@dzt{HSYo%isr8F!FHisqsLUS|M(WGiS;5iv2)f#(8HMNHfz}M^Tqqza={V z1X`h?tf@wOYW@6AV0|S&IZNs+sdruGTS@F*V~W)Dh8lbK6;^Os>RCe)&>G>?Jr2MU z?t5|Mca;7JL!OBjcmU&(om%7}={`Bd3p>KQRMj?KrDv-nu0kU9+ZCzW{Q3T))y^@)O1 z2Z7~~Xbl4Fj1aaF1#7aw@5NvuLEu^|@SGCRC7=P>DLVvsNNhK@0H*#zc`pb@YfnGv zp*s%=j7UIV9Ubg4JcQkH!2Oi})CCg-plzu_<1)wBn*$zA(!cnUCqRLgn*^4`#}*mu z9ns*BA%W#jP*9N#y#L~$RO~n<)JPN>=-m5&vW2)V)KlzdHKXSX9qr82(T?;G5WS}4+AP@SB5ZPah#fO3!-$H zaMh<%D8zd6svn5(l``QvMEOY>h>-{mVhHecASbTyOQz5zg^vSVh;$NKNZ|N}iiGAFz;(On9%vvY1B|;3GUsi8CzaH2^TQNK z54BmELNq_?!1C#jrng!p7VOV0OjA@-sPH^#VH!^sK3jNHOIneEIEKWqL<8K>{KyQj z=d{VSO(jL5=9?Vw8eRzvDf%)I@ep9b1)sK*xV0Vu{euGHhR!&Mt-ULa^71Q`oyKzj zQv)g@1TnO>2SlZl)5Nd@ zGzcpM)tt&t6pOtVU|IhZc(XxXJor&*;eJv=d{1FsHawCBimW}CtO8QGH#YWw%c%pW zR3?drkS_@E+f2ddJi+?xpg`V$y_aag3euZsGEWBe)(RX<1>{7~sih#J>?Z zLSRK@1a|_3H~73=y2g?(iJ&Q<6Q0*=4j^af`+vSZi0Rg2G~e1%5;pamQup#=zq>a~ZfC8|I)VTM_HU; zcX?22!G75!cLk)4ev!5SVNdl_hCy))VCY4Gw@S2r*@i3-`jOVnS(S7tYEFSwltjUL z@e{|NK#PT<29xtXUREAbfen}MJaW#S!>Vl+(-T1lx9iZ3Uv?IQn;qAYwV=1nZ8RBh zwO;)6692?V%++vfOW@j}fwC5m{g)iuki<5sy$rkFS@TI+VZ+1@91)xj8X9pyZbNA90< zm&@%l{So`@Xh*au2ko|Bs(Ta2f({;Bu1sCMTqFZICJMfPLwF)Bw?24TbP269&3W~JRp6k%NguIcoA0Li z9#H7+zFT(%VN(GK%aW5kvoxOBi|d$0nkY%ND`L5jlmR^|h94yqkW~D1b>VR}JX|45 zR}>!Yfk%ht%LZ*v z5;~TE9I{=E5u ze@h5@bo{x&ZP4SC+O?OQ>f#GDNt}XrFBnJBd$(vQbW^YsYWPW2)0DFCW?8X?23j7zj}E4YVm`cL)WeldkEXgd_-0pHx}vdCced%{sDWgiDUSfol5&3s^4-utGJ`Q zsAI@+ZvMY6(9e8;v3Pd;{Zyij_$HsHkCwuPa#8l4sjWL-Veu!7Hd`Rdc&)hXE z%<{IkkOQ~Wowg$g2eZ!DCknL(vuj4#s2Pw*1$*#7t`a_u3lyUtJ)FBuT0FIDSZ;PJ zv!R`D_w3vs*+30Bk%J)sjM<3AS$AEYsS8~ghUHfi5@xzTg&zg8i^OxaJ6}r>8F~g8 zdIG!Jw7)*{TfSq-2tmtkZCfKJYZ0NBIp;Z@W>0qcp7_pjjz2S4Ev^NThoba-?~Cmd z>$~)p1FOCGzk?qY`PP+B=AI(`Ds&;4x-%+&wzPRlE4;nHufj0?Br`^7+y1G%ZFLnuIw*a6(Kz%xZ72+c~9qQpe>}Y zvj~AEg;22lRdhVzbM-k{3*G7lyMfJlM;-V2mvdtsJEHtC*dAaP{*E6Y7MM6+i@q}L zrslg+FNl&sPDALj@JW~O$+Jd+TfYiTrhuVaP2D#YO{sdT)u5{Zdc}!%`F6|AYD^ZP zkf%jrTjpQIHM1A?Y{=BcPGQr7FfxF7{YPQCihswt@MiE)?^(ipf5$#=YEEKr)7`_fm>Rh_nH9D;+@hsEeOCJ zMSq;$b>%Bm{fWOH@cGb`AfX+8vPb(%6VC42eGE}}_p>mkR-7#pP!!;8+26{hL0(h; z-d}68{TT6$((!EP4GSsAl-^YqxZk!V$mYObjdg;mmDiT&iu^QwiS2+IDE3P3Sk?j% z(6uKsGIHtDz%UjT4Qt>nzI%fNp%I+v#WcVWkaaUxNzzK){Wf-FA=GY}MVHg2GCNIOBY3T)NK zI}jVt`zo7C>nsCUrRtP+lz}NNG5hD?pbfA6GnXfZKVJwp_F(yV(C)WEAqeM=756?q z0H~k&pjIg{1y{Rdtdrs@2E%L406lS!GXMK^&^d~JW9ERX?RnOgJ1cLyps^HJS0%4= z4Q;I2gEL3la+6YYjCwb2;NtcdPyG83m~Hs%3|1)X*f|W+BGgA|Ovpj>Z^WidlBbL^ zI86g&|A>lUlh_q`usQlh%AlTGMs%>*R#F8Y*T~muHN!K2gF^WL6HbuV-P}>G(WQvc z-uw3r>aR~_HXhM*FF=jAHUNX*=KbRZ#+lvG0eahVF;DRtUkK3fP+I+_r-q?P{~3f1$|XKEVne>!iZ@O|cN*(E>@vx!sDH2K?ryJu zVB;ipFnlcKe@|-CxxwkC#qmswtSFyvGRd)@Q=gjMHYxu)n_SC$TI12?T1ecZyV=4x zbr3RBH&FjG7R$MZyi_wf;=Qvmh`l}*?b~Bxi0zx0ybuvYiiVt>_@T&e_Kyb+L|pRo z$|9b7j|wI>zW)_P{AcE;0lxYDiy-`e&ZZxKue|wdS47)6*T0Q=8utZXyX~A*A3;Lx zrVV&9zp-6{2WAJ%su!9%qK|jS4Ao@fqDMSs984@;b5kN5x#7FA;}mavP*f~&&D^f* z;4A$Wg{|*s4#l!q<8YhYj-ybELklFz1zJbb&ReaVro2NHct;v?&idZA&_P=(8b}}*lOIYcN zF6Ul1v<*GBuYl9Cz}#wiJGTspvwH}RcVtphLVZ`3-6N#3m%=B$UdBzs{$E$L@TJhn zlnra&OR<6YgN#^Rk3&`8f-LukPCUfNzZ{1w`D8H%3{IJyNhH$H)3xTs|1pS|wcJB} z=>e(S0%M=jK^7q)X?&0bizI|-!xK)Xdo&hF-`cRZ^`!koZRxB=OJTqcWgv_Lc5hH3 z?34gKm85{wLjjx;n$1>niuXla#j_VcmTnu7REpMvxnO29CIxR%?XXyq2T8M(<;NHL zOg)xE+!vw^j(LD-8U=j)LQ}CtM~CS|_Ctpp1~eXLO&lOWu~KwV21*t%+>$$e(TT36_Xaa43 z0P1d;0z&=|G1T7*H6imNvfTlQT&dnp888gO5jwSM0Z#M$xAa7s^8%CjRvb)L9V`e# zywjC418DmzTs8mm6`1|V)pmH_73MDVS=1y}n@uPU4lM(d1w#ev`+?mj5g?OSLoka= z3e(NFJ_6%zFL4Q7ea6WjEXT77RWlAuM<2q1ejScGKq)*1k?MB zMchjL)M;-{#xShdcH|*5MZb-Xy7X94=zfgvGgsVC+;H&X`Y9HAuj_O30wCi2fJpz+ zG8l^$h}N&X#e}ZeWU;!haCdZyzO1${;M#)7UClr1l?O8JmYVa8lrG_OhCe5@vqZv@!(?g7v@E_Edq6gde~&Ktno902Ux0asHC0o5n$5ms9;rE|sok`5!iq>U$&D#2#di&do@n}1U6k)~4& zyw8>$pOeTY>!S zBYNp`o#p9E>OW<&5Z`(-#2w$HKOlj*Xu5E-LD?(=)~6D^dTwE%-?ToT3o-4!4rS;9 zF#$b7{DXx8j8_U`JLxE@K>7r}NqOF1rJuD(7yA>sb$T@crrbVgftN?v&I~1zEgycp zV!d`f;39D|0E^)*RqkFZHLjnjv=DFp>e(qECh5Ap`!`jQQFq$7SOxQvEuolbuzAlK zC5;A5p5m7ktOQufiX=R|Nl$UY$3NEO2W`4oyuVsWT;>zi@g`COa|XYCrO&7qNbq7u zESv#vui-Y0Fhj%6jul6&l%g5H{)G~Z$oNkVA05HWI-*=n1yH!^YU&VP=df~kSHI?ASHCfVT8z&InoJq?%e7;7U>%QnGVss5x$3tbgcfvZIW7F^ zSU7eS+&K)%y`emMJe2r}G>`P=`*Dk zlFH;}5eNJGpEMYoy%#wJ2H10x&T0)6IMCogpnWULe)-HWEx?=GXE^fAtv|q9rHoq< zIw%6XyI)qvZ*`;e`K!42F+PRHqNL&pQ^2}C%yOR61R^kD^!tmHCK9EIY|6i9+(ZT^ z#3>0<4G$+))-OCakfFBq^DSqY-6~ibn)R>^u?*;@_hXjVcQT9WSx{5c9P@}}n zI<>$$F#sl31RR=x%`q$<&)n?q-B8;1@EHGf=7ytq!3Qc>jpsWtv|Z!?X@&Q%-kD1zF{~%pY`*@=%UIh%!X5)1s`*4(8eZ}Q!C^e*Gn4b*8Q}PM zt~pZ)Bgon|mlbZg1Aq^;k-wQj7!Um=3Tr2o5#b@Fh(S~^x%K_r9}2ttiIfDUW$k8{ zo>P5Ska6hTKHvTT=kaasFTv|`Sy=kZgG&GhFQGe)6~R!N zXMyY(FoHOCZV#qxfkEcXnb45WH%bI<9jGG)GA|w*Hsk;e2)kJQ#>adRhxkkr8cO_VsJ=GDD3$r} zj{%~HkLigy+*ES-IPz6o!kLUB47w!Z-piC{{lEf(LKP_H4@K#PoAOHJ3SiF)<&erU zU$3MY5pKL>-z~~NPuoX1&14rzmNjO)JYwtv zj|fB_E_%^LvhBx5vh#|J=fiL6YexCE&F+Jq+~^N%Fbc=SF)`{tY#mTT@^n14Iie$i zI2&f|oJC3C+s=$G>0Ul5RVxss_$=kXgV57GZzH9I9T=2J15=KR2ns^BOhU3KmwzTR z9RmXf8E}N&0B|+XvY+KJrmVp+ovH)uBZ9DFOz(S~ssYg&RiASP^j#*)a~VYH8Nk2f zC%puoSb}=Z0PiFM%{zeB8Ichpped=>B)1kn1X%wyw&BPrT{`|xn$n-!l_~TtkQA_7?}jv-TWth zi5WWBJKMxZ*lWU#TYHfMy+JCIxb8kPNOSyhfUjC#|4M@cgkQZ0Zs7&)8V6CrsCG1v zolTpGjIYO2TE9rQW|zn9HJIW&iT`D5P^!4CXGajd^T+d}R6Hc*h2dVl4iA8600gD{ z20`;+V-N}kfUZ@NF{+@=IOUC3{;AAfr=$q4m;LXVTM@l&gZ!zr6Z(!Ay>?lPY^sUgt6l1OyX{yk zA!!FS_3Y$3Tk`z-@rxMKN70BZm}z{K|9^&UF~8~6@}jbtKX$nUodY5Rd9XmmKd(>} zZ_TjL%R%dXfHpEG1RrFS8lyu=ghBy1Xc3dt-!S{zYK%$VKcJ{(<;7fJYB9}(T|vY5 z_VlK%AM11T*ow{-_|Aj9RSF`GY1JCwnNroVPv& z!G>AmhBzjy;k8Lz95#db8440jG%Ba~7W#U9kzw?X!LajBfgke8oynF^z z8nVMC@Zd2fz6!Q|pnpWcg<>gey~3bV{r7s3B(()+7^B(Le%ZiaO>N@8ZPG*kZN?MG zW=X}gnLoSgi_COC%U7x+G73u{hqAiMB^fDc(4x3oz(z!sal6hzVVj747Eb zQUI}4foo72PA(WM4cU-yBa)a~QLdQtp?JVcfP!h9rL460{;u?b?H*uC*&E|~QGYbG zNos$BAwAVb;TbnT@BvnFGX?msD9wb_DlEqoK%hkV3L<}{{+R-hfa-3hJd(77OoWlr78iyyqdGSvLZ$`JUX!kjnp ztQu&(C$TX?X;}(Aef=oaCZw^)8G+ZGoN<v1ppaVcE2;vcSBIXpM--0l@v@8x&`Ak$8KP4o_ zHTc%HCNl5iR-fG~GR~3?k3iB*M`3q%oS{pmB*=^l>Zo3r^F(0gPLBPQpsXU{;TVt+ z_i^!WR6|U~s?EK{-=@0O$FH{8Z!c+Rqhw<9x(dQV&WbFV1uNoW<3_8@JB-^c$f!!^ zxEZ;o@Bu7A!`$B^~Y7_wtiU+U>9 zleNw!OqT<}LGKTwacOC{sm%FKZ6|hrsCp^!P`Ty(!1&_aOND=1I8Y87XdJuPn{Q?1 z?t1(jQXD(#u`$adI`%_Y?aAF}@<`RdG9g;jplWT-*Tq zhM+ZIzL;a()v?Is`ThIVUAK7apfcSoLA2Z~84A8gDRF#16f~F!`P^i7bVif8Q{O9r zRCxaQa;J^>>%6>i$7qDz7mv(rUyrPiYS zlOtTd7$#2KQGD_YB1Mempyw^^xjbg^$x1p{{LeAKb{Z*6`#GWC(*uT`lBUXeMst@_ zcmQbaypAqJ0T8;cX6^tZz&tBG$3=FaBybMU(FczZhlOJBjuquE6KDHuN9lhxpL(>; zy0BOk{JqeEeF?!@^Ne%RKCm?Iw&|5P<2P}PCIhtDJ`j7;< zvueeG773CH%vdW8a&OSO`zLtZL;X*_hpxO4zSB-lM>_3w9Z%Y7~Ck4B^ z1#+0Mr@8cAq~pB>7Y}J-HO!fDYz?J0>|?%xa_dY> zTcoQD_DKH&iVqFW)N(7F!#bgZuau_WNScS%m8t?Oj~$jvgkXb1`KUuLTZkI@HgWn} z-OLqh@!>=$Edc{_T)2X4qC*YFRA%&3d{o9SAQ6ob({w4i)a+jL|FO zdW^jjz({?M0C&upjuWCGH&t9g{3F+sIz{n*g}u;|4_uH{1gfPXn`8D|*rbv7`>~&vi4bHn z$zqVP%g*|aCbDNJH!Z$La1X|8Vko1GG)_7@^G;7V$ z#%-*YFTFcu?|e;1aQu#R{VV(OzBqb!WF<%BUX_x4>?{aB!pQ&aARiS^2S+{LQ9$v* zm!)UCsBPX}aN+*9_^{HEr3ZAbyFv@(VS`QFmVI5S9{us?^5Q$f&R#>!O@1ti*>{b( zwA+J6)yw9tVVCN`|9Jky`to>nV z*$Xyz40~b6_6!MY4F%ga{Y^;FZ`ZS&iUnf1l%8`T2WzGmk z#aea_y7TW)t>+{qMd!0%t)U0+@{u-h)K|uFhxa@{qS|WZ2Ko~17GDRV z2JLF!ibYlE?oRA8&e!53ynr~03sxk+a)CtdG(KnEasp^EMK%j2>*O#@zcyLCRGKCL ztX?wz>1C$w8s45Lc%%v?r0k)4v5)>da z1qjiHnpLx~WCOsC)%U+Gs~%b(Vw!eO;wO46Y?UR+heYw2XPdipUJzM2AHlN|CQ0bbIMJ3O6b zeQ<<&3rI&-<3tkNA?ZEXjqZ*Jm~~+->K?zth)ztwOlRm=@v)QdCs+Acho`YbxtR58V%vTosWd8fr`n@0Mr0rwJq(7{N zba#!f?)`3Gyfj_V_`WyJf)oDzzg1O2k_V5iQ z>ZA9*lgka?K%6(NHYsH;$JgH%Lm!e+7HNCg~5tcZ=xf7QEf0s@;}eh zUnLn#kRJV-Bl-zsjeH`h8;(suZb)JM23)%eB$hRqZjI{l;S&`=vwMbE&8pIPb(-i< zA^ZCM-aTjX%rpWrZCwidm%11<+6?bi0sTN|=O#nvX)Jcez?R8guf(hZ&{#5ieG2x> z67&86WGTQfEbhW#i0x_y!QBIxNR9XK8u{ zNSFb>oc(Tz12R5L(iIDqMw14%(^y*|c2RA)sK6lp!5S@DLJqRcr#TnldJ-P?POSee zH8PL8E{crJb<`;$3!p>T+<|P}lsf1Ic2&v z+VPT}p|11ZU7xzLwt}ABd+7I=tCMxZ8b2uPkrj~GVu z#WmX;5B+2-G$oM{P}E>KDWKRa)NQuf z?|>(2{^^CV;Trmmk%qd3u-3%RUs*JqV?4RsLx?gDtD3I%^o>o)1LenDi)-nU(ZX(A zim&wCx5$slzYrze*jIe2E`1j7cj!>x})&jJE!!bEq^FlK0K+kD2O=8;e(T z+~~+EtK&L{Izh%WgO1J`-?FS*Zow|c9O4C^^GnkGifn?nAKa;?@4s0rwT~%&N%sJ6 zLPF|8IA;g-t|>ZOK8y`|99(*N1T@&SuXt;)z01;UxXruj)lGF%P*i(k#{*nv+*kA4 z-cesAn$L~lL%*NBZ{_=uWj9V@W@i6>C1&TiRaj`Fy7QXd*y*=`bqPqvmIdX2aXw?? zKo0g`MZCjvn{VvHZ+u+~*S=~Jh$1!pf?@x8o5~@}sD;GQ5qdgdqn#q7+aflIvl+x+w~!}qCp82=gb0wckCl{ zOBh_AXt>R4rx;!uI+obNJc64{PfkjmW*dQzXluJ|N&N%o{8tSN^&Mr9V2tCE#7-Pa z;h)9p>Ic@PY61@p7_M7d2rT6;$w7qje4`kAIcrkJXgcGi!nc)4{8aDH9#{@cFsjUgdo|$67FUek`ph?O7n2;SI!+cYdT#=HCIW##AHsSw~0w+Ah z7r`$OoRn7>2_o{~NsRp{jqq51GRPoQ)wUaxlMIDgcF1Ew8+Vqn)E)R_Ot|yyxwwA% zx2fy8DQCKO70CQR3S50!Kq{IYueBf*DuXbQLvAHjY)u|Ks(W{YO&xV0}om(bJed z*Im)u)TZG!oSgT6Q;nI?Va^w2@%c{Q`geqv9=^BZi6>KM z`pRnJFVU?=q$&CdQhZQr_l=Xe)5znwkULUzL5Pf^v#l0v#(`SVvqDM9?7lPV{q~NS z56CTwKC@y4lunt}&y~Gw?UkH=7%_{&t(4@fTH}c}fjo=;NB?O|zPC^!26T#=tBYin z1bI9KdDx-kYK~Oc%W>Tb;?Hz4x@&_ER%{AIfcB+|AP#$(q^b!eZVn5{9lmzpVjh<$ zle>T9H0dtxC_P39LI+RV>hUN;+AGfxQy(G$;lczA%B_>?4bDc)0Q>FyLWgcLqHkf) zO~LCA$?Y>OXUCe@7QvknP6jy)Bf_Gj@GrKlSFQweLrY$si31w6Bl68<0NAg&CjDR$ z`$>+Gt%X{R2(Q&Al<~k8%h|R4;{-?l<#JjYO|O1}+4zG3GDvNTT7w4a-C5|)dPcKN zHWmM#`t}lx*@PY;O%W-x^t|roQ<+B-F%MK4xZvH4?*IPXVpWg^RUMf>bCfMR`GQlj zO)H3JGJ44Zrrt&Z$^iKaY_W*#-v2XVXSzZO_sa%5)K0^!k1IFbSr{h}Cl7qt7q#yW zmk;nFZB0T00d$hUp@9!u|AmJ>cHjICpAMYzfc%MO7Z6deB2QpY-cYUt7hScS&|j=*g{SuIAFu!Pkc{p0LxsV^$qOLf7<4( z7kVy~+zy7`nE!0GlMqS$iz7k4Rg^1;!_lcC(QW}lB7A+9FkL|qBf(PswI_58L(x zzy1E%wf}Zq_jT{SU)SsXd_Eri%(~!m_vEf}*y+qzWROYG#43ZM7Yvl5kMZj$pW#05 z88WQy23$2$k|)iKLB(>1RZkddSd-<(BY*a$E9H*fj~60#EwGgGo*SDOQkeVP##D)v z?rj_3P;|JL(mai`zw?t)@PL~>BCjB>RjBwo-2Zs$5`O$sBigc)W&S^FRE53}eM9Ui zOT0lzD=~`Myi)~(Q$0b$&~A-&5N<~y0O`>v7X=WZuo9N-Kk)O|+WU846P`oADTNdS zBVda;L>@tgM9RpZ5C+g7q7AY7B=LeqW!{ZZH-rlgHg~`K-28iyn#-7*+2R?wU3Y{o z>?H6R=-RcQK=bApo|`V~FUpf9MD>YBH%C}QO=k3)wWO9~(HmY(<_UQ4;*gt0luY0@ z$UqryXFxFcJlk6vFxQ*IEAxk|ij3TDCDV=p?B{cBXBe+Q>vuJJ8Ng#t>8Sm)jA`ZT z2U!u!tn0)VUD&q@+57ePubDt&Ns(8vOlI8wh@V&Lb7}GWAo6_(7%{d0vW1kP>XgL3 zq;5Uycz5BT?guxuCdpR|Mx#85Oa_(GVV`~RKs{2kdS)7U>eAjM@D{61%i~qL%UU5` zX~*F6;xlLj8SwK-^$iE|SeKq5Dvax4(zg4>_K=0$heN$gE8hvJ{n?WlnVTb4h(pu` z;M4dEAl;Bg+3nRUUzjwk{=WC>fxO2KFi^OJ!f;k9#RWLYK*mLng_z=<;}adtcmxM+qpF z%(bUaXF>Gu_#}&AyJQ%ca$_qFWG8L2^H0w^2{LpFIc+U7ft>VcQ(Q(x+{y3G_!+1M z2}AMn*eif@-jdlKac~4Y;vyq752+QDm`q1CkfAMDi<=jD`cp5JI9LGo1#V>xDRo_tK{$?Vebe zZGzwPj;3^brn@oZzlLp*k~L@ohS>#1!=s(o#i-E$$Sa<`2m`rNONC0@3 z7#b@9I;kIU_;$!y;=EttkRyrWxf?2xj%O@n$$d_6qS zs2Ual09#8yw!M(e4pEWw@TUgH(oNID+m7T-YY=Eh!UWKy^6b}1j6K(YjZK{0^U!oW zp^PgPo-$?f*k|E^}KEWH74lyCtX~r+l^P9 zISfsdD8`bZMuE_vdA*lz`Afr|1~YMA9>%_J;c@67XpuXnz(%!5Sch)%j+kNpii0K0pWjLJh6tgT zmmEJ2H$-q?pde1R5bC`NlLXM3e-@X9K~>E=&&H$Plxq$d>b}5hpjpT^u^Qk#yZ|2k zKYVnB4O~`H*j)+3Zb2QP`+TSPeK*Av;dRy?%8E0op^NZ{3l#yFjL2>%Ndj_Ciwnm< zWqP{=ns&}8_#Htb9n%t71NYcN=+KYJ{|Y6DWgT~oEn*;P{G=A|jJlb|C9-`L4SJ>3 zeoYMbp+SH5D}b)1tl3p}t7VS|hOMnBLc`!v@i8=1{`g~9uT*l(g?nfaljFd>*w zwS{ot*I_^W;fnmMis@p#EJ%VNka!myxOSBAwaEGnJpRe4RW%4b4d(O=cnD+s8Ft*K z8Qk|y%NGHkwk94GK`9b@q_S@$4gFIbTsDymaWAZ@%T#<h;#-3O`!&eM{Ok-PkW&shas9%9 z%?2GH0T3sKR>F>ukgzuc!2NXSk;LOPF}$r@*&7IbAx2M@LuBpCOY=H4c;6{e+4xuZ zyF{}q71owt3DaL?NH~;03>oB<3+Cngx}lL$dTJ33{w@=G2#+wYb70Y3BgnPRbltfh zpnNDSC=H^QcDS-9v-Xjt%gv_CKjF6#Tl{vb?Zv}__d>Q+?sBd+_UpYso4zpfEY7q1 zs@7Uv!EnI9FZHq5h=LlkoJJ)xr2mrxAO5+AD;t?n!IN2++}dn2?5YYx6TZwrWCU zKyDjjJk!qOo2tA#2GS-izCj5g4BkKtOz^_kYMljsc+>2uddG)Wwf1u%P3nP92cuVb z`%{$P1EIISB9_VM8XDxZojlGQcSFilRx!29A?NsrS|1PISAp{3LQiE>)koQ{c3aFwri?%sK0{{8Vd|x(` z9u7ttCO2+515C$-d+S8GTw!2IjzRQ!1A^gj zp2m@8C%T+ag6i$w{pt^`%&Ck07+Q5B*V>cttFNp4X;-ua5+eat=7Y!H=WkX&AeD6H ztfi@oYEeb7^FOkG{8WtKog&Qh-d{NI#C-U#%1)y>@L9g%t8%DdaX6^kIsV(h2)fAo z+99VY_93xoClM;kYV=C+vOmd4K0cOOZ02{Ot5)-1-5-db`RIwH(QkF5#M8itkE6Q* zca(M;z8L_ecSF4ZM>dYYEG5|l0Cm4MUlOJu+tI^acQ|K^Xk)3pR&N7-6gQQHgyH6(Vj-u8B_ z12&-0rB-V*&1=f_*59vOP&*2%$U2e(gX)MuyetO(qep$4QgkTPhX(1{Y7)f2;lD!9 zX@=WCi5$N4hY2OG^lH94$WkNuW;0X=Qq}nAbLGwU7wSB$M#9eFVcy3gMHTCq2x|Ax=0>pq9CC&>?~)N%ehiX}aSM`M_iG_=8<#MyB4 zFGGz@nkd^!2Nmb&za2(t>CmI)eIt!FubcaZP9OwyIXGWycJTJyjXt17zsJ@yK4yV| zf1vM*`<>~qxy4Y{;yv|E@VU9TeZE_gBEU`6&!`z6!l6yKO?3XCh z+-Lt|=~YP5;Qn!b4F`GnU8Sgc&^pK6a6hkO^`}8J?Z_9eJKwwxdXcGd&U63)a?nXs z^AoX_gz^!CXL5e)N4kfLh z@7enzc$G0qg@>Sru&0g~?4HfZMCz4yWKG+lymT{90VB8KBW38( zm9sHd%=Nro#J-VgQQgcPCu6R4J#0G^!|Cw8jT#(94TcYSoLs<*OR4Y)sMpwMFTQo` zCC1qrRBM{o%Y6MdO1Q2sx*RKdZyim3-io#n&YrrR2{?QECy7m#E%4+7X^1DIeX}Rv z-M?px)SmI1Dww0A`agi7bAEn|e&c8P8Tau(XA4s^$*coenSi+;V7!yunE=pg3!OxWd|P;#vTW&{R#EKlL^7PR20QRoAVr z)9Fv7#^acRm}B;Xf6*D!@NeavljJSluP+v_UCa`E_qt|bru-ww8Fk=|jTDe7*Y+bs z@S}+56up_?9}yNF3!OU|wNnB+y|*%|`==gWM>_wrSw1~o(JAB0sUD|;m8KZie|Jy1 zUaI0EhXnH{m@wS5`RQfk8`+H$3f-ZER9{a4*XZj5z*^blX*8}lV{Ld8 z0aFT_-uUn0l3Q6m#xiQ8HekuCRQqPe#xWxw)uJdC#Aor1UY!}0Rj#sbh^#7;-k9r5 z?whQxi{csj9C{O7XXaV%oHd&#S8WqLcw!?N`YwpO%QdPEoAJ(-7~YT?@cW?O8Jl1M zxij$1xMzc7n_KFmw-z3Dd+#szhp(MKZI|?&1<_uAt$tDM_4CvhN^&ZV?nNrdLu=_3 z`CHXrcNRV(?ko!Ju>0o?MPkj>Ja=Vj+UyVSII~6ChuwNn!z@v1vBx?tadLDTN4eSM zWVd~1NknnJs#U1tm|L^eh4H0}+aKHKd|m!tvMHo<>+a`}$F>d?{Qb#b>Y8*s$q2|aW15v9}ZqzfBPT5=+EN(cp)*9 zOF(h24lIDRCm0BM?QPuQ&YWQ`E8k)Ovns4J?EiAXjyFpO&-`<2hUMKy_(9kM^X3Jb zF?+hka(L@3#gH2L@j_>;&$6Nhlv#;xv$@e!9dW3@sL1?t(p}x-dG8y!AtS{Xt7MEf zBlU#9wnbAj<@cL!d%!eWO03$&ab+%QOqQHw%I`PoTP~2Bqy=vKlnnXXeu>=?c7obn zrDvBJff(YAZdSgQ4R^7?xTYKcgp|r8W(HU?nPucViGM;H64_S#>f#wZsq0kg<8l>(Vm~A(0_q_J$6Til(!#j7z zsa6L;u%y_|;P5xh789HGszR&h1CO3$A0AS^9d$BysW^v-yE+?ZO+R*+Hb~%)lFW8$DsAr=EqJw&rRUB^l`JdD4z9uu{@~pU0nQ_1|kyJ%qTeer&PRRxDUw z?87u>c3KmQ&6?WHZ}FdAc^(d4k_(7QX_h}tz2VbOIN+-*XC5fJ{IeX}w^*3AueYhV zH5F^_U_0C%+w&@8SiWfl|CP1*Te`9;f{07dx%$l>;bMh@fNwRK`^AJd zw%*b8i?-E4O_-ARZrWeFb$>n7SM)C0t^0QA*0%m8%vjH;y#?^bhDDr48fHTEEv=AB z{vzizqr78fiGDBNhJ z8IzRv(r4!Yt5PpzG2iUSLG;jUpuPYD$#~YRb9lu~aZt8i$}~VkGQbvxnaH}4n5eqv z$cZ~gbG;ukQLO3F%^5P-oqVTk{$mhq|9af>2}s8L8egz>cx)PG`bAHV3b-?f%`Nho zR|xMO#*!~IO*6A=Phu4(Ox-hT41%B^mp z6(`KZVXb$^Vtu)JE?@pCGGP5GQ62j^&+_(y%Dw}Yo>OW1rM?X@zY3S3+ay5!+wK>hFtfHpUKMG|MxC^V{Z$?Cs9Lb&inXHD zuO%LRU=@3j=xN-0{Xc`G%plyqfLsbxqEE z&P>T8-PLlAY3HIkCy*nESUVOu*C>}Zc2l=-9?E~ET)pGdaFD1j*Rs5@BW#O1tgEm+ zGw;VC^`S?2{_YOvjT?^&&a2bqg^YDjZA z=X0U=4>v#Q#*W1rHxo#=80k2mc#hukgIi9TZ@MqwP*?iRYS}T}xoPHQ-l2Jc2-fyC z);2CgI*fGeu4)qq>KH5{pWVDD7a5-03<9^(Ac09>gasATitPbJYmn)6QjU4hl2}3k=0TpEY{}+5Cuq55lo*48|Ls2sz?xZ1-gpm%%m_ z1JxH<1S)SzVpGqxeUrsn3_$kc&-V@VUB{2U=GVAXDb!0?_Vm8ZWVRy!RiETyunTQ; z+_QKcRV+E*d`d}7FS*Z`FJiD#51l6rfPFHGb9i7;lDS<{{W-eruXO##3^t(SirE<0 zFq13gQPMZKqO${t_m&;q{azzAp2K}OHo_JIo~uP!(XHwImosBZ>{mgV*OB-SpmY>< zt4eXG`yHo`Ep$8iTkR0P;hJ7+(W(TTHc=*ZEk_rb1P28MAAuge;Hs!MlEOg)X0+geb zsx8}OouNL)$l-!*Nvw<76MaN&U3|km$^>_VeLjw_`A}=~n3DVozyL62SOjjY=x?#r zED{4zVrKpy(A?RYlm({+LWhS0+(2ayedMzbpQ1`wx}h-Zo_v-$C^f0=GLsdQbUKP$ zpGq-rqvQHh`ewc=zj9;IOjPIsdo$c%ba`%eGJC|FwVBJVY!lu&W!Cwz($}H8>DO|oW?QMeNqUCZI^K=FGIcW?p*^fem6?*&NW7`tY$;K~$OvIz3$ zLVfWCVS8YQaCwakkkc&ekOU(Bo$r{G8_H;+d}HgKqqyRlR3|U7V|r{6xnV@H{k;0_ zG^nLy+*|;bx^%N`=L?EB<=ww09EL!mfR^QKZJgNk+Bid90JI(eZN}Fxndu_e*iLc; z?U%ip6ouXhZr-d{&&sIdpGE{y(+O}nUskr`4;Aq?i`RMZ>4N*~po1JPgyjYBV_7BX z%y#!6l1t9b$`zT6q73Aw$sq0ukw;dT94K`8&U?bIxiWyoogKgxsoRd7`#>o=PrMVB zaK25f_xF0i<^jEwmj#ydthNuH2o|rgc7$DQdn~oLxV*P$g}L6#)g2R^NwNVgii*Yx z-{BONS3n*yBlhk#j_hvIQkBzEVbC~|GTdiSTO3Y63mohA;+=s^g`>N;48jd!2Rldc(!PX0zhv$sVqEw(Xbs zhnW>E3TB&?Ff6-Smq?v!CFNnigiZA;%xvk?a zO}lhWYV{9XF)b!>bq8H>4xAy;c%?;2-rN5f!uc=!+ zHTXf%usrv{_Yq2g%*s$nByYbHcP~5H*{@?XbAmsPAIG|9A-#nU+K=zOv*K^E$#jQzP-Vwtb-StuBn!)n+SGpP17`_ zfpgx^nG&Hn$+A-ymiKjV9nR69;Tj?2A>~s2W=xBgNi|BLMEa(ZQS75D8V48=dzEXh zl>yj%v%T30~*=i%Q1GRb{l+Rdv+$SI+bM?de@aC_3% zSR%e&LehTs>pGI5-Rt1o^ERjykp1@EJi=~eOnNf!DfOI(hSQ6J|MIsE5W^C-{2cF? z8tX4`XMf5?7|u3^c(S&xpHpyh4ttEW*Rn^%Sv!?lTNCv+54>ju_nheGR-g;0N7Qt* z#*$RIhFXR7xYD$0!EJg!tw{||v2Z&Do==(lbm(@}2K*owo=TTD{i?Rs+90kQo4%pg zL_Pa*kJ-7-+%PfdKfkK0PgtcQOKQxuZly~C(@yPs6VtOShw?71`NG@(7>WWnHQTOi z4nqAOxEo}_v0Mdh|~xne9tI#PR+0=V2V&9$2#>e|fPDc}SP1h?2 zn=iDOYd{mW??_*g$ABr>*8{VRZF!E6b%1IgtE@ovD}LzCtjVp7D}>N9x+`Ok4IV<} z<#+u4)JJ8Dj{;C*VJL}e6r|NiBlqUp9cuS$LYf|!jVEQe_*-Xj3<@|$$8-6&Oi6vl zl+cs~H4rHiv~(28!&OBCYPVN`SFFHWnb_5zjs<6&KkYC+`vQdg%fKB6wG+x5$H7XV zsc1je&wn5*3@he+T!g>P!r-YsGFvqb01supBz*-W-FREi4v=)be59{C)MO5A+R9pp z@&Kojr>p3SzA}F9Si;I|sIzXvE`l3c-2 zI>Fz{OjxS3LF-7O4)9I_b2dOeOReE`5j_`^V)*#I_d%NvK1E29h@N~9e4Rgu|%ZOk>6F}LtO<7u{|t{t~XU07i|=B3>e zS|<5fLYcHf|n9cj?XDS3L2SoxJJpTc1sJso^4^Zc%prFOL}Lk2h!nu%{H41T;f zCszRhKI@0lTdviXg3%~!Y*N_y{-f8BOJeRzzqFRmTp8omZ23Y41^AC5tq@>h zl^kw~X@CJ6RsAu*Tg#Yk35Va7<3#mjwqX)QL1RVv-uM|lL0wv!)1VO?ZJLr9?H6|XwDr9I(yS&JyZZt?mM2pH56H1 zm>V1%W1!n#`JS)z+SEime*3@NsUK~75NlR~2eN5`Fb{(Nul?;1tF5qlDK@?9tJxb6 z7lOsa6PI%DmdI=T%er1^{E+9dzboSzJsphOyw@XR1#x%66%B%0~(yj^9syEi_| zNRSJV-fuaPwjj*2Pp)jK@=^BH4{^Je(L*o}XmX9b5z)w=QS>$6p-kDIyd|Mx|Id&6 z{XlnoJ0q@#B7u+I#1NcRZmv_>kG3_q9A6FUIpqE1a&+NDs1oGkX)DiN0#2Br`p!zJ z)qVmxr7y$U<8DYzJhc|;e?}gGIT8Bx@fpp@+eno(ZgZv_Q;RaG|j5;!nh3#sNlS2 zBp$v=9DO&1Fa`&fu^4tFm*Juk7N0)xLsIXnZKKk9Jjm+GbhX(iPA4r2(sTZZlt!*d zsQ#}}CCWEADBTDbnv^ z8pc;L+I;uMBh7B`vW0g|PJaA7nsFk2az?xQJ224q1U-;?RcgpAux#~MEpWIxR~Kmh zBI#>c9Qn%dm!ny;*P^wtmxE>GwRxcdjykJUsPi{utw%>{$nCk~Y!kdTB7JDt=!x5j z-?ON&#}JmMp)rWbO%L&4y2EVkZ$cFP=24M~_u5-LP+sdbfeMy0fV;kduIH?t+-_7s zJvBWki|uw62O?SyBSz));_eHNSmb5~j2gViwB2EN{CV?EUpMD9s&n|WX}0=FZZ+z5 zq4g&Hc((tE{D|Z8>A81r0N(m21|nJlVbslB7WiBG;hqmPV8^YvKXm1|V|8SYG* zQD^~xHB?&UNi>1HN*dc{*&mN2xoJ!bz`1jRjEEJX=Re>%O_eeTfh1CsIe39&I^6ls z-ES~DXf?pvS4#J^2(`|iNsUp7;)nw8W3C2FEd+M16@@{?LFV=`}uT>m^Q_2$1t zFL!%8T2$cdM%*;o=G`*{;u_c5T-O|`ul_@Nt>;LwTtV&V=6EK2%K~t7pQN7ftDCE| zwzoW29{he4W2;&MgvF)RsRGu3su>sLqB2Ertaw5S{8Vaebz@9*aQ>`XIRG3(Vi!?m zNXB@eLO78HXi$eoYBmzYLd>q!zap#x%?X!<$OX<`OZKdRpA%( zsNKU&t>DKE2#H4=#_8$ebR5@cP8m+VGn$;zlfVGym zquw2ilEa+_niPh6$lJBjbm|xFpJR8O=E^INt&8+N@!Yhs=M}PNmvmwQ?pR;p?Fc|0 zYL^lxj7Kimp6Z6(yE03NSU~OJFi}*R$d0v!n$T}VW{qpBV&<+tc*V?c<=d+EGgzL| zc|FmeyP$teu;wc=6cs8^YG>TIH`m=Mo!3_^Jp$D%--GZ}61kEAAbc(5k~B?dcl>zV z>b*wwA)1%PiM~5YbaxF=?=b0pIyzNlK|UCFck8R3Qp*UT!j~~`=eIqh79(+bf4Saz zgE9;Kib(fUw-mH%n4p$*4k|l_ny)kJDRA6KQ|w|uEi=1wO|@e+Z`bDOm|c?-Y%~di zXL(DXN7xUaG2uSEVMR3;mfjS4+LX!Mm);G4TFgW3idhQA=U}BFcjhB-S1?I<4sK`x z;!k2KuFC>xvL@{BKk^ZKOS;U8o7AKJ^EYo2&h2T9*Ir5*J<6sR9qAOQQIpu>*Vc;R zhRmDNffqKFHIVTBW}QirnhNA}Q6R?CItK^ITrooW&=!&WQMPGP58Nd{h|NqNP2iR1 zhs_MDPWp?q<(uL9CnHd2mE2uo?%6rL}@-uHx9aRGC6d-T&AQ^PYV+JiX zE|i%ODRoi+OYy`!0&q!dJR}>U38l9kI zhx29YYdxL0yoDd>DP!t4Zgf=j>!W3hG6qmP|5uH^EJ=H5HK2^20n`iywyCJ@eE3?` z5HGUewVhD$o2eP!D6FB)hmOm4snGM=I6H!v9ZV+t{#~vif=8dHS_k`46=Ru{V<&Re zYah3k`*jgH8UrEP^U>Pddpt_&+SqpzWKyCNSS;^7m^ zA3r1E?A3rjSgTJ?_Q}`q3)c7545B3K3v0^9)V&I(7}dV`i58x>W=*h05U^>!Sbbit zc^(yhkEcEYRG|sg0k!Qbcyyv)$0!#9(^vHrIpX{S?g8xwMMUm%*Hn=+-CZpeX+Oet z5Qk#q-5oR8dNM+7&9IfcyI!sQosYwt5W|N9Sk`!V_!S^FbJ%r?wMkn8I|F>##zOZ~ zRK*k%OsGab^Wv#k{1{$Waod6WAjq}(60dfPZ-Cw7Fe~+TPlwCO_GDxMkyal_0B9&&{Tp{r@ ztsK{nY*)IwuMABj7Hz{XtIknuGuc~O+%9DZt?*!*!QnAgrZoxdus&>OB(&HN*^xv5 zeW68=`xXdWSD#|C5@s0+YM{9-%?Xud9foek4lCxtcrs$c5M}2FqmgA$ZTTvudm8{u z6u@hRYJ*G&l?)P)c}yUGVV8O;Go-;ISc&aqLEdH}RQXr~O9CK@8#?aAsb0ThGiR`A z!`)>S?5g>4(@*xc@8EwBq0PFx>pI)vyWq6geVdr=00GkQ;H)>Go%KKyJa}`Gp{6s% zCf?oN5Ij&G??4sl7*dn~?pyq&BD)P)1ej?K$g>iAVrMDaqnH{=%pK1K$iE^*jsQUu z;5OJA8)PshK~5}lNDBge0Sc7Xpj!gvPdi{OULgmJe7`fC`0m?G7?$(r6{}id#kzp@ z1b-une!Xa`2iR9|&uLjiil@}~3!T1;octfTssJ57ikwY=R286o<_kUfF|`(!!$&tm z#6$HYkjY1o5gDkdA|#OAZB~FPxYGnG+irvH^Kx-W$Bnp&sW!&4>Kr~ACe$9u)u}x< z{}+JTU_8rWYK;jnEo82Ll$@Qwm8kn~NC27wDE4crYBS$hzuHZMeKC1=XcJXaEHE}9 zZ{xGEfLa5F6rg;9r4N`LC`WBczL@z@2Kd`azXCjRJ+L^QX%r7^=lY!P;`mfdYG?1l zlHt3YhqVnU^%;~)^AsgFRc$Dxegvqx%v8hGVgi8L%WW5lP+Zlc5|Zx}ZB~t>vK?Qj zT18ReGBsv`H3lim6+GFem%iMtc*=k0#!pyysyPoEpBS!KJg-M$8Q3MOk=jzWpHlA^ zUZa|(`Hy6^L9|aa@>fQB0M!*Hck;M$nud9N+PxNWRi`*wl?E)amRF~1)JZ%tGni8x z@3Zn$&8r?bi^6nX z=o``4*6*Rz<)KttmevNr8Uoep{NF$(YdlamLQV4z|415Br%O$BtS%*3n9}BZk9Ck=0%~!7>iK# zM0Jd!T+7no$>F*M`jA#%st`d1o~G_W@c9R;gbGs($c)LJH38}bx#WLP+($8%p~jgO z)Mg6RX+TUp0JHLXtcP zKz)v~Z8l*WnW-L6*(!OnZCQ8cx=6-`G)DljcJ40S?k;=~_PfBU7QD5V?aK$r?8TNe ziba$A7M{C3gsCbJ+69RmR))1RnCP+LZ%;tl)l#PBfSbvH8-IM0Rwqy^iE?RzurI&QDg5b>q>;e8&)q^Svc>DlQP?Xt_24PRp`T)?{LrV8J3J9a1f@Ep_}3e^{OGuXt}`` z5IwD;mJI>UZ=xNynK)f_%6EmVgBw;^??Wds)m8v?JA^t(lps&<^)nNN zDihi78Nb6GL%37bY6tev8Vi&!03X*DYSDkVjtM^mDEwveI4zumE!-laYWQW9ns@_0 zu22{;v0HMtwYxyI8rC{cqwtCsUDS~d#3}Ca-4&i2ZJCk1@%ZLX23m#ELTo&`3b+;Y zI3a*i-vU&PkX}ufaM8v6etZwLXy|7b=Dx_(J~8d+SG9c|5ZQa^I?*G4Ia&>W1W))N zt$uVv_oyCqx2amNR;tLUinV*)&p=bYDK&O0T{H&8W6N2#wV>^SCIUcaA`v!*-nWPc zMe;pNAa1uVRjWWiDEc#BDzLd$sK8^$OVoC)3E(XPEgn~u3q*hPPv6(0NQ}xz13sD& zJX(h#1$7!TKd09h0N(FoL=z;HuOw%xBAp#^AFTa2j=TzfFkMFZBeK!1nNnry%n_YB zS>s~h7Q@TtE97q=Hc_^ITVYiFbti7P8_>SvWOh0`H`GgkD@o{D%tW^cu^e*1Rp~KY z6%%6dM&4goaa$~V2^;+rX%T^FB2!U=`TvO28G+h5Oj!xg+4%U|vY%S#(PT@~KB3Ub z@WoaSZ)`n#+Z1~n9i;MIU_YDSI`&}GANIEOR?vezJ$#Up{ASDAVm1D<13)AvX|U=a zu%b7b*bQ&qs8Yd$H1Hslg%xyzt%9edd`txM0C)1%68wcIf59hi)q;&sDfG88LJ{5% zfD;wfEht~f03^}M^P-0~$*L}TR3kOE*Hok=r{h{ZuQ< z6a@-e+SKGD>PE9>69)l_9n=mz=Bo^fT0aA2r=UK?C2k4ujlYNj%yxbIbJ=~;wF)#} z>yL4EGmodFFwWp--EiHHd=bNEChHS(fbzc>nt`%j@`9ZzlQ0X!&Z*%1DLNUJe`O)WE6Z>$5adDfepqef=paDjrwqceLUGEW1J_T)pLAk@Ac{^+df-D${pArL{$P zz?70dGM>_=a{K~Bp(R1@+v3e9DUaG9nt&p)9asPAvh|Ef~vCXsOutI})B!h-R& zq0rA+B|9vYOM@sKk%g-Bn9B;%=SP!aeC<`wr##*B^pgLLlhf7{hxt zA35mdU+U~839s;l z?Ib#MijkN5t07GCY61g@h`0nWH}>z zD2&w^V9~qrs_TpTRfWwu!0W5i=`Kw}Hm7#QS<2VbPhqI*%YR4su_e43; znho%wwOBQEa%aZE`U6ijbAx~b8oyhYT$Pf&re)TF<=b`?dm7U*aLlL5m3hcwdiCYt z5oxDkkKNAbTOpL`%rj3f>s{47^e^k%yD!qn8heT`Z-~nY+LAG2@z<{@;rX?c?Gqzy zAo-`){GGZJhjWVpREe6Z!)RvHe9aMHu5FC{rbg&gRr`K zBEW~yhvDtDFWYeH&DE%|({+}lS#K``Tx%@+PFo;o3h1ZkwoVUfN(rK`);iaK_Y6+{ z`E&0D(U|I-^LOQ8*x$1^(R)_}jkZ4y7Ph7APuSl0)u5IbBh26dA92e~0y0DYUHy6i zm`BVxJ=Pto5HrThbd^|4MKdh`VDsLNqF_P+i3x-*{K0{9{SZ)ou&h zTs%l>GO3KN?Dgb52_J#D_pZnX{s1M-$`t)PWnR{ zDu-aQZc>0N-uR*nWL9>4e%wyuR|s)ZFO&% zaJ_Zk123HYY+}Tn@|H6Y+-FZSo9nh+jl$KhkquL$srjpOsI7OEz%FPSppPUtfwh{Y_PS8QtneJCfm1o2Q zWd>gB`2ZpyuPze+*5L^?1{pBTARcHF*}W@t1$f`O4Su!OJD|IfZRH%RyR8o1n4MPo zKk{8{uvkdk=uylG&1I`UWXjs8rO9bK;azEy4j~WOrglP?VLntQYd}QIzC(BZr=Vjs z4JZz6lt zt=Ymustgm0l4WM#Xs&w}OUT_8w9x2Eh7eSgOfphF=;^O}+t?ZcRm=0w!vn}@(lie7 ziBV=h4uZ)ts@Gc@<#YjL_}epX`rQ%^yl?nGFY>AdIR+K?K^H46ciQ<736$%&iTF`m z&Jl0v*$-~>ncxAu?&$;f+H{0#Owse=?h!4B8dMD%!zX66#!U_{hQpIt#wL(5_I@I} z{5~X~GyjKBubnvwA%CZG)Y!FS(<#Rw;q(2ZH zlyuic^02fhqO*Xeq7#zDEd7@DMX!*5r=o8Jdjqkgw-Sey8zbix$(+;<>-lntk^;hv zAx!-YD=B9m;cWRM$V-TT^sxI88o+=>P`Sv^b;jlNcgPB=H%StKY}>=ueb2jVUd%4c z=GSVQ*NW6uE0VJN*Y)0{y}m23zI~w93*N`~a%iVq&gpE@6!N_`Ssg0KfyB))20&i` zr}FhP?I7n7A6yfOU{$*@_sCM9GCE)QPI^cgJk;>c0Eq+`l%Ikvbdukg1)EB2#vR5G zaOa~7Z-NAD-B03gYH~_tly@NHVKT@jHnqg_ue-9goq`jIkZ;-}SL%~bRw%#z$xkE3Q> zv6MoeZdKFJ03*@1wK50XTU1oqh?4f&7powBl*6o0twAg+cRoRBZ*3I*UjXL<82#Xo z1sXVcdNf!P-Go2`1~bVF0pc2-%)n!sSmFN(NKp7iHdBO)v5pIMcVAXf9jGD%L1whc zY7&}e1*F!*kyA!UP?q~UAvLBkUf@|3mc}xkx%Rh!g;+wgEAyW`t#eR-Lrv0vhJz6H zB5lar+GsQ9=K?0N9NBpH0AsbUYkUNfnBiiK{o}mSm021P$7>)rPo&ggK;U8cD z2QLDR2+;Tr@EWec6Z`-WCgBjq;1E8+4+a4cG9U_p;0_3o23~|C=pX=4&;l;P5Ka&U zg&+|O;R{f31f7s!VDKNrAPYbN29F^b%peikzy`sA86v?Cga8@-0UW@=F@kXR0D&07 zfe1y74w7&fq~H^jq5uAmH8fC_8G zbu{4?Zs8v+z+a%i{)%A~lHd%=U=z5389-qQ&|nMZAQ}E487iR&YVHq@rwgc{6O6$a z6rnMyU<-a=3~WIOw%`h$AOgrUzzDEz?H~&SKp~_{7>@@Ggg^-5fC^0J_c|*J+{|V8 zM*NH``)bb%QZEg@h9V(`3!o-yIPW*W01dc+Yj_4~;)-WTuML7PBT)k&XK$Z0MvmG-tQ_RfF%y#|F?VWZy?X=Um ze_m-c(hnW!tiATL*N#w>mqdcchyV8N80bKm4+BZm!y4C(ns9_s0*AQY65 zabhKRir3hD{chr$Aw(#%bh7JjH(>5{RdWqq#!nNrua*WiL0jNbz?fg$} zKj{JJM$Re9q+y$n|O%yJN-qKsF(svnGGh7T(!GV(UM|0`5 z-8wH;$#}kadGiu?(x@iMJ&WAU;$x)$fDI%^hCaJQHk~gWot+ELcVbwn z#`VfkX8$+9tDLV0JR-i$rBjQ#`sZMcnqMOo%na6aUC_iF5gz>8jdVCzc+h z5rmsN`}fKog|=i;&mPj zj%lDO6J$CrwZ3~FUfyF{i<>^9a_H4LqxJ=%4g%-z}HtQ zx!Miwme*I8?1hhG=nzA6nj=DB`=cT{+iJ`)ve??Dda$02$RsZ09u9o&VUChjUMov5 zF=BZ>m}Uae4)sS7ODa1#ZF4u4)s@(&caHpqes*nrcXiE9t!lX5>hZPtjf-3*P)9wy zn<0uTFAzFS_&2v*5QBSk?mnwu=|U%$3~-H45J_v+p#T;8I*t%R8cSq+3k@5jq;%~h zQYQLyoQDa8U8(ZtYMlo0@49ErZvAh$H;tE8f071rm1~i}A0Ank(<~KMYkWU`1-e8h zC^09|kM+a}QjMu9CpbS@*eXnsq(3Z8gwl6#&f56b8xIq^JO%#r5sj$q60V(LlfnPQ z(vRVc(MCN>^P*TgY>s7h6^I3DdsFTn-Ks0L4+a-XVec!^v>9;bB#Q7SW=j0~D>j7= zrAz#yp9H5L-WX|FNyIA%vYKj`dIua%37>iw3xcKgHSW6n~m-XJg@AJ0!kSUy$7<$RYn(h;`ORchaD^)aO?zAW< z8L-1a`InrwgJ|bgWdW>+J8^stBQql{NvtS>QS3$}7-RUD#0Z$YD4kA%jlC|LASFTv zzD97ZOoNr{ZRI*JUO}HZ0Ax=nnV|{{DN!yp!^TPf6`JAfTCOqWwOjd~w{=9kHkPYz z&tmxsBhd9W3jn=L@6;9Enj?34KJ}GTP0sn9)b8_WrCh%436yvM=d)Upp zo0s!Xb{fWL-vXu^imHMKqVkDo7@iJVDIVG@P>GeX%w*et8{%pwakO8R-qW$oj(>hu zHwBP#c1|9_JsUXL42_)M7X0@cB}#LTc3e1PQtO+b=V`*2P;}Jk?&O={N#z8jX&Dd4 zS$-dIK{Jh`ws7JU(M1ar)Bv^|w?oh7Llx3tr>u;>G&{wY49na^`*E+EF)%&AfPa+L zy{VWJNL*;@CqRr+h=(2NSI=0g6D*b+^4-E@fD&ch*U?jdxvxa=Ij!``b6~x| zN-+KnijEN5i_(3;bGujzsGp-nsnr7Nv{vZ+P;rydlckGAuZ{iVB|y2$d2eIyPZodN z_ORdEA`YKo;p#a}PYW%D<6{D1fb6odMD0l}8)KD-#QCX$Qk}8BemHGC-c|u2$)_h+r73c5Y#}rI6 zDAC?Y(L(|quV~MEHl38hbl2a%aH?I;1ig(wkMrrAK4QqOkIu)~EW<%I0b=5iIcnt; zEWL{Cmp6i0X3NReLUU`b(7zRVUmaIh0|%= z7(&Y8E6ij|J6MBE4-IblfWuQC9X!~pX=%X?hB-Bu21zn%`O8qb$sfqb2 zo}AePM7+Zo1>h3wwNWd2uZY#kvo6i7W_E2RZexe;ieWh3jLgl>uG%X!VIJ)FUB;Pe zF*kJkxo{K8523z`>Im6f_Yx^r5_lf& ztvo&KdYG(zl9e&NJN#=Qj|SN*alv|Y)hYns4yfjIL(=H{xL`5xPZjf6kCgFh9ofAN zx)QjV&PsXk1&y3{cuc1pU{CI<(_oU+g-{GQWdCMR?fJFyyASHYL`Nl28%~{s%EO18 zM-|@H^df(DB5Y*Oh}|N`*F~C}(9Ysmz_DCba00CDt@LM9)D7#F*EP%&m)qRkL));+ z53uW(Hma_v+O@0MZw8!opp}uS0F00D!ZB_fuDo zBu!*|J%c2mol{MysRW3`e&pyD*H6=^fo+ z?uQy(PrWPyM;y0su7|@=?Z(h@V3bdjfXiA*4#ygxN9n)FgoKFf;iDgFgh@yR8>n7h zn!`qL#zezw_~XchyUpw6HH)jbS(DeE(tD2W<~+m$@3#tmwA1ZMiy`m#suuXpoIWfy z_~O-E&fcP@k;?~>J)+*{Xj>n>j+nMjS>rQCNS4MemN7+`7y~?~7t(%c(t4=+DBt^o z?QNBPf1%!BUQxTntkE+1%BD>)$I5q>Nxy zBhi`l5o}|+sE6_}t*&fvjO;4aQRnHzL`c+la4*;;|v99AK~ zdB5WFl5+BQ)QdBLkR=?&Q&&+BJ(dy0VUlxbHtDr*Xng;}wKvIpFg{G})%=p^b5V8h zQ4WMJxvawKKRr~At^ZDRYct@$i{$a@S997mcxt{xw{`6<`Jte)X_~<8e3Pnvz_8WV zQ`?X5cVH}R^GIC}D|bcC`_?0@^eByqy}n>uc_QLolIfH$wA-cmnAxev4S<*ZD-J(Q z0IQ2FeAjDuZuZ}CZARL~1yPC`wRn8MRD29CgkfNWp)^#GKu1SVP>|~c7gMFJUXb?v zy(}#5&$ukYNVtW;`FXRT1BJ^)i+PzRhDMjWp;dp4qZ>&5O*h24#3?(io1o1zwBWXo zsob@{M{>4fqalTg7Z>g#F{~5$etw_J=^^QcQRzr4M%Pwg5C6^w+u2)3A4pRy z@7^MLWMLP~?A{-<qzYA=*>Cbt~&hN&j`yHGE6JW#03>i8* zUdg@dvDoUj!6gz3tkj8gKS6@%I82I+%zrhQN}o2$FB9S7Ye456Pbplu?`l52>wc4U zdxzTQztF3z?Or6al|RqjyC_F~Wc}C#y?GfHyuVI477=o}Stze@JG;2|p6nES5xChVx5Y^$Z#2nWB#_OXuf`LQxXELeXQg%A3D z+4-mPdJ($*Y_fPkE#U7dRn=R+^=uP0{?oU7237vE`|TW>w^&_LmvJ8?&m^4{ zJRsZSAfqnOr=Map3MSpT=4hr0kv$44PmI+C6{?seBCa%prpViXHaccz=iec+{ViBq z_k&a(%{7Bt0#1koy`$;iKpc)1>(12@V_(Yu5gM{f-xgA*2g}7@=>VBq6&?u}^(tZY zQqfs^T7{w*|L!4x5_@&bK>O2OXzl*7<~7Q?%aUt9n9NAQaQIKXuhl@RU*lsgKfqiJ z-kBXI26h_DL!|K01oMmBL?sLD&z6=O4HBU;HQFen1qW9zBDu)%a zRX^YQA`#ktP{NK2cZs36K4OY9P;K5jYI536wQGglWs<80fKH*M_OnAH_{zfiNbG%M zzn&UK^bh< z!cH8Z&~u)ZW>Y;st zx1Or5*f#BIq9=oE8PxBn)fq4E5M-WSrn7#;jJYM7FxMalja;3NLLv=G@1flD*P*VB zH=$_!vC|>nrOOL#?H6Wh4U?(DP2zXKh-YwhABiF!gYYZIeQ+HnOysJnrB>sGqO!Mv z%iMPX3*zQz4y0FPgJpRlmlx=cIIBC*>WkNF<*_>KQXkad>3wU~A1Wa^0?+lu7ZqTn*&E z&{(!N%P?qL-4H0x(Dz1z71whK1S-GO9jM*3ON1_?|KJG zNywi4tqs{=iNhFovEPC1MYLTEMm$}KJh9gHq^-_yQ1seK@oLdEH#QZ4ZB$I!<(Z1A zbA#*1&f-++< z_CeaQB9`CtozUw$)Z5?!Ba;pJeZ+=jFFBv$wf134^!!xP;dt9W4>z$XOvv_(S4uVv z*T%*|YA%RgkK{t0I7hNXK+qpgin!Cj`m`UPz2+swhQ5Ujs8`BPLLck;353YSLpgSh zg~ub|+doim>vWLvsarcRSoWxLG#l{p@f9{XRbt7-k;?gX;DFyqv;0zt?!J)ASSMu2 zVyv$aYK~!pIWWBd$i@(6x|2u)C=xqC4tgYsPmQ}eXnY+(XYAAW_B%qpSCa*C$RoDRfPUivaNG| z*Xl8ZpEr5CoZ!=|x~-nPJ~A&Ipupa|AUFrhQXRrZ#9H#xe(vpzF*`HjDNd$j;h$$m zOc7r7rr#tPAv{f1Q;3x1Q8uLLModLTLJkoVaMtcJTCHZ9WWok6n7bNB1EqB;%R0i0 zfGGWaeDp?A+GZSve0sC2C8sP$H)HkHXx8##V5?JldsBa1noTuf6pN}K0e_yM0Aa`E z(I)^-0t*A1DO^GCQzLk*q00F(=fm|*dfYP{CDG$`kEyHXqf6KrtyiJpoT~f=J9=J? zzpq5es{96L(3)h2nO@(~@fX{|`SIdJ%2Gk!;^zv?rk~Y_tm(3|^tj)e@54O^daKy$ z^O|YV`#W#2FfJr3@|<0e6wF+%y&&|m!V}l1^I>8}?Z;2!#Ah5i)%yzN*I(d1t;tH% z;DYwzCbHM*D;hA6LzM*rBr4eOBVg5{um<%-6NH2}n^gvi1zVW+t~kyJWnxNLuyQNi z#6V+z-<~416SXY2;Z@n9v~BwHI~e6IV8Vs>DY1*j_&5XIWXz@o7<{LN{2W`RW*OS= z(NrI;j6gcX=3rEs+(_$1$^3)A^aafV`h(LI@}@2@60vdCz7aj~G2$A}R##vgLPm}e!d6XlC1 z<*B@ zHt%Xx$ZvZ7lo^lR;B7qgNp||*@x%K^c7eMBvb=(Yx)y3LNi*xQ*!g-rAv*au2>^(s+qbRkb!410Jw=o{`lmOmLZ@VL6|QarJfm(A^XWK_4EjMlkzwibDkB6JyU11qDf-HcCMx&rW_qa%kRgH<7m3y%Eu7ws{LHfbxR-@y@0@} zQv_d7r{lseo8gQ~ZPgU-f2hw-TMn<1&>ykcRYB3@V3V|tTz3i0X-EY366%)1Jz#eC;Aw-#%+w=YR8bcV3q8NdKRIpcj zd7N&MOYHL>(q)Zts(vMe($;r}V2_HYh{OREbDcc|e7U~nK+&pjE|TW<_C6#DOc*2y zKhZ6l+Jxc9dl>#4VQmRF%lo>3PD+k_L*v~93)os|*5W_!V5Oynxoa4I_>effZTj9m z08`1KItN#)&7Pe67yK?Tsmw2fxRki)+)xmcl+pm8^sg%AMC!ST7E#K|DMv!n6VIIB zg02oPD0mWP zAw#}+5kJyQwaTJ`&z@QA(rz0H04sS2b$0O`exr+H2;SLti@=IwEo!PVT?;q+_|ADs z>=1{RZZhEUZdsvXt%lXANZ@){L??r^b1b4B$^N3m;~oX(6?z?Ym#Q?J5NwsZwQ&Np z_*!TzyE5&r^N(^{aOl5F$WvOdRxD@_wLaJeMr7j7orQt;f>g#ua7sphYiSJ#9`3TX zYE+D@)b^rAJ;M6&7T$wSk1&`_hzR}X=q4R?A0;Rypoin=7q0EGRkBE;CGZ$^$*Drw z-A}T_(wI?>|NB3I;amfmvqHuE}(V5o+^fGY~rtfv1L6~U$Uf~<2MWv!}dH5 z(U1gA?d?sCPRi|SKK7tYhCB_QEw|7U#H_787f6oo|DJt)h^EQO1%bB5^T*F$3z~)z zr#uu{*vwB~o>5nwJisYM*|*~o)3I|AVS+E$JBp=7(c9W3DIfo_VEM?qPO11L(Y#L; zTV-jK-NNHJA?&!VP)lz!o5mtKWNtHL4d%n94vUE$dUa z#070depl=$C~1&+72Aa$&S!~T3a54n`-$SlQTL%L6IoqkjW&F3%624}LeTp0k$BOBC|*M(3kmg$8=Z zP0ip}C<|9FEW8A^so~uz_Q%zB$1zU-DjFgUBO|R>>Z1|M2qt}k;^QSm%WjmiRdwM5 zHzHkzB17HVMT}g`M&qtb0BNNoKKuMYyH&+^s9f!+iZP7C-q+O{Rw_xxkESDZk_cum z(4v`X7oixufDBCYAxEDsNj_Ci!Ny#g$`;svfaDpt*An&lAh|BcjUgHN?~g>S1uvbS zV`jd>N)jL&vQL!Dgnree8ASq{zU)3%6|Pw`YBAg+|O8ggg3Ia<)N5jZ$ps_t`eOV_2H!sh>w$5uUP=BcvYbYEP}zO(avN4tt|iG;iEoPTd?lB!1@50N9gFpb?tiI z-uL+$1V{i@Gd&HyasHqfgTRTj0~5zRiK zDs!=1Da%$dXeh<)vg2f{C)rMv105*hwYU|ZsL@oFJ5~3Weni1eS2Zmax!TPIrK9#; zOg(h}cp_^1c(JR-bSi!YL1VT1PUowW8KG%?CG-Pbg2)r*GP?}M>FCsF)e+jVSkl0nhuFUjdqkPh4DJET^7q z(ve%CyU!NkF74X~7CN$oF`@3Yy(T#E4f0J|uXffON^mwld|1B1fnJtEq4YYc7B>VI zg!Z6i(XHT}X94PydUhVpl0Pk#4z6NyJ-yTA3j#;2f9ho}j5nmY6nKVyhayE}WiQVE z#_srKYWR?|#>VO<%jpBRR<<+Brw<-43Cpc7MkeG|YwF;UuNNj!dVpRx@#5s-O2|iP z%B;zXyMNn^mnKXhr2(E^UiECYz#C20rlpd_3vQ4b(A2{b`za!jBs>AgYK6-izp0L> zSf1bRk`i52gSDBC(<@DjgV(hWC2voT9`K~P`I{i;AOs0j0+Wd#qP_0JxKt+NY>sWZkY($i+E|r|k^t3Oq*@1K?3G<< z8xUPY6CJq=MatIaa+1%@ycdwVbLs5nLDY|+kYgWuQ#H00=(#_cdEN z@<28ms$-g&YtG3uw*KgMIVEF!SR`7r@Rh=7eUu}OZU1A=k1p{|sL^VUa z)qwAitEu=c0TP4ou)#=N&D9i4bd!0FdemwG31)p49LC=VGB$Uu9S9m?PyCP|NFBpS z6QFCVH$U2YmM8%$I9q0rjfVc&-g6Fakd+G-b7IidY}pK*bx6K`@CspnJL8J&CX=tX z7(aB%2_94>5%`D1t*xWn++Pmes)6-~jK{M263G*US^sEA{ny+)jse3Rscy2{{7R~iUEua{mM=i8%kNjpFlP5Mo=BJXZyzpD8qeO4 z)nXS)lD_;UY7u2EM~>ek4-Q;kRG#UNVVlT~mbqhyRl(O}qKcM*I zJU2E0^YCnbFl1h^Sn99KF(%ZRG{2b;@_PcgWq0&WvaxVCQPP-IgGe_KFiZ}5YyUrd zxVzslMn`&Zzq@$>28SW;_#F7Jp!kHu6}oD3S+ z(tZ7gwpq~sUp(fXh)xH+^ervB{{DO^0d4$X1qbV`P+hu);N$S%J)|^Ez9@w!bWGMs z&YJ4(x$s}>$M`4|2F4&4!YRp^oYsTeFsVTQXmCMGK+OCxa<`@3T)8MJE<9DHd0IFq zVEgNK{UXyAL^U0+FHX~`r+htl8|`jHQm*{ZxQ7kyv4NHkqX-0fYYRM}mON)wdl&^> zUzZ78oeVJe|E47kshoXn_(UdOGeQw+B*Lk8Nv7=9CCC8pI4N$(wCXQa7FSM*`W{^q zUmBdJt-leMZa3a4nAm(MD8wzG-DiQ$0qk>2 z?uT9iT^>}4uQv&HTFO+!3OeEZ^@PYzbB*qzoe)B$9uTTAz3@Rm%ZW~19w8?a4aIV zgkCXZWfr0{xURoA_Ityn6t@P46CFmbG!}potz7W-IoW_=EM0cJbq|eyqG6J{R-^IG z03iedGTmnDw#ZV3Xpw(t7B*7-*Wyh+O{ZXelsh_z&3V{Xb`GnD04F?zy4Gzm0Vkr!wPnN0?P*U%RVB z4{a<5i-|i-EnhIq31V`}$Y%YoBU2MhI4eu-&Iuj7>}P07_}yAB?gq>P$$QV%c0Bee zlB^s~QUqm5$H!UO5}hA8No@b8BiND6b$v9jMgoaq7zk4{t+skh=oSDVcCf0o_?sZd zP^od83c{ZZ%_uij4x-0*68>mJaiQD{)$)kh4*P-p^H+@yJpg z7f!Ws#u&cN6sy{k`|M4T-Kc)-?1}$b^sC^Q)|)L|T{Uuph-()#n1?U9L7g4eabg-A zgu`QXP@>*?DqQ>xg?M%62ahOO1h_I*GuRpVxRkuZ0DP0$oa@9i5JMK5iJd9f+ZyA% z>sRmVyC*v(&{$Et>Dqh%pTs4|E?KGG*>Sq}&LDFOi0aB?`(Of^`wDi6i!lB z{vVS1FTHpw{8@h3ED*3_J>vVsqh+Z}uZ;zJv+g6^@;xH@wv2Yd%l+}Vk61rbB}b^b z&S6g$KUuj@wSSD3qFBvYQL((aS9djiB}K@#nsk_X6zsc-OdReU_jwhrn=>B3ZhCb! zGux63!?c2+~TpaLX%R=s!r z4ll|fpu-sYz6AaM7L!L!NMOCVwHeeH{^K({|)TRAJO*Y5l?6a!NsLs8l3~DW3 z1W>|jY8qM$NM40J)$kUf1fo)o#HT$8wAYpSO`Eb?$imlKP0q)9k8Iyy@2_mH*TGXV z@l_V1NPhb@64L0Ym2jYD(LP$vtqLw>vVfodOuRf!m+J-G^$hF}let4AOI!X%)amsH2vkt!TrZX zd~Hy{cn6AdGga`FIYOc?G{zewOOB8;IXnhBRh4#IOB#t2td}@;_^p(8E6eH=6COHzAaLHSs4I{L7zh5zX^=-U{AJ&H&X4vCs=5K;{qWD6a4 zBJKa0UT!1Jhd4svO+<-Zb_P)zSqt4ngp$X0sz1F{iHXecv~$_%)?3Z*jE-t4cDfv|#FG(UthmOJlNvdK+>3|3 zI2yIYdZ5YF2GGp9VEj=XL*-eOI-mE4*eZ(3qxJeYBsvc4 z^*!f||IKp7 z2vhDmwDXM&3;a}qPYH-Na!^HL?ZCAkKMg6?DAYkxkLn~Ddid(HUPk>q|CCQDW#!JS z@W488c9p@hOZ^`W(T{+ctGfbOcqiL@>fEk>yyog3kNQ4-%}p&>A;paB17oHG%YFBT zAp-TL5z8fs@ao8O+tyk?mnag-6wx+dtm=H7!G$)8rwjx^@Vk#mP*aqyyVGriN#Hncw%YzvNYOt}@!r!ZW2< zCg;er;N+zhNs*O_yx2g;A5N@&Dx`ke`u$~cDqTm=^p@xjyO^}^>^nUF zh!0=HA;iuoC_ZJ>w3ed)`N2V84YPYL?hTvbCb9_Yr6ro^ziU-CGAQ%Rgs*QH}I?i6nq7u(o zB=xZ_@@?U_n2>Zo-nFGnFs-}a8LNky9_ArrsvDr_1tGwh#;8aspUrh_vmre)Z(Z$~ ztw>q@kp0nTStwP~**Rj>uvSRHPLc@Lcl_T~_^(HyvwP`D#YLm292|74KphOg8D=*| zXDqJFhJem~Y4Q`~tz*T6&qP`Q;ju;(xRvtgd@l7Nyak}9*+7VLX^3pJ12NOS76uRo z{@W37vop~l=FTM5fBNivT5=G$Lxts)Vy7;;e*z~L&&#($N9O)`JA6!K&;g}}PHz=C zQGr>Q{>_B6>hIdx=m8Yy?*akB#riqMXf0k2mfI{RbUWn# zOLMvaRCI`?m4Fdy>B5*Xgrz*bZ+n`R$lrP4krIdxp=zwy2$RT%<7N?t7>8>!5VbQ0 z;*2!al!h++p+u|1L zX&d%ipd2wefsvnk_oDyS#V|g_kVro{6Ww`YX6nb7LSu9>Mn-*n^f z>-F}WH4i8q6JF}~UaVhdqoS@ZOUxdn)#+&ZI-BotmR(koDqTvZ zU9&;jgkfMcC=LcILruX9-ZIH49u7$$8EC25B7yE}m_OhoX3d1s!rSw)(r`LGnGLg( zcU_{c#NJ1}#Uj10oPNXYgT0X!&A%j9w9kQ!`1ANLZIk;C$pDovSkcT+L-2EE!}@j>{F%=w?!#g zHAB7%xW<;;>wy_K z^#zDScH!QHUr|4q(k!<$8LRAA{9lV;QlPv0P0r*hj(OHo61Ooox=YU>Mn3z2!;4Mi z7JJ!n&==Ph2s8Ha(GU~lrF$EUwpRbbm0CPeV#NWSZhOOFZEoMm$(KXw0C;4i)s!7c z36ArKdjb3U<9~S3<$I1?t-{70ud_U4DF1F9!?p08xvg?_UMEw?9>iKHsyH94Zhjcq zUkcxp!#ED|7YYXTM!?0xpk=6S@?9%Co!u%_$Ti{bC@APztoWUwKZC#=tA2N(Y&5(j z=6ZWgW<~OG^7?)JOYOXy*wa7(|9gzZUR=cd5yJ1_4`OLt3#p}_PpbbyGj=KaIDXvC zmll4bLBOhtm4l{ES^ z=0F{y=CWps9_{F|wkg1@i=OjT1lv6=#pBsRA)dMkGdUrz zV@qQdg!YMR*>)-=MKDj7TmdJxkfkdIrDgIjHp=un;W-a=|N~^E0rBV^O zq(<19^WKj+?|mVGfAfdblT#Mwgx=1QNG(GD)kw3&mwUR)4P^YYrCQ>@KcwFS`OR#o zH~R&KvMSgaAIRV!pDzTd0CARmAed4sj!`ONtvR8+_rAv60K+9aw$kL8&AVbEgQD3I zVdSqgy{$IeqVYe#zH=-CjI^iqVOYZ=@2ITP94&>azU9&1;!L62y~xOP9vS(We>0a4 z5*iCnce`Uqyd3O;9-T(V?dfbcYzL~Cmc&JFtLu3b5~32a%^p%rd<@OHS~ig-OJS7s;pjzu~~K_TvL z4~IlKFpdUA{3V{SC2C6gytul1gNp3>umw(}v(eWdbqG#2tnr_J-?_6?zKV+9>kT%# z&MYE*5!Xib@r84bx>^QbJ@xI~KoNW5#TR*La7W^7xX0RG#^v-(`f8rKzd}sakmEn3 z6HYVQHrAb?3DLs?14u-2r$L6pyC^q`+&Tod6-tinBtWyYolgi&Z*!~6JVo^^B(trr z>85){1^om>Pv+e&UY;n>gJobQKfoCfCtO zozBkwmlgR+j3m+FBu~&xU7onQx$yn&EZ)Sj|5ioKANc%mmQpAYM5zylj>iOQ&jW$U zab^#)s#9=RI*-B|MlIgH-K$)54lM$uf!vjtaPx~?T9qkne}kdFNGZ3T4aML7Elq5> z%I4!mt|Mr7{qkBz!bqGiJ6H|6zvG)PQ=W#ZW`bNa3ik#Sl3{nh44lG1XK!q$T+xL| z)=RGvB$8A2pY~*0TV0->IX;2&gFM)x&I}v$+E<{NzIGTKtNVe|-FS6hq%q0w<<$q3 z#OsSR8V8~g!2ZoHwdL_G%8}zLDaihrC5VSui08`fg^3m0~$)fH!UzVu35 z5%vf}NSb^tV4xN=WyeDS%0atlatLA*HkQy=Fr;Tt0nEdk@J2J|NOt;MD8O1~uJ?U~ zFD7iRQG=*^-s6|0m1bFwD;4xUk2=I0I{jLNI5N-C zef~m&(sCS(TrMKpv6tWdJ|dE<-v-F?$&t9L2uv@}`EI{rx1CRC8BeocGXxFe=)ABg zUtiOsRcZJjK(J#0Xg1id@ZtLUqXvwM9Q}XlHGgr|B=vZZ!?I4` zUXrK{6N%WII!x?8T#z~GPSeaq3Zmv;wWvd*mo$uAoYPjj$@9K$ zbkqsGL*QsMPjtxrVohO|{(Cm?2hFwdJY{r4(lBnJ2$9?uc+?+5AcTPh`MpG7jrG_kYhXm|yx!$ES!O)vp0P|y88meK5kLtxMu&{660oHx(&jJiN+o-`i~Q#X zH$;2F(v$~5u5t+&jFD8yJu?Dp%98QpS4_0)@EN3jD* zhC2e$LBz0{sO)k@4(cM10OfC}bV`V_#?&Xw@T3~!9>5ttF;w6SIJkIi0<}Lde%tbQ zNL-?k8oazDn+!Y!;#c*77CY)0LL+k@-x T|E>P(m2cAG@?upYhJpVZY(fQ| literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/BouncingBallsEffect.gif b/docs/assets/light/effects/BouncingBallsEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d47c29325d8945926ef6c17854d6c0aa360fd37 GIT binary patch literal 526982 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

    5`|zrJ8J~h6 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

    8=VH(!Q%`!wPDzl3s$@vV?FPH|pwr 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 UK3< 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%0AVmM$cPmLejK;Ec7Ev(yKHE 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 pV5~2}sRU59=dpSZ2@*)&L;7 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 H>IeJ}bt4Oj literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/DemoReelEffect.gif b/docs/assets/light/effects/DemoReelEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b4602cfd0776ac3d05645c6ea3ccd170f9cafc7 GIT binary patch literal 24118 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