diff --git a/research/complex-571-hpe46-validation/RECEIPT.json b/research/complex-571-hpe46-validation/RECEIPT.json new file mode 100644 index 0000000000..d1f318ac5b --- /dev/null +++ b/research/complex-571-hpe46-validation/RECEIPT.json @@ -0,0 +1,233 @@ +{ + "status": "PASS_HPE46_NATIVE_COMPLEX_AND_CITED_BIT", + "steps": [ + { + "name": "atm3-step0-promote-construction", + "exit_code": 0, + "seconds": 0.285, + "log_sha256": "3096b12dfabe0f2e410132d888fdd9c8c9b81d62578c92440e19482481aa64a3" + }, + { + "name": "ck-step0-greedy_kernels-construction", + "exit_code": 0, + "seconds": 3.151, + "log_sha256": "23ca231febd30ee092f617f0506d120c01e421bc3c814ba82b11d912c7f15869" + }, + { + "name": "atm3-step1-greedy_kernels-construction", + "exit_code": 0, + "seconds": 3.129, + "log_sha256": "40511901fa6d6da38cb7fc1b2fcc538d1e6daf7e487738b5baeced3ceee93959" + }, + { + "name": "ck-step0-greedy_kernels-omissions", + "exit_code": 0, + "seconds": 10.704, + "log_sha256": "e57622df5f252d2027d1c92e3fa8aae67d5db2a4318df110fcc8d9db99c0a2b3" + }, + { + "name": "atm3-step1-greedy_kernels-omissions", + "exit_code": 0, + "seconds": 10.597, + "log_sha256": "e57622df5f252d2027d1c92e3fa8aae67d5db2a4318df110fcc8d9db99c0a2b3" + }, + { + "name": "ck-step1-frame_coalesce-construction", + "exit_code": 0, + "seconds": 1.438, + "log_sha256": "3d2d67cbd82dd5b79c3cfea987b31bcc6a16283c68c6b13b9801e009cc94e09c" + }, + { + "name": "atm3-step2-frame_coalesce-construction", + "exit_code": 0, + "seconds": 1.423, + "log_sha256": "a04d41205fca28d21c490b4b103d74c1e000ec7f72cb07138ed92fb514db9fba" + }, + { + "name": "ck-step2-gate_move_coalesce-construction", + "exit_code": 0, + "seconds": 1.003, + "log_sha256": "0ebcf2ca688428a23e0ad3e734b35dd9004972405ca1cca679663e42df96b032" + }, + { + "name": "atm3-step3-gate_move_coalesce-construction", + "exit_code": 0, + "seconds": 0.994, + "log_sha256": "e9b4318629d9418901f9dee885dae2f4d01c5eac0b60eb9f9ddefe6afec2e4b8" + }, + { + "name": "ck-step3-hyperplane_end_closure-construction", + "exit_code": 0, + "seconds": 0.814, + "log_sha256": "f7593b6f22bf5b11af833df0da347ad803a81387c9848c6fac42bb168303b604" + }, + { + "name": "atm3-step4-hyperplane_end_closure-construction", + "exit_code": 0, + "seconds": 0.788, + "log_sha256": "267f28865f42aac6cee0ea0db06aacbb871fbf0a4d673fb002ee5265c598700e" + }, + { + "name": "ck-step3-hyperplane_end_closure-controls", + "exit_code": 0, + "seconds": 2.868, + "log_sha256": "2671d20e7156f736da85479280659ef7bc6d4f5706c54bb7390c615abd11dd20" + }, + { + "name": "atm3-step4-hyperplane_end_closure-controls", + "exit_code": 0, + "seconds": 2.898, + "log_sha256": "8ef457b52be65f7d0d22622910cc2f5c54619aa37a741b433aef1450c3676771" + }, + { + "name": "ck-all-columns-native-frames", + "exit_code": 0, + "seconds": 0.52, + "log_sha256": "e227047eb984e90bdf7864de094800c16eabefa1ea233c4270257956948e54f9" + }, + { + "name": "atm3-all-columns-native-frames", + "exit_code": 0, + "seconds": 0.494, + "log_sha256": "d4a271ce1232e02c7281d0b22fe2918ad5b2aac2ac8293ea38085afaefe3a504" + }, + { + "name": "ck-both-reflected-ledgers", + "exit_code": 0, + "seconds": 0.447, + "log_sha256": "7d6afaf527135961259f82ef6cbe828622d75f4702a342862d47768cfbeab9f3" + }, + { + "name": "atm3-both-reflected-ledgers", + "exit_code": 0, + "seconds": 0.44, + "log_sha256": "7d6afaf527135961259f82ef6cbe828622d75f4702a342862d47768cfbeab9f3" + }, + { + "name": "ck-independent-local-controls", + "exit_code": 0, + "seconds": 2.314, + "log_sha256": "924775067c1dfcef0582821a7572c9e09325185404ab43932573103785756ac5" + }, + { + "name": "atm3-independent-local-controls", + "exit_code": 0, + "seconds": 2.282, + "log_sha256": "924775067c1dfcef0582821a7572c9e09325185404ab43932573103785756ac5" + }, + { + "name": "ck-normalized-wrappers", + "exit_code": 0, + "seconds": 1.695, + "log_sha256": "441a31921029994015132274553de23363948d563f97a0187018df64c4875a03" + }, + { + "name": "atm3-normalized-wrappers", + "exit_code": 0, + "seconds": 1.687, + "log_sha256": "441a31921029994015132274553de23363948d563f97a0187018df64c4875a03" + }, + { + "name": "atm3-all-phase-edges", + "exit_code": 0, + "seconds": 105.257, + "log_sha256": "7de5d6f7533ecdb59b6ae6ba3963417bf5bda9fd595b0c07780833fd78541e83" + }, + { + "name": "ck-all-phase-edges", + "exit_code": 0, + "seconds": 105.476, + "log_sha256": "3699e6eeaa4cd93a07f1aae40eb45a291d34a5490741f2581c4046aab59c867f" + }, + { + "name": "bind-providers", + "exit_code": 0, + "seconds": 0.247, + "log_sha256": "71f679ce5a123fb58397fd6852ba64ce3832fd20e81a096bfda9a1cf3237237a" + }, + { + "name": "emit-controller", + "exit_code": 0, + "seconds": 1.993, + "log_sha256": "3e6397443c3d535bc17b4bf377925b5cf6c08d6384cb169ca57193edcd791fc5" + }, + { + "name": "independent-controller-and-controls", + "exit_code": 0, + "seconds": 7.844, + "log_sha256": "7967cafb39b35b15dccb4b7438188b5b07320a159b67293f3f88704c7d7cb868" + }, + { + "name": "fresh-invoice", + "exit_code": 0, + "seconds": 0.551, + "log_sha256": "7ebde097ad33f7755e4b6b39ad67c1d76016525f19d1cde46d631c049a2e8c4d" + }, + { + "name": "conservative-and-native-exact-assembly", + "exit_code": 0, + "seconds": 0.233, + "log_sha256": "1fd54d0e7fa2e08c22d62bdaa0f084d607e9921fc4999911de935143665ba526" + }, + { + "name": "admission-controls", + "exit_code": 0, + "seconds": 0.296, + "log_sha256": "40f0c35552fb10f02288ae8d2c6b9f902050fb370c0a19b7b88c977d0d44dab1" + }, + { + "name": "phase-timing-portability-controls", + "exit_code": 0, + "seconds": 0.659, + "log_sha256": "d4300a182a615922dd73ff2b945ff671086b86d5b80dbc009539e96d9b4dfe82" + }, + { + "name": "actual-recompression-and-rebound-controls", + "exit_code": 0, + "seconds": 2.344, + "log_sha256": "9c20730203542b9a5ed97e1ce2e2c51526e88de0b2983d4f15d7e550b8ed02ea" + } + ], + "artifacts": { + "PHASE-TIMING-CONTROLS.json": "372047bbe054965de3783f66d717ff5adbc6625f829ec10701881df1f35e2eff", + "GENERATED-IDENTITY-CONTROLS.json": "954b57f9f142de11587903466e8efef8f8417dc5a3e7669ce7f70b6ab84de120", + "mixed-global/audit/IDLE-REMAINDER-FRAMES.json": "0a26a65598fae466524065f9fd433537b04a90ceb06f983a4e6a155569cfe34c", + "RESULT.json": "1cf7bcb67f119cdcba02c0b8a3c01bcc78c5616b0042a8e1e4bd0b5ccb6d2a4b", + "ASSEMBLY.json": "50abe7c27f93f173601a371a2074c06e39e6bd6ae3eadc87091f5e0c0938d89f", + "ASSEMBLY-CONTROLS.json": "4f64158ca940d855c11e0a4fe69307282b9ff4259a5e4a07f65fa227adf39253", + "mixed-global/BINDING.json": "f5faa341d4995a278a4a27f40fe6dfa29707b40a12a5c8fe9c2ac42d8efa8c9b", + "mixed-global/audit/ASYNC-AUDIT.json": "7967cafb39b35b15dccb4b7438188b5b07320a159b67293f3f88704c7d7cb868", + "mixed-global/audit/OWNERS-AND-PROFILE.json": "ac37ef108d6e2d3bd280330b67566214a25a8cfa82fbbb50086d9c99cfe296a3", + "mixed-global/audit/PREFIX-AND-INVOICE.json": "93f2cd38aa53b64e33324e2c20c3888d45ea11b3d95810cc17161873dfb12fd9", + "atm3-step0-promote/CONSTRUCTION.json": "3096b12dfabe0f2e410132d888fdd9c8c9b81d62578c92440e19482481aa64a3", + "atm3-step0-promote/FRAME-ONLY-CONTROLS.json": "f5352a7903286838ffaca12d874e2da3976bbe173232feb3fedd219a15f8209d", + "atm3-step0-promote/RECIPES.json": "a9ea32557046ee10397e8819f4022f3a8bf678be5436982535990e65ebcd64f6", + "atm3-step1-greedy_kernels/KERNEL-CONSTRUCTION.json": "40511901fa6d6da38cb7fc1b2fcc538d1e6daf7e487738b5baeced3ceee93959", + "atm3-step1-greedy_kernels/MULTICOLD-OMISSION-CONTROLS.json": "51a0a7bfbabfed30724a60fe15edb159fc97a3c0867f380ed9a8dd2e1e766186", + "atm3-step2-frame_coalesce/FRAME-CONSTRUCTION.json": "b66e5854cec7275c15e7fbf411515ab9f8fcbcc023cba51bea955b69d9ac3d51", + "atm3-step3-gate_move_coalesce/FRAME-CONSTRUCTION.json": "1d96054eb6b2fad25ad602c8df217ea410705b2f521d0ab2db8cd81a226e3a88", + "atm3-step4-hyperplane_end_closure/HPE-ATC-CONTROLS.json": "c3465b53080ab31e88ab9db3f003ecdea30934d5b3f9d6547e6ec080bc801ada", + "atm3-step4-hyperplane_end_closure/HPE-CONSTRUCTION.json": "4bac5f31b589070864711253e52253391d49e2bc003f78803acf1e582ce60d67", + "ck-step0-greedy_kernels/KERNEL-CONSTRUCTION.json": "23ca231febd30ee092f617f0506d120c01e421bc3c814ba82b11d912c7f15869", + "ck-step0-greedy_kernels/MULTICOLD-OMISSION-CONTROLS.json": "3c55bc8fd323a88c15eb6e455a063488468bb178583622bec26095aa6a989809", + "ck-step1-frame_coalesce/FRAME-CONSTRUCTION.json": "98951047f5967e77c30861a3ccef600845bf5db2b6ea554b716ea3655b093ff9", + "ck-step2-gate_move_coalesce/FRAME-CONSTRUCTION.json": "ec10bf97610cec2ed56ba7db2ae9e450afb2429feeacf5fd0c70068073c44627", + "ck-step3-hyperplane_end_closure/HPE-ATC-CONTROLS.json": "268b33d0dc00cc45b3215bf95c674873b26bff0c7c3d644326d98b7c41daf0f0", + "ck-step3-hyperplane_end_closure/HPE-CONSTRUCTION.json": "f61be54466bef681e175a253b5fc053dad29ae39cca0ea0f2b55d02da547eff6", + "atm3-local/INDEPENDENT-LOCAL-REPLAY.json": "4f37ae45b7e84b7a16d46603bbc052b8f884dafcdce49c0bee825c5306099c2f", + "atm3-local/CLIFFORD-REVIEW.json": "d7f02ba70716ed44df41c7daea7d46adadcc852093b7f089e5a9e104eaecba2a", + "atm3-local/WRAPPER-CHECKS.json": "3045822d881692d9a3d53acc29b3bb5552a5003b8eb8934dc86e5ea5f96aef03", + "ck-local/INDEPENDENT-LOCAL-REPLAY.json": "52a7cc82d79c9080bfe38e3264a69c14472d35b8b2a2295925185de907594d83", + "ck-local/CLIFFORD-REVIEW.json": "3f09a3407b5ce648d2d3d4d23035f679bd617852e1c028e5d9d2216d043159f0", + "ck-local/WRAPPER-CHECKS.json": "12832d2fef2afc133081d50d5e279ea461fd76e493df35cef5f8b7090d6ecb4b" + }, + "manifest_sha256": "34019713c8b1e8193becf1ec89cb809f3a0abbdd4ec9d9d8575408fae5455660", + "spec_sha256": "b323df4a18ae7d327f0ffacea0dcc105e23a80e245715bded9323343871ad00d", + "source_manifest_sha256": { + "multicold": "328ce8023d33deb308b0f1ae2320424050f836d791cf60a613ae8408e7d6f3ab", + "structural_gain": "eb0499a927665a48a25355075dcb7dc76d0fc43c67ea6d311d9e0242b6d4a25d", + "larger_gain": "54d67f45ad520f4a134e069336bd0ff639aaeada28d13539298e4f2655c9692d", + "joint_prefix": "fd30701bd9bd652985db18fa95bee08a34615ef417a2feb2f55efd60a0b5d665", + "frame_coalescing": "f336fd702c54422d79c1b9ba7d8699ae6c99518f66a5b5bbc5f3be331fa1fadd" + } +} diff --git a/research/complex-571-hpe46-validation/RESULT.json b/research/complex-571-hpe46-validation/RESULT.json new file mode 100644 index 0000000000..261b6bc83f --- /dev/null +++ b/research/complex-571-hpe46-validation/RESULT.json @@ -0,0 +1,34 @@ +{ + "status": "PASS_HPE46_NATIVE_COMPLEX_AND_CITED_BIT", + "kappa": "322713922116043/200000000000000000", + "kappa_decimal": "0.001613569610580215", + "complex_lower": "101011089084942512869/62500000000000000000000", + "bit_lower": "413456747036699736067/250000000000000000000000", + "conservative_kappa_decimal": "0.001613569607722207", + "conservative_complex_lower": "1616177422491826820597/1000000000000000000000000", + "global_profile": { + "1": 183968, + "2": 33616, + "3": 23053, + "4": 14008, + "5": 4032, + "6": 4032, + "8": 576, + "25": 1, + "48": 1986 + }, + "provider_counts": { + "ck": 53, + "atm3": 19 + }, + "surcharge_model": { + "complex": false, + "bit": true + }, + "seconds": 144.63307258393615, + "reused": { + "baseline": true, + "locals": [] + }, + "scope": "Conditional native exact-complex witness after complete conservative admission, moment and outer checks; PR559 exact-cover recurrence correction only, bit bad-residue surcharge and H1-H5 retained. The frozen PR582 plain-joint-prefix, added-kernel and entrance-promoted provider dispatch with the new frame coalescences composed with cited unchanged PR543 bit supplier. All-size compiler, common-label/mutable-source realization, whole-call hosting, precision/tape and analytic transfer remain assumptions. No unconditional theorem or full Lean certification." +} diff --git a/research/complex-571-hpe46-validation/STAGES.json b/research/complex-571-hpe46-validation/STAGES.json new file mode 100644 index 0000000000..5e7e888ebf --- /dev/null +++ b/research/complex-571-hpe46-validation/STAGES.json @@ -0,0 +1,188 @@ +[ + { + "name": "atm3-step0-promote-construction", + "exit_code": 0, + "seconds": 0.285, + "log_sha256": "3096b12dfabe0f2e410132d888fdd9c8c9b81d62578c92440e19482481aa64a3" + }, + { + "name": "ck-step0-greedy_kernels-construction", + "exit_code": 0, + "seconds": 3.151, + "log_sha256": "23ca231febd30ee092f617f0506d120c01e421bc3c814ba82b11d912c7f15869" + }, + { + "name": "atm3-step1-greedy_kernels-construction", + "exit_code": 0, + "seconds": 3.129, + "log_sha256": "40511901fa6d6da38cb7fc1b2fcc538d1e6daf7e487738b5baeced3ceee93959" + }, + { + "name": "ck-step0-greedy_kernels-omissions", + "exit_code": 0, + "seconds": 10.704, + "log_sha256": "e57622df5f252d2027d1c92e3fa8aae67d5db2a4318df110fcc8d9db99c0a2b3" + }, + { + "name": "atm3-step1-greedy_kernels-omissions", + "exit_code": 0, + "seconds": 10.597, + "log_sha256": "e57622df5f252d2027d1c92e3fa8aae67d5db2a4318df110fcc8d9db99c0a2b3" + }, + { + "name": "ck-step1-frame_coalesce-construction", + "exit_code": 0, + "seconds": 1.438, + "log_sha256": "3d2d67cbd82dd5b79c3cfea987b31bcc6a16283c68c6b13b9801e009cc94e09c" + }, + { + "name": "atm3-step2-frame_coalesce-construction", + "exit_code": 0, + "seconds": 1.423, + "log_sha256": "a04d41205fca28d21c490b4b103d74c1e000ec7f72cb07138ed92fb514db9fba" + }, + { + "name": "ck-step2-gate_move_coalesce-construction", + "exit_code": 0, + "seconds": 1.003, + "log_sha256": "0ebcf2ca688428a23e0ad3e734b35dd9004972405ca1cca679663e42df96b032" + }, + { + "name": "atm3-step3-gate_move_coalesce-construction", + "exit_code": 0, + "seconds": 0.994, + "log_sha256": "e9b4318629d9418901f9dee885dae2f4d01c5eac0b60eb9f9ddefe6afec2e4b8" + }, + { + "name": "ck-step3-hyperplane_end_closure-construction", + "exit_code": 0, + "seconds": 0.814, + "log_sha256": "f7593b6f22bf5b11af833df0da347ad803a81387c9848c6fac42bb168303b604" + }, + { + "name": "atm3-step4-hyperplane_end_closure-construction", + "exit_code": 0, + "seconds": 0.788, + "log_sha256": "267f28865f42aac6cee0ea0db06aacbb871fbf0a4d673fb002ee5265c598700e" + }, + { + "name": "ck-step3-hyperplane_end_closure-controls", + "exit_code": 0, + "seconds": 2.868, + "log_sha256": "2671d20e7156f736da85479280659ef7bc6d4f5706c54bb7390c615abd11dd20" + }, + { + "name": "atm3-step4-hyperplane_end_closure-controls", + "exit_code": 0, + "seconds": 2.898, + "log_sha256": "8ef457b52be65f7d0d22622910cc2f5c54619aa37a741b433aef1450c3676771" + }, + { + "name": "ck-all-columns-native-frames", + "exit_code": 0, + "seconds": 0.52, + "log_sha256": "e227047eb984e90bdf7864de094800c16eabefa1ea233c4270257956948e54f9" + }, + { + "name": "atm3-all-columns-native-frames", + "exit_code": 0, + "seconds": 0.494, + "log_sha256": "d4a271ce1232e02c7281d0b22fe2918ad5b2aac2ac8293ea38085afaefe3a504" + }, + { + "name": "ck-both-reflected-ledgers", + "exit_code": 0, + "seconds": 0.447, + "log_sha256": "7d6afaf527135961259f82ef6cbe828622d75f4702a342862d47768cfbeab9f3" + }, + { + "name": "atm3-both-reflected-ledgers", + "exit_code": 0, + "seconds": 0.44, + "log_sha256": "7d6afaf527135961259f82ef6cbe828622d75f4702a342862d47768cfbeab9f3" + }, + { + "name": "ck-independent-local-controls", + "exit_code": 0, + "seconds": 2.314, + "log_sha256": "924775067c1dfcef0582821a7572c9e09325185404ab43932573103785756ac5" + }, + { + "name": "atm3-independent-local-controls", + "exit_code": 0, + "seconds": 2.282, + "log_sha256": "924775067c1dfcef0582821a7572c9e09325185404ab43932573103785756ac5" + }, + { + "name": "ck-normalized-wrappers", + "exit_code": 0, + "seconds": 1.695, + "log_sha256": "441a31921029994015132274553de23363948d563f97a0187018df64c4875a03" + }, + { + "name": "atm3-normalized-wrappers", + "exit_code": 0, + "seconds": 1.687, + "log_sha256": "441a31921029994015132274553de23363948d563f97a0187018df64c4875a03" + }, + { + "name": "atm3-all-phase-edges", + "exit_code": 0, + "seconds": 105.257, + "log_sha256": "7de5d6f7533ecdb59b6ae6ba3963417bf5bda9fd595b0c07780833fd78541e83" + }, + { + "name": "ck-all-phase-edges", + "exit_code": 0, + "seconds": 105.476, + "log_sha256": "3699e6eeaa4cd93a07f1aae40eb45a291d34a5490741f2581c4046aab59c867f" + }, + { + "name": "bind-providers", + "exit_code": 0, + "seconds": 0.247, + "log_sha256": "71f679ce5a123fb58397fd6852ba64ce3832fd20e81a096bfda9a1cf3237237a" + }, + { + "name": "emit-controller", + "exit_code": 0, + "seconds": 1.993, + "log_sha256": "3e6397443c3d535bc17b4bf377925b5cf6c08d6384cb169ca57193edcd791fc5" + }, + { + "name": "independent-controller-and-controls", + "exit_code": 0, + "seconds": 7.844, + "log_sha256": "7967cafb39b35b15dccb4b7438188b5b07320a159b67293f3f88704c7d7cb868" + }, + { + "name": "fresh-invoice", + "exit_code": 0, + "seconds": 0.551, + "log_sha256": "7ebde097ad33f7755e4b6b39ad67c1d76016525f19d1cde46d631c049a2e8c4d" + }, + { + "name": "conservative-and-native-exact-assembly", + "exit_code": 0, + "seconds": 0.233, + "log_sha256": "1fd54d0e7fa2e08c22d62bdaa0f084d607e9921fc4999911de935143665ba526" + }, + { + "name": "admission-controls", + "exit_code": 0, + "seconds": 0.296, + "log_sha256": "40f0c35552fb10f02288ae8d2c6b9f902050fb370c0a19b7b88c977d0d44dab1" + }, + { + "name": "phase-timing-portability-controls", + "exit_code": 0, + "seconds": 0.659, + "log_sha256": "d4300a182a615922dd73ff2b945ff671086b86d5b80dbc009539e96d9b4dfe82" + }, + { + "name": "actual-recompression-and-rebound-controls", + "exit_code": 0, + "seconds": 2.344, + "log_sha256": "9c20730203542b9a5ed97e1ce2e2c51526e88de0b2983d4f15d7e550b8ed02ea" + } +] diff --git a/research/complex-571-hpe46/LICENSE b/research/complex-571-hpe46/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/complex-571-hpe46/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/complex-571-hpe46/MANIFEST.json b/research/complex-571-hpe46/MANIFEST.json new file mode 100644 index 0000000000..abd3aa4f4b --- /dev/null +++ b/research/complex-571-hpe46/MANIFEST.json @@ -0,0 +1,36 @@ +{ + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "98f76c1d449d00474cf396b6906c727861c7c8b9ccf3a46ead44227d886d5edb", + "README.md": "74c07bf74f143b03ccb4c69e394163573f285e8486899cb3d6368f227c2c8621", + "code/assemble.py": "71fca807f2e70ed7439e369be4bb3be21b487e942b92f0e7629d7521e9398a65", + "code/assembly_controls.py": "7ec40d7a223b3525ef672b2d491979f11d9be913b90c9fe5ae54160ae91538a2", + "code/audit_allcold.py": "90b754475dcb73b73ee6339ecf59190baac8157b33c45ca803ee611e6540eed1", + "code/bind_providers_portable.py": "ff9c025f628dcf16b6ba281d288bd80aa418ee9685ab90b8266049fbd1b01c93", + "code/build_gate_moves.py": "08bf1c2652307aeefbab089fdaf02f82e2c396ca23a1eb68e294a67e74c44252", + "code/build_hpe.py": "7a1f37c40f067f9b3ef4711d2ce3843fc10dfcc14b8cc290c3d6f6893c8224ae", + "code/build_hpe_closure.py": "2a2cb0283a17aad34a9aa5270e11dc04b67b9d169f5c5ea47d407de69585739a", + "code/emit_allcold.py": "5b4a6fffbdff16e27f87683274470a0a21ae224ff55f34b9839f451f2930d517", + "code/generated_identity.py": "c8af22719c0f3097a991a3f6ccac8f090afd2faba554745733d9ea88f2c25708", + "code/generated_identity_controls.py": "5ea88b559f0e8f29c6a3c814d6abcd2007abcff97d6bd2acced3fafda074375d", + "code/hpe_adapters_local.py": "b5d976f7496eac0d9c7ed97b3a028efcf6950ec989f1789b8c6f5d2b325c40b3", + "code/hpe_audit_and_transport.py": "9020d9f295c37836619b59f58c8e67d0dc14bafe8b53aa2c9e98cb5053cbbe9b", + "code/hpe_audit_local.py": "eb009dbde7e1f0feef622e62f06a4ce10b0210a8216b94e7217e67fb9d46efe3", + "code/hpe_controls_atc.py": "c75684d8355c488d4acf85d1cca566716c662384842e5bb92b1cc68efad10695", + "code/hpe_emit_local.py": "7222e564cabb7ff15b8b4833385342f19a49d3037130f8c21afd52b74638fd40", + "code/invoice_allcold.py": "b37ba38a558889becb489f0faffa50c7b0ae9edd79e8bd6154003ca7b900e65a", + "code/phase_timing_controls.py": "1692ccee3da4b1781408d126ee4999f3e31a505cd83c64823a404033da3a6339", + "code/witness.py": "dd29d2b1a0bf5bc6873155dd145d302ebc1b061bb56b06f2a10f0f9ac751a446", + "data/OWNERS.json.gz": "b444356200d64b4e985dff4a26be673fe6d4f41a96e690c05ea58f3bdf60e441", + "data/PLAN.json": "4ace3e4362b713af245d5e407cc83bd4901545c6e77e50cf6dbd0ed43f229d8f", + "data/SPEC.json": "b323df4a18ae7d327f0ffacea0dcc105e23a80e245715bded9323343871ad00d", + "data/recipes/atm3-step0-promote.json": "9a7cafdf9b600ba43985c83969b75151f665b98f454afc1494b9f9ef3dd3916f", + "data/recipes/atm3-step1-greedy_kernels.json": "c4bc67f329fc22e226f26bbbf7e67018a639823d99fccfc5a1e798a7a82db43f", + "data/recipes/atm3-step2-frame_coalesce.json": "e6d7ea259a542f2b43a857998f677db4d68f8f36335e98a030bc91ab38ce758c", + "data/recipes/atm3-step3-gate_move_coalesce.json": "3a6b8fec6c8b56a45bf8fae683083636fa295a8914ffa68d11b1f78ba3a2eb9d", + "data/recipes/atm3-step4-hyperplane_end_closure.json": "3f5c614b207732d938af375e8d6809c4a9ef061a55bb5e6d478e212bf122a35d", + "data/recipes/ck-step0-greedy_kernels.json": "c839199d0e6f8e976978fe97bc0c5579a65ba69dfb6864585b448cccc1113056", + "data/recipes/ck-step1-frame_coalesce.json": "0c8e5991e1338f03b837814dd060d4dd598c324e3538ee510913e0444a384ee3", + "data/recipes/ck-step2-gate_move_coalesce.json": "1f5b62c76915b1b8bbcf63b42dcbd87a536c34d3721c4a9b68e651404717bf00", + "data/recipes/ck-step3-hyperplane_end_closure.json": "7c1c88f7d1b3c53dd19d8a01b95434aeade114459fbc377e6706244d6a13bccc", + "verify.py": "3f4b0bd4aaeb924e4833a064bcc9043b3ae9eeb15df2db0c1cae50205288a36f" +} \ No newline at end of file diff --git a/research/complex-571-hpe46/NOTICE.md b/research/complex-571-hpe46/NOTICE.md new file mode 100644 index 0000000000..bc1fb18203 --- /dev/null +++ b/research/complex-571-hpe46/NOTICE.md @@ -0,0 +1,26 @@ +# Attribution and scope + +Four verified provider types are offered to every call: PR571's prefix word with twelve multi-cut cold kernels (PR568's unchanged constructor), the same word with forty width-five entrance promotions (PR569's unchanged frame constructor) before those kernels, PR575's plain joint-prefix provider, and PR568's eight-cold provider. A window MILP with an exact per-pattern model chooses the dispatch and a literal owner map. PR583's six source-bound kernel frame coalescences (its unchanged constructor and negative controls) are applied to every PR571-prefix provider word (ck and atm3), followed by two further coalescences that each first move one addition past two commuting additions (package code/build_gate_moves.py, extending PR583's constructor); widths are unchanged, so the free4f literal owner map is re-admitted with the coalesced locals. + +Pinned external sources (unchanged; `verify.py` checks their manifests and every file it uses): +- PR568 (`research/complex-multicold`, commit `71c99ac935a33bb7b59a1b4a7af8725a939b0b90`). +- PR571 (`research/structural-gain`, commit `b7bdc5a8de18fcf418cfb9c7d83a2b1097a5e4a3`). +- PR569 (`research/larger-gain`, commit `897213a855b7fb8a1b8b0e552a2f5c42e6c1b326`). +- PR575 (`research/complex-joint-prefix`, commit `eac6f7e378ab622dac50a2fd4b7ef6eab014de44`). +- PR583 (`research/kernel-frame-coalescing`, commit `89be768f0157f5a3d8e4db69cf1748768605eac9`). + +Provider construction is described as typed steps in `data/SPEC.json` (`build`); `verify.py` runs only allowlisted step types with their paired omission audits and checks every input and output content hash. `code/` holds the spec-driven global admission scripts adapted from PR571's `frontier-composition/global-code/` (OpenAI Codex assisted, Apache-2.0): every expected value is read from `data/SPEC.json` and compared only after independent recomputation. `code/generated_identity.py` and `code/generated_identity_controls.py`, and the decompressed-content artifact identities in the bind, audit, invoice, assembly and phase-timing scripts, are taken unchanged from PR586 by chafreaky (`research/promoted-kernel-coalescing`, commit `4846fee5b06af770e9b3a10c36200f673d656725`, OpenAI Codex assisted, Apache-2.0), including its proof-content and reference/metadata mutation controls; the normalization of descriptive width metadata after frame changes follows the same PR. + +The owner map was nominated by a HiGHS window MILP (adapted from PR569's `global/nominate_width7.py`) with lazy cross-time Hall cuts; it is not an admission dependency. + +Prepared by Claude Code (Anthropic) research agents. Apache-2.0 applies; LICENSE is included. All notices, licenses, source pins and AI disclosures of the pinned sources and their ancestry are retained in those packages and are not replaced by this notice. All inherited conditional assumptions remain conditional. + + +## This package (complex-571-hpe46) + +Prepared by higherbeing with Claude Code assistance. It is a copy of PR592's `complex-571-hpeq4` (jeremykothe2, Claude Opus 5.5 via +Claude Code; hyperplane-ended helpers, HPE verifier chain, owner-map method) with these changes: `code/build_hpe_closure.py` (new +step type `hyperplane_end_closure`: the exact commutation condition replaces the first-gate rule and ends 46 helpers per call), +`verify.py` (the step handler), `code/witness.py` (records pins in discovery mode; strict mode unchanged), new `data/PLAN.json`, +`data/OWNERS.json.gz`, `data/SPEC.json` and the two closure recipes. The owner map was nominated with the allocator tools of +PR520 (higherbeing) extended to per-call widths, HiGHS and lazy top-k Hall cuts. All inherited notices above are retained. diff --git a/research/complex-571-hpe46/README.md b/research/complex-571-hpe46/README.md new file mode 100644 index 0000000000..7bdeeaaa0f --- /dev/null +++ b/research/complex-571-hpe46/README.md @@ -0,0 +1,44 @@ +# complex-571-hpe46: conditional κ 0.001613569610580215 + +Prepared by higherbeing with Claude Code assistance. Apache-2.0; see NOTICE.md for the inherited contributors. + +## What changes against PR592/PR596 + +PR591 (jeremykothe2) ends 38 entering width-8 helpers per call on a hyperplane U instead of the full frame, so their residual +width drops to 7. Its candidate rule requires the helper's single cleanup gate to be the **first** cleanup gate on both of its +registers. Eight more helpers per call fail that rule only because their partner is *read* by an earlier cleanup gate; reading a +register twice commutes, so the partner's earlier gate is not an obstruction. This package replaces the rule by the exact +condition: the helper's cleanup gates, together with the non-commuting closure of the gates they must pass, run right after +part B at the minimal common frames (the closure here is the gate itself), and the helper ends at the hyperplane spanned by its +own and its partner's last frames. On every provider word (ck, atm3) this ends **46** helpers per call (the 38 of PR591 and 8 +more), with the same local paid Φ and eight more width-7 residuals per call. + +The owner map is renominated for the new width inventory with a window MILP (HiGHS) plus lazy cross-time Hall cuts and an exact +per-window matching. Idle remainders: {3:197, 25:1, 48:1986} (PR592: {1:2, 2:1, 3:280, 12:1, 48:1969}); the LP bound for this +menu is 41,862.3 Φ against 42,321.7 Φ for PR592's menu. + +Everything else (geometry, pinned sources, the other build steps, dispatch ck×53 / atm3×19, the asynchronous call order, the +HPE verifier code of PR592) is unchanged. `verify.py` gains one allowlisted step type, `hyperplane_end_closure` +(`code/build_hpe_closure.py`), whose output is recomputed from the input word and must equal the recipe; it is followed by +PR592's unchanged raw-word control audit (`hpe_controls_atc.py`, 8 mutations rejected) and by the same independent comparison +as `hyperplane_end`. `code/witness.py` records pins in discovery mode (`WITNESS_RECORD`); strict mode is unchanged. + +## Verification + +Same pinned sources as PR592 (PR568 `71c99ac`, PR569 `897213a`, PR571 `b7bdc5a`, PR575 `eac6f7e`, PR583 `89be768`): + +```sh +python3 -B research/complex-571-hpe46/verify.py --work /tmp/hpe46 \ + --source multicold=../pr568/research/complex-multicold --source larger_gain=../pr569/research/larger-gain \ + --source structural_gain=../pr571/research/structural-gain --source joint_prefix=../pr575/research/complex-joint-prefix \ + --source frame_coalescing=../pr583/research/kernel-frame-coalescing +``` + +## Scope + +Conditional on the same inherited assumptions as PR592 (all-size compiler, common-label/mutable-source realization, whole-call +hosting, precision/tape, analytic transfer, Lemma A for hyperplane-ended helpers as stated in PR592's PROOF-HYPERPLANE-END.md and +PR593's Lean). The eight additional helpers satisfy exactly the hypotheses of PR591's construction (one cleanup gate, run at U +right after B, helper never touched afterwards, partner continues to FULL); only the commutation argument for moving the gate past +the skipped cleanup prefix is generalised, and it is checked by the exact scalar replay of the reordered program in +`hpe_audit_and_transport.py` and `hpe_controls_atc.py`. No unconditional theorem. diff --git a/research/complex-571-hpe46/code/assemble.py b/research/complex-571-hpe46/code/assemble.py new file mode 100644 index 0000000000..1261127a60 --- /dev/null +++ b/research/complex-571-hpe46/code/assemble.py @@ -0,0 +1,213 @@ +"""Hardened 63 width-seven (#571 prefix word) and 9 plain eight-cold (#568 E8) provider assembly with the native exact-complex moment. + +Prepared with OpenAI Codex assistance. The rational engines and outer +constraints are retained from PR547/PR548 and their preserved ancestry. +The bit operator is the cited unchanged PR543 supplier. The complex owner +and invoice inputs must be freshly emitted by the packaged physical replay. +All conservative admission guards and conservative moment/outer witnesses run +before the PR559 native-complex correction. The bit surcharge is retained. +""" +from pathlib import Path +from fractions import Fraction as Q +from decimal import Decimal, localcontext +import argparse,json,hashlib,importlib.util,os,sys +from collections import Counter +assert __debug__, 'Assertions required' +P=Path(sys.argv[1] if __name__=='__main__' else os.environ['GAIN_PR564_SOURCE']).resolve() +read=lambda p:json.loads(p.read_text()) +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +hash_ok=lambda x:isinstance(x,str) and len(x)==64 and all(t in '0123456789abcdef'for t in x) +digest=lambda x:hashlib.sha256(json.dumps(x,separators=(',',':')).encode()).hexdigest() +def load(n): + s=importlib.util.spec_from_file_location(n,P/'engines'/(n+'.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +M,B,A=[load(n)for n in ('moment','base_two_moment','outer')] +def dec(x): + with localcontext()as ctx:ctx.prec=70;return str(Decimal(x.numerator)/Decimal(x.denominator)) +from witness import DISPATCH,CALL_ORDER,COUNTS,PIDS,X,DISCOVER,pin + + +def assemble(owner,invoice,owner_sha,invoice_sha): + # These are admission receipts, not optional collections of successful rows. + # Require both orientations and every finite check before pricing anything. + assert owner['status']=='PASS_INDEPENDENT_ASYNC_OWNERS_AND_PROFILE' + assert invoice['status']=='PASS_INDEPENDENT_MIXED_ASYNC_SCALAR_PREFIX_AND_FINITE_INVOICE' + assert all(hash_ok(x)for x in (owner_sha,invoice_sha,owner['template_sha256'],owner['controller_audit_sha256'],invoice['parent_template_sha256'])) + checks={'local_primitive_bound','logical','router','literal','mass','precision','tape','row','halving'} + assert set(invoice['strict_checks'])==checks + assert all(invoice['strict_checks'][name] is True for name in checks) + assert set(invoice['providers'])==set(PIDS) + assert invoice['provider_counts']==COUNTS + assert owner['all_live_owners_per_call_distinct'] is True + assert owner['owners_per_call']==728 and owner['actual_helper_owner_charts']==owner['hosted_residuals']==pin('expected.hosted_residuals',owner['hosted_residuals']) + pin('expected.rank_mass',owner['rank_mass']) + pin('expected.actual_73column_sigmas',owner['actual_73column_sigmas']);pin('expected.cross_replica_helper_roles',owner['cross_replica_helper_roles']) + pin('expected.idle_remainders',owner['explicit_idle_remainder_children']) + assert invoice['complete_invocation_sweeps']==invoice['bridge_sweeps']==72 + assert invoice['live']==owner['live'] and invoice['physical']==owner['physical'] + assert invoice['helpers']==504 and invoice['centres']==8 + assert invoice['physical_stock_identity']==dict(data_and_owner_families=7168,local_helpers=504,private_centres=8,coefficient_work=2) + assert sum(invoice['physical_stock_identity'].values())==invoice['physical'] + assert invoice['controller_audit_sha256']==owner['controller_audit_sha256'] + for pid,p in invoice['providers'].items(): + assert set(p['local'])=={'forward','backward'} + assert p['helpers']==504 and p['centres']==8 and p['n']==728 and p['v']==112 and p['h']==9 + K='providers.'+pid+'.';pin(K+'entering',p['entering_helpers']);pin(K+'entrance',p['entrance_rank']) + pin(K+'inventory',p['width_inventory']) + assert all(type(w) is int and 0=0 for n in idle.values()) + idle=+idle;assert sum(idle.values())==owner['explicit_idle_remainder_children'] + pin('expected.idle_remainder_profile',{str(r):n for r,n in sorted(idle.items())}) + paid.update(idle) + assert dict(paid)=={int(r):n for r,n in owner['paid_profile'].items()} + assert invoice['compiler']==64*74**3 + assert invoice['local_adapters']==max(p['local_adapters']for p in invoice['providers'].values()) + assert invoice['local_primitive_bound']==max(p['local_primitive_bound']for p in invoice['providers'].values()) + # Recount the retained dedicated-bank envelope independently. Its geometry + # stays fixed, while every local primitive and wrapper comes from the actual + # selected provider/orientation sums above. + parent_live,parent_physical,parent_idle=11704,12218,16128 + assert owner['source_idle_children_charged']==parent_idle + bridges,shifts=2*112*72,4*112*8;moves=2*shifts + nonlocal_items=(4*112*8*9+2*112*8*9+2*72*504+parent_idle+9*504+bridges+shifts+moves+parent_live+parent_physical+invoice['wrapper_elementary_factors_charged']) + outside=8*nonlocal_items+64*73 + pervertex=(invoice['selected_real_component_primitives']+bridges+shifts+moves+parent_live+(72*invoice['local_adapters']+outside)*invoice['compiler']+64*parent_physical) + rebased=pervertex+65*(invoice['physical']-parent_physical)+(invoice['live']-parent_live) + assert invoice['unhosted_pervertex']==pervertex and invoice['hosted_rebased_pervertex']==rebased + used=max(pervertex,rebased) + prior=invoice['retained_prior_overcharge'] + if prior is not None: + assert hash_ok(prior['sha256']) and type(prior['previous_pervertex_allowance']) is int and prior['previous_pervertex_allowance']>0 + assert prior['added_complete_new_pervertex']==pervertex + assert prior['policy']=='Retain old allowance and add entire fresh mixed recount.' + used=max(used,prior['previous_pervertex_allowance']+pervertex) + assert invoice['conservative_pervertex_used']==used + finite=invoice['finite'] + assert 02*48*48) + assert actual_checks==invoice['strict_checks'] and all(actual_checks.values()) + bit_path=P/'inputs/PR543-EXPECTED.json';bit_data=bit_path.read_bytes() + assert hashlib.sha1(b'blob '+str(len(bit_data)).encode()+b'\0'+bit_data).hexdigest()=='b61d859826246e0c3dabbe096e57ad7015eadfd5' + bit=json.loads(bit_data)['nine'] + c=Q(bit['bit_lower']) + H={int(r):n for r,n in owner['paid_profile'].items()};pin('expected.global_profile',owner['paid_profile']) + # Claimed lower endpoints come from the spec; discovery derives them with the same certified moment engine. + # Either way they are verified below (accepted at b, rejected at b+1e-24). + if DISCOVER:b=Q(M.certify(H,73,owner['live'],False)['lower']);conservative_b=Q(M.certify(H,73,owner['live'],True)['lower']) + else:b=Q(X['complex_lower']);conservative_b=Q(X['conservative_complex_lower']) + assert owner['template_sha256']==invoice['template_sha256'] and owner_sha==invoice['owner_audit_sha256'] + pin('expected.live',owner['live']);pin('expected.physical',owner['physical']);assert owner['deficit']==2560 + assert owner['banked_residuals']==0 + def check_moment(side,h,m,W,lower,deficit,bad): + assert m*W-sum(r*n for r,n in h.items())==deficit and m*m>2*max(h)**2 + rows=[] + for z,accept in [(lower,True),(lower+Q(1,10**24),False)]: + l,u=M.moment(h,m,W,z,bad);ll,uu=B.moment(m,W,list(h.items()),z) + if bad: + fl,fu=B.moment(m,W,[(1,32*m*m*sum(h.values()))],z);ll+=fl/10**16;uu+=fu/10**16 + assert (u<1 and uu<1)if accept else(l>1 and ll>1) + rows.append(dict(side=side,surcharge=bad,endpoint=str(z),accept=accept,mercator=[str(l-1),str(u-1)],base_two=[str(ll-1),str(uu-1)])) + return rows + bitH={int(r):n for r,n in bit['profile'].items()} + bit_moments=check_moment('bit',bitH,64,bit['bit']['live'],c,9984,True) + conservative_moments=check_moment('conservative_complex',H,73,owner['live'],conservative_b,2560,True) + assert bit['bit']['two_level_coefficient_bits']0 + ceil=lambda x:-(-x.numerator//x.denominator);cut=max(ceil(36/gap**2),ceil(2*(4+512)/gap));assert cut*gap**2>=36 and cut*gap>=2*(4+512) + cuts.append(dict(exponent=str(a),gap=str(gap),cutoff_log2=str(cut)));chain.append(a) + q=chain[-1]*(1-2*eta);margin=(1-eta)*q/(1+q);ticks=margin*10**18;k=Q((ticks.numerator-1)//ticks.denominator,10**18) + bridge={'semantic':{'C0':{'base':2,'exponent':210000},'strict_literal_gap':1},'rows':{'degree_gap':Q(10**6)-Q(51*20161,25)}} + outer=A.assembly(chain[-1],bb,bridge,k,eta=eta,beta=beta);assert len(outer['strict_constraints'])==47 and all(v>0 for v in outer['strict_constraints'].values()) + controls=[] + for name,kk,ee,be in [('next_grid',k+Q(1,10**18),eta,beta),('zero_eta',k,Q(0),beta),('zero_beta',k,eta,Q(0)),('unit_beta',k,eta,Q(1))]: + try:A.assembly(chain[-1],bb,bridge,kk,eta=ee,beta=be) + except AssertionError:controls.append(name) + else:raise AssertionError(name) + return k,cuts,outer,controls + conservative_k,conservative_cuts,conservative_outer,conservative_controls=outer_witness(conservative_b) + pin('expected.conservative_kappa_decimal',dec(conservative_k)) + # Only after every conservative supplier/admission/outer check succeeds is + # the reviewed native exact-complex recurrence selected. Bit charge stays. + native_moments=check_moment('complex',H,73,owner['live'],b,2560,False) + k,cuts,outer,controls=outer_witness(b) + pin('expected.kappa_decimal',dec(k)) + assert M.moment(H,73,owner['live'],b,True)[0]>1 + assert M.moment(bitH,64,bit['bit']['live'],c+Q(1,10**24),False)[1]<1 + model_controls=['native_complex_endpoint_rejected_with_old_surcharge','omitting_bit_surcharge_would_fail_next_endpoint_rejection'] + moments=bit_moments+native_moments + input_hashes={'owner_audit':owner_sha,'fresh_invoice':invoice_sha,'inputs/PR543-EXPECTED.json':sha(bit_path)} + input_hashes.update({'engines/'+name+'.py':sha(P/'engines'/(name+'.py'))for name in ('moment','base_two_moment','outer')}) + return dict(status='PASS_FRESH_MIXED_048_ALLCOLD_NATIVE_EXACT_ASSEMBLY',kappa=str(k),kappa_decimal=dec(k),complex_lower=str(b),complex_decimal=dec(b),bit_lower=str(c),bit_decimal=dec(c),binding='complex',gain_over_pinned569_percent=dec(100*(k/Q(X['gain_baseline_kappa'])-1)),complex_profile=H,provider_counts=invoice['provider_counts'],surcharge_model={'complex':False,'bit':True},conservative_complex_lower=str(conservative_b),conservative_complex_decimal=dec(conservative_b),conservative_kappa=str(conservative_k),conservative_kappa_decimal=dec(conservative_k),conservative_moments=conservative_moments,conservative_bootstrap=conservative_cuts,conservative_outer={n:str(v)for n,v in conservative_outer['strict_constraints'].items()},conservative_controls=conservative_controls,model_controls=model_controls,native_correction_gain=dec(k-conservative_k),template_sha256=owner['template_sha256'],input_sha256=input_hashes,bit_supplier=dict(pr=543,repository='eumemic/integer-mult-bounds',commit='2065fe4f72a914d907f1046603f5a36f17018535',path='research/e8-bit-r420/EXPECTED.json',git_blob_sha1='b61d859826246e0c3dabbe096e57ad7015eadfd5',replay_scope='Cited unchanged supplier; this assembly reprices its full profile and does not rebuild its bit circuit.'),moments=moments,bootstrap=cuts,outer={n:str(v)for n,v in outer['strict_constraints'].items()},controls=controls,scope='Conditional native exact-complex witness after complete conservative admission, moment and outer checks; PR559 exact-cover recurrence correction only, bit bad-residue surcharge and H1-H5 retained. The frozen PR582 plain-joint-prefix, added-kernel and entrance-promoted provider dispatch with the new frame coalescences composed with cited unchanged PR543 bit supplier. All-size compiler, common-label/mutable-source realization, whole-call hosting, precision/tape and analytic transfer remain assumptions. No unconditional theorem or full Lean certification.') +if __name__=='__main__': + import sys + package,C,out=map(Path,sys.argv[1:4]);assert package.resolve()==P and not out.exists() + owner_path=C/'audit/OWNERS-AND-PROFILE.json';invoice_path=C/'audit/PREFIX-AND-INVOICE.json' + owner,invoice=read(owner_path),read(invoice_path) + assert owner['template_sha256']==read(C/'hosted/HOSTED.json')['template_sha256'] + r=assemble(owner,invoice,sha(owner_path),sha(invoice_path));out.write_text(json.dumps(r,indent=2)+'\n');print(r['status'],r['kappa_decimal']) diff --git a/research/complex-571-hpe46/code/assembly_controls.py b/research/complex-571-hpe46/code/assembly_controls.py new file mode 100644 index 0000000000..fdc35bb4c9 --- /dev/null +++ b/research/complex-571-hpe46/code/assembly_controls.py @@ -0,0 +1,251 @@ +"""Independent admission controls for the N-provider native-complex assembly (per-provider controls). + +Prepared with OpenAI Codex assistance; Apache-2.0. Mutation receipts are +rebound to their new owner digest, so unrelated stale hashes cannot conceal +an incomplete width, provider, orientation, paid-profile or finite check. +The fresh physical replay remains a separate prerequisite. +""" +import argparse +import copy +import itertools +import math +import hashlib +import json +import os +from pathlib import Path +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * + +assert __debug__, 'Assertions required' +P = Path(__file__).resolve().parent +sha = lambda p: hashlib.sha256(p.read_bytes()).hexdigest() +digest = lambda x: hashlib.sha256(json.dumps(x, sort_keys=True, separators=(',', ':')).encode()).hexdigest() + + +def verify(owner_path, invoice_path, source_package): + os.environ['GAIN_PR564_SOURCE'] = str(source_package.resolve()) + from assemble import assemble + owner = json.loads(owner_path.read_text()) + invoice = json.loads(invoice_path.read_text()) + baseline = assemble(owner, invoice, sha(owner_path), sha(invoice_path)) + + def empty_maps(o, i): + i['strict_checks'] = {} + i['providers'] = {} + + def understated_stock(o, i): + o['physical'] -= 1 + i['physical'] -= 1 + i['physical_stock_identity']['coefficient_work'] -= 1 + + def changed_profile(o, i): + o['paid_profile']['1'] += 2 + o['paid_profile']['2'] -= 1 + + def wrong_orientation(o, i): + c = next(c for c in i['selected_calls'] if c['stage'] == 0) + c['orientation'] = 'backward' + p = i['providers'][c['provider_id']] + z = p['local']['backward'] + c['program_sha256'] = p['program_hashes']['backward'] + for name in ('events', 'macros', 'real_component_primitives', + 'coefficient_work_primitive_count', 'pre_wrappers', 'post_wrappers'): + c[name] = z[name] + i['selected_real_component_primitives'] = sum(c['real_component_primitives'] for c in i['selected_calls']) + i['selected_coefficient_work_primitive_count'] = sum(c['coefficient_work_primitive_count'] for c in i['selected_calls']) + + def understated_prefix(o, i): + for p in i['providers'].values(): + for z in p['local'].values(): + z['prefix_bits'], z['prefix_l1'] = 1, '1' + i['global_prefix_bits'] = 1 + 37 + 72 + 72 + 4 + + def reordered_calls(o, i): + i['selected_calls'][0], i['selected_calls'][1] = i['selected_calls'][1], i['selected_calls'][0] + + def no_cold_wrappers(o, i): + for p in i['providers'].values(): + p['entering_helpers'] -= 4 + for z in p['local'].values():z['pre_wrappers'] = z['post_wrappers'] = p['entering_helpers'] + for c in i['selected_calls']: + c['entering_helpers'] = c['pre_wrappers'] = c['post_wrappers'] = i['providers'][c['provider_id']]['entering_helpers'] + i['wrapper_elementary_factors_charged'] = sum(2*c['pre_wrappers'] for c in i['selected_calls'])*i['factors_per_wrapper'] + + controls = [ + ('empty_certification_maps', empty_maps), + ('failed_invoice_status', lambda o, i: i.__setitem__('status', 'FAIL')), + ('nonboolean_precision_check', lambda o, i: i['strict_checks'].__setitem__('precision', 'true')), + ('wrong_owner_role_count', lambda o, i: o.__setitem__('actual_helper_owner_charts', o['actual_helper_owner_charts'] - 1)), + ('understated_physical_stock', understated_stock), + ('changed_profile_same_rank_mass', changed_profile), + ('insufficient_finite_C0', lambda o, i: i['finite'].__setitem__('required_C0_bits', 210001)), + ('missing_finite_check', lambda o, i: i['strict_checks'].pop('halving')), + ('wrong_reflected_orientation_selfconsistent_totals', wrong_orientation), + ('missing_selected_call', lambda o, i: i['selected_calls'].pop()), + ('wrong_selected_primitive_sum', lambda o, i: i.__setitem__('selected_real_component_primitives', i['selected_real_component_primitives'] - 1)), + ('wrong_selected_coefficient_work_sum', lambda o, i: i.__setitem__('selected_coefficient_work_primitive_count', i['selected_coefficient_work_primitive_count'] - 1)), + ('unpaid_wrapper_factors', lambda o, i: i.__setitem__('wrapper_elementary_factors_charged', i['wrapper_elementary_factors_charged'] - 144)), + ('wrong_global_compiler', lambda o, i: i.__setitem__('compiler', 1)), + ('wrong_global_adapter_maximum', lambda o, i: i.__setitem__('local_adapters', 1)), + ('understated_exact_prefix_and_global_sum', understated_prefix), + ('wrong_global_prefix_sum', lambda o, i: i.__setitem__('global_prefix_bits', 224)), + ('wrong_row_prefix_reserve', lambda o, i: i.__setitem__('row_prefix_extra', 0)), + ('wrong_parent_geometry_charge', lambda o, i: i.__setitem__('unhosted_pervertex', 1)), + ('wrong_rebased_geometry_charge', lambda o, i: i.__setitem__('hosted_rebased_pervertex', 1)), + ('wrong_complete_pervertex_envelope', lambda o, i: i.__setitem__('conservative_pervertex_used', 1)), + ('wrong_prior_added_complete_invoice', lambda o, i: i['retained_prior_overcharge'].__setitem__('added_complete_new_pervertex', 1)), + ('wrong_finite_router_bits', lambda o, i: i['finite'].__setitem__('router_bits', 1)), + ('wrong_finite_literal_bits', lambda o, i: i['finite'].__setitem__('literal_bits', 1)), + ('wrong_finite_physical_stock_bits', lambda o, i: i['finite'].__setitem__('physical_stock_bits', 1)), + ('wrong_finite_row_coefficient', lambda o, i: i['finite'].__setitem__('physical_row_coefficient', 1)), + ('reordered_complete_calls', reordered_calls), + ('understated_explicit_idle_remainders', lambda o, i: o.__setitem__('explicit_idle_remainder_children', o['explicit_idle_remainder_children']-1)), + ('understated_actual_chart_types', lambda o, i: o.__setitem__('actual_73column_sigmas', o['actual_73column_sigmas']-1)), + ('wrong_cross_replica_role_count', lambda o, i: o.__setitem__('cross_replica_helper_roles', o['cross_replica_helper_roles']-1)), + ('old_no_cold_wrapper_counts_selfconsistent', no_cold_wrappers), + ] + + def resync(i, c): + p = i['providers'][c['provider_id']] + c['program_sha256'] = p['program_hashes'][c['orientation']] + c['entering_helpers'], c['entrance_rank'] = p['entering_helpers'], p['entrance_rank'] + for name in ('events','macros','real_component_primitives','coefficient_work_primitive_count','pre_wrappers','post_wrappers'): + c[name] = p['local'][c['orientation']][name] + + # Every provider gets the full per-provider control set, substituting a partner provider where needed. + for P in PIDS: + Qp = partner(P) + widths = invoice['providers'][P]['widths'] + + def forged_program_hash(o, i, P=P): + i['providers'][P]['program_hashes']['forward'] = '0' * 64 + for c in i['selected_calls']: + if c['provider_id'] == P: + c['program_sha256'] = '0' * 64 + + def wrong_selected_call(o, i, P=P): + c = next(c for c in i['selected_calls'] if c['provider_id'] == P) + d = next(d for d in i['selected_calls'] if d['provider_id'] != P and (d['stage'] - c['stage']) % 2 == 0) + c['stage'], d['stage'], c['replica'], d['replica'] = d['stage'], c['stage'], d['replica'], c['replica'] + + def stale_program(o, i, P=P, Qp=Qp): + p = i['providers'][P] + p['program_hashes'] = copy.deepcopy(i['providers'][Qp]['program_hashes']) + for c in i['selected_calls']: + if c['provider_id'] == P: + c['program_sha256'] = p['program_hashes'][c['orientation']] + + def stale_profile(o, i, P=P, Qp=Qp): + p = i['providers'][P] + p['paid_profile'] = copy.deepcopy(i['providers'][Qp]['paid_profile']) + p['children'] = sum(p['paid_profile'].values()) + + def moved(o, i, P=P): + a = next(c for c in i['selected_calls'] if c['provider_id'] == P) + b = next(c for c in i['selected_calls'] if c['provider_id'] != P and c['orientation'] == a['orientation']) + a['provider_id'], b['provider_id'] = b['provider_id'], a['provider_id'] + resync(i, a); resync(i, b) + + def compensating(o, i, P=P, Qp=Qp): + # Two dishonest profiles that cancel exactly in the dispatch-weighted aggregate. + g = math.gcd(COUNTS[P], COUNTS[Qp]); dp, dq = COUNTS[Qp] // g, COUNTS[P] // g + p, q = i['providers'][P], i['providers'][Qp] + p['paid_profile']['1'] += dp; q['paid_profile']['1'] -= dq + p['children'] += dp; q['children'] -= dq + + def forged_recipe(o, i, P=P): + name = 'CLIFFORD-RECIPES.json' + i['providers'][P]['artifacts'][name] = '0'*64 + o['source_artifacts']['providers/'+P+'/'+name] = '0'*64 + + def forged_phase(o, i, P=P): + i['providers'][P]['semantic_artifact_sha256']['CLIFFORD-REVIEW.json'] = '0'*64 + o['provider_phase_semantic_sha256'][P] = i['provider_phase_semantic_sha256'][P] = '0'*64 + + controls += [ + (P + ':missing_provider', lambda o, i, P=P: i['providers'].pop(P)), + (P + ':missing_backward_orientation', lambda o, i, P=P: i['providers'][P]['local'].pop('backward')), + (P + ':unpaid_scalar_primitive', lambda o, i, P=P: i['providers'][P]['local']['forward'].__setitem__('real_component_primitives', i['providers'][P]['local']['forward']['real_component_primitives'] - 1)), + (P + ':wrong_local_artifact_binding', lambda o, i, P=P: i['providers'][P]['artifacts'].__setitem__('LOCAL-PROGRAMS.json.gz', '0' * 64)), + (P + ':false_dirty_restoration', lambda o, i, P=P: i['providers'][P]['local']['backward'].__setitem__('all_dirty_helper_columns_restored', False)), + (P + ':wrong_declared_provider_count', lambda o, i, P=P: i['provider_counts'].__setitem__(P, i['provider_counts'][P] + 1)), + (P + ':wrong_local_compiler', lambda o, i, P=P: i['providers'][P].__setitem__('compiler', 1)), + (P + ':wrong_local_adapter_charge', lambda o, i, P=P: i['providers'][P].__setitem__('local_adapters', 1)), + (P + ':wrong_local_primitive_bound', lambda o, i, P=P: i['providers'][P].__setitem__('local_primitive_bound', 1)), + (P + ':forged_provider_and_call_program_hash', forged_program_hash), + (P + ':provider_at_wrong_call', wrong_selected_call), + (P + ':stale_partner_program_consistent_call_hashes', stale_program), + (P + ':stale_partner_profile_consistent_child_total', stale_profile), + (P + ':relocated_against_partner_same_counts', moved), + (P + ':compensating_false_profiles_with_' + Qp, compensating), + (P + ':synchronized_forged_source_recipe_hash', forged_recipe), + (P + ':synchronized_forged_phase_review_semantics', forged_phase), + ] + # Width order and inventory: swap the first helper of every pair of distinct widths (same inventory), + # and shift one unit between them (same total). + first = {} + for h, w in enumerate(widths): + first.setdefault(w, h) + for wa, wb in itertools.combinations(sorted(first), 2): + def swap(o, i, P=P, a=first[wa], b=first[wb]): + w = i['providers'][P]['widths']; w[a], w[b] = w[b], w[a] + def shift(o, i, P=P, a=first[wa], b=first[wb]): + w = i['providers'][P]['widths']; w[a] += 1; w[b] -= 1 + controls.append((P + ':width_order_swap_%d_%d' % (wa, wb), swap)) + controls.append((P + ':width_inventory_shift_%d_%d' % (wa, wb), shift)) + for h in (270, 282, 294, 306): + def cold_swap(o, i, P=P, h=h): + w = i['providers'][P]['widths']; j = w.index(9); w[h], w[j] = w[j], w[h] + controls.append((P + ':cold_helper_width_swap_%d' % h, cold_swap)) + rejected = [] + accepted = [] + for name, mutate in controls: + o, i = copy.deepcopy(owner), copy.deepcopy(invoice) + mutate(o, i) + oh = digest(o) + i['owner_audit_sha256'] = oh + try: + assemble(o, i, oh, digest(i)) + except (AssertionError, KeyError): + rejected.append(name) + else: + # Discovery has no pinned values to reject spec-only mutations; the strict run must reject every control. + if not DISCOVER: + raise AssertionError('Invalid admission receipt accepted: ' + name) + accepted.append(name) + try: + assemble(owner, invoice, '0' * 64, sha(invoice_path)) + except AssertionError: + rejected.append('wrong_owner_receipt_hash') + else: + raise AssertionError('Wrong owner digest accepted') + pin('expected.assembly_controls_rejected', len(rejected)) + assert baseline['controls'] == ['next_grid', 'zero_eta', 'zero_beta', 'unit_beta'] + assert baseline['conservative_controls'] == baseline['controls'] + assert baseline['surcharge_model'] == {'complex': False, 'bit': True} + assert len(baseline['model_controls']) == 2 + return dict( + status='PASS_EXACT_MIXED_048_ALLCOLD_NATIVE_ASSEMBLY_ADMISSION_NEGATIVE_CONTROLS', + valid_receipt_kappa=baseline['kappa'], + input_sha256=baseline['input_sha256'], + assembler_sha256=sha(Path(__file__).resolve().parent / 'assemble.py'), + rejected_controls=rejected, + discovery_accepted_controls=accepted, + exact_outer_controls=baseline['controls'], + conservative_outer_controls=baseline['conservative_controls'], + recurrence_model_controls=baseline['model_controls'], + scope='Complete receipt schema; ordered widths and both reflected providers; exact program, work and paid-profile binding; independently recounted compiler, conservative envelope and finite inequalities. Does not replace fresh physical replay.', + ) + + +if __name__ == '__main__': + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument('--source-package', type=Path, required=True) + ap.add_argument('--owner', type=Path, required=True) + ap.add_argument('--invoice', type=Path, required=True) + ap.add_argument('--out', type=Path, required=True) + a = ap.parse_args() + assert not a.out.exists() + result = verify(a.owner, a.invoice, a.source_package) + a.out.write_text(json.dumps(result, indent=2) + '\n') + print(result['status'], len(result['rejected_controls'])) diff --git a/research/complex-571-hpe46/code/audit_allcold.py b/research/complex-571-hpe46/code/audit_allcold.py new file mode 100644 index 0000000000..550289ed78 --- /dev/null +++ b/research/complex-571-hpe46/code/audit_allcold.py @@ -0,0 +1,232 @@ +"""OpenAI Codex independent serialized ASYNCHRONOUS controller/spectator audit. +Imports no emitter, optimizer, expander, edge-coloring, or source hosting code. +CLI: BASE HOSTED REPORT [--mutation-controls] +Each provider is independently read from BASE/providers, never from a baseline width histogram. +OpenAI Codex two-provider width-seven extension; retains all inherited independent controller checks. +The exact 63 width-seven and 9 plain calls are frozen below. +""" +import sys,json,gzip,hashlib,copy +assert __debug__, 'Assertions must remain enabled' +from pathlib import Path +from collections import Counter,defaultdict +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * +from generated_identity import artifact_identities +BASE,OUT,REPORT=map(lambda p:Path(p).resolve(),sys.argv[1:4]);read=lambda p:json.loads(gzip.decompress(p.read_bytes())if p.suffix=='.gz'else p.read_bytes()) +parent=read(BASE/'split-centres/GLOBAL-TEMPLATE.json.gz') +ph=read(BASE/'work/complex-nine-native/DATA-PHASES.json') +ct=read(OUT/'GLOBAL-TEMPLATE.json.gz');summary=read(OUT/'HOSTED.json') +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +provider_ids=PIDS +providers={};registry={};phase_semantic_hashes={};artifact_semantic_hashes={} +required_artifacts={'work/complex-nine-native/DATA-PHASES.json'} +provider_files=('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json', + 'INDEPENDENT-LOCAL-REPLAY.json','RESIDUAL-ADAPTERS.json','CLIFFORD-RECIPES.json','CLIFFORD-REVIEW.json') +for pid in provider_ids: + p=BASE/'providers'/pid + c=read(p/'CANONICAL-WORD.json.gz');checks=read(p/'LOCAL-CHECKS.json') + programs=read(p/'LOCAL-PROGRAMS.json.gz');replay=read(p/'INDEPENDENT-LOCAL-REPLAY.json') + phase=read(p/'CLIFFORD-REVIEW.json');adapters=read(p/'RESIDUAL-ADAPTERS.json')['recipes'] + widths=[len(c['frames'][c['final'][2*c['v']+h]])-len(c['frames'][c['start'][2*c['v']+h]])for h in range(c['R'])] # HPE: residual width |final|-|start| + assert all(widths[h]==8 for h in (270,282,294,306));pin('providers.%s.inventory'%pid,{str(k):v for k,v in sorted(Counter(widths).items())}) + canonical_sha=sha(p/'CANONICAL-WORD.json.gz');programs_sha=sha(p/'LOCAL-PROGRAMS.json.gz') + assert replay['status']=='PASS_INDEPENDENT_LOCAL_SCALAR_FRAME_AND_WRAPPER_REPLAY' + assert replay['canonical_word_sha256']==canonical_sha and replay['local_programs_sha256']==programs_sha + assert replay['v']==c['v'] and replay['helpers']==c['R'] + assert set(programs)==set(checks)==set(replay['local'])==set(replay['paid_profiles'])=={'forward','backward'} + for orientation,events in programs.items(): + ck=checks[orientation];rr=replay['local'][orientation] + assert hashlib.sha256(json.dumps(events,sort_keys=True,separators=(',',':')).encode()).hexdigest()==ck['sha256'] + assert ck['events']==len(events) and ck['all_columns']==2*c['v']+c['R'] + assert ck['private_centers_cleared'] and ck['private_coefficient_stream_cleared_after_each_macro'] + assert rr['all_exact_columns']==2*c['v']+c['R'] and rr['private_work_erased'] + literal=Counter(e[-1]for e in events if e[0]in('climb','center')) + assert dict(literal)=={int(r):n for r,n in ck['paid_profile'].items()}=={int(r):n for r,n in c['local_profile'].items()} + assert ck['paid_profile']==replay['paid_profiles'][orientation] + assert phase['canonical_word_sha256']==canonical_sha and phase['recipe_sha256']==sha(p/'CLIFFORD-RECIPES.json') + assert phase['all_child_equalities_include_global_phase'] + artifact_semantic_hashes[pid]=artifact_identities(p) + pin('providers.%s.artifact_semantic_sha256'%pid,artifact_semantic_hashes[pid]) + phase_semantic_hashes[pid]=artifact_semantic_hashes[pid]['CLIFFORD-REVIEW.json'] + for h,w in enumerate(widths): + assert 0>i)&1==0);a=q^(1<>i&1 else 0)for i in order]+[1<2*max(paid)**2 + return dict(profile=dict(sorted(paid.items())),mass=mass,hosted=HOSTED,entering=entering,cross_replica=cross,sigma_digest=digest.hexdigest(),sigmas=sigmas,idle_remainders=len(wanted),busy_family_checks=len(roles),invocations=72) + +r=audit(ct);raw=gzip.decompress((OUT/'GLOBAL-TEMPLATE.json.gz').read_bytes());assert hashlib.sha256(raw).hexdigest()==summary['template_sha256'];assert r['profile']=={int(k):v for k,v in summary['global_profile'].items()};assert r['sigmas']==read(OUT/'ACTUAL-SIGMAS.json.gz');assert r['sigma_digest']==summary['sigma_stream_sha256'] +assert all(hashlib.sha256((BASE/name).read_bytes()).hexdigest()==value for name,value in summary['source_artifacts'].items()) +controls=[] +def reject(name,mut): + if '--mutation-controls' not in sys.argv[4:]:return + q=copy.deepcopy(ct);mut(q) + try:audit(q) + except(AssertionError,KeyError,IndexError,ValueError,TypeError):controls.append(name) + else:raise AssertionError('ACCEPTED '+name) +enter=lambda q:next(o for c in q['calls']for o in c['owners'][(2*V):]if o[1][0]==4) +reject('alias two whole owners',lambda q:q['calls'][0]['owners'].__setitem__((2*V+1),q['calls'][0]['owners'][(2*V)])) +reject('helper on active data family',lambda q:q['calls'][0]['owners'][(2*V)].__setitem__(0,q['calls'][0]['owners'][0][0])) +reject('owner in private namespace',lambda q:q['calls'][0]['owners'][(2*V)].__setitem__(0,DATA)) +reject('wrong residual width',lambda q:enter(q)[1].__setitem__(3,enter(q)[1][3]-1)) +reject('wrong spectator coordinate',lambda q:enter(q)[1][4].__setitem__(0,72)) +reject('omit idle remainder',lambda q:q['idle_children'].pop()) +reject('understate physical reserve',lambda q:q.__setitem__('physical',PHYSICAL-1)) +# Per-provider substitution controls: every provider is swapped against a partner provider. +for P in provider_ids: + Qp=partner(P) + at_p=lambda q,P=P:next(c for c in q['calls']if c['provider_id']==P) + diff=[h for h in range(R)if providers[P]['widths'][h]!=providers[Qp]['widths'][h]] + narrow=next(h for h in range(R)if providers[P]['widths'][h]<9) + reject(P+': wrong provider at its invocation',lambda q,P=P,Qp=Qp,at_p=at_p:at_p(q).__setitem__('provider_id',Qp)) + reject(P+': stale per-call local program hash',lambda q,Qp=Qp,at_p=at_p:at_p(q).__setitem__('local_program_sha256',registry[Qp]['local_program_checks'][at_p(q)['orientation']]['sha256'])) + reject(P+': stale serialized provider program',lambda q,P=P,Qp=Qp:q['local_providers'][P].__setitem__('local_programs',registry[Qp]['local_programs'])) + reject(P+': unbound residual adapter hash',lambda q,P=P:q['local_providers'][P].__setitem__('residual_adapter_sha256','0'*64)) + if diff:reject(P+': partner width in provider width registry',lambda q,P=P,Qp=Qp,h=diff[0]:q['local_providers'][P]['widths'].__setitem__(h,providers[Qp]['widths'][h])) + reject(P+': wrong per-call residual width',lambda q,at_p=at_p,h=narrow:at_p(q)['owners'][2*V+h][1].__setitem__(3,at_p(q)['owners'][2*V+h][1][3]-1)) + reject(P+': wrong sweep provider',lambda q,P=P,Qp=Qp:next(e for e in q['execution_schedule']if e['kind']=='local_cover_sweep'and DISPATCH[e['stage'],e['replica']]==P).__setitem__('provider_id',Qp)) + reject(P+': entering helper width silently restored to nine',lambda q,P=P,h=narrow:q['local_providers'][P]['widths'].__setitem__(h,9)) +report=dict(status='PASS_INDEPENDENT_ASYNC_WHOLE_OWNER_CONTROLLER_PHASES_AND_SPECTATORS',template_sha256=summary['template_sha256'],complex_template_sha256=summary['template_sha256'],complex_live=DATA,complex_profile=r['profile'],complex_hosted_residuals=HOSTED,physical=PHYSICAL,rank_mass=r['mass'],deficit=2560,entering_helper_roles=r['entering'],cross_replica_helper_roles=r['cross_replica'],one_owner_per_complete_invocation=True,helper_busy_family_window_checks=r['busy_family_checks'],complete_invocations=r['invocations'],actual_orthogonal_73column_maps=len(r['sigmas']),actual_sigma_stream_sha256=r['sigma_digest'],all_actual_residual_and_spectator_charts=True,idle_remainders=r['idle_remainders'],mutations_rejected=controls,mutation_controls_run='--mutation-controls' in sys.argv[4:],provider_phase_semantic_sha256=phase_semantic_hashes,provider_artifact_semantic_sha256=artifact_semantic_hashes,widths_by_provider={pid:dict(sorted(Counter(providers[pid]['widths']).items()))for pid in provider_ids},provider_counts=dict(Counter(c['provider_id']for c in ct['calls'])),all_provider_program_phase_and_wrapper_bindings=True,scope='Independent exact asynchronous chronology, per-replica phase projection, owner/chart/paid-profile audit. Uses per-invocation local providers bound by exact scalar, phase and residual-wrapper receipts; all-size compilation and complete coefficient invoice are separate inherited obligations.') +REPORT.parent.mkdir(parents=True,exist_ok=True) +REPORT.write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report,indent=2)) + +owners=dict(status='PASS_INDEPENDENT_ASYNC_OWNERS_AND_PROFILE',template_sha256=summary['template_sha256'],paid_profile=r['profile'],live=DATA,physical=PHYSICAL,rank_mass=r['mass'],deficit=2560,hosted_residuals=HOSTED,banked_residuals=0,all_live_owners_per_call_distinct=True,owners_per_call=N,actual_helper_owner_charts=HOSTED,actual_73column_sigmas=len(r['sigmas']),cross_replica_helper_roles=r['cross_replica'],explicit_idle_remainder_children=r['idle_remainders'],source_idle_children_charged=sum(x['replicas']for x in parent['idle_children']),source_artifacts=summary['source_artifacts'],provider_phase_semantic_sha256=phase_semantic_hashes,provider_artifact_semantic_sha256=artifact_semantic_hashes,controller_audit_sha256=hashlib.sha256(REPORT.read_bytes()).hexdigest()) +(REPORT.parent/'OWNERS-AND-PROFILE.json').write_text(json.dumps(owners,indent=2)+'\n') + +# Literal residual frames are a compact export of the already checked offsets, +# not another global replay. Every row names its actual inherited axes. +frames=[] +for z in ct['idle_children']: + axes=list(map(int,ph['recipes'][z['port']]['idle_children'][z['child']]['orthogonal_axes'])) + tail=axes[z['pending_offset']:] + assert len(tail)==z['rank'] + frames.append(dict(z,orthogonal_axes=tail)) +frame_raw=json.dumps(frames,sort_keys=True,separators=(',',':')).encode() +portable=bytearray(gzip.compress(frame_raw,mtime=0));portable[9]=255 +(OUT/'IDLE-REMAINDER-FRAMES.json.gz').write_bytes(bytes(portable)) +frame_receipt=dict(status='PASS_LITERAL_IDLE_REMAINDER_FRAMES',template_sha256=summary['template_sha256'], + uncompressed_frames_sha256=hashlib.sha256(frame_raw).hexdigest(),children=len(frames), + rank_profile=dict(sorted(Counter(z['rank']for z in frames).items())), + source_data_phase_sha256=hashlib.sha256((BASE/'work/complex-nine-native/DATA-PHASES.json').read_bytes()).hexdigest(), + scope='Actual orthogonal axes after the independently checked whole-owner prefix in each inherited pending child.') +(REPORT.parent/'IDLE-REMAINDER-FRAMES.json').write_text(json.dumps(frame_receipt,indent=2)+'\n') + diff --git a/research/complex-571-hpe46/code/bind_providers_portable.py b/research/complex-571-hpe46/code/bind_providers_portable.py new file mode 100644 index 0000000000..d859aeba0a --- /dev/null +++ b/research/complex-571-hpe46/code/bind_providers_portable.py @@ -0,0 +1,66 @@ +"""Bind freshly verified plain and width-seven four-cold providers to the frozen literal owner plan. +Prepared with OpenAI Codex assistance; Apache-2.0. All byte-stable native +files are pinned to the plan. Only validated phase-receipt timing/serialization +and directory fields are rebound; no dispatch, width or owner choice changes. +""" +import argparse,copy,gzip,hashlib,json,shutil +from collections import Counter +from pathlib import Path +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * +from generated_identity import artifact_identities +assert __debug__, 'Assertions required' +ap=argparse.ArgumentParser(description=__doc__) +for name in ('baseline','plan','out'):ap.add_argument('--'+name,type=Path,required=True) +ap.add_argument('--provider',action='append',required=True,help='PID=DIR');a=ap.parse_args();assert not a.out.exists();a.out.mkdir(parents=True) +def read(p):return json.loads(gzip.decompress(p.read_bytes())if p.suffix=='.gz'else p.read_bytes()) +def sha(p):return hashlib.sha256(p.read_bytes()).hexdigest() +base=a.out/'base';shutil.copytree(a.baseline/'complex-global/base',base) +ap2=dict(x.split('=',1)for x in a.provider);dirs={k:Path(v)for k,v in ap2.items()};assert set(dirs)==set(PIDS) +for pid,src in dirs.items():shutil.copytree(src,base/'providers'/pid) +pin('data.plan_sha256',sha(a.plan)) +plan=read(a.plan);original=copy.deepcopy(plan);sources={} +assert set(plan['provider_registry'])==set(dirs) +assert {(c['stage'],c['replica']):c['provider']for c in plan['provider_calls']}==DISPATCH,'PLAN dispatch differs from spec dispatch' +stable=('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json','INDEPENDENT-LOCAL-REPLAY.json','CLIFFORD-RECIPES.json','RESIDUAL-ADAPTERS.json') +for pid,desc in plan['provider_registry'].items(): + d=base/'providers'/pid + word,program,checks,native,phase=[read(d/name)for name in('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json','INDEPENDENT-LOCAL-REPLAY.json','CLIFFORD-REVIEW.json')] + assert (word['v'],word['h'],word['R'],len(word['centers']))==(112,9,504,8) + assert word['ports']==desc['ports'] and word['centers']==desc['centers'] + widths=[len(word['frames'][word['final'][r]])-len(word['frames'][word['start'][r]])for r in range(224,728)] # HPE: residual width |final|-|start| + assert all(widths[h]==8 for h in (270,282,294,306)) + assert widths==desc['widths'];pin('providers.%s.inventory'%pid,{str(k):v for k,v in sorted(Counter(widths).items())}) + assert native['status']=='PASS_INDEPENDENT_LOCAL_SCALAR_FRAME_AND_WRAPPER_REPLAY' + pin('providers.%s.native_negative_controls'%pid,len(native['negative_controls_rejected'])) + assert native['canonical_word_sha256']==sha(d/'CANONICAL-WORD.json.gz') and native['local_programs_sha256']==sha(d/'LOCAL-PROGRAMS.json.gz') + assert phase['status']=='PASS_NEW_WORD_EXACT_LOCAL_PHASE_RECIPES' + assert phase['canonical_word_sha256']==sha(d/'CANONICAL-WORD.json.gz') and phase['recipe_sha256']==sha(d/'CLIFFORD-RECIPES.json') + assert phase['all_child_equalities_include_global_phase'] is True and phase['endpoint_adapters']==224 + pin('providers.%s.phase_edges'%pid,phase['directed_edges']) + assert set(program)==set(checks)=={'forward','backward'} + expected={int(r):n for r,n in checks['forward']['paid_profile'].items()};pin('providers.%s.expected_profile'%pid,checks['forward']['paid_profile']) + for orientation,events in program.items(): + profile=Counter() + for e in events: + if e[0]=='climb':profile[e[5]]+=1 + elif e[0]=='center':profile[e[4]]+=1 + assert dict(profile)==expected=={int(r):n for r,n in checks[orientation]['paid_profile'].items()}=={int(r):n for r,n in native['paid_profiles'][orientation].items()} + assert hashlib.sha256(json.dumps(events,separators=(',',':')).encode()).hexdigest()==checks[orientation]['sha256'] + identities=artifact_identities(d) + pin('providers.%s.artifact_semantic_sha256'%pid,identities) + assert identities==desc['artifact_semantic_sha256'] + for name in ('LOCAL-CHECKS.json','CLIFFORD-RECIPES.json','RESIDUAL-ADAPTERS.json'): + assert sha(d/name)==desc['artifact_sha256'][name],(pid,name,'changed non-reference artifact') + for c in plan['provider_calls']: + if c['provider']==pid: + assert c['orientation']==('forward'if c['stage']%2==0 else'backward') + assert c['local_program_sha256']==checks[c['orientation']]['sha256'] + desc['directory']='providers/'+pid + desc['artifact_sha256']={name:sha(d/name)for name in desc['artifact_sha256']} + sources[pid]=dict(artifact_sha256=desc['artifact_sha256'],canonical_content_sha256=hashlib.sha256(json.dumps(word,sort_keys=True,separators=(',',':')).encode()).hexdigest(),all_phase_edges=phase['directed_edges']) +plan['runtime_source_plan_sha256']=sha(a.plan) +(a.out/'PLAN.json').write_text(json.dumps(plan,indent=2)+'\n') +receipt=dict(status='PASS_FROZEN_048_ALLCOLD_DISPATCH_FRESH_PROVIDER_BINDING',source_plan_sha256=sha(a.plan),runtime_plan_sha256=sha(a.out/'PLAN.json'),providers=sources,only_rebound_fields=['provider_registry.directory','provider_registry.artifact_sha256','runtime_source_plan_sha256']) +(a.out/'BINDING.json').write_text(json.dumps(receipt,indent=2)+'\n') +print(receipt['status']) diff --git a/research/complex-571-hpe46/code/build_gate_moves.py b/research/complex-571-hpe46/code/build_gate_moves.py new file mode 100644 index 0000000000..03114099c6 --- /dev/null +++ b/research/complex-571-hpe46/code/build_gate_moves.py @@ -0,0 +1,61 @@ +"""Move commuting gates, then apply source-bound frame coalescences; the scalar map stays identical. +Extends PR583's build_frames.py (chafreaky, OpenAI Codex assisted, Apache-2.0) with commuting gate moves found by +Claude Code research agents. Apache-2.0. + +Recipe: input_content_sha256, before/after profiles, moves [{section, from, to}] (applied in order; every gate the +moved gate passes must commute with it), and changes [{section, index, before, after}] (indices after the moves; +each change only raises the gate frame and must save exactly {1:-2, 2:+1}). The cleanup section is rebuilt with the +inherited rule (the input word must already satisfy it), and the helper responses must be unchanged. +""" +from pathlib import Path +import argparse,copy,gzip,hashlib,json,sys +from collections import Counter +assert __debug__,'Assertions required' +ap=argparse.ArgumentParser();ap.add_argument('--input',type=Path,required=True);ap.add_argument('--recipe',type=Path,required=True);ap.add_argument('--gk-dir',type=Path,required=True);ap.add_argument('--out',type=Path,required=True);a=ap.parse_args();assert not a.out.exists() +sys.path.insert(0,str(a.gk_dir));import gk_word as G,gk_common as C +G.V=C.V=112;G.DATA=C.DATA=7168 +raw=json.loads(gzip.decompress(a.input.read_bytes()));recipe=json.loads(a.recipe.read_text());enc=lambda x:json.dumps(x,sort_keys=True,separators=(',',':')).encode();sha=lambda x:hashlib.sha256(x).hexdigest() +assert sha(enc(raw))==recipe['input_content_sha256'];before=G.profile(raw);assert dict(before)=={int(r):n for r,n in recipe['before'].items()} +def regs(e):return(e[1],e[2])if e[0]=='add'else(e[1],) +def commute(x,y): + """Two additions commute unless one writes the other's source; any other pair must touch disjoint registers.""" + if x[0]=='add'and y[0]=='add':return x[1]!=y[2]and y[1]!=x[2] + return not set(regs(x))&set(regs(y)) +cleanup=lambda w:[G.inverse(e,G.FULL)for e in reversed(w['A']+w['B'])if not 112<=e[1]<224] +assert raw['cleanup']==cleanup(raw),'input cleanup is not the inherited inverse rule' +w=copy.deepcopy(raw);moved=[] +for m in recipe['moves']: + L=w[m['section']];i,j=m['from'],m['to'];assert i!=j and 0<=ii else range(j,i);assert all(commute(L[i],L[k])for k in passed),'noncommuting move %s'%m + L.insert(j,L.pop(i));moved.append(dict(m,passed=len(passed))) +w['cleanup']=cleanup(w);responses=G.responses(w);assert responses==G.responses(raw),'scalar responses changed by the moves' +assert G.profile(w)==before,'moves alone changed the profile';trace=[] +for change in recipe['changes']: + part,i=change['section'],change['index'];assert w[part][i]==change['before'];assert change['before'][:-1]==change['after'][:-1] + w[part][i]=change['after'];after=G.profile(w);delta={r:after[r]-before[r]for r in set(after)|set(before)if after[r]!=before[r]};assert delta=={1:-2,2:1};trace.append(dict(section=part,index=i,delta=delta));before=after +w['cleanup']=cleanup(w) +assert dict(G.profile(w))=={int(r):n for r,n in recipe['after'].items()} +for key in raw: + if key not in ('A','B','cleanup','report'):assert w[key]==raw[key] +for part in ('A','B'):assert sorted(map(enc,(e[:-1]for e in w[part])))==sorted(map(enc,(e[:-1]for e in raw[part]))) +assert G.widths_of(w)==G.widths_of(raw);responses=G.responses(w);assert responses==G.responses(raw) +assert all(not responses[int(r)-224]for r in w['start_extra']) +# Fresh negative controls: every omitted coalescence loses the new profile, every full-space frame replacement violates +# a chain/cut bound, and every move reverted before its coalescence is rejected. +rejected=[] +for c in recipe['changes']: + z=copy.deepcopy(w);z[c['section']][c['index']]=c['before'];assert G.profile(z)!=G.profile(w);rejected.append('omission-%s-%d'%(c['section'],c['index'])) + z=copy.deepcopy(w);z[c['section']][c['index']][-1]=list(G.FULL) + try:G.profile(z) + except AssertionError:rejected.append('overpromotion-%s-%d'%(c['section'],c['index'])) + else:raise AssertionError('Invalid frame accepted') +for m in reversed(recipe['moves']): + z=copy.deepcopy(w);L=z[m['section']];L.insert(m['from'],L.pop(m['to'])) + try:ok=G.profile(z)==G.profile(w) + except AssertionError:ok=False + assert not ok,'unmoved coalescence accepted';rejected.append('unmoved-%s-%d'%(m['section'],m['from'])) +w['report'].update(local_profile=dict(G.profile(w)),local_rank_mass=sum(r*n for r,n in G.profile(w).items()),status='GATE_MOVE_FRAME_COALESCENCES_PENDING_NATIVE_PHASE_ADMISSION', + # descriptive inventory fields recomputed from the actual widths (as PR586's adapted PR583 constructor does) + width_inventory={str(k):v for k,v in sorted(Counter(G.widths_of(w)).items())},entering_helpers=sum(v<9 for v in G.widths_of(w)),entrance_rank=sum(9-v for v in G.widths_of(w))) +a.out.mkdir(parents=True);(a.out/'FULL-WORD.json.gz').write_bytes(G.dump(w));receipt=dict(status='PASS_EXACT_GATE_MOVE_FRAME_COALESCENCES',input_content_sha256=sha(enc(raw)),output_content_sha256=sha(enc(w)),profile_before=recipe['before'],profile_after=recipe['after'],moves=moved,changes=trace,negative_controls_rejected=rejected,all_scalar_responses_unchanged=True,all_entering_helper_responses_zero=True,helper_widths_unchanged=True,cleanup_rebuilt_by_inherited_rule=True,scope='Construction, commutation, frame/profile and scalar response checks only; native, phase and global admission are separate.') +(a.out/'FRAME-CONSTRUCTION.json').write_text(json.dumps(receipt,indent=2,sort_keys=True)+'\n');print(json.dumps(receipt,indent=2)) diff --git a/research/complex-571-hpe46/code/build_hpe.py b/research/complex-571-hpe46/code/build_hpe.py new file mode 100644 index 0000000000..f306369ed4 --- /dev/null +++ b/research/complex-571-hpe46/code/build_hpe.py @@ -0,0 +1,113 @@ +"""Hyperplane-ended helpers (HPE) constructor. Apache-2.0. Prepared with Claude Code assistance. + +usage: build_hpe.py --input FULL-WORD.json.gz --recipe RECIPE.json --out DIR + +RECIPE: {"changes": [{"helper": h, "cleanup_index": i, "frame": [raw vectors]}, ...], "output_content_sha256": hex}. +Each change must be an admissible early-cleanup move: + * h is an entering helper (start_extra) touched by exactly one cleanup gate, cleanup[i]; + * cleanup[i] is the first cleanup gate on each of its registers (so it commutes with the whole skipped cleanup prefix); + * frame == join of the registers' last A/B frames and has dimension < 9. +The output word gets early_cleanup [[i, U]], helper_final {h: U} and the exact paid profile (only the two registers' +final chains change: h ends at U instead of FULL; the partner climbs through U). Exactness of the reordered program, +the frame chains and the profile are re-checked independently by hpe_audit_and_transport.py; the paired control audit +is controls_hpe_atc.py.""" +import argparse, gzip, hashlib, json +from collections import Counter +from pathlib import Path + + +def span(vs): + p = {} + for x in vs: + for k in sorted(p, reverse=True): + if x >> k & 1: x ^= p[k] + if x: + k = x.bit_length() - 1 + for j in p: + if p[j] >> k & 1: p[j] ^= x + p[k] = x + return [p[k] for k in sorted(p, reverse=True)] + + +def regs(e): return [e[1]] + ([e[2]] if e[0] == 'add' else []) + + +def last_frames(w): + v, R = w['report']['v'], w['report']['R']; n = 2*v + R + cur = [[] for _ in range(n)] + for i, p in enumerate(w['ports']): cur[i] = [p] + for r, f in w.get('start_extra', {}).items(): cur[int(r)] = list(f) + for part in ('A', 'B'): + for e in w[part]: + for r in regs(e): cur[r] = list(e[-1]) + return cur + + +def apply(w, changes): + assert 'early_cleanup' not in w and 'helper_final' not in w, 'input already has hyperplane-ended helpers' + v, R = w['report']['v'], w['report']['R']; n = 2*v + R + cur = last_frames(w); count = Counter(); first = {} + for i, e in enumerate(w['cleanup']): + for r in regs(e): count[r] += 1; first.setdefault(r, i) + lp = Counter({int(r): c for r, c in w['report']['local_profile'].items()}) + seen = set() + for z in changes: + h, i, U = z['helper'], z['cleanup_index'], z['frame'] + assert 2*v <= h < n and str(h) in w['start_extra'], ('not an entering helper', h) + assert count[h] == 1 and first[h] == i, ('helper must have exactly this one cleanup gate', h) + e = w['cleanup'][i]; rs = regs(e) + assert all(first[r] == i for r in rs), ('cleanup gate is not first on its registers', i) + assert not seen & set(rs), 'registers shared between changes'; seen |= set(rs) + assert span([x for r in rs for x in cur[r]]) == U and len(U) < 9, ('frame is not the join of the last frames', h) + for r in rs: # old: last -> FULL; new: last -> U (-> FULL for the partner) + d0 = 9 - len(span(cur[r])) + if d0: lp[d0] -= 1 + d1 = len(U) - len(span(cur[r])) + if d1: lp[d1] += 1 + if r != h and len(U) < 9: lp[9 - len(U)] += 1 + w['early_cleanup'] = [[z['cleanup_index'], z['frame']] for z in changes] + w['helper_final'] = {str(z['helper']): z['frame'] for z in changes} + w['report']['local_profile'] = {str(r): c for r, c in sorted(lp.items()) if c} + w['report']['local_rank_mass'] = sum(r*c for r, c in lp.items()) + if 'width_inventory' in w['report']: # descriptive metadata: one width-w helper becomes width w-(9-dim U) + inv = Counter({int(k): c for k, c in w['report']['width_inventory'].items()}) + for z in changes: + e = len(w['start_extra'][str(z['helper'])]); inv[9 - e] -= 1; inv[len(z['frame']) - e] += 1 + assert min(inv.values()) >= 0 + w['report']['width_inventory'] = {str(k): c for k, c in sorted(inv.items()) if c} + assert min(lp.values()) >= 0 + return w + + +def candidates(w): + v, R = w['report']['v'], w['report']['R']; n = 2*v + R + cur = last_frames(w); count = Counter(); first = {} + for i, e in enumerate(w['cleanup']): + for r in regs(e): count[r] += 1; first.setdefault(r, i) + out = [] + for h in range(2*v, n): + if count[h] != 1 or str(h) not in w.get('start_extra', {}): continue + i = first[h]; rs = regs(w['cleanup'][i]) + if any(first[r] != i for r in rs): continue + U = span([x for r in rs for x in cur[r]]) + if len(U) < 9: out.append(dict(helper=h, cleanup_index=i, frame=U)) + return out + + +if __name__ == '__main__': + ap = argparse.ArgumentParser(); ap.add_argument('--input', type=Path, required=True); ap.add_argument('--recipe', type=Path) + ap.add_argument('--out', type=Path); ap.add_argument('--nominate', type=Path, help='write a recipe with every candidate') + a = ap.parse_args() + w = json.loads(gzip.decompress(a.input.read_bytes())) + if a.nominate: + a.nominate.write_text(json.dumps(dict(changes=candidates(w), output_content_sha256=''), indent=1) + '\n', newline='\n') + raise SystemExit(0) + r = json.loads(a.recipe.read_bytes()) + w = apply(w, r['changes']) + raw = json.dumps(w, sort_keys=True, separators=(',', ':')).encode(); h = hashlib.sha256(raw).hexdigest() + assert h == r['output_content_sha256'], h + a.out.mkdir(parents=True, exist_ok=False) + (a.out/'FULL-WORD.json.gz').write_bytes(gzip.compress(raw, mtime=0)) + (a.out/'HPE-CONSTRUCTION.json').write_text(json.dumps(dict(status='PASS_HYPERPLANE_ENDED_HELPERS', helpers=[z['helper'] for z in r['changes']], + local_profile=w['report']['local_profile']), indent=1) + '\n', newline='\n') + print('PASS', len(r['changes']), 'hyperplane-ended helpers') diff --git a/research/complex-571-hpe46/code/build_hpe_closure.py b/research/complex-571-hpe46/code/build_hpe_closure.py new file mode 100644 index 0000000000..2b7b1e5764 --- /dev/null +++ b/research/complex-571-hpe46/code/build_hpe_closure.py @@ -0,0 +1,115 @@ +"""Generalised hyperplane-ended helpers (closure form). Recipe-driven build for the package: the chosen helpers and the tail are recomputed from the word and must equal the recipe. +""" +"""Generalised hyperplane-ended helpers: end every entering helper whose cleanup can run below FULL. +T = closure (under non-commuting precedence) of the chosen helpers' cleanup gates; T runs right after B in a greedy minimal-frame order; +the chosen helpers end at their last tail frame (must have dim < 9); everything else climbs to FULL and the rest of the cleanup runs at FULL. +Usage: build_hpe2.py IN.json.gz OUT_DIR [max_candidates]""" +import sys,gzip,json,math,hashlib +from collections import Counter,defaultdict +from pathlib import Path +F='/private/tmp/claude-501/-Users-sreekanthnair-Documents-Projects-nlogn/a545f491-8755-42a6-8a72-750f99423436/scratchpad/frontier' +sys.path.insert(0,F+'/pr568/research/complex-multicold/vendor/pr558/vendor/pr552/complex-local/static44/gk');import gk_common as C +import argparse +ap=argparse.ArgumentParser();ap.add_argument('--input',type=Path,required=True);ap.add_argument('--recipe',type=Path);ap.add_argument('--out',type=Path,required=True);ap.add_argument('--nominate',type=Path);a=ap.parse_args() +w=json.loads(gzip.decompress(a.input.read_bytes()));out=a.out;V=112;R=w['report']['R'];N=2*V+R;P=w['ports'] +assert 'early_cleanup' not in w +m=73.0;g=lambda r:r*math.log(m/r)if r>0 else 0 +def regs(e):return[e[1]]+([e[2]]if e[0]=='add'else[]) +def commute(x,y): + if x[0]=='add'and y[0]=='add':return x[1]!=y[2]and y[1]!=x[2] + return not set(regs(x))&set(regs(y)) +B=lambda vs:tuple(C.basis(vs)) +cur={r:(B([P[r]])if r=2*V and str(r)in w.get('start_extra',{})else()))for r in range(N)} +paidAB=Counter() +def climb(r,f): + f=B(f) + if cur[r]!=f: + assert B(list(cur[r])+list(f))==f,('nonmonotone',r);paidAB[len(f)-len(cur[r])]+=1;cur[r]=f +# centres' served-level climbs (as in gk_word.profile) are part of the local profile; compute them the same way +lev={int(t):B(E)for t,E in w.get('target_levels',{}).items()} +for part in('A','B'): + if part=='B': + for r,f in zip(w['centers'],w['center_frames']): + served=sorted({lev.get(e[1]-V,())for e in w['cut']if e[2]==r},key=lambda E:-len(E));o=B(f) + for Lv in served: + if Lv!=o:paidAB[len(o)-len(Lv)]+=1;o=Lv + for e in w[part]: + for r in regs(e):climb(r,e[-1]) +last=dict(cur);entering={r for r in range(2*V,N)if str(r)in w.get('start_extra',{})} +cl=w['cleanup'];n=len(cl);cnt=Counter() +for e in cl: + for r in regs(e):cnt[r]+=1 +pred=[set()for _ in range(n)] +for i,e in enumerate(cl): + for j in range(i): + if not commute(cl[j],e):pred[i].add(j) +gates_of=defaultdict(list) +for i,e in enumerate(cl): + for r in regs(e):gates_of[r].append(i) +def J(r):return len(B([x for q in {r}|{q for i in gates_of[r]for q in regs(cl[i])}for x in last[q]])) +cands=[h for h in range(2*V,N)if h in entering and J(h)<9] +MAXC=len(cands) +print('candidate entering helpers with partner-join dim < 9:',len(cands),'by #cleanup gates',Counter(cnt[h]for h in cands)) +def closure(gs): + T=set();stack=list(gs) + while stack: + i=stack.pop() + if i in T:continue + T.add(i);stack.extend(pred[i]) + return T +def schedule(T): + """greedy minimal-frame order of T respecting precedence; returns (order, frames per gate, final frames)""" + c=dict(last);indeg={i:len(pred[i]&T)for i in T};avail={i for i in T if indeg[i]==0};succ=defaultdict(list) + for i in T: + for j in pred[i]: + if j in T:succ[j].append(i) + order=[];fr={} + while avail: + i=min(avail,key=lambda i:(len(B([x for r in regs(cl[i])for x in c[r]])),i));avail.remove(i) + f=B([x for r in regs(cl[i])for x in c[r]]);fr[i]=f + for r in regs(cl[i]):c[r]=f + order.append(i) + for s in succ[i]: + indeg[s]-=1 + if indeg[s]==0:avail.add(s) + assert len(order)==len(T);return order,fr,c +# choose helpers greedily: add candidates one by one (by J then index), keep if it still ends below FULL and no chosen helper is spoiled +chosen=[] +for h in sorted(cands,key=lambda h:(J(h),h))[:MAXC]: + trial=chosen+[h];T=closure([i for q in trial for i in gates_of[q]]);order,fr,c=schedule(T) + if all(len(c[q])<9 for q in trial):chosen=trial +T=closure([i for q in chosen for i in gates_of[q]]);order,fr,c=schedule(T) +print('chosen hyperplane-ended helpers:',len(chosen),'| tail gates',len(T),'| registers touched by the tail',len({r for i in T for r in regs(cl[i])})) +# profile: A/B climbs + tail climbs + finals +paid=Counter(paidAB);c2=dict(last) +for i in order: + f=fr[i] + for r in regs(cl[i]): + if c2[r]!=f:paid[len(f)-len(c2[r])]+=1;c2[r]=f +hf={h:list(c2[h])for h in chosen} +for r in range(N): + fin=B(list(C.FULL))if(r=2*V)else B(list(__import__('gk_word').perp(P[r-V])))if False else None +for r in range(N): + if V<=r<2*V: + import gk_word as G;G.V=112;fin=B(list(G.perp(P[r-V]))) + elif r in hf:continue + else:fin=B(list(C.FULL)) + if c2[r]!=fin:paid[len(fin)-len(c2[r])]+=1 +phi=lambda pr:sum(n*g(r)for r,n in pr.items()) +ref=Counter({int(k):v for k,v in w['report']['local_profile'].items()}) +print('input local profile',dict(sorted(ref.items())),'Phi',round(phi(ref),2)) +print('new local profile',dict(sorted(paid.items())),'Phi',round(phi(paid),2),'delta',round(phi(paid)-phi(ref),2)) +inv=Counter({int(k):v for k,v in w['report']['width_inventory'].items()}) +for h in chosen:e=len(w['start_extra'][str(h)]);inv[9-e]-=1;inv[len(hf[h])-e]+=1 +print('width inventory',dict(sorted(inv.items())),'(hyperplane-ended:',len(chosen),')') +w['early_cleanup']=[[i,list(fr[i])]for i in order];w['helper_final']={str(h):v for h,v in sorted(hf.items())} +w['report']['local_profile']={str(r):c for r,c in sorted(paid.items())if c};w['report']['local_rank_mass']=sum(r*c for r,c in paid.items()) +w['report']['width_inventory']={str(k):v for k,v in sorted(inv.items())if v} +raw=json.dumps(w,sort_keys=True,separators=(',',':')).encode();digest=hashlib.sha256(raw).hexdigest() +rec=dict(helpers=sorted(chosen),early_cleanup=w['early_cleanup'],helper_final=w['helper_final'],output_content_sha256=digest) +if a.nominate:a.nominate.write_text(json.dumps(rec,indent=1)+'\n',newline='\n');raise SystemExit(0) +r=json.loads(a.recipe.read_bytes());assert r['helpers']==rec['helpers']and r['early_cleanup']==rec['early_cleanup']and r['helper_final']==rec['helper_final'],'recipe differs from the recomputed closure build' +assert r['output_content_sha256']==digest,digest +out.mkdir(parents=True,exist_ok=False);(out/'FULL-WORD.json.gz').write_bytes(gzip.compress(raw,mtime=0)) +(out/'HPE-CONSTRUCTION.json').write_text(json.dumps(dict(status='PASS_HYPERPLANE_ENDED_HELPERS_CLOSURE',helpers=rec['helpers'],tail_gates=len(rec['early_cleanup']),local_profile=w['report']['local_profile']),indent=1)+'\n',newline='\n') +print('PASS',len(chosen),'hyperplane-ended helpers (closure form), tail gates',len(rec['early_cleanup'])) diff --git a/research/complex-571-hpe46/code/emit_allcold.py b/research/complex-571-hpe46/code/emit_allcold.py new file mode 100644 index 0000000000..574de85b52 --- /dev/null +++ b/research/complex-571-hpe46/code/emit_allcold.py @@ -0,0 +1,144 @@ +"""Two-provider width-seven whole-owner derivative, adapted with OpenAI Codex assistance. +Based on PR514 and its credited PR484/507 lineage. +CLI: --base VERIFIED_VARIANT --owners ASYNC-OWNERS.json.gz --plan ASYNC-PLAN.json --out OUT +No optimizer or unpublished word builder runs. The frozen map explicitly names +one whole helper per family per complete invocation, plus borrowed spectators. +""" +import sys,json,gzip,hashlib,copy,argparse +from pathlib import Path +from collections import Counter,defaultdict +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * +parser=argparse.ArgumentParser(description=__doc__) +parser.add_argument('--base',type=Path,required=True);parser.add_argument('--owners',type=Path,required=True);parser.add_argument('--plan',type=Path,required=True);parser.add_argument('--out',type=Path,required=True) +a=parser.parse_args();BASE,MAP,PLAN,OUT=(p.resolve()for p in(a.base,a.owners,a.plan,a.out));assert not OUT.exists();OUT.mkdir(parents=True) +class OH: + @staticmethod + def idle_basis(q): + z=next(i for i in range(9)if not(q>>i)&1);u=q^(1<>i&1 else 0)for i in order]+[1<=0 and off+w<=rank[i] + assert z['time']==at[s,rep] and z['time'] in plan['windows'][f'{orp},{i}'][1] + B=OH.idle_basis(canon['ports'][port]);pending=list(map(int,ph['recipes'][port]['idle_children'][i]['orthogonal_axes']));assert len(pending)==rank[i] + occ=[B.index(v)for v in pending[off:off+w]];sp=OH.spectators(canon['ports'][port],pending,off,w)if w<9 else[] + order=occ+sp+[j for j in range(M)if j not in occ and j not in sp];assert len(order)==len(set(order))==M + sigma=[B[j]for j in order];sigmahash=hashlib.sha256(json.dumps(sigma,separators=(',',':')).encode()).hexdigest();sigmas[sigmahash]=sigma + route=[4,i,off,w,sp]if w<9 else[3,i,off];bycall[s,rep][h]=[f,route];entering+=w<9 + cells=set(range(off,off+w));assert not used[i,orp,port]&cells;used[i,orp,port]|=cells + digest.update(json.dumps([s,rep,h,f,sigmahash],separators=(',',':')).encode()+b'\n') +for c in t['calls']: + k=(c['stage'],c['replica']);assert set(bycall[k])==set(range(R)) + c['owners']=c['owners'][:(2*V)]+[bycall[k][h]for h in range(R)];assert len({f for f,r in c['owners']})==2*V+R and all(f2*max(paid)**2 + +assert all(c['local_program_sha256']==registry[c['provider_id']]['local_program_checks'][c['orientation']]['sha256']for c in t['calls']) +t['provider_dispatch']='For each indivisible local_cover_sweep, execute local_providers[call.provider_id].local_programs[call.orientation] with that provider residual adapters and Clifford recipes. The sweep provider_id must equal its call provider_id.' +raw=json.dumps(t,sort_keys=True,separators=(',',':')).encode();(OUT/'GLOBAL-TEMPLATE.json.gz').write_bytes(gzip.compress(raw,mtime=0)) +res=dict(status='EMITTED_MIXED_PROVIDER_ASYNCHRONOUS_WHOLE_OWNER_COMPLEX_TEMPLATE', + template_sha256=hashlib.sha256(raw).hexdigest(), + parent_template_sha256=hashlib.sha256(gzip.decompress((BASE/'split-centres/GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest(), + live=DATA,physical=physical,global_profile=dict(sorted(paid.items())), + rank_mass=sum(r*n for r,n in paid.items()),deficit=2560,maxchild=max(paid), + hosted_residuals=len(roles),banks_per_stage=[0]*9,entering_helper_roles=entering, + unique_actual_73column_sigmas=len(sigmas),sigma_stream_sha256=digest.hexdigest(), + cross_replica_helper_roles=sum(z['replica']!=z['owner_replica']for z in roles), + asynchronous_order_sha256=hashlib.sha256(json.dumps(call_order,separators=(',',':')).encode()).hexdigest(), + source_artifacts=source_artifacts,provider_counts=dict(Counter(c['provider_id']for c in t['calls'])), + scope='Two actual verified plain/width-seven providers dispatched per complete invocation; independent controller/spectator/normalization and complete finite invoice admission required.') +(OUT/'HOSTED.json').write_text(json.dumps(res,indent=2)+'\n');(OUT/'ACTUAL-SIGMAS.json.gz').write_bytes(gzip.compress(json.dumps(sigmas,separators=(',',':')).encode(),mtime=0));print(json.dumps(res,indent=2)) diff --git a/research/complex-571-hpe46/code/generated_identity.py b/research/complex-571-hpe46/code/generated_identity.py new file mode 100644 index 0000000000..74a9b60479 --- /dev/null +++ b/research/complex-571-hpe46/code/generated_identity.py @@ -0,0 +1,62 @@ +"""Proof-relevant identities for generated artifacts, independent of gzip streams. + +Immutable source archives retain their exact byte hashes. For freshly emitted +artifacts, gzip identity is the exact decompressed payload and JSON identity +retains every field. Only CLIFFORD-REVIEW's root timing field is excluded. +Literal receipt references are checked against actual files before replacing +the three gzip references (and the phase recipe reference) with content hashes. +Prepared with OpenAI Codex assistance; Apache-2.0. +""" +from pathlib import Path +import copy +import gzip +import hashlib +import json +import math + +if not __debug__: + raise RuntimeError('Assertions must remain enabled') + +FILES=('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json', + 'INDEPENDENT-LOCAL-REPLAY.json','CLIFFORD-RECIPES.json', + 'CLIFFORD-REVIEW.json','RESIDUAL-ADAPTERS.json') + +def sha(path): + return hashlib.sha256(Path(path).read_bytes()).hexdigest() + +def json_identity(value): + return hashlib.sha256(json.dumps(value,sort_keys=True,separators=(',',':'),allow_nan=False).encode('utf-8')).hexdigest() + +def payload_identity(path): + return hashlib.sha256(gzip.decompress(Path(path).read_bytes())).hexdigest() + +def phase_value(directory,value=None): + directory=Path(directory) + value=copy.deepcopy(json.loads((directory/'CLIFFORD-REVIEW.json').read_bytes())if value is None else value) + assert value['canonical_word_sha256']==sha(directory/'CANONICAL-WORD.json.gz'),'stale phase canonical word reference' + assert value['recipe_sha256']==sha(directory/'CLIFFORD-RECIPES.json'),'stale phase recipe reference' + seconds=value.pop('seconds') + assert type(seconds)in(int,float) and math.isfinite(seconds) and seconds>=0,'invalid phase timing metadata' + value['canonical_word_sha256']=payload_identity(directory/'CANONICAL-WORD.json.gz') + value['recipe_sha256']=json_identity(json.loads((directory/'CLIFFORD-RECIPES.json').read_bytes())) + return value + +def native_value(directory,value=None): + directory=Path(directory) + value=copy.deepcopy(json.loads((directory/'INDEPENDENT-LOCAL-REPLAY.json').read_bytes())if value is None else value) + for field,name in [('canonical_word_sha256','CANONICAL-WORD.json.gz'),('local_programs_sha256','LOCAL-PROGRAMS.json.gz')]: + assert value[field]==sha(directory/name),'stale native artifact reference: '+field + value[field]=payload_identity(directory/name) + return value + +def artifact_identities(directory): + directory=Path(directory) + result={} + for name in FILES: + path=directory/name + if name.endswith('.gz'): + result[name]=payload_identity(path) + else: + value=phase_value(directory)if name=='CLIFFORD-REVIEW.json'else native_value(directory)if name=='INDEPENDENT-LOCAL-REPLAY.json'else json.loads(path.read_bytes()) + result[name]=json_identity(value) + return result diff --git a/research/complex-571-hpe46/code/generated_identity_controls.py b/research/complex-571-hpe46/code/generated_identity_controls.py new file mode 100644 index 0000000000..def4135cb3 --- /dev/null +++ b/research/complex-571-hpe46/code/generated_identity_controls.py @@ -0,0 +1,227 @@ +"""Actual gzip/receipt portability and consistently rebound semantic controls. + +Only scratch copies of generated provider files are changed. Each assembly +control recomputes raw artifact links, all seven portable identities and the +owner/invoice digests. This tests identity admission, not a replacement for the +full physical replay. Prepared with OpenAI Codex assistance; Apache-2.0. +""" +import argparse +import copy +import gzip +import hashlib +import json +import math +import shutil +import tempfile +from pathlib import Path + +import os +assert os.environ.get('GAIN_PR564_SOURCE'), 'Explicit engine source required' +from assemble import assemble +from witness import PROVIDERS +from generated_identity import FILES, artifact_identities, json_identity, sha + +if not __debug__: + raise RuntimeError('Assertions required; refusing optimized verification') + + +def read(path): + raw = path.read_bytes() + return json.loads(gzip.decompress(raw) if path.suffix == '.gz' else raw) + + +def write_json(path, value): + # Nonfinite numbers are emitted only by deliberate invalid-timing controls. + path.write_text(json.dumps(value, indent=2)+'\n', encoding='utf-8', newline='\n') + + +def write_gzip(path, value): + payload = json.dumps(value, sort_keys=True, separators=(',', ':')).encode() + path.write_bytes(gzip.compress(payload, compresslevel=1, mtime=123456789)) + + +def refresh_links(directory): + """Rebind only the three actual gzip references and the phase recipe link.""" + native = read(directory/'INDEPENDENT-LOCAL-REPLAY.json') + native['canonical_word_sha256'] = sha(directory/'CANONICAL-WORD.json.gz') + native['local_programs_sha256'] = sha(directory/'LOCAL-PROGRAMS.json.gz') + write_json(directory/'INDEPENDENT-LOCAL-REPLAY.json', native) + phase = read(directory/'CLIFFORD-REVIEW.json') + phase['canonical_word_sha256'] = sha(directory/'CANONICAL-WORD.json.gz') + phase['recipe_sha256'] = sha(directory/'CLIFFORD-RECIPES.json') + write_json(directory/'CLIFFORD-REVIEW.json', phase) + + +def rebound(owner, invoice, pid, directory): + """Return complete consistent receipt links to the changed actual files.""" + identities = artifact_identities(directory) + o, i = copy.deepcopy(owner), copy.deepcopy(invoice) + p = i['providers'][pid] + for name in FILES: + raw = sha(directory/name) + p['artifacts'][name] = raw + o['source_artifacts']['providers/'+pid+'/'+name] = raw + p['semantic_artifact_sha256'] = identities + o['provider_artifact_semantic_sha256'][pid] = identities + phase = identities['CLIFFORD-REVIEW.json'] + o['provider_phase_semantic_sha256'][pid] = phase + i['provider_phase_semantic_sha256'][pid] = phase + owner_hash = json_identity(o) + i['owner_audit_sha256'] = owner_hash + return o, i, owner_hash, json_identity(i), identities + + +def run(base, audit, out, provider_root=None): + assert not out.exists() + out.parent.mkdir(parents=True, exist_ok=True) + source = provider_root or base/'providers' + owner_path, invoice_path = audit/'OWNERS-AND-PROFILE.json', audit/'PREFIX-AND-INVOICE.json' + owner, invoice = read(owner_path), read(invoice_path) + baseline = assemble(owner, invoice, sha(owner_path), sha(invoice_path)) + accepted, rejected, references, source_identities = [], [], [], {} + raw_changed = {} + with tempfile.TemporaryDirectory(prefix='generated-identity-controls-', dir=out.parent) as td: + scratch = Path(td) + for pid in sorted(PROVIDERS): + original = source/pid + ids = artifact_identities(original) + assert ids == PROVIDERS[pid]['artifact_semantic_sha256'] + source_identities[pid] = dict(raw={name:sha(original/name) for name in FILES}, semantic=ids) + # The optional provider-root can use another Python/zlib environment. + o, i, oh, ih, _ = rebound(owner, invoice, pid, original) + assert assemble(o, i, oh, ih)['kappa'] == baseline['kappa'] + + def fresh(tag): + directory = scratch/(pid+'-'+tag) + directory.mkdir() + for name in FILES: + shutil.copyfile(original/name, directory/name) + return directory + + def reject_semantics(tag, mutate, changed_file): + directory = fresh(tag) + mutate(directory) + refresh_links(directory) + o, i, oh, ih, new_ids = rebound(owner, invoice, pid, directory) + assert new_ids[changed_file] != ids[changed_file], (tag, 'mutation disappeared from identity') + try: + assemble(o, i, oh, ih) + except AssertionError: + rejected.append(dict(provider=pid, case=tag, changed_identity=changed_file, + all_raw_and_semantic_links_rebound=True)) + else: + raise AssertionError('semantic mutation accepted: '+tag) + + def json_mutation(name, change): + def mutate(directory): + value = read(directory/name) + change(value) + write_json(directory/name, value) + return mutate + + directory = fresh('recompression') + changed = [] + for name in ('CANONICAL-WORD.json.gz', 'LOCAL-PROGRAMS.json.gz'): + before = (directory/name).read_bytes() + payload = gzip.decompress(before) + after = gzip.compress(payload, compresslevel=1, mtime=123456789) + assert after != before and gzip.decompress(after) == payload + (directory/name).write_bytes(after) + changed.append(name) + refresh_links(directory) + o, i, oh, ih, new_ids = rebound(owner, invoice, pid, directory) + assert new_ids == ids + assert assemble(o, i, oh, ih)['kappa'] == baseline['kappa'] + accepted.append(dict(provider=pid, case='recompressed_same_payloads', changed_raw_artifacts=changed, + all_seven_identities_unchanged=True, all_raw_links_rebound=True)) + raw_changed[pid] = {name:[sha(original/name),sha(directory/name)] for name in changed} + + # A stale literal link must fail before any normalization can hide it. + for tag, name, receipt, field in ( + ('stale_native_word_link','CANONICAL-WORD.json.gz','INDEPENDENT-LOCAL-REPLAY.json','canonical_word_sha256'), + ('stale_native_program_link','LOCAL-PROGRAMS.json.gz','INDEPENDENT-LOCAL-REPLAY.json','local_programs_sha256'), + ('stale_phase_word_link','CANONICAL-WORD.json.gz','CLIFFORD-REVIEW.json','canonical_word_sha256'), + ('stale_phase_recipe_link','CLIFFORD-RECIPES.json','CLIFFORD-REVIEW.json','recipe_sha256')): + directory = fresh(tag) + value = read(directory/receipt) + value[field] = '0'*64 + write_json(directory/receipt, value) + try: + artifact_identities(directory) + except AssertionError: + references.append(dict(provider=pid, case=tag, rejected_before_projection=True)) + else: + raise AssertionError('stale literal reference normalized away: '+tag) + + def change_scalar(directory): + programs = read(directory/'LOCAL-PROGRAMS.json.gz') + event = next(e for e in programs['forward'] if e[0]=='scalar' and e[1][0]=='add') + event[1][3] = -event[1][3] + write_gzip(directory/'LOCAL-PROGRAMS.json.gz', programs) + reject_semantics('changed_actual_scalar', change_scalar, 'LOCAL-PROGRAMS.json.gz') + + def change_frame(directory): + word = read(directory/'CANONICAL-WORD.json.gz') + old = word['start'][518] + replacement = next(j for j,f in enumerate(word['frames']) + if j != old and len(f) == len(word['frames'][old])) + word['start'][518] = replacement + write_gzip(directory/'CANONICAL-WORD.json.gz', word) + reject_semantics('changed_actual_start_frame_same_rank', change_frame, 'CANONICAL-WORD.json.gz') + reject_semantics('native_false_restoration', json_mutation('INDEPENDENT-LOCAL-REPLAY.json', + lambda x:x['local']['forward'].__setitem__('private_work_erased',False)), + 'INDEPENDENT-LOCAL-REPLAY.json') + reject_semantics('native_wrong_column_count', json_mutation('INDEPENDENT-LOCAL-REPLAY.json', + lambda x:x['local']['backward'].__setitem__('all_exact_columns',727)), + 'INDEPENDENT-LOCAL-REPLAY.json') + reject_semantics('native_changed_profile', json_mutation('INDEPENDENT-LOCAL-REPLAY.json', + lambda x:x['paid_profiles']['forward'].__setitem__('1',x['paid_profiles']['forward']['1']+1)), + 'INDEPENDENT-LOCAL-REPLAY.json') + reject_semantics('phase_false_global_equality', json_mutation('CLIFFORD-REVIEW.json', + lambda x:x.__setitem__('all_child_equalities_include_global_phase',False)), + 'CLIFFORD-REVIEW.json') + + # This event hash is proof data, even when its value equals a gzip hash. + def change_event_hash(directory): + value = read(directory/'LOCAL-CHECKS.json') + value['forward']['sha256'] = sha(directory/'CANONICAL-WORD.json.gz') + write_json(directory/'LOCAL-CHECKS.json', value) + assert artifact_identities(directory)['LOCAL-CHECKS.json'] == json_identity(value) + reject_semantics('local_event_hash_is_not_a_container_reference', change_event_hash, 'LOCAL-CHECKS.json') + reject_semantics('unrelated_native_root_seconds_retained', json_mutation('INDEPENDENT-LOCAL-REPLAY.json', + lambda x:x.__setitem__('seconds',7)), 'INDEPENDENT-LOCAL-REPLAY.json') + reject_semantics('nested_phase_seconds_retained', json_mutation('CLIFFORD-REVIEW.json', + lambda x:x.__setitem__('additional_evidence',{'seconds':7})), 'CLIFFORD-REVIEW.json') + + for tag,value in [('negative',-1),('boolean',True),('string','1'),('nan',float('nan')), + ('infinity',float('inf'))]: + directory = fresh('invalid-timing-'+tag) + phase = read(directory/'CLIFFORD-REVIEW.json');phase['seconds'] = value + write_json(directory/'CLIFFORD-REVIEW.json', phase) + try: + artifact_identities(directory) + except AssertionError: + references.append(dict(provider=pid,case='invalid_phase_seconds_'+tag, + rejected_before_projection=True)) + else: + raise AssertionError('invalid timing silently erased: '+tag) + n=len(PROVIDERS) + assert len(accepted)==n and len(rejected)==9*n and len(references)==9*n + assert {x['provider']for x in accepted}=={x['provider']for x in rejected}=={x['provider']for x in references}==set(PROVIDERS) + report=dict(status='PASS_GENERATED_ARTIFACT_RECOMPRESSION_AND_REBOUND_MUTATIONS', + kappa=baseline['kappa'], source_owner_sha256=sha(owner_path),source_invoice_sha256=sha(invoice_path), + source_providers=source_identities,recompression_changed_raw_hashes=raw_changed, + accepted=accepted,semantic_mutations_rejected=rejected,invalid_references_or_metadata_rejected=references, + counts=dict(recompression_accepted=n,semantic_rejected=9*n,reference_or_metadata_rejected=9*n), + scope='Actual copied gzip streams and receipt JSON are changed. All seven content identities, raw source links and owner/invoice digests are recomputed consistently before assembly. Only identical decompressed payloads are accepted; scalar, same-rank frame, native proof fields, global phase, event hashes and unrelated seconds remain pinned. Literal references and invalid phase timing are rejected before normalization. Full physical replay remains a separate prerequisite.') + write_json(out,report) + print(report['status'],report['counts']) + + +if __name__=='__main__': + parser=argparse.ArgumentParser(description=__doc__) + for name in ('base','audit','out'): + parser.add_argument('--'+name,type=Path,required=True) + parser.add_argument('--provider-root',type=Path) + args=parser.parse_args() + run(args.base,args.audit,args.out,args.provider_root) diff --git a/research/complex-571-hpe46/code/hpe_adapters_local.py b/research/complex-571-hpe46/code/hpe_adapters_local.py new file mode 100644 index 0000000000..f77c09a0ca --- /dev/null +++ b/research/complex-571-hpe46/code/hpe_adapters_local.py @@ -0,0 +1,95 @@ +"""Paid residual wrappers for entering helpers (Lemma A): generation and independent decoding. Apache-2.0. +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. The wrapper construction follows PR #458 +(chafreaky): a helper that starts at frame E and ends at FULL has the physical residual S_E = T_FULL T_E^-1 (apply T_E^-1 first); +S_E = L_E (C_[w] x I) R_E with R_E applied first; the wrappers R_E^-1 before the whole local invocation and L_E^-1 after its +full-frame cleanup turn the residual into the coordinate factor C_[w] x I and restore the other 9 - w coordinates identically. +usage: adapters_gk.py CANONICAL-WORD.json.gz RESIDUAL-ADAPTERS.json OUT-LEMMA-A.json +Writes the recipes (generation uses clifford_exact.lower_child) and then DECODES the serialized monomials with the primitive +constructors of clifford_exact (not lower_child) and checks, for every entrance frame, that L_E^-1 S_E R_E^-1 has exactly the +tableau and zero-state vector (global phase included) of fourier(9, range(w)); mutated recipes (wrong phase, swapped sides, wrong +translation, wrong width) must be rejected.""" +import copy, gzip, json, sys +from pathlib import Path +# Package-path adaptation only; the exact wrapper mathematics is unchanged. +import os +R = Path(os.environ['MULTICOLD_SOURCE']) / 'vendor/pr558/vendor/pr552/complex-global/vendor531' # HPE: the pinned vendor531 clifford_exact +sys.path.insert(0, str(R / 'vendor/clifford')) +from clifford_exact import canonical_frame, lower_child, fourier, diag, perm, xgate, Op, identity +n = 9; FULL = tuple(1 << i for i in range(n)) +def monomial_op(rec): + """decode a serialized monomial (matrix rows, quadratic rows, Z4 linear part, translation, phase)""" + out = diag(n, tuple(rec['quadratic_rows']), tuple(rec['linear_Z4'])).then(perm(n, tuple(rec['matrix_rows']))).then(xgate(n, rec['offset'])) + return out.then(Op(n, identity(n), [('phase', rec['phase'])])) +def S_of(U, END=FULL): + # HPE: a helper that starts at E=U and ends at END has residual T_END T_E^-1 (END = FULL is the inherited case) + return canonical_frame(n, tuple(U)).adjoint().then(canonical_frame(n, tuple(END))) +def wrapped_ok(U, rec, END=FULL): + """exactly: L^-1 S R^-1 = C_[w] x I (apply order: R^-1, S, L^-1), w = dim END - dim E""" + w = len(END) - len(U); S = S_of(U, END); Rm = monomial_op(rec['right']); Lm = monomial_op(rec['left']) + net = Rm.adjoint().then(S).then(Lm.adjoint()); target = fourier(n, range(w)) + return rec['rank'] == w and net.tab == target.tab and net.zero_state() == target.zero_state() +def _contains(a, b): + a = list(a) + for x in b: + for y in sorted(a, reverse=True): + if x >> (y.bit_length() - 1) & 1: x ^= y + if x: return False + return True +def main(): + c = json.load(gzip.open(sys.argv[1])); frames = c['frames']; v = c['v'] + starts = sorted({c['start'][r] for r in range(2 * v, len(c['start'])) if c['start'][r] != 0 and c['final'][r] == 1}) + # HPE: (entrance, terminal) pairs of helpers ending at a proper subspace; key 'E:U'. Inherited words have none. + ends = sorted({(c['start'][r], c['final'][r]) for r in range(2 * v, len(c['start'])) if c['final'][r] != 1}) + assert all(e != 0 and len(frames[u]) < n and _contains(frames[u], frames[e]) for e, u in ends) + recipes = {} + for f in starts: + U = frames[f]; rec, compiled = lower_child(S_of(U)) + recipes[str(f)] = dict(frame=f, vectors=list(U), entrance_rank=len(U), rank=rec['rank'], left=rec['left'], right=rec['right']) + for e, u in ends: + E, U = frames[e], frames[u]; rec, compiled = lower_child(S_of(E, U)) + recipes['%d:%d' % (e, u)] = dict(frame=e, terminal=u, vectors=list(E), terminal_vectors=list(U), entrance_rank=len(E), + terminal_rank=len(U), rank=rec['rank'], left=rec['left'], right=rec['right']) + Path(sys.argv[2]).write_text(json.dumps(dict(status='RESIDUAL_ADAPTER_RECIPES', recipes=recipes), sort_keys=True, separators=(',', ':')) + '\n') + # ---- independent decode of the serialized file + data = json.loads(Path(sys.argv[2]).read_text())['recipes'] + dot = lambda a, b: bin(a & b).count('1') & 1 + detail = [] + for f in starts: + rec = data[str(f)]; U = frames[f] + assert wrapped_ok(U, rec), ('wrapper product is not C_[w] x I', f) + detail.append(dict(frame=f, entrance_rank=len(U), residual_width=n - len(U), vectors=list(U), all_even_weight=all(bin(x).count('1') % 2 == 0 for x in U), + totally_isotropic=all(dot(a, b) == 0 for a in U for b in U))) + hdetail = [] + for e, u in ends: # HPE: independent decode, residual width = dim U - dim E + rec = data['%d:%d' % (e, u)]; E, U = frames[e], frames[u] + assert wrapped_ok(E, rec, U), ('HPE wrapper product is not C_[w] x I', e, u) + hdetail.append(dict(frame=e, terminal=u, entrance_rank=len(E), terminal_rank=len(U), residual_width=len(U) - len(E))) + controls = [] + def reject(name, fn): + f = starts[0]; rec = copy.deepcopy(data[str(f)]); fn(rec) + if wrapped_ok(frames[f], rec): raise AssertionError('mutated wrapper accepted: ' + name) + controls.append(name) + reject('wrong global phase', lambda r: r['right'].__setitem__('phase', (r['right']['phase'] + 1) % 4)) + reject('wrong translation', lambda r: r['left'].__setitem__('offset', r['left']['offset'] ^ 1)) + reject('wrong quadratic form', lambda r: r['right'].__setitem__('quadratic_rows', [x ^ 2 if i == 0 else x for i, x in enumerate(r['right']['quadratic_rows'])]) if False else r['right']['linear_Z4'].__setitem__(0, (r['right']['linear_Z4'][0] + 2) % 4)) + reject('sides swapped', lambda r: (r.__setitem__('left', r['right']), r.__setitem__('right', r['left']))) + reject('wrong width', lambda r: r.__setitem__('rank', r['rank'] + 1)) + if ends: # HPE controls on the first (E, U) pair + e, u = ends[0]; rec0 = data['%d:%d' % (e, u)] + def hreject(name, ok): + if ok: raise AssertionError('HPE mutation accepted: ' + name) + controls.append(name) + hreject('hpe: U-wrapper decoded against a FULL ending', wrapped_ok(frames[e], rec0)) + hreject('hpe: width misreported as 9 - dim E', wrapped_ok(frames[e], dict(rec0, rank=n - len(frames[e])), frames[u])) + other = next(f for f in range(len(frames)) if f != u and len(frames[f]) == len(frames[u]) and _contains(frames[f], frames[e])) + hreject('hpe: wrong terminal hyperplane', wrapped_ok(frames[e], rec0, frames[other])) + fe = next(((e2, u2) for e2, u2 in ends if str(e2) in data), None) + if fe: # an entrance shared with FULL-ended helpers: R_{E,FULL} must not serve as R_{E,U} + r2 = data['%d:%d' % fe] + hreject('hpe: pre wrapper resolved to the FULL recipe R_{E,FULL}', wrapped_ok(frames[fe[0]], dict(r2, right=data[str(fe[0])]['right']), frames[fe[1]])) + hreject('hpe: wrong global phase', wrapped_ok(frames[e], dict(rec0, left=dict(rec0['left'], phase=(rec0['left']['phase'] + 1) % 4)), frames[u])) + res = dict(status='PASS_RESIDUAL_WRAPPERS_ARE_EXACT', frames=len(detail), **({'hyperplane_end_pairs': hdetail} if ends else {}), wrappers_reject=controls, all_even_weight=all(d['all_even_weight'] for d in detail), + all_totally_isotropic=all(d['totally_isotropic'] for d in detail), detail=detail) + Path(sys.argv[3]).write_text(json.dumps(res, indent=1) + '\n') + print('Lemma A (exact): L^-1 S_E R^-1 = C_[w] x I for', len(detail), 'entrance frames, global phase included;', len(controls), 'wrapper mutations rejected; all-even-weight:', res['all_even_weight']) +if __name__ == '__main__': main() diff --git a/research/complex-571-hpe46/code/hpe_audit_and_transport.py b/research/complex-571-hpe46/code/hpe_audit_and_transport.py new file mode 100644 index 0000000000..845680279b --- /dev/null +++ b/research/complex-571-hpe46/code/hpe_audit_and_transport.py @@ -0,0 +1,249 @@ +"""Rebuild arbitrary-dirt compensation and transport a changed local word. + +Prepared for icekylinx with GPT-6 Astra assistance. Apache-2.0. +Adapted from PR425/433 (icekylinx), PR484's audit_gk.py +(DreamingOfClouds), and Round19's 112-port transport. This auditor does not +import a constructor, a nominated compensation table, or a global price. +Only the changed scalar word and its actual frame chains are checked here. +""" +import argparse +import copy +import gzip +import hashlib +import json +import time +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + + +def read(path): + data = path.read_bytes() + return json.loads(gzip.decompress(data) if path.suffix == '.gz' else data) + + +def content_hash(path): + data = path.read_bytes() + return hashlib.sha256(gzip.decompress(data) if path.suffix == '.gz' else data).hexdigest() + + +def basis(vs): + pivots = {} + for x in vs: + for k in sorted(pivots, reverse=True): + if x >> k & 1: + x ^= pivots[k] + if x: + k = x.bit_length() - 1 + for j in pivots: + if pivots[j] >> k & 1: + pivots[j] ^= x + pivots[k] = x + return tuple(pivots[k] for k in sorted(pivots, reverse=True)) + + +def apply(e, rows): + if e[0] == 'scale': + _, target, a, b, *_ = e + q = Q(a, b) + assert q + rows[target] = {j: q*x for j, x in rows[target].items()} + else: + _, target, source, a, b, *_ = e + assert target != source + q = Q(a, b) + for j, x in list(rows[source].items()): + value = rows[target].get(j, Q(0)) + q*x + if value: + rows[target][j] = value + else: + rows[target].pop(j, None) + + +def inverse(e): + e = copy.deepcopy(e) + if e[0] == 'add': + e[3] *= -1 + else: + e[2], e[3] = e[3], e[2] + return e + + +def dual(e): + e = inverse(e) + if e[0] == 'add': + e[1], e[2] = e[2], e[1] + return e + + +def run(raw_path, routing_path, out): + start_time = time.monotonic() + word, routing = read(raw_path), read(routing_path) + v, h, helpers = word['report']['v'], word['report']['h'], word['report']['R'] + assert h == 9 and v == 112 and routing['v'] == v + n = 2*v + helpers + ident = lambda: [{r: Q(1)} for r in range(n)] + main = word['A'] + word['cut'] + word['B'] + assert all(not v <= e[2] < 2*v for e in word['A'] + word['B'] + if e[0] == 'add' and not v <= e[1] < 2*v) + matrix = ident() + for e in main: + apply(e, matrix) + dirty = [{} for _ in range(n)] + for r in range(v, 2*v): + dirty[r] = {j: x for j, x in matrix[r].items() if j >= 2*v} + for e in word['precondition']: + apply(e, dirty) + compensation = [['add', r, j, -q.numerator, q.denominator, []] + for r in range(v, 2*v) for j, q in sorted(dirty[r].items())] + entering = set(map(int, word.get('start_extra', {}))) + assert all(e[2] not in entering for e in compensation) + cleanup = [inverse(e) for e in reversed(word['A'] + word['B']) + if not v <= e[1] < 2*v] + assert [e[:-1] for e in cleanup] == [e[:-1] for e in word['cleanup']] + # HPE: hyperplane-ended helpers. 'early_cleanup' = [[cleanup index, frame vectors], ...] are cleanup gates executed + # right after B (before the final climbs) at the given frame; 'helper_final' = {helper: frame vectors} replaces FULL as + # that helper's terminal frame. The scalar program is the reordered one and is replayed exactly below, so a move that + # does not commute with the skipped cleanup prefix is rejected by the arbitrary-dirt endpoint assertion. + early = [(int(i), f) for i, f in word.get('early_cleanup', [])] + helper_final = {int(r): f for r, f in word.get('helper_final', {}).items()} + early_idx = [i for i, _ in early] + assert len(set(early_idx)) == len(early_idx) and all(0 <= i < len(cleanup) for i in early_idx) + assert all(2*v <= r < n for r in helper_final) + assert all(r in entering for r in helper_final), 'hyperplane end only for entering helpers (wrapper exists)' + tail = [word['cleanup'][i][:-1] + [f] for i, f in early] + rest = [e for i, e in enumerate(word['cleanup']) if i not in set(early_idx)] + program = word['precondition'] + compensation + main + tail + rest + for backward in (False, True): + actual = ident() + for e in program: + apply(dual(e) if backward else e, actual) + expected = ident() + for t in range(v): + expected[t if backward else v+t][v+t if backward else t] = Q(-1 if backward else 1) + assert actual == expected, ('arbitrary-dirt endpoint', backward) + # The native scalar compiler allows dyadic additions and signed binary scales. + for e in program: + q = Q(e[3], e[4]) if e[0] == 'add' else Q(e[2], e[3]) + assert q.denominator & (q.denominator-1) == 0 + if e[0] == 'scale': + a = abs(q.numerator) + assert a and a & (a-1) == 0 + + tau = lambda x: x ^ (43 if (x & 43).bit_count() % 2 else 0) + ports = routing['ports'] + assert len(set(ports)) == v and set(map(tau, word['ports'])) == set(ports) + mapping = {i: ports.index(tau(p)) for i, p in enumerate(word['ports'])} + mapping.update({v+i: v+mapping[i] for i in range(v)}) + mapping.update({r: r for r in range(2*v, n)}) + full = tuple(1 << i for i in range(h-1, -1, -1)) + frames, frame_ids = [(), full], {(): 0, full: 1} + + def fid(vectors): + frame = basis(vectors) + if frame not in frame_ids: + frame_ids[frame] = len(frames) + frames.append(frame) + return frame_ids[frame] + + def transform(e): + e = copy.deepcopy(e) + e[1] = mapping[e[1]] + if e[0] == 'add': + e[2] = mapping[e[2]] + if e[-1] is not None: + e[-1] = fid([tau(x) for x in e[-1]]) + return e + + canonical = {key: [transform(e) for e in word[key]] + for key in ('A', 'B', 'cut', 'cleanup', 'precondition')} + canonical['compensation'] = [transform(e) for e in compensation] + if tail: + canonical['tail'] = [transform(e) for e in tail] # HPE (absent for inherited words: identical output) + canonical['cleanup'] = [transform(e) for e in rest] # HPE (full cleanup minus the early gates) + canonical['start'] = [fid([p]) for p in ports] + [0]*(v+helpers) + for r, frame in word.get('start_extra', {}).items(): + assert 2*v <= int(r) < n + canonical['start'][int(r)] = fid([tau(x) for x in frame]) + canonical['final'] = ([1]*v + + [fid(x for x in range(1, 1 << h) if (x & p).bit_count() % 2 == 0) for p in ports] + + [1]*helpers) + for r, frame in helper_final.items(): # HPE + canonical['final'][r] = fid([tau(x) for x in frame]) + canonical.update(h=h, v=v, R=helpers, ports=ports, frames=frames, + centers=[mapping[r] for r in word['centers']], + center_frames=[fid(tau(x) for x in frame) for frame in word['center_frames']]) + levels = {mapping[v+int(t)]-v: fid(tau(x) for x in frame) + for t, frame in word.get('target_levels', {}).items()} + canonical['target_levels'] = {str(t): f for t, f in levels.items()} + current, paid, edges = canonical['start'].copy(), Counter(), set() + + def climb(r, f): + old = current[r] + assert basis(frames[old] + frames[f]) == frames[f], ('nonmonotone', r, old, f) + if old != f: + degree = len(frames[f]) - len(frames[old]) + assert degree > 0 + paid[degree] += 1 + edges.add((old, f)) + current[r] = f + + for part in ('A', 'B'): + if part == 'B': + assert all(current[r] == f for r, f in zip(canonical['centers'], canonical['center_frames'])) + assert all(current[v+t] == levels.get(t, 0) for t in range(v)) + for r, frame in zip(canonical['centers'], canonical['center_frames']): + served = {levels.get(e[1]-v, 0) for e in canonical['cut'] if e[2] == r} + old = frame + for f in sorted(served, key=lambda f: -len(frames[f])): + assert basis(frames[old] + frames[f]) == frames[old] + if old != f: + paid[len(frames[old])-len(frames[f])] += 1 + edges.add((old, f)) + edges.add((f, old)) + old = f + for e in canonical[part]: + for r in [e[1]] + ([e[2]] if e[0] == 'add' else []): + climb(r, e[-1]) + for e in canonical.get('tail', []): # HPE: early cleanup gates at their common frame + for r in [e[1]] + ([e[2]] if e[0] == 'add' else []): + climb(r, e[-1]) + for r, f in enumerate(canonical['final']): + climb(r, f) + # HPE: the remaining cleanup runs at FULL, so it may touch only registers whose terminal frame is FULL; a + # hyperplane-ended helper is touched by nothing after its tail gates. + for e in canonical['cleanup']: + assert all(canonical['final'][r] == 1 for r in [e[1]] + ([e[2]] if e[0] == 'add' else [])), ('cleanup on non-FULL end', e) + assert all(len(frames[canonical['final'][r]]) < h for r in helper_final) + assert dict(paid) == {int(r): count for r, count in word['report']['local_profile'].items()} + canonical['local_profile'] = dict(sorted(paid.items())) + canonical['edges'] = sorted(edges) + out.mkdir(parents=True, exist_ok=False) + payload = json.dumps(canonical, sort_keys=True, separators=(',', ':')).encode() + (out/'CANONICAL-WORD.json.gz').write_bytes(gzip.compress(payload, mtime=0)) + (out/'FULL-WORD.json.gz').write_bytes(gzip.compress(json.dumps(word, sort_keys=True, separators=(',', ':')).encode(), mtime=0)) + receipt = dict(status='PASS_CHANGED_WORD_ALL_COLUMNS_AND_NATIVE_FRAMES', + input_content_sha256=content_hash(raw_path), routing_content_sha256=content_hash(routing_path), + canonical_content_sha256=hashlib.sha256(payload).hexdigest(), + live_columns_each_orientation=n, helpers=helpers, + compensation_additions=len(compensation), scalar_operations=len(program), + center_rank_sum=sum(map(len, word['center_frames'])), + local_profile=dict(sorted(paid.items())), local_rank_mass=sum(r*z for r, z in paid.items()), + widths=[len(frames[canonical['final'][r]])-len(frames[canonical['start'][r]]) for r in range(2*v, n)], + frames=len(frames), directed_edges=len(edges), + tau=43, target_port_order_matches_baseline=True, + seconds=time.monotonic()-start_time, + scope='Fresh exact forward and inverse-transpose scalar replay on every arbitrary input; all native frame chains and dyadic primitives. Phase lowering, wrappers, global owners and global assembly are separate.') + if tail or helper_final: + receipt.update(hyperplane_ended_helpers=sorted(helper_final), early_cleanup_gates=len(tail)) + (out/'SCALAR-FRAME-AUDIT.json').write_text(json.dumps(receipt, indent=2)+'\n') + print(json.dumps({k: value for k, value in receipt.items() if k != 'widths'}, indent=2), flush=True) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--raw', type=Path, required=True) + parser.add_argument('--routing', type=Path, required=True) + parser.add_argument('--out', type=Path, required=True) + args = parser.parse_args() + run(args.raw, args.routing, args.out) diff --git a/research/complex-571-hpe46/code/hpe_audit_local.py b/research/complex-571-hpe46/code/hpe_audit_local.py new file mode 100644 index 0000000000..29189b1420 --- /dev/null +++ b/research/complex-571-hpe46/code/hpe_audit_local.py @@ -0,0 +1,159 @@ +# Local-only extraction of the attributed PR514 / PR433 independent replay. +# Prepared for icekylinx with OpenAI Codex assistance. Apache-2.0. +# The complete local checker and its negative controls are retained verbatim. +# Global hosting is verified separately for the changed 112-port geometry. +import copy,gzip,hashlib,json,sys +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path +OUT=Path(sys.argv[1]) +c=json.load(gzip.open(OUT/'CANONICAL-WORD.json.gz')) +ir={'local_programs':json.load(gzip.open(OUT/'LOCAL-PROGRAMS.json.gz'))} +v,R,h=c['v'],c['R'],c['h'];n=2*v+R;frames=c['frames'] +levels={int(t):f for t,f in c.get('target_levels',{}).items()} +entering=[r for r,f in enumerate(c['start']) if r>=2*v and f!=0] +plain={r for r in range(n) if r not in set(entering)} + +def contains(a,b): + for x in a: + for y in b: + if x>>(y.bit_length()-1)&1:x^=y + if x:return False + return True +hpe={r for r in range(2*v,n) if c['final'][r]!=1} # HPE: helpers whose terminal frame is a proper subspace U of FULL +assert hpe<=set(entering) and all(len(frames[c['final'][r]])0 + hist[rank]+=1;cur[r]=b + elif tag=='center': + _,k,a,b,rank=event + assert phases[-1]=='centers' and private=={('C',k):a} + cf=c['center_frames'][k];cr=len(frames[cf]) + # GK: stepwise descent cf -> served levels -> lowest (forward), reversed ascent (backward); each step is a nested child + assert contains(frames[a],frames[b]) if back else contains(frames[b],frames[a]) + assert rank==abs(len(frames[a])-len(frames[b]))>0 + chain.setdefault(k,[]).append((a,b)) + private['C',k]=b;hist[rank]+=1;centers.append(k) + elif tag=='scalar': + _,e,f=event;op=e[0];target=tuple(e[1]);source=tuple(e[2]) if op in ('copy','add') else None + if target[0]=='C' and op=='clear': + assert private.get(target,f)==f + private.pop(target,None) + else: + for r in (target,source): + if r is None:continue + if r[0]=='L':assert cur[r[1]]==f,('common frame',r,cur[r[1]],f) + else: + if r==target and r not in private:private[r]=f + assert private[r]==f + if op=='clear':rows[target]={};norm[target]=Q(0) + elif op=='copy':rows[target]=dict(rows[source]);norm[target]=norm[source] + elif op=='scale': + q=Q(e[2],e[3]);a,b=abs(q.numerator),q.denominator + assert a&(a-1)==0 and b&(b-1)==0 + rows[target]={j:q*x for j,x in rows[target].items()};norm[target]*=abs(q) + else: + q=Q(e[3],e[4]);a,b=abs(q.numerator),q.denominator + assert source!=target and b&(b-1)==0 + # Independent symbolic replay of the cleared coefficient work. + w=0 + for bit in bin(a)[2:]:w=2*w+int(bit) + assert Q(w,b)*(1 if q>0 else -1)==q + prefix=max(prefix,Q(a)*norm[source]) + norm[target]=norm.get(target,Q(0))+abs(q)*norm[source] + row=rows.setdefault(target,{}) + for j,x in list(rows[source].items()): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + prefix=max(prefix,norm[target]) + else:raise AssertionError(tag) + assert phases==allowed and set(centers)==set(range(len(c['centers']))) and not private + assert sorted(r for k,r,_ in wrappers if k=='pre')==entering and sorted(r for k,r,_ in wrappers if k=='post')==entering # GK + for k,st in chain.items(): # GK: the steps of each centre chain link up and end at the centre frame + cf=c['center_frames'][k] + if back:assert st[-1][1]==cf and all(st[i][1]==st[i+1][0] for i in range(len(st)-1)) + else:assert st[0][0]==cf and all(st[i][1]==st[i+1][0] for i in range(len(st)-1)) + assert all(not row for reg,row in rows.items() if reg[0]=='C') + for r in range(n): + expected={r:Q(1)} + if back and r i0])) +reject('early gate frame below its registers\' frames', lambda w: w['early_cleanup'][0].__setitem__(1, U0[:-1])) +reject('hyperplane end on a non-entering helper', lambda w: (w['start_extra'].pop(h0))) +reject('profile not updated (paid climbs misreported)', lambda w: w['report']['local_profile'].__setitem__('1', w['report']['local_profile']['1']-3)) +reject('duplicate early gate', lambda w: w['early_cleanup'].append(list(w['early_cleanup'][0]))) +outdir.mkdir(parents=True, exist_ok=True) +(outdir/'HPE-ATC-CONTROLS.json').write_text(json.dumps(dict(status='PASS_HPE_RAW_WORD_CONTROLS', word=str(src), rejected=results), indent=1) + '\n') +print('PASS', len(results), 'HPE raw-word mutations rejected') diff --git a/research/complex-571-hpe46/code/hpe_emit_local.py b/research/complex-571-hpe46/code/hpe_emit_local.py new file mode 100644 index 0000000000..aad715c157 --- /dev/null +++ b/research/complex-571-hpe46/code/hpe_emit_local.py @@ -0,0 +1,161 @@ +# GK: modified copy of PR #433's complex_emit.py (icekylinx with Codex assistance; PR #425) by DreamingOfClouds with Claude Opus 5.5 +# (Anthropic), via Claude Code. Every change is marked "GK:". On a word without start_extra / target_levels the behaviour +# and every written file equal PR #433's (regression anchor in verify.py). +import sys as _sys, os as _os; _sys.path.insert(0, _os.path.dirname(_os.path.abspath(__file__))) +# Adapted from PR425 by icekylinx with Codex assistance. +"""Emit both local programs, integrate the fixed nine-stage geometry, and bill. + +The expanded scalar interface is justified in PROOF.txt. This script does not +claim a Lean proof or discharge the inherited all-size/analytic interfaces. +""" +import copy,gzip,hashlib,importlib.util,json,math +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + +OUT=Path(_sys.argv[1]);cp=OUT/'CANONICAL-WORD.json.gz' +c=json.load(gzip.open(cp)) +frames=c['frames'];v,R,h=c['v'],c['R'],c['h'];n=2*v+R +def digest(x):return hashlib.sha256(json.dumps(x,sort_keys=True,separators=(',',':')).encode()).hexdigest() +def basis(vs): + b={} + for x in vs: + for p in sorted(b,reverse=True): + if x>>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +def dual(e): + e=list(e) + if e[0]=='add':e[1],e[2]=e[2],e[1];e[3]*=-1 + else:e[2],e[3]=e[3],e[2] + return e +def scalar(e,back): + e=dual(e) if back else list(e) + if e[0]=='add':return ['add',['L',e[1]],['L',e[2]],e[3],e[4]] + return ['scale',['L',e[1]],e[2],e[3]] +def primitive_bound(e): + if e[0] in ('clear','copy'):return 1 + q=Q(e[3],e[4]) if e[0]=='add' else Q(e[2],e[3]) + a,b=abs(q.numerator),q.denominator + assert b&(b-1)==0 + if e[0]=='scale': + assert a&(a-1)==0 + return abs(a.bit_length()-b.bit_length())+int(q<0) + # Exact binary Horner multiplication on a cleared private stream, repeated + # halving, signed accumulation into the target, then clear the private stream. + return 3+(a.bit_length()-1)+a.bit_count()+(b.bit_length()-1) + +def emit(back): + out=[];cur=c['start'].copy() + def event(e):out.append(e) + def scal(e,f):event(['scalar',e,f]) + event(['phase','zero_frame_precondition']) + for e in c['precondition']+c['compensation']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['start'][r]==0 for r in regs) + scal(scalar(e,back),0) + event(['phase','entry_adapters']) + # GK: a helper that starts at a nonzero entrance frame has NO entry adapter; its paid wrapper R_E^-1 (Lemma A) precedes every gate + # that touches it and L_E^-1 follows the full-frame cleanup. Words without entrances emit PR #433's events. + entering=[r for r,f in enumerate(c['start']) if r>=2*v and f!=0] + hpe={r for r in range(2*v,n) if c['final'][r]!=1} # HPE: hyperplane-ended helpers (terminal frame != FULL) + assert hpe<=set(entering) + for r,f in enumerate(c['start']): + if r in entering:event(['residual_adapter','pre',r,f]+([c['final'][r]] if c['final'][r]!=1 else [])) # HPE: R_{E,U}^-1 names U + else:event(['adapter','old_to_new',r,f]) + def climb(r,f,part): + old=cur[r] + if old==f:return + assert basis(frames[old]+frames[f])==tuple(frames[f]) + rank=len(frames[f])-len(frames[old]);assert rank>0 + event(['climb',part,r,old,f,rank]);cur[r]=f + # HPE: 'cleanup_tail' = early cleanup gates at their own frames; emitted only when the word has them, so a word + # without hyperplane-ended helpers yields exactly the inherited event stream. + for part in ('A','centers','B')+(('cleanup_tail',) if c.get('tail') else ())+('final',): + event(['phase',part]) + if part in ('A','B','cleanup_tail'): + for e in (c['tail'] if part=='cleanup_tail' else c[part]): + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + for r in regs:climb(r,e[-1],part) + scal(scalar(e,back),e[-1]) + elif part=='centers': + # GK: targets sit at their nonzero-frame-compensation level (0 at the defaults); a centre copy descends + # cf -> served levels (descending chain) -> lowest served level and scatters into each target at its level + lv=lambda r:c.get('target_levels',{}).get(str(r-v),0) + assert all(cur[r]==lv(r) for r in range(v,2*v)) + for k,r in enumerate(c['centers']): + cf=c['center_frames'][k];assert cur[r]==cf + terms=[e for e in c['cut'] if e[2]==r] + path=[cf]+sorted({lv(e[1]) for e in terms}-{cf},key=lambda x:-len(frames[x])) + C=['C',k] + if not back: + scal(['clear',C],cf);scal(['copy',C,['L',r]],cf) + for a in range(len(path)): + if a>0:event(['center',k,path[a-1],path[a],len(frames[path[a-1]])-len(frames[path[a]])]) + for e in terms: + if lv(e[1])==path[a]:scal(['add',['L',e[1]],C,e[3],e[4]],path[a]) + scal(['clear',C],path[-1]) + else: + scal(['clear',C],path[-1]) + for a in range(len(path)-1,-1,-1): + for e in terms: + if lv(e[1])==path[a]:scal(['add',C,['L',e[1]],e[3],e[4]],path[a]) + if a>0:event(['center',k,path[a],path[a-1],len(frames[path[a-1]])-len(frames[path[a]])]) + scal(['add',['L',r],C,-1,1],cf);scal(['clear',C],cf) + else: + for r,f in enumerate(c['final']):climb(r,f,part) + event(['phase','exit_adapters']) + for r,f in enumerate(c['final']): + if r not in hpe:event(['adapter','new_to_old',r,f]) # HPE: no old-convention exit for a helper that ends at U; its post wrapper is L_{E,U}^-1 + event(['phase','full_frame_cleanup']) + for e in c['cleanup']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['final'][r]==1 for r in regs) + scal(scalar(e,back),1) + for r in entering:event(['residual_adapter','post',r,c['start'][r]]+([c['final'][r]] if r in hpe else [])) # HPE: 5th field = terminal frame U # GK: L_E^-1 after the full-frame cleanup + event(['phase','done']) + return out + +def check_local(events,back): + # Literal scalar replay of the emitted stream, including center lifetimes. + state={('L',r):{r:Q(1)} for r in range(n)};live=[];paid=Counter();prims=0;macros=0 + for e in events: + if e[0]=='climb':assert not live;paid[e[5]]+=1 + elif e[0]=='center':assert live==[e[1]];paid[e[4]]+=1 + elif e[0]=='scalar': + op=e[1];tag=op[0];t=tuple(op[1]);macros+=1;prims+=2*primitive_bound(op) + if tag=='clear': + state[t]={} + if t[0]=='C' and t[1] in live:live.remove(t[1]) + elif tag=='copy':state[t]=dict(state.get(tuple(op[2]),{}));live.append(t[1]) + elif tag=='scale':state[t]={j:Q(op[2],op[3])*x for j,x in state[t].items()} + else: + s=tuple(op[2]);q=Q(op[3],op[4]);row=state.setdefault(t,{}) + if t[0]=='C' and t[1] not in live:live.append(t[1]) + for j,x in list(state.get(s,{}).items()): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + assert not live and all(not row for r,row in state.items() if r[0]=='C') + for r in range(n): + expected={r:Q(1)} + if back and r PR552 -> +PR531 invoice_final.py, whose notices and sources are preserved in the package. +Every call selects a hash-bound provider. Shared compiler reserves use maxima; +primitive work, coefficient work, local children and wrappers are also summed +from actual selected provider/orientation records. +""" +import argparse, gzip, hashlib, json +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * +from generated_identity import artifact_identities +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path +assert __debug__, 'Assertions required' + +def read(path): + data=path.read_bytes() + return json.loads(gzip.decompress(data) if path.suffix=='.gz' else data) +def filehash(path): return hashlib.sha256(path.read_bytes()).hexdigest() +def contenthash(path): + data=path.read_bytes() + return hashlib.sha256(gzip.decompress(data) if path.suffix=='.gz' else data).hexdigest() +def programhash(events): + return hashlib.sha256(json.dumps(events,separators=(',',':')).encode()).hexdigest() + +def recount_provider(local_dir, registry): + cp=local_dir/'CANONICAL-WORD.json.gz'; pp=local_dir/'LOCAL-PROGRAMS.json.gz' + rp=local_dir/'INDEPENDENT-LOCAL-REPLAY.json' + w,programs,replay=read(cp),read(pp),read(rp) + checks=read(local_dir/'LOCAL-CHECKS.json') + assert set(programs)=={'forward','backward'} + assert replay['status']=='PASS_INDEPENDENT_LOCAL_SCALAR_FRAME_AND_WRAPPER_REPLAY' + assert replay['canonical_word_sha256']==filehash(cp)==registry['canonical_word_sha256'] + assert replay['local_programs_sha256']==filehash(pp)==registry['local_programs_sha256'] + assert programs==registry['local_programs'] + assert checks==registry['local_program_checks'] + assert filehash(local_dir/'CLIFFORD-RECIPES.json')==registry['exact_local_clifford_recipe_sha256'] + assert filehash(local_dir/'RESIDUAL-ADAPTERS.json')==registry['residual_adapter_sha256'] + v,helpers,h,m=w['v'],w['R'],w['h'],73 + assert (v,helpers,h)==(112,504,9) + assert registry['v']==v and registry['R']==helpers and registry['h']==h + assert registry['ports']==w['ports'] and registry['centers']==w['centers'] + assert replay['v']==v and replay['helpers']==helpers + n=2*v+helpers + widths = [len(w['frames'][w['final'][r]])-len(w['frames'][w['start'][r]]) for r in range(2*v, 2*v+helpers)] # HPE: |final|-|start| + terminal_codim = sum(h-len(w['frames'][w['final'][r]]) for r in range(2*v, 2*v+helpers)) # HPE: 0 for FULL-ended helpers + ends = {r: f for r, f in enumerate(w['final']) if r >= 2*v and f != 1} + assert len(widths) == helpers + entrances = {r: f for r, f in enumerate(w['start']) if r >= 2*v and f != 0} + entering = len(entrances) + assert entering == replay['entering_helpers'] + local = {} + for orientation, events in programs.items(): + # Endpoint equality and native frames were already independently + # replayed on all n columns in the hash-bound receipt above. + env = {('L', r): Q(1) for r in range(n)} + peak = Q(1) + real = macros = workops = 0 + paid = Counter() + wrappers = {'pre': set(), 'post': set()} + for event in events: + tag = event[0] + if tag == 'climb': + paid[event[5]] += 1 + elif tag == 'center': + paid[event[4]] += 1 + elif tag == 'residual_adapter': + _, kind, register, frame, *end = event + assert kind in wrappers and entrances.get(register) == frame + assert end == ([ends[register]] if register in ends else []) # HPE: R_{E,U}^-1 and L_{E,U}^-1 name U + assert register not in wrappers[kind] + wrappers[kind].add(register) + elif tag == 'scalar': + macros += 1 + scalar = event[1] + op, target = scalar[0], tuple(scalar[1]) + if op == 'clear': + env[target] = Q(0) + count = 1 + elif op == 'copy': + env[target] = env[tuple(scalar[2])] + count = 1 + elif op == 'scale': + q = Q(scalar[2], scalar[3]) + numerator, denominator = abs(q.numerator), q.denominator + assert numerator and numerator & (numerator-1) == 0 + assert denominator & (denominator-1) == 0 + env[target] *= abs(q) + count = abs(numerator.bit_length()-denominator.bit_length()) + int(q < 0) + elif op == 'add': + source = tuple(scalar[2]) + q = Q(scalar[3], scalar[4]) + numerator, denominator = abs(q.numerator), q.denominator + assert source != target and numerator > 0 + assert denominator & (denominator-1) == 0 + acc, count = 0, 1 # clear coefficient work + for i, bit in enumerate(bin(numerator)[2:]): + if i: + acc *= 2 + count += 1 + peak = max(peak, acc*env[source]) + if bit == '1': + acc += 1 + count += 1 + peak = max(peak, acc*env[source]) + value = Q(acc) + for _ in range(denominator.bit_length()-1): + value /= 2 + count += 1 + peak = max(peak, value*env[source]) + assert value == abs(q) + count += 2 # signed accumulation and work clear + env[target] = env.get(target, Q(0)) + abs(q)*env[source] + workops += count + else: + raise AssertionError(op) + real += 2*count + peak = max(peak, env[target]) + else: + assert tag in ('adapter', 'phase') + assert wrappers['pre'] == wrappers['post'] == set(entrances) + assert all(value == 0 for register, value in env.items() if register[0] == 'C') + prior = replay['local'][orientation] + assert prior['all_exact_columns'] == n and prior['private_work_erased'] + assert peak == Q(prior['prefix_l1_upper']) and peak < 2**prior['charged_payload_bits'] + bits = peak.numerator.bit_length()-peak.denominator.bit_length()+1 + assert bits == prior['prefix_bits_upper'] + assert real == checks[orientation]['real_component_primitive_bound'] + assert macros == checks[orientation]['scalar_macros'] + assert dict(paid) == {int(r): count for r, count in checks[orientation]['paid_profile'].items()} + assert dict(paid) == {int(r): count for r, count in replay['paid_profiles'][orientation].items()} + local[orientation] = dict( + events=len(events), macros=macros, real_component_primitives=real, + prefix_l1=str(peak), prefix_bits=bits, + coefficient_work_primitive_count=workops, all_exact_columns=n, + dirty_helper_columns=helpers, all_dirty_helper_columns_restored=True, + private_centres_and_coefficient_work_cleared=True, + pre_wrappers=len(wrappers['pre']), post_wrappers=len(wrappers['post']), + endpoint_evidence='Hash-bound fresh INDEPENDENT-LOCAL-REPLAY.json') + + centres = len(w['centers']) + children = sum(checks['forward']['paid_profile'].values()) + assert checks['forward']['paid_profile'] == checks['backward']['paid_profile'] + macro_bound = max(row['macros'] for row in local.values()) + compiler = 64*(m+1)**3 + adapters = 16*(macro_bound+children+n+centres)+64*m + primitive_bound = max(row['real_component_primitives'] for row in local.values())+adapters*compiler + + assert widths==registry['widths'] + artifacts={f.name:filehash(f) for f in local_dir.iterdir() if f.is_file()} + phase_review=read(local_dir/'CLIFFORD-REVIEW.json') + return dict(local=local,helpers=helpers,centres=centres,v=v,h=h,n=n, + entering_helpers=entering,entrance_rank=sum(len(w['frames'][f]) for f in w['start'][2*v:]), + terminal_codimension=terminal_codim, hyperplane_ended_helpers=len(ends), # HPE: always reported (0 for FULL-ended words) + width_inventory=dict(sorted(Counter(widths).items())),widths=widths, + local_adapters=adapters,local_primitive_bound=primitive_bound, + compiler=compiler,children=children,artifacts=artifacts, + paid_profile=checks['forward']['paid_profile'], + program_hashes={o:programhash(events) for o,events in programs.items()},semantic_artifact_sha256=artifact_identities(local_dir)) + + +def run(base, hosted, audit, out, retained_invoice=None): + local_dir=base/'split-centres' + parent=read(local_dir/'GLOBAL-TEMPLATE.json.gz') + template_path=hosted/'GLOBAL-TEMPLATE.json.gz' + template=read(template_path); summary=read(hosted/'HOSTED.json') + owners=read(audit/'OWNERS-AND-PROFILE.json'); control=read(audit/'ASYNC-AUDIT.json') + template_hash=contenthash(template_path) + assert template_hash==control['complex_template_sha256']==owners['template_sha256']==summary['template_sha256'] + assert owners['status']=='PASS_INDEPENDENT_ASYNC_OWNERS_AND_PROFILE' + assert template['recipe']==parent['recipe'] + assert 'local_programs' not in template + assert set(template['local_providers'])==set(PIDS) + providers={pid:recount_provider(base/'providers'/pid,registry) + for pid,registry in template['local_providers'].items()} + for pid,p in providers.items(): + assert owners['provider_phase_semantic_sha256'][pid]==control['provider_phase_semantic_sha256'][pid]==p['semantic_artifact_sha256']['CLIFFORD-REVIEW.json'] + # The fresh controller admission must cite precisely these provider bytes. + for name in ('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json', + 'INDEPENDENT-LOCAL-REPLAY.json','CLIFFORD-RECIPES.json', + 'CLIFFORD-REVIEW.json','RESIDUAL-ADAPTERS.json'): + path='providers/'+pid+'/'+name + assert summary['source_artifacts'][path]==p['artifacts'][name] + assert owners['source_artifacts'][path]==p['artifacts'][name] + v,helpers,h,m,centres,n=112,504,9,73,8,728 + stages,replicas,blocks_per_stream=9,8,4 + call_count=len(template['calls']) + assert call_count==stages*replicas==control['complete_invocations'] + assert control['one_owner_per_complete_invocation'] + assert len({(c['stage'],c['replica']) for c in template['calls']})==call_count + parent_calls={(c['stage'],c['replica']):c for c in parent['calls']} + sweeps=[e for e in template['execution_schedule'] if e['kind']=='local_cover_sweep'] + assert len(sweeps)==call_count + selected=[]; selected_paid=Counter(); provider_counts=Counter(); orientation_counts=Counter() + scalar=coefficient_work=macros=0; wrapper_factors=0 + factors_per_wrapper=2*(m-1) + for c in template['calls']: + pid,orientation=c['provider_id'],c['orientation']; p=providers[pid] + old=parent_calls[(c['stage'],c['replica'])] + assert orientation==old['orientation'] and c['owners'][:2*v]==old['owners'][:2*v] + assert c['local_program_sha256']==p['program_hashes'][orientation] + r=p['local'][orientation] + scalar+=r['real_component_primitives']; coefficient_work+=r['coefficient_work_primitive_count']; macros+=r['macros'] + wrapper_factors+=(r['pre_wrappers']+r['post_wrappers'])*factors_per_wrapper + provider_counts[pid]+=1; orientation_counts[(pid,orientation)]+=1 + selected_paid.update({int(k):v for k,v in p['paid_profile'].items()}) + selected.append(dict(stage=c['stage'],replica=c['replica'],provider_id=pid,orientation=orientation, + program_sha256=c['local_program_sha256'],events=r['events'],macros=r['macros'], + real_component_primitives=r['real_component_primitives'], + coefficient_work_primitive_count=r['coefficient_work_primitive_count'], + entering_helpers=p['entering_helpers'],entrance_rank=p['entrance_rank'], + pre_wrappers=r['pre_wrappers'],post_wrappers=r['post_wrappers'])) + assert provider_counts==COUNTS + # The sweep registry is executable: no hidden use of the historical supplier. + by_call={(c['stage'],c['replica']):c for c in template['calls']} + for e in sweeps: + c=by_call[(e['stage'],e['replica'])] + assert e['provider_id']==c['provider_id'] + assert set(p['compiler'] for p in providers.values())=={64*(m+1)**3} + compiler=64*(m+1)**3 + adapters=max(p['local_adapters'] for p in providers.values()) + primitive_bound=max(p['local_primitive_bound'] for p in providers.values()) + bridge_steps=sum(event['kind']=='bridge' for event in parent['recipe']) + bridge_sweeps=sum(event['kind']=='bridge' for event in template['execution_schedule']) + assert bridge_sweeps==replicas*bridge_steps + bridge_additions=2*v*bridge_sweeps + shifts=blocks_per_stream*v*replicas; moves=2*shifts + parent_live,parent_physical=parent['live'],parent['physical'] + data_stock=2*v*blocks_per_stream*replicas + assert (parent_live-data_stock)%stages==0 + parent_banks=(parent_live-data_stock)//stages + assert parent_banks>=0 and parent_physical==parent_live+helpers+centres+2 + nonlocal_items=(4*v*replicas*stages+2*v*replicas*stages+2*call_count*helpers + +sum(child['replicas'] for child in parent['idle_children'])+stages*parent_banks + +bridge_additions+shifts+moves+parent_live+parent_physical+wrapper_factors) + outside=8*nonlocal_items+64*m + parent_pervertex=(scalar+bridge_additions+shifts+moves+parent_live + +(call_count*adapters+outside)*compiler+64*parent_physical) + live,physical=template['live'],template['physical'] + mass,profile=owners['rank_mass'],owners['paid_profile'] + assert m*live-mass==owners['deficit']==2560 + assert mass==sum(int(r)*count for r,count in profile.items()) + assert physical==live+helpers+centres+2 + assert live==owners['live'] and physical==owners['physical'] + assert live<=parent_live and physical<=parent_physical + assert not template['bank_padding']['families'] + assert owners['explicit_idle_remainder_children']<=owners['source_idle_children_charged'] + # The old dedicated-bank geometry is only a conservative reserve envelope. + # Its singular program is never used as evidence for a mixed invocation. + rebased=parent_pervertex+65*(physical-parent_physical)+(live-parent_live) + used=max(rebased,parent_pervertex); retained=None; payload=512 + if retained_invoice is not None: + previous=read(retained_invoice) + assert previous['compiler']==compiler and previous['charged_prefix_bits']==payload + previous_bound=previous['conservative_pervertex_used'] + used=max(used,previous_bound+parent_pervertex) + retained=dict(sha256=filehash(retained_invoice),previous_pervertex_allowance=previous_bound, + added_complete_new_pervertex=parent_pervertex,policy='Retain old allowance and add entire fresh mixed recount.') + half=m//2; group=2**(half*half) + for i in range(1,half+1): group*=2**(2*i)-1 + stock,streamed_mass=group*physical,group*mass + logical=group*used+64; router=compiler*(logical+1)*(stock+1)**2 + g_bound,e_bound,c0=2**30000,2**100000,2**210000 + total_mass=streamed_mass+e_bound + literal=2*g_bound*stock**2+8*streamed_mass+4*stock+4+32*m + row=2*stock.bit_length()+9909+252+2*payload + maxchild=max(map(int,profile)) + inequalities=dict(local_primitive_bound=primitive_bound<2**48, + logical=logical<2**6050,router=router2*maxchild*maxchild) + assert all(inequalities.values()) + localbits=max(r['prefix_bits'] for p in providers.values() for r in p['local'].values()) + input_l2_bits=(m+1)//2 + required_prefix=localbits+input_l2_bits+call_count+bridge_sweeps+4 + assert required_prefix1 + return PIDS[(PIDS.index(pid)+1)%len(PIDS)] diff --git a/research/complex-571-hpe46/data/OWNERS.json.gz b/research/complex-571-hpe46/data/OWNERS.json.gz new file mode 100644 index 0000000000..8b2984158a Binary files /dev/null and b/research/complex-571-hpe46/data/OWNERS.json.gz differ diff --git a/research/complex-571-hpe46/data/PLAN.json b/research/complex-571-hpe46/data/PLAN.json new file mode 100644 index 0000000000..6947a16b5a --- /dev/null +++ b/research/complex-571-hpe46/data/PLAN.json @@ -0,0 +1,42666 @@ +{ + "status": "LITERAL_OWNER_NOMINATION_PENDING_ADMISSION", + "mode": "frozen-saturation-pattern-time-matching", + "K": 4, + "T": 8, + "M": 73, + "L": 9, + "live": 7168, + "deficit": 2560, + "profile": { + "1": 183968, + "2": 33616, + "3": 23053, + "4": 14008, + "5": 4032, + "6": 4032, + "8": 576, + "25": 1, + "48": 1986 + }, + "order": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 0 + ], + [ + 0, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 0 + ], + [ + 0, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 0 + ], + [ + 0, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 0 + ], + [ + 0, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 1 + ], + [ + 0, + 7 + ], + [ + 6, + 0 + ], + [ + 1, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 2 + ], + [ + 6, + 1 + ], + [ + 1, + 7 + ], + [ + 7, + 0 + ], + [ + 2, + 6 + ], + [ + 3, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 1 + ], + [ + 2, + 7 + ], + [ + 8, + 0 + ], + [ + 3, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 3 + ], + [ + 7, + 2 + ], + [ + 8, + 1 + ], + [ + 3, + 7 + ], + [ + 4, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 2 + ], + [ + 4, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 5 + ], + [ + 7, + 4 + ], + [ + 8, + 3 + ], + [ + 5, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 4 + ], + [ + 6, + 7 + ], + [ + 7, + 6 + ], + [ + 8, + 5 + ], + [ + 7, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ] + ], + "windows": { + "0,0": [ + 16, + [ + 0, + 1, + 2 + ] + ], + "0,2": [ + 16, + [ + 0, + 1, + 2 + ] + ], + "0,1": [ + 8, + [ + 3, + 4, + 5 + ] + ], + "0,3": [ + 8, + [ + 3, + 4, + 5 + ] + ], + "0,4": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ], + "0,6": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + ], + "0,5": [ + 8, + [ + 10, + 11, + 12, + 13, + 14 + ] + ], + "0,7": [ + 8, + [ + 10, + 11, + 12, + 13, + 14 + ] + ], + "0,8": [ + 48, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20 + ] + ], + "0,10": [ + 48, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20 + ] + ], + "0,9": [ + 8, + [ + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ] + ], + "0,11": [ + 8, + [ + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ] + ], + "0,12": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "0,13": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "0,14": [ + 32, + [ + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "0,15": [ + 32, + [ + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "0,16": [ + 16, + [ + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "0,17": [ + 16, + [ + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + ], + "1,0": [ + 16, + [ + 0, + 1, + 2, + 3, + 4 + ] + ], + "1,2": [ + 16, + [ + 0, + 1, + 2, + 3, + 4 + ] + ], + "1,1": [ + 8, + [ + 5, + 6, + 7, + 8 + ] + ], + "1,3": [ + 8, + [ + 5, + 6, + 7, + 8 + ] + ], + "1,4": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ] + ], + "1,6": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ] + ], + "1,5": [ + 8, + [ + 14, + 15, + 16, + 17, + 18, + 19 + ] + ], + "1,7": [ + 8, + [ + 14, + 15, + 16, + 17, + 18, + 19 + ] + ], + "1,8": [ + 48, + [ + 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 + ] + ], + "1,10": [ + 48, + [ + 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 + ] + ], + "1,9": [ + 8, + [ + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34 + ] + ], + "1,11": [ + 8, + [ + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34 + ] + ], + "1,12": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "1,13": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "1,14": [ + 32, + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "1,15": [ + 32, + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "1,16": [ + 16, + [ + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "1,17": [ + 16, + [ + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + ], + "2,0": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + ], + "2,2": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + ], + "2,1": [ + 8, + [ + 8, + 9, + 10, + 11, + 12 + ] + ], + "2,3": [ + 8, + [ + 8, + 9, + 10, + 11, + 12 + ] + ], + "2,4": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ], + "2,6": [ + 32, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + ], + "2,5": [ + 8, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25 + ] + ], + "2,7": [ + 8, + [ + 19, + 20, + 21, + 22, + 23, + 24, + 25 + ] + ], + "2,8": [ + 48, + [ + 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 + ] + ], + "2,10": [ + 48, + [ + 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 + ] + ], + "2,9": [ + 8, + [ + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 + ] + ], + "2,11": [ + 8, + [ + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 + ] + ], + "2,12": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "2,13": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "2,14": [ + 32, + [ + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "2,15": [ + 32, + [ + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "2,16": [ + 16, + [ + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "2,17": [ + 16, + [ + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + ], + "3,0": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ] + ], + "3,2": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ] + ], + "3,1": [ + 8, + [ + 12, + 13, + 14, + 15, + 16, + 17 + ] + ], + "3,3": [ + 8, + [ + 12, + 13, + 14, + 15, + 16, + 17 + ] + ], + "3,4": [ + 32, + [ + 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 + ] + ], + "3,6": [ + 32, + [ + 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 + ] + ], + "3,5": [ + 8, + [ + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32 + ] + ], + "3,7": [ + 8, + [ + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32 + ] + ], + "3,8": [ + 48, + [ + 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, + 38, + 39, + 40 + ] + ], + "3,10": [ + 48, + [ + 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, + 38, + 39, + 40 + ] + ], + "3,9": [ + 8, + [ + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ] + ], + "3,11": [ + 8, + [ + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ] + ], + "3,12": [ + 48, + [ + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "3,13": [ + 48, + [ + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "3,14": [ + 32, + [ + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "3,15": [ + 32, + [ + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "3,16": [ + 16, + [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "3,17": [ + 16, + [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ] + ], + "4,0": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + ], + "4,2": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + ], + "4,1": [ + 8, + [ + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ] + ], + "4,3": [ + 8, + [ + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ] + ], + "4,4": [ + 32, + [ + 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 + ] + ], + "4,6": [ + 32, + [ + 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 + ] + ], + "4,5": [ + 8, + [ + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ] + ], + "4,7": [ + 8, + [ + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ] + ], + "4,8": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ] + ], + "4,10": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ] + ], + "4,9": [ + 8, + [ + 48, + 49, + 50, + 51, + 52, + 53, + 54 + ] + ], + "4,11": [ + 8, + [ + 48, + 49, + 50, + 51, + 52, + 53, + 54 + ] + ], + "4,12": [ + 48, + [ + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "4,13": [ + 48, + [ + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "4,14": [ + 32, + [ + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "4,15": [ + 32, + [ + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "4,16": [ + 16, + [ + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "4,17": [ + 16, + [ + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65 + ] + ], + "5,0": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22 + ] + ], + "5,2": [ + 16, + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22 + ] + ], + "5,1": [ + 8, + [ + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ] + ], + "5,3": [ + 8, + [ + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ] + ], + "5,4": [ + 32, + [ + 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, + 38 + ] + ], + "5,6": [ + 32, + [ + 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, + 38 + ] + ], + "5,5": [ + 8, + [ + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46 + ] + ], + "5,7": [ + 8, + [ + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46 + ] + ], + "5,8": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53 + ] + ], + "5,10": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53 + ] + ], + "5,9": [ + 8, + [ + 54, + 55, + 56, + 57, + 58, + 59 + ] + ], + "5,11": [ + 8, + [ + 54, + 55, + 56, + 57, + 58, + 59 + ] + ], + "5,12": [ + 48, + [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "5,13": [ + 48, + [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "5,14": [ + 32, + [ + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "5,15": [ + 32, + [ + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "5,16": [ + 16, + [ + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "5,17": [ + 16, + [ + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ] + ], + "6,0": [ + 16, + [ + 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 + ] + ], + "6,2": [ + 16, + [ + 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 + ] + ], + "6,1": [ + 8, + [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37 + ] + ], + "6,3": [ + 8, + [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37 + ] + ], + "6,4": [ + 32, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45 + ] + ], + "6,6": [ + 32, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45 + ] + ], + "6,5": [ + 8, + [ + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ] + ], + "6,7": [ + 8, + [ + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ] + ], + "6,8": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 + ] + ], + "6,10": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 + ] + ], + "6,9": [ + 8, + [ + 59, + 60, + 61, + 62, + 63 + ] + ], + "6,11": [ + 8, + [ + 59, + 60, + 61, + 62, + 63 + ] + ], + "6,12": [ + 48, + [ + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "6,13": [ + 48, + [ + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "6,14": [ + 32, + [ + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "6,15": [ + 32, + [ + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "6,16": [ + 16, + [ + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "6,17": [ + 16, + [ + 64, + 65, + 66, + 67, + 68, + 69, + 70 + ] + ], + "7,0": [ + 16, + [ + 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 + ] + ], + "7,2": [ + 16, + [ + 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 + ] + ], + "7,1": [ + 8, + [ + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43 + ] + ], + "7,3": [ + 8, + [ + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43 + ] + ], + "7,4": [ + 32, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51 + ] + ], + "7,6": [ + 32, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51 + ] + ], + "7,5": [ + 8, + [ + 52, + 53, + 54, + 55, + 56, + 57 + ] + ], + "7,7": [ + 8, + [ + 52, + 53, + 54, + 55, + 56, + 57 + ] + ], + "7,8": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ] + ], + "7,10": [ + 48, + [ + 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, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ] + ], + "7,9": [ + 8, + [ + 63, + 64, + 65, + 66 + ] + ], + "7,11": [ + 8, + [ + 63, + 64, + 65, + 66 + ] + ], + "7,12": [ + 48, + [ + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ] + ], + "7,13": [ + 48, + [ + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ] + ], + "7,14": [ + 32, + [ + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ] + ], + "7,15": [ + 32, + [ + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ] + ], + "7,16": [ + 16, + [ + 67, + 68, + 69, + 70, + 71 + ] + ], + "7,17": [ + 16, + [ + 67, + 68, + 69, + 70, + 71 + ] + ] + }, + "sides": { + "0": 0, + "2": 1, + "1": 0, + "3": 1, + "4": 0, + "6": 1, + "5": 0, + "7": 1, + "8": 0, + "10": 1, + "9": 0, + "11": 1, + "12": 0, + "13": 1, + "14": 0, + "15": 1, + "16": 0, + "17": 1 + }, + "pairs": { + "0": 1, + "2": 1, + "1": 1, + "3": 1, + "4": 2, + "6": 2, + "5": 2, + "7": 2, + "8": 3, + "10": 3, + "9": 3, + "11": 3, + "12": 0, + "13": 0, + "14": 1, + "15": 1, + "16": 2, + "17": 2 + }, + "solver_status": "literal_integer_flow_and_per_window_matching", + "gap": null, + "provider_calls": [ + { + "time": 0, + "stage": 0, + "replica": 0, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 1, + "stage": 0, + "replica": 1, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 2, + "stage": 1, + "replica": 0, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 3, + "stage": 0, + "replica": 2, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 4, + "stage": 1, + "replica": 1, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 5, + "stage": 2, + "replica": 0, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 6, + "stage": 0, + "replica": 3, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 7, + "stage": 1, + "replica": 2, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 8, + "stage": 2, + "replica": 1, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 9, + "stage": 3, + "replica": 0, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 10, + "stage": 0, + "replica": 4, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 11, + "stage": 1, + "replica": 3, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 12, + "stage": 2, + "replica": 2, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 13, + "stage": 3, + "replica": 1, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 14, + "stage": 4, + "replica": 0, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 15, + "stage": 0, + "replica": 5, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 16, + "stage": 1, + "replica": 4, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 17, + "stage": 2, + "replica": 3, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 18, + "stage": 3, + "replica": 2, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 19, + "stage": 4, + "replica": 1, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 20, + "stage": 5, + "replica": 0, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 21, + "stage": 0, + "replica": 6, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 22, + "stage": 1, + "replica": 5, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 23, + "stage": 2, + "replica": 4, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 24, + "stage": 3, + "replica": 3, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 25, + "stage": 4, + "replica": 2, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 26, + "stage": 5, + "replica": 1, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 27, + "stage": 0, + "replica": 7, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 28, + "stage": 6, + "replica": 0, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 29, + "stage": 1, + "replica": 6, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 30, + "stage": 2, + "replica": 5, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 31, + "stage": 3, + "replica": 4, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 32, + "stage": 4, + "replica": 3, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 33, + "stage": 5, + "replica": 2, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 34, + "stage": 6, + "replica": 1, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 35, + "stage": 1, + "replica": 7, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 36, + "stage": 7, + "replica": 0, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 37, + "stage": 2, + "replica": 6, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 38, + "stage": 3, + "replica": 5, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 39, + "stage": 4, + "replica": 4, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 40, + "stage": 5, + "replica": 3, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 41, + "stage": 6, + "replica": 2, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 42, + "stage": 7, + "replica": 1, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 43, + "stage": 2, + "replica": 7, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 44, + "stage": 8, + "replica": 0, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 45, + "stage": 3, + "replica": 6, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 46, + "stage": 4, + "replica": 5, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 47, + "stage": 5, + "replica": 4, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 48, + "stage": 6, + "replica": 3, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 49, + "stage": 7, + "replica": 2, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 50, + "stage": 8, + "replica": 1, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 51, + "stage": 3, + "replica": 7, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 52, + "stage": 4, + "replica": 6, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 53, + "stage": 5, + "replica": 5, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 54, + "stage": 6, + "replica": 4, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 55, + "stage": 7, + "replica": 3, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 56, + "stage": 8, + "replica": 2, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 57, + "stage": 4, + "replica": 7, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 58, + "stage": 5, + "replica": 6, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 59, + "stage": 6, + "replica": 5, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 60, + "stage": 7, + "replica": 4, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 61, + "stage": 8, + "replica": 3, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 62, + "stage": 5, + "replica": 7, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 63, + "stage": 6, + "replica": 6, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 64, + "stage": 7, + "replica": 5, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 65, + "stage": 8, + "replica": 4, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 66, + "stage": 6, + "replica": 7, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + { + "time": 67, + "stage": 7, + "replica": 6, + "provider": "atm3", + "orientation": "backward", + "local_program_sha256": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7" + }, + { + "time": 68, + "stage": 8, + "replica": 5, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 69, + "stage": 7, + "replica": 7, + "provider": "ck", + "orientation": "backward", + "local_program_sha256": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7" + }, + { + "time": 70, + "stage": 8, + "replica": 6, + "provider": "atm3", + "orientation": "forward", + "local_program_sha256": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + { + "time": 71, + "stage": 8, + "replica": 7, + "provider": "ck", + "orientation": "forward", + "local_program_sha256": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + } + ], + "per_call_widths": [ + { + "stage": 0, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 0, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 1, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 2, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 0, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 1, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 3, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 2, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 4, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 3, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 5, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 4, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 6, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 5, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 7, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 6, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + { + "stage": 8, + "replica": 7, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + } + ], + "provider_registry": { + "atm3": { + "directory": "providers/atm3", + "artifact_sha256": { + "CANONICAL-WORD.json.gz": "1c031797b3333b6f3485f05330ddf6a15d7cac2ad9beaecf5a9a960977e5fa79", + "LOCAL-PROGRAMS.json.gz": "b258956267af86ce3ccd89152394817b7fe8432d5471cfd6b63fcf1d29d16de6", + "LOCAL-CHECKS.json": "6909165107b6499b7df5327031904533fcceacb72a0c9c1a3c91a9f55361d37f", + "INDEPENDENT-LOCAL-REPLAY.json": "4f37ae45b7e84b7a16d46603bbc052b8f884dafcdce49c0bee825c5306099c2f", + "CLIFFORD-RECIPES.json": "513fcddbaab5a7fd408dee02c4c3ba89999a68913d75661edcb2575dc82c3fd5", + "CLIFFORD-REVIEW.json": "2099058c20b0088a41459c2dab77e6dfb57094c0a746b8d60a29508026af5ed3", + "RESIDUAL-ADAPTERS.json": "029bec7e0a7e4e5d183b1416615a4b2591b8d712471d30b8121cd9a1078726c7" + }, + "ports": [ + 11, + 19, + 35, + 67, + 131, + 259, + 13, + 21, + 37, + 69, + 133, + 261, + 41, + 73, + 137, + 265, + 49, + 81, + 145, + 273, + 161, + 289, + 193, + 321, + 385, + 14, + 22, + 38, + 70, + 134, + 262, + 26, + 74, + 138, + 266, + 50, + 146, + 274, + 98, + 162, + 290, + 194, + 322, + 386, + 28, + 44, + 140, + 268, + 84, + 148, + 276, + 100, + 164, + 292, + 196, + 324, + 388, + 56, + 88, + 152, + 280, + 104, + 168, + 296, + 200, + 328, + 392, + 112, + 176, + 304, + 208, + 336, + 400, + 224, + 352, + 416, + 448, + 508, + 506, + 502, + 494, + 478, + 446, + 382, + 254, + 505, + 501, + 493, + 477, + 445, + 381, + 253, + 499, + 491, + 475, + 443, + 379, + 251, + 487, + 471, + 439, + 375, + 247, + 463, + 431, + 367, + 239, + 415, + 351, + 223, + 319, + 191 + ], + "centers": [ + 229, + 224, + 227, + 225, + 243, + 241, + 259, + 257 + ], + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ], + "actual_paid_profile": { + "1": 2598, + "2": 416, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "orientation_program_sha256": { + "forward": "bf24a308a5552bab4400ac2130dce64e18f3f093eb5bce288950ac05cd2b7f11", + "backward": "0eb5352c4734f59c18a9d5fc48aab3efb9d408a4052b8e4ce5a8f5c8da097fe4" + }, + "artifact_semantic_sha256": { + "CANONICAL-WORD.json.gz": "663a253f7b1cee6d6cd11933ffa7dbc027997a35e4d9e2ce07fa23a3265a40cc", + "LOCAL-PROGRAMS.json.gz": "7c568285cd4f17e05ab8d013c8c66a861299c21d05a6552eaaddd37d6593c696", + "LOCAL-CHECKS.json": "63e07b00e88547a5cd0f9ccb1f667646e31eec3ba68e085c603156fc1781864e", + "INDEPENDENT-LOCAL-REPLAY.json": "4a722ad72cc10ea6554c03b1ca1663df0d67338973370be0958d229e0e883733", + "CLIFFORD-RECIPES.json": "513fcddbaab5a7fd408dee02c4c3ba89999a68913d75661edcb2575dc82c3fd5", + "CLIFFORD-REVIEW.json": "eb3faa13140f94c1c2ee6c8980b1a1b0102446305b332ff542669ba3c6ec580d", + "RESIDUAL-ADAPTERS.json": "618ffc04835a10fc9aad89b6ec2b796eea14d0638f3291ee7e1fe8f0e5984f9b" + } + }, + "ck": { + "directory": "providers/ck", + "artifact_sha256": { + "CANONICAL-WORD.json.gz": "45eff4d858e59b487ed8607389ca57a6b2dbcf4473cbd2100b62d4f8ff672bac", + "LOCAL-PROGRAMS.json.gz": "3bd742d3441c3413ab08aa123827d2bd8741edcccb46d894bcf60e071bcd2638", + "LOCAL-CHECKS.json": "49956970ee3aa3924f6ffd742bc55ff0a608bfdd0c243788e53d750615311b7a", + "INDEPENDENT-LOCAL-REPLAY.json": "52a7cc82d79c9080bfe38e3264a69c14472d35b8b2a2295925185de907594d83", + "CLIFFORD-RECIPES.json": "395ff116b7214c826e1f9ba3affe44f6b5bf82b3c18d8ddcc6617f5515007b92", + "CLIFFORD-REVIEW.json": "67a3ac992295a4a0711289d04ed2b998298faffd3e1ba883896b8ef719f5b3f1", + "RESIDUAL-ADAPTERS.json": "5c682ab693b041fbf3846afd054a1d7dd2ff2b9108f8310f72b601d2d119a18b" + }, + "ports": [ + 11, + 19, + 35, + 67, + 131, + 259, + 13, + 21, + 37, + 69, + 133, + 261, + 41, + 73, + 137, + 265, + 49, + 81, + 145, + 273, + 161, + 289, + 193, + 321, + 385, + 14, + 22, + 38, + 70, + 134, + 262, + 26, + 74, + 138, + 266, + 50, + 146, + 274, + 98, + 162, + 290, + 194, + 322, + 386, + 28, + 44, + 140, + 268, + 84, + 148, + 276, + 100, + 164, + 292, + 196, + 324, + 388, + 56, + 88, + 152, + 280, + 104, + 168, + 296, + 200, + 328, + 392, + 112, + 176, + 304, + 208, + 336, + 400, + 224, + 352, + 416, + 448, + 508, + 506, + 502, + 494, + 478, + 446, + 382, + 254, + 505, + 501, + 493, + 477, + 445, + 381, + 253, + 499, + 491, + 475, + 443, + 379, + 251, + 487, + 471, + 439, + 375, + 247, + 463, + 431, + 367, + 239, + 415, + 351, + 223, + 319, + 191 + ], + "centers": [ + 229, + 224, + 227, + 225, + 243, + 241, + 259, + 257 + ], + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ], + "actual_paid_profile": { + "1": 2518, + "2": 496, + "3": 320, + "4": 192, + "5": 56, + "6": 56, + "8": 8 + }, + "orientation_program_sha256": { + "forward": "b80dbd670b2a001528a0667c94c481f4faeed4494240d4f076b6d1744bdfde78", + "backward": "08366c7cfdaed343aab07a10ecd67d5b8a9adf5fa96948fa8feb0dea7447cea5" + }, + "artifact_semantic_sha256": { + "CANONICAL-WORD.json.gz": "38d4509d451073a4a6e1dc6509d541667a4b7e32862f8eaa17275d948a7127ca", + "LOCAL-PROGRAMS.json.gz": "662ecf2095aee5de0b71d97104a702c376d2e09c0575fc92d1a1a8c39ad71421", + "LOCAL-CHECKS.json": "18b507b213bda15c22eb176dc0ed7a77fba810e84c9241da12453df76f94e677", + "INDEPENDENT-LOCAL-REPLAY.json": "20d1275ac700a20a98078571547a8a6ce6e2bccbbc673edf41e8db8bd7f84ca9", + "CLIFFORD-RECIPES.json": "395ff116b7214c826e1f9ba3affe44f6b5bf82b3c18d8ddcc6617f5515007b92", + "CLIFFORD-REVIEW.json": "43ef489959df90ad8c6ed9ef8bd98d4753d235a8e38d7c37bb85990c383eba0d", + "RESIDUAL-ADAPTERS.json": "6d44c6482a7bbcb4ca0460dbc5d79caa580d1858f43a6f3731207e23d8134d22" + } + } + }, + "source_plan_sha256": "c4c9f4f5db481c982f1d0f9396249ab0593165c1b7ec5d4d2ab850b92c80beac", + "assignment_sha256": "b444356200d64b4e985dff4a26be673fe6d4f41a96e690c05ea58f3bdf60e441", + "source_owners_sha256": "b444356200d64b4e985dff4a26be673fe6d4f41a96e690c05ea58f3bdf60e441" +} diff --git a/research/complex-571-hpe46/data/SPEC.json b/research/complex-571-hpe46/data/SPEC.json new file mode 100644 index 0000000000..02793844f7 --- /dev/null +++ b/research/complex-571-hpe46/data/SPEC.json @@ -0,0 +1,2142 @@ +{ + "schema": "witness-spec/1", + "name": "hpe46", + "data": { + "plan_sha256": "4ace3e4362b713af245d5e407cc83bd4901545c6e77e50cf6dbd0ed43f229d8f", + "owners_sha256": "b444356200d64b4e985dff4a26be673fe6d4f41a96e690c05ea58f3bdf60e441" + }, + "providers": { + "atm3": { + "inventory": { + "4": 48, + "5": 8, + "7": 78, + "8": 94, + "9": 276 + }, + "native_negative_controls": 18, + "phase_edges": 3040, + "expected_profile": { + "1": 2614, + "2": 408, + "3": 288, + "4": 224, + "5": 56, + "6": 56, + "8": 8 + }, + "artifact_semantic_sha256": { + "CANONICAL-WORD.json.gz": "663a253f7b1cee6d6cd11933ffa7dbc027997a35e4d9e2ce07fa23a3265a40cc", + "CLIFFORD-RECIPES.json": "513fcddbaab5a7fd408dee02c4c3ba89999a68913d75661edcb2575dc82c3fd5", + "CLIFFORD-REVIEW.json": "eb3faa13140f94c1c2ee6c8980b1a1b0102446305b332ff542669ba3c6ec580d", + "INDEPENDENT-LOCAL-REPLAY.json": "4a722ad72cc10ea6554c03b1ca1663df0d67338973370be0958d229e0e883733", + "LOCAL-CHECKS.json": "63e07b00e88547a5cd0f9ccb1f667646e31eec3ba68e085c603156fc1781864e", + "LOCAL-PROGRAMS.json.gz": "7c568285cd4f17e05ab8d013c8c66a861299c21d05a6552eaaddd37d6593c696", + "RESIDUAL-ADAPTERS.json": "618ffc04835a10fc9aad89b6ec2b796eea14d0638f3291ee7e1fe8f0e5984f9b" + }, + "entering": 228, + "entrance": 476, + "width_digest": "3a1b3e2985e2b388aff05ea3710e2346b6b35aadf6b923e6568f1ad7d8e99246", + "program_hashes": { + "backward": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7", + "forward": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + "artifacts": { + "LOCAL-CHECKS.json": "6909165107b6499b7df5327031904533fcceacb72a0c9c1a3c91a9f55361d37f", + "CLIFFORD-RECIPES.json": "513fcddbaab5a7fd408dee02c4c3ba89999a68913d75661edcb2575dc82c3fd5", + "RESIDUAL-ADAPTERS.json": "029bec7e0a7e4e5d183b1416615a4b2591b8d712471d30b8121cd9a1078726c7" + }, + "complete_contract": { + "centres": 8, + "children": 3654, + "compiler": 25934336, + "entering_helpers": 228, + "entrance_rank": 476, + "h": 9, + "helpers": 504, + "hyperplane_ended_helpers": 46, + "local": { + "backward": { + "all_dirty_helper_columns_restored": true, + "all_exact_columns": 728, + "coefficient_work_primitive_count": 79672, + "dirty_helper_columns": 504, + "endpoint_evidence": "Hash-bound fresh INDEPENDENT-LOCAL-REPLAY.json", + "events": 21560, + "macros": 16258, + "post_wrappers": 228, + "pre_wrappers": 228, + "prefix_bits": 40, + "prefix_l1": "1044730572630", + "private_centres_and_coefficient_work_cleared": true, + "real_component_primitives": 160888 + }, + "forward": { + "all_dirty_helper_columns_restored": true, + "all_exact_columns": 728, + "coefficient_work_primitive_count": 79640, + "dirty_helper_columns": 504, + "endpoint_evidence": "Hash-bound fresh INDEPENDENT-LOCAL-REPLAY.json", + "events": 21560, + "macros": 16258, + "post_wrappers": 228, + "pre_wrappers": 228, + "prefix_bits": 37, + "prefix_l1": "88876257700", + "private_centres_and_coefficient_work_cleared": true, + "real_component_primitives": 160840 + } + }, + "local_adapters": 335040, + "local_primitive_bound": 8689040094328, + "n": 728, + "paid_profile": { + "1": 2614, + "2": 408, + "3": 288, + "4": 224, + "5": 56, + "6": 56, + "8": 8 + }, + "program_hashes": { + "backward": "802d20d4ec675a4a52ef95ba03d640ff364b8ed2d72b62336ee1ac23c77854d7", + "forward": "4f797dda98d3839539a238392810f0c235008e74db6342ec8e0901be6852a314" + }, + "semantic_artifact_sha256": { + "CANONICAL-WORD.json.gz": "663a253f7b1cee6d6cd11933ffa7dbc027997a35e4d9e2ce07fa23a3265a40cc", + "CLIFFORD-RECIPES.json": "513fcddbaab5a7fd408dee02c4c3ba89999a68913d75661edcb2575dc82c3fd5", + "CLIFFORD-REVIEW.json": "eb3faa13140f94c1c2ee6c8980b1a1b0102446305b332ff542669ba3c6ec580d", + "INDEPENDENT-LOCAL-REPLAY.json": "4a722ad72cc10ea6554c03b1ca1663df0d67338973370be0958d229e0e883733", + "LOCAL-CHECKS.json": "63e07b00e88547a5cd0f9ccb1f667646e31eec3ba68e085c603156fc1781864e", + "LOCAL-PROGRAMS.json.gz": "7c568285cd4f17e05ab8d013c8c66a861299c21d05a6552eaaddd37d6593c696", + "RESIDUAL-ADAPTERS.json": "618ffc04835a10fc9aad89b6ec2b796eea14d0638f3291ee7e1fe8f0e5984f9b" + }, + "terminal_codimension": 46, + "v": 112, + "width_inventory": { + "4": 48, + "5": 8, + "7": 78, + "8": 94, + "9": 276 + }, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + "semantic_phase_sha256": "eb3faa13140f94c1c2ee6c8980b1a1b0102446305b332ff542669ba3c6ec580d", + "expected_local": { + "forward": { + "coefficient_work_primitive_count": 79640, + "events": 21560, + "macros": 16258, + "prefix_l1": "88876257700", + "real_component_primitives": 160840 + }, + "backward": { + "coefficient_work_primitive_count": 79672, + "events": 21560, + "macros": 16258, + "prefix_l1": "1044730572630", + "real_component_primitives": 160888 + } + }, + "wrappers": 228 + }, + "ck": { + "inventory": { + "4": 8, + "5": 48, + "7": 78, + "8": 94, + "9": 276 + }, + "native_negative_controls": 18, + "phase_edges": 3040, + "expected_profile": { + "1": 2534, + "2": 488, + "3": 328, + "4": 184, + "5": 56, + "6": 56, + "8": 8 + }, + "artifact_semantic_sha256": { + "CANONICAL-WORD.json.gz": "38d4509d451073a4a6e1dc6509d541667a4b7e32862f8eaa17275d948a7127ca", + "CLIFFORD-RECIPES.json": "395ff116b7214c826e1f9ba3affe44f6b5bf82b3c18d8ddcc6617f5515007b92", + "CLIFFORD-REVIEW.json": "43ef489959df90ad8c6ed9ef8bd98d4753d235a8e38d7c37bb85990c383eba0d", + "INDEPENDENT-LOCAL-REPLAY.json": "20d1275ac700a20a98078571547a8a6ce6e2bccbbc673edf41e8db8bd7f84ca9", + "LOCAL-CHECKS.json": "18b507b213bda15c22eb176dc0ed7a77fba810e84c9241da12453df76f94e677", + "LOCAL-PROGRAMS.json.gz": "662ecf2095aee5de0b71d97104a702c376d2e09c0575fc92d1a1a8c39ad71421", + "RESIDUAL-ADAPTERS.json": "6d44c6482a7bbcb4ca0460dbc5d79caa580d1858f43a6f3731207e23d8134d22" + }, + "entering": 228, + "entrance": 436, + "width_digest": "48cef57690af124ef5b5fe4bc41ed3e796f33ed94a02b2b613644583e05493f0", + "program_hashes": { + "backward": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7", + "forward": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + "artifacts": { + "LOCAL-CHECKS.json": "49956970ee3aa3924f6ffd742bc55ff0a608bfdd0c243788e53d750615311b7a", + "CLIFFORD-RECIPES.json": "395ff116b7214c826e1f9ba3affe44f6b5bf82b3c18d8ddcc6617f5515007b92", + "RESIDUAL-ADAPTERS.json": "5c682ab693b041fbf3846afd054a1d7dd2ff2b9108f8310f72b601d2d119a18b" + }, + "complete_contract": { + "centres": 8, + "children": 3654, + "compiler": 25934336, + "entering_helpers": 228, + "entrance_rank": 436, + "h": 9, + "helpers": 504, + "hyperplane_ended_helpers": 46, + "local": { + "backward": { + "all_dirty_helper_columns_restored": true, + "all_exact_columns": 728, + "coefficient_work_primitive_count": 79672, + "dirty_helper_columns": 504, + "endpoint_evidence": "Hash-bound fresh INDEPENDENT-LOCAL-REPLAY.json", + "events": 21560, + "macros": 16258, + "post_wrappers": 228, + "pre_wrappers": 228, + "prefix_bits": 40, + "prefix_l1": "1044730572630", + "private_centres_and_coefficient_work_cleared": true, + "real_component_primitives": 160888 + }, + "forward": { + "all_dirty_helper_columns_restored": true, + "all_exact_columns": 728, + "coefficient_work_primitive_count": 79640, + "dirty_helper_columns": 504, + "endpoint_evidence": "Hash-bound fresh INDEPENDENT-LOCAL-REPLAY.json", + "events": 21560, + "macros": 16258, + "post_wrappers": 228, + "pre_wrappers": 228, + "prefix_bits": 37, + "prefix_l1": "88876257700", + "private_centres_and_coefficient_work_cleared": true, + "real_component_primitives": 160840 + } + }, + "local_adapters": 335040, + "local_primitive_bound": 8689040094328, + "n": 728, + "paid_profile": { + "1": 2534, + "2": 488, + "3": 328, + "4": 184, + "5": 56, + "6": 56, + "8": 8 + }, + "program_hashes": { + "backward": "433a8224b14c9963f14de984a3ed520f50537fe28cd4da60b700e7eecbe22ad7", + "forward": "cff18ba448e3c3823f53198d1bc6657ca749e47135e38c92538be8d8d25ec081" + }, + "semantic_artifact_sha256": { + "CANONICAL-WORD.json.gz": "38d4509d451073a4a6e1dc6509d541667a4b7e32862f8eaa17275d948a7127ca", + "CLIFFORD-RECIPES.json": "395ff116b7214c826e1f9ba3affe44f6b5bf82b3c18d8ddcc6617f5515007b92", + "CLIFFORD-REVIEW.json": "43ef489959df90ad8c6ed9ef8bd98d4753d235a8e38d7c37bb85990c383eba0d", + "INDEPENDENT-LOCAL-REPLAY.json": "20d1275ac700a20a98078571547a8a6ce6e2bccbbc673edf41e8db8bd7f84ca9", + "LOCAL-CHECKS.json": "18b507b213bda15c22eb176dc0ed7a77fba810e84c9241da12453df76f94e677", + "LOCAL-PROGRAMS.json.gz": "662ecf2095aee5de0b71d97104a702c376d2e09c0575fc92d1a1a8c39ad71421", + "RESIDUAL-ADAPTERS.json": "6d44c6482a7bbcb4ca0460dbc5d79caa580d1858f43a6f3731207e23d8134d22" + }, + "terminal_codimension": 46, + "v": 112, + "width_inventory": { + "4": 8, + "5": 48, + "7": 78, + "8": 94, + "9": 276 + }, + "widths": [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 7, + 7, + 8, + 8, + 7, + 7, + 7, + 7, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 9, + 8, + 8, + 7, + 7, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 9, + 9, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 7, + 7, + 7, + 7, + 9, + 9, + 7, + 7, + 9, + 8, + 9, + 8, + 8, + 9, + 8, + 9, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 7, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 4, + 8, + 4, + 4, + 4, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5, + 8, + 8, + 8, + 5, + 8, + 5, + 5, + 5 + ] + }, + "semantic_phase_sha256": "43ef489959df90ad8c6ed9ef8bd98d4753d235a8e38d7c37bb85990c383eba0d", + "expected_local": { + "forward": { + "coefficient_work_primitive_count": 79640, + "events": 21560, + "macros": 16258, + "prefix_l1": "88876257700", + "real_component_primitives": 160840 + }, + "backward": { + "coefficient_work_primitive_count": 79672, + "events": 21560, + "macros": 16258, + "prefix_l1": "1044730572630", + "real_component_primitives": 160888 + } + }, + "wrappers": 228 + } + }, + "dispatch": [ + [ + 0, + 0, + "ck" + ], + [ + 0, + 1, + "ck" + ], + [ + 1, + 0, + "ck" + ], + [ + 0, + 2, + "ck" + ], + [ + 1, + 1, + "ck" + ], + [ + 2, + 0, + "ck" + ], + [ + 0, + 3, + "ck" + ], + [ + 1, + 2, + "ck" + ], + [ + 2, + 1, + "ck" + ], + [ + 3, + 0, + "ck" + ], + [ + 0, + 4, + "ck" + ], + [ + 1, + 3, + "ck" + ], + [ + 2, + 2, + "ck" + ], + [ + 3, + 1, + "ck" + ], + [ + 4, + 0, + "ck" + ], + [ + 0, + 5, + "ck" + ], + [ + 1, + 4, + "atm3" + ], + [ + 2, + 3, + "ck" + ], + [ + 3, + 2, + "ck" + ], + [ + 4, + 1, + "atm3" + ], + [ + 5, + 0, + "atm3" + ], + [ + 0, + 6, + "ck" + ], + [ + 1, + 5, + "atm3" + ], + [ + 2, + 4, + "ck" + ], + [ + 3, + 3, + "ck" + ], + [ + 4, + 2, + "ck" + ], + [ + 5, + 1, + "atm3" + ], + [ + 0, + 7, + "atm3" + ], + [ + 6, + 0, + "ck" + ], + [ + 1, + 6, + "ck" + ], + [ + 2, + 5, + "ck" + ], + [ + 3, + 4, + "ck" + ], + [ + 4, + 3, + "ck" + ], + [ + 5, + 2, + "atm3" + ], + [ + 6, + 1, + "ck" + ], + [ + 1, + 7, + "atm3" + ], + [ + 7, + 0, + "ck" + ], + [ + 2, + 6, + "ck" + ], + [ + 3, + 5, + "ck" + ], + [ + 4, + 4, + "atm3" + ], + [ + 5, + 3, + "ck" + ], + [ + 6, + 2, + "atm3" + ], + [ + 7, + 1, + "ck" + ], + [ + 2, + 7, + "ck" + ], + [ + 8, + 0, + "ck" + ], + [ + 3, + 6, + "ck" + ], + [ + 4, + 5, + "ck" + ], + [ + 5, + 4, + "atm3" + ], + [ + 6, + 3, + "atm3" + ], + [ + 7, + 2, + "ck" + ], + [ + 8, + 1, + "ck" + ], + [ + 3, + 7, + "ck" + ], + [ + 4, + 6, + "ck" + ], + [ + 5, + 5, + "ck" + ], + [ + 6, + 4, + "ck" + ], + [ + 7, + 3, + "ck" + ], + [ + 8, + 2, + "atm3" + ], + [ + 4, + 7, + "atm3" + ], + [ + 5, + 6, + "atm3" + ], + [ + 6, + 5, + "ck" + ], + [ + 7, + 4, + "ck" + ], + [ + 8, + 3, + "ck" + ], + [ + 5, + 7, + "ck" + ], + [ + 6, + 6, + "ck" + ], + [ + 7, + 5, + "atm3" + ], + [ + 8, + 4, + "ck" + ], + [ + 6, + 7, + "ck" + ], + [ + 7, + 6, + "atm3" + ], + [ + 8, + 5, + "atm3" + ], + [ + 7, + 7, + "ck" + ], + [ + 8, + 6, + "atm3" + ], + [ + 8, + 7, + "ck" + ] + ], + "call_order": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 0 + ], + [ + 0, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 0 + ], + [ + 0, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 0 + ], + [ + 0, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 0 + ], + [ + 0, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 1 + ], + [ + 0, + 7 + ], + [ + 6, + 0 + ], + [ + 1, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 2 + ], + [ + 6, + 1 + ], + [ + 1, + 7 + ], + [ + 7, + 0 + ], + [ + 2, + 6 + ], + [ + 3, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 1 + ], + [ + 2, + 7 + ], + [ + 8, + 0 + ], + [ + 3, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 3 + ], + [ + 7, + 2 + ], + [ + 8, + 1 + ], + [ + 3, + 7 + ], + [ + 4, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 2 + ], + [ + 4, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 5 + ], + [ + 7, + 4 + ], + [ + 8, + 3 + ], + [ + 5, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 4 + ], + [ + 6, + 7 + ], + [ + 7, + 6 + ], + [ + 8, + 5 + ], + [ + 7, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ] + ], + "expected": { + "hosted_residuals": 36288, + "rank_mass": 520704, + "actual_73column_sigmas": 8022, + "cross_replica_helper_roles": 28748, + "idle_remainders": 2184, + "idle_remainder_profile": { + "25": 1, + "3": 197, + "48": 1986 + }, + "global_profile": { + "1": 183968, + "2": 33616, + "25": 1, + "3": 23053, + "4": 14008, + "48": 1986, + "5": 4032, + "6": 4032, + "8": 576 + }, + "live": 7168, + "physical": 7682, + "conservative_kappa_decimal": "0.001613569607722207", + "kappa_decimal": "0.001613569610580215", + "assembly_controls_rejected": 114, + "gain_baseline_kappa": "0.001601260169988325", + "provider_counts": { + "ck": 53, + "atm3": 19 + }, + "mutations_rejected": 23, + "owners_per_call": 728, + "deficit": 2560, + "kappa": "322713922116043/200000000000000000", + "complex_lower": "101011089084942512869/62500000000000000000000", + "conservative_complex_lower": "1616177422491826820597/1000000000000000000000000", + "entering_helper_roles": 16416 + }, + "build": { + "status": "PASS_HPE46_NATIVE_COMPLEX_AND_CITED_BIT", + "sources": { + "multicold": { + "dir": "complex-multicold", + "pr": 568, + "commit": "71c99ac935a33bb7b59a1b4a7af8725a939b0b90", + "manifest_sha256": "328ce8023d33deb308b0f1ae2320424050f836d791cf60a613ae8408e7d6f3ab", + "full_tree": true, + "files": { + "data/EIGHT-COLD.json": "089617bdc33fd9f27b7fc8e9ae9e01c8e65a86a57c4b6f180f4f378f3f0e6160", + "data/EIGHT-MULTICOLD.json": "d18ea59995d384833c95a7a55d8167f83439b6881a524ab03df972ede3e0d7b9" + } + }, + "structural_gain": { + "dir": "structural-gain", + "pr": 571, + "commit": "b7bdc5a8de18fcf418cfb9c7d83a2b1097a5e4a3", + "manifest_sha256": "eb0499a927665a48a25355075dcb7dc76d0fc43c67ea6d311d9e0242b6d4a25d", + "full_tree": false, + "files": { + "frontier-composition/combined-prefix-word/FULL-WORD.json.gz": "a6cd88224427bad6d00b6fbe1d201a2c09e496c90e2cecdc04d7f2ff11a4ba42" + } + }, + "larger_gain": { + "dir": "larger-gain", + "pr": 569, + "commit": "897213a855b7fb8a1b8b0e552a2f5c42e6c1b326", + "manifest_sha256": "54d67f45ad520f4a134e069336bd0ff639aaeada28d13539298e4f2655c9692d", + "full_tree": false, + "files": { + "providers/build_entrance_promotions.py": "50737e20553b5d44381c58e5b35b5031a6797dfdda1c67a1656069f1f6203cd2", + "providers/coupled_frames_base.py": "b6033cd2959297a624b557f3d04665c8fbb680a4c0987daf0704ef93711700bd", + "providers/search_suffix_kernels.py": "0523c90f036ff01cac9299fe4e47dc40dd04f264f09415985d2c98b4da43371c" + } + }, + "joint_prefix": { + "dir": "complex-joint-prefix", + "pr": 575, + "commit": "eac6f7e378ab622dac50a2fd4b7ef6eab014de44", + "manifest_sha256": "fd30701bd9bd652985db18fa95bee08a34615ef417a2feb2f55efd60a0b5d665", + "full_tree": false, + "files": { + "code/audit_joint_prefix.py": "c01836709f3650a39c46418ac1771980b4b96288e60b51032b5d31419e484c37", + "code/audit_multicold_controls.py": "3ff631f0bdc7e707d4296ff441802cc26da9c6556650469f09ab7253558b4017", + "code/build_joint_prefix.py": "d7804669e528b6fd8d80195a4a2e76efac9bc67440b82c73973f4bc9fe273783", + "data/EIGHTCOLD-JOINT-KERNELS.json": "0381935d8d162eb48044bdf7e36a42af761f6d4032509b9b397ca02d3134f585", + "data/JOINT-PREFIX.json": "0fddbd3f482b72a5197eacd75abe192e1d92f83aa2cde33a76dbc7be1682bcf2" + } + }, + "frame_coalescing": { + "dir": "kernel-frame-coalescing", + "pr": 583, + "commit": "89be768f0157f5a3d8e4db69cf1748768605eac9", + "manifest_sha256": "f336fd702c54422d79c1b9ba7d8699ae6c99518f66a5b5bbc5f3be331fa1fadd", + "full_tree": false, + "files": { + "code/build_frames.py": "59f486c52293c76f1f6140c5f12f7a555a956b455e853c79136fc227deefbc3d" + } + } + }, + "providers": { + "atm3": { + "base": { + "kind": "source_file", + "file": "structural_gain:frontier-composition/combined-prefix-word/FULL-WORD.json.gz", + "content_sha256": "500f005d9cec374f15e086d374578cc8f2c252f9c30444a62d46f2969370a2c6" + }, + "steps": [ + { + "type": "promote", + "recipe": "pkg:data/recipes/atm3-step0-promote.json", + "input_content_sha256": "500f005d9cec374f15e086d374578cc8f2c252f9c30444a62d46f2969370a2c6", + "recipe_sha256": "9a7cafdf9b600ba43985c83969b75151f665b98f454afc1494b9f9ef3dd3916f", + "omission_controls": 4, + "output_content_sha256": "b672a8f4151a23fd420c7622fc127fb6c7f14564bb6cf93edfbd7aecbc38e1f9" + }, + { + "type": "greedy_kernels", + "recipe": "pkg:data/recipes/atm3-step1-greedy_kernels.json", + "input_content_sha256": "b672a8f4151a23fd420c7622fc127fb6c7f14564bb6cf93edfbd7aecbc38e1f9", + "recipe_sha256": "c4bc67f329fc22e226f26bbbf7e67018a639823d99fccfc5a1e798a7a82db43f", + "omission_controls": 48, + "output_content_sha256": "8de156284cde6d475f9ef679d43ef52e9aa57a62fc3a2f554655131396c64236" + }, + { + "type": "frame_coalesce", + "recipe": "pkg:data/recipes/atm3-step2-frame_coalesce.json", + "input_content_sha256": "8de156284cde6d475f9ef679d43ef52e9aa57a62fc3a2f554655131396c64236", + "recipe_sha256": "e6d7ea259a542f2b43a857998f677db4d68f8f36335e98a030bc91ab38ce758c", + "negative_controls": 12, + "output_content_sha256": "dffa3c643b522b524a79220c71aa15be9ee10134b3d597c293c643f6a543d472" + }, + { + "type": "gate_move_coalesce", + "recipe": "pkg:data/recipes/atm3-step3-gate_move_coalesce.json", + "input_content_sha256": "dffa3c643b522b524a79220c71aa15be9ee10134b3d597c293c643f6a543d472", + "recipe_sha256": "3a6b8fec6c8b56a45bf8fae683083636fa295a8914ffa68d11b1f78ba3a2eb9d", + "negative_controls": 6, + "output_content_sha256": "f3f56a044177e0d4e3c0a8d47ce8d7ae90ad3332935d0c7dfb6b8cf28e290df4" + }, + { + "type": "hyperplane_end_closure", + "recipe": "pkg:data/recipes/atm3-step4-hyperplane_end_closure.json", + "input_content_sha256": "f3f56a044177e0d4e3c0a8d47ce8d7ae90ad3332935d0c7dfb6b8cf28e290df4", + "recipe_sha256": "3f5c614b207732d938af375e8d6809c4a9ef061a55bb5e6d478e212bf122a35d", + "negative_controls": 8, + "hyperplane_ended_helpers": 46, + "output_content_sha256": "f4e2feef063058d8a4c51b43cb5cc479dbbd9d746c24abfaf37f3bf0178c140f" + } + ], + "word_content_sha256": "f4e2feef063058d8a4c51b43cb5cc479dbbd9d746c24abfaf37f3bf0178c140f" + }, + "ck": { + "base": { + "kind": "source_file", + "file": "structural_gain:frontier-composition/combined-prefix-word/FULL-WORD.json.gz", + "content_sha256": "500f005d9cec374f15e086d374578cc8f2c252f9c30444a62d46f2969370a2c6" + }, + "steps": [ + { + "type": "greedy_kernels", + "recipe": "pkg:data/recipes/ck-step0-greedy_kernels.json", + "input_content_sha256": "500f005d9cec374f15e086d374578cc8f2c252f9c30444a62d46f2969370a2c6", + "recipe_sha256": "c839199d0e6f8e976978fe97bc0c5579a65ba69dfb6864585b448cccc1113056", + "omission_controls": 48, + "output_content_sha256": "11afa6986e37fd10adda3453d6e55a7353302c9597b93807916a2e5f808e259b" + }, + { + "type": "frame_coalesce", + "recipe": "pkg:data/recipes/ck-step1-frame_coalesce.json", + "input_content_sha256": "11afa6986e37fd10adda3453d6e55a7353302c9597b93807916a2e5f808e259b", + "recipe_sha256": "0c8e5991e1338f03b837814dd060d4dd598c324e3538ee510913e0444a384ee3", + "negative_controls": 12, + "output_content_sha256": "fac4ead822d8d18e441820f9ca87efeb1866414bb0b82817c6cce4655dc59269" + }, + { + "type": "gate_move_coalesce", + "recipe": "pkg:data/recipes/ck-step2-gate_move_coalesce.json", + "input_content_sha256": "fac4ead822d8d18e441820f9ca87efeb1866414bb0b82817c6cce4655dc59269", + "recipe_sha256": "1f5b62c76915b1b8bbcf63b42dcbd87a536c34d3721c4a9b68e651404717bf00", + "negative_controls": 6, + "output_content_sha256": "efddf09daea03240f09f4b820704b07f53782a153e7dff154dbe7406e69cfb0b" + }, + { + "type": "hyperplane_end_closure", + "recipe": "pkg:data/recipes/ck-step3-hyperplane_end_closure.json", + "input_content_sha256": "efddf09daea03240f09f4b820704b07f53782a153e7dff154dbe7406e69cfb0b", + "recipe_sha256": "7c1c88f7d1b3c53dd19d8a01b95434aeade114459fbc377e6706244d6a13bccc", + "negative_controls": 8, + "hyperplane_ended_helpers": 46, + "output_content_sha256": "6620b0a4a40afb4c424749af3f7525afb18e386700d82a88edca8ab7d6c9c3e8" + } + ], + "word_content_sha256": "6620b0a4a40afb4c424749af3f7525afb18e386700d82a88edca8ab7d6c9c3e8" + } + } + } +} \ No newline at end of file diff --git a/research/complex-571-hpe46/data/recipes/atm3-step0-promote.json b/research/complex-571-hpe46/data/recipes/atm3-step0-promote.json new file mode 100644 index 0000000000..1f078bea4f --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/atm3-step0-promote.json @@ -0,0 +1 @@ +[{"pivot": 627, "old_frame": [408, 80, 40, 6], "new_frame": [408, 80, 40, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 629, "old_frame": [408, 80, 40, 6], "new_frame": [408, 80, 40, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 630, "old_frame": [408, 80, 40, 6], "new_frame": [408, 80, 40, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 631, "old_frame": [408, 80, 40, 6], "new_frame": [408, 80, 40, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 635, "old_frame": [272, 144, 96, 6], "new_frame": [272, 144, 96, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 637, "old_frame": [272, 144, 96, 6], "new_frame": [272, 144, 96, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 638, "old_frame": [272, 144, 96, 6], "new_frame": [272, 144, 96, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 639, "old_frame": [272, 144, 96, 6], "new_frame": [272, 144, 96, 6, 1], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 651, "old_frame": [390, 68, 34, 24], "new_frame": [390, 68, 34, 24, 1], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 653, "old_frame": [390, 68, 34, 24], "new_frame": [390, 68, 34, 24, 1], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 654, "old_frame": [390, 68, 34, 24], "new_frame": [390, 68, 34, 24, 1], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 655, "old_frame": [390, 68, 34, 24], "new_frame": [390, 68, 34, 24, 1], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 659, "old_frame": [298, 170, 102, 30], "new_frame": [298, 170, 102, 30, 1], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 661, "old_frame": [298, 170, 102, 30], "new_frame": [298, 170, 102, 30, 1], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 662, "old_frame": [298, 170, 102, 30], "new_frame": [298, 170, 102, 30, 1], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 663, "old_frame": [298, 170, 102, 30], "new_frame": [298, 170, 102, 30, 1], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 667, "old_frame": [390, 96, 20, 10], "new_frame": [390, 96, 20, 10, 1], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 669, "old_frame": [390, 96, 20, 10], "new_frame": [390, 96, 20, 10, 1], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 670, "old_frame": [390, 96, 20, 10], "new_frame": [390, 96, 20, 10, 1], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 671, "old_frame": [390, 96, 20, 10], "new_frame": [390, 96, 20, 10, 1], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 683, "old_frame": [390, 75, 45, 30], "new_frame": [385, 75, 42, 25, 7], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 685, "old_frame": [390, 75, 45, 30], "new_frame": [385, 75, 42, 25, 7], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 686, "old_frame": [390, 75, 45, 30], "new_frame": [385, 75, 42, 25, 7], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 687, "old_frame": [390, 75, 45, 30], "new_frame": [385, 75, 42, 25, 7], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 691, "old_frame": [291, 163, 102, 24], "new_frame": [291, 163, 97, 24, 7], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 693, "old_frame": [291, 163, 102, 24], "new_frame": [291, 163, 97, 24, 7], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 694, "old_frame": [291, 163, 102, 24], "new_frame": [291, 163, 97, 24, 7], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 695, "old_frame": [291, 163, 102, 24], "new_frame": [291, 163, 97, 24, 7], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 699, "old_frame": [389, 96, 24, 3], "new_frame": [385, 96, 24, 4, 3], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 701, "old_frame": [389, 96, 24, 3], "new_frame": [385, 96, 24, 4, 3], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 702, "old_frame": [389, 96, 24, 3], "new_frame": [385, 96, 24, 4, 3], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 703, "old_frame": [389, 96, 24, 3], "new_frame": [385, 96, 24, 4, 3], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 707, "old_frame": [401, 96, 9, 6], "new_frame": [385, 96, 16, 9, 6], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 709, "old_frame": [401, 96, 9, 6], "new_frame": [385, 96, 16, 9, 6], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 710, "old_frame": [401, 96, 9, 6], "new_frame": [385, 96, 16, 9, 6], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 711, "old_frame": [401, 96, 9, 6], "new_frame": [385, 96, 16, 9, 6], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}, {"pivot": 715, "old_frame": [297, 169, 120, 6], "new_frame": [297, 169, 97, 25, 6], "width_before": 5, "width_after": 4, "changed_gates": 12, "profile_delta": {"1": 11, "2": -8, "3": -4, "4": 4}, "local_entropy_delta": -2.0929925750581937, "optimistic_entropy_gain": 2.7782084358496975}, {"pivot": 717, "old_frame": [297, 169, 120, 6], "new_frame": [297, 169, 97, 25, 6], "width_before": 5, "width_after": 4, "changed_gates": 9, "profile_delta": {"1": 12, "2": -7, "3": -1, "4": 1}, "local_entropy_delta": -7.454719949364001, "optimistic_entropy_gain": -2.5835189384561095}, {"pivot": 718, "old_frame": [297, 169, 120, 6], "new_frame": [297, 169, 97, 25, 6], "width_before": 5, "width_after": 4, "changed_gates": 5, "profile_delta": {"1": 9, "2": -5}, "local_entropy_delta": -6.931471805599453, "optimistic_entropy_gain": -2.060270794691562}, {"pivot": 719, "old_frame": [297, 169, 120, 6], "new_frame": [297, 169, 97, 25, 6], "width_before": 5, "width_after": 4, "changed_gates": 3, "profile_delta": {"1": 7, "2": -4}, "local_entropy_delta": -5.545177444479562, "optimistic_entropy_gain": -0.6739764335716711}] \ No newline at end of file diff --git a/research/complex-571-hpe46/data/recipes/atm3-step1-greedy_kernels.json b/research/complex-571-hpe46/data/recipes/atm3-step1-greedy_kernels.json new file mode 100644 index 0000000000..db3a406ee2 --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/atm3-step1-greedy_kernels.json @@ -0,0 +1,561 @@ +{ + "input_content_sha256": "b672a8f4151a23fd420c7622fc127fb6c7f14564bb6cf93edfbd7aecbc38e1f9", + "output_content_sha256": "8de156284cde6d475f9ef679d43ef52e9aa57a62fc3a2f554655131396c64236", + "kernels": [ + { + "pivot": 462, + "frame": [ + 1 + ], + "gates": [ + { + "part": "A", + "index": 39, + "donor": 476, + "coefficient": "1", + "donor_state": [ + 476, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 40, + "donor": 477, + "coefficient": "1", + "donor_state": [ + 477, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 49, + "donor": 463, + "coefficient": "-1", + "donor_state": [ + 463, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 464, + "frame": [ + 1 + ], + "gates": [ + { + "part": "A", + "index": 25, + "donor": 474, + "coefficient": "1", + "donor_state": [ + 474, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 26, + "donor": 475, + "coefficient": "1", + "donor_state": [ + 475, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 465, + "coefficient": "-1", + "donor_state": [ + 465, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 466, + "frame": [ + 7 + ], + "gates": [ + { + "part": "A", + "index": 35, + "donor": 478, + "coefficient": "1", + "donor_state": [ + 478, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 36, + "donor": 479, + "coefficient": "1", + "donor_state": [ + 479, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 467, + "coefficient": "-1", + "donor_state": [ + 467, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 468, + "frame": [ + 7 + ], + "gates": [ + { + "part": "A", + "index": 29, + "donor": 480, + "coefficient": "1", + "donor_state": [ + 480, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 30, + "donor": 481, + "coefficient": "1", + "donor_state": [ + 481, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 469, + "coefficient": "-1", + "donor_state": [ + 469, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 490, + "frame": [ + 25 + ], + "gates": [ + { + "part": "A", + "index": 33, + "donor": 491, + "coefficient": "-1", + "donor_state": [ + 491, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 33, + "donor": 502, + "coefficient": "1", + "donor_state": [ + 502, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 33, + "donor": 503, + "coefficient": "1", + "donor_state": [ + 503, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 492, + "frame": [ + 25 + ], + "gates": [ + { + "part": "A", + "index": 44, + "donor": 493, + "coefficient": "-1", + "donor_state": [ + 493, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 44, + "donor": 504, + "coefficient": "1", + "donor_state": [ + 504, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 44, + "donor": 505, + "coefficient": "1", + "donor_state": [ + 505, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 514, + "frame": [ + 31 + ], + "gates": [ + { + "part": "A", + "index": 38, + "donor": 526, + "coefficient": "1", + "donor_state": [ + 526, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 39, + "donor": 527, + "coefficient": "1", + "donor_state": [ + 527, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 57, + "donor": 515, + "coefficient": "-1", + "donor_state": [ + 515, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 516, + "frame": [ + 31 + ], + "gates": [ + { + "part": "A", + "index": 51, + "donor": 528, + "coefficient": "1", + "donor_state": [ + 528, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 52, + "donor": 529, + "coefficient": "1", + "donor_state": [ + 529, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 64, + "donor": 517, + "coefficient": "-1", + "donor_state": [ + 517, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 510, + "frame": [ + 480 + ], + "gates": [ + { + "part": "B", + "index": 712, + "donor": 511, + "coefficient": "-1", + "donor_state": [ + 511, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 712, + "donor": 524, + "coefficient": "1", + "donor_state": [ + 524, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 712, + "donor": 525, + "coefficient": "1", + "donor_state": [ + 525, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 512, + "frame": [ + 480 + ], + "gates": [ + { + "part": "B", + "index": 717, + "donor": 513, + "coefficient": "-1", + "donor_state": [ + 513, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 717, + "donor": 522, + "coefficient": "1", + "donor_state": [ + 522, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 717, + "donor": 523, + "coefficient": "1", + "donor_state": [ + 523, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 586, + "frame": [ + 486 + ], + "gates": [ + { + "part": "B", + "index": 822, + "donor": 587, + "coefficient": "-1", + "donor_state": [ + 587, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 822, + "donor": 598, + "coefficient": "1", + "donor_state": [ + 598, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 822, + "donor": 599, + "coefficient": "1", + "donor_state": [ + 599, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 588, + "frame": [ + 486 + ], + "gates": [ + { + "part": "B", + "index": 827, + "donor": 589, + "coefficient": "-1", + "donor_state": [ + 589, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 827, + "donor": 600, + "coefficient": "1", + "donor_state": [ + 600, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 827, + "donor": 601, + "coefficient": "1", + "donor_state": [ + 601, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + } + ], + "source": "coldk greedy (multi-cut, cand all, ranks [1, 2, 3], targets false, kmax 6) on w/A_t_m3/FULL-WORD.json.gz", + "final_local_profile": { + "1": 2500, + "2": 484, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "seconds": 0.5898449 +} diff --git a/research/complex-571-hpe46/data/recipes/atm3-step2-frame_coalesce.json b/research/complex-571-hpe46/data/recipes/atm3-step2-frame_coalesce.json new file mode 100644 index 0000000000..fb5e59269a --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/atm3-step2-frame_coalesce.json @@ -0,0 +1,173 @@ +{ + "after": { + "1": 2488, + "2": 490, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "before": { + "1": 2500, + "2": 484, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "changes": [ + { + "after": [ + "add", + 465, + 464, + 1, + 1, + [ + 126, + 1 + ] + ], + "before": [ + "add", + 465, + 464, + 1, + 1, + [ + 1 + ] + ], + "index": 78, + "section": "A" + }, + { + "after": [ + "add", + 467, + 466, + 1, + 1, + [ + 121, + 7 + ] + ], + "before": [ + "add", + 467, + 466, + 1, + 1, + [ + 7 + ] + ], + "index": 75, + "section": "A" + }, + { + "after": [ + "add", + 469, + 468, + 1, + 1, + [ + 120, + 7 + ] + ], + "before": [ + "add", + 469, + 468, + 1, + 1, + [ + 7 + ] + ], + "index": 72, + "section": "A" + }, + { + "after": [ + "add", + 463, + 462, + 1, + 1, + [ + 120, + 1 + ] + ], + "before": [ + "add", + 463, + 462, + 1, + 1, + [ + 1 + ] + ], + "index": 69, + "section": "A" + }, + { + "after": [ + "add", + 517, + 516, + 1, + 1, + [ + 103, + 31 + ] + ], + "before": [ + "add", + 517, + 516, + 1, + 1, + [ + 31 + ] + ], + "index": 66, + "section": "A" + }, + { + "after": [ + "add", + 515, + 514, + 1, + 1, + [ + 102, + 31 + ] + ], + "before": [ + "add", + 515, + 514, + 1, + 1, + [ + 31 + ] + ], + "index": 61, + "section": "A" + } + ], + "input_content_sha256": "8de156284cde6d475f9ef679d43ef52e9aa57a62fc3a2f554655131396c64236" +} diff --git a/research/complex-571-hpe46/data/recipes/atm3-step3-gate_move_coalesce.json b/research/complex-571-hpe46/data/recipes/atm3-step3-gate_move_coalesce.json new file mode 100644 index 0000000000..ac941259cb --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/atm3-step3-gate_move_coalesce.json @@ -0,0 +1,85 @@ +{ + "after": { + "1": 2484, + "2": 492, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "before": { + "1": 2488, + "2": 490, + "3": 280, + "4": 232, + "5": 56, + "6": 56, + "8": 8 + }, + "changes": [ + { + "after": [ + "add", + 491, + 490, + 1, + 1, + [ + 96, + 25 + ] + ], + "before": [ + "add", + 491, + 490, + 1, + 1, + [ + 25 + ] + ], + "index": 35, + "section": "A" + }, + { + "after": [ + "add", + 493, + 492, + 1, + 1, + [ + 97, + 25 + ] + ], + "before": [ + "add", + 493, + 492, + 1, + 1, + [ + 25 + ] + ], + "index": 48, + "section": "A" + } + ], + "input_content_sha256": "dffa3c643b522b524a79220c71aa15be9ee10134b3d597c293c643f6a543d472", + "moves": [ + { + "from": 33, + "section": "A", + "to": 35 + }, + { + "from": 46, + "section": "A", + "to": 48 + } + ] +} diff --git a/research/complex-571-hpe46/data/recipes/atm3-step4-hyperplane_end_closure.json b/research/complex-571-hpe46/data/recipes/atm3-step4-hyperplane_end_closure.json new file mode 100644 index 0000000000..1638f081c6 --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/atm3-step4-hyperplane_end_closure.json @@ -0,0 +1,1113 @@ +{ + "helpers": [ + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 470, + 471, + 472, + 473, + 482, + 483, + 496, + 497, + 520, + 521, + 544, + 545, + 568, + 569, + 580, + 581, + 590, + 591, + 592, + 593, + 602, + 603, + 604, + 605, + 606, + 607, + 609, + 611, + 612, + 613, + 614, + 615 + ], + "early_cleanup": [ + [ + 448, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 449, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 450, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 451, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 452, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 454, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 456, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 457, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 458, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 459, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 464, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 465, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 474, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 475, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 480, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 481, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 496, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 497, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 512, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 513, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 544, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 545, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 578, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 579, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 620, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 621, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 643, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 644, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 653, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 654, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 659, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 660, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 669, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 670, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 675, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 676, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 677, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 678, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 679, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 680, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 681, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 682, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 683, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 684, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 685, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 686, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ] + ], + "helper_final": { + "448": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "449": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "450": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "451": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "452": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "453": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "454": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "455": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "456": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "457": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "458": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "459": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "460": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "461": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "470": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "471": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "472": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "473": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "482": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "483": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "496": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "497": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "520": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "521": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "544": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "545": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "568": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "569": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "580": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "581": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "590": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "591": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "592": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "593": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "602": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "603": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "604": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "605": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "606": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "607": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "609": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "611": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "612": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "613": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "614": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "615": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + }, + "output_content_sha256": "f4e2feef063058d8a4c51b43cb5cc479dbbd9d746c24abfaf37f3bf0178c140f" +} diff --git a/research/complex-571-hpe46/data/recipes/ck-step0-greedy_kernels.json b/research/complex-571-hpe46/data/recipes/ck-step0-greedy_kernels.json new file mode 100644 index 0000000000..89a4677766 --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/ck-step0-greedy_kernels.json @@ -0,0 +1,550 @@ +{ + "input_content_sha256": "500f005d9cec374f15e086d374578cc8f2c252f9c30444a62d46f2969370a2c6", + "output_content_sha256": "11afa6986e37fd10adda3453d6e55a7353302c9597b93807916a2e5f808e259b", + "kernels": [ + { + "pivot": 462, + "frame": [ + 1 + ], + "gates": [ + { + "part": "A", + "index": 39, + "donor": 476, + "coefficient": "1", + "donor_state": [ + 476, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 40, + "donor": 477, + "coefficient": "1", + "donor_state": [ + 477, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 49, + "donor": 463, + "coefficient": "-1", + "donor_state": [ + 463, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 464, + "frame": [ + 1 + ], + "gates": [ + { + "part": "A", + "index": 25, + "donor": 474, + "coefficient": "1", + "donor_state": [ + 474, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 26, + "donor": 475, + "coefficient": "1", + "donor_state": [ + 475, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 465, + "coefficient": "-1", + "donor_state": [ + 465, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 466, + "frame": [ + 7 + ], + "gates": [ + { + "part": "A", + "index": 35, + "donor": 478, + "coefficient": "1", + "donor_state": [ + 478, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 36, + "donor": 479, + "coefficient": "1", + "donor_state": [ + 479, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 467, + "coefficient": "-1", + "donor_state": [ + 467, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 468, + "frame": [ + 7 + ], + "gates": [ + { + "part": "A", + "index": 29, + "donor": 480, + "coefficient": "1", + "donor_state": [ + 480, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 30, + "donor": 481, + "coefficient": "1", + "donor_state": [ + 481, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 58, + "donor": 469, + "coefficient": "-1", + "donor_state": [ + 469, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 490, + "frame": [ + 25 + ], + "gates": [ + { + "part": "A", + "index": 33, + "donor": 491, + "coefficient": "-1", + "donor_state": [ + 491, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 33, + "donor": 502, + "coefficient": "1", + "donor_state": [ + 502, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 33, + "donor": 503, + "coefficient": "1", + "donor_state": [ + 503, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 492, + "frame": [ + 25 + ], + "gates": [ + { + "part": "A", + "index": 44, + "donor": 493, + "coefficient": "-1", + "donor_state": [ + 493, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 44, + "donor": 504, + "coefficient": "1", + "donor_state": [ + 504, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 44, + "donor": 505, + "coefficient": "1", + "donor_state": [ + 505, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 514, + "frame": [ + 31 + ], + "gates": [ + { + "part": "A", + "index": 38, + "donor": 526, + "coefficient": "1", + "donor_state": [ + 526, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 39, + "donor": 527, + "coefficient": "1", + "donor_state": [ + 527, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 57, + "donor": 515, + "coefficient": "-1", + "donor_state": [ + 515, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 516, + "frame": [ + 31 + ], + "gates": [ + { + "part": "A", + "index": 51, + "donor": 528, + "coefficient": "1", + "donor_state": [ + 528, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 52, + "donor": 529, + "coefficient": "1", + "donor_state": [ + 529, + 0 + ], + "split_donor": true + }, + { + "part": "A", + "index": 64, + "donor": 517, + "coefficient": "-1", + "donor_state": [ + 517, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 7, + "2": -4 + } + }, + { + "pivot": 510, + "frame": [ + 480 + ], + "gates": [ + { + "part": "B", + "index": 712, + "donor": 511, + "coefficient": "-1", + "donor_state": [ + 511, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 712, + "donor": 524, + "coefficient": "1", + "donor_state": [ + 524, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 712, + "donor": 525, + "coefficient": "1", + "donor_state": [ + 525, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 512, + "frame": [ + 480 + ], + "gates": [ + { + "part": "B", + "index": 717, + "donor": 513, + "coefficient": "-1", + "donor_state": [ + 513, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 717, + "donor": 522, + "coefficient": "1", + "donor_state": [ + 522, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 717, + "donor": 523, + "coefficient": "1", + "donor_state": [ + 523, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 586, + "frame": [ + 486 + ], + "gates": [ + { + "part": "B", + "index": 822, + "donor": 587, + "coefficient": "-1", + "donor_state": [ + 587, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 822, + "donor": 598, + "coefficient": "1", + "donor_state": [ + 598, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 822, + "donor": 599, + "coefficient": "1", + "donor_state": [ + 599, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + }, + { + "pivot": 588, + "frame": [ + 486 + ], + "gates": [ + { + "part": "B", + "index": 827, + "donor": 589, + "coefficient": "-1", + "donor_state": [ + 589, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 827, + "donor": 600, + "coefficient": "1", + "donor_state": [ + 600, + 0 + ], + "split_donor": true + }, + { + "part": "B", + "index": 827, + "donor": 601, + "coefficient": "1", + "donor_state": [ + 601, + 0 + ], + "split_donor": true + } + ], + "profile_delta": { + "1": 3, + "2": 4, + "3": -4 + } + } + ] +} \ No newline at end of file diff --git a/research/complex-571-hpe46/data/recipes/ck-step1-frame_coalesce.json b/research/complex-571-hpe46/data/recipes/ck-step1-frame_coalesce.json new file mode 100644 index 0000000000..fa80dd680d --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/ck-step1-frame_coalesce.json @@ -0,0 +1,173 @@ +{ + "after": { + "1": 2408, + "2": 570, + "3": 320, + "4": 192, + "5": 56, + "6": 56, + "8": 8 + }, + "before": { + "1": 2420, + "2": 564, + "3": 320, + "4": 192, + "5": 56, + "6": 56, + "8": 8 + }, + "changes": [ + { + "after": [ + "add", + 465, + 464, + 1, + 1, + [ + 126, + 1 + ] + ], + "before": [ + "add", + 465, + 464, + 1, + 1, + [ + 1 + ] + ], + "index": 78, + "section": "A" + }, + { + "after": [ + "add", + 467, + 466, + 1, + 1, + [ + 121, + 7 + ] + ], + "before": [ + "add", + 467, + 466, + 1, + 1, + [ + 7 + ] + ], + "index": 75, + "section": "A" + }, + { + "after": [ + "add", + 469, + 468, + 1, + 1, + [ + 120, + 7 + ] + ], + "before": [ + "add", + 469, + 468, + 1, + 1, + [ + 7 + ] + ], + "index": 72, + "section": "A" + }, + { + "after": [ + "add", + 463, + 462, + 1, + 1, + [ + 120, + 1 + ] + ], + "before": [ + "add", + 463, + 462, + 1, + 1, + [ + 1 + ] + ], + "index": 69, + "section": "A" + }, + { + "after": [ + "add", + 517, + 516, + 1, + 1, + [ + 103, + 31 + ] + ], + "before": [ + "add", + 517, + 516, + 1, + 1, + [ + 31 + ] + ], + "index": 66, + "section": "A" + }, + { + "after": [ + "add", + 515, + 514, + 1, + 1, + [ + 102, + 31 + ] + ], + "before": [ + "add", + 515, + 514, + 1, + 1, + [ + 31 + ] + ], + "index": 61, + "section": "A" + } + ], + "input_content_sha256": "11afa6986e37fd10adda3453d6e55a7353302c9597b93807916a2e5f808e259b" +} diff --git a/research/complex-571-hpe46/data/recipes/ck-step2-gate_move_coalesce.json b/research/complex-571-hpe46/data/recipes/ck-step2-gate_move_coalesce.json new file mode 100644 index 0000000000..c718de4430 --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/ck-step2-gate_move_coalesce.json @@ -0,0 +1,85 @@ +{ + "after": { + "1": 2404, + "2": 572, + "3": 320, + "4": 192, + "5": 56, + "6": 56, + "8": 8 + }, + "before": { + "1": 2408, + "2": 570, + "3": 320, + "4": 192, + "5": 56, + "6": 56, + "8": 8 + }, + "changes": [ + { + "after": [ + "add", + 491, + 490, + 1, + 1, + [ + 96, + 25 + ] + ], + "before": [ + "add", + 491, + 490, + 1, + 1, + [ + 25 + ] + ], + "index": 35, + "section": "A" + }, + { + "after": [ + "add", + 493, + 492, + 1, + 1, + [ + 97, + 25 + ] + ], + "before": [ + "add", + 493, + 492, + 1, + 1, + [ + 25 + ] + ], + "index": 48, + "section": "A" + } + ], + "input_content_sha256": "fac4ead822d8d18e441820f9ca87efeb1866414bb0b82817c6cce4655dc59269", + "moves": [ + { + "from": 33, + "section": "A", + "to": 35 + }, + { + "from": 46, + "section": "A", + "to": 48 + } + ] +} diff --git a/research/complex-571-hpe46/data/recipes/ck-step3-hyperplane_end_closure.json b/research/complex-571-hpe46/data/recipes/ck-step3-hyperplane_end_closure.json new file mode 100644 index 0000000000..2f59c92592 --- /dev/null +++ b/research/complex-571-hpe46/data/recipes/ck-step3-hyperplane_end_closure.json @@ -0,0 +1,1113 @@ +{ + "helpers": [ + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 470, + 471, + 472, + 473, + 482, + 483, + 496, + 497, + 520, + 521, + 544, + 545, + 568, + 569, + 580, + 581, + 590, + 591, + 592, + 593, + 602, + 603, + 604, + 605, + 606, + 607, + 609, + 611, + 612, + 613, + 614, + 615 + ], + "early_cleanup": [ + [ + 448, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 449, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 450, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 451, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 452, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 454, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 456, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 457, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 458, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 459, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 464, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 465, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 474, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 475, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 480, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 481, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 496, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 497, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 512, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 513, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 544, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 545, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 578, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 579, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 620, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 621, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 643, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 644, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 653, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 654, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 659, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 660, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 669, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 670, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 675, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 676, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 677, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 678, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 679, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 680, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 681, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 682, + [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ] + ], + [ + 683, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 684, + [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ] + ], + [ + 685, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ], + [ + 686, + [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + ] + ], + "helper_final": { + "448": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "449": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "450": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "451": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "452": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "453": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "454": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "455": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "456": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "457": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "458": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "459": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "460": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "461": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "470": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "471": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "472": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "473": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "482": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "483": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "496": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "497": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "520": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "521": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "544": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "545": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "568": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "569": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "580": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "581": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "590": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "591": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "592": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "593": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "602": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "603": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "604": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "605": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "606": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "607": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "609": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "611": [ + 256, + 128, + 64, + 32, + 18, + 10, + 6, + 1 + ], + "612": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "613": [ + 256, + 128, + 64, + 32, + 24, + 4, + 2, + 1 + ], + "614": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ], + "615": [ + 256, + 128, + 64, + 32, + 16, + 8, + 6, + 1 + ] + }, + "output_content_sha256": "6620b0a4a40afb4c424749af3f7525afb18e386700d82a88edca8ab7d6c9c3e8" +} diff --git a/research/complex-571-hpe46/verify.py b/research/complex-571-hpe46/verify.py new file mode 100644 index 0000000000..6d3054164d --- /dev/null +++ b/research/complex-571-hpe46/verify.py @@ -0,0 +1,277 @@ +"""Spec-driven official replay: rebuild every provider word from pinned sources through typed construction steps, +localize each word with the unchanged vendor pipeline, then run the spec-driven global admission and assembly. +Prepared with Claude Code assistance. Apache-2.0; see NOTICE.md. Pinned external sources are unchanged packages. +Everything this script runs is named in data/SPEC.json "build" and must be one of the allowlisted step types below; +the spec contains no scripts or commands, only step types, pinned source files, recipes and expected hashes. +""" +import argparse,gzip,hashlib,json,os,subprocess,sys,time,shutil,threading +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from fractions import Fraction as Q +from collections import Counter +assert __debug__, 'Assertions required' +P=Path(__file__).resolve().parent +ap=argparse.ArgumentParser();ap.add_argument('--work',type=Path,required=True) +ap.add_argument('--spec',type=Path,default=P/'data/SPEC.json',help=argparse.SUPPRESS) +ap.add_argument('--jobs',type=int,default=min(8,os.cpu_count() or 4),help='parallel provider chains') +ap.add_argument('--source',action='append',default=[],help='NAME=DIR pinned source package (default: sibling directory named in the spec)') +ap.add_argument('--check-pins',action='store_true',help='check package and source pins, then stop') +ap.add_argument('--until',choices=('locals','all'),default='all',help=argparse.SUPPRESS) +ap.add_argument('--reuse-baseline',type=Path,help=argparse.SUPPRESS) +ap.add_argument('--reuse-local',action='append',default=[],help=argparse.SUPPRESS) +a=ap.parse_args();O=a.work.resolve();SPECFILE=a.spec.resolve();SPEC=json.loads(SPECFILE.read_bytes());BUILD=SPEC['build'] +DISCOVER=os.environ.get('WITNESS_DISCOVER')=='1';discovered={} +given=dict(x.split('=',1)for x in a.source) +SRC={name:Path(given.get(name,P.parent/src['dir'])).resolve()for name,src in BUILD['sources'].items()};S=SRC['multicold'] +def read(p):return json.loads(gzip.decompress(p.read_bytes())if p.suffix=='.gz'else p.read_bytes()) +def sha(p):return hashlib.sha256(p.read_bytes()).hexdigest() +def content(p):return hashlib.sha256(gzip.decompress(p.read_bytes())).hexdigest() +def dump(p,x):p.write_text(json.dumps(x,indent=2)+'\n',newline='\n') +def tree(root,skip):return{f.relative_to(root).as_posix():sha(f)for f in root.rglob('*')if f.is_file()and f!=root/skip and'__pycache__'not in f.parts} +def pinned(where,key,got,label): + """Compare against the spec value; a discovery build (propose.py) records values the spec does not yet hold.""" + if key in where:assert got==where[key],'BUILD PIN MISMATCH %s.%s: expected %s got %s'%(label,key,where[key],got) + else:assert DISCOVER,'BUILD PIN MISSING %s.%s'%(label,key);discovered[label+'.'+key]=got + return got +if SPECFILE==P/'data/SPEC.json':assert tree(P,'MANIFEST.json')==read(P/'MANIFEST.json'),'package MANIFEST' +for name,src in BUILD['sources'].items(): + root=SRC[name];manifest=read(root/'MANIFEST.json') + assert sha(root/'MANIFEST.json')==src['manifest_sha256'],name+' manifest pin' + if src.get('full_tree'):assert tree(root,'MANIFEST.json')==manifest,name+' tree' + files=manifest.get('files',manifest) + for rel,value in src['files'].items():assert sha(root/rel)==value==files[rel],(name,rel) +def ref(r,pin=True): + """'pkg:rel' (this package) or 'NAME:rel' (a pinned file of source NAME).""" + kind,rel=r.split(':',1) + if kind=='pkg':return P/rel + assert rel in BUILD['sources'][kind]['files'],'unpinned source file '+r + return SRC[kind]/rel +if a.check_pins:print('PINS OK',SPEC['name'],sha(SPECFILE));raise SystemExit(0) +assert not O.exists() and not any(O.is_relative_to(x)for x in (P,*SRC.values())) +O.mkdir(parents=True);steps=[];lock=threading.Lock();start=time.monotonic() +env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',PYTHONUTF8='1',PYTHONINTMAXSTRDIGITS='0',MULTICOLD_SOURCE=str(S),GAIN_PR564_SOURCE=str(S),WITNESS_SPEC=str(SPECFILE));env.pop('PYTHONOPTIMIZE',None);env.pop('WITNESS_DISCOVER',None) +def run(name,script,*args): + log=O/(name+'.log');t=time.monotonic();print('RUN',name,flush=True) + with log.open('w')as f:code=subprocess.call([sys.executable,'-B',str(S/'code/run_portable.py'),str(script),*map(str,args)],stdout=f,stderr=subprocess.STDOUT,env=env) + with lock:steps.append(dict(name=name,exit_code=code,seconds=round(time.monotonic()-t,3),log_sha256=sha(log)));dump(O/'STAGES.json',steps) + if code:raise RuntimeError(name+' failed\n'+log.read_text()[-6000:]) + print('PASS',name,flush=True) +B=S/'vendor/pr558';F=B/'vendor/pr552';V=F/'complex-global/vendor531';GK=F/'complex-local/static44/gk' +if a.reuse_baseline:baseline=a.reuse_baseline.resolve() +else:baseline=O/'baseline558';run('frozen558-full-replay',B/'verify.py','--work',baseline) +SEL=baseline/'reconstruction/static44/SELECTION.json';RAW=baseline/'reconstruction/promoted/FULL-WORD.json.gz' +def omissions(path,s,label):pinned(s,'omission_controls',len(read(path)['controls']),label) +# Allowlisted step types: (constructor, paired omission audit), all scripts from the pinned multicold source. +def cold_kernel(word,s,out,tag): + recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',S/'code/build_cold_kernel.py','--input',word,'--recipe',recipe,'--gk-dir',GK,'--out',out) + run(tag+'-omissions',S/'code/audit_kernel_controls.py','--word',out/'FULL-WORD.json.gz','--recipe',recipe,'--out',out/'KERNEL-OMISSION-CONTROLS.json') + omissions(out/'KERNEL-OMISSION-CONTROLS.json',s,tag) +def finalize(word,recipe,tag): + """Discovery only: a new recipe whose output hash is still open is pinned by a first build that must fail exactly at + the final output-hash assertion (every kernel check passed); the printed hash is written into a final recipe.""" + r=read(recipe);h=r.get('output_content_sha256','') + if len(h)==64 and all(c in '0123456789abcdef'for c in h):return recipe + assert DISCOVER,'recipe output hash not pinned: '+tag + r['output_content_sha256']='0'*64;probe=O/(tag+'-probe');probe.mkdir();dump(probe/'RECIPE.json',r) + p=subprocess.run([sys.executable,'-B',str(S/'code/run_portable.py'),str(S/'code/build_multicut_kernels.py'),'--input',str(word),'--recipe',str(probe/'RECIPE.json'),'--gk-dir',str(GK),'--out',str(probe/'out')],capture_output=True,text=True,env=env) + last=(p.stderr.strip().splitlines()or[''])[-1];assert p.returncode and last.startswith('AssertionError: ')and len(last)==16+64,'probe build failed before the output hash:\n'+p.stderr[-3000:] + r['output_content_sha256']=last[16:];final=O/(tag+'-RECIPE.json');final.write_text(json.dumps(r,indent=1)+'\n',newline='\n') + discovered[tag+'.final_recipe']=str(final);return final +def multicut(word,s,out,tag): + recipe=finalize(word,ref(s['recipe']),tag);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',S/'code/build_multicut_kernels.py','--input',word,'--recipe',recipe,'--gk-dir',GK,'--out',out) + run(tag+'-omissions',S/'code/audit_multicold_controls.py','--word',out/'FULL-WORD.json.gz','--recipe',recipe,'--out',out/'MULTICOLD-OMISSION-CONTROLS.json') + omissions(out/'MULTICOLD-OMISSION-CONTROLS.json',s,tag) +PROMOTER=('larger_gain','providers/build_entrance_promotions.py',('providers/coupled_frames_base.py','providers/search_suffix_kernels.py')) +def frame_only(source,word,recipes): + """Independent check that a promotion changed only entrance frames: identical scalar operations, start_extra changed + exactly at the recipe pivots (old -> new frame), frame fields only on scalar events, report changes limited.""" + assert source.keys()==word.keys() + for section in source: + if section in ('A','cut','B','cleanup','precondition'): + assert len(source[section])==len(word[section]) + assert all(x[:-1]==y[:-1]for x,y in zip(source[section],word[section])),'scalar operation changed' + elif section not in ('start_extra','report'):assert source[section]==word[section],'fixed field changed: '+section + entrances=dict(source['start_extra']) + for r in recipes: + k=str(r['pivot']);assert sorted(entrances[k])==sorted(r['old_frame']) and len(r['new_frame'])==len(r['old_frame'])+1,'wrong old entrance '+k + entrances[k]=word['start_extra'][k];assert sorted(entrances[k])==sorted(r['new_frame']),'wrong new entrance '+k + assert word['start_extra']==entrances,'entrance changed outside the recipe' + allowed={'local_profile','local_rank_mass','entrance_rank','entering_helpers','width_inventory'} + assert source['report'].keys()==word['report'].keys() and all(source['report'][k]==word['report'][k]for k in source['report']if k not in allowed) +def promote(word,s,out,tag): + src,builder,deps=PROMOTER;recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + for f in deps:ref(src+':'+f) + run(tag+'-construction',ref(src+':'+builder),'--word',word,'--recipes',recipe,'--gk-dir',GK,'--out',out) + a,b,r=read(word),read(out/'FULL-WORD.json.gz'),read(recipe);frame_only(a,b,r) + import copy + rejected=[] + for name,mut in (('reverted_promotion',lambda w:w['start_extra'].__setitem__(str(r[0]['pivot']),list(r[0]['old_frame']))), + ('scalar_operation_changed',lambda w:w['B'][0].insert(0,'mutated')),('extra_entrance_changed',lambda w:w['start_extra'].__setitem__(next(k for k in w['start_extra']if k not in{str(x['pivot'])for x in r}),[])), + ('fixed_field_changed',lambda w:w.__setitem__('cut',w['cut'][:-1]))): + w=copy.deepcopy(b);mut(w) + try:frame_only(a,w,r) + except(AssertionError,KeyError,IndexError,TypeError):rejected.append(name) + else:raise AssertionError('frame-only control accepted: '+name) + dump(out/'FRAME-ONLY-CONTROLS.json',dict(status='PASS_FRAME_ONLY_PROMOTION_TRANSFER',promotions=len(r),controls=rejected)) + omissions(out/'FRAME-ONLY-CONTROLS.json',s,tag) +JOINT=('joint_prefix',('code/build_joint_prefix.py','code/audit_joint_prefix.py','code/audit_multicold_controls.py')) +def joint_prefix(word,s,out,tag): + """PR575's unchanged joint-prefix constructor with its paired audits: all-kernel omissions, rank-five omissions and + the independent literal-prefix/coverage audit (variant and kernel recipe named in the step).""" + src,(builder,audit,omit)=JOINT;recipe=ref(s['recipe']);kern=ref(s['kernel_recipes']);pinned(s,'recipe_sha256',sha(recipe),tag);pinned(s,'kernel_recipes_sha256',sha(kern),tag) + assert s['variant'] in ('eightcold','width7') + run(tag+'-construction',ref(src+':'+builder),'--input',word,'--recipe',recipe,'--variant',s['variant'],'--gk-dir',GK,'--out',out) + shutil.copyfile(RAW.parent/'PROMOTION.json',out/'PROMOTION.json') + run(tag+'-all-kernel-omissions',ref(src+':'+omit),'--word',out/'FULL-WORD.json.gz','--recipe',kern,'--out',out/'ALL-KERNEL-CONTROLS.json') + run(tag+'-rank5-omissions',B/'code/audit_promoted_scalar.py',out/'FULL-WORD.json.gz',SEL,out/'RANK5-CONTROLS.json') + run(tag+'-independent-joint-prefix-and-coverage',ref(src+':'+audit),'--source',word,'--word',out/'FULL-WORD.json.gz','--recipe',recipe,'--variant',s['variant'],'--kernel-recipes',kern,'--controls',out/'ALL-KERNEL-CONTROLS.json','--rank5-controls',out/'RANK5-CONTROLS.json','--promotion',out/'PROMOTION.json','--selection',SEL,'--out',out/'JOINT-PREFIX-AUDIT.json') + j=read(out/'JOINT-PREFIX-AUDIT.json');assert j['status']=='PASS_INDEPENDENT_LITERAL_PREFIX_AND_FINAL_KERNEL_COVERAGE' + c=read(out/'ALL-KERNEL-CONTROLS.json');assert all(x['forward_rejected'] and x['reflected_rejected'] for x in c['controls']) + omissions(out/'ALL-KERNEL-CONTROLS.json',s,tag);pinned(s,'rank5_controls',len(read(out/'RANK5-CONTROLS.json')['controls']),tag) + pinned(s,'joint_negative_controls',len(j['negative_controls_rejected']),tag) +COAL=('frame_coalescing','code/build_frames.py') +def frame_coalesce(word,s,out,tag): + """PR583's unchanged frame-coalescence constructor (it re-checks profiles, scalar operations, widths and helper + responses and rejects every omission/over-promotion control), plus an independent check that only the recipe's + gate frames changed (old -> new) and every other field of the word is identical.""" + src,builder=COAL;recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',ref(src+':'+builder),'--input',word,'--recipe',recipe,'--gk-dir',GK,'--out',out) + r=read(recipe);c=read(out/'FRAME-CONSTRUCTION.json');assert c['status']=='PASS_SIX_EXACT_FRAME_COALESCENCES' + assert len(c['negative_controls_rejected'])==2*len(r['changes']);pinned(s,'negative_controls',len(c['negative_controls_rejected']),tag) + x,y=read(word),read(out/'FULL-WORD.json.gz');ch={(z['section'],z['index']):z for z in r['changes']};assert len(ch)==len(r['changes']) + assert x.keys()==y.keys() and all(x[k]==y[k]for k in x if k not in('A','B','report')) + for part in ('A','B'): + assert len(x[part])==len(y[part]) + for i,(u,v) in enumerate(zip(x[part],y[part])): + z=ch.pop((part,i),None) + if z is None:assert u==v,'frame changed outside the recipe %s %d'%(part,i) + else:assert u==z['before'] and v==z['after'] and u[:-1]==v[:-1],'wrong coalescence %s %d'%(part,i) + assert not ch,'recipe change outside A/B' + assert all(x['report'][k]==y['report'][k]for k in x['report']if k not in('local_profile','local_rank_mass','status')) +def gate_move_coalesce(word,s,out,tag): + """This package's code/build_gate_moves.py (PR583's constructor extended by commuting gate moves): every passed gate + must commute, helper responses and widths are unchanged, cleanup follows the inherited inverse rule, and every + omission/over-promotion/unmoved control is rejected; then the same independent comparison as frame_coalesce.""" + recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',P/'code/build_gate_moves.py','--input',word,'--recipe',recipe,'--gk-dir',GK,'--out',out) + r=read(recipe);c=read(out/'FRAME-CONSTRUCTION.json');assert c['status']=='PASS_EXACT_GATE_MOVE_FRAME_COALESCENCES' + assert len(c['negative_controls_rejected'])==2*len(r['changes'])+len(r['moves']);pinned(s,'negative_controls',len(c['negative_controls_rejected']),tag) + x,y=read(word),read(out/'FULL-WORD.json.gz') + for m in r['moves']:L=x[m['section']];L.insert(m['to'],L.pop(m['from'])) + ch={(z['section'],z['index']):z for z in r['changes']};assert len(ch)==len(r['changes']) + assert x.keys()==y.keys() and all(x[k]==y[k]for k in x if k not in('A','B','cleanup','report')) + for part in ('A','B'): + assert len(x[part])==len(y[part]) + for i,(u,v) in enumerate(zip(x[part],y[part])): + z=ch.pop((part,i),None) + if z is None:assert u==v,'gate changed outside the recipe %s %d'%(part,i) + else:assert u==z['before'] and v==z['after'] and u[:-1]==v[:-1],'wrong coalescence %s %d'%(part,i) + assert not ch,'recipe change outside A/B' + meta=('width_inventory','entering_helpers','entrance_rank');assert all(x['report'][k]==y['report'][k]for k in x['report']if k not in('local_profile','local_rank_mass','status')+meta) + sys.path.insert(0,str(GK));import gk_common as GC;GC.V=112;ws=GC.widths_of(y) + assert y['report']['width_inventory']=={str(k):v for k,v in sorted(Counter(ws).items())} and y['report']['entering_helpers']==sum(v<9 for v in ws) and y['report']['entrance_rank']==sum(9-v for v in ws),'descriptive width metadata not normalized' +def hyperplane_end(word,s,out,tag): + """This package's code/build_hpe.py: cleanup gates that commute with the whole skipped cleanup prefix run right after B + at the join frame U of their registers, and the helper ends at U (residual T_U T_E^-1, width |U|-|E|; Lemma C, nested + children, Lemma A). Paired audit: code/hpe_controls_atc.py (exact replay of the reordered program plus HPE raw-word + mutations). Then an independent comparison: only early_cleanup, helper_final and the paid profile change.""" + recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',P/'code/build_hpe.py','--input',word,'--recipe',recipe,'--out',out) + run(tag+'-controls',P/'code/hpe_controls_atc.py',out/'FULL-WORD.json.gz',F/'complex-local/inputs/phase-baseline/CANONICAL-WORD.json.gz',out) + c=read(out/'HPE-ATC-CONTROLS.json');assert c['status']=='PASS_HPE_RAW_WORD_CONTROLS';pinned(s,'negative_controls',len(c['rejected']),tag) + r=read(recipe);x,y=read(word),read(out/'FULL-WORD.json.gz') + assert set(y)==set(x)|{'early_cleanup','helper_final'} and 'early_cleanup' not in x and all(x[k]==y[k]for k in x if k!='report') + assert y['early_cleanup']==[[z['cleanup_index'],z['frame']]for z in r['changes']] and y['helper_final']=={str(z['helper']):z['frame']for z in r['changes']} + assert x['report'].keys()==y['report'].keys() and all(x['report'][k]==y['report'][k]for k in x['report']if k not in('local_profile','local_rank_mass','width_inventory')) + inv=Counter({int(k):n for k,n in x['report']['width_inventory'].items()}) + for z in r['changes']:e=len(x['start_extra'][str(z['helper'])]);inv[9-e]-=1;inv[len(z['frame'])-e]+=1 + assert y['report']['width_inventory']=={str(k):n for k,n in sorted(inv.items())if n},'descriptive width metadata not |final|-|start|' +def hyperplane_end_closure(word,s,out,tag): + """This package's code/build_hpe_closure.py: every entering helper whose cleanup partner join is a hyperplane ends there; its cleanup + gate (and, in general, the non-commuting closure of the chosen gates) runs right after B at the minimal common frame. The build is + recomputed from the word and must equal the recipe. Paired audit: code/hpe_controls_atc.py; then the same independent comparison as + hyperplane_end (only early_cleanup, helper_final and the paid profile change; width metadata is |final|-|start|).""" + recipe=ref(s['recipe']);pinned(s,'recipe_sha256',sha(recipe),tag) + run(tag+'-construction',P/'code/build_hpe_closure.py','--input',word,'--recipe',recipe,'--out',out) + run(tag+'-controls',P/'code/hpe_controls_atc.py',out/'FULL-WORD.json.gz',F/'complex-local/inputs/phase-baseline/CANONICAL-WORD.json.gz',out) + c=read(out/'HPE-ATC-CONTROLS.json');assert c['status']=='PASS_HPE_RAW_WORD_CONTROLS';pinned(s,'negative_controls',len(c['rejected']),tag) + r=read(recipe);x,y=read(word),read(out/'FULL-WORD.json.gz') + assert set(y)==set(x)|{'early_cleanup','helper_final'} and 'early_cleanup' not in x and all(x[k]==y[k]for k in x if k!='report') + assert y['early_cleanup']==r['early_cleanup'] and y['helper_final']==r['helper_final'] and sorted(map(int,y['helper_final']))==r['helpers'] + assert x['report'].keys()==y['report'].keys() and all(x['report'][k]==y['report'][k]for k in x['report']if k not in('local_profile','local_rank_mass','width_inventory','status')) + inv=Counter({int(k):n for k,n in x['report']['width_inventory'].items()}) + for h,U in y['helper_final'].items():e=len(x['start_extra'][h]);inv[9-e]-=1;inv[len(U)-e]+=1 + assert y['report']['width_inventory']=={str(k):n for k,n in sorted(inv.items())if n},'descriptive width metadata not |final|-|start|' + pinned(s,'hyperplane_ended_helpers',len(r['helpers']),tag) +STEPS={'hyperplane_end_closure':hyperplane_end_closure,'hyperplane_end':hyperplane_end,'cold_kernel':cold_kernel,'multicut':multicut,'greedy_kernels':multicut,'promote':promote,'joint_prefix':joint_prefix,'frame_coalesce':frame_coalesce,'gate_move_coalesce':gate_move_coalesce} +def build_word(pid,d): + base=d['base'];assert base['kind']in('frozen558_promoted','source_file'),base['kind'] + word=RAW if base['kind']=='frozen558_promoted' else ref(base['file']) + pinned(base,'content_sha256',content(word),pid+'.base') + for i,s in enumerate(d['steps']): + tag='%s-step%d-%s'%(pid,i,s['type']);out=O/tag + if s['type']=='frozen558_scalar_audits': + # inherited static44 and rank-five omission audits on a frozen558-descended word + out.mkdir();run(tag+'-static44',F/'complex-local/static44/audit_scalar.py',word,SEL,out/'STATIC44-SCALAR-AUDIT.json') + shutil.copyfile(RAW.parent/'PROMOTION.json',word.parent/'PROMOTION.json') + run(tag+'-rank5',B/'code/audit_promoted_scalar.py',word,SEL,out/'PROMOTED-SCALAR-AUDIT.json');continue + assert s['type'] in STEPS,'step type not allowlisted: '+s['type'] + pinned(s,'input_content_sha256',content(word),tag) + STEPS[s['type']](word,s,out,tag);word=out/'FULL-WORD.json.gz' + pinned(s,'output_content_sha256',content(word),tag) + pinned(d,'word_content_sha256',content(word),pid) + return word +def localize(pid,word): + local=O/(pid+'-local') + # HPE words (helper_final present) use this package's generalised native chain; every other word the unchanged vendor531 one + hp='helper_final' in read(word);NC=(lambda f:P/'code'/('hpe_'+f))if hp else(lambda f:V/'code'/f) + run(pid+'-all-columns-native-frames',NC('audit_and_transport.py'),'--raw',word,'--routing',F/'complex-local/inputs/phase-baseline/CANONICAL-WORD.json.gz','--out',local) + run(pid+'-both-reflected-ledgers',NC('emit_local.py'),local) + run(pid+'-independent-local-controls',NC('audit_local.py'),local) + run(pid+'-normalized-wrappers',NC('adapters_local.py'),local/'CANONICAL-WORD.json.gz',local/'RESIDUAL-ADAPTERS.json',local/'WRAPPER-CHECKS.json') + run(pid+'-all-phase-edges',B/'code/phases_full.py',local,V/'vendor/clifford') + r=BUILD['providers'][pid].get('retained_local') + if r: # a pinned retained local must be reproduced byte for byte (phase review up to timing) + for name in ('CANONICAL-WORD.json.gz','LOCAL-PROGRAMS.json.gz','LOCAL-CHECKS.json','INDEPENDENT-LOCAL-REPLAY.json','RESIDUAL-ADAPTERS.json','WRAPPER-CHECKS.json','CLIFFORD-RECIPES.json'): + assert sha(local/name)==sha(ref(r+'/'+name)),(pid,name) + fresh,old=read(local/'CLIFFORD-REVIEW.json'),read(ref(r+'/CLIFFORD-REVIEW.json')) + assert {k:v for k,v in fresh.items()if k!='seconds'}=={k:v for k,v in old.items()if k!='seconds'} + return local +reuse=dict(x.split('=',1)for x in a.reuse_local) +words={} +def provider(pid): + word=words[pid]=build_word(pid,BUILD['providers'][pid]) + return Path(reuse[pid]).resolve()if pid in reuse else localize(pid,word) +with ThreadPoolExecutor(max(1,min(a.jobs,len(BUILD['providers']))))as pool: + futures={pid:pool.submit(provider,pid)for pid in sorted(BUILD['providers'])};locals_={pid:f.result()for pid,f in futures.items()} +dump(O/'LOCALS.json',dict(locals={pid:str(l)for pid,l in locals_.items()},words={pid:str(w)for pid,w in words.items()},baseline=str(baseline),discovered=discovered)) +if a.until=='locals':print('LOCALS READY');raise SystemExit(0) +assert not DISCOVER +G=O/'mixed-global' +run('bind-providers',P/'code/bind_providers_portable.py','--baseline',baseline,*[x for pid,l in sorted(locals_.items())for x in('--provider','%s=%s'%(pid,l))],'--plan',P/'data/PLAN.json','--out',G) +run('emit-controller',P/'code/emit_allcold.py','--base',G/'base','--owners',P/'data/OWNERS.json.gz','--plan',G/'PLAN.json','--out',G/'hosted') +(G/'audit').mkdir() +run('independent-controller-and-controls',P/'code/audit_allcold.py',G/'base',G/'hosted',G/'audit/ASYNC-AUDIT.json','--mutation-controls') +run('fresh-invoice',P/'code/invoice_allcold.py','--base',G/'base','--hosted',G/'hosted','--audit',G/'audit','--out',G/'audit','--retained-invoice',V/'evidence/audit/PREFIX-AND-INVOICE.json') +run('conservative-and-native-exact-assembly',P/'code/assemble.py',S,G,O/'ASSEMBLY.json') +run('admission-controls',P/'code/assembly_controls.py','--source-package',S,'--owner',G/'audit/OWNERS-AND-PROFILE.json','--invoice',G/'audit/PREFIX-AND-INVOICE.json','--out',O/'ASSEMBLY-CONTROLS.json') +run('phase-timing-portability-controls',P/'code/phase_timing_controls.py',S,G/'base',G/'audit',O/'PHASE-TIMING-CONTROLS.json') +run('actual-recompression-and-rebound-controls',P/'code/generated_identity_controls.py','--base',G/'base','--audit',G/'audit','--out',O/'GENERATED-IDENTITY-CONTROLS.json') +X=SPEC['expected'] +for pid,local in locals_.items(): + r=read(local/'INDEPENDENT-LOCAL-REPLAY.json');ph=read(local/'CLIFFORD-REVIEW.json') + assert len(r['negative_controls_rejected'])==SPEC['providers'][pid]['native_negative_controls'] and r['paid_profiles']['forward']==r['paid_profiles']['backward'] + assert ph['status']=='PASS_NEW_WORD_EXACT_LOCAL_PHASE_RECIPES' and ph['all_child_equalities_include_global_phase']is True and ph['directed_edges']==SPEC['providers'][pid]['phase_edges'] and ph['endpoint_adapters']==224 +assert len(read(G/'audit/ASYNC-AUDIT.json')['mutations_rejected'])==X['mutations_rejected'] +assert len(read(O/'ASSEMBLY-CONTROLS.json')['rejected_controls'])==X['assembly_controls_rejected'] +z=read(O/'ASSEMBLY.json');assert Q(z['kappa_decimal'])==Q(X['kappa_decimal']) and Q(z['conservative_kappa_decimal'])==Q(X['conservative_kappa_decimal']) +assert {str(k):v for k,v in z['complex_profile'].items()}==X['global_profile'] and z['provider_counts']==X['provider_counts'] +r=dict(status=SPEC['build']['status'],kappa=z['kappa'],kappa_decimal=z['kappa_decimal'],complex_lower=z['complex_lower'],bit_lower=z['bit_lower'],conservative_kappa_decimal=z['conservative_kappa_decimal'],conservative_complex_lower=z['conservative_complex_lower'],global_profile=z['complex_profile'],provider_counts=z['provider_counts'],surcharge_model=z['surcharge_model'],seconds=time.monotonic()-start,reused=dict(baseline=bool(a.reuse_baseline),locals=sorted(reuse)),scope=z['scope']);dump(O/'RESULT.json',r) +paths=['PHASE-TIMING-CONTROLS.json','GENERATED-IDENTITY-CONTROLS.json','mixed-global/audit/IDLE-REMAINDER-FRAMES.json','RESULT.json','ASSEMBLY.json','ASSEMBLY-CONTROLS.json','mixed-global/BINDING.json','mixed-global/audit/ASYNC-AUDIT.json','mixed-global/audit/OWNERS-AND-PROFILE.json','mixed-global/audit/PREFIX-AND-INVOICE.json'] +paths+=sorted(f.relative_to(O).as_posix()for f in O.glob('*-step*/*.json')) +for pid in sorted(set(locals_)-set(reuse)): + for fn in ('INDEPENDENT-LOCAL-REPLAY.json','CLIFFORD-REVIEW.json','WRAPPER-CHECKS.json'):paths.append(pid+'-local/'+fn) +dump(O/'RECEIPT.json',dict(status=r['status'],steps=steps,artifacts={name:sha(O/name)for name in paths},manifest_sha256=sha(P/'MANIFEST.json'),spec_sha256=sha(SPECFILE),source_manifest_sha256={n:sha(SRC[n]/'MANIFEST.json')for n in SRC})) +print(json.dumps(r,indent=2))