From bedaae147ede78110b40fdd3c83afec5a065191a Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Thu, 22 Oct 2026 23:27:34 -0500 Subject: [PATCH] Preserve exact prepared-carrier decoding and dirty-host capture components --- research/local-eight-form-capture/README.md | 93 + .../SOURCE-MANIFEST.json | 107 + .../local-eight-form-capture/VALIDATION.json | 18 + .../local-eight-form-capture/dense_columns.py | 85 + .../publication/research/e8-combined/NOTICE | 89 + .../e8-combined/vendor/complex/SOURCES.json | 181 ++ .../structural/check_hosted_capture.py | 108 + .../hamming-factor/HOSTED-CAPTURE-REVIEW.txt | 43 + .../capture-independent-receipt.json | 13 + .../check_capture_independent.py | 79 + .../structural/hosted-capture-receipt.json | 1263 ++++++++ .../live-capture/ENDPOINT-RESULT.json | 78 + .../rank-independent/live-capture/RESULT.json | 1273 ++++++++ .../rank-independent/live-capture/REVIEW.txt | 108 + .../rank-independent/live-capture/check.py | 133 + .../live-capture/check_endpoint.py | 90 + .../research/split-centres-global/NOTICE.md | 41 + .../split-centres-global/SOURCES.json | 134 + .../proofs/INHERITED-COMPLEX-GEOMETRY.txt | 161 + .../retimed-4/complex/GLOBAL-TEMPLATE.json.gz | Bin 0 -> 465792 bytes .../split-centres/CANONICAL-WORD.json.gz | Bin 0 -> 83586 bytes research/local-eight-form-capture/primary.py | 115 + research/local-eight-form-capture/replay.log | 5 + .../replayed-receipt.json | 2633 +++++++++++++++++ .../review/BOUNDARY-COUNT-CONTROL.json | 44 + .../review/CHECKED-FILES-AFTER.json | 136 + .../review/CHECKED-FILES-BEFORE.json | 117 + .../review/COMMAND.json | 14 + .../review/PORTABILITY.diff | 49 + .../review/RESULT.json | 4 + .../review/REVIEW-STATUS.json | 86 + .../local-eight-form-capture/review/REVIEW.md | 142 + .../review/SOURCE-AND-EVIDENCE-CHECK.json | 163 + .../review/check_boundary_counts.py | 71 + .../review/fresh-run/receipt.json | 2633 +++++++++++++++++ .../review/stderr.log | 0 .../review/stdout.log | 5 + research/local-eight-form-capture/verify.py | 49 + research/prepared-growing-carrier/README.md | 96 + .../SOURCE-MANIFEST.json | 113 + .../prepared-growing-carrier/VALIDATION.json | 18 + .../FROZEN-WORD.json | 1 + .../growing-cycle-independent/PROOF.md | 174 ++ .../growing-cycle-independent/RESULT.json | 206 ++ .../SOURCE-PINS.json | 18 + .../VERIFICATION.json | 20 + .../growing-cycle-independent/check.py | 304 ++ .../GROWING-CYCLE-LEGACY-EXITS-RESULT.json | 11 + .../GROWING-CYCLE-LEGACY-EXITS-WORD.json | 1 + .../paired-five/GROWING-CYCLE-RESULT.json | 25 + .../paired-five/GROWING-CYCLE-WORD.json | 1 + .../complex/paired-five/add_growing_exits.py | 42 + .../complex/paired-five/growing_cycle.py | 98 + .../independent/DELIVERY-FLAGS-PROOF.md | 137 + .../research/nodal-pair-async/NOTICE.md | 11 + .../research/nodal-pair-async/SOURCES.json | 119 + .../inputs/work/odd-stages/clifford_exact.py | 149 + .../public-source/NOTICE.md | 24 + .../public-source/SOURCES.json | 63 + research/prepared-growing-carrier/replay.log | 4 + research/prepared-growing-carrier/replay.py | 311 ++ .../replayed-receipt.json | 226 ++ .../review/CHECKED-FILES.json | 131 + .../review/CONTROLS.json | 1074 +++++++ .../review/RELOCATION-RECEIPT.json | 233 ++ .../review/REPLAY-RECEIPT.json | 226 ++ .../review/RESULT.json | 31 + .../review/REVIEW.txt | 144 + .../review/SOURCE-CHECK.json | 117 + .../review/controls.log | 1 + .../review/controls.py | 102 + .../review/replay.log | 4 + research/prepared-growing-carrier/verify.py | 66 + 73 files changed, 14664 insertions(+) create mode 100644 research/local-eight-form-capture/README.md create mode 100644 research/local-eight-form-capture/SOURCE-MANIFEST.json create mode 100644 research/local-eight-form-capture/VALIDATION.json create mode 100644 research/local-eight-form-capture/dense_columns.py create mode 100644 research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/NOTICE create mode 100644 research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json create mode 100644 research/local-eight-form-capture/historical/work/complex-next/structural/check_hosted_capture.py create mode 100644 research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt create mode 100644 research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json create mode 100644 research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/check_capture_independent.py create mode 100644 research/local-eight-form-capture/historical/work/complex-next/structural/hosted-capture-receipt.json create mode 100644 research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json create mode 100644 research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json create mode 100644 research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt create mode 100644 research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check.py create mode 100644 research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py create mode 100644 research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md create mode 100644 research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json create mode 100644 research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt create mode 100644 research/local-eight-form-capture/historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz create mode 100644 research/local-eight-form-capture/historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz create mode 100644 research/local-eight-form-capture/primary.py create mode 100644 research/local-eight-form-capture/replay.log create mode 100644 research/local-eight-form-capture/replayed-receipt.json create mode 100644 research/local-eight-form-capture/review/BOUNDARY-COUNT-CONTROL.json create mode 100644 research/local-eight-form-capture/review/CHECKED-FILES-AFTER.json create mode 100644 research/local-eight-form-capture/review/CHECKED-FILES-BEFORE.json create mode 100644 research/local-eight-form-capture/review/COMMAND.json create mode 100644 research/local-eight-form-capture/review/PORTABILITY.diff create mode 100644 research/local-eight-form-capture/review/RESULT.json create mode 100644 research/local-eight-form-capture/review/REVIEW-STATUS.json create mode 100644 research/local-eight-form-capture/review/REVIEW.md create mode 100644 research/local-eight-form-capture/review/SOURCE-AND-EVIDENCE-CHECK.json create mode 100644 research/local-eight-form-capture/review/check_boundary_counts.py create mode 100644 research/local-eight-form-capture/review/fresh-run/receipt.json create mode 100644 research/local-eight-form-capture/review/stderr.log create mode 100644 research/local-eight-form-capture/review/stdout.log create mode 100644 research/local-eight-form-capture/verify.py create mode 100644 research/prepared-growing-carrier/README.md create mode 100644 research/prepared-growing-carrier/SOURCE-MANIFEST.json create mode 100644 research/prepared-growing-carrier/VALIDATION.json create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json create mode 100644 research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/check.py create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/add_growing_exits.py create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/growing_cycle.py create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json create mode 100644 research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py create mode 100644 research/prepared-growing-carrier/public-source/NOTICE.md create mode 100644 research/prepared-growing-carrier/public-source/SOURCES.json create mode 100644 research/prepared-growing-carrier/replay.log create mode 100644 research/prepared-growing-carrier/replay.py create mode 100644 research/prepared-growing-carrier/replayed-receipt.json create mode 100644 research/prepared-growing-carrier/review/CHECKED-FILES.json create mode 100644 research/prepared-growing-carrier/review/CONTROLS.json create mode 100644 research/prepared-growing-carrier/review/RELOCATION-RECEIPT.json create mode 100644 research/prepared-growing-carrier/review/REPLAY-RECEIPT.json create mode 100644 research/prepared-growing-carrier/review/RESULT.json create mode 100644 research/prepared-growing-carrier/review/REVIEW.txt create mode 100644 research/prepared-growing-carrier/review/SOURCE-CHECK.json create mode 100644 research/prepared-growing-carrier/review/controls.log create mode 100644 research/prepared-growing-carrier/review/controls.py create mode 100644 research/prepared-growing-carrier/review/replay.log create mode 100644 research/prepared-growing-carrier/verify.py diff --git a/research/local-eight-form-capture/README.md b/research/local-eight-form-capture/README.md new file mode 100644 index 0000000000..ad13a33aa2 --- /dev/null +++ b/research/local-eight-form-capture/README.md @@ -0,0 +1,93 @@ +# Eight mixed forms captured in existing dirty helpers + +This package proves one exact forward local scalar operation on 800 arbitrary +input fields. It preserves X, sends Y to Y+SX, and sends each of eight +selected helpers to `h_i + C_i(59X/4 + Y)`. Every other helper is unchanged. +The eight helper values remain dirty. The operation does not restore them. +This is a local construction; it gives no complete supplier or kappa gain. + +Read the [algebra and operation-order proof](historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt) +and the [separate column review](historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt). +The frozen word has 120 X fields, 120 Y fields and 560 helper fields. +On its 112 code ports, `S = I - C^T C/4` and `C C^T = 56I`. +The other eight ports have zero S rows and zero C columns. The captured +helper indices are 758 through 751. All original values are arbitrary. + +The omitted-centre word has `Y -> Y+SX+Dh` and preserves its helper inputs. +First preload `h1=h+PY`, where P inserts the eight C rows. Then use the +updated h1 to correct `Y1=Y-Dh1`. The base word gives `Y2=Y+SX`. +Finally add `(59/4)PX` to the eight helpers. This yields the stated map. +The base word has 19,449 scalar operations. The capture adds 11,326 +dyadic correction operations and two 448-term loads. The total is 31,671 +scalar operations: 19,449 + 11,326 + 448 + 448. The replay uses +the updated helper values. The fresh independent review also checked that +every selected helper column of D is zero, so `D P = 0` in this instance. +The historical review's warning about a stale-helper error does not apply +to these eight helpers. It does not affect the verified endpoint. + +Preload and dirt correction satisfy the saved zero-frame boundary contract; +postload satisfies its full-frame contract. These are exact local label +statements. They do not supply a paid native or phase realization of the +new boundary operations, a backward program, the routed global controller, +a physical endpoint decoder, restoration of the eight hosts, or an invoice. +The selected future Y owners are live data, not free private workspace. +The included endpoint check records nontrivial chart translations and +rejects a proposed two-tap tensor shortcut. No such shortcut is used. + +## Replay + +From this package directory, with Python 3.10 or later: + +```sh +python3 -B verify.py --build /tmp/local-eight-form-capture-replay +``` + +The build path must not exist. Only the standard library is required. +The runner checks source hashes and copies historical files into that path. +It then checks the full sparse-row map, a separate 800-column base replay +with symbolic boundary composition, a separate 800-column complete capture +replay, and the saved endpoint/covariance limitations. It compares all four +complete receipts with their unchanged historical results. The final line is: + +```text +PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326 +``` + +The finite scalar map checks plus linearity establish the all-input local +identity. They do not revalidate the inherited global supplier. +The two portable scripts replace historical absolute paths with explicit +input/output arguments and add an optimized-Python guard. Their unchanged +originals remain in `historical/`. The other two checkers are unchanged. +Python children run with environment options ignored; no discovery search +runs. `SOURCE-MANIFEST.json` binds every input. `replayed-receipt.json` and +`replay.log` record the fresh cleanup replay. + +## Sources and overlap + +The retimed R560 word is from the local lineage of +[PR #495](https://github.com/CrocSwap/integer-mult-bounds/pull/495), at +[its source-pinned proof](https://github.com/CrocSwap/integer-mult-bounds/blob/355d9f7ff293e291676ff4a32eed434419692576/research/e8-combined/PROOF.txt). +The two exact historical generated inputs are bound by SHA256 here; they +are not claimed byte-identical to a published generated input. The +[retained notice](historical/work/combined-pr/publication/research/e8-combined/NOTICE) +credits the R560 word to Ali Romman with OpenAI Codex assistance and records +DreamingOfClouds' kernel scripts, chafreaky's paid adapters and distinct-host +construction, icekylinx's split centres, and the earlier geometry sources. +The [source ledger](historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json) +retains their exact pins. Original notices are unchanged. +The capture and its separate reviews were prepared with substantial OpenAI +Codex and research-agent assistance. No independent human review is claimed. + +The later [native centre capture](https://github.com/CrocSwap/integer-mult-bounds/blob/cef4b52f2a59009865bf8eabde1be3f159063703/research/native-centre-capture/README.md) +uses 640 inputs, 16 centre records and different native endpoints. This earlier +800-input mixed capture is a different local identity. No cost or theorem +from one model is added to the other. The new contribution here is preserving +the closed exact operation and its limitations, not a new capture principle. + +## Open next questions + +Can these mixed forms be read by a complete routed controller and then +removed without a larger complete cost? The first step is a literal +composition that includes the arbitrary old host values and all phase +translations. The saved current stage maps differ, so a common-S identity +does not establish that composition. No such controller is supplied here. diff --git a/research/local-eight-form-capture/SOURCE-MANIFEST.json b/research/local-eight-form-capture/SOURCE-MANIFEST.json new file mode 100644 index 0000000000..4fb4347b74 --- /dev/null +++ b/research/local-eight-form-capture/SOURCE-MANIFEST.json @@ -0,0 +1,107 @@ +{ + "main_pin": "cef4b52f2a59009865bf8eabde1be3f159063703", + "files": [ + { + "original": "work/complex-next/structural/check_hosted_capture.py", + "package": "historical/work/complex-next/structural/check_hosted_capture.py", + "sha256": "04a1f9434d3b1ba9b0744863522cfeab7b139d51f361ec2e887994ac7fdf9c12", + "bytes": 4711 + }, + { + "original": "work/complex-next/structural/hosted-capture-receipt.json", + "package": "historical/work/complex-next/structural/hosted-capture-receipt.json", + "sha256": "61198fdd7d1b99e2384b50fd5666d48866c98bf61280df4694ac10f13dab0b12", + "bytes": 21400 + }, + { + "original": "work/complex-next/structural/hamming-factor/check_capture_independent.py", + "package": "historical/work/complex-next/structural/hamming-factor/check_capture_independent.py", + "sha256": "0520113c0318f4eaf0cb56dde5ee88980ff5e10cbd3f20cfd942d580ea8951f1", + "bytes": 3403 + }, + { + "original": "work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "package": "historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "sha256": "e2db977b175614a57c23111fbee0ccd0639f50e1c329da15b5de9384ae1bfce2", + "bytes": 528 + }, + { + "original": "work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "package": "historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "sha256": "16df704fa05256cb567bb7c84eb8ebc213cead05b7c3cb6d295d435241a13833", + "bytes": 2541 + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/check.py", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/check.py", + "sha256": "558df28c3e0934d8b1d2fdfb591e57fb2cc60ae69e599a341c1bc7f507a685c4", + "bytes": 5787 + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "sha256": "8ff1440f0008f8af3344c4598f0d08cf375b1b47eba363a30fa3c697a3a35c9a", + "bytes": 21564 + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "sha256": "e4eaa33d9143d78e0230b2fd4ce4afd0610a4b290a052f6c1ab0793974437f39", + "bytes": 5447 + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "sha256": "70deac8ee0febef6c7d1b55d3a756bb9bb7dace7b4ce6a1728c226c77b62a639", + "bytes": 3871 + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "sha256": "3ff5c5f1f58d1b658d493083ec69e5225f33d0fe4d39be8285ffa937f004bc8e", + "bytes": 2185 + }, + { + "original": "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "package": "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "bytes": 83586 + }, + { + "original": "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "package": "historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "bytes": 465792 + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "sha256": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2", + "bytes": 9402 + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "sha256": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389", + "bytes": 2447 + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "sha256": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be", + "bytes": 8835 + }, + { + "original": "work/combined-pr/publication/research/e8-combined/NOTICE", + "package": "historical/work/combined-pr/publication/research/e8-combined/NOTICE", + "sha256": "7b41fa130dcd11e5972eed84e12f3499d80ea00e17d460f450fa8ddf39cc4951", + "bytes": 5054 + }, + { + "original": "work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "package": "historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "sha256": "72e38ad6a030b7bb29eac71cda1eafeb96e9202630a9e96f3fbf5cac31742b49", + "bytes": 8867 + } + ] +} diff --git a/research/local-eight-form-capture/VALIDATION.json b/research/local-eight-form-capture/VALIDATION.json new file mode 100644 index 0000000000..001f18f61d --- /dev/null +++ b/research/local-eight-form-capture/VALIDATION.json @@ -0,0 +1,18 @@ +{ + "cwd": "/Users/aliromman/Projects/IntegerMultiplicationBounds", + "command": [ + "python3", + "-E", + "-B", + "work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/verify.py", + "--build", + "/tmp/eight-form-capture-cleanup-20261023" + ], + "exit_code": 0, + "fresh_output_required": true, + "log": "replay.log", + "log_sha256": "d3c39d733abd943d10d5569e72218daed05b350cb7fb3046d3b15e2eca06b554", + "receipt": "replayed-receipt.json", + "receipt_sha256": "b52c403f5dc4b5d8e5cb40d94dbc3a223a113c441e6c35ff81c832ff12ea92e2", + "note": "Literal output is retained. Original source files are unchanged. No new discovery search ran." +} diff --git a/research/local-eight-form-capture/dense_columns.py b/research/local-eight-form-capture/dense_columns.py new file mode 100644 index 0000000000..5f1031cc1d --- /dev/null +++ b/research/local-eight-form-capture/dense_columns.py @@ -0,0 +1,85 @@ +"""Check the omitted-centre map by exact input-column propagation.""" +import argparse +from fractions import Fraction as F +import gzip +import hashlib +import json +from pathlib import Path + +if not __debug__: + raise SystemExit("Run this verifier without -O. Historical sources use assert.") +parser = argparse.ArgumentParser() +parser.add_argument("--base", type=Path, required=True) +args = parser.parse_args() +BASE = args.base +PATH = BASE / 'retimed-4/split-centres/CANONICAL-WORD.json.gz' +raw = PATH.read_bytes() +w = json.loads(gzip.decompress(raw)) +n = 240 + w['R'] +ops = w['precondition'] + w['compensation'] + w['A'] + w['B'] + w['cleanup'] +steps = [(e[0], e[1], e[2] if e[0] == 'add' else -1, + F(e[3], e[4]) if e[0] == 'add' else F(e[2], e[3])) for e in ops] +S = [[F(0) for _ in range(120)] for _ in range(120)] +D = [[F(0) for _ in range(n - 240)] for _ in range(120)] +for column in range(n): + v = [F(0)] * n + v[column] = F(1) + for kind, dst, src, coefficient in steps: + if kind == 'add': + if v[src]: + v[dst] += coefficient * v[src] + else: + v[dst] *= coefficient + assert all(v[i] == int(column == i) for i in range(120)) + assert all(v[i] == int(column == i) for i in range(240, n)) + if column < 120: + for i in range(120): + S[i][column] = v[120 + i] + elif column < 240: + assert all(v[120 + i] == int(column == 120 + i) for i in range(120)) + else: + for i in range(120): + D[i][column - 240] = v[120 + i] + if v[120 + i]: + assert w['start'][column] == 0 + assert v[120 + i].denominator.bit_count() == 1 + +C = [[F(0) for _ in range(120)] for _ in range(8)] +for column in range(120): + v = [F(0)] * n + v[column] = F(1) + for e in w['precondition'] + w['A']: + if e[0] == 'add': + v[e[1]] += F(e[3], e[4]) * v[e[2]] + else: + v[e[1]] *= F(e[2], e[3]) + for i, register in enumerate(w['centers'][:8]): + C[i][column] = v[register] +assert [[sum(x*y for x, y in zip(a, b)) for b in C] for a in C] == [ + [56 * int(i == j) for j in range(8)] for i in range(8)] +code = [i for i, row in enumerate(S) if any(row)] +assert len(code) == 112 +for i in range(120): + for j in range(120): + gram = sum(row[i]*row[j] for row in C) / 4 + assert S[i][j] == (int(i == j) - gram if i in code else 0) + if i not in code: + assert gram == 0 +helpers = list(range(758, 750, -1)) +assert all(w['start'][r] == 0 and w['final'][r] == 1 for r in helpers) +assert all(w['start'][120 + j] == 0 and w['final'][j] == 1 + for row in C for j, coefficient in enumerate(row) if coefficient) + +# Compose the four block maps symbolically. P inserts C into eight helper rows. +# preload: h1=h+P Y; correction: Y1=Y-D h1. +# base: Y2=Y1+S X+D h1=Y+S X; h2=h1; X2=X. +# postload: h3=h2+(59/4)P X=h+P(Y+(59/4)X). +result = dict(status='PASS_INDEPENDENT_EXACT_CAPTURE_MAP', + source_sha256=hashlib.sha256(raw).hexdigest(), + method='800 exact input columns; symbolic composition of boundary maps', + columns=n, scalar_operations=len(steps), code_ports=len(code), + dirty_correction_terms=sum(bool(x) for row in D for x in row), + C_row_gram=56, captured_forms=8, + boundary_frames='preload and dirt correction at zero; postload at full', + scope='Local label map only; no routed endpoint decoder or global cost claim.') +print(json.dumps(result, indent=2)) diff --git a/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/NOTICE b/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/NOTICE new file mode 100644 index 0000000000..1b93d4e38f --- /dev/null +++ b/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/NOTICE @@ -0,0 +1,89 @@ +Attribution and assistance + +Ali Romman prepared the two changed words, their composition, and this +compact replay package with OpenAI Codex assistance. The fixed witness is +not a claim of a global optimum. Source code is under Apache-2.0; see the +repository LICENSE. The source manifests record original file hashes, +extractions, and path changes. Generated output is not an input premise. + +The bit construction builds on DreamingOfClouds' R715 word and XOR hierarchy +(PR463), rohanarun's response kernel and whole-residual pooling (PR467/462), +DaysSky's idle hosting (PR442), and the E8 producer and geometry lineage of +Dylan Crow, Jacob Sussman, Zhihao Chen, eumemic, and other contributors. +The complex construction retains DreamingOfClouds' PR449 kernel scripts, +chafreaky's PR458 paid adapters and distinct-host construction, icekylinx's +PR433 split centres, and the prior supplier and geometry work. +The comparison is with pinned main, not every open PR. + +Pinned source records + + Main: 12a4934d15006e8c10f9b2264f13f8f341be802b. + PR467 cached head: f92d6a7ffcf74553522e967c2600e30c05ffe938. + PR462 cached tree: c4df4fdbf411f047ff7d63c73c432e828e94d924. + PR449: 7fac5292693bf738ff5eed6ec754f8ec22ebcf8e. + PR451: f3a38153678b55063fc005901cc968266166507d. + PR442: 4e16d001d505d4f21dd2bcfc44591f9be4c279bd. + +The vendor/bit/SOURCES.json and vendor/complex/SOURCES.json files identify +all imported files and their changes. Paths in those manifests name the +cached source packages. The two final words and compact schedule are +included, so replay does not require those caches or pending PR branches. + +Retained upstream notices + +The notices below are copied without changes from the source packages. +Their paths and descriptions refer to those packages. + + +Source: research/e8-complex-adapted-kernel/NOTICE.md + +# Attribution and assistance + +The shared-donor complex kernel selection and three generalized local +checker/emitter/phase scripts come from DreamingOfClouds PR449 at +`7fac5292693bf738ff5eed6ec754f8ec22ebcf8e`, prepared with Claude Opus 5.5 +through Claude Code. The original PROOF and NOTICE are retained verbatim +under `upstream449`. That draft's entrance-gauge construction and numerical +claims are not adopted here. + +Exact frozen reconstruction, the paid two-sided residual construction, +distinct-host assignment, independent local/global audits, new cost invoice +and this release were prepared by chafreaky with OpenAI Codex assistance. +They build on PR454 target mixing, PR451's eleven-stage complex geometry, +PR443–445 kernels and row bounds, DaysSky's PR442 idle-data hosting, +icekylinx's PR433 split centres, Zhihao Chen's PR425 common-frame realization +and PR377/386 geometry, and the inherited E8 work by Jacob Sussman, Dylan +Crow, eumemic and other contributors. All parent notices and licenses remain +in their source-pinned packages. + +Apache License 2.0; see LICENSE. This is a conditional research artifact. + + +Source: research/e8-complex-adapted-kernel/upstream449/NOTICE.md + +Apache-2.0. `code/audit_cxg.py`, `emit_cxg.py`, `phases_cxg.py` are modified copies of PR #433's `complex_audit.py`, +`complex_emit.py`, `complex_phases_full.py` (icekylinx with Codex; adapted from PR #425 by jacklightChen / Zhihao Chen). +`code/hostmodel.py` replicates the profile arithmetic of PR #442's `complex_hosted.py` (DaysSky) for mixed widths. +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. + + +Source: work/next-track/bit/pinned467/research/r715-kernel-pool/NOTICE.md + +R715 producer and carrier/XOR construction: DreamingOfClouds, with Claude Opus 5.5, PR463. Shared-donor kernel mechanism and exact engines: chafreaky and the PR417/443 lineage. Whole hosting: DaysSky PR442. Target mixing: DreamingOfClouds PR450/463; no cross-family split used. New selection, 74 retiming moves and four-replica pooling: Rohan Arun with OpenAI Codex. Complex supplier: chafreaky PR458, unchanged and cited only at this stage. The inherited repository package notices and Apache-2.0 licenses remain applicable. See the retained PR463 README and source pins. + + +Source: work/next-track/bit/pinned462/research/bit-whole-pool4/NOTICE.md + +Apache-2.0. Original upstream notices and licenses are retained. +Four-replica selection, changed owner mapping, physical-family prefix audit, +finite repricing and composition by Rohan Arun with OpenAI Codex assistance. + +Unchanged bit word: Rohan Arun with Claude Opus5.5, PR459, including DreamingOfClouds' +target-prefix mixing from PR450. Unchanged complex supplier: chafreaky with +OpenAI Codex, PR458, building on DreamingOfClouds' PR449 kernel. +Parent composition: Rohan Arun with OpenAI Codex, PR460. +Hosting and solver lineage: DaysSky PR442; chafreaky PR443/445/451/454; +DreamingOfClouds' whole-hosting solver; Rohan Arun PR456 whole-replica pooling. +Retained geometry and local tools: icekylinx, eumemic, Zhihao Chen, Dylan Crow, +Jacob Sussman, Henry Grant and all authors in the upstream source-pinned notices. +No independent discovery of either unchanged local supplier is claimed. diff --git a/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json b/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json new file mode 100644 index 0000000000..62327bab00 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json @@ -0,0 +1,181 @@ +[ + { + "path": "vendor/complex/scalar.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/upstream449/audit_cxg.py", + "source_sha256": "12e8fe32136a0f32e5363f97113cf0c32efda6a331dc391758cd58ed8f5f9d1b", + "sha256": "1544d074e38cad5529ffc12c1825b9f3979c8fbdcd277803eff1e51dc23d77fb", + "edits": [ + { + "old": "old=json.load(gzip.open('work/higher-stage-e8/verified/gcert1-e8-retimed.json.gz'))", + "new": "old=json.loads((Path(__file__).resolve().parents[2]/'data/complex/ports.json').read_text())" + }, + { + "old": "b=Q(0);grid=Q(1,10**18)\n", + "new": "" + }, + { + "old": "'status':'PASS_EXACT_SCALAR_AND_FRAME_RESEARCH_CANDIDATE_NOT_YET_ADMITTED'", + "new": "'status':'PASS_EXACT_SCALAR_AND_FRAME_AUDIT'" + }, + { + "old": " 'two_rational_moment_engines':True,'next_b_grid_rejected':True,\n", + "new": "" + }, + { + "old": " 'remaining':['new general scalar-interface proof integration','exact phase and emitted local/global program','finite invoice and outer assembly'],", + "new": " 'remaining':['exact phase and emitted local/global program','finite invoice and outer assembly']," + }, + { + "old": " 'scope':'Substantial new scalar-network candidate. All parameter values remain prospective until the expanded scalar interface and complete phase-aware supplier are admitted.',", + "new": " 'scope':'Exact arbitrary-input scalar maps and nested frames. Separate scripts check phases, physical programs and invoices.'," + } + ] + }, + { + "path": "vendor/complex/programs.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/upstream449/emit_cxg.py", + "source_sha256": "26c646d5a777c1306224abb08d4031b3b1ffcbed8a212a0e58579de13b0ee658", + "sha256": "521950ee178cdf60bbf7984ffb47da6dfa14aa74d18312bf98cdf2c331901ebb", + "edits": [ + { + "old": "\"\"\"Emit both local programs, integrate the fixed nine-stage geometry, and bill.\n\nThe expanded scalar interface is justified in PROOF.txt. This script does not\nclaim a Lean proof or discharge the inherited all-size/analytic interfaces.\n\"\"\"", + "new": "\"\"\"Emit both local programs and check their exact scalar action.\n\nThe package proof states the scalar interface and inherited assumptions.\nThis script does not discharge the all-size or analytic interfaces.\n\"\"\"" + } + ] + }, + { + "path": "vendor/complex/phases.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/upstream449/phases_cxg.py", + "source_sha256": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "sha256": "e2126f9be35b8f61b5f4374d8ac521a153e90a58bd59f69e7dfd80f8195d4c10", + "edits": [ + { + "old": "sys.path.insert(0,str(Path('work/odd-stages').resolve()))\n", + "new": "" + }, + { + "old": "import gzip,hashlib,json,sys,time", + "new": "import gzip,hashlib,json,time", + "reason": "Remove an import made unused by the source extraction." + } + ] + }, + { + "path": "vendor/complex/adapters.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/code/adapters.py", + "source_sha256": "001b80a9366e29f28f3785e146062e12b1913e5da79b5e6d6b7090c6425d7015", + "sha256": "81b551b711e14239fb8ed2675824313d84671365d921c5d53fbde5fd8246ef21", + "edits": [ + { + "old": "sys.path.insert(0,str(ROOT.parent/'split-centres-global/vendor'))\n", + "new": "" + } + ] + }, + { + "path": "vendor/complex/local_audit.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/code/local_audit.py", + "source_sha256": "ae5baeaaeea26cf0a1faa59fbc18a8ad4805f5a8f2eba9644abf44f82c74845d", + "sha256": "1dee2bf0608940786143fdfa8651e56c98028a5e3a41396ca84dd49973916b03", + "edits": [ + { + "old": "sys.path.insert(0,str(ROOT.parent/'split-centres-global/vendor'))\n", + "new": "" + } + ] + }, + { + "path": "vendor/complex/emit.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/code/emit.py", + "source_sha256": "b5170f68223c910ae806255ee1975b33801df3a729da0d6c2ba50ae96ec0c911", + "sha256": "a5926f58f3cbcdfb5a902f844d86cdb3b63df52c2493709a7fc9d8354ad0029c", + "edits": [ + { + "old": "ROOT=Path(__file__).resolve().parents[1];M,H,K,L,T,V,R=89,9,5,11,8,120,560;W=9600", + "new": "ROOT=Path(__file__).resolve().parents[2];M,H,K,L,T,V,R=89,9,5,11,8,120,560;W=9600" + }, + { + "old": "selected=ld(ROOT/'data/hosting.json')['selected']", + "new": "selected=ld(ROOT/'data/complex/hosting.json')['selected']" + } + ] + }, + { + "path": "vendor/complex/audit.py", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/code/audit.py", + "source_sha256": "2dd35e3d583ae27004d1ff53fd0f96e0f2f10dae3b5376dc8bb6aebeafe9f349", + "sha256": "99fa203c64f6d0e3482b1c50c6d394deff10fccee0f460d419ebeb0ccc8e7137", + "edits": [ + { + "old": "sp=importlib.util.spec_from_file_location('unchanged_phase_audit',ROOT.parent/'r740-hosted-rank149/code/complex_audit.py');PA=importlib.util.module_from_spec(sp);sp.loader.exec_module(PA)", + "new": "import phase_audit as PA" + }, + { + "old": "import copy,gzip,hashlib,importlib.util,json,sys", + "new": "import copy,gzip,hashlib,json,sys", + "reason": "Remove an import made unused by the source extraction." + } + ] + }, + { + "path": "vendor/complex/clifford_exact.py", + "source": "work/next-track/complex/pipeline/full-source/research/split-centres-global/vendor/clifford_exact.py", + "source_sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "edits": [] + }, + { + "path": "vendor/complex/data_phases.py", + "source": "work/next-track/complex/pipeline/full-source/research/r740-hosted-rank149/code/complex_phases.py", + "source_sha256": "4339fde687c041c381d01bc81e90a2abec0092c51920eb02166aaf628a7f25a2", + "sha256": "498190815600ab5d945ac10d1d573fab4eb74f12c77d11e91b11afb15893f1fe", + "edits": [ + { + "old": "sys.path.insert(0,str(Path(__file__).resolve().parents[2]/'split-centres-global/vendor'))\n", + "new": "" + } + ] + }, + { + "path": "vendor/complex/phase_audit.py", + "source": "work/next-track/complex/pipeline/full-source/research/r740-hosted-rank149/code/complex_audit.py", + "source_sha256": "403f95ed28025e552f33d54a5e61da24714bcb757f12a75f66012999c7f37896", + "sha256": "15cda1d7ce09599952d7e91201d1c6732a0c21232155339d9236456db7c91ea3", + "extraction": "polynomial, phases, bridge_controls; validate prefix through hosting windows, with its fixed inherited cover correction formula and no old program comparison", + "edits": [ + { + "old": "from collections import defaultdict\n", + "new": "", + "reason": "Remove an import made unused by the source extraction." + } + ] + }, + { + "path": "data/complex/FULL-WORD.json.gz", + "source": "work/next-track/complex/pipeline/retimed-4/split-centres/FULL-WORD.json.gz", + "source_sha256": "66655cd858afb515dfd4cad43c4fef01f9185af670e144750e9977588ebd4ecf", + "sha256": "66655cd858afb515dfd4cad43c4fef01f9185af670e144750e9977588ebd4ecf", + "edits": [] + }, + { + "path": "data/complex/hosting.json", + "source": "work/next-track/complex/pipeline/full-source/research/e8-complex-adapted-kernel/data/hosting.json", + "source_sha256": "dc5fe719e71c26e856f0da96518af635ed2026b1c323052d97ee4e6b9839f2f1", + "sha256": "dc5fe719e71c26e856f0da96518af635ed2026b1c323052d97ee4e6b9839f2f1", + "edits": [] + }, + { + "path": "data/complex/ports.json", + "source": "work/e8-project/lean-verification/final-reproduction/tools/certificate/gcert1-e8-retimed.json.gz", + "source_sha256": "31467ace2b1667630b72e488e688911a0404b4755d0d2c87560b111ed4c07998", + "sha256": "c4a4288b6052341eddff69e93999525b74512bb2fcdddb00bcdfe80ee42526ce", + "extraction": "only ports are read by the scalar canonicalization" + }, + { + "path": "data/complex/schedule.json", + "source": "work/next-track/complex/pipeline/fresh-parent-complex/GLOBAL-TEMPLATE.json.gz", + "source_sha256": "a2e46da30e6391109bf4eb3314388dfd39d3e8541e1ebf09b27802e9b4df50b4", + "sha256": "f62975a9146a4a0c9d1ecaa6f8567aeedf30bce484cc2105a74e4d7e9afc2522", + "extraction": "fixed geometry and schedule specification only; programs, calls, idle remainders, redundant old phases and old receipts omitted; phase hash regenerated" + } +] diff --git a/research/local-eight-form-capture/historical/work/complex-next/structural/check_hosted_capture.py b/research/local-eight-form-capture/historical/work/complex-next/structural/check_hosted_capture.py new file mode 100644 index 0000000000..4ad5f739af --- /dev/null +++ b/research/local-eight-form-capture/historical/work/complex-next/structural/check_hosted_capture.py @@ -0,0 +1,108 @@ +"""Check a local dirty capture and list its current physical owners.""" +from fractions import Fraction as Q +import gzip +import hashlib +import json +from pathlib import Path +BASE = Path('/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/next-track/complex/pipeline') +WP = BASE/'retimed-4/split-centres/CANONICAL-WORD.json.gz' +TP = BASE/'retimed-4/complex/GLOBAL-TEMPLATE.json.gz' +w = json.loads(gzip.decompress(WP.read_bytes())) +t = json.loads(gzip.decompress(TP.read_bytes())) +n = 240 + w['R'] + +def add(rows, dst, src, q): + for j, x in list(rows[src].items()): + z = rows[dst].get(j, Q(0)) + q*x + if z: + rows[dst][j] = z + else: + rows[dst].pop(j, None) + + +def run(rows, operations): + for e in operations: + if e[0] == 'add': + add(rows, e[1], e[2], Q(e[3], e[4])) + else: + rows[e[1]] = {j: x*Q(e[2], e[3]) for j, x in rows[e[1]].items()} + + +def identity(): + return [{i: Q(1)} for i in range(n)] + + +ops = w['precondition'] + w['compensation'] + w['A'] + w['B'] + w['cleanup'] +rows = identity() +run(rows, ops) +assert all(rows[i] == {i: 1} for i in list(range(120)) + list(range(240, n))) +assert all({j: x for j, x in rows[i].items() if 120 <= j < 240} == {i: 1} + for i in range(120, 240)) +S = [{j: x for j, x in rows[120+i].items() if j < 120} for i in range(120)] +D = [{j: x for j, x in rows[120+i].items() if j >= 240} for i in range(120)] +assert all(w['start'][j] == 0 for row in D for j in row) +assert all(x.denominator & (x.denominator-1) == 0 for row in D for x in row.values()) + +# Each selected centre row is a dyadic form of the input X bank. +clean = [{i: Q(1)} if i < 240 else {} for i in range(n)] +run(clean, w['precondition'] + w['A']) +C = [clean[r] for r in w['centers'][:8]] +assert all(row and all(j < 120 for j in row) for row in C) +assert [[sum(C[i].get(j, 0)*C[k].get(j, 0) for j in range(120)) + for k in range(8)] for i in range(8)] == [[56*int(i == k) for k in range(8)] for i in range(8)] +code = [i for i, row in enumerate(S) if row] +for i in code: + for j in range(120): + gram = sum(row.get(i, 0)*row.get(j, 0) for row in C)/4 + assert Q(int(i == j)) - S[i].get(j, 0) == gram +helpers = list(range(758, 750, -1)) +assert all(w['start'][r] == 0 and w['final'][r] == 1 for r in helpers) +assert all(w['start'][120+j] == 0 and w['final'][j] == 1 for row in C for j in row) + +# Correct the omitted-centre word on all helper dirt, then retain eight forms. +state = identity() +for r, form in zip(helpers, C): + for j, q in form.items(): + add(state, r, 120+j, q) +for i, row in enumerate(D): + for j, q in row.items(): + add(state, 120+i, j, -q) +run(state, ops) +for r, form in zip(helpers, C): + for j, q in form.items(): + add(state, r, j, Q(59, 4)*q) +expected = identity() +for i, row in enumerate(S): + for j, q in row.items(): + add(expected, 120+i, j, q) +for r, form in zip(helpers, C): + for j, q in form.items(): + expected[r][j] = Q(59, 4)*q + expected[r][120+j] = q +assert state == expected + +owners = [] +for r in helpers: + family, route = t['calls'][0]['owners'][r] + assert 600 <= family <= 607 and route[:6] == [4, 2, 0, 9, 0, [1,2,3,4,5,6,7,8,9]] + roles = [] + for call in t['calls']: + if call['replica']: + continue + same = [(i, rr) for i, (f, rr) in enumerate(call['owners']) if f == family] + assert len(same) <= 1 + roles += [dict(stage=call['stage'], register=i, route=rr) for i, rr in same] + assert [z['stage'] for z in roles if z['stage'] <= 3] == [0, 2, 3] + assert [z['route'][2] for z in roles if z['stage'] <= 3] == [0, 9, 18] + owners.append(dict(family=family, capture_register=r, roles=roles)) +result = dict(status='PASS_LOCAL_DIRTY_CAPTURE_AND_CURRENT_OWNER_INVENTORY', + word_sha256=hashlib.sha256(WP.read_bytes()).hexdigest(), + template_sha256=hashlib.sha256(TP.read_bytes()).hexdigest(), + all_columns=n, retained_forms=8, centre_gram_multiplier=56, decoder_factor='C^t C / 4', + dirty_correction_terms=sum(map(len,D)), + local_source_and_target_map='X unchanged; Y += S X', + local_helper_map='Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged', + owners=owners, + scope='The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified.') +Path(__file__).with_name('hosted-capture-receipt.json').write_text(json.dumps(result, indent=2)+'\n') +print(json.dumps({k:v for k,v in result.items() if k != 'owners'}, indent=2)) diff --git a/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt new file mode 100644 index 0000000000..b6b951e5bf --- /dev/null +++ b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt @@ -0,0 +1,43 @@ +Independent review of check_hosted_capture.py + +Result: the stated forward local scalar map is correct. No algebra or operation +order error was found. An independent exact replay propagated each of the 800 +input columns through all 19,449 scalar operations. It did not import or run +the parent checker. The receipt is capture-independent-receipt.json. + +The omitted-centre word has the exact map + X' = X, Y' = Y + S X + D h, h' = h. +All 11,326 nonzero entries of D are dyadic and use helpers whose initial frame +is zero. The eight centre rows C satisfy C C^t = 56 I. On the 112 code ports, +S = I - C^t C/4. The other eight ports have zero S row and zero C column. +Thus the displayed formula for S must retain its code-port scope. + +Let P insert the eight C rows into helpers 758 through 751. The preload gives +h1 = h + P Y. The next correction must use these updated helpers: +Y1 = Y - D h1. The omitted-centre word then gives + Y2 = Y1 + S X + D h1 = Y + S X, h2 = h1, X2 = X. +The postload gives h3 = h + P(Y + 59 X/4). This is the requested capture. +If the correction used the old h instead of h1, an extra D P Y term would +remain. The checker uses h1, so it does not have this error. + +The boundary operations obey the forward local frame contract. The preload +uses Y and selected helpers at frame zero. The dirt correction also uses only +frame-zero registers. The postload uses X and selected helpers at the full +frame, after the existing full-frame cleanup. This statement does not transfer +the same boundary operations to the backward program. + +I separately checked the current physical owner inventory. At stage zero, +helpers 758 through 751 map to families 600 through 607. These are pair-two Y +hosts. Each uses idle window 2, offset zero, width nine, and entry frame zero. +The same families have one owner per call. Before their level-three endpoint, +they occur at stages 0, 2, 3 with disjoint offsets 0, 9, 18. The window has +rank 32, so those three whole residuals use 27 axes and leave five axes. + +Limits +The stored signal remains added to each host's arbitrary input value. The +selected helpers are not restored by this construction. The other helpers +are restored in the local label map. A later ordinary dirty-safe call can +accept the changed value as dirt, but that fact does not prove the proposed +changed global controller. The paid monomial and phase realization, the +endpoint decoder equation, restoration of the eight selected physical hosts, +and the global invoice still require proof. The checker states these limits. diff --git a/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json new file mode 100644 index 0000000000..6c605d458e --- /dev/null +++ b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json @@ -0,0 +1,13 @@ +{ + "status": "PASS_INDEPENDENT_EXACT_CAPTURE_MAP", + "source_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "method": "800 exact input columns; symbolic composition of boundary maps", + "columns": 800, + "scalar_operations": 19449, + "code_ports": 112, + "dirty_correction_terms": 11326, + "C_row_gram": 56, + "captured_forms": 8, + "boundary_frames": "preload and dirt correction at zero; postload at full", + "scope": "Local label map only; no routed endpoint decoder or global cost claim." +} diff --git a/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/check_capture_independent.py b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/check_capture_independent.py new file mode 100644 index 0000000000..cf451a93b8 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/complex-next/structural/hamming-factor/check_capture_independent.py @@ -0,0 +1,79 @@ +"""Check the omitted-centre map by exact input-column propagation.""" +from fractions import Fraction as F +import gzip +import hashlib +import json +from pathlib import Path + +BASE = Path('/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/next-track/complex/pipeline') +PATH = BASE / 'retimed-4/split-centres/CANONICAL-WORD.json.gz' +raw = PATH.read_bytes() +w = json.loads(gzip.decompress(raw)) +n = 240 + w['R'] +ops = w['precondition'] + w['compensation'] + w['A'] + w['B'] + w['cleanup'] +steps = [(e[0], e[1], e[2] if e[0] == 'add' else -1, + F(e[3], e[4]) if e[0] == 'add' else F(e[2], e[3])) for e in ops] +S = [[F(0) for _ in range(120)] for _ in range(120)] +D = [[F(0) for _ in range(n - 240)] for _ in range(120)] +for column in range(n): + v = [F(0)] * n + v[column] = F(1) + for kind, dst, src, coefficient in steps: + if kind == 'add': + if v[src]: + v[dst] += coefficient * v[src] + else: + v[dst] *= coefficient + assert all(v[i] == int(column == i) for i in range(120)) + assert all(v[i] == int(column == i) for i in range(240, n)) + if column < 120: + for i in range(120): + S[i][column] = v[120 + i] + elif column < 240: + assert all(v[120 + i] == int(column == 120 + i) for i in range(120)) + else: + for i in range(120): + D[i][column - 240] = v[120 + i] + if v[120 + i]: + assert w['start'][column] == 0 + assert v[120 + i].denominator.bit_count() == 1 + +C = [[F(0) for _ in range(120)] for _ in range(8)] +for column in range(120): + v = [F(0)] * n + v[column] = F(1) + for e in w['precondition'] + w['A']: + if e[0] == 'add': + v[e[1]] += F(e[3], e[4]) * v[e[2]] + else: + v[e[1]] *= F(e[2], e[3]) + for i, register in enumerate(w['centers'][:8]): + C[i][column] = v[register] +assert [[sum(x*y for x, y in zip(a, b)) for b in C] for a in C] == [ + [56 * int(i == j) for j in range(8)] for i in range(8)] +code = [i for i, row in enumerate(S) if any(row)] +assert len(code) == 112 +for i in range(120): + for j in range(120): + gram = sum(row[i]*row[j] for row in C) / 4 + assert S[i][j] == (int(i == j) - gram if i in code else 0) + if i not in code: + assert gram == 0 +helpers = list(range(758, 750, -1)) +assert all(w['start'][r] == 0 and w['final'][r] == 1 for r in helpers) +assert all(w['start'][120 + j] == 0 and w['final'][j] == 1 + for row in C for j, coefficient in enumerate(row) if coefficient) + +# Compose the four block maps symbolically. P inserts C into eight helper rows. +# preload: h1=h+P Y; correction: Y1=Y-D h1. +# base: Y2=Y1+S X+D h1=Y+S X; h2=h1; X2=X. +# postload: h3=h2+(59/4)P X=h+P(Y+(59/4)X). +result = dict(status='PASS_INDEPENDENT_EXACT_CAPTURE_MAP', + source_sha256=hashlib.sha256(raw).hexdigest(), + method='800 exact input columns; symbolic composition of boundary maps', + columns=n, scalar_operations=len(steps), code_ports=len(code), + dirty_correction_terms=sum(bool(x) for row in D for x in row), + C_row_gram=56, captured_forms=8, + boundary_frames='preload and dirt correction at zero; postload at full', + scope='Local label map only; no routed endpoint decoder or global cost claim.') +print(json.dumps(result, indent=2)) diff --git a/research/local-eight-form-capture/historical/work/complex-next/structural/hosted-capture-receipt.json b/research/local-eight-form-capture/historical/work/complex-next/structural/hosted-capture-receipt.json new file mode 100644 index 0000000000..97df002d17 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/complex-next/structural/hosted-capture-receipt.json @@ -0,0 +1,1263 @@ +{ + "status": "PASS_LOCAL_DIRTY_CAPTURE_AND_CURRENT_OWNER_INVENTORY", + "word_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "template_sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "all_columns": 800, + "retained_forms": 8, + "centre_gram_multiplier": 56, + "decoder_factor": "C^t C / 4", + "dirty_correction_terms": 11326, + "local_source_and_target_map": "X unchanged; Y += S X", + "local_helper_map": "Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged", + "owners": [ + { + "family": 600, + "capture_register": 758, + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 601, + "capture_register": 757, + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 602, + "capture_register": 756, + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 603, + "capture_register": 755, + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 604, + "capture_register": 754, + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 605, + "capture_register": 753, + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 606, + "capture_register": 752, + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 607, + "capture_register": 751, + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified." +} diff --git a/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json new file mode 100644 index 0000000000..dd44f28a4e --- /dev/null +++ b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json @@ -0,0 +1,78 @@ +{ + "status": "PASS_ENDPOINT_COVARIANCE_AND_TENSOR_COUNTEREXAMPLE", + "chart_identity": "D_I P_sigma = T_translation P_sigma D_I", + "charts": [ + { + "family": 600, + "helper": 758, + "q": 7, + "translation": 15, + "strict_commutation": false + }, + { + "family": 601, + "helper": 757, + "q": 11, + "translation": 15, + "strict_commutation": false + }, + { + "family": 602, + "helper": 756, + "q": 19, + "translation": 23, + "strict_commutation": false + }, + { + "family": 603, + "helper": 755, + "q": 35, + "translation": 39, + "strict_commutation": false + }, + { + "family": 604, + "helper": 754, + "q": 67, + "translation": 71, + "strict_commutation": false + }, + { + "family": 605, + "helper": 753, + "q": 131, + "translation": 135, + "strict_commutation": false + }, + { + "family": 606, + "helper": 752, + "q": 259, + "translation": 263, + "strict_commutation": false + }, + { + "family": 607, + "helper": 751, + "q": 13, + "translation": 15, + "strict_commutation": false + } + ], + "source_X_factor_required": "D_p^-1", + "reason": "The initial C_q is a frame interpretation, not an extra paid initial transform.", + "false_tensor_shortcut_witness": { + "Fourier_character": [ + 1, + 1 + ], + "exact_D_inverse_tensor_2": "-1", + "proposed_aI_plus_b_translation_tensor_2": "1" + }, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + "scope": "Seed phase identities and a counterexample to a proposed constant-size all-size shortcut. No endpoint cost or modified global controller is certified." +} diff --git a/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json new file mode 100644 index 0000000000..c7e703de58 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json @@ -0,0 +1,1273 @@ +{ + "status": "PASS_INDEPENDENT_800_COLUMN_DIRTY_CAPTURE", + "base_columns": 800, + "complete_capture_columns": 800, + "base_scalar_operations": 19449, + "code_ports": 112, + "center_gram": 56, + "dirt_correction_coefficients": 11326, + "retained_forms": 8, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f" + }, + "owners": [ + { + "helper": 758, + "family": 600, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 757, + "family": 601, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 756, + "family": 602, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 755, + "family": 603, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 754, + "family": 604, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 753, + "family": 605, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 752, + "family": 606, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 751, + "family": 607, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "Exact local label map and initial owner-frame inventory only. No modified global controller, endpoint uncompute, finite invoice, or new exponent is certified." +} diff --git a/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt new file mode 100644 index 0000000000..b9dab30be4 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt @@ -0,0 +1,108 @@ +INDEPENDENT REVIEW OF THE HOSTED MIXED CAPTURE + +Verified local statement + +A separate exact input-column replay checked all 800 columns of the base map +and all 800 columns after the new boundary operations. It confirms + X_out = X, + Y_out = Y + S X, + h_i,out = h_i + C_i(59 X/4 + Y), i=0,...,7, +with every other helper unchanged. The capture helper indices are 758,...,751. +The eight rows satisfy C C^t=56 I. On the 112 code ports, + S = I-C^t C/4. +The other eight data ports are unchanged by this omitted-center side map. +The exact dirt correction has 11326 nonzero coefficients. + +The preload reads Y and writes the selected helpers at local frame zero. +The dirt correction also uses only frame-zero helpers. The source postload +reads X and writes the selected helpers at the full local frame. These frame +facts are checked in the frozen word. They are local boundary contracts; +they do not replace the routed all-size implementation or its cost proof. + +Owner check + +The selected helpers occupy physical families 600 through 607 at stage zero. +They are pair-two Y data families. Their initial host frame is I. Their +rank-nine residual adapters are identity. Each first route is + [4,2,0,9,0,[1,2,3,4,5,6,7,8,9]]. +The saved receipt lists every later use. Before or at stage three, they are +used at stages 0,2,3 with offsets 0,9,18. A future data role is not an unused +private workspace. The modified global controller must account for its +retained signal and its arbitrary original value throughout those uses. + +The normalized channel does not strictly commute with the full target + +Use P_sigma f(x)=f(sigma^t x), with D_I Fourier multiplier i^weight. Every +selected sigma is orthogonal. Define + delta_j = (weight(column_j(sigma))-1)/2 modulo 2, + t = sigma delta. +Then the exact relation is + D_I P_sigma = T_t P_sigma D_I. +For families 600,...,607 the translations t are + 15, 15, 23, 39, 71, 135, 263, 15. +All are nonzero. Linear and pair phase coefficients were checked separately. +Thus orthogonality gives covariance with a translation, not commutation. +The scalar port matrix C commutes with a common address operator on each +input port. Therefore the same covariance holds for P_sigma C. Its image is +not restricted to translation-fixed vectors: one nonzero coefficient permits +an arbitrary payload. Strict commutation does not follow after that factor. + +Source X requires its entry-frame inverse + +The inherited source file + work/next-track/complex/pipeline/full-source/research/split-centres-global/ + proofs/INHERITED-COMPLEX-GEOMETRY.txt +defines initial X_(-1)=C_q and Y_(-1)=I. It later states that a source which +began at C_q has exchange factor C_all C_q^(-2)=C_all X_q. A terminal +translation removes that factor. The current retimed schedule begins with +local stage zero. It has no separate paid initial data-front transform. + +Consequently X in the scalar capture identity is an interpreted local label. +If u is the physical source input, then X=D_p^-1 u in the stage-zero chart. +The actual retained source channel includes D_p^-1. With physical target +input v on the initially unframed Y side, the channel is of the form + K_i(u,v) = P_sigma_i sum_j C_ij[(59/4) D_pj^-1 u_j + v_j]. +The data route rho(q,0) is identity. Later stages would need their exact +routes and phase adapters included separately. + +Each D_pj commutes with D_I because both are Fourier multipliers. Thus the +entry inverse does not spoil the displayed covariance. It does remain in +the endpoint decoder, and its all-size cost cannot be omitted. + +The seed two-tap identity does not prove a constant-cost all-size decoder + +At the binary seed, + D_p^-1 = a I + b T_p, + a=(1-i)/2, b=(1+i)/2. +This equality is exact. But it cannot be tensor-lifted by keeping two taps. +On Fourier character (1,1), (D_p^-1) tensor (D_p^-1) has eigenvalue -1, +whereas a I+b(T_p tensor T_p) has eigenvalue 1. This is an exact two-bit +counterexample. The existing compiler treats the selected-coordinate +transform as a paid child. A different all-size implementation would need +its own proof and invoice. The orthogonal covariance identity is +multiplicative and does not have this sum-versus-tensor defect. + +Exact hypotheses for endpoint uncompute + +Suppose physical inputs are z and an arbitrary host h. A verified capture +adds Kz to the host. Suppose the complete later circuit has been proved to +leave source outputs Fz and host output Fh+FKz, with all other affected +outputs already correct. Then the required endpoint decoder is exactly + K_end = F K F^-1. +Subtracting K_end(Fz) restores Fh. For F=D_I and the stated chart, covariance +turns this into the translated decoder T_t K. This is an operator identity, +not a price. It still requires the correct source entry inverses inside K. + +Applying this lemma to the new construction requires a proof of the actual +later routed controller, all cover classes, the physical host response, +coexisting captures, arbitrary correlated dirt, and a legal all-size decoder +with its finite and recursive costs. Those claims are not supplied by the +800-column local replay. No new supplier exponent is certified here. + +Reproduce + + python3 work/doubling-architecture/rank-independent/live-capture/check.py + python3 work/doubling-architecture/rank-independent/live-capture/check_endpoint.py + +Both checkers use the standard library and read the frozen prior artifacts. +RESULT.json and ENDPOINT-RESULT.json contain their exact scope and hashes. diff --git a/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check.py b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check.py new file mode 100644 index 0000000000..b5b231e08a --- /dev/null +++ b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check.py @@ -0,0 +1,133 @@ +"""Replay the hosted capture by exact propagation of every input column.""" + +from fractions import Fraction as Q +from pathlib import Path +import gzip +import hashlib +import json + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[3] +BASE = ROOT / "work/next-track/complex/pipeline/retimed-4" + + +def compile_ops(operations): + result = [] + for event in operations: + if event[0] == "add": + result.append((event[1], event[2], Q(event[3], event[4]))) + else: + assert event[0] == "scale" + result.append((event[1], -1, Q(event[2], event[3]))) + return result + + +def apply(vector, operations): + for dst, src, coefficient in operations: + if src >= 0: + if vector[src]: + vector[dst] += coefficient * vector[src] + elif vector[dst]: + vector[dst] *= coefficient + + +def main(): + wp = BASE / "split-centres/CANONICAL-WORD.json.gz" + tp = BASE / "complex/GLOBAL-TEMPLATE.json.gz" + w = json.loads(gzip.decompress(wp.read_bytes())) + t = json.loads(gzip.decompress(tp.read_bytes())) + n = 240 + w["R"] + assert n == 800 + operations = compile_ops(w["precondition"] + w["compensation"] + w["A"] + w["B"] + w["cleanup"]) + prefix = compile_ops(w["precondition"] + w["A"]) + S, D, C = ([{} for _ in range(120)], [{} for _ in range(120)], [{} for _ in range(8)]) + for column in range(n): + vector = [0] * n + vector[column] = 1 + apply(vector, operations) + for row in list(range(120)) + list(range(240, n)): + assert vector[row] == int(row == column) + for i in range(120): + value = vector[120 + i] + if column < 120 and value: + S[i][column] = value + elif 120 <= column < 240: + assert value == int(column == 120 + i) + elif column >= 240 and value: + D[i][column] = value + assert w["start"][column] == 0 + assert value.denominator.bit_count() == 1 + if column < 120: + vector = [0] * n + vector[column] = 1 + apply(vector, prefix) + for i, center in enumerate(w["centers"][:8]): + if vector[center]: + C[i][column] = vector[center] + code = [i for i, row in enumerate(S) if row] + assert len(code) == 112 + assert [[sum(a.get(j, 0) * b.get(j, 0) for j in range(120)) for b in C] for a in C] == [[56 * int(i == j) for j in range(8)] for i in range(8)] + for i in range(120): + for j in range(120): + gram = Q(1, 4) * sum(row.get(i, 0) * row.get(j, 0) for row in C) + assert S[i].get(j, 0) == (int(i == j) - gram if i in code else 0) + helpers = tuple(range(758, 750, -1)) + assert all(w["start"][h] == 0 and w["final"][h] == 1 for h in helpers) + assert all(w["start"][120 + j] == 0 and w["final"][j] == 1 for row in C for j in row) + for column in range(n): + vector = [0] * n + vector[column] = 1 + for helper, row in zip(helpers, C): + vector[helper] += sum(q * vector[120 + j] for j, q in row.items()) + for i, row in enumerate(D): + vector[120 + i] -= sum(q * vector[j] for j, q in row.items()) + apply(vector, operations) + for helper, row in zip(helpers, C): + vector[helper] += Q(59, 4) * sum(q * vector[j] for j, q in row.items()) + expected = [0] * n + expected[column] = 1 + if column < 120: + for i, row in enumerate(S): + expected[120 + i] += row.get(column, 0) + for helper, row in zip(helpers, C): + expected[helper] += Q(59, 4) * row.get(column, 0) + elif column < 240: + for helper, row in zip(helpers, C): + expected[helper] += row.get(column - 120, 0) + assert vector == expected + assert t["residual_adapters"]["recipes"]["0"] == {"identity_adapters": True, "post": None, "pre": None, "rank": 9} + windows = {e["idx"]: e for e in t["execution_schedule"] if e["kind"] == "idle"} + owners = [] + for helper in helpers: + family, route = t["calls"][0]["owners"][helper] + assert 600 <= family <= 607 + pair, side = family // 240, (family % 240) // 120 + assert (pair, side) == (2, 1) + assert route == [4, 2, 0, 9, 0, list(range(1, 10))] + assert windows[2]["source_level"] == -1 and windows[2]["pair"] == pair + roles = [] + for call in t["calls"]: + if call["replica"] != 0: + continue + uses = [(i, r) for i, (f, r) in enumerate(call["owners"]) if f == family] + assert len(uses) <= 1 + roles.extend({"stage": call["stage"], "register": i, "route": r} for i, r in uses) + assert [r["stage"] for r in roles if r["stage"] <= 3] == [0, 2, 3] + owners.append({"helper": helper, "family": family, "entry_frame": "I", "roles": roles}) + result = { + "status": "PASS_INDEPENDENT_800_COLUMN_DIRTY_CAPTURE", + "base_columns": n, "complete_capture_columns": n, + "base_scalar_operations": len(operations), + "code_ports": len(code), "center_gram": 56, + "dirt_correction_coefficients": sum(len(row) for row in D), + "retained_forms": 8, + "source_sha256": {str(p.relative_to(ROOT)): hashlib.sha256(p.read_bytes()).hexdigest() for p in (wp, tp)}, + "owners": owners, + "scope": "Exact local label map and initial owner-frame inventory only. No modified global controller, endpoint uncompute, finite invoice, or new exponent is certified.", + } + (HERE / "RESULT.json").write_text(json.dumps(result, indent=2) + "\n") + print(json.dumps({k: v for k, v in result.items() if k != "owners"}, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py new file mode 100644 index 0000000000..4d2123ec2a --- /dev/null +++ b/research/local-eight-form-capture/historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py @@ -0,0 +1,90 @@ +"""Check the selected chart phase and the failure of the two-tap tensor lift.""" + +from fractions import Fraction as Q +from pathlib import Path +import gzip +import hashlib +import json + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[3] +BASE = ROOT / "work/next-track/complex/pipeline/retimed-4" + + +def gaussian_add(x, y): + return x[0] + y[0], x[1] + y[1] + + +def gaussian_multiply(x, y): + return x[0] * y[0] - x[1] * y[1], x[0] * y[1] + x[1] * y[0] + + +def binary_apply(columns, v): + output = 0 + for j, c in enumerate(columns): + if v >> j & 1: + output ^= c + return output + + +def main(): + tp = BASE / "complex/GLOBAL-TEMPLATE.json.gz" + wp = BASE / "split-centres/CANONICAL-WORD.json.gz" + t = json.loads(gzip.decompress(tp.read_bytes())) + w = json.loads(gzip.decompress(wp.read_bytes())) + charts = [] + for helper in range(758, 750, -1): + family, route = t["calls"][0]["owners"][helper] + q = w["ports"][family % 120] + zero = min(j for j in range(9) if not (q >> j & 1)) + u = q ^ (1 << zero) + swap = list(range(89)) + swap[0], swap[zero] = swap[zero], swap[0] + b = [(1 << j) ^ (u if u >> j & 1 else 0) for j in swap] + indices = route[5] + [j for j in range(89) if j not in route[5]] + sigma = [b[j] for j in indices] + assert all((x & y).bit_count() % 2 == int(i == j) for i, x in enumerate(sigma) for j, y in enumerate(sigma)) + delta = sum((((c.bit_count() - 1) // 2) % 2) << j for j, c in enumerate(sigma)) + shift = binary_apply(sigma, delta) + assert shift == u != 0 + # Linear coefficients and pair coefficients determine the mod-four phase. + for j, c in enumerate(sigma): + assert (c.bit_count() - 1) % 4 == 2 * ((shift & c).bit_count() % 2) + for i in range(j): + v = sigma[i] ^ c + assert (v.bit_count() - 2) % 4 == 2 * ((shift & v).bit_count() % 2) + charts.append({"family": family, "helper": helper, "q": q, + "translation": shift, "strict_commutation": False}) + a, b = (Q(1, 2), Q(-1, 2)), (Q(1, 2), Q(1, 2)) + assert gaussian_add(a, b) == (1, 0) + assert gaussian_add(a, (-b[0], -b[1])) == (0, -1) + exact_tensor_eigenvalue = gaussian_multiply((0, -1), (0, -1)) + false_two_tap_eigenvalue = gaussian_add(a, b) + assert exact_tensor_eigenvalue == (-1, 0) + assert false_two_tap_eigenvalue == (1, 0) + assert exact_tensor_eigenvalue != false_two_tap_eigenvalue + assert t["execution_schedule"][0] == {"kind": "local", "pair": 0, "reverse": False, "stage": 0} + source = ROOT / "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt" + text = source.read_text() + assert "initially\nX_(-1)=C_q, Y_(-1)=I" in text + assert "C_all C_q^(-2)=C_all X_q" in text + result = { + "status": "PASS_ENDPOINT_COVARIANCE_AND_TENSOR_COUNTEREXAMPLE", + "chart_identity": "D_I P_sigma = T_translation P_sigma D_I", + "charts": charts, + "source_X_factor_required": "D_p^-1", + "reason": "The initial C_q is a frame interpretation, not an extra paid initial transform.", + "false_tensor_shortcut_witness": { + "Fourier_character": [1, 1], + "exact_D_inverse_tensor_2": "-1", + "proposed_aI_plus_b_translation_tensor_2": "1", + }, + "source_sha256": {str(p.relative_to(ROOT)): hashlib.sha256(p.read_bytes()).hexdigest() for p in (tp, wp, source)}, + "scope": "Seed phase identities and a counterexample to a proposed constant-size all-size shortcut. No endpoint cost or modified global controller is certified.", + } + (HERE / "ENDPOINT-RESULT.json").write_text(json.dumps(result, indent=2) + "\n") + print(json.dumps(result, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md new file mode 100644 index 0000000000..b7daf8de49 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md @@ -0,0 +1,41 @@ +# Attribution + +Copyright 2026 icekylinx. New split-centre cancellation, reversible source-centre +composition, integration and verification changes were prepared by icekylinx +with substantial OpenAI Codex assistance. Apache-2.0 applies to these changes. +Earlier private Pro exploration used GPT-6 Astra; the new construction and +composition in this package were developed with Codex. + +## Direct sources + +- Zhihao Chen, with OpenAI Codex assistance: PR425's mutable-basis Hamming packet + producer, common-frame scalar interface, exact phase lowering and verification; + PR386's compressed nine-stage bit geometry, owner template, audit and finite + accounting. These supply the immediate complex and geometric baselines. +- ai-nanachi, with OpenAI Codex assistance: PR426's R767 bit word, including 55 + clean-reset helper reuses and 54 frame changes. The complete selected word is + imported unchanged before the nine source-centre replacements. +- Dylan Crow (utcorvusvolat-dotcom), with Anthropic Claude assistance: PR370's + Hamming E8 bit producer, root table, record exporter and local format. +- Jacob Sussman: the E8 family, complex unit and underlying interchange framework. +- applecrusher, Dugongue, eumemic, Rohan Arun, Chafik Boukhalfa, DaysSky, + DreamingOfClouds, Henry Grant, Evan McKinney, LJH-217 and other contributors: + the source, frame, compiler, rational-pricing and analytic lineage detailed + in the preserved original notices. + +The current value is computed from the two actual resulting programs. +Independently published improvements are not added numerically. `SOURCES.json` +records original commits and file hashes; `notices/` preserves source notices. +Files under `proofs/` describe their original packages and retain their original +scope and attribution; the current statement is in `PROOF.md`. + +## Earlier contributions by icekylinx + +The earlier #10, #18, #24, #32 and #36 contributions developed projector batching, +partial-swap frames, endpoint gauges and conditional analytic/tape integration. +The subsequent #104, #115, #130 and #144 contributions covered stopped-product +integration, partial gauges, three-stage covers and paired-cube/source chronology. +These provide historical context, not additional savings in this ledger. The +source-centre idea from the preceding local round is used here on PR426's bit +word. Unselected research experiments and superseded submission candidates are +not part of this package. diff --git a/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json new file mode 100644 index 0000000000..215f58a649 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json @@ -0,0 +1,134 @@ +{ + "upstream_base": "12a4934d15006e8c10f9b2264f13f8f341be802b", + "pr425": "e11ccea1d092beb1b01b4ee4ce49da478234254c", + "pr426": "88d552526893cd15325948bb1487e9a4d4bf32f6", + "imported_files": [ + { + "path": "vendor/hamming_packets.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/hamming_packets.py", + "sha256": "daa9301e2767a711cfe66c6bebaad68e1a3bdb97ec9e848c927527ab43b37ae5" + }, + { + "path": "vendor/clifford_exact.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/odd-stages/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + }, + { + "path": "inputs/complex-ports.json.gz", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/higher-stage-e8/verified/gcert1-e8-retimed.json.gz", + "sha256": "77b0c0fa19ef3da1c7316010e13493aa5eea1a50c3506eddc08f7480e659878b" + }, + { + "path": "inputs/complex-template.json.gz", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-nine-native/GLOBAL-TEMPLATE.json.gz", + "sha256": "1b84904a31a733aab9bfdda3f528c06719f590d2133a43687a8bded955dc991e" + }, + { + "path": "inputs/complex-data-phases.json.gz", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-nine-native/DATA-PHASES.json", + "sha256": "c972b5b60649c2a52354f5160f69adc0f4a270fa09d32012beff9888774ab84f", + "source_sha256": "f621f6d4296cb215f334830356c5f79fe10d6d04d15b3ccda76ba0885ab67d0a", + "encoding": "gzip; decoded bytes identical to source" + }, + { + "path": "inputs/e8-r865.json.gz", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr370-source/research/e8-bit/data/bit/bitE8-r865.json.gz", + "sha256": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55" + }, + { + "path": "proofs/PR425-COMPLEX.txt", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/hamming/PROOF.txt", + "sha256": "2cda27b9b9a1eb24127c38c2c7a6e085155a2472183e220189a3ea2c2b7720dc" + }, + { + "path": "proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-nine-native/PROOF.txt", + "sha256": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + { + "path": "vendor/engines/moment.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr361/code/engines/moment.py", + "sha256": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482" + }, + { + "path": "vendor/engines/base_two_moment.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr361/code/engines/base_two_moment.py", + "sha256": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098" + }, + { + "path": "vendor/engines/outer.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr361/code/engines/outer.py", + "sha256": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c" + }, + { + "path": "vendor/export_records.py", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit/code/bit/export_records.py", + "sha256": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3" + }, + { + "path": "inputs/bit-geometry.json.gz", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine-validation/GEOMETRY.json.gz", + "sha256": "5c980202227859e8bb9b863f94503930c2a59d460c0421356688e2b0d828b4a1" + }, + { + "path": "proofs/PR386-BIT-GEOMETRY.txt", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine/PROOF.txt", + "sha256": "c5f077b849e9add9957ab4ee36095dd47bc678dee7e09baa146dac4c0a0d66b2" + }, + { + "path": "notices/PR386.txt", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine/NOTICE.txt", + "sha256": "ae2241615a23063b18a04f1b7a88a52e62b3d7d42e333fbd21e3668567ab83d1" + }, + { + "path": "inputs/bit-r767.json.gz", + "source": "CrocSwap/integer-mult-bounds@88d552526893cd15325948bb1487e9a4d4bf32f6:research/e8-clean-reuse-extension/data/bit-candidate.json.gz", + "sha256": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7" + }, + { + "path": "notices/PR426.md", + "source": "CrocSwap/integer-mult-bounds@88d552526893cd15325948bb1487e9a4d4bf32f6:research/e8-clean-reuse-extension/NOTICE.md", + "sha256": "6a5593d0f284a2f0865037f5c5fa9e5f76f9e12cf50ec5284486d3b8137c89da" + }, + { + "path": "proofs/PR426.md", + "source": "CrocSwap/integer-mult-bounds@88d552526893cd15325948bb1487e9a4d4bf32f6:research/e8-clean-reuse-extension/PROOF.md", + "sha256": "5787738ceb6faf14d3d96e8452592860a6c6a469733a9bcf196e8d1562ba1ffb" + }, + { + "path": "notices/PR426-SOURCE-PINS.json", + "source": "CrocSwap/integer-mult-bounds@88d552526893cd15325948bb1487e9a4d4bf32f6:research/e8-clean-reuse-extension/SOURCE-PINS.json", + "sha256": "18ace817f2f9af22511bb303e99656ed114e534b87f3dd95a65ca4ca670baf2f" + }, + { + "path": "notices/NOTICE-PR352.md", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr370-source/research/e8-bit/NOTICE-PR352.md", + "sha256": "967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524" + }, + { + "path": "notices/NOTICE.md", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr370-source/research/e8-bit/NOTICE.md", + "sha256": "025773f32fb43667395e64c627a1752877bdc93afbfe01b106703eee438d21d3" + }, + { + "path": "LICENSE", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/pr370-source/research/e8-bit/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "path": "notices/SUSSMAN-NOTICE", + "source": "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit/code/complex/inputs/complex/NOTICE", + "sha256": "9419dd03a2f52cf8bdfc4d18216ce29f263ab583b27f01ced8e420985bcb7c81" + } + ], + "adapted_sources": { + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/hamming_full.py": "613796df039dfc08de708831582533e553316eaf157485531e4df2d897bdb3bb", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/audit_full.py": "fdc1da8fa95716d60076383e691a5be1bf8bec0b229b7582bc056afac28951d0", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/integrate.py": "eb5b427f2095578f28a1fb320b4694047e20abdbe0c8bcdc65b1e9e05ab90d01", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/phase_full.py": "5c2bd267cc3106c9eee8787132c460614fdde8177c0c2653435f8a7b110ebac1", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/hamming-mutable-basis-complex/work/complex-network/replay_ir.py": "f7a3829118581ee59fdeefc1f91166d8e7bb94686ea92e7743a2ef7d50139dcc", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine/global_word.py": "2c438be46213e014170e607a745185e45e33c7b7240b833efc86a2330de0d1f6", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine/audit.py": "75811327b0d6cbd56aae8e28d72abd42d57c7f3f3630781d045efee2d36446e9", + "CrocSwap/integer-mult-bounds@e11ccea1d092beb1b01b4ee4ce49da478234254c:research/e8-bit-complex-nine/certify.py": "550b1408fb3a581dd6b82c90e3f84ad7a9f78746d2be11ffa1cf543d719ae2d4" + } +} diff --git a/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt new file mode 100644 index 0000000000..c4150cb693 --- /dev/null +++ b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt @@ -0,0 +1,161 @@ +Independent compressed nine-stage complex component + +Claim and retained assumptions + +The fixed E8 local invocation has h=9, v=120, R=783 and copied rank loss +cst=72. The construction below has m=73, live stock 14727 per complete +orthogonal cover, and paid profile + 1:157599, 2:43488, 3:37296, 4:10080, 5:15480, 6:23832, + 7:3096, 8:7488, 9:576, 16:3840, 32:3840, 48:3840. +It is a conditional complex component, not an integer multiplication bound. +The local E8 invocation theorem, general Clifford rank-zero compiler, +complete-stream tape primitives, common fine-grid precision, and retained +analytic recurrence interfaces are assumptions retained from the fixed local +source package. The new finite construction and its charges are supplied +here. No new Lean kernel proof is asserted. Final bit-side admission and +outer assembly are separate obligations. + +Exact operator convention + +For q in F2^m, let X_q be translation by q and + C_q = ((1+i) I + (1-i) X_q)/2. +Then C_q^2=X_q and C_q fixes the uniform vector. Write C_all for the product +over the coordinate vectors. An invertible binary matrix G acts by the +literal address permutation P_G. All products of C_q are commuting exact +Gaussian-dyadic operators. Their multiplier on Fourier character y is +i^(sum epsilon_q * parity(q.y)). Modulo 4, parity expands as its linear sum +minus twice its pair sum, so this multiplier is an exact Z4 quadratic form. +Equality of these forms proves equality including the scalar phase. + +For arbitrary local subspaces U, including degenerate ones, use the +deterministic canonical representative from clifford_exact.py. A basis G +whose first columns span U gives K_G = D_Q P_G, with +Q=I+G^(-T)G^(-1), and T_U=K_G C_[dim U] K_G^(-1). +Its preimage Lagrangian is {(u,u+w): u in U, w in U^perp}. Thus a nested +transition has Fourier rank equal to the dimension difference. The supplied +compiler produces two explicit monomial operators around one rank-r C child. +Its equality is checked both as a signed Pauli tableau and on a nonzero +exact Gaussian state vector, which fixes the otherwise missing global phase. +All 946 local frames, all 3120 used directed transitions, and all 240 old/new +source/target adapters are checked. No rank-only replacement is made. + +Compressed window and data routes + +Use V=F2^9 direct_sum (F2^8)^8 with the ordinary dot product. Let E_s be the +first s exterior eight-dimensional blocks, for 0<=s<=8. The exact window +representative of local U is T_U tensor C_Es. A nested transition cancels +the common exterior tensor factor exactly and keeps its original rank. +Conjugating the whole window by any cover permutation preserves this fact. +The old/new endpoint adapters are the checked local adapters tensored with +identity, followed by the declared address conjugation. This proves the +window lift directly; a divisibility assumption m=multiple_of_h is not used. + +Every supplied port q has odd weight and a zero coordinate. The explicit +orthogonal matrix U_q in data_phases.py maps e0 to q: swap e0 with a zero +coordinate e_j when necessary, then use the even-vector transvection +x -> x + ((q+e_j).x)(q+e_j). Its remaining columns are an orthonormal basis +of q^perp. For s>0, rho_s,q exchanges that complement in the local block +with exterior block s and fixes q and all other exterior coordinates. +It is a symmetric orthogonal involution. The stage data owners are +g=d*rho_s,q, with rho_0,q=I, so the right factors are bijections of O(73,2). + +Use canonical data levels X_s=C_[0,9+8s), Y_s=X_s C_q^(-1), and initially +X_(-1)=C_q, Y_(-1)=I. The routed stage starts at level s-1 and ends at level s. +Their binary preimages agree with the window endpoints. Exact phase +polynomials determine the translation that reconciles each endpoint, and +the template applies that translation. There are 3840 nonzero such +translations across the 120 port types and nine stages, before replica +multiplicity. These operators are not silently identified from equal +binary matrices. + +Four-pair scalar chain and idle children + +Starting with F_0 (Y_0 += X_0), for j=0,1,2,3 apply B_j (X_j -= Y_j), +then for j<3 apply X_j += X_(j+1), Y_(j+1) -= Y_j, apply F_j, and undo +that bridge. The last pair has B_3,F_3 without a following bridge. +Afterwards apply, in descending j=2,1,0, X_(j+1)+=X_j and Y_j-=Y_(j+1). +Finally exchange each pair by newX=oldY, newY=-oldX. The complete signed +integer scalar matrix is the identity; omission of every bridge fails. + +Before a bridge, advance the idle pair to the active pair's level. The +two advances for the newly used pairs have ranks (16,8), (32,8), (48,8). +The final advances have ranks 48,32,16,0. Each rank occurs on both members +of the pair, each of 120 ports, and each of eight replicas. A nested idle +transition is factored in the explicit orthonormal basis U_q direct_sum I. +Its exact Z4 phase is reconciled by the stored translation after that child. + +The final Y endpoint is C_all C_q^(-1). A source began at C_q, so its +unadjusted exchange route would be C_all C_q^(-2)=C_all X_q. Applying the +literal X_q to each final Y before the signed exchange removes this factor. +The corresponding 120 omission controls fail. This correction is charged. + +Banks and arbitrary correlated dirt + +There are eight replicas of each of the four data pairs, hence 7680 data +families. Each stage has 783 independent bank families. Number a local +helper occurrence by z=783*replica+helper. It uses bank floor(z/8) and slot +z mod 8, with its nine-dimensional residual assigned to coordinates +[9*slot,9*slot+9). A paid coordinate C child at coordinate 72 completes +each bank. All eight whole residuals and this padding fill dimension 73. +Thus there are 9*783=7047 bank families and live stock 14727. + +Let Pi_slot swap the first nine coordinates with the assigned block. The +local invocation at class d uses the bank class g=d*Pi_slot^(-1). Its +residual at that owner is P_g C_block P_g^(-1). Right multiplication is a +bijection. Local helpers sharing one bank have distinct slots, hence +different right factors and different actual bank classes for every d. +All data and private families are disjoint from banks. The checker verifies +these injections for all 72 invocation/replica templates and 56376 residual +assignments. A complete cover sweep for one replica finishes before the +next begins. The local dirty invocation is block diagonal on helpers at +its endpoint and permits arbitrary correlated helper values. Therefore +overlap between different invocations does not impose a cleanliness or +independence assumption. At each bank class, the eight residuals and the +padding are coordinate factors in one common conjugated basis, and their +exact product is P_g C_all P_g^(-1). + +One more exact correction is essential. Orthogonality alone does not imply +that P_g commutes with C_all as an exact operator. In fact + P_g C_all P_g^(-1) = C_all X_delta(g), + delta(g)_i = (weight(row_i(g))-1)/2 mod 2. +The quadratic terms cancel by row orthogonality and the remaining even +linear terms give the displayed translation. Both sides fix the uniform +vector, fixing the global scalar. Apply X_delta(g) to EVERY final live +family in cover class g, after the bank padding and signed data exchange. +The template includes and charges all 14727 corrections per cover. This +identity is also checked on every orthogonal matrix in dimensions 1..5. + +Finite work and recurrence charges + +The source emitter is regenerated and revalidated in both orientations. +It accounts for 1242936 local events over 72 invocations, with all copied +center and dirty-tableau lifetimes intact. Forward and backward scalar +words freshly replay all 1023 independent dirty live columns. Only the +private work starts at zero. Work comprises 783 tableau streams, nine +reserved center streams (eight used), and one coefficient stream. Each +invocation completes and erases its private work before the next. Physical +stock is therefore 15520 per cover; scalar-only work is excluded from the +recursion-volume denominator. + +GLOBAL-REVIEW.json records the complete recomputed finite overcharge, with +64*(73+1)^3 compiler groups per rank-zero adapter, source-counted scalar +primitives, and overcharges for all data routes, bank selectors, phases, +padding, bridges, exchanges and cover corrections. The O(73,2) order is +2^(36^2)*product(2^(2i)-1,i=1..36); its bit length is 2628. The recomputed +router fits 2^30000, the literal charge fits 2^100000, and the precision +guard fits C0=2^210000. No even-dimensional orthogonal-order formula is used. + +Largest child 48 does not satisfy one-layer halving. Instead +73^2=5329>2*48^2=4608, so two nested children have width strictly below +half the parent, including floors. The general depth is bounded by +2*ceil(log2 e), with direct small leaves. For B=s+E the completed-child +semantic induction has 2B(73-48)-s-E=49B>0. The resulting conservative +complete-row coefficient is 2*2642+9909+252=15445<20161, retaining the +external bit/base-row allowance as an explicit interface assumption. +The inherited bad-branch envelope is priced conservatively as before. + +Two independent rational moment engines admit +b=999240641319551/10^18 and exclude b+10^-18 for the source-bound profile. +The rank mass is 1072575, and 73*14727-1072575=2496=8*(8*120-9*72). +This complex component exceeds 1/1024 but does not improve the current +bit bottleneck. No improved final kappa or completed PR milestone follows. diff --git a/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz b/research/local-eight-form-capture/historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5929a4251c92c6cc35a3909bb32ee083e8ff0efa GIT binary patch literal 465792 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 hP=@y~l+-HX#jxyvL40k~)$x)@ zzvfP-*W$R&x3l}!HVAi?nzrl?iIllWtn$Vhj~?&Lfu9{+Yld^d#`MSTyh%ORs~On+ zOmi%eUV2)AxvA3T*8VZr3To=1J!74!oZIan2Yu@v; zUFVGDXo}N=R8sl6)0;F(*P&BMZJI6xs1ylv_?iN*^VNLSE#M`?^>kUUOr1}KU2!aT zFiT+sivaWKgw9HYKFm8CL*uhl3uv5_+6U4sYp+6C)yJ}|+FZ@>U`@$hVR>H4L;8SI zkV(z^ZQ=KnhKuz4CT6mMTg(m95s?C<0{iI}I5}>DU?h>P{y6%VOw;I3t2gQX_@?YXI7u5P{ zogF)%aJ}T!>3|&}-9v$`(fKE&X^iq=PILVhiKQd69}6$21_}hld1#JBD!TYkfQP(dn(n$3N}tuv<#bDD+5c^S=$)cVZyyS2HQHtejc8C+y*eF``!#Tgd7ts_Oa+(o_<*L0*4db*4_*@b6uI(aD6hYrY z-+_D~sodl`&X^t+42Gnv(yj>u1RG2Z6j7N(6`c8uD|Iq8YxN>CWR4lD!Ugu(6pKm& zg7`~*`gR{(Y3g13gsk#0ftLU|qKwEMExL&T@8o%yQsb~|#8hzq<=l;`k0Kb)SlA@z zx-P}3BVy8Cf-2@9u2_dzLG)MyW;g0xnR*+hSxA?#y+l9vV(qZdza&mk;9v7(Pfl~Fw9y$D!srS4Ej*n=?#+wmz!wFhHW z^74Yq4gL)2cGsKxIB=hlY|g->i6sI=*vL$sQo}fyJ{M}R2&q|l!xe~AYnUd&rz;%V z?g-U9(+b>p?aNOPGu&{MD4nwCRijW5668yJxr?o>)az|K#)2GfI?h98+>jO7RKvnn++00o>l? z0=(Zkx7mx>R-Lyu2)s*iz4t7qwXql8pqo3Jvhexfk8!VmtFV%-Y1DienkR8>QQPj> zo$1)9W-=cRR<@!klID(d`{?x*$jD^&_(1ON6@qXEP2gw7=pMnQyWC1umAW~4_pp!3 z36dB*BFF_ur{@zQ^(g{GF0%W*yLpkFYP4igZL@Mfi@^70C)=1d!?SLq2Z`fL&u(1h z@~`&)X0&8-r6F|Q^%Zvkt38}yRR;JuVzxJKH&O|X$QW4HJ1Gcc!dqyiJg##+93gdN zvPusRWc>hYoOZh2xIB$bDQ*9uVlu+D@l86s-!+}_{C&cu*S-Rq%dAZqdZ8=oW>56! zxfJNCyj54F=@(xD&R>+_l<%+0cS1V;>sw&Vg@ zir&n6sh?zP8QB_ih2Hc#Rr?DoW+liRq88>NQ0BePyGuS~4NzU*Zh2 z2Ir-b=S-#6=19C{v0UqM+cdh64`;Wz{)Ji(LyIT9Mvs5m*{bN$W&+bgpoO3wThi3G zW8SIFR)-eK!%fwhnmUU(kX@a{+3N*3ntC1)O>W{rzfwN^`B(KI!!Dn_`ImQmSEalA zFmM?G5w-jkEm&sL*G^K-q9j=>OlJAMROV(@O;RkRF`T>BQ@Ekvw%JPp33~b9G$wf` znGjM|ESqOu?IWFJE*cbdd!GEOM?xRbmXcA~7;ixEytD_MJO z7o*%2VMkqV>^DV}uJnF1NE4{9d>EjH^EvZr0j#t8ati-T-Mh;v(DX%31JL$(6*?yN{ZUf~wmy$xDc zJmI&pgd5oYH?5Qim%8&I-O1Q(=iQZHn-PV>IJ;RX2qFU;ECVin*pcFj zQwUe27bV2s29M9DwFGs0rL$#|vYLm}e+mlSceLQaZl3_cIE2krr8UNBM4r@Fn?$%!QR$ed!Ci(vALBBjyXBXrac#k2TFk zMwE%&$$OWiuo#S*egmik(hK17no^%*YO2VuM{&303QBFb5yQy@Dh1y_uxRgDT9& zHy`DeHs#~(Umtk;u1)d82`LtDGn+>|nxVC(+O4>>k#$}o*eh)CnW~hnEeL#WulSt0 zxZHi5w)t}oAs%HtXCG8m1(QmJMBPw!lWd(KXnT?UL!>4+rvS`hF za_J@QZdd7VIQ5oL)g*rhLjVj*5PS>z+66HKnl|8SO{eilF3U|Nvx(7GD z$96lx1}%mfglyWE=A;VT#pgv@25RfGzv$5iWJI#k*7o(m=hYxZilp>4mV1O>WNP{4 z9R|dgobHt*%3xSwEp9R3_*Eu%J98`Q6;rm6zQ_8stm3 z#10a(PnT5ZOfL|;)w#HX>rFhVhNUPj*fGj_!TaNa`_s!iZWZa=#?K0aXV`CtEz5?< zl0^h&(~!AQ6ww5IW|Y9W<=#3miWdC73mOOW7rgKg(!{SHci+2Q=kwNErY(kkbtaq2 z-Hgq9eBj~$3&!#QE;)8ev$dB#kL>yTjz8?Zk>xc_OXHV*z^gzQQGDL|nG^F4>tI6j zEpzhT=0rB>WyLm9`Kl~tg%`Jap3v&A!z-AR-HBea;@$MRecSuai#kmj^6B%p;*kfk zi(9eZsb9Us-h?xmv*sAE-W*P}(@B?rar)}9BAF9mm($mu%aHdH#fpK2`7kX&r?v&Z(^`HjX%kG+> zwHGhf>UZp*;y;UEEIF2ajW!{i-@E8Cq;#STJ zwZSIp*mrllXWcnde0Ga^I!BHZhiAtW(Xk&<6%TeLEZc}sXpek5vb4SP=^(qXkp}P{ z&Q09wUzsK##vNnQg>m&4>lR&Zd9n*_JAaR5^HqU&sCo;tXx=bqUcB8Pcdb|>y-+E8 z>>Mvx2E~8HxOqF!Hf_cRlp0=b){)kyRTthG1TWxzocyN?bu{mqj z(k%iTgVwRMMlp{j6_+tHZAJCL2wuM_o~A=-4e-g!mC=GO-J-3tl_j-57f-R@MO-gJ zwsc#c!kG};qVolPXC3v_`GfBIG&r`bA}hWET`Kv_0=oUN?#eV)ynX*f7|yT>7bQj; zhqM@L>`QDuQ#j$LXB5MjX$=>jgzMn8aKWC`u5KOX1?uyREbh-jtyVPGUs(14vw16UH^~hIdm>Uw7;jAT19f>j_ zDzyZ%w(Hk}%G;Hr7+=%YKOqhgag+~5;b!YpTY18BckwE%JX3(`!&wige(OQPG`Nhpdt^wY z?Ac<9kTn$P{$1Vo=ktBOzt{76{(1hGIp#Qz%Y}2!^SF-l{eGX<f!#g!yUB?)Wbk z4fh!TZ;}NMj%IW#J}bXJxme+z{kN>K(55ml6^hcxu^Exqy-Jz3pLIJ(Yyf?K;VI|Z z3o&1{QjXm8qJGPwG0zXcyz#T9mkT)l63%{5&W8uV&TXH-GxXFtQ{c4hWRYlbk0;Vs z({rLt)8h>Z+0eg~>%%wiVA+4M49Jy0kgEn&94Il#REUcDd#cLhUKq>3qlX1 z%c7D(@Qrq^317oAS_;_8h!sZuS8qSa1QX!tgD3fh&uz^n@|nWZ#JM zCIesj@G{H(F^V3vywa((n5Kpt{o`w~<*X~q@xnF1aMpik|Cw~5o8QB`5&wUTRmHEN zHiDAa&F}BKJ4Q=*7dfib@$5Q;g!XtRp=a4CmCP71>Oli|(SlBkFPBCpnV~ue@D-PH zu?!}A+jw(vrOB2550mz9?2n;ubgX^sVpR61a8+ixhRC~gRwWD5jb7fI!xb_Eh(LXvy%tSW5s=* zpr8KKG3?$wuIE-u<_(6FrCcSUnMMoT7O^?5Mu-F75}EuvFurh&yLchG<#L8mSJe3O zUn~bz=}#||WB{*(udi1ww<&98`QNuFI}Nx-N#V?kZu5zPZ>0asgOm?x2f69iror!m z_A!cu z4gN4_0BXHkqJ2^}ZYl`vu%28T#vH9Vw89z0c2~pVJLg)3%eMM4S1!k*S)zI)Z-A!7 z3Lbh3hGfDj!Dxu8DC8(JR`THqcz;VdDnErkZb!X@YdRk^mwutGN8~3BE}<&q*};*5 zV(9|I4Yi4X_lWaVDDhz>kEOZ~l0>3Lr&XLob1=(e8cqw3H zLFn1F7JGtK`a&)oRSCIMOf24{IPC#ZPUYk*uhsLK6$F{8?yPSzh3vUP8jZb7KF=qi z37mqhQ7`~YTDTl&>jD~gO1|eUAslVy{`xqi4s%)JP8>_nj`h3wlgsbR-rkVIH^K1= zaQ1#fV!cKDVfdM*6Fa)sPhGBQJaKNqi8X6YAz?7&5#tw4mPH4?CW9HERsE}5NMR33MtiFu~*rgsl9ZGbb93A(GSM%u6c8y$7(`V%!C^ZF(H-gZ=(X+2O7 z+85Q7Z1Xr}sVI;mPP}jQNpU;e#SFrL3C-jJD=q&0jHz*ub!JJpO@W@Rgk1GnX^8Xd zyr>a(LF~d~7S~-VUcQhMu-A@lre}5^8I+y(k<89#Fkg1rkr;N7tK!4NU<i)O}ksqx5V{`BR#O0c*Fa`ET9NdJ3@|9au!%gF%w%2Bmxsk zM}tCqV`{c^-C?BtxmQPvu0=hXNdG&70&-ON<21kE*)jjnF`FSTYpZjE2lU_$*o`yC6Jzdx~OXRBj zkfQ?Z);4N~%8)AB$egR4=#Bt=1^PaHpb{25ufKxr>RTwUQoRx#4jpHhOJ98o?W>Br zeFB^+i5EsdgjqlBC3DZna=4xuvm~@7=m12^*#=_>==80ijHavW7!U_g3F3&WPrDAw zV@*aG5WpFzA`5ivF+cq}OQ1iTJFA*cgWXKLcQ}f!HIM~at6rjG3;F3Q3?I{-A9kI( znxEmFzndK~@VWFZYpB3DoJlokm3uVEHY59-wP_cE^GCR$Vq)gyx7aPL<4J>dc4cf| zTcAZqY!in~7ft8gsV~Ai{Gfg&NDHdqu@`N3?pgY&;V8G|JzLzz1@@cyX}M?9HOvgb zJG?ZDcL$k&@du|3SZHV!vliuK@CQz>J-VMhKjkkU#BFuvVaw*Ir_@G*a}71dN6~&! zxBRn7F0}6%9|}J_qijPK1>zTIrza6NW+=YO5-%f=-L_z%;aM{V#Zr4)bo;0Sads;mE?ypRLe z9s{OxWK6e_g*2KJVmrAsn);k2CAhWY|_n%q*8=J!h&=Oq|pw!nFpC z=roJ}4iWz@1+8SwP>4nskB79eA#tJ~>p9CF1okW>F3mMYHHseO%dTF}pdmvi1u4ue zUxPNY47C4@Eypf}jJUoajVx#%Tq`%84)xc>jIwf6Ls!vT{dWX7;2{c3;;HL_MdfZ( zb0NaCxq%;Zi0I?m*&HcO#&j75ZTCG!LMH0lGhJvsK#lNv787}Ne~xg3wvr=?BZ`eyF9w|t-PYy_%`eCQesJlf&au{7QS&Pq>Y6#vw)ojAsUz{C$j~2$BX$z* ziQ#;W?Xe@^(d|RSOP&DonY?2UP7P@2b&D6xS>M`AUDMef>2KIrD>9Z&jbk^yJ>b01 zQ`1aKa-%>^)doilitC8+<;ZAmeh=fE9)nw)c<2=GT70=sv60+V+T=CnLhWo0IFg1) z_s2JP*D>C;g=_!R4EB&pt?O8_|~h6VR%k%Mp&bEjnj zc^9&{qW6jRNlDHE@Kwxy@`DZxL%>3naY>IeeMq=_1xsOXAVFOmXd}$^Rwoltv)$tI z)}e0R>Ci5smKUg8d*eR#{+u*#V%JoVT`CM<*A4+Q)E$A!hRGx+cNAXZ2nN~~E=zp0+o+jwW zv@acCX2!Zv)b-;V@DAYhc%X$#RlDnyw-SfMA*RxA5+0fH6 zaI&5hjtu${dl8uFz;%YBF70^>CjWve0iRZUS=x$*_#NCdhZ%+T5XZF$AuCbZk((e5 zk!ep!r=gp90D%MLlL5G;G}qF2b}f-3{_&VNolx*)W1oVqpU3hgV`EZmt>S;t^O1%T z88QKst!%<`w5=FBf2?}a4Lw#FJY4<85Zsv9s{j7HgA}I|HBT^zq%tB%s8s7oG+$g> z!L$p(In}QjVc>l*+|5E#c~>4W)Ho?K(ZRNOwe6iCCR&U;9S;@DMVDB@jlmienNq$m z5h{|EvleNa1{`|f2^6j6zI|dV@{4q{cF+M*LC9J6bEfY%6lqBytw%6@yB+^}*JLGq z4})(nE+qYI$A8)7%o>*W)~zl4*>3PZ4(X?MZ*o2Rn)!prG&-g#Q>@-db@)#vQ{}8P z7xk5fB;MR97kKc_rQzZ@H%zhqC_r{33+eVT2fF4{`DT`ssB0#|2o(IiTrW? z=dgbxd?bZP@Hj}Hc%jTdCt1MQu!{WF_z!o*Ld5sc@&ozra})8kf*SqCs=V-8!W4h4 zlQl@=HRI-3m>IL2^{ac18Ig1Fiqk-uu5G^k1zzpDJ$B*8cGw|T#F^2Z(obrhLGQO- ziY@}5#urPA4BF@DU}^3oMI$yGXzB{+Kj{L1?Lw+j9Qi&g7Pkvf7jtd~IY9dmTG8er zb9`qq?w+CAbW|SdQqxC}$gsY13mqH8H&0nKJi&`Bq5-aw`r<6M$*0MZT35_xB!wgp ztCQ5b|4qW_68cD@7pK*g|0H2ACM#$@OX3e@hVV0sw^d0|gB)=;ikq&vUr5aHX<<^| zYmeRi%+|?2Y)YvZJZKSM;}Sp$a>S2;fea))C276S+NG<;j`ymwB1v*$>=(rZsNDt_ z@Rpc5E0@4{v&1UTz9YF|4HgAr3_T&pnX83q0E%iu9;S>wm+uF(u=caHb>en?{YxF; zhCFfK`r3=TBFNxLdJ`XAA<#^Ij?YH|2gf)Puk=QJ7Hdr5RHpeiP$busD`o2ZQN+9S zl?CS8C*(K>a;SI9Puw1qH5uizda?baGu`&@=lAUx_OMxp79CA$3-HwlYs)?EmXnKG z6++}CyUL96k9MRd4|6~jk_6FbP+#vp2M$c#VD{y7d6H<3)h3fdBO56a;P$X6>vEuY zvwJa!Eo=igra}rGjp_(~Bl=kZxjIe|y~VVykwcuIv%RnUh3& zUq>Yko(I_Us?+_?uRUw4Sr(8E2-d09k1)x3pLD52{K?0bcw- zG^G?@QxX^8WxI3hK4-3yFHn2t7iR=`1^Ty#F);2JjrHx|O19osjs84I;%GC=&PmPV(r{Tf4`OFB}gV zZ*xulYPote_r)iTxkE?^?WRSRB#Q#i%(Fwy#!Xi9)qm6nsCqq9*umomVWr<t$>@+8r8Q>=jK08@akije;LGbvjf&(W#~;#VUKinf9KBXX?~*dw1m+}3tP~d z{N>@C2A065PRXNI1oWu!B_|IPvZNeYQWJ|dLy4i*;htyG7h|mg_C&Vif|oABX*sFa({$$vIicJwu)Z37 z;wS58RJb_>nqfA@V_3+*~HhXH_=-7#g~8?iaL zw^VuiYDUbO#J(@gTGzCX#We*g`DaOJpzmY0Q=#F%URinxvpv4{*r=vYwmV2Ri0@NTECpNqJ*McY`2XN~E0DRp?%a+`wYJ?O$cGzP@6BbRy>g9%wiF~2BBr$hWUDDVHEh1>Wumx5Qwtdf}Oto zmgnd}y*PpFgye=2dsNy*YosWOo0`4gR0vX=b2U*slD+FKZrDHuWMe8`KXRP+GU%BL zAISpYq4tYYwUq@6F+aaZ_>NgZO5@MbSS!y?bxnP5QN{4KC6vVQ;EIQk#mdr3#~*g?E~#5`J$tda0 z_$l=Kb+DvAMCtU+ZS7Jns+jN}Qw0pM-Q=?u-}28UFEhG*t-H~cyv*T761hcoY|j{; ziO3alObA$v`0lZA_>EH}1}-^da38J9bep1R;kn&P;4J|}bn(0iKZ5bpYY5Cu;zSd_ zBqhDe)jKuSF`7*MqH;&7o|W)+rt4`*92LQdxj8h={dL^Bw8lHNna`6lnfv7QyJ{)n zZG{FtZK+|Z^+M$B?tZ5qLuh8%J1>UjjW2)0tDQ|kz+7zNQ z0Mn`vUGlH_*K>vHA_U%i3tJGiYd=W8{iBW~|A@2A69e`Zx||89G;jaf`aQ7L5bsjJ zoOGZDov=t|d$$+C{r*^R4OsFu{58%F$f7bbrD_Ijp2Zc6`tn+lH7V#k0c;pbCqBU& zI*!p+!9?d>a67o0>)>JMhsH|`lg}Cg@EKaNWA(1KbQk})nD9=n5MOvY3-~BkSn_cR zS3#c!A>FL0@1V&rk5PVwHP68Ro$L!8|6P$z8-)Y(S;}d2hvqg(g#b-;ye8prEb+!^ z@tZbFdr%D;XR#uH)3HQO?DFGuPPS=A3;pYnK6WJ)669?y>d#A_>ac{V^w$rsMSzg3 z^@I8~ng~cDTzH$gPBjQ-y(NQ#-iMw^*YEd$^TOFY&4=ur`pH|O1bA3-K=8d56!!o_ z?Lc~y@q=GdCclTW(D8@&a!ti<^Vi52{Z82;q=LKqx}QaIRGY0JJqnt{1}#U83y) z?`_cvehrGFwtVqMawLd8#;SfMB&{`BRK`;trV8t-Ny6Uy?qAw-?W6016$v)d!Pa#mhpZeTvz<2R<^OtUJb&>Xg zGH(yQ+vKQc(67grXUM!HuiAuKXKT36AH}I2?{%E?ZN0O6x_+{A*NrF0;M-}xAOmxW z*ok|SWXYS#nj}dYPddz)na>v}vfI~Plz(s*zjTY+AOe?uQDeSAo#hfXqrmo(>d)>U z`c42?McfYYx!{%55M~XLsVjbo;owEgAmq})*C6idS6^AEtY<0K`ldRN#+|qEt^M{()oNwD&nV< zd+EEyI<1Y!?Q{-<1qDf!^I8airE_UM4-dC-f2%$=&MJYcl{Iv@*Ueus!OA(+g&bNm zm;B&%;2$FxAdcGsv%4R2OeLz`9R?Eo|Dpzp5D;~$!vJX@R|3BX3+cZ zQ58}Epc2JM_2Tu!*$z5^RpM9o+e|At)XZOPxByC)iOBYcaGzeoefupyUkYgr zjoKUCzU=xk=IVC1k_A~4VMSX*TtO16sOM_6x;`F13F_kt91wS4i*jY=*eUCjcu2Yk zs73ZwZjVfmBpOs0d-{o{}&}2|+ zhv(}~@ZLB!5)7Uv%~psPC3?<`aqWqRs7==k6rtmc?H zxuV)*HGo?oZP*MfnMB`6he~Psw>mf;U>qg;#OVoPuEDii`7+lL^@s4x3(F{=3>s#+ z$;Yy;oXxX!!Acu}W+bL=KU^@Be%6{iBE-3;!tO_xn8+AQ6U~{7c7PhAkfZRY_W?$P z3IL5ZH&K67G|V(2YQSP4rjPqGUUa2UJg4+oJ#rBuV|t(4qQ0K2SEQgEO3{H_^+n1@>EVn%Xjn-oHQ#k>BWo;oP#|%p)E}+QCgG`19b}v(3AnN7LKJsS9B5joxAu- z&XflQqd2uvswOyu3E9A0B2Cf6TtozQrY+n!3ERupUrqB2%b1)6<-6M%r-?*!{V{(a zm4JcD$T2Ks>CpWB87vrd10?um@2?=OiP^nLoz1bfGg{x!t2~{Tm!({LeysH(t#1|B zJ}`bi-HLv#?I2mj=BdN6reBpY`70abP;W2A(SUp&=w2VZCJ_`e`s(Wo1P6|!O}~ED z7IX^g?fFOZztlgHQV!;OMFf^~P(XH2&$tHMJMs^pSq1;}#za(Qq;>iFZGNhMsVylj zx;VYtil7;+@a8$7bV|-#r%PsF!75AUCSj-C=DoFi-}l`5ZhWD~=ob03t*BnbSjv*x zxSN0KOl0r2WyQToRO?sON!ezriBzyP~p%xI!WY52=Uw7tFU%phetq%oVJw&1*B7*hv8jLunE%In8i@FG9;`evtB}|N*~~_P0}ZQN;*g&YEa~>@+GxNj(Ml`7xR@TLSEDHUc-}93tf)h~oXbhaguZe|ZMj?sk z@59hy$(qSfK&)giD*`~?UyHOxm8WFtSphsrUXBW6__dUaS5pBH$NL^1XtD+0^UdZ2 z=wqLj!gaM$Oy!UTsGspfMo!%vH#P%3FT<`%_+C;Lszk$DXE>^%#FDeiz3t)s0-rv^ zQo*XX!H=_nT~(EAQ@H{kX0)#ezpw=%lOL6$Ge*ACrRGO0*DoCEt9A^d z3w2Fy0sL2W^B?|ebl(lU9r@zqYNh*T+4}ZXBSX@PK1mo&B7iV}K0aE8QWfUAt*LHE zG30Myh0xz(sBp_xNHyQU^kfWkkZIHyJN{#N7KD*m^XtM;et%g(rldtDN z<^3UztK)T40sLBL--cKt=>4kRf7ub3rP!W0s zj*_MRTz_RGxp0N)@7rS^eBUr*6e8}MT}hu%y7#Lm3CwC7R@P)3w`u$rpm?(E5z*Lp zjN6;+I@btZG)c^7X4jD>OL8dx{C%c3=4$E)nhHYm`cP_Tw_Uo9?**Ur+)cU}tCP_G z3WTmA+*6=fS_FUBh~;V#f)|55NtQ;z3sBw!nsU4@3||MZI~j@yYzSmt%j81}G<7{F zVf2D(f3KGsj141z7ya9dk8O(ZoZU80=APETS3LCFb;gPXmN`q`R?aeTx|#;nWURc< z`U&{|$|&Dr1ey=*-p@H;qs~OW(C3Bo`g!g)cGMQ{>&9!Il^gj;+o;9qex$9&^n3E1 z>Hle@ICPa*sn;aS(QvvLA>K?jzO{(;Iqf8M%UhtCT=eXVly5P`i41pulZXEUJ29CU`HzVHHf&s`6CZ~L7ivc_ z%7@SIWH^hDh^}bhk@=Fs|1T2{G}1Nj|1n1j(lyDqmn61%G|bn}x2NM9-&ldY&5m<| zLr>X{s-fM5g;$c|k$|Bm#mE0^{`DB+!^yTPs$DrHuZv^?Br`G;)U5=|?yH)9iM=*)AZielmdSTQbMsRsT=^IeN+3l4o|s?d93M zsRWg-Z{8G9K<}+TBLZOQ0JiylDozF1asuruPi%>w)QqZR%}llf?>7Prchy{n{pGs1uJjk;cx z2dnTKe)RxKJRprDnh(A3*?iOC@iz&d%v^BL@|Y#=!&CuoxD|iS5*LlZMQc>5;&Tuh zuS7$HlQL0@%B!-OPZEZ28%a>{b@t$A8 z8L*%7XsZtCZGIz_`jV-ax3Wa7i0cJ|3|aWGw0@s+5; z;siJQrz{Wtr9x)({}314iHF;&fcQXqYIU3P`Pe~L^XEHixqb|DMF2@AlV+EIaK+-H=pDOg-G7 zv%`!b8aP)cwd!>la4nOlcSnxv%LisxI_5(in=73p>>BZv*I4Y{a#myu*s92v`r2EK zRgwM;tV*95tr)k|b(#;cQG|xvgoQA*Xbeb0{1z=Vz-t@^2Py@XAjh+C+W5hbY+rtD zy2@BNb>e2;ALPTM@g4=*u{NT91T1Qly0NS_jwd}|JH_pasa!xxWMl>*C<$FXC_?Xv zxXM4e2`y48XlK1W`a#(wTAFaooRYk!jwGqXUs8ncO>0_-8#YF16oW5_t2E+$uO*ER za#m&uSYMDYzh-aswu+SPgj8uX_-}xtN{f*kel%3h_tfB`xZODk&VQG{zy{}o3uUSS za!$&KEd=iMeSPw2I1U35-F)g$Zx&*iyLk_Os}!rjeob=n!Nkliu_gZ3xsO1tO40ld z4i9-RiwmZ3U-gI#zB(VLo&c7XaHr-#*k{uVnl}27N85kd7@9{4@Pnkrw~Z79L4GVO z-Od=K)#c-Xj{?9pG~HGJh9RSfB|9ESWF7wW8r-hdMB7^hK+GmLho0_B$l?EJyprpH zNpb+fY!b8|b#}!1U6HCz5@;5*fB#?SpNRK9Qqck9*KtO}4Ndy9gQL!(xD&M+ z#b#2EmP<54=;t=xsiypH=B$Zz(59DD=8pDIHIcR$`IbU+a!FVmr!m=9ff>^l5*nU z@i9N%C38P`*g!UuJ}o0J)l&|~{KSF z?#Ysa;}e9drEdp|Rru**$f8m5(MO(p_T4s)0s8Hy$xACPaF%wax$+-yi`IT@I9n00 zB~^z=M{*HD0QmUN)}U9|zuTt|1etyRhDXRsmL)HfJ*S!<+BxvbZEV3wU+J8>pfihwkdeXR3SfFGTx%$kR7t((#q9VgpF! z%<>Xm=*^Y@ag}T$>rI737?}qsk$K`>plbM!*vnr*YS5(+PkV^1Qa}7F;h4 zOYcM;zN~0oKKZmpY9Gm|qy_in-XTP@t;&UPjHk~@x0-HcILERsCa913Ky^R2L|uf{ z;I8Z7@AzZ=AhwRi5>*}(YI0SlJ!j|3n~&IDaTV{K@x{X@m(~QGdw=3qhr-&GxBHzH zqk%mlAxef4eX0BhoEq+>BuBO@dC7aQsuvp;wGEFKEBgF|@S@cjiu=zz!uC42y6rq3 zDy2m-_lc*i1O&rqnaP@QQ+-TPxxjW=W*YDH)cR!OUe=-Pq!tf~I+~x&0c@}IE`tsz znwGvfb)Vm56Xq?*=ny&@i<7C}K$9#$UzvfjUT1zO=*DoT9NvudWe~%Eo~^4>qhC-u zc@_g{J(UJNX>eaurT<_f{1s}u4CGO_WC-a^;cDGunlD|N1;_6_+o{Ad7v48ml=nrB zb{!Z0kHAZW0?M0)CBHNZo@JEGoaA$a(>KezO3@+tdH<-ROlbTdoS~1Tw7%)Z9^hJw(G>5iel0@gi+y_iIHv4@6g}M2nhr`&i2DY#UTUO zHG63230SC^m;rJ6C5){hLJ)k80EQFp!3{_#qv2|<^Ygzdo_$`3x-f+4T-lxdNxfGj zu!zDbpv-kKd{>h%Xp-so!bj)Y$b#jb6o^`I~TVdf&xm zEoYX?XG;OgZ|IW4PyQ*W!9sN1d&mI3qXZ5tToJEl=P@=tQJkHd=~0pO<92+ZCOH9q z1vS0Nvi$MvJGDrDwBAz0n_o|cYOsS2a4Fwc47qk{CLR)~nw)NnbC!pu&bLf|^Nvqb zq&{I1zgzJQ6i zM%fueea^xRT;O}?Bln&b{hWMJ{c^{``R;Hp^X&CD4`|tb${SEECKmJ5H7Ki4&B@7& zADOoxx5Dxm<9NnUB?b1Cu73^Rn7<+nS7+_WyfD0ZiDyAV*ZkFkNX6x!{NJ4|7?ZPN z<@cP2;MDtk9u-XLGte$o?b%$r~S$CkGL}E<#AP-li`D<7BJ zDq$U;;)}~ekF`}B4BxFUEPm_Fs(4{y z8YS#~QZo6R<~ig{g0~{s`>%{luYkaQ>V@YyuDTJgv2bh}4xWb=nepg|KA+V6iY{68 z*b)&wy|oE#rSA0a!lYYEZ}S`%F7IC2RT7$4ePF9)AaxcQ9*DlK8%--}yv3>U$NGe7vM*%74_yGWP9W66UZ^V2rQgxzLT~ z=Yja&K^$nj3If*|Jo_^eGd((QZkt>CxYYc37S$Ws0l&4niSPx4EpzA)#$~?~pQnCC zHh%yZO@xFb`X0+QPZSzXY+|8}aU^)Q|;DOw$CNndB{|k=J<&Bi*eb zl)7*;n3?J?2T{JGQoSc`xnadW-Xk9CD;ed)ozYoJ_T#+*8DC=B7+LEr`+c`G(MuTH zk-UZIp^9d7>3i_-Qg>ly2kps8aq3Q9&@md;WA|jU%nge8wJT{Hx=$j_DNwV9)o@l4 z-z$ep>Ew>V>-qiq_%`0FJ_+BmOC^cXv7-IvukqVBeBI+=x_LeWtim1L%r_QqD?PQ# zVc}oW&ku!Px^*#YD`a%~{&1N8HSky#Y7fzqSo89Z9_N+kv}3|E^t@ekP%LZv!|kMV zy)QDGbV#C!$FjfnKm4j$6iWPdrPJ2sn?dH?s3>3d4-ogX19uTdr<2gK1}G=^%&Y$1we0xY_Yo z7A8tt^=U%z^AJh$11XCSw`S4stAx98nT#$U4fI7PBX3<^^I6bR+*Wx+xJYS08S8s8 zxb(sGd*Z5Z^ImC4l3(xDTT=PdJw;szRsjN91(d_X?eN9#%?eC$Mp&%rs261oXG-(vfE# zv^{+D-Q^?z&`&=s&As^0q7Gdpi=^-O0(o=RaR z`1Z#gD+4|iDNEy@>Yl6_%4N@Y<`6AamS!To&dt>sD?lQBEQWrMX7U*d=iV-$=c;`{ zS=|ENlMt0*m@~bp8?0-yR|JiHcPoN`;;b49LqX4{@ zq-Y4^m`d=H$~cOKT{>SJ8E<;=EZc;qq#FF|sM3h=6OZC63$Jg@*DO!+BOz<-q)#uh zMY<2B9qO6j$h&7+!C)}b`E%;!HS?YTes)eQUHp2l0u#x85cfR9oi2{Xy*ur(ExYdf zH8l`-x>W)r#Bd(zKPhLyFUkl1cEekU%k{n!CQ+@0y}`uc)`5_v+-8FZDpIfX>Nq^D z4sjz+1tVESU@8^Y_Z~+vEdoQaiU7++h3o0RY3iR6PgB8s&kqv`m&SA{_dik_hxeC! z>>=E!BEY|)HRBA|PYJqKpNIUq!HtiUfUYr8$K)hg(B?Xs)jqcGWKVS$$#rMlcyOPg z6noxBXxoQ6BAeBideOva@>Bsl#~9Y$Gue3YFZ8YO`yS(O-|O!FtCG6)EAp3B1sDwQ=dRI$cf@$U}zA#mLB5 zS+Cm@hPp|5WlSdV8HScI5RDGmPiF}IAfov%iLC8PxygOIt(*39?P5xm<@C>y+@hB@ zzfInvi0E!CYR|8W*VLJRj74{~k-{DTGxKLUlFrL5Ft;-{x)FTiVag9dd!N)}Zg11X zc({(oR>9}oN{Q6%RH$7Q-5hIfQQek`wDXZpz zHxo;`u10;3$8YaJ?7Fb+vkFTSw_@mB=l8+>U$?wP|* zc)AO>W+!-$hP@!c?*~>vE0HOIYFwC{6{?=<&&*VF-C_T6BXZ}B)1SP~Ds3r;?VcMD z*`4Sg^YsRK&HuVr))t4P_22r8P{y=k%+86L@rqks37T_YPoJ9`L*Q3o>YSfiQqB3t zYEIXVWwYl@78pn(6=7|Mj~KKPOA}p`CIK%l5x1y7&{saRVMpFJ{|4KW@s0j?{~cL>7Di^ zsc^lklmpxRM;Q6xt}#*NwETX&)N1L?3zg4!)yKNV50Lz8wX9IO(^VSiseO+NwXhix-V z%U%(1#ER-^)O)wX=gYMLQhQk$m}`c;pqNW3tDJSO4Zb`xw`F#5@%y4`^+f{nV%dJk zT;-@@`t!2=`XEFD>Bf%MiEH^alk%?eow(__tsm>>|Gako$5t_UKisgaRzxxG1mDc! zcQTN-Q`Z;6Sg}oI!POzR%>3~sG>Pk$<)qlWq{9%wuM$P5zXSwFUw9_^=V20&uV-Y=uw2AQ ze~iw{_3pHwKvJ~--kHnRet4yidExqS2)o{ulOS(hpikY|DhV_W8t|QdGf%5HnE%D? z47UW00l%KzILg{<^;j)s+mmd5Lb^Ob7*0Y$7%@z6HETC&Y!cDz6w;bU(22wLV8X)c zCx)_7_g+Ah_g7)pgF>@0%ryu&=_ZNkwLQ`aC)T)DV7j{0=TR$#x|M)APbmn zOz~m{s#hBGPe7&;>9~h_K1UtTS(s!uj!%7|7h+&ynHWRx0gZcTW<@Fy>v~#f&Ah{K z$1fKAR}#H$7PrN1ufuY#Q}s^#WNTyZNv`Ie0+M_xgHyb1hHX*3bkDeY|IfoCg=LdE zbKMChmRwkv*_{Hz%<<^>&DSV$tzIkaM5zTnTXZk_%e^}lF~~cn&rX(*ZoGx`1|3{Q zWX|nMRoiEvdzNIYR9KI>o&8Q&+X{7K*^L#8r$d&i_id5**H8>lXFaLiLNxO)%~m}s z&0ff4@5@CsGcKLdARM=5!_&*@KacabgrF|bYbbK;c88*_2jy@@yccTNUXiPgep1t> z=Ru+Wq@ac$!y`K3{ku{XVc((??4McizvG+w3k;58z&^9M2wkA>vzbw}FH`7@8K{$) z@Q5yWKQn?Leh#w}hoP{UL3I8JjcSF$^~^n2)66<}Np1^WqlR(qW!|fNh>EavnI6?{ zDUoXn&g%iTGVg0VijSuVOHv{{{xe4ocX}fkcUIXc4#si6e*YfvfEcOcc*me|-=(!c zSHO^BG@6~Fy7xkVX9jU8kgh`T4Wu3YB~g*iWPedlPn77$-E%xhr#=~Cnw(`^4)$UM)HX&lfFkYMJS0fguuIlUPxlz zUq7=M3%}y?JV9kcUp)mq!4g^~sPD!T*yJp280m_RT+#ZFk~ie%>LnpcD1Fg+q58au zzE0Xgox`S!^Nmq8(m~Jl58pmbJ~gUm3{;?3$`g?Gyf};s8FQ1>?_ngdgW%n| zMvS5aQLQ{-_(;t%q7Fm#7jWYwoo6VuQjcQ&Ve?chnJbpJ&%fCdk94ligo}Yx37ggS zW{l^N+PfOO;137&c8_G$lf7POUhIY54V@K?yG7T${_r{{iDfZM3v>HdgjlX7C~ZNX z_>KO0SO4YjLkWrT7TLNCx<)=c|Fe<4e*TAnagZo*H%)|Een8V2%TBKSXGE8O^K~Xt zi@tWMJQz$`ZW>Tw?1K_#S7-PW?xWu4bRi~?^2RoC!pS~YfSMq}g0xxSNUIlW-S#X3 zME937)-KoFX#sBeS@t&m``e}%Ou^*2C~WlzF1v{tdY~jU(fUdOyc)is&LQ1Z@9`q& zMz6!;b7N5yDSyfGyagG239B;t6vdq(R3mP7pcVwJ{=Eu8gm{2x3{MLM{AAT3pJY5q z8l>-_I%$osw=QSGJIKLbN2<(Eyi6p2qLZOA1nqj((h&I*aoe z5aAP>Lv?0ztpk}jJ8|89(rW656I=k^1-p+oA8b?=7Roz*)7P~%gf4`gar1T6yUY)9MY`0+yDkT0V1 zab&Re=D@=6>O;vhLi%mnK_2g)KyU@`Yj%S4^ijGSHj&9!ae6&AlAHXZR~U@dt;Ikg zkTJE114%_(%)CCT#*%60T*2U;ta{2qIr4<{-BO`AH>#n?gfznq*ZEWEr9*zG*UHgk zi!KXLRvDf+&qm2-*uTj1F&{ZeeL9=e^)49+Ts=Nj1;wPC!>xO~pxDm7MmV$R5fU`B#Z$&!5Ejui z4F8GunJA1V`%Rq0MFbY;|FWe&{r};HSus9AJ=6;#kRUuA!klFRe46x=yg~ZfBKdz9 zd+(^GnyzmcLV|Q5lt>Xn2p~w2-Z3C0ks?ic2Ss}C#n6W0-wezV^VL_lW`o)>L)`#HE-jTS(xj|2$m|pWLJ-K{zMvwx1rHOe*^-Oq0DLZ zat20M(OfKc;6MOaId#_4P2#C&2Iw6Ms62H&Zkza~vG>ELoLrKqW8FL= zOyXh8cH9op-Nt9?L6i^D*-sEt3oc1av1R8h9rfUOb87oY^JotlR$tG$PW>0ZP8TgL z7Yt(KDr?#we{JdO&ss#7N3V06_+r_+;pWi{bzSq|bC&ZIz%^W~SGk*at+}&+)`R57 zmr_LiVjL!|y4f6kzrFJF{y^u9SnYw@y5Qrhs}lceP$4q&g6wetGypk2K|Z3}bY`rP zzU_c(V8&|>!7=3VUlBJv(_)Lq-Pp^AMe@y$&Aj}x&1eN246qxpQKzpY5b`@~;sjk; zsrP}A>*y(a!%yb3SMEC(!?hF=t5QU3soRZQ5;l8&6#GhqC^>D78VIOxoHv`G&jQaw z8ox!e=~*sZ#yS((`)T7ni0sg#mC^HByvCWNn6fj3$HseTLb3oIyDrVp9-=Af;ePUc z5bL_kDn*3zU7U7jkOcO!DFq+88b|7Ie0zz5sJC!Fz4Sai22e$Cz9}j%7i{8KL5#VB zkP;!A0__bZwX1pikG*2$$?clA`)yeI>&gCu1hxtJZ^bU3{9;rTUZ8-ynrKPDF~Fm2 zxaKddc_aBEKOv9>sjYUelfjb&gyZ5`CDR^GO91y6(;QlgsKIfhk$MvbD>B*Km_H-P z?`P?WY;I|-nonf~oA<-dj0qWNt?={;VL7th(?JBi*zQ4`NpUhsmZO;*e#@93r=t}v zhGew3Zv%`-^onkAZEA_&N+c zG;f{ORIz398m){L+rJ6MEaI`n;z-p*`%FH!bLh$3vrg^V_}m)8X3QV`N&19VH=n~R zok_l)NLvRF?`VT`x!A4+Evv|ddlEmo{s^8WXz;jcC4%q?DyQQ!d>kAiL(!BIYBU=b zV6*}SGzN=3ExIK}rvOz9R+2KTS`#|c&#RSKz>hDciv(`o;anM zwKM@GICuJ7)sSEMmIj2JN0YdEIF1~E)ZE%Yk#9Y!uNc_k_CNYzH;8y)am&#))$=I|(= zgiKeS81LAo*g14fiXWk9aP|m>Wng~cjAWUm38Wm9qhty^A1@aBu2-CkmaaC@S|Y9M zJ;J&T6hl3Zy7aX9GxH}#t3PT9x0SZ&AAIDOf$-2~Oq_u4k>0Cy_`ugp`=ry<>V4w0 zJ1&hn70|w}lcN2Wo4HeW zC#SWCzsrRduUSuaiAc<^i-WR}3>M0B-8qW=V-M?l z?=UQOxfbCu{IkHbT0DNo>;JJRmLD+OrKjiyeJg6ngd;eZnvw{YYsdhsW=z!d60^$i z`PSQpl4R}IzjLY*#p1>V#o~y8@YNCNZ%sD_46T7*aK1pa3pd4$$7^j+n)*&?0)x{} z9sL)6-gi^Q(%};#gJNWm96uM_^rPtT6i41gi5DrwbJUs)nYDG~d!ekFqiRdOaj;&< zJfj*f2r>t^$Evqc6c09w)pdb-O$sfWI#?HDe^_ZwbTlr}A@#ji!b<20Ie#Uox9CXH z4B<3R9;x|)kHGj#qYD-tKBL z0FhIbc&cQ?hVj1(8$%}Y_Rie{ zrBlDuAw6%>_BDr|Z|m_7CCK*wHBVEJ;BF3-7v2}y^oZ+oi1thYb-HOf>Puo<0CQ62 z^oC)Yq@a<$cTebZ>*sZ`bWFq~88bs)!l6_aDFRT0DfKu9{`ATilDZA9p`8mx(~0vl zMV+HjWQlL4dE_no!RRVk*E?7wh5vzI+5?qgG1kI5b6*lG4|jenZp;Ekq@LC)3cNy> zO&U}zttyOrBOZl2&hd6@xJ$PZ_EzvQUHS^DMV9Y*`_pM01XJ22;r95(2zJTjV5orE z#Iz@Ybk4#V?yQ5A)dun0d|~vYHctr zycr(RD+(b(pV&bd7O3WEmd07YvPoO=o28V(bK{t;?%d!JQg1fKWnh;w@%~Vb~uuSb%uWRupL?!J5ub07IxT1yXkcpfgdnBF-s#` zDLezf%FJoVp>@AOlg%*$SOFJ5(>L-2;6GM;vyxKWDx2X7TC-}YTIA&Tt@PMGHgv`+ zY8X>dUBq>}L%nVeW$C+);4rXA`wM29wrhuu{rp8VXehh2lV$;akS;(R*g`d%rP*9D zd@*X}zu*{sN>;^1S!c-G3g_`T*e>qBp>inx(K0ohDeB&;Qn@_`;Yg(}jcn$~!F z{+Z?j`Fl}jt8eDSOilZP2QX1dKDiCKW zFpHs(BM+WxEXnVUE0rAH9OQJOc$cS|q?8s<nlX(2gl|l)3R##}_BoLlXIMOR7DD z?j4a?SBPjGIcV~NBZQ0)uNz#oMHb0|ED213?uayRCn9Q=3u2&8jA)f46J-<$NvZj{ zm4v*wOpi)aI!lFCt=+C$28M5&hDTQJQ0gq^4k&QVh?X(MDkZI9eznvNyN2v4vZOsY zb_urXP}i_`E@6+$;#-9{aQm~+gON%5AAxL`;ZAL(y2d!07q!D6{PKeddnskHIU3?s znP97$AeDECeFpT6-uwGuI7u{Hl4O$m^>UaIqc{Enva)*ud=8VlnBbVU>eg}H5HY^u z=7?iK%SzhA_f%OGv-3Grki8}0$eoeEnl2vfNw4`$_GUN7B*mDr0Aen@7v{70oZV4J z7x`QcDlm*b%wAc!1HVU?7JUc#GvUgWnvyywVxti!@@?n`!yN z?&yS1awxj^YLH)J{Wc7t;c+Juiw&5{0VG15vMA08>|R5^`+R7_n7g`c%g;EQUy>Zgn+^ku2j5|@8wKES(fSu& zT3HqY94x_g8vd%U1UrmVla|3S~*TILm= zXK}f6CL+*gli2B+AkQnEUEx}t+tm-po&`BvDes7J6B`BL$4sKsn!;jAGx-yLP#0uU zkv8NTN`A=6zbct<7AKw5e%pRK~7@j&TMAnYJfJ|;z8RI{eb{I3R*U+8E$~Y=}B=CL4rwI zjjD1+w%{N;bk0wEgtO4@TTSb9GV&l$IQ_L%LcV8IdFF4G*{|iJFUF+PcjKDDIBb=87J;1O} zBL1q4R;@mxCftU_p)}3!%)D%y9y1g?^v+e_$9mtw#;%1?n!Iw`a5XvAEX4%+Tz6rc zM<{G)3{lxYyh2|iH)&{_A6Wsr-oC!2UGPd(oS6e)nEe*Ab9?z+k)!abzniIWrUaW&%JRZ!B&;sCsx~>GKMG&V`MXIU8IhqL;mjSBHV`<6s zSJ zHj!aQf4Rx70-{3Y)_|o;I~DQ={2*zXhHki(5b<~-0+Sf^f8qwdwhx4gAw>_@_-7b%mT^vsz} z0}i2Y;e|uHx;CJ-Ce#JD(eTb}peA+=i0<&0!;ClQ`nu3(ec&5fR>DO!+Sk8JUmqez ze+SF?m&&H?gHRl_uC-|D$>h`c;nP&a3G;bJ+&oPX^C@#w?suOeH6rvL$`w|7LO~|8p zA**=6_41jj^n0GD`x*pJx@T`)pU=Y&FSM(kfD;g`Y&Y%==s|(^YvIu2%s&b-T-J&w zEDJ~mK?ii}BrttO57}FO!J}f@hAvIH-4?r6J}UHm-6q_h@>2koF~q;|MEVDWON)Jx z)ADJ|`qOKi_C-dfEKGp9uY@$?p86g_Bg^ODApynr))1m>A>2|qe+H7GwN361z2aU4oBET05_@$<>@YVJvq)a zO~4GaK1$8BF#fE<`=U0;{a%3$Yx4!#bABUZ50N(Ls!Nz5RR9OIQpJaf{iLVy0wnL7 z-V&1@ZKB%g=lMyOZl$3k%+u#Hed!rOsPCKtHGXV`R!&g-sZwgG;OD+{OnTtZONtGg zXx%wq0&W5HLFi1jF!C)h0!F-2XT(z3hE`=7PV6^VW#@UTHqkhC zDKutRf;NbSM~)yf+2e}6wvj4eQA~gjh5tsnr3o~Ot5F`@h>weWqKQ>*ZTN*L$H;i- z-!osUFY(`Ne11(!7L#N({Poz_NA(^EkK{yo{$S+h4nq^Jh|-Z7jh49OL=x9DOFQH} z?cgszr9{4)JXT=hg2`vnc%*7!%~z90 z^p!hz;?^f_%+M9H4TgwKzgm0J;1gZ;f@<}Gi|ZO_tRluV_r=L`YDiptiAEs|#gSoG;sfSq1bHtvmCS zGvQ{e1@cKqVV5OuE_WT47#?djj%M;DpUHDACn=8TtDW^^2kDxpbK$cxU|eJ}+!| zOZDrr!Sr18*Zn2U{~XBw5I_w;|9b#5n;>R`GNTFR_jc0(cj}n-)<(4d(Z8Qe^Nn)4 zu`B%1w)CR4Xtw5cwR@&1k(;?Z z1V666HMTP69w>BV?i?ZjhhV$3u)jVCYDrlTnPQQ>t6tMPn$tVT|8@S~>_7Fj%$y6H zgErsrLJRl-kJO5NQzW&bqhxzQ51JItI-+IDtq8$o7Q|;3B>r>$mjLL0*?)<|Opc+h z&{-!b2{B5_H#fm_uC+<-E^T0z*E>TRY#6p8e-@su+5n2*!k=M2M2T6RrH>*)iFa@r z9G)|wZt4vLipSiM;mf?5p-{)`dVAL%cNC5<8MU<3EB#*3RT$mck>C-BKDwsR^?j#M zAbDmnc@1X@Gqi;n*)D2XIbXhqO~kE2na9T`xP~Fi9{H=T|2_R3cn3Nry~7?@xwbr2 zN?QX0jK;R@$74J#dkxP+AY_>u?bnHWUnu%r2QElymYYg_bsB=CZc2FYSh>FSZ7-nI z5f{GISW65=d)WqgY`{!k^+#(RXqGc>9Dg#RiQ>+m;jUS}ZufdWVz+VizY-v$3nKPCc zF@Le6XO46$R-JY^FR$1b!N=33ica3vl6#Y=NR}O+JWhCo5I?7OkqS8`pIcsLa0Uh+ zx1>_oXR<7<*9F_FHn z7{9oza`V~+R?%7*8&MKTT!WXh0&|3e6nQuB^jC!uD=n!7O-rYWTcXAl79d*~nrkyP zrg$oaJtZ(xcL;o@DI$gVkAIa0KP># zT(}T{(~AXJNqlF$Z)($}yKrNMa*D(;pY|Rusn$L8P@lmc@vi;TNXklbU%zUEhXr(A z-?Nnrg^?2?7;R&oyh#Rdnp%wlCs8~xSWW7kT2b`5Im?3UIgCDNAaE#G!R_l`HC zTqcZ<){$Rl70Jgp_7kQ(xY<|1rwTyNbs5LGXf{(arsZmGOn05hDXdm`@9urnuFf?j zZCk3_4+$Rbd9=WYhvHGtS&8z7=xAE<8CAhwQv=YqaeuBBLGh=r0x5g6b*HOOFK4tz zQ?XoeU_YA5EftS#;r*VzEJXWvC}8$H{4mYzSvk#LgZ~&9%v9aD_0L!UD1FloQXlz0 zE{_jiXBxVJf$$8|FuiUsn4;*ERoC;nossNbCy{XYti7#XL{~kiqE4mwFvW&c#byj5 zQjozg^(zUcGB*)=Z(8(k8l(6F*q9sXd1B0Nmx+Ex%Z+>xg-m#`j;2_2Ni2-1wL1p- zOExO$c3cPL?_GV$l|St=gskv-mkyrbwsc9asrf94>LtAuOkenc)C#h7z{yhJ5eilf z&wM+r8onJ*;_P3gD!8q_>6TN$u*j*3c3FV;_dLv_?%k4Vh+z<7cp^79=EX&XzoG7^ z6(kDU|B)}Q#t3O>h`*unuh7BfDS{$t8+UC5#8o7?!h(q;E*FZbNOMIQOlL$zEj!lJ zU%6Yn1_zOvx=j4ioqi?FRR~j_UNq~#y@v=1x0_3uo%}dMEm(LDQ^7NlSu+Xwjk~@H z`qS~m$l;!ZUlLWg-Zp6b|5Ii8XU^fUChD#O*+y3p$nyI2M7`zlwp$-%OACkm8Ot5g zWEn2Fh?10m(MGwvk!_1|1D9!s$!R1%{~nIvlf0DFS2CJ$t)#w}3g1ttKChruY)5mT zf#Oh<0t~_!YzBArmiY;FcA2-5X;bJ+@sxOH=9`SnLZ=p2 z__casfl`E`#FR&hr`9iD(%UCnY&hL1UL2j&mr0UIl_g{YSr-_1;;B952XEpA}wxW z8AFS@1BG)_@-A-;I$+-2v~eT)8jiip}y*>9B?I%+fgFEet~_OGO{Q|en2-5Zs% zxeL@ApA~epg5aZF;lO0$03k-iSL|mB3BXx-s=F0mfFy3x6-)vxvOH7SYkNRKuZ-}? zS3BonhMQeOvN6(+2^S>--y~a97xd_Eh1rvqqn;ETX@$?iR>SN|m(Skds)lW75m60WZM7>s3Mb62YlT`dI|78FPz&!b{6ajFklo`}{tzzutw$>nLg#)0GZXzG@&zr0q_Snfa{7&wm?=g1Zks1E-SomMM= z46culz4;S4i#~xIo=PlW93=Qr8T_k*M}Ad|W1;tYrow)8pIxlRGCftIX0dZ|24yRO zFhVs!cHrQ@PNp`S_ChH#m;6MJE3;w@U~I(UHY-IisUR`rX8TwJi>K3uwi0H@t zN$%Tv-uz>GckCs|g((U)MHL0hIfx|0^kt&--Y!f)m#a$K?6+F_ujzEbJ5#XH1>)Hr zV$;_AoQ`Va}gSNq}+AMiS;f{VksSTm0p?{;34v z8&FSuUxv`(8#;_U&vV$tw+@q%loe?sxA0gbaW)+6R?TOJZ8bTR93)_TqZ-U1?AAU{ zTiQQO6fD1v@9i~+kE3Bdq9Hzde-*()bFN9+2@B^`HwXjQ>M#$aEVEoC02@-XbpV@8 zqmFMN6{%Lihtd_k2l}s444HHGDNrIE&td8_-`VX!WfXZ5g*x)1v|XLA%!$Rh>7nih z;HB)l7vphVX>zeYc|O(&vdAIy>gq((9%s+o6ujTguaDR~@0P7|Vl1|YE*z42xF2V= zL|}vOP$2fu(6q=GMgTWIlyJ(BMBy_{dw5rc=6*_uf%9$-a-AUm7e*duewaPp%TKVa-2~ zLAJKPa7~ki!g>)!@QO#%uOVtM)0K_mLj47QI7fL=?ETWq6{+a5#~;E zDy(MgcP^xX#yg~w&eb%guPoy$aZ+!!Yx3VEzSRyTIIsq*qBr)C!tZQ(g~Cj|k@`*} zg8wj-UsfhO)1(w=C!?@vn#DTU#Gx8167@b;kg*PnQjBD{KBSIicEzc8+IJ<8)PJVH z&+!%1s^8&d=h5;l@)S3egH?aYQ_@G!?EMt5-Bn0Z7>+}73h7&asOuV*yV+J>JFambj`1>|a&T}zew&avR#FMT-ha8{ zpULvlmv6W6YlX7%L{s|gQu=~-*2Zp#&NW#lvGa6=0*U@a3#FtTVv`PaXKl>0mlXKc zUi>ylVe5`Pr4Gv?`_40er&Un5N9*h4A0P!Q<*hG6RTs_MfgL_VJ$l%E`{?Jgx zj{F$~U7_hs5Ab2u3tv!bigm61;?&-!A}>;=f*dB2@#2vHHP3J)a!o zgf(Q9OS)?Lgup0IER83yi`P9!L5fs)m`r3qH1s`pFY@F@ere25p$uXf4U2jBeT*2= zO&Hjdx_^>f7#l9N3i7Cb!b%m=Fpz)F&3> z4|tk_rQ#^mXLHDyL+YM8={1vCxe{(Bg>LDA639&l!hyTjPPQB+x;PxUnpvS8`CN=< zw0Q1O0}KA}3*=Ykt8fGXz~cS17A`=bq8^JskH zsj?>}kc?Xk!$$gE|Ku{R(U|G??Xm34K#$7%H(8(Qtrs`;}3oqyu;JKlpw* zil0^BRg(XQJa8gGr9{#z`Hb#|W0Kl#-QSe6ShJAZrCT=$-iye?+To$Xa@!5TGoso& zI#!7pP~CpDxu&3@f))XYL*r*sGEVT8r%ahsI)F#~+bkKS~(tx)~28Q?UQqQ`W3vhOA-^7Hzy$E|%J_`eqq( zJSJ_!M8wcGPgq4%Atg!=B9dxCT7I^zS7@RxvY2YxE!rxe%f4AuKBX5r%VaRsN#O8D3!#r9S9etFZD$kyw?s8 zk;^fu?afQZegAujQ?Vj@ZeQ7iivgsJQ$`cWZaR`=C*2)He=Y)rV^3e4FN3q+Prgd4 zAPExli%Xm-F-?or>o0D!dcWM-q!a4{ob8*i#_ggwO@!_kVL^YX}K?##9^n1l{Mx%a~$x`J|3% zp72C2dn%$hp%|S#@0S)02$iI( zJ0*4}me?n3@wmKLyFN=&)=P?SrJf7x?9Vv@I7GgS0_zl(X1zp9x;}C0*La_&m8?k5 z9>6gVfxs~a>fVS{xu`hLiqDY%d~_7_#msrDUm?~8+}hPh;a5V#T7p+MQ%I#b*GcK0 zaRF{|j&7`#rjZP`z~pQwo@A`vu1c2K8PPJ%up1Yl_%ioWSq_+?f$XJ?mR>4H-%fYB z_d}l9udRdvS*X)D^4p;!@;JQfxrLf=Q2`BES~6f~R0+p-vi$k&fX0oeh1HUJl~N6s z#*&(`h+pz|{R|U|lxXlM1w`T+xcjv|o0;5Bw9(JXmQQ7d@w)bo+$MY%s&Qq8rmQ@y z^I7Soat?1I>|%zw>V*} zm{W8j=n@_OKr`oZ=TRRRBBPY_TP5kFFMhA!tCj=Th9>GSF6Hnu;1FND&|fh5T=H@e z%;>L{sp*8^!?@oU(eUd836-nY4LujQtN>baHrOpXB)9q6P4b@tK^hQ-YHtRj4E20e z-6d^LQ1(c0o}Jw`AEOcPzJQcVh*AFj;t|2KHE|8{qMC-;aEeU%o_B?u1{RN<)(K%x zs?#L4Lojob?Ud?2vu`(__`jVSPH-~unh6ez!RAz#n0f56d1kJRd6gv?ed1nL3Zz%p$Hl z%!%;0O*eer9(UHZbz3E-wCZtKbYMBVx8UV5g5kBkkoI|4`+VHoT~)fU7gQo}9(o0| zf?paCgEMLm4`Vski!tR^&j%`j>>3*UMTdb9(0oq2`iI2-6+wV0G`IedOn?@ZDWkXV zviTxABs1EU)p%$IbVJf+2eLH0J|lGVm@4Jt6v)$>vWm^W`z)Ch7;J)CwT#+p1t<1y zYlc#tvqaACxzdHWO{d>4<83I>sv^ zHXbb!D=D1-uh{$)k(6@;Ue!4LnK~g-RZ&^X(MbSi0e)dIfpxD=Xgw`;yAxLP#10_~ z;6LaRJ=%hv=Z7I*7i>N}mMDGS%S;C-ddcG%c?eo<{O8!1*t+smi$GK-^cAJGkC3h? zn8YyAa?uWwxZb#>;+uzAEZG~4iO!cOeMK(qKCWufET=C$1W_kJWFEv}hcQDaq#H9) zh8e>Zk7U#&QuATr(nvArA^6|w{R)&A=2AzO_~vu1A_oTuU%jR=`Ob zUvtO@n_#gFB`<~i?kG@OI_V+3!06TGinn)=b7(5=^f~34VZKgr@4A#Af`FQHV()Yk z_AjiD9l#=TEiEMNJ{g0RQgFiG_u8Mc-9V^pJFg?yeD$Cotv&)M)uiB=cH2Qgxyv<2 zW71ubs`%~oJ@GW=+l=i$>vyVeod1p(k`Fi%7LyLKFTed=oc?NvWqh*sUZyJNz zZPq3xH2tYg&*tP(`OVcmkd8D4ST>S>+Wyy;n?)%kDD73 z0ay9K)xwI%VyD*d4nB?tf?>V-mJ4TJ&Z?|PQV9aoQbC@+f!vR?A*FirGIAm&M*1Lw zVyOX1l2JAt;Oz>g2$_U8%8QsJZmx3*-WD;jbP}ksWBKY~bBCk!=#lBor<42dCbIPS zW@SW7I@J9$v~S;uF&+|?>O(bcM6zG~Dt%3bgM-VWSi<*9gRwdgSsAguhQndmD`9a8 z_Ifp4SL?bMuu6o3LoI_2-Z|_h?N)X7reN54eISGXY_!RiQipK$OOx$%6%GTbbJJ;&>8UW(W%XlB@wwU^x|47Sn!BL8@(v0)lgO6kH z>eXNu&CRZ4e5Nf;U*f~bo5@9`4_m+}HQIg`r_P~to|A>qk0J#zYI_Lrp-^Y_1NgB^ z8#N0-j>CJXoBIk%kmeCio`XRu#$JBRg3=2vx-@&DJ~007a$R@w)y0@UJ8J_Bo0m6j ztpugs#y_~>@|)rd*UV+i6p%7~q07gy7V^tPVU**C#NZ2P;#Y+(rXQCg62<0{|Mohg zi|C+ORUd|humSFvQi>f)z!4!wcdqi5LBV;8Vs6MXy-+`lTU0XHLLv#+wyqpksvVtg zkS77mcK?FQxk8wir)cx41%2CGDaI;*H);l5X9xO&3tc()PY5FX=wJw+2H4wPclAa(QNOc|PgYps#ZkMMnETw*1k(;*|kjC=4^htyMh-FN-K% zfs8r>19nphQVwYgS9~o3UA!UypCd9+9S2?Lt$r6f2R{yqh(j5+0&xYc{&9`|SLo=A z^h@J0m+=;Jf?n4aXnt9NF^dR_^Pi(tj7)(%1O5(k_2SPEp5yh6ZQgVwOfk;S#7~2D z2m)J!=Y1A~*_SJ5fwUUabC%9ArIX|tnq6@>aH$Cn9#qaUXKM`6f$~tvp&Hxv4%kWy%z-S1DeN@YE>e&Mic_&qAW+0E!DoV4irt1KzabLmmDDum( zH0WczWswdfRz(C}W(Pz#Mv?Iw;H~K=rJ!s2e$5MD#L)Cfsm^Bkq zc%iY;O)I4|~I-T$bb7B1gN1LM;Gk^UJ(IO4wxuvP~%};0fqc0-Y30WYDG* z{$J)_No?OglK-F0`h9{!KxT#)+j$>%@irVpt?qje7bek$HryW~%TXvO1t&evj6u7| zVy^fcB0q-xzCp~yEbRnRpe8n@4`&)@F-B|Aq2e z}s!kkFD3rIp$ zdXqbsaciRcxvfWJlK@s8t&AqBreTAHGFkPd2yKUBPSAV!<1RSFGfMhd@>;I&W7C_Y zN$jYVd&W2KLS zq$~lByH;O#<<1NGjQFIA@6`jWRmm1oa!xhFi4QGK4W(i(z7nq*TfEUJk<%d0^qab> z)vxGZmkP~OrI;NnyDK#3DV(`2=Yxw{Xz&^elLO4p2kcl=$1R9fri79)P@!Z0(Hr#}{ z$wct@itVS8yR+n6L$EM^XUc_YGL#;i_J*2;dZ&089bB-dSy##9l8|2MYfvKwpw?ZX z07osAHXYCQVSLKcLo74?+??#zo!SA36V~*gYb-_R)9WXwvYCqt*UG=jyRnXj2pqin z@jCb8)^jfPpIc={sBLrWw5;fh59cl*rMYvKqs!rM7ZZ=>iT8wf{ z&=Y6Fr3>|2{ur)l>EB$ijIreC*`Bea7uW)LsnQJ!tJh6nuxGdj><_T*Ps){Y!h?x- zk^Zlnu@v*7!C3 z^|Hx@s{!}Wmxn^ylm>j#8|B4Hq)uGI#~Vq72x8zqZf}YPATz`=%J7XH&g{?`)HqH6rr1$ji(!Y@iD{s6!zu=B(*?X-7UOG93oUlk8h!5wA#@3ZfU;IT?Q+C%M;inQ5}R;Wac zKIE}Ze^ykV(|x_Kf0N(T*n93~Gq5Vn95{frv*hvi zuVYrUOw1G2FyP=5N=f^lY8L;xev+1i`mOIRH-TwcF!R01BrF@@1wGJjYP$Wg#paKp zosGM@niCv+p7bn@2{cn0@m?&QjWmwd@&8ku!raI{XFD$8mR)lz;{rr4AKW8d z{#$^xk&X%K`)gHySC?o%B;{xw^Fcc9kt=m5#@JZD(?nu`;YaR4NxtyYRqZPmx$~YQvtkW>E|o#j?1n#x(pv_qmn7g zVn{F)6s9PPQxVtTg&`iMr1fZ#7d4jr_;#C^!))SJ#5Mm`C%oew@aX$?Vy4MkIABrj z!%p3keto#~J7RH*9`{;8YRk^(;@x4ED^N*-Oj8+^zz-H=_PSQ7da_}HVK!1qCirB- zNYPj)ADO%aANxpKT9fB6kRHjkgp}7YATE<^9R`LeI6s%JB1QsP+^tx&r_HYP8l4=x z)Lp-g*PuU!cc#-!eWc6mW)LZ-rx`~oxKrwW?V97%S%f59+`e5%nz8AiOdU^AgUnNk z&U{pWjJB(W+djuS8#t`GQ9RJETf9S|qcUU4t8*(PI*G%(A z%9P4Yf{aVT4^@T61F8iC^jDL8;XF%S3QYwO0>W+>^LX0S$gFqYG>o71@Z`ThmUys6 zcrFYN{Mwhu&M-BFDKu)mVDKM!FKx}ao3@d3l2tP3*=PFNyVdSqXg3S|X!GEK!P@!! zkxNSD*8+|2t&n~X8lCaE$#D3ly<}g~tqtP5(z)a;M9y^b;4aYck-%KG68eG6ZwKL7 zP89nTJ6HxVrc=-EIZZ=i1Gp|T{~~5A-_vs>Jz$yFia)!Zpj&=qV)`{8h7CYAfou0w zMK#+A>cJ`|J$^5*et`OLX%pM*Ycoh4{nIL`&y|w)-%z9}c8pcp>zEfiJ;KRA*~cUX z3MNh2AaZ`2a_qOC9wUe{l*ARd3(M)~Fh=hp6=GFe*^#YkVn%TL21(XQUUk z#$T?i{X}Wx`{q8iAHz#h&a|u-)83bcvuqIgA@_~)-W@M#?dPixxkVIG!T04pTYTXp zvNfmEY~$r-;wUhr9L=|KH!O(Sg0!(nyMY#k+3UuP-Vd8lOk8hw5u2+@x0Bw{GSzib zc50-tiKI^BV|Med`hIP|z(2H!LT9I@nH^!U=0}s4nIXXp{xpM_hZOelEPpMY#*1fi z?=&ZJ!LQW0LlI4vZg@|HvV9xzB<9WJ5d~G-5%-=|OnwaFVh;3lUw<9VYSzi+LwBR& zGj+M%ZS5O~RUjo>AY;Wuu7uyscbvrH>Qx-f4(HDM`uc`0s4lLQ`jJ7!(1}WR_~Q)3 zOt@5c^Zd&Lm&+|ITVp7d{x{#FjjH6B=}}f?l?VXPG)ldo9v%zfsY-B8!$?!<=WyN~ z>O-a9q0W|(Hq71rOXbK&qjR_60JTcX3rPP`f2CAAD8?=-S?2RYD3$+j5oM^7$YJpxShg#~=y^1qps$|$a(T--S~ zIo{GQp+%C?ajDsycl-L_&UdJ}q@~fPKTrV0DJ?yimHqNK)+N!8Frxa`#b~2BLBsS2 z-dzp$OP+a`3}mCf6(1Is1D|gnzcS@b#!?&T7di%T*j>N278Q%52p2HC*kw*dic)_X z0j9kZg~U-P(K4ki?uW^AHX@t0>VgNcIBG0(t-BJH@OQ9v##&iF z=%Tnj!L>>|GmgS!T$xJPlSQvmp8|_yR-6HgWV-)%k<6-p7s)I>GiwO+)^D$U0SS(@ zeX+O#$){%z6gM4gHdJ3m{FgziFKhhE82=+tdYgPC)0pD3B3xQbv!;pKrR;hyzmJ4p zzPeBM33BI_#}E?Frr6f{-I!pfl$N_{QaO_%4$HcHCXny{`5UP9^#`sJ{t$gBVNCg2;!uu1}6k%n{Hl_b%%9m}h8>|{{ zu5D8_$C*=U^iKdGe3b|x#fK5BqYz-KY|~G#IU4$1Gkj-RvE@O`o8#!K21$G&udC}M zfRn@8DWd`{8av%M9xa~FM~uhlC8D2l<#pNRH&ft>70|H(+_~V~2_$ZPG@HJU-OM4A ze{|`_n!qF7OTR04V(omJ+dU#aG!Wvt66}1-(3xBJj@RD>rhLl=rP-HlKC;S9@XZK_ zljU;m^alA5CHo79!t)nLxSt68kFu(?&I{+SN4}xKA5yg=Z>N~}#Ap0fR-ZkF1Vix# z%)Brb-u9u^ZqL}|74W>ht8NunF3J5b7k_d4mUDV)K68B1vqCk-=LULGK^n~33dB6D zsKc9ZzlUOD@AaR+8B4bg?(UiHZ|s3`mMOd^uk;D#Jd*4srP78+3H)_@yo(G^_<~#% z736Z2?0D^+?C!s<+{6`^V@=zb9-MjcwaD zCbq4P?M%#xJ+ZBc?TKxBV%rnjljL-M|K~YpoiFcN?}sGaRke5b-FH{6+SjhC{X*A# zRxGA^b*mmc0=cKfO!&(yttL3A$}!$9gQPCvSmN^b>|NDiJq4kwH)M8uKX>PZ15zqp zoY{oT$`OqmtWOalSP!?$KHX!x)28u{Z;(%n&Y3Ot)|1GHt# zWvhhLd$5s$d2=ha?}$f9o~jc@#-w7xWY_>2Gg*?tSId-9ih#NHtuDAhJa>mNXAR~1Nt`St@R2it1WjT^+(12|5 zwRrn=5*7yVFbhVr9*zL9>IgMv3I(JC(cwq)F^^25D^an=FXmj)!zPH1&qAJ ztXgsWq`{h~jp9nIM8EUNe7pu>*##UU(6G;TUh(c{+wNiPT$PqbbI6gJ@OJ|*GOKy_ zlDdh0Jb!&CUGiv5tB&43D_~_)ps|vivU3Lj;OV|UPV1PVoXT)0vYMErWxP)Camh#V zTDs4wA=ze=RY4mQrgMe06$=F+gF1`EOC=>7OGiYBZYQ1P&DAjpC<>#6OG#$%Ov$Xk zqoRdtGh}9Xq)|ffp)<__DjYq~Ll(P0EeACv@)eltPnb`Zc4shnzJ>4~WH@Auv*$WB za!P}abhg~wNsW^ySqitaMhMN3r96`}0wRF9GAT5mW2L9XUCyOt-D1G-zZVZ2mk+Fp z6>Ud4m^?=M3O;Wu>3N>BcDQSlb%psiFGnf>ps)WbOtK6tYjK?dHmMQjqEbm@@}0&{ zdM?(nKnvkOg3eh>A8g>`pi)s0h$%xV;*Dq|-E8i2vXw8W9Su2efpRS4`2W@ti{t^t z0pwrhna9(7GMDimiGmzd_}nKE%D|>ZuzRlLXeo@$;JOAB%Q}CVXyOH4YNGZ9IHVIH zdkAEp1G9mNM4cTv3v}f<(rYj%I~8{SYJU#&A})oCgGvdyu`U`niq`MI-lA*=J#R@0 zOaD2R_&xk+zsVzJd%n54bhB}5icZTN9n*=PiZlJ~U@!>v3{r*xj1tRkuG+EtCk0j@ zTGTKCoJ};aD(Fl=$jw|sS=%@d^JgB)--%Wg_kL~pWv52b!3OUG>Fc`Gzj9R6E4Myv zr%2JOz}C0q3;8448Z9(CEY3D&z(yeAyv+4yu)kwGw^?(at`Z#egxk}Ys7ML?ix$_0 zD4L>VU`8Ak$#%=i?0cptNC`qXpxE3Xv`i^_6JVq&(PTuq{bVxrBr?h(Z#zc`4+t7_ zbs>OwvUw=%UL!5vk03i&+@V&(Dz9dmUNp?25@Vc*Hz3XtDr1d+zKBCr@t>k>m_;VW zxBzc}f+IBIe~R+|J3=OAmpT?u-lt@xnISSHHhM8@gAfvbclL-9Ar2``LJ|=W|CWc% zLbXc>8CC&oK@#2%nOJ7flOF62>{R3-_0_4U{_MlqGg+2D2idG9MqUj+nfSc~F<jXcnoO1U`QvL*#YB zw(2MlT<|ISfu|2?w z*5tXQYbtp6Jyz35)6`+hxRRJ^hrOK6@?GDnrJGg1R2@9K#Vuryzm8 zM&X>l<53|<=2Gf5O87;B{|^44_!}%VECT9i9e6b>RU*`~l{m@DBn5Dl*Tj%?%? zW%nR)dkqJybd3lWsQ>kYuxjz?swv`{NH3j8ru@j zRzoZ3xZZeQTYP9%V(oT8y)!z#Aregg4?x_S!b2DKXIZy#*89Mgra|9~pS33LX0!?5~R6_rXPe=$Npb(NKFGr1Xy4ZPaaQ^ zCz)8(j2THs%_Sqfd5}qBAXGFYLIxHq>isd9eZWJOXuU@|Eq=!A86OTp!R+WT`Pc!8 zEAx-CI#DU{+N&=gRa~fo*0AVMLQqlF5?4Ng5`SAZSxXMK6O|JqahYRjF-X`2_6SQS}2u*#Ve`+uZtWp9WU6%tU9ZODF@K2*paFJUmm0ig`jJ%vtwH12#y+ zWiWmi4%+UV!l6U9fL~^C;1U~^I&ZbVd7 zKj^c?8rEJxK=LvvbNQJiCIr!iapN;`4-gmmf?nc`tWhrs{y`A)R7ti$PF4@d44h6; z2i4TzeaJ9wQ&Y(FI#QUHT!x>~E6Qq0z(VNsbaL3}Z$_~OP*^+J9he8%e2}9cZ*vp9 zV4W_dFw5|kO%@EjeD3tXpU5L%8}a5L(Kwhc2nJP-h1KUNY@0Dq|AzRrDJAWl4^WCZG`=>p2PQ~8n@7+wt+}uFdSHZa1!db3k zAF;Z3iZ2*_fQhEuoc$_0;VsZNe}>OE)V@>gF6(y;p^=L`$T4va(&f#(nWczxMi*sv zA<*=`y^9*4!`piDGxNN^e_(p$Rsk!iUr|T1!K!aERL|nh;r|ym0(%G-3+F$L(b>qO zRC^OD2MB5(7WD*=@y4r0oy*%9b&=tEd;45ewRgog$A0q`6k`7Xtc!*SOv@l?dHX1+ zbj4d!SAdr**2gsTa^k%(SQVlLa|~1UQv@H_z@So7@`rpLf4&ocz6pI^>~DYE^?WXW zzJ7kZ3w^Bn|C|1No&J32`MmgieXZ&Fn9ddYi2FS5d4KbNkMsY$`h5BPSRZ*%*#>r)E&e69Jo@typ9Fx=mN<2x|?`SvFURl_hMS3lXXRl_$=G)^X{r=fXIKRXSF)P|D${B zpYP}F=kRHv;1d4B-Rm{i-=pViuFvNzf7`putH+V{tB;3=<0}VSp?C5v+wR|u&6xKEHF><_>U2taF8ECOj{*);+9rtcAf37tCa=HDn@9e-o_mMT{@sv9f)-&)p zVtZA45!W()w!dkmof~+e@K?v5Y~9BtYw6$J6IVy`xoMYbkKjMV=R<$Nf$e`UcU9eW z8?XG84p}C?Ig9RpPp7xH|300OZ$Td4j5IsA{SmTzI?8>To_{^+ea`J5-RgTY?Q;M0 z@#&1h{1~~|3Vdta%&fi>YVO$j_jGgIY2Yw3l>2RGbCFZ%pF&xLkp0uJbDiK;NZWOs z4>Y6TBmTfpZt(MF|7UQUyZ`UF7mH2L_lP8ikAKIl1`Zmj{(6^QE(N#Khp!e^ZGw+{ zj=6!CQ@Ni9f>KVLg(Aar~lH2xlAfy2$=Y1@koY+mr&?CsrTISW!_Z#r~euf5ojdHF3nl==>pQB zGesYm3`|q5Ey8;1!qn>v9w)rd$B+GEPsGeV$2&YudfCqC1?991|MrJF%xE0K%(Qx3 zcHSBl_62i;af`CkPRXhCdQaSPOw-Wo`OJqmOi*1`lh!?M`awk8ZetD_5EG78pCH=Z zL!Cm*qtFl4DjI?4i7uU<>0IlF9UU=@v$th3GD(+&1du`Nc+eqhWxro9Z`kkq0 zn;1KAN(_uqwW+nyPj~@x)72uaspvPO8Nve9S zP~$?S^07?ad!a(WdXcEfI!@<5@zS}9&0`sd_rfm$>nWlpi#VMIsp{3j|A}3_7up4^ zH;J0;<8)f2s@DsbE>zAQ%l;=GAZjv>TdS3_TPfr`SHXWQL-bw<6|nxFxKYY(t&sCV zCG)XN!F!=Zzsg{E%Q&6J|08Z#h8i=#r|`CmKW`GL|9|^r%O>cl@ANa`d--P%@PEvQ z|0nZ5e<94tbL#g&-|o#foYwvqf)Z^C(8PBVPiQcGr=PvU>sOM=*8!rmikQu$oFucz zXznCK%&=L}r|)AZdD=8Fi3DutAzM~fXvME8r%1(=Eewn)aYW_Sv?0&Bx1~$ouxA75 z?6Q@++M*Q{L1=<7(lMy7u%65K9ZgcFiafnY&wc&zk@@l_L9$N!xM+_iU0LvnX@@N zPAK_j9_Lq8{RY}7bz0nHT1A_*M(rkq+CgkNI@fBCi__`ON>(yVvb&i;V>hg>vV4_WRP|H|6vbynv7QSS7_HT>t_ ztL`%OUrC1`?qCD_Cn=uRhh+?Y4mTKm&3ym&>JH*H${!E#n_@3$?cBOgK}*c#T`^}a z`(6~T0*UQ@5GmZAV5{o5ZDQ zc-|P_tDTOC8E*HUPX?eiuw~ek&9CQ|1am}{{LK#lw}3=9;%lWf9_%4 zlA-GL!V2jR!;p`MmK;CJw3&C|zgykGOn;W{@*d=@9rj;0T8U*g5e10?i?ws-B4zU6u?E?%*qxn#z*$Wpv}u zp-C~%-F}*xUQ zzW!K^@pZnRqVVH3(&|C9G5j?xN8^YC_CI$LU8_Vc<~&V^hfEArz@Xy>=y>4fLPYq* zw}O_(KOTaY*V&1*6Bqd-RB!Q~W&2wbyvNkB_k1k9!?qXiVtd&U5FhURpL=t!_jPY# zzwXUE^AG0TiM7JY2fMhFd{;dl5?*}rdvs?(oYN*(AEJ2lY6IOT!X{ypz3IkO{zmX$ zTOX!y@h=df6ARzCNO0#a@*~6Q=61d@oxXQbe+JGYJHBF-ii)Rlj|AMkY{mfw$YfutthIZz_#^4vz~ zS3UEZ!Rz=j!z+V*WsOaRvnWkLN%6TtCu@MYQW@L(nuk#f)iK zdtw1H5lPB>kx#0jO-~XmMT0UlPDA)~p=ft+{3*%Yu#~^k$?bu5$LcZ>4M01Yy->9I z65WcTL2aPnhNoD>%WjLTPF4t(=41|6WBN)-BHH)-L65Q|L`p^e?JqM{qBAp~Syzs% zY*q-`ehI){1LiH%>OYk|y}4KfdC%aybX3EPN$VOCD-M8SlIbPhz%l)j7O!{c;!y0);^_cIxTL}plL;<`NN3wW{ez11_?yi z`6D=6$tD@x$ZWLEsFBe(3al6z+cP#rqY^Z1!(2nWPQ`sE|Mv+Tt)(OHi4&?O@Oy?e z4V#eF&>Oxw4V(S68oMGj4&ZDN=#oqH+0p;0v7J zN+P{Dq!TKY&C1R|Bv78@=t4;)ev2kRm*C(<**lx$-jh9v;0;Tbz~h+#FandVUw@zCEqD19hW&{+SxM0AWF4QP&A_O zm-R@I^Nwz~=dijCJ9@@+GRHQQ=*~Mg=)M(JASYd7zUnTUYm(w?M(U$k9P3Gk6h**3 z)dEff=C7fVf1~`wlEB&1YiAGyj=o<|oj9R;MdSBxBE(t!_7H1@mk0%rXnk{`M;eGH zatGRVtXDs$D@(_8D4UisfMIe!{Z3l&NW^o`A8w79N8~8Eul)A%tXaltzxP8d1~;U! zHR=Ls67q}+e}3_}cZ^M8Cjif#UM9pX8LZst3JgkBpMkUFY%YsrB`lz?5kD%%3OURL zzk}PNEpDYc8;%HH@CSM+!xL^t{-93>e>@s;9cBb}QCR+9(nx5dN4S7^Cz${PqXo{~ z9x3N13%WUuj(prNGer{|lVv2j5u=dBi{Lx?1U%&YVXbpxtxEni(deQfF-z7|ZyYS# zc`OqOMk3Luy5!+nEKdeRs~Z%Z=%H_+`9t?5va$c!89Zl(VzI-~-eAZ^bA6Nm-vt0i zCZbf?WU?wf6%8Hk2Y29jqGa(!HxWKfypK2f5Sba z=9Nvnu&7zw{!AORS-f1h&@@PlCa>Ew!&f1&!!-G#^j$1HUq6&~kYE+h>NWu7!)yPy)`B zIkC2k#bIh`&Wm7BQ*!1xXM_C&_=Hbxzs@Wac%A)3gJcyfX0>Yn=%Rfqom%p7FmB2^ z?{1-HmJ4tcb;uK{;kPT{&cIYLL8tMwD^bY?ab`WEivi6@?1*BQ;xjnp7Pr@6GN zB*C*X=D8P1gFml>#)iWK-Im#pm{2B%SR=l;ac>2#TT)6t%>}Qb_IjE30}bUZd|AOv zHnG0@;ZFZ6aQ%y&=4lEv^}~&OFL1q-TJ~bgeUosyPP^G*)}i)~cpGkKjQwCEdY3pm zk3*h+IcJU>=!p*VpXGgzI!}InW{$k;i9YtvL4TMW@t<3|ex43XL`>cjNSpR~rM|#a z`pjZk46xeTf1fP%pZj}rKMgyNn7%uOHtO?_Is!ZnsCGdP8u9;a76crh=nEVVi;kFn zFr_^T98ZhzHGVaK_Rm7tWSD;<)XnvD7yvQ(NFi_3=bk#F(N$=W7EZV0DeZOerleHRV_pP0Nq9q*x99mZcacV9U z-Om&(Rt&ExW9I2hkZrETg3u|*yOS7J#urE0 z^!^lgIu1AA+s@6c=|_5k=^{VH@+-*HI!4CUN)O)u4DlVcV^`D!KcZF8ZDHUXXZPM7 z%J=@O-bmd@+_SktSI{r3d(BN#R=Am>QTv?rfdd3Ig|)|{d0%ckiB2sdcLkqDMoA8- zXuaLSar++8I;0`-AJsV!Yf9asS<~d;9b3|gE_xSLp@bnTto18-zn1*N`8ScKtcnUJ zr2CUhy>nzt7Eb5wj|pZ>dZ2fd*^$SaGP}7nnoGnlvY!>0GR>BMjA}ImXH9~m=u(TE zcxT+k#@**Geoh4!nl}x08q`|=d!I^>N*XzlSkse7thzTn0ls}ehBCq}2f9Ne+nY1g z85-bf9Wa1qY;Vt=oLyGN^>FjXk(FC@Qe6HD>VU51nXWesBkTS_g=c|BB0ay*{(b?uyUN+ndtj|3TOwSm8l|IC=LxRv8L z=-g3^RIdvv4~&QEO6gm}0+gMQht6&|5p_nVDB1`|2mPQ>z{qbO{EY9p$d`T8~0Q2Ovngo*EtYmp|;&jv3<{eos z#wjlBq8N)}(Uwbdfr~~4wr1-*7?U+X9m8pgM!aI~x0SQY0PKa%8iOp)%x6NXc%W*F z%>JU+g2_gGJEkBff8f$D4o>CCEMTU1ki?gpK6)HH1|@&9l|7m@O5LKwnlKHkikN=X z^)rDdPRYK{geVui1fONVJBi$dD0c&=k6(~_a$~@VDECZM`iNh!jrOOfk7BxIFU3_? z;-r<2i4uh=UM@NnKFg4|0Hq59NsG9}!@#*i+s@nkb5TKfFO+q0ilf4>ws>2GxM+4O zbTPB<;P3hT&I$nz!FSBfoGcu}?WJaZs==II;ssnRw6YYM$gBmN3wyIL7OPrMnRLli zSmZMI3ggdI+=6PfB~|3r+9wC%c9ndUagF>|JO-6}C1Sec6TAnBH*^ahqPu{f2 z!>d;F<(xyCdE(9|&X8I-#qM#d43!7%+tT^h9CJsC7m>&P87hw|MjejVO0Qg@_cnEx zPb#f*;0`!T`OhL4va3>U+;Bjzk=mUJ?=q`;^Tkk<-N`mcs6sZtv@E4PEAxB=KOjx z48LYtKH+#cxP3GIK&`j#@M08pXNRQ84a1y;cG6i)YkPGS3AN^u^AF*1=JYDpKoiyh zb==JUQ|S$b)ws}eJN}w_&Z4m4^J@CXSgg%&){|W7TuJy17B^zXMh7b;wS+|pLD((7 zEo*HIcv=-g{@n2CQ?s1gxU=D$1-1^N8j?Mgy>JsWT}B}819pY?ITxC8zAeX|8gG5V zuvNqg&~`&LHCM6{)9JWF`cC}GXe9wF@9;3wR5KCv`a3ir?*mU6`9?0>IZD-Kee(?v z;Mx(K=H()zfJy*zG6_jb@0nhAK}$c-ig8eU-^pp%&J+RrnwH?5I8uig(qv`&(SZ z+lBkqc@)!adodg`qP{G0zAO~et$V*YG)4D6xrqN1?t23Y?0XU1XJftu)?WgHthSLp zc;4T8gdxm-&9tT1UX2StlR7zs;kIYS>PgHW2hQap?jsmx&CC2HK=RU-2vz5%4qNkE zq=qw+x#lxP{b}OrYn(l$WK24KFPyWTs+R)Ss^}ZV9ikd?;zEKf7;webI~Zz6-J?~|7~q9ej7x7a^|iz41L6hwV}aQ9`^%BkvpDD!RfET$ z?zP>s0I9$EW1E4fc6mUlrmDyJM@2I@@=4lNj%Fx#r0&?k4}=@lADJ<>cRDtoM!jcb zto^a;-WOA@o(=6Pz7gRQA$Fk?LlBZVuAGLfVhur7>DI3HD8-4hUjp;HGB=@>w=5ha zc8uamyV{>v*TV-~OdBch96Z+H%(Bw4XqCFB42%zn&}_KnK7D1!ou#fHkK^><(^c^= z?}XXim)*QCQOlWoN4zu)k$N1+?r}P(jn5F* z)agg32n=dHMyp@iJYX{(jugK*R~p=+5!^}?_irV*BQrZ2$- zzg>-eQUO`B#AnDNe;I~TM`^~^hTImz9y5*VY+~K#1pZ3(iOFii`vASiL0Riv^MehASz%4xBi?F)I zndidcxANWlCj}6;^4u4-8GQn~M@JY7i7gC&KfuM2iV4y{cR}8>X&1XnbL|6S1o-O} z{l5PxLcxF&_e_pSf&CR<1tw61C?7|QGym{t;FKt?Vyv1htu16W6KbaZY8+!!qF{VQ z!^Tc3lPo^77O1GI9Q%u%MYo;~3bkXXRysMit*uU6+X<5PlQu?KU8v zEi1uo5I_^TEs}o#cceq!XAV*sjf#)lQH1e`Pp4M;qt;n-C}{Vd=8bk4XO~6$91wZ$ zKzshAIu3o<6KowRB%YuAo{V?tRR5@I9lymE^6m%MgQMYj*}kWr;FH|6VD3B$z66M* z<6!LO3VDy^?&;9OgXO?5j1g6kD05N`RKJg~{$R-A4{3Aw+)XwRRTwf2+7mbLIJ!k) z@znq=2NeD|w)#|7%5R^0PHR!VEzUV>V3AT;U2n^xiB5j`P*mykij;ioe%(w{RzZam z%q-|Xpt0N8CVK6TES_a&ag0pNH5Cc_RaLKfK&AOJR%Zw1G_{}}Ik<88r3G3{Z-Esn zWG%2$Rn4u$Ma(~IQp(9$byPrOXs@qCRc(}2iQ>#mV_{si?qvl72`W`VWw&EvHj}#Y z`p;egHdd@Y>HQlYZ^)*vt22(2rpj+YLo%hQiOoVzef!uRR!lcBeL0bbt1@ERXDq}j z@B$d5XZ(frB1!);>oLp^#<)Kel#-%%@-mdvMd8W(=Z$JJsOB~SJ_#y-B{CbczyqB} zM&|8s=WmeCH*|9v&b9luuL{Xv$N1wbfjU^H6Y$)Lnb!dRIVES079E7wzK)AgmJ=QV zh9*1&RVQdvX$l@N(C)6^@zNJu$xVnuvzixBN((ph39yOemz4uXKY3Bd*22aOm733v zw!l))>fCfDp1rcwx&C4S6_$t3PPB29(anwbF6*{lTg}>VW-=X}lR||jlv47II;}Ie zZxIB`V$|lI$X^Q`KlkG6!#6s0OQM}g0VKi1eXpM4 z>n3lfhPEAYAmn@nYwRo`HS1APp^)37PG3IdVVFcafzH!Ua!Kv%^WWl0%4+;pJocL4 z37tpq3#G2sIn6!Eq_~Mc(RqeE$e_p3#aL3!X8chpf(e%FJONWUsWesm^GNDGvU|<~ zwIs4d49IjeVzP^cC^m$B?@V&0O44ZRAxbJ_ZSk!HDvbZ4sxfR7`rnD*)%o+!<0+U{ z4GmDhCW^9!ly;iUG(;%JA%Vel$|%_m%AADWgVFFK$JqWB0@Nlq_u##M+`F4FJxBx*Ea--zeP?ks* z#j$p&+DBhhxm^pR?PLz;ZUMXcD`TVs7iQE`V_%NfOGZkg?g^ip^&dkh77!W#FIwwT}_#Ak4T$WXC?smqLQgnJh zJk56tP+x(-)DHwEo@mY7ThO^@G#(p+OQNQ8Pf4e8x1yoxG8@@)VXgTfFD>eS6N!Nw zd6rJB)^;l3LTZhBk^f%VnAIcVX87e)+hB3~`4gy}BYn8Y#@Js39VAuYAVpah8~@$c z{?+X!)7oK*a;?*Fi{A&}$Zh$z)0^rKCg*CN43L#1_~8M7-qc*on_85U0Q3UC0^wQ) z$a;#l=v$ZhFlq=bYcrWw9L$8OcWR`LR5tBIl3`31a!3lP-WIj-#0arM^29pOA)EMO zjnu|Fry+04@iEjvhQsbl*iY-$cM{$9#WPE68 zS)NH*jRgPwB`1Z^XQW3q;uchq(=qbNbFF^}q~cuTVL%PM#M7{i(FfWvd6)JXtmMBX z(VLe2?!;5UhhiT#OE!xOyy^|C{BmYTio<49KOd%H?~gC=YRkQ>_SrQ^-Y9>DD8Z)2 z=N@{4a6FuNELc$-;sOr)qAAjX>9-rO)!nTB`lY`I4PJ}tgm5dB!)6JyCTXLkKb>Hu zeao>5gJY!h3WVj1pV!9tNbmA$aT7=!%3lGa0@l6NpqMaLJoWGN;& zI)H3F=jV%M%)9hj8Ye^2R1Sq~iO7vw^^HLu*lEjh$9&C$^p8=-tnkUl|3_ zvo`TnX?Q_d|DDg$@IcGizejoU(ge#@@SRzcj>Pxn<#t7$#7c3JM)ghO@a;>?ONf%!~1b1<`r-GUZY*REUz9Razm4PU<76 z7zWU%in0+R*9$vQNthwYlmYsY;@`gjDhconC7ocDS6c!+BTzHbL1Nd)XthWU5rP`o zk6+sye3hq$f#K8zG#^Mg(4JpbMh&Ef3qJw&Z#;{uKJn`sW6;S*sKd=dv*hH9yE;mU2KnRArm z<&ven%4awz;tycJo^?7X;^AcczDNg;AzNjL4NFnra*5PXpNR<;t*nkLu?})bZe9yf zE)H>Sr|Q+0V0d8#!6ue4p(JE*VBzUeCw~FWA&Pt=XdQj$U@^T7QC2>N z0w6khaTnc&_?OFSiBAC8HJlCmx*T4zsiS%j0AXEt>K8@Ox@zLdiD%j!%dC#)u+L{) z0UDIam}gK) z#@w4){+p3-Tt`N>(qpgYRdM!y!=pi#?M?udt|Bihf>k{QywBVgtSWG=vn{J`4StOD zE2CR)({jfzO+sdVVTCts_$DY)62V^p?;h zxHUEG?!$Do{xIQbxHM-*?;#Yy$E_E=0g+Sy_K>2_ftq$mp*{+G$EwlDUCsDjP4^q@ z&}tk<-6+{?ky}qYM6Ad+W#E?w(C9a9EObbsTzXVjpT4d+(yGS_Z81N(Y&6F%53DhZcD8m!)A zF!&)p;SLIce~!WUjnw(8?nSrueCN9ljP=VBo4-j+iCr(zsHp|ZKC#ozqS471=7h3t z`aZ}q=NIfXh&UzJhwYFWy;jwSanJ+3Yl3L$n`Y@P8Xav8{xJ=`=%IH}J*8Tz-+vkc z&7L&yIm+Z#{5Xs04IQN@RyZ83mK{14quubF z&%)wp3xI?9SqQC}Qw8_)JVz6WNHyQ(-=76ogg4%7gkdk1Ahf`|Nm*188~{%92`uV< z{ofqCj{Ig?N{GIm!cZ+r2yEzSP`6()H(X_HsxcqRt0naR_FH)(ZjEa9VIIpDkRhB! zBWq8gna&4O$z{VpU&so9nG1J>8q}43Bwp*+RT+?z$+_fx z#mP}cR69Zxxd%7410=*NR+3&a(+R+Z7|_LNTV1)okP0+a_aadk&Ylp-<}+g8cQHwL zQ8*aoZld}h2iWIS{P&*_)?-2~+0-L+W^Knzh=lgP@@T20Fd8<-(@GHBb7ypt$es1* z9Hd$N;?gE;7vsZ+$8PNXHnVzD>Vw3Hc-WFz6Hl*=L;mO+Vz`R_~_{B^F>DZbp z0bqJHFAm9?&4uK*`tOOOF_R~o@3U2LT8#VIh^ZCzAm-I*=O>SO{Lz>QxW7}MT$|TuZW`Y1$4es>4xSPbo%5iX&j%9Sq zmGTh>(+1l6j|%y4xOjHqe>_Dx29PM9k{uGhzS$XWP-lzxy&Lakr8o2QmnyC4s8Rgb zwbkyxzL<*g?)N3+ZQguF-Wd!-m$PcT$IXhP$hS2% zc6~`H%S_oiVG^n$=t?aT_Ia&tHjF(9PL)W=EmpT?Ye*{G>SLNhKc6NR9A>GiMy*F5 z^*Sc3cz~Zla*Op08U~-po(xg$62e{}8KpGi2@h12UZi+_DyJV*qLeeYe|P)uc&SVw zE&&fPrr)pmGh)a>T%Z(EWy=FOAl7l=W&#?rlPiq$J*iya7u-DkX*mdd-J+L)CBFzr zO{cwet7}=&XNczSKIEB01^R!>3Kz=73YTdPoYz{Wy3+7_rb`bT;xc1RIRl9VC^yZj z`JFzNqV-!x>?jK!<0B%dnoZr2-uuZPhjLH1YS>pBd_Xq<@1S3LxiZ25SbAph)e{4u zO?Y{!j(Kyn#%JDuC^z~vtQ-o#y3UnJe5u#{{1A5%80p#f=3(g~E352GEuS6o{7L_E zuneGs)l(!O8CIoz7h!)j-ovsWlQSzOxi+Uv)3B%{V6mc_$WZk#%M!6E!@zhI^Gx>6 z#QjF9>l&1XuHg1DCQVXE0I6eLQuf80ry*&gfX21!aD-};r<=R5DF*ya2vtP$MV}U? zo01jSlcQt;jBD_i6g1b#Yx@-)j;W?%5(nPW6eHj(%P2DOo=l)0zQthB8O~ac&|-d3 z=i>>kU`b;dv|^l@-JNdT+Y-AYI946B>O(HOlQfw$%P_kn+L<(Jn;pOBo43V{-DPXE z4i+$k!bNE_Y1lXRf!^i_(Psd3DO`<5)1>B1aS^fW3TeJ^uv0cpGZ35iZ@=!_JPqe+ zoddYE@t*b4QaJsNYwKCa$-ZF9skv;#-} zc4iwbDgDhc#$*~B7$W>5X<8eYOLWO`IvXwEDdQjf-wWTvMtos0G4ppCw99R@RMvWX z1ipAbQj49fDmA*SmbfX6V$sJq+kI_#Y?0M^fM+e)iR;Hj9|E@dq=d06$z@j4#(Ah8 z_jh(aUDHRsFSz<6>)9L0{73U+>S%j$&qWmnhntiB0km%@2zy$?SJ-We9{TwA%op|7 z3tVC0MyF*J$ZC2=@pBNn$F2R~ZZmfvR|;8IUQXT%sNOs^UWC$1g{uNBXx5ZiZ*5my zNJqx3ZvEL!3CAdF8QiR$C@U|GOzD{(5p=>}{S)+tER)6+be20U_q=%P6|)Z%9q>D# zE-?t_`x?7ONRX@z4vZv|CLTit zx%PDp5zIq?K@)d|&~LzpV1-6%OBop1-6HUYD{}!xf+vF$$V?_A7o8y>*$t=nPB8PL zE9=his0mfR>dr2VgI!&m++|3XNheN>^R2R}jbl)y6D^y?$3|sN7jRY{i1g;#FY9J* zF;}-y2NR(w^l!Z?`=-jJ);qJb#K5(GKkl{T;Yo1D7kO2T`r~G?+oL)Ee@aVNZjU zqmA=n-Uh&yUdk8FNO}prph5zS6WLFi=TP$2mldLCjj{uiY zUC>{JA>Yu}*d=`>a?xl=bDI4KruQr5bpTQ`P~&0OJua=GWR6%n!_7l{NbMShCK}L% zQbv(E1YdkL`nDDlQ=vY?+leqVpT|93{s2+@N8?bmIit4hegj@SBab2BsL=?J+#b@q z#v-n<+mDrWZv|Y6)&f&*WPo`H;3{QhFdU9qlkQP_@j$Sez;3?&0;_^OK%h%9Sm=&w z?`t(&XiOwBBNEq@91f?KWv$BUm|oIeo(jz&=;1_Nz>BT~0{$kI_J;d!Ny^LC*Mc-< zZKs7Y?r}el&czKn)0Kj~k-P3_<0#Ju$}a|^#wixKf!rfip(E;gGWnmz)wP8gxT}oe z!%6RoV2oj$Rj)qkc=1M-Dmo_IpW2cZsOJ|SBy!eYs?YMX+m zH|3}z$@mv~?T_q@@b%12P=mTa{QIfwc>w{*3ZK>wjd4)0IB@mvl>{VrSJpR-GzbU; znJHcYI~#re-z$ko_zqKoG9{0n+<$;|yq%h{7}!Pr(u+rlCHp=#vRRl)sAw;vXQeX} z-ClwL-r42bTtTIPt9)D%(qGn~fc&I9{fl`kYN9h7P|{-6Tyl$6FJ?nzVzO?lkgtD$ zRt!fXNjRZ|T*>cNR^X)~2ij~}QMcMSV*=;hZB6^J@gpTC?SK}qDA}>F7D>XTnq>tQlVyN-h|9L!`ezc{5zcc{mJsH=*&V%z94q4ZGP)`o0 zlNeS!Wvsw(c8Vh~F!wzCkqib5!8nZ^U4~@Is4%v45_~J{ldbc1h9glOe}wMFU>ZMp zWN!g;A#gUd>i&$vhCHc5xE`EHW_Txq=@4AJnV1#&L^0inHwzcy*TE z5Wdpb2Q(!j2h>BVp^R39_9ajl=Ev=QXwpAGlJFoL`wqfx5~Dxooj*W$!S1Y;sc# z0OKm-3Fs&(^L;%&GU}KP@aKietPoN`YDVe?mXtCMSx>GA`05K^+C_}37y#{4&3Gn4 zRaq&<$>v>mvT@87I4Cf`JITamH`?q@`S5ejBT+YR*1;mhAP)X0Cq8(Hu|4k6{-uwh~V*r?@qKZ z^G-Q$3hBdf(lf(9N7sV)SmJ5()M!G*VWiV*omnG3QunX5iBCEJ^)Zv5!Tey!(!cc` zH7&1|kj)0_7P|M03!Sk$sVSyQNX|gaPscaRzZKXL@-l`tCdaH|3)-q(fdPFCmPcJ8VY--bcKlHtvM5Zt5pyXl5 zHM60K!Vok#HfAvr*)x$*hzX%o)9=>5^~}L5f8nq{C?nMmPB1By^0Z`;lzKe#wWI(s z?$N8eX-4v1hWbl#Rb{QNGr4Gum2a5Tbr5&Aekle$=VzqNoSKGrX!Nw*?>RK)QZUVn zPK{NBq<=_^mJJ^T~!K>b#bErjVSW?@-14VHzu)_qMRXr1IMBOVJHOL9)C@s+U1HepZWCbylcs4!{LLkV-*9NH~KqX4#CN;8Z+DKnW?SWYcQ)Ev!2`he;9km_{y86 zYc!eIb|$uM+s?$v#I`-LZQHiZ2`9E~TW8O8-RC^deSYtU_v7x3-c?;|)#~nlcRAf+ zf<2OglTrw#CB6D@-`lNw%^2<%_8_yy3wtY{!t_VumWHb8#(wwF>yAeq2>=v>iA7AJ zZ5I-XE{mYSW3zozk%IZgO(?2f1eTWNhL9WDZ_wK_N+D$~$dY+L?inHYTF9X{kRP_OhTu6A-!%bU*5PNE5M! zY7Z1`DJ)%+4M!E9z}L1>Npcm7k7)6#n~N|>ah*U}I`>1vo=wsW+|?bZH48`DYPG); zP=T-_{3-?xG;YZkja4})uqXAS7{P(Db@$5$bGn*ThcTHd%NpN|Ol?h*kF5{-+jM4J z-`-|52?>_^092|e(0XO2`s)Ds%`1pMyg$zR5hT|Jc%$8#HW|xo#=5V=5f5mRR{^2L zMhhp^sg8iAoflMr2PhoOn$T_}yR+Vf+wBpvIviwW*~LKz+mR!Zwu zbY4A`alB0aw!3IMtyGgC&+@O3UD*$UORbM%FC$yPUYCrrJvl|95+{<)f^ND>Kbnh$~XSTdZKlcja-2#>XP>9E$ULq#8xmnW*X+vUISq|7AqLaRw@Wxb5W1+^}Bv? z5se<n`mS$NLS`R-)U8rM=oA4hpYamQ%-vv+DP%%84_!$=IZKG zQc}%)t>Tvg23i&wkZh!Lu`_^sd#|UjS~k)1o|LXEc6;>9Ppl+bh8miwpA8pEjP5y) zpl*KIN!Bwk2Zr!!rdUAJC($nqSJjR4{31*iS_XsAB|KjnN3YN&dYKBUo>M_ZMy;lJ zKhajVuk`%Vv-p-3qor~SLlzQN#azSv>sUMC<3hOXRAT2O> z;-s{KwbDwY3fg|}>%gdxA?!F$igNss3P@&ChOT;9Ji`$`6zM8EMXSrF0jUg7xw*s` zO;Hk-0+7p!+upPUd8i{u-|6zlFk7>ri7g@C*3Ey7KX?T~?gI#?5Zv+XCXdokBP(6FM@ewj2g_e5 z@$$EBEzRUPcw9sp8bPR7F4Yl4Cq)nx+-jBSez=fMfae*Y3PZvq7N^j_e)3N6iaIS@ z{av5W(~HrU|Ms2c`vnhgjaFNyzrhis{!wJ35WLZ=0~vue=V8v8_M9Wois9y(Wz17^ z0bpS#g@YG;fMl=h!fXL{KeUvdTF2Z~y^T5@P?<9MPG1MLB00LLqf=nxTfaA!rJt}o zwrjN{V!}jXHiW<&kW?$ZVU_i9UgZ=TaK3uQJu1Sle6YYbrp0=)dW@ZLAjL{$k1=wI z6`_7!aZ6d@w)ZTUZz6SKCuMj*sxZfk))oFZ2v7NI{&GtHWWTDl#ZOdM>ltf7X>&Xv zSrCe?cI#r;8BI$1G1_O^5tPDKasLiyT-aC>(VK zz%xw1kr4h;6`hP{Bk?y1kvO=v;<0A#n)yO)EizK9`+=*969%J_xAv5tF+vS$=3Byv z=3o^;>N;hau&kXwN%d9b$X*ToDM<6$r{an*ZJF&1iTDBqAHvz%if z$|$l=k|nh+oLKS=e&`zs8;qzvs$z04?1ZX}RwR}`w|NF9>R@Ir_xGH%l!iM680&@A zmDK(Po9qn$Y-4mX@HI2_F8U6!a!r_|SjyT^SAb0DbuBA8_6iePRK`{Xx8J1~MCje1>Xv`6Q@) z=qSZIZaDk&)Y7I-Bu?!5oI_D6N$k3gL-R-4@KjOv@=c0G<5h*0PZ%0n-FAa$+1#?? z`rj1~A2exw%iO(u6zt#xV%h=y;O`aN;h`ijTIYOSbK~C;9253A+ zzFqZzd4B_7|H~b)|CKO;&Wp)J)Fzt!7iZQUUb;GB)>Nn=tHr21fi(gC>JRV{$UYc~ z4Y2F*r`E~^f+|gi;ozM4bh1#Xf4H=i0J1Tk6oLH)Z6ZIBE0R5jq6z-yR{>2AZzTd} zIek8=<}?(WYk8e>Q>>w!=i(_RU@zEt$WLMloYi>Usd5N8tfU-sKY`k)MAh)9oPIzB z&f~YjV72-KM2f(#t4(Uqcy1yMEj8R<2Q~_ziyz;RN2CAH$M8ZqRepfEWap@nYR3xJ z-APkJq&ql(GLd37dtsdkILbx?IcNaNwqAfGe6M;9=9?%>x3~iGw*wGS5-Tql-~3&?^2(AP5>L_h*c$a7uNg(bS`Ijqw8S*m*Td zGNh6EzArkvlc{2!&`;PW)SicPFQDhpZ9mCmeh zHs{*HvugM17Ecyyjp^i_;++c#EL=MZPqzB5q9LA>>7CPJr%mf+BvuaPAnz{U@v~^< z=5-Su9A`7X-DdaUgF?F3V)ys3f&1C$W8;ktH#}Fh%0KeCU)Z4>eP4&6I@>(E`e)*~ z6D9#k;kN=@`(G{nJ!M3S(Ay3Rbr%S6X2)0J=@*N1*D=f6Vjl-C_#bUQ1nj=AFX7Xi zH~ZXzoW26v^n2#*qC-=m^crj8D`_plZ%M==ZB}5INAn{8$g>&<)+}b?HsPB~sOjRL z?u7Bmdcjf2acgCSB!$!N3Nz=YQ&0oBbnW=%@%(MI%<4H_8^6oWghOAoYby(TU=pp> z$hHDjf6_ap@i8jJAbRmB3Zw-&==LhVbBB6*N3qT2#i-2{mR-BW=VU0piq{Fq{5u1_ zdVcNC`GDzs*6+{TcDvgh(=4YNcXo?BIjk|_lSgq3JS%(}hhemjKC@i(DYG$R8!J4v z$Cr_~IU0k!`xg|86U_Lc_00HDe?7n5efXk~?zZTI7d8OP9D`{Ro#6Kb2KxZ|Rx=Zd z@@~7i3??W18PyeBv!n!4?Mz93zH{Kv+HcZTtHyz4MCk8rg12!LeZIB&1=maig z8?%ccS|%hT#CGi^)$~}wT_NpY?v2j;f_RJVk)@|*&$B5M+KDgn(kbc^i_!k>fG)G- z!&2n__piYH7m?QY6I7i9#uzbIFQljqzFD1VK>CwKeG*RXAkpAy4c!*_F3bEMPUP9V#a@+E<1 zmgT~JDXI=I-1fet&H4Go%4F~VHObh~Yd+djx0KuZPC@}u#N!Dsc?UJ-rE!&w;Zb7V zro7qQlC#SVR*JeAd;W#;ES_su@afRe#BXPaZ!!M-8nE=RB<~~e08{>!_liz6l>>^Q zniscYVpfZc&%(MwOysVMuo(TCSdLx(W6fH>UB3!Y?pV(!f4| zi9ykky?q!7Ls@MpA^nf@v3p#MxYoTSyHl8TddY?ZW@&P4*8Vyl|DIFxX!m4EJ7kHu zeS@|A!^-Jx47um?(f(4h2ndbm=7Q+hX;PFQYh#u#?66Pjs2l?j^W+&Fumzb|;OtMb zIx9Hw8=K7A1y&L_!t~XW!9;<{y09*lH`@(nau7Cdl(l;Vwt9E<^AdJVrXKdqIUyHs zdGDsTk#jp`;%pjnn)HVJ)4`vAj;2wRoSWz_avvzf{{X7kZU|niq^2;%@U+#u@Fa+F zpz?2I!*R!aZ_h^P&YNc2|+d(%*eAJwD+*_(7pq#)WtIu!<;kH>-Ko)iM*HiZYD z(QeAbIuaWZjk;s;8y!EI-5lq<%+tvn-CsvjCl{Aic>bV)d>R5yXlIAf={UwLv3v7U zz4f&v`#{yOx5p|y3$0SvQ0vv739Cn+hhzXWi-8$eq^yTR=E0ot8fg=6m))Uxmo~Jc znG!Vj`E*}ZbzhZffR|Dca4G=`pJ0I=Q@-5-tAU)zpHPnb|-YwKXrIe>CSJd z8*>=nS1CSlY2_mZ$8x?E={g)UEwZcj;E{h)^fZv$oCD`^B`&wV)QK;p zJiYqFY!CR3c*$nmlPKIB=z9%e7=T{rRv@}j-VIM&X}L8;dWgb>f~fP&{Ct(iCuoW` zFql%`+VWkalZBsNdirYO`e7bZ*1YFGdltoLJv&rPUQusAPBk(2vLwh=Hih~Mn4qqp zUIFuVzbAHdr&@9Pc^S__CPCJ4xS=_XV$;|0$}_LmrXl|??e~R``vFNZ-3zA&is_H- zdCQv+HGCZjRxd(p|Mj$PqoojrEOkV7dQ0ShHjZ@PwX7;B z*7I6^arO=|_M9ji-L~DOEk3#s9tS46xw9Q}CiU6V^hhs;cGg1rcK2G9RiCOI{(!H2 z=NNm2>bb7Mf)lN^qk_k5#v_n;TbuXX10O7ldgp+a4^#eUy7a^?(j~j&YaQ^}>GYC@ z!;t>{gu{wk&h)uj?!LV=!C;U1Y>3S@zVFR7+=tvGQV==Mw385cJ*kT|w+{+OXJO*5 zZ2U=N_)U6E-FUEF6-|(;UBp)r1g}ufdIJdqz1tJq08*KVdVo#z3o?E7P|$U2-91!% zX75U+lBF@7y|E4?QIG#r9in+X$ht5Iv5zx`cSWmte8lqKc zH{fd(I2M+|y@etf70+6TNPNR9E4GY-!Qhjn$R0aSb1!$)&M-XW-Nt9$dPK>g`yO(Z zUAzTDcUuV;&*@)t%fe?~yTOK)y{a$8#&Ao{0|f@za2MF^)L|cM*nNec?4PLK!ck z32*5~!sfdgZ(byF7N-5aK_yduPonS-kZ&>ie}i0i1uWa8p#F#F%WvRh`djBT&7GFM zo-$;`q9W*&aCcqNN&grqoOC5&8TU5lf4$4jxt=}v}YHBC;zFxlDJG|tFiatWs#EBziUuMOr^Bz{gBK&bE?e~Q*jAr=i45Z2J*wb`jTVmp+u^e45J{UM&> zIXhDmIK^>EkspWX^^Fvrow37r-*xJzGCvbPL~H4POVV*~@YbeAa3gKdifMLKoeyel zz5-PuogF(UdaBad#?R~99_;@7h}6HhIF)~RJhJ$t+<};HIu9C;)h+D~Y6s^ZI1s>} zZIAehVyR}RGXfkj@GM-dS)g7&YW$lmsVauG9fpdodG6@0oexuxuN*>ag6OpmoF2$Z zK3W^4{kDq>U`m_lbEC!{A4%KzJT6A5trhiAF*sY4CMj#V>wt4%{^#hRE_r z&9B10Iofqt+P$r8KPD0Rd|af+%5tKm{7xdT*8$C{E;}X<;9eykU!HW-UD)LZ{wj1x z(TQa4*goto!|~*?=laoOF@u=UzgbR>c? zy>nme%=zs@0vpwi(wV(X?3*gF#MEZp*#Cb*0fw+zt$ox(?(4bUmre{~AZe{>3%&`67Jo@NAxQTP&5A={_y z#!?YesiA$ayOwJ3apIZOl~zaZ63|Z2>-fduXQ0D_smGfm>sR76NcryBy-jI*P&nZZ z@q}Dy>v|5dI!fWGZmGtT1g*9Quo?#~MfSvYnx~bh@9|RNcE;PxlX6bA0Je>7yGKGX zV?TzR{jS%5l?q!TecMAFwRrHrWQvLx=Xl+=)_HS3O%B~(d9nw1@MX>Ghx|zL%mb{A zGn@@C&U(AjU`>zrK90?p_OBt{x(gz6*GW-ctabHn^)i=!gvUZBS~EvdNnUdV zMRHb=JgC7nx~0ZlD_cxL-0;$R%hkzsG#Vb+9-$M3$9JZJJN-hOc*}s_VYmCRWOlyc z@kS!kX>sYQbY7aVI#nOwYEFVOQxeDhSeK3<(`?zg5=>*gD7ddchObH2p^j9-gld4KC9dl9O5n?sP&=b9 zjT$?=|4Z5@e}lRmpW39ocexQFOM@?~S!Z_D)gy0uuHB>kfw4WiZ?d{?(lj7LE&TbR z<;s4V0&LBeZo3$0i!Id$69<7++&Lofh;qf@nd#Qx!)f8g;*R*TByfVjioq<_| z*e}f3%&4b0?rQSE`X^F5ewyC+qOl~r`AFCxUuCd-hmy0$-p?R6xy0>{kym~{-$4lL zwsd7t-)aFWCtKg@!@tQ<)GK}i4y{GuI`NzClOti0F~1(9vormV7MVT)e`SWw408cm z<+Sh2F#!J}+>>;e@I8JEieu_^W}TeKMY{7dDX`#Q(R;)uL!4U`!2wj?9>$amdF9ws zhq4g`NLY%WOc7xv-d`W5$el696!y*4bVgR2+7(#Z?X7GNCy@YnLwd_m3WC}f9U$o+vpl88Og2m{&O#4Uf7f1J71!@ z4XLX9o!4%tH22MIHQ>O_mEwd4d!b~sT;y7S_-xJ5%Gcw0?Qd^ahFZ)JG z!WZ~4=bYmtrLu2Z3V3lQf>xxEVR+wZ0_^H3W3p%5GRA86#mOGd9vA&f9Q?b1ZG)d% zwo~jJ>Az>zaw=X*0`V1=Vt1m%$pINsP!_xs^cZKqNJtE&h36W~nOuoA78@63w@4Pm zB5mwA)g8bcZn@+$tao*n+K7R-dntJAD?49%8z^ z!EuZ&#G``4K@7Qjw_v{MKQVzj`mXs;#GaMpRqo4sE43pH`Z0Tf3VVzRxXa5NGxzL$ zTqEmCnGjteZo5O?ljeW2W+82Nzq_Sy@Z8Fs^cW}~jlS_{@%4RL$|y}!98QogF$b5u zDS$`?%}3gPiN(RX4*h1mv3=DiLVC|dyhq>#vgq!EOFd$=m2Xg?Y|Pgcm9ZR^PTI}WRfd3ysSg} z$kS7Xy^bka-1Rvno?3EpA+LTa=+3*Yy4@DhOdz0bin@??@qS;8yRo}_$kd*2`c{F7 zpxNNn{#S3yXL_EPeaGlIpDAbr`NG|}#NO~>Yxh0~1FT&Y9d>2HxW(Ls*<%QnSkk@D z92YiW{$`yNpY%aETR>#(~=dtz!ted;+DQZHvZMWK|Ld<-a z(`ueiAT(Ts3p!>C*BZ`Wmj?V~(YA?~T7?KY(`h-cRf)-E0m}E+hgk4n784`&MwojK+sSTb>+7eGMnNcj-T`)D~Q4X4f z4=6N`9~mF89*0J;NC(O}5_IUu{7ObZf(w)^aLQ!mR|bL)Z}9bDA}J8GxwCq67C?#y zeuC+^_!mS)nOu# zlVmE<-=w8sE5(q)qZaNgJ!mVldDRa#b?ZX-++zv!zL9f`Lj}_lgqcX=m%W3CI}%f0 zIc&OE3aAqCqgYH}L}@BGk?0Hdq3y3Zz?F*G^an!Mv^B;0gHRkSO<)WBW|kxE`i4Vc zb#1+PVB9uzEfTc&6NNZeGV%8@#pc#mH!s=itsU07 z9J{@q7>y_Prw69$uJ?^o`ww7p&UOQr6dUqS$uH=Oja%m{Lb+k-VdE+cN*swD2>7oq z32F7MDkw`Mm$y5{aKG9Ytqq-vE(4Vxt|09AV{tJDqahCSwAFlgdMNL%ZnEd(>(^I? ziyxETU9gt)zOEkHa|rAGn8N8gL8dw{IPBymvRvMZ)J z8)I9#5s1dr(H27b8gyvu{M6_gQRjvQ!j3nF6mt+7;;;{}#^*oQKxq49)uM-BN;|62 zr##+Ne3XySzW0JvU=^-3y@NchZStQW%*?6Z7L8y9uE4F&*%R55Rr$}~WcEi4riuJD z=rZD2)V#SL`NKdzv9Q1VV#A;oVA2b#WDf57CiTc!l}Qh-endsg$P(z+cU_b>sFts{ zRA*m6e{CP}{B#eP*$_RrGm+sdf^Z4|qol)eTf1ixLlhN~H=|Ta{N}d>#n_Q;$tKNC zJc%0CQYK3h5Uu{>yK`gMb*}0C?MGeCODK+5VjKI1o9FcHo&ie({+(uD{Dw>0%Tv;p zn!AdR5Nn-auxJX&h58pmwCP>6P+5$8@Qi2AQscm>45#$;AkB_I}BJa`!Qj7^5lzZFMx z`p&9m64Mtm*fT+q2d~7;!xcsl`QwK@d6_m((8aD?=t1TdGW=^u4W{)C6Sxh3Vgdg6 z%=EsQ<9~VU9pEijM^pOo)$y$?yr)MHH5gOH37gMe+O8-0_V5NerXVyw6$Z|^2o+e8 zT3vqR8h_Ke37hzp3j{ZA&$QpCmljuOhJQQYOf0}1SA;(>)6(|l=_UiL|D`X>x4vwR zRK8`rd894re%d^=e)U>!X`nUW@Z0qqe^W@IU6zP+1;Rt z!Zvz-ikI9q@zWV_A5Hk*0BgY;Q;az%4RN^tFBjea2QD)Iz=a38xJ{N++V~#7wSl)P z646K3i6JPA`6Z4)bR;4Xw(uDwWvxqMoN9T@7BjJk>FEU`;Mmp9CA6kXE%NU;oG3&) z(TH;;7Fhl7!5;p1u+NOOJzqK&_Fh4-CY66HVZq&f6el4G(VLX?p^{DQi+}o!ebX(p zA_&5#XxkRmeDtb%4;Iv*a?J4+kS{j8YiaLT^&C>~jP%PuI2avq*cawJMOVX*se$_B z?j(Cev3Y)CJo`NC)(vh->EY(hhN6E5m~s%l|C8BK6N@nMXC|3)Dn~*NaE*t1TtA+< zOlR4?h^ADJEOn2*Qu5gP5xxRC1DkI}M@g5~KgR4RMBCAbb0iX51B`k5PvmaTCWQ^w zn7*cWc(gSl=w0yB5bbSDl^K;y_`AB7Bq0GVp4%?>Q_lQ7{S19C#>u zsd>atVIM%S0u+2IiWmO$o1FM*6lm1`k};6cZ-Hofo8s6%DTASuk6nqa^mVclBT})A zk;tdd+1a2X(tyVHu9d#^H_|Wy{(A3_BR*iw^T18E*YE#`eR=ve?_F*Wr5MLh{@OIG zd;^yg2sUQnMwQGOa`DqZj)a~}6f2Y0*x5{QrGSy34T&gEJX&vgBNuywag0)wijIOV zy~xqi?&*NkI|+E3tE4?vU#H!@ z*yvvd@cGF+_m={oTMRcOl00qp*|+sNC#Gsm^0zQGHh2N>5B%ToCyxBDPX2%J_XX$3 zuT0f>#)|q6{A+3WW_|zZ0j}`&pV8{)olaf>W9sO{R{->&{y#l@C`9|vi1Q~9PyAO8 zxBnp+nt#xPi=%y5lSg5~o~QZkqp*VGj7T}P6a;B}8rG-KfZ!m9@k1ibQ>N2A98*Ud1 zbI#V`0^naiv@o(~>Hh^^6ZR2^^W{C!-qTi-Vt;XP^&^HFUAZccI(Vseo9Lt1HzYq~ zkYy1}CD@?H27r1nioydi%}4JJR^uqxnk)SG`byCY~TR~(=})NdaVE& zmo_?h;??Z~xq*Q8q+qVCFa(#B{IO*&t4TPQ0ZhnL(JO5@6>le#2Yg z8$P>6B{68@>Ot>AFf`(!L))ak%B2rr(&U}YUyu_|3v=%N!^i(R4#no}A3m6XD9;-yV`;>H!+31h8g|`> zLYzOjAm_K@;eVO(0x;$Ba7s7%Z)y?EUP6HD)O|sk&eT5ZgoIeS+PZ&2dqK+|!igZ~ zqB~mc?XP&AXvz&NOnjoZFx{jVp(|7#%8>jZ*C$vtlK1$KYy(Vd9l7uAesdYfcG`e# z0i&Pna$kh|IUeQQlSggZ($S@f)gAdw2JRm`mQ=Lb65q zQF)|ZQ-*%WbnVabQ7AXD7O^mtCU+AR=HB-}B=fSbFrwq~D(lNqIA^NO$H3|WToH1Bsp$-eQ1ge*nk8l;k8{}xlM4(tJcYBo2QT* z4>{7A-OriV$UD;I{3SueoTo#g^m89=Eu<3cXPwasA3i&KbMn3Q8wekW;a1Z0e8z}U z3*X)4qD;N_kuNSDh`C&?%r^ zNGA|EsuSha8auz-c9!~jPUwEMy6;TV=&p4L>9w)|(|7(BpP{p^PVk-66SchmzF9aH zAHa-PHebom$C{0Gsc94eWoDR5=aJQuma8iWl$pM$oph!B9IKsO@sQQhy+DdQy8FF6 zqO;elo+JPs?cQ>C>prD_bmJ#3?2f68KVM!qrIVNgFzQlGn(wS-CW`xy*H8{$o4vy( znlyrG7jc`FpZ*gqUaL$7yR}u58O!y^;1fO}HY?#E&&c>{z?B*df^C(Ea_Hg1pm0}S zbGGe4YzAz6Ry6)lbdjKIrJ{!Z{-ocJ0S+3p8h^Bjs|g49;x0`tWH|1%$h^;($_+@h zeu;KVsE6~yu1v1hVhuhFZB@0!s=D)V(Y5+6vH}(NV`N;!* zSHRGR2Dr&YGGYkS>7^vvcpVg__Y9|&j6zmF^Nbr&G{uAw9-%22ZV?Zz%Y}Bed^>$@kpCp&o2F;2FSRhwq?@20K5aZ4S0^E;y&&Uq z?%Zkty=4s16c%-@T>D3+8xQ9?b+bjSU|uXQ{h2=%yeb`SXo~YZcG6X6vK6c5Rvz!X zC`|dXAYO0c#bWT)ieG|cYBu2W2h{QbOTnsEVLCssaYi$ft_HbnDpp?MA580Jsg}Of zBw*O(%Z)&Onj4(~K3!DMRbS~`?gsmWodH?)*hIAz#;&zw;T@6<6*U2_S}!;-&hp%| ztNKjM@C&ulqE2wn+02vsf~uaCc=LOy>drR`O7Io3gN?}r~@f)L(fRtSLUsA+s_AVv<52 zvOLzW>J$N$wd-vv7W$`sS`pCx!JPGX$j`H027 z=;(IvCS1r;nPdA_wAIBD9pZY2Bn7fk_8eLF5r1b)*Am*bnA^Z|a#v21m`*KG6J@K7 z1N)MqsoINt3rXv2(N&@(1&2ZQR-jKLeH9h&*Q=@ii>xV5I1jkiG-Ac~39M4tJm5-> zp7&zkpcHO^bL1h};41>~Q0v>ezr6+Wsv8NP4Tu@d1w702;}|uGA24GG4v6W;ESe&F zlg*fRr{(HNflf7$2hDFAKOeAX&2I(|fMr|C8%)>j;rU!>ge`1)`ya6L{_sR`(sJqQ z*!F{_o*8Fr9|pPDjJYI3xE7?X5oq7`8~+-nzOB*O^Ygiqa7}=CRwIG65Sb`5s_iQYC zhn2lm>S8f_XIuOv==Gmq@?1$e{;OC2zH#SHT1TE05A#iI!I`QA;yN3+ z60z9XAj^yR?-^5^SAtsg zgd#ik^Tg_1vOzGv_{qNtZRO|kJzm0jcz-ofn5EZiL1Kg7+&4DEQ2v?3m5*qzN5u3` zmpveU;d9BEdmYUHH^UKH{L}eNr5oo9BgFz#a;xyQlT$u!~oRJEK$3*P_2jh7P2Ae1=C;eoBk31&07o?i$wj`;~B=#yS^i$ z#TLZ)yLmuvp-2u=vKqmU;2E{buW)vK`6!<`jbJ$esl4e>TA}5cUo&b`Fx6%#kMjT` zpmrk4J|Q-+-3Hv_PWiM_9-0ka&40qq>#;kRDVBqz1@ax<@#lTVZCcowJmBxZIu|!E zNuP~C01g9+f_A~_kbe}@!@eBH@)12k5Mn{gig8mNA9DawD|KTLHkY^9vM>FpksCN^ z|DgYh=zWG1Q{z`Gw|QEpw>>S5-}p76o>#Gf3lc!c2cug$m9H5UzYKNV+}^hiBNb!W z`R4e{$tFxek);(+ly_y?box)Bvx0}Zt;_YCn|uh7Fc+n4 z*4<>VgLtV21Jmmu@TbVStfdJwA-}DV57`(^euRlq>mHdPGn_nRdXnHWNKO;VWGHCA z1ErPJ&88kk&WW4QpGwqzIka6VQdcrZNN)5pTPbM$5R4K+pjstJZv1^Et4$GbLZh5s z6jWJB!t?8F9uc4)@cKtGsoF2x{=nGRE3JkYb$pnqqRZzrLYj_jOtNtzkReoc6Wne{ zIccfl%M(08a!EEutV9X5fllJ4Qe=deMI!(fW0RcwrV%AULZjB`zmpa(8LD++{{k2! zbIn`|fqi6u9fBOnwm{6+qv4(tVA=<=1fd8Op;{Oc7Sa?%!>@5qHtLjGr7_t&$Npp^ zJo{eptc-Z+WwCzmMw0_%wpF;&PMkj?bcBUBtg-5x1g-BfeQkB{kk3OILwsN`+DMq) zcm+ntkC=8%i} zG#WXKNoz@?z^GGioB(EK^G!69CC%}F5bLx2j1HFQ#xhXXQtx?wnEq|cv7c@kVnSQStz4+zQV_IN@#5SrEa;dHn z7?rT(ZdwsWBUCxEy4{2m1ip>*#wM!5`=;4iRydaxzybbdWmL3>u9-6ae|P3 zOqWY$Sb=uUK2`JSX+jb)BPs36(c0(}o+Dzv2?qxrEUOkPar>A2xO`00aO}AlR=W(8 z9U$#(?+ltu4iJA#^&Y$@k~u(*A3vqb0={rD$@4dFh*)Q?Es4Mrt~U+1{cSF7AO%PP z+r;U<7fRWE#C~UP*yTiAAy{s$Lx5ubGYoeGkV1D)vy%%_@PwZ@oeky(h-_S@HJLXX zfL}4+-#QS%9 zIfmgboGK$^gWW%9SuE5EwX>Z1J4@T?qa-wdvnewGG@8H%2qlf}g5Q98ebM3X`5Bu?*A0JEj-+ zB3vs16qa<+AAe&b*uVtkxnoFqXdWjGc_b$>uSvIa;7EYbnAR2;@KosLBEm$N$wR1W z`8zOW+7I{DgbW3KGjVqXX(f>1y;U{05M?(SVi5KRm;U&K&AE6-r+MPlLhaK`d9c?nhE zYlF8pZhttb4))R{FCm`EAk2j^a;rpl)$x2=f4JN+U@IJ|mq52n7{>A>`Q_t_VNG;z zl(RsrOV-SI`A|mSL8l*lJJj&KgD{W9OgVPLo^U1mC%7QM)t6TZkKt6haA{KeZI*A`wq5z*OBRH6GTy!wRciD0%Q{<@z~+bXp7hCCUHQ=i z;IE%Wh~G5nv>(4>np-xKY{X|kuSk7!h-rNdz9!qEtCY%L8{3OAPnFb~Oz3>SEkfG` zTK5+5N?D)qntwAyAJ#))2;z$kTPla6b95SLLMZT)BGVPz8x&I*;8OsnN^@JlH9<)W zj?MV3|AXnKoI}RPERZl`v{5`r3LQRN!X5J4Z%-9Im3q5lZ1Ts{rgQrzh2Q-dyNqYK z*X0Cf)EaKeJY@K|fE6?zge2HbOSw$?uAh*$R}B(I+d7WBihMd-0dByf{T;gu)OrRW z6bw2*_1D!L6TMF(41uSz0@^^0cI#GD1t@9zh<1}qq`QTj_TVc1zh+F`2n5LF(g!A( zxK`9M1c5BE*<6wN6!od^(T7RIk!0-k0c%s<2B2;2zYjr zcPkC`K*7j85OfqQ5A`S0s0vm#YcaW;nbD5u-42sl@YxvCxCpu~3;yQ*+QWx3j1$vM zzV)DS3KOnD$q4GP(XQxP=y7U<&6^8>jz8!c^OYQ%@I6z#O``kt6T5(%o z+ua@LaA1YWvg)+JxuNk;qSMPuhzcN6M&w=i07G)BxBp`Volm~32P{aA17S@(W$u;N z@g#!pJjVCqNbiaNv!>_6{^R|< zPEJEUY8v(E8wr{D{;V6@Qu2CXS%+jt4$CXp=wyxGcFICcWF2TY^gZ@E5IwyH*uabX4dRoHt5Si6&*8Yt~jvF5b5d7-Q*_dnhD!hR>#R5WqtIOpI|&+ zNNd^cX#^i(v_8_|7U-=wo|_kBUpqNo%nG!Ysb5Bt5J;}iwzt=cckxpIZs8Z=ibZ=b z^a0L&tHSwFjbdxgAbQe0cH(Vp@95!W+TpZRicB);O4id?Xb<%@Cys+Bk`htV6-@rM z6G95~)vNS~Q0c_3^fUmf9tA+#788Tc=Oz4B(;44bE~U-;=g&Ubly z>sone8BKq!Z=M;MBNabtYDqg*7Wc`TuITUFd|ygZ7AM&XxBuGm)&%BbZOmWhO_@3( zE!bl4L6-61viz|c{vx2>1K+OK@aV!6vnF}yan|9MJpHx|v_AhX-( z&8j^XIM3!66@#Z+N{jZ=C#qH6M`TtT{anqu&Yh??{(Z-eH*y|t*o)!l0zL0LpR3I^aYG>2>OO-IjHPi zUKCs&Ptq}eps2QG%|T3UmxCL>3u9@MnlO4&u4TW=XX}#GvRwagSM62B0bRYA4r&rX zDZwfM!D3@Pn>LBfY6Q+^3#Za*^^(zOf$}jBn^@F(T0EcvjpX_xGDdI|Xk07S?J+8q z1Iei2#VnB!N!Xe0?t3#7CEA=N>;4So{L?DIG@Uo4JyBSP0oo3n1+1jVWv~EO(5nRU zem^^%=oE>=W`vh`ByZ&=vZ*j$mQYt3tV0iCGBQRyCaSQ{l_BYXYL75Cnmb-NJLK1u zFHYZwFS!8j&>D3fOj(FL1tYrXGc5lbch{J5qSxZC!T>oRDArIKQV@ZKy;Wu*zuoZ3 zE!Oa(s}O#y0CbK5e;hQ)GspiPHwQlEF^`-(7TxT$Y=>P(9jm zI_>K)Fe1O7*jQk>VzgE)iSn_elBndw?O2plQmo#)?_o17;X>_>kY<9^A7^xYG7o>g ze)dRCse7ZTgNwYY%lg=94IlRJV5X7w(5<`EN*9?u7L7a+t zRZY!ya#}0E-dp0^l99~kV{CVnC~ZTUC5KKYdCh*k$$r&*H`sN8Q#|ysm_yBLy;*Oh zRO*o{b9^wzUdu8suq1kr-}lH2pPYN@5mmzMOB%j=u2*>2I)P8%FrSIw^Z|z%Dx>4o zK=y8_1anDxcIS&xCbV-{aZQJ#g=X><snPCsTSK%p5FJf8IJ#-HqwkZ`_SvT|yB{ zwUA2yR$zjm1!wD1(^k*4Aen02e)nq2fgvY4>BBL+{nCsd*b_NO~nL=!7USFKe7uXyr&MB8|H=B7-hK@3GnJSDBCRUdt*IRaPp? z0b1cet1ViHk|{IKh)*Bp9&VAiYtCAfq_yFEc*N4gEYWNk47I8+Thtlh9x?Ww=|QOs z6PaZ~vgbPh$}cj{>bz@YVU?HuY}d__u80SVm5`l79-NjK;#dGC%^-1h4MM{I+N@!9 zL=prHXSujCvX`LXo(f}PHx8ETk_)K=(RT;M2aSyq+Z9 z?uGhXVz_88*SW`awP#S;!7_MCZ+50%)!$nNo)Xrzf5+nFN1N>r-_}{6AEE zby!KQAM9C!YwqhmZl^Kv%$TeWuftcYwaxo!N0FtkaCv0mHPin2o zOlr(Ye(vLR%peGKwB(q^`F(!D5=NOh<(k({&(>SGCq~@U=OAgUgGhffR7m?&YFL$G z%t$LuARLUAkx>v=wzK@m=qIHi6Ujb%9eW-M{vK_W&}r=`vh0aT=Si&heb#lgG`PM) z<{_Yt1D1YevPWH>MQP4rV63ZyrifI?W$ z6svUHBtMf#?2!Ih@!J+*rDbKl#HXqHnbXollAf?W>F8+2cRx}wK09j9@>uaJzUxZD zvTpKvV}yR^HTwA|lE>Ohg5&yv!CTun%q;Is`RcDdCVykTUNxmCo+*U+%c|6}IER^0 zM#0amy0oCBcEQ|Ihx8)zB-S!Ws(z#1-y>4LN+a>`IX=qtMvnb|Q zhF-!9Zu!D5e^L)prI$lAiKtiCs1$tm`L?q&zzzN|Y3rZH+Z;2xp!#-ust!a<Ki-;XUxeEQ@ZfWjYCnmBCOJ)|i-38CLD)f9CZWvEHC~!J)XB+jhqnF}XJ?;0YwL0*vJMIr3 zo~DgmUovm7U1H{r6LVksYjEq{X#?HfWJToKh5fTUbqhCJziS<0#fGN)ZQx+JROZLy z4Wdw%95uf%Y|xu}t_C_tAw3_zcDH%2Cj4@P^y1J!ZIEwjwQCvFfl9qB~b?v|At?z{5Om!C>INZ0P4Wq z{xh)XnahM`ZL3$qcc}vDBiZkIA)-lCUXkX=c>-uWH(nm6!s7)~R%V~Wj@NucUfE;@{%^Qf9v{f_n^6hwJLI@|7YaWuBLS3yDZ(;)@9y{dx^6Q!_z#j>XPWvg=}FEPKt~dhVmz7=N{{G+$sFiJ z(%Tg@2Lgq}w)bmltbYC}Mtg~Qk?EP8O+b(H>)W;0oW$$U*4jg)rNY7<&&wCvn@Lv! zCy^J*7lqs6-(cgfC{EL(LlJ+&9Q^@Hl2Ie{NLb^DD8x@sK?bLFcf&Y2{g=7liXm|C8cWj4D z?)d#DipR}3(1&tX&ak|-ia|j*wX&jBZ{mw|WEynYuhN%>Is)wyb9=aU{{RG=NEspj zI?NRHr$KAuVPm{_sKdph!Q%-BKMU)SkU+fMJ8wf68?3MJ3k~P|=~$mu8s{xuMu;w` zLglpG9xZ_<`o8&llQn{yD-rLJesVj8hF+{#y#qG@=tPW@LBDjtPw8ZPR>?v1UX>|S>JVc3V~0yG&`xi z?wQwC#9uD}*#oMAy~w~!E|a(tPxZnulrP9-OW}wm$dm#rjRuVmnyHjH{#}Qu55(R? zz*M6egcnzEEFoHy%>-qvE9d0)x>4}tGV|-N(WTGvdIL-)=1XMP#r#bof+^@#sfiX8 z{H?|YmW8TWyALmZbK`~#pSA#jOAx9T)UXhW56wo#{KCytfOYUO6opOqk9DlR{X+ou zi!absJrK1;yK(f&)SGaSBA4f(<%VAJ(ofG2rub;>`l`y-;M--mwU7rcL2dQDK1Vjy)*T`qYM>Gpps{^H)lU%1*YANUSe4JU>VhsOudu#2 z&qlTwLqFv)^m&I8txo8$SosqK_KxBJ_U{(`mvTx01g*-d|BUUNGXYBjYs+LwHY9zk z@uoJ#0)Zgp8R7%pU5rD!oHS>Oymx{f6lEs}>4&^`@WpSc(44ZBv=v#bYK8w5@a*?n zW0l^|U-D!_nMO~|kB7Ni3#I?nH@)b`-iLTq`?3#X`}lyH-&;6ksoqomYRB3MRgcx| zW(ff~E$d_&BLxcV#xD%GgDtKj0eQV!>~5oQ*kPXRDADgN_~FA@LAD^)a}%uOR-a9d z_e!rQ$~HcnNAyJhY5Hn@P_kH3W5dNPu?~{4|2+PR{kA!iRhfN~x$WB!@qHrYN5FVn z<08QLgER}gcOlOhbv#hkY$;v0#|D;f+fTuFg3F8@ZPm$5;3CP> z5*5c1)mvew4k$CT)_pJb13L`s&QiZctF(PT5{luHA}~o(AMemwwf&`F4#S1+o}#Iu z|BQnOd)jYK;e_MN2#9$U+vt4E?ts+4%V|HI@>UcNh}bfe2#T&3Qovu3I$2-}@R`@> zy!cbK@JFgJ>}iuZiTmeK4yR@4ZEuWINWIWe)V7)Uu=tDhqqCm2xCmYlpC~X-1Rr=w zsHq~hc-&E18c^F;1Lf6++r;%b1dGz*lCNX#E9b%hfb|jczOn8)+`CSn_zdJutkjd= z2pSPh5IrS}hJMyO$V&IUVx~yyx7)JH0L>&TL!dF^hf|fGWm$#JDL>H1*%SsWjn-LUfV0{~EY) zbQ&UNWnV#b4Z|fuwwyAvap>i&cnd7(q#({(@}R&T@h6%BFHVUB>yf3p=!&*lI*?cX${7W(UNpxj5s;=!xU+ z_m}OtjgEl4*%Cd__Da5|lH(W8{XR2DwEP2y8^%CZf|Z9SG=KaHn@Hun^%E0o`#H5S zwm8F1d;A-3z67fH5LF(+sL)kN5o7sh)qZ6xCI#(JsQS8yqXS*<_7H<}D?~C%FTKsii9; zbJ*MOW=B8nUwGiJ;-qIo?E|z73Jya@L*UIDq-=UsGsE-`0-QhQ^KyUJyoC6MShfKF zsResL!1DEVAp7<7_=iCJKHmqp?_W__ue<|}c(Tu;OmuKcC%tZS_0Y}*OPfM=ht3Rw zEO+2N$w!X$uTF5~^gIok_q`%Bj#A9c{?MHsTuq*jTHZTR61bN!eXw1e&4my*Tvza!DH6zM=tig$5O!J0L^H#}0BP0Bqa=Wc# zSW5Izl{$*Zy%NC@3moSKYKzqoOEA-wqZ#AU*D$RNB5{KdHlsgq$+e4Iv^bH=jx)RmfP)Q5WBkMX%V5 zQMQwku}mJpN5xP%Wu{1}kVxo;EUoCAj!vzwx=#KHXMg`aNSULO>z+}ys(-D<=nJg1 z?wR~O3c@AlQA2zircf{2*{0$}2|Zx*@=-P3@d>_^Q{7><@*gOK%`igIk(0ST^nytS zI{)16kY3j(B({o~a3&FL7hf!`jfd7Yck;DT3%{*bd8Hg;iFb(pm52aKxxQKJ2(4cy zFcs5adRS#-#gmB%>gC4dxQhQh3G+5OC?@7i#+1{FH7{`YF6__WIs~PzQp_?97UBO6RPrGc_qTnw(DDj@`f_5*{=VC0bsP_40OWmYDC_ui4WIS{sl|~W zXUv-SW92){87u;yA!#5`Yq23uu;oECAC+(@Sf%_ua0T+oKWX$Phf(bF;d2PPHpFu-Wf(>%_gB(t1fMVsB6WDIR6kaj4F0UnEcQS>tviAMmh9Y{$8^mJ8_M9+L5ql@isA z@T4qbP|>oEdW|pZBz;gpMvel`+2N2JYi$9{NqlX6#pCAVB5Y9CWFj1T5AqVZ!jj@2 zRP3{%%vMBs)&9s7ffZ_{RRmuRPfwp=2cd*_D@@+H72UC0Wj{-q&X-A*(}M>?NE@)C zlDk8Amr#p>dg&`9YVq-iCE!?=MwDEP@9C?hg#t>EjS}!e;f6{w_lUvYe8L#KWPVkk zga7rX=ygR42Bfx&qY5c)h81VpYkJT>J0S=fM-|fx}1`8&PDGM@06itiL z9;q^=EawSGh(>Rv8RXu&*La`ehCI3_tt%UogWyz*)+v^Mov*bzNb8}qj(#_Ig} z5zd#HzGB{>SoS7aU9-DxhUj6LjMP=Jk!L04d@1dzN?&myUnVBj+G!)njK(2oAXUD! z!YGvTSsE#W%W@&tRj*{Mo#c5{;Wj24=bS%(GN~{9Q+K@t0lGX>$Q!$iR79~6e&zI{ z;!KkTXGRtA4uvHac9!22JFQC2v8m0Uqe@dMG#f|2sjmu?|)nkD`hMgUX z&SA;P@+NFHCjXbG2lpchk%~Z-h4Nh13e`G8K9s5j5x^-YOH02}VZ5q%L$z#WXk-JF z>J8#+wt7n{64wISYPO?@l$H!3-j}O5Hx%tgZ4_{*9h@C}SlWg885K4|WxY_b+5X#+ zA}}KrR!WIR*zL;3x5|_UVJz}pZ_}syM}Ftm~iPmR*lGLL}~}DX9HE%#08g3s7BRZ^d}ayYmYokBAGMxa`)*G$2ENosxmG zYVLnHmo!LxMMPhe95bJBW|TIUf{fj};vQedaz=+|9l7`OIT`5g$Oe?zvBeeFT+&bz{jI)&;J+ncP}2*-#c`9a8$O>Q`8x zB&%1bds@#&`RV+R^*NgYBAUH+*f;(?10;P|vo#aX21wkHi9&I-CVqoWW6XPbxyU?^ENfN}G=@@0npTyK#Uxzu0 z=9G)pMx|9IKlxrU4&H$oVK(@ulz@1fJShX5(15f_lTx6$2dvky`SVen4}Xw|cb*3I zu~f{j$iDfctFoZyci7gP3EqM&b&!9}Z?;eQCK|JiL-YavX!GHRIwKiT@TN{Oy!Fc$GM55gU2dZ{>1 zDt09BFtXcbep{%8A=S(`N^kfuwXgxJff;}zXWIdaEGyGGz-X_aI=~Ks=GRwnm!cm; zKe1eqjgG#Nw@KB#W{4u}2Wq-)?3{50PgJJ*U5uzEfrSMaywwhu*+Gz*T>!#p+KPq_ zWmc7=e-pT)2_Imfh5^>_hZ=-Erf$u&xMhdLpeN&~k^uCoHF zY_49wNC+-Cz~QP zDYSk`JCd|YzyK>fsGgB}BQ4P%$+y%salT|c>!@uO-^tnTnbm_kB9~hfx*^A%O!zS6 zsK2w=$%$U}bG;+L^iMM1Bk_Z;*BsehbNBhyF59>#=!$b?>5`ZJtk(*m7cDqy`9D(6 zKcAkB$Zys*pQQh63T%(E+(>Br`P@LRp4;r(k>*+{V<{{VH5z+44fu79rxScm<>Hx) z7!4GGL`%FKifrYAgY;VEjN?XW?Qe#<=wlqK^-7P-@yJ0{cIN+td!>7r(S%zF-VA(f z@znjm`(I-A*BAesRmH2(@LK$c>;v?6Z>~R!Po6WRKUC~8Si|m_4hSq!@d^)IJ2%JA zB*L4$k$C&*J6J4uVy=RMw^6l2w5~ZN7Raz9)+w6ru z$?gg=w)a(gg0l)My@>u?0e`No8QlGdi?Lrk5vh)dmR_wow|5CC=(cm^6)4X$MTfR4 z+@FV^kw&W_B3_wozlfp{vt{it&h?ZhZxF|gwl4llYovz>82+cL-9MrCL50cYc#MwiefD~s;T89wX zt7<;Ds1cdCbojEnVmK4D$vxxf95tRp_U0TuSwsUQ2M;CAn8u55xb#;QAw1!oSCvzg=t~vxF9{0T}kbj#B5ypZz*IZl<7KS3N(zzLgD$onJlTjS{-*V^e zFPoCPhEEZ<=Zx9L2$7cQE}lkSf(WWCpKy(`smonv>jNHs^{ZS~?}HvC(nhcFSyQKr zV0@V!L;EYBR7tS^tz(=8Fx6rD%j)Y(;KMk(bw)>lJU5#>Fa5p%z@zdb}eoV9q%3salSwQ24%0`tw9 z%(eGVNRo}~dG$!#N2?_6Ie9mPWhxetfrlCtDizZ{-V;4YZS?VDaXMqM(3-=fH9Gqi z9CtO?%`i=-V15p*Ek4S{p+=+sp<2mMcjx2(5MAlkTE(uQ;e`gH$07kS%%OgHjWsb0 zf)V3^^s*qLu!)i8Zrgb_fdq^LKAVZ-h34O8G&HLgY# zqfe@521CQAeVfXYEUEiSh|(JRl-PhP?-?f<}h`#z>yAFxWe~9W%!|5jp2hLX{Tgb^S9gqJ@#dp^1b|ZqUOK zLxFY23r423=tjHh)bZj_N4L}0_cHhAh-f$TO3(KDYgNV~D*^X6xxa&Sje0vNF=KjT z#8i8zNeis3j9X@Xd!+N0{P6(b9KRjnm11T@;v*Lt&jx0k1tYSNEa0v=wp-qd=UF9e zQtIUBS!t%Kntnb~=QMiA2Pl?@Iy)V%9C$~^F7yI>=^t2%chArK5-so5Dz2w4@o+_p z$)1d&sbP^a_T`|dtK!4+Wad0RpV`PMQKjJSnArLb&EzsVMy$nw*dtv|H{fT=={9rS zY07Em68@$QuCLfcvrA%#Y`mp=&wxqXM>{H7{Y z$oA>|2B2^Tpm6u?)TQqUnwmf}n=@QUnX0tuLLyvdmop|^bt_P< z<4WamD-4feF=V(9&ChjT@pn4?#S)ZIj)r#`y^^W-kt zLb6VE25<8&80p>PFazJ~!Ul3nQ66S9%M@I~T?OO{g(CJs995d6M93qRHLL|$KV!Ro zbR%0Ob! zLx_YA$xRe#UmM~csl;F`nEO@6^+&Ok5CSw>(Je8BlMa1jgpX9i0={ibU7DoOH#O@= z_XCs$% zC?QeNj0akj9c-5**YcOHEY4l~HDnLEMfLPF@#Z^^RO7I3pHFFh!oJ>YI3N!GJtd?U zQ8N61(tW92C_CfK4#!6t<3z69ThpSqSTa~kuk6p{iLIpSpxs6g!`6XLbNEQr+9|{s zHn(_Y-~I6x<_A8%p;f~mA1jrO0rHDar|ohT>zzgI^dMLo1Np;mHgZzn&h^JYr9lMO zEBAvxtAmL$cuj1!mibskZK{dzDrlhaE@^z)+BNwq_DKowdK3^vZ8)X!uLPy1PY+g@ zXO+euV+30}+vts;1n z=VCVHy9c6Z&t~B9)A}zs?TxUUa?9RzjBP_bR=0ti3SY(BqqBl9rxc597R&Bs#tmM} z-xhILWkp&JaQw*J@Lt15hy-+gb%<3ZDBI zK}dAs5}OxpDZgNt(q>sfM~)PJzNA9uf~}H=>CV`3g2*|hH^dnN(SP1G_n+wCb-Cgm zQp{g_2QMvMxPud}V8Rujt#~ob?mu2A{MCyjIrF%_G{Bn2?eWEs7=k1UB0DWWY>Jb^91jx@{H;0wSxCq%2k zewWH2z+=&bITwkQrE8a18(eY?!*n%JDzbxp{i-q}xH_u$=HwT}DP_r5xUj1tW_p*F zl{65n-%x)qhJE`Kx%Jdti(F}4Pvh+$N?q8IunI4}%`(S<>LxQMe1^pP$n&zaQD8B^ADM?ST8 zBl#nRkut{YB_mhY+Lk*fm%sEPBi{<|B3T)5uqt8C?d!^MgV=A#H-h=9^11;E<6g%@ z*e+<+PuP`r%D5Ax98=Wy{8qCu(U&>H#P`3uR88YTDAOwg0;lr+fgY;u0OX5gG<@ z=AknYkhmM9OmGUG4!|*E8XnAKu>Fq!-Ra8J+Io$#*g#05?6br%?0BBMArha0W3ahd zq?aEQvbon(m*wR8KK-vO2?p36dtFv zEOeDk#+>bLN_7$3ZBtdS+ez}Ws(6Pk6fpL5pi#B}@PFQE&Fve2|2JAjcheW0SHo9b z{kC>93czo_`9%Uuo`I(Uq5VH=za%ZPh^HMYFih&)Pj!h=au|J9i+> zA0#Q^&^jDnOv2iXq|D?aV|6?YiC-F8kR_;`ua-3}V~Y0sBb%?GDkHrRoAQEBOo~~< zru}KH7m{()OQ&u$^wMM-S!cN+;VBmAB*@r**WMLjU1&}B%4PKYrRyDy){GgG*b3-{7g#`rr^E1!}>*X!OnA6I{rclvfw zc$%5A_s#Yl6IiI6HvH+60)HiCrvb5%+bm^V)f<;OmDrzrQP%?tza+|qGlMVpe$HOT zRjppL02dXWhN-z`nM9a^6)YJkA+?Ng?=oxVGu3DIauIguLlsOx@oE{7vV#46^K1Lk zt>@B(yk_?$&wr&kd3P2*PpHMKnW_tZIWsha7A9?aJBQ>$TyV4KZVLahci1Kj0J|M znu#D}O@xjRGL+{Pqv9pMx-3yggy9qymP`Xmf+t?D^2{Xa0|@Z)WZsI%d!tYC{_DPM zKkse1&iQPx^@Rm~J?~;(K9#K9-vn6>-*rj#Z~$1~u$8lrw{aJT(r3`ZUNjGQQk@}RpB4`IG(3%ocw^@qpc3ED`aCAZ#_h#kVE(Yl z+25IZ-8IGGKqPlJWn~D+d;nj()n2Q(R{>A-kQnaC@WMxppbpq&E7p#ts{;nQRQne^ zg0&PBN440tTa%_vYrd)Y=G9ad<(vOf|J#}b&r~j$7$XQoJ!U!X=qpnxdUf0z?3^(> zjclf(fzk{MjT?)?A3tVp5)4lgP-!(z5`a{Jem6Ktu=%9C;{Hu7O6=<~%q}Fd&x+A=9Y)c>Rim$M0f)j5)`990kfDMP;_~YuD8o&XJ+6 zQu5p>b5ir^bZJ9lj6&s!1B~(3nq(R?Bz^A$`(!z$DB;v_-Yd{XwF#J{aB6_ZUCth9JvyUY!y9zp*ivPXhbEkG$L~dvzkF|K6BW zWW~hOq>oc0QBCQbe_@Ofr>yA557j4>KEHyDJ)^N#cn|Oo7z?QY(w4PN0DMn);QmDe zo?3A_il1~7F?Wl_PFAD`t`q>IMOdS=`D!T)V2zH;^6?dG4gC3K831TaCDjLDOGTl? zMSO$ACI<0Cm86phYFWHzy=4F{6F)6B6Xiriud0x-Y} zMqmkYQ*1pqJC1eJ6B9B9o@IY*GJ<*7 z69FT|hN^^@Xv4D%4c}5jqemby)jyF>KGs3FnNE(g!ZP~d#IpA&1bxHaR~A;=Q0pBf z*s#jJBP#`xn|PS#;wr{m*7Iq=)BS{n6C3aybfY}xyQ6jd(0$u`B2eSb8-FwT`Htke)qdPmem?Wh+D#o# z1_K38az$q zxnWz5bv5M9!zjd9c4dGw7MEML{?o8!LiT{MT;Q7$;u*B6gtaDJ)S|+Vueub=5jfC@ zJ@59cZeVLW(26$t(?}9O!<;D)%OA1rKsW-j+E2&1-H4qWufU#q z!p4U`pkG#HRfpaiGi+Qw8{Sj_=GGh;l}hT>;-bo}Jy|3W?E@i9TWEXXR8;vd;q4pR zFHTsPH{*pX!%KKp4r(_@lncHQScuiu{sOTOiwIc!hx4b#b7m1wt^}%slz~BcZ*1Fi ze~jM70yFO)(dN|Yhp1Z>srcKcF=efYy9>eGsXzCm7QciE?Mt2+yXo+>{JDVF(IdNv zCA9R+JXILX`o3ZA#XObf)E6%0Vlft%JiLhsM{pF>r(xRVG67{butf}JvIBUONPhkFx zp-Hm=J#EUpe{ke9r^GlzcRyN38m9@xs_$T3D{Wde!=SWo(_b+;yOH-f?ohj%JE_D^ zUX?|GUJ|e?MRZPGs-0ifG?}yL8n*RB&u895QmNP)G(R^3`UGN4>X*5@OO#V>;dxX zS9vq={zNB7wl7oT#1El{9n^*r{6=&Y=Q))N%2* ze*gK0d#j5TNau>ws>2$b7-XlDv%{1*PbUqYfu8Q*XU_W}Q#!D288b@o5C6?fIeEVZAC5c*)M5wl!ZnbDptvTRj`YJzc)5dw+MbtZ(R@*1K9y0Fr`L zzj}g!+8`=iF(yY_l`+MDm)2m!ClJ*AEtGE2DAca8z&RbZB~VJxOVkY9oIVr zW_IQHw#`95v4N4sWiRpmy`xV2SwD4sN`mC4D;!>2HuIOgk`5K~m8LYXt%|!L zu?S(kPDSCbG{(h74G=2@uwgS{9v8BU+CIgc%c`Ftqj76PR>2RaQ;7PbUtO(f`;6Sl zW5r0Ykt9OcG&EUvOP(m^#Nn!NrP)HtI-9^DXjWOFbe4h@-};LMX-RK zZl?1~2UCX~r#9Ozv)BIJnvQ<#NJ|XPms9~+Da8AYPJQbNDF3fy^bvsKOCKz>l^)dHLY*v)ZQVTAJEgQKRZPzUFFN&!l{M{s&S%v}=CchSZ&ey^ zWBwZGEH`%U867QaWCcI2Z;`D0YqYs43FL~;aHn(GXIj@GrSV&J9tbIXBt?Ydz8w-+ zX=18qwp_HyC%kD&vEe)MLpyYMuf7g_ZdBDDC!Ic3IW_%A@3GDn_S2?9Mmru={cn3? zg@kteT7or@`UbGiu)Qm_65|z(1rcXUw0PJy}hxk zzwWBD!J11Z;sDeoGlw506?*d24}QEwP)iJBVq>s%5yIbfD>bsi-KkJx)9)czjsAVm z`tQW{?fi+u$Jr7)|L7V8^MA`F<9LwrrXS{N@Me6f^y!c8smjy))gVOk2GRCQGA1nm zs}3|-WA5$W-vJq?=1Bc#zkb~Ukyr(Vu5ONF%dGKkvM>Nz1z~D;SYNv)0ABM*QP-Nz z7V_WWqa$TI+?K#+A#>VwjM$RRR^M1u-4qO*=yjty>3#-zo%kQ!W>>ds+_ZMkF|!$} z-|;*w5O#0eD*&UuFfdZh+e^ zb=}@lO?V5n>CW5XoGqsSa5S!rY;Mq!4{Vi?+2j?|j%Od=^*hD=YQZP=5npT_x?{U; z@GwtX1CfTFj#rD0ay>zeSWlb(u}t(lJDlMJ1Huc|Xrs1U<%Ujl&ZaHf=B2f(fP(NT z;!LM5sJ^P%K~sn6MA|(|gc|$pP?4Mi6n?PbT`ohm0joklPKkX`%iZwF>Oh(a05v*j8DgFd+W`Z6KIlsBBOP z9M)%2s+rKY&5sfViqu>>z~*^SzP5Q`PE+>^oo~wh;I`=uYmd%tz1ejQsMG0x@H{d1 z=sI!DTdd!ctCNZHUb)Q#93mUi{EP~uhlHC(l<&&Ksa``%j)=(Q)=LSaidzO|=KMm2 zQtxe36({WTL?vgU|9S)M0h2UNj!rJpYKkago|?ly#;nF8*HD0AWW?en9CI7(mv%1UAddY zj+1eG)vFHCIO>6q$vTa#a1@V=4P4NwV;#N|O|FWQJWkJrcUBl{4U#&V?iG>qDf+gw zhCm_SVe+W(h|SkO($BP9fF}Q`i+a2TGwn&Q`-hUvu1kLTc6q}S(qiv81_QrU*YpkaP)XE(~NiHBk1Ri9WYw4#TF5& zdaCpO1ocOjaH6h|VH_N9=^$0Xeumn=+pX z{YRF)0b4!?q>m+C!0NU75tO%FqiWf&>87C5 z+K#SYCN*wtUrdLgt*gpLZ~9vWtW78fGj3JXzrdgA1Wt6f%}egL>f08(tQK(^)`zb( zAVI~>bf`}N$9TZ*>)XyxzcbQ1bgzQLOG91OP|DK~iIod2-`x@Rx*M{|ZJw=A*aFBI z8IdRrdYe@j^g|Low3hWZ_)+7%M0A7r*brIITZuMHm{*L}{zPISMFMbov38GmyZ`A4 z&WB%UHm{E?PyhJh$%^pN$FD@^iDI_04+d^)`OaEGxQ(#CZ68cRPSFW=sEGj5-)DRL z`sD{H7G0fU7o3hf3B^~W+hL{FOV-HL&Ug`+7`atl=7B={vmB?F6DRxMwLy#F8p%W- zt#p`SOq}nUDcWtIX_VX)8Y3#!A?h>rh+8D%c)Fa9r_Azo0@AgCK>u5QY+OR7hSB zq%;@8Skf8=sm!xi1YRIzC5McV|K9&kQx;O02q`O26jaxgnNwGBOHtFO`9Do{eRFk9 z?K$;%ffPtt`5|Lj>j_O%HqX=Q{|MnTH*4k3T+_2<-;-PG0e@zpgY=G4{Q)YbLX z)iu@sYu<1w{lBitA|#&~~ofSa~39>L++e1q|z|2VJuU*H90g zMd9%UU9v8=P?wxdC-T90F8Hrv*L%oZl8X3io>;vC zDgxHTUc>HgTRVx%?TD5*L3wDqoIiaFIOO9ppkvF$tB!i>fQ~m0q_Bm5<^YGl0AoAL zOkZ^*ca;)8NdF8swpfPk>P<3-@~h2vBaWgIZS@3Yy6xR=9Nfxzi&EAMWOxV<2%Y^MyUgm>E53igi2)NfK)3*`A@*h!v@;#lkp ztc+pfhio|x9sX@AG}%6mubOXuwfU_921V=M%@% zgb8VSGmjSVa|w?xM+kZ?v)M6v5!@n8#9fgb4;*qcdgr`>AaaHBRv!6yI{70m;8%FZ zM&mQ>yyaic@f^n_Si`f=g37)eMQiizQE3(yuM-z7^vM{!o$*0~YpnbkX^Z)Ge$(>) zhq3QXMTdP^#zMZDg5h`_7cZ^JR^(zG$aBkwl#8^l=;Wp_^2}|~6)Uq*v!9CNBX1Gf zT#lMG+Ljh4-(%D4KGcDH zx2W=a?>$wgg2r`7e4Jk=ZnHCdo;PUVy_)#uXa3P*6@QQ`5iMZmjCsZfSIQ?sj zVlAm8x47DWlLSW;kCM=zTIF77spIil9Evbc>HQDh@il9N{*1Prss%ae&I3R%kehyr*w1QPyvT}o~ykaKeJDJb@$+Yh)%=tl$^_V zvPaA$j)=_Dw*#>i)X@2!G6`2tOh2BIB`*HXzeT{@+J{-7dFS_YBw=)9pP*rbe39=+ z%KNL94HHg+{VcwyB|!H8v=5n$tx*S8STE%-f3j=@{%wARP)wd4<8`+#e?;$#FCkPn z+cVqW824*lM2JKC>e;lzZoXa4q0tmhkWb{JCZQ3VB+y@{*~P}>HhHSv=cCRBt-c3*%m8Se4`-DOyuOdO{aJ!j})%95cseOct5?gmuwx=Y6%; zGXyaI9?$Yy46fDid=0mgx#lx1GgvGp96YE#Cn#C0itt56(QLRYIxZ$H4){*=c^3E8gcR)=dIK@lONw2Yv5DOwO?GajIy;6|PKl7DpBNCO~d(^VUSB%6c^1Ok$hThxo0O7 z5h5oTv3>N6-c?&p>=|!4*~7>lXje;cO$fWqy!9pMzMcLva+so{`CGMYBOjD&Gwglr z+}(a6-g9j);aYK@0P~Oztv;`ibr=A5yloc` zx#)*FBQD%KpMsy<__IcXE4LZ4a^|`R7Irr)id)uiNhb3yjgZMa2k$q`{#Nn}`g*N9 zkenG@(r$YWCzd%?bJIF6VZ{At`L5T{Wmvu)99m;hJju7c(K?DSnEkcVu(uza*m?`7HooA0v}kZC4#8Z^bgqI!6eXI(q9f zltk{!JTZok4r#f3jFvB_lW*Sui%ExEabMsjyVnL(v-KMFT0()6+q_nkX~&E7nUSo$ z<(e>&>`)WdT10AJfHW=mvIh1N>YyvL;6Hc!=(dhMXT)N}fyKB+TrfqzsInRQtAew3 z$`H?E{cYs~H{dr??27VG8aqh>xq=-W`x2ca^Q%IW>;079*f9z8o9r#HcA9C|WUqCW z7^$PwMQBy&KJrsQRWvlfLHMoacaXewsgtwd~3<=<-oWVKNS1me~f{ z8?jH36Er9;4MaT^|0Nf^Hmwk28bc=dtCaG{**DDXK_h+-gVgA98$o>{kSWI=_mP3I z3~8{_XE7MP;{d0BPU}#quCjcst%jgkmD;XkM@g~s@ZqztD)CP+^k~)p|P_8)QdjxPee&}sW>iIc@qAL5%kGEf1Xl^YeeFiQWSp#wD#HEB$BJC+> zC|m8DAAYAyu&3;$G`BahI-}Haq^zanb`03JS18n{${d=b67lNRSkG@^G=l4@qrx8r zu9$pSC@>z?M&%__KC{R84Zxn^9YaDf?J+=m>S}Qxm4qOApV^AANN#xxZ(y$`-~V+$ zxE2Mk^0yh`=`*Z89yH0&pAk zYL2mJsvHnFch&*P+mST1(Q#gN?)95)^62$lF)2Y@%Lgv{RX$-Bj2e-a^4)qFQL<*I zBx_ivR#5tJ0!ERpX8f|O^K25%;Neft&v8y?M&HT-HdS%(+zrJjSz%=1~;~pQDs`nPx#=t<-pen-8sBbRj!S7X{LWYW33-ZtMj zHvcNdzxNBt09f;WVQ46J@FihKl7g-Ke=OI`n`h4I9lKlMIGFHR{$K0tb7Kc40nk!f zUfhSCILrAue?X)??V8&QLm4p^84+PjW@TVt$~mv2N2SMAoapa?s`71>4WTD1l4Gfb zXuElEt597-sWNLJjCJ69>iOhqdN>$P5&Cb&!r27zLI1n$J`SRQf1w9B=ZB9MM&($4 z16b%;{q6_8(G?8j{VdsMUxOL48JOLPg^3)-(66b@kF~O;qc<|HB(Ay;MA9{6YToWD zC-;Oc+h$-YNW?L7mAT|#VXW5<(JTB5V{51=r>hM60YB5_V4pvSJnH(xbY<1p(D+{f zS=W-eIqdfOIo6JXLCJliBLemPHt?+c=Bk|64)*l*Md!ZCB6(EkUe>AGph`a;6gz zjKmayu&e$LOapQ#0GP10Q3q%JAC$?>9%hEbd3eZCNXbsiJ1+lJj%Zh8+TiQzC!?c} zmO0EU_lm4q5|CfJ+W!w}S-g2!dv^QFr^DNQIkHc4ZmKu-mjk!fZHRO(k5|kI&x--7 z)oo3V1^K}$$R}wD;ChEe5zY+b;I8LS{==H2o|4q{!ffkS)>y)yp!W~1{#OUdk4p|F z+It`Fdd$`Cl=pj;8J)^!sz+7+w{Sp$(TV@@l#i)H|KL_)a{&jU@{{f-^w679))sGT z3UB?-%1^G!-!P?}PeO)pT&3Ch`I)>1`vRE>MiKv~aXER@KR2UgM)fA$BlOVSHOFq_ z0TMU5mUp^8V+Xuk>a5uLL0#Ei!?V)=zhKh_qSBJ?2mVu={4hBCU~jDV_rEo_l<~y0 z9R_u+RJe}B#DK8Z|F_kdZ`;7X2Wraqx8>kx@R9#F($cA<6{I{5R7n0)N`Qe{g4X{B zYA`RQhvWOK>Nk;<_d{O8ebJVNOSO4%QyBMnr>f1T+~UNJsocBt&oRGh;1mrQa9ah8tOK6U0_O2Cg>loO) zRvz{Vw8jwCX}NIaIf|0sKOUU9Dj(DsQ2ow4BKNQs$Bf`Vko$7T-~L~a6A9tQ#Y!D) z0q~M>FwPZevfvHIfE40i1f4%VYquTC%^Eaes}Yfk>niaYUi*^pgO#97;$dJk#l^W92~LoWnYVlk%KsxJNbY<&dc9nz7j>8O06dynindtrmfVre!mwcpY~hS|x&0yr$5oOY((Fz< z5<>#OPCh#=EV8!EOS6Pr#R>l7m9;uJ9iI1%hBa#8Ff+4rd@4ZpM%U**ocP-L^+3Vd z6#q1vE2Zwq2S5BDW;v@EgaxcT!z?#Ob<>l!i6H5{fBx~kqy+OwfZnGVq&OP3gmyk7 zc9r<2+iE1{4G25=|3KxQGj>hfJ3U8*g_o3Sv{e9I4+ZV1(iq929x?W7k{F!m&v!i(v!|OM)pHIA&<;>82eGRq%=cL4I0{9Sf$eEIZpX+o~8KNY3QV#PgbnOC; zD>;5rv!6z?VRgK6wgiFtfut3$Ru!zx3b^NUAcD3`fOuWkylY7JoAdupH@Fqs%3Oy zEv)^dp|Ms@DA>)HS!KGxLPAM|>TKP?CI*XDp_K$nt_MjwtYihuwzjQ?Ez9sG)&gvLjwr0@24f!ni+L;CnquOe;cUM|Ac zO=SEE^d|VfwQKPHCIe0Hvs)=fQn^E1S-OvYOI!`jb<*BB=ylJv*IwJ|wX?JUgsX5E zberc&|N7_rd(F%E1$Y`QveSk3Zt9<5fc7PlWF*p^-nM?kV3Z>XLhjt1H zcFvPSfUUzR;3I(0MUMs`Xln`r%YFo z4c&1xy(e{Np;d-9e`I^9Ilw@(ob-y4RHwD|Xq2Vzt%k)DCw)z4nYYd|F0@mXBXqlN z^2{rvGq=&mzJ`P=N%o6%-U1h9b$?LsW-SA2Nu05h?0t425rEa44H7`2?7g&QSaWe; zZI4b1@^Xt9m_CZGpLt0PAwdpYE0Eg~^t(O{4()Da*#`$^9dF(9uoOAT>cf#2tb2I@ zf%AcFB3Efw%T|N^@xWSTpPXkZ42D}K1D=CG2lDThUrPFE|3Jw?GVJddDC(S+8Va-+ ze>LBDQo{SO0Fy2p%4C6N)1qNGihfagBm9`NA`F_RD%6O(Mk=ywBS0kiup4S6bNaR)pAyW4JRtHGeF+QQbMFPz5>=Bci@8nvyAy~;lH?lS!3 z2>*_{Mh0>4n1b7>C8^FxGq4Z?=hr0{zciBfIb@R%7BNT#vU+UNm1&QQZ*Aa*-eUbkR5V3I63761?^~7lUMLI#)S%jPu&f{j_BEo23;mUi6lD$M8Xp zuMNvlE=MN*8=kmhE7?DRH<1gqH%;xsyDpfW1N`IP!_xfdMcFh)lMJEn?3cY=`hyUzaQXmPP-_|N3IvaOZdNDwTUA2F}z5*C*0r z)wtkn05I@*sv~&T{!R>08ml9%JL_M?Kfzp3I3S*alMUIJHU*py#7Ip18qyZ7%V1S= zdnz@HFSh_`6Z4ttz|uMrP6@UGP^-P)%e6w%GPOO~J*U{>l=#z6zpAi_W2Rk&^ODc^ zf}%3rD6^ArOOvED(NQ0~vYVfxySZ0!U4yf>sDb&_GYm3I4#nyqT*fhTrGrgg?@98%sB z(Z4EhnaJeQpGd0hgqW@!MiEkw!HxIdTu3H|!rwaDy3R)zZc(X54^6pR)T3lp(-eY4 zud}WXgEEd+iLN(x5Qp`JE=NN6W;4Am7VW6?q3LXt!!_FNWUPMOsOFQ#z6?vcOVi!w zZG=Xyy->l0PaA?k_Abe9=6E4SuGZw(B>HshCZ-mx%ZfamxS-0OYQ{&2A-duuU@yfH zPa3m+W(ec~V?^j~j|E|%nD!yC;f4ZD`_PvUhCmb1vGPd$Dnkd{Jez+r1_0lF{>dB? z^^>{l6~y>jeu~9TvpTK;s2QZPHdP&}`yR=LA?+wYVa>IYIMQYegdbow5=fdhP-+s# z5|WWRmBCEE1Es&~TJ2+IE+(JTf~ZCzqVaq>ga&9d@>^@yr%Eej4Y^x^fp>~&DR-xYrwmj}97#GIGRu(3d^9#$|?=EpNSS4<&Xya(LM0!Wx?hYrIZ`*K>piFR1 z_KI3B&5tdKa~@%|3um!l!`jwsCJRc;+jFRat<4GT?}{e7cDMy~@l@#iT29_5xv zJsVF{5qBv}wqE(g6HY`PrMg zvv_k&+!|m!R=#YipnN@nqpw{SNlRv6WC}!ZAAvvwnygYx0_oMS1pE48~dzy#vaH%;9s=wSeL{|Ls z-O@-}!_)Q~2IfedkN6c^E~Dz&hrVT7R{_(;24&u5Z4$OJ_|k8!(;{C3q+hY$4^0YG zIvG+duHJngtVODTE8&qs%ML#DGgQ%`8Lr@Q1y>9^Z!MC){|9GlrsF5CA(X8B>_2Fj zC)rv1*b6Jw2GhwvpU6PI5Xwuc|M2WMA5Z>|lx)CYNd0-RuIN7d0jLXPMiMS3&UR;u8$aS>?O0ID}PFFQXvGQbZ2wkn@>*>4(>gIbSMy6x}z5uG$A0~5W=?mGV< zEo8{riG_88fi(ZU&9#QHx~ybclU?Ce*WZb6g!#M13amj7WvYhUrTYNH-jcJP|Hz6@ zR~nNoUB!?1M^;i8vTAR&#n{nV-tdxo+6kxpInOmpI;Il~0qFqOGjt}jt!xf34wF%5 z6wE3HoF~i|T96-maz(zcaC_UCFuDS=Qj6SEnBd=Kr?CN-S+gGgPb_*VXG($z%N~wm z%bWQri#0>e!~f2%R7&bMr%NOG>TJ8sag`;^+0_Hhlt1NZI3Hdb=v-zfw2%Gw!W}SWG1JI2&wlbTWoNi}ldk{W=R5E&FP|W8HA&`mtG194}XmvffB>I!lWMb)fgv=*QT>9?> ztN+_pLf&n(-UOLP_>=jUykB{4p+b#O%0f;0HMWnItS<}eZkqAHIj3px)bqV>YJe(` zFts?J{Y+;~qiwgAXs?)Y)Mq&T%ILr?Duq+yRNg;}!mk6I#7Vxk^L7c&OYA=^7U0{zBdDq zcL8Zqdb}4SC;su+#1unbZ!qMwyni}yfs-xf;5#~dDC~5Ixk3K+#cx+OF&l{uc%&;g zAO=Bb?jnMLErC-_t_eWfakMN_-@~C32w?V$8d(p<*>z!4l3}w_lsfvFYfWCh4j2Ob z+~>f=;-_;zF|{hDGzN$cE?|-8dpVZpzBU6`$Y_$4pQHf&qlr%$PcEn#qcF%OV{U@i zakV}lwLbQHu2E;@7Ca;)tz-uezTinN(YCpP;hdNHEt z<+yhK8Pd#g;{B^IQ~!ReK`%nc^^IWE{#9V2(qyu(k~L1LUhi0-=c>4%pC*p_qzb-S zfV6f7Gc!>P_%Tj-lwQnAnR@mw$c30vhZH8|a8m~Od10=f^bTu{C_V+FH82B}+6Ql1K78?V|39 zU&DOi%iSB}uMgO9djnN@xvrXRASR{cKec)CZYvZvKa2|1>a+SMe&so_zDk*K_ZF*u zs5QO_%bWH8VP||SW!>v0{E&4YAE-%!GLf(ioOw1XcA2<&WN>YglK9CDMv?~js4}>; zs-v{Fo$U$xB{%xfi3&292c7=g1*KR>`DP)!z(n%OZ_|alt)x+c?ClE&0iq9gVaUx# zJgKqlg(*WFN;@BX{Hvho4{qKe$OT;@rkC%bbdMYNeKtsOz%8uSQZ+AKEnHyIwsN6R zT`TtfOr!wmJJrQ(&Xe~W-bp1*k%cud#r`SNEa?x( zvbOGfmy?vws12?We^(1RN;5yrJ_qV<$muJK8fLFVyU7b#Q1oC8>zj9n3-`e>;0iAi zJr`ey?Ge0Pp0~x{e(OQr9m$1hfK9>-l z3zo*5tu3|-YmUgv-i^EK+DT(3?w9wgAU=BE*azV0hbjYY5dChn>QMrh`i_1@p&Nu` zhJWM@mZWHVi!MjZ^iF`flWTD56n4ugeDZ$Ynp&C@T2u4L-#{9NqtW=QzaNR#_vx8y z^EoO|J6zu~Vp)Hm08J5*zoiu=U1Hu*b^LwO#~Dh>wwAWb2!zK?T+g0n%SDljnGIBx zI^vS-jSB1yy6y~C_x{E)azD=Q!8)OY2S~ip@-S`H6bft?dsAOcxX~5}+}08zqT3Tq z&*;aXM>s3QJdZoO4{P@!>&laM@cfeJNjq~|^O^&5u#l@ejA^(%H2cj1KyX&RgQxu1 zEOg$#F-ZSaKgX@?v|N6P@D&G@-o41(pFN=voJbLG{o9^kBcC!Me4s2W6IJUta)Tlh==7J5OX^VRb~|C! zu89$Ok@=V4w3qDr0DbV0JD=3|VRQ;%{QeS?#+;e?NLQ$KFV>cc*{f9W!v5^8^rzr< z)~^&_|Iu`5!hTjQ*x>eqMrK4YLBFzhJ*vW-nZbq}f<^W~99YEJe^`Y-?^~9dg1ORY zobTxMY*gv;eqnKQ@5@V^;%3i6;Ydtp-lBfyn&Gn_ZGJ~NSTC-Q zm?A=7QySY!J%a`DiM=SG{wVGc^_E*&w)Z}^vWuFDiz|Zypi)3ko&`o&3sUUu9e0=- z_xza!mTKlcyRFEW5R`}sxs(@6&UeXCE*BF0QRX=RHak&~B+~Ijx|&k)@H|JN=*tXj zTw}ktJi2%_>{-l(RRygjPz}_pt|hI>4Ulc4S`+(CvYUbh4_nAkPY;Y54^*ZQ%ve*siJOHw%BC-ZX1SxqxsS&knWs zxiMV*al-Qr>ybuOqQwQ6tmKXTAvZm@wu8yr1aosp&dHpC)cBMuN50w1&`(@g72lpe z`a};Sc_u9n07p?dq^uXjbXHwlQpsVgnMkmD73kI>od1N$(9PeDU99zEvhXU|o(0;R z(}xJO`cy39rwd1p*-M|-)Iz}N{y$}uicNX1V5_gzT3pOtWGm?H1fR1-;@mue@vsa% z!C0v&;Uy-Z0U73%8Vdoe(h~eW-K+CuW$hCZ6|1D`XBODt#MS5%vyHCibRi_8l+OKCFx+Pj3@{JRBCv};riRX@{8c4|*!Yvz5uCSs&CJ>!PeNwM zm5JB_4F|;P9*f-b`6WImr=K#-l)i2g(t7lGKpP*9mjnDl;hm`7PPiwkpV_ZJ=_;HD z)FZ~XUVnAN^>{bxhLPk@@_G%{)VAgzFMhP}>iaW~a zV(t@ll+_&_$8wa`E$+lZdX{YzqQdH~#ra`xJlo|my2F^MY`JR0T@|}rEV4}X{UX^x zevw-J92L!BWz?|mO~Qwt%w;S4#1h%uIr1Ik20g(RcnD!mp`9Ca%8?tf(4YyRZHKO04G}dU=az zZ&hlIuPMX^&yb zelJwl{6Nck$>tUfXExyi{K+h^K34cBYTx&4{L7HWb+4q zI)m0X$7!MY&0(IP(V8vPH5S=6>ym> zy}Ko!+oD|0xI_g%EL6Jf+8TBtd*o|1V&h+bc_xv(eH~lF6p#Q1G>*N!x&GD+N5E=M z3mFX#o&9_=@y#xEWjb$*9m3}KX@ixzMgk`oQ+%>t*rI^mRm5bO-Lhf@ycNMQ1N#sJ zI9F?CLGz4-q$(?hX{$!T@&S_xwf%(UOuN5MzQCz@eauR^<7Nz-etC`sN~(5FX1rTG zN1d3utTbJ>Bnja)-?&@OpoEtkkjWs|FY`E$eo3Hvno+SK+fC6r#Y( z9&Y6z@`IlK;>FfL3rZ~%JpfF~{u;qoojowV7=ElcYqzXB+}Lt`>y7^7{a3LgoAWK? z&BnE5Qy$ky`%7f>lRb6Z3G<4qqi>PVa@*iv8)Lr1icfqFx=ON&kCMpehp`lpzv`wi zH-e4C6%R$R`P$V~xf6`dhs5sO7FpzfI9j%VX3l>^t4;Tse%P;Tu55@i%o7{clFwJ; ze7?$E=i2hKwth-*dXq}UhfK^jmwEiENrp9?mo1NCszlZ-idH6q-8T+@UPB35(M!#M z(;O==LR7QUKrFaAaI`BkU6aMxQE==?7-Q4>vaAU6xz2h{za}~H>2D=JkV#AeM4U0ar7P(IegSML|?w(7nGuoH9QxOZ;t_~G-% z%=rn+#jtnu^0Fd`m_noY8|GoT@OFZVjE*|%gAE@RYauKp>U>@)YuE2iNqO77 zE?J>nU4IyU9CrmLo;xo#URK`%18b05!Z%U8LB=wh6W*cHk?`_TmO|5*&gJ#xy2qTE z5eY#_K^uA`c_sty{L~8^OrWT;`{N)osjT~J_N{j~4tUnOSo<6Bk%(^%{sWbz-qumGCDt||N?RLnliQ)Xf@rmV!e zoT2>r$fn?n&&1+}XhuYt zs{2^Z_A_TgA=z~RncK%TMAqi@g*({+uN$fBD7((yEMC_x7I$7Z-}q-x`kmxhr;S^U zgzLdK?C%mAl~?zP7Trd4lB}P`{EQeGmq4dB2K^Ea{Ij%wZFlk|>r|lr76dybufM%y zM?@|bml~_L8g-ZQEDp;drt=BcD~KP=oI2NyXc(X0o$egG+|d~=jM!>+s9WgX`;G8j zcB!@>{E&y9wGwEgHGK9uSq{haPVDYY=9uuwm{*AK$0-}n^GQ!>sb%=GSRvxpch+u( z;#cLB<@4RS+ZKE7%&bGH*O&YLLF1{v6H0DLj^@tqugdJmAY4F=Ipk*KN4t@UV7fja1mwOXbT zNTbW>SwoNX>wmizhR-r<$kQPN1~Pu?*=c&ro%fIGvSmQ!o;DW(HRt-)2POTY+@$4WtHB&h;1Sp>#`Kc8SHR# zf!{D-c0w|K`sJ+_`U81d?6+@xL0Kh_jVyJj#IQ|!7z1^Xq^$_o--Nw{2kth1H~QBH zOS=Y=`h5=8y&fG+Y|`8mTtqaE&8hF~@iy4N`#Rm`J%VNw@3UIoL!Oy(9J8Z2SF8#w9Z-WbR0JOUhFAZ>a%!Mh&$O+20SbJeGb6#@4F!m3A4& z2_pk@Nk-KX?XND}!@VA#K#S`s=L?k6=5LWU!|yU$=gy3#NJdW`p5pvsRzY6z_iT13 zS-CmhE6tXP?7h|rTo`Q&R2>@xP5J*D*po4 z?y^^LLZCB6xbU$Hi*w3{MlBYBPPut4-=jwPdSbXTm)A(+>0vn2!SKM@+)hwaY`(I= zX{C#~Hb?zUe_O)!l4(_j%jN1Nb;FT#=dt-xy$7J`hv$Q0<&dRZ55QURvz!r3=FN8q zTXpC11`$*Kfztt^fbVQf%yE{{;Tv;x=^=8vgE{JAvL$%l+>1<@(N(1%7r`~;EOOmw z8`NZF`sL!@=<&W+Ke7>ED85?RJ$Ke<89^M$-te%PXT0I}bTBNBV}v|$j8u7+KVaJ?XnB$jwcH_*W@Nnd~t8BaE zyGG9HAd(tlDgGMlN$m!BKmZ;|%{Xj+<`UwuN~YjvXRLr!L6a;THS$|MTSY*{Aps8g zado3vqw0w6`@D|vLl^%vG0#;p6V;suuT_oA&5Obhs~Om7 z7gBb_jztMe5#98TP^n

r4MEX`$vK0R&f=Jp?aD=Ax49Z=4IfAs)g0A)4Gw4HotU}0cjE$GEy3~1UXzgqqkb`E?dzP za_EWH`-LFXtsLqalWBN~zBj%<54s;fpTqArjL{pdsJK@2%TYO0ZP4u@8bJo~k9>s= zSts1dYe|v}dOpvvgTA}5J)^V8Oz;L!U?h~$HzSd)R7i!vn?Kxl;Wo;-t!|fr>^;%C zGp{B-kag89hSuiIEYXs#NQH@Q@vEIKHQ07n%`mq%qb+;ABHqA46Blq}3vcJ!b zYxlUcimJRv3Tusy3+)4px_<3{8?FoBDA_yGS$hh~O`S0Qg;a^@eE5k`nZbu^)6^_C zJ9Si!Y%A#}TCfl$AHzwRugRK!PU(}Jpv-V88Gw|A^~w#N?37ko^a}Oy zhGRbA3aNd=(SvzYzu`DhxPx#8U?DLN#$?63;oiA11z;gCM|1&L8(u4y8QY(AL2I>s z+r+wnm0E*s(mM!Y0G8_&Rjbi+=apKfZQ`qq3m2T$B{^ex39R!o&^*@F`N1_uU_EV9 zu(4CNfC-B1&iBwCYXj5godel90 zjlM@Mqmgo`tsrz78iTMM);9F9Gy2>ZJ%GLvKwlW6cNY9^wp#D+lexUt`byAs4($_r zc7d70XrVhUywogeZ&YrZlk6SqfdA9pWPKQswCSNGy5;CI_PJ!7{F3MEKd!jD{PnI9 zoNvA2mW(ZAJ@K-)n~bXhh#n+wym`*E#qIq^KLzyUEbZCRSk3-+sj+g~myoTk^@@{% zwh|@HBE{L?Lf9JTu*9ur@ja`Fbji*GM~H$!)^h(XiJuS;;;> zwb-OM8(X<@eO%iGhP7!SjyP|sh)J}X>}jVl0}Jpgf8$F3*(DA4_g+!kU%aJs>`qLv z_6L8Ym!lw&`3J>NQR>;fU4PE`g|d84+V=?FS$mVr{FPt1Iz`U}Q%$3?ZJAv&LqKYq zoHsf0jP@(hCVW1BBQ&c2CQb+BF!UZLv3|VKgBtaf>Gd89(yk^6e>joGtIuaEHlpa^ z_qN!)es^Orftk-w6MC(qH+x`XmF$i!*0FqU!QqhdWxTCtg0(f%dT%i^u&py1&NuZ@ z?~L0{Vz-N6pI7#mksG?;?5L-lvRec|=0^7X>5=cUry7$P7mm1jKJ;8GiC+Aelq4=O zGwjcsFX3B<^c9^0R8kw1oD>B19T(DL`lZ@dwsH$SLV|I1JnWtqod@$lJh3w zi)^E5{wEQS7B@0VPm8^E-twhB+V2Tiv31nky*7P!8Qa%D{{AI2V8qZGZyGYeH$cH4 zkcZOT^XCp&+qbWF>h`4PJjxWn3`!<^Og2}ev8@cpUSR(;+``d0!jt|3LU3N=-dEdX z#;9~!Oti`3{5UZMj7iyHrObXL>eQ{#=51?@m;Fu^V+=~cpDVBM`F$?p_fOh~PU6E{ zX{EF1UrUuj10u=ycnLZwx*_Onfgc+Ew-5gg^c^K`Tr_1N+ge`aZYQ*JTix5vPJR?DS@TpC3zoBR13_M2F`;rDT)q8buuwdX1x+lUb3y_)U}TSlyo z$40RzoZUvb?O^x#2L5K&J<>{Q%SD?mr5B$mT-9pM_}w8{W~ItgU$wl~v5^@>TslhB$v{RfQwX#^TIsL! zSf973o1jvLylA~u_iegmpc&}pQhz)Bp$)NC!gFedm7}=2HZgLySFsP$ChPJ>{U!TB zxy@fJ3aF4@xCYV}!_6M{6JxgDNGtnRnuAO{cGMN97OF7F%__Xy;yv+CFM6i#;XGJCmM!3`KC{<~=Arw67~wVN-ngv@zqhlGiqlP{=N#h_IC;6&X;`iRyFCDM2X)q;yNR4wkLbnrevn{^!%zcCjyv5kR zB>=kf8@2UX%CIiadA}{}>|?^Vx&k?uWYjh;PqjcrHvXJ34zg5=vFjsy5Q%!FspvGZ zL$52AOb;sga)-^AYqp^_=up5bG*+k4j7ruIhlXDvF2Ujoe@v2S7O&I$En$`gOOjzV z2|2vuvyDvu=Ce!)Q4*6_KBpz^KhoH z+43GJeDQ)b*F#j;7n(Y;&}}_V=wN4|nA^{EijeiN)KCZ&;Z~)f2X5>2P08@g?&$UJ zz^fmQWwqf1a4_sD9T3e$?F?{{?+iw4A2ePI$5JO|Wmc!c`=?aq)3*AHx{~ywL6saD zR*$j=KS_U0@fPMevCv-sPcW4<=TH|f0cRe(<{G$xB$64#MJpsRS7t7}_<$~y^DoRI zhuv@vPJHmYTDGZ&@VFwi*XE1+stuy;Yah-yJt|rHWY|c95xD&)*qv9?*-JGcKU3dq z%9HT=2%-t|d8($Zf?1vZhps>`8in|$q{F2P)%KS)X%kJ~LI036S; z!?dzc-DoItgWWjhhMX3dDbWx&$&Q&-3#ZfMBBEgKDqw_WV}t6ZeAN-JGka(xVtL#c zb=E{nx@--jC+axzT_61?NCC$dO2#fZ-V?E7aC@r`6zqulk`lAcL~plq0U-;Nte4(!dAn>5l_YcBRDqHIX7IOUA_0Ln)7&s z^H61vOAw6f)LJbk@M`l>H1oi7t|U|<@f+1tc~PJG$K?sp+4Xwum0b3Uxl*|R4FAuP z(ziIQG_2JZ^SBx4cpBi`7`9;^X>q2wg8!+o`Gxo?h1lK3F;Hy(J1o#g8e@s=R|*0g zzDDv@NzNahxBVK=+7@a9UD$J^lNbxo<$gvdH0Q+ezS<_TYR)r@Y!=InqV)Lfanm?M zDET4%jasRS2Pk)}=#njWV!2s;^w(%;QNCs$NJ&|gv4ubZbk(Q8`qgHF>#HXZpxKVB zp|r11Iw$A1G{M%`W?n~Gv|N+8xIhtqK{cgB?%fX~M%xfF5GSLy>B&!TB8D_JRUQO@m8W}*Rxv)ByBUNw@UkKN{cyB<{1KVQL(jL>Y?T*W>E)BV)0 zOX7=%%2ERB0}_l{`uM%Z5#jg|`$%hd)7;1;76Cy)wOWngC4T3)Ozt@wz8@Z!UTsp3 z$5W)+a{~eV>A6Wj2F`vnHx7C+8RA?XOi{fS*T?U01J)ZTj3`Mj4x}WD(*^6RlvQ&9 zbt+1rJi2Czv6QywCc?nb0wG2Qn7il8aN>ug{4VOAFMsrJGfa_&s|!y{#M@N-rjm|x zn$dS(#VfJ+CzR4vtK6*?`6w{4!OVhi~G1U zp(`O}eZxetiO^Bh*N-t;lHD0w{6UdWAVx+h%N4KBjICs*(zt)`ckAmVFwD7dF&%Nm|a|a z_`fgK1q*mEo)El==(OqM#6;#cyFN}2JgFJmzRFcvlQTx4Hf`zeqj)w;JhMXT(%;)~ zY)RilQB^$=oW~vO-z7eaRUgeAwV2?N5HF%o{>GFWO(V3%j+cFJYaRYlwrVxyy*G4d z&*KQA$F?cpOR##`RPO`O7p+RIZCnFXQlKLl5CEA&7#~)Ho8@10+qT_ z0`cjt$mfD6o1<(vF}tTu)U$PK1WVB@IR3emqXkFUF7*V4QR9{rV}vHXc#l2Ky-E;R z3uQ@^ydF19Gbh1>M#0nS9Py)BQA&mLeFU^%RII%vuCs5vjNm8>fw1p$u{ZJU?oR$0 z>J{mU4qr&V_u?{%M^72_Z0K*}iybgxY6-4uyGF`2_>$zk&KSo!tE-Gz8f(motYJ}7 z$r~rNakSuap6yqmWy}=Reo-;H6=ng2s+B!V6pw`k^04b|ua3l|#PfQD_*7v&GwPSH z3ln`BBU=G&OhPcv3pRw~)`x@tvP1hj4lKa%XivIEZB^N%=VrA)`M(=-MdI)_uYAY1D6F|JDyNY?G8IVTUq7qZuE;gq*N7 zf{1lr^<_LhG|bD*=~#hmPZHd@%ak=5$sH{rZv-+R<6+^l`Gmv{7C?dkvWIlu566_! z%i8dwOB6g#w-#Sh(Mm?K5Xz2m*W{mZRB1YB?5qWS*K*LX73HGgeNspqH5&V5ZJmfX ztA)YUEgbK0Mo&KtZ5`)WsEy+~k+W}3wPc_Evyg!>u|y9%tK6+}So$b&@qW1W1qW4q z-vP7EOVPJoyFwfuA;*&##yH9u#91cbSqNFOo!rM;Ue|ziCNQ#70=Kso{TxaAtil5e>vT zpx2fx9L1DDf({*guOyQGFFHNYsIsQ5Yu3FkdZAO6Nh`q?+SF!jxv{vBOjjP@lknq) z8)fz9@d#s~LHQ`nSk@EacpEeB;=t|~dF-#s^ov`_UwA1nwRYb}9|xcs-G6a}cSdFf zcE5&)&f*^Q8tdSR1ycR38p~I<&8=R=ekU2taf&TsZWxgw%hF6F{{4JTmH&vN)B3$2 z&6mM9ax=Vdy`kkT%r*zx&DazEzE?QoS;q0=j-rJWb(CXD4L{nF+K9h|$0-kHo_&OJ z1WWIF4arNX#*X`E~P5~;tn~#V_G1JWcgvOi~SRBRpwTxq26+6kk+s2~6 z00f`ydt~8}s{&U!JBjU}U&(%kU(Qxbw@^*kdF83U!=6AHqM4I*Y65OUzFWqAxuj{oJJyY?>)z8mK9ubI@mo-+EkgB! zsoA@%GEr#%=4%uxcb~7P@o}L@pHILjHLE zY{*K#4i~6R(qO^^ohrXc;=aj@&2zzEmqFymh>#ohj62}--HGJ&8HY$^)bwYEkea@S zJL4VMYtGMj4g0 zQAmCMcYU7k^Lt*u<^Ouk<+{#w?q=?0?)zNVd7t+=_xhV(7e0Ng2w%Uq_-F>;4h2-z zXu7=(86rl#J|W zXP9o7jhW7aJrf`SjZ+NR(e7y`wn)=B)QdI)4$3b)vFH&mPtlXCLl6=O#4;BmB2JwSKP}W?sj1gnG&g2@5qDg>$dXR?|CLwc zKP5E1WG9-hBpz63=W$P=F#m_7mG}08iDk#~1PyM|WjbHcJwAy|Ei8%9_bTeKLg3M5 zwb8t5~QXKCeTZ;=A7nI;CyZ zQ8|fdo(_b#2WmU~=)t3(a5S9~f}Y!oe1A#;+2~U=t$`7t%%+{X&y$kDk?B{J{0jZz z?km>Iqkc?#{mjy+QBgda5jLZN`5w%e?5oQxgk-d<&~%d_e*NZl>}aUz{rh;WrdKX( zmuM+GT+fe^m%dAP5QfY%S3_%>|FOJxLk^b6)pmn7+)tN3n6dmxEs18TOav`Mw;^hJ zxFU8PjKRSG;(G>YS-Yp{(bV0pM5|EnoS!Uz@HdO%XIyLoBsk!1Q(`$Uj}$HGmEQjc z*IG{TJo)&O;HxSk&9s375M5R$%;)aF9GHu|0BQab|EiAw8q4f{(zHrF(c&b*(1Ubb z2h(e$F>FM&(st5Mqj6Lneb<-`m1CV&V27&Bs3FYNFl@R<#Qg7)#IX;$Tf0x5n!*yN z9)&h%YOdi<4Xnza^s(?VcH3drZta_gA3Pxo=l`MK*K#y=d!|2cI;n2{h7r%cg0Io9upid zH^~qyU_P0C72PP|4&mXkvM3ZSwXv4i`^SL&ibDscT?~Dcd5uPs$+Ze-Dr41^ecr$_ z&v(TkUlK1%5k99G@2s`?nA=DK5jCey5x$RlE7FvgQDpO2?exz>f!pun`dNB8oWH=j zYojA_T!>C_J;d3cQg0Tv9)7=R(elIK(ep+7jbB+;x1t>5{!s!^N`^VSY@d*86{e-n z{+M({&x+{sZ+4kqjPP1L8qTQO$mV;M>q#E{^u3fv!pqzA`Q@!bTTs1HO!jl|9`6oz zV>fw$dHkEt({-0qPkj`_?>yI%FkVw(4@^np1iov*Rl&oeMli5X#!cFlf`+?)*>4(l zmpz$FYffL}@;nNNBFM8K8CBKZA_ptUFD{)#uvud+?*ANpL{Qykbncb^R=IsFR`g1D ziZn}VWcn1Bt+Vv|bkjQG1-VP!bevuem?ld~8MU=TnL*V~Zm}0$?HlmQ23B6vr8K&$ zNkk|69EZ*Aa*$T02GUwpZDmbH1S?S>Tz>U783Tt=Vw0xk(%|;ul9yUbhTqEe?r4oa z_Z5Qrlcoermssh446*l7ZkWau)zHjAy>tg3Z-KgI^HL0jD?B?hiLOQ!W?`)wSyz-% ziy6@MWMK{_-~7`-TSKdB6UnRUHw=pJ@~CdhM~brmyR5fdt~pWu2p5fl{HW)3SNoP? zaz&zp7LnCH{T$9Wgu_pcG6r5Ch#SwUrLm3OH&OUD0OHTuI+v4~veZp$NVWjG)4I8_=Y9e1pS%^ghX^&XN* zmV$pVsZ~{l>pZZGWaRS}9$#R?ikwd_Vs`%j{Q&cSKO3*j!quYST4CF32Ao#F|8`pc zrE>V^nQB4Txw_-$N+l)_d7nh!l0cUgLc#UbAuo$`Eiq|UHwu3%;<_nm$%2KhOIE>W zonKc>4yW6Ma)p^G>vWMHT{CwzrYr4F=1DQ|X1R=4cQ%Ebspo?oB0~G0^l@NWLpJk? znS0EgOOaEDzRx*DznE)dmaFF*g?3={gK#Mx&0)dm;Q}0@NwOTHJcO1RRTm!#&-^3e z|4;FzV?p2ALyc0>Tm|~iIGJp<#4t4`0CoQ?l>C1BFaP1#g+f@o2D- z@bP&S#wbSOG7ZiHT?= zMc3f4VO7Nkl%TY1n>wLQCo=MfSu(ejn5ahAw^Cbx3$j6HD^&{wU}S_P-rX$M(|hc@ zj@KQO$}z8Bq9H9B;yb}`*++R4ldD%WKX9cX01f{2OIy2b#|*3Dt51esDNKIy1ilCF zT}Y_D87H^%@OzlAwaS|Q#Ew(J*g}UJ^t|}<>x=xsZ&KJM`%^RA}gLwzA6z@^1OhS?Q^9uH<5OItN~k%+x6ij z_C~(Eqku!KdKlYym&fN*S!^mU7~7z$OFvcN()X=h)F4Q|k5xGE4>N;Dd1ic#$7Y^! zT(&BDZH=MmKxaA9jHy=jb9DH{Ud#F}OPp$@0l)3w#G{=`IwUK?urT@CP|87PV@|ScF7o*br&q*bzUzi1%q`f(oEC zXb3Z`e)}^7Xfpqg{>%p_4{?vMkm}LKWyavr$DB^z$CMwmT)1u>&;<9=s=jSo-Q)Z; zQK^4O?=qF9ho^a=93MJFgDI$t1bw^0CW<|2_2DyzV_5Azk+;M*I^%jwjCLn({wOYj z&T+&CZ!`dI1lpI;JX6pFgG+TP1)PwIJ&rE2@;H}eG3uqi>{DGfF+N#n)Tzlg;r(C0 zPuuhZrx;3bRy?nHr>jF4lhal z{tmp@mO6hC4N`96DAMmXOa7?Y0Dv=bxLN@UgE7Ur)dQjsj;|QT62Kx>=^pZb1#>{K zPXD7R{i}JGZD?_UeoUkuGcH>F^rL$P&>lSf2-d@Y@kdttOhY{+EhK&Mcc^$|NeHnC zy(2-(6e9*ES#5^;5nxOiWts5TRSn;acq&G0)Jh`XSe(+G?A8C_!KL<5fq-&=2BU%uVA z>BN`yq5qX`DT_7|T{>~i&bxd&ZPH3m-J_UMM@?ppT>{IbK!UGZ(Or*eBfrgB8nw(O zuC-`8*xAxBf^H`KvNatyE17?W!mK5--pyJPUmxb33Cz%*Yi{A!3HtSt{n^@FK%Bco z0Ls0mDL%nmd}b|6r$zgN?R-SfQ8GC#)v*Ia8F*&EkGB>9zu%7Gl=SvXDq15=UmIO( zUuR~0zZ1hbHw=S{T^(9e(41w-h+koh5*}Ssh&XOE%rdkS^OiNfxP`x@dNMB+>POv; zdHY?~`)#ggulYcD?Az}f^g5_v;ztPt!S>fn@zz(XLs|hZg9o~9nZaylRuA@(t5itRnv15Su4dv>Is!=T3JJQ(e#J$bb;#9<04O|m@3nq)yf`=BF zCF{JBdP@7elkP?jQ2SC+Rk-l-CW~%|ZxFMtq7BqYDLQb$H1(M@&19H$Y#YW(k-YXH z@g;@b=6i6~Q>C?u$5%sc&FM)7_1h;*?+kGSPHU7-L|w$-&U(@y>7u`NF%qIVqRhM% z5dxJkiZ8=-+i?z$VG;2^3bzyESW6mnNVybEqDd;dI4%ztWnc`%6QU%Bgnp2-l#t$+YXLQR6^d&A zpzWy&)Zs1$PL0as+GO9$vnsXcZyiiN>^|FJGlKZVP}$oulGZ8ECTqkBfQ1{KlO(R> zWi|b$iZ)*#Q39Qo!ui_-jI3qL3@|XvNa)c{PGx&bUEj6)h*4j>%R#MSVeRk+_?wT$ z$E`#3LQS_3YSYy~$|R5VdU0M?=q0DIK=aRxzVoSj3HQ`b4;8khNb(hsNn`|qUUFq8 zGM1Eaf<6AGYw)4am;F>j49vYA6tskmoB^M`EaVLm&ljkznEi7pHeyJ}Bq|Nc0DL`1Gh9Ti zsYDQ2!G35NUceXe?`!4v>X`yM+|IbV`~7W^#QLVIX06w64B9T*TYR_pbnwFoqm(3a zFdWr35pu!}npRYB34i)ldxQkyNzH+f!S(HgF^-pYN~Bcde^k1bO%`eN-TZGB1vl>T z!tLOyYC7M5GdkK-hXq{Jv(L$xWT;9g4T<=mw{}E%Mg_P-AugV$-)xGg@stb;-P`=_ z-NWSKF#;O1(GiarJHaoYVx#Q}lNjUh&A;Ts-7P(nN<%JL0RVArQh?ilb!7SDaR{FE zn-X|bdR7e+MHLZaMGqn}$xBU_^Rfy+DE?PgO{vhd?0gUe7+Me6 z2%J!djhrkb=4Q=A)OO<{tcTbQbEL@xb5)aUuQZf*LWoGpshA`#^9Nr#h&Q#?T0{Di zzky>Rdf!RYgae_AANrTFyyY&v;vhW!bQIaxrbaDiIQ{ty3Yiry=X2_I^oJV;wt9U;Yag$y{)$m9lp;(c8xNL#-GGkTcy)1P3h0ICN!yrK& zf!Y1}bKYfl@Vk)aou~K6gA-n6F5nJO^aDG{*$sFj2k!3GoDjq6s|rPy*?>7mnGlq# zAzYBO0G;?EPCI%U`qnAnR-X$lay(Tz0u8;qnZi0c!qE=O4^-{P)PyG5ML4viG^|P} zwJqvCa<`5u8WCbsBnnf7=vPv)Y@iq0gj zgjF{`Pvr4V@8(O3p=EY9yJSg@VhQAU8I^^582%-oOitr(v?@dNHjDN&?0e&V%^2VA z`#l}o@O0%{CUuR7Ql+w9-lu)y*y2@*Ue=$?T7_j2F+_v}9B+~i5zV>%_JYN^3Zm3o ziZ^kMv~$7ydEZv{qsFO+-wb{<6r|6M-(BuQz_Y2Z{z1U(w#;H;&0HSbAy!4ryAAhh^uaqN-U zK$7mnrqU5_5NCOeB&wcQW8L(-OU|-o_`X3*jL6H;&huUi=DWKpx%Z+Y%{n-2A31cnXQXTH1Lg(Yaxbm#P=3%EHqb`0TN+?sFvfW9J+Sb?OT~CJtoFQjXxx(~PGFzM7cQ>r zh6N%@I=g9D?i&R((8%xb%iOuFIx0%_=h5DkEAZumS0!85 zF@A*Tt3|8km zPkoC}ZR42$Hkra969gmm>p6CshUb8wph2*FsR3mc-S?gRi}Bh-06MRVf6Oc0y5%6w(XBkC&ZDn52&Ej$au;7+KL1Y!(ms8 z#3xx0UlI#<>Xe)9UkXQ1t{A8d|Kzvtg$>HZ4Eb;uNqa3D;iu z?H)%b6ybc6o>F#+oIK-*(QgNn$P2odk(ub9R`=`K^d!m?0i7ME6kHQ{L(BZW)xfTK z;&+->xHf{xf2G=?Q=uaYJgaVJ#}ho{we@-7)g6-a53ZJuOBHW^nbmKKC~iKtto>>3 zKCepse6#fOd`5G}rNxh}cWj9}p+zS_dS|=c$9`V#PJLU8*?1%D7C*o5cJ0-P$}F4N zu+Vsy#b+%lJPHIjo`rQlp4NKv87^v_HMfC8WB7gm>z#aEj>rFA;TF^GBKyT3=zM+i z7ieY>L%SI)e>GN<3hms<)*0}sxt56i6&|X2pVdA4 zS|Wp(h#UB>0SX*74B5;{n>$HtI|~iJWAlNxU|4F`>Dj`i^9h(`36aUz2LX~ylr$R4 zGgA+EgrJ6&X~U_FQ{$pFD$THPG?N7GZWN1(<`_MzgDgrZMEoIwaqv>qQL7V z5IvR~Y>9`YE33)09B&h-RC1M>U*9b59+kh{RMecpum5qN`s5YZI zn0?mTu8gfwJ0X#2@X@@Jr3Zm(VOP{=r5!_fmA5LYW*EjO0e48=AY4kmAL_X;auwhiZ`$eUVu@cj2x9`~bG}Z6`v>Vj=ymU8^ zf5@GB0Vqllr57wB%?t&do*WopffHRuWF8aVcdj8nD0NiNXvXvpu-u+a-L%iov^aT@ z%+BHfT6H+XX$I6RA-S z(fqc;{LhOnevUd%s2x_Kq4JxybRwSm`0l+rVTUGe@=%y4>vpzL`i+7DlVHtR?Z@Ik zk-NcTATb801_4c?Nq}tQc-8Po7ok$34XUgq!D4h8)GnSs{H7PK(tJ($08#CYr@kr~ zUXHL?)0pSRt?UQJhZxDa1j_<`$<;H8IE`(|1%-nlGq zeX23)6+d7OZjVUpE#{*6yt&xXom^{3`Bi8V(Q~(_u~R7jW-0es2YOs-*`k?hnWg!O zfGZF$aSaw4!zXBF=A$o4b5%2%GhIdk=nY7>=gnF}ESnn`d3UbT%j}ZIw0G;Z5z>GQ zyXDh>rt=m-aDd<=mhDW2xQqGR)4v-(;tg|u5uxH}vj+aZb+ttYP0N~1y_P%Qu<0cs zvD%GhpN_@aXsQ$I9IK00KkAq+Hab}APaQ@XCj*4;BhRT9T4x3`zy-@BpP z%B<}nV^)IeAm6qZi4~ZYpOp)h3uQVhh4RWQ^pwyp@?sRxNF#FJ!M}ePAv0^azCiCt zoJGEBxYJES8F!Jr4YWFe?eP9#=Rc3n!R%22(FgY*l-w^+oJ$mMVH!bLg=26;4|G$$ z_zWWw5Yi5ASQA2`AKVZ}T`oEykirYV{QM2JFx|0wu!k8NKuVyo1PeJ^g_jzLUh}(! zBdqcT=0QXNP{Il>q16U_R2@m&1As!_X2m&sH|O$YTyVqaPf>WheevC1r1K?nh{c`ifS51+m3R>Xh1_7H^c z*IOR?2IWCO;>yOg!}*h3slj=fH<+U8-_NXP-;nUG!^vxw8o0$HJPN4(-{@;>`kiUO zBN?t}<|$oT_k88JdQ+TF0 z(R6(`|M`liWx$H9!Jd&$5ImaQkX-x(Y?y*n+Ze31UP3IH4$cO|dzz%&A#+)3H<5FL zy>%LpbQ1$V{PQm@KcZ)MnJ*PPx)<)0VSa_Hu-Qx36{oQT2~&RGjoh zrp}$c&F?}Caf1OY&z6zGk+8=G)gk$06gDFCut%fkYYfNs=ihKKCnD?PO@o&}Ttz}% zm&0p5YAMGcx`cevg-)+Fd z{$>&)SZnG;3KDL2Yrl?ux>Uj*GHK!d8)x0I#$hzvC82OdBC=^9Wz&RT$<~JUQPt#6 z2e2WtOY)#lIyl{tj(M2xG(qA$-JF*IpP`~8d zZXt!hl^JL72q7?5f~wDtL!?M<{F#%;x2)#GPp%StDl>v+Ek!`nJNC{wDnQ_o4cU=T zM*C?TCwZHGY!|8~X9OFhv$ zQP^ksga&r#cKbUF*C>vWFuL_i%)zT5e^{*Oi!Uj> z;8=lZyqyQ?p$n{}Z8$u~jIcwv#%ts`{nC-&vHmgb z+mLNW?Utx=Ldhg~Ntd+3%&QTLaBZNn$P18wU9{}TzyP=;e?So>8wvvvK>+~EBEz-X z+z;>e#k_9H`m&jDBXXsK-G($UABb@mH}L=Aa)5lLtZwU%%w|BUjE27%3b$1Zf_3i7 z-0OE;T^G+#hK1{8=FvdC=hw`O8)Eddz{N$wnw)xpx(RJKYj0R>$HR+F1(){2&mA`7 zsh7Ir^Ec18(%=yS6n{`zD8qKw@PMvd38&(LV|POSr||Hym6T#Q9XvXcmIW$QcIuy! zZ@h4#=E33l7e6!=ZL~X<0~~ePivU;Yyn%g`8PRk5yJlfoeXPTaALkTpB2Blj@|PhZ zV<+6+G@!iae#+dP2tCL7HRbI130EC9(vzSws&Y5s78|FPbO z+As1p$MhQ1=o=EGWj0K>?x?-3Qm5oP50@af7rO9 z>DAq7zwC3A^fW%IoQynut<->@1aJP9@nUx#$Jq0d(%HE4bjpmM_{E@(;$eH8!RRgU zX!PZC&%k^lX@(y1yP^2ue(b*jWH+>QxZfNQ(*J4>ew$#4@*f5i2#33721a#Xz@>La zf3PWX*F9e0bL==)`A`1mEB(m)Utm+*7mL{DbE=`c7sJxI1l=3~CoZj-wQ8R8st4p@ zSm}d7^CWSRe+A&VhFC!0xauMQ-x`jqM~XkU#IY{tR~iFC!^CMO;#$AHyy|>iuFzh} zLM2}(%kMqhmQjoDo7)_Zkn<;qm7tW6;fC2(k%>b3t(LU8Lr&7SfacK=p2dup7a@vU zwas0fW<>%~)_i4bdYWEXTA=yi_NDg}CI!Y!B4yLTr>OzQdzX_91EVs{-AXn*#4Y4= zCNGByJk5i0X^p})MUAQlNz_%R_&5Uw9xvwB)~UO5Dtpcl_@%5=}qr4QaU&_b)$K${hBz<&(5DbtmfW?l0bshoN4siO`ROqAt zG_ybGZ)+68BoBAmg^>_~^-ZGV?)`^^MR?v3v}RSuO0FkO@xaz`B&5vxrdfH=lo*aR z)FV~JJC9ov!cuV`Px3I*p{Bw0n7^;IhPx$>NMfY5Fw#LGw9Fdw&0nkMQfpk#QH~lGxA$Z6@yqBt zryXe59UI90Ph}gQ45fIbL~@O@NeIAdqp|R5C zNn{M&5**7o9lidC{lMaC`y8(dz=Lk>8D=iGZs}d2=KcY%hfTk~+kju^xx(kYaE8GW zn$SS33T28Fy+O_OGNIQnBYwu?JsZi!J*1#p2N5UBlrYI;Z{4CyQ;dXI))^I%sLo8@ zx71GdyIdlTt(jm~PCmfhjZVVp7TqhKB!gXzBvYV^(OIwT^Cc}1Zc11K0i)EnYfa8( zs;D60Mr}&sUP7mx$H;2diPgT{?_+;JTsD3l=N5Yt8=ugiaL!Z(fTxPyPU7~mVN~5s z`(un%qBv7IjMfz5ES6Y;Ly!#W0A=|hKv`aD$rp(Z^k>LW7|Bo>$ryjRG^ZIu)w3#K zv@5e<5;+MQ4euYwl-qrwi?^_rps?H;yC)S3+1_1#U;RDKwWAM_#|eahkQkm(h~~k7 zyb0f$ra%YCh!r4F6p5VgZ!6*Sz=(rzq@Af!@}QLpVB?774B)A2XE%tDhB-QKNIxE+$OG*|_7n3B*|g z-K-*NxP*56Q${|GG}GI%Kpk%`3gV=GX>Wa>;;GhkV2uRFs$F}YdL#Vig0Q$N3XW8kn5{!fENwa|FU*!PaN?DD82`r6 z?z4ckdpf0D=i?&EzKdGo;hMU?Nuf3vrRmeAn|EY;!*mE9ck0kKr6U!Kl>G0XoEgIl+Vpq#U1uIMA>MJ`|(Vx9RqZ;Qn| zO^A>^!!iY7Y0?Ravg=aT=+FGCrdM8UmwGWu?FrB-?wMFTXV(8LH)*em z$%^F&j7`d@`M7jkeA>I*rMeF-JtCz$ETubQzPGWUwk+^FZ%azX)izon8bkVmD)@fl zl(ff4GMNF1v-?`A@biZ4ula9_rkze0(g`7bt4N{4qOXdL%MUjoGfp&fG>q(k?l)Sr zYO0+ae~cqRI)i7!%c63=9+I5{nrscu+=vp4e`6J(QJO4Iu%ttpg>C{8pb&d(1`{P9 zviZYWylpy z0C)HkwEhe+n74j8M~75DBIYTCo=jKX{{G96>H4}%8ECrO?nT2@DsET>RSS!qhQv;b zwtQtlY>8LvKc{+IxX){0p|Bf+Saj$ox3m&72_Egy3qL>W>r4yk9y1(&ce?WZlQ=wi z&H1{7wwY#LFq|$^w&*u4nG?fcKHhVv;K30Xard}>D)n#Vo>4QeVHM;8dw-4R(nfY` zP$7L+r+muysYk_--+?0hokt}OWCL)5C$7JH5RQl5XUQ!CwP9?%_dg02GkdLaO$6&< zM?xc-Sh(+$P>Jy$+Q{P@O!=>)?z6jW9Pyqxln{G#IQFzhASV#v#jNIbxQKf+v(Bg^zyRR$ax3ssoUs4N6?F{5&7Yed z`O~knx5i%|7R@y+w{`T0tZ;($dSQcFY0?7~h;{(*QOKYU!-O?nUn#Tmfa8IJX@!k< zx%MOTSX*Dan2_v}WudVr%ioRAZZvbSx;?^pdyhz-X{4eIxq-i?a1fUOx*sBTwV$s} zGt5QQCxKH|sh#}d+egjs0o$|t5y9K=H5R{5Q|Zetly{MJQls$-UB?U+DZZNE!!BQD zZSh*KOT68m6oaC@@>EQ|=&}VVNm=5V(?!>-t@+F*GL-rIUqqd>nA@9baaNw)z3Vw} zF_J%I2HSN-WaqBu@P7;cY7#n;RHxOVACI;n?h>!+AAhl6P`n5IqCkn&5clUYJbL~G zRjX)}Ce0Q9L22sGHns}b7At5Rg>*gT4>EFR>I`c}(q;THc&~?Qg^2!3kqJLXzXF)F zIFCp^nXJei-n!p5>e0banXH^6Q+t?IcAaP2AblJQ19-c>yiJ8r%IvTzaOYgv*dJB- zpxT+!^A-HNiR<96klORr>~~WJpjrKo=F1^JcR+eDIc4s56JS)n4&LJ$TVN)kgPO$v zYAhJRSwlrhOWD1-ff0199Qnl497B~ zEa@`tY}0HdGWr)HnOw>OL4i*KGbXq8Z`}i&?#2hy^PPq*^$p+L=R@0%eT`|=pCK#QE>wtKDz{;JKU8!W6wb!v{ zmyeHTi^5&LZwu{|adM?8Dnn`-A3W?c1BCSd2uXi6M>W~^8l-(ZhW}E6j420NPahnA zYGyX}GTYGg-XB)8SC+$hy8B7WwM#R;%{6?(%1MlrVD^UwWgoDp0oM#qw z8nSce+#%jI`@qSyL*$�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⁣vx<_*lq88y^#~yPe;WFn7@8IdS%LRI0i^_%vFEHMo5iO? z0rv`R9bn~m4{Q^4NYWa^W9PU;;&!GNjw|9gnNy4SonLd9w4&FihDAVPCps|BQ-aNS zgq&)(g@hgc!^UVHS~z_4kcf!KPjz|xS6#f9WWbWNEHASl7Cy0SNw^g>p0}GB8L4Ig zup{uGw4K@qX7`)758hI3`IGh+u5Pm=A}UC600gt>|6?h@AhLJe$Td}*myGOUdz&0ZBf{TkT%;olJv0gaNH z6CoaSAx&G877(%XX>|BMKvY}RO*xBFrt|%xdhK!ELqv&)_%sJPzI_O_is%Njo%wbv zUZZUm7p{!G6{H-L;;Ab>_esy9)3|T6mBUyc(go3U6DDN-F=0Jz=bIp4`v)Ky-41>e zI9h?9G86o>^^L`C)M+tRd(E)mJW`R_CspO+Xw%E^w*=Hy3EO+&jqoNanS$g_6~M4r zLOHJ@n00MeEY&Br1($>fA~cm?BWX{yxutQ|1_v12(9zMIVj_-r^4(iD-EC zr(|`bqDz122@;b7w@yxp=JI+w2FN!M9epUYBvVo^erJ*y00|iTYisP&#@IGoT}wkY zU3BhJJIPn%VOs{fzZCudC4gt>zmU<|)Wv;r=v7}8)p{j`m>P{OHxbxtdblUr45_Ge z3gLQ^eO=rLzwCBq7`u%56WQOaV+X4$Qb9%0?`fC%h3^>ty5SZRak@j)-covDc-LC> zKPMVSMVJ3^qB$q7W+=9y<(-KUpkw;O%t6p1u~dA-9dT5=idQ8MY>IYdfAb4@1hqx^ zr;1VHk){7bP6`h#6nu1m)_8o9^W{Hs4$81@f0A<&3Wo`e?^}p8r$ntju)uS%GxBK7 z4#_VnQ;|}GJ3*>v@t~Zkb@8CTT5MDsH!;VelI}P1UgVxS0s!&{0LbTdh+bO4=;%+M zn0opb$gGCwtV<9c1+V7s@|*reQsYx785Qa$v0X=Nv1Y@RhNk|i{`qZmh4C@7z>QTp z;<$fBY>aA2OH-+cowzQ<438`v;6i^(i@1jt2|oJhporV23s3*KfSX~7^VdM>jyu!? z&{q;Zigcv(JyHh*6#};-itpNaDcZYtC{>AI%IBhf!>-OT`yvS0h6wnI>J9x}E zuTWy+&Sto328BHk=E2E_a~7ovu<}-zq-#3JJCiO^MMje_7sV2SVnuS#*xxUF4VY_8 zbaefgh|L`$fJ=b69+lBe_?vn+Q?yS#EC;$+#xC|_u4_x+p#UFA5UAO1=z#9BHTklp zfw^Cjv5iw)s!+{lMdt-`o0yMm8dk-BeJRFCtobdTYhcEH{y6VxuzktUt1~nxa;&LU zc)m^KgpNK8(0==vfBgaQZ^f{{D(brZslN`S>r~A@J`lu7N9e$YQ%!3s?Mn#YJsvYX zYMhoDW{;*>6%z;>rgLfY(&j~%i6Kby-yxMzP=;|g(&eN<@sUrBw6qFq2Su=GX{T-N z5CQc|0(KYK!@o73Q$keRr$_MPoL=&v_=P0-i8o@kS8Q3-jOUDyN*b4Dlnh-{<-8gP z?o7dK8b<$klc$wfQ>=mUV{zOyb!2T&IJ+YZ4E>LZX$;f;;kW@8W@#gTB*?0$A0bFdZK{1k^Xh$qqqz@t`0{IQR7Ll;7q z)^`oZj zMIWvOvV2{hk22<^@?M|%un`5gFVt$P4LD4`|B@KC_;m}Y0&yrjt_a&OQs*>fBNO4D znO6k>z$CxzB3QenyYfhz{c6mZ%=G?rUWDJGFP_sNd+1KM#z4amI?8ib&)=C#LC#yE z1o72J34frV;AZRv=4xfCab|j~OsK>MsWa0H^gVwWvJ+Sw7lO(b8_k)hpy2`Pr_s>w zjafVSs)jMhLj~@8)kz&$u<+^iEzBhL#{_dSmmdCy4k?uH;CI5&Fp6s5@E8$*TJ!a< z%C4!ugT`L1Y;)a$*xN|b?e$fgs(T*Dx_*<%T`;?w=^=tMGEV)fExGSm5g#iJOoe-Bg(=2ZHB;@YYn1E!= znrNOa&&HfhIpwD)g%i^wc< zEpVTic8y4RWJx0IQ!ene9Vk)wSQ_@~WL zeqTY}?rVKVz+Rb3(6XG(}o_?j-HY2Uo}9p1LKWh=piu{GO92z;(?QCLN`Qk60%?rB`S$XiPpRk zbx4)gj7~xYlm==oU)blR5W7skWij;4!~KB6%9T)?(utbdWOrat*<~f!w!)_*>)Hr6 zcWnzs8s9M6`%vSE7=UasuUauMV$FDz9!KgzQw-&LK}RC!M2^U`9<{>fV7HiZrclCw zQ7<|+KL&S>ObCFMlm-WY+)3;0N#uo-je3MX6j5M&`*dPy6=7g<3+|uYxPd$nPd?VK zIyw`pE2n;|lgMm1ZWeAHDFs8kAYua@y!Jy9S5J%Z4KGdJ%E0G9m6KI)hA=8QsdL0EbT@-6;(2oYtrS8!M4QFuTItC^J46|D2>md)4~g;|&Ux83$yb zp+W@g`tnVBLm72b+&BA*N+q|aHBeBxLXrdso;T2#J>#6mKi>e*ifn)DhB$t$m{N}Ati(_)B45pp+AHm0Ttr1&zjg zpd&$rtrOVBaBJDXU~G{_%C$mj$%={NV8rwT(R}_P%Tz^F6kkEZ;aeFo;BX6Gl}m+! zcJ;N*E1xnb2)&?(ql~V$JRMgjr9oK&b@s}y%XxYeOR%S)tQO=ojPtg9X9#b?9akzE z^3NQESgc<(Yo7Dyt>{IYZE#FWu>4*u6@Xb>zk59wi^?a-N1Yajnd}f|gI+AfBbD@K z0L`#DS(_@g+u@laQ^@P>xh;#%$mi<3OiT#+_0hE`nXUk01;?Iw>^ zGMUU7oX`PjGzX)o`#Y$_@rB}idnrgIC01^cRFFm ztr-#mxeFLrZXoe#{ayd{v|-k*>zGN}V-4&oF0Hl!kRh4TqVWkhxcu5t*-BoUTw#q(*Oj)`@^M#ze7E-gXh zcmdvLY&tbXR8Z_Xh9`tJf^r5Bq(sb2FGmY0-}_U|-B6{DhHTkG5#bX6G}!QgvfG1z zl}9=*=L1}II2#=aHPncJ#qYp9&(XkRi&3kQ2-jyPhV4YmwEKNs&l+8zzm)Q-o>zi^ ze2KRGJLve&AccG}R=r3^cIp-@R?F|aQ>aYy;P&8t4fsE6Inwazs8@zs!4buqTp@MT z^2?1D?3GypZSyHdMs18FP&gPODS4T2Jv+cPco<|*@>)Vhs}Zg^5VY_;;KG<=M?FXB zOqE|n>+XXnFbdU3$70)kN@VyGxf^B#7SqzZjvl2?OxJx;Ci#`wJAx_PP>gbJPK}-m zANp1@XGhtrFs%7N0`;TML|W|4IN}7EUwJP?$r_=a;X|yN$2@ajT!oH|QI%a8wt)7pAlod2^B{ z3}ox=Eeq{6lj7gd+?!n-e(Y5e0dJD33vYx8BzAZ(@P}}7 z?6hEt?TtN1zu1A#Koh~4UJpDm!H;Py(2M!GI7di{F2Dov1=u7J-=Qm7PULXbZbD+? zRtXy}t9U9D)(?D`mHvy&k;!IyLf6romt*KLyRfk-zYfL>*rHV3=lm3Ii)(NY30TvqDb zD$zTH0uKB~)`ey@W)YJ+jy)3(e}TPE6n=HF#OB#Q*6McCdtiR^$fqCEbv{>Lpr^p; zx%fed^?8(H*n1Zec)+aWjv~zul`&BEr*eRsAb%}?=KcXTv>vp5B6Y8%qtaz!jmD^7 zmPeYgm_aWl`GKnl`^H)(_3y}KV*}s`*&JiBj(59vo_ccO*<0^s9($iqM06zsv^k*yBR$m2r3fDmY1en1E8wedU+?4QO()`2l!Yk7{qs37JnUZ3MQGbVegBwGuQftyHJS$C{ItdTy@ouBmQepeGC-(c#Xx&`QAhgwLk6VO5^?%B9s z_DCv~U^`m&HSH-_^~*)Deq(?bRc z^7<}NWEu|o3oX9|W1Mf(`C(*d_^)1f(N;w80!xJA$c(8uNu1rz>VbD961e@DgJFn( zDL6Wo|XO{t^#{@l0139Y4 zdigH5=7#uG_FoC1v342@xA=#?jhd6f8!szT{z%97`*I)%{&%>SdDOfJ-k2&wYlxYT zh|JfVxdu(;`s-CDJ>aa+4(tx|OBP8&=u9J;3KGOsEf?yX@S8Jgm z!hE)!NtFg>V2~^?RhH-MH#Vr_yFZcf0_ucnxWNe%Ss;oQoKK}h0SG50s;+^ez+c!C zfPVfkLP!oE43XC`L@)qucR(tS7g!YRoAEa{LO>hCw{T?D76B)m)eWn0R$_#}?tp}| z_(B~(FK@Lbx+J7xh_Da71~fcoCjjUA{=EvOZ?y%x&n!*=0=nE@i=2jNWWp6xtqQcS z_kca}3y~i}osuBrLSFUZejADcU|5*^>`V^_0W%Qc+YVlIvH%46=|Osx24!HHoCEe` zlonQ`1-#fO;lP)BhY8jCR_5Fao~Q%SOtf3~s+B|>!POgX#3~Jrz%(XhikqfzoW9kS zMr$Q|2)h|3*!N-=p;0eK;DT@*!4`>-+Vps#PzIBzR~Z($G5NAYRBaJBLapL{JsH5^ zW9!L2zpjRM2qH?u=trjmQMHS(y|LLUMIBOOxPC$G_|lm$t3fSJ z2%`1kj2V_RsHP}%RC`X65T^rtFH0*;fSmw~T}DWP(2`Q$UX2CNXwV6|k*n<@khR!B z<`(ZEG=)#eHQGZU>jFx_F+`5Qqd-$(7MhS6mPqgNB%xG@e2X2G=wF1D!;L$6hKSp4 z0@+I3@^x4q#d1 z4`ayh5{smmm+W5m;ax0D0g(XH?zQh?AfRY!K8a#EHw^*n*X7l z2fqa201sR!awSUNue9*QRke%`rNrtpVA2qT2X+Ek)BP->u1m4ddBbgsZn%;L9KlCy z;X+k7eaJ{t6zEU@6yl;olr-Q7Utx(90ka4y${Y?R3`e+%-Un+2IL4#{ArW9!ph>k= zB-_e~LJ-cOx1t*W&>3z;hyx%k=$ea~Cs*AFZi~Ho?k}W(25gPt2oIjn`%Kb=*!vna z0Qh47?K#k*LCH0Qxc$hn28H5}lJjk-K0`F_;8Cf<>EpIqk1Gzt5nTKtEPb+!r{DXc zG$%>)%Tt3N^}S+*$g#!vdw#jm? zoyEfB0k-q5O~$HqcW0Z!-PdS5cN5kr^RzdAh;*K#@m`}DYLE>zhnw?A2Se2Ca0WH2 zD4*yv3j5+NNVHYu>A*wd9ck$7om3LRHnYs0==Tz9cR&wwPBpRov49|j6$D+p1^4>} zV@X3um_SS`AXIxu$T229;x8uIGN!B`y?@`R8XF51lc+FQ!4ucHfOW`Xh=J*d@zacl z+#;qiI8Zv60zscMJ}=two1-O8Xl$uSw7kU^$nS^Z?FP5|5x+ppac8maqZS-X0|ob4 z^2Jq5c?bw2@?>o%Dtah51RJB#IIr&<*F%t(z^e*0#GrA@5MXT-A_D#A6)F-&5zJUR znF!^0G{vf9$%HEB3g;#41I@E&9CwMK*Wr-ArU3RafyO}yq6eP8g0m;wrUyN+_`bn&bBI~Zk65Y3rl+%PMmQ_*Xpj>-)%dZsM^(` z&+YF(5-B`V)#Fj=tn&34V6l!_^}F}0;eZ!YUTpy0RY{)r@wo8u-2L&)_i<+yJjmxo$rg- z^*GB5X^lSpyFQE0j78CfL66O9o(kU=ZznTvuL(M&$6(K{)EW*(Gwg<_(`|oCW`9k_sK_}Mok>Z16BXHU0R474jKq8d zn>_PfX&jq{c>dfW&)74^w|^xukG|_fPu#k0mu(|W#@m>3+KJxdkt6r;EGyvDr0JOy zyF6#9hM{?Gt$~EEp0q8EC*DWPE#ONx4C_8C>PHJ8C_YHj;6EoeW+(Zvz0bV$H?c9I zCLyQjzu6_|L~^xk!Dc{O#A(z>w8g(xb9Gh_9H}f{u8nqYN?auD;bY|0{?IdO8CA@^ z`fYiuRCL(eYw4U|bmDEJ(VlZ0j8(Wvev)EY^R zD(qjc1kOCUH5mbTt@k z=uc95FQr&jK1g7?z3%$0AOX)6?TVXv^rY#TL1MoMXq}NQ+ltBn8^8bFB4Molx?($6 z+lF^@BXE44t7T*w|5%sE7=7c?tHz2Aj!j&Z?Ew zmb42twW=RO`c9TLq%NB49F^}v*T;M$F185enh?XHGn>XuYTc%g2q#1H`gbAmbNG^+ z!WnHjl^NgRTFZUN2MDXT@G)$Hlt0dm?k;pV*-gEtRN3ky?dQ7n9u9kldafg)y!s2S zS_#RLN!{0<)C%nTvAMD5BiUj?t)r~oiSzesmN%`(O@uGLApq`pm}(0MD0mi2hU0^_ zUb-fX3kWz(p~*q&9A|Z6Yi4=oFnw>r@!(|crCVttUTMnP>7VQiwtN{njfPzUXM;wW zX8ky?3||Z-%4tSy-7#b995^~AFz@V7>f`W(zc&$zXES9u`2o)F=|!RQF^#}zlU+p)Ga!V z-@U=uLRp)!Nr%=RHw}Q|GB(%zgN6SBv_kn23UM=uHPh=Ligod~;?vE0qkaZ0*V*~i zX>H#gny?iRpIX$E>(uZ7O^uxmiCdqymCTF}bh47IL6@CnfkV$OVN}BLoBTyxSLJB7 zc^XMAr5c7J3d$`Wfs?WCxssDw6y4kxnQuW7z$5V@q1EYMz4vImk^R+v!c|%+=^|-f zy5o2IJ#}>6qmw}rNDaXz%i#g*l$s>R69lT+S6SG`0j@duVNe#?HYoDa*`=-_BO+ebIX*BeQi?K!l(elsId%GGh(NI|oJ*ac z$7Pbtufzr+6dgj{1)kWCzkKGftp=rIJBvnAc^N|2cOK7ss8^emUYeoS9p2asg0w{) zD;eqX1XIF?#)#a1laFzCQ|^JIYCuNv; zMKedwwijcGmT{@h2r!V!bw{wflO>Z(pGt21H6vJMH;^3aE_^4{bw=VomI%dS`jX>| z%>39tlI4^n8uW60YBGXf{uDGAngJ!rjLY~Sqkb23sIOiSb-zZ^73lhoRJ&PX5L&dB zq+6Hwj3ZD9lkyd*i6wLmDiUw=KuTNTh)3#ia7?tY)2HYQy2nPJk9Fc0c!ZcPQxS~QH)n7>b zxdj4O)ln#=rzL%m@RCn!F60*rX;6F=WEjhy9~fG+o*nc1PY#xmjjJ50SHres4om6 zGT6vvhw$2jV&W93?X-rt0Vjlzhr`D~EU5^B*ngD4uTC%-aF$7l9W25PnO&z1G2G^| z84&}oLl}>o5U3x<4JWe7Miywoh+7$)=Ar-(LJIB;axZ(0)mqd#HVqG*CsqcnA6sj; zMHQ}tm{MinWw_lEAK^40#P(Q7a{hlzy>(O^&GS7>&;(7;0KwfgxCVE376QQu?k))s z+#z^yUxLeGfe_p+xGu10Slr*?`F!7Ve*eswnVp)xRdu_%XV1)S`qoVFvU}fc?rg;g zaakvWH)mRLC{CYEzmG5Kimx=6-NSdC)oF^i|*4a4&aVynS#iXz-%R>bCo z-=c`k*QiO1_mmv%K=Sm=A8GHYla9)!2L(Q}f=NLS$A$!nRz~~tG_vl=uJ}|IMgLA2G?o+ zU!|}s1A3T)ju)2px|=WYhg=%UaC|LkOxb&}_}7yKba#Fr(P`3~C33CVLJJ{C>SSg&j@AIbm8D_7|ew z;4MIi!?#{VMPfkUj6|fR5}kP>z>DA1p(E$P8Q-^rEnv?`Q<>tZ?EkKj5hq>>VqxJ} z<1BhyCXN*H4)p$_3d`ZcqDZJoAcZv+%}ck4RP;IPIO#rY`|g?iMdhth1Ja1c<8Fo* z2=PyT_pgQ$#mM*8)(+2uyD85C40MKHylfw2UVQ#2{AqJ-OZtjM4}k~8H|a2aeBew;P3@jDGCo8TDaXF=fqX+K?O(5C`abd)Uk2cp05k6TE=_ zFRCpmB=`pHieEU3${DnFEN=h^g&gWh`K$wXGIT{M;X5yp?=oFL2d=oFa+RE1UB!FX zb6y1Zx+^_rfKGB#apDws$=sd}eQxPm@WBny3+m`%kXpxax`fa@3> zk|5JdF0UP?M0H;;_xr6%uWMmXKK^?Ao?y**L+~BMg^l8~pUS~i#Vd|DHZa*Iu&Twn ziJZN5lsBLi`QXCX`u2MyS7^cA#ZWcSPzFh2Vbz<}X)Z*Hy>FLlD|vr$6jxEL95DM1 zO4P{z{A_2p^gw1;5!>|JM+JOdgSSPdT1(UQA>oOHZ+iH3Y4U}`Jec0c@(;-Qj>Df_ zHZp1EfyWeCeEG;ekYGXt7v_X~vS3-taL)VGkhq5T0Z?nW3!m>ZT|Ts?^Frp4lf9X& zljJ0_z>f|1{5Am0LnB&zXdObz~F&u$v_fmAoQJMMh9cBflF(E* z(s7|qnJ>C94kU9;hIKC3@`Q{DFS@kv{#nQ2xRkkLfF~R`Z>cBQP==L|NowS>Fokz6 zF!64Gj~4gM*XLDzXW+h57~BpKA@?Q_V{8>n z$dFn)6v>kyZ9Ez{859ZONtM1UT_PC?)U6Ao+(k3V!cip0u{fRJ7iM7OoqK@iUVr(Y z?^*6$jKm)jC}y7F92gH==R0{msux+rdI}_c{a*}KQWxf@A}KS<$W%0P!(o!=qpE!9 zVJgiX*7#w3OltKh*4!Yri(Rr@7_$0!JDRLCk7qmk~)*$gfn`7)^)}VV`cT7(`HnqMbIp z)$DsH0{`Nq&9mX3@n#?+z1bz6ZusF1`fDa!;^gV8{eyqR@a2iEdI*i`s?J?yK&A1r5ZZ(bgm;@+zS>UmwCz+ey}-$HU#F;a z&rtq^SQpR>2^c<*{S%N8gQS$|yuQ^bIS3A2W(M%sq4>I2gx%-Hh5avd*6aAq=u|Ek zQ%&oWAK8d7xNCt_&V~6HP+SiC!3m!`%c7YW{WP0m8qv0Q_Jx=0ZzXS| z=EJNRrvXB+_n!a6xqA?ezyt{4y>rKVRmN;zMJ(s$64p_kdY&}x$i#%KmU5E$F! z+USIOAo;Curp)llE8A-Zbd1o}K)UnX#DJ+-~@| zf!y+@MhCLW9feMwB&N!&0dh^`&!IIwP@S5G-%?iA$c!GCMEU|iZZXb_{GyLUn{l3j z0E;9E6s94+WC~{Ul(~IXe+wj#`Yj%dT96v@Z=kz+DcvT+-RVBPhNBp1dw!>KsUWA8v#xdqjc2#mYO?5IM088Iu53nA?T)?Y3b$6f=H}c`fVY1vZIaJbYKDce;G2lX z2LcfjNk9&}8$2GZ7#zcghNf4id4Lrkfa+VF4EOh2!Q9n*F{0(W;>%7*MG)UN!rg}fOP8yVGfawC%_M}s*hyE;X5V_D=k)==%U7Vlyw4yK=O;u?ea zozmG2wWceyY6bszFP&a;eAhsCqoaC8&Rf(e_$zzz@C4luqUCX%DYK7u_Umf5>nBFj%Y9Qu>J|28YHZ*{NgEs% zx4gE|l!EQ2g6+BmTZA?GEZJ`4tF%xxc-MO37t_&OcsH`Gf?H>fg0Fp$qxWLo7k zy44tlp;NnU1BGzYVJQV=xfet*?C$v9TkyNw_Ve;|SH^`q##P*zeA5+VwaZ7|OX^?m zO~30GAhsXXotf(!5686Q>!-Fjj;Th`;Auc#aUCAcu?%F)yJ7mE zZ%^1MCV=%sdg9i0jNU+f+KCX@qw2*)&oixA{SPc_00thrE8g?@fV>*wQ;Pi%(n9EN ztxPF>&ZkrT_|j7%gzhWzHd?KDaGprddAvylQp+Q7g$c{vbgyYM@y99KV5!G@T>s`j zSa=n!RQ8$S`MQy)V>kEnP|1ShVMgF3p zD{zS{LfH1^D!uU7^1V1?qSMAhectwj;u&Ln>o(Lj4)_JpJy*e^fng))Mm(@?*&Fu@ zTC%4^Uz}%EQ3+tTTg+6rd;X8oMlxEWtMn{LJ>{>qYi6skpZ5FPx!yEx1Z|0VXTMBJ z`H2%PE}&5vPLSx9fh&06DkG)THHJ8+xMhNvhK+cSL@PDF-?}}^aH$PDEUW8P)=Cn719QA%-QLhP6uP*W0o;K4lLyh;Nk`=# zhrzi5AT<;`{k6=!@uASlpRV=_F#63#;6-4i8;zcuX%#~y!6Bhh6+)V~TQtxr`5TF} zy{rJ@v&nc}y!#|qjfkKNEfFu>-3_8QKSNSNvYQwYm;f<`{zPMi?~w9?_iq$hRSIj+ zjV7w~Osx$U|4XQclp(>fU+6l)+N@+!SQpHNw%S3!D8G81FK0{s61kv(`6tSX?}cMY zYO0xWgFm4N7ERQTs;$O@IeZFCzcqxDY9kkmyn~(~{{SOlv&CSA`N+>DJErNL8$FKp zQjs(qp0KO{DgM!yE%VE_`PdY9Fe}fVd`#1s0)>k<^3}E^*?+Aos%!3C@i#KT z5Q?pjrDI`F99+Ypya~c6=DJbU2*cf)Jkiy^Y1fEs6b08G-?(W4z9t*b5ASY7tFWC5 zPN?ac7r8EU>U0(nVE5USx3QZ}+4QYkqlD5AC9SJc9}eG2-~1r>&jmw4EUC|~Y3@|T znry{pF)24$V*XYcpP6iL70;%3iwq zo@4nm*P}kFo|YYRxDUaQf7v;Yg8%xvvkv>;Ug&KJKIlbSNU;?mDBmDsRo$j;|GkMT zs;#HTwVwEn=ur_?7e+3PiM5j=aWXep?_H+OA6kub&6ZVpqj@f-_AO@_f{e_dSpf+y z7N|n7<;U{aUahT(I97kDDYlsg;Ip%lcLoZSN9O%i3-ruFE7 z7J-6QoYXZef%t8#S-lS=-gsdm!PVh$J;k*dra?(0emK8az&>v^jr$wt%kkfa^eF!{ z`#eiDXgrcJy)t(pV}rqIT0>-I_t1yuzOM}tS)stSL%TzNi`IhaP4cB-&2^UBR*?;_ z1%%uuk*PCGdzuC4ZdO)DXUzQbX4s{vs?zQWW`3(uu7SwP-ympzD#`BQ8&?`>POZ*~ z92Le}{Qac~xF@g*LsxDtoZ~WRSjVlHNk^QUFveDQH2ydJ?*P_xfq1VVF+@j2;v}VR z&>Lr2&&9o5ZrbUy4=TE+5m(&m-HM3wrRf{xv)ow5hqhD*J9%L3KAW<&*e+NicFr$2 zs*P!SpG{cv&T)U|oy)ThohnyT`B3m{8qBQ%=v1HWTTP;k7R>Hi79D~0zeSX5zi^4p zmJN(${jmR%ME)mSry3xk+1wJ&4OA`+>Jl^gZ}Qef$nW*qG%t`aiK5cnEBECJj3Tcy z$JxM*2i5)e4U=-l8s)l3sdjCeqe%LwX}4x2-(+q=HPbEmf2tCFOH1UTEcR{^<({YN)t>sAZCW*L}2BiD&EO1JJ0_1TPq{V7j`Z^nGs@xechF4*bytc z{-R|Fy0-y(-|`Gl`+3zs#r^;KItjHgtACI$wjp$SJeEYr((dH8=5?A7x=8n$A3yhR ztxs+P_OWaaB~ZM15lkkq))_NGa$1gOAj!Q#I$@rXD+dtTJeU`S0ah5p-b}ftyj`(p zUcMlfH~E*JYo4O^^QqLt&ZJn(_8yh;vY93on}KsW+|0!p#h!92Ai}NzJ%w^Geityb z6gvV(5&p3?Xw|ob+N=ADspxMXXX6|5q>G!#dx=Q96N)q?Qxts-`{4E~74(UV_q6LP z!$QKnL%7TGCvCh0Nt)LX%r9`&-wUD^E$EFeO+V0^|Dm&reY9$F%O<2$v{53K)S z!3m0^Vd1l6XhGAKvMwm;W`_p_7_o$Q)pgW*&lQ+Sp0*L!LJFnAB+MUE>a+8lGgXo1 z){7~jiG2O{N-`vXM^h3$*TmGZ;9B5R7Jw6rt5`uxegRnUbSf9 zFaSuI5*d?UtcA7S8JIQ<`UI~0qXC0wg1#W7fM=rqb9*j|QjTA=;IE|ynt)mOH!kx1 zf3+0#Wk{wxnc)sjRChg{65=p0-O&(&g3tNb6Ae{CrWl$TUFqsb5dbi3Zj10C+}5LHc2 z0+GWX<{4RhVDPiCF~2e@-_0gyMIrzL1>UVzkF1rRaZAZ+t+6A!{Yy zs*+?jUI}?rfa0FITAGg%YG$04@g)7brmtfNx$OWjV!8F?9!0~uQs>J0gc;VE=WVgBvvU6PmX zeXWz{2hj8QlPdNgIu3{I$D2$3tE3+n1^O>U4<{7tbSf$T^%;=;4)kqLBt>iG6V{{L zqf_+CWM_W;xT^G=+1nEuQBTO>M3c2D~M@qNyv!k6SjC&5f$<)KvLnATPk9h zLlvPCgCFYOf`1CE|C@DE9RWK_5(W_Bf1@t0sG+5%XyFv)Qr#+I*!1M31#b*J?wIJ; zgP94X*?*?3bc4elMn8SoB864|i;deEmGoJO+p)sKP zXqJ!i{h=g8l7O)0!4282wp#E&!FWLu!+UcM+W14aeqc2a7m`wycTpzuD+2`_yIzG2Pc;Y`0Ql^b0gc9@TzLUZvFC^PW@6(2@0mzQ1r zKFw_MsY5c&)=B)<0K#W3rG{P<=prU6)6O=qnjiO{EDy9X@2VCrAIMZAXFi-}%vK9B zRQGKpZfM^J?+YbIcxqTsYGw$*_jP4Zv;Af0@peRZoIksqX||N%1^v7(xL=U82NlC{ zEH}xf@j2{Z6qu^%JmQ^635K^C%&=Ma&bflA{kyTwfsuIaifEB&9TTT>O#x=OJ6wcE z(Vs@J7LcHMm=ni{vfGY2vDPRycvr^hh&2x-S}q{D`+XDrkC(YN&tfmrU}_`%Rc?Rj zU`LSvYw13sG+qFHO6x%NtFaG6y;yinF1`M1sJ`!tt`ee?&?5I8lG78@Zum8~%Q=6Y z?M14P{KPTW;UIaXju(;%hC4N>YN`x3=`LO8kQy8ntROZTmgy1TwhdKqHyu|43ubM> z%eN(u9+>xKEMG8#6|v_keg<3Mt}rAK4WH6H?fqFkWET=}-!a)frYM>@Onk(uDzER_ zb8+FkWX5^Aj16vRNuU?FNU>15u?8`iSZrv~o38Ctj_md@{K)P1${G<_kv+zVNFEf_ zYI{c;V$5o6cs3%J*%yM2+e6)mJoZ6;;Rj%ckN2ah+fh}2o_ZMZvLLpv#-ipon72BZDnnMTC<4Aa&YUVcju&lvfqtzXU zglhlEtuMEJGyXbEN0iO%S{pYz?7WE(*U495Z9itBr(W{jZShpzy;kMh$Ab)S!#ct< z(cN|2->9e*bAys=?b++IdKRudOtdLoH9{y=Q0yFuK)OQd9CcTb7S!cwSg^XOF1G}o zrf3u1oMF9%>+SDX;{ruQDkKI}-+AG6#X$$ZPNhC10! z3((YH819LdQh)NF49Gd)&&h`sXlcNDvN)`R{H=WKxBC~?=uZ86vwZ7IeRUMqZFF?> zQjrnwSe7?y*wJ6fUzfLErn*id!aknL55r zxcGWbOO-9ve=q8k`5||aZ$erxa;$hDb){q5uKG+Qi&{1B^R=5fFKA?qV=Xc9Yvc}J0rD37RIAZ^=)Mi5{*e^rkWtS?S7RMWYQI(pqve6RgJ~_S*=I0_d^Br z1{VeR|8;+z9f*71{#t7y0sCU421~8s7W6QFoK-3DtIH)nd!8bxH1lUADnp|8$Yr_= z?`JD2Nf0&mKcUTCpOGLczzvE^JgQ*@It#y`(bGsdzZjP*t%`IEp2lLU{3j=l)?Hh( zfnpNM>wbU-al6?z(YR#pATgy|(^393yIdd^QS*+?A#pfa4_#EBTI-c ziTBVErgWAzuu|dWAfq%Z)r@Rta-LNF2aq8gYlUqh*(q9{=U2B%v0XGUr^6vEtt_W7 zRgmxRquM)9QCBKy3w=+A0g zeDHs@pkH-e`Ca*(=6oDcDpHw*Ml)UI;tLtq&=yRi93mXXcSTD<-n+W3l>e22eyA0E z-KmU{Oe5TR$!!CtVpoEH=V%E2XVvE?7=B9AFHo%FKG_403gRgn@SSw6bI);gagw_l zI4^1#@k>Xz52^B;{GOcY+T;Mq77Zw=MyHY|8l%nEKGI&G)Xb|3YemQGr0BG#-1rR+ca< zq%V(~Q}r3C&GWVCV;@6KNh9YchIq#OeS)W!@^tYgrEIK+4WEWq&4s;6))S1$*-o{R zEK_&9Y1<@R*lCI{irzy>QegNrzr4BQplZQAO2es7FZJ577^BWGT~ztF=!s+#e0CZSWN^ejw>Nb!S){-h!3EEu_gJLEw$7Y)XDXhhd^ovvRJ_kg`w-+UCxV zG`Tp=z+GA0R-1gKBex})H~$TWmM?t7#~#O^XN^uU(6=R-3xwvz+|$3hP^1ruFF_md zcA`CcWA+}X=VWfP+YPl&o;-b0=2F6Cdx%rSqTod*8CFb|TROm~tsnG%vYZ!kI(~TX z4MxxSF)Pn`Ju*+X%3IemPiI*F{g)b)7)5@R{TB4;iFII5b1Nm8H#!bIc@SU#eR;e2 ze6k)2@*Z16)$?R%YMOUHX{;2{_u{3-*v#TRqycgwhn$qa%arMIOOIaTzrcQR61=FwBlrTE0-TVEzr#%7Xt%&jRv!QFVsAahJ6)b6N}kHhR07`HFb7HtR8M6 z89tgS$@YS^=eu9`4DYNZ#R$h71kMtzCS^51(Vr6E71ax9g0`fDO=xG;waOip(m=vD zVl@uRaFJ5kwgK(hzom;Wq;(H)Ukyrabk-2TCz?nB!5;kbRexPvu9J5QPYuqNK38kC}q`}gu?k=86oGJr5>F>)&^T1=O|i$xLg|Nz_l0mw|%N z8AJ5flT`VmPN1dqu00u^V(tmPs!MXrnI|wz{6qm z@O=U=P+Vr2GNT>Egrj?BXX0zBLO)%%IeJG46i;XpeF0N*XdabQd#s&Tj_gqD`MAD| zIujuk!zLIEv)Ps2^Gra7*E)ChX2kPGBN5QXSqdy<|4t+!b|>)B;0zu*@%mC%@m4*v zrRuZ#4gpe>$OgYpi{LEge@_Y`?#7PvIQ^IsWRtJjD+k<`RzOYYY}9R8I%N=FcF!p@iFrqBH3`_F;cjp7e{!gQ%O0Xp$W-SI&0 z;R&}-R7#;l-UmeIQxmm_U*IHNF57qWcu-CO4&v80oNv!4lS?B=?fys_cMgq?KUajT z6L_x|cHLO(<%~sCi+`fM+Vfyr6?V&cN18spz_wDYl7C|S4)Zc~+# z(~b<1X3CvX?Q&_wi~r0ZfSK2`+0rkCeGAjWkLXfN5ZM++tJh3hB|^jyY>mXLfTmwe zV})q6?$Yd#aVSpNyIdluhnpii#n^tPj_#Z5M4 zN3u*Fir|8aihx4BfVw32!mI2-+6(-BUwDB(LgOY(*HTCP2k#AbH{|&r z2H=sgwWKTIdCtfbrMjMD#Gq13;j@PVR!2JaNkNqRE7u8Q-kqL}E8JRqSQcbgWxAA- zJ3KSvnT13n@%yKcYco78op?gK8>@HpiPPN)g>rQ74IM^YP6tI589I~aH@#}0-8y=1_<;&r70G0mkQ#X} zw~pEw5%8B}n~1=(U1kPb$cAF2AUDW%{XyY4xog94klD2JCcponl~qxZ-`FQasZKlT z-(yk7{g_)@&Ox8!?mh0RQuDUk>6dNCmNf2P?P_(+YQ$S&VWi;M!0p}winjLLebsAx zrLM~S2SBmMCon^rd`4dXdsq=aVAeOoQEtmA)ymLh!-7b)0~VgHE$dw9599kHq^b; zaEAIcYv&!rvNsn*Lj(6JR>u@Pk7ef-<*XGn@K*C&F&{chKb^R?)sba?-90PtDjJ7| z+cV)Q>zTMCpSP|!S6^;X;#HR9TS7L5Djx<8^utxbyN42sOSSxGioQG?;wh*?a%$<` zz0bOJHEA+YFXKIouoeiYm)VR2$KBi)JwFR`!iB;7OEX}DU%A5Ru zGp%{r3jD@OWTSpIWoORVsjNWbjTEh`4HVqxD?Z|L&!%J4rc!rF$#LL@W;dsk#Pdt? zz=0bfuhjC#Zs_8WSe?I)xKrh(efuPV?p@-pz`3eO|HoO^-o~j({~Rb?=kc=lZ@tB( zVt!e9-%rTm7Wm;jVCUY(q)1vdMYGlS-Sh72aKN!t>yF=sc@Wg=Os5vzTd_fwyu%|c z|D>9RX8W4UoO8Q16O-cc+0K9^$Cjxmc9Z@lJFJO&tob3&fA*~uQQvaL3)p~Qx%2ja zyy0^X5`gU~`rR?goe1_4-~-owPeq5CTKjL#?G{lD}bw{~wA^|Qwc zLJluH@d;IZ1Ex5&rvyYzyx|H>g|wDa(M-Or>yR=lC`VR?BH!7ONPeEOVw z!FWncl_a&@BZ-v|A#iGy;^=uk=LU?GWPswZCC!VIwGy7~t+Dmh-=sonDXm2S^wGv~ zd8}m$;2eGXdQwNgG2+P(*8G&G^J6idfy3^D{(t#IXJ1&_wWC{INgC5@5s+Z?j?`Wm zYw_>bN#AvVNeF76h~+eYi3eP~3TtofpmlwYuK#MBeQ}{B*+ase@6@Eb><p zu4CgaDV^vV<26;@@z>}vZL)byx%#7*NGED{T-N~2t6Zm)-ZGOsw>w5kHb2#69T-Lx ze^FEjQ*I;^bEOCHpU=`ci_~O3^OACCZ+PP|=fK^YBZJaCMAmX?T)C&wU z=aereZYP|-hEbmQ6H!gMqk713ente=3OhXV{xj>?qWk!DuZI))U#eJT2cc z9F$HJ#HJFp&anB{7H2LIHl>&+^Foz^%G>dIiGw$+2-_hF55_-*>dx2i63T4Hp(1~a4A(oDP_fAUxEH8<{FE&kL` zm3V10fpFhvdvW50(cGJ~a#Jx{#QuOh`|QIR$94X~9GR5_gQg z<(hyfaDeHs|Hd0HR2Ra!!VEEes$)+H5~BV>pJryn7<1^W2)htD8~O${LYX}H)xt^U zLnno=&-G*p;}}o=)t2zJz0T4SIHkdrYUJC)&O;PTqI$g`a%GxYK36ndlSetu$o2#hnyD~uijP)3TL`P z)IsU@#|4|cH;46;se=V&7u>Th_z_~_!5Z36#`T)-E|wM5wS{Dg)MTgUK8;uxI&Sc5 z7z_5LjLS;J|HzH~Lyjj(sv_Fs&zI?^eDb;B{3UF`=7?*&ezIx83V+vlC`Iq)+g?uW zEqS3ZDVFG_4piIo22Rvw%8u7J{EPQp80Q@?&fHP_4%T6*!)#Xee7@3*qq0ub@eGBP zcW0INMqxl)!rryMl;!pE`_abhft zJn?IzoBP4N>a<&nbKM<(ZbQOcpO$&r?3kv)53mcH79GEwn6^HJq}7Kd?dEBgt9xgq zlev!T4GUhfVs(bX8^&xN;*Qy=%$T`C_63UuHgFG&tWCv3xTCG9{IbMrhH%$waf5O3 zJ#nm@`4!N_R|{@mmP>Bp4$D3@*#ix>Puz=fRl9>S_iSJMx%cCSaFaEP>^@ zSjJTK^6oENQ)#;be0|X&mbredX3b!?agl^Iv9*=$X0?t^XQwV#hb$VXPi6el;@Y#VRxaO%hW|V1FN@KklT$<^KfCu09qY)cQMLw zp}skqKAW5@eXlI1*J;!4C6pOc5@za!f1WXIOi0Lg>9;NtumS3TNH?=xY83gc_c=Y7 zQ^>TTncRDNjK3~VK6a}`#0B~d07L+-pamxz6!k*iSCqhEXJem}3`bHGkc8A7SqKZUm5f$DbFVlm=R%dFo& zIhu&Pl#S}vkD2RZb2;RCJH7VD!DWkt3H{TlQCCZR>_cZj+bv|xgs9N=W`(Y1uQOnu z;I}?e^NU)&kPNWXBB2+)oYVY`(?izGNg}%!x{Sp(C)vu?$BbjiC|=fSQTf_0pnjA1 zW6z(hFdI;IQ2ZFTmg*H$ z>wiRCwYk+}`^%*{QlByEBcLy_TAq$|DG63qPX7EU zSKdspQUVm*_+uY?pyqg^{17S7K1(4LuG#1HPjH<|%8Q#K$DG!v`!ao^NobcF#Ls@L z?Uz*s>)4y@{xmeW>TOOEEFb1sdb!8QDhzeQNy$Z(Nm}cCyW&G&wHQOasn-QK0N`c| zQu1@odQ2M|JDY4v8YJfueQ?x=N7WTCyFVqZiHW`_{u#xhMg_hMl#iY-miAGlQ!QWg z(J7hiz!%EdeZEQVW14H+)Om9XG-apjqB3X7=tjlMz)6UEg{i~$-aY+-dD>CPkZ>+) zGj+E%H1huP#wI>FV=TP_hduCs$c3h8SGOxRdLUtD%c8`;L?8q9;HGH#e|+$r&H`9L za+CmU9pmdve}9~~u_E`7xTA!W>n>bLdTKc|EhQh8`h^HhsTA5yA3yEDM9mhfeREgw zND2e7@(a-($%;=&cHC=M8dWOHA~<`7(*}+uh@gW9L$TYsOsMH+vWz zp|m-f-g~y9F^&0lLhOwPX;+##Iw9KxIz|7qB8!D8rx}@qtXU7=%uZyVJdiW+tmJD~ z=Brq`UM*>54bggVz0z8X5$aK%uECvsy!;0hG9+BFkQpSOn+xV$-P9M zj+6A<*Tg!4#(-_?*buO7lv|jU8PWH2cmw@@m6Ow(q6b;a?R6*c>=Jd-$|yoLThgWv zIK0n{Eg7o;1~4o(>%wAww4B(v)n7Jzi@yA2gEoJCYw{M#4n*y&3M**~l>_h0c|A}3 z!v)!bvLO9}cMb-RO`fKn08!QOlP6oME$XaARl7)muCo6!unqkg$^MAwnM)hwlgZJ8 zKH+5jHU$(#r}`vfaL*C1F6+^=`BjmZRbl7B6)yc8Vury^}3xpV22i6}zI8`v9;s3-Tm-=Kw4H0Swn-(9aFk zoknTx`&UPfnME*2{QDb6gFc>waaHoaht0N$I+B5ks#+$gQ_xR*hLA39Qim1OjF`FV zrFFnjK5xE#2q+^q+))o;!@&>$rp*-~h;}AGkYKAqkHmm9pzy|P9$nlp^ETgCpD_Gc zaO#CO*XGGscd0zce&ox9tcjDd4WF?4%$_V+f5(`WuM8Awi?U|amIA9DgiHk7@$%Jt zu3f5MaMEhFuAf{E09t`P!}jb7;#+K66DRgCx~jD*1mEe`Ypgwl1Ca^r{d^9n!jp=& zC6CIUQPb41p3z~FRpE}bl zl(!!}wH?hn46c_#1HY#8LZ&=`(7*y5}YN$CfAQIY9G%G5Ve|KrC?K$YEgZ<@r zsq}QU0rAX@xVl>;w`;p$K$N!id;eLo@yN-Ik_i+iZJAIoIBaui*HUI^-z4QYch|@N z`4Cs>^k~}8sVyV7tDYz-IV0VasWQ9egA2E%31%_dDxJdAuHefsxF&F+Px-TW}Zx}E)~kM(EvqaoJL>_-Evx!I3K+-9Q%bn(kc3XX$x z%@)Z<@If|WXj--G?B(J<49C@&7qeGU=nMnM%^L9jt8F)-i-LSI^%5KSyjn zsp;)QK)mT{;7NKugO%+~A^*=&-L{Sayn@w7C#{`X$t0DoW@yn&|Nl-@D4ERC)$Awf zc??#zZR>#G73@Ab^Q*J}ooL$DF@jgH`OK!Z+bNke($y>`={XEmHhIbrn7SXuINCe8 z8$k+}7AaQduwhM?^39D(ZPfu&4o4}D_F!A~`%L>Nyc+M*DAJni(t>!scm(09~DSLRE(e`JhZ3uY9-K zZ9iH?^hI4i7G1JNcw8;=N1Zr`sX^H6@Hoe$T=B~rL4bE;j9~s)hMbKc?03WtV*XgU zlOG@Zz0^^AgxS3Uxf??$^FF|(T=p{?0nC{C05eFy7+^*R1g#sIU08^8?WJ9>=6 z=lj9nMT;NB0C8{^e@WJhuYU90#1iezlzA`CNorVv{hjQDkr=Po!92mfP9Z`_Hdl`g z^^i0`n-OLG7-VV%U{tk0eSIuCX^n8YTI7S8a7@-!K{Ip_v}=JU z@!PFE^zIcuj4_1!ju)$#l*_`pV?aQ#pg=(G*q;L;xQ_W_0geCc489+vqgd>)haZv$K$>6W z0zu?hB9`E=gdo1W0{`JbKzG+Sxh(Yy`b&)9;u@Jhad3_vjGH}$9_+fS`_?xjmw;j~ zre0GrcTB+JCerz&SP<#kRd@jpLIrkv5}MFf6>s$wK29yJAoE&%_1Cm90hTYDu$bvI zgyU5?C)D+mSPpA|Q7{+OiD=dugsG02d(0oDHB|sOqb1BAt4r`v1YhqH(?!g&bZJDnMN%uvtXQq%VDS z3oI$HDwe>G5BI$TKr#Dz?G>E0X-{?yguBGF?U(i0?JZ?j%MMi3VK1XYVARA>u0-CR2;$zH1U>rQey%tKvCLTlR2a&(+_4xRMc z^fXOH&i;t&1a5%|yKLpWMfmk;{O6uw&Cj_5AlmiK1@;|1hBXL=9JNmxNnkaD00j6i z>ppe&4E8F~;QE5D=<;LQpAYBVk(EC`3#{C|w$~8(`HTPZr@IyJ!uqXMWa7BYZ6wRT z$jT>W0^z1x8F2=}IS2|T0;}Rfpq|v|T*2Pdn`4Z^Tk{ct--JOzPmM#U845bXE} z&mr&aJfEbd^tfo}_DoXkPA9ccIM2+o151BOox3B^#?Q)46n{x=t3lYg-TEi&0Qo88 zAT$|5L3ew?JL77L?3|gW3GDv*0RL85trGK(*B~X&teb$tBM_aqVz+c%9DkFqX%pH$>DOvC+6_sDTj>@A@+RKsH?f!o&?7rip3lV zS@%61jIZ`zZPk;i)My*(L`hhq?b8a$d#6)mXQ9)i1Cn^BQ`{eE-hmHZ_A~xrZ^%B{ zlGQXHb8xK{C?QyhF_%_B%&9$tS#@wf$p2+j><=2mHa5>gLw!45e0-iyn}fCb0a6uKHMMTN$pQ)0Su_C zk=-kDn;wxGU6(udg~;v3_+n@&WnDC`6CYlD_=xUTN(VFryxb?Tu1d&2?CtU7a-C>} zysf=`&N40hrdujc+PTcw>P>YwT}Qjz0S>hSxwIxyT0BGpwa{zvJ?Li5;XcvHv-| z1@qPKNC}IO-*eJh-;m()9JPc45D2o-xjF)YP}~cIe|SwC;ic}|wmPd*cb{s|AO8Kp z=+Z=tcYqs4wdW1GG1VR7UWTyxDO@KIVzh7^apF?uXx*IcLkhBJ7Z<4 ziN1N$ZEX7gwe{6uQFUM2(+oXycSuV~3qyB`gwoO?B}hoj&?PN`APgl4A_xdbjsgNA ztXZDsLQdQD4|ec~k(o_&4q6Mqo3=t~+&L6Sz_xEOrfRk-w*@2U`Q zo|oA%nP^{q(vnA~L9Z~ln~|jayESX_B8}H%a#1!c%zI3nIn4XFN9M@Ov0jHy=iMSe z-RVWDls1bRHlZ+X-jCSq)|_ z*c4Jzum`2Ux_1Q?-n(ozDUek8zG{yjGJpzuIfW+56w}1(*7zRIXbcpSvnOT!sOL7Y z9~Fb|!GsNd*_@c5Lf!iY#azi7%O7}HSroWF-%ReGo3hE(TK0pNUTIH^{NuWc3d)kh z1E?{a#h8oQs%L9uuF_NPma_@x(kxg54yD4ODpJ}AN1rI#Q;`1@d8eg?FvO7t`zXEP z*dmS1_^v4@Tk_6pZ!t(6IEj|LY$lcMlo4LJRAYZkqR-ZiBzj}9gZI)AUj@$B4j^u!0YU%D zQt3_v4GrtE>CDSRPAig6{Z#%Mwv)w9R>tF|_(`AoXApPaq_r>RKb;_&-;t(cpEyb< zi4_t8c7yEAg7Y-=zP{ab(qtS%l?WbJ_;f5}Z;(opFXS9mfnp!@2Vwwt>`pAZgA4D~ z9crEzINc-7pAW2UjaUQSUPvw2Na><$Wp)M#d$eT$yVR)}SR<^j#Jp>h-MHr(xQ5!u zq}(-;9uT7Zjx{wbLd)VA$eS_RY?HV_7oo0nV!*kr_sTVvNf6r^9uZExM5k1J3;2`V zFEhn0B)|aV9?2<2;pxYPlmIzN#|FH>n(Gzh+yhiME$cw+D>Wc4iZfpR(QB&wJP&26heLZGF3_M+5-z$E6WlBJv+L z?il%(Y(6tqVt6`vc;CLTJn!t(E#+vRhrB5Zy$HgKfCPe8FWH_^NOcp>XJQrI zW7;YJe>h#q4e+ybOy014BTv4EPyR!LnOR>HkF!8ah^Cy4Tok;O!P5)(S0$ICOSuq< zjfCWUW@{#E7)?w5jWQf;GsTov`e%}fbgy2nrK}MiGPeEaiL2c2>gQ=)cm3O)5 z_1Ro?qp3tnPE02E=m-3&{8o0q_1l`Q%u0W-x5JM4pnWQeVuphVf<(gR7&1VF6A}M2 z49t`WxN`c4l|)ef8E#E4wY@&8w4TclnjWtaK@j zDWFv3J|%=Q6o8_{{~iNC(##KHm+psbt2^KKRsusT;Q-2X9U+k0h@o{#6Qx)PKB}AP z6uLh0$cP6zWX`iTCkIz$6JaCgO-i2yR+?4c}X_V!4^NjPeSq^S@-YyblT(a-QP z38o{e&yPj;slD++6wePcDYby!y&RN2&TqmngpCM<4nH*!KMZj2>EUk75`@BsG2gex zs}Vy8#OAwXS^%W-3vqGabu?O}WtWskmfJnkA$ZH0$pc3~4RQ8S&JR91o8#>JMXCn@ zJ;L<4jHlC*u7RxSzt(({;dq;+`dz@{k$hD-zF5P!JmiH#G23qyfdb zbjCS!`q+d_!!}N_TW_x9Nvfk@RZtmH$DLy{NuC@d;MRh zGju8KDWHS8*F#QxVG!|=xI6!N9ZaurOgbC_MrY9bGwh2t0&f?Bfv7NgZahyV^~Z18)J+GPkVkz9ryuABUWyFuO75o@(b04Ly{$q(svTdV-ZXyRtA> z@Cr@6TdGt(Y)DfaZmwm6+`D_%-b^|Crhm1p)Xj8;!(Ja94?J7Uz!SMiS$eyW12|J_ z$80SE7<)<{q5f4@x&rnu_^`ceNF;QOTZ_KxiOfG=VM4T&`1dR7a06&u!FW@e6eZ6d z4ni&A@V8Wir*S}R?jxpPRnA+Pn8m+oycU%~0DRsta*qQ31-JJixYm>x&P@;& z8wN1Mv?e4%aLv9|dvR~S@8Vk^^r!Hl$6aUguTbHCRvw1LlDQB_(WL3;}_g(qDq^oi$L6{f8p~#!C%o?%D{8B{DDKBa{;Ro zC8gzHB+Bl=M>}&7CbNACv@1m}p{nga;44}CYxsX<=#RP95eZ@1@#tS+h|5a!bWK2Y(`IuxzOa_78n{vMgX@Z~v7X3w->4;a^i@ zko+bxjA(kv>B_-}6`O7HgW)g#$lc}HTCt8{|6B5i{x8WB_n;=&cg$y1mOL{LrDOUB za#2)Z)MqR@>3DhgXta94i6Ko>4tq|9{A>aVxC0j3*@%v4E-$_nMqic`60^)e!oh zuz~;8T0zI`*r`iEMVz?~H$iGF2=_7$m0;j_t=)LF9iVE>8Qbv9IZWuU(*C8|KU%q7 zM~uX2#)BU@u~YkiigIV?fmXS4PVFV-m zqru>=YBDj;V`8b2V&aee&gf5bzxeTqs_60<+53qY-#|qc2$BTU&}1!aSneMm%u#~& zxR=zO6p461=s~+HGK15ll*OcdJ>Ng+!hDm_Wf#PJe~bR(`+ZA8f1Q~(nqf@rUxXIrnt1c> z48+0YLgY6{YYOr)triW2;%xFwb~ASC*rQ+N_Y*e+*a)-+BoVoadX8b!rW6aDs}L%$ z)F>}1^_<6Itk0-Bexamj%~FW`fxeB>IbEQfhj#$rSH2vsPUsKRN{0zYXqFz8+J0B3 zWJgmkHQ8|CCOq4yJ(D2s7~!V4gE8|WY56KzsG7Lidzft^^-D5Aw?t|Qb#QiJWZ!4H zbT#)ctS9Ryu0fG-Jx+CMS<`rDdm&j-E_?Ady3)IgZnKr`(@mFjoV29w=>`$$q8Z5nU+uW`F<|jBW;!??drmFRQ3Kdf2oO`s6b-^yKqD8-k z2ZFY=zX}%M@AVKLQ1jyndGJSVhZ}!u1YQBE-_sUppIAJJSvJ%=+9(>A+LdF&2HJfC zFbKp*f*0&{*AAkF1n8=GJ1BwL%rXx7Xh8|JV|_4lW|XcyCs;BLDuNNOR&~)3K$C2J-}!Y) zPu6e8?Dj1}?0HFqT;^;6-ll?k=zYQ$UnHno_U~3KX-;136jkqY(4E@Zv-ThV<2O}X zpUn-+QF&Os+wIzjuA;lyOOhP>*^)U9SlQI4ir^3_#k`E zW=Rc?sDJHW5iOZd;~cJy`h+5ijXSp$49m4Yx0B?*4QsFs{8<&pKzl{VG%sRH%DqP% za|-jYF$ab{YKC1P{($6YA>m}V@#|x`J8lPqJw%?)ZEOH#3b~d0yESSv`r3S|W?hx! zjBlCVW2L*Dyu*Qg_>~O2-3gm>MoxKl1ZGX4DNuaAP{)s0M;c-*a$y2)sWZr}M0D>x zw6N*`CujgNit@wS~V<$Ij}ACWt4u0IzHeBpaE86W|KC9Tgr!hf0i)V2YJF)B*RF%wt2@6<|+pHPr416ZL)z9 zxOA&zp@Gz-F~E9OQbsjfGG8_c>{&Q#5 z@H?|5cCVWcyljQjxbH`K1Rq@ll*&9B;+-9m&!uX)(c5q}BkGReBtB}lqvT{=Hncw9 zu|H$+EzhXiHB$B0nTXd6A!KjkS`>I3*g#?Jq;K0*3AR*Gy#v%rIwH0q!g+uFs-9NL z)A#6Eav`5~j5mm+C%dOcr>Ym{y;0#Si-t$4alNy)kJ^W1z!PzW#KIF{98htdu9Efl zRAcF7K-yAM$%1FpYtC$(bZ^ac#KA&#VP`)ufNZGAt9f9h*j&Zw6hg#t&hAUR9H$#N z+SW!zpJ?!7mZvO*I|WydXs_K@qV5pUQsNIkNtZ5eYlX%%k zscF_$_ZzN$?cmya6ybDDVbb5^=vvn0y{#aEgZ(ku$F2dF+p*s7FC^X5nSYfp0N0{h2npf}f`FFO*?V%z!RT(bD}iLsO-s**&WabqC;QX~un&**RSOe)?`Mq<_8EZ(2)6=V;Ere4%7Vf1?q`Y5_TTT~%Gkqp zJJz=<)a~HC5u95@7v`Tg?=%3Cv`oD4+K-iV{dJ~VG*Nfiu^~0PI-!Ge!{ztJq6aof zDGPECvbkP0&PqZ19nGCT^Lr-+F7Tweo?oTQRlPSaA{@PjFFaFt4!!$5J;??6m>iaP zUhxx?kTErT> z`2`}ZdVm53Fr(9;V+`CeF|`a|^V5LzX&dMf9)SXBT3QO%G#v)1y8s$SS_&6%_M`Tf z>Pw=&s6&SI;lhPcXL!`7MDFa=2Km+WWIT>$pmcVU7Lp5_q+6?VzAQV@TQh?rylqi@3rfg24h!<7(nXEP11J&tGFnq-8<8j3r>jD_5Fzl2e@OG@qU< znVemQKvXO#1YUNH_<5`TNA{05ct@|>{e~z{4Gn>-PH8NhN-N2f8iX4^9xChKc{E5) z?2nc-M+;JSz~WNA>U-Oi!b|{A3h6-I)jhyN0jvR8ubs^S{0V!}Joe3y6cfChqJQ1q z#^-Bf07?)x=A6l3WF~IzpFb>uim3nGFa04xNs+@ka(2~`1eFe8Uw81V*s zO9;8x=8o|xJ#kOf@06x=r9q4Gr&`_NN%s#K`<)BwI`XM1R4aniIRZ?Mub;aJm=kp; zK>o7cetJG=>W5Zy%$G}rGSdo-Lr^}a9QXD(XB%D0ETdP(G}S=rL@7uimki}jFmBg@ zR}7|ArPxTjwIUcrVzEe0^t_Z+eKjn7tBm`W*xa9TV&4Y+iZaE@kx8@ioVF_mV0|fy!zyrCvf1H*dOwEBB zXrBF0jt?@WV5T^+A)iCRJ-cDK(pLue3Sk$XS^$#qFLw6q?$kKF%gwCMl<^Ee$D)1 z#T=r>&4nL!BR9J5=k$T?kWZz;SCU)R_}pCD?yd53dfvTnU%cp;65p*Vhnv)lSx4Ik z$WQ>;_xnpNS_|LFZ3f-69R99ijgd})j-zO|7zRmCpP3ZAAhN;|GL`#B{wdDg&FuEz zW}88?AB)JZ~}-ak`Wckd_60W$JNDf=_&Dkf=6;zt3Kf zU<>;ip)Kiu_gkAc<7U(%abRRGP{Iu10qek5e{YIr*ahh`GY-7Pg&^E2-xZ*yWkE9d z1@eTQa~_KXwvdU_4K4)x0LH)ACnq8D z3_ub&C%6vMS`6z&zg&|q{4lEF8TIl{uMNsXa>LmVY>=|&wOLLO^DtK;TkkCKc<=oh zP5@1D0?1udR?0$M2zt~Zv)+3(^4&dq> zx8$buo1_b?tJXu=PrT_nF7*0ZGoiOE?+C!`<#VFWZADU<&953#sI2>J4q2$m!z3?g z2);fV&ehq^Mx5y~J7tB4zrPO*j$t1r1>;Ljl1PS8*WRk^eMrR6@L`|J^9&>O<&1E$UD-%%ZzPF0C9zOK;(CVu9s9v z247#UGKuzdHvpe$&l}sP20flbD~H&OgS%IB@1x?(Rr#Qxdxw`wc*)Q2NV@*^1(6wLeSzk1;&nQg5WRn)l{K~e-ua6_hai=K_zTO=~mj#n&qdT^` zC6Ei6Q#|?;gwA4`8npOB1~l>VlXZVXlcuP+e2k$H|2f1OTQlW)Nf44a(dZM_8|jA*UXd@aBb-gH=`_6_E$5Lnjte*; zRixTj!8@-%S4FAt#c0LwDZv>AK&JtbugIN6zTShx2|K*g$Hls=2qBiiPtl;qO>ux|#CoQgnW^PXflaEK166^h8#|=*d&W$qO+3eFXz? zERvZ~jb`G;0fU6}8*VAB4y!MqB0mfzYj^QM> z_upDy$b>sk{z|WDHD3y*7xw*_@LjpRna*cNqLd_(3Mxrm{h3X$FEvRqJ11g6cd*~C zULYZ(tbV-8n$4#7YmAl>D(%Z{`%ge1UidwZPyJ*zPQp>73zcYqf zj`m+ZcbUM-9ysAMP5ccI83GZq*9*+gK6(VW^mU)l0V_#PI$(mVGI~h?8Bd%b=@gG$ z=Rg)2WVv3%G%JV>peLunTq>>dCV30I|3`>mZ zJcERyik;TCyBJ%&(|+Im7_viUWR){w$ezz?iYM;DMx%0}B<=egM&t01>f}KM%uydk zGTlEFGKoJv*2#W|sOrHz))HS+?Y0RZtP<;f>vkXh0OUZtLVy;8`3c(-dVUS26UhR& z3DYW$bHar^6mY!@pCTxR^TTvW_Xod-=+H@5bc8VZXhG>=SSO{jR%lml^p7wIr$)O2lkP6Tak7(!}I_5nC$y3KyRI zXVlwE%;{lKfi)U=a%&!q2W?s6f5BrkT}23Z!qb_T3R7J^vnF4TPhBuA%??==Q2 zkX@~t{Y6PU{+$x4SStUE9eY*hT&IRTFDQoy=2>H=9UG;(ARSPzgk{Vj>A-VJG}l6w zI;W!aFcs2xf?OC$?S;}};}jcM$Y?pzD!xOI%08960m51DxkRoav6^NQfo5!gP+HI3 z$NL(amL3gqG+W-I^S{@`0m~>RC`7AUC$4ECrHea0s^atXyp}4sMHNAg?=VUe)dPF> zsH_^F95AisV$_&QTAHnRn95xD+EtWCjI5++RGq>61te468A|-AUc-9w8;)QPjdvS} zal2QJ24(ZM6g-*IFp_{5J%viY5DbUWrE)K+sy{M*$S@l6)8cJNS=6rkASK>GH`*wm z6e!mi@m{9=n;KE`&eH^PzbZ>CA8~G3* zhQGau9;eV8-IEZI<0Kg3#r=5*1bMAL%gZtN{&9+pMaUO|?#8NqebkZ{#t3BeoI;(i z7$UV^piUvI`H>unU&DC>2HvQIy(9la|2 z3ACzgFh){CCVV$CPN4U?Q*_05SV& zou&vzVmn!1RqKkZMN|?zW`{`7$|;&qBdWwsMVgDr=A5fg&B_R~I$7kHW1ROfPAN>m zidbH)`)sHo!+kiQ-c0KZxcr_xnujZCu(OW~~B^Pg$Ss)UUw@JpF8iXhYmaY9~5!+niT0Wy;a@^@L# zbh%Yc_5!|1z@WZ29kq|7rhzhhs+tnzPa`4eOZ2*N;ne zANcbSzkPnwE;M+jf027o7%ym3hL<+~6^qVHfzoiP;U_(Y1_#Q%^uw|!%?G03w|XWI zZ@Xqnm5~}UIT$bz%(w|tH-Bc^q!Yw))7T0NQcuIp1;N>>p^E!GlT_hCQIUHY_bET} zQ!mB>a5CMV%>a4^d&CoY39unC)j}ei7W|7*n3X3DY=iHeP^W_(fs|en(l)$ox1>qT z;)vO@55AziOT`_MZGfL*M9*o+=hAY;OZx$p77ZIWZZ0`vSg*{6n?ZR#uHLuj z2t4;Qen)Q?4kA;9$vvENOgS?8$xpA=I(QOOa*dG@|1pE{kCt%^)RZ%U_Ay9E)(($@ z-1ZP=WJv56`h_9IRJ-Q| z2vw{@%F1Q*omBJPD+j!DA?~S;!0xBQQj6HDEo_`BS$iYanZmO zY^JW3f2qv7JcvC5tLvRaTxcwITQ=(ri(O-g2|9>fvICDxzX-=U4nL+>Bbi4MSS(#VLFtaL?*7rS&)>#TsHQIG52R9N_p1%~)8p#x?vZ{81Jv)m@~=1afRg9!!$l zw_`!Z<4koX&jGVfZDz_h|K3CBX)IO1s|I-;K8z|d&){Kgl+x1R05C2W6PnSJ?1HE* z1>_Cn1iTycAv2xqc+9GEfn56x-YO*fhMB~N<;&V^(N!wPKpSE^hGk8WRq%!*qE#;@ zN(OgX&-+D^5d*yVs5sI%MdfY5g^&0s=u-*@Ucdl65ge$p_KC9c4_=FviLpdvUc!WHQ zLm>rV61kYgj*wxL&gEtA5=wLe4bK-+9)XpL+400xi%eR5TGSc@cS5>_c8ABvcU`55 z@XfmN$Hl8gq>J!lBIz1YVEGpiNq2ay55Z5}22OX}xe}5Bl!bOJsrSzeJoBQO>{GmM zbS46YzLIJcFpLaa?>>4K2;Q3vzkD3E5K*-Ml zA7i~J5XM!s3(@8ZpxKOZ4B1jJ2&hd&F;}ixp@(gDCx_!TWHNSACRe>-OTY(YIQ!ZV zo8N*iL4Mfk0LNm{i+?ERWj`rAeu}MkA6JVk zW0P1*!h2G7nnWcTx4^naMWXE6kkb3an2{cL%|qi8V+H~a0(WlvM;rvNBbh-Gr!ZSM zm!z|5_XE02f!F13QNa%cBtYhrCaMU}ugg|Hp%6x*4+&eYkTJRhRu2k@8Q*huDnV5z zK;UPM1ev)Zl zkKhbG7BK^&L+cd^@Nx$s-w1@2M1O$2ON?}`X6)+wJDFDYKF3gq|NO-sB%P%FAzxzM zdK?-Ejkcu#@O_fs0un#{>i5Ayd#xDm-~pTnf0_B`_@EUeV8?VPTFo6rY!Na@PjBTh z*pR(O#PtCziKu?ZHk~7gg_WSPOo-11YcJSrq6v$)3?OF4za2js!97JzQSW(J=j=Ug zjcNf5?^$*b5R=44R9_0H0adn2%Qfe9Mk1(w)eAOr$LE1a-K9KK z#uSqS06*ems={YYfHv<|q5-{NYMT$zD)U*}W&qs(qPiftZnQKtGv_ zwrAazG@EFLhN#1aRm1tC>fF8zdWv_8iHa&VKe3rJT?zv{Z}u?vj5=mh#5D%~ahXVz z9!`{|7jc4xU&bZK6}v@&MiiM-$X+v9jZ3>_#4Y9yxN1Bfhv3J65Y zW#_`xNjlc89@1Y3z*%>O|EN8D<}m1Pc)DT6Lu-JSR_zvTaP% z?yv`Rek!W%C~&Q`)$z+^88Rwy;Saai4 ziYb%hIPE*JOPb|j1o?WZrMq5jG(8@uwAh0+EU-xCL1`j)85wR%C*n>m^HUyUFjh$% z!YF7D@1rxL@jx-Z!|m<++QbUHt%=9uaPz)T^))7|qdk0Hiq3Vg|JJRg#<-qV<>xWv zkU))FzsyDL(@gHGYq=a1&_pDE-&kH5eqPE*f_hLk&stg>?ZkF({46-pAf`D zY%0%fEcf9rD7FPvHs3fD;ZFZY2^7iJMn9tgS#pjLG;sddj|%rWpDXVpHxBjSR5>|; z$)L(M`W_n8Xcdo=k^VO45i%2g&Q!yKww(b=TDDiOkz8YCA$M4=MF%Mb=yk zRM!4z(Q-Y6;*!H%Ruk!p32rv10FxSXV0|GbpRy2d1XY{}hsLW$*<>=EF$}4Q7U}RP zkO8R*hYx&+p-RXr;#=&DfC}!y7+r(ns9n&6av(Wc&;0PYc)DDZ^7GOZtIwTcs-aKxUAI<*?sQxLFK?O zcqYn&<0`R(Ouk-mQo9MofmkX~9xQ5s< zX%i4K7fGLMP%dmZLYC}<{9~mxr;5c4f}_>EJfwb^S2~E>=y8{&f!VnWfDcT#FYNO> zZV_?;d=^eyAodYj)+Z1Me?uSOM^+}jOJFblecmyTQRBS1U(N19`dD zBi2Cy*XQ%o9{Mby|NWyP)4-;+Lg>|RFx2A-B{i!mIJT!vT5b}mF{rqZ{pg%9xhQ<; zA^Ia!!%(q0v@qxv9&y1rZW{~ErxG+m8B?TKt6Nwr4P}3FWYXpi95zOne%fhxs~B;t zcBbXSr}Dd%JRX+Pn_Y^mE!5~@EO4VwTrh@LhHyC}1gF0T-9~=TE<*m4R7E=zsLV(# z^9MYokMNr?4KiR$Wmg(^qEa_xE2|bBf6QLX;P7JDvO*2Y{tjWj7&yGdL4$kf^;0+d z$^EmBACATpbNPJsI`LQ`k0ZZM|*}^{{7o z@D}l7)I&j`E%au7J382tC4Y9r(K{V^bUryUz>=32vf1X@W$kpn^=h@AC1l#``Xn^; zNuRK{a=^nX^y>Jq>#D7;tpylzu-)si zPob_5fEnIqKI_Lj?;-v*U@hN#!4a@w-PYW4^;IKNA$U1@_J&R}TRXGA6W4YyKS{2i ztAEw*CLynnOLukQ77PBMI`eAk>eG**+&@-~-af@oOHx_mNP7D2;PaRQh0{})L49W4 zr<3VGuTBSw-ez-~oPef;a|hFBZ9%8C12-ND!yTbl4dvaI7r!KL^_{=`xp+~6`zJ2+ zZ1+Y!_+s~LW1a=dmQ~6=37vT5aC5Vo)P@_@h2?aAH1E1$bM=ZpPd+s8 zy8U{SbXI=LY$lYgh^4jl{J7+brRc+nK8v$eaLCQZdhY;BYjD8%{-`Nlndwe$>)n>t z%|-e67uP%OO;-#otyjL8vuy0sA(!(b9xMu}FZ^3?HeZ$K-xLz|KbE|>(zPOi++3e8 zM(YpgTZf#tEx1E2v!C4Lg+9G}T3DVo+9nr#u|Gc>a=w3d+up-MA+$^KV%$$b_)p2% zw8vQR@pa(w`N74Bbsp)R=Tr5AZC9Hf`a7*#2O-bZKehy1vN&koY)izxT53L>g-Yj= zx08AYRTwwK#A&g-8`UwGcvC8?`6soAsrBYF8E5F%-+lH@kGbk(WFL~gWlr#Yb-*Lr z2{w%_KJ;xQx@5ALrg6CGig?E%5?oxF`TCfvSQIE37?bg+7%y<)k3&T!pFoRPU3~iU zFZwsnJAGvRrPJak&Uo3iR0c=NQt}ct^9a_zH93AC5Gv}>FR+`E=1}10D4UFbka8^4ic z%7E0?iK6`C&iKxk+spT26qiPravIVH-tU}j3*^m16-IV`Rad@bYYKTJ&1W#mJidM-|Jdir(xP5#oA7@6)ozl={_U-yotk~8@Q&=z=WNCE zC+_DLdD?X=kLy;BNsr%X=-dc>aQCpf4!t?>-sx&{+GGi8nRAVKWkI~o!uQ@T=ULb_ zvpLg!SIN)IkpvoTqjNQ?4TlHTyS3#a-xqH1G&fw(70lO!c8wAtbC0esjxRqg8dox1 zoZrMh+F`M{(4E~I4QUzpMm%eN{jFeou~R)cb8G zn+}yUHfI-K=-n@ElhA3sY99}j{e9!kbZ+!~#&?ad_vdwMQ|fqr&y&f{m7PxsZ8!Pr zLn70MO{tsHZFd&$Yo27WbR2qwG6=1-23>FCG{-tGG+-j@qHfl$9c{rk98FFzrIePUVI|ohw5r`q@;eJa!qMR;n{r02clf=CNTzPpO@~Niy=BNp$Y<}Le zdrxM&O7ij)S{qg-+xB`__47i3YM2lh@eR%U8Gc+y2~ajb`S> z997W2m$<@uQe2Zda0pG}k0>d%d^gch8&Omv-FE?a6?2VWm}1$b7KfwOXRzc6ENv9oXe@v%FuAlkl6MhnfXGH=`lGEor-} zS9xzlIGLT^tw~}+{jZkWS#A!ue|be-Z1m>I-;A`iuA5HY;Q9|PT+IF==r5r!_w9A`m}uc zK$9>|Un`Hx^KKd+l{{Z2owd3;Kb)T~_Xs_^Y$s`|+zTdayY4d8pFO@gZ%nI-U)r9j zyZL-~V%zv;e}2*WVwQL$_~86@UfUMK;&sN!#&mS$&A_UqnftDX%yZ2glGc&VYisM> z&CS)>*5=^r_3e?8fxNYQ3fnxhSBFRX`WGZqA|48>t8=psCqhvt(h(=V&o7?3E0maw zT%7FOBhc@E($nUou=`0`cb*W*$g!p9dY&K-5;HVmCX$59=TQ3b&*QinVJMos^#yYtT!k6sDxj zaIG>C$30zE6(|XK@0j%x&=PFC_Vm0@82Z1wZ2x^8>3Q2Q%pqDRIeL1+6~0b-KXlna z-4(?1!46Ymp1TdlWC5+`x1}k`r?CCd3}~ilj1`Xw{~@l67A=5It^9-ZI&^=^Q)C*( z=~o{A^l2~eG1)T$)}JUBPd@{lb#Oz_mtdE#S23EwEYpN8)9IW6jOI62*}E{>GatTE zw~CPs@{3Jlxx~tl1U&BQ?Tg%qTn!NQyY+?N4_4Bd1BAnGgR5B3Mt>*|u3=+a^ac@l zjJAFoCY6Kfn?auAInSR(oLwg>P+5pYxUA$L`h{3sXVl8_cqCd$ZBEL5{wNBDihHOe zhpVGqb%7roB)XwkzW>3ewP=Z`1&e)7R_b|Za;dVXa8g5DjkpD7JkX=Gh|?V0ovR`9 z6#d&@6^%w$As@GOPr&Zxy0~}*RtCA;ys;2e$0ImR8_4+fg}V%cITNK>jLhv8?^p$2 zLfR~hH7wyRvts5-twtUjdmDfQ*nLens4H;Wg5hq1|FRMe=iIrjtwyV_zJ%fP-Wwvi zrdU=ijB*K!k#dy0GTGc9`W@9Ij(@z>Jgx@@bn<(Qwuw)ZRfP`}$l4XkTj*q<05y}y z^lhod*Dow@3#M=_Pox~sEG=kwI#Hw`2_5X!<2G&^mX4z`h%(82T6kl z_4r>J|A%bD@pYvh^H4{>#nQEDu!dxU3=8S$n(d<-oP z*E+Tu2+GNmMqO&{G95V^L(hTFWBvHTK^_$uLWu@866SmAMHTz>QY1y*duki22eRe#SOEWfgtQEeE&R=Pj#Dekq{`laN0feg$UBNE2R6wdHe2uYnW9r&hv zQeXrUk3_c1sp~83eJ6}I4-sNS*;tGe%gG{JD9>KH+Fejk)vuUQ?QJZ#NfA0A*3kDp z7~0M+Y?rclVXm)imnymM!k8|%iKD%rqO9l!cr_M*G*+_hL1Le+h3l(tuszp5W+V_R&zeJ*#oJSAyR z?kYHP_LX#t8|*k#Q~x6qmQi=MRnXVDgSYhMIX{d!D!=`YLQk`#iu#}IBI+Bw%JO&S zhI=WEKiRlKmv~xBU5e+ukXK~)`@T*ZUEZPH7m$-3*KBB$Vr~wYOaI=ufZ(uHezwWU zPsgi$|0_Xp6V1NdW#;(PO*+p~hxDg;viV}KKb1#5hO_Fw;qAtG%Dw)8Yi{s-)Ve^8 zIqRioKWS2amY$K^Q~na-UFxuy7+Zk@-p8h9k9KG-bsaB&2{gJ2e(b?(9A_^XUA^nN z{rZab_+bO`awtl)DKrs|+7{_gu~A~LREJnj!hXTL@(HK2&!fthM2i`2&xs-)w75i6 zsU-xu#+jc!Vb7I<3rRKXq0iq1u?y^WQST$Zn~QAO5kNA&Fdev1_Kj+Ewo|{q{CWz% zP~Huoi|@v@EA0lfxAc{@KST@sE-OA;=j`7~6tK2ccf0(m@UcNz zzhED0rMUe;VU-zF<|TDZB&9KvearCIz>R6nq~CBX_c_&)y1({}#L6ljt>A2%6UEy^ z`#!E4F3WgH^i2Po_IL5jzNiE zJzH3FUPCWtUDuvRe=)W1lTzb*W9DAcEeOkh7%$C<;Sq*vNS_9&8ZFIPjHqfeSx+RM z?)T?hmGUq@eXV>d<}BBj_gj7$gehree!?<7{8bSnPm3j|ySV&Gc#4HdvdLpi=_S!o z<;@50hGDTh$IUI?X-Oq-siT#ts=)|Kx8v2v6LY;clvQ}*ix|Qx{E;+0)bmN-n%qm8bXhmd{Moe4HsD| z_5wSxYFg$4%+lvRVpRa|3xcFsxV1&=V;3!F8koP7&3bCm6dcYEB*rAk$I0_3viLHF zCrvbHjdq4{JD(m_jLWecEI`37Y-mk1nzqmX&SwVhE9fw13iY&?nB87Hyq@yJAx3BBn0r%rQo> zQp*;Tn|xE)JUQhkUbx+oeR6%eahr%QN9&Onjiq=oo^;ZK+K0OR*rt>ZD7R7cuTIpD zZh^LaClW%-3i`FNc|Sw&VoVOcIWEGv;^9);$xC6BM*GJ{@0kgO52eN=nmN(d!#O#v z3$wwDC2=-ef1&8uT%MFUqD(x|6sv!2a*Bzu-76*~PAC;XOM-=V`c?LkX=mYDnKsF*=ET z`rPmlb(3!5PCYSiBDTO1kP#JAu(#=@GS+!H)T%;yfByXb{ll%H=k)dm-|6k?&)Sx6 zS4PmO{Wl~-m^uM(wX@g6xoFzBDEin?t`xf8D8G>fRj z5ExXtnUU$3cc!Jyki2p~nw6>Yol0X-_sN+1$R}fj(vRw1oFlBEN=D54>5K4?^6$r* zH0FaDiPe^}*TK92-Pr2rz?81~7z3OqxAwN9=DrjoBrK&Us7*!lIy zPcEFXRvWC%v4oQ%c+Em1gsf0bHs1Mnw&x7=L)C6@Y0fjOGi`9cl)oYD+SJO?$V zM{N1YYn=BAjNU|s&h%w|_4ugzX%S7*5NIb97Ye${%xoI5Q1zF_OKfzu=L;qlyq?B> zE+$e=q@HBp0X2z)I-FcnzE((zvkc|?>hPGZJFifOFl~GwJ((|z_ayE86wr~ZN+p5a zYE18nfiN5NOCMR^n4&fCJY5WrIRM>JR&89u5^d+KSlu=6Rwl6{p;5(cQ{K-174sq> zd`hM&+66*UF6yBw`El46kxw3!O4fmwRPTif4d+J}@fKh9m=$h`GuVqE=Q+>R%DGBGyPrReW3j}>dD8d4_ce}F z`VlqfRy%E{b{M$^jz3_y_7(Vq*tN=Tk0j+su(mUw=yt7OTo_5Q6CPC{%;%cGH(X8W zMlMClh*_I7{20*Eqkph*430A}nVywqY$*_Yj+Hbh&Tr^Jr)Xrnhh5_5#g<}=d_=h?|o z8x4h@h3a%42Y;xd{9u?(1flNDRoTP=+zvE}{~0xWFwYLUI*jv2Dp5tkYlo7rH{J~A z7$>hh0%dWZjMayQ)6HvJL&hHMs}h0LS2|{}iEX~mqanqiE8z|9TAObg{Rd;ELAFr$ zxV;d_vtwcxDK4T2_c;zX@`TIco);;qYRvh@lWW4>*M%}Q)}(3afwYw}(Xt#2LTOYN zPS8H5DqWB_i;u3^EJ=6fR#{lc-13I>$$sJ@Og!4Xni&4sYd98=;V>r1 zXmp>LclAyci!(L+C+#cP^mCC&!bF#*f?{AlJQX!zWCE_6W@4U^WJazI7Y+wy`EqqG zl8W;uV&s<8j0!XCV=bsAN7WDA5!{mDv^#a$YN3`;e$m_-5R5mqWi>ts#Ls;D)Wh=O z_=6s$O)MsGRJ1;^f;<}p+J{=!p(~NpO4nf5RB!u{m%W<33M&x_LbbGn04Ql-U@yiOf~TBhxKCqxbZN~?8n8znJG(ATnl+M5tRd=U`4x19Yc3gae!a%Egu4B zGPL4`--FDgfI*xfcnu8t)(JaU6)}d6M%>{txiX7LPKxXZFQijO3KuyQjeq`KllDv+ zEzWe0Eg$DM2ViRa;}mnM9NFjsN~r4Y;u+k+^YX1Oo1INKwgO0=PmvAar={1Mbq=1Q1I1ubqCA-h0-{fuFV$V351#@lRz4E!*kS^u zj>w4uDQ-R*?4tS&6wJv7V;;9pdyb!L{jr6m0)#WKb`4&9^pL1;H_YG~6a!CbH%K&ef3$=^AEg5Q%V(La+UlPoud6&| zGnbf4wfKP+qW9F7N5Sockqoim;(%1dYZKK6|Nipt7VANs$wq&Th=xk{av%s3-Cn}s zMU$yJwQ#{DZ^+?+Nn#Q;uCp8Ad?5>1EzDT{=+jw1V@Y~KrS0HUn+{S$kFLGD?P`CP zOV6;>BWjgB$IV(K@U8^*i<|a9ioRDwG$?;^o<{C8fkR&HJzAhW3FUB*K!nXyl4K1f zlxf6vh$kpRR}ySA`s(p$LrP+3rWur1$ie|gG5x$fuhN)Ly`2)txTc)jS(=du)NRY} zbkzAw0bi>!NhLxYj%u4H?)vz>PpX9yJsJuYtC@f@)5p>{iZBpvh?qwJnyNLBZBWXJ z;e&vPqsb4-r~`)?Y}L)M$xlB4{7U-AaS8D5`E z-|>DX692GDxDg~{qJvaN$kSpp5(->zTl4gwDUY5z$nS09VdN3L?BqYIQfNG6Oka+s zF*|Eybi)NXHEMs((qJ`UNiLGh2R7=d8q_;E%j$}Q^;Gr$J-e)!09wQV7{jm>hztP> z`Lc2YDV9WSK(9GvzS_?@sc46}&ewA>&OoTf$I{bOMrdNhBKtN7s2|RyG?@_+sjD)w)J}oZ5LNWC165cz_o#Upd^cx>mG7$O7lVX=y zm-t{tig9DaJW-#IJUwe_c3hGyB}OzA9%bsXg6`%Caqh%9_+P%7?k(AxNJ$n2bTOL) z&aCEzx7?*x@d~tJ4zSWp|(Vmx!-bhBP4woq(-u*&9rFX0n z)!b-d$WE}cJXie@MQd&{cFbfyqWx!VN$N0JSd8S{{Dc|efHVuxgzjAGU!nkP1&g_p z29#^)1--`D1;fFGf=VS^8;Xa@WydeT8G*Arh!M@W@0hNz-J4nIn7zVi%$l;*cWZs+ zmq>5TyvEO3sKd5{%zc9wB{A@Rlddw0(47EJ4K zF%GdSsZtZwe~zlQT8pkpwb@nPlgjRt;!B1#;8K#?k^v}bl zXoK0S?YsM2ouzn*%qFOmzs+|dQF|UhkhQA%*VY+fM858$(LR@X=C#Ex9;rOL<`}IO z-)RV9ZYc<=KQnmZ9C|)|c>0^L;s8b^hsv`TwstBzj7K++B>~FH}Y@VU#Tw+Sp z#M@S>B$L`aJa?%itVm8S&h_60G_MkGxq14fJ7oMugml{?kPpp|<9jzh?QIXD(7HIC7QaRm zk2J&*%njaYa5IBSll71+%z9GRDnc5z21X4881+^^F`VOY#q0#$q`7ej!laWh`06w$ zlBGbP-1tft#uSd93|CbWxf_~TaKFeds65@M_-^-s7N0F%uF3*zQZ=}cr+Oz94xQ;~ zon{mozM<_py$I1-!OXmUDLh~H6o>|#U$k-%NN#H##yyf)rw{iaI&fDlFc{yM+=;;| z-`PRyTg%XNu~5XER?12m63?P&@7-FV?BV@=7UdP6U%)cw)mdJPt13l-?Qd^&g1FkE zF~rqyPxnS4u15BRdq5J+<9a>81;=PtAR#GTV5k3+$xhS|{D3j3j912MNQ&8+UUyNy zR<$H|0&B(lg@+@($?zMsPvgRY$3;a7s8kunyjNnZ3Bl_vv@~5VQ+J#P9WGDC2yC>k`D;0g;k0oz0*rHaKFe6tnIF5$i_O%M6B&1B zIjK23Aj=p9GxDm!gD8LM>4gBwi`zi#qyOJ?;rF*3e_64PC~2Sr93j3kOV@DRH>>9W zV_78+UX^_bR;iRN6KDaGt(O0eKA?p*R zFSoj1ZYM@bN!!<92sMfkE+<*{qlae4bK=RHypx2Ow4V{n_0JHm0-oZJq4u^6uaKRH z7}>6AnDfb3Vt4O6=b#ZS5P3%>++Qt&1o%wMP6-qVs=r_OD^ms!sA$V_%?X4p$5+j~ z0p}KUMc+DSP#3fDrD|cIT7+|PZKpcWafx_@cA9%8w@9{%QLOpQs*@XXWsP|G8S{q# zZIk!x0Pdo8Z~E|7qarPEr>aI)0ahR5rrF1qmp3>-^hP>@gxQexMc7et&H&7Mi> zv6HZY4VObbn8o-=!ioxw#z2njYX|o+O5YhrbN;MBT|M<9-tSa~qD!HyrzjUDx~X{&PgLjw%ice~V#-%dnXO_7fa25D@^Y2T#D? zBf4IU#iN-9S1!LX0jod^P2cr@C+5e(eA47NRY9kC(9*6?Z1TxA90Q!yNwI* zbz@3bDxwXrT3`L(p(Kf0@cH^`w887?qxSru$tL`}0e0yM(o>54rI!OZ_(d#hUTa^L z+G__j{&D{ms*LZuy&H`VLbr{>fBRKdSVgK=qDEbkAz8ihYc)6o%MOLm3)cr3XBo_Mx2 zbT>70N9Xf7Z(RmP3oQI_UruB9#~L6{AjkFjH>K@J<#w(7%*I0UD-?g9f;_?(ECb8F zyP`#34mv({T0#di27fVE6{^8r?kioBH=_+@ci@XUkBfx8zR53fydS6-Up{{-zH;FH z(C2S~XgxO)I^Yf7kp5X=4xR5UQE(OoViVudCez>r?5>iT6TjWB7VD3`%QN6H~Oy; zauP`<K$;?nSLm+{Jwbbh=@WA3}EJ+Y$GeyUF*6iZZ1~Ha=fM7mg)~DZs+DpW?^X zkPEENo%n>)_U`ZnyLNET`{Ib;P-+jhm;0ZoUKrNgRYbiQzwajtw@R``E8|a7of@^a zR*kI+V=A&9;3gfX4fi6!7HumckLEALC%ROFN4b8Dnmv>tm5x~u;!EhoGu$e{7lVsG z6yGI+Whb~f3UnNttprc#&1!6`hf{JFdrSU8Y4AaWX)MF)Dh0sRYVDS)Nr&I-f2=Zf zgiw-qU6prj2fL3Di=AJhr$N6575%-FGgZ9YUyP+|++lA74oa&7dE?Nut`qlQ=7kCByPt8em*cV|Mvsb?OpH#?RrDA&?FeL6J989LBrO{K*q-XoVF`Ha zCZCbR={*nS`v&1~hzy^GMf#BPlVKKkJLR|LA35v36Ma{`adt{kkyH2~H!>lTa-Rl$ z)*2j~L5}**WK83`V1rhF)6~q(=D1I{xKF1gB-K`R0K&T^i~n4LSqGwv92M_`6UnQ* zu^|LLgV@aa$#wAB-OSo~hR!Vt8D)3acty<#Vg57$!ZS@|!09mx;E40~*ez3_^_$Kl zG?$NxbS1Q~<;VVA%gW#`qb3_m`n5#|+nrZ~p75MMPk|?f1bOH*tFOVSb+Cu;_0BY_ z7ip&;1BlIBjUzJ{wwtQDlZ6R|cspmDjr1wIoL*KzROz`AgGZPCy9A<|s-n|o2a%@_ zzaP!*N+<)jNy$x01+ra8HAWlfFut{ge01#V zo=apvkVghyn(ecs)P=|rxAj{;9qn({pS$2d=HGM;7Nd_tLn~i(@x_8q3`epeN>}Qg6|42j_a}VK zSwzI^bqaTwAk$N7*6F$KQ|l35^QS|!o<*T9Wyh^h2(ekq^vAa5))QjT1gCu!G(1MN z=Ko}ZEi90f$?d$X69wt&)kwzdfz$t1Bm&T@s{ z8ySZ1#PWF~!j!`8e`tNQYm+~!ceu{)<2IZ!!g1_u89FNT3?nP_7FbzYzMy0aIg|%n zM_&g$-Q9U+RijJYa`YEBIE%NMFh7cBV4{x{bTa!m0@pG(x7FXPf?kK|zjb!9i2-^q zYaF>Nly6v>M=t#`2JX!uyTkA8&JqDnUSsLTdj#i<-y`0$jz|u0Sok=*IZVF2Y=`QX zZ5Ru$Fv6^yid!2yAhhv zYp*e6H!{?!|G0S>{k`=Ip7`lM4LWm}|EEFn1wsFIKq`q+i~A~y{UB}wKfKh?MQZtjH?h`>&OmfN&^=Ve;d&H4Z-gx}xu$ zN>~AZ@TFQ&p#D(w-rK5Zm2T8NLAAV_QT0rf27nZ64#VU0TE@cmv7BE5^^V@IaV~fc zfBzFAC$_()JCVC7n@xU3)YPR*2@_ff|En?@CFMQmKr9W%3F_YPqqZC9r|14y#37Ar z_d(EOjo|SACqq!l>ck%2AKu3A7$YKoL3C+%*d%;kX*BMkOO_ljI?Xyw)2kDGG7N`O z3^4Hz*<>gSV?voOe5X)0WqM6G82~%Csk16Y!P=P-7o$@HwY@vZcl41QZY0PJ=oh*s zhnMj=J>hi09;?^y6%>A3C5ZX{#;_gAb$3e7ZX#KE_60{;l{^mEZLuvGKkfm3E`1O7 z3l!ux?=Wqv#ohKnn}uY4^e3%GpFk-ZU7(-Ch$RvY$BtIIo?>hMG{W@if=&e#dS8ZK4GLWSV4xK2K4Z{(-6^jh+Xqdzv;;kQ=FpUeLY8}!?U1?s z?<&NOum&p$`fP@NSL;-QKaB8~)o>MrxENU1wYj8Zz!W+#<|?ELHR!UeC1YBQ#)`Zo zm`pVf+IJyN?pNa+6N_g^{6U`%2jO^8qjn$6=h*}WN!%qig9<_=H<%b^@(pSQ6HQe- z15QoY1?7w@_GZcq#wHle>rM1fk?>iR8U^&I%31X$hmfS{Nq;n`cT zF_U0s3R=iTq?kEIhI|Pgaykk6H2N!O=Jqo$%gQryNr{exszw2JK4v8*2_nGi1s5#m z`EF{Z5=UBWfoh1n$DqvTK#j;8+x}aCA`QANd8P(-tq`9Fsa`f5*fyqNfpTX16yYB{ z746`&CqIN(Gn3<^wy2v_cF+=3i;Ux^v;JM1%WcC=gay~RjA{l1^fOMP1Vyhdg7n;) z^QV_{9;H_&uONP{j(YWsx-ynqo&Bu9-H9W}=$P2KEq-i7*~rJ^wgS~gGkRG1G)3E4 zixdwOv7HB23xMKr=9ONlt&g0xdY-^aD;n&BIlJW+&*jo5Ha_&D1bz{73XSPzRqr%s5r5SV|_K#d1zGw|0`U{Pp>a{D78uM=< zKQkz|Hr|O&05@-{VVsfTqafi!b%Iw%(-!OV90_JS5F@f?0__%_{{d@U-Ks&d~P7kFOhXBt`V?!c-D-E1Xhwqz=$d) z>p&kZ5@(T~a^SfS0fyKzm@GIrFRjH2Z20ey8*?rY=iI5X_l|JtjR5rlf3u~$7{e<> zcIW5&N_@mOJxJr_1NHu8JdXl`U85N+{s%goTl4FnaKHI5uh4aoNwDyMTmDwDfJN-9 zCgy)(pOPI)Hy}MLi=X%h*8dOVWZ9WYM9;wd1M+?8|3w`u@fj%oS1as)wFcw!K-D9K z1KT0BVke3{NBB!j3ASAFlC$4z;flW!R(t-dcluG4ZJ0s%(TYCj1`Sky9-zl@;Jo;1 zj%~OqF-l9t^F*taH6?@mME8!xefy~J(`PX4u$o|pKlnI~SpA29#e9WWYc2%p32Y}Iz5bGwik24u?1a=&@SEu|@CX9^ z25}BNqttiwxa`3N3O75vbzM^Q&-fVvp@lXygz&M(O9_~1Y*=ZI5EvE=S6xSo zVR#mG<=-!D(@Ps}AwcjnbY9c5;=%~d7xJO0{?1kP($##wXyNK*7B_ROeS7F0rlNzMn8%E zHzKZY5~wxk0QV zOs*+AT}z>|_H&}gcB22ME^i^gFk1m5@vf$W?djAAfiM5*%LH-G4Mbn)0ESF^Dpva0 zb7snLJ4s1SX?06++-gFsp&eeqA&CblLh94!GheHhUT9P1mFr>WJu*md2mVNKm%&cs z2i**h1?Z5yBmh3NIP$SSELx!e=1 zFN|=6#CWZg)@(ZnBBZ1Rl8Nuei7ylO)9(_@)E^ zYvqRy9*jf39G?d>HA>kxE%5u6wz>f2l*>z%JaLzEg6yFdOWPL4HO{#V?$1g{AN4iE&pdZ&h)T;qSP(Ryy>AX;&*XaYFn3k(!~% z5rvTlk*uvztRqz$SL30V%!rI1 zN~?ix8G^?Wi@++C+#X%}fdk(9FzeynX% z^08LlO+#h=>1!IYcdr&UHveaWP^Tty71%tc2!V_91if#?|lt6xAWtYd@`GKd9U-tzuK*uI)xJ(m$Wc8LDr!tNX zkkE>o7iO7UVC-4JFF5*HV-KZ22l^>^_a;CU^O9JH9)#TzhRpk{v5=gl97BjuE35cK+4Ea*S(c`s=A@=6&7yq;tPXRL ztaXQmrSRvR{9<>#5HdB;F}`)Tg;1gTqcg@ zW?)E1Kl=rkSP>n(?giMGlP2-rwUku4C~4}PfV}Zn@&_gJpe>&{gW#T~s?&XmLP?NQ(|3%I^l^3TJ}LJCAL5)A^l7o` zWI(?-BEluhc??rrqlB}7cHInS&Id{sHtSedD!5j$TM>e4wK6X19x!Dr4O(An#H5vl z06b0C42{(Lq?+f?T%sj3cya5VfMfM_C-&-gVp&1Ke(Pfm`Ux@ztITO#aoLO2nex*t ze7k)9tJ2e~6`Cnyr}8YVuZ%b?(wCjc%qu=KYm3VjY4y{ae=<7oy^zL8+g}!5bxOXt z{waC-)~@Ek`Yp@wcY}?8H%t+?hx_H7M74Uw@|?lS?r4_2w|<;TdxN1r53b}xj^sj` z+k3~1U)S<~hd0RA4_XE^7XG*ev|}h`Et9Vyls|1SZXR(~&g%=h)P*Yr%)f2z3Hba( zh}&BBOLOAZE(CW@sJCzDC^_+$AOa0mrr)-jJf6jJF58Hhb?h59nmh!I=z2~sXG)4_ zAcy1~b;W$^g$-HJpzXT{izRv=!cvczuHz<`pRL8LHv6rROU`g5r-<4SdOO(kG&$Oh zd1(T_vgOl~+q5(}acknl_MHc7A}gt_!{&2NbMC2hNS5GTJ| zita|qzFGY)sGfNl=JwS!{PQxgWrc)8S<327{>_)%to!Q5ifi#%!W2YC|p#QjK;FImt0rTAneG86H4QcM>8)+ zM=y;XHo!aWe!NmiVow}WwY>vsfzzJi{d4zdSJuRYEaV6dG&y6Zl&lEdGD~WBo+RbQ z7K&!94W#8XR=@zpIkeXdI_vI{I-ZB=*_6>F6OsiG&s3Tja6@?3H+JIJh_JGp)X@QL zG1p;1S0O`rVMEaZp0rS`&ixrj1AA9?dxiWf3}9)azULal)p@3k$)Kf)@u3~nIpN>rx;V*$_yN5fjfg{R1DdTp^>)j2FJF3x?% zKen<6BI9iJm^XB~9Wf=f7mCCy`{`+QmJUdZK1JeY9-+w+=&jDG%F6{f%Uw~NwKO*c z+4Wc|1&ZFrThul$!2I+$`l&g!N@knc;iW{`YA2GRic8)EXPL2Su^Lj}40oQk%(6O` z+mT|erQ&)fA&`MmP1_`6i`6I9yEu~Q#WeP6x}7A>xk17-H?w`O>{K)VRyz!*Wi!{c zyG(z5_lONzteh-Kqq=Fel!1iQ9`v7+ z=F+%LlPU-W`ZUhBN3I&@3Ah=I#v85p)(44*N`lX7qkcjYDSY@(P~ zp?OhrEBv8zr5P;Y(YBV;Oiik<4kwtLB?yOER)|Mj^VK-^&fg8?BiM?Y5N6A}Z(wpy+-dqc0 zx>3!UKh!p!9)~m^tM;hguoC0^Oypic9HuP+{8jt8Iv_L~dhXym`vn;v*-Hb^9apL6 zVvBE_isxdPZ)m_G{efneb264cQV6xfIJSPpk~T{jY|&Y~CQUczpA{O~A2r>&@yh#A zzVOt_JImDXw39w~OtW|`nECoD!hD7F5U1+*7~+>SRN4U+jW- z3Ua6nCPHf$vjvmVUHX(vIeu2Y#Z*UXlgofe{nd-4afWX~M_HLV!Ajg;o@vOjNGlar z`QA8GZg#J%%nNd2!5wSIbWRVJJe4nu$Mz3@RZyS2Hl$YDs5qTQReUhHeRa-pXHdEd z3U*#yhc{0eOz~&$T=l{`(@vj@6FI7A$ZG7V0A-ff>~{y@eZ>`I`TP_7-L}O#At8cI#-pSLtFq-fseXpUZY2o2?yD=pdHqK`GX~?{I@zdGME+6 zxi=*kC1rn_o>=`|mlRq8E1L*k*8OH7eNuOEmhJ5M-AATp!tWC;bWH1W5kae&&;Xbn z^m|?c_QZlOMd|RY;sD1IZThEuXSY@}Y{xl+FM(ti*L35?4aE3PkWdRGQB)4)9YQ*o zJQ6~~CH!(a0^&-vl013tZb#bblYi{Njs=7Ft}art=ZlR`G%ks9lt|=BPz>g~Ns~y7 zb!9Chwz1l>_P;xvTnedpkmjyh)7rEPLTBHshVN?p$f*MGy3*GMI)ad?x*< zN%*x~G@~>QeolU6mi)?_?@M?z+LpnoXX;`bw+Y@=<-25m7L>qf!ipdE82^su(ky=( zoi=yuIc$?IZfMeAzhVK5+(D7{j~0?|&4xf~WQvelJw1qmEsV&*cPqb44pgEmrt!(= zry2Hq)blPufF!2 z4{#XoedvR;=#=n}UTdp@IX+UGqU0(b7&&QxjkfX<02eb|)|D)L&L+}xT&`On^R|ug z*DnKq?O!e=k1v8g-kO6+8Juhz`rnu09 zIfWK*s|d1k$PG^FuBQ0IW3Y4QYxuN9WCi&owHt0sn+QF}R{zmVyez9?3`!dPtUW;B zig}il!eVoP{@f^l(sD`hug0P>@wuvcYf~5rOCK!nRaw)ycg924;R0UxiZ6n^;(#>LRFl#&+-|$xMK{ddU6pOv zy&cQbY4)XO(*wB%X3PnCiOCOYhA#(hmu!-KI2M7WL)v=kqD?JnVQQSlcp9mim&032 zMFlJr-mwe>!|8X2u5h-s*z#IZa{ZBd?x#UZVQR`%ZD)=gLVB0219y19aA_o0U2#d3x5kk825~QG(F7^#M3PlK4-5QhE3$NzZuu^W&0|xx^+;1*f4JJJbY^ z>~2LvT}~7cj})*Ve7dApOOryOwh>i>n`-^E#ggkQ{JU)>&%S&rO}wV9^Y z9LQ!%b0%OJKqY>_po1Te1jLp2*8Sov$5SX3OSfJYQ=NEl204GJh`WmN$Xa3@m+DB!XWlZ_ggmlKWkx7#0C zPoT@iaJBc()701$J@gxG)%RUjW_ERT_g82DaLY{Ie5V#aPT(~z>V3Jeeug zi%0hJ&Ow){+$F{XrGs2sDOTX#&bt}{A5Y`(IEfXWD?wa3vqb}}uNtA2wAfxvU1(8# zW%!bM9ty0bk*p<_K^@aVerF`Wi)L+91>esjmF!jfW4i@K64l7gee*z(ad+c2Zk%s2 zLe&v_S>ut(i=;Ner}okv+T zy8!(;&ak8yx8%Y@@vnku=ZXi&^={sY%!jk7KrgS~S7pPvZ4(+xv+q?n8}o%IQ;V~@ zSKP|@I3=c?nJ;qzmYbR0Ns4zBRVCQV9`a6+wAFQEAa!bVY~%Ff9fr_0HvVaCab4O| z8b7`wBQYA#>SI_eTZsg`3#%`YA-ak4F@K{9JN^_s$Z~>qg_{}|TeFR{J*p3TzZ$;+ z(idB3-j3)5jw|LB>r-)V-_J;Ql+^+16rY@fh2?UY{9%t6^evByPg*z8?DnW9`qCEI z>Z)nHXDnrrZuocpIyLw{vxf@^NMiXGXBjVGf-v^kD0gj}(?R>5*#nv5)!} z;o>9Qf<_K06}5ld^na;@v7^Ed(XYuY<0;_|1t+KW-s*ss%Wp1;hnttVO3Z^yK;L;$ z&8Bqb$^ws@nj;gAyS~Gq+fC&YK#OrZLQ|zOXorrPE$U)A;{z^%g*J{czVXQrz9$-QC@#KyjBM#ciQDw79!F#frN_ zvEuIT&f<&nZU6Ip&->0hvy;uuBsV$pJ2|*>CTF#sMO1)yf*mEX!gF*9ucJvGBd;<;Q4xNDlyvHTiqdL z5JaD9U}*0S`DNN_W?`|uJ=(Gx8asT+3S+?~EO}NU+sPf0rwMR!!(Di0O|Z}`H7eY@ zv?8U~3eU9LU5J#b=@U<8xhMAdpwK6p=_jNRDw@?Zv=mAx~e*UOQaM1cYIn`?AJv36l2V4VqC#f-K*c<1*7D}uC z>CRN268#atRgh)m>IPQq{Dy)REpZ)0suxuCX&dV`P&%(oW7JClYyPhX3eF}8tT$rM z#=dyU-r&FP>Bwj_*%J7?!n?1gglZX#Sz83bDw=)OgIv-{Ooib{L9FCr1PIybtKmF4 zqhHG@)_n2KUqw?qLTf4YaNPS&LzDw9tlDq(k+q~mXX-UOSY}J*XSvdYpHPN#c5dh* zCzK*6b*N7*Gr4))Qe03bysqS1$L4dR?tZ3y@i@)yY7~bpH_Kcn*3y32q=orEUCn?Oic`kO&ya)>0_zka3E9CO53YeAV7Mai-B ziI-5Zu<93wvC1<_1CTbd+f8?B-ZQVQTC*7HENt;9TOcOD$XLvkB;V_GGKfs`2rgg9 z3c)602$@$$qBB!5@yykr#7b^Q8PZJL9xhwjW5PaUszR8R!{d@Vvh{H9W_)75g29@&Q4H^1Vn_l+;Ut?M z>V1PgzOJ&E*6S(~fvQZl`gOlJ`HTGeIPbN}Whq+!; zJysE4O3t^RHcDvRq}_EsnnYE9kJLqT2Y>k`Whwmm`%0Pg<*LN*FJhc0(r% z7mnR6=@}ljUnUb)*xFeGY&NtoN#4TY%rei#F#&uj98tBis$`icpX_JD9H9}X+~+bX z=;uvRk#ou;Z!VkX!fd6`y#Yc^BNg_t9k5CLr&*`wr^MP;rQ^#yHhgtFRiQxWC%cii zpH(|q+!mSkxzJzttA@`ej) z)^tbR4JlZcirjsLSpm83o%L)1W%IF72`UbW`?+KM#q*R-e|>b)-F>SYzvLg>_X>ZQ zFQ*Sb>~bZpMp4Pyv8ghj@K~+`ZIdmei&1)CSCXmbpwy; zgrD1R3FT@1%s7qvX<2hE<%OE~n|mz?Wk<^~=3Wo;4K?YwbSx`-M0YjK>?OUHb<8tW z?a6^{64S$LZMETX#8&fOF&HyWpoPHVn`pOUS`$y60b*DD1al1ytp%OY*O9#x_Z6Ck zR=CZ@Zf3ntj!L$vRk^&})t2;_M^4d>XMNS0ZA~dw5%Y7+^>=>TtOQs(ucC;l*%Ay& z?C%aGBPZ$bRS8U`7C1z_EQ*4%$!52O``{KX`xeyPNMIWqW`el^PS|3%@Rr3u=G5z# z=$yEWt7f%*iz#|uvB-h`3=7JxmV~MDsa$n8f#DlF)KooBrQ67hQOrG0vVB)kIx!#N z(F5Y~iy6)|H{^P6jr#Mycc@|q6u`gKfY!eU*|LQKSe7d+CtMPSY}MiDH6&iF)? zO>Nn?;UYMeEB7<8&nBV)Z!JCVvZRRtZ)aj3dmpd2VjnLbk5d7!QvvV5p7#e({f*=$ zAMtS)tRj&b!!Co7Xvt7s%)3oqPF~OTYtxaFXu!dfkKj0Q#F8t^i=|?rY+At-+VQwr z7N}H!3^C?4Ug!K)tg)XaiQw&Z>*Fczy-wqwnl(f_Q5BO z;%HKf5~-?v_v;5<_B}DiW~MR6BxW&`T;-HHrJ7>U3raUsX9VcyjtVigMV3+P!&?azt1p^e z#1rlvuF>u{J*IZQjw3nsU0DiqZ3p@2Xj4_B!hEalH6#46G@QBUIJ4 zWZbni3c*pEhBMTXIq3oy7Y<%5z~wr$tvwzWH0G{~RZab(em#Db>s8MBn@YvfF0GVmUEV zs=jCgb^JtsFN$9hkE-QD-63MoYz@N+4j9Fs+gKNxPBQ7VOB;KZ>Lt``68vpAVH43& zXn$+Ki1>x&8Wp{EfY{$z$q|mgP~%V+UarG}u3FYIqPN!7z=gPlT9rS%WW$UG6v&OB z#u2m4o|e@r-x^J`X~x&GocIH%TX(^ppT)1lp8zgW;H&$@r*~mUp#g~Mkk;2*C8_hk z07SfSx~|PwEG@e@XBKVr*@MLC5F)u^wzu1}_~qksX*T=()2R8=uW*Ur$TkNwgYm(G z3T+&qYia$Wf;igQbYaQTQY<7rkLdgyqw_ zns5VJa{o)j7@7_Zax$MpcE(6cg5JUeO2hEEB;J9v-G!X~&Z%xIe;6AGK~(@v0Mk6s1Z3xc${{9o%Ftnb^# zg_%C$l7Ra<(Z~#RRIVfj3^CO?Ym-s#fT&y6joFKvR8xig{83AvJAbR3U%C^iFrKQ4Yr}g(4)sZ8BRW|?^2d$2aido6$`P@xNse3v zW(x{hgg}>ecI<8M(FEiny*(-ALby7A1m@n}N^T49tC8NgCxocAe(6+IBR=pTgQa8_ zylPP58?WIO@cR3{?hxeH@YF{SmuIu%b&-aIfA{8=a`c6PY^ zEP;cou;RJ)(t(#OEDtw+GqFTJwGng{gv;3uZ_@`9db|*U1C~BtGCo;}!2!b{oYJ>Y z+^_t`#!mxh4c@+XsK^urFYEJtxHx)z5Tg$_YL;&*7;D7=J=CLFRlS&-u&uw>)c!z0w~5JJg*5c;UtGkz zW>@i@@HyG+4ZE_8s+}3P_W`em8d=4ic)-+&cHxI|BUd%j9 zyFF>W{OjMk+tz^{9sQ%!0P^(VW0 zNQcsVbAa;(JhBmFM1FhFnZ9ef22eQAY(sYVj5=NXY%x}9^N1Ebb3E`*Z925xpKCje zA-$W;`Cw-;D8oCc|NcDau)_CtDl5C8(GbS4j*7fgEPM}mp)YOE(w#rqe&##&OYyO* z=2OfeDV)*NRK*V3{C-!Mzt^$FIIXu3FqBF$3r?;*yiVJ5;v7-(_qzosi;D2*2!MpG zHbr67T(tr-qR!+}=C>2S+|;g-&~tncm%k-2%+xrH*&KshESV;HjY5d$eN)E5kF>sP z$UYGjPcXHHle%j`EYc;)Ny+x$_OWK#lle!`SeQaBrBREJqurRevQYfHs`!Lw8h)#U zPjJ2}&D#(fZ81USn41L4&N+v>N|r^60C}%(3?c3|a(W1J?VItc7q?FJ_FbtNy60*d zC84D&-hw>%L_bFg!Q=U@^Y@P);jq}VEHbSe+UDqq?~TGFLXL!TN_x0h4e9BFpO{Z4 zu{~X`WFr@ZCSP3dQS((gC0T^Y4O`I4@zie<#f(e3yRRh{c&MKa2em2o78*mT#n_{Q z^pL5aj;T!sp%?FCZ*2^_Zt1(Yvx5RDL+65X0&ngT<94~uPno(M`0A|e2U3Z^zqf^A zdoCR6CBy6erLs(wX{YJor(W;)@%`wts~2pCkRp8KcBd&@{tgY<0M+_}&g*zb1d9bz zGb%yNFN&W=P2RYsFAct((B=s_`yF02FPm2LLUD<1-=UyJ@mY}`pdwXo#(cKUa2C@1 zm>kW=mcwIS12OjM&FGrH5Sb=$L`CZ+8{9-m^>s1T0!UFXW6XAb?6iaX+os8*&g@@E zd;6dMA_$gHeClY%Da~*Z>dI7aG%3}5fsE%lQabz5z~RV4$g9|K7byMGQj^?}C8pSU zi3Kb2r%%|trbEO;`vc8((9DcqKVw84Qj<|v{{>a|ZF+MnP^bJv3VjLg3QSD%O^|0c z$;L(tV@CY?89nNfnvBM798}%EDd7Hd{mFkIcBjsiEG z!28H`zWd)OzvfakM^`N~S`rKFt}6MP;zIxH@_4d#08&@99KcbyDUd8VJ@*MJ5?>Xm z8z%XeSU)SOY7P8oU(3Zmf?llIhr6VDeP??L*WE|Qh$5a&AYZp$o}k#-q?s0q(+Cdw z^t+nEl%H)G=`VP+VLNNQ+87m% z!3-^llZS?=J!b&GvCy{1;;JTkFjq>K`NNE9{yAsA)KcNPtFjh=O2elXP$V8 zb-Z(!dj|P;-^iIWudTHl@dUIez6KV zDUv7D=_PW9fLE9P{gd|kKx!R^fm-_YaxIntFkNPtS0*)glPL5EOw7nM z-=t`hZc)BlV(@$&Oy$^XGh=HG)#Dy7q`;k15LNQz-0DE^Ihyvosnhe4OgA^n66^nU zI9Zz&vQ+sc&uLJ_o`9(Cb31ph7Y_=9eOCJ505fgkt6!)QaVOsCsS#Qk0Ky^BVd@X` zA8g%q#(3Y`M6$%HsimX;Wy?Q(Xhs<~2lGWiRB%LRg!%aU64hyr90P0>6r>DtDU1;0 z!U+u-4PH@Y%~SKnKWIchjiH7rZRO1jelY9*U?vpAwDSi6?~6WD3h z2NH$ti9CbX$Zuk*6HM!7^RxJCJ3@_RT=FRJCp7lc1egtB(LQOP!E>l+U!uu*$XTxz zFJ25x_V_wmfzNYH{JRG0FPAmDiyDFmJ*DE}iTp>{}k$RIGRr~hZpQGQ+LJ0H|$j|%=L z3@+Bog9UqFf^-nkSakHL6<>XYhhm1br>qSMgh5P5M~4k^NVce>bQfP;r#Stj>Uo1K z{()eOpv5R&$;XPBiLo{-u`B5MCS!9(@CW0j%)h7E)Ok>b2Wo28S^)Y1gyw94l1Dl- z^;QCNuvZ<9ZFr)gd=qFRMSqp?eOj9WF8rCuNU-|*i`W4qjPAFqBgjGwj;qL9-|?<2 zNGle22xZ83(t>w<89kX0G=<`1J&>S;4QP@VX=uR3d>2+gPWs&UGhY>micXGu2~o1c z?MbgJPn0MZKU7%bQ`v{EgZ_u#ME)Rl*g2sxd9nLD43d35E%_!K3r1ovjwjDTkvJLr zV55s9wkw3fJ*Lei<^3pn9jA0)>SIX7mc7s^`#nUTS_d-Pd#KYn9=`i^R=9t z`ib{*4sVrezQAXeI(JIJGm^L~l5Y`*Lf=kOeuQp5CP<&9O;e>hewvLz;Z}AvJqz`S zx&cNBRcVx}=i{gQrE68`B202G86Bm!efbS#H9(m>KB22jLK--fqPQ#)vg4{)a^!2hrX!Xo97z4TcvmG8o~Bl7{Eyw{(35QmYXU zSPL}I|4KkAtd<2Rh+sn=qC@>n8o>FKoLahdGJ6_A*0=z-jagS`V(JT=He`1z3_Llt zPlD5BO+aHd*rsl%Gg1F`9!bVB+5>v;uT=9-)MCG9KLIo;I;Xa6PR0(wKAJn6r+w3r zn{}-`Mq5=&Q<Hz3JW(Icg?HQ$_h`Z*urM=<$TsAY%xctIhryZmWN zfrM55j;qZ%P|*KFRB|F91KmNNlvAyvq3bqXs7mh_P8n$c_fxliu79agj6l99x0BMw zG8=pM5@P6A!OG*D3d(TWVuO8@v1Z7XW{A~;DS>ajLb_KQnC;K|Ep|4iX0t%Mlx^nQ zt{i9kUY(Y<8pm@lUge%ha}B|?O`kk9XzxkUiJvl<+87ku$5l1S?s)Uazs>VwJ~czl zWMjZh&!Sk6lH`-PLGb1t6DboAB0}Y8;pt+ei_3`DYWc|&)7uh|2xA~>nf4jC6IJ8; zo6VX@v7_Z<5ZHbaDLei2TCoX=Gm9&KgJ)eb9eusSQx!gsgGQtBOp*;dpb*jPf)_BC&Ezu{L0UTPU&YUO;Q3zA$VfykXY0LvRn=MKvjnk4lUVbgC|IVD1dCL0#RjDy#0n;h9I7FGLw#X(XHn>uV*I`EY~FL z73>HW6{q3AL?g3>$0XZQY~eT6IBl|N%d%A6=jot~5FRkP*oN<$p>IX7C%E3j^%vsJ zT|u5I*4U#X!LM#)X$nR+gmO;it$JW|V_Lyj;~tBH#E$nB;&HFTyxTl=&j(mZvr>~F zkLOY-z^$4`8&U*2uB%X;R&e-dNi6t=W`4n!w)8#eWQMNxm7V<^=E<4e)T>vhj(h4^@nd6O*iamegz zG(+jqq(Perc30{&oe2()i+Kx1w3x(yf^NRKtdx1Xeo$pUA>Yv}#LPCX&T1->fW(j? zdhy_^pkffPW|B^4Fg@C>dCFoX$0va2#%Bmxn0v^5-1TKP z?mwVCV$+A(+)ZHWr_Vp#$Aryxg58sdUVb(Wg=IPkWiP8ho?>bCr_!oSg z=!l80np7^ob*%CfGzP9h&t{0OtgxT(#C)QUS|eepm7M({FGL;#b|6Q&8ddP_&HjBH zL}7hO-3ZY#38RDjPfR$(aq~y84RN`{^zK^Q`ALf{$Q$Mz7*m2wyiS;yU-@AISaQ z1MyX*N`NOVf?v{Mj>9N$0e2_LgTez##)M#BviX;~U(~DdtZh;>5vjMfx=<)l?~B2* zBIGSf0T^}dFo%e2#Ks_qYrwstS36DVx9bos6yLCr57fOB>(9YVV)E<91&49Ny;*8# zr*Va!Jmn)>p@u1*;gRPdfPa@doX((xq!ake=$S{Zz*`khk^`^$kCVFri;U z2|*!Mz_)5?FE2)BKHCe6(>sf2iqp$KV#eF!MG7bf1|L@QLe!`hBj4#(_3#nbF#3OV z7G7$+U?|sIdIqHF`f8L0Kh1vY#`!j!H!f1Lf6`JR?I(^!X<&XLb<5BP#boikA#IJ) z)rAp7FWD}$S!*w``YYz`kD|raNyl`c*<649YMtjEBZLgPTr$j;A)8xZynAF)&aBWn=Z0k{DN7Irbd zdJ!In7bBsa^e2sgrJF1(Iip{w>dq|Z? zyND9Bm9WPvcoU&-+$%-OXUnn*>r*vDlamv9U^)0HCqhPEKKqd#s){2m~Xi5Hf zzdw~`o>hIUvcW)aZS8jVTw8hk_NN#uPPUPa7mDr7eu#(Ehgdosi$H1 z4<5fu0VJ(6WYxxed>C3{Au&5!bl(M)4M$M-AQB4JtgO6{x&w^&&q7=$^8jfgvb>^@ z-0f)S0^@-wUP=AGkdJ97)9W&)Jd~6%`5YY*8g+OqJ$VGVWes4dsR{H8SZl2_u~{Yw zt6SK=g&S~&Wi(Rj`BJuk#?Dbj*0+|%_ke_aWpyHPYczl7zxQw~*?vG;8wibFyH!ip zRi{y#zkc*wwiEtUAb)B?~axF|&uP*=e^(eb>8q!TAXweb>whUtMsg4s-8-!x4h5`o> z8{Qk;3&99g=%>CdCGc5^ft(u>y$rH|N|IX&+YN$&LHrvYgV#QhEmTYj62$4hbx^Qy zQsa!mH>R+2afbxLyEEs{kGQz{>;U15!)MgoQB1lE+p& zrMD^ecsGJ_&_BilJ*!V)D_KlWVIsXCmwZ3jlAL(bb~lDp#Xd}GcOJ|UhpN8JIlZmz z>q9oqm)4t!p^E`;j*(y*H*s4n8tncZ`d}GaP`nK9T#`weBP=%YqYu~1Os5zYO)jtd z;7c8l%)0DSZ4KjlT|p5}9~dsL_SiZ=OLrg+D?wW{l>Aue%CuMT?{Rk}m`RR=!}f1M$pk!)0z z?l#hyrjB$cx@?Q3Lv)B-z=Rtp=KK1l#B~c@$Q*vzo{>i>( zd1Uz`maue~nLWiiU`%vX6F`6>lq$PF;CG^G1JBJIv(THxFZD&y0L9Tfy)+5d%9>q8 zCsDb$L+QN_1FpE(rNq8-Vj(dZs|1217Pn$(c51AtCJ;dvi>|Dbiz)c-h8@Sso@`%i z?8Ig+N7Q|LWhUV-m8vk3cA&K{#_Eoi9eR~`B)2L2L@iaZ3Vf{1hCz25Jpq%hHt8?; z3!B+N*ct0TpVUc=ghQySro`dmRSrJm%RN+5LyAu>-SPm`3eEAv;GN{o;zV6(57 z$efUmKtM*b-?9kUWX&BAXX_GXxSf?SMUZOLp=(1s?M7ZIntjo)^8b)u?2r@1l(!O6x;z}BJggW?*C^DdSa?5# zrp&VR&7 zPeL#7rPGeTPi&l?JBT@1c_%dDW?VYPmX-D#Lx4jY1cYZ<(A)tf8S{r5w`7vQ%e&zQ zE}Rlg-#L9oxUc-@9S=jSupp7vVm@c5!mNX9Aqk32Zfp1R3gnxtX`X-*O5etT)j^>^ zE*$HC3H|T811%9Gn`V_pQ4FIA=M&JY?pJ=zQf`8C)qv03CnX)Xq?d^S#`wrjw- zaSsHg!G76$AG_`XUG<{lxd_=jc@d_WeUrp~c@gTXqf^rKZkyJW@w#CYc8`cpTOk#;>;dJWGkMXS^XY!PS#? zXV7KLaT4GC6tZxt2BvyFJ;1h);P+r5?9#aH4kp%_Z2hi$+9H5%>kMgNIpzE4B>0l0 zR`Z!wg|+(*-D$7fn6kIvw%UC*bk4FT1cNc`L=Sd)DzRXBp0ygMe+BSeSh_7>6W$lK zxqxF*<=tM$7w>jap5i+lQ&gDe=F{rcKn@%VAY(S}Qq^};;#Kc)944}@yk1YNz`%t* zuRPEjCj%8E%#N__e$yGYLfsN0%W#qCO6q?oaYFr(3DFSNQ`d4m-MNA7DnQL@m{~{~ z{8u%tE^c-MdMk$PNFdt@cj7gr@-q=&Dga(xXpRhEqb>V~kBhoqCA8?iuewZZ@1=J0 zqq)}GF?0ZU?q9^uVEqUs{6*-V56|u$K-n{xCbH5xiZ= zkq+ZYT6YZI%g+y@bCgnd_y2uEHS;uw|E75|o}xABIwd2~^s5{*96ACXB+VYNxi{dM zp+_o))#vUup7V%N#T~cj6v1HNrR20%67j9?$~$qh{Bc2;%pt~=tXDh0psuWO`#5=xiTrqhO_t}>>#^!m3bb<36X4vdT z&tRq?&B1*(hmIE2n@Pnbcv$rw>UE{Cw#xrq6C2smT2{&~Bj=VW@>1wTN4ObO9nGV= z<_~E;t-bcyQ{M5>8-d6d5xkc`aVV-W2ZOV}ajZa&9oKkgrfwMb4T3QoWJfQH`JG;SJwf^|ktoHGIC zdt!P~Q5$Pq3??sA?ZJ*oHZMxQ&gRAoW#Ix40_~iDF^q7UxZE60s z^$F?rlx)P;(PpkF$(zY&oUNk9h9HT%NfKN+uRjM@10*aVzMcjbQFjd|WYn@mVn{O= zbZ7cDYihr00zv5gM4ah%K$n}g>S6~U+IR=2sZX5c7a8i^T|LFz%mHJ6!00EBwS`Ic zCiGIJhB^xrDk$_Fu^dW{{-K{kczDhlwLLnUJLIt-LfVR`LD2z|ySZ6lFPxHKi$XEqQcA-(p%Ec`ii3#X?k>K1gq zfth+qcHm$7~(JfRV(7+}uMegN*vH=4Es0C|O60xx%8NfimM-I<>6$ z-;x%GwKc)lVE(SU8P??kh2C%5b3~TaNU5-q#i-5z-~V~5iDUMf5w@q;7#woR#!XtU zsdU;Jo%1Cz1uS|$P`TVD91_=8miXFDucXQYj^>ma>&+)aEiNxT6FU;y4 zaN4BNG_X8)v9oyyS-aF_^KzncS{wshLe0QpB^+45e$Kmx~Hc04ZSiFGsqlMUz8mMJSw4{J5!rYb9Y zk@dGF_btA`JnQhHF+2nZ6a6VYb4g}C4lJC~lR2aoWF;MN-9$R78`dgz@C|FyL?Gn= z{u9tS-M|xN&03bJ+Q{P{j=V+|Q6VPmAAMPT0a$B(bP8EH5l9x=ZPs=*@3d*-ACqCt z?WsC!hO`G!A9{MzT|HN*CAPxsVLo+&AhDtA72d+kyDkiAEY+kbX6Z*gvQGOc>J8ok zFZYYGzmMj*?ZnqwzMdz^tz&U|^s^54vZTW~aR`L~$zSPK0BgCR+b7FFN#0hlrAJw+ z1A+cug(d&OiDxYaiNbb2HojRuCE-)WzsJpV!6)MtTt7U1jb*KPcfiiIs~nCg1&m$k z{NdT2(@mP$6xI{4{Q51k2($1=HO;KY1c2qscR9JQy~Q2$#6&>id71H{C$(3>lF3{OWtxz9T#1J;f5+Y%!p79_K)*B6|e0{O`J4fLm_`R*j5!PF7LQ*iwz)0+2$v~ zH2aM87JZCDuVX6gEwk+C8g(Ji)m*U=&;W3(D&%=R*EvA zj!@@TI-EJ#0n<&ScBFsigxT|&!lJt7sTL5<$lpN5cbq*M<>@xZuxG@-p5-}cZSu3| z4SF|=Z_ChOYh{Sm4LVd!d~CIh56j{mpkF7aRN1wra6bwh2w!zKwx9XYwiflN9Wc`m zfO9{Nf3b&{`6X5SMWf3qz;*Qvi4#V1<#VNr+tSZhg%U=jFDtxxkAS-KT7hsIux~+y zYgEeUCmO3PB(rBlvC|)}jmab&aDpj>#mPa`{4rZDXZl2Vl0@T2j zZ2Av=+~^sr-y>`4ykNj!gkp1wA)yEq z!lW58Vw0sfd_zN@@u-5z5uQAF--}kImJZq< zQ7p~4Tzmbznn3B=@lFv`ha!}va(>mFf=Kt!9Tqukm3lbQUL6vqSG0?j8{J=c@e za!3H1i;gh##^rXn?YJ?BSC9DiXfG^qv#MQo*-T?hYk4@2X{_r^edU6U0 zzp?wEU(L|^=G_Nf0SSt}Bzt7<&eiH5M>xYFOMxo{PC#CP+~wi{M_A%Of))5u+_<*RViEO1!h@v8#N>aGPd6nwyRk| zD+~hD4ox{PhZ8LdC1E#|Ef>~|uI!EOM)TE2&pf|**d|RR1LNd4-S_#arCd5m=0qfY z`%q6vaegvm5dwR0xi-#1K?k2AvLhK!sJupwDE31t2ew#fye(G>200RKb>! zXfPd&8e;5VZ0tV0dA32xXJ?}9gJmzI)Nq%}l6R_+C%IrQn6Ndf7g@$rBw*lGxA{yF zW2fdU>VDMfhlVqmc_|6X0&-2X^CSs|ksjRqqrj7w8$1Gj0sOi{meiUreftA*ELHYJ z={K8BO_RY&1tGC7`9fOC?xfFMFtOXJeL2AvT|-m?#X>9PUYv8{cZTez@@m1P{JTm| zgHPXXf!`uL^>E+Lm|o!9Ms-L6O&2m3RRa*0QApTGmpJ$L_8Toh723G8YDip8Rj zHr0s55*mX@KB)@RSbWSesdO*m9RZ~Q26dx-aBJ3P`kilSTyQHSOUf;*UQHvDx?GEnA!|nOZUB?eU(t}@DA8x$n0k1f(0{9O4Mpj`0S{NEh(CNAS zoPXUdk3nQIvXaO}BezOpPM5u2zULNhOjOXgHj%q!{o$N|~-PHW=D9 z-J|K(6Xy!|m%Wri!#%6lDyD4hc*Q%8W8+W?_zWD46hvhA+)_AgSx>*u9}v!x7>%IO zh$RyfFUUC;8?f7y{_te|RyN!#=lW|u9?}D^!aEd-)|l7;u7BpS#32Sl;DhNOz>g=gkGGyzvX7%Y{wkMs>W+q~58N)ESS6ZSF$tnA zFKeFcAV-WK@ZV;-nC%S>EurAJXyhHet@_V_Lf&Ft)PlB8hLjRPYp4X38bfW?Zz@jC zSIAmZ9cJSRv?7-E4I-gRclF!PcYueVgWh47Nf@e!F96K_3uno;+dG&*I|>@7D_9ekVhZ;E!x zrrw*VxpI2W@&IMsl&vdR?7cYG3qjL44Dy+|*{`p7)wxXC87eoKY}P|yG~oSY+n%T+ zqn|2k(HHkJwn}3%>1|;ZkDsA0I*IwH61Y+E4!pD@&|SEw#wGR5U2>`&>;J~dKOyYt zm{Td97Ms)JuRn0U#+Y6BWhK4C#``I?{Z*SjDxGc0tJ`YdI;SixfbHSefkGjRjSU_i z@1@r|(IC#9uHLs*PY;=Z4;l59&f1wqeeihU==0rVDlT{jwX%6A3!i*zsH2P zWRd7$Kz}AZre?mJK#{H%IJNaIr;`oqKt@-U)*0s~2$maPCU~W9&8|yGA2Nx#e%(`C zeHHd>yQ220%!DHd$=lg63>KK*Ue5*_5%(X@giGhc#}%$pVPjbGZZF`>}=W>$tkq}=5QH%4|$DlAsp zt~(>ssrfLg>gnr$*5_bK%wZ+${m%+?!!_KwNp&?uqBZTs<{^2)T z9ruy)gn)tDk4`vRagd)AlT^;a_QIoe(EU9J+L%FtZ&_I>~!$RPVv)% znbcwjl5Xjm%!9!kQ1ktGfy5RU>c}Ov{Cc;T2be+G8M)DQW}IGthNc{YckA;>b8pZX zpFiu?h4&jBbF8oTekGwBAB)dn>xn)p}>xD^|+c$5e6kOxoY1!#ns&@^qn z!!nD;oxX|w*u_>&=)wx3E?eKOB-Ac6j@7GKYK)?I?a8-e|6Jq6t$MMo|G@MzXkfwq;lhM>|Se#vdRjRt~XIS9RR1joI_0o{-Rw3!CBvX zKL@$#hUT@B?%DtT*>zY)Odoe`3@dXif1Z+a##84)dr^EYUGzhHIRgC^VC!m;V-5e_ zk)9LP7XXL$;LXi<$c*Oa)hwz_X(ZSRuHmwPT_u5msHXV|GX zxRTB6p0mlJx+mpknt;3ArH9Gk_HU~}zYG;6og+k0)p!IPokF$VHz>E=f{DZ?9#e|! z7~DTA{wzNvWI@no6vF9aoR5lso%xAS!rh z!f-ozx^&>{guQI~Oyt~-@ACKSmOC?!FRd&fw~NMLj?rOv#WE z0JUkP2^@Ty}fudv??NwfRJ8o=*9i829JFZv`J_!~Q}E%ye8W?X!1bo)||TSZzmq~~r6 zGp=T7GD&Bp`^xLC(SN3TI1klJj;vyfu7$v9e^FfQQ%Kxt5@@Zjvle)^Mw2 zDC=29*VEvZqcpq1m+el3raH5o810CmSt;1Mr!Aa~#;U)taM!Ividy>B7k$P&d}Yvx zve}x?)3GuD9RuYj9-cz%<)+HcrHHOmL}wQqoD;BM73$`}@f>8dxfwzfO6dgblcGv) z0ql+AaSfQXLCtJBh3v(2UWN};Sa#KQ9;8+@DiOH8QM>2yz$ ze3#ki0#ay;5#-j#LtF&b9!}3eb8aGU1NZpWd%=C=g%`V%L+7NFtEh(^%Wtfd;A_Y8 zSZ*X+V(+_f($h;15}ccGQsKwW5}Gi%yXix)-lrYkRWOqy+_BO3n3ji<@U`A#BCZy`#kDEyrbRUjIbC6)N@QVP!puU{DLK;7=@ z!=!!w$e>X$Tt54=?hq=;xoqc@vyIu_v8}LsBI`x4&I#gPwH~J()y27?4}BZWNI1hI z>cQjlw*2$%tvPD9)c?oWTSvv!H2;HnB9H``5S&2*gy0Yet|5cFI|L2x?jb|4VQ{xF zxVvix8QcbUcXtb9Cwac_yWijL{;}uusrpn^GpEnx-oD)>eK9OHB<(krmuZMcz5Gs* zUy$t!HHEHImh*a6h8@+k7H7kCvCVwmt&$R-?d#AG_x<$}t z>0@ylCsMY*kMvZCWMDla?G_ZjhU)aPjx0UyTEZKRTbr!Ij^N*ovd1(aZOhFX;ko|I zLS{|c(R%uWqc>{PKE+V?K+@fT4iZgh*2W|+A?CiGQL;PegNZ}0#C}MKSs-yUXcmS* zO*mWyXac_D?$Iov`RUoxy^@kwn^f_bwltmU8^SZeS;2o(dDE{Z_Ft91WKr04%a>3Oeb(TA~Ad7QM?#Co;f=>xC9RD|GajUd5H36 z%<%w6T~hpTd1V4y)#r#Ya6;~C^Q3SX5#Iot)m~$GAa=8?-=pNuJHB~$qh;z7FM-P1QsrT?VpFB?257^u1TgzHGa}Gn(ovck9FEShYmz{v zUiXouwYVNDmPZ#Yvl<$!@mtV|f z;adRQj6m;i$^e|TWSLUvrfYkTvSwh1+NF4K!KWw`6I+HI_9aMNsLWo>fForpO<=^; z0{y2s7Y6jp+0+H8h1(h&F$NWsN=v~Ys0Cw?*Soay0Pk1KDulsQ?$1-1+#*kSE5!0l zx6?vrW?44evb?w&&9a=n>dii?tkFxI(WEun3VD9C*#(B?iMQZ?8X53`EEj_s-m>xS zjpTCs+DAli@wO67HrkkN;E_G|Y&rb-s@VPB{~3pP|HS7FhE>DnU>r5SmH_K8gRb53 z+daX~S9O8-LHYH!yY;ty&gLcTWV3J#kV*4BLJFiBU#-6MoRxzW6j3avBSLvRL3w<^ zJuTRyndC$k`axHlbIMPvtIOw%Z;XnCNXDxW$cokg(9QdaA^;I5w*3q_i=w`=*L|H&~81>iGQ4rq?YrB?p7-P)(vpJgywIf+cR zH))B5hUYFdVl>=!`#I|Xg7&iL8Sz}S`bV(a@`(AIfIAL#apil98Q26gi@1u%N~=Mu zfAx8UAp^D&Vz#o(P^Sq(ramay2L*tn{E@W|r{U@~w|0LQB`cpFPVHRU!`YgiBD6n|xs8w$pk-mb?+=ZoNSA z*#8v7?JjK#mFnn6y{FKWoxgPqd(hRfW9kr6>$~?>*6c`T=!o2%YRBqCady&{X^24Z z9K7}}oCCMSI!DsRoI<5&j{(sZzPMM&~yv#d7!L$v9gNb0Egl3Z{ zw}M33uCv{~bKd%40|>hu3^56lo~_3C7HYo}{q)f1`w45%32Wg07ey)mZU4K&|L*x$ zzx1uqvVSQ44#*`VFmypVLQ!H*B;Ttn6-Nx?>UBimZj`Nb-=cQ{{vnSYA;m=85G6 z`-Y0Cx%3mU2)KvmR!$mqZd4wpfnY7q0sH)sh&y6QwU; znJl{#!!KY6#01mU)g6sulZ5Bm_Zmsq>L70z9~tvtgoVSlfPUA!6T*&kHugndp7TmP zUtSFpi?ur{V1f^3qoV^3Xl^dkZ><{Ug z(c*g@+AwcI5|ISR)qj`=biei+Ia4Q zD+M*3#?ymh87I;Q5PHKgc@Cpq_1l8Fm*gy-fP|JH$YO`s(Msi&Jxaa*M_u|^*wB35 zS(>wrwtl#t;OIkX&RrN}sNI=c8d@ay3hu~0#wwL)$vA+8yuFexw#Z@ zQDH-UKp;TpuH5+=YUj#=N!CA*7li@p#GcuP%^a%Q&~Cdv3rVvvJy@oHeBBn!`6 zRnrO9p1d?p{46or0sNtjnDb4ReGTmUm#v|mwt_pSjFa3iEM=|4^xO@OX6x<8RRin9 zNm}fVurD6R*}+{>B(ozUOir*bNf3_y{aBI)#i{|ZWYaI7!uA7*Q0{LApYSgoGQ5YHb-$EDj~QQCMSboYZqLZ%(5BpI4<{H; z8g45mMSUy?`fSXVY-u_Kw06nILs}k$ApEr~Lae02U!4zZiE_mt$3xv$A&9E2kl1ZfhtNiLfntcik!K7a;7FT!8}+bV5!R z*vDyDjLib1uJ#(FEi?SAmYADMC z#03xj)Wy6e7=h3pudSCC04UA=Qal`T$2}i8kNgrU`5nr*^VXF1i{!QIHqtHIi-DkR zlJ+AL%5NG^C*ecg*=putrBg9nukKM12yK)g)DhR;by~@7G5ic0R&~y>A=8#p`cmL` zUZ|ODrJ^diYgf^6G^<8N5Ca;^i0ni>58<08qfa9;9ch$#?HU){TCXhbv?gDi9H8g& z18^7z-ccbF(VReZD2R4dJ=}GL)srX~yNQ~<;uiuZVD~TMuDKl}*AX-Iz$)rcG=5DT z(NP2RyATg$G+H$j(lB<*mdDPufYANiGZ3zD={wHmDzm-%=Hg~@{3!S`L8e74_Xkfy z<5&z|OJhGq?KIA_II?2q%vGpCCVIL}50KqWB`Ns5CW`yOdWLgB?FcK~+1exMh@EpF_sq9WbBG>O6#K z#$j%GGZIgJjDk<+#(|A5QKvr_@%oL?JSARG2pBZg-+Ot2G%$kyfZzg~yv7zFI9e$z z!mr--^ZFgV7uWq>N2T#?`_`PcSv)3~k12T+Bp_i8_S{|;|~^mi7MDByu>Z+C=~OM{0HS_YG6;$XKu&wZp-mm{`Rp*982n@&C=jvAqL`%G6r!$MmBdjr9=mtFl z89KjjN}t90lF3&%V7Wk}qs8^Iwz5QqJ4F;+Z3x1#6YQ|{ zqj7NS$&$x6x(c3$=g4KTJMSQmGmUqU*$(5XP^BhDGUgXhW1iTVNRrHs~k?j*7c)wwwd&ir}l8#p~4TbZPq=vx-$vJyv@_uaPXrms!o5vF4 zU8z2r%h;2o@JDWR8Vn5S39f>G@OQ`BACQTh>ZE;=>ixzT+7q4R>h))Pr37s9T5gQK@i>V$ia z+xr;jxI^%~L-6u%`!D!cBn$lWj%RhTvtRC@CjAcOJ!F%b3F*qwPS50|`xF6Q*;(yG zBvr>0;tq6uJeo89+d%&T|B7Qvccz9+Q2r;MckYHyKI3;IkX3o2BCCndMwwx~w?-*q`=jxf5}?=zJBqe+fegqQw0Q0klUY zEx4!S!k899^_hN-!)ca0N$f`T$S&Nmyz9lfT1 zLoMIqPuMdQuBfVlQHB_KtaoW7@_d}B&X(_Y#to1KE7>X?QhEPlko{}m`D=jxH3a_s zi`i4?6a>7RZ@QgFzY~aVgv~1g z-MI9vNx}8l%==Eo_)g}=Ka5SfgV-y^6iX68=s>eHWvrkxII)jykD$Y`A~$^a}1)PK#1~sdg|kw#_!5ZbbE0CmwBRcPl4s0S|~)JD3_Yw@P!l@pZRLX5Xsv-M}q0HJl@c0HR5HnQ5Zx zp>z2_+-O_uUN@&I!+k+`q<8mY)!;w0C*8m!MC;rgnIpvp=%jpHmE196Qp z(Ym0R06wlDE|)C9RO|xa*e)Wwk*&m5w(!4jKGAhhS#MX*>urO_*AimDTF%W80GJg# zkjz9_WgE#8STB6>OtlH`dk8?jcluru3$$O*#MYK8eNlCio`<8;ZNwbZ==H1h;FJ;d z!Fsv7d^~^Q_BMwpPQ@XPzL;WeQhrzCYbeMkx{L0B(==MEHNW-UZVajR#R6&Ex0Gjf z%bK!tm#>>qjN)J%<&eqc(!016^WSnoCNd`nN1TyvXCPt^BNVJ z=j~U@YKq0J<7`B0oW|PNBC>nyk`0Zewjh`C8&9NwA|eozo2$p+3%QTZbiP?~NV%rS z%s@IDA|_L1YU=nR#!Gsk)3s;MkJ2fB5b4Ckgem!o7MXH11E?M1*YF!<^1j#>Iij{b z6p3}?GS;$C6BA#?weL+bHR*{mKqw5B&10e_SS6*YUyry0$VYBFE zy{M27N)8OZqeKT_JGhq`zgU4l0_zI{>zi310F!T2N%|}$w(}gKxy+3O#F!3#KQYW7 zqJoWj{X8-x^v{u;^S3;SM^rJyqhFm)kgpuLP`rX-THv&nqw}HML4nlhN*6%RJ=YdM ziA}~mSoSf+clo?0FC2*XxHYjG3zuS4+@&Hs#XPGqcJDE8qN_`@TTWpC>M{SG3@N9b zK}kTy-LhT3SUdF9yuP_N9d*xH+Z>0v53zV(^^-xeUX=x?y;ND%S^p*DqGodtj_P&@DNxFdM@F-+l zy(o_^xm$??kY!FTF)9$2=|L)X_C9pe0dElNTtA~i|IX;wmE*4~M3p($mzdz4C|P;B zb^?m|gGJSUxFep}lB3NFVAp#P*{{7h0P_Q#R%?eUKSJU~Cpt*8e9DKutbgVkr!Ghx znWg(A0V)pkrq3Ju!RLYXL!%~SoNAfV+rV;`W0ybSR3&_R|AJ0y4EF11#K6``Fi>DM za@sI$1mOm8&xC04geMm7tZs*=W6UJ8*jN^O$I8$rV#`Mt&yqXQKO5@;v%lME-=9jA zguLx6RCA&ayi+uh&Wc9m5pbi)c~-M72cRVUzS zsN@J%GHg_58Mb*Rw!pjP@3wR(+J^u`jTI+gQa<8}6S|m%DCY$*Nd-O5xiR2SSNgp# z8?8mt@<>xWM=at#=V>NnRK>Ea*xf=U4kWaaGEBMJgMLJ? zmVZQi{DD8iN%;Da9x7F(z@c~FX;j4J^&^;DPQkEg1u#xU1NAiv==lvKkl!FBv)#0T z_jQNq&y=?n{sjHz?r$=aWQ;h@;P_O_4UMSKXEci8X#ipbGzhtk2c0HrHahK>qSqVv zct}{VZM5-;S)`*^jK;1F8KeRssCQ*p{{RX^o7B@u=@&sD>h@}($H`1AOh*N@&oC*p z7ZR)Bb9+*?NuU^Y#oDB3lN4U(NXtyq6kgOu-Hdwni?mVC2^@nlIC3qT$kE&W!zD*| zcsK9j9=*{F&1id&9nufh>|8k*h>E60%N37GaiSZBu$ygS=3kIsc!kM69%k*6P zll1}maltE;SOp8-b^LH@7?5NB%&Q4LDWRyJ*d-btIHuOdPO==^~tvwnnkgvxDD0vMTKD=9UGJF!opBV zFEZ4+(E`q>?BzAZcQnIYwoLNq%_>2TYRhSS&Weub@??DtV7FaG>G5@T{M-FI>U zk2>$#!m|CQB*`ejo=d~pt2r+LS-b1E)t{Fre95kbZ&Jz7+A zKM3rYOlfHAIZixI7<9fkeuJR@=mw)}%$z#kL_m25)ylM;OUY*I-wtNk&a&2D#OK+z zY~1MFQU`y;`vuq1A-!5WjaBzK8L2#lWWQa%nLO<%9NI;sLT4I2#CNx33!Fbh?#k|` zNjM$FQC;I7wET%Fe>nu}k*78Y)pzp?&-v^;I)F$>ZS4dNBoR7=yWd`L{t|E@*5YCn zpKmwo4krpN-+9E$9MfLnEi)K*%#-t-kH>S}E{E5-;r!3kqU6rma%-G%wj%i|I+ip# zR{t6M01lHCx&oJeDz)b17sp@9%C-4PMES9#`LP*z`h6Rv|GBc5zG$N%-T~~zq>g7 zOPt@4h;8ZMW3$&XaC{AF-0G;2OY6+10f9oSA+BR8YT5IJlRa^4jYw|#!di?=&mQJq7Ih&5%Mg+uO%+3(ybhm zypYgCly*e6nu=WDrnz0ML4RPRUO3y9@tLjj_)C2XviIsc3(nuf2alD_TQQPXa@d@D z;3r4x(O=wABY`8X$I3H^$vr@q;J1Zsxb^K{4Br;R2t>i+z2Eb^uq{U%$cn&W^6XcZ8ki> zz>B{WQ(1AWSus^v$yBnZ_dZ@lg=(W~x=k5$Iq+FhUJ}ZE@6T;V^~o%-pHZzhXVB&P zA2lSm9q34L^^*;s%YaOL&`zQM3Hkt37}Ewqo3-5&aT1ikrR*bJtITUO$HueWyOH7z zHWo>fDFSkHU1}?oaRS^()(D^u+|q(WXzfcZws`QXm4IpyaU0>x1@>y_strPhclcy+ zH7CtkJ3xMJXxNJ)PBrao*^SZAmgJab8tB(t*ROT#3AE3_kS5hFU8Z3-`p>bWoGwZ^ z%^Z6J6!n~m!hOcHT{(@vte_B{2kzctU+%M`XYgQJQzkC)hT2}OUe*D_KE@>zWdv9L5Ke~l=xqaec3+VW^h#|h>-e#oR8Wh-kGON z(^0;{{ZjjkdF)%fjYxlWhN;d7JG1!=LA5LfN!G92tY4@{C>s?5MvRJ4KF?0U{FZ|K zE#+qFA+FV7i(CAXRicS(9!hI!pMreYn66K<`Q68KR(FD&EA#Y4ITHnxniR$lab2z> zz3-#{p&qegm$c)Pw0n5bbT^ebg&tTUv$j9M-7zuMq-hse^qAyQ&SkL(Ovv{5{T?{K z0rlVNPFP-sPfmNI(_(HWr?i?Ctj?*~A?Qb?XPJ%4Pw=2i4WOA9s*${j5sbPF4Nn0> znhZ}v^#qtY6s&a%OCq}#G@CAOtngp*h=%HEzoiln)oUK-+2qTwORYew~L25 z1>geBkn)A{KU3Vy4QY2fzf~8$u&f9$yH~;FT@5w0EK%xwlcwDq$ZF`bNRW-Uu8-b$;>Wr+e3HCelQ*q7kcxE!Z`4o?ClV1E#`(bMJpVWk+*>bo{t zN9^LVOYOFf%5tFahXY7RBZA~Z>G+(M4d!F{tu*EQdAC>1pIq-VPJ^-aGIVh6r2la< z$ModkA&m(_2s*$2LFi;crcFonj*_ohsq+QA-u-J_}um@D7o^$r7`Fj?486G3y+5_f2v&HM&Q$a(gLif#GPpVkc=6p>1M+`^qVMqOA z6=)Pa@_=+J!6soN+D<#u<6{MA7?!-&0)zV z+42rp^BSs+sazH!ULu-B02;TdRAL<6(v0yA=j`3m#Ptd1L`f(X2iyCD$VT;10=mL# zUrp!~F9U9l8m)AZRIjjQdl~}NR3|>A9_B^}_})~(ZqUYO(DwhJ|66SR=gwivmhtlw z8$QF*IMxwqoSL2c2KClAnP(|)foardMbu}Ee<=$5+ql#DL~}Gqi%WoIGWxqXr=14^ z4(Nc+xapq9IrH?ISbva_z(38n?OC~tP4p3?hf!w>hqDl2P{^;RV4N%A4`OT1DWZI z!Y~Hav-VOTml)F3Cd6V2Vq6R6m|%+;&j(4;*@Kz;OfqzYZ!%{k=tb*JkqD*Duf%09Dk zq*wG^op}PO#TJzDKQ=onq9T#Gy^s$-2xE+N=iiV>nX~F^e$)+>Erz)})FYFLkgg{g z>%{%-RRODAV(g(`ge`3n9x^HY}Vdo>##mkGV-etMt@PA9d27Dq&xqyLArTQbsV{BMMJDzM6_8BdY28$M6&47 zSPtohCh3ywe%E*_6yJ_z1KUTf{*4Ds&$dF>?ZUua#lgtg?FagA!0J2+sE0G<*g@C6 zW3umJW|%DTNuarB_K^(?t+e9wUDzIDr06Ep_R@$$^FS<2#H-brWiTQB&-9(kg^5nWlH+o z{ZcOrhjt_jFzNf8xcxeUNeW*J*kx;F!})w1{#2-pE_pamrvvh+3!Nh-s<$G9;#vII8QKw0bN(NwOFEii5yJAW0jP(WRsBZ;WH=o1! z1S7oD37t%vG$tiVWAnD6hMkN}BizY(FaU$IGIXl;4hUi%$3J5qwP*S_0F`?&R*^eD6z$R&51kk)-FJl98&m%E3-^-o_n`prmhcwHRNpUDtiAym_w{6Y9#O6zO6&pT6QBo1qtq8n5+bG@$*Ot?QX z525Y4=I@L8TQX$3gIt%Q^(CuIDqq@j_wO}JIYM+ z@jidoE)&DAiK&Z^w_^MQPEr(WJxWZG5 z0Ug`#z{!e8GB7MB1c5X$w#cmDn9)o&XOiQJe@7yN3(e_8AVrNWDl5*pFZ}RcJN>56 zmWAA&B=e1N3vJ;iceGy7Y73+9BOqj20_F1ej)rm+gZ3KTl#|g{s`GyX&~J4ldq=}^ zD<36T9#MAmbR9~_A)f8kT#$0vY9sVL=Fc~2wgvD^hGe+5Xj0Bz4|?=&Hk&xVCZ;(pLj6yP$d|(0Xw$!A-z&;B7!| zJy5mE`R0LN?Q;<7h75S>d!KyMdd6^RylIsoxjYq-rr=!37A@kcuf@YtDSCHu`?^Zfjs*|6B zh$RiOWSwM}BFy8}2lG@*irQqSflFhCt)$qEw&%ON->_@D&Hw<|FsB61L-Z}7z#+YT z!S@6vZ@9Z)AvO&*K!(P14FF`EO4`(Tu+mnMbYO*({C!CS@Pq&X^EFs&rzVw6*M$|H*tKneIftM%#Y66emFerOF=j>IUHhuF5z$^5e(V_*?2Siu z<2u-?KRDKZPII_;_eMZjuvtAbSU2W`P}OR?2q?4(RmmWpFY9RTK?j!jFh4=aD(6(a zttT)&9qk}`&|kqO+?`7wf;vKG;dta4jeMTosGRTzs7(x~-r4s(|J2&EW$;2%BF53k zAv(68eZX`(xI-^qrsEwCM+{fy=OCP zi6t;@4&=cnv2>XO$x4~2x2OODI0IB|N$)2Tq@VtpAXErl9{L*UZT@b<4UORxHa5H# z_DO1yV>3V~woIyd$dP_3`z*HIB_1-ysjH$#%EI4!(@R2LT70ibrAaG=F8&j-0+gRTzl( zru$0gTbRuc>kP3ng?>KDTA$Zc(xY=u2Qea@+xw)UDpWgY>Jy^b=_)AH$XzphP$s=-7CI)e({Sd{(`B0&pRJjCjrzJT8rQKAQZcX zNNRF8C#Kk~A<<>L4g;jeSG-w6TmKHr&k*UamvFQ&UNa*8&Mxg@eCT%r)rnuKH@$@d zP+rp}ao;s?L+zkM=r061D#p!XvY;-+vv^alS@ty*&b;T^jR@9h)=WvOEiJC^f?UM^ z-?QxVHq7G}6xtkKinGc6`L#?x?2Yj!;&*UuwS-nSsS26LXy+gBl%Sfl7wR*pv_xOk z!d5U1ag-M!VJ}aV*Aw>)uX?D1!!6FBt?o>H!=L4>gITF{bE5I z!J(BhJDl{-aOgs3Jbo;%=Atu9RUP7z^3fS#Uh-=DdK&HA`Z7x94;O9wmq)r1#BVnt z!J^f91;ca%qhogOmXCy}OZvN{0IHkA+2)Puk&_$9b|DEb2?bTiZOi8(p{X47Pt3bl z?@H*z&O3#=+vElB)s0{Jh$kh31>51=t|>bs5pZtxnv_F)KyaeBv08Wtp)l8BpF)!Z z+veQ@MN8`a${iN&a&8FK>m|Fyi`yS_Z(zgH+D#Q(S;rh-TguM(db;?qYM-IJaSBiH zQV)7Veq5DASnS_yKm5EXRnVfy{q^$#4$y7R^xSz1)z3*cPune?9P!&@7oDBhS~*}- zoXz!B4b+6Wj?wU~5&PIPAytU4o$ZUIRU(l8;4r3-qP7?xapLs&U_iiH0gf$5VZU34 ztQrmFwWg=qjHu_4dFsspOt9R)p*!(i+<4NIrLKb4Q_x1DdW#ql$7V@>g->3@JUfe5YBjNE;oc3L~(52(u zku9QA2Xj<~l-P^SE+zLRhqdIl4a%a>vOWX6i(ExL)D@%3XF&%Pzfes8rM!Dm*bke3 zUmxe5?;5yIhrS2>S<(q&&Q#@^B#4}44;_zJ%C9BWJ#QArQPja6di_t0sc}9tI`>+s z1K_yzvR%GT(;Gr%KWH6075G{-cH4sd z`|Kc`?>>706YZ@X>Jd2Z|L5Qfo+bAhf+(v$W{bzj3;RNnz|{IeJa*|DyrrTh1z*hl z8Ek=+gfj+e_>s3>3hk2-A||C(5Qd5mxmrG)5hVHQ^?$&4^HK#s(l|f6TyN$EhOA8Lv9=Zde#C= z#)@ds(d5n3f+od+^@@_kVGeY(HG*B5?1~pBtFS|Oqazz3S+6Q!BfA|1P2VK#!l4V0 zURIXP%sNf^T}1`UsxWzC$tX{I!>doJb2;Rz+lWO9yFOMM*F$(TkY(s+io$(PbIGZBG2N8z+C+vSW-M zF$^E0Xd;q!+J3F}xCnex(e$EtL;!V<4|=yn7VVC7h4-W-n3B&_3t9{O{Mak<^wt1**&t!n4!w-&NWMt;QHRNxtxm-e5l*i za!ba(z`LO71ydP`??ZU|>DW^uF8v!c=fy)m^h(^k%6Zpnag?mNtE4P--ef%U#oYh!iX0fXV zr`b>6dEiZ4(0qMT_zK62YqH4kh#DkK|-YmYm@%PhuL_bZvQh zi;N3zxLVGb3VzGy(W<97)jReP;|Jkb^~Bz~e=t64<>Y7D;kw|dl$chwPkL5L`Bu!B zE+t~H(i*z)8iK&a$xOv5ZK7RmjF+vtvvdsrsYCMK@-R4TSxAog$R~Nk>{-GHNaX-l za6Y2yXyF2Zi*85+DOtbp;g}FgmZp%aiO5AtsO)4F zT#l;Vniu|6TT;li2$5jETA8kSUzyEQxz1t~cLk;gEYIxh)C?h}~LCiP}^PhTL)ty7`Ruk6eFHzOq1u8<55e&kPx0@5b zW?||+Cii2)5)o$*&cusaQ!6{MvUpAQ(wmL2+s4=4y@gxsHW195rHuBPopfI- zRBH%vM6>)Rvk92CK!nG}M5W(AtYz7gL1{AbirxA-F-HI<$)`XpN^oGL2&m^+Y<&gN z115|LVxN0lRk8H16p^ehRdq?3hXcY^sMoB*+i~Y5OH({k;aLRd8nN1xSoe zyzz$6>)HsN0C0sA_^|XEcNSOXo<7s}8UASKaJ^TB}oqzfJp@S{UbgUW<`Z zL(0G0)LR&B+3R>rr?dOoF-nkRehE6li&*0C`tAA~bH1hlkEN7yYOu?`jGTxHao=Aj@LKwUxfq=Uf9KexI{%?vu^v;2?O+ z=!b00u`7;@T#1Z?|E2#MP__+pEy>5pEJO_W;)MqPe#wd|8LTn=*kk{($KWshe}hQ7 z%~cpLYB6q-M=K_}Gyt#I{FAj1Xt!x3-;EU?Y&UhUi>@t~qCdhtvU2y#2SoDtP~d3A zzCqKh=4G1Ap9vF@Z##hXt-6lTiLo`rbr6tEFB9fo1Rlb$EglwMSeAseMkE2p?y(2ItFY zr>L+*37)F({Vr115Z~fdb8z3z;9F84z=fLRg=3~6LmqdV{VP%@`Hk#XD-eD$%y58j zRqCREGt8mdXd}RWRVMG5757x47C)^;IH8kM3F3tL(Erjr+3>9Ih4yC7!nc}konlZd zuADx)StuRJ50tOQD%l~5fi|hzG1G%7Z%T^rY4>AFUMUK}`kk-5;vd4w@cWlJxLYig z+*&wP?57ZIQ~96fR$4gUi5+`KjWXrc)$3Rnb7RF445aGhOtf}+5#&^YVGY72F8@04ksMi$(E&V7IHHq-hZBD<{?O9 zrbuJd^ue~tpat4tP)ResBE_$k0g8!E-E_syD}~(<^hSpfTLB1@v(q2z?IVqP2ifCI zI@@p*qHcESIX(+ME1b^7?}B3-C;`#24wQ#l2UHdOSzLFNxgDtn@ltDMQH6DXim^*I zaQpwUs>t$nwU|mTI)JUmzs=H64le_QXR`{~*=wP1IjM%f&2>aA*?AfC55zv zV<~;zu$tK(s5hGeef@jZ&59GgH{gADwUZUO3-CR!`7hEp+^1cOjbjR(E){ui`j2yZ zp%X2*Vk%!#OwG3zyq#bNblLMB73nM1gOUzcCQcwO zjp2&WeWZ9FwZ&7FkMb8;Q9fQ2tOpr73U^oc7cyY6oz>%ZauSzfaMp?4ngM%LwW7E) zHQ6k)N4~@Oj&hE?n|*HZb$qsT+99d}T`5mSjZd!-Wr&kcD0FUAEf}*Qb@{_`{&Wx_ zmRaZtLERGLJ4m_hpjLcamVD1378{mW_LjskQt5bozGL}`NWIgMTxc7~APg)WcMM_3iMNd;1uz81{q zY9^l=NsbvO9In?iKSzGT>7c6ba-cpmvT2;+zhfrxT!KNXV=@(yXQRhPgL!gF5i1R7 zjYk5hLEX`+!**&#Z?c=%`oIEhafPj><@3m_)6^gqsP01*_(NlNv>f0`E8r4$MRQK` zSvq-_E5$CYtFVIr$-wawCDkJXVI`XM^d-fjH~fJ9pHsQD1q=lLN`hvHf5RoCj;XY zs37dH`^W&*gK`}e?S-KK1pXF$f-+f|qo0Kc?mTke(-fOW1!H9e9xcl9i@1*dlc9J7 zzVFO@lA$47?pVaY{>y;;(UdNM=#?x9wI#Og?YE0XdgBo6^p|8)blA4hY`kueH5HMP zt*OTZ>2(aIn9AfYo)l1Hhx_ppGOO)r7CwZyTQSiD*WXH8&oLQg5>CCvpOyB~FN>q+ zNCyDdggcZoHz6qw8b1;!f=5v2eTfn$Puk7jV!9i?@8NZJU@IlU{8q)H9~*TqsueeB z<^McWkn%a9Fse*)>|pfF*h=>W>AN6`Ax1% zv}1wstKpn-4HnNNZ1PyxAX7|x=7${vG7GlgEu;vJv2y3?b?%fWS8w8M6+0)>Z34FZ zt7iPv$9-p9XeYXS)oY7|={Q!&{D5fSEUsr1+D>#pX2bxn16LH!HIpMe>$o|XO(5Zm zvd^C9Mn+MskLov;jiFDk9$?VeJV^@g#StsCgcTT{SmsM-dIg+-4T`?*l0F9}A-f%y zZ&t@6Oxld}oc|Dm3B12rsLy=ECd*K&XyhmiRuTFslhwPmEETp-i*6PoE_u@ID>&LI zuOOZNy`^KRgT8GMrnHydw%9rXac6YyE2-O=gumQI9>0X?R_ADhNLrW?w39dQnc%q8&&RVd*;HKs z1ZM@}*!Pv80@gV{&iC|ChbcLDL%bfr&Q*L{WPlcR1_xdNNQEhhl+!&uZ4RNCS9!lY zgAj_hz1o&zHRHJ`L7l~QZOHCmG^Ap}KCG<5$wu=jch!DS%=f9yAMI8m=f{ptM|Et> z#ufoF5cZpAu}Ti=B=~u$z6qyq{N$jV1_uuhsNxPH%2NZIWS-GVjv;B8HF!)Wp;&?} z@%--=)qZml!%?p730yso;@)5G_IcaakJo$qp=Y|bzi3z2Dj7u(>fD>KC@Kcma z8eii7qU%kd+3MOh;F=W)Y8FvLOUyA7(VEjLDrzpRm}fB-t*54-NKmxqBBg3-s1k}I zq$nC=)g07VQF{>CK8!KHx1fQ1?rSK*bsc`1LFwIkFpLu?keG%9M|IYjEp;Az@&Ix;6cZ;=aD`ZvQl@P>wOXnB*kc z_gz8ly>6OW1WSOuBza#!<-PVGU;MzXgLh*nQL;T)l!;zU;2W69pJTj-?iD^ZSg&gj z;$lo(seNnlCSB#C?j51&=UsdKquqSKBKmzDHo=ENf_tK!5+A!JBfrS2E$H3}%_Akj zy&Vz`cB$LFCC22JURgBrd$$Pr1ta-o@-skaiq$ zc@m$hFAYE~YJ)LJayfU}z+?uAju!SHr?$bM3m-He1s2T?^9921_s7hl;F7ptAoW{@ zrE$~8)kTK|yI`%5CI;buW-v^N%i50SZ-H_l_1nL@PApOVZA%0dPSO~=18H;v-O#H8 z%TvW3+Jlnu%;&WS-C6|r7h(QMUl-vs+LoI_!Cm#(ewT5zt$RNqS2WGD`}g86rbHOA9J%*k9|Gk*O(({? z>=MM*g)`Qxx{v9e9L7rXS5{oQ)hSBUB`~}QS2WY1ROl`@BdXDX0n`o02nqqXd>Glf=b7?(R_x{uQC~ zr&wxZ!m@Y;2-Fb#QNR92_c7f1tX2n$6VJ?9?PpT67dIHy&J>vHr!7oder31MVw!sh zz1Cn$x$kq1l5`}a;lQ_D^Xy7;O`zhE$Q+X)DJt&zoIJThGb`}i=xZTIW#JgUE z!9<*GhJs-}bO|TVjP=ev%|PoN+axKwe5i{EUY3Ws?KIPP!>}6IF09+%P(vx1$;*^c z`wiJsZ}5_28PxLpNc&)orQilRSYsx^2EviE-b)y8QP<#Q122GCqB*y|@Eb`tXf2;j zKfIF?y5%D0-;W=kraJ4L<7bBD9lDDaMp}{+iLvwb^X7il5$=vwN!wcwR2D_@JO;7=ydHA0>5mzXag4$M^HqUjmQ{SR&; z^}|A9rdQ*xj4}^0COtb#@_DgE_yBqAMtLOS$T5wREfp(cjdDJ9|7g6bhunfYmD0Pd3u z>qs?aEIuzOL3V_d@s*ruJ8;F@s)y(Ny?00_Bl2^vX?N3G<&Xo>$Xf+AM5B2W?7REb zwRCA{B1|h)mxE<6RW?*ZcFw2hGAx29nI;R?f#sFt8%7KZy|_Pnij z*UlkJ$@KEQ_59n{={Xhjd2!1^Om^sB6iM(qjhFA18S^5`8aM&&84qrPOFdnJ^=$*eCYdmj2Yn9#UuN#8e78=*NMmK4MP{Oz)AWMh_uiIpyvxP{A2i0+ zWj87;y&7!R3${KgGe0%h9IL}G>SRyYPy8o=#$e>p;(DyEU2|>X99OHeG@DG_1a&N) zHlAQLB_v8!s{wC?QWM5b7wOHHl{3-nb-{*cX2IAFplQ9Wa~_vt@3c7 z==Ind+!3ngOXzqGui(%^kn9}Wt)yI(|0T%#U&qG6jSo%|-XQg@^D!u@F$B{2$ZQXZ zTq87a%TD+>J4Nz%-RAlbtm@xLB??9K61ZPJ9&IR8X!%@!L+LD9{W|<9*A`PPID$KZ6Ah6TLWdnWw$*VrSKIfd~BZVI%(mUznYaopoZ zT%fBs06Ay9Ic#@j{02iyM{I*Zg`?dbu`8*O2d-f>?7!=XKO>9bk z$S>0^k_4K=G`Zk}OS7CU*c{<%EH}@qpWErg1b1BaojVuuq89mHI78)YV3j!Up9Yeg zc5Ra@9iffJB81`(AV4Mgb~;RCPTWI1z!1Lx8o{5C#JY?W`FDs-@C;-n93Vd2&v?Av89M zRhB8a)C$ci!vyAY?`Rb-lrBvg0f+;Zi7i$~@l%U4uLkOs2jXmZW;mHio?U(U-J=p5 zI;q2_Xby-f+)SnQfyo3ib)Z6k1cEU{zf92ZXW7`HP1U&$g8VlUk8u!9`ezK#6SdzuG>4-{K8GTyU_O&Tznt3zjg&3$1SdM z@j-DV!FVj5V~UipfIR$?%mCrpBTP}qIn!(KHuVHE0*js{9I7qKM4cqz+=Nj zTI}U=-7+-sjen;@$j#)cS8fkWuHHqQj)#H!hW&r=$5vS&qy@+d7N}xisG+rBrM~g& zBdo^D&|yP4UuOh{aykkC7~d6sGXFwOs_7N9V*Z8M4sxa;b!!CKAK_gRe(TgqA4W5H z!KULQK`f)->Y8?2sRc>ttxM!6+Gu&fidfxxcBQ?e%(B{<4rA4oR3rdksoXiAdmq1a zvW_;4Tyd06eSJ5^T~n&gmyfrj| zAw<&qz-@VnVa5O2j7qZ4Rcq;5J#(x%2u9DyGIMU@lCxN?y{`EnFts^4SK?(VIl3GXE6;eCIrJ!D`7oJ z{}PpdiK4#*>Mue5OPtMF5Xp0&hUCt<<(Td&k0|^9Y0S=l5v;g>o8#JmE?FiCYej4B zB?F4aMCO~GLiY%*>1^29K@329m)5FfIwR>n7+gE!fb*Pprmsq%BrEw*wS@;p7g zOKG9~1Z}l_$)3ZWa3K@@HkOdn_;X-Vb%>=-BTZ~+=u z3ZC5v=i6Uo5~fXth9i@V&qsG;T^uioZ7|IVPL;$@vo6B?q@t~^Q9P@HSnkFB_J+^P_^H}wFNZ|~C0odQlj+@ zHKb?i75)5~TlDJgqv+4w&{ifuwvO|&*w>}p6))?WV^0ZexQ`G=YO44l#c}A?$p><; zY^F004ER5%o>yJtS8)scOlA`-tetc3Bg=@sbs>lGCXeqsvw03->#wsgzluR%*_9%% z2tLy$35a^!3e6*@j1j?+)GOn*Zh7u{*KN)&W_a84?%@;-YPzP8E*~M#2!25wwsbHP z8AtEt71!{*Yue!te0&>o#~5U5Zy-uvY`?fSRMO=dOf@gM72dEN@37cr`Hv=oNp7x5 zg>hoL_`?(~#1GN>;`!VRGH^$}B_ij#&YQY_VXwciVc-i#D%AgVX*jNBE@{pb?&~@= z@^JLaZJ`*S!>fT94MXPVilx?o2|{N_DHLME5NJ;frRu){junS@&UCPQyMTXoxZLs( zFEqg~p!gwyJrv{Pc;UwB{&J^I9&bs07?;hmi&~A?mxu?qbp|_%KP=!vf)K4O&*x^5 zyF2p#fpu3G+UOxDM;h^D?#h0pA%07Nq3<6Uy=cU#beBVlbNg^3+&N{j zDrp^vT9aDKFD&v3bp0PE&nqybr1c(+S2JDyMl3lZ zK(?m`&9~ShXYmx;8>A)Qn_&G|q;pjA4rwq_q`U6Not{$Mh(0*xT9@Bq?XTIYUn_aQ zWc|1X=P*fLue2~sVK`>iSkr(H`Ej7@9us>DzTY6v_yt-gRe`o@t*<16THiZZ^RRAL z;!I8L!KU_@FFd4^J1kYMey>Ge(VeHxTl*?biqF>mIyJ`OO`w7JNiP+51b}54ys@M7 z;oH$Ub_nadzTTcD=-NMAeI`p|ux0aNc#2Z+g!gpybyR6nXLlXcr9d|o5S(Yhof;QD zEqG(Xlgh^Q){(CsnM3W{uN;BYUuSjR6l@#Q4y$n6FkPqQ;>zTT4eemb^x?u zZFm=z+cqf_+73PLMJa-%qJMwXXxi75APVgE27vWm5<{hPaBqv_BhY)6E-kw$?|P0! zVy4JjBa^8*FL*ZKB_}Lb!4Hehnq^PqnX;ZYG^Ko37x)EU|!c)5&l)WTc)?t=|Uo* z?cQ2q%vCgXL$T7Ejbhi>=+}a!3o^`AGT?kRUU8fc~c(?}r;^B5v zrIi|zyq;o_dHmv>B<6CBn?+)lQY2Igx&F`><&Czcb84Iep=BNgZ z2=vMTTbnI{NvB`O6%=}dqHp;qqJ16zQ`izgm^Szz89dV8DRlea|$d%~HMw>idc!>XO83H!@Eh0Lcv zm*65+>FP%k+-@^(>VhY?jC7q2P8(`!gz&G*_Zvi7tr^NglDu3v-YyB2#3{oQ+#;FD z`y4o`kRVAFn&gG%c-tjd(oG}k{|RprPYu{k5CZWpBm$l8*)($G;3NrtEKcxTAgp0L z+soY|DGDxb)(p)Y%rwwfx`A{xIO z5p%y8Hn9OgrVvB~Q`NM1ecW-qJq8CmrlXn(_#kGJMGjo2kYJ3e)`_Rf=i#o6!tPN` z1{#4_GUmCDeA*>hXa4x3x$`>PZIRaw;-a|c5SZJdhCS-9&SU)ggOVx zl)S$mf3rIKOaUffxTo0@b^SRFo}QBT{twLb7uNp^|F5Gzm}gJ3wf{Edi67v>WJ?b+ zCwC^q8$KeL`?6QE}1I;8n`zUOMMUib+kENli z426?D%215dqRmfMk39!;X)|Iq7pHxdTq?G{8-){YelP0kKkZJ+Qteh&`EbI2{A>Xn zOzFeaSj`}BraGqP%qSl-vx_?f%b1+pXtVoez!@U+hnO%=h#oWT zbjx4!s=`CA%&2(JZ1Re}P%{857bs(1KDMue~yhBh1yo znD?zsW;3|Yq$v(kQZtjYO~RiUyLUE>k`v3jS0$DzeV+9I=PJqg+F<|j<1{-FGKn+r zh7gZDC2rZ?d)QKWjgNXIrn=va$2W4QqV|T?>^V{PbSylByzCKdQ z9oTC#j}Lc;4Wo?4m-8bneG*56MNSgiVW%)TW#iA}>8!IbQ>CJRf{|=flAjclG`o3g zei+q;1Rxd)UMWO`e~-R&49sDF`((}Ut_PKky`jESoO7Tj zP8e9M+dD1X02T4%`S?iYU2+6Y(9iC+n zZ~fTyE_SH~(;(awbS0UTe)j$XeQ|#emva*ga{N_)Q^BQ(mxQ(Pc&697Pj;@#usj@l zUEebZ1*Cl9HhH*yLHrw6>i77-w=wk`mdL>5u?-*dJt1gDa^P~DSL$+pd~4NZ6?E7n z1xYB!GdL=}T^W8V0uHy{0m0rgu+`5i%mr+d(H_8mOO<|d3 zZ)D#k&jLETR9Ss7zY4ba+j288-fR`k?JdIe+W36_Mro?No>Yi^76$cu>BaiK6fv5_ z)bZK9wLagcI(G;=H*KA(50d5Bg6+2=oDWT2oF0(NU+^FiB>PD`0U?n zxSiI6DkI0et-tTIRz(%FYaK!sZAT};WT*Wy--xVrSB1RS7ZA9i6*sx9KuPjO@CvBT zH7`Td^XqMb?OhtFwz&zZE?>~YahKL0%>m1&Xf3o(i>=@C%z%h<6ZF!#P@>zj+^IS4 zfh}<^wii9!{N?RQ{9yXf(LZkLvN$wKCVB0nl5l~l%!ZLQci(({WRe}&p>$B*TdPKK z2pPlG$Ha1`44-i0+&OMo`#qKt&(tSEmlJ_kUE6=Hi2$0`l(qLOvu$N05SKB$1n~@W zc=fC6rNp;-m@rDEn3$eDx~qw~cE$fCCun~Iq@m%|EC3ABXuLDeq8J-#IvXDN;`4O&l&9x7&SSx*w;4MTb z1A%WY8ss{f2eY%(Km7$(Uqw!$=|T^qy&^4ZbTpqG#!fV~+7l9SQ16idEr%ym z8Or)OijFghFKS7f@dTcX@XGTOnLE-)qyg)Z#0&!j`+I3H8N;I(d1T}G;ubCt9?~_t zn|!~em;~WBDu+XE944G?Qf+G>BmH6K0vqijxouZC;TM-+o4|+f!zT!|gqN}CJ}zRK z5cNUxMrk428$*nt{P*i;1?d???FAjeJdwJwVR0jGMz;>D)8G?fS;+;8pDo9YJH6Zb z1zfGt{L+}Ogst^b~x04z(pwtqU4X;@S{Ytukl#p4@7;D0Q;t#(;X|FCe0am=5? zoy`PV(>4uWK><`2$J!=*m%gch_N7e;78&OavG666G**$vVOa?|c!N-Lpw(aqMlmFF zj7bPaUlCJh$kpdT2efJ%)346SO@i$DeV7y~v1GEDJ72B!^@r(WZ{}nl_U!R&60vuZ zXu|46$-VrE%@6+UTDA?!X%+Mu*j^Hb9E3TCDHSQUed-xCpI3$30^S;J54lplS*c&c z1?JRo-1I5UV-sv&wNzC%P-WVv9rchjYCjEmr-{{)YotUoytVgvCof-{G?f36iS4&td-Ok%u&k-`oq0eCY}? zDg>@AXnLy_6yi5gk;l2)iwtx{ zcQionQ*E~E=vQPVUM%RnSg_AwQ*vCJatE@6r+f(Bw&1Ab8pi)r;HZ-l2vZ3Wo zp9nxTjUwUuJAjiO?h}Iz;?h9qm%W**q1h0p-(|TcNl4ajz z7=QaLvM|j`EC{Z>ed{s?>uxb0mJ%=L_8q{{=bb| z%y0SmL9@-lu^LwwE1UK6YVij0dMVasG9i|%$>Dj&=kvY7@mx{n$PhhXUpZ3j6L zZ)yXZhPF(&M^GMlNd@le^Nw+ z4y9S$96MrDM`(5;!^W=&%fA?mLWX%&F1(VTv%C(v#hcDUF~>fSX38@8#Y3CJE_2xi z@qw|fI-IiVCCgotl_2y{LTDKTS`V1g z4PmrMs~b~&2%7h8!+@9Ni+W~L5~Iauoa;(;xVq(*260M9R*kwEyax?5M7Lht=<2Wv zz~k5i_-WnyJ%^yqFJ+lKO*U^T@npVFqm_4>vJ8L6iRT@5fjGB(dpW|8-}_0leJk&- zbrJhHydD;9f;~keXEIegNDv+S)^GBZZVU!R5TAL4R5F8m59>x-npJt`Sq?+X3W5#P zR}y_qS_SAeyh|?G?1Mbj!--mYTCz@&66>;sqJmB_;J{ut#R9&35Qp% zUH9SyB!?@)Q=Xp&vivv~9?6qYF}>%(nhhT9*BM4uu!+ailGu|H#$LnBRIhBhfo<1N zy$toD!GbL+jvUxPmvHMUgMPkE!WjBXS*$pCW+w?x+Sk4*NEvc~9j%&xO4 z{A1EG25ZY?61|0puEmZ|wL-C-X&Jq4%A7O2-tSdINTJqQOrkD`iA3^g+=cV9&oi&w zOIG1@T+7KCqF8$sWesUb=A%qh3>iv-O;lFW-IK^L60Nq?rrBhn0S?vsLZ0VTM=p8N z4izhEDsBfHCB-N76p%iG=rS7Hpx;fp!aXdHv3g$4p*b;rAc?Uy`q|r)*|nU|>v20lfm>x83Qs=LJ&Af0W30(v0xHyZeNsOC6cQnuR-Eek zr13xI;9pe!FZ#|&+v%qw-?P?`JPju2(4z!ufgA!Puxp=(qicoZ9jV9J#7b1( z$gky#B*CQ5%6q($t(YwXvc1y-cnn-dhFIkk<(!u`9=PoAAM-DoI>$#aq6SJMf+sf( zub+3Wkfp_jmwMtc(nDhN!s>za>4WrFh2G`szj}eh%y5H;T*sZd%`FWNq^h_b6jEOI zh$`-i_lxIG(Q5^jA}r9HNcMsB32`u06yq7* zU2s~VJ?HD*g?*FAi@#YhM(nR=tACW=vSwvEJ)&_L-HeP6C6Wz-?k|bd)x7@~(AnSX z#YjC%Dyq3vji1XNhHFG%KB;|d&;1otC@ERM+f;IcC5cyR@8=c1-MgFt2n@U1%HsuX z*S%p2zIwW;j~SkzGgVBEi-*m~%qH{r$9Q(B2aE#@cKTzZBN(57Ofer2(`Cbqri6I0 zO=$h0TK3rmHJ{hNAHl zpisXxlZ(+1!OFgcrOxK%1T2<|H@ae{9JAN2N45&D5iXZSiH}MND!r$q2g*W)7D6hL;VZ8rN2YoGpdGj3= zyZ?`%Vq@RlM`66Aqup-Y&&IWjJE83&Z7lQYQyt6u@+u>o5jG{cV`#(g`ugH~=zL>@ zjsU+ryp`aJO86)H{(jfw^_kJ6qhY3O!P!?@0Ka=UO_J1wW^vT;dzlOVxPI;pl8 zL&7EI{BI=h<_$}i#`7ItuG{_-9U|L6S#XD?3BEvh)f$(397``R%z2=9cfY4B+uTs| z;A=ss<+fDDVXqA|iqA}By&7@>0!gLauhvBB5qW`lRM@At80j&muutQ<9l(`d#gb`^ zVavwqBlfGmT7wk==MEpoN8|xRt@L%wlC__ff_LpB(Wvg8u)J)x87fWA0D4(**2InS zt=2G~rT8r@awBmqRU#5hF5`hcI%HdBlWXiM7P6@AGTOAiX6!?k^N}Vb*)TmGl+2;j zl(LTs3x_N%WQOkb;;$Oz&J=B}^|Y4!T#xs-6oIej`NbJ4^QtuDAN{@`@q^!(au3;M z*95Fbl=_om0Hh0LSS_VMa*wCKdqX}`Z<4GGMxA5bw$fCLFQc65^d4RRg`D!=-qiLA z+4fm<$>0Gq)5IP9UJ8Q)70Sh)GZ4S zQY-m|F#c2Q&?;@M;d;>R@Y~#_fw(UOO?H$ate9$J^wCF>hGW6L>XWuvcF-~aMhcGJuT=~ZpIkX>D+YSTB7 zl={bFw&@c|D$wSTgAry8pUyHYsv#L>?@qi^Rf^i=?f0`3jWcDV0}7kSO0^~F(^0T~k3@JUE*WocoZ~$sUX7G6LP$^94WoT? zSdjo8aae6v{Bj2G%Ab<+f9wBoX~w@c?|+T|P5lefkO`Fvv!`5h?UR<9)h4EP*sqcs z>=5Ta9(SyfJgz0w@_J8XC?f(C<6Ho=>yqS7OS0p+1#7gp*)sbcEiu%Y+o^Hgy z+J~&pN`hcyWR{5)R_(rU17bq|j;`!0QNEiQrS8^-=kda9y-DvG_zdq)P_7sNp0iY! zsS<=MIIRtz-Bces3drNJR6e-`2&Jz^S?Kj?NvfNk-hhB_GPkH&eneip_%8KV*J$-d zSY$5t%>GT1Q)xn!Sv6WRZ7WiMaEcvz$l~86H1vb+-D5y8tzqXcak6h9bQi_uFH)ng zKE(sJ3)9Hnfd$#se1NdA4LcbX3U(Ok|NJ0!szw@2>wm$S9Eb`2!)a@(mB{0AzVN1k zZw#VMTg|Sj%}7;^=2p|9xIej3XfdP98t0!7NDMYY%G(mW%URpzpqj*NRtP9xVIXVV z5~WzAxd7o}dI`c%+y>X0@>7FNtxHGc0SJM*Hs7^dVatIvp1<^3hj|cTpJemc*@J{7 zKhW7Y5p#5(Bs|czBw?D+zvUM$vKKZ)rt^<%TPgZa?_m;}qLc%pugB$ITsrN?u(}%S zb2XM`{~0G~qiWeK?Mp?9v)`cumkBewmAW7qP8ihJ(uZBT4Uhy&etEs~V45xpa#(sR zweVZbsar;9L4YxxMJ^-J_d93KZP(8QTE25L8h$2qRibop<*SU*bFn^pfHUuoCUzg# zmVS2nNp}*|F$uYgVBz?*G?$YQdJQ;auC1l{f#xvKoRPoIrNtYuAQguMUnd^+ptXjq z*Zhj`r%_9*!f0J6i*_q>dl~qT^REK2gwWeHpia|yX-u{7K9JeC4z9eD%W#LD-o}?q zwsDN12eMtDqieaFcpNQJM^VLV(^ z&3uaOf-WHhGCucY-6*DM9RKzK6af}+fokKrNCV{`(DeY)&EcLh? zX`^2R>7*9bT(6~tf!l-kH31hQU0|u-6L;-`?VsLV%8R1lu7oW=NLDMrxweR7EAeUU zE8cp-=E<##3ASJ-YzXCYvdN8jE1KqVe9QF|8uEwT&t#y*l%7EDETUj8Vs@4I>2#W^ zch44m9L7si^~!5>Uf=1yCHG-6jQH_mXycbNCCeMESmZxW#iVOC zRK1~$wtWQi*IwNY+~DqJpk;~+#oI;wFXifUwzZ;JGj}+PR8Sb7eLX2SO~MNfP%{O$Jvb&R%oNHlpIvNxj{`*Op;k z>U^$5`^$1aSGy4NkEz@X&I9TVa&1x(6|8%-X9UjkNw&Ydf7Z?Jv)f10+TS%Kk*6&IGovTTkzg|RU!VVLe4{BOViEExFMKJeg_gh zyDwJB<(nM*9_b$b>K^ocw>_LSr&mVx?-w9!m}lH)2t>6~+s>k9j(u&&!C4dM9dHV6NC`Q||W>zaSzVb^W)r60vvUm09JvWwK}tbB-j9fUd4 zmdB!yzttepzgTW(r3IR5oZE4|#U93!RuKFaNe2`=4&=YB znc7jdRW!&s~q=ov?fz@msyr=gyd=$#Ei zk#E4$LW5J^&$cW$J*t4R_7^g(g6UOyj2~>hE>}#6??K%?E)~0NqH&9PmumwhAkDj;woH4DT-#|IVQIGg-E4I{ zk2?PUUH@ro!D@$KzCWZVnYApp|T^++~FlzER1GV%Kh7Mt^1FUJzPSlWs$$iEzpe?=zr_K zMy7d349&RlX6D1#)Z+49LEY3Qzmp$KA|n zdBo(HaPd1RL!9YvB)+$26pPtjX17mC4yoB*4kboTGy3)#R&PJY7gEaKu<_oudSM$U zTxO%ohfc;>@8sZZboiik^hkZ)>q7|~+~PmU0oFMVg1{K0xpv#{N-tL4+bs>ZxWMBq zk<84d*u3)xdZm+TbEvYD9wtKRBoox7mM|__W>3A)#RR2g?R>1dX&9VI?8leV#wzJM zAN4ls@zXm6DN-(^o~C6n!FNdi#4{{x%^RB2<+LT7-Y9=etejJ+6RL11!Ox$_n!|~| z^pCx7@1Zfvu6jz3Rux6!$uvi@&v)x*EqWlp#SsnfFnU{e|NeLl&b|n(bh$?c7evSy zYpWJUQ^dmu+rQ`o?41D&!L$*hh>KNdb0xath<;q6`inZVZ;GN(@D-s>y_$SY%Q;CK zXFiC67R8pyjC6XiI#xe)=F;^KRot*E@sbFZ2gaS5?4#7`ogkkP1rNUnON9RHbiH=V z1M;pAW35`cnU7%p7*wSq*xl5SA%N7MlawWc1vFtLuL&b6|Ii}&V_GT|W!f$OmWKZt zG?!-oTmHvJMWB;|gEP;Jpgw+EyAU6^>z)-YOadnft3}{s{l%=N!NhUqa``kM`(f!n z*B%%r3-GUvRypv4`vMbyyIt`|<{vfkqd)~wpu)fP{}?p)UxfLI8qmT=uxLz6s{(~K zU0KRW>XyMKToa}d0t0?>Ial=>=bPoK1cYy>{b6X>pi!{tIPJxSLpUIlgIq;LfaNcGOaz zTN_d6J1WmeXs}}gs_A|h>3^SHZ)ejx8J95i{PzuRh6&;2?xEjwPaUS-<+S{^a9QUn_fcnW_R_Yjd_5DJGlj`0C53zi?0I$rrmi z%VuE&KzmziBuQQjTR=*)UpiBDFc8O9-ma)&F1s2NY@K49yG37dnMuyS3t+;U*cK}t zVyoCrfCe`CVgOB#Q-Yf+Q-bX?nSd8Ir7+>y@oks&=N}UStt>TVstS20%-Oc2n8LFS zj^D-ZES}17*oW73Lo-6m!&m;K%b$d=L@^(~V|e-V#c{)pH~~mWH;iM7**zsV%nC1= z9EK{3tgqHc(jhegt+DJY^0xX?mUrsn&aLd1doT$30Nc*e!p657{Q(vPx zyt?rtd=s<52m4X;73NlNkqXVyqkC0j%Zps@(XDGB zSU!ni{X7Smr zxJQ-MudJt};JCSqX%H}ELvWQc$`EjC!aID*8)fk!mM=<^=RcQ^dkyHT-W?JB0)Bo!Y~7rUc#Fjp^FY)g9@x1@?^%gRpC_^iM*Y zP%$4S~EnA)2-0MQCHj%PV ze$HOxp%ip1cOga+-fOJ-!)KGWTW2yDz|#lj>p6F7e`2N2^xwseA)$}%RjIg1l7E(Q z1Hyfbb;=VQmSPRO>+!^zxgYHCtqyUz*^9F2>n0tV=Pcd3y_`GdB`GG-rB{Mp3{N%* zK`g}QDz-OzdLoS=XSq`mj7E*HR7B!3x4yuhsQuZb*6`A65wxgwYpQno8@+?!EA&OA z>`2Q?RV3zT%A^)Hrxb2<@(1sw=iB>6Bc^@=yCl}U2+XEI7>_UK(acum*PW@(H{TbL zbi77}i0!NTZXKmr-W!k~5S23kPDf)y1Ze8Xv^y67tg(vf$EPN-9L+`W?Wh?&c4)HZ zf6(ykUOteG&FRh8q*oq>-`}yfam}mgJziIxIuzRamVR_6Df)t&?xV7jx0Y|cs@7E} z4u!VAaU9(tM_(}f3)}yNX-98=8#>6t?Cix(yKoFLjD%zPXMPhoKvL? z&yeiR-k3-9)f6>;%%gVyG`KiLR<-iR*?cs^jQ7c*O3d#l(Jft(M>)K$*_A`POBc_67|f7X28Zd$`VhMyI^AN2QHfW2u^6Sq(puna*{i z-^~p*eE?)9O>;$wCe2%J)dENX=pjK1fy@%N@ouj zIl|AM=IYo+vN@?X7zpA|DtsdCJw=cCes6KxOU_BDtK_jFd!%?R=Rs^<{=tI(b=nsN zxeoO*tF5LWo^zDQm6~8?4U7Ed^h$Y;9>I(WgfoJ2+^>MQ0TIjOclb5VU#PRrI z#dYt}9(i;kV<9{kBBkMaOJo=;$v9dJJmi|32xU+z07P%-8oYiNE7gX{4G6ogY2>jZpQVx&B$Jdo0Z(qR~+e6EyAn+R37B!BNmpl7FV57U@80RA)7m$~W~We>#EE=RZQ+C#7Np z%0b(+)9zof=XesJ?p9n$cmT41OJ!v6+)AyP+6dbKIZjxk)h+w`(jWCXCC;NJcnVo` z#u7AW^r9>iEm9>mI4(WyZYexyMEd|+Pv$*+L7<$u93x6(8Z9LBHV0*w{RZ^lgE`^=;)K`h`ge)XO{`v}^q^mTD4w-DihmH3c*{XfP}i%mi*~ zgJjQAhE{Fu^ITVOB%V?bs6{yVM*p&i)Twv1CkgccK$t{z%JPgQoXK~?o2K;Qe?bgz zMb_2QaSDoanbT{mwi5^xAmiw{KS9-6g~1^W-qk$4sQn{U-gN|7x*{>aP#HCAX*R8q zbEX;K0WNjzY34?iL!Y+~`sI0-MoMgw`(8zb`#XUP?Ou~L1!d@zE7e?te_#4;i-arI zjhD2X9Lg>MZ=cVNeeq|y%8obHGd^Exwfi78O{oZCJT02@kEoo`ZHD^tDp&tR5<7J( zS0?rHvdAun9BGcrO-dbZz#Bs~8W6C^xkEJ?6|nf@(HfeUsMIcCd{Ybg8N)+sy5-N6 zZ?H?}IT&d@Pl25DoUY{O{tr8%Ad%XMF3+`ePxr(z-C+M=a$zd^r(sUJk?$u?jHTs z!|+6)F@V)`mTRP0JTJgdYc|QH89?<1^}N?$eEydh`d>u1KPdjaMk0;y`tK(e{6QYg zchiF3vFT^m=1E%QI1L(&R+xQ~h-CP>cU1`SZTQqbzdtQ7+@z(`vf1VMHMU$9r@Qr) zxc{HF-a8(y=zSMWLv$fpqDDmY7QICTL86OJLX;4_w-GH`^fHKEf@sk@iQao3j5gX} z7-ftxoGssbzxVvkJ%0?(UVE)~JCCA_}v=3(i^kpKR; zy-Hk|Tu+}fLcL!%_BlvCn5XC$Y>F?;}9>o$6Y0=|-)Wy)yHO}>R<|;MGh@Eke z?fELB3qPy`5+CumJt?N5|6D2-PJdJwgvndS*b2M)zEJ5^WW}N%b#LXd+4;Y)MZ`!Q z^EdhVYBNQ)Gr>zJ-pMFnQMYEN3>XRh{7M%XJxsK=1{mmOE1pSRRH8wIw;?YW4m#^% zyv{|N&w76|u;4Lh?3*(RVdkiSuS+hbTZ;~2q^}Q4R?Y=w86zF+GDC&iNQ$6$%gs(= zytd~;muGt?^jfMHY#9Bl87cQ-2+n4ioK)xwlb$kKO?v&YJ=J~GoSnr>usR|(qT@^V zcI$TA!J~?TApdknMpI9Q%+MKWj&nUFEIMVZ&@bIrr9JsOsP*aQ%Cvaz?AuEa9dh^g zsQ86qwdM787-(M{Yk+IYtBv+1o}XN79o;HD zn`&FIYh{d-h)DfT=(^8ZWsH~LW;IMs0WDs2(M#RrJJNZX7K(NfKZ#MjK8)$C@V{J< zl;L!Gb~dYD*G@9`jIk^pJ08U^16@6Q~QHFfhe{*mmsU!{fKL0Ji12Y(TJMR1+K*5pruf-?b zz`^@GEDhgR1pWiwIL56!`77`IIxzAcH9ikHu&2Ts$JDh};0%HoaCR?(;-7W2(i{^PL}FPkAr;h&52S(nI-6ff5yNeN2^hT}{I)Oo{Juhh!}d?W*N zKZ4;2>S1H=n~~X}pii4h0>{r&y^@C{-~L<{WJkliQ@yf>BsDA<*ab%uQ$q)av@A9& z1&)nU-ANlaz;LV0i_}JtWqDTW{{uITWxTqE+|-6Qz!>vQ@65(bD~1<>YH6v8!$Z}U zn;!*_Yf>=`ohZ7IAkops!^aB8E#s07F93+mYxIAC%G(4@xs#r4fVZMHz497mUZ6rZ zuf`S`(=c)_{?-Si`>1zum(Dk67@PBdoZfDz$OO9mPsRW9G^}kf-t_<03NV#{f~EY| zC`!u5v|r)4C2{i1#?DoDuN6z-YKxZ%qLtv{q z2P;fneFY;kpUkjK^RYx0iwvubl`qfmC>H{=?~B{My1rGv*|W8aroG(IN7KSAB+*_2 zG3#GrvjnC6t}{mWvzBI$(R4>U`!ZQnS<=f}g6F5)Xs`4Bab}p+CDad_G5R1&+GK0; z(&hY0GK(89zm7479T%W!p%hTXEtlS{*vs#T{ynr9@>nuUu>zb05P1U{IX^ju`;uJK zwLwP;y9*_O>Wpwu`Q_pjd(4K_Vba-#RU$aGp#o1TA_*v*?;RLDZqI;LqCa2FV~xbK zj#@Bcd-G#hmvb>^X+@yncci%u$N;o?oH{DhUUB571QIy7PRqIhYnL+`XIoo`qX%1? z=r2b*Sg9w{xAX|=}n$t}Ee3W>1s z8CIUP$o}xuU|w@J1+s|?R+HB}anSfmp4D^+|6S8uoblE?)%46d7wtY)OR^;ic(A`M z-O?y4R~SPrV@Eq{?~GS?axiHwg^4ADNUq9vCT}>{@pVk=3b_QnjCOQnAfkuDYqK|! z0!z+v|0u)fj(YA8^9H$K7+1A}G4PTTo{zGxjeCiqC62FnDg*CJZ;8~4oRY0SVTs$A ztfp3N=_7eE_tW+g>_>g>^oIJRzSSkiH$9h6e72JhiQ9s0N@(C}_VsFNx z_v0QpcUYAJ`|r?X%h?-%>taRZg+B zS7F4qM~;5uOHF4g=8t9Q81-R8#+@gN9evPHh@QSCX9?pHbTB?n>E_`N>T5cAp93Cc zei61|USI5vrh5{%QEksVQ)ad#08gH;r^X1oL7UuXSQS~1$@j^n?jLErUEtR-c?Gm3 zlR1i(_>d?TY|;TxSf6nVa|@?`J;Pd0(CE7%N_Q{LchhdS#dpLh?hSGrLfERa&7D{O zeaU3b?$=V&-i(_Gt#h~+KJlwp19QC;2jp;aiTh6BpQQCS$=Z%GtYtr?CcDvhkkSHi z)R^7V?`94hWqumAAy`!$dS5#9%~SN7vo$h}kVOIK!J)lw=G@}r86gMbc8yb!GztlP z>V-l)7P>W&Up#FRXj*N5ZD z@1(j~`rbZ8p8yf!tqSTBU;+Hv(natDei8L6@`>tql{aK-niW?H)7>B0Zlcu?TXsLdV*GqlVsp|?dEs2 zhTx?pP~I-`7m%`#x=!L`sCCarf#;f7-N`1c9A*Bm!Qv11qP&SwEK~ew-%o}o=Qml! zG9M}Tn$mf&k6W;sIyCI(h~aFD8+|0QsY|uPKiIzg6Pj#`=O^$I+wccnCpcb426_MA zz>?|U0b;eRuj`Xp%JST+I7$1^Ms4s++=ADVy7|)EovrA)%U!d6v5yBw$kc|_4KBsQ ziY@3-QPModAIZ$xD>y0ODn{S4@*AYzm8r~_;V1xaS>izm1E{Q@6odh)5w%@@btr9E(*>yj1df?o*6$tt&E5rU@!0UGH#Kx4i7VU*=)# z7j%7x*v1qasAbZN7NfmPC*W3ShMt-xj-W4%z9Yn8SWy{LbE5PJ#K54MCfwVoT=Va$ z_EZVN;}r0dm=9b}H$Y$+l%C}fz7J_T=H#B{n0>UVT?86IRQoPWC~RtP2aWIoaFQIB zcpWTFQis}kgGto7Vp(hrJ1)+r>?0s%T9`(aLgeK(uw0nzo+=lD z(=GQNxuXmZ)ykO^Yp*}i{7B)%@lfiRzQl{0RJE}Wv{rI3nS6G?&}dsGdS2IdTFb{z zvP0|It;n-EeY?rifquX=mCYRi^7x5+*$}&ou(9EcfhcW%%osqFgQ3d%M@OA+aTarO zmnrZcL#4D6C7gb19H?vbh6hHO>_TD^7@k&^(pb?@g&x9wa4z%CI87>#bQyCWK4*T4Az$s%u7>?1NOxx4m%dI*UFBoEM+uz`cqu$(F!$oXv8K%>Z8x{mHrfOhZ=HT z6y*9T_MCXZdCYeUUY+_r9rP8SKy?+Xi!*u&WGQ>cidy`&0Qg-biCP5g0Q@Anis=(u z)wul>(iddQP&>+_cM6{x{Du}vV2PjDuzbHa>bFn<{;HLuCKLZb+HOZ;Mf*7%Bk{gB zL~4jOv?_bKa+d{rE4?cFsb5?=L5XwLXExV?g6wrd2H}eAwdOO>>_nB1*~Ni}u7R8y zjmg|_AOS_63t9}uP0zibs4Cwo!_M6f*G_!w(C7rGiEq6mnJvrj80=#wENxXYykHQsI9j@r z-rvz!)2^9^H6>}Er;1YAxi{LgQZ93=c1t_oAZcDH@&fVG=p?JXSQU#O&`NTZYtq81 zVa~EhReg2L1-mF^UFp^ZhbW~&se8N6bAR|5`a)C`cFG{+c`hMJ2~7e+Pf4~Fhv~6y z9J|w~=9^g~z16Ms1z4OCD{8abb!G=0SHQDsHE~o8(LrqI9Di1UiWYY8c)l1z*FcYV z)jy_7G;R5cA9%SH@ijIY)hFCY-Hsb{`%nH=0zBCY^ecX5Kwmbm%nV7-r}GdzsTFob1UDRaKRP%Yxxr5K9gG`0OqVAw3VY&7{c z9rzroe~gfJHkMvONqH9Wi7__vWFEj}H?@6HeQxNQ0@GA2^uH(#Z)(?|fg;!Zm>*i> zo7m_i6&GGg1oj`;*F0L5v6<4d4ULGCw3(bS;TSN^iq8gS50FP8rdL#aY{q0DszwpI zscvHnnEWw z>TlfWK}y*^-#gB>P|$G~rGC^5>~drVq&e89=-gO1+6b)X<2}j1v9aX@=n|jkJyU0v ziD8+AX(^4)%Z2y~E%;`QoD@oF_vz-{j3&Y}^|S+=GwIrsC@Jk0JVl@0-Rv-V zLqA)D9(|eV+(C>HHG>md_uKEX?aR{ZY>gpov080+d+-J5&NP=dDV`)k>30NPsD^z4 z=}!23If3g^Y5VG$g3^`^*7H4_S|had5#H_1%gz|?dIx$o36-G}PmI&r7P)P`UoT-N zPZBU^tx|hl@*;N{ZXma(Brmc!pAD6>CV~-_rbfH|^hbq3a?&SI#Xo1yfYK#VAW*d@ zFlp_}pN|#G2Mal+ev(omr*Ddvb`<@JVk>&$;A_Q3h<&+`Md=%-7+$zCa%`M21CqEi zt`DTO({<&RE5!}OuTMcmq7^+#czmYHL1{Y!TCcp1UJ`F{_Q0Cz|7JJM$$8 z5zhnVLNXn@r2Z($fBAdpqnF1G_iH-v64JFv>^TzZE5u~#x)dtxbOsnN;;($@Wc}i;~6XNKakB9^_1*b}q>A zVAcLZ*d08fWnd|Q@ZKW%u@gi0KUM-eaJcr#ddfNlq}~rcRPi(kZeuKSY3i_CxL;l} ztx4f$Z`q`Vk*b)P7S4Q}b};EQTH;n4)d>?<;s7?3Jnf)>W*{cLZr~gRbQ)D`8QgWF zfM?d2W9=CU5HQC^)%XbOsGA@el_%ss`L?dkTpxpto^Fd{35|dTnYWv})wousMH^Au zyDOHvWQ1x}%0$0F%@vp#MH8X+R6<%Rw=heo_Lb|~tH|cGk!o|pixP<>s4;JQlF8({ z^#Vg{;;hesSr|f`Qq`P|@ZEVS{jU%TV>Qz+g&ifAw7kMqe$Meh^KUtF(@7}n@Wm?6 z(XN(zlQ|v2%rR|hLa=nX&odu^i=o(-dX5G;7|uh95O8YbY1l*U_<_R*-A1}$O{qXK zP1t`AZ!i)`h&Wa@DtF=GnH|nId&j_$@9)%T|4e9-&?*0fcb~q5Wfl#&QqOS!0}FyU z_%~L{3wI|&MBCK;0Rd^|qVpbQ)8p(wD5$-8vhm`RLai>_UNU!2efSH6KwgXnt<~V>kG{zV?Xp~1&4w0ns<%BaR{Hrp{?gQNAAL!L|7xk+iTQ|<}}uVK&S>|EYt*gm&|1Lq#h0U@HBZ0dkM z1^#f(4EkH4vB^+i^*`tjMQ$;aT@E4L^Ads{@xu1SP#Boi8B%?mq3}Wl=QGsx zVFugVFBOv+9neR0RxOvkhSFQJ%lfq*JQg-XAQJdrF$1Ea~WrFsfRE`TO}%M;~l!8IQY1NRidpebK=zv5F(jUShW4;ohg zwVe{aF1w%Q_^Um!MSJR}jEyOW>U%)Cyxm#eUcpSk8a+aLs_wrHAy@TgKQrRN6X1x$ z$b^>MR&9TFFLqM#bEU&Us|9vH6Tl80-(~(q!I>t|>(#z=}BTXc5U}7ktB)gz;3XTWFsVb{y zeJ*@LFjIV``QZ7ae`4!YlXh^vC}nLFqmZexsZFc)6xG%UdTKgBARH-}l|e|Qs7a;4 z_wIOJX^2;8{{BJoC@8-FdUm;Xf6xB$tOvTH{SG{kU;I^;B@`->imb7>4iR%)jygKTlkn5@|89! z-sq6VX6}2}`AEI&N{!ECbr>Wr&e$2N?!-9C*;tVqYmTvIETf(_ z^4ltz@xc_l!1GztV)3lRox<%qJ|T9E%(cg4#?gbAuRjK-RmWlXn^t~3J;MS;*@GJC zmZ95sBns>T2^t5OoBk+&CZWuvk&&l9&+L~{?R(Pc7{PNWc}#bKzw`QyYvbfA9^A0% z^@qj>H7N?VWLDGc|2kSv-40Zd(LoTT=SD86I^9RQNAS$aXG z!H>y@dB$-tuliMZ?5S_1mFoy6nuJ2#&tzR2wJLN0UCxCj6=JIMjBlostGpyEY?*Wz?ceMt8V6{*viD?C2%2IA5a19uC*dZuY#NNY~t&9?#~_=|yQEs_4Kwq0>Qg#E{@;tL=<3is~j=c-7x zBC053BX~}o({#phk~=oVk__Z2jX%()lJ|rF8vR@|s%j_6=H<)fq2f zPF|oQi>ZwOJUNOdK=kfL6nO2QD8&8rTos8{?y;Tuk!MXcgP2=VCi@SK4aRVqBrwab z!BnmRZK`QP<1kf1D=t@88y%qWWR-;WyTHvTS6PFzr$xy72X*lI*61%GpC(7}S*4nb z|5msB3_adJ5mTaXzbGH7y7M*$Sq7FmPj z<7djelYE1|0z-@sKvQtof3lu4K+82Cxuk9i$h|w<9w@q6tqUH_aaOx!kDcZ>^57bY z;e5ms?jD_6(>;01xr8-~t@yv5$yT2j=d;=ca*(R3K;;eMUJ^hP9Y#m?+Yt7D_A~#Zhx&CmD?I)&=G+ck zx!h|83UUeWVB#$SV#($dQ#4D;7d#WrqEl}JEdg7RpPzkw#DCMx+q~OT_W(U(9W6Sz zsq&csVY_D*#NxCwvaWxPxqf-{2#(`;bQLXAipqo2^SH%;al2TI%6Sd+MdvDO?RIMH z+Am8T{F?1wgnr83viV-a3^<>^f;d|Np94T2uN~=om2M`Yjw{NsZp%=BTvUM6EenNu zGGoVzy9HcK1KI$oR+DI}T*9?iB_{Ylnir2JKLT=FIa2z?KYh7`9mUlMKu!ctLrU0- zpiJ8fI%Zqq6G)zztAJ=Pdqu4*^^r01^W)d__q@4IX@kNF`U>BL>HTV%2@dP_TM(0+ z7i*aj^PQgeo%VV8t-EF1@FfwIb6=qynFZO2`heieC_Nr@4RNkfz_L=fC0XS|bPfIk zm897;vdR|#)PG5AozOFmum76FIu64?)|vX$s|=q%yPr9$PBvUm)vJtHJPa1E2FVW6 ztGem)e|8^CG&2;RuPm)Yh|R{*^Q}TBCXa4urVjEydQGG+86I0J z>#Y(Ot(hJAn;KU?^Cb33M&2Kvo`tV^k4yyDaPz$jJs&fFLp27oaJrQ%_IWe6X1~FE z9(&wn9-9>4%cc-SB&WI-7yRW5>ulsF&j3@7t*@os@ssibw6opb`;Q6?SI!Wj4eZG+ z$+6>l&UJ5oQuV#VH5UL3HR?ZQQRxq0Q%ohNQTb4`Hjk^*BS9YZbY1xr5g%OIjf6Zz zTNC6zw0+z)0bU1~=(l8%$vq2KKvq6{!_q@76vmt|MTLH=>`TpkL|l_HRZQ|ANGXGp z3D=N3YUB7hv+;fXNZ9OiwkZW#{cDehjP(h=B`=x^ICaf5Dr*(pRPb< zg-4@8S@==cp+*&?E?xVT8- z>ZiJRd|g!@7YvdKJc`8AoqtKWd|8F_$*aocm!}=~RR)wPNsNw#$?U60o6&9Br5hvh z21bTYK5-{6X>{9iw!lj5Vw1js(;JAZybq%vv$1xmTj$34u2C)@q}{DD=|dRb)SB(k z%6m)ry}Vw>vm~k+@D0!xx`?x7^k?e>Ga}(y`IfqlAEgUo%HTi7xh6^FcwuQDC`s*+ zv?7ZHHU>=0ghtQW9Vsg8#wLhKnRs3BS(wfGCTQ{XMFo#mo-x{Y9)$Q2_8~V4?bd3E zC5ZJNlc|{N-gdgH*{apV#vBO*W^qHyuGzLAxRe_CL-=Un+vC3QUM9{UACB;Grf&r* z6Cd&U`7*45hkJtR(w$$1o&O3yqNFa1m8_*>%f-w)57bPp;IY_7ffu*n$l6xBJ>aupYPQm)eoZ z-8+beFewmjT(vyAf*^CCxmwbvhU-bZ*!Mr|%bVF@h+Jr{Mmg|c4D2V=daK>9?drTx z#vj!=Tkqd3_5M2R>URLS0!=V~qAi~)Uz??+%v(P5F7>L9`F~RW;Hnih>JjM0>ml_x z)I)O`Wc9mnRp0UwiA|9`$5*e)jt*k(>6F_Pa_EF&Tuc zKwUaV{ZDByQ*h-y3L*vO@2bzK_AgrIG`zev10>3a5f1OR@VPVfgyOSx=>PDPh^q5i4M2|XSGbJxa z_*{s7cOR0RB^EY%DvU=Q-v3H#b|&=IaLmg$C8vSrPgw63ZGOCL0FBSsy+3 z*D2MU^-x~t-+S$dSy;#gEFa{B@$qn|$qAOzvGDLy-DAPw|Hf`EFF;Oc4&ztFQHvHF zNkZo|;$-02(_E!0CX^M-xH52j`l^l_^>Kv>7iHeSfZOnCMGJRw%#CJ|Yxo5_>`3G` zcxxNje>r=5JcmsYdtRyoQ=uKRro&}ur9^A=o1C;P#jQCi*F?ZlV{Yl0qc?i9%5$jI z+S;lAo~XuT_9unY)Ji^&$%_L&nK`62Q`Q-M^3?%S8j6hp<26RD6#fV8^KmzoaMBNf zVS_~kOn!GL4d`l+34L+l_oZLivuV-C)ULX?!eYvm)Izp;>!b=C4_3Tw?!D*aOVo|@ z4B>f2eyD<{CDF?}^ZepA2WUa&mbBakC(c)otNz{ljw^+g^mW#^y?IxPx&$`*>O`*D zC+i1~r)QrdJV^v!WFp6L({oNx21GU?vA-A)wlRG_2tN6KcJ3^PRnu5(=#akc=E^R5 z(Cw+KdMhpx+^e$J|8)>*BeOOfE!(dB+ovv(E>_a-gxZj^MM)Ime*V|947|I&A5XNr z#AJ1($hdjlyj?#XrB0D1R4CXBzb!eb(8xK)f&}BYH3`Ha_>dR@H?GN9skMg{D@$S= zcV63`yl78Y`plc{9sQ)o?JG^T&F!KGp`W#4_0As9LHuv&w$NGU=1PfS7^5K(8Q7RS zTlm-^o?&Vw@o@No$ns=V+$0Y76#v;CxuO(K_830Bx|>`?-Ai91MznRPoX8qUr^|e1 z{cBcHvMGY2fL1q)+{@F%7~i!RWI(8!T>ga*cl6lLv9S0@LNhK%G3SEVgu;qzPR~0? zO{V#HmheYM-?nrzeddhcndC3{IZ4%dR?qGpDiY>y9Dm^!GYdC8a;|xr7E;|j;bX*a z9W4WY@V*9`A9wQdN6z_Uw{Frj(XkxGJ|^mpVK$TH4i`yu;~)zB@#}gBN4_4N)gK$U zR#8R9pgNjhSQ&jE?k_)O7yYr+o$dl5a$Xp?yxRYzl;4?qHrgq8K zvV2SKq0qj@i+)0BhZAA%GV8;!i*nXqCo7NB9+v%f%mRO1`>KXrYce^?OeTx9!lR7o z+(vR1OWr{mMW|E1+*l~NWPLB?xYHjby8I<(ZQrEC=PXgX6)!JO#uH{XOW>d>mZ^<; zH-3kG!smfdzs|GIBYjU0L`XRz;U&w2Uw9v!t5^HUoVUfjD_6H|y;N#cY0_fR8a>Av zjiaQmufEODa$yO1+7tfXE`IYvP)K(t()N9WOg|&eAA@<;^_}Ck^k^@iLrIzJZpAK3-+ z4AjdNmD675{n_pMI#+l6(zzm(SF!{wc$u0moX)7fzO2~VdVFg&I)XG;#P7@lI%aI; zr!GybnzwWNOIx$TBMplZjp5-Jk}v-#<)$tF#dCgpO8Uzn1Y;$WafH#^9MwaMo|+5K zE0Q+a#8y4-1YH)Lmh=fmYi4E1p58XbMG;W;<9X41V5htskE+=)2qSi|l)1q6CHToy z|M8I?#x0x|ijp1z((wEgqCmual?nLHa~jJ6wFIJDrsFo)F~4EYP~i_{eO|hG_*! zZwQbS4MO)*6-<;rAs?iw*Vz+GKCjLT{&m&pE8xi<*J(9TdvYlXb#DC1HxSQr_`%?- zaQO*;^-18GpjW99l|?P_4ES@LmOk1C=bOUjT#9TJl88OnR_A%N;Oc zlM<*Y8T3aFrQAA$dCC`4-W32oRVMt-pM)a5M~sL4`#hCtC<al_Q8kObOIUE<*Xv_w#MG26Ylf0pDAh5 zJQlym&GA5`{um6FZ6*cHvt;-1y}`a~3MqLIK;_}WGce9>pQtDonCp!AA)oa5r_T1r zVz!xB+jWr5gGH*9@g3n%qPL9AMWTcrIF8%tZ+@#Q=>!8NWe4D)E!t;<{55wvxc*zpeLtRIQ^&8$=+;0x2^3L;69 zqd%ybHd)=%DK`<5_`-ZJ;D4c3;Bpu#+4KRtL=_SpB?e7u(x&DnU_lWnJU2R;(eO*T zlqy+p4d)7SV)w4?Rfbo7&y|{%mw7O41zQ=&h#+5={B?)**?6`3myMRCb)zpiN3axF z8C=!fOK5H6S=Dma!4u@Bj+-=*p=zb-KzB-1eDwaC>KgO2wl^&wb5dT=fMom~!CQvB zXkWdASscARiRL}K^fJ3G6$#?V|44blB_%^rG(tOrnEPRJX!23dTn;T>9#i)wAQ~N9 z;qEym5wR|NUWDtce3GAop4a7Poko5*NkEgQ`&z6h@JGb7+>P9>-s)}?W^n$#mkl;I zw!bK~^<^bFSt{?CN^ex*elIBfGNg;Q)q6tgDpiaP9Q)1vFo8JYa>s1VZ!K8vI>q-9 zH6zgz=}BXeay)@Jjmi55BBZtzcgF3uGbpYFyXOUqNx-v5 zqDNl75R))|lEwSW*2i{}MQBzmKS%#${6ry4au9rAxUl}&Zz0RviFBWr1tp`{efH6D z>qig7zt|@+BExLMGeOf0bm;p&ogs1Mm6w@n`GdE%rDwv+hfY=3j-tg>@Y(*6QStXh zF$UPPjN^TC8&6*_f%7BMT|~(@(3iV~6419nJ1RDajY`j}3;ucFwcWpuZ z??zM?hN@QfUQCQA`Ii$ITbW%2K0!Azz^gzz8ChV7y&vL}{+plVfFB}$>-{btoc0hb z?d9)>tS?E!8C;{U$BBF-Y4U2P{iwDX6VX1hE41yj*798T3EgiE24ftOurI_6-j|dK zI(=Ikc~nk&t?p}c$wKUHs=}s&EFoBUyc`53dEQ$nU!8rzTjPtD8ej9?FOJ$Dm2lCdFIk%@+7Z4oyX>8<2cBVC z?S%rj@Q5qqWQ_miBq`M24}+P#I^|v^M^?Dr^(bkJu5f5bguz=TFVRg0UoMACp)2~= zzfg!{#;l6=%k#-m(Pv-mkC)t==G^acj#ke}xEH5tFpq)nRS){xK1WGB_jo=f z!mxN0-5s^95>|VB3eIY~#>V(xb!LIC06+FrA}ZRK1vfCfKfYW$>;C@3VG6~rk`67% zR`J(onxxd%;C%DZvn0Cz;cok6um`Gx1y|j<<7;WnsNKtG0yUb0wh(f|GCE>)CK-Q`wM{ck!FIg_a$lK{XujI!fc&V_2LUY6u$HgjKk*VO(R9h(+>9Yn;};H%>$7VoCOwKd+F;Cy*+q(3t;YW zx6E_Z%eWMHQKC=2{F)xoSCOmO_e3kjc7MO7Pc2(caa401{O$M*ISAPjHnM%Z^3>!# zmGi`7`UP>u`~zTrL&DKkJzc67!1kVR08D2IJF~pYQv%UO&5AW5Z6wxOKfF}+gH7A= z4&@rV(xlMz{vb)1b&K1fO^3v`9)ACrp<&6*lTIau*0C&WqPw%kFzEXm5$G`U_ZNhP zlRGaw{p2U4lgh|D;209Qr=SX&WE&J`v%A~f!4{{rytz@iK#dnuKf()e`^rLoUo4V%p#D)r zLrki~n-5MwMe4q*vTYy6SXzpK{c)-}sx#L5-S7XNM?Jmg$>lzC1nMtKH912c;F2*< zoH5z=;5cogKoMVY4*z~oeCD3ESa2j;;MkpK;rMj!N?*I~E88LKL&#`5MB%}r`yDko zA(74D$2lWw?&A0IUvnw@I>`QhB=IJ&Oys`%=PP2GGm)9QB(Ve`cdrr#%<=ErIH;B^ zovC)BZd0=WZ(@p73hm*B<{7h2{*UO&4#B6-{zW$aiqPkNY^}rMpW8A!{_3PPA)_>q?Oho; z)=R|2;@)x4@V)kO&2j(!U91c5Tbl!P33Lm#a*o^LFxq~d$yGQl=W{!+wY_bVec+3N zk?(cU^(^5Ql~4T?28HmyS|WvB?_(IRE>8Cm*XO?2eK>?0baiCv_omouAr$Y{{{l>| BiKzep literal 0 HcmV?d00001 diff --git a/research/local-eight-form-capture/primary.py b/research/local-eight-form-capture/primary.py new file mode 100644 index 0000000000..a29448044e --- /dev/null +++ b/research/local-eight-form-capture/primary.py @@ -0,0 +1,115 @@ +"""Check a local dirty capture and list its current physical owners.""" +import argparse +from fractions import Fraction as Q +import gzip +import hashlib +import json +from pathlib import Path +if not __debug__: + raise SystemExit("Run this verifier without -O. Historical sources use assert.") +parser = argparse.ArgumentParser() +parser.add_argument("--base", type=Path, required=True) +parser.add_argument("--output", type=Path, required=True) +args = parser.parse_args() +BASE = args.base +WP = BASE/'retimed-4/split-centres/CANONICAL-WORD.json.gz' +TP = BASE/'retimed-4/complex/GLOBAL-TEMPLATE.json.gz' +w = json.loads(gzip.decompress(WP.read_bytes())) +t = json.loads(gzip.decompress(TP.read_bytes())) +n = 240 + w['R'] + +def add(rows, dst, src, q): + for j, x in list(rows[src].items()): + z = rows[dst].get(j, Q(0)) + q*x + if z: + rows[dst][j] = z + else: + rows[dst].pop(j, None) + + +def run(rows, operations): + for e in operations: + if e[0] == 'add': + add(rows, e[1], e[2], Q(e[3], e[4])) + else: + rows[e[1]] = {j: x*Q(e[2], e[3]) for j, x in rows[e[1]].items()} + + +def identity(): + return [{i: Q(1)} for i in range(n)] + + +ops = w['precondition'] + w['compensation'] + w['A'] + w['B'] + w['cleanup'] +rows = identity() +run(rows, ops) +assert all(rows[i] == {i: 1} for i in list(range(120)) + list(range(240, n))) +assert all({j: x for j, x in rows[i].items() if 120 <= j < 240} == {i: 1} + for i in range(120, 240)) +S = [{j: x for j, x in rows[120+i].items() if j < 120} for i in range(120)] +D = [{j: x for j, x in rows[120+i].items() if j >= 240} for i in range(120)] +assert all(w['start'][j] == 0 for row in D for j in row) +assert all(x.denominator & (x.denominator-1) == 0 for row in D for x in row.values()) + +# Each selected centre row is a dyadic form of the input X bank. +clean = [{i: Q(1)} if i < 240 else {} for i in range(n)] +run(clean, w['precondition'] + w['A']) +C = [clean[r] for r in w['centers'][:8]] +assert all(row and all(j < 120 for j in row) for row in C) +assert [[sum(C[i].get(j, 0)*C[k].get(j, 0) for j in range(120)) + for k in range(8)] for i in range(8)] == [[56*int(i == k) for k in range(8)] for i in range(8)] +code = [i for i, row in enumerate(S) if row] +for i in code: + for j in range(120): + gram = sum(row.get(i, 0)*row.get(j, 0) for row in C)/4 + assert Q(int(i == j)) - S[i].get(j, 0) == gram +helpers = list(range(758, 750, -1)) +assert all(w['start'][r] == 0 and w['final'][r] == 1 for r in helpers) +assert all(w['start'][120+j] == 0 and w['final'][j] == 1 for row in C for j in row) + +# Correct the omitted-centre word on all helper dirt, then retain eight forms. +state = identity() +for r, form in zip(helpers, C): + for j, q in form.items(): + add(state, r, 120+j, q) +for i, row in enumerate(D): + for j, q in row.items(): + add(state, 120+i, j, -q) +run(state, ops) +for r, form in zip(helpers, C): + for j, q in form.items(): + add(state, r, j, Q(59, 4)*q) +expected = identity() +for i, row in enumerate(S): + for j, q in row.items(): + add(expected, 120+i, j, q) +for r, form in zip(helpers, C): + for j, q in form.items(): + expected[r][j] = Q(59, 4)*q + expected[r][120+j] = q +assert state == expected + +owners = [] +for r in helpers: + family, route = t['calls'][0]['owners'][r] + assert 600 <= family <= 607 and route[:6] == [4, 2, 0, 9, 0, [1,2,3,4,5,6,7,8,9]] + roles = [] + for call in t['calls']: + if call['replica']: + continue + same = [(i, rr) for i, (f, rr) in enumerate(call['owners']) if f == family] + assert len(same) <= 1 + roles += [dict(stage=call['stage'], register=i, route=rr) for i, rr in same] + assert [z['stage'] for z in roles if z['stage'] <= 3] == [0, 2, 3] + assert [z['route'][2] for z in roles if z['stage'] <= 3] == [0, 9, 18] + owners.append(dict(family=family, capture_register=r, roles=roles)) +result = dict(status='PASS_LOCAL_DIRTY_CAPTURE_AND_CURRENT_OWNER_INVENTORY', + word_sha256=hashlib.sha256(WP.read_bytes()).hexdigest(), + template_sha256=hashlib.sha256(TP.read_bytes()).hexdigest(), + all_columns=n, retained_forms=8, centre_gram_multiplier=56, decoder_factor='C^t C / 4', + dirty_correction_terms=sum(map(len,D)), + local_source_and_target_map='X unchanged; Y += S X', + local_helper_map='Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged', + owners=owners, + scope='The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified.') +args.output.write_text(json.dumps(result, indent=2)+'\n') +print(json.dumps({k:v for k,v in result.items() if k != 'owners'}, indent=2)) diff --git a/research/local-eight-form-capture/replay.log b/research/local-eight-form-capture/replay.log new file mode 100644 index 0000000000..65cc02a5c8 --- /dev/null +++ b/research/local-eight-form-capture/replay.log @@ -0,0 +1,5 @@ +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/primary.py --base /private/tmp/eight-form-capture-cleanup-20261023/work/next-track/complex/pipeline --output /private/tmp/eight-form-capture-cleanup-20261023/primary-result.json +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/dense_columns.py --base /private/tmp/eight-form-capture-cleanup-20261023/work/next-track/complex/pipeline +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /private/tmp/eight-form-capture-cleanup-20261023/work/doubling-architecture/rank-independent/live-capture/check.py +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /private/tmp/eight-form-capture-cleanup-20261023/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py +PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326 diff --git a/research/local-eight-form-capture/replayed-receipt.json b/research/local-eight-form-capture/replayed-receipt.json new file mode 100644 index 0000000000..f2a8f3ba7c --- /dev/null +++ b/research/local-eight-form-capture/replayed-receipt.json @@ -0,0 +1,2633 @@ +{ + "status": "PASS_LOCAL_EIGHT_FORM_CAPTURE", + "checks": [ + { + "status": "PASS_LOCAL_DIRTY_CAPTURE_AND_CURRENT_OWNER_INVENTORY", + "word_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "template_sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "all_columns": 800, + "retained_forms": 8, + "centre_gram_multiplier": 56, + "decoder_factor": "C^t C / 4", + "dirty_correction_terms": 11326, + "local_source_and_target_map": "X unchanged; Y += S X", + "local_helper_map": "Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged", + "owners": [ + { + "family": 600, + "capture_register": 758, + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 601, + "capture_register": 757, + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 602, + "capture_register": 756, + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 603, + "capture_register": 755, + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 604, + "capture_register": 754, + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 605, + "capture_register": 753, + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 606, + "capture_register": 752, + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 607, + "capture_register": 751, + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified." + }, + { + "status": "PASS_INDEPENDENT_EXACT_CAPTURE_MAP", + "source_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "method": "800 exact input columns; symbolic composition of boundary maps", + "columns": 800, + "scalar_operations": 19449, + "code_ports": 112, + "dirty_correction_terms": 11326, + "C_row_gram": 56, + "captured_forms": 8, + "boundary_frames": "preload and dirt correction at zero; postload at full", + "scope": "Local label map only; no routed endpoint decoder or global cost claim." + }, + { + "status": "PASS_INDEPENDENT_800_COLUMN_DIRTY_CAPTURE", + "base_columns": 800, + "complete_capture_columns": 800, + "base_scalar_operations": 19449, + "code_ports": 112, + "center_gram": 56, + "dirt_correction_coefficients": 11326, + "retained_forms": 8, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f" + }, + "owners": [ + { + "helper": 758, + "family": 600, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 757, + "family": 601, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 756, + "family": 602, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 755, + "family": 603, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 754, + "family": 604, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 753, + "family": 605, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 752, + "family": 606, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 751, + "family": 607, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "Exact local label map and initial owner-frame inventory only. No modified global controller, endpoint uncompute, finite invoice, or new exponent is certified." + }, + { + "status": "PASS_ENDPOINT_COVARIANCE_AND_TENSOR_COUNTEREXAMPLE", + "chart_identity": "D_I P_sigma = T_translation P_sigma D_I", + "charts": [ + { + "family": 600, + "helper": 758, + "q": 7, + "translation": 15, + "strict_commutation": false + }, + { + "family": 601, + "helper": 757, + "q": 11, + "translation": 15, + "strict_commutation": false + }, + { + "family": 602, + "helper": 756, + "q": 19, + "translation": 23, + "strict_commutation": false + }, + { + "family": 603, + "helper": 755, + "q": 35, + "translation": 39, + "strict_commutation": false + }, + { + "family": 604, + "helper": 754, + "q": 67, + "translation": 71, + "strict_commutation": false + }, + { + "family": 605, + "helper": 753, + "q": 131, + "translation": 135, + "strict_commutation": false + }, + { + "family": 606, + "helper": 752, + "q": 259, + "translation": 263, + "strict_commutation": false + }, + { + "family": 607, + "helper": 751, + "q": 13, + "translation": 15, + "strict_commutation": false + } + ], + "source_X_factor_required": "D_p^-1", + "reason": "The initial C_q is a frame interpretation, not an extra paid initial transform.", + "false_tensor_shortcut_witness": { + "Fourier_character": [ + 1, + 1 + ], + "exact_D_inverse_tensor_2": "-1", + "proposed_aI_plus_b_translation_tensor_2": "1" + }, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + "scope": "Seed phase identities and a counterexample to a proposed constant-size all-size shortcut. No endpoint cost or modified global controller is certified." + } + ], + "source_manifest_sha256": "7405268783ebe41df6ef22d44565047800668a1e33478339ae5a08673b168cff" +} diff --git a/research/local-eight-form-capture/review/BOUNDARY-COUNT-CONTROL.json b/research/local-eight-form-capture/review/BOUNDARY-COUNT-CONTROL.json new file mode 100644 index 0000000000..93d3b2ea3c --- /dev/null +++ b/research/local-eight-form-capture/review/BOUNDARY-COUNT-CONTROL.json @@ -0,0 +1,44 @@ +{ + "status": "PASS_BOUNDARY_COUNTS_AND_SELECTED_HELPER_D_COLUMN_CHECK", + "centre_row_support": [ + 56, + 56, + 56, + 56, + 56, + 56, + 56, + 56 + ], + "centre_coefficients": [ + -1, + 0, + 1 + ], + "base_scalar_operations": 19449, + "dirt_correction_operations": 11326, + "dirt_correction_count_source": "Reproduced complete historical receipts", + "preload_operations": 448, + "postload_operations": 448, + "total_scalar_operations": 31671, + "all_Y_start_at_zero_frame": true, + "zero_and_full_frame_ids_verified": true, + "selected_helper_D_nonzero_counts": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "DP_zero": true, + "clarification": "For these selected helpers D has zero columns. Using their old values does not add a nonzero DPY error. The implemented updated-helper order is valid.", + "scope": "Scalar operation count and order clarification only; no native or recursive cost invoice.", + "method": "Use the retained column interpreter on 120 centre-prefix and eight helper basis columns.", + "source_sha256": { + "historical/work/doubling-architecture/rank-independent/live-capture/check.py": "558df28c3e0934d8b1d2fdfb591e57fb2cc60ae69e599a341c1bc7f507a685c4", + "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be" + } +} diff --git a/research/local-eight-form-capture/review/CHECKED-FILES-AFTER.json b/research/local-eight-form-capture/review/CHECKED-FILES-AFTER.json new file mode 100644 index 0000000000..bc7fc9d428 --- /dev/null +++ b/research/local-eight-form-capture/review/CHECKED-FILES-AFTER.json @@ -0,0 +1,136 @@ +{ + "scope": "All regular staged package files, except top-level review/ and publication-review/. Review copies are excluded to avoid self-reference.", + "package": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture", + "excluded_directory_names": [ + "review", + "publication-review" + ], + "excluded_files_present": [], + "files": [ + { + "path": "README.md", + "bytes": 5457, + "sha256": "dd83a4bf5bf203d9d6a2ac43b05d9d3668021a20aa771fed2c1b7929fe649418" + }, + { + "path": "SOURCE-MANIFEST.json", + "bytes": 5479, + "sha256": "7405268783ebe41df6ef22d44565047800668a1e33478339ae5a08673b168cff" + }, + { + "path": "VALIDATION.json", + "bytes": 685, + "sha256": "d41054458c21fb1d8649cdda0066c84249ebc22cc0f300ea4951a202e3a431a6" + }, + { + "path": "dense_columns.py", + "bytes": 3540, + "sha256": "d3fff0581817b15ba873b8e8fcd106005214d48de44aa713f397952bd9d47269" + }, + { + "path": "historical/work/combined-pr/publication/research/e8-combined/NOTICE", + "bytes": 5054, + "sha256": "7b41fa130dcd11e5972eed84e12f3499d80ea00e17d460f450fa8ddf39cc4951" + }, + { + "path": "historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "bytes": 8867, + "sha256": "72e38ad6a030b7bb29eac71cda1eafeb96e9202630a9e96f3fbf5cac31742b49" + }, + { + "path": "historical/work/complex-next/structural/check_hosted_capture.py", + "bytes": 4711, + "sha256": "04a1f9434d3b1ba9b0744863522cfeab7b139d51f361ec2e887994ac7fdf9c12" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "bytes": 2541, + "sha256": "16df704fa05256cb567bb7c84eb8ebc213cead05b7c3cb6d295d435241a13833" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "bytes": 528, + "sha256": "e2db977b175614a57c23111fbee0ccd0639f50e1c329da15b5de9384ae1bfce2" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/check_capture_independent.py", + "bytes": 3403, + "sha256": "0520113c0318f4eaf0cb56dde5ee88980ff5e10cbd3f20cfd942d580ea8951f1" + }, + { + "path": "historical/work/complex-next/structural/hosted-capture-receipt.json", + "bytes": 21400, + "sha256": "61198fdd7d1b99e2384b50fd5666d48866c98bf61280df4694ac10f13dab0b12" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "bytes": 2185, + "sha256": "3ff5c5f1f58d1b658d493083ec69e5225f33d0fe4d39be8285ffa937f004bc8e" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "bytes": 21564, + "sha256": "8ff1440f0008f8af3344c4598f0d08cf375b1b47eba363a30fa3c697a3a35c9a" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "bytes": 5447, + "sha256": "e4eaa33d9143d78e0230b2fd4ce4afd0610a4b290a052f6c1ab0793974437f39" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/check.py", + "bytes": 5787, + "sha256": "558df28c3e0934d8b1d2fdfb591e57fb2cc60ae69e599a341c1bc7f507a685c4" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "bytes": 3871, + "sha256": "70deac8ee0febef6c7d1b55d3a756bb9bb7dace7b4ce6a1728c226c77b62a639" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "bytes": 2447, + "sha256": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "bytes": 8835, + "sha256": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "bytes": 9402, + "sha256": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + { + "path": "historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "bytes": 465792, + "sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f" + }, + { + "path": "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "bytes": 83586, + "sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be" + }, + { + "path": "primary.py", + "bytes": 4862, + "sha256": "4667c42411fc8d50868d5e1cc5335d2e966cb0d05876564c91aeb728ba4a69dc" + }, + { + "path": "replay.log", + "bytes": 1079, + "sha256": "d3c39d733abd943d10d5569e72218daed05b350cb7fb3046d3b15e2eca06b554" + }, + { + "path": "replayed-receipt.json", + "bytes": 56351, + "sha256": "b52c403f5dc4b5d8e5cb40d94dbc3a223a113c441e6c35ff81c832ff12ea92e2" + }, + { + "path": "verify.py", + "bytes": 2623, + "sha256": "02e8d40eb8d13b06227c54528a0e10fa63cc256f16a39bc0b2eee09a069f1d00" + } + ] +} diff --git a/research/local-eight-form-capture/review/CHECKED-FILES-BEFORE.json b/research/local-eight-form-capture/review/CHECKED-FILES-BEFORE.json new file mode 100644 index 0000000000..66d14de43a --- /dev/null +++ b/research/local-eight-form-capture/review/CHECKED-FILES-BEFORE.json @@ -0,0 +1,117 @@ +[ + { + "path": "README.md", + "bytes": 5163, + "sha256": "6bf2fa7cc2cfcdf480a60c5a93fb0b026a7c6d3f5135d037fc77b37c46a04e98" + }, + { + "path": "SOURCE-MANIFEST.json", + "bytes": 5479, + "sha256": "7405268783ebe41df6ef22d44565047800668a1e33478339ae5a08673b168cff" + }, + { + "path": "dense_columns.py", + "bytes": 3540, + "sha256": "d3fff0581817b15ba873b8e8fcd106005214d48de44aa713f397952bd9d47269" + }, + { + "path": "historical/work/combined-pr/publication/research/e8-combined/NOTICE", + "bytes": 5054, + "sha256": "7b41fa130dcd11e5972eed84e12f3499d80ea00e17d460f450fa8ddf39cc4951" + }, + { + "path": "historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "bytes": 8867, + "sha256": "72e38ad6a030b7bb29eac71cda1eafeb96e9202630a9e96f3fbf5cac31742b49" + }, + { + "path": "historical/work/complex-next/structural/check_hosted_capture.py", + "bytes": 4711, + "sha256": "04a1f9434d3b1ba9b0744863522cfeab7b139d51f361ec2e887994ac7fdf9c12" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "bytes": 2541, + "sha256": "16df704fa05256cb567bb7c84eb8ebc213cead05b7c3cb6d295d435241a13833" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "bytes": 528, + "sha256": "e2db977b175614a57c23111fbee0ccd0639f50e1c329da15b5de9384ae1bfce2" + }, + { + "path": "historical/work/complex-next/structural/hamming-factor/check_capture_independent.py", + "bytes": 3403, + "sha256": "0520113c0318f4eaf0cb56dde5ee88980ff5e10cbd3f20cfd942d580ea8951f1" + }, + { + "path": "historical/work/complex-next/structural/hosted-capture-receipt.json", + "bytes": 21400, + "sha256": "61198fdd7d1b99e2384b50fd5666d48866c98bf61280df4694ac10f13dab0b12" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "bytes": 2185, + "sha256": "3ff5c5f1f58d1b658d493083ec69e5225f33d0fe4d39be8285ffa937f004bc8e" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "bytes": 21564, + "sha256": "8ff1440f0008f8af3344c4598f0d08cf375b1b47eba363a30fa3c697a3a35c9a" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "bytes": 5447, + "sha256": "e4eaa33d9143d78e0230b2fd4ce4afd0610a4b290a052f6c1ab0793974437f39" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/check.py", + "bytes": 5787, + "sha256": "558df28c3e0934d8b1d2fdfb591e57fb2cc60ae69e599a341c1bc7f507a685c4" + }, + { + "path": "historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "bytes": 3871, + "sha256": "70deac8ee0febef6c7d1b55d3a756bb9bb7dace7b4ce6a1728c226c77b62a639" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "bytes": 2447, + "sha256": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "bytes": 8835, + "sha256": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be" + }, + { + "path": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "bytes": 9402, + "sha256": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + { + "path": "historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "bytes": 465792, + "sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f" + }, + { + "path": "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "bytes": 83586, + "sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be" + }, + { + "path": "primary.py", + "bytes": 4862, + "sha256": "4667c42411fc8d50868d5e1cc5335d2e966cb0d05876564c91aeb728ba4a69dc" + }, + { + "path": "replay.log", + "bytes": 857, + "sha256": "9589fd7bfe178f7ff8c3862bbe3b8c26c5e69da8ac6bbd5608c245694b5bdc46" + }, + { + "path": "verify.py", + "bytes": 2623, + "sha256": "02e8d40eb8d13b06227c54528a0e10fa63cc256f16a39bc0b2eee09a069f1d00" + } +] diff --git a/research/local-eight-form-capture/review/COMMAND.json b/research/local-eight-form-capture/review/COMMAND.json new file mode 100644 index 0000000000..b2f69aff56 --- /dev/null +++ b/research/local-eight-form-capture/review/COMMAND.json @@ -0,0 +1,14 @@ +{ + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/verify.py", + "--build", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run" + ], + "cwd": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture", + "PYTHONOPTIMIZE": "1", + "python_version": "3.14.7 (main, Aug 5 2026, 10:29:49) [Clang 21.0.0 (clang-2100.1.1.101)]", + "one_child_at_a_time": true +} diff --git a/research/local-eight-form-capture/review/PORTABILITY.diff b/research/local-eight-form-capture/review/PORTABILITY.diff new file mode 100644 index 0000000000..e25a2e4ebf --- /dev/null +++ b/research/local-eight-form-capture/review/PORTABILITY.diff @@ -0,0 +1,49 @@ +--- historical/work/complex-next/structural/check_hosted_capture.py ++++ primary.py +@@ -1,10 +1,17 @@ + """Check a local dirty capture and list its current physical owners.""" ++import argparse + from fractions import Fraction as Q + import gzip + import hashlib + import json + from pathlib import Path +-BASE = Path('/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/next-track/complex/pipeline') ++if not __debug__: ++ raise SystemExit("Run this verifier without -O. Historical sources use assert.") ++parser = argparse.ArgumentParser() ++parser.add_argument("--base", type=Path, required=True) ++parser.add_argument("--output", type=Path, required=True) ++args = parser.parse_args() ++BASE = args.base + WP = BASE/'retimed-4/split-centres/CANONICAL-WORD.json.gz' + TP = BASE/'retimed-4/complex/GLOBAL-TEMPLATE.json.gz' + w = json.loads(gzip.decompress(WP.read_bytes())) +@@ -104,5 +111,5 @@ + local_helper_map='Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged', + owners=owners, + scope='The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified.') +-Path(__file__).with_name('hosted-capture-receipt.json').write_text(json.dumps(result, indent=2)+'\n') ++args.output.write_text(json.dumps(result, indent=2)+'\n') + print(json.dumps({k:v for k,v in result.items() if k != 'owners'}, indent=2)) +--- historical/work/complex-next/structural/hamming-factor/check_capture_independent.py ++++ dense_columns.py +@@ -1,11 +1,17 @@ + """Check the omitted-centre map by exact input-column propagation.""" ++import argparse + from fractions import Fraction as F + import gzip + import hashlib + import json + from pathlib import Path + +-BASE = Path('/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/next-track/complex/pipeline') ++if not __debug__: ++ raise SystemExit("Run this verifier without -O. Historical sources use assert.") ++parser = argparse.ArgumentParser() ++parser.add_argument("--base", type=Path, required=True) ++args = parser.parse_args() ++BASE = args.base + PATH = BASE / 'retimed-4/split-centres/CANONICAL-WORD.json.gz' + raw = PATH.read_bytes() + w = json.loads(gzip.decompress(raw)) diff --git a/research/local-eight-form-capture/review/RESULT.json b/research/local-eight-form-capture/review/RESULT.json new file mode 100644 index 0000000000..965afe507a --- /dev/null +++ b/research/local-eight-form-capture/review/RESULT.json @@ -0,0 +1,4 @@ +{ + "exit_code": 0, + "seconds": 27.264490625006147 +} diff --git a/research/local-eight-form-capture/review/REVIEW-STATUS.json b/research/local-eight-form-capture/review/REVIEW-STATUS.json new file mode 100644 index 0000000000..facb65dc40 --- /dev/null +++ b/research/local-eight-form-capture/review/REVIEW-STATUS.json @@ -0,0 +1,86 @@ +{ + "status": "PASS", + "result_type": "Exact forward local scalar construction and scoped endpoint limitations", + "reviewer": "Independent agent review; no human review claimed", + "main_pin": "cef4b52f2a59009865bf8eabde1be3f159063703", + "package_files_bound": 25, + "frozen_originals_byte_verified": 17, + "fresh_complete_receipt_comparisons": 4, + "replay_exit_code": 0, + "replay_seconds": 27.264490625006147, + "final_replay_line": "PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326", + "worker_and_reviewer_receipts_equal": true, + "full_scalar_count": 31671, + "selected_helper_D_columns_all_zero": true, + "DP_zero": true, + "resolved_findings": [ + "The fixed selected helper columns of D are all zero. The generic stale-helper DPY term is therefore zero here. README qualifies the unchanged historical warning.", + "README now gives the full 31,671 scalar operation count." + ], + "unresolved_material_findings": [], + "exclusions": [ + "No native or physical realization of new boundary operations", + "No backward or global routed controller construction", + "No restoration of the eight retained helper owners", + "No complete recursive invoice", + "No kappa improvement", + "No final PR-body, GitHub rendering or published readback review" + ], + "evidence": [ + { + "path": "REVIEW.md", + "bytes": 8047, + "sha256": "4cf1b9773ca8b53050b528552c400fa528a2266db8eb3124d851f3287e7d5e81" + }, + { + "path": "COMMAND.json", + "bytes": 709, + "sha256": "47fca30ee97eb8aaa7b8e81b77fe2ed9b448dd7d98127f2160cce8204c554cad" + }, + { + "path": "RESULT.json", + "bytes": 54, + "sha256": "646ef3cfcfe054bf7844619298975540c77c9b7dbfc638609228951bbf55dc03" + }, + { + "path": "stdout.log", + "bytes": 1444, + "sha256": "59b9f47d6ba203c7e65caab423293b4e064616ffa0a26399bdfd3497b7e48587" + }, + { + "path": "stderr.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "SOURCE-AND-EVIDENCE-CHECK.json", + "bytes": 7461, + "sha256": "0151353b5ef79233a09891ebf3276a7f9fd1dd65694b2dc438f46ab67ca79c30" + }, + { + "path": "PORTABILITY.diff", + "bytes": 2282, + "sha256": "d2e3f8576e3be7ffc128d969e59261ca2fc6071cf2181e5061753d149f37a2d6" + }, + { + "path": "check_boundary_counts.py", + "bytes": 3220, + "sha256": "b0518b671cf2854c7b176db1a1c302369b27b93e59a8ee0270a29f7c6ca8a061" + }, + { + "path": "BOUNDARY-COUNT-CONTROL.json", + "bytes": 1391, + "sha256": "7b6ab1d2768f0d5f30d2e082679fb282905b5f8c57c537f3cdbc6132f77cf9f2" + }, + { + "path": "fresh-run/receipt.json", + "bytes": 56351, + "sha256": "b52c403f5dc4b5d8e5cb40d94dbc3a223a113c441e6c35ff81c832ff12ea92e2" + }, + { + "path": "CHECKED-FILES-AFTER.json", + "bytes": 5360, + "sha256": "4d9ead7fcc6a1df836f90383158606c27525b4b9a16d240ec7d0eeedb84e45f6" + } + ] +} diff --git a/research/local-eight-form-capture/review/REVIEW.md b/research/local-eight-form-capture/review/REVIEW.md new file mode 100644 index 0000000000..b8a5f11b5a --- /dev/null +++ b/research/local-eight-form-capture/review/REVIEW.md @@ -0,0 +1,142 @@ +# Independent agent review: local eight-form capture + +Status: PASS after the scope correction below. This is an independent agent +review, not a human review or a formal proof-assistant check. The review covers +the staged local-eight-form-capture package and its exact frozen inputs. +It does not cover GitHub rendering or the final PR text. + +## Result and useful scope + +The package gives a complete forward local scalar program on 800 arbitrary +input fields: 120 X fields, 120 Y fields and 560 helper fields. It preserves X, +sends Y to Y+SX, and sends the eight helpers with indices 758 through 751 to +h_i+C_i(59X/4+Y). It preserves every other helper. The selected eight helpers +remain changed; the program does not restore them. + +This gives an exact fixture for capture into existing, arbitrary dirty helper +values. Its initial owner inventory identifies those helpers with future Y data +owners. It does not treat the live owners as private workspace. The result can +be used to test a proposed local composition against the old owner values. +It does not establish that such a composition has a lower complete cost. + +The exact C rows have entries in {0,+1,-1}, support 56 each, and C C^T=56I. +The identity S=I-C^T C/4 applies on the 112 code ports. The other eight ports +have zero S rows and zero C columns; the displayed S identity must not be +extended to all 120 ports. + +The omitted-centre base word has map Y -> Y+SX+Dh and preserves h. Let P +insert the eight C rows into the selected helpers. The program first forms +h1=h+PY, then sets Y1=Y-Dh1, then applies the base word, and finally adds +(59/4)PX to those helpers. The base step sends Y1 to Y+SX. This proves the +stated boundary composition. The sparse-row checker and the separate full +column checker also test the complete map. Since the program is linear, an +exact check of every input column proves the local scalar map for arbitrary +input values, including all arbitrary old helper values. + +## Full scalar count and unpriced obligations + +The base word has 19,449 scalar operations. Dirt correction has 11,326 +operations. Each of the two eight-row loads has 448 scalar additions. +Thus the implemented count is 19,449+11,326+448+448 = 31,671 scalar operations. +This is a scalar program count. It is not a native, physical or recursive +invoice, and it is not a claimed saving against another complete supplier. +The count of 11,326 was reproduced in the full historical receipts. The extra +boundary control independently recounts the base and both load supports. + +The saved boundary labels place preload and dirt correction in the zero frame +and postload in the full frame. The extra control checks these frame entries. +This does not prove a paid native or phase realization for the new operations. +No backward program, routed global controller, endpoint decoder, restoration +of the eight data owners, or full recursive cost is supplied. The construction +does not change the complete kappa calculation. + +## Resolved explanatory error + +The frozen historical review warns that correction from old helper values +would leave an extra DPY term. That term is the correct generic comparison, +but it is zero for this fixed selection. The reviewer propagated all eight +selected helper basis columns through the base word. Each column has zero Y +output, so the corresponding columns of D are zero and DP=0. + +The package README now states this fact and says that the historical warning +does not apply to these eight helpers. The frozen text remains unchanged. +The implemented updated-helper order is valid. It is not proved necessary +by a nonzero-error example here. This correction does not change the verified +endpoint or any executable input. The check source and exact result are +check_boundary_counts.py and BOUNDARY-COUNT-CONTROL.json in this review. + +## Verification performed + +The reviewer ran the driver in a fresh output directory with Python 3.14.7, +using isolated mode and PYTHONOPTIMIZE=1 in the environment. Each child uses +-E and runs sequentially, so the inherited environment does not disable its +assertions. The exact command, version, exit status and literal output are in +COMMAND.json, RESULT.json, stdout.log and stderr.log. The run exited 0 after +27.264490625006147 seconds. Its final line was: + +```text +PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326 +``` + +All four complete receipts matched their unchanged historical counterparts: + +1. Sparse-row check of the base, boundary composition and captured endpoint. +2. Separate 800-column base check and symbolic boundary composition. +3. Separate 800-column check of the complete captured endpoint and owner map. +4. The endpoint and covariance limitations check. + +The worker's separate fresh full replay produced the same complete aggregate +receipt. Both hashes in VALIDATION.json match the published candidate files. +All 17 frozen source/input files match their original workspace bytes, the +manifest hashes and the manifest sizes. SOURCE-AND-EVIDENCE-CHECK.json records +these comparisons. PORTABILITY.diff records the two portable script changes: +explicit input/output arguments replace absolute paths, and optimized-Python +guards were added. Their mathematical operations are unchanged. The other +two historical checkers are byte-exact copies. + +The extra boundary check ran with this command from the workspace root: + +```sh +python3 -I -B work/project-final-cleanup-20261022/reviews/local-capture/check_boundary_counts.py --package work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture --output work/project-final-cleanup-20261022/reviews/local-capture/BOUNDARY-COUNT-CONTROL.json +``` + +It returned PASS_BOUNDARY_COUNTS_AND_SELECTED_HELPER_D_COLUMN_CHECK. The +check uses the retained independent column interpreter on 120 centre-prefix +columns and eight helper columns. It is not an independent implementation +of that interpreter. The source and word hashes are in its receipt. + +## Endpoint limits and relation to current work + +The retained endpoint check establishes the stated binary chart covariance +with nonzero translations 15,15,23,39,71,135,263,15. It does not establish raw +commutation. It also rejects the proposed two-tap tensor inverse shortcut: +the tested Fourier character has true tensor inverse eigenvalue -1, while the +two-tap expression gives +1. The inherited geometry proof specifies the entry +X inverse frame as an interpretation, not a paid initial transform. These +facts prevent an unsupported physical endpoint or controller claim. + +The current native-centre-capture package at main commit +cef4b52f2a59009865bf8eabde1be3f159063703 uses 640 inputs and 16 centre records, +with different native endpoints. It is distinct from this 800-input, +eight-mixed-form endpoint. Its costs or theorems cannot be transferred by +adding the two bills. A bounded search of current research sources found +other 800-input base checks, but did not find this 59X/4 mixed capture claim. +This is not an exhaustive claim about every historical or open PR. The useful +contribution is the exact closed local program and its limits, not a claim +of a new general capture principle. + +## Attribution and publication boundary + +The retained notices credit Ali Romman with OpenAI Codex assistance for the +changed R560 words and composition. They preserve DreamingOfClouds' kernel +scripts, chafreaky's paid adapters and distinct-host construction, icekylinx's +split centres, and the earlier geometry sources. The README cites the PR #495 +lineage with a commit-pinned proof. The generated word and template are bound +by their own SHA256 values and are not claimed to equal a published generated +file. Original notices and source ledgers are unchanged. Agent assistance +and the absence of independent human review are stated. + +The parent coordinator must check the final PR body, commit-pinned links, +GitHub rendering and published readback. No PR, commit, worktree, deletion or +new research direction was made by this reviewer. There are no unresolved +material findings within the local scalar claim stated above. diff --git a/research/local-eight-form-capture/review/SOURCE-AND-EVIDENCE-CHECK.json b/research/local-eight-form-capture/review/SOURCE-AND-EVIDENCE-CHECK.json new file mode 100644 index 0000000000..ecd453778b --- /dev/null +++ b/research/local-eight-form-capture/review/SOURCE-AND-EVIDENCE-CHECK.json @@ -0,0 +1,163 @@ +{ + "status": "PASS", + "frozen_original_count": 17, + "checks": [ + { + "original": "work/complex-next/structural/check_hosted_capture.py", + "package": "historical/work/complex-next/structural/check_hosted_capture.py", + "sha256": "04a1f9434d3b1ba9b0744863522cfeab7b139d51f361ec2e887994ac7fdf9c12", + "bytes": 4711, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/complex-next/structural/hosted-capture-receipt.json", + "package": "historical/work/complex-next/structural/hosted-capture-receipt.json", + "sha256": "61198fdd7d1b99e2384b50fd5666d48866c98bf61280df4694ac10f13dab0b12", + "bytes": 21400, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/complex-next/structural/hamming-factor/check_capture_independent.py", + "package": "historical/work/complex-next/structural/hamming-factor/check_capture_independent.py", + "sha256": "0520113c0318f4eaf0cb56dde5ee88980ff5e10cbd3f20cfd942d580ea8951f1", + "bytes": 3403, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "package": "historical/work/complex-next/structural/hamming-factor/capture-independent-receipt.json", + "sha256": "e2db977b175614a57c23111fbee0ccd0639f50e1c329da15b5de9384ae1bfce2", + "bytes": 528, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "package": "historical/work/complex-next/structural/hamming-factor/HOSTED-CAPTURE-REVIEW.txt", + "sha256": "16df704fa05256cb567bb7c84eb8ebc213cead05b7c3cb6d295d435241a13833", + "bytes": 2541, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/check.py", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/check.py", + "sha256": "558df28c3e0934d8b1d2fdfb591e57fb2cc60ae69e599a341c1bc7f507a685c4", + "bytes": 5787, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/RESULT.json", + "sha256": "8ff1440f0008f8af3344c4598f0d08cf375b1b47eba363a30fa3c697a3a35c9a", + "bytes": 21564, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/REVIEW.txt", + "sha256": "e4eaa33d9143d78e0230b2fd4ce4afd0610a4b290a052f6c1ab0793974437f39", + "bytes": 5447, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py", + "sha256": "70deac8ee0febef6c7d1b55d3a756bb9bb7dace7b4ce6a1728c226c77b62a639", + "bytes": 3871, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "package": "historical/work/doubling-architecture/rank-independent/live-capture/ENDPOINT-RESULT.json", + "sha256": "3ff5c5f1f58d1b658d493083ec69e5225f33d0fe4d39be8285ffa937f004bc8e", + "bytes": 2185, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "package": "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz", + "sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "bytes": 83586, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "package": "historical/work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz", + "sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "bytes": 465792, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt", + "sha256": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2", + "bytes": 9402, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/NOTICE.md", + "sha256": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389", + "bytes": 2447, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "package": "historical/work/next-track/complex/pipeline/full-source/research/split-centres-global/SOURCES.json", + "sha256": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be", + "bytes": 8835, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/combined-pr/publication/research/e8-combined/NOTICE", + "package": "historical/work/combined-pr/publication/research/e8-combined/NOTICE", + "sha256": "7b41fa130dcd11e5972eed84e12f3499d80ea00e17d460f450fa8ddf39cc4951", + "bytes": 5054, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + }, + { + "original": "work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "package": "historical/work/combined-pr/publication/research/e8-combined/vendor/complex/SOURCES.json", + "sha256": "72e38ad6a030b7bb29eac71cda1eafeb96e9202630a9e96f3fbf5cac31742b49", + "bytes": 8867, + "original_equal": true, + "manifest_hash_equal": true, + "manifest_size_equal": true + } + ], + "worker_validation_hashes_match": true, + "worker_and_reviewer_full_receipts_equal": true, + "reviewer_receipt_sha256": "b52c403f5dc4b5d8e5cb40d94dbc3a223a113c441e6c35ff81c832ff12ea92e2", + "worker_validation_sha256": "d41054458c21fb1d8649cdda0066c84249ebc22cc0f300ea4951a202e3a431a6" +} diff --git a/research/local-eight-form-capture/review/check_boundary_counts.py b/research/local-eight-form-capture/review/check_boundary_counts.py new file mode 100644 index 0000000000..06dd861dbc --- /dev/null +++ b/research/local-eight-form-capture/review/check_boundary_counts.py @@ -0,0 +1,71 @@ +"""Check the local scalar bill and the selected columns of D.""" +import argparse +from fractions import Fraction as Q +import gzip +import hashlib +import importlib.util +import json +from pathlib import Path + +parser = argparse.ArgumentParser() +parser.add_argument("--package", type=Path, required=True) +parser.add_argument("--output", type=Path, required=True) +args = parser.parse_args() +p = args.package.resolve() +script = p / "historical/work/doubling-architecture/rank-independent/live-capture/check.py" +spec = importlib.util.spec_from_file_location("capture_audit", script) +module = importlib.util.module_from_spec(spec) +spec.loader.exec_module(module) +word_path = p / "historical/work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz" +w = json.loads(gzip.decompress(word_path.read_bytes())) +ops = module.compile_ops(w["precondition"] + w["compensation"] + w["A"] + w["B"] + w["cleanup"]) +prefix = module.compile_ops(w["precondition"] + w["A"]) +n = 240 + w["R"] +centres = [[Q() for _ in range(120)] for _ in range(8)] +helpers = list(range(758, 750, -1)) +for column in range(120): + vector = [0] * n + vector[column] = 1 + module.apply(vector, prefix) + for i, centre in enumerate(w["centers"][:8]): + centres[i][column] = vector[centre] + +selected_d = [] +for helper in helpers: + vector = [0] * n + vector[helper] = 1 + module.apply(vector, ops) + selected_d.append(sum(bool(x) for x in vector[120:240])) +if selected_d != [0] * 8: + raise RuntimeError("Selected D columns are not zero") +supports = [sum(bool(x) for x in row) for row in centres] +if supports != [56] * 8 or not all(x in (-1, 0, 1) for row in centres for x in row): + raise RuntimeError("The centre support changed") +if (w["frames"][0] != [] or set(w["frames"][1]) != {1 << i for i in range(9)} + or set(w["start"][120:240]) != {0}): + raise RuntimeError("The boundary frames changed") + +receipt = { + "status": "PASS_BOUNDARY_COUNTS_AND_SELECTED_HELPER_D_COLUMN_CHECK", + "centre_row_support": supports, + "centre_coefficients": [-1, 0, 1], + "base_scalar_operations": len(ops), + "dirt_correction_operations": 11326, + "dirt_correction_count_source": "Reproduced complete historical receipts", + "preload_operations": sum(supports), + "postload_operations": sum(supports), + "total_scalar_operations": len(ops) + 11326 + 2 * sum(supports), + "all_Y_start_at_zero_frame": True, + "zero_and_full_frame_ids_verified": True, + "selected_helper_D_nonzero_counts": selected_d, + "DP_zero": True, + "clarification": "For these selected helpers D has zero columns. Using their old values does not add a nonzero DPY error. The implemented updated-helper order is valid.", + "scope": "Scalar operation count and order clarification only; no native or recursive cost invoice.", + "method": "Use the retained column interpreter on 120 centre-prefix and eight helper basis columns.", + "source_sha256": { + str(script.relative_to(p)): hashlib.sha256(script.read_bytes()).hexdigest(), + str(word_path.relative_to(p)): hashlib.sha256(word_path.read_bytes()).hexdigest(), + }, +} +args.output.write_text(json.dumps(receipt, indent=2) + "\n") +print(receipt["status"]) diff --git a/research/local-eight-form-capture/review/fresh-run/receipt.json b/research/local-eight-form-capture/review/fresh-run/receipt.json new file mode 100644 index 0000000000..f2a8f3ba7c --- /dev/null +++ b/research/local-eight-form-capture/review/fresh-run/receipt.json @@ -0,0 +1,2633 @@ +{ + "status": "PASS_LOCAL_EIGHT_FORM_CAPTURE", + "checks": [ + { + "status": "PASS_LOCAL_DIRTY_CAPTURE_AND_CURRENT_OWNER_INVENTORY", + "word_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "template_sha256": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "all_columns": 800, + "retained_forms": 8, + "centre_gram_multiplier": 56, + "decoder_factor": "C^t C / 4", + "dirty_correction_terms": 11326, + "local_source_and_target_map": "X unchanged; Y += S X", + "local_helper_map": "Selected h_i += C_i(59 X/4 + Y); all other helpers unchanged", + "owners": [ + { + "family": 600, + "capture_register": 758, + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 601, + "capture_register": 757, + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 602, + "capture_register": 756, + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 603, + "capture_register": 755, + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 604, + "capture_register": 754, + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 605, + "capture_register": 753, + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 606, + "capture_register": 752, + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "family": 607, + "capture_register": 751, + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "The local scalar map and current owner inventory are exact. The paid monomial adapters, endpoint decoder, scalar controller, owner restoration, and global cost are not verified." + }, + { + "status": "PASS_INDEPENDENT_EXACT_CAPTURE_MAP", + "source_sha256": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "method": "800 exact input columns; symbolic composition of boundary maps", + "columns": 800, + "scalar_operations": 19449, + "code_ports": 112, + "dirty_correction_terms": 11326, + "C_row_gram": 56, + "captured_forms": 8, + "boundary_frames": "preload and dirt correction at zero; postload at full", + "scope": "Local label map only; no routed endpoint decoder or global cost claim." + }, + { + "status": "PASS_INDEPENDENT_800_COLUMN_DIRTY_CAPTURE", + "base_columns": 800, + "complete_capture_columns": 800, + "base_scalar_operations": 19449, + "code_ports": 112, + "center_gram": 56, + "dirt_correction_coefficients": 11326, + "retained_forms": 8, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f" + }, + "owners": [ + { + "helper": 758, + "family": 600, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 758, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 643, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 758, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 120, + "route": [ + 1, + 5, + 0 + ] + }, + { + "stage": 6, + "register": 120, + "route": [ + 1, + 6, + 0 + ] + }, + { + "stage": 7, + "register": 359, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 359, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 359, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 757, + "family": 601, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 757, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 642, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 757, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 121, + "route": [ + 1, + 5, + 1 + ] + }, + { + "stage": 6, + "register": 121, + "route": [ + 1, + 6, + 1 + ] + }, + { + "stage": 7, + "register": 358, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 358, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 358, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 756, + "family": 602, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 756, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 641, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 756, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 122, + "route": [ + 1, + 5, + 2 + ] + }, + { + "stage": 6, + "register": 122, + "route": [ + 1, + 6, + 2 + ] + }, + { + "stage": 7, + "register": 357, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 357, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 357, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 755, + "family": 603, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 755, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 640, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 755, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 123, + "route": [ + 1, + 5, + 3 + ] + }, + { + "stage": 6, + "register": 123, + "route": [ + 1, + 6, + 3 + ] + }, + { + "stage": 7, + "register": 356, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 356, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 356, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 754, + "family": 604, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 754, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 639, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 754, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 124, + "route": [ + 1, + 5, + 4 + ] + }, + { + "stage": 6, + "register": 124, + "route": [ + 1, + 6, + 4 + ] + }, + { + "stage": 7, + "register": 355, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 355, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 355, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 753, + "family": 605, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 753, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 638, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 753, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 125, + "route": [ + 1, + 5, + 5 + ] + }, + { + "stage": 6, + "register": 125, + "route": [ + 1, + 6, + 5 + ] + }, + { + "stage": 7, + "register": 354, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 354, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 354, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 752, + "family": 606, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 752, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 637, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 752, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 126, + "route": [ + 1, + 5, + 6 + ] + }, + { + "stage": 6, + "register": 126, + "route": [ + 1, + 6, + 6 + ] + }, + { + "stage": 7, + "register": 353, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 353, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 353, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + }, + { + "helper": 751, + "family": 607, + "entry_frame": "I", + "roles": [ + { + "stage": 0, + "register": 751, + "route": [ + 4, + 2, + 0, + 9, + 0, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ] + }, + { + "stage": 2, + "register": 636, + "route": [ + 4, + 2, + 9, + 9, + 0, + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ] + }, + { + "stage": 3, + "register": 751, + "route": [ + 4, + 2, + 18, + 9, + 0, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ] + ] + }, + { + "stage": 5, + "register": 127, + "route": [ + 1, + 5, + 7 + ] + }, + { + "stage": 6, + "register": 127, + "route": [ + 1, + 6, + 7 + ] + }, + { + "stage": 7, + "register": 352, + "route": [ + 4, + 10, + 0, + 9, + 0, + [ + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ] + }, + { + "stage": 8, + "register": 352, + "route": [ + 4, + 10, + 9, + 9, + 0, + [ + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74 + ] + ] + }, + { + "stage": 10, + "register": 352, + "route": [ + 4, + 10, + 18, + 9, + 0, + [ + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83 + ] + ] + } + ] + } + ], + "scope": "Exact local label map and initial owner-frame inventory only. No modified global controller, endpoint uncompute, finite invoice, or new exponent is certified." + }, + { + "status": "PASS_ENDPOINT_COVARIANCE_AND_TENSOR_COUNTEREXAMPLE", + "chart_identity": "D_I P_sigma = T_translation P_sigma D_I", + "charts": [ + { + "family": 600, + "helper": 758, + "q": 7, + "translation": 15, + "strict_commutation": false + }, + { + "family": 601, + "helper": 757, + "q": 11, + "translation": 15, + "strict_commutation": false + }, + { + "family": 602, + "helper": 756, + "q": 19, + "translation": 23, + "strict_commutation": false + }, + { + "family": 603, + "helper": 755, + "q": 35, + "translation": 39, + "strict_commutation": false + }, + { + "family": 604, + "helper": 754, + "q": 67, + "translation": 71, + "strict_commutation": false + }, + { + "family": 605, + "helper": 753, + "q": 131, + "translation": 135, + "strict_commutation": false + }, + { + "family": 606, + "helper": 752, + "q": 259, + "translation": 263, + "strict_commutation": false + }, + { + "family": 607, + "helper": 751, + "q": 13, + "translation": 15, + "strict_commutation": false + } + ], + "source_X_factor_required": "D_p^-1", + "reason": "The initial C_q is a frame interpretation, not an extra paid initial transform.", + "false_tensor_shortcut_witness": { + "Fourier_character": [ + 1, + 1 + ], + "exact_D_inverse_tensor_2": "-1", + "proposed_aI_plus_b_translation_tensor_2": "1" + }, + "source_sha256": { + "work/next-track/complex/pipeline/retimed-4/complex/GLOBAL-TEMPLATE.json.gz": "7654c6c0ad6650a36acd95b3a1035e56c5190d7d693e8e824c7324176cdefd9f", + "work/next-track/complex/pipeline/retimed-4/split-centres/CANONICAL-WORD.json.gz": "1aea314c5f30fc9c957f0078ba0785cc6d047ae8872e75632bf6780ed82fb3be", + "work/next-track/complex/pipeline/full-source/research/split-centres-global/proofs/INHERITED-COMPLEX-GEOMETRY.txt": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2" + }, + "scope": "Seed phase identities and a counterexample to a proposed constant-size all-size shortcut. No endpoint cost or modified global controller is certified." + } + ], + "source_manifest_sha256": "7405268783ebe41df6ef22d44565047800668a1e33478339ae5a08673b168cff" +} diff --git a/research/local-eight-form-capture/review/stderr.log b/research/local-eight-form-capture/review/stderr.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/local-eight-form-capture/review/stdout.log b/research/local-eight-form-capture/review/stdout.log new file mode 100644 index 0000000000..edd02dda19 --- /dev/null +++ b/research/local-eight-form-capture/review/stdout.log @@ -0,0 +1,5 @@ +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/primary.py --base /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run/work/next-track/complex/pipeline --output /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run/primary-result.json +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/local-eight-form-capture/dense_columns.py --base /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run/work/next-track/complex/pipeline +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run/work/doubling-architecture/rank-independent/live-capture/check.py +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/reviews/local-capture/fresh-run/work/doubling-architecture/rank-independent/live-capture/check_endpoint.py +PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326 diff --git a/research/local-eight-form-capture/verify.py b/research/local-eight-form-capture/verify.py new file mode 100644 index 0000000000..e475f1c971 --- /dev/null +++ b/research/local-eight-form-capture/verify.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +"""Repeat the fixed local capture and its independent scalar checks.""" +import argparse +import hashlib +import json +from pathlib import Path +import shutil +import subprocess +import sys +if not __debug__: + raise SystemExit("Run this verifier without -O. Historical sources use assert.") +ROOT = Path(__file__).resolve().parent +parser = argparse.ArgumentParser() +parser.add_argument("--build", type=Path, required=True) +args = parser.parse_args() +build = args.build.resolve() +if build.exists(): + raise SystemExit("The build directory exists.") +for item in json.loads((ROOT / "SOURCE-MANIFEST.json").read_text())["files"]: + if hashlib.sha256((ROOT / item["package"]).read_bytes()).hexdigest() != item["sha256"]: + raise SystemExit("Source hash: " + item["package"]) +shutil.copytree(ROOT / "historical", build) +pipeline = build / "work/next-track/complex/pipeline" +audit = Path("work/doubling-architecture/rank-independent/live-capture") +def run(name, command): + print("Run:", " ".join(map(str, command)), flush=True) + output = build / (name + ".stdout.log") + with output.open("w") as out, (build / (name + ".stderr.log")).open("w") as err: + subprocess.run(list(map(str, command)), stdout=out, stderr=err, check=True) + return output +run("primary", [sys.executable, "-E", "-B", ROOT / "primary.py", "--base", pipeline, + "--output", build / "primary-result.json"]) +dense = run("dense-columns", [sys.executable, "-E", "-B", ROOT / "dense_columns.py", "--base", pipeline]) +run("independent", [sys.executable, "-E", "-B", build / audit / "check.py"]) +run("endpoint-limits", [sys.executable, "-E", "-B", build / audit / "check_endpoint.py"]) +checks = [(build / "primary-result.json", "work/complex-next/structural/hosted-capture-receipt.json"), + (dense, "work/complex-next/structural/hamming-factor/capture-independent-receipt.json"), + (build / audit / "RESULT.json", str(audit / "RESULT.json")), + (build / audit / "ENDPOINT-RESULT.json", str(audit / "ENDPOINT-RESULT.json"))] +results = [] +for actual, expected in checks: + value = json.loads(actual.read_text()) + if value != json.loads((ROOT / "historical" / expected).read_text()): + raise SystemExit("Historical result differs: " + expected) + results.append(value) +result = {"status": "PASS_LOCAL_EIGHT_FORM_CAPTURE", "checks": results, + "source_manifest_sha256": hashlib.sha256((ROOT / "SOURCE-MANIFEST.json").read_bytes()).hexdigest()} +(build / "receipt.json").write_text(json.dumps(result, indent=2) + "\n") +print("PASS_LOCAL_EIGHT_FORM_CAPTURE 800 8 11326") diff --git a/research/prepared-growing-carrier/README.md b/research/prepared-growing-carrier/README.md new file mode 100644 index 0000000000..3109ae0958 --- /dev/null +++ b/research/prepared-growing-carrier/README.md @@ -0,0 +1,96 @@ +# A decoder with three prepared carriers and growing read frames + +This package gives one exact finite complex decoder on 11 streams of +64 values. Three carrier inputs start in prescribed line frames. Eight +target inputs start in the zero frame, which is the identity operator; +their values are arbitrary. In scalar coordinates the endpoint is +`X_i -> X_i` and `Y_t -> Y_t + sum_i bit_i(t) X_i`. +The word has 12 scalar ADDs, 27 paid children, rank mass 55, and no COPY. +This is a local construction. It gives no complete supplier or kappa gain. + +Read the [independent proof](historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md) +and [literal word](historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json). +The three source ports are `e_0,e_2,e_4`; target `t` has port +`sum_i e_(2*i+bit_i(t))`. The canonical frame operator is `T_F`. +For physical input streams `h`, the carrier output is +`T_FULL T_(e_(2*i))^-1 h_i`. The target output is +`T_(q(t)^perp) (h_(3+t) + sum_i bit_i(t) T_(e_(2*i))^-1 h_i)`. +The carriers preserve their scalar values; their physical frames change. + +The [saved exit extension](historical/work/p518-next/complex/paired-five/add_growing_exits.py) +adds eight exact monomial adapters. Each target then ends in `F C_q^-1` +in place of its canonical hyperplane operator. These adapters add no +positive child rank. Their scalar and monomial operations still need a +payment in a complete supplier. The historical independent proof states +that these exits are absent from its base word; the separate saved exit +word and replay make that distinction explicit. + +The mechanism permits a carrier to grow after an earlier target is served. +A final read frame need not fit every earlier target. This supplies a +concrete counterexample to extending the saved +[fixed-frame delivery argument](historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md) +to arbitrary growing read frames. It is not a lower bound on all decoders. +The source factory, initial frame preparation, routing, precision, storage, +owner controller and complete invoice remain outside this result. + +## Replay + +From this package directory, with Python 3.10 or later: + +```sh +python3 -B verify.py --build /tmp/prepared-growing-carrier-replay +``` + +The build path must not exist. Only the standard library is required. +The runner verifies all source hashes, copies the historical files into +the new build path, reconstructs both words, and compares their exact +bytes and receipts. It then runs the independent Gaussian-integer checker. +Python child processes ignore Python environment options; the wrappers +reject optimized Python because the saved sources use assertions. +The final line must be: + +```text +PASS_PREPARED_GROWING_CARRIER 704 55 8 +``` + +The independent check covers all 11 scalar input columns, all 1,472 +recipe basis columns, and all 704 whole-word basis columns and inverse +round trips. It checks exact global phase, common labels at each ADD, +compatibility of every pending target, the rank profile, and a phase +mutation. The exit generator checks all 512 target-adapter columns. +Complex linearity then gives the displayed endpoint for every input. +The independent checker shares the canonical frame definitions with the +producer. It imports neither the builder nor its lowering procedure. + +`SOURCE-MANIFEST.json` records the unchanged historical inputs. +`replay.py` is a portable copy of the original independent checker: +it replaces the old absolute input path and result path with explicit +arguments and adds an optimized-Python guard. The original is retained. +The only expected receipt difference is the checker's own source hash. +`replayed-receipt.json` and `replay.log` record the fresh cleanup replay. + +## Sources and related work + +The consumed exact Clifford definitions came through the historical +[PR #518](https://github.com/CrocSwap/integer-mult-bounds/pull/518) +source copy. Their bytes are also present in @icekylinx's +[PR #531](https://github.com/CrocSwap/integer-mult-bounds/pull/531), at +[this pinned source](https://github.com/CrocSwap/integer-mult-bounds/blob/e07a8a3f9f79c22113398a0c5dbbc7601f489b3e/research/direct-delivery504-global/vendor/clifford/clifford_exact.py). +The [notice](public-source/NOTICE.md) and [source ledger](public-source/SOURCES.json) +retain its predecessor credit. The local word, checks and packaging were +prepared with substantial OpenAI Codex and research-agent assistance under +the user's direction. No independent human review is claimed. + +The later [shared-carrier decoder](https://github.com/CrocSwap/integer-mult-bounds/blob/cef4b52f2a59009865bf8eabde1be3f159063703/research/shared-carrier-decoder/README.md) +is a different P111 module with 452 dirty helpers and a nonzero COPY +endpoint. The paired-hypercube parity results concern the scalar source +factory, not this prepared three-carrier interface. No cost gain from +those different models is added to this result. + +## Open next questions + +Can a complete source factory supply these three carriers at the stated +initial frames and give a favorable cost after all other work is paid? +The first step is to compose an existing literal source factory with this +11-stream endpoint and check every dirty input column. No such composition +or cost certificate is included here. diff --git a/research/prepared-growing-carrier/SOURCE-MANIFEST.json b/research/prepared-growing-carrier/SOURCE-MANIFEST.json new file mode 100644 index 0000000000..0a2f51c7ef --- /dev/null +++ b/research/prepared-growing-carrier/SOURCE-MANIFEST.json @@ -0,0 +1,113 @@ +{ + "main_pin": "cef4b52f2a59009865bf8eabde1be3f159063703", + "files": [ + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/PROOF.md", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md", + "sha256": "90f799133f1018e9ad6dbc8c232b1cc081170fc67c72fcd3ab1048dacc3093a8", + "bytes": 8107 + }, + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/check.py", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/check.py", + "sha256": "5bbb842f74b0dff8ecbe7756a0a83937d89c853dcf7813a406b51a782949b165", + "bytes": 12646 + }, + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json", + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "bytes": 7971 + }, + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json", + "sha256": "e5bc79fb24e4c4b9c4821db8130a97ee707d5148c58252147658306a0f177ed8", + "bytes": 1047 + }, + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json", + "sha256": "f780153c2dbf4d269eca1847117fc849c002f6138dde8f43de354551e800aa08", + "bytes": 1003 + }, + { + "original": "work/autonomous-kappa-run/growing-cycle-independent/RESULT.json", + "package": "historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json", + "sha256": "8f731e0d989273c00cd11fcb84e0da9bc8ef78412ce099656bd47b9b74008456", + "bytes": 3896 + }, + { + "original": "work/p518-next/complex/paired-five/growing_cycle.py", + "package": "historical/work/p518-next/complex/paired-five/growing_cycle.py", + "sha256": "fef1dc7c979b39235b6ef41396835f8778548e702b4e085aec10e3d5cdcafe58", + "bytes": 3754 + }, + { + "original": "work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json", + "package": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json", + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "bytes": 7971 + }, + { + "original": "work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json", + "package": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json", + "sha256": "9800893733d820aaae969716d106c2aefcaee3a36d5a4b42d614a244af4dc6f7", + "bytes": 764 + }, + { + "original": "work/p518-next/complex/paired-five/add_growing_exits.py", + "package": "historical/work/p518-next/complex/paired-five/add_growing_exits.py", + "sha256": "67893edbbdfd380ccd9270954f9e76ae023c27787cad92bb0e5c6eaaafe997c6", + "bytes": 2012 + }, + { + "original": "work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json", + "package": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json", + "sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "bytes": 10426 + }, + { + "original": "work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json", + "package": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json", + "sha256": "039950b8d9318c8bb4f61b31923e7843d241d0465a0a8705ba75003faed79854", + "bytes": 455 + }, + { + "original": "work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md", + "package": "historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md", + "sha256": "a75a50aeae792a1b67c9b3b1cb5c95bfd6a3cf56cf1c3dfed304a7088118887e", + "bytes": 6162 + }, + { + "original": "work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py", + "package": "historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "bytes": 6824 + }, + { + "original": "work/p518-next/source/research/nodal-pair-async/NOTICE.md", + "package": "historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md", + "sha256": "ec590608ddae58b227fe28040c29cd026699e2e5c26faad63da71a79dc50e159", + "bytes": 1818 + }, + { + "original": "work/p518-next/source/research/nodal-pair-async/SOURCES.json", + "package": "historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json", + "sha256": "e82688d40483797d7fb5599cde3502018f9bf56acf66a803a7c6a497e885d7db", + "bytes": 3286 + }, + { + "original": "work/autonomous-kappa-run/baseline535/source531/research/direct-delivery504-global/NOTICE.md", + "package": "public-source/NOTICE.md", + "sha256": "a92f49c5ced455160fbedcc8954e3c9255e3605e88ad12ae5a84f1c4302986f1", + "bytes": 1451 + }, + { + "original": "work/autonomous-kappa-run/baseline535/source531/research/direct-delivery504-global/SOURCES.json", + "package": "public-source/SOURCES.json", + "sha256": "9e8182e6e659f4671fe0873e324b622cc871df7344157093df40476c8687be5f", + "bytes": 2592 + } + ] +} diff --git a/research/prepared-growing-carrier/VALIDATION.json b/research/prepared-growing-carrier/VALIDATION.json new file mode 100644 index 0000000000..4be3396b47 --- /dev/null +++ b/research/prepared-growing-carrier/VALIDATION.json @@ -0,0 +1,18 @@ +{ + "cwd": "/Users/aliromman/Projects/IntegerMultiplicationBounds", + "command": [ + "python3", + "-E", + "-B", + "work/project-final-cleanup-20261022/early-projects-audit/packages/prepared-growing-carrier/verify.py", + "--build", + "/tmp/prepared-growing-carrier-cleanup-20261023" + ], + "exit_code": 0, + "fresh_output_required": true, + "log": "replay.log", + "log_sha256": "bcbfb1e05a91fcf673568e6f7f06d7e837f0634e01daeccdfe59bb9c49382c56", + "receipt": "replayed-receipt.json", + "receipt_sha256": "150c3b181f82936bc55c6aa51fa7d704be3c0d08903bbde2d7b7d85a99d373f4", + "note": "Literal output is retained. Original source files are unchanged. No new discovery search ran." +} diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json new file mode 100644 index 0000000000..32d8ffb045 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json @@ -0,0 +1 @@ +{"events":[["child",4,[],[1],1],["add",4,0,1,1,[1]],["child",6,[],[1],1],["add",6,0,1,1,[1]],["child",5,[],[4],1],["add",5,1,1,1,[4]],["child",9,[],[4],1],["add",9,1,1,1,[4]],["child",7,[],[16],1],["add",7,2,1,1,[16]],["child",8,[],[16],1],["add",8,2,1,1,[16]],["child",0,[1],[16,1],1],["child",8,[16],[16,1],1],["add",8,0,1,1,[16,1]],["child",10,[],[16,1],2],["add",10,0,1,1,[16,1]],["child",1,[4],[4,1],1],["child",6,[1],[4,1],1],["add",6,1,1,1,[4,1]],["child",1,[4,1],[16,4,1],1],["child",10,[16,1],[16,4,1],1],["add",10,1,1,1,[16,4,1]],["child",2,[16],[16,4],1],["child",9,[4],[16,4],1],["add",9,2,1,1,[16,4]],["child",2,[16,4],[16,4,1],1],["add",10,2,1,1,[16,4,1]],["child",0,[16,1],[32,16,8,4,2,1],4],["child",1,[16,4,1],[32,16,8,4,2,1],3],["child",2,[16,4,1],[32,16,8,4,2,1],3],["child",3,[],[32,17,8,5,2],5],["child",4,[1],[32,18,8,6,1],4],["child",5,[4],[32,17,9,4,2],4],["child",6,[4,1],[32,18,10,4,1],3],["child",7,[16],[33,16,8,5,2],4],["child",8,[16,1],[34,16,8,6,1],3],["child",9,[16,4],[33,16,9,4,2],3],["child",10,[16,4,1],[34,16,10,4,1],2]],"final_frames":[[32,16,8,4,2,1],[32,16,8,4,2,1],[32,16,8,4,2,1],[32,17,8,5,2],[32,18,8,6,1],[32,17,9,4,2],[32,18,10,4,1],[33,16,8,5,2],[34,16,8,6,1],[33,16,9,4,2],[34,16,10,4,1]],"h":6,"recipes":[{"new":[1],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[4],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[],"recipe":{"left":{"linear_Z4":[2,2,0,0,0,0],"matrix_rows":[1,4,8,16,2,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":2,"right":{"linear_Z4":[2,0,0,0,2,0],"matrix_rows":[1,16,2,4,8,32],"offset":3,"phase":2,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,8,5,2],"old":[],"recipe":{"left":{"linear_Z4":[3,2,3,2,2,0],"matrix_rows":[36,2,5,8,1,16],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":5,"right":{"linear_Z4":[1,2,3,2,0,2],"matrix_rows":[20,2,17,8,32,21],"offset":26,"phase":3,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[4,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,8,6,1],"old":[1],"recipe":{"left":{"linear_Z4":[3,3,2,2,0,0],"matrix_rows":[16,34,3,4,1,8],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,1,3,2,0,2],"matrix_rows":[20,18,8,32,1,22],"offset":12,"phase":2,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[4,1],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,9,4,2],"old":[4],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,32,5,1,8],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,0,3,0,2],"matrix_rows":[24,2,17,32,25,4],"offset":10,"phase":2,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[16,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,10,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,32,3,1,4],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,0,3,0,2],"matrix_rows":[24,18,32,1,26,4],"offset":4,"phase":1,"quadratic_rows":[0,10,0,10,0,0]}}},{"new":[16,1],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,8,5,2],"old":[16],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,5,8,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,3,2,0,0],"matrix_rows":[36,2,33,8,37,16],"offset":10,"phase":2,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[16,4,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,2,2,2,0,0],"matrix_rows":[16,1,2,4,32,8],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,2,2,2,0,2],"matrix_rows":[2,4,8,32,1,16],"offset":15,"phase":0,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,8,6,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,3,4,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,3,2,0,0],"matrix_rows":[36,34,8,1,38,16],"offset":4,"phase":1,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[16,4,1],"old":[16,4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,9,4,2],"old":[16,4],"recipe":{"left":{"linear_Z4":[3,2,3,0,0,0],"matrix_rows":[12,2,16,5,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":3,"right":{"linear_Z4":[1,2,0,3,0,0],"matrix_rows":[40,2,33,41,4,16],"offset":2,"phase":1,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[2,2,2,0,0,0],"matrix_rows":[8,1,16,2,32,4],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,2,0,2,0,2],"matrix_rows":[2,8,32,1,4,16],"offset":7,"phase":3,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,10,4,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[3,3,0,0,0,0],"matrix_rows":[4,10,16,3,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":2,"right":{"linear_Z4":[0,1,0,3,0,0],"matrix_rows":[40,34,1,42,4,16],"offset":0,"phase":0,"quadratic_rows":[0,10,0,10,0,0]}}}],"schedule":[[0,1],[0,3],[1,2],[1,6],[2,4],[2,5],[0,5],[0,7],[1,3],[1,7],[2,6],[2,7]],"source_ports":[1,4,16],"target_ports":[21,22,25,26,37,38,41,42]} \ No newline at end of file diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md new file mode 100644 index 0000000000..b9e4f7b8df --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md @@ -0,0 +1,174 @@ +# Independent growing-carrier decoder audit + +The frozen word is correct as a finite canonical-frame decoder. It +uses three persistent carriers, eight targets, twelve scalar reads, +and no copies. Its rank mass is 55. It is not a complete source +factory, controller, supplier, or integer multiplication witness. + +The input word hash is +15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5. +The source is the p518 paired-five experiment. The frame definitions +come from the pinned exact Clifford source with SHA-256 +2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962. +The checker does not import the builder or call lower_child. + +## Exact scope and output + +The ADDRESS space has six binary coordinates. The carrier ports are +e0, e2, and e4, encoded as 1, 4, and 16. Target t has port + + q(t) = sum_i e_(2i + bit_i(t)), 0 <= t < 8. + +The three carrier labels start at their port lines. Each target starts +at frame zero. All full labels have the canonical tag T. For a frame F, +its operator is the saved canonical_frame(6,F), denoted T_F. + +Each ADD has both operands at exactly the same full tag and frame. +Each child starts at its stated source label and implements +T_new T_old^-1. Thus the complete word has the common-frame invariant +h_r = T_label(r) x_r. Its scalar replay is + + X_i(final) = X_i(initial) + Y_t(final) = Y_t(initial) + sum_i bit_i(t) X_i(initial). + +This holds for arbitrary values in all eleven input streams. It does +not assume zero carriers or zero targets. The physical output is + + h_i(final) = T_FULL T_(ei)^-1 h_i(initial) + h_(3+t)(final) = T_(q(t)-perp) + (h_(3+t)(initial) + sum_i bit_i(t) T_(ei)^-1 h_i(initial)). + +The phrase "carrier values stay unchanged" refers to the scalar +coordinates X_i. Their physical frames change during the word. + +## Independent finite checks + +The checker rebuilds the scalar rows and full label run from the +literal events. It checks every pending target before each carrier +growth, every target hyperplane condition, and all final labels. + +It parses the serialized affine Gaussian monomials in each recipe. +Their binary matrices are invertible, their quadratic matrices are +symmetric, their phase fields are valid, and their diagonal parity +conditions hold. The executed order is right, rank-r Fourier child, +then left. Thus the recipe matrix is L F_r R. + +An integer Gaussian interpreter is separate from the producer's +interpreter. It compares each of the 23 recipes on all 64 basis +columns, including global phase: 1472 exact column checks. It then +replays the complete physical word on all 11 * 64 = 704 basis columns +and checks the displayed output formula. Its literal inverse restores +every one of those columns. A phase-plus-one mutant is rejected. + +These recipes and events are complex-linear. Equality on these basis +columns therefore gives equality on every complex input vector. The +canonical frame definitions are shared with the producer; the builder, +lowering procedure, and numerical state interpreter are not. + +## Cost and monotonicity + +There are 39 literal events: 12 ADDs and 27 paid child calls. There are +23 distinct child recipes. Those two child counts must not be confused. +The paid profile is + + rank 1: 15 + rank 2: 2 + rank 3: 5 + rank 4: 4 + rank 5: 1. + +Its mass is 15 + 4 + 15 + 16 + 5 = 55. Every frame move is a strict +nested ascent. There is no nonmonotone transport charge in this word. +The cost telescopes correctly for each register. Each carrier goes +from rank one to rank six and pays five. Each target goes from rank +zero to rank five and pays five. This also gives 3 * 5 + 8 * 5 = 55. + +This count starts with the stated three carrier lines already present. +It does not pay for producing those scalar carriers, reaching their +initial labels, scalar and monomial primitives, routing, precision, +storage, owner charts, or exceptional work. A complete construction +must pay those costs. + +## Why the fixed-cap terminal argument does not apply + +Carrier 0 reads target 3, whose port is 26, at frame span{1}. It later +grows to span{1,16} before its remaining reads. But 16 dot 26 is one, +so that later frame is not contained in target 3's endpoint hyperplane. +The earlier target is no longer pending. No future compatibility rule +is violated. + +Therefore a single final read cap cannot describe all reads of this +carrier. The fixed-cap terminal proof charges one terminal by the +capacity of one fixed cap. It cannot use that charge when one role +reads at several growing caps. + +The three-selector analogue of the old per-read charge is 2^d/8 at a +read cap of normal rank d. The actual summed carrier charges here are +3/2, 2, and 2. They are greater than the old one-unit budget for a +fixed terminal. This is a direct illustration of the changed premise, +not a new lower bound for all decoders. + +The word also uses caps smaller than the maximal common cap of its +served group. A four-target selector halfspace has maximal common cap +dimension three in this six-coordinate cube, while its initial reads +use a rank-one cap. Thus the later weaker argument about growing +maximal caps and cross-cube exclusion does not automatically cover +this word. No claim about all 141 channels follows from this example. + +## Endpoint adapters needed for a complete word + +For the three unit carrier ports, T_(ei) equals C_ei exactly. For all +eight target ports, however, + + T_(q-perp) != F C_q^-1. + +The signed tableaux differ, and the exact basis-column values also +differ. The raw canonical-frame word must not be called the legacy +data endpoint formula. The correction + + E_q = (F C_q^-1) T_(q-perp)^-1 + +has B-rank zero for each of the eight targets. It is a monomial +operator. An exit can therefore preserve the child-rank mass, but +its actual monomial operations must be emitted and charged. + +Use a distinct full post label with operator F C_q^-1. Emit the exit +as a relabel from the canonical q-perp label to that post label. +Check its complete serialized monomial, including phase. No later ADD +may use that target under its old canonical tag. These exits are not +in the frozen 39-event word. + +## Conditions for both parities and all H channels + +1. Produce the actual scalar channel rows. Check every main input + column, including arbitrary dirty helper columns. If a helper is + zero on entry, state and pay for that condition. The local decoder + accepts prepared carrier values; it does not produce them. +2. Give every carrier its actual starting frame and operator. A + schedule over abstract selector normals is not by itself an + ADDRESS embedding. Check even-weight normals and both parities in + the actual frame geometry and canonical operator family. +3. Use the actual target frames at the decoder cut. They need not be + zero in the full word. Every ADD must have a common full label. +4. Before each carrier growth, check compatibility with every still + pending target in the full schedule. Include targets in other + cubes. Removing served targets permits growth; it does not permit + incompatible future reads. +5. State each required signed channel coefficient. Check that each + delivery occurs exactly once with that coefficient. Both parity + halves must give the required complete scalar matrix. +6. Compile every actual transition, including its global phase, and + count every emitted call and primitive. Use endpoint telescoping + only on nested monotone paths. Charge general frame transport by + its actual recipe. +7. Emit the data and helper endpoint adapters with explicit tags. + Check the complete endpoint, restoration or retained helper block, + and all cross blocks. Do not infer a permitted helper clear from + the local decoder. +8. Build the full controller and owner schedule. Count persistent + carriers, changing invocation lifetimes, residual widths, + spectators, bank calls, and initialization. Only the resulting + paid full profile can be compared with the live frontier. + +The three-carrier mechanism survives independent exact replay. The +extension obligations above remain separate from this finite result. diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json new file mode 100644 index 0000000000..56e1586037 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json @@ -0,0 +1,206 @@ +{ + "status": "PASS_INDEPENDENT_GROWING_CAP_WORD", + "word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "clifford_source_sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "builder_imported": false, + "lower_child_called": false, + "canonical_frame_definitions_shared": true, + "separate_integer_gaussian_interpreter": true, + "scalar_input_columns": 11, + "recipe_basis_columns": 1472, + "whole_physical_basis_columns": 704, + "inverse_round_trip_columns": 704, + "all_moves_strict_nested_ascents": true, + "full_common_labels_at_adds": true, + "future_targets_compatible_before_each_source_move": true, + "sources_unchanged_in_scalar_replay": true, + "target_rows_exact": true, + "literal_events": 39, + "scalar_add_reads": 12, + "paid_child_calls": 27, + "distinct_recipe_lowerings": 23, + "paid_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "paid_rank_mass": 55, + "paid_rank_by_register": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "copies": 0, + "source_line_bridge_equals_C_e": [ + true, + true, + true + ], + "target_endpoint_bridges": [ + { + "q": 21, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 22, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 25, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 26, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 37, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 38, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 41, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 42, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + } + ], + "target_exit_adapters_in_frozen_word": false, + "fixed_last_cap_counterexamples": [ + { + "source": 0, + "target": 1, + "q": 22, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 0, + "target": 3, + "q": 26, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 1, + "target": 2, + "q": 25, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 6, + "q": 41, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 3, + "q": 26, + "read_cap": [ + 4, + 1 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 4, + "q": 37, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 5, + "q": 38, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 6, + "q": 41, + "read_cap": [ + 16, + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + } + ], + "three_selector_analogue_charges_per_carrier": [ + "3/2", + "2", + "2" + ], + "phase_mutant_rejected": true, + "scope": "One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked.", + "checker_sha256": "5bbb842f74b0dff8ecbe7756a0a83937d89c853dcf7813a406b51a782949b165" +} diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json new file mode 100644 index 0000000000..59391d0d40 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json @@ -0,0 +1,18 @@ +{ + "producer_word": { + "path": "/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json", + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5" + }, + "producer_builder": { + "path": "/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/p518-next/complex/paired-five/growing_cycle.py", + "sha256": "fef1dc7c979b39235b6ef41396835f8778548e702b4e085aec10e3d5cdcafe58" + }, + "fixed_cap_proof": { + "path": "/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md", + "sha256": "a75a50aeae792a1b67c9b3b1cb5c95bfd6a3cf56cf1c3dfed304a7088118887e" + }, + "frame_definitions": { + "path": "/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + } +} diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json new file mode 100644 index 0000000000..9579f30fe5 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json @@ -0,0 +1,20 @@ +{ + "status": "PASS", + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-B", + "check.py" + ], + "cwd": "/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/autonomous-kappa-run/growing-cycle-independent", + "returncode": 0, + "duration_seconds": 1.3994609168730676, + "source_sha256": { + "check.py": "5bbb842f74b0dff8ecbe7756a0a83937d89c853dcf7813a406b51a782949b165", + "PROOF.md": "90f799133f1018e9ad6dbc8c232b1cc081170fc67c72fcd3ab1048dacc3093a8", + "FROZEN-WORD.json": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "SOURCE-PINS.json": "e5bc79fb24e4c4b9c4821db8130a97ee707d5148c58252147658306a0f177ed8" + }, + "result_sha256": "8f731e0d989273c00cd11fcb84e0da9bc8ef78412ce099656bd47b9b74008456", + "log_sha256": "8f731e0d989273c00cd11fcb84e0da9bc8ef78412ce099656bd47b9b74008456", + "scope": "Finite canonical-frame decoder and exact phases. No complete source factory, exit-adapter word, global controller or supplier." +} diff --git a/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/check.py b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/check.py new file mode 100644 index 0000000000..42011a79ef --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/autonomous-kappa-run/growing-cycle-independent/check.py @@ -0,0 +1,304 @@ +"""Check the frozen growing-carrier word with exact Gaussian arithmetic. + +Read the saved recipes. Do not import the builder or call its lowering +procedure. Replay every phase basis column and every full word column. +""" + +from collections import Counter +from fractions import Fraction as Q +import hashlib +import importlib.util +import json +from pathlib import Path +import sys + + +HERE = Path(__file__).resolve().parent +SOURCE = Path('/Users/aliromman/Documents/Codex/2026-10-10/hello-i-want-to-get-some/work/p518-next') +WORD = HERE / 'FROZEN-WORD.json' +CLIFFORD = SOURCE / 'source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py' +EXPECTED_WORD = '15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5' +EXPECTED_CLIFFORD = '2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962' +raw = WORD.read_bytes() +assert hashlib.sha256(raw).hexdigest() == EXPECTED_WORD +assert hashlib.sha256(CLIFFORD.read_bytes()).hexdigest() == EXPECTED_CLIFFORD +w = json.loads(raw) +spec = importlib.util.spec_from_file_location('growing_frame_definitions', CLIFFORD) +cx = importlib.util.module_from_spec(spec) +sys.modules[spec.name] = cx +spec.loader.exec_module(cx) +H, N, COUNT = w['h'], 1 << w['h'], len(w['final_frames']) +assert (H, COUNT) == (6, 11) +assert w['source_ports'] == [1 << (2 * i) for i in range(3)] +assert w['target_ports'] == [sum(1 << (2 * i + ((t >> i) & 1)) for i in range(3)) for t in range(8)] + + +def span(vectors): + points = {0} + for v in vectors: + assert 0 <= v < N + points |= {x ^ v for x in points} + return frozenset(points) + + +def dimension(vectors): + return len(span(vectors)).bit_length() - 1 + + +def invert(rows): + a = [r | (1 << (H + i)) for i, r in enumerate(rows)] + for j in range(H): + i = next(i for i in range(j, H) if (a[i] >> j) & 1) + a[i], a[j] = a[j], a[i] + for i in range(H): + if i != j and (a[i] >> j) & 1: + a[i] ^= a[j] + assert [r & (N - 1) for r in a] == [1 << i for i in range(H)] + return tuple(r >> H for r in a) + + +def monomial(record): + g = tuple(record['matrix_rows']) + q = tuple(record['quadratic_rows']) + alpha = tuple(record['linear_Z4']) + assert len(g) == len(q) == len(alpha) == H + assert dimension(g) == H and 0 <= record['offset'] < N + assert all(((q[i] >> j) & 1) == ((q[j] >> i) & 1) for i in range(H) for j in range(H)) + assert all(alpha[i] % 2 == ((q[i] >> i) & 1) for i in range(H)) + assert 0 <= record['phase'] < 4 + return [('D', q, alpha), ('P', g), ('X', record['offset']), ('phase', record['phase'])] + + +def normalize(v, denominator): + if not any(a or b for a, b in v): + return ((0, 0),) * N, 0 + while denominator and all(a % 2 == b % 2 == 0 for a, b in v): + v = tuple((a // 2, b // 2) for a, b in v) + denominator -= 1 + return tuple(v), denominator + + +permutations, phases = {}, {} + + +def apply(circuit, state): + v, denominator = state + if not any(a or b for a, b in v): + return state + for e in circuit: + tag = e[0] + if tag == 'P': + key = tuple(e[1]) + if key not in permutations: + permutations[key] = [sum(((row & x).bit_count() % 2) << i for i, row in enumerate(key)) for x in range(N)] + out = [(0, 0)] * N + for x, y in enumerate(permutations[key]): + out[y] = v[x] + v = out + elif tag == 'X': + v = [v[x ^ e[1]] for x in range(N)] + elif tag in ('D', 'phase'): + if tag == 'phase': + powers = [e[1] % 4] * N + else: + key = tuple(e[1]), tuple(e[2]) + if key not in phases: + phases[key] = [(sum(e[2][i] for i in range(H) if (x >> i) & 1) + + 2 * sum((e[1][i] >> j) & 1 for i in range(H) for j in range(i + 1, H) + if ((x >> i) & 1) and ((x >> j) & 1))) % 4 for x in range(N)] + powers = phases[key] + units = ((1, 0), (0, 1), (-1, 0), (0, -1)) + v = [(a * units[p][0] - b * units[p][1], a * units[p][1] + b * units[p][0]) + for (a, b), p in zip(v, powers)] + elif tag == 'C': + q, sign = e[1:] + out = [] + for x, (a, b) in enumerate(v): + c, d = v[x ^ q] + out.append((a - sign * b + c + sign * d, b + sign * a + d - sign * c)) + v = out + denominator += 1 + else: + raise AssertionError(e) + return normalize(v, denominator) + + +def adjoint(circuit): + out = [] + for e in reversed(circuit): + if e[0] == 'P': + out.append(('P', invert(tuple(e[1])))) + elif e[0] == 'D': + out.append(('D', tuple(e[1]), tuple((-x) % 4 for x in e[2]))) + elif e[0] == 'C': + out.append(('C', e[1], -e[2])) + elif e[0] == 'phase': + out.append(('phase', (-e[1]) % 4)) + else: + assert e[0] == 'X' + out.append(tuple(e)) + return out + + +def plus(a, b, coefficient=Q(1)): + assert coefficient.denominator & (coefficient.denominator - 1) == 0 + extra = coefficient.denominator.bit_length() - 1 + power = max(a[1], b[1] + extra) + aa, bb = 1 << (power - a[1]), coefficient.numerator << (power - b[1] - extra) + return normalize([(aa * x + bb * u, aa * y + bb * z) for (x, y), (u, z) in zip(a[0], b[0])], power) + + +zero = (((0, 0),) * N, 0) +basis = [(tuple((int(j == col), 0) for j in range(N)), 0) for col in range(N)] +initial = [(q,) for q in w['source_ports']] + [()] * 8 +frames = {tuple(f) for f in initial + [tuple(f) for f in w['final_frames']]} +for e in w['events']: + frames |= {tuple(e[2]), tuple(e[3])} if e[0] == 'child' else {tuple(e[-1])} +assert all(dimension(f) == len(f) for f in frames) +canonical = {f: cx.canonical_frame(H, f).circuit for f in frames} +recipes = {} +for item in w['recipes']: + old, new, r = tuple(item['old']), tuple(item['new']), item['recipe'] + assert (old, new) not in recipes + assert span(old) < span(new) + assert r['rank'] == len(new) - len(old) + serialized = monomial(r['right']) + [('C', 1 << i, 1) for i in range(r['rank'])] + monomial(r['left']) + expected = adjoint(canonical[old]) + canonical[new] + for state in basis: + assert apply(serialized, state) == apply(expected, state), ('full recipe column', old, new) + recipes[old, new] = serialized + +labels = [('T', f) for f in initial] +rows = [{r: Q(1)} for r in range(COUNT)] +pending = [{t for t, q in enumerate(w['target_ports']) if not (q & u).bit_count() % 2} for u in w['source_ports']] +paid = Counter() +per_register = [0] * COUNT +read_caps = [[] for _ in w['source_ports']] +seen_reads, used = [], set() +for e in w['events']: + if e[0] == 'child': + _, r, old, new, charged = e + old, new = tuple(old), tuple(new) + assert labels[r] == ('T', old) + assert span(old) < span(new) and charged == len(new) - len(old) + assert (old, new) in recipes + if r < 3: + assert all(not (u & w['target_ports'][t]).bit_count() % 2 for u in new for t in pending[r]) + else: + assert all(not (u & w['target_ports'][r - 3]).bit_count() % 2 for u in new) + labels[r] = ('T', new) + paid[charged] += 1 + per_register[r] += charged + used.add((old, new)) + else: + assert e[0] == 'add' + _, t, s, num, den, f = e + assert 3 <= t < COUNT and 0 <= s < 3 + assert labels[t] == labels[s] == ('T', tuple(f)) + assert t - 3 in pending[s] + pending[s].remove(t - 3) + seen_reads.append([s, t - 3]) + read_caps[s].append((t - 3, tuple(f))) + for col, value in rows[s].items(): + rows[t][col] = rows[t].get(col, Q(0)) + Q(num, den) * value +assert not any(pending) and seen_reads == w['schedule'] +assert used == set(recipes) and len(recipes) == 23 +assert [f for _, f in labels] == [tuple(f) for f in w['final_frames']] +for r in range(COUNT): + expected = {r: Q(1)} + if r >= 3: + expected.update({s: Q(1) for s in range(3) if (r - 3) >> s & 1}) + assert rows[r] == expected +for t, q in enumerate(w['target_ports']): + assert span(w['final_frames'][3 + t]) == frozenset(x for x in range(N) if not (x & q).bit_count() % 2) +assert per_register == [5] * 11 +assert sum(r * n for r, n in paid.items()) == 55 + + +def replay(state, inverse=False): + state = list(state) + events = list(reversed(w['events'])) if inverse else w['events'] + for e in events: + if e[0] == 'child': + circuit = recipes[tuple(e[2]), tuple(e[3])] + state[e[1]] = apply(adjoint(circuit) if inverse else circuit, state[e[1]]) + else: + q = Q(e[3], e[4]) * (-1 if inverse else 1) + state[e[1]] = plus(state[e[1]], state[e[2]], q) + return state + + +for r in range(COUNT): + for vector in basis: + start = [zero] * COUNT + start[r] = vector + actual = replay(start) + logical = [apply(adjoint(canonical[initial[s]]), start[s]) for s in range(COUNT)] + wanted = [] + for output in range(COUNT): + value = zero + for col, q in rows[output].items(): + value = plus(value, logical[col], q) + wanted.append(apply(canonical[tuple(w['final_frames'][output])], value)) + assert actual == wanted, ('full physical column', r) + assert replay(actual, True) == start, ('inverse physical column', r) + +source_bridges = [] +for q in w['source_ports']: + assert all(apply(canonical[(q,)], v) == apply([('C', q, 1)], v) for v in basis) + source_bridges.append(True) +target_bridges = [] +for t, q in enumerate(w['target_ports']): + cap = tuple(w['final_frames'][3 + t]) + goal = cx.cgate(H, q).adjoint().then(cx.fourier(H)) + endpoint = cx.canonical_frame(H, cap) + correction = endpoint.adjoint().then(goal) + rank = cx.rank([x for x, z, p in correction.tab[H:]]) + equal = all(apply(canonical[cap], v) == apply(goal.circuit, v) for v in basis) + assert not equal and rank == 0 + target_bridges.append({'q': q, 'canonical_equals_legacy_endpoint': equal, 'exit_correction_rank': rank}) + +last_read_cap = [caps[-1][1] for caps in read_caps] +invalid_fixed_caps = [] +for source, caps in enumerate(read_caps): + for t, cap in caps: + if any((u & w['target_ports'][t]).bit_count() % 2 for u in last_read_cap[source]): + invalid_fixed_caps.append({'source': source, 'target': t, 'q': w['target_ports'][t], + 'read_cap': cap, 'last_read_cap': last_read_cap[source]}) +assert invalid_fixed_caps +charges = [sum(Q(1 << len(cap), 8) for t, cap in caps) for caps in read_caps] +assert charges == [Q(3, 2), Q(2), Q(2)] +first = w['recipes'][0] +mutant = list(recipes[tuple(first['old']), tuple(first['new'])]) + [('phase', 1)] +assert apply(mutant, basis[0]) != apply(recipes[tuple(first['old']), tuple(first['new'])], basis[0]) + +result = { + 'status': 'PASS_INDEPENDENT_GROWING_CAP_WORD', + 'word_sha256': EXPECTED_WORD, 'clifford_source_sha256': EXPECTED_CLIFFORD, + 'builder_imported': False, 'lower_child_called': False, + 'canonical_frame_definitions_shared': True, + 'separate_integer_gaussian_interpreter': True, + 'scalar_input_columns': COUNT, + 'recipe_basis_columns': len(recipes) * N, + 'whole_physical_basis_columns': COUNT * N, + 'inverse_round_trip_columns': COUNT * N, + 'all_moves_strict_nested_ascents': True, + 'full_common_labels_at_adds': True, + 'future_targets_compatible_before_each_source_move': True, + 'sources_unchanged_in_scalar_replay': True, + 'target_rows_exact': True, + 'literal_events': len(w['events']), 'scalar_add_reads': len(seen_reads), + 'paid_child_calls': sum(paid.values()), 'distinct_recipe_lowerings': len(recipes), + 'paid_profile': dict(sorted(paid.items())), 'paid_rank_mass': 55, + 'paid_rank_by_register': per_register, 'copies': 0, + 'source_line_bridge_equals_C_e': source_bridges, + 'target_endpoint_bridges': target_bridges, + 'target_exit_adapters_in_frozen_word': False, + 'fixed_last_cap_counterexamples': invalid_fixed_caps, + 'three_selector_analogue_charges_per_carrier': list(map(str, charges)), + 'phase_mutant_rejected': True, + 'scope': 'One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked.', +} +result['checker_sha256'] = hashlib.sha256(Path(__file__).read_bytes()).hexdigest() +(HERE / 'RESULT.json').write_text(json.dumps(result, indent=2) + '\n') +print(json.dumps(result, indent=2)) diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json new file mode 100644 index 0000000000..bfcfeb638c --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json @@ -0,0 +1,11 @@ +{ + "status": "PASS_EXACT_MONOMIAL_EXITS", + "original_word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "word_sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "exits": 8, + "rank_zero_exits": 8, + "address_columns_checked": 512, + "full_global_phase": true, + "extra_paid_rank": 0, + "scope": "The finite decoder has the stated legacy exits. It is not a full factory or parent supplier." +} diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json new file mode 100644 index 0000000000..39decd6633 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json @@ -0,0 +1 @@ +{"endpoint_convention":{"scalar_rows":"The scalar row is stated before the address operator.","sources":"F","targets":"F C_q^-1"},"events":[["child",4,[],[1],1],["add",4,0,1,1,[1]],["child",6,[],[1],1],["add",6,0,1,1,[1]],["child",5,[],[4],1],["add",5,1,1,1,[4]],["child",9,[],[4],1],["add",9,1,1,1,[4]],["child",7,[],[16],1],["add",7,2,1,1,[16]],["child",8,[],[16],1],["add",8,2,1,1,[16]],["child",0,[1],[16,1],1],["child",8,[16],[16,1],1],["add",8,0,1,1,[16,1]],["child",10,[],[16,1],2],["add",10,0,1,1,[16,1]],["child",1,[4],[4,1],1],["child",6,[1],[4,1],1],["add",6,1,1,1,[4,1]],["child",1,[4,1],[16,4,1],1],["child",10,[16,1],[16,4,1],1],["add",10,1,1,1,[16,4,1]],["child",2,[16],[16,4],1],["child",9,[4],[16,4],1],["add",9,2,1,1,[16,4]],["child",2,[16,4],[16,4,1],1],["add",10,2,1,1,[16,4,1]],["child",0,[16,1],[32,16,8,4,2,1],4],["child",1,[16,4,1],[32,16,8,4,2,1],3],["child",2,[16,4,1],[32,16,8,4,2,1],3],["child",3,[],[32,17,8,5,2],5],["child",4,[1],[32,18,8,6,1],4],["child",5,[4],[32,17,9,4,2],4],["child",6,[4,1],[32,18,10,4,1],3],["child",7,[16],[33,16,8,5,2],4],["child",8,[16,1],[34,16,8,6,1],3],["child",9,[16,4],[33,16,9,4,2],3],["child",10,[16,4,1],[34,16,10,4,1],2],["monomial_exit",3,0],["monomial_exit",4,1],["monomial_exit",5,2],["monomial_exit",6,3],["monomial_exit",7,4],["monomial_exit",8,5],["monomial_exit",9,6],["monomial_exit",10,7]],"exit_adapters":[{"port":21,"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,5,8,17,32],"offset":1,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":3,"target_circuit":[["C",21,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":22,"recipe":{"left":{"linear_Z4":[0,2,0,0,0,0],"matrix_rows":[1,2,6,8,18,32],"offset":2,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":4,"target_circuit":[["C",22,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":25,"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,9,17,32],"offset":1,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":5,"target_circuit":[["C",25,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":26,"recipe":{"left":{"linear_Z4":[0,2,0,0,0,0],"matrix_rows":[1,2,4,10,18,32],"offset":2,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":6,"target_circuit":[["C",26,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":37,"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,5,8,16,33],"offset":1,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":7,"target_circuit":[["C",37,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":38,"recipe":{"left":{"linear_Z4":[0,2,0,0,0,0],"matrix_rows":[1,2,6,8,16,34],"offset":2,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":8,"target_circuit":[["C",38,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":41,"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,9,16,33],"offset":1,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":9,"target_circuit":[["C",41,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]},{"port":42,"recipe":{"left":{"linear_Z4":[0,2,0,0,0,0],"matrix_rows":[1,2,4,10,16,34],"offset":2,"phase":3,"quadratic_rows":[0,0,0,0,0,0]},"rank":0,"right":null},"stream":10,"target_circuit":[["C",42,-1],["C",1,1],["C",2,1],["C",4,1],["C",8,1],["C",16,1],["C",32,1]]}],"final_frames":[[32,16,8,4,2,1],[32,16,8,4,2,1],[32,16,8,4,2,1],[32,17,8,5,2],[32,18,8,6,1],[32,17,9,4,2],[32,18,10,4,1],[33,16,8,5,2],[34,16,8,6,1],[33,16,9,4,2],[34,16,10,4,1]],"h":6,"recipes":[{"new":[1],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[4],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[],"recipe":{"left":{"linear_Z4":[2,2,0,0,0,0],"matrix_rows":[1,4,8,16,2,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":2,"right":{"linear_Z4":[2,0,0,0,2,0],"matrix_rows":[1,16,2,4,8,32],"offset":3,"phase":2,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,8,5,2],"old":[],"recipe":{"left":{"linear_Z4":[3,2,3,2,2,0],"matrix_rows":[36,2,5,8,1,16],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":5,"right":{"linear_Z4":[1,2,3,2,0,2],"matrix_rows":[20,2,17,8,32,21],"offset":26,"phase":3,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[4,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,8,6,1],"old":[1],"recipe":{"left":{"linear_Z4":[3,3,2,2,0,0],"matrix_rows":[16,34,3,4,1,8],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,1,3,2,0,2],"matrix_rows":[20,18,8,32,1,22],"offset":12,"phase":2,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[4,1],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,9,4,2],"old":[4],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,32,5,1,8],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,0,3,0,2],"matrix_rows":[24,2,17,32,25,4],"offset":10,"phase":2,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[16,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,10,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,32,3,1,4],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,0,3,0,2],"matrix_rows":[24,18,32,1,26,4],"offset":4,"phase":1,"quadratic_rows":[0,10,0,10,0,0]}}},{"new":[16,1],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,8,5,2],"old":[16],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,5,8,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,3,2,0,0],"matrix_rows":[36,2,33,8,37,16],"offset":10,"phase":2,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[16,4,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,2,2,2,0,0],"matrix_rows":[16,1,2,4,32,8],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,2,2,2,0,2],"matrix_rows":[2,4,8,32,1,16],"offset":15,"phase":0,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,8,6,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,3,4,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,3,2,0,0],"matrix_rows":[36,34,8,1,38,16],"offset":4,"phase":1,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[16,4,1],"old":[16,4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,9,4,2],"old":[16,4],"recipe":{"left":{"linear_Z4":[3,2,3,0,0,0],"matrix_rows":[12,2,16,5,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":3,"right":{"linear_Z4":[1,2,0,3,0,0],"matrix_rows":[40,2,33,41,4,16],"offset":2,"phase":1,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[2,2,2,0,0,0],"matrix_rows":[8,1,16,2,32,4],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,2,0,2,0,2],"matrix_rows":[2,8,32,1,4,16],"offset":7,"phase":3,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,10,4,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[3,3,0,0,0,0],"matrix_rows":[4,10,16,3,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":2,"right":{"linear_Z4":[0,1,0,3,0,0],"matrix_rows":[40,34,1,42,4,16],"offset":0,"phase":0,"quadratic_rows":[0,10,0,10,0,0]}}}],"schedule":[[0,1],[0,3],[1,2],[1,6],[2,4],[2,5],[0,5],[0,7],[1,3],[1,7],[2,6],[2,7]],"source_ports":[1,4,16],"target_ports":[21,22,25,26,37,38,41,42]} \ No newline at end of file diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json new file mode 100644 index 0000000000..d2aa2b3e48 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json @@ -0,0 +1,25 @@ +{ + "status": "PASS_EXACT_GROWING_CAP_DECODER", + "sources": 3, + "targets": 8, + "scalar_columns": 11, + "reads": 12, + "scalar_carriers": 3, + "initial_frames": "Three source lines and eight zero target frames.", + "source_values_unchanged": true, + "all_target_rows_exact": true, + "monotone_source_and_target_frames": true, + "future_target_compatibility_checked_at_every_read": true, + "paid_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "paid_rank_mass": 55, + "full_phase_lowerings": 23, + "global_phase_and_pauli_columns": true, + "word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "scope": "A finite decoder mechanism. It is not an identity controller, parent supplier or kappa bound." +} diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json new file mode 100644 index 0000000000..32d8ffb045 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json @@ -0,0 +1 @@ +{"events":[["child",4,[],[1],1],["add",4,0,1,1,[1]],["child",6,[],[1],1],["add",6,0,1,1,[1]],["child",5,[],[4],1],["add",5,1,1,1,[4]],["child",9,[],[4],1],["add",9,1,1,1,[4]],["child",7,[],[16],1],["add",7,2,1,1,[16]],["child",8,[],[16],1],["add",8,2,1,1,[16]],["child",0,[1],[16,1],1],["child",8,[16],[16,1],1],["add",8,0,1,1,[16,1]],["child",10,[],[16,1],2],["add",10,0,1,1,[16,1]],["child",1,[4],[4,1],1],["child",6,[1],[4,1],1],["add",6,1,1,1,[4,1]],["child",1,[4,1],[16,4,1],1],["child",10,[16,1],[16,4,1],1],["add",10,1,1,1,[16,4,1]],["child",2,[16],[16,4],1],["child",9,[4],[16,4],1],["add",9,2,1,1,[16,4]],["child",2,[16,4],[16,4,1],1],["add",10,2,1,1,[16,4,1]],["child",0,[16,1],[32,16,8,4,2,1],4],["child",1,[16,4,1],[32,16,8,4,2,1],3],["child",2,[16,4,1],[32,16,8,4,2,1],3],["child",3,[],[32,17,8,5,2],5],["child",4,[1],[32,18,8,6,1],4],["child",5,[4],[32,17,9,4,2],4],["child",6,[4,1],[32,18,10,4,1],3],["child",7,[16],[33,16,8,5,2],4],["child",8,[16,1],[34,16,8,6,1],3],["child",9,[16,4],[33,16,9,4,2],3],["child",10,[16,4,1],[34,16,10,4,1],2]],"final_frames":[[32,16,8,4,2,1],[32,16,8,4,2,1],[32,16,8,4,2,1],[32,17,8,5,2],[32,18,8,6,1],[32,17,9,4,2],[32,18,10,4,1],[33,16,8,5,2],[34,16,8,6,1],[33,16,9,4,2],[34,16,10,4,1]],"h":6,"recipes":[{"new":[1],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[4],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16],"old":[],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[],"recipe":{"left":{"linear_Z4":[2,2,0,0,0,0],"matrix_rows":[1,4,8,16,2,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":2,"right":{"linear_Z4":[2,0,0,0,2,0],"matrix_rows":[1,16,2,4,8,32],"offset":3,"phase":2,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,8,5,2],"old":[],"recipe":{"left":{"linear_Z4":[3,2,3,2,2,0],"matrix_rows":[36,2,5,8,1,16],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":5,"right":{"linear_Z4":[1,2,3,2,0,2],"matrix_rows":[20,2,17,8,32,21],"offset":26,"phase":3,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[4,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,1],"old":[1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,8,6,1],"old":[1],"recipe":{"left":{"linear_Z4":[3,3,2,2,0,0],"matrix_rows":[16,34,3,4,1,8],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,1,3,2,0,2],"matrix_rows":[20,18,8,32,1,22],"offset":12,"phase":2,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[4,1],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,17,9,4,2],"old":[4],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,32,5,1,8],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,0,3,0,2],"matrix_rows":[24,2,17,32,25,4],"offset":10,"phase":2,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[16,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,8,16,1,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,0,0,2,0],"matrix_rows":[16,1,2,4,8,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,18,10,4,1],"old":[4,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,32,3,1,4],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,0,3,0,2],"matrix_rows":[24,18,32,1,26,4],"offset":4,"phase":1,"quadratic_rows":[0,10,0,10,0,0]}}},{"new":[16,1],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[16,4],"old":[16],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,8,5,2],"old":[16],"recipe":{"left":{"linear_Z4":[3,2,3,2,0,0],"matrix_rows":[20,2,5,8,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":4,"right":{"linear_Z4":[1,2,3,2,0,0],"matrix_rows":[36,2,33,8,37,16],"offset":10,"phase":2,"quadratic_rows":[5,0,5,0,0,0]}}},{"new":[16,4,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[2,4,1,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[0,0,2,0,0,0],"matrix_rows":[4,1,2,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[2,2,2,2,0,0],"matrix_rows":[16,1,2,4,32,8],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":4,"right":{"linear_Z4":[0,2,2,2,0,2],"matrix_rows":[2,4,8,32,1,16],"offset":15,"phase":0,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,8,6,1],"old":[16,1],"recipe":{"left":{"linear_Z4":[3,3,2,0,0,0],"matrix_rows":[8,18,3,4,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,1,3,2,0,0],"matrix_rows":[36,34,8,1,38,16],"offset":4,"phase":1,"quadratic_rows":[0,6,6,0,0,0]}}},{"new":[16,4,1],"old":[16,4],"recipe":{"left":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":1,"right":{"linear_Z4":[2,0,0,0,0,0],"matrix_rows":[1,2,4,8,16,32],"offset":1,"phase":1,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[33,16,9,4,2],"old":[16,4],"recipe":{"left":{"linear_Z4":[3,2,3,0,0,0],"matrix_rows":[12,2,16,5,32,1],"offset":0,"phase":0,"quadratic_rows":[5,0,5,0,0,0]},"rank":3,"right":{"linear_Z4":[1,2,0,3,0,0],"matrix_rows":[40,2,33,41,4,16],"offset":2,"phase":1,"quadratic_rows":[9,0,0,9,0,0]}}},{"new":[32,16,8,4,2,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[2,2,2,0,0,0],"matrix_rows":[8,1,16,2,32,4],"offset":0,"phase":0,"quadratic_rows":[0,0,0,0,0,0]},"rank":3,"right":{"linear_Z4":[0,2,0,2,0,2],"matrix_rows":[2,8,32,1,4,16],"offset":7,"phase":3,"quadratic_rows":[0,0,0,0,0,0]}}},{"new":[34,16,10,4,1],"old":[16,4,1],"recipe":{"left":{"linear_Z4":[3,3,0,0,0,0],"matrix_rows":[4,10,16,3,32,1],"offset":0,"phase":0,"quadratic_rows":[3,3,0,0,0,0]},"rank":2,"right":{"linear_Z4":[0,1,0,3,0,0],"matrix_rows":[40,34,1,42,4,16],"offset":0,"phase":0,"quadratic_rows":[0,10,0,10,0,0]}}}],"schedule":[[0,1],[0,3],[1,2],[1,6],[2,4],[2,5],[0,5],[0,7],[1,3],[1,7],[2,6],[2,7]],"source_ports":[1,4,16],"target_ports":[21,22,25,26,37,38,41,42]} \ No newline at end of file diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/add_growing_exits.py b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/add_growing_exits.py new file mode 100644 index 0000000000..bd62d957b8 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/add_growing_exits.py @@ -0,0 +1,42 @@ +"""Add exact rank-zero exits to the frozen growing-cap decoder word.""" +from pathlib import Path +import hashlib +import json +import sys + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE.parents[1] / 'source/research/nodal-pair-async/inputs/work/odd-stages')) +import clifford_exact as c + +source = HERE / 'GROWING-CYCLE-WORD.json' +word = json.loads(source.read_bytes()) +h = word['h'] +exits = [] +for t, q in enumerate(word['target_ports']): + stream = len(word['source_ports']) + t + old = c.canonical_frame(h, tuple(word['final_frames'][stream])) + target = c.cgate(h, q).adjoint().then(c.fourier(h)) + adapter = old.adjoint().then(target) + recipe, emitted = c.lower_child(adapter) + assert recipe['rank'] == 0 + assert emitted.tab == adapter.tab + for column in range(1 << h): + assert old.then(emitted).zero_state(column) == target.zero_state(column) + exits.append(dict(stream=stream, port=q, recipe=recipe, + target_circuit=target.circuit)) + word['events'].append(['monomial_exit', stream, len(exits)-1]) +word['exit_adapters'] = exits +word['endpoint_convention'] = dict( + sources='F', targets='F C_q^-1', + scalar_rows='The scalar row is stated before the address operator.') +raw = json.dumps(word, sort_keys=True, separators=(',', ':')).encode() +(HERE / 'GROWING-CYCLE-LEGACY-EXITS-WORD.json').write_bytes(raw) +receipt = dict(status='PASS_EXACT_MONOMIAL_EXITS', + original_word_sha256=hashlib.sha256(source.read_bytes()).hexdigest(), + word_sha256=hashlib.sha256(raw).hexdigest(), + exits=len(exits), rank_zero_exits=len(exits), + address_columns_checked=len(exits) * (1 << h), + full_global_phase=True, extra_paid_rank=0, + scope='The finite decoder has the stated legacy exits. It is not a full factory or parent supplier.') +(HERE / 'GROWING-CYCLE-LEGACY-EXITS-RESULT.json').write_text(json.dumps(receipt, indent=2)+'\n') +print(json.dumps(receipt, indent=2)) diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/growing_cycle.py b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/growing_cycle.py new file mode 100644 index 0000000000..47e6f6bfd0 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/growing_cycle.py @@ -0,0 +1,98 @@ +"""Check an exact three-carrier decoder with repeated monotone read caps.""" +from pathlib import Path +from fractions import Fraction as Q +from collections import Counter +import hashlib, json, sys + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE.parents[1]/'source/research/nodal-pair-async/inputs/work/odd-stages')) +import clifford_exact as c +h = 6 +ports = [sum(1 << (2*i+((t >> i) & 1)) for i in range(3)) for t in range(8)] +sources = [1 << (2*i) for i in range(3)] +FULL = tuple(1 << i for i in range(h-1, -1, -1)) + +def basis(rows): + rows = list(rows) + out = {} + for x in rows: + for j in sorted(out, reverse=True): + if x >> j & 1: + x ^= out[j] + if x: + j = x.bit_length()-1 + for k in out: + if out[k] >> j & 1: + out[k] ^= x + out[j] = x + return tuple(out[j] for j in sorted(out, reverse=True)) + +def inside(a, b): + return basis(a+b) == b + +cur = [(u,) for u in sources]+[()] * 8 +rows = [{i: Q(1)} for i in range(11)] +events, transitions = [], set() +paid = Counter() +schedule = [(0, 1), (0, 3), (1, 2), (1, 6), (2, 4), (2, 5), + (0, 5), (0, 7), (1, 3), (1, 7), (2, 6), (2, 7)] +pending = [{t for t in range(8) if t >> i & 1} for i in range(3)] + +def climb(stream, out): + old = cur[stream] + assert inside(old, out) + r = len(out)-len(old) + if r: + events.append(['child', stream, list(old), list(out), r]) + transitions.add((old, out)) + paid[r] += 1 + cur[stream] = out + +for i, t in schedule: + assert t in pending[i] + out = basis(cur[i]+cur[3+t]) + assert all((u&ports[q]).bit_count() % 2 == 0 for u in out for q in pending[i]) + climb(i, out) + climb(3+t, out) + assert cur[i] == cur[3+t] + events.append(['add', 3+t, i, 1, 1, list(out)]) + for col, q in rows[i].items(): + rows[3+t][col] = rows[3+t].get(col, Q(0))+q + pending[i].remove(t) +assert not any(pending) +for t in range(8): + expected = {3+t: Q(1)} + expected.update({i: Q(1) for i in range(3) if t >> i & 1}) + assert rows[3+t] == expected +for i in range(3): + assert rows[i] == {i: Q(1)} + +for i in range(3): + climb(i, FULL) +for t in range(8): + cap = basis(c.nullspace((ports[t],), h)) + climb(3+t, cap) + +recipes = [] +for old, new in sorted(transitions): + op = c.canonical_frame(h, old).adjoint().then(c.canonical_frame(h, new)) + record, emitted = c.lower_child(op) + assert record['rank'] == len(new)-len(old) + assert emitted.tab == op.tab and emitted.zero_state() == op.zero_state() + recipes.append(dict(old=list(old), new=list(new), recipe=record)) +word = dict(h=h, source_ports=sources, target_ports=ports, schedule=schedule, + events=events, final_frames=[list(F) for F in cur], recipes=recipes) +raw = json.dumps(word, sort_keys=True, separators=(',', ':')).encode() +HERE.joinpath('GROWING-CYCLE-WORD.json').write_bytes(raw) +receipt = dict(status='PASS_EXACT_GROWING_CAP_DECODER', sources=3, targets=8, + scalar_columns=11, reads=12, scalar_carriers=3, + initial_frames='Three source lines and eight zero target frames.', + source_values_unchanged=True, all_target_rows_exact=True, + monotone_source_and_target_frames=True, + future_target_compatibility_checked_at_every_read=True, + paid_profile=dict(sorted(paid.items())), paid_rank_mass=sum(r*n for r, n in paid.items()), + full_phase_lowerings=len(recipes), global_phase_and_pauli_columns=True, + word_sha256=hashlib.sha256(raw).hexdigest(), + scope='A finite decoder mechanism. It is not an identity controller, parent supplier or kappa bound.') +HERE.joinpath('GROWING-CYCLE-RESULT.json').write_text(json.dumps(receipt, indent=2)+'\n') +print(json.dumps(receipt, indent=2)) diff --git a/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md new file mode 100644 index 0000000000..037885da75 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md @@ -0,0 +1,137 @@ +# Fixed-channel terminal-broadcast limit + +This result applies to a specified compiler class. Each scalar channel +has a distinct zero-entry terminal role in a signed DAG. Each terminal +reads at one fixed maximal common cap of its served target group. The +target decoder retains its basis and uses scalar reads in time order. +Parity and channel reads can interleave. This result does not apply to +copied broadcasts, +smaller caps, a changed decoder, channel fusion, or time reuse of a role +for a different scalar channel. + +## Target frames + +Let the five-cube selector be e in F2^5. Write its root as + + q(e) = q(0) + sum_i e_i d_i, + +where d_i is the sum of the two coordinate axes in pair i. The d_i are +independent and even. The vector q(0) is odd. Let c be an affine selector +coset of ker S, where S has rank d. Its root span is + + U_c = span(q(c), D(ker S)), dim U_c = 6-d. + +Its maximal common cap is U_c^perp, of dimension h-6+d. The odd part of +U_c is exactly the root set of that coset. Thus different cosets have +different caps. No root of a different coset lies in U_c. No root of a +different five-cube lies in U_c either: all odd vectors in U_c select +one coordinate from each of this cube's five pairs. + +If a terminal reaches U_c^perp, it cannot serve any target outside c. +Indeed, U_c^perp is contained in q(t)^perp if and only if q(t) lies in +U_c. Later target-frame growth cannot change that condition. This +prevents one terminal from serving two current cosets or two cubes. + +A new parity normal refines each current coset into two cosets. The +source parity frame joins the old cap to exactly the new cap. If the +normal already lies in S, it does not refine the groups. The independent +check uses literal twenty-coordinate roots to check this join for every +subspace, coset, nonzero normal of weight one through four, and served +parity. + +## Exact root count + +For overlap r from one through four, the reduced parity kernel is + + A_r(t,s) = -(r-dist(t,s)-1)(r-dist(t,s)-3)/8. + +Its nonzero Walsh coefficients per parity block have multiplicities +1, 2, 3, 3. Each target coefficient is a nonzero signed character on its +parity half. Thus each target must read m(a) channels for normal a, +with m(a) given by these four multiplicities. This count uses the fixed +channel outputs in the compiler class above. + +For one target, its cap history defines a monotone normal-span history. +After a channel with normal a is read, that span must contain a. Refine +this history to a complete subspace flag. Move each channel read to the +first flag subspace that contains its normal. This can only reduce the +rank of the cap at that read. + +For a fixed flag, process all available channels in each span before +the next extension. The weighted cost of an extension from S to S' is + + 2^rank(S') * sum_{a in S' minus S} m(a). + +A target read at a cap with normal-span rank d has charge 2^d/32. A +terminal at that fixed cap can serve at most 2^(5-d) targets. Thus the +total charge assigned to one terminal is at most one. The flag DP gives +a per-target charge of at least q/32. The 32 targets in each cube require +at least q terminals. This argument permits arbitrary channel read +orders and different span histories for different targets. It does not +assume one global normal span. + +A forward shortest-path computation over the 374 subspaces of F2^5 +gives these exact minimum terminal demands per target cube: + +| Pair count p | Available overlap | Parity roots | Disjoint roots | Total | +|---|---|---:|---:|---:| +| 8 | 2, 3, 4 | 1326 | 0 | 1326 | +| 9 | 1, 2, 3, 4 | 1454 | 0 | 1454 | +| At least 10 | 0, 1, 2, 3, 4 | 1454 | 1 | 1455 | + +The computation allows only actual positive-weight normals as flag +extensions. It also checks that allowing all nonzero normals gives the +same answer. The disjoint channel can run first and needs one terminal. +The receipt contains flags that attain every count. + +## Retained endpoint ceiling + +Assume the retained endpoint format has m=Lh, L=2K+1 with K>=1, V ports, +copied rank C, T replicas, and deficit + + D = T[2KV - LC]. + +Let R be the number of zero-entry terminal roles per replica. Their +rank increments are at most h and sum to h per role. Therefore their +rank-weighted entropy is at least LTRh log L. The root-count result gives + + R >= q*binom(p,5) = qV/32. + +For a supplier exponent b, the moment uses the factor +exp(b log(m/r)). The inequality exp(x)>=1+x gives b*entropy1. Its derivative has the +sign of log L-L+1, which is negative. The positive atanh series gives +log 3>13/12>1. On dropping C and using L>=3, one obtains + + b < 64/(3hq). + +The exact rational ceilings are 2/1989 for p=8, 16/19629 for p=9, +and 16/21825 for every p>=10. For p from five through seven, C>=V, +so the stated deficit is negative for every K. These facts exclude +b=1/99, and therefore kappa=0.01, for this compiler class. They do not +exclude another construction or decoder for the paired-five family. + +The primary script's comment log(1+b)>=b is false. The entropy argument +above uses exp(x)>=1+x instead. The primary numeric screens agree with +the correct necessary condition. + +## If a terminal reads at several growing caps + +The charge bound above requires one read cap per terminal. It does not +apply to a fixed scalar role that reads at several successively larger +caps. Each fixed scalar channel still requires at least one zero-entry +terminal per target cube. The channel counts are 130, 140, and 141 for +p=8, p=9, and p>=10. No terminal can read a different cube after its +first maximal-cap read, by the cross-cube exclusion above. + +Use these smaller counts in the same entropy inequality. For p=8, +retain C/V=1348/1792 and use the bounds log L>1 and +(1-1/L)-C/V<1-C/V. This gives b<111/29120. For p=9 and p>=10, drop C +as before. This gives b<8/945 and b<16/2115. All three bounds are below +1/99. Thus this weaker argument still excludes kappa=0.01 for the +zero-entry fixed-channel class if roles can read at growing maximal +caps. It still does not bound a changed decoder or channel fusion. diff --git a/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md new file mode 100644 index 0000000000..0b032f7a53 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md @@ -0,0 +1,11 @@ +# Scoped attribution + +Prepared with OpenAI Codex assistance. Apache-2.0; see LICENSE. Original authorship notices in included vendor code are retained. + +PR507 directly supplies the partial-own factory, 84-pivot reference and its retiming map. PR484 supplies the gauge/kernel construction and wrappers; PR496 supplies whole-owner pooling and invoice ancestry. PR493 supplies the unchanged cited bit operator. PR495 supplies body-frame retiming, with PR501 and PR502 integrating it. PR473's single-gauge proposal inspired our coordinated four-gauge collapse; its updated schedule was also considered. PR505 contains our prior asynchronous complete-invocation scheduling. PR506 supplies a related public comparison and portability feedback. PR477's experiment log informed bounded route selection. + +Earlier retained ancestry includes PR433/425/370 for geometry and the scalar/phase compiler, PR458 for whole-owner spectator wrappers, PR361/315 for exact moments and outer arithmetic, and PR434/417/435/440/401/408/416 for response-kernel and gauge methods. SOURCES.json separates direct ingredients, ancestry, comparisons and excluded interfaces; credits do not mean their gains were added independently. + +Our contribution here is the actual combined reconstructed 99-pivot word and literal whole-owner allocation, with complete fresh checks of the changed complex program. OpenAI math, the Problem 1.8 implementation and the installed machine compiler sources informed the documented research adaptations. No fresh Lean certification is claimed. + +Additional direct inspiration: OpenAI math sparse interpolation, unit-flow/matching, rational Schur history and exact pruning. The source and adaptation ledgers distinguish these roles. Recent PR509-513 were inspected as context, not counted as additional numerical gains. diff --git a/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json new file mode 100644 index 0000000000..c0742547f5 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json @@ -0,0 +1,119 @@ +{ + "snapshot": "80 recent or updated PR conversations inspected; frozen through PR513 before packaging.", + "direct": [ + { + "pr": 496, + "head": "00cf70efd6a8637531deafef698157ca83e249ee", + "role": "whole-owner parent, invoice and assembly ancestry" + }, + { + "pr": 484, + "head": "035845ce95f31d0a2dcfb42b8c8e13411271fa5f", + "role": "PR496 pinned gauge80-kernel42 parent, not newer moving head" + }, + { + "pr": 493, + "head": "c3a9a436b84fe44fdc223a5784d84736d1c2d3c7", + "role": "unchanged cited R489 bit supplier" + }, + { + "pr": 502, + "head": "4d30b8322184598e65e90a92389e17e1baedd9eb", + "role": "retiming transfer constructor and PR495 schedule fixture" + }, + { + "pr": 501, + "head": "1dc056496fdbbc74073ed26d948a2dc235dbf356", + "role": "parallel retiming integration; credited, no duplicated gain" + }, + { + "pr": 473, + "head": "628b454d3df00367d2d4f78de7d4eb9cbcbd47ca", + "role": "single-helper gauge withdrawal inspiration" + }, + { + "pr": 507, + "head": "8d4444cf8a16d500cbb94add6e4fa8bcfb9c7d5e", + "role": "partial-own factory, 84-pivot reference and retiming map" + }, + { + "pr": 505, + "head": "4ee769c8e28837482272b5f4742497da8e2fc9d4", + "role": "our prior complete-invocation asynchronous scheduling" + }, + { + "pr": 506, + "head": "a4948baee6c7ea35323db74ff636620c6af2925a", + "role": "public asynchronous retiming comparison and portability feedback" + } + ], + "openai_math": { + "repository": "https://github.com/openai/math", + "revision": "adc7f1241b42e322a6451854ab7e4b4c146bf78a", + "status": "source inspection and mathematical adaptation; no new Lean audit" + }, + "other_inspirations": [ + 497, + 458, + 442, + 434, + 433, + 425, + 417, + 435, + 440, + 401, + 408, + 416, + 370, + 361, + 315, + 495, + 503, + 504 + ], + "excluded": { + "494": "under-review split-residual interface not used", + "491": "withdrawn GL sampling argument not used", + "499": "larger claim inherits disputed split-residual interface; not used" + }, + "related_updated": [ + { + "pr": 473, + "head": "94b3c908fb7628142817d995155368aba2eae841", + "role": "new nonuniform scheduling comparison; earlier pinned gauge proposal remains a separate source" + }, + { + "pr": 477, + "head": "2f23f46f1f9e4599168d40096fbacce4973a2978", + "role": "experiment log consulted to avoid repeating old searches" + } + ], + "recent_context": [ + { + "pr": 509, + "head": "7b9c720ecc9f483c383e7cd9c2ab81f06ee5df59", + "role": "abstract Lemma G proof; no new numerical ingredient" + }, + { + "pr": 510, + "head": "64edee18af02aab0c1696b677a0287dd0146381b", + "role": "nonbinding bit improvement; not substituted" + }, + { + "pr": 511, + "head": "79f7c03c7f820ab89955b75ef239cbaccc627e6e", + "role": "formal dispatcher context" + }, + { + "pr": 512, + "head": "73d367fe754cf5921cd954221133b20ac752f932", + "role": "asynchronous partial-own comparison" + }, + { + "pr": 513, + "head": "005dd3f4e3cba8d1761abc4ab391aaf6d14d6f73", + "role": "formal completed-bank context" + } + ] +} diff --git a/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py new file mode 100644 index 0000000000..166841a037 --- /dev/null +++ b/research/prepared-growing-carrier/historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py @@ -0,0 +1,149 @@ +"""Small exact Gaussian-dyadic Clifford compiler, independent of gx internals. +Paulis use i^p X^x Z^z. State vectors use integer Gaussian numerators / 2^d. +The tableau is supplemented by a literal circuit, so global phases are kept. +""" +from dataclasses import dataclass + +def parity(x):return x.bit_count()&1 +def rank(rows): + p={} + for x in rows: + while x: + b=x.bit_length()-1 + if b not in p:p[b]=x;break + x^=p[b] + return len(p) +def transpose(rows,n):return tuple(sum(((rows[j]>>i)&1)<>j&1);a[j],a[k]=a[k],a[j] + for i in range(n): + if i!=j and a[i]>>j&1:a[i]^=a[j] + assert [r&((1<>n for r in a) +def basis_extend(cols,n): + out=[] + for x in list(cols)+[1<len(out):out.append(x) + assert len(out)==n + return tuple(out) +def nullspace(rows,n): + a=list(rows);p=[];k=0 + for j in range(n): + t=next((i for i in range(k,len(a)) if a[i]>>j&1),None) + if t is None:continue + a[t],a[k]=a[k],a[t] + for i in range(len(a)): + if i!=k and a[i]>>j&1:a[i]^=a[k] + p.append(j);k+=1 + return tuple((1<>j)&1)<>i&1:out=pmul(out,T[i]) + for i in range(n): + if z>>i&1:out=pmul(out,T[n+i]) + return out +def compose(A,B):return tuple(apply(A,p) for p in B) +def inverse(T): + n=len(T)//2;cols=[x|(z<>n;u,v,p=apply(T,(x,z,0));assert (u,v)==identity(n)[j][:2];out.append((x,z,(-p)%4)) + return tuple(out) +def qvalue(Q,alpha,x,n): + return (sum(alpha[i] for i in range(n) if x>>i&1)+2*sum(parity((Q[i]>>(i+1))&(x>>(i+1))) for i in range(n) if x>>i&1))%4 +def mul_i(a,p): + x,y=a;p%=4 + return [(x,y),(-y,x),(-x,-y),(y,-x)][p] +@dataclass +class Op: + n:int + tab:tuple + circuit:list + def then(self,b): + assert self.n==b.n + return Op(self.n,compose(b.tab,self.tab),self.circuit+b.circuit) + def adjoint(self): + circ=[] + for e in reversed(self.circuit): + if e[0]=='P':circ.append(('P',inv(e[1],self.n))) + elif e[0]=='D':circ.append(('D',e[1],tuple((-x)%4 for x in e[2]))) + elif e[0]=='C':circ.append(('C',e[1],-e[2])) + elif e[0]=='phase':circ.append(('phase',(-e[1])%4)) + else:circ.append(e) + return Op(self.n,inverse(self.tab),circ) + def zero_state(self,basis=0): + N=1<>i)&1 for i in range(n)) + assert all(alpha[i]%2==(Q[i]>>i)&1 for i in range(n)) + return Op(n,tuple([(1<>i&1 else 0,1<>i&1 else 0) for i in range(n)]),[('C',q,sgn)]) +def xgate(n,b):return Op(n,tuple([(1<>i)&1)) for i in range(n)]),[('X',b)]) +def fourier(n,axes=None): + out=ident(n) + for i in range(n) if axes is None else axes:out=out.then(cgate(n,1<len(selected):picks.append(j);selected.append(x) + assert len(picks)==r and all(x>>r==0 for x in Bcols) + Br=transpose(selected,r);Bi=inv(Br,r);Dr=transpose([Dcols[j]&((1<> i) & 1)) for i in range(3)) for t in range(8)] + + +def span(vectors): + points = {0} + for v in vectors: + assert 0 <= v < N + points |= {x ^ v for x in points} + return frozenset(points) + + +def dimension(vectors): + return len(span(vectors)).bit_length() - 1 + + +def invert(rows): + a = [r | (1 << (H + i)) for i, r in enumerate(rows)] + for j in range(H): + i = next(i for i in range(j, H) if (a[i] >> j) & 1) + a[i], a[j] = a[j], a[i] + for i in range(H): + if i != j and (a[i] >> j) & 1: + a[i] ^= a[j] + assert [r & (N - 1) for r in a] == [1 << i for i in range(H)] + return tuple(r >> H for r in a) + + +def monomial(record): + g = tuple(record['matrix_rows']) + q = tuple(record['quadratic_rows']) + alpha = tuple(record['linear_Z4']) + assert len(g) == len(q) == len(alpha) == H + assert dimension(g) == H and 0 <= record['offset'] < N + assert all(((q[i] >> j) & 1) == ((q[j] >> i) & 1) for i in range(H) for j in range(H)) + assert all(alpha[i] % 2 == ((q[i] >> i) & 1) for i in range(H)) + assert 0 <= record['phase'] < 4 + return [('D', q, alpha), ('P', g), ('X', record['offset']), ('phase', record['phase'])] + + +def normalize(v, denominator): + if not any(a or b for a, b in v): + return ((0, 0),) * N, 0 + while denominator and all(a % 2 == b % 2 == 0 for a, b in v): + v = tuple((a // 2, b // 2) for a, b in v) + denominator -= 1 + return tuple(v), denominator + + +permutations, phases = {}, {} + + +def apply(circuit, state): + v, denominator = state + if not any(a or b for a, b in v): + return state + for e in circuit: + tag = e[0] + if tag == 'P': + key = tuple(e[1]) + if key not in permutations: + permutations[key] = [sum(((row & x).bit_count() % 2) << i for i, row in enumerate(key)) for x in range(N)] + out = [(0, 0)] * N + for x, y in enumerate(permutations[key]): + out[y] = v[x] + v = out + elif tag == 'X': + v = [v[x ^ e[1]] for x in range(N)] + elif tag in ('D', 'phase'): + if tag == 'phase': + powers = [e[1] % 4] * N + else: + key = tuple(e[1]), tuple(e[2]) + if key not in phases: + phases[key] = [(sum(e[2][i] for i in range(H) if (x >> i) & 1) + + 2 * sum((e[1][i] >> j) & 1 for i in range(H) for j in range(i + 1, H) + if ((x >> i) & 1) and ((x >> j) & 1))) % 4 for x in range(N)] + powers = phases[key] + units = ((1, 0), (0, 1), (-1, 0), (0, -1)) + v = [(a * units[p][0] - b * units[p][1], a * units[p][1] + b * units[p][0]) + for (a, b), p in zip(v, powers)] + elif tag == 'C': + q, sign = e[1:] + out = [] + for x, (a, b) in enumerate(v): + c, d = v[x ^ q] + out.append((a - sign * b + c + sign * d, b + sign * a + d - sign * c)) + v = out + denominator += 1 + else: + raise AssertionError(e) + return normalize(v, denominator) + + +def adjoint(circuit): + out = [] + for e in reversed(circuit): + if e[0] == 'P': + out.append(('P', invert(tuple(e[1])))) + elif e[0] == 'D': + out.append(('D', tuple(e[1]), tuple((-x) % 4 for x in e[2]))) + elif e[0] == 'C': + out.append(('C', e[1], -e[2])) + elif e[0] == 'phase': + out.append(('phase', (-e[1]) % 4)) + else: + assert e[0] == 'X' + out.append(tuple(e)) + return out + + +def plus(a, b, coefficient=Q(1)): + assert coefficient.denominator & (coefficient.denominator - 1) == 0 + extra = coefficient.denominator.bit_length() - 1 + power = max(a[1], b[1] + extra) + aa, bb = 1 << (power - a[1]), coefficient.numerator << (power - b[1] - extra) + return normalize([(aa * x + bb * u, aa * y + bb * z) for (x, y), (u, z) in zip(a[0], b[0])], power) + + +zero = (((0, 0),) * N, 0) +basis = [(tuple((int(j == col), 0) for j in range(N)), 0) for col in range(N)] +initial = [(q,) for q in w['source_ports']] + [()] * 8 +frames = {tuple(f) for f in initial + [tuple(f) for f in w['final_frames']]} +for e in w['events']: + frames |= {tuple(e[2]), tuple(e[3])} if e[0] == 'child' else {tuple(e[-1])} +assert all(dimension(f) == len(f) for f in frames) +canonical = {f: cx.canonical_frame(H, f).circuit for f in frames} +recipes = {} +for item in w['recipes']: + old, new, r = tuple(item['old']), tuple(item['new']), item['recipe'] + assert (old, new) not in recipes + assert span(old) < span(new) + assert r['rank'] == len(new) - len(old) + serialized = monomial(r['right']) + [('C', 1 << i, 1) for i in range(r['rank'])] + monomial(r['left']) + expected = adjoint(canonical[old]) + canonical[new] + for state in basis: + assert apply(serialized, state) == apply(expected, state), ('full recipe column', old, new) + recipes[old, new] = serialized + +labels = [('T', f) for f in initial] +rows = [{r: Q(1)} for r in range(COUNT)] +pending = [{t for t, q in enumerate(w['target_ports']) if not (q & u).bit_count() % 2} for u in w['source_ports']] +paid = Counter() +per_register = [0] * COUNT +read_caps = [[] for _ in w['source_ports']] +seen_reads, used = [], set() +for e in w['events']: + if e[0] == 'child': + _, r, old, new, charged = e + old, new = tuple(old), tuple(new) + assert labels[r] == ('T', old) + assert span(old) < span(new) and charged == len(new) - len(old) + assert (old, new) in recipes + if r < 3: + assert all(not (u & w['target_ports'][t]).bit_count() % 2 for u in new for t in pending[r]) + else: + assert all(not (u & w['target_ports'][r - 3]).bit_count() % 2 for u in new) + labels[r] = ('T', new) + paid[charged] += 1 + per_register[r] += charged + used.add((old, new)) + else: + assert e[0] == 'add' + _, t, s, num, den, f = e + assert 3 <= t < COUNT and 0 <= s < 3 + assert labels[t] == labels[s] == ('T', tuple(f)) + assert t - 3 in pending[s] + pending[s].remove(t - 3) + seen_reads.append([s, t - 3]) + read_caps[s].append((t - 3, tuple(f))) + for col, value in rows[s].items(): + rows[t][col] = rows[t].get(col, Q(0)) + Q(num, den) * value +assert not any(pending) and seen_reads == w['schedule'] +assert used == set(recipes) and len(recipes) == 23 +assert [f for _, f in labels] == [tuple(f) for f in w['final_frames']] +for r in range(COUNT): + expected = {r: Q(1)} + if r >= 3: + expected.update({s: Q(1) for s in range(3) if (r - 3) >> s & 1}) + assert rows[r] == expected +for t, q in enumerate(w['target_ports']): + assert span(w['final_frames'][3 + t]) == frozenset(x for x in range(N) if not (x & q).bit_count() % 2) +assert per_register == [5] * 11 +assert sum(r * n for r, n in paid.items()) == 55 + + +def replay(state, inverse=False): + state = list(state) + events = list(reversed(w['events'])) if inverse else w['events'] + for e in events: + if e[0] == 'child': + circuit = recipes[tuple(e[2]), tuple(e[3])] + state[e[1]] = apply(adjoint(circuit) if inverse else circuit, state[e[1]]) + else: + q = Q(e[3], e[4]) * (-1 if inverse else 1) + state[e[1]] = plus(state[e[1]], state[e[2]], q) + return state + + +for r in range(COUNT): + for vector in basis: + start = [zero] * COUNT + start[r] = vector + actual = replay(start) + logical = [apply(adjoint(canonical[initial[s]]), start[s]) for s in range(COUNT)] + wanted = [] + for output in range(COUNT): + value = zero + for col, q in rows[output].items(): + value = plus(value, logical[col], q) + wanted.append(apply(canonical[tuple(w['final_frames'][output])], value)) + assert actual == wanted, ('full physical column', r) + assert replay(actual, True) == start, ('inverse physical column', r) + +source_bridges = [] +for q in w['source_ports']: + assert all(apply(canonical[(q,)], v) == apply([('C', q, 1)], v) for v in basis) + source_bridges.append(True) +target_bridges = [] +for t, q in enumerate(w['target_ports']): + cap = tuple(w['final_frames'][3 + t]) + goal = cx.cgate(H, q).adjoint().then(cx.fourier(H)) + endpoint = cx.canonical_frame(H, cap) + correction = endpoint.adjoint().then(goal) + rank = cx.rank([x for x, z, p in correction.tab[H:]]) + equal = all(apply(canonical[cap], v) == apply(goal.circuit, v) for v in basis) + assert not equal and rank == 0 + target_bridges.append({'q': q, 'canonical_equals_legacy_endpoint': equal, 'exit_correction_rank': rank}) + +last_read_cap = [caps[-1][1] for caps in read_caps] +invalid_fixed_caps = [] +for source, caps in enumerate(read_caps): + for t, cap in caps: + if any((u & w['target_ports'][t]).bit_count() % 2 for u in last_read_cap[source]): + invalid_fixed_caps.append({'source': source, 'target': t, 'q': w['target_ports'][t], + 'read_cap': cap, 'last_read_cap': last_read_cap[source]}) +assert invalid_fixed_caps +charges = [sum(Q(1 << len(cap), 8) for t, cap in caps) for caps in read_caps] +assert charges == [Q(3, 2), Q(2), Q(2)] +first = w['recipes'][0] +mutant = list(recipes[tuple(first['old']), tuple(first['new'])]) + [('phase', 1)] +assert apply(mutant, basis[0]) != apply(recipes[tuple(first['old']), tuple(first['new'])], basis[0]) + +result = { + 'status': 'PASS_INDEPENDENT_GROWING_CAP_WORD', + 'word_sha256': EXPECTED_WORD, 'clifford_source_sha256': EXPECTED_CLIFFORD, + 'builder_imported': False, 'lower_child_called': False, + 'canonical_frame_definitions_shared': True, + 'separate_integer_gaussian_interpreter': True, + 'scalar_input_columns': COUNT, + 'recipe_basis_columns': len(recipes) * N, + 'whole_physical_basis_columns': COUNT * N, + 'inverse_round_trip_columns': COUNT * N, + 'all_moves_strict_nested_ascents': True, + 'full_common_labels_at_adds': True, + 'future_targets_compatible_before_each_source_move': True, + 'sources_unchanged_in_scalar_replay': True, + 'target_rows_exact': True, + 'literal_events': len(w['events']), 'scalar_add_reads': len(seen_reads), + 'paid_child_calls': sum(paid.values()), 'distinct_recipe_lowerings': len(recipes), + 'paid_profile': dict(sorted(paid.items())), 'paid_rank_mass': 55, + 'paid_rank_by_register': per_register, 'copies': 0, + 'source_line_bridge_equals_C_e': source_bridges, + 'target_endpoint_bridges': target_bridges, + 'target_exit_adapters_in_frozen_word': False, + 'fixed_last_cap_counterexamples': invalid_fixed_caps, + 'three_selector_analogue_charges_per_carrier': list(map(str, charges)), + 'phase_mutant_rejected': True, + 'scope': 'One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked.', +} +result['checker_sha256'] = hashlib.sha256(Path(__file__).read_bytes()).hexdigest() +args.output.write_text(json.dumps(result, indent=2) + '\n') +print(json.dumps(result, indent=2)) diff --git a/research/prepared-growing-carrier/replayed-receipt.json b/research/prepared-growing-carrier/replayed-receipt.json new file mode 100644 index 0000000000..043acaaa1c --- /dev/null +++ b/research/prepared-growing-carrier/replayed-receipt.json @@ -0,0 +1,226 @@ +{ + "status": "PASS_PREPARED_GROWING_CARRIER", + "stages": [ + "construct", + "exits", + "independent" + ], + "independent": { + "status": "PASS_INDEPENDENT_GROWING_CAP_WORD", + "word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "clifford_source_sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "builder_imported": false, + "lower_child_called": false, + "canonical_frame_definitions_shared": true, + "separate_integer_gaussian_interpreter": true, + "scalar_input_columns": 11, + "recipe_basis_columns": 1472, + "whole_physical_basis_columns": 704, + "inverse_round_trip_columns": 704, + "all_moves_strict_nested_ascents": true, + "full_common_labels_at_adds": true, + "future_targets_compatible_before_each_source_move": true, + "sources_unchanged_in_scalar_replay": true, + "target_rows_exact": true, + "literal_events": 39, + "scalar_add_reads": 12, + "paid_child_calls": 27, + "distinct_recipe_lowerings": 23, + "paid_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "paid_rank_mass": 55, + "paid_rank_by_register": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "copies": 0, + "source_line_bridge_equals_C_e": [ + true, + true, + true + ], + "target_endpoint_bridges": [ + { + "q": 21, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 22, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 25, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 26, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 37, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 38, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 41, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 42, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + } + ], + "target_exit_adapters_in_frozen_word": false, + "fixed_last_cap_counterexamples": [ + { + "source": 0, + "target": 1, + "q": 22, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 0, + "target": 3, + "q": 26, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 1, + "target": 2, + "q": 25, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 6, + "q": 41, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 3, + "q": 26, + "read_cap": [ + 4, + 1 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 4, + "q": 37, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 5, + "q": 38, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 6, + "q": 41, + "read_cap": [ + 16, + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + } + ], + "three_selector_analogue_charges_per_carrier": [ + "3/2", + "2", + "2" + ], + "phase_mutant_rejected": true, + "scope": "One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked." + }, + "source_manifest_sha256": "5fe4a164c6c2e0a61f049081abe825179a4ee46f6995f2e122609d52a8851855", + "portable_checker_sha256": "3f1c36505bb7283f8e1ab86129272d1db1fbc66cf0c0c5e284dfac09155c2022", + "legacy_exits": { + "status": "PASS_EXACT_MONOMIAL_EXITS", + "original_word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "word_sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "exits": 8, + "rank_zero_exits": 8, + "address_columns_checked": 512, + "full_global_phase": true, + "extra_paid_rank": 0, + "scope": "The finite decoder has the stated legacy exits. It is not a full factory or parent supplier." + } +} diff --git a/research/prepared-growing-carrier/review/CHECKED-FILES.json b/research/prepared-growing-carrier/review/CHECKED-FILES.json new file mode 100644 index 0000000000..156e652f42 --- /dev/null +++ b/research/prepared-growing-carrier/review/CHECKED-FILES.json @@ -0,0 +1,131 @@ +{ + "status": "PASS_INDEPENDENT_AGENT_REVIEW", + "package": "work/project-final-cleanup-20261022/early-projects-audit/packages/prepared-growing-carrier", + "files": [ + { + "path": "README.md", + "bytes": 5318, + "sha256": "205f356a69a46ebb9bc88a5fa362121e79a7033f84d49e304d0efc54abd9ca3a" + }, + { + "path": "SOURCE-MANIFEST.json", + "bytes": 5432, + "sha256": "5fe4a164c6c2e0a61f049081abe825179a4ee46f6995f2e122609d52a8851855" + }, + { + "path": "VALIDATION.json", + "bytes": 691, + "sha256": "560b31bca3e461da8f9660311e59c30c2eafb6c30a783f5a113d5f00c0e0d9c7" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json", + "bytes": 7971, + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md", + "bytes": 8107, + "sha256": "90f799133f1018e9ad6dbc8c232b1cc081170fc67c72fcd3ab1048dacc3093a8" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json", + "bytes": 3896, + "sha256": "8f731e0d989273c00cd11fcb84e0da9bc8ef78412ce099656bd47b9b74008456" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json", + "bytes": 1047, + "sha256": "e5bc79fb24e4c4b9c4821db8130a97ee707d5148c58252147658306a0f177ed8" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json", + "bytes": 1003, + "sha256": "f780153c2dbf4d269eca1847117fc849c002f6138dde8f43de354551e800aa08" + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/check.py", + "bytes": 12646, + "sha256": "5bbb842f74b0dff8ecbe7756a0a83937d89c853dcf7813a406b51a782949b165" + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json", + "bytes": 455, + "sha256": "039950b8d9318c8bb4f61b31923e7843d241d0465a0a8705ba75003faed79854" + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json", + "bytes": 10426, + "sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d" + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json", + "bytes": 764, + "sha256": "9800893733d820aaae969716d106c2aefcaee3a36d5a4b42d614a244af4dc6f7" + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json", + "bytes": 7971, + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5" + }, + { + "path": "historical/work/p518-next/complex/paired-five/add_growing_exits.py", + "bytes": 2012, + "sha256": "67893edbbdfd380ccd9270954f9e76ae023c27787cad92bb0e5c6eaaafe997c6" + }, + { + "path": "historical/work/p518-next/complex/paired-five/growing_cycle.py", + "bytes": 3754, + "sha256": "fef1dc7c979b39235b6ef41396835f8778548e702b4e085aec10e3d5cdcafe58" + }, + { + "path": "historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md", + "bytes": 6162, + "sha256": "a75a50aeae792a1b67c9b3b1cb5c95bfd6a3cf56cf1c3dfed304a7088118887e" + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md", + "bytes": 1818, + "sha256": "ec590608ddae58b227fe28040c29cd026699e2e5c26faad63da71a79dc50e159" + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json", + "bytes": 3286, + "sha256": "e82688d40483797d7fb5599cde3502018f9bf56acf66a803a7c6a497e885d7db" + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py", + "bytes": 6824, + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + }, + { + "path": "public-source/NOTICE.md", + "bytes": 1451, + "sha256": "a92f49c5ced455160fbedcc8954e3c9255e3605e88ad12ae5a84f1c4302986f1" + }, + { + "path": "public-source/SOURCES.json", + "bytes": 2592, + "sha256": "9e8182e6e659f4671fe0873e324b622cc871df7344157093df40476c8687be5f" + }, + { + "path": "replay.log", + "bytes": 944, + "sha256": "bcbfb1e05a91fcf673568e6f7f06d7e837f0634e01daeccdfe59bb9c49382c56" + }, + { + "path": "replay.py", + "bytes": 12836, + "sha256": "3f1c36505bb7283f8e1ab86129272d1db1fbc66cf0c0c5e284dfac09155c2022" + }, + { + "path": "replayed-receipt.json", + "bytes": 5036, + "sha256": "150c3b181f82936bc55c6aa51fa7d704be3c0d08903bbde2d7b7d85a99d373f4" + }, + { + "path": "verify.py", + "bytes": 3219, + "sha256": "64dbbe42c80055534ff148bcc84cafc3fa1756413326bdef8aaee4a3eb5ea846" + } + ] +} diff --git a/research/prepared-growing-carrier/review/CONTROLS.json b/research/prepared-growing-carrier/review/CONTROLS.json new file mode 100644 index 0000000000..3d53523ba6 --- /dev/null +++ b/research/prepared-growing-carrier/review/CONTROLS.json @@ -0,0 +1,1074 @@ +{ + "status": "PASS_PREPARED_CARRIER_CONTROLS", + "exit_columns": 512, + "exit_inverse_columns": 512, + "all_checks": 1066, + "checks": [ + "optimized wrapper rejected", + "optimized wrapper rejected: stated error", + "optimized checker rejected", + "optimized checker rejected: stated error", + "occupied build rejected", + "occupied build rejected: stated error", + "occupied directory unchanged", + "changed frozen source rejected", + "changed frozen source rejected: stated error", + "changed word pin rejected", + "changed compiler pin rejected", + "occupied receipt rejected", + "occupied receipt rejected: stated error", + "occupied receipt unchanged", + "exit extension keeps every base event", + "eight exits occur after every ADD", + "exit stream and port 0", + "exit rank and shape 0", + "exit column 0:0", + "exit inverse 0:0", + "exit column 0:1", + "exit inverse 0:1", + "exit column 0:2", + "exit inverse 0:2", + "exit column 0:3", + "exit inverse 0:3", + "exit column 0:4", + "exit inverse 0:4", + "exit column 0:5", + "exit inverse 0:5", + "exit column 0:6", + "exit inverse 0:6", + "exit column 0:7", + "exit inverse 0:7", + "exit column 0:8", + "exit inverse 0:8", + "exit column 0:9", + "exit inverse 0:9", + "exit column 0:10", + "exit inverse 0:10", + "exit column 0:11", + "exit inverse 0:11", + "exit column 0:12", + "exit inverse 0:12", + "exit column 0:13", + "exit inverse 0:13", + "exit column 0:14", + "exit inverse 0:14", + "exit column 0:15", + "exit inverse 0:15", + "exit column 0:16", + "exit inverse 0:16", + "exit column 0:17", + "exit inverse 0:17", + "exit column 0:18", + "exit inverse 0:18", + "exit column 0:19", + "exit inverse 0:19", + "exit column 0:20", + "exit inverse 0:20", + "exit column 0:21", + "exit inverse 0:21", + "exit column 0:22", + "exit inverse 0:22", + "exit column 0:23", + "exit inverse 0:23", + "exit column 0:24", + "exit inverse 0:24", + "exit column 0:25", + "exit inverse 0:25", + "exit column 0:26", + "exit inverse 0:26", + "exit column 0:27", + "exit inverse 0:27", + "exit column 0:28", + "exit inverse 0:28", + "exit column 0:29", + "exit inverse 0:29", + "exit column 0:30", + "exit inverse 0:30", + "exit column 0:31", + "exit inverse 0:31", + "exit column 0:32", + "exit inverse 0:32", + "exit column 0:33", + "exit inverse 0:33", + "exit column 0:34", + "exit inverse 0:34", + "exit column 0:35", + "exit inverse 0:35", + "exit column 0:36", + "exit inverse 0:36", + "exit column 0:37", + "exit inverse 0:37", + "exit column 0:38", + "exit inverse 0:38", + "exit column 0:39", + "exit inverse 0:39", + "exit column 0:40", + "exit inverse 0:40", + "exit column 0:41", + "exit inverse 0:41", + "exit column 0:42", + "exit inverse 0:42", + "exit column 0:43", + "exit inverse 0:43", + "exit column 0:44", + "exit inverse 0:44", + "exit column 0:45", + "exit inverse 0:45", + "exit column 0:46", + "exit inverse 0:46", + "exit column 0:47", + "exit inverse 0:47", + "exit column 0:48", + "exit inverse 0:48", + "exit column 0:49", + "exit inverse 0:49", + "exit column 0:50", + "exit inverse 0:50", + "exit column 0:51", + "exit inverse 0:51", + "exit column 0:52", + "exit inverse 0:52", + "exit column 0:53", + "exit inverse 0:53", + "exit column 0:54", + "exit inverse 0:54", + "exit column 0:55", + "exit inverse 0:55", + "exit column 0:56", + "exit inverse 0:56", + "exit column 0:57", + "exit inverse 0:57", + "exit column 0:58", + "exit inverse 0:58", + "exit column 0:59", + "exit inverse 0:59", + "exit column 0:60", + "exit inverse 0:60", + "exit column 0:61", + "exit inverse 0:61", + "exit column 0:62", + "exit inverse 0:62", + "exit column 0:63", + "exit inverse 0:63", + "exit phase mutation 0", + "exit stream and port 1", + "exit rank and shape 1", + "exit column 1:0", + "exit inverse 1:0", + "exit column 1:1", + "exit inverse 1:1", + "exit column 1:2", + "exit inverse 1:2", + "exit column 1:3", + "exit inverse 1:3", + "exit column 1:4", + "exit inverse 1:4", + "exit column 1:5", + "exit inverse 1:5", + "exit column 1:6", + "exit inverse 1:6", + "exit column 1:7", + "exit inverse 1:7", + "exit column 1:8", + "exit inverse 1:8", + "exit column 1:9", + "exit inverse 1:9", + "exit column 1:10", + "exit inverse 1:10", + "exit column 1:11", + "exit inverse 1:11", + "exit column 1:12", + "exit inverse 1:12", + "exit column 1:13", + "exit inverse 1:13", + "exit column 1:14", + "exit inverse 1:14", + "exit column 1:15", + "exit inverse 1:15", + "exit column 1:16", + "exit inverse 1:16", + "exit column 1:17", + "exit inverse 1:17", + "exit column 1:18", + "exit inverse 1:18", + "exit column 1:19", + "exit inverse 1:19", + "exit column 1:20", + "exit inverse 1:20", + "exit column 1:21", + "exit inverse 1:21", + "exit column 1:22", + "exit inverse 1:22", + "exit column 1:23", + "exit inverse 1:23", + "exit column 1:24", + "exit inverse 1:24", + "exit column 1:25", + "exit inverse 1:25", + "exit column 1:26", + "exit inverse 1:26", + "exit column 1:27", + "exit inverse 1:27", + "exit column 1:28", + "exit inverse 1:28", + "exit column 1:29", + "exit inverse 1:29", + "exit column 1:30", + "exit inverse 1:30", + "exit column 1:31", + "exit inverse 1:31", + "exit column 1:32", + "exit inverse 1:32", + "exit column 1:33", + "exit inverse 1:33", + "exit column 1:34", + "exit inverse 1:34", + "exit column 1:35", + "exit inverse 1:35", + "exit column 1:36", + "exit inverse 1:36", + "exit column 1:37", + "exit inverse 1:37", + "exit column 1:38", + "exit inverse 1:38", + "exit column 1:39", + "exit inverse 1:39", + "exit column 1:40", + "exit inverse 1:40", + "exit column 1:41", + "exit inverse 1:41", + "exit column 1:42", + "exit inverse 1:42", + "exit column 1:43", + "exit inverse 1:43", + "exit column 1:44", + "exit inverse 1:44", + "exit column 1:45", + "exit inverse 1:45", + "exit column 1:46", + "exit inverse 1:46", + "exit column 1:47", + "exit inverse 1:47", + "exit column 1:48", + "exit inverse 1:48", + "exit column 1:49", + "exit inverse 1:49", + "exit column 1:50", + "exit inverse 1:50", + "exit column 1:51", + "exit inverse 1:51", + "exit column 1:52", + "exit inverse 1:52", + "exit column 1:53", + "exit inverse 1:53", + "exit column 1:54", + "exit inverse 1:54", + "exit column 1:55", + "exit inverse 1:55", + "exit column 1:56", + "exit inverse 1:56", + "exit column 1:57", + "exit inverse 1:57", + "exit column 1:58", + "exit inverse 1:58", + "exit column 1:59", + "exit inverse 1:59", + "exit column 1:60", + "exit inverse 1:60", + "exit column 1:61", + "exit inverse 1:61", + "exit column 1:62", + "exit inverse 1:62", + "exit column 1:63", + "exit inverse 1:63", + "exit phase mutation 1", + "exit stream and port 2", + "exit rank and shape 2", + "exit column 2:0", + "exit inverse 2:0", + "exit column 2:1", + "exit inverse 2:1", + "exit column 2:2", + "exit inverse 2:2", + "exit column 2:3", + "exit inverse 2:3", + "exit column 2:4", + "exit inverse 2:4", + "exit column 2:5", + "exit inverse 2:5", + "exit column 2:6", + "exit inverse 2:6", + "exit column 2:7", + "exit inverse 2:7", + "exit column 2:8", + "exit inverse 2:8", + "exit column 2:9", + "exit inverse 2:9", + "exit column 2:10", + "exit inverse 2:10", + "exit column 2:11", + "exit inverse 2:11", + "exit column 2:12", + "exit inverse 2:12", + "exit column 2:13", + "exit inverse 2:13", + "exit column 2:14", + "exit inverse 2:14", + "exit column 2:15", + "exit inverse 2:15", + "exit column 2:16", + "exit inverse 2:16", + "exit column 2:17", + "exit inverse 2:17", + "exit column 2:18", + "exit inverse 2:18", + "exit column 2:19", + "exit inverse 2:19", + "exit column 2:20", + "exit inverse 2:20", + "exit column 2:21", + "exit inverse 2:21", + "exit column 2:22", + "exit inverse 2:22", + "exit column 2:23", + "exit inverse 2:23", + "exit column 2:24", + "exit inverse 2:24", + "exit column 2:25", + "exit inverse 2:25", + "exit column 2:26", + "exit inverse 2:26", + "exit column 2:27", + "exit inverse 2:27", + "exit column 2:28", + "exit inverse 2:28", + "exit column 2:29", + "exit inverse 2:29", + "exit column 2:30", + "exit inverse 2:30", + "exit column 2:31", + "exit inverse 2:31", + "exit column 2:32", + "exit inverse 2:32", + "exit column 2:33", + "exit inverse 2:33", + "exit column 2:34", + "exit inverse 2:34", + "exit column 2:35", + "exit inverse 2:35", + "exit column 2:36", + "exit inverse 2:36", + "exit column 2:37", + "exit inverse 2:37", + "exit column 2:38", + "exit inverse 2:38", + "exit column 2:39", + "exit inverse 2:39", + "exit column 2:40", + "exit inverse 2:40", + "exit column 2:41", + "exit inverse 2:41", + "exit column 2:42", + "exit inverse 2:42", + "exit column 2:43", + "exit inverse 2:43", + "exit column 2:44", + "exit inverse 2:44", + "exit column 2:45", + "exit inverse 2:45", + "exit column 2:46", + "exit inverse 2:46", + "exit column 2:47", + "exit inverse 2:47", + "exit column 2:48", + "exit inverse 2:48", + "exit column 2:49", + "exit inverse 2:49", + "exit column 2:50", + "exit inverse 2:50", + "exit column 2:51", + "exit inverse 2:51", + "exit column 2:52", + "exit inverse 2:52", + "exit column 2:53", + "exit inverse 2:53", + "exit column 2:54", + "exit inverse 2:54", + "exit column 2:55", + "exit inverse 2:55", + "exit column 2:56", + "exit inverse 2:56", + "exit column 2:57", + "exit inverse 2:57", + "exit column 2:58", + "exit inverse 2:58", + "exit column 2:59", + "exit inverse 2:59", + "exit column 2:60", + "exit inverse 2:60", + "exit column 2:61", + "exit inverse 2:61", + "exit column 2:62", + "exit inverse 2:62", + "exit column 2:63", + "exit inverse 2:63", + "exit phase mutation 2", + "exit stream and port 3", + "exit rank and shape 3", + "exit column 3:0", + "exit inverse 3:0", + "exit column 3:1", + "exit inverse 3:1", + "exit column 3:2", + "exit inverse 3:2", + "exit column 3:3", + "exit inverse 3:3", + "exit column 3:4", + "exit inverse 3:4", + "exit column 3:5", + "exit inverse 3:5", + "exit column 3:6", + "exit inverse 3:6", + "exit column 3:7", + "exit inverse 3:7", + "exit column 3:8", + "exit inverse 3:8", + "exit column 3:9", + "exit inverse 3:9", + "exit column 3:10", + "exit inverse 3:10", + "exit column 3:11", + "exit inverse 3:11", + "exit column 3:12", + "exit inverse 3:12", + "exit column 3:13", + "exit inverse 3:13", + "exit column 3:14", + "exit inverse 3:14", + "exit column 3:15", + "exit inverse 3:15", + "exit column 3:16", + "exit inverse 3:16", + "exit column 3:17", + "exit inverse 3:17", + "exit column 3:18", + "exit inverse 3:18", + "exit column 3:19", + "exit inverse 3:19", + "exit column 3:20", + "exit inverse 3:20", + "exit column 3:21", + "exit inverse 3:21", + "exit column 3:22", + "exit inverse 3:22", + "exit column 3:23", + "exit inverse 3:23", + "exit column 3:24", + "exit inverse 3:24", + "exit column 3:25", + "exit inverse 3:25", + "exit column 3:26", + "exit inverse 3:26", + "exit column 3:27", + "exit inverse 3:27", + "exit column 3:28", + "exit inverse 3:28", + "exit column 3:29", + "exit inverse 3:29", + "exit column 3:30", + "exit inverse 3:30", + "exit column 3:31", + "exit inverse 3:31", + "exit column 3:32", + "exit inverse 3:32", + "exit column 3:33", + "exit inverse 3:33", + "exit column 3:34", + "exit inverse 3:34", + "exit column 3:35", + "exit inverse 3:35", + "exit column 3:36", + "exit inverse 3:36", + "exit column 3:37", + "exit inverse 3:37", + "exit column 3:38", + "exit inverse 3:38", + "exit column 3:39", + "exit inverse 3:39", + "exit column 3:40", + "exit inverse 3:40", + "exit column 3:41", + "exit inverse 3:41", + "exit column 3:42", + "exit inverse 3:42", + "exit column 3:43", + "exit inverse 3:43", + "exit column 3:44", + "exit inverse 3:44", + "exit column 3:45", + "exit inverse 3:45", + "exit column 3:46", + "exit inverse 3:46", + "exit column 3:47", + "exit inverse 3:47", + "exit column 3:48", + "exit inverse 3:48", + "exit column 3:49", + "exit inverse 3:49", + "exit column 3:50", + "exit inverse 3:50", + "exit column 3:51", + "exit inverse 3:51", + "exit column 3:52", + "exit inverse 3:52", + "exit column 3:53", + "exit inverse 3:53", + "exit column 3:54", + "exit inverse 3:54", + "exit column 3:55", + "exit inverse 3:55", + "exit column 3:56", + "exit inverse 3:56", + "exit column 3:57", + "exit inverse 3:57", + "exit column 3:58", + "exit inverse 3:58", + "exit column 3:59", + "exit inverse 3:59", + "exit column 3:60", + "exit inverse 3:60", + "exit column 3:61", + "exit inverse 3:61", + "exit column 3:62", + "exit inverse 3:62", + "exit column 3:63", + "exit inverse 3:63", + "exit phase mutation 3", + "exit stream and port 4", + "exit rank and shape 4", + "exit column 4:0", + "exit inverse 4:0", + "exit column 4:1", + "exit inverse 4:1", + "exit column 4:2", + "exit inverse 4:2", + "exit column 4:3", + "exit inverse 4:3", + "exit column 4:4", + "exit inverse 4:4", + "exit column 4:5", + "exit inverse 4:5", + "exit column 4:6", + "exit inverse 4:6", + "exit column 4:7", + "exit inverse 4:7", + "exit column 4:8", + "exit inverse 4:8", + "exit column 4:9", + "exit inverse 4:9", + "exit column 4:10", + "exit inverse 4:10", + "exit column 4:11", + "exit inverse 4:11", + "exit column 4:12", + "exit inverse 4:12", + "exit column 4:13", + "exit inverse 4:13", + "exit column 4:14", + "exit inverse 4:14", + "exit column 4:15", + "exit inverse 4:15", + "exit column 4:16", + "exit inverse 4:16", + "exit column 4:17", + "exit inverse 4:17", + "exit column 4:18", + "exit inverse 4:18", + "exit column 4:19", + "exit inverse 4:19", + "exit column 4:20", + "exit inverse 4:20", + "exit column 4:21", + "exit inverse 4:21", + "exit column 4:22", + "exit inverse 4:22", + "exit column 4:23", + "exit inverse 4:23", + "exit column 4:24", + "exit inverse 4:24", + "exit column 4:25", + "exit inverse 4:25", + "exit column 4:26", + "exit inverse 4:26", + "exit column 4:27", + "exit inverse 4:27", + "exit column 4:28", + "exit inverse 4:28", + "exit column 4:29", + "exit inverse 4:29", + "exit column 4:30", + "exit inverse 4:30", + "exit column 4:31", + "exit inverse 4:31", + "exit column 4:32", + "exit inverse 4:32", + "exit column 4:33", + "exit inverse 4:33", + "exit column 4:34", + "exit inverse 4:34", + "exit column 4:35", + "exit inverse 4:35", + "exit column 4:36", + "exit inverse 4:36", + "exit column 4:37", + "exit inverse 4:37", + "exit column 4:38", + "exit inverse 4:38", + "exit column 4:39", + "exit inverse 4:39", + "exit column 4:40", + "exit inverse 4:40", + "exit column 4:41", + "exit inverse 4:41", + "exit column 4:42", + "exit inverse 4:42", + "exit column 4:43", + "exit inverse 4:43", + "exit column 4:44", + "exit inverse 4:44", + "exit column 4:45", + "exit inverse 4:45", + "exit column 4:46", + "exit inverse 4:46", + "exit column 4:47", + "exit inverse 4:47", + "exit column 4:48", + "exit inverse 4:48", + "exit column 4:49", + "exit inverse 4:49", + "exit column 4:50", + "exit inverse 4:50", + "exit column 4:51", + "exit inverse 4:51", + "exit column 4:52", + "exit inverse 4:52", + "exit column 4:53", + "exit inverse 4:53", + "exit column 4:54", + "exit inverse 4:54", + "exit column 4:55", + "exit inverse 4:55", + "exit column 4:56", + "exit inverse 4:56", + "exit column 4:57", + "exit inverse 4:57", + "exit column 4:58", + "exit inverse 4:58", + "exit column 4:59", + "exit inverse 4:59", + "exit column 4:60", + "exit inverse 4:60", + "exit column 4:61", + "exit inverse 4:61", + "exit column 4:62", + "exit inverse 4:62", + "exit column 4:63", + "exit inverse 4:63", + "exit phase mutation 4", + "exit stream and port 5", + "exit rank and shape 5", + "exit column 5:0", + "exit inverse 5:0", + "exit column 5:1", + "exit inverse 5:1", + "exit column 5:2", + "exit inverse 5:2", + "exit column 5:3", + "exit inverse 5:3", + "exit column 5:4", + "exit inverse 5:4", + "exit column 5:5", + "exit inverse 5:5", + "exit column 5:6", + "exit inverse 5:6", + "exit column 5:7", + "exit inverse 5:7", + "exit column 5:8", + "exit inverse 5:8", + "exit column 5:9", + "exit inverse 5:9", + "exit column 5:10", + "exit inverse 5:10", + "exit column 5:11", + "exit inverse 5:11", + "exit column 5:12", + "exit inverse 5:12", + "exit column 5:13", + "exit inverse 5:13", + "exit column 5:14", + "exit inverse 5:14", + "exit column 5:15", + "exit inverse 5:15", + "exit column 5:16", + "exit inverse 5:16", + "exit column 5:17", + "exit inverse 5:17", + "exit column 5:18", + "exit inverse 5:18", + "exit column 5:19", + "exit inverse 5:19", + "exit column 5:20", + "exit inverse 5:20", + "exit column 5:21", + "exit inverse 5:21", + "exit column 5:22", + "exit inverse 5:22", + "exit column 5:23", + "exit inverse 5:23", + "exit column 5:24", + "exit inverse 5:24", + "exit column 5:25", + "exit inverse 5:25", + "exit column 5:26", + "exit inverse 5:26", + "exit column 5:27", + "exit inverse 5:27", + "exit column 5:28", + "exit inverse 5:28", + "exit column 5:29", + "exit inverse 5:29", + "exit column 5:30", + "exit inverse 5:30", + "exit column 5:31", + "exit inverse 5:31", + "exit column 5:32", + "exit inverse 5:32", + "exit column 5:33", + "exit inverse 5:33", + "exit column 5:34", + "exit inverse 5:34", + "exit column 5:35", + "exit inverse 5:35", + "exit column 5:36", + "exit inverse 5:36", + "exit column 5:37", + "exit inverse 5:37", + "exit column 5:38", + "exit inverse 5:38", + "exit column 5:39", + "exit inverse 5:39", + "exit column 5:40", + "exit inverse 5:40", + "exit column 5:41", + "exit inverse 5:41", + "exit column 5:42", + "exit inverse 5:42", + "exit column 5:43", + "exit inverse 5:43", + "exit column 5:44", + "exit inverse 5:44", + "exit column 5:45", + "exit inverse 5:45", + "exit column 5:46", + "exit inverse 5:46", + "exit column 5:47", + "exit inverse 5:47", + "exit column 5:48", + "exit inverse 5:48", + "exit column 5:49", + "exit inverse 5:49", + "exit column 5:50", + "exit inverse 5:50", + "exit column 5:51", + "exit inverse 5:51", + "exit column 5:52", + "exit inverse 5:52", + "exit column 5:53", + "exit inverse 5:53", + "exit column 5:54", + "exit inverse 5:54", + "exit column 5:55", + "exit inverse 5:55", + "exit column 5:56", + "exit inverse 5:56", + "exit column 5:57", + "exit inverse 5:57", + "exit column 5:58", + "exit inverse 5:58", + "exit column 5:59", + "exit inverse 5:59", + "exit column 5:60", + "exit inverse 5:60", + "exit column 5:61", + "exit inverse 5:61", + "exit column 5:62", + "exit inverse 5:62", + "exit column 5:63", + "exit inverse 5:63", + "exit phase mutation 5", + "exit stream and port 6", + "exit rank and shape 6", + "exit column 6:0", + "exit inverse 6:0", + "exit column 6:1", + "exit inverse 6:1", + "exit column 6:2", + "exit inverse 6:2", + "exit column 6:3", + "exit inverse 6:3", + "exit column 6:4", + "exit inverse 6:4", + "exit column 6:5", + "exit inverse 6:5", + "exit column 6:6", + "exit inverse 6:6", + "exit column 6:7", + "exit inverse 6:7", + "exit column 6:8", + "exit inverse 6:8", + "exit column 6:9", + "exit inverse 6:9", + "exit column 6:10", + "exit inverse 6:10", + "exit column 6:11", + "exit inverse 6:11", + "exit column 6:12", + "exit inverse 6:12", + "exit column 6:13", + "exit inverse 6:13", + "exit column 6:14", + "exit inverse 6:14", + "exit column 6:15", + "exit inverse 6:15", + "exit column 6:16", + "exit inverse 6:16", + "exit column 6:17", + "exit inverse 6:17", + "exit column 6:18", + "exit inverse 6:18", + "exit column 6:19", + "exit inverse 6:19", + "exit column 6:20", + "exit inverse 6:20", + "exit column 6:21", + "exit inverse 6:21", + "exit column 6:22", + "exit inverse 6:22", + "exit column 6:23", + "exit inverse 6:23", + "exit column 6:24", + "exit inverse 6:24", + "exit column 6:25", + "exit inverse 6:25", + "exit column 6:26", + "exit inverse 6:26", + "exit column 6:27", + "exit inverse 6:27", + "exit column 6:28", + "exit inverse 6:28", + "exit column 6:29", + "exit inverse 6:29", + "exit column 6:30", + "exit inverse 6:30", + "exit column 6:31", + "exit inverse 6:31", + "exit column 6:32", + "exit inverse 6:32", + "exit column 6:33", + "exit inverse 6:33", + "exit column 6:34", + "exit inverse 6:34", + "exit column 6:35", + "exit inverse 6:35", + "exit column 6:36", + "exit inverse 6:36", + "exit column 6:37", + "exit inverse 6:37", + "exit column 6:38", + "exit inverse 6:38", + "exit column 6:39", + "exit inverse 6:39", + "exit column 6:40", + "exit inverse 6:40", + "exit column 6:41", + "exit inverse 6:41", + "exit column 6:42", + "exit inverse 6:42", + "exit column 6:43", + "exit inverse 6:43", + "exit column 6:44", + "exit inverse 6:44", + "exit column 6:45", + "exit inverse 6:45", + "exit column 6:46", + "exit inverse 6:46", + "exit column 6:47", + "exit inverse 6:47", + "exit column 6:48", + "exit inverse 6:48", + "exit column 6:49", + "exit inverse 6:49", + "exit column 6:50", + "exit inverse 6:50", + "exit column 6:51", + "exit inverse 6:51", + "exit column 6:52", + "exit inverse 6:52", + "exit column 6:53", + "exit inverse 6:53", + "exit column 6:54", + "exit inverse 6:54", + "exit column 6:55", + "exit inverse 6:55", + "exit column 6:56", + "exit inverse 6:56", + "exit column 6:57", + "exit inverse 6:57", + "exit column 6:58", + "exit inverse 6:58", + "exit column 6:59", + "exit inverse 6:59", + "exit column 6:60", + "exit inverse 6:60", + "exit column 6:61", + "exit inverse 6:61", + "exit column 6:62", + "exit inverse 6:62", + "exit column 6:63", + "exit inverse 6:63", + "exit phase mutation 6", + "exit stream and port 7", + "exit rank and shape 7", + "exit column 7:0", + "exit inverse 7:0", + "exit column 7:1", + "exit inverse 7:1", + "exit column 7:2", + "exit inverse 7:2", + "exit column 7:3", + "exit inverse 7:3", + "exit column 7:4", + "exit inverse 7:4", + "exit column 7:5", + "exit inverse 7:5", + "exit column 7:6", + "exit inverse 7:6", + "exit column 7:7", + "exit inverse 7:7", + "exit column 7:8", + "exit inverse 7:8", + "exit column 7:9", + "exit inverse 7:9", + "exit column 7:10", + "exit inverse 7:10", + "exit column 7:11", + "exit inverse 7:11", + "exit column 7:12", + "exit inverse 7:12", + "exit column 7:13", + "exit inverse 7:13", + "exit column 7:14", + "exit inverse 7:14", + "exit column 7:15", + "exit inverse 7:15", + "exit column 7:16", + "exit inverse 7:16", + "exit column 7:17", + "exit inverse 7:17", + "exit column 7:18", + "exit inverse 7:18", + "exit column 7:19", + "exit inverse 7:19", + "exit column 7:20", + "exit inverse 7:20", + "exit column 7:21", + "exit inverse 7:21", + "exit column 7:22", + "exit inverse 7:22", + "exit column 7:23", + "exit inverse 7:23", + "exit column 7:24", + "exit inverse 7:24", + "exit column 7:25", + "exit inverse 7:25", + "exit column 7:26", + "exit inverse 7:26", + "exit column 7:27", + "exit inverse 7:27", + "exit column 7:28", + "exit inverse 7:28", + "exit column 7:29", + "exit inverse 7:29", + "exit column 7:30", + "exit inverse 7:30", + "exit column 7:31", + "exit inverse 7:31", + "exit column 7:32", + "exit inverse 7:32", + "exit column 7:33", + "exit inverse 7:33", + "exit column 7:34", + "exit inverse 7:34", + "exit column 7:35", + "exit inverse 7:35", + "exit column 7:36", + "exit inverse 7:36", + "exit column 7:37", + "exit inverse 7:37", + "exit column 7:38", + "exit inverse 7:38", + "exit column 7:39", + "exit inverse 7:39", + "exit column 7:40", + "exit inverse 7:40", + "exit column 7:41", + "exit inverse 7:41", + "exit column 7:42", + "exit inverse 7:42", + "exit column 7:43", + "exit inverse 7:43", + "exit column 7:44", + "exit inverse 7:44", + "exit column 7:45", + "exit inverse 7:45", + "exit column 7:46", + "exit inverse 7:46", + "exit column 7:47", + "exit inverse 7:47", + "exit column 7:48", + "exit inverse 7:48", + "exit column 7:49", + "exit inverse 7:49", + "exit column 7:50", + "exit inverse 7:50", + "exit column 7:51", + "exit inverse 7:51", + "exit column 7:52", + "exit inverse 7:52", + "exit column 7:53", + "exit inverse 7:53", + "exit column 7:54", + "exit inverse 7:54", + "exit column 7:55", + "exit inverse 7:55", + "exit column 7:56", + "exit inverse 7:56", + "exit column 7:57", + "exit inverse 7:57", + "exit column 7:58", + "exit inverse 7:58", + "exit column 7:59", + "exit inverse 7:59", + "exit column 7:60", + "exit inverse 7:60", + "exit column 7:61", + "exit inverse 7:61", + "exit column 7:62", + "exit inverse 7:62", + "exit column 7:63", + "exit inverse 7:63", + "exit phase mutation 7", + "ADD sign mutation changes physical endpoint", + "child phase mutation changes physical endpoint" + ] +} diff --git a/research/prepared-growing-carrier/review/RELOCATION-RECEIPT.json b/research/prepared-growing-carrier/review/RELOCATION-RECEIPT.json new file mode 100644 index 0000000000..86dcd071dc --- /dev/null +++ b/research/prepared-growing-carrier/review/RELOCATION-RECEIPT.json @@ -0,0 +1,233 @@ +{ + "status": "PASS_RELOCATED_ISOLATED_ENVIRONMENT", + "command_shape": "python3 -I -B RELOCATED_PACKAGE/verify.py --build NEW_DIRECTORY", + "environment": "PYTHONOPTIMIZE=1", + "returncode": 0, + "final_line": "PASS_PREPARED_GROWING_CARRIER 704 55 8", + "receipt": { + "status": "PASS_PREPARED_GROWING_CARRIER", + "stages": [ + "construct", + "exits", + "independent" + ], + "independent": { + "status": "PASS_INDEPENDENT_GROWING_CAP_WORD", + "word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "clifford_source_sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "builder_imported": false, + "lower_child_called": false, + "canonical_frame_definitions_shared": true, + "separate_integer_gaussian_interpreter": true, + "scalar_input_columns": 11, + "recipe_basis_columns": 1472, + "whole_physical_basis_columns": 704, + "inverse_round_trip_columns": 704, + "all_moves_strict_nested_ascents": true, + "full_common_labels_at_adds": true, + "future_targets_compatible_before_each_source_move": true, + "sources_unchanged_in_scalar_replay": true, + "target_rows_exact": true, + "literal_events": 39, + "scalar_add_reads": 12, + "paid_child_calls": 27, + "distinct_recipe_lowerings": 23, + "paid_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "paid_rank_mass": 55, + "paid_rank_by_register": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "copies": 0, + "source_line_bridge_equals_C_e": [ + true, + true, + true + ], + "target_endpoint_bridges": [ + { + "q": 21, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 22, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 25, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 26, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 37, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 38, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 41, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 42, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + } + ], + "target_exit_adapters_in_frozen_word": false, + "fixed_last_cap_counterexamples": [ + { + "source": 0, + "target": 1, + "q": 22, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 0, + "target": 3, + "q": 26, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 1, + "target": 2, + "q": 25, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 6, + "q": 41, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 3, + "q": 26, + "read_cap": [ + 4, + 1 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 4, + "q": 37, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 5, + "q": 38, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 6, + "q": 41, + "read_cap": [ + 16, + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + } + ], + "three_selector_analogue_charges_per_carrier": [ + "3/2", + "2", + "2" + ], + "phase_mutant_rejected": true, + "scope": "One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked." + }, + "source_manifest_sha256": "5fe4a164c6c2e0a61f049081abe825179a4ee46f6995f2e122609d52a8851855", + "portable_checker_sha256": "3f1c36505bb7283f8e1ab86129272d1db1fbc66cf0c0c5e284dfac09155c2022", + "legacy_exits": { + "status": "PASS_EXACT_MONOMIAL_EXITS", + "original_word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "word_sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "exits": 8, + "rank_zero_exits": 8, + "address_columns_checked": 512, + "full_global_phase": true, + "extra_paid_rank": 0, + "scope": "The finite decoder has the stated legacy exits. It is not a full factory or parent supplier." + } + } +} diff --git a/research/prepared-growing-carrier/review/REPLAY-RECEIPT.json b/research/prepared-growing-carrier/review/REPLAY-RECEIPT.json new file mode 100644 index 0000000000..043acaaa1c --- /dev/null +++ b/research/prepared-growing-carrier/review/REPLAY-RECEIPT.json @@ -0,0 +1,226 @@ +{ + "status": "PASS_PREPARED_GROWING_CARRIER", + "stages": [ + "construct", + "exits", + "independent" + ], + "independent": { + "status": "PASS_INDEPENDENT_GROWING_CAP_WORD", + "word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "clifford_source_sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "builder_imported": false, + "lower_child_called": false, + "canonical_frame_definitions_shared": true, + "separate_integer_gaussian_interpreter": true, + "scalar_input_columns": 11, + "recipe_basis_columns": 1472, + "whole_physical_basis_columns": 704, + "inverse_round_trip_columns": 704, + "all_moves_strict_nested_ascents": true, + "full_common_labels_at_adds": true, + "future_targets_compatible_before_each_source_move": true, + "sources_unchanged_in_scalar_replay": true, + "target_rows_exact": true, + "literal_events": 39, + "scalar_add_reads": 12, + "paid_child_calls": 27, + "distinct_recipe_lowerings": 23, + "paid_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "paid_rank_mass": 55, + "paid_rank_by_register": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "copies": 0, + "source_line_bridge_equals_C_e": [ + true, + true, + true + ], + "target_endpoint_bridges": [ + { + "q": 21, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 22, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 25, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 26, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 37, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 38, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 41, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + }, + { + "q": 42, + "canonical_equals_legacy_endpoint": false, + "exit_correction_rank": 0 + } + ], + "target_exit_adapters_in_frozen_word": false, + "fixed_last_cap_counterexamples": [ + { + "source": 0, + "target": 1, + "q": 22, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 0, + "target": 3, + "q": 26, + "read_cap": [ + 1 + ], + "last_read_cap": [ + 16, + 1 + ] + }, + { + "source": 1, + "target": 2, + "q": 25, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 6, + "q": 41, + "read_cap": [ + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 1, + "target": 3, + "q": 26, + "read_cap": [ + 4, + 1 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 4, + "q": 37, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 5, + "q": 38, + "read_cap": [ + 16 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + }, + { + "source": 2, + "target": 6, + "q": 41, + "read_cap": [ + 16, + 4 + ], + "last_read_cap": [ + 16, + 4, + 1 + ] + } + ], + "three_selector_analogue_charges_per_carrier": [ + "3/2", + "2", + "2" + ], + "phase_mutant_rejected": true, + "scope": "One finite canonical-frame decoder. No complete scalar factory, legacy exit adapter word, global owner controller, supplier or kappa gain is checked." + }, + "source_manifest_sha256": "5fe4a164c6c2e0a61f049081abe825179a4ee46f6995f2e122609d52a8851855", + "portable_checker_sha256": "3f1c36505bb7283f8e1ab86129272d1db1fbc66cf0c0c5e284dfac09155c2022", + "legacy_exits": { + "status": "PASS_EXACT_MONOMIAL_EXITS", + "original_word_sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "word_sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "exits": 8, + "rank_zero_exits": 8, + "address_columns_checked": 512, + "full_global_phase": true, + "extra_paid_rank": 0, + "scope": "The finite decoder has the stated legacy exits. It is not a full factory or parent supplier." + } +} diff --git a/research/prepared-growing-carrier/review/RESULT.json b/research/prepared-growing-carrier/review/RESULT.json new file mode 100644 index 0000000000..516f6ef083 --- /dev/null +++ b/research/prepared-growing-carrier/review/RESULT.json @@ -0,0 +1,31 @@ +{ + "status": "PASS_NO_MATERIAL_FINDINGS", + "reviewer": "Separate OpenAI Codex agent; not human review", + "package_files": 25, + "unchanged_source_files": 18, + "base_events": 39, + "scalar_adds": 12, + "paid_children": 27, + "rank_profile": { + "1": 15, + "2": 2, + "3": 5, + "4": 4, + "5": 1 + }, + "rank_mass": 55, + "applied_base_monomial_records": 54, + "exit_monomial_records": 8, + "copies": 0, + "recipe_columns": 1472, + "whole_word_columns": 704, + "inverse_columns": 704, + "independent_exit_columns": 512, + "independent_exit_inverse_columns": 512, + "mutations_and_pin_guards": "PASS", + "relocated_isolated_replay": "PASS with PYTHONOPTIMIZE=1", + "kappa_improvement": false, + "useful_scope": "Prepared-input local complex decoder with growing compatible carrier frames and exact optional legacy exits.", + "review_sha256": "b041aaa2def4fc9ccf05db7a92772634821317ec8df59c541c2007b6e5da304f", + "checked_files_sha256": "75224e31892dfcea29840dd95a806e9f664bfc8f7d28d86d7d0adc964c356050" +} diff --git a/research/prepared-growing-carrier/review/REVIEW.txt b/research/prepared-growing-carrier/review/REVIEW.txt new file mode 100644 index 0000000000..3bc9761131 --- /dev/null +++ b/research/prepared-growing-carrier/review/REVIEW.txt @@ -0,0 +1,144 @@ +Independent agent review: prepared growing carriers +================================================== + +Result: PASS. No material finding remains in the stated local scope. +This is a separate OpenAI Codex agent review, not human peer review or a +proof-assistant result. I read PR-DESCRIPTION-STANDARD.md before this report. + +What the result supplies +------------------------ +The package gives one finite complex decoder on eleven streams of 64 +values. Three carrier inputs have the specified line-frame interface. +All eight target inputs are arbitrary; a zero target frame means the +identity operator, not a zero value. In scalar coordinates it implements + +X_i -> X_i, +Y_t -> Y_t + sum_i bit_i(t) X_i. + +The physical carriers finish in the full frame, so they are not returned +as the same physical arrays. Each target finishes in its canonical +q(t)-perpendicular frame. The separate saved extension changes those eight +target operators to F C_q^-1 with exact monomial adapters. + +The new capability is an explicit legal schedule in which a carrier can +grow after an earlier target is served. One final read frame does not fit +all earlier reads. This invalidates an extension of fixed-read-frame +counting to arbitrary growing frames. It does not invalidate the stated +fixed-frame theorem or prove a bound for every decoder. + +Exact local account +------------------- +There are 39 base events: 12 scalar ADD scans and 27 positive-rank children. +Their profile is 15 H_1 + 2 H_2 + 5 H_3 + 4 H_4 + H_5, with rank mass 55. +The 27 calls use 23 distinct saved recipes. Each applied positive-rank +recipe has left and right monomial factors: 54 applied monomial records +in the base word. There is no COPY. The saved extension adds eight more +monomial records and zero positive child rank. This count of records is +not a primitive-operation invoice. + +Every stream pays five units of rank growth. A carrier grows from rank +one to rank six; a target grows from rank zero to rank five. All moves are +strict nested ascents. This explains 3*5 + 8*5 = 55 without omitting a +nonmonotone transition. + +The count assumes the prepared carrier interface. It does not price the +source factory, initial frame preparation, scalar or monomial primitives, +routing, workspace management, precision, owner controller, or recursive +hosting. No complete supplier, strict total-cost improvement, or verified +kappa improvement follows. + +Proof and source review +----------------------- +I read the frozen proof, literal builder, saved exit builder, portable +checker, wrapper, all canonical Clifford definitions, and source ledger. +All 18 historical package sources match both their manifest hashes and +their existing original files byte for byte. The consumed Clifford source +also matches the public Git object + +e07a8a3f9f79c22113398a0c5dbbc7601f489b3e:research/direct-delivery504-global/vendor/clifford/clifford_exact.py + +with SHA256 2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962. +The old checker and portable replay differ only in input/output path +handling, argument parsing, and an optimization guard. + +For a child, the serialized execution order is right monomial, rank-r +Fourier child, then left monomial. The separate Gaussian-integer +interpreter checks the complete matrix, including global phase. Its +arithmetic uses integers and powers of two, not floating point. Its D +adjoint negates linear Z4 coefficients; the cross terms have coefficient +two and keep the same residue. Permutations and C gates have explicit +inverses. ADD inverses negate the scalar coefficient in reverse order. + +At an ADD, both registers have the same full canonical label. Thus the +invariant physical_value = T_frame scalar_value gives the stated scalar +endpoint. All pending target ports remain compatible before a carrier +move. The proof removes only targets already served. The final target +frames equal the intended hyperplanes. + +The separate finite checker tests all 704 independent physical input +columns. Its operations are complex-linear, so these basis columns imply +the displayed endpoint for arbitrary complex inputs, including all +original target values. Inverse round trips verify the exact inverse +word. They do not change the forward carrier restoration contract. + +Fresh replay and controls +------------------------- +Command, from the project root: + +python3 -B work/project-final-cleanup-20261022/early-projects-audit/packages/prepared-growing-carrier/verify.py --build /tmp/prepared-carrier-independent-review-20261023 + +Result: + +PASS_PREPARED_GROWING_CARRIER 704 55 8 + +The wrapper reproduced both saved words and receipts byte for byte. The +independent checker passed 1472 recipe basis columns, 704 full-word columns, +and 704 inverse columns. It also passed the source-line bridges, all label +and pending-target checks, exact rank profile, and phase mutation. +REPLAY-RECEIPT.json and replay.log retain the run. + +Additional review command: + +python3 -B work/project-final-cleanup-20261022/reviews/prepared-carrier/controls.py work/project-final-cleanup-20261022/early-projects-audit/packages/prepared-growing-carrier work/project-final-cleanup-20261022/reviews/prepared-carrier/CONTROLS.json + +This uses the separate Gaussian interpreter to parse the saved exit +monomials. All 512 exit columns equal the stated legacy target operator, +and all 512 exit inverse columns return their input. The eight exits are +after every ADD and preserve all base events. Every phase-mutated exit is +rejected. A base ADD sign mutation and a base child phase mutation change +the physical endpoint. Optimized Python, changed word/compiler/source +pins, occupied output paths, and overwritten receipts are rejected. +CONTROLS.json gives the exact checks; its 1066 checks include individual +basis-column assertions, not 1066 independent mutation cases. + +A second fresh replay from a relocated package passed with an isolated +parent and PYTHONOPTIMIZE=1. Child commands use -E -B, so the historical +assertions remain enabled. RELOCATION-RECEIPT.json records that check. + +Overlap, credit, and limits +-------------------------- +I checked the supplied comparison with shared-carrier-decoder at main +cef4b52f2a59009865bf8eabde1be3f159063703. That module has 452 dirty helpers, +a different P111 endpoint, and a nonzero COPY; it is not this prepared +three-carrier component. Searches of current research proof/README files, +paths, and the supplied 315-open-PR snapshot found no duplicate of this +exact growing-carrier word. + +The package retains the consumed Clifford notices and source ledgers, +credits the historical PR518 source copy and exact PR531 public bytes, +and discloses Codex and research-agent assistance. The coordinator must +check final GitHub link targets, description rendering, and readback. + +The included historical delivery-flags proof is context for the fixed-frame +restriction. I did not rerun its separate dynamic programs or certify its +numerical ceilings in this review. The local growing-frame counterexample +does not depend on those numerical claims. No whole source factory, +controller, physical primitive invoice, proof-assistant certificate, or +complete kappa calculation was checked. + +The one wording finding was corrected: the README no longer says this +package preserves a proved rank saving against an unspecified baseline. +It asks whether a complete composition can give a favorable cost. + +CHECKED-FILES.json binds the exact publication files reviewed. Later edits +to proof or executable content require a focused recheck. diff --git a/research/prepared-growing-carrier/review/SOURCE-CHECK.json b/research/prepared-growing-carrier/review/SOURCE-CHECK.json new file mode 100644 index 0000000000..f4f03e189a --- /dev/null +++ b/research/prepared-growing-carrier/review/SOURCE-CHECK.json @@ -0,0 +1,117 @@ +{ + "status": "PASS", + "sources": [ + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/PROOF.md", + "sha256": "90f799133f1018e9ad6dbc8c232b1cc081170fc67c72fcd3ab1048dacc3093a8", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/check.py", + "sha256": "5bbb842f74b0dff8ecbe7756a0a83937d89c853dcf7813a406b51a782949b165", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/FROZEN-WORD.json", + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/SOURCE-PINS.json", + "sha256": "e5bc79fb24e4c4b9c4821db8130a97ee707d5148c58252147658306a0f177ed8", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/VERIFICATION.json", + "sha256": "f780153c2dbf4d269eca1847117fc849c002f6138dde8f43de354551e800aa08", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/autonomous-kappa-run/growing-cycle-independent/RESULT.json", + "sha256": "8f731e0d989273c00cd11fcb84e0da9bc8ef78412ce099656bd47b9b74008456", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/growing_cycle.py", + "sha256": "fef1dc7c979b39235b6ef41396835f8778548e702b4e085aec10e3d5cdcafe58", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json", + "sha256": "15d7b2143c360357a1f372926b1ff77378b48099118fa8b506d752daf7f33da5", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-RESULT.json", + "sha256": "9800893733d820aaae969716d106c2aefcaee3a36d5a4b42d614a244af4dc6f7", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/add_growing_exits.py", + "sha256": "67893edbbdfd380ccd9270954f9e76ae023c27787cad92bb0e5c6eaaafe997c6", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json", + "sha256": "88f5291e223d99a1d3a883b04f0caa7f7981e9a29086bd07fadc5694f95c241d", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-RESULT.json", + "sha256": "039950b8d9318c8bb4f61b31923e7843d241d0465a0a8705ba75003faed79854", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/complex/paired-five/independent/DELIVERY-FLAGS-PROOF.md", + "sha256": "a75a50aeae792a1b67c9b3b1cb5c95bfd6a3cf56cf1c3dfed304a7088118887e", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/NOTICE.md", + "sha256": "ec590608ddae58b227fe28040c29cd026699e2e5c26faad63da71a79dc50e159", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "historical/work/p518-next/source/research/nodal-pair-async/SOURCES.json", + "sha256": "e82688d40483797d7fb5599cde3502018f9bf56acf66a803a7c6a497e885d7db", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "public-source/NOTICE.md", + "sha256": "a92f49c5ced455160fbedcc8954e3c9255e3605e88ad12ae5a84f1c4302986f1", + "origin_exists": true, + "origin_bytes_equal": true + }, + { + "path": "public-source/SOURCES.json", + "sha256": "9e8182e6e659f4671fe0873e324b622cc871df7344157093df40476c8687be5f", + "origin_exists": true, + "origin_bytes_equal": true + } + ], + "public_clifford": { + "git_object": "e07a8a3f9f79c22113398a0c5dbbc7601f489b3e:research/direct-delivery504-global/vendor/clifford/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + } +} diff --git a/research/prepared-growing-carrier/review/controls.log b/research/prepared-growing-carrier/review/controls.log new file mode 100644 index 0000000000..750d118ecd --- /dev/null +++ b/research/prepared-growing-carrier/review/controls.log @@ -0,0 +1 @@ +PASS_PREPARED_CARRIER_CONTROLS 512 512 1066 diff --git a/research/prepared-growing-carrier/review/controls.py b/research/prepared-growing-carrier/review/controls.py new file mode 100644 index 0000000000..06bcda0e8f --- /dev/null +++ b/research/prepared-growing-carrier/review/controls.py @@ -0,0 +1,102 @@ +"""Check frozen pins, exit adapters, and finite decoder mutations.""" +import contextlib +import io +import json +import os +from pathlib import Path +import runpy +import shutil +import subprocess +import sys +import tempfile + +package = Path(sys.argv[1]).resolve() +output = Path(sys.argv[2]).resolve() +checks = [] +def require(value, label): + if not value: + raise RuntimeError(label) + checks.append(label) + +def reject(command, label, expected=None, env=None): + result = subprocess.run(command, capture_output=True, text=True, env=env) + require(result.returncode != 0, label) + if expected is not None: + require(expected in result.stdout + result.stderr, label + ': stated error') + +word = package / 'historical/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json' +exitword = package / 'historical/work/p518-next/complex/paired-five/GROWING-CYCLE-LEGACY-EXITS-WORD.json' +clifford = package / 'historical/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py' +with tempfile.TemporaryDirectory(prefix='prepared-carrier-controls-') as directory: + tmp = Path(directory) + reject([sys.executable,'-O','-B',str(package/'verify.py'),'--build',str(tmp/'optimized')], 'optimized wrapper rejected', 'without -O') + reject([sys.executable,'-O','-B',str(package/'replay.py')], 'optimized checker rejected', 'without -O') + occupied = tmp/'occupied' + occupied.mkdir() + (occupied/'sentinel').write_text('retained') + reject([sys.executable,'-B',str(package/'verify.py'),'--build',str(occupied)], 'occupied build rejected', 'build directory exists') + require((occupied/'sentinel').read_text() == 'retained', 'occupied directory unchanged') + copied = tmp/'package' + shutil.copytree(package,copied) + changed = copied/word.relative_to(package) + changed.write_bytes(changed.read_bytes() + b'\n') + reject([sys.executable,'-B',str(copied/'verify.py'),'--build',str(tmp/'mutated')], 'changed frozen source rejected', 'Source hash:') + reject([sys.executable,'-B',str(package/'replay.py'),'--word',str(changed),'--clifford',str(clifford),'--output',str(tmp/'bad-result.json')], 'changed word pin rejected') + corrupt = tmp/'clifford.py' + corrupt.write_bytes(clifford.read_bytes() + b'\n') + reject([sys.executable,'-B',str(package/'replay.py'),'--word',str(word),'--clifford',str(corrupt),'--output',str(tmp/'bad-clifford.json')], 'changed compiler pin rejected') + frozen_output = tmp/'existing.json' + frozen_output.write_text('retained') + reject([sys.executable,'-B',str(package/'replay.py'),'--word',str(word),'--clifford',str(clifford),'--output',str(frozen_output)], 'occupied receipt rejected', 'output file exists') + require(frozen_output.read_text() == 'retained', 'occupied receipt unchanged') + + old_argv = sys.argv + sys.argv = [str(package/'replay.py'),'--word',str(word),'--clifford',str(clifford),'--output',str(tmp/'base-result.json')] + try: + with contextlib.redirect_stdout(io.StringIO()): + g = runpy.run_path(str(package/'replay.py'),run_name='__main__') + finally: + sys.argv = old_argv + exits = json.loads(exitword.read_bytes()) + require(exits['events'][:len(g['w']['events'])] == g['w']['events'], 'exit extension keeps every base event') + require(exits['events'][len(g['w']['events']):] == [['monomial_exit',3+t,t] for t in range(8)], 'eight exits occur after every ADD') + columns = inverse_columns = 0 + for t,item in enumerate(exits['exit_adapters']): + require(item['stream'] == 3+t and item['port'] == g['w']['target_ports'][t], 'exit stream and port '+str(t)) + record = item['recipe'] + require(record['rank'] == 0 and record['right'] is None, 'exit rank and shape '+str(t)) + circuit = g['monomial'](record['left']) + cap = tuple(g['w']['final_frames'][3+t]) + goal = g['cx'].cgate(6,item['port']).adjoint().then(g['cx'].fourier(6)).circuit + for state in g['basis']: + old = g['apply'](g['canonical'][cap],state) + new = g['apply'](circuit,old) + require(new == g['apply'](goal,state), 'exit column '+str(t)+':'+str(columns%64)) + require(g['apply'](g['adjoint'](circuit),new) == old, 'exit inverse '+str(t)+':'+str(inverse_columns%64)) + columns += 1 + inverse_columns += 1 + require(g['apply'](circuit + [('phase',1)],g['basis'][0]) != g['apply'](circuit,g['basis'][0]), 'exit phase mutation '+str(t)) + + events = g['w']['events'] + at = next(i for i,e in enumerate(events) if e[0] == 'add') + event = events[at] + start = [g['zero']]*11 + start[event[2]] = g['basis'][0] + expected = g['replay'](start) + saved = event[3] + event[3] = -saved + require(g['replay'](start) != expected, 'ADD sign mutation changes physical endpoint') + event[3] = saved + child = next(e for e in events if e[0] == 'child') + key = tuple(child[2]),tuple(child[3]) + start = [g['zero']]*11 + start[child[1]] = g['basis'][0] + expected = g['replay'](start) + saved = g['recipes'][key] + g['recipes'][key] = saved + [('phase',1)] + require(g['replay'](start) != expected, 'child phase mutation changes physical endpoint') + g['recipes'][key] = saved + +result = {'status':'PASS_PREPARED_CARRIER_CONTROLS','exit_columns':columns,'exit_inverse_columns':inverse_columns,'all_checks':len(checks),'checks':checks} +output.write_text(json.dumps(result,indent=2)+'\n') +print('PASS_PREPARED_CARRIER_CONTROLS',columns,inverse_columns,len(checks)) diff --git a/research/prepared-growing-carrier/review/replay.log b/research/prepared-growing-carrier/review/replay.log new file mode 100644 index 0000000000..f68f266c0f --- /dev/null +++ b/research/prepared-growing-carrier/review/replay.log @@ -0,0 +1,4 @@ +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /private/tmp/prepared-carrier-independent-review-20261023/work/p518-next/complex/paired-five/growing_cycle.py +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /private/tmp/prepared-carrier-independent-review-20261023/work/p518-next/complex/paired-five/add_growing_exits.py +Run: /opt/homebrew/opt/python@3.14/bin/python3.14 -E -B /Users/aliromman/Projects/IntegerMultiplicationBounds/work/project-final-cleanup-20261022/early-projects-audit/packages/prepared-growing-carrier/replay.py --word /private/tmp/prepared-carrier-independent-review-20261023/work/p518-next/complex/paired-five/GROWING-CYCLE-WORD.json --clifford /private/tmp/prepared-carrier-independent-review-20261023/work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py --output /private/tmp/prepared-carrier-independent-review-20261023/independent-result.json +PASS_PREPARED_GROWING_CARRIER 704 55 8 diff --git a/research/prepared-growing-carrier/verify.py b/research/prepared-growing-carrier/verify.py new file mode 100644 index 0000000000..f889a23474 --- /dev/null +++ b/research/prepared-growing-carrier/verify.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Repeat the saved construction and independent finite check.""" +import argparse +import hashlib +import json +from pathlib import Path +import shutil +import subprocess +import sys + +if not __debug__: + raise SystemExit("Run this verifier without -O. Historical sources use assert.") +ROOT = Path(__file__).resolve().parent + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--build", type=Path, required=True) + args = parser.parse_args() + build = args.build.resolve() + require(not build.exists(), "The build directory exists.") + manifest = json.loads((ROOT / "SOURCE-MANIFEST.json").read_text()) + for item in manifest["files"]: + require(hashlib.sha256((ROOT / item["package"]).read_bytes()).hexdigest() + == item["sha256"], "Source hash: " + item["package"]) + shutil.copytree(ROOT / "historical", build) + primary = build / "work/p518-next/complex/paired-five" + independent = build / "work/autonomous-kappa-run/growing-cycle-independent" + clifford = build / "work/p518-next/source/research/nodal-pair-async/inputs/work/odd-stages/clifford_exact.py" + stages = [] + def run(name, command): + print("Run:", " ".join(map(str, command)), flush=True) + with (build / (name + ".stdout.log")).open("w") as out, (build / (name + ".stderr.log")).open("w") as err: + subprocess.run(list(map(str, command)), stdout=out, stderr=err, check=True) + stages.append(name) + run("construct", [sys.executable, "-E", "-B", primary / "growing_cycle.py"]) + run("exits", [sys.executable, "-E", "-B", primary / "add_growing_exits.py"]) + for name in ["GROWING-CYCLE-WORD.json", "GROWING-CYCLE-RESULT.json", + "GROWING-CYCLE-LEGACY-EXITS-WORD.json", "GROWING-CYCLE-LEGACY-EXITS-RESULT.json"]: + frozen = ROOT / "historical/work/p518-next/complex/paired-five" / name + require((primary / name).read_bytes() == frozen.read_bytes(), "Saved construction: " + name) + result_path = build / "independent-result.json" + run("independent", [sys.executable, "-E", "-B", ROOT / "replay.py", "--word", + primary / "GROWING-CYCLE-WORD.json", "--clifford", clifford, + "--output", result_path]) + actual = json.loads(result_path.read_text()) + expected = json.loads((independent / "RESULT.json").read_text()) + for value in [actual, expected]: + value.pop("checker_sha256") + require(actual == expected, "Historical independent result") + result = {"status": "PASS_PREPARED_GROWING_CARRIER", "stages": stages, + "independent": actual, + "source_manifest_sha256": hashlib.sha256((ROOT / "SOURCE-MANIFEST.json").read_bytes()).hexdigest(), + "portable_checker_sha256": hashlib.sha256((ROOT / "replay.py").read_bytes()).hexdigest(), + "legacy_exits": json.loads((primary / "GROWING-CYCLE-LEGACY-EXITS-RESULT.json").read_text())} + (build / "receipt.json").write_text(json.dumps(result, indent=2) + "\n") + print("PASS_PREPARED_GROWING_CARRIER 704 55 8") + + +if __name__ == "__main__": + main()