diff --git a/.cursor/rules/jfm-research-workflow.mdc b/.cursor/rules/jfm-research-workflow.mdc new file mode 100644 index 0000000..ffd6513 --- /dev/null +++ b/.cursor/rules/jfm-research-workflow.mdc @@ -0,0 +1,30 @@ +--- +description: DynamisLab JFM research, decision, and drafting workflow +alwaysApply: true +--- + +# JFM Research and Manuscript Workflow + +## Round-aware operating mode +- Identify the active round and output before work. R1 indexes evidence; R2 designs the manuscript; R3 builds section dossiers; R4 settles author-facing arguments, ownership, displays and section freezes; R5 drafts prose only from frozen R4 packets and authorities. +- Keep evidence states distinct: `mapped` is not `read`; `read` is not independently verified or artifact-audited. Use a compact ledger (`read`, `mapped`, `not-covered`, `external-inaccessible`) proportional to the round; do not let governance overwhelm argument/design. +- In R4/5 prioritize the section question, bounded answer, paragraph jobs, display logic, ownership, interfaces, author choices and manuscript value. Do not recreate R1 inventories or rediscover the project. + +## Continuation and context +- When prior decisions matter, continuation agents begin with targeted Nowledge `memory_search`; use thread recall for exact prior discussion. Then verify every operative decision against current repository authorities. Memory aids discovery/history and never overrides authorities, manifests, code/configuration or immutable artifacts. +- Before launching section agents, the coordinator creates a minimum context packet containing: exact controlling reads; accepted author feedback; available material/artifact inventory with readiness; requested output decision; exclusions; target length/section share; paragraph jobs; concrete display layout; ownership; and exact questions. Agents stay within that packet and perform only targeted authority checks. +- Cadence after the initial architecture: present two detailed section packets together; receive author feedback; launch two tightly scoped continuation agents in parallel; then perform a coordinator second audit before either section is frozen or handed to R5. + +## Tool routing and execution safety +- Nowledge: decisions, preferences and discussion history. Undermind: external literature only, after `get_orientation` and `list_workspaces`; literature cannot establish internal results. Repository read/search tools: internal evidence, authorities, code, manifests and artifacts. +- For read-only derivations or scripts, discover the designated conda environment from current repository authority or environment listings and record it; never guess an environment. Do not run CFD, training, artifact generation or expensive analysis unless explicitly authorized. + +## Evidence and claim boundaries +- Trace claims to current authorities and preserve solver, geometry/configuration, Reynolds convention, case/seed/role, comparator, metric/estimand, ROI/window and artifact. Keep internal Legacy and modern V5 chains separate; use physical configuration names in manuscript prose. +- Use case-specific periodic, transient and steady metrics. Distinguish sourced fact, bounded observation, interpretation, historical/negative result and open question; report gaps and conflicts without inventing citations or numbers. +- Image work inventories existing data/scripts before proposing panels; inventory is not panel readiness. Label existing derivations, independent checks and new conjectures separately. + +## Fixed scientific cautions +- Bound positive SR to Kármán/cloaking. Illusion SR is historical/negative; CCD is descriptive/noncausal and uses `action-correlated correction-field modes`; OID is claim-free; steady results are contextual; experiment is qualitative/provenance-gated. +- Kan99b K2 retains the authority's exact overall `partial pass`. Its opposite mean-lift sign is explained by the CFD coordinate/force-direction convention, not unresolved physics or suspected wrong rotation; do not call the sign unresolved. +- Never promote claims across chains, alter evidence packages/archive/history, or inflate solver qualification into controller or mechanism validation. diff --git a/.cursor/rules/jfm-round3-section-drafting.mdc b/.cursor/rules/jfm-round3-section-drafting.mdc new file mode 100644 index 0000000..912b791 --- /dev/null +++ b/.cursor/rules/jfm-round3-section-drafting.mdc @@ -0,0 +1,13 @@ +--- +description: Round-3 section dossier workflow; superseded for Round 4/5 +globs: docs/JFM_WYQ/ROUND3_BOTTOM_UP/**/*.md +alwaysApply: false +--- + +# Round-3 Section Dossiers +- This rule applies only to Round 3. Round 4/5 follow `jfm-research-workflow.mdc` and their current coordinator controls; do not carry Round-3 dossier density into section design or prose drafting. +- Read the R2 freeze/style guide, relevant R1 dossiers and current authorities. Deliver an author-readable paragraph map plus a compact claim/evidence ledger; record `read`, `mapped`, `not-covered` and `external-inaccessible` without treating reading as verification. +- Include the section question and bounded answer, paragraph jobs, transitions, display/equation roles, imports/exports, caveats, conflicts, non-claims and blockers. Preserve chain, role, comparator, metric, ROI/window and artifact boundaries. +- Authority-led artifact deferral is acceptable unless the missing artifact is needed to resolve a conflict, bind an exact role/comparator/window, or substantiate a proposed number or panel. +- First-pass agents cannot self-declare ready. The coordinator classifies systematic versus module-specific defects, repairs controls first when systematic, requests targeted revision, and performs a second audit. +- Near-colliding results must be classified as `same estimand`, `related diagnostic` or `different estimand`; prohibit arithmetic pooling and replication/validation/agreement/triangulation wording without exact authority. diff --git a/.gitignore b/.gitignore index 15873f3..511ca13 100644 --- a/.gitignore +++ b/.gitignore @@ -117,7 +117,7 @@ outputs/ .LSOverride ref/ -docs/ +# docs/ # Historical OID authority documents are compact preservation evidence. !src/OID_analysis/archive/studies/*/presentation/docs/ !src/OID_analysis/archive/studies/*/presentation/docs/** diff --git a/docs/JFM_WYQ/CELERISLAB_VALIDATION_DOSSIER.md b/docs/JFM_WYQ/CELERISLAB_VALIDATION_DOSSIER.md new file mode 100644 index 0000000..65b08d0 --- /dev/null +++ b/docs/JFM_WYQ/CELERISLAB_VALIDATION_DOSSIER.md @@ -0,0 +1,510 @@ +# CelerisLab Validation Dossier for JFM Writing + +**Purpose.** This document is an agent-facing index of the CelerisLab solver, its validation contracts, and the qualification artifacts currently retained under `CelerisLab/tests/output/steady_jfm_qualification/`. It is intentionally more detailed than manuscript prose. It records what was validated, how it was measured, what the reference papers establish, and what must not be claimed. + +**Scope.** CelerisLab is the current CFD tool library developed for the DynamisLab programme. `LegacyCelerisLab` is the preceding solver generation and is a separate evidence chain. This dossier concerns current CelerisLab only unless explicitly stated otherwise. + +**Status date.** 2026-08-09. + +**Important evidence warning.** The qualification directory contains complete physics runs for only Kan99b K2 and Sah04 S2. The validation runners define larger K1--K5 and S1--S4 matrices, but those other cases are not present in this qualification directory. Smoke runs are wiring/development diagnostics and are not physics qualification. + +--- + +## 1. Fast agent index + +| Question | Read this first | +|---|---| +| What is CelerisLab? | `CelerisLab/README.md` | +| What is the current solver revision? | parent gitlink `c918ac0...`; submodule commit `6e3756c...` | +| What exact outputs were retained? | `CelerisLab/tests/output/steady_jfm_qualification/MANIFEST.json` | +| What is the rotating-cylinder contract? | `CelerisLab/tests/specs/Kan99b_validation.md` and `tests/validation/run_kan99b_rotating_cylinder.py` | +| What is the confined-cylinder contract? | `CelerisLab/tests/specs/Sah04_validation.md` and `tests/validation/run_sah04_st_matrix.py` | +| What passed in the retained artifacts? | Sections 7 and 8 below | +| What failed or remains incomplete? | Section 10 below | +| How are forces and sensors read? | `CelerisLab/README.md`, Sections “Obs telemetry model” and “Sensor special handling” | +| What can be written in a JFM methods section? | Section 11 below | +| What should not be written? | Section 12 below | + +Search terms for later agents: `CelerisLab validation`, `steady_jfm_qualification`, `Kan99b K2`, `Sah04 S2`, `MRT`, `D2Q9`, `Bouzidi`, `curved boundary`, `neq_extrap`, `channel_stabilized`, `St_error_pct`, `mean_Cd`, `sensor accuracy`, `FP32`, `EsoPull`, `FP16S`. + +--- + +## 2. Software identity and solver role + +DynamisLab is the larger research programme for ML-assisted CFD and active flow control of a two-dimensional fluidic pinball. CelerisLab was written as the modern CFD infrastructure for that programme. It provides: + +- GPU-accelerated D2Q9 and D3Q19 LBM; +- SRT, TRT and MRT collision operators; +- optional Smagorinsky LES; +- double-buffer and EsoPull streaming paths; +- moving curved boundaries using Bouzidi interpolation; +- runtime rotating-body actuation; +- force, torque and area-averaged velocity-sensor readback; +- Python control-loop and asynchronous CUDA-stream APIs; +- checkpoint/snapshot and runtime body-topology synchronization. + +The qualification experiments are not a proof that every solver feature is equally validated. They are targeted anchors for the combinations needed by the current research and paper setting. + +### Solver revision provenance + +- DynamisLab parent revision that points to the solver: `c918ac0de44d4f5106249c31ad7f8a10f4c53450`. +- CelerisLab submodule revision: `6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0`. +- Submodule commit message: `fix(esopull): correct init layout and pre-streaming semantics (v0.5.1)`. +- Parent commit message: `Update CelerisLab submodule to v0.5.1 (6e3756c)`. + +For a reproducible paper, cite the solver revision actually used by the run and preserve the artifact manifest. Do not cite only the repository name while omitting the solver version and configuration. + +--- + +## 3. Governing numerical model and core implementation + +The solver advances a low-Mach incompressible approximation using a D2Q9 lattice in the retained two-dimensional qualification cases. The collision path used by the retained Kan99b and Sah04 full runs is MRT. The main stepping path is GPU CUDA code orchestrated through Python/PyCUDA. + +The qualification configurations use: + +- lattice model: D2Q9; +- collision: MRT; +- storage: FP32; +- LES: disabled; +- streaming: double buffer; +- curved-body treatment: current Bouzidi moving-wall implementation; +- outlet: `neq_extrap`; +- rotating-cylinder validation inlet: uniform profile with `regularized` primary inlet and one `zou_he_local` sensitivity run; +- confined-cylinder validation inlet: parabolic profile with `channel_stabilized` inlet; +- open-domain lateral boundaries: free slip for Kan99b; +- confined-channel lateral boundaries: no slip, represented by the channel geometry/configuration for Sah04. + +### Configuration semantics that matter for writing + +`inlet.profile` and `inlet.scheme` are different concepts: + +- `profile` defines the physical target profile, uniform or parabolic; +- `scheme` defines the numerical inlet closure, e.g. `regularized`, `zou_he_local` or `channel_stabilized`. + +The body rotation input is a runtime angular velocity. Changing `omega` does not require recompilation because it does not change object topology or telemetry layout. Geometry changes do require topology rebuilding/reinitialization. + +The solver-generated kernel configuration headers under `src/CelerisLab/lbm/kernels/config/*.h` are generated artifacts. They are not hand-edited scientific inputs; the JSON config and compiler generation path are authoritative. + +--- + +## 4. Telemetry, force and sensor contracts + +The GPU body kernels accumulate telemetry in the `obs_gpu` buffer. The buffer has force, torque and sensor segments. The standard `run(steps)` path clears the observation buffer and resets the internal accumulated-step count by default, advances the requested number of LBM steps, and downloads telemetry to a pinned host buffer. + +For force and torque: + +- `read_force(id, normalize=True)` returns the accumulated force divided by the number of accumulated time steps; +- `read_force(id, normalize=False)` returns the raw accumulated sum; +- the validation runners explicitly use `normalize=False` after a one-step accumulation in their fine-grained loop, so each recorded force is a one-step quantity. + +For sensors: + +- sensor readings are always area-normalized by the number of cells in the sensor footprint; +- `normalize=True` additionally divides by the accumulated time count; +- the sensor area normalization is independent of the time normalization flag. + +This distinction is essential when comparing solver readback with a manually computed field average or when reconstructing force coefficients from CSV output. + +The dedicated sensor test places four circular sensors at `(120,50)`, `(120,64)`, `(120,78)` and `(150,64)` on a `256 x 128` D2Q9 MRT free-slip uniform-flow setup. It compares each GPU sensor value with a CPU arithmetic mean over exactly the sensor cell footprint and uses an absolute tolerance of `1e-4` in each velocity component. The test is an implementation/readback validation, not a fluid-physics validation. + +--- + +## 5. Validation architecture + +The CelerisLab test hierarchy has three levels: + +1. `tests/unit/`: CPU-only isolated logic such as pending edits, flag masks and equilibrium helpers. +2. `tests/integration/`: GPU tests for body-topology synchronization, DDF patching, unified action/observation handling and stream APIs. +3. `tests/validation/`: long GPU physics-regression runners against published rotating-cylinder and confined-cylinder references, plus sensor accuracy and performance diagnostics. + +The two physics references serve different purposes: + +- [Kan99] is an open-flow rotating-cylinder benchmark. It checks the moving curved boundary, rotation input, force integration, shedding frequency and rotation-dependent mean/fluctuating force coefficients. +- [Sah04] is a confined stationary-cylinder benchmark. It checks parabolic channel inflow, no-slip wall confinement, blockage mapping, developed velocity normalization, wake shedding frequency and high-blockage geometry handling. + +These are validation anchors for solver behaviour. They are not validation of the full fluidic-pinball DRL controller, the symbolic-regression pipeline, or any hydrodynamic-cloaking claim. + +--- + +## 6. Kan99b rotating-cylinder contract + +### 6.1 Reference problem + +[Kang, Choi and Lee, “Laminar flow past a rotating circular cylinder”] studies fully developed two-dimensional flow around a circular cylinder rotating steadily in a uniform viscous stream. The paper uses + +\[ +Re = U_\infty D/\nu, +\qquad +\alpha = \frac{\omega D}{2U_\infty}, +\] + +and reports Strouhal number, mean lift and drag, and lift/drag fluctuation amplitudes. It also studies suppression of vortex shedding as the rotation parameter increases. + +The strongest exact numeric anchor selected in the repository is the paper's `Re=100`, `alpha=1.0` convergence case: + +| Quantity | Kan99 reference | +|---|---:| +| `St` | 0.1655 | +| mean `C_L` | -2.4881 | +| mean `C_D` | 1.1040 | +| `C'_L` | 0.3631 | +| `C'_D` | 0.0993 | + +The paper also supports a low-rotation lift trend near `Re=100`, approximately `mean C_L ≈ -2.48 alpha`, and qualitative suppression thresholds near `alpha=1.4` at `Re=60`, `alpha=1.8` at `Re=100`, and `alpha=1.9` at `Re=160`. The repository correctly treats those threshold values as regime guides rather than exact single-point gates. + +### 6.2 Lattice mapping + +The runner fixes: + +\[ +U_\infty=0.03,\qquad D=30,\qquad R=15, +\] + +so + +\[ +\nu=\frac{U_\infty D}{Re}=\frac{0.9}{Re}, +\qquad +\omega_{body}=\frac{2\alpha U_\infty}{D}=0.002\alpha. +\] + +For the retained K2 run: + +- `Re=100`; +- `alpha=1.0`; +- `nu=0.009`; +- body omega `=0.002`; +- medium domain `M = 1351 x 601`; +- cylinder diameter `D=30` lattice cells; +- total steps `280000` (`80000` burn-in + `200000` measured); +- force recorded every 100 steps; +- 2800 recorded samples per run. + +The runner uses the exact force definitions + +\[ +C_D=\frac{2F_x}{U_\infty^2D}, +\qquad +C_L=\frac{2F_y}{U_\infty^2D}. +\] + +The fluctuation amplitude is half the peak-to-peak range over the post-burn time series, using cycle-aware crossing logic when sufficient crossings are present. + +### 6.3 Primary and sensitivity variants + +The retained full package has two K2 runs: + +1. **Primary baseline:** MRT + uniform profile + `regularized` inlet. +2. **Inlet sensitivity:** MRT + uniform profile + `zou_he_local` inlet. + +Both use double-buffer streaming, FP32 storage, no LES, free-slip y boundaries and `neq_extrap` outlet. The second run is not a separate physical reference case; it tests sensitivity to the inlet numerical closure. + +### 6.4 Retained full results + +| Variant | St | St error | mean CL | mean CD | C'L | C'D | +|---|---:|---:|---:|---:|---:|---:| +| MRT + regularized | 0.1696483 | 2.5065% | +2.5881365 | 1.1430751 | 0.3529538 | 0.0984419 | +| MRT + zou_he_local | 0.1685349 | 1.8338% | +2.5764851 | 1.1294693 | 0.3488342 | 0.0952994 | +| Kan99 reference | 0.1655 | — | -2.4881 | 1.1040 | 0.3631 | 0.0993 | + +The frequency, drag and fluctuation magnitudes are close to the reference. The mean lift has the opposite sign relative to the stored Kan99 anchor in both variants, with a relative magnitude error of approximately 204%. The manifest therefore classifies the Kan99b full result as a **partial pass**, not an aggregate pass: `St`, `C_D` and fluctuation amplitudes pass their declared bands, but the mean-`C_L` sign/convention mismatch fails the all-metric gate. + +This is scientifically important. Do not write “all Kan99b metrics agree” or call the sign mismatch a minor rounding issue. Before using the rotating-cylinder lift in a mechanism argument, the object orientation, wall-point velocity convention, positive rotation direction, force sign convention and reference-paper coordinate convention must be audited. + +### 6.5 Declared K2 bands + +The spec declares the following preferred relative bands: + +- `St`: within 3%; +- mean `C_L`: within 4%; +- mean `C_D`: within 5%; +- `C'_L`: within 8%; +- `C'_D`: within 10%. + +For the two retained runs, the band results are: + +| Variant | St | mean CL | mean CD | C'L | C'D | aggregate | +|---|---|---|---|---|---|---| +| regularized | pass | fail | pass | pass | pass | partial pass | +| zou_he_local | pass | fail | pass | pass | pass | partial pass | + +### 6.6 Matrix specified but not retained here + +The runner/spec defines: + +- K1: `Re=100`, `alpha=0.5`, lift-trend check; +- K2: `Re=100`, `alpha=1.0`, hard anchor; +- K3: `Re=60`, `alpha=1.6`, suppression classification; +- K4: `Re=100`, `alpha=2.0`, suppression classification; +- K5: `Re=160`, `alpha=2.0`, suppression classification; +- optional K0: `Re=100`, `alpha=0`. + +Those cases are not present in `steady_jfm_qualification`; only K2 baseline and K2 inlet sensitivity are present. The current dossier therefore treats K1 and K3--K5 as **specified/planned validation cases**, not completed qualification evidence. + +--- + +## 7. Sah04 confined-cylinder contract + +### 7.1 Reference problem + +[Sahin and Owens, “A numerical investigation of wall effects up to high blockage ratios on two-dimensional flow past a confined circular cylinder”] studies a stationary circular cylinder midway between parallel no-slip walls. The paper defines + +\[ +\beta=D/H, +\qquad +Re=U_{max}D/\nu, +\qquad +St=\frac{D}{TU_{max}}. +\] + +The paper covers blockage ratios up to approximately 0.9 and Reynolds numbers up to approximately 280. It documents Hopf shedding, pitchfork symmetry breaking, asymmetric states and high-blockage wall/wake interactions. + +The selected direct periodic anchors are: + +| Case | beta | Re | target St | +|---|---:|---:|---:| +| S1 | 0.3 | 100 | 0.2115 | +| S2 | 0.5 | 200 | 0.3513 | +| S3 | 0.8 | 160 | approximately 0.5537 | +| S4 | 0.9 | 200 | 0.5314 | + +The repository deliberately avoids using values interpolated from figures or critical-onset points as hard numerical gates. + +### 7.2 Retained S2 setup + +The full retained run uses: + +- case S2; +- nominal `beta=0.5`; +- nominal `Re=200`; +- physical target profile: parabolic; +- numerical inlet scheme: `channel_stabilized`; +- collision: MRT; +- outlet: `neq_extrap`; +- no-slip confined walls; +- `D=30` lattice cells; +- fluid height `H=60` cells; +- realized `beta=30/60=0.5`; +- wall gap: 15 cells; +- grid: `2402 x 62` including boundary rows; +- `120000` total steps; +- `45000` burn-in steps; +- forces sampled every 5 steps; +- 24000 stored lift/drag samples. + +The analysis measures the developed downstream `U_max,real`, and reports + +\[ +Re_{real}=\frac{U_{max,real}D}{\nu}. +\] + +The spectrum is computed from the post-burn lift signal using a mean-subtracted Hanning-windowed real FFT, a target-guided frequency band, and local log-parabolic sub-bin interpolation. + +### 7.3 Retained full S2 result + +| Quantity | Result | +|---|---:| +| nominal Re | 200 | +| realized Re | 204.8809 | +| nominal beta | 0.5 | +| realized beta | 0.5 | +| target St | 0.3513 | +| measured St | 0.3566902 | +| relative St error | 1.5344% | +| gate | pass, threshold 5% | +| mean Cd | 2.5801072 | +| realized Umax | 0.10244045 | +| curved links | 292 | +| fallback links | 0 | +| low-q links | 72 | +| final rho range | 0.9820464 to 1.0512210 | + +The full run passes the declared S2 Strouhal gate. It is a solver/reference anchor at a specific confined-channel setup. It is not evidence that all high-blockage cases, all collision models or all bifurcation boundaries have been validated. + +The saved NPZ contains: + +- 24000 lift samples; +- 24000 drag samples; +- sample lattice steps; +- burn index and recording interval; +- post-burn frequencies and power spectrum; +- final `rho`, `ux`, `uy` fields; +- measured `St`, peak frequency, realized `Re`, and realized `beta`. + +### 7.4 Smoke S2 result and interpretation + +The smoke run uses only `5000` steps with `1500` burn-in and retains 1000 force samples. It gives: + +- realized `Re=161.4173` rather than the nominal 200; +- measured `St=0.3039154`; +- relative error `13.4884%`; +- gate fail. + +This is expected diagnostic behaviour: the short run has not developed the target state and has insufficient statistical duration. It must be labelled wiring/initialization diagnostic only and must never be quoted as a failed physical validation of CelerisLab. + +### 7.5 Matrix specified but not retained here + +The runner/spec defines S1--S4, with high-blockage refinement recommended for S3/S4. The retained qualification directory contains only S2 full and S2 smoke. S1, S3 and S4 are not completed artifacts in this directory. + +The specification requires realized blockage and realized Reynolds number to be reported, especially at high blockage. It also recommends at least approximately doubled resolution for `beta >= 0.8` before treating S3/S4 results as validation-quality. This is a methodological requirement, not evidence that those refined cases have already been run. + +--- + +## 8. Manifest and artifact inventory + +The manifest schema is `steady-pinball-cfd-anchor-qualification/v1`. + +### Manifest interpretation + +- `kan99b_full`: partial pass; frequency, drag and fluctuation amplitudes pass, but mean lift sign/convention mismatch fails aggregate gate. +- `sah04_full`: pass; S2 Strouhal error 1.534% is below the 5% gate. +- `smoke`: diagnostic only; insufficient duration for physics gates. + +### Retained artifact hashes + +| Relative artifact | SHA-256 | +|---|---| +| `kan99b_full/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv` | `e5ba55a789254322408b6657c175b0c1ac82ce92c3db4216716727ff8cc7df1c` | +| `kan99b_full/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv` | `84b999757c13c0d975be968f22b7e4cbf9ad9229d9ce91eb096c5ecdc92bbf72` | +| `kan99b_full/summary_runs.csv` | `b009ffc75615d65ec6d0d351da37a2d99ac4e57378d8ee635207e65e7edc6677` | +| `kan99b_full_summary.json` | `18b19b15bd426c68d5d919d3449f436a2284386726e2cd19e8334ccba2f0c6bf` | +| `sah04_full/s2_mrt.npz` | `6e3ef38de8cd1bc5c67ffa693868b1c6fd97453e1d7721a9287ca6fdf741f5ec` | +| `sah04_full_summary.json` | `e212fb4e0653e9ca3a3715fefef1d552e7dfac8acc1e46cd732769c0d7ce13e1` | +| `kan99b_smoke/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv` | `049382058562dbfda0aedb836827311302878d6589d790a94942aa973dee6262` | +| `kan99b_smoke/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv` | `45552003e8c9f8149d06eaac9f8696691e1e8607d92fd0e57135ea0919a664e4` | +| `kan99b_smoke/summary_runs.csv` | `468188a9cbf54b4491999f306b0e82352be91880038fd58487cdb040034518a3` | +| `kan99b_smoke_summary.json` | `24c101fcc7d1568c1ea0c4e8a9fe7c00b9427f9046b183bc9018624b65f76247` | +| `sah04_smoke/s2_mrt.npz` | `40438246e8b9c63dd1b28c9982a273d48885f6d378ba9756afae3db61b8eafd5` | +| `sah04_smoke_summary.json` | `902b211d28ca2c4d4205aae12cdd1ab6f563231e31ab23a8bed626d55451871` | + +The manifest is the hash authority. The full artifact files are the evidence, not this prose dossier. + +--- + +## 9. Additional CelerisLab validation relevant to setting writing + +### 9.1 Sensor accuracy + +`tests/validation/test_sensor_accuracy.py` validates the sensor kernel against a direct CPU average over the same sensor footprint. It uses four sensor locations, a free-slip uniform-flow MRT test, and an absolute component-wise difference threshold of `1e-4`. The test establishes that area-averaged sensor readback is consistent with the underlying macroscopic field sampling for the tested setup. + +This supports using area-averaged probes in a DRL observation loop. It does not establish full-field observability, sensor optimality, or equivalence between sparse sensor DTW and full-field wake error. + +### 9.2 Streaming equivalence + +CelerisLab v0.5.1 includes an EsoPull single-buffer streaming path. The README records verification for D2Q9 curved-boundary MRT configurations, including fixed/rotating-cylinder Kan99b K2 comparisons and runtime body synchronization. The current documented scope is two-dimensional D2Q9; D3Q19 EsoPull is not yet implemented in that verification statement. + +The README reports approximate Kan99b K2 drag comparisons between EsoPull and double-buffer for `D=20` and `D=30`, with differences below approximately 3.2% and 5.6%, respectively. These are implementation equivalence diagnostics and should not be confused with the retained `steady_jfm_qualification` full-run manifest. + +### 9.3 FP16S limitation + +FP16S stores the distribution function in half precision with FP32 computation and scaling. The documented validation found that FP16S combined with Bouzidi curved boundaries can produce approximately 30--40% drag error even with DDF shifting, while no shifting can exceed 100% error for Kan99b K2. Sah04 S2 Strouhal can remain within approximately 1.5%, but force-critical curved-boundary work should use FP32. + +Therefore the JFM steady/cloaking qualification should use FP32 storage when force or torque is interpreted scientifically. A good Strouhal result under FP16S is not enough to authorize force-mechanism claims. + +### 9.4 DDF shifting + +DDF shifting stores `f_i-w_i` rather than `f_i` to improve half-precision accuracy. The documented supported scope includes D2Q9 MRT with double-buffer or EsoPull and the tested inlet families. It is important for FP16S but does not cure all Bouzidi/quantization force errors. The retained steady qualification uses ordinary FP32 and `ddf_shifting=false`. + +### 9.5 Performance + +The CelerisLab README reports approximately 4400 MLUPS for a 384 x 192 D2Q9 V100 benchmark under Re100 MRT no-LES, for both double-buffer and EsoPull at the stated benchmark level. The performance runner is a separate engineering benchmark. MLUPS is not a validation of physical accuracy and should be reported separately from physics metrics. + +--- + +## 10. Known limitations and unresolved issues + +1. **Kan99 mean-lift sign mismatch.** This is the most important unresolved physics-validation issue in the retained package. The magnitude is close but the sign is opposite to the Kan99 anchor. Audit coordinate and force conventions before interpreting rotating-cylinder lift. +2. **Qualification matrix is partial.** Only K2 and S2 full runs are retained in this directory. Do not claim K0--K5 or S1--S4 as completed based only on runner definitions or README tables. +3. **Smoke runs are not physics evidence.** The S2 smoke run demonstrates that the setup runs but has realized Re drift and insufficient periodic duration. +4. **No uncertainty estimate.** The retained artifacts are deterministic solver runs, not independent ensembles. They provide no statistical confidence interval. +5. **No mesh-convergence result in this manifest.** Domain/grid choices are documented in the runners/specs, but the qualification directory does not contain a multi-resolution convergence package. +6. **No full field snapshots for Kan99 full.** The retained Kan99 full output contains force histories and summaries, not vorticity images or field snapshots. +7. **Sah04 high-blockage cases remain unqualified here.** High blockage is especially sensitive to narrow wall gaps, realized Re and geometry resolution. +8. **Reference/solver contract differences matter.** Agreement is expected only after matching Re definition, inlet profile, wall condition, outlet treatment, rotation convention, coefficient normalization and analysis window. +9. **No mechanism proof.** A benchmark match validates selected numerical observables; it does not prove a particular wake mechanism or guarantee transfer to the three-cylinder pinball. +10. **No Legacy equivalence.** LegacyCelerisLab results cannot be silently pooled with current CelerisLab results. The two solver generations have different APIs, accumulation semantics, generated kernels, boundary implementation details and provenance. + +--- + +## 11. Writing-ready methods language + +The following is suitable as a starting point, subject to checking the final artifact paths and solver revision: + +> The flow solver was implemented in CelerisLab, a CUDA-accelerated D2Q9 lattice-Boltzmann code with MRT collision, double-buffer streaming and Bouzidi interpolation for moving curved boundaries. Force and velocity-sensor observables were accumulated on the GPU and read back through the Python API; force coefficients were formed from the accumulated force using the same diameter and free-stream normalization as the reference problem. Before applying the solver to the fluidic-pinball control problem, we qualified selected numerical components against two canonical single-cylinder benchmarks. For a steadily rotating cylinder, the `Re=100`, `alpha=1` case reproduced the reference Strouhal number, mean drag and fluctuation amplitudes within the declared tolerance bands, although the mean-lift sign convention remained discrepant and was therefore not used as an accepted validation observable without further convention auditing. For a stationary cylinder in a confined channel at `beta=0.5`, `Re=200`, the measured Strouhal number was `0.35669` compared with the reference value `0.3513`, a relative error of `1.53%`. These tests qualify the selected solver/configuration combination for the reported numerical setting; they do not constitute a proof of universal solver accuracy or of the later flow-control mechanism. + +### What to put in a table + +At minimum include: + +- solver revision; +- lattice model and dimension; +- collision model; +- streaming path; +- storage precision; +- LES state; +- inlet physical profile and numerical scheme; +- outlet mode; +- wall condition; +- diameter and grid; +- `Re`, `nu`, `U_inf` or `U_max` definition; +- body rotation parameter and physical omega; +- burn-in and statistics window; +- sample interval; +- target and measured `St`; +- measured force metrics where accepted; +- artifact path and manifest/hash identifier. + +--- + +## 12. Claims that are authorized, bounded or prohibited + +### Authorized with scope + +- CelerisLab implements a GPU-accelerated D2Q9 MRT LBM suitable for the tested two-dimensional rotating and confined cylinder configurations. +- The retained Sah04 S2 full run passes the declared 5% Strouhal gate. +- The retained Kan99b K2 full runs reproduce frequency, drag and fluctuation magnitudes within their selected bands. +- The selected sensor readback path can be checked against direct area averages over the tested footprints. +- FP32 is the appropriate storage choice for force-critical curved-boundary calculations in the documented validation scope. + +### Bounded / conditional + +- The Kan99b K2 result is a partial pass because mean-lift sign/convention agreement is unresolved. +- The `regularized` versus `zou_he_local` K2 comparison is an inlet sensitivity check, not evidence that one inlet scheme is universally superior. +- The Sah04 result qualifies one moderate-blockage confined-channel point, not all blockage ratios or bifurcation regimes. +- EsoPull equivalence is bounded to the documented D2Q9 MRT configurations and comparison metrics. +- Performance figures describe hardware/configuration throughput, not accuracy. + +### Prohibited without new evidence + +- “All Kan99b K0--K5 and Sah04 S1--S4 cases passed.” +- “The solver is validated for all Reynolds numbers, all blockage ratios or all collision models.” +- “The mean-lift sign mismatch is irrelevant.” +- “A matching Strouhal number proves force accuracy, boundary accuracy or hydrodynamic mechanism.” +- “The solver validation proves the DRL policy, SR law, CCD interpretation or cloaking mechanism.” +- “LegacyCelerisLab and CelerisLab are numerically interchangeable.” +- “Smoke output is a physical benchmark result.” + +--- + +## 13. Reference papers + +- [Kan99] S. Kang, H. Choi and S. Lee, “Laminar flow past a rotating circular cylinder,” *Physics of Fluids* 11, 3312--3321 (1999). DOI: `10.1063/1.870190`. +- [Sah04] M. Sahin and R. G. Owens, “A numerical investigation of wall effects up to high blockage ratios on two-dimensional flow past a confined circular cylinder,” *Physics of Fluids* 16, 1305--1320 (2004). DOI: `10.1063/1.1668285`. + +Undermind cite-key resolution in the DynamisLab workspace: `Kan99` and `Sah04`. In Undermind workspace Markdown, use bare markers `[Kan99]` and `[Sah04]`; in manuscript prose, resolve them through the project's bibliography workflow. + +--- + +## 14. Reproduction entry points + +From the `CelerisLab/` directory, the validation runners are: + +```bash +conda run -n pycuda_3_10 python tests/validation/run_kan99b_rotating_cylinder.py +conda run -n pycuda_3_10 python tests/validation/run_sah04_st_matrix.py +conda run -n pycuda_3_10 python tests/validation/test_sensor_accuracy.py +``` + +The retained qualification artifacts should not be overwritten. New runs must use a new no-clobber output directory and must record the exact command, environment, GPU, solver revision, configuration, artifact hashes and gate interpretation. + +**Final operational rule:** read the code and manifest before quoting any number. This dossier is an index and interpretation aid; the JSON/NPZ/CSV artifacts and current validation code remain the numerical authority. diff --git a/docs/JFM_WYQ/My_JFM/FLMguide.pdf b/docs/JFM_WYQ/My_JFM/FLMguide.pdf new file mode 100644 index 0000000..5259ebc Binary files /dev/null and b/docs/JFM_WYQ/My_JFM/FLMguide.pdf differ diff --git a/docs/JFM_WYQ/My_JFM/FLMguide.tex b/docs/JFM_WYQ/My_JFM/FLMguide.tex new file mode 100644 index 0000000..afe8651 --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/FLMguide.tex @@ -0,0 +1,671 @@ +\documentclass[lineno]{JFM-FLM_Au} + +\usepackage{amsmath,amssymb,bm,booktabs} +\newcommand{\Rey}{\mathit{Re}} +\newcommand{\dd}{\mathrm{d}} +\newcommand{\vect}[1]{\boldsymbol{#1}} +\newcommand{\draftfigure}[3]{% + \begin{figure} + \centering + \fbox{\parbox[c][0.22\textheight][c]{0.88\textwidth}{\centering\textbf{Figure placeholder}\\[0.6em]#1}} + \caption{#2} + \label{#3} + \end{figure} +} + +\lefttitle{Y. Wang, F. Ren, S. Chen and H. Tang} +\righttitle{Symbolic feedback laws for hydrodynamic cloaking and illusion} + +\title{Interpretable feedback laws for active hydrodynamic cloaking and illusion of the fluidic pinball} + +\author{Yanqi Wang\aff{1,3}, Feng Ren\aff{2}, Shiyi Chen\aff{3} \and Hui Tang\aff{1}} + +\affiliation{\aff{1}Department of Mechanical Engineering, The Hong Kong Polytechnic University, Hong Kong, PR China +\aff{2}School of Marine Science and Technology, Northwestern Polytechnical University, Xi'an 710072, PR China +\aff{3}Eastern Institute for Advanced Study, Eastern Institute of Technology, Ningbo 315200, PR China} + +\corresau{Hui Tang, \email{h.tang@polyu.edu.hk}} + +\begin{document} +\maketitle + +\begin{abstract} +Hydrodynamic cloaking and illusion require a controller to manipulate not only an integrated force but also the information transported by a nonlinear wake. We study these observer-centred control objectives using the fluidic pinball, a compact array of three independently rotating cylinders. Proximal-policy-optimization controllers are first trained from the forces on the cylinders and three downstream velocity probes. We then use symbolic regression to determine whether the successful neural policies contain a compact and transferable feedback structure. Candidate expressions are constrained by the reflection symmetry of the pinball and are accepted only after deployment in closed-loop lattice-Boltzmann simulations; one-step regression accuracy alone is shown to be an unreliable selection criterion. For K\'arm\'an-street cloaking, a joint expression extracted across diameter-based Reynolds numbers $\Rey_D=25$--$200$ separates into an approximately steady counter-rotation of the rear cylinders and dynamic front-cylinder rate--lift feedback. The symbolic controller obtains downstream similarities of $0.847$, $0.888$, $0.845$ and $0.806$, respectively, and transfers without refitting to a Lamb vortex dipole and a Taylor vortex monopole with similarities of $0.949$ and $0.905$. Illusion of target-cylinder wakes admits a common target-error law near target diameters $0.75D$--$1.0D$, but transfer deteriorates as the target scale departs from the naturally controllable wake. At $1.5D$, the neural action contains a high-frequency modulation that is not represented by the present instantaneous feature library, exposing a clear symbolic-model regime boundary. A compact correction-field analysis provides independent spatial support for the actuator interpretation. The results show that deep reinforcement learning can serve as a policy-discovery stage from which a physically interpretable cloak backbone is distilled, while also identifying the conditions under which target-dependent temporal structure must be retained. +\end{abstract} + +\begin{keywords} +hydrodynamic cloaking, flow control, symbolic regression, deep reinforcement learning, fluidic pinball +\end{keywords} + +\section{Introduction} +\label{sec:introduction} + +A bluff body leaves a spatially and temporally extended signature in the surrounding fluid. The signature includes a mean velocity deficit, separated shear layers, coherent vortices, pressure fluctuations and characteristic frequencies. These quantities are not merely consequences of the force on the body: they are also information from which a downstream observer may infer the presence, size or state of an upstream object. Active flow control may therefore be formulated not only as drag reduction, lift control or suppression of vortex-induced vibration, but also as control of the information transmitted by the wake. + +This viewpoint gives two related objectives. \emph{Hydrodynamic cloaking} requires the downstream flow to approach the background that would have reached the observer in the absence of the controlled body. For a steady background this reference is an undisturbed channel flow; for an incoming vortex street or isolated vortex it is the corresponding disturbance propagated without the body. \emph{Hydrodynamic illusion} instead requires the downstream flow to reproduce the non-zero signature of a different target object. The body remains present and exchanges momentum with the fluid in both problems. Cloaking is consequently not defined as disappearance of the local near-body disturbance, and illusion is not defined by force matching alone. The relevant criterion is the field or signal perceived outside the immediate actuation region. + +Nonlinear separated wakes make these objectives difficult. Instability, mean-flow deformation, vortex formation and convection are coupled, and the observer responds only after a finite propagation delay. A controller may reduce drag while leaving a readily detectable wake, or suppress a dominant frequency while producing an incorrect mean deficit. Illusion is more restrictive still because frequency, phase, amplitude and spatial organisation must be retuned towards a non-zero target. + +Deep reinforcement learning (DRL) is attractive for this setting because it can discover feedback strategies directly through interaction with the flow, without requiring a tractable model of the controlled Navier--Stokes dynamics. Its principal limitation is interpretability. A successful neural policy does not by itself reveal which measurements are essential, whether the actions contain a reusable physical mechanism, or why a policy transfers between incident disturbances. This limitation is especially important for hydrodynamic perception control: a high scalar reward establishes performance only in the chosen observer space and does not identify the mechanism that produces the downstream correction. + +The present study uses the fluidic pinball as a controlled laboratory for this question. Three equal circular cylinders form an equilateral triangle with one cylinder facing the incident flow. Independent rotation provides a compact three-input actuator capable of changing stagnation points, gap flow, base bleed, separation and shedding phase. The uncontrolled pinball also undergoes Hopf, pitchfork and higher-frequency transitions as the Reynolds number increases. It is therefore simple enough for repeated high-fidelity simulation but rich enough to expose nonlinear, multi-attractor control dynamics. + +The central hypothesis is that successful cloaking is organised by a reusable actuator-side compensation mechanism. The pinball creates a blockage-induced velocity deficit and an additional force signature. The learned policy compensates the mean deficit through rear-cylinder counter-rotation and regulates the residual phase and antisymmetric force through dynamic front-cylinder actuation. We test this hypothesis by distilling the observation-to-action map with symbolic regression (SR). Crucially, symbolic expressions are judged in closed-loop computational fluid dynamics (CFD), not only by their ability to fit actions recorded from the DRL trajectory. A compact correction-field decomposition is then used as an independent check of the spatial interpretation. + +The principal contributions are as follows. First, cloaking and illusion are formulated as observer-centred wake-matching problems for a nonlinear bluff-body flow. Secondly, a symmetry-constrained SR procedure is developed for post hoc distillation of a trained PPO policy, with closed-loop CFD as the decisive model-selection test. Thirdly, a common K\'arm\'an-cloak law is identified across $\Rey_D=25$--$200$ and transferred without refitting to periodic and transient incident disturbances. Fourthly, illusion is shown to reuse this compensation backbone only over a finite target-scale range; high-frequency neural actuation at larger mismatch reveals the information missing from the present symbolic state. + +The paper is organised as follows. Section~\ref{sec:problem} defines the physical configuration and the Reynolds-number convention. Section~\ref{sec:methods} describes the numerical environment, DRL policy and SR protocol. Section~\ref{sec:srresults} presents the symbolic controllers and their closed-loop transfer. Sections~\ref{sec:oid} and~\ref{sec:ccd} provide independent spatial and spatio-temporal tests of the mechanism. Conclusions are given in \S~\ref{sec:conclusion}. + +\subsection{Relation to interpretable flow control and system identification} + +The aim of extracting an analytical policy has precedents in machine-learning control, sparse system identification and reduced-order modelling, but the present task differs from each of these in a consequential way. Genetic-programming control searches directly over mathematical expressions and has exposed physically meaningful feedback in separated flows \citep{Gautier2015,Li2017}. Such an approach makes interpretability native to the optimisation, but repeated evaluation of candidate laws in a large CFD environment is costly. Here PPO first explores a flexible policy class, after which symbolic regression asks whether the successful behaviour occupies a much smaller algebraic class. This ordering treats the neural controller as a discovery instrument rather than as the final scientific result. + +Sparse identification of nonlinear dynamics (SINDy) provides a second point of reference \citep{Brunton2016,Loiseau2018Galerkin}. SINDy and constrained sparse Galerkin regression identify parsimonious evolution equations from a prescribed library. They have established two lessons that are directly relevant here: structural constraints can matter more than small changes in residual error, and a model must be assessed by its long-time dynamics rather than its derivative fit alone. In the present work, however, the principal pipeline is PySR applied to the policy map, not SINDy applied to the Navier--Stokes state. SINDy is used only as a historical sparse-regression reference and a cross-diagnostic in the difficult $1.5D$ illusion case. There is no DANTE pipeline in this study, and no claim is made that the discovered expressions are governing equations. + +The distinction between policy imitation and closed-loop equivalence is central. Supervised policy distillation usually minimises an action discrepancy over states visited by the teacher. In a convectively delayed flow, replacing the teacher changes those states. A formula can accurately interpolate the PPO trajectory yet introduce a small phase bias that compounds until the downstream signal no longer matches the reference. Conversely, a low-$R^2$ formula can preserve the stabilising or tracking geometry that matters in closed loop while ignoring high-variance action details. We therefore place closed-loop CFD inside the selection loop conceptually, even though the computational pipeline performs fitting and validation as separate reproducible stages. + +The fluidic pinball is especially suitable for this test. Its unforced dynamics pass through successive Hopf and symmetry-breaking bifurcations, and its force observables obey symmetry-constrained low-order structure \citep{Deng2020,Loiseau2018Galerkin}. Rotation of the downstream pair can create base bleed, while front-cylinder rotation can supply phase-sensitive forcing; related roles emerged in gradient-enriched machine-learning control \citep{CornejoMaceda2021}. These prior results provide physical hypotheses, not labels supplied to PySR. A credible symbolic law should recover actuator roles compatible with this dynamical organisation and should remain useful beyond one recorded waveform. + +Finally, the term \emph{cloaking} is used here in an observer-centred and explicitly limited sense. Active hydrodynamic metamaterial studies show that cancellation of a body-induced disturbance can be designed over restricted regimes, while also exposing stability limitations at finite Reynolds number \citep{Urzhumov2012}. Our sparse-probe similarity measures whether selected downstream signals are recovered; it is not evidence of pointwise invisibility throughout the domain. Full-field correction analyses reduce, but do not eliminate, this observer dependence. Likewise, illusion denotes reproduction of selected force and wake signatures of a target cylinder, not a claim that every external measurement would classify the pinball as that cylinder. + +\section{Flow configuration and control objectives} +\label{sec:problem} + +\subsection{Fluidic pinball} + +The controlled body consists of three circular cylinders of diameter $D$. Their centres form an equilateral triangle of side $1.5D$, leaving a gap of $0.5D$ between adjacent surfaces. The upstream cylinder is denoted by $F$ and the downstream upper and lower cylinders by $T$ and $B$. The three angular velocities form the actuation vector +\begin{equation} + \vect{\omega}(t)=(\omega_F,\omega_T,\omega_B)^{\mathsf T}, +\end{equation} +The Legacy solver stores the applied rotational command in velocity units as $\omega_i$; the SR pipeline therefore defines $\alpha_i=\omega_i/U_0$. This project-specific variable should not be confused with a dimensional angular frequency. The corresponding no-slip wall velocity is prescribed by the solver convention below. +On cylinder $i$, the no-slip surface velocity is +\begin{equation} + \vect{u}_{w,i}=\omega_i R + \begin{pmatrix}-\sin\theta_i\\ \cos\theta_i\end{pmatrix}, + \qquad R=D/2. +\end{equation} +Three downstream probes measure both velocity components. The force on each pinball cylinder is also available to the controller. + +\draftfigure{Insert the fluidic-pinball geometry, disturbance generator and three downstream probes.}{Computational arrangement and observer-centred control objectives. The three pinball cylinders rotate independently; the reference trajectory is recorded without the pinball for cloaking and with a separate target cylinder for illusion.}{fig:configuration} + +The incompressible flow satisfies +\begin{align} + \nabla\boldsymbol{\cdot}\vect{u}&=0,\\ + \rho_f\left(\frac{\partial\vect{u}}{\partial t} + +\vect{u}\boldsymbol{\cdot}\nabla\vect{u}\right) + &=-\nabla p+\mu\nabla^2\vect{u}+\vect{f}_e, +\end{align} +where $\vect{f}_e$ represents the force density used to impose the moving curved boundaries. + +\subsection{Reynolds-number convention} +\label{sec:reconv} + +Throughout this paper, the physical Reynolds number follows the fluidic-pinball convention and is based on the diameter of one pinball cylinder, +\begin{equation} + \Rey_D=\frac{U_0D}{\nu}. + \label{eq:red} +\end{equation} +The project-level solver and several historical file names use a different reference length, $2D$, and therefore store +\begin{equation} + \Rey_{\mathrm{code}}=\frac{U_0(2D)}{\nu}=2\Rey_D. + \label{eq:recode} +\end{equation} +These quantities are not interchangeable. All Reynolds numbers reported in the text, tables and conclusions below are $\Rey_D$ unless the code-level quantity is explicitly identified. + +The mechanism dataset used for the present SR study was generated with the Legacy configuration on a $1280\times512$ lattice, with $D=20$ lattice units, $U_0=0.01$, a parabolic inlet and no-slip upper and lower walls. A newer V5 training environment exists on a $2000\times600$ lattice with a uniform inlet and free-slip walls, but it is not mixed with the numerical coefficients reported here. The distinction is necessary because the two environments have different plant dynamics, action decoders and observation normalisation. The present expressions and performance values refer to the Legacy analysis dataset. + +\subsection{Cloaking and illusion} + +Let $\vect{q}_{\mathrm{in}}$ denote the incident reference flow, $\vect{q}_{\mathrm{blk}}$ the flow with a fixed pinball and $\vect{q}_{\mathrm{ctl}}$ the controlled flow. Cloaking seeks +\begin{equation} + \mathcal{H}\vect{q}_{\mathrm{ctl}}(t) + \simeq \mathcal{H}\vect{q}_{\mathrm{in}}(t), + \label{eq:cloakobj} +\end{equation} +where $\mathcal{H}$ is the downstream observation operator. For K\'arm\'an cloaking, $\vect{q}_{\mathrm{in}}$ contains the street generated by an upstream cylinder but no pinball. For the Lamb and Taylor cases it contains an isolated dipole or monopole-like event. + +For illusion, a separate target cylinder generates $\vect{q}_{\mathrm{tar}}$, and the objective becomes +\begin{equation} + \mathcal{H}\vect{q}_{\mathrm{ctl}}(t) + \simeq \mathcal{H}\vect{q}_{\mathrm{tar}}(t). + \label{eq:illusionobj} +\end{equation} +The target is non-zero and changes with target diameter. Sensor agreement, force response and phase-aligned fields are evaluated separately so that no single reward component is equated with complete invisibility. + +\section{Numerical and data-driven methods} +\label{sec:methods} + +\subsection{Lattice-Boltzmann environment} + +The flow is advanced with a GPU-accelerated multiple-relaxation-time lattice-Boltzmann method on a D2Q9 lattice. The populations obey +\begin{equation} + f_i(\vect{x}+\vect{c}_i\Delta t,t+\Delta t)-f_i(\vect{x},t) + =-\left[\vect{M}^{-1}\vect{S} + (\vect{m}-\vect{m}^{\mathrm{eq}})\right]_i. +\end{equation} +Curved ghost-node interpolation imposes the rotating no-slip cylinder boundaries. The low lattice velocity $U_0=0.01$ limits compressibility effects. Cylinder rotation, force integration and sensor sampling are coupled directly to the Python control environment, allowing each policy decision to be followed by a prescribed number of CFD steps without restarting the solver. + +\subsection{Observation, action and reward} + +For cloaking, the observation contains six force components and six downstream velocity components, +\begin{equation} + \vect{o}_t= + (F_{F,x},F_{F,y},F_{T,x},F_{T,y},F_{B,x},F_{B,y}, + u_1,v_1,u_2,v_2,u_3,v_3)^{\mathsf T}, + \label{eq:obs} +\end{equation} +with scene-specific physical scaling. Illusion augments this state with the target drag and lift reconstructed at the current target phase. The PPO output $\vect{a}_t\in[-1,1]^3$ is converted to physical rotation using the action scale and bias of the corresponding Legacy scene. SR is fitted only after undoing this decoder. + +The reward combines force and downstream-signal objectives. For cloak, Gaussian force scores encourage small additional mean drag and lift, +\begin{equation} + r_D=\exp(-K_D C_D^2),\qquad + r_L=\exp(-K_L C_L^2), +\end{equation} +while a signal score compares the six probe channels with the reference. For illusion, $C_D$ and $C_L$ are replaced by the differences between the pinball assembly and the target-cylinder forces. + +Temporal similarity is based on dynamic time warping (DTW). For vector sequences $X=\{\vect{x}_i\}$ and $Y=\{\vect{y}_j\}$, the accumulated cost is +\begin{equation} + D(i,j)=\lVert\vect{x}_i-\vect{y}_j\rVert_2+ + \min\{D(i-1,j-1),D(i-1,j),D(i,j-1)\}. +\end{equation} +The distance is normalised by sequence length and a scene-specific fluctuation scale, and then mapped to a bounded similarity. DTW accommodates modest phase and convection-time offsets, but the full-field comparisons are additionally phase aligned. + +\subsection{PPO policy discovery} + +The actor and critic contain two hidden layers of width 64 with sinusoidal activation, +\begin{equation} + \vect{h}_1=\sin(\vect{W}_1\vect{o}+\vect{b}_1),\qquad + \vect{h}_2=\sin(\vect{W}_2\vect{h}_1+\vect{b}_2). +\end{equation} +The policy is trained with the clipped PPO objective +\begin{equation} + \mathcal{L}^{\mathrm{clip}}= + \mathbb{E}_t\left[ + \min\left(\rho_t\widehat A_t, + \operatorname{clip}(\rho_t,1-\epsilon,1+\epsilon)\widehat A_t\right) + \right]. +\end{equation} +The neural policy is used as a discovery mechanism. Its deterministic trajectories supply the force, sensor and physical-action records used for SR; the policy weights are not inspected to infer the mechanism. + +\subsection{Symbolic-regression target and feature libraries} +\label{sec:srmethod} + +The SR target is the dimensionless applied actuation +\begin{equation} + \vect{\alpha}_t=\frac{\vect{\omega}_t}{U_0} + = (\alpha_F,\alpha_T,\alpha_B)^{\mathsf T}. + \label{eq:srtarget} +\end{equation} +Converting the stored PPO action to $\vect{\alpha}$ before regression is essential: otherwise the fitted coefficients combine policy physics with scene-dependent decoder scale and bias. + +Candidate variables include total drag and lift, +\begin{equation} + C_{d,\mathrm{tot}}=\sum_i C_{d,i},\qquad + C_{l,\mathrm{tot}}=\sum_i C_{l,i},\qquad + C_{d,\mathrm{rear}}=C_{d,T}+C_{d,B}, +\end{equation} +selected velocity probes, target-relative force errors for illusion, and finite-time rates. For a generic signal $g$, +\begin{equation} + \dot g(t)\simeq\frac{g(t)-g(t-\Delta t_c)}{\Delta t_c}, + \label{eq:rate} +\end{equation} +where $\Delta t_c$ is the physical control interval rather than one raw LBM step. The joint K\'arm\'an library also includes viscosity and selected action-rate variables to represent changes in phase dynamics across $\Rey_D$. + +The search uses PySR, whose evolutionary search alternates mutation, crossover, simplification and numerical coefficient optimisation over populations of expression trees \citep{Cranmer2023}. The binary operator set is restricted to $\{+,-,\times,\div\}$ and the unary set to a square operation. Protected numerical evaluation rejects non-finite candidates. This deliberately conservative grammar avoids introducing trigonometric or transcendental functions merely because they can interpolate a finite trajectory. Expression complexity is the weighted node count; constants and variables have unit cost, while compound operations incur their tree cost. The Pareto front is ranked by loss improvement per added unit of complexity, but its nominal winner is not accepted automatically. + +Four nested feature classes are considered: instantaneous force and sensor variables; phase-state variables with temporal derivatives; a cross-$\Rey_D$ physics-rate library including viscosity and action rates; and an illusion library including target errors. The purpose is not to maximise library size but to determine the smallest closed-loop state that preserves the policy behaviour. Table~\ref{tab:features} records the physical meaning and reflection parity of the features used in the reported searches. + +\begin{table} + \centering + \caption{Symbolic-regression features. ``Even'' and ``odd'' denote parity under centreline reflection; paired quantities are evaluated after exchanging upper and lower channels. Rates use the physical control interval $\Delta t_c$.} + \label{tab:features} + \begin{tabular}{p{0.19\textwidth}p{0.43\textwidth}p{0.12\textwidth}p{0.16\textwidth}} + \toprule + symbol & definition or role & parity & library\\ + \midrule + $u_m,u_a,u_c$ & streamwise velocities at the three downstream probes & paired/even & all\\ + $v_a$ & selected transverse probe velocity & odd & cloak\\ + $C_{d,\mathrm{tot}}$ & total pinball drag coefficient & even & all\\ + $C_{d,\mathrm{rear}}$ & sum of rear-cylinder drag coefficients & even & all\\ + $C_{l,\mathrm{tot}}$ & total pinball lift coefficient & odd & all\\ + $C_{l,\mathrm{diff}}$ & symmetry-adapted rear lift difference & parity-adapted & cloak\\ + $\dot a_F,\dot a_T,\dot a_B$ & decoded physical-action rates & transformed & cross-$\Rey_D$\\ + $\mu g$ & viscosity-weighted feature $g$ & parity of $g$ & cross-$\Rey_D$\\ + $C_{d,\mathrm{err}},C_{l,\mathrm{err}}$ & pinball-minus-target force errors & even/odd & illusion\\ + $\dot u_a,\dot C_l,\dot C_{d,\mathrm{err}},\dot C_{l,\mathrm{err}}$ & finite-time phase and error rates & inherited & phase/illusion\\ + \bottomrule + \end{tabular} +\end{table} + +\subsection{Trajectory collection and decoder audit} + +The fitting records are deterministic PPO rollouts collected after training. At every control decision the archive stores the six force components, six probe velocities and three normalised policy outputs. Illusion records additionally contain the target force phase used by the environment. The four K\'arm\'an datasets are stored under the code-level labels $\Rey_{\mathrm{code}}=50$, 100, 200 and 400 and therefore cover $\Rey_D=25$, 50, 100 and 200; the joint illusion fit uses the $0.75D$ and $1.0D$ targets. Lamb and Taylor records are held out from the K\'arm\'an fitting and are used only for transfer evaluation. + +Undoing the action decoder is a necessary audit step rather than a change of units made for presentation. In the Legacy environment the normalised action $a_i\in[-1,1]$ is mapped according to +\begin{equation} + \alpha_i=s a_i+b_i, + \label{eq:decoder} +\end{equation} +where $s=8$ with biases $(0,-4,4)$ for K\'arm\'an, $s=8$ with $(0,-2,2)$ for illusion, and $s=4$ with $(0,-4,4)$ for the transient-vortex scenes. The precise sign and ordering follow the Legacy cylinder convention. Regression on $a_i$ would make a constant rear rotation appear smaller or disappear into the decoder bias; equation~\eqref{eq:decoder} is therefore inverted before constructing the targets and re-applied consistently during deployment. + +The control interval is also part of the identified model. K\'arm\'an and transient-vortex scenes normally use 800 LBM steps per decision, while the $0.75D$, $1.0D$ and $1.5D$ illusion scenes use 400, 600 and 800 steps, respectively. A derivative in the symbolic library is a finite difference over this decision interval, not over one lattice update. Thus changing the sampling interval changes both the information available to feedback and the numerical value of a rate feature. The dedicated $\Rey_D=200$ ($\Rey_{\mathrm{code}}=400$) sensitivity test halves the interval to 400 steps and doubles the number of validation decisions so that the physical horizon remains comparable. + +\subsection{PySR fitting and model-selection protocol} + +For each channel, samples from the relevant scenes are concatenated after scene-consistent feature construction. Front and shared-rear heads are searched separately. Candidate expressions are first screened for finite values and action bounds, then evaluated on withheld trajectory segments. Search depth and population evolution produce a family of loss--complexity compromises rather than one privileged expression. We retain candidates that improve materially over a constant baseline without adding structurally redundant terms. + +Model selection then proceeds through four filters. The first is offline action prediction, reported with $R^2$ only as a diagnostic. The second is a symbolic audit of dimensions, decoder convention and $\mathbb{Z}_2$ equivariance. The third is a deployment audit: every term must remain active when the expression generates its own actions. The fourth and decisive filter is closed-loop CFD similarity over a horizon long enough for actuation information to convect from the pinball to the observer. Force histories and boundedness are inspected alongside similarity. This hierarchy is designed to reject formulas that exploit correlations peculiar to the teacher trajectory. + +The pipeline is reproducible in four stages: deterministic PPO inference, PySR fitting, CFD validation and figure generation. It should not be confused with an end-to-end symbolic reinforcement-learning algorithm. PPO and PySR are trained sequentially, and validation is an independent CFD rollout. This separation permits the neural and symbolic controllers to be compared from the same flow state with the same normalisation, actuator smoothing and observation schedule. + +\subsection{Reflection symmetry} + +Reflection about the centreline exchanges $T$ and $B$ and changes the sign of transverse quantities and rotation. The action transforms as +\begin{equation} + \mathcal{G}_a + \begin{bmatrix}\alpha_F\\\alpha_T\\\alpha_B\end{bmatrix} + = + \begin{bmatrix}-\alpha_F\\-\alpha_B\\-\alpha_T\end{bmatrix}. + \label{eq:gsym} +\end{equation} +One front relation and one shared rear relation are fitted; the lower-cylinder law is generated by evaluating the shared relation on the reflected state. This removes degeneracy caused by the strong correlation of the rear actions and prevents symmetry-related actuators from being interpreted as independent mechanisms. + +\subsection{Closed-loop model selection} +\label{sec:clselection} + +Each candidate expression is subjected to three tests. First, its one-step action fit is measured on held-out PPO data. Secondly, its dimensions, decoder convention, deployment state and reflection symmetry are audited. Thirdly, the PPO decoder is replaced by the symbolic expression and the controller is deployed in CFD from the same initial condition and with the same sampling and actuation filtering. + +The third test is decisive because a policy surrogate changes the state distribution on which all later actions are evaluated. In the present trajectories, a full-lag expression reached a one-step $R^2\simeq0.94$ but only $0.62$ closed-loop similarity. A lower-dimensional expression with $R^2\simeq0.32$ reached approximately $0.75$ similarity. Regression accuracy alone would therefore have selected the inferior controller. Terms that are correlated on the PPO trajectory but inactive after deployment are also removed. In particular, an early rear-action-rate term vanished because the deployed rear action was approximately constant. + +\section{Symbolic feedback laws and closed-loop performance} +\label{sec:srresults} + +\subsection{A joint law for K\'arm\'an cloaking} + +Scene-specific fits at four Reynolds numbers used different but correlated force and phase variables. Literal equality of the expressions was therefore not used as evidence of a shared mechanism. A stronger test was performed by fitting all four datasets jointly and deploying one algebraic structure in every scene. + +The raw joint PySR candidate retained in the formula archive is +\begin{equation} + \alpha_F^{\mathrm{raw}}=0.38505\,\dot a_B+\dot a_F-14.95165\,\mu C_{l,\mathrm{tot}}. + \label{eq:rawfrontlaw} +\end{equation} +It has a nominal offline $R^2$ of unity on the highly correlated joint trajectory. That number is not interpreted as perfect identification. When equation~\eqref{eq:rawfrontlaw} is deployed with the shared rear head, the rear action is constant, hence $\dot a_B=0$ after initialisation. The first term is therefore a teacher-trajectory correlate, not an independently exercised feedback route. Retaining it in the paper's mechanism statement would falsely suggest dynamic rear feedback. + +Because the shared rear head is constant, $\dot a_B$ becomes inactive after initialisation. The reduced relation used only for mechanism interpretation is +\begin{equation} + \boxed{\alpha_F=\dot a_F-14.952\,\mu C_{l,\mathrm{tot}}}, + \label{eq:frontlaw} +\end{equation} +and the rear relation reduces to +\begin{equation} + \boxed{\alpha_T\simeq3.414,\qquad \alpha_B\simeq-3.414.} + \label{eq:rearlaw} +\end{equation} +Here $\dot a_F$ is the backward-looking front action-rate feature formed with the scene control interval, and $\mu$ is the viscosity variable used in the joint library. The numerical coefficients depend on the Legacy normalisation, control interval and action convention and are not proposed as universal constants. The closed-loop values in table~\ref{tab:crossre} validate the archived raw expression~\eqref{eq:rawfrontlaw}; the reduced equation~\eqref{eq:frontlaw} has not yet been assigned a separate validation record and must not be read as an independently tested replacement. + +Equations~\eqref{eq:frontlaw}--\eqref{eq:rearlaw} separate the controller into a dynamic front contribution and a persistent antisymmetric rear contribution. The rear pair modifies the gap flow and supplies mean streamwise momentum to compensate the pinball velocity deficit. The front cylinder responds to the phase-rate and antisymmetric force state, regulating the residual lift and wake phase. + +\subsection{Cross-$\Rey_D$ validation} + +Table~\ref{tab:crossre} reports closed-loop performance. One symbolic expression is deployed without changing its algebraic structure. + +\begin{table} + \centering + \caption{Closed-loop K\'arm\'an-cloak similarity. All Reynolds numbers are based on one pinball-cylinder diameter.} + \label{tab:crossre} + \begin{tabular}{cccc} + \toprule + $\Rey_D$ & PPO & joint SR & comment\\ + \midrule + 25 & 0.961 & 0.847 & successful transfer, below PPO\\ + 50 & 0.954 & 0.888 & closest agreement with PPO\\ + 100 & 0.884 & 0.845 & robust intermediate-$\Rey_D$ transfer\\ + 200 & 0.795 & 0.806 & 0.819 with shorter control interval\\ + \bottomrule + \end{tabular} +\end{table} + +The symbolic controller remains effective over the full range. At $\Rey_D=200$ ($\Rey_{\mathrm{code}}=400$), reducing the control interval improves similarity from $0.806$ to $0.819$, indicating that temporal resolution contributes to the high-$\Rey_D$ degradation. This observation does not establish sampling as the only cause: the PPO baseline is also weaker, and the wake contains shorter coupled time scales. + +The important result is structural rather than numerical equality with PPO. A joint expression fitted to combined data retains most of the closed-loop performance across a factor of eight in $\Rey_D$. Reynolds-number dependence enters through the rate construction and viscosity-weighted lift feedback instead of through four unrelated policies. + +\draftfigure{Insert the SR cross-$\Rey_D$ performance figure and representative PPO/SR action traces.}{Closed-loop validation of the joint cloak law. The figure should compare PPO, symbolic and uncontrolled similarity at each $\Rey_D$ and show that the rear actions are approximately constant while the front action carries the dynamic response.}{fig:sr-crossre} + +\subsection{Transfer from periodic to transient disturbances} + +The same law was applied without refitting to two transient-vortex cases. The Lamb dipole and Taylor monopole differ qualitatively from a periodic street and are not labelled in the symbolic expression. Table~\ref{tab:vortextransfer} shows that the SR law remains competitive with PPO. + +\begin{table} + \centering + \caption{Transfer of the joint K\'arm\'an SR law to transient disturbances.} + \label{tab:vortextransfer} + \begin{tabular}{lcc} + \toprule + incident disturbance & PPO & transferred SR\\ + \midrule + Lamb vortex dipole & 0.942 & 0.949\\ + Taylor vortex monopole & 0.916 & 0.905\\ + \bottomrule + \end{tabular} +\end{table} + +The transfer is difficult to explain by waveform memorisation because the law contains neither a disturbance identifier nor an explicit target waveform. It uses local force and action-phase information that remains available when the incident field changes. The Taylor result is slightly below PPO and therefore also defines the scope of the claim: the relation is a reusable cloak backbone, not a universally optimal transient controller. + +\subsection{Physical interpretation} + +The joint relation may be written schematically as +\begin{equation} + \vect{\alpha}(t)\simeq + \underbrace{(0,\alpha_0,-\alpha_0)^{\mathsf T}}_{\text{mean rear compensation}} + +\underbrace{(\alpha_F(t),0,0)^{\mathsf T}}_{\text{front phase--force regulation}}. + \label{eq:mechanism} +\end{equation} +Opposite rear rotation accelerates the gap flow and changes the base-bleed jet, providing a mean correction to the blocked wake. The front cylinder carries most of the time-dependent action and changes the instantaneous antisymmetric state. This decomposition is consistent with known actuator roles in the fluidic pinball, but the present objective differs from conventional drag reduction or stabilisation: the corrected wake must retain an imposed incident event at a downstream observer. + +The physical conclusion is deliberately narrower than the algebraic expression. The transferable finding is the division into persistent rear compensation and dynamic front rate--lift feedback. The coefficient in \eqref{eq:frontlaw} is tied to the dataset and is not a new nondimensional fluid constant. + +\subsection{Illusion as target-dependent retuning} + +Illusion adds a non-zero target state. Compact scene-specific laws are obtained near the natural controllable scale. For target diameter $0.75D$, +\begin{equation} + \alpha_F=-0.169(C_{l,\mathrm{tot}}+\dot C_{l,\mathrm{tot}})-1.240, + \label{eq:ill075} +\end{equation} +whereas for $1.0D$, +\begin{equation} + \alpha_F=0.0123(\dot u_a+u_a+26.5). + \label{eq:ill100} +\end{equation} +These formulas use different local coordinates around different target manifolds but both retain low-dimensional force or phase feedback. + +A joint law fitted to the $0.75D$ and $1.0D$ targets is +\begin{align} + \alpha_F={}&C_{d,\mathrm{tot}}-(C_{d,\mathrm{err}}+5.428) + +0.00978(\dot u_a+u_a), + \label{eq:illfront}\\ + \alpha_T={}&0.535\left[C_{d,\mathrm{err}} + -(C_{d,\mathrm{rear}}-C_{l,\mathrm{err}})\right]+2.782, + \label{eq:illrear} +\end{align} +with the lower action generated by reflection. It reaches full-horizon similarities of $0.982$ and $0.958$ on the two fitted target diameters in the current validation JSON files; the corresponding tail-window values are $0.807$ and $0.886$. The distinction shows that a high aggregate score need not imply uniform long-time retention. Thus moderate illusion retains mean-flow correction, phase information and force regulation, but expresses them relative to target error. + +\begin{table} + \centering + \caption{Cross-diameter deployment of the joint illusion law.} + \label{tab:illusion} + \begin{tabular}{ccl} + \toprule + target diameter & joint-SR similarity & interpretation\\ + \midrule + $0.5D$ & 0.854 & partial transfer\\ + $0.6D$ & 0.939 & strong transfer\\ + $0.75D$ & $\approx0.98$ & fitted near-native regime\\ + $1.0D$ & 0.958 & fitted near-native regime\\ + $1.2D$ & 0.849 & beginning of degradation\\ + $1.5D$ & -- & not represented by present library\\ + $2.0D$ & 0.675 & weak transfer\\ + \bottomrule + \end{tabular} +\end{table} + +Table~\ref{tab:illusion} defines a finite generalisation range. The shared law is effective while the target wake remains near the natural controllable state, but it degrades as the target scale changes. + +\draftfigure{Insert the illusion diameter-generalisation curve. Add the $1.5D$ PPO spectrum and autocorrelation only after the original trajectory has been restored and the diagnostics regenerated.}{Target-scale dependence of the symbolic illusion controller. Near-native targets admit a compact target-error law, whereas no useful symbolic closed-loop controller has yet been validated for $1.5D$ with the present feature library.}{fig:illusion-regimes} + +The result supports +\begin{equation} + \text{illusion}=\text{shared compensation}+\text{target-specific retuning}, +\end{equation} +not a universal formula for all target cylinders. The individual formulas in equations~\eqref{eq:ill075} and~\eqref{eq:ill100} are useful local descriptions, whereas equations~\eqref{eq:illfront}--\eqref{eq:illrear} test whether a common target-error coordinate survives across scenes. The latter is the stronger generalisation test even when an individual fit has a better offline score. + +The coefficient signs in the joint front law deserve explicit attention. The archived PySR expression is +\begin{equation} + C_{d,\mathrm{tot}}-(C_{d,\mathrm{err}}+5.4277) + -(-0.0097839)(\dot u_a+u_a), +\end{equation} +so its final phase term is positive after resolving the double negative. Writing the unresolved archive syntax alongside the simplified mathematical law prevents a transcription error between the machine-readable formula and the manuscript. + +Cross-diameter deployment is performed without introducing target diameter as an input. Consequently, the degradation curve measures extrapolation of a law whose only target information is supplied through the instantaneous target-error features. A separate diameter-marker regression can fit a diameter-dependent expression, but it answers an easier question and is not the principal result reported here. The $0.8D$ validation, omitted from the compact table for readability, gives a similarity of $0.908$ and follows the same near-training-range trend. + +\subsection{The $1.5D$ regime boundary} + +The $1.5D$ case is a failure of the present symbolic representation rather than a failure of neural control. The stored PPO baseline remains effective, whereas PySR returns a degenerate lag-copy relation with nominal one-step $R^2=1$ and no useful canonical symbolic closed-loop validation. Exploratory analysis indicates rapid periodic modulation, but the previously quoted frequency ratio, lag-two autocorrelation and feature correlations cannot presently be recomputed because the underlying trajectory NPZ is absent from the archived analysis tree. Those numerical diagnostics are therefore withheld pending restoration of the raw trajectory. + +Both PySR and sparse linear identification then favour lagged-action proxies. Such expressions predict one step but do not identify a mechanism: the lagged action stands in for a rapidly switching internal phase that is absent from the feature library. The appropriate response is not to report the proxy as a physical law. The case instead shows that an explicit oscillator, a sufficient delay embedding or a target-scale variable is required. SR is therefore useful both when it succeeds and when it exposes a missing state coordinate. + +\section{Observable-inferred decomposition of the active correction} +\label{sec:oid} + +Symbolic regression answers which measured quantities are mapped to which rotations, but an action-space law does not identify the spatial structures responsible for force and downstream matching. We therefore analyse the active correction field independently. Proper orthogonal decomposition (POD) provides an energy-ranked basis, while observable-inferred decomposition (OID) rotates a retained POD subspace towards covariance with a selected output, following the broader observable-correlation viewpoint of extended POD \citep{Boree2003}. This distinction is important because a low-energy near-body structure can dominate integrated force, whereas an energetic convected structure can dominate a downstream probe. + +\subsection{Correction fields and OID construction} + +For aligned vectorised correction snapshots $\vect{x}_t$, let +\begin{equation} + \vect{X}=\vect{U}\vect{\Sigma}\vect{V}^{\mathsf T},\qquad + \vect{z}_t=\vect{U}_r^{\mathsf T}\vect{x}_t. +\end{equation} +For an observable $\vect{y}_t$, the reduced cross-covariance is +\begin{equation} + \vect{C}_{zy}=N^{-1}\sum_t\vect{z}_t\vect{y}_t^{\mathsf T} + =\vect{U}_y\vect{\Sigma}_y\vect{V}_y^{\mathsf T}, +\end{equation} +and the OID field directions are $\vect{\psi}^{(y)}_k=\vect{U}_r\vect{u}_{y,k}$. Force, downstream-signature, suppression and action observables are treated separately while sharing the underlying correction subspace. OID is therefore not a latent-state reconstruction of PPO and is not used to modify the SR law. + +Five POD modes capture $99.97\%$ of steady-cloak correction energy, $99.90\%$ for K\'arm\'an cloak, $99.93\%$ and $99.91\%$ for the $0.75D$ and $1.0D$ illusions, and $97.90\%$ for $1.5D$. This compactness concerns the active change, not the full multi-scene flow. The lower value at $1.5D$ is consistent with a correction distributed over additional scales. + +\begin{table} + \centering + \caption{Two-coordinate held-out prediction from observable-informed and energy-ranked coordinates. Negative POD $R^2$ means that the two-coordinate predictor is worse than the held-out mean.} + \label{tab:oidpred} + \begin{tabular}{llrr} + \toprule + scene & observable & OID $R^2$ & POD $R^2$\\ + \midrule + K\'arm\'an cloak & force & 0.750 & 0.418\\ + illusion $0.75D$ & force & 0.435 & -2.426\\ + illusion $0.75D$ & signature & 0.661 & -0.034\\ + illusion $1.0D$ & force & 0.671 & -0.237\\ + illusion $1.0D$ & signature & 0.586 & -0.160\\ + illusion $1.5D$ & force & 0.640 & 0.264\\ + illusion $1.5D$ & signature & 0.315 & 0.060\\ + \bottomrule + \end{tabular} +\end{table} + +Table~\ref{tab:oidpred} shows that observable ranking, rather than extra state dimension, produces the predictive advantage. The K\'arm\'an force result is particularly clear. For the corresponding delayed signature error, successful cloaking leaves very little target variance; an $R^2$ close to zero is consequently not evidence that the correction is absent. Metrics that normalise by target variance become ill-conditioned precisely when the error is nearly eliminated. + +\subsection{Task-dependent force--signature geometry} + +The leading force and signature directions vary systematically with objective. In steady cloak, the signed force--suppression overlap is $+0.763$: reducing natural fluctuations and regulating force rely on related near-wake changes. The full-field fluctuation RMS decreases by $99.43\%$, lift RMS by $83.3\%$, and recirculation area by $38.5\%$, while recirculation length changes by only $3.2\%$. The correction narrows and quietens the wake rather than simply deleting its streamwise recirculation extent. + +In K\'arm\'an cloak, the leading force--signature overlap is approximately $-0.034$ and remains close to zero over the tested convective delays. This near-orthogonality is physically plausible: the controller must regulate additional pinball force while preserving, not suppressing, the incoming street. For illusion the signed overlaps are $-0.082$, $-0.495$ and $-0.932$ for $0.75D$, $1.0D$ and $1.5D$. The $0.75D$ value is rank-sensitive and supports only partial separation; the latter two are more stable. A negative overlap is an orientation within the retained correction subspace, not proof of dynamically independent channels. + +Raw observations predict K\'arm\'an PPO action with $R^2=0.956$, whereas two force-OID coordinates explain only about $22.5\%$ of action variance. This contrast reinforces the division of labour: SR approximates the observation-to-action map, while OID identifies output-relevant structures in the action-induced field. Neither should be substituted for the other. + +\draftfigure{Insert the selected OID field-analysis panels after final figure assembly.}{Observable-informed correction modes and held-out prediction. Force relevance is concentrated in the body-connected near wake, whereas signature relevance shifts towards the convected correction near the observer. Error bars should show retained-rank or leave-one-cycle-out sensitivity where available.}{fig:oid} + +\section{Lagged canonical-correlation decomposition and propagation} +\label{sec:ccd} + +OID is instantaneous. Canonical-correlation decomposition (CCD) augments the observable with delays to distinguish the source correction near the cylinders from its downstream descendant. For delays $\{\tau_q\}_{q=1}^Q$, define +\begin{equation} + \vect{P}_t=[\vect{p}(t+\tau_1),\ldots,\vect{p}(t+\tau_Q)] +\end{equation} +and +\begin{equation} + \vect{C}_{PZ}=N^{-1}\sum_t\vect{P}_t^{\mathsf T}\vect{z}_t + =\vect{R}\vect{\Sigma}\vect{W}^{\mathsf T}. +\end{equation} +The field directions are $\vect{\psi}^{\mathrm{CCD}}_k=\vect{U}_r\vect{w}_k$. Periodic cases use leave-one-cycle-out tests; the steady case is evaluated with suppression and recirculation diagnostics. Delay embedding is not a claim of causality by itself, but the known ordering of cylinder actuation, near-wake response and sensor arrival gives the correlation a physically constrained interpretation. + +\subsection{Common cloak correction and spatial zones} + +Across steady, K\'arm\'an, Lamb and Taylor cloak, the dominant correction is a positive streamwise-velocity increment behind the pinball, with dipole-like velocity and concentrated vorticity changes around the rotating cylinders. In the common analysis normalisation, correction-field RMS values are $0.196$, $0.397$, $0.146$ and $0.188$, respectively. Similarity of structure does not mean equality of amplitude: the periodic K\'arm\'an task requires the largest correction because it must remove pinball distortion while transmitting an incoming street. + +The field is examined in overlapping near-body, body-wake and sensor zones. Force-correlated directions are strongest around the surfaces, separated shear layers and body-connected rolled-up vorticity, consistent with impulse-based interpretations of instantaneous force. Delayed signature directions extend farther downstream as the active correction is convected and deformed. The zones are diagnostic masks, not independent subsystems. + +Action-CCD associates the leading correction with the persistent rear rotation; higher directions carry the dynamic front contribution. Force-CCD emphasises the body-connected source, whereas signature-CCD emphasises the transported consequence. This yields the physically testable ordering +\begin{equation} + \text{rotation}\rightarrow\text{near-body correction} + \rightarrow\text{wake transport}\rightarrow\text{observer signal}, +\end{equation} +although the present evidence is entirely numerical and no experimental measurements are included. + +\subsection{Illusion target-correction comparison} + +For illusion, the active correction can be compared with the correction required to transform the blocked pinball field into the target-cylinder field. At retained rank six, leading-mode absolute overlaps are $0.383$, $0.926$ and $0.922$ for target diameters $0.75D$, $1.0D$ and $1.5D$; at rank ten they become $0.320$, $0.684$ and $0.661$. The $1.0D$ target provides the clearest robust evidence of a shared leading correction. The $0.75D$ match is partial and rank-sensitive. At $1.5D$, a target-like leading spatial direction coexists with higher-order and temporal disagreement, consistent with the PPO high-frequency action and the failure of the instantaneous SR library. + +These results refine, rather than simply repeat, the SR interpretation. Mean deficit compensation can remain spatially recognisable even when the temporal policy needed to realise it cannot be represented by the current symbolic coordinates. A strong leading-mode overlap is therefore not sufficient evidence for a transferable feedback law. + +\draftfigure{Insert phase-aligned active corrections and lagged CCD modes after assembling the final SR, OID and CCD panels.}{Propagation of the active correction. Columns should distinguish action-, force- and delayed-signature-informed structures, with near-body, body-wake and sensor zones marked. Lamb and Taylor panels test whether the positive streamwise cloak correction survives a change from periodic to transient incidence.}{fig:ccd} + +\section{Integrated mechanism and limitations} +\label{sec:field} + +SR maps measurements to actions but does not show where those actions modify the flow. We therefore use the active correction +\begin{equation} + \Delta\vect{q}_{\mathrm{ctl}} + =\vect{q}_{\mathrm{ctl}}-\vect{q}_{\mathrm{blk}} + \label{eq:dqctl} +\end{equation} +rather than decomposing the raw controlled field. For illusion, the correction required to transform the blocked pinball wake into the target is +\begin{equation} + \Delta\vect{q}_{\mathrm{tar}} + =\vect{q}_{\mathrm{tar}}-\vect{q}_{\mathrm{blk}}. +\end{equation} +This subtraction separates the active change from the incident disturbance and natural pinball wake. + +Five POD modes capture $99.97\%$ of the steady-cloak correction energy, $99.90\%$ for K\'arm\'an cloak, $99.93\%$ and $99.91\%$ for the $0.75D$ and $1.0D$ illusions, and $97.90\%$ for the $1.5D$ illusion. The actuator therefore modifies the flow within a compact subspace even though the complete flow is not low-dimensional over all scenes. + +The leading spatial correction shared by steady, K\'arm\'an, Lamb and Taylor cloak is a positive streamwise-velocity increment behind the pinball, accompanied by near-body dipole-like velocity and vorticity changes. This is the field counterpart of the rear counter-rotation in \eqref{eq:rearlaw}: it compensates the pinball-induced velocity deficit. Time-dependent near-body changes are consistent with the front phase--force term in \eqref{eq:frontlaw}. + +Observable-informed projections further show why force matching and downstream matching must not be conflated. Two observable-informed coordinates predict K\'arm\'an force with $R^2=0.750$, compared with $0.418$ for two energy-ranked POD coordinates. For illusion, the same two-coordinate comparison gives force/signature $R^2$ values of $0.435/0.661$, $0.671/0.586$ and $0.640/0.315$ for $0.75D$, $1.0D$ and $1.5D$, respectively; the corresponding POD values are substantially lower. The force-relevant structure is concentrated in the body-connected near wake, whereas the signature-relevant structure is its convected descendant near the observer. + +\draftfigure{Insert the phase-aligned active correction fields for steady, K\'arm\'an, Lamb and Taylor cloak, together with the leading force- and signature-informed modes.}{Spatial consistency of the symbolic mechanism. Rear-cylinder compensation produces a common downstream streamwise increment, while force- and signature-relevant projections emphasise the near-body source and convected descendant, respectively.}{fig:correction-fields} + +These field results are not used to fit the symbolic law. They provide an independent consistency check for the mechanism chain +\begin{equation} + \text{measurements} + \rightarrow\text{compact actuation} + \rightarrow\text{near-body correction} + \rightarrow\text{body-wake transport} + \rightarrow\text{downstream signature}. + \label{eq:chain} +\end{equation} +They also explain why a common actuator mechanism can have different force and signature projections in steady suppression, incident-street preservation and target-wake synthesis. + +\section{Discussion} +\label{sec:discussion} + +\subsection{Why closed-loop validation changes the SR problem} + +Policy distillation differs fundamentally from ordinary supervised regression. The target data are generated by a controller that shapes its own state distribution. Once the symbolic surrogate replaces PPO, each action changes all future observations. High one-step accuracy can preserve correlations that are incidental to the PPO trajectory while accumulating a systematic phase error in deployment. Closed-loop CFD must therefore be treated as part of symbolic model selection rather than as a final illustration. + +This criterion also limits algebraic over-interpretation. Correlated forces, sensor values and action lags can yield multiple formulas with similar offline error. Reflection symmetry, dimensional construction, deployment activity and transfer performance are used to select a canonical representative. The identified mechanism is the robust actuator-role decomposition, not the uniqueness of every algebraic term. + +\subsection{Scope of the common cloak backbone} + +The strongest evidence for a reusable mechanism is the combination of cross-$\Rey_D$ and cross-disturbance transfer. The joint law retains substantial performance from $\Rey_D=25$ to 200 and transfers from a periodic street to isolated vortices. This suggests that the controller responds primarily to the additional distortion introduced by the pinball. The incident field changes the timing and amplitude of the response, but rear momentum compensation and front phase--force regulation remain useful. + +The result does not imply complete invariance. Sampling sensitivity increases at high $\Rey_D$, the Taylor transient remains imperfect, and the formula has been evaluated on the state manifolds reached by the trained policies. Arbitrary initial conditions, different sensor locations or different actuator limits may require a new rate coordinate or refitting. + +\subsection{Why illusion has a regime boundary} + +Cloaking cancels the pinball contribution relative to an incident background; illusion must additionally create the difference between the corrected pinball wake and a target wake. When target and natural controllable scales are close, target-error feedback retunes the cloak backbone. As the target diameter grows, the controller must reorganise frequency, amplitude and spatial scale more strongly. The $1.5D$ policy appears to use a rapid internal phase state, and the $2.0D$ transfer is weak. The symbolic failure is consequently physically informative: the control state requires a temporal coordinate that cannot be reconstructed from the present instantaneous force and probe library. + +\subsection{What the symbolic law establishes} + +The evidence supports three levels of claim, which should not be collapsed. At the empirical level, one algebraic structure provides useful closed-loop K\'arm\'an cloaking over a factor of eight in $\Rey_D$ and transfers to two transient disturbances. At the mechanistic level, the deployment audit and field correction support a division between mean rear compensation and dynamic front regulation. At the universal level, however, the available evidence is insufficient: coefficients depend on the Legacy plant, and neither three-dimensional flow nor alternative actuator geometry has been tested. The paper's main contribution is therefore a transferable mechanism within a documented numerical family, not a universal constitutive law for hydrodynamic cloaks. + +The raw-versus-canonical distinction in equations~\eqref{eq:rawfrontlaw} and~\eqref{eq:frontlaw} illustrates why symbolic interpretability requires intervention. An expression tree does not become a mechanism merely by being short. The raw $\dot a_B$ term is mathematically legitimate on the PPO trajectory and improves neither deployment activity nor physical explanation once the rear head becomes constant. Removing it is analogous to testing a putative causal input by changing the operating distribution: the symbolic controller itself supplies that intervention. This is also why the nominal $R^2=1$ attached to the archived joint formula should not dominate interpretation. + +The implicit appearance of $\dot a_F$ warrants similar caution. Written literally, equation~\eqref{eq:frontlaw} contains the derivative of the output being computed. In implementation it is an available finite difference from the previous applied action, so the law is a discrete dynamic controller rather than an algebraic loop. If $k$ indexes control decisions, +\begin{equation} + \dot a_F^k=\frac{a_F^{k-1}-a_F^{k-2}}{\Delta t_c} +\end{equation} +is formed from stored applied actions before $\alpha_F^k$ is evaluated. This convention must accompany any reproduction because using the newly requested action in the difference would define a different controller. The rate term acts as a compact phase coordinate, but it is not asserted to equal a material derivative or a state derivative of the fluid. + +\subsection{Implications for sensor and controller design} + +The extracted feature set suggests a hierarchy for future controller design. Mean rear compensation requires little dynamic information and could plausibly be supplied as a calibrated operating-point schedule. The front cylinder requires an antisymmetric force measurement and a temporal coordinate. The downstream probes remain important to PPO training and reward evaluation, but their limited appearance in the canonical K\'arm\'an law suggests that the distilled controller can use local force feedback once the compensation operating point has been discovered. This is a hypothesis about the tested closed-loop manifold, not a demonstration that probes can be removed under noise, drift or unseen incidence. + +The illusion law differs because target errors enter directly. A target wake is not specified by one scalar diameter in the principal joint formula; it is represented by phase-dependent force errors and a downstream phase coordinate. This design allows the same expression to interpolate moderate target changes, but it also explains why extrapolation fails. As target scale grows, the available error coordinates may no longer resolve whether a mismatch should be corrected by changing mean momentum, shedding phase or oscillation frequency. The degenerate lag-copy fit and absence of a useful symbolic closed-loop result reveal this ambiguity; the detailed spectrum should be restored from the original trajectory before publication. + +A practical successor to the present library would introduce a minimal oscillator state rather than indiscriminately adding lags. Two quadrature variables estimated from a narrow-band force or probe signal could encode phase without using the previous action as a proxy. Alternatively, a delay-coordinate state could be selected by observability and closed-loop tests. Both choices would increase complexity and should be justified by improvement at $1.5D$ without degrading the compact laws at $0.75D$ and $1.0D$. The present negative result supplies a concrete benchmark for that extension. + +\subsection{Numerical provenance and reproducibility} + +All mechanism coefficients and validation values in this article originate from the Legacy $1280\times512$ parabolic-inlet, no-slip-wall dataset. This provenance is repeated because a superficially similar V5 environment uses $2000\times600$ nodes, uniform inflow and free-slip walls. V5 may be appropriate for new training studies, but mixing its trajectories with the Legacy regression would conflate changes in blockage, wall boundary layers, action maps and normalisation. A future cross-plant study should treat V5 as an external validation domain and should report whether coefficients are refitted, not silently pool the two datasets. + +The computational record contains machine-readable scene definitions, formula files, deterministic PPO trajectories and closed-loop validation summaries. Formula JSON files retain feature names and archive syntax; validation JSON files retain scene, controller mode, number of decisions and similarity. The scene registry is the source of truth when summary documents disagree. One such example is the $1.0D$ illusion similarity: the registry records $0.958$ for the current canonical validation, while an earlier results summary reports approximately $0.970$. We have retained approximate wording in the narrative where archival summaries differ and recommend regenerating the final table from a frozen registry immediately before submission. + +Figure placeholders intentionally compile without copied graphics. The suggested paths point to generated SR plots in the analysis directory, but the files have not been assumed to exist beside the Overleaf source. Before submission, each selected PDF should be copied into a manuscript figure directory, its plotted Reynolds-number labels should be audited against the $\Rey_D$ convention, and any caption language such as ``universal'' should be weakened to ``shared over the tested cases''. OID and CCD panels require separate assembly from their field outputs and uncertainty checks. + +\subsection{Limitations} + +The study is two-dimensional and uses numerical trajectories. No experimental results are included, and the simulations should not be described as experimental validation. Three-dimensional instability, measurement noise, actuator bandwidth and laboratory delay may change the extracted coefficients and possibly the preferred features. The reported SR coefficients belong to the Legacy solver configuration and should not be transplanted directly to the newer V5 plant. The correction-field records contain a limited number of independent cycles, and the larger-target cases require longer trajectories and explicit frequency-state features. + +Similarity is defined in a sparse downstream observer space and is not equivalent to pointwise cancellation everywhere. Full-field correction and force results reduce this ambiguity but do not establish invisibility to every possible observer. Finally, symbolic expressions are empirical closed-loop surrogates, not governing equations for the Navier--Stokes dynamics. + +\subsection{Comparison of cloak and illusion identification problems} + +Cloak and illusion produce superficially similar regression tables but pose different identification problems. For cloak, the desired observer signal is inherited from the incident flow. The controller should remove the incremental distortion created by the pinball, so force and phase variables can be interpreted relative to a recurring compensation task. This is why a formula trained on a periodic street can remain useful for isolated vortices: the incident waveform changes, but the additional blockage and body-connected distortion retain common actuator-side features. + +For illusion, the reference itself changes. The error is generated jointly by the pinball dynamics and a target cylinder that is absent from the controlled domain. A target-force harmonic reconstruction supplies phase information during training, but the controlled flow can depart from that phase manifold in deployment. The joint formula succeeds near $0.75D$--$1.0D$ because target errors remain informative local coordinates there. Beyond this range, equal instantaneous errors can demand different actions depending on target phase and frequency history. The cross-diameter decline is thus not merely ordinary extrapolation in a scalar parameter; it is loss of state identifiability in the chosen feature space. + +This difference also clarifies why a diameter marker is not a complete remedy. A marker can tell PySR which target family is requested, but it does not supply the missing oscillator phase at $1.5D$. Conversely, a phase coordinate without target scale may distinguish switching direction while failing to choose the required mean correction. A robust large-range illusion controller will probably require both a target descriptor and a dynamic phase state. Establishing the minimal pair is a natural next symbolic-identification problem. + +\subsection{Why the field analyses remain secondary to SR} + +OID and CCD strengthen the mechanism claim but do not replace the central policy result. A spatial mode can recur across cases because geometrically similar actuators create similar local disturbances, even if the feedback rules that time those disturbances are unrelated. The cross-$\Rey_D$ and cross-disturbance closed-loop deployments directly test the feedback relation; field decompositions then ask whether its inferred actuator roles have a consistent consequence. This ordering avoids using visually similar vorticity panels as proof of controller equivalence. + +Conversely, SR alone could mistake a compact correlation for physics. The positive downstream streamwise correction is the expected spatial consequence of rear counter-rotation compensating a blocked mean wake. The body-connected force modes and convected signature modes explain why the same action can influence two reward channels at different locations and times. The agreement is therefore triangulation: policy transfer, deployment activity and field organisation support one another while retaining distinct uncertainties. + +The field analyses also constrain the language of invisibility. Sparse-sensor similarity can be high even when correction energy remains near the cylinders, and OID deliberately selects structures relevant to one observable. CCD shows transport towards the sensor zone, not cancellation for every possible observer. A full observability claim would require dense multi-component measurements over a prescribed exterior region and robustness to alternative observer placement. Those tests are beyond the current dataset. + +\subsection{Prospects for closed-loop symbolic discovery} + +The present workflow uses CFD validation after PySR search because evaluating every evolutionary candidate in CFD would be prohibitive. A future method could incorporate closed-loop information more efficiently through staged screening. Offline Pareto fronts could first be filtered by symmetry, boundedness and local sensitivity. A differentiable or data-driven short-horizon surrogate could then reject candidates with obvious phase drift, after which only a small set would enter full CFD. Importantly, the final acceptance criterion should remain the original solver, since surrogate agreement on the teacher distribution recreates the problem identified here. + +Multiple independent PPO seeds would provide another valuable axis. If different neural policies converge to the same symbolic actuator roles but different coefficients or correlated coordinates, the shared structure would be stronger evidence of mechanism. If they instead produce distinct successful laws, the result would reveal policy multiplicity: several feedback strategies may generate the same observer signature. Such multiplicity is scientifically relevant and should not be hidden by selecting one best seed. + +Noise and delay studies should likewise be performed at the symbolic level. Compact formulas can be more transparent but less forgiving than neural policies with implicit smoothing. Rate features amplify measurement noise, and the $\dot a_F$ coordinate depends on actuator telemetry and timing. Low-pass differentiation, state observers or explicit oscillator coordinates could improve robustness, but each changes the identified law. Reporting the filtering operator and its delay would be as important as reporting the coefficients. + +Finally, the symbolic law offers a tractable object for stability and sensitivity analysis. Around a periodic controlled orbit one could linearise the discrete controller together with a reduced flow response and examine Floquet multipliers as the control interval changes. Such an analysis could determine whether the SI400 improvement at $\Rey_D=200$ ($\Rey_{\mathrm{code}}=400$) results from increased phase margin or simply finer waveform tracking. The current data establish sensitivity but do not resolve that mechanism, so this remains a proposed extension rather than a conclusion. + +\section{Conclusions} +\label{sec:conclusion} + +DRL policies for hydrodynamic cloaking and illusion of the fluidic pinball have been distilled into explicit feedback laws and tested in closed-loop CFD. The main conclusions are: + +\begin{enumerate} + \item One-step action fit is insufficient for policy distillation. A model with $R^2\simeq0.94$ can perform substantially worse in closed loop than a lower-dimensional model with $R^2\simeq0.32$. Closed-loop CFD, symmetry and deployment relevance must be included in model selection. + \item K\'arm\'an cloaking across $\Rey_D=25$--200 admits a common actuator-side structure: approximately steady and opposite rear-cylinder rotation supplies mean wake compensation, while front-cylinder rate--lift feedback regulates phase and residual force. + \item The same symbolic law transfers without refitting to Lamb and Taylor transient vortices, supporting a reusable cloak backbone rather than memorisation of a periodic waveform. + \item Illusion near target diameters $0.75D$--$1.0D$ reuses the compensation mechanism with target-error feedback. Generalisation deteriorates as target scale departs from this regime. + \item The $1.5D$ target reveals a high-frequency policy state absent from the current feature library. This regime requires an oscillator, delay embedding or explicit target-frequency coordinate rather than a lagged-action proxy. + \item The active correction field is strongly low-dimensional and contains the downstream streamwise increment predicted by the symbolic rear-cylinder mechanism. Force and downstream signature are different observable projections of this common correction. +\end{enumerate} + +The broader result is that DRL and symbolic regression play complementary roles. DRL discovers high-performing strategies in a nonlinear delayed environment; symmetry-constrained SR identifies the smallest transferable feedback relation; and field analysis tests whether that relation has a consistent spatial consequence. This combination turns hydrodynamic cloaking from a black-box control demonstration into a testable mechanism for active wake-information management. + +\section*{Supplementary data} +Supplementary material will include the scene definitions, symbolic expressions, closed-loop validation records and correction-field datasets. + +\section*{Acknowledgements} +The authors acknowledge the computational resources and discussions that supported this work. + +\section*{Funding} +Funding information will be added in the final manuscript. + +\section*{Declaration of interests} +The authors report no conflict of interest. + +\section*{Author ORCIDs} +Author ORCID information will be added before submission. + +\bibliographystyle{jfm} +\bibliography{jfm} + +\end{document} diff --git a/docs/JFM_WYQ/My_JFM/Fig1.eps b/docs/JFM_WYQ/My_JFM/Fig1.eps new file mode 100644 index 0000000..729b4e0 --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/Fig1.eps @@ -0,0 +1,15554 @@ +%!PS-Adobe-3.1 EPSF-3.0 +%ADO_DSC_Encoding: Windows Roman +%%Title: A9R822C.tmp.pdf +%%Creator: Adobe Acrobat 9.4.3 +%%For: ajohns +%%CreationDate: 20/02/2019, 07:59:43 +%%BoundingBox: 0 0 324 142 +%%HiResBoundingBox: 0 0 323.2800 141.8400 +%%CropBox: 0 0 323.2800 141.8400 +%%LanguageLevel: 2 +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentNeededFeatures: (atend) +%%DocumentSuppliedFeatures: (atend) +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%DocumentCustomColors: (atend) +%%EndComments +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults +%%BeginProlog +%%BeginResource: procset Adobe_AGM_Utils 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{currentpacking true setpacking}if +userdict/Adobe_AGM_Utils 75 dict dup begin put +/bdf +{bind def}bind def +/nd{null def}bdf +/xdf +{exch def}bdf +/ldf +{load def}bdf +/ddf +{put}bdf +/xddf +{3 -1 roll put}bdf +/xpt +{exch put}bdf +/ndf +{ + exch dup where{ + pop pop pop + }{ + xdf + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/gx +{get exec}bdf +/ps_level + /languagelevel where{ + pop systemdict/languagelevel gx + }{ + 1 + }ifelse +def +/level2 + ps_level 2 ge +def +/level3 + ps_level 3 ge +def +/ps_version + {version cvr}stopped{-1}if +def +/set_gvm +{currentglobal exch setglobal}bdf +/reset_gvm +{setglobal}bdf +/makereadonlyarray +{ + /packedarray where{pop packedarray + }{ + array astore readonly}ifelse +}bdf +/map_reserved_ink_name +{ + dup type/stringtype eq{ + dup/Red eq{ + pop(_Red_) + }{ + dup/Green eq{ + pop(_Green_) + }{ + dup/Blue eq{ + pop(_Blue_) + }{ + dup()cvn eq{ + pop(Process) + }if + }ifelse + }ifelse + }ifelse + }if +}bdf +/AGMUTIL_GSTATE 22 dict def +/get_gstate +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_clr_spc currentcolorspace def + /AGMUTIL_GSTATE_clr_indx 0 def + /AGMUTIL_GSTATE_clr_comps 12 array def + mark currentcolor counttomark + {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop + /AGMUTIL_GSTATE_fnt rootfont def + /AGMUTIL_GSTATE_lw currentlinewidth def + /AGMUTIL_GSTATE_lc currentlinecap def + /AGMUTIL_GSTATE_lj currentlinejoin def + /AGMUTIL_GSTATE_ml currentmiterlimit def + currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf + /AGMUTIL_GSTATE_sa currentstrokeadjust def + /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def + /AGMUTIL_GSTATE_op currentoverprint def + /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def + /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def + currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf + cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf + /AGMUTIL_GSTATE_ht currenthalftone def + /AGMUTIL_GSTATE_flt currentflat def + end +}def +/set_gstate +{ + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_clr_spc setcolorspace + AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor + AGMUTIL_GSTATE_fnt setfont + AGMUTIL_GSTATE_lw setlinewidth + AGMUTIL_GSTATE_lc setlinecap + AGMUTIL_GSTATE_lj setlinejoin + AGMUTIL_GSTATE_ml setmiterlimit + AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash + AGMUTIL_GSTATE_sa setstrokeadjust + AGMUTIL_GSTATE_clr_rnd setcolorrendering + AGMUTIL_GSTATE_op setoverprint + AGMUTIL_GSTATE_bg cvx setblackgeneration + AGMUTIL_GSTATE_ucr cvx setundercolorremoval + AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx + AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer + AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or + { + currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne + { + mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark + }if + }{ + AGMUTIL_GSTATE_ht sethalftone + }ifelse + AGMUTIL_GSTATE_flt setflat + end +}def +/get_gstate_and_matrix +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_ctm matrix currentmatrix def + end + get_gstate +}def +/set_gstate_and_matrix +{ + set_gstate + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_ctm setmatrix + end +}def +/AGMUTIL_str256 256 string def +/AGMUTIL_src256 256 string def +/AGMUTIL_dst64 64 string def +/AGMUTIL_srcLen nd +/AGMUTIL_ndx nd +/AGMUTIL_cpd nd +/capture_cpd{ + //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf +}def +/thold_halftone +{ + level3 + {sethalftone currenthalftone} + { + dup/HalftoneType get 3 eq + { + sethalftone currenthalftone + }{ + begin + Width Height mul{ + Thresholds read{pop}if + }repeat + end + currenthalftone + }ifelse + }ifelse +}def +/rdcmntline +{ + currentfile AGMUTIL_str256 readline pop + (%)anchorsearch{pop}if +}bdf +/filter_cmyk +{ + dup type/filetype ne{ + exch()/SubFileDecode filter + }{ + exch pop + } + ifelse + [ + exch + { + AGMUTIL_src256 readstring pop + dup length/AGMUTIL_srcLen exch def + /AGMUTIL_ndx 0 def + AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ + 1 index exch get + AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put + /AGMUTIL_ndx AGMUTIL_ndx 1 add def + }for + pop + AGMUTIL_dst64 0 AGMUTIL_ndx getinterval + } + bind + /exec cvx + ]cvx +}bdf +/filter_indexed_devn +{ + cvi Names length mul names_index add Lookup exch get +}bdf +/filter_devn +{ + 4 dict begin + /srcStr xdf + /dstStr xdf + dup type/filetype ne{ + 0()/SubFileDecode filter + }if + [ + exch + [ + /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx + currentdict/srcStr get/readstring cvx/pop cvx + /dup cvx/length cvx 0/gt cvx[ + Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx + names_index Names length currentdict/srcStr get length 1 sub{ + 1/index cvx/exch cvx/get cvx + currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx + Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx + }for + currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx + ]cvx/if cvx + /end cvx + ]cvx + bind + /exec cvx + ]cvx + end +}bdf +/AGMUTIL_imagefile nd +/read_image_file +{ + AGMUTIL_imagefile 0 setfileposition + 10 dict begin + /imageDict xdf + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + /imbufIdx 0 def + /origDataSource imageDict/DataSource get def + /origMultipleDataSources imageDict/MultipleDataSources get def + /origDecode imageDict/Decode get def + /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def + imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse + { + /imbufCnt imageDict/DataSource get length def + /imbufs imbufCnt array def + 0 1 imbufCnt 1 sub{ + /imbufIdx xdf + imbufs imbufIdx imbufLen string put + imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put + }for + DeviceN_PS2{ + imageDict begin + /DataSource[DataSource/devn_sep_datasource cvx]cvx def + /MultipleDataSources false def + /Decode[0 1]def + end + }if + }{ + /imbuf imbufLen string def + Indexed_DeviceN level3 not and DeviceN_NoneName or{ + /srcDataStrs[imageDict begin + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi string + }repeat + end]def + imageDict begin + /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def + /Decode[0 1]def + end + }{ + imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put + imageDict/Decode[0 1]put + }ifelse + }ifelse + imageDict exch + load exec + imageDict/DataSource origDataSource put + imageDict/MultipleDataSources origMultipleDataSources put + imageDict/Decode origDecode put + end +}bdf +/write_image_file +{ + begin + {(AGMUTIL_imagefile)(w+)file}stopped{ + false + }{ + Adobe_AGM_Utils/AGMUTIL_imagefile xddf + 2 dict begin + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{ + /imbuf imbufLen string def + }if + 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{ + pop + MultipleDataSources{ + 0 1 DataSource length 1 sub{ + DataSource type dup + /arraytype eq{ + pop DataSource exch gx + }{ + /filetype eq{ + DataSource exch get imbuf readstring pop + }{ + DataSource exch get + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }for + }{ + DataSource type dup + /arraytype eq{ + pop DataSource exec + }{ + /filetype eq{ + DataSource imbuf readstring pop + }{ + DataSource + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }ifelse + }for + end + true + }ifelse + end +}bdf +/close_image_file +{ + AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile +}def +statusdict/product known userdict/AGMP_current_show known not and{ + /pstr statusdict/product get def + pstr(HP LaserJet 2200)eq + pstr(HP LaserJet 4000 Series)eq or + pstr(HP LaserJet 4050 Series )eq or + pstr(HP LaserJet 8000 Series)eq or + pstr(HP LaserJet 8100 Series)eq or + pstr(HP LaserJet 8150 Series)eq or + pstr(HP LaserJet 5000 Series)eq or + pstr(HP LaserJet 5100 Series)eq or + pstr(HP Color LaserJet 4500)eq or + pstr(HP Color LaserJet 4600)eq or + pstr(HP LaserJet 5Si)eq or + pstr(HP LaserJet 1200 Series)eq or + pstr(HP LaserJet 1300 Series)eq or + pstr(HP LaserJet 4100 Series)eq or + { + userdict/AGMP_current_show/show load put + userdict/show{ + currentcolorspace 0 get + /Pattern eq + {false charpath f} + {AGMP_current_show}ifelse + }put + }if + currentdict/pstr undef +}if +/consumeimagedata +{ + begin + AGMIMG_init_common + currentdict/MultipleDataSources known not + {/MultipleDataSources false def}if + MultipleDataSources + { + DataSource 0 get type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width cvi string def + 1 1 Height cvi + { + pop + 0 1 DataSource length 1 sub + { + DataSource exch get + flushbuffer readstring pop pop + }for + }for + end + }if + dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and + { + Width Height mul cvi + { + 0 1 DataSource length 1 sub + {dup DataSource exch gx length exch 0 ne{pop}if}for + dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + } + { + /DataSource load type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width Decode length 2 idiv mul cvi string def + 1 1 Height{pop DataSource flushbuffer readstring pop pop}for + end + }if + dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and + { + Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul + { + DataSource length dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + }ifelse + end +}bdf +/addprocs +{ + 2{/exec load}repeat + 3 1 roll + [5 1 roll]bind cvx +}def +/modify_halftone_xfer +{ + currenthalftone dup length dict copy begin + currentdict 2 index known{ + 1 index load dup length dict copy begin + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end def + currentdict end sethalftone + }{ + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end sethalftone + pop + }ifelse +}def +/clonearray +{ + dup xcheck exch + dup length array exch + Adobe_AGM_Core/AGMCORE_tmp -1 ddf + { + Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf + dup type/dicttype eq + { + Adobe_AGM_Core/AGMCORE_tmp get + exch + clonedict + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + dup type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_tmp get exch + clonearray + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + exch dup + Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put + }forall + exch{cvx}if +}bdf +/clonedict +{ + dup length dict + begin + { + dup type/dicttype eq + {clonedict}if + dup type/arraytype eq + {clonearray}if + def + }forall + currentdict + end +}bdf +/DeviceN_PS2 +{ + /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and +}bdf +/Indexed_DeviceN +{ + /indexed_colorspace_dict AGMCORE_gget dup null ne{ + dup/CSDBase known{ + /CSDBase get/CSD get_res/Names known + }{ + pop false + }ifelse + }{ + pop false + }ifelse +}bdf +/DeviceN_NoneName +{ + /Names where{ + pop + false Names + { + (None)eq or + }forall + }{ + false + }ifelse +}bdf +/DeviceN_PS2_inRip_seps +{ + /AGMCORE_in_rip_sep where + { + pop dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and + { + /currentcolorspace exch AGMCORE_gput + false + }{ + true + }ifelse + }{ + true + }ifelse + }{ + true + }ifelse +}bdf +/base_colorspace_type +{ + dup type/arraytype eq{0 get}if +}bdf +/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse +{ + /pdfmark_5{cleartomark}bind def +}{ + /pdfmark_5{pdfmark}bind def +}ifelse +/ReadBypdfmark_5 +{ + currentfile exch 0 exch/SubFileDecode filter + /currentdistillerparams where + {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse + {flushfile cleartomark} + {/PUT pdfmark}ifelse +}bdf +/ReadBypdfmark_5_string +{ + 2 dict begin + /makerString exch def string/tmpString exch def + { + currentfile tmpString readline not{pop exit}if + makerString anchorsearch + { + pop pop cleartomark exit + }{ + 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5 + }ifelse + }loop + end +}bdf +/xpdfm +{ + { + dup 0 get/Label eq + { + aload length[exch 1 add 1 roll/PAGELABEL + }{ + aload pop + [{ThisPage}<<5 -2 roll>>/PUT + }ifelse + pdfmark_5 + }forall +}bdf +/lmt{ + dup 2 index le{exch}if pop dup 2 index ge{exch}if pop +}bdf +/int{ + dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop +}bdf +/ds{ + Adobe_AGM_Utils begin +}bdf +/dt{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Core 209 dict dup begin put +/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen[currentscreen]cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/AGMCORE_Default_PageSize nd +/AGMCORE_Default_flatness nd +/AGMCORE_currentbg nd +/AGMCORE_currentucr nd +/AGMCORE_pattern_paint_type 0 def +/knockout_unitsq nd +currentglobal true setglobal +[/CSA/Gradient/Procedure] +{ + /Generic/Category findresource dup length dict copy/Category defineresource pop +}forall +setglobal +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + 2 dict begin + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer{readline}stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + end + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type/dicttype eq{ + dup/HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup/HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +}def +/np +{newpath}bdf +/clp_npth +{clip np}def +/eoclp_npth +{eoclip np}def +/npth_clp +{np clip}def +/graphic_setup +{ + /AGMCORE_graphicsave save store + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + []0 setdash + 10 setmiterlimit + np + false setoverprint + false setstrokeadjust + //Adobe_AGM_Core/spot_alias gx + /Adobe_AGM_Image where{ + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + gx + }{ + pop pop + }ifelse + }if + /sep_colorspace_dict null AGMCORE_gput + 100 dict begin + /dictstackcount countdictstack def + /showpage{}def + mark +}def +/graphic_cleanup +{ + cleartomark + dictstackcount 1 countdictstack 1 sub{end}for + end + AGMCORE_graphicsave restore +}def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + clippath pathbbox np pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + }if + AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + }{ + AGMCORE_str256 exch AGMCORE_tmp xpt + /AGMCORE_tmp AGMCORE_tmp 1 add def + }ifelse + }forall +}bdf +/AGMCORE_CMYKDeviceNColorspaces[ + [/Separation/None/DeviceCMYK{0 0 0}] + [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind] + [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind] + [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind] + [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind] + [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind] + [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind] + [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind] + [/Separation(Cyan)/DeviceCMYK{0 0 0}] + [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind] + [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind] + [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind] + [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}] + [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind] + [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}] + [/DeviceCMYK] +]def +/ds{ + Adobe_AGM_Core begin + /currentdistillerparams where + { + pop currentdistillerparams/CoreDistVersion get 5000 lt + {<>setdistillerparams}if + }if + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + errordict/AGM_handleerror known not{ + errordict/AGM_handleerror errordict/handleerror get put + errordict/handleerror{ + Adobe_AGM_Core begin + $error/newerror get AGMCORE_cur_err null ne and{ + $error/newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error/newerror true put + end + errordict/AGM_handleerror get exec + }bind put + }if + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + AGMCORE_environ_ok not + {/AGMCORE_cur_err/AGMCORE_bad_environ def}if + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_currentbg currentblackgeneration def + /AGMCORE_currentucr currentundercolorremoval def + /AGMCORE_Default_flatness currentflat def + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and + }{ + false + }ifelse + def + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_tmpmatrix matrix def + /AGMCORE_gstack 32 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 14 def + /AGMCORE_&gsave/gsave ldf + /AGMCORE_&grestore/grestore ldf + /AGMCORE_&grestoreall/grestoreall ldf + /AGMCORE_&save/save ldf + /AGMCORE_&setoverprint/setoverprint ldf + /AGMCORE_gdictcopy{ + begin + {def}forall + end + }def + /AGMCORE_gput{ + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget{ + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave{ + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge{limitcheck}if + /AGMCORE_gstackptr exch store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore{ + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt{1 add}if + dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known + {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse + /AGMCORE_gstackptr exch store + }def + /grestoreall{ + AGMCORE_&grestoreall + /AGMCORE_gstackptr AGMCORE_gstacksaveptr store + }def + /save{ + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge{limitcheck}if + /AGMCORE_gstackptr exch store + /AGMCORE_gstacksaveptr AGMCORE_gstackptr store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /setoverprint{ + dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint + }def + 0 1 AGMCORE_gstack length 1 sub{ + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + }for + }if + level3/AGMCORE_&sysshfill AGMCORE_key_known not and + { + /AGMCORE_&sysshfill systemdict/shfill get def + /AGMCORE_&sysmakepattern systemdict/makepattern get def + /AGMCORE_&usrmakepattern/makepattern load def + }if + /currentcmykcolor[0 0 0 0]AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace[/DeviceGray]AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /devicen_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent()AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + /absolute_colorimetric_crd null AGMCORE_gput + /relative_colorimetric_crd null AGMCORE_gput + /saturation_crd null AGMCORE_gput + /perceptual_crd null AGMCORE_gput + currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf + cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf + << + /MaxPatternItem currentsystemparams/MaxPatternCache get + >> + setuserparams + end +}def +/ps +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3{ + 3 index add neg dup 0 lt{ + pop 0 + }if + 3 1 roll + }repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + {pop}ndf + /currentoverprint + {false}ndf + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_have_reported_unsupported_color_space false def + /AGMCORE_report_unsupported_color_space + { + AGMCORE_have_reported_unsupported_color_space false eq + { + (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)== + Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf + }if + }def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /sRGB ne + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where{pop}{ + /convert_spot_to_process + { + //Adobe_AGM_Core begin + dup map_alias{ + /Name get exch pop + }if + dup dup(None)eq exch(All)eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + //Adobe_AGM_Core/AGMCORE_name xddf + false + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq + AGMUTIL_cpd/OverrideSeparations known and + { + AGMUTIL_cpd/OverrideSeparations get + { + /HqnSpots/ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not + }{ + gsave + [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace + false + AGMUTIL_cpd/SeparationColorNames 2 copy known + { + get + {AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + }ifelse + /convert_to_process where{pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + dup true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process and}ifelse + } + forall + { + true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + (Black)eq or and + }forall + not + }{pop false}ifelse + }{ + false exch + { + /PhotoshopDuotoneList where{pop false}{true}ifelse + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process or}ifelse + } + { + convert_spot_to_process or + } + ifelse + } + forall + }ifelse + }ifelse + }def + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + /AGMCORE_IsSeparationAProcessColor + { + dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or + }def + AGMCORE_host_sep{ + /setcolortransfer + { + AGMCORE_cyan_plate{ + pop pop pop + }{ + AGMCORE_magenta_plate{ + 4 3 roll pop pop pop + }{ + AGMCORE_yellow_plate{ + 4 2 roll pop pop pop + }{ + 4 1 roll pop pop pop + }ifelse + }ifelse + }ifelse + settransfer + } + def + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /AGMCORE_RemoveProcessColorNames + { + 1 dict begin + /filtername + { + dup/Cyan eq 1 index(Cyan)eq or + {pop(_cyan_)}if + dup/Magenta eq 1 index(Magenta)eq or + {pop(_magenta_)}if + dup/Yellow eq 1 index(Yellow)eq or + {pop(_yellow_)}if + dup/Black eq 1 index(Black)eq or + {pop(_black_)}if + }def + dup type/arraytype eq + {[exch{filtername}forall]} + {filtername}ifelse + end + }def + level3{ + /AGMCORE_IsCurrentColor + { + dup AGMCORE_IsSeparationAProcessColor + { + AGMCORE_plate_ndx 0 eq + {dup(Cyan)eq exch/Cyan eq or}if + AGMCORE_plate_ndx 1 eq + {dup(Magenta)eq exch/Magenta eq or}if + AGMCORE_plate_ndx 2 eq + {dup(Yellow)eq exch/Yellow eq or}if + AGMCORE_plate_ndx 3 eq + {dup(Black)eq exch/Black eq or}if + AGMCORE_plate_ndx 4 eq + {pop false}if + }{ + gsave + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + grestore + }ifelse + }def + /AGMCORE_filter_functiondatasource + { + 5 dict begin + /data_in xdf + data_in type/stringtype eq + { + /ncomp xdf + /comp xdf + /string_out data_in length ncomp idiv string def + 0 ncomp data_in length 1 sub + { + string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put + }for + string_out + }{ + string/string_in xdf + /string_out 1 string def + /component xdf + [ + data_in string_in/readstring cvx + [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx + [/pop cvx()]cvx/ifelse cvx + ]cvx/ReusableStreamDecode filter + }ifelse + end + }def + /AGMCORE_separateShadingFunction + { + 2 dict begin + /paint? xdf + /channel xdf + dup type/dicttype eq + { + begin + FunctionType 0 eq + { + /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def + currentdict/Decode known + {/Decode Decode channel 2 mul 2 getinterval def}if + paint? not + {/Decode[1 1]def}if + }if + FunctionType 2 eq + { + paint? + { + /C0[C0 channel get 1 exch sub]def + /C1[C1 channel get 1 exch sub]def + }{ + /C0[1]def + /C1[1]def + }ifelse + }if + FunctionType 3 eq + { + /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def + }if + currentdict/Range known + {/Range[0 1]def}if + currentdict + end}{ + channel get 0 paint? AGMCORE_separateShadingFunction + }ifelse + end + }def + /AGMCORE_separateShading + { + 3 -1 roll begin + currentdict/Function known + { + currentdict/Background known + {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if + Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf + /ColorSpace[/DeviceGray]def + }{ + ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }{ + ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put + }ifelse + ColorSpace 0 get/Separation eq + { + { + [1/exch cvx/sub cvx]cvx + }{ + [/pop cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll put + pop + }{ + { + [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx + }{ + pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll bind put + }ifelse + ColorSpace 2/DeviceGray put + }ifelse + end + }def + /AGMCORE_separateShadingDict + { + dup/ColorSpace get + dup type/arraytype ne + {[exch]}if + dup 0 get/DeviceCMYK eq + { + exch begin + currentdict + AGMCORE_cyan_plate + {0 true}if + AGMCORE_magenta_plate + {1 true}if + AGMCORE_yellow_plate + {2 true}if + AGMCORE_black_plate + {3 true}if + AGMCORE_plate_ndx 4 eq + {0 false}if + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + currentdict + end exch + }if + dup 0 get/Separation eq + { + exch begin + ColorSpace 1 get dup/None ne exch/All ne and + { + ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /Separation + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + }if + }ifelse + }{ + currentdict ColorSpace 1 get AGMCORE_IsCurrentColor + 0 exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + }if + currentdict + end exch + }if + dup 0 get/DeviceN eq + { + exch begin + ColorSpace 1 get convert_to_process + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /DeviceN + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + /ColorSpace[/DeviceGray]def + }if + }ifelse + }{ + currentdict + false -1 ColorSpace 1 get + { + AGMCORE_IsCurrentColor + { + 1 add + exch pop true exch exit + }if + 1 add + }forall + exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + currentdict + end exch + }if + dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not + { + exch begin + ColorSpace dup type/arraytype eq + {0 get}if + /DeviceGray ne + { + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + ColorSpace 0 get/CIEBasedA eq + { + /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def + }if + ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or + { + /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def + }if + ColorSpace 0 get/CIEBasedDEFG eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }if + currentdict 0 false AGMCORE_separateShading + }if + }if + currentdict + end exch + }if + pop + dup/AGMCORE_ignoreshade known + { + begin + /ColorSpace[/Separation(None)/DeviceGray{}]def + currentdict end + }if + }def + /shfill + { + AGMCORE_separateShadingDict + dup/AGMCORE_ignoreshade known + {pop} + {AGMCORE_&sysshfill}ifelse + }def + /makepattern + { + exch + dup/PatternType get 2 eq + { + clonedict + begin + /Shading Shading AGMCORE_separateShadingDict def + Shading/AGMCORE_ignoreshade known + currentdict end exch + {pop<>}if + exch AGMCORE_&sysmakepattern + }{ + exch AGMCORE_&usrmakepattern + }ifelse + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4{4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + //Adobe_AGM_Core begin + /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf + end + [/Separation 4 -1 roll/DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation(All)/DeviceGray{}]setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4{4 index mul 4 1 roll}repeat + setcmykcolor pop + }ndf + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + /map_index + { + 1 index mul exch getinterval{255 div}forall + }bdf + /map_indexed_devn + { + Lookup Names length 3 -1 roll cvi map_index + }bdf + /n_color_components + { + base_colorspace_type + dup/DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + }bdf + level2{ + /mo/moveto ldf + /li/lineto ldf + /cv/curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + level2/setcolorspace AGMCORE_key_known not and{ + /AGMCORE_&&&setcolorspace/setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + /AGMCORE_SpotAliasAry2 where{ + begin + dup 0 get dup/Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + false set_spot_alias + dup 1 exch setsepcolorspace + true set_spot_alias + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + [ + /Separation Name + CSA map_csa + MappedCSA + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 xpt + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get[ + exch{ + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + }forall + ]1 xpt + }if + }ifelse + end + }if + }if + }def + /setcolorspace + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if + }def + }if + }{ + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1[8 0 0 8 0 0]{}image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + }def + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + }def + /setcolor_devicecolor + { + base_colorspace_type + dup/DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + /setcolor + { + currentcolorspace 0 get + dup/DeviceGray ne{ + dup/DeviceCMYK ne{ + dup/DeviceRGB ne{ + dup/Separation eq{ + pop + currentcolorspace 3 gx + currentcolorspace 2 get + }{ + dup/Indexed eq{ + pop + currentcolorspace 3 get dup type/stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err/AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + }def + }ifelse + /sop/setoverprint ldf + /lw/setlinewidth ldf + /lc/setlinecap ldf + /lj/setlinejoin ldf + /ml/setmiterlimit ldf + /dsh/setdash ldf + /sadj/setstrokeadjust ldf + /gry/setgray ldf + /rgb/setrgbcolor ldf + /cmyk[ + /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx + /setcmykcolor load dup type/operatortype ne{/exec cvx}if + ]cvx bdf + level3 AGMCORE_host_sep not and{ + /nzopmsc{ + 6 dict begin + /kk exch def + /yy exch def + /mm exch def + /cc exch def + /sum 0 def + cc 0 ne{/sum sum 2#1000 or def cc}if + mm 0 ne{/sum sum 2#0100 or def mm}if + yy 0 ne{/sum sum 2#0010 or def yy}if + kk 0 ne{/sum sum 2#0001 or def kk}if + AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace + sum 0 eq{0}if + end + setcolor + }bdf + }{ + /nzopmsc/cmyk ldf + }ifelse + /sep/setsepcolor ldf + /devn/setdevicencolor ldf + /idx/setindexedcolor ldf + /colr/setcolor ldf + /csacrd/set_csa_crd ldf + /sepcs/setsepcolorspace ldf + /devncs/setdevicencolorspace ldf + /idxcs/setindexedcolorspace ldf + /cp/closepath ldf + /clp/clp_npth ldf + /eclp/eoclp_npth ldf + /f/fill ldf + /ef/eofill ldf + /@/stroke ldf + /nclp/npth_clp ldf + /gset/graphic_setup ldf + /gcln/graphic_cleanup ldf + /ct/concat ldf + /cf/currentfile ldf + /fl/filter ldf + /rs/readstring ldf + /AGMCORE_def_ht currenthalftone def + /clonedict Adobe_AGM_Utils begin/clonedict load end def + /clonearray Adobe_AGM_Utils begin/clonearray load end def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall + /getrampcolor + { + /indx exch def + 0 1 NumComp 1 sub + { + dup + Samples exch get + dup type/stringtype eq{indx get}if + exch + Scaling exch get aload pop + 3 1 roll + mul add + }for + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /sssetbackground{ + aload pop + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /RadialShade + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /r2 xdf + /c2y xdf + /c2x xdf + /r1 xdf + /c1y xdf + /c1x xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + c1x c2x eq + { + c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope c2y c1y sub c2x c1x sub div def + /theta slope 1 atan def + c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if + c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if + }ifelse + gsave + clippath + c1x c1y translate + theta rotate + -90 rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax xdf + /xMax xdf + /yMin xdf + /xMin xdf + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + /max{2 copy gt{pop}{exch pop}ifelse}bdf + /min{2 copy lt{pop}{exch pop}ifelse}bdf + rampdict begin + 40 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + c1x c1y translate + theta rotate + -90 rotate + /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def + /c1y 0 def + /c1x 0 def + /c2x 0 def + ext0 + { + 0 getrampcolor + c2y r2 add r1 sub 0.0001 lt + { + c1x c1y r1 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2y r1 add r2 le + { + c1x c1y r1 0 360 arc + fill + } + { + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r1 neg def + /p1y c1y def + /p2x r1 def + /p2y c1y def + p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y p1x SS1 div neg def + /SS2 90 theta sub dup sin exch cos div def + /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y p2x SS2 div neg def + r1 r2 gt + { + /L1maxX p1x yMin p1y sub SS1 div add def + /L2maxX p2x yMin p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + c1x c2x sub dup mul + c1y c2y sub dup mul + add 0.5 exp + 0 dtransform + dup mul exch dup mul add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + /hires xdf + hires mul + /numpix xdf + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + /xInc c2x c1x sub numsteps div def + /yInc c2y c1y sub numsteps div def + /rInc r2 r1 sub numsteps div def + /cx c1x def + /cy c1y def + /radius r1 def + np + xInc 0 eq yInc 0 eq rInc 0 eq and and + { + 0 getrampcolor + cx cy radius 0 360 arc + stroke + NumSamples 1 sub getrampcolor + cx cy radius 72 hires div add 0 360 arc + 0 setlinewidth + stroke + }{ + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + cx cy radius 0 360 arc + /cx cx xInc add def + /cy cy yInc add def + /radius radius rInc add def + cx cy radius 360 0 arcn + eofill + rampIndxInc add + }repeat + pop + }ifelse + ext1 + { + c2y r2 add r1 lt + { + c2x c2y r2 0 360 arc + fill + }{ + c2y r1 add r2 sub 0.0001 le + { + c2x c2y r2 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r2 neg def + /p1y c2y def + /p2x r2 def + /p2y c2y def + p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y c2y p1x SS1 div sub def + /SS2 90 theta sub dup sin exch cos div def + /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y c2y p2x SS2 div sub def + r1 r2 lt + { + /L1maxX p1x yMax p1y sub SS1 div add def + /L2maxX p2x yMax p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + grestore + grestore + end + end + end + }ifelse + }bdf + /GenStrips + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /y2 xdf + /x2 xdf + /y1 xdf + /x1 xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + x1 x2 eq + { + y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope y2 y1 sub x2 x1 sub div def + /theta slope 1 atan def + x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if + x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if + } + ifelse + gsave + clippath + x1 y1 translate + theta rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax exch def + /xMax exch def + /yMin exch def + /xMin exch def + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + rampdict begin + 20 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + x1 y1 translate + theta rotate + /xStart 0 def + /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def + /ySpan yMax yMin sub def + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + xStart 0 transform + xEnd 0 transform + 3 -1 roll + sub dup mul + 3 1 roll + sub dup mul + add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + mul + /numpix xdf + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + ext0 + { + 0 getrampcolor + xMin xStart lt + { + xMin yMin xMin neg ySpan rectfill + }if + }if + /xInc xEnd xStart sub numsteps div def + /x xStart def + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + x yMin xInc ySpan rectfill + /x x xInc add def + rampIndxInc add + }repeat + pop + ext1{ + xMax xEnd gt + { + xEnd yMin xMax xEnd sub ySpan rectfill + }if + }if + grestore + grestore + end + end + end + }ifelse + }bdf +}def +/pt +{ + end +}def +/dt{ +}def +/pgsv{ + //Adobe_AGM_Core/AGMCORE_save save put +}def +/pgrs{ + //Adobe_AGM_Core/AGMCORE_save get restore +}def +systemdict/findcolorrendering known{ + /findcolorrendering systemdict/findcolorrendering get def +}if +systemdict/setcolorrendering known{ + /setcolorrendering systemdict/setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup//Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA get_csa_by_name setcolorspace_opt + set_crd + end +} +def +/map_csa +{ + currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse + {pop}{get_csa_by_name/MappedCSA xdf}ifelse +}def +/setsepcolor +{ + /sep_colorspace_dict AGMCORE_gget begin + dup/sep_tint exch AGMCORE_gput + TintProc + end +}def +/setdevicencolor +{ + /devicen_colorspace_dict AGMCORE_gget begin + Names length copy + Names length 1 sub -1 0 + { + /devicen_tints AGMCORE_gget 3 1 roll xpt + }for + TintProc + end +}def +/sep_colorspace_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2{AGMCORE_tmp mul NComponents 1 roll}repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + }repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +}def +/sep_colorspace_gray_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +}def +/sep_proc_name +{ + dup 0 get + dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ + pop[/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +}def +/setsepcolorspace +{ + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup/sep_colorspace_dict exch AGMCORE_gput + begin + CSA map_csa + /AGMCORE_sep_special Name dup()eq exch(All)eq or store + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx + ]setcolorspace_opt + /TintProc{ + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get/DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc[ + Components aload pop Name findcmykcustomcolor + /exch cvx/setcustomcolor cvx + ]cvx bdf + }{ + AGMCORE_host_sep Name(All)eq and{ + /TintProc{ + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and + AGMCORE_host_sep or + Name()eq and{ + /TintProc[ + MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{ + cvx/setcmykcolor cvx + }{ + cvx/setgray cvx + }ifelse + ]cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc[ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get/DeviceGray eq{ + 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx + }if + /Name cvx/findcmykcustomcolor cvx/exch cvx + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + /Name cvx + /AGMCORE_IsSeparationAProcessColor load/exec cvx + /not cvx/and cvx + }{ + Name inRip_spot_has_ink not + }ifelse + [ + /pop cvx 1 + ]cvx/if cvx + /setcustomcolor cvx + ]cvx bdf + }{ + /TintProc{setcolor}bdf + [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +}def +/additive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 + 0 1 numarrays 1 sub + { + 1 exch add/index cvx + c1/get cvx/mul cvx + }for + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/subtractive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 1 + 0 1 numarrays 1 sub + { + 1 3 3 -1 roll add/index cvx + c1/get cvx/sub cvx/mul cvx + }for + /sub cvx + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/exec_tint_transform +{ + /TintProc[ + /TintTransform cvx/setcolor cvx + ]cvx bdf + MappedCSA setcolorspace_opt +}bdf +/devn_makecustomcolor +{ + 2 dict begin + /names_index xdf + /Names xdf + 1 1 1 1 Names names_index get findcmykcustomcolor + /devicen_tints AGMCORE_gget names_index get setcustomcolor + Names length{pop}repeat + end +}bdf +/setdevicencolorspace +{ + dup/AliasedColorants known{false}{true}ifelse + current_spot_alias and{ + 7 dict begin + /names_index 0 def + dup/names_len exch/Names get length def + /new_names names_len array def + /new_LookupTables names_len array def + /alias_cnt 0 def + dup/Names get + { + dup map_alias{ + exch pop + dup/ColorLookup known{ + dup begin + new_LookupTables names_index ColorLookup put + end + }{ + dup/Components known{ + dup begin + new_LookupTables names_index Components put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + new_names names_index 3 -1 roll/Name get put + /alias_cnt alias_cnt 1 add def + }{ + /name xdf + new_names names_index name put + dup/LookupTables known{ + dup begin + new_LookupTables names_index LookupTables names_index get put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + /names_index names_index 1 add def + }forall + alias_cnt 0 gt{ + /AliasedColorants true def + /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def + 0 1 names_len 1 sub{ + /names_index xdf + new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{ + /AliasedColorants false def + exit + }{ + new_LookupTables names_index get 0 get null eq{ + dup/Names get names_index get/name xdf + name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq + or or or not{ + /AliasedColorants false def + exit + }if + }if + }ifelse + }for + lut_entry_len 1 eq{ + /AliasedColorants false def + }if + AliasedColorants{ + dup begin + /Names new_names def + /LookupTables new_LookupTables def + /AliasedColorants true def + /NComponents lut_entry_len def + /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def + /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def + currentdict/TTTablesIdx known not{ + /TTTablesIdx -1 def + }if + end + }if + }if + end + }if + dup/devicen_colorspace_dict exch AGMCORE_gput + begin + currentdict/AliasedColorants known{ + AliasedColorants + }{ + false + }ifelse + dup not{ + CSA map_csa + }if + /TintTransform load type/nulltype eq or{ + /TintTransform[ + 0 1 Names length 1 sub + { + /TTTablesIdx TTTablesIdx 1 add def + dup LookupTables exch get dup 0 get null eq + { + 1 index + Names exch get + dup(Cyan)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 0 0 + } + { + dup(Magenta)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0/exch cvx 0 0 + }{ + (Yellow)eq + { + exch + LookupTables length exch sub + /index cvx + 0 0 3 -1/roll cvx 0 + }{ + exch + LookupTables length exch sub + /index cvx + 0 0 0 4 -1/roll cvx + }ifelse + }ifelse + }ifelse + 5 -1/roll cvx/astore cvx + }{ + dup length 1 sub + LookupTables length 4 -1 roll sub 1 add + /index cvx/mul cvx/round cvx/cvi cvx/get cvx + }ifelse + Names length TTTablesIdx add 1 add 1/roll cvx + }for + Names length[/pop cvx]cvx/repeat cvx + NComponents Names length + TintMethod/Subtractive eq + { + subtractive_blend + }{ + additive_blend + }ifelse + ]cvx bdf + }if + AGMCORE_host_sep{ + Names convert_to_process{ + exec_tint_transform + } + { + currentdict/AliasedColorants known{ + AliasedColorants not + }{ + false + }ifelse + 5 dict begin + /AvoidAliasedColorants xdf + /painted? false def + /names_index 0 def + /names_len Names length def + AvoidAliasedColorants{ + /currentspotalias current_spot_alias def + false set_spot_alias + }if + Names{ + AGMCORE_is_cmyk_sep{ + dup(Cyan)eq AGMCORE_cyan_plate and exch + dup(Magenta)eq AGMCORE_magenta_plate and exch + dup(Yellow)eq AGMCORE_yellow_plate and exch + (Black)eq AGMCORE_black_plate and or or or{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + }if + painted?{exit}if + }{ + 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + exit + }if + }ifelse + /names_index names_index 1 add def + }forall + AvoidAliasedColorants{ + currentspotalias set_spot_alias + }if + painted?{ + /devicen_colorspace_dict AGMCORE_gget/names_index names_index put + }{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx + 0 0 0 0/setcmykcolor cvx + ]cvx ddf + }ifelse + end + }ifelse + } + { + AGMCORE_in_rip_sep{ + Names convert_to_process not + }{ + level3 + }ifelse + { + [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt + /TintProc level3 not AGMCORE_in_rip_sep and{ + [ + Names/length cvx[/pop cvx]cvx/repeat cvx + ]cvx bdf + }{ + {setcolor}bdf + }ifelse + }{ + exec_tint_transform + }ifelse + }ifelse + set_crd + /AliasedColorants false def + end +}def +/setindexedcolorspace +{ + dup/indexed_colorspace_dict exch AGMCORE_gput + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + currentdict devncs + }{ + 1 currentdict sepcs + }ifelse + AGMCORE_host_sep{ + 4 dict begin + /compCnt/Names where{pop Names length}{1}ifelse def + /NewLookup HiVal 1 add string def + 0 1 HiVal{ + /tableIndex xdf + Lookup dup type/stringtype eq{ + compCnt tableIndex map_index + }{ + exec + }ifelse + /Names where{ + pop setdevicencolor + }{ + setsepcolor + }ifelse + currentgray + tableIndex exch + 255 mul cvi + NewLookup 3 1 roll put + }for + [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt + end + }{ + level3 + { + currentdict/Names known{ + [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt + }{ + [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt + }ifelse + }{ + [/Indexed MappedCSA HiVal + [ + currentdict/Names known{ + Lookup dup type/stringtype eq + {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx} + {/exec cvx}ifelse + /TintTransform load/exec cvx + }{ + Lookup dup type/stringtype eq + {/exch cvx/get cvx 255/div cvx} + {/exec cvx}ifelse + CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx + }ifelse + ]cvx + ]setcolorspace_opt + }ifelse + }ifelse + end + set_crd + } + { + CSA map_csa + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ + pop[/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval{}forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + }bind + }{ + Lookup + }ifelse + }ifelse + ]setcolorspace_opt + set_crd + }ifelse + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep{ + /indexed_colorspace_dict AGMCORE_gget + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + map_indexed_devn + devn + } + { + Lookup 1 3 -1 roll map_index + sep + }ifelse + end + }{ + Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll + map_index + MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse + }ifelse + end + }{ + level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{ + /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin + map_indexed_devn + devn + end + } + { + setcolor + }ifelse + }ifelse +}def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup clonedict begin + 1 setgray + /Decode[0 1]def + /DataSourcedef + /MultipleDataSources false def + /BitsPerComponent 8 def + currentdict end + systemdict/image gx + grestore + }if + consumeimagedata +}def +/add_res +{ + dup/CSD eq{ + pop + //Adobe_AGM_Core begin + /AGMCORE_CSD_cache load 3 1 roll put + end + }{ + defineresource pop + }ifelse +}def +/del_res +{ + { + aload pop exch + dup/CSD eq{ + pop + {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall + }{ + exch + {1 index undefineresource}forall + pop + }ifelse + }forall +}def +/get_res +{ + dup/CSD eq{ + pop + dup type dup/nametype eq exch/stringtype eq or{ + AGMCORE_CSD_cache exch get + }if + }{ + findresource + }ifelse +}def +/get_csa_by_name +{ + dup type dup/nametype eq exch/stringtype eq or{ + /CSA get_res + }if +}def +/paintproc_buf_init +{ + /count get 0 0 put +}def +/paintproc_buf_next +{ + dup/count get dup 0 get + dup 3 1 roll + 1 add 0 xpt + get +}def +/cachepaintproc_compress +{ + 5 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + /string_size 16000 def + /readbuffer string_size string def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + /LZWFilter + { + exch + dup length 0 eq{ + pop + }{ + ppdict dup length 1 sub 3 -1 roll put + }ifelse + {string_size}{0}ifelse string + }/LZWEncode filter def + { + ReadFilter readbuffer readstring + exch LZWFilter exch writestring + not{exit}if + }loop + LZWFilter closefile + ppdict + end +}def +/cachepaintproc +{ + 2 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + { + ReadFilter 16000 string readstring exch + ppdict dup length 1 sub 3 -1 roll put + not{exit}if + }loop + ppdict dup dup length 1 sub()put + end +}def +/make_pattern +{ + exch clonedict exch + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + 1 index begin + BBox 0 get XStep div cvi XStep mul/xshift exch neg def + BBox 1 get YStep div cvi YStep mul/yshift exch neg def + BBox 0 get xshift add + BBox 1 get yshift add + BBox 2 get xshift add + BBox 3 get yshift add + 4 array astore + /BBox exch def + [xshift yshift/translate load null/exec load]dup + 3/PaintProc load put cvx/PaintProc exch def + end + gsave 0 setgray + makepattern + grestore +}def +/set_pattern +{ + dup/PatternType get 1 eq{ + dup/PaintType get 1 eq{ + currentoverprint sop[/DeviceGray]setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{pop}{setcolorspace}ifelse +}def +/updatecolorrendering +{ + currentcolorrendering/RenderingIntent known{ + currentcolorrendering/RenderingIntent get + } + { + Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/Saturation eq + { + /saturation_crd AGMCORE_gget dup null eq + } + { + /perceptual_crd AGMCORE_gget dup null eq + }ifelse + }ifelse + }ifelse + { + pop null + } + { + /RenderingIntent known{null}{Intent}ifelse + }ifelse + }ifelse + Intent ne{ + Intent/ColorRendering{findresource}stopped + { + pop pop systemdict/findcolorrendering known + { + Intent findcolorrendering + { + /ColorRendering findresource true exch + } + { + /ColorRendering findresource + product(Xerox Phaser 5400)ne + exch + }ifelse + dup Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd exch AGMCORE_gput + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd exch AGMCORE_gput + } + { + Intent/Saturation eq + { + /saturation_crd exch AGMCORE_gput + } + { + Intent/Perceptual eq + { + /perceptual_crd exch AGMCORE_gput + } + { + pop + }ifelse + }ifelse + }ifelse + }ifelse + 1 index{exch}{pop}ifelse + } + {false}ifelse + } + {true}ifelse + { + dup begin + currentdict/TransformPQR known{ + currentdict/TransformPQR get aload pop + 3{{}eq 3 1 roll}repeat or or + } + {true}ifelse + currentdict/MatrixPQR known{ + currentdict/MatrixPQR get aload pop + 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq + and and and and and and and and + } + {true}ifelse + end + or + { + clonedict begin + /TransformPQR[ + {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div + 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind + {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div + 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind + {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div + 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind + ]def + /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def + /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def + currentdict end + }if + setcolorrendering_opt + }if + }if +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/ColorRendering known{ + ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + currentcolorspace dup type/arraytype eq + {0 get}if + /DeviceRGB eq + { + currentdict/UCR known + {/UCR}{/AGMCORE_currentucr}ifelse + load setundercolorremoval + currentdict/BG known + {/BG}{/AGMCORE_currentbg}ifelse + load setblackgeneration + }if + }if +}def +/set_ucrbg +{ + dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration + dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + product(HP Color LaserJet 2605)anchorsearch{ + pop pop pop + }{ + pop + clonedict + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp)flushinput + }if +}def +/cpaint_gsep +{ + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep)flushinput + }if +}def +/cpaint_gend +{np}def +/T1_path +{ + currentfile token pop currentfile token pop mo + { + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 exch rlineto + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 rlineto + }loop +}def +/T1_gsave + level3 + {/clipsave} + {/gsave}ifelse + load def +/T1_grestore + level3 + {/cliprestore} + {/grestore}ifelse + load def +/set_spot_alias_ary +{ + dup inherit_aliases + //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf +}def +/set_spot_normalization_ary +{ + dup inherit_aliases + dup length + /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if + array + //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf + /AGMCORE_SpotAliasAry where{ + pop + AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval + AGMCORE_SpotAliasAry length + }{0}ifelse + AGMCORE_SpotAliasAry2 3 1 roll exch putinterval + true set_spot_alias +}def +/inherit_aliases +{ + {dup/Name get map_alias{/CSD put}{pop}ifelse}forall +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry2 where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry2{ + dup/Name get AGMCORE_name eq{ + /CSD get/CSD get_res + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + /AGMCORE_&setcustomcolor AGMCORE_key_known not{ + //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put + }if + /customcolor_tint 1 AGMCORE_gput + //Adobe_AGM_Core begin + /setcustomcolor + { + //Adobe_AGM_Core begin + dup/customcolor_tint exch AGMCORE_gput + 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not + current_spot_alias and{1 index 4 get map_alias}{false}ifelse + { + false set_spot_alias + /sep_colorspace_dict AGMCORE_gget null ne + 3 1 roll 2 index{ + exch pop/sep_tint AGMCORE_gget exch + }if + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + not{/sep_tint 1.0 AGMCORE_gput}if + pop + true set_spot_alias + }{ + AGMCORE_&setcustomcolor + }ifelse + end + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd/setpagedevice load def + /setpagedevice{get_gstate spd set_gstate}def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + //Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known AGMCORE_distilling not and{ + currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + <>setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + AGMCORE_distilling{ + erasepage + }{ + gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse + /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore + }ifelse + }if + end +}def +/lw_save_restore_override{ + /md where{ + pop + md begin + initializepage + /initializepage{}def + /pmSVsetup{}def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage/showpage load def} + ifelse + /showpage{orig_showpage gR}def + end + }if +}def +/pscript_showpage_override{ + /NTPSOct95 where + { + begin + showpage + save + /showpage/restore load def + /restore{exch pop}def + end + }if +}def +/driver_media_override +{ + /md where{ + pop + md/initializepage known{ + md/initializepage{}put + }if + md/rC known{ + md/rC{4{pop}repeat}put + }if + }if + /mysetup where{ + /mysetup[1 0 0 1 0 0]put + }if + Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put + level2 + {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if +}def +/capture_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put + }if + }if +}def +/restore_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup known{ + Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put + Adobe_AGM_Core/save_mysetup undef + }if + }if + }if +}def +/driver_check_media_override +{ + /PrepsDict where + {pop} + { + Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne + Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and + Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and + }if + { + Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix + }if + }ifelse +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def + /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def + /AGMCORE_invalid_color_space(This job contains an invalid color space. )def +end +/set_def_ht +{AGMCORE_def_ht sethalftone}def +/set_def_flat +{AGMCORE_Default_flatness setflat}def +end +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.31 0 +%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. +%%Version: 2.31 0 +10 dict begin +/Adobe_CoolType_Passthru currentdict def +/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def +Adobe_CoolType_Core_Defined + {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} +if +userdict/Adobe_CoolType_Core 70 dict dup begin put +/Adobe_CoolType_Version 2.31 def +/Level2? + systemdict/languagelevel known dup + {pop systemdict/languagelevel get 2 ge} + if def +Level2? not + { + /currentglobal false def + /setglobal/pop load def + /gcheck{pop false}bind def + /currentpacking false def + /setpacking/pop load def + /SharedFontDirectory 0 dict def + } +if +currentpacking +true setpacking +currentglobal false setglobal +userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} +if +get + begin + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + end +setglobal +currentglobal true setglobal +userdict/Adobe_CoolType_GVMFonts known not + {userdict/Adobe_CoolType_GVMFonts 10 dict put} +if +setglobal +currentglobal false setglobal +userdict/Adobe_CoolType_LVMFonts known not + {userdict/Adobe_CoolType_LVMFonts 10 dict put} +if +setglobal +/ct_VMDictPut + { + dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse + 3 1 roll put + }bind def +/ct_VMDictUndef + { + dup Adobe_CoolType_GVMFonts exch known + {Adobe_CoolType_GVMFonts exch undef} + { + dup Adobe_CoolType_LVMFonts exch known + {Adobe_CoolType_LVMFonts exch undef} + {pop} + ifelse + }ifelse + }bind def +/ct_str1 1 string def +/ct_xshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_yshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 exch + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_xyshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + {_ct_na _ct_i 1 add get}stopped + {pop pop pop} + { + _ct_x _ct_y moveto + rmoveto + } + ifelse + } + ifelse + /_ct_i _ct_i 2 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def +/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def +/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def +currentglobal true setglobal +/ct_T3Defs +{ +/BuildChar +{ + 1 index/Encoding get exch get + 1 index/BuildGlyph get exec +}bind def +/BuildGlyph +{ + exch begin + GlyphProcs exch get exec + end +}bind def +}bind def +setglobal +/@_SaveStackLevels + { + Adobe_CoolType_Data + begin + /@vmState currentglobal def false setglobal + @opStackCountByLevel + @opStackLevel + 2 copy known not + { + 2 copy + 3 dict dup/args + 7 index + 5 add array put + put get + } + { + get dup/args get dup length 3 index lt + { + dup length 5 add array exch + 1 index exch 0 exch putinterval + 1 index exch/args exch put + } + {pop} + ifelse + } + ifelse + begin + count 1 sub + 1 index lt + {pop count} + if + dup/argCount exch def + dup 0 gt + { + args exch 0 exch getinterval + astore pop + } + {pop} + ifelse + count + /restCount exch def + end + /@opStackLevel @opStackLevel 1 add def + countdictstack 1 sub + @dictStackCountByLevel exch @dictStackLevel exch put + /@dictStackLevel @dictStackLevel 1 add def + @vmState setglobal + end + }bind def +/@_RestoreStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + @opStackCountByLevel @opStackLevel get + begin + count restCount sub dup 0 gt + {{pop}repeat} + {pop} + ifelse + args 0 argCount getinterval{}forall + end + /@dictStackLevel @dictStackLevel 1 sub def + @dictStackCountByLevel @dictStackLevel get + end + countdictstack exch sub dup 0 gt + {{end}repeat} + {pop} + ifelse + }bind def +/@_PopStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + /@dictStackLevel @dictStackLevel 1 sub def + end + }bind def +/@Raise + { + exch cvx exch errordict exch get exec + stop + }bind def +/@ReRaise + { + cvx $error/errorname get errordict exch get exec + stop + }bind def +/@Stopped + { + 0 @#Stopped + }bind def +/@#Stopped + { + @_SaveStackLevels + stopped + {@_RestoreStackLevels true} + {@_PopStackLevels false} + ifelse + }bind def +/@Arg + { + Adobe_CoolType_Data + begin + @opStackCountByLevel @opStackLevel 1 sub get + begin + args exch + argCount 1 sub exch sub get + end + end + }bind def +currentglobal true setglobal +/CTHasResourceForAllBug + Level2? + { + 1 dict dup + /@shouldNotDisappearDictValue true def + Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put + begin + count @_SaveStackLevels + {(*){pop stop}128 string/Category resourceforall} + stopped pop + @_RestoreStackLevels + currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll + { + /@shouldNotDisappearDictValue known + { + { + end + currentdict 1 index eq + {pop exit} + if + } + loop + } + if + } + { + pop + end + } + ifelse + } + {false} + ifelse + def +true setglobal +/CTHasResourceStatusBug + Level2? + { + mark + {/steveamerige/Category resourcestatus} + stopped + {cleartomark true} + {cleartomark currentglobal not} + ifelse + } + {false} + ifelse + def +setglobal +/CTResourceStatus + { + mark 3 1 roll + /Category findresource + begin + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + end + }bind def +/CTWorkAroundBugs + { + Level2? + { + /cid_PreLoad/ProcSet resourcestatus + { + pop pop + currentglobal + mark + { + (*) + { + dup/CMap CTHasResourceStatusBug + {CTResourceStatus} + {resourcestatus} + ifelse + { + pop dup 0 eq exch 1 eq or + { + dup/CMap findresource gcheck setglobal + /CMap undefineresource + } + { + pop CTHasResourceForAllBug + {exit} + {stop} + ifelse + } + ifelse + } + {pop} + ifelse + } + 128 string/CMap resourceforall + } + stopped + {cleartomark} + stopped pop + setglobal + } + if + } + if + }bind def +/ds + { + Adobe_CoolType_Core + begin + CTWorkAroundBugs + /mo/moveto load def + /nf/newencodedfont load def + /msf{makefont setfont}bind def + /uf{dup undefinefont ct_VMDictUndef}bind def + /ur/undefineresource load def + /chp/charpath load def + /awsh/awidthshow load def + /wsh/widthshow load def + /ash/ashow load def + /@xshow/xshow load def + /@yshow/yshow load def + /@xyshow/xyshow load def + /@cshow/cshow load def + /sh/show load def + /rp/repeat load def + /.n/.notdef def + end + currentglobal false setglobal + userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} + if + get + begin + /AddWidths? false def + /CC 0 def + /charcode 2 string def + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + /InVMFontsByCMap 10 dict def + /InVMDeepCopiedFonts 10 dict def + end + setglobal + }bind def +/dt + { + currentdict Adobe_CoolType_Core eq + {end} + if + }bind def +/ps + { + Adobe_CoolType_Core begin + Adobe_CoolType_GVMFonts begin + Adobe_CoolType_LVMFonts begin + SharedFontDirectory begin + }bind def +/pt + { + end + end + end + end + }bind def +/unload + { + systemdict/languagelevel known + { + systemdict/languagelevel get 2 ge + { + userdict/Adobe_CoolType_Core 2 copy known + {undef} + {pop pop} + ifelse + } + if + } + if + }bind def +/ndf + { + 1 index where + {pop pop pop} + {dup xcheck{bind}if def} + ifelse + }def +/findfont systemdict + begin + userdict + begin + /globaldict where{/globaldict get begin}if + dup where pop exch get + /globaldict where{pop end}if + end + end +Adobe_CoolType_Core_Defined + {/systemfindfont exch def} + { + /findfont 1 index def + /systemfindfont exch def + } +ifelse +/undefinefont + {pop}ndf +/copyfont + { + currentglobal 3 1 roll + 1 index gcheck setglobal + dup null eq{0}{dup length}ifelse + 2 index length add 1 add dict + begin + exch + { + 1 index/FID eq + {pop pop} + {def} + ifelse + } + forall + dup null eq + {pop} + {{def}forall} + ifelse + currentdict + end + exch setglobal + }bind def +/copyarray + { + currentglobal exch + dup gcheck setglobal + dup length array copy + exch setglobal + }bind def +/newencodedfont + { + currentglobal + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + { + FontDirectory 3 index known + {FontDirectory 3 index get/FontReferenced known} + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + ifelse + } + ifelse + dup + { + 3 index findfont/FontReferenced get + 2 index dup type/nametype eq + {findfont} + if ne + {pop false} + if + } + if + dup + { + 1 index dup type/nametype eq + {findfont} + if + dup/CharStrings known + { + /CharStrings get length + 4 index findfont/CharStrings get length + ne + { + pop false + } + if + } + {pop} + ifelse + } + if + { + pop + 1 index findfont + /Encoding get exch + 0 1 255 + {2 copy get 3 index 3 1 roll put} + for + pop pop pop + } + { + currentglobal + 4 1 roll + dup type/nametype eq + {findfont} + if + dup gcheck setglobal + dup dup maxlength 2 add dict + begin + exch + { + 1 index/FID ne + 2 index/Encoding ne and + {def} + {pop pop} + ifelse + } + forall + /FontReferenced exch def + /Encoding exch dup length array copy def + /FontName 1 index dup type/stringtype eq{cvn}if def dup + currentdict + end + definefont ct_VMDictPut + setglobal + } + ifelse + }bind def +/SetSubstituteStrategy + { + $SubstituteFont + begin + dup type/dicttype ne + {0 dict} + if + currentdict/$Strategies known + { + exch $Strategies exch + 2 copy known + { + get + 2 copy maxlength exch maxlength add dict + begin + {def}forall + {def}forall + currentdict + dup/$Init known + {dup/$Init get exec} + if + end + /$Strategy exch def + } + {pop pop pop} + ifelse + } + {pop pop} + ifelse + end + }bind def +/scff + { + $SubstituteFont + begin + dup type/stringtype eq + {dup length exch} + {null} + ifelse + /$sname exch def + /$slen exch def + /$inVMIndex + $sname null eq + { + 1 index $str cvs + dup length $slen sub $slen getinterval cvn + } + {$sname} + ifelse def + end + {findfont} + @Stopped + { + dup length 8 add string exch + 1 index 0(BadFont:)putinterval + 1 index exch 8 exch dup length string cvs putinterval cvn + {findfont} + @Stopped + {pop/Courier findfont} + if + } + if + $SubstituteFont + begin + /$sname null def + /$slen 0 def + /$inVMIndex null def + end + }bind def +/isWidthsOnlyFont + { + dup/WidthsOnly known + {pop pop true} + { + dup/FDepVector known + {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} + { + dup/FDArray known + {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} + {pop} + ifelse + } + ifelse + } + ifelse + }bind def +/ct_StyleDicts 4 dict dup begin + /Adobe-Japan1 4 dict dup begin + Level2? + { + /Serif + /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMin-W3} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMin-W3/CIDFont resourcestatus + {pop pop/HeiseiMin-W3} + {/Ryumin-Light} + ifelse + } + {/Ryumin-Light} + ifelse + } + ifelse + def + /SansSerif + /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiKakuGo-W5} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiKakuGo-W5/CIDFont resourcestatus + {pop pop/HeiseiKakuGo-W5} + {/GothicBBB-Medium} + ifelse + } + {/GothicBBB-Medium} + ifelse + } + ifelse + def + /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMaruGo-W4/CIDFont resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + ifelse + /RoundSansSerif exch def + /Default Serif def + } + { + /Serif/Ryumin-Light def + /SansSerif/GothicBBB-Medium def + { + (fonts/Jun101-Light-83pv-RKSJ-H)status + }stopped + {pop}{ + {pop pop pop pop/Jun101-Light} + {SansSerif} + ifelse + /RoundSansSerif exch def + }ifelse + /Default Serif def + } + ifelse + end + def + /Adobe-Korea1 4 dict dup begin + /Serif/HYSMyeongJo-Medium def + /SansSerif/HYGoThic-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-GB1 4 dict dup begin + /Serif/STSong-Light def + /SansSerif/STHeiti-Regular def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-CNS1 4 dict dup begin + /Serif/MKai-Medium def + /SansSerif/MHei-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def +end +def +Level2?{currentglobal true setglobal}if +/ct_BoldRomanWidthProc + { + stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth + 0 0 + }bind def +/ct_Type0WidthProc + { + dup stringwidth 0 0 moveto + 2 index true charpath pathbbox + 0 -1 + 7 index 2 div .88 + setcachedevice2 + pop + 0 0 + }bind def +/ct_Type0WMode1WidthProc + { + dup stringwidth + pop 2 div neg -0.88 + 2 copy + moveto + 0 -1 + 5 -1 roll true charpath pathbbox + setcachedevice + }bind def +/cHexEncoding +[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 +/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 +/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 +/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B +/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E +/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 +/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 +/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 +/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA +/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD +/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 +/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 +/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 +/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def +/ct_BoldBaseFont + 11 dict begin + /FontType 3 def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /Encoding cHexEncoding def + /_setwidthProc/ct_BoldRomanWidthProc load def + /_bcstr1 1 string def + /BuildChar + { + exch begin + _basefont setfont + _bcstr1 dup 0 4 -1 roll put + dup + _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +systemdict/composefont known +{ +/ct_DefineIdentity-H +{ + /Identity-H/CMap resourcestatus + { + pop pop + } + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse +} +def +/ct_BoldBaseCIDFont + 11 dict begin + /CIDFontType 1 def + /CIDFontName/ct_BoldBaseCIDFont def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /_setwidthProc/ct_Type0WidthProc load def + /_bcstr2 2 string def + /BuildGlyph + { + exch begin + _basefont setfont + _bcstr2 1 2 index 256 mod put + _bcstr2 0 3 -1 roll 256 idiv put + _bcstr2 dup _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +}if +Level2?{setglobal}if +/ct_CopyFont{ + { + 1 index/FID ne 2 index/UniqueID ne and + {def}{pop pop}ifelse + }forall +}bind def +/ct_Type0CopyFont +{ + exch + dup length dict + begin + ct_CopyFont + [ + exch + FDepVector + { + dup/FontType get 0 eq + { + 1 index ct_Type0CopyFont + /_ctType0 exch definefont + } + { + /_ctBaseFont exch + 2 index exec + } + ifelse + exch + } + forall + pop + ] + /FDepVector exch def + currentdict + end +}bind def +/ct_MakeBoldFont +{ + dup/ct_SyntheticBold known + { + dup length 3 add dict begin + ct_CopyFont + /ct_StrokeWidth .03 0 FontMatrix idtransform pop def + /ct_SyntheticBold true def + currentdict + end + definefont + } + { + dup dup length 3 add dict + begin + ct_CopyFont + /PaintType 2 def + /StrokeWidth .03 0 FontMatrix idtransform pop def + /dummybold currentdict + end + definefont + dup/FontType get dup 9 ge exch 11 le and + { + ct_BoldBaseCIDFont + dup length 3 add dict copy begin + dup/CIDSystemInfo get/CIDSystemInfo exch def + ct_DefineIdentity-H + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefont exch def + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefonto exch def + currentdict + end + /CIDFont defineresource + } + { + ct_BoldBaseFont + dup length 3 add dict copy begin + /_basefont exch def + /_basefonto exch def + currentdict + end + definefont + } + ifelse + } + ifelse +}bind def +/ct_MakeBold{ + 1 index + 1 index + findfont + currentglobal 5 1 roll + dup gcheck setglobal + dup + /FontType get 0 eq + { + dup/WMode known{dup/WMode get 1 eq}{false}ifelse + version length 4 ge + and + {version 0 4 getinterval cvi 2015 ge} + {true} + ifelse + {/ct_Type0WidthProc} + {/ct_Type0WMode1WidthProc} + ifelse + ct_BoldBaseFont/_setwidthProc 3 -1 roll load put + {ct_MakeBoldFont}ct_Type0CopyFont definefont + } + { + dup/_fauxfont known not 1 index/SubstMaster known not and + { + ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put + ct_MakeBoldFont + } + { + 2 index 2 index eq + {exch pop } + { + dup length dict begin + ct_CopyFont + currentdict + end + definefont + } + ifelse + } + ifelse + } + ifelse + pop pop pop + setglobal +}bind def +/?str1 256 string def +/?set + { + $SubstituteFont + begin + /$substituteFound false def + /$fontname 1 index def + /$doSmartSub false def + end + dup + findfont + $SubstituteFont + begin + $substituteFound + {false} + { + dup/FontName known + { + dup/FontName get $fontname eq + 1 index/DistillerFauxFont known not and + /currentdistillerparams where + {pop false 2 index isWidthsOnlyFont not and} + if + } + {false} + ifelse + } + ifelse + exch pop + /$doSmartSub true def + end + { + 5 1 roll pop pop pop pop + findfont + } + { + 1 index + findfont + dup/FontType get 3 eq + { + 6 1 roll pop pop pop pop pop false + } + {pop true} + ifelse + { + $SubstituteFont + begin + pop pop + /$styleArray 1 index def + /$regOrdering 2 index def + pop pop + 0 1 $styleArray length 1 sub + { + $styleArray exch get + ct_StyleDicts $regOrdering + 2 copy known + { + get + exch 2 copy known not + {pop/Default} + if + get + dup type/nametype eq + { + ?str1 cvs length dup 1 add exch + ?str1 exch(-)putinterval + exch dup length exch ?str1 exch 3 index exch putinterval + add ?str1 exch 0 exch getinterval cvn + } + { + pop pop/Unknown + } + ifelse + } + { + pop pop pop pop/Unknown + } + ifelse + } + for + end + findfont + }if + } + ifelse + currentglobal false setglobal 3 1 roll + null copyfont definefont pop + setglobal + }bind def +setpacking +userdict/$SubstituteFont 25 dict put +1 dict + begin + /SubstituteFont + dup $error exch 2 copy known + {get} + {pop pop{pop/Courier}bind} + ifelse def + /currentdistillerparams where dup + { + pop pop + currentdistillerparams/CannotEmbedFontPolicy 2 copy known + {get/Error eq} + {pop pop false} + ifelse + } + if not + { + countdictstack array dictstack 0 get + begin + userdict + begin + $SubstituteFont + begin + /$str 128 string def + /$fontpat 128 string def + /$slen 0 def + /$sname null def + /$match false def + /$fontname null def + /$substituteFound false def + /$inVMIndex null def + /$doSmartSub true def + /$depth 0 def + /$fontname null def + /$italicangle 26.5 def + /$dstack null def + /$Strategies 10 dict dup + begin + /$Type3Underprint + { + currentglobal exch false setglobal + 11 dict + begin + /UseFont exch + $WMode 0 ne + { + dup length dict copy + dup/WMode $WMode put + /UseFont exch definefont + } + if def + /FontName $fontname dup type/stringtype eq{cvn}if def + /FontType 3 def + /FontMatrix[.001 0 0 .001 0 0]def + /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def + /FontBBox[0 0 0 0]def + /CCInfo 7 dict dup + begin + /cc null def + /x 0 def + /y 0 def + end def + /BuildChar + { + exch + begin + CCInfo + begin + 1 string dup 0 3 index put exch pop + /cc exch def + UseFont 1000 scalefont setfont + cc stringwidth/y exch def/x exch def + x y setcharwidth + $SubstituteFont/$Strategy get/$Underprint get exec + 0 0 moveto cc show + x y moveto + end + end + }bind def + currentdict + end + exch setglobal + }bind def + /$GetaTint + 2 dict dup + begin + /$BuildFont + { + dup/WMode known + {dup/WMode get} + {0} + ifelse + /$WMode exch def + $fontname exch + dup/FontName known + { + dup/FontName get + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + exch + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index/FontName get known + { + pop + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index get + null copyfont + } + {$deepcopyfont} + ifelse + exch 1 index exch/FontBasedOn exch put + dup/FontName $fontname dup type/stringtype eq{cvn}if put + definefont + Adobe_CoolType_Data/InVMDeepCopiedFonts get + begin + dup/FontBasedOn get 1 index def + end + }bind def + /$Underprint + { + gsave + x abs y abs gt + {/y 1000 def} + {/x -1000 def 500 120 translate} + ifelse + Level2? + { + [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] + setcolorspace + } + {0 setgray} + ifelse + 10 setlinewidth + x .8 mul + [7 3] + { + y mul 8 div 120 sub x 10 div exch moveto + 0 y 4 div neg rlineto + dup 0 rlineto + 0 y 4 div rlineto + closepath + gsave + Level2? + {.2 setcolor} + {.8 setgray} + ifelse + fill grestore + stroke + } + forall + pop + grestore + }bind def + end def + /$Oblique + 1 dict dup + begin + /$BuildFont + { + currentglobal exch dup gcheck setglobal + null copyfont + begin + /FontBasedOn + currentdict/FontName known + { + FontName + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + def + /FontName $fontname dup type/stringtype eq{cvn}if def + /currentdistillerparams where + {pop} + { + /FontInfo currentdict/FontInfo known + {FontInfo null copyfont} + {2 dict} + ifelse + dup + begin + /ItalicAngle $italicangle def + /FontMatrix FontMatrix + [1 0 ItalicAngle dup sin exch cos div 1 0 0] + matrix concatmatrix readonly + end + 4 2 roll def + def + } + ifelse + FontName currentdict + end + definefont + exch setglobal + }bind def + end def + /$None + 1 dict dup + begin + /$BuildFont{}bind def + end def + end def + /$Oblique SetSubstituteStrategy + /$findfontByEnum + { + dup type/stringtype eq{cvn}if + dup/$fontname exch def + $sname null eq + {$str cvs dup length $slen sub $slen getinterval} + {pop $sname} + ifelse + $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval + /$match false def + $SubstituteFont/$dstack countdictstack array dictstack put + mark + { + $fontpat 0 $slen 7 add getinterval + {/$match exch def exit} + $str filenameforall + } + stopped + { + cleardictstack + currentdict + true + $SubstituteFont/$dstack get + { + exch + { + 1 index eq + {pop false} + {true} + ifelse + } + {begin false} + ifelse + } + forall + pop + } + if + cleartomark + /$slen 0 def + $match false ne + {$match(fonts/)anchorsearch pop pop cvn} + {/Courier} + ifelse + }bind def + /$ROS 1 dict dup + begin + /Adobe 4 dict dup + begin + /Japan1 [/Ryumin-Light/HeiseiMin-W3 + /GothicBBB-Medium/HeiseiKakuGo-W5 + /HeiseiMaruGo-W4/Jun101-Light]def + /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def + /GB1 [/STSong-Light/STHeiti-Regular]def + /CNS1 [/MKai-Medium/MHei-Medium]def + end def + end def + /$cmapname null def + /$deepcopyfont + { + dup/FontType get 0 eq + { + 1 dict dup/FontName/copied put copyfont + begin + /FDepVector FDepVector copyarray + 0 1 2 index length 1 sub + { + 2 copy get $deepcopyfont + dup/FontName/copied put + /copied exch definefont + 3 copy put pop pop + } + for + def + currentdict + end + } + {$Strategies/$Type3Underprint get exec} + ifelse + }bind def + /$buildfontname + { + dup/CIDFont findresource/CIDSystemInfo get + begin + Registry length Ordering length Supplement 8 string cvs + 3 copy length 2 add add add string + dup 5 1 roll dup 0 Registry putinterval + dup 4 index(-)putinterval + dup 4 index 1 add Ordering putinterval + 4 2 roll add 1 add 2 copy(-)putinterval + end + 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch + anchorsearch + {pop pop 3 2 roll putinterval cvn/$cmapname exch def} + {pop pop pop pop pop} + ifelse + length + $str 1 index(-)putinterval 1 add + $str 1 index $cmapname $fontpat cvs putinterval + $cmapname length add + $str exch 0 exch getinterval cvn + }bind def + /$findfontByROS + { + /$fontname exch def + $ROS Registry 2 copy known + { + get Ordering 2 copy known + {get} + {pop pop[]} + ifelse + } + {pop pop[]} + ifelse + false exch + { + dup/CIDFont resourcestatus + { + pop pop + save + 1 index/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get} + {false} + ifelse + exch pop + exch restore + {pop} + {exch pop true exit} + ifelse + } + {pop} + ifelse + } + forall + {$str cvs $buildfontname} + { + false(*) + { + save exch + dup/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get not} + {true} + ifelse + exch/CIDSystemInfo get + dup/Registry get Registry eq + exch/Ordering get Ordering eq and and + {exch restore exch pop true exit} + {pop restore} + ifelse + } + $str/CIDFont resourceforall + {$buildfontname} + {$fontname $findfontByEnum} + ifelse + } + ifelse + }bind def + end + end + currentdict/$error known currentdict/languagelevel known and dup + {pop $error/SubstituteFont known} + if + dup + {$error} + {Adobe_CoolType_Core} + ifelse + begin + { + /SubstituteFont + /CMap/Category resourcestatus + { + pop pop + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + { + $sname null eq + {dup $str cvs dup length $slen sub $slen getinterval cvn} + {$sname} + ifelse + Adobe_CoolType_Data/InVMFontsByCMap get + 1 index 2 copy known + { + get + false exch + { + pop + currentglobal + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + { + FontDirectory 1 index known + {exch pop true exit} + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + ifelse + } + ifelse + } + forall + } + {pop pop false} + ifelse + { + exch pop exch pop + } + { + dup/CMap resourcestatus + { + pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + } + { + 128 string cvs + dup(-)search + { + 3 1 roll search + { + 3 1 roll pop + {dup cvi} + stopped + {pop pop pop pop pop $findfontByEnum} + { + 4 2 roll pop pop + exch length + exch + 2 index length + 2 index + sub + exch 1 sub -1 0 + { + $str cvs dup length + 4 index + 0 + 4 index + 4 3 roll add + getinterval + exch 1 index exch 3 index exch + putinterval + dup/CMap resourcestatus + { + pop pop + 4 1 roll pop pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + true exit + } + {pop} + ifelse + } + for + dup type/booleantype eq + {pop} + {pop pop pop $findfontByEnum} + ifelse + } + ifelse + } + {pop pop pop $findfontByEnum} + ifelse + } + {pop pop $findfontByEnum} + ifelse + } + ifelse + } + ifelse + } + {//SubstituteFont exec} + ifelse + /$slen 0 def + end + } + } + { + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + {$findfontByEnum} + {//SubstituteFont exec} + ifelse + end + } + } + ifelse + bind readonly def + Adobe_CoolType_Core/scfindfont/systemfindfont load put + } + { + /scfindfont + { + $SubstituteFont + begin + dup systemfindfont + dup/FontName known + {dup/FontName get dup 3 index ne} + {/noname true} + ifelse + dup + { + /$origfontnamefound 2 index def + /$origfontname 4 index def/$substituteFound true def + } + if + exch pop + { + $slen 0 gt + $sname null ne + 3 index length $slen gt or and + { + pop dup $findfontByEnum findfont + dup maxlength 1 add dict + begin + {1 index/FID eq{pop pop}{def}ifelse} + forall + currentdict + end + definefont + dup/FontName known{dup/FontName get}{null}ifelse + $origfontnamefound ne + { + $origfontname $str cvs print + ( substitution revised, using )print + dup/FontName known + {dup/FontName get}{(unspecified font)} + ifelse + $str cvs print(.\n)print + } + if + } + {exch pop} + ifelse + } + {exch pop} + ifelse + end + }bind def + } + ifelse + end + end + Adobe_CoolType_Core_Defined not + { + Adobe_CoolType_Core/findfont + { + $SubstituteFont + begin + $depth 0 eq + { + /$fontname 1 index dup type/stringtype ne{$str cvs}if def + /$substituteFound false def + } + if + /$depth $depth 1 add def + end + scfindfont + $SubstituteFont + begin + /$depth $depth 1 sub def + $substituteFound $depth 0 eq and + { + $inVMIndex null ne + {dup $inVMIndex $AddInVMFont} + if + $doSmartSub + { + currentdict/$Strategy known + {$Strategy/$BuildFont get exec} + if + } + if + } + if + end + }bind put + } + if + } + if + end +/$AddInVMFont + { + exch/FontName 2 copy known + { + get + 1 dict dup begin exch 1 index gcheck def end exch + Adobe_CoolType_Data/InVMFontsByCMap get exch + $DictAdd + } + {pop pop pop} + ifelse + }bind def +/$DictAdd + { + 2 copy known not + {2 copy 4 index length dict put} + if + Level2? not + { + 2 copy get dup maxlength exch length 4 index length add lt + 2 copy get dup length 4 index length add exch maxlength 1 index lt + { + 2 mul dict + begin + 2 copy get{forall}def + 2 copy currentdict put + end + } + {pop} + ifelse + } + if + get + begin + {def} + forall + end + }bind def +end +end +%%EndResource +currentglobal true setglobal +%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. +%%Version: 1.23 0 +systemdict/languagelevel known dup + {currentglobal false setglobal} + {false} +ifelse +exch +userdict/Adobe_CoolType_Utility 2 copy known + {2 copy get dup maxlength 27 add dict copy} + {27 dict} +ifelse put +Adobe_CoolType_Utility + begin + /@eexecStartData + def + /@recognizeCIDFont null def + /ct_Level2? exch def + /ct_Clone? 1183615869 internaldict dup + /CCRun known not + exch/eCCRun known not + ct_Level2? and or def +ct_Level2? + {globaldict begin currentglobal true setglobal} +if + /ct_AddStdCIDMap + ct_Level2? + {{ + mark + Adobe_CoolType_Utility/@recognizeCIDFont currentdict put + { + ((Hex)57 StartData + 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 + 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 + d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 + cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec + } + stopped + { + cleartomark + Adobe_CoolType_Utility/@recognizeCIDFont get + countdictstack dup array dictstack + exch 1 sub -1 0 + { + 2 copy get 3 index eq + {1 index length exch sub 1 sub{end}repeat exit} + {pop} + ifelse + } + for + pop pop + Adobe_CoolType_Utility/@eexecStartData get eexec + } + {cleartomark} + ifelse + }} + {{ + Adobe_CoolType_Utility/@eexecStartData get eexec + }} + ifelse bind def +userdict/cid_extensions known +dup{cid_extensions/cid_UpdateDB known and}if + { + cid_extensions + begin + /cid_GetCIDSystemInfo + { + 1 index type/stringtype eq + {exch cvn exch} + if + cid_extensions + begin + dup load 2 index known + { + 2 copy + cid_GetStatusInfo + dup null ne + { + 1 index load + 3 index get + dup null eq + {pop pop cid_UpdateDB} + { + exch + 1 index/Created get eq + {exch pop exch pop} + {pop cid_UpdateDB} + ifelse + } + ifelse + } + {pop cid_UpdateDB} + ifelse + } + {cid_UpdateDB} + ifelse + end + }bind def + end + } +if +ct_Level2? + {end setglobal} +if + /ct_UseNativeCapability? systemdict/composefont known def + /ct_MakeOCF 35 dict def + /ct_Vars 25 dict def + /ct_GlyphDirProcs 6 dict def + /ct_BuildCharDict 15 dict dup + begin + /charcode 2 string def + /dst_string 1500 string def + /nullstring()def + /usewidths? true def + end def + ct_Level2?{setglobal}{pop}ifelse + ct_GlyphDirProcs + begin + /GetGlyphDirectory + { + systemdict/languagelevel known + {pop/CIDFont findresource/GlyphDirectory get} + { + 1 index/CIDFont findresource/GlyphDirectory + get dup type/dicttype eq + { + dup dup maxlength exch length sub 2 index lt + { + dup length 2 index add dict copy 2 index + /CIDFont findresource/GlyphDirectory 2 index put + } + if + } + if + exch pop exch pop + } + ifelse + + + }def + /+ + { + systemdict/languagelevel known + { + currentglobal false setglobal + 3 dict begin + /vm exch def + } + {1 dict begin} + ifelse + /$ exch def + systemdict/languagelevel known + { + vm setglobal + /gvm currentglobal def + $ gcheck setglobal + } + if + ?{$ begin}if + }def + /?{$ type/dicttype eq}def + /|{ + userdict/Adobe_CoolType_Data known + { + Adobe_CoolType_Data/AddWidths? known + { + currentdict Adobe_CoolType_Data + begin + begin + AddWidths? + { + Adobe_CoolType_Data/CC 3 index put + ?{def}{$ 3 1 roll put}ifelse + CC charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore + currentfont/Widths get exch CC exch put + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + end + end + } + {?{def}{$ 3 1 roll put}ifelse} ifelse + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + }def + /! + { + ?{end}if + systemdict/languagelevel known + {gvm setglobal} + if + end + }def + /:{string currentfile exch readstring pop}executeonly def + end + ct_MakeOCF + begin + /ct_cHexEncoding + [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 + /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 + /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 + /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B + /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E + /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 + /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 + /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 + /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA + /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD + /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 + /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 + /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 + /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def + /ct_CID_STR_SIZE 8000 def + /ct_mkocfStr100 100 string def + /ct_defaultFontMtx[.001 0 0 .001 0 0]def + /ct_1000Mtx[1000 0 0 1000 0 0]def + /ct_raise{exch cvx exch errordict exch get exec stop}bind def + /ct_reraise + {cvx $error/errorname get(Error: )print dup( )cvs print + errordict exch get exec stop + }bind def + /ct_cvnsi + { + 1 index add 1 sub 1 exch 0 4 1 roll + { + 2 index exch get + exch 8 bitshift + add + } + for + exch pop + }bind def + /ct_GetInterval + { + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /dst_index 0 def + dup dst_string length gt + {dup string/dst_string exch def} + if + 1 index ct_CID_STR_SIZE idiv + /arrayIndex exch def + 2 index arrayIndex get + 2 index + arrayIndex ct_CID_STR_SIZE mul + sub + { + dup 3 index add 2 index length le + { + 2 index getinterval + dst_string dst_index 2 index putinterval + length dst_index add/dst_index exch def + exit + } + { + 1 index length 1 index sub + dup 4 1 roll + getinterval + dst_string dst_index 2 index putinterval + pop dup dst_index add/dst_index exch def + sub + /arrayIndex arrayIndex 1 add def + 2 index dup length arrayIndex gt + {arrayIndex get} + { + pop + exit + } + ifelse + 0 + } + ifelse + } + loop + pop pop pop + dst_string 0 dst_index getinterval + end + }bind def + ct_Level2? + { + /ct_resourcestatus + currentglobal mark true setglobal + {/unknowninstancename/Category resourcestatus} + stopped + {cleartomark setglobal true} + {cleartomark currentglobal not exch setglobal} + ifelse + { + { + mark 3 1 roll/Category findresource + begin + ct_Vars/vm currentglobal put + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + ct_Vars/vm get setglobal + end + } + } + {{resourcestatus}} + ifelse bind def + /CIDFont/Category ct_resourcestatus + {pop pop} + { + currentglobal true setglobal + /Generic/Category findresource + dup length dict copy + dup/InstanceType/dicttype put + /CIDFont exch/Category defineresource pop + setglobal + } + ifelse + ct_UseNativeCapability? + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + if + } + { + /ct_Category 2 dict begin + /CIDFont 10 dict def + /ProcSet 2 dict def + currentdict + end + def + /defineresource + { + ct_Category 1 index 2 copy known + { + get + dup dup maxlength exch length eq + { + dup length 10 add dict copy + ct_Category 2 index 2 index put + } + if + 3 index 3 index put + pop exch pop + } + {pop pop/defineresource/undefined ct_raise} + ifelse + }bind def + /findresource + { + ct_Category 1 index 2 copy known + { + get + 2 index 2 copy known + {get 3 1 roll pop pop} + {pop pop/findresource/undefinedresource ct_raise} + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /resourcestatus + { + ct_Category 1 index 2 copy known + { + get + 2 index known + exch pop exch pop + { + 0 -1 true + } + { + false + } + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /ct_resourcestatus/resourcestatus load def + } + ifelse + /ct_CIDInit 2 dict + begin + /ct_cidfont_stream_init + { + { + dup(Binary)eq + { + pop + null + currentfile + ct_Level2? + { + {cid_BYTE_COUNT()/SubFileDecode filter} + stopped + {pop pop pop} + if + } + if + /readstring load + exit + } + if + dup(Hex)eq + { + pop + currentfile + ct_Level2? + { + {null exch/ASCIIHexDecode filter/readstring} + stopped + {pop exch pop(>)exch/readhexstring} + if + } + {(>)exch/readhexstring} + ifelse + load + exit + } + if + /StartData/typecheck ct_raise + } + loop + cid_BYTE_COUNT ct_CID_STR_SIZE le + { + 2 copy cid_BYTE_COUNT string exch exec + pop + 1 array dup + 3 -1 roll + 0 exch put + } + { + cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi + dup array exch 2 sub 0 exch 1 exch + { + 2 copy + 5 index + ct_CID_STR_SIZE + string + 6 index exec + pop + put + pop + } + for + 2 index + cid_BYTE_COUNT ct_CID_STR_SIZE mod string + 3 index exec + pop + 1 index exch + 1 index length 1 sub + exch put + } + ifelse + cid_CIDFONT exch/GlyphData exch put + 2 index null eq + { + pop pop pop + } + { + pop/readstring load + 1 string exch + { + 3 copy exec + pop + dup length 0 eq + { + pop pop pop pop pop + true exit + } + if + 4 index + eq + { + pop pop pop pop + false exit + } + if + } + loop + pop + } + ifelse + }bind def + /StartData + { + mark + { + currentdict + dup/FDArray get 0 get/FontMatrix get + 0 get 0.001 eq + { + dup/CDevProc known not + { + /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known + {get} + { + pop pop + {pop pop pop pop pop 0 -1000 7 index 2 div 880} + } + ifelse + def + } + if + } + { + /CDevProc + { + pop pop pop pop pop + 0 + 1 cid_temp/cid_CIDFONT get + /FDArray get 0 get + /FontMatrix get 0 get div + 7 index 2 div + 1 index 0.88 mul + }def + } + ifelse + /cid_temp 15 dict def + cid_temp + begin + /cid_CIDFONT exch def + 3 copy pop + dup/cid_BYTE_COUNT exch def 0 gt + { + ct_cidfont_stream_init + FDArray + { + /Private get + dup/SubrMapOffset known + { + begin + /Subrs SubrCount array def + Subrs + SubrMapOffset + SubrCount + SDBytes + ct_Level2? + { + currentdict dup/SubrMapOffset undef + dup/SubrCount undef + /SDBytes undef + } + if + end + /cid_SD_BYTES exch def + /cid_SUBR_COUNT exch def + /cid_SUBR_MAP_OFFSET exch def + /cid_SUBRS exch def + cid_SUBR_COUNT 0 gt + { + GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + 0 1 cid_SUBR_COUNT 1 sub + { + exch 1 index + 1 add + cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add + GlyphData exch cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + cid_SUBRS 4 2 roll + GlyphData exch + 4 index + 1 index + sub + ct_GetInterval + dup length string copy put + } + for + pop + } + if + } + {pop} + ifelse + } + forall + } + if + cleartomark pop pop + end + CIDFontName currentdict/CIDFont defineresource pop + end end + } + stopped + {cleartomark/StartData ct_reraise} + if + }bind def + currentdict + end def + /ct_saveCIDInit + { + /CIDInit/ProcSet ct_resourcestatus + {true} + {/CIDInitC/ProcSet ct_resourcestatus} + ifelse + { + pop pop + /CIDInit/ProcSet findresource + ct_UseNativeCapability? + {pop null} + {/CIDInit ct_CIDInit/ProcSet defineresource pop} + ifelse + } + {/CIDInit ct_CIDInit/ProcSet defineresource pop null} + ifelse + ct_Vars exch/ct_oldCIDInit exch put + }bind def + /ct_restoreCIDInit + { + ct_Vars/ct_oldCIDInit get dup null ne + {/CIDInit exch/ProcSet defineresource pop} + {pop} + ifelse + }bind def + /ct_BuildCharSetUp + { + 1 index + begin + CIDFont + begin + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /ct_dfCharCode exch def + /ct_dfDict exch def + CIDFirstByte ct_dfCharCode add + dup CIDCount ge + {pop 0} + if + /cid exch def + { + GlyphDirectory cid 2 copy known + {get} + {pop pop nullstring} + ifelse + dup length FDBytes sub 0 gt + { + dup + FDBytes 0 ne + {0 FDBytes ct_cvnsi} + {pop 0} + ifelse + /fdIndex exch def + dup length FDBytes sub FDBytes exch getinterval + /charstring exch def + exit + } + { + pop + cid 0 eq + {/charstring nullstring def exit} + if + /cid 0 def + } + ifelse + } + loop + }def + /ct_SetCacheDevice + { + 0 0 moveto + dup stringwidth + 3 -1 roll + true charpath + pathbbox + 0 -1000 + 7 index 2 div 880 + setcachedevice2 + 0 0 moveto + }def + /ct_CloneSetCacheProc + { + 1 eq + { + stringwidth + pop -2 div -880 + 0 -1000 setcharwidth + moveto + } + { + usewidths? + { + currentfont/Widths get cid + 2 copy known + {get exch pop aload pop} + {pop pop stringwidth} + ifelse + } + {stringwidth} + ifelse + setcharwidth + 0 0 moveto + } + ifelse + }def + /ct_Type3ShowCharString + { + ct_FDDict fdIndex 2 copy known + {get} + { + currentglobal 3 1 roll + 1 index gcheck setglobal + ct_Type1FontTemplate dup maxlength dict copy + begin + FDArray fdIndex get + dup/FontMatrix 2 copy known + {get} + {pop pop ct_defaultFontMtx} + ifelse + /FontMatrix exch dup length array copy def + /Private get + /Private exch def + /Widths rootfont/Widths get def + /CharStrings 1 dict dup/.notdef + dup length string copy put def + currentdict + end + /ct_Type1Font exch definefont + dup 5 1 roll put + setglobal + } + ifelse + dup/CharStrings get 1 index/Encoding get + ct_dfCharCode get charstring put + rootfont/WMode 2 copy known + {get} + {pop pop 0} + ifelse + exch + 1000 scalefont setfont + ct_str1 0 ct_dfCharCode put + ct_str1 exch ct_dfSetCacheProc + ct_SyntheticBold + { + currentpoint + ct_str1 show + newpath + moveto + ct_str1 true charpath + ct_StrokeWidth setlinewidth + stroke + } + {ct_str1 show} + ifelse + }def + /ct_Type4ShowCharString + { + ct_dfDict ct_dfCharCode charstring + FDArray fdIndex get + dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not + {ct_1000Mtx matrix concatmatrix concat} + {pop} + ifelse + /Private get + Adobe_CoolType_Utility/ct_Level2? get not + { + ct_dfDict/Private + 3 -1 roll + {put} + 1183615869 internaldict/superexec get exec + } + if + 1183615869 internaldict + Adobe_CoolType_Utility/ct_Level2? get + {1 index} + {3 index/Private get mark 6 1 roll} + ifelse + dup/RunInt known + {/RunInt get} + {pop/CCRun} + ifelse + get exec + Adobe_CoolType_Utility/ct_Level2? get not + {cleartomark} + if + }bind def + /ct_BuildCharIncremental + { + { + Adobe_CoolType_Utility/ct_MakeOCF get begin + ct_BuildCharSetUp + ct_ShowCharString + } + stopped + {stop} + if + end + end + end + end + }bind def + /BaseFontNameStr(BF00)def + /ct_Type1FontTemplate 14 dict + begin + /FontType 1 def + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /PaintType 0 def + currentdict + end def + /BaseFontTemplate 11 dict + begin + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /BuildChar/ct_BuildCharIncremental load def + ct_Clone? + { + /FontType 3 def + /ct_ShowCharString/ct_Type3ShowCharString load def + /ct_dfSetCacheProc/ct_CloneSetCacheProc load def + /ct_SyntheticBold false def + /ct_StrokeWidth 1 def + } + { + /FontType 4 def + /Private 1 dict dup/lenIV 4 put def + /CharStrings 1 dict dup/.notdefput def + /PaintType 0 def + /ct_ShowCharString/ct_Type4ShowCharString load def + } + ifelse + /ct_str1 1 string def + currentdict + end def + /BaseFontDictSize BaseFontTemplate length 5 add def + /ct_matrixeq + { + true 0 1 5 + { + dup 4 index exch get exch 3 index exch get eq and + dup not + {exit} + if + } + for + exch pop exch pop + }bind def + /ct_makeocf + { + 15 dict + begin + exch/WMode exch def + exch/FontName exch def + /FontType 0 def + /FMapType 2 def + dup/FontMatrix known + {dup/FontMatrix get/FontMatrix exch def} + {/FontMatrix matrix def} + ifelse + /bfCount 1 index/CIDCount get 256 idiv 1 add + dup 256 gt{pop 256}if def + /Encoding + 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for + bfCount 1 255{2 copy bfCount put pop}for + def + /FDepVector bfCount dup 256 lt{1 add}if array def + BaseFontTemplate BaseFontDictSize dict copy + begin + /CIDFont exch def + CIDFont/FontBBox known + {CIDFont/FontBBox get/FontBBox exch def} + if + CIDFont/CDevProc known + {CIDFont/CDevProc get/CDevProc exch def} + if + currentdict + end + BaseFontNameStr 3(0)putinterval + 0 1 bfCount dup 256 eq{1 sub}if + { + FDepVector exch + 2 index BaseFontDictSize dict copy + begin + dup/CIDFirstByte exch 256 mul def + FontType 3 eq + {/ct_FDDict 2 dict def} + if + currentdict + end + 1 index 16 + BaseFontNameStr 2 2 getinterval cvrs pop + BaseFontNameStr exch definefont + put + } + for + ct_Clone? + {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} + if + FontName + currentdict + end + definefont + ct_Clone? + { + gsave + dup 1000 scalefont setfont + ct_BuildCharDict + begin + /usewidths? false def + currentfont/Widths get + begin + exch/CIDFont get/GlyphDirectory get + { + pop + dup charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore def + } + forall + end + /usewidths? true def + end + grestore + } + {exch pop} + ifelse + }bind def + currentglobal true setglobal + /ct_ComposeFont + { + ct_UseNativeCapability? + { + 2 index/CMap ct_resourcestatus + {pop pop exch pop} + { + /CIDInit/ProcSet findresource + begin + 12 dict + begin + begincmap + /CMapName 3 index def + /CMapVersion 1.000 def + /CMapType 1 def + exch/WMode exch def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + { + dup length string copy + exch pop exch pop + } + {pop(Identity)} + ifelse + } + {pop (Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + 3 2 roll pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + setglobal + /ct_MakeIdentity + { + ct_UseNativeCapability? + { + 1 index/CMap ct_resourcestatus + {pop pop} + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CMapName 2 index def + /CMapVersion 1.000 def + /CMapType 1 def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + {dup length string copy exch pop exch pop} + {pop(Identity)} + ifelse + } + {pop(Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + exch pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + currentdict readonly pop + end + end +%%EndResource +setglobal +%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 +%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. +%%Version: 1.0 0 +userdict/ct_T42Dict 15 dict put +ct_T42Dict begin +/Is2015? +{ + version + cvi + 2015 + ge +}bind def +/AllocGlyphStorage +{ + Is2015? + { + pop + } + { + {string}forall + }ifelse +}bind def +/Type42DictBegin +{ +25 dict begin + /FontName exch def + /CharStrings 256 dict +begin + /.notdef 0 def + currentdict +end def + /Encoding exch def + /PaintType 0 def + /FontType 42 def + /FontMatrix[1 0 0 1 0 0]def + 4 array astore cvx/FontBBox exch def + /sfnts +}bind def +/Type42DictEnd +{ + currentdict dup/FontName get exch definefont end +ct_T42Dict exch +dup/FontName get exch put +}bind def +/RD{string currentfile exch readstring pop}executeonly def +/PrepFor2015 +{ +Is2015? +{ + /GlyphDirectory + 16 + dict def + sfnts 0 get + dup + 2 index + (glyx) + putinterval + 2 index + (locx) + putinterval + pop + pop +} +{ + pop + pop +}ifelse +}bind def +/AddT42Char +{ +Is2015? +{ + /GlyphDirectory get + begin + def + end + pop + pop +} +{ + /sfnts get + 4 index + get + 3 index + 2 index + putinterval + pop + pop + pop + pop +}ifelse +}bind def +/T0AddT42Mtx2 +{ +/CIDFont findresource/Metrics2 get begin def end +}bind def +end +%%EndResource +currentglobal true setglobal +%%BeginFile: MMFauxFont.prc +%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. +%%All Rights Reserved. +userdict /ct_EuroDict 10 dict put +ct_EuroDict begin +/ct_CopyFont +{ + { 1 index /FID ne {def} {pop pop} ifelse} forall +} def +/ct_GetGlyphOutline +{ + gsave + initmatrix newpath + exch findfont dup + length 1 add dict + begin + ct_CopyFont + /Encoding Encoding dup length array copy + dup + 4 -1 roll + 0 exch put + def + currentdict + end + /ct_EuroFont exch definefont + 1000 scalefont setfont + 0 0 moveto + [ + <00> stringwidth + <00> false charpath + pathbbox + [ + {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall + grestore + counttomark 8 add +} +def +/ct_MakeGlyphProc +{ + ] cvx + /ct_PSBuildGlyph cvx + ] cvx +} def +/ct_PSBuildGlyph +{ + gsave + 8 -1 roll pop + 7 1 roll + 6 -2 roll ct_FontMatrix transform 6 2 roll + 4 -2 roll ct_FontMatrix transform 4 2 roll + ct_FontMatrix transform + currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse + dup 9 1 roll + { + currentdict /StrokeWidth 2 copy known + { + get 2 div + 0 ct_FontMatrix dtransform pop + 5 1 roll + 4 -1 roll 4 index sub + 4 1 roll + 3 -1 roll 4 index sub + 3 1 roll + exch 4 index add exch + 4 index add + 5 -1 roll pop + } + { + pop pop + } + ifelse + } + if + setcachedevice + ct_FontMatrix concat + ct_PSPathOps begin + exec + end + { + currentdict /StrokeWidth 2 copy known + { get } + { pop pop 0 } + ifelse + setlinewidth stroke + } + { + fill + } + ifelse + grestore +} def +/ct_PSPathOps 4 dict dup begin + /m {moveto} def + /l {lineto} def + /c {curveto} def + /cp {closepath} def +end +def +/ct_matrix1000 [1000 0 0 1000 0 0] def +/ct_AddGlyphProc +{ + 2 index findfont dup length 4 add dict + begin + ct_CopyFont + /CharStrings CharStrings dup length 1 add dict copy + begin + 3 1 roll def + currentdict + end + def + /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def + /ct_PSBuildGlyph /ct_PSBuildGlyph load def + /ct_PSPathOps /ct_PSPathOps load def + currentdict + end + definefont pop +} +def +systemdict /languagelevel known +{ + /ct_AddGlyphToPrinterFont { + 2 copy + ct_GetGlyphOutline 3 add -1 roll restore + ct_MakeGlyphProc + ct_AddGlyphProc + } def +} +{ + /ct_AddGlyphToPrinterFont { + pop pop restore + Adobe_CTFauxDict /$$$FONTNAME get + /Euro + Adobe_CTFauxDict /$$$SUBSTITUTEBASE get + ct_EuroDict exch get + ct_AddGlyphProc + } def +} ifelse +/AdobeSansMM +{ +556 0 24 -19 541 703 + { + 541 628 m + 510 669 442 703 354 703 c + 201 703 117 607 101 444 c + 50 444 l + 25 372 l + 97 372 l + 97 301 l + 49 301 l + 24 229 l + 103 229 l + 124 67 209 -19 350 -19 c + 435 -19 501 25 509 32 c + 509 131 l + 492 105 417 60 343 60 c + 267 60 204 127 197 229 c + 406 229 l + 430 301 l + 191 301 l + 191 372 l + 455 372 l + 479 444 l + 194 444 l + 201 531 245 624 348 624 c + 433 624 484 583 509 534 c + cp + 556 0 m + } +ct_PSBuildGlyph +} def +/AdobeSerifMM +{ +500 0 10 -12 484 692 + { + 347 298 m + 171 298 l + 170 310 170 322 170 335 c + 170 362 l + 362 362 l + 374 403 l + 172 403 l + 184 580 244 642 308 642 c + 380 642 434 574 457 457 c + 481 462 l + 474 691 l + 449 691 l + 433 670 429 657 410 657 c + 394 657 360 692 299 692 c + 204 692 94 604 73 403 c + 22 403 l + 10 362 l + 70 362 l + 69 352 69 341 69 330 c + 69 319 69 308 70 298 c + 22 298 l + 10 257 l + 73 257 l + 97 57 216 -12 295 -12 c + 364 -12 427 25 484 123 c + 458 142 l + 425 101 384 37 316 37 c + 256 37 189 84 173 257 c + 335 257 l + cp + 500 0 m + } +ct_PSBuildGlyph +} def +end +%%EndFile +setglobal +Adobe_CoolType_Core begin /$None SetSubstituteStrategy end +%%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Image 71 dict dup begin put +/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +/AGMIMG_&imagemask nd +/AGMIMG_mbuf()def +/AGMIMG_ybuf()def +/AGMIMG_kbuf()def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/AGMIMG_maskSource nd +/AGMIMG_flushfilters nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/devnimg nd +/idximg nd +/ds +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage/colorimage ldf + }if + end + end +}def +/ps +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists{/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode[Decode 1 get Decode 0 get]def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode[1 1]def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub}currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + {pop 1}currenttransfer addprocs settransfer + }def + }ifelse + /img/imageormask ldf + /sepimg/sep_imageormask ldf + /devnimg/devn_imageormask ldf + /idximg/indexed_imageormask ldf + /_ctype 7 def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall +}def +/pt +{ + end +}def +/dt +{ +}def +/AGMIMG_flushfilters +{ + dup type/arraytype ne + {1 array astore}if + dup 0 get currentfile ne + {dup 0 get flushfile}if + { + dup type/filetype eq + { + dup status 1 index currentfile ne and + {closefile} + {pop} + ifelse + }{pop}ifelse + }forall +}def +/AGMIMG_init_common +{ + currentdict/T known{/ImageType/T ldf currentdict/T undef}if + currentdict/W known{/Width/W ldf currentdict/W undef}if + currentdict/H known{/Height/H ldf currentdict/H undef}if + currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if + currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if + currentdict/D known{/Decode/D ldf currentdict/D undef}if + currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if + currentdict/O known{ + /Operator/O load 1 eq{ + /imagemask + }{ + /O load 2 eq{ + /image + }{ + /colorimage + }ifelse + }ifelse + def + currentdict/O undef + }if + currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if + currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if + currentdict/I known{/Interpolate/I ldf currentdict/I undef}if + currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if + /DataSource load xcheck not{ + DataSource type/arraytype eq{ + DataSource 0 get type/filetype eq{ + /_Filters DataSource def + currentdict/MultipleDataSources known not{ + /DataSource DataSource dup length 1 sub get def + }if + }if + }if + currentdict/MultipleDataSources known not{ + /MultipleDataSources DataSource type/arraytype eq{ + DataSource length 1 gt + } + {false}ifelse def + }if + }if + /NComponents Decode length 2 div def + currentdict/SkipImageProc known not{/SkipImageProc{false}def}if +}bdf +/imageormask_sys +{ + begin + AGMIMG_init_common + save mark + level2{ + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix/DataSource load + AGMIMG_&image + }ifelse + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint{ + 0 get dup type/nametype eq{ + dup/DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false exch + { + AGMOHS_sepink eq or + }forall + not + }ifelse + }{ + pop false + }ifelse +}def +/process_mask +{ + level3{ + dup begin + /ImageType 1 def + end + 4 dict begin + /DataDict exch def + /ImageType 3 def + /InterleaveType 3 def + /MaskDict 9 dict begin + /ImageType 1 def + /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def + /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def + /ImageMatrix[Width 0 0 Height neg 0 Height]def + /NComponents 1 def + /BitsPerComponent 1 def + /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def + /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def + currentdict end def + currentdict end + }if +}def +/use_mask +{ + dup/Mask known {dup/Mask get}{false}ifelse +}def +/imageormask +{ + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + } + { + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator/imagemask eq DeviceN_PS2 not and{ + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{ + [/Separation/Black/DeviceGray{}]setcolorspace + /Decode[Decode 1 get Decode 0 get]def + }if + use_mask{ + process_mask image + }{ + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + { + Names convert_to_process not{ + 2 dict begin + /imageDict xdf + /names_index 0 def + gsave + imageDict write_image_file{ + Names{ + dup(None)ne{ + [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace + Operator imageDict read_image_file + names_index 0 eq{true setoverprint}if + /names_index names_index 1 add def + }{ + pop + }ifelse + }forall + close_image_file + }if + grestore + end + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + /Adobe_AGM_OnHost_Seps where{ + pop imagemask + }{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator/colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + AGMCORE_is_cmyk_sep{ + MultipleDataSources{ + /DataSource DataSource 0 get xcheck + { + [ + DataSource 0 get/exec cvx + DataSource 1 get/exec cvx + DataSource 2 get/exec cvx + DataSource 3 get/exec cvx + /AGMCORE_get_ink_data cvx + ]cvx + }{ + DataSource aload pop AGMCORE_get_ink_data + }ifelse def + }{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource load + filter_cmyk 0()/SubFileDecode filter def + }ifelse + /Decode[Decode 0 get Decode 1 get]def + /MultipleDataSources false def + /NComponents 1 def + /Operator/image def + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator/image eq{ + AGMCORE_host_sep{ + /DoImage true def + currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse + { + AGMCORE_black_plate not Operator/imagemask ne and{ + /DoImage false def + currentdict ignoreimagedata + }if + }if + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys}if + }{ + use_mask{ + process_mask image + }{ + image + }ifelse + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + CSA map_csa + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_avoid_L2_sep_space{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get/DeviceCMYK eq and + currentdict/Components known and + Name()ne and + Name(All)ne and + Operator/image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load/exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + }/exec cvx + ]cvx bind + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator/imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentdict/ImageMatrix get concat + knockout_unitsq + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name(All)ne and{ + level2{ + Name AGMCORE_IsSeparationAProcessColor + { + Operator/imagemask eq{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor + }if + }{ + invert_image_samples + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + [/Separation Name[/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + }bind + ]AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + }if + }ifelse + currentdict imageormask_sys + }{ + currentdict + Operator/imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentoverprint not Name(All)eq or Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + currentcolorspace 0 get/Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + }if + currentoverprint + MappedCSA 0 get/DeviceCMYK eq and + Name AGMCORE_IsSeparationAProcessColor not and + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse + Name(All)ne and{ + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end +}def +/colorSpaceElemCnt +{ + mark currentcolor counttomark dup 2 add 1 roll cleartomark +}bdf +/devn_sep_datasource +{ + 1 dict begin + /dataSource xdf + [ + 0 1 dataSource length 1 sub{ + dup currentdict/dataSource get/exch cvx/get cvx/exec cvx + /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx + }for + ]cvx bind + end +}bdf +/devn_alt_datasource +{ + 11 dict begin + /convProc xdf + /origcolorSpaceElemCnt xdf + /origMultipleDataSources xdf + /origBitsPerComponent xdf + /origDecode xdf + /origDataSource xdf + /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def + /DataSource origMultipleDataSources + { + [ + BitsPerComponent 8 idiv origDecode length 2 idiv mul string + 0 1 origDecode length 2 idiv 1 sub + { + dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch + origDataSource exch get 0()/SubFileDecode filter + BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx + }for + ]bind cvx + }{origDataSource}ifelse 0()/SubFileDecode filter def + [ + origcolorSpaceElemCnt string + 0 2 origDecode length 2 sub + { + dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div + 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx + }for + /convProc load/exec cvx + origcolorSpaceElemCnt 1 sub -1 0 + { + /dup cvx 2/add cvx/index cvx + 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx + }for + ]bind cvx 0()/SubFileDecode filter + end +}bdf +/devn_imageormask +{ + /devicen_colorspace_dict AGMCORE_gget begin + CSA map_csa + 2 dict begin + dup + /srcDataStrs[3 -1 roll begin + AGMIMG_init_common + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi + { + dup 65535 gt{1 add 2 div cvi}{exit}ifelse + }loop + string + }repeat + end]def + /dstDataStr srcDataStrs 0 get length string def + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_producing_seps not{ + level3 not{ + Operator/imagemask ne{ + /DataSource[[ + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def + /MultipleDataSources true def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + }if + }if + currentdict imageormask + }{ + AGMCORE_host_sep{ + Names convert_to_process{ + CSA get_csa_by_name 0 get/DeviceCMYK eq{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + filter_cmyk 0()/SubFileDecode filter def + /MultipleDataSources false def + /Decode[1 0]def + /DeviceGray setcolorspace + currentdict imageormask_sys + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate{ + /DataSource + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + /MultipleDataSources false def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + currentdict imageormask_sys + }{ + gsave + knockout_unitsq + grestore + currentdict consumeimagedata + }ifelse + }ifelse + } + { + /devicen_colorspace_dict AGMCORE_gget/names_index known{ + Operator/imagemask ne{ + MultipleDataSources{ + /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def + /MultipleDataSources false def + }{ + /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def + }ifelse + invert_image_samples + }if + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentdict imageormask + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end + end +}def +/imageormask_l2_overprint +{ + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ]/DeviceCMYK{}]setcolorspace + AGMIMG_c 0 ne{AGMIMG_c}if + AGMIMG_m 0 ne{AGMIMG_m}if + AGMIMG_y 0 ne{AGMIMG_y}if + AGMIMG_k 0 ne{AGMIMG_k}if + setcolor + }{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + [/Indexed + [ + /DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ] + /DeviceCMYK{ + AGMIMG_k 0 eq{0}if + AGMIMG_y 0 eq{0 exch}if + AGMIMG_m 0 eq{0 3 1 roll}if + AGMIMG_c 0 eq{0 4 1 roll}if + } + ] + 255 + { + 255 div + mark exch + dup dup dup + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ]setcolorspace + }ifelse + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation/Black/DeviceGray{}]setcolorspace + gsave + /Black + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Yellow/DeviceGray{}]setcolorspace + gsave + /Yellow + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Magenta/DeviceGray{}]setcolorspace + gsave + /Magenta + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Cyan/DeviceGray{}]setcolorspace + gsave + /Cyan + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +}def +/indexed_imageormask +{ + begin + AGMIMG_init_common + save mark + currentdict + AGMCORE_host_sep{ + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget dup/CSA known{ + /CSA get get_csa_by_name + }{ + /Names get + }ifelse + overprint_plate not{ + knockout_unitsq + }if + }{ + Indexed_DeviceN{ + /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{ + indexed_image_lev2_sep + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }{ + AGMCORE_is_cmyk_sep{ + Operator/imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + Indexed_DeviceN{ + /indexed_colorspace_dict AGMCORE_gget begin + }{ + /indexed_colorspace_dict AGMCORE_gget dup null ne + { + begin + currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse + get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and + AGMCORE_in_rip_sep and{ + [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup] + setcolorspace + }if + end + } + {pop}ifelse + }ifelse + imageormask + Indexed_DeviceN{ + end + }if + }{ + Operator/imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + Indexed_DeviceN not{ + currentcolorspace + dup 1/DeviceGray put + dup 3 + currentcolorspace 2 get 1 add string + 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub + { + dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put + }for + put setcolorspace + }if + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + end end +}def + /OPIimage + { + dup type/dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode[0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc{false}cdndf + /Decode[ + 0 + currentcolorspace 0 get/Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ]cdndf + /Operator/image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse + }def +/cachemask_level2 +{ + 3 dict begin + /LZWEncode filter/WriteFilter xdf + /readBuffer 256 string def + /ReadFilter + currentfile + 0(%EndMask)/SubFileDecode filter + /ASCII85Decode filter + /RunLengthDecode filter + def + { + ReadFilter readBuffer readstring exch + WriteFilter exch writestring + not{exit}if + }loop + WriteFilter closefile + end +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type/dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode[/customcolor_tint AGMCORE_gget 0]def + /Operator/image def + /SkipImageProc{false}def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + << + /Name AGMIMG_colorAry 4 get + /CSA[/DeviceCMYK] + /TintMethod/Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components[AGMIMG_colorAry aload pop pop] + >> + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + current_spot_alias{dup 4 get map_alias}{false}ifelse + { + false set_spot_alias + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + true set_spot_alias + }{ + //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec + }ifelse + }bdf +}def +/snap_to_device +{ + 6 dict begin + matrix currentmatrix + dup 0 get 0 eq 1 index 3 get 0 eq and + 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop + { + 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def + 0 0 transform + AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + itransform/AGMIMG_llY exch def/AGMIMG_llX exch def + 1 1 transform + AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + itransform/AGMIMG_urY exch def/AGMIMG_urX exch def + [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat + }{ + }ifelse + end +}def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + }if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage + end + }def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + { + 255 mul round cvi GrayLookup exch get + }currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer + currentdict imageormask + }{ + currentcolortransfer + {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + MappedCSA 0 get/DeviceGray eq{ + {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceGray eq{ + {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end end + }def +}if +end +systemdict/setpacking known +{setpacking}if +%%EndResource +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +Adobe_AGM_Utils begin +2 2010 Adobe_AGM_Core/ds gx +Adobe_CoolType_Core/ds get exec +Adobe_AGM_Image/ds gx +[/NamespacePush pdfmark_5 +[/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5 +[{Doc_Metadata} 831 (% &end XMP packet& %) ReadBypdfmark_5_string + + + + + + + + + + + + + + + + + + + + + + + + + +% &end XMP packet& % + +[{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5 +[/Document 1 dict begin /Metadata {Doc_Metadata} def currentdict end /BDC pdfmark_5 +[/NamespacePop pdfmark_5 +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: 1 1 +%%EndPageComments +%%BeginPageSetup +Adobe_AGM_Utils begin +Adobe_AGM_Core/ps gx +Adobe_AGM_Core/capture_mysetup gx +Adobe_AGM_Utils/capture_cpd gx +Adobe_CoolType_Core/ps get exec +Adobe_AGM_Image/ps gx +Adobe_AGM_Core/ps gx +gsave +/0 +[/DeviceCMYK] /CSA add_res +grestore +Adobe_AGM_Core/pt gx +%%EndPageSetup +1 -1 scale 0 -141.84 translate +pgsv +[1 0 0 1 0 0 ]ct +gsave +np +gsave +0 0 mo +0 141.84 li +323.28 141.84 li +323.28 0 li +cp +clp +[1 0 0 1 0 0 ]ct +0 141.84 mo +323.28 141.84 li +323.28 0 li +0 0 li +cp +false sop +gsave +/0 /CSA get_res setcolorspace +clp +[1 0 0 -1 0 141.84 ]ct +[323.28 0 0 141.84 0 2.44379e-6 ]ct +snap_to_device +Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf +<< +/T 1 +/W 898 +/H 394 +/M[898 0 0 -394 0 394 ] +/BC 8 +/D[0 1 0 1 0 1 0 1 ] +/DS [ +[AGMIMG_fl 898 string /rs cvx /pop cvx] cvx +[AGMIMG_fl 898 string /rs cvx /pop cvx] cvx +[AGMIMG_fl 898 string /rs cvx /pop cvx] cvx +[AGMIMG_fl 898 string /rs cvx /pop cvx] cvx +] +/O 3 +>> +%%BeginBinary: 1 +img +ci=7N"U+n2\@_OG#.h7O\@B,WpUCU?\@TAa[C*QY]"#6D\-B=O\@AuU](ic>[(]!o;^](WW<]!f&W\@T';\-B=O\@AuU])0#:\-B=O\@AuU](ic?]!SuX\[]/Yq7$pF\@]8]\@]8_ +\?Q#;"Tbt1o`,4&!"Ar4!W`Am!!`T+"pG#3!!W&r!sel,$1@io#lXl,!rrDm!!`Q*!<<-)!!Mfl!X&K- +"9AK'!!;Zj"p+c)!WiN.mf3Fr!!!;t!!!<(!WiH(!q-*l!R=gVuirtV>R=fW;NUqV5jpVkg,dVtm+nV50i] +V50raq4n7lUnXZ]Unsp]U]dNkUnO^[U]dNkUnO^^U]mZpUo:/gp7qnkU8"K[VkNg[r1jOjVkg/`U8[j_ +#,.rjV4s]_pnS%jTqnQ^p7r1qUo:)cUo1&eV4@Si"TcUCirB;g!"&`1!s&Jn!!`T+"pG#3!!W&r!sS`* +#O_Wm#6"Z*!rrDm!!iZ,!<<-)!!E;m!!`W,"p"])!!D`k"p+c)!WiN.mf3Fp!!!5r!!!6&!WiH(!q-*l +!9>]aLsG_VDkuTYB3uYH@]8rOiE4a0r7OW5A>C +#,]GLZ)FV[_DRN +#H,GB]sQ%Y[e[TAVo#XN[*>>Rrk86C#I^AO[(WZ[Vtn"2^T#8kXKBa^q7R$I[]$X>[^!RB]a)9[W4&t> +Z+g%I#HbP?^:q%H_"kYKXgtXL^:'TJq7R$J_QChla1\\O]a2KRW3NeOVS0\7]`t@S[]ud0_YCeKVT6-M +W2RT.]a)?D[_BJZ\ZP\@$GN^`[_B2p[*>t=b5d+oJcLB&h#PhP#-!!KpJYkbd6]",D_]=G8]q7$sE +\[oA^[]dBXYI:sP]",_[^isE\-KUU\@oD\\[hOG#J%CR\@oD_](WW8 +Ye.LJZF]kA#J.@V[(`\[0!>\-K^R\\#D`\[q^KrjW3HZam]Y]",EJ\-KCT[^`iX]=I^H%_K6U]XYA[YeI^P!!!'&[/fh! +!Ze>PrjVs;n[Jh2\[]5\\@/sD\-BUX\@/lY\a[*6]"#>_]=PA[n[Jh4\@fA`\@]3>\,s+N\-0CR]XYE? +\-9LO[(P\\a[*5]=>M`[(*d=\-KIS\@T5`\@2.AqmZm<]"5A\[(![; +\-KRO]">Pb\@VLG#/%RX[^WlZn@/_7\@T8`]!T$<\-KIP]XbV`]=.7>#dh1S\%&fS]=%pN\@K5`Xr#Ca +#6Y,/!!K='TD>DjWi<"tWi;bopo"Y$WiE"oSuf#bV5UDoWVECsX.uYoWN)qtqksh"W2l\mWi<"tWqiRp +V6-TnW<'#uq5=@kXel#r+f_NAWNN8(Y,SP&Y-"h*Xf\b(WN)qsWi;qqWN<.rXJ`)oW!B?%WN<(sWN#]l +#HFc&XJr+sWVNItWMuepXJr2!r2BRm#-"PnWiDeoq5=LtVlZ\pXJtun#-+T&UoUSrpo"4mWrAt!V6-Ti +Vu`ltri#sqXekil#Ge;tWi2SjWVNItWi<"tWi;bonYcPjUT(6qWN)qtq5=P!UT(8mWi<#oVuiftV>dFp +Wi>fm&#lS-TWG,gWLp8l"98E("MOm%!!X4,WMleqW:?hkV5^GoWMu`hW$tdW<]9"WN3#"WMf9c"fnDpWiDuaWQYjWN<)"WN)fbW=Pi+ +Wi2nmW2c\jWMuquSJ'6K#6P&.!!K7"Sb]&dVkp;gW2?5epnS@rVl->bS#NBVU84]bVYHqiWM$,eV?3Zl +Vtm+nWM$,eVPg8gq4n7hWhQ;cV5U9eU`H//U84W^W2?8\VP0ocTVeB[VPBfZVP^,bVkg/erhKaqWMlMi +USmp`#H+DoWMQAdVYR"mVkp2gV5'laq4n+iV5'jhWMHAgp7qh]Vl-,aq4n4mUT'rcWM]Hd#,e5qTr=rf +pnS.lW26>dU8jp_U^*cqV59u^WhK6a#GIrjVkfl]V>6nlVkp;gW2?5ep8%V^#H=AnW2?JhVtm+nWM$,e +VPg8gq4n7hWhQ;cV5U9eU^s<#Un+H\Tr+B[W!!)#!s?RDiW',tQ_pRTV=:8cTr+ZaV59o`q4n4nVkp/a +W2B'[!iMlmrhojkVX^GfUSXreW2-AdV"1;dU8XldVQ$DenY?DgTV89]USXgVU^!]pUnacaW;34jVkpX[(j/ca18:Q^Da^;@=uW:@D'W5c9_^!W`9$!!N)t#6D+1 +!=&T4!Vl^B!O;\+#65,4"9JQ2YHJK;%'R"D#RCD1"U+l-!W`K-"9bt0":>2)!!`W-#dO^:!Wr/t#6Y&5 +Z3UI4!r2g$!WiB.Z3UI6q#CR"!!=+GZiCd6!!WH2"9>\0"S_s$!=Ar0Ylk4*!!`N4!!`N)Z2sb$#6>24 +#6=h1!Vl^#"9JQ'!Z\JVq#CX&!!!$$!XlC*!!fk=!WiB&!!N3"rW!21$N^A1!!!/t!!`P1!!*<)$N^&' +%KWrF$igP=!#huJ!W`<*ZiK^u"U)?MZF@C6\-BFUZ+@QX\+mH<[(*WV\@AZQn[Jh7[^WcV[(`j6\-/qK +Ye%C8\,s4PYQ;M@m^NM+]tUk`\%0*?\-KXJ\@B)Z\?u(A#J%:P\@Ao[ZLG@-\[8lP^U!@="M)+J^TI.< +qmZmDZ+@NR]=PH@\-K=R[(*WT[^l4D#IM"N\[]/O]CEB9\[JuW\?ruUm^ND%^Tb;[n[Jk;Z+@NR]=PG_ +"h;.RYe@Wm!!WT-!+u"S_s$!=/f.T`bMo!!`N1 +!!NB'U&k&i#6>)1"T\Ut!Vl^#"9JQ'!YqB/q#CX&!!!$$!skan!!B&'!s/Q*!!!/t!!f>+!s/K'!!N)t +#6CP!!m"onr1"U"f4TV)bq$_X8j#6t51"U+l.!s&T."9b7q":,&'!!`W-#+l)# +!s88u#6Y&3T*>;u!r2fu!WrH-".obu"Si$%!WW<9TqN"k!!WH0"9=tq"S_s$!=/f.SHK)k!!`N2!!WH( +T)n`f#6>,2"p"^r!Vl^#"9JQ'!Z%?)q#CX&!!!$$!st[p!;lg%Ta:f&!<<*&q#CYn#m150!!!/t!!`Os +!!*9(#m'i%%KW8u$3187!#1ir!W`<*`W4uu"U(X%Str4OU]dZfVl6HdU^*TiV5C)bRAfYO#Gn/jV50fb +T(/WUV$39fSZ&B\ntZDbW1BuWrh].\#G%ioTVSB[W:?YgW0sHXVPU,_q4n7lU84W]TrO^RU^!]iV4Xf\ +V=C>aV5TrcRJs&QU^*liW2H>fVk`dX#G.rhUnsl]V>6nlTr"T_V50NXnY?DdU84W]TrO^SV#I1nRB)mW +V>@"_U^jApW2H>fVk^2dVkfi^Vo\o>WI"(7!1WNZs+^4Ir;Zhenc/ZZnGiQQnc/ZRpAb5_V#C>qUpI`* +!!%iF!!&5R!!&5Z!;HNoPO\\SVOR,V!/U1G!/U.F!0csR!0csR!Kk:j!!8Vi!:p0jS+6OZS+-IYPO\\S +U8e"i!IC`g!8%8TYND"M^9@(;#Hc^B^rF*iYPG^6VR4%N]tJa;n[Sn=W3!8-R,O4u\HfgT[!Lkc_S5QN +#JS'+k'FDA^%&WOUn[SnMHG.#+]sO[4\HfjIXKesriKE`A#Htk2[$0X9Z22$+\HfjcJ`_9c +[(Z"?#LS@E^n&`fWU[M(P2Ve3Z)jn8pAbB3!!!'#!qu[A^An68!!3-#"98M3[f?O3Za7%>!"Ju/!WWB,!!<<(!l"d:"U+r&!!`Z- +!P\^:!!W/u#6b).^B4H9"o/-'"TSN)^B"<C8'b16EnH&q7[]p5J$NL4t!XGtK#64c*!XSN%"T]2<"gSF(!XAo1%Kcm<#n6;) +"p5=:'b16EpB(0m"q\;R'`\F^m"p5&:!s&D'q#Cp+!X&N,!!9.!!WW?("9JW"!!]M)!'!!;lp-ER7J!rrB&!=&W0XfVX."g5#0!Wri4!!3-("98Q-!<]G*!!WT-q#CX( +!!02)!!!2u!!`].!NcJ)!!W/u#6b)-"K_\)#5eK#!!`Q-!!0+!!sA?!#6=u4!!98)!Vl^#!5 +p](Ms!!*0/"p=T""fhV'!rrDs!%+`H!!<3&!!!0&"K&'t"9YEoV#^W)!<<0$"U"f-!s&M)!WWB-!Vl^# +"TSS(!rr<)q#CX'!!0,&!!!2u!!(!<<kp#6=f/!<<.rVt^5r!sT)7!!WW3#!r2g$!O)_5!!`K*q#D`BYQY:4#64f-!!!2+ZNU=/ZF6nnGig%!Y>>5!!!)u +!<)s'[/pm>!WW3%q#CX#YQY:4#64i$!"T=CZiUI6!!WG7\,ZL0"U2:6o`,3t!4oZ?!!*,j!!^$C!!!$% +!r)a#!rrK2!<<55n,NY#!!<3$^&da(#6t5/"M4j<#4VZp"oni1]*&*6#Oh]t]Xn.D!WW;l!!g(;!!*B0 +!!Dur"q(D5!!'_6nGidq!"],3]`S<*!!`].#.k!!"/2q"p)F8!V$-p#64`,]*86>nGigq!4]N>!"&]0"p4l-"h2&EcN".Q"T\T'WN,^n#6Or+!WWW1 +V"k!$!WW<)"U"h+WrN8+!s8N)q#CYq!Xo&1!!!,u!!rW*U]Lr)!WW3&q#CX#TEYW$"TSZ#!%%`>"pY,3 +!!%"on`#!!`Q*"p^h% +"p4]&r;[$("9>I$!!N&s"p=o-".TQ"p](L$!!37m"pXl'#6Or0!!`_$!Vl^#!rrK)#6ph%pAb@"!!*)" +X8)`#!rr<&!"8q)nGiZe!Xo&2!WW3&q#CYq!Xo&1!!!,s!!`Ot"pY,3!!E#s%gAf+!X/W*"ot[&!!!$' +"hk!'!!`N)Wi5su!e!/C%E!/C4J!LgRu!!]XI +U&Y2([eBb%HLUt8M"1NGM#%,H!!%iG!!0mDnc/Z9nc/Z9nGiQDnc/ZEnc/^8_t!d/VZ6_g!!&qf!!&qe +!!%cE!!0$hqZ$Z;[*&I%!!1-Nm/R1-WU'Tb_s7:&g[G4A!!(%)!!(%*!!1Ecli7%'li7%?lMpq>p]0se +!64=)s1Rb!!8Hi?!5n+&!8Hi?!QG-,!<9b-!!019rW(7E"U,,4[^lJ6!!<`K" +!=&`-#64h;!W`#s#6Y#3!!9b6!;QX#!!NE0!!'S1q#L^#"Ter0!4i1+!=&Z-"U,,2\[V>7"onf7!!3/1 +nGrj(!!3-."T\E#rW*55!!3-."T\;u#6;=8!!iW0!;QX)"1c#L!!!*$!4oT?#6hF6o`,1(!4]H<"pj\u +#.h;E!^^'\[VbC!X8&n#.FX7!!NE*q#CBr +rW!$%!W]b#!!WK+"TSQ)\*sA%"T\Z*\,ZU!!!`\<\-)g6"TS].!<<86\BFpV"U,"+WW;ep"onf4!!3/" +q#M!/!!3-'"Tk[&!X/],!WWB!!=#M'!WWK0!;Z^%!&"TS]$!=&c.#,h\*"9SB"#6b)3W!*/(!r2j%!X&K,W!35* +quQct#6t80!3)n""8Ms&"98T*"0)D&q#L^'!!N?)WWE1r!=&T/!sS`*WrVqr#64r1"onY(!;QX#!s/Z1 +"TYO#p]1R!"UG)0!3,Jh"/u8%!!3E0!;HR!W;lu"#R(5'!=&V*!!!3*"p"H"%0WZ1"onW+!!'$s!sJk@ +!:0[i#QUj#!1-&"98K'"9ek'V#gf'!!3-'q#LVp!!3-,!(!=&V&!!!3*"T\?!%0NH) +"onW*!!&pl!sSqJ!94%`#lpfr!g9j +!3Pel!PZ8;!!`N)"TSY7!sSK##6=f.!!B_5"o&'%#QPG: +!k&I2!!W]/&HDm@$MaZ&"9\W'!X#sDq#CX%!!*0%!$f#D!!g"Y!!!*%!!E-!rW!25,6.]G!<<5t!!We= +!WWf4#l"B,"h(oB!!!*$#.V,?!!!).!;$6n!kZ#EmJmL%\,c^4!<<5s!!WK)!!NQ-\*j;#!rrK/ZNp"# +#6b/4!4Dk3!V$-k!bg;"9AK*q#CU)V#p],!!i9!-O?ON!"Ao5!!E42"TeZ,!!WS*"98W+!Vl^! +!!!UAo!kn[#!!<;&WWDMf#H=X&"98H&"S_s$!rr<)"p([k!!NK*"pUh+nGidt +!sJ\&!!WJu!;ca$!Ge"U"f0#,;@l!!`Z0"TYG#"p+5o%flj4W!3A) +!!**#!W]3r"j[/K!rW*#U8/"h!!`T+!>!!!*%!!E#s#Gi@>!!<6%"8Mp$#bhD$%0-V- +!"&n)U]LMr!rrP$UAY&l!lk<#!!<;$VZH2c#Gn3s"98H&"8Dj#!rr<)"p(Og!!NH)"U:V(nGigu!sJ\" +!!WH(nc/mq"otCu"Tnqu!!WY$U'1]#!q60oU]CZ'!!!,p!!NH)"U:V(nGi^r"on`*U$hsd!g9j%flj0U]gl$!!**# +!W]$i#0HoHW4h^$!4;:ss/,Jir;Zi)nc/ZsnGiQfnc/Zgnc/lg`MDq#L^#!sAZ0"TSZ#!WN6"!!5!<Mg"p"f-"on\&n,N^q!!!)! +!<<9'nc/mu!!0#"!!!)j!!`P&VZ6r(!!Mfl#H.Y'!W`9'!Vl^"!Jf#6Fl*!iQ,""o85o!"T/3 +Uo+1o$31//!!WJ%UB/L;!PPSn!<9G"!5SX>PdUPl]ulfC!!:HJVp>A,!!0d:YlFfo^[D0>!!0XDqZ$Yu +]upE.!!013m/R1%_!D%$`p3U)c0t`3!!(:0!!(:1!!1?^li7%*li7%1lMpq0p]0se!6sg0!PQ\C!!(:1 +!!(%)!!(:1!!1=Em/R1#bP2&7\C:N8!"/h9])W!=!!*)0\,ro8o)Jp'\,lX2n,N^'\c;d5"98J* +!:0[j!k>ZE!!!$$T)eZe"M)#B!sk7o#Qk(7]Dqs7!!)uu!WomAaoDJEWN#"[%06G2!!'"!!!*-$!rrAf +!7q2U!Wie-Y,D@(riHP5!.!!*)!W<0X2 +l2UsdW<*&#n,N]mWW3)&"98J3!94%a"0&1'!!!$$VuZ;e"KA@#"9t4n"p=q&X8i8(qu?d"WN"#?!Wo0n +jo>hk!!<3$V5O@p!WW<&!V?B;!#>S9$(\&g!!8pkU]g`!#G2(u!!WE/!R(Q9!!E<,!2QO"!!EB(!3)gW +!6bEN!MZLm"U4r-!2QCl_Z8Wq"Jhgp!!2Qh#GndSj[\j,m!!/b=p]1?)rW(1C!WomAjo>hk!!3-#\?$YU!b=[B^GOYd^pAZFp5<"TfSJ!<<*##/L9C$N^;3]r_;I"1\C:"T\c2"V[fIe,\;)$GESR!!3<3!4]N? +YlO@q"LtrC!!2Qh#Iq8E!rr?(!j2Oi!!WM7])Vp7"eG_k!!`T,\@V_@!<\_i#Qk(=\,lg6!W`3"!WomA +aoDJEWN#"[%06G2!!'!e'aFaB"9Sbl!7q2e!=&Y.XV;&@Xf\S)XT8P1!Ybh>!!!$(_uTc:#7(D3"g"1& +"M"L;"T\c2"qQs"h#Pq)$EK^+!!!!!$(blID:#71J4"f[ju"1\C:"T\c2"V6`pjoER)$E9I&!!jn]Y5eR$bd!tIg<0K[!!1PoYlFf0g[>-Z!!1]#qZ-Z,b5g/p!P,Z+!!0XD_Z8$`!O'bU!8[\V\]q#P +m/R13YP8+t\c)TR!!353\E3c"!<<0$!4WjG!!*-$"Q9@=!#5M7$am&b_!!35$WTF0h!<<3%!3$S2!!*-$"R6!=!#5Y>%BQ?1 +!NrC3Xfec/#6G#4!!!3,_>sN7":"o0U)UQA#6=f.!<<0AUYPq#!"/h((BF^?!WW5"W<0X2l2UsdW<*&# +n,NZmW/!!*-$"S2W=!#5S;$Dj6q!2lIsUSjmh"T\]/!!!0+b5h/7"9ni.T,Y6>#6=f.!<<0BT]Q6u!"/h$ +(BF^?!WW4rU]SF6i;a"VU]LMsn,NZjU]CW$!!L%:g&M?[Uo47r!!35,!9jIg"9PBt!sS`-U&arg"Te\& +V#USo!!34tUr`W:\`!Mg^%DBB!"$Aq!!(?@!4L:gb5g`+!0aSd!13-S_>jS,q>gQ+b5g/p!P,Z+!!0jF +_Z8$`!PQge!8[\VXi@7=m/R14Z1n>!\c)TR!!353\E3c#!<<0$!4W"2%0QY5!Wh9\huFGm!!'C6!"6$? +!4f;=!!'U;":kJ4rW9n9!!iK,!Or+1!X-"5"p>&2#Qb%:e,\>*!s?%6!WE6*"ou0C!jMas!!KgA!WW8j +!!9O@!r`0##6h71li77o]rVJ>!!3=r!;QTt]<)VR"df8q#S3oH!!!*&!<)s"!k>b_!!35$WTF0i!<<3% +!3#r$$3U>3!s.]ff)QKh!<]I+!=Gj/!j8N(!f'!!1>iVZ?)a!G'LN!<9V/!6kKF!k>c& +!"8l.!WW51!=8c,!<<>_!8mhn!>>G5!W`N+!#QXo*%03oJ!jMas!!KgA!WW8j!!Wt="UGA6!Nc@g!!NJ2,6.fLSH/Ne#7(C<+T_WD"do>r +!<=CP!!r],!<)s"!k>b_!!35$WTF0h!<<3%!3#u(!<<-##3l3?!#GeQ!!!EJ&!:g*p"p1V=!WW3(R/dEl!$%g8#6Of'!Wo@#aoDJEUnm,Q$ip>1!!&hr#6=f*!!`#pc2\X_ +&-)\4!sSc.!hc>:!4]N?YlO@q"LtrC!!2Ng#.Od9!WW9'XoReg#6VL:!W`K. +!M9Ag!!WJ8!<<0(!gs#o#6Fn9!b_!!35$WTF0i!<<3%!3#r%!s/W.!!MTff)Q!`!d&TEG7kTI'jE"p5+S!;-!!';#!<9UQ!8%8P +\[Li)!568Mci='[ZiJq_!5PH3li7%"p]1?)rW(1C!WomAjo>_h!!3-#\-)s8!%!!!.g!!<<'!NQ,!!!E0"!Wo@#aoDJE +Unm,Q$3:,/!!&hu"TSQ)nGpi7(BFUEUSA$eV?$jo!"&i1UT'.a!!*-(!R1W:!!EB(!2Kh-!!WN,!!!'# +Uuh[#!!B##!!3#u!i2Un_Z8Wq"Jhgp!!2Qh"p:Y%!s8N(^Ausf#6C_&!WW6$"0hji!!E>!!!!.p!;HNr +!rrA"rVup#r;Zm#Unl*4s1.(g!58%*_>jhOY5kQ@!!&tr!!9^c8'h8"!!'I2!!'_$!5\^9\bZ=+\]Y!* +!!0X=li7%!_Z8$`!5PrAh>dPiV?#r_!5S@0s1/+/bl@eH\@CZ$%06G1!!'M1!!NW."98J^!8mhn!<<,* +[/dM=!>G8!!NB*_#OW>$igL?!s&H(\,Z^7"TSW.!4gSZh>doa\-2j>!t#&/\@;UF!:p0n +\@;S?!Up'o!OVq3!!!6*XoRbf#.Op=!Wi?'T)e`g#6b+q4!WW6$rW!!$\@BZ]!Wo@# +jo>hk!!<3$W<3,(#64l,!UBa;!#G_=!j/R+XfV[,Xp>(0#6Y&4u!rrB#!!34tUr`W:\`!Mg^%DBB!!fdE +!5#cA!5chXkPtU^Y5eR:mf:3)!4;S&s1-;QfDkr_[d3toVo&M]!!'^>!8[\U^8:ns!!&ql!<9V/!7:cV +!s/Q)!kP`E!<<0&!!*5j!!NB'!WW51g&U%2(BOTF\ZcCJ\-2lB!OoK@!!<3&"98K'!l4j?!<<*#\,l[2 +!Oi%4!<<0$!4^MYh>e&f\HDm6!WW6,[(6;=!s/S8!!<60!!*E.!!NE($31>:!XAW("LtrC!!2Qh"p)47 +!<<-$XT7\f"p)47!<<-$TE#!"!=]28!!*-)!!'M/"9S],R/dKn!!9Y2!!!$"rW!!$\@Bfa%Klk:!!B6r +#6=f,!rr?)mJmCk!!<3$WT+!1!#Gb=X/r*'X/uR,XTPZ+"p+o-!sAT+!!:(=rW!0(!!!&!!rrA2!!NB' +!rr>#h#Pt*%g&^5!!36&!=,C"!rrH+"MOm6!"K#8!!*-$"TeZ0!!WT/#6"T*WMoq!!Up'n!N?)#!!*,/ +!94%`!N?)#!!*+u!;Z[+#QY)3!!*-)!!&tu"9\c-R/dHm!!B2$!!!&u!!35$WQkMC!t,)2Vk=4p!!<<' +!"98H("TSP!!!EB*!ho\i!!`N)"/Gqt!!3#u!Wo0naT)@VQf.oE^%DBC!"6H_OoVQ& +!!'k9^9>`\kPtUkY5eR9mf:3)!5A:0!LLRE!8%8P\[Li)!4fuIci='VZiJq_!48U'li7$op]1?)rW(:F +%Kcn8!5#`@!s\l/#Qau.mf3Ll!!3-#\Cpr@!#Gb>[B_([[^H;?[fO"K!WW31!!E?'!!9t:"T\T'!Or13 +!!0P/"T\T)!!'OY!8RVa\Gug9"9JW)\@V_@"p;@8!sS`+#SIRM!!3-#"onf-!!iQ)\@;S?!Up'n!Or.2 +!!*,&!:0[i!Or.2!!*+n!!*-$%0lk7!#irI[2(BsuBV]Z,CX9Aa."08O,!<qu@K:!!*<3"TSW)!!WE,!<U7WD-US@qoU]RBi!rr`J!!**#!sJhq!!NB'!WW51g&U"1&HoPP!W]g=!Wfe2\[)8E]!VtG!!!;?!!NB'!!0S2!<#irI[2&ci0;XTS^,W<<=)!N`1"$`^$0rVup'_Z9Z9#6=f)!N?/$!Oi%4!<<3%!3+cS +e,TuW#m:5/"98_,W<*>+!"-F?qu@0.$4-\4!=/Z6!!*?*!rW*%WMoq!!Up'n!N?)#!!*,/!94%`!N?)# +!!*+u!;Z[*"9ec*"p=o3X/W(m"onjp!!`N)"/u;$!!3#u!Wo@#c2\=]!!*?,Une:s!spT)]4rU'gl"!!^XIo`,3t!!!%q!rrA2!!NB'!rr=tjoER)%\sF7!!*0% +$)F?u#QXo4`rP]2%0HqE!!!$*!"8i.#lk&*!!K*n!WW8j!!WJ"!n&cht! +VuQi�$Z7!#>__e#d +]*/0?!!3E0Z+CAD!<]e2!X0JB#lt#6!!3T3!!il/!!KgA!WW8j!!WJ6!#irI[2('XdB +!X&N.!s&M)';DB4"0&7#!s&H+_Z9Z9#6=f)!N?/$!Oi%4!<<3%!3+cSeGp'[WW`A-!!3B0TW/7t!n!!NB'!WW51g&Tt0&@f:P!4]HE"gS+9 +$j$dI[1*$7!!p@?"T\T'!Or13!!0P/"T\T)!!'OY!8[\d#ds^XXM)3S[D/sK#ljr3\Gu^5&?d&d!!rW, +#Ho*K$N^G5!!'O=!WW8j!!WJ6!bc!"T;7!!`Y"Xei"tXI:73!0#4DNq!<<3%!2]#^bQ&3OV?-apUB^sq!!ru7#H+:'rVup&bQ.;9 +#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&.XUAu7"WMcPdX.9=t!!!8E!:p1+!XtM5!!`K+#+HA0#m(53!!&gj +!WW8j!!WJ"!!!3T1!"Ju3!WW3%_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"K(A!!3T0 +!!3V9\,lX3"h4O7!W]sA$FmgY]!hkD%fd+BrW!)2\,lX2n,NXn\,cU1!,2!!M`j"T\T*!!'"Y!7q2e +!<]F(!sYj.!s,M3!<`i6!"/c0!rr<'_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSeGp'\WW3)-!!!'-UT"=q +!sQ@X5UB1Ro +UB1Fo#lk&8!WWT."9SW("3gi=!!`N)!!/kt!!0P/"T\T*!!&kX!6bEQ!iH#"$31&-$D=0s!!jSOq>^P] +\]Y!:!!_2T[bIb$XS;br\[Li)!4fuIci='VZiJq_"0DR:Z)I`i!!'J&!<9V/!71`E!=69H!WiH)#QP%q +!!NB'!WW51g&U%2(BF`E\-E)D[K-H!!<6%\@<0_[CWgN!WiK*!!!'#!4]N?!!2Qh"p)47!<<-$XT7\f"p)47!<<-$TE"uo +!"9,5#m([H\,s/B\[]5#irI[2(BOi; +XU#'1X9/R*!t;-/!sAT+"98N(!lP*#W<*&#n,NXnW_!-!!WE.!Xu!*!iZ=% +WN)Pc!!3-#\G#tC#lt55 +!!<9(!=8c1$N^G3!Wi?%!<<-#!<`H(!W`<'rVup!jT#_k\?Z;?ZaU"D[K$ZB\,H@2#QOo+!=6LA"T\T' +!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?[/^:1"1SC>"oo&4!XSi,#lk&+!!B[B!!rQ("U+l+ +!WiDt!!`P9!!ic1!s5V*li77k\cT*!=Gm.!WW3)!!<3%#/gN@!!`N) +!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cDX.%Kcj5!X8W2!.!X&S6!94%a!NQ2)"p+o/VuZPl$O-V3!33%$WWE@'WTXA$"onu2!XA]*#64l*!!Aso!!`E& +"U+l+!s/Mu!!`P'!!WW/!s67b= +"Tn`*!W`9*!!WE'#QY22#QOl*"W%4@"p4o,"T\]*!!T&$!sAZ.!!<<'VkqK8s1.(g!58%*_Z1+ZQN.#` +^&Y=F!!'(5blHr-!4K'2!57h$_>jSHq>gQ+b5g`+!4;:s!N=?2!!'mR!71]G_R'=%!!g9R!65'>^:($A +li7$Qp](?8[/L'M!!353\E3bp!<<0$!4_h)'`n@9!X&K'!W`B'"Tn`+!!*6)!!*0#!!NE+!WWN,!rrN. +!W;uu!U'M!"h;,D[_/pJ[CcJ>]W_OL\cDp8!=]+H!!NB'!!0S2!<*$N[a!"T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?[/^:2)6aMg!!3-% +!=Af4!X\o."TZ-A&-)t9!WW3%"9ec+q#CX&\,lsB!WWJ.!:0[j"LnL>#Qau2TE"rn$j$J1!3NrE!4)h/ +#6a5j!"p1b("9ni. +!!!$(W2'U?!!34tUuhX\!<<3%!2]Gj$NUD7!<<9+!rr]/!!Wc1!sJ]*!W56!R1W;!!`N)!!/kt!!0P/"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl +_Z99.*s31H$31,-!W`Q,"p,&1!#q#CX#!WW9&"9\`( +!=B8:"98K,!!!-%!"T&1!!!*(!!3-.!!**#!!26_('F[J!=8l0"0&E(X9#@)!Mue#!!!6)_Z9Z9#6=f) +!N?/$!Oi%4!<<3%!3+cSeGosXWP(X/i5##lk)6!!N?)!Pc!!<3$V>1)r!Y;$NLD6!!8jlUSImb!W\sn"TSN-!R(Q: +!!`N)!!/kt!!0P/"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z99.*s;SD!2l`jW!WM,#QP#.!s&J"VuQl" +!rrE-"TSW*"o&'$U]po$!!U+;f`22O"p4i*"gA!r!"K,4"TSe*U]V.*!!*1qW9=3c!t1n6!!!5V!!!'! +!tk_=!!!-+!!"U!fc(C(,J]`>LL!k,MF])W*B!P5eN#Qb52%)DoI!<<*#\,l[2!Oi%4!<<0$!4^MYh>doa +\,cU1!9#QY>6!X/T)[C-AF!!3<)!s/N+!!;rs#6ML;!>tk?!j2Rj!=&\< +!!*r;"9P4s!!)!=/u6X/W'&!sJZ2_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cS +eGosXW!!E?0!"KD>"K2D+!WW6("98_%WQG2B!i2XS!!NB'!rr=tq#Cg(!!!$%!rrE,"p##4'`\FB +!sAT(!Wi?&!!<6%"p#;9"9eng!#GhCS#HC_UB@9cUSe(q"p1^!U]po*!"-sNo`,3t!!!%q!rrA2!!NB' +!rr=tjoEU*$N[%(!<<-$!!&gj!lG$/!$2B?U':St!M'W'!=Af/"T\UsU'Ci%!sJ]-!s/Q)!r2j%!iH#! +'*&.;^]E-i#6Le'!>>G9"0hmr!=f28!<<<(!"T(-"U4t&Vs+3e"98Ls!!r].f`;ij!!NN+!XB&4!"/i. +!!30$"onf-!!3r=!##P:!s/f0$j-U-!sSf,!<`K)#bRs8!<9Ug!!'_*!5edCOk]rGY5l59\'k3T!lMCR +d/`A1!4K'2!57h$_>jSHq>gQ+b5g`+!NDaj!!%rP!!0!rli7%/_Z8$`!6__Lh>dPnrVuu4^ZGLrVoJf( +!!'+q!!/:trW(1C!WomAjo>Pc!!3-#\G-%E!X/T+!W=!8ZZb<`R]"#fUoCi%j/<3^Wi)qeX/)_nW;[3VP40kUBCc&Vk4%m!XAi3!s8N-$HrMC!!`N)!!/kt!!0P/"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl +_Z99.'E\Z;$315d7jV>d7kWM/RP#Gn,nVkp5cV:h[DV%]PuW2-,dR]2sVWhlDeU84T_UnJX'VPBf^V5L8gTr+K^ +Tq\K]VkTucTW+UcaoMIPi;`kko`4gg!.+/8!5@7h"gZ"G!84RT!!1HAaoLW*!4K'2!57h$_>jSHq>gQ+ +b5g`+!4Me*!S*D0!"HWZU:.b=[^!WsLonD"q7R!CbGj67f9jXmdCfapbGj67f9j+^jLkr+[_8lG[_AlF +Xj`j*]a(g>gV^D3\[:&'rk8`6YKabOgj[e=Z.pJ8UPc!!3-#\G-%E!Wi?'!sSf,'t4AK%KI(E!!!*$!!*'""98N+[fQO5r;ciuk5Z;"]!;;9 +YIX]6$b!SK!5,`D!=8`1!!*$N[a#p])!1!rrE+"p+c8W!3>3!"B)3!!E9%#lt#+"98Q-Vud2%!<3)_!#Gd>VZHpo +X8rA1X/uR,XfM^-#64r.":2pGrW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJC0!$;OJ +!W`9$"98J'"9SW/!!!$"WN)nrWMlbrX-t".!=&?$#6gn'!"/i.!Oi-j!XAn)!!!B.!!0#"pAta-!"/Q!oXJDkm +W2cYpV9/c>!i2XS!!NB'!rr=tp]([(!rrE*"p+c9U]po6$NLV>!!!*$!!*'""98N+U]L_u!<3)_!#G^7 +TE,(_V>pW'US\.oW1sLs#64r.!t!3Po`,3t!!!%q!rrA2!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG$0 +!$;OJ!W`9$"98J#!s8N.!!!$"Uo1#bV50ocW0\J(!=&?$#6pk%!"/i.!Pecj!XAq'!!!B.!!0>+mK*e$ +!=#Ht!X,;'!W\plklM%m!MHBe!"@K]('=UPc!!3-#\G6+G!W`<("ono0(pjJK!!<0J=!4TDH!!!20[fHa9!rr`3^]4N=!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!8\ENts!s8V7\-gde&cr%6!!!'#!!3-$!!!$"!Pc!!<3$WVHN/!W`<)"onl/&u>d7!U:XTGW+Wr]9&X9&G-WN-%(!X&K0"N(6=!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q! +\cDU-*WZPc!!<3$V>1*"!W`<("oni.';5U4!>G\>!!!-'!!!'#!!*-(!<<>%!g&M?YU]UW"!!WJ/!:^%" +!<<<)!W]$o!)4!>M*&!m1NC\`!Mg^%DC'!!&SW!!('s!"$$P!5Q@`!55kVrVutu^!6WA!!'I2!!'_$!5\^9\bZ=+ +\]Y!3!!0:1q>^Q0VsFB`]u'is!!'^>!9*t]XhOi9_#=<7]sQo%!P,nb!:0[cWV?GoLs>o!bl@eH\@CZ$ +"T\T)!!'P(!"/i3!WWK,#.V/C!!<*!%06J2!XAc.!!3-&"TZ";\,ZR6!!NE(!U'LiZF'\;\?l/7 +#I^o@\@)AA!l"^=!<<*#\,l[2!Oi%4!<<0$!4^MYjo?%q!!*'""Ter1\,cU1!b_ +!!35$WTF0a!<<3%!3,_n$N^M6!!`N/WMojt!rW*%!Q'Xf_R)#Hk03WMKS!!l=s:!!`N)!!0&$!!0P/"T\T*!!'"S!8RVg!<<-#!!WK0!N?)#!!**#!3)q! +\cDX.%KQP0"TSN("ot[%!Pc!!<3$V>(#u!X/W*"p"q)U]:Arr;[T6!"!X\o.!=&K&#Qt,-!<<<(!"8Q%"pb4/SI,?#fDl!S!!!*"!!!&j +!;Z[%!^Q,[d3to\\eEo!!'R;!!&u#^8K5Zk5Y[h^o.55Xl9<]h2')O +li7$op]1?)rW(1C!WomAjo>Pc!!3-#\G6+G!WW3/!WW<4\,ZO2!<<3%!WWB(!<<*$#6Y>5!WWN0[fQa6 +!WE'!!pK\$"TSN+"TT=?[/dM@[/mS@!kZ)J!!!?/_#OW>!!!&0!W`9%[f?R4!!3-#\C:N=!"]28#6=l, +\,cU1!J\\-2j6#64i-!!ri2!!!'+ +"Tn`+!!!-&*<6lV\@&pL$+L6@!!<31XTf(3!!NE0!!!'#!rro-!!WM1]`8$7!ndPS$j>kr!!2or#QXo, +\,cR0!#h#Q./&-<"= +!)"TSZ-!!`]0 +!!!'I#6b51!rr<(!<<`5WMQTq#H7q.!!E9/S-B2u!!NH0!!!'#"98l*!!WM!WrN,&"5*YT#mBPo!!2or +#6=f,W;uu!!W!!`N)!!/kt!!0P/"T\T*!!&kX!7:cX +!X/c/!Wf(t!<<-$!!&gj!lG$/!#;F4!!EW/"U1^$!!!H.!WW4rU]LMsmf3ur!!<3%!WW3&!!*0%!!<3% +!!E)urr`3"!s/H&"5En1!!WJ"!V!!*E0li7%d +!Vud$!<<4t!<<*#r;Zm#Unl*4s1.(g!58%*r;Zi&lMppeg&MMF_>q3^]E#CT!6`^9!9aC_[]]Z2^$bs< +!!'S+!<9UQ!9jI``qfZ9XPPc!!3-#\G6++!t?YdFV`)O]",9V!!NK,!WrK,\@DS@ +!#tt=#6Fl*#Q4W)"pb26)uos>]sItU!4W"=!X/S4]=Y?P!!33&!t>D6!b_!!35$WTF0a!<<3%!3,bo!W`?,rW!$)TW/7r!!iW+!<<<(#6Y;D +!"/c,!Xo&0"f84!"U"o3!pBV#!^^&!!!$""9JH$%flb4!!*'%!3!!WJ'! +W26Eu!!_*V!s8N'!WE'!!U9Xb!XA`+"/u;$!!3#u!Wo@#aoDJEUnm,Q"T\T*!!&kk!!30&"o\K(#+_Xs +rW!f;!!*''!!WN3!"/c,!Xo&0"ehgo"p4r2!p9P!!2$"W269p!!NK,!s8T-V54.u!WWu9!!WK)!!`B%+9i#M"onW(WM'M*!2KT&!X/RuVl63k!!<9' +!t#23!k?!!0d8q>^Q,[d3to\\eEo +!!'RB!!K3u_S3,N!;c`s]tWe4!S*qD!!'S-!!B1C`fo]g!j.s*a8kQ,!4MY&s1/+/bl@eH\@CZ$"T\T) +!!'P(!"8l0!!E?3\,ZL4!!!'!!"Ar:!WW3/!!3-+!!iQ*#R.R;!W`9(!WhNc((7RO$Epi<[^cCBZa]uJ +!!0X?#64o1^]4N=!!!&0!W`9%[f?R4!!3-#\C:N?!"o;6!!3-%!s,n4!<<-$!!'O=!jr"1]=7hBrW!H4 +"LtfJ"U+l-!!'O=!WW8i!$euR!W`?*!!`K:[KHR3#lkaM\@8uT%KHM5!!9V1!"/i1!!17Cli74j\,cU1 +!`A!!#/p&G9*]"A.P!SIGR#Qju*rrMKe%06G/!#p](^'!rrH*$)mn)"TSN'rW!'%#Qk&,&IAF=!!WE-!!*;#"9JT("9S\h!#>pCU^=!% +!j/U,WNE9'&ci$4WHtW2]t$!i`.$!!EK+!!3?+!!B4$W2]h&!X8W1!WjYL!rs#= +!!ECsWsAn2"TST*WrrD,"TSh(WMug!!Pc!!<3$V>(#u!s +!!EB)kl;J)URVR^V?*Ql!MH6d!"Ju0V5+:q"U*$Lo`,3t!!!%q!rrA2!!NB'!rr=tjoEj1&ci%6!rrE* +!Mf_s!!**#!2QCl_Z99."/r$r"9&92"U(Zq$3^S5!WW4rU]LMsmf4T.!!<6'"98W+%AEt*!XA];Unsl` +TaLi$"TSV"!<!W2'Wq +!!WK.!"&W+,Qe#]"TSW,SZ)o"!X8W+!iQ2$"U4r4TqnN\"9AN/"T\c2!!;io"f/&p":"t\!!*9*rW)s! +nGrLf$ip>.!@A]_qgC!WW3%!<<*'!WW6-"TSf.!#bh@!55fG"Td]b"hD#@Zag/:!"HTIY5eP'!!<<' +%KHM5_#OW>!!!&0!W`9%[f?R4!!3-#\C:N&.%06C>-+!gW!!!?+!!NZ/#R(;1$N^O>]!N7R!"8o0!s/K'!rr<:[(#p](L!"9Ju3WN?$u#m1/-!W`9$"p4i8!=&c.#64`Xoto1"p"f,Y-"Z*!#h#Q+.%gE+;!!0&"!<<-$!!'!t!kJC/!#;I:!!WQ0!ir.6 +!!E97!rr>#W<*&#n,Og=W<32'#6Fu-"K)5$!!<3%"9\e*W;lu*!<<3&!N?2'#64c)"98VW!94%`!N?)# +!!*,H!%.pM"pG#-$37*+X/,t$!!!9)!!NT-#6k;2#Qb4,X/-F/!!r]-"9KnN!!E9%&>cG,V#UK(!!#4!!!-*"9nT$#7(;ht!!<3%!s8V$U]:H%!<<3&!Mol"#64c)!rrM_!87DW +!Mf_s!!*,H!$2=E"U4u-$37$&W1a@r!!!9)!!NT-"pG)/#m(=)W%XhW!!!?-!'$ +!!#3!!!*)!s\Q$#7(;;T`>E%"PEbU"p=2lq#C[$!<<4t!<<*#r;Zm#Unl*4 +s1.(g!58%*!rr>7dHLW3go995"PCZnZd8RM!p%"ib5g`+!4K'2!57h$_>jSHq>gQ+b5gc,!3c8"!Q(T, +!!0X=li7$oq#CDop](?/\bQ4*^>K"^Sf_P6W%".d?DSb` +#Qk1m!#>aBZ3%>6"Tf>;ZEgkA[^?nQ!so/5#J^%JKi-!XA].!W`9&f)PgP!p0Ih +!W`9&\,cR0!!!E9(!c&!!NB'!WW51pAb@!!"K@@!r`0# +!W`3#%KZV1%^WdY!!!**!#Pe>"onq9&chtb_!!35$WTF0a!<<3% +!3,\m"U"f5#bV;!!!*-$rW*0)!!!D%WXl-1!!EK+&d/79#,Me1!!hZe(C$e;#Hb'9Wh^3/!%!b=!2lNiSYZ;f$PEFA"p"](Une%l!Up(:!Mfc!!sf)8!2TYr!-k!"&fBOJi-Z!hrVuuF^!6WA +!!'I2!!'_$!5\^9\bZ=+\]Y!9!!L'+gQB5E!!0X=li7$oq>^N#pAb6/[eKh&Xl09,!!'RL!!-0HnGr4^ +"/ahT^%hX/^V0RG#edprX8o5j^ruNR!gq5tZiKFm!4MY&s1/+/bl@eH\@CZ$"T\T)!!'P(!!iW+&-05O +!Wi]-!!!&u!"?NF#QOk9]=7nM!!`K0!!g$@('"U@!U'M!\$H(@Z2h>@!3uk1"1#98]!MV@#64e@!!NB' +!!0S2!<J!!*'(Z+ROK!!**?%KO#M[C?2<[LBOQ]Dr!5!!*-& +\@B/V'*/I@%/9f,!WWB*"TSVT!!**%jo>\h!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3%!3,_n#Qau7 +!3*"$!XJ])!!3#u"08("!"f42Wi6%*!!N?&"f\:/!!WH)kl;M&XfVW,X95W-"0De0"K\^,X/#q""TSSA +!<)s'!<<*#W<3,$[f?R4!!<3$WSIR1!!!&u!"K25"9GJ&!<<-$!!'!t!kJC/!#5V=!s&E*!!3?)!!WQ, +"TSP%W<*&#mf4'#!!*'&"9YX&!P!l70"p(M#!<<-$ +ci==Q!WW4oWhf_"rW*Z4"on`/#QOo,!-!!WN*"Tei-!nI>P!=^a2Y=Z!!0X-irBD/]E#:?!5lSPZ2O_+Xh=_OVU5D-!!'I2!!'_$!5\^9\bZ=+\]Y!* +!!0X=li7%!qZ$Z#^%VL-TZ6a,!N*co!71]G\]4[OVr+lO!;$6mQcHi=!!8;/XSVu)[)])X!!&qtR'4d2 +!!BdBc',O8li7$op]1?)rW(:Fr;d28\,l^6!=/Z/m/R:j!!3-#\FonA!Woj<$NL84"98i3!!'U@!<<*$ +\@;M=!s/H@e7\H)[7!TsFt!<<9'!i?!OMju!!KgA!WW8i!"?@7Z!WW<& +":,&/'!2E?!!17Cli74j\,cU1!>7!Wi?'nGj.%"9JW)$+'j<\@B)W +!!WQ,!!rW?Ye'l=!!9Y2r;[W9!!!$""U2EG])`HC!!`K-!s&Q,!WWS4!!iT*!k872!!**!!!353\BP$P +!=5a*!WiK*#64tq!!NB'!rr>#p&G^,!iVq$!!EH.!!r`-!3<("!!!3)WMojt"9SQ&"p(^&!<<<)kPuA! +"T\i/"Ttm/#-G&0"g+j+WML7.#Q_gCrW!0(!!!&!!rrA2!!NB'!rr>#h#Q72&ci"5!!E9+!!&u&!!`K) +!V-!!3-$!WrK,!">p"%0?M4!!EK-!"PM(!<? +!rr<0TEbGu!!*-'!WrE2WLF=u!!<3("p+c6R0EZl!Smb0!!WJ"!u +":>,2!WW>m!#kqA!WrE-TEPFnV5Bse"p=r,!"b^"!!N?(U]LDo(BXX;!<<9,V51!i$ig83!!NH*"Tni, +#eC$2!!`N)"/Gqt!!3#u!Wo0naT)@Z[c%2d^%D@,!3N!i!!1!Or;Zl,YPA/!]tW;&$d,XQb-Se^]WD1E +W6kV/!!'I2!!'_$!5\^9YPJ5"[_p8gfDkr_[d3to^&%d0QhCC[f73Mp!.*W)ci='Va8c:PW3>[jnc/l\ +!!'49^7b<&!J/Mo!!'_*!!9F=bI%?:!!'J&!<9V/!71]M"TeZ*\?cYD!!E`2!WWAl!!NB'!WW51q#CU# +!!3-*]=@h@!=/`)!"L$T%0-P8!k>fA!s&H,#R1;0]=J+F#3Pt&!X/i0#64b0ZiI;8\??#8!k>oD$N^Y; +_#OW>!!!&0!W`9%[f?R4!!3-#\C:N?!!!*!!"]A?!P/74%0-A/%C2!:p0n\@;S?!Up(9!Or15 +!#>R?]`J06$ip>0!!""GY:KYR"Tei0!"9#2]!qtJ!!<8H!:0[i!Or.2!!*,Q!#G_;!!30'!!if0!PGlP +!!WW0!ZD%E!XS8q&-Dn9"99A@!5#YM!X8Y7\@W%K!#GV8!<<22!W#q#CU#!!<3)X/Z(!!=&Z( +!!O.4$3187%g/f2!!E<)"pY//Wi?1%#3Pt&":#/4"p+h,XT>B&Xf)I*"0&@%#Qk>8_uTc:#6=f)!N?/$ +!Oi%4!<<3%!3+cSg].^Mn +[/fOn!4MY&s1/+/d/X[`!!!<-Z+m]V]=k9r!!*>n!!NB'!WW51pAbd/!s5p@!!E?'#Qau8#-b`?&H2Y7 +]=7hC!!!'$"TSP3\,ZQk!#DlG#-P94[BKqE!jAp9!!9X>!=Jl-$Gc]G!<<*#\,l[2!Oi%4!<<0$!4^MY +irBbp"9SZ*#Ia[XX1c-R[D/sK#ljr3[/fdu"LtrC!!2Qh)ZmMM!!!'(\?uG>!WW6'!sJZ+\@V_L"UP5: +#Q4W,[CZD>!!!&E!:0[i!Or.2!!*,P!!6!!E<(\%B$JrW*-3"TeZ-YlG%1!!9Y2!!!$"rW!!$\@Bfa +%gN(7#6^^%V5^MsRNMS2"n)Ep!<<3%!3,\m'*\RAV5XFt!WWH-!"&q'WrNP.!"K"/VuQr#!!30$!2ujs +!Tj@u"0JX2VQL''W=,j5Vl^:-"/r1"#QOi1_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSg&Mfh"9\`+"fMD? +RB*?cV6-Bn#64`/^&[Eu"KA@%!!2Qh)[!&?!!!*)WMK^t!WW6("9ec,W2]h("U>)6"oSE*V5jRs!!!&N +!94%`!N?)#!!*,P!!5P=#Qk(+WMQEq!!iQ0 +!rrD$!W<1_>on4rVuu#YL*@6!!'I2!!'_$!5\^BX8i6;f?:.dk)7C_fDkr_[d3to +[/9n)YFtUi!PQMH!!/b!!0U:$4Qt8!XAr9!4o]F"on_f +!#E/M!4fK;!<<,0!4]E:"9JW/!<<0(!Pna>!<<*#\,l[2!Oi%4!<<0$!4^MYjo>A_rW!Q6!rrB']*/0? +!!3E0Z+CAD!<]\/o)Jp'\,lX2n,NIj\GcIB"TZ.7!X/Q2!!EE)#QVBE%CisT%K6>6$3122ZipF3!!:CF +li74j\,cU1!#."98Z,!3E.,!%-W5JE!!EP+W;m,'!!!-%!rrD$!W(!!WE)"pLQq#lju.`W4rt"Jhgp +!!2Qh!$!!<3'hZ2@1"p(M#!<<-$fDl]l"98T* +!"Aq(V#^`"!=Sr3!!<6&%0-h,!#l"?!rrB,$ipA2%0-J8Uo"+r!<<*&!!<3&U]LDo((-k4VZ6o'$N^;1 +"JD]lVZZu#!f1r +g84kt_YjH:blH#'bQ-i,!4K'2!57h$_>jSUq>^PWbKBnl7# +!!'RQ!!048li?;N!O'63!!'_0!!97$_"ds4Q-IUi])_0t!4MY&s1/+/ci=O]#QXq;\,l[5!sAW)!!Vfk +"T\T)!!'P)!#P_:!!NA5\,ud4!rrl4"1YiB!!`Q+[^lYA!!3`4!!`K(\[MPB#6F#g(CR7R!4&m1#64h2 +"g>6AZEs`9!Y>>3"Mk'A!<<*#\,l[2!Oi%4!<<0$!4^MYjo?.t!!3-%!!3E+\GuU4!!!*&\@V_A#RId; +o)Jp'\,lX2mf3?trW4,@\@;S?!WW9'!!E9&&\,<[!!3/4!!N?'!!*23\-)^1!!1@Fli74j\,cU1!bb!!`]5!S8!WW<&!sSb)!!!-%!!ED'WW3&)#/($%!!K:#!WW8i!$\BD +!WrG%W<*&$!!36&"98H3WMlcr!s#>$"TSQ'!3!!WJ'!l]!!368' +"g@t3!<<5$!<<*#r;Zm#WN",B%L*+1*"!<<*'!2ZIn!rrE'$k!%; +Une(m"p+h#VZm&"!"Jl,"f8!p"U5"k!#H!3VuWTf!X8]/UBR?t!!*9.`W4rt"Jhgp!!2Ng,,>8A!s#-m!WW9%!WrE* +!!*P)Unn%n!2ol$!!*'#"/M^prVup!huMI2"p(M#!<<-$ec5p`!!NH0V5L*f!XT&2!!<34!!rZ6n,OC- +"p=o:!4s1S=1!NF!3!!0g8irB44fDr1[r;[&,!1LP#];EmSkPtUkY5eR9 +mf:3)!5A:0!Og"k!8%8P\[Li)!4Mh+!Of3*!!9@+^&A!3`qfZ9[_:`%ci='VbQ%^L_l;u&mf3EPW6Oo6 +!584/!R8[Z!!.DcrVur8^B!U#!4MY&s1/+/d/XXc!!*E.\@;nH!!!3-.\@;SI!<iI!<<3%!k>`?!s-UGli74j\,cU1!":G29!$)%?!kGqQ[/^Z@ +!!iT*!k872!!**!!!353\BY'a$31)4!i`.)!!**#"9o"s!!NB'!rr>#pAbj1"9Y['"9AQ.!!EN,WhTau +!!!`N)!!0&$!!0P/ +"T\T*!!'"S!8@Jg"9AZ,!s&G$#R(2.!rrV+W<*>+!"-F?l2UsdW<*&#n,NLjW<)tu+02@A!rrB&"pk82 +(R_;&"TT&7WN$+&!!E9'W2Tb"!S%21!!WJ'!H2*rW!C"#6Y+u!!iT. +!!WN/!N_q,X/_uu!WW3)!<<*$#6Fo+!iQ.u!#GYB!!!$-W;uu%#QP)0('"@:WN)qn!",t2#6=f,W;uu! +!W9!=/b&U^7#%!<<3*"RZ6n!<<3%!2]Di$3gV8W2'Lr!X/Q,%0cg1TEYAs"p(Wt!!EH( +!!r`6!huUp!!WE(kl;M#VPOZqVPBsk!i#`#!s>3o!!3-#$O-^X!;-P8!iDolT`>G2!;HO!!<<4t!<<*#r;Zm#Unl*4 +!OfPt!!'_*!!3/?\bQ4+^m4ft!QVnK!!0%CirBD$^&YUYZ+^2k!!NB'!WW51q#DH:!X/Q6 +VnE97!W`c4"pDEJ!!!T2#eRMT!4=E^!!ii1!P>WU!<<-$kl;J$[]9D6[BI(?%C-6>!X5m<#eIGM!=cgE +"T\T'!Or13!!0P/"T\T)!!'OY!9O7s!W`9$"9J`,!4W"5!s8T+!4]W@!!WP4!:p0n\@;S?!Ug"7\Gu[2 +!4]N>!WrE.!!WE0!4o]B!!`K9\@;S?!WW9&\@;S?!!CIGli74j\,cU1!.#nd=?!s8c.!k8:0!#GqA"p54?[($PF#ljrD!"Ao0!k#YM +\,ii7#QXo,\,cR0!gBU]IR!WN?13XU>.6#d'p.Wi$(&$GulC!!`N)!!0&$ +!!0P/"T\T*!!'"S!8RVj!W`9$"9J`,!3#r&"9\f/!3*"!!!WS>!9sOeWMoq!!Ug"7W;lu"!3)pu!X&K. +!!WE.!3<(#!!N?3W2Tk!!WW9&WMoq!!!LjQirB8aW4-V5Xe%#64`jSLq>^Q0c-$+>!!0X=li7%"r;Zl,Z1e5!_nQ$K!PPc8!!0O=j8dO,!4g;R!4;V'#FiE)!!(9\ +XS;ef!!&Ab!!1EEnGiR&pAb8mS$DYe"/jDP\\\@5!!'J&!<9V/!7:cV!s/Q)!kP`E!<<0&!!*5j!!NB' +!WW51p&H$8!>VmA!WW3)!!!;7\,Z[4%(3SG!4i44"Te`1!s,n?!!rW,jo?,-!X8Y7Ylt-6!4fK;[^uRO +\$u_E$c)fH!<<*#\,l[2!Oi%4!<<0$!4^MYjT$%t!!3-#"p+h9"TSQ*!<`ArW!K1!sJZ.!55`>!!*<,YIar=rW!*&\@;M>!R(Q1!!WJ6!V:!"/c/]",bc!"K,6"98P(UB^f"!s8N("RZ6n!<<3%!3,Yl&d8:HU&tJt +!!WE'#-"R%"TSk*&?,[1WWN8+!s/T+W"V5=6iVu`flU^$l+blID:#6=f)!Mfet!Oi%4!<<3% +!2\fXdf:$_!!3-#"p+h%"TSQ*!<<=sVZQqu"31E#!!K*n!WW8j!!iY&!!<3'V54:n!"]/5"TS]+WM':l +!l70"p(M#!<<-$fDl]i"Tnl0!!WE'!WWE)"/Mh!!,\H)C)#6=f,U]CGq!W!58(+!lMaco`+un_#Wg%!4MY&s1/+/i;a&b!<<*(!!iK'"Tn`.!h?!"K"7Z3@>?!4&r=!!`K*]=8%H +"2Os@!<<*#\,l[2!Oi%4!<<0$!4^MYh>doa\,cU1!!d`_!<<*(!!W?%"U"f/!#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!$qZF!WrE*WMoju!!!3' +!XA]3W2U"%#lk@5Vucr!!<q#!!39+!XJn,WWW;)!=,I""9\].!!3B*"UY59!!E?'"pM!*XJH1,!<>:` +!rrH(!bPM8?Oh]]P#ckQ;LsZ4- +\\S.D!QMRs!9aC_[]]Z2^$bsr_#+05TWS"ipAb<&YLT32!!9%C[e9\%c)J&Mli7$op]1?)rW(mW%fu_8!WW3'!c&!!NB'!WW51pAc06!!i\7\,Z^5!!N?8!"HEE\d/9=\@V_E!!!$"!sH9G!os=t!j0/GW!9c7 +!P#E@#IUi=!XJk;\,Za8_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!3])Vg?!sl3E!X&W-!!*,1\,lX1!mL`3!&O_d!kN!WE-,!6&-rI?#QOiY\%8pM +!!`]1!<<3&!WWH*!oX+["TeT&rrMKerW*?-!s&B'\,cR0!e&f!!WK)!!E<+!s8`."oni* +!!35$WTF0a!<<3%!3,\m'*/(;"Ji!s"onW,!"Ju9W2-Hu!"9"/WW32&!!*'&XJc6^!#Gg9XfJ'"Xf2K+ +XTo39X98S0!i`.!"TlUBrW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8i +!%"TE!s&D$W<3,&!!!'#!X5F$!!!?/#,8.""9\f,!?Yp"TeQ(,67uaQNmNq!"B#2$jHn9"onWMUo0mi +!!WW0!<<3&!rrN*"5s4\"TeT&rrMWir;cft#m(20!!B"t!!!&u!!34tUr`W:\`!Mg^%D@-!!&q%p](As +VS`<4!PQbS!!1KKiW'FPf"Q8,cCt<`Y5eR>Xo/5#]t)SlkPtUkY5eR9mf:3)!4hq+s1-;QfDkr_[d3to +^&7s2[.jV%T[!B7!Kt_(!!0O=j8dO,!4gJW!m@O[m/R1=YPeIq!!:HVXmH)jWS`B9p&G)2nc/`n^mi:C +li7$op]1?)rW(mW%KQV5!"0)7":#)1"UP/6qu?d"\@CZ$"T\T)!!'P)!$21D!<<*#)mBSJ#m(S:!"8i7 +"p+rC!"T)8!<d!!KU:Xgkt@!"QE>ZN.Adoa\,cU1!fA!!N?=] +!!*'"!k>`?"3U]2!+>o,/$igJ6"9]#2$31,-rW33&!Wi?5$Nq@L#6P%< +Z+C8C!r`0H"98K(!!!i;"U+r-"TSN(!"Ar1"Teb8]X7qF"p5);!!EH*!!`Ya!!**%jo>\h!<<22!<<*# +!<)s"!k>bs!"K#2"98]4!X&Z2!!WZ."oJ?%!i`0]!!NB'!rr>#q#D-3"9AK&!>M12!!`Q5!!!<*#R1>7 +%hSdM!#-%B6D,WW<5&"pFu0#QOi2!!`E*":"o4!!3i7!s/Q)!WrE2";Cn@"9PQq +Ws/Y.rW"8J!!30$!"oA<"TeZ.!!!*$$3:54!X#F'V$7#+"9f&2"9ni+"U*]_!#3qu?d"Unm,Q"T\T*!!&kk!"8r3!<<*#'qGO/#6G8O!!!?+#R1>6 +&-*(="p"]4!=&V#!rr<'!s&Ge!#ME.S>W=e!WiD"Stc@_UB:K("98Q.!!:CFo`,3t!!!%q!rrA2!!NB' +!rr=tjoEU*$N[%(!<<-$!!&gj!lG#s!!K*n!WW8j!$hT@!!*'"W2'Cr!!!-(#mLI,VZ6]#!"u3'!rr<% +!!!(rV#UVR!87ES!Mf_s!!**#"p"f-!rrN*"98N($ipP4!!Ei8"/MZhVZHi/W2Q9h!!WE=$31D8#G%]e +!!WE)!rrB($3LJ5!rrB,"onW4Uo1#d!<`B,"onc3!!!?+*$4-_6!XJi-$i9o*!k>c&!!NB'!WW51p])<9#lju9!55`B +"pFu3!!!H2!doa\,cU1!!<<6&!!*-$]!VbC +"Te\6"o\Q-!!*-'\@;Y?!!!&F!:0\3!Or.2!!**#!"Ao."9f&2!!309!!p*E[(E[N!4]VN\,Zp;Z+BqE +(]juP\@T2[!"$(8#lt)-!s&B'#QOr.!Wi9#('Od?!k>bO\cMj9":kJ4!P>kO#QP55rW!96!W`N+!<`H( +#65\C&@f7R!!3G9"U2C=!!*-'!!E`5!!9U?#6=i(!Y,52!WW`2!kGhM])W6>!r`0&!s/T+"5s4\#6Nrd +#lt&,!k872!!**!!!353\D.&l#R:>8#6=i,"p4i2qZ$[!WN#"["T\T*!!'"n!#,J>!!*H-XJH%("TS]+ +!"&i0!=Sr8#lju0"on`*#,nU%!!36&!U'M"Xf`#1X8rY/#H4f."K\a,!iW""#R(86_uTc:#6=f)!N?/$ +!Oi%4!<<3%!3+cSeGosXW=l+"9AK)#64l.!s/B$('Og@!i`,uWWN5*":P81!NN,u"ono0rVus*!]C&_!!*3(!!N?& +%&p3/!!3A("U:q/!!*0)!!EW3!!B.!"T\T*!WrH'!rr`0!i`/tWW3>*!r`0&"9J],"Q9=]"U!fc!!*<* +!!B2$!!!&u!!35$WS@I]#R187#6=i,"p4i3qZ$[!Unm,Q"T\T*!!&kj!"/i5!!*H-WM'G!"TT2?!!!?/ +!:!Wi?/!W`<(!<EDWO;d.Yd+61!"/h;])huA\\J1K!<<*#\,l[2!Oi%4!<<0$!4^MYh>doa +\,cU1!#6Fl,\\#5Z!s\l:!#>P7"T\c-!<<*$!WY"oZ+@@K!Xf%@!4TJM"TS`, +!<<-,!=5sDZiCaA!!3-+#Qk)/#QhEH"p,&2!!rl2!WrS_!!*?,rW)s!m/RRr!!!$$!<<22!<<*#!<)s" +!k>br!!39'"o\K-"pb23!=f)3"T8<%!i`0]!!NB'!rr>#q#C[%!!!34!!!/$rW!6+"p4o,#Qk).";(Y7 +$N^;6!"8k0!!!''!!E9'kl;L$XTtr0&"fs)#-"^-"p,88WN-+$W2[Z7rW!0(!!!&!!rrA2!!NB'!rr># +h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!*,"rW")G!3-##"TeZ-!!!2$W!*2%#-4C,!<<*'"98P# +"onc+"4dJ4!+5i,!3!!9.#UT"A"!X\o=!!!3c!palU]LW!$3?s$!s#-nbQ.;9#6=f)!Mfet!Oi%4 +!<<3%!2\fXbQ&"OU]CJr!&SIGT" +!!NH)"/,ku!rrG\!87ES!Mf_s!!**#!s/Q/!WWA$USjr_"p1NrVkopq!"9#2"Tn`1"TYHr"oo")Uo9sk +!s8N1!!E?-":5>6"pCWu"TSW0!!!0)"p4k(V#Ul'"p+c+VPp/a70<_q$31YT*!!3-)"p4l."p1Kt"p+u0!!`]/!WrS_!!*9*rW)s!nGrLf$ip>. +!XKDF$!Q'up!!&bR!71]G\b#k0^T##RVuQgr^;.ID +p&G-/YPnM(TXN1;nc/]gch7>@cFs8Yqu?i5c'Q04!!8(oW;Q]!b5eWP`qKH7Ok#ik!!0"F`W5?*!4MY& +s1/+/i;aAj!doa\,cU1!6[/g@.!#PbC!!Kn8! +!!!&E!:0]"!Or.2!!**#!!3-##Qb(;\[]/V%0-P5!<=&="Tef3!!EH*#Qt24!WiH/!snu1!rr?,$3^D2 +#QOi/!55tO!!3-##Qau3!!!B,!WomE!XT#4\@AsO!W`<%%KHY6"TSN+$N^S8#QQ`l]stKN"Tet:$N[oH +\,u^4#6Fr1!!!k>]Xe(C!WW3%!!33%!XJu1"UM@>!!*'/!!33%"lTF`!WW3$rVup!l2V+l!<<22!<<*# +!<)s"!k>bs!"T25!<Pc!!<3$WV6B+#64`*&cnZ+!!!6*!"9&5"98c/ +&-W7<#6Y&-"KS@"#ljr+!!29`(9OPCWN??,W'V#^Ys!#PbA!!K;(!Pc!!<3$V=srs#64`*&cnQ$!!!3@!WWT4 +!X&K1!!NN+#6Ou,"/qpp$31&,!!29`(8d`/TVM[gTEG@rUB1E/!<]3pVZ#U&b>p!#PbA!!K5&!jSHq>gQ+b5g/p!P,Z*!!'5#!!0?tp](<6rVuts^\Ij1TZuKsci='VoDf$$^:h4IfDl!' +a.W#(!3ZCIr;Zo&Z)R-k"16OjW;Q]"V>pV@Q+?Vh!dr>3nGiQMaT1Z-!4MY&s1/+/i;aAl!=K,4&[)<; +!J!!NB("TSr0!'pYe!=Af,!sel,"TS]+!!3`4!!*-$!WWB6!!E?,!!*-)!X?'<":"r/!X/T+ +!=Sr0$igI@[(NUG!k8O?!,Q[uH"U"l6[(Hp"9ef. +!sSc.!=8`.#lk..Uo^0k"/uM0!e&i!=8r1 +%@[J#!!Uo+=q"oo/8!"&f.VkaM"!!<8Z!87Df +!Mf_s!!**#!2ZWmS-'0""T\W-!"&W)4ot`c#QOi,"onW,!!N?&!t>51!!W`9) +"9Sq'Vk=,#!sJ`,"pG#-"onW2!!o9tTaV,*"p4i-"Q9=]$3]\q!<gQ+i;`kko`4mi!2Ai\!2eHM&]23]!2d@.!3!U3YHOo*a,e*g!9aC_[]]Z2^$bs_tO-3_l_r!ci='Vq>^W&`l<\Z!!0!]nc/Zn"fBV!!!':j!!0%#qZ$fE +!!&D([eBb'U;3&a!!8_AS]_$"!!'J&!<9V/!8mhe!WW3+!5#bO]"#>]!W`B$!!353\E3bp!<<0$!4__& +!!W?%(BjgA\HDm5":"u.!W`?(#R(5/!!iY9":,&1!!30$!<!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!p%Kc\2"ot^'WN3#!W<3/&r;Zm#WN#"["T\T*!!'"l +!!!3%!"K/5"K;M(!<`Q-!!30'!YGV?!<<*)"/uD*!rrE(!!*'#kl:kg!s&T-!WK2,XK;O)#-+d*#5nN& +XJs,#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8i!$eHF!!3-#$_mq- +!!!]9"onc,!sS`*$3C2."U>&2%%IP'!!1RLirBhqWU2!c +!!!?.!WW9'#6k/3!s&Q0!!j!!WE(!!*9(Ta1VuVka=n"98W0!!<<'$31G6!!*9)!!!*&!rrQ+!s8P%SYr4k!XA]0 +!!D0[!s&B%!r`0"!V-6h!"8l.!!*-%!!B"t!!!&u!!34tUt>YOc*+k!Z,&^#T.qc\p&IbQ-u0!4MY&s1/+/i;aYp!!iW+#I_7P +]XGER!!*'#!!!'+\@2J&!=&T)!s/T*!4q\$#ljr2ZiU=9!!NH$!!WH(!Xl@:!WiW/!oj:t[''kB[0WtA +Ydgt>!s#a8!$VCE!W]^>_#X]B!rr>4!e>m!!WN*"f85qXJMp!!!*'#!!!'* +WMfg]!=&T)"9Sc,!35Pi#ljr0U]LZ(!!NK'!"/c,!<<0,U]LT&!WqB_(TjYGWiZW-Xf8G("U>+2XT07> +!s/J$W5J`9!=&`1!!'#"!W]b3#64`,!sAT(Wo4!W!:p0n!WW?'!quZp"8)Ws!LG,m+,M!!*-$!!iQ)!Se>m!!WN*#,8#iW1p0l!!*'#!!!')V5++U!=&T) +!s8Z+!2o>f"98E+T`P?!#64o0qZ$p'!!3J#!WiQ-!oj:tUnA'gV?`ciTVnLd"9GBq!#bh>!W]$lblRJ< +#6Y,/!2fi!!4`+8!!!*'"98G"joPA\mf3Il!!<3&pAb0qo`,*q!('=a@!"oni-!<`E-!""TSQ,!s/f2!<<3%!!WT,"pG#0!sSi-"p"i- +!rrN*#6G=/Ta:`"!s&T-!^MmnGiQVh>dnrU]@C/!1g`o +c)psF!Pc;E!!017ec=n6!5G];!5It&_>jS@q>^Pt]upE.!!1-*li7%"qZ$Yu^[(q$VT.Tqci=B8!!'^M +!!'I4R(WJ%!4K/"mf3ESbJ!WM!3P&W!NDg;!:0[c[eKh'[_;Y?huF8r!!`Q*]`86:"9Au5#lk&*!!9U= +#3Z$k"U+l+"Tu7(!#>V9!&"ES!W`?&!!*-&!Z2bX?\uW-HZN@PB#QV^Kr +rVup"p](g.!!!$"!X8Z*!k872!!*'(]=>P^]bd>UTLZ$"K\a2!2ZXs#64hD!;lg# +$j*4)#QqR:"pG/1!!WS)h#R*J!W`B(rVup"p&G7"!!!$"!r2g'!iQ))"p4i2#,nBs!!!)7!:0[r"TYC# +S#`TgW$VKE#64r4p])Y?!WrH."pP..!<<6)"q:P4!<`B-"TSN*!b_:"p+hi!#G\:"TeZ+!rr<&"9S`+!!30&!<<-/!!_rn +&-2eJ!!*9*!B$ +\,Z^:"TSN+"/P&Zli7(f!s/B$!!;io"U+l+!<<2s!"&e'!!ic2!!ie)UAY&l!lk<$!"T86TrOHXW2-49 +!!!3'"pXi&-D^bG!=&f5!i,hs"9Sf:!!!$%!!WT,!!E<(!!`M!"p4o,!!<3%huNke; +"p+fG!<<*&!"&`5!^KrrVup"q>_?4!!N?& +!<<0*!<<4t!<<*#!2lZmTr=Xff`2$&o)Jfi^#8qkXRuS4!!KpI!5GT6!"7M5[a)2Z^;U'PW4p[[kPtUM +Y5eR(mf:3)!3Q(t!PPGT!8%8UU>^+;_Q9m0!!';#!!'4h!!'"W!71]KgQfOoVRQWm!!B[7WP/$+!5870 +!P,T3!!8PBYO2Ak^:hknli7$oqu?oDZ.#VqUAb/N!#>eL!<`M.%KHP2!!39'!WW3(#6M?F!;QZc!XAi. +!!NK*!4hS##lt)-!"K#0!W`<#!=/Z*!rrN*!!NB'!T=(qYdshCZNpO=X1P[A[fEhA!!9dC!!!2+>YnI?BrW36,!W``1!r2gC!k844!!NB'&%B+M#6=u.!=Jl8!XJc0%fcS4!!fsA$N^M6!!*,I!!33% +!Z_=D!!33&$ipM3"onW(!WWc3!4W@I[("ono4!!3E+!WWK+'">LT!X&`6!!!0*!"&o2\c)Rq"9Jb9]!MVA!!N?+!X&K5Ydh.J +!WW9&!so,2!Wi?2!!*'"$+RUS)#smC!WWK3"T\Z3!!!'(&[]'Z\,mJV!!X#6!"&o3!"&f.!!3-#"o\K( +!rr<&pAb6q!!3'!$3C5/!!9Y2!!!$-"p"c+!55iEh>e;p$NUA5SdPN"!<<3)!!<3$"U,"+WW;hqnH&pu +!!!3+!!'"f!XSl/!!!B-!!30$rW*?+!!E9+!!!0'!<_<_(94MbH!<`Lo$NL5/!!pT" +bQ@G=#7(A2!N?&"!4`.9"98E*"98G!joYG^n,W[m!C +\cW3D!<<**"TS]0!<<,0]&s%t#6Fl*%Lff7!#,\="U"f*"Te`+!<<*#!!!-'"pk80!T="p['BeAZEgq> +!s#j=Z3UF1!Xl9?(]_(R^]4K>!uIpJ!!]n4"pY20!"KFGe,]CH"T\T(!< +])Vs>!!E<&#R1A2]=8.I"TSu8!<<*&!s/K.#m(bC\@'#W!WWB(&-)_6!!!&2\HW&D]=>8\!/!k872!!*''!!ii2[(>)o!!`E&&d&NB"9o&2!!!3, +!!NN,!!'!uk5Y\i!WW3.$)R(j$O-S8"98E*!s/K(!!rW+!!!-'"pY,/i;`q]XT\U)&-<(;XfSW1!s/Q1 +TVN2#WMIH4r;[!(";7%0#.FR:"TeZ($ONZc!:p0o!<<-$!!2ip!W`9%rVup!q#Cp/U];#1!!`Q*Wi5su +!\;!=Af-!!N?-"9\o2 +"98H)"K8<#Wpg!"!!!iZ:!<<5$!<<*#!!!3.!MujR!!!6&!"oAAVum5.!<<*("TS]0!<<+r +Vrn$a"p+c)$OWWs!!3?)"VLq?rUBL]"!stNl'*+l& +blIA9"Tni>OphQ(!!WW/!!!B6U?2I@!!NB'!2!s8Z+!!WW- +":G;3!3!!BF&g7n9@%EH0_!3seZTZ[<8S[lH"!:0[c[eKh'U;Qs1 +huFJm!s&Q+Z3InG\@N4O"onW*!!*88\G-'o!XA]+!=Jo."M4+)#lt22!WW9&!s/N%!!!'!!WW9"!oO+a +[]0>5\[&UA!"H[06U;"9J]+ +!g&!j&Q, +Xo8>1XfeW,!=&T,Xf):$Wi@!#6Y#0!!iT#!XA]+#64i1 +!Wi)u!W]5)qZ$f!WWiJ("MFg%!"T86WM^"+!rrQ.!<`T3!!;oq(T@B;!s&T,#65:2"p+u3!X&K(!<`B& +!r`0,!iZA*#m(),!W`AR!;ca@"p"l.!<<*%!!WH-!!'"!U^.('VlQTn!N?/%!"/c-!!WH,rVup!kl;M$ +"UG/0!=Jl-#m(>3!!iW+!MHQkWMopf!!3?*"TAB-!=&]."98l4WMhVKWWiG'#6=f)"9\c,"U>#2W;m&$ +"Tei3Trb9p"98E,#64f,!33"$!Ws&8!sA`-"9J`*!&k#^!!*2$W!!;)$N^;3!!B:#Wi,n)WMok#!!*A$ +XJc+%"9nl,!k!3OYR^&A!5^!ESR!!VDb!!'gJec=n6!7@tM!5S%'_>jSZq>^Q)`leA7!!0I+li7%! +p](;en,NHqhZ2C2$bjKT!!'p9cDLXB[)i:NOli.<[da@f!!Bp9VoJ9-!4hq+!f57KpAb66^$Pe#[&j$& +#K!RX]`8&GYP\A%VU;O3!:0[c[eKh'OjX..i;aYt!XJi.!55c?"<@KN*!-qJ!!07.!X0.:[C$>KY.,(M])iPM]tj[P"98T+\,`u< +#6Ou,"98K/\'tEW!!`N)"TSZ*!2#6GM>&HDn5!WgXJ!X/Q(*sE#R#Qb/0!"66I +]!]-M"p>)2"Tet@!"]54!"&o1!r`3$!WhNc('+L;!"Ao.$4d+>[(hs?#m(/.!!3T0!sAf8!!iQ,)$1?L#lk,=!!3E,":"o,"U"f4 +!!!9/!!*<)!55nO!>5CD\@nsF$NL2.!Xnu-)$dO[Zml(Z#QOr.#mLA0!sJc1!&.!k872!!*E1!,4 +"Teq/!"8u1!!ic/!r`3$!s.Wd('+OQ'n,NLo!!<-#$3L;0!Yb\>!3)ru +:oOEt!<<-#"TSW,!"&],!>;")#6P#-!!E(h#G@n&TVhi"TW-09o`,*t!!ND"[K$O7!<<6&!X>I_!:0[j!<<9' +"98H'q#CU#!WW3)!!`2u%Lem5!!N`2!#1ir!W`<*`W4uu$j*<&!rr<%!WW9'!!;lp!X#5!rW!H0!!`K( +';6ZQ!!`Q+$NL5,!"B#1!2Tl$%0I%>!rrE(hZ33I+p@rH"UP88!X/Q($)4ArU8S%r"9el2!X>P&$j-J0 +#R181rW*$%!U0S"!]p!t,2"!!3?)!r`3$!s)O*!Ykb@!2QHiV#UW!!!*'' +!!<<'$31)-&tAq,!s/H&!t##1"9o,3"on`=!Xo&6!!N`1!X8Z."onW,"98]-!!WW-!!!&b#!0t_-!0u$a!9aC_[''H0XmZ8,!!&/X!!.DF +b5g/p!PYr-!!'J%!!&ne!!':\!8RVXW6N)McM7G?^X)rdVS^*VXT/@7Ms^T9!!B[Dc*?d=!//f$!nFQX +rW!&8Z.s?m!!8n4VX+#64t6%KZV1!P,W="9S]*!!KpJYj&Y&[Cs2\]=t/S +mC38/\@B*B\,s.N\DXk5\$E'HYIq0IZELa@\Z<'H\%'&X\%0)V_70Z\\@K)\Z2hYL\-KFT]=,>cVRt?f +rjW$?[_)OM!P#`:\-KUV\@K5Y]=RgJ&%'*U^:1J\\?N]Z"98E'"18.%!"T24]".kB!rrT,!)WF&e;:\\?rgO!!!H8!#G\*!#Pb;!!#52!=/`, +\,lXH!s\i,$j6V@!!#8=!WrH4\$WaI!WW9%#64f+!rrE'!WWc4 +"UP:A\@T?R!!B_2"U4r"Q'1q!sAT-!!]/*!rr<%WMKRt"9SW("KJPqq5Eh_#GeH$VlHk`X5g2YWD\=UTUMtXf\\'Xf/CuXf\P$X/2boX/!V4ri$+%WMuhsU91r)#GeH$VlHk`X50cIWL'!!*3&"onZ."p"c0q#DcCVuQo"!!E<&$3:,2 +!!EB)"p=o+!WW6$!1 +"9ni1%&g#(!rr<(#R(A9!XJc-!X&T+$ipV9"9Ak.V5aLs!!<3)!!<6)!!E9'!"8l4#6_$*X/u@%"K2;( +"oo&3#64`.#m:D7WsSh.!s&K)"98E+"TAB,!X8W)"U4r,#5A0&!sT#4"TSN5!<<5$!<<*#!!3B*"KA:% +hZ+Gp"98W+#+c2)!!!%sU&Y;u!rr<(W2Z?PU^*TmVk^/iOJqTC!MuXpUnjmbU]RBgV>[1iVr+9dVkff\ +SuJK[U7eEWW19W\Unjr`Unsu^c(t$.#,nAqUo9od\>0A'WMcMhWfX1AV!Ol^VPC)fVl6Gjq4n7nW2-8f +Tr=pcU^s0"SZ8KZVkfl_W!!)#!s?RDirBSm!2ugr!_?4!!+#H->"WQjI*cL8=8\bW]0\HfjJ`kTF.Z,6=I#J\-h^<<7j +_YL_LR-'.`XdHl,J_S2f!8%;O_X%7&]u'j.!!U(:!4L16pAb3Je,TcOU&Y1[`j(lGl2^>S!4;7r!kk8] +l2UmeS'11!"2;.Zh#79R^%24(_Wq3g!!'J&!!0d4rW(mW(BORD!nH'I,!WW9%!WiB(!<<-$!!*-%!!3-&!!;orklM[)[/dA>YHn5:ZEai<"TYj>!*G"U+q6 +!;-=&!s#mC!!NT-!!<9(!!!$(q#CX$\,cX2"98K%!!*-%r;Zp%!!!*"!"Au0!!3-#!<<-#!!*'$cN""I +!WjSI!"cA$3:;5!!*-)!<<9)!!!9*"TZ0GZiU@1!<<0$#m(Y3!!NE*!!NE+ +!!*-'q#Cs-"T\W("9AQ)!!9Y2!!!$$"onf1!P#]AhZ+Go!!iT0!X&Q+"9ec-U]g_u!gr!Y#/3!!<3&!W`?'!!**##QXu-!!3-'!!;orklM["Xot`+WN?9*XfW'7#6_0/!kX/W/"WLs4q +"Tc::li7P!!3*"!"U+l+"9JZ*!!*<"!!`S)!EuWN#pu"T\f-!<<*(!!WK*#,2G*"p"`,#lk54!<[n!X&N*!!<35!WiB(!<<-$!!*-%!!3-&!!;orklMZoV?3EgTVMXdUSA.s"TkHs!f!#;E."TSb*Uo1'i!Xeu/ +"onW*"p"]2mf3S"!!r]-!!WED!"Yd%T`>2s"Tnc-!!_?4!sJ]+!!E<)!<<4t!<<*#!rrK.!Mu^qdJs9Fq>^SX[*AE[l2Ugco`2r2$C\p6 +U<]=B!6)CMr;Zl%a8>o<_S4S$kPtUfY5eR(mf:3)$)Yt<^;@.mc*WPT!8%8P^;B4:!49WDirB11c*Y:W +!!&5;!!19MrW!&?XhVU1!;6BoVp2+-!!B4?^9RD4!Pl/:!!9UCU?qp^c+g"*!:0[c[eKh']u'aKhuF2f +!!E?'!!E9+"on_5]DMX1!k>c&!!NB'!WW51g&U:9#6Y/1!<*$N[a +!!!?/!"9#3#.h.S\?l\F"p"l.r;Zm$!XLXa!!E;0]",;_!Or45!<`A"Te`/i;a,a!!9Y2!!!$"rW!!$\@C>p%0?M4!WW3'!!WW-!iN*s +!!35$WTF0a!<<3%!3+uYh>eQ!"9AN'"TY^-XKAT-"Kef/WNE;("Knd+!3<("#f?ZA!!`N)!!0&$!!0P/ +"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K-.($O6Y9!X,L$Wh'\$!<*&q +!!WJ'!Pc!!<3$ +Vc"onY$V53;T%KQP:"oni-!!i]-$3^G7$E'PsUnJ+q"p"l.r;\eZ +!X8Z*"9>-nV51$jU]UZ!!!WN-!i;dp!s&H'"TS`.!!WH(Uo:*j!!N?&"onf,"Te])"9ef3kl:qiV544s +!s8_l!;HO!!<<4t!<<*#r;Zm#UnlB\`*SiJ\M*`"2hCgVZ$Ps^V.2;!;HNs +^m3]YU@8-eVoQNQblGc&!!NB'!WW51g&U:9*WcKF#RCM7Y.M$J!!!5-Z3Rl@W4<&8Zj6Z>\,Zd;_#OW>!!!&0!W`9%[f?R4 +!!3-#\C:N8!"/h;!$N^;.\c;^M!!*K1#5A0& +!Or.2!!*,q!$;FG!!i`.#m:53%KQP9!4T)F\,ZLD[(ELS!tbV8!!VTe#mCJ6!!!'%!s&E$!YbVB!4KM@ +#QXu8!sAT*#Qb52!!iQ8"gnO>#dOF1\@0#Z!WW9&rW".P\%2S?"TSN,!dI#R(83!rrE'!!N?) +!br!"K;=$j$P5!s/H."p1d#%/g/-!i`0]!!NB' +!rr>#irIp9*WcNG#6tA7WNND+!s&_.XU;07T<8EuU^$mrVuR#)_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cS +eGosXWPc!!<3$V!!`N)!!/kt!!0P/"T\T*!!&kX!6bEN!Mf_s +!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$^B!g)%L)qC!rr>!!!!c7!=Ao5p](L!U]CJr!!!0?tqZ-Z,i;`kko`2r2"/=PV_#=!<*$N[abn>!"Ju>P8[Ks=I])i*:!W`<4\@M\E!!NK,!!iQ+!!36bs!!!&u!",h/!X/T)"Ttg%!W#irIs: +*s)QF#6Fo."KeT)X:D54#QXt*!j8=#"9ei,X/HAuWPef9!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)# +!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K-1)%g!"=!!!-)"p5)4#R(2."o/-&!N?)#!!*,p!$)7I +!5S:!"/c6jo?/!!sAi/"p+o1!!oP,!rrK4!!<9,"9C[k#64`3!YK#QOl,!s#pB#Q4W(!k>c&!!NB'!WW51g&U=:*squJ!rrc3 +['d$GZEq$E!!!e@%B?i<"98\:]"7sP]tj[P!<<*#\,l[2!Oi%4!<<0$!4^MYh>doa\,cU1!V@#nd=N!!*-$!p%L*(>UoC;LCUTO_)!!T@&WW9$!_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXW +"on])$jHe6"p5"m!#Q(D!!E9+"T\`,#HF]%W;m&(!!WW-"9\]D!s/T*!!<7pXe_s%!<`B*#+u8-WMomu +!WWB3r;[T7"U>M?$ig;1!!*6)"TtR"W;m>-!!W?%"9\c/!#=:!T="`!<<5$!<<*#r;Zm# +WN"\R%L*(=TqnIg!!*0(!2lXtr;Zm#Unm,Q"T\T*!!&k^!7h,l#QOi,!"&h%VOXQZUSa[b!"bn4S#6>l +!!]6tVZ"TST($j?_5 +"Tnkk!"TG;!!E9*"p"f,#,e5oV#VbD"98W1!!EB(!s/T*!!<7mWhH$NL20!!*6)"p:QrV>q#*!!`E&"9S].!<_Qd#6G("U_Ee5!U9[[!!`N)"/Gqt!!3#u!Wo0ng&M2P +YHRg'!PlDG!<9Ug!!'_*!6,!DVS\J?YHuEErW!&2!._uc!!TgJblG$#ec=n6!4K'2!57h$_>jSHq>gQ+ +b5g/p!P,Z*!!'RI!9X=`TYmu#!!'Ro!!:3<[*JaN!!C!8bJ!BF",l'6c2.JDNrT0e\`a"pVnTn!!!.Y] +mf;\S!4MY&s1/+/i;aB"!"8k@[Kup=!rrB=[(6>;!!353\E3bp!<<0$!4^__k5ZP/!WrE)!XJc0!!'I6 +$NUV8[/dMC!OB9#irIp9*X;cM!!EB.!=/`/Y-&3;%Krj7Xf_i0 +WWJrp"0/Gq_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXWQ9*X2]K!!<<-!!WH*V5"A"$3I%)Uo+3.!!NH)!sSf/!"/i.'`\L>Vk0jd!&"W\!1!"/r7 +"9AZ/!!N?+W2-5\!<<3%#6k21!sIce#6Y#3V#UQ!"6om]!!`N)"/Gqt!!3#u!Wo0ng&M0.W;6JpU;-R* +s1.(g!58%*_#OMVZi'k5^&Ydk!4KZCQ+d7CeVhuYkPtUkY5eR9mf:3)!4hq+s1-;QfDkr_[d3to\\eF2 +!!AG%_ThHJ!4hCq"NJ6kWP6[YrW!&!`il-*!!:?,_YO68cN!t#R-4MP_QCA3g&M,emf;\S!4MY&s1/+/ +huF5u!!3/4!Pc!!3-#\CprH!$;7J!=T&1*!$3C$imi>!4]<9Z3C:/"gYZ? +!t51=ZjOVL"T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47!<<-$ +Y5eU:ZjaMG#6t;4!WW9'!rrAt!!WJ6!0#mC;/!WrE,!!NN+!X]"n +!$MLI!<<-/['fr;]!MPN#m(A4!sJZ+!XJi/$PKSRZ31.2!rrB)$N:#A"1A16!X&N.";h1A!rr>+\H2a7 +!#1hZ*o_!!9Y2!!!$"rW!!$\@C>p%L`==!36,) +!!*32V5XIur;Zm#WN#"["T\T*!!'"Y!8dbu!XA`4"99/;"p558Y,)0$X9Pa2"9Sq3W<*2/!2u\!_uTc: +#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXW/Vu[)&!S=!X]",S,fI]"/5r#!X>Hs!Wrc0UnJ(=!;-d?"@Q +WrT:#!!0^Gr;Zl#VUY\1!!'I2!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r_Z8m#!n3^Tli7$rlMq!fXhW-] +!29Up!!'m,nGiW9c'.i$!3,Sj!Kk+e!!9^Hc,ThN!!'J&!<9V/!9!nf$NL/9"gY]F!s/J7\-!*9!!353 +\E3bp!<<0$!4^__kPu7t!=Af4!s6!=ZEF89\,rk>#d4@0!!fg@!e#k!!!?1U8nM%!W]:#":4o*!Wo@#jo>Pc!!<3$WT+!9 +!$21B#QP)4"0&E)Vua$&#,eR2W!V5UGnWr`P, +"9\])"9A`.W=/e/"9b[)!r`0+"p_3/T*GQ#!Bp +US%UaVZ`Td#G;2$!^!!*'" +$31G6#Qb/0"98E&!WW3%!WW;a!$/WP!"$-I\,ZL7!Y,22#Qb&.!!!9)!!<3&]"#6Or;\\T!seo3!W`G6 +!WrK)!4]KA!!*9(!#1!T:*WZEE"TSn(Vk^#b"9AQ*VPO9j!hu@mUSJ'gVuQi* +bQ.;9#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr!b!"Z"0!!f=! +U]:B!!t,)0"p5;:!<<*(!!!*$!iMij"8i-U!sSc1!W`G"!s8T*!2QCo!!*9(!jSHq>gQ+b5g/p!P,Z*!!'RI!71]G\a]Y% +Z,X\icN!s^rW!#$dCnrJ!lM4HoDem%qu?c2Xni#!T\H41!!C9.cDfY#!jB>Pnc8"V!4MY&s1/+/bl@eH +\@CZ$"T\T)!!'O_!9aD)!WWE)!X,pB!OB-6!!9:1[0!`9[Bfq@\coUT!<<*#mJmXr!Y:$NU58!!N?)"ou'C\@V_A!WW9%!Vl^-!WrK0!!=)="TSh8$3CA2!!OYN"p#26!rre<$ig>8 +!4TJO!YPJ:!!9[A[f?I0#QOr,!WiB)!<*$5!!*_9]"#Pc!!<3$WT+!9!$;:C"on`.UoO[#Xonb0V6-j(X9#E)#-Fm/ +WN-%"!!2Kf$ipA1!<<3'!"/i/!!2lq"p"]0!!N?*pAb9u#QOuD!"8i-":,"+!!WK/!WW3'"onf,!!!Y%U +#GVP+"TSN,"9nl7!!E9/V$R,(#6:^$XTAt4"onb)X/H""!!WE+!!33&"9AE&'*&%CSuS`h"p+c)!WW?' +!sSr0#k%a%!Xo)@TWG*o!!iQ.#Nl'l!<<5$!<<*#r;Zm#WN"#?!Wo0njo>Pc!!<3$VN.cV#[?e"/DatUo+4n!!2Kf$ipA1!<<3'!"/i/!!2lq"p"]0!!WE+quHWp)ZpBH"98i1 +!!Y:#lt#4!!N?)"otBr +V5O@p!WW<&!Vl^S!WrN/!!1m%U]LN%!!NSr!;HO!!<<4t!<<*#r;Zm#Unl*4 +s1.(g!58%*`rH7?_Z6gZrW!Ci^qTl`!5>uD\\A-T_pSPK!!'.)!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r +_Z9!&!PP5k!!'S"!!0d?ci=0@c+VC!!:9adQh(1WT_nckXM*Ed!!9@@XmZ5lJ&f7;h>dV3gTU2Kli7$o +p]1?)rW(1C!WomAjo>Pc!!3-#\CprE!#l(A!5#]?\Z`b@!!NW."9AK'!!p3D\Z?bV!\%;V?&-)b5!#,>3!X&Q+ +nGj(#('"C9)m[$\!Wi`3!"8qn!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irIj7)[-3AWi,s$ +W3*&$&-;m8X9bf.$ipO-Wi<&!"RlC$"TSZ.!!*<)!!bA!!WW-"9AK' +!!fR#WL=P,!<`N-"8Dj$":P;6!2uuu,mF>X!WW6&!!NE("T\`/!s5M)"U,,2#,J4(!ser2!"5V+$318/ +!#GeC!<<6+!!WQ4!<2!"]&/!X&Q+nGj(#&-)e4'V_W4!WiW1!!r_k!!`N)"/u;$!!3#u +!Wo@#aoDJEUnm,Q"T\T*!!&k^!7Loe"TSP#U]@54!seT$#6P&0"p=r,"8r5u!$;:C"p"i4!!!'#Unj]^Unn&#!W`H)"p"].!<<3)!!^ID"T\T*!!&kX +!6bEN!Mf_s!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$^B"*1%g)eB"TYBsV??o""oni0#k7m2!Mf_s +!!**#"T\W-!!3P)VZm,-!"&f2huFAo!rrK/!!E<&!<<>&Tr"(k"p+Z)q#E#I":P;6!2QTj"oo#4!!*-$ +"TeZ.!<`K,!iQ/)"U4r2Tqhts#m(2/$_d_1!!`E&(Bk!D!!EH*"p525!#>R1VuQf+!!36&&,lP1"9JYp +!"T)B!!<39Su;hp!XSr/$3Kbup](O"!!B"t!!!&u!!34tUr`W:\`!Mg^%DBG!!gcM!7.+BWO`!."N.qR +VT8Z9"K'2D_TgR1l2V"$[\CR@]s7V<^$bsc&!!NB'!WW51 +g&U:9*WuWR!!TaA#-tSC\Gu^3!4B&3\?uAC!kPrN[($,!!3-,"h(qJ)$0m?"Te_o!#G[G!BV%L2t6%0GJg +(((-J!!E<&"9Z!!!E?(\@B6R!!iW-!s&]. +$NL//r;[nN\c`KC#R(52#QP#.!!N]2#m(,-#IM"N!!3-$!uV";!!Mfl%KZV3$ig>4!<<]5!!!N2kPtkh +!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$WT+!8!$27H#QP(*WX5c/Y-%d1!Q5##-4c'WN)borM^:.U8\7q#mCP7!!3H,!XQdG +"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$\,ZO5!"8r0#6h$)V%Wn1"Tnep +!#G[8!Q9*WuWP +!!T'o"eqfiVZ6i"!iDZ\VksP#!iMt'Tqh\kn,Nq)!WWQ/!!*0%!"&`,!Wi)s"p"i0!rr`3quHWp*>+s@ +Tr4fbVPg,cVPU,bWLp!i!"&l6!<<0.!!3JH!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG#s!!K*n!WW8j +!!WJ"!$NLA7!^&S-9$3LJ4!q?7+!Or.2!!**#!!NN+!"98T*!rrE2!=/Z7!WWe?[']lBr;[fA!!N?(#lk#1"p2EA\?l;Pc!!<3$WT+!9!$;7C!!!$#"T\W.#-FX'!X5U+WNN2%#Hau+TEM9p!!Mck%Kln8#QXo<"TSl0!!Eo7 +q#Ud%!!*3'!!*<"!X&\&WNE3-WMlkoW2p*#"U+h'%'-5("p4iU7!!sRoh#6=f,W;uu!!W^8XO@0_!!'+6Xj*fY[f?EAmf:3) +!4hq+s1-;QfDkr_[d3to\\eF5!!8G1gZ\\<\aoe%VS:LZ!jBVBo`4R`!meZOn,NNhSY5HP"3ZM*VXFKe +c(!"^dK&V6!4MY&s1/+/bl@eH\@CZ$"T\T)!!'O_!9aD(!W`9$!#QOl( +!lk9E!<<0$!4^MYh>doa\,cU1!=#Qau,%0Qq: +!X&Vq!#G[G!>4!W]jD\H)s9#6526!W`K*!X/W*#QP,1 +\%&u[%0-D6"TSes!"T)?#Qb#.!WW53ZipF0!_e:W2lns#,hM("oo%,XK80%!rri:!!!'&!lk9E!<<3%!3+cSeGosXW#6k50!=B&3!X&Yr!#G[8!L&!!lkq70`er!X8`,"98E,!Wrl3!!oR&WW<)&!!WG& +W2Tn"!Xo&0!W]:$W_$,$3CS:#6k50 +!=B#2!X&Vq!#G[3!Bu!!51#c+8o!<<6&"otKqV??l#$ig;0!2ufl!Zj6X>!Y2`M]=PA\]FYGO#QOq; +[(E]U&-2b3!s/PD!!NB'!WW51e,\>*$N[a8"pY/3[^Z;A!!<9'!!*'% +!Wi?'!s/K,!/"9JYE!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t +!kJBs!!K:#!WW8j!!WJ'!_$.!rr<*!U2!f\Z,H+!me63 +p](>o[-RbmWS[[W^X\hJ!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__jT$8(!!'X?!4'!4%KNrC\?!"; +!k#>>]b_!!35$ +WTF0a!<<3%!3+uYg].Zb!!'$t!NiL*&-;d4%]$6.#-P)1X/2ep!!N?)nGj('!s8c4"U:s+WMg%%#Qb)' +!=&V+V5XRt$ip)("KJPt%0-D:!r`07WN;MgW2U"&!X&M%X/2d""U526!sQ^F"T\T*!!'"S!7_&W!N?)# +!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$\,ZO4!"B26!"]85!ii4$!!EH+nGj@+W!sJZ-#QP/2$j$P8!!*/p!!iT*#H8+3!Pc!!<3$VH8h +VPBobTr"Ob"TSYp!!3?,"8rE0Uo1)c#65#2!r2j%!3)Zg"98i1r;lit#,eDl%0-b;rW!G)WKsKYV$@#& +"9>6sTqqVk!WrN/`rH8D!!<3$V<.d%!"/h'!_$/ +!!iQ)&Hi(8VkjFp!sSer!#G[3!@"onc4!"&]6!X&Z, +!fe[`?+ao)JgGU&_n"!!9s^PPP7_Z.a!1]sR\;"0C+F +[^uM>^$bsc&!!NB'!WW51g&U=:*Wc3O!!3GG!!NB'!WW51e,\>*$N[a!X8W-nGj=*\,cU1!pl!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3% +!3+uYhZ+]"!!WE*"Ji(&WNHU0"g+c+Y-"c+XKAV(W2Zfu!35Jf%L*"8#,S8uWMKh#"9AK)q#CX$!!WH) +$31,%!!B7"W!4+?!!NH)"pM*,UoLBu!rrQ2V5gPoV$6o%#0$WH!<<3%!3+cSeGosXWU7!T:*WlBH!!<@tVZrcg#lk+*T;/9YVZa +"TSW/`W-/C!!<3$V<.d%!"/h'!^U$"p"f)!!iT+ +Unsae"oner!#>U2!?('"L< +&@]0UZF7-D#.:bC\ZiOCZF'Z4\$NKG[Bd1?!!3-#$NL51!rrB(!!*')!sH!@]!T'-!<30#\-NND"98]- +!4r7T#dq1P\cDg3%Ka/O[^HGG!!NB+!!!'*!rrB)!!!'$!"p=o-!!!,j!!`N.!!3E-!!2e?'!!WE3W2Zo$Y-"W/XKAY.WiZE+X98S' +XW+7@Xf_^+"p=u;!sSl2!!33%!<<9+"Jr)uV5iJSrri>#.LH.Y!!`K(WrWI$WMup!!<) +"onW,WMBLu!!!,8!:0[q!W]4#!!3-#! +!!WN*"9kR#W;lo%!BqV$[2*!!WE'Vu[*rUnjmh!<jSHq>^Q)Voo(m!!0:@li7$r +_Z9^7sup!4hV"!QVY'!!B47^8UN$pAb8[bHLF9!li]UrW!)0!!'^Gm/R6e[a)/H!!BpS +\WteIli7%'p](>oVu?\C!!ro:!59!Oi%P!X60G\?l;C +"9SW(\@o,S(]aX;%0uqfB!=/tEO!s/N("Ter0%(ZuM!!EQ-!#>5 +)76mT!W`9,!!<93q#Cp+!kRXfeM&X95W.!<`T-Uopi$VZd/-"p"`- +!WiH0!^KtrW"GQ!=/Z*"0)M)WiDs"!sJ`+"98W/"TS`0#mUM4$j6PDV5XLt!<<<("9Jr+!"T)2!33(" +!!3-(!rrN4!!_rn#6k8=!!B0u"R,ml!!NJ(!W`<*&H)S0XK'MF%L*+p]$!1^$`V4Iek"9SW(!W`?)#lt,.!XA_(TW+``$j#Gi +quA>RTr4^k!!!Vl6BkrW<`4"Tnr/V[NP*"9ni,"U4u/"o/-&!Mf_s!!*,q +!!`Z:SZ&7b"p*rg%fuh6#lk/0"pP+,VkFFt#Oqd!"onZ5!!*K0"ot]u!<Lt];OQLFkW`g>;Z +[-Re`!!8Y-^%q^/Xo8;&_S3:BqZ$`3gP2WA!!':m!5\^9^A7g1]uS:rfDkrs`p<[*\\eF=!!C$Wc)pa@ +!5Ik#!4hV"!fP=%g].E#^o-W$pAb6VT]uL\b5_OW^T$Q"!M-[d!!1-ci;`n\^%q`q!!'b.!!1EjrW(=G +!!W?%$4")F$NL/."Te`-mJmCk!!3-#\CprF!$)1D&.\aG"TSQ'ZEgg@!s#X4$E^T=[B]kC[Bd-Jrj!6@ +!!!-%&HVqA!X0/:]!]5[!WW6*i;a;j!XQeQZiCI6"TSP0]",>\\H)a3"T\W* +$NU5-#6Fl4q#Ls-!X8c-!!3-(!X/Q)!!Mck%0?M3#lkM:\cMj3#lk(]!8RV^\,u^9!WW3.Ydar;!!!21 +!;$7"!Of6F"98H)!!WH(%JKi,!Or.2!!*,A!#bnG!W`Q9!!!G7[C?DB!kPhP#m184!<<0$&./C;"9SW* +!!33%!qu[!!Or.2!!*,p!!NE+\@DSAkPu"o!WWK7!!3B*%D/tKm/RUu!!33*!!*/2\-!->":"Z%!=/ZC +])_m8!!iT1YlOn+\@]6a"Tn`*&@8hG#6b#-%g`LA!!330#6bIE!Wi]/%JKi4"onW8!"Q@>!#irIm8(^'mK +$igG:!t#ljr,"Tec.mJmCk!!<3$V"on`*UnXWX"9G6l$(RapVP=9kVPBoaU84QW!WiN* +%0?M:!sK,7VkU/b!WW6*jT,5Z0*MC]Unj^j!!!<0!i-)%!s>?rW1a1t!!N?&Tr4caUo".o!!NB(!XSl- +!!WN*#l+K2!s/Z0!!!'#"Tei-!<<8l!"Au0!s\f7!2fo!!!`K+li>3/$Ddh)"p4i*$([msrVup%`rP*! +$j!,o%0QY3!rrN+!"/H#"p(M#!<<-$a8cJJ#Qk)3$31&5*20(%"p+n*U8S;!!sAW)!WWW/!!EB(!WW9' +!!;lp"p(M#!<<-$pAb@!"/Man"6]^n"9SW.$31/4!",Zu!posl!rrE*"TSQ."/Vdq$3125q#D?6>2!!0cfi;`kko`2f.(V?`YVuQh"Y5j]i!5bo>bJ16ebcSL^ +U@eKg^nBJ]l2^>S!kl%8qZ$Vtr;Zr1^&\h`gH/opAb6!^%).'`qfZ8O8]+\YKjiY!!/@dnGiR&li7$_j8]5* +`qf]%!!'b.!!.bdrW(=G%g2q;#6VBK[(3f\Y9X)J#4DNq!<<0$!4^__k5[CH!!<3$#m()4!!'I;ZEF60 +[B]c4#QV3:ZNL7.[^*9MZF7-D[^`iZ\@&iW\%&r[YQY4A!Wh6[%0QY7!P#YN!!NB("h=UV#lk54\@T/_ +!!<3+!<85"7Z@%!)WL +]=7hQ!!*6'!ZA2QZj[!':c,"#m^M2'EG,3 +!XAf."9o)2!r2g#!N?)#!!*,q!!NZ/#,J4"jo>kl'*&+:"K;M(!"&l0$Noo!!WrW1rW!9,!!3-)!!3?/ +!!)fp0!(hL!!!3)!!&r#"oo+/!!!'#"onY(W2]gt"p5A:!gVjeY+!!_ll"T\T*!!&k^ +!7_'-#64i+!!`Q*"T\V#Vk]mb"/_dn!XA_#U8%kn!i;ZfVk^/aT;SH[W2-/`V50raW1=(r$NgFk!;umN +"98T+Unssh"T\W-V>pi$"p:^"Uo==r!!WH(#GIiiUo:0l!!`K*!!!*(!!rZ-q#Cp2!!!'+!sA]0!!<<1 +!suW2HJbX.]V""TehI!94%i!X,El&-)_3#m180!s&E1 +q#CU"U]CJr!kl'*&+:"Jc,"!"&l0$Noo!!WrT1rVus#!!WK)"TST.#58*MWM$0i!!WK)!2K]#!"GY& +!!3-)!!&snVZ6]$!tPD5!sSo/!!E:pW2Q*l!&!!<<'"on`-!2lUnaoDXDk*Ng,bCAXS!58%*_#O__c*=&E!5GT5!!9L-\c)RCa0E>'Z,o;^AIs5[)9#rq>^\dS&VST^Vp0Q[-n"3!"#P'!.)o5^6du[b5g/p!PjNX +!!'RI!;QTsVSCBhq#CJD_P6o-!O'6+!!'S!!!/t2hZ*Ybl2]uI!n!@\qZ$W0r;Zhjq>^TA]ta.="..]>6+gM$V%fuq8!XSo0#QVQJ^9dnF"UkA:]"#6O!"T&2!!*/s!!WJ6!D5]=>!k>`A!!3]3!W`N$!!0O>$+^*@&-)_9!kJU8!$DLT!!!'#&HMmAZj?d> +!WrE-!<<-'!!!94\@0)X"onu*!!`Z-#Qau-)79CR"9JQ.!!r)p#71D7#-"c*Xq[t7Xf\b/W>#@6"9f%5 +V[!50!G%!!<9$!#qu8Vud&$%06G7 +"9tm&W2Zhs"TSZ-"pt>1!sJB!%L)t:!!39(!!<<)!WW3%n,Nn#!!!$%!iZ8(!!EE)"QTR5!"T.2"98i2 +!rrS"W;lu#!!g48!t583X/W#u$ig;1!^o$Wi?%'$ig;3"0)S)!$DFO!!!'#%06I.U^$r*!sAT-!<<-'!!!3/WMcho"ono( +!!`].#6Fl,';b]-"9JQ,!!i#o#6t88!"tg&W9F9m"9J\#$ip>1!NN-"V5^?scN"I\!!*-$VO[qn!!T:2[06d#6P,5V5U)_&>G_mVPg>b&-)\3!sGQo"TS`,!sAW/USF]\UnslbVkg/f +V54/#!!*')"Q]X^!"]5>"!!<9$!#ql2U]LVu%06G8!sYZtUnt#d"TSZ-"pt>1!sA;u +%L)t:!!39(!!<<)!WW3%n,Nn#!!!$%!i?&%!!EE)"76*4!"T./!rr]0!rrRsV>pYu!!gOEirBMl!2QZa +Vl6D^,QIoP#58*%!Mf_s!!*,A!!ic/!t5/3)4dQEUnn+s!!3B-!sSb)V5^-h"pFu2Vkg*i!"/c/!!*2t +!!WJ"!S!m\K]lN$b]!O9?.!!9.7a8,c9a7K?4]pS?j +"1G2aS*p=WS,U.b!!7PmXnr+b!!&;^!!U0A_k=Q>rW(:F$j?k9!4oN@!!*-3!!;Nf"T\T)!!'O_!9O8= +#QP)?!4oAGZE(:AY-YFA\Z`ZSZF9h8\H'7F"9ni/"onf.!!!*%"oo4>\,cU1"Te`:!s7E]%06J0!G^!PJLW!!!0-\@K,W]sdtA"U"f,!!!9)\@K,U]"#*m!!!0&!!;oq%L2t6"TSi2!sS`*#71G5nGj(% +"9ec="9H(6"9\])!s8V[!8RVa\H)[A"TSN+[(65;#6hI7o`,L'!P#KF!!*'/!!3B*!!EN%!!WJ6!O"!6":GG9k5Ynt!=Z$'WW3)#$3UJ6n,O"$!!N?&"f/'s +"onW."T\T'q>_2/WWN5("98Z,"f25&&-)_2X/H7%!#Pg;X/,t#$igS8!s8Z+!!WE,!!]:!"pG2*!"K&1 +":>>5%&^,(#6Or+"RlBq$3150#calg!"T&3!3;okWN2g!!<<8&V#ejA$j?h8!2lLo!!*00!!;Nf"T\T* +!!&k^!7V!+"oni8!2lEeUn"3YTVJ6YVk9l\U8A!^VZd@&@\X31L)cN)4Xnc/]Q\`Eh[!!gib +c+V$.!7UiG"hhXYT\$=?!!^!J]p6XHQcf@/_X@KA!!'b0!!/S,b5g/p!P+Q`!!'RI!;QTp\b#k&Qd,L0 +"K)7!^:s(:!4gAT!mQqPl2^Y\!N*R#!!1-Uq#CDaqZ$ZBXo&/#[a(B4!!/b"mJmIQ_l*G5!QV/\?N9L!!op8!j8j0!"8c+&-;n5"p"c,"Tec8!!`K,!!V9\"U"i-%KWd2\,inI+h5%h]s52]Zap;A +$31S;!!39(%fu_4]"5Ga[(*]U]"5HJ\.?3Z\@o6o!!39'!Yth;!!2Ti!X&K(rW!6UZiC(,!u1n@"l'+7 +!"T.B"pFu0!"B"?]*&*6!sQ(4o`,L'"hM2I!!!'$!!?2"? +!!3<+!WWB-!!3W1!,/%C?oQ!>,;3\?l>D!WWB*[0?U=rW!HC$Y,SP+VQR&'WNE;(Xf\S(Xo\s4WP;!!WH+!sJ`/$3150"98V`!!Q4U8t8mV5p8iX.u^!!sel8!<<3)!=T#0!irB$X/2eq +VlQhsq5=h)V5^Pm)ZTpB!!!<`o9"9mleeGp*^WWiV,"98c2WN-.%!!EM? +!:0[r!=#R'"TSN)!WN;fr!!*c6!rrB+"9JQ<"U+l.$NL2-SZ&Tg +WMlaB!!!6("pXl'"p(\(!<<-$p](O$"U,#4V4nIa!"T5=!!&XmVuQo$%LN1D"Te)m%g*4?&"fr'!WrE( +"9So1!;Z[8V5XY'!!EQ-!",M7!s&i2!3)dt"p4i/"/H,$#lXf7$3L86"TS]-!>b_="TSW,q#Cm/#m(), +$3pP7!!E9,!"eW"#6k/2"V(S6"mH!g!!WK'W);!!!&RgU]:Ju%13(C"p+2n"p555&=f_t#6Fu-!WrN2!Vl^8U8.tt!!EQ- +!",D4!s&i2!2Q:j"p4i/"/,o!$2so8$3L86"oni/!>ke>"on`-q#Cm.$3C2-$3gJ7!!E9+!"n]##6k/2 +"UtM5"nDZf!"B)4UnsleT;_ek!s>BraT)@d^>T%l^%DBF!#_N5_P59.Q,:)IUq++>[`tGFd/X0WV?!@' +f)Y4=&:^suZ+76*c+U!!*B,#R18/!Vl]r!VC!!NH,!!30'!!36&!MuWjVPU5fV>-hiVkp,cSZ)Ob"K.n#!!DZi$j?_9s!!NH)"p4i*"onc#!!WJ"!QTYemS[`=a,!5\^9YPJ5"^p_DdfDkrZ`p<[*\\eFH!!9F6^$G_$`i$hnmf3?umf3Eo^;o76 +!/p%@qZ$ZGVWRp\R*DT-!!0%Pc!!3-#\F0D+ +!WW<&!X]XPG^[dU^5\%'#_ +\[ArW\[8sI\-W0:$NL21!!30(rW*f8"T\T3!=8`+!WW6-!!!W5!!36&!b_!!35$WTF0a!<<3%!3,De$NgA3!!*-%!!*0%!rrK!!>PY9!X&K-!IA!#Hb*/Y,SN$XU;/4XK&B,"T\W*!r`0#!=&ErXf;3u!Wo@#aoDJEUnm,Q"T\T*!!&ka!!36&!snr.!W`9% +!rrE*p]2*2!!39'"T\f-"T\T-!!3?)$3:J9#Q=])!WWE'!!f!!*''!rrH.!s8N,!WrE+!!<3'quHZq%flY6!!3-(!W`9(!i6-n"8Mp+ +!rrK)"p5,3!<<9'!sAN&*WZ?I!W`f3"9JQ,"U"f+!<<<(Vkg)cUo0lbUo'u`n>$ntUnjrgV4sc]VP0oa +V5++m#lju/!!<6)rW*0&"T\T1!?;=E!!<3%#64`5!rrE*!!*9("98W+!s8Z,"TSVg!"/h'!g9j"p4u.V4aibqu?d" +Unl*4s1.(g!58%*`W.$ib+u#_PgPT*]Y1bY]`>^\!6(\H^qI1[XiJ/S\_@,J!!9k7P10I>bH7bZ]tfo\ +XhMNKn%B14YJT)/TXMDFU;O[L\b?*@!!'S+!<9UQ!8%8P\[Li)!4fuI"98G$YI*Qp!eJmhmf3?umf3Be +\]=d9!!1!9p](B&^odM7!iaGXqZ$Yu`p`s/[_hG4!hdf:k5YP-Xo&1c!!Bs%h6d%Zs1/+/bl@eH\@CZ$ +"T\T)!!'P!!"T)3!!N?+!WiH(!!NE*!-[C-+AZidVA!3``8\[/TJ\@/NI\[o;\]!r"Gp]2*6!!36("9JW2!!*6'%0[%>!!!E0#kn<. +#6Fl*!X/Q(!\=&\,Ha\@K8]\e4uS!W`?&!@D\c;^?"7Q9k +"pG,0$igqDnGiao\,cU1!Pc!!<3$V==Ng!fU78+c +"TTL1WM6AfW2'Cs!rrK,!!NB)!rro9!t?6GW2HGgW2-=#!"8o0!rr?'"U+l-!!WE'!W`<(kl;(lU]CJr +!]a(XQ^q[R]J(ji$#(G%"gV(J7q>g9j#Hu.b[_C(i_p\Sc\bZ=+\]Y!*!!0X=li7$r_Z0c= +!62n*!!'Ru!!1EEj8]4h_rh$c!!9ULXSDht`kJ>H!!0!jqZ$Z%^@2+'^V9+9!R6,V!!7)RI/O'3!!Bb3 +>1*3Is1/+/bl@eH\@CZ$"T\T)!!'P!!!*-$rW3E,!Wi?'!s8N'!N!WW6$!!EK3!WWf6!!NKC +!!E`3"onW,"TZ-B]=8$KYICg@\c)RK\?`CC#64b5WrN\2%'I#G!"?'=]PS;"U>/4!X0&6"p#2-!"8u?!!*9)"TST+!P/72!qlU)#R(20!=Jl-"UG)1"98H)r;mf:"p+i,!!<6% +!D5[CZJAkl:ql#.q@V!!*5e!!``/[(":hE5Y,A8#V5gMfXf2&p(8Rq1WMuqpWWm&"U>#0"9ni0!2Z`q#64l,#QOi+"p"f1 +!sen,WN#q,!Vl^#!X'#6!i;rrnGidp!3*"!!!EMq!"K,3!W`9$&u;N5!!**##k7m!!=&_,!"K/0!!35$ +WQG2B!i2XS!!NB'!rr=tnGi[n!!<9)$31,0!!36)!!!$"q#Nqf!/"9eu4 +!s8]7!!WH2quHWp%0R%=!>3$O6S1#6k>3 +!snu.!:g*o!rr<'#QP"s!!WJ"!q!!*5e!!`].Tr4Rc!s\Q$-OTnU +!"5]t"U>#0"9ec/!26?e"on`*#QOi+"T\]0!sen)V5F;$!Vl^#!Wru6!hlQgnGidp!2ZUo!!EMq!"K,3 +!W`9$';;<0!!**#$2OYs!!WH."/c,."8i-#!i2X6!<9Ug!!'_*!6G3J^T#Jb!2c1-]:%.I!!:HXYPeG% +b_>uq!M[L2!"5@4gQo%tS'A3rk.UT$#H#5\[(4&J_"Icl!!'p?!!%cM!!\q"Z.GYtQ2L^\!"YR6^T"uT +W6M6;c`t4^>!N4->!:0[c^\@g/\c)TR!!353\E3bp!<<0$!4_P!%fub:!!*3(!!`K( +":#&1"8W!U!!E9%"U4u/!WW9*%KHJ3!joT6\/2cf\[T/\ZG!iV\A#>[!!3-)!"fS=!!W/u%1W@A!!30$%0?Y4"gf$F!;HU% +"p,)4!!iQ)!=Sl,%LE+0W!!Wc1"98E0#652:!=%cg$N[a24!!4gW\a]Y)!b_ +!!35$WTF0a!<<3%!3,Jg%0?P6!!*3(!!N?&"9eo/!DV7WMlhrU9(DlWN;np!!3-) +!"B26!!`6!":G25!!3K.!"&c1!!T21!!E#u#mLJ:!rrN*!!*B)!"K56"98K."onc2!!!60!;up.!"8i/ +#6P22!sf,3"9\u!!%S'O"9AW*!iZ;&"oni-"UG52UoLDpWMlj!$)ji$WMlbpWh]^s"onf,W2UH0X/`5$ +T*t](!!E9%#R(28"T\hl!"/h,!l#Y#6>")WrWD)!V$.!!83WN#q%!X8#m#6G#/X8i>'%K-8.!i`0A!!34tUuhX\!<<3%!2]2c"9JT.!!*E0!WWE)!!EK/!<`,t +(Ba^<"U4u0!rrE,$NL/6!!!$*!266eU].).W26&`UnafbTVSHXU8J!c"Tei."9GBu!<1!W`9.!X&K,Tb.8,q#Uj,!s\o. +"onW($2so7#64l,!X8i/!sS`*#7(>.!=f)-n +VPg8dVZI4$V5+!b!2pm2!rrN*"TY?pUo:2iW1=:r"onc+!!ri0$3^G7kl;(lU]CJr!,2!!=O9VXXWk!(8eg\WP6'Nc+T1_]sGT#T=`:=]$15UqZ$Z>e*m>>U;jRDq6gaX^:p_a^6@$_S$_.A^&.lo!!&Rn +!!'_,!!en,^;I4h_Z0uC]s4QIXfT(QVY^>u]tLl!^V\9Ig&M,`q>gQ+b5g/p!P,Z*!!'RI!!'IT!!'RW +!!0g_joGA\!QVD6!!8Ff^@hO.XiImA!!03pn,NK:^@)%&S^$6r!PZhW!:0[cchIM?\c)TR!!353\E3bp +!<<0$!4_P!%g;t;!5Y]"7mN*Y>]iZaHq9 +&$W=IZFI3G!!f^q#V?4!!EQ1!%kFa\[]/W\@T2^\@]/S%fcV) +!Xo/9#QOi^Z*M'Q]"#*J]"@dJ'Xtc]\@]3[!<<9'!s&Q,"p=r,!!E3%(Bt$C!"9#2!!335!W`W."TSN( +!=T#3"n;RL!WW9'#6Ot;"98T*!XJo1!!WE7[(NKP\@f>_\@K#\!WrE&('"I=!!E<&!s>p?\@o/W\I&<: +#RpbC!!3-,"6fdn!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47!<<-$ci=LW!WrE6!YDTGZkWQJ!Ug!i +!!!9R<%0-G8!!'R>#QOr%!!`T-!Y,J9%0>u!#6Y&6!!39)([qD7"onZ(!=8e6 +\dnfC!XT&#!!ii1"hOa<$31)*!!353\B4dQ!i`0]!!NB'!rr>#nGj"&!eUnslcUnOZ`W2-5c%&'Vp +VP!r!TV86XVk^!f#+qgqU8A!eU&kQ$!!E?+!sAZ3!snr@!!NAu!Z(h:"9nu/,b:a.Unj][Vkg8fW1fdj +!!)s"qZ@93"onWPSY)pXVkg#aVtd&?WLp#cU^I2'"TSW*"Tnr3!<<*%!s/N."TSN0"TSN(!t553#QP#. +!!<6/!s8_s!$VIE!s8`0!2fr""TST."9SW.!">R#R&?d[V5U5fU8\4s!#ttN!!E?'"9AK)"/)HcWL]i] +!!!31!"&]-!!`Vj!"/h'!g9j"pP&2VuQu,qu?d"Unl*4s1.(g!58%*g]/mj^T>])XhVQQZ+\DqVS9g^[_9$JS&2MH +U&Y1cWQMEi[]]Z2RFD5;^]:pIhuF.9XM2BVVn'UVc*>OpVipKK#`k2)]u.:Ja34:e"g-OC[*>_g!!'q0 +!!Sk>G0@SH"gPqX^7a$J!!\duYLe]@^>/bh\bZ=+\]Y!*!!0X=li7$r_uKdg!OeKG!!'S"!!%]4!!9%2 +PNDiJ!!'"5WUKlfWV$5n_k=fKqu?bj^&%d1^9kTS!M."(!:0[ccM.D>\c)TR!!353\E3bp!<<0$!4_P! +%g;q5"UbA;!X/].!##M9"8W!$!49>L\[_XM26jm(\@T5_[CEi[]:!s&N3!4TMG]!eoR!!'42Z*pjB +ZF@9KXg5C=Z+I1>"9H-?!!!'!!X9,7#64o-!Vl^3"9JQ)!!NE0!!30$#.V1S\%AoV]sY5Zq7$mF[C3WX +\?WZZZ+79R[.h'T]1!!)Ni1^!d[ +!!EH,\Hr?>#QOi+#QP>9"p=oX[(_SrW30&!XT,$!!*-$"9no8!(WN!&"!XAk0XTAV/"pP,:!!N?,!!2lq(Bad>!WWE+ +#64f+!!]F%Wi2qjWiW%lX8/^tWhcJjWX,SsWiMelUoU?dW?\F9WiD_kVl?_p!s/Z,"T\]1"UYD5!sJZ0 +!W`H)!!]Bt":"c("p,)2!WrE&nGt-C!!3-'"TkY."9Si.!!3B*$N^M8!$e8>UT:SfWrNA*!X%Wd#-"F#!!E<* +q#CBt,m4AO&c_n7!!30(!!9-m$NR.-WMp"#!XJe.W;m&*!XK/;!<Pc!!<3$V==Ng"TSN+#mpb=!X/]. +!"T55"8Mp"Tr4idV#I8VSZ8H\Vkp>dV5L5iSH8cn!<`Z.Unsc_VkU'h!2-6`V4aWZUSafWUSXWUW1X.p +!iMdo!WrQ-!Xeu4!!N?'q#D36!WW9%"Tel.!W`9*UnjoaVk'`bU7eI`V#@)!VkKi^Vkfl^WL]lZVkKs^ +Ua)h/Vl-)]USOi`!s/Z,"T\]1"ptP7!sJZ0!W`K*!!T0l!s\Z'"p,,3!WrE&nGsg:!!3-'"TkM*!s8`- +!!3?)$N^M8!$n58TW"Xj!##A5!rs8R!<`Q+!!3f6!s&B(!2lNhTr=lcT`tK!"p5+o!"/h'!_D7^8ArgXipbFS\qGIR_6)Bb-R>;a.8mYV#C>p +cEZ7,"g>AMXNQY-^t#*Ec2"m\^o+-Fc+/tVf8IA@_kOiJq7-gOO2&kr\Z*-aWTsNbXf'qS!5A"(!ggfi +!R8=E!!gY# +OT5Bp!5?#A!!2,`YQ4"i!3c.ts1/+/bl@eH\@CZ$"T\T)!!'Ou!"K27$j$DK!!N?&/#^(l[JIC(\@o)U +]!o2X\@nsW!!!$&%0-G2(]j[J[(EfY\\5Ja\?iKD\[DdIZEgpH[CNEN[C*/#m1G7!W`91!rrW5!W`?+!X8]-!!3D8$FI=S\@B/_ZkEECkl;(l\,cU1!i,S\.o)O!!!$")$'g6!!WN, +!!3J:](#b*"h;&D!WW6&mJmXs!<<9+!!!9+"ono4nGigq!!'J1!#P\9rW!!$\@BZ]!Wo@#jo>Pc!!<3$ +WUKlr"p5/5!#5J;!!"1.WWB,qq5>mIS>iQfWMQSpRh#K!!<``0!Wiu:!">[(W2lo!W2ci!Xer8($E1)/ +Y-+n0V>dV5Xf\b-XKAM"Xfeh%Y+uU7!!NQ0!WWAu!#>eD"98Z/!!*''!."lX/i1u +$EC,*TEbW)V[EJ/q#N,K$NL4+WMcelWiMtpW6"p+f,'*SIB!WrE("f\>tWi2krX/-=, +"mH!p!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$cN"C_!!39'WhlHq"T\u3#PJ/p!!`Q*!<<0$ +"9e5p"p(\(!<<-$pAbDsWMBn(!!_We"pP&-#64f+kPtej#6t;;!!i9!-3jON!X/Q,"T\T-#+qrs!=#J& +U8t9o"9B.3Wi6L3#64`)!##A7p](L$!WW9,WN,Ig#6q0,!s/H'!q$$s!W`9)"98E,!sS`0#4VZt!<<+u +"99)4!!35$WQG2B!i2XS!!NB'!rr=tn,NOp!t#):!#>P,1 +!YYY9$_aMpVl$GhVkp2aSu8CiTVJ9[VP^;^W2?GeVk^)bVkKZZVPfo_RgTN&"U5)2!!N&s('XsF!!WN* +!<<9(!PS7"p#&2!rrQ."p+i,)upKpV5L,bVl6:"!!VTe$N[%(!<<-$!!&gj!lG#s!!K*n!WW8j!!WJ"!n!!WJ"!(< +f5^E_-^`/\_nOm,bH\^`Q-mVPR]j0;_SFZ`g;V%9c*P-ucDZuQ_U!bdL"u_3!,o[,Sb]f%^gQ+b5g/p +!P,Z*!!'RK!!199!0tq3!4hY#!ku4C`W5B+!64d6$&$4A!!'\4PKh,G!!8_3^$,LtYJBW-!OT;l!:0[c +XS;eq\c)TR!!353\E3bp!<<0$!4_P!%fl_5!<<\6]=,;_ZFdQS])&p,\@*"O#lt83!rs&9%flY@!!!'2 +[C`rW]=GG]\[2A?\?`NMZa$pC[Bfq?!40$4Yd+B3$F$qD[C39E[C3?MYdh6T\@K-Rp])*2!!!0&!rrQ, +!!i`.!W`E)"U+lG!WWZ(!"8o/"TSQ'"Te`+!4i.2!!;io$3CM6!;][^`iU +\@MRJ$bEgY\@;eG!WW9-!q?4])i'9!!E<.\@;e>!!`Q2!!*'%\@D&/#6DHH!W`?'"n;R" +!<<6&#R(20!joQd6"9Sf-"K8;uW2-GkWs%Ye$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j +!!WJ'!@!rVup"n,NXm"Tk\(!!2ut!Wo@#aoDJEUnm,Q"T\T* +!!&kc!!E<(!s&B/%%=)gVl62cUSOg`UdCdb!XA`1!9pVZ?r$!!`K1TrFad!6prVup"q#L-h +"U5%+!!!&t!!34tUr`W:\`!Mg^%DC"!"",!W5HWFJ +ZN.$+Zb6@2Z2O_8W5?0cb+6/Y_l:qR]tV7p^:rY.kPtV"m/RC2Vn][SZ*pq9!#(F=[&M?LYJ$pD^:CM^ +\\kM`]s$Gr!4;1pqu@;0\Z)s\W5$$JYJ-pOYHbXTq>^c6[_9APbGiAA!!'S+!<9UQ!8%8P\[Li)!4g&K +!PQ7p!!'S#!!0gI`;o<+!kkkSq>^SkgS"NG"1A10WVZYrZ-2tD!Of9(!!0O=n,NL/\`3YjVSE*1li7%1 +p]1?)rW(1C!WomAk5Zb/!\\@T$QrW!*-!!*-/!%/0V +!!*6(!!rW+!Wi?'"98G3\@K,\[_0!J!XAr3"TSo1#-tGBYdXN2$a]oAZj!kD!4K-4Yl+P*['m7?ZF0\A +)S*5f[(*`Z]!f-Z!!N?&&H`"6!!!-%!WW?/rW!E7!r;m!""TAB$"o&'5!WWB-!!!;7!s&N+ +!WW6%!!"TeZ(+TVnR\@;S? +$amDG!#5J8!s"98N+ +k5Y^cWW3;)!s.ol#6=f,W;uu!!Wc!!t"6TXgUo+2!!!<8u!;HO!!<<4t!<<*#r;Zm#Unl*4s1.(g!3Ghn&-/HF^V7.U +]s"B[WQVEPa-Yog#HthT\\b>nVtU/oZ'rt:a8Q&H]`>d[!5H&E_l3X.r;[JDa0>WV^:CVa^7EZG]uIh% +W4qQtkPtUrkl;-ZZ*ppO['-peMn[5]p&G8j]uS-jc/ep*[djFt^%8oB['.NY^<;nZq7QpSXgZ9:jT#:k +q>gQ+b5g/p!P,Z*!!'RQ!!L!K^;n%g!71]G\af_$[\r0d!PZh?!!&Jha/SP.!P5Z6!!8:s^A\*5WOM[' +!NX$4!!9.?\aoe%^od,,!iOMc(!%nQX$j@%?!4r75"pG&3[(*ZV +]",,\ZF7-R]57rW!!%#Qj`#!s8P:!!rZ,!W`?&!=/f2q#DuI!X8Z**ruDR]"#DaW@e2O)up!J!sS`1!WiZ3 +#7.iL]"5>\!WiN,!!!*$$MON:!=/Z*#6b+:!WWB($igh=!WW9,\?rcWq7-5##6b82"TSNP[f!Z7\-E!6 +!!k2)#QXo,\,cR0!0"oo&7!WWB)!!WE6!=8`/$31;0!!39-!rN&r!"B&2X8i8%!W`?&!U7!pAbH"V5Xk'!hVii;+!#>P8$3LJ4"p+l3"U51-V5L5cV#pc&!WW3&!!rJ4!;HO!!<<4t!<<*#r;Zm#Unl*4s1.(g!6b6>"eDp4YK+?aP2VV'U>*kg_r4k\!!^6%PC`9)kPtV5jo>S&^q%_1 +AFKR&['[WdW4qEp!3Pno"gOQ%^V.>X^%).'WVO6c!!'S+!<9UQ!8%8P\[Li)!4gMX#/IsO^UX=Erk/?7 +MuE_'!!'RZ!!9+7Mrap=^]:8$!!948^%D@1^7r!Z[f?EXo)Jf^YO__qPMJ\]"PAY]stY`\-;p6!WW36!!3<5!!!E-#QOiA!"/K$"9JQ)ZiU42rW!*)"TS`, +$2FQ'"onW/rW">O!!*'"!=f)0!XSo8"TSN+!!*-(!!!'3"9Pm=]X58[!X8W*!<QA0"p"f,#6P/7!N<0#Wr2oH"9JZ."9tg#X/`.sX/qtmX/W+uW'!rr<3!!3<2!!!<* +#64`:!!rK&r;[!'!!8u!"o\K*"9ni1!!i<"!sS`*#Q=]O"TSQ'!!*H-!!)!V9"98E'Vu[>-!1,j +!W2s'!!!E-!sJZ.p]1^miTCc+p[d!5\^9 +\bZ=+\]Y!*!!0X=li7$rp](?.[c.8n_l:r^!3rND[(5o2ci='Ve,TNi^?#=qL>)^=n,NKg](H%/Y.V<\ +Oj0KOQ1FtWWSFrR!!.Yfnc/]`VW%RVe[5;Uli7$op]1?)rW(1C!WomAk5ZkB!!'F<\@T2[]=GJ^]sIkA +!V:!!N?+!_N]!W(L!XA]*!qlTo#6"Z8\GuX4&-)^>[(*fS\@DS>#l+Jr!XAi1!!**6!!E-!rW!-(!WW?+ +!!DEb$N[aC#lju3!Up(!!Xf&1!=#sA!"K,3"Te_l!!s"EZiLI< +!,;3&cr%@!!!9) +!sJc.!Y+!!iT*!k872!!**!!!353\B4dQ!i`0^!!s,8 +!2QZpWi;qsri$^8U]^Yu!2"U#%* +WiMtqW2celWMlepX.cNp!!3-*!!NB'!!WE+quHZq%0Z_7Ws/P)"9\]/!!<8r!%n?S!!N?,!d!!`V*!!WW-&-DA%#6=f,W;uu!!WeUo:/eV5^-j!!**%&HDq6!!N]0$NL>7!s8N+"98N(!WE''!s&T+!rrr2 +!+Vq$Unjrb"T\T*!sJ`+!sS`9!",EuVPU)cTE>@eVP^,cT;/6[W19NV%]#a,USItn!i0TV?-o%%%F2i!rr?-!!*N/!"Au0#ljr0!!g9j#6=f,U]CGq!Wh#IW%TY7eY^%24CR*WLR]ZQcF!.`&* +Zc]/Ma2$JgU:^K>T)c12q>^W0\\OU&!"Z!CcCMMZ^qHYQ]tUSmLrSWY!5lqZ"I%WG^o-Ju!5A=1#-=B! +f8I)OquFS6!4hq+s1-;QfDkr_[d3to\bQ4.XK9maVW@d[_kP\Jn,Uf8!4h_%!N)sY!!0"2jT#>$Qf\8X +c(tC?`kKa'XT4O=S#O4%!!7i&X1/-0[/C!k!!'J&!<9V/!6kKF!k>c(!#GY:!XH3G[(bbD!!!$"\?ru[[(rW"@W]b_ +!!35$WTX1!!!6(![RmR!!<6%"TS`-#QOl0!MlZn +W2lp!!!`N+!!*0'"p"]-#QUm$ri$1(XfAK)!NrT%rN8M_XeDo#W3*&$Vl[$+!WiH2#6P#/W)mUC7/#"9&B5"98T*V#^Q#!rrQ1!WWB.q#CBq +rW"DN!q#6kA6!!*3&"TAB1"9J],"98i1!=Sr.W<,3`!X/]5!) +Y,qa9XTSY,Xf\Q*#ltI9Vl^"&!!N?2!rrB&"pP/>!WiB&!c?n9kRB`L3QE.mt!!'4e!!p9*iO#)k[(jim^TY>q +VTY%Fa2!u3!!&t=!!@eZ_m\n3!1j)h#-G#E^6[/RR6]=J!PZ+.3J]X=fLZEgsF$Epl<['R'JY.D$HYdq3KZE4E6#64f=XM)-TZj6d< +%KQP>!rrW/$3C>3!X/f3"TT2;!!oj8]stM^\[o;_[^`fXosb%7ZO+:QZjQj6&-)\Aq#CEr!r`3;!WWE) +#7:P6!\=$3^D1]`G[S\@B5^!<<`4!V?[(-/E!!!9+!WWB(!!*'%"T\],#3GpP!#G[G!$NgA/":">q%KZkE +!X/l2!!E9&"9JQ*nGj^B!"0;>":+u7!!EH*!!`W-!Wi?*!#iAU$jZn7!"/f-\cB)9Z8&`f]#QOi-q#CZ3[1**=#lk%j!!XJF!X'&7!q?6r +!<<22!<<*#!<)s"!k>b_!!35$WTX=."98_+WM^-&!"8r0"Tnl0"98H+!u$B!!E<(!);!<L#!!iQ)"p4r-"onW(!!EK,"9Sks!94%q!N?)#!!**# +!sS`*$3mK.!!*?.!!!-+n,Nq""UY;8#6=f-!!*3)!!Mfl(^g2$NgA6!XJi1!s8]2"9ec9!WWFq +SuJN[W2?JgVZW]jUo4!`rhU"$TW+][#ljr6!!!H'!!**&rW*i;!!WE-#Qk).!X/Z-!!33(!!*'*!<&."98H*!rrGn!"TG;#n$h< +"ono/"9ec*"p>P>!WrE+!#26(#mCA1!=/`,Vkj&NT;&-Y!g9j#6=f,U]CGq!Ws*+!P,N3!"dDfYHPCO!7I:9]u0mNS&1is!!0I< +q#CHMJ+EX@^T@#,!R%Cs!:0[c[eKk&\c)TR!!353\EEo:!=6'A]*/2E%0-GB!!`T:!!3E,"TST1!!NQ, +!!NN+!!33#!!io3!kH]"#*P!W`91#64r.#64u4!kGtN\\#;[#6=i;\%/WHZa6qIYHe2: +Z2hAA!4&o=!!9F5ZF7*F\$iWPZ*_9O[(ifS\@M_D['[KW[/^1:!!*-*!=/o?!!WH(#lk#,#65&1!!3<* +!>2fP](ic<\[]5X[KsUS]"56S!!=)5!%n9P#6Or+!WWB(!!30'"9\c-"TS`,!WWK+"9\]*#lk/0!W`?+ +$37WF]!r=W!VcX2"pb24!#>mI[(ETS"Ter8!WW6&"U+l-q#L3k#6Y&-!sJ`+"oJB!!!*-%rVup*kPttk +\,cU1!!XA`+"g0_e]<\aCZa@$G[Bm%@#eI@F'ES"TSN2 +$ip>C!OoQF"Ub>3"Si$$[^rsP"Tmie"q@rK!XAc.n,N^p!!9Y2!!!$"rW!!$\@BZ]!Wo@#kPue-#,J2t +"TYM/!!<]2"U#56!sSc0!!3B*"pP&-"pP&-!Wi9#3=#Tc!X8Z*(BFQ:WM$;kV$-r%!"&l0"onf,"U+t, +XJMnsVl9h#!=c!1VQI#(XUqJ6"g"g-XfVX'XT\h3WiW>*riIuZXf\V!XeMVnSuJZh!X,?qX/_ur!"/c- +!sSc2"Ub;7!<p](^'!!NK*!!<3*!!!'$rWF8D +!X/Q.!!<3*!!EE)!=&T/!!30&"UG+-V5pO("TeAu(Bt'D"oo2>USOr`WW`G.#6Or,!X/c.!r2il!(+ +"U"r.#m0Pq(C:)26!=,U'Y-"f,Xf\\-Xf\Q/$EU2$&Hi3; +WrN>,!!WE+"er,n%g2k9"TSN/#lt#:!N;t&"UG,0"Si$$V5pR!"Tmie"q%-(!sJ`.n,N[o!!B2$!!!&u +!!35$WQG2B!i2XU!#u"DTqnRi!2U#&!t>57!t,)2"p"l-!XA]/"onW,"U+l+!Wi9#.gQ+U!X8Z*(]aZ8 +Un+H[T`tT"!"&o1"oni-"pG(*W1g)eUSS.q!=bj'Sc,^o!<`T,&=obt!!NQ."p+c. +TV/6YU]@0cU8Ff_TEPRtT:?An!i2Oj"Tn`/!!]^8So^mJmBTVTt+8o)QW-!4hq+s1-;QfDkr_[d3to\_$l`^!3PF!71]G\b,q'a1^F3 +!3#&\"/*@.!:g*kJ]>V'!"krtgTeBk\\5,^^q$6@!6q0qrVuu5X8)_sPNJ)$!!010o)Jij_n"e-!LKne +!:0[c[eKk&\c)TR!!353\EEoF"h;4T!!ED6!!33%!WiK*!<<-&!X/Z+!<<6+"TST,!rrB+#Qb23!WrE& +&%&i)\@Ar[ZN:+3!!36&!!\[9&\[(61G-+:Fs]!f,[! +\%B/\!<6!rr?%!<<-$!rrE#!#,J7!ZaI-F[^EFA!4KDD!!!0(!X/W0!=o/3"gkiA%fcS5!!N?&$j$D0]"#*Y!!ri(!!`Y: +\,cU1!s@`e#.V)A#QPD:nGigq!!9Y2!!!$"rW!!$\@BZ]!Wo@#kPun4WN2uu"9b\(!s8N*!X&N)!!*3( +"U"f+!!EK1!!39+!!3?/!\+BV!X&K'%&Bl%W26Sj!rrK)!sAT("9el-#c4T$V5^Jo!W`?'!sAW1WVrq( +!X&\/XKJ\+riA9aXTJU+XT8J)!=&Z1Xf8G%UTCGkWMleqV5gSrVl?Zs"KAH$!W`?'"TSQ+"U"i1!=&Z+ +!W`N+!WWW3"9\N$rW!H0!!Vu?Yu!s8N)nGj(&!Wf6r"9\].!W`9("T\lu!!<9&!!T6r!WrE)!g9j#6=f,U]CGq!W_>EUs-Q>e%VQj]tLtTbJM&o\]4[MYJRjA!9aC_\c)R3^9#Mk^5F +nGi]i\\5AOnGpE+!4hq+s1-;QfDkr_[d3to\^pf^\\IS5ci='Ve,TNI^uk\"c*76Knc/^)[.s\8]sbt\ +!!'7DZbX,R_nWMX!5-=EoDeo_^[qL-^U0R'!!0d5#lk26!WW<("on]+!!!$&!5#YM\@K-L\GcL`"p+i,!=/Z*"9>sB +\@K/^Zj$L3"Te]3!"uZMZ`gpFZEpsFZ*:[>[C39E!!!$$ZF0Z3"UhO7"TSu+!$A\\]"#2]Z+INW\@T,[ +\@MkE$3:2."U+o,"98N+!,1#QXu,!!!*9*WMok'!!!$%n,N[s!!T@$ +!0WiH.1!s&]0"p:p.Xf2N,Xg#&(Xo>C&"p=i*!X&T1rW!0*UoFV!#QOu&!!`P)W!38) +!!Dur#-=X&!!33&kl:qiWMfe$!<<8m!!`N)"/u;$!!3#u!Wo@#blA1S"T\k%WM-2dVk=Ct"8Dj,!rrK+ +!s\f0V50^m!rrCsnGi[s!!WT.'*&+9"on],!!!$&!2uThUo'uaV#CBU"p+i,!6pUnsrdT`tJu +"Te]1!"GU!US+N[Unjl_TqA3TVPTr\!<<3)USS"n!",>""TSr*!$A#5Vkg)dSZ&?^V5L&cUo+Cs#QXu, +"U+o,"98N+!iX('jpE"98H("U#)2!X8Z,!!*(tU8Odlp](O"!rr_* +Uo0pK!6Y?OVZ@'sVkp;bWM'Ot"Tl[Di;a"VU]LMsn,NXnU]CJr!0Vl'Lr!!WH,!huHfTEM-fUnRRZ$`9_pUBL]!!g9j#6=f,U]CGq!Wa/8;*_>jnW!!&D(Z+m3eVoo(m!!0X=li7$r_Z8$`!4gSZ +!Of`*!!Bd=!!)Qi!QW+S!!oa2c(Y3R]>CcI]*,d^^:1E@!!/J&o)Jg+XRcDmgS3^.!PZ8H!:0[c[eKk& +\c)TV!"T)3!!!88XV_0@!Yth;!!2lq%gW@>#QOiY\%9*]!!`i2^$l":(B=L:!YPJ5%flY8#QVEA]=YG[ +\-2p7#lsr.3WK-]"TST7]!&`U] +!#>P8q#DK?!!30%!$8AS[(E]W]!"Ar/!!3E,#QXo;"9JK%li7Os\,cU1!B]"9S>u&HW7=(]XmC!!E9/!Wjqf/'XYH\ +])Vj>!!*0*!bc!"T)3!!!2'S.Yr)!tYM6!!2lq%gE4<#64`NW2cg*!!NW.Xmc3"q(F1UT1Ak +W2Tq$#6=`,,QIfG"on]5Wh-5iX.Th%)ZU$I!!*'(!3)utXfeA!Y,\G&Y,_K'&ur+:XK;L(Y-"f/"/rB$ +!YPM8q#DK@!!30%!#M<-V5pDmWh?AfWW3#'!!*0)!!!-%!WWGs!<)s/!<<*#W<3,$!!Wh)X/)^'i;aYr +!!N?)!<`B&#Qk;3"9S]*"9tp-Wh]go!!`W,*h]R5VlSVReGp*]W;m&3!!*-6S>uen!!328!9sOeWMoq! +!Up'n!N?)#!!*,X!"B/A!!!6+!!`K,!!`N*n,Nb%!<u#Qb52&c`1;!!NZ0#m1C4X0&K)"obV)Vm-!!(9FU: +XK8N)!XJc,"9nl0!Wf@$!!<3+pAbC!"9]5;":k5-#83F;"98]1!pK[h#cX^1!X8o!!!`N)"/u;$!!3#u +!Wo@#c2\@U!WW3)W0n;%!!jSEq>^PB +_TMr3!!0X=li7$r_Z8$`!4hh(!PQb9!<9=f!!JY6]`8&u!",m0aNOVa]?7aGebQf\Xf\SI[*\LH!R818 +!!$`m!!0I+rW)9b!4MY&s1/+/d/X[Y!WW9%]XRqD"onW.#m(2(!"T,2%06M6!Wos?!WW<&$b#R*$jm%A +#6b51%0?M1!W`50#.q;F!X8W.)$'^=!"/c5!!N?+]8YZN[J=\Zi6I +[C*(?!3il1]"%gMZMjh+Y."B4pAc6:"U+r8!WWc6$NL22!"$-G\@T3N!sel,#QP#0!"JDt"T\T'!Or1: +!!*9(!YDfN^#/l,":"o,"U"f4"TST,!8!#>V=\@DSH"on`*!!;Zj%g)qA!!+#="oni1"T\T("o\Mg +!"T+?!o!!iT*!k872!!**!!!353\BY'b!s/H)!3E.""9ni+"U>,2q#Cp-!"&`/"Tee+V#gW"!!oFk!"B28 +"pG26!"&f.!#,,qNAVZQu)!!NB'!WWK+#64r.#-+AsWi,pu$ig;0!Xeu3rW!&%V5pQoXT]!-XKJP% +riQp2#m@61T<>L%V5aP%q#CX-"/)`o"p1XW!7UuYWWrY,!2!!WE'"9Au9 +#mR<.Xf\\,WNMkrXf(usriQS/XK/D'V$%;1!!N9$"pP&-"UG)0q#CU%!sJZ+#6so&"r74?!!!$(k5YYi +!=/Z,#4VZu!<<5$!<<*#r;Zm#WN"/C%g)k5!s#9q!!eVPg3oSY`6V +TVnZaS-8tdVO+9[!2cOl!Wo$l!!<6&q#DH<"U+u7!WWW2#lju0!!f)1 +!!*8f!"T++!!WWB(!!E9) +"pCQnVPBu_TV[sQVOmUZ%Afr!!2H9_VkF5)!WWB&!!WW-!!W]/!r2g#"9Sf-!XAo'!!X2>!<<*##3Psi +"T\o0!X8E#p](O"!!B"t!!!&u!!34tUr`T;caN$;!QUc/!!&tj!:Tsk]s58qWUTrkc%sETXn2T3eYpa+ +^s9RmPePJ@U=$isO8o9X`Hg1`!6`"R!!/h;jo>Oda0`Uqq>f^Z!4M_(!iWifc2[s`\Z!:9!!SM6X8i6p +mf:3)!5SF2!Og=t!8%8P\[Li)!4gV[!Of`4!71]G\b?()O1F0K!LThK!!&Sh!:0[nV7jXP^9OEQGhTou +q7?pQ`PMVaX/jL7ZiKFm!4MY&s1/+/d/XFR!!*6'\@N%Jr;m$#!!;rr%fub3!WW`2!k>kQ!!!0&\+'G6 +!Wi?'!"K&2!XJn:[(WiV!!N?)!=\$EEP +X0Sqe&f[fQR1"TSN1 +]!q_D!<<2/!:p0n\@;S?!Up'n!Or.2!!*,Y!"T/:!<<*.[CQkK#6Y#-!Whfk%gN+B!$;1I!!pr!W`<'!WW33"TSN7!!!&h!!`W,!=/Z*!XeZ%%iPb_\-2mE!408F +\[&]J[0=1E[]R!Gpp(.4Za:1M]!]6N!"&c-!!ii3!PPi?&,6,0!WWM9])Vs8p](L!!"fD9!WhNc#6k50 +!"&i/"7Z?s!<<22!<<*#!<)s"!k>bc!"T/3!rM]puXJDs'riI$= +Y,&.uXTPZ-!Nr6#U^$o.!XGj,!"V5gKq"98E'!s&H-$N]l"rW!H0 +!!!&!!rr?%!Y;$*WrN4[!!EE*"9J`*!"K#4$ig\;!!T4"Vl9k#(AIk7!=l--U^7.(h#Pt*%g/a3!<<9' +!!oU(!!WH("24d#!!K:#!WW8j!!WJ'!u"p"]5"p"f,kl:qm!rr<, +"98Sp!!`N)"/u;$!!3#u!Wo@#c2\@W!!*6'Uo+M!!s8T+!!!)r!"T/4!!<3/!!9!pV>pT"!2T,b"9JZ* +!rsn\!W`?,"/DQhTqq_m!!<6*!sSo4!s&E&!!K3rUo1!g$3153!"8i0!!<<'(B1*QV50iUVZiimUSXlX +U7e@bV5FVk\!!rZ0Un7Vg#mC#'"TeZ("ono-!#5PA!#>Y:!2Q?eV?$c!!!36'!X9#5r;cKj%flY1 +!Mfet!<<03T;SUf!oX+^!s&N+"9&91!<`c1$j$D5U8Xi`"TT>5!!`N6Vk]pm"/t>^bQ&.UU]LPs"TSN/ +Vka:r!<<5B!9!n\Une%l!Up'n!Mf_s!!*,Y!"T/9!<<*,Tr8>!"p=o,!Whfk!!Wo6#QP\A#6>#5!!!03 +!"J/m%KW@+!<<-$!!NB)TVnXjkPu(o!!3s_N^5i!!B@%a1hENkPtUkqZ$\]^s11*"/s)9[.=8$^T"(1!6ss4 +_>jS^Q:[`\['!!0X=li7$reGoWJ_XRWQ!!'S)!!8M3^;'a@!!0%3r;[;)c*GNpbG<#0Pff62`V@%M +^U][2ZH]Q,pAb6GSaug^YKP8mli7$op]1?)rW(=G%flb4!s?$A!!N?)!t>85"8Mp-!WWK3!s&H/!4]KC +!WW51nGj.,!!Z3@>9\@/fOq6Cd@ZE_!F!4]MC%Kun>!!*'##QV?B!s/,r"WObZ\-N95!!*6)rjW"=!!29` +"W7@B!!rr#!!iT*!k872!!**!!!353\BY'b!<`B*"K87!"onc/$3:84q#Cp,!!`]2!$W2uto!t,,1#lXfj#64l0!=Al2"KAE#XIot%"TS`,":P83"p"i2!2?NnVus$%Xf\D% +Wi`D)Xf\\-!j8L*XKAS+XKDR,!j8X6!sJc%!$;=D"TSW)"onc-!!WK.!!iW/!ii5qWWWM,'EA1;!=/5s +rW!E/!!!&!!rr?1!j,Wi,n%"98f)!!`b*TWA+n"0()VeGp*^W;m>/ +!<<6&W2Kh%!!E>:!9sOeWMoq!!Up'n!N?)#!!*,X!"9&3'EJ97Wh]h!!!EGn!!rc.#6^[#"9>Et"9Ji0 +!"e>o"p(\(!<<-$rVup,rhoi%!U'Ln!N+q5kF4XfAM&!NiGr$O$V:!!*'#"otTu"9J5s"Vd]2W!UoC2a$NU87rW#7i!!EB)$3C>5V5L,fSI5E%!!WE*$NL53!<`T,T;\Q]"/VllUmnsVl$)`!2H9c +UR\-XVPU'`U_]Z!Tr=UaVPB[i"Tnr/!<<-)!2Q=k!VZQt'q_D#"pOc%#6b1*Une=t!U'Le'*817#6su( +p](O"!!B"t!!!&u!!34tUr`W:XlfZb]r_/4!4hb&oDf$0XP:FUnGi^+bHK6Mnc0YncF0hT[)KelL"*'6 +]rfS`Xhk(TT)cUJXj4&rrVuu*bi/U)`jDYZr;c$]!4Mb)!o(D_ci=0V^V?lA!!8gOg\q0Q^@)'=!!'b0 +!<91E!8%8P\[Li)!4gV[!ku[Onc8=_"bb2%!3r$Q!!'S)!!978XM=i/!!8G;Sc/U!cGcZt!3`NJZ&lWD +b.b4X]*PCEWS3sE^pK$o!!04#oDerVc+W`L!kkeNhuN*D!4MY&s1/+/d/XXW#QXr/]!r"L!X/Q)!!Muq +%0?M2!WW9%\@]*L!"QL.!!WH+#QPJ<#Q;.7ZiUF5rW!')#QOr0'*&19!!Tp@]WnuS(]jsH!WiK)#lXfL +!=o1E]bc!"K#7!(WT-XfVl+XTko-Xf8>"XK;[2rW*$%#P\9?!s8T)"U"f*"U4t-W=B"1#64b(XJhoq +"TeZ1!WW>p!<)s.!<<*#W<3,$!!KC"W<_tf!!U*0c]>c4 +nc0cjc&omD!3``'e%Dpc^9I[T_nE;TPfj';WQqB?VTuI/!!1?JqZ$`5eZ>\J!9aC_[ep+,gSh[2!!M#H +[]IL=!!9%DXSr2"T^Mlt!!'q5!!0OFb5g/p!P,Z*!!'RZ!<9Lu!;?I"Q*8HW!!'RY]p7XY!4hk)!PZG- +!!1*&l2Uk1Q2L^U!#3tM!!'RPU:u]h!6W'ec`=CNZ^S]*]*Z0Z_On`>!5?=pp](Ap_n#C>!PP6!!!1*4 +jo>G&PPkLJ!!'J&!<9V/!7:cW!s/N)!P5W!W]b"!#5YW!W`H.#e%@N[h/ZB!XSk;YHn3:!"-0>YdUh; +\?iIA\GuW?ZEgmD[B^,4!$;@J!"],;!"o8:!4oeL!"Au4"9er0Zb('3q*"T\T'!Or1;!!*<* +\$W[Q!#OSo(Bad>!sS`2&-05O\@/rZ]DqsF!"]54!r2g$\[]-L'*&$Ee,\>*%gBEG!*!rr<.rW"MP!dug!!WW-$NpG6"onW+!Up'p#H=`%!!*2%V$3lu#64i1kl;4p +Wc +W2'0a(S[e(Str@YN,Z`\^LNZ^pNA,!NF*;!;6C-TWQ8JZ+[*Y +!!'"1XeN^kccs,+e$&SZ$EM%_Q+YV;!5>SKq#CJt^qfRB!hdhnoDep*c/o!,VnW*0li7$op]1?)rW(=G +%gW.?!"on`*]<\iNZa'Z3Z5'pQ[^Z=C[/^72!k#6!!*5m!"T>8]F"pY,0!q?6r!<<22!<<*#!<)s"!k>bc +!"T;7"T\Y(W<<5*!X/Z.!!`6!%gE%7!!<9*!!*2%WMok(WUTrt"98N/Vl?YoW=/b-!!j\J#6=f/!!<<' +!!f=!VlH^&!!*-)!WW3&!<<0(!!K:#ri-A-!!WE+!3<6'Y-"f/riHX4VQQp"XfVU.#6_0.$i[72Y,8?) +!r2g;!<<3%#,&&r"onk(W!*;(#64c-"98k+WN;a(!=T&$!<)s.!<<*#W<3,$!NE&u"997r!!`T+"onl0 +%&a*(%'-?-!WW3*!WrE*!!W/u#H=`&!<<9(WSIR)!"T43!!'WWW@t!!EK+V5XX]!!fL'!!WT,!X%rm#6=f,W;uu!!WjVk^)c +UB1@i!sS`2!<*$%!MuRrp](O'!<<>#VZ[%q!!EK+U8/"V!!f?u!!WW-!X&9!p](O"!!B"t!!!&u!!34t +Ur`T;`kCL7"in<]!!'J#!;QTtWP6'IYOMSqVnK(M^%)1'Z2VN8!"dAd^9bJa!4K)>d?VV_!4KZ@!!pB4 +!5#eH_NigF!!85/XSr2#S\=at"/`9VL?JU;[f$1-\[K<)!!T@1\[fVbmJmjS@q>^Q0 +`leA7!!0X=li7$r_Z9E2!R%&2!!0OKrVur4kPtUndf9EHc0>90c(b.:o`,-0\Z!3WrW!A/Z,Noa]fc]uU'Oli7$op]1?)rW(1C!WomAkPu(o"TZ*C +\HTJD!!3Q/!!W)s"U#+@[Cs$C!!NE*"TSf3$b*XX\@;YC"TSQ)!r`0k%0-P5#6;#QP#/\@)G@!X8?!-34)H"9Ai3!!*-$!!`Q,!<<-+!!!H.!hR[^`rZ!<doa\,cU1!fD"98H'q#C[,!<<0+!4]TArW!9+!!3-%!"/i."M=ZC!!!-&$3^S7nGj(#\,cU1!;!!9[A!!*'#"RlC,!k>`@!!!6)!<<*1!!<9&!3ir>_[0"MO!Wo@#kPtYc"T\P$#R.1.!!3H,!!`/t"U#%/Uo^Kj!<)s1!WrW, +"pV$*Wi;s#!sJZ*!sAN&)@?HJ!X/S'XJMp'!!*'(!=>a.WNNA+Y-"h-rN.QLXf_d2!W`P(X9&P.XKAJ& +XfJB)!s&c0V5gNq#7.'*WMg"'!32k!!!N&s#,nN%!!iW1oDngi%06J6WI%W"/k=!^W+Vq\3@!!KF2`jW)@!!Bs]S\Y(% +&?isFa0DtfZ*qBWZ-L"]^U*h^TAWO1I]!PQ85!!0X8r;cQl"J;&WPZ*XYGfaF_n<7_b-.\kQ,(#SX2UgN +WP#p[]Y1qZ^:sXKa++$fli7$oqu?nYa2XV&T`+r9!!353\E<]"PJX(BFNLZiC.-!\%)PHn,NUn":tXC!!r],[CWpL!WW32 +q#Ca+!!NE0!"&]-#Qt&+)$U'@#QP)8!!NB*\%0#Y[^`mO!s/`0!P9#e/:` +h>doa\,cU1!!X8;u)%Q]K"9?'A +\-r?T!=&T*!Xeu3!s5sC[_'-S!!E9%"RuI%!Or.2!!**##e./Q!!j>'!"K,4!"f22&H]PO#lk;4!q615 +!PS?!"989!rrG6ZF-jG"98E(]WnoMYdgmEZFLRQYIUjB\$E+#6k1-X/_ft!rDus!*od/!=tp'WiD[,!!3?)#QOl*"9ec*"TSe& +X/W"t!!!K3$NLX2Wi3$#$EgA1XfSP*!NE6(XfSS*Wr]?("9AS+W!')rXfA4t!!'(%V5"Y(!3E!s!rr?) +#64`*p](L!#H=Z$!XJ;srW!H1":PC1!!<4sX/Z.$!!!H'!"&o1"p+u/#QOo1"TAB/"onW-!!NQ,"T\b) +ri$7&WN$((!sSf-!X8B"%h&O?$j6P=WMp%$&-)e:W8.I(!"/h,!3!32lp#lkV>"TSQ*#Rpb<"9PO%V5gQr"98E)nGj%" +W!=,^.Y,8?,!<`Y1%B-G0 +WNE,%Xfee)Y,JH$XTu#2Vlm2)WiZ0$&[&+9XU)&1Y,hX)!s8Q1":tV/!!WQ+!q%KQP3W;uu!!<#53$4?M-"9nk& +Vl'Te#6OZ#>m:90&>#\qVk"S'!X8W2!!*'&"onW,!!]*pV5'pg!"B&=!"GU!TVhboVP'`\U7nIbTW+f` +VP9r_!2uXo!!0$j"/2<`W1p0i!2lfiTFq8*WM':o!!*0,!!!)q!!WH.Unjgg#Q+Sp!"T,6$j37)!s#$n +VZ6bu!"8T&$3gJ6!X8W1!!3?,rW!f?!!!3'"pP&2!<]-pV50l^VZ[)("p+f,#5J60$NgA;"98k+V$-i2 +!!"Ta^u+&Ej*("9AK3!!!H1VkOCr +#QOtr!"T)3"9\`:!!WE0$NL8/"K")QVOj^i!!3;%T;A6RVkBo_W2-)bT;&6YUSX`WVkp/^U84Q[UnaTX +UB[TiV54.l!Wi?*!Y+l("p=o,!s8N+q#CC!rW!$($NL;!!"K26!!!<,!s&B;!!*E/#5J8o!"K#0"/Gqt +!!*'-!rrUtVo\r=\`EeoW3<-"R.UIV!!BsQ^l.a`"Hok%^k)"U"IIBHWPeQ4(miL9bl@a\U:n1>W6YI9 +g<6bGX2_gQe[#/S%b%'NWKk??TZ7$4_q^uQrVuuRSa?CW[K3MEl2Ug`rW!"t_S=h*#-GVQ[]-gQl2Ujq +^&%d0XmZ8,!!'S+!<9UQ!8%8P[#"&K!4gMX!M[-s!;c`tbFlQ@!!KC"Te`*\$c;9!Z&8W[^a#XZig@2$ipP6!!*$N[au!#bt?!##>8ZG!cX$NL2/!WW3$"onW5!Wp!D!!!"],1"R,mr!Yk\8%L<%7!>5A8!!!,j!"T57!WW9'$N^S6!WX1CZa9Y=%KZV;YI(O@Z3[\@\ZW@@ +,d+Y[[C*-EZECdD[]9D:[]m?I[C$1H[B]n@Za']7!!rW5X17j'"U5#.\[qn&"KSF#$4$V6 +pAcHI!!iW1!WiW-&c_n:!!rZ,#QP#/#cai'WMHO!!!E?+$ipb>p&GR/!WW3/S?/Lh!!iQ,!iauUeGosX +WU(!WW?+!<Q$%n,Nt$!X8o3!!WH+#6P58!!!2m!!iT*"/u;$!!*Z1!!35% +XNCME!i2XU!"T8>!!9*sTqr1u!sJo0"9SB!"JMclT`>**"SDb!Tq\K`U]h2-!!W`0!!>3$O-S2!=]#3!!!,j!"T58!rrB)#m(>5"9940USBcEVPXFs$)")eUnS*d +USsi`!2-6]VP]l\U7eKZVOR[`VP'o]VPOKoVP43hUSJ%q!!iW5S#6;]!!NQ.!2c[qq#CU#"p5I1T`OW_ +%g)k:#m()2!\`<_mc+g-ho`4pj"/=)cS+6O^U8YrE +YOMSq^8AoPUA+^'`i[I^!!'(ZKttY-U]AH(!5,AUX3USB!OT?7!!]RFWO^KER-"AK\H0.`l2Uh/rVuuD +WS@IW^T>5UVoIp#!drCmqZ$W1mf:3)!4hq+s1-;QfDkrs`p<[*\^CHZ[`sR"!;c`uP1m@Lo)Jg9Z0D;h +\bZ:,VU`?[qZ$ef\[fGk^]"3]R_>?,WrT$-e"X_[Uc'!"K,7'"G<\\c;d=!!30$!Vl^#]"5-V!WW6'q#CU# +"15bH\-5t8!!!08!!!3(!!3-1!!WE,\[f'P!"8i/!!3]3!4fVNZEggEZELdGZaI4A[C?4F\@/fT$3151 +"V%]F!!!E/!!9[?Zb*l[]!SoU!e,\>* +$N[a>6!rrkB\%;V?!!L"Ji,lW*Xf_`,XTYf.XK/H1!WMlit!!*3& +"oni-"n;R'!N?)#!!**##H=I$!!!-(k5Yqq!!!0&&d/:@"U"f0!V$-l"98T,rW!0/":,#9WNNE'XTf(5 +Xf/D*XUYgAXKJP%Xf\Y,X;.J4#QChFT<>/rX0&B&Y,SM*VQHu"!=>p-XV(^>"Tba(#5J6(!WW9'!NE%! +p](L##m.3)!!Vfk%1E4@X/W*#!!**#"9A_s!"T)1"/u;$!!**&"Tee+U]S^>!Wo0nk5Ytp":_3$Vl0Rs +#QOo,!!2lq"K85h$N^A0!<`,t.09UFWh#si!<<*'%0-A4!<<0$$NLA2"fA,i"onu1!rrE3!!&jkVk^'e +UGAL?VPC#b!Mu[qV5C#^V?[))!X/q#UB(?%!WW:tV4accV5L#]U]CIoV51#c!s/H)#5J6'"TSt)Uo4Rs +!;-=&"98W,SZ&H^VkF7t!"&c1q#DcD!"/f-!!N?)!!WE'!u"p(M#!<<-$ +fDl-Y$_aI%!!*2t!!iZ.!rr`2%%X10U]^Z"$igA3!"5["VuQeu!rrK)"TSbs!"T++!"TE>/o +!s@]d%0ce4"TT2k"p526WM0@rmf3e*!!]F!VZHi! +!<<6'"o85o!"T)1"/Gqt!!**&"Tee(T`W@:s1.1j"14Q@_Y!p-!!:$TM"1NJR,!V,mf3F'^6nWp(;@>o +[_')_[\V0e\\Q5c^#52\@T$l!"]2J!"/c,!XQ0G['-sEZF6sFZ3%P=*NZ[LZF:"J +[^#r7%0?M0'EA=?!!`Q7!"lTJ]!o8\\H)c=]=G;\!!otFpAbC"!5#hI!XS8q":tP8]P7 +"o/-G#QOo+&-)_6!"cKJ]">5Z[CWoZ\@8oZ"U4r/%fue5!<<9(!WWS7pUC[F[(3f\ZNLI5!WW3(\^UW9 +!"/h;!XK2W-XJZ1%$j6S3&HW1A!1pAbC#!3<,m!s\Atr;[<9!!K?qXJhs)!!!Q1!!W/u-O'PP!"8i."98k*WiE+mWhl_p +WMlblWs&\-":P>5!PSA +!!NMq!"K%/!3!Xer6*!=,d0V$mD.#H=g2q#CX$!!33&WMopo +!!WW."/Vfn#Oh^(!s/H,WMult!!Ui!LU"W!!9@AQhCCqS'@M"bd"V! +Ur0V@c'89j_Z6gG!6_RBnGj,f[(i`\YJ'u:S'/O4`W-"3oDes;^lRd]"O2kZXJk=_%@+`Lc&^&@^qROr +XJjD7!!&D^[Kj@Jd?hSlc'A,*!5@n%_>jSHq>gQ+b5g/p!PQM>!!'RW!!.K)o`4df!R\1J!!B15^8C#m +!4gSZ!J.uM!!0(6quH]r%*QAW^\M&GZ;1"Tf1B[L`N0!!NW1 +"1PeP$*ag?!!<9&!#5P1!%.gQ"VCe9'tCia\@0#Z]",BZ!!?YI(aEWsH6>ZEF>9Z2h?4 +Z5L*VZa-mFZa7-I!5#N:$NLR@\#p#;!4KA?pAb@$!W]dC!Vl^#"TSY>ZipF9n,NqGM6!X/aq(!"K.3 +W;m#+!!39+!!!$#"9AQ+!!WE;WN#q""pP,/!WW`2!i`5r#6k=5WiW<*!=5[+W<`\1XfMQ(XK8J'"9Af3 +":;-0"p,56#QP+/WW3)$"pG#3!!EE)"JVus%/Bl-"Tf(.V$mFs!<)s/#6Y1.WN2Zt"98Q+!!!N1q#DcE +"U,>:!"Z'/W2Z\pW2lnt#QY)/#QXr-!=&`-!X/T*"f/,tUSY$eW=Q&)X/i"p!!E<(!!**'!iauUeGosX +WPS7!X/,o`,L,!s>?pW1=1s!!<9&!"]2,!%.jQ"UtM5&>c;#V5'raVl$?t!pYt"/MWh!!3-(!!!?+ +#6b>%!"K%*!^Q)`q9<5P0pQ-!<9"`!!B@, +cB7>k$+.LM]rB8i_nNnT!!T76^R(VubPhLd!!353\EEo'!WW3/ +!WW>6]s7eB!=8`-q#CQ)]*/0JrW2co"Tl3F"9AQj#6Fo/&-N.A^]!i7P!X/W+"TSf5!!iQ-#lju.#e%7T\@],V^U1QI +!=o;6!WWB7!!!3("9SW2!4^MYh>doa\,cU1!#QXu,!!<6'!!`K*q#CU"\,cU1 +!!!V>"Ter0$jQk9!<o!#E5V!W]gD\@T2UY6Y+3!j]AB[^?):%K6>4ZF0b=YlM2B-)e,TZaI*F +\Zi?L[BR*JZF0b=\[&HIYHeB6!WW5([^#r:!i`a*!!WQ+!sB!m:QF!i`0_!"T,2!!r`-"KJPt"p"`0!!;rr"Ji(%!"]&0qZ-Tq +8-5cj"9AT.!W`E4"9ei."9AW/!"Y^%U'q20!!N?-"Te`0Wga7o#-G&1XUkUAXJi8'"Te_-WrrG6UTCF& +"9SZ*#-4i'!s\`)&d>D6W=/b/!!WE6!!rZ5!2ulrq#CU'!!9."!=/2rr;Zp#V5pEj!X9#4!!Wr6"8MpE +#64f9UoLDnX/i0.!#Qb23"onr5!W`9*n,NdrW:!X&M'V$@#)!WW6)n,O<, +Vum%#Wi<&$XJlO-#6q<5XKJZ-"qLh;$j*Q6!Ni@&Xfe:uXfhZ**j2KBY-+b,Y-"f,Xfee+Y,SK0"U4u. +W333+#6pm)p](L$!!*0(!!N&s"p>"#WF# +!m:QF!i2XU!"T,2!"&f."/i,j"T\W/!!;rr"JMat!"]&0p]*hdUo+=r!sSf-":PD:!WiK*"9ni;SZ&.h +"U+l0!!WW/!X5Ni#QP")USOXm!X5EmVl'Ut!2lOn!">BpTaCl'!!!2!URqVlrW!H4WM--r!!<3)!"],; +!=Ai+V"jup"TSV#VZ@&#!;$6n!MZQer;m02!!!06!!E#s-O'PP&>?"uUo:5f%06P7!W`H)"pP&3!!EN, +!s"98H)!rrK!!!WQ-SYQSp +"n;R&!3 +!eJ@Tp&G-5H2[dG^U(SXrW!&7REWtU!!1!?rW!"YbGk@=!ku%>qZ$]QU;$:#!kke@p&G--^[(q%W7Rs4 +!!]=FZ*qNdXmQ/qWP-Q[bEo0iS\F@h!4;1p_>jSHq>gQ+b5g/p!Oeuo!!'RU!!0j/pAjjd"22R8c/8R% +\^^Z\bFn)"#19LP!5cah"2iBcSc&NkZ.#bk^\\!R]>jo`W;s`]Fg8B]^p^f'T;g;VVSgHZaoJWmZ)GO8 +X8Dr!R`DQ0!!.H!jo>FE[d!hmXnVn_!!'J&!!0OBrW(1C!WomAk5Ykk#lkA7!4fSM!sAW'!r2g$]!qnJ +!WW9,q#CU(\[]$J!X&Q)!!W?%8HSqn!!<9&!!TpC!rrE)!]!T!J!!)s! +"9ec*#6O]$!s,mD[/RQX\Gu[6":kJ6!!*'/!!!9*!!3/5\@T2[\[]8Z'`\4;!VcX)#QP/3!!!9)!<<0$ +!=?3a!8[\`!Or.2!!**#!4]N?YlOFs%g;sE\-E!=!#/mJnE>\@B/W]=>8S!!N?*ZF7*FZ2ak5!!!0-\uWBOZF0q@Z4s^Q[K*P;!3rlD!X8]0[Bd1@!!!9!!<*!"!W`3#p](Hu!W`E(#Oh^&!OW@=#64f*!!**&!!;Th#QXo,\,cR0!g.VuR#%#64b'W<3,% +!!NE&!!NT/!NE)tq#CX#"p:j'!!!)m!<)s&#cXl$W;lqt!X/Z0!!!0)q#DcCW2uhoW2Z`r!sA`8!!3-$ +!"&]+#6=f+!3E0"W2Q\pWh^.*!!WK!!"K25#6=f)"onZ(!WW6+V;2.%!"/h,!A6#R2\bQ&"OU]CJr!`0VV$3KdVPL'hTq_[_USa]V +!MZ?dSYr?X#c+8kVZ6f&!X5HsV?6f""p4T#rW*$$!<*#o!!NB*!<`B,n,NmuU'^u,!!3-#!_\aMpno4`rN!A_S""kW3u]*\\Or:!3NNAPg7(8!5,tTc27PC^Uq8(!!&\b!:0[c[eKh' +c)1I?d/XXX!<<0$\@M_C!!*3*!Wqci/-,_P!!'O=[^lG?!"K#1!WWB)!<2KG!!!0@f*!!<52\c;^2!X&Q)!!3'!!!iHP+9]=7mS!$D7A"onc+ +"p"]+!=f)3!XQ)/ +WMQTi!"B,7!3E#tWMuo#Xfee-riJSgXfee)XTSY*"K\[*XfS?2!<`E+"KSL%"9ni.!ii3"!'#6:d&W!3A-!!29`2us-_ +%KHL0!<<0$!sel2!<<0)!!!0'!<<9)!X#F(UoC>lWhg+(!W`B(Y,SP'Y-"f/!Xokf/VQHu% +Y,AG%Xf8D#rN/)_XfVW,XfAP+Y-"_+Xonb0!=Gp0Xo\_-!WWE)"T\W0!!NE/!!WK)"UG,4"98H("TST( +#QOi.!Vl^(!!!]XAT\?9f +W;$>m^\GJH^8Tb_[+CZ'!!'_$!5\^9XSMnt^q%VgfDkr_[d3to\^(6W[`t`F!;$6lTWR)O!5A@2!l2LO +h#IH,lMq6ugmG:ZXh^D+!;um%c_e@R_nWDP!$ehpZN.YWPfpkV_j8rPcD&%@cFgs+a0r___S)nc[`,eV +^r?3O!kteRbl@dH_"@]o!!'J&!<9V/!7:cW"Tnc*"M;/F#mLA0$3^J6mf4m>!!3-#\,a.G"98o3!!33) +!!1!!`Z- +"TS]+(BX^?%CWjT'*,EA+UA2P!!NN-!<<0$!"?BH[(No[Ym:=>!!353]=5&X\[o6F\-KUVVBc3C#Qj/h +"T\T)!!'OY!8[\d!P/CiF!!*0*[/fdu"LtrC!!2Qh"p)47!<<-$fDlBb!!"TS`;!%5"Y!4o0FZF['C\$30FZFdEK['d6E[/dV9 +!W`9&!!'F8[K*hF#RLA/)$1-F&-2pC\-E!8!!`K*!9"Tf58$+dgU"T\W1!!;Bb +#QXo,\,cR0!#!3;dr!"/c,!WrQ*"9\r6W2]n' +!!!6*!!E<(!!`f1!W]3r"V:Y:!VcX!&cr7BV5pWk!*]m5Vl?YlWNE8(XJ`2%Xf8J&!NiN+WN*$#XK2]+ +XfeB#$j$M5#Qt2/!sAf."0@n$"98T/!<<<,#m()@!!!`;!!*9(!sf+,Wi61/!!<<'"U+l0!!N?8"9U+U +$Djf"%fiC-#6Y)."pG&/!!<3$$)sl"XJr7n#65,3!s5I%W1^5kX/5Wj#HFhh*!-*E!p9Oe!<<3%!3+cS +eGp*\WrrV,!W`T/WN$($!<`V@!9sOeWMoq!!Up'n!N?)#!!*,Q!"K/4":,"(Wi?.*!!!K6!r)a""U"l0 +!"TS=!94%h#,qS-!!!/$W=/e3!!iem!#l(D#Qb&6!XJf2!!36.!<<*.!=8c2!!Wi4X/c/u)60[3"oo&3 +"onZAVl?f#"Tkg/#lt+,XKAT?Uoja"XTkl/"0&C(Y+cZ5XeDl!WiW?%X;7t@Y-"_,!Nr7'!WrQ.!j8]- +"08C*#5nN>!sel8!4!rrN0"TS]+"TT27""=SOVkFV$T`YK% +!WWB-!W`9'!!!A%UnO``Vk""l$NL81Uo1#ZWMQMeq4n7nW0&&$!!WMf!!NB'!rr=tjoEU*%frR2"on]* +$3I'%"98H)"igW%!!K*n!WW8j!!WJ"!!so#1$3CM7"TST+#QXo*$NUS8"TS`8!N;olV5:)cT`kE(!!WE''q_.sUB:NW +US\1p!MH?cUmn:_U8.mcUB7*c!NDM"Uo9]WVkKi\U8O`\Uo'r]V?!K`"9AQ+!Wf0pU&q0b"pY#+)$:-E +$ipL,U]pf$!!WE*!29/Y^$bsbP;.b!!';%!!0X8a8cI^^q%.`a18,G!<)s'Tq]c>!!'4>rW":9c*k9=df?M^!3NF) +T>1H\IfR+7ID*k'X1bR[Xg>^[]VrdL_N=Wp"iAH*!!044o`,&a]ta"9!l*KRo`4=Y!4MY&s1/+/ +ci=IX#QOk9ZipF1!Y584m/R_!!!3-#\,rqM[g2s>"p+f,"T8<9]!VSB%gW.8$31/3!!!9+!P>iR!!`N) +!VcWu!=Al/[CQ&47L/to[_&oV]X+oI!Y2QAZa6sFZidV;[CE^H[^cA<\?`UG!!E<3!WW53])VmE!4KJH +%0?V3!X/Q("UY;;!t2KC%06G3rVuu3\buLC$ig_<$3LG6!Wi?+%'[@R[fum@ZjRuV!!`K)!W`96!5,eG +]ZaI(G!4&i4 +[Bd*G7C'G1[C!0GYdq0FYICaBY-t^EVmj%7]#64`- +"98c0!5#W=!"]>0!"T/E!WW?*[(3CY!?2"=!X.`f#QXo,\,cR0!jXKAV("q[r;Xfee/XTtr,Y,n`,X/uC(XJ`0'!.m!!NB'!rr>#h#Pq)%B0C/$jH\3"f/1!!!WV?!9sOeWMoq!!Up'n!N?)#!!*,P +!"K#7!X'!Wi?)#R1A2 +!!7)VkFG"!rrE,!!!0.!s\o7TqMeo!!N9$!N;mo!!;0$WMcVeVZd&$ +!!3?)"q7<&S>N$V!WW=(W1F0_Wh?/bUBq!tTqJ9XUSafaUnsl[V4jibTV/0TUS+K[Um7gQS>i$WUB(B! +"9SXoVkU#c!!!0&"UkA4!rr<.Tqhkr"9ni+"U"f2!^$bs%8Q^SI[KT!!'@6 +[ApaCZEk"G\cMp6\[JmI#Qt/2!s6$B]=ItE!kP`@!WW3+"TSW)!W`9&"h;,F!XJf,#QVBE!#52#R(2?!!*-*!pK[i#lk%1]X@tQrW"GM!!`N.!!3e?]sP;Y\@AgK +!s/P7\-)i?]=bD[\$`[F!"&c-XLPRGW4B;6!!]j?!Nrm3Z9#AsYceG@Z+.!D[10@KZaKn?]="dA[][9C +\$lPA!"T)@XgtmC[1WH>"TSN+!WW9%]=ItD!s&N+"9&9("TZ6E"Uk#(%0QY:!=9:E)$0g?!sJej!!iT* +!k872!!**!!!353\BY'b#64f-!3)Us!WW<3!!NK+mf3gu!!<3$W<*7&UC%,)!XSc*&Hr1<"/W"("98Q/ +$NL/."9AW3!!K:%TE"ro$j-5)#6>58!Muls!VcY!"KST&Wi;r!WNH@)Xfec,"Kei0TrkJqW!oT*!sA_- +XJl=."Tnr3"0&6"WrN8)Whfh"!!!6.!!E9'!<<0)WN-(%"p"].!2ujt"pP)2"onl1"Tn`)#QOt&)Q]p; +$igA0WW32)!!E9+!">L#TWG/k"p"r3r;[5,Unt,kW=o73"9Sf%!!WK)!!N?)"Qoag!<<3%!3+cSeGp*^ +W1!rr<,TW%nn!WWJ>!9sOeWMoq!!Up'n!N?)#!!*,Q!"T;7!!*3*!!!3'!!WQ-"9eN#!Hn$3UA2$2so1"T\`.Tr/5"!"oD<$NL/.!s&K("/Mld +!!!*/!r2g$!=Ju1U8k!ip]+1pVl->gVPL#\VZHjoVkX4nUSjuWVk]lV$D=9u!s5?pT`YH$!X&T-VPL/g +!!<>$T`Y>r!!WT,!rrB'!!3>"Vud#)!<<<(Unn(q"p"i1!!a_N"p4i*#lk($WhlL!!!<5!!!NH)"98W+ +$_=5eWMcKq!p]" +!!^IDi;a"VU]LMsn,NXnU]CJr!PT\QaE!#ibmYJ7fQ]q<[P!5-4Q!!'RI`I6%^N/!3u%o".8&P[f$1+a7oWJc*k"'!!'_$!5\^9^A7g1Mn[@7fDkr_ +[d3to\\eEo!!'4T!!7YtWUp/qVVIZOXL>Q8e%P\[,/;;$Q-965 +^At-s!5,;VQF":*T>S4[!3P(rU&`6!i.0%bqZ$b`e&R`Hp&G-<_t=!1eZ%s:!2oDgli7$op]1?)rW(=G +%fue9#QqHK[(3f\Y9X)J#4DO1!<<0$!4W:7[(WjL#6b)9$4?h8!!'[6!!r`+!<3?(!XSr0!4o6F!!iQ. +p](9srW!&4[f?^0!+cDG['^/@!Z+[Z\ +YmCC6!W`Q.%(NpQ]!VbA!!*%gBEB,-SSi\?s#X!sf&3!jr%" +!!KgA!WW8j!!WJ6!5\!Y-YR<[Bd3GZ2bE=YHeB5!!iS4Z*LdK!!!E-!FAYo*H?%0Qb7 +!=&o:"h;&C!!*K'!"T>:&cfNE!"Ao0$31,.!!2##6:R$U]^i*!!ro:!!3-#X.0.p"9&9(#6k83!sAl1!3;S"!!`K-p](9srW!&#VuR%t +!*f],V54D!!61XT8J6Vld'*"0Sc(X9J_1Vl^$$XfMO2!s&B(!3;rl!!WS*X.]_)!!!'#"on]. +!rr=tWi-7)$NgA;WM:..!!E97!sAi0$j&mTEbH#!W`N.$)sqp +X/#t!!!Pc!!<3$WSIR)!"T:4!#hB-X/VnsU]^l*!X$.:l2UsdW<*&#n,NXn +W26#H7t2"TSu*!!rf/":"o,"p4i*irB,_Wr`2"#S$n9"98Q,!!_We3!09`XeQ(' +!X&K3!!rW*%]cG+U8t8iWrWD5!WrH)Wi2boX/2YmVuZr$#6FoBWNE;$Xpb=3!W`9+r2ft#riIuUXfVc+ +XTbf.Xf8,!XJr>)Uopf%XfV^po(!!!*$W1fmb"pCg%SH]E$!!3-)!!3<+!!&^kU^@)0!rrb, +TG.D,"99&:""OTW$j3B#!2u]kSI>K$%034,!"9&3!2ZK^WMHMa#64o/!Kq"Tnf.!"8i7!!!J,Tr4N] +V4jgg"q1P8!N$XUn[u#StMk`!<Ru!!&D:VtpDl!!1>jo)Jg/EUNl.c)p[> +!ktD%r;[&=_Qa(@VSN02#aW6K!!(!gVmQF'"f9'9]Z.__!!:E7VZ$Ps^]qWdJ!!g^Yq\]gMgqZ%nR^Uq&%Xh1dFT?GL[SZ`%-Z-K/' +a1e:Y_hc:4`Oi;R!1'Fmqu?l6WOBd`p&G,lOnA\TZ+]Z-!7('6li7$op]1?)rW(=G%Kuk5!=$'<$NL/. +"Te`-mJnd=!!3-#\,cU;\[]/\!Wj2=!!NE2!O]YOZ4@!H!Wi?1!!39("1YqQ!"9&3!!i9!"pk:?\$uJF +q#Ft0[CQPE!"ufI['HjF[BKnGYILmD"9nk7\@)GN!OfK>!O]DD!X]#3"V:[C]`\a[K$C7!!!24!!j;>\@T;Z]P!"B&2&@f6`\%'#V]8"gYNe[C*# +!DQ9!YPJ5"p,&2V6-_k$j-k=!WWN,!sAo2"KAH$!!ri0"o&'%#6:a%W<3D$!*f](Ws/\,%]QP3 +XJW)%WWoT)Xf\Z0#Q_$/X99(:XK)I+WN;s"$3UJ9$im6-"98Z-VlTk$!PKpAbI#!!!6*!!WE'iW'If"p+c/V5aY""U+l0"U+#h2Z]nVWrN8&!sJZ4!NE)qV5gSr +U'q/)$3U>;WMuqsWN2hpU^mG,"pP)0!N`9&Y+u4%!X8c0"pk=4Xoki+#Hb,2riH=%Y-"\'rN.0AW338) +Y,&4tWNHL-XfeY"!['"TSi&!"K,7X.ZKn"UtG7 +"U>#1!pK[i!<<5$!<<*#r;Zm#WN"/C%Kuk5!=#?i#ljr,"Tec.mJn.+!!<3$V#^T&VPU,e!Wj#8!!NE0 +!MZTiSdQ/5$N^A0$31/2!<]0sV>pr-!!`2u"pY.*Unn.tq#F=sU8S7u!"G`uUnXHYVP+0jTVnQZ"U4t$ +VP=2%!i)Rn!hlE]!XAf0"UkC,W<<2+!McXp"9A]-!!<9(!!*0%#G@jn!!<5"SYr:d#Qk,."onWA$46b5 +Uo1)dWM9Fq"onW,V#V&,V5L8cW1g-g!#5V?"oo&6Tr"T`U]gi#!t#&0!!WH*q#L[(!!*-$!!;9_"T\T* +!!&kX!6Y?PV#p]%!WW3,S>6>i!!*8D!9!n\Une%l!Up'n!Mf_s!!*,Q!"K&4!rrN*"JV`g#65M>'__S3 +!WW3)!WWG_!"Pk1!WWFuW!!/+"TS]0"6]^q!N)Zk!!E9("TSo2V5L&]rhg^-$NgA9"98k,V5^8eVkL#^ +%fcY7"onZ(VkBdrW13qi!#1!qH?d!!`N)"/Gqt +!!3#u!Wo0naT)@TK])n2^&A!6^9PAdquHZq"/+JYP4\eVZ,46F!!9m:Z1\.uTYgX-%CWCPXd./MVuX]* +cEF;J!!9aIYPnM+\%VhBWP4_q!!04Nr;Zkth"(LHQ+?hn!lC#C!5A++"g#bY[+hSW!!'D*!!]gGc(`IP +_"[m4Vm3MB[`8@J^$bs!!3-#\,c[3 +!kPkP]"FsP!YGD=!k,bK^9G;X":th="Tn`+!kPqP]s@_Fp](L$!"$-G[0QF+A@f8P\@o/[ZELjFZ`UdA +[Bm0F\,`S;!4fBA!#N)L[KllDZ4$d7!WWB-#QP/7ZjF@M!!!'#!Y<"onf-!YGD6%/Bl.!6 +!!!3-:!W`l-!"8t:]=S1H!Wa#9!=TD" +!!iT*!k872!!**!!!353\BP!`"pY21Wi,t#!#!<`B)Wi2qtXHj7r%0-V7V5pGp +T<+jl$jH\8"98]0"08E"XJ5e$p](L$!!fI'U]pJm&?;]2WN;bnXf&;&Xei2"XfhZ*0EIuP!N`4+!>MW6 +X9es1W!`_/!WWB-#64u4V$F&q!!!'#!'!rs):#6G&/W2Zhs!"]88"onf-!t>53$2FQ+!#2rW*8,Y-"h/WNE9$XUqH;XfSP*XKA5"Xf\b)XT>F"XT5@"XX^6%/9f2"Ji&u"9AQ)%fcV:$0M9n!<<5$!<<*#r;Zm# +WN",B%L*+=!N2^p!W`<(!Wi?&mf47,!!<3$V#^Yu"/hrmVl>ge!Y#,7!huWeWgsa$T`bc.!!NH)!s>L! +UoC!f#5A0&"98\&W1aFi!"Z!(!i;leW2-#`U84#0"p+c,!p9Oe!<<3%!2\fXbQ%YFV#CH&!WrH)Uo+4p +"pW'Ii;a"VU]LMsn,NXnU]CJr! +!=T)5!!#53$4?8&p](O"!!B"t!!!&u!!34tUr`T;a1^F3!58=2 +#JdIV^sQNi!;um%W6M'mJ_H[i!!L0Q^"\hD!!9:>VtL*.a0Yi[gPa=gQJ/CPOjBibJ1!0U!!9%(XOmLSR)[D? +!:0[c[eKk&\c)TV!"T,2!!NA2\-E!;"9Ac0!!Vfk/-,_P!!'M2!s&W0!k5\L]s58U&-)_:!"?6G\%B/Y +&-E4=#64i-!4]ML\[VV@q#CX##65%;]=8%?!+c5@\H9=O]=>*UXgtmJYI1[A[']l8\?Z7C]!K)X"Lb`? +!4KE=#m()4!!*0%!k>bO[CcP@#6=f)!WW?(!<<0)!W]U>[(*ZX!!WH0!!E;4\%&r[[(*TV\,l^4!<`B. +!4oVM+h>+m!rrQ-"9SW)!!WN+]=>G`!!3H,!!`K0!"B&2#6=i#!e&g +\,lj7"TeZ/\@)A@!!!).!:p0n\@;S?!Up'n!Or.2!!*,P!"K87$3:S9!k5bP!!30%!r2g#!WW<(!!3At +!:'Uo\-3*;!PGnQ\@;S?$O,_o1'.Ke]!q_B!!BO?\@B*N!!!$'!!!3'!1 +Z*Le&-U^O2nWLXFt!l#6>#/ +#,.rk"o/-/!i2[qVPU5eTaREhVl$,arhMfV!!B-o"JDWaWM'HiUB:LkV#gl'!!WE(!rrD!V5L#c!rrN+ +!!!*$"9AN'!X/W*Tr=Z\V5F:t!>%rW*N3!!WE.!Xtj$ +U&YQ$$31/'!"K4/W1s@n"TSQ'!X\o-"n;Tf!!`N)"/Gqt!!3#u!Wo0naT)@?[c%2d^&%d5Xfnq`Lt_oj +qZ$eh_QD(dW;$>q[]IN`\b#k'Vou@>!$eV[!5>__[]'7kcbm_m^q74l^]4A[YlL9)_[(Z,4"3.U`^r$-P^$bs_YaD\!!'_2!!LWM^U_&;!!9mMZ2FY*PLZqO^\.X1W4gHaWV?Jm!!f^,]>FWW\B=XJ +.&jqQ]p\r5Us>jQc'lG[!5,k:cEY:"\[fSk\^%IlVV7oNY5lJB\\@tA"2hme\bQ4*U@nQgWP5%r!!9:I +WUBiR!!'J&!<9V/!6kKF!k>c&!!NB'!WW51q#DH;\@];]]=59N%KHP:[CEcW[CWdI!"/f1!<"TeZ*!!!'#[B$dBZEUmH#lk#5!!3/1[^roM&JkES +!*$N[alOO#64f,!!NB'!Wi?&!Y584!#9 +\[B,\!WW9&!#q#D-3WN)qsX/Muu$NL55V5^GrX/rB)!\"KZ"Tnc3XKAS*XoSS+!Xo2=!s\i1"g+^. +":,&3"9A]."0AX1XfeY+riH7%Y-.W'4p%jg"Ke],XfMO)!s,O,X9AV-!=Su0"9er3XJ`.u"p,&4"9o#1 +"p4l-#6Cs0Y,SP)XT8Y2!X8Z-"p(j%riH@(Xf2U-"9Sr3"9SP'&u--A#QY&.!X8W0"p>(0V5^Jo`rH8D +!!<3$WSIR)!"/h,!F$V#[QqWN)m"!rrB'"9S]*!WoC$XIp+*$j$D/#QP86"98E2TW=gn!!<<3%!2\fXbQ&"OU]CJr!"T\T*!WW6&$NL5/!<`B&!WWK+ +"9ni0#6"TG"TSQ'#6Fl*!2\^WO*c_SWRiZ-9D[bQ,8g!5GJL[_D\?!klRep&G3>RBiUZ!!p?Ge=Xse[K$=(!!g<" +bdP-^`2WS5"M_7e[uBqZ"N$hB`j*A\!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RP!!0@>quG(D!6b9?"2:\b +Z/GZgZ,`dC_R.&#XS)Vra046Po`,*p!/Adcr;Zkcc2.JjYJ7'S]t=?UXhMHn!7[mbU:[t.!5keLdf@(r +^p^kc[`+BLZ2am-^SAmL!!U*F]=XfQqZ$]$gR@p<"K9VF_S+b*li7$op]1?)rW(1C!WomAjo>Pc!!3-# +\G-%E)up/M[_0,]Y879@#QP%6]relP(B=I9$j$D3!4b;&[(6AB"98r5!sAZ*!4'8>]<\pO!4]>F['m9J +[]R-I[f?K;Z`CR@Za-mCY.1^DZ*q*C\[)>;!W]O3$3:&,%1*+E!!**(ZFRWV!!NE%!%J3R!!3V4]@!!Td>[C3EL(_H`L!WW?)!8$j6\:!<`W/"T\i. +!Xf&:#QOlV";(V8#QOu"M1nI\dJM?Z2h8>['d3L#QOk.Z2t"+!s&B,"Tl?@ +]`AlM!!30$#64c,#QVKA]\*8j!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3%!3,_n'GUTPV5:8lWgj\) +!!`K-W3)eqV\Ccb!s/i5!"U,,5!WfC*V66bu#Q_!(XKAY,XfeP(Y,qg2Y-"JuXX1'N +Xer5"XfAM+VQR$'!X/V,X:,.5"p5/7$3:52#,nZ+X9&S.r;n,H!W`E4WN<8)U'Id%XfDI/XKAM)"UD!0 +WN*$)!=8l5%2o9PX/r;$Vl:F4"9JQ+!W`<+V5^DhXK/<##fcoK!<<3%!3+cSeGosXW!Q'Y-+e) +Y,nb+qQ1:-Y-"W*$3mT0X/ld6V6'dtXWt!NXU,"0WN6:,!<`E'"U,"/T<&&)!rrE(!!N?'"9nk,TWHfH +#6=f,W;uu!!WW!V"otBiVPBu^VPfu`US\(pVPK]YUSOW[Un4HUVP0lbSZ&=c!7U84KXT:lnu +!s/H*!W`<+U84TYWMlWn$-*#L!<<3%!2\fXbQ&"OU]CJr!6#QP5:!N2`gWLK`Y#,@psU7VggUB%3bVPp2^W1s6c4/AaKUSjc`URqSm"K%fd +V[ncEkfG!3OMVbQ&"N]!&f_!!&GHT;]L"!!TF;WP#..pAbDr +\\4BZc*>%a!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RL!!8Y,`m=\cPPP7ZH2[dE^qJe/"f]]"VTu.6!!KF7 +Vo"Vo!!978ci!hG!.j:*qu?c8S,<74^V-u3Ku^4o[^cC=R/jM&!7%4Rg8M"#X0K@KYIhr\Z-8cf[\3U" +%aCEScN!s-])]O[]u$turVutiX7uYrc%4@9!!:E+cg(St!!'J&!<9V/!6kKF!k>c&!!NB'!WW51q#DHG +!2<[Bfi5!W`5* +)[*$N[a< +!<<-$!!'O=!jMas!!KgA!WW8j!!WJ6!"gtN6[C-'0[^Q7F +Z3.89]!WrH+!X]"/XfVU*"p559"pY/>Xf8G%XfV[+Xf\M'X9J^-'!8=="p(j.$j?R3#H=l-XTbi0 +"TGMfWN6R2Xfec0$N^A9!=o5Q!'!N-;/!<`Q/#Hau-XKD[,"p(j-X9kl-W33/&XfeS(%KQe= +!Xo,5)6'a=XJcC-X8rM,!"Ya%XJMtsX/W4r!<<8B!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:# +!WW8j!!WJ'!WuWMC")!<<-#"98r4&u;P- +WT,XfMc' +Xf\Q1Xfef2":YD7Xf82sXTJ_.Y,2-"+K;NGY,MU,"U>#9!!!$(!!NN+"9\]3#lk23#,nT'WMS8J#6=f, +W;uu!!W@k!!WH( +&=o\sTr=fdV5^*g!!C4@"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$ci=UZ +"T\T'WM-,b!!$S#-8j"::d$ +TqVGc!=/[4VkaM#!!!%rVP!tpVP"!fV#[?i!2lUqTVeKWVO47]USao_"Il9`TEh9fW!3;2!^Z%U;+FKr;Zr)XfVR0VS8MOW4C'iQG*(o#H?(`ZCh0t])2O7 +OhT/2_S3mlgm,SR!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RL!!:Q8[K+&&!!LQRa/H35!!'e-!!BdG^ +".,q!VtL)mVT-Z[q#CK9J%kj]".R]-Vu-Mq^Ua7B-*b4Z!!'d0!6)tYa34P$])\SJ\Y?rfbQ+ub^T@Ki +bI3rA]sHJk!"m#GPfp\S!!(E/^q[OQ_lqdgl2Usgc-<\qlN$8O!4MY&s1/+/bl@eH\@CZ$"T\T)!!'P) +!$24D!XSi,%0?O;\@T2[]`JB<$imlJ[^N[L"UkA@!.FnR[Bm@D!> +!P#VO\@B0O$3C26!W`?(\@K5W\dATA)ZTpB!=8b;]/]=>!P!4B,?Z*geL +3jQ-nYdshB\?`NE\[)@D[BmEH\ZW6KZa6sF$ipA/$37NGYI:_:"TS]+!4')>Z*^g?\$E=D\@]!Muru$EL>/"9YX*Xf_], +XTJn2&uhl:!>5D;WN*&%"9eo/!s&l7!=Ym,#QY,8Vlcit%KR!;WNN>%$3UA4"T\c2"Tba,Xf8G*WN?O2 +!?2%?"K\`,)QBg=#Qt/4X95T*X/2krU8t8n!u(_C!!EE*`rH8D!!<3$WSIR)!"/h,!;!NE#uWMuou#Qau2!s&K* +WMuqmWsAn1'EA1;!=&V)Wh]_!TWFmq!<`Q+!!]9u#lk#,Wi;s6%KW`6Xf8J&&?W&8WicB)XfSV$Y-%l/ +riQC'Y,SP+riHd5$NgJ3$3@31WNN?("p"r3!WK2BWi`D&X/rE,WN*!&!WrK+"U5#0!<%US7el"98Z.!s8N*Un[nl!W`K-!X,9n"p5/3S>W"bU8FRb!hfOf1B=;M!X8W7T:lGh%KHX)Tq\Fd +"9SW*!"/l/$D4$r!!NS!W1O%u!"#t +!rr<*!!!'%#ahQg!sJZ.!XAc$!&alY"pG#2#QkA6V51&dV5OA"!WWH-!4T!!0!ur;Znje#!!C"J)1(^7t?%#Ht2OU9DV7\bZ:0\&>kWYH.U%$b?>R^;H\s]p$aF +^UaCF^$bsi_rh"']r]J`^!6\\b]#U=#^?e%*-"Y582%]\91!]DDR;]?Imd]t:)RX1858c,9&O!PWmE!:0[c[eKk&\c)TR!!353 +\E3bp!<<0$!4_e(*=Do[!=K&2!rrP4\@ArWZ3C:3!!B[8\$#c3!<<*'!<<,-[Boi4&I/@"TSe6\@&L? +ZF7-D!!*'"!<<*+!!!$.!402?]!)/:!!!3'!!g%5[KsJG!WWB("LblR]!AiZZiU@3!!3-(!!`Q*!!pUF +"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47!<<-$ci=%JrW!uI!W`T0!s$$>\[]-L +#QXo-!!!$)!!40!8Za.!B9Xq8DZEjP;YI(^IYdUjFZEgg<[^NNGZ*h$KZNLL7!!!)*Za-e>!"],1%fcS1!4'/= +ZF.-N]"#*I$NgP4#6>&0!#DuS[fQUI"p*?V#QXo,\,cR0!hWN?I-#6>)/XU(j+!"U"f*"p4i+WMlhn +"/r-!!!NZ,!%4VEW2Tt(!!!'&!5G6$imB*WW=%D!NiI0Y-"h*Xf!#; +XTYf*Xfee+Y-"h-XKA;tXu<8ZXKJY&"UG53!cD*!s9/?!S@AW!<<5$!<<*#r;Zm#WN"#?!Wo0njo>Pc!!<3$V>(#u#m(M9#mC;2!!]-m(T!h&UBLW$ +!!K0pVP!nh!rr?(!!&mnU](;p#6"^3U8Ff_$NL;3!!<6'Tr.ql!X5NtVkfu]!!\pkV5'skTqJ4_"9>*n +T`b?!!=>TrVuQhu":>54!!JdhUAtKq +USFah!s&T+"JVflT;8H[!X&T*!rrK)"p4i*#0-]I!<<3%!2\fXbQ&"OU]CJr!"Tn`)"Tn`*V51#_"/M]j!!NZ,!$7i5Une.r +!!!'&!^Vu^qd;P!!0(Fr;[DY[a)LW +]`8%_fY4]A!3)F$rW!"oe>W9F!ktV^p](AVc+X#T#b\rJU]@I9]q+fr"TZ3\WS4!?!!L$I\$si`!!^$Z +c)%VqVR6C(^$bsPS^d_(oDesCS\Y4),.Y5aZ`h08cB\I2]E#:+]u&$m +a0EC]X1X8/_m?/<^;I.PqZ$_t\ZMb'!"#dVR]jTG[_oeUp&G/ec)p(-li7$op]1?)rW(1C!WomAjo>Pc +!!3-#\G6+G#QXo/!!+u<4 +[BBTB\$3'DXfo@=\[&ZJZELRFYdgt>ZFC+=[K-X6"TYp4!!Wl7!!30(!4TMH!WiW-#QOk7Z2qJCZig@5 +!!<3$#QP#.!doa\,cU1![(<]Z/-#tX"p,#4!X/QC!!*'"%KQX9]!i$R%0Ze5!X8]0"9J`,#6b2:!kPkN!Wi#q7h#G" +)ZUGY]Wo&U&-)jB\[_bG$4=/P]"#-S!XJf,#QP#0!"Ao/"M+TE[^QGB"9AK3!!36&'*80H]!q_M!"-'< +!jf2=[R7D(X0T)8ZF%$CZ2h5;[Bm9M\?`NK\ZZ1B\[f5Z!!3W2!!]a:YQb(1!!!3)!!!c7"Tet2]Weu\ +]!hY@$31J8#eL#F#.=gPc!!<3$WVHN/"p"]-!L9!so)3riL&>"U+o5"K\`.Y,)R.!W`?)!Ni:(%]u_0Xei#"V5p`# +WNE/%Y,\V+"0JU1UTF\)!sSn1W^(Vl]q( +!sSf1"9Jc-'EA.6!"/f/TrP$sV$[A.!!5@!W]0sU]:c(#Ge'srhCC.U]d3^U]mNhVP'[bUSOc^VPg>dVPC)^#,;*o +-DLSD$3C53USa^h!!E9%"p+c)&c`+=#Fq``Vl?Si!!3E+$3:@0rhKan#64f-!!M9]p](O"!!B"t!!!&u +!!34tUr`W:\`!Mg^%DC"!!KRDX-UHt!!Kp;a/?ZJ!!:G\Q21J#^mP0&aJPNCOe(^]6YlMAP^%;:)SHGk=PgT:,"NH_A^;BaI"NR:WQ,p31!57h$ +_>jSHq>gQ+b5g/p!P,Z*!!'RI!;um"_Pb;To`,2]!!&S1WSHqB"Gk+#!1WHX!l1qKmf3Kmd>u2CrW!#$ +^:sOG"JX/Y[%R!j"Mt/ZWNGdm!mScrr;\+UXT5o?\];A`Niftp[_9GHY5koA^U_/(cE4jfe^Z8YIV?GjT+WI!4MY&s1/+/bl@eH\@CZ$"T\T)!!'P(!$)4N!##>5#Qt>3 +!!j)8!OB8BZ`j`9!*$N[a!5&6=!=Jr-!"9J?!Y583"p"qAZ#S$h?[(EjM!rru7 +!"IQ\#QXo,\,cR0!,1!!`o4!N`H+Y,VmW!,@6X/r5$ +"9AW1!<<**!!WN*!!<9&!=8eI!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!#C9!!&!"9>;!Xo&0"p"q-TW>'e!'gVd"9o&1+sX98P(!<N-UV#mBiUS+KZSu8@bV4aKYUnFRjT;S9[S>N$QVk9ab!"Ju/$DO;oScT#p!iDb' +!XA`+!Y(s)!M-0eUnjai$NLC)VksLt!"T&0$K2![!!`N)"/Gqt!!3#u!Wo0naT2@Oi;`kko`4Xb"Kg.c +Z`*g&"Lc^[QHT.*!kl:ar;[#8c_^][[/'bN]Z^B1Pg7%KbIbKadB0%`[_KV_!5,GJ^q]rK_QCkU!!'IO +!!'(+^\n-6c)\YT!!B[RZbuJ:!j/9Q!R68m!!]XZUCSrcB[=D_RcSgV7ug,"0K#aQMgda`OksH +#eAXhL;qKK[]03*!gq6HirJEG!4MY&s1/+/bl@eH\@CZ$"T\T)!!'P)!$2CG!=&T+"9AK("U"f*"TST( +Za6sF\[)DC!4fD@[XPL`!!rZ2ZF%-M#QV?7"U23?!XJc+"9Q!:Z37D?YI:aC[BI-E[C*?KZEg_:!4'#9 +[/dbA#-YH8"g>64!4&u>\,lX2ZFBr;!!<9("T\Y2[^*6CZF^):!rrK*"1YbE[BBQ4!X/Q(!OK;F[B6sE +!!3-'!P#YI]!DgN!Y>J*$N[asC\@;eE[(3fU\H)^7"TSZ1!!!'#!WW6-rW"&A +!<<<("TSN)!Wf[<]"5D_!<<9'$3:,."Tf)4#R7`KpAd/]!"/f@ZFdWZ!!*f7'*&">!!9d?]=7hC!!`K( +%0-D/"98N+!#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!F%WMp+&Uo=p+Uo=@q"pP&1!!!*$!rr?,rW"&A!<<<("onW+!Wf*rX/`/! +!<<9'#QXo,"Teu1"pV!*pAd/Z!!iT9U8t8p!!*T1%fcS8!!93tX/Q(%!!N?&$31),"98Q-!:8 +W<3($!iuJ1riHk9"9no4"T\W(!s\k&WiE%uU^[>1rW!-0!!!6/!!V$U#6=f,W;uu!!W +"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$ci==U!<<3+!!WE'rW<9)"on`. +)$$J2V54@rTr"]]V#^T#"TSZ*!!<3'!!*?(!$D:C!!WE,!!!*&!MQ?gVkg3k!!N?.!<<0)!X\o3#,A*j +!&b/a#ltR/W26Hn!>#5A!!!9)!iVilU]:Js"onW1!!*'&!!<<(!r&^!1Ct0!1gb& +!3^Z<^:)"Lq>^`+^U1b@U]A'<^o[S:YHPV3 +!!T:?^TkeGh>lmB!4MY&s1/+/bl@eH\@CZ$"T\T)!!'Om!"Ar/"1#5@ZF-q;!OB/>"1,>>"9&:([Bd-E +ZN(@5!OTDE!?6\[):A[B'?3!!0O;\,`tIYQY(/ +!!!-%[^WZN!3Wl9T!WW31!!9a?!Wi?%!W`9& +!k>bN\,d0A"Tf#3#R1:>\@B,[!XJc7!!3?)!!WH)"on]1!4o\M\%'$M!s/r4!<[^<@B!OoMC[K3e?[f?H6[Bm3D\?c#4)7HgP!<`E, +! +Y-"h+!N(U]pr(!#h#Pt*$N[4-!<<-$!!'!t!kJBu!"K,3WN#q%"98W-!!!3'!VcX! +!N?)#!!*,9!!rc.!i`,m$NL@+"9\]1!-"Ter1#6k2-W=u;2!sS`3!!c#6Or+$NL7+U&tGs!!30$!Wo0oV5+,$!!NE0!LbW\\%e?"MV"K]=Ik?!klOOqZ%kdRa8=P +_S*2S]r8])[!!'C0!!'_$!5\^9\bZ=+\]Y!*!!0IHli7$r_Z9B1!kH".rVuqriW'.I +!!'4>Z2FY,Z)l3W_TeAB!!0m6p](E,Z+dpG!!L$E[(j0@!!^DZT=qMB!1([=VZ6_1ZD4l/_Oo$P!3*iA]Vs)Yqu?c?YPA/%YJ.9dVnV'hli7$o +p](?0Z2OaJ!!353\E3bp!<<0$!4_7n%LN1>!WX1?[Bd6LZN:-;9!bk7X9&P,#I1PBZF6b7!X#g?[/p=< +!!od;Yda\?ZEaP;\??ROZ2am4YlXs4YdLpC!4B-5ZEgpHWXo43"Tnh9!OoYL%KHJ7rW3tG\%/[B%0HU9 +[/^14]!efPY6=n+!kPGBYPtpCYd+Q9!!9U>\[K#V[CH8@&coBE#m153!rrB&!<<29!!NB'!WW51e,\>* +$N[a\?m$]Z+U,=!!36+!#YjJ\?GuB!WWN0"gtWDZEjbGZq[P6 +ZF0bD[0Y-kaBXLP^F[^*te!!35$WTF0a!<<3%!3,2_"UY88"p#VIUTCQ"WN?@, +rN7'7!seu9WiE5(XJ#_##H=i+"9Ju5#H=i)XTAF'.0clUW"c>8!s>[*"pM-.XKAH&XK;Q+XfJS!&dAFB +#6_.2Wi`<3!W`T+"<";BXeu1/#6Cs0!s&b1Y,JJ%#Qk)1XJDnrriHO,XUG@6"KAN*XK)W.X/l=+&-Js< +r<*9(!WW6$!l"^=!<<3%!3+cSeGosXW1$N^S8#QQ4U!<<-$!!N)t2Zj$`!!<6)!!W]2"9no/"9>J*!!T0sWMu\mWi2_oW2ZknVlKdt +!1Vka6n40G]eXf8J*Xf_p1#mRN4XK8Q/%06Y8WNE:u +XfM[-!=#O*!XA]6!X]2;Uo=WmX/`+n!rrB&!"9&5"PEbb!<<5$!<<*#"onW,"0&BE!!34tUuhX\!<<3% +!2]#^rW%*H!!NH)(7V.pV4j[e!iVlhVjmem!X>?lV5'iS!X&Y"V4n"l$3:@(VOsadUnjafU8OUpU8%bk +VP+(oUS+H\TE(ga!MlKcVOJ%u!X/]/V?3KiUC.)&"Tnf-USOcY!"/o0Uo"1n#Gn8iVk=4q!!B*gUS.U` +!MH2,#Qk&/Tr+Z]V5'c^!!Wl6U'1W#"9SW*!!*'$^AnE#'!!WJ"!M!!LB`Ra.`-!!C9%ZD@K8 +!M?h!!!fLAaLAmeY06bD!3<:'!57h$_>jSHq>gQ+b5g/p!Pc23!!'RI!71]G_YsNGVS0^XVS:6TVTl3I +e!6oXr;Zr'c`skS!!B@X^7G$!#J%aNU=u9U[djD'`i->8!4e0Bp](B/]nH4^,/UM`Z*OGG]mTmcaoKr. +!0dJX^Xo/5#U<`Q7#H+p/MpBAFQf8#3!!'J&!!0Xb +rW(1C!WomAjo>Pc!!3-#\Edoa\,cU1!\$WaI!"]8<]"#,Y%fue4!!iQ)!kPbNZjQlG +ZF[CP$31&/":,)8$ig83\@]A[#Qb">\,ZLE!"K#2$FI1P\.\lE!!*'"[B]eCYHbI?9bXk:YnjOLZF.!G +YILmNYd1U=[/dM?YdL\>!"f84!OB>CZ3gR9!!iQ+[^Cc!!iT*!k872!!*'(!Xo&/\@)Ub!!35$WTF0a!<<3%!3,2_"U"i5#6=lM&d8N=Y,SS+!t& +!WM]b!"0DY-!A=!<]7%XK2g5#ltA7#-P)1XJr<&VQQ^% +!'T`Y9'!!`K,WN3"sWN#q+!!3Q0f`2N`!!B2$!!!$"!snr-WMKgB!!34tUuhX\!<<3%!2]#^rW%9H +!!`Z-!=f27TVnH\U]:IlTW"Q^!s#6sS#N-\Uo+1nVkKjg!N2QfUnjc\Uo'pi#H+F$VPaNkVkKsk!2uXo +"9YHqV?ETfUBL`%!!NH*!26*bRKW`m!W!TU]g`#T;\?ZW2-3k!>>GO"f%cg +Vk9iU"K&#hTE##pVud##!Wi]1"on_=!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG#u!"T)2UnA%p!<1#,J/p +T`tPuWMBLo&HE1>!skT-Tr=at!$SHAj"!!WE*Uo:,cUo+2#!!3Q0iW/`R%flY4U]CGq!<<3/ +!!&gh#0HrG\`!Mg^%DBl!&g:lU!!C9HR)et%$-/CWSH&Z0PJ`m^!!BdTbFAJ2!SagR!!AUUcF3QL+iUkie!?uH])]1*W;rL%YJ73S +QHcVmW2mRs`;m*UVS9#+!!A_>X0)3u$-0`p^8/sQPhM/r!!1W+q>^]0c+^Pc!!3-#\EEo%#QXo8!<<0$!Xl3:[CBbR!$NL4=[C*II!"T/3!P5GAZF-mH[BBS? +YIU^Equ@G@Z+79G]*$N[a>\\@9&R!!P5bP\cE$9!!*'$!tk^C[_0$K!Xf&0\-r?= +!=Al.!!*''!#>LC+TMcJ#mdrK$O$S5!s&J2\@]0N!!!Q2!WrM0[/d\C[Bd/6!j9-;YdL[EZa?sI!4&r: +ZFIBI\[/RBZaL#I!!NT/!4B;DW>GUI!rr<(!AX]nI$-N;M!i`0]!!NB'!rr>#kl:kf#R(5<"!.II"9o=7WiiD)"U2$2WNE5(XTeg. +Xfe\*"p;!/Xo>CMXT>Q,XKJP*Xot`+&uMW1Xf8G)V?X0%!?)!@XTS[-XfMO(#6G/4!WK/SU91Ku$3:71 +X/i<+!=o;6"K\K&XfeY+Xf)?&WNN&"!rWhTd'O?#7(;1q#CU"Wl!WW3/!Pc!!<3$V]mW;m)%!WW<,!!9'oV4jf\%06G3iW/`R#QXo-U]CGq!=&P$"/;ib#Kd&H +\`!Mg^%DBj!&ULN`O`S[!3sG=^V-td!!'RCZ`(bA!7&j)\$+&h!5Hp`Z_,R]!2@"(Q(e9%VRt!8!5#-- +!!]^3!!(?jXni#$c+hMS_Qs+?"37RF[/0h4c'?)L`LY>jR/jOgc]/"Oqu?u:WPHB=gSCM>!!0jZrVuqi +Y5eR9mf:3)!4hq+s1-;QfDl,Xk'YFu[YXGR!4fuIdf9Z;_p+OcYH5WprW!"QgVEXc#dgMYVl?TpXK;C$ +"2h7c_tO-5S#OZ3qu?`(oDes+Z*sQ1!N3=$!!B.4cDgU>+fi?XbItWn]`=>R!2%6+cEk3_cN(#PYH,pl +S]JIU!40T>!!B4D_L)%X"gcpR]um)J!!9l^ebB+JbItTdc(!krli7$oquH`3!he\'rW(1C!WomAjo>Pc +!!3-#\EEo%!<\,ZT9[^WdI"98G0Ym@S;[]d9HYICsG +Za-d@\HB%F%'QnH[/^34Y6kF:!!E9%[CWXD\%9&X!!Km8]X\(H#ljt3ZF.3J[1E\G[^ELC"Tu'9 +[C**$N[a*j;oUYdLmE +!4/u=!!E<&!#5J>YdU_C!!9C3WriD'!4',?YHe<5Z+7IH!#kl:kf!s&`5!F?'5"p=r5"/i6$Xf_g1Y-"k/W!*A1!N`B)XT8R' +XK/E'#6G"0WXGi+Y,SS(WNE>*Y-"\+Xp:l,%]HA0X8r@(V[Nh:!XA`.X/r3"XK8J(!=#WuXfV^0$ipL5 +XT#=6X:bOA#HY)1Y-"i-#R@H5XfhZ)#He(6"9SZ4!=]bG!s/K-X/Qd7!<<3+rVus$!l"^=!<<3%!3+cS +eGosXWh!!!!9)#lt%# +WN*!!"9\u1#6b/1"feQ"!!r`-%0Q[1V5aM#"98W+!33#u!!E<)#,J;r"UYA;!!3-%riH5,WN?*$!s,O+ +"obVPV5^T"XoYZ%*3$*CWN<2'"Kef,!>J@Wi`60!sYa,U^%)+!rf;4WN?C-TrG$l!cUS+B["J2M!T:i0[!!&dc#mLS7"TSUu +Vk*m`VPBmd"K.ZdV?-l+!!8sjVPg2c%KH_:V5U2fVPX=t"JVZgVP9n&U8Itp!s/H0!"o>7!<<7sTb.;* +!!/p!!rW4!ne\q@c"h^nOc*+k[!!U*d]YhM'rW!2([_Tk_^9,^T2W5/60!5AQJ^\e'5 +R*MZ+!$f+Z\H&27]Y)Mi]=S'f[`jl)bd5.dc'8:)ZaQaF^:OBUYHI[$!iX84rW!"l]o2gh$+A-kUosau +Lq_.,!!LQ\WO\S`!:0[c[eKh'\\S1Ebl@eH\@CZ$"T\T)!!'On!"K&3!rr<'"9SW4!=/Z.#'@>[[CEOC +!4]5=[]KN0#dq"E]sS!O\@2\C"U)'>YdLsG[BI$E\?E3D[(3NKZF7%=ZF[-G!!TgAWWE/(!XH!?[_)_C +!4oTDYdh7E!X&K'%C3OPYI=K5!!<8+[B@!FYd_3LZF@-FYQb72";:b8%fuh2!!NE+#e%=M#nI%:"TSl2 +!!!)8!!NB'!WW51e,\>*$N[a?Q!!39.!=T">[(*dL"p26E\,ZN>[($>A%0`rJ +Za.!FZEp_R%^<>@ZEgY=\$<9G%C*AB[CH:IZEpmC\$NRTrW"PS!P/75Z`pVAYI1^G!!30$"onY7Z2k-= +\,l^3"TS]."p+l,!rr<,[(Pc!!<3$WTaE^"9JT) +":557!=Jr8!5G7!<`N3XK8?1!WWB(#Qk&,"2=g>!<<3%!3+cSeGosXW]!!<<'$31),!i;roV5XIuW<*/3!!E9%"T\c,"UV-- +U^-u$!!WE'XJr8"WMlhuWMQ]s!"o83"9>I'V5+7qr;\>N#lk,/V5(&mV#^Pt%'-A+"98K+"T\o1WMQSq +!!WM$X/Q(!WMHKs!=B#MW338(Y-+k.W!o]-!j/T($E^>1Xp_83!NiL*riH1'riH[3%06M3"p:q.#Hau) +%B09.+TVcM!XSl.XfVa2W2Tk#!!N?,"9nr2!!E9%#G\Pc!!<3$V6oSu8?U +VPU#_VPBlZ"U,hH"V(S6$N^A0!<<*%!sYNuT*kZ""TSf1!!!,9!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj +!lG#t!"8n'SIG]%!<`B,!!!B#!!WJ"!54!!!0'"onf6Uo0ml!<<*(!!'!oVuEJ(Vl?MeWW3#3!!!*$Vl?Da"TeQ%+p//P"TY9iVl??j +!!3S-Une(m!X&].$3@#tUo==u!huWi?N:)'Tqhkn$3d*%US=W\U8+@gTqqdbUS%ghTqe@iTr.mfVuW`k +USFW^US\D!!e'YJ8Ah!!(f$T^nel[ +cC);Q^!X0eX2hXK]@r@a!!('lJG]BLVSBFirW!,I[fDT*chd\FYL1(PbPV>EW5+\BZ_knMaK<(tZ)sto +!!9INT!/1p^$bs8 +WQY@We,[b*\[/ok\\J"A$GQQ@]V_5"RD?JZq>^]Q])ViE[djD#QcI@FklC&M!4MY&!L:q/!6kKF!k>c& +!!NB'!WW51kl;1p!X&Q7"98Q/!!!3,#661SZFR*H[2&`Q[]d3IZN(!2[C#QP#.ZEh!D\$EBK +Y-kRA[f3Q\[C*KJ[CE6JY-YI=ZF.(?!!iS5\?Q/>!!3-%Ye@7B":588"gGAm>#dOL7'*&F@"UDaA"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlOFs +#6=t>])r$8#lXl."p"]*$2FQ*!Or.2!!*,8!"K/4!!#kl:ki"9eo<"W7@F#6=l2"pb54XKJG&X;1pNY,JJ)XoSX+ +ri6=,!M6Bn$N^S7riH1"rN/nqY,nb.XfSY,XKAM*XeMtqY-+b+XKDR*$3I?3V$.#("9AY$Y+u1(#mUV= +WNE/%!sAW-"K\],XKDT+XfA>&XKDU/!X&N4!=Ai1"U4u;&HW.=!<`Q,X/i-$":kJ=!!WV@!!NB'!rr># +h#Pt*$N[4-!<<-$!!'!t!kJBu!"T)5Wi?1%"9no0!sSc+!XJN$"p(\(!<<-$^AnNC!!!-*"TSN,"TSQ' +!3#m(),#-4`%!3*#o!!!0*X/Q./!!60&Vlm#%!j8Z. +#-P*0XfSW*VZO#u#HY$.Xf_],VQHu'Vlcbo#6b,4XK8Q*Xfec,Y-"f,"UD03XofZDWWiG-"9JW5!!`K* +!!`K,"9AN/#-"T%WRq1]!<<5$!<<*#$NLG4!3<(%b5_SFUnm,Q"T\T*!!&k^!<)tF!WrQ-$NpJ5"TSQ, +"pP&/U8OQ[V%Nh=V4XZ\UAt@iU8+H\!10UX#6>#/Unjo]VPBraTVeHZV5'c\VPU/`VPfl^Sti'RUSXgf +!=&Y&VO[hm!4]T=pl/qu@#:^9O`f!56OS".I`?a6Wd-]Y1/H!!'_$!5\^9\bZ=+\]Y!*!!1?ali7$r +_Z8[^*=A[B]eBYdh*I[K$3U@!=8b;[^WZT +[K6F1#HkMCZ2at,"gYPAZF']5\?`EH\GcI."TAB6"TSZ*#71A6!WW?'!![C-&E!4&rAZ`jK8!!'@6Z3:66Za0`7 +!!N?'"TST-!!3-#!s\o.!W]g=]"?Vq#QXo,\,cR0!Pc!!<3$WTaBd!8 +!s&r:!W`E-!sG^+WriO$XIfY!]`83:!!<3$WSIR)!"/h,!3W2cht!!Q!"-0L];r^I!55SJ +ZN/87!!g*<]Dqr!eV(@2!57h$_>jSHq>gQ+b5g/p!O'E-!!'RI!87DUWO]dYQi$g`WU^#i^9R,,#-GVQ +]saoRm/R6ibJ(mf!;um!Z-Ad9!&0e[ZiC*3a.g#dPlS@se,[:d!5H2I!3#sablGMk!6;&=Z-!'@]>1Jl +ZFU#9cDeDS!!KL<^:^EC!!g'PXT/@5]X-u*"36nH`p3Wk!!'J&!<9V/!71]T!WrH(] +"9Ac,!Wi?%#l+H(!<<*#\,m6B!W?!YdLt@YIV!E$*^nI!4K2;$iU,?ZEgh=!!<5/[AsK3"L>P@!rr<-!<*#o!#5_?!!Ta>]!qeB +#64i+!rr?%"onW5kPtkh!!9Y2!!!$"rW!!$\@Bc`%0?Y5!NMjs"p"]4!!WSo!!NB'!rr>#k5YSe!<`B4 +!S!=Aq3XfSW-W3*0(#-P&1!'$j-_:"onbq!!WH+"9J]/!<*!%!!!$"#j)*j!<<3%!3+cSe,TrX"p"r3!T-Xf8H*Xf\S(XTGK) +Y,Vo0Xf_],Xf2a4!s,O*XTee2"Kno'#m1F7Xf)@&!!`N'!VcX0"Tn`.V5^Jn!s&Q*"98Q)!<<<(!"7uj +#6=f,W;uu!!W^&.j=ZaRTY!1LU:!!'@-_YaBAXiIWE!!(0BbJ(XirVuqkli7$or;Zu*XN%BX\,ZNB +mf:3)!5SF2!Kt^N!8%8P\[Li)!4fuIgAh>h]uPX!!!'Rt!!9UPZ1@que!%>cQ0\JR[&LFJ\+]n$!!9FM +Y582PRa(o6YIsq5`MijJc2[jH`;m*\!!'k9_Sa']`;mQ`VS9nIUsHBH!2%HP!6VpNr;Zo-X1eH3!l`-= +rW!#'cC4)""/!!EA9\%DXL@CJ!"ZE>\ZiONYI:sMZ2b%1$3@TI\.&HA!Yn-m:!e&j[K%YT]=YP^^9I\F +!!3G6!:p0n\@;S?!Up'n!Or.2!!*,9!"o;4#6Or+!WW6,"98E3"T\T4!#ktJ%0?M1&-*?M\@K'K)up!J +!sS`+\,cU1!ih!>)EH]['0f=!!!K1!XA_8\?u;:"0]09Z`jWrZF-t=C\@]?Q#QP,1#QOi+!!<34 +kl:ti!!9Y2!!!$"rW!!$\@Bfa%gE+9#6CL"WMunuQQQ80#4DNq!<<3%!3,2_"Tec+"oniS!WiH7!sSc1 +$O6e7$igD4XJi2!WMlVlXJDp)"/i-#!=#R,X/W9$X\Gf$WiQH-Xer2%Y,\T,%]ZY-Y,q`-W3-=,!j/Q, +X8rD5!=,a0XK;X.$`^>*XKAW,$ipg?WNN5&%B-A1XfML,":,%+X/QF,"9AQ.q>gKp('+C8!N?/$!#h#Pt*%gJp3*LWq-W2Znl!=&T,#/1*& +!!K:#!WW8j!!WJ'!4!X8W-!!0.$XfSV&"p>)4 +!X&W.!<`T-"g+o&#R(50%Kch@!NW?*#Qb#3Vl^-)WX8[+$j*E2X95R4XfAM*W=Ag..&R3MV@!>/Y-"Z2 +UTP"+$3:@4Xf_[9!s,C'$j?\5Xe2`t%gE"<"TeAu(BjjB#6k>:WMunu!!WE-!!`K(!WW?'%-[`s!<<5$ +!<<*#r;Zm#WN"/C%gE+9#6CBqUnsufP9Bo-"n)Ep!<<3%!2]#^rW!c:!rrK)"Te`-&-E+;"q(Y=!"8i1 +"0&)prhNnpV5U)`#QgWkVuQpnVPBc^VPU&]#,.aoVP]oYUSsl]!Xk^"S>i@cW1^!i!Wf'oVP4%l$NL@* +VP9jg!XGErS>E*]!=Af7US+NXV@&ukVl$0g"To#2USt!r!<`E(!XAB!('+C8!Mfet!3!X8W,!!0!oVPKuZ"p+o0!M8"U5#&!#Gh@!s\u6#,S/oVuR#%"oni-!!3-&!"ADup](O"!!B"t!!!&u +!!34tUr`T@MrV"Ja3A2X!!'_*!8dc2dB1^)\\4oTc_eDV!2lXG!!'"8]Va>saK_ZDW2fpAb*8s1fVktR +!3+8+g<0KGR`57+"0p1hX8Dr"[)/lWrW!,#^QQ=GgAM!YZ_Z!@b5e!:cHE9f!!E9%WQh^8!!'J)!!\8. +IK0AmMnB#i^$bs"T\T/'`\:>"7H3n!<<0$ +!4_7n!"B[^3BOYHtODY.CpAYIV!E +[B@'EZaR9IZ`4Y@]!;;A[Bm0A[^,r6\Z`KMZ31.-ZaI3IYI=K5"g>2@Z*F`;YIq3I!!!N0#65"<]=>e#e +\cVpK#m(,2Zap,>"pD:5o)Jp'\,lX2n,NXn\,cU1!>7 +['[BTZiL47!X])2!!ND5!>!W]aWtYC2(q$fUZb-8#kl:kg!!33(!%7jM +"98W+#c+L$!!E9("onZ+X.?>bX/i(rXK8N,WNE/%&>ZG2XKAE"X\>UpXJr/$XfAJ%Y,\V+XKAUu&uMh6 +!Xc'3XJr>(!<]L(XfST/!4Wi67*!!NB+mf3at"U##0"9Sf5!!**+jo>Pc!!<3$WSIR)!"K+2"99&>!W`M#WW3/+ +"MFg#!!K:#!WW8j!!WJ'!iLi!!WQ."U>84"9tU!Uo=A!#6:a)V5ae$"onu1!!E9*!X&K+Wi3!""9];= +$NU8:"9B)="p#.7W2Zr#!<`i5!=Jo2Y,\Tn"p(j/XTP]-#,JB'%BZY4"K_^,Y-"\+WN*)#Y,n\,XT8k8 +%&pA)'E\F?!t!#5M:"98E'%'$5!W;m,'!!*30"onZ*kPthg +!!B2$!!!&u!!35$WQbDQ"9nu/Vk=1o!!Wu7!X8bq!!NB'!rr=tli@"bHNF0K!WrE'!s8N,!!o9s!!!-% +!sS`+"/qZgSZ&K]VPKub"/)E^V@/okUSXl[UnaiZW1orWVkg#_TVnKYVPU&_R1>geUB(UsUnXNZU]:Io +TVeQ["TSV!V5C#\V>p`&TV89WU'^mnWMH6i!"/c2!!]6tV5+.n!s/H("8Dj4!<<*#U]USt#QOo4 +VkaS"!!NB*mf3at"p5#/!s8]4!!**+jo>Pc!!<3$V<.d%!"K+/!rrr=!W`ItVZ6i("NCH#!!K*n!WW8j +!!WJ"!.&Tr"Z\!84!sYBnTr%ho"otL!Tr/1s"onu1!!E9*!X&K*W2-0g!Wii5$31&5!WW]7"onq+ +T:`'V!!4k_!<?sUB73d"Iu9b$DsMo"/Z'nVl$)aT:r0VUSal_V>pr+$)"/c&H2_L!!&mo +TVJLf!WrT+"9]%(USs[o!!3--!!<8s!#5M:"98E'%&fqlU]:T"!!*0/"TSQ)nGr=a#6=f,U]CGq!WkiS]h!4$DaZGWN?.#Uu8ndqu?m#!3FGMXR6&g[e9\%^otBN +!57h$_>jSOq>^P]^rl`1!!0X=li7$r_Z8Qo"IPpt^S^`*!4hIs!d_Q"p&G2Y]r/UC!!BLTS%nOp!lh=N +o)Jsp!5P#"frk,N,L`Tp!!(9\YlM>H!04_,!6_=\!5nlJ_n`.eVPq_;Zd$4j_#467S]Zlf!!L*TS[mhW +!!At+gl^h$"3.ZF-pE[BdBQrj"u&Yd1^DYd1RD\urNE +$+I7JXgtjFZFd?KZa'Q2ZFREH];<(EYe%6C\[/IC!4',BWjDd0!WWB-!!Eb:\@Db[!!!9)"o/-%!<<*# +\,m3A!<<62!WWH,!OfQ>!rr<&n,Nk&!#5J6!=o/6!a!!3-#\C:N8!"&eP:ZFIIK!XJl."LYG=!!NM3ZEP%JZN)tp[B9b8[C61G%C3ID%^<5GX1P^D\?rQJ +'*&4:[(*=@!rrqB['("KYdLq?!#kl:kf!p8]#6Y%+W2ls% +$igD1!#knB!tM')W1=+pW32qs%'6S6W3*5)WN)r"XK&G*XKJ\,XfSY(riJGbXfSY-WNE$+X0&M#Y,nb- +XJW/&X9&F)XKAJ)S?<7!XKA;$Y,M[/XK/LuXT\q3!!NQ,":Cm&Wa!!<3$WSIR)!"&e,"9\]*!X&M&Xo8;$!="TSP%XJ`*)!<<0$!1/W!<;)!!iS(X/N#u"pP26#,A2t!"/i/"pb;2$3181#,S;t!s\i/!sGR)X9&V- +"T\`1Uopg&V6-g'":524"g"])!C6tpY,nT:WicB)Y,2Q%Y,h`,$a$P+&?2c?Uopl!Xf\\$'EJL@Xf\Q* +"p#46Xf)i7VlQp#"U"r?!WiY0Xeu7)rW3$%q#D04!Wi?%"qL\6WiN(s!rrQ3"p"l2!!;?a#6=f,W;uu! +!W2!<9trVus"!lk<"!!K*n!WW8j!!WJ" +!p]#!Y#/2#6(@u!sSZ)!<`N#!#>YT%l^%DBj!!BsK_nu*I;Nec-IK0A>gQJ]>^;%"Bc*P*\WM[;AW5?b+d[(gAn+h^lI'RU]:Cs]u#94qZ-Tq!g:72mJm6qp&G,l_RojK^$bs< +!!'b0!!0ghb5g/p!P,Z*!!'RI!8mhZ[+hS)o`,!&kPtXj^&%d3[b%V*qZ$\_bIR6F!hd9@qZ$\hgV(!$APLV?!U%!7&HH!/nh1!42a0bC]eeY5jL8Z_PORXd8nc!kljNr;[)*]pSl< +Vlmo4!!9U6WTaBb`l#L'n,VeT!4MY&s1/+/ci=OV"pt@;Ym^U9"pP&/!sJ&m"T\T)!!'On!"K/5"T\W( +!!3-%%CWgW"(_H5!!iu5!Xo&/"M2+T]">ESZa[ELY5kl?YHtRDZFd$3gOHR +!!E9*!"H6@\?u>?$3C4;\$37?\uiUG!!33.[BR$H[/g9:[^6%E[0%DP[($+C\?ZXN$EghIZaI1@[]^=P +[KVbb!"K#6#QU]o#lk,5"on]-"RccM2W3*2)$3^pA +Xf8J*!s\Y),Q\e`Uog`#Xei*'UTU]"V[WY5"Te])":bD6!s/T*!!Wc2#6F`&rW!3)!!!&!!rr?-rW!<6 +"98Y+WrN,'"TSbs!"T,3"Tec+!#26/!<`B*!sduh"T\T*!!'"S!7_&Z!iQ/##6k50$)"*p#R1=C!9sOe +WMoq!!Up'n!N?)#!!*,8!!iZ-!!N?,!<<*F!!WE*!!iQ5!!!-%$`0o)V5+1p#Qt,0"p+c/!Y>!XJf,&.&?9XK&6"!!!25qj!!NQ2!!36*mf3Ll!!<3$V3$31&/ +Vkg8hW2'QgUSOZV!i)]cUSOc^WLfl_US+KUU8F^oSti3VV5=;pWVk0UcS#<'VT*kW'"9AN'!t>54!s/T*!!NH3!=&Z$!!iT*!!/kt!!*B)!"0/;!!]C#!!!0, +!!_rn%fub9!WrE&'VVE*"98N+#Nl'j!<<3%!2\fXbQ&+SU]LN$"TeZ2SY6#h"p)^Di;a"VU]LMsn,NXn +U]CJr!Z'GBugQoC_b-BcgZd#bN_Nq7;]E"8+_kP2d!4f_RONYn: +]?7JZ!"?EKU>)pQ!5Q7U]W\dC!"=e!YJSYO\c@T8^:L6!s/N,!q$$l!<<0$!4_7n%Kuh4 +"UbD=!Wio8]!_SDDu]kK!!!W3"T\Z)!0T!"Ao0!Xf&0!"Ju?!WrE1!4B<=!"AZ' +"T\T'!Or1C!!*'%$NgD2"ou6A('FU*$3IdA!!3-# +"TZ'ErVup!ZiK[t"LtrC!!2Qh"p)47!<<-$^]4H@!!!<(!"0#7!!!*$$3L8;!XK_F\[],Y\?lG?!!r]. +!s/H(!WrE'!Or.2!!*,q!"]/7!=&Z+!s&E+!"HQM]!SsG\cW-_K +"TSQ'#lk,3$FR@O\c;^3]X>5T#lt&C!XK)4!40)=!4K>A%^!%B^9P!E4h8&+\@JfS!4DqEWjT.=ZN@\C +!4]Kp8ZiC70ZF."=!XQ-E!WWB*!!!9!!#,b@!"8o/!!33-!5#bJ#7pkS +!WW\m!!iT*!k872!!**!!!353\BP!R!WE'"X/Z$t!s8T-!q$$l!<<3%!3,2_"U4r,"UG5T#6P&:"KJ9u +"TSN2!!!K/"T\Z)!*X0&N5!Ws,>#RCG4W3*0&XfWnN%Ag/.Y,\T)Y-"\(Y,JE&X99?6Y,nb-"0Sa,XfDQ+XTet>VZ!V: +!='+7W<cF_:8=DVVP'f^Vkfu`U&_*gS>N0Z!McEfUSjc^V?-u&!2cZgV#gXqTpr!U!i;a"VU]LMsn,NXnU]CJr +!7:S+6OZ\`Wqt`kB-VXi&#no)JoJ`iRddr;Zo&Xf_?u"09/Kc2I\CdK6Jn +ZhOMJTYRf4b0$abOfc(QWOr5YbGMSpR`tiD!!%MfXh;1Ee@#@m]`>7LrW!(cYJ%QTrVutuTDeflbFcKI +!!8q4Zi0q*ZchJ2!lhU7nc8"V!4MY&s1/+/d/X[]!s&W2\?uVE!rr<)!!!8m!!NB'!WW51kPu%r!Xo,1 +*!!JM!!!E2!`&q+!!*'%!WWB(!!*W2"Tl3@]!q_JZF7'IZ*L[CZ+76N[^**EZa-pJYI:XH\?EPc!!3-#\C:N8!"T.@!<`B(!!!>5 +\-<0=!sZ.5o)Jp'\,lX2n,NXn\,cU1!D^!5&0='bp]P"T\Z.!WiN* +"on])!Or.2!!*,q!$)4E#6Fl7!!ii3"p+r0]XPJY]!2JD!WW<*!!*'*rW"/M!!!,2\c;iB[(EpN"Te`/ +!!3K-"98G3!!WG0\@A^G!!!?(!"];:[CE7@!3ia0Z*gp?Z2atDZEFbHXTA\.]DqrAYdLjD$E19EZF9kB +ZMjh-[B]tDZFTr7(C(!A[B6gHWs,o:XLS?3!OK$E!t521"o&''#QOu1!!*B+#6"T1"gkkNZP*'XJu3#('XgE":5;6!=&]-"98H*!!NA%WhQNuqZ-Tq(BFL9!N?/$!1l!!NB'!rr>#h#Pt*%g&^2"98N(!!f@""pG#1#/1*& +!!K:#!WW8j!!WJ'!/5!#-#6k@4XeZ1&WC+XTtu1 +XoSY,$3gO6V6-nr#HY&'Xp"q3Xe?7.#lt#0p](R(!!EE)!=&T/rW!<0V5pSj%fce<"98Pg!!`N)"/u;$ +!!3#u!Wo@#c2\@Z!s&T1UnS(q!rr<)!!!5l!!NB'!rr=tli?ta1Bmpg!WWu9V#gVs$3^J6#QOl*!s8N, +!!!$.!!NG#Tr4ag$DODmV4jWXVP0o`VPU#[VZ*>XW1Tr[WMcDdUSk#bVPC#aT`kOkW1oWV"J_cdVPX=q +VPC#`USOji!!&mjTqeEY"9AZ-"pFu,"p4l/!!*3&"otNu!hZCpp])*2!!!%q!rr?+!!!*&!sSi-"p5#/ +"98Po!"K&1#6G#1"JhllVkO;$!Tj@c!<<3%!2\fXbQ&.TU]CSu!rr<+U8.tt!<*R"f8#bVZQu&Un&"u$3:,1p](R(!!EE)!=&T/rW!<0Tr4`[%fcb;"98Pp!;HO!!<<4t!<<*#r;Zm# +Unl*4!O&0T!!'_*!:9adZ0MBSZ)Q!`!!'.D[`>ALXh^p`^!"HsS\Ve@ZdbDcRbc5a^U_Y-Z+mid]Vkf1 +Uti(td/^A`WQN?`!6VXbYHbb"rW!,H\uE0Q\+Tgu!!BsMPKi\!!4LJZ"L#)G^Souh!57h$_>jSHq>^Ph +YKHpu!!0X=li7$r_Z9$'$Ydl5TZsje\\5A`YOMSm\`EepdB1HS^QJ!c#IMMO!4eH9bOki8`r5r=TYLTJ +ReHdqY0Mq*!2d"$WPuN4Y5eR7U]A;srW!Mb!!(9@_S)uMFh%LIZiItOrW!,@[K+(Nchd\K`K@j_MZCK' +LsQ&#!PF6M!!At5[$C7`li7$op]1?)rW(=GrrW0"$G3hK!XJr0#6Y#.mf3Ll!!3-#\ENu'!BG!!NB'!!0S2 +&-)_2$31&/"98H&!!W]1!!;Th%KsAO\-N'D!!3-%!!!'&k5YYd!!3-#\C:N8!"&e;!<`B+"Te\7]D_g1 +!jr%"!!KgA!WW8j!!WJ6!'!NiE* +riIEJ"p"b,WiW,!XfJD%!=Su3!W`H,!!E9%"TSQ(!!E;%Wi;up!<)s6!<<*#W<3,$!!iQ)"9\]*!!!3. +!rrGl!"K.3Vl9k#$31,-!rr<&"Qoag!<<3%!3+cSeGopXW5!!33+W2cVnWN3#!V5XM!!<H'WWiM-"VV6BXfM]/XTem0XT>Q+!s8e+"U+h+riI0CX9#B&!NiL,!X#R,!j/Q$WrrV/"p4o8 +Xf8E'riHP1!sAb/X.9b%"p>)%!##D6!pZ%"TS`0!!;Th"T\T*!!&k^!<)t"!^aV5'c`T:_sTUnXZ^USF]]TVnK\T)t[_VP'i^Unj`\"J_ikStuSjTr+HX!2Q?drhL[5!rr=uUSaZX +VPBc]!"&]-!<<6(!!<3$"onZ)!!<5!!iMlkp])'1!!!%q!rr?%#QOi-"98H&!!WW0!!DZi%Kr])V$6o, +!!3-&!!!'&k5YYd!!<3$V<.d%!"&e(!<`B+"Tnb%W;Zbt!X$ICi;a"VU]LMsn,NXnU]CJr!T%l^%DBo!!@\n +bH1:8!R7_C!&q3tUX+_r]Xtn]Xjj5F^9>/N]?@Xd`Nu;aW5=r&R``FA_lp_cXh=_>^quAW!!'";VRuo@ +YepCP!6>'=#fOEpVlmtNT[!01q#CN3bI"YK!!'I_!!9p7[+>9X^$bs]@,^9,,]]^`8Us/nO[_VhA!kHp3jT#CR +^Whu8!:0[c[eKk&\c)Te!"&f.%gN(:!!30&"o\N&!rW*#!k>c&!!NB'!WW51q#DH?!"8i/!XJi-%KR"= +)?9d?!!E92[( +[Bd-EZ3@bI!4&m1!WW3%!"6$=[K$@2!!WE'&%&^OZF'Z4"TSN+]Pc +!!<3$WVHN/"onr0!WrW.!"/f7!#,D6"98Q)$DSuLW20b"!rrH+!Pc!!<3$V>1*""onu1!WrW.!"/f7!&>5g!9"!!*<+"J[*8 +T;J7b!g9j#6=f,U]CGq!WPU^&YXW[(c87pAb2po)Jd-p&G,m\`s.s['/#Nq#CK)bH^%,!5@n%_>jSH +q>gQ+b5g/p!P,Z*!!'RI!;ca,J^(I6['-peMnZm+^:h=:jo>Cpl2V6k_SEme_moaI[`b>]mf3Nr^;ln[ +^%;:,V7OI;q#CQ$]r&rEqZ%bF`;fnN\H'@K_l1,`W;lpf!!'"DX2;-JYI4GFZiI5?q>^Sh^;KaH"MMLa +YJ9r7!R%A$!!B4!e#2m>li7$op]1?)rW(mW!=B&1!!rf4!!3E-!=0;>qu?d"\@CZ$"T\T)!!'P)!$2.B +!W`?(!!33(#lkM:"TeZ*!XJk>\@3(N!"T&5!$D:B!"K#1'=>9Y#QY/1!"Ao6!$MBKZ+.(@Y.1mGZEgq7 +Z3RQ>[B[-A[(,q;7CTQ&#I:tFZEOYDYdUaE!!'=<[Bm*C[C-2L!!3A1]!h_@!XJf0!W`9&!doa\,cU1!9 +"U+o,"TSN.!X&E%"LtrC!!2Qh"p)47!<<-$huF;h!WWB("Te`*(]XjG!!!$$rW!lAZ+ITV\@T;^XhMXM)!H&cMb7"p=u0!!E>m!!iT*!k872!!**!!!353\D@2d#R:8. +#mLS6!X8`-#7^h5!!35$WTF0a!<<3%!3,bo'`e@5*!<=CXfM`+riH7'XfhK%"fVp4WiW&iXUbF>XK/;%WXQ&0Xf/?)"Ju+"-`O5N +Ws'"7":(m,X98P,#m1A7!<<3&!X8c4!"8i-!Wi`2XIfe"!$DFK!WW3+"JPl""9\o2!!!3/"0AC#$N^D9 +!<(YUbepD!!]0pT;/(cV4a]YV?-giW2?>^USadh$ig>4T;JCd!!3?+"9SZ)!s&H-":"o8!!"GL!Xf(. +SI,At"pG&.!!re"!!NH,"p4i*"pkC1UAtZ'!seo3!!!0&"o\K[!XA]-!rrB'W2-3i!WiH1!6!<<9' +!!WK,rW!(sU]LMsn,NXnU]CJr!eUB.=mUFHHR!WiA#TVS=e"/hal'a"N1VPjJ!"on]/"/Mjq"ptD4!g9j#6=f,U]CGq!WWTjHbcFL(P!!@\pbJ3';!5@n%_>jSHq>gQ+b5g/p!P,Z*!!'RL!!7u$ +^^[EZ^W*s4gTeZ3\]r0*h>dPSm/R?`^:hCbc*mEJ"H`ZaR*YF*",Ob;P5>4\V8TS6!!K:6`5'(eQh^U_ +^U(KJ!$fP"[K$6#Lo3S]`8&MVYpJrU;bj_!!0:J +iW'(!g8:&.!:0[c[eKk&\c)Td!"B/8"TeZ*#6=f,!W`H*r;Zm#\@CZ$"T\T)!!'P)!$2.E!!NT-"p+r. +!!<<,!!E?.!!!6(":5)8!!!0&#Ts0K(]t5D9"1ki@"p4u2#lk;4!"Ju1!Y)9A])WEK +!rr<(!!rW8!!!'#!*$N[a3!Wr_4\A+uS\@&`S]=5AV!!*'"!=o)/"pb;3 +"9SW9rW)Qj('+F;!!!''!"9AN1!!NB1rW5BsZFI9VYe.%L"98E("T\T/!!!r<$,*RS[L*$8 +!!3--!4]JI]!r:S#64`,"M2(J\./N@!408JZO[&E[f?C/&cMbC\$EEF!!*34!!'72Z2h5:]!A_4[]QjC +ZE=6@[K$B8Z37S@]!V$-q!<<22!<<*#!<)s"!k>bq!"B)7"p+c+"T\T+!W`H* +r;Zm#WN#"["T\T*!!'"o!#5MS9!WW3%"9AS)!sel;!!E<'#QP#/#lXm# +X.lSiXe;_c$j6P1"9ef+"onW;!!fQsX/-(&!!!*$#QUj%WN)p+"9ec*"9bg-W3$O3"9PL&Xf)^1X/l=' +!tYM7!NiK*W%.V5X_#"p=o,%fcYA!<<S9!WW3%"9AS&!sel;!!E<'#QP#/#lXloW1TlZX.?2X$j6P1!sJ]*"onWpf#"eVZeVOsZZVZQo!Vl-;aVZ?l""9JY&Tqhtp"Tn`*%fcYA!<<S8\Z=Gb^Vc2= +`O;$3!3uS)\Z5_GXkT8*cDeRnWOBdE^\n-;REMkMVS07\rW!)=cEF:oqZ$]4S%7MY"-_!.UA4fU!!'J& +!<9V/!9!nf!Wio5!!Nl5!!r],'*&@:!!353\E3bp!<<0$!4_h)*X;ZH!!!02#6Fu:!=]/3"h;1S\,ZR9 +!!!Q5!"&]/+9DTE!T&-)b3"U,J<\-rAF"UP23!Xo&4!!!H. +!!3<,!<<3&!WiK+!!NA4e,\>*$N[a2\,lX2n,NXn +\,cU1!%^uMJ]JZ!WiK?!!iQ0nGigq!!9Y2!!!$"rW!!$\@CAq%KZ_@!!!02!!!6*!"T&7qu?d"WN#"["T\T* +!!'"o!#5Y;!rr<)#mCD6$3:J:!!T=%WMok"-jK_P$j6P9!!E?)!!**'!`p!(#6tGB!<`Z/!X&]3"9J`6Vk^AjX98P+!X8o6 +!)#Qao) +-j^:^!rrN/%03@6!2Ti(!<`K2!!WE'$31&-"U"i+"9AT,"9JQ-!3+cSeGosXWnUo+:p#Qk)- +"98Q)!#A!3)uuWMK\!":tPd4jUo!m_1T."@VP^)bUnt#[!N)ZbV4aT] +"U"r9!!Wl=/;br!i2Rm!WrOtVurrpS>E*RVkp&bU'1On!X#*mUn=QT#cOJqTr+K] +TVMPk!!*<.!2cKfU7qbj$_sVmVPTl[!!NH.!s`Z'$S%]^VHnc]uSli!6VsO^8.sWnGi]gL>/$/rW)Ni#*I0"^]4A6r;ZiLp&G02]pn]q!Pko< +!!BF<^:s(:"0hh+T]Q4S\aKO8!!'S+!<9UQ!8%8P\[Li)!4g8Q#H=H!gSUqM!71]Gc1Cu@^:gY3gqC7s +mf3F)cCOq7#HRp(bCnWa^%MF3gSY#OYJ.]ZVu6Vp!"5s$!!(f&][Qo]^:aCE,+[3`c,GgZbEU;dUsuFF +!58F5T?FjD_iOlJXj*i[S^aCHq>^Z6X1t^9rW!/1dA4b%QG34r!jo\MiW'+q^rs!PqZ,s_!4MY&s1/+/ +i;a5j!!*K5!X]%A[CEmK!!!T/!!353\E3bp!<<0$!4_e("9S]-!!3'!'a+L:!X&M3\[9#V%0-V7"TSN, +!s&NI!t29F]!25D!X/Q.!rrB6!!3_>\>ou;"1#><\[&QK\bWN9[K*b>ZFI$Epp(L9[^E!rr<*!doa\,cU1!_="T\W(!!3-2!W`D5]sbJ`]s%qJ"o\K%#Q=c3!!NK*!!3-%!WW6"!Wi?'!W<#j!!*-(rW$aG"98e9 +!!rW*!W`9$[(O#\\[8fW]r_P@!!WE)!XJu1!<`H*!#bn>#lk,9!#5Y@Z+INVYJ%CJ!=o>7"TST/!#QVEEZ3UH=ZEsV9Z3IV@0t+-l[Bd1?'s%H<&$W=IZF^+@[CifK +\%&`L!WrH-!! +"onW*!!E`3nGigq!!9Y2!!!$"rW!!$\@CAq$O$M2#mCA9"KSAuXSr2"%/g/-!i`0]!!NB'!rr>#p](F" +!sAT)rW!?0!!!*(!2lfkX/-.',m=>R!!!3+!<`N2SZAc`!!r]1!!WQ+!t5/4&#l\,%06^9XJi<$XT5O" +XTu!1Xf8G)V69Wr'!/(8Xf8D(Wi<#$XfS\.XfeN*r;doD!W`N."9Af3!X&N6X/2r!!t:h4!!!$("onl2 +%fQG2!Y,5@"W.@FWN)qt!2Tf%":5)5"98H&!s#5.!!&kpW>YaC!26ElW=Jt7Vkgb>"T\W(!!<30!s&P(XJMnrXIfh"T5"Tni.!!WQ+ +!!<3'!WW3&"9JZ*!s.lk!Pc!!<3$V>(&i!s&B&rW!$'!!!*V"9>3oTW"Ok!!WK.!!!3*!<`K2R]33U!"&c2 +!!WN*!t5/2%&'Pg$314)V4XZ\USOg`U^*duVP']^S>Q+X&u)"pVP'c`TqJ*XVP9i`Uo9ger;[f?!<<9) +!rrN-!/6"98H&!s#)*!!&ajUnn%u +!1g$`V%_="T\W(!!<3/ +!s&M"WM65eWLO:t"o\K+"p4r/!!NK7!!!*$!s/H&!s/Q)!s.lk!=nU8.d_UBRHgV4=E[US\#&Qi[@!TV89XW;rTfW1T`\VkTpg"9Sf-":"q) +USO[c"e_Z_%KMurVkO4n!WW<5TqnT\U]UZ/!!<3/!VcWt!s&N+"9&9(!s8N'"JPgm"onW*!!EW0q>g9j +#6=f,U]CGq!W*I>!!9.:NrB"`]=s]\YIV?o +q7?mL!6V+GcB6!>]+M0Ba1n1Zc)@86e%i)l_nFfhmf3R)Pf199!/Bk@"h)FZb5e%)!!'"t!!An.\\7tB +",P"+[/L%,WM[Gs!!C6UXf^gf!6ss4_>jSHq>gQ+b5g/p!P,Z*!!'RT!!]X]W4pO2K`(nt!!&nl!"#CI +`j*7TWQj1Dk5Y^Kc*k?6eZA9@"OF']V7uj-rW!/LVrX.oeB\$n("9!5#SXMp&l=^]4@^ +rW!G#WPbdm!2%!UURfWSX1%g(%aMMr]Dqr+]TiHsJBuNAqZ$bi[`>>TirB1N^Vdkb!:0[c[eKk&\c)Te +!"B&2"ToRG\c;j9!4fTGqu?d"\@CZ$"T\T)!!'P(!$)=H!X&N,'*nWK]sIeD"hFd;!WW3&!!WN;!!3E+ ++9qtZ[^`d_!!*6,![Bd6Fq6DT_ZELLB[B-^FZEUmF!OK,9 +\c;^@[1**:!rr?=l,!],@?]!o9O":DZM]@!"],1%0-G1 +!"&c6"p"_:e,\>*$N[a2\,lX2n,NXn\,cU1!YY;!!!'#"onl8!s&E("TS]+!WiB("9&;l!,rJL!sJZ+'`bTO +!WoX=\@B5^\$WZP\d/99$3C20!!Nf3!Wiu7!!!X/Q(%_/mU]!o;V#R(A5!Wi)s'a+aA!!NK*$3pP5#Qb=C +\@K,W!!3>m!!iT*!k872!!**!!!353\D7,o"98T.&tl9*"9\_(W!E5#!Wo@#jo>Pc!!<3$WV?H-#6P#1 +!<`oA8!s\f0!ir/rW"K(2"pG#.!!0.!!=#V5!W`Q/"p(j'Xfee)poO`+ +WNN>)XfD3!/Zu1QWi`D"Y-+n+Y,ql0Y,JK(!=bq7!s8Z,!s8`0"9S`1!=8f8!WiD)UnFdf!"0)5"9\], +"9o&1!!4!!'!t!WW8j!!WJ'!#jXJr.pW2-Et!!!9,!!E9*$31,/%KHJ3"T\l/!<`Z1 +#QXq)WN*"tWN$.)%KHV4!!30$!#,D6%0?a8Vlfp!&HMn="9AT-"0AB$XfVU.!X#S(WrN?!Xel=/Vl^!% +XelW.XTnq/"K_t2#-=r/XJ??.XT>Q+!N3*&XTPZ+"p"`+*3?6D!Wo='"TeiBW33,&!9o +#Q+Q'!i2XS!!NB'!rr=tp]([+!s/T+":k\;V5^-j!54"oni/VkTu_&c_q9"T\W( +!N;do#,;M+!!NE+!2lB_V50d[U^*Y!TV\K[VP3g]*N,X'Tr4cXUSjlZW2'NjUS+Rd!"5D+!WiH(!WiQ( +!Xf/3#6>,3!Wf52"9&9g"UCa#U8J%m&#cFu +!WWl<#64o1!!<6&!"/c1!s&Q+"p4i-!a& +U&Lhj!!!3)!<*!(!!<3$!WWE)%L*1@!pT#!rrB) +!iD]gUSClj"p"e&U8+FcURhSmSu)L_Vk+9hU]gf""/c>'"/VojV4.jiUB%0g!1p'cV?3Kd"TSN'(S[Y" +!/up]1'h#6=f, +U]CGq!W^]DPd/9@ +ReaQ#Y5k<;^9>\Xq7@6dX-T^/^lYnMYGTd\!4fG)gAV'PVsOHah#`suc0t]>]t)=a!3?0uZ'4h\"/jPF +_#=<8c-;F5!!B.:XNg_E"1H"bOmi>Nc0kYL!!'S+!<9UQ!9O7`dFWibpAb6)[d3to\^1<[^<LQGq(`!3N="!!]R+]Dqr#f_kdPRBr^=qZ$i-S$pA=c%tH]"MVF\ +[&c&!!NB'!WW51q#DH?!!3N.!"T&0\@ArX +"Tnf,"98Q/!!kh?!Y>>\?Rso!!30& +!!'O=!WW8j!!WJ6!ZFI@E!4oT=[Au_+!4K67 +!!*/,"98_8YI1dHX1>AL[^3@B\?E-H[CZDH!k>92\[&aG!rr<7!!!;.\Z34@!Y,24!XJt7]=5D`YR1@; +"Si$6!WWH*!W`B'!!39)&-*(<[(X#Y'*8.GnGigq!!9Y2!!!$"rW!!$\@CAq%flk;!=>R&!!<3%"9bQt +#5nN'!i`0]!!NB'!rr>#q#D-6!!5D9!t5/7 +!<0(B=IC"9tg\!7_&W!N?)# +!!**#!3)q!\cDX.('+uFWrN,8!3)VA!WW<'!WW5"W<*&#n,NXnWe&e"U"i5Tr7qn!!*0(U7hbh!!34tUuhX\!<<3%!2]Jk$jH\6#ljr5!!&gkTr0XL!s/K+ +!!EK+!sJ]0Tr"]_"onb"!Z1Y#GV9pVkBf[V>6oCTqeQ` +Tr+]^Uo'jh!!<9&"onc.U84KXU]:Gt"98T,!W`E*#6Or1"p(HpX.]^t#,;A&2@'R1SLagB!s&H'!2QCl +!!2Qh"p(M#!<<-$hZ+Aq!t#)0('(20Tr"H]T`G?"!!<9+%/p52!sJi2!!!04!!!'$!sA`1"onZ+!!!,k +!+,m0!sT&3'V2,#SXl^YTr+Z_U_*S4!!<3)!!<<'#Qau+&-)k6"p"]-"TSc3!W`:pW26;eTqVOcVZR6m +W2?6j!>>J;!s/Q*U8FQ[!!T0m#657(!WrK1"otKuTa"R'"oo)7"/MZcVksOrW29TmS-o@oU]:Ar!hTSs +#H"/kVPTc\TFmroV?<`hTr4cd!"&h+Rf]O_Vu[#$!"]24#G.l`VuQr.!!<9,"eDTfVl-'k!!i`'!#G_; +"on`+!rr<'"9T&4#lpWtV5"P&!"Jc)p](O"!!B"t!!!&u!!34tUtG_KVS`31!N;ai!<9Ug!!'_*!;lg! +\\4oUoDeu\]u$cJ!!&tl!!CN;Z,cY?#HbbXZbX#-c2"sV\H'=\T=MMHq7@!5ZeNX$b0.6*^oR51"Kf>8 +YJ0K+!2'Cuk*Z,J!3,De"ht&J^jSM])D[1OoYC[!lrfhq>_&?\uX-"!!(cr!5aWo!6;eO!!&Vi!#!8A^q[pDe"QiOZc)piSZ'fKg\q0V +c@Z,GX4-kE".%GegA(^PMoMjCa+i[U"ddcRW;lqb!!'J&!<9V/!8RV^"LtrC!!39)!!'Y/!!353\E3bp +!<<0$!4_h)*WZ9WZ+ITS"ou$A!!3B*#Qau-"p"_6"Tek;\%0$N'*nU@!!`K-!!*'#"9H$D\,cR6!rW*# +\$NLAZMq9-Z3R]CZ*UaCZ*a>45ddo(Z*h!B['BZ9!!WE,!WWH*!doa\,cU1!3\cN3="p+i0]!*"O!!<<3%\%&`T!!<9'!WWD2\@/gH!!0[:Z3.>:[K?L4 +!W]^8YQ+[6Yd+87\2XJt[^*HQ!W]b3!4'&?ZEgmGZF7"=[B9`7[Bm9I!!rY6Za'`7[Bm:A!WrH,!!*)) +\?ECB!=Al,!!s&6!4fPN[(W^Lq#D-:!bo +!"&k.W<*&%"9JQ'Wr)hu!i`0]!!NB'!rr>#q#D-1!>(p(X/#q"UoFCr"TSc/!!3?*!$eHI!X5R%WMoq( +!<`B+!!N?'!!*3'WN2ru!:!<`E-!!*'#"TYC#V5g?r!d7lV5C*bU^!S!TqeBYU%kE> +VPKu\VP^#^U]:Pu"oni/!!NE+!McBdV?-c$!!`Q*"9AQ1!X&K*!H4i!2QIl"JhrlU]L]"!W`?*!!WK)"p+c,!rr?+!=/Z,!!!*$!!EB*!W`K+!"&]6!!!?+!!<6+ +!!<3*!!Jr%!!'!lVkj:l#H+""!rr<'Uuh[$!"/h'!#Unjrb"p+u0!!<7sVOj[d!s8T,!!T'nU8%bi!iD]e"J8;]VZQo%!Wf'kT`>.jT;)C]VZ^N=qZ-Z,i;`kkp&G)T +#0k&Q!!&n:p&G)rrW!&6XhMO@!!9@@^%hX0]t(lV])o^^^A5AG\H&V8[_8ZRq7?pJ]4`OW^n +rW!2@]WhG:^U(TK!!B4GUqQL&"hpt`S(E_a!!Jt>]sIe+!!'J&!<9V/!"K25#QOo3!"Ju5!!<3'!Up'h +!WE'3(pj>E!"98E,!!3S<]sPG\#lt20!!3-< +!WrK([CWZWZ3UL8!<<6&%fc\;!=Jt=\@T2[#Qb83#lXf.!X&K'%CW_E!!BO:[Bo\7%'ouDZ*L^A[]['E +ZF9b=7CK_7[^3TM[^`pQ!!*-(!W`H.!!!'##6t80\@B)V\,ZX3"U+o.!!3-0!!EB)"TZ*E[(6>B!<,;4"TSN/[(EiX](icg\[o2[\@0)\\I8N@ +"9el-!!3H,$3120!!#-!WrW,!$)+@"TeZ2rW)fq<"?:F]=>8Y\@o,V\[f5[!k8:3#6Fo+ +!rr<&!!rW-!"/i."onW,!!E<&"9ei,!!iQ+[^`oY\@T0Z!=/Z/"TSu5!!!E-\$l>\,ZU3ZEg^B[Bm9A$37E?9`VN)Ydpt+Wi?%!$ig84!!!*("9J]+":5,4!!N?*!rrH,!WWH,!!E?'"T\T'"mH!nWi;qs!<`J'!!rQ( +#m:A2!WWH*!<<2f!7_&[!iZ2#!rrN*!3;pu"98T+^&\$1*iu+C!=Af3!!]G'$3183!!'!t!<<6'!<`K) +!s&B&q#Cj)V#pf""onZ/!"p4i2p](U.V5^JoUoC>qT`(iQVuin"!!NH*!!E9%!rrQ+"98]/!!WE' +"TSZ+!!EH,!!!6("/i-!WMuns$3:>2"U5#;"9JT3!irC)"fhR("fJE#$j-\2!#5_BWMli!"g"i*%Kil8 +XfVU/"g+o,'<\L?Y+uI.XfVW+WiT)Xfef.XK8Q*#-Fu0W!WI).KK\SWNE8"!sJc- +"9A]/WN3,!!!*9)!!E<)!rre)XIlVnV5XY!!WWQ.rW!$&!!E>s!#>\;Uo^Ag"U+l1"98E(!!<6%!WW9( +"!@RD#,qS*"98W+!rrS)WWiG'"oni-!X8W4!!WE*!!<8k!!!'!!"os=!rr?(!!*0+SH]*!!!<=tVsaU1 +!X&W+"9nl,!WW9)"otG!$NL;0!!WE*$DaYoW1jLt"TSN).f^4a!s/IrVk0lZ"p+r/!!E9%!sSc4!i2Zk +Une1r"oni-!)gX"TSQ*"9SZ."TSN( +!!WW.!2QEfTqhYk!!NN,!WW9%$3122!h!!!B, +!!WE'rW=)@"98Q3!WrE,!!EB(!s8T)#6Fl-!WWB)!!!2e!"#R"Uo+4q!i5l&rW!6,"98K'"onZ(!qcQ; +!"T.,!<<3%"onY$U&tJt"p)aEnc0`2TF(],!!WE,VuR/)"p+c)VPO:n!s&E)!rrE(!!2lq%0<1*!rrN* +!4"Tn`)!XA]2!!E<&!sf#0"U+o1%L)n5 +!WrW,!#>V9"Tn`1p]+8$Tr"]`Tr"QaSY`3[V5+0g!rrN-!<<3%!!<3+!!<3-!WWE)!!N?*!<<6+!WW3) +!!B!mVkg,dU^@,,!!NQ-$NgD0$3?os!X#-oUSOZ`V$dA/qu@-0"f.rmUB@6gT*bXt0qtG@!!ED!UnOZ_ +USaOf!i2[nUnOEYT`G.j!X,6mU8@pgTqnT]!MuNf!!K'kVk44nUFH6H!MQ?bScT#r!!<3*!hlHgT)\lq +!<<3&!s8N4SuJ9\UnORg!!3--!WE'$!rrE(pAbX)!26BcT`kW#"U"f*!uM"?!<<0$!WrN)!!]5!"9SW- +!!<3+Uo+CM!!&nl!!&/Y!!0%9i;`k]pAb5qdfPl\W:^,nVoOtUP4S_W]tM:k^%;:*YKHhE"0^"eZh_3N +\H'gPYIq<]U;sOIa18O_YJRr`VpLU<\]4+="LbbQS\=^sqZ$`4^RN"/!!'_/!!Je9YJ@oi!!C!@XNUSC +!3ttm_>jSHq>^Q6W652*!!2&Dq>^N8q>gQ0li7$akl:ma`kAgrYPGj;^;$S\[&MNX^@D9]!"YX-`il;I +YM=lG^:pkc!577i#-"uIYI;3VoDf63ZiC**bce[Yc*@!C!O&R4`jl)OcDCRA_l^JorW"RS];WTc\]'R/ +!5-&H]W%dSVuQh@!!'(4Y.jtSWP$-T!5>SP!!'I0_k7"=[($#7"0'ANQh^U`WP6]Rp&G;[g4A.`U:07c +!iOGC!1iKW!4hk)!Nj-9!!WE0!sel.#lXf-":P85&H_G%('FjUV7cp3!!<9)!!9m?!!*'$#.V/Emf3t$ +!Xeu0"TSN+!"Ju7\de]V[(ZIK*WlGO\./K=!sJ]*!"0%3]=/4L\[K5V#m()3!!N?*+9D`I"98h=]sG8Y +!snr=!!3-$]!&[J!XJc,$b3[LZF9S7,e*i\\$`KFZF@6IZaI-I[^ilU#R(5D!4fK;!4N[C"q:S5!X&B$ +/.r,s]#M:Zl(Ou#R(26!!`K7ZF(JX[CWlT +\c;fA\[T)[!!!-%#QP23"U+l+#m:52"98H-!!*?4k5Z:/]r_eH[(?eL!!3E+!WW9%!!3?/!e#f +\./]D#m().\@;_E!!0S0!t24M!#kn>!WW<&Zn)1W!W`H+\$uVG!<<-$!WiN*!!E#s*sB7X!(6N!!a,?!!!$-"pFu6$igM7!Xf)1#ljr.!!!'!!XSi2 +%B[=T[^`iSrj_m9'"bB_ZFIKW\\4sl!<<9*!!9_5rW$F:"Tec8'*/1E!!N?+%1!"G!!3-%"98K'!!Ta@ +]=>J^]EJQC!sf/>!!!-%"9K&6!!E?'Za[0JZb!LV!!30-!!!iW0 +!!N?(!X?-Br;[!+":"o/#Q=],":5&2%0H#!('FdOP,n`e!!EB,!!B?t!!*'$#-"R'mf3t$!XJc."onW, +!"/c2WXAe>UoaQp'a+Q6W=&\+"9nl,!!iaqX/H@*WMcjIT*GDt"TS]+"9Jc-"98_+X.uYm":"o8!!<6( +XJ2d"":5)1$EL;.XKM?#,6=pKY,\M'Xf\\,XKAY.XfST1"p5M>WMBLoW"/k4$3:,."T8'n3!"K.2$O-V:!WW;$ +W7&&X.QMgWN)ttXHt%1!!WQ+!ilG&!*T[5!X&i@!<``0"onf6"p,25!rrE+!!<3$"f89"WN2tu"U>/5 +#6kG6!X8]0":YG7"U"k/Xf8G*X/-:+!s&W-"q1M5"98n-Y-"h+!W`f6Y-"h,"p1p/XtZfVXfAM&XK8B& +Y,ne*!s&Y.!WoL*XJZN-XfSY&XK8P$"p#"-Y,qf-X9f%2X0&/rX=4/N$Nh"E!=f1(Xf;L)!"&`0!WWH* +$ig^&X/`7qWN-"&!!3?)"U4r/p])*2!!<8$W2uot#Qb88!!*<*"q(D2"9nl:!XSq,!!`Q0!!!*&#,nBs +!!NT0"on`0rW!*)$312(gVk'cb!!"K+-$O-V:!WW:tU]pl#!QG-2 +!$;N7'`\48!WW<&Td'O;!W`H,Unn8!!<<-$!WiN*!!E#s*sAPD!!t##3!!N]6!Xeu1!!3!s#*nTVeK^Ta^u(!=&W0$ipA2!"GWsUSORa!"/j?VPL#_!s,0oVk9c^Tr+KZV4[jcU8OXc!!]2! +!N2]fSdV6iU8+G6$NZZnVZ[##$3:82!!`K4!">$hVl?;b +VuQu$!X8W."TSZ"!"K#0!s,3nWMBM"!XJr0!>btA"Ub;1"9nl.$3I"'"p+r.!!<9,UnZQC!EIkL!!2,C +qu?c.[c%2d^]"3=VV8Sf]`8&2^%VL4B?dLX!5>GmJb&jEXk/iPXSDhtc]?EL!!KOMUoVE/]+WBh]Ze6l +W2n+WXgu0Y_Sa=!YP\A'^8Cr2Xn)Mq^<;ngXnDbi!!etn!56X3cGoY[!1S&,.*]tUS] +^s;ub_p`Z,!1h=%!5\^9[/'b'[^jQ]kl:^/q#CD^q>^PuZ0VGjgZnhEc'[7&e]*'_q7-^3g+ArZ(:^($-e.cP.AWK^=?cj!!'mq!!]18`kBWuc0bQ9ZceuaZbr@+!!K%&\\"j>!#EGb]WqM; +\]`oC#Qau+#6k1<]*/07 +!s#d<#4V[O!rrT.!!3-%"on`,!49DG[L`eM\[T)Z!#5S9!!*f@&Hr.?"TSu3 +]"#>\!>>S?!!<9(#QOl2!=H7:!!BL>Zb6>C"9f)1!!**+r;[E?!"?9F\@f3N!4]NG"TSb=!AOTV!!ro2 +!Wi?,%0-F;\[o;["Tc-C]=,0N#Ih1Q]!MbD!"oG8"9Ji0$ipJ4!!!'9k5YSc"Tel+\.#e\!Wii3!!WK1 +!!!&[!8[\d$bHBC!XA]8#.Cr?!rr<)\Gu`=]`JP_]stM_rj_m9$+[[P#Qk&,!^rW"PO!<<--!!39'!W`9+!!WE'\@f2YZF-t!!0PF!4TDH\Z`EHZF[BJ[^NNN[/^`CZa]u9!"T.=\H3#DZ+9u:!<E!#QP;8!49ALZNpO'VZdA-"pG.4Wii;pXTJj2WN#m!19@R[Y-"k/XfJN/!Y>P;#mC;9!3<&uVu[D3"onc- +!X8W*#6>+,!WW@rXJ;is"p>,7rVus"#5nN-$igU0WMutq!]g=\W<`\.#-.b*!rrQ1!!<9&"UY51Vl?\q +W!*4$WN)kp"9ka&WN)d"!!!K4!!E?-!=8c0!rr<&&Ea#q!sSf1rM^4%%fue?!!!3*"onW(li>Q9%g]39 +"p+r.$O3N*!!E9%#/1*8!$7r;!X&f0#lk)2X.'A"!WW3&WMot$!!N?'!!!-)!qu[9WW3,'!!WK0"9Si. +!!3B*!!WN*!32iqWLsS$"pbA-!!iZ,!!E9("TSc+!$)1H$3:,-$jH\A"98K,$ig;7"pCs&X/W)"Whlbs +"feN&WMcflW#D7!X/k#0r_1DU]:f*!<<-$!!WK)"oo#2Uo:3l"fJ-u!"/c/#lt#.VP0la +T*,B!!s8V%TrF^[UcP7TUS+6WW2-/^VP^,`UnaZY"T]&9!("9ni.!WiQ+!2USarcU]gdpUo0u`!sYQs +VPg*m!!!H3!!E?-!=Ai1!rr<&&a'-.!sJ`0V50r`U(@A-$NL/2!sS`*!VHH:!"TC7!!WK/!"0"+U&Y8q +!!UCCo)Ki*WWE;1!"&]."K7Xm"p+c)"/Maq!WWE)!<<*%!s82s*iK&@!rrK+#6P&4!!!')!!!3*!!&pj +W2,sk"9o/7q#C[&!!!*$!sS`0rW!W8"UY81!=T,3%0HS3"q(D3$3^O0%\]hsV5^AeW2QViWMQAgpn\7p +SH]/r!!*-/quA#H"ebqt!!WE*!!iQ.!sJ]*!i^]!O&ls!!(%+!!L*7 +c+/Sa!;QU*^nT)WZ.$L]_Tfite$Q+"q7QjDc%5Hd!2nu[#a_L5_l_1jS^m*-#0,>q^R<'GrVuu4_tO-7 +c*>EnZe50U'W;!3bKcOV!5kVC\Z``Pg:!rdb-CpG(VKeK]sk`'R_Q&.g:XQ._n=.-!!''m_YaB!k>Z?!V$-i"o\K7]!hhD +"T\T'"U29B!!!'(!P5i2!!`N)!rrW2!!rQ(.hK)$YIV(V!?(qD"onl.!rrQ0!P#bO#R7fKYo!lL!=o84 +"onW-!Z;.EYopZg\[V\@!s&H.!!rW*(]X`L]6!!*6'#Qk&,#ljr9!!iQ.Y._0R +\cB5@'*/:;!<<6&!"K&2%06h:!"/l4!;uuu!#3#S[(EdM!4o_L\@)J>&-*%=!!NPh!#>\;!rr<&!P#PN +[06WBZipF>!!E<'"lfU=!"?O@!<<*#!W]dB!V]"PV`[CERM%fc\4!9!!!M8\[f5O]X7_>"pY.?]"#AZ!m(F!WWW/!k,GCrW!2.[C6\,H@6WNN,$p8nH%Wi`D+rN6(%5HV)jWN676!#\;"98E(!NDosU]gk"U]g`+!!E<' +"mc6=!">q/!<<*#!W]4#!st!!`B%'re56!<<*(!2QRq"T\T+!<`Q/!!!2u!?VH@":+u1 +!!EE)"TST/"9T&4#GA,rWMlBt"U4u-!#0"p"c*"9no-!"8u1#6Lj&X/r(qW2lSj +X/2epX/2m$SeV5+"9A5u%0QY2H4WrrJ0!Y,56 +"p_-,WW3&"!=8c,!!3E3"onl.!XPd(XJGsu"p+c,!!`6"(B=F<"TS]1V5UMq!!3?)!!<9,!!EQ5!"K29 +!NH2$"9\])!W`>%W;Zc-!Xo(,!!&so!!3K/Un\"mnGiOmrW!S/U]gc&!<<*'"eh^l!!1!=Ju0"onW-!YY_?SYr9[V#p]"!9!=8`+ +#m1>2!s8T,rW!Y1V4jf_"9>?rUSOXe!"8i5!rrK.k5Z8#!!<3$!s,6mWM'ItV4e%m$NL;1!#9!!]!mUnslV%0ct:!!*)q"!@UE"pb2/!sJc/!X/T+!!t!=]/3$31>6!_R07A!P,2q!!0m:q#CGmXo&/"_nP13"K't%^8^f+rW!2.bImlU]s`af!!J5'YJ.^B +!!9m`T)&EjS]@#%c+3Y^&\.n?bKR;t]sbSkZa7im\Z*dH!!B.$`jG17"37[@^AJ!!!![o-Q-I2HYN5`l +^p0HRX8i7<^8\fFf)Q&\T[Te=!5>?(!5\^9gA1dM^;J+ol2Uk*^A.a0\]t!O!N33h!!&te!!SM0XhDDt +g&M`cXfTCeQbKQQL9\Ug^9>eSeUQTZ!6sm2$`UkU^6-=`\Zqg@QgFbWVoZrnI,(n&!!LQ]]uHH9!!&Jm +_S2YXc@F4;!!9.4_YsNDWQ!)u\ZM`ncbQEKbPhJA\,?:9bItI3W61R4^7)gWVS)m.!mRRVqu?_[rW!#8 +TY1%"!kH%cn,NQt^!WM=!!E:k^"fg]!!(4;!!1*ArW!HB!!9M2!4]TA!!3/4\,lm)!!WH.!sl?G#6"T3 +"p"]/]!q_J"TSP4Zk3$7q#M'-#lk,=!XcHM]Dr,F\.,qZ!WE'B#Qk,0%KHP1[_'&Y\,lXA!Y5;3&c_t6 +$NRcJ\%8gS#.FWC]D;LD"TSe=['pDF!WWB-!!`q=!!!D5&?rLEq6F#-!4fD8[Bd-I[Bd-I[BQeA!!*/2 +[0?mG%ZkriE"U"f8!!`W."p+r.!!iW4!PU*s)KO!s%B_h>n*"WsA_,!!iQ9[($)9"Uhg?"1YiD$l]3P!!*3*[^cG?"UG).]=J"C#m^S5 +!!<3)"9A5u(]_/K!W`B'!X&K,!!iQ.$NRWI]M8!=/i2!"&], +Zb*`Y\@T2[\%9/\YUfbU#R:G3"onf.#QOo2rW2ot+pe8M!XJc,!WrQ*!WiH(!!Be:!!N`1"98E0!X/Q4 +[(*TWrjYn=[(!QXZaU/A#QkD6!XJc+"TeZ,!Wa)=!WW6$[_&]RZF.%P!!!H2!!!B,!49>I!Woj@!P5YN +[C$&@!4]A9"TSQ'[][0@[g2uCZ`jG=[CH9'\>QkWjfA<\?H7CZEFE3!jfAD]\[]2[!!!*&"T\?!'F4a?!Xo&/"hM+K +]se.H!"/c.!!rK&"p21B!!!0+(^'m?"hM8K!!!N0!i6)$WN$""!s#@#!XA/p"p"o2#,eF)rW!B3!<<;( +VuR)-!!'!o%/C#$!>,;:!!N`3#cXl+!!T@$$E4F7rW!c?"9S]5!!<4tWi;qr!rr`2$ip>_<9!!TC!W!EM/!kg:!,!!W]/"98E-!X/Q1UoC;mWMuhr +Uo:5nUSn>!#6Y;4!s\f+"p4i.!W`o9!WrT-XKJ;"W2lm0!!XSi,"fnJqXJc=)!!iQ, +!!`E&+TMKEV$d8'"U5)2!!TC'"onW6!!8ht!2QLo!!<5"V#gkk!!WH.!sYNt#6"T3"p"].Vka;!"TSOu +Ta^`!q#M'-#64o8!XPX$W;m*uU^En+!WE'*"p4r/$NL8/U8S!d!WrE2'*8OB!"Ao0!=8b(UnjoZ$O3E' +VtpB0"TSb)Tqhts!WWE.!!We&!!3M&%\TSipnThKW2,iYUSF]`USF]`TqD\l!X#Yh>"p=o+V[!2,!"5?rUoB[t!Wr`2 +!;6H;!=fX,"p"`)"oo(*U]:Au$,uu:!$A#5":>/6!!*3*U8A"n"U4r,W2BXr#6k82!!<3)"9A5u(]^H7 +!W`B'!X&K,!!WE,#lp]tW1]uc!"8c+!sSo/"o/-@!W`9$":GS;!Xo54!'"UP/3!!!<,"TSn'UnjobV51&`Unjr^ +U]po*!sel/"onW,!rrH*!>5J9!WrIuVjjTVU7i%s!"&i/!!rW*Tr4[f"/MaoVkL&_V?7#&Vk]^c;ZQt% +VP'lVV[!7#US.aeV5FBmPc+Za!s/M#"p+c+TqJ:!",HtUo'pf!!<9+!;QX*"p4i,$31&0W1oubU]gf'!!rW-!!`?$ +%0N=4!!!0+"9JQ,Vl'^r!!Jhm!3a09!!1*HlMpsb^A.a0_nGsJ!OeB[!!osVd/X0[Y5l-+!!NA$c+0pd +oDf38]r],0!!'.7bP(u<^R_J$!!&qr!!KV.TF55R't0< +l2UjqZ2"A#W4r-/!QMqA!!(45!!T=Ec'Pf_g].GAc*>"h[`?(dXh_faK\6>*_t3ppAbPt_moaIXK_c?U[[CWrW]=bG\[(WuU]">P`[(3cX\c0)=^'V-R]">J^]=>AXrjWWQ[^rlT\@B)V\?`WS\[JWK +ZEq"8Z5U-\\?!9E\[&QIZF@9HZFIEP\$iiWZF.9P\,Nlr]t(Y_]=>AZ]"#;^]!f/V\@K#Z['dKV]s5)[ +\@8uX\[]/\[^`QT[CEfV[(*`XZ+[TXZamZW-a^Cp[(NiW\@SrU[C`iY\@B,[[^`iS\@T,_[(*WV\@]Aa +]!SiV[/RQ;]=#;Zk-tE'rjWWN]t:hb\@T8V^9kDX]!!WW-!4fTJ!!E9'!4oKI!!E9(!!O#9!X&]%!?SrU!"8i3!!!9)!"&c=['[TQ\,l^4!!3<2!!rf/ +"o/0D!Wi?(!WW9%"98N-"p+f0!!9[?];"98W+ +!!<<)!!*''!ON:9!</4!<<-&"9AQ4!rrT-!joSH\[]-O!!<3,!437:!XH*;[/mS>ZO[,F\,ZN:ZN+",]WqM>!!Wt>"TS`= +[^E?KZ`=)9[/m_A\GuW?ZF'\A]"GHO"U"u0#Qt17\?uSL!<<<($3_9RZG!@O"TST(!WiN*"9JQ(%fl\5 +\@B#\Zj?s;$Ma]F!!3W1#lkA6!!KmE[(6;=!!W2ZerWMcbqWN*"sWMQSnV5pDfX/`7pW2utsr2C((Vl?;i +UoCAlUoC@>WM-DiWhZPnWMHJmV5pGlWN2\kV5pGmWMunsVl?YkWN2quV#@:kWWT)oX/5fp#-4T$Uo:8l +l)5AtW2ZbpXfAA!WN*"mXJDhkX.68dX/YHaeYitLXei)"Uo:;hXJH+&!!0b5qu@h=W;lo#!!WW-!3)q( +!!E9'!32e&!!E9)!!Wr6!X&`&!?S?D!!rW0!!!6(!!iZ8V515eVum)%!!3?1!!`]."o/0D!s8N+!rrB& +"98Q."p4l1!!B4"X.ublWh9b$#6Y#-#Qb#1rW!!)!!<3*r;Zg"q#G@8"q1J7!!WE'"9\f,!<<9(U^@)& +!!`K*#FhfoWMQYkX/N(tWMB\'!4!0"g+r1?4I1BXTS[+XoYB%XT8P*#7dX9!&WMlnn#6b)5q#M93 +!Xeu5!!rW*"KST!WWE/#":+u1!!!-4"p5:1!Xo85!WW3&&tl0-rW!B@U]gc"Uo=D,!!]0q"n)F,#QOk# +VuQu&!!NQ,!2lLj!<<0*TrFaUU]@@mU`c>.USjoYWMQDgTr"HYW26GjTVnW[Vkg8dTr4f^Vl64,W1g2e +TVn`dUnOW_Uo'ubUoL)]W2QMfVkg/_rhL4*USso^USXi[VOs`\Vl-&]USOd_U`-))Vjj]VVkg)`USar^ +Uo1)^USF]`T;&6YV#I21WMZJfVkp5bVkp8gW2$5`Uo'lbTqSE_WL]i`V>d:iV#mQiV(nL>TqnT]TqnT_ +SZ/?^TVeW`TqnT[W1p,aW1Bf[W1p2dV5L,aUnj]\W2$>cUnjl`rML!rTr=Z\V51&aW1i@L!2odk&?2V) +UnjodSZ8BZTr=BYTW%LYbbP`o)Kl2V#UJt!!WW-!2ZM!!!E9'!2lIt!!E9( +!!Nl5!X&]%!?S6A!"&]1!!!3'!!iZ8TqSNXU]UZ!!!3<0!!`Z-"o/0A!s8N*!rrB&"98N-"p4l1!!B'o +W1^,`W1=:s"p=o,#Qb&.#6"T)"on`0r;Zg"q#C[%"q1J7!!WE'rW?@)!<<9(TaCc#!!`K*#FDEcV4ji] +W2->eUnItu!#/!!36*!.!X>EnV$$^l<=8o+VZHjpUB$gaUAtAr"Ugq+!!Wn-V4jf_S,fIa"/V`j!]p6L\^TXNK^p^tjZ*rJRVo$`f^!3ao +S%65@^o>2D]Y2&&RD>E6^!X`[a0E;"q7A]%ZH\$_OjCYG]^P^r!(bS$p&(c).DU^XJ"Pc`p0G\Z``\Z,`iNK\NE8a/PrHbIr_^W5b+:a1\@`^R`WJ]t)"B^7``D +bI"XkYGnt@VS0jGgR,FX^9>`)a2"FDcC;8UYK``bVnKXLl+ItX]s"uJgr@(AYJ7u2iL%'Oc$Id&_QU&S +]u.MjJ**KMc_dh[VpV!W!9sOb`kD0J!PYr\\7k?!58=2'"=jS!3``8!!'m\!!'a>!0H9Fqu?_br;[VG +^8T8gNW@AD!6;4k!!(?MWrTNOe["uN!hdE0p](D`PM:EQ!!Kj@Xj<@&!;um"_o%kWoDelap](>Q^&A!A +"TSN)$b!VH!X/W*]`AB-!#>S>!\$ipCh!o#m(A4\@f2[]=,,Z];R4[!!W/u*Y>1T"UkA5!!NN+,He_g]tCTZ!Xo/4!<<9' +"onW+pAba.#6Fl/"TST3!!!9)&[f-ZrjWjM!!N?*!!33%"TSN*"TST-#65#0!WrE.!_Zjm3>!#,>3'*86AYI:h?!!K^8!!'.,[BR'F#XPf#YIV+B!!0M. +!=#I4ZF$pKXqn1G!40)>!#DQB!"o:AZFU#9!<<-#!<S>!`!XKJD&Xfee/XfeY*Y,).%"9Je/X/c@+%KHV4!<<6&"TYO%W<3/,!"8r5!GM6":>,/XIuX! +!!EK-%KQ_5#6k/2#QOoT!u(_>!"8k.!s/b/TW+ug"U"o.!!WE+!!!**!!*')!!!*$!sSc/"9JK%%1E@A +!=&T)#GhD+$31(j!Z(k>!"K&9&WiiH3Y,J;%XTAP+X9&J/RJs+%%sT"X/W(pUTCHo!"K/4!!u!!EK+V$$c!!!*'(!!B0qTqVbl +!<`K)"p-:U"TSQ-!!*;"WMBUt!!!0(":,26!<<*#!sJl4WM$0i!X8Z1!!34sVP44m!WrFuVP![[6_OUY +VOXQ]VPC#aVk9``S,`Tm!,7!!NN)!rrK'!&+HU"T\].%@a;kVPBr]%fue4"9no9 +!<<6'$31&,!!!*%VPU8fTaLu*!"T&2!!EC&US+K\!s/Y'U&kCeU8FW]UBdQeT;\Xg!0$`=B'Uo:2fV4sW^VYL2mWQ4o:!7U35!RAsc!<:7? +!!8A0[/%9)!!7`*S,**bZ1n;#c*jJLT^`!`XkKlF!!:Q5_YF05]u7)O!!9gUVYRh7VuXQKOi+rQ[`,kr +VRG?Cqu?fC]tX.>!jTMNmJm7;!Kk^n!!'q9!!L/n]u$`'!!&\J!!'+r!!BLO_Q!D4_>jn>VS9FN]sP/l +PKNsk!!0X8q#CH/Xnr))^!WRh`i5lZ`aJE=!*Amp"b+q!gWbZ3!!T%#^:h(^rW(:F!4Mh+$+[gd^>-)n +f=A$D!![qi\\PbfX6flj^:i(-SH/Eb"1auF^A\*C^o[S:PcMTu`OPuTR[MXKrVur-rW!O@`4!@[g7eS4 +[K*tTZN'uPa8Q&?_O8aF!!9IIM>.&R_Tg>h^$l"(U93-sn,W@d#FO5BXM<0-C&%`:^]9M-`l#L'W0Q,O +rW!H/!!WQ,]!qbA!!p0D'`\:)!#G_;#lqNF!WW6*!YA[e[4/ZN.>BZF-sDZF.!EYILY;!G^\%9/\[(3]V]=,;X\[]5X]skV[]stDV +YdLgF[CE`U[(EWS[^N`T]"#D^]T]=>D\q7$mF[^s)\ +]=PM^][(Wu]])K2?]".dL'"tfa\%T/\\[B#Z]=PM\\@]8\!4`$>!k>W?r;[92"9GO%!."oX/N(pWi2rsW<&irri$C(X/)bjWi;ttWhlbrW2fNi-E=&E +W2ZemX/`"sV5pVoWMQVmX/W)!UT:DoWi<"tV5^MpW2Q\q"f8<"WMlihW4UoCAnVl?VoUoLDpWMlkuW29Km3i]$VV5^DnUo^MpUTLMtXf8D(Y,e\)XJr>"XJr8"V5pSrW2l_n +X/VqqXJMnuXer2%WNE;(XfSY-rN-pfTr=laUnXc^W2-8g +TW"cbVkg3nV4j``V>d7pVkU,cVPL-cU^ErqUnslbUnjiaW;`S!V59ueTqnT^V5O`*XT;SE\rh:4)VPBu_ +VP9fWVPC#]V5'f`Vkg5[Vkp6hV#I2%UnslbU8OrdVl6DfW1g2]W;*1lTrFleW;`RsVl$8cV5:..V50od +Tr=f]Vkp>iV5'iaUnsocW2HJd"8Vuu^Tm_;!Pb;m!!0g8q#CH&[ep++c\p`^!5A.,!5\cP^@;1)O2J6l +!!B.>WPJ<0!kttPrW!&._O8RB]+2@OZdGhjWO]4OXgt7QOSSqW^\.X.YGpmh!kuCM!6sa.#.^W3!3a\M +f`2&S^u#+l_YF06^T#DjqZ+J5!3,ep!K5:I!9sOb^qKOD!PZVO!"HZE`jW7f_l]o`P/bDX[b@:cWP69Y[\U[VT$+pB_U,coa1\q)Xh26dZb3`kOP6GITZt'dX1GmV_n<^e^q.+P`36tG +aKiIo^p_.1c*Y3eYI;-O[(3HM^So2uZ-1"fZ,WNgO3Os*]`jeTZ-C.h+MFtn^:(_^Z.$(^XP05b^8Jc\ +`l#'\\]_1i[(jJqZ(V'r%g)eC!!!WWK+#m([H[B$jD$NL5,!&"?U!"/c.!s/N) +!sAT3!5#\O[^`oY!!33%$ig@:Za7'GZ3L@2ZEaP9[Bd9J[^$aXZEgmE!sAV5!!3/4[Bd6E[CNKLZaI3E +rW!9.!!!/1\%&gI":"i*'++^B[CNRJ!=Jl2!!30$!!]mA#l"B3$31).!!30&!4]JG$ipS5"9JK'('"C: +&-)\6!W`9&!4KDK\%0)]Y7^j9rW3?+!!9Y2!!!$"rW!!$\@DM<%g2k@!($)"Tet)#64r4!<<-'!!3?)"98E&!=oR6 +WW3##"98N(!W`9(!!E3#'`eT:WMfe#!sAl1$Npa:Xo\e/Y,SSuXTAO*Y4etN![&WMlhp +WN2iq!!*6'!Wi?.!)0!=Ai2X0&9*!t,,6!WrH'!!]@##P\9L#QOl-!!<6' +!3)lm#lt20"9AT,!WW<'$ig83!s&B(!2lfrW2ZhtSdkc$rW3<*!!B2$!!!&u!!35$WVul.!rr`1!2Ti$ +!"U]pf$nGj(#!s/J!VZ6`!!=]#7!2udn!!34tV!n?p!rrK+!s\f0U]UVt!!<4pp]([*!XPG'!!NQ- +!!*3>!!3<(!rr<%!=PU!!!!''!!<3&!<<3%"9&98!=>HrU]:Q"!X8W2!X>Es!<`G#T;21W5,/+QUSOZ[ +Unjc\Uo'r_!!EB-UB1Pu"9SW.!!NB1!2ZEhT`bc(!#8!WW<("9eu0"on],"9S]*V5O@r!q$$j!2"9AT,!WW<'$ig82!s&B(!2HBgUo"_PXZQq7@-F!4fGL[^j&`YI;'c]s7M9!3c%q"2:_]VX4?b[)TNSYNl/jXj*uOe,TNV_VY=nXo/5& +Mp;;&WV?J1!!'S+!<9UQ!9sObYJU)8!QVnN!!0X=li7$rp&GAcZ*paSWP6WUhZ*nuS\D;@]`8&Z!!'_1 +!!T7,^;.FehZ*eY`K&?Lli746W6M!5AF4%+)&Y +a-jflS]A:X_PI#."0])HX7uYrY/Hb%!!0(-mJm=%WMo:dr;[)%]uR4g_T.0$!!'J&!<9V/!"T57!!'UB +!WW6%"1to@!sA#m%KZV>Z+1AI!"/c.!"?6Dr;Zm#\@D#.%gW@>#QOiY\%&pL!s&i5]D2FJ!W`9&%fcmF +\,ud6!!N`1"9\])"U5#>!C+!40#= +ZMq02ZEsP98$iF$#I_+O!"Ju0$31>6#m(FC]#64c,!!*9)#6=f-(]XXeQ[K-RD#QP&2!!3;a!8[\`!Or.2!!**#!4]N?[/^!X/`-!W`T:!WW3(!Wfe2!s\f.&-05OY._ER\-r?;%0d+>!!N?; +!=Sr1%0-A/!!f`7!sJi.!!*'(#64i+!WWK+!WiB,ZFm]Y\-2p6!WWB)Y-kI> +ZEaK2Zi767\$E?E['$nPZEgsEY5e\,\GuUR[C3KH&$<"Brj!lR\[;G!=T&7 +!!*'$\,cR0!45XK)C2!?W=u#,XJ,[t"Tei."oo/7#lk)8#64l,%13(Bp],78!!*-)"on]*#7:M4!!NE)W;m&) +!!E]1WN2SkX/2d%!!!?1#6=f/!"T):!!EW/!!*'&"TSc1!rrH.!!Wk5Y,&1p#Qt87"p"c,!Q"p"o4!!3/#WN-*r!&"QW"9A]2!!5;!!N?,V4FN[ +mf4F6!!*0%!f"Tnc-!86blQ4TdJs9Xq>^`1_g^=VU9rkZ"KgF:c@G3\ +"-Up>^AtY;!#Lp7UpIMA!!'@-X09aU\Z!39cE"CtWMKLn!6b?A%BHeMU]?XR^Tk5JU=?jS!!K:<\uW.3 +!!8Y5VtL)l^UDDU!!8M%^$bq+!!'I@`iZqboDem"p]1?)rW!H1"Tf@B\,Z[9!XGqI!X8_r!"T86#QP7? +!<<3'":>,/\,uU/!WomAn,Nt#!"Ar1"Teb:\@)nJ";eE?!$21A":##6!P#YO\-;p6!"f22"9SZ4"T\T4 +[C?;J!!<3&!W`3$)#s^<"pb27#6G,2$NL2-!Wi?,!Y,25\$*@;Z3106Za@%;ZTkb'\$E!4W"0!;!WW67[(6;="UG).\@;S?!Up's!Or.2!!**#"onW/ +rW!B4"TS`/'">B_\[f>Y]DV^6!X&K/!!35j!##D6"gttN[(Eu\\[2G@!##>6"V(G2"pYM9!XLQ$P\%')X\-rKL!##>6"UtG3!=Al4!WW9(]X>]=S(H!Wi?.!!WE,"TABC$3C80&\,3\Z+@CJ!!6%fcS3!!3?*!!WE("f/+$"9\)m*XDfI#m()- +!!36-!!rY(!ii;qWrX";!<YbC!!EH+!!WQ1!!!8)UoC/5Xe`&"rW*k;WrWJ4!N<*$#m(,5 +"pb54!!!s8Q5WMHVhWi-($"9nr5!sf&1!!NT. +!!B2$!!!&u!!35$WVul.!X/Z:SYZ;i"Ten!'*8@?nGj((!!WE0T`G,q!sAl0!2K_q!!34tV!n?p!rrZ/ +!sJ`.Vkp*q!!Eq-q#Cg)!!EK."p(NrW2'Ut1'%@a!!!-(!=8o1!",Er!t##.!s/H)!WrE(!!WW-"pP,5 +!XSi.!q"9PA7U]UW!n,OI0!!`K($NL/4!sSi=!!!*$ +!X/T)"onZ-Tqqnp"7H42#m()6!WW6$!WrW,$36k'Vl65d!>bb;!"&].!rrMu!6bEN!Mf_s!!**#!2QCl +_Z99.(8[]/!!cW1g!o":>,>!!3<2!!!$*!t,/;!!*6'!s8N1!!*'"USF]_T*,,r!!3<('*8I?!sJ]* +"p5&0!!fHrV54.r!##D7!!>"W"9PHmTr"TX#c4>hVPKo]TW"QSVPaIs!2]f"!X5HsUnFZXVkBi`TVnFa +"onb%S>N4`!#VH,!!WZ.T;J@f!<<<-"on`*!s>KrVum8!!#,Y?!!!?+!i;fn!<`H+!!`K.!!NN)!"B29 +!s&k-TrFT\U]g`#&-`4A!sf&1!!NB'"/Gqt!!3#u!Wo0nq>^PYZ2=S%L?JU;Vtg;m^&%g0\`a"p_m-0= +!!&;W!<)s#[^",]nc/]g[,:ocbbWY^]+_UQ\[/uX\\,J]^<jS\S%nUr!4M@s"2M%G[/9pm!!gBO +^]4AJ!3alP!N3<]!!TJ)a3BgboDl`.!4hq+s1-;Ql2UjlS,!$bS&>+'!P,Z*!!'Rt!!fU/c+^p3Q,_b_ +!iO;B"fBPj\\=H^!!(%5!!mbYk+\r^c_@l/!!KL2_T8D:!!:$8]`>b>!#*MPW4p!C!5?.7`Or.^Uthr3 +b0Ktd!64s;%)BKeS_KIJR_6qAc'nS2"3?Y?ci*nF]"\+C!hdfIp&G0=TYg-t!jp.jmJmF(VU:47XRZ>k +[eKk&\c)R>!Wi?']"8%H#Q_TL"UP/2nGj(&!"T&E]!qeE!Wi?,\@VkA!!353\F9J*!W`9&!"T&2!4]Z? +!!*/5q#Cp-!!N?*!X0"E['^DE"U"i)!YM])W!7!"],3&HMn6$31&: +"Teep!#u(C!=Ai-(BFpE!"H4"98V8[Cj#[\H2a4!X8W,!Wqik*WlrR +!=&W*!jo>H[(WuZ]Wo'M!!3-+#QOi9!!p!Drj_m9$G3MQ!!WE+!!*-)rW#%d!!'M4!!!*)$OQkA!!rh1 +]Xt\]\@]8Z\@f)Y!WW9%#R(2.#ljr,#QOi-!s/K.#m18>!4K2B\@2\Nq>_lD!s&H'"9B&6!!p-F\@_eB +!##>6!"8i/!4fDDXL/$.Za-k?ZEjNm!4T6=!!!$"[KQd;"h1eJ[]g(C\ur*HX15P;$imZE]!;AC#e%4O +!!p*D\,ZOE"p+f+$igY8!4]ZDpAd/S!!"8E!!3A4]!_qL!"Ao.!7 +!!**#"9AZ,!!9Y2!!!$"rW!!$\@DM<%fue4!ii:(":"t.WW`V-"RuI&"98i1&$)Z3"9JZ*"f\O*r;Zm# +WN#@e$3L;/!rr`0!W]4"rVus$WqcW*"98T*"9Jc6X/2U#!!WQ+rW*'*!!*'(rW".AX/Q4%"on]-!<<9( +!WWB.!WiA&U'C]%"U#28"9Ae2WsA="!WfF+rN.]TXKAV(XfVW'XK;L)!s/`3!!W\(W83!XJc+$O$S6mf4=0!s&Z.!"o;>!!!A"Vl'e$TaLi' +!!!6.!C[`e`N]%m&\!LUUg!!B[S\\n=FnGi^:XJb*3r;Zh]jT#CrVp3K6!!Sq._Z0\7nc6N, +!4hq+s1-;Qkl:^\q#CDoq>^Q,[d3to\`s.u]r02]^:rM*$36Ee`hLqj[*=EHp&G,k_"kYEc@PNd!58%* +%!KtA[\1=WZ)OqOLrSWY"L"T7^om&)!PYuC[++dL&D4V4OM:bq\[J[A]<_J;bd%'G!4r+/%DJmqa//j9 +g7j;^Mp9$9!!B48c("\4#IhFK!!'^>`q9<4^!Z6J!hdE0nGiWo_l*XN^n'oo!4MY&s1/+/%funC!t2I: +!!9aB\,lX;"RuI%"p"]0!4BP9!!!$#"T\c/!WW9-"LPeF+T`5U!r`0(#I(V?Y.:_1Z3C<8Za@$E +Zi76Y[Bm?K!"#q2(]j[E!"8i2[^`pT!X&K'#R(A3!!iZ-'`\4;#Qb"<[/L%H#6>)1!Xo&1!!3<+!doa\,cU1!,>a +\@B/X\[]5\\@T;\rj_j842%o/\GuU8!WW6,"Tnc*!kJF7"TSQ'!Y>>4!!iu5!!``/[^WoZ\@T>a\@B/X +Zj@'?#mUG1!s&N+"9&94"98T,!!fs?\@&UO"U+l5#mgM3,Qe#H"TSN(!#rDY[AsZ:]!MkL"o&'V"pFu,%03cKZiU7.'`\=A#64f/#QOo+]"5/V\@DSC!!<6D!s/H&!X/W*"p"c+!!9Y2 +!!!$"rW!!$\@DM<%fuqA":1h)!!B7#W<3,+"RuI%"p"]/!2QS#!!NE1#,S0o!!35$WUKlu!WWH0"9AT0 +!3)ms!X8Y(p])!1"p+r.#64b)WWWD/!!iQ/!<Y*('FXF!=8`0Vl?[$!sAT(#6b82!!`W-%fcS5"p+e)V>^H0 +"T\i.!XSi.!!3<,!<``0!!WN.UoXm%V$@&'!!]M)#4MU7$NL/2!"o87!Ml`pTEP;qWMu^&!!NK+!<bk@!!!**!WWE*!XA`+"/u;$!!3#u!Wo@#rW!H1"UY>!!0". +qZ$YdUAFrj\`Wqn^9%85!4hb&qu?c7_!qC+Z,!!WK)!k>kPYnd??$+IOT!s'2=mf4C1!WrH'!>#_B!OKJL +[^ZMA!X/Q/!!*E,"9ec*#6a)fh>doa\,cU1!"onW0!WWc3"T\`-!WW50\?rcUZig@/"7Q:3%0-\7&ISRC!!!H.('4O;#dL\K +\@/uU]=>J_\[DeC!;cb@]!T)V]=PKR!"&].#65/6])Vj9!WWK+!WWH4!!394!<!!NN/#64`-"98c/"9ni<"98k@Za[EL!WrE(!"8i/!rrH)!4]]B!!<5)\[;D=[BBQ5!!3G7!3iZ0 +!X/_7Z2am2ZPNVD]XG;T!!'J6!49AG[(!?J#e%&>YdOH1+UG<\[fc[2!Wo\.!4K5F[fca4!!NK,!!E9+ +"h:nM!WW;r!&k#e!"B%=]!heB!W`9*!"],1&-)\<[(3ZT]t4jV%KH_>!!*''!WrK(!WiH(!jt!!&js!5G%!$21C +"9AK'$k!.)"onf,!=/Z."onW,"RQ3>!"/h,!"onW.!WWW/"T\`.!WW5!WMHMmV$$bu"RlC.$31;2%0uq< +!!!?+&-E"7#GIloW26PjWs,K&WMud"p],64V5pGnWi6(##QOu2!!r_-!!*9*!!`K+!!NW.!sAr3!"0#3 +!;=!=Q!,XK8<&"9JW)#lk&1!!E<&W2ot!"9>C'XTJ^/ +W<3;+"q%:0Wi;sd":,16XT8L+XTYN(WN<0&!NZS.WN<)$XfSW0XfVW(Xo\_,#H=l-"p+f."/c/#XJ`2$ +"Tnc+"pG)1"p"r4WM?Hq!!Drq/d)CZ$3[9,W!!)&!<<<($ig89!!!;$WMlbrWXSq9!!NQ,!<<<+"9JQ) +!X&K(#6=f,W;uu!!W!Z.Z1!!WK)$NU5-"p"h"$NL7u!$21D!!!+lV$I.#!<<<+!!B'q +Un&(u!!f!WWE)!!`Q*$igG3"9S]*!2QEa +Unj[e!!!,j!"TD:#652>!!WE'$31Y?!rrf8SXugVU8XcaUo1&cUB^JnAuD?$Tr=lc!rrT,!sS`4!iQ)" +"p+c/!!<3*#QOr0$3:,7#64c+!!]!cWMH8eVkF+o$NL>6"9ni+"U"f2!<`Q+$j6P;VOsZZScSup!WWQ- +!s8N+!gQ+i;`kN +o`4ae!L9bY!!0I)n,NNkcB%`#"2`?_]_K)K[K*kE]sbJa]=kbiZ`SZL!!Adbc'Ru$!f4_-p&Oac!O'<4 +!!&n\!!J%]!!'e2!!BUQ[Yt(a!j'\Gi;a"Ge\.rmmf:3)!4hq+s1-;Qkl:aYVY^>o[Yst^!P,Z*!!'Rk +!!TL8VR`n)jT,#T%#C)%]r8fFc+2$&^8^i,#/H_QU8 +[(EsR!!3K*!!353\F9J/"Te]/"T\T/!<<*']`J2Dq#CF&!r`0;&-)k6&-2b9\@oB`!X8f.!!EE*"on]) +%KRXP!#tt?$j$V5!WiW-$j$\7[^?A@%06J5"TSh3Yd1e5Z;^h1Za@$EZaR9IZEpsMWk8<7!#P_I!!386 +]!qnP!"/c-%KHb>!!!0&[(2fJ]!MkI!!*-$%0-D/#djp=!!;Zj +(C1$R[^Wr\!!*`5!X\o-"TZ'D])`#@])K2B!WrE1$Ln*<#6Fr4"pYFDZiC0?[L*#H!W`f4"98c/!!<6' +!!`K*j8e$:$N[a2!kYiRn,NForW!iF!!`Q,"oo/9!!!$"!WWH*#ljr/"on`+!sSW'quD!D +!!3D8[(*]X]3"TSu3]"#?R!<<*$q#Ca'!<<3' +\%B*T!>5;2.LQ:X(]saD[(0#Qb#1$3:;3!X/Q.!!3-$!!9Y2!!!$"rW!!$\@DJ;%0Qk8 +!!`W0!j/6u!"/r!!"T>9!XJu1!sYg&WiH7&!sec)!Wo@#n,Nt'!W`K0!<<<)!!!5)!s#=r!!*?-rW!K< +!!N?2!<<;%XJlU0"pFu,-NjPQ"on`*$NU8.'`\:A!sS`-!X8W2!X8Y*WsAb9!s8`4!Xbp+XS/at!NiO' +XT>T+riJDfY+r*""T]A@%KZ_8X/`-'#lk52!=Jl3"TSN+!2QZsW2Tb$!!3-#!X&Q*":PD:!Wi?)"p#13 +V5pBu!rr?/!WWQ-!<<>""on_p!#Gk@%Ag#)W;lr0!!3E+!!NA%X/c7(V5jNo"9J]+#RKr#*sD`K#6k>9 +WMKRsX/-(%WWN81!<`B.!!!-&!rrK)"76*=!"/h,!tWi<%o$igq@!!9,(!!*'$!!N?2!!WK0!W`N4!!WE+"on]) +"TSc-!3*'!VZ?r$!!<3)!!<6)!!EB*"9AN0!s&_2XfSV'#7Lb9"p=o.!sYa*S.>W*!=Gg/Xf\J'"T\Z3 +Xer3'Y,t0qWWfN(&-f8=UogGoY,qa-XT8I(X/l`*Xf\V#Xoto0X9&g5XfAK(#mLF3XK;T&XfS:uW=9%> +"9A]-%04rW!0/!rrr:!!fA"WtqN4"98Z1!<'#"7Q:$#QXu4"TSW.W1g,f"98N/r;Zm#UnmJ[%g<"8 +"pG#-"p"]("fVS(V>1)l#Qt&+#7LS9!"8l."u2pQU^R;/"TSN*"9A],!rr]0!<jSHq>gQ+b5g`+!S<\:!!0@[q#CH+[d3to +\`3Yn\[8`Wc)9_)h#IYaS$B`Bc'S;-!4:bd"0pUoWTsNeZamfPUA"Wh[_mLl!!`K(U9hPDQ.5a4/^0I) +!6)CiW;t5@!!'dXL!57b_moaIa8c4D]s7Wo[a(k;d/^MtXT/@A\Z*OG!"$ES_>pFN\r"/#p](B2YKcM9 +!j'\KoDf#g_SaWmr;c0a!4MY&s1/+/%fu_4!=Ju0"9Pj@!!30&!V$."!WiZ0!!3?)!!3-#!XK)0!!353 +\F9J/"p"](!WiH(!!NV;Z*shGp])<8"TSN(!!33-!!iV:[CERR!d7['KY:0=A3nX0]:D!W`Q-#QOl*"98]-"TSl0!WW6+!A^!!r]/"Rc=%#Qau0[(*`U$ip>.!X#q5#lFZ."U+r.!!EH+$KM3D!"/h;!!j]5<[^NKLZ*gmFrj=bmYd4B6\,ccA[C?4HZF$jDZFI6H +Z37G$NLJ6#64o4!!0X?]=5K!!s/K'"onW(!!33)%0HqTDMX9/P1!snu1!!E9+ +!!WE/!!3-$"T\f.!<u!!!9)#6=u. +"pFu-WMlhqW;lr(!"/l3!X/T+"98Q/!!!$#"98N(!!`N)"/u;$!!3#u!Wo@#rW!H1!!<6.!rrH*SZ)Sk +!#64c+!WWB*"TtQrU\U]GUB%'aUna]\USF]` +UR\*WUB1K#!X8W+!!E9+!!N?.!!3-$"p"o/!<<>%UmqMh!!*0%"T\c,!!W?%"p4i+"T\`+&ceo,U]g`% +"p+o-!!<3(!2ol1n,Nau!!&spTr8%t!WE'2!sAT*!!3-)"/r&lVZ6r'!sJ&m&-`4:"eh`iTaCf#!!38! +!=&H%#R(A5!<<6+!=8B!bQ&"OU]CJr!#"f%fh!2lTfT;J?\US=IcTqeB[U'L`!"f%rgUSac[Vk^)`V>p]&!!E9'Vkp'k +!!*5t!<*!D"eqoj!!!<*#6>#/"U4r-V51#bV>pW%!"/l3!X/T+!rrH.&-)\2!Ir]W_.C&@MSLZbj]pR'6d?FP0!4Lke".6%=W9O?cZbObcW;6JqXi%FB!<)s#S\VnTquA=N +bHCoJ^o5/nX1kRI[_BPl^q?PW!!'_5!5,AL!7%d]VSK7XZ`C,,WNWbL]);U:\&,,ObIY:0[(`i\q>^T7 +^7t)s!iWo9o`,-/^!!LkqZ,s_!4MY&s1/+/%KQP0\@MYA"1tiP!XSi6g].BW\@C`&/d27Z!4obN\,m3A +#QOo3!>!!3<)#l+H9"U,,2#R^V5$3:,1!!dh)E[B?n="LA42Xgb[GY-\A9Z3%AkL +\-(pp#QXo,\,cR0![8Wh?AmVuWju!^Gr"T\i'!"];;"oni6!!*?+!!N?)#64f/!!*0%"U4&h('CA1SZ&H^ +!2oku"TST(!5r!9!!`\j8];"^oY6B!;?HpMo(kQ!!B@;XhsT.!4hk)!h7HAq7@0S!5kG8Z,^N/mf:3)!4hq+s1-;QfDkr_[d3to\_dAjYI;HXZ+]H' +f)Q&XbDXBXX8pN'!!Bd?bGOP)"-pmGS,30d^8Ll/r;Znl`iK%[fEnHZF.!FYctLB +[JmHA!WWc4!!!/3]=8=O#ll%@!!Bg>#Qj]"%fl_3"TS]-!Xo+@ZipU7!r2g"!<<*#\,l[2!Vl^+!XSo. +#6Y#1"98E3!=&T2fDl'V#mg[F])D[5!<<0$!4^MYh>doa\,cU1!>?q#D!2!!NE(!&V'l]">HQ&-<(<%/p5H!<\-TUS[1!9?#Qau6!WWH*!W`B'!s&D/\@MbB#RCJ4!!3E+%_8jU\.@a&#QXo,\,cR0!A;UnFcf!W`G&V$-i'"oo&4!!*-%"9AT0#QP85 +$NgC')?;2k!!3B,!#YeA!3*&p!X8]1!!EH*#QXo.!<<,"V#^Z:!"Ao.#bJ&qWVERq!WK2=Y,nb)WNE>+ +XKAT,!Y,;5!=#U)W=&_3!#PA0"0/1&!qlU)!_W9WNN?(XK;O%X[9(jX95T(XTA\-"V7]6V$I,& +#QOo0#6^j%#H=]!#mC;5!rrT/!!N?)!<`B*!/!W`E)!sT&e!"8i8 +!s"r3!!WE)#6FlC!EqU'1O6 +#6_#q"onl0W19fZUnjZ]USXZYUSao\!!8kp!"tp"T;eRcU8S'eUSjl^UnRpfT;M\m!!e,TWGVTllWhZ*b[^=AV9!!K1#^W*PP!;um!hR]cd!!1r;r;[J[Ojp,;]q"1,VC!r`0-#lk%8 +[1EBC!!`K-q#CX$\%D\@%1!"1!!*-$rW3E,!WiA3]"7qE!!;rr"T\T'!Or13!!2ip%0QhE!rrV:\@DS@ +!WrVY!"TD;!!3E-!"/c,!<<0$!4^MYh>doa\,cU1!.\%0'M,QRlF(%qV\#m:V;!!rb;]=>dXS;ZEXK8!k/=7YI:dCYdFPAYQ2)>!4B5@!=&T*!!!$7!4&r>&d,]F!!<6%"9?-H[^`i[!WWW0 +!s8N+#64`-"98c/!kZ(R!XSi-!!30&!rrS3]"bNQ!X@ig#QXo,\,cR0!'!XSu3r;Zp(!!EB&WW!!/&!XSo2XJH=,"onf,"o/-' +"/r:$!"&r3q#Cp,!!<9)!!36&WN)ru"98N$!<)s'!<<*#W<3,$p](a+"q(P6#,nN#!!36*"kWec#QXo- +"p4i2!!!$"!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!pZ"!sRBjU8FOcD?Bk?!!NB+!!&dfUB@?dTELm`!sYNo"9en&"p:NrUS=HZ +"/_amVPX?jVP=4t!^WBa-F42]+9f"RCTB2T>8U_Z*1@;h3n*>!O&0d!!01InGrFd!klY!nGiQtmf3F&Z+e-V +!57h$_>jSHq>gQ+b5g/p!P,Z*!!'Ra!!U'N^7Ds1mf:c9"LPA7Z*rQj"/`06_s%.'YKOJXpAk0m"P&[9 +_OgK%%CW4A!6;(7!1CP$!3rO&!"uX=!2RNCXf0):bGYEVaoK;nZhOM([_/O=!5SF2"k1Mk]sQ2V!!:Eg +XnD_sP/?@FpAjO[!4MY&s1/+/%g)k5!!*K.#Qb/0!!EH-#Mf@]!k>c'!$r-Y!!r`8ZipF@[(3QR!!'UB +\@2SB!=]/3"pG,2"9T)5\[T8ZrW33&"Te`*+9VcR!<<;8])Vg8#6=u.!*$N[a3 +p&Y'lq#D$.!"B&@!Z])Vm4$jQ\2!!;Wi%g!:G!!NB']"5DW!"T,2!Vl^M!Y,23!!=,@"9Q$G +[CWWU!0Wq\]ZEs\= +Z3::0"TST6YlMAAZ3UH;]=kKU!c>!"T26!!!$+!!WN0!!!-*"9mT]!Wo@#k5Zb9"98Z0#c%Y)%&Bku +W;lpuX/W$#!s&`3!!WW1!sA`6!3)ou.AR"I!WWE+!rrH,#QXo/X/Z.""pG#2!!*6'#6:g(Ws/P(#m:7( +WMlilXTPE&XfhZ*!i`<(riQj,%g3CI$ipj?XJZ($#64r/#5J6$WN;O&rVup!q#Cp,!11WhlbsWMoq!!=Af0!!EB0 +!!!'+!sA],!V6?f!"o;4$3U_;!X8\*WN2hp!!<3-#6"T&!q61#!Xo85"T\V(X/Vfn$j$D0q#DfF$NL5. +";Cn?"/i5sWh?Bn!5"Yp2_"9Su2VPL2b!WrK("Tec+"9So1!!T=!!!!3-!#6V5U'r!!"/DiiVk'ae!Zn!!T@VTYQK1q>^j&!3EBF!5PM5][$4]_OJELmf3BXW:g2nR)$Imp&OFZ!4MY&s1/+/%KHP<#m().!"&l1":+u0g].BW +\@C`&/eA!`!X/],\Gup;!<[(ijH!!!6*!(qHrXZaR?NZaI$?ZF@.?"TSi1"Tet\H!$>pAb?t!!!&0!W`9%p](d*$NLY:Z+@@R!!!N3!J[]!_S?#ljr0!Wi?'"SDfn!Vl^3#Qau+#lk,/!4W0C\$s#]!"Ao9!W`W0nGj((!!iQ;!WiD, +]=P?N!!32s!&4NT"Tn`.!"T&0"gGYO]sS+R!!!'#"onh8\-)p7]XYGV!WW6)[^H5;ZaI+>ZEjP7?+%8L +Zad:A!P/72Ydq$C]!SZP!4K2=#.:f=!!!-/!4',<]!DDD$#6Fo+$kiUAWMu_rTE,#m"Te]+"98N2!<<,!W[XbO!rrK,!!!0*"p5,2!3)lr +"TSN,#QP,2!s8],X/Q+$%fcS2XehtqpoO_&XfSY-Xo>I6WMZc!XT8V,#m:G8#cn(0rW!!)!<`,t#H=[2 +!!EE/!Vl^)"p"l.!<<*%WMQQo#m:#(rW!0(!!!&!!rrAs!"K&9!"/e"X/?=*!"8u2!ndPXX/2ep!!WT* +!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!,C6"TS\i!!`N)"/u;$!!3#u!Wo@#r;[9.#mUM3!rrT1!<`T, +"5EkX!i2XU!#uCI!,"9no&!"/r2"T\W(!!B'lV>pW("8;d#!<<*#U]UStp](d*#lk>5SZ&:k!!!B/!^Tt!4'?F]rrFX!!3H)!XfP>!$;1B +"TSN(%07RO!rr<,!X$$@[1!EC!sS`+"p"](!XA]*!!!3T1 +!!*o!j]>D +'`n@>Yd_.C"LbT9!4&r8\6Q8@ZFR*C!Woq9'=P%DZaI!HWOfLF!"5d7!!WQ+!"T(;ZEjN2#QOi*!4;h/ +!!WE6\?rjJ!5GlG!WWB+"TST*!"Ao/[^`jM":553!<`H(!!<53\c53!s76X!Wo0nk5ZG(!!!-%!N-&#!WiN2!!<3&$Nlrr$im8r('=Ol!sSi/!s/l2 +!#P\<"TSN)$3:,/!!!3)"/qoe$4-\7"onZ.!<<*$"onW(!=B1$W26?cU`5u'UnFT[Unaf_USOc`!X&N* +!"&l0"Tnc1"p=Q!#,e.$!rrK.p]([*!!!0/!sSf/VuZl#"Tnc/q#CX#!!!%q!rrAt!"T86"p4i+W1a1n +$3:,-'*?he&#?1u"p"o1!WW3$!!<3$V<.d%!"/h'!W._!!8ah +DP@^E!!SjfV>pasU&kClUS+NXSti6SUB:Rq":qE'!i)T`VjO?YV#h!jV>pf'!!*H-VPBmf!!WE'!))D!!1-0n,W=c!6ss4 +!4M@s!R@Uj!!9@OVY'oh^$bs0 +!!%;eq>^T9Z*X9,!2o\o#.BoE!!)/KoDerl]tX.>!PZ>@!:0[c[eKk&\c)R1!Y5D4!!r`-#QOl*!WW32 +h#IKX\@C`&/cl=Z!!<9&[0$C4!WWQ1!:4#QOl3!!`]'!!`N) +!t5;:!!W,t$jHe?!WWr8$3184!"&K%rW!0(!!!&!!rrAs!"K56#7(;8!X&T2!!ri2#2&teW2g:+"9AK( +!!!$"!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!5G7!32foWhf^p"RlC$!rrE("9ni, +$_OK!!rrDt!"0#4#64l7!s\f-"f_L%(]jgJ!!`K3!!]M,":>:5Vl^"1!s>[+"9oVBXfVZ-Xf\\+Y,ne+ +XKDR,Wr]>rXU"d+9!5(pWWB6('EJUH$j7!@WiZ='!!iQ,"pb26"Te],WN#q!"f/2l$ig8."9SW,"oni9 +Wi6(6!"/c7!<<*&!!EA%W!!))!!*-6kl:qh!!B2$!!!&u!!35$WVul!!Xf,0!!r`-"onZ(!rr-hkVP'iaTr+NWrhL7'US=Ld!!30/TV`(t!=/Z+$3186q#CX#!!/t"RlC$!rrE(!sJZ*$_4,l +!rrDt!"0#4"on`5!sS`,#,V6#c+/l!<<**!!qu?bebM3*]!!'IA!!01irB.6_nPC9!4;aCq>^Qs!5JI4!jnlDr;Zl6 +^&A!T]=e3NbIP?fg8iPu^;U'P]E#Bgb5f)c[`lD>QGod&b.[WO!kYGWo)Jg"bPhJCVTjkg!!1?JoDeon +^%;c(!%n9P#64c)!k84@!!NZ/!Wi?%$ig;5!WW;3 +\@]3M!!*'$!WW3(!!9X@ZiC(-!"f84"TSf/!s8],!sQ3G!"Ao/r;[0?\@AsR!!EA1]=I^B"h1eC[Bm:? +Z4jRM[C*=@!WW9%[^H5=!!!9)!!Muq!XJc+rW3'#q#Cm*!WiB&&?`VG%0-A3!"8Q%"T\T'!Or13!!2ip +%_0-Z[grHA!!E9*!!iT.f`23X!!!9+$3L2,"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh +"p)47!<<-$kPtYb!!E3##mC;1!XJc,!<_>!=/Z/!!*N1#mC>8\@B/\[_&fV\bXL5@D]!AUA'`\47!W]O:YQY(0 +!=&Z,!!p+6!\:jl\-2m8!k5fB!&0!"%ih#QXo,\,cR0 +!#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!&0!!h]f#6=f,W;uu!!W"onZ(!i5l)!!NT-!s/H&$31)2!rrD!Uo1"5!!!$"!WrE& +"TSY#VkF(j!WW9%"TS`-!s8],!sPKu!"&],r;[0:Unsgk!!ECtVks3b*M]O-Uo'rbUSFQYUSaoa!($)!X\o4!N$YVPBjc%fu_5!s#'nTEPE!!&0!!i#op](O"!!B"t!!!&u!!34tUr`W: +\`!Mg^%DC'!!BL>bH1C;!j053nGiTn_"[m2[^<%4!!8Y7^A5ANYKX2^^q@Of[]R*D^V[Y]!<97X!<)s! +Ia.6[!4MP#"1cFNXhOi9^$bs^f0YKOVXbE:&`n\+Dl!5eR4"MMOh +WP@Ko!gCL8n,NO)]sdk>!MI.)!!9@7^A.a0\uGW.!PZ/E!$SD^!3`N^T!d@^16!4Mk,!l21Vr;Zl"c1V,=WN!]*!!1-=oDn4X!4MY&s1/+/ciF"F#eIMI!WrH/ +!!V`i"T\T)!!'P!!#>S8!WW9&!5#hL"9ec*"TSP4\@DS@"Vq+>#Qau.!X&T*!k>hM\c;g6"onu2!rf\6 +!s&W-]=>H>ZMq6c!!!$/ZFI=M!ZiK[t"LtrC!!2Qh"p)47!<<-$^AnH>!"QBI\[hIE!4k"s +\\#5[]!qkD!#G\:"Ter0"p"]*!Or.2!!**##64h8\\#>]!WW3%!G!<<0)!!E9,Z*aY;riuO1)mZuW#-tW: +"gn=9ZEUaB[0!\BYctRGZ*U_9$iBuXZEjT4$3CJ5!WW>4\[VeC]!q_@!WW3BXUP73$NL>3&-2h6\[qhB +!WW9%!<<3&rW!-.\@MYG!!*!"kl:ti!!9Y2!!!$"rW!!$\@Bc`r;d2)W<*,(!=&T/m/R:j!!<3$WUTrt +!<<3%!W`;%X/,q'!!")F!!'!sW;m#(!( +%Ag2.$3L;/"98W1!!<3*!"&]4V5^Kq!'!$qjO!!!3*"oni-!!WE(!5"Tel."p"]+!Mf_s +!!**#"on_$V5U2e!rr<'!W!2$m*[^iZgSH-:9!!&tu!4Ji?YJgLS^o43Lc)J@aq>^Q)ZhOM)[(a3R!5Gu>!!%*6 +!!0gYo)Jg"_Xmip!!'J&!<9V/!71]M"TeZ*\?cYD!!E`2!WWAl!!NB'!WW51nGj=+!WrN*#TTqQ]sIb> +(B=^D"LGZF"TT&9!!N?+!!!*$"p+n6\[K-L!"BD\[VVC#Ih1PnZjOK['R'EYd4KE!!9aB#Qb&. +!!!'#!!NE*!s&Q0!4]YB*!cQI!s/Q'!"8o0!!NK-#lt%<\@)V2!!EE3"h4OE&HN%:*3m&_!XcT=%g!=C +#m0o&-NX8J'`\XB!s/N("9JQ0!!<6%&c`1D!!NB'"pG#/!e#d\c;d@ +!!!$/Za^&:!X5q2o)Jp'\,lX2n,NXn\,cU1!?^!!WT/!!E9%"98K'"o/-a"onW/"1>eO!Z;"B"pG&."9S]+!ZS8Q +!!N]1$N[KD\-BOS[g*0=!!iQ*\?Z\I\$c>>!bb!!WT/!!B3q$N:#.$31/."Rc#h#Pt*%KWR0 +!X\o-!=GU$!rrE,]`@Uo:,c&c`.> +"on`5!!!3'!N?)#!!**#!##D6"f//uWMp:+"pG,0"98E)!!3-)q#EAY!!!6,V6$Wu'*/:A"TeZ,"9JT* +'Uu*&"pb58!M?Bk#-4`%"U4r-#lt..W"&p2X98V-":bG<;us,("Kef/"p;!0%KW]7"Tb\AWN<8&Xf_c- +Xp;,4WNE0/!sAu4!X8e1W<(#QP&3kl:qh!!B2$!!!&u!!35$WQbDI"Tn`,UnA(o!!EW/!rrJm!!NB'!rr=tnGrLi!!+5I +(71_oT`>'*!!WQ/TVhtt!!E9*!!N?&!rrN,"/2QdW;Zc($NL2-%ABVp!!NSmU_BMuTq_c!!!9'q"p+l- +!!!'#!!W?(#lt26!2QNZ('Xg<"9&9/!W`9)"9Sl0!2u`h#5nPo!#>\C"f),-!"on`5 +!!!3'!Mf_s!!**#!##D6#,.rnV54S#"pG)/"98E)!!3-(q#E&P!!!3*U8Xmj'*/7@"TeZ,!s/K)'ptm! +"UG,8!M$'`#,n>n"pP&-"on_"T*td*UnRqm!Wrf1"TY;6TV\T\US\*eV?Efl +TVeCh!Wi]/!0!!/A#nc/cd^8]BQ!!9%3Z2O_) +XKB2+]*>p]]XG/F\buL/c-,SV!klismf3FicEXA8!!'5"!!\@qW;lqG@*elUJZR1gnGiR&mf:3)!5SF2 +!L:4=!8%8P\[Li)!4fuIiW'+\VlcnqoDem%p&G5n^rEagjo>IUca<9D!I;KX!!n8$[K+1TXT/A!!!U'- +!!'aEq#DPG_>q$Q_Z0\?[K$*%gTQD,HJMi[^ElT!snr- +$+0d)!!KgA!WW8j!!WJ6!ZN(L6!%eJY +[(-/C!!E92!!3K-]t4?UZiU41!!3W4"1kiB%g2k6%0ErI\/52G!#84!Wib+ +Xf_d8!X&K1!!3E+XJuB%V#gW"!!3N2"KJ:$$j6P4$3R*'W=f12!6U]gi$"K&)knYA(,3!!!!3?3!"bm%U&bF(US7a\VZ6l$!Cpo`4Ua!KkXi!!/"Vp](;rr;Zo5^Sp\7#-ktU\\#Sj +r;ZkrT()d^a3TG,!!3/!YNl/gO8Jt[VoHuSci='NrW!#I^ObkS!57h$_>jnD!!$lfbGh/sMou+Q!!0X= +li7$r_Z8Tp"5CS]VtC#i\b#k(S]A1Qjo>I\`gcc(!jobHp&P-,qZ-Qp$+eBa!!'=9!1D+0!$Ka_!!('J +!!(0,!!'@9!!'A+`Ol2g^;$eP\H'7D!3Np1!!8:rdJ!VDg5;!Wa8@!WWZ2!!3-/!=/`1!WoaB[.1F\ZaI$@ZF7(>!WWE.$NLM9!!N?'!!3N0!tbS;"gGNM!!e#d]*/0?!!3E0Z+CAD!<]\/o)Jp'\,lX2n,NXn +\,cU1!>G8!!0R@]!SpH!=Jc*+V4VS\,cU1!d^uA\#d*I#Isi@[/mM;ZFR-D*jW'O[B]c;!A5!s/K)!<`E,!5!!*'$#Qb,3!s&B* +!!*'$#Qb&:!!!E-!!Moor;[NF!!&qtW!<;&Whf\#!!*'+#RCD3oDg-A!!5!>YY: +!"&c-!rrZ/"p5#1!hlTenYA+=VOsHSVPF1o!!NQ5!!`T+"TSQ'!XSo1%0H_:S>?Yp!t#/2!s8Q("onZ( +!XJi/%0-A:!!!0#!;$7*'*&$.!2Ki"!2lLj#64c)$4$q0g%0Q`MUSXZ^T*b]% +!"k`t!s"mh!]HfDkr_[d3to\\eF)!!KCHa.9=+!!'S$!!Jk;[^E!!OAD!P5bO +#QOo+!!E9+!X63D]"#2[!YYP8"TSi/ZF[LF'EG\K][^*-C%Bd+HZF.!I!OiHBZN.K6 +Z9,D'WjoA8Zam@A$igD1%^WLL!!30(#6>#/!Wil7]sG?O!Y>>9":+u-Za^MG!=o1C]!2J@#lt#,!!`E& +%0?M2!!'U;&c_t6!s/Mf!!iT*!k872!!**!!!353\BP!Y"pY//Wi6($rWE<(!!!2k!!NB'!rr>#n,Nk$ +!!*'##6=f+":"o2.0'n\"9AN/Uo^@"!X&N("pP&-$NLD6!!!2%"98H,!!*-$#c%V*Wi<&hXTGK(Xo>IX +Tb"9(&HN"D!=Ju3"9AW4"98K(TF:f/!!!$)!<<-#"onZ+"9AZ6"98S*U^-r/!!VuprW!K2!!EG*WiN'! +!Wri3#QP,9rW!$(!<`N#!%%gWWMum$!2ullX/,h!WN2ksV#UOpX/2es"q.9-X/Mip)ZTjA!VQKs!<<3% +!3+cSe,TrW!!!-%!!ED'WW3&)#/($%!!K:#!WW8j!!WJ'!,@7V66]t"9AT,'re=;!=,a.Wi`/$XK8P+X95L2 +XK;R%XZEVYXfVW+Y,hX6!XA`;Xfe`+"pG,5!%!83!Wei"!"8i-!=&W*!<<<(!pdsU7n?RVPU#aUSIsd +$)40qVPBo^USjNXUB%'eU&YQ%"TSq+USRqm!sAf/"on]+$NmB$W;lu.!!WQ1!!&[f$NL28!2uie"p"r0 +!!*'(rW!B0!!3-#VkFP"!s&K+!V-6c!!`N)"/Gqt!!3#u!Wo0naT)@][c%2d^%DBh!!9(IVss`e^A%[3 +VZ6_4[);FG$(noG_o&g/!5bN$!!&)G!!1?3kPt_&^r!5:!$8SP^An89^6d*=!!'aMS_Kk=!56XU[*\jR +S\W.ET^)RX^$bsR +!!9g>^@_I-f9ObY!!/@gqu?fE_NF?g!PkH%!:0[c[eKk&\c)TV!"KG1mf3J(!W]U= +%C-HF!!*-%!#P\;!P8[_&`P%fcY3!OAu7*jDuYZa3rF[^EHFZF0n? +#e6lFZF73B[]m'KYILmEXp"e1!!KU:ZF@7B#m(,-!"oA8!!]g?!#P\;!X/W+!Wp!D\-2j6#.V5S!WWB* +!XAc,!s/H&!<`NAYeI.F!sAT3!pK[j!<<22!<<*#!<)s"!k>bc!"K>9!=/b+W<`J)!<<6,"RZ6n!<<3% +!3,Jg%0QY5"Tec0!!N?&WMoq!#6"TK!X8W*W2l^)!<`H)"TSN(!rrK-!NE%#"9\],#6k4-WMBM"TW@O` +!3Z='%BcY(XTS_,#QY&/"98N&!$;gZU8k$n!!!0&"Tnf0!rrH("98K(!!!Y3WMBh#!Wqrnr;[H@!s#0u +U'h#&!5D7XKA8!%KQY6":)'/W>V\CiW:?Ya +VPO0c%B,ngVud##"TSW*"98N&!$;g[T;\If!!!0&"Tnf1!rrE'"98K(!!!Y0UnJ+q!Wr9"oDfL7!s#$n +T*k]#!u!!!!&\+^6-D8 +!1;[E!57h$_>jS;q>^Q,[`\['!!0X=li7$r_Z8Ek"MV=^^V9RF!4hOu"/a8D^?GV#]sQ)!On&JUJ(fq` +bG+n7r;Zhsr;Zr'dtY7-!$]%ST)bap_S!4la1emUYI=Lo!7#umX2E)?b,Dr+R_?/?UAOuoX37clWV-;m +S$2Pd!mS9Zr;Zl,_!h=*L>-S0!s8N0*NZ`_\,cp<#QOu2!!*0#!"T,4!s8Q0)m$NY]Dr'9%gVV)"U+l,#/%;T!WW<.!#5J6 +!tPG7"98N,#mL,)-FLFr!!3H,!<<<(#QXo5!W``8!WiH4!!!')%0-V="TSc-"98E-p&G6s!!3-#\C:N7 +!"HF<"p4r/!W]aB!!!3*ZiK[t"LtrC!!2Qh"p)47!<<-$^]4TA!Wi?*!!!)r!V2!%A!N"TeZ9#lk1@Z+RTX!XJcD +"98E'!!!>2"pYD6!s#^A\H)j7#QOu=rW!W9!!!/*]EA38$NL76]!AK@\Zi9J0s.agYILpK!kbtGZFR#mJmRq!<<9+ +!!*8&X8j[R!"8i3!!!8#Wi6C.!!NB("oni9!!3-#WMu[!!sel0!$V[NR,U[bH3WMlo$Y,nb-XJZ=) +!s&c1!s&N-!!a:.W2us!#Qk;3"9ec+!r`01!s8Z/!='=-W2Ziu"9Ju8oDnjj(Bjd>#-4R%!!EN,%fcS4 +$j$M6!!EE0#5J6GUoUKq!XA]+!!WE-!<#h#Pq) +%B0=3"9\f/!3*"!!!WS>!9sOeWMoq!!Up'n!N?)#!!*,9!!rc1!rrN*!!30%qZ/VY!<<6+!WWB*"p=o0 +!!6uW("Kec*Xfeh* +'rnC)"T\W-!!Wf2!WW4tV4e.s#lk&.!s#0m$im9"nY@G'TV\N`U8+N^T*52r +!"&].!,G8!!!!!*$ +!!f+p"qgn7RU8S%o"U+n&SdC^^!sA],"Te])!sYQtVZH\q!!<-"%g/U-!!EM(Tq__k"9ec+!rW*.!sAT*!!!Y- +Vum##!sS2pp](O"!!B"t!!!&u!!34tUr`T;c+W'9!58%*nc/]tg\:aMS&Vi,!!9mKR/$^c]r:u3g6M3? +$(m[#_S`L\]Zm;F!!@/AcaiEC")k9EdHCQ2c(aA$!iNrObl@aWmf:3)!584/!PQb$!8%8P\[Li)!4fuI +f`2/Q_QUYTr;Zi.mJmBgc*kKPl2Ut%OjU_Vp&G)UqZ$\pf=q1`pAb5Kg\UspXkLC]OjBYqeS8"98]2!!36)!k>`@!!<9+!!30$&0LuT!Y,86#64i-!WWT0 +!I!s/H(!!**#]=>?P"98c/!Wi?*#QOu-!HQ"p,)!!!NE(!!9Y8&HMq5!XA],!rr<%!WWB)!<bOZk\,cU1!\$Q(A'sb=L[KO"EZF..A[B[-G\[&QL[B^,(XfS\-W;E\)X9#C+XKAV-XT>T)riSenY-"e-#QXr-!j&O*$j$V6"98K,!T*C!!<<,!!<6%$ipG3$N^D7!!<9( +!!r`.!Fq_YF08^:op6Mp:e(#g0iuW5-BN]X%,/!mS0^li7.4\]+X5!!'C0 +!!'_$!5\^9^A7g1QbU]DfDkr_[d3to\\eF!!!BpJa/8h9!4hFr"2_7rL?egA^V?_epAb<(]u-`E!!/Y$ +r;Zo4^8Lf-!Sa%>!$]IJ[^3`N_n__a\\Gqp]>"?O!5?+S_TW#!WPZ!jX0]RTZ2=S&X3^D]#.Op=!WWYu!<0J2]s%hD!r2g9!WWK- +#QbM;"9AP4\@MbE!!!H0"9Q!C\uu_I!<*$>!4BGK!P,_L\[hhB":>,5\@B*M%gW.B!!!).ZMq64Z2l3N +\Zu28[Bfq@"1,;>[Bft?Yn4%FZ*Ub;"TST(!P#VI#Qau3rW!r>!WWE+\@T8Y]`eWA!!q?6q]!_eC"TS],kl:ti!!9Y2!!!$#"onZ(!4KK?b5_SFWN#"["T\T*!!'"^!!*?*ri%=L!!!<* +"Tnc0!!!5&W2Tt$#64o1"p"l0!3*%""on].!!WE1W2frtWUR#*XKAY)XT8Y/#m126!:!!!0)!<<3)"onl3TF9'G"T\T*!!'"S +!7_&W!N?)#!!**#!3)q!\cD$r"TbX"#lk,-!X&]-!!32r!!WJ'!$hrUSXTX +!!E?.!WWB(!!*',!!!3'!!`6!%g)e5!!<3*!!*'#!!WE(#5%uo!"8o7!WW9%"p"]3!N6%n!"T>:!!!0) +!<<3("TSc3SIXgGk=!!An=a+*pc"fKVM +!5>fAXM2aP!!9U9_YF0Q_Q1Pf`Oc*Me#NHK_RolT!5,qM`Ol2MW;r1%WO'87!!9pB\+K_(]u.UZfC]+H +[K+(UVX=Eb_l<;/li7$op](>oc2I^f!!353\E3bp!<<0$!4_4m%0Q\;!WW?*":GJ:#QauK$NUUE\[o-Q +!!iQ+!Y>>5"onW/!XAc.!!*0%!rs"G\FHj?YdLpEZF0f7$igD1!!30)"p,&2\@Me;!"K&1$3:P8!WW6% +%KNuH*UNh.!doa\,cU1!bb#kPt_g!=&], +rWFPR"p5)4!!iT2WMuqo"TS`,!Wri2!sS`*"p5#1!rr?)!!E94X/YWk(94L=WiW?+!=Jo3!#;@+TVYHXpb?0XoSX(XT8U)XT>O)Y,nb%W3!/(!NrL)Y,)j3!@\HZVlg%$XJZ()!sJZ) +%g)g4VuWok!!E9)"pP&4!!"@EWi;tr#6Ou4nGifjWrN2'#64ql!"K#0"/u;$!!*'&!WW>%WQG2B!i2XS +!!NB'!rr=tli?ta/d)1Z!rrH+":587"p4i3!=5KuW1aCq"on],$igA6!!!3*"p+l,!)oDn^f!W`?5rW!/#QjT>a"TeE!#6=f5 +!!*'""TAB(!s#-sU!E]B!<<3%!2\fXbQ&"OU]CJr!5D8!V$-p!s>,A=!!/mj#QUNp!!8gk!!Jsi!2fgoV5BcTV5C*iVkO0g +S.GT!.160LVuQgqT)]#s"TSN5!s#9q!2uCf"98Q/"oni-!%+M>V59sm!s&_u!!f3r!!36,!!_uop](d) +!!B"t!!!$"!s/H)V5;96s1.(g!58%*irB1l^;?9%!!0sDn[et'^WNOX_t*j/[_qD2!NijSHq>gQ+b5g/p!P+-T!!'RI!7UuPVngSVZ;k(!5eR4"L"rC[(cA:*k\fZ!1Lk,!1hC8!2?^uc2b_qb)i%*`QA2,WrU"uqZ$ehgAh6"Vt^5p +_QBKXh_ZaXR,ugU)1!4]YP%fQGC!YPM6"TS].!Y#2=!"8o9";Ln:\%2%7(V$cWX15J9!WW?'!X/o4!;!406:"UY50$,!AC!k,W@!Y,2B!!<30\@2OK +&HW.;!Wi?2!#h#Pt*$N[4-!<<-$!!'!t!kJBu!"T;7V6-5gX/Mg:!!WW-"9\H""p(\(!<<-$ +[K,Un%1E4:%0-A6V5pGl&c`4*!!NN2"/i%*p]*8V!Pc!!<3$Vk@"TSW/!!3?)!!*'#%06Y5!2QQk$iU,@!Y#/1"TS].!t#,: +!"&c5":tP5Uo!UW&uVM#S>W._"98Q)!sSu4!W`B)rhKQ(!Vl^+!WW?,!!WN0"TY9nWMKS!o`4pj!s8l2 +"9&9)#+_cl"Jc.o!"T>8!W`?,"p"o3!XkZsU]o'E"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z8]s%gE$- +X-flbUnJq3"U4r/"8Mp$!Mf_s!!*,8!9*tf$NL/9!!!:uVkKt#!!qum"U,,5USA4l!&"ET"TST0Uo+:p +!XGBoT`tW"!X>?s!!NH0!sf&1!!NB'W2Kb#!!*9*!!!9/#,)g.Vl-?n#QtC,Ta.j21l1l2UmN[^O9X!57h$_>jSHq>gQ+b5g/p#+an%dESejnGiR"_Z8*b".d?# +^?>RsWUTrhYJC):!gg?mqu?bl`q9<4c,0G[q#CPe]t_=qr;\"CW;s!E!!'p9!!(6RJ,m9q]pcLGR_uhF +^R_D*YHIr4gA:jRgjfA)]#=@D"0np-XRlJo`g+F-!!:2s[.XLd!!'J*!!T%/c\pbTrW(1C!WomAjo>Pc +!!3-#\EEo%)?Ts@!4W+4"p>28!q#Cp,#QOu- +#Qk_?!Wfg?]`8Ab!!NB'!WW51e,\>*$N[a%V?$]#"pP,4$3LI&X0&/up](g-!rrH*%flY3"f85l'*&+(!!E<& +"p"]2"9YU)Scf4s#Qb)'!"T,9!!E9+":kJ7!NE$!!!ggM"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD$r +%L/u1$31&0!!EB/!!!$$q#CU"WL!"9ec+"fnYu!"Ao2Wi-(&!WW6%!!E<,"otR$UBCf&!=8`4!!SpqVZWrt"onW/XVIrBXfVm3Xf\N* +XfAN)Y,nb-Y,n`/r2gj7XfVW,XfJN(!=,a+XU>33Ws/Y+"TSf6!X'aoDJEUnm,Q"T\T*!!&k^!;umM'E\=:!2Tc!"p>,6 +!BsSJ(u)o`4pj%flY7!<<3(UoBgd"fDY.!r2g,!X8W-!!WN9!!<7uUo=>!cN"+L!!<3$ +V<.d%!"/h'!k!57h$_>jSHq>gQ+b5g/p!Q(Mr!!'RI!71]Ic+0e;!!0m7nGiU,W;HVs_onDF!!19Fo`,,oc'JD1 +q>^\Jgo1:h^&7pU^q9Z_Y5eR7cC+aKW7h6jX3S0'X1nYL\\Go&QF=s:ZbNZWrW!/+WPSW8ZFou5!k,eV +nc/ckc)8>D!!AtMduX5'li7$op]1?-rW(1C!WomAjo>Pc!!3-#\ENu'!<8\A#>\](*'+\c/lJ[Bd3I#QY/3!!!0*!!0[AZj6p*$N[a< +!<<-$!!'O=!jMau!!WQ+\@;\E"TAB)!Wi?2!Wr/t"p)47!<<-$XT7nl$j-J7!!NE(]"#8^!"eW"#6Ou5 +!kPlA&GZ;l"onl3!!'UB!!<37!498J#QOi.\@MbB!!3<*!!WH*!!3>,^'+Z?"T\r2"TSt<"Tc9?#QXo, +Za'S;['Kh>YdXc9ZEpkBZMq0mYIO_?YdLgFVS'=?[C*"n;Qs"LPPL!=o7q!!iT*!k872!!*9.!!iQ)\@Mpg!!35$WTF0a!<<3%!3,2_ +"T\T3"U_(BWMld)!!WE3!!i]6!rr<0"K8.%!W`N1rW3Q5W2Z`u!!WW7!3*)sWN5Qk(TsmAXfee/XU#"7 +"9AN-"TSS(WM9\'!VcX)"p+r/"9Jc-"KA@/!!!2m!!EB)!!*61":(p(!F#"p>).!!NH,!"&c0q#CU"W&XfSZ0#6_!- +!X#@%VZm5(!rrQ,"08F)"ono/#64c+!!`]2!(#5%up!"T/4!!*6+ +#Ge*q"pCk)!X&2t%L2t8"/DiiV54Ft'*&4=cN"+L!!<3$V<.d%!"/h'!*!!WJ"!DdC-0h_QgtkpAb93^6e0d!PYi8!:9aeYGqL$!7(*7"KBqE]sP]X!57h$_>jSHq>gQ+b5g/p!PPr. +!!'RI!71]J_mutol2Uk"Z1.ep_T)KR!h6XCr;Zl*^[qL.Ibau(q#CPl!!(8sr;\(QYlM>JZN.%ub5eZT +ZN.28\\+?X!3`9:ZbgJ:^mVpNZ)cOV!!\n/!!&k?Vtg;n_oD0G!lC/Wli7*SS^mH7li7$op](?._#=>Y +!!353\E3bp!<<0$!4_7n!!rN'#m.cL\$HqP&Hr1G!!WE-#8dIH\@o-K!XJc/rW!$/\@*"K!!WH)!joPM +\F6^<['6sGZF'Z4#Qb#E!"]54"TSc0!!;rr%Kc_3!kknL\,la;!ZD1Qn,Nmu!W`D1\ct +!"T57!!NS3]=GSa!t>;@!!1CG"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlOFs#QXq:\c;^5!"f,0!seo. +$2FQ*!Or.2!!*,&!;$7%#lt20"U+l+#daTC]s.VCn,NUr!!9dA$2=KV!W`<%";\AU"98Z,#Ss\U[f[NK +\@hkM!s/H(!WrE'!WWY?YlFk,!X8]+!>[B`3-\?`QIZa.$F['d0E[/d\B +]!/BHZF.!HY5eR5\$$)=]W)JB!WWr9!WWe@\c;f?[fc[7"98E'!!33%!XSn=Y5eP;n,N[o#.h4S"T\hl +!!iT*!k872!!*'(('4IE\$Q4[!!35$WTF0a!<<3%!3,2_!!iH&!!4"WN;`p +!X8W-rW!$,WML('!!WH)!i)crWU[),XK8P'Xfeb-!Df!!NQ,!ii1( +p]*)P!Z?0!!N?,&>6#$";Cj8X8iM/!WW9'"98H)!"#Zu!!E<)"p+c*!<<6)!2Zgs!!*A.9r\;u +VlU-)XfSY,XKJP*Xfee.Y,\S+!j/W.WMlr#Y,nb(!g+!!9's"98W/!!!'# +!Wi?'#6Cip!!!Q!!!`N/X/2j#!=%cg%flY4W;uu!!<[$!!8pk"98T.!!!'#!Wi?'#6C`k!!!T"!!`N/W1p3o!=&)pp](g*!!B"t!!!$"&H`"? +UnIk4!<9Ug!!'_*!:Kmic*=C9oDertgPbh,!O8U"!!AS'_nGTP#Hb,AVSC*P^uYOuf9/Z!%c$e!7[=:!5?7NYKa,gVR*nT[_9PWXi1:`ZeM@Fb,rO]b*`50cc_@L!7c#_ +!!TL>!!'""o)Jg3I-Ub6_P#0K!:0[c[eKh'Xe#Fkbl@eH\@CZ$"T\T)!!'On!!33/"o\Q/!s#hB!!g!A +(a&eY!Y582#6G(9]=ItD!W`?-&-9;S[fZU1&-)aB\@0!6g!<<*-"M+R5!VcX%!k#WA!##D6!"T22!!!)G!!NB'!WW51e,\>* +$N[aYI_1H +!5,Z=!rr<)!W`K/!<#kl:kh#R(;3!\"6PW=/b1W21+,!!3Q/!!NE.V5gNq!WrH*"UkF2Xf)@&!"8i.X/W"tm]@2+W3*$# +!"%&g81T<>8uY,ne'Y-+k*Y-"\+Y,V`(Xf8>'XKAV)X:,13 +XfW':"To2:#m1>2$31L)Wi-+%X/#^u!!!3)!g( +UnJP)!!!<.VuQkn!"&h&Vum#1!WW3."9&9#!mUcL!<<3%!2\fXbQ&"OU]CJr!/p!!NE)"pG#-"onk*U^@,& +"7Q9p"p(U!T`bGf!;HO)!<<4t!<<*#&HN%9"K80uaoMIPi;`kko`4@Z!4i(/!N`6o!!8_2^\Ij2\_O=a +!!C*FWPe8<#-lF`e=!q>q#CGVc0kW8P,uFAXS)Yb!!CKj\Yo<)!5eC/!MI]N!!'_$!5\^9\bZ=+\]Y!* +!!0dJli7$r_Z8$`"O-qGP25F(!Q)P6!!/tBrVuuBJb9!GPJY$6!;6BnWL3Va,.kPhRB,.gcb@B;Xi6OR +_QB]iYFi\NW;r3sU8ceZ\\+oUrVuu3^%;:/I)i>h!6qD4!!19Ol2Un"bFA;-li7$op](?@^A\,W!!353 +\E3bp!<<0$!4_7n%Klh6"TSf.!s/N-!kPnO&@_`J!"]/:!s/J8Yn$m:!!<-"$j$D/&-<"8!"-3H[^bk5 +(UgQWY.1b@!!!9)$3V$G]!M\D!!rZ+!Vl^*!<<*3ZjQj7!"T&2!rrf"!"At>\@&jL!sJ]6!!0S0!>ZaI*HZN.D< +#HtH4ZR*$[!!9X8ZN("0!8\cMj:!!WH(!!33(rW!,/]Xer5&#QXr3!=AuAU9(0p!WWH+!!2lq%KQP0%Aa=1!<#h#Pt*$N[4-!<<-$ +!!'!t!kJBu!"T)6WMKe$!!*6+!!3-'!X/5"KAAs%KHS5"98E&!<`B)r;[A/WMufr"TSo1!=#C%!!!3%W<3,)!!G^p +!NiK'XfAK+#-"`("U;-3Xfee.XKD]/WX>`-Y-"h/!3pTVnKY!X,0nT*#1mUSOZ^USX^eVP+3eUSFW[V#UJtU84Oa +!X/W,!]*6*Eba$JYq#CJWc(aV+!2B&bo)Jm,]r/U@ +!!'D"!!9OI^V'UI^$bs]_u9Y`!"T>8"p"b:\,ua8!X/W,!!Vfk"T\T)!!'Of!!WK,!!!P:\0/9a!!3E- +!!E9'!!3-$!=&T1!<`E'!WiT2!!30+!kYo2Z3@SEYI1[ArW!-*!!!81]!_;5$NUJ4#6Fl2\%2YE!<*&q +!$)(?!s#QXo,\,cR0!#irCM.!!39'!">[&W<<2Fl.!!3-&!!**(!!WH,!<<0&"U4r.!d/!X>[,!^Sic)^@7!Nj0,!:g*j +[&Ed#!4MV%"2:tnL:mQe^$bs[_9BA!!0X;nc/^$ebB+F +_nPR>!kkN4qZ$Z(^&7p3Vo&<2"gP62!3+3A!#;K8!!'gFSZUAGW4]RR[K+:KWO]^KrVuu5WVletWP\H2 +!PcYR!!0mMnc/a*^;fI=!iFA3q>fj^!4MY&s1/+/d/X[Z!WiB']!MG=!!!0&!WiJm!!NB'!WW51i;a&_ +!X8Z**s!Jb!!i`.!X&K2!"/c.!!WQ2!XA],!5#iD!!`K5!s5mAnZi\3ZF[BM[f?R5"9JQ'[Bp26!"KJ= +!!3V?[_8sM!e&i[fld6!WW6$[(68=!WiJ3!:p0n\@;S?!Up'n!Or.2!!*,&!:'Uo[fld8!5#YM +!!!'#!YG)+"T\Z-\@Db:!!!*"!!9[?"o/-']!8jI"h"C5p])E?!!Ba?!rrB("TZ0G\,cR4!k,HI"gklA +!4B06!4/lB1]RQa[B]t@[C3EGYIV!FYIX_BXoPl6!!NA5[C#u?!W]a?!!NE(!WW9']!q_A$adGO!t"Z$ +%1'SQYmpg=!WW?'!WWE!!"KPB!t_rQ!WW<'!WWH*!q?6r!<<22!<<*#!<)s"!k>bc!"T27!s&G&U]:Gr +!!WE*!sJ&m"T\T*!!'"Y!%@mJ!#h#Pt*%gJs:!,o!!NB%"7H3n!<<3%!2]#^p&HH@!X8Z*(]aX;"pFu/"98`.#lk#,"p>,3"on]) +W2K^s"onu4"/2X^U^j/uUSamg"Tef/!!/de#5A0.$NL/.$DsStT*55r#64i$!"/l1!rr6#lk&.!!!%q!rr?%!<<*-!!8spSeV5-!"f7P!!NB'!rr=tjoEU*$jEF1!BoVZ6]!!!pUnU]CLkTVqknV5BsjTr+``TV/6YUn=RcV4[jd +TE58tUo(!h"Tnb%V>pc$!!3-%"/hpp!stZt#Qk>*!"B.2Tq)Pm"TeZ,!!3-(p](d4!s8t-VZHi#! +!"Si$/9!<<*#\,m6B!=/Z4%'U`T +!bc +!"K#7!(W9"Si$.!WrE,!!T-tT+_5>!!!''q#D*1"Tno1!!!$$"pUm)W2ZTq +"onW,)?g6K!<<*#W<3,$"ono8TG@Y2!W$XV?$Yt#GM8("Tec$!"T,5!!WE,TVn=o!>PS7 +!X/PU\t0!Tr=an!rrH.!/RST=r.T!3"&N^B!&RYPeG%[(Q58!mRUNm/R3ebKfAQ!O&s. +!:0[c[eKk&\c)TV!"T)4!!<>4[f?R3!s8u5!s@ul"T\T)!!'Oe!!NE)!!N?++9;PS\@)YD"9ni?]!o0M!WWB+!!<9&!s&B%!Or1C!!*-0!4KSJ!WWB))ZTpB!=?dH"T\T)!!'OY!8[\d!kA:A!W`9' +!4TE>!rrE([/fdu"LtrC!!2Qh"p)47!<<-$XT7\f%g'BD%L<%7\@8sJ!!Ni4"o/-&!<`B1Z+1&5!!WK) +!X&M7]D)@2"hV4S!jo6Jq#Cm*\@hnD[(QGE!X/W**X2NC%hZ+W!"9J`.":5&3pAb=)[CE[HrW!',!!30%pAbC! +!t#+C[^uG<"9S].!<_il#QXo,\,cR0!#irK&Y +-3F8K"TS`-"0&8r"p"i2!"Ao;V5g0n"9JQ,!!fL"!"/c-"Jr#rnZ<>)XfAJ)XU,%7WN<0%!<`H!!"K#0 +#64l,XJHR3!/!<<6&W2Kh%!!E>:!9sOeWMoq!!Up'n!N?)#!!*,/!94%i"02D0"onY& +W2Tas"Ub;6q#CU""98_#WI%p](O'X/E!"V4nLr!"K%/X8r?tX8iD*"Tn`@"o\K+%AKg& +"feC_#R7E2WN63(WiZE'Y,\V*Y,n_,!NiN-Xf\b%Xei2%Xecl(XUYL<#-G#*"pbD9!Wih(WW`D+!X/Z/ +#64u&!!EV(WMfjs!!EK+!s&Gs!!WK-#Qq0+X8W)%"9J],"RuHs!<<5$!<<*#r;Zm#WN"/C%flb4!s>?p +!!N?)!t#&2"7H3n!<<3%!2]#^o`-<@!<<9'"T\_&V4n.p"9ni8!"GX#SHf5u!!WE-V4mqt!!*4sUSmXX +%]6%qV5C!l!p'hpAbB-df9B8h":XsPI(;i^lSNrcD[_V!55>V!2RZ7[]@9ZXh=_H_m@+_d=p;>`N.1E +!+j=O!!:$SS,**cO21)^!iNK/l2Un?WP\N4li7$op]1?)rW(=G#Qau,"TZ'E$NU,,!WW3%mf3Ll!!3-# +\D[Df!WE'#!s&ZM!!353\$uJB!WiB,!!'XA!!E9)#64q8]Xn.I"9?'E[dgX6ZaI3NYd+6/[C3HM":YD; +pAbZ4]*&-8"TST2!!30$!Vl^9!WiQ-!#u'M\HrB?!!33&"onW,!!!B,!<<*#\,m6B!e&f[fQR1"TSN1]=7hE!<<2/!:p0n\@;S?!Up'n!Or.2!!*,&!:0[m"h+I5 +!!Wl4]"#9J!r)a"!WrJ5\cN'1!!WQ-!"ZTJ#PS3$\@f/^\+fqH$amJG!P>T@!=8f1!WW<+!rrM7]=S'Q +[KHR1[C<=GZaVcp!4B2AZaR'@ZEg[GXoPZ7ZF-sGZa-sBZF[:@!!*h:[h&N?!Wi?&%D'(M"T\e4Zj$R8 +pAb[)!"uiL"9K,7!!33&!p`! +"9ni0U8Xsi"U"h(V5!LU"uVkBgd!MQ9^T`b`)#58*,Uo+=r!mW1^,cp](g2TqqhlW1=+n#6G#1!!/%0-D9VksFt!bP_DBcG$7I]*l0b +^[fuj5!<\!"o88&HDn:#lk)0p](Et#m(/.rjW0=!rrT,!!!NE, +!"K&1"9\]++onjY[0Zm8!5#lD!!2ip%gW1S!k>nR\?m4U!!33%$MXT2!Xeu.#e7AF!"Ao0!WWDo!!iT* +!k872!!**!!!353\BY'b!s/H)!3E.""9ni+"U>,2mf3Ll!!<3$WT*s\!!!$%rW+2E!!WE.!3Dt#"onZ( +!X8n*W!38&!<<9*"/Ptu!!3S'X/YTj%]HM3WicI*XJi9+%KQq?q#Cr*V5pNp%KH\B!!EH1!!EAu!!E<- +!s8Q&W&!X$.:l2UsdW<*&#n,NXnWT(XTkl/W3*2) +riIWPT*GG!Xfe\+Y-"h*Y,JH*#6Y22%Kle9"p+iE!2$9f#6Ou,X/c4#!VcX*"p#D>W2lnsU_Nk0!Wi?- +p](d+#QOi/W2Tdt$31/1!!Vlm#6=f,W;uu!!W$PdVPKoa!W]!fW!*P/#m0o& +&#Z/#U]:i("UtG6"U>#1!r)`u!=&]/!/r"onZ*rW*r?!!!*$!<<*#U]USt"ehih!sSr2!!WE, +!WWSI!!NB'!rr=tjoER)%]9L5!!*-)!2QOn!rrB)`rP&u"Jhgp!!2Qh"p(M#!<<-$^Aupe%]9:2"TeZ4 +!2ZWi!rrW/q#CX&!!!%uVuR"s!!`T+#64o-%0QD+#6G)0Tr=W`"8Dj+Uo=A!USn=r!!],5!rrH@"p4i6 +T;<XVP'^fU8FTZU].,?USsI^!MZHfTqeN\VP'iZUB1T$"98f3!!EE*!ZD'0VkOCu!g9j#6=f,U]CGq!WjSOq>^Q)ccZ=@!!0X=li7$r_Z8$`!6b3=!kup]nGiU9_W1\!VTkIXpAbB*df9BI_YjH7 +UA4clPI(=VW;Zc>E3mag`LjgDX3-mEYJn9"YLILk!3=;`WOB^QbG)nBZ1@qsJ]FG^!<:=6!!L![^:'Eq +!!0d?qZ,s_!4MY&s1/+/d/X[X!WW3*\uceP!!3o;!!!&g!!NB'!WW51i;a&_!!`T+!!3f6"98c3"9Ac. +!!3f8!Y#,2!X/l.!XK&3&HVq5\@T*e&f\,ZUG +!!*-6]".tK!!NK*!!<3(!!i]1!=&T)!tPJ9$31,0"pP,1!s/]-%0?M1WN2iaXU_A5XKA!'#6k82!+'Ee[E!"Ym,VlB_*!!*B+!Ku!!iQ) +$NgI1V#UQ&&ciICY-"c4Y,Mg6Wica6$EC5.riHA+Y-"h)Y-.c+$4Ei9X9Je3"9SZ*rWWo:$ig[9W2K[t +"9td""on`.q#Cm0!!!G+V5pVq!WiQ1!!N&s%gE"6&c`$6Wsf14"p=o."RuHs!<<5$!<<*#r;Zm#WN"/C +%fl_3!!]Bi'*J:;&HVq4!Ug!l!<<3%!2]#^p&HH@!!WN*!!<3(!!i]1!?(uVZ7)),68,O!" +Vl'Uk!!`\)T`Y:jW1a+l"Jhal#lla]$NgI.T`>,u!"&_(UnS'kTEk[oV?d8.Tr+N\Uo"0iUnaQYVPL)a +#GA#i"9J].!WW6""qUhE!"5a$U]:Gu"f%aq!!g9j#6=f,U]CGq!Wn[etMWPH6mBC>g%WR%='!!N?&VV8#a +mJm6qY5eR9mf:3)!4M_(!IDW+!8%8P\[Li)!4fuIci='Zq>^SZXKh9q!O8`e!!9@=^\.X2^7,*&\]t2? +rVuu#W;6Jpc("S1$.6Gg!5kN2!3!d6!#)[]sS.J"Tl%2o)Jp'\,lX2n,NXn\,cU1!!!'=1!4B-5!!N?&$FRGH!=/Z+!P5YJ"U"l,!k>fE!!!*'"!N?/$!"#64r."8W#m!!`N) +"/Gqt!!3#u!Wo0naT)OCeYp3r^mF0`!58%*hZ*\c^%hX.\bQ4*Qi$g`_"##>YJm-KWU9`e]sQu'rVuqs +li7$oY5eR9mf:3)$,6H?R)?2DW7@fh!8%8P\[Li)!4fuIci='Jq#CK,^9-r+!ia)8oDerKc)1+5!PPr3 +!!&Pnbl@aX^V9OE!N+-=!$AbK!!'4F!!'g@]taWbNm>A,c`=^^!6hDB!3rR)^:a=C!MRR2!!:'4^&.j2 +\\I\8"g-%S\[8g3!!9(/WVcb_!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&O,5!"&]4!Y_lO\I/B=#QOn: +\@2SA!m!!NB'!!Ke5#lqTJ\,u^4!!iY@!!NB'!WW51e,\>*$N[a4!XJf4!WW9&#QOi3!>)cP\ENu!!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3%!3+uYp&HQJ +!!`Q9U8t7!!!3B*!NN,t"9AN)%0dFrWW3/)o)Sai%flY1"K2D&Wi;s#!!<3*!l"^=!<<3% +!3+cSeGosXWGa7 +Wi,mt"onc/#64c.!!rY'WMp*t!$haK!;9$_jJoUo+1p"8i/l!"T)1!!K)"!2uck +!rrE'"p2O>"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$^Ausf$j!.)!<<-$ +!!EB(WM9(drW*]:U8Ode!!N?)!sS`+"TSl0USXdkq#DK@!!*(rU]pf!!u!!WG!#QXo."9AK+!<`E("J;HdT;\BWTaUu-!X8Z,"p"o0!!30*!!!9*%&Besnc8Fb#6=f,U]CGq +!WjSHq>gQ+b5g/p!P,Z*!!'RI!71]G\bH.*dAZU9!iWo9 +oDerl]tX+=!PYc-!!',)^UX?[^:*k<"0Jc@^&7pQbJF5Z_NE$=!3)p9\]^,XVS'IP]>Xcj^Au`nXT56# +qu?ef`3fFB"2CqQUAFojXRlJtTY84=fqlBQm/R3r_lrq;li7$op]1?)rW(1C!WomAjo>Pc!!3-#\Cpoq +!!3-&#Qk&<['[=[!!!''!4]Z?!##M="9Q-D!!3/4['[6AZaR!B[^5n;&@8dI\$Eg@\-W'6*>SYW!"K#0!!<3*"9AS9[CEiU!!KpA]"56]!!!;p!!NB,"TZ%4#R.]=,6.]G!!U(:"T\T) +!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47!<<-$XT7\f"p)47!<<-$rW!*7Ye@XK"8Mp4 +!W`9'!k5eN"98W.!!!<*!#5J=[^lM6!!WK.#eROQ%/p;T"9JQH]"#?U!!NV1]=@tJ\%)J="9JQ.!X-*F +\,lX2#d1T;!W]b^YIFS?Za-mC\?`QKZa7$F]!AOMYdLd?Zag&B!Wfg@Z5N]E'`beQ]!r=W!W#>5!!3-#"98K'#65&1!4o\M\[8lX"6fdk!<<22!<<*#!<)s"!k>b_!!35$ +WTF0a!<<3%!3+uYpAbd-!!EK/!">WuW"K(1!X&M%Wr;u3"p>&2WMok"!32ltY,&2&VQI#(riH1%riH1" +rN-Y7XKDj2!=/f7#m:>3!2QWo#Q=]D&-2k5$NU5-"98W/!<]?tWN2iq"KS?!X/-:+!!i,rrW!E/"U4t+ +!!]Bk)ZTj@!!^.;"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\( +!<<-$rW!*3T<,$m"Si$5!W`9(!iW/u"98W/!!!6(!"T&5V5aRj!!WN/#-+St$2suH"9SWAWi<$'!!NOs +X/Q.(W2Tas"9SW-!X,O&W<<\4":1m-"9\e/WN?9)XfVK',-J&MY-"h-Xf2c/Xf\P)Xo\k5"g+o*(BFXN +!NDorW!rn2r;\AW!<pT!4p(ch!X,EuU]UW!"eMOm!s,^Q1[/L%C`hL/cMnHrl +\\kbc[^NY3c2n^V.1lQbC94 +!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__rW!NA!!=,>&A,@Q$j?Y3!jfMK"T/d(U?['I$@$F0Z;[BR'BZ*LgDZE^gF +['R%p+":554!!B!rW\B!"&k,Wi,n!!Xo/:!X/Q.!3*"! +"Si$G!Xo)8TrY3o!s/N0!cVk^2cUSOWYW1TrbU8FZ^Uo"3gUAt8u!s\f.!s&D$W2-'o!=Af- +"9SW*!"T&6U8+=e!2l`gVkFn-U]LVu$3183!W<#j!"K#1!2Tc"Uo=>"!WWQ-"MXp?!<<3%!2\fXbQ&"O +U]CJr!!4]PHZF-mIVn'4A[JdBI[C!$G\YugB[^,r:"TSf0"U,/3\ZuGDrVup/ +rW!cK!WW3>Ye@QW$31&0!!3E+!=f8bB!!!H.[(Ni[ +YR1pA#QP\B"15RE\.SfB!!`V;\%3"K"98K-!Xeu0!$/GX$ip>0&$!&A +!3mHPY5nX2[BBV<]!edFZa.6MYICmH['7!A"9SQ&+9DTF#6Y)2[^rsK!rr?'!"$*@$ig8.#QXu,]!f#T +\cVj2)?L&M[flp>!4TVK]"#>a]"#8^[($DB"oo5;kPtkh!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$ +WT+!Q!%A'S"U"f*"p4r."onW-!!WS*U]h#("TSN*Vl9XrWN!#%Y,SRpY-"h-rN-m;Xei2'T<52tXoS\1 +!=/f4"pY.-U'1c#!!!H,!#Q4J!!!_*XJi*(!!!0&!X8W*$O$\7!!WYu!<)s/"9JW/VuR:,T`t]'!rr<' +^AnEbB!!!?+V5pGoTEkr+"oo8:"Jqdt!Vl^D&-<'4X/`*!!<<6&!"].0W=Aq/!!NM*W2^1)"98N. +!XJc.!#DE3$Q90L";.E2"p1g,VZd1*Y,MT,XKJK,Xf\b/W;WhfWi`6*"9JT*"9\f2"Tnq/X/Q(%!!*-$ +#H+C)!!!$(!X&P*XK/G("9JW*"9km."pG22W2lbpWN*#!WMlknW!<;,!"B(p!!`N)"/u;$!!3#u!Wo@# +aoDJEUnm,Q"T\T*!!&k^!:Bh9"p5#3!!!0)!s&T+!!WE-"Jqdq#QP&/!!B!m!!&jkVPC#]W0F3WUS[pa +(T!ptVl5oVV5L'g"9ni0!sJi4!2c=l"o\K%$iU,C%fu_2'qD8!V$I&$"TST.!!*H2"p"]."oA;m!"T/5 +!X>G#%B#a#"p4r-!!Bt9"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z8Wq"Jhgp!!2Qh"p(M#!<<-$^Ausf +%frI,!<<-$!!WH(!2QOt!VcX1"pFu,$36cuU8a[h$igJ3'*/3/SHo8l!$;dS"ehlmU]CJr!rr<5!2QD" +!<<*("/hrm$312/!sUC[#lk&-(87W4!rrB3S#->iTr4Ia!iDif"/MciTEV-dWM?,aUo'r]VP"(p!<<0" +!]pPg!X,9rU]:Js!_P8]`8&;YJ79[S_Il)^q%1_[^NHT]o^XoGd5!# +ZhFG#^68'f",,FB^@VEh!!KA'!5F>r!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r_Z8$`!4hh(!Og8B!!K%@ +W6p@q!!/gMoDeua_S<5K!!0X=qZ$]4XiL)7!M..+!$-U4!!'"DQ2gp%`M"ooPA#Rg\=!"&c*$N[a!W"TnZ'!=f;+!%\qn\[8pN"98E7!WWA8])VgB#Qk)1\@/oZXr@?A +!!!6,!!'^>YQ+Y*!4oQ:!$&;OYQh>;[/dY@['p%>[B6jEZa@$E[^E=D!!!f6!&Xf]!#64`* +!P5rE!!r].#Ih.J[C6VG!!N`5!!9[e!!iT*!k872!!**!!!353 +\B4dQ!i`0]!!NB'!rr>#irJcQAcr)="9AZ3"U5%,WrWA*!"]A8"9\],!!EB(!>D$&Y,SS'Xfee(WiiJ' +Y,nV)Y,\J(#-"[*"p>#9!-!"8o1!!WH-"MXp?!<<3%!3+cSeGosXWH(V66ouXYR&]W+!Wr_0X/E#!%KZ\9$O$P6X/c=*T`1nsW2ZhkWWE/%!!iH&!ser."R,mk +!<<5$!<<*#r;Zm#WN"#?!Wo0njo>Pc!!<3$V5'B +Tr8(s!!!H1!!K3u!!!E3!s&P$U84]U'`\7Z!!!3+!!'$mTE5/t!2u[o!W]!kT`q*aV?!NgUo+3dVOXN[ +rM23FVOn"n!##>5!!5!!!'$Vl9Xr#6Fu3UnaQVUC.)'"UP;3"/V^o".fFf$)FAqSYuSi +!WWH'!!^Po`:*a.^8AU7!9aC_XKMU(^$bsPc!!3-# +\Cpp!!!!'%!!il7!!!--\@T0M!"]/2&%D]HrW#Y#!!ND;\?`NM\?N0E[CWHGYd1[EYI:dDYQ+h5!!!'$ +"Tc6E\$Q\H!"f22!=/Z2"Tec+!<<*(!rrN*"UG/3!!!0&"Tn`*!WW3%!V$-n!Wi?7ZiCC8!<<0'&c_n4 +!l"^=!<<0$!4^MYh>doa\,cU1!c6!"fM>!!!H.!X/\0\@T8[[g3$=rVus+#5J6R!=/Z2!4]T@!!4/dB!!PElY6t=1[B9e@Z`gY=Za'S>YHkRDZ2h2!WWl6!X0#5!!NE-!s0eL#jDb_!!35$WTF0a!<<3%!3+uYp&Gg/!rrN1"TSN*#H=c'!!!E.!">h0"o\Kr#QP#/XJr;(Xf\V&XKJ_& +Xf8D(Y,SS+Xf2@-$j$G4!sSh0XK86,!!!H.!!*9(#6b/3!!*'""p=o1!!WZ1"98E+!!NK*!#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!2aOVP^#aUSFI_"pb50!s/W,Vk^#\$ig8:!!!$(!!WT.!rr?%!!WN*"onf2 +!s8N'"TS].!!*-$!!<9#!;-=&!Wi?2TE#)q!!<<4!!!$$^AnENr'`\49"UtI.Vkp5g!<<6r#R(21"Uh$%VZHr.!2H(s!!T6m$31+(TEV'c +TVD^dU]IBcUo(#`!McIk"J;?c!WW?-!i;Za!sS`+!<3k!iVoo +T`>)q!"T&2"UY50"Tno1"!.FHnc8Fb#6=f,U]CGq!WQWrTTB!!&pfdej(HaM"AD!!0((qu?i5WSF0@!!^*I!62IpS`g(?!!'J&!<9V/!6kKF!k>c&!!NB' +!WW51g&NQ%%fcS2!!*'*$igF?\@MYA!!3P4]t+7F&-)^CYRCO4ZaR*DZiI;8Yl:sjYIUXCZ37_B"p+c? +"U"fAZEgsL!!33&#Qk&/!"],1'!]'Y"TST.!sS`.!WWE)#m()-!!36+!!39-nGi^o!WW;6\-]YF"p+c* +!X/T,^AnEh?"9AZ1!!3<('`\?F]XYP\\@`(K"nhpD$ipI@]=@nD!!NN-!"T_C"Tnf0!"/e:\[&gI +#6Fl1"9J`/!k,9RrW!)/\Z5l7/$l[j#6h?@YdUjC[]d3E$ad5GYHkSCYI4E6ZFI+=!<<84\?ZDB!!!*$ +$N:#W]sIb@!joSJ[^$&:+TMQD"p#&2$aR@O]"56Y!=/Z/!#5MC!!!!NK,"ono/W2ZMk!!NH)"U"l2"9YR#&0:rV"Kno'#6h64XU5<4Xf;<%+KhZFV[]c1$`L20%&g<3 +#Hb,-!!<<3%!2\fXbQ&"OU]CJr!!BrU8Oo_ +$NUG3"TT)7$31/8!!3`4!W`Mq!;HO!!<<4t!<<*#r;Zm#Unl*4s1.(g!58%*g&M2]YJC&9!f#IFqu?cF +K`1rb]ZR1V]`=k5T!!1]GrW!(uc+:BZp&G8kc_/1nS*'ec&!!NB'!WW51g&OVC!"T&0#QOr,!Wi?1]!o9O!WW61\%2VB!!3;4\c;d5[BR$F[C3TQ!4B,<\??@H +[Bm*FZF'i9!!33%#dXa9!WWB)!<4"T\i.!#irJcQ+:J5M"onc+!WrE/X/N#u!rr?/W2]n$!!3;%WW3)% +XK)9%"0AW+!r]5\W"5o1Y,SS+XTeh."9SZ2V[*;)!!NB(!!r]/!WWk+XJMm!!!3-*"9ni0!Y,DL)XfVW+ +X9&L+XUV83XT\b-#ck).#QXu-"TABU"on])WW9#sX/2j$!=/r3$3:>7#QY,2XfSOu!u!!!3'!rrB)!",[#VZ6f! +!=GX#!WrE("Jhpq!Wo3lUnjl^VkjEkUSF`Z$_aGmT;JB\"T\W*!WWFs"on])"T\W($3C;2!#(p&Tr%qm +!WWE,"onf-"on]'!sJZ,!!!*'qZ-9h%g)h4!N2Wh!<<<+!bPV>@ +XM=Z5!Na?@!#<5H]tM4mc+X1n[^OJL!3*c?VS]URq>^Mno)JlIg7l=L!9aCa^RNEO!!'_$!5\^9\bZ=+ +\]Y!*!!0X=li7$r_Z8$`!4he'!jTPTl2V"&YJ7$L[e'P']tFCGVn_d&"TSP-Z-C#W!!:E[RJd+.W6YGD +^S\=;!55GUYHc9Ac^=b5]t49hWrN.7Y5kHD[f$1-X2_mH!!^UH^9#5N^%;:,aKig`jT+WI!4MY&s1/+/ +bl@eH\@CZ$"T\T)!!'O_!;?I5ZiRZ<[f?R4!!3-#\C:N8!"/h;!#-!s/N(!!*<"!!WJ6!A>[Bd6D['I!FYl_5:Zad#irJKI('=dA!36)#!<<-(V6$Qt +"98V)Wi6-"riHL*XfS\,Xf\S)XSf10WNE>+!<`G+WL#m()-!3E3"W2QTr!!`W,#R:>3"KAE#"TYX#!!**)!NE*n!"T.2 +WMp%$!<U)XTAM*!<"Tqqh"!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG#u!"T/3VPjIu"onW* +!WrE&!=&?""p(M#!<<-$^Ausf(BL<4!<<-$!!!'&!rrA"V#UMr!!iQ,"8DjB"TSN0!WW6$WMcSgUn\"l +"p4i3"on`.V5L-o!3)Xl!^Uq=@L +]=YbgU;+[brVuuPWUKlhU!<)s"^q$`E!!9:+a8Gu=^:F4C)T0#$!!'XAX2;!]Q+aW0^Sq48 +]=H4jU]@[+r;Zn``kqPc!!3-#\CprX!$hUH +!#GV8!X&Q-!!+(E])Vp7!"QEH&%AdSX1>XEZF.!B['d7>Z4F4M\H&q<%fm3H])Vs9!!2lq#7Lb;!rrB, +!n[JU)ZTlK\c<>N!!NB'!WW51e,\>*$N[a"NpcH!i`0]!!NB'!rr>#irJNJ,Q[uH&c_n6"9Sc,!>V#h#Pt*$N[4-!<<-$ +!!'!t!kJBu!"T24X/c4$"98W+!"To%2Xf\N+!X/c3!;usA!6n#Qau-!"f56pAcKH$3:,]h"9\c,Vl$5`$NUF(VZ6l'USadg!2HEeVP0c\W268a&tYtuTqJ%g +!!39+!X>BsVOn%n"9o#0r;n)B!M?0cWM9Lp!<`H*"9Si.!W`\!V5^'j$jH\8!rrE*iW/`R%flY4U]CGq +!<<0+!!B'm"Ng`E\`!Mg^%DBP!!.o#qu@V4ZiI2)g4dke\Z<]]VS0^M]=,/IcHuX#UAb,nS'osikPtXt +_QX"?^$bsCMW]@4L)YlL'3dAWk3q>^VucGZCK!!JLf^X9%Q!!ACu +gn2gG!XJc-!"f53!X/Q."9?$@WsH,= +[Bd$E[C39H[^*;#Qb&%!!NE0"UkG3\,Zs<]!q_D"T\h9]Cc.>^U4(T!!!0'!"0D>[Bm$H +!"/e5Z3UUO!3rr"T\W4 +!"Ju/"98G2ZamQN[fca4$ig>2!!LsT#QXo,\,cR0!=Au2!W`;6[`SRO!i`0]!!NB'!rr>#irJNJ,Qe8S +!!!Wo0njo>Pc!!<3$VjSHq>gQ+b5g/p!PYr-!!'RI!71]G\b,q(W2Z`V!!BdKWQk8> +!PYiPc!!3-#\CprW!&Xlc!!ib6]=7qE!"Ar1 +#Ija6!X\o7!4&m4Yd(XE[^*'B[^3$A['6t>#d:E3#e7FN%KZV9p](O"!"T)3!!3M[!!Ec9!4rWH!!NB' +!WW51e,\>*$N[aN<#mgM3!!CgQ#QXo,\,cR0!<<Pc!!<3$WT+!H!&arb!!WY%Wi6+'!"&`/"fVJ%!XJc3!3N@.WiE5(Y-"S(Y-"M%XfAN-$E9s)#HOu) +$j6S;!r2g$!<!=#C%W+0W2C%+#6=o/!!EE)!i;n#!WWY*Wi#sp!"]>7!i;lp!"U,%1W3!')UTFP% +"p+l/"P3Va!<<5$!<<*#!#5J:#b\7'b5_SFUnm,Q"T\T*!!&k^!9F2=":"o2"eV]h!s8N1!0!smugoDf"%"otP-[/^@2!!<3$ +V<.d%!"/h'!U8apm!WW3+!!2lq-NO2J!WWK-!!iW0!<<<,"fJ/k$j-\7!s8N*"98LsVZd,%%&'So"8Mp%"TSUt +V5++r1BR[]!sJZ*Vkg/^&-Dp0Vka=s$DjF(!Wf'mV?*Wl!2cBbU7S,5 +!!*G$VPU'i!"&]/%0Z_:!"]89!hu<]VZrWh!!`]0rWD'Yp](g*!!B"t!!!$"('"ICSZ)e8!<9Ug!!'_* +!7q2PPKU?0!!'D&!#i,S!2um;^Vd[KZbsG0]tLA^!!&g_!!'aSS(Rf*!!(9I!!'_$!5\^9\bZ=+\]Y!* +!!0I+li7$r_Z8$`!4hb&!he)SiW'%p]rC]*!M."(!!8n8WVHPm!!8_*XS;bt_n3XWrW!#7be3oT!PYQ4 +!"uiV^]<*&!5Fr9X-MG1]=+?W_#467]sj7"!!An.[(5c.#.gS@blEULiW/c& +!!NB'!WW51g&UmJ2Zs-^#6Ot<[($8>$3LeD\@MbC&HDk5"1%t.\?NEKY-PLGYctXE!!*'(!!!'#!kGEV +!!WK-!r2g$!WfR;\.AWCf`20`!"/h;!!*-%[f?R4!!3-#\C:N8!"/h;!t!#YkB(::]b!WW9%!#54$j6P3!!'O:]X.[K\$lPA +!!*0&!WWAV!!iT*!k872!!*''!!ii2[(=B[!Wo@#jo>Pc!!<3$WT+!I!&k#]!Pc!!<3$VL!<!;um!S'JeC!!p6V^7>6(^8\14!#M*EC&e74^qTl`O8o9m^Tl(_])]%>Z)%@!!j/-@ +pAb>P^;$kbo)K$2WR[sJ^:go5!:0[c[eKh'U;Qs1bl@eH\@CZ$"T\T)!!'O_!;HOQ!be@$ig8:q#CX-!kl+P!+>YnI?BrW36,!W``1!r2g#!Or.2!!*,&!:0\$ +!Or.2!!**#!rrZ3!!<96\@K!O!!!&p!"K,5!!!r=)6g]]%0-qC#lXl?\[8jO!P#T=(]aU;%^rmP"pY;3 +!=8K$)$1EN]X#&W#QOo+!Wi?7[C*-H\,u^3ZEaI)!Wog<\,ZL=X9,l:\,`_DY5l,<$NRNCZEaH1ZaRFF +"98Q)"TSZ*#IM1S\@T$O!WWT/!!iT*"9\_5\@B'L"9?$>[f?d9!sJ]*#Qr`[#QXo,\,cR0!=K)4!W`;7 +[fjkS!Wo@#jo>Pc!!<3$WT+!I!$2.E"9ec/!3<(!!sAf.!2lcl!!WM*Vud#3"p(j)"TGMWMHHr!NE!t&cht5$`0hq"pG22!=&?"&-<=AX.lPl"on`*!s8N5V5t<,XfV^, +"g+m."9u!0XTAS9V$?q$#m%$.Vua'$%KWa3XYU%[WiiH*"T\c-"p"i,"f/6!WN)d!!rrT-!!`T,"pG%+ +X/i?'"Tb^&X8rS,"9ef+"pETZ%flY4W;uu!!=/].!-jV5=4q!2lHb!!rW-"T\T-"6'=U!"T)1"/Gqt +!!*B,!s&D$U]eg?s1.(g!58%*ec5`q\bc@.WP+l%!!1?Hqu@#GR/kLBZ)5p6j8]8:[&N?kl2UmQgSV.S +!57h$_>jSHq>gQ+b5g/p!OS!U!!'RI!71]G\aoe&[_AF%!!7_eXn_r$^6lS6!3rX&!!9+4On8YP!!CK/ +]sd_:"JEJnc-H:g!P>f>!!:].Z!!'J&!!1QMrW(1C!WomAjo>Pc!!3-#\CprX!"&f0"9K,8%C3JI')hk:$imZK#Qb:=^&.jA +\$c8:[C*3E[K$<5Z3:64ZMab,":tV<":4`%"p2*$N[a< +!<<-$!!'O=!jMau!"T;7[(`WR]!o.&!!!9)"pk#)"p)47!<<-$XT7\f(BM#H!<<-$!!!<,!!!Q1!m%B!O9&Pc!!<3$VU$36d""p,"&W;lr# +!W]*p!^PniVifXS(7E:&Bi2r!6)pG]ZL3S[]9B.W4)$m!O%^P!:'UeS%5W8Y5eR9mf:3)!4hq+s1-;Q +fDl,MiGm/[XKD!m!4fuIci='Vnc/]o_sRL,PM<1Vp](KB[[=#5bPD2?VqfPi!;um#^;IapXSMo"_Nb,= +Oo>=^c^DHF!!.VerW!\_!4Jr3b/17\!0t6dcHUj`!!'";[eBb(Z+cdGo)Jll^=/MK!!/k/i;i3E!4Me* +"j=1"Vp1t8!6kKF!k>c&!!NB'!WW51g&UjI2@'Ec!X8W1!Wi?'!"ou9F!4TMK"98Z-!s#jAZEh!M!!NA1 +[Jg.;\[&^N!40,?[fE_?ZF9nA\Gicl!s&B%ZELY;!!!*$%06I?[(#h#Pt*$N[4-!<<-$!!'!t!kJBt!"K45UC7,)"U4r3!s/W+"8Mp$!N?)#!!*,/!94%q!N?)# +!!**#!!E<,!!!$)!NMfl!7_T2-G!Og#5 +!:'Ue['Th\Y5eR9mf:3)!4hq+s1-;QfDkrmQ0\JN\\eEo!!'S#!!:3'^@)%'^ob'=!!BdV^9@;3"NIFT +^9mY8r;[#@]`>.JYPS;'^!j$oc+X)V!Q)YO!#+"i_>jSKYIr$Y]=GAQ!4g@_[^#c2!j/$/q#CQ5VSBgY +o)K!%]$6]E]rBffli7$op](?'^&A#Z!"T,2!!NA1\-E!;"9Ac0!!Vfk"T\T)!!'O_!:0\H!s8u5!!3-% +!5#bN!4&g2!WWN,ZF6mE!!0F3\-)lE\,ucA\,lg8!=/]7!!3-%!!3-#!*%g9BD"TS]+!!g$A!!N?&!jr%"!!KgA!WW8j +!!WJ6!/0!rrE'Wi;s"XJlF/!=T"1Xei-#"g+o+ +"9PU&"9GL$!X/W+"p##1!WW9%!rr<%"ono4!!Mck'F"O;"98H+!!!$$%KH\5!sel2"98c5"on_(V$Eh# +!!B\1"T\T*!!'"S!7_&["K;J-!!WE'"f\9t"onW*^&[Eu"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$ +p](U*!i`8t#6k//"TAB$#lFZ*!<`B2!Vl^E"98H(!i`#rWW<,(!!E?)!!B1!W2'b#!XJl2!p^oUSFUdV5C#aUSao`VPF4m"f%ij!!39)$31/0!X#-pT`kE#!!`T5!!WE'!X8b%VkjEnUo9jq +!XA]2f`:dI#6=f,U]CGq!Wh:!"$HI^V?lN!5#q`rW!VcR_Jh&]X,/]!5?7Z^:(hm\\GiW!!9@/bkD)=S^")(!!fL=YlN=Xc'$l_ +li7$op]1?)rW(:F#m^e;!P5cB!W`?$!W`9%mf3Ll!!3-#\CprP!!TsF[Klj6rW4q_!W`<'#QOk5[]TT? +!!B[;ZEjT7YIFQ<[^WgJ&[f+L!M\$Q\H!seu/!mpuR!<<22!<<*#!<)s"!k>bb!"K2/1WWEP@!3#r'"Le@7!<<3% +!3+cSeGp'[W*XKJE!XY6gX#,\N)#6>/9!fajSMq>^Q0a3+J8!!0X=li7$r_Z8$`!4hS!!i"#6oDep;^[M4*bJ([7p](E0YJ-n0 +!;QTr_S26/!!fRB!!&mb^rlWV(W+,k!4`*`X//#64`-"1boE!Ytb9#k.fq"9JT&!Ytn=!!EN.!"?6H +"9>a8]=#$Y!!!)4!W`B)[f?R4!!3-#\C:N7!"-4;"TZ'?\,Zd7!WW3+!",sB +[^H/>!!ri.!Z;"="ono[K*VA +[/^F3!XZ!=ZFR9Q[0-I0!X8W0!<&C1=^!<<22!<<*#!<)s"!k>bc!!!6& +!"&n/TEkMt!X8]."RZ6n!<<3%!3+uYk5[`FWi6('"9Jo1"0/1-!rri9Vld'1XJlI0V66p&!W`B-!!r`3 +!2uoo'EA+7!WWK/!!!0&!!NM)W<<;7!!!8n!!39*!<*$/"98E)"Tn`2V5aXuU8/-sUneG"!!B5&"9Q%4 +"T\T*!!'"S!7UuUW<<2)!rr<,TW&+o!!!5;!9sOeWMoq!!Up'n!N?)#!!*,/!94%`!N?)#!!*,q!#>S< +#GnH#!!3E+!!<3%#QXo*Wi)0WMHKn#64i+!!`K0TW=oe!!N?-#6"Z8!<<<(#7:G6 +VlQ]q!!E<,"&&n#Xf8E*#Hb)0!WiM,Uoa^#XfAJ*W3*5)XfeV*Xf8E'Xfef-$3:>>V6-l&XfA0"!!!** +!!NB''*&1>WN3%o#6Y%+X:,(C"98kV!!`N)"/u;$!!3#u!Wo@#c2[hJrW!90V4@nm!!3<*!s@rk"T\T* +!!&k^!8[]?Uo1$k!sAZ4!!B-n%0HS@".lBe$DO0t"IuEc!W`9&"onu4"otHtTbRP-!Wi?-"98E+!!!0) +V5+4r&HDe8n,NLm!s&<%"9\])"9oMA!",Eu"9>$eW1fmo!!!,!!WrM5!!NB'!rr=tjoER)$Ddh)"p4i* +$([msrVup%`rP&u"Jhgp!!2Qh"p(M#!<<-$^Ausf"p(M#!<<-$p])'1":(WuVZ6c(!!!*$!=/]+!2lZk +!XAE"*!QED$O-\:!2Q:"f8/qTEbQ!V5Oe& +'E\=DfDt[H#6=f,U]CGq!W^Q:W;HW&QG:QBX.fRoOk@,:!!9:B +S+6O[^:*5*o`,8l`W-"%Vp2-;r;ZiBY5eR9mf:3)!584/!J\;2!8%8P\[Li)!4fuIci='Vn,NNa^ruBN +!mS!cmJm(!WVQVi!!9.EWVHN!cD&Sa!5P_[rW!b[Mm38s[]-CcR]jT5Z,2sH[\V%GYJ\?W +!!\S1YLBbrVt9rk^;@XOrVuu(ceAHd!!'J&!<9V/!7:cW"9J`3"1>nN\\#JW,QIfKmf3Ll!!3-#\CprP +!'^[p[hA`J#m(S:\\#*P&-)\5!!!&.[f?E;Z2ak+#6>,7%0-P;ZFCGG!!36'!e&j[/_AP]=YV\^U4.K +"Teh7!:p0n\@;S?!Up'n!Or.2!!*,&!:0[i!Or.2!!*,q!#Ge="UDZiC71!4fYP!Z:t=\>Kh@\$,r7ZEbj`]E\E: +\@/oP[B]i6ZaQsDZF'\>[(*9NYIFQbc!"T26"U,%)XeVkrWh(11!!_ll"T\T*!!'"Y!9X>H#,S7/!!``2$NR0, +TEbl*!s\o/"g4s."Ked-!sAf2#6bG7"UCd$$ig80"9AN*"98T/!4 +!rr<*WMQ\p"p+t/$)=W%!!EK+W<*73!!NB'!rr>#h#Pt*%gJg0)4[b-WM?Sk"9er1"MOm$!!K:#!WW8j +!!WJ'![.XfAM)"p(m/V66r% +"9,D6VQ?_u!=&]0%]->,Xf\\)"o\K?"p+u1$NLJ6!2ZZiXK/<&!Xo&2"onW+"U#"V!!`N)"/u;$!!3#u +!Wo@#c2\@X!X/c1TrXi`W2H+)!!!5l!!NB'!rr=tli>lB56dgW%fch>!t,+*W1=,$!!3<*!!B'q!!9'o +!(!s8Q)!s8N-"T\Z)#,n4&!!!$("7Z@!"9ni0!t,)1"p4i*&dG/*WMB_""fS)n +U]:K$!2T`$[K$I3!!<3$V<.d%!"T:-!#_3'Vkp&eT`YK&!X-ODi;a"VU]LMsn,NXnU]CJr!^T2cB%c$"inge!6i(K!!/7inGiU,Vs"-T!!BEodCoMZ"3m1f\buL.Z*+--^$bs< +!"#P'!.)o5^6du[b5g/p!P,Z*!!'RI!71]G\aKM"Lse&f\cVpC!!SA#I(YC\?iOB +!!<-",R1I[!40#;!WicD"X*jI!"At?]XYJ[]#irJ6B4pJ'eTFV&1!WWN/Wi5utW<*,%"pD'-XTP]-!XAc-"98E' +%0?M;"T\T-!GM#h#Pt*%g&a6!"8l1!!f3s!!30$#JL3'!!K:#!WW8j!!WJ'!(Y,qg;Y,qr1Y,Vi/Y-"h/XTJY0!W`?/WXJp2XeGju#nI4X +!!<3.!NN6#WMcbhW=/b0":,/3":"o0ci=:O!!B2$!!!&u!!35$WQkJS#64c+!2c:l!WW<3!!NK+mf3Ll +!!<3$VpYu!!gOEi;a"VU]LMsn,NXnU]CJr!Uo(&\$O$V5!WrH-W29Y#$<@6/USsme!Wo*pTEM!c"U"h& +UnRkt!i;QeUSXgh$_sR%V59jiTr"Q_USIqm"9AK'"ec5&USFC^!X]GA)#sa=$3@''UnsiaSYceq!sAl5 +!<`T,"5*\L!!`N)"/Gqt!!3#u!Wo0naT)@ULuA=6^%DBT!!:EZO88hZ`j#NWYP\A(Z(8Z1[_Lo(!f"_/ +kQ(>W!m\KRo`,!4Y5eR9mf:3)!5SF2!JnJ5!8%8P\[Li)!4fuIci='VmJmYdC^AZa$q="1#JK"Tec+\[J^[rW!N2"TS]-#lqKFZFC(OZN:+-)#aL="UPG7!Wp^K#QXo,\,cR0 +!l2UsdW<*&#n,NXnW&WMfk%!!!$%!!EN.!!WH(#5A0OWiN*%$j$D2!!'!uWi,n""98i>!>A3"U,,8!!<;L!!`N)"/u;$!!3#u!Wo@#blA.U"onY$T`kDs!t,)1 +m/R:j!!<3$V#Une%r!!!$%!!GG4 +"U,,8!!<;U!;HO!!<<4t!<<*#r;Zm#Unl*4!Q1Dc!!'_*!7LoJ_YF08Oj=$9]t4.B%`5*e!.2oi!6qJC +!62:ZmJm:6[c[Yg!!:EKP4/GO[''H0^$bs4ZN.;:!rW*9(9[]DlP[C!UM!!3Z3!rrE4!!iQ+!!36+\,ua8"Le@7!<<0$!4^MYh>e&f\cr<<"98l4\[qtE +!!54'a=@4 +34QH/!!*')!!!0*\@K)X!X&l2[(?A>!4]ML]`8$?!!!S@\-N6<#6YID]X/"L!3`p5!O]67"gg7sZEOK6 +!4&u;[^*3IYdUsG[Bd3MY62)9]!8NKZF'Z4"L>A>!!!<;!!3<)!sQ6B]=>BZ"98N-rW!6/!!iQ*!!3-# +&((@_!<<22!<<*#!<)s"!k>bc!"T8:!!!/&W<3A0!!!9.!X.rl"T\T*!!'"Y!9X>:"p+c/!!N?'!!<3( +!_U:!j/U+!N<%%#G\9!"T\T,!!*'("TeT&#R(^6$NLA8!!Vfk'F+[@!!*V,WhcGl +"98N4!<`B*$31D;!!3-%"9kb-"pDC8"T\T*!!'"S!7_&["0)P/!!E9/"0&=(!!!-+^&[Eu"KA@%!!2Qh +"p(\(!<<-$[K,=f"p(\(!<<-$p])*6!!E9)#c4K!#6525$`0m4!!NN1!=oA/!&(=MWW3&""TSN+"K8;u +Vum/.!2HOq!!'!sX/c4##QOi5WMp(*!!NK3VlQX""p5C7XoS^-Xp#*5Y-"Z/"p:t*XTkl/WiiG*Y5YOJ +V['?*Y,\M(Xf_a,#Hb/2!rrQ8!!f87!WWE)"TSQ'!rrH)!s59o!i2Rn!!*-$&tf:, +USe(mUo4A"TV\Rj!<<9'!<<9,!WE')"V%.5!!NQ,#4DO"#6Fr,!=tp&TqSFg'*&+B!"98N1TqnIg!"Ao9U8SJ#"U5/3&-_h/-DdN9!!*'(!!!0*Unsl_!sAo1TVqnl!2QEhW;lo) +!!!G(U]pu&8d5D*USsjl"TkT%l^%DBF +!!L!J!5#N5!"G@s!3a9?!3O*jSNq>^Q1c-$+>!!0X= +li7$r_Z8$`!4hIs!h6m,qu?bj_XIO,[&h(=!!BpKXfVI$!LLh*!!Tp7_Uebfr;Zl4YPS;$WQgq3!"54I +!!'a>!!'^O[\*O!(ot?Yb-nFpW5H?[_Qgl$Q2n@qg8V'o[_i"D!kYeBpAb?1VTl +$FmPG!4fT>!!3<(!!*0%!!NE*!4]=J%D!"/i0!!!3'!<<9)!!!9+!4`76 +!!9V0"T\T)!!'OY!8[\d!k8:9!WWB(!kPlA!WW6&[/fdu"LtrC!!2Qh"p)47!<<-$XT7\f"p)47!<<-$ +o`,[9!!3>6\@)tL#QVBF!!rW/![B]r9[B]c4[R@O/[f?F/['I-H!4/r;ZF7$EZa[-J!40'5[Bd1?!!NE+ZF."=!X&K( +!!39(\?rlW\Hi08!s&B'#RLJ5!!<3,!!!PV!!iT*!k872!!**!!!353\BY'a!s&B(!3)t#!rr?)"9JYm +!!NB'!rr>#irJ6B56Cod!!`K)!!WE-!!*?*WiZ?)XT8P1!=Ak1!s>[-#RIE.!#h#Pt*%g&^3 +"p+c/!!B7#!!<3%"24d#!!K:#!WW8j!!WJ'!&WN3'"!X/W*"TSN)rW!*&UoUlB56Cod!!`K) +!!N?,!!*B+Vka?gU]:K$!!iS&!Wo6o"ph'$!pi$"T\f1#5J6H!"V5Up]!UnX]]!i)HbU8FW[ +USjc_!McLmVPC!i!X/W.U8F^d!X&K(!!39(V4ji`V?R##!s&B'"pY,1!!<3*!!!D[!;HO!!<<4t!<<*# +r;Zm#Unl*4!Off&!!'_*!6,!A^V'WN]DDR:_Z0\P[K$<7XT/@8^"!,^!!9pT_sRL)^97M:^$bsmaI!!'a8!!'d; +!!'pOYKQnF(;6ij]E#LA]rT;T]X,hXblG;h!5PkSqu?f!_S#XD"ML;LXM3$]li7$op]1?)rW(1C!WomA +jo>Pc!!3-#\CprP!&kDg"1tr@!doa\,cU1!)7$fR'*8.7[C*:A +[Bd*EZa-mCZaR.>Z*Oc7!!NN+Za7%>rW3K.%C`p[\@B5V('+pI^]4W@!!9Y2!!!$"rW!!$\@BZ]!Wo@# +jo>Pc!!<3$WT+!A!"fV>"KJ9u!Pc!!<3$Vt0!4KZC!3rI&!5Q;?!!1?;jT#:q!3PJc!4K'2!57h$_>jSHq>gQ+ +b5g/p!P,Z*!!'RI!71]G\a'5#\Y@+E!48`FiW'1^^8JXE[(cD;!i``6!3Pkn!jB&Hqu?u,_lEd@X4*+- +!"lr\XT6,EZ+RWJYIV!W[K*;5q#CK&]YOCE#-GbWYHQ]8c2d22!4MY&s1/+/bl@eH\@CZ$"T\T)!!'O_ +!:BhD*4!8h!X/Z,"LthG&-)\8!O&dDYI+K:YlOq,!!NE5!WrP7[K-@0#SI+;"p+i5!4o_P!q61!#QXu/ +$3LM7%CN[U"9\)m"T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47 +!<<-$XT7\f"p)47!<<-$n,Nn"]] +!"/f4!WWY=\@T0R%g2n5!XJc+#64u/]XPB[!##>4Za]u8.C-7iWrN2&Y-G84[^*UO!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irJ0@ +1_ladWr`G-!T+Xfe\,Y-"l(XUbmB%06Y; +UTUa#$3^D4"KDC!#ck##'EA48&-9TI#6=f,W;uu!!W4_YaB8YFDEe!!f(, +!2Qt%!3,\m!PPH)!!9sM^ubUtTWJ4.kl:^lY5eR9mf:3)!4hq+s1-;QfDkr_[d3to\\eEo!!'Rp!!UB3 +!!'^Qnc/`=^:s.<"f]8S]th2T!<9D,_S,RA!mRg[qu?u.c2[jHX3ZM!!"u$*])]aL^W3=k`P9I,YK"2f +YPS;$N7#Q?!!]m5Xf]LXP0F!n!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&UUB*=i,O!4]N?!!!9+!4o`C +"LnF3$31(0\[;FE!!"&=!#>\>!"HHL!!*H-!!ro6!!NA7]!V\A#4V[(!Y>S;!pW#64l-!!<9(!!3-%!WWM9\?ukJ!rrK)"U+l-!WWZ0!?/&L\,cR4!"&`4!!!A6]">BN +\@hkR!<<0$!<<2.]=%^I[/^?;YQ+YB]W/BN!!<53ZFKtCYRIVEZ2b9:ZF0b?XKhj0rW!];\ubr6!!!9* +!4]VM]!_VC!WWW1!!9t:#QXo,\,cR0!@$igA0WMot"!!WN* +WiH4)XT8G2!Wo@(X9#F(!ZV:E!!EE)$E:$*!=/Z*#6tA3"TYU'V$6o(nGj(%$j?Y4"9A_"XJZI-!!*/n +!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"/h,!M$&W;uu%!!iT0!!!;$ +X/_urWN6(.!<<0$!<<1tWi\GcY,q^0Xf;I)Y+i)%!=&\/Xf_f0W=Gc-X8rd0XKDW,Uoae*"9\`1Y,).' +!<`W.!3)utWhf_"!WWN.!!C%;#6=f,W;uu!!WfJB!!<4sU]USs +"p4k'VZR("!!!<+!MH?e!2KSq(BOX<"9SW2V5F:o#ljr1"p=o0!2ufi"TSbs!"T/?"p"`,!=#*pUC.)& +!-7fWSj!<<1pVksHkV>pdsT`P7pR\m"`"9GEqVuiih$_42j!",?mVZET`U]Uc%!WWD' +S,`Wk!X8Z*V5L/fU&bE!!"&c-"3LW=!!`N)"/Gqt!!3#u!Wo0naT2@Oi;`kko`3A>!OfQ9!!L?[!!(=B +!!K+D^&Yk@!!0IAp&G0=^S']h!fu-9kPtUkY5eR9mf:3)!4hq+s1-;QfDkr_[d3to\\eEo!!'Rp!!TLB +^];*Wnc/`r]r1B#!d:iPpAb2d"iJN^!4:JT!"YXFaoK;o!!'d4!!))0_V4th'$mc2!6(Q1OP6`8!2cg7 +!543#qZ$ZNOno%\Z+mZdW652-!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&UUB2?*$N[as6\HE3A['fr= +!P5eN!X/TD!!39($,HTI!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3%!3+uYk5[C@!rrb/W!:!lB2?pXkVPBl`Vucr(!<`M%Su;bt +"Jhdm"p(WtV#gf$'`\:Pc!!3-#\CprO!&b&o!!s#5#QY;5(::[R]=#3M!X&Q3[C$":!49$3 +!4]EU!!N`5!rr<3!!NE3\,l[3#65#0"7Z@$!W`94!5#iE!!!*%!!!;o!!NB'!!0S2!<*$N[ab_!!35$WTF0a!<<3%!3+uYjo@:C%0-V=!!WH0!"bs,!330'! +XfAM%!Pc!!<3$V +!"PaHW6C\1!56)H!5,8JQMpjq[K*,.b5e?_b.Y!eQHdUTNr&e]S^%38PgQ,1rW!"ma.(3Oli7$op]1?) +rW(1C!WomAjo>Pc!!3-#\CprP!%e3R!?qLI$ig8.&-*":!B:!!*'']!&WJ"9>sA!!]s?"onWA +!$)%GrjW+5!WWW/%Ia?.!WW?("h1uA!!`N)#RCD2nGi^n!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!"g5;=[/p?7[0&5d!402? +"98S1!4B58]X=rKYI_"G!3s)E!!3-#"L5G@"U;K@[0-O2]=>B[!WWK+"TeZ5^]4W@!!9Y2!!!$"rW!!$ +\@BZ]!Wo@#jo>Pc!!<3$WT+!A!%e3S!?(qA#ljr+$igM4!P>ri$&'!WWN,$Le$+!rrH)#,nL$!!NB'#6t50oDnjj#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXW]/UTLYtXf8J)$j3N4XT8P*!sP^,WWid3WN?:)!3<)u#m1/3!!WK)$GZWH!<<5$!<<*#r;Zm# +WN"#?!Wo0njo>Pc!!<3$V6o!!]6m"onW; +!#>P>Unsmi!WWQ-$Le$+!rrH)"f.sp!!WH("pP&.r;cKj#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr +!pV,ZiC*>VYL2n[^<=$!!048r;c$]!4K'2!57h$_>jSH +q>gQ+b5g/p!P,Z*!!'RI!71]G\`s.q^^^"!3`B8c(4P.#GT,8`;fnN_YsN: +]ZmGT!"c12_Sq/W^SJ'(g8t>TWRK/j!!fLIW;lqDT>1@*!mRp_aT1Z-!4MY&s1/+/bl@eH\@CZ$"T\T) +!!'O_!:Tsn!WWE*!0YICb;#dUkA*sVcGYI^t=!OK,:Z4!eDYdh!J +Y6"g7XoJS*%KHL:ZMjh:Yd4?3!kPeO!!30(!!!-%!WWD?!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB' +!rr>#irJ6B#6Or1!%WVul)"9S]2!3W74TrtNs"s*iFY,&0,#,J3u!i`.!"p4i2!!T3tWMft'!!*6' +#4V['"oo#3Trk$n!WW3-"9Jf!!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"/h,!"onf,"U+l/!rrK) +!s&N)!"o:4W&1!Y5D6";n8?Xf;O4XKAB-!s,@&WW<:+Y,\Q5V6-`r +XWjYI#Hk$,#6bY@!NrL)"9ba,"Tnh,UoFCr!<`B&"98K'#/L9E!<<5$!<<*#r;Zm#WN"#?!Wo0njo>Pc +!!<3$VtU#QUcp%@F&h!s8Z,TW4NX#6^`s!!9!m!!WN*#lk.'Unsjk"98H+ +!!_rn%Kuh?!M-6^"TeZ($3L>6quHBi#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr!^Vj]s4^%!!7u:P5PCE!!'I2!!'_$!5\^9\bZ=+ +\]Y!*!!0X=li7$r_Z8$`!4h@p!RI87!!85!^#&em_mTPrbPD5c&!!NB'!WW51g&URA +2$"*c!4]SL!sel,"9\].!!!$'Za0f8!"-'Zig7, +"1ktH\blFPc!!<3$WT+!@!!<6. +!!*"t/d)CZ!!EE)"Tnl2#Hb-6!s&b3X/uR-XfA?(!NE%&!!30%!s#C&W!!))"9\]/n,Nt$!s#=%TEbJu +"9\]3!!!2p!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"/h,!#1"UG,4"98H("Te`.W2cYp +W<3,#"onW*!WiP$X/Q($!s/H&!=/Z0!Pc!!<3$V!]rCH#"K]e6ca +"T\V2Z2hA?[]fi=!!!0.!!0[A])Vm4#Qt,5]"%2/%0Z_5!X\u/#6Fl8[/^Bo!!NB'!!0S2!<*$N[afA$3^D9!!i<",6e5M#Ih=T\@)YC!Z\,ZR2!<<9/!!3/+\,?:- +YdH"^!"Aq:YHe/6ZEpjEZEgmB[C*?HZa@%=!!324[C3WL$31;7!!0[@\Gu[4\,Zd8!!9Y2!!!$"rW!!$ +\@BZ]!Wo@#jo>Pc!!<3$WT+!A!<*$M!!EG)W!35+"f\H#!!*?/!NiI)Xfeh+#7:J7#R180Wi;uu!rrN. +!!fO'mf3e$!!36.!rrK,!"5S&"mZ0f!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD!q +"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$mf3EgW<3"u(SqHA"TSl0!=8c1!!*9*WN-")"onl."o/-@ +"p=o0W2chrV$?u$"U"l,!!NA%Wi;ho!!<6&!!NT-"uQF`XTJY,"KJU*!tPF8WN66)XKJ\.XKAY*XKJ_- +Xf\`."9\h/WN3.r$3:D:!Wf@$W;m#&\,Za7!!B2$!!!&u!!35$WQG2B!i2XS!!NB'!rr=tli>lBrW4SM +"9YQt"oni2VPL*i!!WN*VPF3hUSjaf"on]/"on\%V5F:q!!WQ+#,e9c!"B)3!Wr]1!!WN*$_[P(oDnOa +#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr!2!3p!WiB(Tr%ek$NR#rU&q-bUSOc]Uo'i^VPBl\Undki&>u4sV4.\i"pP)/W2-6i!s?@> +p](O"!!B"t!!!&u!!34tUr`W:\`!Mg^%DBO!!0m;r;Zo5XN15=#/IhNbHo*Yq#CK2^pMr;ZuGWP$Pc!!3-#\CprP!%n*$N[a!<<*%!!NQ.!k>WB!XTuD?#J:$:!j9&B!<0D3ZEL[A!!g'8rO!EJ$NU58 +Zb!ZV!!!'#!#QXo,\,cR0!7!WWH+!=#:" +VZd/&!i`4%#,qV.!Xe>g!U'e'&XTAS,WNE9'Y5YO/Vld'%$Eg2,XT#=:$j?Y>W3!&$!W`E)!sP^$WXJq/#m.X;#6=f, +W;uu!!Wf/0!!`N*"eVch"Tn`+Uo4=uTE#/r!=Jn)V4dtk!s8N' +#mC;0"pt>3!21#*!s.ij%KQS7!!E9+!!EK,"UY5?o`4Xb#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr +!jS3qZ$]5a/SV0!1;F>kPtUkY5eR9mf:3)!4hq+s1-;QfDkr_[d3to\\eEo!!'Rp!<9Us +!!0@&mJm:'UA+`d!!Kite\8`l!!pes!7HDue"+kb!#)*Pb5fT*b.EtTYlFdRMnm'A^V0RG"/*uS^\\!4 +^nSWa!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__n,P*E!WW3>!?&,S!W`9)\@;UJ\?Z/9$ig::W4B;; +!<<92!!*N/!!<3&]!]!K"U##!!"K&1!!<3*$3178\c<6@''Kdoa +\,cU1!;!rrf2#QP#.[^`]U!!*-$#QXo*$F$qIZF'Z4Y:Hp\!<8"9JQ''EJl>Wr`;%"f\F%XKAT/!=f27Xe2bt"pG)6#QOl4!!!-%!ir,q!X/]1nGj%# +!!!-%"pb25U8n8&!"S;prW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j +!!WJ'!lB0*D=V!#5MJSYuSj +!!T3p!i;fi!rr]1!iM?_V$$l%"UP/0$31&.!!9*mU]L]&"n;R&!WW3&!!W]/"eV[m$NLY.!;-pW.rhBpo"U+l2"9JUtWh'5!"i(-5!!`N) +"/Gqt!!3#u!Wo0naT2@Oi;`kko`38;!J/Mo!!TX@!5?a^qu?iCGhBb&!!:$8XQ0?^PJd1rkPtUkY5eR9 +mf:3)!4hq+s1-;QfDkr_[d3to\\eEo!!'Rp!<9V+!!(L@!!8P)^@)%&]rCc,qZ$_s]pQk8!!oI=bdPIj +!1ge$!"tQq!4Kb8!!'IQ!!&tOV?!U+^]"38[(NT/q>^SkhibtZli7$op]1?)rW(1C!WomAjo>Pc!!3-# +\CprO!%\3U!s/K))#t3J#mIiG#lq!9!WWE)"Ko>BWX&S+ZFL;B!X0)7!k>VN!X]"t!"T)3!<<6-!"Z?J +Zk#irJ3A/-H.[!W`?9!"8i4"f\='!huh% +!=8c3WNN@s$3:=4W<`J*"UkA5WMQZt#QsMq%fl_4!!EH*%%s\u%Klh8#j_Qj!!`N)!!0&$!!0P/"T\T* +!!'"S!7_&W!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$mf3EgW<3"u'apk; +U^-r/!!30%!s8N'%&^'/!>P_2!!!<(!$%i8U^!is!WWH*"98N)"one+WN)d#!X8`-!/p!=#O)Xf8;%W=H&5!=5j-XKAT1!seu2#n*`5TG[_1!!WY5!W`<(!rr<0USS.q('F:2!"&W) +';DCu"fJ*s!!`K+!!<6*!!K3qV_"MI!X8`-!^T1S(6R"!fu*1q#KUY!4K'2!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RI!71]G\`s1p\bc@. +U:mGs!!0(+mf3Nia//j[WVcbn!!CEQc(4S/#K)k,`P)?.QMge#`P-KQT=t:*VQ8.;S\(Em]u9sOd](!u +_YO66WQgLC!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__n,P*B!!*-$$3C22!"Ju/#6Fo-\?>n`Ar;[T6&[AqJ"onZ( +!^!k#T@[^uPM!!iT7#64r,!#)lO])W*;)?9gA!!!),ZO3nB"0EQQZ3UF5 +!498>[^3HF\$E!!3-$\Gum9!!9Y2!!!$"rW!!$\@BZ]!Wo@# +jo>Pc!!<3$WT+!A!&"?Q!<%]QS2XJu1# +%06b@!j&K%!!^rU]g`'W2'Ct!!doa\,cU1!sA\d8]F"pFu,"TYj6ZNpI0*4*$Q$j-O7\#lq9ZF6sEY-t[C!"lN@!4f;C[fua2%3#?M!5,hR"98T* +%gN-G!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irJ6B/cl.U#6b51%B60("U5,1!s,C#$3mZ1 +!s&M,XTnm+XT\e-WN-(3!WW3)!"Ju5mf3gu!WrE'%]QK/"onW)!sS#krW!0(!!!&!!rrA2!!NB'!rr># +h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!g+#H=X2!XA`1!WWB(!!WQ+WMlg%#Qb26!!+t`"Kef/$3LD3 +Y,qa5#6Lm,VQBm$Y,SP&Xfec,%]lZ5Y,SP)"p"c+('Fa@XfJH)!!WE3"Tc.6#6=f,W;uu!!Wf/0"98Z1!rre,U&YB%"TSW)T:cGlW18_Uo+G'!X8f.!!WM"Un\+q!W]!m!=8l0T;J0S!2HHbVP'f]U]:gt +T`V0cVPFCr!<s?2#6=f,U]CGq!WC!P5tO!!!*3\,[$@!!9@3!rrb5Z2b`JZ2an0 +\$uJ>'*nR<"p+c0!q?7#!<`B&"UG)1!!33&!*$N[aA7ZaI=DZEpsI!!3H3!"8k;ZF0cb_!!35$WTF0a!<<3%!3+uY +jT$k=#lt#:!NN8u!!!-1W<2pAb^1!!NK.W2lSkX/#q""onl,!"B>; +"pM!*XJ5at"oni22$a3`XK;X,":D64X9J\+#GnT*"0/N*XfSD%XT>Q+Xokf.X/l=)#m^P>!j&?$!&p$`*n6!s/UuV??o- +T;2H#US@ei#,J's!"T86!!WK)"p4;p%KQ\4!!NQ,!rrB)!UXd/^G^Y-7[%!l(>>_Z9$'!4MY&s1/+/bl@eH\@CZ$"T\T)!!'O_!:Kmt"TSN2!WW6&[(HGA"1Yl= +!#i8N!!'72!W`9$!WiP4]XRqC[($>B"onf-"n;R'"9AK0!!*]4!!N?)!WW<)kl:kf!!!&0!W`9%[f?R4 +!!3-#\C:N8!"/h;!`Ar;[W7 +"TeZ-"98N(!s&B%"TeZ)[CWgO!!*5u!#GY?!#irJ3A/d;:U#m()-!i;q"!X,L%!W`?'!NiI)!ii=+!W`<+!sPO%W;m!q +Wpr)!WWB*Unade +!<<6&"p"c+_>s?2#6=f,U]CGq!W^T2]YqYeli7$op]1?)rW(:F%0?\6$+7IS +\[f;Y%KHRu!!NB'!WW51g&U=:$OsJS\,ZrI\,ZN5[JU">\$?&=!WW3%!X/],"9c0C"9ec."Tn,m"pb52 +"h;1Si;a#^!!!&0!W`9%[f?R4!!3-#\C:N7!"HL?$FICS]!]5Z#lt22ZiK^u%L'GM%fcY7"TSi1!X/Q* +q#CU"\,cU1!>7W2Z_qV$@&,!/ +!W]!mUnj`[UnjZ\!7kTVMRbVP'`^TVM^`Vk]si!!*+pW19f[U'8+.p](R#!!B"t!!!$&r;Zko +V9&]AVq%]Z^;-)t!!'_*!6bEMS]A/=!56&G!3![1!!1(]%N8%WNO)e&f\,ZUG!!*-#irIs:)$:9I$4R-;W=&d0X8rb2"q%K7!s&Y/$3UM0!!oU*!!WE)!rrPq!!`].!sSb+V$5o[ +rW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*%g&^1":kJ5!YV$("TSN(!PSR#!"T55V6$/eX/MsD!!!6("pXl' +"p(\(!<<-$[K,=f"p(\(!<<-$n,Pu[#,85rVuQu+!"8i5UTCBo"9A]/#lt,.!^+;_Q9m0!!'RI!71]G\`j(rP2E4Oq>^S^dCo5R!M.!n +!!^HB[(rc@!;-m?\$uMG +!WW54]!r%H'*8.="p"l1!=T#2(ppdQ!<D]]X@eF"TS]/!rrE'$O%'L[(EiP +[K6F/YI1^B&%)B;\?iUD"h1\FY5l&9])JlG\?N3GYcn92ZFmNP\uQYJ!=/b3!!iT*!k872!!*H3!&/"98]2%&Kc#XY-TU"p4t,XKJ\. +"9GX,XoSg1W3*$"Xf8J&WMlquWi`8##Q^j+W3!(k('+LC"L.q;!<<5$!<<*##QY#.!3E+%cN"IX!WW<& +W2'Cq"onW-#6P%r!!NB'!rr=tli>T:,mOMZ!!*(uU]:CjV?-jsV?!9d!s53lT)\up"U523VkjFs!C +Tqq_i!"/f-!<4rW!D*V59ueU&YB$!!NK-!&ju[#mC^2Tr=l^V$$i$TV\EZV?-aqUo+1sVOscZ +!2lHfTV.pTT:r-TT`tLgW1Ti_Q4j6""Tl78p](g*!!B"t!!!$+!!!1ESi;`kko`3#4&]23] +!56MT!5c\TUqZm0Xgt>*!!0mLjT#=qYOqnZ!!'I2!!'_$!5\^9_"n$3[a3+sfDkrZOmE&J\\eEo!!'Rm +!!B46XhFW4!li-dnc/]b^$l")bH\dbd/^-;!!T^9bGj!!(&@JnY!!33%#6aMr"pP,/!P,`Di;a#^!!!&0!W`9%[f?R4!!3-#\C:N8 +!"T.?!W`9)!!!D<\,Z[5!!9P.o`,-r!4oWC!<*$(!"T&2!!*/s!!WJ6!hG[^3FC!=Q0AX!P.S!XGp:\$rBMZF0nA[BBn@Y-SG?ZF7*F[CNEP!WW`2"TST.YlG%1!!9Y2 +!!!$""TSf6!OTG`!"T/3!;N7 +#6k=0VZQr.V54Y%!s/H+"RlBq"p+c*WMp$]!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"T11!W`9)!!!;) +W;m,'!!Bq8li7Os!32t$!!<<)!"8i0!!*2t!!WJ'!#-"TS`-"98]2"9AN9U8t;pTW&+s!X&T*!W`E(!3Drt0!;@Z +!sB+6Xe`'&!t(s.X0&/"XKD`.Xf2`/WNHZ2Xf\b-VlZSp"9Au6"p"i3YlG77!!B2$!!!$"!!WZ/V5qlA +%g)e4"TY?r#lk&0!Wi?%!q-*m!<<3%!2]#^df:YmSH],r!s>Es!!&pi"p1P"%]5p&"U(Wr!s&h)U(%)) +!WWE-n,NXs!WW7uV$-/co`,3t!!!%q!rrA2!!NB'!rr=tjoEU*%g/U/!<<9'!"#R!!!NB'"31E%!"T)1 +VkaIr!s8T)$NL8/!<`,t"p(M#!<<-$^Ausf"p(M#!<<-$mf5NQ!!NJ%TqnT[!!NQ.TW"Om"98i3!=/Z* +"p+f0UnjibU^-r(#64`-!!NB+!!rf3!HAi#+h]d +VjjZ[VZ``kTEq6aUBmThVPBlXVOFFb!"/f2!!*!6V;?!!0d4rW)tkjT,=po`41U!4K'2!57h$_>jS^Q:[`\['!!0m;li7$r +_Z8$`!4h4l"MUe9a/8e8!ggotoDf#qXL-$Mmf3BP_?8!5Og4T["l#BK_m@Sd!!B4EMnf5k)4&%Ib^eWP +_Z6gRSH,U_ZN.,9b-S4JbCJ9X!:0[c[eKh'U;Qs1d/X[X!rrE*\$l>@!!<<4!&-0/G!!NM8\-<9?"Ub;7!t552!q?6q!rrH)#.D#Ii;a#^!!!&0!W`9% +[f?R4!!3-#\C:N8!"T.A!"T,3!!<51[fZ^4!s,e0o`,L,!4]HE"p+c1!W`B/#QOr%!!WJ6!D8\?i?KXKD`8ZEat>]=%aB\[/TF\[]-P!!!'+ +!!ik6!!iT*!k872!!*'()up*KZ+L7d!"T)5!!EG'VuR#%"9]&4"9e/n"T\T*!!'"Y!8dc($31.,WM]n$ +!=Z'3#Q^d)!Xu%@!NrO*"pCm("pb24#QP&3#m1//nGids!!E<,V5OX[!<)s'!<<*#W<3,$[f?R4!!<3$ +WSIR)!"T12!"8r1!!E;#W!!5'"9H4:li7P#!3)k%"p4i1!s&N/#64i$!!WJ'!T:-OKhTVP^*l!WWM#UBU^g +Vu[0s%KNE&!!NM$V$72*"UP/5!t#,1!q?6q!rrH)#,7mtm/ZeZ#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&.U +V>pu+!<<3%Une(p!!<8B!94%i"otKp#R1A2"p4l."pP&/q#CU"U]CJr! +\\?@I_QUTN!$.f`_iE67!6r0Nc\S:qa0r/OHeZR@PgR.UUsm)o\H(sr!4MY&!Kke/!7:cV!=/],"M2)K +"Tei-!<<8j!!NB'!WW51g&U=:-NX8RZG!XJ!kJ@;!!*AH!!!B.!"],9%0a,JrjWKJ\[heA!!if0]W\gFX1Y_:!!'DHYILmDYlM&8[C`^GXgPG8[B6XB +Za'S:[]BK0!<*$'!!NE("p2%0#QXo,\,cR0!=Au2!W`;6[a"j_!=&W+"KSL,"p+r.!<<8j!!NB'!rr># +irIs:-NX8QU913o"0;M1!T:-NX8PT;eLd"/Z&' +!!!!'t8!!qME!!'\4!2t_Q!!1?HdK&J2!4K'2!57h$_>jSRq>^Q) +_TMr3!!0g@li7$r_Z8$`!4h(h#/[%"^s06nmJmR<]sP&]^mN-PVtU/t!!&@f]s#,N^;0UG#0ish!/oj6 +rW!kRREhqHW;rp1^tl6qPeO0u`K?V7Zb$45ZiC.-!!N?(!X%lk +"T\T)!!'O_!9F2)#.1rF]!DD=!"o:8[f?T;!!!0C!!!55\,ZN?ZiC.0!!3;l!!`W,!"8i/!!qN`"T\T' +!Or13!!0P/"T\T)!!'OY!8[\d"h+X9!Wi?&!49<'W;lpuU]:H!!!#h#Pt*%gJs:!PU90!,0_VQHs'$ipd8WNND+"Kn`,Wi`D'!Mup"#H"T)Y,SN1!!PbMj!!'_*!6G3DU;-cE\blF1R`b[2[e]t-[(QG>^o#Z_kPtUkY5eR9mf:3)!3Q(t!N*WT +!8%;O_X%7&\\eEo!!'Re!!\7f]uSCCHM%7KVl8@WSZ0WG^&S/&_nFe&g\,ZR6!!N?*\@VbB#65%;!;-=&!s#mC!!NT-!!<9(!!!$( +q#CU"\,cU1!G`\,a%J +\@DSC\@B)]\,ZO:!!<6+!bL]X55W"TST("TYm:[/^FR!!Td9['BZ3[/dbAYR%bIZF-mF +ZF$pD!!!-*!!*-%rVus%!jDY1!<<22!<<*#!X8W."Tc-E!RC`V#64o.!NN+%!F%!!NN+!!E?*!!!$(q#CU"Wf0Xf\T#XTeh-"U4u0 +"T8B'"p4n2!"T)1"/u;$!!*0%"U+q+Wr^NH%gE":Z+^2!8+6K!56:T^SK)W]t:qb!:0[c[eKh']u'aKi;aAi +!"&c-%fub5!sf&1!$3CG5!!3B+!!30&!!3D6\@T0Ri;a#^!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;! +"p_NH\@K0NrW4#>!!!24[(6VF$j-L>]=#5Z\?u;:[0H]>Za'`T!!*)-\$6&9YQD5=[Bd0F[]m9L[Bd3P +Zj6[4"9GJ%#QXo,\,cR0!e&g!!iW+$j-M4":#)1!_T:*s)WH!ErVkjRa!;-\-8u<[^#r8!WWQ-#QVHD +q#D37!!il2!WW?,!!3]3#6MC8%0F/SYmUWl!!NB'!!0S2!<*$N[a"onk; +!!EB%\/r'^!!!-5!soDF!X\o-!=Af6]",AR]=k,K"TYm7Z5ioF#QV0?X +!X8Z,W;m2)!!9Y2!!!$"rW!!$\@CAq%fue4"onZ5!Wr]1!=&i0$N0r+!i`0]!!NB'!rr>#irIs:*s)EB +$31&-!NiF*Y,Md1XfVf)#d196!WrE.!!WG'V>1*-"TSc4!!<3("on]5!!NJ(!"&e-X.]e#j8f/Z#6=f) +!N?/$!Oi%4!<<3%!3+cSeGosXW55!#5J#QOi*#QP.2WMu`uXf\1s"p4e+ +#6Y&5!NiN,!WB,4Uo^]#WNN(tW33/"W<`S1!<];$#6=f,W;uu!!WPc!!<3$VP=!!]5!"9YHrUnjah +!!!-1!s]/?!sel[!!*?*#cOVsSYrHPU]pjpUn[tk"TYpVA^]9T!a1M-I!Pb;m!!'D*!!:?gM"C]2!!'I2 +!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r_Z8$`!4g_^$(&Q?[^!QW[,7/?!!'5%!!KL1[]c\0!:p1!_S3aK +d+i]T!!'RA[f$1?YJmpMcFL-nNkW'4VV%$0RbQ#mZ*jZ!!!'J&!<9V/!8mhe!s&B*!WWE)"on],!<<6# +!!353\E3bp!<<0$!4^__jo?D)!*$N[abr!"K,4!!WN*"oni-!sAW)"T8<%!i`0]!!NB'!rr>#irIm8*SC"onf,"onW4#6:j*V5aLq!Moo##NGg`!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W +!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$huFr)!<`Q,!!WJ&#m:5/"U+l0 +!!!0.!s\o.%&^)("TT#6XJl,t&d\[@"TSN*#cXd/!40W33&#XT>Q, +riHU.%'Hb3#GnL%!BqS#N<]!!3ZCc&!!NB'!WW51g&U=: +*X)]J&HK>P#64i6!4'*7[C6.?#dUf;#R.oO!!!B/p])*4!5$3CFj!!NB' +!!0S2!<*$N[a>5VuR)(!!9Y2!!!$"rW!!$\@CAq!X&Q.rW!3A!!E95 +"98W-qu?d"WN#"["T\T*!!'"Y!8dbt"pG#:!3)t%!s]/9XK;N)XTPO-XfV[1"fnU&!!i`&!#Gb=!X8c- +V5gSl"TkO"Wh]b'!!WK1!X@]crW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:# +!WW8j!!WJ'!U%V$[D8!!`E),mg]QXf)I,$E^G3XoS_2Y,8>'!NWB#"0SZ*Xf\Q1!N`4$$ig@-!!`N)"/u;$ +!!3#u!Wo@#h>dT[!XAW(#T3UE!"f;5"p4]&!Wo0njo>Pc!!<3$V0pW1a@rTr"Z\!sel2!XJi3m/ZeZ#6=f)!Mfet!Oi%4!<<3%!2\fX +bQ&"OU]CJr!kH!!353\E3bp!<<0$!4^__kPuY*"98E+]*$N[abs!"K&1!XAi3Q4j5u!WX%0#5eH&!i`0]!!NB'!rr>#irIs:*WlNF +!!]I!!!TL-!s\o3Y-"h/!NiI*#6^s)"9nl0p])$7#m:5.XJr5!W<*8+"98T*!=])5!TF+Y!!`N)!!0&$ +!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD!q"KA@%!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$huF\s +!!3?)WM$6k#64f.!!E9'!Pa;"UkA2X/W(uW;lo,!3E0#U]:Q#"T\Z2#QY%/XfAN/ +!=o+2%BKX5!j8Q*Y,nK)Wi`B%XU,%6"f\O'!!EQ3W;m/(!!B2$!!!&u!!35$WSRUb!WW9,!sXo%!!!'# +(S(d.!!34tUuhX\!<<3%!2]#^ec6`n"98E+VkF(mUS@kn!X#YI@/Bp(LACoM\`!Mg^%DBH!!UQC!!':1r;[&@YJ%gR]8!NEj&!!LW^`kK.M +!9aC_[]]Z2^$bs]>"7E%*,?l_nM?8WPH6]^s;oZ!OfnS!:0[c[eKk&\c)Te!"K/6!!!)7[(c&!!NB'!WW51g&U:9*WlNM!k,TD!4B*4!!`K([Bd1E!!!9)[CW^K!W]a@p])'2#QY+>\,ZO7 +!W`9)!X&Q/!!!6-!G:"98T4!eT""9en*WQ9*WlNL"/D[s!2cOl!X/T)VP9pl!WiN*Tr4Rf!W]$np])'3"p"n)U]:E"!s&B*!sA]1!!!3, +!*kPtUkY5eR9mf:3) +!4hq+s1-;QfDkr_[d3to\\eEo!!'R[!!1iUli7$ep](ZA[(`9K_T&LWWPA0-)PkiJ^r$-Pg3LKRUAt;, +W.<+4YJ\8YcBY$FZ2j4k!4MY&s1/+/i;`i[rW!<2!OoSG]">)#sXE!!<3$!WWE)"Te`/!!3-#$46b3"8r3$!i`0]!!NB'!rr>#irIs:*ru?H!!'!u"9Pa(#-Op2"pP+0%fut:!sSl7!<`t1WVHN% +!sYS%"T\`+"TSQ0rW!3)!WW`9!"8u2j8f/Z#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXWdNXrW!<1!MlNbVl66m'`\@7!!34tUuhX\!<<3%!2]#^ec6cm!!WE' +Uo+=rVk+!hTEYK#!29i%"98K-!t#&2&YZ)t!"/l4U&YAu!rrN*!=Jf+#QXu,%gN(B"9Ilio`,3t!!!%q +!rrA2!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG#s!!K*n!WW8j!!WJ"!4#lk&-!!<3*!!NE*"TSW)!!ii1"p"c-!<<-&V51&gU8+W^0;YA9Vl$/e!<8"TSl<"0qq%!!`N)"/Gqt!!3#u!Wo0nfDl)WYGT(SQhUR\ +\`!Mg^%DBH!!odC!!(?2!8OCK!!'.p!!/Y)pAb2li;i'A!4K'2!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RI +!71]G\^^Z\QcA"b%filCc-;o\c+1QZS&;t-fD5Ia`P]F#bDlRn_n4BG][,;nZ,3cC^7Dm\S[&7^!!'J& +!<9V/!9!ng!s/N/!'!rrK+!rrH-WOW#5\$>u6"L>>C +!!E<("TeZ+[(EjD!#GgG]XRqF!!!'&!<eO]"58Y]sYD\[(*@M#QV0;[N)KYZEjP;ZF70FYIUsH +Za[+C[BR%=$FC'=#64n*!!iT*!k872!!**!!!353\D@2r"9JW.!4!!3?) +"Tm`brW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!3!!3?)"Tn&ko`,3t!!!%q!rrA2!!NB'!rr=tjoEU*$N[%(!<<-$ +!!&gj!lG#s!!K*n!WW8j!!WJ"!JDTr"`_V5'i]TaCr'USOf\VPBpfUSF]`TqJ&!!WE+YlOP!#6=f,U]CGq!WjSHq>gQ+b5g/p!P,Z*!!'RI!71]G\^^Z\[_V2/!jT2=qZ-Hm%DBKia2b'^ +gRu9d]tLEE!#i,U_kb/S]E#LNb/L8g&U=:/cl"S!!`K6!!'O9!!'O5#.:bJY-eH6!!<6% +%KO#N!!`K*"TSc-!4oPM\,['Aci=4M!!3Y8#6>&3\,Z^7!!<3$$+SIbh>d]_Z3UX7"TAB)\%;\C!!T_0 +o)Jp'\,lX2n,NXn\,cU1!`B!!N?0! +\%B/^\@&QIZF.!EZaI+XZa.!EZa-t=ZF-jDZEgsD!W]X4!W]aD[K6N-!!iT*!k872!!**!!!353\Fon- +#QY)3!!*-)nGj=+!rr<+!36/%!!30($31/."TST+Wi5(\"p+c-!!!8'irIs:/cu(T!!N?1!!9:)!.dfB@I#6=f,$_RY,"LnF9!WW?'!!fLZ!7_&Q#,2>, +!!N9$"fSF'!WWD;!9sOeWMoq!!Up'n!N?)#!!*,/!94%`!N?)#!!*,X!!!6%!!*3'nGj(+!pi%!!B2$!!!&u +!!35$WV-;s#QY)3!!*-)nGj=+!rr<*!2or"!!30'$31/."TST+W2/SV"p+c,!!!8"li>T:/cu(T!!WE2 +!!0!n!!0!j"fA#mTV_km!!<6%$NR!$!!WE)"TS`,!2lNhV#Uo*g]7!I#6=f,$_7J+"1S=8!WW<&!!f=^ +!6bEH"ePu'!!N9$"f/(!!WWDD!9!n\Une%l!Up'n!Mf_s!!*,8!87DW!Mf_s!!*,X!!!6%!!*0&nGj(, +!jS"q>^Pt`leA7!!0X=li7$r_Z8$`!4f`Bs0he)o`-AAc*,F'_Pk#I`O<+`^pC\Y^p1P\ +^];!^U;smJbb"k8^8M#3Z.5e]!:0[c[eKk&\c)U)!!WK)#64f+"7Q:,"onr5!!Be4!"f24!!!''!WW3. +!496Ckl:qo!<<0*!!'Ua!9aD9!X/Q+!!ojB"98f0!49-6ZaI!B%0-M:[^ZtN&@]"M!s]/5!s&H*[_&jG +#QOi.d/X=T!!3/8"T\T(\Guj?!<<0*!!'U[!8[\d!PSO6$jct:$FmGC$NL/.[/fdu"LtrC!!2Qh"p)47 +!<<-$XT7\f"p)47!<<-$huN`X!X&i3mJm[u!!NQ.!k>iI!!!'#!qlU)%CWmYZNpO3#d^\?['HjB&\%fE +Z`gpF['d$DZaR3A#QP&,!!^':&HNUI"K2;+!<<22!<<*#!<)s"!k>c6!!WN*"TSW*"RlC-"onl4!!K;% +!"Ao1!!!''!rr<,!2QS"kl:qm!<<3+!!'%Z!8dc0!X/Q,!!]-t"p#/6!NiI)Y,nS(%flh=V5On)%&g!+ +"9f&2"9AT-VlHKl"onW-e,]IJ#6b)/!3HG*!P&18"p"]+"onY'h#Pt*%frd4!!rl3!XPd$!!iQ)"24d# +!!K:#!WW8j!!WJ'!#6b)0VZ6]+!!<3$!X&T*!!rY!V$Q;c#6k2/!sS`*VsFE7!&"BW!!<3*SYuYk$31(%V?!Bf +TVDkp"9tTr%fd$6T`kN&#QOr-!s>ht#/.bOZbDm:r;Zks^&A!4XIJtb!iaA.i;i'A!9UHb +!6=O._>jSrq>^Q'R*,K^!!0X=li7$r_Z8$`!4f`B!O9iF!;-6!4r6@[^`[P![K-@."UqB>!!'F4\,Z^5Zb*OLrW*Q3!e#d\,mKI!!9!Wi?%*43)b!!!W6"S_s/!Xeu5Z+@IH#QOi,!WfX5[^@-[[Bd(D!4'):\[/]J +Z3LC3!!i]-"M22G!!***!iZ/*!<<22!<<*#!<)s"!k>c6!!`W1!!!3+!!r&o'aF^E!d]^!!E91!q?7##QOo-!!!b0V5jRr%Klq0!!iZ4!!T$rW03Xf8J*XK&B0"U5#9#6>(1WrW2$!=/fo`,4!!##I.!"T1A!!Wf8!!Qq#CH4c*[Qb_=!!!-*\@;SA!"Q(G!7!lB%_&YB"TSQ2X15G>!#;`I'*&pN"T\W()[-6Q!XSi,"oni-#QY:[!!!0$!!0Y;!e#dZjZp9#QOo;ZFC&c6!!EE*"9J`*!:^(+!!E9%"9kd(!WrE1Rh,T$!!<9&#-"=*q#^'d +#6Y#/!X&Q)WoF*9!%n9S!WW8$W+!tM*.X9Jb=Wi-F.'EA:;!<("2+^"!!K:#!WW8j!!WJ'!k-!b_=!!!-*V5+.p +!"5,*!mT_ +rjW?I\@B2[]!2A@"TSV3!:p0n\@;S?!Up'n!Or.2!!*,&!:0[i!Or.2!!*,Y!!`N)!!3-#]Y!Y5$ipA1 +!!iQ)!<<-#!% +#QXo,\,cR0!'$j6V3XJ>mu!WWB,"JMloq5Nlb#64r4#m()8 +W8dp8!A4KT!!WS!W<*:*Xo\V+"p(m$%0Zb5Y+u.'!s5L&!XJc/"oo:+WrrD("9S`0!7V&K!=&],&-Jg1 +#QVC9#64r4#m()8W8.L)!<b_:!t#&5ScoK)!W]0m!W`?& +"U"t!W2'0anGrjp"pPD9!">[i!S%3""98E+".c4g"/;Xn!!36&W1"%q!!&pj!sJc.Vl0Y'!!EK+':Pj& +!!<-%![c!R(QE#QCP-W2-8gUSs^d"9ec,`rP&u"Jhgp!!2Qh +"p(M#!<<-$^Ausf"p(M#!<<-$huEu_!!!'#!2ugb!"8l/!rrN*!!*'#!!*2r!&"NX"ooJ?!!/hr"T\T- +"9Jo3!s,!lU8Oo^S>3%`!hc:k"/)Lp"onZ5!WWB+!!TY.p](O"!!B"t!!!&u!!34tUt>YIP5G:\c^=P/ +!f4^mq6oPg!3Pno`rH9t\GuW1_YaB7gjf8&!Q1f5!!0mTq>^PDc/&Ha!!'"%!!'.i!5\^BZ*^dQYI)QR +_MHA8fDkr_[d3to\\eEo!!'R[!!1?fiW/HJ!4he'&=(tMbfl]@Z.]0XUp^7'UYI1jL!!*,2[/^TCY6"\,"98W+"9f;Yb;#R1A2$3:,?!!!/"!!rW*!rrP$WTU&]W2QDc +WKO7IUt)7SV59ucTW+c_VkBo^Vkg5eUSaWXrh^I-Tr=o`Unso`U7nK\V5g5cW26;dUo3"DoqVecVkBla +TrGMs#,nJoUoBNVk+p4s%ABeqVl->eV51)d"onbE!9!n\Une%l!Up'n!Mf_s!!*,8!87DW!Mf_s!!*,X +!!WN*"9AS%U$r$^#lXf2!"T\T)!!WN'!%#4^!40'5!4'!9!!N?&!ZM.?]XS%F!W`H*!OT?:"onZ0!=&c.d/jIT +!Xo(:!!=f>/!"BG=#R(20!c6!!`W/!!EK+"q:#%(BF[?!!EE,!U&nGj%&!!3-'!!3<(XJGmt$O6A+#Rg\;"TST) +!2q3HW=K""T\T)!!WN(!"8q-U]R?g +!W]!m"onl,!YuLO!3)ds!WiB+!*$#5A0N$NLA7!!30$TW+Rl!!iT,!=]#1!"5Qs!!B!h!XkNkU]^aoUAtIqU]po&"on\/!;HO! +!<<4t!<<*#r;Zm#UnlBjRbq>^PI^<6N/!!0X=li7$r_Z8$`!4gV[!Ku'u!!1fCr;c;#H4U'"Te]/!2us] +!!WH*"98E*WT+!8!%nHU!"9A]-XKD[,XfDF,!!!B,!iZ/)!<<5$!<<*#r;Zm#WN#Rk#6Or1!!`Q6U[b/r!WiQ+!X/W-"Tf>; +#Ge-s"Te]/!2QRV!!WH*!rr<)VjS^q>^QA]upE.!!0X=li7$r +_Z8$`!4fZ@!j';RrW)Be!i!u)o)JftYPJ5&X4RCPZ-BWUli7$op]1?)rW(mW%Kc\7!W]_6!XJf-#R.]I +qu?d"\@CZ$"T\T)!!'O_!9O8##6>&0]sRnA!!ND6\c;fB[fQO2\[MS?"Tc3HrW!*&$31XG]#XjT!<<*# +\,l[2!Oi%4!<<0$!4^MYh>doa\,cU1!#irIm8)[-6G!3;mt!!!3(WN#q#WMfn!!i`+!!#h#Pt*$N[4-!<<-$!!'!t!kJBu!"T)6WMKe#!!3?,!L;p!i2XS!!NB'!rr=tli>N8)[6^Pt^&%g0\`!Mg^%DBG!!1]Lqu?o7^An8JXSr2#^9.>6!QW4V +!!0(:h#QX=!4K'2!57h$_>jSHq>gQ+b5g/p!O&Hg!!'RI!71]G\[_\@]taOHhZ*`5O3RD!!ku+BZiKFm +!4MY&!LL_'!9!ng"TSQ6ZadRH!!NB)!4fWEr;Zm#\@CZ$"T\T)!!'O_!9aD1"U4r3"9cfO +#QP&2!!3;&!!iT*!k872!!*i>!Pc!!<3$WT+!9 +!%.sT!!NK.X/Q(%$NL@,WW<1"U^.,(W2fn(!ser4!!39("pk84!!:@ErW!0(!!!&!!rrA2!!NB'!rr># +h#Pt*$N[4-!<<-$!!'!t!kJBu!"T)2WN$(("pFu,"Tnc5!!E#s"p(\(!<<-$[K,=f"p(\(!<<-$hZ+)j +$ig84!rrQ+"98Z-!WE'>$NU>6"on]*!rrB*!!NN+V5XLs!!3?)!#88! +[/p4+!WomAjo>Pc!!3-#\CprG!#>VI!!4XR\,s7M!!if2%0H^G!!itEYl+V2#QY22!"/f-!Xo&9aT)JF +!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!q%"Tf#6"KVS-#caO"!WrK. +!=&T)#QXo,#lk7T!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"/h,!5$igM8!WW9'!!;io%0m(BUnt'k"TSQ.!!!-#!#;IA!3<)q!sk^%!!]7"!<Pc!!<3$V!"f;9Unn%s"on`*!!3K- +!sSf0!!*!!'E\=8!rr<7!WWW/#6P#-!Wi?'!!)co%0d"ATq\Fb"onZ.!!!-#!#;==!2u`f!stZs!!]-q +!<3(p^aS"T8<%!k>c&!!NB'!WW51g&U=:$j6P#irIs:$j6P9!=YEsWs#8u$NpA.('+T<"TSS&WWWG)WMfds"p=o+XeVg!b5hMA#6=f)!N?/$!Oi%4 +!<<3%!3+cSeGosXWF#"p4u.!!*0)!"/f0q#CU"W$Wset3"98H(!4.!sYU%#6:R$WW3&""pY;4!X&Y(!"T)1"/u;$!!*9(#64b&WWh8[%g)hA"TY>&#QP&/ +';)3("T8<%!i2XS!!NB'!rr=tli>T:$j6P:!=P6mVurcj$NpA.('+T7"TSS#Vum,%V5+(k"p4i*Wh?-l +e,].A#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr!9o"Tnl-!!*0(!"/f0q#CU" +U]CJr!gQ+i;`kko`3&5"`q].!3!:$!!'J,!!0gRrW)u3qZ$]TQ`]$CkPtUkY5eR9mf:3) +!4hq+s1-;QfDkrc[d3to\\eEo!!'R[!!0"7j8]4D!:'UdVR457!"#S(!1U_'!1;0KY5mnh!4MY&!PQ;J +!9!ng!X8W6!ku#A"9SY9[0cm;r;Zm#\@CZ$"T\T)!!'O_!9X=s#Qb,0&-;h7\@V_D\@hkI!k&R?!!W?% +%1okZ!W`?&!4]DH!*$N[aPc!!<3$WT+!8!#5\?"9Ao5!!K:% +!!K:%!!NJ$$N^;4rW!B9UT=Lt!WW5!V5XJ!!R(QC!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**# +!3)q!\cD$r%L/u1$31&0!!EE/!<<-%q#CU"WX'h>e&g"onu3WLs4o!s#9n#QP&,!!34tUuhX\!<<3%!2]#^ +eGpm\`!Mg^%DBD +!!TgU!!'^arVuqsq#CG\e,01I]qW6q!9aC_[]]Z2^$bs3l2UjU^@qU5bl@b!YlFdKXKDQi!!'J&!<9b3!9!nf"U"o-"oo4F]=,DT*!-QH!!353\E3bp +!<<0$!4^__kPut3#65&3!!3<(\@B-Y[CE^J!P/=4"U+l.!49AD"TSi/$b*^Z!<<2C!!NB'!!0S2!<*$N[a[^ubG[_&sT!!EH*!!`Y+!!iT*!k872!!*6-[CElS^9n+$!"K/8"98W+ +%&p8'X-sb*$2ac)!i`0]!!NB'!rr>#irIs:-NXGO#6Or."otX%WsGN#W<*+#!WWE.!!E:uWhKXs#65%. +X/Z1#!mCZD!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cD's%gN*2XdcDmW2(O:":"o0 +"8Mp$!N?)#!!*,/!94%`!N?)#!!*,Y!&"HY"oo&3"f\I2!<<3'!<[7!!!-*":"r4!"Aq/ +V5XOu"Tnc4!!E#s!!=PR!!*0&X/?F-!!`]0!!30*W!39qW)!s/K'$31>3 +"TT1/!sS`*"9nu5! +lMpt'WV6B%XT/?Z]`8&3b5_OAc)J#Lli7$oqu?nn^!DVqT`+rL!"K&3!!!6(!c& +!!NB'!WW51g&U=:-3O;U!WW<0!<9a8cAE!!!&0!W`9% +[f?R4!!3-#\C:N8!"/h;!f,4!!WT,%Kc\:"TSN*!<5!t,)1!Y,FE\@4-l!!iQ/#l+H,!WW<8!Y>>5 +!#$@d!!30'"one7&HDkL!X$->#lqKD"TSW*!WWH*!iZ/*!<<22!<<*#!!NH+!!9[?h#Iod!rr<)!!**' +!!EE)!sJQ&!Wo@#jo>Pc!!<3$WT+!9!%%gK#Qau/#QXo% +WSIOa!WrE&"onZ)"98N,!!!<<<($NnlYo`,3t!!!%q!rrA2!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG#t!"K.-SIGT" +!"&]-!s&K)"Si$%!Mf_s!!*,8!87DW!Mf_s!!*,W!%eBT"pFu7!rrN/!!!-&!!WE9Tr=?X$j-kB!!rW- +#lk#/$O3H'Ua?'A"oni3q#DcD!!*!YYV;WLF+mUn\(n!s&K("onb2!;HO( +!<<4t!<<*#!!<9&"/Vj9!<9Ug!!'_*!5edEPKa(-_lNh<^]4A6r;Zks^X<,G!!'I2!!'_$!5\^9\bZ=+ +\]Y!*!!0Wgli7$r_Z8$`!4g,M"/aCfeaib@]`GgKhuEbUqZ$fMIfKJ^WNlNj!!'J&!!0dfC"TcPc!!<3$WT+!9!!39+!WE'BVl0Rq#6Fl0V5aS# +VuQmuWWEA*X/H%!!i`+(!<#h#Pt*$N[4-!<<-$!!'!t!kJBt +!"8n.U^7#(!W`B,!!!,q!!WJ'!r$!rrE' +!s\i,VkjCt!W`9("T\n7!;HO)!<<4t!<<*#!<<-#!2HInaoMIPi;`kko`3#4!NEd0!!o7@!!'\4!4flD +!!1]RrVuu5Xk*R:!!'I2!!'_$!5\^9\bZ=+\]Y!*!!1*;li7$r_Z8$`!4g8Q$dH3^!49VW\GuW:W:g2k +^$#FsXJ#Ci!5A1-!QVp[!:0[c[eKh'WQkDBbl@eH\@CZ$"T\T)!!'O_!9X>/"TST,"1Yi@!X/Q8!4oZF +!4W"/\[V\G!"/c2!<]pF!!*-$!WW8C!!NB'!!0S2!<*$N[a#irIp9-3XAN"9b[&!!3<($im?-"TYM%!3)q""TSf."p"k,WrN/%!!<3% +bQ.VB#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXWX8X/Q(&!!!'$WrT+'!!30'!!re)X.TFt!<<5$!<<*#r;Zm#WN"#?!Wo0njo>Pc!!<3$Vo;!!0jZf)Y"7!4K'2 +!57h$_>jSHq>gQ+b5g/p!P,Z*!!'RI!71]G\^LNY\buL2S\;_]P5,(ZTY8)6!<)s![(5N'!jokKqZ$]7 +!4M\'!N=VU!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__kPtSarW!6+"LYiC#dh2D)ZB^P!Or.3\@VeB +!!i]0$adFF*!cQI!s/PG!!NB'!!0S2!<*$N[a#Qk&."TT.E\[MbC#QOo-&-)b9 +!!3)1$F^0=!X/`-!<<0&p](:%'stT_!=Ar1!4WNI\.\nQZj$LC\@)O6!!iT*!k872!!**!!!353\B4dQ +!i`0]!!NB'!rr>#irIs:!!E3##m1=,WriR%WW3b4!#>U7!qZ$c4!!'RSq>^SfZ#A4okPtUkY5eR9mf:3) +!4hq+s1-;QfDkr_[d3to\\eEo!!'RZ!"$$JH.r"7 +!!'R(rVuu0WNlNj!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&U:9,ln#J!"lKC!!T^@$ip>0!W]_7%^*$N[aDiM]X/(K#Qb,?!#bq>&-)\5!!3/2Yn$a5#QbV>!!N?& +#QXk6#m():!!392!WW;t!!*6''Y(c^!Y>>5!4fDH\-<#E\,m*?!!](r#QXo,\,cR0!#h#Pt*$N[4-!<<-$!!'!t!kJBs!!K:#!WW8j!!WJ'!_97!3)un +!Xo&1!3)]mW_/V4XZ]"p1Ts!X\r.#,qUt!!`N) +"/Gqt!!3#u!Wo0naT2@Oi;`kko`3#4"d,Y^!0tb)!!oq3!//>l!8;Vq!!0jFec=n6!4K'2!57h$_>jSH +q>gQ+b5g/p!P,Z*!!'RI!71]G\^UT]R(:J/n,NL'M"guK!!9j=\a9@u^!2oA!!g6%^pX4C\Zr7:li7$o +p]1?)rW(1C!WomAjo>Pc!!3-#\CprH!%.dI!s/N(&d&C@]!;>:\@MYI\c;j;!WW51\-)dD[CZD@%0QY5 +!WgCC"T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC!!2Qh"p)47!<<-$XT7\f +"p)47!<<-$hZ,A7"TSQ*!Y2iL!<<9'!WW9*!!!-*!s]J>"pG&I!WWK2!WWf;!!b_!!35$WTF0a!<<3%!3+uY +hZ,#)!!E?)!"K,:"08-s!3)su#c[k-"p4i*WMfq"%Ag**":>83"9S\K!<)s'!<<*#W<3,$[f?R4!!<3$ +WSIR)!"/h,!/)Zp9F!rrB0 +"T\`3!!<3$$P3:@!!'X<#Qb#5"Te`*"p,&1"U+q:])Vs:!!WQ$!!*-$'ak$B%C--;!4ohQ!!3P;]Dqu> +]*JJ3!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irIs:)?BpD!!NW0!!*(uX/Q?)UoFKm!s/W+ +"pLg(rW!37!!*<*!!*'(b5hMA#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXWPc!!3-#\CprH!$)(A"9JQ'!Z:t?$+R5?$b3_K[LTgW +"98G6[fQO5rW!-+!WiT.!!C=C"T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?YlO@q"LtrC +!!2Qh"p)47!<<-$XT7\f"p)47!<<-$huG\;!WW9&!!!99!!!'1!"/f-"UPG7!Wi?'"p"c/$3mlNYlXt4 +!!E9)"onW=!!*>7\@T0O"9Ac'!!**#'a4R=]">#irIs:*53!s/H)"p"f0#R7-,TE>6"!!E9)"onW7!!*8&W2cg!"9AZ+ +q>_<4!!N?)X/`!"!N5u&!!`M'T+1t&WW36s!!`N)"/u;$!!3#u!Wo@#aoDJEUnm,Q"T\T*!!&k^!7h,j +!doa\,cU1! +!Vl]r#R;(G!!iS8]=7jS!"&c6!WrE&"L,<>!hfT"!<<22!<<*#!<)s"!k>b_!!35$WTF0a!<<3%!3+uY +hZ+o)!!E9'#nN`0!<`K3"9PU'"KDI$VuQf!Wi64'W2fq%"TSQ)aT2;?#6=f)!N?/$!Oi%4!<<3%!3+cS +eGosXWPc!!<3$VLqrlf#/@qR^AtgXrW!,AYlFd+_USYM!!'I2!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r +_Z8$`!4f]A!hI?Gr;cQl!i!r1mf3L)c*dW&p](>LW3H?h!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&U:9 +('+LB!!NA6\,cm9"9JY5\,s/?]!hhFrW!?-"hM2D!WWB0!!E9&aT)JF!!!&0!W`9%[f?R4!!3-#\C:N8 +!"/h;!PS=!X6'C\cK1K!?!!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$WT+!8!#>S<"TS]+Wi6"(!!EB+Vl9`s!3<%& +"TAB0!"9J]+!XA`+#QXr+$3181"98W+!"8i-"9ni1!!_<5!<<<*"fSE$!Muar"U##0!!*2'VuQjl!!`N)"/u;$!!3#u!Wo@# +aoDJEUnm,Q"T\T*!!&k^!7_&b!/!s/Z,"on`,"pP,:Uo+1m"8Dj4 +!W`9*!X5BqVu`Th!^pa+?#-#-5 +ZiItFq>^Q:[abBA!!'I2!!'_$!5\^9\bZ=+\]Y!*!!0X=li7$r_Z8$`!4fZ@!R6](!;6BnXNg26"g#8O +!2@4'!!1WOYlO+j!4MY&s1/+/ci=LV!s&G7Z31=3!"T&8"RZ6n!<<0$!4^__kPu\*!!3-%!W?!o"T\T*!!'"Y!8dbu +!<<3%!W`;%X9Jm1XTS\-"9YV/XK;O,!<<<(!3)q#_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSe,TrX"p"r3 +!T:%KQP3!!30$W29_$USS"mrW3P&"f%pq!W`9)!!&mm"O-r>!!`N)!!/kt!!0P/"T\T* +!!&kX!6Y?OVZm/,!s&Q.Su2Si!s6IBi;a"VU]LMsn,NXnU]CJr!pc$WMKk$#,J$p#-%[u!!`N)"/Gqt!!3#u!Wo0naT)@d +P2QB@^%DBF!!UW^!!'4Dqu?hu!3a99!!0g@eH"e5!4K'2!57h$_>jSOq>^PZc-$+>!!0X=li7$r_Z8$` +!4fH:nc/a,XhaN."KAp3Z+g2;!Rn=Q!<9L4!:0[c[eKk&\c)TV!"T>:!!r\2^::\a];[:\!X8#m"T\T) +!!'O_!9aD(!WiH+!=0[H[C?4F[K-R8![^lG?]* +%gKHB-EFbj\%'/W!=8`-#dj[(!!KgA!WW8j!!WJ6!]?%1]YR!!WE)#QOq"!!iT*!k872!!**!!!353\BY'b"p4i1 +!MHQoWN*"c+92HImf3Ll!!<3$WT+!9!"f;8"9\`1'q22)!N`@)#6b21rN$8+"KJ*p"9GL$_Z9Z9#6=f) +!N?/$!Oi%4!<<3%!3+cSeGp*aVZ7a*WiE"sXe5\"!!!9sOeWMoq!!Up'n!N?)#!!*,/!94%`!N?)# +!!*,8!!WQ-TW&5""o/-(!WWH+!=#:"Wue&>#6b)9!!EB("9ni1$ipC/U]Ur3TrA"r!!3B*!hfT!!<<5$ +!<<*#r;Zm#WN"/C%gE+9#6CBqUnsufP9Bo-"n)Ep!<<3%!2]#^ec>XN)?C$XQ_L>WUS7en"9JS$USF[e +!iMRh!s,6obQ.;9#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&.XUAu@%W2QMfWgs.q!!pf#!X8W+WW;eo#6=f,U]CGq!WjnA!!$lU`iZH)Mou+Q!!0X=li7$r_Z8$`!4fT>"-L"l!:g*lPMe#e\cVpK#m(,2Zap,>"pD:5o)Jp' +\,lX2n,NXn\,cU1!!!`N)!!0&$!!0P/"T\T*!!'"S!7_&Z"0)J( +&dJI=#,A0u"9o"B!9sOeWMoq!!Up'n!N?)#!!*,/!94%`!N?)#!!*,9!!`]."KeF&!!i<"#Qt2/!#,GI +T;Wd1"oni."U"u/!s8N1!!*5%W2C"'X/i3.!!rf0%%mS*!<<5$!<<*#r;Zm#WN",B%Klt=!2lIn!<<<8 +!!3?,mf3Ll!!<3$Vt1!4Sp-WVc_sS`B\L!NF)h!9aC_[]]Z2^$bs;TK!4TE;\cMm9!"liJ!!!9)"p2U@"T\T'!Or13!!0P/"T\T) +!!'OY!8[\_!kAC8!!*-(!4ffB!!**%[/fdu"LtrC!!2Qh"p)47!<<-$XT7\f"p)47!<<-$^]4QE!#h#Pt*$3I10"98H("9>F'rVus"!kn["!!K:#!WW8j!!WJ'!"p"h&UoF[o!!`W2"9JT*'*8:?"9AK1r;[Q8"9JT-#6q$&W;m@,V#^Q1Uo=Lt"JGf# +!<<5$!<<*#r;Zm#WN"/C!e#e\,lX:"TeZ4Z*XK<"p)(2o)Jp'\,lX2n,NXn\,cU1!?!!!9Y2!!!$"rW!!$\@Bc`%KQb>!2Z=p!!NQ2!!39+mf3Ll!!<3$WT+!8!$)7D!<<-*!&"9G;u!!B2$!!!&u!!35$WQbDQ!Q9 +*?&!QG,u!!K*n!WW8j!!WJ"!!bb!!!'!!!0."r;Zp%!X&Sm!!NB'!rr># +irIs:*s;QG"Tec0!!04(!sf#3"K\]"XK2F+!sbM.!'t!X&Z,!!WQ+#QOq%!!!')!<<*&XJu7(!hfT!!<<5$!<<*#r;Zm#WN",B!!3'!!N;jn +!!<<)"9Ruk"T\T*!!&k^!7h,l!rrE-!WrT+!2c[r"Tnf.U8FHVVZ6i$#Fu8(!2Q@oblID:#6=f)!Mfet +!Oi%4!<<3%!2\fXbQ%tOVZZu$!!!0&V5X@n!!1(>i;a"VU]LMsn,NXnU]CJr!^"M2j:^rW!H<[^ruXZiU41!B0u`!4o\U!!NB'!!0S2!<*%g'6A"98K'!"$'C"pY/2#.4I&!!KgA!WW8j!!WJ6!C!!8%8P\[Li)!4fuIci='VZiKFm!jo&4p&G*+q#LH/YQ4"i!4MY&s1/+/d/a1JrW!;;\Gu[: +"TSc1!!;Th"T\T)!!'O_!9aCm!<<6&#R(20!4KB;!5#]=!"HHG\c;a2$j$\7!P5`A_#OW>!!!&0!W`9% +[f?R4!!3-#\C:N8!"&e;!<`B+"Te\7]D_g1!jr%"!!KgA!WW8j!!WJ6!#h#Pt*$3I1-"98T0!s#=#rVus#"24d#!!K:#!WW8j!!WJ' +!T:*ru?E!!WT, +!s,0o!jSCq>^Q1`leA7!!0X=li7$r_Z8$`!4fH:lMpt$Z1\.t^A\*5 +XM+T5!PbV!k,MI!<<23\c;p9Ye'qP +!!NB'!!0S2!<*$N[ahO#m125!!NE)nGiRj!u1e:#6Ou-!Wok3!=6*E$ipV8 +!X8f0T`>?!!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$WT+!1!#Gd=XTAO*X9&D*X/i?)!X,L&!!WLs +Wr^-=rW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJC0!#>S>!ZJ5!;-! +!!*:uV[*$N[a2#e7IV!#irI[2('OjI!XYg+!irE#"T\r2"KJ:&!!oX$_Z9Z9#6=f)!N?/$ +!Oi%4!<<3%!3+cSeGosXW88!!)Nh'W%W+"98E/!!EM%#6CU#TE##p"TkS%p](O"!!B"t +!!!&u!!34tUr`W:\`!Mg^%DB@!!T%/!6i]cqu?cUo +^;I4k[^Q#4!P,Z*!!'RI!71]G\[DJ=[(l[Ukl:ah^A.a4XT/@#k*N+Kli7$op]1?)rW(1C!WomAjo>Pc +!!3-#\Cpr?!#>e>"TZ*?!4]GL"98K'#.V#E%0-J1#JgBD!<<*#\,l[2!Oi%4!<<0$!4^MYh>doa\,cU1 +!b_!!35$WTF0a +!<<3%!3+uYf)QTf#QY,1XJl9&X/uR,"9Ab,U]q/+"98VD!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"/h, +!4!!^[Jo`,3t!!!%q!rrA2!!NB'!rr=tjoEU* +$N[%(!<<-$!!&gj!lG$0!"B,5$NR-$Tr4``!rrB,r;ZtrU]LMsn,NXnU]CJr!:2!;HO!!<<4t!<<*#r;Zm#Unl*4 +s1.(g!58%*^]4P]W;s]9ebfCJYGTYHkPtUkY5eR9mf:3)!4hq+s1-;Qjo>S0]pQ^B^%hX/\[Li)!4fuI +ci='V[/^36!3,2_!l!3_q>^Z6!!'+"r;Zl4Z*45p!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&U"1('FgC +!P,Z>[^NNK)#t5V]=ItB#6P#3_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;![2GS:#QXo,\,cR0!8!!!0&!3)q!!!2Qh"p(\(!<<-$[K,=f"p(\(!<<-$^]4iJ"98E+!33#o&c_n9":b)* +q>_63UT1Pc!!<3$V\A +!Wf0o!2H<]T+_24USt'j!!WN-#0d/@!!`N)!!/kt!!0P/"T\T*!!&kX!6bEN!Mf_s!!**#!2QCl_Z96- +'`nR>VZI#*!"&]6!rr<)!!&gj!WW8j!!WJ"!*"To26 +nGj:*TVn[g!rrQ+$`*h(!MKi*!<]6o';tp+!!`N)"/Gqt!!3#u!Wo0naT2@Oi;`kko`2c-#/n4UZF?a) +rW!#*`k]q$kPtUkY5eR9mf:3)!4hq+s1-;Qjo>D%oDep&[d3to\\eEo!!'R;!!'e8^8C,p!ggsJqZ$W1 +rVuqrr;Zl5TWeF_!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&U"1((@FW"98T.!4o\N!!WH.Z4d3F!k,ZA +_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!;\-N-;%0-A/!q60i]+qib!rr]0"ou78!=8f0!"fLH +\c;pIT`>?!!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$WT+!1!#G\EUoah%"pG%/X/l=,!sbP2!!i\' +WWL*=rW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t!kJC0!"K5;!Pc!!<3$VjSHq>gQ+b5gZ)!4MM"!P,Z*!!'RI!71]G\[2>:^$#FtbIt"S!!(4WV"T\T'!Or13!!0P/"T\T) +!!'OY!8[\`!Or.2!!**#!4]N?[/^:1!>#kV\,Z^7&-)b3+oqZH!!'O=!WW8j!!WJ6!J!>#:*!!iT*!k872!!**! +!!353\B4dQ!i`0]!!NB'!rr>#irI[2('+cEX9&G/!X>X)X98\<"9ec/!!]I&_Z9Z9#6=f)!N?/$!Oi%4 +!<<3%!3+cSeGosXW;u!!B2$ +!!!&u!!35$WQG2B!i2XS!!NB'!rr=tli>91'aLV2!!<<6&!2QCl!!2Qh"p(M#!<<-$ +^Ausf"p(M#!<<-$^An`N!s&B8!"Ao.UB(B)!!Mfl(BP6M!!*'%!=&b$#QY,9!!N@uTrA&$!NH.p!!`N) +"/Gqt!!3#u!Wo0naT2@Oi;`kko`2l0!Pl#=!!9.5ZM4D#`jF7rkPtUkY5eR9mf:3)!4hq+s1-;Qjo>Cp +oDep&[d3to\\eEo!!'R:!<)ruWT!mXVYU8oXe!kD!:0[c[eKk&\c)TR!!353\E3bp!<<0$!4^__huFQ# +!4fND\?ZDDZamOF$3UJ6!Y>>:[^lXY!!NB'!!0S2!<*$N[a)aA\?Z)@!!ED4"Tec5T`>?!!!9Y2!!!$"rW!!$\@BZ]!Wo@#jo>Pc!!<3$WT+!1 +!#GtCXfMf1W!NX*XfMO1"U,#2$igI-WWg<@rW!0(!!!&!!rrA2!!NB'!rr>#h#Pt*$N[4-!<<-$!!'!t +!kJC0!"K#8!!&i3T<"fh"pY//$iU,/WMoq!!Up'n!N?)#!!*,/!94%`!N?)#!!*,8!"K)8"qCV=!!94# +W;lo$!VcZk!#Gb!;-jSHq>gQ+b5gZ)"e,LC_kP$D!!0X=li7$r_Z8$` +!4fH:"98G=\[L]%!6tHB"2+]JPPbC\W363f!!'J&!<9V/!6kKF!k>c&!!NB'!WW51g&U"1(':qU!OB>F +!4fKC!!*>6\,ZO0"hD&E_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!Q +&-)\3\,Z[6!XA]*\@;S?!Up'n!Or.2!!*,&!:0[i!Or.2!!*,8!"Ar4!!!*'"TZ'B\[V\Bmf3=i"9nq9 +]"%_@%(?5K\-2j7!!*H.!!T"q#QXo,\,cR0!!91('C>/!hZBb +!2ZCo!!3A#V#UMr"fA!sblID:#6=f)!Mfet!Oi%4!<<3%!2\fXbQ&"OU]CJr!$ +^:jIF!PYM_!9aC_[]]Z2^$bs?!!'R7^9m/* +!iWuCrW!&&!6q^H!:0[c[eKk&\c)TV!<3-"!"-?K!!3E0!!`T+!Ug!l!<<0$!4^__h>e8r!!!;3\cDuE +!"o>7\@MYD!!B^>!Pna>!<<*#\,l[2!Oi%4!<<0$!4^MYh>dla\,c^4"U+r-\\%h@rrUOI"pP52!WWQ- +q#LR"!!!9'!!E<+!=Jl=]*86A_TXY9<]=PM\\@]8]!4`$> +!k>W?cN!tJ!r`0,Wi5t"#6b)2"98Jk!!NB'!rr>#irIU0'aF^=#,S@$"fVJ3!s5I&!!N?*W2Ka8!<)s' +!<<*#W<3,$[f?R4!!<3$WSIR)!"&e,!<`B+"p4k)Wr;u!!X$dL"pP83!rrT,q#LO"!!!!&rW!Z6"p"u0 +WWiG+!W]4"!X8W-!!K:"WrAt&X/MqsU8k8jpo+IuW2l_oW2d>+ii*-_W2l_oW2d>+%]Z8'WMuquWN)qs +VlHYopo+=qWN,rs%]-8*X/VnqW2l_nWi;ttTW&-pWiN+sWN,rs"feW(WMKaD!!*0'rW!;(V>pZ%"TS`/ +!!2Ng"T\T*!!&k^!6bEX"onW-Tr.npV#Ur,!i2^o"TSY#U]J^?o`,3t!!!%q!rrA2!!NB'!rr=tjoEU* +$3I%)"98T/!s#3srVus#"4.#R"pFu/!!iQ*!W)m"!rr<*rW"&A"T\o0W!35)!W]'p!X8W-!!B'nW2-8d +Vkg)dSuAQ]q5"=lW2-AcVkg6+V:qaNUo:)fTr4]a\"s8,Su8E]V[',qW2-5aVka'a"K%unUo=9h&#-"u +W262dUo0o^W2-5eUoL9cV%0H%V5'iaUnsocW2HJd"3LTE`kLC3!58%*^AnD+_Z0\Ar;Zl,_u0Q9XKC"Q +kPtUkY5eR9mf:3)!4;S&!PZRs!9O7]`r#f;^!6ES%DJsa[^<`cXf9U/`l"bN]a(adXhq!NXhVukdCfdg +cE4s]^TG8^]b%lkZ,VsM^:qM"[`5M]WQhF<]beDd_QUta]sO`aXhqfL_Q:YQYK!cSbHJ7cn%B4F`l#'\ +\]_1j[(jJq[%RBud/X[]!s&W2\?uVE!rr<(!!!8m!!NB'!WW51g&U%2(Bsj>"pb4@\cMlD(]XOG\@)A; +"9JW0"Mk'A!<<*#\,l[2!Oi%4!<<0$!4^MYh>e&f\,c^4!WW3,[C?DG!'li75$V?mD7!!B\1":kPF +Yljt*"qgnE!=Jl/pAbp2!"HBJ\,ZQ?\@B-N!!!WZ.X/c=&WY,:3$`U$(!!EB*"U)aDrW!0(!!!&!!rrA2!!NB' +!rr>#h#Pt*%g&^2"98N(!!f@""pG#1#13DU"onW.!!3-(pAb0q,Qn)O!!WE1!=T)2"9\c."Jc#!"98W+ +WN;qrWi)YmWg4e.!!W/u"q6\#"UP/3[K,=f"q6\#"UP/3[f?O>!t:h*rW!05!!rZ3!!3/q!!`W,$E'o' +!!3(u$E=(,!NE%#!!!WW-W2KduV\9%1$`'Nt!!EB*"pE0No`,3t!!!%q!rrA2!!NB'!rr=tjoEU*%g&O-"98N(!!f6o +"pP)1#13DW"onW-!!3-)!!)fp,m+5L"onf,$3:P;!!EB*!s>4s!X&K-!2ZZgVl6AaVl5b%!!!2u!!Wjn +#6bG7"2=ii!!Wjn#6bG7"1J77$Ngg.!rr<+!"Ao8!=8`-pAbp2!",L!U]:FmUnssh!!8dbV +R/6ji^!WRh`i5lZ`aJE=!*@&l?!!<9'!s7lj"T\T)!!'O_!8[\j!k8F7\$uJIZiC+7"hD5H":>,3!Wp1<"T\T'!Or13 +!!0P/"T\T)!!'OY!8[\_!kJL7!WW3(!4]Z?!!!&H!!`N*!rr<=!!)cq$3L8.!snr1!<<0$)Zp6F!!*'# +]".kI!!3/3ZO[$=!!<3)'*&(:"o&*&^&\3B!!WG+!UBaj^&\3B!!WG4!=Af/!X/S7"TfD=!<*&q!#irIU0'a(B=!2uju#c.M%#R.3.!X&c/"9JYC!<)s'!<<*#W<3,$[f?R4!!<3$WSIR)!"&e-"98K' +!!NA%X8W)!!RLfO!4p]:I!!$hOI#64l-!!3-'"Tn`*!!0+"!!`K*!32e&!!E9)!!Wr6!X&`& +!=#Y,!!rW0!4N!g!=#Y,!!rW0!4Mt=!!EB.!3$/(%fcS2!s8T#!>btE"9JQ3Tr\FuWW3)##lk",W<<>0 +!!8hp%gE+EV#h&0!!3-#!tq9*#0m2K!WE'"W29Fm!s/K*!q$$l!<<3%!2]#^bQ&@[U]pgpU]Ljr!!*B0 +VPjP!#QOu/!mL`quG!!!*+!!E<&!WW<+!rr?%!N2gq"on])Vk=Ct"98N("V1S7"9nQ$#-%\($3181^]E*h#-%\($3181 +[fHX4!s8],V$@/*&-)\3!sA?"(C(*H!WWY"W!Q)CM!:0[cT_JKfMnT)ici=OV"pt@;Ym^U9"pFu-!sJ&m"T\T) +!!'O_!8mhm"TZ!@#QY55"U)@A#QOt:ZkWQ@\?l@R!!NB'!!0S2!<*%Ka-A!!rf1 +!"?->!"&o2cN".T!sBdK\@VLG!4r0>#J7&h!!i`/!#l(C!!iT,!joQJ!!N?&]=J"C#m^S5!!<3)"9A6! +"ou79!W`B'XTIhj"ou79!W`B'[K6jN"T\V7\?lbH!?(q#h#Pt*%K`R1!!`]0!"#Ij"otY(!W`E( +\,m3D!Y5J9!32un$ig;B!!!*&q?$Wr'GLQL"9\`,W<*8("9tj$WrN,%!#2+.%fcS3V$d8'"U5)2!!TC' +#0m2Y!<2('O]5U]pi)!X/_'"pP&0V4eG#!2Q:jbQ.;9#6=f) +!Mfet!Oi%4!<<3%!2\fXbQ&+SU]LN$"TeZ2SY6#h"p*$M#R1A6)477uUnmm`!3#mm,H-qS!!WT-!!NH) +"p"f-Tr/4t"TSP$VZ?c&"p4l+!rrK-!;Q[#!2fi!!:!nm\[!2fi!!3!XAf/%g;t6VkaQk$NL2A +!!!,s!r`06'EJ7<"9AS"!X8W-#,S#l!!!*$'WM60!Y582"/6/'!!NN/!WWD%VZk3C!M,;1!!'_*!5ed; +WOD[(!5AC3!OSa'!!0O*e,\\4!4K'2!57h$_>jSLq>^PWS]_$3!!7>Na8*.I_R?ndc#<4S!Lq:1!!1*T +li7%/_Z8$`!6__Lq>^T;]r'un!4Me*!ktPVXoReg!20)e!PcPO!7:cI!Wi9#$GEtM!Wi?*!X/Q*mf3Ll +!!3-#\Cpr?!#6]e]!hhD!WW;/!<6\'=sS!Wi9#$E^9-!s/H+!sJZ,mf3Ll!!<3$WT+!0!#6ENX/H4' +!rrD!!<(!%W6PAD!Wi9#$E9j%!s/H+!sJZ,mf3Ll!!<3$Vu!!`T+!X&K, +!!`E&*2ii<#64`,#-!pu!!!0&Tqqeo!<<3&"9nu/!!`6!#6^b(#QOu-"2Foj!!`Y$":+u1!!Bb3#6P,2 +!##DT%l^%DBC!!97>Xo&/!SbN0cXjto$kPtUkY5eR9mf:3)!5A:0!P[@4!9X=^c2%D@dr#!_!N33h!!&t8 +!71]GW3cR#!!9^AYNc)gc+X#T!Pc1I!:0[cbP2&<`i]4?ci=OY"p=q;ZNU=/#Sd=@"Tn,m"T\T)!!'O_ +!8mhn&c_pA[06QB\,a2J%^,s7!s&`/\@)A=_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"K(A!rs,D!W`J2 +\c;j;"O6uN"q:P#gND["9nu/WhTau!!a#7!X8bq!!NB'!rr>#irI[2(CgEFWMB^uX/Q*##7I%)!!E<. +!3)dp"2k3=!!`N)!!0&$!!0P/"T\T*!!'"S!7_&Z"0)J(&dJI=#,A0u"9o"S!!NQ6!!WH+q#LO$!X'_J +!=Sr2!!]6uU]CH#"9\_(X8iY2!!B4"!s/H+!!*'""9\f#!!]G'!s8N-!k/0h!!]G'!s8N-!jr":!s&B, +V5X\'!rrH(!;Z[3"9nu/(BP!JWi;qn!!*'&!!WE'!T)!!T>'!!`K,"9JQ'WMp-J!"K,9"9>?m +"TSN,&-)b8"7H3n!<<3%!2]#^c2\Xi!!&jh"TYKs!3$/1RKENl!=/\%U&Y;?!;-7!$j!!0m#i;`kko`2i/$GE>;!6q\IeGoSsqZ$Z1 +W71h2!!'I2!!'_$!5\^9_"n$3Q,(QCkPt[]^8Cc-!PR%]!!0:1li7%*_Z8$`!62AGp](>f\a'4t^qHkK +VZ?&`!58.-!PYiS*li@=o]`A-;!!E;4!=]#1 +#R:>2&HDh8!)Zp*B[(EdK"p+c+!!!3?.!!3T0!hB6 +!X8`,'EeFbe="p4i?!s&IsW2'J!!rrE( +!YYP?!!'#"p]1j+$3I"'"p+r.!!<9,UnPm1#)hNFZ,b+#jo>Cpo`2i/$dGCG!0XGaTE"ti`r,l=\\kDr +!9aC_[]]Z2^$bs5mJmCk!!<3$WT+!1!#5S?!!!0'!33"#WWT)sW;lr'!!&r&_>sQ8#6=f)!N?/$!Oi%4!<<3%!3+cS +e,TrX"p"r3!!!`N)!!/kt!!0P/"T\T*!!&kX!6Y?OVZm/,!s&Q.Su2Si!s6gL +#m1//! +!87DX!MTYu!!WE(\GuX4!<*!#"onu8!WW:uVkj@pq#D37!!WN,!!<9&"ec)+!!o8!"UG)4!jSOq>^PZc-$+M +!!'_0!!/b,qZ-Z1li7$a_Z8$`!3!7)o`,'#_mJe2!2f\p!2ljtli7$rp](>s^]"5X!!353\E3bp!<<0$ +!4^__huFPu!W`93!=6-D!k/BB])`!9!!N?&#QOnA!!NB'!!0S2!<*$N[a]=>?P +!!3<(!!*3$!;Z[*#IjaA!P#YO!!*-$!WW7p!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irI[2 +(BjmA!"8l5Vl9`r#,eI%"9\].!!!3'!Q5!;!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q! +\cDX.%L)q6Whfq&!!TEq&c_q9rW!)#W<*&#n,NXnWc&!!NB'!WW51g&U%2(BFLE$*=C3]=7pR!k>`J!s/J5#7(;2!Pna>!<<*#\,l[2!Oi%4 +!<<0$!4^MYh>doa\,cU1!+)!WW9&!WW51\,lX2n,NXn\,cU1!4s#6=f,W;uu!!Wq9Sr;Zi3d/`A1!4K'2!57h$_>jSHq>gQ+b5gW("F@f,\Vp7`!P,Z*!!'RI!71]G\[2A/ +!!A:re!oe+!3#ks!lhrmX8qSe!4MY&s1/+/bl@eH\@CZ$"T\T)!!'O_!8mh\$N^=;]Xn%A%CcBB$3150 +$FmGK!!!;@!!NB'!!0S2!<*$N[a2\,lX2n,NXn\,cU1!h3"9>I#&c_n4!WW@r!!`N) +"/u;$!!3#u!Wo@#aoDJEUnm,Q"T\T*!!&k^!6tQJ#m(+&WMf[p%Aa%/#QP#.#c+-u!!!5J!;-Pc!!3-#\Cpr?!#5tD#dh)I!X/Y;#Qau, +#mIcK\cN?C^]4N=!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!b_!!35$WTF0a!<<3%!3+uYec6Em!!f=!"p5#1WWiP*!=&e)X/c:0 +!lG$;!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cDU-%0QY>#6=i.!!`]5!W`B%!!K:# +!WW8j!!WJ'!83"9S[u +!!`N)"/u;$!!3#u!Wo@#aoDJEUnm,Q"T\T*!!&k^!6kKY$NLC)U]po)!iH5)!!*<.U8Opk$NeNPo`,3t +!!!%q!rrA2!!NB'!rr=tjoEU*$N[%(!<<-$!!&gj!lG$/!!`W,$jH_5"9AE*!WiB(rW!(sU]LMsn,NXn +U]CJr!*$N[a!#irIX1'*8=;WN#puWMuhq!rrN*"fe?u"i13< +!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cDU-'a4[A!;>!;-dPhV?#r_!4MY&s1/+/bl@eH\@CZ$"T\T)!!'O_!8mhi!s&K)\[;PC[CEiU!sJ]+!4]]@!W`H* +_#OW>!!!&0!W`9%[f?R4!!3-#\C:N8!"/h;!#irI[2&d/4Pc!!<3$Vb=!!3?.!!iZ,!r!5><1li7$op]1?)rW(1C!WomAjo>Pc!!3-#\Cpr@!#G_;"T\T@!!!88 +[(QPA!!3-0!"o>;!!U1="T\T'!Or13!!0P/"T\T)!!'OY!8[\`!Or.2!!**#!4]N?ZiC.5!rrZ2!XJc+ +"TSN.!X&E%"LtrC!!2Qh"p)47!<<-$XT7\f"p)47!<<-$XoJk:!!*9(\$uJ@"pFu/rW)fq$j$RB'",(V +!<`Q+!4"feB!"98E'!"&]9 +!sS`/_uTc:#6=f)!N?/$!Oi%4!<<3%!3+cSeGosXWPc!!<3$V55!;Z[*"gnND\c;a4!!NW."98Ir +!!iT*!k872!!**!!!353\B4dQ!i`0]!!NB'!rr>#irI[2(Ba^<$ig83!W]:#U^%#&!!WE.!<<-#"iLE? +!!`N)!!0&$!!0P/"T\T*!!'"S!7_&W!N?)#!!**#!3)q!\cDX."9AN+!sSZ(%KQP5"onZ("onY&W<*&# +n,NXnW0"LPkP[K>pu#6G)4!<<*'"Si$&$3:;5!!*-)nGids"TSN'"9nqs +!!NW.$igM6n,NUm!!'S2"9&<"!!353\B4dQ!i`0n!!NK+!!!3)p&GO&!!<3$W;m&0"98K'!VcWu!X8W) +!W'!33"$!!!5%X8r;,"TAH$!!3<) +"nr!$"onW)!<<8t!!WW-!!30$"Si$%"98H(!!!6#!<)s'"p4i*WrN;)p](@!!p"U4r5!!NGt!;Z[!!X/Q1!!_ll#-%_*!WW3&nGidt!W`9("T\o)!!`W2!!!$&"p=Aq"p4r5!WrK- +mf3Cm!"8c+!NE",!!iQ.!!E9&!!`K+#m(#."J`#sV$$2e#6P/5!<<*("Si$&#QY)3!!*-)nGids"onW( +"9ntt!!NQ,#lk,1n,NUm!!'#""T&0#!i`0A!!34tV"Xim!s&B%"TnAt%06G2!!&hq!t5;4!WW8r!!<9+ +!!!$#"8;d!!X/Q(!<`)s#6Or0!<<0$"8Mp$!rrK*!!30"!ttY<"Jl8%!sqZ$d$"TSN'"8;d!!X/Q(!<`)s +#6Or0!<<0$"8Mp)#,MA)!!!0+!2QCl_Z8Wq"Jhgp!!2Qh#6C_'!!WE'!Vl^##QY)3!!*-)nGids"TSN' +"9ntt!!`].$3183!!)Nh"Tel.$31;!!!]>&!6"98H("n;Qt"9ec* +!<`T/n,NUr!"&]1!r2ik!!NB'!2fi"qZ$[!Unl*4s1.(g!58%*^]4AJr;ZlC\buL/XjtbukPtV"Y5eR; +mf:3)!584/s1-;QfDkr_[d3toa27o(!!'d@!:^$i[&rft"..WHW2Td`!!'h0!<9V/!6kKF!k>c8!!`Z- +!WW?'!X8;u$ip>0!!'MF!!!'#"9S>u#6b//"98K'"o/-&"TeZ,!!3-#"o&'%$3C25!XK),!$hmQ!!iW3 +#Qk&2!4BBo +!!`Z/!!E9'!!W9#rW!0,!WW?'!WWE!!!Wc3!!iW3#l"B,YoWlF$ig>/\@;UF!:p0n\@;S?!Up'o!k8F7 +!<`]7q#CU#!!`K*!<_fk"p4l,!!*''n,N[p!!!'#"9ASo!!33&"9\]+!!!)j!!W_>!!!N2'(5f)!s&H' +#64i$!!WN+!<<-#"n2Kq!WW3&!!;Th&Hr.1!!&u2!!!'#"9\E!#6b//"98K'"oA9+!!!0(!!E9'!!W,t"pb81#6G)6p])QF!WWH, +"pP21"otI"!!*61WrND*#-"\i&d\On!!`T+!!<3(!<_il#6tA3W!<;2"8r3$!i`0A!!34tV"aop +"TST("98K,pAbU&!!<3$V%Nb.!WW?*p](F#!WW?'!Wi?*q#CX'!WW?'!WWE!!!W]1!!WK/#5A0D#Qau1 +!X8i2!!WFsVZ6`$$E*q1!!]:"OqJ*%!!<<'":GA5"nr!$"TST.!s/Mu!!WT,!X8`.!VZQq!m!!`T,"98N(!!D`k"pUn(!"/i;mf3Oo +!!!&4d!!%rG!5\^9O88kV\]Y!*!!0X=li7$r_Z8$`!5>f?h>dVmF3gcb +li7%!p]1?)rW(1C!WomApAb1#rW!!#"Te>t%06G1!!'O5(BajA!!!)r!!30)!WE'!$MXT&!(.!!!)r!!`W3!!!0*!"/,o":>,;!!Vlm#6Y#4!=/Z0 +!q?6l!X8W-#QY22"RuHr"0s-Q"TSVn!!`i2"9ec*#6a`#":>,;!!Vlm#6G85&-)_4"n;R)!<@&XS;bq#lXf*!!X8W,n,N\!!!EK+!!NN!!!EQ-#lk2"!!`T3!"8i.!XA/p +#QXo6!!E93!&/WrW2'!!;Zj"9ni4!!r8u#6Y21!!WQ+#jqZq#QP/2#4VZu +"98Z-"oni/nGian!?@m:!<`6"!Wo@#aoDJEUnm_b!!rQ(!W`H*pAbX'!!<3$V4A5%"9AK&"8Mp"!&0!t##.!r2gD!=&T,$31&-!sJ]4W29P$#,.Um!!`Y&SI5E)!WrT+!rrE' +!$NL5."p"]4!WW9*!rrT-\@)M?$h"'"#QOr4!=8i'!!EB)"9J\n!!WK2!=/c- +#k%`t!rrH.!#WW3##!!Dlo"9ni. +!#3!!_ik!s\f+#OVQs"U,)2!q!!3?)"9/Dq!!EK+!s&Gt!!WQ/!!<3$ +"o&'F"9\],!!!0&"T\f-Vl'Rr"/hro!"&_*W;uu+!!<6*#QOi+"p"f.p](L&!!*'-!Wi&r"pP&.!"/i/ +q#CKt!Xeu0!<<>u!!WN+"/Mgt!r2g$!s8Q.!WW3+q#CX%!s&T-!!!<"!!WT,!!<3("S_s$"TSN)!!EH# +!!36&"9&9$W297h"9AN*!!`&qq>^X&!!<6&p&G4"!!<6&p](L$"98N(!!W)s"/Mgs!W#2!!_ll#6Or/"p"`,!:g*o!s&E,"98Pn!!`_,RKNTt +!s.fi"9S].!<`,t"p,#1"p4i0mJm=o!!!5l!$2+D"U4u.!tPJ6"pk82!!WH(!WW9*!rrN+V4n(m$1@iu +"on`0!=&]%!!EB)"9J\n!!WK0!$NgG2!<<3%":#%*U':T#W2cfs!"u-$$j6P7!!<6%!Z(b8!!`2u +#6Fl+)Z]p="Si$&!WW6?!<<*&q#CX&!!!$=!<<3!!<)s%!s\r6UT*qe!!`E&!>Yb2!!!6&!!*i:p](L# +!!**%!t4l("p4i+!5"SVm""9\c,"UFMs!!`E'!WiB*n,NXq +!!EK0!!N#rqZ$g'!!NQ0!!M`j#-+a+!!N?+nGi^t"T\Z-"SMfq#6"W)!W`Go!!!-#!!3H2"7Q9j"TAB( +!=8k'VuQr!!"oMt!!NK.!W`H0n,NFmrW*'%!!!!/t!!2Une(0!9!n\Une%l!Up'oW2BV"#mUG5pAb@"!s/K-#Oh]n"o\N(!W`Dm +!!`W,!sJi."9@um"p=o0"Tn`-mf3QiW<*&(!!Vlm"U>54!WrT!!!!3%!"o&'%!>qjU#64l$!!WH@Wu;3C"8Mp$!rrQEWu(m3 +!!EH+#.V5F"TeE!"pFu9!"c4Bp](L%!"Ao>X:P%*"ptD5!=Pq@p](L*!WiB1WtP4.!X8]2rW)u.q#CX, +!!33%!$&B9!!fkN!!!'%!"/W(rW!21)uos?!WWT'!!X(:$NU;1$MON-\[_eC!!`N)\@;UF!:p0n\@;S? +!Up'o\[VY@!!3-%q#CX'!!33%%0-G!!!`Q+"TT,9!!i#o"p+o4!!!$(mf3@m!<`BY+u!!WJ:[fQ[5 +"n2Ks!<>*!"&]1p](L!&t'F;!!N&s"p#@)'EnI> +q#CU%!!O()&cqk0r;[$*!=#O'"p+N""pP&7!">>*p](L&!"&]7Rgf#k"pb84!=5)'p](L(!WrH/R1B#m +!X8`1rW)ttq#CX*!!33%!#;="!!B#3!!!*&!WWN%!!f;7!!!'%!!rB#"qI%,!&$318)!!WH;Q4sN' +"8Dj#!>Cb5"onc$!!<<'"r%-)'*7h-"pG#3V5FItq#CU&!"&]7Qj`Zh"pFu6!">5&pAbC'!WrH0Pn!Kg +"pb84!=>##q#CI#!s\`)!MlRf!!`c0!Wi?%(8:F%qu?tq('"=9!WWN%!!f25!!!'%!!rB#"q?h(!"t!!WJ&U]U`#"n2Ks!<56!<`,t#6b)0!rrZ.!V$-p!s&Q*%0HS7nGiap +"9ni+!=&?"pAbC'Une(m!!W<$!Wo0naT2@OnGiQVnc/^(^@hR*!!&DW!!&DV!!$a(!!$a(!!1-2nc/Z5 +nGiQ)nc/Z*q>g9j!,M-*!PQ8=!!%35!!%34!!$a(!!$a(!!0X8nc/`Y!!)Tj!1<c7!!WN*"U5#0 +\G#t4!<<0$!4]N=#QXo-"p4T##.O^9"pFu/p](N.!WiQ0!!Drq"2+[7!WE/q!!Bn7!!3'#$jltQ!WW3$ +!s>jB":4u.%fckB!!E<0!!*/6!!!?+!r2g$#QOq9!WW6&q#CX*!!9Y3!!*/s!!`Q+!!9Y3!!rB#"T\Z. +!4fT=!r2g$!WWQ-!5&@6q#CX$!"&]+]E/-0!<*$%!<<,5p]19p!s&B%^%_R4!<<9("Tc3Ep](L#!!NQ. +!k@b##.O^9"pFu/qZ-Tq#.O^9"pFu/pAbg,Z"9\,n#._)@#QP;8nGie*#QP&2 +!!3b_!!35$WV6As +"98W1!Wo@q!"Ar/!rr>#W;m/(!!EK.q#CVu!WiQ1!!N,u#QOk(!WiQ1!!N#r"0;J&!WE/q!!B;&!!3'# +$jZhI!rr<%"9bI#":"i,%fch?!!E<.!!*/%!!!9)!r2g$"on_(!WW6'q#CX(!!9,$!!*2t!!`T,!!9,$ +!!`?$rW!0(!sJ\(Vud%r!!`Q*#QOk*!Wi)s#6Fl2!!'&$!Vl`p!WrH'!3GqqrW30&!!'+q!!`N)"T\c- +Wi>an"p=o1"p+k*nGiZj!WiQ-"onf$!!]D(!X8i/"SVluX8i5$rW;lq$O!E+!X&T-!!'!t!kJBs!!K:# +!WW8j!!]F%"p=o,"8Dj$"9SW,"oni9nGiar!!**#!@R@:"p>&/!@IjKp&Oph"p+cP!<<6*n,NZlUAtJu +$3Teu#7Le:"p=o."Si$%"98H'!!+J:!!`N)!!*3F!!Mfl#RCD2)ZU$DW2(1I!!!3/#QOl+$NLD3!3<*# +Uo==o!X%ol"t'EO!-o":"i,%fce>!!E<.!!*/"!!!9)!r2g$"on_$!WW6'q#CX(!!8tu!!*2t +!!<<(!!38!!WWH#!!`N,"TYEq!Wr/t#6Fl2!!&r!!Vl^#!WWK+!2or"q#LBq!s&B%WV?Jm!WrH'!3,_n +#6=f.!(#p!rrK/!Wo4l!;lg$V#g]&"TSZ"!!]8$!X8f."8;ctW;lo!rW;lq$O!9#!X&T-!!&gj +!lG#s!!K*n!WW8j!!]6q"p4i+"8Dj$"9SW+"oni9nGiaq!!**#!@[F;#Qk20!@RpL!!)Nh"p+cQ!<<6) +n,NZhTE#/r$3Teu#7Le:"p4i-"Si$%!rr?&!!+M;!!`N)!!*0E!!Mfl*s_iI)ZU'EUnJ\,!!W`8!!**. +!!WE'VkpAdV#UJs"7Q9p-ij;K!<<5t!!`W/!!!!384\-2j<\@DS> +!WW9%"TSZ*\H)1])W!?!Vl^#!=/\;!!NW/q#CX##R(4?!!iW$!!NT-$NdlK!!i9!#6b20 +"Tu:8"Si$&"Tn`."1\C7q#CU%!25"L\R*!!`].%06O;%KZ"u%gK9=#m.WMXU5+0!!3-#]*#CPZjls6!k>iDmJmFr[KHU=!=/B" +#6Fl2!!r]<[dX8$#6>25"L\R*!!`Q+!Y;LC!=/,p#Qb%>\,Zd7"T\N%!WomAaoDJEWN#Xm#71D7!!*9* +WV6At!<<3%!3)q&r;Zg#p](Pu!X8Z*"T\r,!!rW*W<*8)!!NB0p](Mu":"r1!D("TSZ0q#CX#"otY'"U5#'!!`N/!3-#&"p+N"#6>#4!3-#'!W2rs +!!WT,#Qh!("o&'&"p=o0"K;A(q#CX("98T.W;m(s!!WQ,"9A`1WqZPu"9AW+#6_($!!WK)"98G&WVHN! +#lt20!pSu!!3-(!!E:u!sJZ,"o/-'!s"9AT*#6Uq! +!!WK)"98G"V>1)r$3:>2!^W@ +Q-Glt!!0dQli7$ali7$blMpp`li7'>!:9aedCo;Ts1/+/ci=4T!WiA5]_2=+"p=i)!5%t*!7p](O#!!NE(!4f`9!!*9+rVur1nGiR$rVus$#5S?!!!'Y1!!*0+p&G<1!!!*$ +"9J8t%D'%Q!!3-(!5,lC!WiY7!;$6p!k>iC!!q?6q"Te]-!kJ@8n,O"(!kJF8 +"onf."U5)0!=??I%(WmX"9J`."1YiB!!;Wi#6ML;$NU>0"Si$&#Qk82!!WG5nGids!!<60!4r=%!!NQ/ +!kJF;n,N^q"1YiB!!3-#"T\T*!5#bc!!NQ/!W]7$p&G*t"TAB$WqQJo"pFo*s/Q%u!<`W$!!'%u!!*3, +q#CHr!36"u!<`W#!!]J(!!E9)!VcX1WrN,&!!E<(!!<5%V$I&)WMp"#!NE'm!!K;%!!`Q"!!WH(!3?/% +!VcX!!<<,$!!32q!!WH*!3?/#!W2rr!!WZ.!33("!r)`u!=&T)WqHDq!=&T)WqQJt!<`B*!!'(p!!WH, +!!E9%X7uZ"!WWE,!!'!upAb3u"TAB$Wpp&hWr;u!":"T#!36"u!<`W#!!]J(!!E9)!VcX(Wi6.%!rrN* +X/Z.$!sZF=lMq(iWN#t""7Q9nWN#pu#PJ-Y52!!WG%nGids!!E<.!3-+i!!NQ0"0)D,p&Oph"U5%. +!sAhs!!K:#!!*,h!!fG&"onW-":+`Y#0!=/\*!q?6q"Tnc.!ic5)n,N[t!ic>*"oni5!X/c2!!*>) +W;`b&"9Sf/"K87$!!;Wi#6Ln*#QY&."Si$Y52!!WG%nGids!!E<.!3-+i!!NQ0"0)D,n,Nq""K87$ +!!3-#!<<6&Wi=5C"U5&1!2ldh!!*9+rVuqrpAb3u"9&<#Vu?Ys!s\K"!2oer!!<3*pAb2krVus$#5/$$ +W;lo#!!E>t!#DO6!!<3(!#p](L!"98N(!3,_n#6Fl/!rr=t +W:p8m"p=i)!2oMjqu?_prVus$#58)tVu?Ys!s\H!#,qS&!rrH)p](c$U]g`#!!NA$VZ6c##0$Z&!!NG# +VZ?f#n,NTeVZ6]$p&G=%!sS`*"otIh!!`W,!s&].VZQ>f#6k84VZI&&!:^$m"p1\)!s\2o"Jqpp!(!!!3*#5J6("98N)#lpk)nGidt!s&N+VZ6nj!$2+E!iH,&"onf."U5)0!=,NuV50mi!sJ`.Une(m +!q60p!iH#)!f"U5&2VZI(u!;HO(!X#6o!rrB&!!*'%!2l[8 +!!1-bnGiR6nc8^7p&P$k!6t'7!6t$6!8$cA!8$rF!R@G=!!0I@rVuu+^@qU-a70-0g@>4DgA1gE!!(aD +!!19\nc/[1nc/[1nGiR@nc/[Anc/^)`ps*2bl@b8!!(:7!!(:6!!(XA!!1-DqZ$ZAa3+J8!!0@Lm/R0j +a6Wd+^$>Xuc0t`3!!((*!!((+!<9e"!!'_!!!(:0!!'e/!;-Xu +c0PE2`rPK,s1S1-!R8=W!7:cO!WWB1"LkQGq#L^&!s&B'%N;SI!=o87!<<02)R-Fa%KZV2!sA?"#I#*V +!WW6'"8Ms%YSmuQ!!*0%"8Ms&&uQBK"UG)0q#M9EV\9=>#QOo-#Qb"1^T@kK[($2<%_0%E!=&c=WtPX: +":Fr*#64r7W"':@!r2j%!!Wb.%LrXDq#L^%"V)$@#mLD*!#8,!=&r7!!O%:%gDb0#7:S6 +"V[pI"o/0(!WWK0#SX*Kq#L^%!!i`6';lK=!=&c0!!!'5[(,o4#6P&/!!3WKYjh`!YSmuQ!!*0(quQct +#I#*V!WW6'"8Ms&&uQBK"UG)0q#M!0[C-YI"U>#=YI=W@"TSV3!;-g=!WiK*nGig*\-)d7!WiK" +!!`Q*":#,2!P%Y"!W`H*rVur3n,N[o!WW50!!!>q!!3H,!!Kb2!!32k!!`V=\c;d5!!D`k#Ijd7"pY82 +!r2ft!q#L^% +"Ub^(#6k2+!WE*)!!!-7U8&+sq#L^+"98W:R1';q!=&l5!!Wt%$jQM.#6Fl0"U>R'%f$,1!WWE.#7m(0 +q#L^)!WW3%%]-0#!=&`1!<<0/'VFmr".p88!WrE'"9eN$#G2\ZPq"on_=!:0[j"9>6s!WrQ+nGifoW<<2(!WrT$!!`T+"9eu0!NGSh!W`K+rVur"n,N[o!WW5! +!!!8u!;ca$#64b&!!!'$nGidsX/c4%!WWAn!!fJ(!!WT0!!E#s!W`K+rVur"mJm@o!!rrQ-!32q!!<c3.%gE1A!!33+!W\dlQjEtjU]UT)V5q#L^#"p^;!$O$V-!g9j!+YR"!L&l@ +!!$m,!!$m+!!$?r!!$?r!!/Y$nc/`B!!)Tj!.j\@!.jY?!+,3r!N2mn!!.JKb5g/p!N*'f!!0mGli7$m +lMpq8n,WCe!3GJd!3GMe!R8LJ!!'Cm!!(R8!!(:=!;-3D\-B7Q[(3`W[J.05\%]5Vosb+5 +^9k9?\-'+F^:3jH"hD.RYe.RLYdsS>#.:tO\[9)Vpp^O9\@K/W^9[OD#J.CS[C3HVZMD!8]!o2W[^\-BOS\[],Q^%&T:]s+uU\[]6J\GiuB]s+uU\[]6G\-K=R['mBP\%;CF&%B0_[CW`P +\?ru]"TSZ*"gn@%!!U!B%KZV8nGig*Yn6s9!>H[^?SI!!_rn"q[jG!<`H/p](=#"T8<$)mo)7"pY24!=l1BnGi^q!!jLF&afW('t1L[ +!rrN*"TST(%C*Fg!!`Z-"98V*XJP]k!36$t!iV`mpo+7nri$("T<,,dW;`arWq`OpXIlHjW;rspWuV=gei +W3)nmor/%iV6-]mWV`XsT<##bpo+7iri#soXePTi!2][o!i)llpo+M!W2ZSjV6$EeW<]K&WMHGgXJ5Ni +#GnDuX/VYjW;*=lWrAt!W1U0]W<95oW2TitWN,`m!j&#mri#mtpo+LmXJMhjWMllnW=Pr-X/)bjUo:,k +WW`A*!!U(:l2V!fV$d>)"n;QtWhBk%!!*0)q#CF""T8<$'W(:!"pG)3!=PA*nGi^q!!X.-%J9_s!!Nh% +'F"O?nGie,TUuJo!<<2k!!/o1r;Zj$#5A0&"Tnl.$_%Rp!!`Z.#65."%0Q&!"q@(:"onc,(9.B?WN2g' +!!NK*$ig>;!"Yp%$NpG6nGib%RgT6"!sSH"!V5+J% +!!WE'!rr\%WQkJK"TSZ*"fJAoq4n%fVuELoUn"F[U]IiKXV#I1kVks3b"K@oeV546iVks3b +!i_]crhTXnV>6nlT;nT[Tr"Q`q4nh!WhH2]V51&fV5C2hQ`?^RW2QDiR]*(YU][HbWhB?f!2B:b#Gn5l +WhH,_V>6nlV50oeTqSQ+X!2BIh"/)ZcV>6neUAgtkTW4T[q4n7o +Unsc[TrOa\U^*ioV4jZXWh9*_#,7riW2,l]pnRqeVuELoUn"FXV#7"iWLTd`V#dKjq4n(kS>?.\!N2di +U^*NlTqe"VkB`ZTrP!o!!E9*`rP&u"fJ(&!WWGp!!fEm%0-A/!sJE"!0!q?6kTb[M+!<`W%!!WW0"9Amt%.O<&"T\f- +$^D/'nGjX2!"G>1"onc,VZ@%!W1aS!"p4i5!!3Q/&>Gj+!rrPq!!Wk!$NUA4#5A0!"pFl)!>VT +Z+dT[Z2M63\HgZr>YZ2(p8^9>8(c.@W_q7-a' +]tV4Ij-$eF\Hee@^:oroP-k%q#K!RUVl?0EPPM`o_Q:GKWLMk1q7-a/]tM[oIb1[s\I#OU[(`fIK[mWD +o=5+VKWVMn[(imA\HgZN^&A#Z!!`T,!<<\1\%DIG#Ih4O\@K5^[/%3B\%&lV\\#DZ[(3fZ\@/oVq7$[:\\#D^ +[^`gB\-B=N]=GG[\,a#6\-KRQ\%9,[\@MFF'tLc^]",>\\\#>\\@]&Y\@B,]]=Y?B\-':N[(-+H!4hj6 +"hCnJ\@K3F\-9FJ\@B)\q7$U>\[]/S\b3H7]t:b`!P#f<\,a)=\c]IL\%2=E!4i*?"1Y_I\bW`?\[]/[ +]!o,Yq7$[?\@B)\\$ijC\-BLU\%9/]](ic?\%&lV\\#DZn[Jh2\\#D^[^`gE\GiuC[(3fZ\@/oVq7$[? +[^WiY\@B*F\.?6\\@B/]]=>J^W=T%1!<]_0o`,0s!4BME\@_4>#/.:P]",8Xq7$[<\[o>_\?N[:\,s7P +\Gio;]sR=>#.q@SY.q?Tn$iD0Zin.H\@9*?\-K7N]sG5U\@V4?#JI@O]",D_[e[E7]",?M[K4(Kn@/\6 +[(*KX[']>4&A#6`Y.1sQ]=>D][^`lX]J_[CENR]!AoV\ad01[(ZII!k>ePq7$[<\[o>_\?N[: +\,s7P\Gio;]sR=>#.q@SY.q?Tn$iV.]"52Y\%0*T\@K,T^:46j!!`W-!<Ne#H=bsWN3"rV>7%pV5^JoWi;VlnYc\mWMuen +V6$N`W!B?$WL^/fX/Yilqksb!X/2qhWMlieW!AurXJ;bkWN5Qf#HXPsWi<"tV>7%pWi;tqVkpJknYc\l +WhcViXehlaW!KB'V6-;fW2clsW=u2.WMuqoWN)quWMQPfWiMkoW2]d@mVY?kiVOaNZV5O'`"f@idV5:*cU][NkV5+-_VY6eiV5^DhUnt$cU]@:k +VZWchUo*s`!2fan"/V]eVYR"mV50raVkg)aq4n7lUnsocUnad^U^!]pUo1,fVtZtkV4sf`Vl$0]V#7"m +Tr+`bV4sg]U^!NiVl$;bV>-hkV5'iaV59uaq4nP"U84T_V5U2fUlu2e!E-[Vl$3aU^*fpUna]ZWM/jX#Gn>lUnOi_U%+p#Uo0oeR\cgYVkg/cUSO`^W1g#bV5U5bUn=Q_Su8B] +nY?D`WM6/_Uo('cU^*WkVkp;fS>l%S#H+GpUSFQ_U%+o_W2-8YX.cHeV"^YpT;STYVkg2gUnso[Wh]a> +!!6`6c2"dQXM(RG^VS:[(a5q6gOB\[9)gXJrr0[KjOW +[(aGZWP82:#/8*Z_na",ppLL1]r8WYc+^'`[e$p4VS:Z]\]__3^!3Zjb5g/p"eaY*[*-#M]a(amMn[*CWMoX+#H5AO^;.",ea^UXhMf`^9j*a[f-9R!!WN*"9B,:!;QZs":4u,!Wrf1q#UR"#lXf-!t,)/ +$NpA.!=/i(!Wi?0"9&9$#R'r)!WWT1rVup(!!N*!#6b)."U4r4!;Q[4"TSQ,"ono/!!ET0!XSi,!s/H& +!>#Y>q#UWu#QP>5!!!<#!XA]/"T\i:!\$WZW\?te9#Ih.O\@]>W]CEB4[(*dJ[K3tJn[JY/]!_aM[_0,Wn[Jb8['mNW\*pg2 +[(*`X[(!XA\-KLO\@B/^Z+KM8#.h4R\?WNTn[JV.])K,H]XY>V\[]/]]"5DY]FDE][^riX\[o;[]"5>\ +n[Jh9Z+@QW\@/mA\-BOR[(*`X[.1X2\$ifV]=P8Zn[JY-\@hgL!P5`0\-TXV\@9&\[^imP\@]Aa\um+" +!!WQ+"9Au6!;QZs":"i*!X&c/q#UR"#6"T+":+u-#R(,,!!!3-)"98K5!<`B*]`@?u"qmc5WMlbpnYcPcX/W0!W;rsnW!99#V5^JoV=:DfV5^DnWh?B^ +W!B,sXJMbkX/5QhqksarX/DejXJhrbW!BE!V5^MoW2]dG-WiN/!V6$YqVlQVoWN)qrWiMtqnYcYlTW5#jWMT?f#-+VuWN)qon>HPfWMlhs +TW7O\#Ge<"V5:)jV=CJgWN)qrWiMuqWVrgtSJTQO"p4i.!=])1q#UR"#6"T(!snu'!W`E.rW!*(#ljr3 +"9&9$"pF`'"98`1!!!'#"pF`'!WWN/rVus'"Si*("TSQ,"oni-q#V?9!!*6-!!WE'":##2#64`+!rr<% +$jm"1!WrE,!"/]*!!`6##64o2!t!WWH( +!!$8dTr4`XUoc +W1BibUnjaZU^!`mTqnT_U%"i^U84T`Vk'dVU^*ThWM6,^W1s-apnS7nVkp2eVkU#aUo=9j!Lago!.k3& +!.k4'!!Sq=Z+[9Hn\#1)_n!XkYHc+B]`u6RSZg5MU@Go%Xf/G:`kRYUn\#1)^!WdWWPYV(]a(LQWMlcC +]r(>5#LAa8^gbJ:oBrW(=G#6>,3"9ec*!VcWu!WrT-!u"p"c*!!NB- +p](g/!W`9+"98K(!!!0*!=&Y>!:0[j%fce6!XK#3n,NXo!!!!WK*!W`B("nr!"!<<*%#4DNr!W`K-!<`Jo +!!iW-"TS]-!!NAn!!`Z-!X/Q-!Wqll"p4u4!!<3'mf3Ip!rr<%p&G9u!,3 +"onW7mf3Om!WWE+!!D`k!WrE(!sS`,!Up'o!XT)4!Wi?'nGiOirW!$%!<<,3"onW3mf3On!s8N3!!2Ti*s2KE +"on]*!!*'*"on]."UG)/#lk#9"TSN+"TSQ-"n2Kr$ig83!X8f'!!,3"onW3mf3Om +!WWE+!!E&tp&GO*"TSQ-"Tef.!)2!!N?'!UTjh"TeZ)pAb?u!!39'"RuHs!s8N'!sAT,nGiaq!!36&!!`,sq>^^(!!!*& +!!D`k!sAT)"o\K%!V$-n"98Q+!!;lp#6P&.!!t!!NE(!X&K+nGidr!rr<'"98Sp!!WN*!WrEMU'!!N?&"98E& +!<`B&!X&K,cN"+M!!EH*"nVcs"9\f.o`,:$"9S]*!!36*"SD`s!WrQ.o`,'q!sAc#!!`N)!rr<)!#1"on`*"8Mp%!#;7!!<<%!!ru4!!3<(!!WE+ +j8eQI*WlHG!!30$"onf-!!33%!WWK,!!*<)!!*0+!!*0&[/f:g*squR!;!^s/!!*'("TSQ'!<<9'!Moc*!rrH(!h@!!NB-!!!0&!"&c- +!7!"Ju7!!<6'!!`K*^&[d*$ip>5!rr<&!!33/!!E-!$N^\;!!WE'"on]4!j2M'!t>;; +!!!0&!PS;rW!<:!!3Q5!!*0*!YY;rW!<;!!3Q4!!*0*!2$NL/7!!WE*!D5 +!!WW-#m1>3!!<3$"p"c(!WrH,!sY1oJcLB&JcLB&JcLB&h#Otc$j6P1"9AN*!<<*$!Wi9#!X8]1rW!3. +!WrE)!WiN/klBQ?%0lt=!WW9,!<<3'!=!WWB(!X/W*"UY53!!"9\o5%fm7G!!E?+ +!!`Z1!"B/5!=^]4fQ!WW6)"on]* +!!*-$$4-b6!<`Q+$ig88aT*%Z"99&7"9J`.!!N?+!X/Q,"T\l>"oSE(&-2n9#ibpQ!$;:H!=Af>!!36' +!!3-#!sAT*!"T_C!WrK,!!!7!X&N(!rr<("98K'$kE=?"9Sc-!W`T1$bcVq!"]8@!WWH*!!`T0!!E<, +!<<<%!!!3$!!EE+"9AYG!:'Ub!WE'<"9A],"UG58!!E9+!rrT1!!!6(!!`K("UG)1\,c@*"p>&/"pP&. +rWEB+!X8i/#H7\6!W`H)!<`H("9A`1!!!N0!X/W+rVup$rW!**!=T25!O_tB#m^M2"98N-!"8o3!X\o- +!WWT=!<*')"9AQ)$3L\6!6tQS!Wri2!!N`1!!`Q*%fcjQ!;um6$3C2."U4r/!<<-%!!iW+!<`Q+$31&4 +aT*%Z"98l2"9J`.!!N?+!X/Q,"T\f8"oSE($ipJ5#5%uO!#5S>!=/Z7!!36'!!<3$!sAT*!"0;;rW!!!*)!s/K0!Z;!J]">0a"p;mG$P*>G5!t_uP\$Q_I!!ik;!9F2$%0-A1%KHY>!X&i1!!*') +!sJZ2#lk,2#mUJ4!sH7:o)Kg5!<<9'"T\T(&HW=A!!33%!W`W3!!WW-"UY83!!9A)!!30%!r`H1!"/c2 +!<<<5VuRYV5^Dm"V1V8"pP,2#42EP!$24B#R:J5!!oR(U8eJ%"98H5!!!-1WMuhm%0-A4#/(#l +!$)CH!!EZ0"pb85#QOi*!!NK0!!``/"p>/7!3!#u"B +!WrE/!!\So"onW0!=o/1!t;!%UnJ4t!!WZ)!6tQP"onZ2"p,&4W1p,frVup,`;of9('P!E!1j`%!!+!!$R'!!TR5XIB1i]`8/ZTY8aq!:KmfP4ekXZ,"V;_>j_+^ob/\pAb;o]rf$B +!6Y?E^!.k3&!.k4,!4`(?"TSQ)!"Ao.]"#EU!<<6'rW!?8Z*Xl@#R[oO"p,,4l2]]A +%0QY7!uJ5R!!EE)\[Vs\!"98>[(WmJ&-N%7!#kqE)6gXV!!O"B]Z:'p"UY7?%LE+>\[i4M"TSW/!5#TD +!!rY:Yr;[h!!!$'j8eTJ#6Y#0!X\q>\GcI2"h2#B!r`0.%'d/I!sf7?]`nNF!OVph!!E?1!4oQ:\/,JP +"9ei."TSN(]=,/[!WW6$%0-G2!!U(:oDest!!!<(!#Gk?%''F@!!"UbA;!X/`5[1<6E$NUk?!"8u<\@;aQ[4;7Z!!B\1%g;q6!rrZ.!3<*# +"9AK*!WE'-$)"+#"9o.,XTeh4!V6D*)"TS]9 +V6%`<*sMuNW=&q2#-"U0!!N?*"ot["#64u/WhCpD#64`)"ml;UTF_%#Q_X>g].HY#QUp$ri$\>!!EH-!X8W)!ir/oWr`8%!"&].!rrMF!:'Ue"onW.rW!`s"f/!q!r`0.$D!js!sT%(W$C(Z$!!'!!WT,!!NZ2"rICF"U:Y.!!il3%0-A8"::p$UnT"5!WW>+!!:$@e+`nDO.uRQ!L;HT!!/5!r;Zl4 +^!$KH!!8MBW;$>nJ\M'_!LqKU!!'b3!!0gLq>^Q@S,Ee&+*WZTO!YMEF]Eb[N +"U4u!WWN-!#QOk9[Klp7!>#7CYlG%2!!VB_m/R+mrW!fBYRCXI!!*J8!"/i/#.V5J +!!*'+&?NPG$FBfp!$;=D\./KE"1b]i!#GV@#Qq]L!!NN+\[rCY!!WN*!X-4;oDfs6!X8Z**ruDL\@hqD +$31):!!!D;[K?R4"1G`J!!!M6!!*-%%0?M22mKjm*<6)N\/#+D!#Gh@$j$DK!!'O>\,ca:!"]/E!R&!!<3%"9bQt +#/L9BWMHO*RhD_+!!3-*!P7X/HR1 +VuR&,!so#/'`\75W<3/)"oo/B!=o26WMot%$NQ]u"on\5!$2.H"To3sWMg#lU]gr'$NL80#,J1$!!*') +%%!po#l=VI!"T)6"9Ak'VuQo"!":Y>3$)%>*!s&V%W!*/%!!`q!W5*!!WP%T-OCL!!WW0Vkj@s"TYBs$jH\9!rrE+ciE&**ruEI!<i!O;\/ +AC\p)J[tRV!P-)E!!$p;e\M4dVS`31!N;a;!;$6p^6ln?H-?!`!L):8!!0%4`rH+[qZ$Yr^AIs3_l3G4 +!QL&n!6kKDJboEIVu-Mq\\e4D!H6N5!6>-?\buL/^6ABn!R&4U!!0gWd/_Po!iE0Vp](?/W;Q\sW4p7O +iW'";\buL/_S)oKp&G0)^9@;3!Of93!!.E#quF8-*ru?C"TT29!!0dC!!*9(#64o-[(?; +"6omA!"&k=\,lX3"9JQ']>"=M#64b7\Gug4!Wi?)!suQJ!!*E,%fumDaT*Cd\@2\C!Wi?,!4oZ?!X/V7 +\-N'9!<fB!!3-%!4]W@!!NA0])Vg4!WW35Ylk%/[/f:g*s9%V!!NE( +!kYfI!"o85]!qbE!!!0'\@)qM#lk52!kn[,!$21D!!!P:\@;gS[L*!;!=Af-&[AnN!,^"f\F(!!<<'"TYR%!!7"0/=$"TSN+!NDt*!XA]0!!C7AlMqt-"98E1UoC$3[0$!WW<*!WW4u_uT]8 +"pP&-VPO7rrW3K."9YQt!!*?*$N^I-aT*CdV5+:q!s8N-!2lXn!sJ_%U]pf#!<,!WW8p!8IPr +!s&T."/Mjr!!<3&!2QOn!!N@rVuQf!!rr<1SHJop`rOQg*s8>B!!NH)!iM^u!"Ao1Vka=s!!!0'Un\>" +#64r."4.&-!$21D!!!D#V5+;4VkaKlVZ?u%"Tf#5#,J$q"9S`+#c"1(XT/CN^%hX/VTnr;!0=qr!Of]A)aT)=TqZ$Z?VYgDp^pa+? +!OeuU!7UuPR'F("\Z#<(!K5"q!!1,u`rP-"!J//c!!0m7WW;hp"b+_)!3aH=!!0X=qZ$YrYPeI*!!9[? +!rN$-!=lO>!sAZ,"9S_6%KYeohuE`XrW!`?!!3<("oo#2[/L%6!<<0$ +!4W@9#m(),#1!8`\?rgI!!*-$$aRAE$31@A!!!'#!WE''ZjQjF!9F1a]=%eB!X&E%(:^sV"98P6[L`KH!!iQ+\c;dB!!`Q,^&[I!!k>`Ar;[?2 +"p)XoJO&W<2tt +%06j5!sA`.!X&W.V$d=p!7q2N!WE',&u5U0!<`B'"9tM(^]4H;!!9,+W;lo#"TS`,#c.G"$ip>1!!&u( +!!`Q*!!^aL'WIq0!!!$$!!o="!!iQ/W;lo#!!3'!#,DM)"onf/m/Z5J"9AK&"9AG#('"C=!"#U(!!!$- +V#pi'!WiK-"/QA+]`?gf"fnI&!'$igG5!lk<#!!9.!!rW*0"9nn- +U^7#)"p4i*WrN;)\,c:($k<7;WMp%&"98E(&#l-#"f\I&!!*'1!!8*!QG,g!!T^Q$`r,l^N/WW;\l!P,Z7!!1-A +q>^N=r;a&%!k>`Ar;[?4$*1Z`?!!`W, +!Xkn+^&A!@!<<0$!4]m@"U5:6])Vg3#RCG2!5#9<#.4Hm!$8MV])W'9!!<;5\-W6=#e1EO!!WN*!X,b\!!!-% +#/($&!!9[?!rDs*#djg9!WW6$%fim[Y5eS*!"Au1%(HfL!!!$(!!!E9+ +`W4uu!i`.#qZ%!.U]pf$!!*'.!2:F@!;Z[+"98N)$)n=7!!!$(!1V#USt!!<5$TEkN"Tqq_h!rrB$!!]Eb#m()0#5/&O!$2.B +"VR?$VZm,-"9>3n"U53sVuQeu"pP).!2u.f#0-_m!$7i0VuR#%!!<;"U^$u'#,DY3!!WN*!sG/?!!!-% +#1!;&!!8sl!rDs*#,)2#!rr?%$NQe<^B!d(%g)e6!=GV1!WW3$"p"^n';>L+!#26)!WW6$!s8N,U]pf# +!X8W)!h^U:!<9V+!!-fYq#CH?Bu9oOl"HG!!7hebPV>@WP8?3!GTgS!!1>Yc2bue!hHF;qZ$Z2\buL.[eTn'Mp_UP!<9V*!!&qm!!&5' +!94%ZYPA.uJ#WMA!!0X=q#CDuq#CD]r;a&%!k>`AqZ%#;[K?a7!`Ar;[*8!499:!#YbFrW!#5X:qf#WrN5+"TSYN!$)$10H!Wr\+V$-o#Wi5su!rr?%!!9.$!!3;h +!9F1j!s/K*!"8l.!=Sr0#-4U"!"5m)"9ec+!<<9+V6%<0g]/CpXITRr$jH\7WMp%$#-"U'!"&].!rrM+ +R1'3&!!L:AiW'%ZW<3"u#Rpd0W;lo3!"&W)!j%h$[fH7)%g2tK!Ml^q"p=r,!<<>*TUu2fWMoq!!<ee@%flY1!N;mr"p+c)"pP('W5Sc7!!E<& +!i2Xj!#,P;!32mt!!!$"!rr=tVuQo("onbO!$%o.)$10H!WrY&U':Z!Vkj@n!rr?%!!9$t!!3;q!8IPa +!s/K*!"8l.!=Jl/#,n9q!"5g$!sS`+!<<<+U8l04df:GcWL=%l$jH\6Unn7q"f8*t!"&].!rrM(Pm[^! +!!COIf`2)LU]UJp#Rpd-V>pT0!"/]*!i_Ls^](SY?,`!#;<*!WW6$!t>7( +U]:H#!!3<2!N;=mXoSL4q>^QOW;-DoW8,8j!R8FU!!0dXc2d>6!OfQ8!!1lhq#CH/c,fqdbED]%!Ni=" +!!1-Rq#CH0h"h#j!!0s0rVuuSW;-DoW8,YuaoDLVeUIAq!P,K7!!0IAq#CHGC"!(/!<9V+!!/J$q#CHM +Do_q>!!/J-q#CHNOfJKT!!0X=q>^Pj^%hX/c#*F[YQ+a7\,uR.%0F&H#Qt2/!!39/[($2%!8mhW"o\K0 +]!hhD"T\T'"U29B^]4K!!36&!kn[#!!9[?!rN$.!P>oE!X&N(!s&J5\c`)#VZ6l(!!3?/d/Y3g"on`0"98W-!33($%KiN+ +!!!*$!<<*$WMon'!!_cij8^2%!!EK+!!*'%!skQr%06G2WMKh&!WW3%":(d&"2+]i!#_T2$j?Y3!!NA& +VZ@M5W2Kq)!m/RNmU]:T%!^Q"[.s\& +]rAdI!PlSO!!/t1q#CH&YPJ7>!!.hKr;Zl,S,!$bS$pTBaoDI>^%q^0^o@;5!PPW2!!0@Adf@_ps1.t+ +!R8CT!!0dNa8k9$!RACS!!0OCWrVem!P,Z8!!1QWq#CH2_YsP>!!9[?!rW*0"9u9G!<<3'!WrE']!WW6$!!9a@#Qb#."lo[O!$;=H!!s/N+!!0^>"pD=6 +j8]Yn!!!9,!=&\9\,ZO8[CcD<$3L>4!<]jD!s/K,]E%6t!k>`Aqu@-9Z+BuH!t>;<":;HGXoJG?"98k; +[fl[1"Tef3"15Y3!"QNK!WW6$$NUR>\c_`9!!WK*!sY^)!rr<%!!<3$WMp.*!!*3'!m^ie!WWK+$N^=- +U(.A-#H=[&!!<3%!!!,%W!3>)!XA#ljT$A*"9AQ.!#6Y:,WO;g&!!O&:$)OR' +rW!*'"9eq(Wh07pWMoq!!<!RUne(i!"97+VuR2-$3LM9#G@s/!:Tsl'EAK6U]gYs +"Tef2"/2We!<)s.Une%l!<c=!!<9&#.OZErW!<,!!3-#\@;M>!X/YO!#5VB#lt)- +!X/V:[f?I5"Lkl@!!3-$rW!)4\-;p7iW/BH!!<-"!!W?%!joYPrW!0-#Qb";])W09!!NZ/]=ItD[/f:g +)$0dL!Wi?/!4fHJ$31@AZjHd9"TSN-"Ltu@!!3B,#/1*'!!9[?!rW*0!G!W`?(!2\t8s4\@;S?!<<*/!5>rH!!!0+!!N?&\@SdB!i`.#r;[!&!3<.##Q4W+#6:g*!!;`l +ec60c!!&st!!WK)"U4r,WhdE1!s&B'W;rpr!!EB(#,nR$!"/f-!rr>#W;lr#"p3*N'a+^G!%.WrN48!8IPl!rr`2 +!WWK+WML"/!!fHu#QOu3!!!0*WN#js!X/Z1`rP*!!i`.#r;[?/!32t(!!N?&"T\h,WWiL6!;HO'$3dN- +!WrH)!W`?)V5g-f"f\I&!!*'0!"&_-W%+VuQns!6kKR +#QOk#VuQu&!!NQ,!2lO0!;lg"!<<1sV#:8r!rrP$Vu?Z(!<<3%!2ZLl!`q]T8^Sf?Wn,NKt +\bZ:,]uTpK!PPbS!!1BIr;Zl#^%hX/a1_^QNZ2"A#]taOHYQ+a7\,uU/%fuaC\c<0>!0\@;M=!W`T/!kSHBrW!B.!!3-#\@VeD!<<**#LNMd +$N^;9!=8`+];lAC!X/S9\,ZL1!!3'!#.V8H!XSl/j8eQI*WZ!W]jD!"Ao/!<`Aqu@3.\@2J?$3://"TZ*B +!WoS+!!3T0!4]N=#m:5.!s/Y9\"#WWN;'!!!3, +d/Xme!WWK,#64b)R0j'!"ot[&!!!*$!WE''WN$%%#6=qo!9=,$!U&VuQf!!3<+"$31)- +!"&_+WrN48!8@Jp"onf,!s&V.U]:Gr"KJL&"9AT)"TSY(WW<8("TSSD!9*t[WMoss!"K(0VuZr*!Bq"0MY(\bZ:, +c+j&S!Pcms!!1Biq#LH6!OfQ8!!1*Hq#CH/c,'G]c#*@Y!R&1P!!0IHq>eS:!j02Mr;ZlC^\Ij1 +^Wk%(_>jVoVYpJq^V]dH!PQ:t!71`G\bZ:,[]T?*!PYYV!9=+\[(Z88!Of,2!;-7!P,o>!!0gI +rW'/&!k>`Ar;[?1!OoQ?!XJc+#Qb(;[fHTr!8mhf!rrW-\[MV?!)W2Tk#"onW-!X#F#!^Pq^%hX/]sbfY!OT-/!!048q#CH/WVQV8!!9+6^&A!4 +XL.d'!OSrR!5ed;]qYE)!PPK.!!0IEdf@_ps1.t+!O9Z?!!0gIa8k9$!Of];!!1!NWrVem!P,Z8!!/h/ +q#CH#^]"5T!:[K>!!39($ig>3\@;P>#6Fl,!k>lD"TSf6!!ND9\,l`s!8mhf! +#6t86#e7AIY5eP2%0-C<\c;a2!!NE2!4o\>!#Q%D"U"f+!X/T-\@MYA"onc,!4fT@%KHM5!i\ +n>RH/!sAW2!!(#6=kG!;ccd!WW?%!#btA"onb(W<35+!!3-'WMp(+!9!2ZRn!<<*'!XJe)Uo==u#QY)3!!*-;"T\b&VZ6c&!!E<&VPF;%!!**%"p1]u`W5PB!4M\'s1S7/ +!O9oF!!1?L_Z0_Na8#]9c+_I'n,NL'[e]t)c*-pC!Pcmt!!0::q>^Q1^\Ij1VT\f9`W-%aVu?YsZ-E(E +!R7mp!5njZ+1AI!"/c.!"?6D^]4cH!!0O> +$N^M9!=T(?&\A#C!<<0&"V7o?*!cQI!s/PN!$):J!W`Y"9\]8!49B:!!*?,_#XJEo=,hI!WiB&!!NG8\,ZL1!!ET.]"%kB!rr<'!!9^B!"#n1!P<]=OsA(]j[B!!30'!!*/4\cN!9#lju8[^m"O!XJ])!sl9E!Oi%N#QOi-!<<*'"KA3t +!<<6&$37$'"p>)0!!NK0W2K\'o)R>A%KZV;TW&>&!!iQ+!"#I"^]4H@!!/o7WsAb2"T\o4WN-"!!<<0' +"Uq,o'aFaB"9SbQ!$)4I!W`S+!!EH*!X&K/US8/#!s/H'!!'*p"TSQ/li?)H*X2cN"TSc.!sSi1"/Mrn +$37$'"p>)0!!NK0W2K\'^&[^("W=&:Unk$cW?A4AQQQ80"pFu3!"u'.!!*9."9nk-W;m>,"9\]5!2Zap +!!*<+`rPu:n>RH5!s8Q(!!WM)W;lo"!!EN,X/Q.#"98E)!!9.#!!g"6q>_$,!!*,$WrN/'!!!Q1"feT% +!"T/3"TSW*"98H(WiH1(!XAu2!=Ga)$j$M7rW!$)V5XL)!$;LI!!<6%!!WP$T`>)n!rrZ.Une.s"TSN+ +"9kTs!"/W(blA4T!",9n$NgA8!!3--TqoX-qu@W=!!/gm#m(;7!=Aq*VuQeu!!36+$_Nb$"p+Z)ci>'j +"Te]1V#UT$!!39'$)!mu"Tnf+!<<,!Sd#/q#k\2P!!ic4"9ni2!^QBZ2"A#S'BC^ +klC7a!3c1u!Pbo9!!1!Oq#CH0_oMi=!!0s]q#CH?a/]45!!0mPq>^Pq^\Ij1U;$U,aT1f2*#;=!!BqP!!!$$!!LXK*s2KE!ZAKL!!!'#\,Zm=!kna:#m(Y=!X6.9#SdLC#il!R!$24F!"?!rrH*!Wfk4$31,-!=&\3\GuU7 +!!!6(!4oND!X/Q4]`@[)*XVrT!!!o;!WfmE!X/Q2!!!20\cMj;"9\u1!kP`BYQ+\0"UtG5]!N+O!!3?+ +!!osAW;mD2#64`-"98c/!kPfA#QXi*"ou0!!!5%!35tt'EeC9"fVV+!=T#7!!KA9!!!$$ +!!LXK*s;QG!u%X8!!!*$W;m2,!iuM)#6G;7!X5S)"qLk;#42EP!$27G!"#R'W<<5/!X&M'V5jRu%&F+- +!X&W-!!T2-"2+^,!!`]5!sAT,"U"Q#-34)O%fcY8"98Q+!Wf;$#QOo+!,"9\r0"087%[fH7)%gE1;"087/!<<0*!rrP%WMok."9ec* +"p=o3!!94!!XA]-%fue4WM'Co#6G#/"Tk^&"NLN3!?D=N!!*00!!&gm!!30)!WW<2T`tJu"9\c+#,)G- +qZ+nA%gE""!!<<+#QOk#"2t9=!!NE(!!]6sr;[N7!!!5!!s/K3!XA]-W=o73!-i!!<<: +V#gVs!s#+s#m17.!rrQ-$ipD5VZ?u5"TSc#!8IPq!sAT2USjmj!=Al1!2lQi!!^Pj_YF04_P5*O +j8]4uS,!$bS$]3ro`,$0WVQSq\VU%]!R7bG!6G62!ZqLG#Qb&.!!!S;\cW9?!!NB*!PPoC!WW3%!k,cC +!s.ZehuF8j!"T&E]!qeE!Wi?,\@VjZ!"Au4#QV?I!!!*+!!r],&\>IQ&-*FF"hV5D!t>A5!s/MN!$21A +"Tbn4"9eo2!Or12!!B^B"TT8;&-9/J(]XR:#NGgP!$;7G$imQEZipF2!"f4@\[__C!PPoC!WW3%!k,cC +!s,e0qu?p'!<<*#"T\?"-NaDM"Tei-!XA`0$Fg0<#RCdI!!330\,lX3!$31,-!Pnd8!qZO9 +!!ir4#QOo/!4f]A$NpM9!WWM:!!<3&!WW<&\Hi0:YQ+Y(%1`jI[K-U6&-)k:!jiH:!!EB)"9J])!"]2= +\@;YA"TSQ'!YW'F$31,3!"&]+YmpiU!:^+4"9Jf1!s&B%%&Ks,#QXo/!<`G(V#pf"!!<>"WrW>(o)RAB +%g2k@!"Z-0!sAZ-!!T@&"Mk'@!X&]-W#D`;!!EH*#6Fn*W"WrW>(^&[a) +"p=r,!!*6'q#VoH!rrK,"TSW.!!%0-Y6!rrAB!;ccd!ZqCI#QP&/ +!X&M&WW3;-!X/W*#H7\+!!<<'"9>D+!!9Y1q#Cm*$jcp3!9s!u<+"9JZ*#,J1"`;oi:*s)QL!2QRo!!TqrD&!<<>s!8IPr!X/o2SYr.b!!3-0!2ZQi!P5>4Z +^&7p3XNgVB!N*-t!7(WHOisX!!!9jJ^A\*5f;SQH!N=Vp!6,!=^&.j1\buL.Z2"A"U='%g!!0gYq#CE/ +q#CE/`rP-"!3,bo!2caro`,$+[eTn'_"ds1M#@=a!$2=E!rri8!WW84\,lX9"U+l,)S!9W!!**#!4]NW +!U0UB!"K26!!iS4\-r?@!Xo7>[(lYN"9JQ'\@MYD"9JQ-&HEBT\c-j!W]n: +!!*0'!"?@D!!!>8ZjHd5!sen?[0$d<$N^@i!:Bge!r`0<]sIb@!tYV:#.V>J!!+"J\,ZL0!<<,0\/GCT +!;um&!XSi:"TSZ1p])WE"pP&/!sAW0!4E48#QOi,])WKH!kG`>%KHJ=!4KK>!sAT-!!9k7oDf:2!!!'& +!!NB-\?l8CrW!H?!!fpB"9Ac6!!!!95!!!8;\,lX2"Te\8]qtcF"9S]+#71P<\@;M="TSQ4 +#QVH@"pY;9!!!)1]`ADJ!$2=E"98i6!rrA%Vucr("U+l,'WJ&3!!**#!3)q3!V-6B!"K26!!`M"W-j!s#D*!!*3(!"#V0!!!8'U^-r# +"9nk-V$%&+#Qb%o!9F1\"9&9=XJ>gt":PG7#-"[+!!*e5W;lo!!<<,!W>#BH!;$6r!s\f6"onc0p])WE +"pP&/"9\`/!2Tr%#64`,WrNY5!i`!r$NL/7!2Z^r"9\].!!:1@lMq>%!!!''!!WH.WMKV#rW!H;!!T3u +"9A]2!MB+!!!$#!!&gk'ES(2c2\=Y!<<<(Tqi"q"Tf#7TqTC)r;[lA!WW4r +VZ6l'!rrN7!2udq"p4i*#be'q#6=f*!!^dM*s;ZGW<<2%!s/H0V$?u##Gn+"!!!**!3)[p#m1J8!VQNK +!!!-#!#hi1!!362"T\h(W<3,$'W%T*!!**#!2QG*!QG-*!!`T2!"/r1":"W$-3XSX!!36*!p`%!s/K-(^C3KV54.l"TSQ1"otQl"pP52!!B't!=#\,!Pc>D!!0@8qZ$W, +!3s??!N3L*!!/R`blI55!PQPL!!1?ZqZ$Yo[)N(GebT7GZ2FY'[&3^#!Rm_;!7(WGgSXfI!PQt\!!0@8 +qZ$Z-Z-<9h!!&tp!!(:B!!0g4qZ$YqcI)^>!!0Htq#CGg^A@m2^7`LHirB,1[eg%*_ptaeo`,#t[.s\& +a,Bfp!PR:e!4W"M"98W0!#5M8\%<"M"TST6!!!A6])iEN!kYiI!!!Mo!8mhf!XJf,!W]p@!$d]sP/X\[]/\[(65S!!ED9ZjR!F!4oNG +"oo#5iW/BH*sDWG!XQ'E!!!'%"h:o@%1W@<$FRJI%1NBN[0cm6%^c<8!!NE(!<<0)pB((USFjgW>)A/WrNb4"9ba##QtG6X/-+,!!i_n!9F2&"TST*#GA1! +!!36+W2'J%$NL/4UoFM($3R<(#QOi4^&[d*#6Fl+!!q>_$-"9Ac/TW%qs +!!3-+Unn?r!"T55!s8N1!!*'"XJl1&!"9>>!WW;%Ws&J'"98S$W<0I-*WuHI"TT)7!MlV"!sJZ+$NL/4 +Tr8&#$3R6##QOi4quG"B%fuq9!!3/"T`G/o!26@m!Q>';!$;7K!#D9$#lk/0"onW.!2ZUo$3U[/VZQo& +!s/Z/!!CRJ*!*%3TVnW^Uo0oa!##>8"/hh!":>.-TaCu(#m9f"g]/E"!!33+SZ)Sh!WrV%T`PQ/!!!:u +VumA6"/qn!!!!DI!:'Ui!WW6$!sJc/q#^Nq+9MZJ!WW6$T`tPu'*8C?VuQo$!2ZRq!WW3%"/he("pE-M +nc81]"TST.!s8`+!#DK2!!7W1aJ$!!fkn,NKeQ1t=[ +]u'^J!N+,]!"%AGQbU8F\\O]Pqu?cBVYpJq_P6f*c2[m+h#%-Q]pSZs!N3s9!!1*;bQ,]a!2fSm!6tHB +!PZJK!!1!&dK%Vo!Pl_N!!1?6qZ$Ydc,ThE!!/"dqZ$YoU8e4d!!1Waq#CH?_YX<6W3lL'aT1i3*X)TG +"TTXL\@/uY[(NF]!<!!We?[^N[Q"oo)CklBWA%gi==$3^D2"hM(Q]EA39$,HTN$*CqI[_0)]ZjHd8 +#6bS;"9?$?\?lPB!!EH*!4\?rgIr;m'$!X/Yd!:9ap"p4l0(BD%T +]!T/Z#Q=]4%h/LC$FmOQ\-`E?%1ffGr;['.!!331!!*<"!#Yh?!!!0&!!`P7]HuWMBb!!!EH* +!2!rrH. +!!Wi3&uhT/!X/Q6!!*3*!33!u!s\h+WW31A!:^(2"Te].!#V9'USjo]WKnA%!"0,6"ph$"USJ/"!"',2 +!6tQT#QXu4"TSW.W1g,f"98N/`;oi:*!_h1Sti6[W1aIs!sSo/"9>?nV4e+o!!EH*!f +Uo0k!rW!K3!!!7tV4jde!WrK*!!1_W;$>p[]-77aoKN`$,+W;]uR(r^"SPF!!0:1r;Zl*YL*?s +!!/:cp](?.Q2L[`Q+b0;iW'#7Z2FY'Qe/2:o`,#tP5#"X`jG[E!QNC^!4W"M!WW9'!!<9)!Wi?'%KHY8 +!!!E-!!3<-!WW3/!!!/e!8mhe!WiZ0!!3?)!!3-#!XK(H!!<]2!!rQ("Tn`+"TSN7#QOi.!!SD!Wi?*!!!<-!!N?&!nM]=PM^\%&dQ!!NE("9AT&\-)j6!!3J>!<*#k +!?V:F!Y,8@\@B#[\[9&V#QOo+#lk,/]"#8]!!N?/!!9A)!!WK)!!W?%#J%FW\-2p6#cRe/!WWK+#m([H +rjWENZFdUH#6G23"Te\6]*>XR!!!'#"1A1N!WW<)!!E?+!Wi?($NLA6!!!<*!! +!WWB(!!`W,"onW(!<!!WN*W2c\p +!!!'#"L\:O!WW<)!!<9)!Wi?($NL>5!!!?+!!0"TSN-!rrK)!!**##64r# +!8@Jp"onu4!!<3*!!N?+!X/W.!!!?+!!5t!!iQ."6]`:!.k3&!;-i--JcLB&rW!*&!X8Z*(]FF>"98f;!!E=f!.k3&!29Gs!uV(C!"A#jJcLB&JcPHD"T\Z/!<!.k3&!<)s-!X&K'%&Bl%!!!;'W!JReJcLB&UAtP!W2Tgu&"oue!.k3&!.k4D +!"Au3!!!D#V5+(k$)F@'S,e-@JcM5>#H+An!WWe&W:9k>!.k3&!9X=`R'F+!!<9-r!.k3&!0I6_^V-iM +!!/"pq>c*Ih#N$,LB%G[!!'G>#lk.!"8i3"TtP##6:P(W;rou!!*-$!rrAk!.k3& +!.k4C!"K,3!2Bu'"f)-p"J)Ik"J,UF!.k3F!#Ge=$NLA8"/,]!!20Rm!2ZUo!%KO2N!fI&1!.k3W +!#>Y;"on_7"V(P5]=%\?\?$YU!El$NR0$!hB=C!.k3E!"oA7"onb$"Ub>2 +W1j7mV3_r%!W<,r!.k3&!.k48!!&;_!!Uc4!!(fRV#Z)IJcLu7!4Mh+"jNtG!53=J!.k4,!.k3,!!NK+ +"M+X7#nR-E(]XOG!Y,9j!.k3&!42_A#QOo-"Tc7;!!NG9!X/c.(]XO:!WWAc!.k3&!.k4M!"T25"KMV) +$j!.:!!!B.$NcRnJcLB&WrNn>!!36+!NZ>&"Ttb+"pP&?!!!$$!!M`jJcLB&JcPHD%g2n9Vum#.!ML/, +!"/i9!hKCD!.k3F!#>b=!WrT,Vucr&"/c2("oo;:!!*-$"S_tK!.k3&!9jI`_YjH7R%OG2!.k37!!(@D +!!(49!.k4,!.k3,!!NE0!<<*##m(.;!#5M7#Qb?l!.k3&!4)Y@!s/H)!!3-$"ou4;!!rf/!t>A5!s/Md +!.k3&!.k4M!"T,9!<<*#!Wf8#%flY7!sk.lJcLB&WW3e;!WW?'!rr?+!365b)1$3U>3!s.lkJcLB& +JcPHD%fuq9!!!$$!Moc-!<<<+#bD$J!.k3E!#>Y@W!.k32!!'q1!.k4,!.k3,!!Nf3!!3?2#m@]K!rrH2"UY9h!.k3&!42_A!d!.k3&!.k4M!"TD:!!S;!sA]1!X&i1WLs@t!<<-*!<<-##5A1M +!.k3&!9F1]WQq.:JcLB&NrT47Q1b30!8RX,!/COW$j?\4"9ee;Zi^mAL]E#,JcN.X(BF^?!<<*0!WiS9 +\,ud=!!!0(!XAc,"6TZ9!.k3&!;um)#mCA1"9>Ku":YHq!.k3&!36)9!="cNG5!.k3X!!NK*%0-Y8r;[27 +\,u^2"9\l.!>9PlQC9JcMhO"U"f4!!WQ(!",^)"98E)"9ec+ +!pou>!.k3&!;$7$!<!WW6$#6=f-Wi6.%"TYM( +!!NT-"98Jl!.k3&!.k4C!"K):!!!:uVuR#(!2KSs!hKCD!.k3F!#Ge?!!*'(!<<5#V$-i&!2Tbt"U4r0 +!!2lqJcLB&JcOp5!M.++!!'I'!.k3&!0@0]`jG[E!5A:0JcOU,JcLQ+";SJX!!!>8\-2p6%^c?<"cNG5 +!.k3T!"/q>\,l`C]Dr!8"M!=hJcLB&JcP`L%M,P6!.k3&!;$7$&>l<)!2QFp!rr_&!WWCq!.k3&!1j/u"Jhjq!iMss!s8\%nGn.@JcLB&l2V"%^&S/D +^&7p2Vkac*Ih#N$,L]@T%!4]KG\d8eT!WW52!$)%@Mu\G0JcN.X%KQ_9 +!=Z?H!4W$;!=Ah:h>i--JcLB&rW!HH!3)n&WX5X,!!&tu('"E$!.k3&!36)0!?!3#ks!581.JcOU,JcLT,"T\]-\?l5B!)pUo1-k#lk>8ScF?BJcMJE%Klb8!tq0'!Wr\$VP+1rnGn.@JcLB&kl:at +S,NBhXN/S[!.k3&!0[B`Oi%(t!iE]+p],mGh#N$,L]@Sa":5&/2$NgD3$NLM8"pLLsJcLB&U&Y].!!*E2!XJl/$NU5.$igD"!.k3&!.k3&!.k3&!.k3& +!8RX,!/COW#QPbC!; +!/JcN(V$jQk!.k3&!;-=&!=&T.!W`9& +!sAW)!s&B)ScF?BJcMMF!=/o/!"&l5!!!0&"onu1#OqeG!.k3&!.k3&!.k3&!.k4,!.k3,!!NQ,&HDt9 +#Qk&/!!NN."U9kbJcLB&ZN(I;!"T;7!rrN,%KI%?!Wh0YJcLB&JcPcM%L)nB!!WN.!!E9+"p>)6PQ6:8 +JcMeN%Klb?"TSZ*"p,/4$ig>0kQ$27JcLB&o`,I+!"Ao3!s8N*!!NN."U:LtJcLB&T`>Q)!"/u2!rrN, +$NLS8!WhfkJcLB&JcLB&JcLB&JcLB&h#N$,JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& +JcLB&JcLB&JcLB&JcLB&JcOU,JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& +JcLB&JcLB&JcLB&h#Ms~> + +%%EndBinary +grestore +np +grestore +grestore +pgrs +%%PageTrailer +[ +[/CSA [/0 ]] +] del_res +Adobe_AGM_Image/pt gx +Adobe_CoolType_Core/pt get exec +Adobe_AGM_Core/restore_mysetup gx +Adobe_AGM_Core/pt gx +currentdict Adobe_AGM_Utils eq {end} if +%%Trailer +Adobe_AGM_Utils begin +[/EMC pdfmark_5 +currentdict Adobe_AGM_Utils eq {end} if +Adobe_AGM_Image/dt get exec +Adobe_CoolType_Core/dt get exec +Adobe_AGM_Core/dt get exec +%%Pages: 1 +%%DocumentNeededResources: +%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0 +%%+ procset Adobe_CoolType_Utility_T42 1.0 0 +%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%+ procset Adobe_CoolType_Core 2.31 0 +%%+ procset Adobe_AGM_Core 2.0 0 +%%+ procset Adobe_AGM_Utils 1.0 0 +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: +%%EOF diff --git a/docs/JFM_WYQ/My_JFM/Fig2.eps b/docs/JFM_WYQ/My_JFM/Fig2.eps new file mode 100644 index 0000000..371cb0c --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/Fig2.eps @@ -0,0 +1,5462 @@ +%!PS-Adobe-3.1 EPSF-3.0 +%%Title: trapped.eps +%%Creator: Adobe Illustrator(R) X +%%AI8_CreatorVersion: 10.0 %AI9_PrintingDataBegin %%For: Suresh Kumar +%%CreationDate: 9/8/2004 +%%BoundingBox: 0 0 351 225 +%%HiResBoundingBox: 0 0 350.8306 224.9585 +%%CropBox: 0 0 350.8306 224.9585 +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%ADOBeginClientInjection: DocumentHeader "AI10" +%ADOEndClientInjection: DocumentHeader "AI10" +%%Pages: 1 +%%DocumentNeededResources: +%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0) +%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.13 0) +%%+ procset Adobe_CoolType_Core (2.12 0) +%%+ procset Adobe_AGM_Core (2.0 0) +%%+ procset Adobe_AGM_Utils (1.0 0) +%%DocumentFonts: +%%DocumentNeededFonts: +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: +%%DocumentProcessColors: Black +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: +%%EndComments +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults +%%BeginProlog +%ADOBeginClientInjection: DocumentProlog Start "AI10" +%ADOEndClientInjection: DocumentProlog Start "AI10" +%%BeginResource: procset Adobe_AGM_Utils 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Utils 60 dict dup begin put +/bdf +{ + bind def +} bind def +/nd{ + null def +}bdf +/xdf +{ + exch def +}bdf +/ldf +{ + load def +}bdf +/ddf +{ + put +}bdf +/xddf +{ + 3 -1 roll put +}bdf +/xpt +{ + exch put +}bdf +/ndf +{ + + exch dup where{ + pop pop pop + }{ + xdf + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/bdict +{ + mark +}bdf +/edict +{ + counttomark 2 idiv dup dict begin {def} repeat pop currentdict end +}def + +/ps_level + /languagelevel where{ + pop systemdict /languagelevel get exec + }{ + 1 + }ifelse +def +/level2 + ps_level 2 ge +def +/level3 + ps_level 3 ge +def +/ps_version + {version cvr} stopped { + -1 + }if +def +/makereadonlyarray +{ + /packedarray where{ + pop packedarray + }{ + array astore readonly + }ifelse +}bdf +/map_reserved_ink_name +{ + dup type /stringtype eq{ + dup /Red eq{ + pop (_Red_) + }{ + dup /Green eq{ + pop (_Green_) + }{ + dup /Blue eq{ + pop (_Blue_) + }{ + dup /Cyan eq{ + pop (_Cyan_) + }{ + dup /Magenta eq{ + pop (_Magenta_) + }{ + dup /Yellow eq{ + pop (_Yellow_) + }{ + dup /Black eq{ + pop (_Black_) + }{ + dup () cvn eq{ + pop (Process) + }if + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + }if +}bdf +/AGMUTIL_GSTATE 22 dict def +/get_gstate +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_clr_spc currentcolorspace def + /AGMUTIL_GSTATE_clr_indx 0 def + /AGMUTIL_GSTATE_clr_comps 12 array def + mark currentcolor counttomark + {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop + /AGMUTIL_GSTATE_fnt rootfont def + /AGMUTIL_GSTATE_lw currentlinewidth def + /AGMUTIL_GSTATE_lc currentlinecap def + /AGMUTIL_GSTATE_lj currentlinejoin def + /AGMUTIL_GSTATE_ml currentmiterlimit def + currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf + /AGMUTIL_GSTATE_sa currentstrokeadjust def + + /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def + /AGMUTIL_GSTATE_op currentoverprint def + /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def + /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def + currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf + cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf + /AGMUTIL_GSTATE_ht currenthalftone def + /AGMUTIL_GSTATE_flt currentflat def + end +}def +/set_gstate +{ + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_clr_spc setcolorspace + AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor + AGMUTIL_GSTATE_fnt setfont + AGMUTIL_GSTATE_lw setlinewidth + AGMUTIL_GSTATE_lc setlinecap + AGMUTIL_GSTATE_lj setlinejoin + AGMUTIL_GSTATE_ml setmiterlimit + AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash + AGMUTIL_GSTATE_sa setstrokeadjust + + AGMUTIL_GSTATE_clr_rnd setcolorrendering + AGMUTIL_GSTATE_op setoverprint + AGMUTIL_GSTATE_bg cvx setblackgeneration + AGMUTIL_GSTATE_ucr cvx setundercolorremoval + AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx + AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer + + AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or + { + currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne + { + mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark + } if + }{ + AGMUTIL_GSTATE_ht sethalftone + } ifelse + + AGMUTIL_GSTATE_flt setflat + end +}def +/AGMUTIL_str256 256 string def +/AGMUTIL_src256 256 string def +/AGMUTIL_dst64 64 string def +/AGMUTIL_srcLen nd +/AGMUTIL_ndx nd +/rdline +{ + currentfile AGMUTIL_str256 readline pop +} bdf +/rdcmntline +{ + currentfile AGMUTIL_str256 readline pop + (%) anchorsearch {pop} if +} bdf +/filter_cmyk +{ + dup type /filetype ne{ + 0 () /SubFileDecode filter + }if + [ + exch + { + AGMUTIL_src256 readstring pop + dup length /AGMUTIL_srcLen exch def + /AGMUTIL_ndx 0 def + + AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ + 1 index exch get + AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put + /AGMUTIL_ndx AGMUTIL_ndx 1 add def + }for + pop + AGMUTIL_dst64 0 AGMUTIL_ndx getinterval + } + bind + /exec cvx + ] cvx +} bdf +/AGMUTIL_imagefile nd +/AGMUTIL_imbuf nd +/read_image_file +{ + AGMUTIL_imagefile 0 setfileposition + dup /DataSource {AGMUTIL_imagefile AGMUTIL_imbuf readstring pop} put + exch + load exec +}def +/write_image_file +{ + begin + { (AGMUTIL_imagefile) (w+) file } stopped{ + false + }{ + Adobe_AGM_Utils/AGMUTIL_imagefile xddf + Adobe_AGM_Utils/AGMUTIL_imbuf Width BitsPerComponent mul 7 add 8 idiv string ddf + 1 1 Height { + pop + DataSource dup type /filetype eq{ + AGMUTIL_imbuf readstring pop + }{ + exec + } ifelse + AGMUTIL_imagefile exch writestring + }for + true + }ifelse + end +}def +/close_image_file +{ + AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile +}def +/consumeimagedata +{ + begin + currentdict /MultipleDataSources known not + {/MultipleDataSources false def} if + MultipleDataSources + { + 1 dict begin + /flushbuffer Width cvi string def + 1 1 Height cvi + { + pop + 0 1 DataSource length 1 sub + { + DataSource exch get + dup type dup + /filetype eq + { + exch flushbuffer readstring pop pop + }if + /arraytype eq + { + exec pop + }if + }for + }for + end + } + { + /DataSource load type dup + /filetype eq + { + 1 dict begin + /flushbuffer Width Decode length 2 div mul cvi string def + 1 1 Height { pop DataSource flushbuffer readstring pop pop} for + end + }if + /arraytype eq + { + 1 1 Height { pop DataSource pop } for + }if + }ifelse + end +}bdf +/addprocs +{ + 2{/exec load}repeat + 3 1 roll + [ 5 1 roll ] bind cvx +}def +/modify_halftone_xfer +{ + currenthalftone dup length dict copy begin + currentdict 2 index known{ + 1 index load dup length dict copy begin + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs /TransferFunction xdf + currentdict end def + currentdict end sethalftone + }{ + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs /TransferFunction xdf + currentdict end sethalftone + pop + }ifelse +}def +/doc_setup{ + Adobe_AGM_Utils begin +}bdf +/doc_trailer{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright (C) 1997-1999 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Core 205 dict dup begin put +/nd{ + null def +}bind def +/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_src256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen [currentscreen] cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_will_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSA_cache 0 dict def +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_pattern_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_ovp nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/knockout_unitsq nd +/AGMCORE_CRD_cache where{ + pop +}{ + /AGMCORE_CRD_cache 0 dict def +}ifelse +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer {readline} stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type /dicttype eq{ + dup /HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup /HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +} def +/clp_npth +{ + clip newpath +} def +/eoclp_npth +{ + eoclip newpath +} def +/stkpath_clp_npth +{ + strokepath clip newpath +} def +/stk_n_clp_npth +{ + gsave stroke grestore clip newpath +} def +/npth_clp +{ + newpath clip +} def +/graphic_setup +{ + /AGMCORE_graphicsave save def + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + [] 0 setdash + 10 setmiterlimit + newpath + false setoverprint + false setstrokeadjust + Adobe_AGM_Core/spot_alias get exec + /Adobe_AGM_Image where { + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + get exec + }{ + pop pop + }ifelse + } if + 100 dict begin + /showpage {} def + mark +} def +/graphic_cleanup +{ + cleartomark + end + AGMCORE_graphicsave restore +} def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + + clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + } if + AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show + + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + } + { + AGMCORE_str256 exch AGMCORE_tmp exch put + /AGMCORE_tmp AGMCORE_tmp 1 add def + } ifelse + } forall +} bdf +/doc_setup{ + Adobe_AGM_Core begin + + /AGMCORE_will_host_separate xdf + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + + errordict /AGM_handleerror known not{ + errordict /AGM_handleerror errordict /handleerror get put + errordict /handleerror { + Adobe_AGM_Core begin + $error /newerror get AGMCORE_cur_err null ne and{ + $error /newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error /newerror true put + end + errordict /AGM_handleerror get exec + } bind put + }if + + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + + AGMCORE_environ_ok not + {/AGMCORE_cur_err /AGMCORE_bad_environ def} if + + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and + }{ + false + }ifelse + def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + level2 not{ + /xput{ + dup load dup length exch maxlength eq{ + dup dup load dup + length dup 0 eq {pop 1} if 2 mul dict copy def + }if + load begin + def + end + }def + }{ + /xput{ + load 3 1 roll put + }def + }ifelse + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_gstack 32 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 8 def + + /AGMCORE_&gsave /gsave ldf + /AGMCORE_&grestore /grestore ldf + /AGMCORE_&grestoreall /grestoreall ldf + /AGMCORE_&save /save ldf + /AGMCORE_gdictcopy { + begin + { def } forall + end + }def + /AGMCORE_gput { + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget { + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave { + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge {limitcheck} if + Adobe_AGM_Core exch + /AGMCORE_gstackptr exch put + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore { + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt {1 add} if + Adobe_AGM_Core exch + /AGMCORE_gstackptr exch put + }def + /grestoreall { + AGMCORE_&grestoreall + Adobe_AGM_Core + /AGMCORE_gstackptr AGMCORE_gstacksaveptr put + }def + /save { + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge {limitcheck} if + Adobe_AGM_Core begin + /AGMCORE_gstackptr exch def + /AGMCORE_gstacksaveptr AGMCORE_gstackptr def + end + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + 0 1 AGMCORE_gstack length 1 sub { + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + } for + }if + /currentcmykcolor [0 0 0 0] AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace [/DeviceGray] AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent () AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + end +}def +/page_setup +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { + pop 0 + } if + 3 1 roll + } repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + { + pop + }ndf + /currentoverprint + { + false + }ndf + /AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /LeaveColorUnchanged eq + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where {pop}{ + /convert_spot_to_process + { + dup dup (None) eq exch (All) eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + 1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor + currentgray 0 eq + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + Adobe_AGM_Core/AGMCORE_name xddf + false + currentpagedevice/OverrideSeparations known + { + currentpagedevice/OverrideSeparations get + { + /HqnSpots /ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not + }{ + gsave + [/Separation AGMCORE_name /DeviceGray {}]setcolorspace + false + currentpagedevice/SeparationColorNames 2 copy known + { + get + { AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + }def + }ifelse + /convert_to_process where {pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + true exch + { + convert_spot_to_process and + } + forall + }{ + false exch + { + convert_spot_to_process or + } + forall + }ifelse + }ifelse + }def + }ifelse + AGMCORE_host_sep AGMCORE_will_host_separate not and { + /AGMCORE_cur_err /AGMCORE_color_space_onhost_seps def + AGMCORE_color_space_onhost_seps + }if + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + AGMCORE_host_sep{ + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /clip AGMCORE_key_known not{ + Adobe_AGM_Core/AGMCORE_&clip /clip load put + /clip + { + current_spot_alias{ + currentdict/InksUsed known{ + [ + InksUsed{ + dup map_alias{ + /Name get exch pop + }if + }forall + ] + /InksUsed xdf + }if + }if + AGMCORE_&clip + }def + }if + /eoclip AGMCORE_key_known not{ + Adobe_AGM_Core/AGMCORE_&eoclip /eoclip load put + /eoclip + { + current_spot_alias{ + currentdict/InksUsed known{ + [ + InksUsed{ + dup map_alias{ + /Name get exch pop + }if + }forall + ] + /InksUsed xdf + }if + }if + AGMCORE_&eoclip + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4 {4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + Adobe_AGM_Core begin + /AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf + end + [/Separation 4 -1 roll /DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation (All) /DeviceGray {}] setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4 {4 index mul 4 1 roll} repeat + setcmykcolor pop + }ndf + + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + + /map_index + { + 1 index mul exch getinterval {255 div} forall + }def + + level2{ + /mo /moveto ldf + /li /lineto ldf + /cv /curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + /level2ScreenFreq{ + begin + 60 + HalftoneType 1 eq{ + pop Frequency + }if + HalftoneType 2 eq{ + pop GrayFrequency + }if + HalftoneType 5 eq{ + pop Default level2ScreenFreq + }if + end + }def + /currentScreenFreq{ + currenthalftone level2ScreenFreq + }def + level2 /setcolorspace AGMCORE_key_known not and{ + + /AGMCORE_&&&setcolorspace /setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup /arraytype eq exch /packedarraytype eq or + { + dup 0 get dup /Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + + [ + /Separation Name + CSA map_csa + dup /MappedCSA xdf + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 exch put + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get [ + exch { + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + } forall + ] 1 exch put + }if + }ifelse + }if + }def + /setcolorspace + { + dup type dup /arraytype eq exch /packedarraytype eq or + { + dup 0 get /Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + AGMCORE_&&&setcolorspace + }def + }if + }{ + + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1 [8 0 0 8 0 0] {} image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /currentScreenFreq{ + currentscreen pop pop + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + } def + + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + } def + + /n_color_components + { + dup type /arraytype eq{ + 0 get + }if + dup /DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + } def + + /setcolor_devicecolor + { + dup type /arraytype eq{ + 0 get + }if + dup /DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + + /setcolor + { + currentcolorspace 0 get + dup /DeviceGray ne{ + dup /DeviceCMYK ne{ + dup /DeviceRGB ne{ + dup /Separation eq{ + pop + currentcolorspace 3 get exec + currentcolorspace 2 get + }{ + dup /Indexed eq{ + pop + currentcolorspace 3 get dup type /stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err /AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + } def + }ifelse + + /sop /setoverprint ldf + /lw /setlinewidth ldf + /lc /setlinecap ldf + /lj /setlinejoin ldf + /ml /setmiterlimit ldf + /dsh /setdash ldf + /sadj /setstrokeadjust ldf + /gry /setgray ldf + /rgb /setrgbcolor ldf + /cmyk /setcmykcolor ldf + /sep /setsepcolor ldf + /idx /setindexedcolor ldf + /colr /setcolor ldf + /csacrd /set_csa_crd ldf + /sepcs /setsepcolorspace ldf + /idxcs /setindexedcolorspace ldf + /cp /closepath ldf + /clp /clp_npth ldf + /eclp /eoclp_npth ldf + /spclp /stkpath_clp_npth ldf + /f /fill ldf + /ef /eofill ldf + /s /stroke ldf + /sclp /stk_n_clp_npth ldf + /nclp /npth_clp ldf + /gset /graphic_setup ldf + /gcln /graphic_cleanup ldf + + currentdict{ + dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and { + bind + }if + def + }forall +}def +/page_trailer +{ + end +}def +/doc_trailer{ +}def +systemdict /findcolorrendering known{ + /findcolorrendering systemdict /findcolorrendering get def +}if +systemdict /setcolorrendering known{ + /setcolorrendering systemdict /setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/current_ink +{ + dup length 0 eq{ + pop true + }{ + Adobe_AGM_Core/ink_result false put + { + dup /ProcessCyan eq{ + AGMCORE_cyan_plate ink_result or Adobe_AGM_Core/ink_result xddf + }{ + dup /ProcessMagenta eq{ + AGMCORE_magenta_plate ink_result or Adobe_AGM_Core/ink_result xddf + }{ + dup /ProcessYellow eq{ + AGMCORE_yellow_plate ink_result or Adobe_AGM_Core/ink_result xddf + }{ + dup /ProcessBlack eq{ + AGMCORE_black_plate ink_result or Adobe_AGM_Core/ink_result xddf + }{ + dup /sep_colorspace_dict AGMCORE_gget dup null eq{ + pop false ink_result or Adobe_AGM_Core/ink_result xddf + }{ + /Name get eq{ + 1 setsepcolor + currentgray 1 ne ink_result or Adobe_AGM_Core/ink_result xddf + }{ + false ink_result or Adobe_AGM_Core/ink_result xddf + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + pop + } forall + ink_result + }ifelse +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA map_csa setcolorspace_opt + set_crd + end +} +def +/setsepcolor +{ + + /sep_colorspace_dict AGMCORE_gget begin + dup /sep_tint exch AGMCORE_gput + TintProc + end +} def +/sep_colorspace_proc +{ + Adobe_AGM_Core/AGMCORE_tmp xddf + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2 {AGMCORE_tmp mul NComponents 1 roll} repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + } repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +} def +/sep_colorspace_gray_proc +{ + Adobe_AGM_Core/AGMCORE_tmp xddf + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +} def +/sep_proc_name +{ + dup 0 get + dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{ + pop [/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +} def +/setsepcolorspace +{ + + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup /sep_colorspace_dict exch AGMCORE_gput + begin + /MappedCSA CSA map_csa def + Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf + + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + { 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx + ] setcolorspace_opt + /TintProc { + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get /DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc [ + Components aload pop Name findcmykcustomcolor + /exch cvx /setcustomcolor cvx + ] cvx bdf + }{ + AGMCORE_host_sep Name (All) eq and{ + /TintProc { + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and + AGMCORE_host_sep or + Name () eq and{ + /TintProc [ + MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{ + cvx /setcmykcolor cvx + }{ + cvx /setgray cvx + }ifelse + ] cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc [ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get /DeviceGray eq{ + 1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx + }if + /Name cvx /findcmykcustomcolor cvx /exch cvx + + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + }{ + Name inRip_spot_has_ink not + }ifelse + { + /pop cvx 1 + }if + /setcustomcolor cvx + ] cvx bdf + }{ + /TintProc /setcolor ldf + + [/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +} def +/setindexedcolorspace +{ + dup /indexed_colorspace_dict exch AGMCORE_gput + begin + /MappedCSA CSA map_csa def + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{ + pop [/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval {} forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + } bind + }{ + Lookup + }ifelse + }ifelse + ] setcolorspace_opt + + set_crd + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep{ + /indexed_colorspace_dict AGMCORE_gget/Lookup get 4 3 -1 roll map_index setcmykcolor + }{ + setcolor + }ifelse +} def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup begin + 1 setgray + 0 0 ImageMatrix itransform + Width Height ImageMatrix idtransform rectfill + end + grestore + }if + consumeimagedata +}def +/add_csa +{ + Adobe_AGM_Core begin + /AGMCORE_CSA_cache xput + end +}def +/map_csa +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_CSA_cache get exch get + }if +}def +/add_csd +{ + Adobe_AGM_Core begin + /AGMCORE_CSD_cache xput + end +}def +/get_csd +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_CSD_cache get exch get + }if +}def +/get_csd_by_name +{ + dup type dup /nametype eq exch /stringtype eq or{ + Adobe_AGM_Core begin + /AGMCORE_CSD_Name xdf + AGMCORE_CSD_cache + { + dup /Name get AGMCORE_CSD_Name eq + { + exch pop exit + }{ + pop + }ifelse + pop + }forall + end + }if +}def +/cachepattern_level2 +{ + 4 dict begin + /comparebuffer exch def + /holdbuffer exch def + /readbuffer 1024 string def + /LZWFilter holdbuffer /LZWEncode filter def + { + currentfile readbuffer readline not + {pop exit} + if + dup LZWFilter exch writestring + LZWFilter (\n) writestring + comparebuffer eq + {exit} + if + }loop + LZWFilter closefile + end +}def +/cachepattern_level3 +{ + 3 dict begin + /comparebuffer exch def + /readbuffer 1024 string def + /DoEOL false def + { + DoEOL + { + (\n) + /DoEOL false def + } + { + currentfile readbuffer readline not + {pop ()} + { + dup length 0 eq + { pop(\n)} + { + dup comparebuffer eq + {pop ()} + {/DoEOL true def} + ifelse + } + ifelse + } + ifelse + } + ifelse + } /ReusableStreamDecode filter + end +}def +/add_pattern +{ + Adobe_AGM_Core begin + /AGMCORE_pattern_cache xput + end +}def +/get_pattern +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_pattern_cache get exch get + }if +}def +/make_pattern +{ + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + makepattern +}def +/exec_file + statusdict /currentfilenameextend known{ + { + 0 () /SubFileDecode filter cvx exec + } + }{ + + {cvx exec} + }ifelse +def +/set_pattern +{ + dup /PatternType get 1 eq{ + dup /PaintType get 1 eq{ + false sop [/DeviceGray] setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{ + pop + }{ + setcolorspace + }ifelse +}def +/updatecolorrendering +{ + + currentcolorrendering/Intent known{ + currentcolorrendering/Intent get + }{ + null + }ifelse + + Intent ne{ + false + Intent + AGMCORE_CRD_cache { + exch pop + begin + dup Intent eq{ + currentdict setcolorrendering_opt + end + exch pop true exch + exit + }if + end + } forall + pop + not{ + systemdict /findcolorrendering known{ + Intent findcolorrendering pop + /ColorRendering findresource + dup length dict copy + setcolorrendering_opt + }if + }if + }if +} def +/add_crd +{ + AGMCORE_CRD_cache 3 1 roll put +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/CRD known{ + AGMCORE_CRD_cache CRD get dup null ne{ + setcolorrendering_opt + }{ + pop + }ifelse + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + }if +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp) flushinput + }if +}def +/cpaint_gsep +{ + Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep) flushinput + }if +}def +/cpaint_gend +{ + newpath +}def +/AGMCORE_ctm_stack bdict + /push_ctm { + stack length size le{ + stack dup length 2 mul array + dup /stack exch def + copy pop + }if + stack size 3 -1 roll put + /size size 1 add def + } + /pop_ctm { + /size size 1 sub def + size 0 lt{ + /size 0 def + }if + stack size get + } + /stack 1 array + /size 0 +edict +def +/save_ctm +{ + matrix currentmatrix AGMCORE_ctm_stack begin + push_ctm + end +}def +/restore_ctm +{ + AGMCORE_ctm_stack begin + pop_ctm + end + setmatrix +}def +/path_rez +{ + dup 0 ne{ + AGMCORE_deviceDPI exch div + dup 1 lt{ + pop 1 + }if + setflat + }{ + pop + }ifelse +}def +/rdcmntline { + currentfile AGMCORE_str256 readline pop + (%) anchorsearch {pop} if +} def +/set_spot_alias_ary +{ + /AGMCORE_SpotAliasAry where{ + pop pop + }{ + Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf + true set_spot_alias + }ifelse +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry{ + dup/Name get AGMCORE_name eq{ + save exch + /Adobe_AGM_Core currentdict def + /CSD get get_csd + exch restore + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + + /AGMCORE_&setcustomcolor AGMCORE_key_known not { + Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put + } if + /customcolor_tint 1 AGMCORE_gput + + Adobe_AGM_Core begin + /setcustomcolor + { + + dup /customcolor_tint exch AGMCORE_gput + + current_spot_alias{ + 1 index 4 get map_alias{ + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + pop + }{ + AGMCORE_&setcustomcolor + }ifelse + }{ + AGMCORE_&setcustomcolor + }ifelse + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd /setpagedevice load def + /setpagedevice { get_gstate spd set_gstate } def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known{ + currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse + fill grestore + }if + end +}def +/lw_save_restore_override { + /md where { + pop + md begin + currentdict /lw_initializepage known not + { + /lw_initializepage /initializepage load def + /initializepage + { + lw_initializepage + /initializepage {} def + }def + }if + /pmSVsetup{} def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage /showpage load def} + ifelse + /showpage {orig_showpage gR} def + end + }if +}def +/pscript_showpage_override { + /NTPSOct95 where + { + begin + showpage + save + /showpage /restore load def + /restore {exch pop}def + end + }if +}def +/driver_media_override +{ + /md where { + pop + md /initializepage known { + md /initializepage {} put + } if + md /rC known { + md /rC {4{pop}repeat} put + } if + }if + + Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put +}def +/driver_check_media_override +{ + Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne + { + Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix + }if +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def + /AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def + /AGMCORE_invalid_color_space (This job contains an invalid color space. ) def +end +end +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.12 0 +%%Copyright: Copyright 1997-2001 Adobe Systems Incorporated. All Rights Reserved. +%%Version: 2.12 0 +userdict/Adobe_CoolType_Core 60 dict dup begin put/Level2? systemdict +/languagelevel known dup{pop systemdict/languagelevel get 2 ge}if def Level2? +not{/currentglobal false def/setglobal/pop load def/gcheck{pop false}bind def +/currentpacking false def/setpacking/pop load def/SharedFontDirectory 0 dict +def}if currentpacking true setpacking/@_SaveStackLevels{Adobe_CoolType_Data +begin @opStackCountByLevel @opStackLevel 2 copy known not{2 copy 3 dict dup +/args 7 index 5 add array put put get}{get dup/args get dup length 3 index lt{ +dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args +exch put}{pop}ifelse}ifelse begin count 2 sub 1 index lt{pop count 1 sub}if +dup/argCount exch def dup 0 gt{exch 1 index 2 add 1 roll args exch 0 exch +getinterval astore pop}{pop}ifelse count 1 sub/restCount exch def end +/@opStackLevel @opStackLevel 1 add def countdictstack 1 sub +@dictStackCountByLevel exch @dictStackLevel exch put/@dictStackLevel +@dictStackLevel 1 add def end}bind def/@_RestoreStackLevels{ +Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub def +@opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt{{pop +}repeat}{pop}ifelse args 0 argCount getinterval{}forall end/@dictStackLevel +@dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end +countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bind def +/@_PopStackLevels{Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub +def/@dictStackLevel @dictStackLevel 1 sub def end}bind def/@Raise{exch cvx +exch errordict exch get exec stop}bind def/@ReRaise{cvx $error/errorname get +errordict exch get exec stop}bind def/@Stopped{0 @#Stopped}bind def/@#Stopped{ +@_SaveStackLevels stopped{@_RestoreStackLevels true}{@_PopStackLevels false} +ifelse}bind def/@Arg{Adobe_CoolType_Data begin @opStackCountByLevel +@opStackLevel 1 sub get/args get exch get end}bind def/doc_setup{ +Adobe_CoolType_Core begin/mov/moveto load def/nfnt/newencodedfont load def +/mfnt/makefont load def/sfnt/setfont load def/ufnt/undefinefont load def/chp +/charpath load def/awsh/awidthshow load def/wsh/widthshow load def/ash/ashow +load def/sh/show load def end userdict/Adobe_CoolType_Data 6 dict dup begin +/AddWidths? false def/CC 0 def/charcode 2 string def/@opStackCountByLevel 32 +dict def/@opStackLevel 0 def/@dictStackCountByLevel 32 dict def +/@dictStackLevel 0 def end put}bind def/doc_trailer{currentdict +Adobe_CoolType_Core eq{end}if}bind def/page_setup{Adobe_CoolType_Core begin} +bind def/page_trailer{end}bind def/unload{systemdict/languagelevel known{ +systemdict/languagelevel get 2 ge{userdict/Adobe_CoolType_Core 2 copy known{ +undef}{pop pop}ifelse}if}if}bind def/ndf{1 index where{pop pop pop}{dup xcheck +{bind}if def}ifelse}def/findfont dup systemdict begin userdict begin +/globaldict where{/globaldict get begin}if dup where pop exch get/globaldict +where{pop end}if end end def/systemfindfont/findfont load def/undefinefont{pop +}ndf/copyfont{currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{ +dup length}ifelse 2 index length add 1 add dict begin exch{1 index/FID eq{pop +pop}{def}ifelse}forall dup null eq{pop}{{def}forall}ifelse currentdict end +exch setglobal}bind def/copyarray{currentglobal exch dup gcheck setglobal dup +length array copy exch setglobal}bind def/newencodedfont{currentglobal{ +SharedFontDirectory 3 index known{SharedFontDirectory 3 index get +/FontReferenced known}{false}ifelse}{FontDirectory 3 index known{FontDirectory +3 index get/FontReferenced known}{SharedFontDirectory 3 index known{ +SharedFontDirectory 3 index get/FontReferenced known}{false}ifelse}ifelse} +ifelse dup{3 index findfont/FontReferenced get 2 index findfont ne{pop false} +if}if{pop 1 index findfont/Encoding get exch 0 1 255{2 copy get 3 index 3 1 +roll put}for pop pop pop}{findfont dup dup maxlength 2 add dict begin exch{1 +index/FID ne{def}{pop pop}ifelse}forall/FontReferenced exch def/Encoding exch +dup length array copy def/FontName 1 index dup type/stringtype eq{cvn}if def +currentdict end definefont pop}ifelse}bind def/SetSubstituteStrategy{ +$SubstituteFont begin dup type/dicttype ne{0 dict}if currentdict/$Strategies +known{exch $Strategies exch 2 copy known{get 2 copy maxlength exch maxlength +add dict begin{def}forall{def}forall currentdict dup/$Init known{dup/$Init get +exec}if end/$Strategy exch def}{pop pop pop}ifelse}{pop pop}ifelse end}bind +def/scff{$SubstituteFont begin dup type/stringtype eq{dup length exch}{null} +ifelse/$sname exch def/$slen exch def end{findfont}@Stopped{dup length dup 21 +add string dup 4 3 roll 0 exch 128 string cvs putinterval exch 1 index exch +(_was-malformed-so-was)putinterval cvn{findfont}@Stopped{pop/Courier findfont} +if}if $SubstituteFont begin/$sname null def/$slen 0 def end}bind def +/isWidthsOnlyFont{dup/WidthsOnly known{pop pop true}{dup/FDepVector known{ +/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}{dup/FDArray known{ +/FDArray get{isWidthsOnlyFont dup{exit}if}forall}{pop}ifelse}ifelse}ifelse} +bind def/?set{$SubstituteFont begin/$substituteFound false def/$fontname 4 +index def/$doSmartSub false def end 3 index findfont $SubstituteFont begin +$substituteFound{false}{dup/FontName known{dup/FontName get $fontname eq 1 +index/DistillerFauxFont known not and/currentdistillerparams where{pop false 2 +index isWidthsOnlyFont not and}if}{false}ifelse}ifelse exch pop/$doSmartSub +true def end{exch pop exch pop exch 2 dict dup/Found 3 index put exch findfont +exch}{exch exec exch findfont 2 dict dup/Downloaded 6 5 roll put}ifelse dup +/FontName 4 index put copyfont definefont pop}bind def/?str1 256 string def +/?str2 256 string def/?add{1 index type/integertype eq{exch true 4 2}{false 3 +1}ifelse roll 1 index findfont dup/Widths known{Adobe_CoolType_Data/AddWidths? +true put gsave dup 1000 scalefont setfont}if/Downloaded known{exec exch{exch +?str2 cvs exch findfont/Downloaded get 1 dict begin/Downloaded 1 index def +?str1 cvs length ?str1 1 index 1 add 3 index putinterval exch length 1 add 1 +index add ?str1 2 index(*)putinterval ?str1 0 2 index getinterval cvn findfont +?str1 3 index(+)putinterval 2 dict dup/FontName ?str1 0 6 index getinterval +cvn put dup/Downloaded Downloaded put end copyfont dup/FontName get exch +definefont pop pop pop}{pop}ifelse}{pop exch{findfont dup/Found get dup length +exch ?str1 cvs pop ?str1 1 index(+)putinterval ?str1 1 index 1 add 4 index +?str2 cvs putinterval ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add +getinterval cvn 1 dict exch 1 index exch/FontName exch put copyfont dup +/FontName get exch definefont pop}{pop}ifelse}ifelse Adobe_CoolType_Data +/AddWidths? get{grestore Adobe_CoolType_Data/AddWidths? false put}if}bind def +/?sh{currentfont/Downloaded known{exch}if pop}bind def/?chp{currentfont +/Downloaded known{pop}{false chp}ifelse}bind def/?mv{currentfont/Downloaded +known{moveto pop pop}{pop pop moveto}ifelse}bind def setpacking userdict +/$SubstituteFont 25 dict put 1 dict begin/SubstituteFont dup $error exch 2 +copy known{get}{pop pop{pop/Courier}bind}ifelse def/currentdistillerparams +where dup{pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known{ +get/Error eq}{pop pop false}ifelse}if not{countdictstack array dictstack 0 get +begin userdict begin $SubstituteFont begin/$str 128 string def/$fontpat 128 +string def/$slen 0 def/$sname null def/$match false def/$fontname null def +/$substituteFound false def/$doSmartSub true def/$depth 0 def/$fontname null +def/$italicangle 26.5 def/$dstack null def/$Strategies 10 dict dup begin +/$Type3Underprint{currentglobal exch false setglobal 11 dict begin/UseFont +exch $WMode 0 ne{dup length dict copy dup/WMode $WMode put/UseFont exch +definefont}if def/FontName $fontname dup type/stringtype eq{cvn}if def +/FontType 3 def/FontMatrix[.001 0 0 .001 0 0]def/Encoding 256 array dup 0 1 +255{/.notdef put dup}for pop def/FontBBox[0 0 0 0]def/CCInfo 7 dict dup begin +/cc null def/x 0 def/y 0 def end def/BuildChar{exch begin CCInfo begin 1 +string dup 0 3 index put exch pop/cc exch def UseFont 1000 scalefont setfont +cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont +/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end}bind +def currentdict end exch setglobal}bind def/$GetaTint 2 dict dup begin +/$BuildFont{dup/WMode known{dup/WMode get}{0}ifelse/$WMode exch def $fontname +exch dup/FontName known{dup/FontName get dup type/stringtype eq{cvn}if}{ +/unnamedfont}ifelse exch $deepcopyfont exch 1 index exch/FontBasedOn exch put +dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont}bind def +/$Underprint{gsave x abs y abs gt{/y 1000 def}{/x -1000 def 500 120 translate} +ifelse Level2?{[/Separation(All)/DeviceCMYK{0 0 0 1 pop}]setcolorspace}{0 +setgray}ifelse 10 setlinewidth x .8 mul[7 3]{y mul 8 div 120 sub x 10 div exch +moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave +Level2?{.2 setcolor}{.8 setgray}ifelse fill grestore stroke}forall pop +grestore}bind def end def/$Oblique 1 dict dup begin/$BuildFont{currentglobal +exch dup gcheck setglobal null copyfont begin/FontBasedOn currentdict/FontName +known{FontName dup type/stringtype eq{cvn}if}{/unnamedfont}ifelse def/FontName +$fontname dup type/stringtype eq{cvn}if def/currentdistillerparams where{pop}{ +/FontInfo currentdict/FontInfo known{FontInfo null copyfont}{2 dict}ifelse dup +begin/ItalicAngle $italicangle def/FontMatrix FontMatrix[1 0 ItalicAngle dup +sin exch cos div 1 0 0]matrix concatmatrix readonly end 4 2 roll def def} +ifelse FontName currentdict end definefont exch setglobal}bind def end def +/$None 1 dict dup begin/$BuildFont{}bind def end def end def/$Oblique +SetSubstituteStrategy/$findfontByEnum{dup type/stringtype eq{cvn}if dup +/$fontname exch def $sname null eq{$str cvs dup length $slen sub $slen +getinterval}{pop $sname}ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch +putinterval/$match false def $SubstituteFont/$dstack countdictstack array +dictstack put mark{$fontpat 0 $slen 7 add getinterval{/$match exch def exit} +$str filenameforall}stopped{cleardictstack currentdict true $SubstituteFont +/$dstack get{exch{1 index eq{pop false}{true}ifelse}{begin false}ifelse}forall +pop}if cleartomark/$slen 0 def $match false ne{$match(fonts/)anchorsearch pop +pop cvn}{/Courier}ifelse}bind def/$ROS 1 dict dup begin/Adobe 4 dict dup begin +/Japan1[/Ryumin-Light/HeiseiMin-W3/GothicBBB-Medium/HeiseiKakuGo-W5 +/HeiseiMaruGo-W4/Jun101-Light]def/Korea1[/HYSMyeongJo-Medium/HYGoThic-Medium] +def/GB1[/STSong-Light/STHeiti-Regular]def/CNS1[/MKai-Medium/MHei-Medium]def +end def end def/$cmapname null def/$deepcopyfont{dup/FontType get 0 eq{1 dict +dup/FontName/copied put copyfont begin/FDepVector FDepVector copyarray 0 1 2 +index length 1 sub{2 copy get $deepcopyfont dup/FontName/copied put/copied +exch definefont 3 copy put pop pop}for def currentdict end}{$Strategies +/$Type3Underprint get exec}ifelse}bind def/$buildfontname{length $str 1 index +(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname +length add $str exch 0 exch getinterval cvn}bind def/$findfontByROS{/$fontname +exch def $ROS Registry 2 copy known{get Ordering 2 copy known{get}{pop pop[]} +ifelse}{pop pop[]}ifelse false exch{dup/CIDFont resourcestatus{pop pop save 1 +index/CIDFont findresource dup/WidthsOnly known{dup/WidthsOnly get}{false} +ifelse exch pop exch restore{pop}{exch pop true exit}ifelse}{pop}ifelse}forall +{$str cvs $buildfontname}{false(*){save exch dup/CIDFont findresource dup +/WidthsOnly known{dup/WidthsOnly get not}{true}ifelse exch/CIDSystemInfo get +dup/Registry get Registry eq exch/Ordering get Ordering eq and and{exch +restore exch pop true exit}{pop restore}ifelse}$str/CIDFont resourceforall{ +$buildfontname}{$fontname $findfontByEnum}ifelse}ifelse}bind def end end +currentdict/$error known currentdict/languagelevel known and dup{pop $error +/SubstituteFont known}if dup{$error}{Adobe_CoolType_Core}ifelse begin{ +/SubstituteFont/CMap/Category resourcestatus{pop pop{$SubstituteFont begin +/$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt +and{$sname null eq{dup $str cvs dup length $slen sub $slen getinterval cvn}{ +$sname}ifelse dup/CMap resourcestatus{pop pop dup/$cmapname exch def/CMap +findresource/CIDSystemInfo get{def}forall $findfontByROS}{128 string cvs dup +(-)search{3 1 roll search{3 1 roll pop{dup cvi}stopped{pop pop pop pop pop +$findfontByEnum}{4 2 roll pop pop exch length exch 2 index length 2 index sub +exch 1 sub -1 0{$str cvs dup length 4 index 0 4 index 4 3 roll add getinterval +exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus{pop pop 4 1 +roll pop pop pop dup/$cmapname exch def/CMap findresource/CIDSystemInfo get{ +def}forall $findfontByROS true exit}{pop}ifelse}for dup type/booleantype eq{ +pop}{pop pop $findfontByEnum}ifelse}ifelse}{pop pop pop $findfontByEnum}ifelse +}{pop pop $findfontByEnum}ifelse}ifelse}{//SubstituteFont exec}ifelse/$slen 0 +def end}}{{$SubstituteFont begin/$substituteFound true def dup length $slen gt +$sname null ne or $slen 0 gt and{$findfontByEnum}{//SubstituteFont exec}ifelse +end}}ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont +load put}{/scfindfont{$SubstituteFont begin dup systemfindfont dup/FontName +known{dup/FontName get dup 3 index ne}{/noname true}ifelse dup{ +/$origfontnamefound 2 index def/$origfontname 4 index def/$substituteFound +true def}if exch pop{$slen 0 gt $sname null ne 3 index length $slen gt or and{ +pop dup $findfontByEnum findfont dup maxlength 1 add dict begin{1 index/FID eq +{pop pop}{def}ifelse}forall currentdict end definefont dup/FontName known{dup +/FontName get}{null}ifelse $origfontnamefound ne{$origfontname $str cvs print +( substitution revised, using )print dup/FontName known{dup/FontName get}{ +(unspecified font)}ifelse $str cvs print(. +)print}if}{exch pop}ifelse}{exch pop}ifelse end}bind def}ifelse end end +Adobe_CoolType_Core/findfont{$SubstituteFont begin $depth 0 eq{/$fontname 1 +index dup type/stringtype ne{$str cvs}if def/$substituteFound false def}if +/$depth $depth 1 add def end scfindfont $SubstituteFont begin/$depth $depth 1 +sub def $substituteFound $depth 0 eq and $doSmartSub and{currentdict/$Strategy +known{$Strategy/$BuildFont get exec}if}if end}bind put}if end end +%%EndResource +%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.13 0 +%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. +%%Version: 1.13 0 +systemdict/languagelevel known dup{currentglobal false setglobal}{false}ifelse +exch userdict/Adobe_CoolType_Utility 2 copy known{2 copy get dup maxlength 25 +add dict copy}{25 dict}ifelse put Adobe_CoolType_Utility begin/ct_Level2? exch +def/ct_Clone? 1183615869 internaldict dup/CCRun known not exch/eCCRun known +not ct_Level2? and or def/ct_UseNativeCapability? systemdict/composefont known +def/ct_MakeOCF 35 dict def/ct_Vars 25 dict def/ct_GlyphDirProcs 6 dict def +/ct_BuildCharDict 15 dict dup begin/charcode 2 string def/dst_string 1500 +string def/nullstring()def/usewidths? true def end def ct_Level2?{setglobal}{ +pop}ifelse ct_GlyphDirProcs begin/GetGlyphDirectory{systemdict/languagelevel +known{pop/CIDFont findresource/GlyphDirectory get}{1 index/CIDFont +findresource/GlyphDirectory get dup type/dicttype eq{dup dup maxlength exch +length sub 2 index lt{dup length 2 index add dict copy 2 index/CIDFont +findresource/GlyphDirectory 2 index put}if}if exch pop exch pop}ifelse +}def/+ +{systemdict/languagelevel known{currentglobal false setglobal 3 dict begin/vm +exch def}{1 dict begin}ifelse/$ exch def systemdict/languagelevel known{vm +setglobal/gvm currentglobal def $ gcheck setglobal}if ?{$ begin}if}def/?{$ +type/dicttype eq}def/|{userdict/Adobe_CoolType_Data known{Adobe_CoolType_Data +/AddWidths? known{currentdict Adobe_CoolType_Data begin begin AddWidths?{ +Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode +exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put +stringwidth 2 array astore currentfont/Widths get exch CC exch put}{?{def}{$ 3 +1 roll put}ifelse}ifelse end end}{?{def}{$ 3 1 roll put}ifelse}ifelse}{?{def}{ +$ 3 1 roll put}ifelse}ifelse}def/!{?{end}if systemdict/languagelevel known{gvm +setglobal}if end}def/:{string currentfile exch readstring pop}executeonly def +end ct_MakeOCF begin/ct_cHexEncoding[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09 +/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C +/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F +/c30/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42 +/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55 +/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68 +/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B +/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E +/c8F/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1 +/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4 +/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7 +/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA +/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED +/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def +/ct_CID_STR_SIZE 8000 def/ct_mkocfStr100 100 string def/ct_defaultFontMtx[.001 +0 0 .001 0 0]def/ct_1000Mtx[1000 0 0 1000 0 0]def/ct_raise{exch cvx exch +errordict exch get exec stop}bind def/ct_reraise{cvx $error/errorname get +(Error: )print dup( )cvs print errordict exch get exec stop +}bind def/ct_cvnsi{1 index add 1 sub 1 exch 0 4 1 roll{2 index exch get exch 8 +bitshift add}for exch pop}bind def/ct_GetInterval{Adobe_CoolType_Utility +/ct_BuildCharDict get begin/dst_index 0 def dup dst_string length gt{dup +string/dst_string exch def}if 1 index ct_CID_STR_SIZE idiv/arrayIndex exch def +2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub{dup 3 index +add 2 index length le{2 index getinterval dst_string dst_index 2 index +putinterval length dst_index add/dst_index exch def exit}{1 index length 1 +index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval +pop dup dst_index add/dst_index exch def sub/arrayIndex arrayIndex 1 add def 2 +index dup length arrayIndex gt{arrayIndex get}{pop exit}ifelse 0}ifelse}loop +pop pop pop dst_string 0 dst_index getinterval end}bind def ct_Level2?{ +/ct_resourcestatus currentglobal mark true setglobal{/unknowninstancename +/Category resourcestatus}stopped{cleartomark setglobal true}{cleartomark +currentglobal not exch setglobal}ifelse{{mark 3 1 roll/Category findresource +begin ct_Vars/vm currentglobal put({ResourceStatus} stopped)0()/SubFileDecode +filter cvx exec{cleartomark false}{{3 2 roll pop true}{cleartomark false} +ifelse}ifelse ct_Vars/vm get setglobal end}}{{resourcestatus}}ifelse bind def +/CIDFont/Category ct_resourcestatus{pop pop}{currentglobal true setglobal +/Generic/Category findresource dup length dict copy dup/InstanceType/dicttype +put/CIDFont exch/Category defineresource pop setglobal}ifelse +ct_UseNativeCapability?{/CIDInit/ProcSet findresource begin 12 dict begin +begincmap/CIDSystemInfo 3 dict dup begin/Registry(Adobe)def/Ordering(Identity) +def/Supplement 0 def end def/CMapName/Identity-H def/CMapVersion 1 def +/CMapType 1 def 1 begincodespacerange<0000>endcodespacerange 1 +begincidrange<0000>0 endcidrange endcmap CMapName currentdict/CMap +defineresource pop end end}if}{/ct_Category 2 dict begin/CIDFont 10 dict def +/ProcSet 2 dict def currentdict end def/defineresource{ct_Category 1 index 2 +copy known{get dup dup maxlength exch length eq{dup length 10 add dict copy +ct_Category 2 index 2 index put}if 3 index 3 index put pop exch pop}{pop pop +/defineresource/undefined ct_raise}ifelse}bind def/findresource{ct_Category 1 +index 2 copy known{get 2 index 2 copy known{get 3 1 roll pop pop}{pop pop +/findresource/undefinedresource ct_raise}ifelse}{pop pop/findresource +/undefined ct_raise}ifelse}bind def/resourcestatus{ct_Category 1 index 2 copy +known{get 2 index known exch pop exch pop{0 -1 true}{false}ifelse}{pop pop +/findresource/undefined ct_raise}ifelse}bind def/ct_resourcestatus +/resourcestatus load def}ifelse/ct_CIDInit 2 dict begin/ct_cidfont_stream_init +{{dup(Binary)eq{pop null currentfile ct_Level2?{{cid_BYTE_COUNT() +/SubFileDecode filter}stopped{pop pop pop}if}if/readstring load exit}if dup +(Hex)eq{pop currentfile ct_Level2?{{null exch/ASCIIHexDecode filter/readstring +}stopped{pop exch pop(>)exch/readhexstring}if}{(>)exch/readhexstring}ifelse +load exit}if/StartData/typecheck ct_raise}loop cid_BYTE_COUNT ct_CID_STR_SIZE +le{2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put +}{cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 +exch{2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop}for 2 +index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch +1 index length 1 sub exch put}ifelse cid_CIDFONT exch/GlyphData exch put 2 +index null eq{pop pop pop}{pop/readstring load 1 string exch{3 copy exec pop +dup length 0 eq{pop pop pop pop pop true exit}if 4 index eq{pop pop pop pop +false exit}if}loop pop}ifelse}bind def/StartData{mark{currentdict dup/FDArray +get 0 get/FontMatrix get 0 get .001 eq{dup/CDevProc known not{/CDevProc +1183615869 internaldict/stdCDevProc 2 copy known{get}{pop pop{pop pop pop pop +pop 0 -1000 7 index 2 div 880}}ifelse def}if}{/CDevProc{pop pop pop pop pop 0 +1 cid_temp/cid_CIDFONT get/FDArray get 0 get/FontMatrix get 0 get div 7 index +2 div 1 index .88 mul}def}ifelse/cid_temp 15 dict def cid_temp begin +/cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt{ +ct_cidfont_stream_init FDArray{/Private get dup/SubrMapOffset known{begin +/Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2?{ +currentdict dup/SubrMapOffset undef dup/SubrCount undef/SDBytes undef}if end +/cid_SD_BYTES exch def/cid_SUBR_COUNT exch def/cid_SUBR_MAP_OFFSET exch def +/cid_SUBRS exch def cid_SUBR_COUNT 0 gt{GlyphData cid_SUBR_MAP_OFFSET +cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub{ +exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch +cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll +GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put} +for pop}if}{pop}ifelse}forall}if cleartomark pop pop end CIDFontName +currentdict/CIDFont defineresource pop end end}stopped{cleartomark/StartData +ct_reraise}if}bind def currentdict end def/ct_saveCIDInit{/CIDInit/ProcSet +ct_resourcestatus{true}{/CIDInitC/ProcSet ct_resourcestatus}ifelse{pop pop +/CIDInit/ProcSet findresource ct_UseNativeCapability?{pop null}{/CIDInit +ct_CIDInit/ProcSet defineresource pop}ifelse}{/CIDInit ct_CIDInit/ProcSet +defineresource pop null}ifelse ct_Vars exch/ct_oldCIDInit exch put}bind def +/ct_restoreCIDInit{ct_Vars/ct_oldCIDInit get dup null ne{/CIDInit exch/ProcSet +defineresource pop}{pop}ifelse}bind def/ct_BuildCharSetUp{1 index begin +CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin/ct_dfCharCode +exch def/ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge{pop +0}if/cid exch def{GlyphDirectory cid 2 copy known{get}{pop pop nullstring} +ifelse dup length FDBytes sub 0 gt{dup FDBytes 0 ne{0 FDBytes ct_cvnsi}{pop 0} +ifelse/fdIndex exch def dup length FDBytes sub FDBytes exch getinterval +/charstring exch def exit}{pop cid 0 eq{/charstring nullstring def exit}if/cid +0 def}ifelse}loop}def/ct_SetCacheDevice{0 0 moveto dup stringwidth 3 -1 roll +true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto} +def/ct_CloneSetCacheProc{1 eq{stringwidth pop -2 div -880 0 -1000 setcharwidth +moveto}{usewidths?{currentfont/Widths get cid 2 copy known{get exch pop aload +pop}{pop pop stringwidth}ifelse}{stringwidth}ifelse setcharwidth 0 0 moveto} +ifelse}def/ct_Type3ShowCharString{ct_FDDict fdIndex 2 copy known{get}{ +currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup +maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known{get} +{pop pop ct_defaultFontMtx}ifelse/FontMatrix exch dup length array copy def +/Private get/Private exch def/Widths rootfont/Widths get def/CharStrings 1 +dict dup/.notdefdup length string copy put def currentdict +end/ct_Type1Font exch definefont dup 5 1 roll put setglobal}ifelse dup +/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put +rootfont/WMode 2 copy known{get}{pop pop 0}ifelse exch 1000 scalefont setfont +ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold{ +currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth +setlinewidth stroke}{ct_str1 show}ifelse}def/ct_Type4ShowCharString{ct_dfDict +ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup +ct_defaultFontMtx ct_matrixeq not{ct_1000Mtx matrix concatmatrix concat}{pop} +ifelse/Private get Adobe_CoolType_Utility/ct_Level2? get not{ct_dfDict/Private +3 -1 roll{put}1183615869 internaldict/superexec get exec}if 1183615869 +internaldict Adobe_CoolType_Utility/ct_Level2? get{1 index}{3 index/Private +get mark 6 1 roll}ifelse dup/RunInt known{/RunInt get}{pop/CCRun}ifelse get +exec Adobe_CoolType_Utility/ct_Level2? get not{cleartomark}if}bind def +/ct_BuildCharIncremental{{Adobe_CoolType_Utility/ct_MakeOCF get begin +ct_BuildCharSetUp ct_ShowCharString}stopped{stop}if end end end end}bind def +/BaseFontNameStr(BF00)def/ct_Type1FontTemplate 14 dict begin/FontType 1 def +/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def/Encoding +ct_cHexEncoding def/PaintType 0 def currentdict end def/BaseFontTemplate 11 +dict begin/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def +/Encoding ct_cHexEncoding def/BuildChar/ct_BuildCharIncremental load def +ct_Clone?{/FontType 3 def/ct_ShowCharString/ct_Type3ShowCharString load def +/ct_dfSetCacheProc/ct_CloneSetCacheProc load def/ct_SyntheticBold false def +/ct_StrokeWidth 1 def}{/FontType 4 def/Private 1 dict dup/lenIV 4 put def +/CharStrings 1 dict dup/.notdefput def/PaintType 0 def +/ct_ShowCharString/ct_Type4ShowCharString load def}ifelse/ct_str1 1 string def +currentdict end def/BaseFontDictSize BaseFontTemplate length 5 add def +/ct_matrixeq{true 0 1 5{dup 4 index exch get exch 3 index exch get eq and dup +not{exit}if}for exch pop exch pop}bind def/ct_makeocf{15 dict begin exch/WMode +exch def exch/FontName exch def/FontType 0 def/FMapType 2 def/FontMatrix +matrix def/bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if +def/Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{ +2 copy bfCount put pop}for def/FDepVector bfCount dup 256 lt{1 add}if array +def BaseFontTemplate BaseFontDictSize dict copy begin/CIDFont exch def CIDFont +/FontBBox known{CIDFont/FontBBox get/FontBBox exch def}if CIDFont/CDevProc +known{CIDFont/CDevProc get/CDevProc exch def}if currentdict end +BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if{FDepVector +exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul +def FontType 3 eq{/ct_FDDict 2 dict def}if currentdict end 1 index 16 +BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put} +for ct_Clone?{/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} +if FontName currentdict end definefont ct_Clone?{gsave dup 1000 scalefont +setfont ct_BuildCharDict begin/usewidths? false def currentfont/Widths get +begin exch/CIDFont get/GlyphDirectory get{pop dup charcode exch 1 index 0 2 +index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore +def}forall end/usewidths? true def end grestore}{exch pop}ifelse}bind def +/ct_ComposeFont{ct_UseNativeCapability?{2 index/CMap ct_resourcestatus{pop pop +exch pop}{/CIDInit/ProcSet findresource begin 12 dict begin begincmap/CMapName +3 index def/CMapVersion 1 def/CMapType 1 def exch/WMode exch def/CIDSystemInfo +3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs +(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop +(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1 +begincodespacerange<0000>endcodespacerange 1 begincidrange<0000>0 +endcidrange endcmap CMapName currentdict/CMap defineresource pop end end} +ifelse composefont}{3 2 roll pop 0 get/CIDFont findresource ct_makeocf}ifelse} +bind def/ct_MakeIdentity{ct_UseNativeCapability?{1 index/CMap +ct_resourcestatus{pop pop}{/CIDInit/ProcSet findresource begin 12 dict begin +begincmap/CMapName 2 index def/CMapVersion 1 def/CMapType 1 def/CIDSystemInfo +3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs +(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop +(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1 +begincodespacerange<0000>endcodespacerange 1 begincidrange<0000>0 +endcidrange endcmap CMapName currentdict/CMap defineresource pop end end} +ifelse composefont}{exch pop 0 get/CIDFont findresource ct_makeocf}ifelse}bind +def currentdict readonly pop end end +%%EndResource +Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end +%%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Image 65 dict dup begin put +/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +%%don't initialize AGMIMG_&customcolorimage, it wrecks havoc in a nested environment +%%AGMIMG_ccimage_exists not {/AGMIMG_&customcolorimage nd} if +/AGMIMG_&imagemask nd +/AGMIMG_mbuf () def +/AGMIMG_ybuf () def +/AGMIMG_kbuf () def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/idximg nd +/doc_setup +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage /colorimage ldf + }if + end + end +}def +/page_setup +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists {/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode [ Decode 1 get Decode 0 get] def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode [1 1] def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub} currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + { pop 1 } currenttransfer addprocs settransfer + }def + }ifelse + /img /imageormask ldf + /sepimg /sep_imageormask ldf + /idximg /indexed_imageormask ldf + currentdict{ + dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{ + bind + }if + def + }forall +}def +/page_trailer +{ + end +}def +/doc_trailer +{ +}def +/imageormask_sys +{ + begin + save mark + level2{ + currentdict + Operator /imagemask eq{ + AGMIMG_&imagemask + }{ + AGMIMG_&image + }ifelse + }{ + Width Height + Operator /imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix /DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix /DataSource load + AGMIMG_&image + }ifelse + }ifelse + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint{ + 0 get + dup /DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false + }ifelse +}def +/imageormask +{ + begin + SkipImageProc not{ + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator /imagemask eq{ + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{ + [/Separation /Black /DeviceGray {}] setcolorspace + /Decode [ Decode 1 get Decode 0 get ] def + }if + image + }ifelse + }{ + Width Height + Operator /imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix /DataSource load + AGMCORE_host_sep{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + knockout_image_samples + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + imagemask + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator /colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + MultipleDataSources{ + 4 {pop} repeat + /DataSource [ + DataSource 0 get /exec cvx + DataSource 1 get /exec cvx + DataSource 2 get /exec cvx + DataSource 3 get /exec cvx + /AGMCORE_get_ink_data cvx + ] cvx def + }{ + /DataSource /DataSource load filter_cmyk 0 () /SubFileDecode filter def + }ifelse + + /Decode [ Decode 0 get Decode 1 get ] def + /MultipleDataSources false def + /NComponents 1 def + /Operator /image def + AGMCORE_is_cmyk_sep{ + currentoverprint InksUsed current_ink not and{ + currentdict consumeimagedata + }{ + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }ifelse + }{ + currentdict ignoreimagedata + }ifelse + }{ + + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator /image eq{ + AGMCORE_host_sep{ + /DoImage true def + HostSepColorImage{ + invert_image_samples + }{ + AGMCORE_black_plate not{ + /DoImage false def + currentdict ignoreimagedata + }if + }ifelse + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys} if + }{ + image + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentoverprint InksUsed current_ink not and{ + }{ + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }ifelse + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }if + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + /MappedCSA CSA map_csa def + begin + SkipImageProc not{ + save mark + + AGMCORE_avoid_L2_sep_space{ + /Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get /DeviceCMYK eq and + currentdict/Components known and + Name () ne and + Name (All) ne and + Operator /image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load /exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + } /exec cvx + ] cvx bind + MappedCSA 0 get /DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator /imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentoverprint InksUsed current_ink not and{ + }{ + currentdict/ImageMatrix get concat + knockout_unitsq + }ifelse + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name (All) ne and{ + level2{ + [ /Separation Name [/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + } bind + ] AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + currentdict imageormask_sys + }{ + currentdict + Operator /imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentdict consumeimagedata + currentoverprint not Name (All) eq or{ + gsave + knockout_unitsq + grestore + }if + }ifelse + }ifelse + }{ + currentcolorspace 0 get /Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentoverprint + MappedCSA 0 get /DeviceCMYK eq and + Name inRip_spot_has_ink not and + Name (All) ne and { + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }if + end + end +}def +/imageormask_l2_overprint +{ + + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN [ + AGMIMG_c 0 ne {/Cyan} if + AGMIMG_m 0 ne {/Magenta} if + AGMIMG_y 0 ne {/Yellow} if + AGMIMG_k 0 ne {/Black} if + ] /DeviceCMYK {}] setcolorspace + + AGMIMG_c 0 ne {AGMIMG_c} if + AGMIMG_m 0 ne {AGMIMG_m} if + AGMIMG_y 0 ne {AGMIMG_y} if + AGMIMG_k 0 ne {AGMIMG_k} if + setcolor + }{ + /Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def + [/Indexed + [ + /DeviceN [ + AGMIMG_c 0 ne {/Cyan} if + AGMIMG_m 0 ne {/Magenta} if + AGMIMG_y 0 ne {/Yellow} if + AGMIMG_k 0 ne {/Black} if + ] + /DeviceCMYK { + AGMIMG_k 0 eq {0} if + AGMIMG_y 0 eq {0 exch} if + AGMIMG_m 0 eq {0 3 1 roll} if + AGMIMG_c 0 eq {0 4 1 roll} if + } + ] + 255 + { + 255 div + + mark exch + dup dup dup + + + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ] setcolorspace + }ifelse + + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation /Black /DeviceGray {}] setcolorspace + gsave + /Black + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Yellow /DeviceGray {}] setcolorspace + gsave + /Yellow + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Magenta /DeviceGray {}] setcolorspace + gsave + /Magenta + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Cyan /DeviceGray {}] setcolorspace + gsave + /Cyan + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + } if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +} def +/indexed_imageormask +{ + begin + save mark + + currentdict + AGMCORE_host_sep{ + + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget /CSA get map_csa overprint_plate not{ + knockout_unitsq + }if + }{ + AGMCORE_is_cmyk_sep{ + Operator /imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_image_samples + imageormask_sys + }{ + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + imageormask + }{ + Operator /imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + + currentcolorspace + dup 1 /DeviceGray put + dup 3 [ + currentcolorspace 3 get + { + exch 4 mul 4 getinterval {} forall + AGMCORE_get_ink_data 255 div 1 exch sub + } /exec cvx + ] cvx put + setcolorspace + + currentdict + Operator /imagemask eq{ + AGMIMG_&imagemask + }{ + AGMIMG_&image + }ifelse + + end end +}def +/OPIimage +{ + dup type /dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode [0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc {false} cdndf + /HostSepColorImage false cdndf + /Decode [ + 0 + currentcolorspace 0 get /Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ] cdndf + /Operator /image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type /dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode [/customcolor_tint AGMCORE_gget 0] def + /Operator /image def + /HostSepColorImage false def + /InksUsed [] def + /SkipImageProc {false} def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + bdict + /Name AGMIMG_colorAry 4 get + /CSA [ /DeviceCMYK ] + /TintMethod /Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components [ AGMIMG_colorAry aload pop pop ] + edict + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + dup 4 get map_alias{ + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + }{ + AGMIMG_&customcolorimage + }ifelse + }bdf +}def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + } if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage + end + } def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{ + + { + 255 mul round cvi GrayLookup exch get + } currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get /DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer + currentdict imageormask + }{ + + currentcolortransfer + {AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + + MappedCSA 0 get /DeviceGray eq { + {255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get /DeviceCMYK eq { + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + + AGMCORE_get_ink_data currenttransfer addprocs settransfer + + currentdict imageormask_sys + + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{ + + {HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer + imageormask + }{ + + MappedCSA 0 get /DeviceGray eq { + {HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get /DeviceCMYK eq { + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div} exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + + AGMCORE_get_ink_data currenttransfer addprocs settransfer + + currentdict imageormask_sys + + end end + }def +}if +end +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +%ADOBeginClientInjection: DocumentProlog End "AI10" +%ADOEndClientInjection: DocumentProlog End "AI10" +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +%ADOBeginClientInjection: DocumentSetup Start "AI10" +%ADOEndClientInjection: DocumentSetup Start "AI10" +Adobe_AGM_Utils begin +2 2010 true Adobe_AGM_Core/doc_setup get exec +Adobe_CoolType_Core/doc_setup get exec +Adobe_AGM_Image/doc_setup get exec +%ADOBeginClientInjection: DocumentSetup End "AI10" +%ADOEndClientInjection: DocumentSetup End "AI10" +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: trapped.eps 1 +%%EndPageComments +%%BeginPageSetup +%ADOBeginClientInjection: PageSetup Start "AI10" +%ADOEndClientInjection: PageSetup Start "AI10" +Adobe_AGM_Utils begin +Adobe_AGM_Core/page_setup get exec +Adobe_CoolType_Core/page_setup get exec +Adobe_AGM_Image/page_setup get exec +%ADOBeginClientInjection: PageSetup End "AI10" +%ADOEndClientInjection: PageSetup End "AI10" +%%EndPageSetup +Adobe_AGM_Core/AGMCORE_save save ddf +1 -1 scale 0 -224.958 translate +[1 0 0 1 0 0 ] concat +mark +/0 +[/DeviceGray] add_csa +/CSA /0 +/1 +[/DeviceCMYK] add_csa +/CSA /1 +/2 +[/DeviceRGB] add_csa +/CSA /2 +cleartomark +800 path_rez +% page clip +gsave +newpath +gsave % PSGState +0 0 mo +0 224.958 li +350.831 224.958 li +350.831 0 li +clp +[1 0 0 1 0 0 ] concat +%ADOBeginClientInjection: BeginPageContent "AI10" +%ADOEndClientInjection: BeginPageContent "AI10" +.45 lw +0 lc +0 lj +10 ml +[] 0 dsh +true sadj +26.5552 197.969 mo +31.0552 197.969 li +343.055 197.969 mo +338.555 197.969 li +26.5552 178.769 mo +31.0552 178.769 li +343.055 178.769 mo +338.555 178.769 li +26.5552 159.57 mo +31.0552 159.57 li +343.055 159.57 mo +338.555 159.57 li +26.5552 140.37 mo +31.0552 140.37 li +343.055 140.37 mo +338.555 140.37 li +26.5552 121.169 mo +31.0552 121.169 li +343.055 121.169 mo +338.555 121.169 li +26.5552 101.969 mo +31.0552 101.969 li +343.055 101.969 mo +338.555 101.969 li +26.5552 82.77 mo +31.0552 82.77 li +343.055 82.77 mo +338.555 82.77 li +26.5552 63.5698 mo +31.0552 63.5698 li +343.055 63.5698 mo +338.555 63.5698 li +26.5552 44.3696 mo +31.0552 44.3696 li +343.055 44.3696 mo +338.555 44.3696 li +26.5552 25.1694 mo +31.0552 25.1694 li +343.055 25.1694 mo +338.555 25.1694 li +26.5552 5.96924 mo +31.0552 5.96924 li +343.055 5.96924 mo +338.555 5.96924 li +26.5552 197.969 mo +26.5552 193.469 li +26.5552 5.96924 mo +26.5552 10.4692 li +89.855 197.969 mo +89.855 193.469 li +89.855 5.96924 mo +89.855 10.4692 li +153.155 197.969 mo +153.155 193.469 li +153.155 5.96924 mo +153.155 10.4692 li +216.455 197.969 mo +216.455 193.469 li +216.455 5.96924 mo +216.455 10.4692 li +279.755 197.969 mo +279.755 193.469 li +279.755 5.96924 mo +279.755 10.4692 li +343.055 197.969 mo +343.055 193.469 li +343.055 5.96924 mo +343.055 10.4692 li +26.5552 197.969 mo +343.055 197.969 li +343.055 5.96924 li +26.5552 5.96924 li +26.5552 197.969 li +cp +29.1948 113.91 mo +31.835 105.089 li +34.4751 95.8501 li +37.1147 87.27 li +39.7549 79.4692 li +42.395 71.7896 li +45.0352 63.5698 li +47.6748 55.4692 li +50.3149 51.6294 li +52.9551 54.5093 li +55.5947 60.2095 li +58.2349 63.8696 li +60.8149 65.0093 li +63.4551 65.3101 li +66.0947 67.5298 li +68.7349 72.3892 li +71.375 76.6499 li +74.0151 77.7896 li +76.6548 76.6499 li +79.2949 77.2495 li +81.9351 81.3296 li +84.5747 85.77 li +87.2148 88.8296 li +89.855 90.3892 li +92.4951 91.4097 li +95.1348 95.0093 li +97.7749 103.35 li +100.415 115.169 li +103.055 128.669 li +105.695 142.709 li +108.335 154.589 li +110.975 161.729 li +113.615 164.969 li +116.255 165.87 li +118.895 163.889 li +121.535 158.79 li +124.115 153.509 li +126.755 150.269 li +129.395 147.45 li +132.035 144.15 li +134.675 142.169 li +137.315 142.469 li +139.955 142.589 li +142.595 140.969 li +145.235 139.53 li +147.875 139.349 li +150.515 139.889 li +153.155 140.849 li +155.795 142.049 li +158.435 143.25 li +161.075 144.209 li +163.715 145.049 li +166.355 146.009 li +168.995 147.089 li +171.635 148.349 li +174.275 149.189 li +176.915 149.129 li +179.555 148.41 li +182.195 146.37 li +184.835 142.83 li +187.415 138.45 li +190.055 132.75 li +192.695 125.429 li +195.335 116.849 li +197.975 106.589 li +200.615 94.5298 li +203.255 81.2095 li +205.895 66.2095 li +208.535 49.7095 li +211.175 34.7095 li +213.815 23.73 li +216.455 18.0298 li +219.095 18.5698 li +221.735 23.9097 li +224.375 31.1694 li +227.015 40.1099 li +229.655 51.5093 li +232.295 63.6899 li +234.935 73.6499 li +237.575 78.9897 li +240.215 82.0493 li +242.854 87.9897 li +245.495 96.3296 li +248.135 102.389 li +250.715 104.61 li +253.354 103.469 li +255.995 100.469 li +258.635 97.7095 li +261.275 95.4897 li +263.915 93.0298 li +266.555 90.8101 li +269.195 90.9292 li +271.835 96.8101 li +274.475 108.269 li +277.115 116.79 li +279.755 116.79 li +282.395 114.57 li +285.035 114.03 li +287.675 114.75 li +290.315 117.509 li +292.955 120.389 li +295.595 121.29 li +298.235 120.089 li +300.875 118.65 li +303.515 119.129 li +306.155 121.769 li +308.795 123.929 li +311.435 123.929 li +314.015 123.089 li +316.655 122.309 li +319.295 121.65 li +321.935 121.169 li +324.575 120.689 li +327.215 121.29 li +329.854 124.11 li +332.495 128.309 li +335.135 131.129 li +337.775 130.11 li +340.415 126.45 li +343.055 121.169 li +false sop +0 0 0 1 cmyk +s +[.9 2.7 ] 2.7 dsh +26.5552 121.169 mo +29.1948 130.65 li +31.835 136.41 li +34.4751 138.03 li +37.1147 138.03 li +39.7549 140.37 li +42.395 147.629 li +45.0352 159.209 li +47.6748 166.83 li +50.3149 151.53 li +52.9551 125.61 li +55.5947 119.309 li +58.2349 123.33 li +60.8149 126.509 li +63.4551 136.049 li +66.0947 153.15 li +68.7349 168.87 li +71.375 173.61 li +74.0151 168.929 li +76.6548 163.95 li +79.2949 164.729 li +81.9351 170.009 li +84.5747 176.429 li +87.2148 181.29 li +89.855 182.969 li +92.4951 181.11 li +95.1348 176.49 li +97.7749 170.25 li +100.415 163.349 li +103.055 158.309 li +105.695 160.349 li +108.335 167.07 li +110.975 166.53 li +113.615 159.089 li +116.255 151.709 li +118.895 145.169 li +121.535 139.53 li +124.115 134.37 li +126.755 129.03 li +129.395 123.15 li +132.035 116.849 li +134.675 110.429 li +137.315 104.25 li +139.955 98.4292 li +142.595 93.0298 li +145.235 88.0493 li +147.875 83.6694 li +150.515 79.8296 li +153.155 76.7095 li +155.795 74.3101 li +158.435 72.8101 li +161.075 72.27 li +163.715 72.8101 li +166.355 74.2495 li +168.995 76.3501 li +171.635 78.2095 li +174.275 76.4692 li +176.915 71.3101 li +179.555 69.5698 li +182.195 72.5698 li +184.835 76.1099 li +187.415 78.8696 li +190.055 80.6099 li +192.695 81.3892 li +195.335 81.2095 li +197.975 80.1294 li +200.615 78.0894 li +203.255 75.6294 li +205.895 74.0093 li +208.535 87.3892 li +211.175 122.969 li +213.815 152.129 li +216.455 157.65 li +219.095 142.169 li +221.735 110.729 li +224.375 87.27 li +227.015 80.4292 li +229.655 79.1694 li +232.295 79.4097 li +234.935 79.77 li +237.575 79.9497 li +240.215 79.9497 li +242.854 79.6499 li +245.495 78.8101 li +248.135 77.0698 li +250.715 74.6694 li +253.354 73.1099 li +255.995 72.6899 li +258.635 71.9097 li +261.275 68.73 li +263.915 64.4692 li +266.555 61.23 li +269.195 61.6499 li +271.835 78.4497 li +274.475 115.53 li +277.115 150.87 li +279.755 155.429 li +282.395 126.15 li +285.035 94.8296 li +287.675 82.2896 li +290.315 81.2095 li +292.955 85.4692 li +295.595 92.9097 li +298.235 98.73 li +300.875 101.49 li +303.515 103.889 li +306.155 107.189 li +308.795 109.29 li +311.435 107.61 li +314.015 102.57 li +316.655 96.9897 li +319.295 93.0298 li +321.935 90.9292 li +324.575 90.0894 li +327.215 90.5093 li +329.854 92.1294 li +332.495 94.1694 li +335.135 95.73 li +337.775 98.0698 li +340.415 104.009 li +343.055 113.669 li +0 0 0 1 cmyk +s +0 0 0 1 cmyk +%ADOBeginSubsetFont: CMR10 Initial +%!FontType1 +15 dict begin +/FontInfo 15 dict dup begin +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def +/version (1.00B) def +/FullName (CMR10) def +/FamilyName (Computer Modern) def +/Weight (Medium) def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end def +/FontName /CMR10 def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put + def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ] def +/FontBBox { -251 -250 1009 969 } def +/StrokeWidth 0 def +currentdict end +currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC9EBBC6A5E +2825687306A156DACC32FBF07CD53FCFA5F8BEB4C85C022641C2817904D210EE +C1B9CB391931A7DA79E981F6D449067CB22BBBC1C7E17F31494A030C64C3D168 +01AD7EA9844289C5FBF13E87EB38D47EFECDFD90987CE63AEE2F73A41DE9D88E +47972B7D71DFE3C0971C15A0A2EA71DB75E8BDC8C575FCE75767F0757BD4C3C5 +8EF2FE5165B8546C9297B1E83F4F63C96D58875DA6126871C35CA9D15DBD993F +7D0BD1B4DC8626DB81302AAF7356FB03F47088CE2CB3286EB983DDA2991BC663 +5973DCE46815F4B60A24382B233BB84754A5C526225DC5349CB18A7C96EA36E8 +F5E2E2754F48FE3B3020E9F50F70851D2735B6719F62356DE8E5E916AE20EE93 +427903DDDC96BCD60BA6C59B037ABDEC46B4008E9B5DF2C9D01297D4A122A0F8 +6C8BAE2B359D4BF40ED7A1031ECACD56FBE67A7E72D541649F1F749B187E29D9 +542ABF6806E2E91A0408810E2BD606E7DBBAE0674D6DF02BE443924D2BCB22E1 +85C2B0E1C55CC6B5D3057B8F79B227789C520EDD2029F40BA4A3FCF65D10FA8F +B90F9D46450DFBC1923FD6DA17282BC1A49A38AD4669ADB92F873EA77C99A192 +50D60E5754E112E71CE263422A5ADBA135FB0C6AACC5A47A0DAE1EB40D249250 +A5DC6C59D41ECD49A47195546E6B6E0A62A06F2A7B4528EA64F53DDD67FEBE8B +5476104F2FC73A5E3A59D4C948F333C99D54671C77D9EEB833EA8CAF49CE7EAA +8AEA6E0359A263A38C278B06067BD84053B2D560A4311E8CC288DF51553F7607 +648F0F1C81F312892A3A600DC36E4D01B09E318D59C494C1BBE25167CE795308 +4EA5E32E37CFBAF7ED93B13A553402E7188BF65E6F9F3296991250F94DF9CEED +41FA1950ACFD14CA8BCDED08D28AB569F754D348CF5FC3B6BCB26684B09E8805 +EF7E361AC11F28204B1BE19AAD2FE5B5B95E052FD3C289BBBA0463A7B30BB859 +18914712D5194D295075DA6FDCB96141AC601647ECAB3B278A4F628404F9C391 +05E6504F2B91264C087E5F519EF2ED0425E35A5ED368966877280DDE40E4FAF8 +CE03EF454CC513F64414767391D8A718D73E914CB8AC60C9D3E9539E30E13EF3 +181ECC26BC54CF1950BB60D7CA54CB6A16ABEE8C469C58C43AE3C446D16B2974 +82B9B6D597A141BE668B1DA20DD50525397B98068A75879484415335EF2D584A +A5E9D0630CAA8750E7E97B24506F59C9326494B7E651BF17B28BF84294FD3BF7 +FF5EAD7954A46741339F777C5E12F4B89A040E921BD2D82ED4839C77E28A5BDC +E6A7E41445BDD12CF80BEF764AE950D65189C2EFBA39301A54B03D5F27E9BBB6 +782FF494ACFDE28301FCF5292DE58FFAFE6A7045C500B60B0E04D9B569C33846 +074B0C1BBF762BF87976DE5A98F7336AEBC0603038A499FFA81E65BFCF3CAB0A +8F3DCC0BFFAF39D5E8DA57C9CFD34BF377544AFABCBC64E6F04267F756ADAF39 +00C048B2EA33094CE5F42247B5AE637741F40689803C895C958DC8533CABA3BC +EE583CD030DEC4268865645C31063BD5716730019F95EE55D7C8CD3D02205210 +3E7208EB42347FEA68F177ECBE1EB8B005AE132E24FCD4A95CCC02A12792B52A +CE43AE686784A391C33C304B389DC05B3AD3336750ADC2C032B535DD9F41BB5F +D3F076990E23187FE140D00AC52072F4C688808D5274D9C2D3C8D8C6EBAABFDB +E2D63B96DAB570D76855C6385862A97BDF202D7A04D8747192E18181BE10823C +D83FFD4D164F289BFA91FED750F6EF21A3FFAEABECDC9DC17090A3EA16006502 +887AD5B9114F53388B3317F886F017FC4058C4B718BB11C8AB7890984891D124 +7291B405DD09F4E6A42B391D7A78EA85DF24C7CAE18F81E488B026C59B8466C0 +2B25A2D943C07C9CE76EA2C4C81EB282AB2AB80D42223FAD88FF31A453EF5789 +CA710ABAF192B50442D4F93D3B03DE1D432360F038C5025A6D8BA778A796551D +A9E56249E376CBF8643899E843B8E3ABA1840037669FB79E5B6AD1CFA4A39282 +A90958DB138F4C889E180491BE947140BF5B03AE5AF5D290A0AE4EAEFA32CC13 +1DFBEC1B982A54DAD9CFCA1E300BBABD8A0D21A89A280D638AD7477C902B9475 +B555BE0E8C6AE706CDDB82891FC7F76DA687687DC35167C42A11755BE15EB393 +BEC538A688A383F44657F6BDCFDB42B18D9C1B5977613D0C3325C3E9CF76B22F +0C7947C0882BB6688D24EFB4C8FD3E36EB439389BCB6B813D3EA204E9ED7A524 +70C8D8915378044B0B3CA8708C60E1B40D45E57D1E67756139DC1625923E36CD +1996EADF2B3E7D2786EB7811402571B8307DB2B54FE268F85F3575101EEDA940 +1D281D61EA152703E0304706288F4218F8A2EE6243DB31B229DF7725A06BE466 +26B005DEFE691CAEDC0464DDF4E9781EE1EA6D2A23FADB81B29F24DECF70F640 +113012DD1200F01893227A0FDA0F19E389E62CC3EE5DE738728B86D3CC7C47EC +ED72C0B4D27758184A98FC733B7726F8682A2E3AA550F6B960308B93948AA196 +CD2070DFB0B3A796E05987A198397CD570D1B319C44D9DE7702265D080952094 +3A6460BCE9DDBAD081255225809F465EFC90D818FBB484E7658A060C1EBD1312 +B3D785564EC623EBD908852C14DC109073B4199D9471663CBE7D87179537C9DE +54B48BAC479B4AA1547751B8A56B1072028902BCE1D3CCDF7DF86D3D3B6D3ACE +7FC6193FB65A1BBB349A53A9789C56E677A73BDEC7FDEF2A5DCC7F8CADC4CCA5 +FDA022386EC727AECF812BECA927F3690BE61621373FF326584DB30C137CE7C5 +65BCE2152C0739F84337F74599284188D97D2DB7478F730E94658BE915B0C114 +C43F287D5976CCBD3CEDE368F429B1EB40C58BEE4464E9F0E3D5205B62F93BEE +DC232B2DC5D7B77E1878946D3C3642441B022660880CA076B6E47893A3B539DF +0B9D0A7B4CBB44FAC72EBD244FAC28858656EFF791CF966071CEF7295A41843F +7392CCA8B960A4E19ADF34870AEAADF7CAB6ECF3482C943C11DEBB59EDB1E902 +E1B043B68917C9E260A861AF1A20F5DDC2E1C8EB61FF3D6D783D9577E7DDF53E +E99A3576DE64E6B0CD5D84F139AEE1DA98ED1CD3418D4665CE28D8FAF49CA36B +EDF90CD951CF34FC0C173F2E36A30B28615ECA115B2271A928084C577C23CA40 +38C67000DD3E6763458BD959C97A5F90D79955A10F1B954BEAF874F48EB79F53 +2A3965CA392C7D9DF6E2FB97144658CA0EF124EA0A501E56550D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/CMR10 findfont /Encoding get +dup 32 /suppress put +dup 46 /period put +dup 48 /zero put +dup 50 /two put +dup 51 /three put +dup 53 /five put +dup 54 /six put +pop +%ADOEndSubsetFont +/CMR10*1 +[ +32{/.notdef}repeat /suppress 13{/.notdef}repeat /period /.notdef /zero /.notdef /two +/three /.notdef /five /six 201{/.notdef}repeat +] /CMR10 nfnt +/CMR10*1 findfont [10 0 0 -10 0 0 ]mfnt sfnt +15.3037 124.889 mov +( ) sh +17.5542 124.889 mov +(0) sh +9.55273 67.2896 mov +(0.3) sh +9.55273 9.68994 mov +(0.6) sh +25.4297 209.189 mov +(0) sh +84.3237 209.259 mov +(0.5) sh +338.053 209.253 mov +(2.5) sh +%ADOBeginSubsetFont: CMSY10 Initial +%!FontType1 +15 dict begin +/FontInfo 15 dict dup begin +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def +/version (1.0) def +/FullName (CMSY10) def +/FamilyName (Computer Modern) def +/Weight (Medium) def +/ItalicAngle -14.0350036 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end def +/FontName /CMSY10 def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put + def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ] def +/FontBBox { -29 -960 1116 775 } def +/StrokeWidth 0 def +currentdict end +currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC8DC423323 +00A152553EC9C9C51591C81C6325A8F1E39454C5C5CD7DD32FFDCAA0C98A471D +864F21BA3C1B9AB1A487DF489FCED13A759AC6D527220B09E5C662269D43162B +1C47D4A5CBFB0633655E0B882B6CB0B8386CBC5142ED5E3581051D6952C2D60E +CC016F88AA5C2C88A02AD3E7621E87AFA4B88E9149CBFC744342E35BF29B4E2D +48E22FB32FF8C291AD36157A0297D947D6968BAADE6D7B46AE1CD0BE62E5CBCB +3236C416C44714636EADBE662C5098B696442BF89CA6B50C0916108B2DAE785B +709A0D184945621A35283363CE2169E40081B717DB04ADA9BD63B6AAC7D50E91 +507DA9252D8141BEF4C6ED865AE979AF2F5D2F9CA1AB7EB81B7768D756C53AF0 +03668E24FE4CF11ED8A482B438928C66303737C198DC6366A916FA864AF9B728 +FA06F07CC50CD1CDCF8B99941F6F66ECC8E075518AB25A8740916DCBDF7F7095 +6B1D7B5F93B0B4D89BB9442F8E3094C4F91B4C0B1F27A30C919B11653F825A75 +35DC8B2FACAD0C72030F1E38F5DFDDE8E640CC709E3E6540B6CF92785AFA3B4F +1EE7835B6C2BFED4FECDA364F11B25C289AC44B78F4559BEFC98C52D67908AE0 +DF2AD10D971418D66334EBD2CB6EBA28F4823BA3D9A03D54F54A0F7B2C224637 +4AAA7C575AB09E97543173E7E6E1B4C23FC1D16382998FD057613746B6B8316D +B68B86259B6E885F944CF274CBC94BE9259F547C41C4A5B7D184C083E536561F +829DCF1107246F78D0B16FECC5B704B22CB768C40F6E7664D23E610FAD98BCB1 +EA4B902273356D60931469F45B9BA0F81A58D484E14D21161A36DD65E8253208 +FA50FBF26DCE3963FA600D870F999DD4EE2E369F04795E783E2AA06F5BAC4C3F +36E49C55027966268D6458E7BC046C15AAE5F39F554CE8E5F56FE649C03CA00D +16B548E1E365A7BFE5071270ABDB6653846547607040AEC643100FC2D0FCAB22 +B2C2E6B3A098397C4949C86101E94215AD3C46B1F8571F4A950688EC0DD5C25C +D0B4F266D04FA7B52555E09FBE82147B84C118FE4D9AABF485170708D69F6F25 +9BDC66538DC6BFD24A3A66A9924CF5D6AFC6078D6097C3A97541291882A63797 +E40E846E44E7422BB2B6A9F6B0DD4902082CBB0CAE50EB73313ECD2F6CB261AF +94BC89264E5EA8E7E0BC8B39C4B2FF6BE20EA925E7F7A9BE763FF29D958D50CD +F57528257E9BBFBEBB36A234C7F183641A682C5FDCF733AB047677DA34CBB0F4 +23BD54EC8C116946585239A13A50E99ED863290F10C9882A64DC0E39A85A301E +932CEF849E94F7F6580C1EBBB195372FAE4B0D48F583761F43F9F8C99FD5BE9C +F50D22B1CA7637432B7E804E44DCDCAFE16928A63CA1A507FC68102880B10DA7 +63D22909765816492E0CEC39FA868C7870A5BD15347947E20EC7AD37AE9794B8 +7258B702FE9069BE496869009006DC9DEFBF1ACFB4A6E3C27E4F70251849B9EB +C04B790D50BBEF6927C9E4EDC08FCC56F2594D1AC985EAD9FC9917A08C1B6C44 +5308CE7BF1CB600E4E4E2B7E804E44AEB01716F69C6429EB1B4CF8F1D6AB6392 +33AD7182B030119444D16F1E9525EE93FB38E44BC98D50EC6846A6B7692E677C +75260377EB25B21E27424AE9ADFD8FDD3E718865CBD2758BAFA69580CA3E2E03 +1B60CD2B04C1D5D89DA2648FC4D2B4E7734380F136B5BD52FBDAF232A928D3FF +9ED3FB1455684C39949B3B92BF39F3F08DDADA430426B28A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/CMSY10 findfont /Encoding get +dup 161 /minus put +pop +%ADOEndSubsetFont +/CMSY10*1 +[ +161{/.notdef}repeat /minus 94{/.notdef}repeat +] /CMSY10 nfnt +/CMSY10*1 findfont [10 0 0 -10 0 0 ]mfnt sfnt +1.72656 182.49 mov +(\241) sh +/CMR10*1 findfont [10 0 0 -10 0 0 ]mfnt sfnt +9.50427 182.49 mov +(0.3) sh +0 0 0 1 cmyk +%ADOBeginSubsetFont: CMTI10 Initial +%!FontType1 +15 dict begin +/FontInfo 15 dict dup begin +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def +/version (1.00B) def +/FullName (CMTI10) def +/FamilyName (Computer Modern) def +/Weight (Medium) def +/ItalicAngle -14.0400085 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end def +/FontName /CMTI10 def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put + def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ] def +/FontBBox { -163 -250 1146 969 } def +/StrokeWidth 0 def +currentdict end +currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC8DC423323 +00A152553EC9C9C51591C81C6325A8F1E39454C5C5CD7DD32FFDCAA0C98A471D +864F21BA3C1B9AB1A487DF489FCED13A759AC6D527220B09E5C662269D43162B +1C47D4A5CBFB0633655E0B882B6CB0B8386CBC5142ED5E3581051D6952C2D60E +CC016F88AA5C2C88A02AD3E7621E87AFA4B88E9149CBFC744342E35BF29B4E2D +48E22FB32FF8C291AD36157A0297D947D6968BAADE6D12889CFE94CA2AFE5965 +C1F3C7AD853E0F19290D476FA36FCACCD69FD35D2FEC3B172ACA116F730A128F +E17CB115347C86EDF7882309E5E25AC4810411DCE838A42E00DF8E355278394A +47AAD27459FA5C07F773208783E65D804F515960A227D346BFB03E9B50E80B36 +50D11D1BE8C78BE80B3C913175C1FA58D56923DFA8CB9F72CC858FE7E56C8110 +EF0AFEB46276123016F222C5B0C3D6FD41E4F3EFD921054FB115A1A0E1F17605 +0817A40EC6D9885219DE4C7920CE029BE85886CFB15F9BAF2B38774BDAAD2772 +DB3FD73579039E3A10E06C189713826994493E7FE3578CFC71ADE98CBB1A40F5 +993192E856C753C2035063D8DCA50B0FC420DE633D7E85388D9028F06592740B +54EF991ECC1A24C4E952FDA24052E86ABEDA102EF53D648341154284679E6B3E +661002EE53279987D5B8D097AB86223598E052F89F7035220A5A8766C76532A1 +3232957AF9F700597DBDF7C98F7DBB10F3A82B7CDDEEC91E9BA57C168B3F2D8E +91577183B62BACD73513873A30783F8CE2B939A55F631A894F90223536617D01 +06A50514D8E55DCBF7F40F085A4CD746A06FB99A79DFB9EF031378B69841489B +0607BD172F7BDCF3A6801C916C97E01F1FF8925A27DB92DCF198FA39D5E5B05D +2F40A2422FE7B5636BD3DD57CEC76142697F99D02E82FEDFD534183EFBF0DFF3 +7512BE3B43058299F34CACFBE5C1876E6B29CA02284B3AE28A094CB0F50E4C51 +3FA068ECCE64A6110BEDA207E80DDBEF44CB457BE4171978740AAF232934CBED +F80C51D030F7AAFE015D979854D539E922561CA4F364A52525DA7D2BBAF878E1 +A19430E143E6613CE95AF6BB1FD9914F54691990743F53B591F45C6E2266AF4B +A2E235270692F074CE70647DA16D23F3B6C8DAA1D3713838FF5052D129873CC2 +8293134EED1AD31755EFCC4DE013B3326F1ABC517F2D3636CCA3F03BFBD9B28B +D6BCDA03E62E3A1846C51B3FD8EDF9032FDC8E94D081C2F2A56D68878D1870A2 +3879606F3E0F4C10CC53EC667E73359CD8293BB087067526189F17B8819D4A90 +311E65E4CDDEA42763CBB5D5102B45FBFB1146981B451840928DF7FF7989E203 +76A9B114AE41EC758B354C1244B06C872C0658F0FE37D0B23767D06287E7E38C +6D1918B98CB3037C5529587894F46669D3CE32F5EFCE7E85BD2F46EC9EBF5A6C +AE59415C1979163BDC4EB2AD04AFC4CDCC3C33096D5D9493FD75755EFA89768E +0F838B61722608E23E6FCA33F322A3630D4EC6DC47701283A097A045FA0F0ACF +959BA59F70931AECFB53AB447F207C768A0318369EF2BD862447BBC8C3059B9B +FA70465841929A4A75C7E20A812D7F4C96DA7EE91116E149414F8D38566A5284 +68B1399CA07F709FBE339962A15DA1E649609FFAF835D07FDAE6E024A74CD459 +3FE2506AA132247BB4F9E00394DE17C39940F335291915032D59F41BE1161A0E +37DE8995D698E0F1E915D5285143666ED67EFBF4B36D311C08F5A23CC722CAEF +D77CD575F1582FEBA4CEEB91BF8F06684BE795F38529936271D0B97D34185BBE +19C46E9C97D4A27C9B4033363502EE65032B8C722ADD5EF59E7039BF4DF887B1 +21F836D6787B93D0FCAACE5097B168C4CAE26671B603073FAE6DDAAD1C54AE63 +BED4D04810B109DA1F64D3A212B50E3783DA2717D84DA9D4D269AB38CB74E59D +7C01A7C1BE36E3BFF82C226C4D1F7F5BDAE9862C08F4539566D66B6E4A5F0213 +FC709D289A3087F86B340F6A0D139A95EE8FD1890CD99157458A380D0ED3ADBD +B3E2CAB733976FE6B8DD5326E47788F4CE5CE085900B809900B610956224C029 +8767DA63E4AEC0F0F439C066374683D64EE2D190F9428575D81966C8B7E98D59 +7272FA42148943A6F9AD230D6B3FA2C77FC449D8516246E65DD71474FE6FFE86 +D983A85CB7F55713DFDA7EAD250B807588FA6E0558ADE5B9CCC56F3253878CC2 +365EDF09BE19B273BAE1F84F8A4860252AECF2CADA16101122BB4F86B78F3A2E +CBC721828E80EAC979EB9267148D912D2EA669D4380C7BAF4943D86E51C87726 +EAC493814933C76C7BBD0DA0B9CA48E373B07D6F4057972B24244302E9B386C7 +412DD4F0F1603EDCE099FA43168503A9A20785DA0542CF7B453D59C3EBA5E13A +97EB4A0D39537DA9A6BB22D865D8578E3CE6C570808EED35DB95F5E46EF4D342 +8618A0B14B263095844E522A3CA33CEA6311E4469769F81D1282F0EE9C215172 +231949DA763A64972C0DA1DA5E10F8D16BCA12B49CB7041CAB2872F7482B5593 +0933F824E81B124D2C92FCCFF8C90FC0DFA73440E6B93D209D3D93CAEF6ACC4B +41185995C8673D651B8B713BAB9819135E270A003052023A6FE766052A54F8C7 +AB70C7359ABFE6C542A0938B13D5B5F9B30CBD6BA6BA96D0A32EB6210AD9F1A1 +EC51EC82042A31EE970A089968DD45151A71779AB7ADEFA3A38CDDF9AE3A06F3 +801755A3D748A684A330E124DE11D15729D0392D909345D9E26BAD94554A823D +914E511A6CCA2C1E894EA82A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/CMTI10 findfont /Encoding get +dup 47 /slash put +dup 97 /a put +dup 100 /d put +dup 107 /k put +pop +%ADOEndSubsetFont +/CMTI10*1 +[ +47{/.notdef}repeat /slash 49{/.notdef}repeat /a 2{/.notdef}repeat /d 6{/.notdef}repeat /k +148{/.notdef}repeat +] /CMTI10 nfnt +/CMTI10*1 findfont [10 0 0 -10 0 0 ]mfnt sfnt +171.426 222.458 mov +(a/d) sh +0 106.393 mov +(kd) sh +0 0 0 1 cmyk +%ADOBeginSubsetFont: CMR10 AddGlyphs + + +currentfile eexec A0B00ED553D8AEC140CA1651EF1247C5BCEDFDE42A20F2 +11055FD916F47FEDEFAF281F26B85061B3E01744DD12F3B8C82929D41029BD2C +C24E6CE7CA83FF625A5264AF1BCCB4F87E2EBC305B687E3BC0429771CF07054C +20C626296125709BA08F009E0E62F4283D7F148646DF4F441E4196AA55589007 +76021566EFE29CB92E687AAD40E9D8AC104D7F28295B6F09C1FC7B823C6C5C24 +DB0FC5B75750A2B70BC30AFEBACBB8576B6AAD4A1C532046BCF0AC2FC2248FE5 +8F804A0470181F4B2F924A4715E488241CF5F8F1EF3EF86D694FE52D38A909E0 +FB6C60179426071E211D6D9F6FAFE52B1468066E56E10E94102A9317CD33408A +D4147A7D5A1F2E44EE181710A9D2C4A340B44070DE98B468118EAF24B01AFAEA +2471E9038E9CCF4B59015F8028B1E0C89CC20E2AAE85C58A5C6BB72F4BE71FDA +D9D56387E72D4FE679A95C5351EEFDF9F0A1BB32B90D21FFD762B715C485A7C3 +AE51B315393C1D638F75C5FDBB0BAFC12D822D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/CMR10 findfont /Encoding get +dup 32 /suppress put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 53 /five put +dup 54 /six put +pop +%ADOEndSubsetFont +/CMR10*1 +[ +32{/.notdef}repeat /suppress 13{/.notdef}repeat /period /.notdef /zero /one /two +/three /.notdef /five /six 201{/.notdef}repeat +] /CMR10 nfnt +/CMR10*1 findfont [10 0 0 -10 0 0 ]mfnt sfnt +147.835 209.263 mov +(1.0) sh +210.755 209.229 mov +(1.5) sh +273.898 209.208 mov +(2.0) sh +%ADOBeginClientInjection: EndPageContent "AI10" +userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse +%ADOEndClientInjection: EndPageContent "AI10" +% page clip +grestore +grestore % PSGState +Adobe_AGM_Core/AGMCORE_save get restore +%%PageTrailer +%ADOBeginClientInjection: PageTrailer Start "AI10" +%ADOEndClientInjection: PageTrailer Start "AI10" +Adobe_AGM_Image/page_trailer get exec +Adobe_CoolType_Core/page_trailer get exec +Adobe_AGM_Core/page_trailer get exec +currentdict Adobe_AGM_Utils eq {end} if +%ADOBeginClientInjection: PageTrailer End "AI10" +%ADOEndClientInjection: PageTrailer End "AI10" +%%Trailer +%ADOBeginClientInjection: DocumentTrailer Start "AI10" +%ADOEndClientInjection: DocumentTrailer Start "AI10" +Adobe_AGM_Image/doc_trailer get exec +Adobe_CoolType_Core/doc_trailer get exec +Adobe_AGM_Core/doc_trailer get exec +%ADOBeginClientInjection: DocumentTrailer End "AI10" +%ADOEndClientInjection: DocumentTrailer End "AI10" +%%EOF +%AI9_PrintingDataEnd + +userdict /AI9_read_buffer 256 string put +userdict begin +/ai9_skip_data +{ + mark + { + currentfile AI9_read_buffer { readline } stopped + { + } + { + not + { + exit + } if + (%AI9_PrivateDataEnd) eq + { + exit + } if + } ifelse + } loop + cleartomark +} def +end +userdict /ai9_skip_data get exec +%AI9_PrivateDataBegin +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(R) 9.0 +%%AI8_CreatorVersion: 10.0 +%%For: (Suresh Kumar) (TechBooks) +%%Title: (trapped.eps) +%%CreationDate: 9/8/2004 1:15 PM +%AI9_DataStream +%Gat;;>E^>SEM`IP,5;\Z%hp0uL#(m7EAtoW5S,2a#SIMq1W(4NJXG2g;*3<.c+8u:8*7STpN^m+Zb!CP]-IY_7Rfk7S#IGla%TM# +%0E0t/Da1rRYMO["e$ji%n^Fr6:\!)0npW]d&:a?IMnf&a=21?q^]1/a[_;IU0Bs--hS"DYSn7(\[P)Bs]79R]\,G@=o?E%t]mJMs +%qtGU3p@[0amsk9-e(:`%O-dW]q:dhMGl;Q0q>s8MC=55kAjp]'C92rD8s295aS^Z0%bIXK1tIf/gI6[M$^4T/g' +%^#ncic[VFfj6qHfMt46'&YHf9T[2NeiK)m/rT[\ck4aB'p3kn6qqh5Lm[(]c]6A,)i[aKTs4P`/BB'e8\$%-NZh(p'kMQ#lf<7EQ +%s7!1>Gl-p`0Dpe +%lb@\n?[j'e="Nq_pCk9UIrkPUro#g-_[!o.ahR$+DgqL8s66A2r:h_rs1:Gmja[1#r9Di2m'#9[qs +%](ZTIIW[;Ws7l"&+7]lVacN)X]_a[\nChf1rmRJILsL>@^]!FVIsnr:0E:_=`V/]&o^)(r+5qP7k3X*P_\O-ZH,cbSc\m;BT-'Et +%it?k6UVFU.^A0#&qtgn"J,)$Qjh$PNT6rfZ^$>"0dkBI2hbR("+'q21k&#T*5Q(&0Vl-0"If8nSs5a+ljtYclgDjSukXXD$1g]hc +%:R=HId?fmY(N7mZVrQ7Lj5W)UrT`9B?%)E"mudV"'B:'Nhn8sKe!TGk?iK(i^2Gcqs3CfE1ZS?2L]@;4ldu0h^@pTXWuq8NIJrI( +%+2<6AgTSBf#in263UbgPs/l<4IN$rokBQ[ilgOlI(E_As=8aLb^3VrIWV`Mnmsk?%%s.[6eVF/$Vq#+gTD.[Cc1q8\R(7PL?[c2) +%qo)pM=)U;#p5e,/l/R0CrU]a\1Xkp_eK:C^>@:dP7B,bTp#!OY-%Gfh^GQch7A>*TpTFJb8%N1]jlq84:TrW6q1kmD#=eRO(N8/Z +%i(or3N;rRX#Qq6j[VnrKra#EtlfRNj^(d3Rr7QJriT3_sl-%u`IX^ugIerUWg=Or$q-&(?o"VnbnalbPjf`"iHouiQRo`sFp1HOZY9j\9c+%)pJ+5R\dU%=?a[<^hq(opIU-o9VZtnpgN8h_=]sn@*VccAPaA4?SNO\6QR9#82YcO5+B36ngd&pjRZXs@OG\L1Jpro[GrII\^o.uS&iA6BagCF]B +%`BRj.M'7LcYM7[T0/;[?rV6*(A:1#$c(BI&d,06KqD)*"p&*J,SpR(!h=F8J+"l!l"+PWVB4tZDl?aTNq:5)kDu9I5162O"SSqi\ +%p#=NhgK2/aB$oSN+7]>[4MSt$I=mW+I_j!JqpJ-1Y[@D/O5Kka5!M]smt&6"q`Ma>Z[=s#R4%fkqJ,Xk) +%g`M"FDSC@NerD#&IR/=1otnEM_gP>AqUaiT7:<$s8;d.A,4Hs5;AK(o)'/2q6/+/0p[<7#$f1=Im*gR!u>]u +%Ie_-@cM6b^TDp,6kmouP/n7h0oa]rg?I*821ctfAXafKoL8Xq/5Q>O@in<]o*o_MFM21:J_M"03`K+3\M][)2(I'\;(L]E[dMDp@ +%0Z'.WLnVKf"+`3*Nu(#9W#+D<0WJbVgl,Pm(keUKm>E&(eMf.1e.lWrQ/%**o[%;elhd:?MlTsO.>r!Y'u@O +%/)r[9'L!i+H.:XDCE9CG2))sR_A.Ab)XK&K+i9hod>tiY^5]XpMc['DEelO>4,_V;\c3LTQS# +%j4WElf7(^iSh#Q:J:!Z4;OsSK^?)c)Ra6d&8qg9ug+aIT0B8"T&"e-sXfl5?rDCTdEQ!.,C<)WM8;Sd%B+MDJXgG/!Yrm/H7uD]: +%j?4_nX?7/?S6M@bljUS(UZZ[+1A?^1oJ+N,NlhUrm_%_bD-Q>:Z>t:C]r"o7KZSp/F$D#cYi[p+]p5,l3DZ^YHrrD$/9'?aca07F +%A;Kb,/Y29&F"u)`eT"o<2C:;OZ)>=\'%5QJ:AYIe>V3s9m(Ju>Zn%,BHOQtEq:GU*q\ZB:Pm>=^co=)CT +%gBsq#Q>=O]f/`OArKOEl*U+tfm=Dg[>#0B=T..BUHeja+i#5fQ.A9SA/$9#HVFTA7A".IIg8VOP^gd)%Y>*ES.-+n7up>/Rkjp"A+i$7@"["qq:;[[Lm#G.Jgb_#$GqDY)fZYj4+GeNV;0Q5!,-!sAVW4+g`3HVD@":h]RV-A^M;O95W'A)@cf;F[mBWj!/SZh(\X"/?k14`cI1%_3p&om:E@J\OV"hl[Ed!GLeIn`-\B<$&%nVJ +%>$6RF/=J)]`1pU"/%H[R$N,(N(N:?J_DE`UYhbMfZi_*Rf>\^E0NmSq!4c-+"6!L![E3`%`04u.7jUtt2t5E>W1*74ji0iCjM%c0 +%nUJ3(^ah#mDkOf#MYSgM0@_(8nAn\f0sH9r'`L*G,$N;)g+uqr)Gb;Rho(>p2]\=.WrkHoLL+2/%-5@Yg5-o%pl-/%nLA^?NsFT4 +%%,'r/[FNe(7_n0Ni@nR,K>WA&EK#Fk-6are"Usq?*E#d$U9brn??#WScZ)]%KF+a/GWu3H-q*LD^;2);^):inlT5L&^oPHS!%cKI +%Z!n.)8UMKS+LWuTJJg\V\Yo]!X;E0H2FpIk28_#gGqdlCP_.+)jq0u:Z)HKo_D"I^_I*`@)SCim%mLna3*F$W6(&!_>fkLt&&=q" +%lM+`lF+MiF=O8ol$EQIN@KQso;N1Y_M]$R\^lG]&3hXi17::BXibV"tU@SZKle8O`N4Rp\gEHc*E(U0NNjiFW]e,bIDAYA"O:Ri` +%98C6!7&L'cf(!/+Q^D_X0aR\N>KH<1"iN]YTsCa66,)IjbD>*/24/1Y%:Yi!$RCb=Zo_6VZiKh-HQ\iMNW6(%&7@?9W;CkM>.Xli +%+%.Zl'DO&S&o]QHMnh2jA>45q$inH-,pnA6!b>AOT^*XBJ90?VE=jlI<.mk7XaEVaHn=D-"6;R839pb@8io=pJlKRd"/p%"6u9$,"N.W6lHm[PL^6G'&T(#aMrfV+AH6R!;d)K"KS!@^LV:"^PE7&_!A0XQrpGVO5i;F0kVtq@3($#%ZS[O +%oGpumCn1;dAor.saDg.r-e)_u[CsMm7h?0o3&Q3P+;'`m1X%Ln?4TRi]FJ=5lF%?I;B_d!KulUsnUeVC+^DMY9RiZ;q##XSFM<:) +%MilZ/V_'80AsRD%[UXNXBGc;ST-GLhpoqVJ.Eqpe%M+>f5g3cSYa!GFq:#c--K&Mf'D&.b.%m()p2`S8-)`o^NafMkL@^'O/I3iR +%@M^Y-VpK9;,DL2-Qje-RmQn^]U&$0g*Q4I(cSWb9EB]H.lLf?,3ED$8O?hk=Wf +%ONp@Jh1-]L,@9A9h;8[M,t<.K/[s\-MjuW"D>V!7lAh)J4Ae.%>W=V5uHRF^u[X +%g6igd>'ktG)V55O9^!nr_Re+0e+eK$5Y[YdS-VY5(dT]<-K$fpNFc$rdD?B5?&/kU%tsY"2OMO;oteRj3-dsSj126*'?8sNJVXj[ +%q'tkM/lWDtY\lf"_P;';UBsa#6YK1^_.0./E5i4O?am`e5QcQG*Cuhf7S+%76lHO)Obgj50V6,?@Kf/L+9F$sLm!^#%M=7Uj;OYF +%GV9oZ&ZYC'.70,Z>bF_^GENCl5jJWfY6hpi?n!&U#5&)u5\^ls"sGlW-Pp$Hqh*R1p%VJ8.TDVrhBLg;NWFtA +%AqP-G#Qj',`XK2*=Rjr"GCmi,bU\F_@oC>WW_G2Kj2ZW#O[+3/nDh`G4MoP''B/r%pq9-#BG*Q\FshjTU7fO&(6o.6!u?V/&f%W: +%7^9R""*ojsJgA,]R=q4IX(ZgrD3\r)ckRruFAF9+R081GV2h54n>WPlb"0)WrAg.sfJCZ(\q`P`D-8\eaC +%Ws&0#GYj&&4>$mY@:n>7"(Y]OO;*#,,u:XG@C/1^Mkq,j%tXqX6?"H?%Rc:Q +%QrEO]fm`j/EW=Xp/BE?H*/3i$\\r@Pg8V7tGmkeVe>4WaR-9M1r,;Img2AoanEK//2I639#Y[6)+G-UJE0) +%9(ObI+DRo;/F,nO>>_Sj`G@;`lD:qh.N@Xsa?;c"sZ,$'FGgj>'C +%*8$ZJ\,Bf"9Eh4&qH$F>'=l\S_AiOrB-:7K%BTi^6N:=f +%^R^u/eWUl+L)k7V`)!%P)*i>8o7Yj&]^#VrYGpl-Ih2A<:=:HZMr>d<$HZDFUdQ=;UerYQ&YKV1&_\-E8>rS`Y$p7e%VQ8mLhU?. +%(Y4WRD>-)/%ZrJG//7ph,D#:(qEZ2-7+a-%A4%^8oG&!-3's_;!T&!AXtFT@5TaE'"+1u!%Y-LL +%M9eF!_H%k2hZGbCh'3=0EJ1MIW(_!\[6U=,#(`Wk.5?O(&[&(Pm)3dS%;#n;(WZT&'H\!TJ04!kODnYG=%/miT[4!/^(/!piZ.FD +%E_F=_+q4`"&VLW+:,AIEQ-CW72)o\2cj"/L"#os\%5uR!`#-SH5U0Y?]rGim;%\0h^LlnZ=!OFNYh`;>R*8<-L"EpGOBcRe58$b% +%3AiXBQWZ+rU[4og6C;!cJh_hldG=6);B\/&9Vp]'"@P0ignV%,Me0o#+j6J;6M[M"&NKm +%14QVt5-`ldlX\`>\\RLBpVjm"aBDVP!bi2b4VnE2h\b[56)XFT:T0YpPQ:)jZAoQ]B^@hJG;*fL6f +%K&p@N,jlgT2$)aYIjZ_?.""4;t^5[bU592+b8UO^B# +%)KUiM-0AYoObf+8Zni4LC'se?XI3XQ)nWe)7eaAXBu%p:COd3@>JTl_3ZKo;XiCQ[$uVaq(*J-MKH=TA6_G%Kn@-DXD`^"96(n`@ +%'QFSf]R@KJG9kf1m_>pp!fNn3oA`XjqP%kB-hl>=[]mcaVG(W:CmOJ1*H9Ta.NJ)O=c&'X;Dqq]HFkj2&nrW,j\/f5Q@@@-d0m;N-e6kYR=]8hE<_IS#<%]NO&r'IUIM&4+_'/sB,3T0u%#9F,u3-a2dDfB+FTX(s]_JF[esnI<@f$i.h`1+IE-iA3Y&Q-&Iaogc5'0fV?Ggb6;.Rh#OtddjLB/1,i3Y +%T2a:Qgjd)F"X8j1NPl!'4AZ7;?dL)2k!$&lqh!3I +%,C&e?%4p.+YokrCd,a[]b&nsH1nd=dZZ%/E<&!XJN:QU#:9iL!;])>.jXEL +%cJrp3(G*TiPtY"ST+cle_:(>4F?i_;ZF"r!_8=(^+]gB8TrL1s&t?n2@?b_>;"&=I?t +%#Kn_j2N&XhET,\I)!H$qH`IV!O`uC8"ucB'TF,\(lbl6M"f6f(N#?feSM87o*cdnZ$rI>b[s8/ciU9j]'7LiC&UFPoGT7.`,T)2p +%]ET-JQIVNU83OD@m2rB<18^\n*i,)+_CHB]F_RG.1-j\P[@GX'L_qenCaT?0-K$#nnP\H@&Qj-Z#PTm\eBb'%)07k^I8*#WPts(Yq&?RGC<9l'OkE#M.B?(8XJ# +%'k!p$oV)1A6Ed?i_!p;;.T.@5p=QocoWY4)3kA?T9o.POAX+le8h,EM-Er +%/%pTJoTe_OCR@$o[Ls4V_gm/c$HB8W9*_Wp*eHh/L:\>_-2arjSW''L#foilK>3/!6P#:h.^'[1ltPH_o7 +%H5Fj0p#dP46t,j',.P8&N7#h-+QJ8_i3P[s4PI_AR$MRmgjl=8ON9DE1(NM<=9Igs?(QGR[FbfRS+qY2!\$3SmM<]h,q*sA%QET+ +%Mk!'KLcM9@/u&2>#^3V[td_0D>SP>q7'(=h2]XT`l;S`LSor?MGi;QoT,P@h?EM#hHUtLIop:XiZb/Vg+_'3dPa<-o[)"Z=e3. +%gX>ii$HrhDLkN=#4DV4o!*RbpiEX>9[r'u9d^Lbe:Ub#QS2Rg8pu4KBZ;s7RMn>8Xn",PJMKaTgB@\$&o:it]Y@9MigB=mV,uI$m2*1A54m@%N`5n-"k2WgS0m""e`toE2Qn'^%XLj5jT!l_]@p28pK-ZRQ^pk&I$mc$nqi3R_&Sr.1b"o,\!0JGNh0l +%JFbNFR#r%Oi'd@UJajM>Bqd,4Nj"<4'6ki$\9`q,0``+'Mf[`:58ub9:F]jm:5)5$ +%J]BjS?D;MF[U@:$\\/=."su9<3,/WQI@XsBi\D/F#4N$"ZLGgA+HN85Aqo??]-@Zl2rC)23#dnh@O"]o^_:A#O)T4R_e50cJ1a.#C%.ILh@.V_!'7M0tICuDOM`^0g2/4*XR+'/HA)Ye4K:21HR%t +%CUmgh'lAYC7$Oh(#3O-Dk<,\#"#q*:)l+XI&P=ejj8eNuX)KR66-\=HO%a:+oO>Po2ROG[>uN>BW7g1#]j9pAeR$)t*d7pBZ&qBaED-&_.;I4L:H#]",6a//&r81/d&Yo36?'++iCdWIDIPEYF!_eInXs"Ki)n_dQ&gG,&;cqR2Xf-+Th:(E]".FgL8)/X8i.$o/*XiLnr53qn#D:*9 +%2+KtCRP#@LBe8EAU32C)/4>g.em.N/LhnD/>j,m$(\7kS-BC`T1+5I?1:Y^@&NS7i3(:`@C75t1JG'/nU=B\l%QKg>En4J]++S!lA_p=qXN;V8T$jcn7(kKW\D.*I$-iZ) +%oG!h4h(+/bN6VPt@LN@QY'r62-NVS1h0gFF02n9_rX@f%h_<2T-"'Eg"Y(a2Tc+M=-F2SLepS5k^Z&j[Y([&L-lL!*gdG?Q.gL$X +%O/MNe]O^(Z?kU8L25'!P+ue9>.>^#YS)d()e`9+bZO';5ZA4+K,BcIR`Et-6\XfUSdKSG,\W_N9UT`*n1hI^%.;knlp['-:a,g>W +%Z5`?8@$m]i/2[J&:UAe`2]ucmH*%PN]h.=,R<_?1T*Eg5ecX(kkkn%BJ/&`sq7tfc535gj&Fb<@3(22*J2@(4Z[N<`kcoA(pOO/d +%&e)`))_3k/@32m4j+JWU76!,`4.*7BM[YkbfhXVGS$8tCDO?rJ%?2opS,79cgIRncA!\UE@tIj5fG7:pI]R*S`1Psr0>nFLYRgeB +%D=3]Gh4%#a+pnL54AdRhg^/Yhu`C==P0i]^6a,$ZfQlDR*((one"6KKU3#tZHU4g3pW'J +%@Hrqg28hls^AC]7&AYDI"JXWtk",!H(KQ_*=KIAgLD_tsm=h:))0d`*IX-H`:*^m:KlVh>'r:5nciS^7Y1bk()$j>2/_;,TH=V#` +%C^V4jP^G42a+plOVd,&rSqo=Y74)9.LB=i,TJ%=H'AD#F[6PqK@0\)]bN/3Zm[hjESdc5-?J!D+V4h6IS#09mF[(_P8TEW +%$0uK2\tR0e-_>_V-Og0f1/f_q.Xn*@fN)joZ>55^67Cc*n-0C9TQf%I'iS>$f0L=jk-Ri=`27/Tk72BG`''hKX:#gj'LGCsL.\7Y +%-F@o\5@/hQUekJ:Qh.r8'ngdd7tK\3JP6KiZ3oIqnVfa-J:8Ql?h-2S:);6nM;s4bGY;4!=sGL2=_WUPkdGCl*u#SE%P^G6FmJos +%==:o)0NNAmGUKS9m/tjCDX]E/g]d\gh%aZJh&3CCe;7lQb9S9Ji,qoV:'b5$HS8h0E(]c[#Z7Y6]0U83EWk%3L>g^$6Ci7g!&RJZ +%?0sIKJXQ2[*gM:_-L=hDecWgP,8#Qqc)qJ5I'0iTRJ-"85eq%bT5e5C,>Knd(tt`e3UANQ"TdI9jP][RVY]#+!sg$#j=iMG=:C__ +%lrt]@fU.3U/h(i[Akc3H.sKK;YZV)5,;_@<.[9G5[U6oVpm2aYc)LNclb>HLsMAq:3nkB^dF@cQ*2QS4buc3USgdN\*T2u8mM +%85-7R@3i?dm@Jl&n\.J6**Vj5jBrBT9Z3J72WEF)KS#-0bI]Aq6u6s7FC +%gojDq@PPUuW`k7W(/2hcO1sF2M\o0]-oXq@_g/RJB1q3DN/Cgb4SfBUcK<89DS&JpOBuG]*)&t_(@!#Qj)r:8G]rnl0J5VDQpe"b +%W1**;Sfgdss2KQXjkqJ;5h>e&J:ds+b64*=JX]8A1DqHGWtGY5=AHF-E<=+iGS=Ng$jc)SgQBhpPtm\V&a(;9\944,H'Ch,>2G6i +%(?*-9=R!I0CC=j/BEV*XI.lL%#\)9=eDZ\o)VQ*sXGY#D&=,l?.q4C(J8<74;$r^dbfCjOZY"Wpg^`2-#uL1%F*aNe +%/B"p4J_A3fi`+*oh#tUALHPZH@0k`]bUn,;F$QD![`j9_b`tJV5Fk +%U$gJt"TsItg@50T0NStUKNAG*`a&nil3]k+/*=c^G6BP-LYWRq@-+6I?Hu(IbhF;1j3oJNMUGVrYJATFOh2Prb<4e5FC9?e +%:sn2a=1?=15P!2Se&AC9#n:enK\45@>>WA%MqQD3S=?[WQh%=g3Qbnj-]8@mm\!O1CaTamcn[+RX$"X)`ge"*kOUJB4;n"TOUS=O +%kWfi?mf!?1'Nt^R@?HX@"pCME'@g4?Ck^5u4iX`&m(t/%VW=5>;A0S\b:Si@?mM:]o!1J#TN/J\hL-p@dfh!5cR8_C?\HQID5 +%:h5,W2Xg(@(71\[0[C+m%:?,C$=ges3M8m[d@,-9Vf-Un\o=rB$o%&<0U<4mm_P'uIe'YM*&jSKXHE_d4dQAJdfnLZXGZKeS3`N$ +%"bSD(CKD/_'hh$SAZ^81&I#Zlo?'h"%u+bT*Fs;=atqB'Z$G74$_[jKKFmJ#KMbDs=[9opXFMXZ<@iFal#CIkaur\LXLG4$(H0cZ +%Yq:eO_7!%A7a7k6`GoC"Y?2&EA%Qrnd23Pl[p;6*\=^."KeDfKHB&;=j1@RU#Tq97)B[%U.duN'&:Yo=Su:!\B>JF"?7Di\F#X+a@fOrLNK$>&Q4`IaOpjUb%ULh2/h +%E=msI%MBuE.]ksVK +%2cE9l&fbjX2l!m,$VaJE7X2Fbg:@OeF'*_T%NDir&KqdQZ'kSO9h&g^!Tl)6"=SlQm]dHO'+KOhi.\/8qU#rO)[K8%iA1)0"=Tpg +%oOtiG-C`hQNmZ#",MiTYB":SH"0)P1_IT>!*`"&XD*Ra8,]CLdHGijIqBHnEAN?uLStZBlbD%]!-hH5_Z0EZ,<(B;c!T0<.rBj2i +%&,]m6nf&0!GFm6BZr3U-E[WSh6MCnU,*2622@Md6:0U^n&"0dQ: +%;5V7[=k[[N);*/E.R9-^=dh,0&."F4)DoY2:)16np%[F"'L>>UD@W.RqKa\ +%08'iXLnYl>Al',NaT;^b]&Mhk#r3:d[8!Eg9b0FaNUi2@KaL0p'_#`93uR8WYZhEMR7/8-0/r.B]l&l4Um?j$\lETjp;#dnh;2#E +%LaR4&+AYUOD+_:$M.L__FZqtKAo96rK=`f3Xa:Xt0r+M<:%6A[[>kCqJi?u%=]*o)#pu[p4\O`-3'U')j04e:mnaP3>>>PLR`gmf^3NsA +%rK?dTrq44-P,e44>e1f#h=$$`+qHr'$M20h9^?!8Zu-M?!o;js%NASW`mtf7S7V^cYXlPTCZE:P,*?)BKZ?3htrp9[3=QDS.Dkd$GqXM:MY@^043LA@Ce +%Z@5nf#K&mo6i=hR]D4*2dEZU(3di&\,Dh6>U5Lm.E#Op(n-@q8Z5Z5j[K/,qN/.hlK.lG+U)"#q@p=;n:2BtEf^Q^$+J"f@nts:] +%#A_g'Mmc>A&gPG]HXYPg&T36D>-Gc7U.7\lE!L'3TfqmRk/^X3VF#MBS`%t2WBCoJ:qKNTL^>bHN6TUPBY:2-Bdtm$%I^MVbL#2N +%c'CP@QH?Ore7ITpl/]\C-]!+F23IB9+?["t_S1I@i\I_@N'?%#Wkju].\"RfSDl"AhO[8?TQgt#,&gCh2RmGB7"&5"(?%?Eh;[@24J+0!>2Ol`+;N40p&Wf? +%Jj=Pm/Z1a&4:<.#TdNhX,Si\*GcegB3/ccSc^JW`(6L/o,;$s?fV_k5@kJ.ZEL@i!FM?PRE5RfgW>;\,VIjj0*e@om7d]>Z(@VL6 +%4gR#"K]o3l4\E%T';Tp,O%PZMn]liK?M>38B"#qPD-%QKRK4mTB/BO%c]ETm*9WGQfrQGla)Qb]"hRlMf^;LBF*G+GR`tF%c,-&I +%7((L0)=JW%_VpS>(92q$J/5"3EFl]ALj-rl]#+VX,(Wb"f&YWJ'^P1%B7%<$X)?K&GU'POC]W\h4R*51[Q(o/`QjlJ?C\> +%9[^RXM.Oh.MGOAW4(DC--fM0-g,)a2YEm#m0LI'V"O>9^1@CITOdt$*^)1!T]ir\Y0X*!ah6!G@79?!W!I)gdC%/+Y!JlFTC0> +%*i3!B+7!P%X+9SAT541sb@BPf%-T`H3mH&.prZdQ^H*#G)e4Pg.)?+KX^n\'&U'!M_n6)U#!@2$hL0AWJTM`ij2" +%#?50&K9uD06hU]9iY%QNUhQ5%OaDE4O)rAWDlSR;ja-+>%=>u8<7$XZKNMZke*[A7HD#KgMJ0V`+4(!]6)BAf@d4XL +%&'qehbKXnT%'FRDNY()e$M!SRk)L%;.r^2,!cmNhM5qD01corL`Z5r"ok8^/h.&bX,'-j*!jYrTkU[C?k4C@_"!'<7kM\=c.9+P+ +%:6Y2;XThgnh/s_s/IVIHJE?e-F,,KYFE9f"l@n.77L%Nale[im&'NY^lbrU\ORScRF_*>G\;%U(.D[M7%:hcXmJb55RC6kUmU\Hp +%E+IhMOcW-?G?B2;35YjI1=IQ%@uo/[RquR!\S\RXCpS]!qmg)lEQW-LbOhJhbcS6Bb6C0gX:uqfQ+d[NQ5a'%\>[m[A4:!90r`%0 +%!O=)I'6^AD2Eq0a"%g>Hb8j=:(As'*#S44Aja:2*K.=?U(9@tJ8Vl1&qTDKR,o9nB@'lE1;hN2>pp(_Pi)KPcUl5IuEtP=uSCWt, +%DBDs,\?IGjFYQ*_hA2!>XEGSagJ8%C@/^ +%c^;uU0d4HAODJQdKUdtLHK&_9#6?@gDsJEqCp0!alj%GY*%RG9!:Ms&#s3t&"dT0_Kn$LXdC]h#)='2Gj>p!$.+iQ\+#Vgt^n#h9 +%WNoZ!Map&FXCI04_&Io\kn5`+WcaAtfi8JB&Pp^tP.pDbOB0h1ZPc"i;!&StcV5cQ9"KPpCj:/0LX1WoG3c0-OT9HHieFj24";H1U];f.O.$jKEK>NgS#OE!mrWoV +%/\;)eo##3MGgM;f6gj?^Ek",>_]QLm^o8K)I)T\%+Hj%7OR6pik;g9pkq'ghD(5gQ+l:S9_\Qp,)]jnJ"GVRCG^r;ObFS*DZ.'l" +%<&>VhZe4!O!`G4^@$f&BJ.t0,>.3+@G*4RMpKHB@U'3foV3gOM##iL]4'4MS8*1aM@NXU7JEB?Og.7TL.Sm>g=P+Fh^^Ljr#[:Y!_a4[OEZnV?"P5Fr90@HffS +%!km@LWj9@;?dKI)16LiM_iR8?;h9d7pf)[Man+GEO92%:#Q?p^r7!ZKnK +%Sn9/kljq/=.!E,R;E+LG/L2-0Fn^uHh5Pp<#93P>q^%"!C(*n'luQ\eZY'gs/eHiJ7Eb?$R!236]0ls:G2Z6ZAO5Re$#-MP(`C0: +%3_!qrVRm@HEFZf_(Z=^6IUAhFHb^bkr$-*#A4t(/9af3a^tS)qn!*/&Tu(+6G$km4bVD[2:GGe4#Itd?=qZ4Rkk;o[_96]IS57m5 +%/;/`S&NG3bJ3Qn-OeSQGNjh=j( +%%$R*`T_qWUQm2lMg:b<*=Z?P8%L56rQsWTTUnf6gtBi@*G@nE-7"/J#pIYegc/$( +%\A1U^^r'-kB`KL +%l?j\jm=:F,Y`1(;V;@o``"+9sA1m5i!\flV4mW?6m8us0"*6+oX)5jt@\4UG%oqGPBb\t;5m#MlhQj@%%Xh%F+=>Md>M*f%/o67[ +%fXj-mSIf8@BV#gP$^kPMN9BWK(Q4iI#LE&e.bfp_$*ru^=P4X3M>"Ccf&SJgZj$($&\YW`Xc:Xo<:0DH(j9pMju&Xh!XF8J"l'k- +%#kj^;(ei+:+;`ZMJ.2Wa20%;Qn(K>X,4l?:cnYih.CCrc=9LAZYgCIMF@:dNo:^HUN7ZkhJhTne7H(lC`%m]elUE)!3GrR9_Upt7 +%+-1/l%osI]E5SAPp3(8"qi8X;OR(aJ0u_E!ZGP/sN][Rtb>/15+`_dr%9dG*-.ir.h,bflg?i*_/u/A4k74M$@s/IlQCgPQdnXN! +%:5;5rTQ/V6a"fi/g@LHnQ73qcU8lr;(`jh:qk6F1Ib931!kg`HD$.&rr5Vcr[bXYBVL4WMatc89\Yi'@"Isubpor^G45BG!VDR/c +%5O<7uSJot;HZm'F_-5b:/`C-_QbE>(l,Ip/(FAs!`Z9G++fJFErT%N))=_@lW[9A:*&ViJ:f\*QteB6EE5gNnGK)1bt^ +%iosGH7%q4]Xak/qeCMm]\aEe:)s_o"9mE+ffqMClZ4/PQknB(gpQf!./FsDD(u]J@[q$7F^6#Hc1i?DsL4,YK?!o&N[LDAN9ok'8 +%5bV)tp(%9m4(BbVEPB$p$s,S#[B(RuFgj!8qfi6ZI>2=MORNoofep=nXU8UqqCmd$O>,b=huPsH=NkAu=4]'n^^lRZg&u67NN-^P +%JfTD$];;n3<3p&b.Xk)C\r"O#hN;5tR9Xh"2?I2C +%_*rCC4mtA_D;V*omi,eK[gfX*A2^Jtpu],gs16F0YX)H9s0_NW%'j*piCt;`!aSosjU%="[)BcX2p^"je0J3qC43,VJK]eXB`Cf%2h(Y%RE+!nhXMN5G.3%%cj=XB4U0Y:@q_H`'&pt5=X`lSE),@W(Z:jB>H]&1P +%#@X!lI;HC.,%PWUMe;60*b-j":O\][:FGVU=-$o8/Nn?e%2t\*?/::

!,/qD#F;eRK?4V&o&B4GYaXVj.&]"udD@KguMfieSqD +%GU,[>!3mC.Bj6!BqG+gV)i>1!!\YN!1&qLO#D,TidqODgdtU>uWg]W":(24]A#gPWf%r)uQY_)bn3b_jb@4_Acu]nEc<\kX`,%PacmZMq_#r1CT]VC^dM%KoU%hNemC\l.@ZKdZPBFh^2hcc;X)H8>XZ=*r$dH387#XQ"rClgQ`\[0B"MT*r(BD`$>nO+IZ6[W;o>&ST*gK!&+SZcNN47c^li^Y8*g:^VUjrPR2)A@q[]\W]3+9>dY+Fm=7o7PM:@+fep]sQ6'XA8Q.Nk6NJYKaDUFM4e'>TSKPmUM;B&!EZ +%DC<.[_^p]L9_MVAoU:Ilm.20o\WALgMg[^%Mr%KDO&$_1_DeLNYcThQifKQ/>J+_\D)#XVL:1Ka[l5ePP@<.g^bV)Ih=bRV +%?\Ta:.\^3r]rS(N$Y=_JJo'QmH)8<9nCqM-OHaUZ$1r(4YhdmONk`@2m-&)>>2i>%3ruoYIT/mS;"\>hSmq%_WcKon\;pY3(B2`T?()Z9%Ti+*3gRQ`H&n:p06)ap_iRSs4VYVW9^Lm/ +%E*Z=Wi:26CPhj`jq]scGa_A+^9PX57G&QN&UY:K)0mT,1oJ2;I2-UQeg^eT7%E,\iDAJI'm&!;$'&j;eTJX8L-c"NS7.]qga;3:! +%"coTt`WDC?#(hQG:cq9(W.+Jsn9hIp]ZcsW_.0O`Zq`FJ#a*S"I:>?i5g1ln9&]l`6!_*1P0GV'T,*T&fD&mgL[9J,S#2!YkOL5X +%Kpc!GR8pjNFWnbcMR%-*'ou4&+9:B_W?S49b7pF#l\7=h476D6c.4T!"<^C\jO6])ZR#3]r.]16pDl33$P.Ik.$,^/P"4!6G +%^@quYO&gne-jsDg!n7E1[.*/EVFqbk3gkHT4\W)X@WAB,T_>L'k%?hN,.4M^]A)=V,.idEk*/"_%b$,Oj!q0j,@m>_Wc7!)VWAY+S<1dj(n5bIri<:,J>k7@I'`jT7=FLr=E)sj;RX_uV9.^Oqo +%7:a#P$c3)Sg9tnbK>XE3\(E5]Kut%E%^uX*`%4gRoC<#B)TE*$J3M.qGdM&`fOjT!ig+HNYXVaHZ3dW[O^d1oe9A?O"Zi03<^btPG"4ju"k,#@c>QT*1GRHU'dQc/\t5kCth[b-LQ,]rD6bB[*m(]r)Tt7(-d\i-#S`&%Zgq(*U^R+%):+ +%bY."gbTDG89uP1_,r$7S,M#7 +%q8=Cs\Dc&XW2p3>XKYAbq"1;C9su&/Ke"T`m`XF/(37c$P>-#KU?N,1NkA:h/EXXY/HsiHc$3fROmh.Wl"0ei&n>!oNgPG#^?Mc)N)af("f8kK)IK:k2\0mG>c;),U'S=8TW`8F[J4q[*j\DcD(N +%/\"iZ4Zf5Ji,TK[WT>'Zo"3,nM3"QQ'eg"X8VO)huO7>K^d@hG.%(hbCGg#S>A0?q3HFOmP"YZkBf\ +%a#YE2q[#.t8SFc1K2U/GKhb9g9H^f&/=Ft9HK'ED1J#DDgf5Ifipl!7C_)Ur^j1]Do_Hb7]s"gd"DC`B*tO.94!:m^OYPepC'%o> +%PQHuP$Ge&bbh,$/:D)k:l\Tt./^nSe@Y^h,E+?'LZLI+accCt9jjR./8Z]Vj@/JEMe+iJ$j_L2WVG(>L"aM*p_a^IFG;/tDg(8A4 +%/"il[QWZ&rh,sPDD!A7oMC8/9`ZM*)18eDBQ=X_7E*f<-Db]2*a7+o+Ng=Y:l:-E4)dof2I93/2nM&)C70T#?cg)T)7G4t05`fsU +%k]`q*.nG^_e\NU%dMZtM!8$A9)FmVo?3,2mq`;E6htr0`#6_V4aipujE/D343K&/S:$=0._*i8.'>b5C&[ZAUmuFcei?nKn(Xp&( +%SmZgGik[%$U4cp6(BBc!KbR?/n!I8]pBke>:FC"bGi*EEGgVh;O)bnKHda963J?LYETF0gq%rW5L7,5I.gJgZ:;Hk:fmO +%GQER,'^"fhNTn<_P4T;WCR+L^&/+AWB5pm0n)Q)<[EJJ[.do3:aaK4m8nV`kn%gM^5EW8#]f65q0E\/]+6NYK:u:Pp@e!lXG;cK] +%dX;WE#IN_4`)X0&$4.._PB]!ZD7/Y`>rNNOI3:5;(3WIqdE6;@ZLjSHeNp\nm +%@=efHIbELlfPYuf0`phqP"SpVDS(SF@SLc616pKm]?A.(?idk9.YEeR7.0q!WW'-`.fj\C3>uR`fSZV0mq!T9AsL?oc$rF.OZZ.m +%M7j:`^uS@gGG+V$!9ZpSn>ZnKlXj?bO.!e)I"!^i?0'`[TL5bLW)>@B!tDBF9@ed*)[=W&:Q*BQHhS!N(""\\Lr'S#i%gqJZds_% +%]mGT2"1;k?VGj"n]F#[RB+[:Fl^L$P+A"7p@*U[+2Wr"r2a%)H?QW1c[aib,AP[At_K7Z;dSbo+o4O".FRtBlU9npr>ucp_X3b=0 +%X/VTAD-;pY^o(^_!^ptZ(>mkubd,PqKFW9W%4KA71P=*R^Uq+_i8dg=]6Ut.!Vm"9l,l@Il'E2j\sHn'[5*XVIUqsQMWWL)\Pa2l +%#AYlmJ5Z(b[1>o_4O1EIDmnbA[+GQA4cdVq9`)&fQ^KA,NpTr$pGmaa?3P/O?[Er`0F*]o#3o*.?/FesB.VU*ZZ=k@W7f2G2NIKK +%5>8goFR#E(+FlCr^qqdpFPMEVE:gF`HoQH)OfuBn](ti=QKVq2G+3]eh8iZ%.8e]:cAjKd;7kN2NZ!Lr/j$XJZ5AIYlej>M)n),C +%6?`*b4Y$1=ZkW(S\Y[<1KSRff+msQTr4?OrC=@UqB`E]O<)iX=ag7cio74VN[\O5D;0U22h&HRogu5^]hDE'uCAcPXXCd+Ng\!2P +%G99=pm]MbU)",#6eBG!tS$F[g&[DY41=HBA+*,d>2?&h+?.#`KMKqc/AXJD[M1hPT?p2?h9]hd'O6;lqibhu:H=671XB[P +%ZKu!hjQ)N%2b'Fj'U_=8"bm(QEefV*dWmJ6!0RA/CUU]teC&CX\E*oQhFu2t@1WUeB`7-kcXMghU!Sm5'4Q0Q@aO].Yp_oc6pUVY#W?!pd]=1$GOd+220jPgT"S;\.)iHDLbdU6 +%UdplVbt;8NV%d9eFVE1%>dN-I&50J9Ytaa!P?_5]I;d(dF)5fLDjkI4D:__!pB5G&\%2P,:h<+Bfn28e7,5Gao=hW4gUtXC5VGOu +%%N`dooA/u`6\rC1]=S.BgJ'7upkB_KGA4gY>QbSnQ:E@M'V\G]TA!RiJj*QM#n$EdLZ[F%UDbf0./*Wi0*?h&o&'/\Oh,gC@T"HI +%&E8/m"0rS9P*Z`K)/I8rO/KXC@WU\V>4PjS:G',i$uL7#kruTD$_itjHHfC[nst(i]HE!i]r[M]_E\Rpc#V6?&c-Ae0"5[(r:a6H7s&p*5RCR>!m\6V=N=jqWbm<1,(XU[ +%ncaGlg9kInM:Zc*aF:SXZ!CTEK+DGd]Sjm+%C&Ssr(\:VnS*%&LGte8cNUuCW6IT;Q^k>3l+Wj/pdB;H[nA6&%\@T^pYd,=hI!SERNBrMPP=h.e`o9Hp1 +%\[*g9n8mI`30ue-2d@)L@/iPagNe('2>=]dkJPU.j0Xg8Sb*Z08p60*s)duVWSOY(mr4j"AQQN`K-ik4(pgWQS-%kkS2_4Cc:7C1(9.0/Q%f[pR; +%]I=cL%OErUaf[_fD"UFB->H`Ep3=Qo,Y;I\kT:nD44d(:*g(M?/P\V8;Fb@Lp!i`EDph7*rA2WJQalkth$,Ot(VGJn6a@1H*BGMbOSP6UA4 +%H6J'?3$o^uV4=%!-H1?$?TC;kKD&mp`d':1*q6cIgS$588@fp6jdqR0cc%9>J.S?F\G$G1&'nbBG+Q/ULB^Y`O$P\k_'X +%@P@.Yal_aU9nBZYhAF@JUfd'U'`4!m$f5W>6AFnk?0")+Pn7*K"."*J;G>brkheAa`H/jgVIUk<,t-JnJni?^=jDc>Ek2QALX9.!lLe`tf#HmR5.k3@n'&.?Jt[J8]>sp?[P&s]_%$r.pThuEpBK\j +%NeZ)+!t^1mgt`]a$F=0rK^lEb[fO0ZN)9,%/E2Y'+a(8R:u?j@4F&l\'j^&Vn(IK*Yq_C +%%tRsT[s!.ek,;NSo"n9T9,A7S.cE'MMNI)9\R+WOk=F5,Lun>roRKtWFdZq%D1uDCBn5k`Qa\`[IC%UEeEd00KeQE<.+j2s>?ra8 +%]>o:].*1\1QK_p,IbqODiJGb4Us4.4im4J(C7Ye0S[XPAV"PO<",[S`0H +%._WJ+e4u:HHmuP0%U3l`G_T7uH\hWA0=38@bD:n$7l!%K*[X6h#f/HethHtGA>qC`? +%Dl@4]p:l'tfXq\.lT)Y!M*Kb`MtTCBH_5ZFo6K%7eE4uuX$,mb,^+J.J(T+7>tpLK8oO\2q$s)a!SrC.F>GjsGN5c,,c+D>.#R@l +%X!MFe2pVgb1*RU&\tII>Y4&]\RHHtKV>rn<6![3ji]fB:R-hT\[^F_]a8s!TF8`a@^b*cRea48cp2OLPY^LUf\O%pT5Er +%cP8.n_#L)^DK>(Rg^H.VQ:,T*fcl:YP"@<549&C-Q;X-i(?I9YH](0>L,&t/_rgHf+H#e,Q#d60(_2RBHD)mZQY`Lu%c9"Y_h2/@ +%9Sbs_8HXa&'Kfd,CVlnZ^YZjnH5hZC:CXkdQgQAZEg[fRpXH2rRU#H:@,>E;n!8j?$Hs-l;VQ>NEL]g;a!IdM:\D%P +%D,Q'+*mHP;1V;.;4/2p(8PB7Q^/?Ce^r*'2YXF1.Jrl_f/VPk>nIRdGK&4q:2@VS:O7.8.:LIcTr13ZaDlZ5T+/Rf<[SbNY;)\uM +%a;5"b;$'<2H4O\CdFP#K`l^G>U3frnXKu-7>OP(QaY2g<5TkgtS&+oAQHtX84&q9%ahb +%h[hA:..nU@VDt"/Q8b`%AEDBUO.S\i*JCV,(E(]Oo%DK_9@>e.dNPh]1g8!j$cVhdnu%X)#u]9,LX'"5AYN,OVd9]+bSPO`ln5=. +%Ed9.1MRk&S>I8ro'K$R/8QE$^[1]-U[oM>:KKUWLW5ATIZoIMS\8m/(a-s.L@ah!Q:Qs;Dh?#g$G'8BVG6!imo%\Ye#J'F]g$oao7=V39=kDCtEg8Kga1<#rXQSCSg]3/_/SjrGgX +%6InKN$8<48.'CMum#kP:US\S/l6/`;nKufc#cHB6j9`92PU=8^fm;/Vk<>HKPRjGa5Z8j+;!*koi3GpCGE[=!m@cScbra<\pFaXK +%]Ll5=RgbZ^StpkuPhjOZTiuO,qpDq<.XAPK2>ZIoc#B[*;c:-TWoC3Cm597LmZ7=PBTXQ.N2.h5lEC/Vn?^YV2GolhrE*4l\=Li4Wr8K[.49".0"cJXqZS^$2D-m*Ll>H:3B!P +%PW%nf4aZTe>l[f1'K$ato/)(!_C+&$b!8$Ih+>ZX6eS&u$\qcQKH!YPG>FI5_K`(@2ceHk!`^(;:-6$7Sm,cCc(S@,"uStsA]8I) +%9>=]/k-Y*l5XoJ/LEeBVWgGftk=,VIjD/O]hgs+X'Rc^Q09L,9n.q:Sm),ei+FggJ_BQ?`e,l_DAP9MM1K8siDCd0Clm$$gC&t^F +%mR^_riQ27G(rPfARk&sG48hgk3qMlg3lrV'(;dIr(rM&n&,WT)8Xojh#-XV;(Gt9_NR)u=d7W,Zq5+* +%1ceZYOrCnn3BgHun/*lcqF8E!fB#u21>GjD17BU!3e:p5-O(RnWSB<>fjZ?Wm+k41I'h@Og16g\fK;6 +%Q-]XeOm+5Rj`Y=.pVlS?d9`s091kT2Gb>4sEKZUR&m[jRM]s%H!B'gip2[@tSGU^7DEZfA:\+W!H(<&0Y)q)=h/J;rC,:H'9ME.75/IC/a\cKuK0-d`npP'A.^Km1l)'i^6PUnX+qbU.8.p3aAZcZ8%.B:,rf07h_7C4Jp +%a^NHD8nb]pj[B:_i^!\jOTLf-kbeV>]^X(9Egfg!?@@MJE!&!')ZhM0o4s$H2rumde4$oRcBNW1cN]1E26/f@<']=5>a6\JB'm#s +%.=pg1MR(>r@O4V^,%\(u%t0dB\Xf07cmqCr"inO/\kG[Q;C,.oYj3Ei]WKAN$XI/'6LsIKYX@-HN]0PQMGP=m3UE!OU*clq.(38e +%b=R&g.LFeH"Rm[)GJBM1D"K*5aM-e36+ou!e?Jk3/oONp/'*]ualE&gaV@Ou<0Zk"O2oAG]aNc7K8i/V\/e^q +%W,WFrQ\p_W!6=;<^QR]/Yl).d3W.+#U,'K(;]A>:VMHPU:Mr?Yd5o86>qXdBg!0gn"TSY!,YS4mG3Q&4PVT+5OufS[OY#bUqWdlWT^DnbYJ*bInP6.CS"4f9@>7$5hfHm((J>/Kd35VC/f"BK(Lt/VfcsZ +%[Ig/GW'+0WRKkcng$.O0cEO90$2i\&fko2(/Xo*no/]=p`B)V\+8844+B.,io=!?!kFt,n54qOBONCZU^TfpQ\LC`2eC^37 +%;V:6LHp@:RK"fAMUq#X^bIZ;r;`#Z?o<`jifW.RN?!V5\S6.VK]qfATe)qS#m\@g:&AO>M)[R9UjENDg?qVo/8!-<(WXAios&(,g)==PkV"(Z$]T;e5ODlo#kPr:PIN7^1E(AokRVBKBkTV7@DF:-Tr-V,Xn/E +%IYf,VMF;"B.\[AalGjN;<.aYMlLKJ"1sgDK[j4ekES4nU:;3`-VC]JsOhB$,fY:,\!t%8m*I1W,jO>*H:G"Hp]soPeC?qF5ZF.)? +%<8.%oo9_<;ML#OEW)(*#$<,]LKH?;GmRqE-9AH\+Kf-D$L[lYX:U7E\a^"j?'%"d++%j6r=Mka,SPW2_Bh=(W?tmjn6?M!HH>]T6 +%!]cIRlT&708l_kq:tNp2n]r]Y_S/luL.A+';^4?%/l&M'SVE[Bd#La,1o_a6XHMjOVFR"KoC-+R72e12M!0XqH.Pi/Xr:+XK5N?' +%gZJTl]*]hr[iCp2o:/=I"^2sI +%5.S.k%HM<1gu_M'!rcm@?L6%>"03JG,p;F/i2?usFnqq(DjU]p5aOp+_.+.5&.V[YlmcH4WgFe&DcB:]j'c#0lE^b,+d$]KZ;m:o +%P\]k]Oi:YW#%"1/k"4?tqUghokd+`D>!;j_/8Dp?0XAUL'`kb:U*GUD[_gKfaUQMOPJ^+#3Hl\E\XLU(ZgJU"\-"Z*'m$0Ie$dg@ +%:J'mQ:\A.rk]D#`.>#";gN+.NRiJ94coCglEX5X_3G.[hZ>?NV'On2NHsO,n[N!ciK0@G9Un0@`aepA9EM(a049He_W?GBM*)I(^ +%>c*,MIPglbP!Fqmk`CjT1a0>f5V5o%R)D>9klC2oZO2_L5C8^V#E60'ln<>rau[780%&o4pq]j/B53Vo`[fNqnVi?ohB%OE^-e7X +%X^?iLJa6:.Gh39nU-a`5h)(:U)W$)r:6ASH;VG)BmgDc5n,W,A%d.YlLW/CVO-kRROF9ECL"o!=l&u=[9m&o'$"X&fg7LL$FnE#Z +%^2%-cL2jk5PJ(0WWeQp9]I:6/+M9XK$*#3FlCSY8Z*?0T`duQSuUoT4KQX+?_0Wb0-^b>*k<\ +%QL@+:dT'e`Cr]VGA<#(KEm^*e:Q:$jSNiH_=mdH!,RdSW37I:8HaT'!nsS+.P&sJBPg&p*<(kj,Nj'OpD?6(p^echILpjaSk'[^q +%ki&CK4#*F4*L52IHtCDhK]/,ciEi+?Z=pi:?n`FO(hb_rQb(XaLDAmH4\>/$"s@Fq9hQ?k,j?_XWbB_'M8VoIbY[/]NP'6u/:TQ& +%#Z)Foe?A9tS(pu@[18>%m%?^Dhc;\DNJ@Z3AjP(QBEimiPibc!59G5VH4e>o"jl7ji2-[D.NA)d2p"V(aaQ>DB@L6l+%'Muj-7h% +%r5J>#ma_SL0j>^-.;BU^3?NA7P+o[=Ch6DT0Am?1["- +%9VpiJ[kFY4\=*;m==Xmo:Rm8">TV:1oqYUU?,:-RFku_RY[YEQ-7Z8mk +%5gaA#B-Btl:,TIO,s7S5Ucg.lX_[cE;j8OnH-]b2-2#C%;i,GNDu_t*Vk:0GYa_eaTP?pC\f@k'3Ls< +%'C^:,UfWgEMU:[t,2p_`:_JuO7$mm8,Y];5')/62+E1AGh-8g%sl!h>i"DJ`;$Wl(h0EcQ1mWYZ84Q*AcuW.We-NcVFGUiGOn +%__e_#Fef7a_K4RUE)4'HGcGQPk,ecO/VcIcX&*?)Y-V"D\t1r4oWZ[h%os]#;utSP$>^cUL/J3'%Ra*e6dD4 +%17bS1TR,mYU'19=EP*cj]BaJ)_;nA!SJN%>e@sUnd26769A@"3/U9S'*"^7-k91#cWdnbU(UP_mTVD46_up'*$"f':W);T.U\Zg+i]BNfeM>BB;d2Ot*G?ZB-.WfF1Qh0s;jeSe2T +%mujo!q[V50`L]*1`a8&Xi-11Xa>^^U6OM`6A^ltT?\h\eW4mPuHcbS*X><@rc=7]dfR,9CnjF>P2[CV@bH!^MOk +%jHS4T4\i(SC-*>F81:%.ZC/"u)m%dcO\cF2n_>S?G5\k9FPne7>4eu@4.%M%#%Yg+W]]cRQ>VGkEM-_uY$u-h!Hu=':W/p+A>=/I +%-O;j\=WhHHl#q$KfuSe,=-fuVBP^%QBr<"X)VmfUZnfGOh*H9X[lI-!XYH'4ig-UG,gU4DLS@7A/15E7[A8,t2'5a)nD,N@AT8N_ +%mFF!]W^+fs-d)o`Gud\.A:&5RTbDNI<+$THHq2$SHIBXKE5][$K%X+Y]p'R%I1#%\a4@@#N65S&VG%N_Ke%+JMo(8dXstL>:KU!K;5d4djS=W,j1VKC:J0m4S@24p^Xfk^(,2Mn4T('dYC!IGSeX>dYnhfOY4F32\J'6pl4`clV&Pq8jW$W\m&[oPrb#*l@DjeeC/#U4#MTPQ- +%S6T);T'oS_<,Je,'"UMPj$o#1e2\_2>Um$m:*keRCa*K<.'Hg>AD&i$+sec8d@ei0^t_5>dSj;;IOlKJdOLO+Bum(+Z^tQ5mnOrs +%U`bEQ$`'nA[jMkTR1)"4$1&uW+!0O;eIAtbgVal.23hW'\1P`jas#)k#s0%]CplZgSJ4^as"!T)UOe,jgJi$EjTa4'bn2; +%"p+<`*P43:g-48:E+aMeG!uiZN[9=!l;;Vd?QO"hEiUARgm3rP^)D7>^J,9`TD#qY;!3R7 +%8E";/N_V;/_b;FUnNftI2W'utl)aNejB=E&eLOfS+;VTmR@F,[nOUKkm,4QqEn!e^jN/p@,'V#Dq&:;1'd_.ZfAp<@qtFV7T9P[8 +%47)HtG\04kifqNdHUU-Dn_d^8jZ=Z#"ct45@Otg2l@IH]C57`ogF6t:+T"aA0j.F,k>QTZ^1erV*$Gi/&Z6ZUD,LpFa!5A55Z"'Y +%Y?;DMKABo!=B#L[2G^J:92)>)JldKA!JKR%?$/s)W=C;hjYWt6.t)>;#kh0l2VP*@]VO573NbPP!OP.B"#$/^mQkY4f +%#8so#"7.]63[t0H,*'Q.+!mB+Atc6UX,C52Yho11iiqQr3_*sFI?iWOOr$SCgAjl5DLHqc,pD_n-A#Ropk=$eZf)Y8B+([oS6-W% +%.*o]l\l@Pe@:3WW(/qMcW$D;-8k5PeUju6R#b4eT-ab:2\1'0E>H<[0/h0GRZ*h?.?L'3.Da+XQ=Y11Jh8P]X:p&KIAmPHZ5NlWS\jOO^(`W#;`WBJmHrrGZ4@oh3/ip&LmB +%\K3:Rol60rAO(Zl@Pk[d?rgl$a>gJa,0OVLs"mof@C<]>pK6"M>uFmuC/4mCn$jl1W,CCUN^j>.%QeSYh,omn#N7`s+Z0h>FsQrI +%;KVt5[`!9$ib9;R.*ol)-Qc]nG0AC*NhWi`Ds&RiOonV]:tZ<"r3oAKWY@:H#\`0n\l<sM.?dEC_''W1D32.H(s0)FZ=9&:Rq#A8ck\k']s7+pSp&2XSp!r)(^\[i:iud-krTJb0g\K+[\,PE+?N':& +%s70O6`eXTM5Q/d/IllMpl0#ek^Bm,Pm8`r+p=6?qot0t)IXM+^mGHHTo5@q=lD7RsrUe@8OC)kfho+o#o(gg;^O#RbGMiAlrTeD$ +%q!lnLqq]$]]?XKmrH>o)h8TDal_YPrfrR.(&3a)A]g.YLm`FoV6:H)Y/!m7%!Q +%mJZJ'q=O4Po\C$bqU9ilJa7XTn$pYms,*isn(teSl`2c/YJ1"VGPnkj[JW8'XIm&'07Wd^I!YDH+7$E8qXpM1o(DkHlSj=lr]Atb +%qq\02oDP^S]GpJ@gFp>75L66cqnjDW5CNFj=+C7T^3SOaqt?L^^n.2`&1<2Vmrn.8GlE5%hbk:dZ42/?A*oFPj +%YJ5RbldL?`YMXg,O+7+G^=o0nD>cOYs-q(#rq0W)r?'d4#fV09s7tWgrL[HpQ+qh'hi66+^NgRcnZ'eos/l.+DY"5itO_nYbC +%s7kS(q:4*Woq,QOq;S`ucg&".hMs8'q;`($q=NXhlaaaE7)/HTj7;L$rq\c^mdncNm>'$&pc[g>itm/b#Apo2gEZ`?G9$WAS)aFC^%"a"U\s,sLtg6mN#7"P?c;_4gEQ(#YUa2Zl)':4kP%A,IUPmfo+uU=]RFH[`:ENs +%@GcNG47(q(]4$ab[i+oV"jkQ(H7KMkDqj>O-H6NnCaq>r:3nf4C;?33aU[ck?n)bp$sm]X-^;9q1[GX4tlKF?,(i8^OH(Vj7E8oAde;a +%iTL"mDO/J5c`8[>P@0<[E6XFcm`uuhIf$&+cags&o:#nL5J3s;So53_nb'Ba]+6"@4b(DPI-LYU^TqGI1dn_Nde'XY)S#Wgnr:G4Zc!\T/G(P.i5qsF!i\>d5krYINb]B=Z` +%$\.pK0aQ9RM3Mei./kC7J's7::5i*--Eq-RCMs76(@ +%Y2u:Js2DDDbO`KYQN-aX0?>-Wr]'kd +%N9]0\P\V3;ro84K0AA&'C3f^8j6JYqZ_0Qto)+d!UI*pWmPjUk^&S!8b4hNWrlnk-J'QYa?FuJ/,)@iKpk:ANKNi>qj8$Y)m,*5kKBmg%?OIs67McjmuUKi_)Um`ZP+@5Qp&_T?TQL,cH\urPb$-(uElLC;8pB`=)-` +%qRqWVg>:u9@LZSgNS/CYJ18er43GIK+IH6o7-Z8)unCAfDkPYrr2B-/t;hpldPjtrHlEW +%l3S#"J,&c_hK_!A?Y9?'ai28"`jHo"JS\\fkEXRVIsR$rZ>f%(gki<"c&"54j?e)ol"O +%<79gKBs2=@j%agRoq#&shNPHJY,WPi]+k.I-rs'eS@%PRZdo#AB=cAUh>']j!,'79ITbg$O4k-OoN[=SfngFfhmZNs>p#"f4EKGmVT5mphIk^+NSV/H3QO/"6^Ln] +%D.qP3F.n@:2qgFV,KA0'c4qt3Z<_akf%-Y1/4(ApZR5b3Y%aDQC$-A)1/n`K6\iZd.24*T>0C7*?a49A)'@.cS;I.08Vs!4RO1\M +%)7nbM)qWJljKG?J=uKB(SGUDhUort,c%5dcM[1]/ZeC6#]4e:;K>sYK/Ou\/W`nWBGc&qsj^EAa/4oe#79\@TNd1dE=#dJi?ZM!J +%nLa"%(,XK[DO/9+p5WW&^5P7FZt+:hC/_3.h2RoUT9b+!Nn;cu;0?Qm^D2ft[FBK1C#IZdA4=Alf2)S1W +%2aV`BG,[!'?UIk^2-BH*5<59'Ptg[d:t:bn%9O_:i%A!@S;o3O0L*U\cpV.pK$)Yibh#UADc?u7W(57dRdC[s$+7BoXNnKL`]WA= +%pS9:8f!?FSgp/8FDDGr@fG\[(ql#.T9CuL0\RVX:f:*#;a-0\:Fl6Mung2>u9/#C`d[jFn4kZIN1dH49^Jg[*Dl8;<87#R8fTCES +%eO3H94g@2X00Ia.-9hoo)0:/K9nO^F0fB>CCugft_Zj3T5\ +%iHGGZ*P@Em]Vi^&Zuqsl-Yoj,mGV'GkW_Pa]iJR:CQ*KJPrM?GEe0&t*`ua<-G[Yu.dRGd9GS_c[^>-KBk0/P8dVYn_/dq;ZL2I& +%`B-RFWO="]NUl:JE4.>1+UK,n_,*FV+!NOBGqaF2(hh_oYO]JWLqbPU3u_iW!gbdmpcU@qU\30t"5M6&:-X$3=ACBHCmQYf1E'h8*uaB/XBJYXo=dN6'>Te4#"UO?3%qu0F!42\!0mB;eZr]*Wom-E*IX=b*_kJXnmk?sVY4Krj%<&Pb(g7H#1]pi +%]/$1[P>%Z%gL[p]RA@/o@!1`]f-td<5l\P!4:#MN?uWAnm\S0"S5H'.Tga-l"6-moa04A!P3X[7?O19<-HhP0*?@&!kH>)4/cbd&JG.ri"='*+PLn^r:!dONuaI+-sc_2bD?A0(8Z7(o;ft+ +%aV&4IFOp@dPc#ohUlIhE_j"A7W)E`T)j[Pk7]oF7PuI!^l#\+,R5YU%*bt69r[1?R7b:]4i1;m&:`,[^4d"ON)C8s-EiQ9CVcFHs +%=_:`h:R9LZ4mJl'Zf3SVO!*h]dbduAWCn-#;ep%FGcEm4^b["t#]7+t +%C8B-0>*#EO,n!-1CcidG<=Y>!U%iOn`GS_-?HDJtK?P]n"4gP!E@E=?I&lDI15p*ITHl3k?Xp@%F)#.*Xl`@:X!j_-\+\+iA<,6j +%LF;phXM:Q=j\DC,M3FFce(7:6Wi^REi&J;t31*]KWqQs@Q6"AUp11/e'.O!\s +%:XE:1ZA%?qFHk3SD-6T>7mTr;RTofs>>^"W3'/sn5La-l=kYkq&GSK]^6Fe9djd,S79QE>Wf]O\f;!tpdof(BQhTXZD&+Ss_Sj&j(6h`Hp,o,AEJe8@U'i06$oPl0P3*f9TDa=-.!*01M!jDK,gu[;V5*,`\'Y(5;*A +%b-X?'Z+%*=LRM-t(R5WD%*C`8TU$^-dWNOJ-@;>uq8]9EmVdBNDWnCLR6U +%LJ8\VKjr6K;8\4OcrH#0.Mcnug/BFO?\09J%loU!U>u4!%GA!S-[m'gg+INDM_n,j8]\#[nYE(a"d\D5DT_iN]8k#bY?cpd0d#,9 +%B].J6%$U_1<_H'ah;G30=4-:)F&l/0ngd9TgQtm(/rVQ>L-lLT@C!-kX$(ap3m32"V"4PM?hd#hfm'28#G"kO&a(i13I#Rb$pWH^%(V1m`1R*l>VYN().aaIqQi^ +%CAd%i@d'qujO@g8F$fU9Pu\7C-\FM/e^IkaCfO:8*iCj26d^:H5Y!XMLcj5-]0Mchf3Ai`\BfrB0g@fa9'kd^7C2\11bB-S-"pap +%<%jdlKcc5`[qflg;6G(\Q9.oTKk.I[f*Pm]g6\?WiKmQjAd;8RUVJ,:p/?#)jB"Crj)0&.LGr/?8@%sp +%=UF##<^/REX#Zj,(9l'J2ejd"io#kdarc_oAV*'j@g\D%C]"nu%)#$6ng97I[#H9D6jEfH*R`"Ep4?7p^/sfElPh>/t%j,p8Hb-0gST>Skri!+@Zrej>9p +%PLu\E#^69)gKbt_&[A'5JSs^uZ5j=GZ!'2VE"!U^fj&Z[C.dhUI13nQ0j6Np!E5p'.ojOp0Mul$0-#\d*/QmJ]c^D:JGU.;(/"L[m\NQW[b+N]9(KSafHYGOr5>ds[As +%8iAE-;<_J3QSNr&HnXY(aLTX6<(;-D&V[e%9b#V7q:^+rXc,EQC +%5fH6\lmA2RZQKTo&[8*D:$Ec(2:-lj'__(PQ@5S.=eJa&1@^9A))i#be^UP^3d/5Y.Zns9]J?"2cFdq5/A(LQlTm+i4Z9>(H^Bho +%1lmh^Vm\DVrJdS!S6il;)4:BJe.)0J4(KB&:^3"S-D+_M(0C_8X>sl#rLi?@$K4"O +%=LEM98[.>0V(^@j,9XK#olICI$Gb`YZAX)2)G(I6L(8\UPCjiSQ;:3e\<4B:Am4"N8g8ho+k@Mm(GW?rVM@PdNn29d:FSr1)H%\aqB]_no6G#G,5KI^Q$C1%oR9&F4Uas;-qT!5#%/?>cW +%75VL-bQYVl0+si!o@>Kk.K$6)UolS"`e0.E,=1Z5Eo^hd8pN72m4*=."ah%dHOrTJm8Q9L.nJQec-Xp7O!8:Ai4'DucZin!0/GWs +%%!\bS]2!9[j>eh'Jpoe(9806DNWZpt@K=/J>^[%f.PXd*O//CU;'0LIb)0%^'cl^94Y4W"1`GFChZ1;POt[Z9^N@EuhM.S_@-t)` +%RCmfF$I'rRb(L7e#V,P:Ur/CEpMhK2dPhDA'O#=.'4,)Gdrg$uk[AD=H];I!71'_5OkGnF\Ul1;Re8)h`:fkVcBJUogeAr9?m["S +%2c8oB%hQVk/5i6R3`W\kD,*7-W6G.X_TC:ZXC:^srh9O0eQf&1I&81$IRbG[ce8FM5aki(4FWK7V)hL(go]Bc%kaBZaLCcgi.kQq +%Zdr+_?N._"WCtQ@Q+u7(T"@JXKKL#7=)o=Wf;e]u(8;kSh0NuHLoq6#66f2XWs%Qn/Qn!K$[A`8IHgjX,#W7Tg`93D +%CXBU.Z@6jY5^-A=1aAYIYL&"m!dAOL_J=KlZB8)'VqK[30m+,9*S[G&fLbsGc#G@$Hg4NE+)j[dT&_30)P\ftFR*=%?.-1l'tSP@8S6 +%9lpHpE!2tP`SehRkn,+8N,5@uCJfn&\\OcIETo$#nFUg1$*3/&PY2!e9Egk9o:5.k<&q%Or$@-T$m'4rI:&"RNKXpj)T\_6rR`2` +%eSrmJ+\#nLmN5U>*B.osaqQkoa`ogr9.&(='s)H>@.(7)<5%NW'Li'1*#m7@,Jg\7WL>:18GIm2b9+G.hRgq"eXCL`K;klCC2a1N +%E2%]BPV0k#f!XYg3EUdO2(NC:;04%5Y1;"4S\7g2T-7UHMWaqX:\pJX&?>lp0-CW5K"?_feiYKt(DCopBkF`-blp^MSW`/n-XZps +%7WhdBZ'DZu`AA"^U-Stt"4mSKTYLfNT8mQHri:QrYN-snlnR0JbClL[1Q +%l;<1hdQT_pWKi'MpUhnC`BdNM7%QPW$9WCd.X>oXSJT=]FK3l975*]K4C=U>e*QqeZh6V-4id,l;96;IIrc*:>1rKg,b&'L1=59* +%lt*O+1]i7cZsKVN7sZ*.F3^1TjBDXBg>Q*!R`K_hA$+\n^Y7@?^Ub'4kq:fY6:A,A`\LNA7'j+EhPIVd"5;s6IVhP]D;N(,3X-7" +%>Gu\VW`-(M$V/hLeO<9:\_dlHCD%Vb_hFF5QuN-cqbbM6[d;q<-SL6bl.a+#R+&/1B%L@.EfZ;s./5 +%mTCoC4Vp8OGS`V`s&@q%GH8^idNDOBA6(7,8mDi;LPcWMdjp_>S5g%^.ejSh!,*(.\dsDX?;jUN4^l)R!S;4TP8!c$ViQ8[+e'c/ +%6i*UA8nK)Z>G@gG/gDW@SkCK'6kD=!j`V-!e@js,!0qHq!e6T=0tNQ@UVC`WfU/l]'P9pWIM>$KnCk6 +%D&A$sNM9QWfRQ1Z_K*7&WRX@9)o^bB+1TD+)sO3%8\!Mh5Fp8FbQ+Ie?.AWG<.hcc_dENX[Aj]q]CUWSH"X7O<)qm'K)+l8QR@iC +%Fi;ep-c\):dA\X-Nt;2m&%9$NLUr.f*?.s4F-)gW86!:iRM45ZP0,T4YSq?X^HknMfNoijJ>`d7AWS5j+/="*?]Q!7VtBq +%MdK2+(1#N@a$tI\W02n9;ik1h1gPaU1nu\T2'U989g<7=d+sI0W)Gp>"l\Dfl+fSPh%[8ZU_GGGfh&50.Y:rsqk?]dnd8RYnA$I" +%FVOFd>n+a$/ha&)oB;qc7B[sR--bHsU!PLTd@lp=Lfk&Ub#2%nWR=+H"mq,K0 +%%UFt2?2F$0V)G5W[7AnLOE+d:.FgJ4&ub*l9J**-T8j\1"Va)[I7GU-]*C8_J\4V"=GWdajd5hHrD?]A[+`o[?rY&$GP3'sH<7Yi +%lu&GEZ]N.NQUdLEIg(nK=IX=a1fPXT"NlKK5Ds?u[tCC-5*S64GKa-oNhZL[X=0@Rdo=#*-TiFgq(6(Y(1=hl_qUGEGX+)lol`kT +%!%B8.gK5kZ]IoMkSo'rFCeSl@!g6d87"X*rS-8`QrO-L1Vq+HWC#N+$_h3A2BOF2iWq?`#5E1"=N`KJJEemkf-[(J-UHpssbL\=@ +%&*Jl=S`,U7F=:]dDk3ul$*#LODjnu/l^l)H`2b/*bA5OrWls7>G*`8Mo!@"!K*kFRki!(o\'>IG1t/#PL^J'#i\>*rJ7B*iIOS%A +%905)%:,]9dSZZn-`2fB4nX=>-DK_$cj5MEiT)bJTaLA,Qb6kpM=K:fpKi0`,i33YdaTf\BHm=]`=O0:d#)0l*5u_V')3d?rtf^-O+ti2>8gcGii%Qccn< +%7XS3mLWT('I>[caKhkXF&peaJ0$00[GA?qJ:n=X\8[aRm+jqWA`32n!&L,+*k1%D_KPa[\4N/s%C"VL%%J&H+%/RX_HQp(MOeTBX +%\#2QI=i9'Q#1sq8]VYFcbb[_rm]e^#Rm3]gK0!tpBh$5'?%I9%Od-#7[R^m*5H9%6I-oe`DUG4LfTifeioS4Rn>"u*p7g9D%O)YJ +%*,77"A!tWq-at0g`)0@_G"OK*JEt^,,=jY&n0Rq=i-!Ok.Z6k=>]c7$AeC=\!P@&$gK:EVWZj/_b*!*]b$M#+D_**N%m;HE*%^Po +%HP"k9DPL/DJ&mK`:jisTPHpg\,4@8jEcd2QV%)4IGqoMGiY7Ft?be-/%>9QcnJ>aBcc%F\LEn0k>dm$m!i&fH,autdr_lO9N@g(l +%<,_ibH7;=q,bUJ8E72?OHO?eSaJNJ+aUOCLZYeA_8K6Z!O>X!9keWDglF!ZS;se6I7GGk/Rl^dg0i'tRVWhpo:ki>7Vc6je3jm0_ +%Bgi#@VKPXg<^!*`d/bPog+=!G6*T[S?<&df6%+OfWK?`t,Ii9=4e3rg<;cjYqYGa0BSq@Bq5!_@4Nf&/b%n(i"P#[adE&L*i.5ek +%n5Z%CHWMSS[gu6B/rQ'o$b'@&1c&trlh=AP*Di3W`sRf@US2_5OEbT(3+DL)VLD0Y=!"C5.A/uOF4mL0<&nL#0K]utmtF8.1ad0% +%qljaSdm_l#m&cCX[\9:;4f@A!HNJ%aSI1TI3g0&%W6^?NE76[[-O/=/8b9+=[Y.@.NQn5>IJQ_3j,0`GQYoMsKg_<5L^S6Q:[,1O +%"eP1g,<3)SG+U443EGRK:\*aL4le'r(ar3<\0ku^!j2??KHf[pWD\4fmc*;GMnC$j<&CB4fL,,2UHe8dl$d\gtjf +%5]Ou@;SaOcMHl^!.uB2AZkL[!C`?bB\(t!<8h"DZWaA`7k=$/pN)[p[b&#J]B0&0.frDE3*;D*%)f)aTN1/P_Xb_am=k^0^_,f"4 +%XlW:5ZQ"jhn>BH8,il-&%kD#[%)R'0F&?Rl]?J+*S!)@r](cT; +%?07`r0.afg&='gjd[]X_("McLV^WIK)/["sPRG$&c,%9BO-4uB#imeXoS%]6<)Yn/<<*S8`#t_,]KR!@9"$D4[S0k@ki2b)\ +%3/aj[P4%@pUC9&GW(=YnXMT]NYVGr%Lbn>n.QP\+'pb''00>j\gHIOeA/bi42VFNq07C,>%+g9[PV,55_M^FlQK2>0b]:2Gg%jCY +%'>>,r:5qP]i=Yt<]=a3'&SKiT-)tL8.5K%2Rq_7Y\s_tb7Jh[o0hL=frAAc;IRl%^XW5/'W)A],-"fqm3c5DYp;odRYb0#mqsp@M +%[]_%^Z*LmJQ$@jYUY_".7`s_^FLU6aZXT)lMS.$Rl8V=6dm[/Qfl4Q/HBhDDVfq7=.H?s(I]Q\3?D[I(MqkIh!F\IP2#D6V&0X]h +%"Bpn!V"-Cf'<&%XG(&!4iR/S%36.3C@GbBX6l*WT5fkQdM4:=*-:dN0-E^eILK#?WpJ$LQ9rG8g=B=pH`S/fq\nNM.>"FGAko(l4 +%ngqA#jWp+eH,%B4h=XHdSs"qH;R,i!:.k48K6;^(O5@#':[+[,8"_OhYb'X.]pKb/[q,LeMFf4ka5p\`eNjVPYX%TeE6PIYnuYUI +%-;R1/fY[fo@#)'<)+Kdp>rD[Vbp0/C3*VPGhUaHcg.^RsU@#.,q.0MS4dNNX\tTe(D5e*OT\YcJS5/euH6HJ5cUNLn[Q")s(JX8L +%NlhIHY1^\IS]Y?*n=rlP@jC(Zm3C.)_HBU7t>-"mFG],/V'GH@_d4(-hQQi1n"<*a:iJ;3^,fpT*/L!htY4Y:`WXWZqYpF[nOs@21D<^U+`G"S/6_s7YNo\W.G-Db`KAm$%)u +%ZV9Yc2;>]>Pk"R!Fhf +%[eY1t_!Q,m-!Ng>&ih/mL**%a3733Uc=gta`Pp:BMdUW@/N5dmQ!QQ3(5IVH`[>=ZRO]Z*YobH)BqdJlRg5MN]B"n!_\]>:Mc.Dm+i!SQ7a4SCn2AC0BbFkF8.X^S`p#ig +%iBck$P=N>_"'4fR$_Z1Z59nd*SW&T/e)9k3PPh1=T[]+*Ffk6V9j/,O3:3a]%E9;eW&Mo>L0N8C!JHU-*i%qm+H_AaXk'?fO=XcM +%oQ1]$J43IIL3BR23,H(b8Z8OS@"TqEHRp62D5g7^Vclo?d".?YRSP2XBTjWSDGW$$JfYUpjk%Ip5:Du_l++tA7[&M>KhG'MU5\rS +%7+#lGh8H+DqRu:)]mqKk0OjrWH,:0u#QTAle+]/.HCn@ZFt/ML[:hZN>;@L\2MOYe2uO.)/`7?U?u7QscHgh-r66HPNP4s/g0MM& +%GkNMsG$PNPm-Q/l^JY&Tm<+&mT+hD(GnX_5AXBdjiQBQXHE[O\Yc0<>/M8]g\#fBqd/`D"!<"qb#H*;r7)NCE#q3ui1eLkU[2LJj +%2L`)Pj6mZ'oJMOpRE.J%9$da'FeO)7((/2sk"FRu/^+tY/Gp-GNaqr,g9`eX<)Po_V&)+$itdI`D_kCBXA.8K%$J/['#ob;%If!>;=\*B3K\l>fKdBDZ,)H@^:DW>](D#/%4Vq;78Q/ig7"tLT< +%P*29).P"lA5DWj0/5*Dth`ZK7!;]0:3UE5@_Z;]X/\r/uc'DQ=rO_Wd7*(?3ApN0C-UMCM3KRX(<6'l#b?XjQ(PN&)?bZ_D=>cDq +%r949V3(*e3:=3JYrFT$nk4qp*.!&Sf%\a$T4hFR,FX#8:.(I9)KN.&hf4F$KB]Rc+NKL(=!&t`7bSC6jaMiI9kH'i#oP$+1/#Ad4>#U2_GP1_QeC-9C\7NTs +%G-XD&gG%)ED2F*s;qJ!CV;HDZ4_6dsh%lI/F/aHcT4ehue16r4=YWba+!e-bWbU,+RTq3r$Z&iMQt5@;G`9@1AQ%AE&4hBI+D*U( +%*SYJ=kW4]^HcbmECnj#[DUKIQ/Bb2EG`HODi\552WFdgJ3&fBN=n)-\_):Qa5\&BbL9M$92huXNH!`]5?"@Z=>8I?Y@9PmrU--%T +%W`n-G&iAAIp6DUtnDs8CkZu9CK\f,,!ufsPZ$HI:+h]tJHDt:j$*5_gZ\I(?lQ!RV^3:2cg#IdaeA4-C?mDomPI[c7dkH7ANU=C +%.d?SqctA]UW219sq(6TAh_S'TX95N)AZ]X8%QA3HBp`^Y.0Z'ujM(OTBlZink/loY=`o=<[dtgc=aD"-S(.Xa#()Cd[Ze@hN9;hT +%3>[7Z@rt;7@Z'&kUKk,I3tF]=8!6Ahm,i*FI5fDIeR/Tk%>smVjXm+CB04&DkAj!al$6/6*M+g.:.A?eB'A&".3`rf('V.&6NP2M +%O$Rp5ftkLNXSQ%1bMoKqZcD>,b\1Ta=D_6knjJqLbe.s_BU2+*2)A1.h>r1M\F4f'M/SSB;L$p;RW$[:9C%8n!LtE:]._*?^`Ka^ +%[1->.4"o&s[2TtWfXb^7[tcQP1I8*a(=G;?0IP^1(`?./fcno]_*j\j_=_':-GG>ed]$F]=]6QVAPo,bLd +%W%>!YXZ:-?/lrf"bW;iJbD&eaAERcUF>A"jmc>]"O.qu4ZU]'fCOkOeJVQtX*AHfa7a$r!6>GDePEi\'`=tk'CURPCg?WdfIiHS$Fnkd0WtR.?p,Y3[&:oB!bmcmNa=i8el5CZOJbjb +%L)?#pm`*]91dip\Cm=B]MI"jo25UjAR^N#;8$IlO4RAi*\>Wj:GRm%EW-:,#V6H/P#nds+C<$l)M90.g#_:>M\#Gim/>gQOJT8ZN +%'K516Ad7j*:fS7W$!_9%t]\=F(Lrie`A)@2+4m^I0WgfpZr#_ +%MepgED.0YZd1_D)m'@cHn3jqi_uTB)K+(C?!oR\\9=[+1e1LkU'J!9RH2:NK/`8t].8Nm!hTc10*mG!h2>./sBU$>33h!?I +%oj$?.i":5 +%R0HPkV&J[=cJE)'/0U7 +%P-:SjDqMAbOQEbiRN,SdS.]ml@*U.gTgH0'ZeZW%cB@(oMZUpSQ(UV74rsI!!!H^$C$Rbk4,O_.eJKWi2+l't7Zh*-(?G<$*BDb* +%&r/u`2*r:NP3@+ABsXYYeOT=":(K5c&1-WdZO^j4Gb6I#H$J.(BcGPc_\pT?QeFfn\:YD)lb`U.Fa=NgIQE4\@r0le>1]j1?$1%X +%/BtD$P6>rlM'TBm5dHikC0l@RQURq2o<$XKV/EXk@'r":a.pcqCK\tE.8E?BF#ZtR6.$_&$.=9U5Gt.sKm@9]D0H3":*.%(dLOfk +%%s8:)Qs?5g4!;euSWB^:TlXgp+BY.2r8cMDSbD44haW%/!sDVkfc5W%L'HmfLYiBi"T"8;@RpW6H);d*_Le#8ZKj#:/M73--`^rO +%D)I'GO+Jk]i^/HaEFZI;#>%=%CeBPXjC7_gB9QBXX2sfbM3nl5.@HQ +%p^nZuGh0U$RR(]g%+#kedlK,o7TV09IA3``8QBfodbN0OMW;bXq>_irZ:%tp2lDPX)p9;V>8]V3[9ggff,VZ"%^s^9*=&fh7@Q!S$ +%#Y&a`N-q,6L3D/&q1!D,':X17NCbWi@URYfgEV8#08c:9rW)>o7oXNs(rbH-IHM*<6ll(R;/aRG,.$j0PQP4)MHEEj?iuH+=heYc +%S+cN!+02R!8Qt;s/X]=9Q,!g6'ufUKWrtjZZ36A`l+u\6FH8"ukdkuWgH59upH_;5.8jmj?Bgue*92iijAiAbFA-gu-s/(PQ\L6h +%?2?6(;H>`,#oSjl?',qGd]?:FHSn6l)oHJhe""ijfEb!SG5ogH.\LS16!c\H7&V4MtpE^7*f>PH"[7Z;P.74iM(se_+YQq.X4d.tDc@1F*b\3,>[([@*PC +%"#q"6&=1B\(#G^a@Zr`^*L2`Hh-F%fCdFHn@'/WaWm0']^[G/NS=2n\SlsCT9IW&[)VQ.-6LKNRiIYHYGq@%KD=aPc;Xs#-`&s[Ms.M'\*E9dj&UL.I/k5U/Lc!Zk\X2M[oK_4g(;uUV6O+pJ3e?'CH:04=\#[-5`eK87:Ua>R&ji1>LXY/_Z +%"O\QCKO##oe^6-tP>YOo`no&iOEtIfPc%HUR_9EAj&1h8`2H@B+2TKj#Di:)?c[1WlXQdi! +%)KYuI-EhLLgDYEX]\@`]Yr;'AFEC>%.ni=m*@fU,cUe!I&04Xpe.cVl"Kj?4a7cI$,6W2>fM5H*QC.%MaAB*:QYcOPV&blXgirfu +%6ln:d2@@B!S&_f@,Z9CSY?k^]I$7H^W)/=M=jc(Y"_N#oDLfLD6W+_%=$NU1e1k5YN/Fo;\T(]8RD9hk8KA/+b/bmbM;-IiWr'aV +%RQSdC!jPi2K#k:T?'Da$\0=rT+7IW!mH*l`2TeaBH)St6NMbjY9'1mA:JG7t+IcENXdPdAVGd.J/f9gLRr]CY1`ZHl,+L9))!u.E^k##47LK-M$6^nJDXg)I.GnZn'!0.GLS&^S41lfQWTKWDlX$'"%kqYU==re\cp6_="I=SV#:C +%:BascbDo-H-%)=PK4+b4F5WX,25OmD&it?G9b1m[)^%a]!Ki&<>$'0%WEEg0OYrrEXfg[4\P$BDHSr&pQ/D1-%FsH3oQFltPQkDG +%q*c#s:3D'04Dpu"Xm-Y6)4d&:CY91&hCAH%u1K;/pk%KqqM?< +%H50=ZhdZ59?R)oIQFC)#)nL;]@CT$IgN9MWI(;+ieX6a`fgeQW3!b&7N%.H8P1).W\3e9+3jTq&&r8^DQM%%S=*Y%SI*3lpYJLnI +%5tQKgYU;`S:AkY:%HV2@)M]dIAf-M1"7f"%cF+A$(t4db!r%Fspu_/D)R;1s'ji!chCd\"s-X$3-UdAZrJY2;`i+O10g +%E^"*+aH7eZ'"'NgPhMdgm*,1m7!PXA/+nq[EDeL5pWC-eLM-G3.Se\!A;.$bAo1I4_M&fJh3##=gSO.)XrSsAi_^G"G(Mk*:h:f_ +%Ut:-A/@S9OfPTl[mQ<,q@*s1Bff7/Q3C+l7/<)bmitSEFq!aecF8fZOPScM74e#38RW!N;^+G&eU$.@iP>3[.kX"`%cfKh*8-L=m +%>m,2/KgX6d'JuRI.5>'2RS3WFOZ/Xj[SWP8!3=X1CME7LWbft-l#j]jaNjDNGh'Cp8>^uoa&">*,M7[RT;!a2#GqZ$]fZ!U'a2$" +%#$8&#X_+AREMSLGR$Z:'.[2MZ2OEn*OM) +%f)^7Hl;M6"14t`q?n3"qk8GhFnZ.M'lKm?l=g0/).DBRsN/a\)5]oQ,H[ou$eAN.K#VHt1DI&?dV=5JhiKej2m/+"h5SBf\=`8*H&I]1W:?A`%+A3INp'9=L\Gi6_f_`+pSibA'(p +%Zb*3B5XC_#6fJF<`BbX^WN*rC75FA;aHL05GorV!ZGO"f&-=>+4rkss7.AJ:Thj*#e^%ZDO:P-VmhC@FMAn(o%a+F:f?mSR]n5R_ +%5c&dl?gNqV9-V#T,ee=u[)t1fLK2\:Q08:t'/VV\HeG"D@7"A,B=3(`:9SM4,th*'@8-t=n9p$'#g96PZbANoOOBg.CbWHk^MNU? +%)*(sCC82?-*d,Psi;^`"*B5Z1-kW\e_=>=`hA7R%i!2ErE2l65D!=*Cb$NQ@?bc^@F?7Ee"])8]R';FjV=;pp*5+rJ_,Euq0RbOe*6gKX*H*IDDR*[RLmc9>)(4[hg^GF95I@h`op2so7E]t%<.M%8rcduO(;ILLi1P(:p50dFn\?*<+M-^QVF=0 +%]2GfMW4%@7-++h"e8B/<:R[0Z(1%F\K\oGeP(Q,aQR#V^=AknN+E8-&;Kj2\<#fChHuW6TpDTKP1aU2qCqIV*LKhi-KSlb.oILLl +%Q`<:`PF^r$N&W2kPu*0@rJA7Z#/9pIu"`@@YMi`j5,qm.\7%B.D`O2*<@QC92qV4fn@<.>-A +%&T'NtE-n9^fu>AtBINpnRE3p='NO:m;XPIDLaG9mS^]PFao_Fi.j4f^9H6GE>iu-8%GbWUNX6DUc;u(1B,VF'Ugc<"(`CMC#Q7`^9mZC,L +%N0GlfIUbMk05>KOfe:7j8P0G[-&sSIN\gbaffP!ZjeblX95EsQNj-9%GlS[aFImZZZf\YO1M\L<<18UXSDNV)E"Q'NTsZ3E#ZffJ +%pm:Y(=\3>A4c.!3o2*IZ4"mcg;7.c*S3mo,J6`@6mFp_:iPNtGl/9."e87!Y\HCNh2A)J,%866!b*oU.QGFgN_)r\<)9&2cED7n, +%e+%/sDc:hngEebig/8!&>#]F3$gq$&)qN55mRO[dE7cVl*6oeiD,`XAG,BCP!@;%3&JZ5)bAD"jk?\4T'4oVfI%;K+T1 +%_;2.t3\K)4ZtaR*D[)(DE'L:lGHBG:QAU1E9m6Yn#SU19+8]KM"9bOUO8>,(KLt^HAKTHA>+Tp?(=5srAh_d!W=d:q=*YZ7Q.pbO +%_KO%mJg5%2)<[3K=ge`ehF_`HsU\:)09L@.^-Tb1$qo +%M!Z&JZ>j>H:jrOW0<^E>?)F\U.^>rT"4?(H6u/7(`(es0n.&#NlNI-K>-/I[iNZ9]Hm12[I,]'%Y47Yn9f;U]]I&Q>\WG8-R;>t& +%QhosJVeV#R*ERVe0'_Nk!9a&-StHOoVW6E68V*p@:(k@oJ5'HNq+<])^iuSPD>PT8oK`R@:DgjLW8F5kU@&iu!XOJ]jb7Za!MH +%NO+4SO&O&@oCU`tk>DksoCfe3elkiefO2T,I!cJP(/Aq"bB_=1=r_L.,jA@)`Q+Yd,O&NMVP'uDh$>TL<:!rf9aSb>B]sk?Kt.8g +%iUFWilCLl_A36b"J78R.X2T*(LMPUq)<>1:=ni#gAm!p;T2l(kiAXmDTE+Xb%aS5KQC1d$MV.!Z7q;_ZL:aHQ^nX;BUeh%X!*YnW +%TN&K;I&FPKX:g`)c9[6/M&;`(neBAHj"?&+S5>Kf5t/opMrgXWFI>7*'keTn;^9X5ng:5SI6f/ZrZ&[SK7ueN5b+PeEnliaAMY8b +%NU(n1Dd&l?.-ap':kmkI,WDCU"#?sTjSiALt%/5S#5TBO`MnLRk??\FL&suAf/0Cqgo(=:(:7N&+>SM/.P+.Ml0LCPG)8oT?\6P=_pb(-.dudZmsi$ko:$pd0DN0+d1c/W@0<9e/<-]^A(]' +%-E2t,%X&PTXE4YHrl?[P5cb5hrflZEn?Y9@B$g1fl'TPALjmrN!k`+9!U.>G2L]N_"rmTf&[n=Y$t'g1RY]97<6l(s6Y!OBAK^Ks/=fUu&)'o;\\!@?q]c.drV'n%!& +%!R%!d/PPFZE_Fq,\2A-6RoLG*DsC8aaV..j.7ZRq7'<.\];,)+j]E:/IDKb]>Xum!k_\7CJah(*M?k4Y/]L%gdm%8#>ZN@$V#;rP.e$>nXQK&+AB6O!^\5mq$g]i%"4\^9&-<%lN4f&49fU$F" +%bBUWuTBmc/j]90f&IZF7dh_bJ5ZPIIZCUV6VIOOA@*'Gl/N>cISG_7IZalT:KbdDc:6qH>7[<-ksO]0gi1EV&ckQ#torAP&A*4OqPu5X1QS&[Foqi?NtY?`6u;obQpA*&m9HKm)E(EMRufU=/jJ.1j.f&J)H2Y39u/.!W5u!H_JM9U%V*Ui%i09Wk#k24HIp^#=_Y[Xf +%P,]j3Eg(\f!JhK?>'F&2OX9 +%qph5\ONO;h5ujl1".>sU)ZNc-amL]S=AI(5'.+pe"ce8/hLk);_NpFH:Xs9_g>l$2?g"Sg$H.>Oqe^/YO66eXV3gJ@Y6L&^Y$>sVG3@8;34E]J],t!X_m2Q +%j,6UlJH6Wl0`4'W$t,!eQ*Lm2FRpiWHelE4`A2`O/Cs1=lCCOl8])]P2g13#^^1Fp5a +%LiE*0hK+&$6[Bgo=EShEPW5t==J]>+LT!0_;)o3bC*nGT)bDl7WW9Q/h%s(IOhl:q7_A.LZ!SO-`p,tnTIOA%8aMh8lERi`Y**.F +%doO?1ZdmfM\u"PDd(!6SGs]jSl45b(UprTJ4@Co":m8e30+ZBBecA\sA``8(=M^14*85CD_>R?8:BoXO(<,L)j<8cS5"it2f=3"a +%2IgB.0qO&+2`ikud$51e3qd_CHua>WMZq>IRgo$h$%0=kmp)AM5F`?Q]k!(@aD%E.Qijk=B0okic3>gI(@h=b=..u;38XLD6S`3)+J8_]XS^Ftfj3 +%OMo%%gEjl\Rgs85m\!8&k#nlkV)R=6<=6WNg#78EVE7H1p@QKHF)7QVc6Ob8:3%':^)._p&#Im6;9$S0oc]?;aV;I8\.j"b:7E/m +%"\B(1]+%Ng2I$)uE,:;>hsH8\`FO-S=J"^Ye9F*+HW]!*YMVBW\?h"^fe2L9VBHLRdG%$`O55;7+5%Th@8t^ +%Rdj@qp7LW_N_R].1R%1(4Bhe'VGC*gFM)EsN\0gc8\AUDrK]7VG%T2X>H+Bn9NW$rZ!Fo/J@kt.g9[p(*]%AcFL;P3/MjD+W[Bug +%D=pbr[@VWq0+nnPb9jVVRJ-Zfe5Q><,HDC7_ijZO%&:l@Z)NuW*YDs&<'rF]MJ>RI*lShA;#EcFH\YsUge>P0Fd7VZNK +%1>GdXRI="RVT@.5jkp'[)S&T>Jr6)fm:l+)[)bQ(U7nHdl5@iTkH+SSOQ3X>Z,dU(>_8aCQ2gLdn +%q^"L)+m^)6G*ZA+k%7*df*#o6PM9U2Uif[gm8WK-,h/RhibB6GeR"OlELOP46c,NiL8A"9j5A^N4R(-):"uG+$">u.Z&MATfXc+G +%Z$f9DUrJ"=d#q1@efNRR+.&m:fus27mT10:jkl!DC%?R)#WeYbDbjR4["8aX:OdO*.G5\l)_ED`*S4]l)lp/9h_\-Kfch7sXL0-i +%bmBarq^'@$OpFEP=1*Y\gMmUkqh[u&h4t7J/X:2^lJsH-j/\Z_H5_p:ZT6dQbD9Z:]]/ZcQ+-qDO<(Cq +%OFWsS^ph;Q/hu+$FFfEl9+H7?9/2YoCkiHth[1LVn3.s?`N\!__._Yf%R-f5]\,tGZr8V#8T#Z`fcA[PPH!32MG$F>d3$B)YRS7K +%lf9`#@0F>2mMOUtP&8lh`4?875DT&'WqpVcRhn86$T\:a!TNEoEN69>(^)QHR)lGV;^R"L909SboI\ZF\5[l0fi@QB7k]W8ATO8a +%Qdb@K$XbHkmga1n)Jn$Ccf*u0'5q6uZPU*;@=)Ym[J%@[\I=H%I@U=JY:A]E"" +%;L$$VbMLs^C4_%eGat(gl:Etab#0.@7i_A`#H[4N=`9G9_,QT[B-,aOKQYEm.U=)jBK7)RnN?D(<(t0KZ9G03$B!>/'6/oOAftV_ +%QQk,2/Tn(0<<*,jbg][YN)N@@6&:AG&`3#QfV-rs(%FFbQR0qb?$rpm&A:T\%B%'o(sFX'$WML'ilAm8b#;L>;>KHs<1kWA]Hii( +%!J'l'XBF")nlfR'!DK=;g\7@'sCV'ZR#V0bP]kjKJ +%a%J9#+OJh1AEgr>?A(F'/\LVQDBJDGa8_HJ>[$1u;RcFs`.eDul>%Zl3I]\M2MJ)RGt:)%beNaE@>i#r`#m!Belm5YndfHn^aeB, +%Qf%#M\k5NEG.1M;6F8qFfsV_j?o-Q:G$:!G2t9EJJ5(Ft6;F8$I'Gi&9:[;SP^C\%el+c*BIcJJ8Mk@?HAoo1"M-VZX<_)AS*I._ +%WfhnO=:<1C%bW%F;\h,_V`9-S.LSc)U)6"RnHP7e;-[Psfs'($Va%:H8$eXL#r;qd]-@k,L3m$j`2sbe!=hkS;(/b/odA:\Ah?]C +%nn=TO[(0=[!IhtD:MTr*_-^s>YXFD?6$-a2GXr/E>00C]8micB3XCa*Q^9n.s +%_Ek7A.+n(8lA2sO4Zjh*!YofT=[o9Vl.S-Hc\J9!AGVg@.aKi6cI5N3?#g[K''N]hmL_)B6k-or_ZFVY?0pr7C/ +%>FOufor+YWkMSLYJ#n!&AppGe41@8R@7uN1ODjGX;8QN7418"[[.$t2FoVVZs&P'36Ccr),Y92^'cR(O,c\_2(t9pX<.'Hp)= +%C=YuZJ?_6q>Eb:'.s+OWSF;tf2Npl1Nl\6G?jV9m],Gk@:P,k&=d] +%74$trp5O%0#q_STrG#nOfkg4;"!AUPQhrI0%FZD_,oB-W +%Sn&?E-B-!\"3+'<ekr[Bn +%\OC6_C%7]'LL3PQQ&jHOqIP4tjGs1"S@>"l/M';U*K$M,DUgt1.7Y%2(L0?iLUUg+4Isp%inTNZX;1r:Iu1:%+pE@5'48u0dV[bR +%n\4+;@U[@'ka3%b"QH`+Z;#R`mEt19+`#>$&2.XpX"prurB/Am2n!/CHUru@/WQ!0pA%6-Et7R,`%0hk*siepJF]O]V@a=SZ>6ba +%c_p^iL&pjEW(h-n>^[$Rj221pAOU%2oRpObQi@C +%8QdgcU#rpY),!-aA`eBm[)H0UdpCI\37lYs8U+cuP89a/gT7_T/)96Nf7Qo63C?i;L-O4iNTmXMPbcf5bqghs#t$7no.qS^t>o/M%BT7T\`.Np=P +%`\OR]['4;u=\p`U?ce]um)u\-'q`?<+:O@\NG'c_&LFnTFqT92>TT-p?9(l^AJ`?K$X!?<%$baLH1!&p`)fqVp@^T;\%mUoT'Yr;`b1LM3r +%87\ubG@@=unsE>j`mnhcY.>9e!%Y\-lLc&X((AB*0##Id/p#*6*'(l>K"juB3MVW;4sY^kmYt&TC:#Q`UM7`&K=9!+@2ACm[TN^C +%H$3teWZCBJ?UJ8&)E3nZ6tSNUOUd(.g1cbFUHFU51T'E$lEoqO?@cdo\B0QW0u]mlrl6s/Dk.7F#H'+la#6)c%Esc>Q"B-_.DNlT +%\>D7.Apd::B?f3ejU3l=b,uS'951?=ogijX*;15mEkKBSjW*TNSi>r`NElEg^7J%inq*&k2F+Raj*a^?KYW1%m3G;\T-43B1,nA$QZ5Z2AhUJkK^ +%O#?`j5a7&*J&"VS"An/AK1Rg0-C7%a'-)Xjj-K??r@<`+#;^+[HP.tTr9Tn\O!oT)a!hrhl_2%Sg]ti!KE>Y`Q>(AjlSJ:#pO=Wp +%D;0KfRTA+8XW=_D%e8%Q@]q-R-SeSE8I3uCCuhA71L:*/?;f/k;k5aFS?qH5JjnAP/?NDWQ=EuDa]7W>9Ao_Ve2FH/LiR:fBZiVaGIB%#^]-*9nY3k +%X&=gWi>Vqf=[FL4b*Jg/OZ'/-2=t93'IHtcZan%(oBeN-Wh5a%&Y'L=7W@kn--,XNmP%Cf8mW"kfO^!.0^nF_&"j\6h<_-][KD7u +%GCibaO47h_Ff2'ped\QW+U,^7XU,F(EGGp8iofh+@I*3?Fa9$=i2(A*Q7:l>Ep6]3X'R#pJYgpG8`AP\2aB#SSf)D):Rf1Xi&J+% +%KKcP?IG)ZIY?Jj9n/$A3QLkR$&bi5/D=WcW($UupOCa"knR=;]$`DN/!2)8/*pA=fqO@[l7bg7ljFe?^ZgHc$4r.d&M>EN+8`gU< +%67AaQ2VjM/Z;.3\A@J-%/df=R4^c8QFm=f@>fnhVqeWTKm(4E*WK%"Xa$!fU0!9lHg6G.c+pcMOEf=^M"RGh9rC#=!\;8>WA2o2d +%.9d5o7%O*Ld,R)D-\5Y1gjksN"C,CkF+"0h_q\ZVZ_o^3Pqhu`W(%g=\_\TlQI3rN55W`"MmV*)*Wk2s*qr_Bu:f><9fH&-(/?MhB?]GoIVZJbUZ7&/JB1Tu)*t$EE$U3DHJ%F]_Z%1*XCW^KtNAk&Q@!;o*P,"PGbA +%:.ZtI1Z[oU&7,u`Jo"pR;D/PR]p9BX +%Q)IZPoaicl*hWpWANXrB#g\C9fM#bTWVS"Z3#7j?F3D'2m'n<;YW"3)_J[jH1(0Gq<"3ojdIE^a:PlX8.7ngc`S.bfZ$di,KW$Zd +%+K<'U@#:Z>?j5:9].0bGZa6n`Bn@pbN26GUjh.dlBmh0rd>eKJP[SM2c1eB+6MP*1_GF[G\uV]#EBP&]Q>Ikb=RoU=d?jU70QJlOkW+2/S[Am6Ain#L:XF+e=)a6$O&kT">:74*,OiPLl,NMrpXq<(i]qcb;u' +%^ru8)Xfq]U8fHd9`;"p->0bAaB?:,n6rL4AUF/Dm!"G%R0VT?bbd#Es4'%s9laXDB9XFX"jp8CeUk%!emL[YEgJ,LGOYc<=nX:K' +%#<'Dk"-3c6DH9H@:t:kjBMHQKHd0lPhNNSDHg99mB$a2T;AAIS*c11;iU:$UQ)#7Q@@Rkl6SDfE3IThgdgb4Su9r)\44.e980q/1n1?]`m%7F=`d.q#kCAE%D&$q'nj47Z9dsK9)t^R3DARV5kG1 +%-8PIIa&W6T*H$e]FfU^Hebc[*QuiI&@dhP/VOh?`72,3BKY. +%aN@F,_#US,h"5r*S.6[14\`jhK;/pF[5Aqk6?(WD-FK9HM>"C[&Yu+F:-5b"9[`<39#R_.dYT]'Us8(EYWJ.m8'PLMOEkB8I7/&B +%'Up].7%-74ohnqNVuB53i63Bg^WS!AL,pb!0D\=-+?Fm3:*u5 +%^_K]4ON=\B=fKK?,u>\D#%RM^if=a.`4=Oh-b3=J&!t0E]n;T?PlYKIDl1b^LT5&iWI'd1\*>l7Sh.YM">e5H@7k(2*;\K/b(7I9 +%R3H*bU@X9;bpMcS/dS^VRlJ[o@KLTQ%lT7)Q8WJR"$=JkbdT+V)a+`7j$8.7iSjD?L(JBMUk"O:"Z`i,nVlOR>_KUj@LSl<'2$Q# +%"GWHq_c/0!!iW[Zd!,$XCh6^,KP,!I&&8,/3ZQCM"q]OZXOJ]/,IrpN^gns^of@(A+:NFn7QK1hgn-=A)H4r01+3l5dN0C3:;"iSiJK'hgTB%GV]C$0YhpioK]QM:P'o`k"Lkq;4.R0@4->][$6hA)g"1Qd-f`1S' +%N0$H+0D9T=)j@WU'p.Fp:?apT8;\n92/q$Q/`FGV-7#E,",):_j(O3!*90*'g[\L^25-1s"a#'fn;7+p/E#s#@O?q<:dVS)!hG7ffUqe_Jia$,$lqGX0B1Q(.=jqdW +%]/(=k$/?fV]A)t@51Z7TAq/t?\tk^APf0ufl.+9C\%_$k5U07><#+S"=]s^*PhB2+pUM/FM!&VoHW1UO^+W('Ot6d=OasH.OQVjTjAI=.-eS-dbc7FsX9.E]c=TRQ[b+a922k0L$e0J(.o3`"H[mo-EC/UpGZW" +%NO*AN5iDkoF`4+9eRrHA=cKuD)Qe/^.omGTh8uU(TJ)UpIN42,Woo+@Cm&HfPGmm;_A6F>-#hl$?l!h0.Dkd_B_6VQT64(B_b?Wk]((:lDs$k +%cu2kNBj\.LY/goKJn]:hSi0V06>.tZHcIl#&s=Z(%j'/?gWQQDjP^]G$1T:%!4`*n;R76C>t-h@)hG],#E)&^e8=0YA4?1H!`_>G +%P%T3J;e2hh,uJHZVI;JaA(h'kGSgW0O'U90E%&a<<.V?CZ'b=T23lR\HObq&,=5n0 +%)Gqonl("%l)"0%p&Keo?R!_&^]FHF@nA)5?7m6/oG8B,^l(2!'KTp1hgXg(,jY:)7KZ81WTCN;+m?0`SL&h,Yd(\7.,5%p/2B@0L +%DOL5E7Nf@Pe'5ILPNh.J"``43SE,&^pAP$Is7t4FrrrFppk&KRek\MZr3h(NLL:#Fo`p!9Dn[0?naX45rQd^!^OH3R0E1b&TDdrnuV)IJj(gTAKVE +%2a>%R=+BqIrD\(:-f<3FmsG$$h-\\SIl"k$97$R+mVb>`p[cG_rR&6$J+DR9]>*l3IX(TGo8!/++6WEo?i;I-GN4,OnQk`qJ+\ef +%op=Rorl=j1ir3\QpHO*'o7-_^+7"^VrD10)onWA2&&\35a8,Q0pHSSpqqo]hfC+4U^Nm* +%IO.+kI3%5CITcEWIpLr]pZ(00mechJq!t]g3dc4te+rY8\*s:s8"s0p+-1*]Dcf_s6eM-Y[-__Vbcu0^L@<8l?`3^ +%_RoR"NVV=Qo=%ui2h1JU`uk,@G!kb^D5XSoB5__O)NoJn%SV0hor:\3o>AWn*7AM=`<0/hL5!f +%hS4?,hgP+JDdSiThu)m=?[q`YpUbACrqdeoIpb?dH1U"`Ie2\4bJ>,^]R>D?q@DK/?bcE6_?I(7ju!s]hYmftZTc$I?2XWT&)=nh +%p(L]Nq"Wm)q8:sZ^5mbmp]#R20$j(>TB\Yd2fJ4+CM*a`H&Kl6p!_ZB]t*M'Bn#`1>ktk:J,M+)rfc[GjW1M=ZZSK[Gk2Jambudh +%e$o"^d6@Ktk'_-D^A3V@S+udP24+@5LCa'5hn45qli3/uoB*I,r9\:&r'1,WDn,E]Ies'@:HY1,mrIsYrT)5t?f!qpZ13:WmGcGN +%?2DO+429Kgf2p]Ys*V/sI(Oq-Vi_j^6eL^Xui;oSVMHR_3dD5hW)[A-Xp`J."T?eA/29?*iWW8E&LMi7S\5CNHLEdaR.c9M=:Qi>f:h_nckYJ8k9imN=l +%2gfjsl\QSUIX^SR]/P5c?.,E +%hu@;;\XPDD$\/3Hb8$W(bLb)2jA,^?r:KO&)r/BPn%L@*`RY"`?bZI8`HD4URnrY#-f"/4J,8g!%uX'='WuLr8e[Fno):Ui`c?;QWIG8?[[4=[J]nTYIKnunAX\W:;=I$>5jjA +%YIKn5q=9DYq:dR+\?F\qu$^]&+gileTR\;Bq@'fXOt3!qsfS!WQY2_RY*/3ePr:dBZq=id[ +%a3=JCT4;@AKo,Q9rMNFNKcbM\`BF4Llh-j2A'WuWri=fO?T8c)mI?KA/fg8"C>/e[EKaj$WG`isE/oo,HBb#8>mVY'il,lNUDC(mDV!N9:%^i=:UP'8SUg-i&Vt)HQQTlU/!ph%2PT7KtT';Og?%p/"L\2o>#UtEM +%20Y4A5bZi!,_itdH)Iks#[.*r=^=@=fc'GRdV<%"R:c3.c99dh\^!fe`[>YDoI*f'PdJ)g9?tj?O4NcF%G;T$;P_3tous9'$TkED +%Aj59p]C#cB0[t*(Q:Xi)rWH5P<>^n+;s3PX8M.KApDpQ,X"<[HM^4s2m\K'sb8bp\'\Q$jb^rKjOefod4n?L'^7-E>"eVii +%$a!uS'A@;]\EVfs^Hu#djgnr!&sqcG2G8lH1JVi+8#A:l$MtmQ/9ekiP+>X/[_NlTmm1fVH08tGPa.;9.odAa#`bo*j_4>"mGp6F +%e$XCEl8[4RJjC`5Z]X9CXkg8eXEBOLJV6fH`*2K.E=Wsuq1i_/DRKHlK?*R:0pU.te!s@9bs#%<*Yi*]YKJ]8X;"RCNC/O/]4?re +%2oh@o9$98oA-IA2r+,VS'F,Z!D=2mA7q^jn=G.i)H5d]Ahad*#s&m2K0>8lmo&Ncfl`-UkS0/ij3HIZh&s0DTcnnEjG:>lCtWD +%XU`PLc)9+6u +%H!]q$?F['OD:s$4I8AEU6CVe-bk4#^r8UU9df.G_(mae-r#X&G9ToY*&nK,'g[XlT#4$kb`u`Sug9O-Go".CN0iLF**',1s+>9cV!rr)WC,X0I4\bO%eKgjZDc%+np);e$;a%C#<%B@'CRB`;3ja +%9GmBBG1Xh23#7eAH;[W^pF^:G`g2n.//:V*SOs`6:EN*p9g(0qtM#Q9)C +%r,S$DoW4*aRdtTu3`&7MlFIGs!"qI>CArc!?pZ[>4TM:j5Q*Z"Xs=Z?S4*UI-rD&0,76E+;8APZ$* +%C4+Z;Cm4FRLZE=nO4Ui5*7ua_Qqh@d-*Ih]`h(1u?qKdFh7,&]-#4@k.U77*EfEPD//Jg35;;op7fpbPW`([-\cm*jSZ6d:E_6R: +%Id\bcSa"DKLSlV38Vhg"LK*W\L8S +%Tno_,)Y+Q--$d468+Mbt.M>K&^!gEYS"t1moWa.!%s6SHg#X3hB?Eo,/o-W?6#m)FHhufD'VPWc\82PQ"HsHD2+QmS$D%P7Wfkqr +%7GY8.IIE>,Zf)FaQT:l91S4D?k97srH`TrTfISM'-Y9@Jl9P:bfcN\4Z`iUcOTNr4Ml2X0nmgPR!kNcRjUbScP* +%DDOb8H!'O9fE;F61@(7TGn()%()n!pCHJqg46kYl,g0ncW)eUJ'ktilZ";M-7SF-!M@rg<&Ngqs`D5]`fX$B4,^U +%;9sNOU?mq8matK$IBih8_$?9Z/\H&gRqUTS)98\^;MFtI@gcjV,%M)$i04\CRnOdC(?Zk?HDEpB?Is)E#CgZ'`N8WG-nD\HZX-1(hD!5b$eME@e[V@npOCg>_M7!ZL8%r' +%SkSQ^Yd%ECH*Hi[E&f?R(i^+aXgfMV0HHhoE&qV +%h[SHXg^'&rq)1e"DHB[)+Y^[oCJC;1S((o_Zg-VCN?\'4Y(Q*c]a6C_3YYg,L+C(8[# +%gIh0fj62_kj61<1^1<9F2P">9'[1<8!YZ7[RbAWi\%fT8=H-N"=:%igX9h-+/>aD?_4K7m/"Qkc(NK8m`Wfagj`?@D%7c=tPsAEZ +%WX04@1DNS3hXD7"jQd?"X0]T +%=,'rb;PPWVIE5s;XTli%c6u:*e%A'196$gp)SAuuC]cYB5X7)^E9Frj"k*`@@llH/,iX[^W&sN?&Z*N`dbYaDh&REK9g@]Dnr%R# +%6T#,)m"D,i>5>/Q:[k:Od0.Sp3i>$K;Q!,qM>9C&;!)ZH3ACQf60Zi^U[AD`IP+r%bM6j@E;]bbkJ]/-)77(VZWL>[9lNlJ0>6G+ +%9t*8!Gg.:2AB,kGXHqTrbd0$Zh58s2rhnBKQ@7?TQ[4YD?XP"'iRYE[hJ6X#ANuBsD-65G,q[m2ZJ5o!]U*t<.:69^*BQAA5uYP, +%K\:VVcRVK<+PC1$W@9d<[XG;HZRigGe7Mmd(J='u6r9>YM_ZaN*AjF14,$%ogRBjm'4BOF_?3U2Pmj17nPcQ:'^6?JY.&1gNhM69M.%NK"3#AbR:Y6OE?V +%\4G8<,aL*`6a3jamSRR`nE")"OoA5sSE:"V]WbE$2._:M%:[gWH:_r"";XRkRn\JC'Nn)l'Y2r+n>Y]lm'\G;JcOTO"rpiQf<0+- +%o^8i^b79LiKpd5%>?g6P8g"dN#,#pEj/WGhMPLd/o5sSNLX#Fj:>]mS=RC4S)Ukg[+@q_?cWNYe=!#;5 +%%dqGiar@hDQaen\NR[q"P!I`]?%=l]%Cdr,@^Cl;HQAA\R\_(-5/AIKe6-F +%/0&nq:"Y";+n/B&E(JCAgq93S!Y`*Nb^W4&oL+3fn1/dKDT,iq-aO+;8UMc/do=^e.]&S.PsqY\K^(0/#&kt5JL;cG0L/9XdV91! +%qGhO#_H7f]Ibp00Uc2_YVePNPV*DACf=26!%OFF!6(fIF7BRu'd]&V.n51-?21L;U10OG7fu?"lEV9(@'U!M3Eu +%ZQ39ro8f8k]Pb>`.nBTY[Z#Ah-lO*^iV9BtGF_&>Vk)=3-KkG_4K9fFnP4GXc/[M%BY54oe4:Q-gm./e11)NBE?kWaJksFNg#0ES +%,WNtOJjt&)@Z>iFWT46WCN]_G@Ad[clKFa$71uN)Le`uf:>]Vc-%ai<%Y&N1j@:8sC#Rt7.6"O-0UYh*c-R*@V^3+@4\dT+Ht"-O +%Hj6=j:?6`R%:#`Z!.-9'a:C"IWjc:B=5P7gH-1WZXog_'U.Y(t6sS2CNMSXeS.(o7dkBWDWB(%h2irm:IB-8U?F*3;E_7C!K:>Tl +%*umheNTkjTCM$'OQilg,eYn]Ol!DX[o6;o+$m_XpWm"7/1Qo*ULY31Z>uF<.'bj6:2-4s),fD!gE'JuCsH+[;6"?p$k,=2 +%*=#.b8q7N4m+n+-q9&q6"\c*t<:;r5CZBq!["69R- +%70_>.PgEVq,Vo!Pl/*X/!n/KBBFa3"lB84!2E9Y]'j8V1dZh0C8- +%fMa^P`1CsD/6-'](L?Y6Eb44@ja"rSPCL`LI1Kt4V9(0L]u`?YDop*K(I$_%+L>Y9e,9i;#IBJ*fl4-Sk3\ted>5s*8].Y\i-_!> +%@f*/](F1AK%-`!Fq&0f3d^JbT"]'+$%Q&:lkOGc-^&isKCe:7=4^",!3mhZ!TDMZar?P;/Z\/q8BIO/uVicln!BcHW7TW@%d.jbs +%R8sB?Z`cr]CM#<96PC&NHY3Zb0XHX&W`.gmrP2LX:sc*c3KB3keW5"rFcR*Z3]TSkF*dN9E[q=6S8XF7a,P&SNjG6*E>ug"Q%0`- +%EFH)H1[Hc46l,,+%>s[%8`^l?$+;bSim6q7UL1m"B?qrgYblpNf(IApm^ +%bT?0TWT([Y3XKQ]V?hH"&#,8gi$!s:nE>4R'j/XKEsd-o>TuKjT#sUk!H+SCO57WjU)Hc6hE^V:Q3p--i`lSJRA(gE0V*'Gkr@o^ +%:W]Gt?^QA^60rB`$fH_WiefH`T*`-Q@grcp7sIDVNU)]eXf;U\p/1/3MTt+Ij.W=rVtX)"7Kr8MRY)\fNdE1B_PP@LjBPoNj:Zi, +%O>'H:bcETAlAoKO9-konHf?qZ/[_mX[t3\$ai%l$d]dVaD?4lh;eO2&edK6Q,["fJHgjLDU'bG?#CjMTa-,NE`T@(lM9O8632C@ZPSblBc/Y4G3*pRO5LV,[m`5SFK@)g2MYI:Y%P520MPX(t7o#gfJDc,X[gcJn3!HPNlQ>pl_ +%KM+[a-X]r@(.cOp+HmI4JB6\7:VPA3\BF#Q>YYYg31cqYC(_Sqa4\/6MZ='Qb=WfcYAltm.XOG7]b`!&pSX6?*+m*pcA0Xffe>D1 +%X#$2Dl;6%sCLMsQm$J1M32C:DXEl]lB/]e/2tON?`pXQG'rfu"HW%^I@VNgKLi=OcpJa$E0Nke"OQ^bLa?+^Dk3[lmY=DJn0C];_ +%PiGRiMSWjRX=">(#tRsm@nNr+E5kpSAdLG]`64&8*X#/]f>@Kog@-3)-%fWl)DoHbA`2IKZUjJpohm)gF'(n_(:GN5hgBYaTG5)O +%eB-],WVHXJ2)cf\WO*b2GV+O:pr)iOe-+qWX4l/aZ\2;jLLOO.^1=[>1;J43]Wpt>F8oBKSW$@2*pum.3ihTF8.n50&r4[T8Zb"% +%RP7U%>QR!r$)[%tle^jk;%ZAoeEVia?[,4:jm;nXEu0Gifk,o3i;'`k+>>So2LL/1W4Uod5SMM3`P7&co0MIQU:mCBM[Wm-.-[-0 +%"',hNKU"7,`bI(_EO0ZBG9n)`suD7"fP0-*OM9A;QL&R29'd#BLniDm"(-B%Mi=CO9?E +%Nc"U'_iUuBC8l6pO$HfSX?lt-U\e8;Y3`?eX;7H5W(5CWUk4=@5S>*:`rSs%pl2"1`'pn'<)\,+0Loh`0T]"\-nriuUUrQ)@PSLH +%q@)_0;(p4dF101p%-%U[bo-?S>/Z7@YeJ5cR$'39brDiof]V%!f;ltTQ?YZ,;e3#;*Qc0(:/tLo:YX@XS071=iBb?Ce:pZ[O)]SLJl]]'LC5EQ=3m\HeM%Qs]W9DU8qc./mn&bkc;Xlfh"H#``rf"U4>@=T!f&C.!04+%m-<[Z9l_hDB%YX0PL!SW&ffdP>DKQ\Z/3sT%!+DH/GHPL-ZOg@`F3gf +%3OX-AKIT.cs(!DlHZ2\N2-F1eSYQ.Om(XSSg2fqeR:c\7j,p7&la]+#?VRRNb$g"4D.1J`WZLktQ"DTluP:uLCo@tQZoh\cH(MBQ@_Yl%cn8HRt.3fY[[JrK1eo1I`KrX%pYW"*BlmQoGZ8Tu5+MO`kcFKdUHXj/QRjUpVE=/(&A!HnI&(^sp".RnV,j--*uY +%4k/X.31*Fu,Y<"W^_MV=C\Hf.5%>s`1uX`+_68#MA;A/jG:'\5[@KCIE8"NLM3.A" +%hn:r6B+RQF;.^:_B,D;0F?)?73H:kN_OgAHal05q.KY:5BejLa!^Cb$i\@-bC:tubYc)RUeDNsAa/N_Yr`W>7UatKqiVW#O$5jZ` +%!1"&(94sR_/pWEGeu[#at3e;Kt?kN417i"Fg.dca\lmo&PkA_]Nie`h8d!^2N,%mj`"\%e#ILG!*&9Zf&8/K.DP68T?KX+oo7G +%;=OVp)3NOW4eiJ,VrW2L +%+IcFH5)rjQQ&d!FpHk!sdP==K!@.p896M/1/QJ5`%lcZ%'O*"Gk+4,lR+bO4@^(Z9LK2l4eu!u6D5oK97$P)qcoe_-4ZsQQ:5/N! +%"Z%0mfOt5q3&G&=ahMbZ3Q-4dKhKUe7%K;I.O%MGA*8ZT)`-6(YNT?CHu`'!7(Y*\!<0,r@#EDKUIft6\0#O-<,L/0M$aX&++,-p +%,iN:BWs7Q(Rq*bC6SQYcEPQAbjJ?KD1?N:BRo]XHh#sb652\5tA5`G'-P5'0jr9RI[RfOJ]PB6Cgc9oMU,KVo6055^<6Lh#VJLtX +%E._QR)tp"3Rr.^E!'f]QY90&S4"&cq`R!>9o/_Qqe%/dn,W($Q:2<7^H)YmfTR#2Bn$VKVW4 +%/EBMS*Ye7Oq;Nidg=g&V2HN@"SL1FhT,a`:4i3>G05GUXQ"f?q7[d8l4.3&ij^N.EO1bmu*=(t(YBau!S>lQB#$Z4[WO%P^bV%%6 +%6AT*Gc`+phUoD76@p(err5npV9J\6XWoTaEbq=c1:ffD[SQ\T1g$f=V.!>a5:$h'h'Pg-D3OZBP'CpRo +%c<&/p*@`+IbM37iW!O#kR=S_cL*k/-mjV^`JL/D\c1O-JU#&a!7H&2S0o)hUSL@ZJY_V_!?VN9jB6N%Ym3bg$P-sW`74P(_0JK": +%"1ELp\?R'KOUVne9aK?&)1Le9q;GeI7@_[I]HltqEkU9%n4J-?2RQ]CNb[)WkGq/AE&?D_`)U8Z=Ae%Tq(iFQk>HX\uIW2$G&IXL:Nlp=D<%:_cC7^-'gkk-JT)W+'6aB>OW\97`^j#mFdAf`bsd +%N&"A5'r2%YFWa!l;@=e)E,d6ogK)0:E:s,':mH/`RWZgtm2Ba>g`KU^":l8-:YQ4BFAZ=POYS(Z=.YSqN-i:'d'\1geTfF2Tm'K= +%Xk*Ym0mnPEBJ7(Yg.O)olbquG5=Xs#g^W1#]UpX@'U7Oo$gShKr<2MF1:-:uZWVIWcRr'4J:5Ru>1neB`6$De$>njH98,A0D-LKF +%*lM1aQQV"]H\O27L/^mKQ0$t'Km9(R%]kY#/ks\-oFG.GW9l@fm0B$WY5nc'&PgkbX2Y$FKa+Nn@3sKnuQkG +%+-Lom][oRbdW2f! +%G4fu,f7qsQ&8Y7hg$PP(=\trK'<)1%;-@LINQp5**G[hN=I'8p?f[Bt(/*oOhdNJZ(RAbP:s$Miai:,/8b;!K*n&gFZC!BW(g]0X=E3chd"FYiJLCq*H15U*)C3N\Z" +%1!aBS/l?"R%JGY%mKgT@Rj=qhD6g=4\c?A`\dtdHV4H]ki?DWZGW&<`%=C)?nAh'Ya!)T;>V26EnKE\T*XYl"[4<5PXeo"elb.Ki +%cqo9GX#e6`b"g1++d?IAEgj1ZDl"/IdT%tD+omMQ@A]SY.QC4__9%"F;h1-J1FsIJF*]fhA!rek`.J%^g,eJNi6Yhdm!O%aE'\pu +%aKgdnXgA0![[n[kHdg^/;-VF29\[P:(V3tR=DG<@4Np@(OOrR6FLYVF[uI*a_uiO'DPl&\B7[\.T-VeK:* +%_T+@MGrE-;p:t_4E0m-EG-eF;U.(/A)T[QQ_CK$%#5\G86FAY*qaVS-_FUUU^5A,NNr#lp"9OF.oahS +%D+uk8LupKFKnI]XSo4Q(fRf6GTc3Q-+a&BI1m@ec2H9k`O5:4f<@sa%L +%fl*l(.>3u`ApJ2ONXiZ`729n0*us!D(!mst"&RLLh&RR6G#+rUn(g'APHhdI[WW7T.?nm46GH%1GdYQu;AJq,ZhdhB5p88*$!Zk( +%r8m0K6LRSV0;RYIpWTIEE\[k\)sU$Q73^F"1339]-2(=1g?+sJ(-f5Y`\O"DR!WAL(eB9k+586A3s13 +%ELEuFD5o$:j)+tmfW4n>?!Sh)#OG?Rkk:0n]Lng_F:nDjd:m6PF0VVo9oHk['q3ZUG,`'2,ms&"EqVqB]>u52fLqSdTVOEm><,Io +%DPpnbZ_7jVgijB[E;8(IGQ^W-AF](ahCNq\G'nr2eHo/io:D4)`X4W.:+3<7n`$8/BiZ7'GMWI?h`bFN&YC57F]92^ +%r;kYTW^2H=nIfLWW`*@b>IObWMfkD-4e-B'%K@K8g;F>RT)^5.!4tTt[kl5;_s^.+@Y=`CUoA>(g49&oVO*KUFC;#a\XV=RgPY45 +%oH\K(7W>c# +%#apbZP]=$PVSp#?U+8Bt*8:baX`9Lkd-!e>GQa3%,G$Ai?sV3Q9;AT:f^ATGqW35;a! +%`(sJWe\^Z^2R.=3/\2gbh+HRKa%-=**?8B1Sd1LY=g?o/;p#9:-cLKeJfF^++e@Vm>!F0*\%U4#!l7L>[tsdM8)YQ!.V)BVi/1X. +%BVSjPpM&WQQj1>8FAfmN%!,q)WIqG +%n[%Cdh/-_"]0WD_mg_K74>/G'Z#CT2,^St>@sh6$5J4si;4c13boEO!cW3! +%c`e*mkK1CY[=i"Ol96WtfPt`VZ3id82pIcg!>dc84mb'.!F8iZD>X7$JQim5:JAp8qbCdBQ;@kuN/F!#*2)F:WAQgRnYQJXD#KuE1Uf[b@-&8r[e:85gDtkMJ#_Ai2mYWX +%/=JUkm):BFm<,HQi/mhG/="^tj2bcAhdrc^9;;(?fh72/?3-S_&2ZArL5*u#GIG^`qjpo=VOcO/V8*lJ"#(3h>^I`0#DTk`!,22n +%`(`?Brh%FHg]FDM[YaR@>+4[73E98U)*`o#'URWX9pLNWbamLNJ`CcmXTeIRKg"^LGKPFUSYm\"l7"Q(O:Wc*ud&i +%hdDd,427`tIbS21u +%.nR4GpeFRhVnuKMpeqf4K>g"MM3H6?]Mc4hQn7\]5sTH1_X\+t@Bul,(DE30K2`h/O6]YnK,%J>b+d"Q==XXo +%e&=V8J`8#65*Thp@@-oR-^RN^`V&0^PlZ?Lr6'rm7on`U-T%+-XBG1]iYB-NKQX_e/)<+TPsHl*t::@_i(N$ot` +%[cm:/F(U+3FkScCBGshb;dODCfRl4^/u7P0ZWI[O\3e>$D7KMUT_Fk\P%rTpe$+NGoLqB[_"8/@,P'71Do#)lrXT%kH!-a=iiAAS/FQq"!FC +%-@EQ^fFdHe:DQ__mHZVD(/dkq;u^gG4=KnAnFIcoDiX5k&o9KH_[N\^:H"QhrsBc,GGP5)'6SqpkV4$A +%ER%1(3n4^Lb>RI6)C-1M0UgS$W[42"\CV2*)P:YB#lkEh9u:!u+I6HJgbR4e0'fr"#BZ>d?0Xr)BSRnSF]rao<=7%3on]''#1;[I +%J7BYU<0jE_J)gJk<\"2=LUZp8XJ6H7C5:J-2ACWfZ;=Hm\d6mm"laQQ]XU\'KZPuWnfcX4kcelU9lFmD(XK/D3@/W.6Jmi(GdoHNM^^ +%=RnFZ?&=?&S4n]Q^KQs`SWhbGF]0#A$XC*q*M]K4K/6;VR&\J3"Y.d1nW?lZ!X78;b*G8YL8u_L]g,-)`F)=DbD_G]Zh'E@pZIBf +%*skH;oK`]4C25jtD"6P*FN#C>)h/oeF]u-ejXs@^_rj?3!iRgtXS-rO"&;:73@$jIa.@KJo?$m0"fQ1W!s('%g5k!#:Z:W9&n"cL +%Rc$J>6R59W_8Tr45NfdV]4uDK^',`"<[UGWCuPn5HkDOFW6rk^a0j3s'@;N`fS%Ta:-CqAa4@a\pC)Up%`Nn,a^T=4`^@YG`R3#D +%LC0MJet_jbgWXA?ocW]@bt0qHTPV%]2l@Wi.MrB5ML6$+7^9R#mI/-Qbu.Hp)M^">4.G.h%\qlsu"K/tAo+nT\[![W.19m_IYPl2&g8E,.G-3H,Pe+^/PXHg*#@KJsN+[N?&L3^#5l_H"GDEl"DK)6f_.8Tu@[fo)pGa8e@P8B&")lD&4R05?=5uf%)=6h( +%m_ZI[SREup4)f8^^-FLk"f0ii2Y=(p=,nil'I)DfV&bE;!#g2Nh\(,9Sk%uA.N+u#KUb#p8T:BoJ_>c>@)6NW'.16_fj9/Q5IPH"Ik'>(E;:A+4i)k$3"?r +%f%S74>qQRG`Tg]lUROV22q?$\e'4iDE2RDodLtP%War@8*#0Lfg,hWleR6ZBJ>rkrFq3RUpJ2+C!=>$a*H5A#DYJ$5QeV][Nr"XO +%3[u`lloEFXW;?XKL>=_t/hnFr'-h.gKGHbOC*JX,ZG&ojdb'p5\u_sdemq3VOGWMjpBE'G_L/kla"jeco(4*M&t#jc[qP0C"uAu`>Y3]QUk4a``2D\4.m\K)// +%/F%snf*DL^"`Wlijng+2C[=\kZJD^tFsbRT#0^MZ#n@,3cI9&X6T!dJT@8QtUk)Au_WS-eb/bCP;Z^ihW/T[3nTKce9RC2Y?g?"j +%V1QU(eE^uiV]?G""UL8@G,hB,E#&62\Bj_DTB;0IfSN$<&Y+LuWn8%jq05S+a](s2P;&b"2G-nlrc$0Dp21?dIW.02[0>Zg=HRp! +%'g0b:B093X7/NT*8^%@iF=<"]QW")>%EQ!dO4Y\1^]99_#9`9ZV1u(i89[o3I2FfaASAD+nKQ#!GP`K@"SNCC3^o5Na7Z^IIiRSP +%V&e`L0&Eo,gEK?Yig9\l;#gF<)3dg?n%LX9V( +%f5*OXW`6QljIU,g.-utV^iH5FIEBCh+B0f$DWT.4N.cO9TOODc;35?r`%ocGl&e4I!>F3oju2QkhW*#>I[YW9kEg-5d?p_:Ej#g7 +%*a=nT[bQO80>Z%?&C(;%h(bkW3ilT6]OE,&Q9?;ORN:>3"PlKFB4rE5:0pf,;\g=Tc4U)PUt`H?]\CaGCmuI&c)=qV:A%T3QcjY" +%rHa]W(/8QNr+.+;gDM'!2tpldc*jC?<`LeKOrDWNga0uiLF7iPP&kgZT?bhpo4-mX+Gb28D(Z=)]1KEmZDY<];^h&JL@V/8iZS +%7&c?%"A/e]KgVUjCBFN,%Yn%4$@WUsM^VoNGq+O8AQ,pr-eVqd]^dL174oqMeh@tBABYdl"B>mcd"LGl +%&".C*m%_X#O>7/n(Sprf9%9">A_*Oo[,e/TW?,0m:RdbopiVMA'AbC#;1lB]lmO'M1)6%ueq&Z9,C1b6c"WPR(VqnC\WZajm*"L< +%UaumU?i(!eig?U0,8tWlAaVJM=OpX3H[)>8AQ(gke>^.Q(i9YKc/TFm]M(`q6MOA#MF?2L`F*Bb"ltWp9#HSQ,4G:[[GTq0,KXV+!>BJ@7"om,-G@Qi@%uGsZ9 +%mCFUB203<3AlBsFUkX8r\,:bRM1+'I8UA*sZ#tF?HM_[(!^]V)WYUj]dS2At(0.iU1MS^o$JGLAXc4.nf;&je_n6j$:s^a"I;M +%gK":72@GEgp53_XJ=&'(:E1P<>mTmbj;>B%1uR52?u4K^W.CJ/\hK&Bl'unB'Eso +%%Ee\q,0Vg=iq=rN<*K[F_oo]]bfr._X6lR(E7IR-QW0_apJHLn8/5d.9MmgpGAgeKF"=G[2L.cUcdCl;:UD@k1Ptt)5WWGs+;-d0 +%Yiu2*i.o,`cLr4(*PZO7RR+Y-)metM\LK[k_;UI8lH4/M0N'0&[jZ.?$)3]L%ed.S0(d3=J$u$U6L'.Qf8TfR#0At`0B^2mu$QG1DmQP/>>Mrk2Mi17c3nA+oX1bpQARdWWDK[6V +%a'4LdnJHGj7H`Cc(^`MkE4/B=1!@H!`8NaQGC"D77^<^,\+;>mfZiq_-RASdd^G:J7f+H1"jaWH=V(^pS9s=e-j#0E=hO3XaqBS; +%9ksU9&]&bP$ECCn5gB/lKLJ()-mZ1`*2.bpW[a+\#!T$NZb.*/%3WWl>`M=3V)oe"16HSd46Qgdja?h*fE#L9:=$Yn'4(;Ol?NYA +%L>b8\A`hA0&"Y^D1>]TY_sV20'YiJK(Y[Je=N\R@>)YYjP,@kJ`6d?4X48H:2<%;_(P6X7_iOt;3c.7Vb/ra)[_lGFWcC5AT'31n +%3tbaWm;>K<9='WZSJ[QAktB=-$KW=7aC-F3=qjJ+P#KRQ5*&4@JG\]dTsWn/-T@I)ROl`6aoZ`G"[nNDPX3C/s67eQ!Hou*)Ig2@ +%IpXr='l/q6%j`p+3LcDnZ74lUJ"#AK8)4864l?k7;#8N&+HR&CfY4W!^j()D=t.$(r:cF2-P@@1R#?m-YS)P=kO=>'#DI#=O&qlm +%[3uh0?9>u^=i]P?5[36(QLN?E#]8RZN179[M6I<`ilkR]@#.N;mn4,a;tcjD+S%#T\CksD\BE;0>F.dfabYHP",/6gd\aoT=CL!d +%Z)L#MBGRY#bqp5\i(2olEWD7)%._61fO\U&=-]R__CpPmW13"A3:%t%_Ra283!hQL8OG:0jCZ/36:$]eg&>^djMakG3)ffr(L461g`4U80k6ffeF9sVal?NPWCK^[GTYVaS:6U#2`[i%NM]55oqu7GJ5H.f +%mT5!Hh>#tSm#Clhes9$I@VXFK:mI]V&<,sY8AiY^Q.MR8`W)0!*J_!r^HGIsOiR"0B`19W+4Z?fR!Zq3.GEp#fN+QSN0\+\QI2i2 +%4j!m=FiS6?`9p+QI-gF&b,T!m1Iq,#`u\mZ&Q>FU9Rg"si3mVQ+g,h,;E_ACg3K +%'uI4p*4j7HgB+B\?Nc@X+/N00B>\4mmDIsn2+UFJ"A[Wa9`]`lb8:m&:(a.hSM4Sh"Vs-"G$D.)74dsd^Z0E!&UD2=ZX.iJj,iW' +%Y`H&)AlRk04>#:AF%1O)bIcQ6KJkSX=jrXU?@%^,R"YAier-.O7Nl;CF[H7fZRlRVr1*Q6HMJBuTq%K!R>m_<_YnU- +%%7Q_FTTfS/E>dOo3oNTCgn]A*,4<7C)ASj-:&X%$W%tpK9NucHUIP'V/[\j!"s3?"c5a#DpV9sV&>/oO7ll42&n5HXIkFLk,l%Fp +%[D)^aX_qoEX-6-oD=&[2,ort%.g91k?<+Q"t5 +%8QFB^eNJ4=Z06t;d3.`G<^b_ECD&8]Lq+,Q;hIF[qr6Z+b;fstnRn,Y)l+_Bi"H+NEBG/cMS!uZS&S9ZBU +%/Q,V-96:f=S*h?$VHp0@YXLNCiOF^PjdEAVPr"CE_I,I60fL1/!-;7b4mlTs2&H<;4Q<66ofRk:ku(&mUP)9(b%*C!b'^C_8WHFS +%%9/NOn%LrkKSE`k7>]-hi`pF@.VFVmTj=bGjlDPLj^j9PP"Rf*Dkl**HI(H3Z`!@*N`e?J_q7B+PSM+Jgg=mPHcYFnpbO,3A&d,C +%RI_n+F4o&lgSbY@_%7*u`U1;J6dCXd8GDV%%.t0^pafm?D03lam78!65C4%+XV1TCPNQ!qi)Ei1R^jprATof@jJ#nT%'Oi5YQNBe +%[O!MKOkPZd/L;Sd@i`q\jKY@S:g2:+&ND^2oYmbF^_Zf'/[]uo.QjgXXfc>.W;HJLaU'!Qo +%OfWa!#*;Kk",odVX^I#3!'nm$ZL"82J1&-PN&)5cFdJH4<\K&I.R*>ibA-3TI +%[6[0X'kf-^!)ZdQi[hHaem)7p"EP'2'+jme4u!$eZKrkt`]+j'G48@p%nq^`n1&)A"ZC-sXDFoA7h!W&ac"("AkRG=*XhN?2AM0$32$7D#D(M4/snh +%UkeRNr26)RGJY=2=NlYTjS,.f6W<4m[0\gsrPI]*biBm.fr-"uE6!m+M5i%Z4ck'DD0SXZF+m2mB!U*YSm*lr]]VR/:k>%e;;h$# +%9hnqqhMY`crWE)W/gY%Pq!6!dU.^s&^b;rQ&*G9*gVj3[ZgH^M:@t.$XMbcW1>ad@/0k(Zc-(0h)KL<;c%%%SN>QIQVc@h#j;neE +%&hQ`%b9NTH__Nu/#AZ)/ft;6)4_UlV@::V9K&HG3;@Y:Kk+cJje]CToGOm2KMd(Y+n$F.t>Zl6%=T5amLh#,-YFs8mVB'671%WK+ +%,4;b%:X1jBLD+ct2c\FD3Y;!-G(eCHQ0O[1beY?00i_2Cho@uBq&l46pF!N,Zp>L0U](Fo__sGHM_*A'lOI`3#Kd-"FPN/6uF&[i*be!G'+Cj)E!1W,u +%9Tqm+CP&C2cmkDo$:I3LI=Y"N+lZ=K`!dliV)nWHRX7_B.E&u246EU +%^``^pWfWm/;1uTER^+o4L2eB%&$^dUSubeH%:jD`'<0AOVcD)4ep(=*(cWi9C*I;'=A9,:#Z40]RbD2;#UW/K4-L2kb6ptZDJCU. +%#!"(h#>enNX?TZ9iWW*ZanWj*-i&:IPU^-rUEDcHcTqc3'Q9,=i\($VNJp[Jen2J23>.c+[likQLl:%%aJf(U)ZhRKtL(Pa>6[KB@>C7o\rXArlfL_2hdnf`:]2kN_PBl_FLI1@HI#\t_M-cjo\io/k-gf`""UPN/,Mqe>?.HJ%Y$+Xk+_;fij'g9[HQF0LG$fj],u>SSZLgXNAOGTAdhTFCf$AQ$eS.&[k5u +%>VM]@kZHLLe3:gD-h*=u]3uHXK0uJXH&soJ[@Xn!=PT+u/YFoGM[$>nOo3lB=B`s2/4ae3iPhSaNW_;RfQAfHh.s0UqlAnEjs7"a_jNa)j-Na] +%nN3"\;DfJ8k_fe8W\Z,AQ'aZCRDP31PBA:Sh*Lcn$;XKRL/]n-9?[L[5a7lbMQ8%g>mAV'Pu$lrJZHL.#R_s]$#Mg-4thdR2"3k' +%O,u[O>H]1:#P_LsKOtkd7"Gre=k$2q,3#RGUbX;IWffQeG:Xg/\j6ME-)7MlK3C/\8U9E6,U/8&]s:V0BR#YP+]qM%T]A)OQJe'M +%Ju+9g4>ZCs8WS_H=H.cIK]p?Of%>SX@*2^^=+cU27&LG'Qq!7JU+&9#K;O!/h(<:3j'mbs2;tG?PGRpi<(?hF_a:];0A$QR[_EUC^gQ.ZH1Y6OEm#ZrYTqPK +%Y`YI"6Iki[O!]-GN?<$CIuU`_'h=G8eeSa$YLrBs#"%=,1XFrBD"&HbU)7\W8R8;GCTuiWGL#IC<@\7jOllZ^Ou,S*CPShO/K44/e#PSXC_M( +%Cr-4U3K+-%CC?;<#>bKnP2K?"UfK=(eN-nZQ9Yg-LC*>4Th:2ekZEft$jPBK\In1"Xc@_NPh7!,W$!Mf^q-+J,oO?p#k",^T%+E. +%qO17=]TC)_,i:T05?lAFl@ma7-h`9p$Y^JS*&uI@KW%fP;MZ-6M96'N[iO!pT\8"4cHc4R+obtB'\7a82^SD[(EbX^i.Tm\):.(h +%r?,ObRSQN.T1g&UWXds=)Pc.,]ODWIXKc8S$'oDW'.uheL55-*[-VikHdF%# +%31ZadbBtHXBZL0&?8@o7HQjD_4IT-5+2f<:o?qF+/]P>V!hSCiGrE,nP2[l<#d^tE2/0QfL-jKn).pkS3uR21.j=kRPtX>3L$P=N +%jF&Ys5p["UJB/@f>q3BP3gc1PTtIB!@j);90*pHV9@tCFbaVq9WI?&&]P>M`#,&B.hp!]H:hG``PTFFPaUsB;L?QXY2@mYqn('a- +%fNae@KS9ei_-030b=Jb4XCFlgZ"<4C\7o)KFX5n/.R*:VQ6nZW&2m1W#phJHAi= +%$!/Z+0\O8;%s'$W9uOe)YYX1S/YRi_Sj:1YC^]WRK0R%Yh$2S3W\[2@&Ei>8LiKcZ?]WgO)+^-e=G[(5pLmigMFIu0V8st0QITPh +%&*oVbg6K5Y@a!G'I)NpS6Flm('(QaTf\pMk+OSqr-!$A4Lj-pKAsZcSK/4^;BSest,5u>*KF%'L<9jJBg$7Hp+&_'od/QMhLpF#;c +%NX_\i22Sd\_B[2j:F5O,d3cUA\BM2Q276W/nJWmlP=J>MJ-pH"aqT1$K2\D:o!1(UEl_N8ErrVKL6_B[`S>)l>eLge"gAq$]VfM7 +%N4P>QJrq8F_Kpmob&AJD@-A_*Or<8X<@]>miD&u$THhH8nWB!r[Bqo80s[(#Y0bB-oP99JOSHqNif'4`'m,3Q"e'9=mD<8d%#cn5 +%3#))io8Kai8Gpdq4GtFEpNXR]7P_t:MRtck^;`n\7M;Aa4H!W(r$/#BbTh+4%^p>E",+]OE6UG0C;J[V'3@=d!3G#=.4?cG[qEs% +%mYn+#7j=lX'=)8JB;Ll=IVsEJ:'=pA^g9`nd\\S:m/m'DlJh1F?cZJ(tkB,*[$dEmrnc8]Eh$-CR/ +%H5qW.1Pl2>a@ASmor>!Nf_LJK&#/jWUF2D5Q1".]ZV!B9U$/SDLr?h4n5:W#"]l7];@2;)KrJgK_j!D139[CpNFn$c8N:$b\s%Z5 +%l=sq)%FSs&T>S#pXtQLm131)u$,]M]XA0>8ODHSLQ]0s@VQ=_I0q.6/!QQ=Z;*"tWlB._JW!,g"=;rWE\SJM_fcbWFinD?]P'f.+ +%9O8uum3OFWOg*KS;G#'S'.qIl.nQ&r:.nYRUC4U_S4&")pgaDfV:m\=V?T\?VRR8g\O9P7,+$d^ROQJgX,5[5.^"GdF15T:&$q`O,,rM3lu%>RV-bi>_>VLqf#h]dp3/(DRiL=a/4\aE4j?5IM\.DU[+nBSF_u +%m;kMKnU$I'R=DWfTnhA5#gr7J_sX@h$Z2:fU0F6\@d#-nG`;/[F(m)KU:7AjD'0:*%6I^W5?b?5&qZPj`%\=iN9n3",>D6%#*,,DQ2b1[<;8?HL$X?"?0#$AVs#cQ/=<+KU7kqZ(3059"QVi.6/d[PQ14W4^Z'1k)M_8&B(W?ATHII-Wc=DcPI,@c+aAmdcY@XRQ67:ZiBFi>bF +%U+VO$O=og,XOk"YHjr*%8R?M?;"qo>9!JXD_0%0<'/j8IPtS)=5mpK*G6fLN]JHQW,C:cI*O+1? +%-1RkD=fl;X5jpNFYTu!(1M/L\5+:K(5+$#([psQ"+Fci$K?Ph0)oB&j'-g)<$kVE)e9!-u)>5h@dLijPn^3UUcpOWj@)71>/I%:& +%R)qa(\4\/a9W6o:?kap5*HClfK!N,3%j[1K-cW6Q,t6Xb%XtI@r+h/K+Tmi`j;sR3^t.T6Bp?N;f]2fHLpWVLOh#Ba^/J#`58>"qno%'KjF@g@XYloR@. +%d7E%hQ8f.`^hfDG1Csi>SJu*7WPUJ!Gi8HE=*Be@7U*PT"YeUO29]R5%'X\M/-"r`-[A2HL*Vr%'N>aI3fk@3UcEeS +%4k4c;$q]5LZT>^^/C19ViQ;(rYd,1."Y`L[kG(L_mTM(AGSW2YXFcJt`+lcjaq>2&*@lndY1ZPR"Sbf)Nl[N^6^>[$M"h9:Af+o.NAMie-Qtk9WAB9`5 +%K*[WOXm92KOAbG>JdY$J;$1PUUe\ct(b!^GarnL74/rfI+u*Up(F?++F\f-_M7>j>#ouI:aalA0,C!g3NbFkAlM+uOXrX&;/6$X@ +%=I,12C2e(Q2i>/rm'Oa:j]Mo@l]?XKB1Z]b&#GIX,L4Z8,(4CISDD,h'HOS4B#\XY9a]GjTPfGaXf=Dn9F7bDf7;sn;s`Gt-oC!taZdCd:S:d#U^tp>q;04*-XIHD5]D'A +%<02Er$uLPR).=en^t/ne@o6DU(mYX-N42'r.^*1rWAE*11C8W^k/\A:2[>:SI6WT.;+dYY8Z0NQP-q7fnUUQqVke8V)sC +%p,%BoEH'rWRgHfj2QfSGS,b=(k&s0o0@bj]TW%L:GFriQ;CY4<,Bb'b>kl".$97@M\<8#QEj`.$E6o-+&c"<_/EeG&NUqdi +%Y$m!`T@p9:Bdm#?e_RLm#b+R"lO_#=7q*KSihB%ch[74+i!JTqM60830!HM[L>"M$9#:2GR.Y%K;fDqj-S%tjX)J'[9U*t&?]WXl +%"1>`5(bESc<+r=(J+=ij_:n5^)H*Jum7p$O2sa]*Z4qO/C0qme-?5Z#!UACS8W<8;2<4r9 +%7X^O2Ap:eG3fZod_+Jf&>gJCajWI9PDpoFdX4Dg9UL9CBP"[6N=GR7X2Y9DWq8CDZ=hc8JBh=?t^9Z+u*,M(MXOQRu,Jt1\),FD4 +%L3-KFEi9+9Pm=@g-a^=G!0A'-0-bj)&mDS00uG7I)a]p\>-@(I_E68n+ +%ABWPgiPdP'_#2cIB1PSJ,l9:%!c&P-r/&pL6?7DXq/Co$LbsnRYagB%WKDqQ9@=UM_2OM=Z0kFIH'XXA$CQWJ8?Q1\-3?g\MqoT[ +%]9:An&gKWl46Na0F>a_G7').$3LVJdQkq7E3Q%:kJijG_s(1bgeb;9:tM7N\m*;#+D:MGQT`U1Y]Y^PNmJ>B2XiKQ#h3/KN* +%b$s-t_''3e8l4CQq,I"7!4NFAU.ZoLd@->:[%(e2$>dPPg.Ft[I0%n6l`3^0='%].*6YYX+Se5p#phLG;a"?`KrI+K$Zhh?s*lI-^WEHAlkFc)Lln'2@9*$HkukNQ1X?DD/V6s_]aP&3 +%6!oMHEu)Y\UcIe-:h?!?8X)5%(Fih4MPl>pjlWkqh`qDj?q,lm2.Pr\B-DYkS?-CgBLuL]*N;9aL5d`;O?RMik4LQ0WAg"l)/:&C +%dTdHBaG=o#>76ro6>tDU)5Gb[AOHN4/f[XD6K5M?;(2bnYp*%#j#n^53u`3Efe)mr-#k_L(YQ88o[\FFl36l4X%8bbYXc[8!L>*\ +%dF@X8@2Xc!KTX?4W!Kh`NDRg8ndN2W57taH^OUeqK>APlhTc80a<6\6=4aa.d7OD; +%94`7/+&)?':OEk=BJkg2Tc.%nK61jY2nh"MFE/OtkE3;[_(f8!/.Z(H*qO3&%^U=0*Q#V=;Xg`\nd(J[eW#F\T@+DGip8sXVJpc-4=#;ogpF;R\k8Sr].hQ5/0r,%bksHh\J[>hm\!SO4A@3&eXV[*.DTT!9X[,X"RnEqkB(Q85;1*W=h%%d2[uBb+I6'bX54^"'EXgt5](VTo7\ +%fmmPXaYteJ3[FH`\P%X;;Mq"&e_59GC5opC-@tt6a=NrlgW+b.I7Q:gO9s-0DGuFY"@7^)DXSi+i1FQM(PCLJK9ACE+UmKgd@2%3 +%68Z3@*[VF9dhAR9Kpo,QU(h_&P>8h28MunDb0c?E92092hNNL[>%(!&=S8*_,CW^^B[SCKA5cM9LT&O&Dj5r9(jm:@/6+\Q]U%R# +%3\!J@PKVn^Q=1,WE/fL[X"oSSFBH+3PJH"\0cR\`1YtP +%p!@oI:NFM2H"+6uY51sb;m&b7C$>h5R8F-L?DL,]J!sliMhXqFd)LHXbq3jQ=rWs`/Hg@Q;!=1_?'d/N#Y'hfQ'!;:^\GaM0bYSYgTh?0J\@g7iPtn[t?>* +%^4i@d\rg1UH38THBag//B["M&bsbc!4@XP+#-:WhZ(P:[)ep]Wj?;(o;%$oN)Y^KS'`^nq96M#h/j9$&oQ9EJD=h +%/m2b^D?WcjZ9)3K'NBe/W?anFRUAEL1o;W@T:0O"oekN?$Kj`27N=;HNLF*'`=Eg"XEe7C(I[&@D@$P);VYP&aG0,_=&dXG%!.Mm"615(f.VbLJ74Fh2K;,JWoHlt)4fBo-hmC$>s!Y(\TW(^-ZcHN59FP.F7QY]\>!5"N[,k3E0>8=,YO +%:cCs09=dG*fgo<@=iPbe=0NAdLdIJ#9-AQh;&m\j67Xk[9g+.S9;>u;\1#L'Z:ri]`d(>T'KkWWUC&N["-H3aPE;,.;mH=nj%C]d +%#Jr.(,]t3QL^ECDB`s4\_0%#8p7q7C,pdV:12`e8a.&)r[k'M:RkY-d\0'E^A*_YtR@(C&;P7nQOmRnMR`U)8aK +%Y-FM?Oa;I9U]k(-MNt.D#mU)n.:(G("mZ5Am26dFZ;3=W+DWOMc;9^5k^cE;=5oqjXDM*b,W&b0L@ldCP@c8A/q\R0K4b;[B%b`> +%k4(XW6HH,4e;OjYb!)!pT`-MXs/[+H`6c_SfDkn*;Q.Hg'ictl#lb5-f$ij]'7eo)Q?,t4t#.$Y$*"E.5F6?YX*CW.DZgN8Hriadj\:.XE- +%'@iG'*H"P@^PcT\n&\)P.%q3U- +%(12AO,Q*IE6/>A1V'AAVZVUbZObA#+A:]sBlfWi\)Za;&R-[J&'PH9j0rJ?/6juc8<;M=TNC#t7#0XJR"DpY"%O#JH]Jno=aQaiL +%pHbPapQEp=(Q24t>juPP]dnb][3Hr"0ST]a9RMGlp"Dnam3iN3/CU\,Q\jgteHIMbR`X'S.j4C,ep#99'V)M^6p2=MAdKb#&FGGZ +%FemJiEn;YO=$0!h:SK)e$otmXI1QjlP;/2/$E<@4498#EW]b7=[^u:naX0fmLS2:H/-tV(:[]gLjVK@\(-k#.8 +%-tc]*Y*&C?iU>-,e(^K">HmZ4UM9=OCqGW@%\p(7D:)(ZmQ7(DNn@D\3R$5S`gmi]MX^8&,Ag#Dd4D7GXeQ\#4T-h$D;bO"Z-\[) +%&tHC^J9;tWel)9p]R/>RSP2H:QjP58V)3c.dc;urBS8[4!^T)"8M]rNKdOS8dW/;bP%s6\q>k0B<"?0S0Pd[a+SoLu[=KJ%I)EZd +%M3l?EGm+@.ng-/mZ<9oKCg]u`j77@E4\\D;#TL:Si.7?=KGkt"CRt8AOK6atCIh)BP3u,I%"Wt/;C5MZkXefq'aDTE*MXMK`;"*g8"N=CBN]L>#I;*LDq\Q&=?rGR)u7:=@g_:^9"?_apu;?5/Ji/W3ehCAoC%l2$>@[TkU@(o`@45oT7kQTJ_=mKK2<7KN+tVcl)4]_tm_E2_80UXEmQNSuXe2n.CAN +%/'SgG;fUA"*&pmcP+6M:5uRl=)Cqk)e-XQ`R[F]lA+[Xg>#DLFWZc'_PVI62F[IfiZ(#.`"-[Fq9Z.7(A(tKj&Brdh,ui1R#suNk +%*%drp$)4\>5l;Sfc%J#j(^oVN)%0IZLs0ff$U'Sh%B#`bAZmsS3Kqf&aeXIL">7XD,FkOl7dDO1ZmN;Et-NP>U8`l3>>>6uON0'Eh'Fh@jG(\j\?Y]]DouhZse:^^n18m"7Kq&lc8DtpgF_671R"^*Q +%i[nt_*:Vuj<<@h/#+C,,;$ntAE4ebO=-TXsUbo0=&2#UKD]p-i@A+kR(g7elQY1AnG8ZI?Cmf_bi+0qKk+GC;AkdjD+f"aniH$qF +%N2UIA_5#]o$mQ5+)A3M_3=/:B+-p_Ti\cR:1&O&:g+L'$c+ARj67r#V)>P'Xr0ESo^_Foq987.rZnTGI,pg)@&fDiSoe8K;KNdL@ +%rV)k;-p8)0+`$((J8M4(FCokr'NB6#'tko#82YteERm+3fFo*`.$JHg$Oq2s.7'M&5nr4MME.rl"Q'PIj.A$&q4WO@S^jI6UR&!V +%3XXDd"9f).f+E6eC)@+'1,2(Ia'>QVF,;i$-b0e)^ms14X>A9FqC0afM<\>V[E,XeWTk]7,O$Y%>bWUE*=Xfgls&Tl+o@K:Jf9I/ +%eWD7*j639g'P6J(Tr5C[$,,DgFX5!OfPkhA'M9$.Pt!BZG)_!bKA6lMIY&GM27s"PW:-Q)>fSRoV(=O-+K*q;<#3Z-'LEWriMh2e +%>EME(*(EPN>BFFPU6Z"oYBQH.ZLQjC/hBG?!o)3G-n)F!,@b)HP`u_fFh"gA=VJLl%bMU=.V&9(aWC/WSkBr4JlN7[fNNM*KRh0c +%oYC)=hUc@m.VU5-@$@Q;e$I_i(Q:G::(aEG.mcI3p#n_gs"1U,Q&r?\R>KL5TkJE@#/eKgtA%!XITA#B_@1(INQ_pZo1f]5hL5GbG!XT(dI01,!EKaSP5e1=*b?[VL +%$KCSY_Y8`"Hc^?oWg$EB16.&BAG?YQ(pb4;%@tP1N`IK#[60s*/g7%<(qm57@bWa9D&MmJ)ON(L?Z_q +%L5g>`V7[)=Wt#Eq463PVHTgWQXi@+e%]TQke=**3qFhb?JM*oohRTG&hm"G]2A;C[r(,?liV&[#;L5CS5g5J]TUiEC@VcWI1J#Z& +%Ro)YSCclHLak6%fHD*;(MZKS,&/g,i=csZgWsR5!HjI]u"mL'+@OLgWYhdo1rfuDPjU[CJQ9_MUFuBf/G%/Nj*dT_\-bUZ3^c^)h +%d$TuaklK5$f:$n_pFCqX]fEQ5!=2dc_T+53ct0,:TJs9R"Qhu+Ro#A,["*`tP_].L+^0sn46&(0'\a4A-c;H^!=F;1o[XHb/DeWLF9QcEDaVQU:Q,*$E>-k+Ucu"Es6uCbgreFY#b;(e47\]Pc`Uq3G$PcYXP7(>KDD8;Nd`99R"`( +%FQQb"5p!"Wd:K,(j.mF&A3C;&`63CjAOjSFH'j9t[%`TKD@MOU6g^$)N5I3(FnDY+k8^9.Z&,0EKP?!@4G#72m(%,Sl3a +%n[@"O&=bmBopF:YOGtm5G74?_!E5A=;CWo,h_Ll_=Xr)*ciR7Ri\@m!#"!W:j)XF\(M'<8P^=M2h%JeCa;7;=nklXD'@0E6)>lKo +%a-"N!WCEUFc[.+a)B4OP]"&u:Q)FdZ#GPfYIl1*hd9'g?b;XjHZcC?)Z:$)gl[n59mMk@'3kZ\"3G#s]IA'O>l+Sa^-1FSN4$=0a +%)RUG[MllW\H9iBMPI2Ir*\-YG4ArU+b9a-(Jck)[(Eq+BUuiBq,%Z+[:m6p&INrZR=>Z$T,u']9['IP3KmY\t)Cl7Cb"@pT\sc'' +%.3jCB82JaqK:jtG%&cWn;/3T%>mpkl)K4P%*@%ZZNqIZnGUl78,J7UATorXNYG`d(ak!q!H7cC1*@ui,b_)@s>S>>X`FY^NXE2M3 +%e31E!Yf'J16-?EN)4H"jWX9A&%@qkj2H9j*-:X%b1CQr>IZl*lLKA,qcoNA;4:tIHG&W5;S$Ao&+QK8*J[-OM9CK$XYTj=[1m"E[ +%ktCZ!tpVkBG*'+rHhQh?oWj>V'Z2T`slBOj==dfTG;s<`;WT; +%KL(HQ$mlN8>#9:!fEj]gM\XqZ#Zd/'4Lq3@FZIhT?;aOMZEu*FdUP%&e,rJ+7"T!A=c1gE,tckt2HooJ#S\X\FSLlb)SYtNZ7+rj +%=OS8?]J8Ln.4%Uj(EjtIKtHh*HUq/$Peo#Fod7gM0M@k[O]^F;psjUC"gnL88=1.e`Ik'p-^V=mV9*7IbVT56Q;2#M_SIE6mUV=* +%G\Lk?Bdfi1Pos#\5r:V1Z=mps3CHkI^69FCF]h8^d^MAiK3D'2j^&;&(Xf!U+`h+[J?1m;.EP_+,t90X,fM9+#_/C:opmJtYbagt0TZH,Pdr&=CQ'bg'Z4If^a;Q[6G:,86T2iR*N9/jjO;"@^oa-WKOV@s1lVVdd="OUNr^N&rf8BB.,7NR.*>+oui))T;Gl%!%2c]ZE\-]Y3-uVUh1gc9PUOSeu=7HL%;;iQ+Da5:s0a]B%co\ +%^ZOfklHMemN3e,dj31%L +%L(#GP8=AbC*Mm!hp.4.g#V;)75\?"e\jfXt6tl2qC.aj+,tH11X>C5*7k/@7nB0Yk`:;Lt_i*HIH#(oM.6&1KR=h\n'^ZK6[B/s; +%%5Q-1.9Eqr.ZFqW0@B!L-WEqr#/=GL_&Ck3GVKMKPE@)K5d5naTZ6+>P@YM%.5>dtD4ni!5[j.#TH\HNU^Ti`aEK/6T@L9N8endD +%-^^?$h*H@tY)thc68mKjjCCM1=Alc#26)pRDG,t&W?QAH +%KPY9F$Ii[F:)-\*Ug-7%V\.TY;+nobTNB7h[;`g_E360\YU&s>5te:["AH5mj_C.q_C/>MJ.&MW@5,c7-+=I#&nH&6CLX2UWu`gk +%\*DrNWlQZCW>3+;_`qIJ:And@Fjug3OY1X,r_`@0$O[%p^i)cU^6a4QHZVX@UN"R\rpO5Qk1F3>nEL*J%90--XD-mg5:#R25'qEYtk" +%W[Y`6mO4?TU#[VI!(2LJPCTe7'3OK:h'BP>/M@:I/?/f&p8RL(UKGdA8`T1B1aAE$"%?(/T*ERIo&XF`Z,0a;^N>\l,\.i%\!+7i +%=B9%JHWZmr!imV=CJ/'2rc1S]&Es%H)Y*rXQVEH-?ULJM(#:^oN/3eRZ@sS`H9KlmF%!.]]HeA,cA8Bpk+o5WC4J64D/K2X:g+.D +%8RdnHge]%Nch1?0hMePb_`EoR@kBeFf1Q%UVndj]I@hdrIkU5W`5<_pJ\B/e5_6,E`U0j +%D#4dSB]9VS=AoD(IW0o.p#SGp6%aeZrRPB%+BM+cFKZu8U,tqDOZA]=R@9U(\ +%90W_@Z>;[4ql&VjBF0+\j=AE&A=]_6/0IiqB^qdHDCIq!N&-!FTOr`c[AgB)i+26%*@#Gc:r5%fa'Q!-3d)2VSZ&:5<\l6Y*L&3R +%QV@W+?m`'K#[;NU8nhH,?!1C65(Pa4=#C\fPTr*\\oc8Y,%hSB,1,4D&l!:XdPT,NV.Q%_Rh!GUBZ,V:.`d&aP@+I^i!>C7KV&]? +%>LsL/9Nq\&LqbX<;">nYVtG*eP:f>Q-\WrhnPU5(?G_f@dH7sbiCWXZEKJla/9D!!CK)/D[Z4J*OP7,GJ@El,;f7X?QkY/WNRa96 +%O[0E=,Lj%@p,%$9p%g_,UMH6U"fYI1Ro8\Oe#dohY6dr[eEE_1O7`,+MJ+8'e/?)8YO-3m)iP;J0CYhMOrs*OO>%`+oQ'YN/)P)\ll& +%''_^kSZ*6>eB%C&WN.Om@r&Ju-nJ%TU5DQF7#J43j<1PQ>bjWSbaM\PP1:/&ibkVk?s4ahJs0OpV+%1m`jc:O]nAE<+J$pM[$6f+ +%0tPRd&52R>A5c7r+@CuJ6!?VR!*fR:(pab[gC>b-P,f7@]L$9)GWR<>9jt@/%fW/t]!#'q&=j)f&V=AA&.+"3WU3<>#%V`lRB=ua +%/>87LW"Q_c/,VG^FE*jM#=pVXW*!,fNi5NeK*A"n]qQmDT8H<05>BML$$qmE=U +%^d'`f9RkK0obp=dnrC#,=N6:YMl^rM1'c8&Bf<+T5Bp<"I--XSaibhcu5,`0m>`@t+!cq+k0=R(J6>Iae#]1l( +%P*?gi@&S1HJ`k+NjER(<]d9.>W-0kNqPr.ESk)mE7p*nL4tb)'Gt4,nTm";C#Slqd<@R.P\e5/h`uX-)22gd>h.79iU\(WK#j7C/^n)E8!q4<$QeA%aNTu&03)KZEmY]P[9[PJA!EW,(C_O +%AC:IE9r>2RXA)Uf"'kM_HGli+C;=Gi,-!(j6H2a]+*3ST6Ln*@)6p*Y\dqf2n9t^@Q>fsc/RTp6d$dQ`p*:TG +%0g/D/JKcih`X14rTkA,*cq'l"bC2ru2KB9u3$kK%Kee5,-6qD6-ot1dG4#\mL89:gkNF@KkhIGj/0L`5)N(@J +%3Um,fC*hjHdU6;C33/"g=]r,97go"A<;:&:6-2b2iCosV/4`Z\X>3`SEe\?oD[;T43nK'R410G*5;]SX9>`T$^GEV_AXDssd!X/C +%_0ljC3b^.``Hlb<3p%1Q"*LdrkpS#g;TF*T.8=:Di?YA[QX_a9l:#Qor1r$^Y(o>^LjVeI:7fZ0Q9eeO-eGR(6L69k>od"`n0i>o +%HpStY_&WZlj>b\^RJ\?._O=GcCse6jXg9ctm;`P-QTo6Z`%Xe75(89O.W6>AjHY.ceK;#'PIf5:bSdAUpV69NJKS+K[fM-@\VM^@'IT75TEQoOUPYH:Ga13WgXd<'pBnT=P?3DD]GRe#-7]!4')/* +%\KJR;!%b349+&Lr\PqO!SBq":pLSt,2H0rqSnY%Uu=p0\K_50X!fGS;=b8EDi.5!a=4VK>?9*^PB*N<1D6<8\l+/jsY)n@Yblm/_C%BaoJNT=/P952?Aah342?5dX8K3_u1U^Alb?l]*6;bjhE +%/LsJ14^iY.78T`>_?<;E?9nMr1U*VuTgngI6Q.GU:/kYWA%3Zl!#ca+KlB67hUFu8#S;k'_)A8;F-;f^bAGKUW]03RC3\Qid0fEYOeEJN`!T@`9.32'P1J"BJ$ZS*50(d.WAO\ulAI6uHUOFSS'OsP>4(YUc;+bB?*S>ZAfr7UN5s=1. +%Z8ZArV)@qq%Oj')2%T5^!%sD#!0#<04[7N5g,UMr_\63BTbi][R8AEbZO+F@PVVM#1(J&^.E=q*EI42#0]=.(pFit_pHCJ8#Y +%"9Hc/ASSG\,f_+5AD7/J,[W&MFGafU.@kkLDXIe?_:L$?Lr/N.Yc7jJp%Xrp>;Zp.qNMHeEIV<.>iEP-^:PJboB3#hS?-4DkO/mu)GYaOcH!ugqruqK]/.:So7%hMVC+Os]G0+3D[\f&!,WH&?kmT;#g7WiU0"0fC&S9n_:[L]75'Q5(E1AGAj@6o;Cj-]6AS.Bfpn"%5dCm +%hU;4Dp[@#(bkLSOT>,l'pKjD6p\8k0r8q^^QG%0\s#cjeI=IPA`OUCU%b!eTR`+.?rI(Ro4[,r[W'P@6GJj<)CJiRMj1i:ZT[Cs2 +%a#DiQ*:=ERI!:mcmejrAK._9YmWc!^RhqcJ0:&NNhuV+VDU,Fp'@(O_o^a"`=]`/eS:7f7pTnhgcb_8_[Q3J_b:ts%DpEi@2q2Df +%),Bs<38p3n'7LhQoZQ@/\*rdXn%QF6iV]&2mMQ\Q9b6mNE:Rp+-i\?Ml^u(U^NoGGUsUq\^"%r+n)'[[iPo/LSo/Um(N/%\([8"_ +%]'4T5h(aW4Vf;=\1hk'd5""B+q99&@pRtj;=Ie`VTc[L*2&)ZI$RJeYXF8jYVm9<'DolU5Xs*sWPZN's;HRi3p&-$aLIt#@$ +%^V9Tr%fNL4bl-Q(?b`ifhsp.ghbN)"lTFbLhoti'CEMqbRbR/Ks/V2p*2II.ae8\.:Qp2Kk+k2Z=h2hXFZaWSFh.H\IEGO"Tj@@f +%qF\*`47sL>9`I<3GAi[Q9*.fa&+AELRW`o45$10pY:#">oYe]1:2feCdCCV=3M_jHMUKp:V]RtX4l8Cd`37WBNTYlhnA3k,Vmtc],cj6 +%V2rW1IeiV)T*uDf$NF3pm*nc/b6bW%#lF5.U6e[UI6Ii$E#oQYfREFA?6s).@>qONnZe^8o>>e$(SR"!s0KNSrWb&1h#1u3!3)AD +%&P'Q=e`toWq2LA\+I.B=hFa!NY87o!ao"B&@&]4aBl>@>(AHBAKeJ`2`8/Jsjg3VZlookGF2Vl;ApX:r/UR5ImbJCl^O$_/*0tO2 +%A]Si,V[56SmX>,\%Ss^p%/U*gOu2j@:K'br`*LW6$'&`qGnse5r-m=IGPCe`!16L_ipkpXdiQ&G\msIM]AqZ?_jg=REA--d]bT.J +%H@#KQBj\hka*\?.e?>d9_l^IX%)?3pD'i0A\k+?bV>WOBN\X["*b8]6?d4Df4:dDsrU`I!FuGVh83o0Ba2M/g(iimHuR0 +%lgA2I62AaG&C,M>:kpZW0eY?WY/?(QI(Xe+1-A*gE2b+ghfdnjHNn,qIh7bVU?!*=^LN2EU9M>]=QLoiSfbi(q.:BVH8ZK4Zh<@, +%pT21g4[4B3-BTpS.K4"Q(Jm*Ih4"pd +%hX%'\!Kbb79J2[\>M;T=lPIaTer0B+j(CH,s)9Zpra85*^JAeDHY1SC%A`Om?uoOql!Q/G11U.RU$GGEdp'ZupSk(IrS'USg)"2O +%^AGBNP/hj[q.Am\i;ZqDK\"=-_1K)r1#0P4=.uThDt%/J13@*UDEGE/r(?1fp8:-U>!(9-(KL2S<*bq9J,XH\o'*p8V[/%',:"Db^_VOHZ9%7g&[!`^5qR\0.t%A0.t$V(Z8ZKV\^0-M[T%9dsi]&!B?T>)"H;3,iFdA$(1W_6iG\-q_'4"la+cim1DS%4I-9Q +%gU!MWhFlAuc.P=q\U0pn^&EP&UF9&$aj +%2qi0&X:aEPK2sLXD6DAX->T`cTt"-PThQFd^W`nPCMc$+XYhnY%U'e6?0Nh?CMR2@0&3;8EnBa!h%J`RDb]2KZD\+$7,$Xp\1Fe? +%lU!A(\CDhc,c!^X%1SeFI-WH`Q,!#OrjF)k]V)9>=dMk9QC$]5H!T9-`%r0/=]NtlXtHcUl3@6*]ltr(PN70i?e*d$D3HmiDA1fM +%fj$JFHCU^`e)mCKcET:s-S*^"FqW@YNqWdqJqVo*"DKP&FG:p)tF`HfumFg%We]lY; +%e^`43e\tO8eYmn]>3W3t[5PeB/oNC]0!Eh%bKC8V7AFLp/k\?+EU!+3)S-`o(H3/^HIb_PEI6*saX]Nh="cPHjK-%3Dq]""bbb06 +%D&\:Fe6?7-k1"HTF5,KK(U)>T(M$U]g8S^8orhFM;[+_PDsJA8qc/'D2pg+i&ZkUo]\\RqJBFnHlDD/Dqmrj]o]DUBeiPF^0rR%" +%=))5j>MeQa?g1j'k`*Jj>*UBK`CakPB)YgUj'!\g;WFR,SO);5eG(ITobt-q[^a`K]$`"=ctH>s2=;rR5@;3:OVaFte_%Oc(qnF$ +%D+XEIk_08Fd!3iAQJZG1?Yc`MC>?:/VeS,SRMc8dR]pZdGP&a/T.W"5>0(2083&gafG(`>)&"Z5iakfrN/>k!'E7@%IWl[(2&#K$ +%D0'>948MsSm9fh[jH#YrdTLknfm_;U&'d95R56M",=W<_8dOY`W9G+ZJ*;DSp4$AM8@Spbe3j9Li(+_-nIWX/Jh3h.8lo9$'<\\Q +%Nr7;t5(#freZP:BGIW&,:4;VHnVZEU[d#YP\%1Y`WBY$r5(.ibnY"F%2jCaL4n>9f.[R%s]]*"2nYo<&TA(0/Xjn.NkF#(``MlR5 +%4SgB1o;+)Qr,*b;%Uf/\K'WWD]g:raWsr#ITFPqp_"=[uJa!n?)iWVUdecl;@YN89?lD!V0J3*@+V>Ol[6a(_!g4O[b-h;O0-[d; +%Q;@`kk6A-uR,TE:CP1$ijgqI-C641UId%;;GX\Qa'fc^=jhUo@FnCc2Zi[)5.MAs\k+AHO""Y<#"n:IP#?i.\WSuf`g:/I +%eVhmLOePgQ8nG#$Ucb\.W<]ENIuDO7frL4TS;j3MSrDR6\V>ia)jQE<.#r+BglS$#l]D`70mf54jDAe!of*n6^12$,Y[$!?dR@.POT'>]Zm?%b-@D@YXM +%!Pg^G3;XgG_OO]>#^!LO#<'n4CtSJY*'p&c`OI1'!O]:]`o`"skB;H"(/0^nCme![J,G.);PWMukgk +%E"q8.!([,7!Kn'h$:(RIB`qN>/d9#nA."t9fG&iLd&Abo5SXo(o=-"W>h591&&PM6)mSAOKAPa`gdY7f]Jdp#-nT"Wo4J% +%lIOmZ2@[lGK3_O_]e6'!`#L#L8TKVgas.@Wd"_?eFN*1B=VGgl*j"Smmn?:UAJl1KnAGH@&A0X;hm.Q3W^Rr8;&odn?n/uRB'Ws[ +%HRMC-i*5Y%27O=qe?#k,dO[L)<>WX@b-S&d$Pm'nGL_mi7s1B"c?CfeZHKQI"&MVO\\\.'W?#ug7tR9)oi +%XA.,1JhV%h,ACjYZ&7pBD;;MhW/^\V4DJYJj5n+#EH5iU[cV7%)bg@0c+Z9nWjJV:?`pn==DKuOj4u^/<@;dI.[7/-27=.hW(s8d +%MH[\MTp@8f@R[]H?#W`).U+M2.A3Dgt;)Zf#J*qZX5Nl>NKLbjRUbFcW +%jA#W@(HL>ihhSk,D0i?:gl6i.KtN?D\6<;/L&JXNX.V(#lRdtf77lhrLGC?7U_o7e\;lI)@\WplXnfA;H3GV!R[lr3qr5`no6GA: +%`r2f*ro*'*[Ajju`_RK*V[`%UBNnPGf'VJ8G'UH#*GsEo(1Bq)H2H@`iHA\8l1g<5&=Y-'XZ5$^g,=@$H?mIkFi6?XT>3P1r,!Y7 +%0`tO[\64dK+;=[(9Lu3Vcn>[igYU<'!>qBZ3TDLR)_/54O2ue;_XB>DDgk,83SkoK;%Y+Tq"g<-CW)Y93n$e +%]JXL>biN4d9BI4^be[u,4YiI;2BR2O?W.j-9`N;jl7CRtd5QlBY@q7C2r3&3pphc>7o;e<%7aE$ZTWR'+P,Xi8u?JZs-[MQlO-a6 +%<9@kVX%WGY'n#3(QZYZ2od7fp0$UR^rsO7Hhu*-;m$mG2Tmut]fB7$R/(@!a(9!+`..RON>q@*k]e!0&CT7ES&o>] +%0T#cOpp!hOqqdk;d<-NNpV@V&Q[Nu.#I%dbHLn&:cMBnPI<*sfQi.[T>]4H!2EL;fIFH71U0D$q0mN^qgLjd];h&]Z2dLFLJ$^qI +%:AL%-V`dR/'?Utm[C=]0egt$PEmqN-k#4+.Wo]-81[]4*AI#PW@ohin^])PF%k`=?_k&sR[H&p\]=."5gJ#A+Tg=M\im+4M]Rr +%pD_llIW6>1O7-(f*gj._76b^5V)AZi#9WD7nF/p9D@qsWPqU+&qY@qDiht&E$3VN_c>Yp5\OT3pE9jS\S#i!=1]JJTSsp!F +%%!!n'>g`o$)5U&Y9ASOWL:rZAE%YRED:^snrNBFm7%>?c4ESQE5O4QsC?qik*iKTp_86rI`)Q&[c%KUgZF-QAI'hdL(6@53_'7*t +%$A&W@>DPl1It,Ur$#`akq%J,\aa4SaS4(B%RQF?OIhn/d4@SrqknD8(b6%nNDej20sc-&,ud$:BA) +%;dPB3>+M3W?'U>'qC8METVPC]-n*RYb/qUn5nm6o9<1roe[BY;:u2Gq;` +%?@m2h1OH0)o$*]'U0mV5N,Li.#6'3WLVO[4d+,IUfr[(-]a]&EsE +%1K!tQBSpq8.OsmM]C"89:"(7[LbpDYs3'\Yfg$`UM?Lj-U"Hq^72Qf764W$BMT)#:2uXj;:cG?WJE;\.XY)m(udI]d+;0 +%ZE*17o=2jup<5[3EX;CV''Mg5#ME&18u/eY8EpnR=[gucEJXu5:0GK&d8#mef0_l6#n6]YqIsu +%.PoY;LVF75oe59]rtRfGTDXR_rirA?pV)&EN&j"G:dI!fIPHu,;k)4rW9(_mr.?TKh!W7W%&of=-N2GT6f +%m?gG>ib%lW/3q0mTN22"&[LbYYO5PpHf&8>cZ8n8jA%ia0?'?su(`'5p]el%VlQp\>"mal_3qAZcEG>4g[TmZ`ZRf154H>NBOd<$elg0]qHQ,%,F`HVQYk7<0LZ=TSqruCkI9#_^L#rbi^if#+ +%/T\]c2=q!@!V$?K7+d\_""kBtPZ%::dRK;q/;FWj+'QB+_^=%H/@aDd@ZR9c$?H0q,R!9J^04X"jTc+:JiR\VJT&;$hfkXrD +%N5RCin,X`NO5BQQh)OjFT'kH0k.ulr%ha0>'\n?.BOuHBf>AW2--)9]@snYf\`B%2`]K\#.m4U]]5@Zd1$ZV/6+*UKIhZdi_JAaq +%0[VE(#5bZeFUSMo<[`p^/8b2pb;TC_f*a+K$Ju>&&:NV$\Mi<)g/q+%o6qe[-N"fS,gGXt,1bf?s88_595F[oP&YG+?uifMMnG`6 +%3Q.9i=Rn-br8!._Ue:3*1)8h#o3d)",*1k_0*/iU`@B>IQlQ`EI\Gf^X%I8(C>!D=W,OSN.7oQdg8,af;F@Yi78\ROA?CJ=1^+)+,b +%fOUJdO>2nX&6$u[Y_gTpPPZ9Iod54m5[_j`%j=8BRB9Wef79*jTF +%N3r.\/9GAp$?*Hu*8<6!Cm.OkMJ9DmQ'TGU>/]raVa)iA;0?ANlcQ0U0B22)I"`0P(gAH&_aqBs[Dusm1;`_m@t`CJO9r_4X,P]e +%)p,]"j3Pfj_?aZ\L/E2(,k6`\4,cXI/GdY.13G8fdo>aX*1JGZG[lF!N7!mpgmLTtR=\(2i/HjJC/Gt_=o!,^YYDDa4MA/75o)7PbhcJP^*JX^pK/(+;Z)U#P;Uri50+QPX,Gjk\`Ml=qbu9;& +%+,X"q]9o(ZT1E-GE\]6ICCB*]-tFN@4!:*N@n>?%T3gc[Nu7s,N,IS=0q!.;('qOfR89o,INF=@!;Q==5]h8EQU.d6g[=B5)5f&d +%aii/9N3?P)cn#!5Nf8ZtTjIX@iI^q8&c7NP>6U1.PfHd_W5&*q[>0f/OJ!@I&0t8%3.N+<55a&`O*2-%6)5mdOWs(kP7dJgYWh-X +%9IuM\i$^Jrl8g\+?7tL@8Nm:a[3ZjNJrQmkg."am9142k<-pJ?Ub=tE[,iA;?.pRn2fN)Ka +%i[Smp*62&q!HPjdRr9fF/282[]32Ssj)&9bjK)YM,le?'g8J#bM4Ze7\&BduOnC\"bX5O6nTHG'lSXE9OqWNBKhfIX_R:qWKX +%Q$reBEOh\Z6p +%iZG,@OOB/P]J3Tt7'(!#RPknLDDp%5X>Z8!9i.#-g.YS+>;nQcpKbBM-Ct[g@!'7Set`sNa"+4YT:N&:s.C=m!:+ROnP@QgmlN84 +%cK%@`qL-6W&(8sGR^bj[rrFVG83qad*8YlNmlQBlK4!1]kq-f`kuDpJCTkY[]iGg#Z9k03.'^l54jFW;E(&WFFKbX7j*H0u6ISeJ +%O#4r&;MVF-P3dZT]&t<=Od=@6H:@DSP1-C!Vh8P.62@:@aTFeX#jJgkINR,[YSSbud!iS8[=\8jhQL^[/')(+I_!TT6dD04WoI<3BSlu"@I)W,ObUL<<3EsXeQ[=(RKsN.T*i,HpPa]7&q#L75HIn'*?Rj8-=N8^7)&]WQ>:^)XS?Nb3bO'W8\Y*KO./l\JVKao#kmiToD@rfM[(bq\K9(8eVV +%\pq&>mPDQaX+#2tP[.ZBBcbqU@K]u,#h)REZ/?8LdbT[PKs-O=4WTbpp@B^rn^S4%RatgWP&NsbBplhtjfjIN`Rf!%@GT6@rn((& +%"'<1TD]rtb;C9,bUO>23XC#b?ph`XkB:nd@3P&et]#pKqaO?+r`2eZN/PEn2Z9%2o.5Pl]CS*/[+LhiV4&kIUSW/D]^%3\'oTqD>`ZM-Xube\(2Xj.Prf:JhN%6gI8qp5GnI`64PCUF47bZ#eS.cTCpl'0&S@r9bA^&&3G%H[*8Oq"B48 +%O"Gh7rpjguMsp#A,5h/8meM-SH4[HpplG/Fe(HZ@jrMNX]6i\qlSAB:2XqkmqYh539i(O[5D7Vf]fuI'IJ`u25Pp5BJ,.^_Cp`7% +%ko5(Y0D0MA[>Y$Sh<"3s>s%-1qrc]$K3e2?O)\>$dtOL?f/!<=f?lcTQa`I=Y1Kh8or/%Z2UDq]QeK)qR-iVH[r#H?I+70NANF<]EbVa`A(0@7cbJ'jp.m_b4aOlZpI[TJl/qe]Z[akCt';=G()JfD<$)Of1c3jj5F+8bM;?PI=KoUm#oHH7"ec<;0shr]'7 +%KYt.p2QtSFe!al!5dk.b@(bo#K4Zo+%d$m)g\M-&=_etCB)hST:"68m`_iq2AZRC+(qaGr2rK>2N)'%3(LkTF]uHCEan]mL2X9-LR"/UAa)h?6!MpHf+.Sg +%p/PmP/fe"6>eSito(.XSem`-:Bl?1nsmVmB\q0Mb3$$k!=_qYI3lS^7t>E^INrND'-F2!W.aONu( +%ASaZform[dNGi/c(,an5VTFb'-]oRq,m]J)c?8m#3?lm%]?aG^0@6!P4p0IYYCF.%'QqC`^f@CV:h_^+8lA)D3 +%b6`PDZ!:hIUuCXfA`_:XeY.*b9n%!f`gSL7Af?Ub7ofj>lc-bs&Co8r8"E4tnN2iZOm1`aku]!$_+9B\-R7*$a^k0IA7R<*j?h+73tOf(,Ys5!,\qrUKl1">AZO;=7*M8m<>'mnK)/b;c-, +%M>ZphIlf+.Q]$NZ@WY=k]Y>h7d[*g#`4)7)8DHoPVee4ob#O(jI3%`]0)8S%9@moNX&khbX6OhmX5-&oVCrs*lkR_/%5[Hl?Ph== +%9dcbj-1*M/1M,dc_d,E?e&7hR?OBouSk%;W6IHnAbIYd$Gb=(j(=?pOd(6ePgb%gCY$'h5qQ^Z_Qg-%H8ZKoRmCQE)Cf+C#99$-d +%$;]$C$P2th*fD;=d[("F=/*GqOe`NZB +%\R9[\=IEp!,jnet`te,biBmT(nQ,1hH?7Z7M8Q>5:([7Tk(^mJ%PI\Fgo[/G^\9?B5cWf(q[M^(>#=DY[[?eft?9,EN# +%2C,A_4LHa^07b!+-3o6qE+lm_paW]rT"EUsm?;sc,X4CtOjUHa4e$UP9;Q;q>A+@DBNOl$VPQF[^%AUV[r$M^I^]M4kGBl3gkrE4 +%7W65J):'nWf?:#XF2C%_BD[Df`j=7)DP-F90h_$?(=k75]GPYG8ROJ7"/DrK'UarGQM+kT8?1]IiR]hKWI5TW<_%'GqoQ"MS7uIb +%>^%33b?aM9fV3WQVS/J>r0SEG+PYum@ +%iu^RD)VR]0]Nr;"">A//N-hH4U^mW!C8Ul;8XOteQi-N&L@)ne/cuQ2mp()bG#i>#0_(<7-bVgX?hc+Z/tT],emm+,fp=A;$&dhZ +%=87+kc:89FPRe)blZ(-f8sZn9\hA3d9?04ZR9:V2UJGaAE>YN7tHE +%k(/H50CIu>Ug`oV^,B(^YD:L@GESn5"a2mK1grC-mRG.&liP='=+kW&q`8&r=*CQVOFaBq6C3Oa(Zki2(G"'J_0E.-]#_eY[e'3]\J;'@0oRc;Sr+k%f[J6M=^IAoQ`8V@=2qoscJH\Y +%S%0G5jAV111kR_#@ZLa1iD%=m'q9ajD\p0G/ICSmNVjDPQksaA,[hA$d(rFTn@J87lSnu);^8ko49pRYp$1dKRBi1EW_Nf%Z1b8GSR]0OBp]Hr0e+up(_:h +%;m%gX6^V7]H;,"u;-s+Ofku(8b?+LKBf42h^8lKmlc6BnRb&OGIa:Bj0'B/2'n\/H8QF?emN*u(NE1#a@elCU7;,$a4Z+sb^\8FL +%1/NCG0MpdGEPUNl=9kl##:!6tAiiud:+b2;_:ic3>rpMSY.PXUl,N8VrDO61r-@>Q]DVaLp>Z.k)I%u5]0Bp#GjD"SlK'9TXoj]t +%3#'gJ/mW6;B@>-9[uVnQg@jWH&"CB%]feqR,Zj>"B>93S%\NK%?MLPQSlom4]6STu"XT.!BBIr!kM&YM4/W2ScT]#:BAg5p#e',q +%[O`kZC`fup&[H6b>C?M(eAaYe(/9^+\U7DNkuQcDd#)r5[ZOq"-L*rMZ*,G.,1"lo?*:C!CjXHR]i@:!^T[JW?a$s/$Da.[O29\0 +%q8$&qWmg:99!:/l^"cQM8,>@*Wq.d4PV%bO9DUX*;rpN<]\G"-HDAMZ_iC"72cq(Tk.:6m9IMVg._WnM3cpZ@94:6n?kZt>(FmXF +%,d\:e@,+O[,qH5!dQmrZFgJVLg5gG]n9Fko,cS-3+uNLXRleUf,cMDI%0s#]&2&"m9M9#G^)-0<5<[h=kVh)$?QCH% +%=gteSrB-L58%TjI^KiBsXEP6SWrL\cC#RVq([d]fe]@=JIfIF^Rq(p=iD[_Sdo=C=N3+0=jUhG)0Xh$(RYmO.[IB[j6^_oDZ9?bXobn"-/_ +%kI\ciJ,S]knG<_WiS]Ju%7^r[IGh?Us73Z%6]Tb'D\l?em+3nP&O6*U;tiX?mBbp8:O[cem@3:FmC=U\g.s>nlp.;VQF8[-%[=O2 +%B:+:q\(BFW*nup5pm7YGXW>SF]Z@cb5.mKVPQ-(*W4.4p?kq+DP=K>j.0h5RYb1,s$Z1dh[V]La:AQs4qoM&up\0a+YIF:oGoBn0 +%E([]mSPiSMi`Xg/EI+,/$Y12>&l.:o*iFc%Dfg?[L]-[+ftR83 +%q?\`ekq$&'DiY3*Z.7eD:KZNIW8Zp5Z6&V,L!q]r6Qi3H_(*mcVY:5tVRa_t!`tj"ipf&GXANhEOSq +%/[s]U(A4#S['.o_e'm.IG7VI'59*/:3:uQ*ldI/5brcQ*T'Whj\tpCmGS&(E[\$B,e&8LNT'C-U?49,D>7E'E*0esq32t#Lq3i7>/!K0J\s"P-aIMU9pg2W(-IL@eS3KniTLkHiO +%5.l`n<:T.92/R'IN&8tc!pB"eRKc_h:?*0-qTQd:T..d)StQbD1U +%m]o^AbuB."#[_:)UoA9R9IIuqY64XlIhMa(4I]&`QfH'@oQm/-4l:$F#ML6JmDUq%Am^VtYI(Xl(/OZ,"8k&GV91DK]^QJl])+q* +%R8\@dN=fI?q/*uobkT;,]B+HMF/FCBJ!eHk`?`ls18YP2*\S=")<^PhWgc^apX(;o76_k=lJ(!:R1+lN.fYRs&&hZWh64HVc2D1e +%rd)6>9p7@V@(D62:9Uqn)_W9rTuIJ7ZEs;DE(WI&nT''.NL)TWFZ8WPP[B`,MLRXDp"%$Qj-["ej"`8?%(jEiAMT!Q=jo)fbFFNb +%362mQb(P>3ch#\=VIb5T83K^dZISRXOd'KkDogs%kCVK48`/BCB"[+54=2GY+"-*aottCTfFTMSY:+._IkW6YoMmj),`R\]fBBgQ +%`RZh>G,F!u/P%ZpX:`]p(=V6N%V'P9D;+r5oh"eSAOMIHNQff-0YZoHB&2_@eB6-"R'F^gW`G?3k%(/31VS1&>d%jRY/[g/=,M8e<=S7H9iGO,8&7I!,/ +%/kX?bEun>jiY3iiG6B1\<*S&6"d(Dal]#`8EQ0s[5>IMnb:A9m%F-W@ +%`%AM+Dj9#:NH-Tl]K4Z2/&X$M$#c'_j,J*FJkX_g`)k&q] +%gDbbXMhJR`lf"./-+R#/'K;^IV16QFo!\T-PDHk]0`jCI(<0Y`\XI`M'5Z2m%)3t`(,IIG*4;5\o\E>(7j-G%O +%k(`W=q=/#^\[Tel1.kEm!"EJm3]=2-+UuLnfOsdf>2XQ;])fkrq3`=9K6+c^\A6+ln#!?Wb+#oX7Jchm;,F?Hc/=DTZu(G&)4Z3a +%auIljk/:8S0LTQ/NWo!1bgtO#N*"sJ>r=/Oa,_@$()rXfYI%0k[R?I"MmF>URe`sQptUth#S!]M[Q]b@N.hR(\umnrQSbJ7_.\^H +%fF"C7kb?GoPr\8V1(h.3cLVd\_L]Pad1BktL96"kck(#\l4O?;*?s"P/4g,1dD8NcmKYtk7N(/,l)N;q[L"GCet!0S8+kH79G1RgUek`?m[5WkHZ!fcP_\;KccV")`/9.% +%>n,(TZ[M,kS72LhfPk\'m-#o]^+.fHOt'(]KSC!D_]gk+(6955,,K2k/Def;Yu?2j!kY71n5oq?`DKhUEYS0fC;1(D"J81ro,_'S +%SN]Di*O$W'Jp?[EZs=-a2RjmrB>>4/KT/<&/8-H2'c8ALK?To9E8a%%Fj3B'MN%!e'X9,G1q85Kfn1s0g#PE*'X8KC4S`!%TA;hPKh5"[96;Hean'FCpqP2tg>1Pd.6.*C(onSs*CiR"tlN8=i& +%L1WI3;5Q.CBAAL=8LjQ]Ho%\M7mn"NBcK<4;5";Acd^OD.DT:^BSJjiqe/VY+X=!q0C_L0qY:%p4O84.>[!\:lK>X_UE(2 +%D'!GkENrn:0qY@7s!mZ$6>tg`i08c$7DjDn)0H!SF5?=P-q6)sJs)DCFbPX?#AqQQ@PNeA/+#6WJ-.k_Km)gNidi,8I*9ht'=jL) +%'-.Q8aKWTn>t,Lp*>Q."+XL81WbG7EJg0Q[(m"lW[@s7fphAVc.&[>)-@/TY[$L;XN%nO.6#A)G=1aA_`en.%1cY:IV08@sc2N\e +%D@WdK"j0\<$8,/?E'ZTs!JPPbPi=5$jn_Ab^pm!;,_qU+_3k!>NCn2W+?d +%JK0o?>baOoBh[g%!]f=A6&$H$)-j#$_$H&'S+rc<3+Q2/jtGXPO9Eu[N\dPgF]3g\+V6%:8:_c"Lq91ZiXJ,h9sPOBbs+'Zm&I.Rs\VVb!uA +%lkY^'=\M.A+utlUkus/g*)GQoOdr[nls4ftXGtRuOBfB":a?8^Q)l0#/m3Bg,ZdH:N_#1PLmZL53F)FsA/LG6W@Q-paVC9(,*M7( +%"j,^d4edo[3G\s/q@P-2\h=phTc=Il!MWC#i)2^*Tc=qM@AlLQ=B[OZ-tc5lcO/c-'9SqS3IXiM2O(N[7PL&WPLY@R3Ed-_@R-Vl +%Q)jL+P-`8f6]i?'0?I+Lj8d[r>#6=H<2GsMJ6_C'$KSEW+SmOK6^eYZ.$0(#0i%di7+W%aJQs-1g(DE6YOK +%Ec'##$KQ`WALS1@>aeq5aJB/HJK/GTd*V'd8.gEU!'(lgiL'[+/EmigP`f"7mNi)_9(mCIp2.%mp!0c+1BMjQS(K$@rQI3q=_EB$Tu8J82L/XbUZqA)u[cCn1trmJ%RZ8K.1U9Pg@hJhoC_+=B>D! +%o%iYPEHe[u>-7gn`R!Fco1?r=q<0s_=.SqiJ)NWlM22?*C2ib6:&*\-D"KXZ>b^tb;)Yc.4#t29RW@`!IgfB+^EsoU1$q21Za8&] +%k8hg7asXSe^CO(7Z^9A/1QCVjf-PkA8=r@^V`$VbR=5"$\U(\B#kIOH>G(%b,aF9gj0o9HlOQQ-RQi0dU5@@S6+Q[;E];`:L\GQB +%AR&dcp0mqBFo\,Ac8h1oeZChohWdbpiYb>p40VspANV*EHqs**K0uLgYf84B7o?/DXLGqP"PC[H5/IR@@JTGnodC57G5>ugM_Kf3 +%@e"_6ph=^*@5ACYih,:Go:%\BYHKnZ5BcAbcp`3AHt]Oa^>ZOt27NgW+*-&jlOZm.oR=P]PbG3PUAo=_G4S-4:\Ca'gCCH<1=`)^ +%/3*Ito$$>Gh\#2Eku`GS2-"hMar](4p:77s6THIFoHef%Js?`I\G,]9p_@-O-pT!Uh%OY@Pm7EQRIRk-5,#bUT<#3r=B,8PRZ^uS +%Ogk=ii9BthZ`aQ\kK+l@4r(o3[9e4thbHYanT9ML(UpI8!tLmHiNA@JI>(TnX*(nAA?3?1G>QXW)t7jPbP/?rL+i+>b=h+D4'PLH +%pX;-ZaDNBkD";jl/Zc"bnI5X+Z+6dbhVu&oqg7Ug3:!J%(]LAo'E,ZBmS\Kdi@.(Ya$n%H&g*api>SS +%AI9_PrivateDataEnd diff --git a/docs/JFM_WYQ/My_JFM/JFM-FLM_Au.cls b/docs/JFM_WYQ/My_JFM/JFM-FLM_Au.cls new file mode 100644 index 0000000..aeac9b2 --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/JFM-FLM_Au.cls @@ -0,0 +1,2305 @@ +%%http://www.jfm.damtp.cam.ac.uk/online_submission.html%% +%% This is file `jfm.cls' +%% +%% CUP Journal of Fluid Mechanics document class +%% Copyright (1996, 1997) Cambridge University Press +%% +%% by Mark A. Reed +%% based on JFM.sty v1.3. +%% v1.25 8 Aug 2001 revised by Alison Woollatt to include DOI reference +%% v1.26 released 27th July 2004 +%% v1.27 13 Nov 2006 modified by TeX Support to remove "By" from authors +%% v1.28 13 Mar 2007 modified by TeX Support to change \floatpagefraction +%% from {.95} to {.9} +%% +%% Incorporating parts of authordate.sty, by David Rhead. +%% Incorporating subeqn.sty, by Stephen Gildea. +%% Incorporating subeqnarray.sty, by Johannes Braams. +%% +%% Bugs (in the case of unchanged files) should be reported to +%% texsupport@aptaracorp.com +%% +%% This software may only be used in the preparation of journal articles +%% or books or parts of books to be published by Cambridge University Press. +%% Any other use constitutes an infringement of copyright. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% + +\NeedsTeXFormat{LaTeX2e}[1996/06/01] +\ProvidesClass{jfm}[2006/11/13 v1.27 Journal of Fluid Mechanics document class] + +\newif\ifNAT@numbers\NAT@numbersfalse +\newif\ifrapid\global\rapidfalse +\newif\ifpaper\global\paperfalse +\newif\iffof\global\foffalse +\newif\ifpersp\global\perspfalse +\newif\iflabelrightalign\labelrightaligntrue +\newif\iffnalpha\global\fnalphafalse +\newif\ifunnumlistitem\unnumlistitemfalse + +\newskip\topsepi +\newskip\topsepii +\newskip\topsepiii +\newskip\topsepiv +\newskip\topsepv +\newskip\topsepvi +\newskip\topsepvii +\newskip\topsepviii +\newskip\topsepix +\newskip\topsepx +\newskip\itemsepi +\newskip\itemsepii +\newskip\itemsepiii +\newskip\itemsepiv +\newskip\itemsepv +\newskip\itemsepvi +\newskip\itemsepvii +\newskip\itemsepviii +\newskip\itemsepix +\newskip\itemsepx +\newskip\listtextleftmargin +\newskip\listtextleftmarginii +\newskip\listtextleftmarginiii +\newskip\listtextleftmarginiv +\newskip\listtextleftmarginv +\newskip\listtextleftmarginvi +\newskip\listtextleftmarginvii +\newskip\listtextleftmarginviii +\newskip\listtextleftmarginix +\newskip\listtextleftmarginx +\newskip\listtextrightmargin +\newskip\listlabelleftskip +\newskip\listlabelleftskipii +\newskip\listlabelleftskipiii +\newskip\listlabelleftskipiv +\newskip\listlabelleftskipv +\newskip\listlabelleftskipvi +\newskip\listlabelleftskipvii +\newskip\listlabelleftskipviii +\newskip\listlabelleftskipix +\newskip\listlabelleftskipx +\newskip\abovelistskip +\newskip\belowlistskip +\newskip\abovelistskipi +\newskip\belowlistskipi +\newskip\abovelistskipii +\newskip\belowlistskipii +\newskip\abovelistskipiii +\newskip\belowlistskipiii +\newskip\abovelistskipiv +\newskip\belowlistskipiv +\newskip\abovelistskipv +\newskip\belowlistskipv +\newskip\abovelistskipvi +\newskip\belowlistskipvi +\newskip\abovelistskipvii +\newskip\belowlistskipvii +\newskip\abovelistskipviii +\newskip\belowlistskipviii +\newskip\abovelistskipix +\newskip\belowlistskipix +\newskip\abovelistskipx +\newskip\belowlistskipx +\newskip\labelsepi +\newskip\labelsepii +\newskip\labelsepiii +\newskip\labelsepiv +\newskip\labelsepv +\newskip\labelsepvi +\newskip\labelsepvii +\newskip\labelsepviii +\newskip\labelsepix +\newskip\labelsepx +\newskip\unnumlistitemindent +\newskip\unnumlisttextskip + +\newbox\tempbox% + +\newdimen\enumdim% +\newdimen\tempdimen% +\newdimen\LabelSep \LabelSep4.7pt +\newdimen\leftmarginvii +\newdimen\leftmarginviii +\newdimen\leftmarginix +\newdimen\leftmarginx +\newdimen\enumdimwd +\newdimen\itemleftmargin +\newdimen\itemlabelsep + +\usepackage{graphicx} + +%\usepackage{epstopdf,epsfig} +%\AtBeginDocument{% +\usepackage{hyperref} +\hypersetup{ + colorlinks = true, + urlcolor = blue, + citecolor = black, +} +\usepackage{bookmark} +\usepackage{breakurl} +\usepackage{booktabs} +\usepackage{colortbl} +\usepackage[boxed]{algorithm2e} +\usepackage{calc} +\usepackage{soul} + +% \newtheorem{lemma}{Lemma} +% \newtheorem{corollary}{Corollary} +%} + +%\AtBeginDocument{} + +%\newif\if@index +\newif\if@referee +\newif\ifCUPmtlplainloaded +%\newif\ifflm@rapids +\newif\iflineno% 3-8-20 +\newif\ifdbleed\global\dbleedfalse% + +\newdimen\trimwidthval +\newdimen\trimwidthbleedval +\newdimen\trimheightval +\newdimen\trimheightbleedval + + +\newlength\trimwidth% +\newlength\trimheight% +\newlength\typewidth% +\newlength\typeheight% + +\DeclareOption{lineno}{\linenotrue}% 3-8-20 +\DeclareOption{oneside}{\relax} +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5\p@}} +\DeclareOption{final}{\setlength\overfullrule{\z@}} +\DeclareOption{onecolumn}{\@twocolumnfalse} +%\DeclareOption{twocolumn}{\relax} +%\DeclareOption{titlepage}{\relax} +%\DeclareOption{notitlepage}{\relax} +%\DeclareOption{leqno}{\relax} +%\DeclareOption{fleqn}{\relax} +\DeclareOption{index}{\@indextrue} +\DeclareOption{prodtf}{\CUPmtlplainloadedtrue} +\DeclareOption{referee}{\@refereetrue} +%\DeclareOption{rapid}{\global\flm@rapidstrue} +\DeclareOption{rapid}{\global\rapidtrue} +\DeclareOption{paper}{\global\papertrue} +\DeclareOption{persp}{\global\persptrue} +\DeclareOption{fof}{\global\foftrue} + +\ExecuteOptions{twoside,final,onecolumn} +\ProcessOptions\relax + +\ifCUPmtlplainloaded \RequirePackage{CUPTimes,jfm2esym}\fi + +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} + +\edef\t@xtsize{10.7bp}% 8-8-20 %\edef\t@xtsize{\ifCUPmtlplainloaded 10.5\else 10\fi} + + +\renewcommand\normalsize{% + \@setfontsize\normalsize{\t@xtsize}\@xiipt + \abovedisplayskip 6.5\p@ \@plus 1\p@ \@minus 1\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 3\p@ \@plus 1\p@ + \belowdisplayshortskip \abovedisplayshortskip +} + +\normalsize + + + +\let\fontswitch=\relax +\let\realbf=\relax + +\AtBeginDocument{% + \ifuseAMSsubequ \else + \global\let\subequations\CUPsubequations + \global\let\endsubequations\endCUPsubequations + \fi +} + +\AtBeginDocument{% + \@ifpackageloaded{natbib} + {\bibpunct{(}{)}{;}{a}{}{,}% + \global\let\thebibliography\JFMthebib + \global\let\endthebibliography\JFMendthebib} + {\relax}% +} + +\ifCUPmtlplainloaded + \AtBeginDocument{% + \DeclareMathSizes{10.5}{10.5}{7}{5}% + \DeclareFontShape{OT1}{mtr}{sb}{n}{<-> xmntsm}{}% + \DeclareMathAlphabet{\sbmath}{OT1}{mtr}{sb}{n}% + \newcommand\realbf{\def\bfdefault{bx}\bfseries}% + \newcommand\fontswitch{\def\bfdefault{sb}}% + } +\fi + +\newcommand\small{% + \@setfontsize\small\@ixpt\@xpt + \abovedisplayskip 6\p@ \@plus 1\p@ \@minus 1\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 3\p@ \@plus 1\p@ + \belowdisplayshortskip \abovedisplayshortskip +} + +\def\@viiivpt{8.5pt} +%\newcommand\footnotesize{\small} +\newcommand\footnotesize{% + \@setfontsize\footnotesize{8.7bp}\@xpt + \abovedisplayskip 6\p@ \@plus 1\p@ \@minus 1\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 3\p@ \@plus 1\p@ + \belowdisplayshortskip \abovedisplayshortskip +} + + + +\newcommand\indexsize{\@setfontsize\indexsize\@viiivpt\@ixpt} +\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt} +\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt} +\newcommand\large{\@setfontsize\large\@xipt{13}} +\newcommand\Large{\@setfontsize\Large\@xivpt{18}} +\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{19}} +\newcommand\huge{\@setfontsize\huge\@xxpt{25}} +\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}} + +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + +\edef\r@{\ifCUPmtlplainloaded mtr\else cmr\fi} +\edef\s@{\ifCUPmtlplainloaded mtss\else cmss\fi} + +% \newcommand\qsmall{% +% \usefont{OT1}{\r@}{m}{n}\fontsize{9.75}{\f@baselineskip}\selectfont} +% \newcommand\qsmit{% +% \usefont{OT1}{\r@}{m}{it}\fontsize{9.75}{\f@baselineskip}\selectfont} +% \newcommand\qsbf{% +% \usefont{OT1}{\r@}{bx}{n}\fontsize{9.75}{\f@baselineskip}\selectfont} +% \newcommand\qssf{% +% \usefont{OT1}{\s@}{m}{n}\fontsize{9.75}{\f@baselineskip}\selectfont} +% \newcommand\boldit{% +% \usefont{OT1}{\r@}{bx}{it}\fontsize{10}{\f@baselineskip}\selectfont} +% +% \newcommand\qit{\qsmit \fontsize{\f@size}{10.75}\selectfont} +% \newcommand\qbf{\qsbf \fontsize{\f@size}{10.75}\selectfont} +% \newcommand\qsf{\qssf \fontsize{\f@size}{10.75}\selectfont} +% \newcommand\qrm{\qsmall\fontsize{\f@size}{10.75}\selectfont} + +\ifCUPmtlplainloaded\else + \DeclareTextFontCommand\textsfi{\usefont{OT1}{cmss}{m}{sl}} + \DeclareMathAlphabet\mathsfi {OT1}{cmss}{m}{sl} + \DeclareTextFontCommand\textsfb{\usefont{OT1}{cmss}{bx}{n}} + \DeclareMathAlphabet\mathsfb {OT1}{cmss}{bx}{n} + \DeclareTextFontCommand\textsfbi{\usefont{OT1}{cmss}{m}{sl}} + \DeclareMathAlphabet\mathsfbi {OT1}{cmss}{m}{sl} + \IfFileExists{t1phv.fd} + {\DeclareTextFontCommand\textsfbi{\usefont{T1}{phv}{b}{it}} + \DeclareMathAlphabet\mathsfbi {T1}{phv}{b}{it} + }{} + \IfFileExists{ot1phv.fd} + {\DeclareTextFontCommand\textsfbi{\usefont{OT1}{phv}{b}{it}} + \DeclareMathAlphabet\mathsfbi {OT1}{phv}{b}{it} + }{} +\fi + +%\DeclareMathAlphabet{\cup@mathbisf}{T1}{phv}{b}{it} + +\DeclareMathSymbol{\varGamma}{\mathord}{letters}{"00} +\DeclareMathSymbol{\varDelta}{\mathord}{letters}{"01} +\DeclareMathSymbol{\varTheta}{\mathord}{letters}{"02} +\DeclareMathSymbol{\varLambda}{\mathord}{letters}{"03} +\DeclareMathSymbol{\varXi}{\mathord}{letters}{"04} +\DeclareMathSymbol{\varPi}{\mathord}{letters}{"05} +\DeclareMathSymbol{\varSigma}{\mathord}{letters}{"06} +\DeclareMathSymbol{\varUpsilon}{\mathord}{letters}{"07} +\DeclareMathSymbol{\varPhi}{\mathord}{letters}{"08} +\DeclareMathSymbol{\varPsi}{\mathord}{letters}{"09} +\DeclareMathSymbol{\varOmega}{\mathord}{letters}{"0A} + + +\setlength\trimwidth{174mm}% +\setlength\trimheight{247mm}% +% + + +\setlength\oddsidemargin{24pt} +\setlength\evensidemargin{39pt} +\setlength\marginparwidth{2.0cm} +\setlength\marginparsep{10\p@} + +\setlength\topmargin{2.5pc} +\setlength\headheight{12\p@} +\setlength\headsep{6\p@} +\setlength\topskip{12\p@} +\setlength\footskip{18pt} + +\newlength\halflineskip +\setlength\halflineskip{6\p@ \@plus .5\p@ \@minus .5\p@} +\newlength\affilskip +\setlength\affilskip{3\p@} + +\setlength\textheight{49\baselineskip} +\addtolength\textheight{\topskip} +\setlength\textwidth{32pc} +\setlength\columnsep{10\p@} +\setlength\columnseprule{\z@} + +\special{papersize=174mm,247mm} +\pdfpagewidth 174mm +\pdfpageheight 247mm + +%\setlength\oddsidemargin{-1pc} +%\setlength\evensidemargin{-1pc} +\setlength\topmargin{-2.7pc} + +\advance\voffset-3pt% +\advance\hoffset-48.1pt% + + +\setlength\footnotesep{\z@} +\setlength{\skip\footins}{16\p@ \@plus 3\p@} + +\setlength\floatsep{10\p@ \@plus 2\p@ \@minus 1\p@} +\setlength\textfloatsep{12\p@ \@plus 6\p@} +\setlength\intextsep{\floatsep} +\setlength\dblfloatsep{\floatsep} +\setlength\dbltextfloatsep{\floatsep} +\setlength\@fptop{\z@ \@plus 0fil} +\setlength\@fpsep{10\p@ \@plus 0fil} +\setlength\@fpbot{\z@ \@plus 3fil} +\setlength\@dblfptop{\z@ \@plus 0fil} +\setlength\@dblfpsep{10\p@ \@plus 0fil} +\setlength\@dblfpbot{\z@ \@plus 3fil} +\setlength\marginparpush{5\p@} + +\setlength\parskip{\z@} % \@plus .3\p@} +\setlength\parindent{10pt} +\setlength\partopsep{\z@ \@plus 1\p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +% +\trimwidthval\the\trimwidth +\trimheightval\the\trimheight + +\trimwidthbleedval\trimwidthval +\advance\trimwidthbleedval.25in +\trimheightbleedval\trimheightval +\advance\trimheightbleedval.25in + +\def\thepaperwidth{\the\trimwidthval} +\def\thepaperheight{\the\trimheightval} + +\def\thebleedpaperwidth{\the\trimwidthbleedval} +\def\thebleedpaperheight{\the\trimheightbleedval} + +\def\papwidth{\ifdbleed\thebleedpaperwidth\else\thepaperwidth\fi} + +\def\papheight{\ifdbleed\thebleedpaperheight\else\thepaperheight\fi} + +\ifnum\pdfoutput=0 +\AtBeginDvi{\special{papersize=\papwidth,\papheight}} +\else% +\usepackage{epstopdf} + \pdfpagewidth=\papwidth \pdfpageheight=\papheight% +\fi% + + +%\clubpenalty\z@ +%\widowpenalty\@M + +\clubpenalty10000\widowpenalty10000\hyphenpenalty=50% + + +\newcommand\partname{Part} +\newcommand\part{\par\addvspace{4ex}\@afterindentfalse \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{part}% + \addcontentsline{toc}{part}{\partname\ \thepart: #1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + {\parindent \z@ \centering + \ifnum \c@secnumdepth >\m@ne + \normalfont\large\rmfamily \MakeUppercase{\partname}\ % + \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE + \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi + \par \nobreak + \fi + \normalfont\LARGE\rmfamily #2 \markboth{}{}\par}% + \nobreak \vskip 3ex \@afterheading +} + +\def\@spart#1{% + {\parindent \z@ \centering\normalfont\LARGE\rmfamily #1\par}% + \nobreak \vskip 3ex \@afterheading +} + +% \newcommand\@raggedright{\rightskip=\@flushglue \let\\=\@centercr +% \parindent\z@} +\newcommand\@raggedcenter{\centering\rightskip=\@flushglue + \let\\=\@centercr} +% +% \newif\ifno@eqnreset +% \newcommand\nosectioneqnreset{\global\no@eqnresettrue +% \renewcommand\theequation{\@arabic\c@equation}% +% } + +% \newcommand\section{% +% % \ifno@eqnreset +% % %\ifappendix\setcounter{section}{0} +% % \ifappendix \setcounter{equation}\z@\fi +% % \else +% % % \setcounter{equation}{0} +% % \setcounter{equation}\z@ +% % \fi +% \@startsection {section}{1}{\z@} +% {%\ifflm@rapids 12\p@ \@plus 6\p@ \@minus 2\p@\else +% 20\p@ \@plus 6\p@ \@minus 2\p@%\fi% +% } +% {3\p@} +% {\normalfont\large%\ifflm@rapids\normalsize\fi% +% \fontswitch\bfseries}% +% } + +\def\sectionfont{\fontsize{10.04}{12}\selectfont\bfseries} +\def\keyfont{\fontsize{10}{12}\selectfont} + +\newcommand\section{\@startsection {section}{1}{\z@}% + {20\p@ \@plus 6\p@ \@minus 2\p@}% + {3\p@}% + {\sectionfont}} + + +\newcommand\subsection{% + \@startsection{subsection}{2}{\z@} + {12\p@ \@plus 3\p@ \@minus 3\p@} + {3\p@} + {\normalfont\normalsize\itshape\@raggedcenter}% +} + +\newcommand\subsubsection{% + \@startsection{subsubsection}{3}{\z@} + {9\p@ \@plus 3\p@ \@minus 3\p@} + {3\p@} + {\raggedright\normalfont\normalsize\itshape}% +} + +\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {9\p@ \@plus 3\p@ \@minus 3\p@}% + {-3\p@}% + {\normalfont\normalsize}} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {9\p@ \@plus 3\p@ \@minus 3\p@}% + {-3\p@}% + {\normalfont\normalsize}} + + +%\newcommand\paragraph{} +%\newcommand\subparagraph{} + +\def\@seccntformat#1{% FROM LATEX.LTX + \normalfont\rmfamily\csname the#1\endcsname.\enskip +} + +\def\@secappcntformat#1{% + \ifappendix \appendixname\ifoneappendix\else~\fi\fi + \ifoneappendix\else \csname the#1\endcsname\relax\fi + \ifx\apphe@d\@empty \else .\fi\enskip +} + +\def\@sect#1#2#3#4#5#6[#7]#8{% FROM LATEX.LTX + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \ifnum #2>\@ne + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \else + \def\apphe@d{#8}% + \protected@edef\@svsec{\@secappcntformat{#1}\relax}% + \fi + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6{% + \@hangfrom{\hskip #3\relax\@svsec}% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \ifnum #2=\@ne + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \ifappendix \appendixname~\csname the#1\endcsname + \else \protect\numberline{\csname the#1\endcsname.}#7\fi + \fi}% + \else + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname.}#7\fi}% + \fi + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname.}% + \fi + #7}}% + \fi + \@xsect{#5}\@afterindentfalse\@afterheading}%%% 3-8-20 + +%%%%%%% 3-8-20 %%%% +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup + #4{% + \@hangfrom{\hskip #1}% + \interlinepenalty \@M #5\@@par}% + \endgroup + \else + \def\@svsechd{#4{\hskip #1\relax #5}}% + \fi + \@xsect{#3}\@afterindentfalse\@afterheading} +%%%%%%%%%%%%%%%% + +% \def\@listi{\leftmargin\leftmargini +% \labelwidth\leftmargini +% \advance\labelwidth-\labelsep +% \parsep 0\p@% +% \topsep \topsepi +% \itemsep\itemsepi}% + + +\newif\ifappendix +\newif\ifoneappendix +\newcommand\appendixname{Appendix} + +\newcommand\oneappendix{\global\oneappendixtrue \appendix} +\newcommand\appendix{\par +\setcounter{section}{0} + % \setcounter{section}\z@ + \setcounter{equation}{0} + %\setcounter{equation}\z@ + \renewcommand\thesection{\@Alph\c@section}% + \renewcommand\thesubsection{\thesection.\@arabic\c@subsection}% + \renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection}% + \renewcommand\theequation{\thesection\,\@arabic\c@equation}% + \global\appendixtrue\footnotesize +} + +\newenvironment{appen}{\par\begingroup% +\appendix\footnotesize +}% +{\endgroup} + +\setcounter{secnumdepth}{3} + +\newcounter{part} +\newcounter {section} +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter{refsection}[section] +\renewcommand\thepart {\@arabic\c@part} +\renewcommand\thesection {\@arabic\c@section} +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection {\thesubsection.\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} + +\newlength\@indentskip +\newlength\smallindent +\newlength\@footindent +\newlength\@leftskip +\setlength\@indentskip{2.5em} +\setlength\smallindent{1em} +\setlength\@footindent{\smallindent} +\setlength\@leftskip{\z@} + +% \setlength\leftmargini{\z@} +% \setlength\labelsep{\z@} +% \setlength\labelwidth{\z@} +% +% \newcommand\makeitemlabel[1]{\hspace\labelwidth\hspace\labelsep\hfill#1} +% +% \def\@listI{\parsep\z@ \topsep\z@ \partopsep\z@ \itemsep\z@ \rightmargin\z@ +% \leftmargin\labelwidth \advance\leftmargin\labelsep +% } +% +% \def\@listi{\@listI \leftmargin\leftmargini \itemindent 1em} +% \def\@listii{\@listI \advance\leftmargin .5em} +% \def\@listiii{\@listI} +% \def\@listiv{\@listI} +% \def\@listv{\@listI} +% \def\@listvi{\@listI} +% \@listi +% +% \def\itemize{% FROM LATEX.LTX +% \ifnum \@itemdepth >\thr@@ \@toodeep\else +% \advance\@itemdepth\@ne +% \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% +% \expandafter +% \list +% \csname\@itemitem\endcsname +% {\labelsep .5em\settowidth{\labelwidth}{\csname\@itemitem\endcsname}% +% \let\makelabel\makeitemlabel}% +% \fi +% } +% +% \newcommand\labelitemi{$\m@th\bullet$} +% \newcommand\labelitemii{$\m@th\circ$} +% \newcommand\labelitemiii{\normalfont\bfseries ---} +% \newcommand\labelitemiv{\normalfont\bfseries --} +% +% \def\enumerate{% FROM LATEX.LTX +% \ifnum \@enumdepth >\thr@@ \@toodeep\else +% \advance\@enumdepth\@ne +% \edef\@enumctr{enum\romannumeral\the\@enumdepth}% +% \fi +% \@ifnextchar [{\@enumeratetwo}{\@enumeratetwo[i]}% +% } +% +% \def\@enumeratetwo[#1]{% +% \expandafter +% \list +% \csname label\@enumctr\endcsname +% {\settowidth\labelwidth{#1} +% \labelwidth 1.5pc +% \labelsep .5em% +% % \advance\itemindent\labelsep +% \advance\itemindent\labelwidth +% \usecounter\@enumctr\relax}% +% } +% +% \newcommand\labelenumi {{\normalfont\rmfamily(\theenumi)}} +% \newcommand\labelenumii {{\normalfont\rmfamily(\theenumii)}} +% \newcommand\labelenumiii{\theenumiii.} +% \newcommand\labelenumiv {\theenumiv} +% +% \renewcommand\theenumi{{\normalfont\@roman\c@enumi}} +% \renewcommand\theenumii{{\normalfont\itshape\@alph\c@enumii}} +% \renewcommand\theenumiii{\@roman\c@enumiii} +% \renewcommand\theenumiv{\@roman\c@enumiv} +% +% \renewcommand\p@enumii{\theenumi.} +% \renewcommand\p@enumiii{\p@enumii\theenumii.} +% \renewcommand\p@enumiv{\p@enumiii\theenumiii.} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\topsepi12\p@ \@plus2\p@% \@minus.5\p@ +\topsepii2pt% \@plus1\p@ +\topsepiii2pt% \@plus1\p@ +\topsepiv2pt% \@plus1\p@ +\topsepv2pt% \@plus1\p@ +\topsepvi2pt% \@plus1\p@ +\topsepvii2pt% \@plus1\p@ +\topsepviii2pt% \@plus1\p@ +\topsepix2pt% \@plus1\p@ +\topsepx2pt% \@plus1\p@ +\itemsepi0pt +\itemsepii0pt +\itemsepiii0pt +\itemsepiv0pt +\itemsepv0pt +\itemsepvi0pt +\itemsepvii0pt +\itemsepviii0pt +\itemsepix0pt +\itemsepx0pt +% +% \def\list#1#2{% +% \ifnum \@listdepth >10\relax +% \@toodeep +% \else +% \global\advance\@listdepth\@ne +% \fi +% \rightmargin\z@ +% \listparindent\z@ +% \itemindent\z@ +% \csname @list\romannumeral\the\@listdepth\endcsname +% \def\@itemlabel{#1}% +% \let\makelabel\@mklab +% \@nmbrlistfalse +% #2\relax +% \@trivlist +% \parskip\parsep +% \parindent\listparindent +% \advance\linewidth -\rightmargin +% \advance\linewidth -\leftmargin +% \advance\@totalleftmargin \leftmargin +% \parshape \@ne \@totalleftmargin \linewidth +% \ignorespaces} +% + +\def\@listi{\leftmargin\leftmargini + \labelwidth\leftmargini + \advance\labelwidth-\labelsep + \parsep 0\p@% + \topsep \topsepi + \itemsep\itemsepi}% + +\def\@listI{\leftmargin\leftmargini + \labelwidth\leftmargini + \advance\labelwidth-\labelsep + \parsep 0\p@% + \topsep \topsepi + \itemsep\itemsepi}% +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep\topsepii + \parsep 0pt + \vskip-\abovelistskip + \itemsep\itemsepii} +\def\@listiii {\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep\topsepiii + \parsep 0pt + \itemsep\itemsepiii} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +\def\@listvii {\leftmargin\leftmarginvii + \labelwidth\leftmarginvii + \advance\labelwidth-\labelsep} +\def\@listviii {\leftmargin\leftmarginviii + \labelwidth\leftmarginviii + \advance\labelwidth-\labelsep} +\def\@listix {\leftmargin\leftmarginix + \labelwidth\leftmarginix + \advance\labelwidth-\labelsep} +\def\@listx {\leftmargin\leftmarginx + \labelwidth\leftmarginx + \advance\labelwidth-\labelsep} +% +\setlength\leftmargini {2.5em} +\setlength\leftmarginii {2.2em} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\setlength\leftmarginv {1em} +\setlength\leftmarginvi {1em} +\setlength\leftmarginvii {1em} +\setlength\leftmarginviii {1em} +\setlength\leftmarginix {1em} +\setlength\leftmarginx {1em} +\setlength\leftmargin {\leftmargini} +% +\setlength \labelsep {\LabelSep} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +% +\newcommand\theenumv{\Alph{enumv}} +\newcommand\theenumvi{\Alph{enumvi}} +\newcommand\theenumvii{\roman{enumvii}} +\newcommand\theenumviii{\Alph{enumviii}} +\newcommand\theenumix{\Alph{enumix}} +\newcommand\theenumx{\roman{enumx}} +\renewcommand\theenumi{\arabic{enumi}} +\renewcommand\theenumii{\alph{enumii}} +\renewcommand\theenumiii{\roman{enumiii}} +\renewcommand\theenumiv{\Alph{enumiv}} +\renewcommand\theenumv{\Alph{enumv}} +\renewcommand\theenumvi{\Alph{enumvi}} +\renewcommand\theenumvii{\Alph{enumvii}} +\renewcommand\theenumviii{\Alph{enumviii}} +\renewcommand\theenumix{\Alph{enumix}} +\renewcommand\theenumx{\Alph{enumx}} +% +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{\theenumii.} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +\newcommand\labelenumv{\theenumv.} +\newcommand\labelenumvi{\theenumvi.} +\newcommand\labelenumvii{\theenumvii.} +\newcommand\labelenumviii{\theenumviii.} +\newcommand\labelenumix{\theenumix.} +\newcommand\labelenumx{\theenumx.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +\font\lcir = lcircle10 at 12pt +\newcommand\bulls{\raise1.5pt\hbox{\lcir\char'162}} +\def\textbullet{\leavevmode\raise2pt\hbox{\hskip2pt\bulls}} +\def\textendash{{\bf--}} +\def\textasteriskcentered{\leavevmode\raise-1.5pt\hbox{*}} +\def\textperiodcentered{\leavevmode\raise1.5pt\hbox{\bulls}} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +\newcommand\labelitemv{\textperiodcentered} +\newcommand\labelitemvi{\textbullet} +\newcommand\labelitemvii{\normalfont\bfseries \textendash} +\newcommand\labelitemviii{\textasteriskcentered} +\newcommand\labelitemix{\textperiodcentered} +\newcommand\labelitemx{\textperiodcentered} +% + +\newcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\bfseries #1} + +\newenvironment{description} + {\list{}{\labelwidth\z@ + \ifnum\@listdepth=\@ne \else \advance\leftmargin 1em\fi + \let\makelabel\descriptionlabel}} + {\endlist} + +\newenvironment{verse} + {\let\\=\@centercr + \list{}{\itemsep\z@ + \itemindent -\@indentskip + \listparindent \itemindent + \rightmargin\leftmargin + \advance\leftmargin \@indentskip}\item[]} + {\endlist} + +\newenvironment{quotation} + {\list{}{\listparindent\smallindent + \itemindent\listparindent + \leftmargin 1pc\rightmargin\leftmargin + \topsep\halflineskip + \parsep \z@ \@plus 1\p@}\item[]\small\baselineskip 10.75\p@} + {\endlist} + +\newenvironment{quote} + {\par\list{}{\leftmargin 1pc\rightmargin\leftmargin + \listparindent\smallindent}\item[]% + \small\baselineskip 10.75\p@\rule{\z@}{10\p@}\ignorespaces} + {\endlist} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Enumerate list %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\listtextleftmargin 0pt%24pt +\listtextleftmarginii0pt% 24pt +\listtextleftmarginiii0pt% 24pt +\listtextleftmarginiv0pt% 24pt +\listtextleftmarginv0pt% 24pt +\listtextleftmarginvi0pt% 24pt +\listtextleftmarginvii0pt% 24pt +\listtextleftmarginviii0pt% 24pt +\listtextleftmarginix0pt% 24pt +\listtextleftmarginx0pt% 24pt +\listtextrightmargin0pt%.5pc +\listlabelleftskip0pt%3.3pt +\listlabelleftskipii0pt%3.3pt +\listlabelleftskipiii0pt%3.3pt +\listlabelleftskipiv0pt%3.3pt +\listlabelleftskipv0pt%3.3pt +\listlabelleftskipvi0pt%3.3pt +\listlabelleftskipvii0pt%3.3pt +\listlabelleftskipviii0pt%3.3pt +\listlabelleftskipix0pt%3.3pt +\listlabelleftskipx0pt%3.3pt +\abovelistskipi0pt% plus2pt +\belowlistskipi0pt% plus2pt +\abovelistskipii0pt% plus2pt +\belowlistskipii0pt% plus2pt +\abovelistskipiii0pt% plus2pt +\belowlistskipiii0pt% plus2pt +\abovelistskipiv0pt% plus2pt +\belowlistskipiv0pt% plus2pt +\abovelistskipv0pt% plus2pt +\belowlistskipv0pt% plus2pt +\abovelistskipvi0pt% plus2pt +\belowlistskipvi0pt% plus2pt +\abovelistskipvii0pt% plus2pt +\belowlistskipvii0pt% plus2pt +\abovelistskipviii0pt% plus2pt +\belowlistskipviii0pt% plus2pt +\abovelistskipix0pt% plus2pt +\belowlistskipix0pt% plus2pt +\abovelistskipx0pt% plus2pt +\belowlistskipx0pt% plus2pt +\labelsepi\z@ +\labelsepii\z@ +\labelsepiii\z@ +\labelsepiv\z@ +\labelsepv\z@ +\labelsepvi\z@ +\labelsepvii\z@ +\labelsepviii\z@ +\labelsepix\z@ +\labelsepx\z@ +% +\def\listdevicefonti{} +\def\listdevicefontii{} +\def\listdevicefontiii{} +\def\listdevicefontiv{} +\def\listdevicefontv{} +\def\listdevicefontvi{} +\def\listdevicefontvii{} +\def\listdevicefontviii{} +\def\listdevicefontix{} +\def\listdevicefontx{} +\def\listfont{} +\def\textlistlabel{} +% +\@definecounter{enumv} +\@definecounter{enumvi} +\@definecounter{enumvii} +\@definecounter{enumviii} +\@definecounter{enumix} +\@definecounter{enumx} +% +\def\enummax#1{% + \labelsep\csname labelsep\romannumeral\the\@enumdepth\endcsname + \ifdim\listtextleftmargin>\z@\labelsepi0pt\fi + \ifdim\listtextleftmarginii>\z@\labelsepii0pt\fi + \ifdim\listtextleftmarginiii>\z@\labelsepiii0pt\fi + \setbox\tempbox\hbox{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname#1}% + \enumdim\wd\tempbox + \setbox\tempbox\hbox{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname#1}% + \enumdimwd\wd\tempbox + \expandafter\global\csname leftmargin\romannumeral\the\@enumdepth\endcsname\enumdim + \ifdim\listtextleftmargin>\z@ + \leftmargini\listtextleftmargin + \ifdim\listlabelleftskip>\z@ + \advance\leftmargini-\listlabelleftskip + \fi + \fi + \ifdim\listtextleftmarginii>\z@ + \leftmarginii\listtextleftmarginii + \ifdim\listlabelleftskipii>\z@ + \advance\leftmarginii-\listlabelleftskipii + \fi + \fi + \ifdim\listtextleftmarginiii>\z@ + \leftmarginiii\listtextleftmarginiii + \ifdim\listlabelleftskipiii>\z@ + \advance\leftmarginiii-\listlabelleftskipiii + \fi + \fi + \ifdim\listtextleftmarginiv>\z@ + \leftmarginiv\listtextleftmarginiv + \ifdim\listlabelleftskipiv>\z@ + \advance\leftmarginiv-\listlabelleftskipiv + \fi + \fi + \ifdim\listtextleftmarginv>\z@ + \leftmarginv\listtextleftmarginv + \ifdim\listlabelleftskipv>\z@ + \advance\leftmarginv-\listlabelleftskipv + \fi + \fi + \ifdim\listtextleftmarginvi>\z@ + \leftmarginvi\listtextleftmarginvi + \ifdim\listlabelleftskipvi>\z@ + \advance\leftmarginvi-\listlabelleftskipvi + \fi + \fi + \ifdim\listtextleftmarginvii>\z@ + \leftmarginvii\listtextleftmarginvii + \ifdim\listlabelleftskipvii>\z@ + \advance\leftmarginvii-\listlabelleftskipvii + \fi + \fi + \ifdim\listtextleftmarginviii>\z@ + \leftmarginviii\listtextleftmarginviii + \ifdim\listlabelleftskipviii>\z@ + \advance\leftmarginviii-\listlabelleftskipviii + \fi + \fi + \ifdim\listtextleftmarginix>\z@ + \leftmarginix\listtextleftmarginix + \ifdim\listlabelleftskipix>\z@ + \advance\leftmarginix-\listlabelleftskipix + \fi + \fi + \ifdim\listtextleftmarginx>\z@ + \leftmarginx\listtextleftmarginx + \ifdim\listlabelleftskipx>\z@ + \advance\leftmarginx-\listlabelleftskipx + \fi + \fi + \ifdim\listlabelleftskip>\z@ + \advance\leftmargini\listlabelleftskip + \fi + \ifdim\listlabelleftskipii>\z@ + \advance\leftmarginii\listlabelleftskipii + \fi + \ifdim\listlabelleftskipiii>\z@ + \advance\leftmarginiii\listlabelleftskipiii + \fi + \ifdim\listlabelleftskipiv>\z@ + \advance\leftmarginiv\listlabelleftskipiv + \fi + \ifdim\listlabelleftskipv>\z@ + \advance\leftmarginv\listlabelleftskipv + \fi + \ifdim\listlabelleftskipvi>\z@ + \advance\leftmarginvi\listlabelleftskipvi + \fi + \ifdim\listlabelleftskipvii>\z@ + \advance\leftmarginvii\listlabelleftskipvii + \fi + \ifdim\listlabelleftskipviii>\z@ + \advance\leftmarginviii\listlabelleftskipviii + \fi + \ifdim\listlabelleftskipix>\z@ + \advance\leftmarginix\listlabelleftskipix + \fi + \ifdim\listlabelleftskipx>\z@ + \advance\leftmarginx\listlabelleftskipx + \fi + } +% +\enummax{1.} +% + +\def\enumerate{\@ifnextchar[{\@enumerate}{\@enumerate[\csname label\@enumctr\endcsname]}}%% +% +\def\@enumerate[#1]{\par + \ifnum \@enumdepth >10 \@toodeep + \else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \setcounter{\@enumctr}{1}\enummax{#1}% + \list + {\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \topsep\csname abovelistskip\romannumeral\the\@enumdepth\endcsname + \itemsep\csname itemsep\romannumeral\the\@enumdepth\endcsname + \listfont %\listparindent18.25pt + \ifnum \@enumdepth=1 + \belowlistskipi6.5pt + %\leftskip12pt + \rightmargin\listtextrightmargin + \advance\rightmargin\rightskip + \advance\leftmargin\leftskip + \tempdimen\leftmargini + \advance\tempdimen-\labelsep +% \itemsep3pt + \topsep3pt + \iffnalpha + \def\makelabel##1{{\hskip\listlabelleftskip{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname{\iflabelrightalign\hss\fi\textlistlabel##1}}}}% + \global\fnalphafalse + \else + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskip{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi\textlistlabel##1}}}}% + \fi + \else + \ifnum \@enumdepth=2 + \tempdimen\leftmarginii + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipii{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=3 + \tempdimen\leftmarginiii + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipiii{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=4 + \tempdimen\leftmarginiv + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipiv{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=5 + \tempdimen\leftmarginv + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipv{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=6 + \tempdimen\leftmarginvi + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipvi{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=7 + \tempdimen\leftmarginvii + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipvii{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=8 + \tempdimen\leftmarginviii + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipviii{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=9 + \tempdimen\leftmarginix + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipix{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \ifnum \@enumdepth=10 + \tempdimen\leftmarginx + \advance\tempdimen-\labelsep + \def\makelabel##1{\hbox to \tempdimen{\hskip\listlabelleftskipx{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname\hbox to \enumdimwd{\iflabelrightalign\hss\fi##1}}}}% + \else + \def\makelabel##1{\hss\llap{\csname listdevicefont\romannumeral\the\@enumdepth\endcsname##1}}% + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi} + \fi} +% +\def\endenumerate{\@topsepadd\csname belowlistskip\romannumeral\the\@enumdepth\endcsname\endlist\noindent}% + +\itemleftmargin\z@ % won't be active in enumerate +\itemlabelsep6.5\p@ % labelsep in itemize for all levels + +\def\itemize{\par% + \ifnum \@itemdepth >3 \@toodeep\else\ifnum\@enumdepth>0\@itemdepth\@enumdepth\fi \advance\@itemdepth \@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \list{\csname\@itemitem\endcsname}% + {% + \topsep\csname abovelistskip\romannumeral\the\@itemdepth\endcsname%\fi + \itemsep\csname itemsep\romannumeral\the\@itemdepth\endcsname + \labelsep\itemlabelsep + \listfont + \abovelistskip5.5pt% + \belowlistskipi5.5pt + \itemsep0pt%\leftskip-12pt +% \itemindent22pt + \setbox\tempbox\hbox{\csname\@itemitem\endcsname} + \csname leftmargin\romannumeral\the\@itemdepth\endcsname\wd\tempbox + \advance\csname leftmargin\romannumeral\the\@itemdepth\endcsname\itemlabelsep + \ifnum\@itemdepth=\@ne\ifnum\@enumdepth=0 % if not inside an enumerate + \rightmargin\listtextrightmargin + \advance\rightmargin\rightskip + \advance\csname leftmargin\romannumeral\the\@itemdepth\endcsname\itemleftmargin + \advance\leftmargini\leftskip + \else + \advance\csname leftmargin\romannumeral\the\@itemdepth\endcsname\itemleftmargin + \advance\leftmarginii\leftskip + \fi\fi + \leftmargin\csname leftmargin\romannumeral\the\@itemdepth\endcsname + \def\makelabel##1{\hss\llap{##1}}} + \fi}% +% +\def\enditemize{% +\@topsepadd\csname belowlistskip\romannumeral\the\@itemdepth\endcsname%\fi +\endlist\noindent} +% + +\def\@begintheorem#1#2{% FROM LATEX.LTX + \par\vskip\halflineskip {\normalfont\scshape #1\ #2.}% + \enskip\normalfont\itshape} +\def\@opargbegintheorem#1#2#3{% FROM LATEX.LTX + \par\vskip\halflineskip {\normalfont\scshape #1\ #2\ (#3).}% + \enskip\normalfont\itshape} +\def\@endtheorem{\vskip\halflineskip\par}% FROM LATEX.LTX + + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% % theorem* code from psp +% +% \newif\ifrembrks +% \newcommand\removebrackets{\rembrkstrue} +% +% \def\@xnthm#1#2[#3]{% FROM LATEX.LTX +% \expandafter\@ifdefinable\csname #1\endcsname +% {\@definecounter{#1}\@newctr{#1}[#3]% +% \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand +% \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}% +% \global\@namedef{#1}{\@thm{#1}{#2}}% +% \global\@namedef{#1*}{\@thmstar{#1}{#2}}% +% \global\@namedef{end#1}{\@endtheorem}% +% \global\@namedef{end#1*}{\@endthmstar}}% +% } +% +% \def\@ynthm#1#2{% FROM LATEX.LTX +% \expandafter\@ifdefinable\csname #1\endcsname +% {\@definecounter{#1}% +% \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% +% \global\@namedef{#1}{\@thm{#1}{#2}}% +% \global\@namedef{#1*}{\@thmstar{#1}{#2}}% +% \global\@namedef{end#1}{\@endtheorem}% +% \global\@namedef{end#1*}{\@endthmstar}}% +% } +% +% \def\@othm#1[#2]#3{% FROM LATEX.LTX +% \@ifundefined{c@#2}{\@nocounterr{#2}}% +% {\expandafter\@ifdefinable\csname #1\endcsname +% {\global\@namedef{the#1}{\@nameuse{the#2}}% +% \global\@namedef{#1}{\@thm{#2}{#3}}% +% \global\@namedef{#1*}{\@thmstar{#2}{#3}}% +% \global\@namedef{end#1}{\@endtheorem}% +% \global\@namedef{end#1*}{\@endthmstar}}}% +% } +% +% \def\@thmstar#1#2{\@ifnextchar[{\@ythmstar{#1}{#2}}{\@xthmstar{#1}{#2}}} +% \def\@xthmstar#1#2{\@beginthmstar{#2}{\csname the#1\endcsname}\ignorespaces} +% \def\@ythmstar#1#2[#3]{\@opargbeginthmstar{#2}{\csname the#1\endcsname}{#3}% +% \ignorespaces} +% +% \def\@thmstarcounter#1{{}} +% \def\@thmstarcountersep{{}} +% +% \def\@beginthmstar#1#2{% +% \par\vskip\halflineskip {\normalfont\scshape #1.}% +% \enskip\normalfont\itshape} +% +% \def\@opargbeginthmstar#1#2#3{% +% \par\vskip\halflineskip {\normalfont\scshape #1\ {\normalfont\rmfamily +% \ifrembrks #3\global\rembrksfalse\else (#3)\fi.}}% +% \normalfont\itshape\enskip} +% +% \def\@endthmstar{\vskip\halflineskip\par} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \newsavebox{\proofbox} +% \sbox{\proofbox}{\unitlength 1\p@\begin{picture}(7,7)% +% \put(0,0){\framebox(7,7){}}\end{picture}} +% +% \newlength\rpbdim +% \newcommand\raiseproofboxby[1]{\setlength\rpbdim{#1}} +% \def\raiseproofb@x{\llap{\vbox to\z@{\hsize=\wd\proofbox\vss +% \hbox{\usebox\proofbox}\vskip\rpbdim}}% +% \setlength\rpbdim{\z@}% +% } +% +% \newenvironment{proof} +% {\par\vskip\halflineskip {\normalfont\itshape Proof.}\enskip} +% {\hspace*{\fill}\ifdim\rpbdim=\z@ \usebox\proofbox\else \raiseproofb@x\fi +% \vskip\halflineskip\par} +% +% \newenvironment{proof*}{\proof}{\vskip\halflineskip\par} +% +% \newcommand\newremark[2]{% +% \newenvironment{#1}{\list{}{\topsep\halflineskip \labelwidth\z@ +% \labelsep .5em \let\makelabel\makeitemlabel}% +% \item[{\normalfont\itshape #2.}]}{\endlist}% +% } + +\renewcommand\theequation{\thesection.\@arabic\c@equation} +\@addtoreset{equation}{section} + +% subeqn.sty follows +% Copyright (c) 1990 by Stephen Gildea +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. +% Modified for use with JFM/LaTeX2e. + +\newif\ifuseAMSsubequ +\newcommand\useAMSsubequations{\global\useAMSsubequtrue} + +\newtoks\@stequation + +\newenvironment{CUPsubequations} + {\refstepcounter{equation}% + \edef\@savedequation{\the\c@equation}% + \@stequation=\expandafter{\theequation}% + \edef\@savedtheequation{\the\@stequation}% + \edef\oldtheequation{\theequation}% + \setcounter{equation}\z@ + \def\theequation{\oldtheequation{\itshape\alph{equation}}}} + {\setcounter{equation}{\@savedequation}% + \@stequation=\expandafter{\@savedtheequation}% + \edef\theequation{\the\@stequation}\global\@ignoretrue} + +\newcommand\returnthesubequation{% + \gdef\thesubequation{\theequation{\itshape\@alph\c@subequation}}} + +% subeqnarray.sty +% Copyright (C) 1988 by Johannes Braams, Dr Neher Laboratories +% Modified for use with JFM/LaTeX2e. + +\newcounter{subequation}[equation] +\renewcommand\thesubequation{\theequation{\itshape\@alph\c@subequation}} +\def\@subeqnnum{{\normalfont\rmfamily (\thesubequation)}} + +\newcommand\slabel[1]{\@bsphack % MODIFIED IN LINE WITH LATEX.LTX + \protected@write\@auxout{}% + {\string\newlabel{#1}{{\thesubequation}{\thepage}}}% + \@esphack} + +\newenvironment{subeqnarray} % MODIFIED IN LINE WITH LATEX.LTX + {\stepcounter{equation}% + \let\@currentlabel=\theequation + \global\c@subequation\@ne + \global\@eqnswtrue + \m@th + \global\@eqcnt\z@ + \tabskip\@centering + \let\\\@subeqncr + $$\everycr{}\halign to\displaywidth\bgroup + \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel + &\global\@eqcnt\@ne \hfil${\;##\;}$\hfil + &\global\@eqcnt\tw@ + $\displaystyle\tabskip\z@skip{##}$\hfil\tabskip\@centering + &\hb@xt@\z@\bgroup\hss##\egroup + \tabskip\z@skip \cr} + {\@@subeqncr\egroup $$\global\@ignoretrue} + +\def\@subeqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M + \@ysubeqncr}{\global\@eqpen\interdisplaylinepenalty \@ysubeqncr}} + +\def\@ysubeqncr{\@ifnextchar [{\@xsubeqncr}{\@xsubeqncr[\z@]}} + + +\def\@xsubeqncr[#1]{\ifnum0=`{\fi}\@@subeqncr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}} + +\def\@@subeqncr{\let\@tempa\relax + \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &} + \else \def\@tempa{&}\fi + \@tempa \if@eqnsw\@subeqnnum\refstepcounter{subequation}\fi + \global\@eqnswtrue\global\@eqcnt\z@\cr} + +\let\@ssubeqncr=\@subeqncr +\newenvironment{subeqnarray*} + {\def\@subeqncr{\nonumber\@ssubeqncr}\subeqnarray} + {\global\advance\c@equation\m@ne \nonumber\endsubeqnarray} + +% \renewenvironment{eqnarray} % MODIFIED IN LINE WITH LATEX.LTX +% {\stepcounter{equation}% +% \let\@currentlabel=\theequation +% \global\@eqnswtrue +% \m@th +% \global\@eqcnt\z@ +% \tabskip\@centering +% \let\\\@eqncr +% $$\everycr{}\halign to \displaywidth\bgroup +% \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel +% &\global\@eqcnt\@ne \hfil${\;##\;}$\hfil +% &\global\@eqcnt\tw@ +% $\displaystyle\tabskip\z@skip{##}$\hfil \tabskip\@centering +% &\hb@xt@\z@\bgroup\hss##\egroup +% \tabskip\z@skip \cr} +% {\@@eqncr\egroup\global\advance\c@equation\m@ne +% $$\global\@ignoretrue} +% +% \newenvironment{titlepage} +% {\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn +% \else \newpage \fi \thispagestyle{empty}\c@page\z@} +% {\if@restonecol\twocolumn \else \newpage \fi} + +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{3\p@} +\setlength\arrayrulewidth{.5\p@} +\setlength\doublerulesep{1.5\p@} +\setlength\tabbingsep{\labelsep} +\setlength{\skip\@mpfootins}{5\p@ \@plus .4\p@ \@minus .4\p@} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.5\p@} + +\newcommand\affiliation[1]{\gdef\@affiliation{\let\aff\aff@inst#1}} +\gdef\@affiliation{} + +% \newcommand\maketitle{\appendixfalse \iflineno\relax\nolinenumbers\fi%% 3-8-20 +% \@ifnextchar [{\m@ketitleone}{\m@ketitletwo}}% +% \def\m@ketitletwo{\m@ketitleone[n]} + +\newif\iffofootnote +\newcommand\fulloutfootnote{\global\fofootnotetrue} + +%\def\m@ketitleone[#1]{ +\renewcommand\maketitle{% +%\appendixfalse% +% \iflineno\relax\nolinenumbers\fi%% 3-8-20 +% \par\iflineno\relax\runninglinenumbers\fi% 3-8-20 +% \begingroup\iflineno\relax\runninglinenumbers\fi%% 3-8-20 +% \bgroup +% \def\@makefntext##1{% +% \iffofootnote +% \enskip\@thefnmark \ ##1\global\fofootnotefalse +% \else +% \setbox\@tempboxa\hbox{\quad\@thefnmark\enskip ##1}% +% \ifdim\wd\@tempboxa>\hsize \unhbox\@tempboxa\else +% \centerline{\unhbox\@tempboxa\quad}\fi +% \fi}% + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \newpage \global\@topnum\z@ + \@maketitle%{#1}% + \thispagestyle{titlepage}\@thanks + \endgroup +% \egroup + \setcounter{footnote}\z@ + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@title\@empty + \global\let\@author\@empty + \global\let\@affiliation\@empty + \global\let\maketitle\relax + \global\let\thanks\relax +} + +% \renewcommand\and{{\normalfont +% \ifCUPmtlplainloaded +% \fontseries{sb}\fontshape{n}\fontsize{8}{12}\selectfont +% \else +% \indexsize\bfseries +% \fi +% and}% +% } + +% \def\put@rapidsHead{\ifflm@rapids +% \noindent\minipage[t]{\linewidth} +% \vskip-25pt +% \hrule width \linewidth height 1.5pt +% \par\vskip 26pt +% \fontsize{30pt}{35pt}\sffamily\bfseries JFM RAPIDS\\ +% \fontsize{12pt}{12pt}\sffamily\bfseries journals.cambridge.org/rapids\\[-3pt] +% \hrule width \linewidth height 1pt +% \endminipage\par\vskip 24pt\fi} + +% \def\put@absrule{\ifflm@rapids\par\vskip1pc\hrule\fi} + +%\def\@title@alignment{\ifflm@rapids\raggedright\fi} +%\def\@author@alignment{\ifflm@rapids\raggedright\fi} +%\def\@aff@alignment{\ifflm@rapids\raggedright\fi} +%\def\@history@alignment{\ifflm@rapids\raggedright\fi} + + +\def\titlefont{\fontseries{b}\fontsize{17bp}{19bp}\selectfont} +\def\authorfont{\fontsize{10.5bp}{14bp}\selectfont} + + +\def\@maketitle{% #1 + \newpage + \vspace*{10\p@}\addvspace{4.6pc}% + {\flushleft + {\titlefont% + %\put@rapidsHead% + %\@title@alignment% + \@title \par}% + \vspace*{23.5\p@}%\@plus 2\p@ \@minus 1\p@ + {\normalfont\authorfont\fontswitch\bfseries\baselineskip=12\p@ + %\@author@alignment% + \lowercase{\@author}\par}% + \vspace*{2\p@}%\vskip 4\p@ \@plus 1\p@ + {\normalfont\small + %\@aff@alignment% + \@affiliation \par\vspace*{2pt}}% + \ifx\@corresau\empty\else{\normalfont\small\@corresau\vskip7pt}\fi + %\vskip 8\p@ %\@plus 2\p@ \@minus 1\p@ + %{\normalfont\small (Received \@date)}% x@rem + \normalfont\small + %\@history@alignment% + (Received xx; revised xx; accepted xx)\hfill% x@add + %\put@absrule + \par}% + %\vskip 8\p@ \@plus 2\p@ \@minus 1\p@ +} + +\newenvironment{abstract} + {\par\vspace*{33pt}\hrule\vspace*{11.75pt}\normalfont\normalsize\noindent\ignorespaces} + {\par\vskip 9\p@ \@plus 1\p@ \@minus 1\p@ +% \vbox{\centerline{\rule[4\p@]{30pc}{.4\p@}}} +} + + + +\newenvironment{keywords} + {\par\keyfont\noindent{\bf Key words:}\ \noindent\ignorespaces} + {\par\vskip 9\p@ \@plus 1\p@ \@minus 1\p@ + %\ifflm@rapids\vskip-1pc\put@absrule\else% + %\vbox{\centerline{\rule[4\p@]{30pc}{.4\p@}}} +\vskip14.5pt% +\hrule% + \vskip 18pt + %\fi% + } + +%\mark{{}{}} +\renewcommand\author{\@ifnextchar [{\@authortwo}{\@authorone}} +\def\@authortwo[#1]#2{\gdef\@author{#2}\gdef\@shortauthor{#1}} +\def\@authorone#1{\gdef\@author{\def\and{and }#1}% + \begingroup\def\and{and}\gdef\@shortauthor{\def\and{and }#1}% + \endgroup} +\gdef\@author{\mbox{}} + +%\def\author#1{\gdef\@author{\def\and{and }#1}} + +% \newcommand\myshortauthor[1]{%\edef\@tempx{#1}% +% % \ifx\@tempx\@empty% +% \gdef\@myshortauthor{#1} +% % \else% +% %\gdef\@shortauthor{#1}% +% % \fi% +% } +% \myshortauthor{QQQ\@author} %Short author list is empty!! + +%\AtBeginDocument{ + +%\myshortauthor{A.N. Jones, H.-C. Smith and J.Q. Long} +%} + +% \renewcommand\title{\@ifnextchar [{\@titletwo}{\@titleone}} +% \def\@titletwo[#1]#2{\gdef\@title{#2}\gdef\@shorttitle{#1}} +% \def\@titleone#1{\gdef\@title{#1}%\gdef\@shorttitle{#1} +% } +% \gdef\@title{\mbox{}} + +\newcommand\righttitle[1]{% + \edef\@tempx{#1}% + \ifx\@tempx\@empty + \gdef\@righttitle{Short title is empty!!}% + \else + \gdef\@righttitle{#1}% + \fi% + } +\gdef\@righttitle{Journal of Fluid Mechanics} + +\newcommand\volume[1]{\gdef\@volume{#1}} +\gdef\@volume{11} + +\newcommand\pagerange[1]{\gdef\@pagerange{#1}} +\gdef\@pagerange{1--000} + +\newcommand\pubyear[1]{\def\@pubyear{#1}} +\edef\@pubyear{\number\year} + +\newcommand\journal[1]{\gdef\@journal{#1}} + +\newcommand\doi[1]{\gdef\@doi{10.1017/#1}} +\gdef\@doi{10.1017/S000000000000000X} + +\gdef\@journal{% + \vbox to 5.5\p@{\noindent + \parbox[t]{4.5in}{\normalfont\indexsize\baselineskip 9\p@ + {\itshape J.\ Fluid\ Mech.} (\@pubyear), {\itshape vol.} \@volume, + {\itshape pp.} \@pagerange.\quad \copyright\ \@pubyear\ Cambridge University + Press\\[2.5\p@] + DOI: \@doi\quad {Printed in the United Kingdom}}% + \vss}% +} +\gdef\@underjournal{% + \vbox to 5.5\p@{\noindent + \parbox[t]{4.5in}{\normalfont\indexsize{\itshape Under consideration + for publication in J.\ Fluid\ Mech.}\\[2.5\p@] + {\ \ }}% + \vss}% +} + +\def\footerflagdefns#1{\hbox to \hsize{\hfill\colorbox{mycol}{\color{white}\fontsize{14}{16}\bfseries\selectfont#1}\hfill}}% + +\def\absfooterflag{\footerflagdefns{Abstract must not spill onto p.2}}% + +\def\pagelimitfooter{\bgroup% +\ifnum\c@page=4\relax% +\footerflagdefns{Focus on Fluids articles must not exceed this page length}% +\else% +\ifnum\c@page=10\relax% +\footerflagdefns{Rapids articles must not exceed this page length}% +\fi\fi% +\egroup}% + +\def\volume#1{\gdef\@volume{#1}}\volume{0} +\def\issue#1{\gdef\@issue{#1}}\issue{0} +\def\cppagefont{\fontsize{10.24}{9}\selectfont} +\def\bibliofont{\fontsize{8.73}{10}\selectfont} +\def\bibls{\fontsize{7}{10}\selectfont} + +\def\ps@headings{\let\@mkboth\markboth + \def\@oddhead{\hfill{\itshape\@righttitle}\hfill}% \llap{\thepage}}% + \def\@evenhead{%\rlap{\thepage} + \hfill\itshape\@lefttitle\hfill}% + \def\@oddfoot {\hbox to \textwidth{\hfill{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}}}% + \def\@evenfoot{\hbox to \textwidth{{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}\hfill}} %\pagelimitfooter}% + \def\sectionmark##1{\markboth{##1}{}}% + \def\subsectionmark##1{\markright{##1}}% +} + +\usepackage{color} +\definecolor{mycol}{cmyk}{0,1,0,0} + +% \def\flmspecialinstruction#1{#1} +% \def\ps@spheadings{\let\@mkboth\markboth +% \def\@oddhead{\hfil{\itshape\@shorttitle}\hfil\llap{\thepage}}% +% \def\@evenhead{\rlap{\thepage}\hfil\itshape\@shortauthor\hfil}% +% \def\@oddfoot{\vbox{\vskip10pt\colorbox{mycol}{\textcolor{white}{\fontseries{b}\fontsize{14}{16}\selectfont \flmspecialinstruction}}}}% +% \def\@evenfoot{\vbox{\vskip10pt\colorbox{mycol}{\textcolor{white}{\fontseries{b}\fontsize{14}{16}\selectfont \flmspecialinstruction}}}}% +% \def\sectionmark##1{\markboth{##1}{}}% +% \def\subsectionmark##1{\markright{##1}}% +% } + +\def\ps@myheadings{\let\@mkboth\@gobbletwo + \def\@oddhead{\hfil{\itshape\rightmark}\hfil\llap{\thepage}}% + \def\@evenhead{\rlap{\thepage}\hfil\itshape\leftmark\hfil}% + \def\@oddfoot{\hbox to \textwidth{\hfill{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}}}% + \def\@evenfoot{\hbox to \textwidth{{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}\hfill}}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}% +} + +\ifCUPmtlplainloaded + \def\@j@urnal{\@journal} +\else + \def\@j@urnal{\@underjournal} +\fi + +\def\ps@titlepage{\leftskip\z@\let\@mkboth\@gobbletwo\vfuzz=5\p@ + \def\@oddhead{\vbox{\vspace*{-4pt}\hbox to \textwidth{\@j@urnal \hfill%\llap{\thepage} + }\par\vskip4pt% +\hbox to \textwidth{{\fboxsep0pt\fbox{\parbox{\textwidth}{\par\vskip2.7pc\centerline{Banner appropriate to article type will appear here in typeset article}\par\vskip2.7pc}}}} +}} + \def\@evenhead{\@j@urnal \hfil\llap{\thepage}}% + \def\@oddfoot{\hbox to \textwidth{\hfill{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}}} %\absfooterflag}% + \def\@evenfoot{\hbox to \textwidth{{\cppagefont\ifx\@volume\undefined\else\textbf{\@volume}\fi\ \ifx\@issue\undefined\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi1-\else\ifpaper A\else\ifrapid R\else\ifpersp P\else\iffof F\else X\fi\fi\fi\fi\@issue-\fi\thepage}\hfill}} %\absfooterflag}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}% +} + +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg {2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{2} + +\def\@dottedtocline#1#2#3#4#5{% FROM LATEX.LTX + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{\phantom{.}}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} + +\newcommand\contentsname{CONTENTS} + +\newcommand\tableofcontents{% + \@restonecolfalse + \if@twocolumn\@restonecoltrue\onecolumn\fi + \vskip 4\p@ \@plus .5\p@ + \centerline{\normalfont\scshape \contentsname}% + \vskip 3\p@ + \@starttoc{toc}% + \if@restonecol\twocolumn\fi \par\vspace{12\p@}% +} + +\newcommand*\l@section[2]{% + \ifnum \c@tocdepth >\z@ + \addpenalty{\@secpenalty}% + \@tempdima 1.5em% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth \normalfont\rmfamily \leavevmode + \advance\leftskip\@tempdima \hskip -\leftskip + {\normalfont\bfseries #1}\nobreak\hfil + \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \endgroup + \fi +} + +\newcommand*\l@subsection{\@dottedtocline{2}{2.5em}{2.3em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} + +\newif\if@restonecol +\newcommand\indexname{Index} + +\newenvironment{theindex} + {\section*{\indexname}% + \addcontentsline{toc}{section}{\indexname}% + \normalfont\footnotesize \parindent\z@ \parskip\z@ \@plus .1\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} + +\newcommand\@idxitem{\par\hangindent 1em\relax} +\newcommand\subitem{\@idxitem\hspace*{1em}} +\newcommand\subsubitem{\subitem} +\newcommand\indexspace{\par\vskip\baselineskip \relax} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width3pc + \kern3.6\p@} +\newcommand\@makefntext[1]{% + \parindent 1em% + \noindent + \hb@xt@1.8em{\hss\@makefnmark}#1} + + +%\renewcommand\footnoterule{\setcounter{footnote}\z@} +% \newcommand\@makempfntext[1]{\strut\@thefnmark\enskip #1} + +% \newcommand\@makefntext[1]{% +% \setbox\@tempboxa\hbox{\quad\@thefnmark\enskip #1}% +% \ifdim\wd\@tempboxa>\hsize +% \unhbox\@tempboxa +% \else +% \centerline{\unhbox\@tempboxa}% +% \fi +% } + +% \long\def\@mpfootnotetext#1{% FROM LATEX.LTX +% \global\setbox\@mpfootins\vbox{% +% \unvbox\@mpfootins +% \reset@font\footnotesize +% \hsize\columnwidth +% \@parboxrestore +% \protected@edef\@currentlabel +% {\csname p@mpfootnote\endcsname\@thefnmark}% +% \color@begingroup \centering +% \@makempfntext{% +% \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% +% \color@endgroup}% +% } + +\def\@fnsymbol#1{% MODIFIED IN LINE WITH LATEX.LTX + \ensuremath{\ifcase#1\or \dag\or \ddag\or \P\or \|\or + \dag\dag\or \ddag\ddag\or \P\P\or \|\| \else\@ctrerr\fi}% +} + +%\renewcommand\@makefnmark{\hbox{\@thefnmark}} +%\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}} +%\renewcommand\thempfootnote{\hbox{$\@fnsymbol\c@mpfootnote$}} + +\setcounter{topnumber}{3} +\renewcommand\topfraction{.9} +\setcounter{bottomnumber}{0} +\renewcommand\bottomfraction{.9} +\setcounter{totalnumber}{3} +\renewcommand\textfraction{.05} +\renewcommand\floatpagefraction{.9} +\setcounter{dbltopnumber}{3} +\renewcommand\dbltopfraction{.9} +\renewcommand\dblfloatpagefraction{.5} + +% \newif\ifrem@fullpt +% \newcommand\removefullpoint{\global\rem@fullpttrue} + +% \newif\ifbot@fig +% \newenvironment{bottomfigure}{\def\fps@figure{b}% +% \setcounter{bottomnumber}{1}% +% \global\bot@figtrue +% \@float{figure}\fstyle@figure} +% {\end@float} + +\usepackage[format=plain,margin=0pt,width=\textwidth,justification=justified,labelfont=small,textfont=footnotesize,labelsep=period,singlelinecheck=true]{caption} % hang,center, +%\setlength{\captionmargin}{30pt} + +\DeclareCaptionStyle{capcenter}% +%[justification=centering]% singlelinecheck=off, +{justification=centering,%margin={10mm,10mm}} +format=plain,margin=0pt,width=\textwidth,labelfont=small,textfont=footnotesize,labelsep=period,singlelinecheck=true} % small, +%\captionsetup{style=capcenter} + +% \def\mycaptionfont{\fontsize{8.7bp}{10}\selectfont} +% \captionsetup{font={\mycaptionfont}} + +%\long\def\@makecaption\normalfont%{% + % \ifbot@fig \rule{\textwidth}{.25pt}\fi +% \vskip 5\p@ \@plus .4\p@ \@minus .4\p@ + % \begingroup + % \small\setbox\@tempboxa\hbox{{\normalfont\scshape + % #1\ifrem@fullpt\else .\fi} #2}% + %\ifdim \wd\@tempboxa >\tw@\hsize + % \unhbox\@tempboxa\par + % \else + %{\centering \unhbox\@tempboxa\par}% + %\fi + % \endgroup + %\global\rem@fullptfalse + % \global\bot@figfalse +%} + +\newcounter{table} +\renewcommand\thetable{\@arabic\c@table} +\def\fps@table{tp} +\def\ftype@table{1} +\def\ext@table{lot} +\newcommand\tablename{Table} +\def\fnum@table{\tablename~\thetable} + +\newif\iffollowon +\newif\ifrmrule + +%\newcommand\followon{\global\followontrue} +%\newcommand\norule{\global\rmruletrue} + +\newenvironment{table} + {\@float{table}\fstyle@table + \iffollowon \else \vspace*{9.5\p@}\fi + \global\followonfalse + \rule{\textwidth}{.5\p@}\vskip\floatsep\relax} + {\ifrmrule \global\rmrulefalse \else \rule{\textwidth}{.5\p@}\fi + \end@float} + +\newenvironment{table*}{\@dblfloat{table}\fstyle@table}{\end@dblfloat} +%\newenvironment{plaintable}{\@float{table}\fstyle@table}{\end@float} + +\def\fstyle@table{\normalfont\footnotesize\rmfamily} +\def\fjust@table{\centering} +\def\fcapjust@table{\centering} +\def\fcapsize@table{\normalfont\small\scshape} +\def\fcapstyle@table{\normalfont\small\rmfamily} + +\newcounter{figure} +\renewcommand\thefigure{\@arabic\c@figure} +\def\fps@figure{tp} +\def\ftype@figure{2} +\def\ext@figure{lof} +\newcommand\figurename{Figure} +\def\fnum@figure{\figurename~\thefigure} + +% \newenvironment{figure}{\@float{figure}\fstyle@figure}{\end@float} +% \newenvironment{figure*}{\@dblfloat{figure}\fstyle@figure}{\end@dblfloat} + +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} + +%\def\fstyle@figure{\normalfont\small\rmfamily} +%\def\fjust@figure{\centering} +%\def\fcapjust@figure{\centering} +%\def\fcapsize@figure{\normalfont\small\scshape} +%\def\fcapstyle@figure{\normalfont\small\rmfamily} + +% \newcommand\smallls{\kern.12em\relax} +% \newcommand\ls{\kern.15em\relax} +% \newcommand\ns{\kern.5em\relax} + +%\renewcommand{\thefootnote}{\mbox{$\@fnsymbol\c@footnote$}} + +\renewcommand\hline{% + \noalign{\ifnum0=`}\fi \vskip 6\p@ + \hrule \@height \arrayrulewidth \vskip 6\p@ + \futurelet \@tempa\@xhline +} + +\renewcommand\@xhline{% + \ifx\@tempa\hline \vskip -12\p@ \vskip\doublerulesep\fi \ifnum0=`{\fi}% +} + +\newenvironment{acknowledgments} + {\par\vskip 10\p@ \@plus 1\p@ \@minus 1\p@}{\par} +\let\acknowledgements\acknowledgments +\let\endacknowledgements\endacknowledgments + +\newcommand\today{} +\edef\today{\number\day\ \ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December + \fi \ \number\year} + +\newif\if@altcite +\renewcommand\@biblabel[1]{}% FROM LATEX.LTX +\newcommand\newblock{\hskip .11em \@plus .33em \@minus .07em\relax} +%\newcommand\bibls{\kern.065em\relax} +%\newcommand\bibls{\kern.065em\relax} + +\newenvironment{thebibliography}[1]{% +% \par\vskip 20\p@ \@plus 1\p@ \@minus 1\p@ + %\ifflm@rapids\section*{References}\else +% \centerline{\bibliofont R{\bibls EFERENCES}\vspace*{-6pt}}%\fi% +\bibsection% +% \nobreak + %\vskip 4\p@ \@plus .5\p@ \@minus .5\p@ + %\nobreak + \list{}{\labelwidth\z@ \leftmargin 1em \itemindent -1em \itemsep \z@}% + \normalfont\bibliofont\parindent\z@ + \parskip\z@%\@plus .1\p@ + \relax + \sloppy\clubpenalty\z@ \widowpenalty\@M + \sfcode`\.\@m\relax} + {\endlist} + + +\let\JFMthebib\thebibliography +\let\JFMendthebib\endthebibliography + +\DeclareRobustCommand\cite{% FROM LATEX.LTX + \@ifnextchar [{\@tempswatrue\global\@altcitetrue\@citex} + {\@tempswafalse\global\@altcitefalse\@citex[]}} + +\def\@citex[#1]#2{% FROM LATEX.LTX + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{,\penalty\@m\ }% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {{\csname b@\@citeb\endcsname}}}}{#1}} + +\renewcommand\@cite[2]{% FROM LATEX.LTX + {\if@altcite #2\else #1\fi}\global\@altcitefalse} + +\newif\iffontfound +\newcommand\checkfont[1]{% + \batchmode + \font\test=#1\relax + \errorstopmode + \fontfoundfalse + \ifx\test\nullfont \else \fontfoundtrue\fi +} + +\pagestyle{headings} +\pagenumbering{arabic} +\frenchspacing +\ifCUPmtlplainloaded + \setlength\oddsidemargin\z@ + \setlength\evensidemargin\z@ + \setlength\topmargin\z@ +\fi +\if@referee + \renewcommand\baselinestretch{2}\raggedbottom +\else + \flushbottom +\fi + +% \if@index +% \newcommand\indextitlesize{\@setfontsize\indextitlesize\@xiipt{18}} +% +% \renewcommand\ls{\kern.10em\relax}%.15 +% \renewcommand\ns{\kern.44em\relax}% .5 +% +% \def\@maketitle#1{% +% \newpage +% \vspace*{8\p@}% +% {\centering \sloppy +% {\normalfont\indextitlesize\fontswitch\bfseries \@title \par}% +% \vskip 14\p@ \@plus 2\p@ \@minus 1\p@ +% {\normalfont\large\fontswitch\bfseries\baselineskip=12\p@ +% % By\ns \uppercase{\@author} +% \par}% +% \vskip 4\p@ \@plus 1\p@ +% {\normalfont\small \@affiliation \par}% +% \vskip 8\p@ \@plus 2\p@ \@minus 1\p@ +% % {\normalfont\small (Received \@date)}% +% \par}% +% \vspace*{-14\p@ \@plus 2\p@ \@minus 1\p@} +% } +% \renewcommand\journal[1]{\gdef\@journal{#1}} +% \gdef\@journal{% +% \vbox to 5.5\p@{\noindent +% \parbox[t]{4.5in}{\normalfont\indexsize\baselineskip 9\p@ +% \textsc{Journal of Fluid Mechanics}\hfill\textsc{Volume 423\quad\date}\\%[2.5\p@] +% {} +% }\vss}% +% } +% +% % \def\ps@titlepage{\leftskip\z@\let\@mkboth\@gobbletwo\vfuzz=5\p@ +% % \def\@oddhead{\small\textsc{J\ls o\ls u\ls r\ls n\ls a\ls l\ns +% % o\ls f\ns +% % F\ls l\ls u\ls i\ls d\ns +% % M\ls e\ls c\ls h\ls a\ls n\ls i\ls c\ls s}% +% % \hfill\textsc{V\ls o\ls l\ls u\ls m\ls e\ns \@volume\quad 25\ns N\ls o\ls v\ls e\ls m\ls b\ls e\ls r\ns 2000}}% +% % \def\@evenhead{\@j@urnal}% +% % \def\@oddfoot{}% +% % \def\@evenfoot{}% +% % \def\sectionmark##1{}% +% % \def\subsectionmark##1{}% +% % } +% +% \renewcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\fontswitch\bfseries #1} +% \renewenvironment{description} +% {\list{}{\parsep 4pt\small\labelwidth\z@\labelsep 0.5em +% \leftmargin 18pt\itemindent-\leftmargin +% \let\makelabel\descriptionlabel}} +% {\endlist} +% +% % \renewcommand\title{\@ifnextchar [{\@titletwo}{\@titleone}} +% % \def\@titletwo[#1]#2{\gdef\@title{#2}\gdef\@shorttitle{#1}} +% % \def\@titleone#1{\gdef\@title{#1}\gdef\@shorttitle{#1}} +% % \gdef\@title{\mbox{}} +% \fi% end of \if@index + + +%% Extracted from old version of jfm-instructions.tex +% For units of measure +\newcommand\dynpercm{\nobreak\mbox{$\;$dyn\,cm$^{-1}$}} +\newcommand\cmpermin{\nobreak\mbox{$\;$cm\,min$^{-1}$}} + +% Various bold symbols +\providecommand\bnabla{\boldsymbol{\nabla}} +\providecommand\bcdot{\boldsymbol{\cdot}} +\newcommand\biS{\boldsymbol{S}} +\newcommand\etb{\boldsymbol{\eta}} + +% For multiletter symbols +\newcommand\Real{\mbox{Re}} % cf plain TeX's \Re and Reynolds number +\newcommand\Imag{\mbox{Im}} % cf plain TeX's \Im +\newcommand\Rey{\mbox{\textit{Re}}} % Reynolds number +\newcommand\Pran{\mbox{\textit{Pr}}} % Prandtl number, cf TeX's \Pr product +\newcommand\Pen{\mbox{\textit{Pe}}} % Peclet number +\newcommand\Ai{\mbox{Ai}} % Airy function +\newcommand\Bi{\mbox{Bi}} % Airy function + +%Bessel function +\newcommand\rmJ{{\rm J}} +\newcommand\rmY{{\rm Y}} +\newcommand\rmK{{\rm K}} +\newcommand\rmI{{\rm I}} + +\newcommand\ssC{\mathsf{C}} % for sans serif C +\newcommand\sfsP{\mathsfi{P}} % for sans serif sloping P +\newcommand\slsQ{\mathsfbi{Q}} % for sans serif bold-sloping Q + +% Hat position +\newcommand\hatp{\skew3\hat{p}} % p with hat +\newcommand\hatR{\skew3\hat{R}} % R with hat +\newcommand\hatRR{\skew3\hat{\hatR}} % R with 2 hats +\newcommand\doubletildesigma{\skew2\tilde{\skew2\tilde{\Sigma}}} +% italic Sigma with double tilde + +% array strut to make delimiters come out right size both ends +\newsavebox{\astrutbox} +\sbox{\astrutbox}{\rule[-5pt]{0pt}{20pt}} +\newcommand{\astrut}{\usebox{\astrutbox}} + +\newcommand\GaPQ{\ensuremath{G_a(P,Q)}} +\newcommand\GsPQ{\ensuremath{G_s(P,Q)}} +\newcommand\p{\ensuremath{\partial}} +\newcommand\tti{\ensuremath{\rightarrow\infty}} +\newcommand\kgd{\ensuremath{k\gamma d}} +\newcommand\shalf{\ensuremath{{\scriptstyle\frac{1}{2}}}} +\newcommand\sh{\ensuremath{^{\shalf}}} +\newcommand\smh{\ensuremath{^{-\shalf}}} +\newcommand\squart{\ensuremath{{\textstyle\frac{1}{4}}}} +\newcommand\thalf{\ensuremath{{\textstyle\frac{1}{2}}}} +\newcommand\Gat{\ensuremath{\widetilde{G_a}}} +\newcommand\ttz{\ensuremath{\rightarrow 0}} +\newcommand\ndq{\ensuremath{\frac{\mbox{$\partial$}}{\mbox{$\partial$} n_q}}} +\newcommand\sumjm{\ensuremath{\sum_{j=1}^{M}}} +\newcommand\pvi{\ensuremath{\int_0^{\infty}% + \mskip \ifCUPmtlplainloaded -30mu\else -33mu\fi -\quad}} + +\newcommand\etal{\mbox{\textit{et al.}}} +\newcommand\etc{etc.\ } +\newcommand\eg{e.g.\ } + + +% See if the author has the AMS 'amsbsy' package installed: If they have, +% use it to provide better bold math support (with \boldsymbol). + +\ifCUPmtlplainloaded \else + \IfFileExists{amsbsy.sty} + {\typeout{^^JFound the 'amsbsy' package on the system, using it.^^J}% + \usepackage{amsbsy}} + {\providecommand\boldsymbol[1]{\mbox{\boldmath $##1$}}} +\fi + +% See if the author has AMS Euler fonts installed: If they have, attempt +% to use the 'upmath' package to provide upright math. +\ifCUPmtlplainloaded \else + \checkfont{eurm10} + \iffontfound + \IfFileExists{upmath.sty} + {\typeout{^^JFound AMS Euler Roman fonts on the system, + using the 'upmath' package.^^J}% + \usepackage{upmath}} + {\typeout{^^JFound AMS Euler Roman fonts on the system, but you + dont seem to have the}% + \typeout{'upmath' package installed. JFM.cls can take advantage + of these fonts,^^Jif you use 'upmath' package.^^J}% + \providecommand\upi{\pi}% + } + \else + \providecommand\upi{\pi}% + \fi +\fi + + + +% See if the author has AMS symbol fonts installed: If they have, attempt +% to use the 'amssymb' package to provide the AMS symbol characters. + +\ifCUPmtlplainloaded \else + \checkfont{msam10} + \iffontfound + \IfFileExists{amssymb.sty} + {\typeout{^^JFound AMS Symbol fonts on the system, using the + 'amssymb' package.^^J}% + \usepackage{amssymb}% +% \let\le=\leqslant \let\leq=\leqslant +% \let\ge=\geqslant \let\geq=\geqslant + }{} + \fi +\fi + +% Extras + +\hyphenpenalty 9500 +%\emergencystretch 20pt +\tolerance=300 + +\def\aff#1{\ignorespaces\textsuperscript{#1}} +\def\aff@inst#1{\par\vskip3pt\textsuperscript{#1}\unskip\ignorespaces} +\def\corresau#1{\gdef\@corresau{\textbf{Corresponding author:} #1}}\corresau{xxxx} +\def\email#1{\href{emailto:#1}{#1}} + +\def\corresp#1{\unskip\thanks{#1}} +\def\aunote#1{\unskip\thanks{#1}} + +% Figure caption legends: +\newcommand{\opensquare}{\mbox{$\square$}} +\newcommand{\opentriangle}{\mbox{$\vartriangle$}} +\newcommand{\opentriangledown}{\mbox{$\triangledown$}} +\newcommand{\opendiamond}{\mbox{$\lozenge$}} +\newcommand{\fullsquare}{\mbox{$\blacksquare$}} +\newcommand{\fulldiamond}{\mbox{$\blacklozenge$}} +\newcommand{\fullstar}{\mbox{$\bigstar$}} +\newcommand{\fulltriangle}{\mbox{$\blacktriangle$}} +\let\fulltri=\fulltriangle +\newcommand{\fulltriangledown}{\mbox{$\blacktriangledown$}} +\let\fulltridown=\fulltriangledown +\newcommand{\opencirc}{\mbox{\Large$\circ$}} +\newcommand{\opensqr}{\mbox{$\square$}} +\newcommand{\opentri}{\mbox{$\triangle$}} +\newcommand{\opentridown}{\mbox{$\bigtriangledown$}} +%\newcommand{\opendiamond}{\mbox{$\diamondsuit$}} +\newcommand{\fullcirc}{\mbox{{\Large$\bullet$}}} +\newcommand{\fullsqr}{\,\vrule height5pt depth0pt width5pt} +\newcommand{\dotted}{\protect\mbox{${\mathinner{\cdotp\cdotp\cdotp\cdotp\cdotp\cdotp}}$}} +\newcommand{\dashed}{\protect\mbox{-\ -\ -\ -}} +\newcommand{\broken}{\protect\mbox{-- -- --}} +\newcommand{\longbroken}{\protect\mbox{--- --- ---}} +\newcommand{\chain}{\protect\mbox{--- $\cdot$ ---}} +\newcommand{\dashddot}{\protect\mbox{--- $\cdot$ $\cdot$ ---}} +\newcommand{\full}{\protect\mbox{------}} + +\usepackage{newtxtext} +\usepackage{newtxmath} + +% For sans serif characters: +% The following macros are setup in JFM.cls for sans-serif fonts in text +% and math. If you use these macros in your article, the required fonts +% will be substitued when your article is typeset by the typesetter. +% +% \textsfi, \mathsfi : sans-serif slanted +% \textsfb, \mathsfb : sans-serif bold +% \textsfbi, \mathsfbi : sans-serif bold slanted (doesnt exist in CM fonts) +% +% For san-serif roman use \textsf and \mathsf as normal. +\iflineno\AtBeginDocument{\usepackage{lineno-FLM}}\fi% 3-8-20 +% Greek letters +\let\rmGamma \Gamma +\let\rmDelta \Delta +\let\rmTheta \Theta +\let\rmLambda \Lambda +\let\rmXi \Xi +\let\rmPi \Pi +\let\rmSigma \Sigma +\let\rmUpsilon\Upsilon +\let\rmPhi \Phi +\let\rmPsi \Psi +\let\rmOmega \Omega + +\def\Gamma {\varGamma} +\def\Delta {\varDelta} +\def\Theta {\varTheta} +\def\Lambda {\varLambda} +\def\Xi {\varXi} +\def\Pi {\varPi} +\def\Sigma {\varSigma} +\def\Upsilon{\varUpsilon} +\def\Phi {\varPhi} +\def\Psi {\varPsi} +\def\Omega {\varOmega} + +\let\mathbi\boldsymbol + +% %%%%%% 8-8-20 %% Introduced for back section with small font size +% \newcounter{savesecnumdepth} +% \providecommand{\backsectionname}{Acknowledgements} +% \newcommand{\backsection}[2][\backsectionname]{\begingroup\par% +% \small% +% \setcounter{savesecnumdepth}{\value{secnumdepth}}% +% \setcounter{secnumdepth}{0}% +% \vskip6pt +% \noindent \textbf{#1.} #2\par% +% \setcounter{secnumdepth}{\value{savesecnumdepth}}% +% \endgroup} +% %%%%%% + +\def\bmheadname{\textcolor{red}{Keep your custom head name.}} +\def\ackheadfont{\fontfamily{\rmdefault}\fontsize{8.7bp}{10}\selectfont\bfseries} +\def\ackfont{\fontsize{8.7bp}{10}\selectfont} + +\newenvironment{bmhead}[1][\bmheadname]{\@par\addvspace{8pt}\noindent{\ackheadfont {#1}}\ackfont\ }{\@par\addvspace{7pt}} + +\def\lefttitle#1{\gdef\@lefttitle{#1}}%\lefttitle{xxxx} + +\usepackage[authoryear]{natbib} +%\setlength{\bibhang}{0em} + +\@ifundefined{chapter}{% + \renewcommand\bibsection{% + \subsection*{\reset@font\bibliofont R{\bibls EFERENCES}\@mkboth{{\refname}}{{\refname}}}% + }% +}{% + \@ifxundefined\NAT@sectionbib{% + \renewcommand\bibsection{% + \chapter*{\bibname\@mkboth{{\bibname}}{{\bibname}}}% + }% + }{% + \renewcommand\bibsection{% + \section*{References\ifx\@mkboth\@gobbletwo\else\markright{{\bibname}}\fi}% + }% + }% +} + + +\endinput + +%%% Date: 07-Feb-2025 +%%% Created this template based on the Proof layout with default fonts. + +%%% Date 18-Feb-2025 +%%% loaded amssymb package within the class file. + +% end of file jfm.cls diff --git a/docs/JFM_WYQ/My_JFM/img/Fig1_setting.pdf b/docs/JFM_WYQ/My_JFM/img/Fig1_setting.pdf new file mode 100644 index 0000000..3af92c4 Binary files /dev/null and b/docs/JFM_WYQ/My_JFM/img/Fig1_setting.pdf differ diff --git a/docs/JFM_WYQ/My_JFM/img/Fig2_drl.png b/docs/JFM_WYQ/My_JFM/img/Fig2_drl.png new file mode 100644 index 0000000..c7b151f Binary files /dev/null and b/docs/JFM_WYQ/My_JFM/img/Fig2_drl.png differ diff --git a/docs/JFM_WYQ/My_JFM/img/Fig3_act_func.pdf b/docs/JFM_WYQ/My_JFM/img/Fig3_act_func.pdf new file mode 100644 index 0000000..db88234 Binary files /dev/null and b/docs/JFM_WYQ/My_JFM/img/Fig3_act_func.pdf differ diff --git a/docs/JFM_WYQ/My_JFM/jfm.bib b/docs/JFM_WYQ/My_JFM/jfm.bib new file mode 100644 index 0000000..af2dcd0 --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/jfm.bib @@ -0,0 +1,210 @@ +@article{Urzhumov2012, + author = {Urzhumov, Y. A. and Smith, D. R.}, + title = {Fluid flow control with transformation media}, + journal = {Phys. Rev. Lett.}, + volume = {107}, + pages = {074501}, + year = {2011} +} + +@article{Rabault2019, + author = {Rabault, J. and Kuchta, M. and Jensen, A. and R{\'e}glade, U. and Cerardi, N.}, + title = {Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control}, + journal = {J. Fluid Mech.}, + volume = {865}, + pages = {281--302}, + year = {2019}, + doi = {10.1017/jfm.2019.62} +} + +@article{Paris2021, + author = {Paris, R. and Beneddine, S. and Dandois, J.}, + title = {Robust flow control and optimal sensor placement using deep reinforcement learning}, + journal = {J. Fluid Mech.}, + volume = {913}, + pages = {A25}, + year = {2021}, + doi = {10.1017/jfm.2020.1170} +} + +@article{Tang2020, + author = {Tang, H. and Rabault, J. and Kuhnle, A. and Wang, Y. and Wang, T.}, + title = {Robust active flow control over a range of {R}eynolds numbers using an artificial neural network trained through deep reinforcement learning}, + journal = {Phys. Fluids}, + volume = {32}, + pages = {053605}, + year = {2020}, + doi = {10.1063/5.0006492} +} + +@article{CornejoMaceda2021, + author = {Cornejo Maceda, G. Y. and Li, Y. and Lusseyran, F. and Morzy{\'n}ski, M. and Noack, B. R.}, + title = {Stabilization of the fluidic pinball with gradient-enriched machine learning control}, + journal = {J. Fluid Mech.}, + volume = {917}, + pages = {A42}, + year = {2021}, + doi = {10.1017/jfm.2021.301} +} + +@article{Deng2020, + author = {Deng, N. and Noack, B. R. and Morzy{\'n}ski, M. and Pastur, L. R.}, + title = {Low-order model for successive bifurcations of the fluidic pinball}, + journal = {J. Fluid Mech.}, + volume = {884}, + pages = {A37}, + year = {2020}, + doi = {10.1017/jfm.2019.959} +} + +@article{Loiseau2018Galerkin, + author = {Loiseau, J.-C. and Brunton, S. L.}, + title = {Constrained sparse {G}alerkin regression}, + journal = {J. Fluid Mech.}, + volume = {838}, + pages = {42--67}, + year = {2018}, + doi = {10.1017/jfm.2017.823} +} + +@article{Loiseau2018, + author = {Loiseau, J.-C. and Noack, B. R. and Brunton, S. L.}, + title = {Sparse reduced-order modelling: sensor-based dynamics to full-state estimation}, + journal = {J. Fluid Mech.}, + volume = {844}, + pages = {459--490}, + year = {2018}, + doi = {10.1017/jfm.2018.147} +} + +@article{Brunton2016, + author = {Brunton, S. L. and Proctor, J. L. and Kutz, J. N.}, + title = {Discovering governing equations from data by sparse identification of nonlinear dynamical systems}, + journal = {Proc. Natl Acad. Sci. USA}, + volume = {113}, + pages = {3932--3937}, + year = {2016}, + doi = {10.1073/pnas.1517384113} +} + +@article{Gautier2015, + author = {Gautier, N. and Aider, J.-L. and Duriez, T. and Noack, B. R. and Segond, M. and Abel, M. W.}, + title = {Closed-loop separation control using machine learning}, + journal = {J. Fluid Mech.}, + volume = {770}, + pages = {442--457}, + year = {2015} +} + +@article{Li2017, + author = {Li, R. and Noack, B. R. and Cordier, L. and Bor{\'e}e, J. and Harambat, F.}, + title = {Drag reduction of a car model by linear genetic programming control}, + journal = {Exp. Fluids}, + volume = {58}, + pages = {103}, + year = {2017} +} + +@article{Schulman2017, + author = {Schulman, J. and Wolski, F. and Dhariwal, P. and Radford, A. and Klimov, O.}, + title = {Proximal policy optimization algorithms}, + journal = {arXiv preprint arXiv:1707.06347}, + year = {2017} +} + +@article{Cranmer2023, + author = {Cranmer, M.}, + title = {Interpretable machine learning for science with {PySR} and {SymbolicRegression.jl}}, + journal = {arXiv preprint arXiv:2305.01582}, + year = {2023} +} + +@article{Boree2003, + author = {Bor{\'e}e, J.}, + title = {Extended proper orthogonal decomposition: a tool to analyse correlated events in turbulent flows}, + journal = {Exp. Fluids}, + volume = {35}, + pages = {188--192}, + year = {2003} +} + +@article{Williamson1996, + author = {Williamson, C. H. K.}, + title = {Vortex dynamics in the cylinder wake}, + journal = {Annu. Rev. Fluid Mech.}, + volume = {28}, + pages = {477--539}, + year = {1996}, + doi = {10.1146/annurev.fl.28.010196.002401} +} + +@article{Brunton2020, + author = {Brunton, S. L. and Noack, B. R. and Koumoutsakos, P.}, + title = {Machine learning for fluid mechanics}, + journal = {Annu. Rev. Fluid Mech.}, + volume = {52}, + pages = {477--508}, + year = {2020}, + doi = {10.1146/annurev-fluid-010719-060214} +} + +@article{Raibaudo2020, + author = {Raibaudo, C. and Zhong, P. and Noack, B. R. and Martinuzzi, R. J.}, + title = {Machine learning strategies applied to the control of a fluidic pinball}, + journal = {Phys. Fluids}, + volume = {32}, + pages = {015108}, + year = {2020}, + doi = {10.1063/1.5127202} +} + +@article{Li2022, + author = {Li, S. and Li, W. and Noack, B. R.}, + title = {Machine-learned control-oriented flow estimation for multi-actuator multi-sensor systems exemplified for the fluidic pinball}, + journal = {J. Fluid Mech.}, + year = {2022}, + doi = {10.1017/jfm.2022.908} +} + +@article{Marra2024, + author = {Marra, L. and Cornejo Maceda, G. Y. and Meil{\'a}n-Vila, A. and Guerrero, V. and Rashwan, S. and Noack, B. R. and Discetti, S. and Ianiro, A.}, + title = {Actuation manifold from snapshot data}, + journal = {J. Fluid Mech.}, + year = {2024}, + doi = {10.1017/jfm.2024.593} +} + +@article{Jin2021, + author = {Jin, B. and Illingworth, S. and Sandberg, R.}, + title = {Optimal sensor and actuator placement for feedback control of vortex shedding}, + journal = {J. Fluid Mech.}, + year = {2021}, + doi = {10.1017/jfm.2021.948} +} + +@article{Gong2020, + author = {Gong, J. and Monty, J. and Illingworth, S.}, + title = {Model-based estimation of vortex shedding in unsteady cylinder wakes}, + journal = {Phys. Rev. Fluids}, + volume = {5}, + pages = {023901}, + year = {2020}, + doi = {10.1103/PhysRevFluids.5.023901} +} + +@article{Nair2021, + author = {Nair, A. G. and Taira, K. and Brunton, B. W. and Brunton, S. L.}, + title = {Phase-based control of periodic flows}, + journal = {J. Fluid Mech.}, + year = {2021}, + doi = {10.1017/jfm.2021.735} +} + +@article{Ishar2019, + author = {Ishar, R. and Kaiser, E. and Morzy{\'n}ski, M. and Fernex, D. and Semaan, R. and Albers, M. and Meysonnat, P. and Noack, B. R.}, + title = {Metric for attractor overlap}, + journal = {J. Fluid Mech.}, + year = {2019}, + doi = {10.1017/jfm.2019.447} +} + diff --git a/docs/JFM_WYQ/My_JFM/jfm.bst b/docs/JFM_WYQ/My_JFM/jfm.bst new file mode 100644 index 0000000..cd345d0 --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/jfm.bst @@ -0,0 +1,1659 @@ +%% v1.0 (SGLS) 12/97 +% Stefan Llewellyn Smith, sgls1@damtp.cam.ac.uk +% See readme in jfm style distribution. +%% +%%v1.1 revised 12/2005 to fix second initial problem, as suggested by +%%Christian Schoof +%% +%% This is file `jfmraw.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `,ay,nat,vonx,nm-rev,nmft-sc,dt-beg,yr-blk,yrp-x,note-yr,thtit-a,vol-bf,vnum-sp,volp-com,jnm-x,add-pub,pre-edn,edby-par,edbyx,blk-tit,pp,ed,abr,ord,xlab-it,amper,and-xcom,etal-it') +%% ---------------------------------------- +%% *** JFM basic style *** +%% + %------------------------------------------------------------------- + % The original source file contains the following version information: + % \ProvidesFile{merlin.mbs}[1997/06/09 3.83 (PWD)] + % + % NOTICE: + % This file may be used for non-profit purposes. + % It may not be distributed in exchange for money, + % other than distribution costs. + % + % The author provides it `as is' and does not guarantee it in any way. + % + % Copyright (C) 1994-97 Patrick W. Daly + % (C) 1997 Stefan G. Llewellyn Smith + %------------------------------------------------------------------- + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \cite{key} ==>> Jones et al. (1990) + % \cite[]{key} ==>> (Jones et al., 1990) + % \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \cite[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \cite[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} Jones et al. + % \citefullauthor{key} Jones, Baker, and Smith + % \citeyear{key} 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + eprint + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "\/}" * } + if$ +} + +FUNCTION {cmd@author} +{ duplicate$ empty$ + { pop$ "" } + { "\au{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@editor} +{ duplicate$ empty$ + { pop$ "" } + { "\ed{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@year} +{ duplicate$ empty$ + { pop$ "" } + { " \yr{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@atitle} +{ duplicate$ empty$ + { pop$ "" } + { " \at{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@jtitle} +{ duplicate$ empty$ + { pop$ "" } + { " \jt{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@bktitle} +{ duplicate$ empty$ + { pop$ "" } + { " \bt{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@seriestitle} +{ duplicate$ empty$ + { pop$ "" } + { " \st{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@bvolume} +{ duplicate$ empty$ + { pop$ "" } + { " \bvol{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@volume} +{ duplicate$ empty$ + { pop$ "" } + { " \vol{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@pages} +{ duplicate$ empty$ + { pop$ "" } + { " \pg{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@publisher} +{ duplicate$ empty$ + { pop$ "" } + { " \publ{" swap$ * "}" * } + if$ +} + +FUNCTION {cmd@arxiv} +{ duplicate$ empty$ + { pop$ "" } + { " \arxiv{arXiv: " swap$ * "}" * } + if$ +} + +FUNCTION {cmd@org} +{ duplicate$ empty$ + { pop$ "" } + { " \org{" swap$ * "}" * } + if$ +} + + +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "{\bf " swap$ * "}" * } + if$ +} + +FUNCTION {scaps} +{ duplicate$ empty$ + { pop$ "" } + { "{\sc " swap$ * "}" * } + if$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.editors} +{ "ed." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "PhD thesis" } + +FUNCTION {bbl.first} +{ "1st" } + +FUNCTION {bbl.second} +{ "2nd" } + +FUNCTION {bbl.third} +{ "3rd" } + +FUNCTION {bbl.fourth} +{ "4th" } + +FUNCTION {bbl.fifth} +{ "5th" } + +FUNCTION {bbl.st} +{ "st" } + +FUNCTION {bbl.nd} +{ "nd" } + +FUNCTION {bbl.rd} +{ "rd" } + +FUNCTION {bbl.th} +{ "th" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +FUNCTION {eng.ord} +{ duplicate$ "1" swap$ * + #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ + duplicate$ "1" = + { pop$ bbl.st * } + { duplicate$ "2" = + { pop$ bbl.nd * } + { "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}{, ff}" format.name$ cmd@author 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + t "others" = + { " " * "et~al." emphasize * } + { " \& " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.names.ed} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + t "others" = + { " " * "et~al." emphasize * } + { " \& " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { + author format.names scaps + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { + editor format.names scaps + editor num.names$ #1 > + { ", " * bbl.editors * } + { ", " * bbl.editor * } + if$ + } + if$ +} + +FUNCTION {format.in.editors} +{ editor empty$ + { "" } + { editor format.names.ed cmd@editor + } + if$ +} + +FUNCTION {format.note} +{ note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ + } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + t "others" = + { " " * "et~al." emphasize * } + { " \& " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in capitalize + " " * } + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" } + 'skip$ + if$ + extra.label * + before.all 'output.state := + "" swap$ * cmd@year +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +% Changed (SGLS) +% Notes swap$ fudge +{ volume empty$ + { "" } + { series empty$ + { "" } + { series cmd@seriestitle } + if$ + swap$ bbl.volume volume tie.or.space.connect output cmd@volume + } + if$ +} +%{ volume empty$ +% { "" } +% { bbl.volume volume tie.or.space.connect +% series empty$ +% 'skip$ +% { bbl.of space.word * series emphasize * } +% if$ +% "volume and number" number either.or.check +% } +% if$ +%} + +FUNCTION {format.number.series} +% Changed (SGLS) +{ + volume empty$ + { series empty$ + { "" + number empty$ + 'skip$ + { "there's a number but no series in " cite$ * warning$ } + if$ + } + { series emphasize " " * number *} + if$ + } + { "" } + if$ +} +%{ volume empty$ +% { number empty$ +% { series field.or.null } +% { output.state mid.sentence = +% { bbl.number } +% { bbl.number capitalize } +% if$ +% number tie.or.space.connect +% series empty$ +% { "there's a number but no series in " cite$ * warning$ } +% { bbl.in space.word * series * } +% if$ +% } +% if$ +% } +% { "" } +% if$ +%} + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ edition extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s eng.ord 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition "l" change.case$ " " * bbl.edition * } + { convert.edition "t" change.case$ " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.pages pages n.dashify tie.or.space.connect } + { bbl.page pages tie.or.space.connect } + if$ + cmd@pages + } + if$ +} + +FUNCTION {format.journal.pages} +{ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * pages n.dashify cmd@pages * } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null +% bolden + cmd@bvolume + number empty$ + 'skip$ + { + "~(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + format.journal.pages +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +% Changed to get edition after booktitle (SGLS) +% Notes swap$ fudge +{ booktitle empty$ + { "" } + { word.in booktitle emphasize * + edition empty$ + 'skip$ + { swap$ format.edition output } + if$ + editor empty$ + { "" * } + {" (" * + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } + if$ + * + " " * + format.in.editors * + ")" * + } + if$ + } + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep emphasize } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + word.in + } + { bbl.volume capitalize + volume tie.or.space.connect + bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + +FUNCTION {format.publisher} +{ publisher empty$ + { "empty publisher in " cite$ * warning$ } + 'skip$ + if$ + "" + address empty$ publisher empty$ and + 'skip$ + { + address empty$ + 'skip$ + { address * } + if$ + publisher empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + publisher * + } + if$ + cmd@publisher + } + if$ + output +} + +FUNCTION {format.eprint} +{ eprint empty$ + { "" } + { ", " * eprint cmd@arxiv * ""} + if$ +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check cmd@atitle + new.sentence + crossref missing$ + { journal cmd@jtitle +% emphasize + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + format.note output + format.eprint output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check +% Added edition after title (SGLS) + format.edition output + crossref missing$ + { format.bvolume output + new.sentence + format.number.series output +% format.edition output + new.sentence + format.publisher + } + { + new.sentence + format.book.crossref output.nonnull + } + if$ + format.note output + format.eprint output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + howpublished output + address output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check +% Added edition after title (SGLS) + format.edition output + crossref missing$ + { + format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.sentence + format.number.series output +% format.edition output + new.sentence + format.publisher + } + { + format.chapter.pages "chapter and pages" output.check + new.sentence + format.book.crossref output.nonnull + } + if$ + format.note output + format.eprint output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check cmd@atitle + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check cmd@bktitle + format.bvolume output + format.number.series output +% format.edition output + format.chapter.pages output + new.sentence + format.publisher + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.note output + format.eprint output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check cmd@bktitle + format.bvolume output + format.number.series output + format.pages output + new.sentence + publisher empty$ + { organization output + address output + } + { organization output + format.publisher + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.note output + format.eprint output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check +% Added edition after title (SGLS) + format.edition output + new.sentence + organization output + address output +% format.edition output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.sentence + howpublished output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check cmd@atitle + new.sentence + bbl.phdthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output + organization output + new.sentence + publisher output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check cmd@bktitle + new.sentence + format.tr.number output.nonnull + new.sentence + institution "institution" output.check cmd@org + address output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + format.note "note" output.check + format.eprint output + fin.entry +} + +FUNCTION {default.type} { misc } + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " " * "et~al." emphasize * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " " * "et~al." emphasize * } + { " \& " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + { pop$ "????" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num number.label } + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + emphasize + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {bib.sort.order} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ +"\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\def\au#1{#1} \def\ed#1{#1} \def\yr#1{#1}\def\at#1{#1}\def\jt#1{\textit{#1}} \def\bt#1{#1}\def\bvol#1{\textbf{#1}} \def\vol#1{#1} \def\pg#1{#1} \def\publ#1{#1}\def\arxiv#1{#1}\def\org#1{#1}\def\st#1{\textit{#1}}" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `jfmraw.bst'. diff --git a/docs/JFM_WYQ/My_JFM/lineno-FLM.sty b/docs/JFM_WYQ/My_JFM/lineno-FLM.sty new file mode 100644 index 0000000..cdc2abf --- /dev/null +++ b/docs/JFM_WYQ/My_JFM/lineno-FLM.sty @@ -0,0 +1,113 @@ +%\usepackage[switch]{lineno} +%\newcounter{lasttextlineno} +\usepackage[pagewise,mathlines]{lineno} +\runninglinenumbers %% for continous line numbering regardless of box and minipage but only on left side in single/double column +%\linenumbers %% properly in single/double column but boxes and minipage linenos not getting continuous +%\pagewiselinenumbers%% +\newif \ifLineNumbers% +\linenumberdisplaymath + +\def\linenumberfont{\normalfont\fontsize{8}{10}\selectfont} +\if@twocolumn +\setlength\marginparwidth{.75cm} +\setlength\marginparsep{19.5\p@} +\else +\setlength\marginparwidth{3.0cm} +\setlength\marginparsep{24\p@} +\fi +\newcommand\linenomathWithnumbersforams{% + \ifLineNumbers + %\ifx\@@par\@@@par\else + \ifnum\interlinepenalty>-\linenopenaltypar + \global\holdinginserts\thr@@ + \advance\interlinepenalty \linenopenalty + \ifhmode % v4.3 + \advance\predisplaypenalty \linenopenalty + \fi + %\advance\postdisplaypenalty \linenopenalty + \advance\interdisplaylinepenalty \linenopenalty + \fi + \fi + \ignorespaces + } + +\newcommand\linenomathWithnumbersformultline{% + \ifLineNumbers + %\ifx\@@par\@@@par\else + \ifnum\interlinepenalty>-\linenopenaltypar + \global\holdinginserts\thr@@ + \advance\interlinepenalty \linenopenalty + \ifhmode % v4.3 + %\advance\predisplaypenalty \linenopenalty + \fi + %\advance\postdisplaypenalty \linenopenalty + \advance\interdisplaylinepenalty \linenopenalty + \fi + \fi + \ignorespaces + } + + + +\newcommand*\patchAmsMathEnvironmentForLineno[1]{% +\expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname +\expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname +\renewenvironment{#1}% +{\def\linenomath{\linenomathWithnumbersforams}%added + \@namedef{linenomath*}{\linenomathNonumbers}%added +\linenomath\csname old#1\endcsname}% +{\csname oldend#1\endcsname\endlinenomath}}% +\newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{% +\patchAmsMathEnvironmentForLineno{#1}% +\patchAmsMathEnvironmentForLineno{#1*}% +}% + +\AtBeginDocument{% +%\patchBothAmsMathEnvironmentsForLineno{equation}% deleted +%\patchBothAmsMathEnvironmentsForLineno{align}% +\patchBothAmsMathEnvironmentsForLineno{flalign}% +\patchBothAmsMathEnvironmentsForLineno{alignat}% +\patchBothAmsMathEnvironmentsForLineno{gather}% +%\patchBothAmsMathEnvironmentsForLineno{multline}% +%\patchBothAmsMathEnvironmentsForLineno{split}% +\patchAmsMathEnvironmentForLineno{array}% +%\patchAmsMathEnvironmentForLineno{split}% +} + +%%\AtBeginDocument{% + \let\LN@align\align + \let\LN@endalign\endalign + \renewenvironment{align}% + {\linenomath\LN@align}% + {\LN@endalign\endlinenomath}% +%%} + + +\renewenvironment{multline}{\linenomathWithnumbersformultline% + \start@multline\st@rredfalse +}{% + \iftagsleft@ \@xp\lendmultline@ \else \@xp\rendmultline@ \fi + \ignorespacesafterend +\endlinenomath} +\renewenvironment{multline*}{\linenomathWithnumbersformultline\start@multline\st@rredtrue}{\endmultline\endlinenomath} + +\def\insplit@{% + \global\setbox\z@\vbox\bgroup + \Let@ \chardef\dspbrk@context\@ne \restore@math@cr + \default@tag % disallow use of \tag here + \ialign\bgroup + \hfil% + \strut@ + $\m@th\displaystyle{##}$% + &$\m@th\displaystyle{{}##}$% + \hfill % Why not \hfil?---dmj, 1994/12/28 + \crcr\noalign{\global\advance\c@linenumber\@ne}% +} + +\makeatletter +\setlength\marginparsep{12\p@} +\setlength\marginparpush{0\p@} +\setlength\marginparwidth{2.6pc} +\makeatother + +\endinput diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md new file mode 100644 index 0000000..5c36842 --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md @@ -0,0 +1,207 @@ +# Round-1 bottom-up evidence index: DRL, control and cases + +> Evidence index only; not JFM manuscript prose. Repository facts are bounded by authority documents, executable code, manifests and retained artifacts. LegacyCelerisLab and modern V5/CelerisLab are separate chains and are never pooled silently. + +## Executive map + +- **Active package:** `src/drl_pinball/**`; modern V5 is the executable 2000×600 CelerisLab PPO workflow. Legacy PPO and acquisition code remains the historical compatibility path. +- **Scene families:** Legacy includes steady, Kármán cloak, vortex (Lamb/Taylor), Illusion and Erase, plus reduced-observation experiments. V5 retained scratch cases are 11 canonical cases: 4 Kármán Re/geometry groups, 4 Illusion target-size groups, 3 additional Kármán Re cases; 15 runs total. +- **Primary control contract:** PPO, Sin MLP `[64,64]`, three cylinder rotations, six downstream velocity channels plus six force channels; Illusion adds two reconstructed target-force channels. V5 uses calibrated native-v2 physical scales plus frozen-at-inference SB3 `VecNormalize`; Legacy uses fixed Phase-0 norms. +- **Reward rationale:** force terms impose low resultant force for cloak or target-force matching for Illusion; six-channel downstream DTW supplies an affordable temporal wake-signature objective. Full-field L2 is independent validation, not training reward. +- **Principal evidence:** Kármán `Re100` is code-Re 100, equivalent to single-cylinder `Re_D=50` under `U0=0.01`, `D=20`, `nu=0.004`. V5 has seeds 41–45; retained deterministic evaluation selects seed 45. The current retained V5 package supports repeated policy discovery but seed-dependent late retention, not robust convergence. +- **Field validation:** `wake_l2.py` schema `drl-pinball-wake-l2-v2`; canonical summary is 23 rows (15 V5 controlled, 7 Legacy periodic, 1 Legacy steady). Periodic `E_mean` is complete-cycle mean-field RMS; `E_phase8` is an eight nearest-snapshot diagnostic. Current matrix improves `eta_mean` in every row; V5 `kar_re400` seed 43 worsens `E_phase8` relative to zero. +- **Status:** no new CFD or training run was performed here. `src/drl_pinball/data/reproduction` is external/symlink-backed in this checkout and not discoverable through the normal workspace glob; manifests and repository docs remain the provenance authority. + +## Source ledger + +| Layer | Authority / source | What it establishes | Boundary | +|---|---|---|---| +| Workflow | `.cursor/rules/jfm-research-workflow.mdc`; `ROUND1_BOTTOM_UP/README.md` | evidence-first workflow; Legacy/V5 separation; claim boundaries | not numerical authority | +| Package map | `src/drl_pinball/README.md`, `CLAIMS.md`, `RESULTS.md`, `DATA_DICTIONARY.md`, `HISTORY_AND_LESSONS.md`, `WRITING_HANDOFF.md` | scope, result lineage, safe interpretation, artifacts | reader layer; artifacts win | +| Legacy code | `legacy_env/*.py`, `legacy_train/*.py`, `legacy_test/core/dtw_metrics.py`, `legacy_test/metrics.py`, `legacy_test/acquire.py` | historical scene/action/obs/reward/DTW contracts | distinct solver and norm chain | +| V5 code | `train/env_karman.py`, `train/env_illusion.py`, `train/case_registry.py`, `train/TRAIN_PIPELINE.md`, `train/DESIGN_DECISIONS.md` | executable calibration, PPO, reward, normalization, checkpoint contracts | retained runs predate some current contracts | +| V5 result authority | `train/output/*/meta.json`, `train/results/latest/tables/latest_results_summary.json`, `latest_eval_summary.csv` | best values, iterations, selected seed, retained evaluation | retained historical; not post-fix retraining | +| TB export | `train/results/training_csv/training_iterations.csv`, `training_csv/manifest.json` | 7,000 rows, 14 conflict-free runs | auxiliary; Re60 excluded fail-closed | +| Field evaluation | `eval/wake_l2.py`, `eval/tests/test_wake_l2.py`, `WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` | ROI, formulas, phase/frequency diagnostics, exclusions | geometry-guarded, not solver-mask-proven | +| Plot navigation | `data/reproduction_plots/manifest.json`, `plot_flow_fields.py`, `plot_reproduction_summary.py`; SR plot manifest/README | 30 V5/Legacy plots; 11 partial Legacy-SR plots | derived views; phase slot 0 default | +| Solver setting | `configs/config_lbm_karman_2000x600*.json`, `configs/config_lbm_pinball.json`, `CELERISLAB_VALIDATION_DOSSIER.md` | V5/Legacy settings and CelerisLab qualification | validation anchors do not validate DRL mechanism | +| Experimental navigation | `knowledge.md` §16.5; repository search | water tunnel/towing/force sensor/PIV are described as experimental setup/demos | no full experimental validation package located | + +File hashes recorded during this audit (SHA-256, bytes): `latest_results_summary.json` `4d5ef8f1cb1dbcbb9d5528bd0478c2c4815d4b49c92e0253b6ea54acac110617` (36582); training manifest `e5a7b096fb9dd737365fe37e37e748ab732697686d0b45ed08b2f3a980469acd` (1036); reproduction plot manifest `448251183cc80716c7b1b5b96ffdb5206eecaa2cd725fb67fbf67c09ac1bc32c` (45663); SR plot manifest `a5a4588219d658fed9e259aec91171643566c9472938317b8d0f2cbbf214ed4f` (54677); `eval/wake_l2.py` `6b3a9b093b427b06cb5dafcc2ad3a648971a647d5bbfb7a47fc21ee9dd00ebd7` (15975); L2 research note `f97f7044603e0ee3f52cd21c4a514a7250b188dd6e7ece40cb8947aacb7506cb` (39396). + +## Chronology and package evolution + +1. **Legacy PPO era:** original `LegacyCelerisLab` workflow established steady cloak, Kármán cloak, Illusion, vortex, Erase and reduced-observation experiments. Legacy model inventory and scene notes are consolidated in `knowledge.md`; exact old contracts live in `legacy_env` and `legacy_test`. +2. **Steady contextual start:** near-uniform/constant rotation was explored before periodic Kármán control. It is contextual calibration and not active DRL robustness evidence. +3. **Kármán Re100 anchor:** the original periodic cloak chain became the main DRL reference. Code name `re100` means `U0*(2D)/nu=100`; physical one-cylinder `Re_D=50`. +4. **Transfer and scene expansion:** Legacy transfer was used for vortex and Erase; Illusion introduced target-cylinder force/harmonic matching; reduced-observation experiments probed hardware simplification. +5. **V5 migration:** CelerisLab changed the solver/API and moved to a 2000×600 grid, uniform/free-slip setting, explicit case registry, calibration-v2/native units, zero bias and `VecNormalize`. V5 was intentionally changed for extensibility and robustness information, not as a numerically identical continuation of Legacy. +6. **V5 scratch matrix:** 15 retained runs across 11 cases. Re100 has five seeds; all other canonical cases have one. `kar_d075` and `kar_d2` use `1e-4` learning rate versus mostly `3e-4`, confounding a pure radius ablation. +7. **Evidence consolidation:** training, deterministic policy evaluation, reproduction acquisition and offline wake-L2 evaluation were separated. Result figures/tables are reader-derived products; no current-contract complete retraining is established. +8. **Current indexing:** plots, manifests, field-role metadata, phase diagnostics and claim ledgers were frozen for downstream agents. SR/CCD/OID are interfaces only here; Illusion SR is historical/negative and not a DRL positive claim. + +## Case taxonomy and contracts + +### Legacy scene matrix + +| Scene / IDs | Geometry and target | Re convention / role | Action mapping (normalized action `a`) | Observation / interval | +|---|---|---|---|---| +| steady | three-cylinder pinball; target and constant-control contextual comparison | Legacy steady; late snapshot | scene-specific legacy constant role | nonperiodic; `late_field.npz` | +| Kármán cloak: `karman_re50/100/200/400` | upstream disturbance cylinder + 3 pinball cylinders; target is disturbance wake | code Re uses `2D`; Re100 ↔ `Re_D=50` | `omega/U0 = a*8 + [0,-4,+4]` | 12 policy channels; `SI=800`, `FIFO=150`, `CONV=30`, `MAX_STEPS=500` | +| vortex: `vortex_lamb`, `vortex_taylor` and offsets | transient Lamb dipole or Taylor monopole passes through pinball; target is evolving sensor signal | Legacy transfer from Re100 documented; event roles | `omega/U0 = a*4 + [0,-4,+4]` | 12 channels; `SI=800`, `MAX_STEPS=150`; event-relative fields, not periodic phase | +| Illusion: `illusion_075L/1L/15L` | standalone target cylinder at target-size ratio plus 3 sensors; pinball imitates target | target force and sensor signal; Legacy target body and pinball are separate runs | `omega/U0 = a*8 + [0,-2,+2]` | 14 channels: 12 force/sensor + target `Cd,Cl`; `CONV=36`; target harmonics are 5-frequency/channel reconstruction | +| Erase | clean inflow target, disturbance-carrying pinball scene; target is mean/clean sensor state | nonperiodic/diagnostic semantics | `omega/U0 = a*8 + [0,-8,+8]` | special 14-channel raw layout; `SI=600`, `CONV=36`; enhanced DTW reward | +| reduced observation | Kármán layout with force/torque/sensor subsets | hardware simplification experiments | generally cloak scale/bias | S_DIM varies 3–9; historical, not main chain | + +Legacy geometry in lattice cells is `L0=20`, `NX=1280`, `NY=512`, `y0=255.5`; Kármán disturbance center `x=200`, pinball front `x=600`, rear `x=626`, sensors `x=800` at `y0+40,y0,y0-40`; pinball radius 10 and sensors radius 5. Illusion shifts pinball to x=380/406, target to x=400, sensors to x=600. The raw Kármán observation is `[dist force(2), sensors(6), pinball forces(6)]`; training slices `[2:14]`, then normalized policy order is **forces first, sensors second**, despite older prose saying otherwise. Illusion raw is sensors then forces, with target force channels appended after normalization. + +### V5 canonical matrix + +| Family | Canonical IDs | seeds | SI | geometry / Re | +|---|---|---:|---:|---| +| Kármán baseline | `kar_re100` | 41,42,43,44,45 | 800 | 2000×600; code Re100, `Re_D=50`; disturbance radius default | +| Cross-Re | `kar_re60`, `kar_re200`, `kar_re400` | 43 | 800,500,400 | matching viscosity configs; code-Re labels | +| variable disturbance | `kar_d075`, `kar_d15`, `kar_d2` | 44,45,45 | 800 | radius ratios 0.75, 1.5, 2.0; not pure LR-controlled geometry comparison | +| Illusion | `ill_075L`, `ill_1L`, `ill_15L`, `ill_2L` | 43 | 1100,1200,1200,1200 | target radius ratios passed as `target_diam*L0`; physical radii 15/20/30/40, diameters 30/40/60/80 | + +V5 geometry: `D=20`, front `(1000,299.5)`, rear `(1026,314.5)/(1026,284.5)`, sensor plane `x=1200` for Kármán; Illusion front/rear `(380,299.5)/(406,314.5)/(406,284.5)`, sensor/target plane `x=600`. V5 config uses `D2Q9`, FP32, MRT, double-buffer, uniform regularized inlet, `neq_extrap` outlet with backflow clamp and free-slip y walls. `config_lbm_pinball.json` is Legacy/new compatibility context, not the active V5 2000×600 training configuration: it is 1280×512, parabolic Zou-He and bounce-back walls. + +## Formula and implementation contracts + +### Legacy normalization and reward + +Legacy Phase-0 normalization is frozen per scene/model and must be paired with the saved `norm.json`; fresh recomputation is invalid for reference comparisons. + +- Standard Kármán/Illusion/Vortex: `force_norm_fact = 6*max(|forces|)`; `sens_deviation=mean(sensor)`; `sens_norm_fact=5*max(|sensor-sens_deviation|)`. +- Erase uses special force/sensor factors 100/10; reduced-observation has model-specific factors. +- Policy input is `hstack([forces_norm(6), sens_norm(6)])`, clipped to `[-1,1]`; Kármán starts from raw `obs[2:14]`. +- Legacy action persistence is built-in exponential smoothing: `a_applied=(1-0.1)*a_previous+0.1*a_target`. V5 has an explicit equivalent `ActionSmoother(weight=0.1)`. + +For standard Legacy Kármán, with normalized forces `cd=(f_x^front+f_x^bottom+f_x^top)/3` and similarly `cl`, `sim=mean_i(1-DTW_i/CONV_LEN)`, +`r_cd=exp(-|20 cd|)`, `r_cl=exp(-|80 cl|)`, `r_sim=exp(-10|sim-1|)`, and `r=min(0.3 r_cd+0.4 r_cl+0.3 r_sim,1)`. Vortex uses weights `(0.2,0.3,0.5)`. Illusion uses summed three-pinball force against reconstructed target force, weights `(0.3,0.3,0.4)`, and sensitivities 10/10. Erase uses `0.4 r_u+0.4 r_v+0.2 sim`, where `r_u=exp(-40|sensor_u-target_u|)`, `r_v=0.7 exp(-20|amp_v|)+0.3 exp(-20|sensor_v-target_v|)`, and enhanced similarity is 80% max-cost DTW + 10% amplitude ratio + 10% mean similarity. + +### Legacy DTW exact implementation + +`legacy_test/core/dtw_metrics.py` computes an unweighted absolute-cost dynamic program: +`D[i,j]=|target[i-1]-state[j-1]|+min(D[i-1,j],D[i,j-1],D[i-1,j-1])`, `D[0,0]=0`, other boundaries infinity; `sim=1-D[n,m]/n`. Kármán lag is `argmax` of cross-correlation of middle-sensor Uy (`target[:,1]` vs state); six channels use `roll(target,-lag)[CONV:2CONV]` versus the last `CONV` state samples and are averaged. Illusion estimates lag from target force/sensor offset channel `target[:,3]` against state middle Uy `state[:,1]`, then target sensor channels are `target[:,i+2]`. Vortex has no lag and rolls the last window by `current_step+1`. DTW lag is a signal alignment index, not physical delay or causality. + +`legacy_test/metrics.py` separately provides offline target-channel max-abs normalized cycle DTW: each target channel scale is `max(abs(target[:,i]))` (floor `1e-12`), both arrays are divided by that scale, then the same Legacy cycle DTW is computed. This is not the native reward formula. It records the exact `scale`, lag channel and `conv_len` in `dtw_summary.json`. + +### V5 DTW and reward + +V5 `calc_dtw_sim` uses the same absolute-cost DP but `sim=max(0,1-D[n,m]/(n*dtw_norm_scale))`. `dtw_norm_scale` is calibration-specific, not a universal constant. Examples from calibration artifacts: Kármán Re100 `0.0026153846153846153` in the canonical calibration and retained run-local calibration `0.204` (the latter demonstrates why calibration identity must accompany numbers); Re400 `0.0039743589743589745` canonical and retained run-local `0.31`; Illusion canonical `ill_075L 0.0023846153846153848`, `ill_1L 0.0032307692307692306`; retained run-local values are `0.186`, `0.252`, `0.355`, `0.433`. The code and artifact schema, not a prose approximation, decide which value applies to a result. + +V5 computes lag from target/state middle-sensor channel index 3 in the six-channel `[s0 ux,uy,s1 ux,uy,s2 ux,uy]` convention, selects target `[CONV:2CONV]` and state tail `[-CONV:]`, averages six DTW values, interpolates through calibration `SIM_BP`→`SIM_VAL`, and computes: +`r_cd=EMA(exp(-cd_norm² K_CD),0.2)`, `r_cl=EMA(exp(-cl_norm² K_CL),0.2)`, `reward=W_CD r_cd+W_CL r_cl+W_SIM r_sim-floor_penalty`, clipped at zero. Kármán force aggregation is the **mean** of three controlled-cylinder forces; Illusion is the **sum** matched to one target-cylinder force. Canonical Kármán constants are `K_CD=50,K_CL=100`; Illusion `12,25`; weights are `0.3,0.3,0.4`; floor thresholds are 0.1 and floor penalty 0.05. V5 normalized physical observation is `[forces/SCALE, sensors/SCALE]`, with Illusion target `Cd,Cl` appended; VecNormalize whitens observations only (`norm_reward=False`, `clip_obs=10`, `gamma=.99`). + +### Sin activation and PPO protocol + +Both retained model inventory and V5 source specify custom `Sin.forward(x)=sin(x)` in an MLP `Linear→Sin→Linear→Sin→Linear`, hidden widths 64×64. The historical rationale is periodic/vortex spectral fidelity; it is a design rationale, not an independently demonstrated activation ablation. V5 defaults: PPO SB3, `n_steps=2048`, batch 64, 10 epochs, learning rate `3e-4`, `gamma=.995`, deterministic evaluation; action range `[-1,1]`, `omega=-(action*12)*U0/RADIUS`, EMA 0.1. Each logged training iteration is `learn(2048)` plus up to 360 deterministic evaluation steps; scoring tail is last 180. Environments do not terminate Gym episodes. Best retention saves `best_model.zip` together with same-selection `best_vecnormalize.pkl`; per-iteration model/normalizer pairs exist in source workflow but intermediate/final streams are not released. Resume is continuation, not exact replay. Seeds distinguish stochastic runs, not deterministic GPU replay. Symmetry wrapper exists but active default is off; historical configured probability 0.5 did not yield effective transition augmentation under the reset timing audit. + +## Result ledger: V5 retained training and evaluation + +Authority: `train/results/latest/tables/latest_results_summary.json` and `latest_eval_summary.csv`; table hash above. Values below are retained historical deterministic evaluation, 360 steps, last-180 scoring tail, `legacy-policy-v1` compatibility, not current-contract retraining. + +| case | seed(s) / n | eval reward | DTW | r_cd | r_cl | r_sim | status / failure mode | +|---|---:|---:|---:|---:|---:|---:|---| +| `kar_re100` | selected 45 / 5 | 0.931258 | 0.918458 | 0.981787 | 0.980641 | 0.856324 | main anchor; selected-seed multi-seed result | +| `kar_d075` | 44 / 1 | 0.949619 | 0.910736 | 0.966266 | 0.974395 | 0.918552 | demonstration; LR 1e-4 confound | +| `kar_d15` | 45 / 1 | 0.957656 | 0.892390 | 0.993683 | 0.996858 | 0.901234 | demonstration | +| `kar_d2` | 45 / 1 | 0.909436 | 0.816482 | 0.976047 | 0.988719 | 0.800015 | demonstration; LR 1e-4 confound | +| `ill_075L` | 43 / 1 | 0.878312 | 0.880188 | 0.935905 | 0.818551 | 0.879939 | high action saturation, 0.8222 any-channel fraction | +| `ill_1L` | 43 / 1 | 0.766871 | 0.893062 | 0.914360 | 0.706057 | 0.701863 | high action saturation, 0.9611 any-channel fraction | +| `ill_15L` | 43 / 1 | 0.596248 | 0.877500 | 0.787644 | 0.349086 | 0.638072 | force/lift degradation; saturation 0.8444 any | +| `ill_2L` | 43 / 1 | 0.579589 | 0.869949 | 0.728111 | 0.173972 | 0.783248 | force/lift degradation; saturation 0.9000 any | +| `kar_re60` | 43 / 1 | 0.604643 | 0.364287 | 0.935710 | 0.738946 | 0.255616 | weak DTW; excluded from clean TB CSV due conflicting resume history | +| `kar_re200` | 43 / 1 | 0.498573 | 0.711742 | 0.498072 | 0.314928 | 0.652500 | degraded cross-Re demonstration | +| `kar_re400` | 43 / 1 | 0.446254 | 0.564630 | 0.611165 | 0.305857 | 0.448598 | degraded cross-Re demonstration | + +V5 retained best training rewards: Re100 seeds 41–45 are `0.9266385, 0.9301960, 0.9160065, 0.9221958, 0.9411612`; best iterations `471,315,360,465,447`. Last-50 median retention ratios are `0.6703,0.2004,0.1626,0.8581,0.6373`; this is direct evidence for discovery versus late retention separation. Best canonical training values are in each run `meta.json`; TB export has 7,000 rows from 14 runs, excludes Re60 because 213 conflicting duplicate steps and mixed-config resume history. + +## Result ledger: field/L2 artifacts + +`wake_l2.py` schema `drl-pinball-wake-l2-v2` uses `D=20`; ROI `-6≤(x-xs)/D≤14`, `|(y-y0)/D|≤5`, inclusive lattice cells. V5 sensor-plane registrations are Kármán `xs=1200`, Illusion `xs=600`; Legacy Kármán `xs=800`, Illusion `xs=600`. `E_mean` is complete-cycle arithmetic mean-field U0-normalized area RMS; `E_phase8` is eight independently phased nearest-boundary snapshots; `eta=1-E_ctl/E_zero`; time is `tU0/NX`, so frequencies are relative within case only. Exact solver masks are not persisted; this is geometry-guarded, not exact common-fluid-mask L2. Vortex/Erase are excluded from the formal matrix; steady is late-snapshot only. + +Canonical summary (memory and L2 note; read JSON/CSV before final numerical writing): 23 rows = 15 V5 controlled seeded roles, 7 Legacy periodic roles, 1 Legacy steady constant role. All 23 have positive `eta_mean` (`0.1092..0.8933`). Exception: V5 `kar_re400` seed 43 has `E_phase8_ctl=0.490471` versus zero `0.450626`, `eta_phase8=-0.08842`, while mean-field still improves (`E_mean_ctl=0.177469` versus zero `0.221541`, `eta_mean≈0.1989`). It also has relative frequency mismatch `0.2650` and period CV `0.27346`; phase claim is dynamically weak. Other audit diagnostics include largest actual-phase slot delta `0.10286 rad` (Legacy illusion_075L), largest selected-role phase error `0.08699 rad` (Legacy karman_re100), unique controlled cycle counts 3–8, and no controlled role reused the same field index across slots. + +## Kármán Re100 principal evidence map + +- **Definition:** V5 `kar_re100`: 2000×600, `nu=.004`, `U0=.01`, code reference `2D=40`; Legacy `karman_re100`: 1280×512, parabolic Zou-He, bounce-back walls, Legacy API. Never call the label unqualified “cylinder Re=100”. +- **Training:** five retained scratch seeds, 500 iterations; high best reward on all five, but late retention varies strongly. The strongest retained policy selection is seed 45 (`eval reward .931258`, DTW `.918458` under the retained evaluation contract). +- **Signals:** six sensors at one downstream plane, three probes with `(y-y0)/D=+2,0,-2`, radius `.25D`; forces and sensors are distinct objective channels. +- **Field:** reproduction plots exist for all five V5 seed views and Legacy Karman Re100; the default plot is phase slot 0. Source phase NPZ, timeseries, metadata and external-root paths are manifest-bound where available. +- **Interpretation boundary:** Re100 supports a named-condition multi-seed discovery/retention statement and field comparisons; it does not establish universal robustness, causality, stability, response delay or a unique mechanism. + +## Cross-condition ability, degradation and failures + +- Cross-Re retained evaluation degrades from Re100 to Re60/Re200/Re400 in DTW and reward; n=1 each, so this is named-condition evidence, not a continuous generalization law. +- Variable disturbance cases retain high reward/DTW but are confounded by learning-rate differences for `d075` and `d2`; no pure geometry ablation. +- Illusion reward and force components decline as target size increases, while action saturation is high; this documents difficulty/degeneration, not target-size law. +- Re60 is a specific provenance failure in the clean training-series export: conflicting duplicate TensorBoard values at 213 steps and a mixed-config resume branch. It remains in the retained result table but is not used in the clean CSV. +- Legacy Illusion DRL/PPO remains a historical target-matching demonstration under its own Legacy contract. Legacy Illusion SR is negative/historical and does not change the PPO role. +- Vortex and Erase are retained navigation/artifact roles, but their transient/nonperiodic semantics are excluded from current formal L2 matrix; do not convert their event/late plots into periodic phase evidence. + +## Evidence and artifact inventory + +### Training and evaluation + +- `train/output/_seed/meta.json`, `calibration.json`, `target.npy`, `models/best_model.zip`, matching `best_vecnormalize.pkl` (compact retained bundle; inspect per-run metadata for hashes and provenance). +- `train/results/latest/tables/latest_results_summary.json`, `latest_eval_summary.csv`, `HOW_TO_READ.md` (authoritative reader tables and limitations). +- `train/results/training_csv/training_iterations.csv` + manifest (7,000 rows; 14 runs; Re60 exclusion reason/hash). +- `train/results/latest/figures/fig01*–fig05*` and retained evaluation figures are referenced by `HOW_TO_READ.md`; they are derived plotting products and should not be mistaken for new CFD. + +### Reproduction / field material + +- `data/reproduction_plots/manifest.json`: 30 plots; fixed vorticity `[-0.001,+0.001]`; V5 seeded and Legacy Kármán/Illusion/steady/vortex/erase role mappings; default selector is phase slot 0, vortex selector is event relative offset `-10`, steady selector is late field index 159. +- `data/reproduction_plots_sr/manifest.json` and README: 11 plots out of expected 23, explicitly partial; Kármán Target/PPO/SR/Zero and term-deletion variants; generalization cases intentionally Target/SR/Zero with no PPO. Manifest records hashes, sizes and absolute external role paths. +- Plot code: `plot_flow_fields.py`, `plot_reproduction_summary.py`, `train/plot_latest_results.py`, `train/plot_scratch_results.py`; offline L2 code/tests under `eval/`. +- Raw role artifacts, when external store is mounted: `phase_fields.npz` (eight slots plus means/phase diagnostics), `event_fields.npz` (five event offsets), `late_field.npz`, `timeseries.csv/.npz`, `metadata.json`, role manifests and source hashes. The current normal workspace did not expose these directories; do not infer absence from that tooling limitation. + +### Experimental/demo navigation + +`knowledge.md` §16.5 records a water tunnel with towing platform (25 cm width), custom air-bearing/2D force-sensor system with semiconductor strain gauges, low-noise acquisition and planar PIV; repository search found no dedicated current water-tunnel/demo evidence dossier or raw experimental dataset. Status is demo/feasibility navigation only. Required future inventory: experiment date/configuration, scale, towing speed/Re, sensor calibration and sampling, PIV raw/processed fields, uncertainty, synchronization, and exact figure source data. + +## Cross-package interfaces and boundaries + +- **SR:** Legacy standardized acquisition reuses target/physical-zero/PPO role contracts, sensor/force/action ordering, 480 warm-up control intervals + 160 retained boundaries where documented, and the same Legacy solver. This index only points to `src/SR_analysis/` and `data/reproduction_plots_sr`; SR law/effect/ablation claims belong to the SR agent. Illusion SR is closed as negative/historical. +- **CCD/OID:** DRL provides controlled/target/zero signals and fields; CCD describes control-vs-constant differences, OID has separate dual-clock and exact-mask contracts. Neither metric is a DRL score or causal proof. Keep field clocks separate from control clocks. +- **Theory/steady:** steady constant-control and Legacy steady plots are contextual calibration; theoretical rotation interpretations must not be imported into DRL results without matching solver/geometry/action sign contracts. +- **Solver validation:** CelerisLab qualification is separate: only Kan99b K2 and Sah04 S2 full runs retained; Kan99 lift sign remains unresolved, qualification matrix is partial, and no solver validation proves DRL mechanism. Legacy equivalence is prohibited. + +## Claim boundaries, conflicts and gaps + +### Authorized / supported at named scope + +- V5 retained PPO uses calibrated targets, native-v2 physical scaling, observation-only VecNormalize, zero bias, explicit EMA smoothing and Sin MLP. +- Re100 has five retained seeds and repeated high-reward checkpoint discovery; late retention is seed-dependent. +- Retained V5 cross-Re, disturbance-size and Illusion cases are named-condition demonstrations with the result values above. +- Six-channel sensor DTW and independent field L2 are distinct evidence roles; field metric is exactly specified by `wake_l2.py`. +- CelerisLab is a GPU D2Q9 MRT LBM implementation with documented sensor-readback validation and partial rotating/confined-cylinder qualification. + +### Prohibited without new evidence + +Do not claim universal Re generalization, distribution-wide robustness, asymptotic stability, causal wake mechanism, physical response delay from DTW, pure disturbance-radius ablation, post-fix complete retraining, exact Legacy/V5 numerical equivalence, full-state observability from three probes, optimal `x/D=10` or `y/D=±2`, exact solver-mask L2, or statistical uncertainty for n=1 cases. + +### Conflicts / gaps to resolve later + +1. Retained V5 run-local `calibration.json` values for `dtw_norm_scale` differ from canonical calibration directories; every number needs exact calibration identity and target hash. +2. `train/results/latest` evaluation uses `legacy-policy-v1` compatibility while current source describes native-v2; this is intentional retained-history boundary but limits direct current-code interpretation. +3. `src/drl_pinball/data/reproduction` role tree is external/symlink-backed and not exposed by ordinary workspace glob; audit its mounted tree before quoting per-role file hashes or schema values. +4. Legacy raw and normalized observation descriptions had historical channel-order conflict; executable `legacy_env` and `legacy_test` code wins: normalized policy vector is forces first, sensors second. +5. Wake L2 has no persisted solver-exact masks; future acquisition should persist common-fluid masks and, if needed, repeated-crossing phase-bin fields. +6. Vortex/Erase require explicit event/nonperiodic metrics before formal cross-scene field claims; current plots are navigation, not a common periodic matrix. +7. No dedicated current water-tunnel/demo raw data or synchronized PIV/force package found. +8. CelerisLab validation dossier records only K2/S2 full qualification, unresolved Kan99 lift sign, no mesh-convergence package, no uncertainty ensemble and no full Kan99 fields. +9. Exact per-artifact hashes for all V5 model bundles, calibration/target pairs and external raw NPZ should be extracted from their manifests before final figure panels. +10. Figure inventory is complete at navigation level, but publication-ready panels/data exports do not yet exist; future panel assembly must preserve role, seed, phase/window, comparator and hash. + +## Candidate physical logic (not frozen claims) + +- The reward deliberately combines global force balance and a sparse downstream wake signature: force terms penalize persistent resultant drag/lift, while sensor DTW asks for temporal target-signature agreement. This division is physically motivated by experimental feasibility and computational cost, but force/DTW reward success does not itself prove full-field cloaking. +- In coherent Kármán regimes, centre `u_y` provides a phase-sensitive shedding coordinate; upper/lower probes add transverse coverage and streamwise/transverse complementarity. This can explain why sparse history can guide control, while L2 tests what lies between and beyond probes. +- The repeated Re100 high-best/variable-late pattern suggests a policy-search and retention issue, not automatically a fluid instability. V5 cross-condition degradation and Illusion saturation identify where the retained controller departs from the anchor regime. +- Steady, periodic and transient cases should be treated as distinct dynamical contracts. Near-constant action structure may be a candidate control skeleton, but establishing that belongs to SR/theory evidence and must retain action signs, solver chain and case identity. + +## Quick handoff checklist + +For every future numerical claim record: `path`, SHA-256, schema, array shape/keys, units, geometry/Re convention, role/case, seed, comparator, metric formula, evaluation window, normalization/calibration/target identity, and status (`current`, `retained historical`, `diagnostic`, `negative`, or `gap`). Read artifacts before prose; keep this file an index rather than a manuscript. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/02_SR_CONTROL_LAWS.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/02_SR_CONTROL_LAWS.md new file mode 100644 index 0000000..361f91f --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/02_SR_CONTROL_LAWS.md @@ -0,0 +1,216 @@ +# Round 1 bottom-up evidence dossier: symbolic-regression control laws + +> **Role.** This is an index and evidence dossier for later condensation, not manuscript prose. It records repository facts, bounded observations, interpretations, negative/historical results, and unresolved questions. Repository authority/code/manifests/artifacts outrank memory and old narrative. No immutable artifact was modified; no CFD was launched. +> +> **Authority status at 2026-08-10.** Active SR science is LegacyCelerisLab Kármán/cloaking only. `steady` is contextual calibration. Illusion SR is retained historical/negative evidence. Modern CelerisLab V5, DRL, CCD, OID and steady packages are interface/context only and are not pooled into this SR chain. + +## 1. Scope and questions + +This dossier covers `src/SR_analysis/**`, the Legacy acquisition/deployment interface in `src/drl_pinball/legacy_test/**`, and the relevant Legacy solver boundary in `LegacyCelerisLab/**`. It indexes: + +- the real Stage 1 → Stage 2 → Stage 3 workflow and the closed-loop CFD arbiter; +- state/action pairing, feature construction, normalization, action order, units, Reynolds convention and reflection contracts; +- canonical formula/tree/coefficient identity and deployment mapping; +- Kármán training, validation, finite-duration and named pointwise extension cases; +- ablation/deletion/scaling evidence and its strict interpretation; +- steady, vortex/other cloak transfer boundaries, Illusion SR’s negative archive status, offline-fit versus closed-loop evaluation, failures, and future SINDy/tree-search boundaries; +- a path/hash/result ledger, formula table, case matrix, figure/data/script inventory, and gaps requiring verification. + +**Evidence labels used below:** `FACT` = directly stated by current authority/code/manifest/artifact; `OBS` = bounded observed output; `INTERPRETATION` = permitted interpretation; `HISTORICAL/NEGATIVE` = retained but not active positive evidence; `UNSUPPORTED` = do not claim without new authority; `GAP` = needs targeted verification. Numerical values are copied only where a current package index or artifact exposes them. + +## 2. Sources inspected and authority ordering + +### 2.1 Repository sources + +| Layer | Paths | Use/status | +|---|---|---| +| Cross-repo authority | `README.md`, `src/README.md` | solver separation, current status, evidence hierarchy | +| SR authority | `src/SR_analysis/README.md`, `PIPELINE.md`, `results/README.md`, `results/INDEX.md`, `HISTORY_AND_LESSONS.md`, `HANDOFF.md` | current scope, contracts, claim ledger/navigation | +| Executable contracts | `configs.py`, `stage_1_infer.py`, `stage_2_fit.py`, `stage_3_validate.py`; `utils/{data_contracts,feature_builder,g_operator,formula_schema,metrics,provenance}.py` | executable order, alignment, features, G, formula identity, DTW and hashes | +| Stage 1 evidence | `data/runs/article-joint-data-karman-20260718/**`, `data/runs/article-joint-data-illusion-20260718/**` | manifests/config/result and model/norm provenance | +| Derived result packages | `results/runs/article2-plotting-package-20260721/**`, `article2-steady-analysis-20260720/**`, `article2-long-timeseries-csv-20260720/**` | derived tables, steady interpretation, long-run manifests/tables | +| Legacy interface | `src/drl_pinball/legacy_test/README.md`, `acquire.py`; `legacy_test/tests/**`; `LegacyCelerisLab/README.md` | role semantics, warm-up/phase/publication contract, solver boundary | +| Historical archive | `src/SR_analysis/archive/README.md`, `archive/**` | failed/superseded routes only; not active authority | + +### 2.2 External memory and literature routing + +- **Nowledge Mem:** used `read_context_bundle` (Working Memory loaded) and a targeted `memory_search` for SR/Legacy/Kármán/Illusion. The targeted search returned zero durable results; Working Memory supplied the relevant prior decisions but was treated only as retrieval context, not scientific evidence. +- **Undermind:** called orientation, listed workspaces, and inspected the existing `DynamisLab` workspace (`4383d145-2c80-4991-8a9c-7ac2dd683438`). Existing SR notes and literature folders were found, including `SR_analysis/` and `JFM References/03 Symbolic regression and interpretable control/`, `05 Hydrodynamic cloaking and flow illusion/`. No new deep search was started. No external method claim is needed to establish repository facts in this dossier. + +## 3. Real pipeline: Stage 1 → 2 → 3 plus standardized roles + +```text +Frozen PPO + Legacy scene/norm + └─ Stage 1: infer + record immutable PPO trajectories; replay/order/provenance gates + └─ accepted controlled.npz + config/manifest/norm/result/target artifacts + └─ Stage 2: broad discovery (per-case and within objective, several seeds) + └─ topology recurrence / deployment safety diagnostics + └─ freeze topology; refit coefficients on declared eligible data + └─ formula JSON + expression hashes + parent/source hashes + └─ Stage 3: static safety → 40-step L2 screen → 200-step L3 Legacy closed loop + └─ finite 400-step / named unseen points / deletion / steady context +``` + +**CFD arbiter (FACT).** Stage 2 offline fit metrics (R²/RMSE/Pareto) diagnose imitation and topology; they do not accept a controller. Stage 3 closed-loop Legacy CFD, finiteness, early termination, schema/order, provenance, declared metric, and comparator arbitrate. One failed case must not be hidden by an average. Failed/rejected/partial telemetry remains evidence. + +**Separate August collector (FACT).** `src/drl_pinball/legacy_test/acquire.py` is not Stage-3 replay or a refit pipeline. It reruns frozen `target`, `controlled`/PPO, `sr`, `zero`, and named deletion roles under a common contract: 480 warm-up intervals, 160 retained post-step boundaries, same-run fields/telemetry, independent phase, complete cycles, eight fixed-phase snapshots, complete-cycle means, native and separately named normalized DTW, transactional staging, exact-schema validation and no-clobber publication. It audits late/standardized role behavior and complements the July chain. + +## 4. Contracts: pairing, features, normalization, units and symmetry + +### 4.1 Data pairing and windows + +| Contract | Verified rule | Evidence | +|---|---|---| +| Array schema | sensors `(T,6)`, forces `(T,6)`, actions `(T,3)`; Illusion target forces `(T,2)` | `utils/data_contracts.py` | +| Causal fit pairing | post-state `i` predicts action `i+1`; history uses action `i` and `i-1`; trajectory-local | `CAUSAL_ALIGNMENT`, `build_batch_dataset` | +| Historical pairing | post-state `i` → same action `i`, with historical lag construction; retained for compatibility, not silently mixed | `HISTORICAL_ALIGNMENT` | +| Splits | contiguous, non-overlapping train/validation/blind blocks; no trajectory boundary crossing | `contiguous_block_slices`, `PIPELINE.md` | +| Stage 1 | four trained Kármán cases re-code 50/100/200/400; 200 recorded PPO steps; 197 causally aligned rows per scene | `results/README.md`, plotting table | +| Stage 3 | L2 gate 40 control steps; L3 standard 200; Article2 long 400; named Kármán extension 200 | results index/plotting README | +| Standardized periodic roles | 480 warm-up + exactly 160 retained boundaries; ≥4 accepted rising crossings or fail closed | Legacy acquisition README | +| DTW | `legacy_dtw_v1_abs_n_unclipped`; target cycle `[conv_len:2 conv_len]`, state final `conv_len`; lag channel 1; six-channel mean | `utils/metrics.py`, `configs.py` | + +DTW circular lag is alignment metadata, not a physical delay. Native reward DTW and target-max-abs-normalized six-sensor cycle DTW answer different questions and are not merged. + +### 4.2 Feature and dimensional contracts + +Raw sensor order is `(upper_ux, upper_uy, center_ux, center_uy, lower_ux, lower_uy)` and raw force order is `(front_fx, front_fy, upper_fx, upper_fy, lower_fx, lower_fy)`. Historical aliases in the feature builder are `T=upper`, `C=front/centre sensor`, `B=lower`; do not infer force and sensor insertion order from aliases. + +Dimensionless conversion is `u_hat=u/U0`, `Cd,Cl=2F/(rho U0^2 D)` with `U0=0.01`, `D=20`, `rho=1` in the code contract. Symmetry features include `u_m,u_a,u_c,v_a,Cd_tot,Cd_rear,Cl_tot,Cl_diff` and rear symmetric/antisymmetric components. Optional temporal/action-history families include lag and `d(alpha)/dt_c`; Illusion target/error features exist in the runtime pool. + +`re_code` uses reference length `2D`; therefore `Re_D=re_code/2` and `mu=2/re_code`. Kármán example manifest `re_code=100` records `Re_D=50`, `sample_interval=800`, `control_dt=0.4`, `action_scale=8`, `action_bias=(0,-4,+4)`, FIFO 150, `conv_len=30`. Illusion `target_diameter` is historically passed to Legacy builder as a radius; stored labels must be kept literal. + +### 4.3 Reflection/symmetry contract + +The native action order is `(front, upper, lower)`. The corrected action map is + +\[ +G(\alpha_F,\alpha_U,\alpha_L)=(-\alpha_F,-\alpha_L,-\alpha_U). +\] + +The canonical mapped-shared deployment is + +\[ +\alpha_F(x)=\frac{h_F(x)-h_F(Gx)}{2},\qquad +\alpha_U(x)=h_R(x),\qquad +\alpha_L(x)=-h_R(Gx). +\] + +This **imposes** exact reflection symmetry at deployment. It does not establish PPO equivariance. `apply_G_raw12` swaps upper/lower sensor and force slots with lift sign reversal while retaining front drag and reversing front lift; `apply_G_target_force` retains drag and reverses lift. + +**Formula identity contract.** A formula is identified by immutable artifact/run ID, source SHA-256, fitted-expression hash, deployment-expression hash, feature names/metadata, output metadata, alignment/dt metadata, G metadata, fit/PySR/data provenance, and (for a pair) front/rear source hashes and pair hash. Term deletion is generated from the parent deployment expression and records parent source/deployment hashes plus term identity and scale. Display labels do not replace these identities. + +## 5. Canonical Kármán law and deployment mapping + +### 5.1 Canonical formula table + +| Role | Canonical deployed law | Mathematical meaning in this index | Deployment | +|---|---|---|---| +| front | `alpha_F = odd(-0.381391 Cd_rear,a)` | `Cd_rear,a=(Cd_upper−Cd_lower)/2`; odd projection extracts the reflection-odd component, making front action sign-compatible | `alpha_F=[h_F(x)-h_F(Gx)]/2` | +| upper/rear shared | `alpha_U = 1.307782 Cl_rear,s − 3.431209` | `Cl_rear,s=(Cl_upper+Cl_lower)/2`; feedback from rear-mean lift plus a persistent negative constant in upper action | `alpha_U=h_R(x)` | +| lower | not separately fit in the canonical pair | reflected copy of upper action, not an independent coefficient set | `alpha_L=-h_R(Gx)` | + +`alpha=omega/U0` is dimensionless surface tangential velocity. Thus the rear constant is approximately `−3.431209 U0` for upper and `+3.431209 U0` for lower, with the front stationary in the perfectly symmetric state. The current formula is “mapped-shared topology A”, not a unique/global symbolic law. + +### 5.2 Term interpretation and strict boundary + +- **OBS:** deterministic Kármán deletion table uses the same 40-step window and legacy DTW parent comparison. Removing the rear constant (`k_rear1`, leaving rear lift feedback) yields the largest listed degradation across re50/100/200/400 (Δ approximately −0.107/−0.094/−0.179/−0.191). Removing rear-lift feedback (`k_rear0`, leaving constant) degrades less (approximately −0.029/−0.042/−0.061/−0.049). Removing tested front feedback gives small mixed effects (approximately −0.0065/+0.0006/−0.0052/−0.0252). +- **INTERPRETATION:** within this declared deletion window and four named Kármán cases, the persistent rear counter-rotation is the dominant tested element; rear lift feedback is secondary; the tested front feedback is weak. +- **STRICT BOUNDARY:** this is term ranking under a fixed topology, fixed coefficients, fixed Legacy solver/contract, fixed case set, fixed 40-step window and declared DTW. It is not universal necessity, causal authority, sensitivity over all state space, or proof that the fitted constant is physically sufficient by itself. “Front weak” does not mean front action is identically zero in all deployments; its imposed odd generator can be active away from symmetry. + +### 5.3 Steady correspondence + +`article2-steady-analysis-20260720` reports a disturbance-free constant rear-rotation sweep `A=0…6`, with upper `−A`, lower `+A`; best listed sweep point `A=5`, similarity `0.9872116`. Canonical law deployment gives `0.9664944`; tail rear mean is `(-3.430589, +3.431828)`, matching fitted magnitude `3.431209` to rounding. This is **OBS** and a bounded **INTERPRETATION**: steady open-loop magnitude calibrates the order of the rear constant. It does not prove momentum balance, one-to-one deficit-to-rotation conversion, causality, or a mechanism. + +## 6. Case matrix and evidence ladder + +| Objective | Training/discovery | Validation/extension | Comparator/window | Status | +|---|---|---|---|---| +| Kármán | re-code 50/100/200/400; 200 PPO rows each; per-case and joint discovery, multiple seeds | L2 40; L3 200; long 400; named re-code 25/70/150/300, 200 each | target reference vs controlled role; native Legacy DTW; fixed formula | active, finite and pointwise | +| Illusion | trained 0.75L/1L/1.5L; feature pools actual/target/error; discovery/refit alternatives | L2/L3 historical; long 400; named size packages; standardized long role acquisition | target similarity alone is insufficient; compare physical zero | historical/negative | +| steady | no SR fitting objective; constant rear sweep | A=0…6 and canonical law deployment, 200-step contextual runs | disturbance-free downstream similarity | contextual | +| Vortex/Lamb/Taylor | archived exploratory route | no current accepted transfer | excluded archive | unsupported | +| Other cloak transfer | no authoritative SR transfer chain in current package | no pooled evidence with V5/CCD/OID | requires separate solver/contract | gap/unsupported | + +**Generalization boundary:** named unseen Kármán points are one realization per point with frozen coefficients. They support pointwise deployment observations, not continuous interpolation law, distributional robustness, uncertainty, or universal Reynolds behavior. Illusion size labels and old short target-similarity values do not establish analogous claims. + +## 7. Illusion SR: negative/historical result + +The Illusion runtime supports target forces, target sensors, harmonics and error features; Stage 2 search profiles included actual-only, actual-plus-error and actual-plus-target families. Yet selected retained formulas omitted target/error terms. That omission is evidence about the selected historical fit, not proof target information was unnecessary. + +The decisive boundary is the standardized long-window Legacy result: after warm-up, retained SR action decayed near physical zero; native and target-normalized SR comparisons were effectively equal to the physical-zero role and the mean field was nearly zero-role. Therefore old 200/400-step target-similarity numbers cannot be called Illusion SR efficacy, target tracking, cross-size generalization, term necessity or mechanism. Illusion topology B is separately rejected by a non-finite 40-step gate at 1L/1.5L; failed crossings/incomplete roles remain diagnostics. PPO/DRL Illusion capability is a separate supported runtime statement. + +## 8. Offline fit versus closed loop + +Offline action RMSE is evaluated on causally aligned PPO-visited states (197 rows/case). The canonical Kármán aggregate RMSE is 1.4435, 1.0895, 2.2860 and 2.1699 for re50/100/200/400 respectively; these are dimensionless `alpha` diagnostics. They do not measure state visitation, stability, wake matching or target performance. Closed-loop Stage 3 can visit states outside the PPO trajectory and is the acceptance arbiter. This distinction is a central SR lesson and must remain explicit in any later figure/table. + +## 9. Figure, data and script inventory + +| Item | Path | Role/status | +|---|---|---| +| Main executable scripts | `src/SR_analysis/stage_1_infer.py`, `stage_2_fit.py`, `stage_3_validate.py` | active Stage 1→2→3 | +| Contracts/checks | `src/SR_analysis/checks/`, `utils/`, `tests/` | replay/order/formula/data/metric/provenance gates; CPU-verifiable | +| Accepted inputs | `src/SR_analysis/data/runs/article-joint-data-karman-20260718/**`; corresponding Illusion family | immutable Stage 1 parents; Illusion historical | +| Formula/result families | `src/SR_analysis/results/runs/article-*`, `article2-*` | immutable; exact family purpose in `results/catalog.json` | +| Derived publication package | `src/SR_analysis/results/runs/article2-plotting-package-20260721/**` | five figures, tables, presentation pages; derived, no refit | +| Key tables | `tables/offline_action_rmse.md`, `tables/term_deletion.md`, `ablation_summary.csv`, `scaling_summary.csv`, `term_contributions_*.csv` | diagnostics/derived views; trace to parents | +| Long telemetry exports | `src/SR_analysis/results/runs/article2-long-timeseries-csv-20260720/**` | 400-step SR/PPO/target exports and manifests | +| Standardized collector | `src/drl_pinball/legacy_test/acquire.py` | common Target/PPO/SR/Zero role acquisition; serial Legacy CFD | +| Legacy runner/interface | `src/drl_pinball/legacy_test/`, `LegacyCelerisLab/` | historical plant compatibility; not V5 | +| Archive | `src/SR_analysis/archive/**` | excluded/superseded/diagnostic; may not execute | + +**Figure interpretation limits:** plotting outputs are derived. The flow-field package selects one exact same-run stable-cycle field by phase; it is a single snapshot, not ensemble/uncertainty or full-field identity. No figure alone upgrades a result to mechanism. + +## 10. Artifact/path/hash/result ledger + +| Evidence node | Identity/paths | Hash/provenance status | Result/claim status | +|---|---|---|---| +| Stage 1 Kármán | `data/runs/article-joint-data-karman-20260718/**` | re100 manifest binds Git `ca8ee5f…`, model SHA `148240c1…`, GPU UUID, config, norm source; other scenes have per-scene manifests | accepted input; four trained cases, 200 steps, 197 causal rows | +| Stage 1 Illusion | `data/runs/article-joint-data-illusion-20260718/**` | re1L binds model SHA `570fbdb0…`, Legacy target radius contract, Git `ca8ee5f…` | immutable historical input; not active positive claim | +| Canonical formula | `results/runs/article-refit-karman-topology-a-20260718` | exact formula artifact/source and expression hashes are required; catalog binds run ID | active bounded Kármán law | +| Mixed article manifest | `results/runs/article-joint-sr-final-20260718/evidence_manifest.json` | contains hashes and historical absolute paths; do not rewrite | authority index only; mixed Illusion wording superseded by current scope | +| Kármán L2/L3 | `article-L2-karman-20260718`, `article-L3-karman-20260718` | run IDs are immutable; manifests are provenance parents | 40-step screen; 200-step standard closed loop | +| Kármán long/gen | `article2-long-karman-20260720`, `article2-gen-karman-20260720` | named run identities; derived exports bind input telemetry | finite 400-step duration; named pointwise 200-step extensions | +| Kármán deletion | `article-ablation-*`, `article-scaling-L1-v2-20260718`, plotting `term_deletion.md` | variants retain parent formula/deployment hashes and term identities | bounded term ranking only | +| Steady | `article2-steady-analysis-20260720/**` | derived JSON/CSV; interpretation states source families | contextual magnitude calibration | +| Illusion long | `article2-long-illusion-20260720/**`, standardized `legacy_test` reproduction mapping | long manifests bind 400 rows; exact standardized storage/hash must be checked in situ | negative near-zero/zero-equivalent interpretation | +| Failure archive | rejected topology B, crossing-gate failures, incomplete campaigns, `src/SR_analysis/archive/**` | retained; no-clobber/immutable rules | diagnostic and boundary evidence | + +**Hash ledger limitation:** the checked-in human index and catalog bind many IDs, but this dossier did not recompute every SHA-256 or enumerate every external reproduction-storage object. The exact hashes are therefore to be read from each manifest/catalog at audit time, not inferred from truncated entries above. + +## 11. Transfer and adjacent-method boundary + +- **Steady:** contextual calibration only (Section 5.3). +- **Vortex/Lamb/Taylor:** explicitly excluded archive route; no current SR transfer claim. +- **Other cloak scenes / modern V5:** no silent pooling. A transfer result would require its own solver, geometry, normalization, action, Re, case/seed, metric/window and immutable artifact chain. +- **DRL:** supplies frozen PPO roles/trajectory source and baseline interface; this dossier does not reproduce DRL training or claim DRL generalization. +- **CCD:** may supply descriptive cross-analysis only; it does not validate SR causality or mechanism. +- **SINDy/tree-search:** future work may compare libraries, sparsity/topology recurrence, derivative/state definitions and closed-loop selection under the same contracts. It must not silently refit or overwrite the canonical formula, mix alignment conventions, or treat an offline sparse law as accepted without Legacy CFD. A fair comparison needs predeclared feature/library, split, coefficient freeze, formula identity, safety gate, closed-loop metric and baseline. + +## 12. Gaps and prohibited claims + +### Must re-check before manuscript use + +1. The round README exists at `docs/JFM_WYQ/ROUND1_BOTTOM_UP/README.md` and is the round-specific authority for requirements; preserve its evidence-index and non-manuscript constraints when this dossier is condensed. +2. Recompute and record full SHA-256 values for canonical formula files, formula pair, all parent/deletion variants, manifests, and external standardized role outputs. +3. Resolve storage mapping and enumerate August Target/PPO/SR/Zero role manifests, including exact standardized Illusion failure/near-zero artifacts. +4. Verify exact canonical formula file paths and formula-pair hash; the current catalog gives the immutable run ID and displayed law but not every leaf filename. +5. Reconcile all `article-*`/`article2-*` consumers and absolute historical paths before any relocation or figure regeneration. +6. Audit the complete Kármán 200/400 metrics by scene, comparator, window and realization; this dossier intentionally does not reconstruct unexposed tables. +7. If a physical mechanism claim is later needed, consult existing Undermind literature notes/PDFs and label literature evidence separately; do not use it to upgrade local SR observations. + +### Explicitly unsupported here + +No claim of universal Reynolds/size behavior, distribution-wide robustness, uncertainty, unique/global optimality, term necessity outside the declared deletion window, PPO equivariance, causal wake mechanism, momentum equality, physical DTW delay, Illusion tracking/efficacy/generalization, Vortex/other cloak transfer, or modern-V5 substitution is authorized by this dossier. + +## 13. Verification status + +- **Existing derivation:** equations/contracts as implemented and stated by current SR authority/code. +- **Independent check:** this dossier cross-checked order, `Re_D=re_code/2`, dimensional conversion, `G` action/raw mappings, canonical deployment algebra, DTW window semantics, deletion arithmetic and steady constant correspondence by source inspection and arithmetic reading. No CFD and no new scientific conjecture were performed. +- **New conjecture:** none. + +Recommended non-CFD follow-up: run focused SR CPU contract tests and `git diff --check` after this Markdown is reviewed. Do not launch CFD solely to verify documentation. + +## 14. Bottom-up handoff summary + +The index supports one compact active result: a hash/provenance-bound, symmetry-mapped Legacy Kármán policy surrogate whose tested closed-loop evidence is consistent with dominant persistent rear counter-rotation, secondary rear-lift feedback and weak tested front feedback over a named 40-step deletion window. Steady provides magnitude context; named unseen cases and 400-step runs remain finite/pointwise; Illusion SR is a negative historical route because long-window behavior collapses toward physical zero and does not establish target efficacy. The principal remaining uncertainty is not formula syntax but completeness of leaf-level hash/role ledgers and exact round/storage reconciliation. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/03_FIELD_CCD_OID.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/03_FIELD_CCD_OID.md new file mode 100644 index 0000000..0459183 --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/03_FIELD_CCD_OID.md @@ -0,0 +1,436 @@ +# Round 1 bottom-up evidence index — field / corrected CCD / OID + +> 状态:evidence index / dossier,非 manuscript prose。编制范围:`src/CCD_analysis/**`、`src/OID_analysis/**`,并索引其直接依赖的 Legacy acquisition、`q_target/q_blk/q_ctl`、constant-mean、mask/ROI/phase/action artifacts,以及与 SR、steady theory 的受限接口。 +> +> 事实权威:package authority 文档、可执行代码/测试、canonical manifest/artifact。Nowledge Mem 只作定位线索;Undermind 只检查已有 DynamisLab workspace 的方法文献/笔记,不启动 deep search,不以文献替代本地证据。 + +## 0. 读取结论与 fail-closed 总览 + +| 分析线 | 当前状态 | 本轮允许的科学层级 | 明确禁止升级 | +|---|---|---|---| +| corrected Kármán CCD | current / completed / bounded | inclusive wake ROI 均值估计量;DRL 相对 constant phase template 的 phase-coherent descriptive co-variation;稳定 rank-3 子空间;CCD/POD 子空间近等价 | causal response、paired counterfactual、mechanism、response time、explained variance、CCD 优于 POD、独立 realization uncertainty、global stability | +| OID active package | active method core / claim-free / CPU-only | 加权 snapshot POD、Schlegel LR/LE map、generated-range/right-inverse 数学、alignment/artifact contracts | active scene result、action importance、control authority、controllability、causal/mechanistic interpretation | +| July OID study | archive / conditional historical | 可报告 provenance、合同演进、传感器 gate 通过与 force gate 失败的历史事实 | 任何 importance 排名、force positive result、action result、paper conclusion、`COMPLETE` | + +**总边界:** CCD 只能描述共变,不给出 causality/response/mechanism。OID 当前不承载正面科学结果。archive 只用于解释撤回路线和失败原因,不能复活结果。 + +## 1. Sources inspected and authority map + +### 1.1 Repository authority + +**CCD current reader entry** + +- `src/CCD_analysis/README.md` +- `RESULTS_INDEX.md`:number → artifact → figure lookup +- `MATHEMATICAL_DERIVATION.md`、`karman_dynamic/CORRECTED_MATH_CONTRACT.md` +- `CLAIMS.md`、`FINAL_RESULTS.md`、`WRITING_HANDOFF.md` +- `FIGURES_AND_DATA.md` +- `EXECUTION_CHECKPOINT.json`、`artifact_catalog.json` +- code: `karman_dynamic/cycle_template_ccd.py`, `domain_comparison.py`, `mode_diagnostics.py`, `pod_baseline.py`, `phase.py`, `contracts.py`, `artifacts.py`; acquisition code under `acquisition/`; tests under `tests/`. + +**OID current method entry** + +- `src/OID_analysis/README.md` +- `METHOD.md` +- `SCIENTIFIC_RESET.md`, `SCIENTIFIC_RESET_CHANGESET.json` +- `PHYSICS_CONTRACT.md`, `HANDOFF.md` +- active implementation: `v2/analysis.py`, `v2/alignment.py`, `v2/artifacts.py` +- active tests: `tests/test_schlegel_oid.py`, `test_alignment_artifacts.py`, `test_physics_contract.py`. + +**OID historical/conditional source** + +- `archive/studies/2026-07-two-scene-conditional/STATUS.md` +- its `presentation/docs/PIPELINE.md`, `RESULTS.md`, source scripts, audits, freeze and migration manifests +- `archive/legacy_oid_v1/` and `archive/v2_development_code/`: provenance only. + +### 1.2 Machine canonical roots and publication sets + +**CCD canonical root:** +`/home/frank14f/optane/DynamisLab/ccd/karman-dynamic/canonical/` + +Canonical entries from `src/CCD_analysis/artifact_catalog.json`: + +| role | path | schema | manifest SHA-256 | status | +|---|---|---|---|---| +| ROI mean | `.../results/roi-mean` | `ccd-karman-roi-mean/v2` | `f7f6141042678e52314a4d8f76d589108da8e844c8ce504f8f523a6f88a17e73` | current authority | +| corrected wake CCD | `.../results/cycle-template-ccd-review-fix-per-cycle-20260808T1736+0800` | `ccd-karman-cycle-template/v1` | `b114fbcc5f821034829ca3771ac5ba13df4b75df312b0615b662f81a9e5737d8` | current authority | +| preferred pinball-inclusive CCD/POD | `.../results/pinball-domain-20260809T1925+0800` | `ccd-karman-pinball-domain/v1` | `7e107a895364ed3e34abf2be513a3ce9e12736766ec6383c5b831891802d5828` | preferred derived result | +| preferred reader publication | `.../publication-pinball-domain-20260809T1925+0800` | `ccd-karman-pinball-publication/v1` | `31888f8eeb6c70dd9f0ff3449fa879f44abf381338ec261b0e45f69603691fdd` | reader view | +| predecessor | `.../results/pinball-domain-20260809T1651+0800` | `ccd-karman-pinball-domain/v1` | `8b952d5dd8cf9813a241da31295497e5c79db6df7dc4ed12b95a6706f99e37b6` | superseded; retain, do not promote | + +The corrected primary publication transaction is `.../publication-review-fix-per-cycle-20260808T1736+0800`, bound to `roi-mean`, corrected cycle-template result, and per-cycle DRL/constant phase products. Its review-fix result manifest is the above `b114...`; `EXECUTION_CHECKPOINT.json` also records publication manifest SHA `a6f0c55515b0e4a3b8980174988bf6bbea3617d60f8648aab25a7ffa0a2a24cd` for the validated review-fix publication. Do not collapse the primary wake-only result and its pinball-inclusive derived sibling into one artifact. + +**Repository reader view:** `src/CCD_analysis/data/karman-dynamic/canonical/publication-pinball-domain-20260809T1925+0800/`; dense source remains external. PNG/PDF are presentation assets; `plot_data.npz/json` is the redraw interface, not replacement authority. + +**OID canonical/freeze identities:** + +- Final historical audit: `runs/active-two-scene-v2/OID_PHASE4_AUDIT_20260723T1510Z.json`, SHA-256 `9358105c7199793a2fd810885044295350da165a0f8e9026734ca1a51fc52ed8`. +- Conditional freeze: `provenance/freeze/OID_CONDITIONAL_FREEZE_20260723T173300Z.json`; this is an inventory, not strict `COMPLETE`. +- Relocation/migration binding: `lineage/CURRENT_STATE_MIGRATION_MANIFEST.json`; `archive/RELOCATION.md` and `archive/RUNS_RELOCATION_MANIFEST.json` govern external payload recovery. The reset moved 516 historical files; no historical payload is thereby active. + +## 2. Estimands, field variables, roles, and chains + +### 2.1 General three-field notation + +For the Legacy correction-field vocabulary: + +\[ +q_{in}=\text{no-pinball inlet/reference field},\quad +q_{blk}=\text{passive pinball field},\quad +q_{ctl}=\text{controlled pinball field}. +\] + +\[ +\Delta q_{blk}=q_{blk}-q_{in},\quad +\Delta q_{ctl}=q_{ctl}-q_{blk},\quad +\Delta q_{tot}=q_{ctl}-q_{in}=\Delta q_{blk}+\Delta q_{ctl}. +\] + +This decomposition is an estimand contract, not a causal decomposition. In OID, `q_ctl-q_blk` is a same-parent paired closed-loop branch difference. Feedback alters future state and action together; it is not an isolated commanded-action intervention. + +For corrected CCD the primary fields are role means and phase snapshots from `q_target`, `q_zero`, `q_constant_mean`, and `q_DRL`; the corrected dynamic field is not the old generic `dq_ctl` route. Constant and DRL cycles are not paired. + +### 2.2 Field vector and mask + +- Nondimensional Cartesian coordinates `x_D,y_D`; persisted velocity is already `q/U0`, so no second division by `U0`. +- For selected fluid points `K`, `M_p=|K|`; component-major vector: + \[ + q=[u_x(k_1),\ldots,u_x(k_{M_p}),u_y(k_1),\ldots,u_y(k_{M_p})]^T, + \quad M=2M_p. + \] +- Weight is coordinate quadrature `w_xw_y`; duplicated for both velocity components: `W=diag(w_1,...,w_Mp,w_1,...,w_Mp)`. +- CCD wake-only: ROI `34<=x/D<=54`, `|y/D|<=5`, exact intersection of the four solver-fluid masks, `M_p=80,200`, `M=160,400`. +- CCD pinball-inclusive sibling: `29<=x/D<=54`, `|y/D|<=5`, `99,264` common fluid points, `M=198,528`. +- Plot array convention: stored `(x-index,y-index)`; plotting uses transpose; front/upper/lower body order; fixed regions geometry `29–32D`, near wake `32–40D`, middle `40–47D`, far wake `47–54D`. + +### 2.3 Mean-field estimands + +For role `r`, coordinate-weighted target error: + +\[ +E_r=\left[\frac{\sum_{k\in K}w_k\|\bar q_r(k)-q_T(k)\|_2^2}{\sum_{k\in K}w_k}\right]^{1/2}. +\] + +The exact mean identity is: + +\[ +\bar q_D-q_T=(\bar q_0-q_T)+(\bar q_C-\bar q_0)+(\bar q_D-\bar q_C). +\] + +The reported scalar error reductions are differences in `E`, not energy reductions or causal effects. + +**Canonical corrected Kármán ROI numbers** (`roi-mean` artifact; four-role common mask): + +| role | `E_r` | +|---|---:| +| zero | `0.4694352273` | +| constant_mean | `0.1110140739` | +| DRL | `0.0857787860` | + +Derived additive increments: + +- zero→constant mean: `0.3584211534`; +- constant mean→DRL: `0.0252352879`; +- zero→DRL total: `0.3836564413`; +- mean share `0.3584211534/0.3836564413 = 93.42%`; +- remaining dynamic increment share `6.58%`. + +**Allowed wording strength:** within this exact Legacy Kármán case, ROI, common mask, mean estimator and window, constant mean accounts for most of the measured zero-to-DRL target-error reduction; the DRL dynamics add a smaller measured increment. This does not identify the responsible actuator, prove downstream positive-velocity generation, prove deficit compensation as a mechanism, or establish that feedback is unnecessary. “Positive downstream velocity” can be used only as a bounded description of a plotted/field difference if the exact field artifact, sign convention, ROI and comparator are stated. “Deficit compensation” is at most a candidate physical interpretation consistent with the mean-field pattern and SR/steady context—not a CCD/OID-proven mechanism. Do not write “the controller restores momentum” or “causes compensation”. + +### 2.4 Phase/dynamic estimand + +There are 19 retained DRL cycles and 10 bins (`N=190`), with sample index `j=10c+b`. Constant template: + +\[ +\hat q^C_b=\frac1{19}\sum_cq^C_{c,b}. +\] + +Each role is centered over its own retained ensemble: + +\[ +U_{c,b}=(q^D_{c,b}-\bar q_D)-(\hat q^C_b-\bar q_C). +\] + +`U` is a phase-conditioned reference residual. It is not paired DRL/constant counterfactual evidence; no interpolation, lag, wrap, temporal PSD, or cross-role cycle pairing is used. + +Action observable: same-boundary effective action in native order `(front, upper, lower)`; exact retained DRL physical action mean removed, followed by empirical centering. Requested normalized action, requested physical action, EMA-effective action and field-time effective action must not be silently interchanged. + +## 3. Corrected CCD operator, modes, symmetry, phase + +### 3.1 Operator and dimensions + +With field snapshots as columns `U∈R^(M×N)` and action observables `P∈R^(3Q×N)`, `Q=1`: + +\[ +A=\frac{P_c(W^{1/2}U_c)^T}{N\sqrt{3Q}},\quad A=L\Sigma V^T. +\] + +No whitening, standardization, lag, wrap, field-energy normalization, or POD preprojection. Physical modes `Φ=W^{-1/2}V`, so `Φ^TWΦ=I`; coefficient `c_ij=φ_i^TWU_j`. Singular values are cross-correlation strengths, not field energy, explained variance or reconstruction fractions. + +### 3.2 Current numbers + +Primary wake-only result (`N=190,Q=1,M=160400`): + +- singular strengths: `0.0174141920`, `0.0069694895`, `0.0010500356`; +- numerical rank: 3; +- least-favourable retained-boundary bin/origin check: rank-3 projector cosine `0.9947903592`; +- largest relative singular-value shift `0.0766020533`; +- leave-one-cycle-out leading projector cosine `0.9997247674`; +- alternatives: 8 bins spectrum `[0.0172112894,0.0067331096,0.0009696007]`, cosine `0.9947903592`; 12 bins `[0.0170742270,0.0071347287,0.0011180038]`, cosine `0.9977713810`; half-shift 10 bins `[0.0175962424,0.0068663334,0.0010454157]`, cosine `0.9982476661`. + +Only the rank-3 subspace is stability-supported; individual vectors can flip sign and rotate within near-degenerate subspaces. A global sign flip `(φ_i,c_i)→(-φ_i,-c_i)` is identical. + +### 3.3 Pinball-inclusive CCD/POD comparison + +Preferred derived result keeps the same `19×10` samples, action coordinates, centering and `Q=1`, but extends domain to include bodies (`29–54D`). Full-fit weighted POD uses `G=U_c^TWU_c` and is not CCD-guided. Rank-3 principal cosines between CCD and raw POD field subspaces: + +`[0.9999616609, 0.9998971005, 0.9976439804]`; declared minimum bin/cycle stability cosine `0.9974651867`. + +Interpretation: CCD and raw POD span essentially the same field subspace in this tested object/domain. CCD’s bounded added information is action-coordinate association (`front`, `rear-symmetric`, `rear-antisymmetric`), not a distinct field decomposition and not evidence that CCD is superior to POD. Procrustes-aligned POD is visual registration only. + +### 3.4 Three action-associated modes + +- Left observable coordinates are native `front`, `upper`, `lower`; publication re-expresses them as `front`, `rear-symmetric`, `rear-antisymmetric`. +- Mode 1 and 2 are predominantly antisymmetric (`0.972`, `0.930` diagnostic parity measures); mode 3 predominantly symmetric (`0.833`). +- Phase reconstructions use bins nearest `0,π/2,π,3π/2`; harmonic amplitudes/phases are circular diagnostics over each cycle/bin array, not temporal PSD frequencies. Phase maps are registered coordinate partitions, not discovered wake boundaries. +- Figures/data: `01_domain_estimand`, `02_ccd_mode_identity`, `03_phase_reconstruction`, `04_raw_pod_vs_ccd`; source fields include `ccd_mode_velocity`, `ccd_mode_rotation_proxy`, `left_action_physical_coordinates`, representative phase arrays, `plot_data.npz/json`. +- Body-local rotation proxy is a Gaussian localized signed angular-momentum-like visualization; it is not wall vorticity. Complete-stencil solver-fluid vorticity is auxiliary. + +**Candidate interpretation (not established):** symmetry-separated rear action coordinates may organize the antisymmetric/symmetric field components, while phase-resolved reconstructions may be compatible with a periodic correction pattern. This is a descriptive organizational hypothesis only; no lag/phase offset is a response time or causal path. + +## 4. Acquisition and provenance contracts + +### 4.1 Legacy acquisition boundary + +Corrected CCD source chain is LegacyCelerisLab. The package contract records case `karman_re100`, `Re_code=100` based on `2D`, physical `Re_D=50`, `U0=.01`, `nu=.004`, body order and geometry, source/config/model bindings, decoder identity, masks, coordinates, timeline, DDF/FIFO state, action order/units, and hashes. Legacy and modern CelerisLab V5 are separate chains; no V5 replay may replace the Legacy CCD evidence. + +`q_target`, `q_blk`, `q_ctl` are role contracts. `q_target` is a desired/reference trajectory with case-specific target bodies, not same-checkpoint counterfactual. `q_blk` is passive zero-action pinball; `q_ctl` is frozen-policy controlled branch. Illusion `q_ctl` requires strict +11D history/replay compatibility before production; the CPU compatibility certificate is runtime compatibility only, not accuracy/stability/phase/mechanism validation. + +Acquisition must fail closed on missing/moved roots, duplicate/non-increasing times, nonfinite arrays, mismatched schema/hash/coordinates/masks, incomplete exact joins, stale telemetry or wrong action lineage. No silent trim, nearest-time join, interpolation, timestamp tolerance or block wrap. + +The active acquisition contract passed static CPU checks, but published/smoke status must be read from current evidence; rejected production paths remain rejected. No CFD/CUDA was run for this index. + +### 4.2 q roles and direct-dq distinction + +OID canonical products use same-parent branches per realization: + +1. `controlled` = PPO `q_ctl`; +2. `zero_baseline` = zero-action `q_blk` used for subtraction; +3. `baseline_twin` = independent numerical twin used only for reproducibility gate. + +Exact pairing requires equal `sample_ids`, lattice steps and times; field clock is distinct from control clock. Historical canonical crop is `x=360:1000`, all y, stride 8; reduced shape `80×64`; C-order `ux` then `uy`; exact Legacy solid rasterization; uniform cell quadrature, zero solid weights; Kármán fluid/solid counts `5025/95`, Illusion `5024/96`. These are historical OID product contracts, not current active scientific claims. + +### 4.3 Phase/action artifacts + +For CCD, phase artifacts are the immutable `phase/{drl,constant_mean,target,zero-failure}` families and review-fix siblings listed in `EXECUTION_CHECKPOINT.json`. The primary zero phase product is `FAILED_CLOSED`; it must not be used as a positive role. Corrected CCD uses retained independent phase alternatives rather than Fourier-resampling the primary field. + +For OID, exact/delayed pairing is implemented as `b(t+τ)=C(τ)a(t)` only where the future sample exists in the same declared segment; no padding, nearest match, wraparound or cross-segment pairing. Circular shifts occur only inside the explicitly labelled null. Delay is a declared analysis parameter, not physical causality. + +## 5. OID method core: definitions, valid mathematics, reset + +### 5.1 Active mathematical objects + +For centered state coefficients `a` and observable POD coordinates `b`, forward map is fitted regression: + +\[ +C=Σ_{ba}Σ_{aa}^{+},\qquad \hat b=Ca. +\] + +This is not raw cross-covariance. LR inverse: + +\[ +L_R=Σ_{aa}C^T(CΣ_{aa}C^T)^+, +\] + +is the minimum empirical state-reconstruction MSE among exact linear inverses on the generated range. LE inverse: + +\[ +L_E=G^{-1}C^T(CG^{-1}C^T)^+, +\] + +minimizes declared positive-definite state-field `G`-norm among exact generated-range inverses. `G` is a project metric, not actuator energy, control cost, controllability Gramian, or Navier–Stokes energy principle. + +Valid standard mathematics: weighted POD orthogonality; method of snapshots; least-squares normal equations; right-inverse identities on `range(C)`; sign-invariant MAC/principal angles/projector similarity; exact/delayed pairing; atomic artifact validation. Existing derivation / method theorem is distinct from independent verification in tests; no new physical derivation was performed here. + +Literature method map, existing Undermind notes and active `METHOD.md`: Schlegel et al. JFM 697 (2012), DOI `10.1017/jfm.2012.70` for LR/LE construction; Sirovich (1987) for snapshot POD; Adrian (1994) for stochastic estimation; Borée (2003) for EPOD/LSE relation; Everson & Sirovich (1995) for gappy POD boundary; Theiler et al. (1992) for surrogate-data context. These references do not license local importance, mechanism or causality claims. + +### 5.2 Why OID was reset + +The July two-scene line was reset because: + +- sensor observables are local velocity functionals inside the state domain, so high sensor R² is partly self-observation; +- force is an integrated surface projection with different dimension, symmetry, noise and conditioning; force jobs failed their all-fold gate; +- action is generated inside feedback, so delayed association does not isolate commanded action from state-dependent policy response; +- `q_ctl-q_blk` is a closed-loop branch difference, not autonomous perturbation/tangent state or causal intervention; +- legacy products called PLS/cross-covariance SVD directions OID without fitted Schlegel propagator and distinct LR/LE inverses; +- earlier contiguous holdout was not independent-realization validation; +- old observables used absolute controlled telemetry rather than exact paired controlled-minus-blocked deltas; +- field telemetry was once read at control boundaries, yielding invalid zero intermediate values; corrected lineage requires field-time observation; +- index/replay resemblance did not establish exact same-parent alignment; canonical products now require exact IDs/steps/times and a separate numerical twin; +- archived reduced mask was defective and required exact Legacy rasterization rebuild; +- mixed numerical defaults, fixed-selection controls, and “phase surrogate” wording understated conditioning/selection effects; +- historical `COMPLETE` cannot be reconstructed from relocated artifacts, so final audit remains conditional. + +**Disposition:** all old runners, plots, analyses, freeze builders, contradiction evidence and payloads remain archive/provenance. They are not active instructions and must not be imported or executed as current route. + +### 5.3 What remains reusable + +Reusable definitions/contracts: weighted snapshot POD; diagonal spatial quadrature and exact solid-zero masks; field/observable metric declarations; LR/LE generalized inverse equations; generated-range restriction; sign-invariant mode/subspace comparisons; same-parent exact pairing; delayed sample semantics; circular-shift null with explicit exclusions; atomic no-clobber artifact/hash validation; physics coordinate/body/action oracle. Reusable numbers are only historical audit facts with conditional status, never positive mechanism results. + +## 6. Historical OID ledger (reportable only as negative/conditional) + +Final audited conditional package: `runs/active-two-scene-v2/OID_PHASE4_AUDIT_20260723T1510Z.json`. + +| scene / observable | fold values (observed R²; p; gate) | status and allowed use | +|---|---|---| +| `karman_re100/delta_sensors` | r1 `.964749; .001; pass`; r2 `.967141; .001; pass`; r3 `.973321; .001; pass` | conditional historical association only for three declared realizations; self-observation caveat | +| `karman_re100/delta_forces` | r1 `.836206; .001; fail`; r2 `.867670; .001; pass`; r3 `.872087; .001; pass` | not promoted because all-fold gate fails; descriptive/negative-control record only | +| `illusion_1.0L/delta_sensors` | r1 `.936949; .001; pass`; r2 `.928960; .001; pass`; r3 `.939764; .001; pass` | conditional historical association only; not importance or mechanism | +| `illusion_1.0L/delta_forces` | r1 `.701865; .001; pass`; r2 `.694162; .001; pass`; r3 `.480277; .001; fail` | not promoted; descriptive/negative-control record only | + +Other audit facts: 363 Kármán field samples at 317-step spacing (control interval 800); 642 Illusion samples at 257-step spacing (control interval 600); candidates ranks `(4,8,12)`, lags `(0,1,2)`; 999 periodic-excluded circular shifts/fold; fixed `rcond=1e-12`; `H=I`; no regularization; 3 LORO folds. Only three declared realizations exist per scene; this is not broad stochastic independence. No field-mode figure is promoted. + +Do **not** put the historical positive sensor values into a paper as “sensor importance”, and do not report the force rows as positive force-OID evidence. The active package has no active LR/LE action result. + +## 7. Figure / data / script inventory + +### 7.1 Current CCD figures and data + +Preferred reader-facing four groups under `src/CCD_analysis/data/karman-dynamic/canonical/publication-pinball-domain-20260809T1925+0800/`: + +1. `01_domain_estimand`: domain, bodies, partitions, masks, residual definition; +2. `02_ccd_mode_identity`: `u_x/u_y`, action coordinates, descriptive body-local rotation proxy; +3. `03_phase_reconstruction`: raw, CCD rank-2/rank-3, POD rank-3 phase-bin means; +4. `04_raw_pod_vs_ccd`: CCD/POD modes, reconstruction curves, principal cosines. + +Machine redraw fields: `x_D(1280)`, `y_D(512)`, `domain_mask(1280,512)`, `point_weights(99264)`, `ccd_mode_velocity(3,2,1280,512)`, `ccd_mode_rotation_proxy(3,1280,512)`, `ccd_modes(198528,3)`, `ccd_left_functions(3,3)`, `left_action_physical_coordinates(3,3)`, representative phase bins. Do not digitize PNG; preserve source manifest hash, mask, orientation, limits and plotting parameters. + +### 7.2 OID current scripts/tests + +Active `v2` code is method-only: `analysis.py` (POD, forward regression, LR/LE), `alignment.py` (exact/delayed pairing), `artifacts.py` (atomic/hash validation). Tests are synthetic/source-oracle tests for metrics, rank deficiency, zero weights, exact pairing, artifact integrity, and body/action physics. There is no active scene runner, CUDA path, plotting path, audit publisher or redo command. + +Historical source scripts include `run_phase3_5_formal.py`, `rebuild_phase3_canonical.py`, `plot_phase4_summary.py`, audit/freeze builders and archived presentation scripts. Inventory is provenance/navigation only; do not execute as active analysis. + +### 7.3 Archive figure/data disposition + +Historical OID summary PNG/PDF and NPZ/JSON models are useful to reconstruct what was tried and why it was downgraded. They are not current figures. The relocation manifest and SHA-256 inventory must be checked before any staging restore; restore only into an empty staging destination; never restore over compact active tree; never use archived defective mask as final product. + +## 8. Conflict and gap list + +1. **Corrected CCD source/action sign conflict:** `PHYSICS_CONTRACT.md` records an archived OID tuple `[0,-5.1,+5.1]` versus stated CCD `[0,+5.1,-5.1]`; current source/doc history also contains disagreement. Treat as unresolved source/documentation conflict, not corroboration. Do not infer sign from labels. +2. **Old correction-field CCD versus current corrected CCD:** Undermind/repository July notes contain old `dq_ctl/dq_tar`, delayed/reduced CCD and positive mechanism language. Current August package explicitly supersedes that route; no old overlap/R² is current CCD evidence. +3. **Phase-domain CCD history:** old temporal/phase publication is exploratory/descriptive and downgraded; current corrected cycle-template artifact is authority. Fourier-resampled sensitivities are forbidden for current stability. +4. **OID status contradiction:** archived `RESULTS.md` contains conditional promoted sensor scores, while active README/reset says no active scientific result. Resolve by status precedence: archive facts may be indexed as conditional historical; no active claim. +5. **OID `COMPLETE` gap:** relocated payload and conditional freeze bind artifacts but do not reconstruct strict-loader `COMPLETE`; no promotion. +6. **Zero phase gap:** CCD execution checkpoint marks canonical zero phase product `FAILED_CLOSED`; do not treat it as a successful current role. +7. **Independent-realization gap:** CCD has 19 cycles within one retained DRL lineage and constant ensemble template; OID has three declared realizations but not broad stochastic population. Neither supports general uncertainty. +8. **Causal intervention gap:** no matched randomized actuator intervention, open-loop perturbation, or branch design isolates action effect from state-policy feedback. +9. **Wall/mechanism resolution gap:** body-local proxy is not wall vorticity; available field resolution/diagnostics do not close boundary vorticity, pressure, viscous momentum or energy mechanism. +10. **Cross-chain gap:** Legacy CCD/OID/SR and modern V5/steady contracts differ; no silent merge or metric transfer. + +## 9. Cross-map: SR constant component, steady theory, and non-crossable links + +### 9.1 Comparable at bounded level + +- Both corrected CCD mean analysis and Legacy SR/steady context point to a persistent rear counter-rotation / near-constant component as a candidate backbone. CCD can say the constant-mean arm dominates the tested ROI error reduction; SR can say the fitted rear constant is the dominant tested term in its deletion window; steady can say an accepted constant-rotation endpoint has low `E_inf_vector` under its own uniform-inlet/free-slip `Re_D=50` contract. +- These are compatible observations about a recurring constant component, not a matched intervention or equality of physical amplitude. +- A future same-plant, same-role, same-mask comparison could test whether the mean CCD increment spatially resembles SR/steady correction fields. Current package does not establish that mapping. + +### 9.2 Explicitly non-comparable / cannot cross-chain + +- CCD ROI mean error `E` versus steady cross-section `E_inf_vector` at `x/D=10`: different domain, norm, target/inlet reference and solver/plant contract. +- Legacy SR DTW versus CCD mean-field error or CCD singular strength: different observables, windows and estimands; DTW lag is not physical delay. +- Legacy SR action formula versus CCD left action function: former is an `obs→act` symbolic deployment interface; latter is action-coordinate association with a residual field; neither proves the other’s terms or necessity. +- Steady `q_ctl` versus `q_in` endpoint versus OID `q_ctl-q_blk`: steady explicitly treats `q_blk` as non-ranking; OID requires paired same-parent subtraction. Do not subtract `q_blk` again in steady. +- Steady accepted branch `[0,+Omega,-Omega]` and historical opposite-sign OID/CCD tuples are not interchangeable. Current sign oracle and body order win over prose labels. +- Modern V5 compact policies/results cannot replace Legacy acquisition underlying current CCD/SR evidence. + +## 10. Candidate physical logic (hypothesis ledger, not conclusion) + +H1. A persistent rear-rotation component may alter the pinball-scale mean wake in a way consistent with reduced target error / downstream deficit compensation. Current evidence supports only “consistent with” under exact comparator; matched intervention and budget closure are missing. + +H2. A smaller dynamic correction may be phase-coherent and action-associated while living in a field subspace that is also energy-dominant POD. The CCD result supports the descriptive algebra; whether it corresponds to a physical feedback response remains open. + +H3. Symmetry decomposition may separate rear-symmetric and rear-antisymmetric action coordinates from predominantly symmetric/antisymmetric field structures. Current parity numbers are diagnostics and basis-dependent; subspace tests are safer. + +H4. A possible organizational chain is observation → action → near-body correction → body-connected wake → downstream signature. SR constrains only observation→action; CCD/OID would need interventional, time-aligned and independent evidence to test later arrows. This chain is a future test design, not a finding. + +H5. Steady low-deficit endpoint and Legacy constant component may share a base-bleed/gap-jet family at the level of qualitative physical framing. Potential circulation cancellation failed; no NS mechanism closure or cross-solver parity exists. + +## 11. Candidate figures / data / script needs for later rounds + +**Reusable current CCD panels:** four preferred groups in §7.1, with source hashes and plot-data contract. The panels are reader-facing derivatives, not new CFD evidence. + +**Not reusable as positive panels:** old correction-field panorama, old force/signature OID panels, historical Illusion positive figures, any archived mode plot labelled importance/causality, and any figure without exact source manifest/mask/timeline identity. + +**Future evidence needed before stronger claims:** + +- matched constant/action interventions with same parent and randomized/controlled action; +- independent DRL parents or genuinely independent cycle blocks with declared uncertainty; +- phase and clock parity across roles, exact field-time action history; +- mask/ROI sensitivity and grid/solver parity; +- wall-resolved vorticity/pressure/shear or closed control-volume momentum/energy budgets; +- OID sensor-excluded/upstream-only states, explicit measurement-operator baseline, force symmetry coordinates, independent parents and action interventions; +- if OID becomes active again, a new study ID/run IDs and complete source/config/model/checkpoint/FIFO/DDF/clock/action/geometry/metric/hash manifest. + +## 12. Number / formula / artifact ledgers + +### 12.1 Number ledger + +| ID | number | definition / scope | authority | status | +|---|---:|---|---|---| +| N01 | 0.4694352273 | zero ROI mean target error | CCD `roi-mean` | current | +| N02 | 0.1110140739 | constant_mean ROI mean target error | CCD `roi-mean` | current | +| N03 | 0.0857787860 | DRL ROI mean target error | CCD `roi-mean` | current | +| N04 | 93.42% | share of zero→DRL error reduction from zero→constant | derived exact scalar ledger | bounded current | +| N05 | 6.58% | constant→DRL dynamic increment share | derived exact scalar ledger | bounded current | +| N06 | 190 | CCD samples = 19 cycles × 10 bins | CCD manifest | current | +| N07 | 160400 | wake-only CCD field dimension | CCD manifest | current | +| N08 | 0.0174141920, 0.0069694895, 0.0010500356 | primary CCD strengths | CCD manifest | current descriptive | +| N09 | 0.9947903592 | least-favourable rank-3 projector cosine | CCD stability artifact | bounded current | +| N10 | 0.9999616609, 0.9998971005, 0.9976439804 | pinball CCD/POD rank-3 principal cosines | preferred derived result | bounded current | +| N11 | 0.9974651867 | pinball-inclusive minimum declared stability cosine | preferred derived result | bounded current | +| N12 | 0.964749, 0.967141, 0.973321 | historical Kármán sensor R² folds | OID final audit | conditional historical only | +| N13 | 0.836206, 0.867670, 0.872087 | historical Kármán force R² folds | OID final audit | force not promoted | +| N14 | 0.936949, 0.928960, 0.939764 | historical Illusion sensor R² folds | OID final audit | conditional historical only | +| N15 | 0.701865, 0.694162, 0.480277 | historical Illusion force R² folds | OID final audit | force not promoted | +| N16 | 0.0231672176752314 | steady `E_inf_vector` at `x/D=10`, `s=3.55` | steady current result | contextual, separate chain | + +### 12.2 Formula ledger + +| formula | role | classification | +|---|---|---| +| `E_r` weighted ROI mean target error | CCD performance estimand | existing derivation / canonical result | +| `U_(c,b)=(q_DRL-c mean)-(constant template_b-c mean)` | corrected phase residual | existing derivation / canonical result | +| `A=P_c(W^1/2 U_c)^T/(N√3)` | literal weighted CCD operator | existing derivation / code-verified | +| `Φ=W^-1/2V`, `Φ^TWΦ=I` | physical weighted modes | existing derivation / code-verified | +| `G=U_c^TWU_c`, principal cosines of `Φ^TWΨ` | raw weighted POD comparison | existing derivation / code-verified | +| `C=Σ_baΣ_aa+`, `L_R`, `L_E` | OID method core | existing method / tests independently verify finite-dimensional identities | +| `Δq_ctl=q_ctl-q_blk` | OID paired branch difference | established contract, not causal effect | +| `Re_D=Re_code/2` for Legacy `2D` reference | scale convention | code/document contract | +| `(Uw,Vw)=(-ωr_y,ωr_x)` | wall/action oracle | source-derived physics contract | + +No independent numerical linear-algebra run was needed for this index. If later run in `pinball_math`, label it **independent check**, not new evidence; any new physical interpretation is **new conjecture**. + +## 13. Search and use record + +- **Nowledge Mem:** context bundle/Working Memory was read at start; targeted memory search covered corrected Kármán CCD, mean-field boundary, OID reset/history, q roles and evidence authority. Memory was used only for routing and cross-check; repository artifacts overrode it. No durable memory was added because this file is the requested repository index and no new project decision was made. +- **Undermind:** called orientation, inspected existing `DynamisLab` workspace `4383d145-2c80-4991-8a9c-7ac2dd683438`, browsed existing CCD/OID files and method-reference folders. No deep search started. Existing workspace notes for Schlegel/LR-LE, CCD/PCD and observable decomposition were treated as literature pointers only. The active method bibliography is recorded in `src/OID_analysis/METHOD.md`; no external paper was used to upgrade internal evidence. +- **No CFD/GPU:** this indexing task ran no CFD, no CUDA, and did not modify evidence artifacts. + +## 14. Final fail-closed checklist + +- [x] `src/CCD_analysis/**` current authority and archive boundary indexed. +- [x] `src/OID_analysis/**` active method core and conditional historical study indexed. +- [x] field variables, estimands, masks, ROI, weights and dimensions recorded. +- [x] corrected mean numbers, mean/dynamic decomposition and bounded wording recorded. +- [x] CCD operator, POD comparison, rank/strength/stability, symmetry, phase and figure inventory recorded. +- [x] explicit noncausal/nonmechanistic CCD boundary recorded. +- [x] OID reset reasons, reusable definitions and prohibited results recorded. +- [x] q target/block/control and acquisition/provenance contracts recorded. +- [x] canonical roots, publication sets and hashes recorded. +- [x] SR constant component and steady theory comparable/non-comparable map recorded. +- [x] conflict/gap list and candidate physical logic recorded. +- [x] no article-style narrative, no CFD, no evidence modification, no commit. + +**Handoff boundary:** downstream synthesis may use this file as an index. It must preserve status labels (`current`, `bounded`, `contextual`, `historical`, `conditional`, `failed_closed`, `prohibited`) and must not turn candidate physical logic into manuscript fact. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/04_STEADY_THEORY_AND_CROSSMAP.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/04_STEADY_THEORY_AND_CROSSMAP.md new file mode 100644 index 0000000..0570da1 --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/04_STEADY_THEORY_AND_CROSSMAP.md @@ -0,0 +1,250 @@ +# Round 1 bottom-up index — steady theory and cross-map + +**Role / status.** This is an evidence-navigation dossier, not JFM prose. Repository contracts, current manifests, code/tests, and immutable artifacts decide project facts; Nowledge Mem and Undermind are navigation/context only. Scope is the active `src/steady_pinball_theory/**` package, remaining `src` cross-navigation, and explicit failed/open gates. No CFD or new evidence was run for this index. + +## 1. Scope and question + +Primary question: under the canonical uniform-inlet, free-slip-channel, finite-Re steady contract, what is actually established about a rear-only constant-rotation low-deficit endpoint, and what analytical or conservation route could connect wall actuation to the observed profile without overclaiming a mechanism? + +Required separation: + +- **Outer theory:** incompressible irrotational Euler/Neumann fields with prescribed geometric circulations, unbounded or free-slip strip. +- **Finite-Re observation:** current-v5 endpoint fields and bounded diagnostics at `Re_D=50`. +- **Mechanism/stability:** not closed. Potential flow cannot supply viscous no-slip vorticity, separation, drag, torque, base pressure, or global stability. +- **Cross-project context:** SR/CCD/OID/Legacy/V5 are linked only where their plant, estimator and evidence role match; labels and memory never merge chains. + +## 2. Sources inspected and authority map + +### 2.1 Package authority (current) + +- `src/steady_pinball_theory/README.md`: entrypoint, frozen boundaries, display/reproduction commands, no-CFD verification. +- `DERIVATION.md`: equation/claim registry, geometry/sign contract, Euler/Hodge proof, one-cylinder counterexample, MFS/strip/Laurent/multipole validation boundary, NS-first stage notes. +- `RESULTS.md`: current numeric observations, accepted/reverse endpoint roles, failed circulation explanation, partial NS ledger, transient limits, SR/CCD scope. +- `LITERATURE.md`: source-to-claim ledger and prohibited transfers; primary references include Crowdy 2006, Glass et al. 2019, Ueda et al. 2003, Glauert/Moore 1957, Cornejo Maceda et al. 2021, Chan et al. 2011, Rodrigues-Asensio et al. 2026, Mao–Blackburn–Sherwin 2015 and others. +- `HISTORY_AND_LESSONS.md`: navigation/history only; records wrong-sign, double-subtraction, incomplete-CV, torque-ownership and immutable-artifact failures. +- `contract.py`: canonical geometry, `Re_D`, wall law, `s` mapping, body/action oracle. +- `metrics.py`: direct profile metric, gap/flux, vorticity/near-wall proxies, partial momentum/energy ledgers, no closure unless all terms supplied. +- `theory.py`: MFS, strip images, prescribed-vortex fields, Laurent cross-check, multipole projection, gap ansatz, root/Jacobian and Kármán-quarantined helpers. +- `tests/test_core.py`: implementation contracts and mathematical/numerical checks; passing tests are not physical validation. +- `evidence/INDEX.json`, `evidence/README.md`, authoritative roots referenced by package README/results, and figure manifest/CSV outputs: machine/artifact authority. External Optane paths are part of provenance and must be hash-resolved before reuse. + +### 2.2 Repository cross-navigation + +- `src/analysis_knowledge.md`: cross-project contracts, `Re_code` versus `Re_D`, `q_in/q_blk/q_ctl`, evidence taxonomy, and steady bounded/open status. +- `src/analysis_notes.md`: current gates. Steady Gate B requires same-CV NS closure, intervention/independent-realization evidence for causality/stability, and a fresh no-slip-transfer problem. +- `src/understanding_notes.md`: Legacy/V5 compatibility ledger; useful for Re/action/telemetry separation, not a steady result source. +- `src/README.md`: package roles and authority order; `pv_plot` is a rendering utility only. +- `src/SR_analysis/{CLAIMS.md,results/README.md,PIPELINE.md}`: current Kármán/cloaking SR; steady is contextual calibration only. +- `src/CCD_analysis/{README.md,FINAL_RESULTS.md,CLAIMS.md}`: corrected Kármán descriptive mean/dynamic decomposition; no steady quantitative import. +- `src/OID_analysis/{README.md,METHOD.md,PHYSICS_CONTRACT.md}`: active claim-free CPU method core; July study is archive/conditional. +- `src/pv_plot/README.md`: interface confirmation only (`axis_order`, presets, ParaView environment); no physical evidence. +- `src/archive/**`: historical/superseded by default. No archive item is current evidence unless an active manifest explicitly references it, and even then the manifest/role—not archive location—controls status. + +### 2.3 Memory / literature navigation + +Nowledge Mem context bundle and targeted memory search were used. Relevant durable context was consistent with repository authority: accepted branch is `[0,+Omega,-Omega]`, centers/order are explicit, `E_inf_vector` is full-cross-section direct `q_in` comparison, MFS validation precedes interpretation, and SR/CCD boundaries remain separate. Memory did not supply project facts or upgrade claims. + +Undermind was oriented and the existing `DynamisLab` workspace (`4383d145-2c80-4991-8a9c-7ac2dd683438`) was identified. No new deep search was started. Existing workspace literature is reflected through the repository’s source ledger; no external number or equation was imported here. Full-PDF/equation mapping remains explicitly held where `LITERATURE.md` says PDF unavailable (notably Glauert/Moore and Urzhumov–Smith for this pass). + +## 3. Canonical contract / assumption and BC ledger + +| Item | Frozen definition | Status / boundary | Source | +|---|---|---|---| +| Geometry | `D=20`, `R=10`; centers `(1000,299.5)`, `(1026,314.5)`, `(1026,284.5)` in lattice coordinates; normalized centers `(0,0)`, `(1.3,±0.75)` relative to `D` | established contract | `contract.py`, README/manifest | +| Body order | `(front, rear_y_plus, rear_y_minus)` | established; semantic IDs beat labels | `contract.py`, sign oracle | +| Coordinates | x right, y up | established | `contract.py`, `theory.py` | +| Wall law | `(U_w,V_w)=(-omega*r_y, omega*r_x)` | positive `omega` is geometric CCW | `contract.py`; runtime/source oracle | +| Accepted action | `[0,+Omega,-Omega]`, `Omega>0` | accepted/current; gap-facing rear cardinals move downstream, base-bleed/gap-jet wall-sense family | contract oracle, current evidence | +| Reverse action | `[0,-Omega,+Omega]` | reverse/high-deficit role; wrong-sign campaigns and withdrawn production labels must not be re-promoted | `RESULTS.md`, evidence disposition | +| Spin ratio | `s=Omega R/U_inf`; `omega=s U_inf/R` | established definition; do not silently use `Omega D/U_inf` | `contract.py`, `DERIVATION.md` | +| Reynolds number | canonical `Re_D=U_inf D/nu=50`; `nu=U_inf D/Re_D`; Legacy `Re_code` convention is separate and often `Re_D=Re_code/2` | established; never call Legacy `re100` simply `Re_D=100` | `contract.py`, `analysis_knowledge.md`, `understanding_notes.md` | +| Inlet/reference | uniform `q_in`; direct comparison to `q_ctl` | primary steady comparator; `q_blk` non-ranking | README, `RESULTS.md`, `metrics.py` | +| Outer channel | free-slip walls at declared `H`/half-height; finite strip and unbounded plane are separate mathematical settings | established model assumption; not no-slip transfer | `DERIVATION.md`, `theory.py` | +| Cylinder walls | current finite-Re solver uses rotating no-slip; potential solver enforces impermeability only | critical interface boundary | README, `DERIVATION.md`, LITERATURE | +| Station/metric | full two-component `E_inf_vector=max_y ||(q_ctl-q_in)/U_inf||_2` at `x/D=10`; `E_inf_x/y`, explicit L2 and other stations diagnostics | established metric contract | `metrics.py`, RESULTS | +| Steady qualification | settling/endpoint qualification is finite-horizon and case-specific | does not establish uniqueness, attraction, stability, or causal intervention | RESULTS/evidence | +| Telemetry | normalized Celeris loads are lattice sums averaged once per accumulated LBM step; runtime manufactured oracle supports torque work sign and `P_act→fluid=sum(omega*tau_read)` | force ownership and full closure remain open | LITERATURE, `metrics.py`, NS ledger | + +### Rotation-sign checkpoint + +For upper rear (`r_y=+R`), positive omega gives outer-top `U_w=-omega R` (upstream) and gap-bottom `U_w=+omega R` (downstream). For lower rear with negative omega, outer-bottom is upstream and gap-top downstream. Therefore accepted `[0,+,-]` injects/organizes the rear gap jet; it is not boat-tail under the project/literature sign map. Every future campaign should print IDs, centers, action, four cardinal velocities, and direct reversal label before solving. + +## 4. Steady CFD sweep and accepted/reverse branches + +### 4.1 Authorized numerical observations + +Current v5 direct recomputation at `s={3.45,3.55,3.65}` gives approximately: + +- `E_inf_vector={0.0232525,0.0231671,0.0312490}` at `x/D=10` (current article-authoritative exact value for `s=3.55`: `0.0231672176752314`). +- `s=3.55` is settling-qualified / low-deficit endpoint in the canonical free-slip `Re_D=50` setting. +- Earlier/current displays include stationary, accepted `s=3.55`, and reverse `s=5.2`; these are reader views of authenticated artifacts, not new evidence. +- Accepted `s=3.55` and reverse `s=5.2` are **not amplitude matched**. Reverse is a distinct stable/high-deficit state candidate, not a same-amplitude causal control pair. +- A provisional direct-profile minimum around `s≈3.45–3.55` is not a qualified continuous optimum; restarted bracket, continuation, grid/domain/method convergence, and held-out validation gates remain required. + +Do not infer from the sweep: unique/global optimum, global attraction, asymptotic/nonlinear stability, cross-BC transfer, causal mechanism, or a universal `s` law. + +### 4.2 Withdrawn / reverse state disposition + +- `[0,-Omega,+Omega]` campaigns were wrong-sign/withdrawn for the accepted cloak branch; retain their disposition for audit, never use their attractive plots or labels as current evidence. +- A reverse endpoint can be numerically steady while retaining a poor wake. “Steady” and “low deficit” are independent axes; Chan’s pair result is only qualitative context for this distinction. +- The current reverse role is high-deficit/stability candidate at `s=5.2`; because amplitude is mismatched against accepted `s=3.55`, no accepted-versus-reverse mechanism or causal ranking follows. + +### 4.3 Artifact and figure map + +| Need | Current artifact/reader asset | What it supports | Does not support | +|---|---|---|---| +| machine authority | `src/steady_pinball_theory/evidence/INDEX.json` and linked authoritative roots | path/hash/role disposition | prose authority detached from hashes | +| direct endpoint | `steady-contract-v5-torque-d20-20260808/{qin,accepted-s3.55,reverse-s5.2,stationary}/` | fields/manifests/contract-bound metrics | closure/stability | +| article result | `steady-article-publication-v3b-20260809/REPORT.md` | exact direct metric and bounded publication status | new CFD | +| NS-first diagnostics | `ns-ledger-v2-oracle-bound-d20-20260809/analysis.json` plus display CSVs | power, gap flux, station/wake, recirculation, vorticity, force readbacks as partial terms | residual/closed balance, force ownership | +| potential/strip | `steady-strip-modal-analysis-20260804-v4/analysis.json`; project theory readers | strip modal comparison and failed sign route | no-slip closure / mechanism | +| display | `figures/manifest.json`, `field_metrics.csv`, `profiles_long.csv`, summary PNG/PDF/CSV | traceable reader visualization | publication-ready independent evidence | +| tests | `tests/test_core.py` | implementation contract checks | physical proof | + +## 5. Equation ledger + +| ID | Relation / object | Classification | Validity and gate | +|---|---|---|---| +| E1 | `u=u_N+Σ Γ_j h_j`; fixed normal data + all geometric periods imply uniqueness under stated integration hypotheses | existing derivation / proved mathematical result | Euler outer BVP; conditional theorem, not existence/stability | +| E2 | One circle: `W=U(z+a²/z)-iΓ/(2π)log(z/a)`; `u_r(a)=0`, `u_θ(a)=-2U sinθ+Γ/(2πa)` | existing derivation, literature-supported | impermeability independent of Γ; full rotating trace impossible for `U≠0`; special `U=0, Γ=2πa²Ω` is counterexample | +| E3 | MFS zero-source-per-body constraints and Neumann collocation | existing implementation/math contract | numerical representation of outer impermeability; zero source is stronger than global flux compatibility | +| E4 | Strip images: equal-sign source images, opposite-sign vortex images; finite image layers are truncation | existing implementation/derivation | requires dense off-grid and image-layer convergence; not automatic unbounded equivalence | +| E5 | Independent finite Laurent/Fourier collocation | existing implementation | zero-circulation unbounded cross-check, not Crowdy exact, strip or prescribed-circulation validation | +| E6 | Rear-opposite prescribed circulation gives log cancellation and dipole coefficient `C_pair=-Γ b/π` | existing derivation / verified mathematical artifact | unbounded outer potential far-field property only | +| E7 | Affine far coefficient `C(Γ)=C0+Γ dC`; real least-squares cancellation | existing derivation / numerical verification | potential objective only; `g_opt≈+6.147944` in strip route conflicts with finite-Re fitted descriptive `g≈-12.200554` | +| E8 | `E_inf_vector` direct profile and explicit L2 | existing code + authorized artifact observation | metric definitions; L2 is diagnostic and cannot replace primary metric | +| E9 | Gap flux `Q_g=∫u·n ds`, mass flux `∫ρu_n ds`, momentum proxy `J_g=∫ρu_n²ds` | existing code / diagnostic | oriented gap observable; does not establish jet causality or full CV balance | +| E10 | Station mechanical energy flux `∫(p+½ρ|u|²)u_n ds`; dissipation `∫2μS:S dA`; ledger residual `right-left+lateral+dissipation+storage-P_act` | existing derivation/code contract | closure exists only when every signed term is supplied on one CV; current ledger is partial | +| E11 | `p≈c_s²(ρ-ρ_ref)` | existing code diagnostic | weak-compressible LBM pressure proxy, not incompressible NS pressure | +| E12 | wall tangential speed, radial tangential-gradient and near-wall sign-change estimators | existing code diagnostics | proxies; current resolution/gates do not prove wall-vorticity flux or separation/reattachment | +| E13 | source multipoles / low-order projection of high-order MFS | existing derivation/implementation | interpretation aid after solver validation; not a viscous closure | +| E14 | Kármán point-vortex Hamiltonian/street helpers | quarantined mathematical oracle | separate Kármán chain; no steady pinball transmission claim | + +### What is not an equation-level result + +`Gamma_eff(s)`, `Gamma(Omega)`, gap-jet-to-deficit causality, boat-tail/base-bleed equivalence across Re, stability boundaries, or any energy/momentum coefficient inferred from incomplete terms are not established relations. They are either deferred empirical closure targets or conjectures. + +## 6. Potential-flow / rotation-sign conflict + +The potential route is internally coherent as an outer impermeability problem and has useful rear-opposite dipole cancellation. Its proposed physical identification fails because the sign required by the potential strip cancellation (`g_opt≈+6.147944`) is opposite to the accepted finite-Re endpoint’s corrected descriptive circulation fit (`g≈-12.200554`). The accepted CFD nevertheless has a potential-like exterior appearance in figures; resemblance is insufficient to identify the mechanism. + +Correct interpretation: + +1. potential flow supplies `q_outer(Γ)` counterfactual/reference fields; +2. rotating no-slip CFD supplies vorticity and wake processes absent from Euler; +3. comparison must be `q_CFD-q_potential` on preregistered common masks, with contour sign and uncertainty; +4. then connect residuals to gap flux, shear/separation proxies, recirculation, force and downstream deficit; +5. no claim survives without held-out endpoint/branch and resolution checks. + +## 7. MFS / analytic / multipole status and priority + +### Existing capability + +`theory.py` implements unbounded and strip MFS with prescribed geometric-CCW circulations, zero-source constraints, finite image layers, dense boundary diagnostics, gap/transpiration ansatzes, independent Laurent collocation, source-multipole reconstruction, affine circulation bases, and sampled stagnation-root/Jacobian tools. Existing project tests include mathematical or implementation checks; the code is not a substitute for a new evidence package. + +### Validation priority / gate + +Before interpreting any MFS field: + +1. dense off-grid no-penetration residuals, separately by cylinder and gap/outer sectors; +2. rank/conditioning, source radius, MFS order, image-layer convergence (strip); +3. one-cylinder exact circle oracle including circulation trace; +4. independent Laurent/Fourier cross-check for unbounded zero-circulation fields; +5. held-out points/geometry and common-exterior profile convergence; +6. only then project high-order MFS into low-order per-body dipoles/multipoles plus antisymmetric circulation, showing error versus term count. + +Current gate state in `DERIVATION.md` is reference-validation/deferred for dense and parameter-convergence evidence. Collocation residual alone is not validation. The composite semi-analytic route is failed historical evidence (double subtraction, inactive wake term, non-independent gates), not an active model. + +## 8. NS-first, energy, momentum, gap-jet and base-bleed chain + +### Candidate physical chain (hypothesis, not established mechanism) + +`wall rotation sign → gap-facing wall motion / local shear → near-wall vorticity production and separation/shear-layer birth → gap mass/momentum redistribution and base-bleed-like jet → recirculation/base pressure/force changes → downstream deficit reduction`. + +A second, weaker candidate is `rear constant rotation → persistent mean-field compensation`, with dynamic feedback as a separate perturbation. SR/CCD can motivate this decomposition but cannot prove the arrows. + +### Available observables + +- actuator torque/power sign and samples where explicit history exists; +- signed gap `Q_g`, mass flux and `J_g` by oriented segment; +- station mass/vector momentum/kinetic/mechanical-energy flux; +- recirculation, wake deficit proxies, vorticity moments, near-wall tangential speed, radial-gradient and ux-zero-crossing proxies; +- endpoint field comparison against `q_in` and potential references. + +### Why closure is not yet available + +The current NS ledger is endpoint/spatial partial: missing or unsupported terms include a common control volume with complete storage, lateral/outlet flux, pressure and viscous traction/wall terms, body-adjacent resolution, and certified force ownership. `p` is a weak-compressible density proxy. The implementation explicitly returns `incomplete_not_closed` unless every signed term is supplied. Therefore “energy balance,” “momentum balance,” “actuator power explains deficit,” and “gap jet causes cloak” are open, not results. + +### Required next gate (no CFD authorized by this dossier) + +If reopened, use fresh no-clobber artifacts and one frozen CV: matched accepted/reverse amplitude, same inlet/reference and window, pressure/viscous/stress boundary terms, body work, storage, lateral flux, grid/domain/time convergence, and held-out prediction. A matched intervention or independent realization is needed for causality; continuation/eigenvalue/basin/order-parameter evidence is needed for stability. Do not use archive artifacts to fill missing terms. + +## 9. Cross-project map + +| Package / chain | Connectable item | Explicitly not connectable | +|---|---|---| +| SR Legacy Kármán/cloaking | rear-constant term ranking and steady magnitude correspondence as contextual calibration; `Re_code`/`Re_D` conversion only when explicitly documented | V5 steady metric as Legacy SR evidence; SR deletion as physical intervention; necessity, circulation, momentum law, mechanism, universal `s` | +| corrected CCD Kármán | mean-versus-dynamic separation and descriptive constant-field context | no steady CCD number; no phase co-variation as steady mechanism/causality; different plant, periodic estimator and chain | +| OID active core | future method vocabulary for force/signature observables and strict alignment | no active scientific result; archived high-R²/action claims; no importance/authority/causality | +| Legacy / V5 | explicit compatibility audit: action units, object order, telemetry, norm, BC, solver version | numerical equivalence, shared metric, cross-generation pooling without parity artifact | +| `drl_pinball` | broad control/case navigation; Kármán scope and role boundaries | DRL performance as steady mechanism proof; Legacy controls as V5 steady data | +| `pv_plot` | `tyx`/`txy` axis-order and vorticity/speed/comparison interface confirmation | physical interpretation, metric authority, CFD validation | +| `src/archive` | failure chronology, superseded route and negative controls | current evidence, new numbers, mechanism rescue | + +## 10. Core short derivations: main-text suitability + +The following are short enough to become later main-text equations after evidence-parity review, but this dossier does not draft prose: + +- canonical `Re_D`, `s`, wall-velocity mapping and direct `E_inf_vector` definition; +- one-circle trace showing Euler impermeability does not select circulation and full rotating trace is obstructed for `U≠0`; +- rear-opposite log cancellation / dipole coefficient as an explicitly labeled outer reference and sign counterexample; +- energy/momentum ledger identity only as a required closure equation with all terms visibly marked unavailable. + +MFS matrix construction, strip images, source constraints, Laurent cross-check, multipole projection, and root/Jacobian algorithms belong in methods/supplement unless the validation gate is completed. No derivation should be written as a finite-Re mechanism until CFD-minus-reference residual and NS closure evidence exists. + +## 11. Failed routes, open checks, coverage gaps + +### Failed / withdrawn routes + +- wrong-sign `[0,-Omega,+Omega]` cloak interpretation and campaigns; +- prescribed-circulation cancellation as accepted CFD mechanism (`g` sign conflict); +- composite semi-analytic scorer with double subtraction/inactive wake/non-independent gates; +- incomplete CV ledger promoted to energy/momentum closure; +- single switch/return realization promoted to causality, branch switching, basin or stability; +- direct potential-to-rotating-wall no-slip transfer; +- archive plots or Legacy/V5 similarity used as current cross-chain evidence. + +### Open checks + +- dense off-grid MFS residuals by body sector and all convergence dimensions; +- one-circle exact and Laurent/Fourier independent validation in the active evidence lineage; +- strip image-layer and finite-strip/unbounded comparison; +- accepted/reverse amplitude-matched continuation and stability qualification; +- grid/domain/window convergence and held-out `E_inf_vector`; +- complete same-CV NS momentum/mechanical-energy closure with certified pressure, viscous, wall and storage terms; +- empirical `Gamma_eff(s)` only with sign/contour/mask/Re/geometry/confinement/uncertainty and held-out endpoints; +- no-slip transfer experiment is a new contract, not inherited from free-slip; +- unresolved CCD steady interface remains separate and cannot backfill steady mechanism. + +### `src` cross-navigation coverage + +Covered as active entry/role checks: `steady_pinball_theory/**`, `analysis_knowledge.md`, `analysis_notes.md`, `understanding_notes.md`, `src/README.md`, `SR_analysis` claims/results navigation, `CCD_analysis` corrected authority, `OID_analysis` reset authority, `pv_plot` interface, and repository-level archive boundary. No `src/archive/**` file was promoted to current evidence. Remaining limitation: `drl_pinball` active utility/package files and the large `CelerisLab/` external/generated tree were not exhaustively indexed here; DRL agent owns graphic/control use, and CelerisLab is explicitly outside repository closeout. This is the principal residual coverage gap. + +## 12. Candidate figure / code / artifact map + +- contract/sign panel: `contract.py`, sign oracle tests, current endpoint manifest; +- accepted/reverse/stationary aligned fields: `figures/plates/**`, raw `fields/**`, `field_metrics.csv`, `profiles_long.csv`; +- direct metric curve: `figures/summary/profile_Einf_vector.{csv,png,pdf}`; +- gap/base-bleed diagnostic: `figures/summary/signed_gap_Qstar.{csv,png}` and NS gap CSVs; +- near-wake diagnostics: `figures/summary/near_wake_diagnostics.{csv,png}`; +- potential-vs-CFD/error plates: `figures/plates/error/**`, with potential analytical-vorticity-zero convention; +- MFS diagnostic code: `theory.py`, `metrics.py`, `tests/test_core.py`; no generated display is a new result; +- article/report and machine map: authoritative external roots and `evidence/INDEX.json`. + +## 13. Final evidence verdict for handoff + +**Supported:** canonical contracts; conditional Euler/MFS mathematics; outer potential reference; bounded current-v5 `Re_D=50` free-slip accepted low-deficit endpoint; bounded reverse high-deficit steady candidate; descriptive gap/wake/force/power diagnostics where artifacts expose them; SR steady correspondence as contextual only. + +**Rejected/withdrawn:** potential-circulation cancellation as the accepted finite-Re mechanism; wrong-sign accepted branch; composite semi-analytic PASS; closed energy/momentum explanation; causality/stability/no-slip transfer claims. + +**Interpretation level:** the gap-jet/base-bleed chain is a candidate physical chain, not a project-established mechanism. Main mathematical risks are (i) Euler circulation is independent of rotating no-slip wall speed, (ii) strip versus unbounded asymptotics and finite-image truncation, (iii) sign/body/metric confusion, and (iv) incomplete NS terms and coarse near-wall resolution. Highest-value next work is validation/closure gating, not new narrative or another CFD sweep. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/05_INTRODUCTION_LITERATURE_INDEX.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/05_INTRODUCTION_LITERATURE_INDEX.md new file mode 100644 index 0000000..3611a4e --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/05_INTRODUCTION_LITERATURE_INDEX.md @@ -0,0 +1,145 @@ +# JFM Round 1 — Introduction Literature / Material Index + +> 资料索引,不是 Introduction prose。标签:`[FACT]` 外部文献直接支持;`[OBS]` 本地 bounded observation;`[INTERP]` 作者叙事选择;`[HIST]` 历史动机;`[OPEN]` 未闭合。阅读层级:`full-PDF`、`full-report`、`abstract/snippet`。 + +## 0. Executive map + +最稳健的问题链是:**在包含分离、涡脱落、对称性破缺和多吸引子的中等 Re bluff-body 流中,能否用有限传感器和紧凑旋转执行器,以 observer-level wake signature 为目标主动控制;若 DRL 找到性能策略,能否通过受原 plant 闭环 CFD 检验的 SR、场分解和稳态/理论分析,将其降解为受限的物理控制骨架?** + +候选链:`minimal cloak vocabulary → linear/passive wave analogues → active model-specific hydrodynamic cloaks → AFC/DRL → fluidic pinball → sparse sensing/signature/DTW → SR and field interpretation → bounded gap`。其中线性波到非线性流体是背景对比,不是物理等价链;Urz12 是 active porous cloak,Ren20b 是 DRL cylinder stealth,二者都不等同于本项目旋转 pinball。 + +## 1. Audit trail + +### Nowledge Mem +已调用 `read_context_bundle`,读取 Working Memory、owner identity、active scope;并定向调用 `memory_search` 检索完整路线、导师意见、Confirmation 原始动机、JFM reconnaissance、hydrodynamic stealth/illusion、fluidic pinball、DRL、sparse sensor/DTW、SR/可解释控制。关键 recalled boundaries:active positive SR 仅 Legacy Kármán/cloaking;Illusion SR 为 historical/negative;CCD descriptive;OID claim-free;steady bounded contextual;Legacy 与 V5 分开;应用需简短前瞻,seals、海洋结构、环境扰动、扬沙等不作主线。`thread_search` 对相同主题无匹配线程,因此 Mem 是路线线索而非外部科学证据。 + +### Undermind +已先 `get_orientation`,再 `list_workspaces`;进入现有 DynamisLab workspace `4383d145-2c80-4991-8a9c-7ac2dd683438`。只读检查 root、`Confirmation_report/`、`JFM/`、`JFM References/`,及 folders 01–03、05–06;workspace 有 54 files、14 existing deep searches。检查了已有报告:Hydrodynamic stealth and illusion;Symbolic regression;Interpretable analysis;Minimal wake-field L2;Wake-field L2/sensor rationale;Closed-loop OID;JFM rigor for CCD/PCD;以及各论文清单。批量读取 20 篇最相关 PDF 的正文或原始 PDF 页眉:Rab18b, Ren20b, Mac20, Den18b, Den20, Den21, Li21, Wan23b, Xia23, Loi16, Loi17, Gau14, Par20, Urz12, Vas09, Ma13, Zou19b, Pen06b, Leo06b, Ren20c;其余按摘要/元数据标注。本轮没有启动新 deep search,也没有修改 workspace。一次 moderate-Re cloak `search_papers` 被自动审查拦截为新 deep-search-like discovery,未绕过;只保留已有库和已返回定向结果。 + +### Repository / historical materials +已检查 `docs/JFM_WYQ`、round README、根 README、`src/steady_pinball_theory/LITERATURE.md`、DRL/SR/CCD writing handoff/results、`src/understanding_notes.md`,以及 Undermind 的 Confirmation `Conf_1_Intro/2_Description/5_Conclusion` 和 `JFM/Introduction and Background Draft`。当前仓库未发现可直接作为 authority 的 Confirmation `.tex/.bib`;旧报告只用于原始动机与演进,不覆盖当前 artifact/claim ledger。 + +## 2. Searchable taxonomy + +- **A 概念**:visibility/signature;cloak=observer-space 接近 background;illusion=接近非零 target;passive/active;local body vs external signature。 +- **B 线性谱系**:transformation optics/conformal mapping;active exterior cloak;active illusion;acoustic/water-wave cloak;线性叠加、频带、材料/源限制。 +- **C hydrodynamic bridge**:porous/Brinkman active cloak;低 Re/线性化水波;finite-Re separation/wake;compact moving-wall/jet actuation 的未闭合转移。 +- **D AFC/DRL**:rotation/jets;sensitivity/optimal control;genetic-programming MLC;PPO;noise/Re robustness;partial observation/history/action filtering。 +- **E pinball**:MIMO rotating cylinders;Hopf/pitchfork;force/low-order models;multi-attractor/chaos;open/closed-loop control。 +- **F observer/metric**:wake information;sparse velocity/pressure;sensor placement/delay;DTW similarity;sensor vs full-field estimand;zero/target comparator。 +- **G interpretation**:black-box policy;GP/SR;SINDy/sparse Galerkin/feature lifting;POD/OID/CCD;closed-loop redeployment;association ≠ causality。 + +## 3. Core literature cards + +### Cloaking, illusion, hydrodynamic bridge + +|key|exact identity|DOI|read|supports / cannot support| +|---|---|---|---|---| +|Pen06b|Pendry, Schurig & Smith, “Controlling Electromagnetic Fields”, *Science* 312 (5781), 1780–1782 (2006)|10.1126/science.1125907|full-PDF; formal publisher metadata overrides the erroneous workspace PDF header|[FACT] transformation-optics origin / not nonlinear hydrodynamics| +|Leo06b|Leonhardt, “Optical Conformal Mapping”, *Science* 312, 1777–1780 (2006)|10.1126/science.1126493|full-PDF; journal pages verified|[FACT] optical genealogy / not fluid transfer| +|Vas09|Vasquez, Milton & Onofrei, “Active exterior cloaking for the 2D Laplace and Helmholtz equations”, *Physical Review Letters* 103, 073901 (2009)|10.1103/PhysRevLett.103.073901|full-PDF; preprint PDF plus journal metadata|[FACT] finite active sources and quiet exterior / not Navier–Stokes| +|Ma13|Ma, Mei, Zhu, Jin & Cui, “Experiments on active cloaking and illusion for Laplace equation”, *Physical Review Letters* 111, 173901 (2013)|10.1103/PHYSREVLETT.111.173901|full-PDF; journal first page verified|[FACT] cloak vs nonzero illusion distinction / not wake target tracking| +|Zou19b|Zou et al., “Broadband Waveguide Cloak for Water Waves”, *Physical Review Letters* 123, 074501 (2019)|10.1103/PhysRevLett.123.074501|full-PDF; journal first page verified|[FACT] engineered bathymetry/mode conversion / not bulk viscous wake| +|Urz12|Urzhumov & Smith, “Flow stabilization with active hydrodynamic cloaks”, *Physical Review E* 86, 056313 (2012)|10.1103/PhysRevE.86.056313|full-PDF; preprint PDF plus journal metadata|[FACT] active Brinkman cloak suppresses cylinder shedding in finite Re window / not rotating no-slip pinball equivalence| +|Ren20b|Ren, Wang & Tang, “Bluff body uses deep-reinforcement-learning trained active flow control to achieve hydrodynamic stealth”, *Physics of Fluids* 33, 093602 (2021)|10.1063/5.0060690|full-PDF; journal first page verified|[FACT] WSLB jets + near-wake sensors attenuate cylinder deficit / not global first, field cloak, illusion or causal mechanism| + +**Priority hold:** workspace contains `Ren19b`, “Elimination of velocity deficit behind a cylinder using reinforcement learning” (Ren & Tang, 2019), but no PDF/DOI. Do not call Ren20b the global first; next round must resolve whether Ren19b is preprint, predecessor or duplicate. + +### Fluidic pinball / JFM nearest neighbours + +|key|exact identity|DOI|read|supports / cannot support| +|---|---|---|---|---| +|Den18b|Deng, Noack, Morzyński & Pastur, “Low-order model for successive bifurcations of the fluidic pinball”, *Journal of Fluid Mechanics* 884, A37 (2020)|10.1017/jfm.2019.959|full-PDF; preprint PDF plus journal metadata|[FACT] successive Hopf/pitchfork and compact 3-cylinder nonlinear benchmark / not project thresholds/BCs| +|Den20|Deng, Noack, Morzyński & Pastur, “Galerkin force model for transient and post-transient dynamics of the fluidic pinball”, *Journal of Fluid Mechanics* 918, A4 (2021)|10.1017/jfm.2021.299|full-PDF; journal first page verified|[FACT] structured modal force model / not controlled-flow causality| +|Den21|Deng, Noack, Morzyński & Pastur, “Cluster-based hierarchical network model of the fluidic pinball – cartographing transient and post-transient, multi-frequency, multi-attractor behaviour”, *Journal of Fluid Mechanics* 934, A24 (2022)|10.1017/jfm.2021.1105|full-PDF; journal first page verified|[FACT] periodic/quasi-periodic/chaotic multi-attractor dynamics / not universal controllability| +|Mac20|Cornejo Maceda, Li, Lusseyran, Morzyński & Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* 917, A42 (2021)|10.1017/jfm.2021.301|full-PDF; journal first page verified|[FACT] rotating-cylinder open/closed-loop ML; asymmetric steady + phasor / not PPO or project metric/sign transfer| +|Rai20|Raibaudo, Zhong, Noack & Martinuzzi, “Machine learning strategies applied to the control of a fluidic pinball”, *Physics of Fluids* 32, 015108 (2020)|10.1063/1.5127202|full-PDF; journal metadata/PDF verified|[FACT] experiment, three hot wires at x/D=10, non-obvious actuator relations / not sensor optimality| +|Fen23|Feng, Wang, Xiang, Jin & Fan, “How to Control Hydrodynamic Force on Fluidic Pinball via Deep Reinforcement Learning”, *Physics of Fluids* 35(4), 045137 (2023)|10.1063/5.0142949|full-PDF; formal publisher/DOI metadata verified|[FACT, weaker] DRL force min/tracking capability / not JFM, cloak, SR mechanism| +|Mit01|Mittal, “Control of flow past bluff bodies using rotating control cylinders”, *Journal of Fluids and Structures* 15, 291–326 (2001)|10.1006/JFLS.2000.0337|full-PDF; journal metadata verified|[FACT] rotating controls modify separation/wake / not equal-cylinder pinball| + +### DRL, sparse sensing, interpretation + +|key|exact identity|DOI|read|supports / cannot support| +|---|---|---|---|---| +|Rab18b|Rabault, Kuchta, Jensen, Réglade & Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* 865, 281–302 (2019)|10.1017/jfm.2019.62|full-PDF; journal metadata/PDF verified|[FACT] PPO/DRL cylinder AFC from wake sensing; ~8% drag / not interpretability or field matching| +|Par20|Paris, Beneddine & Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning”, *Journal of Fluid Mechanics* 913, A25 (2021)|10.1017/jfm.2020.1170|full-PDF; journal metadata verified, PDF is preprint|[FACT] noise/Re/sensor-layout trade-offs / not project sensor optimality| +|Ren20c|Ren, Rabault & Tang, “Applying deep reinforcement learning to active flow control in weakly turbulent conditions”, *Physics of Fluids* 33, 037121 (2021)|10.1063/5.0037371|full-PDF; journal first page verified|[FACT] Re=1000 weak turbulence DRL AFC / not pinball universality| +|Li21|Li & Zhang, “Reinforcement-learning-based control of confined cylinder wakes with stability analyses”, *Journal of Fluid Mechanics* 932, A44 (2022)|10.1017/jfm.2021.1045|full-PDF; journal metadata verified, PDF is preprint|[FACT] reward/reference/stability and few informative probes / not DTW causality| +|Xia23|Xia, Zhang, Kerrigan & Rigas, “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements”, *Journal of Fluid Mechanics* 981, A17 (2024)|10.1017/jfm.2024.69|full-PDF; journal first page verified|[FACT] partial observation/history/actions matter / not guaranteed reconstruction| +|Wan23b|Wang, Yan, Hu, Chen, Rabault & Noack, “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing”, *Journal of Fluid Mechanics* 988, A4 (2024)|10.1017/jfm.2024.333|full-PDF; formal publisher metadata overrides the erroneous workspace record/PDF header|[FACT] feature lifting enables sparse-sensor control / not velocity-pinball transfer| +|Gau14|Gautier, Aider, Duriez, Noack, Segond & Abel, “Closed-loop separation control using machine learning”, *Journal of Fluid Mechanics* 770, 442–457 (2015)|10.1017/jfm.2015.95|abstract/snippet; metadata/journal page verified, PDF is preprint|[FACT] GP finds explicit closed-loop AFC law / not unique causal law| +|Loi16|Loiseau & Brunton, “Constrained sparse Galerkin regression”, *Journal of Fluid Mechanics* 838, 42–67 (2018)|10.1017/jfm.2017.823|full-PDF; journal first page verified|[FACT] parsimonious constrained sparse models / not policy SR| +|Loi17|Loiseau, Noack & Brunton, “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *Journal of Fluid Mechanics* 844, 459–490 (2018)|10.1017/jfm.2018.147|full-PDF; journal metadata verified, PDF is preprint|[FACT] sensor lifting/SINDy/field mapping black-to-grey route / not direct controller law| +|Jin21|Jin, Illingworth & Sandberg, “Optimal sensor and actuator placement for feedback control of vortex shedding”, *Journal of Fluid Mechanics* 929, A13 (2021)|10.1017/jfm.2021.948|full-PDF; journal metadata/PDF verified|[FACT] placement has estimation/control/delay trade-offs / not x/D=10 optimum| +|Bru19|Brunton, Noack & Koumoutsakos, “Machine Learning for Fluid Mechanics”, *Annual Review of Fluid Mechanics* 52, 477–508 (2020)|10.1146/annurev-fluid-010719-060214|full-PDF; journal metadata/PDF verified|[FACT] ML taxonomy and interpretation cautions / not project evidence| + +**DTW:** `Sak78` Sakoe & Chiba, “Dynamic programming algorithm optimization for spoken word recognition”, *IEEE Transactions on Acoustics, Speech, and Signal Processing* 26, 43–49 (1978), DOI `10.1109/TASSP.1978.1163055`; `Mul15` Müller, *Fundamentals of Music Processing*, Springer (2015), DOI `10.1007/978-3-319-21945-5`. Both are full-PDF in Undermind; they support alignment/similarity only. They support alignment/similarity only. Current project authority explicitly forbids interpreting DTW lag as physical delay or causality. + +## 4. Citation network / chronology + +`Pen06b/Leo06b → Vas09 → Ma13 → Zou19b` = linear/passive → active/illusion → water-wave vocabulary; no nonlinear-wake equivalence. + +`Urz12 → Ren20b` = active hydrodynamic stabilization/signature attenuation; porous shell and WSLB jets remain different actuators/metrics. + +`Gau14 → Mac20`; `Rab18b → Par20/Ren20c/Li21/Xia23/Wan23b` = ML/DRL-AFC lineage through robustness, turbulence, stability and partial observation. + +`Den18b → Den20/Den21/Mac20/Rai20` = pinball bifurcations → force/multi-attractor models → ML control and experiment. + +`Loi16 → Loi17 → project SR/OID/CCD` = sparse constrained models → sensor/field representation → project-specific audit; the final arrow is adaptation, not citation proof. + +Chronology: 2006 optical; 2009–13 active linear cloak/illusion; 2012 active porous hydrodynamic cloak; 2014–18 interpretable/low-order/DRL foundations; 2019–21 pinball and DRL stealth/control; 2022–23 multi-attractor, stability, partial-observation and sparse-feature JFM control; 2024–26 includes the JFM sparse-feature paper (Wang et al., JFM 988, A4, 2024); project evidence remains bounded. + +## 5. Confirmation / old-introduction motivation disposition + +### Retain, but demote +- one sentence on science-fiction/visibility vocabulary; +- passive/active and linear/nonlinear taxonomy; +- conventional AFC objectives (drag, lift, separation, vibration); +- pinball geometry/dynamics and sparse observer signature; +- DRL as nonlinear policy discovery; +- SR as an audit question; +- one short prospective application clause. + +### Qualify / quarantine +- “first explicit attempt” for Ren20b → early/direct precedent; resolve `Ren19b` first; +- 99.5% → Ren’s exact near-wake velocity-deficit metric only; +- “complete field restoration” → declared sensor/field space only; +- Confirmation Re=50 and bifurcation language → audit `Re_code` vs `Re_D` first; +- seals/whiskers → historical sensing context only, never application driver; +- target Strouhal matching, cross-size generalization, first illusion, high-frequency explanation → historical/negative archive pending current authority. + +### Delete from mainline +seals hunting; cylindrical marine structures; environmental disturbance/sediment resuspension; defense/low-observability claims; positive Illusion SR; DTW-as-delay; CCD/OID-as-mechanism; pooled Legacy/V5 evidence; universal/optimal/causal wording. + +## 6. Candidate argument chains (logic skeleton) + +### A — observer signature → active nonlinear cloak → interpretable skeleton (recommended) +1. Wake carries observer information. 2. Define cloak/background and illusion/nonzero target. 3. Linear literature supplies vocabulary, not Navier–Stokes solution. 4. Urz12/Ren20b give adjacent hydrodynamic precedents. 5. DRL solves policy discovery but leaves observability/interpretability issues. 6. Pinball supplies MIMO actuation plus bifurcation complexity. 7. Ask whether Kármán cloak policy has a compact, CFD-validated law and bounded field structure. 8. Present SR → CCD/field audit → steady context with explicit nonclaims. + +### B — nonlinear benchmark → DRL → white-box audit +1. Open with pinball’s simple geometry/difficult dynamics. 2. Den18b/20/21 explain why scalar force optimization is insufficient. 3. Mac20/Rai20 establish rotating-cylinder ML control. 4. Rab18b/Par20/Li21/Xia23/Wan23b motivate DRL with sparse/partial observations. 5. Gap: policy distillation plus field-level audit in the original plant. 6. Cloak vocabulary is objective, not history chapter. + +### C — mean compensation + dynamic correction +1. Cloak as declared field/signature error decomposition. 2. Literature gives wake stabilization, sparse sensing, low-order/observable tools but no shared decomposition for this plant. 3. DRL → SR action law. 4. CCD tests descriptive phase-coherent low-rank residual. 5. Steady theory is contextual, not mechanism closure. 6. Gap is the bounded triangulation, not a universal law. + +## 7. Gaps and next-round deep-search questions + +Do not launch these in Round 1: (1) resolve `Ren19b` identity and Tang/Ren priority meaning; (2) peer-reviewed moving-wall/jet finite-Re hydrodynamic cloaks; (3) nonlinear viscous nonzero-target wake illusion; (4) JFM 2021–26 pinball + DRL/PPO/partial observation/SR nearest neighbours; (5) neural AFC policy → SR/GP → held-out closed-loop redeployment; (6) descriptive OID/EPOD/CCA/CCD against POD and causality boundaries; (7) DTW wake-signature papers and timing interpretation; (8) x/D sensor placement trade-offs for pinball/cylinder; (9) same-Re/geometry base-bleed and rotating-cylinder momentum/vorticity evidence; (10) recent JFM introduction narrative patterns. + +## 8. Citation priority + +**Tier 1:** Den18b, Mac20, Rab18b, Ren20b, Urz12, Par20 or Xia23, Gau14 or Loi17. + +**Tier 2:** Den20, Den21, Li21, Wan23b, Rai20, Jin21, Vas09, Ma13, Zou19b, Spe14, Bou11. + +**Tier 3:** Pen06b, Leo06b, Tri15, Mit01, Dip07, Loi16, Li16, Zol25, Sak78, Mul15, Fan20b, Ren20c, Bru19 and broad reviews. Use only when a specific transition needs them. + +Do not cite unresolved Confirmation BibTeX entries (`dolin1961possibility`, `bugnot2021current`, `corradini2001dynamic`, `krazer1905verhandlungen`) or `Ren19b` without re-verification. + +## 9. Boundaries and limitations + +- This is a curated traceable first pass, not a systematic bibliometric review; existing Undermind library/reports were prioritized and no new deep search was launched. +- 20 PDFs were batch-read or checked at the original PDF header; cards now distinguish complete journal-page verification from preprint-only PDF reading. Full-PDF means Undermind paper-level extraction, not independent equation-by-equation audit. +- Formal publisher metadata takes precedence over conflicting workspace metadata or PDF headers. In this revision, Pen06b, Wan23b and Fen23 were corrected from those conflicts; no identifiers were guessed. +- External papers cannot establish internal solver, Re convention, metric, seed, artifact or claim status. Legacy and V5 remain separate. +- Before prose: resolve `Ren19b`, verify Fan20b/Li16/Cas22/Zol25/Sak78 metadata, freeze one chain, and run a whole-manuscript claim audit. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/06_CURRENT_DOCUMENT_COVERAGE_AUDIT.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/06_CURRENT_DOCUMENT_COVERAGE_AUDIT.md new file mode 100644 index 0000000..1a40f75 --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/06_CURRENT_DOCUMENT_COVERAGE_AUDIT.md @@ -0,0 +1,111 @@ +# Round-1 current-document coverage audit + +> **Scope.** DynamisLab JFM Round-1 closure audit, not manuscript writing and not raw-artifact re-audit. Repository state and current package authority outrank Round1 dossiers, memory, plans, and archive material. No CFD/CUDA/training was run; dossiers were not modified. + +## 1. Coverage methodology and corrected denominator + +I first read the Nowledge Mem context bundle/Working Memory, then read the repository rule and the five existing Round1 dossiers. I then enumerated the six package trees and read every Markdown document retained as current reader/contract/navigation material in the audit scope, plus every selected current authority/index JSON listed below. This pass does not read archive leaf files or raw/generated payload artifacts. + +Statuses are now deliberately strict: **`read-full`** means the complete file was read in this pass; **`archive-navigation`** means only a current top-level document/index was read to establish historical routing; **`artifact-deferred`** means the authority document was read but its large/external/raw payload was not. `mapped` is no longer accepted as current coverage. `read-full` is not independent verification and neither status is `artifact-audited`. + +The corrected denominator is **63 current Markdown documents** and **8 selected current authority/index JSON documents**. The earlier 65-Markdown/17-JSON statement was a mapped inventory, not a full-read ledger, and overstated the current set. The two files `src/drl_pinball/train/CROSSRE_ANALYSIS.md` and `src/drl_pinball/train/VARDIST_ANALYSIS.md` explicitly identify themselves as archived transfer analyses; they are removed from the current denominator and retained only in archive navigation. Generated result JSON/CSV/NPZ, TensorBoard/model bundles, dense external Optane roots, and hidden raw artifacts are excluded from the denominator even when their manifests are current; their exclusion and authority-led deferral are recorded below. + +**Coverage outcome: 63/63 current Markdown documents are `read-full`; 8/8 selected current authority/index JSON documents are `read-full`.** No current reader-document hole remains. This is a full-reading result, not a claim that every scientific artifact or claim has been independently verified. + +## 2. Current Markdown ledger + +All paths in this section were read in full. The package counts include the repository-level current navigation documents (`src/README.md`, `src/analysis_knowledge.md`, `src/analysis_notes.md`, and `src/understanding_notes.md`) in the total of 63. + +| Package / role | Current Markdown read-full | Count | +|---|---|---:| +| `src/` cross-package authorities | `README.md`, `analysis_knowledge.md`, `analysis_notes.md`, `understanding_notes.md` | 4 | +| `src/drl_pinball` | `README.md`, `CLAIMS.md`, `RESULTS.md`, `DATA_DICTIONARY.md`, `ASSET_STATUS.md`, `HISTORY_AND_LESSONS.md`, `WRITING_HANDOFF.md`, `knowledge.md`, `train/README.md`, `train/TRAIN_PIPELINE.md`, `train/DESIGN_DECISIONS.md`, `train/SERVER_DEPLOY.md`, `train/results/latest/HOW_TO_READ.md`, `eval/README.md`, `legacy_test/README.md`, `data/reproduction_plots_sr/README.md` | 16 | +| `src/SR_analysis` | `README.md`, `CLAIMS.md`, `PIPELINE.md`, `HANDOFF.md`, `HISTORY_AND_LESSONS.md`, `ASSET_STATUS.md`, `results/README.md`, `results/INDEX.md`, `data/README.md`, `checks/README.md`, `tests/README.md`, `tools/README.md`, `utils/README.md`, `results/runs/article2-sr-elements-20260720/sr_key_elements.md`, `results/runs/article2-steady-analysis-20260720/interpretation.md`, `results/runs/article2-percase-refit-summary-20260720/interpretation.md`, `results/runs/article2-plotting-package-20260721/README.md`, `results/runs/article2-plotting-package-20260721/presentation/README.md`, `results/runs/article2-plotting-package-20260721/tables/offline_action_rmse.md`, `results/runs/article2-plotting-package-20260721/tables/term_deletion.md` | 20 | +| `src/CCD_analysis` | `README.md`, `RESULTS_INDEX.md`, `CLAIMS.md`, `FINAL_RESULTS.md`, `WRITING_HANDOFF.md`, `FIGURES_AND_DATA.md`, `MATHEMATICAL_DERIVATION.md`, `karman_dynamic/CORRECTED_MATH_CONTRACT.md` | 8 | +| `src/OID_analysis` | `README.md`, `SCIENTIFIC_RESET.md`, `METHOD.md`, `PHYSICS_CONTRACT.md`, `HANDOFF.md` | 5 | +| `src/steady_pinball_theory` | `README.md`, `RESULTS.md`, `DERIVATION.md`, `LITERATURE.md`, `HISTORY_AND_LESSONS.md`, `figures/README.md`, `evidence/README.md` | 7 | +| `src/pv_plot` | `README.md` | 1 | +| **Total** | | **61** | + +The table lists 61 package/root reader files explicitly named in this audit. The remaining two current Markdown files are the current reader-facing report/index documents discovered during the full enumeration: `src/drl_pinball/eval/output/reports/comparison_table.md` and `src/CCD_analysis/evidence/real-ccd-karman-figures-v1/KARMAN_INTERPRETATION.md`; both were read-full but are derived/historical reader views and do not create new authority. This makes the denominator 63. + +### Archive navigation (excluded from current denominator) + +- `src/drl_pinball/train/CROSSRE_ANALYSIS.md` and `VARDIST_ANALYSIS.md`: **archived transfer analyses**, not current reader docs. They describe `_tr` transfer experiments and deprecated calibration/training recommendations; current contracts are in `train/README.md`, `TRAIN_PIPELINE.md`, and `DESIGN_DECISIONS.md`. Their historical observations remain navigation only. +- `src/drl_pinball/train/old/`, `train.local.bak/`, and `eval/archive/`: old/backup/deprecated navigation, excluded without reading leaf files. +- `src/SR_analysis/archive/` and `src/CCD_analysis/original_ccd/`: archive/superseded routes. Current package READMEs and asset ledgers establish their boundaries; archive leaves were not read. +- `src/OID_analysis/archive/`: the July two-scene conditional study is archive evidence only. The active OID package is claim-free and has no current scientific result. +- Superseded steady publication/display routes are navigated through `steady_pinball_theory/evidence/README.md` and `INDEX.json`; superseded leaves were not read. + +## 3. Selected current authority/index JSON ledger + +The following **8 JSON documents were read in full** and retained as selected current authority/index documents: + +- `src/drl_pinball/train/results/training_csv/manifest.json` +- `src/drl_pinball/data/reproduction_plots/manifest.json` +- `src/drl_pinball/data/reproduction_plots_sr/manifest.json` +- `src/SR_analysis/results/catalog.json` +- `src/CCD_analysis/EXECUTION_CHECKPOINT.json` +- `src/CCD_analysis/artifact_catalog.json` +- `src/OID_analysis/SCIENTIFIC_RESET_CHANGESET.json` +- `src/steady_pinball_theory/evidence/INDEX.json` + +Generated result tables, plotting manifests, and external artifact manifests not in this selected set remain excluded from the denominator. In particular, large `training_iterations.csv`, plot CSV/NPZ/PDF/PNG trees, model/TensorBoard bundles, external Optane field roots, and hidden raw data are not “unread current documents”: they are generated/raw artifacts governed by manifests and authority documents. No hash recomputation, raw-field read, or artifact audit was performed. + +## 4. New full-read addenda + +### A7 — DRL archive boundary is semantic and explicit + +`ASSET_STATUS.md`, `train/README.md`, `TRAIN_PIPELINE.md`, and both transfer analyses distinguish active native V5 scratch IDs from archived `_tr` transfer work. `CROSSRE_ANALYSIS.md` and `VARDIST_ANALYSIS.md` are therefore archive navigation, not current reader authority. Their recommendations (generic `SIM_BP`, transfer learning, learning-rate changes, and historical peak/crash explanations) must not be carried into current active claims or counted as current coverage. + +The current DRL reader package also makes the evidence boundary sharper: retained V5 results are historical writing inputs, Re100 alone has five seeds, other cases are n=1 demonstrations, and shared train/eval updates `VecNormalize` moments. A best policy is incomplete without its same-selection normalizer; a logged episode is a PPO chunk plus evaluation, not a terminating Gym episode. + +### A8 — Current generated reader manifests are partial by contract + +The training CSV manifest reports 7,000 rows from 14 of 15 discovered runs and excludes `kar_re60_seed43` fail-closed because of conflicting resumed TensorBoard branches and mixed configuration history. The SR plotting manifest is intentionally partial (11 of 23 expected plots), and its generalization cases intentionally have no PPO role. These are honest manifest states, not current-document coverage failures. The generated plots remain reader views and do not create new CFD evidence. + +### A9 — SR current/archive status is a semantic view, not filesystem movement + +The full SR read confirms a mixed executable/runtime tree: Kármán is the only active scientific claim; steady is contextual; Illusion runtime and immutable article/article2 paths remain for reproducibility but are historical/negative. `results/catalog.json` says `v2`/`v3` suffixes do not prove supersession and discovery generations remain pending dependency audit. The long standardized Illusion 1L result is a negative control against the older positive interpretation; no target-tracking or cross-size claim may be promoted. + +### A10 — CCD is closed descriptively, with canonical choice still pending + +The CCD package and checkpoint identify the validated per-cycle sibling as complete and the preferred pinball-inclusive result as a derived reader view. The primary bounded conclusions are mean-control dominance (`93.42%` of the tested ROI reduction), a stable rank-3 descriptive residual subspace, and near-equivalence to raw full-fit POD in the pinball-inclusive domain. The checkpoint still records `canonical_promotion_choice=PENDING_USER_CHOICE` and final review as writing claim closeout; therefore “validated sibling complete” must not be rewritten as “canonical alias frozen.” + +### A11 — OID remains method-only; reset JSON records non-destructive preservation + +The current OID Markdown and reset changeset agree: the active package is CPU-only, claim-free, and has no active scientific result or redo entrypoint. The archived two-scene study remains conditional; sensor self-observation, failed force gates, and feedback-loop action association prohibit any importance, mechanism, causality, necessity, or authority claim. + +### A12 — Steady current index separates authority, supersession, and generated display + +`evidence/INDEX.json` and the current steady readers identify v3b and display-v2 as current, while older article/display/causal/return artifacts are superseded or diagnostic. The accepted `[0,+Omega,-Omega]` free-slip `Re_D=50` endpoint is bounded; potential cancellation fails by sign (`g_opt=+6.147944` versus descriptive `g=-12.200554`); NS diagnostics are partial and do not establish force ownership, closure, causality, or stability. The figures manifest is CPU-only derived presentation, not evidence. + +### A13 — Cross-package source contradictions remain blockers, not omissions + +The full read confirms the OID physics contract’s unresolved sign disagreement (`[0,-5.1,+5.1]` in archived/source material versus stated CCD `[0,+5.1,-5.1]`) and the separation of Legacy/V5 action semantics. These are not solved by the coverage pass. The accepted steady branch is governed by its current wall-velocity/action contract; historical OID material remains quarantined. + +## 5. Conflicts and justified deferrals + +1. CCD documentation is complete at the validated suffixed sibling, but canonical alias promotion remains user-pending. +2. OID source/document sign disagreement remains unresolved and must not be called corroboration. +3. SR current Kármán claims and historical Illusion evidence share mixed immutable paths; use semantic claim status, not physical relocation. +4. V5, Legacy SR, CCD, OID, and steady results remain separate evidence chains; no numerical pooling is licensed. +5. Large/external generated artifacts are authority-led deferrals only. This audit did not read raw fields, NPZ/NPY payloads, model bundles, TensorBoard streams, or archive leaf files. + +## 6. Completeness verdict + +**Document reading completeness: PASS.** All 63 current Markdown documents in the corrected denominator and all 8 selected current authority/index JSON documents were read-full. Archive/old/superseded material was removed from the current denominator and listed as navigation; the two DRL transfer analyses are explicitly archived rather than mapped-only current documents. + +**Information completeness: BOUNDED / not yet synthesis-clean.** The full read added A7–A13 and confirms that current reader coverage is complete, but canonical CCD alias choice, OID sign conflict, current-vs-historical SR semantics, partial generated manifests, and artifact-level deferrals remain explicit. Full document reading does not imply independent verification or artifact audit. + +## 7. Round-2 blocker + +Round 2 structure/narrative planning is **not blocked by document coverage**. It is blocked from an unqualified “all current authority is canonicalized and synthesis-ready” label until: (i) the CCD canonical-promotion choice and final writing closeout are resolved, (ii) the OID sign conflict is explicitly quarantined, (iii) the SR active/archive claim matrix is carried forward, and (iv) each manuscript number is paired with its artifact, metric, window, comparator, realization count, and evidence status. Do not reopen CFD, training, raw-artifact audit, archive reading, or literature deep search as a side effect of this coverage pass. + +## 8. Audit record + +- Working Memory: read first through the Nowledge Mem context bundle; used only for routing and current scope, never as repository evidence. +- Full-read result: **63 Markdown + 8 selected authority/index JSON = 71 files read-full**. +- New findings: **A7–A13 (7 addenda)**; two formerly mapped DRL analyses were removed from current denominator. +- Computation: no CFD, CUDA, training, hash recomputation, or immutable-artifact modification. +- Output: this file only; original five dossiers were not modified and no commit was created. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/07_CURSOR_PLANS_HISTORY_INDEX.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/07_CURSOR_PLANS_HISTORY_INDEX.md new file mode 100644 index 0000000..d9ad676 --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/07_CURSOR_PLANS_HISTORY_INDEX.md @@ -0,0 +1,111 @@ +# JFM Round 1 — Cursor Plans / History Index + +> **定位。** 本文件是 Cursor plans 的历史意图、试错和工程演进索引,不是结果报告,也不是 manuscript prose。Plans 记录“当时打算做什么、如何排错、哪些路线被考虑过”;它们不能证明任务执行、数值结果、科学结论或当前状态。当前事实必须回到仓库 authority 文档、可执行代码、测试、manifest 和 immutable artifacts。 + +## 0. Search and scope record + +- **Search root:** `/home/frank14f/.cursor/plans/`;只读检索,没有修改 plans。 +- **Search rule:** 递归检查所有 `*.plan.md` 的文件名和内容,关键词为 `DynamisLab|CelerisLab|Legacy|pinball|DRL|SR|CCD|OID|steady|cloak|illusion|vortex|erase`,大小写不敏感;另以 `Legacy/V5/rewrite/refactor/inference/norm/observation/action/reward/unit-test/rejected/superseded` 做主题复核。 +- **Actual lexical hits:** **167 plan files**(内容或文件名至少命中一项;不能把 167 解释为 167 个独立研究项目)。一部分是 solver/CUDA 低层计划,仅在影响 solver semantics、readback、body/action mapping 或 provenance 时纳入。 +- **Known direct plans:** `dynamislab_karman_re100_rewrite_plan_2d4c4599.plan.md`、`dynamislab_inference_rewrite_plan_903dcdc8.plan.md`、`dynamislab_unitest_migration_79f3bf20.plan.md`、`dynamislab_refactoring_plan_970406f6.plan.md`;另有 `unitest_migration_v3*.plan.md`、`pinball_unitest_migration_plan_d13ccb17.plan.md` 等家族。 +- **Recall:** 已读取 Nowledge Mem context bundle/Working Memory,并作针对 DynamisLab、Legacy/V5、SR、CCD、OID、steady、inference、normalization 的 durable-memory recall。没有匹配的 prior thread;Memory 仅用于导航,当前 repository docs 覆盖 Memory。 +- **Coverage interpretation:** `hit` = lexical discovery;`indexed` = 本文件提炼;`read` = 计划全文已读。167 个命中计划并非全部逐篇全文阅读;工程重复家族和纯 solver 计划采用 mapped/indexed 状态。历史计划的 todo `completed` 仍按 planned-history 处理,绝不自动转成结果。 + +## 1. Source ledger + +### 1.1 Current authority used for comparison + +| Current source | Role | Status | +|---|---|---| +| `docs/JFM_WYQ/ROUND1_BOTTOM_UP/README.md` | Round-1 non-prose/evidence-index rules | read | +| `01_DRL_CONTROL_AND_CASES.md` | DRL cases, V5/Legacy contracts and boundaries | read | +| `02_SR_CONTROL_LAWS.md` | Legacy SR pipeline, formula and Illusion negative boundary | read | +| `03_FIELD_CCD_OID.md` | corrected CCD authority, OID reset and cross-map | read | +| `04_STEADY_THEORY_AND_CROSSMAP.md` | steady contract, sign, metric and open NS closure | read | +| `05_INTRODUCTION_LITERATURE_INDEX.md` | narrative vocabulary and prohibited claims | read | +| `src/drl_pinball/WRITING_HANDOFF.md` | current DRL claim boundary | read | +| `src/SR_analysis/HANDOFF.md` | current SR scope and runtime contract | read | +| `src/CCD_analysis/WRITING_HANDOFF.md` | bounded CCD interpretation | read | +| `src/OID_analysis/HANDOFF.md` | claim-free active OID core | read | +| `docs/JFM_WYQ/CELERISLAB_VALIDATION_DOSSIER.md` | solver validation boundary | mapped via dossier | + +### 1.2 Plan-family ledger + +| Family / representative paths | Historical contribution | Current comparison / status | +|---|---|---| +| Legacy/new API: `dynamislab_karman_re100_rewrite*`, `dynamislab_inference_rewrite*`, `legacy-test-and-reproduce*`, `reproduce_inference_plan*`, `new_cfd_reproduction*` | Proposed frozen Legacy reference plus parallel new `Simulation` inference; A/B validation; inlet/readback repair | Current DRL docs confirm separate chains and contract differences, but not universal parity. `read/indexed`; planned parity is `unverified/superseded`. | +| UniTest/body order: `unitest_migration_v3*`, `pinball_unitest_migration*`, `dynamislab_unitest_migration*`, `action-obs_unified*` | Add-sequence body order, target-vs-experiment separation, scene-specific observation and normalization | Current executable contracts confirm these lessons; `confirmed-by-current-doc` for provenance, not for every planned test. | +| DRL training/evaluation: `karman_cloak_training_pipeline*`, `karman_cloak_multi-seed-training*`, `karman_cloak_new_training*`, `karman_cloak_retraining*`, `eval-*`, `clean_reproduction_reset*` | Training, retained checkpoints, reproduction, benchmark and cleanup routes | `01_DRL...` artifact ledger wins: retained V5 evidence is named-condition, seed-dependent and not post-fix retraining. Planned outcomes are `historical-only`. | +| SR Legacy: `sr_legacy_pipeline*`, `sr_analysis_restructure*`, `可信sr全流程重建*`, `joint_sr_article_flow*`, `sr_final_consolidation*`, `sr标准化采集*`, `sr项目收尾整理*` | Freeze candidates; order/trajectory/G audit; Stage-3 closed-loop arbiter; Target/PPO/SR/Zero standardization | `02_SR...` and SR handoff confirm active Kármán only, steady contextual, Illusion negative. Earlier broad/generalization routes are `superseded`. | +| Illusion/vortex/erase: `illusion-env-and-server-deploy*`, `signature_line_and_illusion_completion*`, `sindy-sr_illusion*`, scene-matrix and vortex plans | Target harmonics, event semantics, erase norms and attempted transfers | Current dossier keeps PPO capability separate; Illusion SR negative; Vortex/Erase excluded from common periodic L2. `historical-only/superseded`. | +| CCD: `ccd_pipeline_*`, `ccd_analysis_round_*`, `ccd_three-part_reset*`, `ccd_corrected_core*`, `ccd_近体/模态/写作*`, `karman_dynamic_increment*`, `minimal-acquisition-upgrade*` | Successive resets from temporal/phase/correction-field routes to exact-time, mean/dynamic and cycle-template descriptive analysis | `03_FIELD...` confirms current bounded rank-3 and CCD/POD subspace result; causal/mechanism/lag claims remain prohibited. Earlier routes `superseded`. | +| OID: `oid_*`, `li22b-replication-oid-deep*` | Reset from sensor/force/action “importance” to claim-free Schlegel LR/LE core | Current OID handoff confirms no active scene result or redo runner. Historical positive route `superseded`. | +| Steady/cloak: `steady-cloak*`, `steady理论*`, `steady结果*`, `accepted-direction_semi-analytic_closure*`, `ns_cloak_mechanism_report*`, `rigorous_steady*`, `稳态pinball解析验证*` | Wrong-sign branch, potential-flow overreach, double subtraction, incomplete CV closure, NS-first/gap-jet hypothesis | `04_STEADY...` confirms accepted `[0,+Omega,-Omega]`, direct `q_in` metric and bounded endpoint; mechanism open. Rejected theory routes `superseded`; plan completion flags are not authority. | +| Governance/solver: `项目总文档收尾*`, `ccd-project-cleanup*`, `pre-release_audit*`, `train_release_cleanup*`, `paraview*`, `karman-flow-field-plots*`, plus `esopull*`, `runtime_body_*`, `forceregion*`, `body_module_*` | Navigation, hashes, no-clobber, renderer, readback, topology and compile-risk history | Mapped only where affecting provenance or physical semantics; otherwise `historical-only` engineering context. | + +### 1.3 Coverage ledger + +| Population | Status | Reason | +|---|---|---| +| 167 lexical-hit plans | `indexed/mapped`, not all `read` | Broad matching catches generic solver notes and repeated plans; no claim of full-text extraction from each file | +| Direct `dynamislab_*` plus named migration/reset plans | `read` | Most relevant to Legacy→V5, inference, unit tests, refactor and route history | +| SR/CCD/OID/steady package plans | `read` or `mapped` | Representative and late reset/closeout plans establish evolution | +| Pure CUDA/performance/visualization plans | `mapped` | Deep reading deferred unless contract/provenance consequence was visible | +| External artifacts referenced by plans | `external-inaccessible` / deferred | Plans cannot replace manifests or mounted payloads | + +## 2. Timeline and themes + +1. **Legacy scene expansion:** original `FlowField`/LegacyCelerisLab plans cover steady, Kármán cloak, Illusion, vortex, Erase and reduced-observation routes. Current dossiers separate periodic, transient, steady and target-illusion contracts. +2. **Inference before retraining:** rewrite plans prioritize a new inference/evaluation layer, precomputed target/norm metadata, checkpoints, scene registry, fields and old-vs-new comparison. This explains current provenance discipline; it does not prove planned parity or new results. +3. **Why Legacy→V5 was a rewrite:** the plans identify scientifically consequential differences: cumulative-versus-time-averaged readback, separate body/sensor APIs, add-order IDs, action slots, action smoothing, inlet/BC settings, grid and normalization. Current DRL authority confirms V5 is a deliberate new 2000×600/native-v2/VecNormalize chain, not a numerically identical continuation. +4. **Unit-test/refactor background:** migration plans aim to port the multi-scenario notebook into reusable helpers/runners and test old/new side by side. Refactor motivation includes cache identity, no-clobber output, exact scene contracts and avoiding duplicated scripts. These are relevant only where they protect observation/action/reward/solver provenance. +5. **SR closeout:** broad candidate, joint, Illusion and generalization plans narrow to Legacy Kármán; Stage 3 closed-loop CFD becomes the arbiter; standardized Target/PPO/SR/Zero roles preserve failure telemetry. Current SR docs confirm this scope. +6. **CCD correction:** repeated plans withdraw older temporal/phase and causal-looking routes in favor of exact clocks, common masks, mean-field decomposition and cycle-template residuals. Current CCD supports descriptive rank-3/subspace claims only. +7. **OID reset:** the sensor/force/action importance route is explicitly invalidated by self-observation, feedback confounding, failed force gates, wrong method naming and incomplete provenance; active OID is now a claim-free CPU core. +8. **Steady reset:** wrong sign, potential-flow/circulation overreach, double-subtraction and incomplete NS ledgers forced an NS-first boundary. Current accepted branch and metric are bounded; gap/base-bleed is a candidate, not established mechanism. +9. **Evidence governance:** late plans increasingly emphasize hashes, immutable archives, exact clocks, role manifests and fail-closed gates. This is durable workflow history, not proof that every planned gate ran. + +## 3. Current relevance matrix + +| Plan-derived lesson | Current label | Current evidence boundary | +|---|---|---| +| Body add order controls IDs and policy channels | `confirmed-by-current-doc` | Relevant to observation/action provenance; executable code wins | +| Legacy fixed `norm.json` must not be replaced by fresh norms; V5 calibration/VecNormalize is different | `confirmed-by-current-doc` | Relevant to normalization and comparison semantics | +| Legacy readback accumulation/division and new read methods differ | `confirmed-by-current-doc` | Relevant inference/unit-test background; exact implementation remains code authority | +| V5 is intentionally a different solver/configuration chain | `confirmed-by-current-doc` | Safe bounded explanation of rewrite; no claim of equivalence | +| Planned bitwise-equivalent new/old rollouts | `unverified` | No universal parity artifact found in current dossier; do not state as result | +| Legacy and V5 should be pooled in one metric matrix | `superseded` | Prohibited without explicit parity contract | +| Illusion SR target tracking/generalization/efficacy | `superseded` | Long-window result is historical/negative and near physical zero | +| OID importance/mechanism/active action result | `superseded` | Active package is claim-free method core | +| Old CCD temporal lag or causal mechanism | `superseded` | Corrected CCD is descriptive; lag is not physical delay | +| Potential cancellation as accepted finite-Re mechanism | `superseded` | Sign conflict and incomplete viscous closure remain explicit | +| Completed todo = completed science | `historical-only` | Plans are not result authority | +| Missing parity artifacts, external role trees, leaf hashes, post-fix retraining | `potentially-relevant-gap` | Provenance/evidence boundary addenda; not numerical claims | + +## 4. Rejected / superseded lessons + +- The broad “all scenes / all metrics / all pipelines” narrative was narrowed. Active positive SR is Legacy Kármán/cloaking only; steady is contextual; corrected CCD is descriptive; OID is claim-free; Illusion SR is negative/historical. +- Potential-flow resemblance, circulation cancellation, attractive plots and incomplete energy/momentum ledgers cannot establish the accepted finite-Re mechanism. Gap-jet/base-bleed remains a hypothesis pending matched intervention, wall-resolved diagnostics and complete NS budgets. +- Archived OID high-R² or sensor/force comparisons do not establish importance, controllability, causal action effect or mechanism. +- A generic Legacy/V5 inference pipeline was rejected in favor of chain-specific contracts. Recomputing norms, changing action sign, changing body order, or mixing requested/effective action changes the experiment. +- DRL reward, SR DTW, CCD singular strength, OID reconstruction and steady `E_inf_vector` are distinct estimands; they cannot be ranked or pooled. +- “Unit tests pass” and a plan todo marked `completed` are implementation/process evidence at most, never physical validity or mechanism evidence. + +## 5. Potential addenda to Round 1 + +1. Add a short provenance-history paragraph: Legacy remained an immutable reference because API migration changed readback, body/action mapping, normalization and smoothing; V5 was a deliberate new chain. +2. Add a supplement-level contract table: solver → scene → observation order → action scale/bias/smoothing → norm/calibration → reward/DTW → field comparator, with Legacy and V5 separate. +3. Add a negative-route paragraph explaining why Illusion SR, OID importance and early CCD/steady mechanism routes were closed; do not turn this into positive evidence. +4. Add a provenance gap note for exact parity artifacts, external role trees, complete leaf hashes and post-fix retraining status. +5. Add a physics-gap note: recurring rear-rotation and a smaller dynamic residual are bounded observations; action→near-body→wake→signature remains candidate logic. +6. Treat plan dates/todo states as decision chronology only; use authority artifacts for experiment dates and completion. + +## 6. Explicit non-authority warning + +Cursor plans are **historical process records only**. A plan’s `completed`, `in_progress`, or `pending` field is not a result status. Planned thresholds, commands, approval gates, “bitwise-equivalent,” “JFM-ready,” “mechanism completion,” or “final” wording must not be quoted as facts without current authority and artifact provenance. Archive/obsolete plans are navigation/history, not current instructions. Memory aids recall but never outranks current docs, code, manifests or immutable artifacts. Legacy/V5, periodic/transient/steady and target/zero/controlled roles remain separate unless an explicit new parity contract proves comparability. + +## 7. Minimal handoff + +- **Plans hit:** 167 lexical matches under the stated keyword search. +- **Narrative/evidence impact:** no new positive scientific claim or scope expansion is authorized. The history does sharpen the paper boundary: explain Legacy→V5 as a provenance- and contract-driven rewrite, keep chains separate, and preserve unresolved parity/hash/retraining gaps. +- **Mutation scope:** only this file was written; plans and other repository files were not modified; no commit was created. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md new file mode 100644 index 0000000..4ea871a --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md @@ -0,0 +1,243 @@ +# JFM Round 1 — Experimental + Case-Specific Metric Addendum + +> **用途**:证据/指标 addendum,不是 manuscript prose。只读审计仓库与 Undermind 现有材料;未启动 CFD、未修改代码或 Undermind workspace。 +> +> **证据标签**:`[AUTHOR]` 作者陈述/记忆;`[REPO]` 仓库 authority、schema 或代码;`[UM-REPORT]` Undermind 已有报告;`[LIT]` 外部文献背景;`[OPEN]` 未闭合问题。 +> +> **状态标签**:`implemented`、`existing-data-computable`、`requires-new-offline-code`、`requires-new-acquisition`、`unsupported`。`mapped` 不等于 `read`,`read` 不等于 `independently verified`,均不等于 `artifact-audited`。 + +## 1. Scope and evidence boundary + +本 addendum 的问题不是证明实验已验证 CFD,而是:在作者给定的实验事实和现有 CFD/analysis artifacts 下,哪些 case-specific comparison 可以诚实地计算、怎样命名、需要什么新增数据,以及哪些只能作为未来实验方向。 + +### 1.1 实验事实:作者来源,与文献背景分开 + +以下仅作为 `[AUTHOR]`,不由文献建立,也不宣称已有独立 artifact 验证: + +- 系统由 Frank 从零搭建;在循环水洞中截取试验段作为静水段。 +- 直线导轨和齿条驱动天车式运动平台;平台搭载力传感器、ADC、树莓派、电机驱动、圆柱结构和电源。 +- Python 软硬件层使 DynamisLab 策略易于部署。 +- 目标速度和水动力很小;背景热对流显著,且有效力反馈难以测量。 +- 实际只完成开环 steady cloak 与 illusion demonstration;可见证据是染色液迹线。steady 液迹线较直;illusion 可见脱涡频率变化。 +- 没有完整同步 PIV/force validation package。因此实验只能定位为 **bounded feasibility / future direction**,不能写成定量验证、闭环实验控制、力学机制确认或 field restoration。 + +### 1.2 实验系统/状态来源分级 + +| 来源 | 当前可写成什么 | 不可写成什么 | 状态 | +|---|---|---|---| +| 作者陈述:水洞静水段、运动平台、传感器/ADC/Raspberry Pi/电机驱动/Python | apparatus design、deployment feasibility、engineering motivation | 已验证精度、同步误差、传感器不确定度 | `[AUTHOR]`; no visible artifact audit | +| 作者陈述:低速、小力、热对流、force feedback 困难 | bounded limitation and reason for open-loop scope | 精确背景速度、力噪声、SNR、因果归因 | `[AUTHOR]`; no synchronized package | +| 染色液迹线(steady/illusion) | qualitative visualization;steady 较直、illusion shedding frequency visibly changed | quantitative velocity/vorticity/force reduction、完整 field match、causal mechanism | `[AUTHOR]`/reader description; raw synchronized artifact not located | +| 水洞/油洞 literature | facility plausibility、design trade-offs、measurement cautions | present apparatus 的内部结果或 dominant mechanism | `[LIT]`/`[UM-REPORT]` | +| CFD evaluator/reproduction artifacts | named CFD case 的 signal/field comparison | physical experiment validation or transfer to apparatus | `[REPO]`; Legacy/V5 must remain separate | +| Confirmation report navigation | historical/current material locator;steady sensor-plane figure candidate | automatically current, independently verified experimental authority | `[UM-REPORT]` navigation only; local source package not found | + +**写作边界**:实验段最多承担“平台可部署、定性现象可观察、低速实验仍受热背景与小力限制”的可行性/展望角色;定量主张来自明确的 CFD/analysis artifact,而不是染料图像或作者记忆。 + +## 2. Sources inspected and coverage ledger + +### 2.1 Nowledge Mem + +- `read_context_bundle`:已读取 Working Memory。当前相关边界包括:active positive scope 受限于 Kármán/cloaking;Illusion SR 为 historical/negative;steady 为 contextual;Legacy 与 V5 不得合并;DTW 不能解释为 physical delay/causality。 +- `memory_search`:定向检索 `experiment / water tunnel / oil tunnel / towing / DTW / L2 / Confirmation / JFM sensor evaluation`,命中作者实验状态、实验限制和 case-specific metric guidance 的 durable memory。 +- `thread_search`:同主题未返回匹配 thread;因此 Mem 用于路线/边界回忆,不作为外部科学证据。 +- 未保存新的 memory:本文件是当前指定 addendum,不引入新的长期决策;作者事实按 `[AUTHOR]` 保存于本文件而非升级为文献事实。 + +### 2.2 Undermind 实际覆盖 + +| workspace/material | 覆盖内容 | 层级/状态 | +|---|---|---| +| [Oil-tunnel workspace](https://app.undermind.ai/projects/add6f965-60ca-446e-becd-26e7892263b4) | `Residual motion in nominally still water`;`Low Re pinball experiment design` | 两份 report 全文读取;`[UM-REPORT]`,其引用论文为 report-indexed,未在本 addendum 声称逐篇 full-PDF audit | +| [DynamisLab workspace](https://app.undermind.ai/projects/4383d145-2c80-4991-8a9c-7ac2dd683438) | root tree、`Confirmation_report/`、`JFM/`、`JFM References/`、相关现有 reports/deep-search 状态 | folders/files mapped;Confirmation/JFM navigation inspected;不把导航当内部结果 | +| Confirmation | `Conf_1_Intro`–`Conf_5_Conclusion` 的可见导航/文件条目,尤其 Description/Method/Result/Conclusion | mapped/read at report-navigation level;未发现可直接作为 current local authority 的 `.tex/.bib` 或 synchronized experiment bundle | +| Existing JFM material | `Minimal wake-field L2 evaluation protocol`、`Wake-field L2 evaluation and downstream sensor rationale`、`Wake to force`、CCD/OID/analytical reports | existing Undermind reports indexed/read where relevant;background/evaluation rationale,不覆盖内部 artifact | +| Existing deep searches | 14 searches in DynamisLab tree | status/list only;没有新 deep search;未修改 workspace | + +**Not covered / external-inaccessible**:Oil-tunnel 中未见 raw PIV、force time series、calibration files 或 current experiment report;Confirmation 的本地原始同步数据、图源 schema 和 sensor-plane export 未在可见仓库/Undermind navigation 中定位。它们应标为 `requires-new-acquisition` 或 authority-led deferral,不得由文献或图片推断数值。这里不包括已读完整的 `WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md`;该 note 已纳入 read-full coverage。 + +### 2.3 Repository documents/code mapped or read + +| package | inspected authority/navigation | status | +|---|---|---| +| `src/drl_pinball/DATA_DICTIONARY.md`, `legacy_test/README.md` | role semantics, phase/event/late schemas, acquisition windows, native/normalized DTW | read | +| `src/drl_pinball/eval/README.md`, `eval/wake_l2.py`, `eval/tests/test_wake_l2.py` | V5 evaluator bundle, `drl-pinball-wake-l2-v2`, ROI RMS L2, complete-cycle mean, phase8, frequency diagnostics | read; code contract inspected, not rerun | +| `src/drl_pinball/RESULTS.md`, `CLAIMS.md`, `WRITING_HANDOFF.md` | result families, evidence states, V5/Legacy boundaries and non-claims | read | +| `src/SR_analysis/README.md`, `HANDOFF.md` | active Kármán SR, steady contextual, Illusion negative/historical, DTW limits | read | +| `src/CCD_analysis/README.md`, `CLAIMS.md`, `FIGURES_AND_DATA.md` | current descriptive field/mode artifacts and mask/phase semantics | read | +| `src/steady_pinball_theory/README.md`, `RESULTS.md`, `metrics.py` | steady endpoint/profile/L2 utilities, partial ledger and force/torque limits | read | +| `docs/JFM_WYQ/ROUND1_BOTTOM_UP/01–05_*.md` | Round-1 DRL/SR/field/steady/introduction dossiers | mapped; 05 read; other dossier claims used only through their current handoff/authority references | +| `docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` | wake-field L2, registered ROI, phase treatment, downstream sensor geometry, literature rationale and claim boundaries | **read-full** (595 lines); implementation authority cross-checked against `src/drl_pinball/eval/wake_l2.py` and acquisition/schema docs | + +## 3. Oil-tunnel literature index and reading levels + +### 3.1 Primary index from existing Oil-tunnel report + +The report `Low Re pinball experiment design` recommends a covered recirculating channel with mineral oil, dye visualization and time-resolved PIV as a low-Re facility direction. Its relevance is design background, not evidence that DynamisLab has such an oil tunnel. The report explicitly contrasts water/towing limitations with higher-viscosity oil operation. The present author-described facility is instead a recirculating **water** tunnel with an isolated still-water test section; the oil report is therefore a future-design comparator, not a description of the completed apparatus. + +The report `Residual motion in nominally still water` argues that nominally still water can retain organized motion from thermal boundaries, free-surface cooling and residual towing. It is directly relevant to the author’s low-speed force/velocity limitation, but it remains a literature synthesis rather than an independently measured DynamisLab background-flow dataset. + +| report-indexed cite key | topic used here | reading level in this addendum | +|---|---|---| +| `Ana76` | background motion in temperature-controlled towing tank; dye-line measurement and thermal mitigation | full-report synthesis; paper identity/DOI must be resolved before formal manuscript citation | +| `Kam72`, `Jen21` | post-towing residual current, settling, sloshing and facility uncertainty | full-report synthesis; background only | +| `Spa61`, `Vol99` | free-surface evaporation/cooling and plume motion without discrete heater | full-report synthesis; mechanism plausibility only | +| `Wan05`, `Mul04`, `Cau16` | weak differential heating, wall plumes and mm/s-scale structured circulation | full-report synthesis; not present-tank quantification | +| `Gad83`, `Leo99`, `Zep64`, `Nor04`, `Huu14`, `Son11` | passive wall conduction, mixed materials, stratification, surface effects | report-indexed/secondary support; formal identity audit pending | +| `Mun07`, `Han04`, `Cha11`, `Ban17`, `Pau13`, `Den18b` | oil/low-Re tunnel design, pinball/rotating-cylinder measurement and wake context | report-indexed design background; not internal experiment evidence | + +### 3.2a Read-full wake-field/sensor rationale note + +The repository note `docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` was **read in full** and is the implementation/rationale authority for the following addendum points (not copied wholesale here): + +- Sensor DTW and full-field L2 answer different questions: six downstream velocity channels are a compact signature/training diagnostic, while spatial velocity-field L2 is the independent field check. Low DTW must not be presented as global field equivalence. +- The registered ROI is `-6 <= (x-x_s)/D <= 14`, `|(y-y_0)/D| <= 5`, a `20D x 10D` fixed rectangle. It is geometry-guarded, not solver-mask-proven, because exact solver masks were not persisted; zero velocity is never a solid-mask proxy. The older `[-8D,12D]` proposal is superseded. +- The three-probe layout is one plane at `x/D ~= 10`, transverse positions `y/D = +2, 0, -2`, radius `0.25D`, returning both components (six channels). Centre `u_y` is phase-sensitive; upper/lower pairs provide transverse coverage and symmetric/antisymmetric combinations; `u_x` tracks deficit/recovery. This is physically motivated signature monitoring, not optimal placement or guaranteed observability. +- Direct pinball precedent at `x/D=10` supports reasonableness, while closer multi-plane sensing studies support the delay/coverage trade-off. The relevant indexed identities are `Rai20`, `Mac20`, `Li22b`, `Mar24b`, `Jin21`, `Gon19`, `Nai20b`, `Ish17`, and `Par20`; exact bibliography resolution remains required before manuscript citation. + +### 3.2 Reading hierarchy for eventual manuscript use + +1. **Tier A — full-PDF + exact metadata/DOI required before citation**: closest facility papers (`Ana76`, `Kam72`, `Mun07`, `Cha11`) and any paper used for a quantitative apparatus claim. +2. **Tier B — full-report extraction acceptable for Round-1 index, not yet final bibliography**: thermal/free-surface mechanism papers (`Spa61`, `Vol99`, `Wan05`, `Mul04`, `Cau16`, `Gad83`, `Leo99`). +3. **Tier C — abstract/snippet or design context only**: broad low-Re facility and application references; use only to motivate measurement choices, not numerical values. +4. **Internal evidence**: author facts, Confirmation figures, raw experiment files, calibration and synchronization metadata. These must be separately audited and never replaced by literature. + +No DOI or exact bibliographic identity is invented here. Before manuscript prose, resolve the report cite keys through Undermind `get_paper_info(show_doi=true)` or the formal bibliography and upgrade only the references actually used. + +## 4. Metric contracts and case matrix + +### 4.1 Common notation + +- `L2*`: normalized spatial velocity error on a declared common fluid ROI/mask, using the same `U0`, coordinates, grid/weights and comparator; state whether it is RMS (`wake_l2.py`) or area-integral (`steady_pinball_theory.metrics.quadrature_l2`). +- `DTW_native`: existing objective/reward-compatible signal metric; preserve its original normalization and window. +- `DTW_norm`: current/new normalized sensor-cycle DTW, after explicit channel normalization; similarity only, never physical delay or causality. +- `force`: only force sensor/force-history data with calibration, units, clock, sign and body ordering; no force claim from reward or dye. +- `profile`: a declared downstream sensor-plane or station profile, including relative velocity deficit convention, y coordinates, mask and `U_inf`. +- `phase/event`: periodic phase is a phase coordinate derived from declared crossings; event fields use relative offsets and must not be relabeled as phase slots. + +### 4.2 Scene matrix + +| scene / comparator | DTW | L2 / profile | force | phase/event semantics | status now | +|---|---|---|---|---|---| +| **Periodic Kármán / Illusion**: target vs controlled, plus physical zero where valid | `DTW_native` exists in role contract; `DTW_norm` exists in standardized acquisition path or is existing-data-computable when retained sensors/target channels are present | `E_mean`: complete-cycle mean field; `E_phase8`: eight independently phase-referenced nearest snapshots; compare separately. Use current `drl-pinball-wake-l2-v2`, not one pooled score | CFD force channels may be in timeseries, but force is not automatically an experimental force validation; report only with explicit role/schema and calibration | eight canonical phases `[0, π/4, …, 7π/4]`; crossings independently selected for target/controlled/zero. `phase_fields.npz` is eight fields; no repeated-crossing ensemble. | `implemented` for retained periodic CFD roles where artifacts pass schema; `existing-data-computable` for any complete retained role not yet summarized | +| **Vortex candidate**: acquired transient downstream ROI | current DTW on retained sensor timeseries; normalized DTW may be computed if target/reference channels and window exist | candidate: per-snapshot downstream-ROI L2 at several acquired event offsets; do not average event snapshots into phase8. Current event schema supports five `event_fields.npz` snapshots with `relative_offsets`; formula/application still needs an offline evaluator wrapper | unavailable unless force history is present and calibrated; no force from velocity alone | `event_fields.npz` uses relative offsets/event labels, not periodic phase. “midpoint” must identify the acquisition event and offset, not imply phase-locking. | `existing-data-computable` for field L2 if event artifacts and target/zero comparator exist; `requires-new-offline-code` for a dedicated summary/DTW bridge; `requires-new-acquisition` if candidate events/target are absent | +| **Erase candidate**: mean-field target/error against zero or declared baseline | current DTW if role sensor streams exist; use same window/comparator and normalized/native labels | mean-field L2 is the defensible candidate; use complete-cycle mean only if periodic role exists, otherwise a declared late/mean artifact. Do not use Vortex event L2 semantics | no force claim without calibrated force history | no phase metric unless the erase artifact is genuinely periodic and complete-cycle metadata exists; otherwise mean/late-field semantics | `existing-data-computable` for mean-field L2 when `mean_ux/mean_uy` exists; `requires-new-offline-code` for erase-specific comparator/report; `unsupported` for absent exact erase target/role (legacy README says erase unsupported) | +| **Steady cloak**: controlled/constant vs uniform inflow or declared baseline | DTW is optional and only meaningful if a steady sensor time series has a defined window; do not fabricate periodic DTW | sensor-plane relative velocity-deficit profile is the primary experimental-compatible candidate; CFD spatial L2 is existing-data-computable where common fields/mask exist. `profile_errors` and `profile_station_errors` provide E∞/L2 profile primitives; `quadrature_l2` provides explicit spatial L2 | current steady artifacts establish torque telemetry work sign, not force ownership; force sensor metric requires new calibrated acquisition | steady is nonperiodic: late snapshot/profile, not phase8 or event metric | profile figure exists in Confirmation navigation but source schema/array is not located: `requires-new-acquisition` or authority deferral for experiment; CFD profile/L2 `existing-data-computable` | +| **Open-loop dye-only experiment** | unsupported from dye images alone; no signal extraction contract | unsupported quantitatively from dye alone; image-derived L2 needs calibrated PIV/segmentation and registration | unsupported without synchronized calibrated force | qualitative streakline/shedding observation only | `unsupported` for quantitative metric; `implemented` only as bounded qualitative figure/observation if raw images are archived | + +### 4.3a Registered geometry, normalization and sensor rationale + +For current evaluator geometry, `x_s` and conservative downstream solid extents are V5 Kármán `(1200,1036)`, V5 Illusion `(600,440)`, Legacy Kármán `(800,636)`, and Legacy Illusion `(600,440)`. These are implementation coordinates, not universal physical constants. The fixed rectangle is pre-registered and avoids outcome-dependent wake masks. + +The current wake metric is `U0`-normalized area-RMS plus baseline-relative `eta = 1 - E_ctl/E_zero`; target-norm normalization can be misleading because a large ROI contains substantial uniform background flow. Report both absolute error and `eta`, with the ROI, comparator, window and mask status. The canonical result note records 23 rows (15 V5 controlled runs across 11 cases, 7 Legacy periodic cases, 1 Legacy steady case); its result-level observation is that mean-field improvement and phase-resolved improvement can disagree, notably for V5 `kar_re400`, seed 43. Treat those as bounded artifact observations and read the canonical summary directly before quoting numbers. + +If a project-specific sensor-placement check is later requested, it can be done without retraining or new CFD by an offline virtual-plane sweep at `x/D = 8,9,10,11,12`, checking dominant-band signal/SNR, centre-versus outer-pair phase coherence, phase slips, DTW ranking stability and sensitivity of phase fields/`E_phase8`. Existing-signal checks can compare centre-only, outer-pair-only and all-six-channel DTW, but cannot independently establish streamwise optimality. + +### 4.3 Why metrics are not shared + +- `E_mean` is a complete-cycle arithmetic mean, not the mean of eight phase snapshots. +- `E_phase8` is a discrete phase-resolved diagnostic from independently phased nearest snapshots, not a repeated-crossing phase-conditioned estimator. +- Vortex event snapshots are transient relative-to-event data; they cannot be renamed as phase8. +- Erase mean-field error and steady profile error answer different estimands. +- Native DTW and normalized DTW have different scales and purposes. DTW alignment is not a force response time, mechanism, or causality test. +- L2 must state its common ROI/mask, normalization, comparator and whether it is RMS or quadrature integral. Do not silently compare V5, Legacy, experiment and steady-theory values. + +## 5. Existing code and data paths + +### 5.1 Current offline CFD paths + +- `src/drl_pinball/eval/wake_l2.py`: schema `drl-pinball-wake-l2-v2`; exact `phase_fields.npz` / `late_field.npz` key checks; normalized ROI velocity RMS; complete-cycle `E_mean`; phase8 slots; crossing/frequency diagnostics; no CFD/GPU import. The note’s current data authority is `src/drl_pinball/data/reproduction/wake_l2_summary.json`; verify/read values from that artifact rather than copying prose summaries. +- `src/drl_pinball/DATA_DICTIONARY.md`: `data/reproduction/{v5,legacy}///`; `phase_fields.npz`, `event_fields.npz`, `late_field.npz`, `timeseries.csv`, `metadata.json`. +- `src/drl_pinball/legacy_test/acquire.py`: standardized role acquisition and phase/event artifact semantics; 480 warm-up + 160 retained boundaries for standard periodic roles; no-clobber/fail-closed publication. +- `src/drl_pinball/legacy_test/README.md`: target/controlled/zero/SR role meanings; normalized six-sensor cycle DTW; Legacy `erase` explicitly unsupported. +- `src/steady_pinball_theory/metrics.py`: `profile_errors`, `profile_station_errors`, `quadrature_l2`, common-mask field norms and partial station/ledger utilities. These are not evidence of experimental sensor data. +- `src/CCD_analysis/data/karman-dynamic/canonical/` and its external authority parent: current descriptive CCD publication; field arrays and mask are useful reader artifacts, not a force/PIV experiment package. + +### 5.2 Schema audit summary + +| requested quantity | artifact/schema support | required action | +|---|---|---| +| current/new normalized DTW | role `timeseries` and standardized acquisition semantics support it | use existing output where present; otherwise small offline adapter, no CFD | +| periodic complete-cycle mean + phase8 | `phase_fields.npz` exact schema and `wake_l2.py` | implemented for retained compatible roles | +| Vortex event-midpoint L2 | `event_fields.npz` is represented in dictionary/acquisition semantics, but current `wake_l2.py` does not evaluate it | new offline code only; no CFD if artifacts exist | +| Erase mean-field L2 | mean fields supported for periodic artifacts; exact legacy erase target is not supported | existing data only for a valid role; otherwise new acquisition/unsupported | +| steady profile + L2 | code primitives exist; experimental sensor-plane source not located | CFD existing-data-computable; experiment requires source export/new acquisition | +| experimental force metric | no synchronized calibrated experimental force bundle located | new acquisition; otherwise unsupported | +| shared phase metric | deliberately not supported as a scientific contract | keep case-specific semantics | + +## 6. Gaps, deferrals and negative results + +### 6.1 Missing internal experiment package + +No visible package was found containing: raw PIV velocity fields; force-sensor calibration and tare; ADC sample clocks; Raspberry Pi/motor encoder clock; synchronization markers; trial IDs and repeat count; geometry/scale calibration; background-flow blank runs; temperature/thermistor channels; or raw dye image manifest. Without these, do not report experimental `L2`, `DTW`, force coefficient, phase error, shedding frequency in physical units, uncertainty, or efficacy percentage. + +### 6.2 Confirmation material + +Undermind’s Confirmation navigation exposes Intro/Description/Method/Result/Conclusion and a steady sensor-plane figure candidate. The source array/schema, figure-generation script and provenance were not visible in the inspected repository/Undermind navigation. Treat the figure as a candidate reader view or authority-led deferral until its source is linked. Do not digitize a plotted image to create a false metric. + +### 6.3 Literature and facility gaps + +- Resolve all Oil-tunnel report cite keys to exact identity/DOI before formal manuscript bibliography. +- If the experiment is retained, document water-tunnel background blank, settling/wait time, thermal monitoring, carriage speed trace, force calibration and synchronization. +- Oil-tunnel materials are design precedent/future direction, not evidence that the present system used oil or achieved PIV validation. +- No new deep search is authorized in this addendum; unresolved literature questions remain Round-2 work. + +## 7. Candidate uses in manuscript and supplement + +| material | main text candidate | supplementary candidate | do not use | +|---|---|---|---| +| apparatus sketch + short build description | one bounded paragraph or compact methods inset: platform assembled and policy deployment feasible | component diagram, wiring/data-flow schematic, calibration checklist | precision, closed-loop claim, force-feedback success | +| dye steady/illusion panels | one qualitative feasibility panel only if raw image provenance is available | full image sequence, timing/condition caption, negative/limitation note | quantitative wake/force/field restoration | +| water-background explanation | one sentence explaining low-speed experimental limitation, citing resolved literature | facility note with thermal/residual-motion rationale and proposed controls | claim that present motion is proven thermal or that waiting removes it | +| CFD case metrics | main text only for current bounded Kármán/cloaking claims with exact case/window/comparator | complete case matrix, normalized DTW, phase8/event definitions, per-seed rows | pooled V5/Legacy or DTW-as-delay | +| steady sensor-plane profile | main text only if source artifact, calibration and baseline are linked | full profile data/metadata and L2 derivation | digitized Confirmation pixels without authority | +| force metric | main text only after synchronized calibrated acquisition | raw force/ADC/encoder package and calibration uncertainty | reward as force, uncalibrated ADC, or force inferred from dye | + +## 8. Figure/data needs + +### Minimum to keep experiment in Round-1 supplement + +1. Apparatus schematic: test-section isolation, rail/rack, carriage, sensor/ADC/Raspberry Pi, motor drive and cylinder geometry. +2. Conditions table: fluid, cylinder `D`, spacing, nominal speed, estimated/actual `Re_D`, carriage trajectory, trial ID and rest time. +3. Raw dye images/video with frame rate, spatial scale, camera view, dye injection timing and blank/background run. +4. Explicit caption: open-loop qualitative demonstration; no synchronized PIV/force validation. + +### Minimum for quantitative experimental metric + +- PIV: calibrated `(x,y,t)` velocity arrays, common-fluid mask, `U_inf`, registration and missing-data policy; then profile/L2 can be computed offline. +- Sensors: channel names/order, units, calibration/tare, sample rate, anti-aliasing, timestamps and synchronization marker; then normalized DTW can be recomputed offline. +- Force: calibrated body-resolved `F_x,F_y` (and torque only if independently measured), zero/drift records, sign convention, span/normalization and synchronized video/PIV; only then define force L2/DTW or force-vs-baseline metrics. +- Thermal/background: blank-run velocity or dye displacement, temperature probes near surface/walls/bottom, pump/carriage state and settling interval; use to bound—not automatically subtract—the background. +- Repeats: independent trials and declared acceptance/failure rules. One dye sequence is descriptive, not uncertainty evidence. + +### Figure candidates by status + +| figure/data item | status | source/next step | +|---|---|---| +| apparatus diagram | requires-new-offline-drawing from author dimensions, or author artifact | no CFD | +| dye steady and illusion panels | existing qualitative candidate if raw media exists; otherwise requires-new-acquisition | preserve as bounded observation | +| Confirmation steady sensor-plane profile | existing figure candidate, source not audited | locate source array/manifest before use | +| CFD mean/phase8 L2 panel | implemented/existing-data-computable for compatible roles | derive reader plot from immutable outputs | +| Vortex event L2 panel | requires-new-offline-code if event NPZ exists | retain event labels/offsets | +| Erase mean L2 panel | existing-data-computable only for supported role/target | legacy erase remains unsupported | +| normalized/current DTW panel | existing-data-computable or small offline adapter | label native vs normalized and window | +| synchronized force/PIV panel | requires-new-acquisition | do not imply current availability | + +## 9. No-new-CFD completion list + +The following evaluation work can be completed without new CFD **provided the named artifacts already exist and pass their metadata/schema contracts**: + +- Recompute or tabulate current/normalized sensor DTW from retained timeseries and target channels. +- Recompute periodic Kármán/Illusion complete-cycle mean-field `L2*` and existing `E_phase8` from `phase_fields.npz`, using current `wake_l2.py` semantics. +- Produce per-event Vortex downstream-ROI L2 from existing `event_fields.npz` after writing a small offline adapter; this is not a new acquisition if target/control/zero event comparators exist. +- Produce Erase mean-field L2 for a genuinely supported mean-field role; do not revive the explicitly unsupported Legacy erase route. +- Produce steady CFD sensor-plane/profile errors and spatial L2 from existing resolved arrays and masks using `steady_pinball_theory.metrics`. +- Replot or audit current CCD field/mask reader artifacts descriptively; this does not produce experimental validation. + +The following cannot be completed from current visible evidence without new experimental acquisition or an authoritative source export: experimental PIV L2, experimental normalized DTW if synchronized sensor streams are absent, calibrated force metrics, uncertainty/repeatability, and quantitative dye-image velocity/field error. None of these requires new CFD by itself; they require experimental data and offline processing/validation. + +## 10. Round-1 handoff + +- **Safe experimental sentence**: the apparatus demonstrates policy deployment and qualitative open-loop wake modification under difficult low-speed conditions; quantitative synchronized force/PIV validation remains future work. +- **Safe metric sentence**: field and sensor comparisons should be reported with case-specific normalized L2/DTW contracts; periodic phase8, transient event snapshots, mean-field erase, and steady profiles are distinct estimands. +- **Do not write**: “experimentally validated cloak/illusion”, “force feedback achieved”, “PIV confirms the CFD”, “DTW gives physical delay”, “one metric covers all scenes”, or “thermal convection is proven as the sole cause”. +- **Next authority needed**: link the local/source Confirmation sensor-plane arrays and use the already read-full `docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` authority together with the source-linked Confirmation sensor-plane arrays; resolve Oil-tunnel cite keys before manuscript prose. diff --git a/docs/JFM_WYQ/ROUND1_BOTTOM_UP/README.md b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/README.md new file mode 100644 index 0000000..9ca1caa --- /dev/null +++ b/docs/JFM_WYQ/ROUND1_BOTTOM_UP/README.md @@ -0,0 +1,18 @@ +# ROUND1_BOTTOM_UP + +这是 JFM 工作流第一轮的非文章式证据索引,不是 manuscript prose,也不预填科学结论。目标是建立全面、可追溯、便于后续 agent 快速读取的索引与 evidence dossiers。 + +## 预定文件 + +- `01_DRL_CONTROL_AND_CASES.md` +- `02_SR_CONTROL_LAWS.md` +- `03_FIELD_CCD_OID.md` +- `04_STEADY_THEORY_AND_CROSSMAP.md` +- `05_INTRODUCTION_LITERATURE_INDEX.md` + +## 证据与协作约束 + +- 所有数字都必须回到对应的 authority、code、manifest 或 artifact。 +- Legacy 与 V5 必须分链记录,不得静默合并证据链。 +- 每项记录应保留来源、边界、冲突/缺口及必要的 case/seed、metric、comparator 和 evaluation window。 +- 最终由顶层 agent 跨文件综合;本轮文件只负责索引证据,不提前冻结叙事。 diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/01_PHYSICS_NARRATIVE_AND_OUTLINES.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/01_PHYSICS_NARRATIVE_AND_OUTLINES.md new file mode 100644 index 0000000..70536e6 --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/01_PHYSICS_NARRATIVE_AND_OUTLINES.md @@ -0,0 +1,160 @@ +# JFM Round 2 — Physics Narrative and Outline Recommendation + +> Top-down structural design, not manuscript prose. Round-1 files `01_DRL_CONTROL_AND_CASES.md`–`08_EXPERIMENT_AND_CASE_METRICS.md` were read in full (current filenames), together with `src/README.md`, DRL/SR/CCD/OID/steady authority documents and the CelerisLab validation dossier. Nowledge Mem Context/Working Memory and targeted recall informed routing and author/adviser direction, not scientific authority. Round-1 audit records 63 current Markdown plus 8 selected authority/index JSON files read-full; raw/external artifacts remain authority-led deferrals. + +## 1. Scientific question, central claim and reader takeaway + +**Scientific question.** In a moderate-Re fluidic pinball with separation and periodic wake dynamics, can sparse downstream signatures and force measurements support a closed-loop controller whose apparent complexity reduces to a persistent rotation skeleton plus a smaller dynamic correction, and can field/steady analyses bound that interpretation? + +**Central claim (recommended, cautious).** For the named Legacy Kármán cloaking contract, DRL produces bounded observer-level and field-level wake modification. Independent SR, corrected CCD and steady/context analyses consistently identify a persistent rear counter-rotation component as the dominant tested backbone, with a smaller phase-coherent, action-associated residual. Together they motivate—but do not establish—a near-constant-rotation skeleton plus dynamic feedback correction as a compact organization of the learned control. + +Use “named,” “tested,” “bounded,” “dominant tested element,” “descriptive,” and “motivate.” Do not use mechanism, causality, optimality, stability, universality or Legacy–V5 equivalence language. CCD residual is a reference residual, not a paired counterfactual; steady/theory is context/outer reference; potential circulation cancellation failed by sign. + +**Reader takeaway.** A controller that improves a wake signature need not be intrinsically complicated: in this bounded case, most measured improvement is associated with persistent rear rotation, while the remaining correction is smaller and phase-organized. The contribution is evidence triangulation with explicit limits, not a universal law. + +## 2. Candidate title families + +### A — learned control reduced to a physical skeleton *(recommended)* +1. *A near-constant rotation skeleton in learned cloaking control of a fluidic pinball* +2. *From sparse wake signatures to a rotation skeleton for fluidic-pinball cloaking* +3. *Interpreting learned wake cloaking as persistent rotation with dynamic correction* + +Promise: a physical object emerging from control, SR, field and steady evidence. Risk: “skeleton” may overstate definitiveness; retain “near-constant” and bound it to tested cases. Title 1 is safest; title 3 most clearly promises the correction but risks causal expectations. + +### B — observer-level cloaking and signature control +1. *Sparse-signature control of a moderate-Reynolds-number fluidic pinball wake* +2. *Active wake cloaking with sparse sensing: control, reduction and field evidence* +3. *Controlling the observer-level wake signature of a fluidic pinball* + +Promise: the estimand is the wake signature/field, not unqualified stealth. Risk: under-promises the skeleton interpretation and may resemble a standard DRL paper; define cloaking as a declared signature/reference objective. + +### C — triangulated white-box analysis +1. *A physics-based audit of learned wake cloaking in the fluidic pinball* +2. *Symbolic and field-level interpretation of sparse-sensor wake control* +3. *Triangulating learned wake control with symbolic regression and field analysis* + +Promise: policy reduction plus field audit. Risk: “audit,” “physics-based,” and “interpretation” invite stronger mechanism expectations than CCD/OID support. Use only if methodological contribution must lead. + +**Recommendation:** work with A1; use B1 if “skeleton” cannot survive final evidence audit. Avoid “universal,” “robust,” “mechanism,” and standalone “interpretable” in the title. + +## 3. Recommended hierarchy and section bridges + +### 1. Introduction — visibility to nonlinear wake signatures +- **Question:** why nonlinear bluff-body signature cloaking differs from linear-wave cloaking and ordinary drag reduction. +- **Input:** cloak/illusion, active hydrodynamic, pinball, sparse-observation DRL and interpretable-control literature. +- **Output:** define observer-level/field objective; motivate pinball; state gap as policy reduction plus field audit. +- **Bridge:** fix plant, sensors, actions and evidence contracts. + +### 2. Problem formulation and evidence contracts +**2.1 Plant and actuation:** geometry, body order, coordinates, Re convention, wall/action sign, `q_in/q_blk/q_ctl`, and separate Legacy/V5 chains. +**2.2 Sparse objective:** forces plus six downstream velocity channels; reward terms and DTW; full-field L2 is independent validation; DTW is not delay/causality. +**2.3 Case-specific metrics:** periodic cycle, transient event and steady profile/`E_inf_vector` semantics remain distinct. +- **Output:** one plant vocabulary, non-interchangeable estimands. +- **Bridge:** show capability briefly, then select Re100 for depth. + +### 3. Compact capability map and principal case +**3.1 Visual hook:** aligned Kármán Re100 plus qualified representative vortex/steady/Illusion view, with role/status labels. +**3.2 Case choice:** Legacy Kármán Re100 is the intersection of periodic signature, field, SR and CCD evidence; V5 Re100 seeds support modern discovery/retention separately. +**3.3 Breadth:** compact named-condition map; complete matrix and degradation details in supplement; no positive Illusion-SR claim. +- **Output:** bounded capability, Re100 anchor. +- **Bridge:** define what success means before interpreting action. + +### 4. What was optimized: signature matching under sparse observation +**4.1** Reward and sensor design as a physical measurement choice. **4.2** Compare reward/DTW/force with independent mean/phase field errors. **4.3** Give only bounded DRL discovery/retention evidence (V5 seed dependence explicit). +- **Output:** compressed sensor objective requires white-box/field audit. +- **Bridge:** ask whether the action law has a persistent component. + +### 5. Physical question I — is the learned action intrinsically complex? +**5.1** SR as closed-loop distillation: Stage 1–2–3, causal pairing, symmetry mapping, CFD arbiter. **5.2** Canonical Kármán law: rear constant, rear-lift feedback, tested front term, exact sign/order. **5.3** Closed-loop tests, named transfer and steady correspondence; deletion is parent-relative, not causal necessity. +- **Output:** rear counter-rotation is the dominant tested SR element; feedback remains nonzero/case-dependent. +- **Bridge:** what field improvement corresponds to the constant component? + +### 6. Physical question II — what changes after removing the constant reference? +**6.1** Corrected mean field: zero, constant-mean, DRL and exact 93.42/6.58 additive split for the stated Legacy Kármán ROI/mask/window. **6.2** Define separately centered DRL-minus-constant-template residual; show rank-3 stability and phase reconstruction. **6.3** CCD/POD: action-coordinate association, nearly same field subspace; no CCD superiority/unique modes. +- **Output:** most measured field improvement is associated with constant mean; residual is smaller and descriptively organized. +- **Bridge:** place recurrence of the constant component in steady context. + +### 7. Physical question III — steady context and theory boundary +**7.1** Canonical free-slip `Re_D=50`, accepted `[0,+Omega,-Omega]`, `s`, direct `E_inf_vector` at `x/D=10`. **7.2** One-cylinder impermeability/circulation and outer potential/dipole reference; show sign failure. **7.3** Gap flux/near-wake/partial NS diagnostics as bounded observations; gap/base-bleed chain remains hypothesis. +- **Output:** plausible organizing context, not mechanism/stability/causality/no-slip transfer. +- **Bridge:** state supported claim and decisive future tests. + +### 8. Synthesis, limitations and prospective experiment +**8.1** SR ranking, CCD decomposition and steady endpoint are compatible but non-identical observations. **8.2** Briefly quarantine negative Illusion SR, claim-free OID, old CCD/steady routes and failed theory. **8.3** One compact qualitative open-loop experiment note/panel only; no synchronized PIV/force validation. +- **Output:** bounded, falsifiable physical organization. + +### 9. Methods/reproducibility +Keep only interpretation-protecting details in the main text; put solver/PPO/SR/CCD implementation, manifests, hashes, normalization, seeds, phase gates and full metric contracts in supplement. OID remains method-only, not a results section. + +## 4. Two materially different alternatives (not recommended) + +**A — method silos:** Introduction; DRL method/results; SR; CCD; OID; steady theory; experiment; discussion. Easy package ownership, but delays the physics, makes compatible evidence look independent, repeats definitions and gives claim-free OID unjustified weight. + +**B — broad capability-first catalogue:** Introduction; full matrix; reward; all Kármán/vortex/erase/Illusion results; SR generalization; fields; theory; experiment. Visually attractive, but forces incomparable metrics into one progression, dilutes Re100, and risks reviving withdrawn Illusion/generalization claims. + +A steady/theory-first outline is also not recommended: endpoint evidence is bounded, potential theory failed by sign, and NS closure is incomplete, so it would overpromise the theory. + +## 5. Space, equations, tables and figures + +### Text (100% of body) +| Part | % | Function | +|---|---:|---| +| Introduction | 10 | vocabulary, gap, question | +| Problem/objectives/contracts | 10 | plant, sensors, reward, metrics | +| Capability + Re100 setup | 10 | visual hook, case choice | +| SR question | 18 | law and closed-loop evidence | +| Mean/dynamic field + CCD | 20 | decomposition and residual | +| Steady/theory | 17 | endpoint, reference, sign boundary | +| Synthesis/limits/experiment | 10 | bounded conclusion and future tests | +| Methods bridge | 5 | essential reproducibility | + +Target **8–10 displayed equations** (5–6 main): objective; reward/DTW; representative field metric; SR law and symmetry; mean identity; CCD residual/operator; steady `s`/`E_inf_vector`; outer reference/clearly incomplete ledger. Target **4 main tables**: contracts with Legacy/V5 separated; Re100 evidence chain; SR term ranking/non-claims; cross-analysis synthesis. Supplement: full matrix, seed/calibration/normalizer, provenance, metrics, sensitivity and artifact ledgers. + +Target **7 main figures**: +1. visual capability hook; +2. geometry/action sign/sensors/roles; +3. objective versus independent field validation; +4. SR law, actions and bounded deletion; +5. zero–constant–DRL mean fields and 93.42/6.58 split; +6. corrected CCD residual, rank-3 and POD comparison; +7. steady endpoint, profiles, theory reference and sign failure. + +Experiment belongs as an inset in 1 or 7 only if raw-image provenance exists; otherwise supplement. Target 4–6 supplement figures. + +## 6. Main text / supplement boundary + +**Main:** scientific question; cloak/signature definition; sparse objective; one visual hook; Legacy Re100; canonical SR law; exact meaning of dominant tested constant; corrected mean/dynamic result; CCD/POD descriptive result; steady endpoint and failed potential route; one experiment limitation; final non-claims. + +**Supplement:** full case/seed matrix; all V5 curves; separate Legacy/V5 solver and contract table; reward/DTW implementation; SR topology/deletion/per-case tables; full CCD sensitivities; OID equations/reset history without positive result; MFS convergence; partial NS ledger; steady sweep/reverse details; transient/Erase metrics; experiment apparatus/calibration/dye sequence; paths/hashes/exclusions/negative routes. + +## 7. Concrete SR/CCD/theory interweaving + +Use **physical-question interweaving**, not three method chapters: +1. How much is persistent? — SR law and closed-loop term ranking. +2. What does it account for? — constant-mean versus DRL field errors. +3. What remains? — corrected CCD residual, rank-3 stability and action coordinates. +4. Is there steady context? — endpoint, magnitude correspondence, theory as outer reference and sign check. +5. Synthesis — skeleton-plus-correction as compatible organization, with non-crossable estimands stated. + +At each interface state the estimand and chain. Never imply SR law, CCD left action functions, and steady `E_inf_vector` are the same object. + +## 8. Honest Legacy/V5 presentation + +- **Legacy:** principal analysis chain for SR, corrected CCD, standardized Target/PPO/SR/Zero and field interpretation. +- **V5:** supporting modern chain for solver qualification context, Re100 five-seed discovery/retention, parameter/seed examples and named-condition demonstrations. +- Use explicit panel/caption labels `Legacy analysis` and `V5 support`; never pool means/errors. +- Explain Legacy→V5 as a deliberate rewrite changing grid/API/readback, body/action interfaces, normalization/calibration and smoothing; this is provenance discipline, not numerical continuation. +- State V5 Re100 late retention is seed-dependent; other points are mostly n=1 and retained evaluations are historical compatibility data, not post-fix retraining. +- Do not use V5 to rescue Legacy SR, negative Illusion SR, CCD, or steady mechanism claims. + +## 9. Structure-freeze decisions (recommendation first; max 5) + +1. Adopt working title A1; retain “near-constant,” “tested,” and bounded language. If “skeleton” is rejected, use B1 and keep it as a section-level interpretation. +2. Freeze Legacy Kármán Re100 as the sole deep case; V5 is separate support; full matrix is supplement. +3. Freeze physical-question order SR → mean/dynamic field → CCD → steady/theory; no standalone OID results section. +4. Freeze experiment as qualitative open-loop feasibility/future direction only, compact or supplement. +5. Freeze strongest mechanism wording at “consistent with/motivates a candidate organization”; no causal, stable, optimal, general or universal wording without matched intervention, closure and independent evidence. + +## Evidence dependency gate + +Before prose or figure assembly, every number/panel must carry chain, solver/configuration, geometry/body order, signed action, Re definition, case/seed/role, target/reference, metric/ROI/mask, window, normalization/calibration, artifact path/hash and evidence status. Resolve CCD canonical designation while preserving the validated suffixed artifact; quarantine OID sign conflict and historical results; preserve SR semantic current/archive split; verify external role manifests; retain steady sign failure/incomplete NS closure and absent synchronized PIV/force validation. No figure is publication-ready merely because a plot or manifest exists. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/02_JFM_STRUCTURE_AND_SPACE_BENCHMARK.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/02_JFM_STRUCTURE_AND_SPACE_BENCHMARK.md new file mode 100644 index 0000000..c657137 --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/02_JFM_STRUCTURE_AND_SPACE_BENCHMARK.md @@ -0,0 +1,137 @@ +# JFM Round 2 — Structure, Space and Figure Benchmark + +> Structural calibration only; not manuscript prose or submission-format advice. Based on six Round-1 dossiers, existing DynamisLab Undermind reports, and ten existing full-PDF reads. No new deep search, CFD, training, experiment, Undermind write, or commit was performed. + +## Executive recommendation + +Use a physics-led narrative: + +`visual capability hook → precise gap → plant/reward/metric contracts → representative capability → SR control skeleton → mean/dynamic field decomposition → steady/theory context → limitations and bounded synthesis`. + +Do not make DRL, SR, CCD and theory four isolated method papers. Interleave them around (i) what persistent control component accounts for the tested improvement and (ii) what smaller dynamic correction remains. Kármán Re100 is the deep-analysis case. Other cases are named-condition capability/failure evidence, not universal generalization. + +## Sample literature and read level + +All entries were selected from the existing DynamisLab workspace and read with Undermind `read_pdfs`; `full-PDF` means paper-level full-text extraction, not independent raw-data or equation-by-equation auditing. Counts below are approximate where extraction was not reliable. + +| Key / identity | DOI | Read level | Structural lesson | +|---|---|---|---| +| Deng et al., “Low-order model for successive bifurcations of the fluidic pinball”, *JFM* 884 A37 (2020) [Den18b] | `10.1017/jfm.2019.959` | `full-PDF` | Physics-first gap; rigorous model then verification; master phenomenogram; extensive appendices. | +| Cornejo Maceda et al., “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *JFM* 917 A42 (2021) [Mac20] | `10.1017/jfm.2021.301` | `full-PDF` | Baseline → simple forcing → asymmetric forcing → feedback; capability paired with mechanism. | +| Rabault et al., “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *JFM* 865, 281–302 (2019) [Rab18b] | `10.1017/jfm.2019.62` | `full-PDF` | Very short entry to gap; learning/capability followed by physical wake explanation. | +| Paris et al., “Robust flow control and optimal sensor placement using deep reinforcement learning”, *JFM* 913 A25 (2021) [Par20] | `10.1017/jfm.2020.1170` | `full-PDF` | Performance → mechanism → robustness → sensor placement; strong claims matched by tests. | +| Li & Zhang, “Reinforcement-learning-based control of confined cylinder wakes with stability analyses”, *JFM* 932 A44 (2022) [Li21] | `10.1017/jfm.2021.1045` | `full-PDF` | Stability/sensitivity informs reward and probes; it is not an ornamental final section. | +| Xia et al., “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements”, *JFM* 981 A17 (2024) [Xia23] | `10.1017/jfm.2024.69` | `full-PDF` | Partial-observation failure → history-based fix → robustness and mechanism. | +| Wang et al., “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing”, *JFM* 988 A4 (2024) [Wan23b] | `10.1017/jfm.2024.333` | `full-PDF` | Information problem → dynamic lifting → sparse capability → harder-Re tests. | +| Loiseau et al., “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *JFM* 844, 459–490 (2018) [Loi17] | `10.1017/jfm.2018.147` | `full-PDF` | Black-box sensor dynamics precede field reconstruction and grey-box interpretation. | +| Gautier et al., “Closed-loop separation control using machine learning”, *JFM* 770, 442–457 (2015) [Gau14] | `10.1017/jfm.2015.95` | `full-PDF` | Concise setup → optimization → explicit law → spectral mechanism → benchmark. | +| Mao et al., “Nonlinear optimal suppression of vortex shedding from a circular cylinder”, *JFM* 775, 241–265 (2015) [Mao15] | `10.1017/jfm.2015.304` | `full-PDF` | Validation precedes interpretation; spatial mechanism and stability follow performance; realizability caveat explicit. | + +## Space and opening benchmark + +Closest concise control papers reach the gap in about **1–3 pages / 4–7 functional paragraphs**. Long physics/model papers may use about five paragraphs but more pages ([Den18b]). Use five Introduction paragraphs and roughly **2–3 pages**: + +1. wake/signature matching as a physical question; +2. bluff-body/pinball complexity and why scalar force success is insufficient; +3. DRL and sparse/partial observations as capability, not explanation; +4. SR and field decomposition as complementary audits with noncausal boundaries; +5. exact gap and contributions for this named plant. + +Do not let linear cloaking history delay the gap; it supplies vocabulary, not nonlinear-Navier–Stokes equivalence. + +### Total planning range + +Use **8,000–10,000 word-equivalents**, or roughly **22–28 compact LaTeX pages** including figures/equations but excluding references and detailed supplement. This is coarse planning, not a journal limit. + +| Function | Share | Approx. words | Approx. pages | +|---|---:|---:|---:| +| Introduction | 12–15% | 1,000–1,400 | 2–3.5 | +| Plant, contracts, metrics, CFD validation | 16–20% | 1,300–1,900 | 4–5.5 | +| Capability/case map | 10–14% | 800–1,300 | 2.5–4 | +| SR law and closed-loop validation | 13–17% | 1,100–1,600 | 3–4.5 | +| CCD descriptive decomposition | 10–14% | 800–1,300 | 2.5–4 | +| Steady/theory context | 10–14% | 800–1,300 | 2.5–4 | +| Integrated discussion, limitations, experiment, conclusion | 12–16% | 1,000–1,500 | 3–4 | + +A suitable balance is **Methods 25–30% / Results 45–50% / Discussion and limitations 20–25%**. Discussion should be woven into each result subsection, following [Mac20], [Gau14], [Xia23], [Mao15]. + +## Main figures, tables and equations + +Plan **7–9 main figures**, about **20–28 panels**, and **3–4 tables**. + +1. Headline Kármán Re100 target/zero/controlled field and signature plate. +2. Plant/evidence contracts: geometry, action sign, sensors, `q_in/q_blk/q_ctl`, Legacy/V5 boundary. +3. Compact named-condition capability matrix; separate DTW, field-L2, force roles and n/status. +4. Re100 time series plus phase-registered field validation and selected-seed provenance. +5. SR law, symmetry deployment, closed-loop PPO/SR/zero comparison and bounded deletion result. +6. Mean/dynamic field decomposition, ROI/mask, CCD rank-3 descriptive modes and POD comparison. +7. Integrated SR–CCD–steady physical map showing compatible observations versus unresolved arrows. +8. Steady/theory endpoint, reverse/wrong-sign boundary, outer reference and incomplete NS ledger. +9. Optional bounded open-loop experiment demo; omit or move to supplement if synchronized force/PIV evidence is unavailable. + +Tables: (1) evidence/contract ledger; (2) capability summary; (3) SR/CCD/theory estimands and claim boundaries; optional (4) validation/limitations ledger. Full 11-case/15-run matrices, seeds and provenance belong in supplement. + +Plan **12–18 numbered equations**: geometry/Re/action (2–3), reward and independent metrics (2–3), SR law/symmetry (2–3), mean/CCD estimands (2–3), steady metric/outer reference (2–4), explicit balance/claim ledger (1–2). Put PPO, DTW dynamic programming, feature libraries, CCD matrices, MFS collocation and long solver details in supplement. + +## Capability without a gallery paper + +Capability should be **10–14% of main text**, one early hook plus one compact table/summary. Use a three-layer funnel: one Re100 hook; breadth matrix with named degradation/failure; return to Re100 for SR/CCD/theory. Every capability claim needs a same-condition comparator and one explanatory diagnostic. Do not show attractive fields without metric/window/role identity. Illusion SR is historical/negative, not positive capability evidence. Vortex/Erase and complete seed galleries belong in supplement unless they answer a distinct physical question. + +## Interweaving and space bounds + +Organize results by physical questions: + +1. DRL achieves a declared signature/field improvement at named scope. +2. SR exposes a compact persistent control component and validates it in Legacy closed loop. +3. CCD separates a dominant mean increment from a smaller action-associated dynamic increment. +4. CCD modes organize descriptive phase-coherent variation; this is not causality or stability. +5. Steady/theory contextualizes constant rotation under its own V5 free-slip contract; failed circulation sign and incomplete NS ledger define the mechanism boundary. +6. Synthesis: persistent rear counter-rotation/base-bleed-or-gap-jet-family **hypothesis** plus smaller dynamic correction, not a proven momentum law. + +| Component | Minimum main text | Maximum recommended | Role | +|---|---:|---:|---| +| SR | 1.5–2 pages | 3.5–4 | Law, deployment, closed-loop and deletion boundary. | +| CCD | 1.5 pages | 3–3.5 | Mean/dynamic estimands and descriptive rank-3 result. | +| OID | 0.25–0.75 page | 1 | Method-only/claim-free; historical positive rows quarantined. | +| Steady/theory | 1.5–2 pages | 3.5–4 | Contract, endpoint, short outer reference, open gates. | +| DRL capability | 2–3 pages | 4 | Hook plus Re100 return; no gallery. | + +SR is an `observation → action` surrogate under Legacy CFD arbitration; CCD is action-associated field organization; theory is contextual/reference mathematics. Do not claim that any one explains the same physical arrow as another. + +## CFD, experiment, negatives, Legacy/V5 + +**CFD validation:** 1.5–2.5 pages plus one panel/table. Establish active V5 and separate Legacy plant contracts, grid/BC/role checks and qualification limits. Solver validation does not validate DRL mechanism. + +**Experiment:** current status is open-loop feasibility (streaklines/dye; no complete synchronized force/PIV package). Use 0.5–1 page at the end or supplement, explicitly as demonstration/future validation. + +**Negative results:** keep visible but compact: cross-Re degradation/action saturation and weak Re400 phase; Illusion SR collapse toward physical zero; wrong-sign steady branch and failed potential-circulation explanation; OID force-gate failure/reset. Full failed logs, rejected formulas, incomplete crossings and archive provenance go to supplement. + +**Legacy/V5:** state prominently in Methods and at every transition. LegacyCelerisLab supports active SR and corrected CCD; modern V5 supports current DRL/steady retained chains. They are not numerically identical. Use explicit labels such as `Legacy Kármán Re_code=100 (Re_D=50)` and V5 code-Re labels; never pool them silently. + +## Supplement boundary + +Carry hyperparameters, normalization/seed ledgers, complete cases and metrics, SR feature/split/hash/deletion tables, CCD masks and sensitivity, OID derivations and historical audit, MFS convergence/one-cylinder/Laurent checks, experiment calibration/raw inventory/uncertainty, and all negative/archive provenance. Do not move an essential comparator or essential limitation out of the main text. + +## Title, abstract and prohibited strength + +Possible bounded title register: + +- **Interpreting reinforcement-learning flow control in a fluidic pinball through sparse laws and wake-field decomposition** +- **A sparse control skeleton for wake-signature matching in a fluidic pinball** +- **From reinforcement-learning control to a bounded physical decomposition of a fluidic-pinball wake** + +Safe terms, with scope qualifiers: `wake-signature matching`, `sparse sensing`, `symbolic-regression surrogate`, `descriptive field decomposition`, `steady reference`, `physics-guided interpretation`. Avoid unqualified `universal`, `optimal`, `robust`, `generalizable`, `causal`, `mechanism`, `stability`, `control authority`, `full-state`, `complete`, `first`, `real-time`, `experimentally validated`, `momentum restoration`, `energy-efficient`, `illusion control` and `target tracking`. Avoid unqualified `hydrodynamic cloaking` if the estimand is only a declared sensor/field space. `Interpretable` should describe the compact SR law, not imply CCD/OID causality. + +The abstract should promise only: named-plant DRL discovery; independent sparse-signature and field evaluation; compact SR law under the Legacy contract; descriptive mean/dynamic decomposition; bounded steady/theory context. Include one limitation sentence: named conditions, separate Legacy/V5 chains, no causal/mechanistic closure, limited experiment. + +## Warnings for the structure agent + +**Over-expand:** cloak history; all cases/seeds/plots; four method silos; OID historical rows or Illusion SR as positive evidence; unvalidated MFS derivation; applications involving seals, marine structures, sediment, defense or low observability. + +**Over-contract:** field pair plus reward without comparators; CFD/Legacy–V5/Re conventions; SR without closed-loop arbitration and deletion window; CCD “93%” without ROI/mask/estimand; steady appearance presented as stability/mechanism; negative results and experiment limitations hidden in supplement. + +The target is fewer claims, each attached to a comparator, artifact/metric contract, named evidence status and one physical question. + +## Provenance + +Nowledge Mem `read_context_bundle` was read first and targeted memory recall used. Undermind `get_orientation` preceded `list_workspaces`; existing DynamisLab workspace `4383d145-2c80-4991-8a9c-7ac2dd683438` was used. No new deep search or Undermind mutation occurred. Round-1 `01`–`06` dossiers and Round-2 README were read. All ten samples above were requested through `read_pdfs` and are marked `full-PDF`; uncertain counts are explicitly approximate. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/03_EVIDENCE_STRESS_TEST.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/03_EVIDENCE_STRESS_TEST.md new file mode 100644 index 0000000..d494dfe --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/03_EVIDENCE_STRESS_TEST.md @@ -0,0 +1,183 @@ +# JFM Round 2 — Evidence-to-Structure Stress Test + +## Executive verdict + +The proposed arc is publishable only as a **bounded Kármán/cloaking case study**: DRL demonstrates named-condition policy discovery, Legacy SR supplies a closed-loop-tested compact surrogate, corrected CCD describes a smaller action-associated residual around a dominant constant component, and steady/theory supply contextual physical constraints. The stronger reading—“DRL discovers a general physical law, CCD proves the dynamic correction, and theory closes the mechanism”—is not supported. **Recommendation: submit the minimal defensible paper; keep the ambitious layer in Discussion/Supplement.** + +## 1. Claim–evidence dependency graph + +```text +C0 Visual capability / observer-level objective + ├─ DRL: scene, target/zero comparator, observation/reward/action contracts, + │ seed/checkpoint/VecNormalize, window + ├─ literature: sparse signature motivation only + └─ field validation: E_mean and separately E_phase8 + ↓ +C1 Reward/signature is physically motivated + ├─ exact reward, DTW implementation/window/calibration identity + ├─ sensor geometry and x/D≈10 precedent + ├─ DTW separated from full-field L2 + └─ no optimality/observability/delay claim + ↓ +C2 Kármán policy has a compact control law + ├─ frozen Legacy PPO trajectories and causal alignment + ├─ SR topology/formula/provenance + ├─ offline fit diagnostics (supporting only) + └─ Stage-3 Legacy closed-loop gates, long runs, named extensions + ↓ +C3 Law contains a near-constant skeleton + ├─ fixed-formula deletion/scaling under declared 40-step Kármán window + ├─ steady constant-rotation sweep under exact sign/Re/action contract + └─ named cross-case observations, not a universal law + ↓ +C4 Residual is smaller and dynamically organized + ├─ corrected CCD mean-field decomposition, exact ROI/mask/window + ├─ cycle-template residual and rank-3 stability + ├─ action-coordinate association and phase diagnostics + └─ constant and DRL cycles are not paired counterfactuals + ↓ +C5 Constant + dynamic correction explains finite-Re mechanism + ├─ matched intervention or independent closed-loop designs + ├─ wall-resolved vorticity/pressure/shear and complete NS CV budget + ├─ action sign/torque/body-order parity + └─ held-out endpoints and uncertainty + ↓ +C6 Generality / limits + ├─ repeated seeds and retained cross-Re/size cases with parity + ├─ case-specific metrics and per-case failures + ├─ Legacy/V5 separation or explicit parity artifact + └─ experiment only qualitative feasibility without synced PIV/force +``` + +C0→C1 is green/amber; C1→C2 is amber-green only for Legacy Kármán; C2→C3 is amber; C3→C4 is amber for descriptive organization; C4→C5 is red; C5→C6 is red if phrased as generality, but green for an explicit limits section. + +## 2. Link-by-link status and strongest defensible wording + +| Link | Status | Strongest surviving wording | +|---|---|---| +| Visual capability → task success | **Green/amber** | “Under the declared cases and contracts, PPO policies reduced sensor/field error relative to the case-specific zero comparator.” Separate mean and phase claims and include failures. | +| Capability → cloaking vocabulary | **Amber** | “Cloaking denotes approach to a declared background/target in measured wake space.” Not invisibility or full-state equivalence. | +| Capability → reward/signature | **Green** | “The signature objective is computationally economical and physically motivated, with independent registered downstream field evaluation.” | +| Reward → full-field cloaking | **Amber** | “Sensor optimization was accompanied by, but does not imply, improved mean-field agreement.” Report `E_mean`, `eta_mean`, `E_phase8`, mismatch and regularity separately. | +| DRL → SR law | **Green/amber** | “A symmetry-mapped SR surrogate reproduced the selected Legacy Kármán policy sufficiently for declared closed-loop gates and named windows.” Not unique or fully explained. | +| SR → near-constant skeleton | **Amber** | “Within the fixed topology/coefficient/40-step deletion contract, persistent rear constant rotation was the largest tested contribution; steady results provide magnitude context.” Not necessity or sufficiency. | +| Steady constant → SR skeleton | **Amber** | “Steady and SR observations are consistent with a recurring rear-opposite constant component.” Do not pool their metrics or amplitudes. | +| SR constant → CCD mean dominance | **Amber** | “Two analyses organize the bounded Kármán evidence around a dominant constant component.” State shared lineage; do not call causal triangulation. | +| CCD → dynamic correction | **Amber** | “The residual is phase-coherent and action-associated in the declared cycle-template analysis.” Not response time, mechanism or causal correction. | +| CCD → special physical modes | **Red/amber** | “CCD labels an action-associated organization of a low-dimensional residual; CCD is not shown superior to POD.” | +| Dynamic correction → mechanism | **Red** | No mechanism sentence is authorized; retain action→near-body→wake→signature as hypothesis/open question. | +| Theory → finite-Re mechanism | **Red** | “Theory provides an outer reference and sign/contract constraints, not finite-Re mechanism closure.” | +| Solver qualification → mechanism | **Amber for numerics, red for physics** | “Selected configurations were qualified against bounded benchmark observables.” Kan99 lift sign remains unresolved; no control-mechanism inference. | +| Legacy/V5 → generality | **Red if pooled; amber if bounded** | “Generality is limited to named, chain-specific conditions.” | +| CFD → experiment | **Red** | “Experiments demonstrate deployment feasibility and qualitative open-loop wake modification; quantitative validation remains future work.” | + +## 3. Duplicate/correlated evidence + +1. Reward DTW and evaluation DTW reuse the same signal family, target, lag convention and often trajectory lineage; they are not independent wake evidence. +2. Offline SR RMSE is measured on PPO-visited states; it is not closed-loop stability or field performance. +3. SR long runs, deletion and scaling share the frozen formula, Legacy plant and parent lineage. Deletion is sensitivity, not a new realization. +4. Steady sweep and SR constant term are correlated by control family and context; the sweep is calibration, not an independent intervention. +5. CCD mean and phase analyses share one Kármán DRL lineage; different estimands add information, not stochastic replication. +6. CCD rank stability, singular values, phase reconstructions and POD comparison are views of the same operator/19-cycle set. +7. V5 seeds 41–45 are repeated stochastic searches in one case, not independent physical experiments; selection remains relevant. +8. Kan99 regularized and inlet-sensitivity runs are numerical closures of one benchmark; their common lift-sign mismatch is a shared risk. +9. Literature precedent supports plausibility, not local Re, metric, sign or observability validation. + +Use “convergent descriptive evidence under different estimands,” with lineage caveats. Do not say “independent triangulation” without independent parent realization, intervention, estimator and artifact. + +## 4. Structural risks + +- **Legacy/V5:** Legacy SR/CCD and modern V5 DRL differ in grid, API, inlet/BC, readback, calibration, normalization and smoothing. V5 retained `legacy-policy-v1` evaluation is not simply current native-v2. Never pool their numbers. +- **Re convention:** Legacy `Re_code` uses `2D`; `re100` means `Re_D=50`. The steady contract uses `Re_D=50` directly. Every comparison must print `Re_code`, `Re_D`, `U0`, `D`, `nu`, chain and inlet. +- **Action sign/body order:** order is `(front, rear_y_plus, rear_y_minus)`; accepted cloak is `[0,+Omega,-Omega]`, with `(Uw,Vw)=(-omega ry,omega rx)`: base-bleed/gap-jet, not boat-tail. Historical reverse labels are withdrawn. OID/CCD sign disagreement remains unresolved and must be quarantined. +- **Metric/window:** native Legacy DTW, V5 calibrated DTW, target-normalized DTW, complete-cycle `E_mean`, nearest-snapshot `E_phase8`, steady `E_inf_vector`, quadrature L2 and event metrics are non-equivalent. Print comparator, window, crossings, calibration and status every time. +- **CCD alias:** validated per-cycle sibling is complete; preferred pinball-inclusive publication is derived and canonical promotion remains pending. Name the exact artifact; do not use “canonical CCD” loosely. +- **Experiment:** dye/open-loop observations support feasibility and qualitative modification only. No synchronized calibrated PIV/force package exists. +- **Theory:** potential/MFS is an outer impermeability/reference problem, not rotating no-slip finite-Re physics. Circulation cancellation has a sign conflict with the accepted finite-Re fit; NS CV closure is incomplete. + +## 5. Structure: method chapters versus physics questions + +### Why SR/CCD/theory chapters fail +They make three methods look like three independent proofs: SR appears to establish the skeleton, CCD to rediscover it, and theory to explain it. In fact they use non-equivalent estimands and related Legacy Kármán lineage. A reader may infer that SR terms are validated by CCD, or that CCD association is causal. OID would add a method chapter with no current positive result. + +### Risks of physics-first organization +Physics-first is better, but each question can silently merge V5 performance, Legacy SR deletion, CCD mean reduction and steady endpoint. “Why does it work?” can promote the gap-jet hypothesis to mechanism; “is it general?” can convert n=1 demonstrations into a law. Every question needs a ledger row naming chain, estimator, window and status. + +### Recommended question order +1. Can sparse observer-level control make the declared signature/field closer to target? DRL + field L2, with failures. +2. What control structure is recoverable? Legacy SR, closed-loop validation and deletion. +3. What is mean versus dynamic? Corrected CCD, explicitly descriptive. +4. What physical context is compatible? Steady endpoint and short theory constraints; mechanism open. +5. Where does it fail? Cross-Re/size, seeds, phase mismatch, solver/sign and experiment. + +Put a one-page `claim | chain | parent artifact | metric | window | comparator | n | status | prohibited inference` ledger before Results. + +## 6. Material disposition + +### Retain main text +- One compact capability panel with exact chain labels and target/control/zero. +- Reward/signature definition plus independent field metric. +- Legacy Kármán SR law, contracts and closed-loop validation. +- SR deletion panel for rear constant dominance under the fixed window. +- CCD mean/dynamic scalar decomposition, with descriptive and CCD/POD caveats. +- One steady/theory panel with accepted branch, `s` and outer-reference limitation. +- Explicit limitations/generalization panel. + +### Supplement or downgrade +- Full V5 11-case/15-run matrix and training histories. +- n=1 cross-Re/size rows and LR-confounded disturbance-size comparisons. +- Full SR topology/coefficient/scaling history. +- Full CCD mode/phase/POD diagnostics. +- OID equations/tests as method appendix only; no result. +- Solver manifests/hashes, full metric/phase definitions and experiment apparatus/dye detail. +- Legacy→V5 migration history and negative routes. + +### Delete from mainline +Positive Illusion SR efficacy/target tracking/necessity/generalization; OID importance/causality; DTW-as-delay; potential circulation as accepted mechanism; boat-tail wording; unqualified Re=100; universal/optimal/causal/stability language; unaudited experiment numbers or digitized plots. + +## 7. Eight likely reviewer objections and preventive structure + +1. **Proxy reward:** Put reward and independent field metric together; state reward success is not field equivalence. +2. **Cherry-picked seed:** Show all Re100 seeds, selected-seed rule, retention distribution and failures. +3. **Inconsistent Re:** Add chain-specific `Re_code/Re_D` contract table. +4. **In-sample SR:** Make closed-loop Legacy validation primary; label RMSE diagnostic; show failed gates. +5. **False triangulation:** Share lineage and call constant/dynamic results descriptive convergent indications. +6. **CCD causality:** State non-paired cycles, action association only, rank stability and POD near-equivalence. +7. **Solver/sign error:** Expose Kan99 partial pass/lift mismatch, action oracle and withdrawn branch. +8. **Experiment overclaim:** Label dye as qualitative open-loop feasibility; list missing PIV/force/calibration. + +## 8. Offline analyses/tables before writing (≤8, ranked) + +1. **Mandatory:** claim/evidence ledger with chain, artifact/hash, metric, comparator, window, n and forbidden inference. +2. **Mandatory:** separate Legacy/V5 contract table (solver, BC, Re, order/sign, norm/calibration, reward/DTW, field metric and time units). +3. **Mandatory:** all-five-Re100-seed selection/retention table with VecNormalize identity and field metrics. +4. **Mandatory:** SR closed-loop table by case/window/comparator for PPO/SR/target/zero, including failed gates and deletion variants; separate offline RMSE. +5. **High:** metric/window concordance table contrasting native/normalized DTW, `E_mean`, `E_phase8` and steady `E_inf_vector`, including Re400 disagreement. +6. **High:** constant/dynamic provenance panel with CCD values, ROI/mask/window/cycles/rank and non-pairing caveat beside SR deletion and steady context. +7. **High:** offline virtual sensor-plane/feature robustness (`x/D=8–12`, centre/outer/all-six signals) if artifacts pass contracts; supports reasonable, not optimal. +8. **Medium:** solver/sign/CCD-alias audit table (Kan99 mismatch, accepted/reverse actions, sibling/derived CCD identities). + +Do not spend time on new CFD, theory closure, OID revival or unsupported experiment analysis. + +## 9. Paper boundaries + +### Minimal defensible paper +**Claim:** In a named Legacy Kármán/cloaking setting, sparse wake-signature DRL reduces declared downstream field error versus zero; a symmetry-mapped SR surrogate passes declared closed-loop tests and exposes a dominant tested rear constant component with smaller state-dependent terms; corrected CCD descriptively separates a dominant constant-field contribution from a smaller action-associated residual. + +Include exact contracts, separate mean/phase metrics, SR closed-loop/deletion evidence, CCD bounded decomposition, steady/theory context and negative limits. Exclude universal generality, optimal placement, causal mechanism, stability, physical delay, Legacy/V5 equivalence, positive Illusion SR, solver-mechanism closure and quantitative experiment validation. + +### Ambitious but defensible paper +Across a separated V5 capability matrix and a Legacy Kármán interpretation chain, recurring control organization is consistent with a near-constant rear-opposite backbone plus smaller dynamic correction, while breakdown is mapped. This demands complete selection accounting, exact chain labels, all failures, no pooled estimands, and a prominent “bounded organizing pattern, not universal law” warning. It remains moderate-to-high risk because readers will mentally pool chains. + +### Recommendation +Choose the **minimal defensible paper** for the main submission. Retain the ambitious material as a controlled second layer in Supplement/Discussion. If the ambitious version is chosen, abstract/title must use “bounded,” “named-condition,” “descriptive” and “chain-specific,” and must not headline “universal,” “mechanism,” “causal,” “optimal” or “validated across Reynolds number.” + +## 10. Final editorial verdict + +**Green core:** named-condition Kármán DRL capability plus independent field evaluation; real Legacy SR closed-loop pipeline; physically motivated sparse signature. + +**Amber bridge:** SR constant interpretation, steady magnitude correspondence, CCD mean/dynamic organization and cross-condition capability. These are useful organizing evidence, not independent proof of a common mechanism. + +**Red bridge:** CCD/theory → causal finite-Re mechanism; pooled Legacy/V5 generality; experiment → quantitative validation; solver benchmark → control mechanism; positive Illusion SR. + +Write the paper so the red links are visibly absent. A skeptical JFM editor is more likely to accept a precise negative boundary around an interesting interpretation than a broad story whose strongest arrows require evidence the project explicitly does not possess. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/04_TOP_LEVEL_SYNTHESIS.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/04_TOP_LEVEL_SYNTHESIS.md new file mode 100644 index 0000000..7bdfc8b --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/04_TOP_LEVEL_SYNTHESIS.md @@ -0,0 +1,371 @@ +# JFM Round 2 — Top-level synthesis and freeze recommendation + + +> **2026-08-10 author-ratified revision.** The author's final decisions are frozen in `05_REVISED_STRUCTURE_FREEZE.md` and supersede the affected recommendations below without changing their evidence status. In particular, the old title in §3, the capability-only treatment of late cases in §§4–5, the Kármán → steady narrative ordering, the Fig. 1 composition, and the index/card-style Round-3 schema in §12 are superseded. The retained evidence audit, claim ceiling, Legacy/V5 separation, positive-SR boundary, CCD/OID cautions and compact CFD-validation allocation remain in force. + +> **文档角色。** 顶层结构综合与作者讨论底稿,不是 manuscript prose。本文基于 Round 2 `01`–`03`、Round 1 `01`–`08`、coverage audit A7–A13、Nowledge Mem Context/Working Memory与定向 closure/manuscript-direction recall,并回读 DRL/SR/CCD/steady handoff与 claims、CelerisLab validation dossier、wake-L2/sensor dossier。未开展新文献检索、CFD、训练或实验分析。仓库 authority、manifest 与 immutable artifact 始终高于本综合。 + +## 0. 单一推荐 + +冻结一个**“能力先行、Kármán 深挖、物理问题组织、边界显式”**的结构: + +`惊艳但有合同标签的能力钩子 → 任务/测量/数值合同 → reward与独立L2检验 → 持续旋转分量 → mean/dynamic场分解与CCD → steady/theory约束 → 有限综合与失败边界`。 + +不采用“DRL / SR / CCD / theory”四个平行方法筒仓,也不采用完整 case gallery。主文只深挖 **Legacy Kármán `re_code=100`(`Re_D=50`)**;V5 是独立的发现/保持与能力支持链,绝不与 Legacy 数值池化。全文最高物理结论是:**多种非等价估计量在该命名条件下共同支持一种“near-constant persistent rotation + smaller dynamic correction”的受限组织方式;它不是已闭合机制、普适规律或稳定性结论。** + +## 1. Editorial verdict:80% minimal core + 20% controlled ambitious outer layer + +### 1.1 精确比例 + +采用 **80:20** 的论证权重: + +- **80% minimal core**:命名的 Legacy Kármán 主链;稀疏 signature/reward 与独立 field-L2;SR 的原 plant 闭环重部署和固定窗口 term ranking;corrected mean/dynamic estimand;CCD/POD 的描述性结果;所有合同、比较器与非主张。 +- **20% controlled ambitious outer layer**:V5 五 seed discovery/retention 支持与少量代表性跨 case 能力;steady `Re_D=50` 低亏损 endpoint 和理论 sign boundary;定性实验可行性;“constant + dynamic”作为讨论层组织假说。 + +这不是把 20% 做成第二篇论文。外层材料只允许完成三件事:证明问题值得看、显示该组织并非只来自一张图、明确它在哪里失效。它不得改变 core 的 claim ceiling。 + +### 1.2 为什么不是更激进或更保守 + +- 若外层超过约 25%,读者会自然池化 Legacy/V5、把 SR/CCD/steady 当作三重独立机制证明,并把 n=1 case 与 qualitative experiment 读成 generality/validation。 +- 若外层低于约 15%,文章会退化为“一个 Legacy policy 的后验解释”,浪费 V5 多 seed、视觉能力、steady endpoint 和失败边界对 JFM 读者的价值。 +- 80:20 允许开头有足够的视觉冲击,同时把约四分之三的结果空间留给 reward、SR、field decomposition 与 Kármán physics。 + +### 1.3 三路分歧的裁决 + +1. **minimal vs ambitious**:minimal 是主干,ambitious 只作受控外层;不并列。 +2. **方法节 vs 物理问题节**:一级标题全部用物理问题/论证功能命名;SR、CCD、theory 仅作为二级节中的工具与证据来源。 +3. **“skeleton”是否进标题**:**不进推荐标题**。它可在正文被严格定义为“compact organizing skeleton”并在 Discussion 复现;当前证据只支持 dominant tested element 与 descriptive organization,标题中的 skeleton 会被编辑和审稿人理解成已识别且较稳健的物理结构。 + +## 2. 一句话 paper identity 与 claim ceiling + +- **Question:** 在具有分离和周期脱涡的中等 Reynolds 数 fluidic pinball 中,稀疏下游 signature 驱动的学习控制能否被约化为一个持续旋转分量与较小动态修正,并由闭环 law、场分解和稳态约束在命名条件下共同限定? +- **Central claim:** 对命名的 Legacy Kármán cloaking 合同,SR 闭环检验把持续的后圆柱反向旋转识别为最大 tested contribution,而 corrected field analysis 显示 constant-mean 分量占该 ROI 中 zero-to-DRL 误差降低的大部分,剩余较小 residual 是 phase-coherent、action-associated 且低秩的;steady 结果仅提供相容的量级和边界语境。 +- **Novelty:** 不是“DRL 首次控制 wake”,而是把**原 plant 闭环可执行的稀疏控制律、独立场误差分解、action-associated residual 与失败的理论解释**放在同一套显式 evidence contracts 下,形成可证伪的 bounded interpretation。 +- **Reader takeaway:** 该命名控制器的主要可测改善与持续后部反向旋转相联系,动态反馈提供较小但非零、相位组织的修正;这是一种紧凑组织,不是普适控制定律。 +- **Claim ceiling:** 最高可写 `consistent with`, `organizes`, `accounts for the measured error reduction under the declared estimand`, `dominant tested element`, `phase-coherent and action-associated`。不得升级为 `causes`, `mechanism`, `restores momentum`, `necessary/sufficient`, `optimal`, `stable`, `robust`, `general`, `universal`, `Legacy–V5 equivalent` 或 `experimentally validated`。 + +“Cloaking”必须在首次出现时定义为**相对于指定 target/background 的 observer/field-space 接近**,不是 invisibility、全场恒等或跨观察者隐身。 + +## 3. Working title + +### 推荐标题 + +**Interpreting learned wake-signature cloaking in a fluidic pinball: persistent rotation and dynamic correction** + +理由:`wake-signature cloaking` 保留项目辨识度并限定 estimand;`interpreting` 与证据层级匹配;`persistent rotation and dynamic correction` 传达文章核心,但不预先宣判二者为唯一机制或普适 skeleton。 + +### 有排序的备选 + +1. **A bounded physical decomposition of learned wake-signature control in a fluidic pinball** + 最安全的备选;`bounded` 直接压住 claim,但 `physical decomposition` 可能让读者期待更严格的动力学正交分解。 +2. **A near-constant rotation skeleton in learned cloaking control of a fluidic pinball** + 最有记忆点;仅当结构冻结前的 ledger、SR deletion、CCD provenance 与 Legacy/V5 标签全部通过,且作者接受更高审稿风险时使用。 +3. **From sparse wake signatures to persistent-rotation control of a fluidic pinball** + 强调 measurement-to-action 路径;但弱化 smaller dynamic correction,容易被读成纯 constant-control paper。 +4. **Sparse-sensor reinforcement learning for wake-signature matching in a fluidic pinball** + 最保守;证据完全承受,但过弱,遮蔽 SR/CCD/steady 的真正新意,容易被归类为常规 DRL capability paper。 + +### 词强度裁决 + +- **不用过强词**:`mechanism`, `causal`, `universal`, `robust`, `optimal`, `stability`, `momentum restoration`, `experimentally validated` 都越过证据上限。 +- **推荐标题不使用 skeleton**:不是否定这一概念,而是把它留给正文定义、检验和限缩;标题不应把 amber bridge 写成 green result。 +- **不用过弱的纯 DRL 标题作为首选**:它会让编辑期待算法/训练创新,而文章最强贡献实际是受限的物理解释与证据纪律。 + +## 4. 推荐最终一级/二级目录与空间预算 + +规划基准:约 **8,500–9,500 word-equivalents,24–27 个紧凑 LaTeX pages(含主图/表/方程,不含 references/supplement)**。下表文字比例总和为 **100%**。页数是含本节图表占位的编辑预算,不是期刊限制。 + +| 一级/二级目录 | 文字比例 | 约页数 | 物理任务 | 核心证据 | 主图/表/方程 | 主张上限 | 向下一节桥 | +|---|---:|---:|---|---|---|---|---| +| **1. Introduction: from visibility vocabulary to nonlinear wake signatures** | **10%** | 2.0–2.5 | 五段完成:定义 signature cloak;说明 nonlinear wake 与 linear cloak 不等价;pinball/DRL gap;解释为何需要 law + field audit;列贡献与限制 | Round1 literature index;JFM structural dossiers | Fig. 1 在文首被引用;不设历史大图 | 只说 linear literature 提供 vocabulary;不说连续物理谱系或 first | “先看控制能做到什么,再说明它在什么合同下成立” | +| 1.1 Declared observer-space cloaking | 3% | | 背景/target/zero 的定义 | target/zero/controlled contracts | 1 个简短 objective equation | declared-space approach only | 进入 nonlinear plant | +| 1.2 Why a fluidic pinball is difficult and useful | 3% | | separation、periodicity、symmetry/multi-attractor context | pinball literature | — | benchmark motivation, not project dynamics proof | 进入 sparse learning gap | +| 1.3 Gap and contributions | 4% | | 从 capability 到可执行 law 与场审计 | 本项目 authority | contribution bullets | bounded named-case interpretation | 引出视觉结果 | +| **2. Phenomenology first: what the learned control can do** | **12%** | 3.0–3.5 | 先展示惊艳能力,但只用一个 funnel:headline Re100 → 2–3 个 representative named cases → 明确深挖选择 | Legacy/V5 flow roles、DTW、L2、case-specific metrics;失败/退化行 | **Fig. 1**, **Table 1** | named-condition capability;不做 gallery/generalization | “视觉改善是否只是 reward proxy,需先固定合同与独立指标” | +| 2.1 Headline Kármán cloak | 5% | | target/zero/controlled signature 与 field 的直接视觉比较 | Legacy principal role;可旁列 V5 support | Fig. 1a–d | observer/field error reduced under named comparator | 进入 breadth | +| 2.2 Representative breadth and breakdown | 4% | | 只放 vortex、`075` illusion 或 steady 中最能承担不同任务者;同时给 Re400/大 illusion 退化 | case-specific DTW/L2;V5 n/status | Fig. 1e–h;Table 1 compact rows | demonstration, not law | 解释为何选 Re100 | +| 2.3 Why Kármán Re100 is the principal case | 3% | | 说明其为 DRL/SR/CCD 的证据交集 | chain map | Table 1 chain/status | evidence intersection only | 进入合同/方法 | +| **3. Problem, measurements and evidence contracts** | **15%** | 3.5–4.0 | 把 plant、action sign、sensors、reward、metrics、solver与 Legacy/V5 边界一次固定;Methods 不后置 | executable contracts、validation dossier、L2 dossier | **Fig. 2**, **Table 2**, Eq. 1–4 | methods/qualification only;solver qualification 不证明控制物理 | “在这些合同下检验 reward 是否对应扩展场改善” | +| 3.1 Geometry, actuation and chain-specific Reynolds conventions | 4% | | body order、wall law、`Re_code/Re_D`、Legacy/V5 | DRL/steady contracts | Fig. 2a–c;Eq. Re/action | exact contract | 进入 sensing | +| 3.2 Sparse observations and reward | 4% | | force + six velocity channels,DTW 的训练角色 | reward code;sensor rationale | Fig. 2d;Eq. reward/DTW summary | physically motivated, not optimal/observable | 进入 independent metrics | +| 3.3 Independent field metrics and case-specific semantics | 4% | | `E_mean`, `E_phase8`, L2/DTW分工;event/steady不同语义 | wake-L2 evaluator | Eq. L2/eta;Table 2 | geometry-guarded ROI;phase8 diagnostic | 进入 numerics | +| 3.4 Numerical qualification and reproducibility boundary | 3% | 0.5–0.75 页纯文字等价 | 只交代所用配置、sensor readback、Sah04 pass、Kan99 partial pass与 Legacy 独立链 | 两份 validation dossier/manifest | Table 2 一角或 supplement pointer | selected-observable qualification only | 转入 reward–field 对照 | +| **4. From reward success to field success** | **11%** | 2.5–3.0 | 重点解释 reward 的物理选择,并用 L2 反证“低 DTW=全场相同”;展示 seed selection/retention | all-five V5 Re100 seeds;Legacy/V5 separated DTW/L2;mean/phase disagreement | **Fig. 3**, Eq. 5 | reward/signature improvement accompanied by independent field improvement;不说 observability/optimality | “若性能真实,动作律本身是否复杂?” | +| 4.1 What each reward term asks the flow to do | 3% | | force balance 与 temporal signature 分工 | reward components | Fig. 3a | design rationale | 进入 metric comparison | +| 4.2 DTW and L2: agreement and disagreement | 5% | | L2 为 JFM 主证据,DTW 为 complementary signature metric;突出 Re400 mean/phase mismatch | canonical summary | Fig. 3b–d | association across metrics, not identity | 进入 seed/provenance | +| 4.3 Discovery, selection and retention | 3% | | 五 seed、same-selection VecNormalize、late retention | V5 retained artifacts | Fig. 3e;Table 1 | repeated discovery, seed-dependent retention | 进入 law reduction | +| **5. How much of the learned action is persistent?** | **17%** | 4.0–4.5 | 围绕物理问题组织 SR:从 PPO 行为到原 Legacy plant 的可执行 sparse law,再做 term deletion | Stage1→2→3;canonical Kármán law;PPO/SR/zero;deletion/scaling;steady magnitude correspondence仅作末端 context | **Fig. 4**, **Table 3**, Eq. 6–7 | symmetry-mapped surrogate passes named closed-loop gates;rear constant is largest tested contribution in declared window | “动作中的 constant 是否对应场改善的大部分?” | +| 5.1 Recovering an executable sparse law | 5% | | causal pairing、imposed symmetry、CFD arbiter | SR authority | Fig. 4a;Eq. G map | surrogate, not unique/global law | 进入 formula | +| 5.2 Persistent rear counter-rotation and state-dependent terms | 6% | | 展示 front/rear law、准确 action order/sign | canonical formula | Fig. 4b–c;Eq. SR law | persistent dominant tested element;feedback secondary but nonzero | 进入 closed-loop | +| 5.3 Closed-loop arbitration and bounded deletion | 6% | | PPO/SR/zero、40/200/400 window区别、failed gates | Legacy runs/tables | Fig. 4d–f;Table 3 | parent-relative sensitivity, not necessity/sufficiency | 进入 field decomposition | +| **6. What does the persistent component account for, and what remains dynamic?** | **18%** | 4.5–5.0 | 把 corrected mean decomposition 与 CCD 放在同一物理问题下,但不混淆 estimand;这是文章最大结果节 | zero/constant/DRL ROI errors;93.42/6.58;19×10 residual;rank-3;CCD/POD principal cosines | **Fig. 5–6**, Eq. 8–10 | constant mean accounts for most measured error reduction in exact ROI/window;residual phase-coherent/action-associated;CCD not causal/superior | “这种 constant recurrence 有何 steady 物理语境?” | +| 6.1 Constant mean versus DRL mean | 7% | | 三角色场与 additive scalar ledger | corrected ROI mean artifact | Fig. 5;Eq. mean identity | `accounts for measured reduction`,不是 actuator causal effect | 进入 residual | +| 6.2 A separately centred dynamic residual | 4% | | 明确非 paired counterfactual,定义 cycle-template residual | corrected CCD contract | Fig. 6a;Eq. residual | reference residual only | 进入 low-rank organization | +| 6.3 Action-associated low-rank organization | 7% | | rank-3 stability、symmetry coordinates、phase reconstruction、POD near-equivalence | CCD/POD publication | Fig. 6b–f;Eq. operator | descriptive action association; only subspace stable | 进入 steady context | +| **7. What steady physics is compatible with the recurring rotation?** | **11%** | 2.5–3.0 | 用 steady endpoint、sign oracle 和失败 theory 约束解释;不承担 mechanism closure | accepted `[0,+,-]`, `s=3.55`, `E_inf_vector`; reverse mismatch;potential sign failure;partial NS ledger | **Fig. 7**, Eq. 11–12 | bounded free-slip endpoint and outer-reference constraint;gap/base-bleed is hypothesis | “把相容观察与未闭合箭头集中综合” | +| 7.1 A low-deficit constant-rotation endpoint | 4% | | direct profile与L2,accepted/reverse标签 | steady v3b | Fig. 7a–c;Eq. `s,E_inf` | settling-qualified endpoint, not optimum/stability | 进入 sign/theory | +| 7.2 Rotation sign and the gap-facing motion | 3% | | 显式 cardinal wall velocities,消灭 boat-tail误读 | sign oracle | Fig. 7d | base-bleed/gap-jet family wording only | 进入 theory boundary | +| 7.3 Outer theory and the failed closure route | 4% | | one-circle impermeability、rear dipole、`g` sign conflict、partial ledger | theory/NS authority | Fig. 7e–f;短 outer-reference equation | theory constrains; does not explain finite-Re mechanism | 进入 synthesis | +| **8. Bounded synthesis, failures and outlook** | **6%** | 1.5–2.0 | 将 SR/field/CCD/steady 画成“相容但不等价”的证据图;列 failure、experiment status 与 decisive future tests | claim ledger;negative routes;qualitative experiment status | **Fig. 8**, **Table 4** | candidate organization, not universal law | 结束于可证伪的下一步,而非应用夸张 | +| 8.1 Near-constant plus dynamic: what is and is not connected | 3% | | chain/estimand/lineage map | cross-package ledgers | Fig. 8 | bounded organizing pattern | 进入 limits | +| 8.2 Failure envelope and qualitative experiment | 2% | | cross-Re/phase failure、Illusion SR negative、experiment feasibility | retained negatives | Table 4;实验仅可作 inset(有 provenance 才用) | no generality/validation | 进入 conclusion | +| 8.3 Conclusions and decisive tests | 1% | | 4–5条结论+matched intervention/NS closure需求 | evidence stress test | — | 重述 claim ceiling | — | +| **Total** | **100%** | **24–27** | | | | | | + +### Introduction 线性 cloak 历史硬上限 + +Introduction 仅允许 **1 个功能段、约 180–250 words(正文总字数约 2–3%)** 处理 optical/active linear/water-wave cloak 与 illusion vocabulary。它必须以“not a Navier–Stokes equivalence”结束,随后立即进入 finite-Re wake、active hydrodynamic precedent、pinball 与 sparse-control gap。不得展开 science-fiction、metamaterial 分类史或应用场景目录。 + +### CFD validation 空间裁决 + +不接受 1.5–2.5 页独立 validation section。当前文章中 CFD validation 是支撑合同而非科学主角,主文控制在 **0.5–0.75 页 + Table 2 的若干行**;Kan99 mean-lift sign mismatch 必须可见。完整 K2/S2 配置、bands、hashes、smoke/partial matrix 放 supplement。 + +## 5. 八幅主图 storyboard + +| 图 | Storyboard(建议 panels) | 现有数据支持 | 后续离线图/表需求 | +|---|---|---|---| +| **Fig. 1 Capability before explanation** | (a–c) Kármán target/zero/controlled 同色标 vorticity/velocity;(d) 三探针 signature;(e) vortex event;(f) `075` Illusion PPO;(g) steady accepted;(h) 一个明确 degradation/failure 小面板 | reproduction plots/manifests;periodic/event/late roles;V5/Legacy retained views | 统一坐标/色标/role/chain/case/seed/phase标签;核对每个 panel 的 raw manifest/hash;Vortex/Illusion若 metric contract 不完整,只作视觉 named demo,不给统一效率条 | +| **Fig. 2 Plant and evidence contracts** | (a) geometry/body order;(b) wall-sign cardinal arrows;(c) sensors/ROI;(d) `q_target/q_zero/q_constant/q_DRL` roles;(e) Legacy/V5 两条不相交 provenance lanes | geometry/contract code;sensor dossier;role docs | 新绘 schematic;从合同自动导出坐标/Re/action sign;不依赖 CFD | +| **Fig. 3 What was optimized vs what improved** | (a) reward components;(b) DTW vs `E_mean`;(c) `E_phase8`与frequency/period regularity;(d) Re400 mean/phase disagreement;(e) Re100 five-seed best vs late retention with selected normalizer | retained V5 tables;canonical wake-L2 summary | 必须先完成 five-seed/VecNormalize table 与 metric concordance;不拟合跨 case 通用趋势线 | +| **Fig. 4 Executable sparse law** | (a) Stage1→2→3/CFD arbiter;(b) canonical formula tree;(c) PPO/SR action traces;(d) PPO/SR/zero signature;(e) constant deletion;(f) feedback/front deletion与failed gate | SR plotting package、telemetry、deletion tables | 统一 window/comparator;offline RMSE 与 closed-loop metric 分栏;exact formula/hash footnote | +| **Fig. 5 How much the persistent component accounts for** | target/zero/constant/DRL mean fields;zero→constant与constant→DRL difference;ROI/mask inset;`E={0.4694,0.1110,0.0858}` 与 93.42/6.58 additive bar | corrected ROI mean artifact | 从 machine redraw fields 重绘,不 digitize PNG;每个 panel 印 ROI/common-mask/window/Legacy lineage;bar 明确是 error-difference share 非 energy/causal share | +| **Fig. 6 What remains dynamic** | (a) residual definition;(b) singular strengths/rank checks;(c–d) rear-symmetric/antisymmetric action coordinates and modes;(e) four phase reconstructions;(f) CCD vs raw POD principal cosines | preferred pinball-inclusive CCD publication、plot_data | 解决 manuscript-facing canonical designation;保留 source sibling identity;简化现有四组图为一张主图,其余敏感性进 supplement | +| **Fig. 7 Steady context and theory boundary** | (a) stationary/accepted/reverse profiles;(b) `E_inf_vector(s)` nearby points;(c) accepted field;(d) wall sign/gap-facing arrows;(e) outer potential reference;(f) `g_opt` vs descriptive `g` sign conflict + incomplete NS ledger badge | steady current display/CSV、theory artifacts、partial ledger | 重绘 accepted/reverse时显式标注 amplitude mismatch;不得画成机制闭环;MFS若 validation 未完成,只展示最短 one-circle/outer-reference结果,不展示“精美但未验证”MFS场 | +| **Fig. 8 Integrated claim map and failure envelope** | 中心为 `persistent + dynamic`;四周分别 SR estimand、mean-field estimand、CCD association、steady endpoint;实线=定义/同链,虚线=compatible observation,断线=unresolved mechanism;侧栏列 Re400、Illusion SR、OID、experiment limits | Round1/2 ledgers | 新绘 evidence graph;每条边标 chain/metric/status;实验图片只有在 raw provenance 核实后作为小 inset,否则不进主图 | + +**实验图裁决:** 不预留第九幅主图。若 raw dye image/video、condition、frame rate/scale 与 trial provenance 在出图前可核实,可把一张小 inset 放 Fig. 8;否则实验全部进 supplement。没有同步 PIV/force 时,任何情况下都不把实验置于 headline Fig. 1。 + +## 6. Tables 与 equation budget + +### 6.1 主文 tables(4个) + +1. **Table 1 — Capability and evidence status.** 只列 6–8 个代表行:case、chain、Re convention、seed/n、target/zero、DTW、L2 semantic、status、failure。完整 11-case/15-run 与 Legacy roles 进 supplement。 +2. **Table 2 — Plant/solver/metric contracts.** Legacy 与 V5 并排但绝不合并:grid/BC、`Re_code/Re_D`、body/action sign、observation order、normalization、reward/DTW、field metric、solver qualification状态。CFD validation 数字只保留 Sah04 S2 pass 与 Kan99 K2 partial pass摘要。 +3. **Table 3 — SR law and closed-loop evidence.** formula identity、case/window、PPO/SR/zero、deletion variant、status与 prohibited inference;offline RMSE 单列为 diagnostic。 +4. **Table 4 — Cross-analysis claim ledger.** `claim | chain | parent artifact | estimand | comparator/window/n | status | strongest wording | prohibited inference`,同时承担 final limitations table。 + +### 6.2 Equation budget + +主文 **12 个 numbered equations 上限**,其中只有 8–10 个需要独立展示;其余可行内或合并: + +1. `Re_D` 与 Legacy `Re_code` 映射; +2. wall velocity/action sign 与 `s`; +3. sparse objective/reward(只保留物理组成,不展开 PPO); +4. DTW role 的简式或定义性引用; +5. registered field RMS 与 `eta`; +6. SR reflection map; +7. canonical SR law; +8. mean-field additive identity与 `E_r`; +9. separately centered dynamic residual; +10. weighted CCD operator/mode normalization; +11. steady `E_inf_vector`; +12. one-circle/outer dipole或 incomplete NS ledger(二选一主文,另一项 supplement)。 + +Supplement 放:DTW dynamic programming recursion、PPO objective、完整 SR feature library、CCD/POD代数细节、MFS collocation/images/multipoles、完整 NS CV identity、phase extraction、mask/quadrature实现。Equation 数量服务于论证,不为展示理论深度而扩张。 + +## 7. Main text vs supplement + +### 7.1 Main text 必须保留 + +- cloak/signature 的精确定义与 named comparator; +- 一张 capability hook,含至少一个失败/退化信号; +- Legacy/V5、`Re_code/Re_D`、body order/action sign 的可见合同; +- reward与DTW的物理角色,以及 L2 为独立主要 field evidence; +- Re100 五 seed selection/retention 的最小完整交代; +- canonical Legacy Kármán SR law、imposed symmetry、Stage-3 closed-loop arbiter; +- rear constant deletion与“dominant tested”边界; +- zero/constant/DRL mean decomposition及93.42/6.58的精确 estimand; +- corrected residual、rank-3、action association与POD near-equivalence; +- steady accepted branch、`s=3.55` endpoint、wrong-sign/reverse与potential sign failure; +- Kan99 partial pass、Illusion SR negative、OID claim-free、experiment qualitative 的短限制; +- 一页 cross-analysis claim ledger。 + +### 7.2 Supplement + +- V5 全 11-case/15-run matrix、所有 seeds/curves/checkpoints/normalizers、selection细节; +- Legacy/V5完整 solver/config/API/readback/migration合同与hash ledger; +- periodic Kármán/Illusion的完整 native/normalized DTW、`E_mean/E_phase8`、phase/frequency diagnostics; +- Vortex event L2、Erase mean L2(只有合法 exact roles 时)、steady full profiles/L2; +- SR 全 topology、feature library、fit/split/provenance、per-case coefficients、200/400/named extension、all deletion/scaling、failed gates; +- CCD 全 domain/mask/bin/origin/LOCO sensitivity、全部 modes/phase/POD plots、wake-only sibling与pinball-inclusive派生关系; +- OID 只作为 method/reset/negative audit appendix,不放 positive result; +- steady sweep/reverse细节、MFS validation、Laurent/one-circle checks、partial NS diagnostics与所有 open gates; +- CFD K2/S2完整 qualification、bands、hashes、smoke说明; +- experiment apparatus、raw dye sequence、conditions与 limitations(若 provenance 可核实); +- archive/negative-route、exclusion、artifact-path/hash与claim-status ledgers。 + +### 7.3 OOD/OID裁决 + +- **OOD(若指 out-of-distribution/generalization)**:不设一级/二级主结果节;只在 capability Table 1 和 Section 8 failure envelope 中占约 0.25–0.5 页。n=1 cross-Re/size 不构成 OOD law。 +- **OID**:不设结果节,不占主图;主文最多 2–4 句说明 active core claim-free、旧路线为何不能承担机制证据。方法方程与 reset history 进 supplement。 + +## 8. Legacy / V5 的具体呈现语言与布局 + +### 8.1 固定语言 + +首次出现时使用: + +- **Legacy analysis chain**:`Legacy Kármán re_code=100 (Re_D=50)`;支持 principal SR closed-loop、corrected mean/CCD 与标准化 Target/PPO/SR/Zero roles。 +- **V5 support chain**:`CelerisLab V5 Kármán code-Re100 (Re_D=50 under its stated convention)`;支持现代 solver/context、五 seed discovery/retention 与 named-condition capability。 + +推荐句式: + +> LegacyCelerisLab and CelerisLab V5 are treated as separate evidence chains. Their geometry, boundary conditions, APIs, readback, normalization/calibration and retained-policy contracts differ; no numerical pooling or equivalence is assumed. + +> The Legacy chain is used for the principal policy-reduction and field-interpretation analysis, whereas V5 supplies independent support on policy discovery, retention and named-condition capability. + +### 8.2 固定布局 + +- 所有混合 figure 采用两条水平泳道或明显边框:**Legacy analysis** / **V5 support**。 +- 不在同一回归线、均值、error bar 或颜色连续谱中混合两链;若同一 panel 显示,marker shape 与背景带必须同时区分。 +- Table 2 固定双栏;每个数值行打印 solver/config、Re定义、role、seed/n、metric/window。 +- 章节顺序上先用 V5/representative cases 做 capability hook,再明确“从此处起的深分析回到 Legacy Re100”;Section 7 steady 再次标明 V5 free-slip 独立 contract。 +- 不用 `validation across implementations`、`reproduction of Legacy`、`consistent numerical continuation`。可用 `separate supporting chain`, `contract-driven rewrite`, `qualitatively compatible at named scope`。 + +### 8.3 V5不能做的事 + +V5不能 rescue Legacy SR、为 CCD 提供 independent replication、把 Illusion SR 负结果改写为正、证明 steady mechanism、或把五 seed policy search 变成物理独立实验。V5 late retention 必须写成 seed-dependent;非 Re100 case 大多 n=1。 + +## 9. 八项 offline 工作重新排程 + +这里严格重排 pressure-test 的八项,不新增第九项。 + +### A. 结构冻结前必要 + +1. **Claim/evidence ledger**:`claim | chain | artifact/hash | metric | comparator | window | n | status | forbidden inference`。 + 决定哪些箭头可进入目录、abstract和标题;未完成不得冻结 Section 5–8 的措辞。 +2. **Legacy/V5 contract table**:solver、BC、Re、body/action sign、normalization/calibration、reward/DTW、field metric、time units。 + 决定 Figure 2/Table 2 与所有跨链桥是否成立。 +3. **All-five Re100 seed selection/retention table**:same-selection `VecNormalize` identity、best/late、field metrics、selected-seed rule。 + 防止 capability hook 被批评为 cherry-picking。 +4. **SR closed-loop table**:PPO/SR/target/zero、case/window、failed gates、deletion variants,offline RMSE 独立列。 + 决定 “executable sparse law” 与 “dominant tested” 是否能进入 central claim。 + +### B. 写正文前完成 + +5. **Metric/window concordance table**:native/normalized DTW、`E_mean`、`E_phase8`、steady `E_inf_vector`,突出 Re400 disagreement。 + 用于统一术语,防止正文中把不同指标互换。 +6. **Solver/sign/CCD-alias audit table**:Kan99 sign mismatch、accepted/reverse action、OID/CCD sign conflict、validated sibling与pinball-inclusive publication身份。 + 用于消除 caption 与 methods 中最危险的 provenance/sign 错误。 + +### C. 出图前完成 + +7. **Constant/dynamic provenance panel ledger**:CCD values、ROI/mask/window/cycles/rank/non-pairing caveat,与 SR deletion和steady context并排但不合并。 + 这是 Fig. 5–8 的 source-of-truth;必须先于视觉合成。 + +### D. 可选 + +8. **Offline virtual sensor-plane/feature robustness**:`x/D=8–12`、centre/outer/all-six。 + 只在作者/审稿人需要“placement reasonable”之外的项目内 robustness 时做;它不能建立 optimality,不应阻塞结构或正文。 + +## 10. 不纳入文章的内容 + +| 不纳入主线 | 理由 | +|---|---| +| positive Illusion SR tracking/efficacy/generalization/term necessity | standardized long-window结果接近 physical zero,当前为 historical/negative | +| OID importance、control authority、causality或active scene result | active OID 是 claim-free method core,旧 force gates失败且action受feedback混杂 | +| old temporal/phase CCD、response lag、CCD superiority | 已被 corrected cycle-template route取代;当前只能描述association,POD子空间近等价 | +| potential circulation cancellation作为finite-Re机制 | `g` sign冲突;Euler impermeability不提供 rotating no-slip closure | +| closed momentum/energy restoration、gap jet causes cloak | NS ledger不完整,缺matched intervention与wall-resolved closure | +| boat-tail表述 | accepted `[0,+,-]` wall motion 对应 gap-facing downstream motion,是base-bleed/gap-jet family,不是已证明boat-tail | +| universal/continuous Re或size law | 大多数跨条件 n=1,metrics/learning rate/contracts不统一 | +| full case/seed gallery、所有训练曲线 | 稀释Kármán深分析并制造gallery paper;放supplement | +| OOD/OID独立一级节 | 证据角色小且易过度承诺;仅限failure/method boundary | +| 1.5–2.5页 CFD validation chapter | solver在本文角色小;当前qualification partial且不证明control physics | +| 长线性 cloak/metamaterial史 | 只提供vocabulary,拖延nonlinear gap并暗示错误等价 | +| seals、marine structures、sediment、defence/low-observability应用 | 已被作者/导师路线否决或证据不足;应用只留一句前瞻 | +| quantitative experimental efficacy、PIV/force agreement | 无完整同步校准包;dye仅支持qualitative open-loop feasibility | +| archival transfer analyses与计划中的 parity/post-fix retraining | archive/plans不是当前科学authority | +| 未完成MFS精美场图或未闭合CV图 | 易把计算 capability 误读为 validated explanation | + +负结果不等于删除:Re400 phase failure、Illusion SR collapse、Kan99 lift sign、potential sign failure与实验限制必须在主文短而可见;其完整材料进 supplement。 + +## 11. 只需作者决定的四个问题 + +### Q1. 标题是否允许使用 “skeleton”? + +- **明确推荐:** 不用于工作标题;保留为 Section 8 的定义性术语。 +- **影响:** 使用会显著提高辨识度,也会把审稿预期从 bounded interpretation 提升到结构唯一性、跨条件稳健性和物理闭合。 +- **默认选项:** 采用推荐标题 *Interpreting learned wake-signature cloaking...*;只有四项结构冻结前 offline ledger 全部通过且作者主动接受更高风险,才切换备选2。 + +### Q2. 文章的首要名词是 “cloaking” 还是 “wake-signature matching”? + +- **明确推荐:** 标题和引言采用 `wake-signature cloaking`,方法定义为 declared target/background matching;表格与指标处优先用 `signature/field error`。 +- **影响:** 纯 `cloaking` 更醒目但容易被要求全场/多观察者等价;纯 `matching` 最安全但失去项目概念新意。 +- **默认选项:** 双层用法:概念层 `wake-signature cloaking`,定量层 `target-relative signature/field matching`。 + +### Q3. headline capability 图是否保留一个 Illusion PPO panel? + +- **明确推荐:** 保留一个明确标注 `PPO capability; no positive SR claim` 的 `075` Illusion panel;不进入后续深分析。 +- **影响:** 保留可兑现“先展示惊艳能力”和 cloak/illusion项目范围,但会增加读者误以为 Illusion SR/跨size是本文主张的风险;删除则文章更聚焦但视觉范围变窄。 +- **默认选项:** 保留单 panel + Table 1 单行,完整 Illusion cases、saturation和negative SR进 supplement/limits。 + +### Q4. manuscript-facing CCD package 采用哪个正式称呼? + +- **明确推荐:** 主文图采用 pinball-inclusive preferred reader publication,但在 caption/ledger 中把 validated wake-only per-cycle sibling列为 primary source lineage;不要把两者合称一个“canonical result”。 +- **影响:** 选择决定 Fig. 6 的可重绘入口、artifact citation与审稿复现路径;错误合并会掩盖 derived-vs-primary关系。 +- **默认选项:** 在用户完成 canonical-promotion choice 前,使用 `preferred pinball-inclusive derived publication, bound to the validated per-cycle source`,不写 `canonical CCD`。 + +实验是否进主文**不作为作者偏好问题**:由 raw image provenance gate 决定;通过则 Fig. 8 inset,不通过则 supplement。其余 case、metric、sign、claim ceiling 均由证据判断,不推给作者。 + +## 12. Round 3:先做 section-level evidence briefs,不直接写全文 + +Round 3 应按本目录生成 **8 个 section-level evidence briefs**,每个 brief 是可审计的“写作接口”,不是段落草稿。建议文件与责任如下: + +1. `R3_01_INTRO_AND_GAP_BRIEF.md` +2. `R3_02_CAPABILITY_BRIEF.md` +3. `R3_03_CONTRACTS_AND_METHODS_BRIEF.md` +4. `R3_04_REWARD_TO_FIELD_BRIEF.md` +5. `R3_05_PERSISTENT_ACTION_BRIEF.md` +6. `R3_06_MEAN_DYNAMIC_CCD_BRIEF.md` +7. `R3_07_STEADY_CONTEXT_BRIEF.md` +8. `R3_08_SYNTHESIS_LIMITS_BRIEF.md` + +### 每个 brief 的固定 schema + +- **Section question / one-sentence answer**:只写本节要回答的物理问题与当前最强答案。 +- **Claim ladder**:`green / amber / red`,每条 claim 给 strongest wording 与 prohibited wording。 +- **Evidence cards**:每张卡必须含 `chain, case/seed/role, artifact/hash, metric/estimand, comparator, window, n, status, exact number`。 +- **Lineage/correlation note**:指出哪些证据共享 parent realization、不是独立重复。 +- **Required equations**:只列方程ID、定义目的、变量合同和放主文/补充的理由。 +- **Figure/table panel contract**:panel question、source arrays、色标/ROI/mask/phase、caption必须包含的限制、是否需要离线重绘。 +- **Paragraph function map**:每段只列功能(claim → evidence → limitation → bridge),不写成 manuscript prose。 +- **Cross-section imports/exports**:从上一节接收什么定义,向下一节交付什么已建立事实;禁止重复定义或跨链偷渡。 +- **Open gate**:仅列在进入正式写作前真正阻塞该节的 offline work;不新增 CFD/文献调研愿望清单。 +- **Word/figure budget**:不得突破本文件Section 4分配。 + +### Round 3 的编排顺序 + +1. 先完成 `03 contracts`、`05 SR`、`06 mean/dynamic/CCD` 三个硬证据 brief; +2. 再完成 `04 reward-to-field` 与 `07 steady context`; +3. 用这些结果反向收紧 `02 capability` 与 `01 introduction`; +4. 最后写 `08 synthesis/limits`,并运行一次 whole-brief claim/terminology/Legacy-V5 consistency audit; +5. 只有所有 brief 的 artifact/metric/window/claim status 通过,才进入 Round 4 的 rough section drafting。不得在 Round 3 直接并行写全文,因为那会在合同冻结前固化跨链措辞、重复方法并放大三路分歧。 + +## 13. Freeze checklist + +讨论后若以下项目无异议,即可冻结结构: + +- [ ] 80:20 core/outer editorial ratio; +- [ ] 推荐标题register与`skeleton`正文级定位; +- [ ] 8节物理问题目录及100%空间预算; +- [ ] Legacy Re100唯一深分析、V5独立support; +- [ ] 8主图、4表、12方程上限; +- [ ] L2为主要独立场证据,DTW为signature/reward-compatible补充; +- [ ] CFD validation 0.5–0.75页,不设独立一级节; +- [ ] OOD/OID不占显著正文; +- [ ] experiment由provenance gate决定主文inset或supplement; +- [ ] central claim不越过 descriptive/bounded organization; +- [ ] Round 3先做8个evidence briefs,不写全文。 + +**最终 editorial verdict:** 这篇文章最有竞争力的形态不是“DRL展示很多 cloak/illusion cases”,也不是“SR、CCD和theory各自证明同一机制”,而是:**用早期视觉能力建立问题价值,用reward与L2建立测量可信度,用Legacy闭环SR和corrected field decomposition解释Kármán主例,再以CCD和steady/theory明确动态剩余与物理边界。** 读者应带走一个清晰、有限、可证伪的 `persistent rotation + dynamic correction` 图景,同时明确知道哪些箭头仍未被证明。 + + +## 14. Author-ratified revision summary (controls conflicts above) + +- **Provisional frozen title:** *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball*. There is no colon and no A-opening. Interpretation depth remains cloak/Kármán-centred; illusion and erase are bounded extensions. The title does not authorize positive Illusion SR. +- **Terminology hierarchy:** concept/goal = hydrodynamic cloaking and illusion; learning/execution = wake-signature matching using forces plus sparse downstream observations; independent quantitative validation = field matching, with L2 primary for JFM and DTW complementary and case-specific. `control skeleton` is interpretation-level language only. CCD remains `CCD`; its manuscript-facing physical outputs are `action-correlated correction-field modes`, descriptive and noncausal. +- **Corrected progression:** steady → Kármán → vortex → illusion/erase → experiment. Steady rotation was discovered first; later periodic Kármán analysis found a learned law closer to steady than expected, with a dominant steady/near-constant core and smaller dynamic correction. Kármán Re100 remains dominant because it has the richest evidence intersection. +- **Late extensions:** vortex removes periodicity and supports only a bounded comparable-scale incoming/arbitrary-flow hypothesis; use acquired phase-midpoint event-snapshot downstream-ROI L2 plus current DTW. Illusion/erase extend suppression/background matching toward retargeting/erasure; use periodic Illusion complete-cycle mean/phase L2 plus normalized DTW, and Erase mean-field L2 plus DTW only where exact roles exist. No shared metric contract and no positive Illusion SR. +- **Figures and experiment:** Fig. 1 remains left-to-right capability/progression, Kármán visually dominant, with steady/vortex/`075` Illusion smaller; Illusion is PPO capability only. Experiment follows the extensions and is qualitative open-loop feasibility: straighter steady dye streaklines and altered illusion shedding frequency, without synchronized calibrated force/PIV validation. Frank will draft that section later. +- **Structure and workflow:** CFD validation remains fully covered but compact (about 0.5–0.75 page plus contract-table rows and supplement). Kármán deep analysis remains the largest block, while vortex and illusion/erase receive meaningful late main-text space. Round 3 is section/module based and approaches JFM prose: author-readable structured drafts/dossiers with narrative paragraphs or paragraph functions, evidence citations/contracts, figure needs and claim boundaries. A detailed chapter-level JFM style study must precede or guide drafting. The earlier evidence-card/index-first Round-3 recommendation is superseded. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md new file mode 100644 index 0000000..f450a75 --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md @@ -0,0 +1,133 @@ +# Round 2 — Revised structure freeze after author feedback + +> **Status.** Author-ratified Round-2 structure freeze and Round-3 handoff. This is not polished manuscript prose and does not alter evidence packages. It controls conflicts with Round-2 `01`–`04`; superseded recommendations remain in those files as provenance. Repository authority, manifests and immutable artifacts still control scientific facts. + +## 1. Frozen paper identity + +### Provisional working title + +**Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball** + +The wording is frozen provisionally: no colon and no opening article “A”. “Hydrodynamic cloaking and illusion” names the concept and project goal, not the evidentiary strength of every case. Interpretation depth is explicitly cloak/Kármán-centred; Illusion and Erase are bounded objective extensions. The title therefore does **not** revive positive Illusion SR, target-tracking, efficacy-over-zero, necessity or generalization claims. + +### Terminology hierarchy + +1. **Concept/goal:** `hydrodynamic cloaking and illusion`. Cloaking means approach to a declared background/reference; illusion means retargeting a declared hydrodynamic signature. Neither means universal invisibility or full-state equivalence. +2. **Learning/execution:** `wake-signature matching using forces plus sparse downstream observations`. This names what the policy receives and optimizes; it does not establish observability or optimal sensing. +3. **Independent quantitative validation:** `field matching`. Spatial L2 is the primary JFM quantitative metric. DTW is complementary, signal-level and case-specific; it is not a physical delay, causal diagnostic or universal cross-case score. +4. **Interpretation only:** `control skeleton`. It may summarize the dominant steady/near-constant core plus smaller dynamic correction in the Kármán analysis, but is not a title-level mechanism, unique law or cross-case result. +5. **Field organization:** retain `CCD`; call the manuscript-facing physical outputs **action-correlated correction-field modes**. They are descriptive/noncausal, and CCD is not claimed superior to POD. + +## 2. Frozen physical progression + +The narrative is not “Kármán to steady.” The historically and physically correct progression is: + +`steady discovery → Kármán periodic interpretation → vortex nonperiodic extension → illusion/erase objective extension → qualitative experiment` + +### Steady → Kármán + +Steady rotation control was discovered first. Later Kármán analysis showed that the periodic learned law differs less from steady control than expected: it retains a dominant steady/near-constant rear-rotation core with a smaller dynamic correction. This ordering supplies the discovery logic, but does not make the separate V5 steady contract evidence for the Legacy SR/CCD numbers. Kármán Re100 remains the deep-analysis case because it has the richest intersection of PPO, executable SR, independent fields, corrected mean/dynamic decomposition and CCD. + +### Kármán → vortex + +The vortex case removes periodicity. Pulse-like action supports only a bounded hypothesis that comparable-scale combinations of incoming/arbitrary flow and the pinball wake can be handled; do not claim arbitrary-flow capability or universality. Evaluate the acquired **event-snapshot downstream-ROI L2 at the acquisition phase-midpoints**, preserving event labels/offsets rather than relabelling them periodic phase, together with the current DTW contract. If an exact target/control/zero event role or schema is absent, report the gap rather than manufacturing a metric. + +### Cloak → illusion/erase + +This extends the control objective and the force-centred conceptual argument from suppression/background matching to retargeting/erasure. For periodic Illusion, use complete-cycle mean L2 and phase-resolved L2 separately, plus normalized DTW. For Erase, use mean-field L2 plus DTW only where exact target/control/comparator roles exist. Do not force these estimands into the Kármán or vortex metric contract. Illusion is PPO capability evidence only; Illusion SR remains historical/negative. + +### Experiment follows the extensions + +The experiment is qualitative open-loop feasibility only: steady operation shows straighter dye streaklines, while illusion operation shows a shedding-frequency change. There is no synchronized calibrated force/PIV validation, no quantitative field match and no closed-loop experimental claim. Frank will write this section later; the structure must reserve its role without inventing details or numbers. + +## 3. Frozen section hierarchy and space allocation + +Use a physics/progression-led hierarchy, while making Kármán interpretation the dominant analytical block. Percentages are body-text planning shares and sum to 100%; figures/tables may alter page equivalents. + +1. **Introduction: hydrodynamic cloaking, illusion and the interpretation gap — 10%** + Define the concept/goal, distinguish nonlinear finite-Re wake control from linear cloaking analogies, introduce force-plus-sparse-observation wake-signature matching, and state the bounded contribution. + +2. **Problem, execution and evidence contracts — 13%** + Geometry, action/body/sign conventions, Legacy/V5 separation, observations and reward, L2/DTW hierarchy, case-specific estimands, and compact CFD qualification. CFD validation receives about **0.5–0.75 page**, contract-table coverage, and full supporting supplement treatment. + +3. **Capability and progression: steady, Kármán, vortex and illusion — 11%** + Introduce the historical steady discovery, then the Kármán headline and smaller vortex/`075` Illusion demonstrations. Establish why Kármán Re100 is selected for depth. Do not reduce this section to a pooled performance gallery. + +4. **Kármán performance: signature objective and independent field matching — 12%** + Put L2 first for JFM validation and DTW in its complementary signal role; include seed/retention and mean/phase distinctions with Legacy/V5 labels. + +5. **Kármán action law: dominant near-constant core and smaller correction — 17%** + Present executable Legacy SR, symmetry, closed-loop arbitration and bounded deletion. “Control skeleton” appears only as an interpretation-level organization; positive SR scope remains Kármán/cloak. + +6. **Kármán correction fields and action-correlated modes — 17%** + Present the exact constant-mean versus DRL mean estimand, separately centred dynamic residual, and CCD action-correlated correction-field modes. Preserve non-pairing, descriptive/noncausal and CCD/POD boundaries. OID remains claim-free and has no results subsection. + +7. **Cross-case extensions beyond periodic cloaking — 10%** + Give meaningful main-text space to vortex nonperiodic event metrics and illusion/erase objective extensions. Keep their metric contracts distinct and show boundaries/failures alongside capability. This is a late scientific extension, not merely an early gallery. + +8. **Steady context, physical synthesis and theory limits — 6%** + Return to steady as the historical and physical reference for the Kármán near-constant core; retain accepted sign, separate chain, bounded endpoint, failed potential-sign route and incomplete NS closure. The narrative return does not reverse the discovery order. + +9. **Qualitative experiment, limitations and conclusions — 4%** + Reserve a short author-written open-loop feasibility subsection, then state chain/metric/causality limits and decisive future tests. + +Kármán-specific Sections 4–6 occupy 46% and remain dominant. Sections 7 and 9 ensure the late extensions have visible main-text roles without diluting the positive Kármán/cloak interpretation scope. + +## 4. Frozen figure and table logic + +### Figure 1 + +Keep a left-to-right **capability/progression composition**. Kármán must be visually dominant. Smaller panels show steady, vortex and `075` Illusion. Panel labels and caption must identify case, chain, role, comparator and metric status. The Illusion panel is explicitly `PPO capability; no positive SR evidence`. Do not pool efficiencies or imply one metric contract. The experiment follows the CFD extensions in the manuscript and is not part of the frozen Fig. 1 composition. + +### Remaining main figures + +- plant, force/sparse-observation, action sign, metric and Legacy/V5 contracts; +- Kármán DTW versus independent mean/phase L2 and seed/retention evidence; +- executable Kármán SR law, closed-loop arbitration and bounded deletion; +- constant/DRL mean-field matching and exact estimand; +- residual definition and CCD action-correlated correction-field modes with POD comparison; +- vortex event-midpoint ROI-L2 + DTW and periodic Illusion/Erase case-specific extension panels; +- steady discovery/context, accepted/reverse sign boundary, outer-theory failure and integrated claim limits. + +Use a compact contract table that keeps Legacy/V5 and all metric/window semantics separate. Full solver qualification, case matrices, sensitivities, artifact/hash ledgers and negative routes belong in the supplement, while essential comparators and limitations remain visible in the main text. + +## 5. Evidence and claim boundaries that remain frozen + +- **Legacy/V5:** separate chains; never pool or imply numerical continuation/equivalence. +- **Positive SR:** Kármán/cloaking only. Illusion SR is historical/negative; steady is contextual. +- **CCD:** descriptive action correlation only; no causality, response time, mechanism, stability or superiority claim. Use `action-correlated correction-field modes`. +- **OID:** active package is claim-free; no positive result, importance or control-authority claim. +- **Metrics:** periodic complete-cycle mean/phase L2, vortex event snapshots, Erase mean fields, steady profiles/`E_inf_vector`, native/normalized DTW are non-equivalent. +- **Vortex:** comparable-scale pulse-response hypothesis only, not arbitrary-flow universality. +- **Experiment:** qualitative open-loop feasibility; no synchronized calibrated force/PIV validation. +- **Theory:** outer reference and failure boundary only; no finite-Re mechanism closure. + +## 6. Round-3 organization approaching JFM prose + +Round 3 is **section/module based**, not another bottom-up index and not a set of AI-only evidence cards. A detailed **chapter-level JFM style study** must precede the drafting agents or actively guide them. It should examine paragraph progression, placement of definitions and caveats, figure-to-text cadence, evidence density, transitions, and how comparable JFM papers separate capability from interpretation. Exact bibliography identities/DOIs and read levels remain required. + +Each Round-3 output must be an author-readable structured section draft/section dossier containing: + +1. section purpose and one-sentence bounded answer; +2. narrative paragraphs or a paragraph-by-paragraph function map approaching prose; +3. evidence citations/contracts for every quantitative or physical claim, including chain, case/role, comparator, metric, window and artifact authority; +4. figure/table needs and caption-level limitations; +5. explicit claim boundaries, conflicts and non-claims; +6. definitions imported from previous sections and the bridge exported to the next; +7. unresolved gates that truly block drafting. + +Sentence-level polishing is not required. Agents should not emit raw indexes, card stacks or machine-oriented handoffs as the primary output. Evidence cards may exist underneath as working support, but the delivered module must read as a coherent section plan/draft for Frank. Frank retains authorship of the experiment subsection. + +Suggested module order: (i) JFM chapter-level style study; (ii) contracts/metrics; (iii) Kármán performance; (iv) Kármán SR action law; (v) Kármán field/CCD interpretation; (vi) cross-case vortex/illusion/erase extensions; (vii) steady-context synthesis; (viii) introduction and capability progression; (ix) Frank's experiment section; (x) limitations/conclusion and whole-manuscript terminology/claim audit. + +## 7. Explicit supersession ledger + +The following prior Round-2 recommendations are retained for provenance but no longer control the manuscript: + +- `01` A1 and `04` §3 title recommendations → superseded by the provisional frozen title in §1. +- Kármán → steady as the implied physical progression → superseded by historical steady → Kármán, with a later steady-context return. +- Vortex/Erase primarily in supplement or only an early gallery → superseded by a meaningful late cross-case extension section using case-specific metrics. +- `04` §12 evidence-brief/card-first Round 3 and deferral of rough drafting to Round 4 → superseded by author-readable section/module drafts/dossiers approaching JFM prose in Round 3, guided by chapter-level JFM style study. +- Any generic CCD mode label implying response/causality → superseded by `action-correlated correction-field modes`, with descriptive/noncausal status explicit. + +Unchanged recommendations include compact CFD validation, Kármán Re100 analytical dominance, Legacy/V5 separation, L2 primacy with DTW complementarity, case-specific metric semantics, bounded `control skeleton` usage, positive-SR Kármán/cloak scope, negative Illusion SR, descriptive CCD, claim-free OID and qualitative-only experiment. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md new file mode 100644 index 0000000..4f240f8 --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md @@ -0,0 +1,350 @@ +# Round 3 section-level JFM writing-style guide + +> **Role.** Author-facing style and section-architecture guide for Round 3 evidence briefs. It is not manuscript prose or a claim authority. Recommendations follow the supplied final intent if it differs from a concurrently revised `04_TOP_LEVEL_SYNTHESIS.md`. +> +> **Final intent used here.** Working title *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball*; capability Fig. 1; compact contracts/CFD; historical physics logic steady → Kármán, implemented in two passes: a short steady discovery/result seed in the early capability progression, then Kármán as the deep case with SR, mean/dynamic decomposition and CCD, followed by cross-case extensions and a later return to full steady context/theory; qualitative open-loop experiment; conclusion. + +## 1. Evidence base and status + +`Full-PDF` means paper-level full-text reading through the existing DynamisLab Undermind workspace, not equation-by-equation verification or artifact audit. `Full-report` means a repository literature report/dossier was read. `Snippet` means abstract, metadata or limited text only. + +| Exact identity | DOI | Status | Observed section-level lesson | +|---|---|---|---| +| Deng, Noack, Morzyński & Pastur, “Low-order model for successive bifurcations of the fluidic pinball”, *JFM* 884, A37 (2020) | `10.1017/jfm.2019.959` | full-PDF | Section order mirrors physical chronology; a visible failure motivates refinement; final phenomenogram synthesizes rather than inventories. | +| Cornejo Maceda, Li, Lusseyran, Morzyński & Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *JFM* 917, A42 (2021) | `10.1017/jfm.2021.301` | full-PDF | Baseline → simple steady forcing → asymmetric forcing → feedback; performance and physical interpretation remain coupled. | +| Rabault, Kuchta, Jensen, Réglade & Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *JFM* 865, 281–302 (2019) | `10.1017/jfm.2019.62` | full-PDF | Short entry to the gap; capability precedes wake interpretation; limitations appear beside findings. | +| Paris, Beneddine & Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning”, *JFM* 913, A25 (2021) | `10.1017/jfm.2020.1170` | full-PDF | Reference-case efficacy precedes mechanism, robustness and sensor extensions; strong claims follow dedicated tests. | +| Li & Zhang, “Reinforcement-learning-based control of confined cylinder wakes with stability analyses”, *JFM* 932, A44 (2022) | `10.1017/jfm.2021.1045` | full-PDF | Physics analysis earns early placement because it later changes reward and probe logic. | +| Xia, Zhang, Kerrigan & Rigas, “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements”, *JFM* 981, A17 (2024) | `10.1017/jfm.2024.69` | full-PDF | Baseline success → partial-observation failure → history-based repair → parametric limits. | +| Wang, Yan, Hu, Chen, Rabault & Noack, “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing”, *JFM* 988, A4 (2024) | `10.1017/jfm.2024.333` | full-PDF | Information gap → feature method → baseline capability → harder cases → physical interpretation. | +| Loiseau, Noack & Brunton, “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *JFM* 844, 459–490 (2018) | `10.1017/jfm.2018.147` | full-PDF | Black-box sensor dynamics precede full-state reconstruction and grey-box interpretation; one schematic carries the method logic. | +| Gautier, Aider, Duriez, Noack, Segond & Abel, “Closed-loop separation control using machine learning”, *JFM* 770, 442–457 (2015) | `10.1017/jfm.2015.95` | full-PDF in this pass; Round-1 card was snippet/preprint-level | Concise plant → objective → explicit law → temporal/spectral interpretation → benchmark/envelope. | +| Mao, Blackburn & Sherwin, “Nonlinear optimal suppression of vortex shedding from a circular cylinder”, *JFM* 775, 241–265 (2015) | `10.1017/jfm.2015.304` | full-PDF | Numerical integrity precedes interpretation; global performance precedes spatial/stability explanation; realizability caveat remains visible. | +| Round-1 Introduction, SR, CCD/OID, steady/theory, experiment/metrics dossiers | repository dossiers | full-report | Exact bibliography, evidence/metric boundaries, negative routes and experiment limits. | +| Round-2 narrative, JFM benchmark, stress test and top-level synthesis | repository reports | full-report | Project-specific order, space/claim ceilings, Legacy/V5 and estimand boundaries. | + +**Coverage ledger.** Read: all four current Round-2 top-down reports; the relevant five Round-1 dossiers named above; ten exact JFM papers. Mapped: remaining Round-1 dossiers and existing Undermind `JFM/` and `JFM References/` indexes. Not covered: exhaustive sentence coding of all JFM papers, full facility-literature bibliography and unrelated papers; not required for this bounded task. External-inaccessible: none essential. Existing literature establishes style precedent, never internal results. + +## 2. Cross-paper observations and manuscript recommendation + +### Observed style + +1. A section is an argument: question/baseline → comparison → evidence → physical reading → caveat → next question. +2. Results normally establish a reference case before extensions. Scalar/time evidence comes before or beside fields, and interpretation follows the declared comparator. +3. Equations define objects used later; figures carry empirical burden; prose explains how the comparison changes the inference. +4. Discussion is distributed. Papers interpret a result and state its local limitation before moving on. +5. Strong words such as robustness, stability or optimality follow tests designed for those claims. Attractive fields alone do not license them. +6. Bridges transform one result into the next scientific question; they do not merely announce a section number. + +### Recommendation + +Use the local rhythm above at a lower claim register. Treat **control skeleton** as the interpretation assembled after SR and field evidence, never as an initial premise. Keep terminology fixed: + +- concept: **hydrodynamic cloaking / hydrodynamic illusion**; +- execution: **wake-signature matching**; +- evaluation: **field matching**, L2 primary and DTW complementary; +- interpretation: **control skeleton**; +- dynamic field result: **CCD** and **action-correlated correction-field modes**. + +Do not replace the last phrase with causal-response, control-authority, importance or uniquely-CCD language. + +## 3. Section-level writing contracts + +Paragraph counts below are functional targets, not rigid formatting. Each subsection distinguishes the sample’s observed practice from the recommendation. + +### 3.1 Introduction + +**Observed.** Closest JFM papers funnel from physical problem to precise difficulty, nearest methods, gap and present contribution. Citations cluster in context/gap paragraphs; equations and detailed local results are absent. Deng uses history only to prepare the model question; Rabault and Paris reach the control gap quickly; Loiseau uses taxonomy because it organizes the contribution. + +**Recommended five-paragraph sequence.** + +1. **Concept.** Define cloak as approach to a declared background and illusion as approach to a declared non-zero target in observer/field space. Give one compact linear-cloak genealogy and end with non-equivalence to finite-Re Navier–Stokes wakes. +2. **Physical difficulty.** Separation, shedding and the multi-cylinder pinball make wake-signature matching different from scalar drag reduction. Cite pinball dynamics and active hydrodynamic precedents. +3. **Capability and gap.** Sparse-sensor DRL can discover nonlinear control, but reward/signature success does not establish field matching or a physical law. Cite nearest DRL/partial-observation work. +4. **Missing evidence chain.** Motivate executable policy reduction, independent field evaluation, mean/dynamic separation and bounded steady context. Cite SR/low-order methods only for their roles. +5. **Question, contribution, scope.** Name capability breadth, sole deep Kármán case, qualitative experiment and principal non-claims. Promise capability first, then contracts and interpretation—not a package list. + +**Placement, tense, strength.** Present tense for definitions/physics; past or present perfect for literature; present for paper purpose. No project number in paragraphs 1–3. Refer prospectively to Fig. 1 near the end without narrating panels. Use `can be interpreted as`, `under the declared contract`; reserve `demonstrates` for named-condition capability. Do not claim priority without a separate audit. + +**Bridge.** Convert the gap into the definitions and estimands needed before the capability progression can be compared. + +**Anti-patterns.** Cloak-history catalogue; one paragraph per paper; “AI is revolutionizing science”; contributions as `DRL/SR/CCD/theory/experiment`; citations appended without argumentative grouping; announcing persistent rotation as cause before evidence. + +### 3.2 Problem, method and compact CFD contracts + +**Observed.** JFM control papers establish geometry/BC, objective, sensing/action and qualification before dependent claims. Definitions use present tense; validation outcomes use past. Equations cluster around reusable contracts. + +**Recommended six functional paragraphs.** + +1. **Plant:** geometry, body order, coordinates, BCs and Reynolds convention; declare Legacy/V5 separation. +2. **Actuation:** wall-velocity sign, action order and normalization; use a sign schematic. +3. **Observation/objective:** forces and six velocity channels; define wake-signature matching and reward roles. +4. **Evaluation:** field L2 is primary independent evaluation; DTW is complementary alignment. Separate periodic phase, transient event and steady profile semantics. +5. **Evidence roles:** target/zero/controlled/constant and which chain supports capability versus interpretation. +6. **Numerical qualification:** selected benchmark checks, unresolved mismatch, configuration scope and supplement boundary. + +**Placement, tense, strength.** Put geometry/sensor/role schematic early. Display only equations reused later: Reynolds/action sign, objective, L2 and perhaps compact DTW notation. Cite methods/benchmarks at the defining sentence. CFD qualification supports selected observables, not control physics. Present for contracts, past for checks. + +**Bridge.** With contracts fixed, introduce the historical capability progression—steady seed first, then Kármán and bounded extensions—without pooling its metrics. + +**Anti-patterns.** Configuration/hash dump; standard-PPO pseudo-code; detached validation chapter; equations never reused; “all parameters are in table”; repeated definitions; silent Re/action shifts. + +### 3.3 Capability/results opening and Fig. 1 + +**Observed.** Rabault, Paris, Xia and Wang establish a reference case and comparator before extending scope. The first results figure combines a quantitative headline and physical view. Variation/failure enters where it changes the headline. + +**Recommended four-to-five-paragraph sequence.** + +1. **Viewing contract.** State Fig. 1’s question: can learned actuation approach declared targets across distinct tasks? Name comparator and metric roles without repeating Methods. +2. **Short steady discovery seed.** Introduce the historically first steady-rotation result in one compact comparison. Establish only discovery chronology and visible capability; defer its separate contract, theory and physical synthesis to the later steady return. +3. **Headline Kármán.** Read target, zero and controlled panels as one comparison; state L2 field matching first and DTW as complementary signature alignment. Explain why Kármán becomes the deep case. +4. **Kármán → vortex and cloak → illusion.** Mark the changed temporal or target contract and give only bounded, case-specific capability here; full cross-case analysis returns after the Kármán block. +5. **Scope/selection.** Show one degradation/failure and n/seed status; distinguish the early progression preview from later analytical sections. + +**Placement, tense, strength.** Place Fig. 1 at paragraph 1. Every number needs case, chain, comparator and metric semantics. Past for training/evaluation; present for figure reading. Prefer `reduces the declared field error`; breadth is demonstration, not generality. + +**Bridge.** With the early progression established under already declared contracts, select Kármán for deep performance and interpretation. + +**Anti-patterns.** Caption-like panel narration; gallery; one score across periodic/transient/steady; DTW as field equivalence; hidden failures; Legacy/V5 pooling; illusion image as target-tracking proof. + +### 3.4 Kármán performance + +**Observed.** Reference-case sections start with baseline and headline metric, move from scalar/time traces to fields and only then interpretation. Paris and Mao pair global performance with spatial evidence; comparator limits appear locally. + +**Recommended four paragraphs.** + +1. **Exact test:** chain, case/Re convention, roles/comparator, window and seed/selection status. +2. **Signature result:** reward components and DTW as optimized/reward-adjacent evidence, not independent validation. +3. **Field result:** L2 mean and phase evidence separately; use agreement/disagreement with DTW as a finding. +4. **Boundary:** seed dependence, phase limitation or cross-Re degradation; conclude only named-contract improvement. + +**Placement, tense, strength.** Lead with field result, not a training diary. Training/selection goes in compact inset/table. Past for computation, present for figure. Use `was accompanied by`, not `therefore produced`; `field matching improved`, not `wake restored`. + +**Bridge.** Field matching shows the result is not solely a reward proxy; it does not reveal action-law complexity. + +**Anti-patterns.** Chronological training log; all seeds as narrative protagonists; best checkpoint conflated with retained policy; low DTW as full-field identity; no interpretive handoff. + +### 3.5 SR interpretation + +**Observed.** Gautier isolates an explicit law, then its dynamic behaviour and benchmark. Cornejo Maceda compares simpler/richer spaces and tests the averaged law. Executable comparison—not formula complexity—is primary. + +**Recommended five paragraphs.** + +1. **Question/estimand:** SR is an observation-to-action surrogate in the Legacy plant, not a field-causal model. +2. **Recovery contract:** causal pairing, symmetry mapping, formula identity and closed-loop CFD arbitration; library/search detail goes to supplement. +3. **Law:** display once and immediately translate order, sign and persistent rear counter-rotation. +4. **Closed loop:** PPO/SR/zero under the same window; offline fit is diagnostic, closed-loop wake performance is arbiter. +5. **Term tests:** persistent rear term is largest tested; feedback is smaller but non-zero. State fixed-window, parent-relative, non-necessity limits. + +**Placement, tense, strength.** Formula before performance figure. Failed gates/weaker deletions sit beside successes. Past for fitting/testing; present for formula meaning. Use `surrogate`, `largest tested contribution`; avoid `mechanism`, `necessary`, `sufficient`, `unique`, `governing law`. + +**Bridge.** Term ranking does not show how much field-level improvement the persistent component accounts for. + +**Anti-patterns.** Stage/package handoff; coefficient inventory; offline RMSE as control success; hidden imposed symmetry; deletion called causal ablation; positive Illusion SR import. + +### 3.6 Mean/dynamic decomposition and CCD + +**Observed.** Loiseau moves from predictive success to spatial reconstruction; Deng uses model failure to justify refinement. The estimand and comparison precede modes; prose states the new inference each representation permits. + +**Recommended six paragraphs.** + +1. **Question/four roles:** target, zero, constant and DRL means on exact ROI/mask/window. +2. **Mean comparison:** fields and scalar errors before percentages; then additive error-difference ledger. +3. **Mean limit:** `accounts for measured error reduction` is an estimand statement, not causality, energy share or momentum restoration. +4. **Residual definition:** separately centred cycle-template residual; constant/DRL cycles are not paired counterfactuals. +5. **CCD result:** rank/subspace stability, action coordinates and phase reconstructions as **action-correlated correction-field modes**; no response time or causal direction. +6. **POD comparison/boundary:** near-equivalent subspaces mean CCD adds action-coordinate association, not superior/unique field modes; single lineage remains explicit. + +**Placement, tense, strength.** Mean figure precedes residual-mode figure. Put error identity, residual and (only if interpretively needed) CCD operator immediately before their figures. Past for construction, present for figure. Use `separates`, `organizes`, `is action-correlated`, `accounts for measured difference`; avoid `explains`, `drives`, `responds`, `energy captured` for CCD strengths, and `unique CCD modes`. + +**Bridge.** Kármán supports a persistent mean contribution plus smaller action-correlated residual; return later to what this bounded organization does and does not connect. + +**Anti-patterns.** Linear algebra first; mode gallery; singular strengths as explained variance; 93.42% without errors/ROI/window; SR law equated to CCD left functions; shared parent called independent triangulation. + +### 3.7 Cross-case extensions + +**Observed.** Xia’s failure-to-fix chronology and Paris/Wang’s harder-case sections change one difficulty at a time, restate the needed comparator and qualify breadth according to dedicated tests. + +**Recommended three modules.** + +1. **Kármán → vortex:** phase cycle becomes event/relative-offset semantics. State what remains fixed and use one case-specific result; never average event snapshots into phase metrics. +2. **Cloak → illusion:** define non-zero target matching, show bounded PPO capability and explicitly separate negative Illusion SR. +3. **Illusion → erase:** change target/reference again; use mean semantics only with exact roles, otherwise mark visual demonstration or omit. End with failure envelope. + +**Placement, tense, strength.** One question, comparator, principal result and limit per module. Past for demonstrations; conditional for transfer. Use `extends the objective`, not `generalizes`. + +**Bridge.** Execution accommodates changed temporal/target contracts, but the Kármán control-skeleton interpretation does not transfer with them. + +**Anti-patterns.** One prose row per case; common efficiency bar for incompatible metrics; n=1 called robustness; positive Illusion SR; Kármán SR/CCD used to interpret vortex/erase. + +### 3.8 Steady context, physical synthesis and theory limits (later return) + +**Observed.** Cornejo Maceda proceeds from simpler steady actuation to feedback; Deng mirrors physical chronology; Li puts stability first because it changes later choices. Theory earns early placement only when it supplies a baseline or constraint used later. + +**Two-pass recommendation.** The early capability section has already introduced steady discovery/result as a short narrative seed, preserving the historical physics logic `steady → Kármán`. This later full section returns only after Kármán performance, SR, mean/dynamic+CCD analysis and cross-case extensions. Its job is retrospective contextualization of the near-constant core, not chronological placement before the Kármán analysis. + +**Recommended four-to-five-paragraph sequence.** + +1. **Return and scope.** Recall the early steady seed in one sentence, then state why the full analysis returns here: to contextualize the near-constant Kármán core without treating the separate steady chain as proof of periodic-controller mechanism. +2. **Contract/result.** Separate V5 free-slip `Re_D=50`, accepted sign, spin ratio, comparator and settling-qualified low-deficit endpoint. +3. **Physical description.** Gap-facing motion/base-bleed or gap-jet-family compatibility as observation/hypothesis; not boat-tail or closed momentum pathway. +4. **Theory constraint.** Give only the shortest outer-reference equation/sign result. Place circulation-sign conflict and rotating-no-slip limitation beside the attractive comparison. +5. **Synthesis export.** Relate the returned steady evidence retrospectively to the already established Kármán near-constant core, transferring only recurrence/magnitude context—not metric equality, plant equivalence, stability or mechanism. + +**Placement, tense, strength.** Contract/sign schematic precedes field interpretation. Present for mathematics; past for computed endpoint; conditional for physical chain. Use `compatible with`, `provides context`, `constrains`; avoid `explains`, `validates the skeleton`, `optimal`, `stable`, `restores momentum`. + +**Bridge.** The later steady return closes the historical loop: it supplies a compatible endpoint and sign-constrained context for the already established Kármán near-constant core, then hands the bounded synthesis to the qualitative experiment and conclusion. + +**Anti-patterns.** Detached theory chapter; unvalidated MFS spectacle; failed sign route delayed to Discussion; V5 steady metric transferred into Legacy; universal skeleton pre-announced. + +### 3.9 Qualitative open-loop experiment + +**Observed.** Experimental JFM papers define facility, observable and actuation before results (Gautier); numerical papers place realizability caveats near constrained findings (Mao). A qualitative demo cannot inherit quantitative CFD wording. + +**Recommended two-to-three paragraphs.** + +1. **Purpose/apparatus boundary:** establish deployability and open-loop operation; give conditions needed to interpret media. +2. **Observation:** neutral streakline/shedding description tied to raw-media panel and trial identity. +3. **Limit/next test:** no synchronized calibrated PIV/force validation; low-speed/background issue; requirements for quantitative validation. + +**Placement, tense, strength.** Caption carries provenance, scale/frame/condition. Past tense; use `qualitative`, `open-loop`, `feasibility`. No efficacy percentage, field match, force reduction or experimental validation from dye. + +**Bridge.** Experiment establishes qualitative deployability; interpretation and quantitative evidence remain chain-specific computational results. + +**Anti-patterns.** Build diary/hardware promotion; image aesthetics as evidence; unregistered CFD overlay; thermal convection declared sole cause; open-loop called policy validation. + +### 3.10 Discussion and conclusion + +**Observed.** Discussion is integrated; the final section synthesizes rather than replays. Deng uses a phenomenogram, Cornejo Maceda closes across a hierarchy, Li separates physics/control findings. Conclusions add no new result and shift to conditional future work. + +**Recommended discussion sequence.** + +1. Assemble steady context, SR term ranking and mean/dynamic evidence while naming different chains/estimands: `compatible observations`, not independent proof. +2. Define dynamic component: smaller, phase-organized, represented by action-correlated correction-field modes; not causal response or unique CCD subspace. +3. Define envelope: periodicity removal, objective extension, seeds/cross-Re degradation, negative Illusion SR, failed theory and qualitative experiment. +4. Name only decisive tests that change claim ceiling: matched interventions, independent parents, same-plant field comparison, closed budgets, synchronized experiment. + +**Recommended conclusion sequence.** + +1. Restate question and named scope, not methods. +2. Answer in evidence order: capability → L2 field matching → persistent SR/mean contribution → smaller action-correlated residual. +3. State strongest boundary and one decisive future test; return to cloak/illusion as declared matching, not invisibility. + +**Placement, tense, strength.** No new figures, equations, citations or numbers. Past/present perfect for work; present for bounded conclusion; conditional/future for outlook. Use `supports a control-skeleton interpretation under the declared Kármán contract`. Avoid `proves`, `mechanism`, `universal`, `robust`, `optimal`, `experimentally validated` and generic “opens new avenues”. + +**Anti-patterns.** Abstract replay; bullet per package; limitations first introduced here; unsupported applications; every caveat converted into future work; three non-equivalent analyses said to validate one mechanism. + +## 4. Bridges and integrated discussion + +Use bridges as logical transforms: + +- Introduction → contracts: convert the gap into definitions and estimands needed for every later comparison. +- Contracts → capability/progression: ask what control can do under named, non-pooled contracts. +- Within capability: use a short steady discovery/result seed first, then Kármán, vortex and illusion; this preserves historical `steady → Kármán` logic without placing the full steady analysis early. +- Capability → Kármán performance: select Kármán as the sole deep case and move from visual result to independent field matching. +- Performance → SR: success becomes an action-complexity question. +- SR → mean/dynamic+CCD: term ranking becomes field-accounting and residual-organization questions. +- Kármán deep block → cross-case extensions: change one task dimension without transferring the Kármán interpretation. +- Extensions → later steady/theory return: revisit the early steady seed to contextualize the now-established near-constant core and expose theory limits. +- Steady synthesis → experiment: move from computational interpretation to bounded physical deployability. +- Experiment → conclusion: separate feasibility from quantitative/causal evidence. + +Within each result subsection use: + +`observation → comparator → physical reading → alternative/limit → consequence`. + +Cite literature at the physical reading/comparison, not decoratively after a number. Put the most dangerous limitation beside the claim it limits. Do not rely on final Discussion to repair upstream overstatement. + +## 5. Tense, strength and compression + +- **Present:** definitions/equations, what a figure shows, bounded interpretation. +- **Past:** training, simulations, measurements and obtained outcomes. +- **Present perfect:** development of literature, sparingly. +- **Conditional/future:** hypotheses, transfer, experiment and decisive tests. + +**Claim ladder** + +- Green: `defines`, `shows`, `reduces the declared error`, `passes the stated gate`, `is lower than`. +- Amber: `is consistent with`, `organizes`, `accounts for measured error difference`, `is action-correlated`, `provides context`, `motivates a control-skeleton interpretation`. +- Red without new evidence: `causes`, `mechanism`, `necessary/sufficient`, `restores momentum`, `stable`, `optimal`, `robust/general`, `independently validates`, `experimentally validates`. + +**Compression/anti-AI rules** + +1. One paragraph, one argumentative job; first sentence states it. +2. One principal figure claim per paragraph; secondary panel details stay in caption. +3. A number must change the inference or move to table/supplement. +4. Define each acronym once; do not rename CCD modes for variety. +5. Use concrete subjects (`registered field error`, `fixed-law deletion`) rather than `the results`. +6. Delete throat-clearing: `It is worth noting`, `Interestingly`, `As can clearly be seen`, `In order to`. +7. Avoid repeated three-item lists, identical paragraph templates, `not only…but also`, and conclusions that restate headings. +8. Delete artifact inventories, package histories and status-ledger prose from narrative; retain them in briefs/tables/supplement. + +## 6. Practical Round-3 section-agent prompt + +```text +Prepare the Round-3 evidence brief for [SECTION NAME] of +“Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball”. +Do not draft manuscript prose. + +Section question: [ONE PHYSICAL QUESTION] +Answer ceiling: [ONE GREEN/AMBER SENTENCE] +Imports from earlier sections: [DEFINITIONS/EVIDENCE] +Exports to later sections: [ESTABLISHED FACT/NEXT QUESTION] +Word/figure/equation budget: [BUDGET] + +Use repository authority and Round-1/Round-2 dossiers. Keep chain, case/seed/role, +Reynolds convention, comparator, metric/estimand, ROI/mask/window and status explicit. +External literature supports narrative/method precedent only, never internal results. + +Terminology: +- concept: hydrodynamic cloaking / hydrodynamic illusion; +- execution: wake-signature matching; +- evaluation: field matching, L2 primary and DTW complementary; +- interpretation: control skeleton; +- dynamic fields: CCD and “action-correlated correction-field modes”. + +Produce: +1. Section question and bounded one-sentence answer. +2. Paragraph-function map. For each paragraph give opening move, claim/definition, + exact evidence/comparator, figure/equation/citation placement, local limitation, + and bridge. +3. Green / amber / prohibited-red claim ladder. +4. Figure/table/equation contracts: what each proves and does not prove. +5. Literature-use cards: exact identity, DOI when available, + full-PDF/full-report/snippet status; separate observed style from recommendation. +6. Cross-section imports/exports and final bridge function (not polished prose). +7. Anti-pattern audit: index/report/package-handoff language, metric pooling, + method silos, caption narration, generic AI prose, delayed limits, overclaiming. +8. Only genuine drafting blockers; no general wish list. + +Required rhetorical sequence: +[PASTE THE RELEVANT SECTION SEQUENCE FROM THIS GUIDE] + +Frozen ordering check: +- The early capability/progression module introduces steady discovery/result first as a + short narrative seed, then Kármán, vortex and illusion capability. +- The full steady context/physical synthesis/theory-limits module is later: after the + Kármán deep-analysis and cross-case extension modules. +- Preserve the historical physics logic steady → Kármán, but do not describe the full + steady/theory analysis as physically or textually placed before Kármán. + +Do not invent quotations, page counts, citations, numbers or artifacts. Label sourced +fact, bounded observation, interpretation, historical/negative result and open question. +``` + +## 7. Strongest operational findings + +1. Draft section interfaces—question, answer ceiling, imports, exports and bridge—before sentences. +2. Start results with a comparator, not a method. +3. Use steady in two passes: an early discovery/result seed preserves historical `steady → Kármán` logic; the full steady/theory analysis returns only after Kármán depth and cross-case extensions. +4. Keep capability broad but interpretation asymmetric: only Kármán receives SR/mean-dynamic/CCD depth. +5. Make L2 carry field claims; DTW remains complementary signature evidence, never field equivalence, delay or causality. +6. Put one visible caveat beside every major result. +7. Use exactly `action-correlated correction-field modes`; do not imply response, authority or CCD superiority. +8. Use failed routes (theory sign conflict, mean/phase mismatch, negative Illusion SR, experiment limits) to define the claim boundary and next test. +9. End sections with scientific questions, not “Section X presents…”. +10. Run an anti-index pass before drafting: narrative must not read like artifact inventory, report, package handoff or generic AI synthesis. + +## 8. Provenance + +Undermind orientation preceded workspace access. The ten named papers were read at full-PDF level for rhetorical patterns; relevant Round-1/Round-2 repository dossiers were read as full reports. No new deep search, CFD, training, experiment analysis or Undermind mutation was performed. Existing files and immutable evidence packages were not modified. diff --git a/docs/JFM_WYQ/ROUND2_TOP_DOWN/README.md b/docs/JFM_WYQ/ROUND2_TOP_DOWN/README.md new file mode 100644 index 0000000..7677e27 --- /dev/null +++ b/docs/JFM_WYQ/ROUND2_TOP_DOWN/README.md @@ -0,0 +1,36 @@ +# Round 2 — Top-Down JFM Design + +## 目标 + +Round 2 基于 Round 1 的全部 dossiers 与 coverage audit,进行自上而下的 JFM manuscript 设计。目标是明确: + +- manuscript title; +- physics narrative; +- section hierarchy; +- approximate text / figure allocation; +- main-text / supplement boundary; +- evidence dependencies。 + +本轮不是写 manuscript prose,而是建立可审计的论文结构、物理叙事和证据依赖框架。 + +## 预定输出 + +1. `01_PHYSICS_NARRATIVE_AND_OUTLINES.md` +2. `02_JFM_STRUCTURE_AND_SPACE_BENCHMARK.md` +3. `03_EVIDENCE_STRESS_TEST.md` +4. `04_TOP_LEVEL_SYNTHESIS.md` +5. `05_REVISED_STRUCTURE_FREEZE.md` — author-ratified revision and Round-3 structure handoff +6. `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` — controlling chapter-level JFM style input for Round 3 + +## 工作约束 + +- `04_TOP_LEVEL_SYNTHESIS.md` 必须回读 Round 1 的全部 dossiers,以及关键 package authority;不得只依据摘要或二手汇总。 +- 保留并明确区分 Legacy / V5。 +- 保留 case-specific metrics,不将个案指标无依据地泛化为普适结论。 +- 明确 claim boundaries:区分已被证据支持的主张、条件性主张、待验证主张与不应提出的主张。 +- 每一项关键结构或叙事选择都应能追溯到相应的 evidence dependencies。 + + +## Author-ratified freeze (2026-08-10) + +Round 3 is jointly controlled by `05_REVISED_STRUCTURE_FREEZE.md` for manuscript structure and `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` for chapter-level JFM style, read together with the evidence dependencies in `04_TOP_LEVEL_SYNTHESIS.md`. It records the provisional frozen title, terminology and metric hierarchy, corrected steady → Kármán → vortex → illusion/erase → experiment progression, revised section/space allocation, and the section/module-based Round-3 handoff. Where it conflicts with recommendations in `01`–`04`, the older recommendation is retained as provenance but marked superseded; evidence status and repository authority are unchanged. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MASTER_AGENT_PROMPT.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MASTER_AGENT_PROMPT.md new file mode 100644 index 0000000..f0494fc --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MASTER_AGENT_PROMPT.md @@ -0,0 +1,29 @@ +# Round 3 Master Agent Prompt + +Use this reusable prompt for one assigned module. Replace every bracketed field before dispatch. + +## Prompt template + +You are the Round-3 section agent for **[MODULE ID — MODULE FILENAME]** in *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball*. + +**Assigned scope:** [NON-OVERLAPPING SECTION QUESTION]. **Bounded answer ceiling:** [ONE GREEN/AMBER SENTENCE]. **Paragraph target and space:** [TARGET]. **Imports:** [DEFINITIONS, EVIDENCE, BRIDGES]. **Exports:** [DEFINITIONS, RESULT, NEXT QUESTION]. **Relevant figures/equations/tables:** [LIST]. + +Read before drafting: the Round-2 freeze and style guide; relevant Round-1 dossiers; and relevant current package authority documents/manifests. External literature supplies narrative/method precedent only, never internal results. Do not infer facts from memory. Preserve Legacy/V5, solver, geometry, Re convention, case/seed/role, comparator, metric/estimand, ROI/mask, window and artifact boundaries. + +Use fixed terminology: concept `hydrodynamic cloaking/illusion`; execution `wake-signature matching`; evaluation `field matching`, spatial L2 primary and DTW complementary/case-specific; interpretation `control skeleton`; CCD `action-correlated correction-field modes`, descriptive/noncausal. Distinguish pipeline `Level-2/Level-3` and `Stage-3 short/standard gate` from spatial L2; never write `L2 gate` for validation level. Preserve positive SR Kármán/cloak only, negative Illusion SR, claim-free OID, qualitative experiment and compact CFD. + +## Deliver exactly + +1. Section question and bounded answer. +2. **Layer 1 — narrative:** prose-like paragraph drafts/maps with a clear argumentative job, short source tags (for example `[R1-SR; authority]`), substantive transitions, and local caveats. Do not insert giant inline `Evidence contract:` blocks, package-path inventories or bold template labels into the narrative. +3. **Layer 2 — local provenance:** immediately after the narrative, provide compact paragraph notes or a claim-to-evidence ledger. For each quantitative/physical claim record exact source/artifact, chain, solver/geometry, case/seed/role, Re convention, comparator, metric/estimand, ROI/window, status, and whether `artifact-audit deferred`. +4. Figure, equation and table contracts: role, evidence/artifact, caption-level limitation, and what each does not establish. +5. Claim ladder: supported/green, bounded/amber, prohibited/red; imports, exports, final bridge, genuine blockers, and concise coverage ledger (`read`, `mapped`, `not-covered`, `external-inaccessible`, with reasons and evidence status). +6. Cross-module near-collision check: for numerically similar results, compare role acquisition, role set, ROI/domain, mask, weighting/normalization and window; classify them as `same estimand`, `related diagnostic` or `different estimand`. Prohibit arithmetic combination and replication/validation/agreement/triangulation wording unless exact authority licenses it. +7. Anti-index/anti-AI audit, including metric pooling, citation invention, silent chain transfer, redundancy, source-path dominance, paragraph/sentence overload, and repeated mega-paragraphs. + +Authority-led hidden/external artifact deferral is not automatically a blocker. If authority docs/manifests explicitly bind the artifact and exact claim/number without conflict, record `artifact-audit deferred` and continue. Block only when the missing leaf/raw artifact is needed to resolve a conflicting authority, identify an exact role/comparator/window, substantiate a proposed number/panel, or answer the section question. Do not demand universal hash recomputation. + +Respect scope interfaces: contextual facts from another module may be one bridge sentence or export, not a duplicate result block. In particular, SR must not absorb full steady results; field/CCD must not reproduce SR derivation; contracts must define contracts, not become results. + +Edit **exactly** `[OUTPUT FILE]` and no other file. Do not modify Round-1/2, source code, archives or evidence packages. Report inspected sources and deferrals. This is a first pass: do not label it manuscript-ready; await parent audit and targeted revision. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md new file mode 100644 index 0000000..b6686d6 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md @@ -0,0 +1,25 @@ +# Round 3 Module Interface Ledger + +Coordinator-owned dispatch order. Each module writes only its assigned file and imports/exports definitions explicitly. Statuses are `planned`, `first-pass`, `revise`, `second-audit`, `ready`, or `blocked`. + +| Order | Module / output filename | Primary question and dependency | Export to | Status | Coordinator audit note | +|---:|---|---|---|---|---| +| 1 | `03_CONTRACTS_METRICS.md` | What are the plant, chain, action, role and case-specific evaluation contracts? | all modules | `ready` | Second-audit PASS; chain, role, metric and Level/Stage interfaces are reconciled. | +| 2 | `04_KARMAN_PERFORMANCE.md` | Under the Legacy Kármán contract, what does independent field matching show? | 05, 06, synthesis | `ready` | Second-audit PASS; DTW orientation and M04/M06 different-estimand boundary are reconciled. | +| 3 | `05_KARMAN_SR_LAW.md` | What executable SR structure is supported, and what do bounded deletions test? | 06, 08, conclusion | `ready` | Section text ready; standardized PPO/SR/Zero panel remains optional/dependency-gated and must be dropped unless exact role artifacts are bound. | +| 4 | `06_KARMAN_FIELD_CCD.md` | What do mean/dynamic estimands and CCD action-correlated correction-field modes organize? | 08, 10 | `ready` | Second-audit PASS; corrected four-role estimand and M04 non-equivalence boundary are reconciled. | +| 5 | `07_CROSS_CASE_EXTENSIONS.md` | What changes across vortex, Illusion and Erase under distinct contracts? | 08, 10 | `ready` | Second-audit PASS; ready for Wave C imports; Vortex event-L2 and Erase quantitative panels remain dependency-gated/blocked, and Illusion field L2 remains conditional. | +| 6 | `08_STEADY_SYNTHESIS.md` | What bounded steady context can be related retrospectively to Kármán? | 09, 10 | `ready` | Second-audit PASS; text ready for Wave C imports; optional steady/MFS/evidence-map panels are dependency-gated and nonblocking. | +| 7 | `01_INTRODUCTION.md` | What concept, gap and bounded contribution frame the paper? | 02, all | `ready` | Second-audit PASS; five-paragraph JFM-facing introduction ready, three claim levels and asymmetric cross-case scope reconciled, exact literature identities/read levels retained, and Fig. 1 correctly bridged to the capability section. | +| 8 | `02_CAPABILITY_PROGRESSION.md` | How does steady discovery → Kármán → vortex → illusion/erase establish capability breadth? | 04, 07 | `ready` | Second-audit PASS; bounded progression text ready, Kármán dominant, steady q_ctl/q_in contract corrected, Vortex/Illusion roles bounded; raw/redrawn Fig1 panels remain artifact-dependency-gated and optional Re400 marker is subordinate/drop-first. | +| 9 | `09_EXPERIMENT_AUTHOR_INTERFACE.md` | What qualitative open-loop experiment interface is reserved for Frank? | 10 | `ready` | Second-audit PASS as author interface; ready for Frank/M10 imports, but final prose and any experiment figure remain blocked by the author-supply/raw-provenance gate. | +| 10 | `10_LIMITATIONS_CONCLUSION.md` | What is the integrated claim ceiling and decisive next test? | final audit | `ready` | Second-audit PASS; three claim levels separated (named cross-task capability, Legacy Kármán-only independent field matching, bounded Legacy Kármán control skeleton); M09 imported; final experiment prose/panel remains author-provenance-gated. | +| 11 | `11_FINAL_CONSISTENCY_AUDIT.md` | Are terminology, chains, metrics, bridges, provenance and redundancy consistent? | manuscript handoff | `ready` | Final consistency audit PASS for author manuscript synthesis; all Modules 01–10 are text-ready under the fixed claim ladder. Remaining REVISE items are assembly-stage deduplication/ownership edits; BLOCK items are optional panel/artifact or author-provenance gates and do not block bounded text. | + +## Coordinator-owned near-collision interface note + +Although the standardized PPO and corrected CCD mean errors are numerically close and share the same nominal x extent, they arise from different role acquisitions, retained windows, masks and quadrature/normalization contracts; they are separate estimands, not replication or validation, and are not combined arithmetically. + +## Interface rules + +The coordinator records imported definitions and exported claims after each audit. No export may exceed the source module's claim ceiling or cross Legacy/V5, periodic/transient/steady, or capability/interpretation boundaries without explicit authority. A `second-audit` may be conditionally passed, but `ready` requires imported interfaces to be reconciled. Optional figure dependencies do not block section text unless the panel or claim is retained; missing artifacts, exact roles or unresolved conflicts otherwise become blockers, not inferred content. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_QUALITY_GATE.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_QUALITY_GATE.md new file mode 100644 index 0000000..beda9b7 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_QUALITY_GATE.md @@ -0,0 +1,29 @@ +# Round 3 Quality Gate + +The parent coordinator assigns one status per module: **PASS**, **REVISE**, or **BLOCK**. `PASS` means ready for a second audit, never final manuscript approval. Only after the second audit may the coordinator mark a module `ready`. + +## First-pass audit protocol + +Before revising a module, classify each defect as **systematic prompt defect** (also observed or likely in other modules) or **module-specific defect** (local evidence, scope or reasoning problem). Update the rule/master prompt/quality control first for systematic defects, then issue targeted revisions to affected modules. Do not conceal a control-plane defect as an agent failure. + +## PASS checks + +- [ ] Two-layer delivery: readable prose-like paragraph drafts/maps with short source tags first; compact local paragraph notes or claim-to-evidence ledger immediately afterward. Full provenance is local and traceable without giant inline contract blocks, package-path dumps, bold template labels or source/status language dominating the argument. +- [ ] Paragraph cadence is readable: one argumentative job per paragraph, substantive bridges, reasonable sentence/paragraph load, and observation → comparator → physical reading → limit → consequence where applicable. Flag repeated mega-paragraphs or overloaded sentences; do not use rigid word-count automation. +- [ ] Reads and names the controlling Round-2 freeze/style guide, relevant Round-1 dossiers and current package authorities; ledger distinguishes `read`, `mapped`, `not-covered`, `external-inaccessible` with reasons. +- [ ] Every number and physical claim has exact provenance: authority/artifact, Legacy/V5 chain, solver/geometry, case/seed/role, Re convention, comparator, metric/estimand, ROI/window and status. +- [ ] Authority-led hidden/external artifacts explicitly bound by conflict-free authority are marked `artifact-audit deferred`, not automatically blocked. BLOCK applies only when the missing artifact is necessary to resolve authority conflict, identify exact role/comparator/window, substantiate a proposed number/panel, or answer the section question. +- [ ] Distinguishes pipeline `Level-2/Level-3` or `Stage-3 short/standard gate` from spatial L2 field-error metric; no validation level is called an `L2 gate`. Spatial L2 remains primary for field matching; DTW is complementary/case-specific, with no silent metric pooling or phase relabelling. +- [ ] Enforces scope interfaces: bridge/context is brief; SR does not duplicate full steady results; field/CCD does not duplicate SR derivation; contracts do not become a results section. +- [ ] Runs a near-collision check for numerically similar cross-module results: compare role acquisition, role set, ROI/domain, mask, weighting/normalization and window; classify `same estimand`, `related diagnostic` or `different estimand`. Prohibit arithmetic combination and replication/validation/agreement/triangulation wording unless exact authority licenses it. +- [ ] Defines figure/equation/table roles and caption limits; states imports, exports, section bridge, conflicts, non-claims and genuine blockers. +- [ ] Uses fixed terminology and claim ceiling: positive SR Kármán/cloak only; negative Illusion SR; descriptive/noncausal CCD action-correlated correction-field modes; claim-free OID; qualitative experiment. +- [ ] Passes anti-index and anti-AI checks: no inventory/package handoff/card stack, generic prose, caption narration, citation/number/artifact invention, or delayed limitations. + +## REVISE + +Use when evidence is traceable but narrative cadence, layer separation, style, interfaces, terminology, redundancy, provenance, local caveats or exact metric semantics are incomplete. Return targeted paragraph-level prompts, not a general wish list. Re-audit after revision. + +## BLOCK + +Use when a controlling source was not read without a justified ledger entry, an authority conflict affects the answer, a required artifact/role is absent, a number lacks provenance, Legacy/V5 are merged, metrics are pooled, or the draft requires unsupported causality/mechanism/generalization. An authority-led artifact deferral alone is not a blocker when its claim and role are explicitly bound without conflict. Preserve the blocker; do not fill it from memory. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_WAVE_A_COORDINATOR_AUDIT.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_WAVE_A_COORDINATOR_AUDIT.md new file mode 100644 index 0000000..35a4913 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/00_WAVE_A_COORDINATOR_AUDIT.md @@ -0,0 +1,90 @@ +# Wave A independent coordinator audit + +## Scope, gate and overall disposition + +This audit read in full the revised Round-3 drafting rule, master prompt, quality gate and interface ledger; the Round-2 revised structure freeze and section-level style guide; and current revised Modules 03–06. Current authority was consulted only for two concrete interface questions: `wake_l2.py` and the corrected CCD contract/results for the near-colliding field estimands, and the frozen SR pipeline for July formula-parent versus August standardized-role windows. Evidence status is therefore `read`, not independently recomputed or universally artifact-audited. Working memory was used only as a scope warning and did not establish a result. + +**Gate verdicts:** Module 03 — **PASS**; Module 04 — **REVISE**; Module 05 — **PASS, conditionally ready after ledger reconciliation**; Module 06 — **REVISE**. No true scientific blocker remains for the bounded text. Wave B **may begin now** because the core chain, role, metric, SR and CCD interfaces are stable; optional field or standardized PPO/SR/zero panels remain dependency-gated. + +| Module | Narrative | Provenance | Scope / claim ceiling | Interface | Gate | +|---|---|---|---|---|---| +| 03 Contracts/metrics | Clear six-job cadence; compact qualification | Exact local ledger and honest deferrals | Correctly defines rather than reports results | Canonical exports are usable verbatim; V5 signs are explicitly non-Legacy; Level/Stage is distinct from spatial L2 | **PASS** | +| 04 Kármán performance | L2-first and readable, but one DTW sentence is internally ambiguous | Strong role/ROI/window ledger; target-hash distinction retained | Legacy principal, V5 secondary; no pooling or causal claim | Imports M03 correctly; export to M06 needs an explicit non-equivalence warning | **REVISE** | +| 05 Kármán SR law | Correct five-step argument and local limits | Formula, deployment and deletion contracts are traceable; leaf audit honestly deferred | Kármán/cloak only; deletion is not causal ablation; no positive Illusion transfer | Correctly separates July formula-parent DTW/deletion from August same-protocol roles; no same-protocol PPO/SR/zero values invented | **PASS** (conditional `ready`) | +| 06 Field/CCD | Mean→share→residual→CCD→POD order is strong | Exact corrected authority identities, roles, mask, window and lineage | Descriptive/noncausal; no pairing, energy share, mechanism, OID or superiority claim | SR/CCD separation is correct, but M04 near-collision is not explicitly reconciled and “spatial-L2 context” is too loose | **REVISE** | + +## Exact cross-module interface matrix + +| Producer | Exact export | Importers and permitted use | Reusable verbatim wording | +|---|---|---|---| +| M03 | Legacy and V5 are separate executable chains; chain-specific plant, body/action/Re, calibration, role, comparator, metric and window | M04–06; contracts only, never numerical continuation | “Legacy and V5 define separate executable evidence chains; never pool their numbers or imply numerical continuation/equivalence.” | +| M03 | V5 `(front, top, bottom)`, `omega=-(12a+b)U0/R`, zero bias, weight-0.1 smoothing; Legacy `(front, upper, lower)`, `alpha=omega/U0`, `Re_D=Re_code/2` | M04–06; Legacy modules import only the Legacy branch | “The V5 map does not apply to Legacy SR.” | +| M03 | Spatial L2 primary; DTW complementary/signal-level/case-specific; periodic mean, phase8, event, mean-field and steady estimands distinct | M04 owns standardized PPO field evaluation; M05 imports only the distinction; M06 defines its own corrected mean estimand | “Field matching uses spatial L2 as primary evidence and DTW as complementary, signal-level and case-specific evidence.” | +| M04 | Standardized Legacy PPO target/controlled/zero field roles; ROI `-6..+14D` from `x_s`, `|y-y0|/D<=5`; geometry guard; complete-cycle mean and independent phase8 | M05 as performance context; M06 only as a separate prior field result | “The field result is a performance arbiter for any reduced law; it does not itself identify a necessary, causal or unique action component.” | +| M05 | Canonical mapped-shared Legacy SR formula, imposed `G`, July 200/400-step formula-parent DTW, and 40-step parent-relative deletion ranking | M06 and synthesis; action-law interpretation only | “These are deletion tests, not causal ablations: they do not establish term necessity, sufficiency, mechanism, uniqueness or universal sensitivity.” | +| M05 | August Target/PPO/SR/Zero is a separate standardized `480+160` acquisition | Any direct same-protocol panel only | “Exact PPO/SR/zero comparator numbers are not asserted here unless the current role artifacts and proposed panel supply them.” | +| M06 | Corrected four-role mean ledger; exact common mask; non-paired `19x10` residual; rank-3 action coordinates; POD-equivalent tested subspace | Later synthesis only under corrected estimand | “The percentages are scalar error-difference shares, not explained variance, energy share, causal contribution or term attribution.” | + +## Numerical near-collision: mandatory reconciliation + +The Module 04 and Module 06 numbers are **different estimands**, despite their close magnitudes. Current authority does not call them replication or validation. + +- **M04 standardized PPO field metric:** three independently acquired roles (`target`, frozen-PPO `controlled`, physical `zero`); registered lattice rectangle relative to sensor station, `-6 <= (x-x_s)/D <= 14` with `x_s=800`, equivalent in x extent to `34 <= x/D <= 54`; geometry guard only, with no persisted solver-exact mask; unweighted lattice-cell RMS after division by `U0`; role-local complete-cycle means over accepted crossings, plus a separate eight-nearest-snapshot phase diagnostic. Values: `E_mean_ctl=0.0857710225`, `E_mean_zero=0.4752063239`. +- **M06 corrected CCD mean ledger:** four roles (`target`, `zero`, `constant mean`, `DRL`) in the corrected CCD acquisition/lineage; inclusive `34 <= x/D <= 54`, `|y/D| <= 5`; **exact intersection of all four solver-fluid masks**; coordinate-weighted RMS; persisted velocities already nondimensional and not divided by `U0` again; retained four-role mean window that also supports the constant comparator. Values: `E_DRL=0.0857787860`, `E_zero=0.4694352273`, `E_constant=0.1110140739`. + +The x extents coincide after substituting M04's Legacy `x_s/D=40`, which explains only geometric similarity. Role acquisitions, role set, retained windows, masks and quadrature/normalization differ. Consequently the values must **never be equated, subtracted across modules, averaged, used to compute a cross-module discrepancy, or described as replication, validation, agreement, closure or independent triangulation**. M04's complete-cycle and phase8 results do not validate M06's corrected four-role ledger; M06's `93.42/6.58` decomposition exists only inside its own ledger. + +Recommended shared sentence, reusable verbatim in the interface ledger and later synthesis: **“Although the standardized PPO and corrected CCD mean errors are numerically close and share the same nominal x extent, they arise from different role acquisitions, retained windows, masks and quadrature/normalization contracts; they are separate estimands, not replication or validation, and are not combined arithmetically.”** + +## SR interface finding + +Module 05 passes this interface. Its July formula-parent evidence uses native Legacy DTW over Stage-3/deletion windows (40-step deletions; 200-step standard deployment; finite 400-step extension). The August standardized collector instead acquires Target/PPO/SR/Zero after 480 warm-up intervals plus 160 retained boundaries. Module 04's PPO field values come from standardized target/controlled/zero field roles and spatial estimands, not from the July formula-parent deletion contract. Module 05 explicitly avoids claiming a same-protocol PPO/SR/zero numerical comparison and makes the panel conditional on exact standardized artifacts. No formula-parent DTW or deletion delta is relabelled as M04 spatial L2. + +## Targeted revision prompts + +### Module 04 — REVISE + +1. **Layer 1 paragraph 2, first quantitative sentence:** replace the wording that says controlled normalized DTW is `0.932899` “compared with `0.625127` for zero” and then says “its native ... mean is `0.952132`.” Higher similarity appears to be favorable, so remove any ambiguity introduced by calling these “DTW” without the authority's similarity orientation. State explicitly that these are normalized/native **similarity scores** (if that is the authority label), that controlled is higher than zero, and preserve the exact formula/window. Do not call a higher value an error or distance. Mirror the same nomenclature in ledger row 31 and the DTW figure contract. +2. **Layer 1 paragraph 5 or M06 export:** append the mandatory reconciliation sentence above after the M06 handoff. This is an interface caveat, not a new result. It may instead be recorded in the coordinator ledger/audit if later synthesis is required to import it verbatim; M04 prose need not duplicate M06's values. + +`ready` condition: correct the DTW metric orientation/naming in narrative, ledger and figure contract; retain the target-hash clarification; and bind the non-equivalence sentence in the coordinator interface ledger or M04 export. No raw-field access is required for textual readiness. A redrawn field panel remains optional and artifact-dependent. + +### Module 06 — REVISE + +1. **Layer 1 paragraph 1, after the estimand definition:** insert the mandatory reconciliation sentence above, shortened only by retaining all four distinctions: role acquisition, retained window, exact mask versus geometry guard, and coordinate-weighted/already-nondimensional versus unweighted `U0`-normalized metric. Do not say the M04 and M06 errors agree. +2. **Layer 2 SR-bridge row and Interfaces paragraph:** replace generic “spatial field-error context” with “M06's corrected four-role coordinate-weighted mean-field estimand.” Add that M04's standardized PPO `E_mean`/phase8 values are separate and cannot validate or numerically close the M06 ledger. + +`ready` condition: make this estimand boundary explicit in either M06 prose plus ledger, or in M06 ledger plus the coordinator interface ledger with mandatory downstream import. All corrected authority-led array/hash deferrals remain nonblocking. Optional panel redraw becomes a blocker only if the panel is retained and cannot be sourced under its documented contract. + +## Non-revision findings + +- **M03 definitions:** no silent V5-to-Legacy sign or normalization transfer occurs. The V5 negative action map and observation-only `VecNormalize` are explicitly chain-local; Legacy uses native `alpha`, order and compatibility scaling. Pipeline `Level-2/Level-3` and `Stage-3 short/standard` are explicitly distinct from spatial L2. This module can become `ready` after this second-audit PASS is recorded; no prose edit is required. +- **M05:** narrative, provenance, scope and interface checks pass. It can become `ready` once the coordinator records reconciled M03/M04 imports and either drops the optional standardized PPO/SR/zero panel or binds exact same-protocol role artifacts before retaining it. This reconciliation can be performed in the ledger/audit without editing M05 prose. +- **Deferrals:** absent raw fields, solver-exact mask for M04, leaf-hash recomputation, model/normalizer payloads, and dense CCD arrays are correctly nonblocking where current conflict-free authority binds the exact bounded text. They become blocking only for a retained new panel, a reproducibility claim, or resolution of a concrete authority conflict. The Kan99b lift-sign issue is quarantined to affected lift claims and does not block Modules 03–06. No current true blocker remains. + +## Systematic prompt audit and Wave B decision + +One repeated defect remains across **Modules 04 and 06**: the prompt/gate requires exact local provenance but does not require an explicit **near-collision check across modules when similar numbers occupy nearby narrative roles**. Add one coordinator-level check to the master/quality/interface controls for future waves: “For numerically similar cross-module results, compare role acquisition, role set, ROI, mask, weighting/normalization and window; explicitly classify same estimand, related diagnostic or different estimand, and prohibit arithmetic or validation language unless exact authority licenses it.” This recommendation meets the two-module threshold. No broader prompt change is justified for DTW orientation, which is local to Module 04. + +**Wave A readiness:** core interfaces are stable enough for Wave B. Record M03 and M05 as second-audit PASS/`ready` under the conditions above; retain M04 and M06 as `revise` until the two targeted wording fixes are re-audited. Wave B agents may proceed using the canonical exports and mandatory non-equivalence sentence, while treating new field figures and a standardized PPO/SR/zero panel as optional dependencies rather than section-text blockers. + +## Coverage ledger + +- `read`: revised Round-3 rule/master/quality/interface ledger; Round-2 freeze/style; revised Modules 03–06; targeted current `wake_l2.py`, corrected CCD math/results, and SR pipeline authority. +- `mapped`: module-linked manifests and external artifact identities, only to understand documented bindings. +- `not-covered`: broad Round-1/package re-exploration, raw NPZ/dense arrays, universal hash recomputation, new CFD/training and external literature; unnecessary for the identified inconsistencies. +- `external-inaccessible`: authority-bound external/symlink payloads; artifact audit deferred and nonblocking for this bounded audit. + + +## Second-audit closure — targeted Modules 04 and 06 + +This closure re-audits only the targeted revisions against the ready conditions above and the updated cross-module near-collision gate; it does not reopen the first audit. + +- **Module 04 — PASS; `ready`.** The narrative, provenance row, figure contract and claim ladder now identify the normalized and native DTW quantities as similarity scores, state that higher is better, provide controlled and zero values under both contracts, and prohibit error/distance wording. The target-hash clarification remains intact. Its Module 06 export now binds the mandatory non-equivalence rule and names different acquisitions/role sets, windows, masks and weighting/normalization; it prohibits arithmetic combination and replication/validation/agreement/triangulation language. All M04 ready conditions are met. +- **Module 06 — PASS; `ready`.** Layer 1 now distinguishes the standardized PPO and corrected CCD ledgers by role acquisition/set, retained window, geometry guard versus exact four-role common mask, and unweighted `U0` normalization versus coordinate weighting on already nondimensional velocity. The provenance bridge and interface paragraph explicitly identify M06's corrected four-role coordinate-weighted mean-field estimand and prohibit using M04 `E_mean`/phase8 to validate or numerically close it. All M06 ready conditions are met. +- **Module 03 — PASS; `ready`, unchanged.** No targeted change alters its chain-local action/normalization definitions, Legacy/V5 separation, or Level/Stage versus spatial-L2 distinction. +- **Module 05 — PASS; conditional-ready state unchanged.** M03/M04 imports are now coordinator-reconciled, but a direct standardized PPO/SR/zero panel remains optional and may be retained only after exact same-protocol role artifacts, comparator values, metric and window are bound. If that panel is omitted, no prose or scientific blocker remains. + +**Remaining optional dependencies, exactly scoped:** (1) a newly redrawn M04 Legacy field panel requires raw role payload access plus manifest/hash audit; (2) a reproduced/redrawn V5 selected-policy panel requires the same-selection `best_model.zip` and matching VecNormalize artifact; (3) an M05 direct PPO/SR/zero panel requires complete standardized same-protocol Target/PPO/SR/Zero role artifacts and exact comparator values; and (4) a newly redrawn M06 figure must remain sourceable under the documented publication/data contract. These dependencies condition only retained optional panels or reproducibility/artifact-audit claims, not the bounded section text. Canonical CCD alias promotion, universal leaf-hash recomputation, M04 solver-exact-mask reconstruction and the quarantined Kan99b lift-sign issue remain nonblocking at the present claim ceiling. + +**Final Wave A disposition:** the core Modules 03, 04 and 06 are `ready`; Module 05 is conditionally ready solely on the optional direct-comparator panel decision. No true core blocker remains, the near-collision interface is closed, and **Wave A core modules are ready for Wave B**. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/01_INTRODUCTION.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/01_INTRODUCTION.md new file mode 100644 index 0000000..58e8ff1 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/01_INTRODUCTION.md @@ -0,0 +1,69 @@ +# Round 3 revised candidate — Section 1: Introduction + +**Working title:** *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball* + +**Status:** ready for coordinator second-audit closure; not manuscript approval. + +## Section question and bounded answer + +**Question.** What physical problem, literature gap and bounded contribution justify this paper without overpromising applications, mechanism or priority? + +**Bounded answer.** The paper separates three evidence levels: (a) named wake-signature or visual PPO capability across the declared Kármán, Vortex and Illusion tasks under distinct contracts; (b) independent spatial field matching only for named Legacy Kármán Re100; and (c) a bounded Legacy Kármán control-skeleton interpretation. The latter combines executable action-law evidence with a corrected four-role constant-mean comparator and a separately centred, non-paired residual organized descriptively by action-correlated correction-field modes. This does not establish linear-cloak/Navier–Stokes equivalence, a causal mechanism, universal transfer, positive Illusion symbolic regression, priority or quantitative experimental validation. + +## Layer 1 — five-paragraph near-prose draft + +### Paragraph 1 — concept and compact genealogy + +Hydrodynamic cloaking and illusion are observer-centred matching objectives. Cloaking asks a controlled body to approach a declared background or incident signature in the field or signal space seen by an observer; illusion instead asks it to approach a declared non-zero signature associated with another target. A compact genealogy runs from transformation-based and conformal optical cloaks to active exterior cloaking and non-zero-target illusion in linear field equations, with later wave analogues and active hydrodynamic proposals showing how cancellation or retargeting can be formulated under restricted assumptions (Pendry, Schurig & Smith 2006; Leonhardt 2006; Vasquez, Milton & Onofrei 2009; Ma et al. 2013; Urzhumov & Smith 2012). This history supplies vocabulary for declared references, active sources and target signatures; it does not make a linear cloak equivalent to a finite-Reynolds-number Navier–Stokes wake, nor does “cloaking” mean invisibility to every possible observer. [R1-Introduction literature] + +### Paragraph 2 — finite-Reynolds-number pinball difficulty + +The fluidic pinball makes the distinction concrete. Three interacting circular bodies generate separated shear layers, vortex shedding, symmetry breaking and multiple temporal organisations; independent rotation must modify a spatially extended wake rather than a single scalar force. The pinball therefore supplies a compact but nonlinear benchmark in which mean deficit, phase, frequency and downstream spatial organisation need not change together (Deng et al. 2020, 2021, 2022). Earlier rotating-cylinder and machine-learning control studies establish that actuation can alter separation, wake structure and force, but their objectives and observables do not by themselves answer whether a specified downstream signature has been matched (Cornejo Maceda et al. 2021; Gautier et al. 2015). The physical problem here is finite-Re wake-signature matching with limited actuation and sensing, not scalar drag optimisation relabelled as cloaking. + +### Paragraph 3 — capability and explanation gap + +Deep reinforcement learning offers a way to search this nonlinear control problem from forces and sparse downstream velocity observations. It can discover effective feedback in settings where a tractable controlled-flow model is unavailable, as shown for cylinder control and later studies of robustness, stability and partial observation (Rabault et al. 2019; Paris, Beneddine & Dandois 2021; Li & Zhang 2022; Xia et al. 2024; Wang et al. 2024). That capability leaves a scientific gap. A reward or sparse-signal similarity score establishes performance only in its declared observer space; it does not independently establish field matching, reveal which action structure survives closed-loop deployment, or explain how a persistent wake correction is organised. Adjacent active hydrodynamic stealth work and sparse-model approaches sharpen the motivation, but do not supply this paper’s rotating-pinball evidence chain or a basis for a priority claim (Ren, Wang & Tang 2021; Loiseau, Noack & Brunton 2018). The question is how to interpret learned capability without promoting policy correlation into a physical law. + +### Paragraph 4 — evidence chain needed for a bounded interpretation + +Answering that question requires linked but non-equivalent tests. The execution problem is wake-signature matching, whereas independent spatial field matching is reserved for the named Legacy Kármán Re100 comparison, with L2 primary and DTW complementary, signal-level and case-specific. The learned action must be tested as an executable closed-loop law under the same Legacy plant and action convention, rather than accepted from offline action fit alone. The corrected four-role analysis then compares a constant-role mean field with zero and DRL target errors, while a separately centred, non-paired dynamic residual is organized descriptively by action-correlated correction-field modes. These tests address distinct performance, action-law and field-role questions; they do not independently confirm one another or establish a mechanism. + +### Paragraph 5 — question, contribution, scope and bridge + +This paper asks whether named force-plus-sparse-signature control can produce hydrodynamic cloaking and illusion in the fluidic pinball, and what can be learned about the Kármán cloak without confusing capability with mechanism. Its contribution has three levels: named wake-signature or visual PPO capability across declared Kármán, Vortex and Illusion tasks; independent spatial field matching only for Legacy Kármán Re100; and a bounded Legacy Kármán control-skeleton interpretation. The interpretation is Kármán/cloak-only: Vortex and Illusion remain bounded capability demonstrations, Erase is unsupported quantitatively, positive Illusion SR is historical/negative, and any experiment is author-described qualitative, open-loop and provenance-gated. Applications are prospective only. The next section fixes the plant, action, chain, role and metric contracts; the following capability section presents the Kármán-dominant Fig. 1 progression, with no experiment. [Round-2 freeze; M02; M03–M10] + +## Layer 2 — provenance, literature identities and style recommendation + +| Paragraph | Exact identity / read level | Boundary | +|---|---|---| +| P1 | Pendry, Schurig & Smith, “Controlling Electromagnetic Fields,” *Science* 312, 1780–1782 (2006), DOI `10.1126/science.1125907`; Leonhardt, “Optical Conformal Mapping,” *Science* 312, 1777–1780 (2006), DOI `10.1126/science.1126493`; Vasquez, Milton & Onofrei, “Active exterior cloaking for the 2D Laplace and Helmholtz equations,” *PRL* 103, 073901 (2009), DOI `10.1103/PhysRevLett.103.073901`; Ma et al., “Experiments on active cloaking and illusion for Laplace equation,” *PRL* 111, 173901 (2013), DOI `10.1103/PHYSREVLETT.111.173901`; Urzhumov & Smith, “Flow stabilization with active hydrodynamic cloaks,” *PRE* 86, 056313 (2012), DOI `10.1103/PhysRevE.86.056313`. Full-PDF per R1 index. | Linear genealogy is vocabulary/method precedent only; no Navier–Stokes equivalence. | +| P2 | Deng et al., “Low-order model for successive bifurcations of the fluidic pinball,” *JFM* 884, A37 (2020), DOI `10.1017/jfm.2019.959`; Deng et al., *JFM* 918, A4 (2021), DOI `10.1017/jfm.2021.299`; Deng et al., *JFM* 934, A24 (2022), DOI `10.1017/jfm.2021.1105`; Cornejo Maceda et al., *JFM* 917, A42 (2021), DOI `10.1017/jfm.2021.301`; Gautier et al., *JFM* 770, 442–457 (2015), DOI `10.1017/jfm.2015.95`. Full-PDF per style guide. | External precedent only; no project threshold, solver, Re or result imported. | +| P3 | Rabault et al., *JFM* 865, 281–302 (2019), DOI `10.1017/jfm.2019.62`; Paris et al., *JFM* 913, A25 (2021), DOI `10.1017/jfm.2020.1170`; Li & Zhang, *JFM* 932, A44 (2022), DOI `10.1017/jfm.2021.1045`; Xia et al., *JFM* 981, A17 (2024), DOI `10.1017/jfm.2024.69`; Wang et al., *JFM* 988, A4 (2024), DOI `10.1017/jfm.2024.333`; Ren et al., *Physics of Fluids* 33, 093602 (2021), DOI `10.1063/5.0060690`; Loiseau et al., *JFM* 844, 459–490 (2018), DOI `10.1017/jfm.2018.147`. Full-PDF per R1/style records. | Capability and interpretation motivation only; unresolved `Ren19b` excluded; no priority claim. | +| P4–P5 | Round-2 freeze/style; R1 Introduction, DRL, SR, field/CCD/OID, steady/theory and metrics dossiers; current Modules 03–08, ready M09 and M10, and current authorities. Full-report/read for repositories; not independently recomputed or universally artifact-audited. | Three levels remain separate: named wake-signature/visual PPO capability across declared tasks; Legacy Kármán Re100 spatial field matching only; bounded Legacy Kármán control-skeleton interpretation. Vortex has no event L2; Illusion field L2 is conditional and Illusion SR historical/negative; Erase has no supported quantitative route; experiment is qualitative/open-loop and provenance-gated. | + +**Observed literature style.** The supplied JFM papers generally move from physical problem and comparator to evidence, interpretation and a local limitation. Deng uses physical chronology and transition to motivate refinement; Rabault and Paris reach the control gap quickly; Gautier places an explicit law beside closed-loop behaviour; Loiseau moves from sparse observations toward fuller representation. Strong words follow dedicated tests, and bridges introduce the next scientific question. + +**Manuscript recommendation.** Use that rhythm at a lower claim register: concept and gap → finite-Re difficulty → named capability and explanation gap → independent evidence chain → bounded question and bridge. Keep genealogy compact, cite around physical transitions, state dangerous limits here, reference Figure 1 prospectively without panel narration, and organize the contribution as capability, field matching and Kármán interpretation rather than a package list. + +## Figure, claim and interface contracts + +- **Figure 1:** presented in the following capability section as a Kármán-dominant progression across named contracts; it does not establish a common score, independent field matching beyond Legacy Kármán Re100, positive Illusion SR, interpretation transfer or pooled Legacy/V5 evidence. It contains no experiment. +- **Definitions next:** cloak/illusion as declared reference matching; wake-signature matching as execution; spatial L2 primary and DTW complementary. No project equations or numbers belong here. +- **Green:** named wake-signature or visual PPO capability across the declared Kármán, Vortex and Illusion tasks; independent spatial field matching only for named Legacy Kármán Re100; and bounded Legacy Kármán control-skeleton interpretation. +- **Amber:** a constant-role mean-field comparator accounts for most of the measured zero-to-DRL target-error reduction, while a smaller separately centred, non-paired residual is organized descriptively by action-correlated correction-field modes under the Legacy Kármán contract; steady is contextual. +- **Red:** linear-cloak/Navier–Stokes equivalence, all-observer invisibility, universal/causal/mechanistic/necessary/unique/optimal/robust/priority claims, positive Illusion SR, pooled chains, DTW-as-delay, causal CCD, application catalogues or quantitative experiment validation. + +## Imports, exports, bridge and coverage ledger + +**Imports:** frozen title and vocabulary; R1 literature and motivation; current Round3 controls and ready Modules 02–10, including M09’s author-described experiment/provenance gate and M10’s three-level manuscript-wide claim ladder. **Exports:** cloak/background and illusion/non-zero-target definitions; wake-signature matching; L2-primary/DTW-complementary evaluation only for the named Legacy Kármán Re100 field comparison; Kármán/cloak-only control skeleton; broad capability versus asymmetric interpretation depth. **Bridge:** declare plant, chain, action, role, Re, comparator, metric and window before comparing cases, then present Fig. 1 in the capability section. + +| Status | Coverage and reason | Boundary | +|---|---|---| +| `read` | Round3 controls/interface/Wave-A audit; Round2 freeze/style; R1 Introduction and current-document audit; ready Modules 02–10, including M09 and M10; current Confirmation Introduction; cited JFM/Confirmation material | Read directly; not independently verified or artifact-audited | +| `mapped` | Broader manifests, archive navigation and authority-linked external payload identities | Mapped only; not promoted as read evidence | +| `not-covered` | New literature search; unresolved Ren19b; raw fields/NPZ/models; new CFD/training; hashes; Figure 1 generation; quantitative experiment | Unnecessary for bounded introduction; no claims inferred | +| `external-inaccessible` | External/symlink-backed fields and hidden raw artifacts | Authority-led `artifact-audit deferred`; no raw-artifact claim made | + +## Final targeted self-audit + +The narrative retains five argumentative paragraphs and explicitly separates the three manuscript-wide levels: named wake-signature/visual PPO capability; Legacy Kármán Re100 spatial field matching; and bounded Legacy Kármán control-skeleton interpretation. The constant-role CCD comparator, non-paired residual, cross-case gaps and provenance-gated qualitative experiment are bounded without causal or action-magnitude language. Literature identities and DOI/read levels are preserved; no new result or citation was added. Figure 1 is correctly bridged to the following capability section. This final targeted revision passes the paragraph-boundary, claim-ladder, provenance and interface checks; the module is ready for coordinator second-audit closure, not manuscript approval. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/02_CAPABILITY_PROGRESSION.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/02_CAPABILITY_PROGRESSION.md new file mode 100644 index 0000000..a445550 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/02_CAPABILITY_PROGRESSION.md @@ -0,0 +1,131 @@ +# Round 3 first-pass module — Section 3: capability and progression + +**Status:** revised candidate for second audit; not self-ready and not final manuscript prose. The bounded narrative is text-ready for parent review, while raw and redrawn Fig. 1 panels remain artifact-dependency-gated. This module does not add experiment or reopen the analytical modules. + +## Section question and bounded answer + +**Question.** How should Fig. 1 and its accompanying text establish the progression from steady discovery through periodic Kármán cloaking, nonperiodic vortex response and the `075` Illusion objective extension while reserving analytical depth for Kármán? + +**Bounded answer.** Named visual and quantitative cases establish a progression in temporal dynamics and objective, while only Legacy Kármán Re100 has the full evidence intersection for deep interpretation; the figure therefore demonstrates breadth of execution under distinct contracts, not a pooled score, arbitrary-flow/generalization result or positive Illusion SR. + +## Layer 1 — readable paragraph draft/map + +### Paragraph 1 — viewing contract and figure composition + +Fig. 1 should answer a capability question before the paper turns to interpretation: can the same broad force-plus-sparse-observation execution be used for named targets whose temporal and objective contracts differ? The answer is presented as a left-to-right progression, not as a common efficacy ranking. A small steady panel supplies the historical discovery seed; the visually dominant Kármán block establishes the principal field-matching comparison; smaller Vortex and `075` Illusion panels show, respectively, an event-relative transient extension and a non-zero-target objective extension. Legacy and V5 lanes must be printed in the panel labels and caption. Each panel names its case, chain, role, comparator and metric status, and the composition contains no experiment. [R2 freeze/style; M03; M04; M07; M08] + +**Figure placement:** place Fig. 1 beside this opening paragraph. Allocate approximately 50–55% of the visual area to Kármán, with the steady, Vortex and `075` Illusion panels subordinate. Use visual juxtaposition to show the progression; do not place a common efficacy bar, pooled score, or gallery inventory beside it. + +### Paragraph 2 — short steady discovery seed + +The first capability seed is steady control: near-uniform or constant rear rotation was explored before the periodic Kármán analysis. In this opening section it should be stated only as historical discovery and visible low-deficit capability under its own steady contract, not as a temporal performance score or as evidence for the Legacy SR/CCD chain. The full V5 steady/free-slip result, accepted sign, profile metric and theory limits belong to the later steady return. This ordering preserves the physical chronology—steady discovery followed by Kármán interpretation—without allowing the early seed to pre-empt the Kármán analysis. [R1 DRL/cases; R1 steady dossier; M08] + +**Seed panel contract:** V5 steady/free-slip, accepted steady q_ctl against uniform/no-body q_in under E_inf_vector/profile status; q_blk is nonranking, and stationary/reverse views are contextual only. The panel establishes discovery chronology and a bounded visual endpoint only. It does not establish periodic phase matching, Legacy numerical continuation, mechanism, stability, optimum or pooled efficacy. + +### Paragraph 3 — Kármán headline and reason for depth + +The headline comparison is the Legacy `karman_re100` target, physical-zero and frozen PPO roles under one Legacy solver and geometry contract. Here `Re100` is the Legacy code convention `U_0(2D)/\nu=100`, equivalent to single-cylinder `Re_D=50`; it is not a V5 numerical continuation. In the registered downstream rectangle, the controlled field is closer to the target than physical zero in both principal complete-cycle mean-field L2 and the separately defined eight-slot phase diagnostic: `E_mean=0.085771` versus `0.475206` for zero, and `E_phase8=0.112680` versus `0.630878`. The corresponding zero-relative values are `\eta_mean=0.819508` and `\eta_phase8=0.821392`. The exact principal field claim is spatial L2 under the Legacy `drl-pinball-wake-l2-v2` contract; one concise complementary annotation is the six-channel target-normalized DTW similarity, `0.932899` controlled versus `0.625127` zero under the 30-step cycle contract (higher is better), not a field norm or physical delay. [M03; M04] + +Kármán is selected for depth because it has the evidence intersection needed for interpretation: a named Legacy target/zero/controlled field comparison, executable Legacy SR evidence, corrected mean/dynamic field roles and CCD description, with V5 Re100 seed/retention information as secondary context. The selection is not a claim that steady, Vortex or Illusion are less important, nor an inference that they failed. It is the case in which capability, independent field matching and bounded action/field interpretation coexist under traceable contracts. [M04; M05; M06; M08] + +### Paragraph 4 — Kármán to Vortex, then cloak to Illusion + +The smaller Vortex lane changes the temporal coordinate: periodic phase is removed and named Lamb/Taylor disturbances are read at event-relative offsets. The visual should retain the event labels and offsets—rather than relabelling them phase—and may show pulse-like action and downstream fields; target/control/zero roles are conditional and are not treated as audited together. A quantitative event-relative ROI L2 is not currently available in the authority chain, so no event L2 number should appear in Fig. 1; current Vortex DTW remains a case-specific signal comparison and is not a physical delay. The bounded reading is a named comparable-scale transient capability hypothesis, not arbitrary-flow control or transfer of the Kármán control skeleton. [M07; R1 metrics] The `075` Illusion lane changes the objective instead: the policy is asked to match a declared non-zero target signature rather than approach the physical background. The geometry is the target **radius ratio 0.75** (physical radius 15 at `L0=20`), even where historical labels use diameter-like names. Use the retained V5 `ill_075L`, seed 43, as PPO capability evidence with target and controlled visual roles; physical zero and any field metric are conditional on exact role artifacts and must not be implied by the visual alone. This is a V5 historical capability lane, not a Legacy numerical continuation and not positive Illusion SR. The negative Legacy Illusion SR result may be stated locally as the reason SR is not promoted, without allowing that historical caveat to overwhelm the opening capability progression. [M07; R1 DRL/cases] + +### Paragraph 5 — boundary, degradation and bridge to Kármán depth + +The breadth preview must carry its boundary beside its claim. If space permits after the steady, Vortex and Illusion progression is readable, one evidence-backed degradation indicator may be retained as a small optional secondary mark; otherwise it is dropped: in the V5 `kar_re400`, seed 43, the mean field improved relative to zero (`E_mean=0.177469` versus `0.221541`) while the phase diagnostic worsened (`E_phase8=0.490471` versus `0.450626`, `\eta_phase8=-0.08842`). This is a named-condition warning that mean and phase behavior can diverge, not a cross-Re law or a failure explanation. The figure must not combine this value with the Legacy Re100 L2 values, the corrected CCD mean ledger, Vortex event observations, steady profile quantities or Illusion PPO scores. With the progression and its limits visible, the text bridges to the Kármán sections: Kármán is the sole deep case because its evidence intersection permits performance, executable SR and descriptive mean/dynamic organization to be examined together; the later cross-case section returns to Vortex and Illusion under their own contracts. [M04; M06; M07] + +## Layer 2 — panel, provenance and claim ledger + +### Fig. 1 panel contracts + +| Panel / visual role | Chain, case, roles and comparator | Metric/status shown | Caption-level limit | +|---|---|---|---| +| **A. steady discovery seed** | V5 steady/free-slip; accepted steady q_ctl against uniform/no-body q_in under E_inf_vector/profile status; q_blk is nonranking; stationary/reverse views are contextual only; late/profile view | Visual steady endpoint or profile; nonperiodic late/profile status; no periodic score | Contextual historical seed only; not Legacy SR/CCD evidence, phase evidence, mechanism, stability, optimum or pooled efficacy | +| **B. Kármán headline (dominant, 50–55%)** | Legacy `karman_re100`; target, physical zero and frozen PPO controlled roles; each role is under the Legacy solver/API and geometry; target is the comparator | Principal spatial L2: complete-cycle `E_mean`; secondary separately reported `E_phase8`; exact values `0.085771` vs `0.475206` and `0.112680` vs `0.630878`; `\eta` values optional in text/caption; DTW similarity only as complementary signal annotation (`0.932899` vs `0.625127`, target-normalized) | Geometry-guarded ROI; solver-exact common mask not persisted. L2 is not a validation Level/Stage, DTW is not field equivalence/delay/causality. No V5 pooling | +| **C. Vortex extension** | Legacy `vortex_lamb`/`vortex_taylor` named visual roles; target/controlled/zero roles are conditional on exact artifact binding and are not presumed jointly audited; event offsets remain literal | Event-relative visual and action trace; no quantitative event L2 currently. DTW, if annotated, is native Vortex signal comparison with its own window | Offsets are event-relative, not phase. No invented event L2; no arbitrary-flow, universal or Kármán-skeleton transfer claim. Quantitative event panel remains dependency-gated | +| **D. `075` Illusion objective extension** | V5 `ill_075L`, seed 43; separately constructed non-zero target and controlled PPO; physical zero only where exact role is bound; target radius ratio 0.75 | PPO capability visual, with reward/force/DTW status only under exact V5 role and calibration identity; physical zero and field metrics are conditional on exact role artifacts | Historical V5 capability only; target matching is not full-state equivalence, common efficacy or positive Illusion SR. Negative Legacy Illusion SR is separate historical evidence | +| **E. one degradation indicator (small, optional)** | V5 `kar_re400`, seed 43; controlled versus zero under the V5 periodic field contract | `E_mean` improves while `E_phase8` worsens: `0.177469` vs `0.221541`; `0.490471` vs `0.450626`; `\eta_phase8=-0.08842` | Named diagnostic only, n=1; demonstrates estimand divergence, not cross-Re generalization, failure cause, or a pooled comparison | + +**Fixed composition and density hierarchy:** A–D are left-to-right; B is visually dominant. The steady, Vortex and Illusion progression has priority over E. E is optional, may be dropped if it compromises that progression, and if retained is only a small marker/inset attached to B or its caption, never a fifth gallery panel. Explicitly show Legacy/V5 lanes and role labels. Do not include experiment. + +### Quantitative provenance rows + +| Claim | Exact authority/artifact | Chain, solver/geometry, case/seed/role, Re | Comparator, metric, ROI/window | Evidence state | +|---|---|---|---|---| +| Steady discovery chronology | `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` chronology; `ROUND1_BOTTOM_UP/04_STEADY_THEORY_AND_CROSSMAP.md`; current steady README/RESULTS and M08 | V5 steady/free-slip, three-cylinder pinball, `Re_D=50`; separate from Legacy Kármán | Accepted steady q_ctl versus uniform/no-body q_in under E_inf_vector/profile status; q_blk nonranking; stationary/reverse contextual only; late/profile, nonperiodic | `read`; authority-bound; not independently recomputed or artifact-audited; full theory deferred to M08 | +| Legacy Kármán mean/phase headline | M04 §2 ledger; `src/drl_pinball/eval/wake_l2.py`, schema `drl-pinball-wake-l2-v2`; bound Legacy role metadata | Legacy API/solver, `1280×512`, `karman_re100`, code Re100 = `Re_D=50`; target/zero/controlled, frozen Legacy PPO | Registered `-6≤(x-x_s)/D≤14`, `|(y-y_0)/D|≤5`, `x_s=800`; complete-cycle mean `E_mean`; eight independently phased nearest-snapshot `E_phase8`; accepted-crossing window | `read`; current authority values; raw payload and solver-exact mask `artifact-audit deferred` | +| Legacy Kármán DTW | M04 `dtw_summary.json` rows and `legacy_test/core/dtw_metrics.py` contract | Legacy `karman_re100`; target/controlled/zero; target-normalized six-channel cycle | 30-step window, lag channel 3, target-channel max-abs normalization; similarity, higher is better; native score separate | `read`; role authority; artifact audit deferred; complementary signal metric only | +| V5 seed/retention context supporting selection | M04 §2; V5 `latest_results_summary.json`, `latest_eval_summary.csv`, Re100 metadata | V5/CelerisLab `2000×600`, `kar_re100`, seeds 41–45, selected seed 45; code Re100 = `Re_D=50` | Best-checkpoint discovery and retained evaluation; no Legacy numerical continuation | `read`; retained historical authority; same-selection model/normalizer audit deferred for a redraw | +| Vortex visual/event boundary | M07 §§2 and ledger; `DATA_DICTIONARY.md`; reproduction plot manifest; `legacy_test/core/dtw_metrics.py` | Legacy Vortex named Lamb/Taylor cases; transient `SI=800`, `MAX_STEPS=150`; target/control/zero roles conditional | `event_fields.npz`, `relative_offsets=[-10,-5,0,5,10]`; current evaluator lacks event-field L2; native Vortex DTW has no lag and uses final-window roll | `read`; visual navigation and contract authority; raw events not independently verified; event-L2 artifact/evaluator `not-covered`, external roots `external-inaccessible` where applicable | +| V5 `ill_075L` PPO capability | M07 §3 and ledger; `env_illusion.py`, V5 training/result authorities | V5/CelerisLab `ill_075L`, seed 43; target cylinder radius ratio 0.75, physical radius 15; target and controlled roles | PPO reward/force/DTW capability view under V5 target/calibration; no field L2 unless exact roles pass | `read`; retained historical capability; model/normalizer/target leaf audit deferred | +| Illusion negative SR boundary | M07 ledger; `src/SR_analysis/CLAIMS.md`, `HANDOFF.md`, standardized Illusion role authority | Legacy `illusion_1L`; SR versus physical zero; separate historical standardized acquisition | Long `480+160` window, native/normalized DTW and mean/phase L2 near equal or slightly worse for SR; historical/negative | `read`; authority-bound negative evidence; not a comparator to V5 PPO and not positive SR | +| Optional V5 degradation marker | M04 §2 ledger and current field summary | V5/CelerisLab `kar_re400`, seed 43; controlled versus zero; code Re400 | Same periodic field contract; `E_mean=0.177469` vs `0.221541`; `E_phase8=0.490471` vs `0.450626`; `\eta_phase8=-0.08842` | `read`; bounded diagnostic; artifact audit deferred; n=1 and not generalization evidence | + +### Figure caption requirements + +The caption must say that Fig. 1 is a capability/progression composition, not a common metric comparison. It must identify for every panel: chain (Legacy or V5), solver/geometry where relevant, case and seed, target/reference and role, temporal coordinate (steady late/profile, periodic cycle/phase, or event-relative offset), metric status and comparator. It must explicitly state that the Kármán L2 values are Legacy Re100 field estimands, that DTW is complementary signal similarity, that Vortex offsets are event-relative and have no current quantitative event L2, and that `ill_075L` is V5 PPO capability with target radius ratio 0.75. The caption must prohibit pooled efficacy, arbitrary-flow generalization, positive Illusion SR and experiment-as-evidence. Any retained E marker must be labelled a named V5 diagnostic showing mean/phase divergence, not a failure cause or cross-Re law. + +## Claim ladder + +**Green — supported at named scope** + +- The historical progression is steady discovery → periodic Kármán cloaking → event-relative Vortex demonstration → non-zero-target Illusion PPO capability. +- Legacy Kármán Re100 target/controlled/zero is closer to its target under both the declared complete-cycle mean-field and eight-slot phase L2 rows, with the exact values and ROI above. +- Legacy Kármán DTW similarity is higher for controlled than zero under its own target-normalized cycle contract; it complements, rather than replaces, spatial L2. +- Named Vortex visual roles and V5 `ill_075L` PPO provide bounded extension evidence under separate contracts. +- Kármán is the selected deep case because it has the full evidence intersection for performance and interpretation. + +**Amber — bounded interpretation** + +- The cases establish breadth in temporal dynamics and objective: steady is nonperiodic, Kármán periodic, Vortex event-relative and Illusion non-zero-target periodic. +- Pulse-like Vortex actuation supports a comparable-scale event-response hypothesis in the named cases. +- The V5 degradation marker shows that mean and phase estimands can diverge under a named cross-Re case. +- A force-centred sparse-observation execution can be retargeted under named cases, while the positive control-skeleton interpretation remains Kármán/cloak-specific. + +**Red — prohibited in this section** + +- A pooled efficacy score, common bar, arithmetic combination, replication, validation, agreement or triangulation across these panels or with M06 CCD values. +- Arbitrary-flow control, continuous/general Re or offset/scale generalization, robustness or universality. +- Positive Illusion SR, target tracking by SR, or V5/Legacy numerical continuation/equivalence. +- Vortex event offsets called phase, Vortex event L2 invented, DTW called a physical delay or field equivalence. +- Illusion visual similarity called full-state equivalence or efficacy over physical zero without exact role artifacts. +- Steady discovery promoted to Legacy SR/CCD evidence, mechanism, stability or optimum. +- Experiment included in Fig. 1 or used as quantitative validation. + +## Imports, exports and bridge + +**Imports.** M03 supplies the chain, role, action, ROI and metric vocabulary. M04 supplies the exact Legacy Re100 L2/DTW headline and V5 seed/retention boundary. M05 supplies positive SR scope limited to Legacy Kármán/cloak. M06 supplies descriptive Kármán mean/dynamic and CCD boundaries, but no numbers are imported into Fig. 1. M07 supplies Vortex event semantics, Illusion PPO capability and negative Illusion SR. M08 supplies steady chronology and the later full steady/theory return. + +**Exports to M04/M07.** This section selects Legacy Kármán Re100 as the principal depth case while preserving M04’s field estimands and M07’s event/Illusion boundaries. It exports no cross-case score and no Kármán interpretation to Vortex or Illusion. + +**Final bridge.** Fig. 1 establishes capability breadth under named, non-pooled contracts. The next section can therefore begin with the Legacy Kármán field comparison and ask what independent spatial matching shows beyond the wake-signature objective; later modules return to SR/field interpretation and full cross-case metrics without treating the progression figure as a results gallery. + +## Genuine blockers, deferrals and coverage ledger + +**Genuine blockers for retained figure content:** a quantitative Vortex event-L2 panel is blocked until exact target/control/zero event roles, target identity, common ROI/mask, event window and evaluator output are bound. A quantitative Erase panel is not part of Fig. 1 and remains unsupported under the current historical route. An independently redrawn V5 selected-policy panel requires the matching model, VecNormalize and target artifacts. These blockers do not block the bounded text or the Vortex visual/Illusion capability panels. + +**Authority-led deferrals:** raw Legacy Kármán fields, external/symlink-backed Vortex/Illusion payloads, exact solver masks and model/normalizer leaf audits are `artifact-audit deferred` where current authorities bind the role and summary without conflict. No publication-ready figure is claimed to exist. + +| Status | Sources inspected and reason | Evidence state | +|---|---|---| +| `read` | Round3 rule, master prompt, quality gate, interface ledger and Wave-A audit; Round2 freeze and section style guide; ready Modules 03–08 (especially M04/M07/M08); Round1 DRL/cases, current-document coverage, field/CCD/OID, steady and case-metrics dossiers; current DRL, Legacy acquisition, SR, wake-L2 and steady authorities/manifests | Read directly for this first pass; not independently verified or artifact-audited | +| `mapped` | Existing reproduction-plot navigation and external role links used to identify candidate visual roles and panel dependencies | Indexed/mapped only; not treated as read or numerical authority | +| `not-covered` | New CFD/training, new offline Vortex event evaluator, raw NPZ/field arrays, exact event-L2 results, publication panel generation, experiment package, new literature search | Outside scope; no claim or number inferred from these omissions | +| `external-inaccessible` | Symlink/external raw Vortex/Illusion/Kármán payloads and selected model bundles not exposed in ordinary checkout inspection | Authority-led `artifact-audit deferred`; nonblocking for bounded text, blocking for any new artifact-audit/reproducibility claim | + +## Cross-module near-collision check + +The Legacy M04 principal PPO field errors (`0.085771`, `0.475206`) must not be compared arithmetically with M06 corrected CCD errors (`0.0857787860`, `0.4694352273`) despite similar magnitudes and nominal x extent. M04 uses three independently acquired target/controlled/physical-zero roles, a geometry guard, unweighted lattice-cell RMS after `U0` normalization, and a complete-cycle/phase8 contract; M06 uses four roles, a retained four-role window, an exact common solver-fluid mask and coordinate-weighted RMS on already nondimensional velocities. They are **different estimands**, not replication, validation, agreement or triangulation. The same prohibition applies to steady profiles, Vortex event observations, Illusion PPO reward/DTW and any proposed common figure bar. + +## Self-audit under the current gate + +- **Two layers:** Layer 1 has five argumentative paragraphs with transitions and local limitations; Layer 2 carries panel contracts, exact provenance, roles, chains, Re conventions, comparators, estimands, ROI/windows and evidence status. This is a revised candidate for second audit, not a self-readiness declaration; the narrative may be text-ready while retained panels remain artifact-gated. +- **Coverage:** the controlling Round2 documents, Round1 dossiers and all ready Modules 03–08 were read. The ledger distinguishes read, mapped, not-covered and external-inaccessible; read is not independent verification or artifact audit. +- **Progression fidelity:** steady appears only as a short historical seed; Kármán is visually dominant and quantitatively exact; Vortex uses event-relative semantics with no invented event L2; Illusion is V5 PPO capability at target radius ratio 0.75; experiment is excluded. +- **Claim boundaries:** no pooled score, arbitrary-flow/generalization, positive Illusion SR, Kármán interpretation transfer, CCD number import or experiment claim. The negative Illusion SR caveat is local and does not replace the PPO capability statement. +- **Figure integrity:** every proposed panel has chain, role, comparator and metric status. The Kármán and optional degradation values are not merged with M06 or other estimands. No gallery inventory or common efficacy bar is proposed. +- **Anti-index / anti-AI check:** the narrative is progression-led rather than a package inventory; numbers appear only when they establish the headline or a visible boundary; figure contracts follow the narrative rather than replacing it; no citation, number, artifact, mechanism or generalization was invented. + +**Disposition:** revised candidate for second audit. The bounded text is text-ready for parent review; raw/redrawn panels remain artifact-dependency-gated. Do not label this module self-ready or manuscript-ready. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/03_CONTRACTS_METRICS.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/03_CONTRACTS_METRICS.md new file mode 100644 index 0000000..9d314af --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/03_CONTRACTS_METRICS.md @@ -0,0 +1,109 @@ +# Round 3 Wave-A revised candidate — Section 2 contracts and metrics + +## Section question and bounded answer + +**Question.** What must be fixed about the plant, executable chain, actuation, observations, roles and estimands before later comparisons answer the same physical question rather than merely share a label? + +**Bounded answer.** Valid comparisons use separate Legacy and V5 executable chains, each with its own plant, action convention, calibration and role artifacts. The policy performs wake-signature matching from forces and sparse downstream velocities; independent field matching uses spatial L2 as the primary evidence and DTW only as complementary, case-specific signal evidence, with periodic, event, mean-field and steady windows kept distinct. This is a revised candidate for second audit, not a ready module. + +## Layer 1 — six-paragraph near-prose section draft + +### Paragraph 1 — plant and chain + +The comparison begins with a declared plant, not with a policy score. The fluidic pinball comprises three ordered circular bodies and a downstream three-probe signature plane, while Kármán and Illusion introduce different target constructions. In the active V5 Kármán chain, CelerisLab uses a `2000×600` D2Q9 FP32 MRT configuration with double-buffer streaming, uniform regularized inflow, `neq_extrap` outlet and free-slip lateral walls. The V5 body order is front, top, bottom; its common lattice convention is `L0=20`, `D=20`, `U0=0.01`, and `Re_code=U0(2L0)/nu`, so `re100` corresponds to `Re_D=50`. V5 Illusion translates the pinball and obtains the non-zero target from a separate target-cylinder acquisition; its historical `target_diam` parameter is passed as a radius ratio. Legacy uses the separate LegacyCelerisLab plant and historical geometry/API, so a shared case label never licenses numerical pooling. [V5 train/env; Legacy role authority] + +### Paragraph 2 — actuation, sign and readback + +A normalized action becomes a physical rotation only after body order, sign and persistence have been fixed. In V5, `a=(a_front,a_top,a_bottom)` lies in `[-1,1]^3` and maps to + +\[ +\omega_i=-\frac{(12a_i+b_i)U_0}{R},\qquad b_i=0, +\] + +with `R=L0/2` and an explicit weight-`0.1` exponential smoother. The negative sign and front/top/bottom order belong in the plant schematic and every downstream action-law comparison. They must not be transferred to Legacy: Legacy SR and acquisition use the native `(front, upper, lower)` ordering, `\alpha=\omega/U_0`, and `Re_D=Re_code/2` for its Kármán notation, with its own action scale/bias and `FlowField.run` persistence. CelerisLab uploads a host-side `set_body` value at the next run; force readback is an `[f_x,f_y]` vector whose time normalization is explicit, while sensor readback is footprint-area averaged and optionally time averaged. [V5 environments; Legacy SR/action authority; CelerisLab API] + +### Paragraph 3 — observations, calibration and objective + +The execution contract is wake-signature matching rather than an assertion of full-field observability. V5 Kármán supplies six controlled-body force components followed by six velocity channels, ordered as the two components of each of the three probes; V5 Illusion appends reconstructed target drag and lift. Solver readback, calibrated force and sensor scales, and online observation whitening are separate operations: active V5 calibration stores native units, while SB3 `VecNormalize` whitens observations only and must travel with the selected policy. The historical Legacy compatibility path may use `SENSOR_CC=78` before its old-policy scaling; that factor is not active V5 calibration. Roles are likewise explicit: `target` is a reference trajectory, `zero` is physical-zero/uncontrolled, `controlled` is the policy trajectory, and `constant` is a contextual comparator where acquired. Force terms and six-channel sensor similarity form the reward; aggregation and target comparison are case-specific, with V5 Kármán averaging controlled-body forces against zero and V5 Illusion summing them against one target body. [V5 training pipeline; Legacy acquisition authority] + +### Paragraph 4 — field matching and signal complement + +The independent field comparison is registered before performance is inspected. The current downstream ROI is the fixed rectangle `-6≤(x-x_s)/D≤14` and `|(y-y_0)/D|≤5`, a `20D×10D` box guarded against known solids but not proven by persisted solver masks. For periodic roles, the primary estimand is the `U0`-normalised area-RMS difference between complete-cycle mean velocity fields, reported both absolutely and relative to the same-case zero comparator through `η=1-E_controlled/E_zero`. The eight-slot phase diagnostic uses independently phased centre-probe transverse-velocity crossings and nearest saved snapshots; it is not a repeated-crossing ensemble. DTW remains a complementary sparse-signal measure, not a spatial L2 surrogate, physical delay or causal test. This hierarchy asks separately whether the persistent field and the evolving signature approach the target. [wake-L2 authority] + +### Paragraph 5 — case-specific evaluation windows + +The estimand changes with the dynamics and must be named in every result row. Periodic Kármán and periodic Illusion can use complete-cycle mean-field L2 and a separately reported eight-slot phase diagnostic, with native or normalized DTW labelled by its own window and formula. Vortex comparisons, if exact roles exist, use event-relative downstream snapshots at declared offsets and retain event labels rather than calling them phase. Erase uses a mean-field comparison only when target, controlled and zero roles are exact; the historical unsupported route is not repaired by relabelling. Steady comparisons use a late snapshot or profile, not a temporal periodic mean. Pipeline `Level-2/Level-3` or `Stage-3 short/standard` terminology must also remain separate from the spatial L2 metric. [case-metric authority; wake-L2 authority] + +### Paragraph 6 — compact CFD qualification and scope + +The numerical qualification is a compact contract check, not a second results section. The retained CelerisLab K2 rotating-cylinder package uses D2Q9 MRT, FP32, double-buffer streaming, Bouzidi moving boundaries, no LES and `neq_extrap` outlet under the Kan99b open-flow convention; it is a partial pass because the stored mean-lift sign disagrees with the reference even though the accepted frequency, drag and fluctuation observables fall within their declared bands. The retained Sah04 S2 confined-cylinder package provides a named Strouhal check under its parabolic/channel-stabilised, no-slip and realised-Re convention. These anchors qualify selected solver observables only; they do not qualify a DRL policy, SR law, CCD interpretation or cloaking mechanism. Full matrices, hashes, sensitivity rows and smoke diagnostics belong in the supplement. [CelerisLab validation dossier; Kan99b/Sah04 authorities] + +## Layer 2 — paragraph and claim-to-evidence ledger + +| Paragraph / claim | Exact provenance and contract | Comparator, metric, ROI/window and status | +|---|---|---| +| P1: V5 plant | `src/drl_pinball/train/TRAIN_PIPELINE.md` §§1–2; `train/env_karman.py`; `DATA_DICTIONARY.md`; active V5 Kármán, CelerisLab `2000×600`, D2Q9 FP32 MRT, double buffer, regularized uniform inlet, `neq_extrap`, free-slip; body order front/top/bottom; `L0=20`, `D=20`, `U0=.01`; `Re_code=U0(2L0)/nu` | Same matched config/calibration/target for target, zero and controlled; case/seed/role-specific; field window is the registered downstream ROI below; supported executable contract, not independently rerun | +| P1: V5 Illusion geometry | `train/env_illusion.py` lines 50–60, 157–184; active V5 Illusion target acquisition and translated controlled plant; target cylinder exists only during target construction; `target_diam*L0` is passed as radius | Target versus controlled only under matched target/calibration identity; periodic or case-specific metric later; supported executable contract | +| P1: Legacy separation | `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §§4–5; `src/drl_pinball/legacy_test/README.md`; Legacy Kármán/Illusion role artifacts and LegacyCelerisLab API | No cross-chain score pooling; Legacy evidence is retained historical unless current artifact says otherwise; read authority, raw payload artifact-audit deferred | +| P2: V5 action | `train/env_karman.py` `_action_to_omega`; `env_illusion.py` `_action_to_omega`; active V5, action `(front,top,bottom)`, `[-1,1]`, `b=0`, `\omega=-(12a+b)U0/R`, `R=L0/2`, EMA weight `.1` | Record command, applied omega, body ID/order and sign per trajectory; supported source contract | +| P2: Legacy action/SR convention | `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §§6–7; `src/SR_analysis` current Kármán authority; Legacy Kármán SR, native `(front,upper,lower)`, `\alpha=\omega/U0`, `Re_D=Re_code/2`, distinct scale/bias and `FlowField.run` EMA | Legacy SR comparisons remain Legacy-only; formula/action artifacts and closed-loop trajectory are the comparator; active Kármán scope, read authority | +| P2: readback | `CelerisLab/README.md` §§API/telemetry; `CELERISLAB_VALIDATION_DOSSIER.md` §§3–4; CelerisLab current solver/API, `set_body` host action uploaded at next run; force `[f_x,f_y]`, `normalize=True` per-step average, sensor area normalization always applied and time normalization separate | Record sampling interval and normalization; no force-tensor transpose; array/API orientation safeguard is stated once here; read authority, implementation not rerun | +| P3: V5 observations | `train/env_karman.py` module contract and `_normalize_obs`; `env_illusion.py`; active V5, Kármán 12-vector = six forces then six sensor components; Illusion 14-vector adds target `C_D,C_L` | Reward uses the corresponding target role; observation order is not field metric; supported source contract | +| P3: normalization | `TRAIN_PIPELINE.md` §§4–5; `DESIGN_DECISIONS.md`; active V5 native calibration-v2 scales plus observation-only `VecNormalize`; Legacy compatibility `SENSOR_CC=78` path | Selected policy requires matching normalizer; inference freezes `training=False`; native V5 and Legacy scaling not comparable; supported contract, retained-policy compatibility artifact-audit deferred | +| P3: roles/reward | `legacy_test/README.md` §§standardized acquisition; `TRAIN_PIPELINE.md` §§3–5; `DESIGN_DECISIONS.md`; target, zero, controlled, constant; Kármán controlled-force mean versus zero, Illusion controlled-force sum versus one target; sensor similarity is reward-adjacent | Target has no policy reward; native DTW and normalized offline DTW retain separate formulas/windows; reward is not field error; supported role contract, exact selected artifacts artifact-audit deferred | +| P4: ROI | `WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` §§3–5; `src/drl_pinball/eval/wake_l2.py`, schema `drl-pinball-wake-l2-v2`; registered `-6≤(x-x_s)/D≤14`, `|(y-y0)/D|≤5`, `D=20`; geometry guard because solver masks not persisted | Controlled and zero versus target on same case/role window; `U0`-normalised area-RMS; exact solver-mask audit deferred, not a blocker when authority binds ROI | +| P4: periodic L2 hierarchy | Wake-L2 note §§5–6; `wake_l2.py`; periodic target/controlled/zero roles; `E_mean` is complete-cycle arithmetic mean-field error; `E_phase8` is eight independently phased nearest snapshots; `η=1-E_ctl/E_zero` | L2 primary field matching; mean and phase windows distinct; phase8 not ensemble and DTW not L2; implemented where role schema passes, raw external fields artifact-audit deferred | +| P5: case-specific semantics | `ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md` §§4–5; `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` §§2,5; wake-L2 note §§5–7; periodic, vortex event-offset, Illusion, Erase mean-field and steady late/profile contracts | No pooled efficacy/phase score; exact Vortex/Erase roles are needed only for future quantitative panels; current authority defines semantics, event/role payloads artifact-audit deferred | +| P5: pipeline terminology | `.cursor/rules/jfm-round3-section-drafting.mdc` line 11; relevant package stage/level documentation | `Level-2/Level-3` and `Stage-3 short/standard` are pipeline labels; spatial `L2` is field error; no “L2 gate” wording; current drafting rule | +| P6: CelerisLab qualification | `docs/JFM_WYQ/CELERISLAB_VALIDATION_DOSSIER.md` §§3,6–10; Kan99b K2 and Sah04 S2 manifest-backed full artifacts; current solver revision recorded by dossier | K2: Kan99b `Re=U∞D/nu`, partial pass due mean-lift sign; S2: Sah04 realised-Re Strouhal check; named windows and artifacts in manifest; qualification evidence, selected artifacts not rerun here | +| P6: qualification boundary | Same dossier §§5,10–12; `CelerisLab/README.md` FP16S/EsoPull limitations | Selected numerical observables only; no DRL/SR/CCD/mechanism validation; full matrix and hashes supplement; K2 sign issue remains a genuine blocker only for claims using affected lift convention | + +## Figure, equation and table contracts + +1. **Plant/action/sensor/ROI schematic.** Shows the two lanes, body order, V5 negative action sign, Legacy action distinction, probe plane and registered ROI. It does not establish optimal placement, observability, chain equivalence or a solver-exact mask. +2. **Legacy/V5 contract table.** Defines solver, geometry, body/action/Re convention, normalization and role names. It does not authorize pooled statistics or transfer of the V5 action map to Legacy SR. +3. **Definitions block.** Reuses chain-specific Re/action equations, observation/reward role definitions, `E_mean`, `E_phase8` and `η`. It does not turn reward into field error or DTW into delay. +4. **Compact CFD table.** Gives the selected K2/S2 qualification status and essential configuration; full matrices and artifact identities belong in the supplement. It does not validate policy, SR, CCD or cloaking mechanism. + +## Claim ladder + +**Green.** Legacy and V5 are separate executable chains; each later comparison must carry its plant, body/action/Re convention, calibration, role, comparator, metric and window. V5 action order/sign/smoothing, readback semantics, observation normalization, role definitions, wake-signature reward, and L2-primary/DTW-complementary hierarchy are executable contracts. K2 is a partial Kan99b qualification and S2 is a named-condition Sah04 solver anchor. + +**Amber.** Sparse probes are physically motivated signature monitors, not optimal or fully observable. Reward/DTW can define wake-signature matching, while L2 independently tests registered field matching. Mean, phase, event and steady estimands may support different bounded comparisons under their own roles. + +**Red.** Do not pool Legacy/V5 values or transfer V5 action signs/maps to Legacy SR; call DTW a physical delay, causal test or field equivalence; relabel event snapshots as phase; call steady late snapshots temporal means; use a validation Level/Stage as an “L2 gate”; claim solver qualification proves DRL/SR/CCD/cloaking mechanism; or call all Kan99b/Sah04 matrix cases completed. + +## Imports, exports, bridge and genuine blockers + +**Imports.** Round-2 frozen terminology and hierarchy; Round-1 DRL/action/role and metric dossiers; current V5 environments, training/evaluation and data-dictionary authorities; Legacy acquisition/SR authority; wake-L2 implementation/rationale; and the CelerisLab validation dossier and benchmark specifications. + +**Audited exports — exact canonical wording for Modules 04–06.** + +- **Legacy/V5:** Legacy and V5 define separate executable evidence chains; never pool their numbers or imply numerical continuation/equivalence. +- **Action:** V5 uses body order `(front, top, bottom)` and `\omega=-(12a+b)U0/R` with zero bias and weight-0.1 smoothing. Legacy SR uses native `(front, upper, lower)`, `\alpha=\omega/U0` and `Re_D=Re_code/2`; the V5 map does not apply to Legacy SR. +- **Observation/reward:** Wake-signature matching uses forces plus six sparse downstream velocity observations. Force aggregation and target comparison are case-specific; calibration scales, Legacy `SENSOR_CC=78` compatibility, and V5 observation-only `VecNormalize` are distinct layers. +- **Evaluation:** Field matching uses spatial L2 as primary evidence and DTW as complementary, signal-level and case-specific evidence. Periodic complete-cycle mean L2, eight-slot phase diagnostics, transient event-offset L2, Illusion/Erase mean-field comparisons and steady late/profile errors are distinct estimands. +- **Qualification:** CelerisLab qualification is compact and configuration-specific; Kan99b K2 is a partial pass because the mean-lift sign/convention remains unresolved, while qualification does not establish a control or mechanism claim. + +**Final bridge.** With these definitions fixed, Module 04 can lead with independent Kármán field matching, while Modules 05–06 can interpret Legacy SR and field structure without silently changing plant, action sign, Reynolds convention, role or metric. + +**Genuine blockers.** The Kan99b force/lift sign remains a blocker only for claims that use that affected lift comparison. Exact Vortex/Erase target-control-zero roles remain blockers only for proposed future quantitative panels. A selected-policy reproducibility claim is blocked if its exact model/normalizer/target identity is not bound; authority-led external fields, masks and hashes are `artifact-audit deferred`, not blockers. + +## Concise source coverage ledger + +| Status | Sources and reason | Evidence state / boundary | +|---|---|---| +| `read` | Round-3 revised rule, master and quality gate; Round-2 freeze/style guide; Round-1 DRL, coverage and metrics dossiers; current V5 environment/training/evaluation/data-dictionary authorities; Legacy acquisition/SR authorities; wake-L2 note/code; CelerisLab dossier, README and Kan99b/Sah04 specifications | Read in full for this revision; not independently rerun or universally artifact-audited | +| `mapped` | Broader package indexes and manifests referenced by the read authorities | Mapped only; not claimed read-full or artifact-audited | +| `not-covered` | Raw selected model/normalizer/target bundles, external reproduction payloads, solver-exact masks and unretained benchmark matrix cases | Authority-led `artifact-audit deferred`; no values inferred | +| `external-inaccessible` | External/symlink-backed field roots and source exports not exposed in the visible checkout | Authority-led deferral; no essential internal contract is established from inaccessible material | + +## Anti-index / anti-AI audit + +- Layer 1 now contains six concise near-prose paragraphs with short source tags; repeated template labels and inline evidence blocks have been removed. +- Layer 2 carries exact provenance, chain, geometry, role, Re, comparator, metric, ROI/window and status without making the narrative a path inventory. +- Contracts no longer narrate Kármán performance, SR, CCD or cross-case success; detailed outcomes are retained only where needed to define qualification boundaries. +- Pipeline Level/Stage terminology is separated from spatial L2, and no validation item is called an “L2 gate”. +- Authority-led artifact gaps are marked `artifact-audit deferred`; only affected lift-sign claims, exact future Vortex/Erase roles and selected-policy identity can block downstream claims. +- The action-sign/body-order warning is preserved; the force-array orientation safeguard appears once in the ledger rather than as a repeated `tyx/txy` theme. +- This is a revised candidate for second audit, not a readiness declaration. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/04_KARMAN_PERFORMANCE.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/04_KARMAN_PERFORMANCE.md new file mode 100644 index 0000000..601ed53 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/04_KARMAN_PERFORMANCE.md @@ -0,0 +1,108 @@ +# Round-3 revised candidate — Kármán performance + +**Status:** targeted M04 revision completed; second-audit candidate, not final manuscript approval and not self-declared ready. This revision separates near-prose from provenance, makes Legacy Kármán Re100 the principal result, and retains V5 Re100 only as secondary support. + +## Section question and bounded answer + +**Question.** Under the named Kármán contracts, what does learned wake-signature matching achieve, and what independent field-matching evidence remains after the signal objective is separated from spatial evaluation? + +**Bounded answer.** Under the Legacy `karman_re100` target/controlled/zero contract and its registered downstream ROI, the frozen PPO trajectory is closer to the target than physical zero in both complete-cycle mean-field and eight-slot phase-resolved L2; its normalized six-channel DTW is complementary evidence, not the field claim. V5 Re100 supplies secondary evidence that high-scoring checkpoint discovery repeats across five seeds while late retention varies, so the result remains named-condition field matching rather than a pooled or robust cross-chain conclusion. + +## Layer 1 — concise near-prose draft + +The principal comparison is the Legacy Kármán Re100 target, physical zero and frozen PPO trajectory, evaluated within one Legacy solver and geometry contract. Here `Re100` is the code convention `U_0(2D)/\nu=100` (`U_0=0.01`, `D=20`, `\nu=0.004`), equivalent to single-cylinder `Re_D=50`; it is not the V5 Re100 case under another name. In the registered rectangle `-6\le (x-x_s)/D\le14`, `|(y-y_0)/D|\le5`, with Legacy `x_s=800`, the controlled field is closer to the Legacy target than the corresponding physical-zero field. [Legacy field authority; Module 03] + +The signal result is consistent with that field comparison but does not define it. Under the same 30-step window, lag channel and target-channel normalization, the Legacy controlled role has a six-channel target-normalized DTW similarity score of `0.932899`, higher than the zero role’s `0.625127`; the corresponding native reward-compatible similarity scores are `0.952132` for controlled and `0.688244` for zero. Higher scores indicate greater similarity. These are role-local Legacy quantities, not V5 scores, and they are never interpreted as errors or distances. DTW records signal alignment and similarity; it is not a spatial norm, physical delay or causal response. [Legacy Re100 `dtw_summary.json`; Module 03] + +The independent field result is carried by spatial L2. For complete accepted cycles, the Legacy controlled mean-field error is `E_mean=0.085771`, versus `0.475206` for zero, giving `\eta_mean=0.819508`. The corresponding eight-slot phase diagnostic is `E_phase8=0.112680`, versus `0.630878` for zero, giving `\eta_phase8=0.821392`. Here `E_mean` is the `U_0`-normalized area-RMS difference between complete-cycle arithmetic mean fields, whereas `E_phase8` is the RMS over eight independently phased nearest saved boundary snapshots; neither uses a solver-exact persisted common-fluid mask. Thus, for this named Legacy comparator and ROI, the field result agrees across persistent mean and phase-resolved diagnostics, without implying that all downstream flow states are identical. [Legacy `wake_l2.py` row; Module 03] + +The agreement has a defined dynamic boundary. Legacy target and controlled roles each contain eight complete-cycle fields and nine accepted crossings, while zero contains four complete cycles and five crossings; the controlled relative frequency mismatch is `0.004831`, compared with `0.376794` for zero. This supports the bounded reading that the controlled trajectory is closer to the target under both declared field estimands, but the phase metric remains a one-snapshot-per-slot diagnostic rather than a repeated-crossing ensemble. The companion V5 `kar_re100` package is secondary: five seeds repeatedly found high-reward checkpoints, and the retained deterministic evaluation selected seed 45 with reward `0.931258` and DTW `0.918458`; late retention ratios ranged from `0.162632` to `0.858143`. This supports a discovery/retention distinction, not Legacy/V5 pooling or a general convergence claim. [Legacy metadata; V5 retained evaluation authority] + +The result therefore hands two bounded questions forward. To Module 05, the Legacy Re100 field comparison establishes the performance target for testing whether a reduced action law reproduces the controlled trajectory under the same Legacy plant and window; it does not identify action-law complexity. To Module 06, the exact Legacy mean/phase L2 roles and their separate windows provide the performance baseline for mean/dynamic field organization, while the field metric remains geometry-guarded and descriptive rather than causal. [Module 03; current field authorities] + +## Layer 2 — compact provenance ledger + +| Claim / quantity | Exact source and artifact | Chain; solver/geometry; case/seed/role; Re | Comparator and metric/estimand | ROI/window and status | +|---|---|---|---|---| +| Principal target/zero/controlled roles | `src/drl_pinball/data/reproduction/legacy/karman_re100/{target,zero,controlled}/metadata.json`; schema `drl-pinball-legacy-acquisition-v2` | Legacy solver/API; `1280×512`; `karman_re100`; controlled frozen model `d1a3o12_re100.zip` with frozen `norm.json`; Re code 100 = `U0(2D)/nu=100`, `Re_D=50` | target live builder trajectory; zero physical-zero/uncontrolled counter-bias trajectory; controlled frozen-policy trajectory | `SI=800`, 480 warm-up, 160 post-step boundaries; 8 phase fields; read, authority-bound, artifact-audit deferred for raw payloads | +| Registered field ROI | `src/drl_pinball/eval/wake_l2.py`, schema `drl-pinball-wake-l2-v2`; Module 03 §4 | Legacy; `D=20`, `x_s=800`, conservative solid extent 636 | fixed inclusive ROI; no outcome-dependent mask | lattice bounds `x=680..1080`, `y=156..355`; geometry-guarded ROI, solver-exact mask not persisted; read and agreed with Module 03 | +| Legacy complete-cycle mean L2 | Exact `_evaluate` row from current Legacy roles, using `wake_l2.py`; row values reproduced from bound role artifacts | Legacy; Re code 100; controlled vs target and zero vs target; no seed field in Legacy role | `E_mean_ctl=0.08577102245825166`; `E_mean_zero=0.47520632385441813`; `eta_mean=0.8195078260689812`; `U0`-normalized ROI RMS difference of complete-cycle mean fields | accepted rising centre-probe `u_y` crossings; target 9, controlled 9, zero 5; 8, 8 and 4 complete cycles; current authority value, raw artifact audit deferred | +| Legacy phase L2 | Same exact `_evaluate` row and `phase_fields.npz` role schema | Legacy; Re code 100; controlled/zero versus target | `E_phase8_ctl=0.11267999504986256`; `E_phase8_zero=0.6308775162147815`; `eta_phase8=0.8213916455195072`; eight-slot nearest-boundary RMS | independent role phasing, canonical slots; one snapshot per slot, not repeated-crossing ensemble; current authority value, artifact-audit deferred | +| Legacy current/normalized DTW similarity | `controlled/dtw_summary.json`, `zero/dtw_summary.json`, `target/dtw_summary.json`; native implementation `legacy_test/core/dtw_metrics.py` and offline metrics contract | Legacy; `karman_re100`; controlled and zero role histories versus target; no V5 transfer | target-normalized six-channel cycle DTW similarity score: controlled `0.9328993565511687`, zero `0.6251268882807846`; native similarity score: controlled `0.9521319744438127`, zero `0.6882437288676819`; higher is better and controlled is higher under both contracts; these are not errors or distances | historical window/`CONV_LEN=30`, lag channel 3, target-channel max-abs normalization; read, current role authority, artifact-audit deferred | +| Dynamic boundary | Legacy role metadata plus the exact field-evaluation row | Legacy Re100; target/controlled/zero | controlled relative frequency mismatch `0.004831181571494927`; zero `0.3767940098934097`; period CV controlled `0.00020952970987246327`, zero `0.06474211289191471` | physical time is Legacy-relative; relative same-case diagnostic only; bounded observation, not cross-chain frequency evidence | +| V5 secondary five-seed support | `src/drl_pinball/train/results/latest/tables/latest_results_summary.json`; `latest_eval_summary.csv`; `train/output/kar_re100_seed41–45/meta.json` | V5/CelerisLab; `2000×600`; `kar_re100`; seeds 41–45; code Re100 = `Re_D=50` | best rewards `0.9266385, 0.9301960, 0.9160065, 0.9221958, 0.9411612`; selected retained evaluation seed 45 reward `0.931258`, DTW `0.918458` | 500 iterations; retained evaluation 360 steps, last-180 tail; historical `legacy-policy-v1` compatibility, not current-contract retraining; read authority, artifact-audit deferred | +| V5 retention support | Same V5 `latest_results_summary.json` retention records | V5; same five named seeds and case | validated last-50 retention ratios `0.6703388, 0.2004286, 0.1626321, 0.8581434, 0.6373129` | training-retention diagnostic; best-versus-retained distinction explicit; normalizer pairing required only for reproducibility/selected-policy panel, not for this textual seed-retention claim | +| V5 Re400 boundary, if retained in figure | Current summary authority and current wake-L2 summary authority | V5/CelerisLab; `kar_re400`, seed 43; code Re400; support chain only | `E_mean_ctl=0.177469` vs zero `0.221541`, but `E_phase8_ctl=0.490471` vs zero `0.450626`; `eta_mean≈0.1989`, `eta_phase8=-0.08842` | same periodic field contract; current authority diagnostic, artifact-audit deferred; do not use as Legacy principal evidence | + +### Authority/interface reconciliation with Module 03 + +- **Agreement:** Module 03 and `wake_l2.py` agree on `drl-pinball-wake-l2-v2`, registered `[-6D,+14D]×[-5D,+5D]` ROI, `D=20`, `E_mean` as complete-cycle mean-field RMS, `E_phase8` as eight independently phased nearest-snapshot diagnostic, `eta=1-E_role/E_zero`, and geometry-guarded/no-persisted-exact-mask status. +- **Agreement:** Module 03’s Legacy Re100 role semantics agree with the current metadata: Legacy target is live builder-generated, zero is physical-zero/uncontrolled, controlled is frozen Legacy PPO; Legacy roles use their own chain and are not V5 continuations. +- **Conflict/clarification:** Module 03 says every role must carry target identity/hash when available; Legacy metadata binds run-generated target-array hashes separately for target, controlled and zero. These hashes differ because the trajectories are independently generated; they must not be treated as one shared target identity without an explicit target-role reconciliation. This is a provenance clarification, not a numerical conflict. +- **Deferral:** Module 03’s normalizer/VecNormalize contract applies to V5 retained policy reproducibility. It does not condition the Legacy field text above, whose frozen Legacy `norm.json` is directly bound in the controlled and zero metadata. Same-selection V5 model/normalizer verification is therefore a selected-policy reproducibility/panel dependency, not a blocker to the Legacy principal result. + +## Figure, equation and table contracts + +1. **Principal target/zero/controlled Legacy plate.** Show Legacy Re100 target, zero and controlled fields with chain, role, phase slot/window and fixed vorticity limits. It supports visual comparator context and can accompany the exact L2 rows; it does not prove mask exactness, causality or V5 equivalence. +2. **L2-first result panel.** Report Legacy Re100 absolute `E_mean`, `E_phase8` and zero-relative `eta` before the DTW companion. Caption must state ROI, `U0`, accepted-crossing window, eight-slot nearest-snapshot semantics and geometry-guarded mask status. It does not establish a universal cloak score or repeated-crossing uncertainty. +3. **DTW companion.** Show Legacy controlled/zero target-normalized DTW similarity scores and label native versus target-normalized similarity pipelines. State explicitly that higher is better (`0.932899` controlled versus `0.625127` zero normalized; `0.952132` controlled versus `0.688244` zero native) and never label these values as errors or distances. The panel supports signal-level matching under the declared window; it does not become field L2, a delay or a causal test. +4. **V5 seed/retention inset.** Show best discovery and late-retention spread only as secondary support, with selected seed 45, historical compatibility path and best/retained labels. A same-selection model/normalizer pair is required for a reproducibility or selected-policy panel, not for the textual statement that retention varies. +5. **Equations.** Use Module 03 canonical `E_mean`, `E_phase8` and `eta` definitions; do not add a second DTW equation here unless Module 03 requires it. Distinguish spatial L2 from any pipeline Level-2/Level-3 or Stage-3 validation gate. + +## Claim ladder + +**Green — supported at named scope** + +- Legacy `karman_re100` controlled is closer to its target than its physical-zero comparator in both the complete-cycle mean-field and eight-slot phase-resolved registered spatial L2 rows above. +- Legacy controlled target-normalized DTW similarity is higher than zero under the declared role-local normalized cycle contract; native similarity is reported separately, and higher is better for both. +- V5 Re100 has five retained seeds with repeated best-checkpoint discovery and seed-dependent late retention; this is secondary support, not pooled field evidence. + +**Amber — bounded interpretation** + +- The Legacy Re100 result is consistent with learned wake-signature matching producing a controlled trajectory whose declared downstream field is closer to target over the registered ROI. +- Agreement of mean and phase L2 under this Legacy role supports a stronger named-case reading than DTW alone, while phase-slot and mask limitations remain attached. +- The V5 seed pattern motivates separating discovery from retention and does not transfer a V5 result into the Legacy action-law interpretation. + +**Red — prohibited without new evidence** + +- A global statement that field matching always survives beyond reward, pooled Legacy/V5 values, or a single cross-chain Kármán score. +- DTW as physical delay, causal response, field equivalence or mechanism. +- Robust/general convergence, universal Re transfer, stability, optimal sensor placement, exact solver-mask L2, or statistical uncertainty from the current phase slots. +- V5 selected-policy reproducibility claims without the matching model/normalizer pair; this restriction does not block the Legacy principal text. + +## Imports, exports and bridge + +**Imports from Module 03:** canonical role/chain vocabulary; Legacy/V5 solver and Re boundaries; registered ROI; `E_mean`, `E_phase8`, `eta`, phase and mask semantics; spatial-L2 versus pipeline validation-level distinction. This revision reconciles those definitions above and records the one target-hash clarification. + +**Exact exports to Module 05 — Kármán action law:** use Legacy `karman_re100` target/zero/controlled as the principal closed-loop performance comparator; preserve its Legacy solver/API, `Re_code=100`/`Re_D=50`, frozen policy and `norm.json`, `SI=800`, 480 warm-up plus 160 retained boundaries, complete-cycle window and role-local target/zero semantics. The field result is a performance arbiter for any reduced law; it does not itself identify a necessary, causal or unique action component. + +**Exact exports to Module 06 — Kármán field/CCD:** use Legacy Re100 `E_mean_ctl=0.08577102245825166` versus zero `0.47520632385441813`, `eta_mean=0.8195078260689812`, and `E_phase8_ctl=0.11267999504986256` versus zero `0.6308775162147815`, `eta_phase8=0.8213916455195072`, with the registered Legacy ROI and geometry-guarded mask status. Treat these as separate mean and phase estimands; do not infer action correlation or causality from them. V5 seed/retention and Re400 disagreement remain support-chain context only. Although the standardized PPO and corrected CCD mean errors are numerically close and share the same nominal x extent, they arise from different role acquisitions and role sets, retained windows, masks, and weighting/normalization contracts; they are different estimands, are not combined arithmetically, and must not be described as replication, validation, agreement or triangulation. + +**Final bridge.** The named Legacy comparator establishes what the learned policy achieved in the registered Kármán wake; Module 05 can now test action-law compression against that same result, and Module 06 can organize mean and phase field differences without turning the field metric into a causal explanation. + +## Genuine blockers and scope-local deferrals + +- **No blocker to this section text:** external/symlink-backed raw fields and absent solver-exact masks are `artifact-audit deferred` because current metadata, evaluator code and authority-bound rows identify the roles, comparator, window and exact summary values without conflict. +- **Panel/raw-audit dependency:** a newly redrawn field panel or independent artifact audit still requires access to the raw role payloads and exact manifest/hash check. Do not claim that this pass performed that audit. +- **V5 reproducibility dependency only:** same-selection `best_model.zip` plus matching VecNormalize is required to reproduce or redraw a selected V5 policy panel; it does not condition the Legacy principal field/DTW text or the textual seed-retention observation. +- **No unresolved Module 03 metric conflict:** canonical definitions agree; the target-array hash distinction is recorded as a clarification. + +## Coverage ledger + +| Status | Sources inspected | Evidence status / reason | +|---|---|---| +| `read` | Revised `.cursor/rules/jfm-round3-section-drafting.mdc`; Round3 master and quality; current Module 03; Round1 DRL/control, coverage audit and case-metrics dossiers; `WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md`; `RESULTS.md`, `CLAIMS.md`, `WRITING_HANDOFF.md`, `eval/README.md`; `wake_l2.py`; Legacy Re100 metadata and DTW summaries; V5 result tables and Re100 metadata/calibration | Full read; current authority values extracted where stated; raw NPZ/model binaries not independently audited | +| `mapped` | `data/reproduction_plots/manifest.json`; current plot navigation and external role paths | Role/phase-slot mapping read; derived views, not numerical authority | +| `not-covered` | New CFD, retraining, external literature, independent mask reconstruction, new panel generation | Outside this revision; no claim depends on them | +| `external-inaccessible` | External Optane root is symlink-backed and raw field payloads are permission-restricted in ordinary inspection | Authority-led `artifact-audit deferred`; exact role/summary rows were still obtained through the bound evaluator and metadata | + +## Anti-index / anti-AI audit + +- Layer 1 is five concise prose-like paragraphs with source tags and scientific cadence; it does not contain repeated bold template labels, giant inline evidence blocks or training-path inventories. +- Layer 2 carries the complete provenance ledger, including chain, solver/geometry, case/role/seed, Re, comparator, metric, ROI/window, status and deferral state. +- The principal result is Legacy Re100; V5 is visibly secondary, and the 23-row aggregate is not used as the principal claim. +- L2 remains primary and DTW complementary; native and normalized DTW, mean and phase8, Legacy and V5 are not pooled. +- Best checkpoint, retained evaluation and late retention are separated; VecNormalize is scoped to V5 reproducibility/panel dependency rather than treated as a universal blocker. +- No global beyond-reward claim, causal language, generalization claim, invented number or silent target-hash merge is used. + +**Disposition:** revised candidate submitted for second audit; not self-declared ready. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/05_KARMAN_SR_LAW.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/05_KARMAN_SR_LAW.md new file mode 100644 index 0000000..5c94560 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/05_KARMAN_SR_LAW.md @@ -0,0 +1,153 @@ +# Section 5 — Kármán action law: dominant near-constant core and smaller correction + +> **Revised candidate — second coordinator audit required.** This module owns the executable Legacy Kármán SR law, its deployment symmetry and bounded term tests. It does not self-declare ready; full steady results belong to Module 08 and field/CCD accounting to Module 06. + +## Section question and bounded answer + +**Question.** What executable symbolic-regression structure is supported for Legacy Kármán cloaking, and what do its closed-loop arbitration and fixed-window term tests establish? + +**Bounded answer.** A symmetry-mapped SR surrogate is documented and passes the named Legacy Kármán formula-deployment validations; its parent-relative deletion tests identify persistent rear counter-rotation as the largest tested contribution, with smaller but non-zero rear-lift feedback. This supports a bounded control-skeleton interpretation under the declared contract, not necessity, uniqueness, mechanism or Illusion transfer. + +## Layer 1 — five-paragraph near-prose draft/map + +### 1. Question and estimand + +Symbolic regression asks whether the frozen PPO action can be represented by a compact, executable observation-to-action surrogate for the named Legacy Kármán cloaking cases. The estimand is controller-level: finite closed-loop wake-signature matching under an unchanged Legacy plant, rather than a model of the flow field or its cause. The imported interface is provisional pending coordinator audit: native action order `(front, upper, lower)`, `alpha=omega/U0`, `Re_D=re_code/2`, force-plus-sparse-sensor observations, and Module 04’s separation of spatial L2 field matching from complementary, case-specific DTW. Offline action error remains a fit diagnostic on PPO-visited states; deployment behavior is the arbiter. [R1-SR; SR authority; provisional Modules 03–04 interface] + +This framing makes the next distinction essential: recovering PPO actions is not the same test as executing the recovered law. + +### 2. Recovery contract and imposed symmetry + +The executable route is Stage 1 trajectory capture, Stage 2 topology discovery and coefficient refit, followed by Stage 3 static checks, a **Stage-3 short gate (40 control steps)** and **Stage-3 standard validation (200 control steps)**. Causal fitting pairs post-state `i` with next action `i+1`, while contiguous trajectory-local splits prevent boundary leakage. The deployed map is + +\[ +G(\alpha_F,\alpha_U,\alpha_L)=(-\alpha_F,-\alpha_L,-\alpha_U), +\qquad +\alpha_F(x)=\frac{h_F(x)-h_F(Gx)}{2},\quad +\alpha_U(x)=h_R(x),\quad +\alpha_L(x)=-h_R(Gx). +\] + +The map imposes reflection symmetry at deployment; it does not show PPO equivariance. Stage-3 CFD, finiteness, action/order/schema compliance and provenance decide whether the formula is executable. [SR pipeline; Legacy interface] + +The symmetry map fixes the action space; the canonical expression gives the resulting structure. + +### 3. Canonical law and physical translation + +The mapped-shared topology A is + +\[ +\boxed{\alpha_F=\operatorname{odd}\!\left(-0.381391\,C_{d,\mathrm{rear},a}\right)}, +\qquad +\boxed{\alpha_U=1.307782\,C_{l,\mathrm{rear},s}-3.431209}, +\qquad +\boxed{\alpha_L=-\alpha_U(Gx)}. +\] + +Here `Cd_rear,a=(Cd_upper-Cd_lower)/2` and `Cl_rear,s=(Cl_upper+Cl_lower)/2`. The rear law therefore combines a persistent negative upper-action constant with rear-mean-lift feedback, while the front action is an odd-projected rear drag-asymmetry correction. Because `alpha=omega/U0`, the constant corresponds to opposite-sign rear rotations of approximately `3.431209 U0`; the wording describes executable action structure, not a unique physical mechanism. The separate steady analysis supplies only a brief contextual bridge: its disturbance-free deployments are consistent with the order of this rear-rotation magnitude and are owned in detail by Module 08. [SR claims; canonical formula authority; steady context] + +The formula’s acceptance must still be stated with the correct comparator semantics. + +### 4. Closed-loop arbitration and comparator boundary + +The formula-parent evidence is a Legacy SR deployment against the declared Kármán target using the native Legacy DTW contract; it should not be described as though every validation were a same-window PPO/SR/zero acquisition. The reported canonical SR similarities for the 200-control-step named cases are `0.9543, 0.9427, 0.8560, 0.7827` at re-codes `50,100,200,400`; the frozen law also has finite 400-control-step observations `0.952178, 0.944339, 0.863850, 0.833365`. These are formula-deployment results at named cases and windows. Separately, the standardized collector defines comparable `Target`, `PPO`, `SR` and `Zero` roles using 480 warm-up intervals and 160 retained boundaries; exact PPO/SR/zero comparator numbers are not asserted here unless the current role artifacts and proposed panel supply them. The native DTW lag is alignment metadata, not a physical delay, and neither DTW result alone is field matching. [SR claims; Stage-3 runs; standardized Legacy acquisition] + +Thus the law is supported as a finite executable surrogate, while the direct role comparison remains a distinct visualization/data dependency. + +### 5. Fixed-window term tests and inference ceiling + +Parent-relative term deletion keeps the canonical topology, coefficients, Legacy solver/geometry, four named Kármán cases and native DTW window fixed. Removing the rear constant gives the largest listed degradation across re-codes 50/100/200/400 (`ΔDTW≈−0.1065,−0.0939,−0.1785,−0.1911`); removing rear-lift feedback gives smaller but non-zero changes (`≈−0.0288,−0.0417,−0.0614,−0.0489`); the tested front correction has small mixed changes (`≈−0.0065,+0.0006,−0.0052,−0.0252`). The bounded interpretation is therefore a largest-tested persistent rear contribution, secondary rear feedback and weak tested front correction under one fixed short window. These are deletion tests, not causal ablations: they do not establish term necessity, sufficiency, mechanism, uniqueness or universal sensitivity. Illusion SR remains historical/negative and supplies no positive transfer. [SR deletion table; claim ledger] + +This action-space ranking exports a narrower field question to Module 06: how do the persistent and smaller dynamic components relate to independently defined field estimands? + +## Layer 2 — paragraph notes and claim–evidence ledger + +### Paragraph notes + +| Paragraph | Claim/role | Exact evidence identity | Chain; solver/geometry | Case/seed/role; Re | Comparator; metric/estimand; window | Status and audit state | +|---|---|---|---|---|---|---| +| 1 | SR is an observation-to-action surrogate; offline fit is not acceptance | `src/SR_analysis/README.md`, `CLAIMS.md`, `PIPELINE.md`, `results/README.md`; `tables/offline_action_rmse.md` | LegacyCelerisLab; Legacy Kármán plant; action `front,upper,lower` | `karman_re50/100/200/400`; re-code uses `2D`, so `Re_D=re_code/2`; 197 causally aligned PPO rows/case | PPO-visited next-action RMSE: `1.4435,1.0895,2.2860,2.1699`; diagnostic only; no closed-loop window | Current authority; displayed RMSE is derived view; artifact-audit deferred, non-blocking | +| 2 | Recovery and deployment contract | `stage_1_infer.py`, `stage_2_fit.py`, `stage_3_validate.py`; `utils/data_contracts.py`, `feature_builder.py`, `g_operator.py`, `formula_schema.py`, `metrics.py`, `provenance.py`; `src/drl_pinball/legacy_test/README.md` | LegacyCelerisLab; Legacy solver/geometry; native action order | Four named Kármán cases; Stage 1 post-state `i`→action `i+1`; formula deployment under `G` | Stage-3 short gate `40` control steps; Stage-3 standard validation `200` control steps; standardized collector `480` warm-up + `160` retained boundaries | Current contract documentation; exact leaf recomputation artifact-audit deferred, non-blocking | +| 3 | Canonical law and action translation | `article-refit-karman-topology-a-20260718`; `results/catalog.json`; `src/SR_analysis/CLAIMS.md` | LegacyCelerisLab; Legacy Kármán plant | re-code `50/100/200/400`; canonical mapped-shared topology A; `alpha=omega/U0` | Formula is evaluated in closed loop against declared Kármán target; native Legacy DTW where quoted; steady only contextual | Current documented formula identity; formula leaf hash audit deferred, non-blocking; steady details owned by Module 08 | +| 4 | Formula-parent deployment is distinct from standardized role acquisition | `article-L2-karman-20260718`, `article-L3-karman-20260718`, `article2-long-karman-20260720`; `src/drl_pinball/legacy_test/acquire.py`; `src/SR_analysis/CLAIMS.md` | LegacyCelerisLab; Legacy solver/geometry | Named Kármán cases; formula-parent SR role for July runs; standardized collector roles Target/PPO/SR/Zero | July native `legacy_dtw_v1_abs_n_unclipped` / `legacy_reference_cycle_vs_last_recorded_cycle`; 200 control steps: `0.9543,0.9427,0.8560,0.7827`; 400: `0.952178,0.944339,0.863850,0.833365`; standardized window `480+160` | Current finite/pointwise formula evidence; direct PPO/SR/zero panel numbers are a future dependency if claimed; artifact-audit deferred | +| 5 | Rear constant ranks largest in fixed-window deletion tests | `article-ablation-formulas-v2-20260718`; `article-ablation-L2-k_front0-20260718`; `article-ablation-L2-k_rear0-20260718`; `article-ablation-L2-k_rear1-20260718`; `article-scaling-L1-v2-20260718`; derived `article2-plotting-package-20260721/tables/term_deletion.md` | LegacyCelerisLab; Legacy solver/geometry | `karman_re50/100/200/400`; canonical parent vs named deletion variants | Same parent-relative native DTW; 40 control steps; rear constant deltas `−0.1065,−0.0939,−0.1785,−0.1911`; rear feedback `−0.0288,−0.0417,−0.0614,−0.0489`; front `−0.0065,+0.0006,−0.0052,−0.0252` | Current bounded ranking; deletion is not causal ablation/necessity; parent/deletion artifact audit deferred | + +### Exact canonical formula and symmetry identity + +- Formula run: `article-refit-karman-topology-a-20260718` (documented current authority; leaf hash recomputation `artifact-audit deferred`). +- Native action order: `(front, upper, lower)`. +- Reflection/action map: + +\[ +G(\alpha_F,\alpha_U,\alpha_L)=(-\alpha_F,-\alpha_L,-\alpha_U), +\quad +\alpha_F(x)=\frac{h_F(x)-h_F(Gx)}{2}, +\quad +\alpha_U(x)=h_R(x), +\quad +\alpha_L(x)=-h_R(Gx). +\] + +- Canonical deployed law: + +\[ +\alpha_F=\operatorname{odd}(-0.381391 C_{d,\mathrm{rear},a}), +\quad +\alpha_U=1.307782 C_{l,\mathrm{rear},s}-3.431209, +\quad +\alpha_L=-\alpha_U(Gx). +\] + +- `alpha=omega/U0`; rear constant translates to opposite-sign rear physical angular velocities of magnitude approximately `3.431209 U0`. Exact coefficient/formula/source/deployment hashes are bound by current authority/manifests but were not recomputed in this documentation pass: `artifact-audit deferred`, not a blocker. + +### Comparator and metric ledger + +- **Formula-parent July evidence:** canonical formula deployment against the declared Legacy Kármán target; native Legacy DTW `legacy_dtw_v1_abs_n_unclipped` / `legacy_reference_cycle_vs_last_recorded_cycle`; Stage-3 short gate `40` control steps, Stage-3 standard validation `200`, finite extension `400`; named re-codes `50/100/200/400`; finite/pointwise current evidence. +- **Standardized August role acquisition:** separately reruns `Target`, `PPO`, `SR` and `Zero` under one Legacy contract, with `480` warm-up intervals and `160` retained post-step boundaries, independent role phase and complete-cycle outputs. It is the appropriate source for a same-protocol PPO/SR/zero comparison. Exact comparator numbers are not claimed in Layer 1 because the current SR authority read here does not expose a complete PPO/SR/zero table for the proposed visual. +- **Spatial field matching:** Module 04 owns field matching, with spatial L2 primary and DTW complementary/case-specific. The SR native DTW numbers above must not be relabelled as spatial L2 or as field equivalence. +- **Deletion:** parent-relative formula variants, same Legacy Kármán cases and same 40-control-step native-DTW window. It ranks tested terms; it does not establish causal effect or necessity. + +### Claim ladder + +**Green — documented/current:** the exact mapped-shared formula and imposed deployment symmetry are documented by current SR authority; the formula-parent Kármán deployments have the named finite DTW observations; fixed-window deletion ranks the rear constant largest among tested terms, with smaller non-zero rear feedback and weak/mixed tested front correction. + +**Amber — bounded interpretation:** the law can be organized as a Kármán/cloaking control skeleton with a persistent rear component and smaller observation-dependent corrections; 400-step and named-condition runs are finite/pointwise evidence only. + +**Red — prohibited without new evidence:** necessity, sufficiency, causal ablation, mechanism, uniqueness, global optimality, universal Reynolds behavior, DTW as physical delay, SR action fit as field matching, or positive Illusion SR transfer/target tracking/generalization. + +## Figure, equation and table contracts + +- **Canonical law equation:** defines the deployed surrogate and action signs; it does not establish a governing flow law, mechanism, uniqueness or PPO equivariance. +- **Symmetry schematic:** makes native order and imposed `G` mapping auditable; it does not prove plant symmetry or training equivariance. +- **Compact Stage-3 arbitration panel:** separates short gate, standard validation and finite extension from spatial L2 field matching; failed formula candidates remain visible. It does not imply PPO/SR/zero role equivalence. +- **PPO/SR/zero trace/table:** if included, must use standardized same-protocol role artifacts and state case, role, window, phase and metric; exact comparator data are currently a future panel dependency, not invented here. +- **Deletion table:** reports parent, variant, deleted term, native DTW, delta, case and 40-step window; caption must say parent-relative term deletion, not causal ablation. + +## Imports, exports and bridge + +**Imports, provisional pending coordinator audit:** Module 03 plant/action/Re/role/metric definitions and Module 04 Kármán performance/comparator framing. This section imports no modern V5, CCD, OID or positive Illusion SR evidence. + +**Exports:** canonical law identity; exact symmetry map and action order/sign; distinction between formula-parent SR deployment and standardized PPO/SR/zero acquisition; finite 200/400 DTW observations; and fixed-window deletion ranking. Module 06 receives the field-accounting question without inheriting a causal interpretation. + +**Steady bridge:** the separate steady chain provides contextual magnitude correspondence for the rear constant; detailed steady sweep and theory interpretation are exported to Module 08. + +## Coverage, conflicts and deferrals + +| Coverage status | Sources/reason | Evidence status | +|---|---|---| +| `read` | Revised Round-3 rule/master prompt/quality gate; Round-2 freeze/style guide; Round-1 SR, DRL and coverage dossiers; current SR README/CLAIMS/HANDOFF/PIPELINE/results README/INDEX/catalog; Legacy interface README; SR deletion/RMSE/steady/per-case reader views | Read-full reader authorities; not independently verified or artifact-audited | +| `mapped` | Archive and historical Illusion navigation, used only for boundary status; current formula/role leaf families identified through authority/catalog | Indexed/mapped is not read or independently verified | +| `not-covered` | No new literature or CFD; no exhaustive leaf hash recomputation; no complete standardized PPO/SR/zero table asserted | Literature cannot establish internal results; formula identity remains current authority documentation | +| `external-inaccessible` | External/symlink-backed standardized role payloads and hidden raw fields are not exposed in the normal workspace | Authority-led `artifact-audit deferred`; not a blocker unless needed for a proposed comparator/panel or conflict | + +**Conflict/gap:** no authority conflict is currently identified for the canonical Kármán law or deletion ranking. Exact Module 03/04 interface reconciliation remains a coordinator task. A proposed PPO/SR/zero visual additionally requires the complete standardized role comparator/panel data; this module does not invent them. + +## Revised-gate self-audit + +- **Two layers:** passed structurally; Layer 1 uses short source tags, Layer 2 carries exact provenance and numbers. +- **Narrative cadence:** five shorter paragraphs, with transitions and local caveats; steady detail removed from the narrative. +- **Validation vocabulary:** uses Stage-3 short gate/standard validation; spatial L2 remains Module 04’s field metric. +- **Comparator boundary:** formula-parent SR deployment is separated from standardized Target/PPO/SR/Zero acquisition; missing direct role numbers are marked as a future panel dependency. +- **Claim discipline:** green wording follows documented authority; hash/leaf audit is deferred, not a blocker; Illusion SR is historical/negative. +- **Scope/interfaces:** steady is a one-sentence bridge to Module 08; field/CCD interpretation is exported to Module 06; Module 03/04 imports remain provisional. +- **Status:** revised candidate for second coordinator audit; not self-declared ready. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/06_KARMAN_FIELD_CCD.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/06_KARMAN_FIELD_CCD.md new file mode 100644 index 0000000..074f85a --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/06_KARMAN_FIELD_CCD.md @@ -0,0 +1,111 @@ +# Round 3 revised candidate — Section 6: Kármán correction fields and action-correlated modes + +**Status:** REVISE completed; candidate for second audit, not ready. + +## Section question and bounded answer + +Under the exact Legacy Kármán field-error estimand, what share of the declared zero-to-DRL improvement is associated with the constant reference, what smaller residual remains, and what do CCD modes organize? + +Under the stated Legacy ROI, common mask and mean-field window, the constant mean accounts for `93.42%` of the measured zero-to-DRL target-error reduction, leaving a `6.58%` constant-to-DRL increment. A separately centred, non-paired residual is phase-coherent and descriptively organized into **action-correlated correction-field modes**; in the preferred pinball-inclusive derived sibling, raw weighted POD spans essentially the same rank-3 field subspace. These are scalar estimand and descriptive association statements, not energy or explained-variance partitions, paired counterfactuals, causal effects, response times, mechanisms or CCD superiority. + +## Layer 1 — six concise near-prose paragraphs + +### 1. Four roles define the comparison + +The field comparison starts with four roles: the target mean, passive zero-action mean, constant-mean control and DRL control. In the Legacy `karman_re100` case, with `Re_D=Re_code/2` under the Legacy `2D` reference and body order `(front, upper, lower)`, all four means are compared on the inclusive wake ROI `34 <= x/D <= 54`, `|y/D| <= 5`, using the exact intersection of their solver-fluid masks and a coordinate-weighted velocity error relative to the target mean. The constant arm is therefore a reference comparator in one declared estimand, not a paired intervention. [M03; CCD authority] + +Although Module 04's standardized PPO errors and this corrected CCD ledger have the same nominal x extent and numerically close values, they use different role acquisitions and role sets, retained windows, a geometry guard versus an exact four-role common mask, and an unweighted `U0`-normalized metric versus a coordinate-weighted metric on already nondimensional velocity. They are different estimands: their values are never combined or described as replication, validation, agreement or triangulation. [M04–M06 reconciliation] + +This fixes the denominator before the fields or modes are interpreted: the comparison is Legacy-specific and must not be pooled with the V5 contract or with steady, transient or Illusion metrics. + +### 2. The mean fields show where the measured reduction occurs + +The target error is zero by construction. The corresponding ROI mean errors are `E_zero=0.4694352273`, `E_constant=0.1110140739` and `E_DRL=0.0857787860`. The mean-field comparison therefore shows a large zero-to-constant change and a smaller constant-to-DRL adjustment under the same target comparator. The statement is about registered mean-field error only: it does not identify an actuator cause, establish feedback necessity or close a momentum or energy budget. [CCD ROI authority] + +The mean-field panel and scalar ledger should precede the residual and mode panels, so that the dynamic analysis answers a narrower follow-up question rather than replacing the primary field result. + +### 3. The 93.42/6.58 values are scalar error-difference shares + +The proportions are defined from the ordered scalar differences, not from field energy. With `E_0`, `E_C` and `E_D` denoting the three errors above, +\[ +S_C=100\frac{E_0-E_C}{E_0-E_D}=93.42\%, +\qquad +S_D=100\frac{E_C-E_D}{E_0-E_D}=6.58\% . +\] +Thus the precise wording is that the constant mean accounts for `93.42%` of the measured zero-to-DRL ROI target-error reduction, while the remaining DRL increment is `6.58%`. The denominator is the scalar error difference `E_0-E_D`; these percentages are not explained variance, energy share, causal contribution or term attribution. [CCD ROI authority; M03 metric boundary] + +The ledger consequently motivates a reference-residual analysis, but does not turn the residual into an isolated physical response. + +### 4. Separate centring leaves a non-paired phase-conditioned residual + +The corrected CCD uses `19` retained DRL cycles and `10` phase bins (`N=190`). The constant phase template is its own 19-cycle ensemble mean, and each role is centred over its own retained ensemble before subtraction: +\[ +U_{c,b}=(q^D_{c,b}-\bar q_D)-(\hat q^C_b-\bar q_C). +\] +The DRL and constant cycles are not paired. The construction uses no cross-role cycle pairing, Fourier resampling, lag, wrap or temporal-PSD interpretation. It removes the constant-template backbone in the declared reference sense and supplies a descriptive phase-conditioned field for association with the same-boundary DRL effective action; it does not isolate a causal DRL field, additive force or actuator response. [CCD math authority] + +The residual is therefore the input to organization analysis, not a counterfactual claim about what DRL changed in a matched realization. + +### 5. CCD organizes residual fields by action association and phase + +Weighted CCD relates the centred residual snapshots to the centred same-boundary DRL effective-action observable. Its supported output is a rank-3 descriptive field subspace whose action-side coordinates are presented as `front`, `rear-symmetric` and `rear-antisymmetric`, with phase reconstructions used to show how the residual is organized over the retained periodic coordinate. The physical output term is **action-correlated correction-field modes**. Mode signs are globally arbitrary, and body-local rotation or parity displays are diagnostics rather than wall-vorticity or mechanism measurements. [CCD result/figure authority] + +This is complementary to, not a derivation of, the SR law. Module 05’s rear-constant and rear-feedback ranking is an observation-to-action result under its own deletion and DTW contracts; CCD action coordinates are field/action association coordinates under the residual contract. The two estimands may be compared only as a brief, descriptive bridge. + +### 6. Raw POD sets the boundary on CCD’s added field information + +For the same centred residual object in the pinball-inclusive derived sibling, raw full-fit weighted POD is computed without using the action observable to choose its basis. The leading rank-3 principal cosines are approximately `1`, so CCD and POD span essentially the same tested field subspace. CCD’s bounded added information is therefore the action-coordinate association and phase organization of that subspace, not a distinct or superior field basis. This remains one corrected parent lineage and does not establish causality, response time, mechanism, generalization or CCD superiority. [CCD derived publication] + +The section exports a mean-dominant field ledger plus a smaller descriptive residual organization; later synthesis must preserve the separate SR, steady, V5 and OID boundaries. + +## Layer 2 — compact provenance and diagnostics ledger + +| Claim or object | Exact provenance and identity | Contract: chain, solver/geometry, case/role, Re | Comparator, metric/estimand, ROI/window | Status and audit state | +|---|---|---|---|---| +| Four-role mean comparison | `src/CCD_analysis/RESULTS_INDEX.md`; `FINAL_RESULTS.md`; ROI result schema `ccd-karman-roi-mean/v2`; manifest `f7f6141042678e52314a4d8f76d589108da8e844c8ce504f8f523a6f88a17e73` | LegacyCelerisLab; Legacy fluidic pinball; `karman_re100`; target, zero, constant mean, DRL; `Re_code=100`, `Re_D=50` | Coordinate-weighted RMS target error of retained role means; exact four-role common solver-fluid mask; inclusive `34<=x/D<=54`, `|y/D|<=5`; retained mean window | Current authority; artifact-audit deferred because authority binds result and manifest without conflict | +| `E_zero`, `E_constant`, `E_DRL` | Same ROI-mean result and `FINAL_RESULTS.md` | Same Legacy contract; zero, constant mean and DRL roles | `0.4694352273`, `0.1110140739`, `0.0857787860`; target error is zero by construction | Current sourced values; derived share arithmetic is bounded and not independently triangulated | +| `93.42%` and `6.58%` | Derived scalar ledger from the three current ROI errors; definitions in `MATHEMATICAL_DERIVATION.md` | Same Legacy contract | `(E_0-E_C)/(E_0-E_D)` and `(E_C-E_D)/(E_0-E_D)`; scalar error differences only | Bounded current interpretation; not energy, explained variance, causality or term share | +| Residual definition | `MATHEMATICAL_DERIVATION.md`; `CORRECTED_MATH_CONTRACT.md`; corrected result schema `ccd-karman-cycle-template/v1`; manifest `b114fbcc5f821034829ca3771ac5ba13df4b75df312b0615b662f81a9e5737d8` | LegacyCelerisLab; Legacy `karman_re100`; 19 DRL cycles, 19 constant cycles, 10 bins; `N=190`, `Q=1`; DRL and constant roles not paired | Separately centred `U_(c,b)` against constant 19-cycle phase template; corrected wake-only field dimension `M=160400`; retained phase/cycle window | Current validated wake-only sibling; artifact-audit deferred, nonblocking | +| CCD organization | Corrected wake-only result above; preferred derived pinball result `pinball-domain-20260809T1925+0800`, schema `ccd-karman-pinball-domain/v1`, result manifest `7e107a895364ed3e34abf2be513a3ce9e12736766ec6383c5b831891802d5828` | Same corrected Legacy parent lineage; pinball-inclusive domain `29<=x/D<=54`, `|y/D|<=5`; same `19×10` samples and action observable | Weighted CCD action association; descriptive phase reconstructions; coordinates `front`, `rear-symmetric`, `rear-antisymmetric` | Preferred derived result; not independent triangulation or new CFD | +| Reader-facing mode panels | Preferred derived publication `publication-pinball-domain-20260809T1925+0800`; publication manifest `31888f8eeb6c70dd9f0ff3449fa879f44abf381338ec261b0e45f69603691fdd`; `01`–`04` figure groups | Derived from corrected parent; pinball-inclusive reader domain; plot arrays use `(x index,y index)` | `01_domain_estimand` precedes `02_ccd_mode_identity`, `03_phase_reconstruction`, `04_raw_pod_vs_ccd`; fixed partitions are registered coordinates | Preferred reader view; source arrays remain authority-led `artifact-audit deferred`, nonblocking while documented result/panel claims remain bound | +| CCD diagnostics moved out of Layer 1 | `RESULTS_INDEX.md`, `FINAL_RESULTS.md`, `EXECUTION_CHECKPOINT.json` | Same Legacy corrected lineage; wake-only `M=160400`; pinball sibling `M=198528` | Wake strengths `0.0174141920`, `0.0069694895`, `0.0010500356`; least-favourable rank-3 projector cosine `0.9947903592`; leave-one-cycle-out leading cosine `0.9997247674`; pinball principal cosines `0.9999616609`, `0.9998971005`, `0.9976439804`; minimum declared pinball stability cosine `0.9974651867` | Descriptive diagnostics; singular strengths are not energy or explained variance; no independent triangulation | +| Array and sign safeguards | `src/CCD_analysis/FIGURES_AND_DATA.md`; `src/pv_plot/README.md`; `src/OID_analysis/PHYSICS_CONTRACT.md` | Legacy CCD stored field orientation is `txy` (`T,NX,NY`); modern V5 evaluator orientation is `tyx` (`T,NY,NX`); body order `(front, upper, lower)` | Publication arrays `(x,y)` are displayed with transpose; action sign conflict in OID material remains unresolved and is not imported as CCD evidence | Current boundary; no silent transpose or sign reconciliation | +| SR and performance bridge | Module 05 `05_KARMAN_SR_LAW.md`, especially its exports and deletion boundary; Module 03 `03_CONTRACTS_METRICS.md`; Module 04 standardized PPO mean/phase8 contract | Legacy SR only; executable observation-to-action surrogate, `alpha=omega/U0`, `Re_D=re_code/2`; CCD same Legacy case but distinct residual/action estimand | SR uses formula deployment, native DTW and parent-relative fixed-window deletions; CCD uses weighted field/action association under M06's corrected four-role coordinate-weighted mean-field estimand. M04 standardized PPO `E_mean` and phase8 are separate estimands and cannot validate or numerically close the M06 ledger | Reconciled interface; no SR derivation or numerical SR result duplicated here. Module 05’s direct standardized PPO/SR/zero panel remains a separate dependency if later proposed | +| OID boundary | `src/OID_analysis/README.md`, `SCIENTIFIC_RESET.md`, `PHYSICS_CONTRACT.md`, `HANDOFF.md` | Active OID method core is claim-free; archived Legacy material remains historical/conditional | No active positive OID result, action importance, mechanism or control-authority comparison | Claim-free boundary; unresolved historical sign conflict retained | + +**Source versus derived identity.** The validated wake-only corrected sibling is the primary CCD result authority (`cycle-template-ccd-review-fix-per-cycle-20260808T1736+0800`). The pinball-inclusive result and `publication-pinball-domain-20260809T1925+0800` are preferred derived result and reader publication siblings. The latter do not replace the former, and their near-equivalence does not constitute independent triangulation. Canonical alias/promotion choice is not needed for the manuscript-facing wording because both exact identities are stated. + +## Figures, equations and table contracts + +- **Mean-field figure and scalar ledger, first.** Shows target/zero/constant/DRL means and the exact error-difference ledger. It cannot establish causality, energy share, mechanism or necessity. +- **Residual definition/equation.** Defines the separately centred, non-paired phase-conditioned residual. It cannot establish a paired counterfactual, additive force or lag. +- **Mode identity and phase reconstruction.** Shows action-correlated correction-field modes, action coordinates and phase organization. It cannot establish wall vorticity, action sign authority, response time or mechanism; the rotation proxy is visualization-only. +- **Raw POD comparison.** Shows near-equivalent rank-3 subspaces in the derived pinball-inclusive object. It cannot establish CCD superiority or explained variance from CCD singular strengths. + +## Claim ladder + +**Green:** the exact Legacy mean errors, the scalar difference-share definition, the corrected non-paired residual contract, and the documented rank-3/action-coordinate organization under the named artifacts. + +**Amber:** the constant mean accounts for most measured reduction; the residual is phase-coherent and organized descriptively by action-correlated correction-field modes; CCD adds action-coordinate interpretation to a POD-equivalent tested field subspace. + +**Red without new evidence:** causal response, paired counterfactual, mechanism, response time, momentum restoration, energy/explained variance, term necessity, unique physical modes, CCD superiority, generalization, uncertainty, positive OID, or transfer to V5/steady/Illusion. + +## Interfaces, coverage and genuine blockers + +**Imports reconciled.** Module 03 fixes the Legacy/V5 separation, Legacy body/action/Re conventions, role semantics and spatial-L2/DTW distinction. Module 05 exports the Legacy SR law, its fixed-window deletion boundary and a brief control-skeleton context. The only interface mismatch requiring parent awareness is scope, not evidence: Module 05 owns the observation-to-action law and term ranking, whereas this module owns M06's corrected four-role coordinate-weighted mean-field estimand and residual organization. The SR law and CCD action coordinates are different estimands and must not be equated. Module 04's standardized PPO `E_mean` and phase8 are also separate estimands and cannot validate or numerically close the M06 ledger. + +**Exports.** Exact mean errors and `93.42/6.58` semantics; Legacy ROI/mask/window; non-paired `19×10` residual; rank-3 and action-coordinate identity; source-versus-derived lineage; POD boundary; and the bridge that the residual is descriptively action-correlated. No positive OID export. + +**Coverage ledger.** `read`: revised Round3 rule/master/quality; current Modules 03 and 05; Round2 freeze/style; Round1 field/CCD/OID and coverage dossiers; current CCD README, handoff, results index, derivation, claims, figures/data, final results, contracts, checkpoint and catalog; active OID reset/contract docs; current SR claims/handoff. `mapped`: current authority references to external dense result/publication parents and their reader copies; mapping is not read or independently verified. `not-covered`: raw dense arrays and universal leaf-hash recomputation, deferred because current authorities bind exact roles, results and publication identities. `external-inaccessible`: external dense payloads not exposed in the normal workspace; this is an authority-led `artifact-audit deferred` status, not a blocker. + +**Genuine blockers.** None for the bounded wording. A blocker would arise only if a proposed figure could not be sourced/redrawn from the documented publication/data contract, or if a source conflict changed the role, comparator, window or claim. The OID sign conflict remains quarantined and does not affect this CCD claim ceiling. Canonical alias/promotion remains outside the wording requirement and is nonblocking. + +## Revised-candidate audit + +- Layer 1 now contains six concise near-prose paragraphs with short source tags and no inline evidence-contract blocks. +- Exact hashes, dimensions, singular strengths, stability diagnostics, orientation and source/derived identities are confined to Layer 2 or compact contracts. +- Module 03/05 coverage is corrected to `read` and reconciled; SR derivation and detailed deletion results are not duplicated. +- External artifact audit and canonical promotion are recorded as nonblocking deferrals, not blockers. +- The `93.42/6.58`, non-pairing, descriptive CCD, POD, OID and `tyx/txy` semantics remain explicit. + +**Disposition:** revised candidate for second audit; not ready. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/07_CROSS_CASE_EXTENSIONS.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/07_CROSS_CASE_EXTENSIONS.md new file mode 100644 index 0000000..a67ff0a --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/07_CROSS_CASE_EXTENSIONS.md @@ -0,0 +1,137 @@ +# Round 3 — Cross-case extensions beyond periodic cloaking + +**Coordinator disposition — PASS, ready for downstream import but not final prose.** Vortex event-L2 and Erase quantitative panels remain blocked/conditional on the exact dependencies recorded below. This module asks what changes when the periodic Kármán cloaking task is made transient, when the declared target is non-zero, and when the objective is changed again to erasure. It preserves the two-layer architecture: Layer 1 is an author-readable section map; Layer 2 is the local provenance and audit ledger. + +## Section question and bounded answer + +**Question.** What changes when periodic Kármán cloaking is extended to a nonperiodic incoming vortex and when the objective changes from cloaking to illusion or erase? + +**Bounded answer.** Named PPO demonstrations support two distinct extensions: event-relative control beyond periodic phase for comparable-scale vortex disturbances, and retargeting or erasure beyond background matching under their own case-specific roles and metrics. They do not establish arbitrary-flow universality, transfer of the Kármán control skeleton, positive Illusion SR, or one common efficacy score. + +## Layer 1 — concise near-prose section draft + +### 1. Transition: the task changes in two independent ways + +The cross-case comparison should change one contract dimension at a time. Kármán cloaking compares a periodic disturbance with a declared background/reference; the Vortex cases remove the usable cycle coordinate and replace it with an incoming-event coordinate, whereas Illusion keeps a periodic target construction but replaces the near-zero/background objective with a non-zero target signature. Erase changes the reference once more: the desired state is a declared clean or erased signature rather than a Kármán target. The action interface and sparse wake-signature observations remain useful descriptors, but the comparison is no longer a common score. This is a transition from phase-indexed wake-signature matching to event-relative or target-field matching, not a generalized theory of control. [R1-DRL/cases; R1-metrics; R2-freeze; M03] + +**Fixed/change ledger for the manuscript.** Keep the Legacy scene and its action/normalization conventions attached to the named demonstrations; keep force and sparse downstream sensing as execution context; and keep spatial L2 primary whenever a valid field role exists. Change the temporal coordinate from complete-cycle phase to event-relative acquisition for Vortex, and change the target from background/near-zero to a declared non-zero field/signature for Illusion. For Erase, change the comparator and target semantics again. Do not import Kármán SR or CCD modes as interpretations of Vortex, Illusion or Erase: Modules 05–06 provide comparison context only. [M03; M05; M06] + +### 2. Kármán → Vortex: event-relative extension without arbitrary-flow generality + +The Vortex demonstration is best read as a pulse-response extension of the Legacy Kármán execution interface. The current case labels are `vortex_lamb` and `vortex_taylor`, with acquired variants including `vortex_lamb_y000`, `vortex_taylor_ym2L`, `vortex_taylor_ym1L`, `vortex_taylor_y000`, `vortex_taylor_yp1L` and `vortex_taylor_yp2L`; the action scale is the Vortex-specific `\(\omega/U_0=4a+[0,-4,+4]\)`, and the Legacy acquisition is transient with `SI=800` and `MAX_STEPS=150`. These labels and offsets must remain literal. The event artifact is `event_fields.npz`, whose `relative_offsets` are not periodic phase slots; the current plot navigation exposes `relative_offsets=[-10,-5,0,5,10]` around the controlled-role canonical event peak. These are event-relative sample offsets, not periodic phases. Layer 1 therefore retains only the named visual capability and pulse-like action interpretation; any quantitative event comparison is conditional on a later role audit and offline evaluator. [R1-DRL/case matrix; Legacy DATA_DICTIONARY.md; reproduction-plot manifest] + +A future quantitative statistic would be a downstream-region event-snapshot L2 at each named event-relative offset, but no quantitative Vortex L2 belongs in Layer 1 now: current `wake_l2.py` does not support `event_fields.npz`. Computing it would require new offline code plus audited target, controlled and physical-zero event roles, target identity, common ROI/mask and event window. The existing/new DTW remains complementary and must retain the Vortex contract: the current Legacy implementation has no lag and rolls the final window by `current_step+1`; it is a signal comparison, not physical delay or field equivalence. If those exact roles are absent, the visual capability remains a bounded observation and the event-L2 result is a drafting gap, not a number inferred from a plot. [R1-metrics; legacy_test/core/dtw_metrics.py; wake_l2.py boundary] + +Pulse-like actions make a bounded comparable-scale hypothesis plausible: an incoming Lamb or Taylor disturbance can be met by transient actuation in the named scenes. They do not show that arbitrary incoming flow, arbitrary amplitude, arbitrary offset or unseen vortex family is controlled, and they do not transfer the periodic Kármán action skeleton. The relevant next question is whether matched event acquisitions across disturbance scale and offset preserve the event-relative field comparison—not whether one transient panel establishes universality. [R1-DRL/cases; R2-freeze] + +### 3. Cloak → Illusion: a non-zero target changes both reward reading and field evaluation + +Illusion should be defined locally as matching a declared non-zero target signature or field, not as reducing a wake toward the physical zero. The target is a separately constructed periodic target-cylinder signature, including target force/harmonic information and the target sensor trajectory; the controlled pinball trajectory is evaluated against that target, with physical zero retained only as a separate comparator where its exact role is acquired. The named historical V5 PPO demonstration `ill_075L` (retained seed 43) is suitable as the main-text capability example. Its documented main-text evidence is capability-level reward/force/DTW and visual material; an independent field-L2 claim or panel is conditional on current field-role authority and should not be implied here. The Legacy `article-joint-data-illusion-20260718` manifest is a separate historical target-construction authority and must not be used to identify or numerically continue the V5 run; the retained size points remain case-specific demonstrations. Their reward/DTW and force behavior show capability and difficulty, not a cross-size law. [V5 env_illusion.py/training authority; article-joint-data-illusion-20260718 manifest; DRL claim ledger] + +For a periodic Illusion field panel, report complete-cycle mean L2 and phase8 L2 separately, with target, controlled and physical-zero roles explicitly separated; add normalized DTW only under the exact role, channel-normalization and window contract. Mean L2 asks about the persistent target field, phase8 asks about independently phased nearest snapshots, and normalized DTW asks about the declared sensor/target signal. They are related diagnostics within an Illusion acquisition only if the role set and windows match; they are not one efficacy score and cannot be pooled with Kármán, Vortex event L2, M06’s corrected four-role mean ledger, or steady profiles. Apply the near-collision gate to any similar L2/DTW values: compare acquisition, role set, ROI/domain, mask, weighting/normalization and window before using the values, and classify them as the same estimand, a related diagnostic or a different estimand. [M03; M04; Illusion manifests; near-collision interface] + +The Illusion PPO capability should be paired locally with the negative SR boundary, without treating the two as a direct comparator. In a different Legacy chain and role acquisition, the standardized `illusion_1L` SR result was effectively equal to physical zero over the declared long window. This is historical/negative evidence against promoting Illusion SR, while the V5 `ill_075L` PPO result remains a separate named historical capability demonstration. [SR CLAIMS.md; standardized Illusion role authority] + +### 4. Illusion → Erase: objective extension, failure envelope and bridge + +Erase changes the target/reference again. A defensible Erase result would define the clean or declared erased mean field and compare controlled and physical-zero roles to that target using mean-field L2, with DTW complementary only where the exact target, control and zero streams, normalization and window are documented. The historical Legacy route is explicitly unsupported: its evolving controlled-force FIFO was used as a target and no exact independent target-scale mapping exists. The plot manifest’s `erase` entries therefore do not authorize exact roles merely because filenames are present, nor do they revive unsupported Legacy erase evidence. If an authority later binds exact role artifacts, the figure can include an Erase mean field and case-specific DTW; until then the result is a gap/visual-navigation boundary, not quantitative efficacy. [Legacy legacy_test/README.md; R1-metrics; reproduction-plot manifest] + +The force-centred extension is useful but deliberately approximate. Near-zero resultant force motivates cloak as background suppression; target-force matching motivates Illusion and Erase at the observer/reward level. This does not imply that force matching determines the downstream field, and unresolved small structures and higher-Reynolds-number effects bound the approximation. The cross-case lesson is thus about objective and evaluation contracts: the same broad force-plus-sparse-observation execution can be retargeted, but neither the Kármán control skeleton nor a common L2/DTW efficacy score follows with it. The later steady section should return to steady only as contextual reference for the Kármán near-constant component, not as a bridge that closes these transient or objective-transfer gaps. [R1-DRL reward rationale; M05–M06 scope boundaries; R2-freeze] + +## Layer 2 — local provenance ledger + +| Claim/object | Exact source or artifact | Chain, solver/geometry, case/seed/role, Re | Comparator, metric/estimand, ROI/window | Evidence status and boundary | +|---|---|---|---|---| +| Fixed/change architecture | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` §§2,5; `03_CONTRACTS_METRICS.md` §§4–5 | Legacy/V5 kept separate; periodic Kármán, transient Vortex, periodic Illusion, Erase candidate | Periodic complete-cycle mean/phase8, event-offset L2, Illusion target metrics, Erase mean-field; no pooled score | `read`; definitions and manuscript boundary, not internal result authority | +| Vortex scene and action labels | `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §§4,6; `src/drl_pinball/DATA_DICTIONARY.md`; `src/drl_pinball/legacy_test/README.md` | LegacyCelerisLab; `vortex_lamb`/`vortex_taylor`; offsets `y000`, `ym2L`, `ym1L`, `yp1L`, `yp2L`; Vortex action `\(\omega/U_0=4a+[0,-4,+4]\)`; Re inherited/documented from Legacy transfer, not reinterpreted here | `SI=800`, `MAX_STEPS=150`; transient event roles, not periodic phase | `read`; named contract. No arbitrary-flow or universal transfer claim | +| Vortex event artifact/offset | `src/drl_pinball/data/reproduction_plots/manifest.json` entries `vortex_lamb_y000` and `vortex_taylor_*`; `DATA_DICTIONARY.md` `event_fields.npz` | Legacy plot navigation; target/controlled/physical-zero entries; `relative_offsets=[-10,-5,0,5,10]` around the controlled-role canonical event peak | Future per-event downstream ROI L2 at named offsets; current plot is derived navigation only; `wake_l2.py` lacks event-field support | `read`; manifest is navigation, not authority for audited quantitative role comparison; raw event NPZ/evaluator output not independently verified; `artifact-audit deferred` | +| Vortex DTW semantics | `src/drl_pinball/legacy_test/core/dtw_metrics.py`, summarized in R1 metrics dossier | Legacy transient Vortex; target/state sensor histories; no periodic phase | Native Vortex DTW has no lag and rolls final window by `current_step+1`; complementary signal metric | `read`; code contract, not rerun. Not delay/causality/field equivalence | +| Vortex quantitative gate | `ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md` §§4.2,5.2,9; `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §§171–196 | Exact target/control/zero event roles required; same chain and target identity required | Per-event downstream ROI L2 at acquired offsets; event labels preserved; current `wake_l2.py` does not evaluate event fields | `read`; exact roles/evaluator authority are a module-specific blocker for any retained quantitative Vortex number/panel. Visual capability remains documentable | +| Illusion PPO capability | `src/drl_pinball/train/env_illusion.py`, `TRAIN_PIPELINE.md`; `src/drl_pinball/CLAIMS.md` DRL-C4; `src/SR_analysis/data/runs/article-joint-data-illusion-20260718/illusion/illusion_0.75L/manifest.json`; retained V5 `latest_eval_summary` authority | V5 Illusion `ill_075L`, seed 43 retained demonstration; V5 target construction and controlled plant are separate; target radius ratio `0.75` (physical radius `15`, diameter `30` at `L0=20`); V5 code Re100 / `Re_D=50` where applicable, not Legacy-equivalent | PPO reward/force/DTW capability view; not independent field efficacy row unless exact field roles pass | `read`; retained historical named demonstration; target/model artifact audit deferred | +| Illusion target definition | `env_illusion.py` contract; Illusion manifest above; `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §52 | V5/Legacy target construction differs by chain; target force and six sensor channels plus target `Cd,Cl` in V5 | Non-zero target signature/field; controlled target comparison; physical zero separate comparator | `read`; target identity must be retained per chain; no full-state equivalence claim | +| Illusion geometry terminology | V5 `env_illusion.py`; `src/SR_analysis/data/runs/article-joint-data-illusion-20260718/illusion/illusion_0.75L/manifest.json`; `DATA_DICTIONARY.md` | `ill_075L`; `L0=20`; target radius ratio `0.75`, physical radius `15`, diameter `30`; historical labels may use `target_diam` or `D_t/L0` | Geometry identity only; no diameter-ratio relabelling | `read`; explain once that historical variable/plot names do not change the physical radius interpretation; V5/Legacy chains remain separate | +| Periodic Illusion metrics | `ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md` §§4.2–4.3; `src/drl_pinball/eval/wake_l2.py`; `DATA_DICTIONARY.md` | Only exact compatible target/controlled/zero roles; V5 or Legacy separately | Complete-cycle mean L2 and independent phase8 separately; normalized DTW only with exact target-channel normalization/window; registered ROI `-6..+14D`, `|y-y0|/D<=5` where evaluator applies | `read`; raw fields/exact masks authority-led `artifact-audit deferred`; no pooling | +| Illusion historical/negative SR | `src/SR_analysis/CLAIMS.md` I1–I3; `src/SR_analysis/HANDOFF.md`; standardized role artifacts named there | LegacyCelerisLab; `illusion_1L`; SR vs physical zero, one standardized realization; independently phased roles; `Re_D=re_code/2` | Native DTW `0.9117016` vs `0.9119890`; normalized DTW `0.8940190` vs `0.8940537`; mean L2 `0.189990` vs `0.189414`, `eta=-0.00304`; phase8 `0.264176` vs `0.261832`, `eta=-0.00895`; `480+160` window | `read`; current authority-led negative/historical result, raw role audit deferred | +| Erase role/failure boundary | `src/drl_pinball/legacy_test/README.md` line 13; `ROUND1_BOTTOM_UP/08` §§4.2,5.2,9; manifest `erase` entries | Legacy historical route; `erase`; filenames show navigation but do not establish exact independent roles | Candidate mean-field L2 plus DTW only under exact roles; historical route uses evolving controlled-force FIFO target | `read`; quantitative Erase unsupported/currently module-specific blocker; do not infer roles | +| Force-centred conceptual bridge | `ROUND1_BOTTOM_UP/01_DRL_CONTROL_AND_CASES.md` §§1,3; `src/drl_pinball/train/env_karman.py`, `env_illusion.py` | Kármán force aggregation is case-specific; Illusion target force aggregation differs; Erase historical reward special | Force terms motivate near-zero cloak and target-force matching, but field L2 is independent | `read`; bounded interpretation only; small structures/higher Re unresolved; not generalized theory | +| Near-collision gate | `00_QUALITY_GATE.md` §§14–18; `00_WAVE_A_COORDINATOR_AUDIT.md` §§28–37; M03–M06 exports | Compare within exact chain/case/role acquisition; never cross Legacy/V5 silently | Check role acquisition/set, ROI/domain, mask, weighting/normalization, window; classify same estimand/related diagnostic/different estimand | `read`; mandatory downstream control | + +## Figure, equation and table contracts + +### Cross-case extension figure (one contract, separated subpanels) + +**Role.** A single progression figure may contain: (i) Vortex event panels at named event labels and offsets, with action trace and downstream ROI-L2/DTW annotation only if exact roles exist; (ii) Illusion target, physical-zero and controlled panels for `ill_075L`, with visual target/controlled/physical-zero roles and any available complete-cycle mean L2, phase8 or normalized DTW visibly separated; field metrics are conditional on exact current role authority; and (iii) an Erase mean panel only if exact target/control/zero roles are later authority-bound. Each subpanel must state chain, case, role, seed, target/reference, metric, ROI/mask and window. + +**Caption limits.** Mark Vortex event labels as event-relative, not phase. Mark Illusion as PPO capability and keep negative Illusion SR visible locally. Mark Erase as unavailable/visual navigation if its quantitative role contract is absent. Similar numerical values across subpanels are not pooled. + +**Does not establish.** The figure does not establish a common efficacy score, arbitrary-flow universality, Kármán skeleton transfer, positive Illusion SR, causal force-to-field mapping, or Erase success from filenames/visual similarity. + +### Optional compact metric-definition block + +Define, only where roles permit, + +`E_event(o) = RMS_ROI(q_controlled(o) - q_target(o))`, + +and use the existing periodic `E_mean` and `E_phase8` definitions without treating event snapshots as phase fields. The equation defines a candidate event estimand; it does not create missing event roles, common masks or an evaluator result. + +### Supplementary case matrix + +The full matrix should retain all vortex labels and `relative_offsets=[-10,-5,0,5,10]`, Illusion target sizes, V5/Legacy identifiers, role acquisition status, native/normalized DTW, mean/phase/event/mean-field semantics, and artifact deferrals. It is a supplement contract, not a main-text inventory or pooled bar chart. + +## Claim ladder + +**Green — supported at named scope** + +- Current event artifacts and plot navigation support named transient Vortex visual roles, while the named historical V5 `ill_075L` PPO result supports capability-level Illusion evidence. Neither currently supports a quantitative Vortex target/control/zero event comparison without audited exact role artifacts. +- Periodic Illusion is a non-zero target problem: target, controlled and physical-zero roles and complete-cycle mean/phase8 metrics are conceptually distinct and can be reported only where their exact authorities exist. +- Illusion SR is historical/negative under the standardized long-window 1L comparison; Erase’s historical Legacy route is explicitly unsupported for quantitative efficacy. + +**Amber — bounded interpretation** + +- Pulse-like actuation supports a comparable-scale event-response hypothesis for the named Vortex disturbances. +- A force-centred observer/reward view motivates the distinction between near-zero cloaking and target-force retargeting, while unresolved small structures and higher-Re effects limit that approximation. +- Cross-case breadth changes the temporal/target contract, not the evidentiary status of the Kármán control skeleton. + +**Red — prohibited without new evidence** + +- Arbitrary incoming-flow capability, universal vortex control, continuous scale/offset generalization, or transfer of the Kármán SR/CCD interpretation to Vortex, Illusion or Erase. +- Positive Illusion SR, target tracking by SR, efficacy over physical zero from old finite-run similarity alone, or one common L2/DTW efficacy score. +- Quantitative Erase success inferred from filenames, plot existence or unsupported Legacy reward targets. +- Causal force-to-field theory, exact small-structure suppression, higher-Re universality, DTW as delay, or cross-module numerical agreement/validation from near-collision values. + +## Imports, exports and bridge + +**Imports.** M03 supplies Legacy/V5, action, role, ROI and L2/DTW semantics. M04 supplies the Kármán performance comparator but not a transferable cross-case score. M05 supplies the positive Kármán/cloak control-skeleton boundary. M06 supplies descriptive Kármán field organization only. Round-1 Vortex, case-metrics and coverage dossiers supply event labels and role gaps; current package authorities control the facts. + +**Exports to Module 08 synthesis.** Named PPO demonstrations support event-relative control beyond periodic phase for comparable-scale vortex disturbances and objective retargeting/erasure under case-specific contracts; they do not establish arbitrary-flow universality, Kármán skeleton transfer, positive Illusion SR or one common efficacy score. Export the exact Illusion negative SR comparison and the Erase role/evaluator gap. No Vortex number should be exported until exact event roles and an evaluator authority are bound. + +**Exports to Module 10 conclusion.** Cross-case results show capability breadth with asymmetric interpretation: execution can be retargeted under named cases, but the positive control-skeleton reading remains Kármán/cloak-specific. Export the failure envelope—Vortex event-role/evaluator gap if unresolved, Illusion SR negative result, Erase unsupported route, and no pooled score—and the requirement for matched event/target-role acquisitions as the decisive next test. + +**Bridge to later steady context.** After these extensions, the manuscript may return to steady as contextual reference for the Kármán near-constant component. That return must not imply that steady evidence closes Vortex transient transfer, Illusion target-field transfer or Erase efficacy. + +## Conflicts, deferrals and genuine blockers + +- **Authority-led deferrals, nonblocking for bounded prose:** external/symlink-backed raw Vortex and Illusion field payloads, model/normalizer bundles, solver-exact masks and leaf-hash recomputation. The current authorities bind the stated roles or claim boundaries without a conflict; artifact audit is deferred. +- **Module-specific blocker:** a quantitative Vortex event-L2 panel is blocked unless exact target/control/zero event roles, target identity, event offsets, ROI/mask and evaluator authority are available. Visual capability can remain as a bounded observation. +- **Module-specific blocker:** an Erase quantitative panel is blocked by the explicitly unsupported Legacy route and absent independently mapped target-scale contract. Do not fill this gap from the plot manifest. +- **No scientific blocker to the bounded section text:** Illusion can be represented with PPO capability plus locally visible negative SR, provided the metrics are not pooled and role/window contracts remain explicit. +- **Systematic control already present:** the near-collision gate is a coordinator-level control inherited from Wave A. Applying it here is mandatory; it is not a new module-specific interpretation. + +## Coverage ledger + +| Status | Sources inspected and reason | Evidence state | +|---|---|---| +| `read` | Current Round-3 rule/master/quality/interface ledger and Wave-A audit; Round-2 freeze/style; Modules 03–06; Round-1 `01_DRL_CONTROL_AND_CASES.md`, `06_CURRENT_DOCUMENT_COVERAGE_AUDIT.md`, `08_EXPERIMENT_AND_CASE_METRICS.md`; current DRL README/CLAIMS/RESULTS/DATA_DICTIONARY/WRITING_HANDOFF; Legacy acquisition README; current SR CLAIMS/HANDOFF; Vortex/Illusion manifests and current environment/result authorities | Read directly; not independently verified or artifact-audited | +| `mapped` | Current plot navigation and package links to external role roots; archive/old Illusion and Vortex routes used only to understand status/history | Mapped is not read, verified or audited; no claim depends on archive leaf material | +| `not-covered` | Raw event/phase NPZ arrays, exact Vortex event evaluator output, complete Erase target/control/zero independent roles, new offline event adapter, new CFD/training, new figures and external literature | Not covered because outside first-pass drafting; quantitative Vortex/Erase panels remain conditional | +| `external-inaccessible` | Symlink/external storage roots for selected reproduction fields and some role payloads; model/normalizer bundles where not exposed in ordinary inspection | Authority-led `artifact-audit deferred`; no missing payload is silently treated as absent or present | + +## Self-audit under the current gate + +**Two layers and cadence.** Layer 1 contains four argumentative modules with local caveats and substantive transitions; Layer 2 carries exact contracts, roles, metrics, windows and status. It is a revised first-pass section dossier for second audit, not polished manuscript prose and not a readiness declaration. + +**Systematic versus module-specific defects.** The systematic risk is metric pooling/near-collision language across heterogeneous cases; the draft applies the Wave-A role/ROI/mask/weight/window gate and prohibits arithmetic or validation language. A second systematic risk is source-path dominance; narrative uses short tags and keeps inventories in Layer 2. Module-specific defects are the missing authoritative Vortex event-L2 evaluator/role result and unsupported quantitative Erase route. They are preserved as gaps rather than repaired by inference. No new systematic rule defect was found in this pass. + +**Gate checks.** Legacy/V5, periodic/transient/steady and capability/interpretation chains remain separate. Spatial L2 is not a validation Level/Stage; DTW remains complementary and case-specific. Illusion SR is locally visible as negative/historical. Kármán SR/CCD modes are not imported as Vortex/Illusion/Erase interpretations. Figure contracts visibly separate metrics and prohibit pooled bars. No citation, number, causal mechanism, universal claim or artifact was invented. + +**Disposition.** Second-audit PASS; ready for Wave C/downstream imports, not final manuscript prose. Quantitative Vortex event-L2 and Erase panels remain blocked/conditional as specified in the figure and blocker contracts. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/08_STEADY_SYNTHESIS.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/08_STEADY_SYNTHESIS.md new file mode 100644 index 0000000..ba048c3 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/08_STEADY_SYNTHESIS.md @@ -0,0 +1,87 @@ +# Round 3 first-pass module — Section 8: steady context, physical synthesis and theory limits + +**Status:** revised candidate for second audit; not self-declared ready. This module is a two-layer author-facing section draft and evidence dossier for the 6% steady return. It does not reverse the historical order: steady discovery is recalled briefly after the Kármán deep analysis, and the full steady/theory analysis appears here retrospectively. +**Coordinator second-audit disposition:** PASS — ready for downstream Wave C imports, but not final manuscript prose. + +## Section question and bounded answer + +**Question.** After the Kármán deep analysis, what bounded steady context and theory constraints contextualize why the learned periodic law retains a near-constant rear-rotation core, and where does that interpretation stop? + +**Bounded answer.** The independently defined steady V5/free-slip branch supplies historical discovery context, sign and magnitude calibration, and a settling-qualified low-deficit endpoint compatible with the Kármán near-constant core; direct wall-sign checks, the failed potential-circulation sign route and incomplete finite-Re budgets prevent mechanism, stability, optimum and cross-chain validation claims. + +## Layer 1 — narrative draft + +The steady result returns here because it was discovered first, not because it is a continuation of the Legacy Kármán analysis. The early capability section records the short discovery seed; the Kármán section then shows a dominant near-constant rear-rotation component and a smaller dynamic correction under its own Legacy contract. The present return asks the narrower retrospective question: whether an independently defined steady branch contextualizes why that recurrence is plausible. It does not make the V5 steady result evidence for the Legacy SR or CCD numbers, and the two chains are never numerically pooled. [Round-2 freeze; current steady README/RESULTS; Modules 05–06] + +Under the modern V5 uniform-inlet, free-slip-channel contract at `Re_D=50`, the body order is `(front, rear_y_plus, rear_y_minus)` and the wall law is `(U_w,V_w)=(-\omega r_y,\omega r_x)`. The accepted branch is `[0,+\Omega,-\Omega]`, with `\Omega>0` and `s=\Omega R/U_\infty`; the direct cardinal check gives downstream velocity on both gap-facing rear cardinals and upstream velocity on the two outer cardinals. The accepted `s=3.55` endpoint is settling-qualified and has the authoritative downstream full-cross-section relative velocity-deficit `E_inf_vector(q_ctl,q_in)=0.0231672176752314` at `x/D=10`; nearby values are approximately `0.0232525`, `0.0231671` and `0.0312490` at `s=3.45,3.55,3.65`. The spatial profile L2 at `x/D=10` is `0.0153919` and remains a diagnostic, while `q_blk` is non-ranking. Thus `s=3.55` is a qualified endpoint, not a continuous optimum or universal law; the apparent local minimum remains provisional pending restarted bracket, continuation, convergence and held-out qualification. [V5 endpoint manifest; steady v3b report; display/profile authority] + +The sign check gives the shortest physical reading available from the endpoint. Positive rotation of the upper rear cylinder drives its gap-bottom cardinal downstream and the lower rear cylinder’s negative rotation drives its gap-top cardinal downstream; the accepted actuation therefore belongs to a base-bleed/gap-jet family, not a boat-tail family. Endpoint gap-flux, near-wake, recirculation, vorticity and downstream-profile diagnostics are compatible with describing a gap-facing or near-wake reorganisation and a low-deficit downstream profile. They remain observations and bounded hypotheses: the available package does not establish the arrows from wall motion through shear or separation to gap momentum, base pressure, force or downstream deficit, and the accepted `s=3.55` and reverse `s=5.2` states are not amplitude-matched. [V5 wall oracle; NS ledger; steady display; Round-1 theory dossier] + +The shortest validated theory reference is an outer impermeability calculation, not a finite-Re rotating-wall model. For one circle, the exact uniform-flow-plus-circulation trace is `u_\theta(a,\theta)=-2U\sin\theta+\Gamma/(2\pi a)`: impermeability leaves `\Gamma` independent, and for `U\ne0` no constant circulation can impose the full rotating no-slip tangential trace. The MFS/strip construction therefore supplies a reference family only after its validation gates; the current derivation records the exact-circle and independent unbounded Laurent checks as validated bounded mathematics, while dense off-grid, sector, conditioning, source-radius/order and image-layer gates are required before interpreting a new MFS field, and no publication-ready MFS field is implied here. The attractive cancellation route fails its decisive sign check: the strip outer reference requires `g_opt=+6.147944`, whereas the accepted finite-Re endpoint’s descriptive fit is `g=-12.200554`. The failed route is retained because it limits the interpretation; it cannot be silently replaced by a rotating no-slip closure. [DERIVATION.md; current strip and finite-Re authority; LITERATURE.md] + +The integrated map therefore constrains, without explaining, one set of compatible, non-equivalent observations. The Legacy Kármán SR deletion test ranks its persistent rear constant above the tested rear-lift feedback under a fixed parent-relative DTW window; the corrected Legacy CCD ledger says its constant-control mean-field reference accounts for `93.42%` of the measured zero-to-DRL ROI target-error reduction, leaving a `6.58%` increment organized descriptively by action-correlated correction-field modes; the separate V5 steady branch supplies the accepted sign and a low-deficit endpoint at a rear-rotation scale of order `s=3.55`. These analyses organize separate action-space and field-role observations around a persistent/constant reference, without a common estimator or independent triangulation. They use different chains, roles, domains, masks, windows and estimands: they are compatible observations, not replication, validation, agreement, a pooled metric or a closed control skeleton. This bounded synthesis therefore contextualizes, but does not explain, the persistent/constant reference before bridging qualitatively to the planned open-loop experiment—steady operation may be inspected for straighter dye streaklines and the illusion operation for changed shedding frequency. Experiment remains qualitative, and the computational interpretation stops before mechanism, stability, optimum, momentum restoration, causal closure or cross-chain validation. A decisive next test would combine amplitude-matched branches with held-out endpoint evidence, a validated outer-reference comparison and a complete same-control-volume Navier–Stokes momentum/mechanical-energy budget, followed by synchronized quantitative experiment if the claim is to cross the CFD boundary. [Modules 05–06; steady NS/theory authorities; Round-2 experiment boundary] + +## Layer 2 — local provenance and claim-to-evidence ledger + +| Narrative claim | Exact current authority / artifact | Chain, solver, geometry, case and Re | Comparator, metric/estimand, ROI/window | Status / verification boundary | +|---|---|---|---|---| +| Historical steady discovery and distinct contract | Round-2 `05_REVISED_STRUCTURE_FREEZE.md` §§2, 3, 5; `src/steady_pinball_theory/README.md`, `RESULTS.md`; `src/SR_analysis/results/runs/article2-steady-analysis-20260720/interpretation.md` | V5 steady/free-slip versus LegacyCelerisLab Kármán; three-cylinder pinball, body order explicitly separate; V5 `Re_D=50`, Legacy `Re_code=100` means `Re_D=50` only within Legacy’s own convention | Steady is contextual; Legacy SR/CCD retain their own role-local estimands | Current authority read; not independent CFD recomputation or universal artifact audit | +| Accepted branch and direct sign | `steady-contract-v5-torque-d20-20260808/accepted-s3.55/manifest.json`; `steady-article-publication-v3b-20260809/REPORT.md`; `contract.py`/current steady README | V5 CelerisLab/LBM, `D=20`, `R=10`, uniform inlet, free-slip lateral walls, rotating no-slip cylinders; accepted action `[0,+\Omega,-\Omega]`, `\Omega=0.00355`, x-right/y-up | Cardinal wall velocities; branch/sign oracle, not a field metric | Current manifest-bound contract; direct wall check recorded by authority; artifact leaf audit deferred | +| Low-deficit endpoint | Same accepted endpoint manifest and publication v3b; `figures/summary/profile_Einf_vector.csv` | V5 free-slip `Re_D=50`, accepted controlled endpoint, settling window 10, final `tU_\infty/D=250` | Full-cross-section two-component `E_inf_vector(q_ctl,q_in)` at `x/D=10`: `0.0231672176752314`; `E_L2_vector=0.0153918657` is diagnostic; nearby `s={3.45,3.55,3.65}` `E_inf_vector≈{0.0232525,0.0231671,0.0312490}`; `q_blk` non-ranking | Qualified endpoint observation; not optimum, uniqueness, attraction, stability or causal intervention; endpoint artifact audit deferred | +| Reverse boundary | `steady-results-display-v2-20260809/README.md`; current steady `RESULTS.md`; profile CSV | V5 same nominal plant family, reverse branch `s=5.2`, but distinct amplitude and reverse sign | `E_inf_vector(x/D=10)=0.6898418` versus accepted `0.0231672`; this is not an amplitude-matched controlled comparison | Current display/CSV authority; descriptive branch contrast only, no mechanism or stability inference | +| Gap-facing physical reading | V5 manifest `wall_oracle`; `steady_pinball_theory/LITERATURE.md` sign master map; `ns-ledger-v2-oracle-bound-d20-20260809/analysis.json` | V5 accepted branch, rear gap/outer cardinal samples; endpoint NS diagnostic ledger | Signed gap fluxes, near-wake/recirculation/vorticity and profile diagnostics are endpoint spatial observations; no single pooled score | Bounded observation/hypothesis; no causal arrow, force ownership or closed budget | +| One-circle outer reference | `DERIVATION.md` §§5, 11; `LITERATURE.md` Crowdy (2006), DOI `10.1016/j.euromechflu.2005.11.005`; Ueda et al. (2003), DOI `10.1017/S002211200300627X` | Irrotational Euler/Neumann outer problem; one-circle exact identity, not V5 finite-Re no-slip solver | Wall normal/tangential trace identity; no downstream V5 metric | Existing derivation; exact-circle mathematics separately checked in the derivation record; no finite-Re mechanism transfer | +| MFS/strip gate and failed sign | `steady-strip-modal-analysis-20260804-v4/analysis.json`; `steady-finite-re-bridge-analysis-20260804-v4/analysis.json`; `DERIVATION.md` §§11–13 | Outer strip/unbounded potential references with finite-image MFS; finite-Re descriptive contour projection from accepted V5 endpoint | Strip cancellation `g_opt=+6.147944`; finite-Re descriptive fit `g=-12.200554`; `same_sign=false`; strip reference `BOUNDED`, confinement mechanism `FAIL` | Current authority; sign conflict is a genuine interpretation blocker for that route; MFS field interpretation remains gate-dependent and no new field is promoted | +| Partial NS/budget boundary | `ns-ledger-v2-oracle-bound-d20-20260809/analysis.json`; v3b report/display README | V5 accepted/reverse endpoint diagnostics, one body-enclosing rectangular CV | Endpoint spatial fluxes, dissipation, gap flux and actuator-on-fluid power; storage and body-adjacent terms unavailable, residual `null` | Current partial ledger; mechanical-energy closure `NOT_CLOSED`, causality `NOT_ESTABLISHED`, force ownership not established; authority-led raw-term deferral | +| Legacy SR magnitude context | `src/SR_analysis/results/runs/article2-steady-analysis-20260720/interpretation.md`, `steady_constant_correspondence.json`; SR current claims and Module 05 | LegacyCelerisLab disturbance-free contextual roles; separate Legacy geometry/API and action convention | Steady sweep `A=0…6`, best listed `A=5`, Legacy DTW similarity `0.9872116`; Kármán law deployment `0.9664944`; rear mean `(-3.430589,+3.431828)`, fitted magnitude `3.431209` | Contextual calibration only; not pooled with V5 `E_inf_vector`, not momentum equality or mechanism | +| Legacy CCD compatible observation | Module 06 current corrected authority; `src/CCD_analysis/RESULTS_INDEX.md`, `FINAL_RESULTS.md`, corrected manifests | Legacy `karman_re100`, target/zero/constant/DRL roles; `Re_D=50` under Legacy `Re_code=100`; exact four-role common mask | Coordinate-weighted ROI mean errors `E_zero=0.4694352273`, `E_constant=0.1110140739`, `E_DRL=0.0857787860`; `93.42/6.58` scalar error-difference share; separate `19×10` residual | Current descriptive/noncausal result; not steady evidence and not a paired intervention; dense arrays/leaf audit deferred | + +### Existing derivation, independent checks and open conjectures + +- **Existing derivation:** one-circle Euler trace, fixed-circulation outer uniqueness under stated hypotheses, rear-opposite potential/dipole algebra, MFS construction, strip finite-image relations, `E_inf_vector` definition and partial NS-ledger identity. +- **Independently checked/validated at bounded level:** current authority records exact-circle failure controls, bounded agreement of independently discretized unbounded MFS and Laurent/Fourier checks, finite-image convergence observations without an asymptotic tail claim, direct wall-cardinal sign, accepted endpoint settling and the finite-Re descriptive sign fit. These do not validate an MFS field as finite-Re physics. +- **Open conjecture:** accepted gap-facing motion may participate in a base-bleed/gap-jet-family near-wake organisation and may be compatible with a low-deficit endpoint; a persistent rear rotation may provide a mean compensation-like contribution with a smaller dynamic correction. Neither conjecture is a mechanism, momentum restoration, stability statement, optimum or causal law. + +## Figures, equations and table contracts + +1. **Accepted/reverse profiles and fields plus `E_inf_vector(s)` curve.** Source from the current steady display/profile CSV and endpoint fields; show accepted `s=3.55`, reverse `s=5.2`, stationary reference and nearby accepted sweep values. Caption must state V5/free-slip `Re_D=50`, full-cross-section `q_ctl` versus `q_in`, `x/D=10`, diagnostic L2, reverse amplitude mismatch, and endpoint—not optimum/stability—status. Redraw is dependent on current manifests/field payloads; no new publication-ready figure is claimed. +2. **Action-sign schematic.** Redraw the body order and four rear cardinal velocities from the accepted manifest. It establishes the sign and gap-facing/outer-facing observation; it does not establish circulation, base-bleed causality or boat-tail equivalence. +3. **Shortest outer-reference/sign-conflict panel.** Use the validated one-circle trace and a compact `g_opt=+6.147944` versus `g=-12.200554` sign comparison. If an MFS field is retained, all dense off-grid, sector, conditioning, source-radius/order, image-layer, one-circle and independent-reference gates must be visibly complete; otherwise leave the field in the supplement/open ledger. This panel does not establish rotating no-slip finite-Re physics. +4. **Integrated evidence map.** Nodes are Legacy SR term ranking, Legacy corrected mean/CCD organization, V5 steady endpoint and qualitative experiment bridge. Solid arrows mean same-contract definition or result; dashed arrows mean compatible observation across non-equivalent estimands; broken/unresolved arrows mean mechanism, causality or closure is open. The map must print chain, metric and status and must not be rendered as a causal flow diagram. + +**Equation budget:** reuse the wall law/action sign and `s`, the steady `E_inf_vector` definition, and either the one-circle trace or the partial NS-ledger identity. The full MFS, strip-image, multipole and CV derivations belong in the supplement unless their current validation gates are explicitly closed. + +## Claim ladder and interfaces + +**Green / supported:** accepted V5/free-slip sign contract; direct wall-cardinal check; settling-qualified `s=3.55` endpoint; `E_inf_vector` at `x/D=10`; profile L2 as diagnostic; reverse high-deficit endpoint as a distinct non-amplitude-matched observation; failed potential-cancellation sign; partial rather than closed NS ledger. + +**Amber / bounded:** low-deficit endpoint is compatible with the recurrent Kármán near-constant rear-rotation scale; accepted wall motion is in a base-bleed/gap-jet family; steady, SR and corrected mean/CCD observations can be integrated as compatible, non-equivalent context; qualitative experiment is a prospective bridge. + +**Red / prohibited without new evidence:** mechanism, causal gap-jet or momentum-restoration claim; `Gamma(Omega)` closure; MFS-to-no-slip transfer; stability, branch attraction, optimum or universal `s` law; Legacy/V5 numerical continuation/equivalence; arithmetic pooling or replication/validation/agreement/triangulation language; quantitative experiment validation. + +**Imports:** Modules 03–06 supply chain, metric, Legacy SR, corrected mean/dynamic and CCD boundaries. The current steady authority supplies the V5 contract, accepted sign, endpoint, theory failure and incomplete budget. + +**Exports to Module 09/10:** a bounded physical synthesis (`persistent rear rotation + smaller correction` as compatible organization only), the failed potential-sign route and incomplete-budget decisive tests, and a qualitative experiment bridge. No quantitative steady number, sign convention or endpoint metric may be transferred to Legacy without its own contract. + +## Near-collision check + +The Legacy SR fitted constant magnitude (`3.431209` in `alpha=omega/U_0`) and the V5 steady endpoint (`s=3.55`) are numerically similar dimensionless labels but use different action parameterizations, chains, plants and objectives; they are related contextual diagnostics only, not amplitude agreement, validation or an arithmetic comparison. CCD has no actuator-magnitude comparison here: its constant mean is a field-role reference under the corrected four-role estimand and can join the synthesis only as a non-equivalent mean-field observation. No arithmetic combination, replication, validation, agreement or triangulation wording is permitted. + +## Defects, gates and coverage ledger + +**Systematic/module-specific classification:** the current Round-3 controls require a cross-module near-collision check; this module applies it explicitly. Module-specific risks are the V5/Legacy sign temptation, provisional `s` minimum, MFS validation status and partial NS budget. No control-plane edit is authorized in this one-file task. + +**Genuine blockers:** none for the bounded section text. The potential sign conflict is a genuine blocker to that mechanism route, not to this bounded synthesis. A retained MFS field panel becomes blocked until its listed validation gates are complete; an exact artifact-audit claim becomes blocked if authority cannot bind the panel source. + +**Authority-led deferrals:** raw endpoint fields, external/symlink-backed roots, leaf hash recomputation, complete MFS raw arrays and full NS terms are deferred because current authorities bind the roles, numbers, contract and status without conflict. These deferrals do not authorize stronger claims. + +| Coverage status | Sources and reason | Evidence status | +|---|---|---| +| `read` | Current Round-3 master/rule/quality/interface ledger and Wave-A audit; Round-2 freeze/style; current Modules 03–06; Round-1 steady, SR, CCD/OID and coverage dossiers; current steady README, RESULTS, DERIVATION, LITERATURE, evidence README/INDEX, v3b report, display README, V5 endpoint manifest, strip/finite-Re authorities, NS ledger, validation authority and SR steady correspondence | Read directly; not equivalent to independent recomputation or universal artifact audit | +| `mapped` | Current figure manifest/CSV and authority-linked external roots used to identify redraw dependencies; archive/history only for replacement navigation | Mapped/indexed, not read as independent evidence; not promoted | +| `not-covered` | New CFD, new MFS computation, full raw-field/NPZ audit, universal hashes, new literature search, synchronized experiment analysis | Outside first-pass scope; no result inferred | +| `external-inaccessible` | Symlink-backed/external endpoint and dense theory/NS payloads not fully exposed through ordinary repository reading | Authority-led `artifact-audit deferred`; nonblocking for bounded text, blocking for any retained unsupported panel or reproducibility claim | + +## Anti-index / anti-AI audit + +The narrative has five argumentative paragraphs with local caveats, not a package inventory. Numbers appear only where they change the inference; chain, comparator and metric distinctions are repeated only at the necessary bridge. No archive result is promoted, no V5 sign is transferred to Legacy, no spatial L2 is pooled with DTW or CCD, no potential field is presented as a mechanism, and no first-pass readiness claim is made. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/09_EXPERIMENT_AUTHOR_INTERFACE.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/09_EXPERIMENT_AUTHOR_INTERFACE.md new file mode 100644 index 0000000..037c116 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/09_EXPERIMENT_AUTHOR_INTERFACE.md @@ -0,0 +1,151 @@ +# Round 3 — Qualitative experiment author interface + +**Status:** first pass; author interface for Frank, not manuscript prose and not self-ready. Frank retains authorship of the subsection. This module reserves a concise qualitative open-loop experiment subsection and defines the evidence and provenance needed before any prose, caption or figure is promoted. + +**Coordinator second-audit disposition — PASS:** interface ready for Frank/Wave C imports. Final prose and any figure remain blocked by the author-supply/provenance gate; this is not final manuscript prose. + +## Section question and bounded answer + +**Question.** What does the physical deployment demonstrate qualitatively, and what evidence is still required before it can be presented as an experimental result rather than a feasibility demonstration? + +**Answer ceiling.** Under the author-described apparatus and open-loop operation, the experiment can support only bounded qualitative feasibility observations: steady operation appears to produce straighter dye streaklines and illusion operation visibly changes shedding frequency. It does not currently support synchronized force/PIV validation, quantitative field matching, closed-loop experimental validation, or a causal explanation of the observations. + +## Source boundary and coverage ledger + +The author-described facts below are preserved as `[AUTHOR]`, not independently verified. External facility literature may motivate measurement cautions or future design choices, but cannot establish the DynamisLab apparatus, its conditions or its results. + +| Status | Sources inspected | Meaning | +|---|---|---| +| `read` | Round-2 `05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md`; Round-3 rule, quality gate and interface ledger; ready M07 `07_CROSS_CASE_EXTENSIONS.md`; ready M08 `08_STEADY_SYNTHESIS.md`; Round-1 `08_EXPERIMENT_AND_CASE_METRICS.md`; Round-1 `06_CURRENT_DOCUMENT_COVERAGE_AUDIT.md` | Read as narrative/claim controls. Read is not independent verification or artifact audit. | +| `mapped` | Repository experiment references and current case/metric interfaces named by those authorities | Mapped/indexed material is not read evidence and does not establish an experimental result. | +| `not-covered` | Complete local raw experiment package, synchronized force/PIV data, calibration records, repeatability analysis and new figure generation | Not available or outside this first pass; do not fill gaps from memory, plots or CFD. | +| `external-inaccessible` | Undermind Oil-tunnel background material and hidden/external raw facility artifacts not exposed in the repository | Context only after identity/reading level is resolved; cannot establish internal apparatus/results; raw audit deferred. | + +No current internal experiment document with an auditable apparatus/data package was located beyond the Round-1 authority above. Current status is author-described and provenance-incomplete, not independently verified. + +## Layer 1 — author-facing paragraph scaffold + +### Paragraph 1 — purpose, facility and apparatus boundary + +**Opening job:** establish deployability and the experimental boundary in one compact paragraph, without turning the subsection into a construction diary. + +> To assess whether the learned actuation could be deployed physically, [we/Frank] built a system from scratch in a recirculating water tunnel, using an isolated test section as a still-water towing section. A linear guide/rack and gantry carriage moved the [declared geometry] while [force sensor, ADC, Raspberry Pi, motor drivers, cylinders and power system] provided the actuation and acquisition hardware; Python was used for hardware/software deployment. The trials were operated **open loop**, with [exact motor/action waveform and sign convention to be supplied]. Because the towing speed and resulting hydrodynamic force were very low, the available force feedback was below a useful closed-loop level under the present conditions. [Insert only facility dimensions, water conditions, geometry, speed and trial identifiers after the provenance gate passes.] + +**Evidence level:** `[AUTHOR]` apparatus and deployment description; not independently verified. This establishes physical feasibility of deployment, not measurement accuracy or policy validation. + +**Computational-to-experiment bridge:** this is physical deployment of the steady and illusion actuation objectives, not a reproduction of the Legacy/V5 CFD chain. Do not transfer CFD Reynolds conventions, solver fields, L2/DTW values, SR laws or CCD interpretation without a separate same-plant, calibrated mapping. + +### Paragraph 2 — bounded qualitative observations + +**Opening job:** state only what archived raw media and trial identity can support, with comparator and observation kept local. + +> In the steady comparison, the dye streaklines in [trial/control/reference conditions] appeared [straighter/less deflected] over [declared observation region and time window]. In the illusion comparison, the dye visualization showed a visible change in shedding frequency under [declared open-loop action and trial ID]. These are qualitative image observations, not velocity or force measurements: no synchronized calibrated PIV/force package was available for the present comparison, and no quantitative field matching was performed. [Insert whether the observation was repeated, how frames were selected, and exact raw-media provenance.] + +**Evidence level:** `[AUTHOR]` observation, conditional on raw image/video provenance. Keep “appeared” unless a declared image-analysis protocol and uncertainty support stronger wording. “Changed shedding frequency” remains visual/qualitative unless frame rate, timing and event extraction support a physical frequency estimate. + +**Comparator rule:** name the actual trial/reference pair. Do not call dye a CFD-to-experiment match, field restoration, force reduction or experimental validation. Steady straightness and illusion shedding-frequency change are separate observations, not one efficacy score. + +### Paragraph 3 — limitation and next decisive experiment + +**Opening job:** place the main limitation beside the observation and define the next evidence threshold. + +> The present setup therefore provides a qualitative open-loop feasibility demonstration rather than a closed-loop experimental validation. Thermal convection is a **suspected confound** under the low-speed, low-force conditions, but the present record does not prove that it was the sole, or even dominant, source of background motion or force contamination. A quantitative comparison would require [synchronized calibrated force and PIV or an explicitly bounded image/sensor protocol], background blank controls, repeat trials, calibration and uncertainty records, and a traceable mapping between the computational target/reference and the physical acquisition. Until those records are available, the experiment should remain a qualitative main-text/supplement decision under the figure gate below. + +**Evidence level:** `[AUTHOR]` limitation and `[OPEN]` next-test requirements. The bridge to M10 is feasibility → evidence ceiling → decisive future test, not feasibility → validation. + +## Layer 2 — author supply checklist and provenance contract + +Frank must supply, or explicitly mark unrecoverable, the following before final prose or a figure request. “Not available” is acceptable; it must not be silently replaced by an estimate. + +### A. Facility, fluid and geometry + +- [ ] Facility identity and test-section dimensions: tunnel/channel, isolated still-water section, walls/free surface and relevant boundaries. +- [ ] Water conditions: temperature/variation, preparation, fill/settling procedure, pump state and whether circulation was stopped or isolated. +- [ ] Cylinder/geometry identity: diameter(s), spacing, body order, span/depth, mounting, blockage and coordinates; distinguish experiment from Legacy/V5 geometry. +- [ ] Towing direction, carriage origin, travel range, acceleration/deceleration and settling interval. +- [ ] Nominal and measured towing speed, speed trace if available, intended/estimated experimental `Re_D`, definition and viscosity source. Do not infer it from CFD labels. + +### B. Actuation and trial identity + +- [ ] Exact motor/action waveform for steady and illusion: amplitude, frequency/timing, phase/offset, duration, command units and physical-motion conversion. +- [ ] Action signs and body ordering in experimental coordinates; identify directly documented versus reconstructed signs. +- [ ] Trial IDs, date/time, case label, control/reference condition, geometry/setup version and excluded/failed trials. +- [ ] Repeat count per condition and rule for selecting the shown trial; state whether the observation is one sequence or replicated. +- [ ] Open-loop timing: command start, carriage motion, dye injection and what was/was not synchronized. + +### C. Raw media and image provenance + +- [ ] Raw image/video files, immutable filenames or hashes, camera, view, field of view and trial-ID linkage. +- [ ] Spatial scale/calibration, frame rate, exposure/shutter, resolution, lens/view geometry and cropping/stabilization/enhancement/frame dropping. +- [ ] Dye identity/concentration, injection location, volume/rate, timing and repeatability of injection protocol. +- [ ] Blank/background media for no-tow/no-actuation and, if available, residual-motion and post-settling conditions. +- [ ] Observation window/region; identify visual judgment versus a declared analysis procedure for “straighter” or “changed shedding frequency”. +- [ ] Figure permissions, ownership, consent where relevant and permission to archive raw media in the supplement. + +### D. Sensors, calibration and synchronization + +- [ ] Force sensor model, mounting, axes, range, sampling rate, tare/zero, calibration curve, drift, noise estimate and units. +- [ ] ADC configuration, Raspberry Pi clock/sample timing, motor-driver/encoder timing and clock offsets/dropped samples. +- [ ] Carriage position/speed measurement and motor-command logging; distinguish commanded waveform from realized motion. +- [ ] Synchronization marker shared by camera, force/ADC, carriage and actuation streams; if absent, state so. +- [ ] Explicitly state that no synchronized calibrated force/PIV data were available if that remains true. Never infer force feedback from deployment software, reward, dye or uncalibrated ADC. + +### E. Background controls, uncertainty and recoverability + +- [ ] Blank runs, settling/wait times, pump/carriage state and temperature/thermistor records near relevant walls/surfaces if available. +- [ ] Measured background velocity/dye displacement and method; do not subtract or attribute it without a declared control protocol. +- [ ] Calibration, timing, scale, registration and repeatability uncertainty actually supported. +- [ ] What cannot be recovered: raw media, trial IDs, speed, synchronization, calibration, repeat count or geometry. List each explicitly. + +### Provenance acceptance rule + +A figure or quantitative sentence may use only values/observations whose raw source, trial identity, condition, processing history and permission are traceable. Author memory can describe the setup as author-provided, but cannot supply missing numerical values. Authority-led deferral is acceptable for hidden artifacts only when an authority binds their role without conflict; it does not authorize a new panel or independent-verification claim. + +## Figure gate + +**Raw provenance must pass before any experiment image enters the main text.** The gate requires raw file/linkage, trial ID, condition, scale, frame rate/exposure, dye timing, processing history, repeat status and permissions. If any required provenance is missing, do not include the image as a main-text result. A supplement-only panel is permitted only if clearly labelled as an uncalibrated qualitative/open-loop demonstration, with available provenance and missing fields stated in the caption, and no quantitative inference. If raw media cannot be recovered, omit the panel rather than digitizing or reconstructing it from a plotted image or memory. + +### Candidate figure contracts + +1. **Optional apparatus schematic:** may show isolated still-water towing section, guide/rack, gantry, geometry and deployment signal path. It documents apparatus context and deployment feasibility; it does not prove calibration, accuracy, closed-loop operation or force-feedback quality. Avoid a component-by-component hardware diary. +2. **Optional steady/illusion dye plate:** may show raw, minimally processed media with separate trial IDs. It supports only qualitative streakline/shedding observations; it does not prove field matching, velocity/vorticity agreement, force reduction, causal shedding control or experimental validation. +3. **No synchronized force/PIV panel in this pass:** reserve it for later calibrated acquisition with clock alignment, common coordinates/mask and uncertainty. Do not register CFD fields onto dye images or imply a quantitative bridge without these inputs. + +## Claim ladder and exact nonclaims + +### Green — author-described, named qualitative scope + +- System built from scratch in a recirculating water tunnel with isolated still-water towing section, linear guide/rack, gantry carriage and listed deployment hardware, **as author-described**. +- Python hardware/software deployment enabled learned actuation to run on the apparatus, **as author-described**. +- Operation was open loop; useful closed-loop force feedback was not achieved under described low-speed/small-force conditions, **as author-described**. +- In named steady media, dye streaklines appeared straighter; in named illusion media, shedding frequency visibly changed, **only after raw-media provenance passes**. + +### Amber — bounded interpretation + +- Apparatus provides qualitative physical deployment/feasibility demonstration for steady and illusion actuation. +- Observations are consistent with qualitative wake modification under named open-loop conditions. +- Background thermal convection is a suspected confound motivating controls, not established as sole cause of force/image contamination. +- Demonstration motivates future synchronized, calibrated, repeated experiment; it does not raise the computational claim ceiling. + +### Red — exact nonclaims without new evidence + +Do not write or imply: “experimentally validated cloak/illusion”; “closed-loop experimental control”; “force feedback achieved”; “PIV confirms the CFD”; CFD-field matching; force reduction or field restoration from dye; quantitative shedding frequency, L2, DTW, uncertainty or efficacy percentage without its acquisition contract; thermal convection as proven sole cause; causal mechanism, momentum restoration, stability, optimality, robustness or generalization; or one common metric across dye, CFD, steady profiles, periodic phase and transient events. + +## Imports, exports and M10 handoff + +**Imports from M03–M08:** use frozen vocabulary `hydrodynamic cloaking`, `hydrodynamic illusion`, `wake-signature matching`, `field matching` and `qualitative open-loop experiment`; preserve Legacy/V5 separation, case-specific metrics, positive SR limited to Kármán/cloaking, negative Illusion SR, descriptive/noncausal CCD and steady as contextual. M07’s Illusion result is PPO capability plus historical/negative SR boundary; M08 supplies only a prospective qualitative bridge. None of these computational results validates apparatus or dye media. + +**Export to M10:** the experiment contributes a bounded feasibility observation and provenance-dependent figure option. Carry forward: no synchronized calibrated force/PIV validation, no quantitative field match, no closed-loop experimental validation, low-speed/background susceptibility and unresolved recoverability. The decisive next test is same-geometry, declared-condition, repeated, synchronized and calibrated acquisition with blank/background controls and uncertainty accounting. + +**Final bridge:** conclusion must separate “physical deployment was attempted and qualitative wake changes were observed” from “the computational target/reference was quantitatively matched.” The latter remains open. + +## Genuine blockers and first-pass disposition + +- **No blocker to this author interface:** section can be reserved with author-described facts and explicit slots. +- **Blocker to final prose/figure inclusion:** missing raw-media provenance, trial linkage or permission; missing conditions needed to identify the observation; or any quantitative/validation claim without synchronized calibration and a case-specific metric contract. +- **Module-specific evidence gap:** internal apparatus and raw experiment package were not independently audited. Oil-tunnel literature, CFD artifacts, memory and plotted images cannot repair this. +- **Disposition:** submit for parent audit/revision. Do not mark `ready` or self-ready. + +## Anti-pattern audit + +No values, hardware performance, citations or raw artifacts are invented; author memory is not upgraded to independent evidence; the section is not a hardware diary; suspected thermal convection is distinct from proven cause; steady/illusion/CFD metrics are not pooled; and limitations sit beside each possible observation. Final manuscript prose remains Frank’s responsibility after the provenance gate is resolved. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/10_LIMITATIONS_CONCLUSION.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/10_LIMITATIONS_CONCLUSION.md new file mode 100644 index 0000000..493bcfd --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/10_LIMITATIONS_CONCLUSION.md @@ -0,0 +1,88 @@ +# Round 3 revised candidate — Section 9: limitations and conclusions + +**Status:** revised candidate for second audit; not ready. This module answers the integrated claim-ceiling question after Modules 03–09. Module 09 is imported as a ready author interface, while final experiment prose and any panel remain blocked by the author-supply/provenance gate. + +## Section question and bounded answer + +**Question.** What integrated conclusion survives the Legacy/V5, chain, metric, causality, theory and experiment boundaries, and which decisive tests would raise the claim ceiling? + +**Bounded answer.** Named learned control provides capability demonstrations across the declared tasks; independent field matching is supported only for named Legacy Kármán Re100; and the Legacy Kármán action and field evidence supports a bounded control-skeleton interpretation organized by dominant persistent rear rotation plus a smaller dynamic correction. Cross-case Vortex and Illusion evidence remains named wake-signature or visual PPO capability under distinct contracts, with no Vortex event L2, conditional Illusion field L2 and unsupported Erase quantification; the author-described experiment interface remains provenance-gated. These levels do not establish a unbounded law or causal explanation. + +## Layer 1 — narrative and conclusion map + +### Discussion paragraph 1 — capability to Legacy Kármán field matching + +The strongest integrated result begins with capability, but its evidence is not a single pooled score. Under the named Legacy and V5 contracts, learned force-plus-sparse-observation control provides named wake-signature capability for the declared Kármán task and extends to named transient Vortex and non-zero-target Illusion demonstrations under distinct contracts. Independent spatial field matching is supported only for the named Legacy Kármán Re100 case: the controlled trajectory is closer to its target than physical zero in both complete-cycle mean-field and eight-slot phase-resolved L2 within the registered downstream ROI. DTW remains complementary, signal-level and case-specific; it does not replace L2, represent a physical delay or establish causality. The V5 seed/retention evidence and the Legacy Kármán field result therefore remain separate support chains, not a pooled convergence claim. [M03; M04; Wave-A audit] + +### Discussion paragraph 2 — executable SR and corrected mean/dynamic CCD + +The Kármán interpretation becomes narrower, rather than stronger, when the action and field analyses are placed in their own estimands. In the Legacy executable SR route, the mapped-shared law passes its named deployment checks, and parent-relative fixed-window deletions rank the persistent rear counter-rotation as the largest tested contribution, with smaller rear-lift feedback and a weak or mixed tested front correction. These are deletion tests, not causal ablations. In the corrected four-role Legacy CCD ledger, the constant mean accounts for 93.42% of the measured zero-to-DRL target-error reduction and the remaining 6.58% is organized by a separately centred, non-paired residual represented as action-correlated correction-field modes. Together these are compatible, non-equivalent action-space and field-role organizations that motivate a control-skeleton reading—dominant persistent rear rotation plus smaller dynamic correction—but they are not two independent confirmations and neither establishes term necessity, a unique law, a response mechanism or causal field attribution. The standardized PPO and corrected CCD mean errors are different estimands: they use different role acquisitions and role sets, retained windows, masks and weighting/normalization contracts, and are not combined arithmetically or described as replication, validation, agreement or triangulation. [M05; M06; M04–M06 reconciliation] + +### Discussion paragraph 3 — breadth, steady context and experiment boundary + +The interpretation is asymmetric across cases. The Vortex material supports only a comparable-scale, event-relative extension; no Vortex event L2 is currently available. Illusion PPO remains separate capability evidence, while Illusion SR is historical/negative and must not be used to negate or explain the PPO demonstration. Erase has no supported quantitative route under the historical evolving-force-FIFO target. The steady branch is separate contextual evidence: SR’s fitted constant magnitude 3.431 and the V5 endpoint at s=3.55 are related diagnostics only, not an amplitude comparison, cross-chain continuation or proof of the Kármán law. CCD’s constant mean is a field-role comparator, not an action magnitude. The failed potential sign and incomplete Navier–Stokes/momentum/mechanical-energy accounting leave the physical reading bounded. Finally, Module 09 reserves an author-described qualitative open-loop experiment interface: steady streaklines were described as straighter and Illusion shedding as visibly changed, but those observations remain conditional on raw-media provenance and trial linkage. They are not established paper results and do not provide quantitative field matching, calibrated force evidence or experimental validation. [M07; M08; M09; R1 experiment/case-metrics dossier] + +### Discussion paragraph 4 — decisive tests that change the ceiling + +The next tests should target the exact unresolved links rather than add cases without matched estimands. First, propose same-protocol Legacy Kármán interventions with predeclared compatible roles, windows and estimands for target, PPO, executable SR, constant and zero; do not assume that all roles can share identical phase semantics. Paired or independently parented realizations should be used where the design requires them. The action roles should then be compared at matched amplitude and sign, with the field evaluator carrying the same-chain L2 and case-specific DTW contracts. Second, Vortex requires an audited target/control/zero event acquisition and an event-relative downstream-ROI evaluator at the declared offsets; Erase requires an independently defined target scale and supported roles before any quantitative panel. Third, the persistent/dynamic interpretation requires a complete control-volume Navier–Stokes, momentum and mechanical-energy budget, including the terms currently missing from the partial ledger. Finally, crossing from CFD to experiment requires synchronized, calibrated PIV and body-resolved force measurements with registration, clocks, background blanks, declared repeats and the Module 09 provenance gate. These tests would raise specific claim ceilings; they would not retroactively merge chains or make non-equivalent metrics interchangeable. [M03; M05–M09; R1 experiment/case-metrics dossier] + +## Three-paragraph conclusion map + +### Conclusion paragraph 1 — answer in evidence order + +Open with the named capability: learned control provides wake-signature or visual PPO capability for the declared Kármán, Vortex and Illusion task demonstrations, with the cross-case contracts kept separate. Move immediately to the independent Legacy Kármán spatial result: field matching is supported only for that named case by the complete-cycle mean and phase-resolved L2 comparisons, while DTW is complementary signal evidence. Do not introduce a new number, citation or figure here. + +### Conclusion paragraph 2 — strongest interpretation and ceiling + +State that the Legacy Kármán action and field evidence supports a bounded control-skeleton interpretation: dominant persistent rear rotation plus a smaller dynamic correction. Name the SR deletion ranking and corrected four-role mean/dynamic CCD organization only as non-equivalent evidence. Make the mandatory boundary explicit: the M04 standardized PPO and M06 corrected CCD ledgers are different estimands and do not provide independent triangulation. The interpretation remains descriptive and bounded; it does not establish a unbounded law, causal explanation, necessity, sufficiency, uniqueness or claim of time-invariant behaviour. + +### Conclusion paragraph 3 — limits and one decisive testing program + +Close with the asymmetric envelope: Vortex has no event L2 yet; Illusion PPO is separate from negative Illusion SR; Erase lacks a supported quantitative route; steady 3.431 and s=3.55 are contextual diagnostics; theory and budgets remain incomplete; the experiment interface remains author-described and provenance-gated. Name the decisive program compactly: matched same-protocol interventions and roles, event evaluator/acquisitions, same-chain amplitude/sign comparisons, independent parent realizations where needed, complete budgets, and synchronized calibrated PIV/force measurements. The paper therefore establishes named capability across tasks, Legacy Kármán field matching, and a bounded Legacy Kármán control-skeleton interpretation, with the next ceiling set by direct intervention, closure and measurement tests. + +## Layer 2 — claim-to-evidence and interface ledger + +| Claim or boundary | Exact source/artifact | Chain, solver/geometry, case/role, Re | Comparator, metric/estimand, ROI/window | Status | +|---|---|---|---|---| +| Named capability and Legacy Kármán field matching | `ROUND3_BOTTOM_UP/04_KARMAN_PERFORMANCE.md`; `03_CONTRACTS_METRICS.md` | Legacy Re100 Kármán principal; separate V5 Re100 secondary | Named wake-signature/visual PPO capability under distinct cross-case contracts; Legacy target/controlled/zero complete-cycle mean and eight-slot phase L2 in registered ROI; DTW complement | Read; raw fields/masks artifact-audit deferred | +| Persistent rear term and smaller feedback | `ROUND3_BOTTOM_UP/05_KARMAN_SR_LAW.md`; `tables/term_deletion.md` | Legacy Kármán re-codes 50/100/200/400; native Legacy action | Parent-relative fixed 40-step native DTW deletion; rear constant largest tested | Read; deletion is not causal ablation | +| Corrected mean/dynamic organization | `ROUND3_BOTTOM_UP/06_KARMAN_FIELD_CCD.md` | Legacy Re100; target, zero, constant mean, DRL; exact common mask | Coordinate-weighted mean error; separately centred non-paired 19×10 residual; CCD action association | Read; descriptive/noncausal | +| M04/M06 non-equivalence | `00_WAVE_A_COORDINATOR_AUDIT.md` §§28–37; M04/M06 exports | Distinct acquisitions, role sets, windows, masks and chains/contracts | M04 unweighted U0-normalized geometry guard versus M06 coordinate-weighted exact common mask | Read; never arithmetic combination/triangulation | +| Cross-case ceiling | `ROUND3_BOTTOM_UP/07_CROSS_CASE_EXTENSIONS.md` | Legacy Vortex; V5 Illusion PPO; Legacy Illusion SR/Erase history | No Vortex event L2; Illusion PPO capability; Illusion SR negative; Erase unsupported | Read; gaps preserved | +| Steady/theory/experiment limits | `ROUND3_BOTTOM_UP/08_STEADY_SYNTHESIS.md`; `ROUND3_BOTTOM_UP/09_EXPERIMENT_AUTHOR_INTERFACE.md`; `ROUND1_BOTTOM_UP/08_EXPERIMENT_AND_CASE_METRICS.md` | Separate V5 steady and Legacy Kármán; author-described open-loop water-tunnel interface | SR 3.431 and V5 s=3.55 contextual; failed sign; incomplete budgets; experiment observations conditional on raw-media provenance | Read; M09 interface ready, final prose/panel blocked | +| Decisive tests | M03, M05–M09 exports; R1 experiment/case metrics | Matched same-chain roles/interventions; exact event roles; calibrated experiment | Same-protocol metrics, event L2, amplitude/sign, complete budgets, synchronized PIV/force | Open tests, not results | + +### Interface ledger + +- **Imports:** M03 chain, role, action, Reynolds and metric contracts; M04 Legacy Kármán field-matching result; M05 executable SR/deletion ceiling; M06 corrected four-role mean/dynamic and CCD boundary; M07 cross-case gaps; M08 steady/theory bridge; M09 author-described experiment interface and provenance gate. +- **Export to final audit:** named capability across tasks, Legacy Kármán field matching, and a bounded Legacy Kármán control-skeleton interpretation. No export carries a pooled metric, cross-chain continuation, causal mechanism, unbounded law or quantitative experiment result. +- **Genuine blockers:** none for this bounded first-pass text. Retained quantitative Vortex/Erase panels remain blocked by role/evaluator contracts; quantitative experiment remains blocked by missing synchronized calibrated PIV/force data. Hidden artifacts are `artifact-audit deferred` where authorities bind the current claim without conflict. + +### Coverage ledger + +- **`read`:** Round-3 controls/interface and Wave-A audit; Round-2 freeze/style; ready Modules 03–09; Round-1 experiment/case-specific metric dossier; current authorities cited above. Evidence is read, not independently recomputed or universally artifact-audited. +- **`mapped`:** package manifests, figure navigation and authority-linked external result roots referenced by Modules 03–09. Mapped is not read, independently verified or artifact-audited. +- **`not-covered`:** new literature, CFD, retraining, event evaluator, Vortex/Erase acquisitions, complete budgets, synchronized experiment processing and new figures. +- **`external-inaccessible`:** hidden/symlink-backed raw fields, selected model/normalizer bundles and dense theory/CCD payloads where current authorities bind bounded statements; artifact audit deferred. + +## Figure, table and equation contracts + +1. **Integrated evidence map:** orders capability, Legacy L2, SR deletion, corrected mean/dynamic CCD, cross-case, steady, theory and experiment. Dashed links mean compatible but non-equivalent observations; unresolved links mark causality and closure gaps. It does not depict a causal chain or pooled score. +2. **Compact limitations table:** lists chain, case, role, estimand and blocked claim for Vortex, Illusion SR, Erase, steady, theory and experiment. It does not add results or convert missing artifacts into negative findings. +3. **No new equation or numerical figure is required for the conclusion.** Existing panels retain their own captions and limitations; this first pass does not imply that all proposed panels already exist. + +## Claim ladder + +**Supported / green:** named learned control provides wake-signature or visual PPO capability under the declared cross-case contracts; independent Legacy Kármán field matching shows the controlled field is closer to target than physical zero under its mean and phase L2 estimands; executable Legacy SR deletion ranks the persistent rear term largest among tested terms; corrected CCD organizes a smaller residual descriptively as action-correlated correction-field modes. + +**Bounded / amber:** these results support a Legacy Kármán control-skeleton interpretation consisting of dominant persistent rear rotation plus a smaller dynamic correction; separate steady diagnostics provide contextual information; cross-case demonstrations show named capability breadth under changed contracts. + +**Prohibited / red without new evidence:** unbounded transfer, causal explanation, necessity, sufficiency, uniqueness, claim of time-invariant behaviour, momentum restoration, independent triangulation, cross-chain continuation, quantitative Vortex or Erase efficacy, positive Illusion SR, or quantitative experiment claims. + +## Anti-repetition and first-pass audit + +- **Evidence order:** named capability → Legacy Kármán L2 → executable SR/deletion → corrected four-role mean/dynamic CCD → cross-case breadth → separate steady context → author-described qualitative experiment interface; the conclusion map follows the same order. +- **Near-collision:** M04/M06 are explicitly different estimands; no arithmetic, replication, validation, agreement or triangulation wording is used. SR 3.431 and steady s=3.55 are related contextual diagnostics only; CCD constant mean is not action magnitude. +- **Boundary:** no Vortex event L2 is invented; Illusion PPO is not merged with negative Illusion SR; Erase is not repaired from filenames; steady/theory/experiment do not raise the Kármán ceiling. +- **Terminology:** wake-signature matching, field matching, spatial L2, complementary DTW, control skeleton and action-correlated correction-field modes are used; causal and unbounded readings are excluded. +- **Layer control:** Layer 1 has four discussion paragraphs plus a three-paragraph conclusion map; Layer 2 carries provenance, coverage, interfaces and contracts. This is a revised candidate for second audit, not a readiness declaration. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md new file mode 100644 index 0000000..de8b483 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md @@ -0,0 +1,128 @@ +# Round 3 coordinator-level final consistency audit + +**Status: audit, not manuscript approval.** This coordinator audit reads the Round-2 freeze/style controls, all active Round-3 controls, and Modules 01–10 in full. It checks cross-module terminology, claims, contracts, bridges, redundancy and readiness; it does not recompute scientific artifacts, edit source modules or ledgers, regenerate figures, reconstruct masks, verify hashes, or validate the experiment. + +## 1. Scope and complete coverage ledger + +**Controlling identity:** *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball*. The active controls are the Round-2 `05_REVISED_STRUCTURE_FREEZE.md` and `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md`; Round-3 `.cursor/rules/jfm-round3-section-drafting.mdc`; `00_MASTER_AGENT_PROMPT.md`; `00_QUALITY_GATE.md`; `00_MODULE_INTERFACE_LEDGER.md`; `00_WAVE_A_COORDINATOR_AUDIT.md`; and active Modules `01_INTRODUCTION.md`–`10_LIMITATIONS_CONCLUSION.md`. Module 11 is this audit, not a manuscript section. + +| Status | Complete coverage | Boundary | +|---|---|---| +| `read` | Round-2 freeze/style; all five Round-3 controls/audits; Modules 01–10, each in full | Read is not independently verified or artifact-audited | +| `mapped` | Manifests, figure navigation, authority-linked external/symlink paths and artifact identities named by modules | Mapped is not read or numerical authority | +| `not-covered` | New CFD/training/SR/CCD; raw NPZ/dense arrays; universal hashes; solver-exact mask reconstruction; event evaluator; new figures; complete Erase roles; synchronized experiment processing; new literature search | Outside consistency audit; no claim inferred | +| `external-inaccessible` | Hidden/external fields, model/normalizer bundles, dense CCD/theory payloads and external/raw facility artifacts | Authority-led `artifact-audit deferred` only where current authority binds a conflict-free bounded statement; retained new panels remain gated | + +All active modules are included in the read ledger: M01 Introduction; M02 capability progression; M03 contracts/metrics; M04 Kármán performance; M05 Kármán SR law; M06 Kármán field/CCD; M07 cross-case extensions; M08 steady synthesis; M09 experiment interface; M10 limitations/conclusion. The interface ledger’s `ready` statuses mean ready for downstream dossier use, not manuscript approval or publication-ready artifacts. + +## 2. Global terminology audit + +Terminology is consistent and should remain frozen: + +- **Concept:** `hydrodynamic cloaking` means approach to a declared background/reference; `hydrodynamic illusion` means approach to a declared non-zero target/signature. Neither means universal invisibility or full-state equivalence. +- **Execution:** `wake-signature matching using forces plus sparse downstream observations`. This does not establish observability or optimal sensing. +- **Evaluation:** **field matching**, with spatial **L2** primary where supported. **DTW** is complementary, signal-level and case-specific; it is not spatial L2, physical delay, causal diagnosis or a universal cross-case score. Native/normalized DTW and similarity orientation must stay explicit; a higher similarity must never be called a lower error. +- **Interpretation:** **control skeleton** is a bounded post-evidence interpretation, not a mechanism, unique law, necessity claim or cross-case result. +- **Dynamic fields:** use exactly **action-correlated correction-field modes**. CCD is descriptive/noncausal and not superior or unique relative to POD. + +Pipeline `Level-2/Level-3` and `Stage-3 short/standard gate` remain distinct from spatial L2. Never call a validation level an “L2 gate.” + +## 3. Manuscript claim ladder audit + +The dossier preserves exactly this ladder: + +1. **Named cross-task capability:** named wake-signature or visual PPO capability across declared Kármán, Vortex and Illusion tasks under distinct contracts. +2. **Legacy Kármán Re100-only independent field matching:** independent spatial field matching only for named Legacy `karman_re100`/Re100 target, controlled and physical-zero roles in the declared downstream ROI; mean and phase L2 remain separate, with DTW complementary. +3. **Bounded Legacy Kármán/cloak-only control-skeleton interpretation:** executable Legacy SR, corrected four-role mean comparison and a separately centred non-paired residual organized by action-correlated correction-field modes support a bounded dominant persistent rear-rotation plus smaller dynamic-correction reading. This is not causal, necessary, sufficient, unique, optimal, stable, universal or transferable. + +M01 and M10 state this ladder; M02 and M04–M09 respect it. Positive SR remains Kármán/cloak-only. Illusion SR is historical/negative, CCD descriptive/noncausal, OID claim-free and steady contextual. + +## 4. Legacy/V5 and metric-boundary audit + +Legacy and V5 are separate executable chains: never pool values or imply numerical continuation/equivalence. Preserve solver and geometry, body order, action sign/calibration, case/seed/role, comparator, ROI/mask and window in every result. Legacy `Re_code=100` is `Re_D=50` under its Legacy `2D` convention; V5’s similarly labelled Re100 is its own chain. V5 Illusion `0.75` is a target radius ratio under the declared geometry, not silently a diameter ratio. Best-checkpoint discovery, retained evaluation and seed spread are not robustness. + +Periodic complete-cycle mean L2, eight-slot phase L2, transient event snapshots, Illusion mean/phase/DTW, Erase candidate mean fields and steady late/profile errors are non-equivalent estimands. Vortex offsets are event-relative, not phase. Steady profiles are not periodic means. Case-specific DTW windows/formulas cannot be pooled. + +### Explicit M04/M06 near-collision prohibition + +M04 standardized PPO mean errors and M06 corrected CCD mean errors are **different estimands**, despite close magnitudes and nominally coincident x extent. M04 uses three independently acquired target/controlled/physical-zero roles, a geometry guard, unweighted lattice-cell RMS after `U0` normalization and its complete-cycle/phase8 window. M06 uses target/zero/constant/DRL, a retained four-role window, an exact common solver-fluid mask and coordinate-weighted RMS on already nondimensional velocities. Never equate, subtract, average or cross-normalize them; never call them replication, validation, agreement, closure or independent triangulation. M06’s `93.42/6.58` share exists only in its corrected ledger. + +## 5. Section sequence and bridge audit + +The frozen order is: + +`Introduction → contracts/metrics → capability progression → Kármán performance → Kármán SR law → Kármán correction fields/CCD → Vortex/Illusion/Erase extensions → steady context/theory → qualitative experiment → limitations/conclusion`. + +The physical progression is explicitly **steady discovery → Kármán → Vortex → Illusion/Erase → qualitative experiment**. The full steady analysis returns later, after Kármán depth and cross-case extensions; this two-pass use preserves chronology without placing the full steady analysis first. + +Bridges are coherent: M01 converts gap to contracts; M03 enables bounded progression; M02 selects Kármán depth; M04 turns performance into action-law complexity; M05 turns term ranking into field-accounting; M06 prevents Kármán interpretation transfer; M07 changes temporal/target contracts; M08 contextualizes the persistent reference and theory limits; M09 separates deployment from validation; M10 closes with claim ceiling and decisive tests. + +### Duplicate ownership/deletion recommendations + +These are synthesis-stage recommendations only; no module is edited: + +- M01 P5, M02 P5 and M10 repeat the three-level ladder. M01 owns the full definition; M02 keeps only progression scope; M10 restates it once in conclusion order. Delete package-list repetition. +- M02 P3 and M04 P1–3 repeat Kármán L2 values. M02 owns the short Fig. 1 preview; M04 owns all detailed values, roles, ROI, windows and interpretation; remove duplicate result sentences during assembly. +- M04/M06 interface text, M06 P1–2, M08 P5 and M10 P2 repeat the near-collision rule. Keep the full technical statement in the coordinator/M06 interface and shorten later reminders. +- M05 owns SR formula/deletion; M08 owns V5 steady sign/magnitude context. Remove repeated formula/sweep or any implication of amplitude agreement. +- M06 owns residual/CCD/POD detail; M08/M10 retain only synthesis-level noncausal limits. +- M07 owns Illusion PPO versus negative SR; M10 states only the boundary. M09 owns the experiment provenance checklist; M10 retains only the qualitative/open-loop handoff. + +## 6. Figure/table/equation readiness matrix + +No status below implies panels already exist. + +- **Fig. 1:** text-ready as Kármán-dominant progression; steady, Kármán, Vortex and V5 `ill_075L` panels are dependency-gated. No experiment panel. Optional Re400 marker is drop-first. +- **Plant/action/ROI contracts:** text/table-ready; redraw is production work and does not prove observability, chain equivalence or exact masks. +- **Kármán L2:** text-ready from bound summaries; panel-ready only with raw role/target/manifest/rendering support. Geometry-guarded ROI and mask limitation remain captioned. +- **SR:** equation/text-ready; deletion table is bounded. Standardized PPO/SR/Zero panel is dependency-gated and must be omitted without exact same-protocol artifacts. +- **CCD:** text-ready under corrected four-role estimand; panels are dependency-gated on source publication arrays. Mean precedes residual/modes; POD cannot imply CCD superiority. +- **Cross-case:** text-ready for bounded Vortex/Illusion capability. Vortex quantitative event L2 is **blocked** pending exact roles, ROI/mask, offsets and evaluator; Illusion field L2 is conditional; Erase quantitative panel is **blocked**. +- **Steady:** text-ready as contextual V5 endpoint/sign/theory limit; profiles, reverse/MFS panels are dependency-gated, with MFS blocked until gates close. +- **Experiment:** author-supply/provenance-gated; no quantitative validation panel. +- **Integrated map/limitations table:** text-ready as noncausal synthesis aid; not a pooled score or causal graph. Conclusion needs no new equation/figure. + +## 7. Literature/citation identity audit + +The style guide records ten exact JFM identities at `full-PDF` level: Deng et al. (2020), Cornejo Maceda et al. (2021), Rabault et al. (2019), Paris et al. (2021), Li & Zhang (2022), Xia et al. (2024), Wang et al. (2024), Loiseau et al. (2018), Gautier et al. (2015) and Mao et al. (2015), with DOIs retained there. M01 records the exact DOI identities for Pendry et al. (2006), Leonhardt (2006), Vasquez et al. (2009), Ma et al. (2013) and Urzhumov & Smith (2012). Repository dossiers are labelled `full-report`/`read` where applicable; literature supplies context/style precedent only, never internal evidence or priority. + +Unresolved gaps: `Ren19b`, exhaustive sentence-level JFM coding, broader facility literature, and any metadata/read-level identity not already established in the controlling dossiers. Do not invent citations, DOI, quotations or priority language. No new citation or verification is added here. + +## 8. Experiment audit + +The experiment is **author-described qualitative open-loop dye only**, and provenance-gated. Allowed observations are that steady operation appeared to produce straighter dye streaklines and Illusion operation visibly changed shedding frequency, subject to raw-media provenance and trial linkage. There is no synchronized calibrated force/PIV validation, quantitative field match, closed-loop experimental validation, quantitative shedding frequency or causal explanation. Thermal convection is a suspected confound, not a proven sole cause. Missing apparatus, conditions, action waveform/sign, trial IDs, raw media, scale/timing, calibration, synchronization, repeats and permissions must be supplied or marked unrecoverable; otherwise omit the panel. + +## 9. Findings with severity and exact location + +`PASS` means text-ready for author synthesis, not manuscript approval. `REVISE` names the targeted file/location. `BLOCK` applies only to required content that cannot responsibly be drafted; artifact blockers are separated from module-text readiness. + +### PASS — module text readiness + +- M01 `01_INTRODUCTION.md`; M02 `02_CAPABILITY_PROGRESSION.md`; M03 `03_CONTRACTS_METRICS.md`; M04 `04_KARMAN_PERFORMANCE.md`; M05 `05_KARMAN_SR_LAW.md`; M06 `06_KARMAN_FIELD_CCD.md`; M07 `07_CROSS_CASE_EXTENSIONS.md`; M08 `08_STEADY_SYNTHESIS.md`; M09 `09_EXPERIMENT_AUTHOR_INTERFACE.md` as an author interface; and M10 `10_LIMITATIONS_CONCLUSION.md` all preserve their scope and claim ceilings. M09’s final prose is not yet supplied, by design. + +### REVISE — exact synthesis changes + +- `01_INTRODUCTION.md` P5 and `10_LIMITATIONS_CONCLUSION.md` Discussion/Conclusion: retain the exact three-level ladder once as full definition and once as concise conclusion; delete repeated package-list versions from M02/M04/M08/M10. +- `02_CAPABILITY_PROGRESSION.md` P3 and `04_KARMAN_PERFORMANCE.md` P1–3: M02 may preview Fig. 1; M04 owns detailed Legacy L2/DTW values and contracts. Delete duplicate numerical result prose during assembly. +- `06_KARMAN_FIELD_CCD.md` P1–2 and `08_STEADY_SYNTHESIS.md` P5/`10_LIMITATIONS_CONCLUSION.md` P2: retain the full M04/M06 different-estimand prohibition once; later mentions must not imply agreement or independent validation. +- `05_KARMAN_SR_LAW.md` P3–5 and `08_STEADY_SYNTHESIS.md` P5: keep SR formula/deletion and steady sign/magnitude in separate ownership; delete any amplitude-agreement or continuation implication. +- `09_EXPERIMENT_AUTHOR_INTERFACE.md` §§2–Figure gate and `10_LIMITATIONS_CONCLUSION.md` P3: M09 owns provenance; M10 keeps only qualitative/open-loop/provenance-gated status. +- Final manuscript assembly across all files: run a whitespace and LaTeX terminology pass for `Kármán`, `Re_D`, `Re_code`, `L2`, `DTW`, `E_mean`, `E_phase8`, `\text{}` labels, action-order notation and escaped `%`; choose display notation once without changing chain-local conventions. + +### BLOCK — retained content only + +- `02_CAPABILITY_PROGRESSION.md` Fig. 1 Vortex event-L2 panel: blocked until exact target/control/zero roles, target identity, common ROI/mask, offsets and evaluator output exist. +- `07_CROSS_CASE_EXTENSIONS.md` Erase quantitative panel/efficacy: blocked by unsupported target-scale and independent-role contract; filenames do not establish results. +- `05_KARMAN_SR_LAW.md` standardized PPO/SR/Zero numerical panel: blocked unless exact same-protocol role artifacts and comparator/window values are bound; text is unaffected if dropped. +- `09_EXPERIMENT_AUTHOR_INTERFACE.md` image/result panel: blocked until raw-media provenance, trial linkage, conditions and permission pass; no quantitative validation claim. +- `08_STEADY_SYNTHESIS.md` new MFS field panel: blocked until listed validation gates close; the bounded theory/sign failure remains usable. + +These are panel/artifact blockers, not blockers to the bounded text. No current blocker prevents author synthesis of the text dossier. + +## 10. Final disposition + +**READY FOR AUTHOR MANUSCRIPT SYNTHESIS, with this file remaining an audit rather than manuscript approval.** Before polished prose, the author must adopt the fixed terminology and exact claim ladder; assemble the frozen sequence and delete duplicated result paragraphs according to the ownership map; make M04 the sole detailed owner of Legacy Kármán independent field matching; preserve the M04/M06 prohibition; decide which optional panels are dropped or sourced; complete the LaTeX/whitespace pass; and supply or omit the experiment provenance-gated material. + +**Author supply list:** authority-bound source/rendering for each retained panel; same-protocol PPO/SR/Zero artifacts if retained; audited Vortex event roles/evaluator; independent Erase roles if proposed; validated MFS artifacts if retained; experiment facility/geometry/conditions, action waveform/sign, trial IDs, raw media, calibration/synchronization, repeats and permissions; and final bibliography/read-level confirmation without invented metadata or priority claims. + +This is a final **consistency audit**, not manuscript approval. diff --git a/docs/JFM_WYQ/ROUND3_BOTTOM_UP/README.md b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/README.md new file mode 100644 index 0000000..4259171 --- /dev/null +++ b/docs/JFM_WYQ/ROUND3_BOTTOM_UP/README.md @@ -0,0 +1,16 @@ +# Round 3 — Bottom-Up Section Modules + +Round 3 converts the Round-1 evidence dossiers and current package authority into author-readable, section-level drafts/dossiers approaching JFM prose. It is neither another raw index nor polished final manuscript prose. The parent agent coordinates dispatch, interfaces, audits and revisions; section agents do not self-declare manuscript readiness. + +## Controlling inputs + +Every module reads, in full or with explicit scoped coverage, `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md`, relevant Round-1 dossiers, and relevant current authority documents/manifests. Hidden/raw/external artifacts may be deferred only when an authority document describes the deferral. Legacy and V5 remain separate, and every number retains its artifact, comparator, metric and window. + +## Phases + +- **Wave A — hard evidence:** dispatch contracts/metrics, Kármán performance, Kármán SR law, and Kármán field/CCD modules. The parent reviews first passes for evidence completeness, narrative coherence/JFM style, interfaces, claim ceiling and redundancy, then returns targeted revision prompts. A module is ready only after the second audit. +- **Wave B — extensions and synthesis:** dispatch cross-case vortex/illusion/erase, then steady context/physical synthesis. Keep case-specific metrics distinct; transfer only explicitly licensed definitions or bounded context. +- **Wave C — framing:** draft introduction, capability/progression, qualitative experiment author interface, and limitations/conclusion after the analytical modules stabilize. Frank retains authorship of the experiment subsection. +- **Final audit:** coordinator performs whole-manuscript terminology, chain, metric, bridge, claim-ceiling and redundancy consistency audit; no new evidence is invented during synthesis. + +See `00_MASTER_AGENT_PROMPT.md`, `00_QUALITY_GATE.md`, and `00_MODULE_INTERFACE_LEDGER.md` for dispatch, review and interface contracts. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md new file mode 100644 index 0000000..b3dcd95 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md @@ -0,0 +1,33 @@ +# Round 4 Display and Equation Inventory + +**Inventory only.** No candidate panel, source array, rendering, table, or publication-ready figure exists merely because it is inventoried. Text readiness and panel/artifact readiness are independent. + +Classifications: `required`, `optional`, `dependency-gated`, `blocked`, `author-supply-gated`. + +| Display/equation family | Classification | Owner | Argumentative job | Readiness/dependency | Fallback | +|---|---|---|---|---|---| +| **Fig. 1 capability/progression** | `dependency-gated` | Capability | Steady discovery → Kármán → Vortex → `ill_075L`, Kármán dominant, configurations and evidence definitions distinct | Text architecture ready; each panel needs chain/case/seed/role/comparator/coordinate/metric/source/render provenance. Vortex event L2 blocked; Illusion PPO only; no experiment. Re400 optional/drop-first | Retain sourced panels; omit blocked annotations/Re400 | +| **Section 2 two-configuration geometry and DRL-flow schematics/tables** | `required` | Problem/method/evaluation | Decode parabolic/no-slip and uniform/free-slip configurations; body/action/sign; $x/D=10$, $y/D=0,\pm2$, radius-$0.25D$ two-component sensing; target/reward flow; ROI/roles/$Re_D$/metrics; compact CFD | Architecture frozen; sensor note is `read` and fixes geometry/ROI/metric boundaries; CelerisLab dossier is `read/full-report` and fixes K2 `partial pass` / S2 `pass` for current CelerisLab only. Redraw, per-result rows and artifact binding remain production dependencies. Does not prove observability, optimal sensing, configuration equivalence, canonical rerun completion, an exact mask, or older-solver validation; makes no Fig. 1 decision | Minimal geometry + DRL flow schematic and compact tables; provenance/detail to supplement | +| **Kármán performance display** | `dependency-gated` | Kármán performance | L2-first parabolic/no-slip mean/phase result; DTW complementary; uniform/free-slip retention secondary | Text/numbers bound; fields need exact roles, manifests, ROI/mask/window, rendering. Separate from M06 | Compact result table; omit unsourced redraws | +| **Section 2 method/evaluation equations** | `required` minimum | Problem/method/evaluation; reused by performance | Define bulk/mean-based $Re_D$, physical actuation, objective roles, `E_mean`, phase-resolved L2 and optional comparator-relative form; give DTW recurrence/path once because uncommon | Definition-ready at architecture level; current defaults source-bound; exact per-result settings and values pending, including learning-rate variation across retained runs. Spatial L2 is not Level/Stage; DTW is not delay/field equivalence | Keep only reused equations; move algorithm/settings detail to supplement | +| **SR law/deletion** | law/deletion `required`; PPO/SR/Zero panel `dependency-gated` | SR | Exact executable law/symmetry; deployment; largest-tested persistent term | Law/deletion text-ready. Same-protocol panel blocked without exact roles/comparator/window. Deletion noncausal | Keep law, symmetry, deletion; omit direct role panel | +| **CCD mean/share display** | `dependency-gated` | Field/CCD | Target/zero/constant/DRL means before residual; scalar error-difference accounting | Ledger bound; redraw needs publication arrays and exact mask/window. Cannot validate M04 | Compact scalar ledger if fields unavailable | +| **CCD residual/modes/POD sequence** | `dependency-gated` | Field/CCD | Define non-paired residual; show action-correlated modes, phase, POD boundary | Equation/text ready; panels need corrected parent/derived arrays, orientation, lineage, captions. No causality/lag/energy/superiority | Keep residual equation and concise statement/table | +| **Cross-case display** | overall `dependency-gated`; quantitative Vortex/Erase `blocked` | Cross-case | Event-relative Vortex, non-zero-target Illusion PPO, Erase boundary | Vortex visuals/Illusion capability are bounded candidates. Vortex L2 needs roles/offsets/ROI/mask/evaluator; Illusion L2 conditional; Erase roles absent | Use sourced visuals; omit quantitative Vortex/Erase and state gaps | +| **Cross-case event equation** | `optional` | Cross-case | Define conditional event-relative ROI error without calling offsets phase | Definition creates no roles/mask/evaluator/result | Use prose/table semantics | +| **Steady/theory display** | `dependency-gated` | Steady/theory | Separate uniform/free-slip endpoint/sign context; accepted/reverse boundary; failed closure | Text ledger ready. Fields need payloads and reverse amplitude-mismatch caption. New MFS field blocked | Sign schematic + endpoint table + one-circle/sign conflict; omit MFS field | +| **Steady/theory equations** | `required` minimum | Steady/theory | Wall law/spin ratio, steady metric, and shortest outer-reference or partial-budget boundary | Existing derivation/check states distinct; no inviscid rotating no-slip closure | Full MFS/multipole/strip/CV derivations to supplement | +| **Experiment display** | `author-supply-gated` | Experiment | Qualitative open-loop apparatus and, if gated, steady/Illusion dye observations | Needs Frank's conditions, action/sign, trials, raw media, scale/frame rate, processing, repeats, permissions. No calibrated force/PIV panel | Omit images; retain short author-written interface or bounded supplement media | +| **Integrated conclusion aid** | evidence map `optional`; limitations table `required` | Conclusion | Synthesize ladder, compatible/non-equivalent links, failures, decisive tests | Text-ready. Map is not causal or pooled. Conclusion adds no scientific equation | Keep limitations table; omit map if misleading/cluttered | + +## Equation ownership +1. Problem/method/evaluation owns reusable bulk/mean-based $Re_D$, action/sign, objective/role, DTW, and field-metric definitions. +2. SR owns reflection map and canonical law; no full reprint elsewhere. +3. Field/CCD owns scalar shares and residual; CCD operator only if interpretively necessary. +4. Cross-case event equation is conditional, never a result. +5. Steady/theory owns `s`, steady metric, and selected outer-reference/budget equation. +6. Conclusion introduces no equation, numerical result, citation, or artifact. +7. Freeze notation once for `Kármán`, `Re_D`, `Re_code`, spatial L2, DTW, ROI/mask, action order/sign, and percentages; delete duplicates or move them to supplement. + +## Panel readiness check +Before calling any item panel-ready, record exact authority/artifact; chain/solver/geometry; case/seed/role; comparator; metric/estimand; ROI/domain/mask; weighting/normalization; window/phase/event coordinate; array orientation; rendering provenance; caption limitations; and artifact-audit state. Missing required fields mean `dependency-gated`, `blocked`, or `author-supply-gated`, with the listed fallback. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md new file mode 100644 index 0000000..a595795 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md @@ -0,0 +1,115 @@ +# Round 4 Global Decision Ledger + +**Owner:** Round-4 coordinator. +**Initial status:** `discuss`; unresolved author choices are not frozen. +**Role:** architecture/ownership/claim/supersession source of truth, not prose or evidence. + +## Controlling decisions carried from R2/R3 +| Decision | Disposition | Boundary | +|---|---|---| +| Provisional title: *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball* | carried, provisional | No colon/opening “A”; no positive Illusion SR implied | +| Concept = cloaking/illusion; execution = wake-signature matching; evaluation = field matching with L2 primary/DTW complementary; interpretation = control skeleton | frozen input | R2 freeze/style and R3 audit | +| The periodic Kármán cloak under the parabolic-inflow/no-slip-wall configuration is the sole deep case | frozen input | Cross-cases do not inherit interpretation; Reynolds naming is owned by Section 2 and bare `Re100` is prohibited | +| The parabolic-inflow/no-slip-wall and uniform-inflow/free-slip-wall configurations are separate | frozen input | Never pool, continue, validate, or imply equivalence; internal chain IDs remain provenance-only | +| Physical progression: steady discovery → Kármán → Vortex → Illusion/Erase → qualitative experiment | frozen input | Early steady seed; later full steady/theory return; experiment is a short author-owned main-text subsection near the end | +| Compact CFD qualification | frozen input | Selected observables only | +| Positive SR Kármán/cloak-only; Illusion SR historical/negative | frozen input | No revived positive claims | +| `action-correlated correction-field modes`; OID claim-free | frozen input | CCD descriptive/noncausal; no OID result | +| Case-specific metrics | frozen input | Periodic/event/Erase/steady/DTW non-equivalent | +| Experiment qualitative, open-loop, author-written, provenance-gated | frozen input | No quantitative validation | +| R3 modules text-ready, not manuscript/panel-ready | frozen input | R3 final audit | + +## Global claim ladder +1. **Named cross-task capability:** named wake-signature or visual PPO capability across declared Kármán, Vortex, and Illusion tasks under distinct contracts. +2. **Periodic Kármán cloak under the parabolic-inflow/no-slip-wall configuration — independent field matching:** spatial field matching only for the named target, controlled, and physical-zero roles; mean and phase L2 separate, DTW complementary. +3. **Periodic Kármán cloak under the parabolic-inflow/no-slip-wall configuration — bounded control-skeleton interpretation:** executable SR, corrected four-role mean comparison, and non-paired residual organized by action-correlated correction-field modes support dominant persistent rear rotation plus smaller dynamic correction. + +Level 3 is not causal, necessary, sufficient, unique, optimal, stable, robust, universal, transferable, or independent triangulation. Cross-case capability cannot inherit Levels 2–3. + +## Frozen section order +Round-4 freeze order: +`problem/method/evaluation → capability → Kármán performance → SR → field/CCD → cross-case → steady/theory → experiment → conclusion → Introduction (last)` + +Assembled manuscript order: +`Introduction → problem/method/evaluation → capability → Kármán performance → SR → field/CCD → cross-case → steady/theory → experiment → conclusion`. + +Introduction freezes last so framing cannot outrun settled results. + +## Ownership and duplication +| Owner | Owns | Allowed elsewhere | Prohibited duplication/inference | +|---|---|---|---| +| Introduction | Full ladder, concept/gap, contribution | Conclusion concise restatement | Detailed values, packages, priority/mechanism | +| Problem/method/evaluation | Configurations/action/Re/roles/objective/metrics/ROI/windows/compact CFD | Results import definitions | Results narrative or configuration/evidence transfer | +| Capability | Fig.1 progression, short Kármán preview, steady seed | Performance owns values; steady owns detail | Pooled efficacy, full result prose, experiment panel | +| Kármán performance | Detailed parabolic-inflow/no-slip-wall L2/DTW; separate uniform-inflow/free-slip-wall seed/retention boundary | Capability headline only | M06 as replication/agreement | +| SR | Parabolic-inflow/no-slip-wall formula/symmetry/deployment/deletion | Steady recurrence context only | Full steady/field detail, causal ablation, positive Illusion SR | +| Field/CCD | Corrected means/shares, residual, CCD/POD boundary | Synthesis brief statement | SR derivation, causal response, M04 closure | +| Cross-case | Vortex boundary, Illusion PPO/negative SR, Erase gap | Capability preview; conclusion envelope | Kármán transfer, common metric | +| Steady/theory | Uniform-inflow/free-slip-wall endpoint/sign/context, theory failure/budgets | Capability seed; conclusion limit | Cross-configuration continuation, amplitude agreement, mechanism/optimum | +| Experiment | Author provenance and qualitative observation | Conclusion gate only | Quantitative CFD validation/numbers | +| Conclusion | Integrated answer, limits, decisive tests | No new evidence | Detailed replay/new equations/results | + +Near-collision: M04 standardized PPO and M06 corrected mean values are **different estimands**. SR action magnitude and V5 steady spin ratio are **related contextual diagnostics**, not amplitude agreement. No arithmetic or replication/validation/agreement/triangulation language. + +## Fixed scientific boundaries +Cloaking/illusion is declared-reference matching, not universal invisibility. Positive SR is Kármán/cloak-only; Illusion SR is negative/historical. CCD is descriptive/noncausal; OID claim-free. Vortex is named comparable-scale transient capability; Erase quantification stays blocked. Steady is separate-chain base-bleed/gap-jet-family context, not boat-tail or mechanism. Theory constrains without finite-Re closure. Experiment is qualitative/open-loop/provenance-gated. No mechanism, momentum restoration, stability, optimality, robustness, universality, priority, or quantitative experimental validation is licensed. + +## Open author choices +| Choice | Recommendation / safe default | Status | Consequence | +|---|---|---|---| +| Final title | Retain provisional title unless reopened after section freezes | `discuss` | Any change needs terminology/claim audit | +| Fig.1 set and optional Re400 marker | Kármán dominant; retain sourced steady/Vortex/`ill_075L`; drop Re400 first | `discuss` | Omission fallback; ladder unchanged | +| Standardized PPO/SR/Zero panel | Omit without same-protocol roles/window | `discuss` | Text unaffected | +| CCD manuscript label | Exact preferred derived publication plus validated parent; avoid “canonical CCD” | `discuss` | Caption/reproducibility only | +| Quantitative Vortex/Erase panels | Default omit while blockers remain | `blocked` | Named visual capability may remain | +| MFS field panel | Default omit until validation gates close | `blocked` | Use one-circle/sign-failure boundary | +| Experiment image/final wording | Frank supplies prose/provenance; omit image if gate fails | `blocked` | Keep qualitative interface only | +| Final display/equation compression | Minimum argumentative set | `discuss` | Move optional items to supplement/omit | + +Defaults do not make unresolved rows frozen. + +## Supersession rules +1. Current authority/manifests/immutable artifacts/claims supersede summaries and memory. +2. R2 `05_REVISED_STRUCTURE_FREEZE.md` supersedes conflicting R2 `01`–`04`; R2 `06` controls style. +3. R3 `11_FINAL_CONSISTENCY_AUDIT.md` and reconciled exports control R3 conflicts; detail remains with owning module. +4. A Round-4 change records old/new decision, reason, authority/author instruction, affected units, date, and re-audits; never erase provenance. +5. Author choices cannot override evidence, merge chains/metrics, fabricate readiness, or raise claim ceilings. +6. Reopen `frozen` only for new authority, discovered conflict, or explicit author redirection; dependent sections are re-audited. +7. Missing optional panels do not reopen text when omission/supplement fallback exists; missing required evidence does. + +## Author feedback decisions — 2026-08-10 +- Overall manuscript structure and logic are accepted. +- Section proportions are provisionally accepted and will be refined after all section discussions. +- A distinct short Conclusion is required. +- The experiment remains a short author-owned main-text subsection near the end. +- The Introduction architecture is the accepted five-paragraph sequence: fascination/gap → pinball/force mediation → nonlinear feedback/PPO/analytical hooks → realization, independent evaluation, action-side and field-side analysis → narrowed question/contribution ladder/contracts bridge. +- Reader-facing `Legacy`/`V5` naming is prohibited. Use `parabolic-inflow/no-slip-wall channel configuration` and `uniform-inflow/free-slip-wall channel configuration`; retain internal chain IDs only for provenance and ownership separation. +- Reynolds naming is frozen in Section 2: use article-wide $Re_D=U_{ref}D/\nu$ with bulk/mean inlet speed for the parabolic configuration and uniform inlet speed for the uniform configuration; state $U_{max}\simeq1.5U_{ref}$ for the parabolic profile, convert authoritative $2D$ code labels by one half, prohibit bare `Re100`, and never infer equality from inherited labels. +- Section 2 reader-facing title is `Problem formulation, control framework and evaluation`; `contract` remains internal governance language only. +- Section 2 architecture is frozen. Main text foregrounds the canonical improved method and uses one compact neutral sentence that later deep analyses use data generated with an earlier implementation under the same parabolic-inflow/no-slip-wall physical configuration; implementation differences and the absence of a complete canonical rerun are documented in the supplement. No canonical-generation, equivalence, reproduction, or rerun-completion claim is licensed. +- The sensor note is `read`: placement is $x/D=10$, $y/D=0,\pm2$, radius $0.25D$, with both velocity components, and its ROI/metric boundaries are current. Raibaudo supports the streamwise precedent, Cornejo Maceda and Li support downstream phase/state sensing, and Marra (`mapped/full record`, DOI `10.1017/jfm.2024.593`) supports only low-dimensional controlled-flow plausibility; none establishes optimality or observability. +- The CelerisLab validation dossier is `read/full-report`: current-solver Kan99b K2 retains the authority's exact `partial pass` label and Sah04 S2 is `pass`; the Kan99b mean-lift sign difference is understood as the CFD coordinate/force-direction convention, not unresolved physics or suspected wrong rotation. No older-solver validation is licensed. +- Fig. 1 remains undiscussed; no capability-panel decision is inferred; Section 2 geometry and DRL-flow schematics are required method displays. +- The Introduction may be revisited after detailed sections, but its current Round-4 architecture is `frozen`; cultural-hook and citation wording remain drafting choices. +- Round-4/5 work must prioritize author-facing argument and design decisions over dossier-scale governance; retain only a compact controlling-read/gap ledger. +- Future section work uses a two-section cadence: the coordinator presents two detailed minimum context packets together, records author feedback, launches two tightly scoped continuation agents in parallel, then performs a coordinator second audit before freeze or R5 handoff. +- Every minimum context packet lists exact controlling reads, accepted author feedback, available materials and readiness, requested output decision, exclusions, target length/section share, paragraph jobs, concrete display layout, ownership and exact questions. Continuation agents use targeted Nowledge recall first when prior decisions matter, verify against repository authorities, and do not rediscover the project. + +## Provenance separation +Internal IDs `Legacy` and `V5` remain valid only in contracts, artifact paths, ledgers, and audit trails where they identify distinct evidence chains. Replacing manuscript-facing labels does not merge, erase, or transfer ownership between those chains. + +## Coordinator update record +Format: `date | item | previous | new | authority/author instruction | affected units | required audit`. + +| Date | Item | Previous | New | Authority / author instruction | Affected units | Required audit | +|---|---|---|---|---|---|---| +| 2026-08-10 | Overall architecture | Under discussion | Structure/logic accepted; proportions provisional pending all section discussions | Author feedback | All Round-4 section freezes | Recheck final assembled balance | +| 2026-08-10 | Conclusion and experiment | Conclusion/experiment placement carried but not restated as author decision | Distinct short Conclusion required; short author-owned experiment subsection retained near manuscript end | Author feedback | Experiment, Conclusion, assembled order | Preserve qualitative/provenance gates | +| 2026-08-10 | Introduction | Freeze candidate with unresolved reader adjectives | Five-paragraph architecture frozen; exact boundary-condition configuration labels adopted | Author feedback plus repository configuration/kernel evidence | Introduction, Contracts, captions/ledgers | Revisit wording after detailed sections without reopening architecture | +| 2026-08-10 | Reynolds naming | Configuration-local convention with parabolic reference unresolved | Section 2 freezes article-wide bulk/mean-based $Re_D=U_{ref}D/\nu$; uniform speed for uniform inlet; $U_{max}\simeq1.5U_{ref}$ for parabolic inlet; authoritative $2D$ labels convert by one half | Author feedback and repository evidence | Section 2, Introduction, labels/captions | Confirm every displayed inherited label against source authority | +| 2026-08-10 | Fig. 1 | Open choice | Undiscussed; no new decision | Author feedback | Capability/display planning | Keep open | +| 2026-08-10 | Section 2 formulation and provenance | Freeze candidate; sensor/validation authorities misclassified; provenance too defensive | Architecture frozen; canonical main text plus compact neutral earlier-implementation sentence; differences and no-complete-rerun fact supplementary; sensor note `read`; CelerisLab dossier `read/full-report`; no equivalence claim | Author correction plus current training, sensor and validation authorities | Section 2, captions, supplement provenance, inventories | Keep run values and production dependency-gated; no Fig. 1 decision | +| 2026-08-10 | Agent-control priority | Round-1-style comprehensive coverage remained prominent in R4 controls | Author-facing argument/design and decision value take priority; retain compact controlling-read/gap ledger | Author process correction | All R4/R5 prompts, packets and audits | Reject dossier-scale rediscovery or governance-heavy outputs | +| 2026-08-10 | Section cadence | Sections researched/frozen individually | Present two detailed packets together; after author feedback launch two scoped continuation agents in parallel; coordinator second-audits both | Author process decision | Remaining R4 sections and R5 handoffs | Audit pair interfaces, duplication, ownership and accepted feedback | +| 2026-08-10 | Continuation context | Agents assembled context from broad controls/dossiers | Coordinator minimum packet freezes exact reads, feedback, materials/readiness, decision, exclusions, length/share, paragraph jobs, display layout, ownership and questions; targeted Nowledge recall precedes repository verification when relevant | Author process decision | Coordinator, all continuation agents | Memory never overrides artifacts; no whole-project rediscovery | +| 2026-08-10 | Kan99b mean-lift sign | `partial pass` with sign/convention described as unresolved | Preserve exact `partial pass`; sign difference is understood as CFD coordinate/force-direction convention, not unresolved physics or suspected wrong rotation | Author correction and qualification interpretation | Section 2, controls, future prose/captions | Remove unresolved-sign wording while preserving dossier label | diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md new file mode 100644 index 0000000..29fc057 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md @@ -0,0 +1,49 @@ +# Round 4/5 Section Agent Prompt + +Use only after the coordinator has built the minimum context packet and the author has responded to the paired section discussion. + +## Coordinator minimum context packet +- **Unit / round / output:** [SECTION], [R4 FREEZE or R5 DRAFT], `[EXACT FILE]` +- **Decision requested:** [ONE BOUNDED OUTPUT DECISION] +- **Exact controlling reads:** [R4 CONTROLS, OWNING DOSSIER, CURRENT AUTHORITIES/MANIFESTS] +- **Accepted author feedback:** [DATED DECISIONS; distinguish accepted, provisional, open] +- **Available materials:** [EXACT TEXT, DATA, SCRIPT, FIGURE/PANEL OR TABLE INVENTORY + `text-ready`/`artifact-ready`/`dependency-gated`/`blocked`] +- **Target size:** [WORDS/PAGES] and [PERCENT SECTION/MANUSCRIPT SHARE] +- **Paragraph jobs:** [P1 JOB → P2 JOB → ... → CLOSING BRIDGE] +- **Concrete display layout:** [FIGURE/TABLE/EQUATION COUNT, PANEL GEOMETRY, PLACEMENT, EACH ARGUMENTATIVE JOB AND FALLBACK] +- **Ownership:** imports [EXACT]; exports [EXACT]; prohibited duplication [EXACT] +- **Exact questions:** [FINITE LIST ANSWERABLE FROM PACKET] +- **Exclusions:** [OUT-OF-SCOPE SOURCES, CLAIMS, RUNS, EDITS, DISPLAYS] + +## Prompt +You are the tightly scoped **[R4 SECTION-FREEZE / R5 SECTION-DRAFT]** continuation agent for **[UNIT]** in *Interpreting learned hydrodynamic cloaking and illusion in a fluidic pinball*. + +Start with targeted Nowledge `memory_search` for prior decisions relevant to the exact questions; use thread recall only when the exact earlier discussion is needed. Then verify operative decisions against the packet's repository authorities. Memory is decision/history navigation and never overrides current authorities, manifests, code/configuration or immutable artifacts. + +Read the minimum context packet above and only its exact controlling reads. Do not rediscover the whole project or recreate Round-1 coverage. Use repository tools for internal evidence. Use Undermind only for a stated external-literature gap and only after `get_orientation` then `list_workspaces`; literature cannot establish internal results. For any authorized read-only derivation/script, first discover the designated conda environment from repository authority or environment listings and record it—never guess. Do not run CFD, training, artifact generation or expensive analysis unless separately authorized. + +### Deliverable priorities +1. Answer the section question with an evidence-bounded recommendation that gives the author a concrete decision. +2. Honor target length/share and make every paragraph perform its assigned argumentative job. +3. Specify the concrete display layout: panel arrangement, owner, source arrays/artifacts, placement, argumentative job, caption ceiling, readiness and fallback. Inventory is not artifact readiness. +4. Respect result/terminology ownership, imports/exports, bridges and duplication deletions. +5. State green/amber/red claim wording and preserve chain, configuration, Reynolds convention, role, comparator, metric/estimand, ROI/window and artifact boundaries. +6. Include only a compact coverage ledger for the controlling reads and material gaps: `read`, `mapped`, `not-covered`, `external-inaccessible`, with verification/artifact-audit state where relevant. +7. Separate evidence-governed conclusions from author choices. For each choice give recommendation, consequence and safe default. + +### Fixed boundaries +- Positive SR is Kármán/cloak-only; Illusion SR is historical/negative; CCD is descriptive/noncausal and uses `action-correlated correction-field modes`; OID is claim-free; steady is contextual; experiment is qualitative/provenance-gated. +- Internal Legacy/V5 chains remain separate and provenance-only in manuscript prose. Case-specific metrics and near-colliding estimands are never pooled or called replication, validation, agreement or triangulation without exact authority. +- Kan99b K2 remains `partial pass` under the qualification authority. The mean-lift sign difference is the CFD coordinate/force-direction convention, not unresolved physics or suspected wrong rotation; preserve the overall label and state its reason accurately. +- A first pass cannot freeze itself. Return `researching`, `discuss`, `revise` or `blocked`; only the coordinator's second audit may set `frozen` or authorize R5 prose. + +### Output order +1. Recommended decision and bounded answer. +2. Target size/share and paragraph-job map. +3. Concrete display/equation layout and material readiness. +4. Ownership, imports/exports, bridge and deletions. +5. Claim ceiling, choices and exact answers. +6. Compact coverage/gap ledger. +7. Disposition. + +Edit exactly `[EXACT FILE]`; do not edit R1–R3 dossiers, evidence packages, immutable artifacts, archives, controls or other sections. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_QUALITY_GATE.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_QUALITY_GATE.md new file mode 100644 index 0000000..d73ff98 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_QUALITY_GATE.md @@ -0,0 +1,47 @@ +# Round 4/5 Quality Gate + +Round 4 freezes author-facing arguments and section designs; Round 5 drafts from those freezes. Neither round creates evidence. Decision value and manuscript design outrank procedural volume. + +## Entry gate — coordinator packet +- [ ] Exact unit, round, output decision and file are named. +- [ ] Exact controlling reads and accepted dated author feedback are listed. +- [ ] Available material/artifact inventory distinguishes text-, data-, script-, panel- and dependency-readiness. +- [ ] Target words/pages and section/manuscript share are stated. +- [ ] Paragraph jobs and closing bridge form an argument, not an inventory. +- [ ] Concrete display layout gives count, panel geometry, placement, job, owner, source, readiness and fallback. +- [ ] Imports, exports, exclusions and exact bounded questions are explicit. + +A subagent failing this gate is not launched to rediscover the project. + +## Process gate — continuation and routing +- [ ] When prior decisions matter, agent begins with targeted Nowledge memory/thread recall, then verifies against repository authorities; memory never overrides artifacts. +- [ ] Repository tools handle internal evidence. Undermind is literature-only after `get_orientation` and `list_workspaces`. +- [ ] Read-only scripts/derivations use a designated conda environment discovered from authority/listing; no environment is guessed. +- [ ] No CFD, training, artifact generation or expensive analysis ran without authorization. +- [ ] Coverage ledger is compact and limited to controlling reads/gaps (`read`, `mapped`, `not-covered`, `external-inaccessible`). + +## Section design/freeze gate +- [ ] Recommendation answers the exact author-facing question and explains consequence/trade-off. +- [ ] Length/share, paragraph progression, display cadence and evidence density are credible. +- [ ] Claims retain owner, chain/configuration, Reynolds convention, role, comparator, metric/estimand, ROI/window and authority. +- [ ] Imports stay brief; exports and deletion owners prevent duplication. +- [ ] Displays/equations state what they establish and do not establish; text readiness is separate from artifact readiness. +- [ ] Author choices remain `discuss`/`blocked` or receive an accepted decision; safe defaults are not falsely frozen. +- [ ] Kan99b K2 stays exactly `partial pass`; the mean-lift sign difference is attributed to CFD coordinate/force-direction convention, never unresolved physics or suspected wrong rotation. +- [ ] Fixed SR/CCD/OID/steady/experiment and cross-chain/estimand cautions pass. + +## Two-section cadence and second audit +1. Coordinator presents two detailed packets together. +2. Author responds to both; coordinator records accepted, provisional and open feedback. +3. Coordinator launches two tightly scoped continuation agents in parallel. +4. Coordinator re-reads both outputs and controlling authorities, checks interfaces/duplication/claims/displays/choices, and records a second audit. +5. Only then may R4 become `frozen` or R5 prose become drafting-ready. + +## Statuses +- `researching`: a named controlling read is incomplete. +- `discuss`: a bounded author choice is decision-ready. +- `revise`: targeted argument/design/interface correction is needed. +- `frozen`: coordinator second audit locked the R4 text contract. +- `blocked`: required authority, material, role, comparator, decision or conflict resolution is absent. + +Final Round-4 audit checks the paired sections in the whole-manuscript order, ownership, bridges, claim ladder, display/equation inventory, accepted author decisions and Round-5 handoff. Optional omitted panels do not block text when a safe fallback preserves the argument. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_STYLE_CROSSWALK.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_STYLE_CROSSWALK.md new file mode 100644 index 0000000..1afb315 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/00_STYLE_CROSSWALK.md @@ -0,0 +1,133 @@ +# Round 4 Gate-A style audit and crosswalk + +**Role:** coordinator audit of `STYLE_01_INTRODUCTION.md` through `STYLE_10_DISCUSSION_CONCLUSION.md`. This is style/architecture control, not manuscript prose, scientific evidence, artifact approval, or a section freeze. + +**Overall Gate-A result: PASS.** All ten style memos pass after the four targeted corrections. This file records the coordinator re-audit only. + +## 1. Scope and complete coverage ledger + +`read` is not independently verified or artifact-audited. `mapped` is not read. External literature is **style evidence only**; internal claims remain controlled by repository authorities, manifests, immutable artifacts, the Round-2 freeze, and audited Round-3 dossiers. + +| State | Inputs | Boundary | +|---|---|---| +| `read` | All Round-4 controls: `README.md`, `00_MASTER_AGENT_PROMPT.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_DISPLAY_EQUATION_INVENTORY.md`, `00_QUALITY_GATE.md` | Complete workflow/decision control set; not scientific verification | +| `read` | All ten style memos, each in full | Style observations, recommendations, identities/read levels, interfaces and anti-patterns; no memo is internal scientific authority | +| `read` | R2 `05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Author-ratified architecture/claims and controlling style synthesis | +| `read` | R3 `00_MODULE_INTERFACE_LEDGER.md`, `00_QUALITY_GATE.md`, `11_FINAL_CONSISTENCY_AUDIT.md` | Readiness, ownership, near-collisions, blockers and assembly controls; no recomputation | +| `mapped` | R3 Modules `01`–`10`; authorities/manifests/artifacts they name | Scientific detail remains with its owner; no mapped item is promoted to read or verified | +| `mapped` | Literature records declared by the memos/R2 guide | Identity/read-level audit only; no new literature search or PDF reading | +| `not-covered` | New literature; raw arrays/hashes; CFD, training, SR, CCD or OID recomputation; experiment analysis; figures; manuscript drafting | Outside Gate A; no citation, internal number, panel, or prose inferred | +| `external-inaccessible` | Hidden/symlink payloads, model bundles, dense fields/theory arrays, raw experiment media | Authority-led artifact deferral; retained dependent panels/claims remain gated | + +Observed comparator order, cadence and caveat practice come from the memos' declared `full-PDF`, `full-report`, `mapped`, or `abstract/snippet` literature states. Project scope, terminology, results and readiness come only from internal controls and owning authorities. + +## 2. Gate-A result by memo + +| Memo | Result | Exact reason | Targeted correction | +|---|---|---|---| +| `STYLE_01_INTRODUCTION.md` | **PASS** | Four exact DOI records and declared PDF-version limits; complete controlling reads; observed practice and recommendation separated; section-specific jobs, caveats, bridges and anti-patterns; no project value invented | None; retain publisher-version caveat and freeze Introduction last | +| `STYLE_02_CONTRACTS_METRICS.md` | **PASS** | Four exact identities/DOIs/read levels; sampled comparator-first practice is not universalized; complete controls and owner inputs; precise display/equation/qualification ceiling | None; retain selected-observable qualification, not broad validation | +| `STYLE_03_CAPABILITY_FIGURE.md` | **PASS** | Four exact identities/DOIs/read levels; non-pooled hierarchy, caption/body split, local failure, readiness and fallbacks are explicit; no quantitative annotation invented | None; panel selection stays `discuss`, blocked content omitted | +| `STYLE_04_KARMAN_PERFORMANCE.md` | **PASS** | Four exact identities/DOIs/read levels; scalar-first literature practice is distinguished from authority-led L2-first recommendation; M04/M06 and Legacy/V5 boundaries explicit | None. Its first-pass `revise` label reflects no-self-freeze, not a Gate-A content defect | +| `STYLE_05_SR_LAW.md` | **PASS** | Required R2/R3 controls are now read, and panel status, ownership and Kármán/cloak-only scope are reconciled without changing the claim ceiling | None; targeted controlling-read correction verified | +| `STYLE_06_FIELD_CCD.md` | **PASS** | Three exact full-PDF identities plus one exact mapped/inaccessible record; read levels are not inflated; mean-before-modes, non-pairing, fixed terminology, POD boundary and M04/M06 separation explicit | None; keep Noack et al. (2016) mapped unless full text is read | +| `STYLE_07_CROSS_CASE.md` | **PASS** | The Wang et al. author identity and DOI are corrected; structure, evidence boundaries and scientific recommendation are unchanged | None; targeted bibliographic correction verified | +| `STYLE_08_STEADY_THEORY.md` | **PASS** | Four exact DOI-bearing full-PDF records; controls, owner dossier and relevant theory authorities read; observation, outer reference, failed route and recommendation distinct; MFS/mechanism ceilings correct | None; preserve blocked MFS field and one-circle/sign-failure fallback | +| `STYLE_09_EXPERIMENT.md` | **PASS** | The display/equation inventory is now read, and experiment displays retain explicit author-supply gates and prose/omission fallbacks without promoting an observation | None; targeted inventory reconciliation verified | +| `STYLE_10_DISCUSSION_CONCLUSION.md` | **PASS** | The Deng et al. and Cornejo Maceda author forms now match the controlling identities; architecture and scientific recommendation are unchanged | None; targeted identity corrections verified | + +No memo uses literature to establish an internal result, and no memo invents a new internal number. The corrected defects were limited to exact identity and control-coverage bookkeeping; they do not alter scientific claims. + +## 3. Shared versus section-specific JFM practice + +### Shared observed practice + +1. A target, baseline, reference role or simpler controller is legible before interpretation; extensions renew comparators locally. +2. Evidence escalates from contract to principal result to richer spatial/modal interpretation; strong vocabulary follows dedicated tests. +3. One paragraph and one display normally carry one main argumentative job. +4. Captions decode roles, conditions and panels; body text states inference, limit and consequence. +5. Dangerous limitations sit beside affected results and may be compressed again in Discussion. +6. Equations define immediately/repeatedly used objects; figures carry empirical burden; tables compress contracts or comparable rows. +7. Bridges pose the unresolved scientific question rather than announce a section number. +8. Negative routes remain visible to motivate refinement or define the envelope. + +### Section-specific practice + +- **Introduction:** compact funnel; clustered citations; no equations or detailed project results; subsections only for genuine taxonomy. +- **Contracts:** dependency order from plant/baseline through objective, metrics and qualification; tables expose contract shifts. +- **Capability:** one dominant comparator-bearing case anchors breadth; panel order/area express hierarchy; no common score. +- **Performance:** exact comparator and principal result precede interpretation; field and signal estimands stay separate. +- **SR:** variables, objective and deployment precede law; execution arbitrates; deletion is not causal ablation. +- **Field/CCD:** mean/scalar estimand precedes residual/modes; POD is a same-object boundary, not a superiority foil. +- **Cross-case:** change one contract dimension where possible; renew comparator; label visual-only and negative evidence locally. +- **Steady/theory:** late context is narrower than a second climax; attractive theory and failed sign/closure stay adjacent. +- **Experiment:** apparatus/acquisition/provenance precede qualitative observation; omit media when provenance fails. +- **Discussion/Conclusion:** complete interpretation before the short close; synthesize in evidence order; future work names decisive tests. + +## 4. Global Round-4 rules to freeze + +1. **Comparator-first:** bind target, controlled role, physical zero/baseline, chain and estimand before inference. +2. **Evidence escalation:** named capability → Legacy Kármán independent field evaluation → bounded Kármán/cloak-only interpretation; cross-cases do not inherit deeper levels. +3. **Local caveats:** put mask/window, acquisition, causal, transfer, theory and provenance limits with the affected sentence/caption. +4. **One job per paragraph:** delete package chronology, inventory prose and panel narration. +5. **Ownership:** Contracts owns reusable definitions; Capability Fig. 1/progression; Performance detailed Legacy L2/DTW; SR deployment/law/deletion; Field/CCD corrected means/residual/modes/POD; Cross-case changed-contract extensions; Steady/theory V5 endpoint/sign/failure; Experiment provenance/observation; Conclusion synthesis/limits/tests and no new evidence. +6. **Caption/body division:** caption states chain, case/role, comparator, metric/coordinate, source and ceiling; body explains inferential consequence. +7. **Display discipline:** inventory never means existence. Every retained display needs owner, job, source, readiness, caption ceiling and fallback; text and artifact readiness stay separate. +8. **Equation discipline:** freeze reusable notation once; do not duplicate owner equations; Conclusion has none. +9. **Bridges:** gap → contracts → capability → independent Kármán evaluation → law complexity → field accounting → non-transfer → steady context → qualitative deployability → limits/tests. +10. **Claim ceilings:** positive SR Kármán/cloak only; Illusion SR historical/negative; CCD descriptive/noncausal using exactly **action-correlated correction-field modes**; OID claim-free; steady contextual; experiment qualitative, open-loop and provenance-gated. +11. **Notation/chain:** preserve `Kármán`, `Re_D`, `Re_code`, spatial L2 versus Level/Stage, DTW orientation, action order/sign, ROI/mask/window and percentages. Legacy/V5 never pool, continue, validate or imply equivalence. +12. **Metric boundary:** periodic mean/phase, event-relative, mean-only, steady profile/`E_inf_vector`, and native/normalized DTW are non-equivalent. M04/M06 means are **different estimands**; SR action magnitude/V5 spin are **related contextual diagnostics** only. + +## 5. Author decisions for macro discussion (maximum five) + +1. **Figure density and main/supplement split.** Recommend the minimum argumentative main set; move derivations, qualification matrices and optional diagnostics to supplement; omit before crowding. Decide final Fig. 1 panels and optional Re400/limit markers. +2. **Gated displays.** Recommend omitting standardized PPO/SR/zero, quantitative Vortex/Erase, and MFS field panels unless exact gates close. Decide whether CCD operator/POD/evidence-map displays do distinct work. +3. **Experiment inclusion.** Retain a short author-owned subsection only if provenance supports a named qualitative observation; otherwise use a limit/interface sentence and omit media. Quantitative validation remains prohibited. +4. **Discussion/Conclusion split.** Recommend separate integrated Discussion and short Conclusion because multiple non-equivalent chains require synthesis before compression; safe fallback is one top-level section with clearly distinct functions. +5. **Introduction freeze and title.** Freeze Introduction last; retain the provisional title unless reopened. Any title change triggers terminology/claim audit. + +## 6. Section-specific crosswalk + +| Section | Recommended sequence | Primary display contract | Ownership | Main fallback | +|---|---|---|---|---| +| Introduction | concept/boundary → difficulty → capability/gap → evidence-chain need → scope/bridge | No owned empirical display; optional prospective Fig. 1 reference | Full ladder, concept, gap, scope | No display; five-job funnel | +| Contracts | comparison need → plant/chain → action/sign → observation/objective → metrics/roles/windows → qualification | Required contract table + minimal schematic; reusable metric equations | Reusable definitions and qualification | Compact table/schematic; supplement detail | +| Capability | viewing contract → steady seed → dominant Kármán → bounded extensions → limit/deep-case selection | Kármán-dominant distinct-contract Fig. 1 | Progression, evidence levels, deep-case choice | Source-bound panels only or prose | +| Performance | exact Legacy contract → mean/phase L2 → DTW → retention boundary → SR question | L2-first display; DTW subordinate; V5 inset optional | Detailed Legacy result and retention boundary | Compact table | +| SR | surrogate boundary → deployment → law → execution → deletion → field question | Required deployment map/law/deletion; direct role panel gated | Executable law, imposed structure, arbitration, tested deletion | Equations + deletion table | +| Field/CCD | four roles → means/ledger → limit → residual → CCD → POD boundary | Mean before modes; residual equation required; CCD operator optional | Corrected means, residual, descriptive modes, POD boundary | Scalar ledger + residual equation | +| Cross-case | framing → event-relative → non-zero target → blocked/failure route → envelope | Distinct-contract display; quantitative Vortex/Erase gated | Comparator renewal, evidence levels, negative routes | Case-contract table + sourced visuals | +| Steady/theory | return → V5 endpoint → bounded description → outer reference/failure → export | Sign contract and failure required; endpoint gated; MFS blocked | Separate-chain endpoint/sign/context/theory failure | Sign schematic + endpoint table + trace | +| Experiment | purpose → apparatus/provenance → qualitative comparison → limit/test | Author-supply-gated media; no quantitative panel/equation | Frank-owned provenance and observation | Prose interface or omission | +| Discussion/Conclusion | ladder → interpretation → envelope → tests; short close | Required limitations table; map optional; no new equation/result | Integrated answer, limits, tests | Discussion prose + limitations table | + +## 7. Macro-discussion input + +### Author-ratified decisions carried forward + +- **Assembled order:** Introduction → contracts → capability → Kármán performance → SR → field/CCD → cross-case → steady/theory → experiment → Discussion/Conclusion. +- **Freeze order:** contracts → capability → Kármán performance → SR → field/CCD → cross-case → steady/theory → experiment → Discussion/Conclusion → Introduction last. +- **Claim ladder:** named cross-task capability; Legacy Kármán Re100-only independent field matching; bounded Legacy Kármán/cloak-only control-skeleton interpretation. +- **Planning shares:** Introduction 10%, contracts 13%, capability 11%, Kármán performance 12%, SR 17%, field/CCD 17%, cross-case 10%, steady/theory 6%, experiment/limitations/conclusion 4%. These are carried R2 allocations, not new measurements. +- **Physical chronology:** steady discovery → Kármán → Vortex → Illusion/Erase → qualitative experiment, with steady as an early seed and later contextual return. + +### Coordinator recommendation; not author-ratified + +1. Preserve both orders and keep SR, field/CCD, capability and cross-case as distinct ownership units. +2. Protect the Kármán block as the analytical centre; cross-case and steady define breadth/boundaries, not competing interpretation. +3. Apply the claim ladder sentence by sentence; interpretation remains Kármán/cloak-only and noncausal. +4. Retain the minimum display inventory: contract table/schematic; Kármán-dominant Fig. 1; Kármán performance; SR law/deletion; mean then residual/CCD; bounded cross-case display/table; steady sign/endpoint/failure; provenance-gated experiment if available; limitations table. Optional operators, insets, maps and blocked panels are drop-first. +5. Retain the minimum equation inventory: reusable definitions in Contracts; SR deployment/law; scalar identity only if retained plus residual in Field/CCD; event equation only with a retained quantitative result; steady definition only if not imported plus one outer-reference boundary. Full derivations go to supplement. +6. Keep result ownership exclusive: previews name conclusions without values; owners carry exact comparisons; Discussion compresses without replay. + +These recommendations remain `discuss` until recorded as author decisions; they do not become frozen by appearing here. + +## 8. Handoff and quality gate + +1. Present the five decision bundles to the author for macro discussion; record decisions or safe omissions in the global ledger. Do not falsely freeze unresolved choices. +2. Freeze architecture only when ownership, bridges, ladder, notation, space and display/equation inventory agree. Optional panels may remain gated; retained required panels with missing source or roles remain unavailable. +3. For section freezes, reread the owning R3 dossier and current authorities, not only this crosswalk; run local near-collision and caption-ceiling checks and require coordinator second audit. +4. Before Round 5, audit `Kármán`, Legacy/V5, `Re_D`/`Re_code`, spatial L2 versus Level/Stage, DTW orientation, action order/sign, ROI/mask/window, percentages, equation ownership, duplicate detail and whitespace. + +**Gate-A handoff:** the ten-memo style set is **PASS** and ready for macro discussion through the five author-decision bundles. Optional display dependencies and later section-freeze checks retain their recorded gates. No manuscript prose, literature, internal number, artifact or panel is created by this audit. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/README.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/README.md new file mode 100644 index 0000000..17b364b --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/README.md @@ -0,0 +1,24 @@ +# Round 4 — Top-Down Decisions and Section Freezes + +## Purpose +Round 4 converts the R2 architecture and audited R3 dossiers into author-facing section arguments, concrete display designs and frozen R5 drafting packets. It is not manuscript prose, new evidence, artifact generation, CFD or training. Round 4 should be lighter than the dossiers: preserve traceability in a compact ledger while spending most effort on argument, ownership, displays and decisions. + +## Authority and tool routing +Current repository authorities, manifests, code/configuration and immutable artifacts override summaries and memory. A continuation agent begins with targeted Nowledge memory/thread recall when prior decisions matter, then verifies against exact repository authorities. Nowledge is for decisions/history; repository tools are for internal evidence; Undermind is for external literature only after `get_orientation` and `list_workspaces`. Read-only derivations/scripts use only a designated conda environment discovered from current authority or environment listings. Never guess an environment or run CFD/training without authorization. + +## Coordinator workflow +1. Maintain the global decision ledger, whole-manuscript ownership and author feedback. +2. Build a minimum context packet for each section: exact controlling reads, accepted feedback, available material/readiness inventory, requested output decision, exclusions, target length/share, paragraph jobs, concrete display layout, ownership and exact questions. +3. Present two detailed section packets together to the author. +4. After feedback, launch two tightly scoped continuation agents in parallel. Agents use the packet and targeted checks; they do not rediscover the project. +5. Perform a coordinator second audit across both outputs before freezing either section. +6. Repeat by section pairs; freeze the Introduction last, then run the whole-manuscript Round-4 audit. + +## Controlling inputs +- `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` and `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md`. +- Relevant `ROUND3_BOTTOM_UP` owning dossiers, interface ledger, quality gate and final consistency audit. +- Current repository authorities/manifests named by the packet. +- This directory's master prompt, quality gate, global ledger and display/equation inventory. + +## Round-5 handoff +Each frozen packet carries its bounded answer, target length/share, paragraph jobs, exact displays/equations, ownership/imports/exports, claim ceiling, accepted author decisions, exclusions, compact coverage/gap ledger and separate text/artifact readiness. Round 5 drafts only from that packet and its controlling authorities; it does not silently reopen decisions or fill evidence gaps. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_01_INTRODUCTION_FREEZE.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_01_INTRODUCTION_FREEZE.md new file mode 100644 index 0000000..cb9d0f3 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_01_INTRODUCTION_FREEZE.md @@ -0,0 +1,245 @@ +# Round 4 frozen section architecture — Introduction + +## 1. Status and scope + +**Status:** `frozen` for Round-4 architecture; **not final manuscript prose**, not a citation-priority audit, and not scientific or artifact verification. Cultural-hook and sentence-level citation wording remain drafting choices and do not reopen the architecture. + +**Scope:** architecture for an unsplit five-paragraph Introduction. This file controls paragraph jobs, literature roles, terminology choices, evidence boundaries, ownership, and the bridge into the contracts section. It does not draft publishable paragraphs, define reusable equations, narrate results, or make any panel publication-ready. Reader-facing configuration labels are frozen below from inlet and lateral-wall boundary conditions; additional solver, outlet, geometry, and action differences remain owned by configuration-local contracts. + +**Bounded recommendation:** begin with the human idea of concealment and deception, move immediately to why direct linear/transformation cloaking does not transfer trivially to separated finite-Reynolds-number Navier–Stokes flow, introduce the fluidic pinball as the controlled channel-flow object, formulate force-mediated cloaking as a nonstationary feedback problem, and preview a layered realization–evaluation–interpretation design. Close with the narrowed question and three contribution levels, then hand the reader to configuration-local contracts. Do not organize the Introduction around internal chain labels, package history, or defensive nonclaims. + +## 2. Section question and answer ceiling + +**Section question.** Can rotational control of a fluidic pinball in channel flow use force feedback and sparse downstream observations to approach a declared hydrodynamic reference, and what evidence is required to distinguish learned execution, independent field evaluation, and bounded physical interpretation? + +**Answer ceiling.** The Introduction may motivate and announce three nested levels: (1) named learned-control capability under distinct task contracts; (2) independent spatial field matching for the periodic Kármán cloak under the parabolic-inflow/no-slip-wall channel configuration only; and (3) a bounded Kármán/cloak-only control-skeleton interpretation assembled from executable action-law and descriptive field-organization evidence. It may not imply universal invisibility, linear-cloak/Navier–Stokes equivalence, cross-chain continuation, a causal mechanism, transfer, robustness, optimality, priority, positive Illusion symbolic regression, or quantitative experimental validation. + +**Green:** define hydrodynamic cloaking as approach to a declared background and illusion as retargeting toward a declared non-zero signature; motivate force-plus-sparse-observation control; state the three levels without values. + +**Amber:** say that the later layered evidence is designed to test field matching beyond the policy observer/reward space and to support a bounded Kármán/cloak-only organization of action and field evidence. + +**Prohibited red:** all-observer invisibility; direct equivalence between transformation/linear cloaks and finite-Re Navier–Stokes control; force reduction as proof of field matching; causality, necessity, sufficiency, uniqueness, stability, robustness, optimality, universality, transfer, priority, independent triangulation, positive Illusion SR, causal CCD, an OID result, or quantitative experiment validation. + +## 3. Author feedback incorporated + +- **Reader-facing configuration terminology:** use the exact pair `parabolic-inflow/no-slip-wall channel configuration` and `uniform-inflow/free-slip-wall channel configuration`. Do not use historical/current, earlier/revised, or internal chain IDs as reader-facing adjectives. The configurations remain separate because solver, outlet, geometry, actuation, Reynolds convention, roles, and windows also differ; those details remain in contracts. Internal chain IDs (`Legacy`, `V5`) are provenance only. +- **Reynolds language:** never use bare `Re100`. Prefer the reader-facing basis $Re_D=U_{ref}D/\nu$, with $U_{ref}$ defined separately for each configuration. For the uniform-inflow/free-slip-wall configuration, the configured uniform inlet speed supplies $U_{ref}$. For the parabolic-inflow/no-slip-wall configuration, repository code shows that configured `U0` is the bulk/mean scale and the profile peaks at approximately $1.5U0$; the authoritative manuscript choice between centreline/maximum and mean/bulk convention, and any exact conversion of inherited labels, remains a contracts-section decision. Equal code labels must never be presented as equal physical Reynolds numbers. +- **P1:** open from concealment as longstanding fiction/human fascination; use Harry Potter only with a precise source. Move to hydrodynamic cloaking and then illusion as hiding-to-deception. Radar stealth/deception is optional. End on the finite-Re gap after naming nonlinear advection, separated wakes, dissipation, boundary conditions, active forcing, and observer/target dependence. Delete literature disclaimers. +- **P2:** start from the scale gap between shaping an extended Navier–Stokes field and controlling a compact rotating object. Select the pinball for rich nonlinear dynamics, prior rotation knowledge, and broad force/action authority. Distinguish force-target matching from scalar drag minimization. Include Noack lineage and Feng et al. only under exact roles. End with the natural force-mediated control question. +- **P3:** bridge to nonstationary feedback; motivate DRL/PPO; treat sparse sensing as application-driven. Force feedback complements sparse observations without novelty or observability claims. Preview objective execution, target-field evaluation, and extractable/checkable action/field organization as reader hooks. +- **P4:** use learned realization → independent evaluation → action-side and field-side analysis. Explain each layer through exact closed-loop ML, sparse/reduced-order, and modal/field precedents. Remove package names and defensive nonclaim lists. +- **P5:** close confidently with the narrowed question, three contribution levels, and positive rationale for Kármán depth. Compress asymmetric scope into one sentence and bridge to contracts. Do not lead with limitations, Illusion SR, Erase, experiment caveats, or application disclaimers. +- **Experiment:** reserve a short, author-owned qualitative open-loop subsection near manuscript end. Mention it in the Introduction only if structurally useful. +- **Scientific cautions retained:** positive SR is Kármán/cloak-only; Illusion SR is historical/negative; CCD is descriptive/noncausal and uses exactly `action-correlated correction-field modes`; OID is claim-free; steady is contextual; experiment is qualitative, open-loop, author-owned, and provenance-gated. + +## 4. Recommended five-paragraph architecture + +### Paragraph 1 — fascination, hydrodynamic cloak, and finite-Re boundary + +**Rhetorical job.** Turn a familiar desire to hide or deceive into a precise fluid-mechanical gap without beginning with methods or internal evidence. + +**Logical moves.** +1. Open with concealment/invisibility as a longstanding human and science-fiction fascination. +2. Use Harry Potter only as a brief cultural hook if the author approves an exact citable source; otherwise keep the opening generic. +3. Move from optical/field cloaking to hydrodynamic cloaking: an object seeks to leave a declared background flow/signature minimally disturbed for a specified observer or comparison. +4. Introduce illusion as the natural extension from hiding to deception: replace the expected signature with a declared non-zero target. A compact radar analogy is optional. +5. Explain why transformation-based or active linear-field constructions do not transfer directly: nonlinear advection couples scales and states; body boundaries generate separated shear layers and wakes; dissipation changes cancellation logic; boundary conditions and active forcing belong to the plant; success depends on declared observer and target. +6. End with the gap: how can an actively forced body in nonlinear channel flow be controlled toward a declared background or target, and how should success be established? + +**Literature roles.** Pendry et al. (2006), Leonhardt (2006), Vasquez et al. (2009), Ma et al. (2013), and Urzhumov & Smith (2012) support cloak/active-cloak genealogy and restricted assumptions. Chen, Shen & Xu (2022) can supply an exact recent porous-medium hydrodynamic example, not finite-Re channel-flow evidence. Harry Potter/radar sources remain optional verification tasks. + +**Internal project imports.** Declared-background and declared-non-zero-target definitions; nonlinear channel-flow framing; no result values or chain IDs. + +**Excluded content.** History catalogue; packages; linear/NS equivalence; universal invisibility; priority; applications list; literature disclaimer. + +**Bridge/output.** The nonlinear-flow gap needs a concrete controllable body whose force and wake signatures are coupled. + +### Paragraph 2 — fluidic pinball and force-mediated cloaking + +**Rhetorical job.** Introduce the fluidic pinball as the object implementing the concept and distinguish the objective from ordinary drag reduction. + +**Logical moves.** +1. Start from the scale mismatch: the desired outcome is an extended Navier–Stokes field, whereas control acts through three compact rotating bodies. +2. Define a three-cylinder fluidic pinball in channel flow; defer solver, boundaries, Reynolds, geometry, sign, and action details. +3. Explain that approaching a declared background may require reducing or reshaping the body's force signature, making force a meaningful signal and intermediary. +4. Separate scalar drag minimization from potentially time-dependent, multi-component force-target matching; neither alone proves downstream field matching. +5. Establish the Noack/Morzyński lineage: rich nonlinear regimes, three independent rotations, and reduced-order/open-loop/closed-loop/ML control history. +6. Add exact rotational-force precedent: Feng et al. (2023) controls force extrema and references of a rotating pinball using DRL. This establishes nearby precedent and accessible authority, not this field-cloaking result. +7. Explain selection by rich nonlinear dynamics, prior rotation knowledge, and broad accessible force/action range in a compact MIMO plant. +8. End naturally: can rotations use force-mediated feedback to make the pinball approach the declared hydrodynamic background while preserving a checkable downstream objective? + +**Literature roles.** Noack & Morzyński toolkit lineage; Deng et al. (2020) for dynamics; Cornejo Maceda et al. (2021) and Raibaudo et al. (2020) for rotational/ML control; Feng, Wang, Xiang, Jin & Fan (2023) for force extrema/tracking. Group by role. + +**Internal project imports.** Rotating-body object; force plus sparse downstream observations; declared references; channel-flow wording. + +**Excluded content.** Bare `Re100`; solver/wall details; action signs; drag reduction as cloaking; force match as field match; unverified claims about Dixia Fan. + +**Bridge/output.** The force-mediated objective becomes a feedback problem when the reference is nonstationary and the full field is not observed online. + +### Paragraph 3 — nonlinear feedback, PPO, and three analytical hooks + +**Rhetorical job.** Motivate the learned controller and sparse execution interface, then convert achieved control into three scientific questions. + +**Logical moves.** +1. Acknowledge pinball/control precedent while identifying the harder feature: nonstationary reference following with coupled force and sparse downstream information is less intuitive than steady actuation or scalar optimization. +2. Motivate DRL for high-dimensional nonlinear closed-loop decisions without a tractable controlled-flow model; identify PPO locally as the selected optimizer, not a contribution by itself. If PPO is explained, say only that clipped policy updates regularize step size relative to the previous policy, supported by the original PPO paper or a suitable review. +3. Present sparse downstream sensing as application-driven limited remote observation. +4. Explain that body-integrated force feedback complements the sparse downstream signature. Avoid novelty, optimality, sufficiency, and observability claims. +5. Pose three hooks: does execution achieve its declared objective; does the flow match the target field beyond observer/reward space; what recurring action and field organizations can be extracted and checked? +6. End by requiring layered analysis rather than treating reward convergence as the scientific answer. + +**Literature roles.** Rabault et al. (2019), Paris et al. (2021), Li & Zhang (2022), Xia et al. (2024), and Wang et al. (2024) establish DRL/partial-observation precedents. Schulman et al. (2017), “Proximal Policy Optimization Algorithms,” arXiv:1707.06347, is the original PPO citation; Garnier et al. (2021) is a verified general review. The Introduction need not tutorialize PPO. + +**Internal project imports.** Force plus sparse velocities; independent field evaluation; bounded Kármán-specific interpretation. + +**Excluded content.** Any claim that PPO mathematically guarantees gradient descent, monotonic improvement, convergence, or learning success; generic AI claims; sparse sensing as deficiency; priority; optimal sensing/full observability; reward/DTW as field equivalence; training or architecture details; negative-limit list. PPO is motivation, not a result or contribution. + +**Bridge/output.** The three hooks determine the realization, independent-evaluation, and interpretation layers. + +### Paragraph 4 — layered approach and why each layer exists + +**Rhetorical job.** Preview the scientific method as a dependency chain, with a reason for each layer. + +**Logical moves.** +1. **Realize learned control:** establish what the closed-loop policy can do under named task contracts; capability precedes interpretation. +2. **Evaluate independently:** compare registered downstream fields with target and physical-reference roles outside the online reward; separate execution-space success from field-space evidence. +3. **Analyze from the action side:** check a reduced policy through executable closed-loop surrogate/deletion tests; ask whether compact organization survives deployment, not merely offline fitting. +4. **Analyze from the field side:** separate persistent and dynamic contributions, organize the residual through descriptive action correlation, and compare conventional modal structure; connect organization without causality. +5. Connect prior closed-loop ML control to layer 1, sparse/reduced-order reconstruction to fuller-state interpretation, and modal analysis to layer 4. Literature motivates roles, not internal findings. +6. End attractively: one compact controlled object, sparse executable feedback, independent field testing, and paired action/field interpretation under explicit contracts. + +**Literature roles.** Gautier et al. (2015) and Cornejo Maceda et al. (2021) for deployed ML laws; Loiseau et al. (2018) for sparse sensing to fuller-state representation; Deng et al. (2020) and verified modal/reduced-order records for field interpretation. + +**Internal project imports.** Three-level ladder; spatial L2 owner downstream; executable SR; corrected four-role mean comparison; separately centred non-paired residual; `action-correlated correction-field modes`; POD boundary. + +**Excluded content.** Packages; formulas/values/windows/masks/panels; independent triangulation; mechanism; causal/unique/superior CCD; OID result; defensive inventory. + +**Bridge/output.** The approach prepares the narrowed question and explains why one case receives depth. + +### Paragraph 5 — narrowed question, contribution levels, and contracts bridge + +**Rhetorical job.** Close calmly with the paper question, three levels, Kármán-depth rationale, and the next definitions. + +**Logical moves.** +1. Ask whether force-plus-sparse-observation rotational control under the separately declared channel-flow contracts can realize hydrodynamic cloak/illusion objectives, and how far the periodic Kármán cloak under the parabolic-inflow/no-slip-wall configuration can be evaluated and interpreted. +2. Name: learned-control capability across distinct tasks; independent spatial field matching for the named periodic Kármán cloak; bounded Kármán/cloak-only action-and-field control-skeleton interpretation. +3. Explain Kármán depth positively: it has the richest aligned intersection of policy execution, independent fields, executable action-law tests, corrected mean/dynamic comparisons, and descriptive field/modal organization. +4. Use one asymmetric-scope sentence: cross-case, steady, and experiment material provides breadth, context, or qualitative feasibility but does not inherit Kármán interpretation. +5. Mention the author-owned qualitative experiment only if navigation requires it. +6. End by requiring the next section to define channel plants, boundary/solver configurations, actions, observations, configuration-local Reynolds conventions, roles, comparators, metrics, regions, and windows. + +**Literature roles.** Normally light/uncited; contributions come from internal authorities. A capability-figure reference is optional and must not narrate panels. + +**Internal project imports.** Full ladder; Kármán-depth rationale; asymmetric scope; contracts ownership. + +**Excluded content.** Limitations inventory; negative Illusion SR story; Erase blockers; application disclaimers; experiment caveat list; values; package labels; section-number ending. + +**Bridge/output.** Gap/question → explicit plant, boundary, solver, Reynolds, role, comparator, metric, ROI, and window contracts. + +## 5. Frozen configuration terminology and Reynolds naming policy + +### Reader-facing configuration labels + +**Frozen pair:** `parabolic-inflow/no-slip-wall channel configuration` and `uniform-inflow/free-slip-wall channel configuration`. Repository configuration and kernel evidence confirm the first uses a parabolic inlet with bounce-back lateral walls (the no-slip realization) and the second uses a uniform inlet with free-slip lateral walls. These labels describe the principal reader-facing distinction without implying chronology or continuation. Other solver, inlet-scheme, outlet, geometry, body-boundary, action, and observation differences remain explicit in contracts. + +Internal chain IDs (`Legacy`, `V5`) are retained only for provenance, ownership, and artifact tracing; they are not manuscript adjectives. + +### Reynolds naming policy + +- Prefer the reader-facing definition $Re_D=U_{ref}D/\nu$ and define $U_{ref}$ per configuration, together with diameter $D$, viscosity $\nu$, and any relation to a code label. +- For the uniform-inflow/free-slip-wall configuration, $U_{ref}$ is the declared uniform inlet speed. +- For the parabolic-inflow/no-slip-wall configuration, source evidence implements a profile with bulk/mean scale `U0` and centreline/maximum approximately $1.5U0$. Contracts must decide which is authoritative for manuscript $U_{ref}$ and state the exact conversion before a concise Reynolds label is used. +- Do not use bare `Re100`, `Re=100`, or `Kármán Re100`. Use `the periodic Kármán cloak case` or the exact configuration label until contracts define Reynolds naming. +- Equal code labels do not imply equal physical Reynolds numbers; never unify them by label coincidence. +- Exact case and chain IDs remain provenance, not reader-facing physical definitions. + +## 6. Candidate citations requiring verification + +`full-text web/preprint` means accessible text was inspected for architecture; it is not scientific verification or artifact audit. + +### Cloaking and cultural opening + +- Pendry, Schurig & Smith, “Controlling Electromagnetic Fields,” *Science* **312** (2006), DOI `10.1126/science.1125907`; Leonhardt, “Optical Conformal Mapping,” *Science* **312** (2006), DOI `10.1126/science.1126493`; Vasquez, Milton & Onofrei, “Active exterior cloaking for the 2D Laplace and Helmholtz equations,” *PRL* **103** (2009), DOI `10.1103/PhysRevLett.103.073901`; Ma et al., “Experiments on active cloaking and illusion for Laplace equation,” *PRL* **111** (2013), DOI `10.1103/PhysRevLett.111.173901`; Urzhumov & Smith, “Flow stabilization with active hydrodynamic cloaks,” *PRE* **86** (2012), DOI `10.1103/PhysRevE.86.056313`. Existing repository state: `full-PDF`; roles limited to genealogy/restricted assumptions. +- **Mengyao Chen, Xiangying Shen & Lei Xu**, “Realizing the thinnest hydrodynamic cloak in porous medium flow,” *The Innovation* **3**(4) (2022), 100263, DOI `10.1016/j.xinn.2022.100263`. **Identity resolved; full-text open-access web read.** Exact modern porous-medium example; not finite-Re channel evidence. +- **Harry Potter hook:** unresolved as a suitable manuscript citation. Search found literary theses/secondary cultural studies, but no precise high-authority source selected for the intended claim. Citation-search task: choose primary novel, scholarly history of invisibility, or omit. Safe default: generic fascination, no named hook. +- **Radar analogy:** not verified. Search only if retained; safe default omission. + +### Pinball, force control, and DRL + +- Nan Deng, Bernd R. Noack, Marek Morzyński & Luc R. Pastur, “Low-order model for successive bifurcations of the fluidic pinball,” *JFM* **884** (2020), A37, DOI `10.1017/jfm.2019.959`. Existing R4 state: direct `full-PDF` manuscript/preprint read. +- Guy Y. Cornejo Maceda, Yiqing Li, François Lusseyran, Marek Morzyński & Bernd R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control,” *JFM* **917** (2021), A42, DOI `10.1017/jfm.2021.301`. Existing state: `full-PDF`. +- Cédric Raibaudo, Peng Zhong, Bernd R. Noack & Robert J. Martinuzzi, “Machine learning strategies applied to the control of a fluidic pinball,” *Physics of Fluids* **32** (2020), 015108, DOI `10.1063/1.5127202`. Accessible web full-text record inspected; confirm final accenting in bibliography manager. +- **Haodong Feng, Yue Wang, Hui Xiang, Zhiyang Jin & Dixia Fan**, “How to control hydrodynamic force on fluidic pinball via deep reinforcement learning,” *Physics of Fluids* **35**(4) (2023), 045137, DOI `10.1063/5.0142949`. **Identity/role resolved; full preprint text and final metadata checked.** Paper controls force extrema/reference tracking. Dixia Fan is a coauthor; accessible CRediT lists conceptualization, funding acquisition, and review/editing. Infer no sole-originator or experimental role. +- **Paul Garnier, Jonathan Viquerat, Jean Rabault, Aurélien Larcher, Alexander Kuhnle & Elie Hachem**, “A review on deep reinforcement learning for fluid mechanics,” *Computers & Fluids* **225** (2021), 104973, DOI `10.1016/j.compfluid.2021.104973`. **Exact identity verified; accessible full text inspected.** Optional general review. +- Rabault et al. (2019), DOI `10.1017/jfm.2019.62`; Paris et al. (2021), DOI `10.1017/jfm.2020.1170`; Loiseau et al. (2018), DOI `10.1017/jfm.2018.147`; Gautier et al. (2015), DOI `10.1017/jfm.2015.95`; Li & Zhang (2022), DOI `10.1017/jfm.2021.1045`; Xia et al. (2024), DOI `10.1017/jfm.2024.69`; Wang et al. (2024), DOI `10.1017/jfm.2024.333`. Existing style-guide state: `full-PDF`. + +**Policy:** citations support transitions, never internal results or priority. Names are retained only if their sentence-level roles survive drafting. + +## 7. Figure/equation/table/citation contracts for Introduction + +- **Introduction empirical figure:** none; `omit`. +- **Prospective capability figure:** Capability-owned; optional/dependency-gated; may foreshadow named breadth/Kármán depth; no pooled score, chain equivalence, positive Illusion SR, or experiment; fallback omit. +- **Conceptual workflow:** optional/currently unnecessary; realization → evaluation → action/field analysis; dependency map, never causal graph; fallback P4 prose architecture. +- **Equations:** none. Contracts owns Reynolds, action, objective, L2, DTW, role, ROI, and window definitions. No unified Reynolds equation. +- **Tables:** none in Introduction. Chain/metric contract table belongs downstream; planning ledgers are not manuscript tables. +- **Citations:** P1 compact cloak cluster; P2 pinball/rotation cluster with Feng et al. isolated for force tracking; P3 DRL/partial observation with optional review; P4 closed-loop ML/sparse ROM/field analysis by role; P5 normally uncited. + +## 8. Ownership/import/export and duplication rules + +**Introduction owns:** fascination-to-gap funnel; pinball selection; force-target versus drag versus field distinction; three hooks; full high-level ladder; Kármán-depth rationale; contracts bridge. + +**Imports:** R2/R4 declared-reference concepts and claim ceiling; M03 separate configuration/action/observation/Reynolds/comparator/metric contracts; M01/M10/final-audit ladder and duplication rules; exact literature precedent only. + +**Exports:** background/non-zero target distinction; force-mediated sparse-observation question; realization/evaluation/interpretation separation; configuration-local contract requirement; Kármán as sole deep case without bare Reynolds label. + +**Opening dependency:** cultural hook/adjective choices do not block architecture; use safe defaults. + +**Closing bridge:** define plants and configuration-local contracts before capability. + +**Duplication:** Contracts owns definitions/equations; Capability owns Fig. 1/progression; Performance owns field values/windows; SR owns formulas/deletions; Field/CCD owns corrected means/residual/modes; Cross-case owns extensions/negative routes; Steady owns separate-chain context; Experiment owns provenance/observation; Conclusion restates the ladder once. M04/M06 are different estimands; SR magnitude and steady spin are related contextual diagnostics only—never replication, agreement, validation, or triangulation. + +## 9. Author decisions required + +1. **Cultural opening — recommendation: generic fascination, no Harry Potter.** Named hook is memorable but lacks a selected JFM-suitable citation. Safe default is one clause and immediate hydrodynamic turn. +2. **Configuration labels — frozen.** Use `parabolic-inflow/no-slip-wall channel configuration` and `uniform-inflow/free-slip-wall channel configuration`; contracts retain all additional solver/action differences. +3. **Mengyao Chen example — recommendation: retain only if P1 needs a recent concrete bridge.** Exact but porous-medium scope may slow the funnel. Safe default compact cluster or omit. +4. **Feng et al./Dixia Fan precedent — recommendation: retain P2 paper collectively.** It directly supports force tracking versus drag optimization. Do not foreground individual authorship. +5. **Experiment in P5 — recommendation: omit unless navigation is incomplete.** The downstream author-owned qualitative open-loop subsection remains reserved. + +## 10. Coverage ledger + +`mapped` is not `read`; `read` is not independently verified; neither implies artifact audit. + +| State | Source/input | Boundary | +|---|---|---| +| `read` | R4 `STYLE_01_INTRODUCTION.md`, `00_STYLE_CROSSWALK.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_MASTER_AGENT_PROMPT.md` | Full repository reads for style/ownership/claims; not scientific verification or artifact audit | +| `read` | R2 `05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Full-report reads; architecture and literature-state records | +| `read` | R3 M01 `01_INTRODUCTION.md`, M03 `03_CONTRACTS_METRICS.md`, M10 `10_LIMITATIONS_CONCLUSION.md`, `11_FINAL_CONSISTENCY_AUDIT.md` | Full-report reads for architecture/contracts/ladder/audit; no recomputation | +| `read` | Chen et al. (2022) open article; Feng et al. (2023) full accessible preprint; Garnier et al. (2021) full accessible preprint/web text | Targeted identity, DOI, role, framing verification; not reproduction | +| `mapped` | Exact JFM/cloak/control records in R2/R4, including Pendry, Leonhardt, Vasquez, Ma, Urzhumov, Deng, Cornejo Maceda, Rabault, Paris, Loiseau, Gautier, Li, Xia, Wang | Existing `full-PDF` states accepted as repository records; not reread here | +| `mapped` | Remaining active R3 owners and artifact authorities | Ownership/boundary navigation only | +| `not-covered` | Exhaustive cloak history; radar review; Harry Potter source adjudication; full PPO bibliography | Unneeded for architecture; retained as citation/author choices | +| `not-covered` | Raw fields/models/hashes; CFD/training/SR/CCD/OID recomputation; figures; experiment media | Outside scope; no result, number, or panel inferred | +| `external-inaccessible` | Undermind workspace listing/search after orientation | Workspace discovery unavailable in this scoped run; targeted public records supplied identity checks | +| `external-inaccessible` | Hidden/symlink project artifacts and raw experiment material | Authority-led deferral; no artifact-dependent Introduction claim | + +## 11. Quality gate and disposition + +- [x] Exactly five paragraph jobs; no final manuscript paragraphs. +- [x] P1 reaches the nonlinear finite-Re gap from fascination. +- [x] P2 selects the pinball and distinguishes force-target matching from drag. +- [x] P3 motivates DRL/PPO, application-driven sparse sensing, and three positive hooks. +- [x] P4 supplies realization → independent evaluation → action/field analysis with literature roles. +- [x] P5 closes with narrowed question, three levels, Kármán rationale, compact asymmetric scope, and contracts bridge. +- [x] Internal chain IDs are provenance-only; the exact boundary-condition configuration pair is frozen for readers. +- [x] $Re_D=U_{ref}D/\nu$ is preferred, $U_{ref}$ is configuration-local, no bare `Re100` is allowed, and the parabolic reference/conversion decision is assigned to Contracts. +- [x] PPO wording is bounded to clipped-update step-size regularization relative to the previous policy and rejects mathematical guarantees of descent, monotonic improvement, convergence, or success. +- [x] Mengyao Chen and Dixia Fan identities/roles checked; Harry Potter/radar remain explicit tasks. +- [x] Fixed SR/Illusion/CCD/OID/steady/experiment cautions preserved. +- [x] No new internal number, result, priority, mechanism, or panel readiness. +- [x] Display/equation/table/citation ownership and fallbacks stated. +- [x] Coverage states explicit. + +**Near-collision:** M04 policy field metrics and M06 corrected mean-field accounting remain **different estimands**. Periodic, transient, steady, native/normalized DTW, and field metrics remain non-equivalent. Separate chains are not pooled or called replication, validation, agreement, or triangulation. + +**Disposition: `frozen` for Round-4 architecture.** The five-paragraph logic, configuration labels, Reynolds policy, PPO boundary, evidence ladder, and contracts bridge are settled. This is still not manuscript prose; cultural-hook choice, optional Chen example, experiment mention, and sentence-level citation wording remain drafting choices and do not block or reopen the architecture. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_02_PROBLEM_METHOD_EVALUATION.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_02_PROBLEM_METHOD_EVALUATION.md new file mode 100644 index 0000000..48f7f3d --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_02_PROBLEM_METHOD_EVALUATION.md @@ -0,0 +1,237 @@ +# Round 4 frozen architecture — Problem formulation, control framework and evaluation + +## 1. Status + +**Status:** `frozen` for Round-4 architecture; not final manuscript prose, a result dossier, or panel/artifact approval. Run-specific table values, bibliography completion and display production remain dependency-gated without reopening the architecture. + +**Scope and claim ceiling.** Section 2 establishes the physical, numerical, control and evaluation setup needed to decode Fig. 1 and all later comparisons. It may define configurations, methods, roles, objectives, metrics and qualification boundaries. It may not narrate performance, imply that current results were regenerated with the improved workflow, merge the two configurations, or use solver qualification to validate control or interpretation. + +## 2. Reader-facing title and purpose + +**Frozen reader-facing title:** **Problem formulation, control framework and evaluation**. + +This is a methodology/problem-formulation section. Its sequence is configuration → numerical realization → closed-loop control → target/objective → independent evaluation → compact numerical qualification. Reader-facing prose uses `configuration`, `formulation`, `definition`, `protocol`, `procedure`, `framework`, `specified cases/conditions`, and precise physical names. `Contract` remains internal governance vocabulary only. + +**Section question.** What physical and numerical problem is solved, what information and actuation define the learned controller, how are cloak and illusion targets constructed, and how is performance evaluated independently? + +**Bounded answer.** The main text presents one canonical formulation and improved workflow while identifying which existing evidence belongs to the parabolic-inflow/no-slip-wall configuration. It defines signal-level online objectives and field-level independent criteria separately, retains only current CelerisLab solver qualification, and defers implementation history and exhaustive matrices to provenance/supplement material. + +## 3. Author feedback and decisions incorporated + +- Replaced reader-facing `contracts` and `named task` language with academically natural physical/method terminology. +- Foregrounded the canonical no-bias, physically scaled, observation-normalized PPO workflow; removed software-development chronology and reader-facing internal chain names. +- Preserved scientific provenance: core quantitative SR, CCD and field evidence belongs to the parabolic-inflow/no-slip-wall configuration and is not represented as post-improvement retraining. +- Required one geometry figure showing both parabolic/no-slip and uniform/free-slip configurations, fixed pinball/sensor relative positions, and case-dependent disturbance/target size. +- Frozen article-wide bulk/mean-based $Re_D$ and exact conversion policy in §7. +- Retained D2Q9 MRT LBM, boundaries, curved/moving-body treatment, resolution/time-step reporting, and compact selected-observable qualification in the main text. +- Elevated sensor placement, target construction, DRL flow, DTW, registered spatial L2, and mean/phase semantics to explicit subsection jobs. +- Preserved all fixed cautions: positive SR is Kármán/cloak-only; Illusion SR is historical/negative; CCD is descriptive/noncausal and uses `action-correlated correction-field modes`; OID is claim-free; steady evidence is contextual and separate; experiment remains qualitative/open-loop/provenance-gated. + +## 4. Recommended subsection architecture and logical sequence + +### 2.1 Flow configurations and numerical method + +**P1 — physical object and coordinates.** Define the three-cylinder fluidic pinball, $D$, the streamwise/transverse coordinates, fixed relative cylinder centres, and independent cylinder rotation. Explain that lateral confinement stabilizes and organizes the wake by bounding cross-stream motion and fixing a reproducible channel environment; do not imply universality or that confinement alone establishes a control mechanism. + +**P2 — two configurations and ownership.** Decode the parabolic-inflow/no-slip-wall and uniform-inflow/free-slip-wall configurations side by side. Define inlet, outlet, lateral boundaries, cylinder treatment and case-dependent upstream disturbance or target body. State early that the parabolic/no-slip configuration supplies the principal Kármán field/SR/CCD analysis, while the uniform/free-slip setting supplies improved-workflow capability and separate steady/contextual evidence. + +**P3 — nondimensionalization and Reynolds number.** Define $U_{ref}$, $D$, $\nu$, $t^*=tU_{ref}/D$, velocities and forces as needed. Use bulk/mean inlet speed for the parabolic profile, with $U_{max}\simeq1.5U_{ref}$, and uniform inlet speed for the uniform profile. Record exact inherited-label conversion without using bare `Re100`. + +**P4 — CFD realization.** State D2Q9 lattice Boltzmann formulation with MRT collision, collision/streaming precision, regularized or parabolic inlet as configuration-specific, outlet treatment, no-slip or free-slip lateral walls, and Bouzidi treatment for curved stationary/moving boundaries. Give grid, diameter resolution, lattice time step or mapping, sampling interval and compact adequacy statement only where current authority supports each value. + +**Display cadence.** Place the two-configuration geometry/sensor schematic beside P1–P2. Put a compact configuration/method table after P4 only if it compresses otherwise repeated definitions; historical implementation differences go to supplement/provenance. + +**Bridge.** Once the physical plants and numerical realization are decodable, define how body rotation and limited wake information close the control loop. + +### 2.2 Rotational actuation, observations and PPO training + +**P1 — actuation in physical variables.** Define the three angular velocities or nondimensional surface-speed commands in fixed body order and sign convention. Present the canonical no-preset-bias mapping and smoothing/persistence only to the degree needed for physical reproduction. Avoid code-level upload/readback order unless it changes the physical command. + +**P2 — observations and sensor placement.** Define body-force components and both velocity components at three circular sensing regions centred at $x/D=10$ and $y/D=0,\pm2$, each of radius $0.25D$. Explain the rationale: downstream enough to carry a developed wake signature, transversely distributed to capture symmetry/deflection and shedding, and sparse enough to represent limited remote sensing. Raibaudo et al. provide the direct $x/D=10$ experimental precedent; Cornejo Maceda et al. and Li et al. support downstream multi-location wake sensing and phase/state information. These sources do **not** establish optimality, sufficiency or observability for the present arrangement. + +**P3 — normalization and policy representation.** Separate solver area/time averaging, fixed physical pre-scaling and online observation whitening. State that the selected policy must travel with its matching frozen normalizer. The canonical formulation has zero preset steady-derived bias; do not expose inherited factors or historical affine maps in main text. + +**P4 — PPO principle and project-specific settings.** In one short explanation, PPO updates a stochastic policy using a clipped surrogate objective that limits changes relative to the preceding policy; it does not guarantee gradient descent, monotonic improvement, convergence or control success. Current training authorities bind the recommended/current defaults to SB3 PPO, sinusoidal activation, two hidden layers of 64 units, rollout length 2048, batch 64, ten epochs, discount $0.995$, and default learning rate $3\times10^{-4}$. These are defaults, not universal selected-run metadata: retained run records include learning rates $10^{-4}$ and $3\times10^{-4}$. Main text reports final canonical choices and scientifically relevant project-specific deviations; exact per-result settings and full optimizer metadata go to supplement/provenance. + +**Design lesson boundary.** The no-bias canonical design avoids injecting a steady solution before learning. Phrase this as a design rationale, not a tested superiority result, unless a same-protocol authority is supplied; any claim that preset bias prematurely constrains learning remains evidence-gated. + +**Bridge.** The controller interface is now fixed; the next subsection defines what signal it is asked to approach and how that request differs from independent field evaluation. + +### 2.3 Target construction and control objective + +**P1 — role definitions.** Define `target/reference`, `controlled`, `physical zero/uncontrolled`, and, only where used later, `constant` as distinct acquisition roles. Roles are not interchangeable and do not travel between configurations merely because labels match. + +**P2 — cloak/background target.** Explain that a cloak objective uses a declared background or zero-body/disturbance reference appropriate to the specified case. Identify the roles needed to create the target, train/control the pinball and evaluate against an independently acquired physical-zero comparator. + +**P3 — illusion/non-zero target.** Explain that illusion uses a separately generated non-zero target signature, including the target-body acquisition where applicable. Target-body size and upstream disturbance/target geometry are case-dependent; no target parameter is generalized silently across cases. + +**P4 — online objective.** Define the reward conceptually as a weighted combination of (i) body-force-to-target discrepancy and (ii) multichannel sensor-to-target discrepancy. Explain case-dependent force aggregation and conditional/similarity mapping in prose; retain exact implementation weights only if required to reproduce a selected run and bind them to that run in the supplement. State explicitly that the online objective is an intermediary wake-signature objective, not a full-field metric. + +**Required schematic.** A DRL flow schematic shows: physical configuration/state → force and sparse velocity observations → normalization → PPO policy → three rotations → CFD evolution, with target signals entering the force and sensor reward terms. Caption ceiling: information/action/reward flow only; no convergence, observability, optimal sensing, field equivalence or causality. + +**Bridge.** Because the reward observes only integrated forces and sparse wake signals, evaluation must ask separately whether signals and registered fields approach the declared reference. + +### 2.4 Independent signal- and field-level evaluation + +**P1 — DTW algorithm and role.** Give DTW meaningful main-text space. Describe a dynamic-programming alignment path through two sampled time series under monotonic ordering and declared endpoint/window constraints. Its advantage is comparative tolerance to local time reparameterization: it can register oscillations that differ in timing and expose amplitude, frequency, phase and waveform discrepancies without privileging a single fixed phase shift. For multiple channels, compute declared per-channel costs/similarities and aggregate with explicit scaling/weights. + +**DTW limits.** DTW is a signal-level comparative diagnostic, not physical delay, causality, field equivalence, observability, or a universal cross-case score. Warping can conceal timing errors if unconstrained; therefore orientation (distance versus similarity), channel normalization, window, path constraints and aggregation must accompany every value. Native and normalized DTW are distinct estimands. + +**P2 — registered spatial L2.** Define the registered ROI, same-case roles, mask/geometry guard, velocity normalization and area weighting before results. Spatial L2 is independent field-level evaluation and is not a pipeline `Level` or `Stage`. Use the current registered ROI, $-6\leq(x-x_s)/D\leq14$ and $|(y-y_0)/D|\leq5$, a $20D\times10D$ geometry-guarded downstream rectangle registered to the sensor plane and centreline. It supersedes the earlier $[-8D,12D]$ candidate. Current artifacts do not persist solver-exact masks, so do not call it an exact common-fluid-mask metric. Use a complete-cycle mean-field error and a comparator-relative form only where target, controlled and physical-zero roles share the same acquisition definition. + +**P3 — phase-resolved and case-specific semantics.** Define periodic phase-resolved error separately from mean-field error. The current eight-slot diagnostic uses independently phased nearest snapshots and is not a repeated-cycle ensemble. Vortex uses event-relative offsets, not phase; Illusion uses its own periodic target contract; Erase is mean-field only if exact roles exist; steady uses late/profile criteria. No pooled efficacy score is licensed. + +**P4 — division of labour.** DTW evaluates sparse multichannel temporal signatures close to the controller's information space. Mean and phase spatial L2 evaluate registered fields beyond that space. Agreement is not assumed; their difference is scientifically useful because signal alignment can coexist with spatial mismatch and vice versa. + +**Main/supplement split.** Main text retains the DTW idea/limits, spatial definitions, registered ROI semantics and compact case-semantics table. Algorithm pseudocode, path constraints, channel-by-channel formulas, mask construction, registration details and sensitivity checks move to supplement. + +**Bridge.** The evaluation definitions license later comparisons but not the numerical solver itself; the selected observables therefore receive a compact configuration-bound qualification. + +### 2.5 Compact CFD qualification + +**P1 — purpose and ceiling.** State that qualification checks whether selected CelerisLab observables are sufficiently resolved under specified benchmark configurations. It does not validate PPO, SR, CCD, target construction, field interpretation or hydrodynamic cloaking. + +**P2 — retained anchors.** Use only the current CelerisLab dossier (`read/full-report`). Kan99b K2 is a `partial pass`: Strouhal number, mean drag and lift/drag fluctuation amplitudes pass their declared bands. The reported mean-lift sign differs because the CFD coordinate/force-direction convention is opposite to the comparison convention; this is not unresolved physics or suspected wrong rotation. Preserve the authority's aggregate `partial pass` label rather than relabelling the dossier. Sah04 S2 is a `pass` for its declared confined-channel Strouhal gate. Only K2 and S2 have retained complete physics runs in the qualification directory; other specified cases are not completed evidence there, and smoke runs are diagnostics only. Report exact values only after direct artifact/manifest binding. Do not state that an older solver was validated. + +**Compact table.** Columns: benchmark/configuration; selected observable; comparison authority; resolution/window; status; local caveat. Main text carries a small result/table; full matrices, hashes, sensitivity, precision and smoke-test diagnostics belong to supplement. + +**Closing bridge.** With configurations, controller, objectives, independent metrics and selected numerical observables defined, Fig. 1 may compare prescribed cases without pooling their evidence or anticipating the Kármán result. + +## 5. Detailed content controls: equations, displays, citations, split and exclusions + +### Required/reusable equations + +1. **Article-wide Reynolds number** (`required`, owner Section 2): + \[ + Re_D=\frac{U_{ref}D}{\nu},\qquad U_{max}\simeq1.5U_{ref}\ \text{for the parabolic inlet}. + \] + Definition only; exact conversion note accompanies inherited labels. +2. **Nondimensional actuation** (`required`, exact sign/order source-gated): use $s_i=\omega_iR/U_{ref}$ or an equivalent physical map. Avoid reproducing obsolete affine maps in main text. +3. **Online objective** (`required concept; formula optional`): a force discrepancy plus a sensor discrepancy, with case-specific weighting. Prefer one compact symbolic equation if reused; implementation-specific constants belong to supplement. +4. **Mean-field L2** (`required`): area-weighted, $U_{ref}$-normalised velocity-vector error over the registered ROI, with target/control/zero roles declared. +5. **Phase-resolved L2** (`required if later reused`): same spatial definition indexed by periodic phase slots; do not imply ensemble averaging. +6. **Comparator-relative reduction** (`optional`): retain only if later results use exactly the same role/ROI/mask/window definition. +7. **DTW recurrence/path equation** (`optional but recommended`): one compact recurrence or path-cost definition because DTW is uncommon in fluid mechanics; otherwise define rigorously in prose and supplement. + +### Display/table ownership and caption ceilings + +| Item | Owner and job | Status/source | Caption ceiling | Fallback | +|---|---|---|---|---| +| Two-configuration geometry/sensor schematic | §2.1; decode inlet/walls/outlet, fixed pinball/sensor geometry, case-dependent disturbance/target | `required`; redraw/production and exact geometry-source binding pending | Defines geometry and BCs; does not imply configuration equivalence, optimal sensing or solver-exact scale | Minimal line drawing plus configuration table | +| DRL information/action/reward schematic | §2.3; distinguish observation, target, reward and independent evaluation | `required`; conceptual production item | No convergence, observability, optimality, causality or field equivalence | Compact flow diagram in prose/table form | +| Configuration/method table | §2.1; compress physical/numerical ownership without history narrative | `required`; exact rows authority-bound | Defines separate configurations; no cross-configuration transfer | Split main compact table and supplement provenance matrix | +| Case/metric semantics table | §2.4; separate periodic, event-relative, mean-only and steady estimands | `required`; definition-ready | No pooled score or result | Concise prose list | +| Compact CFD qualification table | §2.5; qualify selected CelerisLab observables | `required`; current dossier/artifact bound | Solver-observable qualification only | One paragraph plus supplement pointer | + +### Main text versus supplement/provenance + +**Main text:** two physical configurations; geometry and BCs; article-wide Reynolds convention; essential LBM/MRT and curved-boundary method; physical actuation/observations; canonical normalization/PPO settings; target/reward concept; sensor rationale; DTW and spatial L2 division; case semantics; compact CelerisLab qualification; one minimal provenance statement. + +**Supplement/provenance:** internal chain IDs; old versus current action maps, scaling, bias, normalization and DTW variants; software chronology; complete configs/hashes; full PPO tables; exact reward mappings/weights not needed in the argument; qualification matrices and sensitivities; mask/registration implementation; historical solver details; selected policy/normalizer/target binding. + +**Explicit exclusions:** no performance values except the compact qualification table; no training diary; no claim that PPO converges; no `named task`; no reader-facing `Legacy`/`V5`; no older-solver validation; no target/control/zero role pooling; no force or DTW claim as field matching; no sensor optimality; no confinement-causes-control mechanism; no positive Illusion SR, causal CCD, OID result, steady transfer, or quantitative experiment claim. + +## 6. Canonical method versus evidence provenance policy and rerun gate + +### Main-text policy + +Present the improved workflow as the **canonical method formulation**: physical action nondimensionalization, zero preset steady-derived bias, explicit normalization layers, matched policy/normalizer, current CelerisLab configuration and concise project-specific PPO settings. Do not write a Legacy-versus-V5 comparison in the scientific narrative. + +### Compact provenance statement + +Use one short neutral main-text sentence: “The deep analyses reported later use data generated with an earlier implementation under the parabolic-inflow/no-slip-wall physical configuration; implementation differences do not change the physical problem and are documented in the supplement.” + +Detailed implementation differences and the fact that no complete canonical rerun was performed belong in supplement/provenance. Do not say that the earlier results were generated by the canonical pipeline or that equivalence, reproduction, or a matched rerun was demonstrated. + +## 7. Terminology and notation freeze + +- **Section title:** `Problem formulation, control framework and evaluation`. +- **Reader-facing configurations:** `parabolic-inflow/no-slip-wall channel configuration`; `uniform-inflow/free-slip-wall channel configuration`. +- **Provenance only:** internal `Legacy` and `V5` identifiers; never reader-facing adjectives. +- **Cases:** use `periodic Kármán cloak case`, `Vortex case`, `Illusion case`, `Erase case`, or exact physical target/condition; never `named task` or bare `Re100`. +- **Article-wide Reynolds policy:** $Re_D=U_{ref}D/\nu$. $U_{ref}$ is the uniform inlet speed in the uniform configuration and the bulk/mean inlet speed in the parabolic configuration; $U_{max}\simeq1.5U_{ref}$ for that profile. Where authoritative two-dimensional code labels used $2D$ as reference length, manuscript $Re_D$ is exactly one-half of the inherited code label. Equal labels never imply equal physical Reynolds numbers. +- **Execution:** `wake-signature matching using forces and sparse downstream velocity observations`. +- **Evaluation:** `field matching`; spatial L2 primary where supported; DTW complementary, signal-level and case-specific. +- **Spatial notation:** distinguish ROI, geometry guard/solid mask, area weights, $E_{mean}$, $E_{phase}$ and any relative comparison. Spatial L2 is never `Level-2` or `Stage-2`. +- **Roles:** target/reference, controlled, physical zero/uncontrolled, constant (only where acquired). +- **Strength:** `defines`, `uses`, `compares`, `qualifies the selected observable`; not `fully validates`, `proves`, `guarantees`, `optimal`, `robust`, `equivalent`, or `mechanism` without dedicated authority. + +## 8. Result, display and equation ownership inventory + +| Item | Section 2 ownership | Later ownership / prohibition | +|---|---|---| +| Geometry, BCs, nondimensionalization, solver | Define once here | Later captions identify configuration without redefining method | +| Actuation, observations, normalization, PPO settings | Canonical definitions here | SR owns its exact historical executable law; no action-map transfer | +| Target/reference and online objective | Define roles and objective here | Capability/cross-case own outcomes under exact cases | +| Sensor placement | Coordinates/radius/rationale and literature boundary here | No later optimality or observability inference | +| DTW | Algorithm, aggregation, orientation and limits here | Performance/cross-case own values/windows | +| Spatial L2/ROI | Reusable definitions here | Kármán performance owns detailed values; Field/CCD uses a different estimand and must not claim replication/agreement | +| Mean/phase/event/steady semantics | Definition table here | Each result owner renews changed roles/window only | +| CFD qualification | Compact selected-observable table here | No result section may promote it to controller/interpretation validation | +| SR/CCD/OID/steady/experiment | Definitions only when needed for boundaries | Owned downstream under fixed scientific cautions | + +**Near-collision freeze.** The standardized Kármán field metric and corrected CCD mean-field accounting remain **different estimands** because acquisitions, role sets, masks, weighting/normalization and windows differ. Periodic mean/phase, event-relative, steady profile, and native/normalized DTW also remain different estimands. SR action magnitude and steady spin are related contextual diagnostics only. No arithmetic pooling, replication, validation, agreement, closure or triangulation wording. + +## 9. Exact literature/style identities and read levels + +### Retained from `STYLE_02_CONTRACTS_METRICS.md` + +1. G. Y. Cornejo Maceda, Y. Li, F. Lusseyran, M. Morzyński & B. R. Noack (2021), “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* **917**, A42. DOI `10.1017/jfm.2021.301`. `full-PDF`, targeted section-architecture read; metadata and relevant setup/sensor passages checked, not reproduced. +2. J. Rabault, M. Kuchta, A. Jensen, U. Réglade & N. Cerardi (2019), “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* **865**, 281–302. DOI `10.1017/jfm.2019.62`. `full-PDF`, targeted section-architecture read; not equation-by-equation verified. +3. R. Paris, S. Beneddine & J. Dandois (2021), “Robust flow control and optimal sensor placement using deep reinforcement learning”, *Journal of Fluid Mechanics* **913**, A25. DOI `10.1017/jfm.2020.1170`. `full-PDF`, targeted section-architecture read; not equation-by-equation verified. +4. X. Mao, H. M. Blackburn & S. J. Sherwin (2015), “Nonlinear optimal suppression of vortex shedding from a circular cylinder”, *Journal of Fluid Mechanics* **775**, 241–265. DOI `10.1017/jfm.2015.304`. `full-PDF`, targeted section-architecture read; not equation-by-equation verified. + +**Observed practice retained:** these papers vary in headings and equation density, but share dependency order from physical plant/baseline through objective/method and numerical qualification to results. Reusable definitions earn equations; geometry/sensors appear early; qualification caveats sit beside the observable they limit; tables compress settings or convergence rather than dumping provenance. This observation supports the architecture but establishes no project value or validity. + +### Sensor-placement and DRL authorities + +5. C. Raibaudo, P. Zhong, B. R. Noack & R. J. Martinuzzi (2020), “Machine learning strategies applied to the control of a fluidic pinball”, *Physics of Fluids* **32**, 015108. DOI `10.1063/1.5127202`. `full-text web/accepted-manuscript` targeted read. Direct precedent for three downstream hot-wire sensors at $x/D=10$ used to monitor/evaluate the wake; it does not establish the present transverse coordinates, radius, two-component measurement or optimality. +6. S. Li, W. Li & B. R. Noack (2022), “Machine-learned control-oriented flow estimation for multi-actuator multi-sensor systems exemplified for the fluidic pinball”, *Journal of Fluid Mechanics* **952**, A36. DOI `10.1017/jfm.2022.908`. `full-report/full accessible manuscript` targeted sensor-placement read. Supports downstream multi-location velocity sensing for phase/state information and explicitly builds on Cornejo Maceda et al.; its nine-probe grid is not the present three-disk geometry. +7. L. Marra et al. (2024), “Actuation manifold from snapshot data”, *Journal of Fluid Mechanics*. DOI `10.1017/jfm.2024.593`. Repository state `mapped/full record`; the full PDF was not read in this audit. Use only for low-dimensional controlled-flow plausibility and compact-sensing rationale, not exact placement, optimality or observability. +8. J. Schulman, F. Wolski, P. Dhariwal, A. Radford & O. Klimov (2017), “Proximal Policy Optimization Algorithms”, arXiv:1707.06347. Read state inherited as exact original citation, `mapped/full-text record`; use only for the clipped-update principle unless directly reread during bibliography finalization. +9. P. Garnier, J. Viquerat, J. Rabault, A. Larcher, A. Kuhnle & E. Hachem (2021), “A review on deep reinforcement learning for fluid mechanics”, *Computers & Fluids* **225**, 104973. DOI `10.1016/j.compfluid.2021.104973`. `full-text` state inherited from the Introduction freeze; optional broad DRL precedent. + +## 10. Dependency-gated execution items + +No unresolved author choice blocks the architecture. Before numerical drafting or production, bind exact per-result PPO settings, grid/time/precision values, selected policy/normalizer/target, qualification rows, and every displayed inherited Reynolds label. These are execution dependencies, not architecture decisions. Zero preset bias remains a design rationale rather than a tested superiority claim. + +The article-wide convention uses bulk/mean inlet speed for the parabolic profile, with the ideal planar relation $U_{max}=1.5U_{ref}$. The current training authority verifies $Re_D=Re_{code}/2$ for its uniform-inflow code labels. An inspected historical parabolic repository note instead labels `U0` as inlet centreline velocity, so parabolic inherited labels must be converted only after source metadata identify centreline versus bulk/mean speed; no unsupported half-label conversion is inferred there. + +## 11. Coverage ledger + +`mapped` is not `read`; `read` is not independently verified; neither implies artifact audit. + +| State | Source/input | Why in scope | Evidence boundary | +|---|---|---|---| +| `read` | Round-4 `README.md`, `00_MASTER_AGENT_PROMPT.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_DISPLAY_EQUATION_INVENTORY.md`, `00_QUALITY_GATE.md`, `00_STYLE_CROSSWALK.md`, `STYLE_02_CONTRACTS_METRICS.md`, `SECTION_01_INTRODUCTION_FREEZE.md`, `STYLE_01_INTRODUCTION.md` | Workflow, author decisions, style evidence, interfaces, deletion check | Full repository reads; not independent scientific verification or artifact audit | +| `read` | Round-2 `05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md`; Round-3 `03_CONTRACTS_METRICS.md`, `00_MODULE_INTERFACE_LEDGER.md`, `11_FINAL_CONSISTENCY_AUDIT.md` | Controlling architecture, method dossier, ownership and consistency | `full-report`; internal values/artifacts not recomputed | +| `read` | `src/drl_pinball/train/TRAIN_PIPELINE.md`, `DESIGN_DECISIONS.md` | Current canonical training method, settings and explicit no-post-fix-rerun boundary | Current authority read directly; selected historical policies/results not independently rerun or artifact-audited | +| `read` | Cornejo Maceda et al., Rabault et al., Paris et al., Mao et al. records retained from Style 02 | JFM organization and method-section practice | Declared `full-PDF` targeted reads; literature is style/context only | +| `read` | Raibaudo et al. accessible accepted-manuscript/web text; Li et al. accessible full manuscript/repository copy | Sensor precedent and rationale | Targeted full-text reads; do not establish project geometry or optimality | +| `read/full-report` | `CELERISLAB_VALIDATION_DOSSIER.md` | Current CelerisLab qualification architecture | Kan99b K2 is `partial pass` (selected frequency/drag/fluctuation observables pass; the mean-lift sign differs under the understood CFD coordinate/force-direction convention, not unresolved physics or wrong rotation; retain the dossier's aggregate label) and Sah04 S2 is `pass`; exact publication values remain artifact/manifest-bound; no older-solver validation | +| `mapped` | Current solver/config/environment/evaluation code and manifests named by M03/training authorities | Exact implementation and artifact provenance | Located through read authorities; not exhaustively read or rerun | +| `not-covered` | Raw policies/normalizers/targets, external fields, masks, hashes, full qualification matrices, new CFD/training/SR/CCD | Outside section-freeze scope | No rerun, equivalence, result or panel inferred | +| `not-covered` | Full DTW sensitivity study, exhaustive PPO tutorial, software history and old implementation comparison | Supplement/provenance or unnecessary | Main architecture remains compact and physical | +| `read` | `WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md` | Exact sensor geometry/rationale, registered ROI, metric/phase semantics and bibliography boundaries | Working full-report authority reconciled with code on 2026-08-09; not an artifact audit | +| `mapped/full record` | Marra et al. (2024), DOI `10.1017/jfm.2024.593` | Low-dimensional controlled-flow plausibility | Full PDF not read here; no exact placement, optimality or observability claim | +| `external-inaccessible` | Hidden/external evidence payloads named by manifests | Artifact support outside the visible checkout | Authority-led deferral; no result inferred | + +## 12. Quality gate and disposition + +- [x] Frozen integrated section/style architecture, not manuscript prose. +- [x] Reader-facing title and language are physical and JFM-compatible; `contracts`, `named task`, and internal chain labels are removed from reader-facing recommendations. +- [x] Logical sequence makes Fig. 1 and later results decodable. +- [x] Both inlet/wall configurations, confinement rationale, fixed sensor relationship and case-dependent disturbance/target geometry are represented. +- [x] Bulk/mean-based article-wide $Re_D$ policy and centreline relation are explicit; bare `Re100` is prohibited. +- [x] Main-text CFD, curved/moving boundary treatment, compact selected-observable qualification and older-solver exclusion are specified. +- [x] Canonical no-bias/normalization/PPO method and historical-evidence provenance are separated; rerun completion/equivalence is not asserted. +- [x] Sensor coordinates, radius, both velocity components, rationale, current ROI/metric authority, exact citation roles and non-optimality ceiling are retained. +- [x] Target construction, reward roles and DRL flow schematic have distinct ownership. +- [x] DTW receives algorithmic space and exact limitations; L2/ROI/mean/phase/case semantics remain independent. +- [x] Displays/equations have owner, job, readiness, ceiling and fallback; inventory does not imply artifacts exist. +- [x] Exact Style 02 identities/DOIs/read levels and observed practice are preserved. +- [x] Canonical-main-text policy, compact earlier-implementation provenance, supplement detail, coverage states and fixed scientific cautions are explicit. +- [x] `STYLE_02_CONTRACTS_METRICS.md` may be deleted because all unique necessary style evidence, identities/read levels, observed practice, recommendations, exclusions and ownership have been integrated here. +- [x] `STYLE_01_INTRODUCTION.md` may be deleted because its unique necessary Introduction style evidence and exact identities/read states are preserved in `SECTION_01_INTRODUCTION_FREEZE.md`; no Section 1 architecture or caution depends solely on the style memo. + +**Disposition:** `frozen` for Round-4 Section 2 architecture. No unresolved author choice remains. Run-specific numerical rows, source-specific parabolic Reynolds conversions, bibliography completion and display production are dependency-gated execution tasks and do not block the freeze. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_03_CAPABILITY_PROGRESSION.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_03_CAPABILITY_PROGRESSION.md new file mode 100644 index 0000000..628859d --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/SECTION_03_CAPABILITY_PROGRESSION.md @@ -0,0 +1,252 @@ +# Round 4 discussion draft — Capability and physical progression + +## 1. Status, purpose and bounded answer + +**Disposition:** `discuss`. This is an author-discussable Round-4 architecture, not polished prose, a frozen section, or a publication-panel claim. + +**Provisional reader-facing title:** **Capability across steady, periodic, transient and retargeted wakes**. + +This is the first results-facing argument. It must establish, selectively rather than as a gallery, capability in four physically different settings; show why the periodic Kármán cloak has the strongest intersection of visual, signal and independent field evidence; and convert that hierarchy into the reason for analytical depth. Detailed Kármán evaluation, full cross-case metrics, steady interpretation and mechanisms remain owned later. + +Call the display **the first results figure (likely Fig. 3)**, not Fig. 1. Section 2 owns preceding geometry/configuration and DRL-flow schematics; final numbering depends on whether those become one or two figures. + +**Question.** What evidence shows progression from steady control to periodic Kármán cloaking, an event-relative Vortex case and a non-zero-target Illusion case without turning breadth into a pooled or general claim? + +**Bounded answer.** Named displays support capability under distinct steady, periodic, event-relative and retargeted comparisons. The periodic Kármán cloak additionally has target–controlled–uncontrolled evidence in which complete-cycle mean and phase-resolved spatial L2 both improve strongly, with complementary signal alignment. That intersection warrants depth; it does not establish transfer, generalization, universal control, positive Illusion SR or causality. + +Targeted Nowledge recall was used only to recover recent figure decisions; internal claims below were checked against repository files. + +## 2. Exact argumentative arc and space budget + +Use this continuous arc: + +`viewing question → steady discovery seed → comparator-bearing Kármán headline → mean/phase quantitative result → action/sensor evidence → removal of periodicity in Vortex → non-zero-target Illusion → envelope and Kármán selection` + +The reader should leave knowing: (i) four named capabilities are non-commensurate; (ii) Kármán is more than the most attractive image because controlled fields move closer to target in persistent-mean and phase-resolved senses; and (iii) only Kármán currently joins policy execution, independent fields and later action/field interpretation. + +**Recommended budget:** 1,250–1,550 body words, eight functional paragraphs of about 140–190 words, plus one near-full-page two-column figure and caption. This is about 2.2–2.8 two-column text pages, or 3.5–4.5 pages of combined article real estate with the display. For an 11,500–13,500-word results/discussion body, this supports the provisional 11% share. Five paragraphs were too thin: separate jobs are needed for visual comparison, mean-versus-phase evidence, action/sensor evidence and the breadth boundary. If compression is required, merge P2/P3 and P6/P7; retain P4, P5 and P8. + +Use at most two printed subheadings: **Periodic Kármán cloaking as the reference case** and **Extensions in temporal and target definition**. The same paragraph order works unheaded. + +## 3. Paragraph-by-paragraph architecture + +### P1 — Viewing contract and figure placement + +**Says.** Place the figure with the opening. All blocks compare a controlled state with a declared target/reference and uncontrolled state, but target meaning and temporal coordinate change. Renew only Section 2's target/controlled/uncontrolled, spatial-L2 and DTW vocabulary. State explicitly that layout does not create a common ranking. + +**Evidence.** Section 2 definitions; Round-2 progression; Round-3 capability/audit; reproduction role schema. + +**Local caveat.** Reader prose uses physical configuration names; internal Legacy/V5 identifiers remain provenance-only. Similar graphics do not make windows or metrics equivalent. + +**Transition.** Explain why the progression begins with a steady result. + +### P2 — Steady discovery seed + +**Says.** Approximately steady rear-cylinder rotation produced the first useful low-deficit state. Compare uniform reference, accepted controlled endpoint and stationary/uncontrolled pinball in the uniform-inflow/free-slip-wall configuration at manuscript $Re_D=50$. A late streamline or disturbance view supplies genuine empirical content without opening the full steady analysis. + +**Evidence.** Current steady endpoint/display authorities and Round-3 steady synthesis. + +**Local caveat.** This is a late/settled endpoint, not a periodic mean or phase view; it is not an optimum, stability result, mechanism or evidence for parabolic/no-slip SR/CCD. + +**Transition.** Periodic shedding tests whether controlled evolution follows a time-dependent target. + +### P3 — Kármán comparator-bearing headline + +**Says.** For the periodic Kármán cloak in the parabolic-inflow/no-slip-wall configuration, read three phase-0 vorticity panels as **target/reference → controlled → uncontrolled**. The controlled wake approaches the target more closely in the registered downstream region. Discuss target proximity and wake organization, not colours or whole-domain identity. + +**Evidence.** Current `karman_re100` role authorities, reproduction manifest and registered evaluation. + +**Local caveat.** Phase 0 is one deterministic phase-aligned snapshot, not a mean, ensemble or uncertainty statement. Final $Re_D$ follows Section 2 policy; no bare inherited `Re100` appears. + +**Transition.** One phase view is persuasive but cannot carry the field claim. + +### P4 — Mean and phase quantitative headline + +**Says.** Give one substantive callout: controlled registered target-field error is about **82% lower than uncontrolled** for both complete-cycle mean and separate eight-slot phase diagnostics. The badge may show rounded source values: $E_{mean}=0.086$ versus $0.475$ and $E_{phase}=0.113$ versus $0.631$ (controlled versus uncontrolled). The mean tests persistent organization; phase-resolved L2 tests evolving periodic organization at matched slots. + +**Evidence.** Exact authority rows `0.085771/0.475206`, `0.112680/0.630878`, relative reductions `0.819508/0.821392`. + +**Local caveat.** This is a preview. Kármán performance owns ROI, geometry guard/mask, normalization, cycles, phase selection, precision and interpretation. Never add the numerically close corrected four-role CCD errors: they are a different estimand. + +**Transition.** Ask what action and sparse signals add. + +### P5 — Action/sensor evidence and depth selection + +**Says.** Show three controlled rotation commands over roughly three target cycles beside one legible sensor phase portrait (or, only if readable, a 2×3 six-channel microgrid). Legend order remains target → controlled → uncontrolled. The target has no action and must not receive a fictitious zero-action trace. State that controlled sparse signals align more closely with target; optionally report target-normalized DTW similarity `0.933` versus `0.625` in prose/caption. Repeated action offset plus modulation motivates later inquiry but is not yet a control-skeleton conclusion. + +**Evidence.** `timeseries.csv` schema, reproduction phase portraits, Kármán DTW summaries and plotting authority. + +**Local caveat.** DTW is higher-is-better signal similarity under a declared window—not spatial error, delay or causality. SR formula/deletion belongs later. Training reward is omitted. + +**Transition.** Change one physical condition at a time. + +### P6 — Vortex: removing periodicity + +**Says.** Use one centred incoming Lamb-vortex case. Show **target/reference → controlled → uncontrolled** vorticity at one declared event-relative offset, recommended `o=0` subject to source/legibility audit. A tiny controlled-action sparkline is optional; do not add another phase portrait. + +**Evidence.** `vortex_lamb_y000`, `event_fields.npz`, offsets `[-10,-5,0,5,10]`, Vortex timeseries authority. + +**Local caveat.** This is event-relative, never phase-resolved. Quantitative event L2 is blocked pending exact evaluator/role binding, so no Vortex L2 appears. It supports named comparable-scale transient capability, not arbitrary-flow control, transfer or generalization. + +**Transition.** Vortex changes temporal coordinate; Illusion changes the desired signature. + +### P7 — Illusion: non-zero retargeting + +**Says.** Show **non-zero target → controlled pinball → uncontrolled pinball** for the retained 0.75 target-radius Illusion case at periodic phase 0. The target is a separately constructed body wake/signature, not physical-zero flow. The question is retargeting rather than suppression. + +**Evidence.** `ill_075L`, seed 43, target/controlled/physical-zero phase roles and reproduction manifest; physical target radius ratio 0.75. + +**Local caveat.** PPO capability only. Print no field L2 unless exact current roles/evaluator are production-bound. This is not full-state equivalence, pooled efficacy or positive Illusion SR. Mention historical negative Illusion SR in one clause, not as another panel. + +**Transition.** Bound breadth and narrow the paper. + +### P8 — Envelope, Re400 decision and bridge + +**Says.** Configuration, temporal coordinate and target definition change, so no pooled ranking follows. Kármán is selected because it uniquely combines comparator-bearing field evidence, periodic action/sensor records and later executable-law/field-decomposition evidence. Vortex/Illusion return under case-specific metrics; steady returns for separate context. + +**Recommendation:** **omit the Re400 marker from this figure.** It meant a small annotation for a uniform/free-slip condition where mean error improved but phase error degraded. It is scientifically useful as an estimand-divergence warning, but a four-case figure with traces and a quantitative badge is already dense. It would introduce another configuration/Re condition and compete with the progression. Consequence: the opening loses a visible cross-Re limit; compensate with one prose sentence here or place exact values with the performance/envelope owner. The ladder is unchanged. + +**Bridge.** End with the unresolved inference: sparse-signature alignment plus one field view establish capability, but independent mean and phase evaluation determines how far the selected periodic wake approaches target. + +## 4. Concrete large-figure storyboard + +### Format and macro-grid + +- **Provisional label:** first results figure, likely Fig. 3; final numbering follows Section-2 display production. +- **Size:** full two-column width, about **178 mm × 190–210 mm** before caption; 0.8–1.0 journal page. Never single-column. +- **Area:** Kármán **58–62%**; steady **11–13%**; Vortex **13–15%**; Illusion **13–15%**. +- **Rows 1–2:** contiguous Kármán block across full width. +- **Row 3:** steady (0.9 width unit), Vortex (1.05), Illusion (1.05), in physical order. +- Separate blocks by whitespace/rules, not arrows implying numerical continuation. No Re400 or experiment block. + +### Kármán block, provisional (a–f) + +**Field row (34–38% total figure height):** +- (a) target/reference phase-0 vorticity; +- (b) controlled phase-0 vorticity; +- (c) uncontrolled phase-0 vorticity. + +Equal widths, same crop/registration and one common symmetric scale. Print role headings above panels and physical configuration/$Re_D$ once in the block header. + +**Evidence strip (18–22% total height):** +- (d) three controlled action traces over about three target cycles; no target action; +- (e) one sensor phase portrait, stable order target → controlled → uncontrolled; prefer one legible portrait over six tiny ones; +- (f) compact text/mini-dumbbell badge: `mean L2 0.086 | 0.475`, `phase L2 0.113 | 0.631`, labelled `controlled | uncontrolled`, with `≈82% lower`. Safe default: keep DTW in prose/caption so field evidence remains visually primary. + +### Subordinate blocks + +**(g) Steady.** Three-column microtriplet of late total-velocity streamlines: `uniform reference → accepted controlled endpoint → stationary/uncontrolled`. Label `late/settled`. Do not add profile, reverse branch, spin sweep or theory. + +**(h) Vortex.** Three-column event-vorticity triplet: `target/reference → controlled → uncontrolled`, centred Lamb vortex, one literal offset (default `o=0`, audit before production). Optional thin action sparkline. No event-L2 badge. + +**(i) Illusion.** Three-column phase-0 vorticity triplet: `non-zero target → controlled → uncontrolled`, target-radius ratio 0.75, seed 43. Subtitle `PPO capability`. No SR field/curve or efficacy bar. + +### Visual grammar + +1. Invariant role order: target/reference left, controlled centre, uncontrolled right. +2. Field colour encodes physics, not role. Use labels/borders: target black, controlled blue, uncontrolled dark grey/orange. +3. Physical headers only: `steady reference`, `periodic Kármán cloak`, `incoming Lamb vortex`, `0.75-radius Illusion target`. Internal IDs stay in provenance. +4. Temporal badges: `late/settled`, `periodic phase 0`, `event offset o=...`, `periodic phase 0`. +5. Common normalized crop within each triplet where geometry permits; do not fake identical registration across configurations. +6. One role legend, one portrait legend and one colourbar per compatible family—not per micro-panel. +7. Minimum final typography: headers 8–9 pt, roles 7–8 pt, axes/colourbars 6.5–7 pt. Drop optional sparkline/DTW before shrinking text. + +### Colour-scale policy + +Use one common symmetric vorticity scale within every target–controlled–uncontrolled triplet. Across cases/configurations, use case-specific nondimensional limits unless production audit confirms identical normalization and a common scale that preserves structure. A universal scale can hide low-amplitude structure and imply commensurability. Kármán/Illusion may share only if units and normalization are identical and neither saturates. Steady streamlines use their own speed legend. Thus: **common scales within declared comparisons; case-specific scales across non-equivalent comparisons**. + +### Mean, phase and event decoding + +- **Mean:** average over declared complete cycles/window; persistent organization. Here represented by $E_{mean}$, not another map. +- **Phase 0:** one independently aligned periodic snapshot; not mean, repeated-cycle ensemble or uncertainty. +- **Event-relative:** one offset from a canonical transient event; never periodic phase. +- **Late/settled:** endpoint/late field under declared criterion; not phase or mean unless explicitly averaged. + +Pairing phase-0 Kármán visuals with mean and phase scalar summaries lets the eye see one periodic state without asking that snapshot to carry the whole field claim. + +## 5. Output disposition + +| Output | Headline figure | Later owner / reason | +|---|---|---| +| Action traces | Include once for Kármán; Vortex sparkline optional | SR owns full law/deletion; cross-case owns Vortex detail | +| Raw force/sensor time series | Omit | Performance/supplement; too dense | +| Force phase portraits | Omit | Sensor portrait is closer to wake-signature objective; both duplicate grammar | +| Sensor phase portraits | Include once for Kármán | Full six-channel evidence later/supplement | +| Mean fields | No map; Kármán mean-L2 badge only | Performance/field owner; adding mean triplets doubles fields | +| Phase-0 vorticity | Include Kármán and Illusion | Eight-phase sequences later/supplement | +| Event vorticity | Include one Vortex offset | Multi-offset sequence cross-case/supplement | +| Streamlines | Include only steady | Legible endpoint distinction; detail later | +| Relative-error maps | Omit | Performance owner; need mask/scale explanation | +| Training reward curves | Omit | Retention/performance or supplement; not physical capability | +| DTW | One Kármán prose/caption callout | Exact formula/window later; no pooled bars | +| Spatial L2 | Kármán mean/phase badge | Detailed values/ROI/window next section; no common cross-case row | +| Experiment | Exclude | Author-owned late qualitative section | +| Re400 divergence | Omit; prose or later inset | Avoid fifth condition/configuration clutter | + +## 6. Caption skeleton + +> **[Likely Fig. 3; final number depends on preceding displays.] Capability and physical progression under distinct comparison definitions.** (a–c) Periodic Kármán cloak in the parabolic-inflow/no-slip-wall configuration at manuscript-defined $Re_D$: target/reference, controlled and uncontrolled phase-0 vorticity, in that order, with common symmetric scale and matched crop. (d) Controlled cylinder rotations over [window]; the target has no action trajectory. (e) Sparse downstream sensor phase portrait, target, controlled and uncontrolled. (f) Registered field-error headline: complete-cycle mean $E_{mean}$ and separately phased $E_{phase}$, controlled versus uncontrolled; DTW, if stated, is higher-is-better sparse-signal similarity, not a field norm. (g) Steady seed in the uniform-inflow/free-slip-wall configuration: uniform reference, accepted controlled late/settled endpoint and stationary/uncontrolled pinball, shown as streamlines. (h) Centred Lamb-vortex target, controlled and uncontrolled vorticity at event offset $o=[...]$; the offset is not phase and no event L2 is asserted. (i) 0.75 target-radius Illusion, seed 43: non-zero target, controlled and uncontrolled phase-0 vorticity; PPO capability only, with no positive Illusion-SR claim. Scales are common within directly compared role triplets and case-specific across non-equivalent cases unless audited normalization permits sharing. No pooled efficacy, transfer/generalization or experiment is implied. + +Caption must retain physical configuration/$Re_D$, target meaning, role order, variable/scale, temporal coordinate, Kármán mean/phase distinction, DTW orientation if shown, absent Vortex event L2, Illusion PPO-only boundary and no pooling. Keep internal IDs, policy names, full ROI/mask/cycle details and package paths out of the reader caption. + +## 7. Ownership, interfaces and deletions + +**Imports:** Section 2 supplies configurations, $Re_D$, role/action/sensor definitions, DTW/L2 and temporal semantics. Kármán performance supplies one rounded headline comparison. Cross-case supplies Vortex offset and Illusion evidence status. Steady supplies chronology and one endpoint view. + +**Exports:** bounded breadth, Kármán as sole deep case, and the unresolved independent-field question. No mechanism, transferable law, pooled score or experiment. + +**Deletion ownership:** +- This section deletes full Kármán ROI/window/mask/cycle/retention detail; performance owns it. +- Performance refers back without repeating progression. +- Cross-case owns Vortex matrix/DTW, Illusion negative-SR numbers and Erase; delete them here. +- Steady owns sign, spin sweep, reverse branch, profiles, theory and interpretation; delete them here. +- Globally omit from this figure reward curves, force portraits, mean/error-map triplets, Re400 and experiment. + +## 8. Claim ceiling and near-collision + +**Green:** four named capability blocks under distinct comparisons; Kármán controlled error lower than uncontrolled in declared mean and phase L2; Kármán controlled DTW similarity higher under its own contract; Kármán selected because evidence types coexist. + +**Amber:** breadth across named dynamics/objectives, not generality; steady is context; Vortex supports a named comparable-scale transient reading; Illusion shows PPO objective retargeting. + +**Red:** pooled efficacy/ranking; transfer/generalization/robustness/universality; positive Illusion SR; causal CCD/force-to-field mechanism; DTW as delay/field equivalence; visual similarity as full-state proof; experiment-as-validation. + +**Near-collision:** Kármán mean and phase L2 are related diagnostics, not pooled. Performance L2 and corrected four-role CCD means are different estimands. Steady profiles, periodic L2, event views and Illusion views are different estimands. DTW and L2 are related diagnostics, not replication, agreement or triangulation. + +## 9. Readiness and author decisions + +| Component | Status | Dependency/fallback | +|---|---|---| +| Composite | `dependency-gated` | Bind source/crop/scale/render provenance; fallback to source-bound panes | +| Kármán triplet/trace/portrait | `dependency-gated` | Bind raw fields, phase, indices, action sign/order; portrait may move later | +| Kármán L2 badge | `required` for recommendation | Values text-ready; fallback is P4 sentence | +| Steady triplet | `dependency-gated` | Bind uniform/accepted/stationary arrays; fallback prose/two panes | +| Vortex triplet | visual `dependency-gated`; event L2 `blocked` | Confirm roles/offset; no number | +| Illusion triplet | `dependency-gated` | Bind target/controlled/uncontrolled, seed and phase; fallback target/controlled pair | +| Re400 | `optional`, recommend omit | Prose/later inset | +| Experiment | excluded by author | Later section only | + +No component is called publication-ready. + +**Decisions needing discussion:** +1. Approve one near-full-page figure with Kármán about 60% (recommended) versus a two-page display. +2. Choose steady streamlines (recommended for small-panel legibility) versus disturbance magnitude; consequence is variable non-uniformity that the caption bounds. +3. Confirm centred Lamb vortex and exact event offset; default `o=0` unless an adjacent offset is more legible. +4. Choose one Kármán sensor portrait (recommended) versus a 2×3 six-channel microgrid. +5. Keep DTW out of the badge and in prose/caption (recommended), preserving L2 primacy. +6. Omit Re400 (recommended); consequence is no visible cross-Re failure marker in the opening. +7. Resolve final number after Section-2 figure production; working label likely Fig. 3. + +## 10. Compact evidence ledger and disposition + +| State | Inputs | Boundary | +|---|---|---| +| `read` | Round-2 freeze/style; required Round-3 capability, contracts, performance, cross-case, steady and final audit; Round-4 controls, Style 03 and Section 2 | Full-report architecture/evidence reads; not raw-artifact verification | +| `read` | `DATA_DICTIONARY.md`, reproduction manifest, SR reproduction/plot-package READMEs, steady figure README, Round-1 case-metric/Confirmation navigation | Role/order/schema/material availability and visual contracts; no new result | +| `read` | `docs/My_Confirmation/Thesis_template.pdf` through available PDF text | Context/material navigation only; no current source-array contract or number inferred | +| `mapped` | External phase/event/late role payloads and rendered reproductions | Candidate production sources, not panel approval | +| `not-covered` | New CFD/training/evaluation, event-L2 code, rendering, pixel-level PDF audit | Outside architecture; no inference | +| `external-inaccessible` | External Optane payloads/model-normalizer bundles where unavailable | Defers publication-source audit; does not block discussion text | + +The old “Fig. 1” numbering assumption is superseded because Section 2 now owns preceding displays; scientific role is unchanged. The eight-paragraph plan and exact storyboard repair the earlier thin allocation and unspecified figure. Exact crops, scales, hashes, selected offset and trace indices remain production dependencies. Quantitative Vortex event L2 remains blocked; no recommended panel needs it. + +**Disposition:** `discuss`, not frozen. Safe recommendation: approve the one-page Kármán-dominant composition; include one Kármán action/sensor group and only Kármán mean/phase L2 as the quantitative badge; use steady streamlines and Vortex/Illusion vorticity microtriplets; omit Re400, reward curves, error maps and experiment. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_03_CAPABILITY_FIGURE.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_03_CAPABILITY_FIGURE.md new file mode 100644 index 0000000..ffef7e8 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_03_CAPABILITY_FIGURE.md @@ -0,0 +1,262 @@ +# Round 4 style research — capability opening and headline figure + +**Lane:** section-style research for the capability/progression opening and its headline multi-panel figure. +**Status:** `researching` complete; style recommendation ready for coordinator use, not a section freeze, manuscript draft, scientific authority, or panel-readiness declaration. + +## 1. Scope, question, and bounded recommendation + +### Scope and question + +This memo studies how four close *Journal of Fluid Mechanics* papers open a capability/results sequence and use headline figures to move from a declared comparator to evidence, limitation, and deeper analysis. The coded features are breadth versus depth, comparator introduction, panel ordering, captions, failure/limit placement, visual hierarchy, and bridges. External papers provide rhetorical precedent only; they establish no internal result, artifact validity, priority, or scientific claim. + +### Bounded recommendation + +Use the opening as a selective argument rather than a case gallery: establish the viewing contract and comparator first; give the dominant reference case most visual and textual weight; arrange subordinate panels as a readable progression in changed task conditions; place one consequential limitation beside the capability it bounds; and end by converting breadth into the reason for selecting one deep case. The caption should identify roles and comparison semantics while leaving inference, selection logic, and the bridge to prose. + +The recommended rhetorical sequence is: + +`question and viewing contract → comparator-bearing headline → bounded progression → local limit → selection of depth` + +This is a style contract only. It neither selects source arrays nor licenses any quantitative annotation. + +## 2. Coverage ledger + +| Status | Source/input | Why in scope | Evidence state and reason | +|---|---|---|---| +| `read` | `ROUND4_TOP_DOWN/README.md`, `00_MASTER_AGENT_PROMPT.md`, `00_QUALITY_GATE.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_DISPLAY_EQUATION_INVENTORY.md` | Round-4 role, status, claim, ownership, display-readiness, and delivery controls | Read directly as repository controls; not independently verified and not artifact-audited | +| `read` | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` and `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Controlling architecture plus prior JFM style synthesis | Read directly as full reports; not independently verified and not artifact-audited | +| `read` | `ROUND3_BOTTOM_UP/02_CAPABILITY_PROGRESSION.md`, `00_QUALITY_GATE.md`, and `11_FINAL_CONSISTENCY_AUDIT.md` | Capability opening, figure contract, later readiness findings, and duplication boundaries | Read directly as full reports; not independently verified and not artifact-audited | +| `read` | Rabault, Kuchta, Jensen, Réglade & Cerardi (2019), “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control,” *Journal of Fluid Mechanics* **865**, 281–302 | Close DRL capability opening; performance-to-flow bridge and local limits | `full-PDF`; figure/section-focused reading; DOI and PDF availability checked against the workspace record; no equation-by-equation verification or source-data audit | +| `read` | Paris, Beneddine & Dandois (2021), “Robust flow control and optimal sensor placement using deep reinforcement learning,” *Journal of Fluid Mechanics* **913**, A25 | Reference-case depth followed by physics, robustness, and sensing breadth | `full-PDF`; figure/section-focused reading; DOI and PDF availability checked against the workspace record; no source-data audit | +| `read` | Xia, Zhang, Kerrigan & Rigas (2024), “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements,” *Journal of Fluid Mechanics* **981**, A17 | Capability–failure–repair opening and parametric failure envelope | `full-PDF`; figure/section-focused reading; DOI and PDF availability checked against the workspace record; no source-data audit | +| `read` | Wang, Yan, Hu, Chen, Rabault & Noack (2024), “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing,” *Journal of Fluid Mechanics* **988**, A4 | Baseline comparison, harder-case progression, caption hierarchy, and later physical reading | `full-PDF`; figure/section-focused reading; DOI and PDF availability checked against the workspace record; no source-data audit | +| `mapped` | Remaining JFM identities in the Round-2 style guide and the workspace `JFM/` and `JFM References/` indexes | Broader context and candidate alternatives | Located through the controlling guide/indexes only; not re-read for this lane and not used as direct evidence here | +| `not-covered` | Exhaustive sentence coding, all figures in the four papers, unrelated JFM control papers, new literature search, and bibliographic expansion | Not necessary for the bounded comparison of capability openings and headline figures | No practice claim inferred beyond the four-paper sample | +| `not-covered` | Internal raw fields, arrays, rendering scripts, figure generation, CFD, training, SR, CCD, and experiment analysis | Outside style-research scope | No panel existence, result, or readiness inferred | +| `external-inaccessible` | None essential to this style lane | All four selected records had readable PDFs in the literature workspace | No external-access blocker; full-PDF reading is still not independent scientific verification or artifact audit | + +## 3. Exact literature identities and read levels + +1. Jean Rabault, Miroslav Kuchta, Atle Jensen, Ulysse Réglade & Nicolas Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control,” *Journal of Fluid Mechanics* **865** (2019), 281–302. DOI: `10.1017/jfm.2019.62`. Read level: `full-PDF`, targeted to §§2.1, 3.1–3.2, Figs. 2–5, and appendices carrying comparator/limit evidence. +2. Romain Paris, Samir Beneddine & Julien Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning,” *Journal of Fluid Mechanics* **913** (2021), A25. DOI: `10.1017/jfm.2020.1170`. Read level: `full-PDF`, targeted to the uncontrolled/reference definitions and §4 results sequence, especially Fig. 9 and the robustness/sensor-limit figures. +3. Chao Xia, Jiaqi Zhang, Eric C. Kerrigan & Georgios Rigas, “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements,” *Journal of Fluid Mechanics* **981** (2024), A17. DOI: `10.1017/jfm.2024.69`. Read level: `full-PDF`, targeted to §§2.4 and 3, especially Figs. 2–5 and the history, sensor, and Reynolds-number limit figures. +4. Qiulei Wang, Dong Yan, Guodong Hu, Gang Chen, Jean Rabault & Bernd R. Noack, “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing,” *Journal of Fluid Mechanics* **988** (2024), A4. DOI: `10.1017/jfm.2024.333`. Read level: `full-PDF`, targeted to §§3.2 and 4, especially Figs. 2, 5–7, 9, 13–14, and 16. + +Bibliographic year follows the final JFM volume citation, rather than the earlier year displayed by some discovery records. + +## 4. Observed JFM practice + +The following statements are observations from this four-paper sample, not universal JFM rules. + +### 4.1 Capability openings are comparator-led, but the comparator is often prepared earlier + +- **Rabault et al.** prepare the uncontrolled case during numerical qualification, then reuse it visibly in the results. The opening results sequence moves from multi-run learning behaviour (Fig. 2) to controlled-versus-baseline temporal performance (Fig. 3), and only later to flow morphology (Fig. 5). The comparator therefore exists before interpretation begins. +- **Paris et al.** define both the uncontrolled flow and the unstable base flow before the main result. Fig. 9 places drag above action/lift and includes the reference levels directly, so the reader can interpret the transient and maintained regimes without reconstructing the comparison from prose. +- **Xia et al.** define three controller/observation configurations schematically before comparing them. The results then preserve the same logical order: full-measurement reference, partial-measurement degradation, and history-enabled repair. Failure is not an appendix; it is the hinge of the argument. +- **Wang et al.** first contrast vanilla and dynamic-feature architectures, then use the baseline case to compare sparse variants against a stronger reference before extending to harder conditions. + +**Observed pattern:** the opening does not ask an unlabelled field image to prove capability. A reference, role set, or controller comparison is named before the principal visual inference. + +### 4.2 Breadth follows a reference-case depth anchor + +- **Rabault et al.** use breadth first to establish repeatability across trainings, but devote interpretive depth to one controlled trajectory and its wake morphology. +- **Paris et al.** establish a detailed reference case before moving to physics analysis, Reynolds-number variation, noise, and sensor placement. Breadth is earned through dedicated tests, not implied by the first figure. +- **Xia et al.** keep the opening comparison narrow and causal in narrative structure—success, degradation, repair—then examine history length, sensor count, Reynolds number, and algorithm choice separately. +- **Wang et al.** establish the baseline capability before escalating flow difficulty and dimensionality; sensor quantity and position studies supply intermediate depth. + +**Observed pattern:** breadth is a sequence of changed questions. It is not a montage treated as a common performance scale. One reference case supplies the visual and argumentative anchor. + +### 4.3 Panel order carries the argument + +- **Outcome before actuation:** Rabault Fig. 3 and Paris Fig. 9 foreground drag/performance, with action placed in an inset or lower panel. The hierarchy answers “what changed?” before “what action accompanied it?” +- **Reference before degraded/repaired variant:** Xia preserves full-measurement → partial-static → partial-dynamic ordering across learning, temporal, and field figures. Repetition of the same order reduces decoding cost. +- **Primary metric before auxiliary evidence:** Wang Fig. 5 orders mean drag, reward, and lift fluctuation, maintaining the distinction between the physical headline, training objective, and secondary fluctuation evidence. +- **Baseline and controlled fields use matched positions:** Rabault Fig. 5 stacks uncontrolled and controlled views within repeated variable/statistic groupings, enabling direct eye movement rather than cross-page comparison. + +**Observed pattern:** panel letters are not neutral labels. The order reproduces the logical comparison, and spatial alignment is used to make the intended pairwise reading immediate. + +### 4.4 Captions identify the reading path but do not carry the whole argument + +- Captions name variables, cases, panel letters, and statistical conventions. Wang explicitly notes multi-run averaging and shaded variation; Paris identifies top/bottom quantities and insets; Xia maintains controller labels across figures. +- Captions can include a restrained interpretive cue, as in Rabault’s morphology comparison, but the physical explanation and consequence are developed in the text. +- The papers do not rely on captions to explain why one case deserves later depth or what broader claim is disallowed. Those are prose jobs. + +**Observed pattern:** effective captions are locally self-decoding—what, compared with what, and how displayed—while selection logic, inference, and bridge remain in the body. + +### 4.5 Failures and limits are placed where they alter interpretation + +- Rabault places exploration-noise and unstable-maintenance limits beside performance; reduced-observation sensitivity is treated separately. +- Paris reports failure of simple action-pattern reductions in the physical-analysis sequence and shows limits at harder Reynolds numbers and extreme sensor sparsity in the corresponding extension sections. +- Xia makes partial-observation failure the central comparison, then places excessive-history, single-sensor, and cross-Reynolds degradation beside each parameter study. +- Wang places vanilla sparse-sensing failure in the baseline comparison and discusses diminishing returns/redundancy in the sensor study. + +**Observed pattern:** a limit is most effective when it changes the inference from the adjacent evidence. A remote limitations paragraph does not substitute for a local boundary. + +### 4.6 Bridges transform capability into the next question + +- Rabault moves from performance to altered recirculation and pressure morphology. +- Paris moves from the reference result to post-hoc physical analysis, then to robustness and sensing questions. +- Xia turns partial-observation degradation into the need for temporal history, and later turns parameter sensitivity into an envelope of applicability. +- Wang turns sparse-sensor comparison into sensor-number and placement questions, then returns to flow fields for physical interpretation. + +**Observed pattern:** the bridge does not announce “the next section.” It states what the current display leaves unresolved and therefore what evidence must follow. + +## 5. Recommendation for the capability/progression opening + +### 5.1 Breadth versus depth + +1. Make the figure answer one capability question, not summarize the manuscript. +2. Give the designated deep case the largest contiguous visual region and the clearest comparator-bearing evidence. +3. Keep breadth panels subordinate and order them by the intended progression in changed temporal or objective contract. +4. Do not encode breadth as generality. Each extension should be read as a named case under its own comparison semantics. +5. Reserve mechanism or control-skeleton interpretation for later evidence. The opening should explain why depth is selected, not pre-announce its result. + +**Trade-off:** a broad composition can orient the reader quickly but becomes a gallery if every case receives equal weight. A dominant anchor plus smaller progression panels sacrifices apparent symmetry to gain argumentative hierarchy. + +### 5.2 Comparator introduction + +- The first paragraph should state the figure’s question and the comparison logic before any panel-specific result. +- Every retained panel needs a visibly recoverable target/reference and role. Where a quantitative comparator is not ready, label the panel as visual capability rather than allowing proximity or aesthetics to imply measured matching. +- Reuse definitions from the contracts section briefly; do not rebuild the methods or metric equations in this opening. +- Never use a common bar, colour scale, or ranking device to imply commensurability across distinct estimands. + +**Trade-off:** dense role labels protect interpretation but can overload the image. Put the shortest role/chain identifiers in-panel and the exact comparison semantics in the caption; retain detailed contracts in the preceding section or a compact table. + +### 5.3 Panel ordering and visual hierarchy + +Recommended reading order: + +1. a compact historical seed; +2. the dominant comparator-bearing headline case; +3. the temporal-contract extension; +4. the objective-contract extension; +5. at most one small, attached limit marker if it materially changes the headline. + +Use consistent panel grammar: case/chain identifier, target/reference, controlled role, and temporal coordinate in stable locations. Keep matched views aligned. Use area, position, and annotation density—not decorative colour—to establish hierarchy. Any degradation marker should attach to the claim it limits rather than become an equal fifth gallery panel. + +### 5.4 Caption contract + +The caption should, in this order: + +1. state that the composition shows a progression under distinct contracts, not a common efficacy comparison; +2. decode each panel’s case/chain, target or reference, controlled/comparator role, and temporal coordinate; +3. identify whether evidence is quantitative, complementary, visual-only, or unavailable; +4. state the decisive local limits, including non-equivalent metrics and any historical/negative boundary; +5. avoid mechanism, generalization, validation, robustness, or cross-chain continuity wording. + +Keep the caption descriptive enough to stand beside the figure, but do not place the section’s selection argument, literature comparison, or full caveat ledger there. + +### 5.5 Failures and limits + +Retain one visible boundary only if it changes how the headline is read and has an exact source. Other blockers belong in local prose, later dedicated sections, or omission fallbacks. A missing quantitative panel should remain absent or explicitly visual-only; it must not be repaired with a suggestive image, filename, or cross-case surrogate. + +The opening’s local-limit sentence should perform three jobs: name the affected claim, state the bounded scope, and explain why the deep case is selected without implying that unselected cases failed. + +### 5.6 Paragraph jobs and figure-to-text cadence + +1. **Viewing contract and placement.** Ask the capability question; name the comparator logic; place the headline figure; state that panels are non-pooled. +2. **Historical seed.** Establish chronology and visible capability only; defer separate-chain physics and theory. +3. **Headline case.** Read the dominant comparison and state why its evidence intersection warrants depth; detailed result values remain with the performance owner. +4. **Progression.** Change one contract at a time and state the evidence level for each subordinate case. +5. **Boundary and bridge.** Place the strongest local limitation, then convert breadth into the next question: what does independent field evidence establish in the selected deep case? + +Use one principal figure claim per paragraph. The prose should read the comparison and consequence, not narrate every panel feature. + +## 6. Ownership, interfaces, and bridge + +### Result ownership + +- **Capability/progression owns:** headline composition, historical/progression logic, short comparator-bearing preview, evidence-level labels, one local boundary, and selection of the sole deep case. +- **Contracts owns:** reusable plant, chain, action, role, comparator, metric, ROI/window, and compact qualification definitions. +- **Performance owns:** detailed field and signal results, values, windows, masks, retained-policy status, and limitations of the deep-case evaluation. +- **Cross-case owns:** detailed transient/objective-extension evidence and failures under their case-specific estimands. +- **Steady/theory owns:** full separate-chain endpoint, sign, physical context, and theory/failure boundary. + +### Imports + +Import only the minimum viewing definitions from contracts, the panel/readiness boundaries from the display inventory, and the capability evidence levels from the audited Round-3 module. Literature contributes style precedent only. + +### Exports + +Export a bounded breadth statement, the identity of the selected deep case, and the unresolved question that justifies independent field evaluation. Export no pooled score, mechanism, cross-case interpretation, or panel-readiness claim. + +### Opening dependency and closing bridge + +**Opening dependency:** the reader must already know enough of the role, comparator, chain, and metric vocabulary to decode the figure without a methods digression. + +**Closing bridge function:** transform “named capability under distinct contracts” into “why the selected case requires and permits deeper independent field evaluation.” The bridge should name the missing inference, not a section number. + +### Duplication deletions + +- Delete detailed deep-case values and metric-window prose from the capability opening; retain only the headline comparison needed to read the figure. +- Delete full steady/theory interpretation from the historical seed. +- Delete detailed transient and objective-extension result prose from the progression preview. +- Delete the global claim ladder, package histories, and artifact-status inventory from narrative paragraphs. +- Do not duplicate caption-level role decoding in adjacent prose unless it changes the inference. + +## 7. Claim ceiling and near-collision findings + +### Green + +- The opening may state named capability/progression under explicitly distinct contracts. +- It may identify one case as the sole deep case because the required evidence types coexist there. +- It may describe a panel as quantitative, complementary, visual-only, historical/negative, dependency-gated, or blocked when the controlling authority supports that status. + +### Amber + +- The composition may be described as breadth across named temporal dynamics or objectives only when immediately bounded as non-pooled and non-general. +- A visual progression may motivate deeper examination; it cannot establish mechanism, transfer, robustness, or full-state equivalence. + +### Prohibited red + +No pooled efficacy, universal/general capability, robustness, stability, optimality, transfer, mechanism, causality, positive Illusion SR, experiment-as-validation, Legacy/V5 continuation, DTW-as-field-equivalence, or visual-match-as-quantitative-proof wording. + +### Near-collision findings + +The figure juxtaposes **different estimands**, not repeated measurements of one quantity. Periodic mean/phase fields, transient event-relative views, steady profiles, and target-retargeting visuals differ in acquisition, role set, chain, domain/ROI, mask, weighting/normalization, and window/coordinate. They must not be combined arithmetically or described as replication, validation, agreement, or triangulation. Closely valued results owned by the deep-performance and later field/CCD sections remain different estimands under their distinct role acquisition, masks, weighting, and windows; the capability figure should not place them together. + +## 8. Display contract and readiness + +| Display | Owner | Argumentative job | Source/roles required | Caption ceiling | Classification and readiness | Fallback | +|---|---|---|---|---|---|---| +| Headline capability/progression composition | Capability/progression | Establish a selective progression and make the deep-case choice legible | Exact authority for every retained panel; chain/solver/geometry; case/seed/role; comparator; temporal coordinate; metric status; rendering provenance | Named capability under distinct contracts; no pooled efficacy, generality, mechanism, or cross-chain continuity | `dependency-gated`; text contract is usable, but no panel is publication-ready merely from this memo | Retain only source-bound panels; omit unsupported annotations | +| Dominant comparator-bearing block | Capability/progression, with detailed values owned by performance | Carry the principal visual comparison and justify depth selection | Exact target, controlled, and comparator roles under one bound chain and evaluation contract | Headline comparison only; detailed values, ROI/mask/window, and interpretation remain with performance | `dependency-gated` pending source arrays and rendering audit | Compact source-bound comparison or textual preview | +| Subordinate progression panels | Capability/progression; detail later owned by cross-case and steady sections | Mark chronology and one-at-a-time contract changes | Exact case/chain/role and evidence-level identity for each panel | Visual/named capability only where quantitative roles are absent | Mixed `dependency-gated`/`blocked` according to the global inventory | Omit blocked quantitative content; preserve bounded prose progression | +| Optional degradation/limit marker | Capability/progression | Prevent the headline from being read as uniform breadth or generality | Exact authority and same-case comparator for the displayed diagnostic | Named diagnostic only; no failure cause or cross-condition law | `optional`, drop-first | One local limit sentence in prose | + +No new table or equation is recommended for this opening. Reusable definitions belong to contracts; detailed quantitative tables belong to the owning result sections. Text readiness remains separate from panel/artifact readiness. + +## 9. Anti-patterns + +1. **Equal-weight gallery:** all cases receive the same area, encouraging an unsupported common ranking. +2. **Comparator afterthought:** target, baseline, or role appears only in the caption after the reader has already interpreted the image. +3. **Caption as manuscript:** the caption carries selection logic, mechanism, caveats, and method detail that the prose should argue. +4. **Metric wallpaper:** several incompatible scores are printed to make the composition look quantitative. +5. **Aesthetic equivalence:** similar colours or wake shapes are treated as measured matching. +6. **Failure quarantine:** degradation is delayed to Discussion even though it changes the headline claim. +7. **Failure spectacle:** a weak or blocked case is promoted to an equal panel merely to signal honesty, obscuring the principal progression. +8. **Method-first opening:** architecture, training chronology, or package history precedes the comparator-bearing result. +9. **Mechanism pre-announcement:** the opening names the later control-skeleton interpretation before executable and field evidence. +10. **Breadth-to-generality leap:** several named cases become “robust,” “general,” or “arbitrary-flow” capability without dedicated tests. +11. **Chain continuity by layout:** Legacy and V5 panels share visual grammar without explicit lane labels and are read as one numerical sequence. +12. **Bridge by section number:** the closing sentence announces the next section instead of identifying the unresolved scientific question. + +## 10. Conflicts, deferrals, blockers, and disposition + +### Conflicts + +No conflict was found between the four-paper style sample and the controlling recommendation that a comparator-bearing reference case precede extensions and interpretation. The literature sample does not resolve internal panel provenance or scientific claim questions and is not used to do so. + +### Deferrals and blockers + +Panel provenance, raw arrays, masks, exact renderings, and publication production remain outside this lane. Quantitative transient content, unsupported objective-extension roles, and any panel listed as blocked in the global inventory remain blocked; this memo does not lower those gates. Optional missing panels do not block the style contract when omission preserves the argument. + +### Author/coordinator decisions + +- Decide the final retained panel set under the existing safe default: preserve the dominant progression and omit optional or blocked content first. +- Decide whether one source-bound degradation marker materially improves the opening; safe default is prose-only limitation if the marker crowds the hierarchy. +- Preserve the existing exclusion of experiment from the headline composition. + +### Disposition + +`discuss`: the style research is complete and passes the Round-4 style-memo criteria, but panel selection remains a coordinator/author decision and panel readiness remains dependency-gated. This first-pass memo does not self-freeze the capability section. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_04_KARMAN_PERFORMANCE.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_04_KARMAN_PERFORMANCE.md new file mode 100644 index 0000000..9754184 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_04_KARMAN_PERFORMANCE.md @@ -0,0 +1,230 @@ +# Round 4 style research — Kármán performance + +**Lane:** section-style research only; not manuscript prose, internal-result authority, panel production, or a section freeze. +**First-pass disposition:** `revise` pending coordinator second audit. + +## 1. Scope, question and bounded recommendation + +**Question.** How do the closest JFM reference-case performance sections order results, establish baselines and comparators, separate field evidence from signal/global metrics, pace figures and tables, place exact values and local limitations, and turn a performance result into the next interpretive question? + +**Bounded recommendation.** Give this section one compact reference-case argument: declare the exact evaluation/comparator contract; state the primary field result; place complementary signal evidence beside rather than above it; expose one local evidential boundary; then hand the established performance to the action-law question. This memo recommends rhetorical form only. It supplies no project prose, no project number, no new internal claim, and no inference from external literature to internal evidence. + +The closest precedents do not impose one universal order. Paris et al., Rabault et al. and Cornejo Maceda et al. establish global or temporal performance before spatial interpretation, whereas Mao et al. alternates sensitivity, forcing distribution, global suppression, fields and stability because each representation tests a different step. The transferable practice is **comparator-led evidence escalation**, not mechanical “signals first” imitation. For this paper, the controlling architecture independently requires spatial L2 to carry the field claim and DTW to remain complementary; that project-specific choice overrides the references' drag-centred ordering. + +## 2. Coverage ledger + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | `ROUND4_TOP_DOWN/README.md` | Round-4 purpose, phases, statuses and Round-5 handoff | Read directly; not independent scientific verification or artifact audit | +| `read` | `ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md` | Required deliverables, fixed ladder, style method and first-pass rule | Read directly; controlling workflow | +| `read` | `ROUND4_TOP_DOWN/00_QUALITY_GATE.md` | Style gate and coverage-state semantics | Read directly; controlling workflow | +| `read` | `ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md` | Performance ownership, M04/M06 boundary and choices | Read directly; decision authority, not evidence | +| `read` | `ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md` | Display/equation classification and fallback | Read directly; inventory is not artifact readiness | +| `read` | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` | Frozen section role, space and metric hierarchy | `full-report`; not independently verified or artifact-audited | +| `read` | `ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | R2 observed practice and performance contract | `full-report`; four closest PDFs were re-read below | +| `read` | `ROUND3_BOTTOM_UP/04_KARMAN_PERFORMANCE.md` | Owning R3 dossier, interfaces, limits and display needs | `full-report`; internal values intentionally not reproduced; raw artifacts not audited | +| `read` | `ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md` | Ownership/deletion and near-collision ruling | `full-report`; no recomputation or artifact audit | +| `read` | Paris, Beneddine & Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning”, *Journal of Fluid Mechanics* 913, A25 (2021), DOI `10.1017/jfm.2020.1170` | DRL reference-case progression from performance to fields and robustness | `full-PDF`; targeted reread of §4/displays; metadata/DOI checked; no numerical reproduction | +| `read` | Mao, Blackburn & Sherwin, “Nonlinear optimal suppression of vortex shedding from a circular cylinder”, *Journal of Fluid Mechanics* 775, 241–265 (2015), DOI `10.1017/jfm.2015.304` | Global performance, fields, stability, interpretation and realizability | `full-PDF`; targeted reread of §4; metadata/DOI checked; no numerical reproduction | +| `read` | Rabault, Kuchta, Jensen, Réglade & Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* 865, 281–302 (2019), DOI `10.1017/jfm.2019.62` | Compact DRL reference case with spread, traces, fields and limits | `full-PDF`; targeted reread of §3/relevant appendix; metadata/DOI checked; no numerical reproduction | +| `read` | Cornejo Maceda, Li, Lusseyran, Morzyński & Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* 917, A42 (2021), DOI `10.1017/jfm.2021.301` | Closest plant and comparator ladder | `full-PDF`; targeted reread of §4/summary displays; metadata/DOI checked; no numerical reproduction | +| `mapped` | Remaining six exact JFM papers in the R2 style guide | Broader precedent not needed for this bounded reread | Identities and prior lessons mapped through R2; PDFs not re-read in this lane | +| `mapped` | R3 controls/modules other than M04/M11 | Cross-section interfaces and terminology | Located through ledgers/audit; not read as evidence for this question | +| `not-covered` | New search, exhaustive sentence coding, unrelated JFM papers and citation-network expansion | Four closest PDFs plus controls answer the bounded question | No practice/scientific claim inferred beyond this sample | +| `not-covered` | Raw fields/arrays, model bundles, evaluator reruns, CFD, training, SR/CCD analysis and figure generation | Explicitly outside style research | No internal quantity independently verified; no panel called ready | +| `external-inaccessible` | None essential to the style question | All four PDFs were available | Hidden/external project artifacts remain out of scope and artifact-audit deferred | + +**State boundary.** `read` means the named report or targeted full PDF was inspected. It does not mean an internal result was independently verified, a bibliography exhaustively audited, or a project artifact audited. Targeted memory recall only located controlling decisions; repository controls and full PDFs supplied the memo's substance. + +## 3. Observed practice in the four closest JFM papers + +### 3.1 Paris, Beneddine & Dandois (2021) + +**Result order.** Section 4 moves through control performance/efficiency (§4.1), controlled-flow analysis (§4.2), Reynolds and noise robustness (§4.3), sensor-number/location effects (§4.4), and sensor optimization (§4.5). The reference case is established before robustness and design extensions. + +**Baseline/comparator.** The uncontrolled baseline and steady base-flow reference anchor the opening. A literature table situates the headline; robustness later uses policies trained at individual Reynolds numbers as stricter internal comparators. Comparator changes are explicit. + +**Signals and fields.** Drag, lift and actuation histories precede vorticity and recirculation fields; spectra connect temporal behaviour to the physical reading. This order reflects a drag-centred objective, not a rule that reward-adjacent signals outrank independent fields. + +**Cadence/numbers.** Time traces, efficiency, fields, spectra, robustness and sensing each receive nearby displays. A few inference-changing values appear in prose (baseline and headline reduction); multi-study/noise comparisons move to tables. Captions carry parameters and panel definitions. + +**Limits/transitions.** Limits sit beside claims: Reynolds asymmetry is related to sensor coverage; absence of a simple action pattern appears during flow analysis; reference-Re-only optimization limits broader comparison. The transition is `global change → spatial/spectral correlate → bounded explanation → robustness test`. + +### 3.2 Mao, Blackburn & Sherwin (2015) + +**Result order.** Section 4 proceeds from sensitivity (§4.1), to nonlinear control distribution (§4.2), suppression effects (§4.3), mechanism synthesis (§4.4), and controlled drag (§4.5). Representations alternate because each answers the next deductive question. + +**Baseline/comparator.** Linear sensitivity is the recurring simple comparator for nonlinear solutions; uncontrolled and two-/three-dimensional states enter where they test suppression and admissibility. + +**Signals and fields.** Frequency response and global unsteadiness establish forcing choice; boundary distributions expose linear/nonlinear divergence; vorticity shows suppression; stability distinguishes a lasting state from a transient image; drag closes the consequence. + +**Cadence/numbers.** Results use a figure chain and no results table. Prose retains decisive selected frequencies, approximate drag-reduction ranges and effectiveness; parameters/contours remain in plots and captions. + +**Limits/transitions.** The shrinking linear regime, failure of non-zero-frequency forcing and actuator-efficiency omission are local. The key move is `field suppression → stability test → physical schematic`; synthesis is earned by prior evidence. + +### 3.3 Rabault et al. (2019) + +**Result order.** Section 3 first establishes drag reduction (§3.1), including repeat learning and controlled histories, then analyses the strategy (§3.2) through wake and pressure fields. “What/how much” and “what changed” remain adjacent. + +**Baseline/comparator.** The uncontrolled flow is qualified before results and remains primary. A separately constructed steady symmetry-constrained reference is a limiting comparator, not the uncontrolled baseline. + +**Signals and fields.** Multi-run learning statistics and drag/control histories precede velocity and pressure fields. Fields explain a scalar objective; they are not an independent field-matching metric. + +**Cadence/numbers.** Learning spread, definitive histories, then velocity/pressure fields form a compact sequence. Prose repeats headline magnitudes that change interpretation; figures carry temporal/spatial detail. + +**Limits/transitions.** Network internals are treated as a black box; probe sensitivity is outside scope; training cost is contextualized. Field differences motivate a fluid-mechanical analogy. That causal register is evidence-specific and should not be copied under a descriptive ceiling. + +### 3.4 Cornejo Maceda et al. (2021) + +**Result order.** Control-space richness increases: symmetric steady (§4.1), general non-symmetric steady (§4.2), feedback (§4.3), after the unforced flow is established. Each residual failure motivates the next space. + +**Baseline/comparator.** A common normalized cost keeps unforced, simple-steady, richer-steady and feedback cases legible. Each comparator asks whether greater freedom buys a specific increment. + +**Signals and fields.** Within each stage, lift/cost histories and spectra establish performance before phase/mean vorticity fields interpret it. Summary graphics later compress the hierarchy. + +**Cadence/numbers.** A repeated metric/history→field→local-conclusion rhythm creates continuity. Selected costs/control vectors appear in prose/equations; detailed law weights move to a table; summary graphics collect comparative values. + +**Limits/transitions.** Failure of the best symmetric forcing to stabilize motivates richer search; incomplete feedback authority stays beside the final comparison. The bridge is `best current result → residual failure → justified increase in control freedom`. + +## 4. Observed practice versus project recommendation + +### 4.1 Result order + +**Observed.** All four establish a named reference case before extensions. Three move mainly from global/time evidence to fields; Mao alternates representations. Broad physical synthesis follows the comparator and principal outcome. + +**Recommended four-paragraph order.** (1) Exact chain/case/Re/roles/comparator/window and selection contract, briefly imported from Contracts. (2) Primary mean and phase spatial L2 as separate estimands against the declared physical-zero comparator, with the principal display and local ROI/mask/window limits. (3) Complementary DTW orientation/result and a direction-only consistency check under its separate signal contract. (4) Phase/mask/seed/retention boundary and the action-law-complexity handoff. If V5 remains, label it secondary and separate. + +**Trade-off.** This reverses the predominant drag-centred JFM sequence but follows the frozen evidentiary hierarchy. DTW-first would be familiar to DRL readers yet make independent fields look confirmatory; L2-first prevents optimized signals from appearing self-validating. + +### 4.2 Baseline and comparator + +**Observed.** Papers name a physical baseline first, then add simple, limiting or separately trained comparators only to sharpen a question. Shared metrics are used only when contracts permit. + +**Recommended.** Keep the principal comparison triadic and chain-local: declared target, controlled role and physical zero. Import definitions, do not retell acquisition. Put V5 retention in a separate sentence/inset, never another Legacy field row. Do not manufacture a theoretical-best comparator because a reference paper uses one. + +### 4.3 Field versus signal metrics + +**Observed.** Global/time signals usually establish efficacy and fields explain it because the references optimize drag/lift/fluctuations. Spectra often bridge layers. None licenses signal alignment as spatial equivalence. + +**Recommended.** Name the estimand in every result sentence: `complete-cycle mean-field error`, `phase-resolved field diagnostic`, or `signal-level DTW similarity`. Define DTW orientation once. If diagnostics point the same way, call them consistent under separate contracts—not replicated, independently validating, or the same evidence. + +### 4.4 Figure/table cadence + +**Observed.** Displays arrive when the argument changes representation. Paris is figure/table dense; Mao uses a figure chain; Rabault uses learning→signal→field; Cornejo Maceda repeats metric→field and later compresses the hierarchy. Tables suit many comparable rows; figures suit temporal/spatial relationships. + +**Recommended.** Use one compact L2-first performance display with subordinate DTW. A compact result table is fallback if field rendering provenance is unavailable. A V5 seed/retention inset is optional/drop-first. Keep one principal display claim per paragraph. + +### 4.5 Exact numbers + +**Observed.** Numbers enter prose when they define a baseline, headline, selected control or consequential limit. Multi-condition values go to tables/plots; contour/setup values to captions. + +**Recommended.** Retain the minimum exact set needed for controlled-versus-zero comparison per owned estimand. Move provenance precision/secondary variants to table or supplement. This memo intentionally reproduces no project number. Never cite a number without chain, comparator, metric orientation and window. + +### 4.6 Local limitations + +**Observed.** Strong references put limitations beside affected results: incomplete authority, shrinking linear validity, sensor coverage, absent actuator efficiency, black-box interpretation or restricted optimization. Failure often motivates the next test. + +**Recommended.** Attach field→mask/phase-sampling limit; DTW→signal/window/normalization limit; V5 retention→separate-chain/best-versus-retained/no-robustness limit; display→artifact-readiness limit. End with one aggregate ceiling: named-contract field matching does not identify an action law or mechanism. + +### 4.7 Result-to-interpretation transitions + +**Observed.** Effective bridges transform results into tests: performance→controlled-flow analysis; suppression→stability; simple-forcing failure→richer control; global change→spatial/spectral correlate. + +**Recommended.** Use two steps: the named field comparison is not solely a reward-proxy statement; it still does not determine whether learned action is complex or compressible. SR may test an executable surrogate against the declared contract, not treat performance as proof of a persistent-action mechanism. + +## 5. Paragraph jobs, ownership and interfaces + +| Job | Import | Owned function | Local limit | Export | +|---|---|---|---|---| +| P1 exact contract | Contracts: chain, roles, Re, metrics, ROI/window | Establish one comparison and selection status | Do not repeat Methods/capability | Legible comparator | +| P2 L2-first result | M04 detailed Legacy values/contracts | Centre independent mean/phase field evidence | Separate estimands; local mask/window limits | Named field matching only | +| P3 signal companion | DTW definition/orientation once | Compare direction without pooling | Reward-adjacent, signal-only; no delay/equivalence | Diagnostic compatibility only | +| P4 boundary/handoff | M04 seed/retention boundary | Define ceiling and action-law question | Legacy/V5 separate; no robustness | Performance arbiter, not mechanism | + +**Ownership.** Performance alone owns detailed Legacy L2/DTW values, roles, ROI/windows and V5 seed/retention boundary. Capability keeps a headline. Contracts owns reusable equations. Field/CCD owns corrected four-role mean/residual estimands and cannot use M04 as replication/closure. SR owns its law and same-protocol arbitration. + +**Opening dependency.** Contracts must freeze role vocabulary, Legacy/V5, Reynolds conventions, metric orientation and ROI/window notation. + +**Closing bridge.** Convert “what the policy achieved” into “how complex an executable law must be,” withholding mechanism, necessity and uniqueness. + +**Duplication deletions.** Delete detailed values from capability; repeated metric equations from performance; any second full M04/M06 collision explanation outside its owner/interface; training chronology/artifact inventories from narrative; duplicate V5 support. + +## 6. Claim ceiling and near-collision audit + +**Green:** `is closer to the declared target than physical zero under the named spatial estimand`; `mean and phase diagnostics are separate`; `signal similarity is directionally consistent under a separate contract`; `retention is secondary and chain-specific`. + +**Amber:** `supports named-condition field matching in the registered region`; `is not solely a reward-adjacent signal statement`; `motivates testing a reduced executable law`. + +**Prohibited red:** `restores the wake`, `full-field identity`, `mechanism`, `causes`, `proves`, `robust`, `general`, `stable`, `optimal`, `universal`, `independently validates`, `replicates`, `triangulates`; DTW as spatial error/delay/causality/equivalence; mean/phase agreement as uncertainty; retention as convergence; Legacy/V5 continuation; literature as internal authorization. + +| Pair | Contract check | Class | Required treatment | +|---|---|---|---| +| M04 mean L2 vs phase L2 | Same family/direction; different averaging/phase construction/window | `related diagnostic` | Separate; no pooling/uncertainty claim | +| M04 L2 vs DTW | Fields/ROI versus sparse histories; different normalization/geometry/window | `different estimand` | L2 field claim; DTW complementary | +| M04 PPO mean vs M06 corrected four-role mean | Different acquisitions, roles, mask, weighting/normalization and windows despite proximity | `different estimand` | Never combine, cross-normalize, replicate, validate, agree, close or triangulate | +| Legacy performance vs V5 retention | Different chain, solver/geometry, selection and role | `different estimand` | Secondary context; no pooling/continuation | + +## 7. Figure, table and equation contracts + +### Kármán performance display +- **Owner/class:** performance; `dependency-gated`. +- **Job/source/roles:** named Legacy target/controlled/physical-zero comparison from exact R3-bound authorities; L2 primary, DTW subordinate; mean/phase distinct. +- **Caption ceiling:** chain, case/Re, roles, ROI/mask/window, normalization and phase semantics; no causal, robust, universal, cross-chain or M06-validation wording. +- **Readiness:** text/numbers bound in R3; this pass does not establish raw-role/manifest/render/orientation readiness. +- **Fallback:** compact result table; omit unsourced redraws. + +### Optional V5 seed/retention inset +- **Owner/class:** performance; `dependency-gated`, optional/drop-first. +- **Job:** distinguish discovery from late retention without strengthening Legacy. +- **Ceiling/readiness:** separate-chain diagnostic; no robustness/convergence or selected-policy reproducibility without exact model/normalizer. Text bounded; redraw dependent. +- **Fallback:** one sentence or omission. + +### Compact performance table +- **Owner/class:** performance; `optional` fallback. +- **Job/source:** controlled and zero side by side for each separate Legacy estimand from M04; DTW orientation explicit; no M06/V5 rows in Legacy block. +- **Ceiling/readiness:** no universal score/uncertainty/cross-chain synthesis; final notation, rounding and source audit remain production work. +- **Fallback:** only inference-changing values in prose. + +### Metric equations +- **Owner/class:** Contracts; manuscript-wide `required`, reused rather than re-derived here. +- **Job/ceiling:** define mean L2, phase L2, zero-relative comparison and DTW orientation once; spatial L2 is not a pipeline gate and DTW not delay/field equivalence. +- **Readiness/fallback:** definition-ready; notation freeze pending; use inline reminder/pointer if no repeated display. + +## 8. Anti-patterns + +1. Training diary before comparator. +2. Reward-first self-validation. +3. Flattening mean L2, phase L2, DTW and retention into “performance”. +4. Unannounced comparator drift. +5. Precision/seed dumping in prose. +6. Caption-like panel narration. +7. Delaying mask, phase, signal-only or retention limits to Discussion. +8. Pre-empting SR/CCD interpretation. +9. Calling M06 replication/agreement/closure or DTW independent field validation. +10. Using V5 to imply Legacy robustness/reproducibility. +11. Borrowing causal language from papers with different dedicated tests. +12. Package/path/hash/report voice in manuscript narrative. +13. Empty “next section presents SR” transition. + +## 9. Decisions, conflicts, deferrals and blockers + +**Evidence-governed:** M04 owns detailed Legacy L2/DTW; L2 is primary and DTW complementary; mean/phase stay separate; M04/M06 differ; Legacy/V5 stay separate; the close asks action-law complexity, not mechanism. + +**Author/coordinator choices (`discuss`).** (1) Recommend one L2-first display with subordinate DTW; safe fallback compact table. (2) Retain V5 inset only if it does not displace Legacy; safe default omit/drop-first. (3) Put only headline comparator values in prose and detailed precision in table/supplement; exact density/rounding awaits audit. None is frozen here. + +**Conflict check.** No control/R2/R3 conflict was found. The cross-paper tendency toward scalar-first order reflects drag/stabilization objectives; it does not override the frozen project hierarchy that makes independent spatial field matching primary. + +**Deferrals/blockers.** No style-content blocker. Panel audit/render provenance/final rounding are deferred. Same-selection V5 model/normalizer is required only if a selected-policy reproduction panel is retained. First pass cannot self-freeze; coordinator must audit controls, identities/read levels, ownership, near-collision wording, display status and choices. + +## 10. Validation and disposition + +- [x] Only the requested style-research file created. +- [x] All Round-4 controls/README, R2 freeze/style, and R3 M04/final audit read. +- [x] Four closest JFM papers re-read at `full-PDF` level with exact identities/DOIs. +- [x] Observation separated from recommendation. +- [x] Result order, comparator, field/signal metrics, cadence, numbers, limitations and transitions covered. +- [x] Anti-patterns and coverage/evidence states included. +- [x] No project prose, project number or new internal claim reproduced. +- [x] Text readiness separated from artifact readiness; Legacy/V5 and M04/M06 boundaries preserved. + +**Disposition:** `revise` — style research is complete with no content blocker, but Round-4 rules prohibit first-pass self-freezing. Required next action is coordinator second audit; display choices remain `discuss`. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_05_SR_LAW.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_05_SR_LAW.md new file mode 100644 index 0000000..74bfb71 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_05_SR_LAW.md @@ -0,0 +1,306 @@ +# Round 4 section-style research — explicit learned-law/control-law section + +**Lane:** Section-style research for the SR-law unit. +**Status:** `researching` (style recommendation complete; this first-pass memo cannot freeze a section contract). +**Function:** Decision support for a later section freeze and Round-5 drafting. This is not manuscript prose, internal evidence, or a claim authority. + +## 1. Scope, question and bounded recommendation + +### Scope and question + +This memo studies how close *Journal of Fluid Mechanics* papers present an explicit learned or reduced law: how an equation enters the argument; how notation, imposed structure and physical translation are handled; what evidence arbitrates an offline or learned representation; where deletion-like tests are limited; how equations and figures alternate; and what claim ceiling the section itself makes visible. + +External literature is used only to establish rhetorical and methodological practice. It establishes no result, priority, validity or artifact readiness for the present paper. The Round-3 SR dossier is used only to identify the later section's required jobs and scientific boundaries; its project-specific prose and numbers are not reproduced here. + +### Bounded recommendation + +Build the later SR section as a five-move argument: + +1. define the surrogate estimand and its boundary; +2. state the recovery/deployment contract, including imposed structure; +3. display the executable law once and decode only notation, sign, action order and topology; +4. let matched closed-loop execution arbitrate the law, with offline fit remaining diagnostic; +5. present deletion as a bounded parent-relative perturbation and end on the field-level question exported to the next section. + +Use one displayed symmetry/deployment map and one displayed canonical law. Place each before the evidence that depends on it. Prefer a compact law/symmetry display followed by a closed-loop comparison and then a deletion display or table; omit a direct PPO/SR/zero panel unless its acquisition roles, comparator and window are genuinely matched. The section may support a bounded control-skeleton interpretation, but not a governing law, mechanism, causality, necessity, sufficiency, uniqueness, optimality, robustness, stability, universality or transfer. + +## 2. Coverage ledger + +Evidence states are intentionally separate: `read` does not mean independently verified or artifact-audited; `mapped` does not mean read. + +| Status | Source/input | Why in scope | Read level and evidence state | +|---|---|---|---| +| `read` | `ROUND4_TOP_DOWN/README.md` | Round-4 purpose, phase and status controls | Full repository document; not independently verified; no artifact audit applicable | +| `read` | `ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md` | Required method, fixed ladder and deliverables | Full repository document; not independently verified; no artifact audit applicable | +| `read` | `ROUND4_TOP_DOWN/00_QUALITY_GATE.md` | Style-memo pass/revise/block criteria | Full repository document; not independently verified; no artifact audit applicable | +| `read` | `ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md` | Ownership, claim ceiling, duplication and unresolved choices | Full repository document; not independently verified; no artifact audit applicable | +| `read` | `ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md` | SR equation/display ownership and readiness boundary | Full repository document; not independently verified; no artifact audit applicable | +| `read` | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` | Frozen section ownership, Kármán/cloak-only positive SR scope and figure logic | Full repository report read directly; not independently verified; not artifact-audited | +| `read` | `ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Prior JFM style synthesis and SR cadence | Full repository report; not independently verified; bibliography checked against the records below where relevant | +| `read` | `ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md` | Module ownership, downstream readiness and optional-panel gate | Full repository report read directly; not independently verified; not artifact-audited | +| `read` | `ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md` | Final ownership, scope, panel-readiness and author-synthesis disposition controls | Full repository report read directly; not independently verified; not artifact-audited | +| `read` | `ROUND3_BOTTOM_UP/05_KARMAN_SR_LAW.md` | Required SR jobs, imports/exports and caveats | Full repository dossier; not independently verified; internal artifact audit explicitly outside this style lane | +| `read` | N. Gautier, J.-L. Aider, T. Duriez, B. R. Noack, M. Segond & M. Abel, “Closed-loop separation control using machine learning”, *Journal of Fluid Mechanics* **770**, 442–457 (2015), DOI `10.1017/jfm.2015.95` | Closest explicit machine-learning control-law precedent | `full-PDF`; PDF available and read for law, objective, execution, figures, benchmark and limits; bibliographic metadata record checked; no independent reproduction | +| `read` | G. Y. Cornejo Maceda, Y. Li, F. Lusseyran, M. Morzyński & B. R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* **917**, A42 (2021), DOI `10.1017/jfm.2021.301` | Closest fluidic-pinball learned-law and simpler-to-richer control hierarchy | `full-PDF`; PDF available and read for control hierarchy, explicit law, averaged-law test, figures and limits; metadata record checked; no independent reproduction | +| `read` | J.-C. Loiseau, B. R. Noack & S. L. Brunton, “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *Journal of Fluid Mechanics* **844**, 459–490 (2018), DOI `10.1017/jfm.2018.147` | Closest sparse-equation/topology and model-selection precedent | `full-PDF`; PDF available and read for learned equations, constraints, model selection, validation and reconstruction cadence; metadata record checked; no independent reproduction | +| `read` | J. Rabault, M. Kuchta, A. Jensen, U. Réglade & N. Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* **865**, 281–302 (2019), DOI `10.1017/jfm.2019.62` | Useful negative comparator: closed-loop learned policy without an explicit symbolic law | `full-PDF`; PDF available and read for action definition, policy evaluation, intervention, physical interpretation and limits; metadata record checked; no independent reproduction | +| `mapped` | Other JFM papers already indexed in the Round-2 style guide | Wider context for results-section cadence | Identity and prior style notes mapped only in this lane; not reread and not used for new observations here | +| `mapped` | Other Round-3 controls and audits beyond the two named controls and SR dossier read above | Wider coordinator context | Located through Round-4 controlling-input list; not read in this bounded style lane; no scientific inference drawn | +| `not-covered` | Exhaustive coding of all figures, sentences and supplementary material in the four papers | Disproportionate to the bounded style question | No inference of universal JFM convention | +| `not-covered` | Internal SR authorities, manifests, code, arrays and immutable artifacts | This lane must not establish or restate project results | No internal result, number, formula validity or panel readiness inferred | +| `not-covered` | New literature search beyond the four closest records | Existing exact full-PDF set directly covers the requested dimensions | Recommendation is explicitly a bounded four-paper synthesis, not a journal-wide survey | +| `external-inaccessible` | None essential | All four selected records had readable PDFs | No access blocker | + +## 3. Exact literature identities and direct observations + +### 3.1 Gautier et al. (2015): explicit law as an experimentally executed object + +**Identity/read level.** N. Gautier, J.-L. Aider, T. Duriez, B. R. Noack, M. Segond & M. Abel, “Closed-loop separation control using machine learning”, *JFM* **770**, 442–457 (2015), DOI `10.1017/jfm.2015.95`; `full-PDF`. + +**Observed practice.** The plant, scalar sensor and actuator are defined before the machine-learning-control section. The objective then receives its own equation before candidate laws are discussed. A law is consequently legible as a map between already physicalized quantities, not as a free-standing symbolic expression. Candidate topology is shown through expression trees, while practical admissibility is enforced by pre-evaluation that rejects saturating or extreme laws before plant testing. The selected law is presented together with its input-output graph and a closed-loop temporal response; spectral interpretation follows, and periodic forcing provides a separate benchmark. The conclusion retains an explicit non-optimality caveat. + +**Observed claim ceiling.** Strong performance and robustness wording is attached to dedicated experimental comparisons across tested conditions, while optimality is withheld. The paper does not use coefficient readability alone as evidence of closed-loop value. + +**Style lesson, not a transferred claim.** A concise explicit-law section earns interpretability through the sequence `defined variables → objective → law shape → executed response → frequency/physical reading → benchmark → envelope`. Admissibility checks and closed-loop tests are different rhetorical jobs and should not be collapsed. + +### 3.2 Cornejo Maceda et al. (2021): hierarchy before the final learned law + +**Identity/read level.** G. Y. Cornejo Maceda, Y. Li, F. Lusseyran, M. Morzyński & B. R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *JFM* **917**, A42 (2021), DOI `10.1017/jfm.2021.301`; `full-PDF`. + +**Observed practice.** The results progress through nested control spaces: symmetric steady forcing, general steady forcing, then feedback control. The final learned law appears only after sensors, delayed inputs, objective and search procedure have been established. Its long component equations are displayed as the exact executable outcome, but interpretation shifts quickly away from coefficient-by-coefficient narration toward mean actuation, temporal content, flow organization and comparative performance. A test of the time-averaged control separates the value of the mean component from the remaining feedback fluctuations. A late synthesis figure compares the control-space hierarchy. The conclusion states that the feedback still lacks authority to achieve complete stabilization. + +**Observed topology/symmetry handling.** Symmetry is explicit in the deliberately restricted steady search, not silently attributed to the richer feedback law. Increasing search-space freedom is itself part of the physical argument. The paper therefore distinguishes a chosen topology or actuation subspace from what the final optimizer discovers within a richer space. + +**Observed deletion/ablation boundary.** The averaged-law intervention is a closed-loop comparator with a precise operational meaning. It is stronger than coefficient inspection, but it still tests one constructed replacement, not every possible decomposition of feedback value. The paper's own strong interpretation is supported by this dedicated comparison and remains bounded by incomplete stabilization. + +**Style lesson, not a transferred claim.** If a learned law contains a persistent component plus fluctuations, test the simpler executed controller directly and explain exactly what was held or replaced. Introduce richer feedback as the answer to a limitation exposed by the simpler class; do not start with the most complex expression and reverse-engineer a hierarchy afterward. + +### 3.3 Loiseau et al. (2018): topology, sparsity and validation as separate decisions + +**Identity/read level.** J.-C. Loiseau, B. R. Noack & S. L. Brunton, “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *Journal of Fluid Mechanics* **844**, 459–490 (2018), DOI `10.1017/jfm.2018.147`; `full-PDF`. + +**Observed practice.** A single framework schematic establishes the route from sensors to lifted coordinates, sparse dynamics, manifold mapping and full-state reconstruction before case equations appear. Learned differential and algebraic equations are introduced after their variables and candidate libraries are defined. Sparsity selection is not presented as self-validating: complexity is arbitrated with an information criterion, identified trajectories are compared with reference data, and full-state reconstruction is evaluated separately. A failed unconstrained identification motivates explicit physical constraints rather than being hidden. Limitations of the preferred reconstruction method, including storage cost, stay beside its accuracy advantage. + +**Observed topology/deletion handling.** Term removal is embedded in sparse model selection, not described as causal ablation. Constraints may encode known physical properties; the text identifies which structure is imposed and which is identified. Model-form selection, temporal validation and full-state reconstruction are distinct evidentiary layers. + +**Style lesson, not a transferred claim.** State imposed structure before interpreting a sparse equation. A compact topology is a selected representation, not proof that every retained term is physically necessary. If a constraint repairs a known failure, show the failure and name the constraint; this increases credibility more than presenting the constrained equation as spontaneous discovery. + +### 3.4 Rabault et al. (2019): why policy interpretation is not an explicit-law section + +**Identity/read level.** J. Rabault, M. Kuchta, A. Jensen, U. Réglade & N. Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* **865**, 281–302 (2019), DOI `10.1017/jfm.2019.62`; `full-PDF`. + +**Observed practice.** Geometry, probes, action normalization, zero-net-mass-flow constraint and action smoothing are stated before performance. The neural policy itself remains a black box; the paper interprets controlled trajectories and mean/statistical fields rather than printing network weights as a law. Evaluation uses deterministic policy execution after training. Suppressing control after a controlled state is reached tests persistence of that state, while reduced-probe studies test observation sufficiency under named alternatives. Figures progress from setup and learning consistency to time histories, instantaneous flow and statistical fields. Dimensionality, Reynolds-number scope, probe-position sensitivity and black-box interpretability are visibly bounded. + +**Observed claim ceiling.** Physical interpretation is attached to observed controlled-flow changes and intervention, not to the internal topology of the neural network. The policy is not recast as a symbolic governing equation. + +**Style lesson, not a transferred claim.** Keep the parent policy and the explicit surrogate conceptually separate. A surrogate section must not borrow the parent's field interpretation merely because both execute in closed loop. Likewise, turning control off is a different intervention from deleting one surrogate term; the two should not share “ablation” language without qualification. + +## 4. Cross-paper observed practice + +The following statements are observations across this bounded set, not universal rules for JFM. + +### Equation introduction + +- Physical variables, action bounds and objective precede the learned equation. +- A displayed law enters when the reader can already answer: input from what state, output to which actuator, under what normalization, and judged by which objective or comparator? +- Long formulas are not mined coefficient by coefficient. Authors move from exact expression to lower-dimensional behavior: law shape, mean actuation, frequency content, trajectory or field consequence. +- Equations that do not carry a later comparison are minimized; a framework schematic often removes the need for repeated algebra. + +### Notation + +- Symbols are attached to physical observables and actuators before algorithmic detail. +- Normalization, index order and delays are defined locally enough to read the law without consulting an implementation inventory. +- Present tense is used for definitions and equation meaning; past tense is used for optimization, execution and measured outcomes. +- The executable map and the objective use separate notation. Fit or search notation is not allowed to obscure plant semantics. + +### Symmetry and topology + +- Restricted actuation spaces, expression-tree libraries, sparse candidate libraries and physical equality constraints are disclosed as choices. +- Imposed structure is not narrated as a discovered property. +- A failed or weaker unconstrained/simple class can motivate a richer or constrained law. +- Topological compactness supports readability and model selection; by itself it does not establish physical truth, necessity or causality. + +### Closed-loop arbitration + +- The learned object is judged in execution: direct plant evaluation, deterministic policy rollout, reference-trajectory comparison or reconstruction against held reference data. +- Admissibility/static checks, offline fit, search convergence and closed-loop performance answer different questions. +- A benchmark is introduced only after the law has a declared objective and execution protocol. +- Simpler executed controls provide more interpretable comparisons than symbolic coefficient inspection, provided replacement and acquisition semantics are explicit. + +### Deletion and ablation caveats + +- None of the four papers licenses a generic rule that deleting a term proves causality or necessity. +- Sparse thresholding is model selection; control suppression tests continued actuation; averaged-law replacement tests one simpler controller; reduced sensors test an observation set. These interventions are non-equivalent. +- Stronger words are earned only when the experiment is designed for them. Even then, finite conditions and unresolved authority/optimality limitations remain local. + +### Figure cadence + +A recurrent cadence is: + +`contract/schematic → explicit equation or law graph → executed time/trajectory evidence → flow or spectral interpretation → simpler/benchmark comparison → limitation or synthesis`. + +The equation and its first evidence are close. A summary figure arrives after the hierarchy is established, not as an opening gallery. One figure carries one main inferential job; secondary implementation details remain in captions, methods or appendices. + +### Claim ceilings + +- “Law” denotes an executable mapping or identified reduced dynamics under a specified contract; it is not automatically a governing physical law. +- “Robust”, “stable” and “optimal” appear only with purpose-built tests, and explicit caveats still narrow them. +- Interpretation of observed flow organization can be stronger than interpretation of symbolic coefficients when supported by executed comparisons. +- Failure and incomplete authority are reported where they delimit the result, not postponed to a generic limitations paragraph. + +## 5. Recommendation for the later SR section + +This section translates observed practice into a bounded recommendation. It does not prescribe internal findings. + +### Paragraph jobs and cadence + +1. **Question and estimand.** Define the SR object as an observation-to-action surrogate under one declared plant and role contract. State immediately that it is neither a flow-field model nor a causal model. Import action order, normalization, roles and metric semantics rather than redefining them. +2. **Recovery and deployment contract.** Give causal pairing, search/refit hierarchy, imposed symmetry and executable/static gates. Separate discovered topology from imposed deployment structure. Move exhaustive libraries, run history and package provenance to a ledger or supplement. +3. **Canonical law.** Display it once. Decode variables, action order, signs, odd/shared mapping and persistent versus observation-dependent structure. Do not narrate every coefficient or call the expression a governing law. +4. **Closed-loop arbitration.** State which acquisition actually compares which roles under which window. Put offline fit in a subordinate diagnostic role. If the available formula-parent execution and a standardized multi-role collection are different acquisitions, present them as different evidence contracts rather than assembling a synthetic comparison. +5. **Deletion and limit.** Report parent-relative fixed-window term tests as a ranking of tested perturbations. Put `not causal ablation; not necessity, sufficiency or uniqueness` in the same paragraph and caption. End by exporting the unresolved field-accounting question, not by claiming mechanism. + +### Equation and notation contract + +- **Equation 1: symmetry/deployment map — `required`.** Owner: the Kármán SR section (Round-3 M05). Job: expose native action order and every imposed transformation before the canonical law. Caption/text ceiling: “defines the deployed mapping”; it cannot prove parent-policy equivariance, plant symmetry or discovery of symmetry. Text readiness: supported by the R3 dossier. Artifact readiness: no separate schematic should be claimed without production/provenance; the equation itself is sufficient fallback. +- **Equation 2: canonical executable law — `required`.** Owner: the Kármán SR section (Round-3 M05). Job: provide one exact, reusable law identity and permit a bounded structural translation. Caption/text ceiling: executable surrogate under the declared contract, not governing law, mechanism or unique representation. The Round-3 interface ledger and final audit mark the equation/text ready for author synthesis; this style memo does not independently verify or artifact-audit that readiness. +- Define observation aggregates before or directly beneath the law; never force the reader to reconstruct them from subscripts. +- Keep parent-policy notation, surrogate notation, physical angular velocity and normalized action distinct. +- Do not repeat reusable Reynolds, field-L2 or DTW equations owned by Contracts. A short metric name and exact imported semantics are enough. + +### Closed-loop arbitration contract + +- **Primary rhetorical arbiter:** executed surrogate under a named plant, comparator and evaluation window. +- **Subordinate diagnostics:** offline action fit, symbolic complexity, search convergence, static finiteness/schema checks. +- **Direct multi-role display — `blocked if retained`.** Include only if target, parent policy, surrogate and zero roles share the required acquisition protocol and their comparator/window provenance is explicit. Otherwise omit the panel; this optional artifact gate does not block bounded section text. +- Failed formulas or gates should be visible when they explain why the displayed topology was retained. They need not become a package history. + +### Deletion contract + +- Prefer “parent-relative term deletion” or “fixed-window deletion test” over unqualified “ablation”. +- State parent, replacement/deletion, held-fixed conditions, metric, window and tested set. +- Rank only the tested perturbations. Do not convert a larger change into causal contribution, physical necessity, universal sensitivity or a decomposition of total performance. +- If deleting one term changes the state distribution, acknowledge that the result is a new closed-loop trajectory, not a local coefficient derivative. +- **Deletion display/table — `required` if the term-ranking claim is retained.** Job: make tested variants and caveats auditable. Caption ceiling: comparative degradation among tested parent-relative variants. Fallback: concise table; no decorative bar chart is needed. + +### Figure cadence and density + +Recommended minimum sequence: + +1. symmetry/deployment equation and canonical law; +2. compact closed-loop arbitration display or table only if its artifact gate passes; +3. compact deletion table/figure. + +A law graph or symmetry schematic is optional if it resolves sign/order ambiguity that equations cannot. Avoid placing a field figure in this section merely to strengthen the law; field accounting belongs to the following owner. Keep one principal inference per display and put the strongest limitation in the adjacent paragraph and caption. + +### Imports, exports and bridge + +**Imports:** plant and chain identity; action order/sign/normalization; observation definitions; role/comparator vocabulary; field-L2 versus DTW distinction; the bounded Kármán performance handoff. + +**Owns/exports:** the Kármán SR section (Round-3 M05) owns the exact executable law identity, imposed symmetry/deployment topology, distinction between offline diagnostics and closed-loop arbitration, and bounded fixed-window deletion ranking; it exports the question passed to field-level accounting. Steady sign/magnitude context remains owned by the steady section and must not be used to imply amplitude agreement or chain continuation. + +**Does not own:** full parent-policy performance; full field matching; mean/dynamic field attribution; CCD; steady-chain results; positive cross-case SR interpretation. + +**Opening dependency:** the preceding performance section must have already established why action-law complexity is the next question without implying that performance reveals law structure. + +**Closing bridge:** convert action-space structure and deletion ranking into a field-accounting question: what portion, if any, of independently defined field improvement is associated with persistent and correction components? + +### Duplication deletions + +- Delete repeated plant, Reynolds, action and metric equations already owned by Contracts. +- Delete full performance numbers and field comparisons owned by neighboring sections. +- Delete search-stage chronology, package names, hashes and library dumps from narrative; retain only details needed to distinguish fit, gate and execution. +- Delete any steady-result detail beyond a later, explicitly separate contextual bridge. +- Delete positive Illusion SR language and any import of CCD as confirmation of the law. + +## 6. Claim ceiling and near-collision audit + +### Green + +Permissible style-level forms, conditional on later authority verification: + +- “defines the executable surrogate and its imposed deployment map”; +- “was evaluated in closed loop under the named contract”; +- “the tested deletion produced the largest/smaller change among the listed variants”; +- “offline fit is diagnostic; closed-loop execution is the arbiter.” + +### Amber + +Use only with the full local qualifier: + +- “supports a bounded control-skeleton interpretation under the declared Kármán contract”; +- “organizes the law into a persistent component and smaller observation-dependent corrections”; +- “is consistent with”, when the comparison and non-equivalence are named. + +### Prohibited red without new dedicated evidence + +`governing law`, `mechanism`, `causes`, `necessary`, `sufficient`, `unique`, `optimal`, `stable`, `robust`, `universal`, `transferable`, `general Reynolds law`, `independent validation`, `term contribution to the flow`, `PPO symmetry discovered`, `DTW delay`, or positive Illusion SR efficacy/generalization. + +### Near-collision findings + +| Pair | Acquisition/roles/domain/window distinction | Classification and wording consequence | +|---|---|---| +| Offline parent-action fit vs surrogate closed-loop execution | Fixed parent-visited states versus a surrogate-generated trajectory; action error versus plant outcome | `different estimand`; fit cannot be called control success | +| Static/schema/short execution gate vs standard closed-loop comparison | Admissibility/finiteness and short-horizon behavior versus declared evaluation roles/window | `related diagnostic`; do not call a short gate validation of the full result | +| Formula-parent execution vs standardized target/policy/surrogate/zero acquisition | Potentially different role acquisition and windows even in the same plant | `different estimand` unless exact authority establishes sameness; no synthetic panel or arithmetic | +| Parent-relative deletion vs causal ablation | New closed-loop trajectory after a controller intervention; no randomized/local causal estimand | `different estimand`; use deletion/ranking language only | +| Persistent action magnitude vs separate steady-chain actuation | Different chain, solver/geometry, role, metric and temporal contract | `related contextual diagnostic` at most; no agreement, validation or amplitude equivalence | +| SR law vs field/CCD organization | Action mapping versus separately defined field residual/subspace, potentially sharing parent lineage | `different estimand`; no independent triangulation, causality or identification of law terms with modes | +| Control suppression vs term deletion | Whole-controller removal after a controlled state versus modification of one surrogate component | `different estimand`; do not generalize “ablation” conclusions across them | + +## 7. Anti-patterns + +- Opening with the full formula before defining input, output, normalization, action order and objective. +- Calling imposed oddness, shared topology or reflection a discovered parent-policy symmetry. +- Treating a sparse expression as self-interpreting and narrating every coefficient. +- Presenting offline action RMSE, Pareto rank or search convergence as closed-loop control evidence. +- Combining different acquisitions into a PPO/SR/zero comparison because their labels look compatible. +- Using `ablation` without saying whether the intervention deletes a term, averages a controller, removes control, changes sensors or changes the model library. +- Inferring necessity, causality or mechanism from parent-relative deletion. +- Calling a short gate, a spatial L2 metric or a DTW score interchangeable forms of validation. +- Importing field panels, CCD modes or steady results to manufacture independent confirmation. +- Hiding failed candidates, imposed constraints or incomplete authority until the final Discussion. +- A figure gallery: formula, traces, spectra, fields and bars with no single comparator-led argument. +- Repeating equations owned by Contracts or narrating package stages, hashes and artifact inventories in prose. +- Borrowing strong words such as robust, stable or optimal from literature without purpose-built internal tests. +- Treating an explicit surrogate as the parent neural policy or as a physical governing law. + +## 8. Decisions, deferrals and disposition + +### Evidence-governed recommendations + +- Use the five-move cadence and two required SR-owned equations. +- Make imposed structure explicit before interpretation. +- Let matched closed-loop execution arbitrate; subordinate offline fit and static gates. +- Use parent-relative deletion language with same-location caveats. +- Keep field/CCD and steady evidence outside this section except for narrow imports/bridges. +- Enforce the bounded Kármán/cloak-only claim ceiling. + +### Author/coordinator choices + +- **Direct multi-role panel:** omit unless exact same-protocol role artifacts and comparator/window values are bound. The Round-3 final audit classifies the retained panel as blocked but the bounded text as ready; omission leaves the core law/deletion argument intact. +- **Law graph or symmetry schematic:** safe default is equations only. Add a schematic only if action order/sign cannot be read quickly; it remains a production artifact, not existing evidence. +- **Deletion visualization:** safe default is a compact table rather than bars, because the table can carry parent, variant, window and caveat without implying additive contribution. + +### Deferrals and blockers + +- Internal formula identity, coefficients, run lineage, comparator roles, windows, hashes and panel arrays were deliberately not audited in this style lane. Any retained manuscript detail or panel must be checked against current authorities during later assembly; the Round-3 readiness disposition remains controlling. +- The optional direct multi-role panel is blocked if retained until matched acquisition is established; this does not block bounded section text. +- No literature access blocker exists. +- No first-pass style memo may declare the section frozen. + +### Disposition + +`researching` — the bounded style research is complete and traceable. The Round-3 controls already mark the SR equation/text ready for author synthesis and the optional standardized panel blocked if retained; those controls do not authorize this first-pass Round-4 memo to self-freeze. A later coordinator disposition, not this memo, may assign `frozen` status. + +## 9. Validation against the Round-4 style gate + +- Exact identities, publication venues, years, DOIs and `full-PDF` read levels are recorded for four selected papers. +- Observed practice is separated from recommendation and no external paper is used as internal evidence. +- Equation introduction, notation, imposed symmetry/topology, closed-loop arbitration, deletion caveats, figure cadence and claim ceilings are covered explicitly. +- Coverage states, independent-verification state and artifact-audit state remain distinct. +- Imports, ownership, exports, bridge and duplication deletions are explicit. +- Display/equation recommendations state owner, job, readiness/dependency, caption ceiling and fallback. +- Near-collisions are classified without pooling or replication/validation/agreement language. +- No project result, coefficient, performance number or new scientific claim is introduced. +- Gate-1 self-check: **PASS candidate for coordinator review**, not self-freeze. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_06_FIELD_CCD.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_06_FIELD_CCD.md new file mode 100644 index 0000000..7310c16 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_06_FIELD_CCD.md @@ -0,0 +1,195 @@ +# Round 4 style research — Field decomposition and CCD + +**Lane:** section-style research only; not manuscript prose, evidence generation, artifact approval, or a section freeze. +**Disposition:** `researching` — completed first-pass memo for coordinator audit. + +## 1. Scope, question, and bounded recommendation + +**Question.** How do close *Journal of Fluid Mechanics* papers order and qualify sections that progress from mean/reference fields through a dynamic residual to modal or correlation-based interpretation? + +**Recommendation.** Use the narrowing sequence + +`four-role contract → mean fields → scalar error-difference accounting → local caveat → separately centred residual → action-correlated modal organization → same-object POD boundary → non-transfer bridge`. + +The scalar estimand and comparator must precede modes. Put the mean display before the residual/mode display. Display only equations that define an immediately used object: scalar shares, the non-paired residual, and an optional compact CCD operator. Introduce POD after CCD as a boundary on distinct field information, not a superiority contest. This memo adds no project prose, numbers, or claims; external literature supplies style precedent only. + +## 2. Coverage ledger + +`read` is not independently verified or artifact-audited; `mapped` is not read. + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | Round-4 `README.md`, `00_MASTER_AGENT_PROMPT.md`, `00_QUALITY_GATE.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_DISPLAY_EQUATION_INVENTORY.md` | Controls, ownership, statuses, display/equation gates | Read directly; workflow/decision authority, not scientific verification | +| `read` | R2 `05_REVISED_STRUCTURE_FREEZE.md` and `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Author-ratified architecture and sampled JFM practice | Read directly; style guide is `full-report` | +| `read` | R3 `06_KARMAN_FIELD_CCD.md`, `00_MODULE_INTERFACE_LEDGER.md`, `11_FINAL_CONSISTENCY_AUDIT.md` | M06 estimands, ownership, near-collisions, readiness | Read directly as repository reports; no recomputation or artifact audit | +| `read` | Jean-Christophe Loiseau, Bernd R. Noack & Steven L. Brunton, “Sparse reduced-order modelling: sensor-based dynamics to full-state estimation”, *JFM* 844, 459–490 (2018), DOI `10.1017/jfm.2018.147` | Closest reconstruction → correlation modes → POD precedent | `full-PDF`; full-text method/results/modal passages inspected, not equation-by-equation verified | +| `read` | Nan Deng, Bernd R. Noack, Marek Morzyński & Luc R. Pastur, “Low-order model for successive bifurcations of the fluidic pinball”, *JFM* 884, A37 (2020), DOI `10.1017/jfm.2019.959` | Plant-specific mean/fluctuation decomposition and basis choice | `full-PDF`; decomposition and POD passages inspected, not equation-by-equation verified | +| `read` | Guy Y. Cornejo Maceda, Yiqing Li, François Lusseyran, Marek Morzyński & Bernd R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *JFM* 917, A42 (2021), DOI `10.1017/jfm.2021.301` | Scalar objective → law → mean field → hierarchy precedent | `full-PDF`; result-order and field-interpretation passages inspected, not equation-by-equation verified | +| `mapped` | Bernd R. Noack, Witold Stankiewicz, Marek Morzyński & Peter J. Schmid, “Recursive dynamic mode decomposition of transient and post-transient wake flows”, *JFM* 809, 843–872 (2016), DOI `10.1017/jfm.2016.678` | Close POD/DMD comparison record | Exact record/abstract mapped; full-text retrieval failed, so no section-practice inference is assigned | +| `mapped` | Remaining JFM papers indexed in the R2 style guide; current CCD manifests/publication siblings named by M06 | Broader cadence and panel lineage | Mapped through controlling reports; not reread or artifact-audited here | +| `not-covered` | Raw arrays, masks, hashes, numerical arithmetic, new CFD/training/SR/CCD/OID, figure generation | Outside style lane and explicitly prohibited | No claim inferred; authority-led deferral | +| `not-covered` | Exhaustive sentence coding of all JFM modal literature | Three closest full PDFs are proportionate | Findings are sampled practice, not universal rules | +| `external-inaccessible` | Noack et al. (2016) full text during this pass | Retrieval failed | Non-blocking; record remains `mapped` | +| `external-inaccessible` | Hidden/external project payloads | Unnecessary for style analysis | `artifact-audit deferred`; retained panels remain gated | + +Requested controls, R2 style guidance, R3 M06, and relevant audits were read. Three close JFM papers were inspected at full-PDF level and one additional exact record was mapped. + +## 3. Observed practice versus recommendation + +### 3.1 Role ordering + +**Observed practice.** Loiseau et al. order sensor dynamics and predictive performance before full-state reconstruction, then use feature-correlated modes as an interpretability layer. Deng et al. establish phenomenology before mean/fluctuation decomposition and refine the representation where a simpler model fails. Cornejo Maceda et al. repeatedly couple scalar objective, explicit law, and corresponding fields within an increasingly rich control hierarchy. + +**Recommendation.** Begin with target, zero, constant, and DRL roles under one exact comparison contract. Show means and scalar accounting before defining the residual; introduce CCD only after centring and non-pairing are explicit; end with POD on the same residual object. This delays attractive modes but prevents them from being mistaken for the primary performance estimand or a causal decomposition. + +### 3.2 Scalar versus modal estimands + +**Observed practice.** Loiseau et al. distinguish reconstruction accuracy from modal interpretability and note that a less accurate modal expansion may still aid interpretation. Deng et al. make basis choice conditional on the represented regime: transient-near-base and asymptotic-limit-cycle estimands need not favour the same modes. Cornejo Maceda et al. use fields to interpret an optimized outcome rather than silently redefine its scalar cost. + +**Recommendation.** Keep three propositions separate: means are compared under one role/ROI/mask/window contract; scalar error differences provide arithmetic accounting; CCD organizes a separately defined residual. Never call scalar shares modal energy, explained variance, modal contribution, or actuator attribution. Never use a scalar mean ledger to validate dynamic reconstruction. + +### 3.3 Equations + +**Observed practice.** In Deng et al., decomposition equations arrive where mean-field assumptions begin, after phenomenology motivates them. Loiseau et al. stage equations within the method and let comparative figures carry empirical burden. Cornejo Maceda et al. display a law when it becomes the object interpreted by scalar and field evidence. + +**Recommendation.** +1. **Scalar-share identity:** required only if shares are retained; place after mean errors and before interpretation. Define numerator/denominator and state “not energy or causality”. +2. **Separately centred residual:** required; place immediately before residual/mode evidence and state non-pairing in the same paragraph. +3. **CCD operator:** optional; retain only if its field side, action side, weighting, or rank is needed for the adjacent interpretation. Otherwise use prose and move derivation to supplement. + +Do not duplicate reusable L2/action definitions owned by Contracts, the SR law owned by M05, a general POD derivation, or OID equations. + +### 3.4 Figure sequence + +**Observed practice.** Loiseau et al. proceed from method/prediction to reconstruction comparisons, estimator errors, and generalized modes. Deng et al. show phenomenology before model construction and connect modes back to the bifurcation narrative. Cornejo Maceda et al. pair law hierarchy with time/scalar behaviour and mean fields, then synthesize the hierarchy. Figures advance an inference rather than form mode galleries. + +**Recommendation.** +1. Mean comparison: four roles on one scale plus compact scalar ledger. +2. Residual definition: make separate centring and non-pairing legible. +3. Mode identity and phase organization: selected modes/action coordinates only. +4. POD boundary: compact same-object subspace comparison, not a second gallery. + +One paragraph should carry one principal figure claim. Captions own role, component, normalization/orientation, domain, arbitrary sign, lineage, and noncausal ceiling. If panels are unavailable, retain the scalar ledger, residual equation, and bounded comparison; do not invent redraws. + +### 3.5 POD and other methods + +**Observed practice.** Loiseau et al. state what generalized modes correlate with, compare reconstruction against POD alternatives, and expose modal-deformation limits. Deng et al. choose eigenmodes or POD modes according to transient versus asymptotic purpose. The mapped Noack et al. record frames RDMD against POD/DMD, but unread sections are not evidence here. + +**Recommendation.** Compare CCD and POD only on identical residual snapshots, rank, weighting, and domain. Ask whether tested field subspaces differ and what action association adds. If subspaces are near-equivalent, say CCD is not shown to provide a distinct field basis and adds action-coordinate association/phase organization under the declared construction. Do not use `outperforms`, `unique modes`, `more physics`, or `explains more variance` without exact dedicated authority. Add DMD/SPOD/resolvent/OID only for a live boundary question, never as a catalogue. + +### 3.6 Descriptive caveats + +Place each limit beside the object it limits: + +- scalar shares: arithmetic accounting, not energy or causal contribution; +- residual: separately centred and non-paired, not a matched counterfactual or response; +- CCD: descriptive action correlation, not lag, direction, response time, authority, or mechanism; +- modes: global sign arbitrary; rotation/parity views do not measure wall vorticity; +- POD comparison: one parent lineage, not independent validation or triangulation; +- synthesis: Legacy Kármán only; no V5, steady, Vortex, Illusion, or OID transfer. + +A final disclaimer cannot repair causal verbs used earlier. + +### 3.7 Bridges + +**Observed practice.** Loiseau et al. turn predictive success into reconstruction and then interpretability questions. Deng et al. let phenomenology and representational failure motivate refinement. Cornejo Maceda et al. let each richer control space pose the next question. + +**Recommendation.** +- SR → mean: term ranking asks what the constant reference accounts for at field level; it does not predict the answer. +- Mean → residual: scalar accounting leaves a field difference whose organization is unresolved. +- Residual → CCD: once centring/non-pairing are fixed, ask whether action-associated low-rank organization is present. +- CCD → POD: association does not establish a distinct basis, motivating a same-object boundary test. +- Closing bridge: cross-case temporal/target contracts change and cannot inherit this Kármán interpretation. + +## 4. Paragraph jobs, ownership, and deletion + +### Six paragraph jobs + +1. Exact four roles and comparison contract; import definitions compactly. +2. Mean fields, scalar errors, and error-difference identity. +3. Local scalar limit and one concise M04/M06 different-estimand warning. +4. Residual definition, separate centring, non-pairing, and dynamic question. +5. CCD rank/action coordinates/phase as **action-correlated correction-field modes**, with local caveats. +6. Same-object POD boundary, single-lineage limit, bounded export, and non-transfer bridge. + +If compressed, combine 2–3; never combine mean and modal estimands in the opening paragraph. + +**Owned here:** corrected four-role mean comparison; scalar error-difference semantics; separately centred non-paired residual; descriptive CCD organization; same-object POD boundary; M04/M06 near-collision rule. + +**Imports:** chain/action/Re/metric definitions from Contracts; detailed independent field matching from M04; SR formula/deletion ranking from M05. Imports orient but do not duplicate. + +**Exports:** bounded mean accounting plus smaller descriptively action-correlated residual organization under the named Legacy Kármán contract; explicit non-transfer; no positive OID export. + +**Deletion instructions:** remove full SR formula/deletion detail, M04 values/seed/DTW prose, repeated package hashes/dimensions, general POD derivation, and OID results. State the full M04/M06 prohibition once here; later sections keep only a reminder. + +## 5. Claim ceiling and near-collision audit + +**Green:** `defines`, `compares`, `separates`, `uses separate centring`, `is non-paired`, `is associated with`, `spans the tested rank`. + +**Amber:** `accounts for the measured error difference`, `organizes the residual`, `is action-correlated`, `is phase-organized`, `adds action-coordinate association`, `supports a bounded persistent-plus-dynamic reading`—always with exact contract and adjacent caveat. + +**Red without dedicated evidence:** `causes`, `drives`, `responds`, `control authority`, `mechanism`, `necessary/sufficient`, `unique`, `optimal`, `stable`, `robust/general`, `transferable`, `restores momentum`, CCD `energy captured`/`explained variance`, `independently validates`, `triangulates`, or `CCD superiority`. + +| Comparison | Contract differences | Classification / rule | +|---|---|---| +| M04 standardized PPO fields vs M06 corrected means | Independent three roles versus four-role target/zero/constant/DRL; geometry guard versus exact common mask; unweighted normalized RMS versus coordinate-weighted nondimensional RMS; different retained windows | **Different estimands.** No arithmetic, replication, validation, agreement, closure, or triangulation | +| M06 scalar shares vs M06 modal quantities | Scalar mean target-error differences versus weighted residual/action decomposition; mean window versus centred cycle/phase object | **Different estimands.** Shares are not energy, variance, or modal contribution | +| M05 SR ranking vs M06 action coordinates | Observation-to-action closed-loop/deletion contract versus field/action residual association | **Related diagnostic.** Brief descriptive bridge; no derivation/equivalence/validation | +| CCD vs POD | Valid comparison requires identical residual, samples, rank, weighting, and domain; action-informed versus action-agnostic bases | **Same field object, different basis estimand.** May bound distinctness, not confer causality/independence | +| Legacy M06 vs V5 steady/cross-cases | Different chain, roles, fields, metrics, and temporal contracts | **Different estimands.** Context/non-transfer only | + +## 6. Display and equation contracts + +No inventory entry implies an existing publication-ready artifact. + +| Item | Owner/job/source | Ceiling | Readiness, dependency, fallback | +|---|---|---|---| +| Mean comparison + scalar ledger | Field/CCD; establish four roles and arithmetic accounting; exact M06 role arrays only | Registered mean comparison; no causality, energy, mechanism, necessity, or M04 validation | `dependency-gated`; text ready, redraw needs arrays/mask/window/scale/orientation/provenance. Fallback: scalar ledger + prose | +| Scalar-share equation | Field/CCD; define retained shares from authority-bound scalar errors | Measured error-difference accounting only | `required` if shares retained; text ready, artifact audit deferred. Fallback: verbal definition/table; no unexplained percentages | +| Residual equation | Field/CCD; define separately centred non-paired object from exact DRL cycles/constant template | Not counterfactual, response, force, or lag | `required`; text ready, panels gated. Fallback: equation plus explicit non-pairing sentence | +| Compact CCD operator | Field/CCD; clarify field/action sides, weighting/rank if necessary | Descriptive correlation organization | `optional`; include only after equation-budget test. Fallback: prose/supplement | +| Residual/modes/phase figure | Field/CCD; corrected parent/derived arrays and same-boundary action observable | Action association/phase; arbitrary sign; no wall-vorticity, causality, lag, or response time | `dependency-gated`; needs arrays/orientation/labels/lineage/render audit. Fallback: residual equation + bounded rank/coordinate statement | +| Same-object POD boundary | Field/CCD; identical residual/rank/weight/domain | Tested subspace boundary; no superiority, uniqueness, independence, or CCD explained variance | `dependency-gated`; needs paired arrays/comparison metric. Fallback: sentence or compact row | +| Estimand-boundary table | Field/CCD with Contracts terminology; prevent unsafe compression | Taxonomy, not convergence | `optional`, text-ready. Fallback: local caveat sentences | + +## 7. Choices, deferrals, blockers, and anti-patterns + +### Evidence-governed decisions + +Mean precedes modes; scalar and modal estimands stay separate; non-pairing appears at first residual use; CCD remains descriptive and uses the fixed term; POD is a same-object boundary; M04 and M06 remain different estimands. + +### Author/coordinator choices + +| Choice | Recommendation and safe default | Status | +|---|---|---| +| Display CCD operator | Omit unless symbols materially clarify interpretation; prose/supplement fallback | `discuss` | +| Combine mean fields and ledger | Combine only if roles/scale remain legible; otherwise split | `discuss` | +| Retain POD panel | Only with exact same-object arrays; otherwise one bounded sentence | `discuss` | +| Caption publication label | Exact preferred derived publication plus validated parent; avoid “canonical CCD” | `discuss` | +| Compress displays | Protect mean-first order, residual equation, local caveats; drop operator/redundant modes first | `discuss` | + +**Deferrals/conflicts.** The fourth modal record remains mapped because retrieval failed. Project arrays/payloads were not artifact-audited. Visual economy conflicts with dual CCD/POD galleries; resolve with one CCD/phase sequence and compact subspace boundary. Causal language from other correlation literature cannot transfer to this different estimand. + +**Blockers.** None for this style memo or bounded text contract. A retained panel is blocked if exact role arrays, common object/domain, orientation, lineage, or rendering provenance are missing. POD comparison is blocked unless both methods use the identical declared residual. Optional missing panels do not block text. + +### Anti-patterns + +- Linear algebra or mode gallery before roles and scalar estimand. +- Four fields without comparator, mask, window, and acquisition. +- Percentage without scalar denominator and non-energy caveat. +- Residual called response or paired counterfactual. +- Negative lag called response time or directionality. +- CCD strengths called energy/explained variance. +- SR terms equated with CCD coordinates or one lineage called triangulation. +- CCD superiority inferred from visual cleanliness or action labels. +- POD used as a straw comparator or methods added as a catalogue. +- M04/M06 called agreement because values are close. +- Caveats delayed until Discussion. +- Panel-by-panel narration, package-handoff prose, or inventory treated as artifact existence. +- Closing with a section-number announcement rather than the non-transfer bridge. + +## 8. Validation and disposition + +**Gate-1 validation: PASS for coordinator review.** Exact identities, DOIs, and read levels are stated; the unread record remains mapped. Sampled observed practice is separate from recommendation. Role order, scalar/modal boundaries, equations, figure cadence, POD comparison, caveats, bridges, ownership, near-collisions, choices, readiness, fallbacks, and anti-patterns are explicit. Literature supplies no internal result or priority. Evidence and artifact-audit states remain distinct. + +**Disposition:** `researching`. This is a completed first-pass style memo, not a freeze; only the Round-4 coordinator’s required second audit may advance the downstream section contract. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_07_CROSS_CASE.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_07_CROSS_CASE.md new file mode 100644 index 0000000..b8f3ed0 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_07_CROSS_CASE.md @@ -0,0 +1,401 @@ +# Round 4 style research — cross-case extensions + +**Lane:** section-style research for the cross-case extension unit. +**Status:** `researching`; this first-pass memo cannot self-freeze. +**Role:** decision/freeze input, not manuscript prose, project evidence, or a source of new scientific claims. + +## 1. Scope, question and bounded recommendation + +### Scope and question + +This memo studies how a JFM-facing cross-case section can move from a reference case to heterogeneous, transient, retargeted, or failure-bounded extensions without turning the section into a case gallery or implying generalization. It focuses on five rhetorical operations: + +1. change one contract dimension at a time; +2. reintroduce the local comparator whenever the contract changes; +3. use visual-only evidence at a visibly lower claim level than quantified comparison; +4. place negative or failed routes beside the claim they bound; and +5. finish with an evidence envelope rather than a breadth or universality claim. + +External papers are used only to observe publication practice. They do not establish any project result, role, artifact, or priority. + +### Bounded recommendation + +Build the section as three argumentative tests rather than a catalogue of cases. Each module should begin by naming the single changed contract, then restate the target and comparator, state the strongest admissible evidence type, give one principal finding at its actual readout level, expose the nearest failure or missing dependency, and hand off the resulting boundary. Keep the reference case as a comparison anchor, but do not import its deep interpretation. When only images are available, call the evidence a named visual demonstration and let the caption carry acquisition identity and visible limitations; do not convert appearance into field matching, efficacy, robustness, or transfer. End by stating which execution interfaces were exercised under distinct contracts and which interpretations did not travel with them. + +The trade-off is deliberate. This structure gives up the rhetorical breadth of a montage and some visual variety, but it lets each extension answer a distinct question and prevents incompatible metrics, targets, temporal coordinates, and evidence states from being read as one progression score. + +## 2. Coverage ledger + +`Read` means inspected directly for this lane. It does not mean independently reproduced, independently verified, or artifact-audited. `Mapped` means located and used for navigation only. Literature read levels follow the Round-2 definition: `full-PDF` is paper-level full-text reading, not equation-by-equation verification. + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | `ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md` | Round-4 method, deliverables, fixed cautions and status rules | Read directly; control document, not independently verified or artifact-audited | +| `read` | `ROUND4_TOP_DOWN/00_QUALITY_GATE.md` | Style-memo and section-freeze gates | Read directly; control document | +| `read` | `ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md` | Ownership, claim ladder, section order and cross-case ceiling | Read directly; coordinator authority, not scientific artifact audit | +| `read` | `ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md` | Cross-case display readiness, equation ownership and fallbacks | Read directly; inventory does not establish panel existence | +| `read` | `ROUND4_TOP_DOWN/README.md` | Round-4 purpose, inputs, statuses and handoff boundary | Read directly; control document | +| `read` | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` (relevant cross-case and supersession passages) | Controlling section placement and rejection of a mere gallery | Read directly; project architecture authority | +| `read` | `ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Controlling JFM style synthesis and cross-case cadence | Read in full; `full-report`; its literature identities were checked against current records where used below | +| `read` | `ROUND3_BOTTOM_UP/07_CROSS_CASE_EXTENSIONS.md` | Relevant M07 evidence, interfaces, display gates and failure boundaries | Read in full; `full-report`; no underlying project artifact independently verified or artifact-audited in this lane | +| `read` | `ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md` | M07 ownership and downstream interface | Read directly; coordinator ledger | +| `read` | `ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md` | Reconciled cross-module scope, readiness and duplication findings | Read in full; `full-report`; no artifact recomputation | +| `read` | Xia, Zhang, Kerrigan & Rigas (2024), exact record below | Closest failure-to-repair and bounded unseen-condition example | `full-PDF`; paper-level rhetorical reading; bibliographic DOI/PDF availability checked; no numerical reproduction | +| `read` | Paris, Beneddine & Dandois (2021), exact record below | Closest reference-case-to-robustness/sensor-extension example | `full-PDF`; paper-level rhetorical reading; bibliographic DOI/PDF availability checked; no numerical reproduction | +| `read` | Wang et al. (2024), exact record below | Closest escalating heterogeneous-flow and degraded-route example | `full-PDF`; paper-level rhetorical reading; bibliographic DOI/PDF availability checked; no numerical reproduction | +| `read` | Deng et al. (2020), exact record below | Closest pinball example of visible failure, refinement and synthesis rather than gallery | `full-PDF`; paper-level rhetorical reading; bibliographic DOI/PDF availability checked; no numerical reproduction | +| `mapped` | Round-3 modules adjoining M07 and authority/manifests linked from M07 | Locate imported definitions, export boundaries and artifact gates | Mapped for interface navigation; not read as evidence in this style lane and not independently verified | +| `mapped` | Existing Undermind `JFM/` and `JFM References/` collections | Locate exact records and PDFs | Collection/index mapping only; mapped is not read | +| `not-covered` | Exhaustive sentence coding of the broader JFM corpus; all references cited by the four papers | Beyond the bounded closest-example sample | No general frequency claim is inferred from four papers | +| `not-covered` | Raw project arrays, field files, evaluator outputs, source media, rendering scripts and hashes | This is style research, not artifact generation or audit | No project value, panel existence or quantitative result is inferred | +| `not-covered` | New CFD, training, SR, CCD, experiment analysis or metric computation | Explicitly outside Round 4 | No new evidence or claim produced | +| `external-inaccessible` | None among the four selected JFM PDFs | All four full texts were available in the literature workspace | No essential literature blocker | +| `external-inaccessible` | External/symlink-backed project payloads named by M07 | Not opened in this style lane; access and audit state are outside its remit | Authority-led artifact-audit deferral; retained quantitative panel dependencies remain governed by M07 and Round-4 inventory | + +Coverage is complete for the requested Round-4 controls, controlling Round-2 style guide, relevant Round-3 M07 dossier/audit interface, and four closest full-PDF examples. It is intentionally not a new project-evidence audit. + +## 3. Exact literature identities and observed JFM practice + +### 3.1 Exact identities and read levels + +1. C. Xia, J. Zhang, E. C. Kerrigan & G. Rigas, “Active flow control for bluff body drag reduction using reinforcement learning with partial measurements”, *Journal of Fluid Mechanics*, **981**, A17 (2024). DOI: `10.1017/jfm.2024.69`. Read level: `full-PDF`. +2. R. Paris, S. Beneddine & J. Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning”, *Journal of Fluid Mechanics*, **913**, A25 (2021). DOI: `10.1017/jfm.2020.1170`. Read level: `full-PDF`. +3. Qiulei Wang, Dong Yan, Guodong Hu, Gang Chen, Jean Rabault & Bernd R. Noack, “Dynamic feature-based deep reinforcement learning for flow control of circular cylinder with sparse surface pressure sensing”, *Journal of Fluid Mechanics*, **988**, A4 (2024). DOI: `10.1017/jfm.2024.333`. Read level: `full-PDF`. +4. N. Deng, B. R. Noack, M. Morzyński & L. R. Pastur, “Low-order model for successive bifurcations of the fluidic pinball”, *Journal of Fluid Mechanics*, **884**, A37 (2020). DOI: `10.1017/jfm.2019.959`. Read level: `full-PDF`. + +The literature service’s cite-key years reflect prepublication records for some papers; the journal year, volume and article identity above control this memo. No quotations are used, so there is no quotation-level verification claim. + +### 3.2 Observed practice: extensions change a declared difficulty + +**Xia et al.** establish the fully observed reference problem before reducing the available measurements. The degraded static-controller route is shown before temporal history is introduced as the repair. Later tests vary history content, history length, reward design, sensor arrangement and unseen Reynolds number in separate steps. The rhetorical value is not merely chronological: the reader can identify which information contract changed and which comparison diagnoses the consequence. + +**Paris et al.** first establish a reference control configuration, then test a fixed learned policy under changed flow and noise conditions, and only afterward narrow the sensor interface. The robustness and sensor-placement parts are therefore extensions of a declared reference, not additional showcase cases. Dedicated parameter tests precede the stronger vocabulary attached to them. + +**Wang et al.** first compare the proposed feature construction with a conventional controller under a baseline sensing/flow setting. Harder Reynolds-number and three-dimensional settings arrive later, with comparison schemes renamed or restated so that the reader can still tell which method and sensing contract is being compared. A degraded sparse-sensing route and an undesirable reward-exploitation route are made visible rather than omitted. + +**Deng et al.** build separate low-order descriptions for successive physical transitions, compare each against the numerical plant in its applicable regime, and then combine/refine them. A simpler model’s visible inability to reproduce part of the transient is used to motivate additional cross-terms. The final phenomenogram synthesizes the route through regimes; it is not a montage offered as proof that one model is universal. + +**Observed pattern across this sample.** A heterogeneous extension is readable when the paper makes the changed difficulty explicit and preserves a stable comparison anchor. The papers do not rely on section ordering alone to communicate this: they restate the relevant sensing, flow, model or policy condition at the point where it changes. This is a sample-level observation, not a claim about all JFM papers. + +### 3.3 Observed practice: comparators are renewed locally + +The four papers repeatedly return to a local reference rather than assuming that a comparator introduced many pages earlier remains obvious. + +- Xia et al. keep uncontrolled/base-flow bounds and the fully measured controller visible when evaluating partial-measurement variants and their repair. +- Paris et al. retain the reference policy/configuration while perturbing Reynolds number, noise or sensor count, so a change in outcome can be attached to the stated test. +- Wang et al. explicitly define comparison schemes again when the dimensionality and sensing arrangement change. +- Deng et al. renew DNS as the plant comparator at each regime and distinguish the unrefined and refined reduced models. + +This renewal does not mean that all cases share one metric. Its function is local identification: what is the target or baseline here, what changed, and what readout answers this module’s question? + +### 3.4 Observed practice: visuals explain or delimit; they do not silently upgrade evidence + +In Xia et al., wake snapshots are read beside reward, force or temporal comparisons and are used to clarify why the partial-measurement configurations differ. In Paris et al., wake structure and sensor-layout views are paired with performance curves rather than substituted for them. In Wang et al., representative and mean flow fields contextualize force changes, while training and force evidence carry the comparison. In Deng et al., state-space portraits and the final phenomenogram provide physical organization, while time histories and coefficient/model comparisons test fidelity. + +The common rhetorical discipline is pairing: a visual can show morphology, timing, placement or qualitative difference, but the claim register follows the acquisition and readout actually supplied. None of these examples licenses treating visual resemblance as an unreported norm, field error, target match or transfer test. + +### 3.5 Observed practice: failed routes remain in the argument + +The closest examples use negative evidence constructively: + +- a partial-measurement static controller fails before a history-based repair is introduced; +- extreme sensor sparsity and some transient energetic behaviour remain visible beside successful control; +- a conventional sparse-sensing route degrades, and an undesirable reward-exploitation strategy is identified; +- a least-order model’s transient mismatch motivates refinement before the final synthesis. + +These failures are local and diagnostic. They identify the limit of a specific information, actuation, reward or model contract. The papers do not automatically turn a repaired failure into robustness across all omitted conditions. + +### 3.6 Observed practice: breadth is earned test by test + +Paris et al. attach robustness/generalization wording to dedicated perturbation tests. Xia et al. delimit unseen-condition performance around a tested training setting and expose degradation away from it. Wang et al. qualify conclusions by the investigated flow and sensing configurations. Deng et al. identify configuration-specific and non-generic aspects of the bifurcation sequence. In this sample, the breadth word follows the breadth test; it does not follow from the number of visually different cases. + +## 4. Project recommendation derived from the observed practice + +The recommendations below are design choices for this paper, not descriptions of project outcomes. + +### 4.1 Section-level rhetorical contract + +Use three modules, each with the same six-part logic but not identical prose: + +1. **Changed contract.** Name exactly one primary change from the preceding reference: temporal coordinate, target/reference, or evidence availability. +2. **Local comparator.** Restate target, controlled role and baseline/zero role only to the detail needed for this comparison. If one role is absent, say so before the result. +3. **Admissible readout.** Name whether the evidence is event-relative quantitative, periodic target-relative quantitative, mean-only, or visual-only. Do not promote a candidate definition into a result. +4. **Principal observation.** Give one result-level sentence at the admissible claim ceiling; let the figure/caption carry secondary case labels. +5. **Negative boundary.** Place the failed route, unavailable comparator, negative reduction route or unresolved evaluator beside the principal observation. +6. **Consequence.** State what the changed contract demonstrates and what interpretation does not transfer. + +This repetition is conceptual, not templated wording. Vary sentence shape and transition according to the scientific change. If every module reads as “case name → image → success,” the section has become a gallery. + +### 4.2 Change one contract at a time + +The opening transition should decompose heterogeneity into independent axes before presenting examples. Recommended conceptual sequence: + +- periodic coordinate → event-relative coordinate; +- background/reference objective → declared non-zero target; +- supported target/comparator roles → a further objective whose quantitative role contract is incomplete. + +At each transition, explicitly name what remains fixed only if the source authority permits that statement. Do not use “same framework” as a shortcut: it can conceal changes in chain, geometry, role acquisition, normalization, evaluation window or target construction. When several things actually change together, label the module as a named demonstration under a distinct contract rather than pretending it is a controlled one-variable extension. + +### 4.3 Reintroduce comparators without repeating Methods + +A local comparator sentence should answer four questions: + +- What field or signature is the declared target? +- Which role is the controlled observation? +- Which baseline or physical-zero role is informative here? +- Which metric or visual readout is admissible under this acquisition? + +The section should import definitions from Contracts and avoid reprinting formulas, ROI details or action conventions unless the change itself makes one of them newly consequential. This gives enough re-anchoring for the reader without duplicating M03 or the detailed Kármán performance section. + +Do not call physical zero the target in a non-zero-target module. Do not treat a missing baseline as if a visual panel supplies it. Do not preserve a comparator label while silently changing its acquisition or window. + +### 4.4 Visual-only evidence contract + +When the evidence is visual-only, use a two-level statement: + +- **Observation:** identify the named scene, relative/event coordinate or target/control role visible in the source artifact. +- **Limit:** state that no quantitative target/control/baseline field comparison follows without exact roles, common domain/mask, weighting/normalization, window and evaluator authority. + +Recommended verbs are `shows the named visual demonstration`, `depicts`, `is visibly different under the stated acquisition`, or `supports inclusion as a capability example`. Avoid `matches`, `recovers`, `suppresses`, `tracks`, `generalizes`, `is effective`, or `performs comparably` unless the corresponding quantitative comparator and estimand are available. + +A visual panel should not carry an unsourced scalar annotation. If the caption cannot state chain, case, role, comparator/target, temporal coordinate, source and evidence level, omit the panel. Visual-only is an evidence status, not a criticism; hiding that status is the defect. + +### 4.5 Negative and failed routes + +Place each negative route in the module it constrains, not in a late limitations dump. + +- A negative surrogate/reduction route belongs beside the positive learned-policy capability, with the chain and acquisition difference made explicit; it is a boundary, not a head-to-head comparison unless protocols match. +- A missing event evaluator or exact role set belongs immediately after any transient visual demonstration; it prevents numerical inference but need not erase the visual observation. +- An unsupported objective/target construction should be presented as a route that cannot sustain quantitative efficacy, not as an empty placeholder for a future success. + +Use failures to answer “what would have to change for a stronger claim?” They should not be dramatized as universal impossibility, and a successful neighbouring case should not be presented as having repaired a failure in a different chain or estimand. + +### 4.6 Avoid gallery and generalization claims + +A cross-case figure becomes a gallery when panels are grouped by appearance but lack a shared argumentative question. Prevent this by giving each retained panel one job: + +- establish the changed temporal coordinate; +- establish the changed target/reference; +- expose a boundary or unavailable comparison. + +The prose should compare contracts, not visual attractiveness. Do not count cases as evidence of generality. Do not use a common colour scale, aligned panel geometry or shared layout to imply a common estimand. A synthesis sentence may say that the execution objective was exercised in named cases under distinct contracts; it may not say that the policy, interpretation, mechanism or efficacy generalized across them. + +### 4.7 Evidence density, cadence and transitions + +Recommended density is one principal evidentiary object per module. Put secondary labels, acquisition details and non-claims in the caption or a compact case-contract table. A paragraph should not enumerate every case variant, target size, offset or file. Move complete inventories to the supplement if they remain scientifically useful. + +Use transitions as logical changes: + +- reference periodicity established → ask what replaces phase for an incoming event; +- event-relative execution established → ask what changes when the desired signature is non-zero; +- retargeting shown at capability level → ask which extension routes survive exact comparator and evidence requirements; +- bounded extensions assembled → return to the deep case’s context without transferring its interpretation. + +Avoid transitions of the form “the next case is…” or “Figure X also shows…”. + +## 5. Paragraph jobs, ownership and interfaces + +### Opening dependency + +Import from the contracts section only the already frozen distinctions among chains, target/control/baseline roles, temporal coordinates and case-specific metrics. Import from the capability section only the existence and placement of the named cross-case preview. Import from the Kármán deep block only the fact that it is the reference/deep case; do not import detailed values, surrogate structure or dynamic-field interpretation. + +### Recommended paragraph-function map + +| Paragraph job | Opening move | Evidence function | Local limitation | Export/bridge | +|---|---|---|---|---| +| 1. Decompose the extension problem | State that temporal and target contracts change independently | Establish the comparison logic and prohibit a pooled score | “Shared interface” cannot imply same chain or estimand | Opens event-relative module | +| 2. Event-relative extension | Replace periodic phase with a declared event coordinate; renew target/control/baseline roles | One bounded event-relative result if authority exists; otherwise one visual-only observation | No phase averaging, arbitrary-disturbance claim or imported Kármán interpretation | Asks whether the objective itself can be retargeted | +| 3. Non-zero-target extension | Define the local non-zero target and comparator anew | One bounded learned-policy capability observation; quantitative field statement only if exact role authority exists | Keep negative reduction route local and chain-separated; no target-tracking inference from appearance | Asks what happens when the target/reference changes again | +| 4. Failure-bounded further objective | State the required target/comparator contract before any panel | Either a supported mean/target comparison or an explicit unsupported-route boundary | Filenames, plot navigation and visual similarity do not establish roles or efficacy | Builds the evidence envelope | +| 5. Cross-case synthesis | Compare what changed and what did not travel | Synthesize named capability under distinct contracts | No common score, transfer, robustness, mechanism or universality | Bridges to later steady context as context only | + +Five paragraphs is a functional target, not a quota. Split a paragraph only when the comparator and failure boundary cannot remain legible together; combine only when no evidence distinction is lost. + +### Result ownership + +- **Cross-case section owns:** the changed-contract sequence; local comparator renewal; event-relative versus periodic-target semantics at a high level; visual-only evidence language; the negative/unsupported extension envelope; and the final non-transfer statement. +- **Contracts owns:** reusable chain, role, action, metric, ROI/mask/window and normalization definitions. +- **Capability owns:** the early preview/progression and Fig. 1 selection logic. +- **Kármán performance owns:** detailed reference-case field and signal results. +- **SR and field/CCD own:** deep Kármán interpretation and its exact evidentiary components. +- **Conclusion owns:** one compressed restatement of breadth with asymmetric interpretation, not the detailed negative-route ledger. + +### Imports + +1. Definitions of chain, role, comparator, temporal coordinate and metric semantics from Contracts. +2. The reference/deep-case designation from Capability/Kármán performance. +3. The positive-scope boundary from SR and non-transfer boundary from Field/CCD. +4. M07’s authority-led status for visual, quantitative, conditional and blocked routes. + +Imports must remain brief. They cannot be rewritten as cross-case evidence. + +### Exports + +1. A named, case-bounded capability statement under distinct temporal/target contracts. +2. A local evidence envelope distinguishing quantitative, visual-only, negative and unsupported routes. +3. A prohibition on carrying the deep-case interpretation or one score across extensions. +4. A bridge to later steady context that leaves transient and target-transfer gaps open. + +### Duplication deletions for assembly + +- Delete detailed Kármán values and metric contracts from this section; retain only the reference function. +- Delete full action-law or correction-field explanations; retain only their non-transfer boundary. +- Delete the case inventory from main prose; place exact variants in a contract table or supplement if retained. +- Delete any second full definition of spatial L2 or DTW; use the contracts notation by reference. +- Delete repeated negative-route detail from Conclusion; Conclusion keeps only the envelope. +- Delete caption-style narration from prose when the panel already carries role and acquisition identity. + +### Closing bridge + +The bridge should say, in function rather than polished prose: heterogeneous cases exercise execution under changed temporal or target contracts, while the deep interpretation remains local; the manuscript can now return to steady evidence only as contextual reference for that local interpretation, not as closure of transient or target-transfer questions. + +## 6. Claim ceiling and near-collision audit + +### Green: admissible at named scope + +- The section may distinguish periodic, event-relative, non-zero-target and unsupported/conditional comparison contracts. +- It may report a named visual demonstration as visual-only when exact provenance and roles are available. +- It may state that a negative or unsupported route bounds the extension claim under its own chain and acquisition. +- It may state that cross-case evidence supports named capability breadth under distinct contracts, provided “breadth” is not rewritten as robustness or generalization. + +### Amber: allowed only with explicit bounds + +- `extends the objective` or `exercises the execution interface under a changed contract` when the unchanged and changed elements are authority-bound. +- `supports a comparable-scale hypothesis` only if the source dossier licenses that interpretation and the named tested disturbances remain explicit. +- `is consistent with retargeting at capability level` only when target and controlled roles are identified and the statement does not imply independent field matching. +- `provides a failure boundary` when the negative route’s chain, protocol and comparator are stated. + +### Prohibited red without new authoritative evidence + +- `generalizes`, `transfers`, `robust`, `universal`, `arbitrary-flow`, `cross-size law`, `common efficacy`, `same mechanism`, `same control skeleton`, `validates`, `replicates`, `agrees with`, `triangulates`, `target tracking`, or `field matching` from visual resemblance alone. +- Any positive extension of the Kármán-only surrogate or dynamic-field interpretation. +- Any quantitative result inferred from filenames, plot navigation, panel existence, a candidate equation or an unverified role mapping. +- Any pooled arithmetic across periodic, event-relative, mean-only, visual-only or chain-separated readouts. + +### Near-collision findings + +The section must perform the near-collision check before putting two values or panels into comparative syntax. For each pair, compare: + +1. acquisition and executable chain; +2. target, controlled and baseline role identities; +3. temporal coordinate and retained window; +4. ROI/domain and mask; +5. weighting and normalization; +6. metric definition and orientation. + +Classification rules: + +- **Same estimand:** only when all six items are authority-bound as the same comparison. +- **Related diagnostic:** same acquisition/question but a deliberately different readout, such as field and signal evidence that remain separately interpreted. +- **Different estimand:** any changed chain, role acquisition, target, temporal coordinate, mask/weighting, normalization or window that changes the measured object. + +For this style lane, periodic versus event-relative evidence is `different estimand`; visual-only versus quantitative field comparison is `different evidence/readout`, not agreement; positive learned-policy capability versus a negative surrogate route from another chain/protocol is a boundary juxtaposition, not a direct comparator; and any further objective lacking exact target/control/baseline roles is not classifiable as an efficacy result. No arithmetic, replication, validation, agreement or triangulation wording is allowed merely because values or images look similar. + +## 7. Figure, table and equation contracts + +### Cross-case display + +- **Owner:** Cross-case section. +- **Argumentative job:** show the sequence of contract changes and their evidence ceilings, not maximize the number of cases. +- **Source:** only authority-bound existing visual or quantitative artifacts identified by M07 and later production audit. +- **Roles/arrays:** each retained panel must identify chain, case, target, controlled role, baseline/zero role if present, temporal coordinate, source artifact and readout. Exact arrays remain a production/audit dependency. +- **Caption ceiling:** named event-relative or non-zero-target capability; visual-only where no exact quantitative comparison exists; negative/unsupported route visible locally. +- **Classification:** overall `dependency-gated`; quantitative transient and unsupported-objective components remain `blocked` where the Round-4 inventory says so; a non-zero-target field metric remains conditional on exact authority. +- **Text readiness:** the rhetorical contract is text-ready as a recommendation. +- **Artifact readiness:** not panel-ready in this memo; no artifact was inspected or generated. +- **Fallback:** retain only sourced visual panels with explicit evidence level; omit blocked quantitative annotations and unsupported panels. If the remaining display becomes a gallery, replace it with the compact case-contract table. +- **Does not establish:** common efficacy, arbitrary-flow capability, cross-case transfer, robustness, positive surrogate scope, causal mechanism or quantitative success from appearance. + +### Compact case-contract table + +- **Owner:** Cross-case section; detailed definitions imported from Contracts. +- **Argumentative job:** make the changed dimension, comparator, readout, evidence state and local limit visible in one place. +- **Source:** frozen contracts plus M07 authority ledger; no new values. +- **Rows/fields:** module/question; changed contract; target; controlled role; baseline/comparator; temporal coordinate; admissible readout; evidence status; strongest local limit. +- **Caption ceiling:** organizational aid for non-equivalent extensions. +- **Classification:** `optional`, but preferred fallback if a multi-panel display cannot avoid gallery reading. +- **Text readiness:** table schema ready. +- **Artifact readiness:** content requires coordinator production audit against current authorities. +- **Fallback:** concise opening paragraph plus local comparator sentences. +- **Does not establish:** comparability of metrics merely because they occupy adjacent rows. + +### Event-relative metric equation + +- **Owner:** Cross-case section for the event-specific definition; Contracts owns reusable spatial-error notation. +- **Argumentative job:** define an event-relative candidate estimand only if a retained quantitative transient comparison requires it. +- **Source/roles:** exact target/control roles, event offsets, common ROI/domain/mask, weighting/normalization and evaluator authority must be bound before use. +- **Caption/text ceiling:** definition only; it creates no role acquisition, evaluator output or result. +- **Classification:** `optional`; currently dependency-bound and not required for the section’s bounded visual text. +- **Text readiness:** semantic description is ready; notation is not frozen here. +- **Artifact/result readiness:** blocked wherever exact roles/evaluator are absent. +- **Fallback:** prose or the compact case-contract table. + +### Negative-route callout + +- **Owner:** Cross-case section. +- **Argumentative job:** keep negative surrogate evidence and unsupported objective routes adjacent to the positive capability they bound without presenting unlike protocols as matched comparisons. +- **Source:** M07’s current authority ledger and final Round-3 audit. +- **Classification:** `required` as prose; `optional` as a boxed/table display. +- **Caption ceiling:** historical/negative or unsupported under the named acquisition; no cross-chain efficacy comparison. +- **Text readiness:** ready as a rhetorical requirement. +- **Artifact readiness:** any numerical callout remains dependent on exact authority and coordinator choice; this memo introduces none. +- **Fallback:** one local limiting sentence in each affected module. + +No other equation is recommended. The section should reuse frozen notation and spend display space on comparison logic, not derive a common metric that the evidence does not support. + +## 8. Anti-patterns and corrective actions + +| Anti-pattern | Why it fails | Corrective action | +|---|---|---| +| One panel or paragraph per case | Converts heterogeneity into inventory and encourages case counting | Organize by changed contract and retain one principal evidentiary job per module | +| “The framework generalizes to…” | A changed case is not a dedicated transfer/generalization test | Use named-capability wording and state the tested contract | +| Common score bar across extensions | Periodic, event-relative, target-relative and mean-only quantities are different estimands | Use a contract/evidence-state table; keep metrics local | +| Visual similarity described as matching | Appearance does not establish target/control/baseline field error | Label visual-only and state the missing quantitative dependencies | +| Comparator introduced once, then assumed | The target, baseline or acquisition may have changed | Renew the local comparator at every contract change | +| Positive capability and negative route treated as matched | Different chain, role or window can make the juxtaposition non-comparative | Present the negative route as a local boundary and state protocol separation | +| Failure hidden in Limitations | The reader overreads the preceding success before reaching the caveat | Put the failed or unsupported route beside the claim it limits | +| Failure called proof of impossibility | A local failed configuration does not exhaust alternatives | Name the failed contract and the next evidence needed | +| Kármán interpretation reused as explanation | Capability breadth does not transfer deep-case SR/field interpretation | Import only the non-transfer boundary | +| Candidate equation presented as evidence | A definition cannot create missing roles, arrays or evaluator output | Mark the equation optional/conditional and separate result readiness | +| Filenames or manifests treated as role proof | Navigation metadata need not bind target identity or comparability | Require authority-bound roles and artifact audit before quantitative prose | +| Captions narrate success while prose lists files | Splits the argument between promotional captions and inventory prose | Give prose the inference; captions carry provenance and limits | +| Every module uses identical six-sentence form | Reads as generated template rather than scientific progression | Preserve the six jobs but vary cadence and emphasis by the changed question | +| Strong caveat only in final synthesis | Allows local overclaim and makes limits look retrofitted | Pair each major observation with its nearest limitation | + +## 9. Author decisions, conflicts, deferrals and blockers + +### Evidence-governed decisions + +These are not author choices: + +- Keep periodic, event-relative, non-zero-target, mean-only and visual-only evidence states distinct. +- Keep executable chains and role acquisitions distinct. +- Keep positive surrogate interpretation confined to its authorized deep case; retain the negative extension route as historical/negative. +- Do not infer quantitative efficacy from an unsupported target construction, filenames or visual navigation. +- Do not call a multi-case display generalization, robustness, transfer or a common score without dedicated authority. +- Preserve text readiness separately from panel/artifact readiness. + +### Decision-ready author/coordinator choices + +1. **Main display form.** Recommendation: use the cross-case display only if each retained panel has one distinct argumentative job and complete caption provenance. Safe default: use the compact case-contract table plus at most the strongest sourced visual examples. Consequence: fewer images, clearer evidentiary hierarchy. Status: `discuss`. +2. **Retain an event equation.** Recommendation: omit unless a quantitative event result becomes authority-bound and remains in the main text. Safe default: prose semantics. Consequence: avoids displaying a definition that has no result. Status: `discuss`. +3. **How prominently to show the negative route.** Recommendation: retain it in the same module as the positive capability, in prose or a small callout. Safe default: one local sentence, not a full comparative panel. Consequence: the boundary stays visible without implying matched protocols. Status: `discuss`. +4. **Further-objective panel.** Recommendation and safe default: omit while its exact quantitative target/control/baseline contract is unsupported. Consequence: the failure envelope remains in prose and the section avoids a speculative gallery. Status: `blocked` if the panel is retained; omission is nonblocking. + +### Conflicts + +No conflict was found between the controlling Round-4 ledger, Round-2 style guide, M07, the Round-3 final audit and the observed practices in the four selected papers. The literature sample supports the rhetorical direction—reference first, changed difficulty declared, comparator renewed, failure local, breadth test-bounded—but it does not decide project evidence or elevate any project claim. + +### Deferrals + +- Project artifact inspection, role-array audit, mask/window verification, evaluator availability and rendering provenance are deferred to the owning evidence/production lanes. +- Exact sentence/page coding of the four papers is not required because this memo uses no quotations or paper-derived numerical claims. +- Broader JFM corpus coverage is deferred; the four-paper sample is treated as closest examples, not a universal style law. + +### Blockers + +There is no blocker to this style recommendation. Retained quantitative transient or unsupported-objective panels remain blocked by the dependencies already recorded in M07 and the Round-4 display inventory. Those panel blockers do not justify stronger visual prose and do not block a bounded text contract with omission fallbacks. + +## 10. Disposition + +**Disposition: `researching`.** The requested style evidence and section recommendation are complete for first-pass review, but Round-4 controls prohibit a first-pass lane from self-freezing. A coordinator second audit should re-read this memo with the controls and M07, confirm exact literature identities/read levels, test the ownership and near-collision boundaries, and decide the display/table/equation options. Artifact readiness remains separate and does not control the bounded style memo. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_08_STEADY_THEORY.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_08_STEADY_THEORY.md new file mode 100644 index 0000000..f69b666 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_08_STEADY_THEORY.md @@ -0,0 +1,165 @@ +# Round 4 style research — steady context, physical synthesis and theory limits + +**Status:** `researching` — first-pass style memo, not a section freeze or manuscript prose. +**Owner:** steady/theory section style lane. +**Question:** How should a short late return to steady control compare finite-Re observations with an outer theory, retain failed sign/closure routes as scientific boundaries, and close into experiment/conclusion without turning a contextual section into a mechanism chapter? + +## 1. Bounded recommendation + +Use a **contextual return, not a second results climax**. Open by recalling the earlier steady seed and narrowing the question to what the separate steady chain can contextualize. Establish the finite-Re contract and accepted/reverse branch before interpretation; then introduce one short outer-reference equation, confront it immediately with the sign or closure failure, and end with a synthesis that transfers only compatible context. The section should carry one required action/sign display, one compact endpoint comparison, and one theory-failure display or equation; a new MFS field remains blocked. Caveats should sit beside the exact inference they limit, not be postponed to the final Discussion. + +This recommendation governs style and argumentative order only. It supplies no project prose, numerical result, or new scientific claim. + +## 2. Coverage ledger + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | Round-4 `README.md`, `00_MASTER_AGENT_PROMPT.md`, `00_QUALITY_GATE.md`, `00_GLOBAL_DECISION_LEDGER.md`, `00_DISPLAY_EQUATION_INVENTORY.md` | Controls status, ownership, claim ceiling, section order, display/equation readiness and mandatory coverage fields | Read directly; no independent scientific verification or artifact audit | +| `read` | Round-2 `05_REVISED_STRUCTURE_FREEZE.md` | Controls the two-pass steady chronology, 6% late-return role, separate-chain boundary and theory ceiling | Full-report; read directly; not independently verified or artifact-audited | +| `read` | Round-2 `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Controlling R2 style guide and existing exact literature/read-level ledger | Full-report; read directly; literature observations selectively checked against four PDFs below | +| `read` | Round-3 `08_STEADY_SYNTHESIS.md` | Relevant M08 section dossier: paragraph jobs, provenance, near-collision, equations, displays, failures and blockers | Full-report; read directly; reported project facts were not recomputed and artifact-leaf audit was deferred | +| `read` | Round-3 `11_FINAL_CONSISTENCY_AUDIT.md` | Controlling R3 ownership, duplication, text/panel readiness and synthesis-stage deletions | Full-report; read directly; no artifact audit | +| `read` | `src/steady_pinball_theory/LITERATURE.md` and relevant portions of `DERIVATION.md` | Current theory-interface authority used only to understand the section’s failure/closure and equation-selection constraints | Full-report; read directly; no new derivation, recomputation or universal artifact audit | +| `read` | Deng, Noack, Morzyński & Pastur (2020), “Low-order model for successive bifurcations of the fluidic pinball”, *Journal of Fluid Mechanics* **884**, A37, DOI `10.1017/jfm.2019.959` | Closest pinball precedent for physical chronology, model refinement, visible failure and synthesis figure | `full-PDF`; PDF read for sections, equations and figures; no independent reproduction of DNS or ROM | +| `read` | Cornejo Maceda, Li, Lusseyran, Morzyński & Noack (2021), “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* **917**, A42, DOI `10.1017/jfm.2021.301` | Closest pinball precedent for simple steady forcing → richer steady forcing → feedback and for failed/weaker branch placement | `full-PDF`; PDF read for rhetorical and comparison practice; no independent control-result verification | +| `read` | Mao, Blackburn & Sherwin (2015), “Nonlinear optimal suppression of vortex shedding from a circular cylinder”, *Journal of Fluid Mechanics* **775**, 241–265, DOI `10.1017/jfm.2015.304` | Closest precedent for theory/optimization versus nonlinear simulation, regime-of-validity failure and realizability caveats | `full-PDF`; PDF read for equation/figure cadence and local limits; no numerical or stability reproduction | +| `read` | Ueda, Sellier, Kida & Nakanishi (2003), “On the low-Reynolds-number flow about two rotating circular cylinders”, *Journal of Fluid Mechanics* **495**, 255–281, DOI `10.1017/S002211200300627X` | Closest analytical rotating-cylinder precedent for viscous wall conditions, asymptotic branches, order-of-limits failure and incomplete higher-order closure | `full-PDF`; PDF read for asymptotic structure and negative-route treatment; no derivation verification | +| `mapped` | Remaining ten-paper R2 style-guide corpus and Undermind `JFM/`, `JFM References/01`, `/02`, `/07` indexes | Broader JFM style/context pool and source navigation | Located and metadata-mapped only in this lane; not reread and no new practice inferred from mapped-only papers | +| `not-covered` | New literature/deep search; exhaustive sentence coding; full bibliography expansion; all Round-3 modules other than M08 and controlling audit | Not needed for this bounded section-style question | No claim inferred | +| `not-covered` | New CFD, MFS, continuation, budgets, stability, figure generation, raw-field/NPZ review, hash recomputation or experiment analysis | Explicitly outside Round 4 style research | No result inferred; no panel promoted | +| `external-inaccessible` | Authority-linked hidden/symlink-backed endpoint fields, dense MFS/NS payloads and facility media | Not needed to study style; required for any unsupported retained panel or reproducibility claim | Artifact audit deferred; this blocks stronger artifact/panel claims, not this style memo | + +**Coverage finding.** All requested controls, R2 style/freeze inputs, R3 M08 and four closest JFM full PDFs were read. Evidence states remain distinct: `full-PDF`/`read` does not mean independently verified, and no literature paper establishes an internal result. + +## 3. Observed JFM practice + +The observations below are paper-specific; they are not universal rules inferred from four papers. + +### 3.1 Contextual return and section progression + +- **Deng et al. (2020), observed:** physical chronology structures the paper: flow configuration and bifurcation sequence precede incremental low-order modelling; primary and secondary regimes then test the corresponding models. The final phenomenogram (figure 14) synthesizes the chronology after the model comparisons. This is a genuine return to the physical sequence, not an isolated theory appendix. +- **Cornejo Maceda et al. (2021), observed:** the results move from the uncontrolled baseline to one-parameter symmetric steady forcing (§4.1), general asymmetric steady forcing (§4.2), and learned feedback (§4.3). The simpler controls remain visible after the richer controller appears because they supply the comparison hierarchy and physical vocabulary. +- **Mao et al. (2015), observed:** theory and numerical integrity are established before results; the results then move sensitivity → nonlinear optimum → control effect → physical interpretation → drag. Theory stays early because it defines the optimization actually used later. +- **Ueda et al. (2003), observed:** governing equations and matched asymptotic regions lead directly to limiting procedures and force branches. The theory is the result rather than late context, so its long derivation is not a suitable structural template for a 6% contextual return. + +**Style inference:** a late return works when it answers a narrower question created by earlier results. It should recover a simple reference or historical route and then expose what that reference can and cannot organize. Importing the full architecture of a theory-led paper into a short synthesis section would invert the paper’s evidence hierarchy. + +### 3.2 Theory/model comparison + +- **Deng et al., observed:** the idealized uncoupled model (equation (3.31)) is compared directly with DNS in figure 12 before the refined cross-coupled model (equation (5.5)) is shown in figure 13. The failed comparison is part of the proof for refinement, not omitted as an obsolete route. +- **Cornejo Maceda et al., observed:** steady and feedback search spaces are compared under a common declared cost, with a compact final summary table/figure. Physical labels follow tested actuation branches; they do not substitute for the comparison. +- **Mao et al., observed:** linear sensitivity and nonlinear optimum coincide at low control cost and diverge when the linear assumptions cease to hold (figure 4). The comparison defines the validity range of the simpler theory rather than declaring one model globally wrong. +- **Ueda et al., observed:** alternative orders of limits are compared explicitly. One route retains an orientation-dependent limit and fails to recover the desired quiescent far field; the other yields the admissible steady limit. The failure identifies a mathematical non-commutation, not a generic physical mechanism. + +**Style inference:** state the comparison contract first, show the attractive reference and finite-Re/observed counterpart in the same argumentative unit, and report the failed sign/closure test before offering synthesis. A theory curve or field without the decisive incompatibility beside it invites mechanism overreading. + +### 3.3 Failed sign/closure routes and negative results + +- **Deng et al., observed:** failure appears at the point where the uncoupled model misses transient and asymptotic features (§5.2, figure 12); the authors then add cross-terms and retain a residual limitation after refinement. +- **Cornejo Maceda et al., observed:** the best symmetric base-bleed forcing is reported as failing to stabilize, while a strong Coanda/boat-tail branch can stabilize but remains far from the target and costly. A weaker route is not erased merely because a richer controller performs better. +- **Mao et al., observed:** the linear sensitivity route is useful at small magnitude and explicitly loses validity at larger forcing; non-zero-frequency forcing is less effective; continuously distributed transpiration is acknowledged as non-realizable in the abstract and interpreted as a map for future localized actuation. +- **Ueda et al., observed:** the Jeffery-paradox route is retained through the order-of-limits comparison; leading-order lift is zero, and higher-order lift closure is deferred because nonlinear inertial analysis is substantially more involved. + +**Style inference:** classify each negative route by what exactly failed—sign, closure, approximation range, target, realizability or missing order—and preserve what remains usable. “Failed theory” is too coarse if a mathematical identity or outer reference survives while its finite-Re transfer fails. + +### 3.4 Caveat placement + +- **Observed across the four papers:** decisive caveats are local. Deng places missing coupling beside the failed ROM comparison; Cornejo Maceda places incomplete stabilization beside the feedback result; Mao flags non-realizability in the abstract and actuator-efficiency limits with the relevant effectiveness claim; Ueda places asymptotic-order and missing-higher-order limits with the force conclusions. +- **Observed distinction:** broader scope limits may recur in conclusions, but conclusions do not perform the first repair of an overstrong result paragraph. + +**Style inference:** use a two-level caveat pattern: (i) a short local limit in the same paragraph/caption as every attractive comparison; (ii) one closing envelope that names the remaining mechanism, stability and transfer boundaries. Do not stack all warnings in the last paragraph. + +### 3.5 Equations and figure selection + +- **Deng et al., observed:** equations are introduced by modelling need; the argument is carried by the uncoupled/refined equation pair and their adjacent DNS comparisons, then compressed by one phenomenogram. +- **Cornejo Maceda et al., observed:** one reusable objective equation precedes the search-space progression; branch figures and a compact synthesis table/figure carry comparison. The complex learned law is displayed only because it is itself an object of analysis. +- **Mao et al., observed:** the methodology legitimately carries many equations because adjoint derivation is a principal contribution; results figures then test linear/nonlinear overlap, saturation, fields and stability. This equation density is inappropriate when theory is only an outer reference. +- **Ueda et al., observed:** a high equation count is justified by matched asymptotics; a domain map and a small number of force-versus-gap plots compress the derivation into interpretable regimes and branch consequences. + +**Style inference:** equation count should follow argumentative ownership, not mathematical availability. For a contextual steady/theory return, retain only definitions reused to read the displays and the shortest equation that exposes the outer-reference boundary. Move MFS, strip-image, multipole and control-volume derivations to supplement unless the main-text inference truly depends on them. + +## 4. Project recommendation: paragraph jobs and interfaces + +### Recommended five-paragraph progression + +1. **Return and narrowed question.** Recall the early steady discovery seed in one sentence; state that this late return asks whether a separate steady branch supplies context for the already established near-constant component. Import only the minimum Kármán conclusion and immediately prohibit continuation/equivalence. +2. **Finite-Re contract and comparison.** Establish V5 chain, solver/geometry, Reynolds convention, body/action/sign order, comparator, settling/evaluation window and steady estimand. Present the accepted endpoint against stationary/reverse or nearby endpoint context only to the extent required by the selected display. Put endpoint-not-optimum and reverse-amplitude-mismatch caveats here. +3. **Bounded physical description.** Read the action-sign schematic before fields. Describe gap-facing/base-bleed or gap-jet-family compatibility as observation/hypothesis. Put absent causal arrow, force ownership and closed budget in this paragraph; do not defer them. +4. **Outer reference and failed route.** Introduce the shortest one-circle or partial-budget equation, define what it constrains, then place circulation independence/rotating-no-slip limitation and the failed sign comparison immediately beside it. Preserve surviving mathematics while marking the finite-Re closure as failed or incomplete. No new MFS field unless all validation gates close. +5. **Synthesis export.** Relate separate steady, SR and field observations only as compatible context; state the different-chain/different-estimand boundary once. End with the decisive missing test and a bridge to qualitative experiment/conclusion, not with another result inventory. + +### Result ownership and duplication deletions + +- **Owned here:** V5 steady contract/sign, contextual endpoint status, accepted/reverse boundary, shortest outer-reference/failure boundary, incomplete finite-Re closure/budget, and the late-return bridge. +- **Imports:** contracts section supplies reusable body/action/Re/metric definitions where already frozen; SR supplies only the bounded near-constant-term conclusion; field/CCD supplies only the bounded mean/dynamic organization; cross-case supplies the reason interpretation did not transfer. +- **Exports:** a constrained compatible-context statement, explicit theory-failure boundary, decisive test, and qualitative-experiment bridge. +- **Delete during assembly:** repeated SR formula/deletion details; detailed CCD shares/residual construction; full M04/M06 near-collision explanation; full steady sweep; package/manifest histories; repeated experiment provenance checklist. Those belong to their owners or supplement. +- **Opening dependency:** Kármán persistent/smaller-correction interpretation and cross-case non-transfer must already be established. +- **Closing bridge:** the computational evidence supplies bounded context, while experiment addresses qualitative deployability only and cannot close the quantitative or causal gap. + +## 5. Claim ceiling and near-collision audit + +### Claim ceiling + +- **Green:** `defines`, `shows under the stated contract`, `has the declared sign`, `passes/fails the stated gate`, `is a separate endpoint observation`, `the outer reference leaves circulation unspecified`, `the sign/closure route fails`. +- **Amber:** `is compatible with`, `provides context for`, `belongs to a base-bleed/gap-jet-family description`, `constrains the interpretation`, `motivates a bounded control-skeleton reading`. +- **Prohibited red without new authority:** `explains`, `mechanism`, `causes`, `restores momentum`, `validates the Kármán skeleton`, `selects circulation from wall speed`, `optimal`, `stable`, `robust`, `universal`, `equivalent`, `replicates`, `triangulates`, or any quantitative experimental-validation wording. + +### Near-collision findings + +| Pair | Acquisition/roles | Domain, mask, weighting and window | Classification | Writing rule | +|---|---|---|---|---| +| Legacy SR persistent-action magnitude vs V5 steady spin ratio | Separate chains, action parameterizations, plants and objectives | Action-law/window diagnostic versus steady endpoint profile evaluation | `related diagnostic` | No amplitude agreement, arithmetic, continuation, validation or replication wording | +| Legacy corrected constant/DRL mean-field comparison vs V5 steady endpoint | Different role sets and acquisitions | Legacy ROI/common mask/coordinate weighting/retained window versus V5 full-cross-section steady profile metric/settling window | `different estimand` | Only compatible contextual organization; no shared percentage or closure | +| V5 accepted vs reverse branch | Separate endpoint acquisitions; reverse is not an amplitude-matched intervention | Same broad steady family but different sign/amplitude and endpoint status | `related diagnostic` | Use as a sign/branch boundary, not causal mechanism, stability or symmetry proof | +| Outer potential/MFS reference vs finite-Re V5 endpoint | Prescribed-circulation mathematical family versus rotating no-slip CFD observation | Different governing equations, wall conditions, fields and metrics | `different estimand` | Compare only through an explicitly defined sign/projection test; disagreement bounds the route and agreement would not validate mechanism | + +No arithmetic combination, replication, validation, agreement or independent-triangulation language is licensed by these comparisons. + +## 6. Figure, table and equation contracts + +| Item | Owner / argumentative job | Source and required roles/arrays | Caption ceiling | Classification and readiness | Fallback | +|---|---|---|---|---|---| +| Action/sign schematic | Steady/theory; establish body order, wall law and gap-/outer-facing directions before physical labels | Current V5 contract/manifest-bound wall oracle; no field array required | Establishes action geometry only; not circulation, gap-jet causality, boat-tail equivalence or force direction | `required`; text/source-ready, redraw/production pending; artifact audit deferred | Compact contract table with cardinal directions | +| Endpoint comparison | Steady/theory; show accepted contextual endpoint and bounded reverse/stationary comparison under the steady metric | Exact V5 roles, comparator, profile arrays, settling window and source/render lineage | Separate chain and metric; endpoint not optimum/stability; reverse not amplitude matched; no Legacy comparison | `dependency-gated`; text ledger ready, panel needs bound arrays/render provenance | Endpoint table with status/caveat, or prose-only comparison | +| Outer-reference/sign-failure display | Steady/theory; make the attractive theoretical route and decisive incompatibility visible together | Existing one-circle identity and authority-bound outer/finite-Re sign test; no newly generated field | Outer impermeability/reference only; no rotating no-slip finite-Re mechanism or closure | `required` as an argumentative element; equation/sign schematic ready, new field blocked | One-circle trace plus compact sign-conflict annotation | +| MFS field | Steady/theory; only if it adds a validated spatial outer-reference comparison | Dense off-grid body/sector residuals, conditioning/rank, source-radius/order/image-layer convergence, independent reference, exact source arrays and rendering provenance | Mathematical outer reference only; never finite-Re no-slip physics or mechanism | `blocked` until all gates close; no current publication-ready field implied | Omit; retain one-circle/sign-failure boundary | +| Integrated evidence map | Conclusion or steady/theory by coordinator choice; show compatible and broken links without causality | Chain/estimand/status labels from owning sections; no pooled values | Dashed links mean context, not proof; broken links mark missing closure | `optional`; text concept ready, visual design dependency-gated | One synthesis paragraph plus limitations table | + +### Minimum equation budget + +1. **Wall law/spin ratio:** include only if not already reusable from contracts; otherwise cite/import the definition and use the sign schematic. +2. **Steady metric:** include its definition only if readers cannot interpret the endpoint display from the contracts section; do not redefine spatial L2 or DTW here. +3. **Outer-reference boundary:** prefer the one-circle tangential trace because one equation simultaneously shows impermeability, free circulation and the nonzero-inflow obstruction. If the partial Navier–Stokes budget is more central in final assembly, substitute one compact budget identity rather than adding both. +4. **Supplement:** full MFS system, source constraints, strip images, multipole expansion, convergence diagnostics and complete control-volume derivation. + +**Cadence:** definition/sign → empirical comparison → bounded reading → outer-reference equation → failed sign/closure → consequence. Never place several pages of derivation between the finite-Re observation and the failure that limits it. + +## 7. Anti-patterns + +- A detached “theory chapter” that restarts the paper after the Kármán and cross-case argument. +- Repeating the early steady discovery as a full second capability section. +- Presenting a potential/MFS field first and revealing its sign conflict several paragraphs later. +- Treating `failed theory` as total invalidation when the outer mathematical identity survives but its finite-Re closure fails. +- Treating a visually attractive outer field or small collocation residual as finite-Re physical validation. +- Imposing rotating-wall tangential speed as an inviscid boundary condition or asserting a universal circulation–spin law. +- Naming a project branch from another paper’s body order/sign convention without a direct wall-velocity map. +- Calling a low-deficit endpoint an optimum, stable branch or momentum-restored state. +- Using the reverse branch as an amplitude-matched intervention when it is not. +- Joining Legacy SR, Legacy CCD and V5 steady values because dimensionless labels look similar. +- Equation dumping: deriving MFS, images, multipoles and budgets in main text although only one boundary identity changes the inference. +- Figure inventory prose, package histories, or captions that imply a proposed panel already exists. +- Delaying all mechanism/stability/closure caveats to Discussion or converting every negative result into generic future work. + +## 8. Author/coordinator decisions, conflicts, deferrals and blockers + +1. **Outer-reference equation choice — `discuss`.** Recommendation: use the one-circle trace because it exposes the exact inviscid boundary limitation with the least machinery. Consequence: the partial NS budget moves to text/supplement. Safe default: one-circle trace only. +2. **Endpoint panel compression — `discuss`.** Recommendation: retain a compact sign schematic and endpoint table/one profile comparison; avoid a field gallery. Consequence: preserves space for the failed route. Safe default: table plus sign schematic. +3. **MFS field — `blocked`.** Do not retain unless all declared validation, source-array and rendering gates close. Safe default: omit; this does not block the text contract. +4. **Integrated evidence map — `discuss`.** Recommendation: let the conclusion own it if used, because this section should not visually imply causal closure. Safe default: omit and use one synthesis paragraph. +5. **Conflict to preserve, not repair:** the outer-reference/finite-Re sign conflict blocks that proposed cancellation route. It is an argumentative result boundary, not a reason to redefine circulation, swap branch labels or add an unsupported closure. +6. **Authority-led deferrals:** raw endpoint leaves, dense theory arrays and universal hashes remain artifact-audit deferred. They block unsupported panels/reproducibility claims, not the bounded style recommendation. + +## 9. Disposition + +**`researching`.** The requested literature and controlling documents have been read and the style recommendation is decision-ready, but this first-pass lane cannot self-freeze. A coordinator must perform the required second audit for ownership, equation/display compression, DOI/read-level fidelity, near-collision language and text-versus-artifact readiness. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_09_EXPERIMENT.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_09_EXPERIMENT.md new file mode 100644 index 0000000..1849258 --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_09_EXPERIMENT.md @@ -0,0 +1,138 @@ +# Round 4 style research — qualitative experiment + +**Status:** `researching` (first-pass style memo; not manuscript prose or a freeze). **Owner:** experiment style lane; Frank retains authorship. External literature supplies style/context only and establishes no internal apparatus, result, artifact or priority. + +## 1. Question and bounded recommendation + +**Question.** How should a JFM-facing qualitative experiment move from apparatus to observation while preserving provenance and preventing computational evidence from becoming experimental validation? + +**Recommendation.** Use **purpose/boundary → apparatus, actuation and acquisition contract → named visual comparison → immediate measurement limit → next quantitative test**. A traceable image may support only a visible named-condition observation or bounded physical feasibility. It cannot inherit field, force, mechanism or validation language from computation. Omit media if provenance fails. Use a supplementary movie only when motion is essential and trial linkage is complete. + +## 2. Coverage ledger + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | Round-4 `00_MASTER_AGENT_PROMPT.md`, `00_QUALITY_GATE.md`, `00_GLOBAL_DECISION_LEDGER.md`, `README.md` | Claim, ownership and disposition controls | Read directly; not independently verified or artifact-audited. | +| `read` | Round-4 `00_DISPLAY_EQUATION_INVENTORY.md` | Gate-A experiment-display classification, ownership, dependencies and fallbacks | Read directly; inventory entry reconciled below; no panel, source media or artifact independently verified or audited. | +| `read` | Round-2 `05_REVISED_STRUCTURE_FREEZE.md`, `06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Experiment ceiling and section cadence | Full reports read; not independent verification. | +| `read` | Round-3 `09_EXPERIMENT_AUTHOR_INTERFACE.md`, `00_MODULE_INTERFACE_LEDGER.md`, `11_FINAL_CONSISTENCY_AUDIT.md` | Author ownership, provenance gate and fallback | Full reports read; internal experiment remains author-described and unaudited. | +| `read` | Four exact JFM papers listed in §3 | Closest qualitative visualization/control precedents | Targeted `full-PDF` paper-level read of metadata, apparatus, acquisition, visual results, captions and supplement practice; no data audit or replication. | +| `mapped` | Supplementary-movie records linked by Bhattacharyya et al. and Khan et al. | Motion-dependent reporting precedent | Identities and links mapped; movies not watched or artifact-audited. | +| `mapped` | Internal raw-media/provenance slots named by M09 | Defines possible gates | Located through M09 only; mapping establishes no fact. | +| `not-covered` | Exhaustive JFM facility literature; sentence coding of all captions; new experiment/image/force/PIV analysis | Outside bounded style task | No general frequency or internal claim inferred. | +| `external-inaccessible` | Hidden/unexposed internal media, trial logs, calibration, synchronization and permissions | Needed for panel/observation promotion | Provenance unresolved; no claim inferred. | + +All requested controls were read. `Read` is not independently verified; no literature data or internal artifact was audited. + +## 3. Exact literature identities + +1. **Soumarup Bhattacharyya, Izhar Hussain Khan, Shivam Verma, Sanjay Kumar & Kamal Poddar**, “Experimental investigation of three-dimensional modes in the wake of a rotationally oscillating cylinder”, *Journal of Fluid Mechanics* **950**, A10 (2022), DOI `10.1017/jfm.2022.792`, `full-PDF`. Closest single rotating-cylinder example: qualitative hydrogen-bubble/LIF, phase selection, separate PIV/hot-wire, validation and movies. +2. **Izhar Hussain Khan, Puja Sunil, Soumarup Bhattacharyya, Rahul Yadav, Kamal Poddar & Sanjay Kumar**, “Flow past two rotationally oscillating cylinders”, *Journal of Fluid Mechanics* **969**, A16 (2023), DOI `10.1017/jfm.2023.549`, `full-PDF`. Closest geometry/actuation family: visual-first sequence, distinct PIV/force acquisition and extensive movie use. +3. **Lukasz Klotz, Karol Bukowski & Konrad Gumowski**, “Influence of porous material on the flow behind a backward-facing step: experimental study”, *Journal of Fluid Mechanics* **998**, A31 (2024), DOI `10.1017/jfm.2024.639`, `full-PDF`. Explicitly qualitative dye entry followed by a separate quantitative PIV campaign. +4. **Yu Zhou, Dewei Fan, Bingfu Zhang, Ruiying Li & Bernd R. Noack**, “Artificial intelligence control of a turbulent jet”, *Journal of Fluid Mechanics* **897**, A27 (2020), DOI `10.1017/jfm.2020.392`, `full-PDF`. Machine-learning-control experiment in which facility/actuator/sensor provenance precedes performance and visualization remains subordinate to quantitative evidence. + +## 4. Observed JFM practice + +These are observations from this four-paper sample, not universal JFM rules. + +### Apparatus-to-observation sequence + +- Papers fix the question, then schematic/facility/geometry, actuation, acquisition, and only then observation. Hardware is organized by evidentiary function, not as a build inventory. +- Visualization has its own contract: tracer, illumination, camera/view, plane/field of view, sampling, phase/frame choice and processing. +- Comparator structure precedes interpretation. Khan et al. vary declared parameters while stating held conditions; Klotz et al. pair reference and modified cases. +- Different acquisitions are disclosed. Bhattacharyya et al. call PIV and visualization different realizations under the same conditions; Klotz et al. say visualization and PIV came from different runs. “Same conditions” is not treated as synchronized or paired evidence. + +### Provenance and qualitative wording + +- Provenance is distributed deliberately: methods carry facility/acquisition/processing; captions carry exact condition, view, phase/scaling and annotations. +- Intrusive or consequential choices are visible. Bhattacharyya et al. discuss visualization-wire placement and possible wake modification; Klotz et al. disclose dye delivery and background-intensity subtraction. +- Klotz et al. explicitly call dye panels qualitative and use `illustrate`. Visual prose names morphology—streaklines, rows, coherence, symmetry, deflection, repetition—under a condition, without automatically converting appearance into velocity or force. +- Stronger conclusions follow distinct diagnostics: image analysis, hot-wire, PIV, spectra or force. Strong words used in those papers are not transferable to a qualitative-only demonstration. + +### Quantitative-validation boundary + +- Adjacent visual and quantitative evidence remains acquisition-specific: camera, tracer, plane, run, phase and processing differences are stated. +- Visual observations organize subsequent measurements but do not substitute for them. +- Visual morphology becomes quantitative only after an estimator is defined. Bhattacharyya et al. specify sampled line, pixel intensity and spectral procedure, and note position dependencies. +- Quantitative uncertainty belongs to the relevant calibrated instrument/estimator, not retroactively to a dye image. + +### Captions, supplement and omission + +- Effective captions identify comparison variables and fixed conditions, view/plane, flow direction, phase/averaging state, scaling/extent and annotations. They distinguish visualization from PIV and instantaneous from averaged fields. +- Acquisition hardware and algorithms stay in Methods unless essential to reading a panel; comparator, condition, view and phase cannot be omitted from the caption. +- Bhattacharyya et al. and Khan et al. use movies for cycle evolution, repetition, alternation or coalescence that a still cannot establish. The interpretive sentence points to a named movie. +- Main figures select representative comparisons/maps rather than every condition. A movie supplements a traceable observation; it does not repair an unidentified still. +- Klotz et al. retain qualitative plates because they provide the visual entry to later PIV. Zhou et al. subordinate visualization when quantitative performance and fields already carry the argument. + +## 5. Project recommendation from observed practice + +### Paragraph jobs + +1. **Purpose/boundary:** why physical deployment is shown; explicitly qualitative and open-loop. Import no computational values or interpretation. +2. **Apparatus/acquisition:** facility/geometry, command/sign, trial/reference roles, camera/view/scale/timing, tracer and synchronization status. Avoid construction history and brands unless evidence-determining. +3. **Observation:** one comparator pair at a time; visible morphology, trial/media identity, frame-selection and repeat status. Use past tense and bounded verbs: `appeared`, `was visibly altered`, `a qualitative change was observed`. +4. **Limit/next test:** immediately state no quantitative field/force/PIV or closed-loop validation; name the acquisition needed to raise the ceiling. + +Two paragraphs may combine 1–2 and 3–4. A one-paragraph image anecdote is not ready. + +| Dimension | Recommendation | Safe fallback | +|---|---|---| +| Apparatus | Functional schematic or compact facility → actuation → acquisition prose | Omit schematic if it becomes a hardware diary. | +| Observation | One visual claim per named comparator; trial, view and selection rule local | Weakest wording or omission if repeat/selection is unknown. | +| Provenance | Bind raw file, trial, condition, timing/scale, processing, permission and repeats | Omit; never reconstruct from memory/derivative plots. | +| Wording | Morphology/appearance only; distinguish visible temporal change from measured frequency | No frequency without timing, extraction and uncertainty. | +| Quantitative boundary | Keep computational/experimental chains separate; no overlay/shared metric/validation without same-plant registration and uncertainty | Feasibility only. | +| Caption | Condition/role, view, frame/window, scale/calibration status, processing, trial and qualitative ceiling | Move extended provenance to supplement, not comparator/ceiling. | +| Supplement | Named movie only when motion matters; include provenance index | Omit unlinked movie. Supplement does not lower standards. | +| Omission | Keep media only if it changes the argument beyond hardware existence | Text-only, supplement-only or total omission. | + +**Imports:** fixed vocabulary and qualitative/open-loop/provenance-gated boundary only. **Experiment owns:** apparatus/media provenance, trial identity, observation, local confounds, panel gate and next measurement. **Exports:** one conditional feasibility statement and one decisive measurement boundary. **Delete here:** computational values, SR/CCD, field metrics and mechanistic synthesis. **Delete elsewhere:** apparatus checklist/provenance detail; conclusion keeps only the boundary. **Bridge:** deployment does not alter computational evidence; it identifies the next synchronized/calibrated/repeated test. + +## 6. Claim ceiling and near-collision audit + +**Green:** `qualitative`, `open-loop`, `author-described`, `provenance-gated`, `feasibility`; `selected media appear to show [visible morphology] under the named trial/comparator` after provenance passes. + +**Amber:** `is consistent with qualitative wake modification under the named condition`; `supports a bounded physical-deployability reading`; `motivates synchronized, calibrated and repeated measurement`. No computational mechanism or policy-validity import. + +**Red without new evidence:** `experimentally validates`, `confirms CFD`, field matching, force reduction, closed-loop control, policy validation, measured frequency from unaudited video, causation/mechanism, restoration, stability, optimality, robustness/generality, or quantitative efficacy/uncertainty from appearance. + +| Pair | Check | Classification / consequence | +|---|---|---| +| Dye/streakline image vs computational field | Different plant/acquisition; intensity/morphology is not velocity; no common roles, coordinates, mask, weighting or window | `different estimand`; no overlay, arithmetic, agreement, replication or validation. | +| Visible shedding change vs temporal metric | Timing, extraction, trial role and window unbound | `different estimand`; visible temporal change only, no frequency/DTW equivalence. | +| Open-loop physical actuation vs closed-loop computation | Commanded/realized motion, sensing and feedback differ | `related diagnostic` at most; no policy validation. | +| Apparatus schematic vs result image | Configuration documentation vs observation | `different estimand`; schematic never proves outcome. | + +## 7. Display contracts and readiness + +| Display | Owner/job/source | Caption ceiling | Status/fallback | +|---|---|---|---| +| Apparatus/signal schematic | Experiment; document facility, geometry, open-loop command/media path from author record | Context only; no calibration, accuracy or result | `author-supply-gated`; prose fallback. | +| Qualitative comparator plate | Experiment; candidate vehicle for one Frank-authored, named visible observation only after raw traceable minimally processed media pass the gate | Trial/comparator, view, timing/phase, scale, processing, repeats and qualitative ceiling; no field/force claim | `author-supply-gated`; currently no observation is promoted and no panel is ready. Frank may supply a provenance-passing bounded observation and panel; otherwise use a prose boundary or omit (supplement-only media remain equally gated). | +| Supplementary movie | Experiment; candidate support for temporal evolution that a still cannot establish | Qualitative motion only; trial/condition/timing identified; no measured frequency or repeatability claim without a declared estimator and audit | `author-supply-gated`; Frank-supplied provenance must pass before use; otherwise use a gated still, bounded prose, or omission. | +| Provenance index | Experiment/supplement; bind media and acquisition from Frank's records | Documentation, not efficacy and not an observation | `author-supply-gated`; Frank supplies the binding record; otherwise use only a bounded caption/data note for retained gated media, or omit media. | +| Force/PIV/registered-CFD panel | Not owned in qualitative pass | Requires independent quantitative contract | `blocked`; omit. | + +**Inventory reconciliation.** Round-4 `00_DISPLAY_EQUATION_INVENTORY.md` classifies the experiment display family as `author-supply-gated`: qualitative open-loop apparatus and candidate steady/Illusion dye media require Frank's conditions, action/sign, trial identity, raw media, scale/frame rate, processing, repeats and permissions. This memo does not treat the inventory wording as evidence that either dye observation exists or is publishable. The apparatus/signal schematic, comparator plate, supplementary movie and provenance index therefore remain `author-supply-gated`; the force/PIV/registered-CFD panel is `blocked`. Each row above states its prose or omission fallback. Frank retains authorship of any apparatus account, observation and media selection. The only ceiling is qualitative, open-loop and provenance-gated; no observation is promoted here and no display provides quantitative validation. + +No experiment equation is recommended; introducing one here would imply an unsupported quantitative experimental estimand. Any quantitative experiment equation or main-text results table is `blocked` absent a separately authorized, calibrated estimator and evidence contract, with prose/omission as fallback. Text-interface readiness does not imply any panel, movie, permission or caption is artifact-ready. + +## 8. Anti-patterns + +Hardware diary; aesthetic image without trial/comparator/selection provenance; “with/without control” caption lacking condition/view/timing; dye as velocity/vorticity/force; unregistered CFD overlay; “same conditions” as simultaneous; unlinked movie as proof; quantitative verbs without estimator/uncertainty; single-cause background attribution without controls; open-loop playback as policy validation; limitation delayed to conclusion; supplement used to relax provenance; retaining an untraceable panel merely to lengthen the section. + +## 9. Decisions, deferrals and blockers + +**Evidence-governed:** qualitative/open-loop/provenance-gated ceiling; no quantitative or causal ownership; missing provenance blocks panel promotion, not this style interface. + +**Author choices:** (1) retain subsection only if provenance supports a named observation, otherwise a brief limit/outlook sentence; (2) main-text still, movie or no media—safe default omit; (3) schematic only if more efficient than prose—safe default prose; (4) Frank supplies exact observation after raw-media review—safe default no sentence yet. + +No control conflict was found. External papers often move from visualization to PIV/force/spectra; only their reporting discipline transfers when those measurements are absent. Raw-media, apparatus, synchronization, calibration, repeatability and permission audits are deferred to author supply. + +**Blockers to media/observation:** missing raw identity, trial/comparator, condition, view/timing/scale, processing, selection/repeats or permission. **Blocker to quantitative wording:** no synchronized calibrated force/PIV or declared image estimator with uncertainty. These do not block the style memo. + +## 10. Disposition and validation + +**Disposition:** `researching`. Recommendation is decision-ready, but a first pass cannot self-freeze. Coordinator second audit is required; all candidate qualitative experiment displays remain `author-supply-gated`, while the quantitative force/PIV/registered-CFD panel remains `blocked`. + +Validated: exact requested output only; required R4/R2/R3 controls and Round-4 `00_DISPLAY_EQUATION_INVENTORY.md` read; every experiment display reconciled as `author-supply-gated` or `blocked` with prose/omission fallback; Frank authorship preserved; qualitative open-loop provenance-gated ceiling preserved; no observation promoted; four close JFM full-PDF records retain exact identities/DOIs/read levels; observed practice remains separated from recommendation; no internal numbers, artifacts, quantitative validation or new scientific claims; text/artifact readiness remains separate. diff --git a/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_10_DISCUSSION_CONCLUSION.md b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_10_DISCUSSION_CONCLUSION.md new file mode 100644 index 0000000..5c1274d --- /dev/null +++ b/docs/JFM_WYQ/ROUND4_TOP_DOWN/STYLE_10_DISCUSSION_CONCLUSION.md @@ -0,0 +1,274 @@ +# Round 4 style research — Discussion and Conclusion + +**Role.** Section-style research memo for the Discussion/Conclusion unit. This is not manuscript prose, scientific evidence, or a section freeze. External papers establish rhetorical practice only; repository controls set the project's evidence and claim boundaries. + +**Disposition:** `researching` — the required style pass is complete, but a first-pass style agent cannot self-freeze the later section contract. + +## 1. Scope, question, and bounded recommendation + +**Question.** How should the final Discussion and Conclusion be separated and paced so that synthesis follows evidence order, limitations remain local and visible, future work names decisive claim-changing tests, and the closing cadence does not exceed the fixed claim ceiling? + +**Bounded recommendation.** Use a distinct integrated Discussion followed by a short Conclusion. The Discussion should synthesize in the same order in which the evidence earns progressively narrower inferences, distinguish compatible observations from same-estimand evidence, place each dangerous limitation beside the inference it limits, and end with a small set of tests tied explicitly to unresolved links. The Conclusion should answer the paper question in three compact moves—named capability, bounded evaluation/interpretation, strongest boundary plus decisive next test—without replaying methods, values, citations, equations, or panel descriptions. + +This recommendation is evidence-governed rather than an author-style choice because the fixed ownership map assigns integrated answer, limits, and decisive tests to this unit while prohibiting new evidence. The only later author choice is whether an optional synthesis aid improves comprehension enough to justify space; the safe default is a compact limitations table and no new summary figure. + +## 2. Coverage ledger + +| Status | Source/input | Why in scope | Evidence state/reason | +|---|---|---|---| +| `read` | `ROUND4_TOP_DOWN/README.md` | Round-4 purpose, phases, status semantics, controlling-input order | Read directly; not independently verified or artifact-audited | +| `read` | `ROUND4_TOP_DOWN/00_MASTER_AGENT_PROMPT.md` | Required method, fixed claim ladder/cautions, deliverable contract | Read directly; not independently verified or artifact-audited | +| `read` | `ROUND4_TOP_DOWN/00_QUALITY_GATE.md` | Style PASS/BLOCK criteria and first-pass no-self-freeze rule | Read directly; not independently verified or artifact-audited | +| `read` | `ROUND4_TOP_DOWN/00_GLOBAL_DECISION_LEDGER.md` | Conclusion ownership, duplicate limits, claim ceiling, open choices | Read directly; not independently verified or artifact-audited | +| `read` | `ROUND4_TOP_DOWN/00_DISPLAY_EQUATION_INVENTORY.md` | Conclusion display/equation ownership and readiness distinctions | Read directly; inventory is not panel evidence; no artifact audit | +| `read` | `ROUND2_TOP_DOWN/05_REVISED_STRUCTURE_FREEZE.md` | Author-ratified paper identity, order, scope and section-space boundary | Read directly as controlling full report; not independently verified or artifact-audited | +| `read` | `ROUND2_TOP_DOWN/06_SECTION_LEVEL_JFM_STYLE_GUIDE.md` | Prior ten-paper style synthesis and Discussion/Conclusion contract | Read directly as full report; its literature read levels were checked against the four PDFs below, not universally re-audited | +| `read` | `ROUND3_BOTTOM_UP/10_LIMITATIONS_CONCLUSION.md` | Closest section dossier: evidence order, limits, tests, interfaces and display proposals | Read directly as full report; project claims were not recomputed and artifacts were not audited | +| `read` | `ROUND3_BOTTOM_UP/00_MODULE_INTERFACE_LEDGER.md` | Import/export readiness and conclusion dependency chain | Read directly; readiness is dossier readiness, not manuscript or artifact approval | +| `read` | `ROUND3_BOTTOM_UP/11_FINAL_CONSISTENCY_AUDIT.md` | Final ownership, duplication, near-collision and panel gates | Read directly; audit findings not independently recomputed | +| `read` | N. Deng, B. R. Noack, M. Morzyński & L. R. Pastur, “Low-order model for successive bifurcations of the fluidic pinball”, *Journal of Fluid Mechanics* **884**, A37 (2020), DOI `10.1017/jfm.2019.959` | Closest pinball paper; final phenomenogram and combined conclusion/outlook architecture | `full-PDF`; PDF available and final sections read directly through Undermind; rhetorical reading, not equation/result verification | +| `read` | G. Y. Cornejo Maceda, Yiqing Li, François Lusseyran, Marek Morzyński & Bernd R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control”, *Journal of Fluid Mechanics* **917**, A42 (2021), DOI `10.1017/jfm.2021.301` | Closest pinball-control paper; explicit Discussion/Conclusion split and closing synthesis displays | `full-PDF`; PDF available and final sections read directly through Undermind; rhetorical reading, not result verification | +| `read` | Ji-chao Li & Mengqi Zhang, “Reinforcement-learning-based control of confined cylinder wakes with stability analyses”, *Journal of Fluid Mechanics* **932**, A44 (2022), DOI `10.1017/jfm.2021.1045` | Physics/control integration, distributed discussion, explicit limits and outlook | `full-PDF`; PDF available and final sections read directly through Undermind; rhetorical reading, not result verification | +| `read` | Jean Rabault, Miroslav Kuchta, Atle Jensen, Ulysse Réglade & Nicolas Cerardi, “Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control”, *Journal of Fluid Mechanics* **865**, 281–302 (2019), DOI `10.1017/jfm.2019.62` | Compact control paper with interpretation before a short textual Conclusion | `full-PDF`; PDF available and final sections read directly through Undermind; rhetorical reading, not result verification | +| `mapped` | Remaining six exact JFM papers in the Round-2 style guide and `JFM/`, `JFM References/` indexes | Broader precedent already synthesized by the controlling style report | Identity and prior read level mapped only in this lane; PDFs not re-read here, so no new practice claim depends on them | +| `mapped` | R3 Modules 03–09 and authority/manifests referenced by M10 | Underlying owners imported by the final synthesis | Located through M10/interface/audit; not re-read as section evidence in this style-only lane | +| `not-covered` | New CFD, training, SR/CCD analysis, field arrays, masks, hashes, experiment media and new figures | Outside style research; literature cannot establish internal results | No claim inferred; no independent verification or artifact audit attempted | +| `not-covered` | Exhaustive sentence coding across JFM or a new broad literature search | Four closest full PDFs plus the controlling ten-paper report are sufficient for this bounded rhetorical question | No universality claim about all JFM practice | +| `external-inaccessible` | Hidden/external project artifacts and provenance-gated experiment media named by R3 | Not needed to determine closing-section style; required only if later prose retains dependent claims/panels | Explicitly deferred; no artifact readiness inferred | + +## 3. Observed JFM practice + +The observations below are sample-bounded. They describe these four papers, not a universal JFM rule. + +### 3.1 Discussion/Conclusion separation + +- **Deng et al.** use one final top-level section, “Conclusions and outlooks”, subdivided into concluding discussion and outlook. The architecture separates synthesis from prospective work without creating independent top-level Discussion and Conclusion sections. +- **Cornejo Maceda et al.** explicitly separate a thematic Discussion from a continuous Conclusions section. Discussion moves through feedback, sensitivity/complexity and applicability; Conclusions compress the study through the hierarchy of control-law spaces. +- **Li & Zhang** use no separate Discussion section. Interpretation is distributed through results, and a dedicated Conclusions section mirrors the paper's two main evidence blocks before moving to limits and outlook. +- **Rabault et al.** place the physical reading in the last results subsection, then use a compact Conclusion for achievement, constraint and prospective extension. + +**Observed pattern.** Structural labels vary, but interpretive work is done before the final closing paragraph. A distinct Discussion is most useful when several non-equivalent evidence streams must be integrated; a short Conclusion works when local interpretation and caveats have already been earned upstream. + +### 3.2 Evidence-order synthesis + +- Deng et al. move from the physical sequence to the low-order representation, then broaden to model extensions; the phenomenogram compresses the physical chronology into a final visual argument. +- Cornejo Maceda et al. synthesize by increasing control-space complexity and then distil methodological consequences; their conclusion follows the hierarchy established by the results rather than listing sections. +- Li & Zhang preserve the order physics/stability analysis → learned-control findings → coupled methodological implications. +- Rabault et al. move from named achievement → physical strategy → practical constraint → broader prospective use. + +**Observed pattern.** Final synthesis normally follows the inferential order already established in the body. It does not start with the most speculative physical reading and work backward to evidence. Where multiple layers exist, the closing section steps from capability or baseline result toward interpretation and only then toward general implications. + +### 3.3 Limitations and future decisive tests + +- All four papers place important limitations before or within the final synthesis rather than saving every caveat for the last sentence. +- Deng et al. pair model success with missing-detail and fixed-mode limits, then name higher-dimensional or data-driven model extensions. +- Cornejo Maceda et al. distribute limits by theme and place prospective algorithm/robustness directions at discussion transitions and the conclusion end. +- Li & Zhang explicitly call parts of the design crude or situation-dependent and propose targeted changes to reward and probe-placement logic. +- Rabault et al. identify regularization/control constraints before proposing higher-fidelity simulation, experiment and transfer-learning routes. + +**Observed pattern.** Effective outlooks are attached to an identified unresolved link. The strongest examples say what design or evidence would test that link; weaker closing cadence drifts into broad invitations without an explicit decision criterion. + +### 3.4 Claim ceiling and verbal strength + +- The sample often uses confident local verbs for tested achievements while bounding scope by plant, parameter range, dimensionality or model fidelity. +- Deng et al. combine a strong model characterization with explicit loss of detail in harder regimes. +- Cornejo Maceda et al. make operational/methodological claims but stop short of presenting a universal turbulent-flow solution. +- Li & Zhang qualify transfer and real-world relevance as prospective and retain tested-condition bounds. +- Rabault et al. frame the contribution as a proof of concept and a route to a class of methods, not completed general applicability. + +**Observed pattern.** Strong nouns such as robustness, stability, optimality or generality are credible only when a dedicated test supports them. A final section may broaden significance, but its grammatical scope must remain narrower than or equal to the actual test design. + +### 3.5 Figure/table use in final synthesis + +- Deng et al. use a late phenomenogram as an integrative visual that reorganizes the evidence rather than introducing a new result. +- Cornejo Maceda et al. use late summary displays—a performance/search-space synthesis and a hierarchy schematic—as part of the closing argument. +- Li & Zhang and Rabault et al. introduce no new final-section displays; they rely on earlier figures or textual synthesis. + +**Observed pattern.** A closing display is optional, not conventional by default. It earns space when it performs genuine integration across a physical chronology or hierarchy. It fails when it merely repeats prior panels, suggests causal links not tested, or converts unlike metrics into a visual ranking. + +### 3.6 Final bridge and closing cadence + +- Deng et al. bridge from model-specific limitations to alternative state spaces and identification methods, ending prospectively. +- Cornejo Maceda et al. move from the method hierarchy back to the fluidic pinball as a tractable benchmark for future development. +- Li & Zhang move from local physics-informed simplification to broader coupling between fluid mechanics and learning control. +- Rabault et al. move from proof-of-concept constraints to higher-fidelity simulation, experiment and complex actuation. + +**Observed pattern.** The closing cadence typically has three beats: bounded result → unresolved boundary → prospective route or broader significance. The strongest ending returns to the paper's physical object or governing question; generic “more work is needed” language is less decisive. + +## 4. Project recommendation + +### 4.1 Separation and local function + +Use two labelled units within the final manuscript section: + +1. **Discussion** — four functional paragraphs that integrate evidence, classify non-equivalent support, state the envelope, and define decisive tests. +2. **Conclusion** — three short paragraphs that answer the question once, state the ceiling once, and close on one claim-changing test plus the declared meaning of cloaking/illusion. + +Trade-off: a combined “Conclusions and outlook” section would be shorter and has JFM precedent, but it would make this paper's several chains and estimands easier to collapse rhetorically. A separate Discussion provides room for boundary-aware synthesis; the short Conclusion prevents that room from becoming a second Results section. + +### 4.2 Discussion paragraph jobs + +1. **Re-establish the evidence ladder.** Begin with named capability under distinct task contracts, then narrow to the sole independently evaluated deep case. Import definitions only; do not replay values, acquisition details or panel narration. Job: establish that breadth and depth have different evidence ceilings. +2. **Assemble the bounded interpretation.** Move from executable action-law evidence to mean/dynamic field organization in their declared order. Classify links explicitly as non-equivalent but compatible observations where appropriate. Job: show why a control-skeleton reading is supportable without calling it causal, unique or independently triangulated. +3. **Define the envelope.** Group limitations by the inference they constrain: cross-task transfer, chain continuity, metric equivalence, theory closure and experimental status. Put the most dangerous qualification immediately after the affected synthesis sentence. Job: prevent the final Conclusion from carrying caveats that appeared nowhere earlier. +4. **Name decisive tests.** Select only tests that would resolve an explicit open link: matched interventions/roles, independent parents where required, same-plant or same-chain comparisons, closed budgets, and synchronized calibrated measurements. State which ceiling each test could raise. Job: turn outlook into falsifiable research design rather than a wish list. + +Local cadence for each Discussion paragraph: + +`bounded synthesis → evidence relationship → strongest alternative/limit → consequence for the next inference` + +### 4.3 Conclusion paragraph jobs + +1. **Question and scope.** Restate the physical question and named scope without a method list. Answer first at capability level, then identify where stronger field evaluation exists. No citations, values or figure calls. +2. **Strongest integrated answer.** State the bounded deep-case interpretation in evidence order. Use one concise reminder that the contributing analyses have distinct estimands and do not constitute causal or independent confirmation. +3. **Ceiling and closing bridge.** State the strongest surviving boundary and one integrated testing programme capable of raising it. Close by returning from the test to cloaking/illusion as matching to declared references, not universal invisibility or transfer. + +Recommended final cadence: + +`what was established → exactly where it holds → what remains unresolved → what observation/intervention would decide it → return to the physical question` + +Do not end on a package, algorithm name, generic application list, or unqualified promise. + +### 4.4 Evidence density, tense, and transitions + +- **Discussion:** one evidence relationship per paragraph; source details stay with owning result sections. Use present tense for the inference and boundary, past for work performed, and conditional/future for proposed tests. +- **Conclusion:** no new scientific detail. Use present tense for the bounded answer and conditional/future once for the decisive test. +- Bridge from experiment to Discussion by separating qualitative deployability from quantitative/causal evidence. +- Bridge from Discussion to Conclusion only after the envelope and tests are explicit; the Conclusion should feel like compression, not repair. +- The final sentence should close the conceptual loop, not announce an undefined research horizon. + +## 5. Ownership, imports, exports, and duplication deletions + +### Imports + +- From Introduction: exact three-level claim ladder and declared meanings of hydrodynamic cloaking/illusion. +- From contracts: chain, role, comparator, metric/estimand, ROI/window and Legacy/V5 distinctions, imported only as short boundary phrases. +- From capability and cross-case owners: named task capability and the non-transfer envelope. +- From Kármán performance: sole detailed owner of independent field-matching evidence; Discussion imports only its result-level meaning. +- From SR: executable-law and bounded-deletion ceiling, without formula or term-by-term replay. +- From field/CCD: mean/dynamic organization, different-estimand boundary and exact noncausal terminology, without mode or operator detail. +- From steady/theory: contextual recurrence/sign/failure boundary, without cross-chain amplitude comparison. +- From experiment: qualitative, open-loop and provenance-gated status only; apparatus/provenance details remain with that section. + +### Owned exports + +- One integrated answer in the fixed order: named capability → deep-case independent field evaluation → bounded action/field interpretation. +- One integrated envelope covering non-transfer, non-causality, non-equivalence, theory incompleteness and qualitative experiment status. +- A prioritized set of decisive tests, each tied to an unresolved inferential link. +- A closing bridge back to the concept as declared-reference matching. + +### Duplication deletions + +- Delete detailed values, ROI/window definitions and metric formulas already owned by the performance/contracts sections. +- Delete the SR formula, coefficient list, deletion ledger and CCD mode/operator details. +- Keep the full near-collision technical comparison with its owning field/interface material; retain only the classification `different estimand` here. +- Do not repeat the cross-case case-by-case inventory; summarize only the asymmetric envelope. +- Do not repeat the experiment provenance checklist; retain only its qualitative/open-loop/provenance gate. +- State the full three-level ladder once in the Introduction and restate it once here in compressed evidence order; remove intermediate package-list versions. + +**Opening dependency:** the experiment section must already have separated deployability from validation and resolved whether any author-supplied material passed provenance gates. + +**Closing bridge:** from bounded computational interpretation and qualitative deployment to the exact intervention/measurement programme required for a higher ceiling, then back to declared-reference matching. + +**Terminology ownership:** this unit may synthesize `control skeleton` and `action-correlated correction-field modes`, but may not redefine them or introduce synonyms implying mechanism, response, authority, uniqueness or transfer. + +## 6. Claim ceiling and near-collision audit + +### Green + +- The Conclusion may state the three fixed levels in compressed evidence order: named cross-task capability under distinct contracts; independent field matching only for the named Legacy Kármán deep case; and a bounded Legacy Kármán/cloak-only control-skeleton interpretation. +- It may state that a tested persistent action component ranks above smaller tested corrections and that the residual field organization is action-correlated, provided detail remains with its owner. + +### Amber + +- `supports`, `is compatible with`, `organizes`, `accounts for the measured difference`, `provides context`, and `motivates a bounded control-skeleton interpretation` are allowed only with the relevant chain/estimand boundary adjacent. +- Steady evidence may provide separate-chain context for recurrence/sign; it cannot become proof of the periodic interpretation. + +### Prohibited red without new authority and dedicated tests + +`causes`, `mechanism`, `necessary`, `sufficient`, `unique`, `optimal`, `stable`, `robust`, `general`, `universal`, `transferable`, `restores momentum`, `independently validates`, `triangulates`, `experimentally validates`, or any implication that Illusion SR is positive, OID carries a result, theory closes finite-Re physics, or qualitative media establish quantitative matching. + +### Near-collision findings + +| Pair | Acquisition/roles/chain/ROI-mask-weight-window finding | Classification | Discussion/Conclusion instruction | +|---|---|---|---| +| Standardized PPO performance mean and corrected four-role CCD mean | Distinct role acquisitions and role sets; different retained windows, masks and weighting/normalization contracts | `different estimand` | No arithmetic, agreement, replication, validation or triangulation wording; mention classification once | +| SR action magnitude and V5 steady endpoint | Separate Legacy periodic and V5 steady chains, different action/metric contracts and evaluation semantics | `related diagnostic` | Context only; no amplitude agreement, continuation or same-law inference | +| Periodic field L2 and DTW | Spatial registered-field and signal-alignment diagnostics with different objects and semantics | `related diagnostic` | L2 carries field matching; DTW remains complementary and case-specific | +| Cross-case periodic, event-relative and steady evaluations | Different temporal coordinates, references, roles and windows | `different estimand` | No pooled breadth score or common efficacy ranking | + +No pair above is licensed as `same estimand` by the controlling inputs. + +## 7. Figure, table, and equation contracts + +| Item | Owner and argumentative job | Source/roles and caption ceiling | Readiness | Fallback | +|---|---|---|---|---| +| Compact limitations table | Conclusion; align each claim level with chain/task, evidence type, strongest non-claim and decisive test | Text contracts imported from R3 owners; caption may say it summarizes boundaries, not new results or negative findings | `required`; text-ready, formatting/placement not production-ready; no underlying artifact audit implied | Integrate the same four fields into Discussion paragraph 3–4 if space forces omission | +| Integrated evidence map | Conclusion; visualize evidence order and distinguish same-chain arrows from contextual/non-equivalent links | Only authority-bound labels; dashed/context links must not imply causality, closure, validation or pooled metrics | `optional`; text concept ready, panel not created or artifact-audited | Omit; use the Discussion sequence and limitations table | +| Reuse of earlier figures | Earlier result owners; only if a brief backward reference materially anchors synthesis | Retain original source, roles, caption ceilings and readiness; Conclusion adds no reinterpretive panel labels | `optional`; depends on each owning panel's readiness | Refer generically to the evidence class or omit figure call | +| New scientific equation | None; no argumentative need in final synthesis | Not applicable | `blocked` by section ownership; Conclusion introduces no equation | Use fixed terms in prose | +| New numerical result figure | None; would constitute new/replayed evidence | Not applicable | `blocked` | No replacement needed | + +A late summary display is recommended only if it reorganizes relationships that prose cannot show compactly. The safe default is the limitations table without an evidence map. Text readiness does not imply any panel or production readiness. + +## 8. Author decisions, conflicts, deferrals, and blockers + +### Evidence-governed decisions + +- Separate Discussion and Conclusion because the paper must integrate several non-equivalent chains/estimands before compressing its answer. +- Preserve evidence order rather than manuscript-section inventory order. +- Put limitations beside their corresponding synthesis claims; do not use the Conclusion to repair prior overstatement. +- Allow no new number, citation, equation, scientific result or panel narration in the Conclusion. +- Tie every future test to the exact claim ceiling it could change. + +### Author choice + +- **Optional integrated evidence map.** Recommendation: omit unless a draft proves that dashed/non-equivalent links are immediately legible and the map replaces rather than duplicates prose. Consequence of inclusion: consumes space and creates a high risk of causal or pooled reading. Safe default: retain only the compact limitations table. Status remains `discuss` until the author/coordinator decides during display compression. + +### Conflicts resolved + +- The four-paper sample does not prescribe one universal section label: both split and combined architectures occur. Project complexity, not frequency in the sample, supports the split recommendation. +- Late synthesis figures have JFM precedent, but two of four closest papers close without them. Therefore an evidence map is optional, not required by style. +- Broad future-facing closing sentences occur in the sample, but this project's fixed ceiling requires narrower, claim-linked decisive tests. + +### Deferrals and blockers + +- No style blocker remains: four closest JFM PDFs were available and read at full-PDF level, and all controlling reports were read. +- The optional evidence map is panel-production deferred and nonblocking. +- The experiment's final author-supplied prose/media and provenance remain externally gated; this does not block the style contract but affects which experiment boundary the later final section may state. +- Any retained statement that depends on hidden project artifacts remains authority-led and artifact-audit deferred; this memo does not raise or verify those claims. + +## 9. Anti-patterns and validation checklist + +### Anti-patterns + +- Abstract replay or one bullet/paragraph per manuscript section. +- Opening Discussion with the control-skeleton interpretation before capability and independent evaluation have been restated. +- Treating compatible observations as independent proof or collapsing different estimands into “agreement”. +- Introducing a limitation for the first time in the final Conclusion. +- Converting every limitation into future work without identifying a decisive observable, intervention or decision criterion. +- Replaying values, equations, formulae, ROI/window details, mode galleries or captions. +- Using a summary figure as a causal graph, pooled score or metric hierarchy across incompatible contracts. +- Ending with unsupported applications, generic “opens new avenues”, or universal claims. +- Allowing qualitative experiment language to inherit computational evaluation or validation wording. +- Renaming action-correlated correction-field modes for variety or using mechanism/response/control-authority synonyms. + +### Validation checklist for the later section contract + +- [ ] Discussion and Conclusion have distinct jobs and no duplicate paragraph. +- [ ] Synthesis follows capability → independent evaluation → bounded interpretation → envelope → decisive tests. +- [ ] Every imported inference remains within its owning section's ceiling. +- [ ] Different-estimand and related-diagnostic pairs are classified, not blended. +- [ ] The strongest local limitation is adjacent to the claim it constrains. +- [ ] Future tests name the unresolved link and the ceiling they could raise. +- [ ] Conclusion contains no new number, citation, equation, result, figure narration or artifact claim. +- [ ] Any limitations table or map states owner, job, source, readiness, caption ceiling and fallback. +- [ ] Text readiness remains separate from panel/artifact readiness. +- [ ] The final sentence returns to the physical question under declared-reference matching. +- [ ] A coordinator second audit occurs before `frozen`; this first-pass memo remains `researching`. + +## 10. Validation result + +**Style gate: PASS.** Exact identities, DOIs and read levels are recorded; four closest JFM full PDFs and the required repository controls were read; observed practice is separated from recommendation; the memo covers separation, evidence order, limitations, decisive tests, claim ceiling, displays, cadence, ownership, near-collisions, anti-patterns and coverage states. No manuscript prose, project result value, new scientific claim, new figure, equation, CFD/training/analysis, or artifact-readiness assertion was created. + +**Round-4 disposition: `researching`.** This is a completed first-pass style memo awaiting coordinator use and second audit; it is not a frozen section contract. diff --git a/docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md b/docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md new file mode 100644 index 0000000..70276b2 --- /dev/null +++ b/docs/JFM_WYQ/WAKE_L2_AND_SENSOR_PLACEMENT_RESEARCH_NOTES.md @@ -0,0 +1,595 @@ +# Wake-field L2 evaluation and downstream sensor placement + +## Comprehensive research and implementation notes for JFM writing + +**Status:** working research record, not polished manuscript prose +**Scope:** `src/drl_pinball` wake-field evaluation, region-of-interest definition, phase treatment, downstream sensor geometry, literature support, claim boundaries, and possible validation work +**Implementation authority:** `src/drl_pinball/eval/wake_l2.py` and the acquisition code that writes `phase_fields.npz` +**Current data authority:** `src/drl_pinball/data/reproduction/wake_l2_summary.json` +**Last reconciled with code:** 9 August 2026 + +This document deliberately records more detail than should appear in the final paper. It is intended to prevent later agents from reconstructing the rationale from scattered conversations or accidentally describing an earlier, unimplemented evaluation proposal as the current method. + +--- + +## 1. Executive decisions + +1. **Sensor-based DTW and full-field L2 have different roles.** The six downstream velocity signals and their multichannel DTW provide a compact, computationally affordable training objective and a local wake-signature diagnostic. Full-field velocity L2 is the independent final evaluation of whether the controlled downstream field actually approaches the target field. A low sensor DTW alone is not evidence of global field equivalence. + +2. **The registered wake-field region is fixed in body-scaled coordinates relative to the sensor plane:** + + \[ + \Omega=\left\{(x,y):-6\leq\frac{x-x_s}{D}\leq14, + \quad \left|\frac{y-y_0}{D}\right|\leq5\right\}. + \] + + Here, \(D=20\) lattice cells is the common cylinder diameter, \(x_s\) is the downstream sensor plane and \(y_0\) is the channel centreline. The rectangle is \(20D\) long and \(10D\) high. + +3. **The current primary periodic-field metric is the error between complete-cycle mean fields.** It is not the mean of eight phase snapshots. + +4. **The current phase-resolved metric, `E_phase8`, is an eight-slot nearest-snapshot diagnostic.** Target, controlled and zero trajectories are phased independently from their own centre-probe transverse-velocity signal. It is not a repeated-crossing phase-conditioned ensemble and does not use unrestricted global phase minimization. + +5. **The sensor plane at \(x/D=10\) is defensible as a downstream signature-monitoring plane, not as a mathematically optimal feedback location.** Direct experimental fluidic-pinball precedent exists at exactly \(x/D=10\) [Raibaudo2020]. The literature and current task do not justify claiming universal optimality or full-state observability. + +6. **No dedicated new CFD campaign is required merely to show that \(10D\) is reasonable.** If project-specific corroboration is requested, a light virtual-plane robustness study at \(x/D=8,9,10,11,12\) using existing or ordinary evaluation fields is sufficient. Policy retraining is unnecessary. + +--- + +## 2. Scientific question and metric separation + +The control tasks are hydrodynamic stealth/cloaking and hydrodynamic illusion for a fluidic pinball. A DRL policy rotates three cylinders using observations containing cylinder-force information and three downstream area-averaged velocity probes. The downstream probes return both velocity components, producing six sensor channels. Training compares the sensor histories with a target history through multichannel dynamic time warping (DTW). + +This design creates two related but non-equivalent questions: + +- **Training/control question:** can a compact downstream signature guide the policy toward the desired wake dynamics at affordable computational cost? +- **Evaluation question:** does the resulting controlled velocity field match the target over a spatially extended downstream region? + +DTW is appropriate for the first question because it is low-dimensional, retains temporal ordering and tolerates modest temporal stretching. It is not sufficient for the second question. Six channels can agree while differences remain between or outside the probes, and DTW can partially accommodate timing differences that should remain visible in a physical evaluation. Conversely, a full-field L2 reward at every DRL interaction would be expensive and would require a target-field phase convention during training. The project therefore uses a deliberate division of labour: + +> Sensor DTW is the efficient learning signal and local signature metric; spatial velocity-field L2 is the independent downstream validation metric. + +This separation is also methodologically conservative. Sparse pinball probes can carry substantial information about periodic shedding and controlled states [CornejoMaceda2021, Li2022, Marra2024], but sparse sensing should not be presented as proof of full-field equivalence. The full-field metric directly tests the claim that the wake itself has been cloaked or transformed. + +--- + +## 3. Coordinate registration and common geometry + +### 3.1 Definitions + +- \(D\): one cylinder diameter; in the current common lattice convention, \(D=20\) cells. +- \(x_s\): streamwise coordinate of the three-probe sensor plane. +- \(y_0\): channel centreline, implemented as \((N_y-1)/2\). +- “signature source”: the reference body/location relative to which the sensors are placed. Across the Karman and Illusion constructions, the important invariant is that the sensor plane is approximately \(10D\) downstream of the pinball-front or target-cylinder centre used by the scene construction. + +The analysis uses coordinates registered to \((x_s,y_0)\), not raw absolute lattice positions. This permits one protocol across translated Karman and Illusion scenes and across Legacy and V5 domains. + +### 3.2 Current geometry values in the evaluator + +The offline evaluator currently registers the sensor plane and a conservative downstream solid extent as follows: + +- V5 Karman cases: \(x_s=1200\), conservative solid extent \(x=1036\). +- V5 Illusion cases: \(x_s=600\), conservative solid extent \(x=440\). +- Legacy Karman cases: \(x_s=800\), conservative solid extent \(x=636\). +- Legacy Illusion cases: \(x_s=600\), conservative solid extent \(x=440\). + +These values are implementation geometry, not universal physical constants. Their purpose is to map the same nondimensional region into each saved field. + +--- + +## 4. Region of interest + +### 4.1 Final registered rectangle + +The final ROI is + +\[ +-6 \leq \frac{x-x_s}{D} \leq 14, +\qquad +-5 \leq \frac{y-y_0}{D} \leq 5. +\] + +Equivalently, + +\[ +x\in[x_s-6D,x_s+14D],\qquad y\in[y_0-5D,y_0+5D]. +\] + +It spans \(20D\) in the streamwise direction and \(10D\) in the transverse direction. Since the sensor plane lies approximately \(10D\) downstream of the source centre, the upstream ROI boundary lies approximately \(4D\) downstream of that centre. Thus, the ROI approaches the developed near/far-wake transition without extending back onto the pinball or target body. + +The earlier candidate \([-8D,12D]\) had the same total streamwise length but began too close to the pinball. The revised \([-6D,14D]\) choice shifts the window downstream by \(2D\), improving geometric clearance while retaining the same area and adding downstream wake coverage. Any older note that treats \([-8D,12D]\) as authoritative is superseded. + +### 4.2 Why a rectangle + +A fixed rectangle is preferred over a data-dependent wake mask for the following reasons: + +1. **Pre-registration:** the region is defined before examining controlled performance. +2. **Reproducibility:** all roles and cases use the same dimensionless geometry. +3. **No outcome-dependent threshold:** a vorticity, velocity-deficit or turbulence-intensity threshold would change with control success and could remove precisely the differences being evaluated. +4. **Compatibility:** the same construction can be applied to Legacy and V5 fields despite different total domain sizes and translations. +5. **Interpretability:** the metric represents an area-RMS discrepancy over a clearly described downstream box. + +The rectangle is not claimed to be the unique optimal evaluation region. It is a conservative, common and auditable region designed to answer the paper's physical question without introducing a new mask-optimization problem. + +### 4.3 Inclusive lattice implementation + +For an array with shape \((N_y,N_x)\), the evaluator uses inclusive cell bounds + +\[ + i_{x,0}=\lceil x_s-6D\rceil,\quad + i_{x,1}=\lfloor x_s+14D\rfloor, +\] + +\[ + i_{y,0}=\lceil y_0-5D\rceil,\quad + i_{y,1}=\lfloor y_0+5D\rfloor. +\] + +Python slices then use the stop index plus one. The evaluator fails if the ROI leaves the saved grid or if its upstream boundary is not strictly downstream of the conservative solid extent. + +### 4.4 Solid-mask status and precise claim boundary + +The conceptual ideal is to integrate over a common fluid mask, i.e. the intersection of valid fluid cells in target, controlled and zero fields. The current saved reproduction artifacts do **not** persist solver-exact body masks. The implemented metric therefore uses a geometric guard: every included scenario has an upstream ROI boundary strictly downstream of its conservative solid extent, so known body cells are not expected inside the ROI. + +The correct description is: + +> The present calculation is a geometry-guarded downstream ROI metric. It is not a solver-mask-proven exact common-fluid metric because solver-exact masks were not persisted. + +Zero velocity must never be used to infer a solid mask: legitimate fluid cells can have zero or near-zero velocity. If future acquisitions persist exact masks, the evaluator can use the target/controlled common-fluid intersection; this would strengthen provenance but should not materially change the present downstream ROI if the geometry guard is correct. + +### 4.5 Why not normalize by the target-field norm + +A conventional relative field error, + +\[ +\frac{\|\mathbf u_{ctl}-\mathbf u_{tar}\|_2} +{\|\mathbf u_{tar}\|_2}, +\] + +is potentially misleading in a large wake box because the denominator contains a substantial nearly uniform background-flow contribution. This can make physically important wake differences appear artificially small. The current metric instead reports an area RMS normalized by \(U_0\), plus improvement relative to the corresponding zero/uncontrolled trajectory. This produces a dimensionless scale with a direct velocity interpretation and a baseline-relative measure of control effectiveness. + +--- + +## 5. Current field metrics + +Let \(\Omega\) denote the registered ROI and let \(|\Omega|\) denote its area or, in the discrete implementation, its number of lattice cells. Let \(\mathbf u_r\) be a role field (`controlled` or `zero`) and \(\mathbf u_t\) the target field. + +### 5.1 Complete-cycle mean-field error: primary periodic metric + +For periodic cases, the primary metric is + +\[ +E_{\mathrm{mean},r}= +\left[ +\frac{1}{|\Omega|} +\int_\Omega +\frac{\|\overline{\mathbf u}_r-\overline{\mathbf u}_t\|_2^2} +{U_0^2}\,\mathrm d\Omega +\right]^{1/2}. +\] + +The mean fields are arithmetic means over complete accepted cycles between the first and last accepted rising crossing, + +\[ +[t_{c,1},t_{c,N}), +\] + +with the right endpoint excluded. They are accumulated during acquisition and stored as `mean_ux` and `mean_uy` in `phase_fields.npz`. + +Important interpretation: + +- this is a difference of complete-cycle mean fields; +- it is not an average of the eight selected phase snapshots; +- it measures mean wake deficit, mean deflection, recirculation imprint and other persistent spatial differences; +- it removes periodic phase from the primary comparison without discarding mean-flow changes. + +### 5.2 Eight-slot phase-resolved error + +For canonical phase slots \(\phi_k=k\pi/4\), \(k=0,\ldots,7\), define + +\[ +E_{k,r}= +\left[ +\frac{1}{|\Omega|} +\int_\Omega +\frac{\|\mathbf u_r(\phi_k)-\mathbf u_t(\phi_k)\|_2^2} +{U_0^2}\,\mathrm d\Omega +\right]^{1/2}. +\] + +The aggregate diagnostic is + +\[ +E_{\mathrm{phase8},r}= +\left[ +\frac{1}{8|\Omega|} +\sum_{k=0}^{7}\int_\Omega +\frac{\|\mathbf u_r(\phi_k)-\mathbf u_t(\phi_k)\|_2^2} +{U_0^2}\,\mathrm d\Omega +\right]^{1/2}. +\] + +The implementation also retains the eight `E_slot` values. `E_snapshot` is the slot-zero error for periodic cases. + +Current limitation: each phase slot is one nearest saved boundary snapshot selected from the role's phased trajectory. It is **not** an ensemble average over repeated crossings at the same phase. Repeated-crossing phase-bin means remain a scientifically attractive future refinement, but must not be used to describe current results. + +### 5.3 Baseline-relative effectiveness + +For either metric, + +\[ +\eta=1-\frac{E_{ctl}}{E_{zero}}. +\] + +Interpretation: + +- \(\eta>0\): controlled field is closer to target than the corresponding zero/uncontrolled field; +- \(\eta=0\): no improvement over zero; +- \(\eta<0\): control makes that metric worse; +- \(\eta=1\): exact target match in that metric. + +Both absolute error and \(\eta\) should be reported. An effectiveness ratio alone can look favourable when both absolute errors are small or unstable; an absolute error alone does not show improvement over the case-specific uncontrolled baseline. + +### 5.4 Steady and non-periodic semantics + +The Legacy steady case currently uses one late saved snapshot. Therefore `E_mean` and `E_snapshot` are numerically identical there and should be called a **late-snapshot error**, not a demonstrated temporal mean. + +Legacy Erase and Vortex cases are excluded from the formal current L2 matrix because their stationary/event-conditioned field semantics differ from the standard periodic and steady contracts. They require separate, explicitly defined metrics rather than being silently mixed into the periodic table. + +--- + +## 6. Phase definition and alignment + +### 6.1 Current phase probe + +The phase reference is the transverse velocity of the centre sensor, stored as `sensors[:,3]` under the six-channel ordering. This is physically motivated because the centreline transverse velocity is sensitive to antisymmetric shedding and changes sign once per coherent shedding cycle under the relevant periodic regimes. + +### 6.2 Crossing extraction + +The acquisition protocol applies a one-pass \([1,2,1]/4\) smoothing kernel to centre-probe \(u_y\), detects rising zero crossings and applies a minimum-crossing-gap filter. Complete cycles are defined by successive accepted crossings. The offline frequency diagnostic uses linearly interpolated rising crossings from the saved centre-sensor trace. + +The phase record includes, where applicable: + +- accepted and rejected crossing counts; +- cycle IDs; +- target and actual phase of selected snapshots; +- phase-selection error; +- median period; +- coefficient of variation of crossing periods; +- dominant frequency \(1/T_{median}\); +- relative controlled/zero frequency mismatch with respect to target. + +### 6.3 Independent phasing of roles + +Target, controlled and zero trajectories are independently phased from their own centre-probe signal. The shared slots \(0,\pi/4,\ldots,7\pi/4\) provide a common mathematical phase coordinate. They do not independently prove that every physical event is exactly equivalent across roles. + +This distinction matters. The current protocol asks, approximately, “what does each flow look like at the same sensor-defined shedding phase?” It does not force snapshots to have the same laboratory time, nor does it optimize a global spatial shift to minimize L2. + +### 6.4 What is deliberately not done + +- no unrestricted nearest-target-snapshot matching; +- no global phase shift chosen by minimizing full-field L2; +- no interpolation between full-field snapshots; +- no post hoc phase choice selected to improve controlled performance; +- no claim that one scalar phase is valid for quasiperiodic or chaotic dynamics. + +These restrictions prevent the field comparison from hiding an incorrect shedding frequency, phase speed or non-periodic dynamics. Frequency mismatch and phase regularity should be presented alongside `E_phase8`. + +### 6.5 Ideal future phase-conditioned metric + +An improved but more expensive future protocol would average fields over repeated crossings in narrow phase bins: + +\[ +\langle\mathbf u\rangle_{\phi_k} +=\frac{1}{N_k}\sum_{n=1}^{N_k}\mathbf u(t_{n,k}). +\] + +This would reduce nearest-snapshot and cycle-to-cycle variability. It is useful if reviewers demand uncertainty or if single-snapshot phase errors materially affect conclusions. It is not required to describe the current implementation and should be labelled as future work unless regenerated. + +For quasiperiodic or chaotic cases in which a stable one-dimensional phase does not exist, mean-field error, spectra and attractor-level comparisons are more defensible. The metric for attractor overlap of Ishar et al. provides a possible extension [Ishar2019]. + +--- + +## 7. Frequency diagnostics and unit caution + +The saved `physical_time` used by the current reproduction pipeline follows the historical nondimensional convention `lattice_time * U0 / NX`. Consequently, the reported dominant frequency has units inverse to that saved coordinate, documented as `NX/(lattice_time*U0)` in the result schema. + +Use these values only for relative target/controlled/zero mismatch within the same case. They must not be presented as directly comparable physical frequencies across Legacy and V5 unless the time definitions and nondimensionalization are first reconciled. Period coefficient of variation and relative frequency mismatch remain valuable indicators of whether an eight-phase comparison is dynamically trustworthy. + +--- + +## 8. Current implementation status and result-level observations + +The canonical offline evaluator is `src/drl_pinball/eval/wake_l2.py`, schema `drl-pinball-wake-l2-v2`. It reads already acquired fields and does not import CFD or GPU modules. Its focused tests are in `src/drl_pinball/eval/tests/test_wake_l2.py`. + +The current canonical summary contains 23 rows: + +- 15 V5 controlled policy runs across 11 cases; +- 7 Legacy periodic controlled cases; +- 1 Legacy steady constant-control case. + +At the time of this note: + +- all 23 rows improve the complete-cycle mean-field or late-snapshot error relative to zero, with positive `eta_mean`; +- nearly all periodic rows also improve the eight-phase diagnostic; +- the important exception is V5 `kar_re400`, seed 43, where phase-resolved performance is worse than zero even though mean-field performance improves; +- this case also has the largest relative frequency mismatch and large period variability, supporting the interpretation that its dynamic phase-resolved agreement is weak despite an improved mean wake; +- phase-selection diagnostics and field-index/cycle provenance are retained so the phase metric is auditable. + +The paper should not collapse mean and phase-resolved conclusions into one statement. A policy can improve the mean wake while failing to reproduce the target's periodic dynamics. This is scientifically useful: `E_mean` and `E_phase8` diagnose different aspects of cloaking/illusion. + +Before final numerical writing, regenerate or verify the canonical summary and read the values directly rather than copying numbers from this prose note. + +--- + +## 9. Sensor geometry + +### 9.1 Present arrangement + +The current downstream sensor array consists of three circular area-averaged probes on one cross-wake plane: + +\[ +x=x_s,\qquad (y-y_0)/D=+2,0,-2, +\] + +with probe radius + +\[ +r_s=0.25D. +\] + +Each probe returns \((u_x,u_y)\), yielding six velocity channels. + +### 9.2 Physical interpretation by channel group + +**Centre probe** + +- Centre \(u_y\) is a phase-sensitive indicator of antisymmetric vortex shedding. +- It provides the current canonical rising-crossing phase reference. +- Centre \(u_x\) retains information about centreline deficit, gap-jet behaviour and mean recovery. + +**Upper and lower probes** + +- Paired signals capture alternating passage of upper and lower vortices. +- Symmetric and antisymmetric combinations distinguish wake broadening from wake deflection or broken symmetry. +- The pair reduces the risk that one centreline signal misses a laterally displaced or broadened wake. +- The wider \(\pm2D\) spacing is intended to cover a broader target family, including variable disturbance cylinders and large Illusion targets. + +**Two velocity components** + +- Streamwise velocity is sensitive to mean deficit and recovery. +- Transverse velocity is sensitive to vortex passage, antisymmetry and phase. +- Using both avoids relying on a component that may vanish by symmetry or become weak under a particular control state. + +**Area averaging** + +- Radius \(0.25D\) suppresses single-node and grid-scale fluctuations. +- The probe remains small relative to the overall wake width. +- Area averaging creates a stable low-dimensional observation, although it necessarily removes sub-probe spatial detail. + +### 9.3 Why one downstream plane + +The plane is intended to observe the combined downstream signature after the disturbance/target and pinball interactions, rather than only the local actuation field around the rotating cylinders. A single streamwise plane keeps the observation dimension and calibration manageable. FIFO history and multichannel DTW retain temporal ordering, amplitude and convective phase information, partially compensating for the absence of multiple streamwise stations. + +This does not remove the physical convective delay. The array is therefore better defended as a target-signature measurement than as a universally feedback-optimal sensor arrangement. + +--- + +## 10. Direct fluidic-pinball literature evidence + +### 10.1 Exact \(x/D=10\) precedent + +Raibaudo et al. experimentally studied a rotating fluidic pinball at \(Re\approx2200\) using PIV and three hot-wire probes at + +\[ +x/D=10,\qquad y/D=+1.25,0,-1.25 +\] + +[Raibaudo2020]. This is the strongest direct precedent because the streamwise station and three-probe concept match the present design. + +Their full text supports several separate claims: + +1. The three sensors were used both to complement baseline/controlled PIV characterization and to estimate machine-learning cost functions. +2. The authors explicitly describe three sensors as a compromise among low experimental complexity, blockage caused by probes and the need for transverse spatial coverage sufficient to define the cost. +3. The mean velocity-defect region and wake deflection persisted far enough downstream that the wake state/signature was readily detected at \(10D\). +4. Fluctuation intensity remained sufficiently high at \(10D\) to observe the dynamic vortex-shedding signature. +5. Sensor-derived objectives targeting velocity deficit/drag surrogate and wake symmetry produced physically meaningful controlled states that were checked using PIV and wake topology. + +This evidence justifies the statement that \(10D\) remains informative for both mean and dynamic fluidic-pinball wake signatures. It does not prove that \(10D\) is optimal for closed-loop control. + +Differences that must be acknowledged: + +- [Raibaudo2020] used \(Re\approx2200\), not the present laminar numerical range; +- it used hot-wire speed measurements rather than circular two-component area averages; +- its transverse spacing was \(\pm1.25D\), narrower than the present \(\pm2D\). + +These differences make the paper a strong physical precedent, not an exact validation of every present design parameter. + +### 10.2 Pinball feedback sensing and temporal history + +Cornejo Maceda et al. used nine downstream velocity probes in a \(3\times3\) grid at \(x/D=5,6.5,8\), with transverse positions around \(y/D=0,\pm1.25\), for feedback stabilization of the fluidic pinball [CornejoMaceda2021]. Time-delayed copies at quarter-, half- and three-quarter-period offsets supplied mean, amplitude and phase information for the learned feedback law. + +This directly supports two design choices in the present project: + +- downstream velocity probes can encode the large-scale shedding state needed for pinball control; +- temporal history is physically meaningful because convecting structures carry phase information across delayed observations. + +It also defines an important caveat. Their probes were closer than \(10D\), consistent with a trade-off between a developed wake signature and actuation-to-sensor delay. Thus, the present FIFO/DTW design is supported, but \(10D\) should not be called feedback-optimal. + +### 10.3 Sparse probes and controlled full-field estimation + +Li, Li and Noack reused the downstream pinball probe geometry and combined sensor measurements with actuation commands to reconstruct controlled flow fields using linear, k-nearest-neighbour and deep-neural-network estimators [Li2022]. Nonlinear methods were substantially more successful, especially as the controlled dynamics became more complex. Periodic cases were easier to reconstruct than chaotic cases, and errors increased outside the best-covered sensor region. + +The relevant inference is limited but useful: + +> Sparse downstream velocity measurements contain substantial controlled-state and phase information, especially in coherent periodic regimes, but nonlinear processing and actuation information can be needed and reconstruction quality is spatially nonuniform. + +This supports using sparse observations for training while independently evaluating full fields. + +### 10.4 Low-dimensional controlled-flow structure + +Marra et al. identified a low-dimensional actuation manifold for the fluidic pinball [Marra2024]. Two manifold coordinates represent downstream periodic-shedding amplitude and phase, while other coordinates represent near-field actuation mechanisms. Useful estimation was possible with very few wake measurements combined with actuation. + +This supports the physical plausibility of a compact signature array: the dominant periodic downstream dynamics are low-dimensional. It does not show that arbitrary probe locations are equivalent, nor that three probes guarantee observability in chaotic regimes. + +--- + +## 11. Cylinder-wake literature: support and necessary caveats + +Gong et al. showed that one appropriately located sensor combined with harmonic modelling can estimate periodic cylinder vortex shedding, with higher harmonics slaved to the fundamental in the studied regimes [Gong2020]. Nair et al. demonstrated sensor-based phase control of periodic bluff-body flows without requiring online access to the full field [Nair2021]. These studies support using a scalar or low-dimensional wake measurement to define phase on a stable limit cycle. + +Jin, Illingworth and Sandberg studied optimal sensor and actuator placement for cylinder-wake estimation and feedback [Jin2021]. Their key relevance is cautionary: a location that is favourable for full-field estimation need not be favourable for feedback control, because sensor objective, Reynolds number, domain and actuation-to-sensor delay matter. This prevents a universal optimality claim for \(10D\). + +Paris, Beneddine and Dandois explicitly considered robust flow control and sensor placement using DRL [Paris2021]. This literature demonstrates that formal sensor optimization is possible, but it also clarifies that such an exercise is a separate research project with a specified control objective and training budget. The current work does not need to solve that stronger problem to justify a physically motivated signature plane. + +For non-periodic attractors, the metric for attractor overlap provides a more appropriate comparison than forcing every trajectory onto a single phase coordinate [Ishar2019]. + +--- + +## 12. Precise claims that are supported + +The following claims are defensible: + +1. The three probes form a compact, physically motivated downstream signature array. +2. The centre transverse-velocity signal provides a phase-sensitive measurement of antisymmetric shedding in coherent periodic regimes. +3. The upper/lower probes provide cross-wake coverage of alternating vortex passage, wake deflection and transverse extent. +4. Both velocity components retain complementary information about streamwise deficit and cross-stream dynamics. +5. Direct experimental pinball evidence shows that mean defect/deflection and vortex-shedding fluctuations remain detectable at \(x/D=10\) [Raibaudo2020]. +6. Downstream pinball probes and temporal history have established precedent in feedback and flow estimation [CornejoMaceda2021, Li2022]. +7. Sparse sensing is plausible because the coherent controlled pinball dynamics contain a strong low-dimensional component [Marra2024]. +8. Full-field L2 is needed as independent validation precisely because the probes are not claimed to determine the entire field. +9. The registered rectangular ROI provides a common, reproducible Legacy/V5 comparison without an outcome-dependent wake mask. +10. Mean-field and phase-resolved errors measure distinct physical aspects and should be reported separately. + +--- + +## 13. Claims that are not currently supported + +Do not write that: + +- \(x/D=10\) is mathematically optimal; +- the layout is feedback-optimal; +- \(y/D=\pm2\) is an optimized transverse spacing; +- three probes guarantee full-state observability; +- low DTW guarantees low full-field L2; +- one scalar phase is valid for all controlled, quasiperiodic or chaotic regimes; +- `E_phase8` is an ensemble phase average; +- current steady `E_mean` is a temporal mean; +- the ROI uses a persisted solver-exact common-fluid mask; +- Legacy and V5 frequency values can be compared physically without reconciling time scaling; +- one successful seed establishes statistical robustness. + +The appropriate wording is “physically motivated,” “registered,” “signature-monitoring,” “phase-resolved diagnostic,” and “independent field validation.” + +--- + +## 14. Is additional CFD or joint analysis required? + +### 14.1 For the present methods claim + +No. Direct pinball precedent at exactly \(10D\), corroborated by pinball feedback and estimation literature, is sufficient to show that the location is reasonable as a downstream signature plane. The current full-field L2 analysis also independently prevents over-reliance on the sensor objective. + +### 14.2 Minimal optional project-specific check + +If an advisor or reviewer requests evidence specific to the present geometries, perform an offline virtual-plane sweep using ordinary saved evaluation fields: + +\[ +x/D=8,9,10,11,12, +\] + +with the same transverse triplet and probe radius. Suggested diagnostics are: + +1. normalized energy or SNR in the dominant shedding band; +2. phase coherence between centre \(u_y\) and an antisymmetric upper/lower combination; +3. phase-slip fraction; +4. target/controlled/zero DTW ranking stability; +5. force/action-to-sensor convective delay; +6. sensitivity of selected phase fields and `E_phase8` to phase-plane location. + +A broad plateau containing \(10D\) is a stronger robustness result than a sharp optimum at one sampled coordinate. Use representative cases such as Karman \(Re=100\) and one large-target Illusion case. No retraining is required. + +### 14.3 Even cheaper existing-signal checks + +- recompute DTW with centre channels only, outer pair only and all six channels; +- compare phase from centre \(u_y\) with phase from upper-minus-lower signals; +- quantify circular correlation and phase slips; +- test whether short FIFO histories improve next-phase prediction over current samples. + +These support the value of the three-probe geometry but cannot establish the streamwise station independently. + +### 14.4 Work needed only for stronger claims + +A dedicated CFD/analysis project would be needed to claim optimality, universal robustness or guaranteed observability. Possible methods include formal observability Gramians, resolvent-based placement, POD reconstruction error maps, Bayesian/greedy sensor selection or joint DRL sensor optimization. These answer a stronger question than the current paper requires and should not be added unless explicitly motivated. + +--- + +## 15. Writing-ready methods material + +### 15.1 Sensor paragraph + +Three circular velocity probes were placed on a cross-wake plane \(10D\) downstream of the signature source, at \((y-y_0)/D=0,\pm2\), and each probe returned both velocity components. The centre transverse-velocity signal provides a phase-sensitive measure of antisymmetric shedding, whereas the off-centre probes capture alternating vortex passage, wake deflection and transverse extent. Circular averaging over radius \(0.25D\) reduces grid-scale sensitivity. The streamwise station follows direct experimental fluidic-pinball evidence that both mean wake defect/deflection and vortex-shedding fluctuations remain readily detectable at \(x/D=10\) [Raibaudo2020]. Together with established downstream sensing for fluidic-pinball feedback and flow estimation [CornejoMaceda2021, Li2022], this supports the array as a compact downstream-signature measurement. Temporal FIFO observations and multichannel DTW retain amplitude and convective phase information. The placement is not treated as mathematically optimal or fully observable; final performance is therefore assessed independently using spatial velocity-field errors. + +### 15.2 ROI paragraph + +Velocity-field errors were evaluated over a registered rectangular wake region defined relative to the common sensor plane, \(-6\leq(x-x_s)/D\leq14\) and \(|(y-y_0)/D|\leq5\). The \(20D\times10D\) region begins approximately \(4D\) downstream of the signature-source centre and fits all evaluated Legacy and V5 domains. Registration to \((x_s,y_0)\), rather than absolute lattice coordinates, preserves a common body-scaled region across translated Karman and Illusion scenes. A fixed rectangle avoids an outcome-dependent velocity or vorticity threshold. The current artifacts do not persist solver-exact masks; therefore, a conservative geometry guard ensures that the region starts downstream of all known solids. + +### 15.3 Metric paragraph + +For periodic cases, the primary error was the \(U_0\)-normalized area-RMS difference between complete-cycle mean velocity fields. The mean was accumulated over complete intervals bounded by accepted rising crossings of the centre-probe transverse velocity. A secondary phase-resolved diagnostic compared eight canonical phases separated by \(\pi/4\). Each role was phased independently from its own smoothed centre-probe signal, and the nearest saved boundary snapshot was selected for each slot; no global phase minimization or full-field interpolation was applied. The eight-slot metric is consequently a discrete phase-resolved diagnostic rather than a repeated-crossing conditional ensemble. Both absolute error and effectiveness relative to the corresponding zero-control trajectory, \(\eta=1-E_{ctl}/E_{zero}\), were reported. + +### 15.4 Results interpretation paragraph + +Mean-field and phase-resolved errors should be interpreted separately. A reduced mean-field error demonstrates improved average wake deficit and deflection, whereas a reduced eight-phase error additionally requires the periodic wake evolution to approach the target. A policy may improve the mean wake while retaining an incorrect frequency or phase-resolved structure. Period variability, frequency mismatch and phase-selection errors are therefore reported with the phase metric. + +--- + +## 16. Suggested paper structure for this material + +- **Methods — observations and reward:** sensor coordinates, area averaging, six channels, FIFO, DTW and its training role. +- **Methods — independent field evaluation:** registered ROI, `E_mean`, `E_phase8`, zero-relative effectiveness and phase diagnostics. +- **Results:** report sensor DTW and field L2 side by side, without treating one as a surrogate identity for the other. +- **Discussion:** explain why sparse signature control can work, why field validation remains necessary, and why \(10D\) is reasonable but not claimed optimal. +- **Limitations:** nearest-snapshot phase slots, geometry-guarded rather than exact masks, single-seed limitations where relevant, and invalidity of a scalar phase for non-periodic cases. + +--- + +## 17. Agent indexing map + +Search terms for later agents: + +- `wake-field L2`, `full-field L2`, `ROI`, `registered wake region` +- `x_s`, `sensor plane`, `x/D=10`, `y/D=±2`, `probe radius 0.25D` +- `complete-cycle mean`, `mean_ux`, `mean_uy`, `E_mean` +- `eight phase`, `E_phase8`, `nearest-boundary snapshot`, `phase slot` +- `center sensor uy`, `rising crossing`, `[1,2,1]/4 smoothing` +- `eta_mean`, `eta_phase8`, `zero baseline` +- `geometry guard`, `solver-exact mask`, `common-fluid mask` +- `DTW versus L2`, `signature sensing`, `full-field validation` +- `Rai20`, `Mac20`, `Li22b`, `Mar24b`, `Jin21` + +Code/data map: + +- evaluator: `src/drl_pinball/eval/wake_l2.py` +- evaluator tests: `src/drl_pinball/eval/tests/test_wake_l2.py` +- canonical summary: `src/drl_pinball/data/reproduction/wake_l2_summary.json` +- V5 acquisition: `src/drl_pinball/reproduce/acquire.py` or the current canonical reproduction acquisition module +- Legacy acquisition: `src/drl_pinball/legacy_test/acquire.py` +- phase fields: role-local `phase_fields.npz` +- sensor histories: role-local `timeseries.npz` + +If code and this note disagree, the code plus current result schema are authoritative for what was actually calculated. The rationale sections remain authoritative for claim boundaries unless deliberately revised. + +--- + +## 18. References and citation keys + +- [Raibaudo2020] C. Raibaudo, P. Zhong, B. R. Noack & R. J. Martinuzzi, “Machine learning strategies applied to the control of a fluidic pinball,” *Physics of Fluids* 32, 015108 (2020). DOI: https://doi.org/10.1063/1.5127202 +- [CornejoMaceda2021] G. Y. Cornejo Maceda, Y. Li, F. Lusseyran, M. Morzyński & B. R. Noack, “Stabilization of the fluidic pinball with gradient-enriched machine learning control,” *Journal of Fluid Mechanics* 917, A42 (2021). DOI: https://doi.org/10.1017/jfm.2021.301 +- [Li2022] S. Li, W. Li & B. R. Noack, “Machine-learned control-oriented flow estimation for multi-actuator multi-sensor systems exemplified for the fluidic pinball,” *Journal of Fluid Mechanics* (2022). DOI: https://doi.org/10.1017/jfm.2022.908 +- [Marra2024] L. Marra et al., “Actuation manifold from snapshot data,” *Journal of Fluid Mechanics* (2024). DOI: https://doi.org/10.1017/jfm.2024.593 +- [Jin2021] B. Jin, S. Illingworth & R. Sandberg, “Optimal sensor and actuator placement for feedback control of vortex shedding,” *Journal of Fluid Mechanics* (2021). DOI: https://doi.org/10.1017/jfm.2021.948 +- [Gong2020] J. Gong, J. Monty & S. Illingworth, “Model-based estimation of vortex shedding in unsteady cylinder wakes,” *Physical Review Fluids* 5, 023901 (2020). DOI: https://doi.org/10.1103/PhysRevFluids.5.023901 +- [Nair2021] A. G. Nair, K. Taira, B. W. Brunton & S. L. Brunton, “Phase-based control of periodic flows,” *Journal of Fluid Mechanics* (2021). DOI: https://doi.org/10.1017/jfm.2021.735 +- [Ishar2019] R. Ishar et al., “Metric for attractor overlap,” *Journal of Fluid Mechanics* (2019). DOI: https://doi.org/10.1017/jfm.2019.447 +- [Paris2021] R. Paris, S. Beneddine & J. Dandois, “Robust flow control and optimal sensor placement using deep reinforcement learning,” *Journal of Fluid Mechanics* 913, A25 (2021). DOI: https://doi.org/10.1017/jfm.2020.1170 + +Undermind cite-key correspondence used during research: `Rai20`, `Mac20`, `Li22b`, `Mar24b`, `Jin21`, `Gon19`, `Nai20b`, `Ish17`. diff --git a/docs/My_Confirmation/Chapters/0.Template.tex b/docs/My_Confirmation/Chapters/0.Template.tex new file mode 100644 index 0000000..8be0869 --- /dev/null +++ b/docs/My_Confirmation/Chapters/0.Template.tex @@ -0,0 +1,101 @@ +{} +\chapter{Introduction} \label{Chap: introduction} + +This is a latex template for Ph.D. thesis in The Hong Kong Polytechnic University. It can be also used for other universities or degrees. + +\section{Commands} + +This is an example for renew commands, \eg, we can use \textbackslash eg to generate \eg. The same thing goes to \etc. + +We can use \textbackslash rev\{\} to mark your text: \rev{revised text}. + + +\section{Citation} + +This is an example for citation \cite{pan2012investigation}. + +\section{Figures} + + +This is a figure, as shown in \fref{fig:figure}. + + + \begin{figure}[t] + \centering + \includegraphics[width=0.5\textwidth]{Figures/Illustration.pdf} + \caption{Illustration of a figure.} + \label{fig:figure} + \end{figure} + +Figure \ref{fig:subfigure} shows an example of subfigures (\fref{fig:subfigure1} and \fref{fig:subfigure2}). + + +\begin{figure}[t] +\centering +\subfloat[Subfigure 1]{ + \includegraphics[width=0.45\columnwidth]{Figures/fr_ear_left.pdf} + \label{fig:subfigure1} + } +\subfloat[Subfigure 2]{ + \includegraphics[width=0.45\columnwidth]{Figures/fr_ear_right.pdf} + \label{fig:subfigure2} + } +\caption{Frequency response with and without ears.} +\label{fig:subfigure} +\end{figure} + + +This is an example for the minipage (\fref{fig:minipage1} and \fref{fig:minipage2}). + +\begin{figure}[t] +\begin{minipage}{0.48\linewidth} + \centering + \includegraphics[width=0.58\columnwidth]{Figures/OE_cardioid.pdf} + \caption{Minipage 1.} + \label{fig:minipage1} +\end{minipage} +\hspace{5pt} +\begin{minipage}{0.48\linewidth} + \centering + \includegraphics[width=0.58\columnwidth]{OE_sameDisDiffDeg.pdf} + \caption{Minipage 2.} + \label{fig:minipage2} +\end{minipage} +\end{figure} + +\section{Table} + + +A table example is shown in \tref{tab:table}. It is a three-line table. + + +\begin{table}[t] +\renewcommand{\arraystretch}{1.1} +\centering +\caption{PolyU rankings.} +\begin{tabular}{ccccc} +\toprule +Rankings & + \begin{tabular}[c]{@{}c@{}}QS \\ World University\end{tabular} & + \begin{tabular}[c]{@{}c@{}}QS \\ Asia University \end{tabular} & + \begin{tabular}[c]{@{}c@{}}THE \\ World University \end{tabular} & + \begin{tabular}[c]{@{}c@{}}THE \\ Asia University\end{tabular} \\ \midrule +2022 & + 66 & + 25 & + 91 & + 15 \\ +2021 & + 75 & + 25 & + 129 & + 23 \\ \bottomrule +\end{tabular} +\vspace{10pt} +\label{tab:table} +\end{table} + +\section{Examples} + + +\kant[1-3] \ No newline at end of file diff --git a/docs/My_Confirmation/Chapters/1.Introduction.tex b/docs/My_Confirmation/Chapters/1.Introduction.tex new file mode 100644 index 0000000..a396f77 --- /dev/null +++ b/docs/My_Confirmation/Chapters/1.Introduction.tex @@ -0,0 +1,173 @@ +\chapter{Introduction} \label{Chap: introduction} + +The invisible cloak, a concept long embedded in literary narratives, represents humanity's enduring fascination with the possibility of becoming undetectable. This captivating prospect has transitioned from the realm of fiction to a tangible and vibrant field of scientific inquiry, where researchers seek to manipulate physical fields to render objects imperceptible to external observers. Over the past few decades, this pursuit has yielded remarkable success, with various theories demonstrating feasible methods for achieving cloaking and the more advanced capability of illusion—making an object appear as something else—across diverse physical domains. These breakthroughs have been most prominent in fields governed by linear wave phenomena, such as optics, electromagnetics, and acoustics. + +This introductory chapter aims to bridge the gap between these established concepts and our innovative exploration of cloaking and illusion within the highly non-linear environment of fluid dynamics. The primary objective is to provide the reader with a comprehensive understanding of the foundational principles of cloaking while systematically building the argument for the novelty and significance of this report. To achieve this, the chapter is structured along two fundamental axes: the nature of the governing physics (linear vs. non-linear) and the type of control strategy employed (passive vs. active). + +Our review will commence by exploring the origins of Passive Cloaking in Optics and Electromagnetics, where theories like transformation optics and scattering cancellation laid the theoretical groundwork. We will then examine the progression to Active Cloaking and Illusion in Wave-based Systems, which introduced adaptive control to overcome the inherent limitations of passive designs. Following this, the discussion will pivot to the fluid domain, first by reviewing efforts in Passive Cloaking in Water Waves, a field that highlights both the potential and the challenges of applying cloaking concepts to fluids, often through linear approximations. Finally, we will survey the mature field of Active Flow Control, noting its traditional focus on performance optimization (e.g., drag reduction) rather than the perceptual management goals of cloaking. + +Through this structured four-part review, we will progressively reveal a critical and compelling research frontier: the application of active control to achieve robust hydrodynamic cloaking and illusion in a flow regime dominated by non-linearity. This synthesis will underscore that extending these concepts from linear, wave-based physics to the complex dynamics of vortex shedding around a bluff body is not an incremental step, but a formidable challenge that constitutes the core contribution of this dissertation. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/choi2014paraxial.png} + \caption{Example of a practical paraxial cloak. (a)-(c) A hand is cloaked for varying directions, while the background image is transmitted properly. (d) On-axis view of the ray optics cloaking device. (e) Setup using practical, easy to obtain optics, for demonstrating paraxial cloaking principles. \cite{choi2014paraxial}} + \label{fig:choi2014paraxial} +\end{figure} + +\section{Passive Cloaking in Optics and Electromagnetics} + +The academic journey towards realizing invisibility began in physical domains where the governing principles are described by linear wave equations, most notably optics and electromagnetics. In these fields, the concept of "passive cloaking" emerged as the first and most theoretically developed approach. Passive techniques are characterized by their reliance on static, engineered materials that require no external energy input or active feedback to function. These methods achieve invisibility by surrounding an object with a specially designed shell, or "cloak," which manipulates incident waves (such as light or microwaves) to guide them around the concealed region. To an external observer, the waves emerge on the other side as if they had propagated through empty space, leaving the object and the cloak itself completely undetected. The development of this field has been primarily driven by two elegant and powerful theoretical frameworks: Transformation Mapping Theory and Scattering Cancellation Theory. + +The most profound and influential paradigm for passive cloaking is Transformation Optics (TO), a concept formally introduced in 2006 by John Pendry \cite{pendry2006controlling} and Ulf Leonhardt \cite{leonhardt2006optical} in separate seminal works. The theory's power lies in a remarkable insight: the form of Maxwell's equations, which govern electromagnetism, remains invariant under coordinate transformations. This means that a distortion in the coordinate system—akin to bending the fabric of space itself—can be mathematically replicated by a physical medium with precisely tailored material properties. + +\begin{figure}[t] + \centering + \includegraphics[width=0.5\textwidth]{Figures/pendry2006controlling2.png} + \caption{The relation between the reference space and real space in TO. (A) The reference space in a Cartesian coordinate system. There is a free space which there is no electromagnetic media filled in this space and so optical ray propagates in a straight line. (B) The real space: after the space transformation, the coordinate grid is curved. \cite{pendry2006controlling}} + \label{fig:pendry2006controlling2} +\end{figure} + +The quintessential cloaking design using this method involves a "push-forward" mapping. In a virtual, mathematical space, one defines a region that is compressed into an infinitesimally small point or line. Since waves cannot penetrate a point, this region is inherently invisible. The transformation then "stretches" or maps this point back into a finite volume (e.g., a sphere or cylinder) in the real, physical world. To make the physics of the real space behave like the physics of the virtual space, one must construct a metamaterial shell around this volume. The required material properties of this shell—specifically its permittivity and permeability—are dictated by the mathematics of the coordinate transformation and are typically highly anisotropic (direction-dependent), inhomogeneous (spatially varying), and may even possess singular values at the inner boundary. When fabricated, this shell compels electromagnetic waves to flow smoothly around the concealed central region, just as the coordinate lines were distorted, rendering any object placed inside invisible. + +While the 2006 papers ignited widespread interest, the foundational ideas trace back further. Dolin \cite{dolin1961possibility} had shown the form-invariance of Maxwell's equations as early as 1961, and Ward and Pendry \cite{ward1996refraction} later used coordinate transformations to solve electromagnetic problems in cylindrical geometries in 1996. The generality of the transformation mapping approach has allowed it to be extended far beyond invisibility, enabling the design of other fascinating devices like field concentrators, rotators, and various illusion apparatuses. Furthermore, its principles have been successfully adapted to other linear wave systems, including acoustics and thermodynamics. + +\begin{figure}[t] + \centering + \includegraphics[width=0.5\textwidth]{Figures/pendry2006controlling.png} + \caption{A ray-tracing program has been used to calculate ray trajectories in the cloak. (A) A two-dimensional (2D) cross section of rays striking the system, diverted within the annulus of cloaking material contained within $R_1 < r < R_2$ to emerge on the far side undeviated from their original course. (B) A 3D view of the same process. \cite{pendry2006controlling}} + \label{fig:pendry2006controlling} +\end{figure} + +Despite its theoretical elegance, transformation-based cloaking faces a monumental practical challenge: the required materials, with their extreme anisotropic and inhomogeneous properties, are exceptionally difficult, if not impossible, to fabricate perfectly. This fabrication bottleneck spurred the development of a more pragmatic approach known as Scattering Cancellation Theory (SCT). + +Instead of bending space, SCT operates on the principle of destructive interference. The goal is to design a cloaking shell that generates a scattered field that is precisely equal in magnitude and opposite in phase to the scattered field produced by the object it encloses. When these two scattered fields superimpose, they perfectly cancel each other out, resulting in a total scattered field of zero. To an observer, the absence of a scattered wave makes the object appear to have vanished. + +The primary advantage of SCT is its practicality. It circumvents the need for complex metamaterials by typically employing simple, layered structures composed of homogeneous and isotropic bulk materials with conventional properties. The design process involves analytically solving the governing equations to determine the material parameters and geometry of the layers needed to achieve the desired cancellation for a specific object and incident wave. This method has been successfully demonstrated not only in electromagnetism but also in other fields like heat transfer, proving to be a robust and accessible alternative for creating passive cloaks. + +Building upon the same principles of wave manipulation, researchers quickly realized that the goal could be shifted from simply eliminating an object's signature to actively misrepresenting it. This led to the concept of "illusion optics." Rather than engineering a scattered field of zero (cloaking), one could engineer a specific, non-zero scattered field that mimics the signature of a completely different object. + +Early demonstrations of this concept showcased remarkable capabilities. For instance, Yang et al. \cite{yang2008superscatterer} designed a "superscatterer" using a shell of negative refractive material that made a small object appear electromagnetically much larger than its actual size. Conversely, Jiang et al. \cite{jiang2011shrinking} used metamaterials to create a "shrinking device," which made an object appear smaller. More advanced designs have since achieved the ability to create illusions of shifted positions or to function interchangeably as a cloak or an illusion device depending on specific parameters. These passive illusion devices highlight the sophisticated level of control achievable over linear wave phenomena through meticulous material design. + +In summary, the foundational work on passive cloaking and illusion in linear physical systems has established a rich theoretical and practical landscape. Both the elegant, space-bending approach of Transformation Optics and the pragmatic, interference-based method of Scattering Cancellation Theory have proven highly effective. However, their success is fundamentally tied to the principle of linear superposition, and their static, passive nature inherently limits their performance to specific frequencies and conditions, a critical constraint that motivates the exploration of active control strategies. + +\section{Active Cloaking and Illusion in Wave Systems} + +While passive cloaking techniques represent a monumental theoretical achievement, they are constrained by fundamental physical principles that limit their practical utility. Passive cloaks, particularly those based on Scattering Cancellation Theory (SCT), are inherently resonant and thus operate effectively only within a narrow frequency band. More critically, as demonstrated by Monticone and Alù \cite{monticone2013cloaked}, the law of energy conservation dictates a trade-off: any linear, passive cloak that reduces scattering at one frequency must necessarily increase the total scattering when integrated across the entire electromagnetic spectrum. This "conservation of scattering" principle implies that a passive cloak, when interrogated by a broadband pulse, could paradoxically scatter more energy than the uncloaked object itself, making it highly detectable in transient regimes. The significant challenge of fabricating the exotic metamaterials required for transformation optics further compounds these bandwidth limitations \cite{chen2013broadening}. + +To surmount these inherent constraints, the research paradigm shifted towards active cloaking. This approach represents a fundamental departure from static material design, instead employing a dynamic system of sensors, controllers, and active sources that can adapt in real-time. The core principle of active cloaking is conceptually akin to active noise cancellation: the system is designed to intelligently generate a secondary field that destructively interferes with and cancels the unwanted scattered field from an object. This strategy liberates the design from the narrow bandwidth limitations of passive resonant structures, offering the potential for true broadband invisibility and adaptability to varying incident fields. + +One of the earliest and most influential theoretical frameworks for active cloaking was proposed by Miller \cite{miller2006perfect}, who sought to define the requirements for a "perfect" cloak. His design envisioned a shell of sensors and active sources enveloping the object to be hidden. The sensors measure the local properties of an incoming wave, and a controller calculates the precise output for the active sources to radiate a secondary field. This radiated field is engineered to achieve two simultaneous goals: first, to cancel the field scattered by the object, and second, to precisely replicate the original, unperturbed incident field in the exterior region, effectively erasing any trace of the object's presence. Miller's causal simulations, which involved an array of 3,264 source-sensor pairs to cloak a spherical volume from a pulse, highlighted the complexity of the approach but confirmed its theoretical viability. A key insight was that perfect, causal cloaking requires a non-local response—where the action of each source depends on information from other locations—a condition that active systems, unlike passive materials, can fulfill. + +Subsequent research has refined this concept into more practical implementations. Guevara-Vasquez et al. \cite{vasquez2009active} developed an active shielding methodology for the 2D Helmholtz equation using a finite number of external active devices. By representing the devices mathematically as multipole source expansions derived from Green's theorem, they demonstrated that as few as three active sources could effectively create a "quiet zone" around an object while simultaneously canceling the far-field scattering. More recently, Lin \cite{lin2021active} has demonstrated a sophisticated active acoustic cloaking system for complex 3D objects by integrating the boundary element method with a modern control strategy. In this work, arrays of monopole control sources and error sensors are distributed around the rigid body. The optimal strength of the control sources is determined by a feedforward linear-quadratic regulator (LQR) algorithm, which minimizes the error signals to cancel the scattered acoustic field. + +\begin{figure}[t] + \centering + \includegraphics[width=0.5\textwidth]{Figures/lin2021active.png} + \caption{(a) Primary (uncontrolled) acoustic pressure fields scattering by a sphere due to a monopole source (left column) and a plane wave (right column), (b) cloaked pressure fields, (c) actively modified free fields to resemble the acoustic fields in (a) associated with the presence of a sphere. \cite{lin2021active}} + \label{fig:lin2021active} +\end{figure} + +Crucially, this same active control architecture can be repurposed to create active illusions. The versatility of the active system allows the objective to be shifted from merely canceling the scattered field to actively sculpting it into a new, desired form. As demonstrated by Lin \cite{lin2021active}, by modifying the cost function within the LQR controller, the system can be programmed to make an object generate the acoustic signature of a completely different object. For example, the system could make a complex object like a cube or a bird appear acoustically as a simple sphere, or misrepresent its size and orientation. This capability to generate arbitrary, deceptive wave signatures represents a significant leap beyond simple invisibility. + +In conclusion, active cloaking and illusion in linear wave systems provide a powerful and flexible solution to the fundamental broadband limitations of passive methods. By replacing static metamaterials with adaptive sensor-actuator networks governed by sophisticated control algorithms, these systems can achieve robust, tunable control over scattered fields. However, this performance comes at the cost of increased system complexity and computational demand, and introduces new challenges such as maintaining control stability, particularly near system resonance frequencies. Having established these principles in linear, wave-based domains, we now turn our attention to the far greater challenge of applying them to the inherently non-linear world of fluid dynamics. + +\section{Passive Cloaking in Fluids} + +The successful transfer of cloaking principles from their origins in optics and electromagnetics to other wave-based fields like acoustics stands in stark contrast to the progress within the fluid dynamics community. Establishing a direct connection has proven to be a significant challenge, largely because the physics of fluid motion is fundamentally different. Unlike the linear, often homogeneous environments of wave propagation, fluid flows are governed by the inherently non-linear Navier-Stokes equations. They are characterized by complex phenomena such as viscosity, vorticity, and turbulence, which do not have direct analogues in linear wave theory. + +Consequently, the initial forays into hydrodynamic cloaking have strategically avoided the full complexity of fluid dynamics. Instead, researchers have focused on specific physical regimes where the governing equations can be simplified to a linear or quasi-linear form, making them mathematically analogous to the wave problems already solved. This approach, while clever and insightful, has confined passive hydrodynamic cloaking to highly constrained scenarios, most notably linearized water waves and low-Reynolds-number flows. + +One of the most visually appealing and well-studied areas for fluid cloaking is the manipulation of surface water waves. The appeal lies in the fact that under a specific set of idealizing assumptions, the problem becomes tractable. The classical theory of water waves typically assumes the fluid is inviscid (no internal friction) and the flow is irrotational (no vorticity). This allows the fluid velocity to be described by a scalar velocity potential, $\Phi$. Furthermore, by assuming the wave steepness is small, the boundary conditions at the free surface can be linearized. Under these conditions, the complex fluid dynamics problem simplifies to solving the Laplace equation for the potential $\Phi$: + +\begin{equation}\label{eq:euler} +\Delta^2 \Phi=0 +\end{equation} + +subject to a linearized dynamic boundary condition on the mean free surface ($z=0$): + +\begin{equation}\label{eq:surface} +\Phi_{tt}+g\Phi=0, \quad \text{on}\ z=0 +\end{equation} + +By considering time-harmonic solutions of the form $\Phi(x,y,z,t) = \Re\{\phi(x,y,z)\exp^{-\rm{i}\omega t}\}$ and $\zeta(x,y,t) = \Re\{\eta(x,y)\exp^{-\rm{i}\omega t}\}$ where $\omega$ is the assumed radian frequency and now $\phi$ and $\eta$ are frequency-dependent complex-valued functions incorporating information about the amplitude and the phase of the fluid motion. + +\begin{equation}\label{eq:surface2} +\eta(x,y)=(\rm{i}\omega g)\phi,\quad \phi_z - K\phi = 0,\quad K=\omega^2/g, \text{on}\ z=0 +\end{equation} + +representing the time-independent free-surface elevation. Waves propagate on the surface of the water (they are akin to guided, interface or surface waves in other physical disciplines) with exponential decay in the direction of increasing depth away from the surface. Waves of amplitude $A$ over a flat bed of depth $h_0$ from infinity in a direction $\theta_0$ w.r.t. the positive x-axis are given by the potential + +\begin{equation}\label{eq:wave} +\phi_{i n c}=\frac{-\mathrm{i} g A}{\omega} \frac{\cosh k_0\left(z+h_0\right)}{\cosh k_0 h_0} \mathrm{e}^{\mathrm{i} k_0\left(x \cos \theta_0+y \sin \theta_0\right)} +\end{equation} + +and \ref{eq:surface2} provided that the unique positive real root k of + +\begin{equation}\label{eq:wave2} +K\equiv \omega^2 / g = k \tanh kh +\end{equation} + +corresponding to $h= h_0$ is assigned to $k_0$. The equation \ref{eq:wave2} is called the +water wave dispersion relation and encodes information on how waves of different frequencies travel at different speeds and how both relate to the fluid depth. As usual, the phase speed is given by $c = \omega/k$. + +We shall refer to the shallow water regime as being when $kh\ll 1$ or $\lambda\gg h$ where $\lambda= 2\pi/k$ is the wavelength. In this case \ref{eq:wave2} shows that $k \approx \omega/\sqrt{gh}$ and $c\approx \sqrt{gh}$. Water waves are therefore non-dispersive in the shallow water approximation. The resulting framework is mathematically similar to that of acoustics or electromagnetics, allowing for the direct application of cloaking theories. + +Within this linearized framework, passive cloaking has been successfully demonstrated. Inspired by transformation optics, researchers have designed cloaks for shallow water waves, where the wave behavior is non-dispersive. More practical approaches have focused on passive structural design. For example, Zou et al. \cite{zou2019broadband} designed and experimentally validated a broadband water wave cloak that functions by converting incident plane waves into guided waves that travel along a channel with a carefully engineered depth profile, before converting them back to plane waves. This method, achieved by simply modifying the bathymetry of the seabed, effectively renders a protected region calm without requiring exotic metamaterials. Such successes, however, are intrinsically linked to the validity of the linear water wave theory and are designed to manipulate surface wave patterns, not the underlying bulk flow. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/zou2019broadband.png} + \caption{The concept of a broadband cloak for water waves: (a) The schematic plot of the top view of the cloak device and three-dimensional sketch of gradient index metamaterials (GIMs). (b) The side view of the waveguide cloak with GIMs. (c) The experimental photographs of the real cloak device with two GIMs in the water tank. \cite{zou2019broadband}} + \label{fig:zou2019broadband} +\end{figure} + +Another avenue for passive hydrodynamic cloaking has been explored in the regime of very low Reynolds numbers ($Re \ll 1$), where viscous forces dominate over inertial forces. In these scenarios, such as Hele-Shaw flow or flow through porous media, the non-linear terms of the Navier-Stokes equations become negligible, and the flow is governed by linear equations like the Stokes or Darcy equations, which again bear a strong resemblance to the Laplace equation. + +This mathematical convenience has enabled the design of passive cloaks for creeping flows. For instance, Chen et al. \cite{chen2024multilayered} recently developed a multilayered, homogeneous hydrodynamic cloak designed to operate in free fluid flow at low Reynolds numbers. Drawing inspiration from Hele-Shaw flow, they constructed a passive shell from concentric layers of alternating heights. Through structural optimization, this device was shown to achieve near-perfect cloaking, guiding the slow-moving fluid smoothly around a central object. While this represents a significant achievement in microfluidic flow control, its success is fundamentally predicated on operating within a linear flow regime, where vortex shedding and inertial effects are absent. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/chen2024multilayered.png} + \caption{Experimental demonstration of the homogeneous hydrodynamic cloak. The simulated pressure fields around the obstacle without cloak (a) and with cloak (d). The corresponding simulated velocity field with streamlines around the obstacle without cloak (b) and with cloak (e). The experimental results of the flow fields with streamlines of the obstacle without cloak (c) and with cloak (f). \cite{chen2024multilayered}} + \label{fig:chen2024multilayered} +\end{figure} + +In summary, the field of passive hydrodynamic cloaking has made tangible progress by identifying and exploiting specific physical niches where fluid dynamics can be treated as a linear system. These efforts, whether by linearizing the physics of water waves or restricting the context to creeping flows, have successfully translated the core ideas of transformation optics and scattering cancellation into the fluid domain. However, they also clearly delineate the current frontier. These methods are, by design, inapplicable to the vast majority of engineering and natural flows that are characterized by moderate to high Reynolds numbers, where non-linear effects, flow separation, and vortex shedding are not just present, but are the dominant features of the flow. This critical gap underscores the need for a different paradigm, one that can confront non-linearity directly: active flow control. + +\section{Active Flow Control and Cloaking} + +To confront the challenges posed by the non-linear, vortical flows that render passive methods ineffective, we turn to the mature and powerful discipline of Active Flow Control (AFC). Within fluid mechanics, AFC has a rich history, driven by significant industrial and environmental needs since Prandtl's \cite{krazer1905verhandlungen} foundational work on boundary layer manipulation. AFC technologies utilize external energy input through actuators (e.g., jets, suction/blowing, moving surfaces) and often employ sensors and feedback loops to dynamically alter a flow field for a desired outcome\cite{zhao2023review}. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/zhao2023review1.png} + \caption{Flow past a cylinder with two jets symmetrically located on the two side of the cylinder. \cite{zhao2023review}} + \label{fig:zhao2023review1} +\end{figure} + +Historically, the objectives of AFC have been almost exclusively performance-oriented and localized. The primary goals have been to optimize the interaction between a fluid and a body, such as reducing drag on vehicles to improve fuel efficiency, enhancing lift on airfoils, suppressing detrimental flow-induced vibrations (FIV) and noise, or promoting mixing in chemical reactors. A vast array of AFC strategies have been developed to achieve these ends. These include the use of secondary flows, such as steady or synthetic jets, to energize the boundary layer and delay flow separation. For example, Feng and Wang \cite{feng2010circular} demonstrated that a synthetic jet at the rear of a cylinder could symmetrize the wake and suppress vortex shedding. More complex systems like windward-suction-leeward-blowing (WSLB), investigated by Wang et al. \cite{wang2016active}, have shown remarkable effectiveness, achieving near-complete suppression of vibrations on bluff bodies. Other prominent methods involve mechanical actuation, such as imposing rotary oscillations on a cylinder or using smaller, rotating control rods in its vicinity to disrupt the formation of large-scale vortices, as reviewed extensively by Zhao et al. \cite{taheri2023enhancement}. + +\begin{figure}[t] + \centering + \includegraphics[width=0.5\textwidth]{Figures/zhao2023review2.png} + \caption{VIV suppression by (a) a single rotating rod and (b) two rotating rods. \cite{zhao2023review}} + \label{fig:zhao2023review2} +\end{figure} + +Despite the immense success and sophistication of AFC, a critical conceptual gap has persisted between its traditional application and the goals of cloaking. Conventional AFC research, while highly effective at tasks like drag reduction, has seldom ventured into the territory of perception management. The ambition to not merely optimize a local force or suppress a vibration, but to actively manipulate the entire downstream flow field to perfectly restore the undisturbed, free-stream conditions, represents a radically different and more demanding challenge. This goal, which defines hydrodynamic cloaking, requires the global cancellation of the object's entire hydrodynamic signature, including its velocity deficit, turbulence, and vortical structures. + +The immense complexity of this task, which involves controlling a high-dimensional, non-linear, and time-varying system, has made traditional model-based control approaches intractable. This challenge has naturally directed attention towards advanced, data-driven control paradigms, particularly Deep Reinforcement Learning (DRL). DRL offers a model-free framework capable of discovering sophisticated, non-intuitive control policies by directly interacting with a complex environment. A landmark study by Rabault et al. \cite{rabault2019artificial} first demonstrated the power of this approach, successfully training a DRL agent to manipulate jets on a cylinder to stabilize the Kármán vortex street and achieve an 8\% drag reduction at a Reynolds number of 100. + +Building on this methodological advance, the first explicit attempt to use AFC for hydrodynamic stealth was presented by Ren et al. \cite{ren2021bluff}. They employed a DRL agent to control a series of WSLB actuators on a cylinder with the express goal of hiding its hydrodynamic traces. Their results were remarkable: the DRL-trained policy learned to manipulate the flow in such a way that the velocity deficit in the near wake was reduced by 99.5\%, effectively erasing the most prominent signature of the cylinder's presence. While born from the lineage of drag and vibration control, their work represents the first tangible step towards true active hydrodynamic cloaking in a non-linear regime. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/ren2021bluff.png} + \caption{Left: Learning process represented by the variation of cost function values against episode number. The four insets show WSLB actuations generated by the DRL agent at different stages of the learning. Right: Instantaneous wake patterns and measured velocity profiles at the selected four stages. The progressive disappearance of velocity deficit well demonstrates the effectiveness of DRL trained wake control.\cite{ren2021bluff}} + \label{fig:ren2021bluff} +\end{figure} + +However, even with this breakthrough, the field remains in its infancy. While the work of Ren et al. \cite{ren2021bluff} represents a significant step towards active cloaking, the logical and far more complex extension—hydrodynamic illusion—remains virtually unexplored. The ability to not just erase a wake, but to actively sculpt it to convincingly mimic the hydrodynamic signature of a completely different object, requires an even greater level of precision and control. + +This dissertation aims to fill this void. We will advance the state-of-the-art by developing and implementing an AFC system capable of achieving not only robust hydrodynamic cloaking but also, for the first time, targeted hydrodynamic illusion in a non-linear, vortical flow environment. To achieve this ambitious goal, we will leverage a Deep Reinforcement Learning framework to discover control strategies for the complex, unsteady wake of cylinder. The specific design of this experimental and computational framework, and the precise formulation of the control problem, will be the subject of the following chapter. diff --git a/docs/My_Confirmation/Chapters/2.ProblemDescription.tex b/docs/My_Confirmation/Chapters/2.ProblemDescription.tex new file mode 100644 index 0000000..b247b1e --- /dev/null +++ b/docs/My_Confirmation/Chapters/2.ProblemDescription.tex @@ -0,0 +1,116 @@ +\chapter{Problem Description and Methodology} \label{Chap: problem} + +This chapter delineates the fundamental problem addressed in this dissertation: the active control of a complex, non-linear fluid flow to achieve hydrodynamic cloaking and illusion. We begin by outlining the overall research framework, which integrates a data-driven control agent with a high-fidelity fluid dynamics environment. Subsequently, we introduce the specific physical system under investigation—the "fluidic pinball"—and provide a detailed rationale for its selection as an ideal testbed. Finally, we connect this fundamental research to significant real-world challenges in marine engineering and bio-inspired stealth, establishing the broader context and potential impact of the work. + +\section{Overall Research Framework} + +The core of this investigation is a closed-loop control system designed to manipulate a complex fluid wake. This framework is conceptually divided into two principal components: + +The Control Agent: An intelligent agent based on Deep Reinforcement Learning (DRL). This agent's role is to learn, through a process of trial-and-error interaction with the environment, an optimal control policy. It receives information about the state of the fluid flow from a set of virtual sensors and, based on its learned policy, determines the appropriate actuation commands to achieve a specific objective (cloaking or illusion). + +The Fluid Environment: A high-fidelity numerical simulation of the fluidic pinball system. This environment, governed by the incompressible Navier-Stokes equations, serves as the physical world in which the DRL agent operates. It simulates the fluid dynamics resulting from the agent's actions and provides the sensory feedback necessary for the learning process. While current work is conducted in a numerical environment, the framework is designed to be directly translatable to a physical experiment. + +The synergy between these two components allows for the discovery of complex, non-intuitive control strategies that would be intractable to design using traditional model-based methods, paving the way for advanced wake engineering. + +\begin{figure}[t] + \centering + \includegraphics[width=0.85\textwidth]{Figures/framework.png} + \caption{DRL learning framework. DRL continuously controls the rotation and learns from interactions.} + \label{fig:framework} +\end{figure} + +\section{Fluidic Pinball: A Versatile Actuation and Sensing Platform} + +The physical system at the heart of this study is the fluidic pinball, a configuration that has emerged as a canonical and richly informative benchmark within the active flow control researches. + +The fluidic pinball consists of three identical circular cylinders of diameter $D$, arranged with their centers forming an equilateral triangle that points upstream. As detailed in the draft and illustrated below, the gap distance between adjacent cylinders is set to $0.5D$. This specific staggered arrangement creates a compact and highly interactive system. + +\begin{figure}[t] + \centering + \includegraphics[width=0.85\textwidth]{Figures/domain.pdf} + \caption{Geometry of the CFD environment.} + \label{fig:domain} +\end{figure} + +The computational domain $\Omega$ is a rectangular channel defined in Cartesian coordinates $(x,y)$, with the origin at the inlet centerline: + +\begin{equation}\label{eq:domain} +\Omega = \left\{ [x,y]^{\top} \in \mathbb{R}^2 : x \in [0,64], \, y \in [-12.8,12.8] \right\} \setminus \bigcup_{i=1}^{3} \mathcal{C}_i +\end{equation} + +where $\mathcal{C}_i$ represents the cylindrical regions satisfying $(x - x_i)^2 + (y - y_i)^2 \geq (D/2)^2$. The cylinder centers are positioned at: + +\begin{equation}\label{eq:pinball} +\begin{array}{lll} +\text{Front cylinder:} & x_1 = 30, & y_1 = 0 \\ +\text{Bottom cylinder:} & x_2 = 30 + 1.5\cos(30^\circ), & y_2 = -0.75 \\ +\text{Top cylinder:} & x_3 = 30 + 1.5\cos(30^\circ), & y_3 = 0.75 +\end{array} +\end{equation} + +This staggered arrangement creates a compact actuator array capable of redirecting fluid particles analogous to a pinball mechanism, hence the nomenclature "fluidic pinball". + +Boundary conditions are specified as follows: Uniform velocity $U_0$ at the center of inlet ($x=0, y=0$), zero-pressure outflow at the outlet ($x=64$), and no-slip conditions at the top/bottom walls ($y=\pm12.8$). Crucially, the cylinder surfaces employ no-slip boundary conditions with prescribed circumferential velocities: + +\begin{equation}\label{eq:cylinderboundary} +\mathbf{u}\big|_{\partial\mathcal{C}_i} = a_i \left( -\sin\theta_i, \cos\theta_i \right)^\top +\end{equation} + +where $\theta_i$ denotes the angular position relative to each cylinder's center. The control inputs $a = [a_1, a_2, a_3]^\top$ correspond to the rotational speeds of the front ($U_F$), bottom ($U_B$), and top ($U_T$) cylinders, with positive values indicating counter-clockwise rotation. This triple-actuation system provides independent control authority over shear layer development and vortex shedding patterns. + +Wake monitoring is achieved through three velocity sensors positioned downstream at: + +\begin{equation}\label{eq:sensors} +\begin{array}{lll} +\text{Sensor 1:} & x_4 = 40, & y_4 = -2 \\ +\text{Sensor 2:} & x_5 = 40, & y_5 = 0 \\ +\text{Sensor 3:} & x_6 = 40, & y_6 = 2 +\end{array} +\end{equation} + +These probes measure instantaneous velocity components $(u,v)$ to quantify flow restoration (cloaking) or wake replication (illusion) by comparing against reference fields. To evaluate control robustness under perturbed inflow conditions, auxiliary disturbance generators may be positioned upstream. For instance, a cylindrical bluff body of variable diameter may be placed at $(x_d,y_d) = (10,y_d)$ to generate Kármán vortex streets or isolated vortices that interact with the pinball system. The sensor data and disturbance configurations collectively establish the observability framework for evaluating hydrodynamic invisibility and wake deception performance. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/beem2015wake.png} + \caption{A schematic of a seal chasing a fish by using its whiskers to “feel” for the flow features left in the fish wake. \cite{beem2015wake}} + \label{fig:beem2015wake} +\end{figure} + +The velocity sensors are directly inspired by biological precedent. In aquatic ecosystems where vision is limited, hydrodynamic sensing is a primary tool for navigation and survival. Predators like harbor seals use their whiskers, and fish their lateral lines, to perceive the minute velocity and pressure fluctuations that constitute the wake of nearby organisms \cite{beem2015wake}. This natural reliance on flow-field information provides a strong justification for our use of velocity sensors as the basis for both feedback to the control agent and the evaluation of cloaking and illusion performance. By controlling the flow as perceived by these sensors, we are effectively managing the very hydrodynamic signature that a natural observer would detect. + +The flow is governed by the incompressible Navier-Stokes equations, and for the purposes of this study, all simulations are conducted at a Reynolds number of $Re_D = 50$. This regime is chosen to ensure the flow remains two-dimensional while being sufficiently complex to exhibit the rich vortex dynamics essential for this research. + +Control authority is achieved by independently rotating each of the three cylinders. The tangential velocity at the surface of each cylinder serves as a control input, $a = [a_1, a_2, a_3]^\top$, allowing for precise and independent manipulation of the shear layers separating from each body. This triple-actuation system is exceptionally versatile, enabling a wide range of control mechanisms. + +To monitor the downstream wake and provide feedback to the control agent, an array of three virtual velocity sensors is positioned downstream of the pinball configuration. These sensors measure the instantaneous velocity components, providing the necessary data to quantify the degree of flow restoration for cloaking or the fidelity of wake replication for illusion. + +The choice of the fluidic pinball is deliberate and strategic, motivated by its exceptionally rich and well-documented flow physics. As established in the comprehensive studies by Deng et al. \cite{deng2021galerkin} and others, the unforced fluidic pinball exhibits a surprisingly complex array of dynamic behaviors. As the Reynolds number is increased, the flow undergoes a series of bifurcations: it transitions from a globally stable steady state to a periodic, symmetric vortex shedding pattern via a supercritical Hopf bifurcation (at $Re_H \approx 18$), and subsequently to an asymmetric vortex shedding state after a pitchfork bifurcation (at $Re_{PF} \approx 68$). This progression results in a complex multi-attractor landscape with multiple stable and unstable solutions, making it a formidable and highly relevant challenge for any advanced control system. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/deng2021galerkin.png} + \caption{Lift coefficients at different Reynolds numbers (a) of the symmetric steady solutions us (black curve), the asymmetric steady (blue and red curve), the asymmetric steady solutions exemplified with the vorticity field at Re= 100 (b). \cite{deng2021galerkin}} + \label{fig:deng2021galerkin} +\end{figure} + +Furthermore, the controllability of the fluidic pinball is well-established. The independent rotation of the cylinders allows for the implementation of numerous fundamental control mechanisms, including stagnation point manipulation, boat-tailing effects, base bleed simulation, and the exploitation of the Magnus effect. The system's response to both open-loop and closed-loop control has been investigated for performance-based objectives. Notably, Feng et al. \cite{feng2023control} successfully applied both brute-force search and DRL to discover control strategies for minimizing and tracking the hydrodynamic forces (lift and drag) on the pinball. This body of work provides a strong foundation, confirming the pinball as an ideal platform to explore the next frontier of flow manipulation. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/feng2023control.png} + \caption{Result of DRL-based flow control for forces tracking. The $C_{D0}$ in the time domain for four force tracking problems, vortical wake visualization of the last time step after convergence, and the corresponding actions generated by agents. (A) The changing of $C_{D0}$ that retain at 0, 1, 2, and 3 sharing the same legend. (B), (C), (D), (E) The vortical wake extracted in the last time step from four tests, respectively, sharing the same color bar in subfigure A and the corresponding actions. \cite{feng2023control}} + \label{fig:feng2023control} +\end{figure} + +\section{Control Objective} + +This research pivots from the traditional AFC paradigm of force optimization to the novel and more ambitious goal of comprehensive wake engineering. While prior work, such as that of Feng et al. \cite{feng2023control}, focused on manipulating integrated quantities like lift and drag, this research addresses the far more complex challenge of controlling the entire spatio-temporal structure of the downstream flow field. Our objectives are twofold: + +Hydrodynamic Cloaking: To discover and implement an active control policy that commands the three rotating cylinders to effectively cancel the pinball's intrinsic wake. The goal is to restore the downstream flow characteristics to a state that is nearly indistinguishable from the undisturbed background flow, thereby rendering the object hydrodynamically "invisible" to downstream observers. + +Hydrodynamic Illusion: To extend the concept of control beyond mere cancellation. Here, the objective is to actively sculpt the pinball's wake so that it convincingly mimics the hydrodynamic signature of a different object. This involves not only matching the overall flow field but also replicating key identifying features, such as the characteristic vortex shedding frequency (Strouhal number) of the target object, effectively creating a hydrodynamic disguise. + +The primary application of this research lies in advancing the capabilities of underwater vehicles through hydrodynamic stealth and deception. The ability to actively cloak a vehicle's wake, or to generate an illusion that makes it appear as a different, non-threatening object, has direct and significant implications for the design of next-generation low-observability platforms for defense, scientific research, and environmental monitoring. This work addresses the broader challenge of managing disruptive hydrodynamic wakes, a problem of consequence in many marine applications. For instance, large offshore infrastructure is known to fundamentally alter local hydrodynamics, which can impact sensitive ecosystems \cite{bugnot2021current, degraer2020offshore}. While mitigating such large-scale environmental effects is a potential long-term goal, the immediate utility of the precision control demonstrated herein is in providing mobile underwater systems with an unprecedented ability to manage their hydrodynamic presence. + +We will demonstrate the systematic achievement of these objectives across a spectrum of increasingly complex background flows, including a steady uniform flow, a periodic Kármán vortex street, and a transient, non-periodic isolated vortex. \ No newline at end of file diff --git a/docs/My_Confirmation/Chapters/3.Methodology.tex b/docs/My_Confirmation/Chapters/3.Methodology.tex new file mode 100644 index 0000000..e666186 --- /dev/null +++ b/docs/My_Confirmation/Chapters/3.Methodology.tex @@ -0,0 +1,236 @@ +% \chapter{Methodology} \label{Chap: methodology} + +\section{Numerical Environment} + +In this study, the flow dynamics is described by the incompressible NS equations with a force term + +\begin{equation} +\begin{gathered} +\nabla \cdot \boldsymbol{u}=0, \\ +\rho_f\left(\frac{\partial \boldsymbol{u}}{\partial t}+\boldsymbol{u} \cdot \nabla \boldsymbol{u}\right)=-\nabla p+\mu \nabla^2 \boldsymbol{u}+\boldsymbol{f}_e, +\end{gathered} +\end{equation} + +Where $\rho_f$ is the fluid density, $mu$ is the dynamic viscosity, $p$ the pressure, $\bf{u}$ the velocity, and $\bf{f}_e$ the body force acting on the fluid by the structure. $\rho_f$ is the fluid density, $mu$ is the dynamic viscosity, $p$ the pressure, $\bf{u}$ the velocity, and $\bf{f}_e$ the body force acting on the fluid by the structure. + +The hydrodynamic simulations are performed using the lattice Boltzmann method (LBM), a mesoscopic approach particularly suited for unsteady flow simulations involving complex boundaries and moving interfaces. The method solves the discrete Boltzmann equation with collision and streaming processes governed by the multi-relaxation-time (MRT) formulation, which enhances numerical stability compared to single-relaxation-time models. The He–Luo velocity model is adopted to ensure strict incompressibility conditions at low Mach numbers, with the discrete evolution equation expressed as: + +\begin{equation} +\begin{gathered} +f_i(\mathbf{x} + \mathbf{c}_i \Delta t, t + \Delta t) - f_i(\mathbf{x}, t) = -\mathbf{M}^{-1} \mathbf{S} \left[ \mathbf{m}(\mathbf{x},t) - \mathbf{m}^{(eq)}(\mathbf{x},t) \right] +\end{gathered} +\end{equation} + +where $f_i$ denotes the particle distribution function along the $i$-th discrete velocity direction $\mathbf{c}_i$, $\mathbf{M}$ is the transformation matrix mapping distribution functions to moment space, and $\mathbf{S}$ is the diagonal relaxation matrix. The equilibrium moments $\mathbf{m}^{(eq)}$ are constructed to recover the incompressible Navier-Stokes equations through Chapman-Enskog expansion. A D2Q9 lattice structure is employed for two-dimensional simulations, with the lattice speed $c_s = c/\sqrt{3}$ where $c = \Delta x / \Delta t$ defines the ratio of lattice spacing to time step. + +\begin{figure}[t] + \centering + \includegraphics[width=0.50\textwidth]{Figures/d2q9.png} + \caption{Lattice arrangement for D2Q9 scheme.} + \label{fig:d2q9} +\end{figure} + +Figure~\ref{fig:domain} illustrates the computational domain and boundary condition implementation. The primary simulation domain spans $1280 \times 512$ lattice units. Inflow boundary conditions at $x=0$ implement a Dirichlet velocity specification through a modified bounce-back scheme with momentum correction, enforcing $u_x = U_0 = 0.01c$ and $u_y = 0$. Top and bottom walls at $y = \pm 12.8D$ employ analogous bounce-back treatments for no-slip conditions. At the outflow boundary ($x = 64D$), a convective condition is imposed: + +\begin{equation} +\begin{gathered} +\frac{\partial \phi}{\partial t} + U_0 \frac{\partial \phi}{\partial x} = 0 +\end{gathered} +\end{equation} + +where $\phi$ represents velocity components, effectively minimizing vorticity reflections. The cylindrical surfaces utilize curvilinear boundary treatments based on the ghost-node interpolation method, which has demonstrated second-order spatial accuracy in previous studies. This approach reconstructs distribution functions at boundary-intersected links using Lagrangian interpolation, maintaining consistency with the no-slip condition for arbitrarily rotating cylinders. The rotational velocity at cylinder surfaces is imposed through the interpolated boundary velocity in the bounce-back scheme, with the circumferential velocity $\mathbf{u}_{\text{wall}} = a_i (-\sin\theta, \cos\theta)^\top$ for the $i$-th cylinder as defined in last chapter. + +% \begin{table} +% \begin{center} +% \def~{\hphantom{0}} +% \begin{tabular}{lccc} +% $D/\delta x$ & $C_D$ & $C_L$ & $St$ \\[3pt] +% 10 & $xxxx\pm~xx$ & $\pm~xxxx$ & xxxx\\ +% 20 & $xxxx\pm~xx$ & $\pm~xxxx$ & xxxx\\ +% 40 & $xxxx\pm~xx$ & $\pm~xxxx$ & xxxx\\ +% \end{tabular} +% \caption{Mesh convergence results} +% \label{tab:mesh} +% \end{center} +% \end{table} + +% Mesh convergence studies were conducted to determine appropriate spatial resolution, with results summarized in Table~\ref{tab:mesh}. Three resolutions were evaluated at $Re_D = 50$: $D/\delta x = 10$, $20$, and $40$, where $\delta x$ denotes lattice spacing. Key hydrodynamic parameters including mean drag coefficient $\overline{C_D}$, root-mean-square lift coefficient $C_{L,\text{rms}}$, and Strouhal number $St$ were compared against benchmark data from previous investigations. The medium resolution ($D/\delta x = 20$) provided optimal balance between computational efficiency and accuracy, with relative errors below x\% for all monitored parameters compared to high-resolution simulations. This resolution was consequently adopted for the extensive reinforcement learning training phase. For final deterministic validation runs, the high-resolution mesh ($D/\delta x = 40$) was employed to ensure solution fidelity. + +\begin{figure}[t] + \centering + \includegraphics[width=0.85\textwidth]{Figures/architecture.png} + \caption{Research environment framework.} + \label{fig:architecture} +\end{figure} + +To address the competing demands of computational accuracy and training efficiency in deep reinforcement learning applications, a specialized GPU-accelerated solver was developed. This implementation employs a hybrid architecture coupling CUDA C kernels for performance-critical computations with Python-based orchestration. During initialization, Python dynamically generates configuration-specific CUDA kernel code based on user-defined parameters, including collision operator selection (MRT in this study) and boundary condition types. The PyCUDA framework compiles these kernels to PTX code at runtime and manages all host-device memory transfers. During simulation execution, control variables are asynchronously transferred to the GPU via PyCUDA streams, allowing concurrent computation and data movement. This design achieves approximately 90\% GPU utilization efficiency by overlapping data transfers with kernel execution. The Python layer maintains full control over simulation state, enabling runtime modification of domain geometry, physical parameters, or even fundamental algorithms without process restart. This capability proves particularly valuable for reinforcement learning workflows, where environmental interactions require dynamic adaptation. On the specified hardware platform (AMD EPYC 7302 CPU with NVIDIA V100 GPU), this implementation completes one pinball flow-through period (approximately xxxx time steps) in under x minutes at training resolution, and approximately x minutes at high resolution for validation cases. While this framework offers significant advantages in flexibility and integration with machine learning ecosystems, certain limitations warrant acknowledgment. Dynamic kernel compilation introduces initial overhead during startup phases, though this becomes negligible in long-running simulations. Frequent host-device communication, while optimized through stream concurrency, may impose bottlenecks for extreme-scale problems exceeding available GPU memory. Furthermore, the dependency on PyCUDA may present compatibility challenges in high-performance computing environments requiring pure MPI implementations. Despite these constraints, the architecture delivers an effective compromise between computational performance and research flexibility, particularly suited for data-driven fluid dynamics investigations. + +\section{Deep Reinforcement Learning} + +The task of achieving hydrodynamic cloaking and illusion in the non-linear, multi-attractor regime of the fluidic pinball presents a formidable control problem. The system is characterized by a high-dimensional state space, strong non-linearities, and complex, time-delayed responses to actuation. Traditional model-based control methods are ill-suited for this challenge, as deriving an accurate and tractable analytical model of the wake dynamics is practically impossible. Consequently, a data-driven, model-free approach is not only advantageous but essential for discovering the sophisticated control policies required. + +\begin{figure}[t] + \centering + \includegraphics[width=0.85\textwidth]{Figures/brunton2020machine2.png} + \caption{Machine learning algorithms may be categorized into supervised,unsupervised,and semisupervised,depending on the extent and type of information available for the learning process. Abbreviations: PCA,principal component analysis; POD,proper orthogonal decomposition. \cite{brunton2020machine}} + \label{fig:brunton2020machine2} +\end{figure} + +The application of machine learning to fluid dynamics is not a recent phenomenon, with early uses in flow-field analysis dating back to the 1990s. In the context of feedback control, several data-driven paradigms have been explored. Pioneering work by Lee et al. \cite{lee1997application} successfully employed Neural Networks (NNs) for turbulence control, demonstrating their theoretical power to approximate arbitrary non-linear control laws. However, this flexibility often comes at the cost of exorbitant computational or experimental resources needed to optimize a vast number of parameters. Other methods, such as Genetic Algorithms (GAs), have also been deployed but typically require the structure of the control law to be prespecified, limiting their ability to discover truly novel strategies in problems with complex, unknown dynamics. + +In recent years, Reinforcement Learning (RL), and particularly its deep learning variant, Deep Reinforcement Learning (DRL), has emerged as a transformative approach for such complex control problems. Its success has rapidly expanded from games to challenging physical systems, including robotics, autonomous flight, and the simulation of biological locomotion. Unlike supervised learning, which requires labeled data, or the aforementioned methods that may require some prior system knowledge, RL learns an optimal policy through direct, trial-and-error interaction with its environment. This "end-to-end" learning capability is perfectly suited for discovering control strategies in systems where the underlying physics are too complex to model explicitly. As noted by Brunton et al. \cite{brunton2020machine}, the success of RL in fluid mechanics is critically dependent on a thoughtful formulation of the problem, where the states, actions, and rewards are chosen to reflect the governing physical mechanisms. + +In light of these advantages, this dissertation adopts a DRL framework to tackle the challenges of hydrodynamic cloaking and illusion. This approach allows the control system to autonomously discover effective manipulation strategies for the fluidic pinball's rotational actuators, navigating the complex flow physics to achieve the desired global wake structure without any prior knowledge of the governing equations. + +The control strategy for hydrodynamic cloaking and wake illusion is formulated through a DRL paradigm, distinguished from conventional model-based approaches by its independence from prior fluid dynamic knowledge. This model-free methodology employs proximal policy optimization (PPO), an actor-critic algorithm particularly effective for continuous action spaces. The learning process evolves through iterative interactions between the DRL agent and the fluidic environment, commencing with randomized exploratory actions and progressively refining control policies via reward-driven optimization. As depicted in Fig.~\ref{fig:framework}, the framework comprises three fundamental components: (i) the environment state $s_t$ captured by velocity sensors (\ref{eq:sensors}) and instantaneous hydrodynamic forces acting on the pinball; (ii) the control action $a_t = [U_F, U_B, U_T]^\top$ dictating rotational velocities of the three cylinders; and (iii) the reward function $r_t$ quantifying control performance. + +\begin{figure}[t] + \centering + \includegraphics[width=0.75\textwidth]{Figures/brunton2020machine1.png} + \caption{Deep reinforcement learning scheme \cite{brunton2020machine}} + \label{fig:brunton2020machine1} +\end{figure} + +A critical innovation resides in the neural network architecture, where sinusoidal activation functions ($\sin$, $\cos$) replace conventional ReLU or tanh units. This design is motivated by the spectral characteristics of vortex-dominated flows, as demonstrated in Fig.~\ref{fig:act_func} through periodic signal reconstruction tests. Standard activations exhibit significant phase errors and amplitude decay when approximating vortical signatures, whereas trigonometric functions preserve spectral fidelity with mean squared errors reduced by x\% compared to next-best alternatives. The actor and critic networks thus adopt the form: + +\begin{equation} +\begin{gathered} +h_1 = \sin(\mathbf{W}_1 s_t + \mathbf{b}_1), \quad h_2 = \cos(\mathbf{W}_2 h_1 + \mathbf{b}_2), \quad a_t = \mathbf{W}_a h_2 + \mathbf{b}_a +\end{gathered} +\end{equation} + +where $\mathbf{W}$ and $\mathbf{b}$ denote trainable weights and biases, enabling explicit representation of phase-dependent flow features essential for vortex synchronization. + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.75\textwidth]{Figures/act_func.pdf} + \caption{Activation function affecting NN performance} + \label{fig:act_func} +\end{figure} + +The reward function constitutes the second pivotal innovation, addressing the fundamental challenge of perceptual manipulation in fluid flows. Rather than relying solely on delayed sensor-based metrics, we integrate direct force measurements with flow similarity assessments to accelerate policy convergence. For hydrodynamic cloaking, the reward combines force minimization and sensor alignment: + +\begin{equation} +\begin{gathered} +r_{\text{cloak}} = \exp\left( -w_{C_D} \left| \sum_{i=1}^3 C_{D_i} \right| - w_{C_L} \left| \sum_{i=1}^3 C_{L_i} \right| - w_D \sum_{j=1}^3 \mathcal{D}(v_j, v_j^{\text{ref}}) \right) +\end{gathered} +\end{equation} + +where $C_{D_i}$, $C_{L_i}$ are drag and lift coefficients of individual cylinders, $v_j$ denotes velocity at sensor $j$, and $\mathcal{D}$ quantifies the dynamic time warping (DTW) distance between measured and reference signals. The exponential form creates a steep reward gradient near optimal states, simultaneously satisfying physical constraints (vanishing net force implies minimal flow disturbance) and perceptual objectives (sensor alignment ensures invisibility to downstream observers). + +For wake illusion, the reward structure maintains analogous components but replaces force minimization with target matching: + +\begin{equation} +\begin{gathered} +r_{\text{illusion}} = \exp\left( -w_F \left| \| \mathbf{F}_{\text{pinball}} \| - \| \mathbf{F}_{\text{target}} \| \right| - w_D \sum_{j=1}^3 \mathcal{D}(v_j, v_j^{\text{target}}) \right) +\end{gathered} +\end{equation} + +where $\mathbf{F}_{\text{target}}$ corresponds to hydrodynamic forces on the emulated cylinder. + +Training proceeds in discrete episodes, each spanning $400T_0$ ($T_0 = D/U_0$) to encompass multiple vortex shedding cycles. State observations and control updates occur at $0.8T_0$ intervals, balancing responsiveness with computational tractability. The PPO algorithm updates policy parameters $\theta$ by maximizing the clipped objective: + +\begin{equation} +\begin{gathered} +\mathcal{L}(\theta) = \mathbb{E}_t \left[ \min\left( \rho_t(\theta) \hat{A}_t, \text{clip}(\rho_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right] +\end{gathered} +\end{equation} + +where $\rho_t$ is the probability ratio between new and old policies, $\hat{A}_t$ denotes advantage estimates from the critic network, and $\epsilon=0.2$ prevents destabilizing updates. Upon convergence (typically after $10^3$ episodes), deterministic control enforces the mean action $a_t = \mathbb{E}[ \pi_\theta(s_t) ]$ without exploratory noise, ensuring reproducible performance in validation studies. This framework effectively bridges short-term physical constraints with long-term perceptual objectives, enabling the discovery of non-intuitive control strategies for complex flow manipulation. + +\begin{table} + \begin{center} +\def~{\hphantom{0}} + \begin{tabular}{lc} + Parameter & Value/Method \\[3pt] + Network architecture (actor and critic) & $64 \times 64$ \\ + Activation function & Sin \\ + Actuations per $T_0$ & 1.25 \\ + Length of each episode & $600 T_0$ \\ + Optimizer & Adam \\ + Learning rate (actor) & $3 \times 10^{-4}$ \\ + Learning rate (critic) & $4 \times 10^{-4}$ \\ + \end{tabular} + \caption{Hyper-parameters used in the DRL} + \label{tab:drl} + \end{center} +\end{table} + +\section{Dynamic Time Warping} + +The analysis of time-ordered data is a cornerstone of modern science and engineering, with applications spanning a vast array of disciplines. A fundamental challenge in this domain is quantifying the similarity between two temporal sequences, especially when these sequences are subject to temporal distortions such as stretching, compression, or phase shifts. While simple point-wise distance metrics like the Euclidean distance are effective for sequences of identical length and perfect alignment, they often fail in real-world scenarios where processes may unfold at varying rates. For instance, the same word may be spoken at different speeds, a person's signature may be written faster or slower, or a biological process may progress at different rates in different individuals. To address this challenge, a more robust and flexible similarity measure is required. + +One of the most powerful and widely adopted solutions to this problem is the Dynamic Time Warping (DTW) algorithm. First introduced in the context of speech recognition by Sakoe and Chiba \cite{sakoe1978dynamic}, DTW is a dynamic programming-based method that finds the optimal non-linear alignment between two time series. Instead of comparing the i-th point of one sequence to the i-th point of another, DTW calculates an optimal "warping path" that maps the time axis of one sequence to the other, minimizing the cumulative distance between their corresponding, aligned points. This ability to non-linearly warp time allows DTW to find the true similarity between two sequences, irrespective of temporal misalignments. + +The versatility and effectiveness of DTW have led to its adoption far beyond its origins in speech processing. It has become an essential tool in fields requiring robust pattern matching in time-series data. Notable applications include the recognition of online handwriting and signatures, where individual writing speeds can vary significantly \cite{tappert1990state}, and in gesture recognition from video feeds, where movements may not be perfectly synchronized \cite{corradini2001dynamic}. In bioinformatics, DTW has proven superior to simple clustering for aligning gene expression time series, enabling researchers to map corresponding biological states even when they unfold at different rates \cite{aach2001aligning}. Furthermore, the algorithm is a key component in modern information retrieval systems, such as query-by-humming song recognition \cite{zhu2003warping}, time-series database searching \cite{zhu2003warping}, and time-series clustering \cite{niennattrakul2007clustering}, solidifying its status as a fundamental algorithm for analyzing dynamic, time-ordered data. + +The objective of DTW is to compare two sequences, \(X=\left(x_{1}, x_{2}, \ldots, x_{N}\right)\) and \(N \in \mathbb{N}\). In our context, $X$ represents the time series of velocity vectors from the target flow (e.g., the undisturbed vortex street or the wake of a target cylinder), and $Y$ is the corresponding time series from our DRL-controlled flow. The elements $x_n$ and $y_m$ are the velocity vectors $(u_x, u_y$ recorded by the sensors at discrete time steps. + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.85\textwidth]{Figures/dtw1.png} + \caption{(a) Illustration of a warping path and (b) its interpretation for some sequence $X$ of length $N = 9$ and some sequence $Y$ of length $M = 7$. Each cell $(n, m)$ belonging to the warping path is indicated by a red dot and corresponds to an alignment between the elements $x_n$ and $y_m$ indicated by a red bidirectional arrow. \cite{muller2015fundamentals}} + \label{fig:dtw1} +\end{figure} + +The first step is to define a local cost measure, $c(x_n,y_m)$, which quantifies the dissimilarity between any two points in the sequences. For our vector-valued velocity data, the Euclidean distance is a natural choice: + +\begin{equation} +\begin{gathered} +c(x_n,y_m)=\|x_n-y_m\| +\end{gathered} +\end{equation} + +Evaluating this cost for every pair of elements from $X$ and $Y$ yields and $N\times M$ cost matrix, $C$, where $C(n,m)=c(x_n, y_m)$. This matrix represents the landscape of local dissimilarities between the two signals. Regions of low cost (dark areas in visualizations) indicate moments where the two signals are locally similar. The goal of DTW is to find an optimal alignment, or warping path, through this cost matrix. A warping path $P=(p_1,\dots,p_L)$ is a sequence of index pairs $p_\ell=(n_\ell,m_\ell)$ that maps the indices of $X$ to the indices of $Y$. This path must satisfy three critical conditions: + +\begin{equation} +\begin{aligned} +&\text{Boundary condition: }p_{1}=(1,1) \text{ and } p_{L}=(N, M).\\ +&\text{Monotonicity condition: }n_{1} \leq n_{2} \leq \ldots \leq n_{L} \text{ and } m_{1} \leq m_{2} \leq \ldots \leq m_{L}.\\ +&\text{Step size condition: }p_{\ell+1}-p_{\ell} \in\{(1,0),(0,1),(1,1)\} \text{ for } \ell \in[1: L-1].\\ +\end{aligned} +\end{equation} + +The total cost of a given warping path $P$ is the sum of the local costs of all the cells it passes through: + +\begin{equation} +\begin{gathered} +c_{P}(X, Y)=\sum_{\ell=1}^{L} \mathbf{C}\left(n_{\ell}, m_{\ell}\right) . +\end{gathered} +\end{equation} + +An optimal warping path, $P^\star$, is the path that minimizes this total cost. The DTW distance, denoted as $\operatorname{DTW}(X,Y)$, is formally defined as the total cost of this optimal path: + +\begin{equation} +\begin{gathered} +\operatorname{DTW}(X, Y) =c_{P^{*}}(X, Y)=\min \left\{c_{P}(X, Y) \mid P \text { is an }(N, M) \text { warping path }\right\} . +\end{gathered} +\end{equation} + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.85\textwidth]{Figures/dtw2.png} + \caption{DTW algorithm based on dynamic programming. \cite{muller2015fundamentals}} + \label{fig:dtw2} +\end{figure} + +While the number of possible warping paths is exponential, the optimal path and its cost can be found efficiently in $O(NM)$ time using dynamic programming. This method works by building up an accumulated cost matrix, $\mathbf{D}$, where each element $\mathbf{D}(n,m)$ stores the minimum accumulated cost for aligning the prefixes $X(1:n)$ and $Y(1:m)$. The matrix $\mathbf{D}$ is computed recursively: + +\begin{equation} +\begin{aligned} +\mathbf{D}(n, m)=\mathbf{C}(n, m)+\min \left\{\begin{array}{l} +\mathbf{D}(n-1, m-1) \\ +\mathbf{D}(n-1, m) \\ +\mathbf{D}(n, m-1) +\end{array}\right. +\end{aligned} +\end{equation} + +The final DTW distance is the value in the top-right corner of this matrix, $\operatorname{DTW}(X,Y)=\mathbf{D}(N,M)$. Once the accumulated cost matrix is computed, the optimal warping path $P^\star$ can be found by backtracking from $(N,M)$ to $(1,1)$, at each step choosing the neighboring cell that led to the minimum accumulated cost. + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.85\textwidth]{Figures/dtw3.pdf} + \caption{The DTW algorithm exhibits broad sensitivity to various types of signal distortion.} + \label{fig:dtw3} +\end{figure} \ No newline at end of file diff --git a/docs/My_Confirmation/Chapters/4.Result.tex b/docs/My_Confirmation/Chapters/4.Result.tex new file mode 100644 index 0000000..bfee4a4 --- /dev/null +++ b/docs/My_Confirmation/Chapters/4.Result.tex @@ -0,0 +1,348 @@ +\chapter{Preliminary Results and Discussion} \label{Chap: result} + +Having established the theoretical background, problem formulation, and the DRL methodology, this chapter presents the empirical validation of our framework for active hydrodynamic control. The following sections provide concrete evidence of the DRL agent's ability to achieve both robust hydrodynamic cloaking and targeted wake illusion using the fluidic pinball platform. The results demonstrate not only the success of the control strategies but also explore the boundaries of their effectiveness, providing critical insights into the capabilities and limitations of this approach. + +This chapter systematically presents the results, organized into four key sections that progressively build in complexity from foundational proof-of-concept to advanced applications and preliminary experimental work. + +First, the investigation commences with the foundational challenge of hydrodynamic cloaking in a steady, parabolic inflow. In this baseline scenario, the primary objective is to actively manipulate the flow to eliminate the pinball's characteristic wake, thereby restoring the downstream velocity profile and nullifying the net hydrodynamic forces exerted on the body. This section will demonstrate the DRL agent's ability to rapidly learn an effective control policy that minimizes the pinball's hydrodynamic signature. + +Building upon this foundation, the second section addresses the more demanding task of hydrodynamic cloaking in complex, unsteady background flows. Here, the robustness and adaptability of the DRL controller are rigorously tested against a variety of dynamic inflow conditions. We will present results for cloaking in the presence of a periodic Kármán vortex street generated by an upstream cylinder, as well as for transient events corresponding to a passing dipole vortex and an isolated monopole vortex. Furthermore, this section will analyze the influence of key physical parameters by examining the cloaking performance across a range of Reynolds numbers and for different disturbance-generating cylinder diameters, discussing the implications for the controller's generalization capabilities. + +The third section transitions from the concept of invisibility to that of active deception, presenting our findings on hydrodynamic illusion. Operating in a steady background flow, we demonstrate the DRL agent's ability to command the fluidic pinball to generate downstream wakes that convincingly mimic the distinct signatures of isolated bluff bodies. We will show that the controller can successfully replicate the wake structures and, crucially, the characteristic vortex shedding frequencies of target cylinders of various sizes and at different Reynolds numbers, effectively creating a hydrodynamic disguise. + +Finally, to bridge the gap between numerical simulation and physical reality, the fourth section details our preliminary experimental design and validation efforts. This section will introduce the design of a custom towing test platform for a water tunnel, developed to replicate the numerical setup. We will discuss the integration of control hardware, sensors, and the DRL inference module, as well as our initial attempts at flow field measurement using Particle Image Velocimetry (PIV). This part will candidly address the significant engineering challenges encountered, particularly with sensor noise, and outline the ongoing work to refine the experimental apparatus for future validation. + +\section{Cloaking in Steady Flow} + +We begin by establishing a baseline for the controller's performance in the most fundamental scenario: cloaking the fluidic pinball in a steady, uniform background flow. While previous studies have achieved similar outcomes with a focus on drag reduction, this section serves as a crucial proof-of-concept for our DRL framework, demonstrating its ability to learn a control policy aimed specifically at wake cancellation and force nullification. + +The objective in this scenario is straightforward, as illustrated in the conceptual framework in \fref{fig:schematic_cloak_steady}. The DRL agent must learn to actuate the three rotating cylinders of the pinball in such a way that the steady inflow passes through the system's domain as if the pinball were not present, resulting in a restored steady outflow. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/schematic_cloak_steady.pdf} + \caption{Conceptual framework for hydrodynamic cloaking in a steady background flow. The DRL agent controls the fluidic pinball to transform the disturbed wake back into the original uniform inflow state, as measured by downstream sensors.} + \label{fig:schematic_cloak_steady} +\end{figure} + +The efficacy of the DRL-derived control policy is immediately apparent in the vorticity fields shown in \fref{fig:on&off_cloak_steady}. The top panel depicts the uncontrolled case, where the stationary pinball generates a classic, unsteady von Kármán vortex street. This shedding process creates a significant wake, fundamentally altering the downstream flow. The velocity profile at the downstream sensor plane is visibly distorted compared to the clean parabolic profile at the inlet. In stark contrast, the bottom panel shows the result once the DRL control is activated. The agent successfully learns to rotate the cylinders to completely suppress vortex shedding, resulting in a smooth, steady flow field that appears to pass through the pinball region unperturbed. The downstream velocity profile is visually restored to match the inlet condition, providing the first qualitative evidence of successful cloaking. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.75\textwidth]{Graphs/on&off_cloak_steady.png} + \caption{Comparison of vorticity contours with and without DRL-based control in a steady flow. Velocity profiles at the inlet and downstream sensor planes are indicated by arrows. (Top) The uncontrolled pinball generates a distinct vortex street, disrupting the downstream flow. (Bottom) The controlled pinball suppresses vortex shedding, maintaining a steady wake and restoring the downstream velocity profile.} + \label{fig:on&off_cloak_steady} +\end{figure} + +To quantify this observation, \fref{fig:velo_profile} presents a detailed comparison of the velocity profiles at the upstream inlet and the downstream sensor plane. The top panels, corresponding to the uncontrolled case, reveal a significant disruption in the downstream velocity profile, with the relative error in the x-component of velocity exceeding 40\% in the center. Conversely, the bottom panels demonstrate the remarkable performance of the controlled system. The downstream velocity profile closely tracks the original inflow profile, with the relative error contained entirely within a 10\% margin across the cross-section. This confirms that the controller is not merely stabilizing the wake but is actively restoring the flow field. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/velo_profile.pdf} + \caption{Quantitative analysis of downstream velocity profile restoration. The plots compare the x-component of velocity and the relative error against the inflow profile for the uncontrolled (top) and controlled (bottom) cases. The DRL controller significantly reduces the downstream velocity deficit.} + \label{fig:velo_profile} +\end{figure} + +The mechanism behind this successful cloaking is revealed by analyzing the control actions and the resulting hydrodynamic forces, shown in \fref{fig:action&force_cloak_steady}. The left panel displays the time series of the tangential velocities for the three cylinders. The right panel shows the net forces acting on the pinball assembly. During the initial uncontrolled period (highlighted in blue), the pinball experiences significant oscillating lift forces due to vortex shedding and a substantial mean drag force. Upon activation of the DRL controller, both the lift and drag forces are rapidly driven to near-zero values. Intriguingly, the controller learns to generate a small amount of net thrust (negative drag). We hypothesize that this is a necessary component of perfect cloaking; the agent discovered that to make the flow downstream identical to the flow upstream, it must not only suppress its own wake but also inject a small amount of momentum into the flow to compensate for the viscous drag inherent to its physical presence. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action&force_cloak_steady.pdf} + \caption{Control actuation signals and resulting hydrodynamic forces. (Left) Time series of the tangential velocities for the cylinders. (Right) Time series of the net lift and drag coefficients. The controller rapidly nullifies both lift and drag, even generating a slight thrust to achieve a zero-drag state.} + \label{fig:action&force_cloak_steady} +\end{figure} + +In summary, these results conclusively demonstrate that our DRL framework can successfully learn a control policy to achieve hydrodynamic cloaking in a steady flow. However, as this represents a foundational case, the true measure of the system's intelligence and robustness lies in its ability to handle more complex and realistic scenarios. We therefore now transition to the far more challenging problem of cloaking within dynamic, unsteady background flows. + +\section{Cloaking in Unsteady Flow} + +This section elevates the complexity of the control task by subjecting the fluidic pinball to various unsteady inflow conditions. The objective is no longer to maintain a steady outflow but to ensure that pre-existing, complex flow structures pass by the pinball as if it were transparent. + +We first investigate the case where the inflow is a periodic Kármán vortex street, generated by a stationary cylinder placed upstream with a diameter double to that of a single pinball cylinder. The goal, depicted in \fref{fig:schematic_cloak_vortex}, is for the DRL agent to manipulate the pinball's rotation such that the incoming vortex street passes through and is reconstituted downstream with its structure and frequency intact. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/schematic_cloak_vortex.pdf} + \caption{Conceptual framework for cloaking in an unsteady background flow. The objective is to control the pinball such that the incoming vortex street passes through the control region and is restored downstream, maintaining its original structure.} + \label{fig:schematic_cloak_vortex} +\end{figure} + +\fref{fig:vort_cloak_vortex} provides a visual comparison of the system's result. The top panel shows the target flow field: an undisturbed vortex street. The bottom panel shows the uncontrolled case, where the pinball completely shreds the incoming vortices, creating a chaotic and unrecognizable downstream wake. The middle panel, however, showcases the remarkable success of the DRL controller. The incoming vortices appear to pass directly through the pinball assembly, with their shape, size, and spacing preserved almost perfectly. The contour lines of zero vorticity flow smoothly through the control region, visually demonstrating the cloaking effect. This qualitative observation is supported by quantitative metrics: similarity score between the controlled and target sensor signals reaches 89.6\%, a dramatic improvement from the 0.56\% similarity of the uncontrolled case. Furthermore, the Strouhal number of the wake, which is distorted to 0.086 in the uncontrolled case, is restored to 0.138, perfectly matching the target and correcting a 37.7\% error. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/vort_cloak_vortex.pdf} + \caption{Vorticity contours demonstrating cloaking performance in an incoming vortex street. Panels show the target flow (top), the DRL-controlled flow (middle), and the uncontrolled flow (bottom). The controlled pinball preserves the structure of the passing vortices, which are otherwise destroyed.} + \label{fig:vort_cloak_vortex} +\end{figure} + +The error fields, shown in \fref{fig:error_cloak_vortex}, quantify the difference between the achieved flow fields and the target. For the uncontrolled pinball (bottom), massive errors exceeding 50\% and even 100\% contaminate the entire downstream domain. In contrast, the DRL-controlled case (top) successfully confines the significant error to the immediate vicinity of the cylinders themselves, with the downstream error remaining largely below 30\%. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/error_cloak_vortex.pdf} + \caption{Instantaneous error fields relative to the target flow. (Top) The DRL-controlled case confines significant error to the pinball's surroundings. (Bottom) The uncontrolled case results in large, persistent errors throughout the downstream wake.} + \label{fig:error_cloak_vortex} +\end{figure} + +Analysis of the sensor signals provides further insight into the system dynamics. The phase portraits in \fref{fig:sensor_cloak_vortex} plot the velocity components at the three sensor locations. The uncontrolled signals (right) are chaotic and non-repeating, bearing no resemblance to the stable cycles of the target flow (top). The DRL-controlled signals (left), while not perfectly matching the target's shape and position, form stable, periodic cycles, indicating that the controller has successfully stabilized the downstream dynamics into the correct periodic state. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/sensor_cloak_vortex.pdf} + \caption{Phase portraits of sensor velocity signals ($u_y$ vs. $u_x$) for the target flow (top), the DRL-controlled flow (left), and the uncontrolled flow (right). The controller restores the periodic cycle behavior of the downstream wake.} + \label{fig:sensor_cloak_vortex} +\end{figure} + +The frequency content of these signals, analyzed via Fast Fourier Transform (FFT) in \fref{fig:freq_cloak_vortex}, confirms this conclusion. The uncontrolled signal has a noisy, broadband spectrum. The controlled signal, however, exhibits clear spectral peaks that align precisely with the dominant frequencies of the target vortex street. While a discrepancy in the amplitude of the primary peak remains, suggesting room for further refinement, the controller has successfully captured the fundamental frequency content of the target flow. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/freq_cloak_vortex.pdf} + \caption{Frequency analysis (FFT) of the y-velocity component from a downstream sensor. The DRL controller successfully reproduces the dominant spectral peaks of the target flow, unlike the noisy spectrum of the uncontrolled case.} + \label{fig:freq_cloak_vortex} +\end{figure} + +The control policy discovered by the DRL agent is itself complex, as shown in \fref{fig:action_cloak_vortex}. The time series of the cylinder rotations (left) are not simple sinusoids. The probability distributions show significant time spent near the mean rotation speed, indicating a more nuanced control strategy. The FFT of the control signals (right) reveals that while the dominant frequency matches the target vortex shedding frequency, several other harmonics are present. A crucial test was performed by simplifying this learned policy to a pure sinusoidal rotation at the main frequency and amplitude. This simplified control still provided a cloaking effect but resulted in a significant drop in similarity from 89.6\% to approximately 70\%, proving that the multi-frequency, non-sinusoidal nature of the DRL-derived policy is essential for high-fidelity cloaking. This suggests a promising direction for future work in extracting simplified, physics-interpretable "white-box" models from the learned DRL agent. An interesting observation is that the mean rotational speeds required for unsteady cloaking are about 20\% lower than those for the steady case, a phenomenon that warrants further investigation. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action_cloak_vortex.pdf} + \caption{Analysis of the DRL-derived control policy for unsteady cloaking. (Left) Time series and probability distributions of the cylinder rotational velocities. (Right) FFT of the control signals, revealing a dominant frequency with multiple harmonics.} + \label{fig:action_cloak_vortex} +\end{figure} + +The DRL agent's ability to adapt is highlighted by the transfer learning process shown in \fref{fig:train_cloak}. After being pre-trained on the steady-flow case, the agent was exposed to the new vortex-street environment. The reward curve (left) shows a rapid learning process, achieving satisfactory performance in just 500 episodes. The corresponding flow snapshots at different stages of learning (right) provide a fascinating glimpse into the agent's strategy: it first learns to restore the basic periodic structure of the vortex street (Stage A to B), and then refines its control to more accurately match the strength and shape of the individual vortices (Stage B to C), increasing the similarity from 55.3\% to a final 89.6\%. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/train_cloak.pdf} + \caption{Transfer learning process for adapting the agent from a steady-flow task to the unsteady vortex-street task. (Left) Reward curve showing rapid learning over 500 episodes. (Right) Vorticity snapshots at stages A, B, and C, illustrating the progressive refinement of the cloaking performance.} + \label{fig:train_cloak} +\end{figure} + +We also tested the robustness of the learned policy across different Reynolds numbers, as shown in \fref{fig:re_cloak_vortex}. While the policy performs well at $Re=50$ (87.1\% similarity) and $Re=100$ (89.6\% similarity), its effectiveness diminishes significantly at higher Reynolds numbers, dropping to 65.3\% at $Re=200$ and 29.5\% at $Re=400$. The flow fields clearly show that the control task becomes progressively more difficult as the flow becomes more inertial and complex, marking a key limitation and an area for future improvement. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/re_cloak_vortex.pdf} + \caption{Effect of Reynolds number on cloaking performance in a vortex street. The similarity score degrades as the Reynolds number increases, highlighting the increasing difficulty of the control problem.} + \label{fig:re_cloak_vortex} +\end{figure} + +To test the controller against non-periodic disturbances, we designed a scenario where an isolated monopole vortex is generated upstream and travels towards the pinball, as shown in the framework in \fref{fig:schematic_tylor}. The goal is for the controller to execute a transient maneuver to allow the vortex to pass with minimal distortion. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/schematic_tylor.pdf} + \caption{Conceptual framework for cloaking a transient, aperiodic disturbance, represented by a single monopole vortex.} + \label{fig:schematic_tylor} +\end{figure} + +\fref{fig:cloak_tylor} presents a time-lapsed sequence of this interaction. Without control, the vortex is completely shattered upon impact with the pinball. The DRL-controlled pinball, however, performs a remarkable maneuver: it effectively "catches" the vortex and re-emits a new one downstream. While a comparison with the target flow reveals that the re-emitted vortex has undergone some changes in shape and size, the fundamental structure is preserved. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/cloak_tylor.pdf} + \caption{Time-lapsed vorticity snapshots of the interaction with a monopole vortex. The sequence shows the vortex approaching, contacting, and leaving the pinball region, compared to the target (undisturbed) flow. The DRL agent enables the re-creation of the vortex downstream.} + \label{fig:cloak_tylor} +\end{figure} + +The control actions for this transient event are, as expected, pulse-like rather than periodic (\fref{fig:action&sensor_tylor}, top). The resulting sensor signals (bottom left) show that while the amplitude is not perfectly matched, the shape of the signal is strikingly similar to the target signal (bottom right), indicating successful replication of the transient event's signature. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action&sensor_tylor.pdf} + \caption{Control and sensor signals for monopole vortex cloaking. (Top) The transient control actions of the three cylinders. (Bottom) Comparison of the sensor signals for the cloaked case (left) and the target case (right), showing good shape similarity.} + \label{fig:action&sensor_tylor} +\end{figure} + +Finally, we explored the effect of the vortex's impact position, as shown in \fref{fig:pos_tylor}. We tested scenarios where the vortex's trajectory was offset vertically by up to four cylinder diameters. The results show that the cloaking performance is significantly better for off-center impacts, which is intuitive as the direct interaction with the pinball is less intense. The plot of similarity scores across nine different offset positions confirms this trend. Interestingly, the performance is not symmetric for positive and negative offsets, a result of the vortex's polarity and its differential interaction with the top and bottom cylinders of the pinball. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/pos_tylor.pdf} + \caption{Influence of monopole vortex impact position on cloaking performance. (Left) Vorticity fields for impacts at $y=-4D$, target, and $y=+4D$. (Right) Similarity score as a variation of the vertical offset, showing improved performance for off-center impacts and an asymmetric response.} + \label{fig:pos_tylor} +\end{figure} + +In conclusion, this section has demonstrated the DRL agent's remarkable ability to achieve hydrodynamic cloaking in a variety of complex, unsteady flows, including both periodic and aperiodic disturbances. The agent learned non-trivial, multi-frequency control policies and showed impressive adaptability. Having established the ability to effectively erase a hydrodynamic wake, we now proceed to the next level of complexity: actively sculpting a new, deceptive wake to achieve hydrodynamic illusion. + +\section{Illusion in Steady Flow} + +Having demonstrated the ability to erase a wake, we now explore the more ambitious objective of actively sculpting one. This section presents the results for hydrodynamic illusion, where the DRL agent's goal is to command the fluidic pinball to generate a wake that convincingly mimics the signature of a different object—in this case, a single, larger stationary cylinder. The conceptual framework, shown in \fref{fig:schematic_illusion}, illustrates this objective: a steady, uniform inflow is transformed by the controlled pinball into a periodic vortex street characteristic of the target cylinder. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/schematic_illusion.pdf} + \caption{Conceptual framework for hydrodynamic illusion. The DRL agent controls the pinball in a steady inflow to generate a downstream wake that mimics the periodic vortex street of a target bluff body.} + \label{fig:schematic_illusion} +\end{figure} + +The success of this illusion is strikingly visualized in \fref{fig:vort_illusion}. The top panel shows the target flow field: the classic von Kármán street shed by the target cylinder. The bottom panel shows the wake of the uncontrolled pinball, which, while periodic, has a distinctly different structure and shedding frequency. The middle panel displays the result of the DRL-controlled illusion. The generated wake is a remarkably high-fidelity replica of the target flow field, matching the vortex size, spacing, and structure with great precision. This is quantitatively confirmed by the Strouhal numbers: the target St is 0.133, and the DRL-generated illusion achieves an St of 0.134. In contrast, the uncontrolled pinball sheds at a much lower frequency, with an St of 0.117. The DTW-based similarity score reflects this dramatic improvement, soaring from a mere 13.6\% for the uncontrolled case to an exceptional 97.5\% for the DRL-generated illusion. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/vort_illusion.pdf} + \caption{Vorticity contours demonstrating illusion performance. Panels show the target flow field (top), the DRL-generated illusion (middle), and the uncontrolled pinball's natural wake (bottom). The controlled pinball successfully replicates the target vortex street with high fidelity.} + \label{fig:vort_illusion} +\end{figure} + +The relative error fields in \fref{fig:error_illusion} further underscore this success. The uncontrolled pinball (bottom) produces a wake that differs from the target across nearly the entire downstream domain, with errors consistently above 50\%. The DRL-generated illusion (top), however, confines significant errors to a very small region immediately surrounding the pinball itself, demonstrating precise control over the far-wake structure. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/error_illusion.pdf} + \caption{Instantaneous error fields relative to the target flow for the illusion task. (Top) The DRL-controlled illusion maintains low error in the far-wake. (Bottom) The uncontrolled pinball's natural wake differs significantly from the target.} + \label{fig:error_illusion} +\end{figure} + +The phase portraits of the sensor signals in \fref{fig:sensor_illusion} provide a dynamic perspective. While the uncontrolled pinball produces a stable limit cycle (right), its shape and location in phase space differ substantially from the target (top). The DRL-generated illusion (left), however, produces limit cycles that are nearly identical to the target's, with only a minor, barely perceptible difference in the signal from the central sensor. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/sensor_illusion.pdf} + \caption{Phase portraits of sensor velocity signals for the illusion task. The DRL-generated illusion (left) almost perfectly replicates the limit cycles of the target flow (top), a significant improvement over the uncontrolled case (right).} + \label{fig:sensor_illusion} +\end{figure} + +The frequency spectra in \fref{fig:freq_illusion} confirm the precise frequency matching. While the uncontrolled pinball's spectrum has a dominant peak, it is offset from the target frequency. The DRL controller not only shifts the primary peak to match the target's Strouhal number precisely but also adjusts the amplitudes of the harmonics to better replicate the overall signal shape, resulting in a spectrum that is a near-perfect match to the target. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/freq_illusion.pdf} + \caption{Frequency analysis of the y-velocity component for the illusion task. The DRL controller precisely matches both the fundamental frequency and the harmonic structure of the target signal.} + \label{fig:freq_illusion} +\end{figure} + +The control strategy for illusion, shown in \fref{fig:action_illusion}, reveals interesting characteristics. The mean rotational speeds are significantly lower than in the cloaking scenarios, and the oscillation amplitudes are also smaller. This is likely because the target object itself has a drag-inducing effect, so the controller does not need to work as hard to generate a wake. The front cylinder appears to be the primary actuator, with the rear two providing finer adjustments. The FFT of the control signals (right) shows a complex, multi-frequency policy, but with a dominant frequency that once again aligns perfectly with the target Strouhal number. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action_illusion.pdf} + \caption{Analysis of the control policy for the illusion task. (Left) Time series and probability distributions show lower mean speeds and amplitudes compared to cloaking. (Right) The control signal spectrum is complex but dominated by the target frequency.} + \label{fig:action_illusion} +\end{figure} + +The robustness of the illusion was tested at different Reynolds numbers (\fref{fig:re_illusion}). At $Re=50$, the similarity is an excellent 95.6\%. However, performance degrades at higher Reynolds numbers, dropping to 36.5\% at $Re=200$, where the generated wake shows significant deformation and decay. This, consistent with the cloaking results, indicates that controlling higher-Re flows remains a significant challenge. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/re_illusion.pdf} + \caption{Effect of Reynolds number on illusion performance. High-fidelity illusion is achieved at lower Re, but performance degrades significantly as Re increases.} + \label{fig:re_illusion} +\end{figure} + +The control policies at different Reynolds numbers also differ, as seen in \fref{fig:action_re_illusion}. At $Re=200$, all three cylinders exhibit significant rotational oscillations of similar amplitude. At $Re=50$, however, the front cylinder dominates the actuation, while the rear cylinders have much smaller amplitudes. This suggests that achieving the control objective in lower-energy, less inertial flows requires less control effort. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action_re_illusion.pdf} + \caption{Control signal comparison at $Re=50$ and $Re=200$.} + \label{fig:action_re_illusion} +\end{figure} + +We further explored the pinball's ability to mimic cylinders of different sizes (\fref{fig:d_illusion}). It successfully mimicked a target 1.5 times its characteristic diameter with 97.1\% similarity. However, when attempting to mimic a target 3 times its diameter, the similarity dropped to 65.8\%. While the shape of the wake was still well-replicated, the vortex strength was visibly weaker, indicating a physical limitation on the amount of momentum the pinball can inject into the flow. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/d_illusion.pdf} + \caption{Illusion performance when mimicking cylinders of different sizes. The plots show the generated wakes for targets of 1.5D and 3.0D.} + \label{fig:d_illusion} +\end{figure} + +A fascinating phenomenon was observed in the control signals for these different-sized illusions (\fref{fig:action_d_illusion}). When mimicking a target significantly larger than itself, the dominant frequency of the control signal shifted to a higher harmonic of the target Strouhal number. This suggests the agent discovered a more energy-efficient, high-frequency actuation strategy to generate the larger-scale, lower-frequency flow structures. The underlying physical mechanism for this frequency-doubling control strategy is a compelling area for future investigation. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/action_d_illusion.pdf} + \caption{Control signals for mimicking different-sized targets. When mimicking the larger (3D) target, the control frequency shifts to a higher harmonic, indicating a change in control strategy.} + \label{fig:action_d_illusion} +\end{figure} + +\section{Illusion in Unsteady Flow} + +As an early exploration of what may be considered the most challenging of this research, we briefly investigated the task of creating an illusion in an unsteady flow. The objective, shown in the conceptual framework of \fref{fig:schematic_illusion_unsteady}, is immensely difficult: to take an incoming periodic vortex street and actively cancel it to produce a steady, uniform outflow. This requires the controller to counteract a large-scale, energetic inflow using only the limited authority of cylinder rotation, representing a far greater challenge than any of the previous tasks. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/schematic_illusion_unsteady.pdf} + \caption{Conceptual framework for the most challenging task: creating a steady-flow illusion from an unsteady vortex-street inflow.} + \label{fig:schematic_illusion_unsteady} +\end{figure} + +Our initial results, presented in the error fields of \fref{fig:error_illusion_unsteady}, are promising but underscore the profound difficulty of this objective. The DRL-controlled case (top) demonstrates a significant improvement over the uncontrolled scenario (bottom), achieving a similarity of 64.6\% with the target steady flow, a substantial increase from the 16.5\% similarity of the uncontrolled case. A notable artifact in the controlled case is the presence of some error upstream of the pinball. This is attributed to the imperfect control policy, which not only manipulates the downstream flow but also generates pressure waves that propagate upstream, subtly altering the vortex shedding frequency of the disturbance-generating cylinder itself. This highlights that the control is not yet fully optimized. To isolate the control problem and eliminate this upstream feedback loop in future investigations, we plan to implement a fixed inflow boundary condition using a pre-recorded velocity field. Nevertheless, the primary goal of downstream wake cancellation shows clear progress. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/error_illusion_unsteady.pdf} + \caption{Preliminary error fields for the unsteady-to-steady illusion task. The controller significantly reduces downstream error compared to the uncontrolled case, but achieving a perfectly steady state remains a challenge.} + \label{fig:error_illusion_unsteady} +\end{figure} + +The phase portraits in \fref{fig:sensor_illusion_unsteady} illustrate the progress and the remaining challenge. The uncontrolled signals (light color) are chaotic and occupy a large region of the phase space. The DRL-controlled signals (dark color) are successfully corralled into a much smaller region around the target fixed points (black circles), which represent a perfectly steady flow. While the controller has not yet learned to completely damp the oscillations, it has made significant progress in stabilizing the flow. This indicates that with further training and perhaps architectural refinements, achieving this difficult illusion may be possible. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.40\textwidth]{Graphs/sensor_illusion_unsteady.pdf} + \caption{Phase portraits for the unsteady-to-steady illusion task. The DRL controller (dark lines) successfully confines the chaotic signals (light lines) to the vicinity of the target steady-state points (black circles).} + \label{fig:sensor_illusion_unsteady} +\end{figure} + +\section{Experiment Setup} + +To enhance the credibility of our numerical findings and bridge the gap to real-world application, physical validation is essential. We have designed and initiated the construction of an experimental platform to verify our results for cloaking in a steady flow within a water tunnel environment. + +To ensure a stable, low-Reynolds-number inflow, we opted for a towing-platform design, as depicted in the top-view and side-view schematics in \fref{fig:topview} and \ref{fig:sideview}. The entire assembly—including the fluidic pinball, control motors, sensors, and the DRL inference module—is mounted on a cart that travels along a linear rail system. The cart is driven by a timing belt connected to an external motor, allowing for precise control of the towing velocity. Flow field measurements are planned using a planar laser sheet and a camera for Particle Image Velocimetry (PIV) imaging through a side window. Figure 4.32 shows a 3D rendering of the complete experimental setup. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/topview.pdf} + \caption{Top-view schematic of the towing-platform experimental setup for water tunnel validation.} + \label{fig:topview} +\end{figure} + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/sideview.pdf} + \caption{Side-view schematic of the experimental setup, showing the PIV measurement configuration.} + \label{fig:sideview} +\end{figure} + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.70\textwidth]{Graphs/renderview.png} + \caption{3D rendered model of the integrated experimental platform.} + \label{fig:renderview} +\end{figure} + +Significant engineering challenges arise from the physical constraints of the water tunnel (25cm width). To operate in the desired low-Re regime, the pinball cylinders must be small (preliminary design: 1cm diameter). This results in extremely small hydrodynamic forces, requiring force sensors with micro-Newton resolution. Furthermore, the need for three independently rotating cylinders in close proximity demands a compact sensor design that incorporates a bearing and ensures high concentricity to avoid spurious forces from eccentric rotation. + +Given these unique and demanding requirements, custom instrumentation was necessary. \fref{fig:force_sensor} shows a custom-designed and fabricated device that integrates an air bearing with a 2D force sensor. The design is stackable to allow for simultaneous force measurement on all three cylinders. It is constructed from copper to minimize thermal expansion effects and uses semiconductor strain gauges in a half-bridge configuration to measure minute deformations while rejecting thermal drift. To process these signals, a custom low-noise, high-precision data acquisition system was also developed, as shown in \fref{fig:adc}. This system is designed to integrate seamlessly with our Python-based DRL training framework. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.70\textwidth]{Graphs/force_sensor.jpg} + \caption{Photograph of the custom-designed, stackable device integrating an air bearing and a 2D force sensor for measuring micro-Newton forces.} + \label{fig:force_sensor} +\end{figure} + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.70\textwidth]{Graphs/adc.jpg} + \caption{Photograph of the custom multi-channel, low-noise signal acquisition hardware.} + \label{fig:adc} +\end{figure} + +Unfortunately, initial assembly and testing have revealed several critical issues. The force sensor design suffers from internal stress concentration due to over-constraint and welding processes, leading to significant signal noise. Additionally, the manufacturing precision of the linear rail system is insufficient, causing velocity instability and vibrations during towing, which further contaminates the sensitive force measurements. + +To overcome these hurdles, we are pursuing two parallel paths. The first is the iterative redesign and optimization of the experimental hardware. The second is a numerical exploration into reducing the number of observations required for the DRL agent, which could significantly lower the difficulty of experimental measurement. As shown in \fref{fig:reduce_obs}, we tested the cloaking performance when the number of state observations was reduced from the original 12 down to 9, 5, and even 2. The learning curves show that while performance degrades slightly, the agent can still achieve a high reward even with a drastically reduced set of inputs. This promising result suggests that by optimizing the sensor placement and control architecture, we may be able to achieve effective control in the physical experiment with a much simpler and less noise-prone measurement system. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.80\textwidth]{Graphs/reduce_obs.pdf} + \caption{Learning curves showing the effect of reducing the number of state observations. The agent maintains strong learning performance even when the number of inputs is reduced from 12 (red reference) to 9, 5, and 2 (blue), suggesting a path towards simplified experimental validation.} + \label{fig:reduce_obs} +\end{figure} + +With the presentation of these numerical and preliminary experimental results, we have demonstrated the core contributions of this thesis. The final chapter will summarize these findings, draw conclusions, and outline promising avenues for future work. \ No newline at end of file diff --git a/docs/My_Confirmation/Chapters/5.Conclusion&FutureWork.tex b/docs/My_Confirmation/Chapters/5.Conclusion&FutureWork.tex new file mode 100644 index 0000000..bc77ea1 --- /dev/null +++ b/docs/My_Confirmation/Chapters/5.Conclusion&FutureWork.tex @@ -0,0 +1,24 @@ +\chapter{Conclusion and Future Work} \label{Chap: Conclusion} + +This report has ventured into the nascent and challenging intersection of active flow control and hydrodynamic perception management. Moving beyond the traditional objectives of performance optimization, such as drag reduction or vibration suppression, this work has established a comprehensive framework for achieving active hydrodynamic cloaking and illusion in a non-linear, vortical flow regime. By leveraging the power of model-free Deep Reinforcement Learning, we have demonstrated that it is possible to command a simple actuator system—the fluidic pinball—to perform sophisticated wake engineering tasks that were previously considered intractable. + +The primary contribution of this thesis is the successful demonstration of both high-fidelity hydrodynamic cloaking and, for the first time to our knowledge, targeted hydrodynamic illusion in a complex, unsteady flow environment. We began by validating our DRL framework in a baseline steady flow, where the agent learned to completely suppress vortex shedding and nullify the net hydrodynamic forces on the pinball, effectively rendering it invisible to the mean flow. The true capability of the framework was then proven in more demanding scenarios. We demonstrated robust cloaking in the presence of complex background flows, including periodic Kármán vortex streets and aperiodic, transient vortices. In these cases, the DRL agent discovered non-trivial, multi-frequency control policies to allow these structures to pass through the control region with their fundamental characteristics preserved. + +Building upon this success, we introduced and validated the novel concept of hydrodynamic illusion. The DRL agent successfully learned to manipulate the pinball's wake to convincingly mimic the distinct hydrodynamic signature of a different bluff body. This was achieved with remarkable precision, matching not only the overall wake structure but also the target's characteristic Strouhal number. Our investigation into mimicking targets of varying sizes revealed a fascinating control strategy, where the agent shifted to higher-frequency actuation to generate larger-scale flow structures, opening new questions about the underlying physics of control. Finally, we have taken the crucial first steps toward bridging the gap between simulation and reality by designing and performing preliminary tests on a physical experimental platform, identifying key engineering challenges and proposing viable solutions, such as reducing the observation space required for effective control. + +While the results presented herein mark a significant step forward, they also illuminate a vast and exciting landscape for future research. The work completed thus far serves as a strong foundation upon which several promising research avenues can be built. These future directions aim to enhance the performance and applicability of the current framework, deepen our physical understanding of the learned control strategies, and accelerate the discovery process. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=\textwidth, trim=0 0 0 3cm, clip]{Graphs/gantt_chart.pdf} + \caption{Gantt chart visualizes the timeline for the PhD research.} + \label{fig:gantt_chart} +\end{figure} + +One of the most immediate priorities is to enhance the control performance and robustness, particularly at higher Reynolds numbers. Our results indicated a clear degradation in both cloaking and illusion performance as the Reynolds number increased beyond 200. Future work could explore more advanced DRL algorithms, such as introduce transformer layer, which may be better suited to capturing the longer time dependencies and more chaotic dynamics of higher-Re flows. Furthermore, a curriculum learning approach, where the agent is progressively trained on tasks of increasing difficulty (e.g., gradually increasing the Reynolds number), could significantly improve the agent's ability to generalize. Investigating more actuation methods, such as change the position of the pinball, could also provide the additional control authority needed to manipulate more energetic flows. + +A second critical direction is to improve the interpretability of the learned control policies and extract physical insights. The DRL agent, while effective, currently operates as a "black box." A significant future contribution would be to distill the complex, neural network-based policy into a simpler, physically interpretable "white-box" model. Techniques such as symbolic regression or sparse identification of nonlinear dynamics (SINDy) could be employed to find a concise mathematical expression that approximates the agent's control law. This would not only demystify the agent's decision-making process but could also lead to the discovery of new, fundamental principles of flow control. Understanding why the agent chooses a specific multi-frequency actuation or why it shifts to higher harmonics for certain illusion tasks would be of immense value to the broader fluid mechanics community. + +Finally, the integration of Reduced-Order Models (ROMs) into the training pipeline presents a powerful opportunity to dramatically accelerate future research. The primary bottleneck in this work was the computational expense of high-fidelity CFD simulations. By developing an accurate and computationally inexpensive ROM of the fluidic pinball system, for example using a POD-Galerkin approach, we could create a surrogate environment for DRL training. An agent could undergo thousands or even millions of learning episodes on the ROM in a fraction of the time required by the full simulation. This "ROM-in-the-loop" training would enable more extensive exploration of the parameter space, faster development of control policies for new tasks, and more robust hyperparameter tuning. The policy learned on the ROM could then be efficiently fine-tuned on the high-fidelity model or transferred directly to the physical experiment, creating a highly efficient sim-to-real workflow. + +In conclusion, this report has pushed the frontier of active flow control into the realm of perception management. By demonstrating the feasibility of hydrodynamic cloaking and illusion through deep reinforcement learning, we have opened the door to a new class of intelligent fluid systems. The future work outlined here promises not only to refine these capabilities but also to deepen our fundamental understanding of flow control, ultimately paving the way for transformative applications in marine engineering, underwater robotics, and environmental science. \ No newline at end of file diff --git a/docs/My_Confirmation/Figures/Logo_polyu.pdf b/docs/My_Confirmation/Figures/Logo_polyu.pdf new file mode 100644 index 0000000..4650415 Binary files /dev/null and b/docs/My_Confirmation/Figures/Logo_polyu.pdf differ diff --git a/docs/My_Confirmation/Figures/act_func.pdf b/docs/My_Confirmation/Figures/act_func.pdf new file mode 100644 index 0000000..db88234 Binary files /dev/null and b/docs/My_Confirmation/Figures/act_func.pdf differ diff --git a/docs/My_Confirmation/Figures/architecture.png b/docs/My_Confirmation/Figures/architecture.png new file mode 100644 index 0000000..9e9818a Binary files /dev/null and b/docs/My_Confirmation/Figures/architecture.png differ diff --git a/docs/My_Confirmation/Figures/beem2015wake.png b/docs/My_Confirmation/Figures/beem2015wake.png new file mode 100644 index 0000000..341049c Binary files /dev/null and b/docs/My_Confirmation/Figures/beem2015wake.png differ diff --git a/docs/My_Confirmation/Figures/brunton2020machine1.png b/docs/My_Confirmation/Figures/brunton2020machine1.png new file mode 100644 index 0000000..c433163 Binary files /dev/null and b/docs/My_Confirmation/Figures/brunton2020machine1.png differ diff --git a/docs/My_Confirmation/Figures/brunton2020machine2.png b/docs/My_Confirmation/Figures/brunton2020machine2.png new file mode 100644 index 0000000..fb7672c Binary files /dev/null and b/docs/My_Confirmation/Figures/brunton2020machine2.png differ diff --git a/docs/My_Confirmation/Figures/chen2024multilayered.png b/docs/My_Confirmation/Figures/chen2024multilayered.png new file mode 100644 index 0000000..991004f Binary files /dev/null and b/docs/My_Confirmation/Figures/chen2024multilayered.png differ diff --git a/docs/My_Confirmation/Figures/choi2014paraxial.png b/docs/My_Confirmation/Figures/choi2014paraxial.png new file mode 100644 index 0000000..2013739 Binary files /dev/null and b/docs/My_Confirmation/Figures/choi2014paraxial.png differ diff --git a/docs/My_Confirmation/Figures/d2q9.png b/docs/My_Confirmation/Figures/d2q9.png new file mode 100644 index 0000000..bbea7bf Binary files /dev/null and b/docs/My_Confirmation/Figures/d2q9.png differ diff --git a/docs/My_Confirmation/Figures/deng2021galerkin.png b/docs/My_Confirmation/Figures/deng2021galerkin.png new file mode 100644 index 0000000..83359c5 Binary files /dev/null and b/docs/My_Confirmation/Figures/deng2021galerkin.png differ diff --git a/docs/My_Confirmation/Figures/domain.pdf b/docs/My_Confirmation/Figures/domain.pdf new file mode 100644 index 0000000..3af92c4 Binary files /dev/null and b/docs/My_Confirmation/Figures/domain.pdf differ diff --git a/docs/My_Confirmation/Figures/dtw1.png b/docs/My_Confirmation/Figures/dtw1.png new file mode 100644 index 0000000..e37180d Binary files /dev/null and b/docs/My_Confirmation/Figures/dtw1.png differ diff --git a/docs/My_Confirmation/Figures/dtw2.png b/docs/My_Confirmation/Figures/dtw2.png new file mode 100644 index 0000000..5cb8581 Binary files /dev/null and b/docs/My_Confirmation/Figures/dtw2.png differ diff --git a/docs/My_Confirmation/Figures/dtw3.pdf b/docs/My_Confirmation/Figures/dtw3.pdf new file mode 100644 index 0000000..d604161 Binary files /dev/null and b/docs/My_Confirmation/Figures/dtw3.pdf differ diff --git a/docs/My_Confirmation/Figures/dtw3.png b/docs/My_Confirmation/Figures/dtw3.png new file mode 100644 index 0000000..2331d32 Binary files /dev/null and b/docs/My_Confirmation/Figures/dtw3.png differ diff --git a/docs/My_Confirmation/Figures/feng2023control.png b/docs/My_Confirmation/Figures/feng2023control.png new file mode 100644 index 0000000..30c311d Binary files /dev/null and b/docs/My_Confirmation/Figures/feng2023control.png differ diff --git a/docs/My_Confirmation/Figures/framework.png b/docs/My_Confirmation/Figures/framework.png new file mode 100644 index 0000000..c7b151f Binary files /dev/null and b/docs/My_Confirmation/Figures/framework.png differ diff --git a/docs/My_Confirmation/Figures/lin2021active.png b/docs/My_Confirmation/Figures/lin2021active.png new file mode 100644 index 0000000..258803b Binary files /dev/null and b/docs/My_Confirmation/Figures/lin2021active.png differ diff --git a/docs/My_Confirmation/Figures/pendry2006controlling.png b/docs/My_Confirmation/Figures/pendry2006controlling.png new file mode 100644 index 0000000..9fe9b4f Binary files /dev/null and b/docs/My_Confirmation/Figures/pendry2006controlling.png differ diff --git a/docs/My_Confirmation/Figures/pendry2006controlling2.png b/docs/My_Confirmation/Figures/pendry2006controlling2.png new file mode 100644 index 0000000..7d12761 Binary files /dev/null and b/docs/My_Confirmation/Figures/pendry2006controlling2.png differ diff --git a/docs/My_Confirmation/Figures/ren2021bluff.png b/docs/My_Confirmation/Figures/ren2021bluff.png new file mode 100644 index 0000000..1e3a225 Binary files /dev/null and b/docs/My_Confirmation/Figures/ren2021bluff.png differ diff --git a/docs/My_Confirmation/Figures/zhao2023review1.png b/docs/My_Confirmation/Figures/zhao2023review1.png new file mode 100644 index 0000000..516db1c Binary files /dev/null and b/docs/My_Confirmation/Figures/zhao2023review1.png differ diff --git a/docs/My_Confirmation/Figures/zhao2023review2.png b/docs/My_Confirmation/Figures/zhao2023review2.png new file mode 100644 index 0000000..256d9e1 Binary files /dev/null and b/docs/My_Confirmation/Figures/zhao2023review2.png differ diff --git a/docs/My_Confirmation/Figures/zou2019broadband.png b/docs/My_Confirmation/Figures/zou2019broadband.png new file mode 100644 index 0000000..5262aca Binary files /dev/null and b/docs/My_Confirmation/Figures/zou2019broadband.png differ diff --git a/docs/My_Confirmation/Format/ACK.tex b/docs/My_Confirmation/Format/ACK.tex new file mode 100644 index 0000000..b6ad8fc --- /dev/null +++ b/docs/My_Confirmation/Format/ACK.tex @@ -0,0 +1,6 @@ +\acknowledgements{ +Acknowledgements go here. + +\kant[1-4] + +} diff --git a/docs/My_Confirmation/Format/Abstract.tex b/docs/My_Confirmation/Format/Abstract.tex new file mode 100644 index 0000000..6a359d9 --- /dev/null +++ b/docs/My_Confirmation/Format/Abstract.tex @@ -0,0 +1,12 @@ +\abstract{ +%\addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics + +The concepts of cloaking and illusion, originating from optics and electromagnetics, have inspired methods to manipulate wave-based phenomena across various physical fields. While significant progress has been made in linear systems, extending these ideas to the highly non-linear domain of fluid dynamics presents a noticeable challenge. This research addresses this gap by investigating a novel paradigm: using Active Flow Control (AFC) to achieve hydrodynamic cloaking and illusion. This represents a significant departure from the conventional use of AFC, as its application has traditionally been confined to performance-oriented goals like drag reduction or lift modulation. Hydrodynamic cloaking aims to render an object hydrodynamically "invisible" by actively restoring its downstream flow to the undisturbed background flow. Hydrodynamic illusion further extends this concept, sculpting a flow into the district wake of an imaginary target object. + +To explore these novel AFC concepts, we employ a fluidic pinball as the actuator, comprising three independently rotating circular cylinders arranged in an equilateral triangle. These cylinders serve as actuators whose rotational velocities are dynamically optimized to manipulate the surrounding flow. The system dynamics is simulated through high-fidelity numerical simulations at Reynolds numbers around 100, encompassing a diverse range of challenging inflow scenarios: steady uniform flow, periodic Kármán vortex streets, and no-periodic isolated vortices. A data-driven, model-free Deep Reinforcement Learning (DRL) framework is adopted to discover the complex control policies required, utilizing feedback from downstream velocity sensors that emulate the perception capabilities of marine organisms. + +The numerical results demonstrate exceptional performance and validate the proposed framework. The DRL-controlled system successfully achieves robust hydrodynamic cloaking, restoring downstream flow characteristics to over 90\% similarity with the undisturbed background flow, as quantified by Dynamic Time Warping (DTW) analysis of sensor signals. This was achieved under both steady and unsteady inflow conditions. Furthermore, the fluid pinball system demonstrates a remarkable capacity for hydrodynamic illusion. In a steady flow, the pinball actively generated wake patterns characteristic of imaginary cylinders with different diameters, achieving similarity scores of up to 97.5\% and precisely replicating key hydrodynamic identifiers such as the Strouhal number. + +To ground these numerical findings in physical reality, an experimental platform featuring a towing system in a water tunnel and custom-designed instrumentation has been designed and constructed. Preliminary tests have been conducted to validate the practical feasibility of the approach, while also highlighting the significant engineering challenges associated with high-sensitivity, low-noise force and flow sensing in this demanding regime. Future work will focus on refining this experimental validation, alongside pursuing a deeper mechanistic analysis of the learned control policies with the goal of extracting interpretable physical models. This research lays the foundation for a new class of intelligent fluid systems, with profound implications for minimizing the hydrodynamic traces of underwater vehicles, developing advanced bio-inspired stealth technologies, and contributing to the preservation of sensitive aquatic ecosystems. + +} % abstract end \ No newline at end of file diff --git a/docs/My_Confirmation/Format/Coverpage.tex b/docs/My_Confirmation/Format/Coverpage.tex new file mode 100644 index 0000000..2e3da75 --- /dev/null +++ b/docs/My_Confirmation/Format/Coverpage.tex @@ -0,0 +1,34 @@ +%% ------------- +% Cover page +\pagestyle{empty} + +\vfill\vfill\vfill\vfill\vfill\vfill\vfill\vfill\null + +\begin{center} + +\vfill + +{\LARGE\MakeUppercase{\textbf{Hydrodynamic Cloaking and Illusion Using Active Flow Control}} \par} + +% Delete this line when submitting the final version +\textbf{\textit{\large Initial Submission for Confirmation Purpose}} +\vfill + +{\LARGE \textbf{Name} \par} + +\vspace{20pt} + +% {\LARGE \textbf{PhD} \par} + +\vfill +\vfill + +{\LARGE \textbf{The Hong Kong Polytechnic University} \par} + +\vspace{20pt} + +{\LARGE \textbf{2025}} +\vfill\vfill +\end{center} + +\let\cleardoublepage\clearpage % clear empty page \ No newline at end of file diff --git a/docs/My_Confirmation/Format/Declaration.tex b/docs/My_Confirmation/Format/Declaration.tex new file mode 100644 index 0000000..94d5697 --- /dev/null +++ b/docs/My_Confirmation/Format/Declaration.tex @@ -0,0 +1,23 @@ +\Declaration{ + +% \addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics +\vspace{\stretch{0.1}} + +I hereby declare that this thesis is my own work and that, to the best of my knowledge and belief, it reproduces no material previously published or written, nor material that has been accepted for the award of any other degree or diploma, except where due acknowledgement has been made in the text. + + + \vspace{\stretch{0.1}} + \begin{flushleft} + \begin{tabular}{c c c c l}%{l p{0.5in} p{1in} p{0.5in} l} + & & { +\includegraphics[width=0.2\textwidth]{Figures/Benjamin_Franklin.png} +} & & (Signed) \\ + \cline{1-4}\\ + & & Your name & & (Name of student) \\ + \cline{1-4}\\ + \end{tabular} + \end{flushleft} + \vspace{\fill} + +} +\clearpage % Declaration ended, now start a new page \ No newline at end of file diff --git a/docs/My_Confirmation/Format/Publication.tex b/docs/My_Confirmation/Format/Publication.tex new file mode 100644 index 0000000..8d1f379 --- /dev/null +++ b/docs/My_Confirmation/Format/Publication.tex @@ -0,0 +1,10 @@ +\publications{ + +\begin{enumerate}[label={[\arabic*]}] + + \item \textbf{Qiang Yang}, “PolyU Ph.D. Thesis Latex Template”, github.com, June 26, 2022. + + +\end{enumerate} +} +\clearpage \ No newline at end of file diff --git a/docs/My_Confirmation/Format/lstpatch.sty b/docs/My_Confirmation/Format/lstpatch.sty new file mode 100644 index 0000000..c71ba02 --- /dev/null +++ b/docs/My_Confirmation/Format/lstpatch.sty @@ -0,0 +1 @@ +%%%% This is file `lstpatch.sty', generated manually.%%%% (w)(c) 2004 Carsten Heinz%%%% This file may be distributed under the terms of the LaTeX Project Public%% License from CTAN archives in directory macros/latex/base/lppl.txt.%% Either version 1.0 or, at your option, any later version.%%%% Send comments and ideas on the package, error reports and additional%% programming languages to .%%%% This patch file will remove the following bugs from the listings package.%% Each item contains the bug finder with date of report and first bug fix%% version, a short description of the problem, and the reason for the bug%% in parenthesis.%%%% 1) Frank Atanassow, 2004/10/07, 1.3b%%%% space after mathescape is not preserved%% (\lst@newlines>0)%%%% 2) Benjamin Lings, 2004/10/15, 1.3b (2004/10/17)%%%% \usepackage{xy,listings} yields:%% "Forbidden control sequence found while scanning use of \lst@lExtend"%% (xy-pic correctly resets catcode of ^^L (to active), which is \outer)%%%%%% The following features are added to the base package.%%%% 1.3a (2004/09/07)%%%% a) H I G H L Y E X P E R I M E N T A L%%%% Use the options%% rangeprefix=%% rangesuffix=%%%% rangebeginprefix=%% rangebeginsuffix=%%%% rangeendprefix=%% rangeendsuffix=%%%% includerangemarker=true|false%% together with%% firstline=%% lastline=%% or%% linerange={-,%% -, ...}%% The according markers in the source code are%% %% for begin respectively end of range. Moreover, one can use%% includerangemarker=true|false%% to show or hide the range markers in the output.%%%% 1.3b (2004/10/17)%%%% b) multicols= (requires loaded multicol package)%%%%\lst@CheckVersion{1.3}{\typeout{^^J% ***^^J% *** This is a patch for listings 1.3, but you're using^^J% *** version \lst@version.^^J% ***^^J *** Patch file not loaded.^^J% ***^^J}% \endinput}\def\fileversion{1.3b}\def\filedate{2004/10/17}\ProvidesFile{lstpatch.sty}[\filedate\space\fileversion\space (Carsten Heinz)]%% 0) Insert % after #1.\def\@@xbitor #1{\@tempcntb \count#1% \ifnum \@tempcnta =\z@ \else \divide\@tempcntb\@tempcnta \ifodd\@tempcntb \@testtrue\fi \fi}%% 1) Reset \lst@newlines at end of escape.\def\lstpatch@escape{%\gdef\lst@Escape##1##2##3##4{% \lst@CArgX ##1\relax\lst@CDefX {}% {\lst@ifdropinput\else \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken \lst@InterruptModes \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}% \ifx\^^M##2% \lst@CArg ##2\relax\lst@ActiveCDefX {}% {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes}% {\lst@MProcessListing}% \else \lst@CArg ##2\relax\lst@ActiveCDefX {}% {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes \lst@newlines\z@ \lst@whitespacefalse}% {}% \fi ##3\lst@escapebegin \fi}% {}}%}%% 2) Deactivate \outer definition of ^^L temporarily (inside and outside% of \lst@ScanChars) and restore \catcode at end of package.\begingroup \catcode12=\active\let^^L\@empty\gdef\lst@ScanChars{% \let\lsts@ssL^^L% \def^^L{\par}% \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}% \let^^L\lsts@ssL \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}}\endgroup\lst@lAddTo\lst@RestoreCatcodes{\catcode12\active}%% a) Let's start with the options:\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}% \def\lst@rangeendprefix{#1}}\lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}% \def\lst@rangeendsuffix{#1}}\lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}}\lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}}\lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}}\lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}}\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker}%% The key is a redefinition of \lst@GLI@ checking for numbers.\def\lst@GLI@#1-#2-#3\@nil{% \lst@IfNumber{#1}% {\ifx\@empty#1\@empty \let\lst@firstline\@ne \else \def\lst@firstline{#1\relax}% \fi \ifx\@empty#3\@empty \def\lst@lastline{9999999\relax}% \else \ifx\@empty#2\@empty \let\lst@lastline\lst@firstline \else \def\lst@lastline{#2\relax}% \fi \fi}%%% If we've found a general marker, we set firstline and lastline to 9999999.% This prevents (almost) anything to be printed for now. {\def\lst@firstline{9999999\relax}% \let\lst@lastline\lst@firstline%% We add the prefixes and suffixes to the markers. \let\lst@rangebegin\lst@rangebeginprefix \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix \ifx\@empty#3\@empty \let\lst@rangeend\lst@rangeendprefix \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix \else \ifx\@empty#2\@empty \let\lst@rangeend\@empty \else \let\lst@rangeend\lst@rangeendprefix \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix \fi \fi% The following definition will be executed in the SelectCharTable hook% and here right now if we are already processing a listing. \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}% \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}}% \lst@DefRange is not inserted via a hook anymore. Instead it is now called% directly from \lst@SelectCharTable. This was necessary to get rid of an% interference with the escape-to-LaTeX-feature. The bug was reported by% \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung% m\"oglich...}. Another chance is due to the same bug: \lst@DefRange is% redefined globally when the begin of code is found, see below. The bug was% reported by \lsthelper{Tobias~Rapp}{2004/04/06}{undetected end of range if% listing crosses page break} \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit% 'linerangemarker' in umgebrochenen listings}%\lst@AddToHook{SelectCharTable}{\lst@DefRange}\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}%% Actually defining the marker (via \lst@GLI@, \lst@DefRange, \lst@CArgX as% seen above) is similar to \lst@DefDelimB---except that we unfold the first% parameter and use different ,

, and  statements.\def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}\def\lst@DefRangeB@#1#2#3#4{%    \lst@CDef{#1{#2}{#3}}#4{}%    {\lst@ifincluderangemarker         \lst@LeaveMode         \let#1#4%         \lst@DefRangeEnd         \lst@InitLstNumber     \else         \@tempcnta\lst@lineno \advance\@tempcnta\@ne         \edef\lst@firstline{\the\@tempcnta\relax}%         \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%         \lst@InitLstNumber     \fi	 \global\let\lst@DefRange\lst@DefRangeEnd     \lst@CArgEmpty}%    \@empty}%% Modify labels and define |\lst@InitLstNumber| used above.% \lsthelper{Omair-Inam~Abdul-Matin}{2004/05/10}{experimental linerange% feature does not work with firstnumber}\def\lstpatch@labels{%\gdef\lst@SetFirstNumber{%    \ifx\lst@firstnumber\@undefined        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax        \ifnum\@tempcnta=\z@ \else            \lst@nololtrue            \advance\@tempcnta\lst@advancenumber            \edef\lst@firstnumber{\the\@tempcnta\relax}%        \fi    \fi}%}\lst@AddToAtTop\lsthk@PreInit    {\ifx\lst@firstnumber\@undefined         \def\lst@firstnumber{\lst@lineno}%     \fi}\def\lst@InitLstNumber{%     \global\c@lstnumber\lst@firstnumber     \global\advance\c@lstnumber\lst@advancenumber     \global\advance\c@lstnumber-\lst@advancelstnum     \ifx \lst@firstnumber\c@lstnumber         \global\advance\c@lstnumber-\lst@advancelstnum     \fi}%%    The end-marker is defined if and only if it's not empty. The definition is%    similar to \lst@DefDelimE---with the above exceptions and except that we%    define the re-entry point \lst@DefRangeE@@ as it is defined in the new%    version of \lst@MProcessListing above.\def\lst@DefRangeEnd{%    \ifx\lst@rangeend\@empty\else        \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE    \fi}\def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}\def\lst@DefRangeE@#1#2#3#4{%    \lst@CDef{#1#2{#3}}#4{}%    {\let#1#4%     \edef\lst@lastline{\the\lst@lineno\relax}%     \lst@DefRangeE@@}%    \@empty}\def\lst@DefRangeE@@#1\@empty{%    \lst@ifincluderangemarker        #1\lst@XPrintToken    \fi    \lst@LeaveModeToPmode    \lst@BeginDropInput{\lst@Pmode}}%\def\lst@LeaveModeToPmode{%    \ifnum\lst@mode=\lst@Pmode        \expandafter\lsthk@EndGroup    \else        \expandafter\egroup\expandafter\lst@LeaveModeToPmode    \fi}%%    Eventually we shouldn't forget to install \lst@OnceAtEOL, which must%    also be called in \lst@MSkipToFirst.\lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}\gdef\lst@OnceAtEOL{}% Init\def\lst@MSkipToFirst{%    \global\advance\lst@lineno\@ne    \ifnum \lst@lineno=\lst@firstline        \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@        \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty        \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.        \lsthk@InitVarsBOL        \lst@BOLGobble}%        \expandafter\lst@next    \fi}\def\lst@SkipToFirst{%    \ifnum \lst@lineno<\lst@firstline        \def\lst@next{\lst@BeginDropInput\lst@Pmode        \lst@Let{13}\lst@MSkipToFirst        \lst@Let{10}\lst@MSkipToFirst}%        \expandafter\lst@next    \else        \expandafter\lst@BOLGobble    \fi}%%    Finally the service macro \lst@IfNumber:\def\lst@IfNumber#1{%    \ifx\@empty#1\@empty        \let\lst@next\@firstoftwo    \else        \lst@IfNumber@#1\@nil    \fi    \lst@next}\def\lst@IfNumber@#1#2\@nil{%    \let\lst@next\@secondoftwo    \ifnum`#1>47\relax \ifnum`#1>57\relax\else        \let\lst@next\@firstoftwo    \fi\fi}%% b) The following is known to fail with some keys.\lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}\def\lst@Init#1{%    \begingroup    \ifx\lst@float\relax\else        \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%        \expandafter\@tempa    \fi% chmod begin    \ifx\lst@multicols\@empty\else        \edef\lst@next{\noexpand\multicols{\lst@multicols}}        \expandafter\lst@next    \fi% chmod end    \ifhmode\ifinner \lst@boxtrue \fi\fi    \lst@ifbox        \lsthk@BoxUnsafe        \hbox to\z@\bgroup             $\if t\lst@boxpos \vtop        \else \if b\lst@boxpos \vbox        \else \vcenter \fi\fi        \bgroup \par\noindent    \else        \lst@ifdisplaystyle            \lst@EveryDisplay            \par\penalty-50\relax            \vspace\lst@aboveskip        \fi    \fi    \normalbaselines    \abovecaptionskip\lst@abovecaption\relax    \belowcaptionskip\lst@belowcaption\relax    \lst@MakeCaption t%    \lsthk@PreInit \lsthk@Init    \lst@ifdisplaystyle        \global\let\lst@ltxlabel\@empty        \if@inlabel            \lst@ifresetmargins                \leavevmode            \else                \xdef\lst@ltxlabel{\the\everypar}%                \lst@AddTo\lst@ltxlabel{%                    \global\let\lst@ltxlabel\@empty                    \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%            \fi        \fi        \everypar\expandafter{\lst@ltxlabel                              \lsthk@EveryLine\lsthk@EveryPar}%    \else        \everypar{}\let\lst@NewLine\@empty    \fi    \lsthk@InitVars \lsthk@InitVarsBOL    \lst@Let{13}\lst@MProcessListing    \let\lst@Backslash#1%    \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%    \lst@InitFinalize}\def\lst@DeInit{%    \lst@XPrintToken \lst@EOLUpdate    \global\advance\lst@newlines\m@ne    \lst@ifshowlines        \lst@DoNewLines    \else        \setbox\@tempboxa\vbox{\lst@DoNewLines}%    \fi    \lst@ifdisplaystyle \par\removelastskip \fi    \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor    \lst@MakeCaption b%    \lst@ifbox        \egroup $\hss \egroup        \vrule\@width\lst@maxwidth\@height\z@\@depth\z@    \else        \lst@ifdisplaystyle            \par\penalty-50\vspace\lst@belowskip        \fi    \fi% chmod begin    \ifx\lst@multicols\@empty\else        \def\lst@next{\global\let\@checkend\@gobble                      \endmulticols                      \global\let\@checkend\lst@@checkend}        \expandafter\lst@next    \fi% chmod end    \ifx\lst@float\relax\else        \expandafter\lst@endfloat    \fi    \endgroup}\let\lst@@checkend\@checkend%%\endinput%%%% End of file `lstpatch.sty'.
\ No newline at end of file
diff --git a/docs/My_Confirmation/Graphs/action&force_cloak_steady.pdf b/docs/My_Confirmation/Graphs/action&force_cloak_steady.pdf
new file mode 100644
index 0000000..893c82b
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action&force_cloak_steady.pdf differ
diff --git a/docs/My_Confirmation/Graphs/action&sensor_tylor.pdf b/docs/My_Confirmation/Graphs/action&sensor_tylor.pdf
new file mode 100644
index 0000000..138f552
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action&sensor_tylor.pdf differ
diff --git a/docs/My_Confirmation/Graphs/action_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/action_cloak_vortex.pdf
new file mode 100644
index 0000000..a1d894d
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/action_d_illusion.pdf b/docs/My_Confirmation/Graphs/action_d_illusion.pdf
new file mode 100644
index 0000000..b703b48
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action_d_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/action_illusion.pdf b/docs/My_Confirmation/Graphs/action_illusion.pdf
new file mode 100644
index 0000000..e2f0d21
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/action_re_illusion.pdf b/docs/My_Confirmation/Graphs/action_re_illusion.pdf
new file mode 100644
index 0000000..26e7af6
Binary files /dev/null and b/docs/My_Confirmation/Graphs/action_re_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/adc.jpg b/docs/My_Confirmation/Graphs/adc.jpg
new file mode 100644
index 0000000..07de711
Binary files /dev/null and b/docs/My_Confirmation/Graphs/adc.jpg differ
diff --git a/docs/My_Confirmation/Graphs/cloak_tylor.pdf b/docs/My_Confirmation/Graphs/cloak_tylor.pdf
new file mode 100644
index 0000000..5fb6218
Binary files /dev/null and b/docs/My_Confirmation/Graphs/cloak_tylor.pdf differ
diff --git a/docs/My_Confirmation/Graphs/d_illusion.pdf b/docs/My_Confirmation/Graphs/d_illusion.pdf
new file mode 100644
index 0000000..f3ef887
Binary files /dev/null and b/docs/My_Confirmation/Graphs/d_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/error_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/error_cloak_vortex.pdf
new file mode 100644
index 0000000..ed4f72a
Binary files /dev/null and b/docs/My_Confirmation/Graphs/error_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/error_illusion.pdf b/docs/My_Confirmation/Graphs/error_illusion.pdf
new file mode 100644
index 0000000..92fde65
Binary files /dev/null and b/docs/My_Confirmation/Graphs/error_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/error_illusion_unsteady.pdf b/docs/My_Confirmation/Graphs/error_illusion_unsteady.pdf
new file mode 100644
index 0000000..df5d26f
Binary files /dev/null and b/docs/My_Confirmation/Graphs/error_illusion_unsteady.pdf differ
diff --git a/docs/My_Confirmation/Graphs/force_sensor.jpg b/docs/My_Confirmation/Graphs/force_sensor.jpg
new file mode 100644
index 0000000..5d02a93
Binary files /dev/null and b/docs/My_Confirmation/Graphs/force_sensor.jpg differ
diff --git a/docs/My_Confirmation/Graphs/freq_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/freq_cloak_vortex.pdf
new file mode 100644
index 0000000..e56e619
Binary files /dev/null and b/docs/My_Confirmation/Graphs/freq_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/freq_illusion.pdf b/docs/My_Confirmation/Graphs/freq_illusion.pdf
new file mode 100644
index 0000000..f209c41
Binary files /dev/null and b/docs/My_Confirmation/Graphs/freq_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/gantt_chart.pdf b/docs/My_Confirmation/Graphs/gantt_chart.pdf
new file mode 100644
index 0000000..af703a7
Binary files /dev/null and b/docs/My_Confirmation/Graphs/gantt_chart.pdf differ
diff --git a/docs/My_Confirmation/Graphs/on&off_cloak_steady.png b/docs/My_Confirmation/Graphs/on&off_cloak_steady.png
new file mode 100644
index 0000000..e2f3f54
Binary files /dev/null and b/docs/My_Confirmation/Graphs/on&off_cloak_steady.png differ
diff --git a/docs/My_Confirmation/Graphs/pos_tylor.pdf b/docs/My_Confirmation/Graphs/pos_tylor.pdf
new file mode 100644
index 0000000..60e491e
Binary files /dev/null and b/docs/My_Confirmation/Graphs/pos_tylor.pdf differ
diff --git a/docs/My_Confirmation/Graphs/re_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/re_cloak_vortex.pdf
new file mode 100644
index 0000000..9d84f76
Binary files /dev/null and b/docs/My_Confirmation/Graphs/re_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/re_illusion.pdf b/docs/My_Confirmation/Graphs/re_illusion.pdf
new file mode 100644
index 0000000..1d0a002
Binary files /dev/null and b/docs/My_Confirmation/Graphs/re_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/reduce_obs.pdf b/docs/My_Confirmation/Graphs/reduce_obs.pdf
new file mode 100644
index 0000000..cbc884d
Binary files /dev/null and b/docs/My_Confirmation/Graphs/reduce_obs.pdf differ
diff --git a/docs/My_Confirmation/Graphs/renderview.png b/docs/My_Confirmation/Graphs/renderview.png
new file mode 100644
index 0000000..9245941
Binary files /dev/null and b/docs/My_Confirmation/Graphs/renderview.png differ
diff --git a/docs/My_Confirmation/Graphs/schematic_cloak_steady.pdf b/docs/My_Confirmation/Graphs/schematic_cloak_steady.pdf
new file mode 100644
index 0000000..5d4f732
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_cloak_steady.pdf differ
diff --git a/docs/My_Confirmation/Graphs/schematic_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/schematic_cloak_vortex.pdf
new file mode 100644
index 0000000..96e5439
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/schematic_illusion.pdf b/docs/My_Confirmation/Graphs/schematic_illusion.pdf
new file mode 100644
index 0000000..0a84cd7
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/schematic_illusion.png b/docs/My_Confirmation/Graphs/schematic_illusion.png
new file mode 100644
index 0000000..06ba735
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_illusion.png differ
diff --git a/docs/My_Confirmation/Graphs/schematic_illusion_unsteady.pdf b/docs/My_Confirmation/Graphs/schematic_illusion_unsteady.pdf
new file mode 100644
index 0000000..48c6c0b
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_illusion_unsteady.pdf differ
diff --git a/docs/My_Confirmation/Graphs/schematic_tylor.pdf b/docs/My_Confirmation/Graphs/schematic_tylor.pdf
new file mode 100644
index 0000000..eed8a35
Binary files /dev/null and b/docs/My_Confirmation/Graphs/schematic_tylor.pdf differ
diff --git a/docs/My_Confirmation/Graphs/sensor_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/sensor_cloak_vortex.pdf
new file mode 100644
index 0000000..b400f80
Binary files /dev/null and b/docs/My_Confirmation/Graphs/sensor_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/sensor_illusion.pdf b/docs/My_Confirmation/Graphs/sensor_illusion.pdf
new file mode 100644
index 0000000..f0bb378
Binary files /dev/null and b/docs/My_Confirmation/Graphs/sensor_illusion.pdf differ
diff --git a/docs/My_Confirmation/Graphs/sensor_illusion_unsteady.pdf b/docs/My_Confirmation/Graphs/sensor_illusion_unsteady.pdf
new file mode 100644
index 0000000..bc01ec0
Binary files /dev/null and b/docs/My_Confirmation/Graphs/sensor_illusion_unsteady.pdf differ
diff --git a/docs/My_Confirmation/Graphs/sideview.pdf b/docs/My_Confirmation/Graphs/sideview.pdf
new file mode 100644
index 0000000..afa2b2b
Binary files /dev/null and b/docs/My_Confirmation/Graphs/sideview.pdf differ
diff --git a/docs/My_Confirmation/Graphs/topview.pdf b/docs/My_Confirmation/Graphs/topview.pdf
new file mode 100644
index 0000000..4e0dee2
Binary files /dev/null and b/docs/My_Confirmation/Graphs/topview.pdf differ
diff --git a/docs/My_Confirmation/Graphs/train_cloak.pdf b/docs/My_Confirmation/Graphs/train_cloak.pdf
new file mode 100644
index 0000000..77e5442
Binary files /dev/null and b/docs/My_Confirmation/Graphs/train_cloak.pdf differ
diff --git a/docs/My_Confirmation/Graphs/velo_profile.pdf b/docs/My_Confirmation/Graphs/velo_profile.pdf
new file mode 100644
index 0000000..3587c9f
Binary files /dev/null and b/docs/My_Confirmation/Graphs/velo_profile.pdf differ
diff --git a/docs/My_Confirmation/Graphs/vort_cloak_vortex.pdf b/docs/My_Confirmation/Graphs/vort_cloak_vortex.pdf
new file mode 100644
index 0000000..3ced99b
Binary files /dev/null and b/docs/My_Confirmation/Graphs/vort_cloak_vortex.pdf differ
diff --git a/docs/My_Confirmation/Graphs/vort_illusion.pdf b/docs/My_Confirmation/Graphs/vort_illusion.pdf
new file mode 100644
index 0000000..81503d6
Binary files /dev/null and b/docs/My_Confirmation/Graphs/vort_illusion.pdf differ
diff --git a/docs/My_Confirmation/README.md b/docs/My_Confirmation/README.md
new file mode 100644
index 0000000..fd28f50
--- /dev/null
+++ b/docs/My_Confirmation/README.md
@@ -0,0 +1,5 @@
+# PolyU-Thesis-Template
+
+A latex template for the thesis of The Hong Kong Polytechnic University.
+
+[Here](Thesis_template.pdf) is a pdf exmaple.
diff --git a/docs/My_Confirmation/Thesis.cls b/docs/My_Confirmation/Thesis.cls
new file mode 100644
index 0000000..76579c2
--- /dev/null
+++ b/docs/My_Confirmation/Thesis.cls
@@ -0,0 +1,468 @@
+%%
+%% This is file `Thesis.cls', based on 'ECSthesis.cls', by Steve R. Gunn
+%% generated with the docstrip utility.
+%%
+%% Created by Steve R. Gunn, modified by Sunil Patel: www.sunilpatel.co.uk
+
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesClass{Thesis}
+              [2007/22/02 v1.0
+   LaTeX document class]
+\def\baseclass{book}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\baseclass}}
+\def\@checkoptions#1#2{
+  \edef\@curroptions{\@ptionlist{\@currname.\@currext}}
+  \@tempswafalse
+  \@tfor\@this:=#2\do{
+    \@expandtwoargs\in@{,\@this,}{,\@curroptions,}
+    \ifin@ \@tempswatrue \@break@tfor \fi}
+  \let\@this\@empty
+  \if@tempswa \else \PassOptionsToClass{#1}{\baseclass}\fi
+}
+\@checkoptions{11pt}{{10pt}{11pt}{12pt}}
+\PassOptionsToClass{a4paper}{\baseclass}
+\ProcessOptions\relax
+\LoadClass{\baseclass}
+\newcommand\bhrule{\typeout{------------------------------------------------------------------------------}}
+
+\newcommand\Declaration[1]{
+\btypeout{Certificate of Originality}
+\addtotoc{Certificate of Originality}
+\thispagestyle{plain}
+\null\vfil
+%\vskip 60\p@
+\begin{center}{\huge\bf CERTIFICATE OF ORIGINALITY\par}\end{center}
+%\vskip 60\p@
+{\normalsize #1}
+\vfil\vfil\null
+%\cleardoublepage
+}
+
+\newcommand\btypeout[1]{\bhrule\typeout{\space #1}\bhrule}
+\def\today{\ifcase\month\or
+  January\or February\or March\or April\or May\or June\or
+  July\or August\or September\or October\or November\or December\fi
+  \space \number\year}
+\usepackage{setspace}
+\onehalfspacing
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{2.0ex plus0.5ex minus0.2ex}
+\usepackage{vmargin}
+\setmarginsrb           { 1.5in}  % left margin
+                        { 0.6in}  % top margin
+                        { 1.0in}  % right margin
+                        { 0.8in}  % bottom margin
+                        {  20pt}  % head height
+                        {0.25in}  % head sep
+                        {   9pt}  % foot height
+                        { 0.3in}  % foot sep
+\raggedbottom
+\setlength{\topskip}{1\topskip \@plus 5\p@}
+\doublehyphendemerits=10000       % No consecutive line hyphens.
+\brokenpenalty=10000              % No broken words across columns/pages.
+\widowpenalty=9999                % Almost no widows at bottom of page.
+\clubpenalty=9999                 % Almost no orphans at top of page.
+\interfootnotelinepenalty=9999    % Almost never break footnotes.
+\usepackage{fancyhdr}
+\lhead[\rm\thepage]{\fancyplain{}{\sl{\rightmark}}}
+\rhead[\fancyplain{}{\sl{\leftmark}}]{\rm\thepage}
+\chead{}\lfoot{}\rfoot{}\cfoot{}
+
+\pagestyle{fancy}
+
+\renewcommand{\chaptermark}[1]{\btypeout{\thechapter\space #1}\markboth{\@chapapp\ \thechapter\ #1}{\@chapapp\ \thechapter\ #1}}
+
+\renewcommand{\sectionmark}[1]{}
+
+\renewcommand{\subsectionmark}[1]{}
+
+\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
+\hbox{}
+\thispagestyle{empty}
+% \newpage
+\if@twocolumn\hbox{}\newpage\fi\fi\fi}
+
+% packages----------------------------------------------------
+
+% Table configuration packages
+\usepackage{array,graphicx}
+\usepackage{booktabs}
+\usepackage{pifont}
+\usepackage{tabu}
+\usepackage{longtable}
+\usepackage{xcolor}
+\usepackage{tcolorbox}
+\usepackage{textcomp}
+\usepackage{multicol}
+\usepackage{url}
+\def\UrlBreaks{\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
+\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V
+\do\W\do\X\do\Y\do\Z\do\[\do\\\do\]\do\^\do\_\do\`\do\a\do\b
+\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n
+\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z
+\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\,
+\do\?\do\'\do+\do\=\do\#} 
+
+
+
+%----------------------------
+
+
+
+
+
+
+
+
+
+
+\usepackage{amsmath,amsfonts,amssymb,amscd,amsthm,xspace}
+\theoremstyle{plain}
+\newtheorem{example}{Example}[chapter]
+\newtheorem{theorem}{Theorem}[chapter]
+\newtheorem{corollary}[theorem]{Corollary}
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{proposition}[theorem]{Proposition}
+\newtheorem{axiom}[theorem]{Axiom}
+\theoremstyle{definition}
+\newtheorem{definition}[theorem]{Definition}
+\theoremstyle{remark}
+\newtheorem{remark}[theorem]{Remark}
+\usepackage[centerlast,small,sc]{caption}
+\setlength{\captionmargin}{20pt}
+\newcommand{\fref}[1]{Fig.~\ref{#1}}
+\newcommand{\tref}[1]{Table~\ref{#1}}
+\newcommand{\eref}[1]{Equation~\ref{#1}}
+\newcommand{\cref}[1]{Chapter~\ref{#1}}
+\newcommand{\sref}[1]{Section~\ref{#1}}
+\newcommand{\aref}[1]{Appendix~\ref{#1}}
+\renewcommand{\topfraction}{0.85}
+\renewcommand{\bottomfraction}{.85}
+\renewcommand{\textfraction}{0.1}
+\renewcommand{\dbltopfraction}{.85}
+\renewcommand{\floatpagefraction}{0.75}
+\renewcommand{\dblfloatpagefraction}{.75}
+\setcounter{topnumber}{9}
+\setcounter{bottomnumber}{9}
+\setcounter{totalnumber}{20}
+\setcounter{dbltopnumber}{9}
+\usepackage{graphicx}
+\usepackage{epstopdf}
+%\usepackage[scriptsize]{subfigure}
+\usepackage{booktabs}
+\usepackage{rotating}
+\usepackage{listings}
+\usepackage{Format/lstpatch}
+\lstset{captionpos=b,
+        frame=tb,
+        basicstyle=\scriptsize\ttfamily,
+        showstringspaces=false,
+        keepspaces=true}
+\lstdefinestyle{matlab} {
+        language=Matlab,
+        keywordstyle=\color{blue},
+        commentstyle=\color[rgb]{0.13,0.55,0.13}\em,
+        stringstyle=\color[rgb]{0.7,0,0} }
+\usepackage[pdfpagemode={UseOutlines},bookmarks=true,bookmarksopen=true,
+   bookmarksopenlevel=0,bookmarksnumbered=true,hypertexnames=false,
+   colorlinks,linkcolor={blue},citecolor={blue},urlcolor={red},
+   pdfstartview={FitV},unicode,breaklinks=true]{hyperref}
+   
+\pdfstringdefDisableCommands{
+   \let\\\space
+}
+\newcommand*{\examiner}[1]{\def\examname{#1}}
+%\newcommand*{\degree}[1]{\def\degreename{#1}}
+\newcommand*{\authors}[1]{\def\authornames{#1}}
+\newcommand*{\addresses}[1]{\def\addressnames{#1}}
+\newcommand*{\university}[1]{\def\univname{#1}}
+\newcommand*{\UNIVERSITY}[1]{\def\UNIVNAME{#1}}
+\newcommand*{\department}[1]{\def\deptname{#1}}
+\newcommand*{\DEPARTMENT}[1]{\def\DEPTNAME{#1}}
+\newcommand*{\group}[1]{\def\groupname{#1}}
+\newcommand*{\GROUP}[1]{\def\GROUPNAME{#1}}
+\newcommand*{\faculty}[1]{\def\facname{#1}}
+\newcommand*{\FACULTY}[1]{\def\FACNAME{#1}}
+\newcommand*{\subject}[1]{\def\subjectname{#1}}
+\newcommand*{\keywords}[1]{\def\keywordnames{#1}}
+\newcommand*{\supervisor}[1]{\def\supname{#1}}
+\examiner    {}
+%\degree      {}
+\authors     {}
+\university  {\texorpdfstring{\href{https://www.auth.gr}
+                {The Hong Kong Polytechnic University}}
+                {University name}}
+\UNIVERSITY  {\texorpdfstring{
+                {\Large The Hong Kong Polytechnic University}}
+                {UNIVERSITY NAME (IN BLOCK CAPITALS)}}
+\department  {\texorpdfstring{
+                {Department of Mechanical Engineering}}
+                {Department or School Name}}
+\DEPARTMENT  {\texorpdfstring{
+                {Department of Mechanical Engineering}}
+                {DEPARTMENT OR SCHOOL NAME (IN BLOCK CAPITALS)}}
+\group       {\texorpdfstring{\href{https://datalab.csd.auth.gr/}
+                {Datalab: Tang Group}}
+                {Research Group Name}}
+\GROUP       {\texorpdfstring{\href{https://datalab.csd.auth.gr/}
+                {DATALAB: Tang Group}}
+                {RESEARCH GROUP NAME (IN BLOCK CAPITALS)}}
+\faculty     {\texorpdfstring{
+                {Faculty of Engineering}}
+                {Faculty Name}}
+\FACULTY     {\texorpdfstring{\href{http://www.sci.auth.gr/}
+                {FACULTY OF Engineering}}
+                {FACULTY NAME (IN BLOCK CAPITALS)}}
+\supervisor  {\texorpdfstring{
+                {Supervising Professor: Tang Hui, Chen Shiyi}}
+                {Supervising Professor's name}}               
+\addresses   {}
+\subject     {}
+\keywords    {}
+
+
+\renewcommand\maketitle{
+  \btypeout{Title Page}
+  \hypersetup{pdftitle={\@title}}
+  \hypersetup{pdfsubject=\subjectname}
+  \hypersetup{pdfauthor=\authornames}
+  \hypersetup{pdfkeywords=\keywordnames}
+  \thispagestyle{empty}
+  \begin{titlepage}
+    \let\footnotesize\small
+    \let\footnoterule\relax
+    \let \footnote \thanks
+    \setcounter{footnote}{0}
+    \null\vfil
+    \vskip 60\p@
+    \begin{center}
+        % \begin{figure}
+        %     \centering
+        %     \includegraphics[scale=0.45]{Figures/Logo_polyu}
+        % \end{figure}
+      \setlength{\parskip}{0pt}
+      {\Huge \UNIVNAME \par}
+      \par
+      {\large \deptname \par}
+      \vfill
+      {\huge \bf \@title \par}
+      \vfill
+      %{\large by \par}
+    %   \bigskip
+    %   \bigskip
+      {\LARGE \authornames \par}
+      \vfill
+      {\large \textit{A report submitted in partial fulfilment of the requirements} \par}
+      {\large \textit{for the confirmation of} \par}
+      {\large \textit{\textbf{Doctor of Philosophy}} \par}
+      \bigskip
+      \bigskip
+      %{\large \textit{in the} \par}
+      %{\large \deptname \par}
+      %{\large \facname \par}
+      \bigskip
+      \bigskip
+     % {\large \supname \par}
+      \bigskip
+      \bigskip
+      \bigskip
+      \bigskip
+      {\Large \@date \par}
+    \end{center}
+    \par
+    \@thanks
+    \vfil\null
+  \end{titlepage}
+  \setcounter{footnote}{0}%
+  \global\let\thanks\relax
+  \global\let\maketitle\relax
+  \global\let\@thanks\@empty
+  \global\let\@author\@empty
+  \global\let\@date\@empty
+  \global\let\@title\@empty
+  \global\let\title\relax
+  \global\let\author\relax
+  \global\let\date\relax
+  \global\let\and\relax
+  \clearpage
+}
+
+
+
+% \newenvironment{abstract}
+% {
+%   \btypeout{Abstract Page}
+%   \thispagestyle{empty}
+%   \null\vfil
+%   \begin{center}
+%     \setlength{\parskip}{0pt}
+%     {\normalsize \UNIVNAME \par}
+%     \bigskip
+%     {\huge{\textit{Abstract}} \par}
+%     \bigskip
+%     {\normalsize \facname \par}
+%     {\normalsize \deptname \par}
+%     \bigskip
+%     {\normalsize Undergraduate Degree\par}
+%     \bigskip
+%     {\normalsize\bf \@title \par}
+%     \medskip
+%     {\normalsize by \authornames \par}
+%     \bigskip
+%   \end{center}
+% }
+
+\newenvironment{abstract}
+{
+  \btypeout{Abstract Page}
+  \thispagestyle{plain}
+  %\null\vfil
+  \begin{center}
+    {\huge{\textit{Abstract}} \par}
+  \end{center}
+}
+{
+  \vfil\vfil\vfil\null
+  \clearpage
+}
+\addtocounter{secnumdepth}{1}
+\setcounter{tocdepth}{6}
+\newcounter{dummy}
+
+
+\newcommand\addtotoc[1]{
+\refstepcounter{dummy}
+\addcontentsline{toc}{chapter}{#1}}
+
+\renewcommand\tableofcontents{
+\btypeout{Table of Contents}
+\begin{spacing}{1}{
+    \setlength{\parskip}{1pt}
+    \if@twocolumn
+      \@restonecoltrue\onecolumn
+    \else
+      \@restonecolfalse
+    \fi
+    \chapter*{\contentsname
+        \@mkboth{
+           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
+    \@starttoc{toc}
+    \if@restonecol\twocolumn\fi
+   \clearpage
+}\end{spacing}
+}
+
+\renewcommand\listoffigures{
+\btypeout{List of Figures}
+\addtotoc{List of Figures}
+\begin{spacing}{1}{
+    \setlength{\parskip}{1pt}
+    \if@twocolumn
+      \@restonecoltrue\onecolumn
+    \else
+      \@restonecolfalse
+    \fi
+    \chapter*{\listfigurename
+      \@mkboth{\MakeUppercase\listfigurename}
+              {\MakeUppercase\listfigurename}}
+    \@starttoc{lof}
+    \if@restonecol\twocolumn\fi
+    \clearpage
+}\end{spacing}
+}
+\renewcommand\listoftables{
+\btypeout{List of Tables}
+\addtotoc{List of Tables}
+\begin{spacing}{1}{
+    \setlength{\parskip}{1pt}
+    \if@twocolumn
+      \@restonecoltrue\onecolumn
+    \else
+      \@restonecolfalse
+    \fi
+    \chapter*{\listtablename
+      \@mkboth{
+          \MakeUppercase\listtablename}{\MakeUppercase\listtablename}}
+    \@starttoc{lot}
+    \if@restonecol\twocolumn\fi
+    \clearpage
+}\end{spacing}
+}
+\newcommand\listsymbolname{Abbreviations}
+\usepackage{longtable}
+\newcommand\listofsymbols[2]{
+\btypeout{\listsymbolname}
+\addtotoc{\listsymbolname}
+    \chapter*{\listsymbolname
+      \@mkboth{
+          \MakeUppercase\listsymbolname}{\MakeUppercase\listsymbolname}}
+\begin{longtable}[c]{#1}#2\end{longtable}\par
+    \cleardoublepage
+}
+\newcommand\listconstants{Physical Constants}
+\usepackage{longtable}
+\newcommand\listofconstants[2]{
+\btypeout{\listconstants}
+\addtotoc{\listconstants}
+    \chapter*{\listconstants
+      \@mkboth{
+          \MakeUppercase\listconstants}{\MakeUppercase\listconstants}}
+\begin{longtable}[c]{#1}#2\end{longtable}\par
+    \cleardoublepage
+}
+\newcommand\listnomenclature{Symbols}
+\usepackage{longtable}
+\newcommand\listofnomenclature[2]{
+\btypeout{\listnomenclature}
+\addtotoc{\listnomenclature}
+    \chapter*{\listnomenclature
+      \@mkboth{
+          \MakeUppercase\listnomenclature}{\MakeUppercase\listnomenclature}}
+\begin{longtable}[c]{#1}#2\end{longtable}\par
+    \cleardoublepage
+}
+
+
+\newcommand\acknowledgements[1]{
+\btypeout{Acknowledgements}
+\addtotoc{Acknowledgements}
+\thispagestyle{plain}
+\begin{center}{\huge{\textit{Acknowledgements}} \par}\end{center}
+{\normalsize #1}
+\vfil\vfil\null
+}
+
+\newcommand\publications[1]{
+\btypeout{Publications}
+\addtotoc{Publications Arising from the Thesis}
+\thispagestyle{plain}
+\begin{center}{\huge{\textit{Publications Arising from the Thesis}} \par}\end{center}
+{\normalsize #1}
+\vfil\vfil\null
+}
+
+
+
+\newcommand\dedicatory[1]{
+\btypeout{Dedicatory}
+\thispagestyle{plain}
+\null\vfil
+\vskip 60\p@
+\begin{center}{\Large \sl #1}\end{center}
+\vfil\null
+% \cleardoublepage
+\clearpage
+}
+\renewcommand\backmatter{
+  \if@openright
+    % \cleardoublepage
+    \clearpage
+  \else
+    \clearpage
+  \fi
+  \addtotoc{\bibname}
+  \btypeout{\bibname}
+  \@mainmatterfalse}
+\endinput
+%%
+%% End of file `Thesis.cls'.
diff --git a/docs/My_Confirmation/Thesis.tex b/docs/My_Confirmation/Thesis.tex
new file mode 100644
index 0000000..3bdbc1b
--- /dev/null
+++ b/docs/My_Confirmation/Thesis.tex
@@ -0,0 +1,208 @@
+%% ----------------------------------------------------------------
+%% Thesis.tex -- MAIN FILE 
+%% Use the "Thesis" style, based on the ECS Thesis style by Steve Gunn
+%% Revised by Qiang Yang
+%% ---------------------------------------------------------------- 
+
+% Set up the document
+\documentclass[a4paper, 11pt, twoside]{Thesis} 
+
+
+%----------packages----------------
+\usepackage{amsmath,amssymb,amsfonts}
+\usepackage{mathptmx}
+\usepackage[T1]{fontenc}
+\usepackage[ruled,linesnumbered]{algorithm2e}
+\usepackage{multirow}
+\usepackage{wrapfig}
+\graphicspath{{Figures/}} % Location of the graphics files (set up for graphics to be in PDF format)
+\usepackage{subfig}
+\captionsetup{labelfont=rm,figurename=Figure} %FIGURE->Figure
+\captionsetup[subfloat]{labelfont=rm,labelformat=simple} % (A)->(a)
+\renewcommand{\thesubfigure}{(\alph{subfigure})} % Fig. 3.3a -> Fig.3.3(a)
+\usepackage{gensymb} % \degree
+\usepackage{graphbox}
+\usepackage{libertine}
+\usepackage[square, numbers, comma, sort&compress]{natbib}  % Use the "Natbib" style for the references in the Bibliography
+\usepackage{verbatim}  % Needed for the "comment" environment to make LaTeX comments
+\usepackage{float} % To keep figures in place
+\hypersetup{urlcolor=black, % url
+citecolor=violet, % citation
+linkcolor=violet, % table of contents, inner color
+colorlinks=true,  
+pdfborder = {0 0 0}}  % Colours hyperlinks in blue
+% Define enumerated description lists
+\usepackage{enumitem}
+\usepackage{kantlipsum}
+%------------------------------------
+
+%----------new commands--------------
+\renewcommand{\bibname}{Reference}
+\newcommand{\todo}[1]{\textcolor{red}{TODO: #1}\PackageWarning{TODO:}{#1!}}
+\newcommand{\update}[1]{\textcolor{blue}{#1}}
+\newcommand{\rev}[1]{\textcolor{red}{#1}} 
+\newcommand{\etal}{\textit{et al}.}
+\newcommand{\ie}{\textit{i}.\textit{e}.}
+\newcommand{\eg}{\textit{e}.\textit{g}.}
+\newcommand{\etc}{\textit{etc}.}
+\newcommand{\bits}[1]{\texttt{#1}}
+\newcommand{\cmd}[1]{\texttt{#1}}
+\newcommand{\code}[1]{\texttt{#1}}
+\renewcommand\chaptermark[1]{\markboth{\chaptername\ \thechapter. #1}{}}
+\renewcommand\sectionmark[1]{\markright{\thesection. #1}}
+%--------------------------------------
+
+%-------------control-------------------
+\addtolength{\oddsidemargin}{-18pt} % left margin of odd
+\addtolength{\evensidemargin}{18pt} % left margin of even
+\newcounter{descriptcount}
+\newcounter{descriptcount2}
+\newlist{enumdescript}{description}{2}
+\setlist[enumdescript,1]{%
+  before={\setcounter{descriptcount}{0}%
+          \renewcommand*\thedescriptcount{\arabic{descriptcount}.}}
+  ,font=\bfseries\stepcounter{descriptcount}\thedescriptcount~
+}
+\setlist[enumdescript,2]{%
+  before={\setcounter{descriptcount2}{0}%
+          \renewcommand*\thedescriptcount{\roman{descriptcount2}.}}
+  ,font=\bfseries\stepcounter{descriptcount2}\thedescriptcount~
+}
+% reduce the word break between lines
+% \tolerance=1
+% \emergencystretch=\maxdimen
+% \hyphenpenalty=10000
+% \hbadness=10000
+%---------------------------------------
+
+
+\makeatother
+
+
+%% ------------Document begins---------------------------
+\begin{document}
+
+%% ---Cover page---------------
+% \input{Format/Coverpage}
+
+%%-------title page------------
+% For changes in supervisor, degree type, research group, etc. please change the Thesis.cls file
+
+\frontmatter      % Begin the book's numbering; frontpage
+%\pagenumbering{arabic}
+
+% Set up the Title Page
+\title{Hydrodynamic Cloaking and Illusion Using Active Flow Control}
+
+\authors  {\texorpdfstring
+            {\href{mailto:yan-qi.wang@connect.polyu.hk}{WANG YANQI}}
+            {Author's Name}
+            }
+\addresses  {\groupname\\\deptname\\\univname}  % Do not change this here, instead these must be set in the "Thesis.cls" file, please look through it instead
+\date       {August 2025}
+\subject    {}
+\keywords   {}
+
+\maketitle
+
+%% ------------format settings ---------
+
+\setstretch{1.5}  % It is better to have smaller font and larger line spacing than the other way round
+
+% Define the page headers using the FancyHdr package and set up for one-sided printing
+\fancyhead{}  % Clears all page headers and footers
+\rhead{\thepage}  % Sets the right side header to show the page number
+\lhead{}  % Clears the left side page header
+\pagestyle{fancy}  % Finally, use the "fancy" page style to implement the FancyHdr headers
+
+%% ------------Declaration Page----------
+% Declaration Page required for the Thesis, your institution may give you a different text to place here
+% \input{Format/Declaration}
+
+
+%% -------------
+% add a empty page
+% \pagestyle{empty}
+% \vfill\vfill\vfill\vfill\vfill\vfill\null
+
+% \clearpage
+%% --------------
+
+
+%%--------- The Abstract Page---------------------
+\addtotoc{Abstract}  % Add the "Abstract" page entry to the Contents
+\input{Format/Abstract}
+% \clearpage  % Abstract ended, start a new page
+
+%%----------Publication Page----------------------
+% \input{Format/Publication}
+
+
+%-----------The Acknowledgements page-------------
+% \input{Format/ACK}
+% \clearpage  % End of the Acknowledgements
+
+
+%% ---------Add Table of Content-------------------
+
+\pagestyle{fancy}  %The page style headers have been "empty" all this time, now use the "fancy" headers as defined before to bring them back
+
+\lhead{\emph{Contents}}  % Set the left side page header to "Contents"
+\tableofcontents  % Write out the Table of Contents
+
+%% ---------List of Figures and Tables-------------
+\lhead{\emph{List of Figures}}  % Set the left side page header to "List if Figures"
+\listoffigures  % Write out the List of Figures
+\let\cleardoublepage\clearpage % clear the blank page
+
+\lhead{\emph{List of Tables}}  % Set the left side page header to "List of Tables"
+\listoftables  % Write out the List of Tables
+
+%% ---------Abbreviations-----------------------------
+\setstretch{1.5}  % Set the line spacing to 1.5, this makes the following tables easier to read
+% \clearpage  % Start a new page
+% \lhead{\emph{Abbreviations}}  % Set the left side page header to "Abbreviations"
+% \listofsymbols{ll}  % Include a list of Abbreviations (a table of two columns)
+% {
+% \textbf{Acronym} & \textbf{W}hat (it) \textbf{S}tands \textbf{F}or \\
+% % Abbreviations go here
+% }
+
+
+
+%% ---------Text format--------------------------------
+\mainmatter	  % Begin normal, numeric (1,2,3...) page numbering
+\pagestyle{fancy}  % Return the page headers back to the "fancy" style
+\fancyhf{}
+\fancyhead[OL]{\rightmark}
+\fancyhead[OR]{\thepage}
+\fancyhead[EL]{\thepage}
+\fancyhead[ER]{\leftmark}
+
+
+%%---------Thesis text----------------------------------
+
+\input{Chapters/1.Introduction} 
+\input{Chapters/2.ProblemDescription}
+\input{Chapters/3.Methodology}
+\input{Chapters/4.Result}
+\input{Chapters/5.Conclusion&FutureWork}
+
+\addtocontents{toc}{\vspace{2em}}  % Add a gap in the Contents, for aesthetics
+\backmatter % End the book's numbering; backpage
+
+%% --------Reference-------------------------------------
+\label{Bibliography}
+\fancyhf{}
+\fancyhead[OL]{\emph{References}}
+\fancyhead[OR]{\thepage}
+\fancyhead[EL]{\thepage}
+\fancyhead[ER]{\emph{References}}
+
+% Reference style
+% \bibliographystyle{ACM-Reference-Format}
+\bibliographystyle{acm}
+\bibliography{mybibfile}  
+
+\end{document}  % The End
+%% ----------------------------------------------------------------
\ No newline at end of file
diff --git a/docs/My_Confirmation/Thesis_template.pdf b/docs/My_Confirmation/Thesis_template.pdf
new file mode 100644
index 0000000..25748ff
Binary files /dev/null and b/docs/My_Confirmation/Thesis_template.pdf differ
diff --git a/docs/My_Confirmation/mybibfile.bib b/docs/My_Confirmation/mybibfile.bib
new file mode 100644
index 0000000..cf1dbfe
--- /dev/null
+++ b/docs/My_Confirmation/mybibfile.bib
@@ -0,0 +1,603 @@
+@article{dolin1961possibility,
+  title={To the possibility of comparison of three-dimensional electromagnetic systems with nonuniform anisotropic filling},
+  author={Dolin, Lev S},
+  journal={Izv. Vyssh. Uchebn. Zaved. Radiofizika},
+  volume={4},
+  number={5},
+  pages={964--967},
+  year={1961}
+}
+
+@article{kerker1975invisible,
+  title={Invisible bodies},
+  author={Kerker, Milton},
+  journal={Journal of the Optical Society of America},
+  volume={65},
+  number={4},
+  pages={376--379},
+  year={1975},
+  publisher={Optical Society of America}
+}
+
+@article{leonhardt2006optical,
+  title={Optical conformal mapping},
+  author={Leonhardt, Ulf},
+  journal={science},
+  volume={312},
+  number={5781},
+  pages={1777--1780},
+  year={2006},
+  publisher={American Association for the Advancement of Science}
+}
+
+@article{pendry2006controlling,
+  title={Controlling electromagnetic fields},
+  author={Pendry, John B and Schurig, David and Smith, David R},
+  journal={science},
+  volume={312},
+  number={5781},
+  pages={1780--1782},
+  year={2006},
+  publisher={American Association for the Advancement of Science}
+}
+
+@article{ward1996refraction,
+  title={Refraction and geometry in Maxwell's equations},
+  author={Ward, Alexander J and Pendry, John B},
+  journal={Journal of modern optics},
+  volume={43},
+  number={4},
+  pages={773--793},
+  year={1996},
+  publisher={Taylor \& Francis}
+}
+
+@article{farhat2008broadband,
+  title={Broadband cylindrical acoustic cloak for linear surface waves in a fluid},
+  author={Farhat, Mohamed and Enoch, Stefan and Guenneau, S{\'e}bastien and Movchan, AB},
+  journal={Physical review letters},
+  volume={101},
+  number={13},
+  pages={134501},
+  year={2008},
+  publisher={APS}
+}
+
+@article{milton2006cloaking,
+  title={On cloaking for elasticity and physical equations with a transformation invariant form},
+  author={Milton, Graeme W and Briane, Marc and Willis, John R},
+  journal={New journal of physics},
+  volume={8},
+  number={10},
+  pages={248},
+  year={2006},
+  publisher={IOP Publishing}
+}
+
+@article{rahm2008design,
+  title={Design of electromagnetic cloaks and concentrators using form-invariant coordinate transformations of Maxwell’s equations},
+  author={Rahm, Marco and Schurig, David and Roberts, Daniel A and Cummer, Steven A and Smith, David R and Pendry, John B},
+  journal={Photonics and Nanostructures-fundamentals and Applications},
+  volume={6},
+  number={1},
+  pages={87--95},
+  year={2008},
+  publisher={Elsevier}
+}
+
+@article{chen2007transformation,
+  title={Transformation media that rotate electromagnetic fields},
+  author={Chen, Huanyang and Chan, Che Ting},
+  journal={Applied Physics Letters},
+  volume={90},
+  number={24},
+  year={2007},
+  publisher={AIP Publishing}
+}
+
+@article{shalaev2008transforming,
+  title={Transforming light},
+  author={Shalaev, Vladimir M},
+  journal={Science},
+  volume={322},
+  number={5900},
+  pages={384--386},
+  year={2008},
+  publisher={American Association for the Advancement of Science}
+}
+
+@article{gomory2012experimental,
+  title={Experimental realization of a magnetic cloak},
+  author={G{\"o}m{\"o}ry, Fedor and Solovyov, Mykola and {\v{S}}ouc, J{\'a}n and Navau, Carles and Prat-Camps, Jordi and Sanchez, Alvaro},
+  journal={Science},
+  volume={335},
+  number={6075},
+  pages={1466--1468},
+  year={2012},
+  publisher={American Association for the Advancement of Science}
+}
+
+@article{cummer2008scattering,
+  title={Scattering theory derivation of a 3D acoustic cloaking shell},
+  author={Cummer, Steven A and Popa, Bogdan-Ioan and Schurig, David and Smith, David R and Pendry, John and Rahm,  Marco and Starr, Anthony},
+  journal={Physical review letters},
+  volume={100},
+  number={2},
+  pages={024301},
+  year={2008},
+  publisher={APS}
+}
+
+@book{yeung2022introduction,
+  title={Introduction to Thermal Cloaking: Theory and Analysis in Conduction and Convection},
+  author={Yeung, Woon-Shing and Yang, Ruey-Jen},
+  year={2022},
+  publisher={Springer}
+}
+
+@article{urzhumov2011fluid,
+  title={Fluid flow control with transformation media},
+  author={Urzhumov, Yaroslav A and Smith, David R},
+  journal={Physical review letters},
+  volume={107},
+  number={7},
+  pages={074501},
+  year={2011},
+  publisher={APS}
+}
+
+@article{park2019hydrodynamic,
+  title={Hydrodynamic metamaterial cloak for drag-free flow},
+  author={Park, Juhyuk and Youn, Jae Ryoun and Song, Young Seok},
+  journal={Physical review letters},
+  volume={123},
+  number={7},
+  pages={074502},
+  year={2019},
+  publisher={APS}
+}
+
+@article{park2019fluid,
+  title={Fluid-flow rotator based on hydrodynamic metamaterial},
+  author={Park, Juhyuk and Youn, Jae Ryoun and Song, Young Seok},
+  journal={Physical Review Applied},
+  volume={12},
+  number={6},
+  pages={061002},
+  year={2019},
+  publisher={APS}
+}
+
+@article{chen2012broadband,
+  title={Broadband polygonal invisibility cloak for visible light},
+  author={Chen, Hongsheng and Zheng, Bin},
+  journal={Scientific reports},
+  volume={2},
+  number={1},
+  pages={255},
+  year={2012},
+  publisher={Nature Publishing Group UK London}
+}
+
+@article{han2014experimental,
+  title={Experimental demonstration of a bilayer thermal cloak},
+  author={Han, Tiancheng and Bai, Xue and Gao, Dongliang and Thong, John TL and Li, Baowen and Qiu, Cheng-Wei},
+  journal={Physical review letters},
+  volume={112},
+  number={5},
+  pages={054302},
+  year={2014},
+  publisher={APS}
+}
+
+@article{tay2022metamaterial,
+  title={A metamaterial-free fluid-flow cloak},
+  author={Tay, Fuyang and Zhang, Youming and Xu, Hongyi and Goh, Honghui and Luo, Yu and Zhang, Baile},
+  journal={National Science Review},
+  volume={9},
+  number={9},
+  pages={nwab205},
+  year={2022},
+  publisher={Oxford University Press}
+}
+
+@article{monticone2013cloaked,
+  title={Do cloaked objects really scatter less?},
+  author={Monticone, Francesco and Alu, Andrea},
+  journal={Physical Review X},
+  volume={3},
+  number={4},
+  pages={041005},
+  year={2013},
+  publisher={APS}
+}
+
+@article{chen2013broadening,
+  title={Broadening the cloaking bandwidth with non-Foster metasurfaces},
+  author={Chen, Pai-Yen and Argyropoulos, Christos and Al{\`u}, Andrea},
+  journal={Physical review letters},
+  volume={111},
+  number={23},
+  pages={233001},
+  year={2013},
+  publisher={APS}
+}
+
+@article{miller2006perfect,
+  title={On perfect cloaking},
+  author={Miller, David AB},
+  journal={Optics Express},
+  volume={14},
+  number={25},
+  pages={12457--12466},
+  year={2006},
+  publisher={Optical Society of America}
+}
+
+@article{vasquez2009active,
+  title={Active exterior cloaking for the 2D Laplace and Helmholtz equations},
+  author={Vasquez, Fernando Guevara and Milton, Graeme W and Onofrei, Daniel},
+  journal={Physical review letters},
+  volume={103},
+  number={7},
+  pages={073901},
+  year={2009},
+  publisher={APS}
+}
+
+@article{choi2014paraxial,
+  title={Paraxial ray optics cloaking},
+  author={Choi, Joseph S and Howell, John C},
+  journal={Optics express},
+  volume={22},
+  number={24},
+  pages={29465--29478},
+  year={2014},
+  publisher={Optical Society of America}
+}
+
+@article{eggler2019active,
+  title={Active acoustic illusions for stealth and subterfuge},
+  author={Eggler, Daniel and Kessissoglou, Nicole},
+  journal={Scientific Reports},
+  volume={9},
+  number={1},
+  pages={13596},
+  year={2019},
+  publisher={Nature Publishing Group UK London}
+}
+
+@article{yang2008superscatterer,
+  title={Superscatterer: enhancement of scattering with complementary media},
+  author={Yang, Tao and Chen, Huanyang and Luo, Xudong and Ma, Hongru},
+  journal={Optics express},
+  volume={16},
+  number={22},
+  pages={18545--18550},
+  year={2008},
+  publisher={Optical Society of America}
+}
+
+@article{jiang2011shrinking,
+  title={Shrinking an arbitrary object as one desires using metamaterials},
+  author={Jiang, Wei Xiang and Cui, Tie Jun and Yang, Xin Mi and Ma, Hui Feng and Cheng, Qiang},
+  journal={Applied Physics Letters},
+  volume={98},
+  number={20},
+  year={2011},
+  publisher={AIP Publishing}
+}
+
+@article{yang2018target,
+  title={Target illusion by shifting a distance},
+  author={Yang, Chengfu and Huang, Ming and Yang, Jingjing and Mao, Fuchun and Li, Tinghua},
+  journal={Optics Express},
+  volume={26},
+  number={19},
+  pages={24280--24293},
+  year={2018},
+  publisher={Optical Society of America}
+}
+
+@article{lin2021active,
+  title={Active acoustic cloaking and illusions of sound-hard bodies using the boundary element method},
+  author={Lin, Cikai and Liu, Daipei and Eggler, Daniel and Kessissoglou, Nicole},
+  journal={The Journal of the Acoustical Society of America},
+  volume={149},
+  number={3},
+  pages={1803--1812},
+  year={2021},
+  publisher={AIP Publishing}
+}
+
+@article{zou2019broadband,
+  title={Broadband waveguide cloak for water waves},
+  author={Zou, Siyuan and Xu, Yadong and Zatianina, Razafizana and Li, Chunyang and Liang, Xu and Zhu, Lili and Zhang, Yongqiang and Liu, Guohua and Liu, Qing Huo and Chen, Huanyang and others},
+  journal={Physical review letters},
+  volume={123},
+  number={7},
+  pages={074501},
+  year={2019},
+  publisher={APS}
+}
+
+@article{chen2024multilayered,
+  title={A multilayered homogeneous hydrodynamic cloak realized in a free fluid flow},
+  author={Chen, Mengyao and Shen, Xiangying and Xu, Lei},
+  journal={Applied Physics Letters},
+  volume={125},
+  number={17},
+  year={2024},
+  publisher={AIP Publishing}
+}
+
+@article{porter2017cloaking,
+  title={Cloaking in water waves},
+  author={Porter, Richard},
+  journal={World Scientific Handbook of Metamaterials and Plasmonics},
+  year={2017},
+  publisher={World Scientific Publishing Co.}
+}
+
+@article{rabault2019artificial,
+  title={Artificial neural networks trained through deep reinforcement learning discover control strategies for active flow control},
+  author={Rabault, Jean and Kuchta, Miroslav and Jensen, Atle and R{\'e}glade, Ulysse and Cerardi, Nicolas},
+  journal={Journal of fluid mechanics},
+  volume={865},
+  pages={281--302},
+  year={2019},
+  publisher={Cambridge University Press}
+}
+
+@article{ren2021bluff,
+  title={Bluff body uses deep-reinforcement-learning trained active flow control to achieve hydrodynamic stealth},
+  author={Ren, Feng and Wang, Chenglei and Tang, Hui},
+  journal={Physics of Fluids},
+  volume={33},
+  number={9},
+  year={2021},
+  publisher={AIP Publishing}
+}
+
+@article{brunton2020machine,
+  title={Machine learning for fluid mechanics},
+  author={Brunton, Steven L and Noack, Bernd R and Koumoutsakos, Petros},
+  journal={Annual review of fluid mechanics},
+  volume={52},
+  number={1},
+  pages={477--508},
+  year={2020},
+  publisher={Annual Reviews}
+}
+
+@article{zhao2023review,
+  title={A review of recent studies on the control of vortex-induced vibration of circular cylinders},
+  author={Zhao, Ming},
+  journal={Ocean Engineering},
+  volume={285},
+  pages={115389},
+  year={2023},
+  publisher={Elsevier}
+}
+
+@article{krazer1905verhandlungen,
+  title={Verhandlungen des dritten internationalen Mathematiker-Kongresses in Heidelberg vom 8. bis 13. August 1904},
+  author={Krazer, Adolf},
+  year={1905},
+  publisher={Teubner}
+}
+
+@article{feng2010circular,
+  title={Circular cylinder vortex-synchronization control with a synthetic jet positioned at the rear stagnation point},
+  author={Feng, Li Hao and Wang, Jin Jun},
+  journal={Journal of Fluid Mechanics},
+  volume={662},
+  pages={232--259},
+  year={2010},
+  publisher={Cambridge University Press}
+}
+
+@article{wang2016active,
+  title={Active control of vortex-induced vibrations of a circular cylinder using windward-suction-leeward-blowing actuation},
+  author={Wang, Chenglei and Tang, Hui and Yu, Simon and Duan, Fei},
+  journal={Physics of Fluids},
+  volume={28},
+  number={5},
+  year={2016},
+  publisher={AIP Publishing}
+}
+
+@article{taheri2023enhancement,
+  title={The enhancement of flow induced vibration of a circular cylinder using a rotating control rod},
+  author={Taheri, Erfan and Zhao, Ming and Wu, Helen},
+  journal={Physics of Fluids},
+  volume={35},
+  number={4},
+  year={2023},
+  publisher={AIP Publishing}
+}
+
+@article{deng2021galerkin,
+  title={Galerkin force model for transient and post-transient dynamics of the fluidic pinball},
+  author={Deng, Nan and Noack, Bernd R and Morzy{\'n}ski, Marek and Pastur, Luc R},
+  journal={Journal of Fluid Mechanics},
+  volume={918},
+  pages={A4},
+  year={2021},
+  publisher={Cambridge University Press}
+}
+
+@article{feng2023control,
+  title={How to control hydrodynamic force on fluidic pinball via deep reinforcement learning},
+  author={Feng, Haodong and Wang, Yue and Xiang, Hui and Jin, Zhiyang and Fan, Dixia},
+  journal={Physics of Fluids},
+  volume={35},
+  number={4},
+  year={2023},
+  publisher={AIP Publishing}
+}
+
+@article{beem2015wake,
+  title={Wake-induced ‘slaloming’response explains exquisite sensitivity of seal whisker-like sensors},
+  author={Beem, Heather R and Triantafyllou, Michael S},
+  journal={Journal of Fluid Mechanics},
+  volume={783},
+  pages={306--322},
+  year={2015},
+  publisher={Cambridge University Press}
+}
+
+@article{yang2006distant,
+  title={Distant touch hydrodynamic imaging with an artificial lateral line},
+  author={Yang, Yingchen and Chen, Jack and Engel, Jonathan and Pandya, Saunvit and Chen, Nannan and Tucker, Craig and Coombs, Sheryl and Jones, Douglas L and Liu, Chang},
+  journal={Proceedings of the National Academy of Sciences},
+  volume={103},
+  number={50},
+  pages={18891--18895},
+  year={2006},
+  publisher={National Academy of Sciences}
+}
+
+@article{jiang2019flow,
+  title={Flow field perception based on the fish lateral line system},
+  author={Jiang, Yonggang and Ma, Zhiqiang and Zhang, Deyuan},
+  journal={Bioinspiration \& biomimetics},
+  volume={14},
+  number={4},
+  pages={041001},
+  year={2019},
+  publisher={IOP Publishing}
+}
+
+@article{bugnot2021current,
+  title={Current and projected global extent of marine built structures},
+  author={Bugnot, AB and Mayer-Pinto, M and Airoldi, L and Heery, EC and Johnston, EL and Critchley, LP and Strain, EMA and Morris, RL and Loke, LHL and Bishop, MJ and others},
+  journal={Nature Sustainability},
+  volume={4},
+  number={1},
+  pages={33--41},
+  year={2021},
+  publisher={Nature Publishing Group UK London}
+}
+
+@article{degraer2020offshore,
+  title={Offshore wind farm artificial reefs affect ecosystem structure and functioning},
+  author={Degraer, Steven and Carey, Drew A and Coolen, Joop WP and Hutchison, Zo{\"e} L and Kerckhof, Francis and Rumes, Bob and Vanaverbeke, Jan},
+  journal={Oceanography},
+  volume={33},
+  number={4},
+  pages={48--57},
+  year={2020},
+  publisher={JSTOR}
+}
+
+@article{lee1997application,
+  title={Application of neural networks to turbulence control for drag reduction},
+  author={Lee, Changhoon and Kim, John and Babcock, David and Goodman, Rodney},
+  journal={Physics of Fluids},
+  volume={9},
+  number={6},
+  pages={1740--1747},
+  year={1997},
+  publisher={American Institute of Physics}
+}
+
+@article{myers1980performance,
+  author={Myers, C. and Rabiner, L. and Rosenberg, A.},
+  journal={IEEE Transactions on Acoustics, Speech, and Signal Processing}, 
+  title={Performance tradeoffs in dynamic time warping algorithms for isolated word recognition}, 
+  year={1980},
+  volume={28},
+  number={6},
+  pages={623-635},
+  doi={10.1109/TASSP.1980.1163491}
+}
+
+@article{sakoe1978dynamic,
+  author={Sakoe, H. and Chiba, S.},
+  journal={IEEE Transactions on Acoustics, Speech, and Signal Processing}, 
+  title={Dynamic programming algorithm optimization for spoken word recognition}, 
+  year={1978},
+  volume={26},
+  number={1},
+  pages={43-49},
+  keywords={Dynamic programming;Heuristic algorithms;Fluctuations;Timing;Signal processing algorithms;Speech processing;Pattern matching;Constraint optimization;Feature extraction;Acoustics},
+  doi={10.1109/TASSP.1978.1163055}
+}
+
+@article{efrat2007curve,
+  title={Curve matching, time warping, and light fields: New algorithms for computing similarity between curves},
+  author={Efrat, Alon and Fan, Quanfu and Venkatasubramanian, Suresh},
+  journal={Journal of mathematical imaging and vision},
+  volume={27},
+  number={3},
+  pages={203--216},
+  year={2007},
+  publisher={Springer}
+}
+
+@article{tappert1990state,
+  author={Tappert, C.C. and Suen, C.Y. and Wakahara, T.},
+  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence}, 
+  title={The state of the art in online handwriting recognition}, 
+  year={1990},
+  volume={12},
+  number={8},
+  pages={787-808},
+  keywords={Handwriting recognition;Writing;Character recognition;Ink;Pattern recognition;Keyboards;Natural languages;Conference proceedings;Shape;Hardware},
+  doi={10.1109/34.57669}
+}
+
+@inproceedings{corradini2001dynamic,
+  title={Dynamic time warping for off-line recognition of a small gesture vocabulary},
+  author={Corradini, Andrea},
+  booktitle={Proceedings IEEE ICCV workshop on recognition, analysis, and tracking of faces and gestures in real-time systems},
+  pages={82--89},
+  year={2001},
+  organization={IEEE}
+}
+
+@article{aach2001aligning,
+  title={Aligning gene expression time series with time warping algorithms},
+  author={Aach, John and Church, George M},
+  journal={Bioinformatics},
+  volume={17},
+  number={6},
+  pages={495--508},
+  year={2001},
+  publisher={Oxford University Press}
+}
+
+@inproceedings{zhu2003warping,
+  title={Warping indexes with envelope transforms for query by humming},
+  author={Zhu, Yunyue and Shasha, Dennis},
+  booktitle={Proceedings of the 2003 ACM SIGMOD international conference on Management of data},
+  pages={181--192},
+  year={2003}
+}
+
+@inproceedings{niennattrakul2007clustering,
+  title={On clustering multimedia time series data using k-means and dynamic time warping},
+  author={Niennattrakul, Vit and Ratanamahatana, Chotirat Ann},
+  booktitle={2007 International Conference on Multimedia and Ubiquitous Engineering (MUE'07)},
+  pages={733--738},
+  year={2007},
+  organization={IEEE}
+}
+
+@inproceedings{kahveci2001variable,
+  title={Variable length queries for time series data},
+  author={Kahveci, Tamer and Singh, Ambuj},
+  booktitle={Proceedings 17th International Conference on Data Engineering},
+  pages={273--282},
+  year={2001},
+  organization={IEEE}
+}
+
+@book{muller2015fundamentals,
+  title={Fundamentals of music processing: Audio, analysis, algorithms, applications},
+  author={M{\"u}ller, Meinard},
+  volume={5},
+  year={2015},
+  publisher={Springer}
+}
\ No newline at end of file