diff --git a/research/shared-wire-split-composition/CONSTRUCTION-REVIEW.md b/research/shared-wire-split-composition/CONSTRUCTION-REVIEW.md new file mode 100644 index 0000000000..3230ed0dfb --- /dev/null +++ b/research/shared-wire-split-composition/CONSTRUCTION-REVIEW.md @@ -0,0 +1,111 @@ +# Independent review of the composed wire and two splits + +This review checks the construction's causal and linear interfaces. Complete +word endpoints, signed invoices, native Clifford lowering, scalar grids, +callers and the outer bound have separate checks. The source construction is +conditional on the framework premises declared by #6936 and #6937. + +## Composition and causal ordering + +The dependency graph uses three access classes. ADDs sharing only a +destination commute, as do ADDs sharing only a source. Every read/write +conflict and every MOVE, SCALE, INIT, CLEAR or COPY destination is ordered. +Consecutive noncommuting access runs suffice by transitivity. A topological +ordering therefore preserves operand versions and the frame at each scalar +access while allowing commuting runs to reorder. + +After the construction's role renumberings, the retained branch-exclusive +pieces contain 236 events from #6937's `wh` word and 46 from #6936's split +word. Their register footprints are disjoint. Shared literal events have equal +multiplicities in both sources, so occurrence-token matching does not conflate +different multiplicities. The checker reconstructs these facts from the two +source words. They are specific to this composition; arbitrary separately +correct rewrites need not compose. + +## The additional wire + +The contacts `449 += 226` and `990 -= 1206` are replaced by dirty helper 1477 +at frames `3,260,724,246`, whose dimensions are `0,3,6,8`. Its eight ADDs +realize exactly those two shears and restore its arbitrary independent input. +The checker verifies all five independent input columns of the local map. + +Sources 226 and 1206 have no logical writes between their paired helper +loads. Targets 449 and 990 have no reads between their paired helper reads. +MOVEs preserve logical values, and other additions into a target commute +with the module. The four partners are distinct, the helper frames are +strictly nested, and each actual scalar contact occurs at a common frame. +These conditions justify the local identity despite intervening events. + +The helper contribution to `P-T` is `2 H3 + H2 - H8`, with zero rank mass. +Merging each pair of partner MOVEs preserves that partner's rank mass. The +complete paid histogram and ordinary allowance are checked separately. + +## The two source-bound splits + +Let `P` map independent public inputs to the current fields, with owned +entries initially zero. Let `S` be the suffix, and `T=SP` the original public +endpoint. On the selected helper family, `T` is an independent identity, so +it commutes with a boundary basis change `B` supported on that family. +The split witnesses satisfy + +`aP=c`, `Sb=d`, `ab=1`, `cd=1`. + +The supports of `a,b` share the cut frame, while those of `c,d` share entry +and exit frames. Choose `C` with pivot row `a` and inverse pivot column `b`, +and `B` with pivot row `c` and inverse pivot column `d`. Then + +`P'=CPB^-1`, `S'=BSC^-1` + +have `e_p^T P'=e_p^T`, `S'e_p=e_p`, and `S'P'=T`. +Set `J=I-e_p e_p^T`. Retain the old pivot prefix output in the head field, +and substitute the independent new tail input `z` at the suffix pivot. The +suffix output becomes + +`S'(JP'x+e_p z)=Tx-e_p x_p+e_p z`. + +The head output is `x_p`, the renamed tail output is `z`, and all other +outputs are unchanged. Thus no independent public value is copied or erased. +All scalar basis operations remain charged ordinary work. + +For `c_p!=0`, the basis constructor first makes row `p` equal to `c` and +then sets row `j=e_j^T-d_j c` for `j!=p`. This gives `Bd=e_p` from `cd=1`, +and determinant `c_p!=0`. No extra factor of `c_p` or `d_p` is missing. +When `c_p=0`, an initial coordinate swap, applied to both `c,d`, gives the +same required row and inverse-column properties. The second witness exercises +that swap case. + +| Pivot | Reconstructed source word | Cut after event | Frame | +|---|---|---:|---:| +| 759 | `extra_wire_0.json.gz` | 42531 | 660 | +| 450 | `split759.json.gz` | 37192 | 595 | + +The cuts are after the stated zero-based events. Both actual cut-witness +supports are public, and all entry, exit and cut frame conditions are checked. + +## Independent replay + +`independent_construction.py` imports no construction or extraction code. +It propagates a single covector backwards through the prefix to check +`aP=c`, and a single vector forwards through the suffix to check `Sb=d`. +This is dual to the constructor's forward-prefix/backward-suffix full-row +extraction. The checker also verifies both pairings, basis rows and inverse +columns, all support frames and the new wire's causal conditions. Altered +prefix and suffix witnesses are rejected. Checks remain active under `-O`. + +After cold reconstruction into a temporary build directory, run: + +```sh +python3 -I -O -B independent_construction.py \ + --package-root /path/to/package --build-dir /path/to/temporary-build +``` + +The package must contain `data/main_6936.json.gz` and `data/wh_6937.json.gz`. +The build directory must contain `composed.json.gz`, `extra_wire_0.json.gz`, +`split759.json.gz`, `split759.proof.json` and `split759_450.proof.json`. +The checker writes nothing and prints source/container and canonical-payload +hashes with the marker `PASS_CONSTRUCTION_INTERFACE_REVIEW`. + +Credit: DreamingOfClouds' #6936/#6937 source constructions and Ali Romman's +#5599 independent-helper basis mechanism. The independent proof and checker +were prepared with substantial OpenAI Codex assistance. This is separate AI +review, not human or formal-kernel acceptance. Apache-2.0. diff --git a/research/shared-wire-split-composition/CONSTRUCTION.md b/research/shared-wire-split-composition/CONSTRUCTION.md new file mode 100644 index 0000000000..863cb8543e --- /dev/null +++ b/research/shared-wire-split-composition/CONSTRUCTION.md @@ -0,0 +1,81 @@ +# Shared-wire composition and two newly enabled helper splits + +This package constructs one exact native word from the frozen words of #6936 and #6937. Its canonical JSON SHA-256 is `91429a6b96729292a8764836e00c87a6f7cd3b76f05159033f4867f69a98d097`. The compressed artifact is `data/final.json.gz`; reproducibility compares the decompressed JSON, not gzip headers. + +## Changes and attribution + +1. Compose the sixteen shared helper wires in #6937's `wh` with the two additional plain splits present in #6936. The unsplit seven main wires and sixteen helper wires are predecessor work, not discoveries of this package. The composition is new here: #6937 explicitly left it open. Register renaming reserves 1459 and 1460 for #6936's tails and shifts the `wh` additions by two. The resulting word has 71,228 events and 1,477 public fields. +2. Replace a further matched pair of direct contacts at frame 709 by one shared wire, public field 1477. The contacts are `449 += 226` and `990 -= 1206`. The new wire visits frames `3, 260, 724, 246`. Its credit is rank 8. Four pairs of consecutive partner MOVEs merge; the exact paid histogram includes those mergers and the wire's three MOVEs. This produces 71,233 events and 1,478 public fields. +3. Split helper 759 at frame 660, replacing its rank-9 credit by ranks 7 and 2. Split helper 450 at frame 595, replacing its rank-9 credit by ranks 1 and 8. These two new directions are enabled by #6937's sixteen wires, and already exist in `wh`; the seventeenth wire is not necessary to enable them. Both compose with the entire preceding construction. + +The final word has 71,261 events, 1,480 public fields, 1,080 helpers, 51 owned fields, 54 owned lifetimes, peak owned count 43, and the same 23 owned rises of rank mass 56 as #6936. The 1,095-frame table and 400 main fields are unchanged. Event counts are 61,180 ADD, 1 COPY, 3,662 SCALE, 6,310 MOVE, 54 INIT and 54 CLEAR. + +The construction builds on DreamingOfClouds' #6936/#6937 words and handoff, Ali Romman's helper-split lemma (#5599), CubeJerry's helper-split native-word applications (#6916), CubeJerry's caller blocks and owned-rise work (#6912/#6914), unpaidmoon's phase test (#6930), and icekylinx's odd-grid precedent (#104). Original authors and notices remain attached to frozen sources. New construction and checks were developed with substantial OpenAI assistance. + +## Causal composition + +Each event has, for every touched register, one of three access classes: source-read R, ADD destination A, or exclusive M. MOVE, SCALE, INIT, CLEAR and COPY destination are exclusive. Consecutive R accesses commute with each other; consecutive A accesses commute with each other. Every pair across consecutive unlike runs is ordered. `compose.py` forms the union of these dependency edges from the two source words after exact register renaming and event selection, then finds a topological order. No access is moved through an incompatible access. + +The sixteen-wire branch's noncommon retained events and the two-split branch's noncommon retained events have disjoint register footprints. All common literal events retain the same multiplicity. Independent cross-review checked those facts separately. The generated word is then replayed over exact fractions on every independent public input, so all new helper inputs, not merely zero helper initializations, are tested. + +For the seventeenth wire, write Y=449, X=226, U=990, V=1206, H=1477. At the four rests, its ADDs are: + +| Rest | ADDs in order | +|---|---| +| 3 | Y += H; H += V | +| 260 | U -= H; H -= X | +| 724 | H -= V; Y -= H | +| 246 | H += X; U += H | + +The exact transfer is Y += X, U -= V, H unchanged. The generator places each partner access inside its uninterrupted compatible access run and preserves every remaining access dependency. It merges only the four partner MOVE pairs whose intervening direct contacts disappear. + +## Split identity and exact witnesses + +Let P be the prefix map and S the suffix map at a common cut frame. Suppose aP=c and Sb=d, where c and d are supported on helpers sharing the same entry and exit frames, with a·b=c·d=1. Choose boundary B0 and cut BC with pivot row c and a, respectively, and inverse pivot column d and b, respectively. The normalized prefix BC P B0^-1 has pivot row equal to the original independent pivot input. The normalized suffix B0 S BC^-1 has pivot column equal to the corresponding independent pivot output. Terminating that pivot at the cut and replacing subsequent uses by a fresh independent tail therefore yields two independent identity helpers. No MOVE is added; the target rank splits additively. + +`basis(c,d,p,f)` constructs these elementary changes of basis. After an optional same-frame swap, its pivot row becomes c; each other row j is changed to e_j−d_j c. Thus B d=e_p. The coefficient at the chosen pivot is a unit for both concrete witnesses. The generator recomputes c and d from exact prefix and reverse suffix maps rather than accepting the certificate vectors on trust. + +For helper 759, immediately after event 42531 of the 71,233-event word: + +- cut frame 660, rank 7; +- a=e759, b=e759−e758; +- c=e759−e1472, d=−e758−e1472. + +For helper 450, immediately after event 37192 of the first-split word: + +- cut frame 595, rank 1; +- a=e450, b=e450−e1207; +- c=e1050+2e1070+e1466; +- d=4e1075−e1053+e1466. + +Both have a·b=c·d=1 exactly. All cut supports are public. No zero scratch extension or new owned CLEAR is used. The complete vectors and emitted changes of basis are in `data/*proof.json`. + +## Exact native invoice delta + +Relative to #6936, per native call: + +| Rank | Helper-credit change | Paid-MOVE change | +|---:|---:|---:| +| 1 | +1 | −34 | +| 2 | +1 | −50 | +| 3 | 0 | +30 | +| 4 | 0 | +23 | +| 5 | 0 | +16 | +| 6 | +1 | +2 | +| 7 | +4 | 0 | +| 8 | +5 | 0 | +| 9 | +7 | 0 | + +Both rank masses increase by 140 per call; the complete 18-call surplus remains 1520. The complete kernel moment D falls from 422226.7185002353… to 421882.370033337478… on the original caller. The QUERY-only E-free caller of #6980 removes 192 rank-1 targets and 192 rank-1 paid jobs together, leaving the crossing unchanged. Independent full caller/invoice/interval/precision review gives crossing `0.00363005817468836708593357676489689967…`, conservative ordinary total 826790496, and proposed claimed/tested prices `.00363005817` / `.00363005817007`. These complete caller and outer checks are included in this package; `native-accounting.json` explicitly retains the original-caller comparison for attribution. + +## Reproduction and limits + +Run `python -B verify.py`. This cold-reconstructs all four stages from the two frozen input words, checks exact cut vectors, compares final canonical payloads, and runs the predecessor's exact odd verifier with S=1125. `python -B chart_delta.py data/final.json.gz` lowers all 73 newly introduced native chart pairs (71 MOVE pairs and two helper endpoints), checking exact rank, signed operator and global phase at width 1; 61 old pairs retire. The same-frame scalar proof and exact symbolic endpoint do not constitute an all-width native-provider admission. + +The construction inherits odd native scalars with exact child returns and prefix grid S=1125, owned ascent A6 and peak 43, owned erasure, per-port/reducible roots, helper accounting, LAMBDA ordinary pricing, the compiler, precision tape, analytic recovery, and native-all-columns obligations. It does not discharge these assumptions or update the selected result. The final caller integration removes the empty-root-field credit premise; the paired QUERY-only BIT dependency is pinned at commit `d777f3a0aa2878bea0478918923dabcf86b9878b` in `INDEPENDENT-SOURCES.json`. + +## Open next questions + +1. Can further causal changes expose additional pure prefix/suffix pairings after these two splits? The remaining chronological search described in the handoff is finite and scoped, not a universal obstruction. +2. Can a generalized split with nontrivial a·b be realized with ordinary zero cleanup and a complete native invoice? No such witness is used here. +3. Can combs with more than four rests exceed the one-wire opportunities while retaining exact independent helper restoration? Fixed four-rest sharing bounds do not exclude that changed itinerary. diff --git a/research/shared-wire-split-composition/FULL-RESULT.json b/research/shared-wire-split-composition/FULL-RESULT.json new file mode 100644 index 0000000000..ff3256f0d3 --- /dev/null +++ b/research/shared-wire-split-composition/FULL-RESULT.json @@ -0,0 +1,626 @@ +{ + "status": "PASS_INDEPENDENT_FULL_GATE", + "word_sha256": "2b94953dc14a122e3ef089633f05b58ec689ec5156feb7c784ed3e137dc01883", + "word_canonical_json_sha256": "91429a6b96729292a8764836e00c87a6f7cd3b76f05159033f4867f69a98d097", + "caller_sha256": "3828d53e80ea97e8b866320f081af20b6b93bfebd58b95b56b85a7afe151af5e", + "BIT_receipt_sha256": "a46b6c6040f75184cab5467656811ad988c216e3bc8e44d595a5015b6e49620b", + "native": { + "public": 1480, + "events": 71261, + "paid": { + "1": 4075, + "2": 828, + "3": 811, + "4": 241, + "5": 320, + "6": 17, + "7": 12, + "8": 6 + }, + "helpers": { + "1": 13, + "2": 18, + "3": 44, + "4": 215, + "5": 68, + "6": 42, + "7": 18, + "8": 67, + "9": 595 + }, + "rises": { + "1": 10, + "2": 4, + "3": 1, + "4": 6, + "5": 1, + "6": 1 + }, + "owned_peak": 43, + "lifetimes": 54, + "bad_inputs": [] + }, + "caller": { + "bad_outputs": [], + "max_terms": 2713, + "caller_mass_bound": "16246698892210214036146399419475929893435/256", + "caller_mass_ceiling_bits": 126, + "caller_denominator_height_bound": 163 + }, + "invoice": { + "T": { + "1": 234, + "2": 324, + "3": 792, + "4": 3870, + "5": 1224, + "6": 756, + "7": 324, + "8": 1206, + "9": 11126, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 416, + "145": 208 + }, + "P": { + "1": 73766, + "2": 14904, + "3": 14598, + "4": 4338, + "5": 5760, + "6": 306, + "7": 216, + "8": 812, + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416 + }, + "S": 1520, + "raw_crossing": "0.0036300581746883670859335767648968996726793133388562630916210931832", + "empty_root_credits": 0, + "no_E_credit_crossing": "0.0036300581746883670859335767648968996726793133388562630916210931832" + }, + "ordinary": { + "scalar_upper": 1777040, + "init_clear_allowance": 216, + "route_items": { + "moves": 6310, + "helper_boundary": 2160, + "first_main_boundary": 208, + "second_main_boundary": 192, + "first_main_adapter": 416, + "second_main_adapter": 384, + "owned_lifetime": 216 + }, + "routing": 9886000, + "caller_items": { + "A": { + "envelope": 124674048, + "thin": 6144, + "field_boundary": 94848, + "output_routes": 229056000, + "idle_routes": 185472000, + "query_routes": 1152000 + }, + "B": { + "envelope": 19893760, + "thin": 512, + "field_boundary": 7904, + "output_routes": 19088000, + "idle_routes": 20064000, + "query_routes": 96000 + } + }, + "caller_total": 599605216, + "raw_upper": 809539936, + "per_input_conversion": 2770560, + "lambda_second_charge": 14480000, + "conservative_total": 826790496, + "margin_to_billion": 173209504, + "odd_divisions": { + "ADD": 4079, + "SCALE": 64 + }, + "lambda_paid_rank1_would_reduce_S_by": 14480 + }, + "gate": { + "claim": "363005817/100000000000", + "tested": "363005817007/100000000000000", + "raw_bracket": [ + "363005817468836708593357676489/100000000000000000000000000000000", + "36300581746883670859335767649/10000000000000000000000000000000" + ], + "moment_margins": { + "363005817468836708593357676489/100000000000000000000000000000000": [ + "143370274515724027741089632165906111282934104813488319/50000000000000000000000000000000000000000000000000000000000000000000000000000000", + "143370274515724027741089632165906111282934104834333239/50000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "36300581746883670859335767649/10000000000000000000000000000000": [ + "-1006602957204708337808018522712921809914063961090731/781250000000000000000000000000000000000000000000000000000000000000000000000000", + "-16105647315275333404928296363406748958625023372284901/12500000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "363005817007/100000000000000": [ + "95966372276794887878283267654930767608569249487913734701480203976232914753/50000000000000000000000000000000000000000000000000000000000000000000000000000000", + "5997898267299680492392704228433172975535578092994608418842512748515866429/3125000000000000000000000000000000000000000000000000000000000000000000000000000" + ] + }, + "moment_margin_float": { + "363005817468836708593357676489/100000000000000000000000000000000": [ + 2.8674054903144806e-27, + 2.8674054903144806e-27 + ], + "36300581746883670859335767649/10000000000000000000000000000000": [ + -1.2884517852220266e-27, + -1.2884517852220266e-27 + ], + "363005817007/100000000000000": [ + 1.9193274455358978e-06, + 1.9193274455358978e-06 + ] + }, + "derivative_upper": -408610.0691341, + "alpha": [ + 0.9999999999939584, + 0.9999999999939584 + ], + "gamma": [ + 0.9497103828349815, + 0.9497103828349815 + ], + "delta": [ + 0.875936906800602, + 0.875936906800602 + ], + "minimum_log_power": 2227, + "written_log_power": 2228, + "compiler_gap": "1/100000000000000", + "H": "14174600000000000000", + "BIT_pin": "376669/100000000", + "BIT_margin": "13663182993/100000000000000", + "outer": { + "strict_count": 54, + "functional_count": 4, + "minimum_margin": "1/1000000000000000", + "BIT_just_below_effective_rejected": true + }, + "input_lift": { + "margins": { + "363005817/100000000000": [ + "1238716309950061562203702429077032912697251276521141313765754324758588382567/1000000000000000000000000000000000000000000000000000000000000000000000000000000", + "123871630995006156220370242907703291269725127652114131376575432475858838258691/100000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "363005817007/100000000000000": [ + "60484194822897140795415327676385782397798251230369625690875365031985022291/48828125000000000000000000000000000000000000000000000000000000000000000000000", + "774197693733083402181316194257738014691817615748731208843204672409408285337/625000000000000000000000000000000000000000000000000000000000000000000000000000" + ] + }, + "interval_kappa_cap": "376669/100000000", + "derivative_upper_on_required_interval": "-2299831290525933154178526076272396899996972093654613095735772838275432653960006518819/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "source_BIT_wide_crude_bound_would_be": "-2299831290525933154178526076272396899996972093654613095735772838275432653960006518819/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + "BIT_dependency": "Paired E-free BIT .00385248, bootstrapped from selected .0034; price conservatively weakened to .00376669. Retained native provenance does not import its old ordinary bootstrap.", + "precision": { + "method": "attributed source-engine reuse", + "helper_census_substitutions": [ + [ + "word[\"public\"] - len(mains) == 1061", + "word[\"public\"] - len(mains) == 1080" + ], + [ + "fresh_arbitrary_helpers=18 * 1061", + "fresh_arbitrary_helpers=18 * 1080" + ] + ], + "common_grid": { + "word": { + "odd_scale_lcm": 1125, + "dyadic_height": 24, + "maximum_scaled_mass": "1636346757402225/16384", + "mass_witness": [ + 63465, + "stored add" + ], + "numerator_bits": 24, + "coefficient_visits": 14087319 + }, + "caller": { + "maximum_mass": "16246698892210214036146399419475929893435/256", + "pre_joint_mass": "758143798823020519902612486795530419693/64", + "denominator_height": 163, + "pre_joint_height": 154 + }, + "context_height": 178, + "context_mass_bits": 161, + "context_c": 356 + }, + "rounded_envelope": { + "native": { + "census": { + "events": 71261, + "public": 1480, + "owned_labels": 51, + "lifetimes": 54, + "peak_owned": 43, + "opcodes": { + "ADD": 61180, + "SCALE": 3662, + "MOVE": 6310, + "INIT": 54, + "COPY": 1, + "CLEAR": 54 + }, + "scalars": { + "integer": 38902, + "dyadic": 60700, + "noninteger": 25941, + "odd": 4143 + }, + "max_numerator": 14729531, + "numerator_bits": 24, + "max_denominator": 393216, + "denominator_bits": 19 + }, + "bounds": { + "M": { + "exact": "43054641548846615602104987524321069905599046554250600543037273660730652457482272541839730515070648167947373736069817/313353572444111882083840819200000000000000000", + "strict_power_of_two": 237, + "witness": { + "cut": 71225, + "register": 1443, + "factor": "1", + "kind": "stored" + } + }, + "Sigma": { + "exact": "49042140230293998707783330736939147773356911008711453370094821836759890496678207084168977527731890504904732776001/1224037392359812039390003200000000000000000", + "strict_power_of_two": 235, + "witness": { + "cut": 71225, + "register": 1443, + "factor": "1", + "kind": "stored" + } + }, + "Gamma": { + "exact": "49042140230293998707783330736939147773356911008711453370094821836759890496678207084168977527731890504904732776001/1224037392359812039390003200000000000000000", + "strict_power_of_two": 235, + "witness": { + "cut": 71261, + "register": 1443, + "factor": "1", + "kind": "public-return" + } + } + }, + "independent_adjoint": { + "M": { + "entrance_mass": "43054641548846615602104987524321069905599046554250600543037273660730652457482272541839730515070648167947373736069817/313353572444111882083840819200000000000000000", + "residual_mass": "49042140230293998707783330736939147773356911008711453370094821836759890496678207084168977527731890504904732776001/1224037392359812039390003200000000000000000", + "active_residual_sites": 24535 + }, + "Sigma": { + "entrance_mass": "43054641548846615602104987524321069905599046554250600543037273660730652457482272541839730515070648167947373736069817/313353572444111882083840819200000000000000000", + "residual_mass": "49042140230293998707783330736939147773356911008711453370094821836759890496678207084168977527731890504904732776001/1224037392359812039390003200000000000000000", + "active_residual_sites": 24535 + }, + "Gamma": { + "entrance_mass": "43054641548846615602104987524321069905599046554250600543037273660730652457482272541839730515070648167947373736069817/313353572444111882083840819200000000000000000", + "residual_mass": "49042140230293998707783330736939147773356911008711453370094821836759890496678207084168977527731890504904732776001/1224037392359812039390003200000000000000000", + "active_residual_sites": 24535 + } + } + }, + "caller": { + "bounds": { + "M_caller": { + "exact": "1683307283016999532839217702665847040", + "strict_power_of_two": 121, + "witness": { + "event": 3049, + "register": 38, + "cut": 3050, + "factor": "1", + "kind": "stored" + } + }, + "Sigma_caller": { + "exact": "2695731259664671076054039120630302290807274246048000922379732339422877337040436527677947335528513405243008146700596521469583655508389497624737901/489614956943924815756001280000000000000000", + "strict_power_of_two": 342, + "witness": { + "event": 3049, + "register": 38, + "cut": 3050, + "factor": "1", + "kind": "stored" + } + }, + "M_joint_entrance": { + "exact": "363421601940370671219209686545270656", + "strict_power_of_two": 119, + "witness": { + "event": 2958, + "register": 39, + "cut": 2958, + "factor": "1", + "kind": "stored" + } + }, + "E_joint_entrance": { + "exact": "107778012552827346405847104423459712044095345392494902511580934493198395726452173903091136141479556412668758099062114547378357292942868822744901/90669436471097188102963200000000000000000", + "strict_power_of_two": 340, + "witness": { + "event": 2958, + "register": 39, + "cut": 2958, + "factor": "1", + "kind": "stored" + } + }, + "M_context": { + "exact": "122242084395705304046405775033171708619552680284104135118685413362275751985828880546444259743657610652201504084362728377506070228340477415557984198359/2448074784719624078780006400000000000000000", + "strict_power_of_two": 355, + "witness": { + "event": 2958, + "register": null, + "cut": 2959, + "factor": "1", + "kind": "stored" + } + }, + "Sigma_context": { + "exact": "4640343697309072360426864039639398425323876990095744925675818513841731441516414528047219185461016923003250117000953839801113974781586560069270101516483314570192217778780212646110494347147158453407548505366474302684327846603203817454023224308817907917716753117/28411591829712752729879633148004541902111328635453440000000000000000000000000000000000", + "strict_power_of_two": 576, + "witness": { + "event": 2958, + "register": null, + "cut": 2959, + "factor": "1", + "kind": "stored" + } + }, + "Gamma_context": { + "exact": "5042543099912900584634479237866816375715153730780575915762659942083670533015529220412005947331597741154822401957926231065984100615105030759374251/26112797703675990173653401600000000000000000", + "strict_power_of_two": 337, + "witness": { + "register": 75, + "cut": 3095, + "factor": "1", + "kind": "public-return" + } + } + }, + "sites": { + "ADD": 2108, + "noninteger_scalar": 297, + "SWAP": 455, + "LAMBDA": 226, + "SCALE": 180, + "J": 18, + "IDLE_ONE": 100, + "QUERY": 8 + }, + "joint_entries": [ + { + "event": 21, + "stage": 1, + "entrance_mass": "3328", + "entrance_defect": "1" + }, + { + "event": 66, + "stage": 2, + "entrance_mass": "34560", + "entrance_defect": "49042140230293998707783330736939147773356911008711453370094821836760832515855367195514492074194610504904732776001/489614956943924815756001280000000000000000" + }, + { + "event": 117, + "stage": 3, + "entrance_mass": "267520", + "entrance_defect": "2108812029902641944434683221688383354254347173374592494914077338980715486297053216127015522617552891710903509368043/2448074784719624078780006400000000000000000" + }, + { + "event": 168, + "stage": 4, + "entrance_mass": "2019072", + "entrance_defect": "16134864135766725574860715812452979617434423721866068158761196384294311089285022776971524715986684776113657083304329/2448074784719624078780006400000000000000000" + }, + { + "event": 219, + "stage": 5, + "entrance_mass": "15211776", + "entrance_defect": "121771634191819998791426010219819903921245210034630538717945442620677125605071915223480861318556927323678451482810483/2448074784719624078780006400000000000000000" + }, + { + "event": 270, + "stage": 6, + "entrance_mass": "114566912", + "entrance_defect": "61155548867176616388605813428963117273376068027863182352508242830440747308502136039494950287335010179616201771673247/163204985647974938585333760000000000000000" + }, + { + "event": 321, + "stage": 7, + "entrance_mass": "862823680", + "entrance_defect": "55270492039541336543671813740530419540573238706817807948096864210029448446783203903688522813284669603827633838553127/19584598277756992630240051200000000000000" + }, + { + "event": 372, + "stage": 8, + "entrance_mass": "6498041600", + "entrance_defect": "17343801934583702937006282698449266549195444935141814195787403837392302105160106707005775535026788812150063650965529651/816024928239874692926668800000000000000000" + }, + { + "event": 423, + "stage": 9, + "entrance_mass": "48937594112", + "entrance_defect": "130618492994383424100319168601448567605524383282225023925736957816275920839262910447295239922807026593129730942471631393/816024928239874692926668800000000000000000" + }, + { + "event": 2166, + "stage": 10, + "entrance_mass": "2869851357661739006410624", + "entrance_defect": "11489803575218235511805117697701134113480660349112494261608661506376677033853089654283857079578213645945778615288171052342042347438883/1224037392359812039390003200000000000000000" + }, + { + "event": 2299, + "stage": 11, + "entrance_mass": "87987819921824138957327936", + "entrance_defect": "704540160391535167843708995319467954787175342007676796733895854915431984893652029128155530309027214455306114647477499608976106912051141/2448074784719624078780006400000000000000000" + }, + { + "event": 2399, + "stage": 12, + "entrance_mass": "2447027986812579413618418560", + "entrance_defect": "19593956207157814585542099171637083484400289253657733243947609615236697108879492679286631668502688595221749356838816871373216247639366057/2448074784719624078780006400000000000000000" + }, + { + "event": 2497, + "stage": 13, + "entrance_mass": "56556669663990103089614108160", + "entrance_defect": "452863193470205634175612401907111710258604953834122059277658562590271554966057927264305384550768184359581167352871415005030156204997611301/2448074784719624078780006400000000000000000" + }, + { + "event": 2593, + "stage": 14, + "entrance_mass": "1300380918848168161545814930560", + "entrance_defect": "3470823506970942577122482455505317346976083624568833486482335851317910662944605588051016217735895449724882541061841788939584077965156769293/816024928239874692926668800000000000000000" + }, + { + "event": 2687, + "stage": 15, + "entrance_mass": "29898949589421721863235314186112", + "entrance_defect": "47881651705850994435603572472068300623418535488305640434986615656568053510979073367652948339387998828267057820442281512497536623442861545957/489614956943924815756001280000000000000000" + }, + { + "event": 2779, + "stage": 16, + "entrance_mass": "687449590445880987173716162586496", + "entrance_defect": "1834859435257293951043017457492339542930966032377072331232135474286258896976750257293264536356508338835158105274638010984045768632094442180689/816024928239874692926668800000000000000000" + }, + { + "event": 2869, + "stage": 17, + "entrance_mass": "15806139033147704339825284871898752", + "entrance_defect": "126563650963042505306559371472874199746795243381745323416566763578522197786037370617062186029137428285486537969321429016908077136833032889247301/2448074784719624078780006400000000000000000" + }, + { + "event": 2958, + "stage": 18, + "entrance_mass": "363421601940370671219209686545270656", + "entrance_defect": "107778012552827346405847104423459712044095345392494902511580934493198395726452173903091136141479556412668758099062114547378357292942868822744901/90669436471097188102963200000000000000000" + } + ], + "independent_adjoint": { + "M_caller": { + "entrance_mass": "1683307283016999532839217702665847040", + "residual_mass": "2695731259664671076054039120630302290807274246048000922379732339422877337040436527677947335528513405243008146700596521469583655508389497624737901/489614956943924815756001280000000000000000", + "joint_coefficient": "274838256141142176415070287809505/2", + "primitive_coefficient": "104781665096099932454228246133920343" + }, + "Sigma_caller": { + "entrance_mass": "1683307283016999532839217702665847040", + "residual_mass": "2695731259664671076054039120630302290807274246048000922379732339422877337040436527677947335528513405243008146700596521469583655508389497624737901/489614956943924815756001280000000000000000", + "joint_coefficient": "274838256141142176415070287809505/2", + "primitive_coefficient": "104781665096099932454228246133920343" + }, + "M_joint_entrance": { + "entrance_mass": "363421601940370671219209686545270656", + "residual_mass": "107778012552827346405847104423459712044095345392494902511580934493198395726452173903091136141479556412668758099062114547378357292942868822744901/90669436471097188102963200000000000000000", + "joint_coefficient": "59336854494143543914675236360327/2", + "primitive_coefficient": "22622085086540611235550148326673690" + }, + "E_joint_entrance": { + "entrance_mass": "363421601940370671219209686545270656", + "residual_mass": "107778012552827346405847104423459712044095345392494902511580934493198395726452173903091136141479556412668758099062114547378357292942868822744901/90669436471097188102963200000000000000000", + "joint_coefficient": "59336854494143543914675236360327/2", + "primitive_coefficient": "22622085086540611235550148326673690" + }, + "Gamma_context": { + "entrance_mass": "59038824075417799032780136585499589", + "residual_mass": "5042543099912900584634479237866816375715153730780575915762659942083670533015529220412005947331597741154822401957926231065984100615105030759374251/26112797703675990173653401600000000000000000", + "joint_coefficient": "308461849925427171118076353794753/64", + "primitive_coefficient": "117600608836679351835159084859338679/32" + } + }, + "physical_main_inputs": 3952, + "fresh_arbitrary_helpers": 19440, + "helper_allocation_premise": "distinct (stage, helper) public inputs as in frozen caller proof" + } + }, + "threshold": { + "H": 14174600000000000000, + "LP": 2228, + "Kstar_bits": 14073, + "scaled4096_Kstar_bits": 14085 + }, + "negative_grid_controls": { + "S375_f24": "integer grid rejection at event 36840: denominator 48", + "S225_f24": "integer grid rejection at event 1118: denominator 250", + "S1125_f23": "integer grid rejection at event 61566: denominator 64" + }, + "scope": "Exact children for common grid. Total RDiv plus complete-fibre unitary contracts for rounded envelopes. Neither is a physical provider admission." + }, + "negative_controls": { + "last_helper_scalar_doubling": { + "event": 37594, + "bad_input_rows": 196 + }, + "invented_helper_endpoint": "rejected", + "deleted_QUERY": { + "event": 532, + "bad_outputs": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37 + ] + }, + "closed_compiler_gap": "rejected", + "unfunded_price": "rejected" + }, + "scope": "Independent scalar endpoints, exact symbolic caller, full inherited invoice and numerical gates; attributed precision-engine reuse. Five framework assumptions, odd native alphabet/exact-child contract, A6 and ordinary LAMBDA tariff remain conditional. Finite chart lowering is separately supplied by the construction package." +} diff --git a/research/shared-wire-split-composition/INDEPENDENT-NOTICE.md b/research/shared-wire-split-composition/INDEPENDENT-NOTICE.md new file mode 100644 index 0000000000..1bc9b4da2b --- /dev/null +++ b/research/shared-wire-split-composition/INDEPENDENT-NOTICE.md @@ -0,0 +1,13 @@ +# Attribution and source reuse + +New independent operator/invoice verification and fixed-grid interval implementation: OpenAI Codex-assisted research session, 2026-11-10. Apache-2.0. + +DreamingOfClouds supplied the #6936 native predecessor and #6937 shared-wire backup/E-free root. CubeJerry supplied #6912 caller blocks, #6980's QUERY-only caller and #6970/#6985 precision methods. Preserve Ali Romman's #5599 helper-split attribution, icekylinx's #104 odd-grid attribution and unpaidmoon's #6930 width-phase attribution in the parent construction. + +Three unchanged source files are authenticated by exact SHA256 and source commit/path in `INDEPENDENT-SOURCES.json`: + +- #6970 `independent_bounds.py`: fixed integer-grid and positive caller-transfer engine. +- #6985 `envelopes.py`: positive forward envelopes and backward covector witnesses. +- #6985 `source_binding.py`: retained helper functions for the envelope engine. + +The adapter applies only two literal helper-census substitutions in memory and records them. It does not call that adaptation an independent mathematical implementation. The new reverse native operator, formal caller ring and elementary interval engine do not import the source authors' operator or invoice checkers. diff --git a/research/shared-wire-split-composition/INDEPENDENT-REVIEW.md b/research/shared-wire-split-composition/INDEPENDENT-REVIEW.md new file mode 100644 index 0000000000..17c2ba3fde --- /dev/null +++ b/research/shared-wire-split-composition/INDEPENDENT-REVIEW.md @@ -0,0 +1,23 @@ +# Independent finite acceptance gate + +This support verifies the frozen shared-wire word whose canonical JSON SHA256 is `91429a6b96729292a8764836e00c87a6f7cd3b76f05159033f4867f69a98d097`, the #6980 QUERY-only caller and the paired E-free BIT receipt. It does not create a selected result or admit a supplier. + +Run from any working directory: + +```sh +python3 -I -B /path/to/package/full_verify.py +``` + +The default is read-only and compares every proof-relevant field with `FULL-RESULT.json`. Compression-container differences in the generated word are ignored after canonical payload authentication. An explicit `--out /path/to/result.json` writes a receipt. `--word`, `--caller` and `--bit-receipt` may locate the same pinned inputs elsewhere; their authenticated identities cannot be changed. `--core-only` omits precision reuse and adversarial controls and is not the complete registered check. Assertions are proof checks; optimized Python is deliberately rejected. + +`independent.py` independently checks chronological frame/ownership laws and the transposed scalar circuit on every public input. Its exact caller ring is Q(i)[q,D1,...,D18]/(q^4−1), retaining repeated D powers with an explicit degree bound. `interval_gate.py` is a separate outward-rounded rational log/exp engine; Decimal root digits are only diagnostic. The full emitted MOVE/helper/QUERY/IDLE inventory, positive ordinary envelope, finite-tail losses, compiler capacity, exact threshold, input-lift lemma and 54+4 outer inequalities are recomputed. + +The frozen claim is .00363005817, tested at .00363005817007. The raw crossing lies between .00363005817468836708593357676489 and .00363005817468836708593357676490. Minimum logarithm power is 2227; the written value 2228 yields H=14174600000000000000. The complete conservative ordinary allowance is 826790496, below 10^9. Both complex and BIT callers have no empty-mask productive root credit. + +The numerical BIT price .00376669 conservatively weakens the paired E-free BIT theorem at .00385248, bootstrapped from selected admitted .0034. The pinned receipt records both positive bootstrap debits. The stronger theorem's construction and source review are its own dependency; this support authenticates its receipt and bootstrap arithmetic, not a replacement proof of all BIT providers. No old .00376669 ordinary admission or its empty-root credit enters the bootstrap. + +`precision_replay.py` explicitly reuses three unchanged, hash-authenticated engine files from #6970 and #6985. These methods are not independently implemented here. The #6985 helper-count assertion and output metadata change from 1061 to the actual 1080 helpers; both substitutions are recorded. Exact-grid and rounded-service conclusions have different premises: exact completed children for the common grid; total RDiv and complete-fibre unitary contracts for the rounded envelope. Neither installs a physical tape primitive. + +This verifier does not prove native Clifford chart lowering, absolute phases at every tensor width, physical owned erasure, literal tape rates or the original compiler/analytic contracts. The construction's chart-map certificate is separate. The five framework assumptions and inherited changed interfaces remain: odd native alphabet/exact-child contract, A6, per-port/two-chain HOST2 interfaces and shared-helper accounting, and ordinary LAMBDA/IDLE tariffs. Removing empty-mask credits does not discharge these premises. + +Prepared with substantial OpenAI Codex assistance. This is AI/code-assisted checking, not human review or proof-kernel verification. Exact sources and attribution are in `INDEPENDENT-SOURCES.json` and `INDEPENDENT-NOTICE.md`. diff --git a/research/shared-wire-split-composition/INDEPENDENT-SOURCES.json b/research/shared-wire-split-composition/INDEPENDENT-SOURCES.json new file mode 100644 index 0000000000..95afd39778 --- /dev/null +++ b/research/shared-wire-split-composition/INDEPENDENT-SOURCES.json @@ -0,0 +1,42 @@ +{ + "schema": "independent-shared-wire-support/1", + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "word_canonical_json_sha256": "91429a6b96729292a8764836e00c87a6f7cd3b76f05159033f4867f69a98d097", + "claim": ".00363005817", + "tested": ".00363005817007", + "raw_lower": ".00363005817468836708593357676489", + "raw_upper": ".00363005817468836708593357676490", + "numeric_BIT_price": ".00376669", + "files": [ + { + "path": "retained/odd-native-common-grid/independent_bounds.py", + "source_commit": "e45e844303e04947cf6591fb46b43bf8a7bc5356", + "source_path": "research/odd-native-common-grid/independent_bounds.py", + "sha256": "198521def614fe78fa728f1dde2b7fb820c0c0e0ac3ad0c9224dccbf51eac0d5" + }, + { + "path": "retained/query-only-precision-envelope/envelopes.py", + "source_commit": "56bc9383594a3efc303148e00bb746851abd1ed5", + "source_path": "research/query-only-precision-envelope/envelopes.py", + "sha256": "783da6b5b450fc07434946cb9ec86070dfee01df6b5fa1c385cb024def2c9a9f" + }, + { + "path": "retained/query-only-precision-envelope/source_binding.py", + "source_commit": "56bc9383594a3efc303148e00bb746851abd1ed5", + "source_path": "research/query-only-precision-envelope/source_binding.py", + "sha256": "624c459311c58f3847b7713b818bfd340153abf42919f02ac9aa8892ed52a2bd" + }, + { + "path": "data/caller.json", + "source_commit": "617903497387a98f7ca929ad0b6928dd32abffec", + "source_path": "research/p104-query-only-interval/QUERY-ONLY-CALLER.json", + "sha256": "3828d53e80ea97e8b866320f081af20b6b93bfebd58b95b56b85a7afe151af5e" + }, + { + "path": "data/bit-admission.json", + "source_commit": "d777f3a0aa2878bea0478918923dabcf86b9878b", + "source_path": "research/paired-query-only-bit/EFREE-RESULT.json", + "sha256": "a46b6c6040f75184cab5467656811ad988c216e3bc8e44d595a5015b6e49620b" + } + ] +} diff --git a/research/shared-wire-split-composition/LICENSE b/research/shared-wire-split-composition/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/shared-wire-split-composition/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/shared-wire-split-composition/NATIVE-INPUTS.json b/research/shared-wire-split-composition/NATIVE-INPUTS.json new file mode 100644 index 0000000000..347b2c4df6 --- /dev/null +++ b/research/shared-wire-split-composition/NATIVE-INPUTS.json @@ -0,0 +1,42 @@ +{ + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "sources": [ + { + "path": "data/main_6936.json.gz", + "source_commit": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "source_path": "research/p104-main-wire-native/data/word.json.gz", + "sha256": "273e81f176f001684b1fa3eb857992bf58b54748004fcfe806b83adb48d2cc00" + }, + { + "path": "data/wh_6937.json.gz", + "source_commit": "a98df73ddae1d1ea85a62b6bdf2714b28cb7b359", + "source_path": "research/p104-two-chain-findings/data/wh.json.gz", + "sha256": "25326dac562fa07edd28a6daf302de0c27f5f2e82f610eaf3671d39575f8dbea" + }, + { + "path": "frozen/verify_host3_odd.py", + "source_commit": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "source_path": "research/p104-main-wire-native/verify_host3_odd.py", + "sha256": "e75ad2096ba2587d1dc9c8982b2c2eb7c6fd2636a80adcd943314ef2cf6fd258" + }, + { + "path": "frozen/clifford_exact.py", + "source_commit": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "source_path": "research/p104-main-wire-native/retained/native/clifford_exact.py", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + }, + { + "path": "frozen/native_verify.py", + "source_commit": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "source_path": "research/p104-main-wire-native/retained/native/native_verify.py", + "sha256": "3049471905b47b385c88378a1a3be7a18b8858aadd035b8a6da2f4a03b470f38" + }, + { + "path": "frozen/physical.py", + "source_commit": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "source_path": "research/p104-main-wire-native/physical.py", + "sha256": "4e995d1158033d83bf69b671f23dc7924d66edbbe07623ba063ba7421234ea20" + } + ], + "final_canonical_json_sha256": "91429a6b96729292a8764836e00c87a6f7cd3b76f05159033f4867f69a98d097" +} diff --git a/research/shared-wire-split-composition/NOTICE b/research/shared-wire-split-composition/NOTICE new file mode 100644 index 0000000000..a3687d65a0 --- /dev/null +++ b/research/shared-wire-split-composition/NOTICE @@ -0,0 +1,9 @@ +New shared-wire composition, seventeenth wire, and two enabling splits: developed with substantial OpenAI assistance, 2026. Apache-2.0. + +Frozen predecessor native words and odd verifier: DreamingOfClouds, with Claude Opus 5.5 (Anthropic), from #6936 and #6937. + +Retained Clifford compiler and exact native interpreter retain their original headers and lineage from #6833: native source by DreamingOfClouds; independent-helper mechanism by Ali Romman; inventory, retiming and helper-retirement extensions by Jerry Chen / @CubeJerry with OpenAI assistance. + +Helper-split lemma: Ali Romman (#5599). Shared native applications: CubeJerry (#6916). Caller blocks: CubeJerry (#6912). Owned-rise argument: CubeJerry (#6914). Width-2 phase convention: unpaidmoon (#6930). Odd-grid precedent: icekylinx (#104). + +The higher-level caller and BIT integration require their own source attribution and pins. diff --git a/research/shared-wire-split-composition/README.md b/research/shared-wire-split-composition/README.md new file mode 100644 index 0000000000..b7504b6fb2 --- /dev/null +++ b/research/shared-wire-split-composition/README.md @@ -0,0 +1,123 @@ +# Shared wires and two helper splits at conditional kappa 0.00363005817 + +This source-bound construction composes #6937's sixteen shared helper wires +with #6936's two plain splits, adds one further shared wire, and constructs +two previously unbuilt productive splits. Complete accounting, including the +QUERY-only caller of #6980, admits **kappa = 0.00363005817** under the explicitly +retained framework and source contracts. The certified raw crossing is +`(0.00363005817468836708593357676489, +0.00363005817468836708593357676490)`. + +The gain is about **0.0838% over #6936's pending 0.00362701882**. This is a +small improvement to the complete conditional supplier, not a significant +breakthrough or a new unconditional integer-multiplication theorem. The +selected reviewed frontier remains 0.003125804; this package does not change +its certificate or admission status. Pending predecessors are credited as +construction inputs, not represented as maintainer-accepted theorems. + +## Change and mathematical scope + +The two new helper splits are enabled by #6937's sixteen wires, not by the +seventeenth wire added here. A separate sparse forward/reverse implementation +checks their exact prefix, suffix, frame and basis obligations. The causal +composition and new wire are also independently checked, then the entire word +is replayed over every independent public scalar input. See +[CONSTRUCTION.md](CONSTRUCTION.md) and +[CONSTRUCTION-REVIEW.md](CONSTRUCTION-REVIEW.md). + +| Complete check | Result | +| --- | --- | +| Emitted native events | 71,261 | +| Public fields / main fields / independent helpers | 1,480 / 400 / 1,080 | +| Owned labels / lifetimes / peak live | 51 / 54 / 43 | +| Owned rises / rank mass | 23 / 56, unchanged | +| Native / complete rank surplus | 1,125 / 1,520 | +| Introduced native chart recipes checked | 73, with exact sign and phase | +| Complete caller | 3,095 events, 76 roles, no empty-body root credits | +| Conservative ordinary invoice | 826,790,496 < 1,000,000,000 | +| Claimed / tested price | .00363005817 / .00363005817007 | +| Finite cover parameter | LP 2,228; H 14,174,600,000,000,000,000 | +| Outer gates | 54 strict inequalities and four functional checks | + +The complex caller removes 192 productive rank-one fields and their 192 paid +jobs together, preserving the signed moment. Its BIT backend uses the paired +QUERY-only construction in `data/bit-admission.json`: selected BIT .0034 is +bootstrapped to .0038507 and then .00385248, with no empty-root supplier used +as an intermediate backend. Its complete [published source package](https://github.com/CubeJerry/integer-mult-bounds/tree/d777f3a0aa2878bea0478918923dabcf86b9878b/research/paired-query-only-bit) is pinned in `INDEPENDENT-SOURCES.json`. We conservatively weaken that established price +to .00376669 for the complex wrapper. The resulting two components therefore +do not import the predecessor's empty-body productive-credit premise. + +## Sources and verification + +Base: `7c49fe32c55de02c2c873655c804b16e4c3fef0a`. +All original source heads, paths and exported bytes are pinned in +[NATIVE-INPUTS.json](NATIVE-INPUTS.json) and +[INDEPENDENT-SOURCES.json](INDEPENDENT-SOURCES.json). `SOURCES.json` records +base-main provenance only; replay needs no off-main Git objects. In particular: + +| Source | Exact head | Role | +| --- | --- | --- | +| #6936 | `d360b1182b6d21b1ee2354856abcb50646ad618b` | Main wire word, two splits, retained exact chart engines | +| #6937 | `a98df73ddae1d1ea85a62b6bdf2714b28cb7b359` | Sixteen-wire word and open composition handoff | +| #6980 | `617903497387a98f7ca929ad0b6928dd32abffec` | QUERY-only caller | +| #6970 | `e45e844303e04947cf6591fb46b43bf8a7bc5356` | Attributed common-grid bound engine | +| #6985 | `56bc9383594a3efc303148e00bb746851abd1ed5` | Attributed precision-envelope engine | + +From the repository root, with Python 3.11+ and standard library only: + +```sh +python3 -B scripts/research_package.py --package research/shared-wire-split-composition +``` + +Expected: registered replay PASS, including `PASS_SHARED_WIRE_SPLIT_NATIVE`, +`PASS_CONSTRUCTION_INTERFACE_REVIEW` and `PASS_INDEPENDENT_FULL_GATE`, plus +zero bad main/helper outputs in the finite 512-component physical replay. +The three registered commands are read-only. Cold reconstruction uses a +temporary directory and compares exact decompressed JSON and split witnesses. +Assertions are proof checks: the principal checkers explicitly reject `-O`. + +The independent full gate implements reverse native replay, symbolic caller, +invoice extraction, certified interval arithmetic and outer gates separately +from the source implementations. Its controls reject a doubled helper scalar, +an invented endpoint, a missing QUERY, a closed compiler gap and an unfunded +price. The chart checker includes a wrong-phase control. Precision bounds +reuse and authenticate predecessor engines; they are **not** described as a +new independent implementation. The finite physical replay retains #6936's +engine (prime 1,000,000,009, seed 11) and checks all 400 main and 1,080 helper +outputs at width 512. It is a finite check, not an all-width proof. + +## Limits and credit + +The five framework assumptions remain: native-all-columns, owned erasure, +compiler, precision/tape and analytic recovery. The more specific inherited +contracts include exact child returns, odd scalars in Z[1/2,1/3,1/5], owned +ascent A6, per-port/reducible roots, one-field idle and ordinary LAMBDA pricing. +The prefix grid is S=1125. Native/common-context height and envelope checks +are retained in `FULL-RESULT.json`; they do not admit a rounded physical +provider or independently rerun every guard of #6985. No complete fixed-tape +multiplier, external human review or selected-certificate update is claimed. + +Finite deterministic cut screens and alternate-order checks found no further +witness in their examined domains. They are not impossibility results; only +the two nominated directions are used in the proof. No generalized owned +scratch split, speculative mirror flip or unpaid boundary correction is used. +## Open next questions + +1. Can further changes of helper itinerary expose a legal source-bound split + beyond the completed cut screens? Exhibit the exact prefix/suffix witness, + available frame path and full invoice; the finite screens do not settle + other orders or nontrivial pivot pairings. +2. Can the declared odd-scalar native and QUERY-only caller contracts be + admitted physically? Verify total providers, all-column owned lifetimes + and the source tariff conversion before importing the numerical bound. + The five framework assumptions remain, as detailed in `TASK.json`. + +## Attribution + +Prepared for **@CubeJerry (Jerry Chen)** with substantial OpenAI Codex +assistance, including separate implementations for independent checks. +DreamingOfClouds supplied #6936/#6937 and their open composition question; +@CubeJerry's #6916 and #6980 supply helper-split and caller precedents. Ali Romman, +Cinna Davis, zxv, unpaidmoon, icekylinx and the retained source authors receive +their original mechanism and verification credit in `CONSTRUCTION.md`, +`NOTICE` and `INDEPENDENT-NOTICE.md`. Apache-2.0. diff --git a/research/shared-wire-split-composition/SOURCES.json b/research/shared-wire-split-composition/SOURCES.json new file mode 100644 index 0000000000..75ea7c3d55 --- /dev/null +++ b/research/shared-wire-split-composition/SOURCES.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "files": [ + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81" + }, + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a", + "sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa" + } + ] +} diff --git a/research/shared-wire-split-composition/TASK.json b/research/shared-wire-split-composition/TASK.json new file mode 100644 index 0000000000..8cf0755e45 --- /dev/null +++ b/research/shared-wire-split-composition/TASK.json @@ -0,0 +1,124 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 8, + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "original_card": { + "id": "p104-side-correction", + "question": "Can joint helper bases and a legal causal split improve the complete P104 productive/paid invoice?", + "starting_points": [ + "docs/research/current-priorities.md", + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "research/p104-helper-subspace-splits/README.md", + "research/dyadic-helper-channel-capacity/README.md" + ], + "methods": [ + "Construct and independently check one source-bound instance of the stated first experiment.", + "Seek an exact counterexample or target-specific complete-budget obstruction to that same proposed change." + ], + "acceptance_gate": "An exact arbitrary-input identity, source/target frame availability and restoration at the chosen cut, plus the complete channel+correction+idle/hosting bill or an explicit favorable bound. The native channel alone is not a supplier. A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read revision 8, the selected review and live exact-source handoffs. Then follow this card's bounded first_experiment.", + "scope": "Source-bound orientation only, not a supplier replay or theorem proof." + }, + "first_experiment": "Start with the selected #5599 emitted word and review pending #5718 distinct input/output bases plus #5717/#5719 coverage before claiming work. Pick one uncovered source word, helper group and cut region. Prove the arbitrary-input relation and legal entry/exit corrections, then compare full target and paid profiles. Reject if completion, owned lifetimes or consumer costs repay the gain. A static pairing rank alone is not a physical split.", + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "allowed_variations": [ + "One exact source head, helper/cut region or quantified proposition and changed hypothesis; check live handoffs first. Different seeds are not different scopes." + ], + "scope_change_triggers": [ + "Changing source head, helper/cut domain, operation alphabet or caller boundary without recording the new scope.", + "Treating an archived proposal or local numerical pass as complete supplier admission." + ], + "overlap_terms": [ + "P104", + "helper basis", + "helper split", + "5718", + "dyadic capacity" + ], + "existing_checks": [ + { + "scope": "PR #4133: literal-slot defect", + "evidence": "research/p104-literal-slot-defect/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4136: uniform commutation gap", + "evidence": "research/p104-uniform-commutation-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4140: uniform encoding gap", + "evidence": "research/p104-uniform-encoding-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "evidence": "research/p104-source-chart-shortcut/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4154: fiber-tag seam mismatch", + "evidence": "research/p104-fiber-tag-seam/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "evidence": "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "remaining": "The next experiment must identify uncovered source-specific work. Successor archive intake does not transfer this admission.", + "status": "reviewed", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Construct and verify a new complete conditional supplier by composing shared wires, two newly enabled helper splits, the QUERY-only caller and an E-free BIT bootstrap.", + "scope_change_reason": "The assigned kappa-improvement search uses current open two-chain sources rather than the historical word named by the pinned card.", + "bottleneck_link": "Improve the binding complex complete signed moment while retaining all helper, root, idle, ordinary and compiler costs.", + "budget_minutes": 120, + "stop_rule": "Freeze exact candidates before the verification cutoff; reject any endpoint, frame, paid-profile or complete-budget failure.", + "outcome": "completed", + "evidence": "CONSTRUCTION.md, native replay, independent full operator/invoice/interval/outer gate and source-bound precision envelopes.", + "author": "Jerry Chen / @CubeJerry", + "ai_assistance": "Substantial OpenAI Codex assistance with separate-agent independent exact checks; no human review.", + "selected_frontier_changed": false, + "open_questions": [ + { + "question": "Can changed helper itineraries expose more profitable splits?", + "why_it_matters": "The complex supplier remains binding.", + "first_step": "Exhibit a source-bound nonzero prefix/suffix pairing with a legal frame path and full invoice.", + "blocked_by": "The completed deterministic screens found no further candidate; they do not exhaust all orders." + }, + { + "question": "Can the declared odd-scalar and current native/caller contracts be admitted physically?", + "why_it_matters": "The numerical construction remains conditional.", + "first_step": "Verify total scalar providers, owned lifetimes and the source tariff conversion at all column multiplicities.", + "blocked_by": "This package supplies no complete rounded fixed-tape multiplier." + } + ] +} diff --git a/research/shared-wire-split-composition/VALIDATION.md b/research/shared-wire-split-composition/VALIDATION.md new file mode 100644 index 0000000000..6f7ebc4eca --- /dev/null +++ b/research/shared-wire-split-composition/VALIDATION.md @@ -0,0 +1,48 @@ +# Publication validation + +Python 3.12; standard library; canonical base +`7c49fe32c55de02c2c873655c804b16e4c3fef0a`. + +The registered `scripts/research_package.py --package +research/shared-wire-split-composition` replay passed all three commands: + +1. Cold construction from the authenticated predecessor words, separate + sparse causal/wire/split review, exact native replay on all public inputs, + and all 73 introduced signed Clifford chart recipes. The final canonical + JSON and both split witness files match their retained artifacts. +2. Independently implemented reverse native and formal caller replay, full + invoice, interval/finite/compiler/outer gates and negative controls; + separately attributed precision-engine reuse. All proof-relevant fields + match `FULL-RESULT.json`. +3. Retained physical replay at 512 components, prime 1,000,000,009 and seed 11: + 71,261 events and 2,971 chart pairs, zero bad main/helper outputs and both + deliberately wrong operator controls detected. This is finite evidence. + +An additional lead calculation directly summed the published target and +paid histograms, without importing either arithmetic engine. It reproduced +rank surplus 1,520 and, at 75-digit Decimal precision, opposite moment signs +at the certified raw-bracket endpoints. This is a diagnostic cross-check; +the interval engine, not Decimal rounding, supplies the certified enclosure. + +The four assertion-based entry points (`verify.py`, `reproduce.py`, +`chart_delta.py`, `full_verify.py`) were run under `-O` and all explicitly +rejected the unsafe mode. The independent construction check uses explicit +exceptions and was also exercised by its author under isolated optimized +Python. No global optimized-mode pass is claimed. + +Default replay is read-only, including the chart receipt comparison; receipt +regeneration requires `chart_delta.py --write` or `full_verify.py --out`. +Final package hashes before and after registered replay are compared during +publication. Whitespace and committed-byte/mode preflights are required +before the branch is published. The complete remote Git tree is compared +with the tested base-plus-package tree; sparse omissions are not deletions. + +The optional full-source-history gate requires a non-shallow repository and +was not used. All exported source bytes and base-main provenance are checked. +No repository-wide baseline suite, hosted CI, maintainer acceptance or +formal proof-kernel verification is claimed. + +The exact-child route and five framework assumptions remain conditional. +The physical tariff conversion highlighted by #6998 is still owed; this +package does not import a literal primitive cost into the old numerical +tariff or claim a complete physical multiplier. diff --git a/research/shared-wire-split-composition/VERIFY-INDEPENDENT.json b/research/shared-wire-split-composition/VERIFY-INDEPENDENT.json new file mode 100644 index 0000000000..4a2fbb342e --- /dev/null +++ b/research/shared-wire-split-composition/VERIFY-INDEPENDENT.json @@ -0,0 +1,14 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [], + "commands": [ + { + "argv": ["{python}", "-I", "-B", "{package}/full_verify.py"], + "timeout_seconds": 300, + "checks": "Authenticated final word/caller/E-free BIT receipt; independent reverse native, full formal caller, complete invoice and ordinary charges; rational crossing, finite compiler, input-lift and54+4outer conditions; attributed #6970/#6985 precision replay with actual helper census; rejecting semantic/grid/price controls; proof-relevant receipt equality. Read-only by default." + } + ] +} diff --git a/research/shared-wire-split-composition/VERIFY.json b/research/shared-wire-split-composition/VERIFY.json new file mode 100644 index 0000000000..9ec717f220 --- /dev/null +++ b/research/shared-wire-split-composition/VERIFY.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 300, + "checks": "Cold construction from frozen 6936/6937 source words; exact two cut witness extraction; canonical final payload; exact all-input odd verifier with S1125; 73 introduced Clifford chart recipes with exact phase and negative phase control." + }, + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/full_verify.py" + ], + "timeout_seconds": 300, + "checks": "Independent all-input native, symbolic caller, complete invoice, interval and outer gate; five negative controls; attributed precision envelope replay." + }, + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/frozen/physical.py", + "{package}/data/final.json.gz", + "{package}/frozen/clifford_exact.py" + ], + "timeout_seconds": 180, + "checks": "Retained finite 512-component physical replay: all 400 mains and 1080 helpers, 2971 signed chart pairs, prime 1000000009 and seed11; not all-width admission." + } + ] +} diff --git a/research/shared-wire-split-composition/build_wire.py b/research/shared-wire-split-composition/build_wire.py new file mode 100644 index 0000000000..16703507fc --- /dev/null +++ b/research/shared-wire-split-composition/build_wire.py @@ -0,0 +1,60 @@ +import json,gzip,collections,copy,heapq,pathlib +from fractions import Fraction as Q +from compose import access +HERE=pathlib.Path(__file__).resolve().parent +ROOT=HERE/'build' + +def build(w,p): + n=w['public'];hp=n;ef=p['F'];er=p['R'];q=Q(ef['q']);y,x,u,v=ef['dest'],ef['src'],er['dest'],er['src'];a,c,b,d=p['frames'] + def shift(e): + e=e.copy();e[1]+=e[1]>=n + if e[0]in('ADD','COPY'):e[2]+=e[2]>=n + return e + removed={ef['index'],er['index'],*ef['moves'],*er['moves']} + ev=[];positions=[] + for i,e in enumerate(w['program']): + if i not in removed:ev.append(shift(e));positions.append((i,0)) + for f in (ef,er): + for i,j in zip(f['moves'][::2],f['moves'][1::2]): + e=w['program'][i];z=w['program'][j];assert e[1]==z[1] + ev.append(['MOVE',e[1],e[2],z[3],False]);positions.append((i,0)) + new=[['ADD',y,hp,'1',a],['ADD',hp,v,'1',a],['MOVE',hp,a,c,False],['ADD',u,hp,str(-q),c],['ADD',hp,x,str(-q),c],['MOVE',hp,c,b,False],['ADD',hp,v,'-1',b],['ADD',y,hp,'-1',b],['MOVE',hp,b,d,False],['ADD',hp,x,str(q),d],['ADD',u,hp,str(q),d]] + starts={y:0,v:1,u:3,x:4};ends={v:6,y:7,x:9,u:10};newidx=[] + for j,e in enumerate(new): + idx=len(ev);newidx.append(idx);ev.append(e) + if e[0]=='MOVE':positions.append((0,0));continue + r=e[2]if e[1]==hp else e[1];slot=p['slots'][r][0 if j in starts.values() else 1];pos,after=slot + positions.append((pos,1 if after else -1)) + regs=collections.defaultdict(list) + for i,e in enumerate(ev): + for r,c_ in access(e): + if r!=hp:regs[r].append((positions[i],c_,i)) + adj=[set()for _ in ev];indeg=[0]*len(ev) + def edge(i,j): + if j not in adj[i]:adj[i].add(j);indeg[j]+=1 + for r,rs in regs.items(): + rs.sort();runs=[] + for _,c_,i in rs: + if runs and runs[-1][0]==c_ and c_ in 'AR':runs[-1][1].append(i) + else:runs.append((c_,[i])) + for(_,aa),(_,bb)in zip(runs,runs[1:]): + for i in aa: + for j in bb:edge(i,j) + for i,j in zip(newidx,newidx[1:]):edge(i,j) + ready=[(positions[i],i)for i,d_ in enumerate(indeg)if not d_];heapq.heapify(ready);order=[] + while ready: + _,i=heapq.heappop(ready);order.append(i) + for j in adj[i]: + indeg[j]-=1 + if not indeg[j]:heapq.heappush(ready,(positions[j],j)) + if len(order)!=len(ev):return None,{'ordered':len(order),'total':len(ev),'blocked':[[i,ev[i]]for i,d_ in enumerate(indeg)if d_][:25]} + z=copy.deepcopy(w);z['initial'].append(a);z['final'].append(d);z['public']+=1;z['program']=[ev[i]for i in order] + return z,{'ordered':len(order),'gain_model':p['gain']} +if __name__=='__main__': + w=json.load(gzip.open(ROOT/'composed.json.gz'));ps=[json.load(open(HERE/'data/extra_wire_spec.json'))] + for p in ps:p['slots']={int(r):v for r,v in p['slots'].items()} + for i,p in enumerate(ps): + if p['gain']<=0:break + z,r=build(w,p);print('CANDIDATE',i,r) + if z: + with gzip.open(ROOT/f'extra_wire_{i}.json.gz','wt')as f:json.dump(z,f,separators=(',',':')) diff --git a/research/shared-wire-split-composition/chart_delta.json b/research/shared-wire-split-composition/chart_delta.json new file mode 100644 index 0000000000..8717f47cc8 --- /dev/null +++ b/research/shared-wire-split-composition/chart_delta.json @@ -0,0 +1,6460 @@ +{ + "word": "data/final.json.gz", + "base_maps": 3045, + "total_maps": 3057, + "introduced": [ + [ + 3, + 261 + ], + [ + 3, + 545 + ], + [ + 3, + 546 + ], + [ + 3, + 551 + ], + [ + 3, + 561 + ], + [ + 3, + 562 + ], + [ + 3, + 660 + ], + [ + 3, + 661 + ], + [ + 3, + 747 + ], + [ + 3, + 755 + ], + [ + 9, + 665 + ], + [ + 257, + 553 + ], + [ + 260, + 719 + ], + [ + 260, + 724 + ], + [ + 261, + 730 + ], + [ + 261, + 736 + ], + [ + 278, + 564 + ], + [ + 345, + 911 + ], + [ + 386, + 916 + ], + [ + 391, + 916 + ], + [ + 429, + 924 + ], + [ + 488, + 548 + ], + [ + 506, + 664 + ], + [ + 545, + 651 + ], + [ + 545, + 665 + ], + [ + 546, + 548 + ], + [ + 546, + 635 + ], + [ + 548, + 127 + ], + [ + 551, + 553 + ], + [ + 551, + 683 + ], + [ + 553, + 127 + ], + [ + 561, + 657 + ], + [ + 561, + 660 + ], + [ + 562, + 564 + ], + [ + 562, + 649 + ], + [ + 564, + 127 + ], + [ + 594, + 724 + ], + [ + 595, + 736 + ], + [ + 602, + 640 + ], + [ + 602, + 688 + ], + [ + 602, + 689 + ], + [ + 636, + 647 + ], + [ + 640, + 647 + ], + [ + 640, + 649 + ], + [ + 647, + 127 + ], + [ + 652, + 657 + ], + [ + 657, + 127 + ], + [ + 661, + 660 + ], + [ + 661, + 664 + ], + [ + 664, + 127 + ], + [ + 665, + 127 + ], + [ + 684, + 695 + ], + [ + 686, + 693 + ], + [ + 688, + 695 + ], + [ + 688, + 696 + ], + [ + 689, + 682 + ], + [ + 689, + 693 + ], + [ + 693, + 127 + ], + [ + 695, + 127 + ], + [ + 724, + 246 + ], + [ + 734, + 911 + ], + [ + 734, + 1069 + ], + [ + 736, + 127 + ], + [ + 744, + 916 + ], + [ + 744, + 1070 + ], + [ + 745, + 917 + ], + [ + 755, + 924 + ], + [ + 755, + 1072 + ], + [ + 772, + 911 + ], + [ + 772, + 916 + ], + [ + 911, + 127 + ], + [ + 1089, + 127 + ], + [ + 1089, + 207 + ] + ], + "retired": [ + [ + 9, + 662 + ], + [ + 257, + 1030 + ], + [ + 260, + 709 + ], + [ + 261, + 711 + ], + [ + 278, + 563 + ], + [ + 345, + 1059 + ], + [ + 386, + 794 + ], + [ + 391, + 792 + ], + [ + 429, + 1064 + ], + [ + 488, + 547 + ], + [ + 506, + 1054 + ], + [ + 545, + 662 + ], + [ + 546, + 547 + ], + [ + 547, + 548 + ], + [ + 547, + 635 + ], + [ + 551, + 1030 + ], + [ + 561, + 654 + ], + [ + 562, + 563 + ], + [ + 563, + 564 + ], + [ + 563, + 649 + ], + [ + 594, + 709 + ], + [ + 595, + 711 + ], + [ + 636, + 642 + ], + [ + 640, + 642 + ], + [ + 642, + 647 + ], + [ + 642, + 649 + ], + [ + 652, + 654 + ], + [ + 654, + 657 + ], + [ + 654, + 660 + ], + [ + 661, + 1054 + ], + [ + 662, + 651 + ], + [ + 662, + 665 + ], + [ + 684, + 690 + ], + [ + 686, + 692 + ], + [ + 688, + 690 + ], + [ + 689, + 692 + ], + [ + 690, + 695 + ], + [ + 690, + 696 + ], + [ + 692, + 682 + ], + [ + 692, + 693 + ], + [ + 709, + 719 + ], + [ + 709, + 724 + ], + [ + 711, + 730 + ], + [ + 711, + 736 + ], + [ + 734, + 1059 + ], + [ + 744, + 792 + ], + [ + 745, + 747 + ], + [ + 755, + 1064 + ], + [ + 772, + 794 + ], + [ + 792, + 916 + ], + [ + 792, + 1070 + ], + [ + 794, + 911 + ], + [ + 794, + 916 + ], + [ + 1030, + 553 + ], + [ + 1030, + 683 + ], + [ + 1054, + 660 + ], + [ + 1054, + 664 + ], + [ + 1059, + 911 + ], + [ + 1059, + 1069 + ], + [ + 1064, + 924 + ], + [ + 1064, + 1072 + ] + ], + "recipes": [ + [ + 3, + 261, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 18, + 34, + 67, + 3, + 1, + 132, + 260, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 40, + 14, + 448, + 1, + 50, + 52, + 24, + 320, + 384 + ], + "offset": 4, + "quadratic_rows": [ + 0, + 62, + 62, + 54, + 14, + 14, + 192, + 192, + 0 + ], + "linear_Z4": [ + 0, + 1, + 1, + 2, + 2, + 0, + 3, + 3, + 2 + ], + "phase": 1 + } + } + ], + [ + 3, + 545, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 22, + 33, + 65, + 130, + 1, + 256, + 6, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 13, + 402, + 258, + 33, + 130, + 36, + 40, + 400, + 64 + ], + "offset": 6, + "quadratic_rows": [ + 45, + 16, + 45, + 45, + 18, + 13, + 0, + 0, + 0 + ], + "linear_Z4": [ + 1, + 2, + 1, + 1, + 3, + 2, + 0, + 2, + 0 + ], + "phase": 2 + } + } + ], + [ + 3, + 546, + { + "rank": 3, + "left": { + "matrix_rows": [ + 12, + 18, + 37, + 68, + 130, + 5, + 1, + 256, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 68, + 274, + 13, + 97, + 258, + 36, + 104, + 272, + 128 + ], + "offset": 2, + "quadratic_rows": [ + 109, + 18, + 105, + 109, + 18, + 13, + 13, + 0, + 0 + ], + "linear_Z4": [ + 1, + 3, + 2, + 1, + 3, + 2, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 3, + 551, + { + "rank": 3, + "left": { + "matrix_rows": [ + 12, + 22, + 34, + 67, + 134, + 5, + 262, + 6, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 6, + 3, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 392, + 350, + 339, + 289, + 130, + 420, + 168, + 144, + 192 + ], + "offset": 4, + "quadratic_rows": [ + 115, + 141, + 254, + 118, + 141, + 13, + 141, + 214, + 0 + ], + "linear_Z4": [ + 3, + 0, + 1, + 2, + 0, + 2, + 0, + 3, + 0 + ], + "phase": 1 + } + } + ], + [ + 3, + 561, + { + "rank": 3, + "left": { + "matrix_rows": [ + 10, + 16, + 34, + 67, + 132, + 3, + 260, + 4, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 264, + 13, + 208, + 289, + 2, + 292, + 40, + 144, + 192 + ], + "offset": 4, + "quadratic_rows": [ + 301, + 0, + 301, + 293, + 80, + 13, + 80, + 0, + 13 + ], + "linear_Z4": [ + 1, + 0, + 1, + 2, + 3, + 2, + 3, + 2, + 0 + ], + "phase": 1 + } + } + ], + [ + 3, + 562, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 22, + 33, + 65, + 130, + 1, + 4, + 6, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 13, + 210, + 66, + 33, + 130, + 36, + 40, + 208, + 256 + ], + "offset": 6, + "quadratic_rows": [ + 45, + 16, + 45, + 45, + 18, + 13, + 0, + 0, + 0 + ], + "linear_Z4": [ + 1, + 2, + 1, + 1, + 3, + 2, + 0, + 2, + 0 + ], + "phase": 2 + } + } + ], + [ + 3, + 660, + { + "rank": 7, + "left": { + "matrix_rows": [ + 141, + 272, + 5, + 9, + 18, + 1, + 32, + 2, + 64 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 18, + 12, + 12, + 18, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 144, + 41, + 37, + 130, + 64, + 256, + 45, + 146 + ], + "offset": 97, + "quadratic_rows": [ + 33, + 18, + 12, + 12, + 18, + 1, + 0, + 0, + 0 + ], + "linear_Z4": [ + 1, + 1, + 3, + 3, + 3, + 0, + 2, + 0, + 2 + ], + "phase": 3 + } + } + ], + [ + 3, + 661, + { + "rank": 3, + "left": { + "matrix_rows": [ + 10, + 16, + 34, + 67, + 132, + 3, + 1, + 260, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 72, + 13, + 400, + 97, + 2, + 100, + 40, + 272, + 384 + ], + "offset": 4, + "quadratic_rows": [ + 109, + 0, + 109, + 101, + 144, + 13, + 13, + 144, + 0 + ], + "linear_Z4": [ + 1, + 0, + 1, + 2, + 3, + 2, + 0, + 3, + 2 + ], + "phase": 1 + } + } + ], + [ + 3, + 747, + { + "rank": 6, + "left": { + "matrix_rows": [ + 68, + 134, + 7, + 3, + 2, + 288, + 16, + 40, + 8 + ], + "offset": 0, + "quadratic_rows": [ + 5, + 2, + 1, + 40, + 0, + 40, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 3, + 2, + 3, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 12, + 2, + 23, + 384, + 64, + 288, + 13, + 30, + 416 + ], + "offset": 22, + "quadratic_rows": [ + 27, + 9, + 12, + 23, + 25, + 160, + 0, + 160, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 0, + 1, + 1, + 2, + 3, + 0 + ], + "phase": 3 + } + } + ], + [ + 3, + 755, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 17, + 32, + 68, + 129, + 1, + 260, + 6, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 19, + 384, + 200, + 33, + 34, + 4, + 392, + 48, + 448 + ], + "offset": 4, + "quadratic_rows": [ + 51, + 51, + 0, + 328, + 51, + 19, + 328, + 384, + 200 + ], + "linear_Z4": [ + 1, + 1, + 0, + 3, + 1, + 2, + 3, + 3, + 0 + ], + "phase": 1 + } + } + ], + [ + 9, + 665, + { + "rank": 5, + "left": { + "matrix_rows": [ + 45, + 82, + 133, + 9, + 258, + 1, + 5, + 18, + 16 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 9, + 12, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 3, + 2, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 65, + 402, + 105, + 101, + 258, + 109, + 130, + 64, + 400 + ], + "offset": 19, + "quadratic_rows": [ + 33, + 16, + 76, + 12, + 18, + 65, + 36, + 0, + 0 + ], + "linear_Z4": [ + 1, + 2, + 3, + 3, + 3, + 0, + 2, + 2, + 0 + ], + "phase": 3 + } + } + ], + [ + 257, + 553, + { + "rank": 4, + "left": { + "matrix_rows": [ + 20, + 34, + 69, + 132, + 257, + 5, + 1, + 8, + 14 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 14, + 10, + 14, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 20, + 34, + 265, + 384, + 101, + 288, + 32, + 104, + 80 + ], + "offset": 4, + "quadratic_rows": [ + 365, + 256, + 85, + 361, + 84, + 265, + 29, + 256, + 171 + ], + "linear_Z4": [ + 3, + 0, + 3, + 3, + 1, + 0, + 2, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 260, + 719, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 19, + 32, + 67, + 1, + 2, + 132, + 260, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 18, + 34, + 448, + 19, + 32, + 68, + 40, + 256, + 384 + ], + "offset": 248, + "quadratic_rows": [ + 18, + 1, + 64, + 0, + 17, + 0, + 196, + 192, + 0 + ], + "linear_Z4": [ + 2, + 0, + 2, + 0, + 1, + 2, + 3, + 1, + 2 + ], + "phase": 3 + } + } + ], + [ + 260, + 724, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 17, + 36, + 64, + 129, + 1, + 260, + 2, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 3, + 384, + 452, + 33, + 50, + 388, + 8, + 32, + 256 + ], + "offset": 261, + "quadratic_rows": [ + 35, + 51, + 68, + 0, + 2, + 3, + 132, + 320, + 384 + ], + "linear_Z4": [ + 3, + 3, + 3, + 0, + 2, + 0, + 0, + 2, + 3 + ], + "phase": 1 + } + } + ], + [ + 261, + 730, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 16, + 38, + 66, + 4, + 6, + 129, + 257, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 448, + 60, + 20, + 65, + 14, + 32, + 48, + 256, + 384 + ], + "offset": 218, + "quadratic_rows": [ + 64, + 12, + 2, + 10, + 0, + 0, + 193, + 192, + 0 + ], + "linear_Z4": [ + 2, + 2, + 0, + 1, + 0, + 2, + 3, + 1, + 2 + ], + "phase": 1 + } + } + ], + [ + 261, + 736, + { + "rank": 3, + "left": { + "matrix_rows": [ + 12, + 18, + 34, + 66, + 2, + 128, + 260, + 1, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 384, + 6, + 449, + 385, + 18, + 28, + 16, + 32, + 256 + ], + "offset": 262, + "quadratic_rows": [ + 65, + 22, + 30, + 4, + 6, + 0, + 129, + 320, + 384 + ], + "linear_Z4": [ + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 2, + 3 + ], + "phase": 1 + } + } + ], + [ + 278, + 564, + { + "rank": 4, + "left": { + "matrix_rows": [ + 18, + 1, + 34, + 66, + 136, + 2, + 12, + 4, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 2, + 12, + 12, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 2, + 5, + 192, + 144, + 33, + 44, + 32, + 208, + 256 + ], + "offset": 3, + "quadratic_rows": [ + 37, + 0, + 45, + 4, + 80, + 5, + 80, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 2, + 1, + 0, + 3, + 0, + 0 + ], + "phase": 2 + } + } + ], + [ + 345, + 911, + { + "rank": 5, + "left": { + "matrix_rows": [ + 33, + 68, + 132, + 258, + 2, + 8, + 6, + 16, + 31 + ], + "offset": 0, + "quadratic_rows": [ + 31, + 27, + 29, + 31, + 31, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 328, + 334, + 288, + 384, + 256, + 90, + 84, + 16 + ], + "offset": 0, + "quadratic_rows": [ + 256, + 278, + 286, + 68, + 6, + 256, + 72, + 256, + 167 + ], + "linear_Z4": [ + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "phase": 0 + } + } + ], + [ + 386, + 916, + { + "rank": 5, + "left": { + "matrix_rows": [ + 1, + 36, + 70, + 132, + 6, + 264, + 2, + 16, + 24 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 4, + 24, + 24, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 3, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 68, + 10, + 32, + 384, + 86, + 16, + 88, + 256 + ], + "offset": 271, + "quadratic_rows": [ + 0, + 94, + 6, + 90, + 10, + 256, + 10, + 256, + 416 + ], + "linear_Z4": [ + 2, + 3, + 1, + 3, + 0, + 0, + 2, + 0, + 1 + ], + "phase": 3 + } + } + ], + [ + 391, + 916, + { + "rank": 5, + "left": { + "matrix_rows": [ + 33, + 68, + 134, + 260, + 6, + 8, + 2, + 16, + 27 + ], + "offset": 0, + "quadratic_rows": [ + 27, + 27, + 4, + 27, + 27, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 324, + 10, + 288, + 384, + 256, + 86, + 16, + 88 + ], + "offset": 4, + "quadratic_rows": [ + 256, + 94, + 262, + 90, + 10, + 256, + 266, + 256, + 485 + ], + "linear_Z4": [ + 0, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 1 + ], + "phase": 1 + } + } + ], + [ + 429, + 924, + { + "rank": 5, + "left": { + "matrix_rows": [ + 32, + 65, + 130, + 272, + 3, + 2, + 8, + 20, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 1, + 20, + 0, + 20, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 2, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 34, + 20, + 384, + 64, + 264, + 3, + 48, + 32, + 392 + ], + "offset": 105, + "quadratic_rows": [ + 2, + 19, + 48, + 136, + 54, + 20, + 0, + 136, + 0 + ], + "linear_Z4": [ + 2, + 1, + 0, + 1, + 1, + 2, + 2, + 3, + 0 + ], + "phase": 0 + } + } + ], + [ + 488, + 548, + { + "rank": 4, + "left": { + "matrix_rows": [ + 20, + 40, + 69, + 132, + 10, + 5, + 1, + 258, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 8, + 4, + 10, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 68, + 144, + 9, + 386, + 101, + 402, + 32, + 104, + 256 + ], + "offset": 5, + "quadratic_rows": [ + 109, + 18, + 5, + 105, + 274, + 9, + 9, + 256, + 144 + ], + "linear_Z4": [ + 3, + 1, + 1, + 3, + 3, + 0, + 2, + 0, + 2 + ], + "phase": 2 + } + } + ], + [ + 506, + 664, + { + "rank": 4, + "left": { + "matrix_rows": [ + 20, + 42, + 68, + 129, + 264, + 1, + 5, + 2, + 8 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 10, + 1, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 72, + 258, + 77, + 402, + 105, + 386, + 100, + 32, + 256 + ], + "offset": 5, + "quadratic_rows": [ + 37, + 272, + 45, + 68, + 130, + 5, + 72, + 144, + 258 + ], + "linear_Z4": [ + 3, + 2, + 3, + 0, + 0, + 0, + 1, + 3, + 3 + ], + "phase": 2 + } + } + ], + [ + 545, + 651, + { + "rank": 4, + "left": { + "matrix_rows": [ + 20, + 34, + 68, + 129, + 264, + 1, + 5, + 10, + 8 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 10, + 1, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 72, + 258, + 77, + 144, + 105, + 384, + 100, + 32, + 256 + ], + "offset": 269, + "quadratic_rows": [ + 37, + 128, + 45, + 68, + 384, + 5, + 72, + 402, + 144 + ], + "linear_Z4": [ + 3, + 0, + 3, + 0, + 0, + 0, + 1, + 1, + 0 + ], + "phase": 2 + } + } + ], + [ + 545, + 665, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 16, + 35, + 1, + 64, + 2, + 4, + 128, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 44, + 4, + 64, + 13, + 2, + 32, + 16, + 128, + 256 + ], + "offset": 47, + "quadratic_rows": [ + 12, + 0, + 1, + 41, + 0, + 40, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 0, + 3, + 0, + 3, + 2, + 0, + 0 + ], + "phase": 1 + } + } + ], + [ + 546, + 548, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 20, + 33, + 65, + 134, + 1, + 256, + 2, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 9, + 144, + 386, + 37, + 402, + 32, + 40, + 256, + 64 + ], + "offset": 1, + "quadratic_rows": [ + 45, + 18, + 1, + 41, + 18, + 9, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 1, + 2, + 3, + 3, + 0, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 546, + 635, + { + "rank": 4, + "left": { + "matrix_rows": [ + 16, + 34, + 69, + 129, + 266, + 4, + 1, + 8, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 8, + 5, + 10, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 108, + 402, + 68, + 272, + 13, + 256, + 96, + 64, + 400 + ], + "offset": 85, + "quadratic_rows": [ + 12, + 144, + 65, + 41, + 258, + 40, + 68, + 130, + 272 + ], + "linear_Z4": [ + 2, + 0, + 0, + 3, + 2, + 3, + 1, + 3, + 3 + ], + "phase": 0 + } + } + ], + [ + 548, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 33, + 68, + 130, + 4, + 5, + 2, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 65, + 130, + 72, + 96, + 128, + 100, + 32, + 144, + 256 + ], + "offset": 119, + "quadratic_rows": [ + 32, + 0, + 0, + 96, + 0, + 9, + 72, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0 + ], + "phase": 0 + } + } + ], + [ + 551, + 553, + { + "rank": 3, + "left": { + "matrix_rows": [ + 12, + 18, + 37, + 68, + 129, + 261, + 1, + 6, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 6, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 276, + 258, + 393, + 325, + 384, + 256, + 328, + 80, + 288 + ], + "offset": 0, + "quadratic_rows": [ + 205, + 128, + 341, + 201, + 340, + 0, + 29, + 139, + 276 + ], + "linear_Z4": [ + 1, + 0, + 3, + 1, + 1, + 0, + 2, + 3, + 1 + ], + "phase": 0 + } + } + ], + [ + 551, + 683, + { + "rank": 4, + "left": { + "matrix_rows": [ + 30, + 34, + 65, + 142, + 4, + 257, + 8, + 15, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 15, + 15, + 15, + 15, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 388, + 271, + 157, + 205, + 389, + 384, + 256, + 392, + 288 + ], + "offset": 34, + "quadratic_rows": [ + 219, + 141, + 90, + 223, + 141, + 0, + 141, + 219, + 0 + ], + "linear_Z4": [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 3, + 0 + ], + "phase": 0 + } + } + ], + [ + 553, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 16, + 33, + 66, + 4, + 2, + 7, + 128, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 6, + 5, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 65, + 72, + 80, + 96, + 2, + 100, + 32, + 128, + 256 + ], + "offset": 75, + "quadratic_rows": [ + 32, + 0, + 0, + 96, + 64, + 9, + 24, + 0, + 0 + ], + "linear_Z4": [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + "phase": 0 + } + } + ], + [ + 561, + 657, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 20, + 33, + 65, + 132, + 1, + 2, + 6, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 5, + 192, + 210, + 41, + 194, + 36, + 32, + 128, + 256 + ], + "offset": 133, + "quadratic_rows": [ + 45, + 18, + 37, + 1, + 66, + 5, + 144, + 192, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 2, + 0, + 0, + 2, + 3, + 0 + ], + "phase": 1 + } + } + ], + [ + 561, + 660, + { + "rank": 4, + "left": { + "matrix_rows": [ + 16, + 40, + 69, + 129, + 258, + 4, + 8, + 10, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 10, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 300, + 16, + 36, + 210, + 13, + 18, + 256, + 288, + 128 + ], + "offset": 443, + "quadratic_rows": [ + 12, + 194, + 1, + 9, + 64, + 0, + 146, + 194, + 0 + ], + "linear_Z4": [ + 2, + 1, + 0, + 1, + 0, + 0, + 2, + 3, + 2 + ], + "phase": 3 + } + } + ], + [ + 562, + 564, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 33, + 68, + 130, + 4, + 256, + 2, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 269, + 146, + 264, + 289, + 128, + 300, + 32, + 144, + 64 + ], + "offset": 5, + "quadratic_rows": [ + 45, + 16, + 37, + 257, + 18, + 5, + 0, + 0, + 264 + ], + "linear_Z4": [ + 3, + 0, + 3, + 0, + 1, + 0, + 0, + 2, + 1 + ], + "phase": 2 + } + } + ], + [ + 562, + 649, + { + "rank": 4, + "left": { + "matrix_rows": [ + 20, + 34, + 68, + 129, + 264, + 1, + 8, + 10, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 10, + 1, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 264, + 66, + 269, + 144, + 297, + 192, + 292, + 32, + 64 + ], + "offset": 269, + "quadratic_rows": [ + 37, + 128, + 45, + 260, + 192, + 5, + 144, + 210, + 264 + ], + "linear_Z4": [ + 3, + 0, + 3, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "phase": 2 + } + } + ], + [ + 564, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 16, + 34, + 66, + 132, + 1, + 260, + 4, + 3 + ], + "offset": 0, + "quadratic_rows": [ + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 260, + 144, + 32, + 2, + 288, + 296, + 128, + 192 + ], + "offset": 207, + "quadratic_rows": [ + 288, + 0, + 32, + 0, + 0, + 5, + 0, + 0, + 257 + ], + "linear_Z4": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "phase": 0 + } + } + ], + [ + 594, + 724, + { + "rank": 5, + "left": { + "matrix_rows": [ + 34, + 64, + 144, + 259, + 3, + 1, + 8, + 20, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 20, + 0, + 20, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 2, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 40, + 49, + 384, + 64, + 260, + 57, + 10, + 388, + 16 + ], + "offset": 362, + "quadratic_rows": [ + 9, + 8, + 132, + 3, + 0, + 0, + 0, + 132, + 0 + ], + "linear_Z4": [ + 1, + 2, + 1, + 2, + 2, + 0, + 2, + 3, + 0 + ], + "phase": 1 + } + } + ], + [ + 595, + 736, + { + "rank": 5, + "left": { + "matrix_rows": [ + 48, + 64, + 134, + 4, + 258, + 2, + 8, + 17, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 17, + 4, + 6, + 0, + 17, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 2, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 384, + 60, + 36, + 64, + 257, + 385, + 18, + 44, + 32 + ], + "offset": 328, + "quadratic_rows": [ + 129, + 16, + 48, + 24, + 30, + 36, + 0, + 129, + 0 + ], + "linear_Z4": [ + 1, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 0 + ], + "phase": 3 + } + } + ], + [ + 602, + 640, + { + "rank": 2, + "left": { + "matrix_rows": [ + 6, + 8, + 16, + 34, + 64, + 128, + 3, + 1, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 192, + 73, + 193, + 2, + 4, + 200, + 16, + 32, + 256 + ], + "offset": 2, + "quadratic_rows": [ + 137, + 0, + 0, + 137, + 0, + 0, + 192, + 73, + 0 + ], + "linear_Z4": [ + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + 0 + ], + "phase": 1 + } + } + ], + [ + 602, + 688, + { + "rank": 2, + "left": { + "matrix_rows": [ + 5, + 10, + 17, + 33, + 64, + 1, + 130, + 2, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 9, + 194, + 37, + 130, + 32, + 40, + 16, + 192, + 256 + ], + "offset": 3, + "quadratic_rows": [ + 45, + 66, + 1, + 41, + 0, + 9, + 66, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 3, + 0, + 0, + 3, + 2, + 0 + ], + "phase": 2 + } + } + ], + [ + 602, + 689, + { + "rank": 2, + "left": { + "matrix_rows": [ + 4, + 11, + 16, + 32, + 64, + 128, + 257, + 2, + 3 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 450, + 130, + 1, + 258, + 4, + 8, + 16, + 32, + 448 + ], + "offset": 3, + "quadratic_rows": [ + 0, + 64, + 0, + 0, + 0, + 0, + 66, + 0, + 0 + ], + "linear_Z4": [ + 0, + 2, + 0, + 0, + 0, + 0, + 3, + 0, + 2 + ], + "phase": 2 + } + } + ], + [ + 636, + 647, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 18, + 32, + 66, + 130, + 2, + 263, + 3, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 5, + 6, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 448, + 258, + 64, + 193, + 234, + 204, + 32, + 48, + 256 + ], + "offset": 319, + "quadratic_rows": [ + 192, + 490, + 200, + 14, + 0, + 194, + 39, + 423, + 130 + ], + "linear_Z4": [ + 2, + 1, + 2, + 3, + 0, + 0, + 0, + 3, + 2 + ], + "phase": 1 + } + } + ], + [ + 640, + 647, + { + "rank": 2, + "left": { + "matrix_rows": [ + 7, + 9, + 19, + 34, + 66, + 130, + 258, + 2, + 3 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 135, + 389, + 257, + 394, + 268, + 128, + 144, + 160, + 192 + ], + "offset": 2, + "quadratic_rows": [ + 2, + 271, + 10, + 14, + 0, + 0, + 0, + 0, + 258 + ], + "linear_Z4": [ + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 1 + ], + "phase": 1 + } + } + ], + [ + 640, + 649, + { + "rank": 3, + "left": { + "matrix_rows": [ + 12, + 2, + 20, + 33, + 65, + 129, + 257, + 1, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 5, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 392, + 2, + 269, + 393, + 388, + 128, + 144, + 160, + 192 + ], + "offset": 7, + "quadratic_rows": [ + 133, + 0, + 141, + 388, + 0, + 0, + 0, + 269, + 392 + ], + "linear_Z4": [ + 3, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "phase": 3 + } + } + ], + [ + 647, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 36, + 6, + 71, + 3, + 135, + 263, + 7 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 5, + 6, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 297, + 258, + 300, + 264, + 296, + 288, + 272, + 320, + 384 + ], + "offset": 45, + "quadratic_rows": [ + 32, + 40, + 8, + 46, + 0, + 43, + 0, + 0, + 0 + ], + "linear_Z4": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0 + ], + "phase": 0 + } + } + ], + [ + 652, + 657, + { + "rank": 4, + "left": { + "matrix_rows": [ + 16, + 42, + 69, + 129, + 264, + 4, + 8, + 2, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 10, + 5, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 300, + 66, + 260, + 210, + 9, + 194, + 292, + 256, + 64 + ], + "offset": 144, + "quadratic_rows": [ + 8, + 80, + 264, + 45, + 130, + 40, + 66, + 144, + 260 + ], + "linear_Z4": [ + 2, + 2, + 2, + 3, + 0, + 3, + 3, + 3, + 3 + ], + "phase": 2 + } + } + ], + [ + 657, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 36, + 65, + 128, + 4, + 258, + 2, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 130, + 260, + 288, + 128, + 32, + 296, + 16, + 192 + ], + "offset": 119, + "quadratic_rows": [ + 32, + 0, + 288, + 0, + 0, + 5, + 0, + 0, + 260 + ], + "linear_Z4": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "phase": 0 + } + } + ], + [ + 661, + 660, + { + "rank": 4, + "left": { + "matrix_rows": [ + 16, + 40, + 69, + 129, + 266, + 4, + 5, + 2, + 8 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 10, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 108, + 400, + 36, + 386, + 13, + 402, + 64, + 96, + 256 + ], + "offset": 435, + "quadratic_rows": [ + 12, + 18, + 1, + 9, + 274, + 0, + 0, + 256, + 400 + ], + "linear_Z4": [ + 2, + 3, + 0, + 1, + 1, + 0, + 2, + 0, + 1 + ], + "phase": 2 + } + } + ], + [ + 661, + 664, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 20, + 33, + 65, + 132, + 1, + 256, + 2, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 5, + 384, + 402, + 41, + 386, + 36, + 32, + 256, + 64 + ], + "offset": 133, + "quadratic_rows": [ + 45, + 18, + 37, + 1, + 130, + 5, + 0, + 272, + 384 + ], + "linear_Z4": [ + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 2, + 3 + ], + "phase": 1 + } + } + ], + [ + 664, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 36, + 65, + 128, + 4, + 5, + 258, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 65, + 258, + 68, + 96, + 256, + 32, + 104, + 16, + 384 + ], + "offset": 119, + "quadratic_rows": [ + 32, + 0, + 96, + 0, + 0, + 5, + 68, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "phase": 0 + } + } + ], + [ + 665, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 33, + 65, + 132, + 1, + 256, + 6, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 258, + 144, + 32, + 384, + 36, + 40, + 256, + 64 + ], + "offset": 140, + "quadratic_rows": [ + 32, + 128, + 0, + 0, + 384, + 1, + 0, + 402, + 144 + ], + "linear_Z4": [ + 2, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0 + ], + "phase": 3 + } + } + ], + [ + 684, + 695, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 20, + 33, + 65, + 128, + 1, + 260, + 2, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 9, + 384, + 450, + 37, + 386, + 32, + 40, + 16, + 256 + ], + "offset": 261, + "quadratic_rows": [ + 45, + 66, + 1, + 41, + 0, + 9, + 130, + 320, + 384 + ], + "linear_Z4": [ + 3, + 3, + 2, + 3, + 0, + 0, + 0, + 2, + 3 + ], + "phase": 1 + } + } + ], + [ + 686, + 693, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 17, + 32, + 66, + 130, + 2, + 261, + 1, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 450, + 40, + 192, + 1, + 128, + 12, + 32, + 48, + 448 + ], + "offset": 168, + "quadratic_rows": [ + 0, + 320, + 8, + 12, + 0, + 0, + 130, + 192, + 258 + ], + "linear_Z4": [ + 2, + 0, + 2, + 1, + 0, + 2, + 2, + 3, + 3 + ], + "phase": 3 + } + } + ], + [ + 688, + 695, + { + "rank": 2, + "left": { + "matrix_rows": [ + 4, + 11, + 16, + 32, + 64, + 128, + 258, + 2, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 130, + 450, + 1, + 386, + 4, + 8, + 16, + 32, + 128 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 192, + 0, + 0, + 0, + 0, + 258, + 130, + 320 + ], + "linear_Z4": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 3 + ], + "phase": 0 + } + } + ], + [ + 688, + 696, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 20, + 32, + 65, + 129, + 1, + 262, + 6, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 40, + 320, + 386, + 9, + 450, + 4, + 32, + 48, + 128 + ], + "offset": 200, + "quadratic_rows": [ + 8, + 66, + 0, + 9, + 0, + 0, + 66, + 0, + 0 + ], + "linear_Z4": [ + 2, + 1, + 0, + 3, + 0, + 2, + 3, + 2, + 0 + ], + "phase": 1 + } + } + ], + [ + 689, + 682, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 33, + 65, + 128, + 1, + 260, + 4, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 9, + 130, + 320, + 37, + 384, + 32, + 40, + 16, + 128 + ], + "offset": 261, + "quadratic_rows": [ + 45, + 256, + 1, + 41, + 0, + 9, + 384, + 320, + 450 + ], + "linear_Z4": [ + 3, + 0, + 2, + 3, + 0, + 0, + 0, + 0, + 1 + ], + "phase": 1 + } + } + ], + [ + 689, + 693, + { + "rank": 2, + "left": { + "matrix_rows": [ + 4, + 9, + 16, + 34, + 66, + 2, + 129, + 256, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 322, + 40, + 1, + 256, + 12, + 32, + 48, + 320, + 128 + ], + "offset": 84, + "quadratic_rows": [ + 0, + 64, + 8, + 12, + 0, + 0, + 66, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 2, + 1, + 0, + 2, + 1, + 0, + 2 + ], + "phase": 3 + } + } + ], + [ + 693, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 16, + 34, + 66, + 3, + 1, + 132, + 260, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 17, + 20, + 320, + 32, + 2, + 48, + 56, + 256, + 384 + ], + "offset": 207, + "quadratic_rows": [ + 48, + 0, + 32, + 0, + 17, + 5, + 0, + 0, + 0 + ], + "linear_Z4": [ + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "phase": 0 + } + } + ], + [ + 695, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 33, + 68, + 5, + 4, + 128, + 258, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 17, + 258, + 24, + 48, + 256, + 52, + 32, + 64, + 384 + ], + "offset": 119, + "quadratic_rows": [ + 32, + 0, + 0, + 48, + 24, + 9, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "phase": 0 + } + } + ], + [ + 724, + 246, + { + "rank": 2, + "left": { + "matrix_rows": [ + 4, + 9, + 18, + 33, + 1, + 64, + 128, + 258, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 18, + 260, + 3, + 16, + 256, + 24, + 32, + 64, + 384 + ], + "offset": 62, + "quadratic_rows": [ + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 3, + 0, + 0, + 2, + 0, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 734, + 911, + { + "rank": 4, + "left": { + "matrix_rows": [ + 1, + 20, + 36, + 66, + 130, + 8, + 6, + 258, + 2 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 72, + 78, + 32, + 330, + 324, + 256, + 272, + 384 + ], + "offset": 13, + "quadratic_rows": [ + 0, + 262, + 270, + 68, + 0, + 0, + 72, + 0, + 6 + ], + "linear_Z4": [ + 2, + 3, + 3, + 2, + 0, + 2, + 3, + 0, + 2 + ], + "phase": 3 + } + } + ], + [ + 734, + 1069, + { + "rank": 3, + "left": { + "matrix_rows": [ + 8, + 23, + 35, + 71, + 3, + 6, + 2, + 128, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 10, + 106, + 46, + 5, + 118, + 16, + 120, + 128, + 256 + ], + "offset": 5, + "quadratic_rows": [ + 4, + 58, + 73, + 62, + 10, + 106, + 36, + 0, + 0 + ], + "linear_Z4": [ + 0, + 3, + 2, + 3, + 0, + 3, + 0, + 0, + 0 + ], + "phase": 2 + } + } + ], + [ + 736, + 127, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 18, + 36, + 68, + 2, + 6, + 128, + 257, + 1 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 34, + 36, + 256, + 16, + 48, + 56, + 64, + 384 + ], + "offset": 95, + "quadratic_rows": [ + 0, + 48, + 16, + 0, + 6, + 34, + 0, + 0, + 0 + ], + "linear_Z4": [ + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 2 + ], + "phase": 0 + } + } + ], + [ + 744, + 916, + { + "rank": 4, + "left": { + "matrix_rows": [ + 1, + 20, + 38, + 68, + 134, + 8, + 2, + 262, + 6 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 1, + 68, + 10, + 32, + 326, + 256, + 328, + 272, + 384 + ], + "offset": 9, + "quadratic_rows": [ + 0, + 334, + 6, + 330, + 0, + 0, + 10, + 0, + 10 + ], + "linear_Z4": [ + 2, + 1, + 3, + 1, + 0, + 2, + 0, + 0, + 2 + ], + "phase": 2 + } + } + ], + [ + 744, + 1070, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 21, + 39, + 69, + 135, + 2, + 1, + 263, + 7 + ], + "offset": 0, + "quadratic_rows": [ + 1, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 15, + 36, + 10, + 69, + 294, + 256, + 296, + 272, + 384 + ], + "offset": 241, + "quadratic_rows": [ + 75, + 289, + 76, + 293, + 0, + 10, + 5, + 0, + 10 + ], + "linear_Z4": [ + 3, + 2, + 3, + 2, + 0, + 0, + 2, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 745, + 917, + { + "rank": 4, + "left": { + "matrix_rows": [ + 18, + 32, + 67, + 1, + 2, + 132, + 8, + 268, + 12 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 28, + 25, + 288, + 64, + 29, + 14, + 16, + 256, + 384 + ], + "offset": 247, + "quadratic_rows": [ + 5, + 12, + 27, + 30, + 28, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 1, + 2, + 0, + 1, + 1, + 0, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 755, + 924, + { + "rank": 4, + "left": { + "matrix_rows": [ + 16, + 35, + 4, + 64, + 1, + 2, + 136, + 264, + 8 + ], + "offset": 0, + "quadratic_rows": [ + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 50, + 2, + 4, + 320, + 19, + 32, + 8, + 256, + 384 + ], + "offset": 55, + "quadratic_rows": [ + 18, + 1, + 0, + 0, + 49, + 48, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 0, + 2, + 0, + 3, + 3, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 755, + 1072, + { + "rank": 3, + "left": { + "matrix_rows": [ + 10, + 18, + 3, + 36, + 65, + 1, + 128, + 260, + 4 + ], + "offset": 0, + "quadratic_rows": [ + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 20, + 23, + 264, + 53, + 38, + 256, + 32, + 64, + 384 + ], + "offset": 3, + "quadratic_rows": [ + 35, + 51, + 20, + 0, + 6, + 3, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "phase": 2 + } + } + ], + [ + 772, + 911, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 16, + 32, + 66, + 130, + 4, + 2, + 261, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 72, + 32, + 256, + 10, + 4, + 64, + 80, + 384 + ], + "offset": 251, + "quadratic_rows": [ + 0, + 8, + 0, + 10, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 0, + 2, + 2, + 1, + 0, + 0, + 2, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 772, + 916, + { + "rank": 3, + "left": { + "matrix_rows": [ + 9, + 16, + 34, + 64, + 130, + 4, + 2, + 261, + 5 + ], + "offset": 0, + "quadratic_rows": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 68, + 32, + 256, + 6, + 64, + 8, + 80, + 384 + ], + "offset": 251, + "quadratic_rows": [ + 0, + 4, + 6, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 0, + 2, + 1, + 2, + 0, + 0, + 2, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 911, + 127, + { + "rank": 2, + "left": { + "matrix_rows": [ + 4, + 9, + 18, + 33, + 2, + 64, + 3, + 128, + 256 + ], + "offset": 0, + "quadratic_rows": [ + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 66, + 68, + 1, + 80, + 16, + 88, + 32, + 128, + 256 + ], + "offset": 51, + "quadratic_rows": [ + 0, + 16, + 80, + 0, + 6, + 0, + 68, + 0, + 0 + ], + "linear_Z4": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + "phase": 0 + } + } + ], + [ + 1089, + 127, + { + "rank": 6, + "left": { + "matrix_rows": [ + 65, + 130, + 260, + 8, + 14, + 12, + 16, + 32, + 59 + ], + "offset": 0, + "quadratic_rows": [ + 59, + 53, + 2, + 57, + 59, + 59, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 2, + 3, + 3, + 3, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 49, + 290, + 20, + 312, + 320, + 384, + 304, + 48, + 32 + ], + "offset": 398, + "quadratic_rows": [ + 256, + 272, + 48, + 304, + 14, + 300, + 256, + 256, + 235 + ], + "linear_Z4": [ + 0, + 0, + 0, + 2, + 2, + 3, + 0, + 0, + 2 + ], + "phase": 1 + } + } + ], + [ + 1089, + 207, + { + "rank": 5, + "left": { + "matrix_rows": [ + 45, + 66, + 133, + 264, + 15, + 13, + 17, + 1, + 26 + ], + "offset": 0, + "quadratic_rows": [ + 27, + 21, + 14, + 21, + 27, + 0, + 0, + 0, + 0 + ], + "linear_Z4": [ + 3, + 2, + 3, + 2, + 3, + 0, + 0, + 0, + 0 + ], + "phase": 0 + }, + "right": { + "matrix_rows": [ + 257, + 290, + 449, + 237, + 320, + 229, + 48, + 272, + 304 + ], + "offset": 326, + "quadratic_rows": [ + 201, + 272, + 284, + 469, + 14, + 0, + 201, + 329, + 398 + ], + "linear_Z4": [ + 1, + 0, + 3, + 2, + 0, + 0, + 3, + 2, + 3 + ], + "phase": 0 + } + } + ] + ] +} \ No newline at end of file diff --git a/research/shared-wire-split-composition/chart_delta.py b/research/shared-wire-split-composition/chart_delta.py new file mode 100644 index 0000000000..47940a2319 --- /dev/null +++ b/research/shared-wire-split-composition/chart_delta.py @@ -0,0 +1,28 @@ +import json,gzip,pathlib,sys,importlib.util,copy +if not __debug__:raise RuntimeError('Run without -O; assertions are proof checks.') +ROOT=pathlib.Path(__file__).resolve().parent;SRC=ROOT +def load(p,n): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);sys.modules[n]=m;s.loader.exec_module(m);return m +C=load(SRC/'frozen/clifford_exact.py','split_compiler');V=load(SRC/'frozen/native_verify.py','split_native') +base=json.load(gzip.open(SRC/'data/main_6936.json.gz'));w=json.load(gzip.open(sys.argv[1]));assert w['frames']==base['frames'] +def maps(z): + ms={(e[2],e[3])for e in z['program']if e[0]=='MOVE'};main=set(z['live'])|{r+112 for r in z['live']}|set(z['hosted']['X2'])|set(z['hosted']['Y2']) + ms|={(z['initial'][r],z['final'][r])for r in range(z['public'])if r not in main};return ms +old=maps(base);new=maps(w);charts={};payload=[] +def chart(f): + if f not in charts:charts[f]=C.canonical_frame(9,tuple(w['frames'][f])) + return charts[f] +for a,b in sorted(new-old): + recipe,_=C.lower_child(chart(a).adjoint().then(chart(b)));expected=V.adjoint(V.frame(w['frames'][a],9))+V.frame(w['frames'][b],9) + V.equal(V.recipe(recipe),expected,'new exact chart map plus global phase');assert recipe['rank']==abs(len(w['frames'][a])-len(w['frames'][b]));payload.append([a,b,recipe]) +a,b,recipe=payload[0] +bad=copy.deepcopy(recipe);bad['left']['phase']=(bad['left']['phase']+1)%4 +try:V.equal(V.recipe(bad),V.adjoint(V.frame(w['frames'][a],9))+V.frame(w['frames'][b],9),'wrong phase must fail') +except ValueError:pass +else:raise AssertionError('wrong phase accepted') +print('PASS_CHART_DELTA',len(old),'base maps',len(new),'new total',len(new-old),'introduced',len(old-new),'retired') +result={'word':'data/final.json.gz','base_maps':len(old),'total_maps':len(new),'introduced':sorted(new-old),'retired':sorted(old-new),'recipes':payload} +if '--write' in sys.argv: + (ROOT/'chart_delta.json').write_text(json.dumps(result,indent=1)) +else: + assert json.loads((ROOT/'chart_delta.json').read_text())==json.loads(json.dumps(result)), 'Frozen chart receipt must replay exactly' diff --git a/research/shared-wire-split-composition/compose.py b/research/shared-wire-split-composition/compose.py new file mode 100644 index 0000000000..681a55d6d7 --- /dev/null +++ b/research/shared-wire-split-composition/compose.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +"""Compose #6937 wh's 16 wires with #6936's two plain helper splits. +All source events used by the composition are preserved with exact rational +coefficients. A dependency DAG preserves runs of commuting ADD destinations +and ADD sources on both branch words; other accesses are exclusive. +""" +import json,gzip,heapq,copy,collections,pathlib,sys +ROOT=pathlib.Path(__file__).resolve().parent +OUT=ROOT/'build' + +def read(p):return json.load(gzip.open(p)) +def access(e): + if e[0] in ('MOVE','INIT','CLEAR','SCALE'):return [(e[1],'M')] + return [(e[1],'M' if e[0]=='COPY' else 'A'),(e[2],'R')] +def tokens(seq): + c=collections.Counter();a=[] + for e in seq: + e=tuple(e);c[e]+=1;a.append((e,c[e])) + return a + +def main(): + m=read(ROOT/'data/main_6936.json.gz');w=read(ROOT/'data/wh_6937.json.gz') + assert m['frames']==w['frames'] + # Reserve 1459 and 1460 for the split tails; shift wh's 16 helper wires and owned scratch. + def shift(e): + e=e.copy();e[1]+=2*(e[1]>=1459) + if e[0] in ('ADD','COPY'):e[2]+=2*(e[2]>=1459) + return e + wp=[shift(e) for e in w['program']] + # main's owned roles must move by the 16 wh wires. + def shiftmain(e): + e=e.copy();e[1]+=16*(e[1]>=1461) + if e[0] in ('ADD','COPY'):e[2]+=16*(e[2]>=1461) + return e + mp=[shiftmain(e) for e in m['program']] + split={1452,1455,1459,1460} + touches=lambda e:any(r in split for r,c in access(e)) + p=[e for e in wp if not touches(e)]+[e for e in mp if touches(e)] + ts=tokens(p);ids={x:i for i,x in enumerate(ts)} + assert len(ids)==len(ts) + adj=[set()for _ in ts];deg=[0]*len(ts);priority=[10**8+i for i in range(len(ts))] + constraints=[] + for nm,program in [('wh',wp),('main',mp)]: + # Source occurrence labels are safe here: any repeated exact event has unchanged multiplicity. + nt=tokens(program); regs={} + for pos,t in enumerate(nt): + if t not in ids:continue + idx=ids[t];priority[idx]=min(priority[idx],pos) + for r,c in access(t[0]):regs.setdefault(r,[]).append((c,idx)) + count=0 + for r,seq in regs.items(): + runs=[] + for c,i in seq: + if runs and runs[-1][0]==c and c in ('A','R'):runs[-1][1].append(i) + else:runs.append((c,[i])) + for (_,a),(_,b) in zip(runs,runs[1:]): + for i in a: + for j in b: + if j not in adj[i]:adj[i].add(j);deg[j]+=1;count+=1 + constraints.append((nm,count)) + q=[(priority[i],i) for i,d in enumerate(deg) if not d];heapq.heapify(q);order=[] + while q: + _,i=heapq.heappop(q);order.append(i) + for j in adj[i]: + deg[j]-=1 + if deg[j]==0:heapq.heappush(q,(priority[j],j)) + print('events',len(ts),'ordered',len(order),'constraints',constraints) + if len(order)!=len(ts): + remaining=[i for i,d in enumerate(deg) if d] + (OUT/'cycles.json').write_text(json.dumps([ts[i] for i in remaining],indent=1)) + print('remaining',len(remaining),'first',[(i,ts[i])for i in remaining[:15]]) + return 1 + z=copy.deepcopy(w);z['initial']=w['initial'][:1459]+[m['initial'][1459],m['initial'][1460]]+w['initial'][1459:] + z['final']=w['final'][:1459]+[m['final'][1459],m['final'][1460]]+w['final'][1459:] + z['final'][1452]=m['final'][1452];z['final'][1455]=m['final'][1455] + z['public']=len(z['initial']);z['program']=[list(ts[i][0])for i in order] + with gzip.open(OUT/'composed.json.gz','wt')as f:json.dump(z,f,separators=(',',':')) + (OUT/'composition.json').write_text(json.dumps({'events':len(ts),'constraints':constraints,'split_roles':sorted(split),'source_event_counts':{'wh_removed':sum(touches(e)for e in wp),'main_added':sum(touches(e)for e in mp)}},indent=2)) + print('WROTE',OUT/'composed.json.gz') + return 0 +if __name__=='__main__':sys.exit(main()) diff --git a/research/shared-wire-split-composition/data/bit-admission.json b/research/shared-wire-split-composition/data/bit-admission.json new file mode 100644 index 0000000000..575f76487f --- /dev/null +++ b/research/shared-wire-split-composition/data/bit-admission.json @@ -0,0 +1,19787 @@ +{ + "status": "PASS_PAIRED_EFREE_BIT_EXISTING_00385248", + "ordinary_admitted": "12039/3125000", + "previous_ordinary": "17/5000", + "ordinary_gain": null, + "existing_same_profile_ordinary": "12039/3125000", + "raw_tested": "385253/100000000", + "raw_crossing": [ + "19262696967/5000000000000", + "7705078787/2000000000000" + ], + "covered_saving": "19262649/5000000000", + "caller_sha256": "757b3523798f840bdb02028b23708c3416627a99ea09e7a3c4bcdc5cd0c7ce4b", + "native_source_sha256": "51203e7fc75ba10bd3ac3f8e675759f47e13d262bea66b6600d1e515095cad78", + "source_pins": { + "bit": "435bbe91fb28cb1d7a569ca70c6c4e9eb302d486", + "main_wire": "d360b1182b6d21b1ee2354856abcb50646ad618b", + "main": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "query_only": "617903497387a98f7ca929ad0b6928dd32abffec", + "prior_same_invoice": "79603d1f7d243f1d034613df84991673a94ad5ae" + }, + "forward_coefficients": 1444, + "reverse_coefficients": 1444, + "source": { + "public": 659, + "owned_labels": 237, + "owned_lifetimes": 237, + "peak_owned": 237, + "nonzero_owned_erasures": 237, + "checked_public_matrix_coefficients": 434281, + "exact_scalar_endpoint": "X_i\u2192X_i; Y_i\u2192Y_i+X_i; each helper independent", + "native_edges": 2871, + "charts": [ + { + "port": 0, + "input_frame": 2, + "output_frame": 525, + "basis": [ + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "1" + }, + { + "port": 1, + "input_frame": 3, + "output_frame": 526, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-1" + }, + { + "port": 2, + "input_frame": 4, + "output_frame": 527, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "1" + }, + { + "port": 3, + "input_frame": 5, + "output_frame": 528, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-1" + }, + { + "port": 4, + "input_frame": 6, + "output_frame": 529, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "1" + }, + { + "port": 5, + "input_frame": 7, + "output_frame": 530, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-1" + }, + { + "port": 6, + "input_frame": 8, + "output_frame": 531, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "1" + }, + { + "port": 7, + "input_frame": 9, + "output_frame": 532, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-1" + }, + { + "port": 8, + "input_frame": 10, + "output_frame": 533, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + -1, + 0, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "1/4", + "0", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "-1/4", + "0", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 9, + "input_frame": 11, + "output_frame": 534, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + 1, + 0, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "-1/4", + "0", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 10, + "input_frame": 12, + "output_frame": 535, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + 1, + 0, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "1/4", + "0", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 11, + "input_frame": 13, + "output_frame": 536, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 1, + 0, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "1/4", + "0", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "1/4", + "3/4", + "0", + "1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "1/4", + "0", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 12, + "input_frame": 14, + "output_frame": 537, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + -1, + 0, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "1/4", + "3/4", + "0", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "1/4", + "0", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 13, + "input_frame": 15, + "output_frame": 538, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 1, + 0, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "1/4", + "3/4", + "0", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "-1/4", + "0", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 14, + "input_frame": 16, + "output_frame": 539, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + -1, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 15, + "input_frame": 17, + "output_frame": 540, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 1, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 16, + "input_frame": 18, + "output_frame": 541, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + -1, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 17, + "input_frame": 19, + "output_frame": 542, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 1, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 18, + "input_frame": 20, + "output_frame": 543, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 1, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 19, + "input_frame": 21, + "output_frame": 544, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + -1, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 20, + "input_frame": 22, + "output_frame": 545, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 1, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "3/4", + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 21, + "input_frame": 23, + "output_frame": 546, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + -1, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "1/4", + "0", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 22, + "input_frame": 24, + "output_frame": 547, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "0", + "0", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 23, + "input_frame": 25, + "output_frame": 548, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "0", + "0", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "4" + }, + { + "port": 24, + "input_frame": 26, + "output_frame": 549, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + -1, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 25, + "input_frame": 27, + "output_frame": 550, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 1, + 0, + 0, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "1/4", + "1/4", + "0", + "0", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 26, + "input_frame": 28, + "output_frame": 551, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 1, + 0, + 0, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "3/4", + "1/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "1/4", + "3/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "0", + "0", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 27, + "input_frame": 29, + "output_frame": 552, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + -1, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "3/4", + "1/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "1/4", + "3/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "0", + "0", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "4" + }, + { + "port": 28, + "input_frame": 30, + "output_frame": 553, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 1, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "3/4", + "1/4", + "0", + "0", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "1/4", + "3/4", + "0", + "0", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 29, + "input_frame": 31, + "output_frame": 554, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + -1, + 0, + 0, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "3/4", + "1/4", + "0", + "0", + "0", + "0", + "1/4", + "1/4" + ], + [ + "1/4", + "3/4", + "0", + "0", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "0", + "0", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 30, + "input_frame": 32, + "output_frame": 555, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + -1, + -1, + 0, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 31, + "input_frame": 33, + "output_frame": 556, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 32, + "input_frame": 34, + "output_frame": 557, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + -1, + -1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 33, + "input_frame": 35, + "output_frame": 558, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 34, + "input_frame": 36, + "output_frame": 559, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + -1, + 1, + 0, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "3/4", + "1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "1/4", + "3/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 35, + "input_frame": 37, + "output_frame": 560, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 1, + -1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "3/4", + "1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "1/4", + "3/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 36, + "input_frame": 38, + "output_frame": 561, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + -1, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "3/4", + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "1/4", + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 37, + "input_frame": 39, + "output_frame": 562, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 1, + -1, + 0, + 0, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "3/4", + "1/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0" + ], + [ + "1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 38, + "input_frame": 40, + "output_frame": 563, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + -1, + 0, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "-1/4", + "0", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 39, + "input_frame": 41, + "output_frame": 564, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 1, + 0, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "-1/4", + "0", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 40, + "input_frame": 42, + "output_frame": 565, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + -1, + 0, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "1/4", + "0", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 41, + "input_frame": 43, + "output_frame": 566, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 1, + 0, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "1/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "-1/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "3/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "1/4", + "0", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 42, + "input_frame": 44, + "output_frame": 567, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + 1, + 0, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "3/4", + "0", + "1/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "1/4", + "0", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 43, + "input_frame": 45, + "output_frame": 568, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + -1, + 0, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "1/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "1/4", + "0", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 44, + "input_frame": 46, + "output_frame": 569, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + 1, + 0, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "3/4", + "0", + "1/4", + "0", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 45, + "input_frame": 47, + "output_frame": 570, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + -1, + 0, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "1/4", + "0", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "3/4", + "0", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "-1/4", + "0", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 46, + "input_frame": 48, + "output_frame": 571, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + -1, + 0, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "0", + "1/4", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 47, + "input_frame": 49, + "output_frame": 572, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + 1, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 48, + "input_frame": 50, + "output_frame": 573, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + -1, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "1/4", + "0", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "-1/4", + "0", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "-1/4", + "3/4", + "0", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "1/4", + "0", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 49, + "input_frame": 51, + "output_frame": 574, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 1, + 0, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "0", + "1/4", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "1/4", + "3/4", + "0", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "1/4", + "0", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 50, + "input_frame": 52, + "output_frame": 575, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 1, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 51, + "input_frame": 53, + "output_frame": 576, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + -1, + 0, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "1/4", + "0", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 52, + "input_frame": 54, + "output_frame": 577, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 1, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "1/4", + "1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "-1/4", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "3/4", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "-1/4", + "3/4", + "1/4" + ] + ], + "determinant": "4" + }, + { + "port": 53, + "input_frame": 55, + "output_frame": 578, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + -1, + -1, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "1/4", + "-1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "-1/4", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "3/4", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "1/4", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 54, + "input_frame": 56, + "output_frame": 579, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 1, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "1/4", + "-1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "-1/4", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "3/4", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "1/4", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 55, + "input_frame": 57, + "output_frame": 580, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + -1, + 1, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "1/4", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "3/4", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "1/4", + "3/4", + "-1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 56, + "input_frame": 58, + "output_frame": 581, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + -1, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "1/4", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "3/4", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "-1/4", + "1/4", + "3/4", + "1/4" + ] + ], + "determinant": "4" + }, + { + "port": 57, + "input_frame": 59, + "output_frame": 582, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + -1, + 1, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "-1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "1/4", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "3/4", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 58, + "input_frame": 60, + "output_frame": 583, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + -1, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "-1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "3/4", + "1/4", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "3/4", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1/4", + "-1/4", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 59, + "input_frame": 61, + "output_frame": 584, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + -1, + -1, + -1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "3/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 60, + "input_frame": 62, + "output_frame": 585, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "-1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "-1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "-1/4", + "3/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 61, + "input_frame": 63, + "output_frame": 586, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + -1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "1/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "-1/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "3/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "1/4", + "3/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 62, + "input_frame": 64, + "output_frame": 587, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + -1, + 1, + -1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "1/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "3/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "3/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 63, + "input_frame": 65, + "output_frame": 588, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + -1, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "1/4", + "-1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "3/4", + "1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "1/4", + "3/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 64, + "input_frame": 66, + "output_frame": 589, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + -1, + 1, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "-1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "1/4", + "1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "3/4", + "-1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "3/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 65, + "input_frame": 67, + "output_frame": 590, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + -1, + -1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "-1/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "3/4", + "1/4", + "1/4", + "1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "3/4", + "-1/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "-1/4", + "3/4", + "-1/4", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 66, + "input_frame": 68, + "output_frame": 591, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 0, + 1, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "-1/4", + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 67, + "input_frame": 69, + "output_frame": 592, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + 0, + -1, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "1/4", + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 68, + "input_frame": 70, + "output_frame": 593, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 0, + 1, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "1/4" + ], + [ + "1/4", + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 69, + "input_frame": 71, + "output_frame": 594, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + 0, + 1, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "1/4" + ], + [ + "3/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "1/4" + ], + [ + "-1/4", + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 70, + "input_frame": 72, + "output_frame": 595, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 0, + -1, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "-1/4", + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 71, + "input_frame": 73, + "output_frame": 596, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + -1, + 0, + 0, + 1, + 1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "3/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "1/4" + ], + [ + "1/4", + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 72, + "input_frame": 74, + "output_frame": 597, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 1, + 0, + 0, + -1, + -1, + 0, + 0 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "3/4", + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "1/4" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "-1/4" + ], + [ + "1/4", + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 73, + "input_frame": 75, + "output_frame": 598, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 0, + -1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "-1/4", + "0", + "-1/4", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 74, + "input_frame": 76, + "output_frame": 599, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + 0, + 1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "-1/4", + "0", + "-1/4", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 75, + "input_frame": 77, + "output_frame": 600, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 0, + -1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1/4", + "0", + "1/4", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 76, + "input_frame": 78, + "output_frame": 601, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + 0, + 1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1/4", + "0", + "1/4", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 77, + "input_frame": 79, + "output_frame": 602, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 0, + 1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "-1/4", + "0", + "1/4", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 78, + "input_frame": 80, + "output_frame": 603, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + 0, + -1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "-1/4", + "0", + "1/4", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 79, + "input_frame": 81, + "output_frame": 604, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + -1, + 0, + 1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "-1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "1/4", + "0", + "-1/4", + "3/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 80, + "input_frame": 82, + "output_frame": 605, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 1, + 0, + -1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "1/4", + "0", + "1/4", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "-1/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "1/4", + "0", + "-1/4", + "3/4", + "0", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 81, + "input_frame": 83, + "output_frame": 606, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + -1, + -1, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 82, + "input_frame": 84, + "output_frame": 607, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + -1, + -1, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 83, + "input_frame": 85, + "output_frame": 608, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 1, + 1, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "1/4", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 84, + "input_frame": 86, + "output_frame": 609, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + -1, + 1, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 85, + "input_frame": 87, + "output_frame": 610, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 1, + -1, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "1/4", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "4" + }, + { + "port": 86, + "input_frame": 88, + "output_frame": 611, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 0, + -1, + 1, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "1/4", + "-1/4" + ], + [ + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "3/4", + "1/4" + ] + ], + "determinant": "-4" + }, + { + "port": 87, + "input_frame": 89, + "output_frame": 612, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 0, + 1, + -1, + 0, + 0, + -1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "0", + "0", + "1/4", + "1/4" + ], + [ + "0", + "0", + "1/4", + "3/4", + "0", + "0", + "-1/4", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "-1/4", + "0", + "0", + "3/4", + "-1/4" + ] + ], + "determinant": "4" + }, + { + "port": 88, + "input_frame": 90, + "output_frame": 613, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + -1, + -1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "-1/4", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 89, + "input_frame": 91, + "output_frame": 614, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "-1/4", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 90, + "input_frame": 92, + "output_frame": 615, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + -1, + -1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "1/4", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 91, + "input_frame": 93, + "output_frame": 616, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + 1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "1/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "-1/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "3/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "1/4", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 92, + "input_frame": 94, + "output_frame": 617, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + -1, + 1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "3/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "1/4", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 93, + "input_frame": 95, + "output_frame": 618, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + -1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "3/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "-1/4", + "1/4", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 94, + "input_frame": 96, + "output_frame": 619, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + -1, + 1, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "3/4", + "-1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "-1/4", + "3/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 95, + "input_frame": 97, + "output_frame": 620, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 1, + -1, + -1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "0", + "0", + "1/4", + "-1/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "3/4", + "1/4", + "1/4", + "1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "3/4", + "-1/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "1/4", + "-1/4", + "3/4", + "-1/4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 96, + "input_frame": 98, + "output_frame": 621, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 0, + -1, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "0", + "1/4", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 97, + "input_frame": 99, + "output_frame": 622, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + 0, + 1, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 98, + "input_frame": 100, + "output_frame": 623, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 0, + -1, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 99, + "input_frame": 101, + "output_frame": 624, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + 0, + 1, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 100, + "input_frame": 102, + "output_frame": 625, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 0, + 1, + 0, + -1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 101, + "input_frame": 103, + "output_frame": 626, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + -1, + 0, + 1, + 0, + -1, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "-1/4", + "0", + "1/4", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "4" + }, + { + "port": 102, + "input_frame": 104, + "output_frame": 627, + "basis": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + -1, + 0, + 1, + 0, + 1, + 0 + ] + ], + "inverse": [ + [ + "0", + "1/4", + "0", + "-1/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "3/4", + "0", + "1/4", + "0", + "1/4", + "0", + "-1/4" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "3/4", + "0", + "-1/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "1/4", + "0", + "-1/4", + "0", + "3/4", + "0", + "1/4" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ] + ], + "determinant": "-4" + }, + { + "port": 103, + "input_frame": 105, + "output_frame": 628, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 0, + -1, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "-1/4", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 104, + "input_frame": 106, + "output_frame": 629, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 0, + 1, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "-1/4", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 105, + "input_frame": 107, + "output_frame": 630, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 0, + -1, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "1/4", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 106, + "input_frame": 108, + "output_frame": 631, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 0, + 1, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "1/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "-1/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "3/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "1/4", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 107, + "input_frame": 109, + "output_frame": 632, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 0, + 1, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "1/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "1/4", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 108, + "input_frame": 110, + "output_frame": 633, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 0, + -1, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "1/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "-1/4", + "0", + "0", + "1/4", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + }, + { + "port": 109, + "input_frame": 111, + "output_frame": 634, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + 1, + -1, + 0, + 0, + 1, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "1/4", + "0", + "1/4", + "-1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "0", + "-1/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "3/4", + "1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "4" + }, + { + "port": 110, + "input_frame": 112, + "output_frame": 635, + "basis": [ + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + [ + -1, + 1, + 0, + 0, + -1, + 0, + -1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "inverse": [ + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "3/4", + "0", + "0", + "1/4", + "0", + "1/4", + "1/4", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "3/4", + "0", + "-1/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "1/4", + "0", + "0", + "-1/4", + "0", + "3/4", + "-1/4", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ] + ], + "determinant": "-4" + } + ] + }, + "native_paid": { + "1": 1386, + "2": 1253, + "3": 62, + "4": 47, + "5": 9, + "6": 104, + "7": 10 + }, + "native_helpers": { + "2": 1, + "4": 25, + "6": 1, + "8": 410 + }, + "paid": { + "1": 50340, + "2": 45108, + "3": 2232, + "4": 1692, + "5": 324, + "6": 3744, + "7": 804, + "14": 444, + "21": 444, + "28": 444, + "35": 444, + "42": 444, + "49": 444, + "56": 444 + }, + "targets": { + "2": 36, + "4": 900, + "6": 36, + "8": 15204, + "15": 444, + "22": 444, + "29": 444, + "36": 444, + "43": 444, + "50": 444, + "57": 444, + "64": 444, + "127": 222 + }, + "paid_jobs": 107352, + "productive_fields": 19950, + "rank_surplus": 1506, + "native_calls": 36, + "native_instances": [ + { + "stage": 1, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage1_copy0", + "body_axes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + { + "stage": 1, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage1_copy1", + "body_axes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + { + "stage": 2, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage2_copy0", + "body_axes": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + }, + { + "stage": 2, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage2_copy1", + "body_axes": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + }, + { + "stage": 3, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage3_copy0", + "body_axes": [ + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ] + }, + { + "stage": 3, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage3_copy1", + "body_axes": [ + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ] + }, + { + "stage": 4, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage4_copy0", + "body_axes": [ + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ] + }, + { + "stage": 4, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage4_copy1", + "body_axes": [ + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ] + }, + { + "stage": 5, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage5_copy0", + "body_axes": [ + 29, + 30, + 31, + 32, + 33, + 34, + 35 + ] + }, + { + "stage": 5, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage5_copy1", + "body_axes": [ + 29, + 30, + 31, + 32, + 33, + 34, + 35 + ] + }, + { + "stage": 6, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage6_copy0", + "body_axes": [ + 36, + 37, + 38, + 39, + 40, + 41, + 42 + ] + }, + { + "stage": 6, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage6_copy1", + "body_axes": [ + 36, + 37, + 38, + 39, + 40, + 41, + 42 + ] + }, + { + "stage": 7, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage7_copy0", + "body_axes": [ + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ] + }, + { + "stage": 7, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage7_copy1", + "body_axes": [ + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ] + }, + { + "stage": 8, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage8_copy0", + "body_axes": [ + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + }, + { + "stage": 8, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage8_copy1", + "body_axes": [ + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + }, + { + "stage": 9, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage9_copy0", + "body_axes": [ + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + }, + { + "stage": 9, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage9_copy1", + "body_axes": [ + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + }, + { + "stage": 10, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage10_copy0", + "body_axes": [ + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + }, + { + "stage": 10, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage10_copy1", + "body_axes": [ + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + }, + { + "stage": 11, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage11_copy0", + "body_axes": [ + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ] + }, + { + "stage": 11, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage11_copy1", + "body_axes": [ + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ] + }, + { + "stage": 12, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage12_copy0", + "body_axes": [ + 78, + 79, + 80, + 81, + 82, + 83, + 84 + ] + }, + { + "stage": 12, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage12_copy1", + "body_axes": [ + 78, + 79, + 80, + 81, + 82, + 83, + 84 + ] + }, + { + "stage": 13, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage13_copy0", + "body_axes": [ + 85, + 86, + 87, + 88, + 89, + 90, + 91 + ] + }, + { + "stage": 13, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage13_copy1", + "body_axes": [ + 85, + 86, + 87, + 88, + 89, + 90, + 91 + ] + }, + { + "stage": 14, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage14_copy0", + "body_axes": [ + 92, + 93, + 94, + 95, + 96, + 97, + 98 + ] + }, + { + "stage": 14, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage14_copy1", + "body_axes": [ + 92, + 93, + 94, + 95, + 96, + 97, + 98 + ] + }, + { + "stage": 15, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage15_copy0", + "body_axes": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105 + ] + }, + { + "stage": 15, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage15_copy1", + "body_axes": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105 + ] + }, + { + "stage": 16, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage16_copy0", + "body_axes": [ + 106, + 107, + 108, + 109, + 110, + 111, + 112 + ] + }, + { + "stage": 16, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage16_copy1", + "body_axes": [ + 106, + 107, + 108, + 109, + 110, + 111, + 112 + ] + }, + { + "stage": 17, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage17_copy0", + "body_axes": [ + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + }, + { + "stage": 17, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage17_copy1", + "body_axes": [ + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + }, + { + "stage": 18, + "copy": 0, + "source_register": 1, + "destination_register": 0, + "ports": 111, + "fresh_helper_namespace": "stage18_copy0", + "body_axes": [ + 120, + 121, + 122, + 123, + 124, + 125, + 126 + ] + }, + { + "stage": 18, + "copy": 1, + "source_register": 20, + "destination_register": 19, + "ports": 111, + "fresh_helper_namespace": "stage18_copy1", + "body_axes": [ + 120, + 121, + 122, + 123, + 124, + 125, + 126 + ] + } + ], + "independent_moment_intervals": { + "385253/100000000": { + "lower": "0.0036436256394743949296533752", + "upper": "0.0036436256394743949296533753" + }, + "19262696967/5000000000000": { + "lower": "0.0000000177738444696303501702", + "upper": "0.0000000177738444696303501703" + }, + "7705078787/2000000000000": { + "lower": "-0.0000000210151754464759206813", + "upper": "-0.0000000210151754464759206812" + } + }, + "finite_admission": { + "label": "paired_efree_bit", + "source_status": "Integral caller with38independent roles; unchanged #6726 BIT native111 ports per actual call; 36actual calls; all1444forward and reverse coefficients", + "targets": { + "2": 36, + "4": 900, + "6": 36, + "8": 15204, + "15": 444, + "22": 444, + "29": 444, + "36": 444, + "43": 444, + "50": 444, + "57": 444, + "64": 444, + "127": 222 + }, + "paid": { + "1": 50340, + "2": 45108, + "3": 2232, + "4": 1692, + "5": 324, + "6": 3744, + "7": 804, + "14": 444, + "21": 444, + "28": 444, + "35": 444, + "42": 444, + "49": 444, + "56": 444 + }, + "tested_saving": "385253/100000000", + "tensor_power": 768, + "cutoff_base": 15, + "floor_base": 16, + "paid_tail_offset": "1/5", + "target_tail_offset": "1/5", + "alpha": { + "lower": "0.999999987456792518482620787614", + "upper": "0.999999987456792518482620787615" + }, + "gamma": { + "lower": "0.873285149195037839608624837051", + "upper": "0.873285149195037839608624837052" + }, + "lambda": { + "lower": "0.949370882291320583076906294105", + "upper": "0.949370882291320583076906294106" + }, + "rational_upper_limits": [ + "999999987456793/1000000000000000", + "436642574597519/500000000000000", + "949370882291321/1000000000000000" + ], + "normalized_paid_plus_lost_target_upper": { + "lower": "0.999990366909821325001257063996", + "upper": "0.999990366909821325001257063997" + }, + "strict_normalized_gap": { + "lower": "0.000009633090178674998742936003", + "upper": "0.000009633090178674998742936004" + }, + "ambient": "127^768", + "maximum_paid": "15^768", + "minimum_retained_target": "16^768", + "source_public_fields": 19950, + "source_paid_calls": 107352, + "source_paid_rank_mass": 292512, + "retained_productive_fields": "W = sum over target tuples with product >= 16^768 of their multiplicities", + "specialized_owned_fields": "D = 19950^768 - W", + "specialized_initial_and_final": 0, + "owned_allocation_records_bound": "2*19950^768", + "product_raw_invocation_count": "sum(i=0..767, 19950^(767-i)*107352^i)", + "split_paid_calls_upper": "292512^768", + "product_or_uniform_word_materialized": false, + "rank_mass_surplus": "positive by separated t-moment advantage; no discarded target mass retained as credit", + "construction": "chronological product; specialize low complete targets to owned zero; retain all original paid calls; split paid calls on disjoint axes", + "uniform_compiler": { + "uniform_saving": "38525299/10000000000", + "gap": "1/10000000000", + "theta": "42/43", + "logarithm_power": 610, + "eta": { + "lower": "0.000000593894111688079899290956", + "upper": "0.000000593894111688079899290957" + }, + "ordinary_base_bound": { + "lower": "1677314.946209111847437090130884726124", + "upper": "1677314.946209111847437090130884726125" + }, + "previous_logarithm_power_fails": true, + "H": 293160000000000, + "N": "2^293160000000000", + "integer_test_exponent": 29316, + "preceding_integer_grid_fails": true, + "proof": "retained separated finite compiler and logarithmic majorant, with all new owned fields charged" + } + }, + "independent_finite_ratios": [ + { + "lower": "0.9999999874567925184826207876", + "upper": "0.9999999874567925184826207877" + }, + { + "lower": "0.8732851491950378396086248370", + "upper": "0.8732851491950378396086248371" + }, + { + "lower": "0.9493708822913205830769062941", + "upper": "0.9493708822913205830769062942" + } + ], + "independent_normalized_upper": { + "lower": "0.9999903669098213250012570639", + "upper": "0.9999903669098213250012570640" + }, + "event_counts": { + "ADD": 362, + "SWAP": 364, + "LOCAL": 36, + "IDLE_ONE": 32, + "QUERY": 4 + }, + "events": 798, + "discarded_source_stream": { + "ADD": 1682, + "SCALE": 100, + "LAMBDA": 82, + "IDLE_ONE": 68, + "SWAP": 91, + "QUERY": 4 + }, + "empty_body_targets": { + "count": 0, + "rank1_productive_credit": 0 + }, + "ordinary_basis_records": 1291152, + "ordinary_visible_records": 363507600, + "whole_job_route_count": 569592, + "whole_job_route_records": 740743004160, + "ordinary_record_allowance": 1000000000000, + "owned_bank_bound": 6878988, + "compiler_constants": { + "U_raw": "sum(i=0..767,19950^(767-i)*107352^i)", + "D": "19950^768-W", + "O": "6878988*U_raw+D", + "G": "1000000000000*U_raw+8*R+2*19950^768", + "E": "64*(Z+N+P+G+1)^3", + "B_constant": "P+E", + "C0": "32*N*B_constant^2" + }, + "ordinary_bootstrap": [ + { + "previous": "17/5000", + "covered": "19262649/5000000000", + "atom": "1/250", + "envelope": "4813399601/1250000000000", + "admitted": "38507/10000000", + "strict_debit": "24601/1250000000000" + }, + { + "previous": "38507/10000000", + "covered": "19262649/5000000000", + "atom": "1/250", + "envelope": "4815653101/1250000000000", + "admitted": "12039/3125000", + "strict_debit": "53101/1250000000000" + } + ], + "negative_controls": { + "missing_LOCAL": "reverse coefficient 0,0", + "missing_QUERY": "reverse coefficient 0,0", + "missing_IDLE_ONE": "reverse coefficient 0,1", + "missing_ADD": "reverse coefficient 0,1", + "missing_SWAP": "reverse coefficient 1,0", + "missing_second_native_in_pair": "reverse coefficient 19,19", + "division_by2_after_specialization": "integral A coefficient after lambda removal", + "QUERY_replaced_by_ADD_despite_q1_pass": "reverse coefficient 1,0", + "root_header_target_declared_identity": "reverse coefficient 19,19" + }, + "odd_port_determinant": { + "ring": "F2[q]/(q^2-1)", + "q_ne_1": true, + "single_layer_root_targets": 2109, + "single_layer_target_determinant": "q", + "allowed_D1_gate_determinants": "1", + "doubled_root_targets": 4218, + "doubled_target_determinant": "1", + "scope": "Fixed19q-targets per chain,111ports,existing scalar caller operations; no extra target or QSELF/owned operator. Not a general obstruction on BIT algorithms." + }, + "assumptions": [ + "native_all_columns", + "owned_erasure", + "compiler", + "precision_tape", + "analytic_recovery" + ], + "scope": "Paired E-free BIT specialization of#6980 with two actual native copies per stage; removes empty-body credit with unchanged complete signed moment crossing of#6834; inherited framework; no new kappa or native theorem reproof.", + "new_global_kappa_claim": false, + "seconds": 11.418902893999984 +} diff --git a/research/shared-wire-split-composition/data/caller.json b/research/shared-wire-split-composition/data/caller.json new file mode 100644 index 0000000000..cf55f42710 --- /dev/null +++ b/research/shared-wire-split-composition/data/caller.json @@ -0,0 +1 @@ +{"schema":"mixed-root-caller/1","stages":18,"ambient_rank":153,"roles":76,"types":{"A":{"form":"two-chain-HOST2","roles":38,"offset":0,"ports":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,36,37,38,39,40,41,43,44,45,46,48,49,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"alpha2":"-1","beta2":"0","diagonal":[[-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[-1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],[-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[-1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1]]},"B":{"form":"hosted-HOST","roles":38,"offset":38,"ports":[15,17,27,34,35,42,47,55],"diagonal":[[-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[-1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],[-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1]],"pairs":[[0,1,"-1","1/2","-1/2"],[2,3,"-1","1/2","-1/2"],[4,5,"-1","1/2","-1/2"],[6,7,"-1","1/2","-1/2"],[8,9,"-1","1/2","-1/2"],[10,11,"-1","1/2","-1/2"],[12,13,"-1","1/2","-1/2"],[14,15,"-1","1/2","-1/2"],[16,17,"-1","1/2","-1/2"],[22,23,"-1","1/2","-1/2"],[24,25,"-1","1/2","-1/2"],[26,27,"-1","1/2","-1/2"],[28,29,"-1","1/2","-1/2"],[30,31,"-1","1/2","-1/2"],[32,33,"-1","1/2","-1/2"],[34,35,"-1","1/2","-1/2"],[36,37,"-1","1/2","-1/2"],[38,39,"-1","1/2","-1/2"]]}},"events":[["A","ADD",0,1,"-1"],["A","SWAP",0,1],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","SWAP",19,20],["A","SCALE",20,"-1"],["A","LAMBDA",19,1],["B","ADD",40,41,"-2"],["B","ADD",39,41,"1"],["B","ADD",38,41,"2"],["B","ADD",39,40,"1"],["B","ADD",38,40,"1"],["B","ADD",38,39,"-2"],["B","SCALE",39,"256"],["B","ADD",41,39,"-1/128"],["B","ADD",40,39,"1/128"],["B","SCALE",38,"128"],["B","ADD",41,38,"-1/128"],["B","ADD",40,38,"1/64"],["B","ADD",39,38,"1"],["B","LAMBDA",38,-1],["J",1,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",1,2,"1"],["A","ADD",0,2,"-1"],["A","SCALE",1,"-1"],["A","SWAP",1,2],["A","ADD",2,0,"-1"],["A","SWAP",0,1],["A","LAMBDA",0,-1],["A","ADD",20,21,"1"],["A","ADD",19,21,"-1"],["A","SCALE",20,"-1"],["A","SWAP",20,21],["A","SCALE",19,"-1"],["A","ADD",21,19,"1"],["A","SWAP",19,20],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",40,[1]],["B","IDLE_ONE",41,[1]],["B","ADD",42,43,"-2"],["B","ADD",40,43,"-2"],["B","ADD",39,43,"-256"],["B","ADD",38,43,"-128"],["B","ADD",41,42,"1"],["B","ADD",40,42,"-2"],["B","ADD",39,42,"-256"],["B","ADD",39,41,"256"],["B","ADD",38,41,"-128"],["B","ADD",38,40,"-128"],["B","ADD",41,40,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",43,39,"-1/128"],["B","ADD",42,39,"1/128"],["B","ADD",41,39,"1/128"],["B","ADD",40,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",43,38,"1/128"],["B","ADD",41,38,"-1/128"],["B","ADD",40,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",2,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",2,[2,3,4,5,6,7,8,9]],["A","ADD",1,3,"1"],["A","ADD",0,3,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,3],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",21,[2,3,4,5,6,7,8,9]],["A","ADD",20,22,"1"],["A","ADD",19,22,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,22],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",40,[2,3,4,5,6,7,8,9]],["B","IDLE_ONE",41,[2,3,4,5,6,7,8,9]],["B","IDLE_ONE",42,[2]],["B","IDLE_ONE",43,[2]],["B","ADD",44,45,"-2"],["B","ADD",42,45,"-2"],["B","ADD",39,45,"-256"],["B","ADD",38,45,"-128"],["B","ADD",43,44,"1"],["B","ADD",42,44,"-2"],["B","ADD",39,44,"-256"],["B","ADD",39,43,"256"],["B","ADD",38,43,"-128"],["B","ADD",38,42,"-128"],["B","ADD",43,42,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",45,39,"-1/128"],["B","ADD",44,39,"1/128"],["B","ADD",43,39,"1/128"],["B","ADD",42,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",45,38,"1/128"],["B","ADD",43,38,"-1/128"],["B","ADD",42,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",3,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",3,[3,4,5,6,7,8,9]],["A","ADD",1,4,"1"],["A","ADD",0,4,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,4],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",22,[3,4,5,6,7,8,9]],["A","ADD",20,23,"1"],["A","ADD",19,23,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,23],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",42,[3,4,5,6,7,8,9]],["B","IDLE_ONE",43,[3,4,5,6,7,8,9]],["B","IDLE_ONE",44,[3]],["B","IDLE_ONE",45,[3]],["B","ADD",46,47,"-2"],["B","ADD",44,47,"-2"],["B","ADD",39,47,"-256"],["B","ADD",38,47,"-128"],["B","ADD",45,46,"1"],["B","ADD",44,46,"-2"],["B","ADD",39,46,"-256"],["B","ADD",39,45,"256"],["B","ADD",38,45,"-128"],["B","ADD",38,44,"-128"],["B","ADD",45,44,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",47,39,"-1/128"],["B","ADD",46,39,"1/128"],["B","ADD",45,39,"1/128"],["B","ADD",44,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",47,38,"1/128"],["B","ADD",45,38,"-1/128"],["B","ADD",44,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",4,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",4,[4,5,6,7,8,9]],["A","ADD",1,5,"1"],["A","ADD",0,5,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,5],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",23,[4,5,6,7,8,9]],["A","ADD",20,24,"1"],["A","ADD",19,24,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,24],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",44,[4,5,6,7,8,9]],["B","IDLE_ONE",45,[4,5,6,7,8,9]],["B","IDLE_ONE",46,[4]],["B","IDLE_ONE",47,[4]],["B","ADD",48,49,"-2"],["B","ADD",46,49,"-2"],["B","ADD",39,49,"-256"],["B","ADD",38,49,"-128"],["B","ADD",47,48,"1"],["B","ADD",46,48,"-2"],["B","ADD",39,48,"-256"],["B","ADD",39,47,"256"],["B","ADD",38,47,"-128"],["B","ADD",38,46,"-128"],["B","ADD",47,46,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",49,39,"-1/128"],["B","ADD",48,39,"1/128"],["B","ADD",47,39,"1/128"],["B","ADD",46,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",49,38,"1/128"],["B","ADD",47,38,"-1/128"],["B","ADD",46,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",5,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",5,[5,6,7,8,9]],["A","ADD",1,6,"1"],["A","ADD",0,6,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,6],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",24,[5,6,7,8,9]],["A","ADD",20,25,"1"],["A","ADD",19,25,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,25],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",46,[5,6,7,8,9]],["B","IDLE_ONE",47,[5,6,7,8,9]],["B","IDLE_ONE",48,[5]],["B","IDLE_ONE",49,[5]],["B","ADD",50,51,"-2"],["B","ADD",48,51,"-2"],["B","ADD",39,51,"-256"],["B","ADD",38,51,"-128"],["B","ADD",49,50,"1"],["B","ADD",48,50,"-2"],["B","ADD",39,50,"-256"],["B","ADD",39,49,"256"],["B","ADD",38,49,"-128"],["B","ADD",38,48,"-128"],["B","ADD",49,48,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",51,39,"-1/128"],["B","ADD",50,39,"1/128"],["B","ADD",49,39,"1/128"],["B","ADD",48,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",51,38,"1/128"],["B","ADD",49,38,"-1/128"],["B","ADD",48,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",6,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",6,[6,7,8,9]],["A","ADD",1,7,"1"],["A","ADD",0,7,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,7],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",25,[6,7,8,9]],["A","ADD",20,26,"1"],["A","ADD",19,26,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,26],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",48,[6,7,8,9]],["B","IDLE_ONE",49,[6,7,8,9]],["B","IDLE_ONE",50,[6]],["B","IDLE_ONE",51,[6]],["B","ADD",52,53,"-2"],["B","ADD",50,53,"-2"],["B","ADD",39,53,"-256"],["B","ADD",38,53,"-128"],["B","ADD",51,52,"1"],["B","ADD",50,52,"-2"],["B","ADD",39,52,"-256"],["B","ADD",39,51,"256"],["B","ADD",38,51,"-128"],["B","ADD",38,50,"-128"],["B","ADD",51,50,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",53,39,"-1/128"],["B","ADD",52,39,"1/128"],["B","ADD",51,39,"1/128"],["B","ADD",50,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",53,38,"1/128"],["B","ADD",51,38,"-1/128"],["B","ADD",50,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",7,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",7,[7,8,9]],["A","ADD",1,8,"1"],["A","ADD",0,8,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,8],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",26,[7,8,9]],["A","ADD",20,27,"1"],["A","ADD",19,27,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,27],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",50,[7,8,9]],["B","IDLE_ONE",51,[7,8,9]],["B","IDLE_ONE",52,[7]],["B","IDLE_ONE",53,[7]],["B","ADD",54,55,"-2"],["B","ADD",52,55,"-2"],["B","ADD",39,55,"-256"],["B","ADD",38,55,"-128"],["B","ADD",53,54,"1"],["B","ADD",52,54,"-2"],["B","ADD",39,54,"-256"],["B","ADD",39,53,"256"],["B","ADD",38,53,"-128"],["B","ADD",38,52,"-128"],["B","ADD",53,52,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",55,39,"-1/128"],["B","ADD",54,39,"1/128"],["B","ADD",53,39,"1/128"],["B","ADD",52,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",55,38,"1/128"],["B","ADD",53,38,"-1/128"],["B","ADD",52,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",8,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",8,[8,9]],["A","ADD",1,9,"1"],["A","ADD",0,9,"-2"],["A","ADD",0,1,"2"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",1,0,"-1"],["A","SWAP",0,9],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",27,[8,9]],["A","ADD",20,28,"1"],["A","ADD",19,28,"-2"],["A","ADD",19,20,"2"],["A","SCALE",19,"-1"],["A","ADD",20,19,"1"],["A","SWAP",19,28],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",52,[8,9]],["B","IDLE_ONE",53,[8,9]],["B","IDLE_ONE",54,[8]],["B","IDLE_ONE",55,[8]],["B","ADD",56,57,"-2"],["B","ADD",54,57,"-2"],["B","ADD",39,57,"-256"],["B","ADD",38,57,"-128"],["B","ADD",55,56,"1"],["B","ADD",54,56,"-2"],["B","ADD",39,56,"-256"],["B","ADD",39,55,"256"],["B","ADD",38,55,"-128"],["B","ADD",38,54,"-128"],["B","ADD",55,54,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",57,39,"-1/128"],["B","ADD",56,39,"1/128"],["B","ADD",55,39,"1/128"],["B","ADD",54,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",57,38,"1/128"],["B","ADD",55,38,"-1/128"],["B","ADD",54,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",9,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",9,[9]],["A","SWAP",9,8],["A","SWAP",9,7],["A","SWAP",9,6],["A","SWAP",9,5],["A","SWAP",9,4],["A","SWAP",9,3],["A","SWAP",9,2],["A","ADD",0,1,"1"],["A","SCALE",1,"-1"],["A","SWAP",9,1],["A","ADD",18,0,"1"],["A","ADD",17,0,"1"],["A","ADD",16,0,"1"],["A","ADD",15,0,"1"],["A","ADD",14,0,"1"],["A","ADD",13,0,"1"],["A","ADD",12,0,"1"],["A","ADD",11,0,"1"],["A","ADD",10,0,"1"],["A","ADD",8,0,"1"],["A","ADD",7,0,"1"],["A","ADD",6,0,"1"],["A","ADD",5,0,"1"],["A","ADD",4,0,"1"],["A","ADD",3,0,"1"],["A","ADD",2,0,"1"],["A","ADD",1,0,"1"],["A","LAMBDA",0,1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",28,[9]],["A","SWAP",28,27],["A","SWAP",28,26],["A","SWAP",28,25],["A","SWAP",28,24],["A","SWAP",28,23],["A","SWAP",28,22],["A","SWAP",28,21],["A","ADD",19,20,"1"],["A","SCALE",20,"-1"],["A","SWAP",28,20],["A","ADD",37,19,"1"],["A","ADD",36,19,"1"],["A","ADD",35,19,"1"],["A","ADD",34,19,"1"],["A","ADD",33,19,"1"],["A","ADD",32,19,"1"],["A","ADD",31,19,"1"],["A","ADD",30,19,"1"],["A","ADD",29,19,"1"],["A","ADD",27,19,"1"],["A","ADD",26,19,"1"],["A","ADD",25,19,"1"],["A","ADD",24,19,"1"],["A","ADD",23,19,"1"],["A","ADD",22,19,"1"],["A","ADD",21,19,"1"],["A","ADD",20,19,"1"],["A","LAMBDA",19,1],["A","ADD",2,1,"-1"],["A","ADD",3,1,"-1"],["A","ADD",4,1,"-1"],["A","ADD",5,1,"-1"],["A","ADD",6,1,"-1"],["A","ADD",7,1,"-1"],["A","ADD",8,1,"-1"],["A","ADD",9,1,"-1"],["A","ADD",10,1,"-1"],["A","ADD",11,1,"-1"],["A","ADD",12,1,"-1"],["A","ADD",13,1,"-1"],["A","ADD",14,1,"-1"],["A","ADD",15,1,"-1"],["A","ADD",16,1,"-1"],["A","ADD",17,1,"-1"],["A","ADD",18,1,"-1"],["A","ADD",2,3,"-1"],["A","ADD",2,4,"1"],["A","ADD",2,5,"-1"],["A","ADD",2,6,"1"],["A","ADD",2,7,"-1"],["A","ADD",2,8,"1"],["A","ADD",2,9,"-1"],["A","ADD",2,10,"1"],["A","ADD",2,11,"-1"],["A","ADD",2,12,"1"],["A","ADD",2,13,"-1"],["A","ADD",2,14,"1"],["A","ADD",2,15,"-1"],["A","ADD",2,16,"1"],["A","ADD",2,17,"-1"],["A","ADD",2,18,"1"],["A","LAMBDA",2,1],["A","ADD",0,2,"-1"],["A","SWAP",0,1],["A","SWAP",19,1],["A","ADD",19,2,"1"],["A","LAMBDA",2,1],["A","LAMBDA",2,1],["A","LAMBDA",0,1],["A","LAMBDA",0,1],["A","ADD",1,0,"1"],["A","LAMBDA",0,-1],["A","LAMBDA",0,-1],["A","QUERY",0,19,-1],["A","LAMBDA",0,1],["A","LAMBDA",0,1],["A","ADD",1,0,"-1"],["A","LAMBDA",0,-1],["A","LAMBDA",0,-1],["A","QUERY",19,1,-1],["A","LAMBDA",0,1],["A","LAMBDA",0,1],["A","ADD",1,0,"1"],["A","LAMBDA",0,-1],["A","LAMBDA",0,-1],["A","LAMBDA",19,1],["A","LAMBDA",19,1],["A","ADD",2,19,"-1"],["A","LAMBDA",19,-1],["A","LAMBDA",19,-1],["A","QUERY",1,2,-1],["A","LAMBDA",19,1],["A","LAMBDA",19,1],["A","ADD",2,19,"1"],["A","LAMBDA",19,-1],["A","LAMBDA",19,-1],["A","LAMBDA",1,1],["A","LAMBDA",1,1],["A","ADD",0,1,"-1"],["A","LAMBDA",2,1],["A","LAMBDA",2,1],["A","LAMBDA",2,-1],["A","ADD",2,3,"1"],["A","ADD",2,4,"-1"],["A","ADD",2,5,"1"],["A","ADD",2,6,"-1"],["A","ADD",2,7,"1"],["A","ADD",2,8,"-1"],["A","ADD",2,9,"1"],["A","ADD",2,10,"-1"],["A","ADD",2,11,"1"],["A","ADD",2,12,"-1"],["A","ADD",2,13,"1"],["A","ADD",2,14,"-1"],["A","ADD",2,15,"1"],["A","ADD",2,16,"-1"],["A","ADD",2,17,"1"],["A","ADD",2,18,"-1"],["A","ADD",2,1,"1"],["A","ADD",3,1,"1"],["A","ADD",4,1,"1"],["A","ADD",5,1,"1"],["A","ADD",6,1,"1"],["A","ADD",7,1,"1"],["A","ADD",8,1,"1"],["A","ADD",9,1,"1"],["A","ADD",10,1,"1"],["A","ADD",11,1,"1"],["A","ADD",12,1,"1"],["A","ADD",13,1,"1"],["A","ADD",14,1,"1"],["A","ADD",15,1,"1"],["A","ADD",16,1,"1"],["A","ADD",17,1,"1"],["A","ADD",18,1,"1"],["A","ADD",1,18,"-1"],["A","ADD",1,17,"1"],["A","ADD",1,16,"-1"],["A","ADD",1,15,"1"],["A","ADD",1,14,"-1"],["A","ADD",1,13,"1"],["A","ADD",1,12,"-1"],["A","ADD",1,11,"1"],["A","ADD",1,10,"-1"],["A","ADD",1,9,"1"],["A","ADD",1,8,"-1"],["A","ADD",1,7,"1"],["A","ADD",1,6,"-1"],["A","ADD",1,5,"1"],["A","ADD",1,4,"-1"],["A","ADD",1,3,"1"],["A","ADD",1,2,"-1"],["A","SCALE",1,"-1"],["A","SCALE",0,"-1"],["A","ADD",18,0,"-1"],["A","ADD",17,0,"-1"],["A","ADD",16,0,"-1"],["A","ADD",15,0,"-1"],["A","ADD",14,0,"-1"],["A","ADD",13,0,"-1"],["A","ADD",12,0,"-1"],["A","ADD",11,0,"-1"],["A","ADD",10,0,"-1"],["A","ADD",9,0,"-1"],["A","ADD",8,0,"-1"],["A","ADD",7,0,"-1"],["A","ADD",6,0,"-1"],["A","ADD",5,0,"-1"],["A","ADD",4,0,"-1"],["A","ADD",3,0,"-1"],["A","ADD",2,0,"-1"],["A","LAMBDA",0,-1],["A","LAMBDA",0,1],["A","ADD",1,18,"-1"],["A","ADD",0,18,"-1"],["A","ADD",1,17,"1"],["A","ADD",0,17,"1"],["A","ADD",1,16,"-1"],["A","ADD",0,16,"-1"],["A","ADD",1,15,"1"],["A","ADD",0,15,"1"],["A","ADD",1,14,"-1"],["A","ADD",0,14,"-1"],["A","ADD",1,13,"1"],["A","ADD",0,13,"1"],["A","ADD",1,12,"-1"],["A","ADD",0,12,"-1"],["A","ADD",1,11,"1"],["A","ADD",0,11,"1"],["A","ADD",1,10,"-1"],["A","SCALE",10,"-1"],["A","ADD",1,9,"1"],["A","ADD",0,9,"1"],["A","SWAP",18,9],["A","ADD",1,8,"-1"],["A","ADD",0,8,"-1"],["A","SWAP",17,8],["A","ADD",1,7,"1"],["A","ADD",0,7,"1"],["A","SWAP",16,7],["A","ADD",1,6,"-1"],["A","ADD",0,6,"-1"],["A","SWAP",15,6],["A","ADD",1,5,"1"],["A","ADD",0,5,"1"],["A","SWAP",14,5],["A","ADD",1,4,"-1"],["A","ADD",0,4,"-1"],["A","SWAP",13,4],["A","ADD",1,3,"1"],["A","ADD",0,3,"1"],["A","SWAP",12,3],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SWAP",11,2],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","SWAP",10,1],["A","SWAP",1,0],["A","ADD",0,1,"2"],["A","LAMBDA",0,-1],["A","ADD",20,37,"-1"],["A","ADD",20,36,"1"],["A","ADD",20,35,"-1"],["A","ADD",20,34,"1"],["A","ADD",20,33,"-1"],["A","ADD",20,32,"1"],["A","ADD",20,31,"-1"],["A","ADD",20,30,"1"],["A","ADD",20,29,"-1"],["A","ADD",20,28,"1"],["A","ADD",20,27,"-1"],["A","ADD",20,26,"1"],["A","ADD",20,25,"-1"],["A","ADD",20,24,"1"],["A","ADD",20,23,"-1"],["A","ADD",20,22,"1"],["A","ADD",20,21,"-1"],["A","SCALE",20,"-1"],["A","SCALE",19,"-1"],["A","ADD",37,19,"-1"],["A","ADD",36,19,"-1"],["A","ADD",35,19,"-1"],["A","ADD",34,19,"-1"],["A","ADD",33,19,"-1"],["A","ADD",32,19,"-1"],["A","ADD",31,19,"-1"],["A","ADD",30,19,"-1"],["A","ADD",29,19,"-1"],["A","ADD",28,19,"-1"],["A","ADD",27,19,"-1"],["A","ADD",26,19,"-1"],["A","ADD",25,19,"-1"],["A","ADD",24,19,"-1"],["A","ADD",23,19,"-1"],["A","ADD",22,19,"-1"],["A","ADD",21,19,"-1"],["A","LAMBDA",19,-1],["A","QUERY",19,20,-1],["A","LAMBDA",19,1],["A","ADD",20,37,"-1"],["A","ADD",19,37,"-1"],["A","ADD",20,36,"1"],["A","ADD",19,36,"1"],["A","ADD",20,35,"-1"],["A","ADD",19,35,"-1"],["A","ADD",20,34,"1"],["A","ADD",19,34,"1"],["A","ADD",20,33,"-1"],["A","ADD",19,33,"-1"],["A","ADD",20,32,"1"],["A","ADD",19,32,"1"],["A","ADD",20,31,"-1"],["A","ADD",19,31,"-1"],["A","ADD",20,30,"1"],["A","ADD",19,30,"1"],["A","ADD",20,29,"-1"],["A","SCALE",29,"-1"],["A","ADD",20,28,"1"],["A","ADD",19,28,"1"],["A","SWAP",37,28],["A","ADD",20,27,"-1"],["A","ADD",19,27,"-1"],["A","SWAP",36,27],["A","ADD",20,26,"1"],["A","ADD",19,26,"1"],["A","SWAP",35,26],["A","ADD",20,25,"-1"],["A","ADD",19,25,"-1"],["A","SWAP",34,25],["A","ADD",20,24,"1"],["A","ADD",19,24,"1"],["A","SWAP",33,24],["A","ADD",20,23,"-1"],["A","ADD",19,23,"-1"],["A","SWAP",32,23],["A","ADD",20,22,"1"],["A","ADD",19,22,"1"],["A","SWAP",31,22],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SWAP",30,21],["A","ADD",19,20,"-1"],["A","SCALE",20,"-1"],["A","SWAP",29,20],["A","SCALE",19,"-1"],["A","SWAP",20,19],["A","ADD",19,20,"-2"],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",54,[9]],["B","IDLE_ONE",55,[9]],["B","IDLE_ONE",56,[9]],["B","IDLE_ONE",57,[9]],["B","ADD",56,75,"1"],["B","ADD",55,75,"1"],["B","ADD",53,75,"1"],["B","ADD",51,75,"1"],["B","ADD",49,75,"1"],["B","ADD",47,75,"1"],["B","ADD",45,75,"1"],["B","ADD",43,75,"1"],["B","ADD",41,75,"1"],["B","ADD",39,75,"-128"],["B","ADD",38,75,"64"],["B","ADD",56,73,"-1"],["B","ADD",55,73,"-1"],["B","ADD",53,73,"-1"],["B","ADD",51,73,"-1"],["B","ADD",49,73,"-1"],["B","ADD",47,73,"-1"],["B","ADD",45,73,"-1"],["B","ADD",43,73,"-1"],["B","ADD",41,73,"-1"],["B","ADD",39,73,"128"],["B","ADD",38,73,"-64"],["B","ADD",56,72,"2"],["B","ADD",55,72,"2"],["B","ADD",53,72,"2"],["B","ADD",51,72,"2"],["B","ADD",49,72,"2"],["B","ADD",47,72,"2"],["B","ADD",45,72,"2"],["B","ADD",43,72,"2"],["B","ADD",41,72,"2"],["B","ADD",39,72,"-256"],["B","ADD",38,72,"128"],["B","ADD",56,71,"-1"],["B","ADD",55,71,"-1"],["B","ADD",53,71,"-1"],["B","ADD",51,71,"-1"],["B","ADD",49,71,"-1"],["B","ADD",47,71,"-1"],["B","ADD",45,71,"-1"],["B","ADD",43,71,"-1"],["B","ADD",41,71,"-1"],["B","ADD",39,71,"128"],["B","ADD",38,71,"-64"],["B","ADD",56,69,"1"],["B","ADD",55,69,"1"],["B","ADD",53,69,"1"],["B","ADD",51,69,"1"],["B","ADD",49,69,"1"],["B","ADD",47,69,"1"],["B","ADD",45,69,"1"],["B","ADD",43,69,"1"],["B","ADD",41,69,"1"],["B","ADD",39,69,"-128"],["B","ADD",38,69,"64"],["B","ADD",56,68,"-2"],["B","ADD",55,68,"-2"],["B","ADD",53,68,"-2"],["B","ADD",51,68,"-2"],["B","ADD",49,68,"-2"],["B","ADD",47,68,"-2"],["B","ADD",45,68,"-2"],["B","ADD",43,68,"-2"],["B","ADD",41,68,"-2"],["B","ADD",39,68,"256"],["B","ADD",38,68,"-128"],["B","ADD",56,67,"1"],["B","ADD",55,67,"1"],["B","ADD",53,67,"1"],["B","ADD",51,67,"1"],["B","ADD",49,67,"1"],["B","ADD",47,67,"1"],["B","ADD",45,67,"1"],["B","ADD",43,67,"1"],["B","ADD",41,67,"1"],["B","ADD",39,67,"-128"],["B","ADD",38,67,"64"],["B","ADD",56,65,"-1"],["B","ADD",55,65,"-1"],["B","ADD",53,65,"-1"],["B","ADD",51,65,"-1"],["B","ADD",49,65,"-1"],["B","ADD",47,65,"-1"],["B","ADD",45,65,"-1"],["B","ADD",43,65,"-1"],["B","ADD",41,65,"-1"],["B","ADD",39,65,"128"],["B","ADD",38,65,"-64"],["B","ADD",56,64,"2"],["B","ADD",55,64,"2"],["B","ADD",53,64,"2"],["B","ADD",51,64,"2"],["B","ADD",49,64,"2"],["B","ADD",47,64,"2"],["B","ADD",45,64,"2"],["B","ADD",43,64,"2"],["B","ADD",41,64,"2"],["B","ADD",39,64,"-256"],["B","ADD",38,64,"128"],["B","ADD",56,63,"-1"],["B","ADD",55,63,"-1"],["B","ADD",53,63,"-1"],["B","ADD",51,63,"-1"],["B","ADD",49,63,"-1"],["B","ADD",47,63,"-1"],["B","ADD",45,63,"-1"],["B","ADD",43,63,"-1"],["B","ADD",41,63,"-1"],["B","ADD",39,63,"128"],["B","ADD",38,63,"-64"],["B","ADD",56,61,"1"],["B","ADD",55,61,"1"],["B","ADD",53,61,"1"],["B","ADD",51,61,"1"],["B","ADD",49,61,"1"],["B","ADD",47,61,"1"],["B","ADD",45,61,"1"],["B","ADD",43,61,"1"],["B","ADD",41,61,"1"],["B","ADD",39,61,"-128"],["B","ADD",38,61,"64"],["B","ADD",56,60,"-2"],["B","ADD",55,60,"-2"],["B","ADD",53,60,"-2"],["B","ADD",51,60,"-2"],["B","ADD",49,60,"-2"],["B","ADD",47,60,"-2"],["B","ADD",45,60,"-2"],["B","ADD",43,60,"-2"],["B","ADD",41,60,"-2"],["B","ADD",39,60,"256"],["B","ADD",38,60,"-128"],["B","ADD",56,59,"1"],["B","ADD",55,59,"1"],["B","ADD",53,59,"1"],["B","ADD",51,59,"1"],["B","ADD",49,59,"1"],["B","ADD",47,59,"1"],["B","ADD",45,59,"1"],["B","ADD",43,59,"1"],["B","ADD",41,59,"1"],["B","ADD",39,59,"-128"],["B","ADD",38,59,"64"],["B","ADD",39,57,"256"],["B","ADD",38,57,"-128"],["B","ADD",55,56,"-3/2"],["B","ADD",53,56,"-1"],["B","ADD",51,56,"-1"],["B","ADD",49,56,"-1"],["B","ADD",47,56,"-1"],["B","ADD",45,56,"-1"],["B","ADD",43,56,"-1"],["B","ADD",41,56,"-1"],["B","ADD",39,56,"128"],["B","ADD",38,56,"-64"],["B","SCALE",56,"1/2"],["B","ADD",53,55,"-1"],["B","ADD",51,55,"-1"],["B","ADD",49,55,"-1"],["B","ADD",47,55,"-1"],["B","ADD",45,55,"-1"],["B","ADD",43,55,"-1"],["B","ADD",41,55,"-1"],["B","ADD",39,55,"128"],["B","ADD",38,55,"64"],["B","SCALE",55,"-1"],["B","ADD",57,55,"1"],["B","SWAP",55,56],["B","ADD",53,54,"1/2"],["B","ADD",51,54,"1/2"],["B","ADD",49,54,"1/2"],["B","ADD",47,54,"1/2"],["B","ADD",45,54,"1/2"],["B","ADD",43,54,"1/2"],["B","ADD",41,54,"1/2"],["B","ADD",39,54,"-64"],["B","ADD",38,54,"-32"],["B","ADD",57,54,"1/2"],["B","ADD",56,54,"1/2"],["B","ADD",55,54,"1/2"],["B","ADD",51,52,"-1/2"],["B","ADD",49,52,"-1/2"],["B","ADD",47,52,"-1/2"],["B","ADD",45,52,"-1/2"],["B","ADD",43,52,"-1/2"],["B","ADD",41,52,"-1/2"],["B","ADD",39,52,"64"],["B","ADD",38,52,"32"],["B","ADD",57,52,"-1/2"],["B","ADD",56,52,"-1/2"],["B","ADD",55,52,"-1/2"],["B","ADD",53,52,"-1/2"],["B","ADD",49,51,"-1"],["B","ADD",47,51,"-2"],["B","ADD",45,51,"-1"],["B","ADD",43,51,"-1"],["B","ADD",41,51,"-1"],["B","ADD",39,51,"128"],["B","ADD",38,51,"64"],["B","ADD",57,51,"-1"],["B","ADD",56,51,"-1"],["B","ADD",55,51,"-1"],["B","ADD",53,51,"-1"],["B","ADD",47,50,"1/2"],["B","ADD",51,50,"-1/2"],["B","ADD",47,49,"-1"],["B","ADD",45,49,"-1"],["B","ADD",43,49,"-1"],["B","ADD",41,49,"-1"],["B","ADD",39,49,"128"],["B","ADD",38,49,"64"],["B","SCALE",49,"-1"],["B","ADD",57,49,"1"],["B","ADD",56,49,"1"],["B","ADD",55,49,"1"],["B","ADD",53,49,"1"],["B","SWAP",49,51],["B","ADD",47,48,"-1/2"],["B","ADD",49,48,"1/2"],["B","ADD",45,47,"-1"],["B","ADD",43,47,"-1"],["B","ADD",41,47,"-1"],["B","ADD",39,47,"128"],["B","ADD",38,47,"64"],["B","SCALE",47,"-1"],["B","ADD",57,47,"1"],["B","ADD",56,47,"1"],["B","ADD",55,47,"1"],["B","ADD",53,47,"1"],["B","ADD",51,47,"1"],["B","SWAP",47,49],["B","ADD",45,46,"1/2"],["B","ADD",43,46,"1/2"],["B","ADD",41,46,"1/2"],["B","ADD",39,46,"-64"],["B","ADD",38,46,"-32"],["B","ADD",57,46,"1/2"],["B","ADD",56,46,"1/2"],["B","ADD",55,46,"1/2"],["B","ADD",53,46,"1/2"],["B","ADD",51,46,"1/2"],["B","ADD",49,46,"1/2"],["B","ADD",47,46,"1/2"],["B","ADD",43,44,"-1/2"],["B","ADD",41,44,"-1/2"],["B","ADD",39,44,"64"],["B","ADD",38,44,"32"],["B","ADD",57,44,"-1/2"],["B","ADD",56,44,"-1/2"],["B","ADD",55,44,"-1/2"],["B","ADD",53,44,"-1/2"],["B","ADD",51,44,"-1/2"],["B","ADD",49,44,"-1/2"],["B","ADD",47,44,"-1/2"],["B","ADD",45,44,"-1/2"],["B","ADD",41,43,"-1"],["B","ADD",39,43,"128"],["B","ADD",38,43,"64"],["B","SCALE",43,"2"],["B","ADD",57,43,"-1/2"],["B","ADD",56,43,"-1/2"],["B","ADD",55,43,"-1/2"],["B","ADD",53,43,"-1/2"],["B","ADD",51,43,"-1/2"],["B","ADD",49,43,"-1/2"],["B","ADD",47,43,"-1/2"],["B","ADD",45,43,"-1/2"],["B","ADD",43,42,"-1"],["B","ADD",39,41,"128"],["B","ADD",38,41,"64"],["B","SCALE",41,"-1"],["B","ADD",57,41,"1"],["B","ADD",56,41,"1"],["B","ADD",55,41,"1"],["B","ADD",53,41,"1"],["B","ADD",51,41,"1"],["B","ADD",49,41,"1"],["B","ADD",47,41,"1"],["B","ADD",45,41,"1"],["B","SWAP",41,43],["B","ADD",41,40,"1"],["B","ADD",38,39,"-1/2"],["B","SCALE",39,"1/128"],["B","ADD",57,39,"1"],["B","ADD",56,39,"1"],["B","ADD",55,39,"1"],["B","ADD",53,39,"1"],["B","ADD",51,39,"1"],["B","ADD",49,39,"1"],["B","ADD",47,39,"1"],["B","ADD",45,39,"1"],["B","ADD",43,39,"1"],["B","SWAP",39,41],["B","SCALE",38,"1/128"],["B","ADD",57,38,"2"],["B","ADD",56,38,"2"],["B","ADD",55,38,"1"],["B","ADD",53,38,"1"],["B","ADD",51,38,"1"],["B","ADD",49,38,"1"],["B","ADD",47,38,"1"],["B","ADD",45,38,"1"],["B","ADD",43,38,"1"],["B","ADD",41,38,"1"],["B","ADD",39,38,"1"],["B","LAMBDA",38,-1],["B","QUERY",38,39,-1],["B","LAMBDA",38,1],["B","ADD",38,39,"-1"],["B","ADD",39,75,"-1"],["B","ADD",39,73,"1"],["B","ADD",39,72,"-2"],["B","ADD",39,71,"1"],["B","ADD",39,69,"-1"],["B","ADD",39,68,"2"],["B","ADD",39,67,"-1"],["B","ADD",39,65,"1"],["B","ADD",39,64,"-2"],["B","ADD",39,63,"1"],["B","ADD",39,61,"-1"],["B","ADD",39,60,"2"],["B","ADD",39,59,"-1"],["B","ADD",39,56,"-1"],["B","ADD",39,55,"2"],["B","ADD",39,54,"-1"],["B","ADD",39,52,"1"],["B","ADD",39,51,"-2"],["B","ADD",39,50,"1"],["B","ADD",39,48,"-1"],["B","ADD",39,47,"2"],["B","ADD",39,46,"-1"],["B","ADD",39,44,"1"],["B","ADD",39,43,"-2"],["B","ADD",39,42,"1"],["B","ADD",39,40,"-1"],["B","ADD",38,39,"-1"],["B","ADD",57,39,"-1"],["B","ADD",56,39,"-2"],["B","ADD",55,39,"-1"],["B","ADD",54,39,"-2"],["B","ADD",53,39,"-1"],["B","ADD",52,39,"-2"],["B","ADD",51,39,"-1"],["B","ADD",50,39,"-2"],["B","ADD",49,39,"-1"],["B","ADD",48,39,"-2"],["B","ADD",47,39,"-1"],["B","ADD",46,39,"-2"],["B","ADD",45,39,"-1"],["B","ADD",44,39,"-2"],["B","ADD",43,39,"-1"],["B","ADD",42,39,"-2"],["B","ADD",41,39,"-1"],["B","ADD",40,39,"-2"],["B","SCALE",38,"1/2"],["B","ADD",74,38,"-1"],["B","ADD",72,38,"-1"],["B","ADD",70,38,"-1"],["B","ADD",68,38,"-1"],["B","ADD",66,38,"-1"],["B","ADD",64,38,"-1"],["B","ADD",62,38,"-1"],["B","ADD",60,38,"-1"],["B","ADD",58,38,"-1"],["B","ADD",57,38,"-1"],["B","ADD",56,38,"-2"],["B","ADD",55,38,"-1"],["B","ADD",54,38,"-2"],["B","ADD",53,38,"-1"],["B","ADD",52,38,"-2"],["B","ADD",51,38,"-1"],["B","ADD",50,38,"-2"],["B","ADD",49,38,"-1"],["B","ADD",48,38,"-2"],["B","ADD",47,38,"-1"],["B","ADD",46,38,"-2"],["B","ADD",45,38,"-1"],["B","ADD",44,38,"-2"],["B","ADD",43,38,"-1"],["B","ADD",42,38,"-2"],["B","ADD",41,38,"-1"],["B","ADD",40,38,"-2"],["B","ADD",39,38,"1"],["B","LAMBDA",38,-1],["B","QUERY",38,39,-1],["B","LAMBDA",38,1],["B","ADD",38,39,"-1"],["B","SCALE",38,"2"],["B","ADD",75,38,"-1"],["B","ADD",74,38,"-1/2"],["B","ADD",73,38,"-1"],["B","ADD",72,38,"-1/2"],["B","ADD",71,38,"-1"],["B","ADD",70,38,"-1/2"],["B","ADD",69,38,"-1"],["B","ADD",68,38,"-1/2"],["B","ADD",67,38,"-1"],["B","ADD",66,38,"-1/2"],["B","ADD",65,38,"-1"],["B","ADD",64,38,"-1/2"],["B","ADD",63,38,"-1"],["B","ADD",62,38,"-1/2"],["B","ADD",61,38,"-1"],["B","ADD",60,38,"-1/2"],["B","ADD",59,38,"-1"],["B","ADD",58,38,"-1/2"],["B","ADD",57,38,"-1/2"],["B","ADD",55,38,"-1/2"],["B","ADD",53,38,"-1/2"],["B","ADD",51,38,"-1/2"],["B","ADD",49,38,"-1/2"],["B","ADD",47,38,"-1/2"],["B","ADD",45,38,"-1/2"],["B","ADD",43,38,"-1/2"],["B","ADD",41,38,"-1/2"],["B","ADD",39,38,"1/2"],["B","LAMBDA",38,-1],["B","QUERY",38,39,-1],["B","LAMBDA",38,1],["B","ADD",38,39,"-1"],["B","ADD",74,75,"-1/2"],["B","ADD",73,75,"-1"],["B","ADD",72,75,"-1"],["B","ADD",71,75,"-1"],["B","ADD",70,75,"-1"],["B","ADD",69,75,"-1"],["B","ADD",68,75,"-1"],["B","ADD",67,75,"-1"],["B","ADD",66,75,"-1"],["B","ADD",65,75,"-1"],["B","ADD",64,75,"-1"],["B","ADD",63,75,"-1"],["B","ADD",62,75,"-1"],["B","ADD",61,75,"-1"],["B","ADD",60,75,"-1"],["B","ADD",59,75,"-1"],["B","ADD",58,75,"-1"],["B","ADD",56,75,"1"],["B","ADD",54,75,"1"],["B","ADD",52,75,"1"],["B","ADD",50,75,"1"],["B","ADD",48,75,"1"],["B","ADD",46,75,"1"],["B","ADD",44,75,"1"],["B","ADD",42,75,"1"],["B","ADD",40,75,"1"],["B","ADD",38,75,"1"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"2"],["B","ADD",72,74,"2"],["B","ADD",71,74,"2"],["B","ADD",70,74,"2"],["B","ADD",69,74,"2"],["B","ADD",68,74,"2"],["B","ADD",67,74,"2"],["B","ADD",66,74,"2"],["B","ADD",65,74,"2"],["B","ADD",64,74,"2"],["B","ADD",63,74,"2"],["B","ADD",62,74,"2"],["B","ADD",61,74,"2"],["B","ADD",60,74,"2"],["B","ADD",59,74,"2"],["B","ADD",58,74,"2"],["B","ADD",56,74,"-2"],["B","ADD",54,74,"-2"],["B","ADD",52,74,"-2"],["B","ADD",50,74,"-2"],["B","ADD",48,74,"-2"],["B","ADD",46,74,"-2"],["B","ADD",44,74,"-2"],["B","ADD",42,74,"-2"],["B","ADD",40,74,"-2"],["B","ADD",38,74,"-2"],["B","SCALE",74,"2"],["B","ADD",75,74,"3/2"],["B","SWAP",74,75],["B","ADD",71,72,"-1/2"],["B","ADD",70,72,"-1"],["B","ADD",69,72,"-1"],["B","ADD",68,72,"-1"],["B","ADD",67,72,"-1"],["B","ADD",66,72,"-1"],["B","ADD",65,72,"-1"],["B","ADD",64,72,"-1"],["B","ADD",63,72,"-1"],["B","ADD",62,72,"-1"],["B","ADD",61,72,"-1"],["B","ADD",60,72,"-1"],["B","ADD",59,72,"-1"],["B","ADD",58,72,"-1"],["B","ADD",56,72,"1"],["B","ADD",54,72,"1"],["B","ADD",52,72,"1"],["B","ADD",50,72,"1"],["B","ADD",48,72,"1"],["B","ADD",46,72,"1"],["B","ADD",44,72,"1"],["B","ADD",42,72,"1"],["B","ADD",40,72,"1"],["B","ADD",38,72,"1"],["B","SCALE",72,"-1/2"],["B","ADD",75,72,"2"],["B","ADD",74,72,"2"],["B","ADD",73,72,"2"],["B","ADD",70,71,"2"],["B","ADD",69,71,"2"],["B","ADD",68,71,"2"],["B","ADD",67,71,"2"],["B","ADD",66,71,"2"],["B","ADD",65,71,"2"],["B","ADD",64,71,"2"],["B","ADD",63,71,"2"],["B","ADD",62,71,"2"],["B","ADD",61,71,"2"],["B","ADD",60,71,"2"],["B","ADD",59,71,"2"],["B","ADD",58,71,"2"],["B","ADD",56,71,"-2"],["B","ADD",54,71,"-2"],["B","ADD",52,71,"-2"],["B","ADD",50,71,"-2"],["B","ADD",48,71,"-2"],["B","ADD",46,71,"-2"],["B","ADD",44,71,"-2"],["B","ADD",42,71,"-2"],["B","ADD",40,71,"-2"],["B","ADD",38,71,"-2"],["B","SCALE",71,"2"],["B","ADD",75,71,"1"],["B","ADD",74,71,"1"],["B","ADD",73,71,"1"],["B","ADD",72,71,"3/2"],["B","SWAP",71,72],["B","ADD",69,70,"-1"],["B","ADD",68,70,"-1/2"],["B","ADD",67,70,"-1"],["B","ADD",66,70,"-1"],["B","ADD",65,70,"-1"],["B","ADD",64,70,"-1"],["B","ADD",63,70,"-1"],["B","ADD",62,70,"-1"],["B","ADD",61,70,"-1"],["B","ADD",60,70,"-1"],["B","ADD",59,70,"-1"],["B","ADD",58,70,"-1"],["B","ADD",56,70,"1"],["B","ADD",54,70,"1"],["B","ADD",52,70,"1"],["B","ADD",50,70,"1"],["B","ADD",48,70,"1"],["B","ADD",46,70,"1"],["B","ADD",44,70,"1"],["B","ADD",42,70,"1"],["B","ADD",40,70,"1"],["B","ADD",38,70,"1"],["B","SCALE",70,"-1/2"],["B","ADD",75,70,"2"],["B","ADD",74,70,"2"],["B","ADD",73,70,"2"],["B","ADD",72,70,"2"],["B","ADD",71,70,"2"],["B","ADD",68,69,"1/2"],["B","ADD",67,69,"-1"],["B","ADD",66,69,"-1"],["B","ADD",65,69,"-1"],["B","ADD",64,69,"-1"],["B","ADD",63,69,"-1"],["B","ADD",62,69,"-1"],["B","ADD",61,69,"-1"],["B","ADD",60,69,"-1"],["B","ADD",59,69,"-1"],["B","ADD",58,69,"-1"],["B","ADD",56,69,"1"],["B","ADD",54,69,"1"],["B","ADD",52,69,"1"],["B","ADD",50,69,"1"],["B","ADD",48,69,"1"],["B","ADD",46,69,"1"],["B","ADD",44,69,"1"],["B","ADD",42,69,"1"],["B","ADD",40,69,"1"],["B","ADD",38,69,"1"],["B","SCALE",69,"-1"],["B","ADD",75,69,"1"],["B","ADD",74,69,"1"],["B","ADD",73,69,"1"],["B","ADD",72,69,"1"],["B","ADD",71,69,"1"],["B","ADD",70,69,"3/2"],["B","SWAP",69,70],["B","ADD",67,68,"2"],["B","ADD",66,68,"2"],["B","ADD",65,68,"2"],["B","ADD",64,68,"2"],["B","ADD",63,68,"2"],["B","ADD",62,68,"2"],["B","ADD",61,68,"2"],["B","ADD",60,68,"2"],["B","ADD",59,68,"2"],["B","ADD",58,68,"2"],["B","ADD",56,68,"-2"],["B","ADD",54,68,"-2"],["B","ADD",52,68,"-2"],["B","ADD",50,68,"-2"],["B","ADD",48,68,"-2"],["B","ADD",46,68,"-2"],["B","ADD",44,68,"-2"],["B","ADD",42,68,"-2"],["B","ADD",40,68,"-2"],["B","ADD",38,68,"-2"],["B","SCALE",68,"2"],["B","ADD",75,68,"1"],["B","ADD",74,68,"1"],["B","ADD",73,68,"1"],["B","ADD",72,68,"1"],["B","ADD",71,68,"1"],["B","ADD",70,68,"1"],["B","ADD",69,68,"3/2"],["B","SWAP",68,69],["B","ADD",66,67,"-1/2"],["B","ADD",65,67,"-1"],["B","ADD",64,67,"-1"],["B","ADD",63,67,"-1"],["B","ADD",62,67,"-1"],["B","ADD",61,67,"-1"],["B","ADD",60,67,"-1"],["B","ADD",59,67,"-1"],["B","ADD",58,67,"-1"],["B","ADD",56,67,"1"],["B","ADD",54,67,"1"],["B","ADD",52,67,"1"],["B","ADD",50,67,"1"],["B","ADD",48,67,"1"],["B","ADD",46,67,"1"],["B","ADD",44,67,"1"],["B","ADD",42,67,"1"],["B","ADD",40,67,"1"],["B","ADD",38,67,"1"],["B","SCALE",67,"-1/2"],["B","ADD",75,67,"2"],["B","ADD",74,67,"2"],["B","ADD",73,67,"2"],["B","ADD",72,67,"2"],["B","ADD",71,67,"2"],["B","ADD",70,67,"2"],["B","ADD",69,67,"2"],["B","ADD",68,67,"2"],["B","ADD",65,66,"2"],["B","ADD",64,66,"2"],["B","ADD",63,66,"2"],["B","ADD",62,66,"2"],["B","ADD",61,66,"2"],["B","ADD",60,66,"2"],["B","ADD",59,66,"2"],["B","ADD",58,66,"2"],["B","ADD",56,66,"-2"],["B","ADD",54,66,"-2"],["B","ADD",52,66,"-2"],["B","ADD",50,66,"-2"],["B","ADD",48,66,"-2"],["B","ADD",46,66,"-2"],["B","ADD",44,66,"-2"],["B","ADD",42,66,"-2"],["B","ADD",40,66,"-2"],["B","ADD",38,66,"-2"],["B","SCALE",66,"2"],["B","ADD",75,66,"1"],["B","ADD",74,66,"1"],["B","ADD",73,66,"1"],["B","ADD",72,66,"1"],["B","ADD",71,66,"1"],["B","ADD",70,66,"1"],["B","ADD",69,66,"1"],["B","ADD",68,66,"1"],["B","ADD",67,66,"3/2"],["B","SWAP",66,67],["B","ADD",63,64,"-1/2"],["B","ADD",62,64,"-1"],["B","ADD",61,64,"-1"],["B","ADD",60,64,"-1"],["B","ADD",59,64,"-1"],["B","ADD",58,64,"-1"],["B","ADD",56,64,"1"],["B","ADD",54,64,"1"],["B","ADD",52,64,"1"],["B","ADD",50,64,"1"],["B","ADD",48,64,"1"],["B","ADD",46,64,"1"],["B","ADD",44,64,"1"],["B","ADD",42,64,"1"],["B","ADD",40,64,"1"],["B","ADD",38,64,"1"],["B","SCALE",64,"-1/2"],["B","ADD",75,64,"2"],["B","ADD",74,64,"2"],["B","ADD",73,64,"2"],["B","ADD",72,64,"2"],["B","ADD",71,64,"2"],["B","ADD",70,64,"2"],["B","ADD",69,64,"2"],["B","ADD",68,64,"2"],["B","ADD",67,64,"2"],["B","ADD",66,64,"2"],["B","ADD",65,64,"2"],["B","ADD",62,63,"2"],["B","ADD",61,63,"2"],["B","ADD",60,63,"2"],["B","ADD",59,63,"2"],["B","ADD",58,63,"2"],["B","ADD",56,63,"-2"],["B","ADD",54,63,"-2"],["B","ADD",52,63,"-2"],["B","ADD",50,63,"-2"],["B","ADD",48,63,"-2"],["B","ADD",46,63,"-2"],["B","ADD",44,63,"-2"],["B","ADD",42,63,"-2"],["B","ADD",40,63,"-2"],["B","ADD",38,63,"-2"],["B","SCALE",63,"2"],["B","ADD",75,63,"1"],["B","ADD",74,63,"1"],["B","ADD",73,63,"1"],["B","ADD",72,63,"1"],["B","ADD",71,63,"1"],["B","ADD",70,63,"1"],["B","ADD",69,63,"1"],["B","ADD",68,63,"1"],["B","ADD",67,63,"1"],["B","ADD",66,63,"1"],["B","ADD",65,63,"1"],["B","ADD",64,63,"3/2"],["B","SWAP",63,64],["B","ADD",61,62,"-1"],["B","ADD",60,62,"-1/2"],["B","ADD",59,62,"-1"],["B","ADD",58,62,"-1"],["B","ADD",56,62,"1"],["B","ADD",54,62,"1"],["B","ADD",52,62,"1"],["B","ADD",50,62,"1"],["B","ADD",48,62,"1"],["B","ADD",46,62,"1"],["B","ADD",44,62,"1"],["B","ADD",42,62,"1"],["B","ADD",40,62,"1"],["B","ADD",38,62,"1"],["B","SCALE",62,"-1/2"],["B","ADD",75,62,"2"],["B","ADD",74,62,"2"],["B","ADD",73,62,"2"],["B","ADD",72,62,"2"],["B","ADD",71,62,"2"],["B","ADD",70,62,"2"],["B","ADD",69,62,"2"],["B","ADD",68,62,"2"],["B","ADD",67,62,"2"],["B","ADD",66,62,"2"],["B","ADD",65,62,"2"],["B","ADD",64,62,"2"],["B","ADD",63,62,"2"],["B","ADD",60,61,"1/2"],["B","ADD",59,61,"-1"],["B","ADD",58,61,"-1"],["B","ADD",56,61,"1"],["B","ADD",54,61,"1"],["B","ADD",52,61,"1"],["B","ADD",50,61,"1"],["B","ADD",48,61,"1"],["B","ADD",46,61,"1"],["B","ADD",44,61,"1"],["B","ADD",42,61,"1"],["B","ADD",40,61,"1"],["B","ADD",38,61,"1"],["B","SCALE",61,"-1"],["B","ADD",75,61,"1"],["B","ADD",74,61,"1"],["B","ADD",73,61,"1"],["B","ADD",72,61,"1"],["B","ADD",71,61,"1"],["B","ADD",70,61,"1"],["B","ADD",69,61,"1"],["B","ADD",68,61,"1"],["B","ADD",67,61,"1"],["B","ADD",66,61,"1"],["B","ADD",65,61,"1"],["B","ADD",64,61,"1"],["B","ADD",63,61,"1"],["B","ADD",62,61,"3/2"],["B","SWAP",61,62],["B","ADD",59,60,"2"],["B","ADD",58,60,"2"],["B","ADD",56,60,"-2"],["B","ADD",54,60,"-2"],["B","ADD",52,60,"-2"],["B","ADD",50,60,"-2"],["B","ADD",48,60,"-2"],["B","ADD",46,60,"-2"],["B","ADD",44,60,"-2"],["B","ADD",42,60,"-2"],["B","ADD",40,60,"-2"],["B","ADD",38,60,"-2"],["B","SCALE",60,"2"],["B","ADD",75,60,"1"],["B","ADD",74,60,"1"],["B","ADD",73,60,"1"],["B","ADD",72,60,"1"],["B","ADD",71,60,"1"],["B","ADD",70,60,"1"],["B","ADD",69,60,"1"],["B","ADD",68,60,"1"],["B","ADD",67,60,"1"],["B","ADD",66,60,"1"],["B","ADD",65,60,"1"],["B","ADD",64,60,"1"],["B","ADD",63,60,"1"],["B","ADD",62,60,"1"],["B","ADD",61,60,"3/2"],["B","SWAP",60,61],["B","ADD",58,59,"-1/2"],["B","ADD",56,59,"1"],["B","ADD",54,59,"1"],["B","ADD",52,59,"1"],["B","ADD",50,59,"1"],["B","ADD",48,59,"1"],["B","ADD",46,59,"1"],["B","ADD",44,59,"1"],["B","ADD",42,59,"1"],["B","ADD",40,59,"1"],["B","ADD",38,59,"1"],["B","SCALE",59,"-1/2"],["B","ADD",75,59,"2"],["B","ADD",74,59,"2"],["B","ADD",73,59,"2"],["B","ADD",72,59,"2"],["B","ADD",71,59,"2"],["B","ADD",70,59,"2"],["B","ADD",69,59,"2"],["B","ADD",68,59,"2"],["B","ADD",67,59,"2"],["B","ADD",66,59,"2"],["B","ADD",65,59,"2"],["B","ADD",64,59,"2"],["B","ADD",63,59,"2"],["B","ADD",62,59,"2"],["B","ADD",61,59,"2"],["B","ADD",60,59,"2"],["B","ADD",56,58,"-2"],["B","ADD",54,58,"-2"],["B","ADD",52,58,"-2"],["B","ADD",50,58,"-2"],["B","ADD",48,58,"-2"],["B","ADD",46,58,"-2"],["B","ADD",44,58,"-2"],["B","ADD",42,58,"-2"],["B","ADD",40,58,"-2"],["B","ADD",38,58,"-2"],["B","SCALE",58,"2"],["B","ADD",75,58,"1"],["B","ADD",74,58,"1"],["B","ADD",73,58,"1"],["B","ADD",72,58,"1"],["B","ADD",71,58,"1"],["B","ADD",70,58,"1"],["B","ADD",69,58,"1"],["B","ADD",68,58,"1"],["B","ADD",67,58,"1"],["B","ADD",66,58,"1"],["B","ADD",65,58,"1"],["B","ADD",64,58,"1"],["B","ADD",63,58,"1"],["B","ADD",62,58,"1"],["B","ADD",61,58,"1"],["B","ADD",60,58,"1"],["B","ADD",59,58,"3/2"],["B","SWAP",58,59],["B","ADD",56,57,"-2"],["B","ADD",54,57,"-2"],["B","ADD",52,57,"-2"],["B","ADD",50,57,"-2"],["B","ADD",48,57,"-2"],["B","ADD",46,57,"-2"],["B","ADD",44,57,"-2"],["B","ADD",42,57,"-2"],["B","ADD",40,57,"-2"],["B","ADD",38,57,"-2"],["B","ADD",75,57,"2"],["B","ADD",74,57,"2"],["B","ADD",73,57,"2"],["B","ADD",72,57,"2"],["B","ADD",71,57,"2"],["B","ADD",70,57,"2"],["B","ADD",69,57,"2"],["B","ADD",68,57,"2"],["B","ADD",67,57,"2"],["B","ADD",66,57,"2"],["B","ADD",65,57,"2"],["B","ADD",64,57,"2"],["B","ADD",63,57,"2"],["B","ADD",62,57,"2"],["B","ADD",61,57,"2"],["B","ADD",60,57,"2"],["B","ADD",59,57,"2"],["B","ADD",58,57,"2"],["B","ADD",54,56,"-2"],["B","ADD",52,56,"-2"],["B","ADD",50,56,"-2"],["B","ADD",48,56,"-2"],["B","ADD",46,56,"-2"],["B","ADD",44,56,"-2"],["B","ADD",42,56,"-2"],["B","ADD",40,56,"-2"],["B","ADD",38,56,"-2"],["B","SCALE",56,"-1"],["B","ADD",75,56,"-2"],["B","ADD",74,56,"-2"],["B","ADD",73,56,"-2"],["B","ADD",72,56,"-2"],["B","ADD",71,56,"-2"],["B","ADD",70,56,"-2"],["B","ADD",69,56,"-2"],["B","ADD",68,56,"-2"],["B","ADD",67,56,"-2"],["B","ADD",66,56,"-2"],["B","ADD",65,56,"-2"],["B","ADD",64,56,"-2"],["B","ADD",63,56,"-2"],["B","ADD",62,56,"-2"],["B","ADD",61,56,"-2"],["B","ADD",60,56,"-2"],["B","ADD",59,56,"-2"],["B","ADD",58,56,"-2"],["B","ADD",54,55,"2"],["B","ADD",52,55,"2"],["B","ADD",50,55,"2"],["B","ADD",48,55,"2"],["B","ADD",46,55,"2"],["B","ADD",44,55,"2"],["B","ADD",42,55,"2"],["B","ADD",40,55,"2"],["B","ADD",38,55,"2"],["B","ADD",75,55,"-2"],["B","ADD",74,55,"-2"],["B","ADD",73,55,"-2"],["B","ADD",72,55,"-2"],["B","ADD",71,55,"-2"],["B","ADD",70,55,"-2"],["B","ADD",69,55,"-2"],["B","ADD",68,55,"-2"],["B","ADD",67,55,"-2"],["B","ADD",66,55,"-2"],["B","ADD",65,55,"-2"],["B","ADD",64,55,"-2"],["B","ADD",63,55,"-2"],["B","ADD",62,55,"-2"],["B","ADD",61,55,"-2"],["B","ADD",60,55,"-2"],["B","ADD",59,55,"-2"],["B","ADD",58,55,"-2"],["B","ADD",56,55,"2"],["B","ADD",52,53,"-2"],["B","ADD",50,53,"-2"],["B","ADD",48,53,"-2"],["B","ADD",46,53,"-2"],["B","ADD",44,53,"-2"],["B","ADD",42,53,"-2"],["B","ADD",40,53,"-2"],["B","ADD",38,53,"-2"],["B","ADD",75,53,"2"],["B","ADD",74,53,"2"],["B","ADD",73,53,"2"],["B","ADD",72,53,"2"],["B","ADD",71,53,"2"],["B","ADD",70,53,"2"],["B","ADD",69,53,"2"],["B","ADD",68,53,"2"],["B","ADD",67,53,"2"],["B","ADD",66,53,"2"],["B","ADD",65,53,"2"],["B","ADD",64,53,"2"],["B","ADD",63,53,"2"],["B","ADD",62,53,"2"],["B","ADD",61,53,"2"],["B","ADD",60,53,"2"],["B","ADD",59,53,"2"],["B","ADD",58,53,"2"],["B","ADD",56,53,"-2"],["B","ADD",54,53,"-2"],["B","ADD",50,52,"-2"],["B","ADD",48,52,"-2"],["B","ADD",46,52,"-2"],["B","ADD",44,52,"-2"],["B","ADD",42,52,"-2"],["B","ADD",40,52,"-2"],["B","ADD",38,52,"-2"],["B","SCALE",52,"-1"],["B","ADD",75,52,"-2"],["B","ADD",74,52,"-2"],["B","ADD",73,52,"-2"],["B","ADD",72,52,"-2"],["B","ADD",71,52,"-2"],["B","ADD",70,52,"-2"],["B","ADD",69,52,"-2"],["B","ADD",68,52,"-2"],["B","ADD",67,52,"-2"],["B","ADD",66,52,"-2"],["B","ADD",65,52,"-2"],["B","ADD",64,52,"-2"],["B","ADD",63,52,"-2"],["B","ADD",62,52,"-2"],["B","ADD",61,52,"-2"],["B","ADD",60,52,"-2"],["B","ADD",59,52,"-2"],["B","ADD",58,52,"-2"],["B","ADD",56,52,"2"],["B","ADD",54,52,"2"],["B","ADD",50,51,"2"],["B","ADD",48,51,"2"],["B","ADD",46,51,"2"],["B","ADD",44,51,"2"],["B","ADD",42,51,"2"],["B","ADD",40,51,"2"],["B","ADD",38,51,"2"],["B","ADD",75,51,"-2"],["B","ADD",74,51,"-2"],["B","ADD",73,51,"-2"],["B","ADD",72,51,"-2"],["B","ADD",71,51,"-2"],["B","ADD",70,51,"-2"],["B","ADD",69,51,"-2"],["B","ADD",68,51,"-2"],["B","ADD",67,51,"-2"],["B","ADD",66,51,"-2"],["B","ADD",65,51,"-2"],["B","ADD",64,51,"-2"],["B","ADD",63,51,"-2"],["B","ADD",62,51,"-2"],["B","ADD",61,51,"-2"],["B","ADD",60,51,"-2"],["B","ADD",59,51,"-2"],["B","ADD",58,51,"-2"],["B","ADD",56,51,"2"],["B","ADD",54,51,"2"],["B","ADD",52,51,"2"],["B","ADD",48,49,"-2"],["B","ADD",46,49,"-2"],["B","ADD",44,49,"-2"],["B","ADD",42,49,"-2"],["B","ADD",40,49,"-2"],["B","ADD",38,49,"-2"],["B","ADD",75,49,"2"],["B","ADD",74,49,"2"],["B","ADD",73,49,"2"],["B","ADD",72,49,"2"],["B","ADD",71,49,"2"],["B","ADD",70,49,"2"],["B","ADD",69,49,"2"],["B","ADD",68,49,"2"],["B","ADD",67,49,"2"],["B","ADD",66,49,"2"],["B","ADD",65,49,"2"],["B","ADD",64,49,"2"],["B","ADD",63,49,"2"],["B","ADD",62,49,"2"],["B","ADD",61,49,"2"],["B","ADD",60,49,"2"],["B","ADD",59,49,"2"],["B","ADD",58,49,"2"],["B","ADD",56,49,"-2"],["B","ADD",54,49,"-2"],["B","ADD",52,49,"-2"],["B","ADD",50,49,"-2"],["B","ADD",46,48,"-2"],["B","ADD",44,48,"-2"],["B","ADD",42,48,"-2"],["B","ADD",40,48,"-2"],["B","ADD",38,48,"-2"],["B","SCALE",48,"-1"],["B","ADD",75,48,"-2"],["B","ADD",74,48,"-2"],["B","ADD",73,48,"-2"],["B","ADD",72,48,"-2"],["B","ADD",71,48,"-2"],["B","ADD",70,48,"-2"],["B","ADD",69,48,"-2"],["B","ADD",68,48,"-2"],["B","ADD",67,48,"-2"],["B","ADD",66,48,"-2"],["B","ADD",65,48,"-2"],["B","ADD",64,48,"-2"],["B","ADD",63,48,"-2"],["B","ADD",62,48,"-2"],["B","ADD",61,48,"-2"],["B","ADD",60,48,"-2"],["B","ADD",59,48,"-2"],["B","ADD",58,48,"-2"],["B","ADD",56,48,"2"],["B","ADD",54,48,"2"],["B","ADD",52,48,"2"],["B","ADD",50,48,"2"],["B","ADD",46,47,"2"],["B","ADD",44,47,"2"],["B","ADD",42,47,"2"],["B","ADD",40,47,"2"],["B","ADD",38,47,"2"],["B","ADD",75,47,"-2"],["B","ADD",74,47,"-2"],["B","ADD",73,47,"-2"],["B","ADD",72,47,"-2"],["B","ADD",71,47,"-2"],["B","ADD",70,47,"-2"],["B","ADD",69,47,"-2"],["B","ADD",68,47,"-2"],["B","ADD",67,47,"-2"],["B","ADD",66,47,"-2"],["B","ADD",65,47,"-2"],["B","ADD",64,47,"-2"],["B","ADD",63,47,"-2"],["B","ADD",62,47,"-2"],["B","ADD",61,47,"-2"],["B","ADD",60,47,"-2"],["B","ADD",59,47,"-2"],["B","ADD",58,47,"-2"],["B","ADD",56,47,"2"],["B","ADD",54,47,"2"],["B","ADD",52,47,"2"],["B","ADD",50,47,"2"],["B","ADD",48,47,"2"],["B","ADD",44,45,"-2"],["B","ADD",42,45,"-2"],["B","ADD",40,45,"-2"],["B","ADD",38,45,"-2"],["B","ADD",75,45,"2"],["B","ADD",74,45,"2"],["B","ADD",73,45,"2"],["B","ADD",72,45,"2"],["B","ADD",71,45,"2"],["B","ADD",70,45,"2"],["B","ADD",69,45,"2"],["B","ADD",68,45,"2"],["B","ADD",67,45,"2"],["B","ADD",66,45,"2"],["B","ADD",65,45,"2"],["B","ADD",64,45,"2"],["B","ADD",63,45,"2"],["B","ADD",62,45,"2"],["B","ADD",61,45,"2"],["B","ADD",60,45,"2"],["B","ADD",59,45,"2"],["B","ADD",58,45,"2"],["B","ADD",56,45,"-2"],["B","ADD",54,45,"-2"],["B","ADD",52,45,"-2"],["B","ADD",50,45,"-2"],["B","ADD",48,45,"-2"],["B","ADD",46,45,"-2"],["B","ADD",42,44,"-2"],["B","ADD",40,44,"-2"],["B","ADD",38,44,"-2"],["B","SCALE",44,"-1"],["B","ADD",75,44,"-2"],["B","ADD",74,44,"-2"],["B","ADD",73,44,"-2"],["B","ADD",72,44,"-2"],["B","ADD",71,44,"-2"],["B","ADD",70,44,"-2"],["B","ADD",69,44,"-2"],["B","ADD",68,44,"-2"],["B","ADD",67,44,"-2"],["B","ADD",66,44,"-2"],["B","ADD",65,44,"-2"],["B","ADD",64,44,"-2"],["B","ADD",63,44,"-2"],["B","ADD",62,44,"-2"],["B","ADD",61,44,"-2"],["B","ADD",60,44,"-2"],["B","ADD",59,44,"-2"],["B","ADD",58,44,"-2"],["B","ADD",56,44,"2"],["B","ADD",54,44,"2"],["B","ADD",52,44,"2"],["B","ADD",50,44,"2"],["B","ADD",48,44,"2"],["B","ADD",46,44,"2"],["B","ADD",42,43,"2"],["B","ADD",40,43,"2"],["B","ADD",38,43,"2"],["B","ADD",75,43,"-2"],["B","ADD",74,43,"-2"],["B","ADD",73,43,"-2"],["B","ADD",72,43,"-2"],["B","ADD",71,43,"-2"],["B","ADD",70,43,"-2"],["B","ADD",69,43,"-2"],["B","ADD",68,43,"-2"],["B","ADD",67,43,"-2"],["B","ADD",66,43,"-2"],["B","ADD",65,43,"-2"],["B","ADD",64,43,"-2"],["B","ADD",63,43,"-2"],["B","ADD",62,43,"-2"],["B","ADD",61,43,"-2"],["B","ADD",60,43,"-2"],["B","ADD",59,43,"-2"],["B","ADD",58,43,"-2"],["B","ADD",56,43,"2"],["B","ADD",54,43,"2"],["B","ADD",52,43,"2"],["B","ADD",50,43,"2"],["B","ADD",48,43,"2"],["B","ADD",46,43,"2"],["B","ADD",44,43,"2"],["B","ADD",40,41,"-2"],["B","ADD",38,41,"-2"],["B","ADD",75,41,"2"],["B","ADD",74,41,"2"],["B","ADD",73,41,"2"],["B","ADD",72,41,"2"],["B","ADD",71,41,"2"],["B","ADD",70,41,"2"],["B","ADD",69,41,"2"],["B","ADD",68,41,"2"],["B","ADD",67,41,"2"],["B","ADD",66,41,"2"],["B","ADD",65,41,"2"],["B","ADD",64,41,"2"],["B","ADD",63,41,"2"],["B","ADD",62,41,"2"],["B","ADD",61,41,"2"],["B","ADD",60,41,"2"],["B","ADD",59,41,"2"],["B","ADD",58,41,"2"],["B","ADD",56,41,"-2"],["B","ADD",54,41,"-2"],["B","ADD",52,41,"-2"],["B","ADD",50,41,"-2"],["B","ADD",48,41,"-2"],["B","ADD",46,41,"-2"],["B","ADD",44,41,"-2"],["B","ADD",42,41,"-2"],["B","ADD",38,40,"-2"],["B","SCALE",40,"-1"],["B","ADD",75,40,"-2"],["B","ADD",74,40,"-2"],["B","ADD",73,40,"-2"],["B","ADD",72,40,"-2"],["B","ADD",71,40,"-2"],["B","ADD",70,40,"-2"],["B","ADD",69,40,"-2"],["B","ADD",68,40,"-2"],["B","ADD",67,40,"-2"],["B","ADD",66,40,"-2"],["B","ADD",65,40,"-2"],["B","ADD",64,40,"-2"],["B","ADD",63,40,"-2"],["B","ADD",62,40,"-2"],["B","ADD",61,40,"-2"],["B","ADD",60,40,"-2"],["B","ADD",59,40,"-2"],["B","ADD",58,40,"-2"],["B","ADD",56,40,"2"],["B","ADD",54,40,"2"],["B","ADD",52,40,"2"],["B","ADD",50,40,"2"],["B","ADD",48,40,"2"],["B","ADD",46,40,"2"],["B","ADD",44,40,"2"],["B","ADD",42,40,"2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"-2"],["B","ADD",74,39,"-2"],["B","ADD",73,39,"-2"],["B","ADD",72,39,"-2"],["B","ADD",71,39,"-2"],["B","ADD",70,39,"-2"],["B","ADD",69,39,"-2"],["B","ADD",68,39,"-2"],["B","ADD",67,39,"-2"],["B","ADD",66,39,"-2"],["B","ADD",65,39,"-2"],["B","ADD",64,39,"-2"],["B","ADD",63,39,"-2"],["B","ADD",62,39,"-2"],["B","ADD",61,39,"-2"],["B","ADD",60,39,"-2"],["B","ADD",59,39,"-2"],["B","ADD",58,39,"-2"],["B","SCALE",38,"1/2"],["B","ADD",75,38,"2"],["B","ADD",74,38,"2"],["B","ADD",73,38,"2"],["B","ADD",72,38,"2"],["B","ADD",71,38,"2"],["B","ADD",70,38,"2"],["B","ADD",69,38,"2"],["B","ADD",68,38,"2"],["B","ADD",67,38,"2"],["B","ADD",66,38,"2"],["B","ADD",65,38,"2"],["B","ADD",64,38,"2"],["B","ADD",63,38,"2"],["B","ADD",62,38,"2"],["B","ADD",61,38,"2"],["B","ADD",60,38,"2"],["B","ADD",59,38,"2"],["B","ADD",58,38,"2"],["B","ADD",56,38,"-2"],["B","ADD",54,38,"-2"],["B","ADD",52,38,"-2"],["B","ADD",50,38,"-2"],["B","ADD",48,38,"-2"],["B","ADD",46,38,"-2"],["B","ADD",44,38,"-2"],["B","ADD",42,38,"-2"],["B","ADD",40,38,"-2"],["B","SWAP",38,39],["B","LAMBDA",38,-1],["B","QUERY",38,39,-1],["B","LAMBDA",38,1],["B","ADD",38,39,"-1"],["B","ADD",39,75,"1"],["B","ADD",72,74,"-1"],["B","ADD",70,74,"-1"],["B","ADD",68,74,"-1"],["B","ADD",66,74,"-1"],["B","ADD",64,74,"-1"],["B","ADD",62,74,"-1"],["B","ADD",58,74,"-1/2"],["B","ADD",39,74,"1"],["B","SWAP",73,75],["B","ADD",39,72,"1"],["B","SWAP",72,74],["B","ADD",39,71,"-1"],["B","ADD",39,70,"1"],["B","ADD",39,68,"-1"],["B","ADD",39,67,"1"],["B","ADD",39,66,"-1"],["B","SWAP",65,69],["B","ADD",39,64,"1"],["B","SWAP",64,68],["B","ADD",39,63,"-1"],["B","SWAP",63,71],["B","ADD",39,62,"1"],["B","SWAP",62,70],["B","SWAP",61,75],["B","ADD",39,60,"-1"],["B","SWAP",60,74],["B","ADD",58,59,"-1"],["B","ADD",38,59,"1"],["B","SCALE",59,"-2"],["B","ADD",75,59,"1"],["B","ADD",74,59,"1"],["B","SWAP",59,73],["B","SCALE",58,"-2"],["B","ADD",72,58,"-1"],["B","ADD",70,58,"1"],["B","ADD",68,58,"1"],["B","ADD",66,58,"1"],["B","ADD",64,58,"1"],["B","ADD",62,58,"1"],["B","ADD",60,58,"1"],["B","ADD",39,57,"-1"],["B","ADD",39,56,"1"],["B","ADD",39,55,"-1"],["B","ADD",39,53,"1"],["B","ADD",39,52,"-1"],["B","ADD",39,51,"1"],["B","ADD",39,49,"-1"],["B","ADD",39,48,"1"],["B","ADD",39,47,"-1"],["B","ADD",39,45,"1"],["B","ADD",39,44,"-1"],["B","ADD",39,43,"1"],["B","ADD",39,41,"-1"],["B","ADD",39,40,"1"],["B","ADD",38,39,"1"],["B","SCALE",39,"-128"],["B","ADD",72,39,"1/64"],["B","ADD",70,39,"-1/64"],["B","ADD",68,39,"-1/64"],["B","ADD",66,39,"-1/64"],["B","ADD",64,39,"-1/64"],["B","ADD",62,39,"-1/64"],["B","ADD",60,39,"-1/64"],["B","ADD",58,39,"-1/64"],["B","SCALE",38,"128"],["B","ADD",75,38,"1/32"],["B","ADD",74,38,"1/64"],["B","ADD",73,38,"1/32"],["B","ADD",72,38,"-1/64"],["B","SWAP",38,39],["B","LAMBDA",38,-1],["J",10,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","ADD",0,1,"-1"],["A","IDLE_ONE",2,[10]],["A","IDLE_ONE",3,[10,11]],["A","IDLE_ONE",4,[10,11,12]],["A","IDLE_ONE",5,[10,11,12,13]],["A","IDLE_ONE",6,[10,11,12,13,14]],["A","IDLE_ONE",7,[10,11,12,13,14,15]],["A","IDLE_ONE",8,[10,11,12,13,14,15,16]],["A","IDLE_ONE",9,[10,11,12,13,14,15,16,17]],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","ADD",19,20,"-1"],["A","IDLE_ONE",21,[10]],["A","IDLE_ONE",22,[10,11]],["A","IDLE_ONE",23,[10,11,12]],["A","IDLE_ONE",24,[10,11,12,13]],["A","IDLE_ONE",25,[10,11,12,13,14]],["A","IDLE_ONE",26,[10,11,12,13,14,15]],["A","IDLE_ONE",27,[10,11,12,13,14,15,16]],["A","IDLE_ONE",28,[10,11,12,13,14,15,16,17]],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",58,[10,11,12,13,14,15,16,17]],["B","IDLE_ONE",59,[10,11,12,13,14,15,16,17]],["B","IDLE_ONE",60,[10,11,12,13,14,15,16]],["B","IDLE_ONE",61,[10,11,12,13,14,15,16]],["B","IDLE_ONE",62,[10,11,12,13,14,15]],["B","IDLE_ONE",63,[10,11,12,13,14,15]],["B","IDLE_ONE",64,[10,11,12,13,14]],["B","IDLE_ONE",65,[10,11,12,13,14]],["B","IDLE_ONE",66,[10,11,12,13]],["B","IDLE_ONE",67,[10,11,12,13]],["B","IDLE_ONE",68,[10,11,12]],["B","IDLE_ONE",69,[10,11,12]],["B","IDLE_ONE",70,[10,11]],["B","IDLE_ONE",71,[10,11]],["B","IDLE_ONE",72,[10]],["B","IDLE_ONE",73,[10]],["B","IDLE_ONE",74,[10]],["B","IDLE_ONE",75,[10]],["B","ADD",74,75,"-1/2"],["B","ADD",73,75,"-1"],["B","ADD",72,75,"1/2"],["B","ADD",39,75,"-64"],["B","SCALE",75,"1/4"],["B","ADD",72,74,"-2"],["B","SCALE",74,"2"],["B","ADD",75,74,"1/2"],["B","ADD",72,73,"3/2"],["B","ADD",39,73,"64"],["B","ADD",38,73,"64"],["B","SCALE",73,"2"],["B","ADD",75,73,"-5/8"],["B","ADD",74,73,"-3/2"],["B","SWAP",73,75],["B","ADD",38,72,"-64"],["B","ADD",74,72,"2"],["B","ADD",73,72,"3/2"],["B","SWAP",72,73],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","SWAP",67,69],["B","SWAP",66,68],["B","SWAP",65,67],["B","SWAP",64,66],["B","SWAP",63,65],["B","SWAP",62,64],["B","SWAP",61,63],["B","SWAP",60,62],["B","SWAP",59,61],["B","SWAP",58,60],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",59,39,"1/64"],["B","ADD",58,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",59,38,"-1/64"],["B","ADD",58,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",11,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[11]],["B","IDLE_ONE",75,[11]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","SWAP",67,69],["B","SWAP",66,68],["B","SWAP",65,67],["B","SWAP",64,66],["B","SWAP",63,65],["B","SWAP",62,64],["B","SWAP",61,63],["B","SWAP",60,62],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",61,39,"1/64"],["B","ADD",60,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",61,38,"-1/64"],["B","ADD",60,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",12,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[12]],["B","IDLE_ONE",75,[12]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","SWAP",67,69],["B","SWAP",66,68],["B","SWAP",65,67],["B","SWAP",64,66],["B","SWAP",63,65],["B","SWAP",62,64],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",63,39,"1/64"],["B","ADD",62,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",63,38,"-1/64"],["B","ADD",62,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",13,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[13]],["B","IDLE_ONE",75,[13]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","SWAP",67,69],["B","SWAP",66,68],["B","SWAP",65,67],["B","SWAP",64,66],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",65,39,"1/64"],["B","ADD",64,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",65,38,"-1/64"],["B","ADD",64,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",14,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[14]],["B","IDLE_ONE",75,[14]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","SWAP",67,69],["B","SWAP",66,68],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",67,39,"1/64"],["B","ADD",66,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",67,38,"-1/64"],["B","ADD",66,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",15,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[15]],["B","IDLE_ONE",75,[15]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","SWAP",69,71],["B","SWAP",68,70],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",69,39,"1/64"],["B","ADD",68,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",69,38,"-1/64"],["B","ADD",68,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",16,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[16]],["B","IDLE_ONE",75,[16]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/2"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"2"],["B","ADD",74,73,"-1"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1"],["B","ADD",73,72,"1"],["B","SWAP",71,73],["B","SWAP",70,72],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/32"],["B","ADD",74,39,"-1/64"],["B","ADD",71,39,"1/64"],["B","ADD",70,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/32"],["B","ADD",71,38,"-1/64"],["B","ADD",70,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",17,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","ADD",1,2,"-1"],["A","ADD",0,2,"-1"],["A","SCALE",2,"-1"],["A","SWAP",2,18],["A","ADD",0,1,"-1"],["A","SCALE",1,"-1"],["A","ADD",18,1,"2"],["A","ADD",18,0,"2"],["A","ADD",1,0,"1"],["A","SWAP",0,18],["A","LAMBDA",0,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","ADD",20,21,"-1"],["A","ADD",19,21,"-1"],["A","SCALE",21,"-1"],["A","SWAP",21,37],["A","ADD",19,20,"-1"],["A","ADD",37,20,"-2"],["A","ADD",37,19,"2"],["A","ADD",20,19,"-1"],["A","SWAP",19,37],["A","LAMBDA",19,1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[17]],["B","IDLE_ONE",75,[17]],["B","ADD",74,75,"1"],["B","ADD",72,75,"-1/4"],["B","ADD",39,75,"-64"],["B","SCALE",75,"-1/4"],["B","ADD",73,74,"1/2"],["B","ADD",72,74,"1/2"],["B","ADD",39,74,"64"],["B","ADD",38,74,"32"],["B","SCALE",74,"1/2"],["B","SWAP",74,75],["B","ADD",72,73,"-1/2"],["B","ADD",39,73,"-128"],["B","SCALE",73,"-1"],["B","ADD",75,73,"1"],["B","ADD",74,73,"-1/2"],["B","ADD",38,72,"128"],["B","SCALE",72,"-2"],["B","ADD",74,72,"1/2"],["B","ADD",73,72,"1"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"-1"],["B","ADD",75,39,"1/64"],["B","ADD",74,39,"-1/128"],["B","ADD",73,39,"1/64"],["B","ADD",72,39,"1/128"],["B","SCALE",38,"-1"],["B","ADD",75,38,"-1/64"],["B","ADD",73,38,"-1/64"],["B","ADD",72,38,"-1/64"],["B","ADD",39,38,"-1"],["B","LAMBDA",38,-1],["J",18,[1,0,19,20],[39,38,"-1","1/2"]],["A","LAMBDA",19,-1],["A","SCALE",20,"-1"],["A","LAMBDA",0,1],["A","SWAP",17,18],["A","SWAP",16,18],["A","SWAP",15,18],["A","SWAP",14,18],["A","SWAP",13,18],["A","SWAP",12,18],["A","SWAP",11,18],["A","SWAP",10,18],["A","SWAP",9,18],["A","SWAP",8,18],["A","SWAP",7,18],["A","SWAP",6,18],["A","SWAP",5,18],["A","SWAP",4,18],["A","SWAP",3,18],["A","SWAP",2,18],["A","ADD",0,1,"-2"],["A","SWAP",1,18],["A","SCALE",0,"-1"],["A","ADD",18,0,"-1"],["A","LAMBDA",0,-1],["A","LAMBDA",1,-1],["A","LAMBDA",2,-1],["A","LAMBDA",3,-1],["A","LAMBDA",4,-1],["A","LAMBDA",5,-1],["A","LAMBDA",6,-1],["A","LAMBDA",7,-1],["A","LAMBDA",8,-1],["A","LAMBDA",9,-1],["A","LAMBDA",10,-1],["A","LAMBDA",11,-1],["A","LAMBDA",12,-1],["A","LAMBDA",13,-1],["A","LAMBDA",14,-1],["A","LAMBDA",15,-1],["A","LAMBDA",16,-1],["A","LAMBDA",17,-1],["A","LAMBDA",18,-1],["A","SWAP",36,37],["A","SWAP",35,37],["A","SWAP",34,37],["A","SWAP",33,37],["A","SWAP",32,37],["A","SWAP",31,37],["A","SWAP",30,37],["A","SWAP",29,37],["A","SWAP",28,37],["A","SWAP",27,37],["A","SWAP",26,37],["A","SWAP",25,37],["A","SWAP",24,37],["A","SWAP",23,37],["A","SWAP",22,37],["A","SWAP",21,37],["A","ADD",19,20,"-2"],["A","SWAP",20,37],["A","SCALE",19,"-1"],["A","ADD",37,19,"-1"],["A","LAMBDA",19,-1],["A","LAMBDA",20,-1],["A","LAMBDA",21,-1],["A","LAMBDA",22,-1],["A","LAMBDA",23,-1],["A","LAMBDA",24,-1],["A","LAMBDA",25,-1],["A","LAMBDA",26,-1],["A","LAMBDA",27,-1],["A","LAMBDA",28,-1],["A","LAMBDA",29,-1],["A","LAMBDA",30,-1],["A","LAMBDA",31,-1],["A","LAMBDA",32,-1],["A","LAMBDA",33,-1],["A","LAMBDA",34,-1],["A","LAMBDA",35,-1],["A","LAMBDA",36,-1],["A","LAMBDA",37,-1],["B","LAMBDA",38,1],["B","IDLE_ONE",74,[18]],["B","IDLE_ONE",75,[18]],["B","ADD",39,75,"-128"],["B","ADD",38,75,"64"],["B","SCALE",75,"-1"],["B","ADD",38,74,"128"],["B","SCALE",74,"-1"],["B","ADD",75,74,"2"],["B","ADD",38,39,"1/2"],["B","SCALE",39,"1/128"],["B","ADD",75,39,"-2"],["B","ADD",74,39,"-1"],["B","SCALE",38,"1/128"],["B","ADD",75,38,"2"],["B","ADD",74,38,"2"],["B","SWAP",38,39],["B","LAMBDA",38,-1],["B","LAMBDA",39,-1],["B","LAMBDA",40,-1],["B","LAMBDA",41,-1],["B","LAMBDA",42,-1],["B","LAMBDA",43,-1],["B","LAMBDA",44,-1],["B","LAMBDA",45,-1],["B","LAMBDA",46,-1],["B","LAMBDA",47,-1],["B","LAMBDA",48,-1],["B","LAMBDA",49,-1],["B","LAMBDA",50,-1],["B","LAMBDA",51,-1],["B","LAMBDA",52,-1],["B","LAMBDA",53,-1],["B","LAMBDA",54,-1],["B","LAMBDA",55,-1],["B","LAMBDA",56,-1],["B","LAMBDA",57,-1],["B","LAMBDA",58,-1],["B","LAMBDA",59,-1],["B","LAMBDA",60,-1],["B","LAMBDA",61,-1],["B","LAMBDA",62,-1],["B","LAMBDA",63,-1],["B","LAMBDA",64,-1],["B","LAMBDA",65,-1],["B","LAMBDA",66,-1],["B","LAMBDA",67,-1],["B","LAMBDA",68,-1],["B","LAMBDA",69,-1],["B","LAMBDA",70,-1],["B","LAMBDA",71,-1],["B","LAMBDA",72,-1],["B","LAMBDA",73,-1],["B","LAMBDA",74,-1],["B","LAMBDA",75,-1]],"ops_note":"QSELF(x, k): R[x] *= q^k, one paid rank-1 job on one register (new op; not in the retained alphabet).; source interval457..575 replaced by a three-QUERY even-basis factorization; no QSELF"} diff --git a/research/shared-wire-split-composition/data/extra_wire_spec.json b/research/shared-wire-split-composition/data/extra_wire_spec.json new file mode 100644 index 0000000000..e02c3da30e --- /dev/null +++ b/research/shared-wire-split-composition/data/extra_wire_spec.json @@ -0,0 +1,90 @@ +{ + "F": { + "index": 30828, + "dest": 449, + "src": 226, + "q": "1", + "frames": [ + 594, + 260, + 724, + 719 + ], + "stage": 709, + "moves": [ + 30824, + 30837, + 30826, + 38474 + ] + }, + "R": { + "index": 30312, + "dest": 990, + "src": 1206, + "q": "-1", + "frames": [ + 260, + 594, + 719, + 724 + ], + "stage": 709, + "moves": [ + 30309, + 38473, + 30310, + 30841 + ] + }, + "frames": [ + 3, + 260, + 724, + 246 + ], + "gain": 1.8916374395513031, + "merge": 10.54920167986144, + "slots": { + "449": [ + [ + 28033, + 0 + ], + [ + 30837, + 1 + ] + ], + "226": [ + [ + 30826, + 0 + ], + [ + 42902, + 1 + ] + ], + "990": [ + [ + 30309, + 0 + ], + [ + 38853, + 1 + ] + ], + "1206": [ + [ + 27785, + 0 + ], + [ + 30841, + 1 + ] + ] + } +} \ No newline at end of file diff --git a/research/shared-wire-split-composition/data/final.json.gz b/research/shared-wire-split-composition/data/final.json.gz new file mode 100644 index 0000000000..74563a7867 Binary files /dev/null and b/research/shared-wire-split-composition/data/final.json.gz differ diff --git a/research/shared-wire-split-composition/data/main_6936.json.gz b/research/shared-wire-split-composition/data/main_6936.json.gz new file mode 100644 index 0000000000..d93e67ca76 Binary files /dev/null and b/research/shared-wire-split-composition/data/main_6936.json.gz differ diff --git a/research/shared-wire-split-composition/data/split759.proof.json b/research/shared-wire-split-composition/data/split759.proof.json new file mode 100644 index 0000000000..16fa058123 --- /dev/null +++ b/research/shared-wire-split-composition/data/split759.proof.json @@ -0,0 +1,75 @@ +{ + "cut": 42531, + "frame": 660, + "pivot": 759, + "a": { + "759": "1" + }, + "b": { + "759": "1", + "758": "-1" + }, + "c": { + "759": "1", + "1472": "-1" + }, + "d": { + "758": "-1", + "1472": "-1" + }, + "B0": [ + [ + "ADD", + 759, + 1472, + "-1", + 3 + ], + [ + "ADD", + 758, + 759, + "1", + 3 + ], + [ + "ADD", + 1472, + 759, + "1", + 3 + ] + ], + "BF": [ + [ + "ADD", + 759, + 1472, + "-1", + 127 + ], + [ + "ADD", + 758, + 759, + "1", + 127 + ], + [ + "ADD", + 1472, + 759, + "1", + 127 + ] + ], + "BC": [ + [ + "ADD", + 758, + 759, + "1", + 660 + ] + ] +} \ No newline at end of file diff --git a/research/shared-wire-split-composition/data/split759_450.proof.json b/research/shared-wire-split-composition/data/split759_450.proof.json new file mode 100644 index 0000000000..2fb9b2e8b1 --- /dev/null +++ b/research/shared-wire-split-composition/data/split759_450.proof.json @@ -0,0 +1,159 @@ +{ + "cut": 37192, + "frame": 595, + "pivot": 450, + "a": { + "450": "1" + }, + "b": { + "1207": "-1", + "450": "1" + }, + "c": { + "1050": "1", + "1070": "2", + "1466": "1" + }, + "d": { + "1075": "4", + "1053": "-1", + "1466": "1" + }, + "B0": [ + [ + "ADD", + 450, + 1050, + "1", + 3 + ], + [ + "ADD", + 1050, + 450, + "-1", + 3 + ], + [ + "ADD", + 450, + 1050, + "1", + 3 + ], + [ + "SCALE", + 1050, + "-1", + 3 + ], + [ + "ADD", + 450, + 1070, + "2", + 3 + ], + [ + "ADD", + 450, + 1466, + "1", + 3 + ], + [ + "ADD", + 1053, + 450, + "1", + 3 + ], + [ + "ADD", + 1075, + 450, + "-4", + 3 + ], + [ + "ADD", + 1466, + 450, + "-1", + 3 + ] + ], + "BF": [ + [ + "ADD", + 450, + 1050, + "1", + 127 + ], + [ + "ADD", + 1050, + 450, + "-1", + 127 + ], + [ + "ADD", + 450, + 1050, + "1", + 127 + ], + [ + "SCALE", + 1050, + "-1", + 127 + ], + [ + "ADD", + 450, + 1070, + "2", + 127 + ], + [ + "ADD", + 450, + 1466, + "1", + 127 + ], + [ + "ADD", + 1053, + 450, + "1", + 127 + ], + [ + "ADD", + 1075, + 450, + "-4", + 127 + ], + [ + "ADD", + 1466, + 450, + "-1", + 127 + ] + ], + "BC": [ + [ + "ADD", + 1207, + 450, + "1", + 595 + ] + ] +} \ No newline at end of file diff --git a/research/shared-wire-split-composition/data/wh_6937.json.gz b/research/shared-wire-split-composition/data/wh_6937.json.gz new file mode 100644 index 0000000000..1481c94780 Binary files /dev/null and b/research/shared-wire-split-composition/data/wh_6937.json.gz differ diff --git a/research/shared-wire-split-composition/frozen/clifford_exact.py b/research/shared-wire-split-composition/frozen/clifford_exact.py new file mode 100644 index 0000000000..166841a037 --- /dev/null +++ b/research/shared-wire-split-composition/frozen/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<> j) & 1) << i for i, row in enumerate(matrix)) for j in range(len(matrix))) + + +def inverse(matrix): + n = len(matrix) + rows = [row | (1 << (n+i)) for i, row in enumerate(matrix)] + for j in range(n): + pivot = next((i for i in range(j, n) if rows[i] >> j & 1), None) + require(pivot is not None, 'singular binary chart') + rows[j], rows[pivot] = rows[pivot], rows[j] + for i in range(n): + if i != j and rows[i] >> j & 1: + rows[i] ^= rows[j] + require([row & ((1 << n)-1) for row in rows] == [1 << i for i in range(n)], 'binary inverse') + return tuple(row >> n for row in rows) + + +def extend(vectors, n): + columns, pivots = [], {} + for value in tuple(vectors) + tuple(1 << i for i in range(n)): + reduced = value + while reduced: + j = reduced.bit_length()-1 + if j not in pivots: + pivots[j] = reduced + columns.append(value) + break + reduced ^= pivots[j] + require(len(columns) == n, 'frame basis extension') + return tuple(columns) + + +def adjoint(circuit): + out = [] + for gate in reversed(circuit): + if gate[0] == 'P': + out.append(('P', inverse(gate[1]))) + elif gate[0] == 'D': + out.append(('D', gate[1], tuple(-a % 4 for a in gate[2]))) + elif gate[0] == 'C': + out.append(('C', gate[1], -gate[2])) + elif gate[0] == 'phase': + out.append(('phase', -gate[1] % 4)) + else: + require(gate[0] == 'X', 'adjoint gate type') + out.append(gate) + return tuple(out) + + +def fourier(rank): + return tuple(('C', 1 << i, 1) for i in range(rank)) + + +def frame(vectors, n): + rank = len(vectors) + if rank == 0: + return () + if rank == n: + return fourier(n) + matrix = transpose(extend(vectors, n)) + columns = transpose(inverse(matrix)) + quadratic = tuple((1 << i) ^ sum(parity(a & b) << j for j, b in enumerate(columns)) for i, a in enumerate(columns)) + diagonal = tuple((row >> i) & 1 for i, row in enumerate(quadratic)) + chart = (('P', matrix), ('D', quadratic, diagonal)) + return adjoint(chart) + fourier(rank) + chart + + +def monomial(record): + matrix = tuple(record['matrix_rows']) + quadratic = tuple(record['quadratic_rows']) + linear = tuple(record['linear_Z4']) + require(transpose(quadratic) == quadratic, 'quadratic symmetry') + require(len(matrix) == len(quadratic) == len(linear) == 9, 'monomial dimension') + require(all(a % 2 == (quadratic[i] >> i) & 1 for i, a in enumerate(linear)), 'diagonal parity') + inverse(matrix) + return (('D', quadratic, linear), ('P', matrix), ('X', record['offset']), ('phase', record['phase'])) + + +def recipe(record): + rank = record['rank'] + require(isinstance(rank, int) and 0 <= rank <= 9, 'child rank') + if rank == 0: + require(record['right'] is None, 'rank zero right factor') + return monomial(record['left']) + return monomial(record['right']) + fourier(rank) + monomial(record['left']) + + +def tableau(circuit, n=9): + rows = [(1 << i, 0, 0) for i in range(n)] + [(0, 1 << i, 0) for i in range(n)] + for gate in circuit: + tag = gate[0] + out = [] + inverse_transpose = transpose(inverse(gate[1])) if tag == 'P' else None + for x, z, phase in rows: + if tag == 'P': + x, z = mul(gate[1], x), mul(inverse_transpose, z) + elif tag == 'X': + phase += 2 * parity(z & gate[1]) + elif tag == 'C': + if parity(z & gate[1]): + x ^= gate[1] + phase += 3 * gate[2] + elif tag == 'D': + quadratic, linear = gate[1:] + phase += sum(linear[i] for i in range(n) if x >> i & 1) + phase += 2 * sum(parity((quadratic[i] >> (i+1)) & (x >> (i+1))) for i in range(n) if x >> i & 1) + z ^= mul(quadratic, x) + else: + require(tag == 'phase', 'tableau gate type') + out.append((x, z, phase % 4)) + rows = out + return tuple(rows) + + +@lru_cache(maxsize=512) +def action(gate): + if gate[0] == 'P': + return tuple(mul(gate[1], x) for x in range(512)) + require(gate[0] == 'D', 'state action type') + quadratic, linear = gate[1:] + return tuple((sum(linear[i] for i in range(9) if x >> i & 1) + + 2 * sum(parity((quadratic[i] >> (i+1)) & (x >> (i+1))) for i in range(9) if x >> i & 1)) % 4 for x in range(512)) + + +def rotate(pair, power): + a, b = pair + return ((a, b), (-b, a), (-a, -b), (b, -a))[power % 4] + + +def state(circuit, basis=0): + value, denominator = {basis: (1, 0)}, 0 + for gate in circuit: + tag = gate[0] + result = {} + if tag == "C": + direction, sign = gate[1:] + for address, (a, b) in value.items(): + for target, pair in ((address, (a - sign*b, b + sign*a)), + (address ^ direction, (a + sign*b, b - sign*a))): + old = result.get(target, (0, 0)) + result[target] = (old[0] + pair[0], old[1] + pair[1]) + denominator += 1 + else: + for address, pair in value.items(): + if tag == "P": + target = mul(gate[1], address) + elif tag == "X": + target = address ^ gate[1] + else: + target = address + if tag == "D": + pair = rotate(pair, action(gate)[address]) + else: + require(tag == "phase", "Unknown Gaussian state gate") + pair = rotate(pair, gate[1]) + require(target not in result, "A monomial address map is not injective") + result[target] = pair + value = {address: pair for address, pair in result.items() if pair != (0, 0)} + while denominator and all((a | b) % 2 == 0 for a, b in value.values()): + denominator -= 1 + value = {address: (a//2, b//2) for address, (a, b) in value.items()} + return value, denominator + + +def equal(actual, expected, label): + require(tableau(actual) == tableau(expected), label + ": signed Pauli action") + require(state(actual) == state(expected), label + ": exact global phase") + + +def verify(data, certificate): + word = data["word"] + original, clean = data["programs"], data["clean_programs"] + source_recipes = data["recipes"] + residuals = data["residuals"]["recipes"] + native_tags = {"climb", "adapter", "residual_adapter"} + for orientation in ("forward", "backward"): + native = [event for event in clean[orientation] if event[0] in native_tags] + require(native == [event for event in original[orientation] if event[0] in native_tags], + "A retained native event changed") + require(len(native) == 5056, "The retained native event count changed") + frames = [frame(tuple(vectors), 9) for vectors in word["frames"]] + used = {(event[3], event[4]) for program in clean.values() + for event in program if event[0] == "climb"} + children = {(record["old"], record["new"]): record for record in source_recipes["children"]} + require(len(children) == len(source_recipes["children"]) and used <= set(children), + "The retained child recipe coverage is incomplete") + for old, new in sorted(used): + record = children[old, new] + require(record["rank"] == len(word["frames"][new]) - len(word["frames"][old]), + "A retained child has the wrong rank") + equal(recipe(record), adjoint(frames[old]) + frames[new], "Retained child") + endpoints = {(record["role"], record["port"]): record + for record in source_recipes["endpoint_adapters"]} + require(len(endpoints) == len(source_recipes["endpoint_adapters"]) + and set(endpoints) == {(role, p) for role in ("source", "target") for p in range(112)}, + "The endpoint adapter coverage is incomplete") + for (role, port), record in endpoints.items(): + direction = word["ports"][port] + conventional = (("C", direction, 1),) if role == "source" else ( + ("C", direction, -1),) + fourier(9) + index = word["start"][port] if role == "source" else word["final"][112 + port] + require(record["frame"] == index and record["rank"] == 0, "An endpoint frame changed") + equal(recipe(record), adjoint(conventional) + frames[index], "Endpoint adapter") + used_residuals = set() + for program in clean.values(): + for event in program: + if event[0] != "residual_adapter": + continue + _, position, register, entry, *tail = event + terminal = tail[0] if tail else 1 + key = str(entry) if terminal == 1 else str(entry) + ":" + str(terminal) + require(key in residuals and position in ("pre", "post"), "A residual binding changed") + require(entry == word["start"][register] and terminal == word["final"][register], + "A residual endpoint changed") + used_residuals.add(key) + for key in sorted(used_residuals): + record = residuals[key] + equal(recipe(record), adjoint(frames[record["frame"]]) + frames[record.get("terminal", 1)], + "Residual adapter") + records = certificate["input_recipes"] + ports = certificate["compensation_ports"] + require([record["port"] for record in records] == ports and len(records) == 8, + "The eight input recipes changed") + columns = 0 + for item in records: + port, label = item["port"], item["label"] + require(label == word["ports"][port] and item["canonical_start_frame_id"] == word["start"][port], + "An input recipe has the wrong supplier label") + record = item["recipe"] + require(record["rank"] == 1, "An input copy has the wrong child rank") + for side in ("left", "right"): + factor = record[side] + require(factor["quadratic_rows"] == [0] * 9 and factor["linear_Z4"] == [0] * 9 + and factor["offset"] == factor["phase"] == 0, + "An input factor is not an address permutation") + actual, expected = recipe(record), (("C", label, 1),) + equal(actual, expected, "Positive inherited input line") + for basis in range(512): + require(state(actual, basis) == state(expected, basis), "A complete input Gaussian column differs") + columns += 1 + negative = monomial(record["right"]) + (("C", 1, -1),) + monomial(record["left"]) + require(tableau(negative) != tableau(expected) or state(negative) != state(expected), + "An inverse input child was not detected") + phased = actual + (("phase", 1),) + require(tableau(phased) == tableau(actual) and state(phased) != state(expected), + "An input phase-only error was not detected") + return {"status": "PASS_EXACT_INPUT_NATIVE_FRAMES", "retained_native_events_per_orientation": 5056, + "retained_child_recipes": len(used), "endpoint_adapter_recipes": len(endpoints), + "residual_adapter_recipes": len(used_residuals), "new_input_recipes": len(records), + "new_exact_gaussian_columns": columns, "inverse_input_child_controls": len(records), + "phase_only_controls": len(records), "address_permutation_factors": 2 * len(records), + "method": "Independent signed Pauli and exact Gaussian interpretation; no compiler import", + "scope": "Positive inherited input frames before every retained adapter. No recursive hosting claim."} diff --git a/research/shared-wire-split-composition/frozen/physical.py b/research/shared-wire-split-composition/frozen/physical.py new file mode 100644 index 0000000000..5e0b17b9ef --- /dev/null +++ b/research/shared-wire-split-composition/frozen/physical.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +"""Physical stream replay of the literal hosted word, own driver (standard library). +python3 -I -B physical.py WORD.json.gz CLIFFORD_EXACT.py [prime=1000000009] [seed=11] [mutate] +Every register carries a 512-component stream over F_p[i] (p = 1 mod 4, i a fixed square root of -1); inputs are random. +A MOVE a->b applies chart(a)^dagger then chart(b) as explicit gates (P, X, D, C, phase read from the retained Clifford +circuits, interpreted here); INIT zeroes, CLEAR erases, SCALE/ADD act linearly. Prediction comes from the charts alone: + X_out = M(X_in; init->final) + alpha M(Y_in; Y0->Xfinal), Y_out = beta M(X_in; init->Yfinal) + (1+t) M(Y_in; Y0->Yfinal), +helpers: M(in; init->final). Then the raw main-pair identities by tableau and phase on all 104 ports, with controls.""" +import sys, gzip, json, time, importlib.util, random +from fractions import Fraction as Fr +wordp, cliff = sys.argv[1], sys.argv[2] +p = int(sys.argv[3]) if len(sys.argv) > 3 else 1000000009 +seed = int(sys.argv[4]) if len(sys.argv) > 4 else 11 +mutate = len(sys.argv) > 5 +assert p % 4 == 1 +spec = importlib.util.spec_from_file_location('cliff', cliff); C = importlib.util.module_from_spec(spec); sys.modules['cliff'] = C; spec.loader.exec_module(C) +def find_i(): + for g in range(2, 200): + v = pow(g, (p - 1) // 4, p) + if v * v % p == p - 1: return v +IM = find_i(); HALF = (p + 1) // 2; N = 512; IP = [1, IM, p - 1, (p - IM) % p] +W = json.load(gzip.open(wordp, 'rt')); fr = W['frames']; n = len(W['initial']); NO = W['owned_fields']; NR = n + NO; live = W['live'] +Hh = W['hosted']; alpha = Fr(Hh['alpha']); beta = Fr(Hh['beta']); t = alpha * beta; a2f = Fr(Hh['alpha2']); b2f = Fr(Hh['beta2']); X2 = Hh['X2']; Y2 = Hh['Y2'] +if mutate: a2f = -a2f # control run: predictions use the wrong sign of alpha2; must be rejected +fm = lambda q: (lambda f: f.numerator % p * pow(f.denominator, p - 2, p) % p)(Fr(q)) +charts = {} +def chart(i): + if i not in charts: charts[i] = C.canonical_frame(9, tuple(fr[i])) + return charts[i] +def gates(op): + g = [] + for e in op.circuit: + k = e[0] + if k == 'P': g.append(('P', [C.mv(e[1], x) for x in range(N)])) + elif k == 'X': g.append(('X', [x ^ e[1] for x in range(N)])) + elif k == 'D': g.append(('M', [IP[C.qvalue(e[1], e[2], x, 9)] for x in range(N)])) + elif k == 'phase': g.append(('S', IP[e[1] % 4])) + elif k == 'C': + q, s = e[1], e[2] + g.append(('C', [x ^ q for x in range(N)], (1 + s * IM) * HALF % p, (1 - s * IM) * HALF % p)) + else: raise SystemExit('unknown gate ' + str(k)) + return g +def apply(g, v): + for x in g: + k = x[0] + if k == 'P': + o = [0] * N + for i, j in enumerate(x[1]): o[j] = v[i] + v = o + elif k == 'X': v = [v[j] for j in x[1]] + elif k == 'M': v = [a * b % p for a, b in zip(v, x[1])] + elif k == 'S': v = [a * x[1] % p for a in v] + else: + c1, c2, idx = x[2], x[3], x[1] + v = [(a * c1 + v[j] * c2) % p for a, j in zip(v, idx)] + return v +cache = {} +def move(a, b, v): + if (a, b) not in cache: cache[a, b] = gates(chart(a).adjoint().then(chart(b))) + return apply(cache[a, b], v) +# control of the interpreter against the library's exact state vectors (basis 0 and 5) +def to_c(pair): return (pair[0] + pair[1] * IM) % p +for a, b in ((W['initial'][live[0]], W['final'][live[0]]), (W['initial'][live[0] + 112], W['final'][live[0] + 112])): + op = chart(a).adjoint().then(chart(b)); g = gates(op) + for basis in (0, 5): + v = [0] * N; v[basis] = 1; out = apply(g, v) + vec, den = op.zero_state(basis); scale = pow(2, p - 1 - den, p) if den else 1 + # zero_state returns the state scaled by 2^den + exp = [to_c(x) * pow(pow(2, den, p), p - 2, p) % p for x in vec] + assert out == exp, 'gate interpreter disagrees with the library state vector' +print('gate interpreter agrees with the library on 4 exact state vectors', flush=True) +rnd = random.Random(seed) +S = [[rnd.randrange(p) for _ in range(N)] if r < n else [0] * N for r in range(NR)]; inp = [s[:] for s in S[:n]] +t0 = time.time() +for e in W['program']: + op, r = e[0], e[1] + if op == 'MOVE': S[r] = move(e[2], e[3], S[r]) + elif op in ('INIT', 'CLEAR'): S[r] = [0] * N + elif op == 'SCALE': + c = fm(e[2]); S[r] = [a * c % p for a in S[r]] + else: + c = fm(e[3]); s = S[e[2]]; S[r] = [(a + c * b) % p for a, b in zip(S[r], s)] +print('replayed %d events, %d chart pairs, %.0fs' % (len(W['program']), len(cache), time.time() - t0), flush=True) +main = set(live) | {r + 112 for r in live} | set(X2) | set(Y2) +badH = sum(S[r] != move(W['initial'][r], W['final'][r], inp[r]) for r in range(n) if r not in main) +DPs = set(Hh['Dports']); al_h, be_h, de_h = fm(alpha), fm(beta), fm(1 + t); al_d, be_d, de_d = 0, 1, 1 # hosted ports (pair alpha, beta) and two-chain ports (X = x, Y = x + y) +badX = badY = 0 +for pi_, r in enumerate(live): + al, be, de = (al_d, be_d, de_d) if pi_ in DPs else (al_h, be_h, de_h) + y = r + 112; li, fu, y0, yf = W['initial'][r], W['final'][r], W['initial'][y], W['final'][y] + px = [(a + al * b) % p for a, b in zip(move(li, fu, inp[r]), move(y0, fu, inp[y]))] + py = [(be * a + de * b) % p for a, b in zip(move(li, yf, inp[r]), move(y0, yf, inp[y]))] + badX += S[r] != px; badY += S[y] != py +badX2 = badY2 = 0; al2, be2, de2 = fm(a2f), fm(b2f), fm(1 + a2f * b2f) +for x2, y2 in zip(X2, Y2): + li, fu, y0, yf = W['initial'][x2], W['final'][x2], W['initial'][y2], W['final'][y2] + px = [(a + al2 * b) % p for a, b in zip(move(li, fu, inp[x2]), move(y0, fu, inp[y2]))] + py = [(be2 * a + de2 * b) % p for a, b in zip(move(li, yf, inp[x2]), move(y0, yf, inp[y2]))] + badX2 += S[x2] != px; badY2 += S[y2] != py +print('prime %d seed %d: helper rows bad %d (of %d), X rows bad %d, Y rows bad %d, X2 rows bad %d, Y2 rows bad %d (of %d ports; %d with second mains)' % (p, seed, badH, n - len(main), badX, badY, badX2, badY2, len(live), len(X2)), flush=True) +if mutate: sys.exit(0 if (badX or badY or badX2 or badY2) else 1) +# raw main-pair identities, tableau + phase, all ports +def same(a, b): return a.tab == b.tab and all(a.zero_state(k) == b.zero_state(k) for k in (0, 1)) +bad = [0] * 6 +for r, q in zip(live, W['ports']): + y = r + 112; P = chart(W['final'][y]); Vv = chart(W['final'][r]); Z0 = chart(W['initial'][y]); a0 = chart(W['initial'][r]) + Qp = C.cgate(9, q, 1); Qm = C.cgate(9, q, -1); F = C.fourier(9); D = Qm.then(F) + mp = C.lower_child(P.adjoint().then(Qm.then(F)))[1] # free adapter on the Y output chart + ma = C.lower_child(Qp.adjoint().then(a0))[1] + bad[0] += not same(Qp.adjoint().then(Vv), D) # X->X + bad[1] += not same(Z0.adjoint().then(P).then(mp), D) # Y->Y + bad[2] += not same(Qp.adjoint().then(P).then(mp), Qm.then(D)) # X->Y = Q^-1 D + bad[3] += not same(Z0.adjoint().then(Vv), Qp.then(D)) # Y->X = Q D + bad[4] += same(Z0.adjoint().then(Vv), Qm.then(D)) # control: Q^-1 must not match + bad[5] += same(Qp.adjoint().then(P).then(mp), Qp.then(D)) # control +print('tableau on %d ports: XX!=D %d YY!=D %d YX!=Q^-1D %d XY!=QD %d | controls matching (must be 0): %d %d' % ((len(live),) + tuple(bad))) +ok = badH == 0 and badX == 0 and badY == 0 and badX2 == 0 and badY2 == 0 and bad == [0] * 6 +print('PASS_PHYSICAL' if ok else 'FAIL_PHYSICAL', '%.0fs' % (time.time() - t0)) +sys.exit(0 if ok else 1) diff --git a/research/shared-wire-split-composition/frozen/verify_host3_odd.py b/research/shared-wire-split-composition/frozen/verify_host3_odd.py new file mode 100644 index 0000000000..2117502bed --- /dev/null +++ b/research/shared-wire-split-composition/frozen/verify_host3_odd.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Per-event verifier for the hosted mixed-port native word: exact Fractions replay of every event (standard library only). +python3 -I -B verify_host3_odd.py WORD.json.gz [S] S defaults to 1; it must be 3^e 5^g (the odd certificate). +Checks: frame law for each event, public moves up and nested, owned moves nested either way (owned ascent counted and printed), ADD at a common frame, +|q|+1 < 2^16, finals, helper rank > 0, 104 literal ports, main endpoint frames, exact endpoint X = x + a y, Y = x + (1+a) y (hosted ports and two-chain ports), helpers identity, owned zero after CLEAR. +Changed against verify_host3_dyadic.py (the dyadic-alphabet verifier, same file otherwise): coefficients and SCALE units lie in A = Z[1/2, 1/3, 1/5] instead of being dyadic; +S times every prefix row and S times every pre-ADD product q * row (formed before the addition) must have dyadic entries; every public output row must be dyadic. The bound |q|+1 < 2^16 is kept. +Prints the histogram of paid moves and helpers and PASS_HOST3.""" +import gzip,json,sys +from fractions import Fraction as Q +from collections import Counter +W=json.load(gzip.open(sys.argv[1]));fr=W['frames'];n=len(W['initial']);NO=W['owned_fields'];NR=n+NO +alpha=Q(W['hosted']['alpha']);beta=Q(W['hosted']['beta']);H=W['hosted'];assert H['mode']=='mix-t0' and alpha==-1 and beta==Q(1,2) +X2=H['X2'];Y2=H['Y2'];a2=Q(H['alpha2']);DP=H['Dports'];assert a2==-1 and len(set(X2)|set(Y2))==2*len(DP)==2*len(X2) +sp=[] +for b in fr: + s={0} + for v in b: + assert 02 else 1 +def smooth(m,ps): + m=abs(m) + for p in ps: + while m%p==0:m//=p + return m==1 +def inA(q):return smooth(q.denominator,(2,3,5)) +def unitA(q):return smooth(q.denominator,(2,3,5)) and smooth(q.numerator,(2,3,5)) +def dy(v):return v.denominator&(v.denominator-1)==0 +def rowdy(row):return all(dy(S*v) for v in row.values()) +assert S>=1 and smooth(S,(3,5)) +def add(a,b,c): + for k,v in b.items(): + t=a.get(k,0)+c*v + if t:a[k]=t + else:a.pop(k,None) +for i,e in enumerate(W['program']): + op=e[0];r=e[1] + if op=='MOVE': + _,r,a,b,pv=e;assert cur[r]==a and (r>=n)==bool(pv),i + if pv: + assert sp[a]=n and r not in own,i;own.add(r);cur[r]=e[2];val[r]={} + elif op=='CLEAR':assert r in own and cur[r]==e[2],i;own.discard(r);cur[r]=None;val[r]={} + elif op=='SCALE': + q=Q(e[2]);assert cur[r]==e[3] and q!=0 and unitA(q),i + val[r]={k:v*q for k,v in val[r].items()};assert rowdy(val[r]),i + elif op in('ADD','COPY'): + s=e[2];q=Q(e[3]);f=e[4];assert cur[r]==f==cur[s] and s!=r and q!=0 and inA(q) and abs(q)+1<2**16,i + assert all(dy(S*q*v) for v in val[s].values()),i + if op=='COPY':assert r in own and not val[r],i + add(val[r],val[s],q);assert rowdy(val[r]),i + else:raise SystemExit('bad op') +assert not own and all(cur[r]==W['final'][r] for r in range(n)) +live=W['live'];X=set(live);Y={r+112 for r in live};assert len(live)==104 +X2s=dict(zip(X2,Y2));Y2s=set(Y2);assert not (X2s.keys()|Y2s)&(X|Y);dX={live[i] for i in DP} +bad=0;hel=Counter() +for r in range(n): + if r in X:ex={r:Q(1)} if r in dX else {r:Q(1),r+112:alpha} + elif r in Y:ex={r-112:Q(1),r:Q(1)} if r-112 in dX else {r-112:beta,r:1+alpha*beta} + elif r in X2s:ex={r:Q(1),X2s[r]:a2} + elif r in Y2s:ex={r:Q(1)} + else: + ex={r:Q(1)};d=len(fr[W['final'][r]])-len(fr[W['initial'][r]]);assert d>0,r;assert sp[W['initial'][r]]<=sp[W['final'][r]];hel[d]+=1 + if val[r]!=ex:bad+=1 +for r,q in zip(live,W['ports']): + assert fr[W['initial'][r]]==[q] and len(fr[W['final'][r]])==9 and len(fr[W['initial'][r+112]])==0 + assert sp[W['final'][r+112]]==frozenset(x for x in range(512) if not (x&q).bit_count()%2) +for x2,y2,r,q in zip(X2,Y2,[live[i] for i in DP],[W['ports'][i] for i in DP]): + assert W['initial'][x2]==W['initial'][r] and fr[W['initial'][x2]]==[q] and W['final'][x2]==W['final'][r] and len(fr[W['final'][x2]])==9 + assert W['initial'][y2]==W['initial'][r+112] and W['final'][y2]==W['final'][r+112] +print('events',len(W['program']),'public',n,'owned roles',NO,'paid',dict(sorted(paid.items())),'owned UP',dict(sorted(up.items())),'helpers',dict(sorted(hel.items()))) +print('endpoint bad rows',bad,'odd certificate S',S) +assert all(dy(v) for r in range(n) for v in val[r].values()),'non-dyadic public row' +assert bad==0;print('PASS_HOST3 decoupled ports',len(DP),'hosted ports',104-len(DP)) diff --git a/research/shared-wire-split-composition/full_verify.py b/research/shared-wire-split-composition/full_verify.py new file mode 100644 index 0000000000..e71fd90fcf --- /dev/null +++ b/research/shared-wire-split-composition/full_verify.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Portable independent arithmetic/operator gate plus attributed precision reuse. +Read-only unless an explicit --out result path is supplied. +""" +from pathlib import Path +from fractions import Fraction as F +import argparse,contextlib,copy,hashlib,importlib.util,io,json +HERE=Path(__file__).resolve().parent +if not __debug__:raise RuntimeError('Run without -O; assertions are proof checks.') +def module(name,filename): + s=importlib.util.spec_from_file_location(name,HERE/filename);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +I=module('independent_native','independent.py');G=module('independent_intervals','interval_gate.py');P=module('attributed_precision','precision_replay.py') +def sha(path):return hashlib.sha256(path.read_bytes()).hexdigest() +def run(wordpath,callerpath,bitpath,controls=True,precision=True): + manifest=json.loads((HERE/'INDEPENDENT-SOURCES.json').read_text()) + for item in manifest['files']:assert sha(HERE/item['path'])==item['sha256'],item['path'] + W=I.load(wordpath);C=I.load(callerpath);bit=I.load(bitpath) + assert hashlib.sha256(json.dumps(W,sort_keys=True,separators=(',',':')).encode()).hexdigest()==manifest['word_canonical_json_sha256'] + assert sha(callerpath)==next(x['sha256'] for x in manifest['files'] if x['path']=='data/caller.json') + assert sha(bitpath)==next(x['sha256'] for x in manifest['files'] if x['path']=='data/bit-admission.json') + assert F(bit['ordinary_admitted'])==F('.00385248') and F(bit['previous_ordinary'])==F('.0034') + assert bit['empty_body_targets']=={'count':0,'rank1_productive_credit':0} + assert F(manifest['numeric_BIT_price'])=n and r not in active;active.add(r);cur[r]=e[2];life+=1;peak=max(peak,len(active)-n) + elif op=='CLEAR': + assert r>=n and r in active and cur[r]==e[2];active.remove(r);del cur[r] + elif op=='MOVE': + _,r,a,b,owned=e;assert r in active and cur[r]==a and owned==(r>=n) + assert (frames[a]0;paid[rank]+=1;cur[r]=b + if owned and dim[b]>dim[a]:rises[rank]+=1 + elif op=='SCALE':assert r in active and cur[r]==e[-1] + else:assert op in ('ADD','COPY') and r in active and e[2] in active and r!=e[2] and cur[r]==cur[e[2]]==e[-1] + assert active==set(range(n)) and [cur[r] for r in range(n)]==W['final'] + # adj[r][j] is the derivative of final output j with respect to current r. + adj=[{r:F(1)} if r0:lo=mid + else:hi=mid + crossing=str((lo+hi)/2) + Ecount=sum(len(d['ports']) for d in C['types'].values() for dg in d['diagonal'] if not any(dg[2:]));Te=T.copy();Te[1]-=Ecount;lo,hi=Decimal(0),Decimal('.01') + for _ in range(200): + mid=(lo+hi)/2 + if margin(mid,Te)>0:lo=mid + else:hi=mid + nocredit=str((lo+hi)/2) + return dict(T=dict(sorted(T.items())),P=dict(sorted(P.items())),S=S,raw_crossing=crossing,empty_root_credits=Ecount,no_E_credit_crossing=nocredit) + +def ordinary(W,C,N): + # Atomic contributions are separately itemized to prevent zero-charge shortcuts. + calls=18;portsA=len(C['types']['A']['ports']);ports=sum(len(v['ports']) for v in C['types'].values()) + scalar=0;init_clear=0;odd=Counter() + for e in W['program']: + if e[0] in ('ADD','COPY','SCALE'): + q=F(e[2] if e[0]=='SCALE' else e[3]);a=abs(q.numerator);d=q.denominator + scalar+=4*(a.bit_length()+d.bit_length()+1+(a.bit_count() if e[0]!='SCALE' else 0)) + if d&(d-1):odd[e[0]]+=1 + elif e[0] in ('INIT','CLEAR'):init_clear+=2 + route_items=dict(moves=sum(N['paid'].values()),helper_boundary=2*sum(N['helpers'].values()),first_main_boundary=2*ports,second_main_boundary=2*portsA,first_main_adapter=4*ports,second_main_adapter=4*portsA,owned_lifetime=4*N['lifetimes']) + routing=1000*sum(route_items.values());rest_items={};lam=0 + def swapcost(axes):return len(set(axes)-set(range(len(axes)))) + for ty,t in C['types'].items(): + ne=sum(e[0] in (ty,'J') for e in C['events']);p=len(t['ports']);nr=t['roles'];env=32*nr*p*ne + qr=[e for e in C['events'] if e[0]==ty and e[1]=='QUERY'];idle=[e for e in C['events'] if e[0]==ty and e[1]=='IDLE_ONE'];la=sum(e[0]==ty and e[1]=='LAMBDA' for e in C['events']);lam+=la*p + output=0 + for qp,zero,*mask in t['diagonal']: + axes=([0] if qp else [])+[a for k,v in enumerate(mask) if v for a in range(9+8*k,17+8*k)] + output+=p*1000*(2*swapcost(axes)+2*bool(qp)+(qp==-1)) + idleroute=sum(2*p*1000*swapcost([a for k in e[3] for a in range(1+8*k,9+8*k)]) for e in idle) + queryroute=sum(p*1000*(2+(e[4]==-1)) for e in qr) + rest_items[ty]=dict(envelope=env,thin=16*p*len(qr),field_boundary=26*nr*p,output_routes=output,idle_routes=idleroute,query_routes=queryroute) + rest=sum(sum(d.values()) for d in rest_items.values());upper=calls*(scalar+routing)+rest;conversion=calls*len(W['initial'])*104;secondlam=lam*1000 + return dict(scalar_upper=scalar,init_clear_allowance=init_clear,route_items=route_items,routing=routing,caller_items=rest_items,caller_total=rest,raw_upper=upper,per_input_conversion=conversion,lambda_second_charge=secondlam,conservative_total=upper+conversion+secondlam,margin_to_billion=10**9-upper-conversion-secondlam,odd_divisions=dict(odd),lambda_paid_rank1_would_reduce_S_by=lam) + +def main(): + ap=argparse.ArgumentParser();ap.add_argument('word');ap.add_argument('--out',required=True);ap.add_argument('--caller',action='store_true');ap.add_argument('--mutant',type=int);ap.add_argument('--caller-path',required=True);a=ap.parse_args() + W=load(a.word);C=load(a.caller_path);start=time.time();N=native(W,a.mutant) + result=dict(schema='independent-reverse-circuit-audit/1',word=str(Path(a.word).resolve()),word_sha256=pin(a.word),caller_sha256=pin(a.caller_path),native=N) + if a.mutant is None: + result['invoice']=invoices(W,C,N);result['ordinary']=ordinary(W,C,N) + if a.caller:result['caller']=caller(C) + result['seconds']=time.time()-start;Path(a.out).write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2)) +if __name__=='__main__':main() diff --git a/research/shared-wire-split-composition/independent_construction.py b/research/shared-wire-split-composition/independent_construction.py new file mode 100644 index 0000000000..4c7025059d --- /dev/null +++ b/research/shared-wire-split-composition/independent_construction.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +"""Independent sparse checks of the composed wire and two nominated splits. +Read-only standard-library checker; complete endpoint/invoice checks are separate. +""" +from collections import Counter, defaultdict +from fractions import Fraction as Q +import argparse +import gzip +from hashlib import sha256 +import json +from pathlib import Path + + + +def need(ok, label): + if not ok: + raise ValueError(label) + + +def put(v, i, x): + if x: + v[i] = x + else: + v.pop(i, None) + + +def covector(v, events): + v = v.copy() + for e in reversed(events): + op, r = e[:2] + if op == 'MOVE': + continue + if op in ('INIT', 'CLEAR'): + v.pop(r, None) + elif op == 'SCALE': + put(v, r, v.get(r, 0) * Q(e[-2])) + else: + s = e[2] + put(v, s, v.get(s, 0) + Q(e[-2]) * v.get(r, 0)) + if op == 'COPY': + v.pop(r, None) + return v + + +def vector(v, events): + v = v.copy() + for e in events: + op, r = e[:2] + if op == 'MOVE': + continue + if op in ('INIT', 'CLEAR'): + v.pop(r, None) + elif op == 'SCALE': + put(v, r, v.get(r, 0) * Q(e[-2])) + else: + old = 0 if op == 'COPY' else v.get(r, 0) + put(v, r, old + Q(e[-2]) * v.get(e[2], 0)) + return v + + +def split(word_path, proof_path): + raw = word_path.read_bytes() + w = json.loads(gzip.decompress(raw)) + pr = json.loads(proof_path.read_text()) + a, b, c, d = ({int(k): Q(v) for k, v in pr[x].items()} for x in ['a', 'b', 'c', 'd']) + cut, f, p = (pr[x] for x in ['cut', 'frame', 'pivot']) + n = w['public'] + need(sum(v*b.get(k, 0) for k,v in a.items()) == 1, 'a.b=1') + need(sum(v*d.get(k, 0) for k,v in c.items()) == 1, 'c.d=1') + left = covector(a, w['program'][:cut+1]) + left = {r:v for r,v in left.items() if r < n} + right = vector(b, w['program'][cut+1:]) + need(left == c, 'a.P=c on all independent public inputs') + need(right == d, 'S.b=d on all outputs including owned') + cur = w['initial'] + [None] * w['owned_fields'] + for e in w['program'][:cut+1]: + if e[0] == 'MOVE': cur[e[1]] = e[3] + elif e[0] == 'INIT': cur[e[1]] = e[2] + elif e[0] == 'CLEAR': cur[e[1]] = None + need(all(r=boundary) + if z[0] in ('ADD','COPY'):z[2]+=amount*(z[2]>=boundary) + return tuple(z) + mc=Counter(shift(e,1461,16) for e in m['program']) + wc=Counter(shift(e,1459,2) for e in w['program']) + special={1452,1455,1459,1460} + touches=lambda e:any(r in special for r,k in access(e)) + wr=[e for e in (wc-mc).elements() if not touches(e)] + mr=[e for e in (mc-wc).elements() if touches(e)] + wregs={r for e in wr for r,k in access(e)} + mregs={r for e in mr for r,k in access(e)} + need(not wregs&mregs, 'retained branch-exclusive footprints disjoint') + need(all(mc[e]==wc[e] for e in mc.keys()&wc.keys()), 'shared literal multiplicity') + return {'retained_wh_only_events':len(wr),'retained_main_only_events':len(mr), + 'footprint_intersection':sorted(wregs&mregs),'shared_multiplicity_changes':0, + 'main_sha256':sha256(mw.read_bytes()).hexdigest(),'wh_sha256':sha256(ww.read_bytes()).hexdigest()} + + +def wire(build_dir): + before = json.loads(gzip.decompress((build_dir/'composed.json.gz').read_bytes())) + after = json.loads(gzip.decompress((build_dir/'extra_wire_0.json.gz').read_bytes())) + h = before['public'] + involved = [(i,e) for i,e in enumerate(after['program']) if any(r==h for r,k in access(e))] + moves = [e for i,e in involved if e[0]=='MOVE'] + adds = [(i,e) for i,e in involved if e[0]=='ADD'] + need(len(moves)==3 and len(adds)==8, 'new wire primitive counts') + ids = [after['initial'][h]]+[e[3] for e in moves] + dims = [len(after['frames'][f]) for f in ids] + def span(basis): + out={0} + for v in basis:out|={x^v for x in tuple(out)} + return out + spaces=[span(after['frames'][f]) for f in ids] + need(all(x0 + p=[F(a[i]*B,b[j]) for i in (0,1) for j in (0,1)] + return min(p).__floor__(),max(p).__ceil__() +def smul(a,q):return mul(a,exact(q)) +def atanh_log(y): + yi=exact(y);yy=mul(yi,yi);p=yi;s=(0,0) + for j in range(100):s=add(s,smul(p,F(2,2*j+1)));p=mul(p,yy) + # 0 <= tail <= 2 y^201/[201(1-y^2)] < 3*(1/3)^201. + return s[0],s[1]+ceildiv(3*B,3**201) +@lru_cache(None) +def log(r): + assert r>=1 + k=r.bit_length()-1;y=F(r-2**k,r+2**k) + a=atanh_log(y);b=atanh_log(F(1,3));return add(a,smul(b,k)) +def expminus(x): + assert 0<=x[0]<=x[1]0 and margins[str(hi)][1]<0 and margins[str(tested)][0]>0 + target=moment(T,tested);paid=moment(P,tested) + alpha=div(paid,target) + # Tail exponent = 1-tested+1/7; argument exp may not be negative. + # r^(1-tested+1/7)=r^(1-tested)* exp(log(r)/7). + def exppos(x): + assert 0<=x[0]<=x[1]0 and gap.numerator==1;step=gap.denominator + wins=lambda j:(step*j+1)**written<2**j + l,h=1,2 + while not wins(h):l,h=h,2*h + while h-l>1: + m=(l+h)//2 + if wins(m):h=m + else:l=m + assert wins(h) and not wins(h-1) + # Monotonicity: upper derivative bound on [0, cap]. + derivative=(0,0) + for rr in T.keys()|P.keys(): + c=T.get(rr,0)-P.get(rr,0);r=int(rr) + term=mul(power(r,cap if c>=0 else 0),log(r));derivative=add(derivative,smul(term,-c)) + assert derivative[1]<0 + result=dict(claim=str(claim),tested=str(tested),raw_bracket=[str(lo),str(hi)],moment_margins={k:show(v) for k,v in margins.items()},moment_margin_float={k:value(v) for k,v in margins.items()},derivative_upper=float(F(derivative[1],B)),alpha=value(alpha),gamma=value(gamma),delta=value(delta),minimum_log_power=lp,written_log_power=written,compiler_gap=str(gap),H=str(step*h),BIT_pin=str(cap),BIT_margin=str(cap-tested)) + # Outer formulas evaluated independently after algebraically substituting + # b=k+5g,a=k+4g,q=k+3g,epsilon=1-g,beta=1-3g. + k=claim;g=gap;b=k+5*g;a=k+4*g;q=k+3*g;ep=1-g;be=1-3*g;r0=g/10;stop=layout=g + sig=1-b;tau=1-a;internal=tau+(1-stop)*max(sig-tau,0);leaf=sig+stop*(1-sig);lam=1-(q+a)/2;xi=ep*(1+q)-F(3,32)+layout;key=be+1-ep + M=[ep*q,a,1-ep+q*be,1-ep+a*be,1-ep+be,F(3,32)+xi-ep,xi+F(1,2)-ep,ep,1-(ep+be+48-128+2)] + checks=[cap-a,b-a,q,b-q,a-q,stop,1-stop,(1-stop)*b-a,1-internal-q,1-leaf-q,lam-tau,lam-sig,lam-internal,1-q-lam,1-q-leaf,ep,1-ep,xi-F(1,2),ep-xi,be,ep-be,1-be,1-(2*xi-2)-r0-be,1-(2*xi-2)-be,1-ep-r0,1-ep,r0,1-key,1-be-2*(1-ep),128-48-be,layout,ep-a,F(1,32)-b,F(2**45-7**16),F(2),2-xi,F(5),1-be,1-be,1-ep,M[2]-M[0],g,k-F('.001730970419199163702738'),1-ep,F(11,2)]+[x-k for x in M] + functional=[1-be,be*(1-F(3,1000)),128-48-ep-be-1,be*(1-F(1,250))] + assert len(checks)==54 and len(functional)==4 and min(checks+functional)>0 + result['outer']=dict(strict_count=54,functional_count=4,minimum_margin=str(min(checks+functional)),BIT_just_below_effective_rejected=(a-F(1,10**12))-a<0) + # Input-lift is only needed on [1-tested_complex,1]. A stronger BIT + # pin is irrelevant to this interval; the source's crude BIT-wide bound + # is not imported beyond its valid range. + pos={7:1,3:1,5:1};neg={9:1,4:1,1:2};d1=(0,0);curvature=(0,0) + for hist,sign in ((pos,1),(neg,-1)): + for r,c in hist.items(): + d1=add(d1,smul(log(r),sign*c*r)) + curvature=add(curvature,smul(mul(log(r),log(r)),c*r)) + lift_cap=cap if cap<=F('.00376669') else tested + assert tested<=lift_cap and F(d1[1],B)+lift_cap*F(curvature[1],B)<0 + lifts={} + for price in (claim,tested): + lift=sub(moment(pos,price),moment(neg,price));assert lift[0]>0 + assert price*(-F(d1[1],B))-price*price*F(curvature[1],B)/2>0 + lifts[str(price)]=show(lift) + result['input_lift']=dict(margins=lifts,interval_kappa_cap=str(lift_cap),derivative_upper_on_required_interval=str(F(d1[1],B)+lift_cap*F(curvature[1],B)),source_BIT_wide_crude_bound_would_be=str(F(d1[1],B)+cap*F(curvature[1],B))) + return result +if __name__=='__main__': + p=argparse.ArgumentParser();p.add_argument('audit');p.add_argument('--claim',default='.00362852408');p.add_argument('--tested',default='.00362852408007');p.add_argument('--lower',default='.00362852408398727978896072723289');p.add_argument('--upper',default='.00362852408398727978896072723290');p.add_argument('--out',required=True);p.add_argument('--bit-pin',default='.00376669');a=p.parse_args() + r=gate(json.loads(Path(a.audit).read_text())['invoice'],a.claim,a.tested,a.lower,a.upper,a.bit_pin);Path(a.out).write_text(json.dumps(r,indent=2)+'\n');print(json.dumps(r,indent=2)) diff --git a/research/shared-wire-split-composition/native-accounting.json b/research/shared-wire-split-composition/native-accounting.json new file mode 100644 index 0000000000..a0941d3112 --- /dev/null +++ b/research/shared-wire-split-composition/native-accounting.json @@ -0,0 +1,196 @@ +{ + "reference_6936": { + "word": "data/main_6936.json.gz", + "events": 71144, + "public": 1461, + "helpers": { + "1": 12, + "2": 17, + "3": 44, + "4": 215, + "5": 68, + "6": 41, + "7": 14, + "8": 62, + "9": 588 + }, + "native_paid": { + "1": 4109, + "2": 878, + "3": 781, + "4": 218, + "5": 304, + "6": 15, + "7": 12, + "8": 6 + }, + "targets": { + "1": 408, + "2": 306, + "3": 792, + "4": 3870, + "5": 1224, + "6": 738, + "7": 252, + "8": 1116, + "9": 11000, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 416, + "145": 208 + }, + "paid": { + "1": 74570, + "2": 15804, + "3": 14058, + "4": 3924, + "5": 5472, + "6": 270, + "7": 216, + "8": 812, + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416 + }, + "S": 1520, + "D": "422226.718500235397388888769625971442658229816899541938410475", + "raw_crossing": "0.00362701882959514439757905558830277773513035818893404390038868", + "no_E_crossing": "0.00316585704992335559397423330881258003573155936076061556242346", + "raw_costs": { + "rest": 622809952, + "literal": 802809952, + "actual": 815970652, + "upper": 832255648, + "recharge": 844815648, + "per_input": 834990640, + "per_input_recharge": 847550640, + "lambda_jobs": 12560, + "debit": 12560000, + "per_in": 2734992, + "public": 1461 + }, + "peak_owned": 43 + }, + "new_native_old_caller": { + "word": "data/final.json.gz", + "events": 71261, + "public": 1480, + "helpers": { + "1": 13, + "2": 18, + "3": 44, + "4": 215, + "5": 68, + "6": 42, + "7": 18, + "8": 67, + "9": 595 + }, + "native_paid": { + "1": 4075, + "2": 828, + "3": 811, + "4": 241, + "5": 320, + "6": 17, + "7": 12, + "8": 6 + }, + "targets": { + "1": 426, + "2": 324, + "3": 792, + "4": 3870, + "5": 1224, + "6": 756, + "7": 324, + "8": 1206, + "9": 11126, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 416, + "145": 208 + }, + "paid": { + "1": 73958, + "2": 14904, + "3": 14598, + "4": 4338, + "5": 5760, + "6": 306, + "7": 216, + "8": 812, + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416 + }, + "S": 1520, + "D": "421882.370033337478486814532098719168624771174631720322660215", + "raw_crossing": "0.00363005817468836708593357676489689967267931333885626307827862", + "no_E_crossing": "0.00316850113289611409261738735983390747608815166410684874567346", + "raw_costs": { + "rest": 622809952, + "literal": 802809952, + "actual": 816440020, + "upper": 832744672, + "recharge": 845304672, + "per_input": 835515232, + "per_input_recharge": 848075232, + "lambda_jobs": 12560, + "debit": 12560000, + "per_in": 2770560, + "public": 1480 + }, + "peak_owned": 43 + }, + "native_targets_delta": { + "1": 1, + "2": 1, + "6": 1, + "7": 4, + "8": 5, + "9": 7 + }, + "native_paid_delta": { + "1": -34, + "2": -50, + "3": 30, + "4": 23, + "5": 16, + "6": 2 + }, + "main_events": { + "ADD": 61052, + "SCALE": 3660, + "MOVE": 6323, + "INIT": 54, + "COPY": 1, + "CLEAR": 54 + }, + "final_events": { + "ADD": 61180, + "SCALE": 3662, + "MOVE": 6310, + "INIT": 54, + "COPY": 1, + "CLEAR": 54 + } +} \ No newline at end of file diff --git a/research/shared-wire-split-composition/precision_replay.py b/research/shared-wire-split-composition/precision_replay.py new file mode 100644 index 0000000000..fafa1611dd --- /dev/null +++ b/research/shared-wire-split-composition/precision_replay.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +"""Authenticated reuse of #6970 grid and #6985 envelope engines. +Not an independently implemented precision proof. Prepared with OpenAI assistance. +""" +from pathlib import Path +from fractions import Fraction as F +import hashlib,json,sys,types +HERE=Path(__file__).resolve().parent +if not __debug__:raise RuntimeError('Run without -O; assertions are proof checks.') +def engine(name,relative,changes=()): + path=HERE/relative;src=path.read_text() + for before,after in changes: + assert src.count(before)==1;src=src.replace(before,after) + mod=types.ModuleType(name);mod.__file__=str(path);sys.modules[name]=mod;exec(compile(src,str(path),'exec'),mod.__dict__);return mod + +def run(word,caller,gate,manifest): + for item in manifest['files']: + if item['path'].startswith('retained/'): + assert hashlib.sha256((HERE/item['path']).read_bytes()).hexdigest()==item['sha256'] + G=engine('source_grid_integer','retained/odd-native-common-grid/independent_bounds.py') + B=engine('source_binding','retained/query-only-precision-envelope/source_binding.py') + helper_count=word['public']-400 + changes=[('word["public"] - len(mains) == 1061',f'word["public"] - len(mains) == {helper_count}'),('fresh_arbitrary_helpers=18 * 1061',f'fresh_arbitrary_helpers=18 * {helper_count}')] + E=engine('source_precision_envelopes','retained/query-only-precision-envelope/envelopes.py',changes) + wg=G.word_run(word);cg=G.caller_run(caller);wp,wr=E.native_envelope(word);cp,cr=E.caller_envelope(caller,wp,word) + height=max(cg['denominator_height'],cg['pre_joint_height']+wg['dyadic_height']) + mass=max(B.strict_power(F(cg['maximum_mass'])),B.strict_power(F(cg['pre_joint_mass']))+B.strict_power(F(wg['maximum_scaled_mass']))) + controls={} + for scale,frac in ((375,24),(225,24),(1125,23)): + try:G.word_run(word,scale,frac) + except ValueError as e:controls[f'S{scale}_f{frac}']=str(e) + else:raise AssertionError('Insufficient grid accepted') + H=int(gate['H']);lp=gate['written_log_power'];step=F(gate['compiler_gap']).denominator;j=H//step;kstar=1920*153**1920*(H+1)**2 + assert (H+1)**lp<2**j and (H-step+1)**lp>=2**(j-1) and (4096*kstar).bit_length() 0 and n & (n - 1) == 0, "dyadic denominator") + return n.bit_length() - 1 + + +def reduced(n, d): + g = gcd(n, d) + return str(n // g) if d // g == 1 else f"{n//g}/{d//g}" + + +def word_run(word, scale=1125, frac=24): + """Store every formal row on the *one fixed* scale*2^frac integer grid.""" + n = len(word["initial"]) + unit = 1 << frac + rows = [{i: scale * unit} for i in range(n)] + rows += [{} for _ in range(word["owned_fields"])] + frames = list(word["initial"]) + [None] * word["owned_fields"] + live = set() + peak, odd_lcm, high, visits = scale * unit, 1, 0, 0 + numerator_bits = 0 + witness = None + + def observe(row, index, kind): + nonlocal peak, odd_lcm, high, visits, witness + mass = sum(abs(value) for value in row.values()) + if mass > peak: + peak, witness = mass, (index, kind) + for value in row.values(): + if not value: + continue + odd_lcm = lcm(odd_lcm, scale // gcd(value, scale)) + trailing = (abs(value) & -abs(value)).bit_length() - 1 + high = max(high, frac - trailing) + visits += 1 + + def multiply(row, q, index): + a, b = rational(q) + result = {} + for key, value in row.items(): + quotient, residue = divmod(value * a, b) + need(residue == 0, f"integer grid rejection at event {index}: denominator {b}") + if quotient: + result[key] = quotient + return result + + for index, event in enumerate(word["program"]): + op, target = event[:2] + if op == "INIT": + need(target >= n and target not in live, "fresh owner") + live.add(target); rows[target] = {}; frames[target] = event[2] + elif op == "CLEAR": + need(target in live and frames[target] == event[2], "owner clear") + live.remove(target); rows[target] = {}; frames[target] = None + elif op == "MOVE": + need(frames[target] == event[2], "source chart") + frames[target] = event[3] + elif op == "SCALE": + need(frames[target] == event[3], "scale chart") + numerator_bits = max(numerator_bits, abs(rational(event[2])[0]).bit_length()) + rows[target] = multiply(rows[target], event[2], index) + observe(rows[target], index, "scale") + elif op in ("ADD", "COPY"): + source = event[2] + need(target != source and frames[target] == frames[source] == event[4], "common chart") + need(op != "COPY" or target in live and not rows[target], "copy zero") + numerator_bits = max(numerator_bits, abs(rational(event[3])[0]).bit_length()) + product = multiply(rows[source], event[3], index) + observe(product, index, "pre-add product") + result = rows[target].copy() + for key, value in product.items(): + result[key] = result.get(key, 0) + value + if not result[key]: + del result[key] + rows[target] = result + observe(result, index, "stored add") + else: + raise ValueError(op) + need(not live and frames[:n] == word["final"], "completed owned/frame endpoints") + need(all(value % scale == 0 for row in rows[:n] for value in row.values()), "unscaled public rows dyadic") + need(all(not row for row in rows[n:]), "private rows gone") + return dict(odd_scale_lcm=odd_lcm, dyadic_height=high, + maximum_scaled_mass=reduced(peak, unit), mass_witness=witness, + numerator_bits=numerator_bits, coefficient_visits=visits) + + +def caller_run(caller): + """Propagate all 78 positive input contributions on a common integer grid. + + Matrix entries count triangle-inequality contributions; they do not commute + Clifford words or evaluate numerical characters. The common scale only + grows and all divisions below are integer-exact after that scale change. + """ + count = caller["roles"] + rows = [[int(i == j) for j in range(count)] for i in range(count)] + debts = [0] * count + scale = 0 + maximum = pre_joint = (1, 0) + maximum_debt = joint_debt = 0 + + def larger(pair, candidate): + a, k = pair; b, ell = candidate + return candidate if (b << k) > (a << ell) else pair + + def denominator(bits): + nonlocal scale, rows + if bits: + rows = [[value << bits for value in row] for row in rows] + scale += bits + + for event in caller["events"]: + if event[0] == "J": + pre_joint = larger(pre_joint, (max(map(sum, rows)), scale)) + joint_debt = max(joint_debt, *debts) + s, t, x, y = event[2] + bs, bt, alpha, beta = event[3] + need(len({s, t, x, y, bs, bt}) == 6, "joint owner separation") + need(rational(alpha) == (-1, 1) and rational(beta) == (1, 2), "actual B pair") + a, b = rational(caller["types"]["A"]["alpha2"]) + need(b == 1, "actual A integer shear") + denominator(1) + rows[t] = [u + v for u, v in zip(rows[t], rows[s])] + rows[x] = [u + abs(a) * v for u, v in zip(rows[x], rows[y])] + combo = [u + v for u, v in zip(rows[bs], rows[bt])] + need(all(v % 2 == 0 for v in combo), "B integer halving") + rows[bs], rows[bt] = combo, [v // 2 for v in combo] + debts[t], debts[x] = max(debts[t], debts[s]), max(debts[x], debts[y]) + newdebt = max(debts[bs], debts[bt]) + debts[bs], debts[bt] = newdebt, newdebt + 1 + else: + op, t = event[1:3] + if op in ("ADD", "SCALE"): + a, b = rational(event[4] if op == "ADD" else event[3]) + k = height(b); denominator(k) + if op == "ADD": + source = event[3] + need(all(abs(a) * v % b == 0 for v in rows[source]), "ADD integer grid") + rows[t] = [u + abs(a) * v // b for u, v in zip(rows[t], rows[source])] + debts[t] = max(debts[t], debts[source] + k) + else: + need(all(abs(a) * v % b == 0 for v in rows[t]), "SCALE integer grid") + rows[t] = [abs(a) * v // b for v in rows[t]] + debts[t] += k + elif op == "QUERY": + source = event[3] + rows[t] = [u + v for u, v in zip(rows[t], rows[source])] + debts[t] = max(debts[t], debts[source]) + elif op == "SWAP": + source = event[3] + rows[t], rows[source] = rows[source], rows[t] + debts[t], debts[source] = debts[source], debts[t] + elif op == "LAMBDA": + rows[t] = [2 * v for v in rows[t]] + debts[t] += 1 + elif op != "IDLE_ONE": + raise ValueError(op) + maximum = larger(maximum, (max(map(sum, rows)), scale)) + maximum_debt = max(maximum_debt, *debts) + return dict(maximum_mass=reduced(maximum[0], 1 << maximum[1]), + pre_joint_mass=reduced(pre_joint[0], 1 << pre_joint[1]), + denominator_height=maximum_debt, pre_joint_height=joint_debt) + + +def threshold_run(): + """Read source literals by AST and regenerate the threshold by integers.""" + check = SOURCE.parent / "check.py" + nodes = ast.parse(check.read_text()).body + values = {} + for node in nodes: + if not isinstance(node, ast.Assign) or len(node.targets) != 1: + continue + target = node.targets[0] + if isinstance(target, ast.Tuple) and all(isinstance(x, ast.Name) for x in target.elts): + names = [x.id for x in target.elts] + if names == ["KAPPA", "TESTED"]: + for name, value in zip(names, node.value.elts): + need(isinstance(value, ast.Call) and isinstance(value.args[0], ast.Constant), "price source literal") + digits = value.args[0].value + before, after = digits.split(".") + values[name] = (int((before or "0") + after), 10 ** len(after)) + elif names == ["LPMIN", "LP"]: + values["LP"] = node.value.elts[1].value + a, b = values["KAPPA"] + c, d = values["TESTED"] + numerator, denominator = c*b-a*d, 7*b*d + common = gcd(numerator, denominator) + need(numerator // common == 1, "unit exact source gap") + step = denominator // common + power = values["LP"] + def wins(j): + return pow(step*j+1, power) < 1 << j + lo, hi = 1, 2 + while not wins(hi): + lo, hi = hi, hi*2 + while hi-lo > 1: + mid = (hi+lo)//2 + if wins(mid): + hi = mid + else: + lo = mid + h = step*hi + need(wins(hi) and not wins(hi-1), "threshold neighbors") + kstar = 1920*pow(153, 1920)*pow(h+1, 2) + need(h == 1339210000000000000 and kstar.bit_length() == 14066 + and (357*kstar).bit_length() == 14075 < h, "symbolic threshold margin") + return {"H": h, "integer_threshold_index": hi, "gap_denominator": step, + "logarithm_power": power, "Kstar_bits": kstar.bit_length(), + "357Kstar_bits": (357*kstar).bit_length(), + "source_check_sha256": sha256(check.read_bytes()).hexdigest()} + + +def main(): + word = json.loads(gzip.decompress((SOURCE / "word.json.gz").read_bytes())) + caller = json.loads((SOURCE / "caller.json").read_text()) + result = {"source_sha256": {n: sha256((SOURCE/n).read_bytes()).hexdigest() + for n in ("word.json.gz", "caller.json")}, + "word": word_run(word), "caller": caller_run(caller), "negative_scales": {}} + for scale in (375, 225): + try: + word_run(word, scale=scale) + except ValueError as error: + result["negative_scales"][str(scale)] = str(error) + else: + raise ValueError("insufficient odd scale was accepted") + expected = json.loads((ROOT / "EXPECTED-BOUNDS.json").read_text()) + for key in ("dyadic_height", "maximum_scaled_mass", "coefficient_visits"): + need(result["word"][key] == expected["word"][key], "independent word agreement: " + key) + need(result["word"]["odd_scale_lcm"] == 1125, "minimal source-derived scale") + need(result["word"]["numerator_bits"] == 24, "literal numerator width") + for key in ("maximum_mass", "denominator_height", "pre_joint_height"): + need(result["caller"][key] == expected["caller"][key], "independent caller agreement: " + key) + result["threshold"] = threshold_run() + print(json.dumps(result, sort_keys=True, indent=2)) + print("PASS_INDEPENDENT_ODD_GRID_BOUNDS") + + +if __name__ == "__main__": + main() diff --git a/research/shared-wire-split-composition/retained/query-only-precision-envelope/envelopes.py b/research/shared-wire-split-composition/retained/query-only-precision-envelope/envelopes.py new file mode 100644 index 0000000000..70c8ca2376 --- /dev/null +++ b/research/shared-wire-split-composition/retained/query-only-precision-envelope/envelopes.py @@ -0,0 +1,294 @@ +"""Exact positive forward envelopes with independent backward cut checks. + +These are scalar triangle bounds under the stated complete-fibre unitary +contracts. They neither simulate rounding nor establish native provider admission. +Prepared for @CubeJerry with substantial OpenAI assistance. Apache-2.0. +""" +from collections import Counter +from fractions import Fraction as F +from source_binding import need, sources, strict_power, fraction_string, oddpart + + +def frame_span(basis): + s = {0} + for v in basis: + need(isinstance(v, int) and 0 < v < 512 and v not in s, "independent frame basis") + s |= {u ^ v for u in tuple(s)} + return frozenset(s) + + +def validate_word(word): + n, owned_count = word["public"], word["owned_fields"] + need(n == len(word["initial"]) == len(word["final"]), "public frame lists") + spans = list(map(frame_span, word["frames"])) + cur = list(word["initial"]) + [None] * owned_count + owned, zero = set(), set(range(n, n + owned_count)) + life = peak = 0 + counts = Counter() + scalar = Counter() + max_num = max_den = 0 + for i, e in enumerate(word["program"]): + op, r = e[:2] + need(0 <= r < len(cur), "word role at " + str(i)) + counts[op] += 1 + if op == "INIT": + need(len(e) == 3 and r >= n and r not in owned and cur[r] is None, + "fresh owned INIT at " + str(i)) + need(0 <= e[2] < len(spans), "INIT frame") + owned.add(r); zero.add(r); cur[r] = e[2] + life += 1; peak = max(peak, len(owned)) + elif op == "CLEAR": + need(len(e) == 3 and r in owned and cur[r] == e[2], "owned CLEAR") + owned.remove(r); zero.add(r); cur[r] = None + elif op == "MOVE": + _, _, a, b, private = e + need(cur[r] == a and bool(private) == (r in owned), "MOVE source/owner") + need(0 <= b < len(spans), "MOVE destination") + need((spans[a] < spans[b] or spans[b] < spans[a]) if private + else spans[a] < spans[b], "strict source frame nesting") + cur[r] = b + # A rounded child need not preserve exact zero. + zero.discard(r) + else: + need(op in ("ADD", "COPY", "SCALE"), "known native operation") + q = F(e[2] if op == "SCALE" else e[3]) + need(q and abs(q) + 1 < 2 ** 16, "nonzero bounded source coefficient") + need(cur[r] == e[-1] and cur[r] is not None, "scalar live frame") + if op != "SCALE": + s = e[2] + need(0 <= s < len(cur) and s != r and cur[s] == cur[r], "same-frame source") + if op == "COPY": + need(r in owned and r in zero, "COPY into freshly exact zero") + zero.discard(r) + max_num = max(max_num, abs(q.numerator)) + max_den = max(max_den, q.denominator) + scalar["noninteger" if q.denominator > 1 else "integer"] += 1 + scalar["odd" if oddpart(q.denominator) > 1 else "dyadic"] += 1 + need(not owned and cur[:n] == word["final"], "all owned returned; declared final frames") + need((life, peak, owned_count) == (54, 43, 51), "source lifecycle census") + return dict(events=len(word["program"]), public=n, owned_labels=owned_count, + lifetimes=life, peak_owned=peak, opcodes=dict(counts), scalars=dict(scalar), + max_numerator=max_num, numerator_bits=max_num.bit_length(), + max_denominator=max_den, denominator_bits=max_den.bit_length()) + + +def summarize(values): + return {k: {"exact": fraction_string(v[0]), "strict_power_of_two": strict_power(v[0]), + "witness": v[1]} for k, v in values.items()} + + +def native_envelope(word): + census = validate_word(word) + n, size = word["public"], word["public"] + word["owned_fields"] + mass = [F(i < n) for i in range(size)] + error = [F(0) for _ in range(size)] + peaks = {"M": (F(1), {"cut": 0, "register": 0, "factor": "1"}), + "Sigma": (F(0), {"cut": 0, "register": 0, "factor": "1"})} + + def note(name, value, cut, register, factor=F(1), kind="stored"): + if value > peaks[name][0]: + peaks[name] = (value, dict(cut=cut, register=register, + factor=str(factor), kind=kind)) + + for i, e in enumerate(word["program"]): + op, r = e[:2] + if op == "MOVE": + error[r] += 1 + elif op in ("INIT", "CLEAR"): + mass[r] = error[r] = F(0) + else: + q = abs(F(e[2] if op == "SCALE" else e[3])) + if op == "SCALE": + mass[r] *= q; error[r] *= q + else: + s = e[2] + note("M", q * mass[s], i, s, q, "pre-add-product") + note("Sigma", q * error[s], i, s, q, "pre-add-product") + mass[r] += q * mass[s]; error[r] += q * error[s] + if q.denominator > 1: + error[r] += 1 + note("M", mass[r], i + 1, r) + note("Sigma", error[r], i + 1, r) + r = max(range(n), key=error.__getitem__) + peaks["Gamma"] = (error[r], dict(cut=len(word["program"]), register=r, factor="1", kind="public-return")) + checks = {} + for name, (value, witness) in peaks.items(): + m, d, active = native_adjoint(word, witness) + need((m if name == "M" else d) == value, "backward native witness: " + name) + checks[name] = dict(entrance_mass=str(m), residual_mass=str(d), active_residual_sites=active) + return peaks, dict(census=census, bounds=summarize(peaks), independent_adjoint=checks) + + +def native_adjoint(word, witness): + """Transpose recurrence from one cut, not a second forward-state run.""" + size = word["public"] + word["owned_fields"] + lam = [F(0) for _ in range(size)] + lam[witness["register"]] = F(witness["factor"]) + residual, active = F(0), 0 + for e in reversed(word["program"][:witness["cut"]]): + op, r = e[:2] + if op in ("INIT", "CLEAR"): + lam[r] = F(0) + elif op == "MOVE": + residual += lam[r]; active += bool(lam[r]) + else: + q = abs(F(e[2] if op == "SCALE" else e[3])) + if q.denominator > 1: + residual += lam[r]; active += bool(lam[r]) + if op == "SCALE": + lam[r] *= q + else: + lam[e[2]] += q * lam[r] + return sum(lam[:word["public"]]), residual, active + + +def caller_envelope(caller, word_peaks, word): + """Contract J only at its proved exact endpoint; include each native interior.""" + mw, sw, gw = (word_peaks[k][0] for k in ("M", "Sigma", "Gamma")) + size = caller["roles"] + mass, error = [F(1)] * size, [F(0)] * size + peaks = {"M_caller": (F(1), {}), "Sigma_caller": (F(0), {}), + "M_joint_entrance": (F(1), {}), "E_joint_entrance": (F(0), {}), + "M_context": (F(1), {}), "Sigma_context": (F(0), {})} + sites = Counter() + j_order = [] + log = [] + + def note(name, value, i, r=None, *, cut=None, factor=F(1), kind="stored"): + if value > peaks[name][0]: + peaks[name] = (value, dict(event=i, register=r, cut=i + 1 if cut is None else cut, + factor=str(factor), kind=kind)) + + for i, e in enumerate(caller["events"]): + ty = e[0] + if ty == "J": + _, j, ar, br = e + need(len(ar) == 4 and len(br) == 4 and br[2:] == ["-1", "1/2"], "exact J source signature") + u, v, x, y = ar; s, t = br[:2] + regs = (u, v, x, y, s, t) + need(len(set(regs)) == 6 and all(0 <= r < size for r in regs), "six distinct J roles") + need(all(0 <= r < 38 for r in ar) and all(38 <= r < 76 for r in br[:2]), + "current type-local J main binding") + mi, ei = max([F(1)] + [mass[r] for r in regs]), max(error[r] for r in regs) + mr, er = max(regs, key=mass.__getitem__), max(regs, key=error.__getitem__) + note("M_joint_entrance", mi, i, mr, cut=i) + note("E_joint_entrance", ei, i, er, cut=i) + note("M_context", mw * mi, i) + note("Sigma_context", mw * ei + sw, i) + # Each stage's 1,061 arbitrary public helper inputs are distinct raw + # inputs, not zero; their initial bound is 1 and prior defect is 0. + out_m = (mass[u], mass[v] + mass[u], mass[x] + mass[y], mass[y], + mass[s] + mass[t], (mass[s] + mass[t]) / 2) + out_e = (error[u], error[v] + error[u], error[x] + error[y], error[y], + error[s] + error[t], (error[s] + error[t]) / 2) + for r, a, b in zip(regs, out_m, out_e): + mass[r], error[r] = a, b + gw + j_order.append(j); sites["J"] += 1 + log.append(dict(event=i, stage=j, entrance_mass=str(mi), entrance_defect=str(ei))) + else: + need(ty in ("A", "B"), "known caller type") + op, r = e[1:3] + off = caller["types"][ty]["offset"] + count = caller["types"][ty]["roles"] + need(off <= r < off + count, "type-local target") + sites[op] += 1 + if op == "SWAP": + s = e[3] + need(off <= s < off + count and s != r, "type-local SWAP") + mass[r], mass[s] = mass[s], mass[r] + error[r], error[s] = error[s], error[r] + elif op in ("LAMBDA", "IDLE_ONE"): + if op == "LAMBDA": + need(e[3] in (-1, 1), "unit Lambda sign") + else: + need(len(e[3]) == len(set(e[3])) and all(1 <= k <= 18 for k in e[3]), "idle mask") + error[r] += 1 + elif op == "QUERY": + s = e[3] + need(off <= s < off + count and s != r and e[4] == -1, "retained negative query") + mass[r] += mass[s]; error[r] += error[s] + 1 + elif op == "ADD": + s, q = e[3], abs(F(e[4])) + need(off <= s < off + count and r != s and q, "type-local ADD") + note("M_caller", q * mass[s], i, s, cut=i, factor=q, kind="pre-add-product") + note("Sigma_caller", q * error[s], i, s, cut=i, factor=q, kind="pre-add-product") + mass[r] += q * mass[s]; error[r] += q * error[s] + (q.denominator > 1) + sites["noninteger_scalar"] += q.denominator > 1 + elif op == "SCALE": + q = abs(F(e[3])); need(q, "nonzero caller SCALE") + mass[r] *= q; error[r] = q * error[r] + (q.denominator > 1) + sites["noninteger_scalar"] += q.denominator > 1 + else: + raise ValueError("non-retained caller opcode: " + str(op)) + for r in range(size): + note("M_caller", mass[r], i, r) + note("Sigma_caller", error[r], i, r) + need(j_order == list(range(1, 19)), "exact eighteen native calls") + # Completed helper outputs have ideal norm <=1 and defect <=gw; maximum + # over independent helper fields does not multiply by 1,061 or by 18. + peaks["M_context"] = max(peaks["M_context"], peaks["M_caller"], key=lambda a: a[0]) + peaks["Sigma_context"] = max(peaks["Sigma_context"], peaks["Sigma_caller"], key=lambda a: a[0]) + ri = max(range(size), key=error.__getitem__) + need(error[ri] >= gw, "main output dominates helper-return defect in this source") + peaks["Gamma_context"] = (error[ri], dict(register=ri, cut=len(caller["events"]), factor="1", kind="public-return")) + need(len(caller["types"]["A"]["ports"]) == 96 and len(caller["types"]["B"]["ports"]) == 8, + "current physical type multiplicities") + mains = set(word["live"]) | {r + 112 for r in word["live"]} | set(word["hosted"]["X2"]) | set(word["hosted"]["Y2"]) + need(len(mains) == 400 and word["public"] - len(mains) == 1061, "fresh per-stage helper census") + adjoints = {} + for name in ("M_caller", "Sigma_caller", "M_joint_entrance", "E_joint_entrance", "Gamma_context"): + value, witness = peaks[name] + m, d, j_part, primitive_part = caller_adjoint(caller, witness, gw) + need((m if name.startswith("M_") else d) == value, "backward caller witness: " + name) + adjoints[name] = dict(entrance_mass=str(m), residual_mass=str(d), + joint_coefficient=str(j_part), primitive_coefficient=str(primitive_part)) + return peaks, dict(bounds=summarize(peaks), sites=dict(sites), joint_entries=log, + independent_adjoint=adjoints, + physical_main_inputs=3952, fresh_arbitrary_helpers=18 * 1061, + helper_allocation_premise="distinct (stage, helper) public inputs as in frozen caller proof") + + +def caller_adjoint(caller, witness, gamma_word): + lam = [F(0)] * caller["roles"] + lam[witness["register"]] = F(witness["factor"]) + joint, primitive = F(0), F(0) + for e in reversed(caller["events"][:witness["cut"]]): + if e[0] == "J": + u, v, x, y = e[2]; s, t = e[3][:2] + joint += sum(lam[r] for r in (u, v, x, y, s, t)) + a, b = lam[s], lam[t] + lam[u] += lam[v] + lam[y] += lam[x] + lam[s] = lam[t] = a + b / 2 + continue + op, r = e[1:3] + if op == "SWAP": + s = e[3]; lam[r], lam[s] = lam[s], lam[r] + elif op in ("LAMBDA", "IDLE_ONE"): + primitive += lam[r] + elif op == "QUERY": + primitive += lam[r]; lam[e[3]] += lam[r] + else: + q = abs(F(e[3] if op == "SCALE" else e[4])) + if q.denominator > 1: + primitive += lam[r] + if op == "SCALE": + lam[r] *= q + else: + lam[e[3]] += q * lam[r] + return sum(lam), joint * gamma_word + primitive, joint, primitive + + +def run(): + caller, word = sources() + wp, wr = native_envelope(word) + cp, cr = caller_envelope(caller, wp, word) + expected_w = {"M": 237, "Sigma": 235, "Gamma": 235} + expected_c = {"M_caller": 121, "Sigma_caller": 342, "M_joint_entrance": 119, + "E_joint_entrance": 340, "M_context": 355, "Sigma_context": 576, + "Gamma_context": 337} + for k, p in expected_w.items(): + need(strict_power(wp[k][0]) == p, "frozen native bound " + k) + for k, p in expected_c.items(): + need(strict_power(cp[k][0]) == p, "frozen caller bound " + k) + return dict(native=wr, caller=cr) diff --git a/research/shared-wire-split-composition/retained/query-only-precision-envelope/source_binding.py b/research/shared-wire-split-composition/retained/query-only-precision-envelope/source_binding.py new file mode 100644 index 0000000000..9f0e0a8cba --- /dev/null +++ b/research/shared-wire-split-composition/retained/query-only-precision-envelope/source_binding.py @@ -0,0 +1,85 @@ +"""Authenticate the frozen source capsule; no network or Git is required. + +Prepared for @CubeJerry with substantial OpenAI assistance. Apache-2.0. +""" +from fractions import Fraction +import gzip +import hashlib +import json +from pathlib import Path +import sys +import types + +ROOT = Path(__file__).resolve().parent + + +def need(ok, message): + if not ok: + raise ValueError(message) + + +def digest(data): + return hashlib.sha256(data).hexdigest() + + +def blob(data): + return hashlib.sha1(b"blob " + str(len(data)).encode() + b"\0" + data).hexdigest() + + +def check_dependencies(): + items = json.loads((ROOT / "DEPENDENCIES.json").read_bytes())["files"] + need(len(items) == 11, "exact eleven-file immutable capsule") + seen = set() + for row in items: + name = row["local_path"] + path = ROOT / name + need(name not in seen and path.resolve().is_relative_to(ROOT), "capsule path") + seen.add(name) + data = path.read_bytes() + need(len(data) == row["bytes"], "source length: " + name) + need(digest(data) == row["sha256"], "source SHA-256: " + name) + need(blob(data) == row["git_blob"], "source Git blob: " + name) + return len(items) + + +def sources(): + check_dependencies() + caller = json.loads((ROOT / "data/caller.json").read_bytes()) + word = json.loads(gzip.decompress((ROOT / "data/word.json.gz").read_bytes())) + need(len(caller["events"]) == 3095 and caller["roles"] == 76, "frozen caller shape") + need(len(word["program"]) == 71144 and word["public"] == 1461, "frozen local word") + return caller, word + + +def load_vendor(name, relative): + """Compile authenticated bytes directly, never a cached .pyc.""" + check_dependencies() + path = ROOT / relative + module = types.ModuleType(name) + module.__file__ = str(path) + sys.modules[name] = module + exec(compile(path.read_bytes(), str(path), "exec"), module.__dict__) + return module + + +def fraction_string(x): + return str(Fraction(x)) + + +def strict_power(x): + """Smallest nonnegative k for which the exact nonnegative x is < 2**k.""" + x = Fraction(x) + need(x >= 0, "positive majorant") + k = max(0, x.numerator.bit_length() - x.denominator.bit_length()) + while x >= 1 << k: + k += 1 + while k and x < 1 << (k - 1): + k -= 1 + return k + + +def oddpart(n): + need(n > 0, "positive denominator") + while n % 2 == 0: + n //= 2 + return n diff --git a/research/shared-wire-split-composition/split_build.py b/research/shared-wire-split-composition/split_build.py new file mode 100644 index 0000000000..5ac9b60a6f --- /dev/null +++ b/research/shared-wire-split-composition/split_build.py @@ -0,0 +1,90 @@ +import json,gzip,collections,pathlib,sys,time,copy +from fractions import Fraction as Q +ROOT=pathlib.Path(__file__).resolve().parent/'build';P=1000000007 + +def add(a,b,q): + for k,v in b.items(): + x=a.get(k,0)+q*v + if x:a[k]=x + else:a.pop(k,None) +def pure(rows,roles,group): + piv={};out=[] + for role in roles: + outside={k:v for k,v in rows[role].items()if k not in group};inside={k:v for k,v in rows[role].items()if k in group};co={role:Q(1)} + while outside: + pivot=min(outside) + if pivot not in piv: + s=1/outside[pivot];piv[pivot]=[{k:v*s for k,v in z.items()}for z in(outside,inside,co)];break + s=-outside[pivot] + for a,b in zip((outside,inside,co),piv[pivot]):add(a,b,s) + if not outside and inside:out.append((inside,co)) + return out + +def exact_hit(w,cut,frame,pivot): + n=w['public'];N=n+w['owned_fields'];group={r for r in range(n)if w['initial'][r]==3 and w['final'][r]==127};rows=[{r:Q(1)}if r=n) + z[1]=rr(z[1]) + if z[0]in('ADD','COPY'):z[2]=rr(z[2]) + return z + prog=inverse(B0)+[transform(e)for e in w['program'][:cut+1]]+BC+[transform(e,True)for e in inverse(BC)]+[transform(e,True)for e in w['program'][cut+1:]]+[transform(e,True)for e in BF] + z=copy.deepcopy(w);z['initial'].append(frame);z['final'].append(w['final'][pivot]);z['final'][pivot]=frame;z['public']+=1;z['program']=prog + proof={'cut':cut,'frame':frame,'pivot':pivot,'a':a,'b':b,'c':c,'d':d,'B0':B0,'BF':BF,'BC':BC} + return z,proof +if __name__=='__main__': + path,cut,frame,piv,name=sys.argv[1:];w=json.load(gzip.open(path));z,p=build(w,int(cut),int(frame),int(piv)) + with gzip.open(ROOT/f'{name}.json.gz','wt')as f:json.dump(z,f,separators=(',',':')) + (ROOT/f'{name}.proof.json').write_text(json.dumps(p,default=str,indent=2)) diff --git a/research/shared-wire-split-composition/verify.py b/research/shared-wire-split-composition/verify.py new file mode 100644 index 0000000000..022f5841a0 --- /dev/null +++ b/research/shared-wire-split-composition/verify.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +from pathlib import Path +import subprocess,sys +HERE=Path(__file__).resolve().parent +if not __debug__:raise RuntimeError('Run without -O; assertions are proof checks.') +subprocess.run([sys.executable,'-B',str(HERE/'reproduce.py')],check=True) +subprocess.run([sys.executable,'-I','-B',str(HERE/'frozen/verify_host3_odd.py'),str(HERE/'data/final.json.gz'),'1125'],check=True) +subprocess.run([sys.executable,'-B',str(HERE/'chart_delta.py'),str(HERE/'data/final.json.gz')],check=True) +print('PASS_SHARED_WIRE_SPLIT_NATIVE')